#include <mpi.h>
#include <StGermain/StGermain.h>
#include <StgDomain/StgDomain.h>

int main( int argc, char* argv[] ) {
   CartesianGenerator* gen;
   Mesh* mesh;
   int nDims;
   int sizes[3];
   double minCrd[3];
   double maxCrd[3];
   int nRanks;

   MPI_Init(&argc, &argv );
   MPI_Comm_size( MPI_COMM_WORLD, &nRanks );
   StGermain_Init( &argc, &argv );
   StgDomain_Init( &argc, & argv );

   MPI_Comm_size( MPI_COMM_WORLD, &nRanks );

   nDims = 3;
   sizes[0] = sizes[1] = sizes[2] = 4 * nRanks;
   minCrd[0] = minCrd[1] = minCrd[2] = 0.0;
   maxCrd[0] = maxCrd[1] = maxCrd[2] = (double)nRanks;
   gen = CartesianGenerator_New( "MyCartesionGenerator" );
   MeshGenerator_SetDimSize( gen, nDims );
   CartesianGenerator_SetShadowDepth( gen, 1 );
   CartesianGenerator_SetTopologyParams( gen, sizes, 0, NULL, NULL );
   CartesianGenerator_SetGeometryParams( gen, minCrd, maxCrd );

   mesh = Mesh_New( "MyMesh" );
   Mesh_SetGenerator( mesh, gen );

   Stg_Component_Build( mesh, NULL, False );

   StgDomain_Finalise();
   StGermain_Finalise();
   MPI_Finalize();
   return 1;
}
