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

echoi at geodynamics.org echoi at geodynamics.org
Thu Mar 5 12:06:42 PST 2009


Author: echoi
Date: 2009-03-05 12:06:42 -0800 (Thu, 05 Mar 2009)
New Revision: 14234

Modified:
   long/3D/SNAC/trunk/Snac/snac2vtk/snac2vtk.c
Log:
* Found and fixed a bug that sometimes produces NaN while data for the last timestep are processed in DeriveStressMeasures().

	The original implementation,
		fread( void *ptr, sizeof(float)*9*numberTetrahedra, 1, FILE *stream);
	has been changed to
		fread( void *ptr, sizeof(float), 9, FILE *stream);
	and moved under "for( tetra_I ... )" because it is most consistent with
	how stressTensor files are written.



Modified: long/3D/SNAC/trunk/Snac/snac2vtk/snac2vtk.c
===================================================================
--- long/3D/SNAC/trunk/Snac/snac2vtk/snac2vtk.c	2009-03-04 23:45:21 UTC (rev 14233)
+++ long/3D/SNAC/trunk/Snac/snac2vtk/snac2vtk.c	2009-03-05 20:06:42 UTC (rev 14234)
@@ -1002,7 +1002,6 @@
 void 
 DeriveStressMeasures(FILE *stressTensorIn, double elementStressTensor[3][3], struct stressMeasures *elementStressMeasures)
 {
-    float		stressTensorArray[10][3][3];
     int			tetra_I;
     const int		numberTetrahedra=10;
     double		failureAngleRadians=elementStressMeasures->failureAngle*M_PI/180.0;
@@ -1012,21 +1011,22 @@
     /*
      *  Read all tetrahedral stress tensors for this element gI
      */
-    fread( stressTensorArray, sizeof(float)*9*numberTetrahedra, 1, stressTensorIn );
     for( tetra_I = 0; tetra_I < 10; tetra_I++ ) {
+	float	stressTensorArray[3][3];
+	fread( stressTensorArray, sizeof(float), 9, stressTensorIn );
 	/*
 	 *  Build average stress tensor for element by summing tetrahedral tensor components
 	 *   - even though it's symmetric, do for all 9 components in case we pick the wrong ones before diagonalization
 	 */
-	elementStressTensor[0][0]+=stressTensorArray[tetra_I][0][0]/(double)numberTetrahedra;
-	elementStressTensor[1][1]+=stressTensorArray[tetra_I][1][1]/(double)numberTetrahedra;
-	elementStressTensor[2][2]+=stressTensorArray[tetra_I][2][2]/(double)numberTetrahedra;
-	elementStressTensor[0][1]+=stressTensorArray[tetra_I][0][1]/(double)numberTetrahedra;
-	elementStressTensor[0][2]+=stressTensorArray[tetra_I][0][2]/(double)numberTetrahedra;
-	elementStressTensor[1][2]+=stressTensorArray[tetra_I][1][2]/(double)numberTetrahedra;
-	elementStressTensor[1][0]+=stressTensorArray[tetra_I][1][0]/(double)numberTetrahedra;
-	elementStressTensor[2][0]+=stressTensorArray[tetra_I][2][0]/(double)numberTetrahedra;
-	elementStressTensor[2][1]+=stressTensorArray[tetra_I][2][1]/(double)numberTetrahedra;
+	elementStressTensor[0][0]+=stressTensorArray[0][0]/(double)numberTetrahedra;
+	elementStressTensor[1][1]+=stressTensorArray[1][1]/(double)numberTetrahedra;
+	elementStressTensor[2][2]+=stressTensorArray[2][2]/(double)numberTetrahedra;
+	elementStressTensor[0][1]+=stressTensorArray[0][1]/(double)numberTetrahedra;
+	elementStressTensor[0][2]+=stressTensorArray[0][2]/(double)numberTetrahedra;
+	elementStressTensor[1][2]+=stressTensorArray[1][2]/(double)numberTetrahedra;
+	elementStressTensor[1][0]+=stressTensorArray[1][0]/(double)numberTetrahedra;
+	elementStressTensor[2][0]+=stressTensorArray[2][0]/(double)numberTetrahedra;
+	elementStressTensor[2][1]+=stressTensorArray[2][1]/(double)numberTetrahedra;
     }
     /*
      *  Diagonalize and find principal stresses from mean stress tensor for element



More information about the CIG-COMMITS mailing list