[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