<p><b>ringler@lanl.gov</b> 2009-09-09 16:23:08 -0600 (Wed, 09 Sep 2009)</p><p>added code to properly map the doubly periodic mesh data<br>
</p><hr noshade><pre><font color="gray">Modified: trunk/swmodel/matlab/MapGridToDx.m
===================================================================
--- trunk/swmodel/matlab/MapGridToDx.m        2009-09-09 18:10:06 UTC (rev 49)
+++ trunk/swmodel/matlab/MapGridToDx.m        2009-09-09 22:23:08 UTC (rev 50)
@@ -5,9 +5,16 @@
 
 clear all
 
+% begin periodic parameters
+doPeriodic = 1
+dc = 1000.0
+nx = 200
+ny = 200
+% end periodic parameters
+
 doWrite = 1
-doVor = 1
-doTri = 1
+doVor = 0
+doTri = 0
 doEdge = 1
 
 ncid = netcdf.open('../grid.nc','nc_nowrite');
@@ -28,6 +35,14 @@
     verticesOnCell=netcdf.getVar(ncid, verticesOnCell_id);
     areaCell = netcdf.getVar(ncid, areaCell_id);
 
+    xC_id = netcdf.inqVarID(ncid,'xCell');
+    yC_id = netcdf.inqVarID(ncid,'yCell');
+    zC_id = netcdf.inqVarID(ncid,'zCell');
+
+    xC=netcdf.getVar(ncid, xC_id);
+    yC=netcdf.getVar(ncid, yC_id);
+    zC=netcdf.getVar(ncid, zC_id);
+    
     work=size(nEdgesOnCell(:,1));
     nCells=work(1)
 
@@ -47,11 +62,30 @@
        dlmwrite('../dx/vor.loop.data', iloop, ...
         'precision', '%10i', '-append');
        edge(1:nEdgesOnCell(i)) = iedge;
+     
      for j=1:nEdgesOnCell(i)
-         x(1) = xV(verticesOnCell(j,i));
-         x(2) = yV(verticesOnCell(j,i));
-         x(3) = zV(verticesOnCell(j,i));
-         dlmwrite('../dx/vor.position.data', x, 'delimiter', '\t', ...
+         x(1,j) = xV(verticesOnCell(j,i));
+         x(2,j) = yV(verticesOnCell(j,i));
+         x(3,j) = zV(verticesOnCell(j,i));
+     end;
+     
+     if (doPeriodic == 1);
+         for j=1:nEdgesOnCell(i);
+             dx = x(1,j)-xC(i);
+             dy = x(2,j)-yC(i);
+             if(abs(dx) &gt; 0.1*nx*dc);
+                 if(dx &gt; 0);, x(1,j) = x(1,j) - nx*dc;, end;
+                 if(dx &lt; 0);, x(1,j) = x(1,j) + nx*dc;, end;
+             end;
+             if(abs(dy) &gt; 0.1*ny*dc*sqrt(3)/2);
+                 if(dy &gt; 0);, x(2,j) = x(2,j) - sqrt(3)*nx*dc/2;, end;
+                 if(dy &lt; 0);, x(2,j) = x(2,j) + sqrt(3)*nx*dc/2;, end;
+             end;
+         end;
+     end;
+     
+     for j=1:nEdgesOnCell(i)
+         dlmwrite('../dx/vor.position.data', x(:,j), 'delimiter', '\t', ...
              'precision', '%18.10e', '-append');
          edge(j) = iedge + j - 1;
        end;
@@ -79,7 +113,15 @@
     zC=netcdf.getVar(ncid, zC_id);
     cellsOnVertex=netcdf.getVar(ncid, cellsOnVertex_id);
     areaTriangle = netcdf.getVar(ncid, areaTriangle_id);
+    
+    xV_id = netcdf.inqVarID(ncid,'xVertex');
+    yV_id = netcdf.inqVarID(ncid,'yVertex');
+    zV_id = netcdf.inqVarID(ncid,'zVertex');
 
+    xV=netcdf.getVar(ncid, xV_id);
+    yV=netcdf.getVar(ncid, yV_id);
+    zV=netcdf.getVar(ncid, zV_id);
+
     work=size(cellsOnVertex);
     nVertices = work(:,2)
 
@@ -100,10 +142,28 @@
         'precision', '%10i', '-append');
      edge(1:3) = iedge;
      for j=1:nCellsOnVertex
