diff options
author | Peter Diener <diener@cct.lsu.edu> | 2013-05-24 12:50:01 -0500 |
---|---|---|
committer | Peter Diener <diener@cct.lsu.edu> | 2013-05-24 12:50:01 -0500 |
commit | 9748e3a83336a9ccae73a66481530f8049e8c78d (patch) | |
tree | c1f59a95fd24dd5bc7acfc907797e94ad68fcea6 /Carpet/Carpet | |
parent | 45ec6d4b74e02f439c7c429bb0a66972ea1ba46b (diff) |
Reduce time spent in cycling timelevels if there is only one timelevel.
Avoid calling routine that swaps pointers to different timelevels if there
is only one timelevel active for a grid variable. This is an performance
improvement if there are a large number of grid variables (as in the case
of large vectors of grid variables).
Signed-off-by: Peter Diener <diener@cct.lsu.edu>
Diffstat (limited to 'Carpet/Carpet')
-rw-r--r-- | Carpet/Carpet/src/Cycle.cc | 106 |
1 files changed, 54 insertions, 52 deletions
diff --git a/Carpet/Carpet/src/Cycle.cc b/Carpet/Carpet/src/Cycle.cc index 48d239276..5210d7f48 100644 --- a/Carpet/Carpet/src/Cycle.cc +++ b/Carpet/Carpet/src/Cycle.cc @@ -47,66 +47,68 @@ namespace Carpet { int const activetimelevels = CCTK_ActiveTimeLevelsGI (cctkGH, group); - switch (groupdata.AT(group).transport_operator) { - case op_Lagrange: - case op_ENO: - case op_WENO: - case op_Lagrange_monotone: - if (activetimelevels > 1) { - if (activetimelevels < prolongation_order_time+1) { - char * const groupname = CCTK_GroupName (group); - CCTK_VWarn (CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING, - "Group \"%s\" has %d only active time levels. Groups with more than one active time level need at least %d active time levels for prolongation_order_time=%d", - groupname, - activetimelevels, int(prolongation_order_time+1), - int(prolongation_order_time)); - free (groupname); - ++ errors; + if (activetimelevels > 1) { + switch (groupdata.AT(group).transport_operator) { + case op_Lagrange: + case op_ENO: + case op_WENO: + case op_Lagrange_monotone: + if (activetimelevels > 1) { + if (activetimelevels < prolongation_order_time+1) { + char * const groupname = CCTK_GroupName (group); + CCTK_VWarn (CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING, + "Group \"%s\" has %d only active time levels. Groups with more than one active time level need at least %d active time levels for prolongation_order_time=%d", + groupname, + activetimelevels, int(prolongation_order_time+1), + int(prolongation_order_time)); + free (groupname); + ++ errors; + } } + break; + default: + ; // do nothing } - break; - default: - ; // do nothing - } - switch (CCTK_GroupTypeI(group)) { + switch (CCTK_GroupTypeI(group)) { - case CCTK_GF: - assert (reflevel>=0 and reflevel<reflevels); - for (int m=0; m<(int)arrdata.AT(group).size(); ++m) { - for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) { - arrdata.AT(group).AT(m).data.AT(var)-> - cycle_all (reflevel, mglevel); + case CCTK_GF: + assert (reflevel>=0 and reflevel<reflevels); + for (int m=0; m<(int)arrdata.AT(group).size(); ++m) { + for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) { + arrdata.AT(group).AT(m).data.AT(var)-> + cycle_all (reflevel, mglevel); + } } - } - break; + break; - case CCTK_SCALAR: - case CCTK_ARRAY: - if (do_global_mode) { - int const numtimelevels = CCTK_NumTimeLevelsI (group); - int const firstvarindex = CCTK_FirstVarIndexI (group); - for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) { - arrdata.AT(group).AT(0).data.AT(var)->cycle_all (0, mglevel); - { - int const varindex = firstvarindex + var; - for (int tl=0; tl<numtimelevels; ++tl) { - if (tl < groupdata.AT(group).info.activetimelevels) { - ggf *const ff = arrdata.AT(group).AT(0).data.AT(var); - void *const ptr = ff->data_pointer(tl, 0, 0, 0)->storage(); - cctkGH->data[varindex][tl] = ptr; - } else { - cctkGH->data[varindex][tl] = NULL; - } - } - } + case CCTK_SCALAR: + case CCTK_ARRAY: + if (do_global_mode) { + int const numtimelevels = CCTK_NumTimeLevelsI (group); + int const firstvarindex = CCTK_FirstVarIndexI (group); + for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) { + arrdata.AT(group).AT(0).data.AT(var)->cycle_all (0, mglevel); + { + int const varindex = firstvarindex + var; + for (int tl=0; tl<numtimelevels; ++tl) { + if (tl < groupdata.AT(group).info.activetimelevels) { + ggf *const ff = arrdata.AT(group).AT(0).data.AT(var); + void *const ptr = ff->data_pointer(tl, 0, 0, 0)->storage(); + cctkGH->data[varindex][tl] = ptr; + } else { + cctkGH->data[varindex][tl] = NULL; + } + } + } + } } - } - break; + break; - default: - assert (0); - } // switch grouptype + default: + assert (0); + } // switch grouptype + } // if activetimelevels > 1 } // if storage } // for group |