diff options
Diffstat (limited to 'Carpet')
-rw-r--r-- | Carpet/Carpet/param.ccl | 13 | ||||
-rw-r--r-- | Carpet/Carpet/schedule.ccl | 8 | ||||
-rw-r--r-- | Carpet/Carpet/src/Comm.cc | 36 | ||||
-rw-r--r-- | Carpet/Carpet/src/Evolve.cc | 8 | ||||
-rw-r--r-- | Carpet/Carpet/src/Restrict.cc | 14 | ||||
-rw-r--r-- | Carpet/Carpet/src/SetupGH.cc | 10 | ||||
-rw-r--r-- | Carpet/Carpet/src/Storage.cc | 8 | ||||
-rw-r--r-- | Carpet/Carpet/src/carpet_public.h | 12 | ||||
-rw-r--r-- | Carpet/Carpet/src/carpet_public.hh | 5 | ||||
-rw-r--r-- | Carpet/Carpet/src/helpers.cc | 17 | ||||
-rw-r--r-- | Carpet/Carpet/src/variables.cc | 5 | ||||
-rw-r--r-- | Carpet/CarpetLib/param.ccl | 7 | ||||
-rw-r--r-- | Carpet/CarpetLib/src/data.cc | 4 | ||||
-rw-r--r-- | Carpet/CarpetLib/src/dh.cc | 28 | ||||
-rw-r--r-- | Carpet/CarpetLib/src/dh.hh | 7 |
15 files changed, 114 insertions, 68 deletions
diff --git a/Carpet/Carpet/param.ccl b/Carpet/Carpet/param.ccl index ab662af64..43f4be299 100644 --- a/Carpet/Carpet/param.ccl +++ b/Carpet/Carpet/param.ccl @@ -1,5 +1,5 @@ # Parameter definitions for thorn Carpet -# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/param.ccl,v 1.30 2003/06/24 15:18:51 schnetter Exp $ +# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/param.ccl,v 1.31 2003/07/20 21:03:43 schnetter Exp $ shares: Cactus @@ -37,7 +37,8 @@ CCTK_INT global_nz "Grid size in z direction" CCTK_INT global_nsize "Grid size in each spatial direction" { - -1:* :: "must be nonnegative, or -1 to use the individual parameters" + 0:* :: "must be nonnegative" + -1 :: "use the per-dimension parameters" } -1 @@ -59,7 +60,8 @@ CCTK_INT ghost_size_z "Ghost zones in z direction" CCTK_INT ghost_size "Ghost zones in each spatial direction" { - -1:* :: "must be nonnegative, or -1 to use the individual parameters" + 0:* :: "must be nonnegative" + -1 :: "use the per-dimension parameters" } -1 @@ -100,6 +102,11 @@ CCTK_INT prolongation_order_time "Order of prolongation operator in time" 2 :: "second order (quadratic)" } 1 +CCTK_INT buffer_width "Width of the buffer zone inside the fine grid" +{ + 0:* :: "Should be the radius of the numerical domain of dependence of the time integrator, minus the number of ghost zones" +} 0 + CCTK_STRING base_extents "Extents of base grid components, in grid point units of the finest level" diff --git a/Carpet/Carpet/schedule.ccl b/Carpet/Carpet/schedule.ccl index f401492ef..228dced2b 100644 --- a/Carpet/Carpet/schedule.ccl +++ b/Carpet/Carpet/schedule.ccl @@ -1,7 +1,13 @@ # Schedule definitions for thorn Carpet -# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/schedule.ccl,v 1.4 2001/12/14 16:39:05 schnetter Exp $ +# $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/schedule.ccl,v 1.5 2003/07/20 21:03:43 schnetter Exp $ schedule CarpetStartup at STARTUP as Driver_Startup { LANG: C } "Startup routine" + + + +schedule group PostRestrict +{ +} "Apply boundary conditions after restricting" diff --git a/Carpet/Carpet/src/Comm.cc b/Carpet/Carpet/src/Comm.cc index 72d8f725c..c445bb3e9 100644 --- a/Carpet/Carpet/src/Comm.cc +++ b/Carpet/Carpet/src/Comm.cc @@ -10,7 +10,7 @@ #include "carpet.hh" extern "C" { - static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Comm.cc,v 1.19 2003/07/14 15:45:37 schnetter Exp $"; + static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Comm.cc,v 1.20 2003/07/20 21:03:43 schnetter Exp $"; CCTK_FILEVERSION(Carpet_Carpet_Comm_cc); } @@ -29,7 +29,8 @@ namespace Carpet { const int group = CCTK_GroupIndex(groupname); assert (group>=0 && group<CCTK_NumGroups()); - Checkpoint ("%*sSyncGroup %s", 2*reflevel, "", groupname); + Checkpoint ("%*sSyncGroup %s time=%g", 2*reflevel, "", + groupname, cgh->cctk_time); const int grouptype = CCTK_GroupTypeI(group); @@ -67,26 +68,27 @@ namespace Carpet { assert (group<(int)arrdata.size()); for (int var=0; var<(int)arrdata[group].data.size(); ++var) { if (grouptype == CCTK_GF) { - if (arrdata[group].do_transfer) { - if (reflevel>0) { - // use the current time here (which may be modified by the - // user) - const CCTK_REAL time = (cgh->cctk_time - cctk_initial_time) / delta_time; - if (false) { + if (do_prolongate) { + if (arrdata[group].do_transfer) { + if (reflevel>0) { + // use the current time here (which may be modified by the + // user) + const CCTK_REAL time = (cgh->cctk_time - cctk_initial_time) / delta_time; +#if 0 const CCTK_REAL time1 = tt->time (tl, reflevel, mglevel); const CCTK_REAL time2 = (cgh->cctk_time - cctk_initial_time) / delta_time; assert (fabs((time1 - time2) / (fabs(time1) + fabs(time2) + fabs(cgh->cctk_delta_time))) < 1e-12); +#endif + for (int c=0; c<arrdata[group].hh->components(reflevel); ++c) { + arrdata[group].data[var]->ref_bnd_prolongate + (tl, reflevel, c, mglevel, time); + } } - - for (int c=0; c<arrdata[group].hh->components(reflevel); ++c) { - arrdata[group].data[var]->ref_bnd_prolongate - (tl, reflevel, c, mglevel, time); - } + } else { + Checkpoint ("%*s(no prolongating for group %s)", + 2*reflevel, "", groupname); } - } else { - Checkpoint ("%*s(no prolongating for group %s)", - 2*reflevel, "", groupname); - } + } // if do_prolongate for (int c=0; c<arrdata[group].hh->components(reflevel); ++c) { arrdata[group].data[var]->sync (tl, reflevel, c, mglevel); } diff --git a/Carpet/Carpet/src/Evolve.cc b/Carpet/Carpet/src/Evolve.cc index 967b505b5..833121d9e 100644 --- a/Carpet/Carpet/src/Evolve.cc +++ b/Carpet/Carpet/src/Evolve.cc @@ -18,7 +18,7 @@ #include "carpet.hh" extern "C" { - static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Evolve.cc,v 1.26 2003/07/11 09:27:11 schnetter Exp $"; + static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Evolve.cc,v 1.27 2003/07/20 21:03:43 schnetter Exp $"; CCTK_FILEVERSION(Carpet_Carpet_Evolve_cc); } @@ -166,7 +166,7 @@ namespace Carpet { CCTK_ScheduleTraverse ("CCTK_EVOL", cgh, CallFunction); Waypoint ("%*sScheduling POSTSTEP", 2*reflevel, ""); CCTK_ScheduleTraverse ("CCTK_POSTSTEP", cgh, CallFunction); - + // Checking PoisonCheck (cgh, currenttimebutnotifonly); @@ -201,8 +201,8 @@ namespace Carpet { do_global_mode ? " (global time)" : ""); Restrict (cgh); - Waypoint ("%*sScheduling POSTRESTRICT", 2*reflevel, ""); - CCTK_ScheduleTraverse ("POSTRESTRICT", cgh, CallFunction); + Waypoint ("%*sScheduling PostRestrict", 2*reflevel, ""); + CCTK_ScheduleTraverse ("PostRestrict", cgh, CallFunction); // Checking CalculateChecksums (cgh, currenttime); diff --git a/Carpet/Carpet/src/Restrict.cc b/Carpet/Carpet/src/Restrict.cc index 0b62258dc..e392af3ca 100644 --- a/Carpet/Carpet/src/Restrict.cc +++ b/Carpet/Carpet/src/Restrict.cc @@ -10,7 +10,7 @@ #include "carpet.hh" extern "C" { - static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Restrict.cc,v 1.18 2003/07/16 21:46:38 schnetter Exp $"; + static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Restrict.cc,v 1.19 2003/07/20 21:03:43 schnetter Exp $"; CCTK_FILEVERSION(Carpet_Carpet_Restrict_cc); } @@ -46,18 +46,6 @@ namespace Carpet { assert (fabs((time1 - time2) / (fabs(time1) + fabs(time2) + fabs(cgh->cctk_delta_time))) < 1e-12); } - if (mglevel > 0) { - - for (int c=0; c<hh->components(reflevel); ++c) { - arrdata[group].data[var]->mg_restrict - (tl, reflevel, c, mglevel, time); - } - for (int c=0; c<arrdata[group].hh->components(reflevel); ++c) { - arrdata[group].data[var]->sync (tl, reflevel, c, mglevel); - } - - } // if not finest multigrid level - if (reflevel < hh->reflevels()-1) { for (int c=0; c<hh->components(reflevel); ++c) { diff --git a/Carpet/Carpet/src/SetupGH.cc b/Carpet/Carpet/src/SetupGH.cc index 42ba5829a..e1fd46355 100644 --- a/Carpet/Carpet/src/SetupGH.cc +++ b/Carpet/Carpet/src/SetupGH.cc @@ -19,7 +19,7 @@ #include "carpet.hh" extern "C" { - static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/SetupGH.cc,v 1.50 2003/07/09 21:59:07 schnetter Exp $"; + static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/SetupGH.cc,v 1.51 2003/07/20 21:03:43 schnetter Exp $"; CCTK_FILEVERSION(Carpet_Carpet_SetupGH_cc); } @@ -196,7 +196,8 @@ namespace Carpet { tt = new th<dim>(hh, 1.0); // Allocate data hierarchy - dd = new dh<dim>(*hh, lghosts, ughosts, prolongation_order_space); + dd = new dh<dim>(*hh, lghosts, ughosts, + prolongation_order_space, buffer_width); if (max_refinement_levels > 1) { const int prolongation_stencil_size = dd->prolongation_stencil_size(); @@ -279,7 +280,7 @@ namespace Carpet { } arrdata[group].dd - = new dh<dim>(*arrdata[group].hh, alghosts, aughosts, 0); + = new dh<dim>(*arrdata[group].hh, alghosts, aughosts, 0, 0); // Set refinement structure for scalars and arrays: @@ -417,6 +418,9 @@ namespace Carpet { mglevel = -1; component = -1; + // Enable prolongating + do_prolongate = true; + // Set initial refinement structure diff --git a/Carpet/Carpet/src/Storage.cc b/Carpet/Carpet/src/Storage.cc index 600f568af..b950c4029 100644 --- a/Carpet/Carpet/src/Storage.cc +++ b/Carpet/Carpet/src/Storage.cc @@ -10,7 +10,7 @@ #include "carpet.hh" extern "C" { - static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Storage.cc,v 1.24 2003/07/16 21:46:38 schnetter Exp $"; + static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/Storage.cc,v 1.25 2003/07/20 21:03:43 schnetter Exp $"; CCTK_FILEVERSION(Carpet_Carpet_Storage_cc); } @@ -61,7 +61,7 @@ namespace Carpet { assert (var>=0); const int vartype = CCTK_VarTypeI(var); const char * vartypename = CCTK_VarTypeName(vartype); - CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, + CCTK_VWarn (2, __LINE__, __FILE__, CCTK_THORNSTRING, "(Allocating storage for Cactus group \"%s\".) Note: This group (which has the variable type %s) will be neither prolongated nor restricted.", groupname, vartypename); } @@ -143,8 +143,8 @@ namespace Carpet { return 0; } - // XXX - CCTK_WARN (1, "Cannot disable storage -- storage management is not yet consistent for FMR"); + // TODO + CCTK_WARN (2, "Cannot disable storage -- storage management is not yet consistent for FMR"); return 1; const int n0 = CCTK_FirstVarIndexI(group); diff --git a/Carpet/Carpet/src/carpet_public.h b/Carpet/Carpet/src/carpet_public.h index 938c7a364..02a8902e3 100644 --- a/Carpet/Carpet/src/carpet_public.h +++ b/Carpet/Carpet/src/carpet_public.h @@ -1,4 +1,4 @@ -/* $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/carpet_public.h,v 1.9 2003/05/27 12:01:11 schnetter Exp $ */ +/* $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/carpet_public.h,v 1.10 2003/07/20 21:03:43 schnetter Exp $ */ #ifndef CARPET_PUBLIC_H #define CARPET_PUBLIC_H @@ -9,6 +9,11 @@ +/* Tell thorns that the Carpet routines exist */ +#define HAVE_CARPET + + + #ifdef __cplusplus namespace Carpet { extern "C" { @@ -20,6 +25,11 @@ namespace Carpet { + /* Prolongation management */ + int CarpetEnableProlongating (const int flag); + + + /* Call a schedule group */ int CallScheduleGroup (cGH * const cgh, const char * const group); diff --git a/Carpet/Carpet/src/carpet_public.hh b/Carpet/Carpet/src/carpet_public.hh index 0cee399c4..c7e0aa216 100644 --- a/Carpet/Carpet/src/carpet_public.hh +++ b/Carpet/Carpet/src/carpet_public.hh @@ -1,4 +1,4 @@ -// $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/carpet_public.hh,v 1.32 2003/07/14 15:41:34 schnetter Exp $ +// $Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/carpet_public.hh,v 1.33 2003/07/20 21:03:43 schnetter Exp $ // It is assumed that the number of components of all arrays is equal // to the number of components of the grid functions, and that their @@ -73,6 +73,9 @@ namespace Carpet { // Is this the time for a global mode call? extern bool do_global_mode; + // Is prolongation enabled? + extern bool do_prolongate; + // Current times on the refinement levels extern vector<CCTK_REAL> refleveltimes; extern CCTK_REAL delta_time; diff --git a/Carpet/Carpet/src/helpers.cc b/Carpet/Carpet/src/helpers.cc index c6ef56165..7631b5db7 100644 --- a/Carpet/Carpet/src/helpers.cc +++ b/Carpet/Carpet/src/helpers.cc @@ -15,7 +15,7 @@ #include "carpet.hh" extern "C" { - static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/helpers.cc,v 1.39 2003/07/09 21:59:08 schnetter Exp $"; + static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/helpers.cc,v 1.40 2003/07/20 21:03:43 schnetter Exp $"; CCTK_FILEVERSION(Carpet_Carpet_helpers_cc); } @@ -428,6 +428,21 @@ namespace Carpet { + // Enable or disable prolongating + int CarpetEnableProlongating (const int flag) + { + assert (flag==0 || flag==1); + do_prolongate = flag; + if (do_prolongate) { + Checkpoint ("Prolongating enabled"); + } else { + Checkpoint ("Prolongating disabled"); + } + return 0; + } + + + // This is a temporary measure to call a schedule group from a level // mode function. int CallScheduleGroup (cGH * const cgh, const char * const group) diff --git a/Carpet/Carpet/src/variables.cc b/Carpet/Carpet/src/variables.cc index 09037bdd9..da18966bb 100644 --- a/Carpet/Carpet/src/variables.cc +++ b/Carpet/Carpet/src/variables.cc @@ -6,7 +6,7 @@ #include "carpet.hh" extern "C" { - static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/variables.cc,v 1.16 2003/06/18 18:28:07 schnetter Exp $"; + static const char* rcsid = "$Header: /home/eschnett/C/carpet/Carpet/Carpet/Carpet/src/variables.cc,v 1.17 2003/07/20 21:03:43 schnetter Exp $"; CCTK_FILEVERSION(Carpet_Carpet_variables_cc); } @@ -55,6 +55,9 @@ namespace Carpet { // Is this the time for a global mode call? bool do_global_mode; + // Is prolongation enabled? + bool do_prolongate; + // Current times on the refinement levels vector<CCTK_REAL> refleveltimes; CCTK_REAL delta_time; diff --git a/Carpet/CarpetLib/param.ccl b/Carpet/CarpetLib/param.ccl index 707da6619..4316c4dd7 100644 --- a/Carpet/CarpetLib/param.ccl +++ b/Carpet/CarpetLib/param.ccl @@ -1,5 +1,5 @@ # Parameter definitions for thorn CarpetLib -# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/param.ccl,v 1.4 2003/07/16 21:45:58 schnetter Exp $ +# $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/param.ccl,v 1.5 2003/07/20 21:03:43 schnetter Exp $ private: @@ -14,8 +14,3 @@ BOOLEAN barriers "Insert barriers at strategic places for debugging purposes (sl BOOLEAN output_bboxes "Output bounding box information to the screen" { } "no" - -CCTK_INT buffer_width "Width of the buffer zone between the prolongation destination and the restriction source" -{ - 0:* :: "2 seems to be the minimum for second-order convergence" -} 2 diff --git a/Carpet/CarpetLib/src/data.cc b/Carpet/CarpetLib/src/data.cc index 155e220db..9a3c6c010 100644 --- a/Carpet/CarpetLib/src/data.cc +++ b/Carpet/CarpetLib/src/data.cc @@ -1,4 +1,4 @@ -// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/data.cc,v 1.26 2003/06/24 14:00:58 schnetter Exp $ +// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/data.cc,v 1.27 2003/07/20 21:03:43 schnetter Exp $ #include <assert.h> @@ -206,7 +206,7 @@ void data<T,D> assert (rank == proc()); T Tdummy; - CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, + CCTK_VWarn (2, __LINE__, __FILE__, CCTK_THORNSTRING, "There is no interpolator available for variable type %s, dimension %d, spatial interpolation order %d, temporal interpolation order %d. The interpolation will not be done.", typestring(Tdummy), D, order_space, order_time); } diff --git a/Carpet/CarpetLib/src/dh.cc b/Carpet/CarpetLib/src/dh.cc index 4c9fd616d..40688562c 100644 --- a/Carpet/CarpetLib/src/dh.cc +++ b/Carpet/CarpetLib/src/dh.cc @@ -1,4 +1,4 @@ -// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/dh.cc,v 1.39 2003/07/17 15:40:28 schnetter Exp $ +// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/dh.cc,v 1.40 2003/07/20 21:03:43 schnetter Exp $ #include <assert.h> @@ -18,13 +18,17 @@ using namespace std; // Constructors template<int D> -dh<D>::dh (gh<D>& h, const ivect& lghosts, const ivect& ughosts, - int prolongation_order_space) +dh<D>::dh (gh<D>& h, + const ivect& lghosts, const ivect& ughosts, + const int prolongation_order_space, const int buffer_width) : h(h), lghosts(lghosts), ughosts(ughosts), - prolongation_order_space(prolongation_order_space) + prolongation_order_space(prolongation_order_space), + buffer_width(buffer_width) { assert (all(lghosts>=0 && ughosts>=0)); + assert (prolongation_order_space>=0); + assert (buffer_width>=0); h.add(this); CHECKPOINT; recompose(false); @@ -218,7 +222,10 @@ void dh<D>::recompose (const int initialise_upto) { // coarsify boundaries of fine component for (typename ibset::const_iterator bi=bndsf.begin(); bi!=bndsf.end(); ++bi) { - const ibbox& bndf = *bi; + // TODO +// const ibbox& bndf = *bi; + const ibbox& bndf = ((*bi).expand(buffer_width, buffer_width) + & boxes[rl+1][cc][ml].exterior); // (the prolongation may use the exterior of the // coarse grid, and must fill all of the boundary of // the fine grid) @@ -282,6 +289,7 @@ void dh<D>::recompose (const int initialise_upto) { boxes[rl ][c ][ml].recv_ref_fine [cc].push_back(recv); } #else + // TODO ivect buf[2]; for (int f=0; f<2; ++f) { for (int d=0; d<D; ++d) { @@ -289,9 +297,11 @@ void dh<D>::recompose (const int initialise_upto) { ? 0 : buffer_width); } } - const ibbox recv = (intrf.contracted_for(intr) + const ibbox recv = (intrf .expand(-buf[0], -buf[1]) + .contracted_for(intr) & intr); +// const ibbox recv = intrf.contracted_for(intr) & intr; const ibbox send = recv.expanded_for(intrf); assert (send.empty() == recv.empty()); if (! send.empty()) { @@ -452,7 +462,8 @@ void dh<D>::recompose (const int initialise_upto) { const int this_sz = li->size(); intr -= *li; const int new_sz = intr.size(); - assert (new_sz + this_sz == old_sz); + // TODO +// assert (new_sz + this_sz == old_sz); } } #if 0 @@ -489,7 +500,8 @@ void dh<D>::recompose (const int initialise_upto) { const int this_sz = li->size(); bnds -= *li; const int new_sz = bnds.size(); - assert (new_sz + this_sz == old_sz); + // TODO +// assert (new_sz + this_sz == old_sz); } } } diff --git a/Carpet/CarpetLib/src/dh.hh b/Carpet/CarpetLib/src/dh.hh index 98c7c75e3..4a23d5cba 100644 --- a/Carpet/CarpetLib/src/dh.hh +++ b/Carpet/CarpetLib/src/dh.hh @@ -1,4 +1,4 @@ -// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/dh.hh,v 1.14 2003/05/02 14:23:12 schnetter Exp $ +// $Header: /home/eschnett/C/carpet/Carpet/Carpet/CarpetLib/src/dh.hh,v 1.15 2003/07/20 21:03:43 schnetter Exp $ #ifndef DH_HH #define DH_HH @@ -95,17 +95,18 @@ public: // should be readonly ivect lghosts, ughosts; // ghost zones int prolongation_order_space; // order of spatial prolongation operator + int buffer_width; // buffer inside refined grids rboxes boxes; rbases bases; - list<ggf<D>*> gfs; // list of all grid functions + list<ggf<D>*> gfs; // list of all grid functions public: // Constructors dh (gh<D>& h, const ivect& lghosts, const ivect& ughosts, - int prolongation_order_space); + int prolongation_order_space, int buffer_width); // Destructors virtual ~dh (); |