[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