diff options
author | schnetter <> | 2001-07-04 10:29:00 +0000 |
---|---|---|
committer | schnetter <> | 2001-07-04 10:29:00 +0000 |
commit | f1aa84c14ac110f5802603b4bf9ceb7923c5b471 (patch) | |
tree | 6a45cd17c5c96c90307302e699f521d2c80bd79f /CarpetAttic | |
parent | e1cce75b6dc96e7c88ccebff3ee4e03e8fdfc28e (diff) |
Broke the file "carpet.cc" into several files.
Broke the file "carpet.cc" into several files.
Simplified support for arrays with a dimension different from 3.
Added a testing thorn.
darcs-hash:20010704102946-07bb3-82132f0c643e91f0de33bbaef93f9c693ce7227f.gz
Diffstat (limited to 'CarpetAttic')
-rw-r--r-- | CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc | 228 |
1 files changed, 87 insertions, 141 deletions
diff --git a/CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc b/CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc index 17a530ff5..0c87f5701 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.9 2001/07/02 13:22:11 schnetter Exp $"; +static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/CarpetAttic/CarpetIOFlexIO/src/ioflexio.cc,v 1.10 2001/07/04 12:29:50 schnetter Exp $"; @@ -167,7 +167,9 @@ namespace CarpetIOFlexIO { } extension = GetStringParameter ("out3D_extension", extension); - char* const filename = (char*)alloca(strlen(myoutdir)+strlen(alias)+strlen(extension)+100); + char* const filename = (char*)alloca(strlen(myoutdir) + +strlen(alias) + +strlen(extension)+100); sprintf (filename, "%s/%s%s", myoutdir, alias, extension); IObase* writer = 0; @@ -221,11 +223,11 @@ namespace CarpetIOFlexIO { // TODO: Set datatype correctly amrwriter->setType (IObase::Float64); - const int dim = CCTK_GroupDimI(group); + const int gpdim = CCTK_GroupDimI(group); // Set coordinate information - CCTK_REAL lower[maxdim], upper[maxdim]; - double origin[maxdim], delta[maxdim], timestep; + CCTK_REAL lower[dim], upper[dim]; + double origin[dim], delta[dim], timestep; for (int d=0; d<dim; ++d) { const int ierr = CCTK_CoordRange (cgh, &lower[d], &upper[d], d+1, 0, "cart3d"); @@ -235,12 +237,12 @@ namespace CarpetIOFlexIO { } timestep = base_delta_time; amrwriter->setTopLevelParameters - (dim, origin, delta, timestep, maxreflevels); + (gpdim, origin, delta, timestep, maxreflevels); // Set refinement information int interlevel_timerefinement; - int interlevel_spacerefinement[maxdim]; - int initial_gridplacementrefinement[maxdim]; + int interlevel_spacerefinement[dim]; + int initial_gridplacementrefinement[dim]; interlevel_timerefinement = hh->reffact; for (int d=0; d<dim; ++d) { interlevel_spacerefinement[d] = hh->reffact; @@ -261,77 +263,46 @@ namespace CarpetIOFlexIO { // level BEGIN_COMPONENT_LOOP(cgh) { - switch (CCTK_GroupDimI(group)) { - -#define CODE \ - do { \ - const generic_gf<dim>* ff = 0; \ - \ - switch (CCTK_GroupTypeI(group)) { \ - \ - case CCTK_ARRAY: \ - assert (var < (int)arrdata[group].data.size()); \ - ff = (generic_gf<dim>*)arrdata[group].data[var]; \ - break; \ - \ - case CCTK_GF: \ - assert (var < (int)gfdata[group].data.size()); \ - ff = (generic_gf<dim>*)gfdata[group].data[var]; \ - break; \ - \ - default: \ - abort(); \ - } \ - \ - const generic_data<dim>* const data \ - = (*ff) (tl, reflevel, component, mglevel); \ - \ - /* Make temporary copy on processor 0 */ \ - const bbox<int,dim> ext = data->extent(); \ - generic_data<dim>* const tmp = data->make_typed (); \ - tmp->allocate (ext, 0); \ - tmp->copy_from (data, ext); \ - \ - /* Write data */ \ - if (CCTK_MyProc(cgh)==0) { \ - int origin[dim], dims[dim]; \ - for (int d=0; d<dim; ++d) { \ - origin[d] = (ext.lower() / ext.stride())[d]; \ - dims[d] = (ext.shape() / ext.stride())[d]; \ - } \ - amrwriter->write (origin, dims, (void*)tmp->storage()); \ - } \ - \ - /* Delete temporary copy */ \ - delete tmp; \ - \ - } while (0) + const generic_gf<dim>* ff = 0; + + switch (CCTK_GroupTypeI(group)) { - case 1: { - const int dim=1; - CODE; + case CCTK_ARRAY: + assert (var < (int)arrdata[group].data.size()); + ff = (generic_gf<dim>*)arrdata[group].data[var]; break; - } - case 2: { - const int dim=2; - CODE; + case CCTK_GF: + assert (var < (int)gfdata[group].data.size()); + ff = (generic_gf<dim>*)gfdata[group].data[var]; break; - } - - case 3: { - const int dim=3; - CODE; - break; - } default: abort(); - -#undef CODE - } + const generic_data<dim>* const data + = (*ff) (tl, reflevel, component, mglevel); + + /* Make temporary copy on processor 0 */ + const bbox<int,dim> ext = data->extent(); + generic_data<dim>* const tmp = data->make_typed (); + tmp->allocate (ext, 0); + tmp->copy_from (data, ext); + + /* Write data */ + if (CCTK_MyProc(cgh)==0) { + int origin[dim], dims[dim]; + for (int d=0; d<dim; ++d) { + origin[d] = (ext.lower() / ext.stride())[d]; + dims[d] = (ext.shape() / ext.stride())[d]; + } + amrwriter->write (origin, dims, (void*)tmp->storage()); + } + + /* Delete temporary copy */ + delete tmp; + } END_COMPONENT_LOOP(cgh); // Close the file @@ -481,14 +452,16 @@ namespace CarpetIOFlexIO { } extension = GetStringParameter ("in3D_extension", extension); - char* const filename = (char*)alloca(strlen(myindir)+strlen(alias)+strlen(extension)+100); + char* const filename = (char*)alloca(strlen(myindir) + +strlen(alias) + +strlen(extension)+100); sprintf (filename, "%s/%s.%s", myindir, alias, extension); IObase* reader = 0; AmrGridReader* amrreader = 0; int ndatasets = -1; - const int dim = CCTK_GroupDimI(group); + const int gpdim = CCTK_GroupDimI(group); // Read the file only on the root processor if (CCTK_MyProc(cgh)==0) { @@ -511,11 +484,11 @@ namespace CarpetIOFlexIO { // Read information about dataset IObase::DataType numbertype; int rank; - int dims[maxdim]; + int dims[dim]; reader->readInfo (numbertype, rank, dims); // Check rank - assert (rank==dim); + assert (rank==gpdim); // Check datatype // TODO: Check datatype correctly @@ -539,8 +512,8 @@ namespace CarpetIOFlexIO { // Read grid AmrGrid* amrgrid = 0; - int amr_origin[maxdim]; - int amr_dims[maxdim]; + int amr_origin[dim]; + int amr_dims[dim]; if (CCTK_MyProc(cgh)==0) { @@ -554,15 +527,19 @@ namespace CarpetIOFlexIO { IObase::DataType atype; int alength; if (reader->readAttributeInfo("iorigin", atype, alength) < 0) { - for (int d=0; d<dim; ++d) { + for (int d=0; d<gpdim; ++d) { amrgrid->iorigin[d] = 0; } } - for (int d=0; d<dim; ++d) { + for (int d=0; d<gpdim; ++d) { amr_origin[d] = amrgrid->iorigin[d]; amr_dims[d] = amrgrid->dims[d]; } + for (int d=gpdim; d<dim; ++d) { + amr_origin[d] = 0; + amr_dims[d] = 1; + } } MPI_Bcast (amr_origin, dim, MPI_INT, 0, dist::comm); MPI_Bcast (amr_dims, dim, MPI_INT, 0, dist::comm); @@ -571,78 +548,47 @@ namespace CarpetIOFlexIO { // level BEGIN_COMPONENT_LOOP(cgh) { - switch (CCTK_GroupDimI(group)) { - -#define CODE \ - do { \ - generic_gf<dim>* ff = 0; \ - \ - switch (CCTK_GroupTypeI(group)) { \ - \ - case CCTK_ARRAY: \ - assert (var < (int)arrdata[group].data.size()); \ - ff = (generic_gf<dim>*)arrdata[group].data[var]; \ - break; \ - \ - case CCTK_GF: \ - assert (var < (int)gfdata[group].data.size()); \ - ff = (generic_gf<dim>*)gfdata[group].data[var]; \ - break; \ - \ - default: \ - abort(); \ - } \ - \ - generic_data<dim>* const data \ - = (*ff) (tl, reflevel, component, mglevel); \ - \ - /* Create temporary data storage on processor 0 */ \ - const vect<int,dim> str = vect<int,dim>(reflevelfact); \ - const vect<int,dim> lb = vect<int,dim>(amr_origin) * str; \ - const vect<int,dim> ub \ - = lb + (vect<int,dim>(amr_dims) - 1) * str; \ - const bbox<int,dim> ext(lb,ub,str); \ - generic_data<dim>* const tmp = data->make_typed (); \ - \ - if (CCTK_MyProc(cgh)==0) { \ - tmp->allocate (ext, 0, amrgrid->data); \ - } else { \ - tmp->allocate (ext, 0, 0); \ - } \ - \ - /* Copy into grid function */ \ - data->copy_from (tmp, ext); \ - \ - /* Delete temporary copy */ \ - delete tmp; \ - \ - } while (0) - - case 1: { - const int dim=1; - CODE; - break; - } + generic_gf<dim>* ff = 0; + + switch (CCTK_GroupTypeI(group)) { - case 2: { - const int dim=2; - CODE; + case CCTK_ARRAY: + assert (var < (int)arrdata[group].data.size()); + ff = (generic_gf<dim>*)arrdata[group].data[var]; break; - } - case 3: { - const int dim=3; - CODE; + case CCTK_GF: + assert (var < (int)gfdata[group].data.size()); + ff = (generic_gf<dim>*)gfdata[group].data[var]; break; - } default: abort(); - -#undef CODE - } + generic_data<dim>* const data + = (*ff) (tl, reflevel, component, mglevel); + + /* Create temporary data storage on processor 0 */ + const vect<int,dim> str = vect<int,dim>(reflevelfact); + const vect<int,dim> lb = vect<int,dim>(amr_origin) * str; + const vect<int,dim> ub + = lb + (vect<int,dim>(amr_dims) - 1) * str; + const bbox<int,dim> ext(lb,ub,str); + generic_data<dim>* const tmp = data->make_typed (); + + if (CCTK_MyProc(cgh)==0) { + tmp->allocate (ext, 0, amrgrid->data); + } else { + tmp->allocate (ext, 0, 0); + } + + /* Copy into grid function */ + data->copy_from (tmp, ext); + + /* Delete temporary copy */ + delete tmp; + } END_COMPONENT_LOOP(cgh); if (CCTK_MyProc(cgh)==0) { |