[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