[cig-commits] r18879 - long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR
echoi at geodynamics.org
echoi at geodynamics.org
Wed Sep 7 10:38:46 PDT 2011
Author: echoi
Date: 2011-09-07 10:38:45 -0700 (Wed, 07 Sep 2011)
New Revision: 18879
Added:
long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/Destroy.c
long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/Destroy.h
Modified:
long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/ConstructExtensions.c
long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/Context.h
long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/InitialConditions.c
long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/Makefile.def
long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/Output.c
long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/Register.c
long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/Remesh.c
long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/ViscoPlastic.h
Log:
Fixed a bug in the averaged accumulated plastic strain after restarting.
1. viscoplasticElement->aps is included in the checkpoint data now: written to avgPlStrainCP.*.
2. Those values are extracted by snac2restart and read in by the InitialConditions function.
3. As a safety measure, _SnacViscoPlastic_Destroy() function has been hooked up at ExtensionDestroy entry point and explicitly closes all the output files.
Modified: long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/ConstructExtensions.c
===================================================================
--- long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/ConstructExtensions.c 2011-09-07 17:23:20 UTC (rev 18878)
+++ long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/ConstructExtensions.c 2011-09-07 17:38:45 UTC (rev 18879)
@@ -33,11 +33,7 @@
#include <StGermain/StGermain.h>
#include <StGermain/FD/FD.h>
#include "Snac/Snac.h"
-#include "types.h"
-#include "Context.h"
-#include "Register.h"
-#include "Element.h"
-#include "ConstructExtensions.h"
+#include "ViscoPlastic.h"
#include <assert.h>
#include <limits.h>
#ifndef PATH_MAX
@@ -99,6 +95,11 @@
assert( contextExt->plStrainCheckpoint /* failed to open file for writing */ );
abort();
}
+ sprintf( tmpBuf, "%s/avgPlStrainCP.%u", context->outputPath, context->rank );
+ if( (contextExt->avgPlStrainCheckpoint = fopen( tmpBuf, "w+" )) == NULL ) {
+ assert( contextExt->avgPlStrainCheckpoint /* failed to open file for writing */ );
+ abort();
+ }
sprintf( tmpBuf, "%s/viscosity.%u", context->outputPath, context->rank );
if( (contextExt->viscOut = fopen( tmpBuf, "w+" )) == NULL ) {
assert( contextExt->viscOut /* failed to open file for writing */ );
Modified: long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/Context.h
===================================================================
--- long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/Context.h 2011-09-07 17:23:20 UTC (rev 18878)
+++ long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/Context.h 2011-09-07 17:38:45 UTC (rev 18879)
@@ -46,6 +46,7 @@
FILE* plStrainOut;
FILE* viscOut;
FILE* plStrainCheckpoint;
+ FILE* avgPlStrainCheckpoint;
FILE* viscCheckpoint;
FILE* plstrainTensorOut;
};
Added: long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/Destroy.c
===================================================================
--- long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/Destroy.c (rev 0)
+++ long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/Destroy.c 2011-09-07 17:38:45 UTC (rev 18879)
@@ -0,0 +1,62 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003,
+** Steve Quenette, 110 Victoria Street, Melbourne, Victoria, 3053, Australia.
+** Californian Institute of Technology, 1200 East California Boulevard, Pasadena, California, 91125, USA.
+** University of Texas, 1 University Station, Austin, Texas, 78712, USA.
+**
+** Authors:
+** Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+** Stevan M. Quenette, Visitor in Geophysics, Caltech.
+** Luc Lavier, Research Scientist, The University of Texas. (luc at utig.ug.utexas.edu)
+** Luc Lavier, Research Scientist, Caltech.
+**
+** This program is free software; you can redistribute it and/or modify it
+** under the terms of the GNU General Public License as published by the
+** Free Software Foundation; either version 2, or (at your option) any
+** later version.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with this program; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+**
+** $Id: Destory.c 3125 2005-07-25 21:32:45Z EunseoChoi $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include <StGermain/StGermain.h>
+#include <StGermain/FD/FD.h>
+#include "Snac/Snac.h"
+#include "ViscoPlastic.h"
+#include <stdio.h>
+#include <math.h>
+#include <assert.h>
+
+
+void _SnacViscoPlastic_Destroy( void* _context ) {
+ Snac_Context* context = (Snac_Context*) _context;
+ SnacViscoPlastic_Context* contextExt = ExtensionManager_Get(
+ context->extensionMgr,
+ context,
+ SnacViscoPlastic_ContextHandle );
+
+ /* Close any of the following if present. */
+ if( contextExt->plStrainOut )
+ fclose( contextExt->plStrainOut );
+ if( contextExt->plStrainCheckpoint )
+ fclose( contextExt->plStrainCheckpoint );
+ if( contextExt->avgPlStrainCheckpoint )
+ fclose( contextExt->avgPlStrainCheckpoint );
+ if( contextExt->viscOut )
+ fclose( contextExt->viscOut );
+ if( contextExt->viscCheckpoint )
+ fclose( contextExt->viscCheckpoint );
+
+}
+
Added: long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/Destroy.h
===================================================================
--- long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/Destroy.h (rev 0)
+++ long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/Destroy.h 2011-09-07 17:38:45 UTC (rev 18879)
@@ -0,0 +1,37 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003,
+** Steve Quenette, 110 Victoria Street, Melbourne, Victoria, 3053, Australia.
+** Californian Institute of Technology, 1200 East California Boulevard, Pasadena, California, 91125, USA.
+** University of Texas, 1 University Station, Austin, Texas, 78712, USA.
+**
+** Authors:
+** Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+** Stevan M. Quenette, Visitor in Geophysics, Caltech.
+** Luc Lavier, Research Scientist, The University of Texas. (luc at utig.ug.utexas.edu)
+** Luc Lavier, Research Scientist, Caltech.
+**
+** This program is free software; you can redistribute it and/or modify it
+** under the terms of the GNU General Public License as published by the
+** Free Software Foundation; either version 2, or (at your option) any
+** later version.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with this program; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+**
+** $Id: Destroy.h 3104 2005-07-14 22:16:41Z EunseoChoi $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef _SnacViscoPlastic_Destroy_
+#define _SnacViscoPlastic_Destroy_
+
+ void _SnacViscoPlastic_Destroy( void* _context );
+
+#endif
Modified: long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/InitialConditions.c
===================================================================
--- long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/InitialConditions.c 2011-09-07 17:23:20 UTC (rev 18878)
+++ long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/InitialConditions.c 2011-09-07 17:38:45 UTC (rev 18879)
@@ -84,10 +84,13 @@
}
if( context->restartTimestep > 0 ) {
FILE* plStrainIn;
+ FILE* avgPlStrainIn;
char path[PATH_MAX];
sprintf(path, "%s/snac.plStrain.%d.%06d.restart",context->outputPath,context->rank,context->restartTimestep);
Journal_Firewall( (plStrainIn = fopen(path,"r")) != NULL, "Can't find %s", path );
+ sprintf(path, "%s/snac.avgPlStrain.%d.%06d.restart",context->outputPath,context->rank,context->restartTimestep);
+ Journal_Firewall( (avgPlStrainIn = fopen(path,"r")) != NULL, "Can't find %s", path );
/* read in restart file to reconstruct the previous plastic strain.*/
for( element_lI = 0; element_lI < context->mesh->elementLocalCount; element_lI++ ) {
@@ -97,30 +100,29 @@
const Snac_Material* material = &context->materialProperty[element->material_I];
vis_min = context->materialProperty[element->material_I].vis_min;
+ /* To-Do: Read in viscosity and assign it to tets and elements. */
if( material->yieldcriterion == mohrcoulomb ) {
Tetrahedra_Index tetra_I;
- double depls = 0.0f;
- /* double totalVolume = 0.0f; */
+ double avgPlStrain = 0.0f;
for( tetra_I = 0; tetra_I < Tetrahedra_Count; tetra_I++ ) {
- double tetraPlStrain;
+ double tetraPlStrain = 0.0f;
/* not the actual viscosity at restartTimestep, but doesn't affect the calculation afterwards */
viscoplasticElement->viscosity[tetra_I] = vis_min;
fscanf( plStrainIn, "%le", &tetraPlStrain );
viscoplasticElement->plasticStrain[tetra_I] = tetraPlStrain;
- depls += viscoplasticElement->plasticStrain[tetra_I];
- /* depls += viscoplasticElement->plasticStrain[tetra_I]*element->tetra[tetra_I].volume; */
- /* totalVolume += element->tetra[tetra_I].volume; */
}/* for tets */
/* volume-averaged accumulated plastic strain, aps */
- viscoplasticElement->aps = depls/Tetrahedra_Count;
- /* viscoplasticElement->aps = depls/totalVolume; */
+ fscanf( avgPlStrainIn, "%le", &avgPlStrain );
+ viscoplasticElement->aps = avgPlStrain;
}/* if(mohrcoulomb) */
}/* for elements */
if( plStrainIn )
fclose( plStrainIn );
+ if( avgPlStrainIn )
+ fclose( avgPlStrainIn );
}/* if restarting.*/
else {
/* Set the plastic element initial conditions */
Modified: long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/Makefile.def
===================================================================
--- long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/Makefile.def 2011-09-07 17:23:20 UTC (rev 18878)
+++ long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/Makefile.def 2011-09-07 17:38:45 UTC (rev 18879)
@@ -43,10 +43,12 @@
Output.c \
Register.c \
InitialConditions.c \
+ Destroy.c \
Remesh.c \
def_hdrs = \
types.h \
+ units.h \
Node.h \
Element.h \
Mesh.h \
@@ -57,5 +59,6 @@
Register.h \
InitialConditions.h \
Remesh.h \
+ Destroy.h \
ViscoPlastic.h
Modified: long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/Output.c
===================================================================
--- long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/Output.c 2011-09-07 17:23:20 UTC (rev 18878)
+++ long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/Output.c 2011-09-07 17:38:45 UTC (rev 18879)
@@ -97,13 +97,19 @@
context->mesh->elementExtensionMgr,
element,
SnacViscoPlastic_ElementHandle );
+ float avgPlasticStrain = elementExt->aps;
Tetrahedra_Index tetra_I;
+
for( tetra_I = 0; tetra_I < Tetrahedra_Count; tetra_I++ ) {
float plasticStrain = elementExt->plasticStrain[tetra_I];
fwrite( &plasticStrain, sizeof(float), 1, contextExt->plStrainCheckpoint );
}
fflush( contextExt->plStrainCheckpoint );
+
+
+ fwrite( &avgPlasticStrain, sizeof(float), 1, contextExt->avgPlStrainCheckpoint );
}
+ fflush( contextExt->avgPlStrainCheckpoint );
}
Modified: long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/Register.c
===================================================================
--- long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/Register.c 2011-09-07 17:23:20 UTC (rev 18878)
+++ long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/Register.c 2011-09-07 17:38:45 UTC (rev 18879)
@@ -33,17 +33,18 @@
#include <StGermain/StGermain.h>
#include <StGermain/FD/FD.h>
#include "Snac/Snac.h"
-#include "types.h"
-#include "Node.h"
+#include "ConstructExtensions.h"
+#include "Constitutive.h"
+#include "Context.h"
+#include "Destroy.h"
+#include "InitialConditions.h"
#include "Element.h"
#include "Mesh.h"
-#include "Context.h"
-#include "Constitutive.h"
-#include "ConstructExtensions.h"
+#include "Node.h"
#include "Output.h"
-#include "InitialConditions.h"
+#include "Register.h"
#include "Remesh.h"
-#include "Register.h"
+#include "types.h"
#include <stdio.h>
/* Textual name of this class */
@@ -136,6 +137,11 @@
"SnacViscoPlastic_WriteViscosity",
_SnacViscoPlastic_WriteViscosity,
SnacViscoPlastic_Type );
+ EntryPoint_Append( /* perform clean-ups like closing output files. */
+ Context_GetEntryPoint( context, AbstractContext_EP_DestroyExtensions ),
+ "SnacViscoPlastic_Destory",
+ _SnacViscoPlastic_Destroy,
+ SnacViscoPlastic_Type );
/* Add extensions to the interpolate element entry point, but it will only exist if the remesher is loaded. */
recoverNodeEP = Context_GetEntryPoint( context, "SnacRemesher_EP_RecoverNode" );
Modified: long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/Remesh.c
===================================================================
--- long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/Remesh.c 2011-09-07 17:23:20 UTC (rev 18878)
+++ long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/Remesh.c 2011-09-07 17:38:45 UTC (rev 18879)
@@ -311,8 +311,8 @@
for(i=0;i<4;i++) {
Snac_Node* node = Snac_Element_Node_P( context, dstEltInd, TetraToNode[dstTetInd][i] );
SnacViscoPlastic_Node* nodeExt = ExtensionManager_Get( context->mesh->nodeExtensionMgr,
- node,
- SnacViscoPlastic_NodeHandle );
+ node,
+ SnacViscoPlastic_NodeHandle );
plasticStrain += 0.25f*nodeExt->plStrainSPR;
/* viscosity += 0.25f*nodeExt->viscositySPR; */
Modified: long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/ViscoPlastic.h
===================================================================
--- long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/ViscoPlastic.h 2011-09-07 17:23:20 UTC (rev 18878)
+++ long/3D/SNAC/trunk/Snac/plugins/viscoplasticSPR/ViscoPlastic.h 2011-09-07 17:38:45 UTC (rev 18879)
@@ -41,17 +41,19 @@
#ifndef __SnacViscoPlastic_h__
#define __SnacViscoPlastic_h__
-#include "types.h"
-#include "Node.h"
+#include "ViscoPlastic.h"
+#include "Destroy.h"
+#include "Context.h"
+#include "Constitutive.h"
+#include "ConstructExtensions.h"
#include "Element.h"
+#include "InitialConditions.h"
#include "Mesh.h"
-#include "Context.h"
-#include "InitialConditions.h"
-#include "Constitutive.h"
+#include "Node.h"
#include "Output.h"
-#include "ConstructExtensions.h"
-#include "ViscoPlastic.h"
+#include "Register.h"
#include "Remesh.h"
-#include "Register.h"
+#include "types.h"
+#include "units.h"
#endif /* __SnacViscoPlastic_h__ */
More information about the CIG-COMMITS
mailing list