[cig-commits] commit:

Mercurial hg at geodynamics.org
Mon Nov 24 11:58:21 PST 2008


changeset:   27:f4b8b1a7d773
user:        BelindaMay
date:        Wed Feb 06 22:47:05 2008 +0000
files:       Mesh/src/CartesianGenerator.c Mesh/src/CartesianGenerator.h Mesh/src/CompressionAdaptor.c Mesh/src/CompressionAdaptor.h Mesh/src/MeshClass.c Mesh/src/MeshGenerator.h Mesh/src/SurfaceAdaptor.c Mesh/src/SurfaceAdaptor.h
description:
Added mesh checkpointing


diff -r 6f4ec87b4472 -r f4b8b1a7d773 Mesh/src/CartesianGenerator.c
--- a/Mesh/src/CartesianGenerator.c	Wed Feb 06 00:40:32 2008 +0000
+++ b/Mesh/src/CartesianGenerator.c	Wed Feb 06 22:47:05 2008 +0000
@@ -186,8 +186,13 @@ void _CartesianGenerator_Construct( void
 	unsigned*		size;
 	unsigned		shadowDepth;
 	Stream*			stream;
+	Stream*			errorStream = Journal_Register( Error_Type, self->type );
 	unsigned		d_i;
-
+	unsigned 		restartTimestep;
+	char 			meshSaveFileName[256];
+	char			checkpointPath[256];
+	char			checkpointPrefix[256];
+	
 	assert( self && Stg_CheckType( self, CartesianGenerator ) );
 	assert( cf );
 
@@ -255,7 +260,7 @@ void _CartesianGenerator_Construct( void
 		assert( Dictionary_Entry_Value_GetCount( maxList ) >= self->nDims );
 		crdMin = Memory_Alloc_Array_Unnamed( double, self->nDims );
 		crdMax = Memory_Alloc_Array_Unnamed( double, self->nDims );
-		for( d_i = 0; d_i < self->nDims; d_i++ ) {
+		for( d_i = 0; d_i < self->nDims; d_i++ ) {	
 			tmp = Dictionary_Entry_Value_GetElement( minList, d_i );
 			rootKey = Dictionary_Entry_Value_AsString( tmp );
 
@@ -271,6 +276,40 @@ void _CartesianGenerator_Construct( void
 			crdMax[d_i] = Dictionary_Entry_Value_AsDouble( tmp );
 		}
 
+		restartTimestep = Stg_ComponentFactory_GetRootDictUnsignedInt( cf, "restartTimestep", 1 );	
+		if( restartTimestep ) {
+			strcpy( checkpointPath, Stg_ComponentFactory_GetRootDictString( cf, "checkpointPath", "" ) );
+			strcpy( checkpointPrefix, Stg_ComponentFactory_GetRootDictString( cf, "checkPointPrefixString", "" ) );
+			
+			if ( strlen(checkpointPrefix) > 0 ) {
+				sprintf( meshSaveFileName, "%s/%s.Mesh.%05d.dat", checkpointPath,
+					checkpointPrefix, restartTimestep );
+			}
+			else {
+				sprintf( meshSaveFileName, "%s/Mesh.%05d.dat", checkpointPath,
+					restartTimestep );
+			}			
+			
+			FILE* meshFile = fopen( meshSaveFileName, "rb" );	
+			/*Journal_Firewall( 
+				meshFile != 0, 
+				errorStream, 
+				"Error in %s - Couldn't find checkpoint mesh file with filename \"%s\" - aborting.\n", 
+				__func__,  
+				meshSaveFileName );*/
+
+			if( meshFile == 0 ) {
+				Journal_Printf( errorStream, 
+					"Warning - Couldn't find checkpoint mesh file with filename \"%s\".\n", 
+					meshSaveFileName );
+			}
+			else {
+				fread( crdMin, sizeof( double ), self->nDims, meshFile );
+				fread( crdMax, sizeof( double ), self->nDims, meshFile );
+				fclose( meshFile );
+			}
+		}
+	
 		/* Initial setup. */
 		CartesianGenerator_SetGeometryParams( self, crdMin, crdMax );
 
@@ -322,13 +361,13 @@ void CartesianGenerator_SetDimSize( void
 	memset( self->maxDecomp, 0, nDims * sizeof(unsigned) );
 }
 
-void CartesianGenerator_Generate( void* meshGenerator, void* _mesh ) {
+void CartesianGenerator_Generate( void* meshGenerator, void* _mesh, void* data ) {
 	CartesianGenerator*	self = (CartesianGenerator*)meshGenerator;
 	Stream*			stream = Journal_Register( Info_Type, self->type );
 	Mesh*			mesh = (Mesh*)_mesh;
 	Grid**			grid;
 	unsigned		*localRange, *localOrigin;
-
+	
 	/* Sanity check. */
 	assert( self );
 	assert( !self->elGrid || mesh );
@@ -360,7 +399,7 @@ void CartesianGenerator_Generate( void* 
 		CartesianGenerator_GenTopo( self, (IGraph*)mesh->topo );
 
 		/* Fill geometric values. */
-		CartesianGenerator_GenGeom( self, mesh );
+		CartesianGenerator_GenGeom( self, mesh, data );
 
 		/* Fill element types. */
 		CartesianGenerator_GenElementTypes( self, mesh );
@@ -1909,13 +1948,19 @@ void CartesianGenerator_MapToDomain( Car
 		incEls[inc_i] = Sync_GlobalToDomain( sync, incEls[inc_i] );
 }
 
-void CartesianGenerator_GenGeom( CartesianGenerator* self, Mesh* mesh ) {
-	Stream*		stream = Journal_Register( Info_Type, self->type );
-	Sync*		sync;
-	Grid*		grid;
-	unsigned*	inds;
-	double*		steps;
-	unsigned	n_i, d_i;
+void CartesianGenerator_GenGeom( CartesianGenerator* self, Mesh* mesh, void* data ) {
+	Stream*			stream = Journal_Register( Info_Type, self->type );
+	Sync*			sync;
+	Grid*			grid;
+	unsigned*		inds;
+	double*			steps;
+	unsigned		n_i, d_i;
+	AbstractContext* 	context = (AbstractContext*)data;
+	char 			meshSaveFileName[256];
+	double*         	vert;
+	unsigned        	gNode;
+	Stream*			errorStream = Journal_Register( Error_Type, self->type );
+	int			myRank;
 
 	assert( self );
 	assert( mesh );
@@ -1938,19 +1983,62 @@ void CartesianGenerator_GenGeom( Cartesi
 					 mesh->topo->nDims, 
 					 "Mesh::verts" );
 
-	/* Loop over domain nodes. */
-	for( n_i = 0; n_i < Sync_GetNumDomains( sync ); n_i++ ) {
-		double*		vert;
-		unsigned	gNode;
-
-		gNode = Sync_DomainToGlobal( sync, n_i );
-		Grid_Lift( grid, gNode, inds );
-		vert = Mesh_GetVertex( mesh, n_i );
-
-		/* Calculate coordinate. */
-		for( d_i = 0; d_i < mesh->topo->nDims; d_i++ ) {
-			vert[d_i] = self->crdMin[d_i] + 
-				((double)inds[d_i] / (double)(grid->sizes[d_i] - 1)) * steps[d_i];
+	/* If loading from checkpoint, read mesh vertices from file */
+	if( context->restartTimestep && context->timeStep == context->restartTimestep ) {
+		Journal_Printf( stream, "Loading mesh values from file.\n");
+
+		MPI_Comm_rank( MPI_COMM_WORLD, &myRank);
+		
+		if ( strlen( context->checkPointPrefixString ) > 0 ) {
+			sprintf( meshSaveFileName, "%s/%s.Mesh.%05d.dat", context->checkpointPath,
+				context->checkPointPrefixString, context->restartTimestep );
+		}
+		else {
+			sprintf( meshSaveFileName, "%s/Mesh.%05d.dat", context->checkpointPath,
+				context->restartTimestep );
+		}
+
+		FILE* meshFile = fopen( meshSaveFileName, "rb" );	//rb
+		/*Journal_Firewall( 
+			meshFile != 0, 
+			errorStream, 
+			"Error in %s - Couldn't find checkpoint mesh file with filename \"%s\" - aborting.\n", 
+			__func__,  
+			meshSaveFileName );*/
+
+		if( meshFile == 0 ) {
+			Journal_Printf( errorStream, 
+				"Warning - Couldn't find checkpoint mesh file with filename \"%s\".\n", 
+				meshSaveFileName );
+		}
+		else {
+			fseek( meshFile, (Sync_GetNumDomains( sync ) * myRank + 2) * mesh->topo->nDims * sizeof( double ), SEEK_CUR );
+
+			for( n_i = 0; n_i < Sync_GetNumDomains( sync ); n_i++ ) {
+				gNode = Sync_DomainToGlobal( sync, n_i );
+				Grid_Lift( grid, gNode, inds );
+				vert = Mesh_GetVertex( mesh, n_i );
+
+				for( d_i = 0; d_i < mesh->topo->nDims; d_i++ ) {	
+					fread( &vert[d_i], sizeof( double ), 1, meshFile );
+				}
+			}
+		}
+		fclose( meshFile );
+	}
+	else {
+		/* Loop over domain nodes. */
+		for( n_i = 0; n_i < Sync_GetNumDomains( sync ); n_i++ ) {
+			
+			gNode = Sync_DomainToGlobal( sync, n_i );
+			Grid_Lift( grid, gNode, inds );
+			vert = Mesh_GetVertex( mesh, n_i );
+
+			/* Calculate coordinate. */
+			for( d_i = 0; d_i < mesh->topo->nDims; d_i++ ) {
+				vert[d_i] = self->crdMin[d_i] + 
+					((double)inds[d_i] / (double)(grid->sizes[d_i] - 1)) * steps[d_i];
+			}
 		}
 	}
 
diff -r 6f4ec87b4472 -r f4b8b1a7d773 Mesh/src/CartesianGenerator.h
--- a/Mesh/src/CartesianGenerator.h	Wed Feb 06 00:40:32 2008 +0000
+++ b/Mesh/src/CartesianGenerator.h	Wed Feb 06 22:47:05 2008 +0000
@@ -149,7 +149,7 @@
 	void _CartesianGenerator_Destroy( void* meshGenerator, void* data );
 
 	void CartesianGenerator_SetDimSize( void* meshGenerator, unsigned nDims );
-	void CartesianGenerator_Generate( void* meshGenerator, void* mesh );
+	void CartesianGenerator_Generate( void* meshGenerator, void* mesh, void* data );
 	void _CartesianGenerator_SetTopologyParams( void* meshGenerator, unsigned* sizes, 
 						    unsigned maxDecompDims, unsigned* minDecomp, unsigned* maxDecomp );
 	void _CartesianGenerator_GenElements( void* meshGenerator, IGraph* topo, Grid*** grids );
@@ -212,7 +212,7 @@
 	void CartesianGenerator_CompleteVertexNeighbours( CartesianGenerator* self, IGraph* topo, Grid*** grids );
 	void CartesianGenerator_MapToDomain( CartesianGenerator* self, Sync* sync, 
 					     unsigned nIncEls, unsigned* incEls );
-	void CartesianGenerator_GenGeom( CartesianGenerator* self, Mesh* mesh );
+	void CartesianGenerator_GenGeom( CartesianGenerator* self, Mesh* mesh, void* data );
 	void CartesianGenerator_Destruct( CartesianGenerator* self );
 	void CartesianGenerator_DestructTopology( CartesianGenerator* self );
 	void CartesianGenerator_DestructGeometry( CartesianGenerator* self );
diff -r 6f4ec87b4472 -r f4b8b1a7d773 Mesh/src/CompressionAdaptor.c
--- a/Mesh/src/CompressionAdaptor.c	Wed Feb 06 00:40:32 2008 +0000
+++ b/Mesh/src/CompressionAdaptor.c	Wed Feb 06 22:47:05 2008 +0000
@@ -160,7 +160,7 @@ void _CompressionAdaptor_Destroy( void* 
 ** Public Functions
 */
 
-void CompressionAdaptor_Generate( void* adaptor, void* _mesh ) {
+void CompressionAdaptor_Generate( void* adaptor, void* _mesh, void* data ) {
 	CompressionAdaptor*		self = (CompressionAdaptor*)adaptor;
 	Mesh*				mesh = (Mesh*)_mesh;
 	const Sync*			sync;
@@ -172,7 +172,7 @@ void CompressionAdaptor_Generate( void* 
 	unsigned			d_i, n_i;
 
 	/* Build base mesh, which is assumed to be cartesian. */
-	MeshGenerator_Generate( self->generator, mesh );
+	MeshGenerator_Generate( self->generator, mesh, data );
 
 	/* If we're not 2D or 3D, forget about it. */
 	if( mesh->topo->nDims != 2 && mesh->topo->nDims != 3 )
diff -r 6f4ec87b4472 -r f4b8b1a7d773 Mesh/src/CompressionAdaptor.h
--- a/Mesh/src/CompressionAdaptor.h	Wed Feb 06 00:40:32 2008 +0000
+++ b/Mesh/src/CompressionAdaptor.h	Wed Feb 06 22:47:05 2008 +0000
@@ -82,7 +82,7 @@
 	void _CompressionAdaptor_Execute( void* adaptor, void* data );
 	void _CompressionAdaptor_Destroy( void* adaptor, void* data );
 
-	void CompressionAdaptor_Generate( void* adaptor, void* _mesh );
+	void CompressionAdaptor_Generate( void* adaptor, void* _mesh, void* data );
 
 	/*--------------------------------------------------------------------------------------------------------------------------
 	** Public functions
diff -r 6f4ec87b4472 -r f4b8b1a7d773 Mesh/src/MeshClass.c
--- a/Mesh/src/MeshClass.c	Wed Feb 06 00:40:32 2008 +0000
+++ b/Mesh/src/MeshClass.c	Wed Feb 06 22:47:05 2008 +0000
@@ -145,14 +145,29 @@ void _Mesh_Construct( void* mesh, Stg_Co
 }
 
 void _Mesh_Build( void* mesh, void* data ) {
-	Mesh*		self = (Mesh*)mesh;
-	unsigned	nDims;
-	unsigned	d_i;
-
-	assert( self );
+	Mesh*			self = (Mesh*)mesh;
+	unsigned		nDims;
+	unsigned		d_i;
+	AbstractContext*	context = (AbstractContext*)data;
+	char 			meshSaveFileName[256];
+	double*			temp;
+	//Stream*			errorStream = Journal_Register( Error_Type, self->type );
+	int 			i, j;
+
+	assert( self );
+	assert( context );
+
+	/*printf ("Start of _Mesh_Build function\n");
+	for( i=0; i<64; i++ ) {		
+		//fread( self->verts[i], 32 * sizeof( double ), 1, meshFile );
+		for( j=0; j<32; j++) {
+			//self->verts[i][j] = 0.0;					
+			printf ("%lf  \t", self->verts[i][j] );
+		}
+	}*/
 
 	if( self->generator )
-		MeshGenerator_Generate( self->generator, self );
+		MeshGenerator_Generate( self->generator, self, context );
 
 	nDims = Mesh_GetDimSize( self );
 	if( !nDims )
@@ -189,6 +204,7 @@ void _Mesh_Build( void* mesh, void* data
 	self->maxDomainCrd = Memory_Alloc_Array( double, nDims, "Mesh::maxLocalCrd" );
 	self->minGlobalCrd = Memory_Alloc_Array( double, nDims, "Mesh::minGlobalCrd" );
 	self->maxGlobalCrd = Memory_Alloc_Array( double, nDims, "Mesh::maxGlobalCrd" );
+
 	Mesh_DeformationUpdate( self );
 }
 
diff -r 6f4ec87b4472 -r f4b8b1a7d773 Mesh/src/MeshGenerator.h
--- a/Mesh/src/MeshGenerator.h	Wed Feb 06 00:40:32 2008 +0000
+++ b/Mesh/src/MeshGenerator.h	Wed Feb 06 22:47:05 2008 +0000
@@ -46,7 +46,7 @@
 
 	/** Virtual function types */
 	typedef void (MeshGenerator_SetDimSizeFunc)( void* meshGenerator, unsigned nDims );
-	typedef void (MeshGenerator_GenerateFunc)( void* meshGenerator, void* _mesh );
+	typedef void (MeshGenerator_GenerateFunc)( void* meshGenerator, void* _mesh, void* data );
 
 	/** MeshGenerator class contents */
 	#define __MeshGenerator					\
@@ -109,8 +109,8 @@
 	#define MeshGenerator_SetDimSize( self, nDims )			\
 		VirtualCall( self, setDimSizeFunc, self, nDims )
 
-	#define MeshGenerator_Generate( self, mesh )			\
-		VirtualCall( self, generateFunc, self, mesh )
+	#define MeshGenerator_Generate( self, mesh, data )			\
+		VirtualCall( self, generateFunc, self, mesh, data )
 
 	/*--------------------------------------------------------------------------------------------------------------------------
 	** Public functions
diff -r 6f4ec87b4472 -r f4b8b1a7d773 Mesh/src/SurfaceAdaptor.c
--- a/Mesh/src/SurfaceAdaptor.c	Wed Feb 06 00:40:32 2008 +0000
+++ b/Mesh/src/SurfaceAdaptor.c	Wed Feb 06 22:47:05 2008 +0000
@@ -197,7 +197,7 @@ void _SurfaceAdaptor_Destroy( void* adap
 ** Public Functions
 */
 
-void SurfaceAdaptor_Generate( void* adaptor, void* _mesh ) {
+void SurfaceAdaptor_Generate( void* adaptor, void* _mesh, void* data ) {
 	SurfaceAdaptor*			self = (SurfaceAdaptor*)adaptor;
 	Mesh*				mesh = (Mesh*)_mesh;
 	const Sync*			sync;
@@ -207,7 +207,7 @@ void SurfaceAdaptor_Generate( void* adap
 	unsigned			n_i;
 
 	/* Build base mesh, which is assumed to be cartesian. */
-	MeshGenerator_Generate( self->generator, mesh );
+	MeshGenerator_Generate( self->generator, mesh, data );
 
 	/* If we're not 2D or 3D, forget about it. */
 	if( mesh->topo->nDims != 2 && mesh->topo->nDims != 3 )
diff -r 6f4ec87b4472 -r f4b8b1a7d773 Mesh/src/SurfaceAdaptor.h
--- a/Mesh/src/SurfaceAdaptor.h	Wed Feb 06 00:40:32 2008 +0000
+++ b/Mesh/src/SurfaceAdaptor.h	Wed Feb 06 22:47:05 2008 +0000
@@ -108,7 +108,7 @@
 	void _SurfaceAdaptor_Execute( void* adaptor, void* data );
 	void _SurfaceAdaptor_Destroy( void* adaptor, void* data );
 
-	void SurfaceAdaptor_Generate( void* adaptor, void* _mesh );
+	void SurfaceAdaptor_Generate( void* adaptor, void* _mesh, void* data );
 
 	/*--------------------------------------------------------------------------------------------------------------------------
 	** Public functions



More information about the CIG-COMMITS mailing list