From fbaca8cea495ae4e434c628a6cd0fd522a2cb13b Mon Sep 17 00:00:00 2001 From: schnetter <> Date: Wed, 5 Dec 2001 00:06:00 +0000 Subject: Fixed a small bug that prevented reading data. darcs-hash:20011205000630-07bb3-677525edda645c2adeee49eb01f83da54e3b4496.gz --- CarpetAttic/CarpetIOFlexIO/param.ccl | 8 +++++- CarpetAttic/CarpetIOFlexIO/schedule.ccl | 3 ++- CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc | 43 +++++++++++++++++++++++++----- 3 files changed, 45 insertions(+), 9 deletions(-) diff --git a/CarpetAttic/CarpetIOFlexIO/param.ccl b/CarpetAttic/CarpetIOFlexIO/param.ccl index e10d39493..e4e5d7004 100644 --- a/CarpetAttic/CarpetIOFlexIO/param.ccl +++ b/CarpetAttic/CarpetIOFlexIO/param.ccl @@ -1,5 +1,5 @@ # Parameter definitions for thorn CarpetIOFlexIO -# $Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIO/param.ccl,v 1.2 2001/03/17 22:37:21 eschnett Exp $ +# $Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIO/param.ccl,v 1.3 2001/12/05 01:06:30 schnetter Exp $ @@ -15,6 +15,12 @@ restricted: +BOOLEAN verbose "Produce log output" +{ +} "no" + + + CCTK_STRING outdir3D "Name of 3D FlexIO output directory, overrides outdir" STEERABLE = ALWAYS { .* :: "A regex which matches everything" diff --git a/CarpetAttic/CarpetIOFlexIO/schedule.ccl b/CarpetAttic/CarpetIOFlexIO/schedule.ccl index 259abe7a0..ff499a551 100644 --- a/CarpetAttic/CarpetIOFlexIO/schedule.ccl +++ b/CarpetAttic/CarpetIOFlexIO/schedule.ccl @@ -1,5 +1,5 @@ # Schedule definitions for thorn CarpetIOFlexIO -# $Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIO/schedule.ccl,v 1.4 2001/03/22 18:42:05 eschnett Exp $ +# $Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIO/schedule.ccl,v 1.5 2001/12/05 01:06:30 schnetter Exp $ schedule CarpetIOFlexIOStartup at STARTUP after IOUtil_Startup { @@ -9,4 +9,5 @@ schedule CarpetIOFlexIOStartup at STARTUP after IOUtil_Startup schedule CarpetIOFlexIOReadData at INITIAL { LANG: C + OPTIONS: global } "Read initial data from file" diff --git a/CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc b/CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc index b1cd2f97a..78b1d2916 100644 --- a/CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc +++ b/CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc @@ -32,7 +32,7 @@ #include "ioflexio.hh" -static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc,v 1.12 2001/11/05 17:53:03 schnetter Exp $"; +static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc,v 1.13 2001/12/05 01:06:31 schnetter Exp $"; @@ -365,7 +365,7 @@ namespace CarpetIOFlexIO { int InputVarAs (cGH* const cgh, const char* const varname, - const char* const alias) { + const char* const alias) { DECLARE_CCTK_PARAMETERS; const int n = CCTK_VarIndex(varname); @@ -420,7 +420,7 @@ namespace CarpetIOFlexIO { char* const filename = (char*)alloca(strlen(myindir) +strlen(alias) +strlen(extension)+100); - sprintf (filename, "%s/%s.%s", myindir, alias, extension); + sprintf (filename, "%s/%s%s", myindir, alias, extension); IObase* reader = 0; AmrGridReader* amrreader = 0; @@ -428,11 +428,16 @@ namespace CarpetIOFlexIO { const int gpdim = CCTK_GroupDimI(group); + int rank; + int dims[dim]; + int nbytes; + // Read the file only on the root processor if (CCTK_MyProc(cgh)==0) { // Open the file - if (CCTK_Equals(in3D_format, "IEEE")) { + if (verbose) CCTK_VInfo (CCTK_THORNSTRING, "Opening file \"%s\"", filename); + if (CCTK_Equals(in3D_format, "IEEE")) { reader = new IEEEIO(filename, IObase::Read); #ifdef HDF5 } else if (CCTK_Equals(in3D_format, "HDF4")) { @@ -443,14 +448,21 @@ namespace CarpetIOFlexIO { } else { abort(); } + if (!reader->isValid()) { + CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING, + "Could not open file \"%s\" for reading", filename); + } assert (reader->isValid()); + + if (verbose) CCTK_VInfo (CCTK_THORNSTRING, "Reading AMR info"); amrreader = new AmrGridReader(*reader); // Read information about dataset + if (verbose) CCTK_VInfo (CCTK_THORNSTRING, "Reading dataset info"); IObase::DataType numbertype; - int rank; - int dims[dim]; reader->readInfo (numbertype, rank, dims); + nbytes = IObase::nBytes(numbertype,rank,dims); + if (verbose) CCTK_VInfo (CCTK_THORNSTRING, "type=%d rank=%d dims=[%d,%d,%d] nbytes=%d", (int)numbertype, rank, dims[0], dims[1], dims[2], nbytes); // Check rank assert (rank==gpdim); @@ -464,16 +476,28 @@ namespace CarpetIOFlexIO { // TODO: check grid spacing // Number of datasets + if (verbose) CCTK_VInfo (CCTK_THORNSTRING, "Reading number of datasets"); ndatasets = reader->nDatasets(); + if (verbose) CCTK_VInfo (CCTK_THORNSTRING, "ndatasets=%d", ndatasets); assert (ndatasets>=0); } + // Broadcast rank, dimensions, and nbytes + MPI_Bcast (&rank, 1, MPI_INT, 0, dist::comm); + assert (rank>=1); + MPI_Bcast (&dims, rank, MPI_INT, 0, dist::comm); + for (int d=0; d=0); + MPI_Bcast (&nbytes, 1, MPI_INT, 0, dist::comm); + assert (nbytes>=0); + // Broadcast number of datasets MPI_Bcast (&ndatasets, 1, MPI_INT, 0, dist::comm); assert (ndatasets>=0); // Read all datasets + // TODO: read only some datasets for (int dataset=0; datasetgetGrid(dataset); assert (amrgrid!=0); assert (amrgrid->data!=0); @@ -505,7 +530,8 @@ namespace CarpetIOFlexIO { amr_origin[d] = 0; amr_dims[d] = 1; } - } + + } // MyProc == 0 MPI_Bcast (amr_origin, dim, MPI_INT, 0, dist::comm); MPI_Bcast (amr_dims, dim, MPI_INT, 0, dist::comm); @@ -546,14 +572,17 @@ namespace CarpetIOFlexIO { if (CCTK_MyProc(cgh)==0) { free (amrgrid->data); free (amrgrid); + amrgrid = 0; } } // loop over datasets // Close the file if (CCTK_MyProc(cgh)==0) { + if (verbose) CCTK_VInfo (CCTK_THORNSTRING, "Deleting AMR info"); delete amrreader; amrreader = 0; + if (verbose) CCTK_VInfo (CCTK_THORNSTRING, "Closing file"); delete reader; reader = 0; } -- cgit v1.2.3