[cig-commits] r7742 - in long/3D/Gale/trunk: . src/Underworld/plugins/Output/VTKOutput

walter at geodynamics.org walter at geodynamics.org
Tue Jul 24 11:20:27 PDT 2007


Author: walter
Date: 2007-07-24 11:20:27 -0700 (Tue, 24 Jul 2007)
New Revision: 7742

Modified:
   long/3D/Gale/trunk/
   long/3D/Gale/trunk/src/Underworld/plugins/Output/VTKOutput/VTKOutput.c
Log:
 r1900 at earth:  boo | 2007-07-24 10:44:58 -0700
 Make parallel particle output work



Property changes on: long/3D/Gale/trunk
___________________________________________________________________
Name: svk:merge
   - 3a629746-de10-0410-b17b-fd6ecaaa963e:/cig:1899
   + 3a629746-de10-0410-b17b-fd6ecaaa963e:/cig:1900

Modified: long/3D/Gale/trunk/src/Underworld/plugins/Output/VTKOutput/VTKOutput.c
===================================================================
--- long/3D/Gale/trunk/src/Underworld/plugins/Output/VTKOutput/VTKOutput.c	2007-07-24 18:20:22 UTC (rev 7741)
+++ long/3D/Gale/trunk/src/Underworld/plugins/Output/VTKOutput/VTKOutput.c	2007-07-24 18:20:27 UTC (rev 7742)
@@ -133,14 +133,22 @@
   Rheology_Index      rheologyCount;
   YieldRheology*      rheology; 
   
-  FILE *fp;
+  FILE *fp, *pfp;
   Name filename;
   
-  Stg_asprintf( &filename, "%s/particles.%d.%05d.vtu", outputPath,
-                myRank, timeStep);
-  
+  /* Open the processor specific output file */
+  Stg_asprintf(&filename,"%s/particles.%d.%05d.vtu",outputPath,myRank,timeStep);
   fp=fopen(filename,"w");
-  
+  Memory_Free( filename );
+
+  /* Open the parallel control file */
+  if(myRank==0)
+    {
+      Stg_asprintf( &filename, "%s/particles.%05d.pvtu", outputPath, timeStep);
+      pfp=fopen(filename,"w");
+      Memory_Free( filename );
+    }
+      
   /* Write a header */
   fprintf(fp,"<?xml version=\"1.0\"?>\n");
   fprintf(fp,"<VTKFile type=\"UnstructuredGrid\" version=\"0.1\" byte_order=\"LittleEndian\">\n");
@@ -149,6 +157,17 @@
           (num_particles-1)/stepping+1);
   fprintf(fp,"      <Points>\n");
   fprintf(fp,"      <DataArray type=\"Float32\" NumberOfComponents=\"3\" format=\"ascii\">\n");
+
+  if(myRank==0)
+    {
+      fprintf(pfp,"<?xml version=\"1.0\"?>\n\
+<VTKFile type=\"PUnstructuredGrid\" version=\"0.1\" byte_order=\"LittleEndian\">\n\
+  <PUnstructuredGrid GhostLevel=\"0\">\n\
+    <PPoints>\n\
+      <DataArray type=\"Float32\" NumberOfComponents=\"3\" format=\"ascii\"/>\n\
+    </PPoints>\n\
+    <PCellData></PCellData>\n");
+    }
   
   /* We need many iterations, because the values are written
      separately from the coordinates. */
@@ -275,26 +294,41 @@
           fprintf(fp,"      </Points>\n");
           fprintf(fp,"      <PointData Scalars=\"Viscosity\" Tensors=\"Stress\">\n");
           fprintf(fp,"        <DataArray type=\"Float32\" Name=\"Viscosity\" format=\"ascii\">\n");
+          if(myRank==0)
+            {
+              fprintf(pfp,"      <PPointData Scalars=\"Viscosity\" Tensors=\"Stress\">\n");
+              fprintf(pfp,"        <PDataArray type=\"Float32\" Name=\"Viscosity\" format=\"ascii\"/>\n");
+            }
           break;
         case 1:
           fprintf(fp,"\n        </DataArray>\n");
           fprintf(fp,"        <DataArray type=\"Float32\" Name=\"Yielding_fraction\" format=\"ascii\">\n");
+          if(myRank==0)
+            fprintf(pfp,"        <PDataArray type=\"Float32\" Name=\"Yielding_fraction\" format=\"ascii\"/>\n");
           break;
         case 2:
           fprintf(fp,"\n        </DataArray>\n");
           fprintf(fp,"        <DataArray type=\"Float32\" Name=\"Stress\" format=\"ascii\" NumberOfComponents=\"9\">\n");