-         x(1) = xC(cellsOnVertex(j,i));
-         x(2) = yC(cellsOnVertex(j,i));
-         x(3) = zC(cellsOnVertex(j,i));
-         dlmwrite('../dx/tri.position.data', x, 'delimiter', '\t', ...
+         x(1,j) = xC(cellsOnVertex(j,i));
+         x(2,j) = yC(cellsOnVertex(j,i));
+         x(3,j) = zC(cellsOnVertex(j,i));
+     end;
+     
+     if (doPeriodic == 1);
+         for j=1:nCellsOnVertex;
+             dx = x(1,j)-xV(i);
+             dy = x(2,j)-yV(i);
+             if(abs(dx) &gt; 0.1*nx*dc);
+                 if(dx &gt; 0);, x(1,j) = x(1,j) - nx*dc;, end;
+                 if(dx &lt; 0);, x(1,j) = x(1,j) + nx*dc;, end;
+             end;
+             if(abs(dy) &gt; 0.1*ny*dc*sqrt(3)/2);
+                 if(dy &gt; 0);, x(2,j) = x(2,j) - sqrt(3)*nx*dc/2;, end;
+                 if(dy &lt; 0);, x(2,j) = x(2,j) + sqrt(3)*nx*dc/2;, end;
+             end;
+         end;
+     end;
+     
+     for j=1:nCellsOnVertex;
+         dlmwrite('../dx/tri.position.data', x(:,j), 'delimiter', '\t', ...
              'precision', '%18.10e', '-append')
          edge(j) = iedge + j - 1;
      end;
@@ -119,6 +179,12 @@
 
 if (doEdge == 1)
     
+    if (doWrite == 1)
+        system('rm -f ../dx/edge.position.data');
+        system('rm -f ../dx/normal.data');
+        system('rm -f ../dx/tangent.data');
+    end;
+    
     [nEdgesName, nEdgesLength] = netcdf.inqDim(ncid,1);
     xE_id = netcdf.inqVarID(ncid,'xEdge');
     yE_id = netcdf.inqVarID(ncid,'yEdge');
@@ -132,6 +198,14 @@
     zE=netcdf.getVar(ncid, zE_id);
     cellsOnEdge=netcdf.getVar(ncid, cellsOnEdge_id);
     
+    xC_id = netcdf.inqVarID(ncid,'xCell');
+    yC_id = netcdf.inqVarID(ncid,'yCell');
+    zC_id = netcdf.inqVarID(ncid,'zCell');
+
+    xC=netcdf.getVar(ncid, xC_id);
+    yC=netcdf.getVar(ncid, yC_id);
+    zC=netcdf.getVar(ncid, zC_id);
+    
     for i=1:nEdges
       
         j1 = cellsOnEdge(1,i);
@@ -141,48 +215,44 @@
         
         x(1) = xC(iCell2)-xC(iCell1);
         x(2) = yC(iCell2)-yC(iCell1);
-        x(3) = zC(iCell2)-zC(iCell2);
+        x(3) = zC(iCell2)-zC(iCell1);
         
-        normal(:,i) = unit_vector(x(:));
+        normal = x ./ sqrt(x(1)^2 + x(2)^2 + x(3)^2);
+        
         x(1) = xE(i); x(2) = yE(i); x(3) = zE(i);
-        tangent(:,i) = cross(x(:),normal(:,i));
-    end;
+        tangent(1) = x(2).*normal(3) - x(3).*normal(2);
+        tangent(2) = x(3).*normal(1) - x(1).*normal(3);
+        tangent(3) = x(1).*normal(2) - x(2).*normal(1);
     
     
- if (doWrite == 1)
-     
-    system('rm -f ../dx/edge.position.data')
-    system('rm -f ../dx/normal.data')
-    system('rm -f ../dx/tangent.data')
-    
-    for i=1:nEdges
+        if (doWrite == 1)
         
-        dlmwrite('../dx/edge.position.data', xE(i), ...
-           'precision', '%18.10e', '-append')
+            dlmwrite('../dx/edge.position.data', xE(i), ...
+             'precision', '%18.10e', '-append')
        
-        dlmwrite('../dx/edge.position.data', yE(i), ...
-           'precision', '%18.10e', '-append')
+            dlmwrite('../dx/edge.position.data', yE(i), ...
+             'precision', '%18.10e', '-append')
        
-        dlmwrite('../dx/edge.position.data', zE(i), ...
-           'precision', '%18.10e', '-append')
+            dlmwrite('../dx/edge.position.data', zE(i), ...
+             'precision', '%18.10e', '-append')
        
-        dlmwrite('../dx/normal.data', normal(1,i), ...
-           'precision', '%18.10e', '-append')
+            dlmwrite('../dx/normal.data', normal(1), ...
+             'precision', '%18.10e', '-append')
        
-        dlmwrite('../dx/normal.data', normal(2,i), ...
-           'precision', '%18.10e', '-append')
+            dlmwrite('../dx/normal.data', normal(2), ...
+             'precision', '%18.10e', '-append')
        
-        dlmwrite('../dx/normal.data', normal(3,i), ...
-           'precision', '%18.10e', '-append')
+            dlmwrite('../dx/normal.data', normal(3), ...
+             'precision', '%18.10e', '-append')
        
-        dlmwrite('../dx/tangent.data', tangent(1,i), ...
-           'precision', '%18.10e', '-append')
+            dlmwrite('../dx/tangent.data', tangent(1), ...
+             'precision', '%18.10e', '-append')
        
-        dlmwrite('../dx/tangent.data', tangent(2,i), ...
-           'precision', '%18.10e', '-append')
+            dlmwrite('../dx/tangent.data', tangent(2), ...
+             'precision', '%18.10e', '-append')
        
-        dlmwrite('../dx/tangent.data', tangent(3,i), ...
-           'precision', '%18.10e', '-append')
+            dlmwrite('../dx/tangent.data', tangent(3), ...
+             'precision', '%18.10e', '-append')
     
     end;
     

</font>
</pre>