[cig-commits] r19740 - long/3D/SNAC/trunk/Snac/snac2vtk

echoi at geodynamics.org echoi at geodynamics.org
Wed Mar 7 20:09:48 PST 2012


Author: echoi
Date: 2012-03-07 20:09:47 -0800 (Wed, 07 Mar 2012)
New Revision: 19740

Modified:
   long/3D/SNAC/trunk/Snac/snac2vtk/snac2vtk.c
Log:
Write stress components.


Modified: long/3D/SNAC/trunk/Snac/snac2vtk/snac2vtk.c
===================================================================
--- long/3D/SNAC/trunk/Snac/snac2vtk/snac2vtk.c	2012-03-08 01:01:13 UTC (rev 19739)
+++ long/3D/SNAC/trunk/Snac/snac2vtk/snac2vtk.c	2012-03-08 04:09:47 UTC (rev 19740)
@@ -85,6 +85,7 @@
 int jacobi(double** a, double* d, double** v);
 int eigsrt(double* d, double** v);
 struct stressMeasures {
+    double     	stressComponents[6];
     double     	principalStresses[3];
     double	eigenvectors[3][3];
     double	pressure;
@@ -485,6 +486,7 @@
      */
     fprintf( vtkOut, "      <CellData Scalars=\"Plastic strain\">\n");
 
+
     /*
      * Write out the plastic strain information 
      */
@@ -546,6 +548,130 @@
     fprintf( vtkOut, "        </DataArray>\n");
 	
     /*
+     * Write out the stress tensor 
+     */
+    fprintf( vtkOut, "        <DataArray type=\"Float32\" Name=\"Sxx\" format=\"ascii\">\n");
+    if (fseek( stressTensorIn, dumpIteration * elementLocalCount * sizeof(float) * numStressComponentsPerElement, SEEK_SET )!=0) {
+		fprintf(stderr, "Cannot find read required portion of Snac stress tensor output file:  rank=%d: %d, %d, %d,  dump iteration=%d, node count=%d\n", 
+				rank, rankI, rankJ, rankK,
+				dumpIteration, nodeLocalCount );
+		exit(1);
+    }
+	for( element_gI = 0; element_gI < elementLocalCount; element_gI++ ) {
+		double	        	elementStressTensor[3][3]={{0,0,0},{0,0,0},{0,0,0}};
+		struct stressMeasures	elementStressMeasures;
+		/*
+		 *  Build average stress tensor for element and derive useful stress measures
+		 */
+		DeriveStressMeasures(stressTensorIn, elementStressTensor, &elementStressMeasures);
+		/*
+		 *  Write the chosen derived stress value to Paraview file
+		 */
+		fprintf( vtkOut, "%g ", elementStressMeasures.stressComponents[0] );
+    }
+    fprintf( vtkOut, "        </DataArray>\n");
+    fprintf( vtkOut, "        <DataArray type=\"Float32\" Name=\"Syy\" format=\"ascii\">\n");
+    if (fseek( stressTensorIn, dumpIteration * elementLocalCount * sizeof(float) * numStressComponentsPerElement, SEEK_SET )!=0) {
+		fprintf(stderr, "Cannot find read required portion of Snac stress tensor output file:  rank=%d: %d, %d, %d,  dump iteration=%d, node count=%d\n", 
+				rank, rankI, rankJ, rankK,
+				dumpIteration, nodeLocalCount );
+		exit(1);
+    }
+	for( element_gI = 0; element_gI < elementLocalCount; element_gI++ ) {
+		double	        	elementStressTensor[3][3]={{0,0,0},{0,0,0},{0,0,0}};
+		struct stressMeasures	elementStressMeasures;
+		/*
+		 *  Build average stress tensor for element and derive useful stress measures
+		 */
+		DeriveStressMeasures(stressTensorIn, elementStressTensor, &elementStressMeasures);
+		/*
+		 *  Write the chosen derived stress value to Paraview file
+		 */
+		fprintf( vtkOut, "%g ", elementStressMeasures.stressComponents[1] );
+    }
+    fprintf( vtkOut, "        </DataArray>\n");
+    fprintf( vtkOut, "        <DataArray type=\"Float32\" Name=\"Szz\" format=\"ascii\">\n");
+    if (fseek( stressTensorIn, dumpIteration * elementLocalCount * sizeof(float) * numStressComponentsPerElement, SEEK_SET )!=0) {
+		fprintf(stderr, "Cannot find read required portion of Snac stress tensor output file:  rank=%d: %d, %d, %d,  dump iteration=%d, node count=%d\n", 
+				rank, rankI, rankJ, rankK,
+				dumpIteration, nodeLocalCount );
+		exit(1);
+    }
+	for( element_gI = 0; element_gI < elementLocalCount; element_gI++ ) {
+		double	        	elementStressTensor[3][3]={{0,0,0},{0,0,0},{0,0,0}};
+		struct stressMeasures	elementStressMeasures;
+		/*
+		 *  Build average stress tensor for element and derive useful stress measures
+		 */
+		DeriveStressMeasures(stressTensorIn, elementStressTensor, &elementStressMeasures);
+		/*
+		 *  Write the chosen derived stress value to Paraview file
+		 */
+		fprintf( vtkOut, "%g ", elementStressMeasures.stressComponents[2] );
+    }
+    fprintf( vtkOut, "        </DataArray>\n");
+    fprintf( vtkOut, "        <DataArray type=\"Float32\" Name=\"Sxy\" format=\"ascii\">\n");
+    if (fseek( stressTensorIn, dumpIteration * elementLocalCount * sizeof(float) * numStressComponentsPerElement, SEEK_SET )!=0) {
+		fprintf(stderr, "Cannot find read required portion of Snac stress tensor output file:  rank=%d: %d, %d, %d,  dump iteration=%d, node count=%d\n", 
+				rank, rankI, rankJ, rankK,
+				dumpIteration, nodeLocalCount );
+		exit(1);
+    }
+	for( element_gI = 0; element_gI < elementLocalCount; element_gI++ ) {
+		double	        	elementStressTensor[3][3]={{0,0,0},{0,0,0},{0,0,0}};
+		struct stressMeasures	elementStressMeasures;
+		/*
+		 *  Build average stress tensor for element and derive useful stress measures
+		 */
+		DeriveStressMeasures(stressTensorIn, elementStressTensor, &elementStressMeasures);
+		/*
+		 *  Write the chosen derived stress value to Paraview file
+		 */
+		fprintf( vtkOut, "%g ", elementStressMeasures.stressComponents[3] );
+    }
+    fprintf( vtkOut, "        </DataArray>\n");
+    fprintf( vtkOut, "        <DataArray type=\"Float32\" Name=\"Sxz\" format=\"ascii\">\n");
+    if (fseek( stressTensorIn, dumpIteration * elementLocalCount * sizeof(float) * numStressComponentsPerElement, SEEK_SET )!=0) {
+		fprintf(stderr, "Cannot find read required portion of Snac stress tensor output file:  rank=%d: %d, %d, %d,  dump iteration=%d, node count=%d\n", 
+				rank, rankI, rankJ, rankK,
+				dumpIteration, nodeLocalCount );
+		exit(1);
+    }
+	for( element_gI = 0; element_gI < elementLocalCount; element_gI++ ) {
+		double	        	elementStressTensor[3][3]={{0,0,0},{0,0,0},{0,0,0}};
+		struct stressMeasures	elementStressMeasures;
+		/*
+		 *  Build average stress tensor for element and derive useful stress measures
+		 */
+		DeriveStressMeasures(stressTensorIn, elementStressTensor, &elementStressMeasures);
+		/*
+		 *  Write the chosen derived stress value to Paraview file
+		 */
+		fprintf( vtkOut, "%g ", elementStressMeasures.stressComponents[4] );
+    }
+    fprintf( vtkOut, "        </DataArray>\n");
+    fprintf( vtkOut, "        <DataArray type=\"Float32\" Name=\"Syz\" format=\"ascii\">\n");
+    if (fseek( stressTensorIn, dumpIteration * elementLocalCount * sizeof(float) * numStressComponentsPerElement, SEEK_SET )!=0) {
+		fprintf(stderr, "Cannot find read required portion of Snac stress tensor output file:  rank=%d: %d, %d, %d,  dump iteration=%d, node count=%d\n", 
+				rank, rankI, rankJ, rankK,
+				dumpIteration, nodeLocalCount );
+		exit(1);
+    }
+	for( element_gI = 0; element_gI < elementLocalCount; element_gI++ ) {
+		double	        	elementStressTensor[3][3]={{0,0,0},{0,0,0},{0,0,0}};
+		struct stressMeasures	elementStressMeasures;
+		/*
+		 *  Build average stress tensor for element and derive useful stress measures
+		 */
+		DeriveStressMeasures(stressTensorIn, elementStressTensor, &elementStressMeasures);
+		/*
+		 *  Write the chosen derived stress value to Paraview file
+		 */
+		fprintf( vtkOut, "%g ", elementStressMeasures.stressComponents[5] );
+    }
+    fprintf( vtkOut, "        </DataArray>\n");
+
+    /*
      * Write out the pressure information 
      */
     fprintf( vtkOut, "        <DataArray type=\"Float32\" Name=\"Pressure\" format=\"ascii\">\n");
@@ -924,6 +1050,12 @@
 	if( doAps )
 	    fprintf( vtkOut1, "        <PDataArray type=\"Float32\" Name=\"Plastic strain\"/>\n");
 	fprintf( vtkOut1, "        <PDataArray type=\"Float32\" Name=\"Strain rate\"/>\n");
+	fprintf( vtkOut1, "        <PDataArray type=\"Float32\" Name=\"Sxx\"/>\n");
+	fprintf( vtkOut1, "        <PDataArray type=\"Float32\" Name=\"Syy\"/>\n");
+	fprintf( vtkOut1, "        <PDataArray type=\"Float32\" Name=\"Szz\"/>\n");
+	fprintf( vtkOut1, "        <PDataArray type=\"Float32\" Name=\"Sxy\"/>\n");
+	fprintf( vtkOut1, "        <PDataArray type=\"Float32\" Name=\"Sxz\"/>\n");
+	fprintf( vtkOut1, "        <PDataArray type=\"Float32\" Name=\"Syz\"/>\n");
 	fprintf( vtkOut1, "        <PDataArray type=\"Float32\" Name=\"Pressure\"/>\n");
 	if( doHPr )
 	    fprintf( vtkOut1, "        <PDataArray type=\"Float32\" Name=\"Hydrostatic pressure\"/>\n");
@@ -1268,6 +1400,13 @@
 	elementStressTensor[2][0]=stressTensorArray[4];
 	elementStressTensor[2][1]=stressTensorArray[5];
 
+    elementStressMeasures->stressComponents[0] = stressTensorArray[0];
+    elementStressMeasures->stressComponents[1] = stressTensorArray[1];
+    elementStressMeasures->stressComponents[2] = stressTensorArray[2];
+    elementStressMeasures->stressComponents[3] = stressTensorArray[3];
+    elementStressMeasures->stressComponents[4] = stressTensorArray[4];
+    elementStressMeasures->stressComponents[5] = stressTensorArray[5];
+
     /*
      *  Diagonalize and find principal stresses from mean stress tensor for element
      */
@@ -1283,7 +1422,7 @@
      *  Calculate maximum shear stress sigma1-sigma3
      */
     if(elementStressMeasures->principalStresses[2]>elementStressMeasures->principalStresses[0]) fprintf(stderr,"[2]>[0]\n");
-    elementStressMeasures->maxShearStress = (elementStressMeasures->principalStresses[0]-elementStressMeasures->principalStresses[2]);
+    elementStressMeasures->maxShearStress = 0.5 * (elementStressMeasures->principalStresses[0]-elementStressMeasures->principalStresses[2]);
     /*
      *  Calculate 2nd deviatoric stress invariant
      */



More information about the CIG-COMMITS mailing list