+          if(myRank==0)
+            fprintf(pfp,"        <PDataArray type=\"Float32\" Name=\"Stress\" format=\"ascii\" NumberOfComponents=\"9\"/>\n");
           break;
         case 3:
           fprintf(fp,"\n        </DataArray>\n");
           fprintf(fp,"        <DataArray type=\"Float32\" Name=\"Density\" format=\"ascii\">\n");
+          if(myRank==0)
+            fprintf(pfp,"        <PDataArray type=\"Float32\" Name=\"Density\" format=\"ascii\"/>\n");
           break;
         case 4:
           fprintf(fp,"\n        </DataArray>\n");
           fprintf(fp,"        <DataArray type=\"Float32\" Name=\"Alpha\" format=\"ascii\">\n");
+          if(myRank==0)
+            fprintf(pfp,"        <PDataArray type=\"Float32\" Name=\"Alpha\" format=\"ascii\"/>\n");
           break;
         case 5:
           fprintf(fp,"\n        </DataArray>\n");
           fprintf(fp,"        <DataArray type=\"Float32\" Name=\"Thermal_Diffusivity\" format=\"ascii\">\n");
+          if(myRank==0)
+            fprintf(pfp,"        <PDataArray type=\"Float32\" Name=\"Thermal_Diffusivity\" format=\"ascii\"/>\n");
           break;
         case 6:
           fprintf(fp,"\n        </DataArray>\n");
@@ -319,7 +353,16 @@
         }
     }
   fclose(fp);
-  Memory_Free( filename );
+  if(myRank==0)
+    {
+      fprintf(pfp,"        </PPointData>\n");
+      for(i=0;i<nprocs;++i)
+        fprintf(pfp,"    <Piece Source=\"particles.%d.%05d.vtu\"/>\n",
+                i,timeStep);
+      fprintf(pfp,"  </PUnstructuredGrid>\n\
+</VTKFile>\n");
+      fclose(pfp);
+    }
 }
 
 /* Print out the coordinates of the mesh. */
@@ -467,7 +510,7 @@
     <PPoints>\n\
       <PDataArray type=\"Float32\" NumberOfComponents=\"3\"/>\n\
     </PPoints>\n\
-    <PPointData Scalars=\"Pressure\">\n",pnx-1,pny-1,pnz-1);
+    <PPointData Scalars=\"PressureField\">\n",pnx-1,pny-1,pnz-1);
             }
           header_printed=1;
         }
@@ -476,7 +519,7 @@
          appropriate file pointer to output for this variable. */
       if(!strcmp(feVar->name,"PressureField")){
         VTKOutput_print_coords(pressure_fp, feVar->feMesh, nDims, pn);
-        fprintf(pressure_fp,"      <PointData Scalars=\"Pressure\">\n");
+        fprintf(pressure_fp,"      <PointData Scalars=\"PressureField\">\n");
         fp=pressure_fp;
         pfp=ppressure_fp;
       } else {
@@ -576,21 +619,24 @@
   fclose(pressure_fp);
   fclose(field_fp);
 
-  fprintf(ppressure_fp,"      </PPointData>\n");
-  fprintf(pfield_fp,"      </PPointData>\n");
-  for(i=0;i<nprocs;++i)
+  if(myRank==0)
     {
-      fprintf(ppressure_fp,"    <Piece Extent=\"%d %d %d %d %d %d\"\n\
+      fprintf(ppressure_fp,"      </PPointData>\n");
+      fprintf(pfield_fp,"      </PPointData>\n");
+      for(i=0;i<nprocs;++i)
+        {
+          fprintf(ppressure_fp,"    <Piece Extent=\"%d %d %d %d %d %d\"\n\
              Source=\"pressure.%d.%05d.vts\"/>\n",0,pnx-1,0,pny-1,0,pnz-1,
-              i,self->timeStep);
-      fprintf(pfield_fp,"    <Piece Extent=\"%d %d %d %d %d %d\"\n\
+                  i,self->timeStep);
+          fprintf(pfield_fp,"    <Piece Extent=\"%d %d %d %d %d %d\"\n\
              Source=\"fields.%d.%05d.vts\"/>\n",0,nx-1,0,ny-1,0,nz-1,
-              i,self->timeStep);
-    }
-  fprintf(ppressure_fp,"  </PStructuredGrid>\n\
+                  i,self->timeStep);
+        }
+      fprintf(ppressure_fp,"  </PStructuredGrid>\n\
 </VTKFile>\n");
-  fprintf(pfield_fp,"  </PStructuredGrid>\n\
+      fprintf(pfield_fp,"  </PStructuredGrid>\n\
 </VTKFile>\n");
+    }
 
 }
      



More information about the cig-commits mailing list