diff options
author | Erik Schnetter <schnetter@cct.lsu.edu> | 2009-09-03 16:19:15 -0500 |
---|---|---|
committer | Barry Wardell <barry.wardell@gmail.com> | 2011-12-14 16:42:31 +0000 |
commit | 11c4d98017cbb86d08e15fd1b549180184b58a26 (patch) | |
tree | 2546a154c6f7bc0bec87de7316125ae7d1453569 | |
parent | f520477b1c14e02f1495cfa8d3e09f4e21ab34d0 (diff) |
Import Carpet
Ignore-this: 309b4dd613f4af2b84aa5d6743fdb6b3
377 files changed, 46872 insertions, 7463 deletions
diff --git a/.gitignore b/.gitignore deleted file mode 100644 index ba05b638e..000000000 --- a/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Lines starting with '#' are considered comments. - -.DS_Store -*.[oa] -*.aux -*.bbl -*.blg -*.log -*~ -.#* diff --git a/Carpet/Carpet/README b/Carpet/Carpet/README index 03ce32952..75caae781 100644 --- a/Carpet/Carpet/README +++ b/Carpet/Carpet/README @@ -1,8 +1,10 @@ Cactus Code Thorn Carpet -Authors : Erik Schnetter <schnetter@uni-tuebingen.de> +Author(s) : Erik Schnetter <schnetter@cct.lsu.edu> +Maintainer(s): Erik Schnetter <schnetter@cct.lsu.edu> +Licence : GPLv2+ -------------------------------------------------------------------------- -Purpose of the thorn: +1. Purpose This thorn provides a parallel AMR (adaptive mesh refinement) driver with MPI. diff --git a/Carpet/Carpet/configuration.ccl b/Carpet/Carpet/configuration.ccl index a80a319df..a7294fc09 100644 --- a/Carpet/Carpet/configuration.ccl +++ b/Carpet/Carpet/configuration.ccl @@ -2,10 +2,8 @@ PROVIDES Carpet { - SCRIPT - LANG } -REQUIRES IOUtil CarpetLib +REQUIRES IOUtil CarpetLib LoopControl -REQUIRES THORNS: IOUtil CarpetLib +REQUIRES THORNS: IOUtil CarpetLib LoopControl diff --git a/Carpet/Carpet/interface.ccl b/Carpet/Carpet/interface.ccl index 87c44e941..a61f22fc6 100644 --- a/Carpet/Carpet/interface.ccl +++ b/Carpet/Carpet/interface.ccl @@ -7,6 +7,10 @@ include header: carpet_public.h in carpet.h include header: Timers.hh in CarpetTimers.hh +uses include header: loopcontrol.h + +uses include header: mpi_string.hh + uses include header: defs.hh uses include header: dist.hh @@ -217,6 +221,21 @@ PROVIDES FUNCTION GetRefinementLevels \ +# Get pointer to grid variable for a specific map and refinement level +CCTK_POINTER FUNCTION \ + VarDataPtrI \ + (CCTK_POINTER_TO_CONST IN cctkGH, \ + CCTK_INT IN map, \ + CCTK_INT IN reflevel, \ + CCTK_INT IN component, \ + CCTK_INT IN timelevel, \ + CCTK_INT IN varindex) +PROVIDES FUNCTION VarDataPtrI \ + WITH Carpet_VarDataPtrI \ + LANGUAGE C + + + # The true prototype of the routine below: # int Carpet_Regrid (const cGH * cctkGH, # gh::rregs * superregss, @@ -249,11 +268,32 @@ REQUIRES FUNCTION IO_TruncateOutputFiles +# TODO: make this somehow public, e.g. by moving it into its own thorn + +CCTK_INT point_classification TYPE=gf TAGS='checkpoint="no" prolongation="none"' +{ + point_class + # negative: needs to be set explicitly (e.g. boundary) + # zero: unused (e.g. ghost) + # positive: needs to be evolved + # -1: boundary point (needs to be set explicitly) + # 0: unused (e.g. ghost point, or restriction target) + # n=1..N: evolved, used for integrator substeps i<=n + # (i=N..1, counting backwards; see MoL documentation) + # i.e.: n=1: used between time steps (i.e., should be visualised) + # n>1: used only while time stepping (e.g. buffer zones) +} "Grid point classification" + + + CCTK_REAL timing TAGS='checkpoint="no"' { physical_time_per_hour + current_physical_time_per_hour + + time_total time_evolution time_computing time_communicating time_io - time_total time_computing time_communicating time_io + evolution_steps_count local_grid_points_per_second total_grid_points_per_second local_grid_point_updates_count total_grid_point_updates_count diff --git a/Carpet/Carpet/param.ccl b/Carpet/Carpet/param.ccl index d4887cec7..d221d2158 100644 --- a/Carpet/Carpet/param.ccl +++ b/Carpet/Carpet/param.ccl @@ -171,21 +171,12 @@ STRING model "Model name for multi-model simulations -- the model name is used t CCTK_INT prolongation_order_space "Order of prolongation operator in space" STEERABLE=recover { - 1 :: "first order (linear)" - 3 :: "third order (cubic)" - 5 :: "fifth order" - 7 :: "seventh order" - 9 :: "ninth order" - 11 :: "eleventh order (one more than tenth)" + 0:* :: "vertex centred orders must be odd" } 1 CCTK_INT prolongation_order_time "Order of prolongation operator in time" STEERABLE=recover { - 0 :: "zeroth order (constant)" - 1 :: "first order (linear)" - 2 :: "second order (quadratic)" - 3 :: "third order (cubic)" - 4 :: "fourth order (quartic)" + 0:* :: "" } 1 @@ -291,21 +282,20 @@ BOOLEAN enable_all_storage "Enable storage for all grid functions" STEERABLE=rec { } "no" +BOOLEAN enable_no_storage "Exit before beginning to enable storage for grid functions" STEERABLE=recover +{ +} "no" + BOOLEAN poison_new_timelevels "Try to catch uninitialised grid elements by setting new timelevels to values that will catch your attention" STEERABLE=always { -} "no" +} "yes" BOOLEAN check_for_poison "Explicitely check for the poison value after every time step" STEERABLE=always { } "no" -CCTK_INT poison_value "Integer value (0..255) used to poison new timelevels (with memset)" STEERABLE=always -{ - 0:255 :: "Must fit into a byte. Use 0 for zero, 255 for nan, and e.g. 113 for a large value." -} 255 - CCTK_INT max_poison_locations "Maximum number of poison locations that are printed to the screen" STEERABLE=always { -1 :: "print all locations" @@ -314,13 +304,6 @@ CCTK_INT max_poison_locations "Maximum number of poison locations that are print -CCTK_INT deadbeef "A strange integer value that indicates that something has gone wrong; the integer equivalent of a nan" -{ - *:* :: "should be large and positive" -} 666 # 7353315 - - - BOOLEAN checksum_timelevels "Try to catch unintentionally changed timelevels by taking checksums and comparing against these" STEERABLE=always { } "no" @@ -357,6 +340,11 @@ BOOLEAN output_internal_data "Periodically print internal data to the screen for { } "no" +REAL timing_average_window_minutes "Time interval (in wall time minutes) for calculating the current physics time per hour" STEERABLE=always +{ + (0.0:* :: "" +} 10.0 + INT print_timestats_every "Print interesting timing statistics periodically" STEERABLE=always { -1 :: "don't report" @@ -377,21 +365,15 @@ STRING timer_file "File name in which detailed timing statistics are collected" "^.+$" :: "file name" } "carpet-timing-statistics" -INT max_core_size_MB "Maximum size of a core file" STEERABLE=recover +BOOLEAN timers_verbose "Output (debug) messages when a timer is started or stopped" STEERABLE=always { - -2 :: "unchanged" - -1 :: "unlimited" - 0:* :: "limited" -} -2 +} "no" -INT max_memory_size_MB "Maximum amount of memory per MPI process" STEERABLE=recover -{ - -2 :: "unchanged" - -1 :: "unlimited" - 0:* :: "limited" -} -2 +BOOLEAN recompose_verbose "Output debug information during recomposing" STEERABLE=ALWAYS +{ +} "no" KEYWORD processor_topology "How to determine the processor topology" STEERABLE=recover { diff --git a/Carpet/Carpet/schedule.ccl b/Carpet/Carpet/schedule.ccl index 3c9322b5f..0f839a5c8 100644 --- a/Carpet/Carpet/schedule.ccl +++ b/Carpet/Carpet/schedule.ccl @@ -1,5 +1,6 @@ # Schedule definitions for thorn Carpet +storage: point_classification storage: timing timing2 schedule CarpetMultiModelStartup at STARTUP as MultiModel_Startup before Driver_Startup diff --git a/Carpet/Carpet/src/AllGatherString.cc b/Carpet/Carpet/src/AllGatherString.cc deleted file mode 100644 index 5efa96114..000000000 --- a/Carpet/Carpet/src/AllGatherString.cc +++ /dev/null @@ -1,69 +0,0 @@ -#include <cassert> -#include <cstring> -//#include <iostream> -//#include <map> -#include <string> -#include <vector> - -#include <mpi.h> - -#include "cctk.h" - -#include "functions.hh" - - - -namespace Carpet -{ - - using namespace std; - - - - vector <string> - AllGatherString (MPI_Comm const world, - string const & data) - { - // Get the total number of processors - int num_procs; - MPI_Comm_size (world, & num_procs); - - // Gather the lengths of the data strings - int const length = data.length(); - vector <int> lengths (num_procs); - - MPI_Allgather (const_cast <int *> (& length), 1, MPI_INT, - & lengths.front(), 1, MPI_INT, - world); - - // Allocate space for all data strings - vector <int> offsets (num_procs + 1); - offsets.at(0) = 0; - for (int n = 0; n < num_procs; ++ n) - { - offsets.at(n + 1) = offsets.at(n) + lengths.at(n); - } - int const total_length = offsets.at(num_procs); - - // Gather all data strings - vector <char> alldata_buffer (total_length); - - MPI_Allgatherv (const_cast <char *> (data.c_str()), length, MPI_CHAR, - & alldata_buffer.front(), - const_cast <int *> (& lengths.front()), - const_cast <int *> (& offsets.front()), - MPI_CHAR, - world); - - // Convert data buffer with C strings to C++ strings - vector <string> alldata (num_procs); - for (int n = 0; n < num_procs; ++ n) - { - alldata.at(n) = - string (& alldata_buffer.at (offsets.at(n)), lengths.at(n)); - } - - return alldata; - } - -} // namespace Carpet diff --git a/Carpet/Carpet/src/CallFunction.cc b/Carpet/Carpet/src/CallFunction.cc index 696b5ce49..054ea6808 100644 --- a/Carpet/Carpet/src/CallFunction.cc +++ b/Carpet/Carpet/src/CallFunction.cc @@ -8,8 +8,8 @@ #include <gh.hh> -#include "carpet.hh" -#include "Timers.hh" +#include <carpet.hh> +#include <Timers.hh> @@ -76,13 +76,13 @@ namespace Carpet { BEGIN_META_MODE(cctkGH) { BEGIN_MGLEVEL_LOOP(cctkGH) { BEGIN_REFLEVEL_LOOP(cctkGH) { - BEGIN_MAP_LOOP(cctkGH, CCTK_GF) { + BEGIN_LOCAL_MAP_LOOP(cctkGH, CCTK_GF) { BEGIN_LOCAL_COMPONENT_LOOP(cctkGH, CCTK_GF) { CallScheduledFunction ("Meta time local mode", function, attribute, data, user_timer); } END_LOCAL_COMPONENT_LOOP; - } END_MAP_LOOP; + } END_LOCAL_MAP_LOOP; sync_timer.start(); SyncGroupsInScheduleBlock (attribute, cctkGH) ; sync_timer.stop(); @@ -159,13 +159,13 @@ namespace Carpet { if (attribute->loop_local) { BEGIN_GLOBAL_MODE(cctkGH) { BEGIN_REFLEVEL_LOOP(cctkGH) { - BEGIN_MAP_LOOP(cctkGH, CCTK_GF) { + BEGIN_LOCAL_MAP_LOOP(cctkGH, CCTK_GF) { BEGIN_LOCAL_COMPONENT_LOOP(cctkGH, CCTK_GF) { CallScheduledFunction ("Global time local mode", function, attribute, data, user_timer); } END_LOCAL_COMPONENT_LOOP; - } END_MAP_LOOP; + } END_LOCAL_MAP_LOOP; sync_timer.start(); SyncGroupsInScheduleBlock (attribute, cctkGH) ; sync_timer.stop(); @@ -213,13 +213,13 @@ namespace Carpet { // Level operation: call once per refinement level if (attribute->loop_local) { - BEGIN_MAP_LOOP(cctkGH, CCTK_GF) { + BEGIN_LOCAL_MAP_LOOP(cctkGH, CCTK_GF) { BEGIN_LOCAL_COMPONENT_LOOP(cctkGH, CCTK_GF) { CallScheduledFunction ("Level time local mode", function, attribute, data, user_timer); } END_LOCAL_COMPONENT_LOOP; - } END_MAP_LOOP; + } END_LOCAL_MAP_LOOP; } else if (attribute->loop_singlemap) { BEGIN_MAP_LOOP(cctkGH, CCTK_GF) { CallScheduledFunction @@ -239,13 +239,13 @@ namespace Carpet { // Single map operation: call once per refinement level and map if (attribute->loop_local) { - BEGIN_MAP_LOOP(cctkGH, CCTK_GF) { + BEGIN_LOCAL_MAP_LOOP(cctkGH, CCTK_GF) { BEGIN_LOCAL_COMPONENT_LOOP(cctkGH, CCTK_GF) { CallScheduledFunction ("Singlemap time local mode", function, attribute, data, user_timer); } END_LOCAL_COMPONENT_LOOP; - } END_MAP_LOOP; + } END_LOCAL_MAP_LOOP; } else { BEGIN_MAP_LOOP(cctkGH, CCTK_GF) { CallScheduledFunction @@ -260,13 +260,13 @@ namespace Carpet { } else { // Local operation: call once per component - BEGIN_MAP_LOOP(cctkGH, CCTK_GF) { + BEGIN_LOCAL_MAP_LOOP(cctkGH, CCTK_GF) { BEGIN_LOCAL_COMPONENT_LOOP(cctkGH, CCTK_GF) { CallScheduledFunction ("Local mode", function, attribute, data, user_timer); } END_LOCAL_COMPONENT_LOOP; - } END_MAP_LOOP; + } END_LOCAL_MAP_LOOP; sync_timer.start(); SyncGroupsInScheduleBlock (attribute, cctkGH) ; sync_timer.stop(); @@ -274,6 +274,7 @@ namespace Carpet { } if (schedule_barriers) { +#if 0 static unsigned int magic = 0xe8932329UL; // a random starting value unsigned int recv = magic; Checkpoint ("About to Bcast %u", magic); @@ -287,6 +288,9 @@ namespace Carpet { Checkpoint ("About to Barrier"); MPI_Barrier (dist::comm()); Checkpoint ("Finished Barrier"); +#endif + static int id = 513400912; // arbitrary starting value + CCTK_NamedBarrier (NULL, id++); } total_timer.stop(); diff --git a/Carpet/Carpet/src/CarpetBasegrid.cc b/Carpet/Carpet/src/CarpetBasegrid.cc index c2dc45f81..7e3ab4ae0 100644 --- a/Carpet/Carpet/src/CarpetBasegrid.cc +++ b/Carpet/Carpet/src/CarpetBasegrid.cc @@ -1,10 +1,10 @@ #include <limits> -#include "cctk.h" -#include "cctk_Arguments.h" -#include "cctk_Parameters.h" +#include <cctk.h> +#include <cctk_Arguments.h> +#include <cctk_Parameters.h> -#include "carpet.hh" +#include <carpet.hh> diff --git a/Carpet/Carpet/src/CarpetParamCheck.cc b/Carpet/Carpet/src/CarpetParamCheck.cc index fb9b40861..cf3d861ed 100644 --- a/Carpet/Carpet/src/CarpetParamCheck.cc +++ b/Carpet/Carpet/src/CarpetParamCheck.cc @@ -1,11 +1,11 @@ #include <cassert> #include <cstdlib> -#include "cctk.h" -#include "cctk_Arguments.h" -#include "cctk_Parameters.h" +#include <cctk.h> +#include <cctk_Arguments.h> +#include <cctk_Parameters.h> -#include "carpet.hh" +#include <carpet.hh> diff --git a/Carpet/Carpet/src/CarpetStartup.cc b/Carpet/Carpet/src/CarpetStartup.cc index 822c03845..07677c80d 100644 --- a/Carpet/Carpet/src/CarpetStartup.cc +++ b/Carpet/Carpet/src/CarpetStartup.cc @@ -1,12 +1,12 @@ #include <cassert> #include <cstdlib> -#include "cctk.h" -#include "cctk_Parameters.h" +#include <cctk.h> +#include <cctk_Parameters.h> -#include "carpet.hh" +#include <dist.hh> -#include "dist.hh" +#include <carpet.hh> @@ -19,8 +19,11 @@ namespace Carpet { DECLARE_CCTK_PARAMETERS; comm_universe = MPI_COMM_WORLD; + // cerr << "QQQ: CarpetMultiModelStartup[1]" << endl; SplitUniverse (comm_universe, model, comm_world, true); + // cerr << "QQQ: CarpetMultiModelStartup[2]" << endl; dist::pseudoinit (comm_world); + // cerr << "QQQ: CarpetMultiModelStartup[3]" << endl; return 0; } @@ -46,6 +49,7 @@ namespace Carpet { CCTK_OverloadEnableGroupComm (EnableGroupComm); CCTK_OverloadDisableGroupComm (DisableGroupComm); CCTK_OverloadBarrier (Barrier); + CCTK_OverloadNamedBarrier (NamedBarrier); CCTK_OverloadExit (Exit); CCTK_OverloadAbort (Abort); CCTK_OverloadMyProc (MyProc); diff --git a/Carpet/Carpet/src/Checksum.cc b/Carpet/Carpet/src/Checksum.cc index e65710038..139ba1555 100644 --- a/Carpet/Carpet/src/Checksum.cc +++ b/Carpet/Carpet/src/Checksum.cc @@ -2,12 +2,14 @@ #include <cstdlib> #include <vector> -#include "cctk.h" -#include "cctk_Parameters.h" +#include <cctk.h> +#include <cctk_Parameters.h> +#include <util_ErrorCodes.h> +#include <util_Table.h> -#include "gh.hh" +#include <gh.hh> -#include "carpet.hh" +#include <carpet.hh> @@ -20,7 +22,7 @@ namespace Carpet { // Checksum information struct ckdesc { bool valid; - unsigned int sum; + unsigned long sum; }; // Helper class @@ -33,6 +35,30 @@ namespace Carpet { + // Calculate the internet checksum (see RFC 1071) + static unsigned short + internet_checksum (void const * restrict const addr, + size_t const len) + { + unsigned long chk = 0; +#pragma omp parallel for reduction (+: chk) + for (ptrdiff_t i=0; i<(ptrdiff_t)len; i+=2) { + unsigned long const lb = ((unsigned char const*)addr)[i]; + unsigned long const ub = ((unsigned char const*)addr)[i+1]; + chk += lb + (ub << 8); + } + if (len % 1) { + unsigned long const lb = ((unsigned char const*)addr)[len-1]; + chk += lb; + } + while (chk >> 16) { + chk = (chk & 0xffffUL) + (chk >> 16); + } + return ~chk; + } + + + // The parameter where specifies which time levels should be // poisoned. what specifies what kind of grid variables should be // poisoned. @@ -52,11 +78,11 @@ namespace Carpet { const int grouptype = CCTK_GroupTypeI(group); if (reflevel == 0 or grouptype == CCTK_GF) { checksums.at(reflevel).at(mglevel).at(group).a.resize(arrdata.at(group).size()); - BEGIN_MAP_LOOP(cgh, grouptype) { - checksums.at(reflevel).at(mglevel).at(group).a.at(map).resize(arrdata.at(group).at(map).hh->components(reflevel)); + BEGIN_LOCAL_MAP_LOOP(cgh, grouptype) { + checksums.at(reflevel).at(mglevel).at(group).a.at(map).resize(arrdata.at(group).at(map).hh->local_components(reflevel)); BEGIN_LOCAL_COMPONENT_LOOP(cgh, grouptype) { const int nvars = CCTK_NumVarsInGroupI(group); - checksums.at(reflevel).at(mglevel).at(group).a.at(map).at(component).resize(nvars); + checksums.at(reflevel).at(mglevel).at(group).a.at(map).at(local_component).resize(nvars); if (nvars > 0) { const int n0 = CCTK_FirstVarIndexI(group); @@ -70,30 +96,48 @@ namespace Carpet { } const int np = prod(size); + int const table = CCTK_GroupTagsTableI (group); + assert (table >= 0); + bool persistent; + char buf[100]; + int const ilen = + Util_TableGetString (table, sizeof buf, buf, "Persistent"); + if (ilen > 0) { + if (CCTK_EQUALS(buf, "yes")) { + persistent = true; + } else if (CCTK_EQUALS(buf, "no")) { + persistent = false; + } else { + assert (0); + } + } else if (ilen == UTIL_ERROR_TABLE_NO_SUCH_KEY) { + // default + persistent = true; + } else { + assert (0); + } + const int num_tl = CCTK_NumTimeLevelsFromVarI(n0); assert (num_tl>0); - const int min_tl = min_timelevel(where, num_tl); - const int max_tl = max_timelevel(where, num_tl); + const int min_tl = min_timelevel(where, num_tl, persistent); + const int max_tl = max_timelevel(where, num_tl, persistent); for (int var=0; var<nvars; ++var) { - checksums.at(reflevel).at(mglevel).at(group).a.at(map).at(component).at(var).resize(num_tl); + checksums.at(reflevel).at(mglevel).at(group).a.at(map).at(local_component).at(var).resize(num_tl); for (int tl=min_tl; tl<=max_tl; ++tl) { const int n = n0 + var; const void* data = cgh->data[n][tl]; - unsigned int chk = 0; - for (int i=0; i<np*sz/(int)sizeof chk; ++i) { - chk += ((const unsigned int*)data)[i]; - } + unsigned long const chk = internet_checksum (data, np*sz); - checksums.at(reflevel).at(mglevel).at(group).a.at(map).at(component).at(var).at(tl).sum = chk; - checksums.at(reflevel).at(mglevel).at(group).a.at(map).at(component).at(var).at(tl).valid = true; + checksums.at(reflevel).at(mglevel).at(group).a.at(map).at(local_component).at(var).at(tl).sum = chk; + checksums.at(reflevel).at(mglevel).at(group).a.at(map).at(local_component).at(var).at(tl).valid = true; } // for tl } // for var } // if group has vars } END_LOCAL_COMPONENT_LOOP; - } END_MAP_LOOP; + } END_LOCAL_MAP_LOOP; } // if grouptype fits } // if storage } // for group @@ -118,11 +162,11 @@ namespace Carpet { const int grouptype = CCTK_GroupTypeI(group); if (reflevel == 0 or grouptype == CCTK_GF) { assert (checksums.at(reflevel).at(mglevel).at(group).a.size()==arrdata.at(group).size()); - BEGIN_MAP_LOOP(cgh, grouptype) { - assert ((int)checksums.at(reflevel).at(mglevel).at(group).a.at(map).size()==arrdata.at(group).at(map).hh->components(reflevel)); + BEGIN_LOCAL_MAP_LOOP(cgh, grouptype) { + assert ((int)checksums.at(reflevel).at(mglevel).at(group).a.at(map).size()==arrdata.at(group).at(map).hh->local_components(reflevel)); BEGIN_LOCAL_COMPONENT_LOOP(cgh, grouptype) { const int nvars = CCTK_NumVarsInGroupI(group); - assert ((int)checksums.at(reflevel).at(mglevel).at(group).a.at(map).at(component).size()==nvars); + assert ((int)checksums.at(reflevel).at(mglevel).at(group).a.at(map).at(local_component).size()==nvars); if (nvars > 0) { const int n0 = CCTK_FirstVarIndexI(group); @@ -136,24 +180,42 @@ namespace Carpet { } const int np = prod(size); + int const table = CCTK_GroupTagsTableI (group); + assert (table >= 0); + bool persistent; + char buf[100]; + int const ilen = + Util_TableGetString (table, sizeof buf, buf, "Persistent"); + if (ilen > 0) { + if (CCTK_EQUALS(buf, "yes")) { + persistent = true; + } else if (CCTK_EQUALS(buf, "no")) { + persistent = false; + } else { + assert (0); + } + } else if (ilen == UTIL_ERROR_TABLE_NO_SUCH_KEY) { + // default + persistent = true; + } else { + assert (0); + } + const int num_tl = CCTK_NumTimeLevelsFromVarI(n0); assert (num_tl>0); - const int min_tl = min_timelevel(where, num_tl); - const int max_tl = max_timelevel(where, num_tl); + const int min_tl = min_timelevel(where, num_tl, persistent); + const int max_tl = max_timelevel(where, num_tl, persistent); for (int var=0; var<nvars; ++var) { - assert ((int)checksums.at(reflevel).at(mglevel).at(group).a.at(map).at(component).at(var).size()==num_tl); + assert ((int)checksums.at(reflevel).at(mglevel).at(group).a.at(map).at(local_component).at(var).size()==num_tl); for (int tl=min_tl; tl<=max_tl; ++tl) { - if (checksums.at(reflevel).at(mglevel).at(group).a.at(map).at(component).at(var).at(tl).valid) { + if (checksums.at(reflevel).at(mglevel).at(group).a.at(map).at(local_component).at(var).at(tl).valid) { const int n = n0 + var; const void* data = cgh->data[n][tl]; - unsigned int chk = 0; - for (int i=0; i<np*sz/(int)sizeof chk; ++i) { - chk += ((const unsigned int*)data)[i]; - } + unsigned long const chk = internet_checksum (data, np*sz); const bool unexpected_change = - chk != checksums.at(reflevel).at(mglevel).at(group).a.at(map).at(component).at(var).at(tl).sum; + chk != checksums.at(reflevel).at(mglevel).at(group).a.at(map).at(local_component).at(var).at(tl).sum; if (unexpected_change) { char* fullname = CCTK_FullName(n); @@ -168,7 +230,7 @@ namespace Carpet { } // for var } // if group has vars } END_LOCAL_COMPONENT_LOOP; - } END_MAP_LOOP; + } END_LOCAL_MAP_LOOP; } // if grouptype fits } // if storage } // for group diff --git a/Carpet/Carpet/src/Comm.cc b/Carpet/Carpet/src/Comm.cc index 674d7a40c..64f2f0480 100644 --- a/Carpet/Carpet/src/Comm.cc +++ b/Carpet/Carpet/src/Comm.cc @@ -4,13 +4,14 @@ #include <cstdlib> #include <iostream> -#include "cctk.h" -#include "cctk_Parameters.h" +#include <cctk.h> +#include <cctk_Parameters.h> -#include "ggf.hh" -#include "gh.hh" +#include <ggf.hh> +#include <gh.hh> -#include "carpet.hh" +#include <carpet.hh> +#include <Timers.hh> @@ -75,10 +76,11 @@ namespace Carpet { // check consistency of all groups: // create a new set with empty and no-storage groups removed vector<int> goodgroups; - for (size_t g = 0; g < groups.size(); g++) { - const int group = groups[g]; - const int grouptype = CCTK_GroupTypeI (group); - char* groupname = CCTK_GroupName (group); + goodgroups.reserve (groups.size()); + for (size_t group = 0; group < groups.size(); group++) { + const int g = groups.AT(group); + const int grouptype = CCTK_GroupTypeI (g); + char* const groupname = CCTK_GroupName (g); Checkpoint ("SyncGroup \"%s\" time=%g", groupname, (double) cctkGH->cctk_time); @@ -102,7 +104,7 @@ namespace Carpet { } } if (component != -1) { - if (maps == 1 and vhh.at(map)->local_components(reflevel) == 1) { + if (maps == 1 and vhh.AT(map)->local_components(reflevel) == 1) { CCTK_VWarn (2, __LINE__, __FILE__, CCTK_THORNSTRING, "Synchronising group \"%s\" in local mode", groupname); @@ -115,83 +117,39 @@ namespace Carpet { } } - if (not CCTK_QueryGroupStorageI (cctkGH, group)) { + if (not CCTK_QueryGroupStorageI (cctkGH, g)) { CCTK_VWarn (2, __LINE__, __FILE__, CCTK_THORNSTRING, "Cannot synchronise group \"%s\" because it has no storage", groupname); retval = -1; } - else if (CCTK_NumVarsInGroupI (group) > 0) { - goodgroups.push_back(group); + else if (CCTK_NumVarsInGroupI (g) > 0) { + goodgroups.push_back(g); } free (groupname); - } + } // for g if (goodgroups.size() > 0) { - bool local_do_prolongate; - if (do_prolongate) { - if (do_taper) { - if (reflevel == 0) { - local_do_prolongate = true; - } else { // on a fine level -#warning "TODO: Check iteration number instead -- this is wrong while regridding" - CCTK_REAL mytime; - CCTK_REAL parenttime; - if (map == -1) { - mytime = vtt.at(0)->time (0, reflevel, mglevel); - parenttime = vtt.at(0)->time (0, reflevel - 1, mglevel); - } else { - mytime = vtt.at(map)->time (0, reflevel, mglevel); - parenttime = vtt.at(map)->time (0, reflevel - 1, mglevel); - } - CCTK_REAL const eps = 1.0e-12; - bool const in_sync = - abs (mytime - parenttime) <= eps * abs (delta_time); -#if 0 - int const parent_do_every = - ipow(mgfact, mglevel) * - (maxtimereflevelfact / timereffacts.at(reflevel-1)); - bool const parent_is_active = - cctkGH->cctk_iteration == 0 or - (cctkGH->cctk_iteration-1) % parent_do_every == 0; - int const do_every = - ipow(mgfact, mglevel) * - (maxtimereflevelfact / timereffacts.at(reflevel)); - bool const is_active = - cctkGH->cctk_iteration == 0 or - (cctkGH->cctk_iteration-1) % do_every == 0; - bool const new_in_sync = is_active and parent_is_active; -#warning "just for testing" -#warning "if this breaks, fix also CarpetRegrid2" - assert (new_in_sync == in_sync); - if (not (new_in_sync == in_sync)) { - CCTK_WARN (CCTK_WARN_ABORT, "assert (new_in_sync == in_sync)"); - } -#endif - local_do_prolongate = in_sync; - } - } else { // no tapered grids - local_do_prolongate = true; - } - } else { // not do_prolongate - local_do_prolongate = false; - } - // prolongate boundaries + bool const local_do_prolongate = do_prolongate and not do_taper; if (local_do_prolongate) { - if (reflevel > 0) { - ProlongateGroupBoundaries (cctkGH, cctk_initial_time, goodgroups); - } + static Timer timer ("Evolve::Prolongate"); + timer.start(); + ProlongateGroupBoundaries (cctkGH, cctk_initial_time, goodgroups); + timer.stop(); } // synchronise ghostzones if (sync_during_time_integration or local_do_prolongate) { + static Timer timer ("Evolve::Sync"); + timer.start(); SyncGroups (cctkGH, goodgroups); + timer.stop(); } - } // for g + } return retval; } @@ -204,10 +162,16 @@ namespace Carpet { DECLARE_CCTK_PARAMETERS; const int tl = 0; - // use the current time here (which may be modified by the user) - const CCTK_REAL time - = (cctkGH->cctk_time - initial_time) / delta_time; + if (reflevel == 0) return; + + Checkpoint ("ProlongateGroups"); + assert (groups.size() > 0); + + // use the current time here (which may be modified by the user) + const CCTK_REAL time = + (cctkGH->cctk_time - initial_time) / delta_time; + for (comm_state state; not state.done(); state.step()) { for (int group = 0; group < (int)groups.size(); ++group) { const int g = groups.AT(group); @@ -216,10 +180,10 @@ namespace Carpet { continue; } assert (reflevel>=0 and reflevel<reflevels); - - for (int m = 0; m < (int)arrdata.at(g).size(); ++m) { - for (int v = 0; v < (int)arrdata.at(g).at(m).data.size(); ++v) { - ggf *const gv = arrdata.at(g).at(m).data.at(v); + + for (int m = 0; m < (int)arrdata.AT(g).size(); ++m) { + for (int v = 0; v < (int)arrdata.AT(g).AT(m).data.size(); ++v) { + ggf *const gv = arrdata.AT(g).AT(m).data.AT(v); gv->ref_bnd_prolongate_all (state, tl, reflevel, mglevel, time); } } @@ -234,18 +198,20 @@ namespace Carpet { DECLARE_CCTK_PARAMETERS; const int tl = 0; + Checkpoint ("SyncGroups"); + assert (groups.size() > 0); for (comm_state state; not state.done(); state.step()) { for (int group = 0; group < (int)groups.size(); ++group) { - const int g = groups[group]; + const int g = groups.AT(group); const int grouptype = CCTK_GroupTypeI (g); const int ml = grouptype == CCTK_GF ? mglevel : 0; const int rl = grouptype == CCTK_GF ? reflevel : 0; - for (int m = 0; m < (int)arrdata.at(g).size(); ++m) { - for (int v = 0; v < (int)arrdata.at(g).at(m).data.size(); ++v) { - arrdesc& array = arrdata.at(g).at(m); - array.data.at(v)->sync_all (state, tl, rl, ml); + for (int m = 0; m < (int)arrdata.AT(g).size(); ++m) { + for (int v = 0; v < (int)arrdata.AT(g).AT(m).data.size(); ++v) { + arrdesc& array = arrdata.AT(g).AT(m); + array.data.AT(v)->sync_all (state, tl, rl, ml); } } } diff --git a/Carpet/Carpet/src/Cycle.cc b/Carpet/Carpet/src/Cycle.cc index 1a2931dd0..889f305f1 100644 --- a/Carpet/Carpet/src/Cycle.cc +++ b/Carpet/Carpet/src/Cycle.cc @@ -1,12 +1,12 @@ #include <cassert> #include <cstdlib> -#include "cctk.h" +#include <cctk.h> -#include "ggf.hh" -#include "gh.hh" +#include <ggf.hh> +#include <gh.hh> -#include "carpet.hh" +#include <carpet.hh> @@ -27,9 +27,9 @@ namespace Carpet { case CCTK_GF: assert (reflevel>=0 and reflevel<reflevels); - for (int m=0; m<(int)arrdata.at(group).size(); ++m) { + 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)-> + arrdata.AT(group).AT(m).data.AT(var)-> cycle_all (reflevel, mglevel); } } @@ -41,15 +41,14 @@ namespace Carpet { 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); + arrdata.AT(group).AT(0).data.AT(var)->cycle_all (0, mglevel); { int const varindex = firstvarindex + var; - int const c = CCTK_MyProc(cgh); for (int tl=0; tl<numtimelevels; ++tl) { cgh->data[varindex][tl] - = (tl < groupdata.at(group).info.activetimelevels - ? ((*arrdata.at(group).at(0).data.at(var)) - (tl, 0, c, 0)->storage()) + = (tl < groupdata.AT(group).info.activetimelevels + ? ((*arrdata.AT(group).AT(0).data.AT(var)) + (tl, 0, 0, 0)->storage()) : NULL); } } @@ -77,9 +76,9 @@ namespace Carpet { case CCTK_GF: assert (reflevel>=0 and reflevel<reflevels); - for (int m=0; m<(int)arrdata.at(group).size(); ++m) { + 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)-> + arrdata.AT(group).AT(m).data.AT(var)-> flip_all (reflevel, mglevel); } } @@ -91,15 +90,14 @@ namespace Carpet { 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)->flip_all (0, mglevel); + arrdata.AT(group).AT(0).data.AT(var)->flip_all (0, mglevel); { int const varindex = firstvarindex + var; - int const c = CCTK_MyProc(cgh); for (int tl=0; tl<numtimelevels; ++tl) { cgh->data[varindex][tl] - = (tl < groupdata.at(group).info.activetimelevels - ? ((*arrdata.at(group).at(0).data.at(var)) - (tl, 0, c, 0)->storage()) + = (tl < groupdata.AT(group).info.activetimelevels + ? ((*arrdata.AT(group).AT(0).data.AT(var)) + (tl, 0, 0, 0)->storage()) : NULL); } } @@ -127,9 +125,9 @@ namespace Carpet { case CCTK_GF: assert (reflevel>=0 and reflevel<reflevels); - for (int m=0; m<(int)arrdata.at(group).size(); ++m) { + 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)-> + arrdata.AT(group).AT(m).data.AT(var)-> fill_all (reflevel, mglevel); } } @@ -139,7 +137,7 @@ namespace Carpet { case CCTK_ARRAY: if (do_global_mode) { for (int var=0; var<CCTK_NumVarsInGroupI(group); ++var) { - arrdata.at(group).at(0).data.at(var)->fill_all (0, mglevel); + arrdata.AT(group).AT(0).data.AT(var)->fill_all (0, mglevel); } } break; diff --git a/Carpet/Carpet/src/Evolve.cc b/Carpet/Carpet/src/Evolve.cc index 5b9d8ff96..103221088 100644 --- a/Carpet/Carpet/src/Evolve.cc +++ b/Carpet/Carpet/src/Evolve.cc @@ -16,8 +16,8 @@ #include <dist.hh> #include <th.hh> -#include "carpet.hh" -#include "Timers.hh" +#include <carpet.hh> +#include <Timers.hh> @@ -53,27 +53,21 @@ namespace Carpet { int const convlev = 0; cGH* cctkGH = fc->GH[convlev]; - // Tapered grids - do_taper = use_tapered_grids; - // Main loop - BeginTiming (cctkGH); + BeginTimingEvolution (cctkGH); static Timer timer ("Evolve"); timer.start(); while (not do_terminate (cctkGH)) { AdvanceTime (cctkGH); { - int const do_every = maxtimereflevelfact / timereffacts.at(reflevels-1); + int const do_every = maxtimereflevelfact / timereffacts.AT(reflevels-1); if ((cctkGH->cctk_iteration - 1) % do_every == 0) { - bool const old_do_taper = do_taper; - do_taper = false; ENTER_GLOBAL_MODE (cctkGH, 0) { BEGIN_REFLEVEL_LOOP (cctkGH) { CallRegrid (cctkGH); } END_REFLEVEL_LOOP; } LEAVE_GLOBAL_MODE; - do_taper = old_do_taper; } } CallEvol (cctkGH); @@ -83,7 +77,7 @@ namespace Carpet { // Print timer values { - int const do_every = maxtimereflevelfact / timereffacts.at(reflevels-1); + int const do_every = maxtimereflevelfact / timereffacts.AT(reflevels-1); if (output_timers_every > 0 and cctkGH->cctk_iteration % output_timers_every == 0 and cctkGH->cctk_iteration % do_every == 0) @@ -99,9 +93,9 @@ namespace Carpet { for (int ml=0; ml<mglevels; ++ml) { for (int rl=0; rl<reflevels; ++rl) { int const do_every = - ipow (mgfact, ml) * (maxtimereflevelfact / timereffacts.at(rl)); + ipow (mgfact, ml) * (maxtimereflevelfact / timereffacts.AT(rl)); if (cctkGH->cctk_iteration % do_every == 0) { - assert (abs (leveltimes.at(ml).at(rl) - global_time) <= + assert (abs (leveltimes.AT(ml).AT(rl) - global_time) <= eps * global_time); } } @@ -111,8 +105,6 @@ namespace Carpet { } // end main loop timer.stop(); - do_taper = false; - Waypoint ("Done with evolution loop"); return 0; @@ -132,7 +124,7 @@ namespace Carpet { // Do not test on non-active reflevels to save the call to // MPI_Allreduce below - int const do_every = maxtimereflevelfact / timereffacts.at(reflevels-1); + int const do_every = maxtimereflevelfact / timereffacts.AT(reflevels-1); if (cctkGH->cctk_iteration % do_every != 0) { @@ -228,7 +220,7 @@ namespace Carpet { } if ((cctkGH->cctk_iteration-1) - % (maxtimereflevelfact / timereffacts.at(reflevels-1)) == 0) { + % (maxtimereflevelfact / timereffacts.AT(reflevels-1)) == 0) { Waypoint ("Evolving iteration %d at t=%g", cctkGH->cctk_iteration, (double)cctkGH->cctk_time); } @@ -273,25 +265,31 @@ namespace Carpet { // Regrid Checkpoint ("Regrid"); int const oldreflevels = reflevels; - bool const did_regrid = Regrid (cctkGH, false); + bool const did_regrid = Regrid (cctkGH, false, true); bool const did_remove_level = reflevels < oldreflevels; assert (not did_remove_level or did_regrid); if (did_regrid) { + bool did_any_recompose = false; BEGIN_META_MODE (cctkGH) { for (int rl=0; rl<reflevels; ++rl) { bool const did_recompose = Recompose (cctkGH, rl, true); + did_any_recompose = did_any_recompose or did_recompose; // Do not omit the global mode call when the finest level // does not change: // if (did_recompose or (did_remove_level and rl == reflevels - 1)) { - if (did_recompose or rl == reflevels - 1) { + if (did_recompose or + ((did_remove_level or did_any_recompose) and + rl == reflevels - 1)) + { BEGIN_MGLEVEL_LOOP (cctkGH) { ENTER_LEVEL_MODE (cctkGH, rl) { do_early_global_mode = reflevel==0; do_late_global_mode = reflevel==reflevels-1; - do_early_meta_mode = do_early_global_mode and mglevel==mglevels-1; + do_early_meta_mode = + do_early_global_mode and mglevel==mglevels-1; do_late_meta_mode = do_late_global_mode and mglevel==0; do_global_mode = do_late_global_mode; do_meta_mode = do_late_meta_mode; @@ -309,17 +307,17 @@ namespace Carpet { // Rewind times for (int m=0; m<maps; ++m) { - vtt.at(m)->set_delta + vtt.AT(m)->set_delta (reflevel, mglevel, - - vtt.at(m)->get_delta (reflevel, mglevel)); + - vtt.AT(m)->get_delta (reflevel, mglevel)); FlipTimeLevels (cctkGH); for (int tl=0; tl<num_tl; ++tl) { - vtt.at(m)->advance_time (reflevel, mglevel); + vtt.AT(m)->advance_time (reflevel, mglevel); CycleTimeLevels (cctkGH); } - vtt.at(m)->set_delta + vtt.AT(m)->set_delta (reflevel, mglevel, - - vtt.at(m)->get_delta (reflevel, mglevel)); + - vtt.AT(m)->get_delta (reflevel, mglevel)); FlipTimeLevels (cctkGH); } // for m CCTK_REAL const old_cctk_time = cctkGH->cctk_time; @@ -330,7 +328,7 @@ namespace Carpet { // Advance times for (int m=0; m<maps; ++m) { - vtt.at(m)->advance_time (reflevel, mglevel); + vtt.AT(m)->advance_time (reflevel, mglevel); } CycleTimeLevels (cctkGH); cctkGH->cctk_time += @@ -352,6 +350,8 @@ namespace Carpet { } END_META_MODE; } // if did_regrid + RegridFree (cctkGH, true); + do_global_mode = old_do_global_mode; do_early_global_mode = old_do_early_global_mode; do_late_global_mode = old_do_late_global_mode; @@ -380,7 +380,7 @@ namespace Carpet { for (int rl=0; rl<reflevels; ++rl) { int const do_every - = ipow(mgfact, ml) * (maxtimereflevelfact / timereffacts.at(rl)); + = ipow(mgfact, ml) * (maxtimereflevelfact / timereffacts.AT(rl)); if ((cctkGH->cctk_iteration-1) % do_every == 0) { ENTER_GLOBAL_MODE (cctkGH, ml) { ENTER_LEVEL_MODE (cctkGH, rl) { @@ -395,6 +395,15 @@ namespace Carpet { have_done_global_mode |= do_global_mode; have_done_anything = true; + if (use_tapered_grids and reflevel > 0) { + int const parent_do_every = + ipow(mgfact, mglevel) * + (maxtimereflevelfact / timereffacts.AT(reflevel-1)); + bool const parent_is_active = + (cctkGH->cctk_iteration-1) % parent_do_every == 0; + do_taper = not parent_is_active; + } + // Advance times cctkGH->cctk_time = (global_time @@ -402,7 +411,7 @@ namespace Carpet { + delta_time * mglevelfact / timereflevelfact); CCTK_REAL const carpet_time = cctkGH->cctk_time / delta_time; for (int m=0; m<maps; ++m) { - vtt.at(m)->advance_time (reflevel, mglevel); + vtt.AT(m)->advance_time (reflevel, mglevel); if (not adaptive_stepsize) { #if 0 // We must not perform this check, since the @@ -413,7 +422,7 @@ namespace Carpet { static_assert (abs(0.1) > 0, "Function CarpetLib::abs has wrong signature"); CCTK_REAL const level_time = - vtt.at(m)->get_time (reflevel, mglevel); + vtt.AT(m)->get_time (reflevel, mglevel); if (not (abs (level_time - carpet_time) <= eps * max (carpet_time, 1.0))) { int const oldprecision = cerr.precision(); @@ -429,15 +438,16 @@ namespace Carpet { assert (abs (level_time - carpet_time) <= eps * max (carpet_time, 1.0)); #endif - vtt.at(m)->set_time (reflevel, mglevel, carpet_time); + vtt.AT(m)->set_time (reflevel, mglevel, carpet_time); } } CycleTimeLevels (cctkGH); - Waypoint ("Evolution I at iteration %d time %g%s%s", + Waypoint ("Evolution I at iteration %d time %g%s%s%s", cctkGH->cctk_iteration, (double)cctkGH->cctk_time, (do_global_mode ? " (global)" : ""), - (do_meta_mode ? " (meta)" : "")); + (do_meta_mode ? " (meta)" : ""), + (do_taper ? " (tapering)" : "")); // Checking CalculateChecksums (cctkGH, allbutcurrenttime); @@ -451,7 +461,9 @@ namespace Carpet { PoisonCheck (cctkGH, currenttime); // Timing statistics - StepTiming (cctkGH); + StepTimingEvolution (cctkGH); + + do_taper = false; } LEAVE_LEVEL_MODE; } LEAVE_GLOBAL_MODE; @@ -476,7 +488,7 @@ namespace Carpet { for (int ml=mglevels-1; ml>=0; --ml) { for (int rl=reflevels-1; rl>=0; --rl) { int const do_every - = ipow(mgfact, ml) * (maxtimereflevelfact / timereffacts.at(rl)); + = ipow(mgfact, ml) * (maxtimereflevelfact / timereffacts.AT(rl)); if (cctkGH->cctk_iteration % do_every == 0) { ENTER_GLOBAL_MODE (cctkGH, ml) { ENTER_LEVEL_MODE (cctkGH, rl) { @@ -513,7 +525,7 @@ namespace Carpet { for (int rl=0; rl<reflevels; ++rl) { int const do_every - = ipow(mgfact, ml) * (maxtimereflevelfact / timereffacts.at(rl)); + = ipow(mgfact, ml) * (maxtimereflevelfact / timereffacts.AT(rl)); if (cctkGH->cctk_iteration % do_every == 0) { ENTER_GLOBAL_MODE (cctkGH, ml) { ENTER_LEVEL_MODE (cctkGH, rl) { @@ -528,10 +540,20 @@ namespace Carpet { have_done_global_mode |= do_global_mode; have_done_anything = true; - Waypoint ("Evolution II at iteration %d time %g%s%s", + if (use_tapered_grids and reflevel > 0) { + int const parent_do_every = + ipow(mgfact, mglevel) * + (maxtimereflevelfact / timereffacts.AT(reflevel-1)); + bool const parent_is_active = + (cctkGH->cctk_iteration-1) % parent_do_every == 0; + do_taper = not parent_is_active; + } + + Waypoint ("Evolution II at iteration %d time %g%s%s%s", cctkGH->cctk_iteration, (double)cctkGH->cctk_time, (do_global_mode ? " (global)" : ""), - (do_meta_mode ? " (meta)" : "")); + (do_meta_mode ? " (meta)" : ""), + (do_taper ? " (tapering)" : "")); if (reflevel < reflevels-1) { ScheduleTraverse (where, "CCTK_POSTRESTRICT", cctkGH); @@ -566,6 +588,8 @@ namespace Carpet { PrintTimingStats (cctkGH); } + do_taper = false; + } LEAVE_LEVEL_MODE; } LEAVE_GLOBAL_MODE; } // if do_every @@ -607,15 +631,27 @@ namespace Carpet { void ScheduleTraverse (char const * const where, char const * const name, cGH * const cctkGH) { + // Obtain the set of timers, creating it explicitly if it does not + // yet exist + typedef std::map <string, Timer *> timers_t; + // static timers_t timers; + static timers_t * timersp = NULL; + if (not timersp) timersp = new timers_t; + timers_t & timers = * timersp; + + // Obtain timer, creating a new one if it does not yet exist ostringstream timernamebuf; timernamebuf << where << "::" << name; string const timername = timernamebuf.str(); - static std::map <string, Timer *> timers; - Timer * & mapped = timers[timername]; - if (not mapped) { - mapped = new Timer (timername.c_str()); + timers_t::iterator ti = timers.find (timername); + if (ti == timers.end()) { + pair <string, Timer *> const + newtimer (timername, new Timer (timername.c_str())); + ti = timers.insert(newtimer).first; + // It is possible to find and insert with the same function + // call, but this makes the code significantly more complicated } - Timer & timer = * mapped; + Timer & timer = * ti->second; timer.start(); ostringstream infobuf; diff --git a/Carpet/Carpet/src/Initialise.cc b/Carpet/Carpet/src/Initialise.cc index 836be8635..94bd24521 100644 --- a/Carpet/Carpet/src/Initialise.cc +++ b/Carpet/Carpet/src/Initialise.cc @@ -11,8 +11,8 @@ #include <cctki_ScheduleBindings.h> #include <cctki_WarnLevel.h> -#include "carpet.hh" -#include "Timers.hh" +#include <carpet.hh> +#include <Timers.hh> @@ -64,8 +64,8 @@ namespace Carpet { global_time = cctk_initial_time; delta_time = 1.0; for (int ml = 0; ml < mglevel; ++ ml) { - assert (leveltimes.at(ml).size() == 1); - leveltimes.at(ml).at(0) = global_time; + assert (leveltimes.AT(ml).size() == 1); + leveltimes.AT(ml).AT(0) = global_time; } cctkGH->cctk_iteration = 0; @@ -87,8 +87,8 @@ namespace Carpet { #if 0 // Write grid structure to file for (int m=0; m<maps; ++m) { - OutputGridStructure (cctkGH, m, vhh.at(m)->regions); - OutputGridCoordinates (cctkGH, m, vhh.at(m)->regions); + OutputGridStructure (cctkGH, m, vhh.AT(m)->regions); + OutputGridCoordinates (cctkGH, m, vhh.AT(m)->regions); } // for m #endif @@ -332,15 +332,15 @@ namespace Carpet { not CCTK_EQUALS (initial_data_setup_method, "init_single_level"); for (int m=0; m<maps; ++m) { - vtt.at(m)->set_delta - (reflevel, mglevel, - vtt.at(m)->get_delta (reflevel, mglevel)); + vtt.AT(m)->set_delta + (reflevel, mglevel, - vtt.AT(m)->get_delta (reflevel, mglevel)); FlipTimeLevels (cctkGH); for (int tl=0; tl<num_tl; ++tl) { - vtt.at(m)->advance_time (reflevel, mglevel); + vtt.AT(m)->advance_time (reflevel, mglevel); CycleTimeLevels (cctkGH); } - vtt.at(m)->set_delta - (reflevel, mglevel, - vtt.at(m)->get_delta (reflevel, mglevel)); + vtt.AT(m)->set_delta + (reflevel, mglevel, - vtt.AT(m)->get_delta (reflevel, mglevel)); FlipTimeLevels (cctkGH); } // for m @@ -348,7 +348,7 @@ namespace Carpet { // Advance times for (int m=0; m<maps; ++m) { - vtt.at(m)->advance_time (reflevel, mglevel); + vtt.AT(m)->advance_time (reflevel, mglevel); } cctkGH->cctk_time = (+ global_time @@ -468,7 +468,7 @@ namespace Carpet { (do_meta_mode ? " (meta)" : "")); int const do_every = - ipow(mgfact, mglevel) * (maxtimereflevelfact / timereffacts.at(rl)); + ipow(mgfact, mglevel) * (maxtimereflevelfact / timereffacts.AT(rl)); if (cctkGH->cctk_iteration % do_every == 0) { // Checkpoint @@ -580,17 +580,17 @@ namespace Carpet { // Rewind times for (int m=0; m<maps; ++m) { - vtt.at(m)->set_delta + vtt.AT(m)->set_delta (reflevel, mglevel, - - vtt.at(m)->get_delta (reflevel, mglevel)); + - vtt.AT(m)->get_delta (reflevel, mglevel)); FlipTimeLevels (cctkGH); for (int tl=0; tl<num_tl; ++tl) { - vtt.at(m)->advance_time (reflevel, mglevel); + vtt.AT(m)->advance_time (reflevel, mglevel); CycleTimeLevels (cctkGH); } - vtt.at(m)->set_delta + vtt.AT(m)->set_delta (reflevel, mglevel, - - vtt.at(m)->get_delta (reflevel, mglevel)); + - vtt.AT(m)->get_delta (reflevel, mglevel)); FlipTimeLevels (cctkGH); } // for m CCTK_REAL const old_cctk_time = cctkGH->cctk_time; @@ -601,7 +601,7 @@ namespace Carpet { // Advance times for (int m=0; m<maps; ++m) { - vtt.at(m)->advance_time (reflevel, mglevel); + vtt.AT(m)->advance_time (reflevel, mglevel); } CycleTimeLevels (cctkGH); cctkGH->cctk_time += @@ -627,6 +627,10 @@ namespace Carpet { } END_META_MODE; } // if did_regrid + if (callregrid) { + RegridFree (cctkGH); + } + do_global_mode = old_do_global_mode; do_meta_mode = old_do_meta_mode; } @@ -670,15 +674,15 @@ namespace Carpet { // Rewind times for (int m=0; m<maps; ++m) { - vtt.at(m)->set_delta - (reflevel, mglevel, - vtt.at(m)->get_delta (reflevel, mglevel)); + vtt.AT(m)->set_delta + (reflevel, mglevel, - vtt.AT(m)->get_delta (reflevel, mglevel)); FlipTimeLevels (cctkGH); for (int tl=0; tl<num_tl; ++tl) { - vtt.at(m)->advance_time (reflevel, mglevel); + vtt.AT(m)->advance_time (reflevel, mglevel); CycleTimeLevels (cctkGH); } - vtt.at(m)->set_delta - (reflevel, mglevel, - vtt.at(m)->get_delta (reflevel, mglevel)); + vtt.AT(m)->set_delta + (reflevel, mglevel, - vtt.AT(m)->get_delta (reflevel, mglevel)); FlipTimeLevels (cctkGH); } // for m CCTK_REAL const old_cctk_time = cctkGH->cctk_time; @@ -689,7 +693,7 @@ namespace Carpet { // Advance times for (int m=0; m<maps; ++m) { - vtt.at(m)->advance_time (reflevel, mglevel); + vtt.AT(m)->advance_time (reflevel, mglevel); } CycleTimeLevels (cctkGH); cctkGH->cctk_time += @@ -752,7 +756,7 @@ namespace Carpet { // Regrid Checkpoint ("Regrid"); - bool const did_regrid = Regrid (cctkGH, true); + bool const did_regrid = Regrid (cctkGH, true, prolongate_initial_data); if (did_regrid) { BEGIN_META_MODE (cctkGH) { @@ -786,17 +790,17 @@ namespace Carpet { // Rewind times for (int m=0; m<maps; ++m) { - vtt.at(m)->set_delta + vtt.AT(m)->set_delta (reflevel, mglevel, - - vtt.at(m)->get_delta (reflevel, mglevel)); + - vtt.AT(m)->get_delta (reflevel, mglevel)); FlipTimeLevels (cctkGH); for (int tl=0; tl<num_tl; ++tl) { - vtt.at(m)->advance_time (reflevel, mglevel); + vtt.AT(m)->advance_time (reflevel, mglevel); CycleTimeLevels (cctkGH); } - vtt.at(m)->set_delta + vtt.AT(m)->set_delta (reflevel, mglevel, - - vtt.at(m)->get_delta (reflevel, mglevel)); + - vtt.AT(m)->get_delta (reflevel, mglevel)); FlipTimeLevels (cctkGH); } // for m CCTK_REAL const old_cctk_time = cctkGH->cctk_time; @@ -807,7 +811,7 @@ namespace Carpet { // Advance times for (int m=0; m<maps; ++m) { - vtt.at(m)->advance_time (reflevel, mglevel); + vtt.AT(m)->advance_time (reflevel, mglevel); } CycleTimeLevels (cctkGH); cctkGH->cctk_time += @@ -829,6 +833,8 @@ namespace Carpet { } END_META_MODE; } // if did_regrid + RegridFree (cctkGH, prolongate_initial_data); + do_global_mode = old_do_global_mode; do_early_global_mode = old_do_early_global_mode; do_late_global_mode = old_do_late_global_mode; @@ -877,14 +883,18 @@ namespace Carpet { // Regrid Checkpoint ("Regrid"); - bool const did_regrid = Regrid (cctkGH, true); + bool const did_regrid = Regrid (cctkGH, true, prolongate_initial_data); if (did_regrid) { for (int rl=0; rl<reflevels; ++rl) { - Recompose (cctkGH, rl, prolongate_initial_data); + if (not enable_no_storage) { + Recompose (cctkGH, rl, prolongate_initial_data); + } } // for rl } // if did_regrid + RegridFree (cctkGH, prolongate_initial_data); + } LEAVE_LEVEL_MODE; } LEAVE_GLOBAL_MODE; @@ -936,7 +946,7 @@ namespace Carpet { // Regrid Checkpoint ("Regrid"); - bool const did_regrid = Regrid (cctkGH, true); + bool const did_regrid = Regrid (cctkGH, true, prolongate_initial_data); if (did_regrid) { BEGIN_META_MODE (cctkGH) { @@ -971,17 +981,17 @@ namespace Carpet { // Rewind times for (int m=0; m<maps; ++m) { - vtt.at(m)->set_delta + vtt.AT(m)->set_delta (reflevel, mglevel, - - vtt.at(m)->get_delta (reflevel, mglevel)); + - vtt.AT(m)->get_delta (reflevel, mglevel)); FlipTimeLevels (cctkGH); for (int tl=0; tl<num_tl; ++tl) { - vtt.at(m)->advance_time (reflevel, mglevel); + vtt.AT(m)->advance_time (reflevel, mglevel); CycleTimeLevels (cctkGH); } - vtt.at(m)->set_delta + vtt.AT(m)->set_delta (reflevel, mglevel, - - vtt.at(m)->get_delta (reflevel, mglevel)); + - vtt.AT(m)->get_delta (reflevel, mglevel)); FlipTimeLevels (cctkGH); } // for m CCTK_REAL const old_cctk_time = cctkGH->cctk_time; @@ -992,7 +1002,7 @@ namespace Carpet { // Advance times for (int m=0; m<maps; ++m) { - vtt.at(m)->advance_time (reflevel, mglevel); + vtt.AT(m)->advance_time (reflevel, mglevel); } CycleTimeLevels (cctkGH); cctkGH->cctk_time += @@ -1014,6 +1024,8 @@ namespace Carpet { } END_META_MODE; } // if did_regrid + RegridFree (cctkGH, prolongate_initial_data); + do_global_mode = old_do_global_mode; do_early_global_mode = old_do_early_global_mode; do_late_global_mode = old_do_late_global_mode; @@ -1051,8 +1063,20 @@ namespace Carpet { Waypoint ("Initialising three timelevels"); // TODO: ensure that there are 3 timelevels + if (not (prolongation_order_time == 2)) { + CCTK_WARN (CCTK_WARN_ABORT, + "The 3 timelevel initialisation scheme (init_3_timelevels=yes) requires 3 timelevels and a temporal prolongation order of 2 (prolongation_order_time=2)"); + } assert (prolongation_order_time == 2); + for (int rl=0; rl<int(timereffacts.size()); ++rl) { + if (not (timereffacts.AT(rl) == ipow (2, rl))) { + CCTK_WARN (CCTK_WARN_ABORT, + "The 3 timelevel initialisation scheme (init_3_timelevels=yes) requires temporal refinement factors of 2 for all refinement levels (time_refinement_factors[rl]=pow(2,rl))"); + } + assert (timereffacts.AT(rl) == ipow (2, rl)); + } + BEGIN_MGLEVEL_LOOP(cctkGH) { BEGIN_REFLEVEL_LOOP(cctkGH) { do_early_global_mode = reflevel==0; @@ -1120,7 +1144,7 @@ namespace Carpet { cctkGH->cctk_time = global_time + delta_time * mglevelfact / timereflevelfact; for (int m=0; m<maps; ++m) { - vtt.at(m)->advance_time (reflevel, mglevel); + vtt.AT(m)->advance_time (reflevel, mglevel); } CycleTimeLevels (cctkGH); @@ -1236,7 +1260,7 @@ namespace Carpet { cctkGH->cctk_time = global_time + 2 * delta_time * mglevelfact / timereflevelfact; for (int m=0; m<maps; ++m) { - vtt.at(m)->advance_time (reflevel, mglevel); + vtt.AT(m)->advance_time (reflevel, mglevel); } CycleTimeLevels (cctkGH); @@ -1275,7 +1299,7 @@ namespace Carpet { cctkGH->cctk_time = global_time; for (int m=0; m<maps; ++m) { - vtt.at(m)->set_time (reflevel, mglevel, 0); + vtt.AT(m)->set_time (reflevel, mglevel, 0); } } diff --git a/Carpet/Carpet/src/MultiModel.cc b/Carpet/Carpet/src/MultiModel.cc index 975e48aec..c59eb44aa 100644 --- a/Carpet/Carpet/src/MultiModel.cc +++ b/Carpet/Carpet/src/MultiModel.cc @@ -7,9 +7,10 @@ #include <mpi.h> -#include "cctk.h" +#include <cctk.h> -#include "functions.hh" +#include <functions.hh> +#include <mpi_string.hh> @@ -22,8 +23,8 @@ namespace Carpet vector <string> models; // Model id to model name std::map <string, int> model_map; // Model name to model id - vector <int> model_ids; // Processor to model id - vector <vector <int> > model_procs; // Model id to processors + vector <int> model_ids; // Process to model id + vector <vector <int> > model_procs; // Model id to processes @@ -65,14 +66,14 @@ namespace Carpet SplitUniverse (MPI_Comm const world, string const model, MPI_Comm & comm, bool const verbose) { - // Get the total number of processors + // Get the total number of processes int num_procs; MPI_Comm_size (world, & num_procs); int my_proc; MPI_Comm_rank (world, & my_proc); // Gather all model names - models = AllGatherString (world, model); + models = allgather_string (world, model); // Map model strings to small integers int num_models = 0; @@ -80,81 +81,81 @@ namespace Carpet model_map.clear (); for (int n = 0; n < num_procs; ++ n) { - if (model_map.find (models.at(n)) != model_map.end()) + if (model_map.find (models.AT(n)) != model_map.end()) { - model_ids.at(n) = model_map[models.at(n)]; + model_ids.AT(n) = model_map[models.AT(n)]; } else { - model_map[models.at(n)] = num_models; - model_ids.at(n) = num_models; + model_map[models.AT(n)] = num_models; + model_ids.AT(n) = num_models; ++ num_models; } } - // Determine processors per model + // Determine processes per model vector <int> num_model_procs (num_models, 0); for (int n = 0; n < num_procs; ++ n) { - ++ num_model_procs.at (model_ids.at(n)); + ++ num_model_procs.at (model_ids.AT(n)); } model_procs.resize (num_models); for (int m = 0; m < num_models; ++ m) { - model_procs.at(m).reserve (num_model_procs.at(m)); + model_procs.AT(m).reserve (num_model_procs.AT(m)); } for (int n = 0; n < num_procs; ++ n) { - model_procs.at (model_ids.at(n)).push_back (n); + model_procs.at (model_ids.AT(n)).push_back (n); } for (int m = 0; m < num_models; ++ m) { - assert (static_cast<int> (model_procs.at(m).size()) - == num_model_procs.at(m)); + assert (static_cast<int> (model_procs.AT(m).size()) + == num_model_procs.AT(m)); } // Create a new communicator for each model - MPI_Comm_split (world, model_ids.at(my_proc), my_proc, & comm); + MPI_Comm_split (world, model_ids.AT(my_proc), my_proc, & comm); if (verbose) { CCTK_INFO ("Multi-Model listing:"); for (int m = 0; m < num_models; ++ m) { - cout << " model " << m << ": \"" << models.at(m) << "\"" << endl; + cout << " model " << m << ": \"" << models.AT(m) << "\"" << endl; } - CCTK_INFO ("Multi-Model processor distribution:"); + CCTK_INFO ("Multi-Model process distribution:"); for (int n = 0; n < num_procs; ++ n) { - int const m = model_ids.at(n); + int const m = model_ids.AT(n); bool const same_model_as_prev = - n-1 >= 0 and model_ids.at(n-1) == m; + n-1 >= 0 and model_ids.AT(n-1) == m; bool const same_model_as_next = - n+1 < num_procs and model_ids.at(n+1) == m; + n+1 < num_procs and model_ids.AT(n+1) == m; if (same_model_as_next) { if (same_model_as_prev) { // Output nothing } else { - // This processor has the same model as the next one: + // This process has the same model as the next one: // output only a partial line - cout << " processors " << n << "-"; + cout << " processes " << n << "-"; } } else { if (same_model_as_prev) { - // This processor has the same model as the previous one: + // This process has the same model as the previous one: // finish a partial line cout << n << ": " - << "model " << m << " \"" << models.at(m) << "\"" << endl; + << "model " << m << " \"" << models.AT(m) << "\"" << endl; } else { - cout << " processor " << n << ": " - << "model " << m << " \"" << models.at(m) << "\"" << endl; + cout << " process " << n << ": " + << "model " << m << " \"" << models.AT(m) << "\"" << endl; } } } - int const my_model = model_ids.at(my_proc); + int const my_model = model_ids.AT(my_proc); CCTK_VInfo (CCTK_THORNSTRING, - "Multi-Model: This is processor %d, model %d \"%s\"", + "Multi-Model: This is process %d, model %d \"%s\"", my_proc, my_model, model.c_str()); } } diff --git a/Carpet/Carpet/src/OutputGH.cc b/Carpet/Carpet/src/OutputGH.cc index 11b611754..52a877390 100644 --- a/Carpet/Carpet/src/OutputGH.cc +++ b/Carpet/Carpet/src/OutputGH.cc @@ -3,13 +3,13 @@ #include <cstdlib> #include <sstream> -#include "cctk.h" -#include "cctk_Parameters.h" +#include <cctk.h> +#include <cctk_Parameters.h> -#include "dist.hh" +#include <dist.hh> -#include "carpet.hh" -#include "Timers.hh" +#include <carpet.hh> +#include <Timers.hh> @@ -42,18 +42,18 @@ namespace Carpet { IOMethod const * const method = CCTK_IOMethod (handle); assert (method); - if (not timers.at(handle)) { + if (not timers.AT(handle)) { ostringstream buf; buf << "OutputGH" << "::" << method->implementation << "::" << method->name << " [" << handle << "]"; - timers.at(handle) = new Timer (buf.str().c_str()); + timers.AT(handle) = new Timer (buf.str().c_str()); } - timers.at(handle)->start(); + timers.AT(handle)->start(); num_vars += method->OutputGH (cctkGH); - timers.at(handle)->stop(); + timers.AT(handle)->stop(); } // for handle diff --git a/Carpet/Carpet/src/Poison.cc b/Carpet/Carpet/src/Poison.cc index 2811b42e2..83b4650b5 100644 --- a/Carpet/Carpet/src/Poison.cc +++ b/Carpet/Carpet/src/Poison.cc @@ -2,10 +2,14 @@ #include <cstdlib> #include <cstring> -#include "cctk.h" -#include "cctk_Parameters.h" +#include <cctk.h> +#include <cctk_Parameters.h> +#include <util_ErrorCodes.h> +#include <util_Table.h> -#include "carpet.hh" +#include <defs.hh> + +#include <carpet.hh> @@ -18,21 +22,25 @@ namespace Carpet { // The parameter where specifies which time levels should be // poisoned. what specifies what kind of grid variables should be // poisoned. - void Poison (const cGH* cgh, const checktimes where, const int what) + void + Poison (cGH const * const cctkGH, + checktimes const where, int const what) { DECLARE_CCTK_PARAMETERS; - if (! poison_new_timelevels) return; + assert (what == 0 or what == CCTK_GF or what == CCTK_ARRAY); + + if (not poison_new_timelevels) return; for (int group=0; group<CCTK_NumGroups(); ++group) { - if (CCTK_QueryGroupStorageI(cgh, group)) { + if (CCTK_QueryGroupStorageI(cctkGH, group)) { int const grouptype = CCTK_GroupTypeI (group); if (what == 0 or (what == CCTK_GF and grouptype == CCTK_GF) or (what == CCTK_ARRAY and (grouptype == CCTK_ARRAY or grouptype == CCTK_SCALAR))) { - PoisonGroup (cgh, group, where); + PoisonGroup (cctkGH, group, where); } } // if has storage } // for group @@ -40,34 +48,56 @@ namespace Carpet { - void PoisonGroup (const cGH* cgh, const int group, const checktimes where) + void + PoisonGroup (cGH const * const cctkGH, + int const group, checktimes const where) { DECLARE_CCTK_PARAMETERS; assert (group>=0 and group<CCTK_NumGroups()); - if (! poison_new_timelevels) return; + if (not poison_new_timelevels) return; - if (! CCTK_QueryGroupStorageI(cgh, group)) { + if (not CCTK_QueryGroupStorageI(cctkGH, group)) { char * const groupname = CCTK_GroupName(group); CCTK_VWarn (2, __LINE__, __FILE__, CCTK_THORNSTRING, - "Cannot poison group \"%s\" because it has no storage", - groupname); + "Cannot poison group \"%s\" because it has no storage", + groupname); free (groupname); return; } - const int nvar = CCTK_NumVarsInGroupI(group); + int const nvar = CCTK_NumVarsInGroupI(group); if (nvar == 0) return; - const int n0 = CCTK_FirstVarIndexI(group); + int const n0 = CCTK_FirstVarIndexI(group); assert (n0>=0); - const int sz = CCTK_VarTypeSize(CCTK_VarTypeI(n0)); + int const sz = CCTK_VarTypeSize(CCTK_VarTypeI(n0)); assert (sz>0); - const int num_tl = CCTK_ActiveTimeLevelsVI(cgh, n0); + int const table = CCTK_GroupTagsTableI (group); + assert (table >= 0); + bool persistent; + char buf[100]; + int const ilen = Util_TableGetString (table, sizeof buf, buf, "Persistent"); + if (ilen > 0) { + if (CCTK_EQUALS(buf, "yes")) { + persistent = true; + } else if (CCTK_EQUALS(buf, "no")) { + persistent = false; + } else { + assert (0); + } + } else if (ilen == UTIL_ERROR_TABLE_NO_SUCH_KEY) { + // default + persistent = true; + } else { + assert (0); + } + + int const num_tl = CCTK_ActiveTimeLevelsVI(cctkGH, n0); assert (num_tl>0); - const int min_tl = min_timelevel(where, num_tl); - const int max_tl = max_timelevel(where, num_tl); + int const min_tl = min_timelevel(where, num_tl, persistent); + int const max_tl = max_timelevel(where, num_tl, persistent); if (min_tl <= max_tl) { @@ -77,76 +107,102 @@ namespace Carpet { free (groupname); } - const int grouptype = CCTK_GroupTypeI(group); + CCTK_INT const poison_value = get_poison_value(); - BEGIN_MAP_LOOP(cgh, grouptype) { - BEGIN_LOCAL_COMPONENT_LOOP(cgh, grouptype) { + int const grouptype = CCTK_GroupTypeI(group); + + BEGIN_LOCAL_MAP_LOOP(cctkGH, grouptype) { + BEGIN_LOCAL_COMPONENT_LOOP(cctkGH, grouptype) { ivect size(1); - const int gpdim = groupdata.at(group).info.dim; + int const gpdim = groupdata.AT(group).info.dim; for (int d=0; d<gpdim; ++d) { - size[d] = groupdata.at(group).info.lsh[d]; + size[d] = groupdata.AT(group).info.lsh[d]; } - const int np = prod(size); + int const np = prod(size); for (int var=0; var<nvar; ++var) { - const int n = n0 + var; + int const n = n0 + var; for (int tl=min_tl; tl<=max_tl; ++tl) { - memset (cgh->data[n][tl], poison_value, np*sz); + memset (cctkGH->data[n][tl], poison_value, np*sz); } // for tl } // for var } END_LOCAL_COMPONENT_LOOP; - } END_MAP_LOOP; + } END_LOCAL_MAP_LOOP; } // if tl } - void PoisonCheck (const cGH* cgh, const checktimes where) + void + PoisonCheck (cGH const * const cctkGH, checktimes const where) { DECLARE_CCTK_PARAMETERS; - if (! check_for_poison) return; + if (not check_for_poison) return; Checkpoint ("PoisonCheck"); for (int group=0; group<CCTK_NumGroups(); ++group) { - const int nvar = CCTK_NumVarsInGroupI(group); - if (nvar > 0 && CCTK_QueryGroupStorageI(cgh, group)) { + int const nvar = CCTK_NumVarsInGroupI(group); + if (nvar > 0 and CCTK_QueryGroupStorageI(cctkGH, group)) { - const int grouptype = CCTK_GroupTypeI(group); - const int n0 = CCTK_FirstVarIndexI(group); + int const grouptype = CCTK_GroupTypeI(group); + int const n0 = CCTK_FirstVarIndexI(group); assert (n0>=0); - const int tp = CCTK_VarTypeI(n0); - const int gpdim = groupdata.at(group).info.dim; + int const tp = CCTK_VarTypeI(n0); + int const gpdim = groupdata.AT(group).info.dim; + + int const table = CCTK_GroupTagsTableI (group); + assert (table >= 0); + bool persistent; + char buf[100]; + int const ilen = + Util_TableGetString (table, sizeof buf, buf, "Persistent"); + if (ilen > 0) { + if (CCTK_EQUALS(buf, "yes")) { + persistent = true; + } else if (CCTK_EQUALS(buf, "no")) { + persistent = false; + } else { + assert (0); + } + } else if (ilen == UTIL_ERROR_TABLE_NO_SUCH_KEY) { + // default + persistent = true; + } else { + assert (0); + } + + CCTK_INT const poison_value = get_poison_value(); - const int num_tl = CCTK_ActiveTimeLevelsVI(cgh, n0); + int const num_tl = CCTK_ActiveTimeLevelsVI(cctkGH, n0); assert (num_tl>0); - const int min_tl = min_timelevel(where, num_tl); - const int max_tl = max_timelevel(where, num_tl); + int const min_tl = min_timelevel(where, num_tl, persistent); + int const max_tl = max_timelevel(where, num_tl, persistent); - BEGIN_MAP_LOOP(cgh, grouptype) { - BEGIN_LOCAL_COMPONENT_LOOP(cgh, grouptype) { + BEGIN_LOCAL_MAP_LOOP(cctkGH, grouptype) { + BEGIN_LOCAL_COMPONENT_LOOP(cctkGH, grouptype) { ivect size(1); for (int d=0; d<gpdim; ++d) { - size[d] = groupdata.at(group).info.lsh[d]; + size[d] = groupdata.AT(group).info.lsh[d]; } - const int np = prod(size); + int const np = prod(size); for (int var=0; var<nvar; ++var) { - const int n = n0 + var; + int const n = n0 + var; for (int tl=min_tl; tl<=max_tl; ++tl) { - const void* const data = cgh->data[n][tl]; + const void* const data = cctkGH->data[n][tl]; int numpoison=0; for (int k=0; k<size[2]; ++k) { for (int j=0; j<size[1]; ++j) { for (int i=0; i<size[0]; ++i) { - const int idx = i + size[0] * (j + size[1] * k); + int const idx = i + size[0] * (j + size[1] * k); bool poisoned=false; switch (tp) { #define TYPECASE(N,T) \ @@ -169,7 +225,7 @@ namespace Carpet { char* fullname = CCTK_FullName(n); CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, "At iteration %d: timelevel %d, component %d, map %d, refinement level %d of the variable \"%s\" contains poison at [%d,%d,%d]", - cgh->cctk_iteration, + cctkGH->cctk_iteration, tl, component, map, reflevel, fullname, i,j,k); free (fullname); @@ -182,7 +238,7 @@ namespace Carpet { char* fullname = CCTK_FullName(n); CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, "At iteration %d: timelevel %d, component %d, map %d, refinement level %d of the variable \"%s\" contains poison at %d of %d locations; not all locations were printed", - cgh->cctk_iteration, + cctkGH->cctk_iteration, tl, component, map, reflevel, fullname, numpoison, np); free (fullname); @@ -195,7 +251,7 @@ namespace Carpet { } // for tl } // for var } END_LOCAL_COMPONENT_LOOP; - } END_MAP_LOOP; + } END_LOCAL_MAP_LOOP; } // if has storage } // for group diff --git a/Carpet/Carpet/src/Recompose.cc b/Carpet/Carpet/src/Recompose.cc index 958a5d058..f1f0b8834 100644 --- a/Carpet/Carpet/src/Recompose.cc +++ b/Carpet/Carpet/src/Recompose.cc @@ -15,21 +15,25 @@ #include <sys/stat.h> #include <sys/types.h> -#include "cctk.h" -#include "cctk_Parameters.h" +#include <mpi.h> -#include "bbox.hh" -#include "bboxset.hh" -#include "defs.hh" -#include "dh.hh" -#include "gh.hh" -#include "region.hh" -#include "vect.hh" +#include <cctk.h> +#include <cctk_Parameters.h> -#include "carpet.hh" -#include "modes.hh" +#include <loopcontrol.h> -#define DEBUG false // false or true +#include <bbox.hh> +#include <bboxset.hh> +#include <defs.hh> +#include <dh.hh> +#include <gh.hh> +#include <region.hh> +#include <vect.hh> + +#include <carpet.hh> +#include <modes.hh> +#include <variables.hh> +#include <Timers.hh> @@ -61,6 +65,11 @@ namespace Carpet { static void + ClassifyPoints (cGH const * cctkGH, int rl); + + + + static void SplitRegionsMaps_Automatic_Recursively (bvect const & dims, int const firstproc, int const nprocs, @@ -76,57 +85,68 @@ namespace Carpet { void CheckRegions (gh::mregs const & regsss) { + char const * const where = "Carpet::CheckRegions"; + static Timer timer (where); + timer.start(); + // At least one multigrid level if (regsss.size() == 0) { CCTK_WARN (0, "I cannot set up a grid hierarchy with zero multigrid levels."); } assert (regsss.size() > 0); // At least one refinement level - if (regsss.at(0).size() == 0) { + if (regsss.AT(0).size() == 0) { CCTK_WARN (0, "I cannot set up a grid hierarchy with zero refinement levels."); } - assert (regsss.at(0).size() > 0); + assert (regsss.AT(0).size() > 0); // At most maxreflevels levels - if ((int)regsss.at(0).size() > maxreflevels) { + if ((int)regsss.AT(0).size() > maxreflevels) { CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING, "I cannot set up a grid hierarchy with more than Carpet::max_refinement_levels refinement levels. I found Carpet::max_refinement_levels=%d, while %d levels were requested.", - (int)maxreflevels, (int)regsss.at(0).size()); + (int)maxreflevels, (int)regsss.AT(0).size()); } - assert ((int)regsss.at(0).size() <= maxreflevels); + assert ((int)regsss.AT(0).size() <= maxreflevels); for (int ml=0; ml<(int)regsss.size(); ++ml) { int num_regions = 0; - for (int rl=0; rl<(int)regsss.at(0).size(); ++rl) { + for (int rl=0; rl<(int)regsss.AT(0).size(); ++rl) { // No empty levels // (but allow some empty maps) - // assert (regsss.at(ml).at(rl).size() > 0); - num_regions += regsss.at(ml).at(rl).size(); - for (int c=0; c<(int)regsss.at(ml).at(rl).size(); ++c) { + // assert (regsss.AT(ml).AT(rl).size() > 0); + num_regions += regsss.AT(ml).AT(rl).size(); + for (int c=0; c<(int)regsss.AT(ml).AT(rl).size(); ++c) { // Check sizes // (but allow processors with zero grid points) - // assert (all(regsss.at(rl).at(c).at(ml).extent.lower() <= - // regsss.at(rl).at(c).at(ml).extent.upper())); + // assert (all(regsss.AT(rl).AT(c).AT(ml).extent.lower() <= + // regsss.AT(rl).AT(c).AT(ml).extent.upper())); // Check strides ivect const str = - (maxspacereflevelfact / spacereffacts.at(rl) * ipow(mgfact, ml)); - assert (all(regsss.at(ml).at(rl).at(c).extent.stride() % str == 0)); + (maxspacereflevelfact / spacereffacts.AT(rl) * ipow(mgfact, ml)); + assert (all(regsss.AT(ml).AT(rl).AT(c).extent.stride() % str == 0)); // Check alignments - assert (all(regsss.at(ml).at(rl).at(c).extent.lower() % str == 0)); - assert (all(regsss.at(ml).at(rl).at(c).extent.upper() % str == 0)); + assert (all(regsss.AT(ml).AT(rl).AT(c).extent.lower() % str == 0)); + assert (all(regsss.AT(ml).AT(rl).AT(c).extent.upper() % str == 0)); } } // No empty levels assert (num_regions > 0); } + + timer.stop(); } bool Regrid (cGH const * const cctkGH, - bool const force_recompose) + bool const force_recompose, + bool const do_init) { DECLARE_CCTK_PARAMETERS; + char const * const where = "Carpet::Regrid"; + static Timer timer (where); + timer.start(); + Checkpoint ("Regridding level %d...", reflevel); assert (is_level_mode()); @@ -141,6 +161,7 @@ namespace Carpet { CCTK_WARN (2, "The regridding routine Carpet_Regrid has not been provided. There will be no regridding. Maybe you forgot to activate a regridding thorn?"); didtell = true; } + timer.stop(); return false; } @@ -150,7 +171,7 @@ namespace Carpet { CCTK_WARN (2, "The regridding routine Carpet_RegridMaps has not been provided. Regridding will be performed in singlemap mode instead of level mode."); didtell = true; } - } + } @@ -160,7 +181,7 @@ namespace Carpet { BEGIN_MAP_LOOP(cctkGH, CCTK_GF) { - gh::rregs superregss = vhh.at(map)->superregions; + gh::rregs superregss = vhh.AT(map)->superregions; gh::mregs regsss; // Check whether to recompose @@ -170,7 +191,7 @@ namespace Carpet { did_change = did_change or do_recompose; if (do_recompose) { - RegridMap (cctkGH, map, superregss, regsss); + RegridMap (cctkGH, map, superregss, regsss, do_init); } } END_MAP_LOOP; @@ -180,20 +201,28 @@ namespace Carpet { vector<gh::rregs> superregsss (maps); vector<gh::mregs> regssss (maps); BEGIN_MAP_LOOP(cctkGH, CCTK_GF) { - superregsss.at(map) = vhh.at(map)->superregions; + superregsss.AT(map) = vhh.AT(map)->superregions; } END_MAP_LOOP; // Check whether to recompose CCTK_INT const do_recompose = Carpet_RegridMaps (cctkGH, & superregsss, & regssss, force_recompose); assert (do_recompose >= 0); +#warning "TODO" +#if 1 // #ifdef CARPET_DEBUG + { + int ival = do_recompose; + MPI_Bcast (& ival, 1, MPI_INT, 0, dist::comm()); + assert (ival == do_recompose); + } +#endif did_change = did_change or do_recompose; if (do_recompose) { BEGIN_MAP_LOOP(cctkGH, CCTK_GF) { - gh::rregs const & superregss = superregsss.at(map); - gh::mregs const & regsss = regssss.at(map); - RegridMap (cctkGH, map, superregss, regsss); + gh::rregs const & superregss = superregsss.AT(map); + gh::mregs const & regsss = regssss.AT(map); + RegridMap (cctkGH, map, superregss, regsss, do_init); } END_MAP_LOOP; } @@ -208,6 +237,14 @@ namespace Carpet { } // if did change + + timer.stop(); + + if (enable_no_storage) { + CCTK_WARN (CCTK_WARN_ALERT, + "Carpet completed its internal setup, and would now normally go on to allocate memory. Since the parameter Carpet::enable_no_storage has been set, Carpet will exit instead."); + CCTK_Exit (cctkGH, 0); + } return did_change; } @@ -218,12 +255,16 @@ namespace Carpet { RegridMap (cGH const * const cctkGH, int const m, gh::rregs const & superregss, - gh::mregs const & regsss) + gh::mregs const & regsss, + bool const do_init) { DECLARE_CCTK_PARAMETERS; + char const * const where = "Carpet::RegridMap"; + static Timer timer (where); + timer.start(); + Waypoint ("Regridding map %d...", m); - #warning "TODO: keep levels fixed here" #if 0 @@ -239,15 +280,15 @@ namespace Carpet { int const do_every = use_tapered_grids ? - maxtimereflevelfact / timereffacts.at(max(0,rl-1)): - maxtimereflevelfact / timereffacts.at( rl ); + maxtimereflevelfact / timereffacts.AT(max(0,rl-1)): + maxtimereflevelfact / timereffacts.AT( rl ); bool const regrid_this_level = (cctkGH->cctk_iteration - 1) % do_every == 0; if (not regrid_this_level) { // Set regions from current grid structure - regions.at(rl) = ...; + regions.AT(rl) = ...; } } #endif @@ -258,18 +299,18 @@ namespace Carpet { // not change // Regrid - vhh.at(m)->regrid (superregss, regsss); + vhh.AT(m)->regrid (superregss, regsss, do_init); + + // Output grid structure to screen + OutputSuperregions (cctkGH, m, * vhh.AT(m), superregss); + OutputGrids (cctkGH, m, * vhh.AT(m), * vdd.AT(m)); // Write grid structure to file OutputGridStructure (cctkGH, m, regsss); OutputGridCoordinates (cctkGH, m, regsss); -#warning "TODO: output superregss" - - if (verbose or veryverbose) { - OutputGrids (cctkGH, m, * vhh.at(m), * vdd.at(m)); - } Waypoint ("Done regridding map %d.", m); + timer.stop(); } @@ -279,13 +320,27 @@ namespace Carpet { { DECLARE_CCTK_PARAMETERS; + char const * const where = "Carpet::PostRegrid"; + static Timer timer (where); + timer.start(); + // Calculate new number of levels int const oldreflevels = reflevels; - reflevels = vhh.at(0)->reflevels(); + reflevels = vhh.AT(0)->reflevels(); for (int m=0; m<maps; ++m) { - assert (vhh.at(m)->reflevels() == reflevels); + assert (vhh.AT(m)->reflevels() == reflevels); } +#warning "TODO" +#if 1 // #ifdef CARPET_DEBUG + { + // All processes must use the same number of levels + int ival = reflevels; + MPI_Bcast (& ival, 1, MPI_INT, 0, dist::comm()); + assert (ival == reflevels); + } +#endif + // One cannot switch off the current level assert (reflevels > reflevel); @@ -294,19 +349,23 @@ namespace Carpet { int const grouptype = CCTK_GroupTypeI (n); if (grouptype == CCTK_GF) { for (int ml=0; ml<mglevels; ++ml) { - groupdata.at(n).activetimelevels.at(ml).resize - (reflevels, groupdata.at(n).activetimelevels.at(ml).at(0)); + groupdata.AT(n).activetimelevels.AT(ml).resize + (reflevels, groupdata.AT(n).activetimelevels.AT(ml).AT(0)); } } } // Set new level times for (int ml=0; ml<mglevels; ++ml) { - leveltimes.at(ml).resize - (reflevels, leveltimes.at(ml).at(oldreflevels-1)); + leveltimes.AT(ml).resize + (reflevels, leveltimes.AT(ml).AT(oldreflevels-1)); } + ++ regridding_epoch; + OutputGridStatistics (cctkGH); + + timer.stop(); } @@ -316,200 +375,291 @@ namespace Carpet { int const rl, bool const do_init) { + char const * const where = "Carpet::Recompose"; + static Timer timer (where); + timer.start(); + bool did_recompose = false; for (int m=0; m<maps; ++m) { Waypoint ("Recomposing the grid hierarchy for map %d level %d...", m, rl); - assert (rl>=0 and rl<vhh.at(m)->reflevels()); - did_recompose |= vhh.at(m)->recompose (rl, do_init); + assert (rl>=0 and rl<vhh.AT(m)->reflevels()); + did_recompose |= vhh.AT(m)->recompose (rl, do_init); Waypoint ("Done recomposing the grid hierarchy for map %d level %d.", m, rl); } + + ClassifyPoints (cctkGH, rl); + + timer.stop(); return did_recompose; } void - OutputGrids (cGH const * const cctkGH, - int const m, - gh const & hh, - dh const & dd) + RegridFree (cGH const * const cctkGH, + bool const do_init) { - CCTK_INFO ("Grid structure (grid points):"); - for (int ml=0; ml<hh.mglevels(); ++ml) { - for (int rl=0; rl<hh.reflevels(); ++rl) { - for (int c=0; c<hh.components(rl); ++c) { - const int convfact = ipow(mgfact, ml); - const ivect levfact = spacereffacts.at(rl); - const ibbox ext = hh.extent(ml,rl,c); - const ivect & lower = ext.lower(); - const ivect & upper = ext.upper(); - const ivect & stride = ext.stride(); - assert (all(lower * levfact % maxspacereflevelfact == 0)); - assert (all(upper * levfact % maxspacereflevelfact == 0)); - assert (all(((upper - lower) * levfact / maxspacereflevelfact) - % convfact == 0)); - cout << " [" << ml << "][" << rl << "][" << m << "][" << c << "]" - << " exterior: " - << "proc " - << hh.processor(rl,c) - << " " - << lower / stride - << " : " - << upper / stride - << " (" - << (upper - lower) / stride + 1 - << ") " - << prod ((upper - lower) / stride + 1) - << endl; - } - } + char const * const where = "Carpet::RegridFree"; + static Timer timer (where); + timer.start(); + + Checkpoint ("Freeing after regridding level %d...", reflevel); + + assert (is_level_mode()); + + // Free old grid structure + for (int m=0; m<maps; ++m) { + vhh.AT(m)->regrid_free (do_init); } - CCTK_INFO ("Grid structure (boundaries):"); - for (int rl=0; rl<hh.reflevels(); ++rl) { - for (int c=0; c<hh.components(rl); ++c) { + timer.stop(); + } + + + + void + OutputSuperregions (cGH const * const cctkGH, + int const m, + gh const & hh, + gh::rregs const & superregss) + { + CCTK_INFO ("Grid structure (superregions, grid points):"); + for (int rl=0; rl<(int)superregss.size(); ++rl) { + assert (rl < hh.reflevels()); + for (int c=0; c<(int)superregss.AT(rl).size(); ++c) { + const ivect & levfact = spacereffacts.AT(rl); + const ibbox & ext = superregss.AT(rl).AT(c).extent; + const ivect & lower = ext.lower(); + const ivect & upper = ext.upper(); + const ivect & stride = ext.stride(); + assert (all(lower * levfact % maxspacereflevelfact == 0)); + assert (all(upper * levfact % maxspacereflevelfact == 0)); cout << " [" << rl << "][" << m << "][" << c << "]" - << " bbox: " - << hh.outer_boundaries(rl,c) - << endl; + << " exterior: " + << lower / stride + << " : " + << upper / stride + << " (" + << (upper - lower) / stride + 1 + << ") " + << prod ((upper - lower) / stride + 1) + << eol; } } - CCTK_INFO ("Grid structure (coordinates):"); - for (int ml=0; ml<hh.mglevels(); ++ml) { - for (int rl=0; rl<hh.reflevels(); ++rl) { - for (int c=0; c<hh.components(rl); ++c) { - const rvect origin = domainspecs.at(m).exterior_min; - const rvect delta = (domainspecs.at(m).exterior_max - domainspecs.at(m).exterior_min) / rvect (domainspecs.at(m).npoints - 1); - const ibbox ext = hh.extent(ml,rl,c); - const ivect & lower = ext.lower(); - const ivect & upper = ext.upper(); - const int convfact = ipow(mgfact, ml); - const ivect levfact = spacereffacts.at(rl); - cout << " [" << ml << "][" << rl << "][" << m << "][" << c << "]" - << " exterior: " - << origin + delta * rvect(lower) / rvect(maxspacereflevelfact) - << " : " - << origin + delta * rvect(upper) / rvect(maxspacereflevelfact) - << " : " - << delta * rvect(convfact) / rvect(levfact) << endl; - } + CCTK_INFO ("Grid structure (superregions, coordinates):"); + for (int rl=0; rl<(int)superregss.size(); ++rl) { + assert (rl < hh.reflevels()); + for (int c=0; c<(int)superregss.AT(rl).size(); ++c) { + const rvect origin = domainspecs.AT(m).exterior_min; + const rvect delta = (domainspecs.AT(m).exterior_max - domainspecs.AT(m).exterior_min) / rvect (domainspecs.AT(m).npoints - 1); + const ibbox & ext = superregss.AT(rl).AT(c).extent; + const ivect & lower = ext.lower(); + const ivect & upper = ext.upper(); + const ivect & levfact = spacereffacts.AT(rl); + cout << " [" << rl << "][" << m << "][" << c << "]" + << " exterior: " + << origin + delta * rvect(lower) / rvect(maxspacereflevelfact) + << " : " + << origin + delta * rvect(upper) / rvect(maxspacereflevelfact) + << " : " + << delta / rvect(levfact) << eol; } } - CCTK_INFO ("Grid structure (coordinates, including ghosts):"); - for (int ml=0; ml<hh.mglevels(); ++ml) { - for (int rl=0; rl<hh.reflevels(); ++rl) { - for (int c=0; c<hh.components(rl); ++c) { - const rvect origin = domainspecs.at(m).exterior_min; - const rvect delta = (domainspecs.at(m).exterior_max - domainspecs.at(m).exterior_min) / rvect (domainspecs.at(m).npoints - 1); - const ivect lower = dd.boxes.at(ml).at(rl).at(c).exterior.lower(); - const ivect upper = dd.boxes.at(ml).at(rl).at(c).exterior.upper(); - const int convfact = ipow(mgfact, ml); - const ivect levfact = spacereffacts.at(rl); - cout << " [" << ml << "][" << rl << "][" << m << "][" << c << "]" - << " exterior: " - << origin + delta * rvect(lower) / rvect(maxspacereflevelfact) - << " : " - << origin + delta * rvect(upper) / rvect(maxspacereflevelfact) - << " : " - << delta * rvect(convfact) / rvect(levfact) << endl; + fflush (stdout); + } + + + + void + OutputGrids (cGH const * const cctkGH, + int const m, + gh const & hh, + dh const & dd) + { + DECLARE_CCTK_PARAMETERS; + + if (verbose or veryverbose) { + + CCTK_INFO ("Grid structure (grid points):"); + for (int ml=0; ml<hh.mglevels(); ++ml) { + for (int rl=0; rl<hh.reflevels(); ++rl) { + for (int c=0; c<hh.components(rl); ++c) { + const int convfact = ipow(mgfact, ml); + const ivect levfact = spacereffacts.AT(rl); + const ibbox ext = hh.extent(ml,rl,c); + const ivect & lower = ext.lower(); + const ivect & upper = ext.upper(); + const ivect & stride = ext.stride(); + assert (all(lower * levfact % maxspacereflevelfact == 0)); + assert (all(upper * levfact % maxspacereflevelfact == 0)); + assert (all(((upper - lower) * levfact / maxspacereflevelfact) + % convfact == 0)); + cout << " [" << ml << "][" << rl << "][" << m << "][" << c << "]" + << " exterior: " + << "proc " + << hh.processor(rl,c) + << " " + << lower / stride + << " : " + << upper / stride + << " (" + << (upper - lower) / stride + 1 + << ") " + << prod ((upper - lower) / stride + 1) + << eol; + } } } - } - - CCTK_INFO ("Grid statistics:"); - const int oldprecision = cout.precision(); - const ios_base::fmtflags oldflags = cout.flags(); - cout.setf (ios::fixed); - for (int ml=0; ml<hh.mglevels(); ++ml) { - CCTK_REAL coarsevolume = 0; + + CCTK_INFO ("Grid structure (boundaries):"); for (int rl=0; rl<hh.reflevels(); ++rl) { - - const CCTK_REAL basevolume = hh.baseextents.AT(0).AT(0).size(); - CCTK_REAL countvolume = 0; - CCTK_REAL totalvolume = 0; - CCTK_REAL totalvolume2 = 0; - for (int c=0; c<hh.components(rl); ++c) { - const CCTK_REAL volume = hh.extent(ml,rl,c).size(); - ++ countvolume; - totalvolume += volume; - totalvolume2 += ipow(volume, 2); + cout << " [" << rl << "][" << m << "][" << c << "]" + << " bbox: " + << hh.outer_boundaries(rl,c) + << eol; } - - const CCTK_REAL avgvolume = totalvolume / countvolume; - const CCTK_REAL stddevvolume - = sqrt (max (CCTK_REAL(0), - totalvolume2 / countvolume - ipow (avgvolume, 2))); - - for (int c=0; c<hh.components(rl); ++c) { - const CCTK_REAL volume = hh.extent(ml,rl,c).size(); - cout << " [" << ml << "][" << rl << "][" << m << "][" << c << "]" - << " volume: " << setprecision(0) << volume - << " of parent: " << setprecision(1) << 100 * volume / totalvolume << "%" - << " of domain: " << setprecision(1) << 100 * volume / basevolume << "%" - << endl; + } + + CCTK_INFO ("Grid structure (coordinates):"); + for (int ml=0; ml<hh.mglevels(); ++ml) { + for (int rl=0; rl<hh.reflevels(); ++rl) { + for (int c=0; c<hh.components(rl); ++c) { + const rvect origin = domainspecs.AT(m).exterior_min; + const rvect delta = (domainspecs.AT(m).exterior_max - domainspecs.AT(m).exterior_min) / rvect (domainspecs.AT(m).npoints - 1); + const ibbox ext = hh.extent(ml,rl,c); + const ivect & lower = ext.lower(); + const ivect & upper = ext.upper(); + const int convfact = ipow(mgfact, ml); + const ivect levfact = spacereffacts.AT(rl); + cout << " [" << ml << "][" << rl << "][" << m << "][" << c << "]" + << " exterior: " + << origin + delta * rvect(lower) / rvect(maxspacereflevelfact) + << " : " + << origin + delta * rvect(upper) / rvect(maxspacereflevelfact) + << " : " + << delta * rvect(convfact) / rvect(levfact) << eol; + } } - - cout << " [" << ml << "][" << rl << "][" << m << "]" - << " average volume: " << setprecision(0) << avgvolume - << " of parent: " << setprecision(1) << 100 * avgvolume / totalvolume << "%" - << " of domain: " << setprecision(1) << 100 * avgvolume / basevolume << "%" - << endl; - cout << " [" << ml << "][" << rl << "][" << m << "]" - << " standard deviation: " << setprecision(0) << stddevvolume - << " of parent: " << setprecision(1) << 100 * stddevvolume / totalvolume << "%" - << " of domain: " << setprecision(1) << 100 * stddevvolume / basevolume << "%" - << endl; - - // TODO: ghost points vs. interior points (and boundary - // points) - - CCTK_REAL countquadrupole = 0; - CCTK_REAL minquadrupole = 1; - CCTK_REAL totalquadrupole = 0; - CCTK_REAL totalquadrupole2 = 0; - - for (int c=0; c<hh.components(rl); ++c) { - const ibbox ext = hh.extent(ml,rl,c); - const ivect shape = ext.shape(); - const ivect stride = ext.stride(); - const CCTK_REAL minlength = minval (rvect (shape) / rvect (stride)); - const CCTK_REAL maxlength = maxval (rvect (shape) / rvect (stride)); - const CCTK_REAL quadrupole = minlength / maxlength; - ++ countquadrupole; - minquadrupole = min (minquadrupole, quadrupole); - totalquadrupole += quadrupole; - totalquadrupole2 += ipow (quadrupole, 2); - cout << " [" << ml << "][" << rl << "][" << m << "][" << c << "]" - << " length ratio: " << setprecision(3) << quadrupole - << endl; + } + + CCTK_INFO ("Grid structure (coordinates, including ghosts):"); + for (int ml=0; ml<hh.mglevels(); ++ml) { + for (int rl=0; rl<hh.reflevels(); ++rl) { + for (int c=0; c<hh.components(rl); ++c) { + const rvect origin = domainspecs.AT(m).exterior_min; + const rvect delta = (domainspecs.AT(m).exterior_max - domainspecs.AT(m).exterior_min) / rvect (domainspecs.AT(m).npoints - 1); + const ivect lower = dd.boxes.AT(ml).AT(rl).AT(c).exterior.lower(); + const ivect upper = dd.boxes.AT(ml).AT(rl).AT(c).exterior.upper(); + const int convfact = ipow(mgfact, ml); + const ivect levfact = spacereffacts.AT(rl); + cout << " [" << ml << "][" << rl << "][" << m << "][" << c << "]" + << " exterior: " + << origin + delta * rvect(lower) / rvect(maxspacereflevelfact) + << " : " + << origin + delta * rvect(upper) / rvect(maxspacereflevelfact) + << " : " + << delta * rvect(convfact) / rvect(levfact) << eol; + } + } + } + + CCTK_INFO ("Grid statistics:"); + const int oldprecision = cout.precision(); + const ios_base::fmtflags oldflags = cout.flags(); + cout.setf (ios::fixed); + for (int ml=0; ml<hh.mglevels(); ++ml) { + CCTK_REAL coarsevolume = 0; + for (int rl=0; rl<hh.reflevels(); ++rl) { + + const CCTK_REAL basevolume = hh.baseextents.AT(0).AT(0).size(); + CCTK_REAL countvolume = 0; + CCTK_REAL totalvolume = 0; + CCTK_REAL totalvolume2 = 0; + + for (int c=0; c<hh.components(rl); ++c) { + const CCTK_REAL volume = hh.extent(ml,rl,c).size(); + ++ countvolume; + totalvolume += volume; + totalvolume2 += ipow(volume, 2); + } + + const CCTK_REAL avgvolume = totalvolume / countvolume; + const CCTK_REAL stddevvolume + = sqrt (max (CCTK_REAL(0), + totalvolume2 / countvolume - ipow (avgvolume, 2))); + + for (int c=0; c<hh.components(rl); ++c) { + const CCTK_REAL volume = hh.extent(ml,rl,c).size(); + cout << " [" << ml << "][" << rl << "][" << m << "][" << c << "]" + << " volume: " << setprecision(0) << volume + << " of parent: " << setprecision(1) << 100 * volume / totalvolume << "%" + << " of domain: " << setprecision(1) << 100 * volume / basevolume << "%" + << eol; + } + + cout << " [" << ml << "][" << rl << "][" << m << "]" + << " average volume: " << setprecision(0) << avgvolume + << " of parent: " << setprecision(1) << 100 * avgvolume / totalvolume << "%" + << " of domain: " << setprecision(1) << 100 * avgvolume / basevolume << "%" + << eol; + cout << " [" << ml << "][" << rl << "][" << m << "]" + << " standard deviation: " << setprecision(0) << stddevvolume + << " of parent: " << setprecision(1) << 100 * stddevvolume / totalvolume << "%" + << " of domain: " << setprecision(1) << 100 * stddevvolume / basevolume << "%" + << eol; + + // TODO: ghost points vs. interior points (and boundary + // points) + + CCTK_REAL countquadrupole = 0; + CCTK_REAL minquadrupole = 1; + CCTK_REAL totalquadrupole = 0; + CCTK_REAL totalquadrupole2 = 0; + + for (int c=0; c<hh.components(rl); ++c) { + const ibbox ext = hh.extent(ml,rl,c); + const ivect shape = ext.shape(); + const ivect stride = ext.stride(); + const CCTK_REAL minlength = minval (rvect (shape) / rvect (stride)); + const CCTK_REAL maxlength = maxval (rvect (shape) / rvect (stride)); + const CCTK_REAL quadrupole = minlength / maxlength; + ++ countquadrupole; + minquadrupole = min (minquadrupole, quadrupole); + totalquadrupole += quadrupole; + totalquadrupole2 += ipow (quadrupole, 2); + cout << " [" << ml << "][" << rl << "][" << m << "][" << c << "]" + << " length ratio: " << setprecision(3) << quadrupole + << eol; + } + + const CCTK_REAL avgquadrupole = totalquadrupole / countquadrupole; + const CCTK_REAL stddevquadrupole + = sqrt (max (CCTK_REAL(0), + (totalquadrupole2 / countquadrupole + - ipow (avgquadrupole, 2)))); + + cout << " [" << ml << "][" << rl << "][" << m << "]" + << " average length ratio: " << setprecision(3) << avgquadrupole + << " standard deviation: " << setprecision(3) << stddevquadrupole + << eol; + + // TODO: processor distribution, average load, std deviation + + coarsevolume = totalvolume * prod (rvect (spacereflevelfact)); } - - const CCTK_REAL avgquadrupole = totalquadrupole / countquadrupole; - const CCTK_REAL stddevquadrupole - = sqrt (max (CCTK_REAL(0), - (totalquadrupole2 / countquadrupole - - ipow (avgquadrupole, 2)))); - - cout << " [" << ml << "][" << rl << "][" << m << "]" - << " average length ratio: " << setprecision(3) << avgquadrupole - << " standard deviation: " << setprecision(3) << stddevquadrupole - << endl; - - // TODO: processor distribution, average load, std deviation - - coarsevolume = totalvolume * prod (rvect (spacereflevelfact)); } + cout.precision (oldprecision); + cout.setf (oldflags); + + fflush (stdout); } - cout.precision (oldprecision); - cout.setf (oldflags); - } @@ -561,14 +711,14 @@ namespace Carpet { file << "maps " << maps << eol; file << m << " mglevels " << regsss.size() << eol; for (int ml=0; ml<(int)regsss.size(); ++ml) { - file << m << " " << ml << " reflevels " << regsss.at(ml).size() << eol; - for (int rl=0; rl<(int)regsss.at(ml).size(); ++rl) { - file << m << " " << ml << " " << rl << " components " << regsss.at(ml).at(rl).size() << eol; - for (int c=0; c<(int)regsss.at(ml).at(rl).size(); ++c) { + file << m << " " << ml << " reflevels " << regsss.AT(ml).size() << eol; + for (int rl=0; rl<(int)regsss.AT(ml).size(); ++rl) { + file << m << " " << ml << " " << rl << " components " << regsss.AT(ml).AT(rl).size() << eol; + for (int c=0; c<(int)regsss.AT(ml).AT(rl).size(); ++c) { file << m << " " << ml << " " << rl << " " << c << " " - << regsss.at(ml).at(rl).at(c).processor << " " - << regsss.at(ml).at(rl).at(c).extent << " " - << regsss.at(ml).at(rl).at(c).outer_boundaries << eol; + << regsss.AT(ml).AT(rl).AT(c).processor << " " + << regsss.AT(ml).AT(rl).AT(c).extent << " " + << regsss.AT(ml).AT(rl).AT(c).outer_boundaries << eol; } } } @@ -668,7 +818,7 @@ namespace Carpet { // Affine transformation between index space and coordinate space rvect const origin = exterior_lower; rvect const scale = - rvect (vhh.at(m)->baseextents.at(0).at(0).stride()) / spacing; + rvect (vhh.AT(m)->baseextents.AT(0).AT(0).stride()) / spacing; @@ -676,11 +826,11 @@ namespace Carpet { file << "maps " << maps << eol; file << m << " mglevels " << regsss.size() << eol; for (int ml=0; ml<(int)regsss.size(); ++ml) { - file << m << " " << ml << " reflevels " << regsss.at(ml).size() << eol; - for (int rl=0; rl<(int)regsss.at(ml).size(); ++rl) { + file << m << " " << ml << " reflevels " << regsss.AT(ml).size() << eol; + for (int rl=0; rl<(int)regsss.AT(ml).size(); ++rl) { ibset extents; - for (int c=0; c<(int)regsss.at(ml).at(rl).size(); ++c) { - extents += regsss.at(ml).at(rl).at(c).extent; + for (int c=0; c<(int)regsss.AT(ml).AT(rl).size(); ++c) { + extents += regsss.AT(ml).AT(rl).AT(c).extent; } extents.normalize(); file << m << " " << ml << " " << rl << " regions " << extents.setsize() << eol; @@ -690,12 +840,12 @@ namespace Carpet { { #if 0 ibbox const & ext = * bi; - ibbox const & baseext = vhh.at(m)->baseextents.at(ml).at(rl); - ibbox const & coarseext = vhh.at(m)->baseextents.at(ml).at(0 ); + ibbox const & baseext = vhh.AT(m)->baseextents.AT(ml).AT(rl); + ibbox const & coarseext = vhh.AT(m)->baseextents.AT(ml).AT(0 ); // This is nice, but is wrong since CartGrid3D has not yet // initialised the coordinates - ivect const cctk_levfac = spacereffacts.at(rl); + ivect const cctk_levfac = spacereffacts.AT(rl); ivect const cctk_levoff = baseext.lower() - coarseext.lower(); ivect const cctk_levoffdenom = baseext.stride(); @@ -705,9 +855,9 @@ namespace Carpet { (ext.upper() - baseext.lower()) / ext.stride(); rvect const cctk_origin_space = - origin_space.at(m).at(ml); + origin_space.AT(m).AT(ml); rvect const cctk_delta_space = - delta_space.at(m) * rvect (ipow (mgfact, ml)); + delta_space.AT(m) * rvect (ipow (mgfact, ml)); rvect const CCTK_ORIGIN_SPACE = cctk_origin_space + @@ -773,28 +923,35 @@ namespace Carpet { OutputGridStatistics (cGH const * const cctkGH) { // Grid array statistics - int num_gfs = 0; int num_arrays = 0; + int num_gfs = 0; + int size_gfs = 0; CCTK_REAL num_active_array_points = 0; CCTK_REAL num_total_array_points = 0; + CCTK_REAL size_total_array_points = 0; for (int g=0; g<CCTK_NumGroups(); ++g) { + cGroup gdata; + check (not CCTK_GroupData (g, &gdata)); int const num_tl = CCTK_ActiveTimeLevelsGI (cctkGH, g); - switch (CCTK_GroupTypeI(g)) { + int const num_vars = gdata.numvars; + int const size_vars = gdata.numvars * CCTK_VarTypeSize (gdata.vartype); + switch (gdata.grouptype) { case CCTK_SCALAR: case CCTK_ARRAY: { - int const num_vars = CCTK_NumVarsInGroupI (g); num_arrays += num_tl * num_vars; gh const * const hh = arrdata.AT(g).AT(0).hh; dh const * const dd = arrdata.AT(g).AT(0).dd; for (int c=0; c<hh->components(0); ++c) { dh::dboxes const & b = dd->boxes.AT(0).AT(0).AT(c); - num_active_array_points += num_tl * num_vars * b.active.size(); - num_total_array_points += num_tl * num_vars * b.exterior.size(); + num_active_array_points += num_tl * num_vars * b.active_size; + num_total_array_points += num_tl * num_vars * b.exterior_size; + size_total_array_points += num_tl * size_vars * b.exterior_size; } break; } case CCTK_GF: - num_gfs += num_tl; + num_gfs += num_tl * num_vars; + size_gfs += num_tl * size_vars; break; default: assert (0); @@ -807,6 +964,7 @@ namespace Carpet { CCTK_REAL num_active_mem_points = 0; CCTK_REAL num_owned_mem_points = 0; CCTK_REAL num_total_mem_points = 0; + CCTK_REAL size_total_mem_points = 0; CCTK_REAL num_active_cpu_points = 0; CCTK_REAL num_owned_cpu_points = 0; CCTK_REAL num_total_cpu_points = 0; @@ -822,12 +980,13 @@ namespace Carpet { for (int c=0; c<hh->components(rl); ++c) { ++ num_comps; dh::dboxes const & b = dd->boxes.AT(ml).AT(rl).AT(c); - num_active_mem_points += num_gfs * b.active.size(); - num_owned_mem_points += num_gfs * b.owned.size(); - num_total_mem_points += num_gfs * b.exterior.size(); - num_active_cpu_points += trf * b.active.size(); - num_owned_cpu_points += trf * b.owned.size(); - num_total_cpu_points += trf * b.exterior.size(); + num_active_mem_points += num_gfs * b.active_size; + num_owned_mem_points += num_gfs * b.owned_size; + num_total_mem_points += num_gfs * b.exterior_size; + size_total_mem_points += size_gfs * b.exterior_size; + num_active_cpu_points += trf * b.active_size; + num_owned_cpu_points += trf * b.owned_size; + num_total_cpu_points += trf * b.exterior_size; } } } @@ -841,27 +1000,30 @@ namespace Carpet { "Grid structure statistics:"); CCTK_VInfo (CCTK_THORNSTRING, "GF: rhs: %.0fk active, %.0fk owned (+%.0f%%), %.0fk total (+%.0f%%), %.3g steps/time", - double (num_active_cpu_points / 1000), - double (num_owned_cpu_points / 1000), + double (num_active_cpu_points / 1e+3), + double (num_owned_cpu_points / 1e+3), double (num_owned_cpu_points / num_active_cpu_points * 100 - 100), - double (num_total_cpu_points / 1000), + double (num_total_cpu_points / 1e+3), double (num_total_cpu_points / num_owned_cpu_points * 100 - 100), double (num_steps / delta_time)); CCTK_VInfo (CCTK_THORNSTRING, "GF: vars: %d, pts: %.0fM active, %.0fM owned (+%.0f%%), %.0fM total (+%.0f%%), %.1f comp/proc", num_gfs, - double (num_active_mem_points / 1000000), - double (num_owned_mem_points / 1000000), + double (num_active_mem_points / 1e+6), + double (num_owned_mem_points / 1e+6), double (num_owned_mem_points / num_active_mem_points * 100 - 100), - double (num_total_mem_points / 1000000), + double (num_total_mem_points / 1e+6), double (num_total_mem_points / num_owned_mem_points * 100 - 100), double (num_comps / (reflevels * CCTK_nProcs (cctkGH)))); CCTK_VInfo (CCTK_THORNSTRING, "GA: vars: %d, pts: %.0fM active, %.0fM total (+%.0f%%)", num_arrays, - double (num_active_array_points / 1000000), - double (num_total_array_points / 1000000), + double (num_active_array_points / 1e+6), + double (num_total_array_points / 1e+6), double (num_total_array_points / num_active_array_points * 100 - 100)); + CCTK_VInfo (CCTK_THORNSTRING, + "Total required memory: %.3f GByte (for GAs and currently active GFs)", + double ((size_total_array_points + size_total_mem_points) / 1e+9)); // After this, we will begin to allocate memory for the grid // structure. If we run out of memory, ensure that this output @@ -902,16 +1064,16 @@ namespace Carpet { regs = superregs; if (nprocs == 1) { - regs.at(0).processor = 0; - pseudoregion_t const preg (regs.at(0).extent, regs.at(0).processor); - assert (superregs.at(0).processors == NULL); - superregs.at(0).processors = new ipfulltree (preg); + regs.AT(0).processor = 0; + pseudoregion_t const preg (regs.AT(0).extent, regs.AT(0).processor); + assert (superregs.AT(0).processors == NULL); + superregs.AT(0).processors = new ipfulltree (preg); return; } assert (dir>=0 and dir<dim); - region_t const & reg0 = regs.at(0); + region_t const & reg0 = regs.AT(0); const ivect rstr0 = reg0.extent.stride(); const ivect rlb0 = reg0.extent.lower(); const ivect rub0 = reg0.extent.upper() + rstr0; @@ -933,7 +1095,7 @@ namespace Carpet { if (cub[dir] > rub0[dir]) cub[dir] = rub0[dir]; assert (clb[dir] <= cub[dir]); assert (cub[dir] <= rub0[dir]); - region_t & reg = regs.at(c); + region_t & reg = regs.AT(c); ibbox & ext = reg.extent; b2vect & obnd = reg.outer_boundaries; int & proc = reg.processor; @@ -943,16 +1105,16 @@ namespace Carpet { obnd[1][dir] &= cub[dir] == rub0[dir]; proc = c; pseudoregion_t const preg (reg.extent, c); - bounds.at(c) = reg.extent.lower()[dir]; - subtrees.at(c) = new ipfulltree (preg); + bounds.AT(c) = reg.extent.lower()[dir]; + subtrees.AT(c) = new ipfulltree (preg); } - bounds.at(nprocs) = rub0[dir] + rstr0[dir]; + bounds.AT(nprocs) = rub0[dir] + rstr0[dir]; - assert (superregs.at(0).processors == NULL); - superregs.at(0).processors = new ipfulltree (dir, bounds, subtrees); + assert (superregs.AT(0).processors == NULL); + superregs.AT(0).processors = new ipfulltree (dir, bounds, subtrees); for (int c=0; c<(int)regs.size(); ++c) { - assert (regs.at(c).processor == c); + assert (regs.AT(c).processor == c); } } @@ -968,9 +1130,9 @@ namespace Carpet { vector<vector<region_t> > regss (1); SplitRegionsMaps_Automatic (cctkGH, superregss, regss); assert (superregss.size() == 1); - superregs = regss.at(0); + superregs = superregss.AT(0); assert (regss.size() == 1); - regs = regss.at(0); + regs = regss.AT(0); } @@ -993,7 +1155,7 @@ namespace Carpet { assert (superregs.size() == 1); - region_t const & reg0 = superregs.at(0); + region_t const & reg0 = superregs.AT(0); const ivect rstr0 = reg0.extent.stride(); const ivect rlb0 = reg0.extent.lower(); const ivect rub0 = reg0.extent.upper() + rstr0; @@ -1052,7 +1214,7 @@ namespace Carpet { assert (all (cub <= rub0)); assert (all (not (ipos==0) or clb==rlb0)); assert (all (not (ipos==nprocs_dir-1) or cub==rub0)); - region_t & reg = regs.at(c); + region_t & reg = regs.AT(c); ibbox & ext = reg.extent; b2vect & obnd = reg.outer_boundaries; int & proc = reg.processor; @@ -1063,21 +1225,21 @@ namespace Carpet { proc = c; pseudoregion_t preg (reg.extent, c); - subtreesx.at(i) = new ipfulltree (preg); + subtreesx.AT(i) = new ipfulltree (preg); } - boundsx.at(nprocs_dir[0]) = rub0[0] + rstr0[0]; - subtreesy.at(j) = new ipfulltree (0, boundsx, subtreesx); + boundsx.AT(nprocs_dir[0]) = rub0[0] + rstr0[0]; + subtreesy.AT(j) = new ipfulltree (0, boundsx, subtreesx); } - boundsy.at(nprocs_dir[1]) = rub0[1] + rstr0[1]; - subtreesz.at(k) = new ipfulltree (1, boundsy, subtreesy); + boundsy.AT(nprocs_dir[1]) = rub0[1] + rstr0[1]; + subtreesz.AT(k) = new ipfulltree (1, boundsy, subtreesy); } - boundsz.at(nprocs_dir[2]) = rub0[2] + rstr0[2]; + boundsz.AT(nprocs_dir[2]) = rub0[2] + rstr0[2]; - assert (superregs.at(0).processors == NULL); - superregs.at(0).processors = new ipfulltree (2, boundsz, subtreesz); + assert (superregs.AT(0).processors == NULL); + superregs.AT(0).processors = new ipfulltree (2, boundsz, subtreesz); for (int c=0; c<(int)regs.size(); ++c) { - assert (regs.at(c).processor == c); + assert (regs.AT(c).processor == c); } } @@ -1121,7 +1283,9 @@ namespace Carpet { region_t & superreg, vector<region_t> & newregs) { - if (DEBUG) cout << "SRMAR enter" << endl; + DECLARE_CCTK_PARAMETERS; + + if (recompose_verbose) cout << "SRMAR enter" << endl; // Check preconditions assert (nprocs >= 1); @@ -1130,7 +1294,7 @@ namespace Carpet { // Are we done? if (all(dims)) { - if (DEBUG) cout << "SRMAR bottom" << endl; + if (recompose_verbose) cout << "SRMAR bottom" << endl; // Check precondition assert (nprocs == 1); @@ -1145,30 +1309,57 @@ namespace Carpet { // Check postcondition assert (newregs.size() == oldsize + nprocs); - if (DEBUG) cout << "SRMAR exit" << endl; + if (recompose_verbose) cout << "SRMAR exit" << endl; return; } // Special case if (superreg.extent.empty()) { - if (DEBUG) cout << "SRMAR empty" << endl; + if (recompose_verbose) cout << "SRMAR empty" << endl; + + // Choose a direction + int mydim = -1; + for (int d=0; d<dim; ++d) { + if (not dims[d]) { + mydim = d; + break; + } + } + assert (mydim>=0 and mydim<dim); // Create a new region region_t newreg (superreg); newreg.outer_boundaries = b2vect(false); - if (DEBUG) cout << "SRMAR newreg " << newreg << endl; + if (recompose_verbose) cout << "SRMAR newreg " << newreg << endl; +#if 0 // Store for (int p=0; p<nprocs; ++p) { newreg.processor = firstproc + p; newregs.push_back (newreg); } + assert (superreg.processors == NULL); superreg.processors = new ipfulltree (); +#endif + + // Store + vector<int> bounds (nprocs+1); + vector<ipfulltree *> subtrees (nprocs); + for (int p=0; p<nprocs; ++p) { + newreg.processor = firstproc + p; + newregs.push_back (newreg); + bounds.AT(p) = newreg.extent.lower()[mydim]; + pseudoregion_t const preg (newreg.extent, newreg.processor); + subtrees.AT(p) = new ipfulltree (preg); + } + bounds.AT(nprocs) = newreg.extent.lower()[mydim]; + assert (superreg.processors == NULL); + superreg.processors = new ipfulltree (mydim, bounds, subtrees); // Check postcondition assert (newregs.size() == oldsize + nprocs); - if (DEBUG) cout << "SRMAR exit" << endl; + if (recompose_verbose) cout << "SRMAR exit" << endl; return; } @@ -1177,7 +1368,7 @@ namespace Carpet { CCTK_REAL const rfact = pow (nprocs / prod(rcost), CCTK_REAL(1)/dim); rcost *= rfact; assert (abs (prod (rcost) - nprocs) <= 1.0e-6); - if (DEBUG) cout << "SRMA shapes " << rcost << endl; + if (recompose_verbose) cout << "SRMA shapes " << rcost << endl; // Choose a direction int mydim = -1; @@ -1198,22 +1389,20 @@ namespace Carpet { } assert (mydim>=0 and mydim<dim); assert (mycost>=0); - if (DEBUG) cout << "SRMAR mydim " << mydim << endl; - if (DEBUG) cout << "SRMAR mycost " << mycost << endl; + if (recompose_verbose) cout << "SRMAR mydim " << mydim << endl; + if (recompose_verbose) cout << "SRMAR mycost " << mycost << endl; // Mark this direction as done assert (not dims[mydim]); bvect const newdims = dims.replace(mydim, true); // Choose a number of slices for this direction - int const nslices - = min (nprocs, - int (floor (mycost * pow(nprocs / totalcost, - CCTK_REAL(1) / alldims) + - CCTK_REAL(0.5)))); + CCTK_REAL const mycost1 = + mycost * pow(nprocs / totalcost, CCTK_REAL(1) / alldims); + int const nslices = min (nprocs, int (floor (mycost1 + CCTK_REAL(0.5)))); assert (nslices <= nprocs); - if (DEBUG) cout << "SRMAR " << mydim << " nprocs " << nprocs << endl; - if (DEBUG) cout << "SRMAR " << mydim << " nslices " << nslices << endl; + if (recompose_verbose) cout << "SRMAR " << mydim << " nprocs " << nprocs << endl; + if (recompose_verbose) cout << "SRMAR " << mydim << " nslices " << nslices << endl; // Split the remaining processors vector<int> mynprocs(nslices); @@ -1221,11 +1410,11 @@ namespace Carpet { int const mynprocs_left = nprocs - nslices * mynprocs_base; int sum_mynprocs = 0; for (int n=0; n<nslices; ++n) { - mynprocs.at(n) = mynprocs_base + int (n < mynprocs_left); - sum_mynprocs += mynprocs.at(n); + mynprocs.AT(n) = mynprocs_base + int (n < mynprocs_left); + sum_mynprocs += mynprocs.AT(n); } assert (sum_mynprocs == nprocs); - if (DEBUG) cout << "SRMAR " << mydim << " mynprocs " << mynprocs << endl; + if (recompose_verbose) cout << "SRMAR " << mydim << " mynprocs " << mynprocs << endl; // Split the region vector<int> mynpoints(nslices); @@ -1237,20 +1426,22 @@ namespace Carpet { int npoints_left = npoints; int nprocs_left = nprocs; for (int n=0; n<nslices; ++n) { - mynpoints.at(n) = int (floor (CCTK_REAL(1) * npoints_left * mynprocs.at(n) - / nprocs_left + CCTK_REAL(0.5))); - assert (mynprocs .at(n) > 0); - npoints_left -= mynpoints.at(n); - nprocs_left -= mynprocs.at(n); + assert (nprocs_left > 0); + CCTK_REAL const npoints1 = + CCTK_REAL(1) * npoints_left * mynprocs.AT(n) / nprocs_left; + mynpoints.AT(n) = int (floor (npoints1 + CCTK_REAL(0.5))); + assert (mynpoints.AT(n) >= 0 and mynpoints.AT(n) <= npoints_left); + npoints_left -= mynpoints.AT(n); + nprocs_left -= mynprocs.AT(n); assert (npoints_left >= 0); assert (nprocs_left >= 0); } assert (npoints_left == 0); assert (nprocs_left == 0); - if (DEBUG) cout << "SRMAR " << mydim << " mynpoints " << mynpoints << endl; + if (recompose_verbose) cout << "SRMAR " << mydim << " mynpoints " << mynpoints << endl; // Create the regions and recurse - if (DEBUG) cout << "SRMAR " << mydim << ": create bboxes" << endl; + if (recompose_verbose) cout << "SRMAR " << mydim << ": create bboxes" << endl; ivect lo = superreg.extent.lower(); ivect up = superreg.extent.upper(); ivect const str = superreg.extent.stride(); @@ -1258,41 +1449,41 @@ namespace Carpet { vector<int> bounds (nslices+1); vector<ipfulltree *> subtrees (nslices); for (int n=0; n<nslices; ++n) { - if (DEBUG) cout << "SRMAR " << mydim << " n " << n << endl; + if (recompose_verbose) cout << "SRMAR " << mydim << " n " << n << endl; // Create a new region - up[mydim] = lo[mydim] + (mynpoints.at(n) - 1) * str[mydim]; + up[mydim] = lo[mydim] + (mynpoints.AT(n) - 1) * str[mydim]; b2vect newob (superreg.outer_boundaries); if (n > 0) { newob[0][mydim] = false; } if (n < nslices-1) { - up[mydim] = lo[mydim] + (mynpoints.at(n) - 1) * str[mydim]; + up[mydim] = lo[mydim] + (mynpoints.AT(n) - 1) * str[mydim]; newob[1][mydim] = false; } region_t newreg (superreg); newreg.extent = ibbox(lo, up, str); newreg.outer_boundaries = newob; - if (DEBUG) cout << "SRMAR " << mydim << " newreg " << newreg << endl; + if (recompose_verbose) cout << "SRMAR " << mydim << " newreg " << newreg << endl; // Recurse - bounds.at(n) = lo[mydim]; + bounds.AT(n) = lo[mydim]; SplitRegionsMaps_Automatic_Recursively - (newdims, p, mynprocs.at(n), newreg, newregs); - if (DEBUG) cout << "SRMAR " << mydim << " newregs " << newregs << endl; + (newdims, p, mynprocs.AT(n), newreg, newregs); + if (recompose_verbose) cout << "SRMAR " << mydim << " newregs " << newregs << endl; assert (newreg.processors != NULL); - subtrees.at(n) = newreg.processors; + subtrees.AT(n) = newreg.processors; newreg.processors = NULL; newreg.processor = p; // Next slice lo[mydim] = up[mydim] + str[mydim]; - p += mynprocs.at(n); + p += mynprocs.AT(n); } assert (up[mydim] == superreg.extent.upper()[mydim]); assert (p == firstproc + nprocs); - bounds.at(nslices) = up[mydim] + str[mydim]; + bounds.AT(nslices) = up[mydim] + str[mydim]; // Create tree assert (superreg.processors == NULL); @@ -1301,7 +1492,7 @@ namespace Carpet { // Check postcondition assert (newregs.size() == oldsize + nprocs); - if (DEBUG) cout << "SRMAR exit" << endl; + if (recompose_verbose) cout << "SRMAR exit" << endl; } @@ -1313,20 +1504,20 @@ namespace Carpet { { DECLARE_CCTK_PARAMETERS; - if (DEBUG) cout << "SRMA enter" << endl; + if (recompose_verbose) cout << "SRMA enter" << endl; int const nmaps = superregss.size(); int minmap = 1000000000; for (int m=0; m<nmaps; ++m) { - for (int r=0; r<int(superregss.at(m).size()); ++r) { - minmap = min (minmap, superregss.at(m).at(r).map); + for (int r=0; r<int(superregss.AT(m).size()); ++r) { + minmap = min (minmap, superregss.AT(m).AT(r).map); } } int nregs = 0; for (int m=0; m<nmaps; ++m) { - nregs += superregss.at(m).size(); + nregs += superregss.AT(m).size(); } - if (DEBUG) cout << "SRMA nregs " << nregs << endl; + if (recompose_verbose) cout << "SRMA nregs " << nregs << endl; // Something to do? if (nregs == 0) { @@ -1337,7 +1528,7 @@ namespace Carpet { vector<region_t> superregs; { for (int m=0; m<nmaps; ++m) { - combine_regions (superregss.at(m), superregs); + combine_regions (superregss.AT(m), superregs); } nregs = superregs.size(); @@ -1351,14 +1542,13 @@ namespace Carpet { reg.extent = ibbox (ivect (0), ivect (-1), ivect (1)); reg.outer_boundaries = b2vect (bvect (true), bvect (true)); reg.map = 0; - reg.processor = -1; superregs.push_back (reg); nregs = superregs.size(); } } int const real_nprocs = CCTK_nProcs (cctkGH); - if (DEBUG) cout << "SRMA real_nprocs " << real_nprocs << endl; + if (recompose_verbose) cout << "SRMA real_nprocs " << real_nprocs << endl; // Deactivate some processors if there are too many int nprocs; @@ -1367,109 +1557,155 @@ namespace Carpet { } else { CCTK_REAL mycost = 0; for (int r=0; r<nregs; ++r) { - mycost += prod (cost (superregs.at(r))); + mycost += prod (cost (superregs.AT(r))); } int const goodnprocs = int (floor (mycost / min_points_per_proc)); nprocs = max (1, min (real_nprocs, goodnprocs)); } - if (DEBUG) cout << "SRMA nprocs " << nprocs << endl; + if (recompose_verbose) cout << "SRMA nprocs " << nprocs << endl; // ncomps: number of components per processor int const ncomps = (nregs + nprocs - 1) / nprocs; - if (DEBUG) cout << "SRMA ncomps " << ncomps << endl; + if (recompose_verbose) cout << "SRMA ncomps " << ncomps << endl; assert (ncomps > 0); int const newnregs = nprocs * ncomps; - if (DEBUG) cout << "SRMA newnregs " << newnregs << endl; + if (recompose_verbose) cout << "SRMA newnregs " << newnregs << endl; - if (DEBUG) cout << "SRMA: distributing processors to regions" << endl; + if (recompose_verbose) cout << "SRMA: distributing processors to regions" << endl; vector<CCTK_REAL> mycosts(nregs); for (int r=0; r<nregs; ++r) { - mycosts.at(r) = prod (cost (superregs.at(r))); + mycosts.AT(r) = prod (cost (superregs.AT(r))); } int nregs_left = newnregs; vector<int> mynprocs(nregs); for (int r=0; r<nregs; ++r) { - mynprocs.at(r) = 1; + mynprocs.AT(r) = 1; -- nregs_left; } #warning "TODO: split regions if necessary" while (nregs_left > 0) { - if (DEBUG) cout << "SRMA nregs_left " << nregs_left << endl; + if (recompose_verbose) cout << "SRMA nregs_left " << nregs_left << endl; int maxr = -1; CCTK_REAL maxratio = -1; for (int r=0; r<nregs; ++r) { - CCTK_REAL const ratio = mycosts.at(r) / mynprocs.at(r); + CCTK_REAL const ratio = mycosts.AT(r) / mynprocs.AT(r); if (ratio > maxratio) { maxr=r; maxratio=ratio; } } assert (maxr>=0 and maxr<nregs); - ++ mynprocs.at(maxr); - if (DEBUG) cout << "SRMA maxr " << maxr << endl; - if (DEBUG) cout << "SRMA mynprocs[maxr] " << mynprocs.at(maxr) << endl; + ++ mynprocs.AT(maxr); + if (recompose_verbose) cout << "SRMA maxr " << maxr << endl; + if (recompose_verbose) cout << "SRMA mynprocs[maxr] " << mynprocs.AT(maxr) << endl; -- nregs_left; } assert (nregs_left == 0); int sum_nprocs = 0; for (int r=0; r<nregs; ++r) { - sum_nprocs += mynprocs.at(r); + sum_nprocs += mynprocs.AT(r); } assert (sum_nprocs == newnregs); - if (DEBUG) cout << "SRMA mynprocs " << mynprocs << endl; + if (recompose_verbose) cout << "SRMA mynprocs " << mynprocs << endl; - if (DEBUG) cout << "SRMA: splitting work units" << endl; + if (recompose_verbose) cout << "SRMA: splitting work units" << endl; #warning "TODO: rename newregs to regs" #warning "TODO: rename nregs to nsuperregs" #warning "TODO: rename newnregs to nregs" vector<region_t> newregs; newregs.reserve (newnregs); - for (int r=0, p=0; r<nregs; p+=mynprocs.at(r), ++r) { - if (DEBUG) cout << "SRMA superreg[" << r << "] " << superregs.at(r) << endl; + for (int r=0, p=0; r<nregs; p+=mynprocs.AT(r), ++r) { + if (recompose_verbose) cout << "SRMA superreg[" << r << "] " << superregs.AT(r) << endl; bvect const dims = false; SplitRegionsMaps_Automatic_Recursively - (dims, p, mynprocs.at(r), superregs.at(r), newregs); + (dims, p, mynprocs.AT(r), superregs.AT(r), newregs); } // for r - if (DEBUG) cout << "SRMA newregs " << newregs << endl; + if (recompose_verbose) cout << "SRMA newregs " << newregs << endl; assert (int(newregs.size()) == newnregs); // Count components per map vector<int> myncomps(nmaps, 0); +#if 0 vector<int> empty_comps(nmaps, 0); +#endif for (int r=0; r<newnregs; ++r) { - int const m = newregs.at(r).map - minmap; + int const m = newregs.AT(r).map - minmap; assert (m>=0 and m<nmaps); - if (not newregs.at(r).extent.empty()) { +#if 0 + if (not newregs.AT(r).extent.empty()) { // Ignore empty regions, which may come from empty grid arrays - ++ myncomps.at(m); + ++ myncomps.AT(m); } else { - ++ empty_comps.at(m); + ++ empty_comps.AT(m); } +#endif + ++ myncomps.AT(m); } vector<int> mynregs(nmaps, 0); +#if 0 + vector<int> empty_regs(nmaps, 0); +#endif for (int r=0; r<nregs; ++r) { - int const m = superregs.at(r).map - minmap; + int const m = superregs.AT(r).map - minmap; assert (m>=0 and m<nmaps); - ++ mynregs.at(m); + ++ mynregs.AT(m); +#if 0 + if (not superregs.AT(r).extent.empty()) { + // Ignore empty regions, which may come from empty grid arrays + ++ mynregs.AT(m); + } else { + ++ empty_regs.AT(m); + } +#endif } // Convert virtual to real processors for (int r=0; r<newnregs; ++r) { - newregs.at(r).processor /= ncomps; - assert (newregs.at(r).processor >= 0 and - newregs.at(r).processor < nprocs); + newregs.AT(r).processor /= ncomps; + assert (newregs.AT(r).processor >= 0 and + newregs.AT(r).processor < nprocs); } { vector<int> tmpncomps(nmaps, 0); for (int r=0; r<nregs; ++r) { - int const m = superregs.at(r).map - minmap; - ipfulltree * const regf = superregs.at(r).processors; + int const m = superregs.AT(r).map - minmap; + ipfulltree * const regf = superregs.AT(r).processors; assert (regf != NULL); for (ipfulltree::iterator fti (* regf); not fti.done(); ++ fti) { pseudoregion_t & preg = (* fti).payload(); - preg.component = tmpncomps.at(m)++; + preg.component = tmpncomps.AT(m)++; } } for (int m=0; m<nmaps; ++m) { - assert (tmpncomps.at(m) == myncomps.at(m)); +#warning "TODO" + if (not (tmpncomps.AT(m) == myncomps.AT(m))) { + cout << "Recompose.cc" << endl + << "superregss=" << superregss << endl + << "regss=" << regss << endl + << "nregs=" << nregs << endl + << "newregs=" << newregs << endl + << "newnregs=" << newnregs << endl + << "m=" << m << endl + << "tmpncomps.AT(m)=" << tmpncomps.AT(m) << endl + << "myncomps.AT(m)=" << myncomps.AT(m) << endl; + cout << "newregs:" << endl; + for (int r=0; r<newnregs; ++r) { + int const m = newregs.AT(r).map - minmap; + assert (m>=0 and m<nmaps); + cout << "r=" << r << endl + << "newregs=" << newregs.at(r) << endl + << "newregs.extent.size()=" << newregs.at(r).extent.size() << endl + << "newregs.extent.empty()=" << newregs.at(r).extent.empty() << endl; + } + cout << "*regf:" << endl; + for (int r=0; r<nregs; ++r) { + int const m = superregs.AT(r).map - minmap; + ipfulltree * const regf = superregs.AT(r).processors; + cout << "r=" << r << endl + << "m=" << m << endl; + cout << "*regf=" << *regf << endl; + } + cout.flush(); + } + assert (tmpncomps.AT(m) == myncomps.AT(m)); } } @@ -1477,34 +1713,37 @@ namespace Carpet { // Allocate regions assert ((int)regss.size() == nmaps); for (int m=0; m<nmaps; ++m) { - assert (regss.at(m).empty()); - regss.at(m).reserve (myncomps.at(m)); - superregss.at(m).clear(); - superregss.at(m).reserve (mynregs.at(m)); + assert (regss.AT(m).empty()); + regss.AT(m).reserve (myncomps.AT(m)); + superregss.AT(m).clear(); + superregss.AT(m).reserve (mynregs.AT(m)); } // Assign regions for (int r=0; r<newnregs; ++r) { - int const m = newregs.at(r).map - minmap; + int const m = newregs.AT(r).map - minmap; assert (m>=0 and m<nmaps); - regss.at(m).push_back (newregs.at(r)); + regss.AT(m).push_back (newregs.AT(r)); } for (int r=0; r<nregs; ++r) { - int const m = superregs.at(r).map - minmap; + int const m = superregs.AT(r).map - minmap; assert (m>=0 and m<nmaps); - superregss.at(m).push_back (superregs.at(r)); + superregss.AT(m).push_back (superregs.AT(r)); } // Output regions - if (DEBUG) { + if (recompose_verbose) { cout << "SRMA superregss " << superregss << endl; cout << "SRMA regss " << regss << endl; } // Check sizes for (int m=0; m<nmaps; ++m) { - assert (int(regss.at(m).size()) == myncomps.at(m) + empty_comps.at(m)); - assert (int(superregss.at(m).size()) == mynregs.at(m)); +#if 0 + assert (int(regss.AT(m).size()) == myncomps.AT(m) + empty_comps.AT(m)); +#endif + assert (int(regss.AT(m).size()) == myncomps.AT(m)); + assert (int(superregss.AT(m).size()) == mynregs.AT(m)); } - if (DEBUG) cout << "SRMA exit" << endl; + if (recompose_verbose) cout << "SRMA exit" << endl; } @@ -1547,30 +1786,30 @@ namespace Carpet { } } vector<ibbox> bases(mglevels); - bases.at(0) = base; + bases.AT(0) = base; for (int ml=1; ml<mglevels; ++ml) { // next finer base - ivect const fbaselo = bases.at(ml-1).lower(); - ivect const fbasehi = bases.at(ml-1).upper(); - ivect const fbasestr = bases.at(ml-1).stride(); + ivect const fbaselo = bases.AT(ml-1).lower(); + ivect const fbasehi = bases.AT(ml-1).upper(); + ivect const fbasestr = bases.AT(ml-1).stride(); // this base ivect const basestr = fbasestr * mgfact; ivect const baselo = fbaselo + (xpose(offset)[0] - ivect(mgfact) * xpose(offset)[0]) * fbasestr; ivect const basehi = fbasehi + (xpose(offset)[1] - ivect(mgfact) * xpose(offset)[1]) * fbasestr; ivect const baselo1 = baselo; ivect const basehi1 = baselo1 + (basehi - baselo1) / basestr * basestr; - bases.at(ml) = ibbox(baselo1, basehi1, basestr); + bases.AT(ml) = ibbox(baselo1, basehi1, basestr); // next finer grid - ivect const flo = regs.at(ml-1).extent.lower(); - ivect const fhi = regs.at(ml-1).extent.upper(); - ivect const fstr = regs.at(ml-1).extent.stride(); + ivect const flo = regs.AT(ml-1).extent.lower(); + ivect const fhi = regs.AT(ml-1).extent.upper(); + ivect const fstr = regs.AT(ml-1).extent.stride(); // this grid ivect const str = fstr * mgfact; ivect const lo = flo + either (reg.outer_boundaries[0], (xpose(offset)[0] - ivect(mgfact) * xpose(offset)[0]) * fstr, ivect(0)); ivect const hi = fhi + either (reg.outer_boundaries[1], - (xpose(offset)[1] - ivect(mgfact) * xpose(offset)[1]) * fstr, ivect(0)); ivect const lo1 = baselo1 + (lo - baselo1 + str - 1) / str * str; ivect const hi1 = lo1 + (hi - lo1) / str * str; - regs.at(ml).extent = ibbox(lo1, hi1, str); + regs.AT(ml).extent = ibbox(lo1, hi1, str); } } } @@ -1583,25 +1822,25 @@ namespace Carpet { { regsss.resize (mglevels); for (int ml=0; ml<mglevels; ++ml) { - regsss.at(ml).resize (regss.size()); + regsss.AT(ml).resize (regss.size()); for (int rl=0; rl<(int)regss.size(); ++rl) { - regsss.at(ml).at(rl).resize (regss.at(rl).size()); + regsss.AT(ml).AT(rl).resize (regss.AT(rl).size()); } } for (int rl=0; rl<(int)regss.size(); ++rl) { ibbox base; - for (int c=0; c<(int)regss.at(rl).size(); ++c) { - base = base.expanded_containing(regss.at(rl).at(c).extent); + for (int c=0; c<(int)regss.AT(rl).size(); ++c) { + base = base.expanded_containing(regss.AT(rl).AT(c).extent); } - for (int c=0; c<(int)regss.at(rl).size(); ++c) { + for (int c=0; c<(int)regss.AT(rl).size(); ++c) { vector<region_t> mg_regs; - MakeMultigridBoxes (cctkGH, m, base, regss.at(rl).at(c), mg_regs); + MakeMultigridBoxes (cctkGH, m, base, regss.AT(rl).AT(c), mg_regs); assert ((int)mg_regs.size() == mglevels); for (int ml=0; ml<mglevels; ++ml) { - regsss.at(ml).at(rl).at(c) = mg_regs.at(ml); + regsss.AT(ml).AT(rl).AT(c) = mg_regs.AT(ml); } } // for c @@ -1615,8 +1854,46 @@ namespace Carpet { vector<vector<vector<vector<region_t> > > > & regssss) { for (int m = 0; m < maps; ++m) { - MakeMultigridBoxes (cctkGH, m, regsss.at(m), regssss.at(m)); + MakeMultigridBoxes (cctkGH, m, regsss.AT(m), regssss.AT(m)); } // for m } + + + static + void + ClassifyPoints (cGH const * const cctkGH, int const rl) + { + // negative: needs to be set explicitly (e.g. boundary) + // zero: unused (e.g. ghost) + // positive: needs to be evolved + // -1: boundary point (needs to be set explicitly) + // 0: unused (e.g. ghost point, or restriction target) + // n=1..N: evolved, used for integrator substeps i<=n + // (i=N..1, counting backwards; see MoL documentation) + // i.e.: n=1: used between time steps (i.e., should be visualised) + // n>1: used only while time stepping (e.g. buffer zones) + + BEGIN_META_MODE(cctkGH) { + BEGIN_MGLEVEL_LOOP (cctkGH) { + ENTER_LEVEL_MODE (cctkGH, rl) { + BEGIN_LOCAL_MAP_LOOP(cctkGH, CCTK_GF) { + BEGIN_LOCAL_COMPONENT_LOOP(cctkGH, CCTK_GF) { + DECLARE_CCTK_ARGUMENTS; +#pragma omp parallel + LC_LOOP3 (CarpetClassifyPoints, + i,j,k, + 0,0,0, cctk_lsh[0],cctk_lsh[1],cctk_lsh[2], + cctk_lsh[0],cctk_lsh[1],cctk_lsh[2]) + { + int const ind = CCTK_GFINDEX3D (cctkGH, i, j, k); + point_class[ind] = 1; + } LC_ENDLOOP3(CarpetClassifyPoints); + } END_LOCAL_COMPONENT_LOOP; + } END_LOCAL_MAP_LOOP; + } LEAVE_LEVEL_MODE; + } END_MGLEVEL_LOOP; + } END_META_MODE; + } + } // namespace Carpet diff --git a/Carpet/Carpet/src/Requirements.cc b/Carpet/Carpet/src/Requirements.cc index 6a4a83ebc..da0beaf6b 100644 --- a/Carpet/Carpet/src/Requirements.cc +++ b/Carpet/Carpet/src/Requirements.cc @@ -8,7 +8,7 @@ #include <cctki_GHExtensions.h> #include <cctki_Schedule.h> -#include "carpet.hh" +#include <carpet.hh> using namespace std; @@ -21,6 +21,14 @@ using namespace std; typedef enum {sched_none, sched_group, sched_function} iSchedType; typedef enum {schedpoint_misc, schedpoint_analysis} iSchedPoint; +typedef struct t_timer +{ + struct t_timer *next; + int timer_handle; + char *schedule_bin; + int has_been_output; +} t_timer; + typedef struct { /* Static data */ @@ -41,8 +49,7 @@ typedef struct int *comm_groups; /* Timer data */ - - int timer_handle; + t_timer *timers; /* Dynamic data */ int *CommOnEntry; @@ -68,6 +75,10 @@ namespace Carpet { // 2. Things can be provided only once, not multiple times. // Except when they are also provided. + // Keep track of which time levels contain good data; modify this + // while time level cycling; routine specify how many time levels + // they require/provide + int CheckEntry (void * attribute, void * data); @@ -306,8 +317,8 @@ namespace Carpet { CheckOneGroup (cctkGH, "CCTK_TERMINATE"); } - }; // namespace Carpet -}; // namespace Requirements + } // namespace Carpet +} // namespace Requirements @@ -324,8 +335,8 @@ namespace Carpet { Checkpoint ("Skipping check of schedule requirements (no flesh support)"); // do nothing } - }; // namespace Carpet -}; // namespace Requirements + } // namespace Carpet +} // namespace Requirements diff --git a/Carpet/Carpet/src/Restrict.cc b/Carpet/Carpet/src/Restrict.cc index a0a94ddd4..bad055641 100644 --- a/Carpet/Carpet/src/Restrict.cc +++ b/Carpet/Carpet/src/Restrict.cc @@ -2,13 +2,13 @@ #include <cmath> #include <cstdlib> -#include "cctk.h" -#include "cctk_Parameters.h" +#include <cctk.h> +#include <cctk_Parameters.h> -#include "ggf.hh" -#include "gh.hh" +#include <ggf.hh> +#include <gh.hh> -#include "carpet.hh" +#include <carpet.hh> @@ -58,7 +58,7 @@ namespace Carpet { } - // restricts a set of groups which all have the same vartype + // restrict a set of groups static void RestrictGroups (const cGH* cctkGH, const vector<int>& groups) { DECLARE_CCTK_PARAMETERS; @@ -66,14 +66,14 @@ namespace Carpet { for (comm_state state; not state.done(); state.step()) { for (int group = 0; group < (int)groups.size(); ++group) { - const int g = groups[group]; - for (int m=0; m<(int)arrdata.at(g).size(); ++m) { + const int g = groups.AT(group); + for (int m=0; m<(int)arrdata.AT(g).size(); ++m) { // use background time here (which may not be modified // by the user) - const CCTK_REAL time = vtt.at(m)->time (tl, reflevel, mglevel); + const CCTK_REAL time = vtt.AT(m)->time (tl, reflevel, mglevel); - const CCTK_REAL time1 = vtt.at(m)->time (0, reflevel, mglevel); + const CCTK_REAL time1 = vtt.AT(m)->time (0, reflevel, mglevel); const CCTK_REAL time2 = (cctkGH->cctk_time - cctk_initial_time) / delta_time; const CCTK_REAL time0 = @@ -81,8 +81,8 @@ namespace Carpet { const CCTK_REAL eps = 1.0e-12; assert (abs(time1 - time2) <= eps * time0); - for (int v = 0; v < (int)arrdata.at(g).at(m).data.size(); ++v) { - ggf *const gv = arrdata.at(g).at(m).data.at(v); + for (int v = 0; v < (int)arrdata.AT(g).AT(m).data.size(); ++v) { + ggf *const gv = arrdata.AT(g).AT(m).data.AT(v); gv->ref_restrict_all (state, tl, reflevel, mglevel, time); } } diff --git a/Carpet/Carpet/src/ScheduleWrapper.cc b/Carpet/Carpet/src/ScheduleWrapper.cc index c782c0f91..624dacbf9 100644 --- a/Carpet/Carpet/src/ScheduleWrapper.cc +++ b/Carpet/Carpet/src/ScheduleWrapper.cc @@ -1,10 +1,12 @@ #include <cassert> #include <list> -#include "cctk.h" -#include "cctk_Arguments.h" +#include <cctk.h> +#include <cctk_Arguments.h> + +#include <carpet.hh> + -#include "carpet.hh" namespace Carpet { diff --git a/Carpet/Carpet/src/SetupGH.cc b/Carpet/Carpet/src/SetupGH.cc index e9f0df32f..6be1c7008 100644 --- a/Carpet/Carpet/src/SetupGH.cc +++ b/Carpet/Carpet/src/SetupGH.cc @@ -4,6 +4,7 @@ #include <cstdlib> #include <cstring> #include <iostream> +#include <limits> #include <sstream> #include <stack> #include <string> @@ -13,7 +14,6 @@ #include <cctk.h> #include <cctk_Parameters.h> - #include <util_ErrorCodes.h> #include <util_Network.h> #include <util_Table.h> @@ -23,10 +23,11 @@ #include <dist.hh> #include <ggf.hh> #include <gh.hh> +#include <mpi_string.hh> #include <region.hh> #include <vect.hh> -#include "carpet.hh" +#include <carpet.hh> @@ -181,9 +182,6 @@ namespace Carpet { { DECLARE_CCTK_PARAMETERS; - // Check and/or modify system limits - SetSystemLimits (); - // Some statistics { int const nprocs = dist::size(); @@ -191,14 +189,42 @@ namespace Carpet { dist::set_num_threads (num_threads); int const mynthreads = dist::num_threads(); int const nthreads_total = dist::total_num_threads(); +#ifdef CCTK_MPI + CCTK_VInfo (CCTK_THORNSTRING, + "MPI is enabled"); CCTK_VInfo (CCTK_THORNSTRING, "Carpet is running on %d processes", nprocs); CCTK_VInfo (CCTK_THORNSTRING, "This is process %d", myproc); +#else + CCTK_VInfo (CCTK_THORNSTRING, + "MPI is disabled"); +#endif + char const * const OMP_NUM_THREADS = getenv ("OMP_NUM_THREADS"); +#ifdef _OPENMP + CCTK_VInfo (CCTK_THORNSTRING, + "OpenMP is enabled"); + if (not OMP_NUM_THREADS and num_threads == -1) { + CCTK_VWarn (CCTK_WARN_COMPLAIN, __LINE__, __FILE__, CCTK_THORNSTRING, + "Although OpenMP is enabled, neither the environment variable OMP_NUM_THREADS nor the parameter Carpet::num_threads are set. A system-specific default value is used instead."); + } CCTK_VInfo (CCTK_THORNSTRING, "This process contains %d threads", mynthreads); CCTK_VInfo (CCTK_THORNSTRING, "There are %d threads in total", nthreads_total); +#else + CCTK_VInfo (CCTK_THORNSTRING, + "OpenMP is disabled"); + int const omp_num_threads = OMP_NUM_THREADS ? atoi (OMP_NUM_THREADS) : 0; + if (omp_num_threads > 0) { + CCTK_VWarn (CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING, + "Although OpenMP is disabled, the environment variable OMP_NUM_THREADS is set to %d. It will be ignored.", omp_num_threads); + } + if (num_threads > 0) { + CCTK_VWarn (CCTK_WARN_ALERT, __LINE__, __FILE__, CCTK_THORNSTRING, + "Although OpenMP is disabled, the parameter Carpet::num_threads is set to %d. It will be ignored.", num_threads); + } +#endif #if 0 // Do not call Util_GetHostName. Certain InfiniBand libraries @@ -209,7 +235,7 @@ namespace Carpet { char hostnamebuf[1000]; Util_GetHostName (hostnamebuf, sizeof hostnamebuf); string const hostname (hostnamebuf); - vector <string> hostnames = AllGatherString (dist::comm(), hostname); + vector <string> hostnames = allgather_string (dist::comm(), hostname); // Collect process ids int const mypid = getpid (); vector <int> pids (nprocs); @@ -227,7 +253,7 @@ namespace Carpet { for (int n = 0; n < nprocs; ++ n) { CCTK_VInfo (CCTK_THORNSTRING, " %6d: %s, pid=%d, num_threads=%d", - n, hostnames.at(n).c_str(), pids.at(n), nthreads.at(n)); + n, hostnames.AT(n).c_str(), pids.AT(n), nthreads.AT(n)); } } #endif @@ -240,6 +266,7 @@ namespace Carpet { mc_grouptype = -1; map = -1; component = -1; + cctkGH->cctk_mode = CCTK_MODE_META; // Say hello Waypoint ("Setting up the grid hierarchy"); @@ -275,7 +302,9 @@ namespace Carpet { do_warn_about_storage = false; // This is enabled later if (enable_all_storage) { - enable_storage_for_all_groups (cctkGH); + if (not enable_no_storage) { + enable_storage_for_all_groups (cctkGH); + } } Waypoint ("Done with setting up the grid hierarchy"); @@ -327,8 +356,11 @@ namespace Carpet { if (CCTK_EQUALS (space_refinement_factors, "")) { // Calculate them from the default refinement factor spacereffacts.resize (maxreflevels); - for (int n=0; n<maxreflevels; ++n) { - spacereffacts.at(n) = ivect (ipow (int(refinement_factor), n)); + assert (ipow (2, 0) == 1); + assert (ipow (3, 1) == 3); + assert (ipow (4, 2) == 16); + for (int rl=0; rl<maxreflevels; ++rl) { + spacereffacts.AT(rl) = ivect (ipow (int(refinement_factor), rl)); } } else { // Read them from the parameter @@ -342,10 +374,10 @@ namespace Carpet { } // TODO: turn these into real error messages assert (int(spacereffacts.size()) >= maxreflevels); - assert (all (spacereffacts.front() == 1)); - for (int n=1; n<maxreflevels; ++n) { - assert (all (spacereffacts.at(n) >= spacereffacts.at(n-1))); - assert (all (spacereffacts.at(n) % spacereffacts.at(n-1) == 0)); + assert (all (spacereffacts.AT(0) == 1)); + for (int rl=1; rl<maxreflevels; ++rl) { + assert (all (spacereffacts.AT(rl) >= spacereffacts.AT(rl-1))); + assert (all (spacereffacts.AT(rl) % spacereffacts.AT(rl-1) == 0)); } spacereffacts.resize (maxreflevels); @@ -353,8 +385,8 @@ namespace Carpet { if (CCTK_EQUALS (time_refinement_factors, "")) { // Calculate them from the default refinement factor timereffacts.resize (maxreflevels); - for (int n=0; n<maxreflevels; ++n) { - timereffacts.at(n) = ipow (int(refinement_factor), n); + for (int rl=0; rl<maxreflevels; ++rl) { + timereffacts.AT(rl) = ipow (int(refinement_factor), rl); } } else { // Read them from the parameter @@ -367,16 +399,16 @@ namespace Carpet { } // TODO: turn these into real error messages assert (int(timereffacts.size()) >= maxreflevels); - assert (timereffacts.front() == 1); - for (int n=1; n<maxreflevels; ++n) { - assert (timereffacts.at(n) >= timereffacts.at(n-1)); - assert (timereffacts.at(n) % timereffacts.at(n-1) == 0); + assert (timereffacts.AT(0) == 1); + for (int rl=1; rl<maxreflevels; ++rl) { + assert (timereffacts.AT(rl) >= timereffacts.AT(rl-1)); + assert (timereffacts.AT(rl) % timereffacts.AT(rl-1) == 0); } timereffacts.resize (maxreflevels); // Calculate the maximum refinement factors - maxtimereflevelfact = timereffacts.at (maxreflevels-1); - maxspacereflevelfact = spacereffacts.at (maxreflevels-1); + maxtimereflevelfact = timereffacts.AT(maxreflevels-1); + maxspacereflevelfact = spacereffacts.AT(maxreflevels-1); } @@ -502,7 +534,7 @@ namespace Carpet { // Allocate grid hierarchy vhh.resize(maps); - vhh.at(m) = new gh (spacereffacts, refcentering, + vhh.AT(m) = new gh (spacereffacts, refcentering, convergence_factor, mgcentering, baseexts, nboundaryzones); } @@ -541,7 +573,7 @@ namespace Carpet { assert (all (all (buffers >= 0))); vdd.resize(maps); - vdd.at(m) = new dh (* vhh.at(m), + vdd.AT(m) = new dh (* vhh.AT(m), ghosts, buffers, prolongation_order_space); @@ -559,7 +591,7 @@ namespace Carpet { DECLARE_CCTK_PARAMETERS; vtt.resize (maps); - vtt.at(m) = new th (* vhh.at(m), + vtt.AT(m) = new th (* vhh.AT(m), timereffacts, 1.0); } @@ -573,7 +605,7 @@ namespace Carpet { vector<vector<vector<region_t> > > superregsss (maps); for (int m=0; m<maps; ++m) { - set_base_extent (m, superregsss.at(m)); + set_base_extent (m, superregsss.AT(m)); } vector<vector<vector<vector<region_t> > > > regssss; @@ -582,40 +614,45 @@ namespace Carpet { for (int m=0; m<maps; ++m) { // Check the regions - CheckRegions (regssss.at(m)); + CheckRegions (regssss.AT(m)); // Recompose grid hierarchy - vhh.at(m)->regrid (superregsss.at(m), regssss.at(m)); + vhh.AT(m)->regrid (superregsss.AT(m), regssss.AT(m), false); int const rl = 0; - vhh.at(m)->recompose (rl, false); + vhh.AT(m)->recompose (rl, false); + vhh.AT(m)->regrid_free (false); } // for m - CCTK_INFO ("Grid structure (grid points):"); - for (int ml=0; ml<mglevels; ++ml) { - int const rl = 0; - for (int m=0; m<maps; ++m) { - for (int c=0; c<vhh.at(m)->components(rl); ++c) { - ibbox const ext = vhh.at(m)->extent(ml,rl,c); - ivect const lower = ext.lower(); - ivect const upper = ext.upper(); - int const convfact = ipow(mgfact, ml); - assert (all(lower % maxspacereflevelfact == 0)); - assert (all(upper % maxspacereflevelfact == 0)); - assert (all(((upper - lower) / maxspacereflevelfact) % convfact == 0)); - cout << " [" << ml << "][" << rl << "][" << m << "][" << c << "]" - << " exterior: " - << "proc " - << vhh.at(m)->processor(rl,c) - << " " - << lower / maxspacereflevelfact - << " : " - << upper / maxspacereflevelfact - << " (" - << (upper - lower) / maxspacereflevelfact / convfact + 1 - << ") " - << prod ((upper - lower) / maxspacereflevelfact / convfact + 1) - << endl; + regridding_epoch = 0; + + if (verbose or veryverbose) { + CCTK_INFO ("Grid structure (grid points):"); + for (int ml=0; ml<mglevels; ++ml) { + int const rl = 0; + for (int m=0; m<maps; ++m) { + for (int c=0; c<vhh.AT(m)->components(rl); ++c) { + ibbox const ext = vhh.AT(m)->extent(ml,rl,c); + ivect const lower = ext.lower(); + ivect const upper = ext.upper(); + int const convfact = ipow(mgfact, ml); + assert (all(lower % maxspacereflevelfact == 0)); + assert (all(upper % maxspacereflevelfact == 0)); + assert (all(((upper - lower) / maxspacereflevelfact) % convfact == 0)); + cout << " [" << ml << "][" << rl << "][" << m << "][" << c << "]" + << " exterior: " + << "proc " + << vhh.AT(m)->processor(rl,c) + << " " + << lower / maxspacereflevelfact + << " : " + << upper / maxspacereflevelfact + << " (" + << (upper - lower) / maxspacereflevelfact / convfact + 1 + << ") " + << prod ((upper - lower) / maxspacereflevelfact / convfact + 1) + << endl; + } } } } @@ -623,7 +660,7 @@ namespace Carpet { // Assert that all maps have one refinement level reflevels = 1; for (int m=0; m<maps; ++m) { - assert (vhh.at(m)->reflevels() == reflevels); + assert (vhh.AT(m)->reflevels() == reflevels); } } @@ -638,13 +675,13 @@ namespace Carpet { // Create one refinement level int const rl = 0; regss.resize(1); - vector<region_t> & regs = regss.at(rl); + vector<region_t> & regs = regss.AT(rl); if (CCTK_EQUALS (base_extents, "")) { // Default: one grid component covering everything region_t reg; - reg.extent = vhh.at(m)->baseextents.at(0).at(0); + reg.extent = vhh.AT(m)->baseextents.AT(0).AT(0); reg.outer_boundaries = b2vect (bvect (true)); reg.map = m; regs.push_back (reg); @@ -677,8 +714,8 @@ namespace Carpet { for (size_t n=0; n<exts.size(); ++n) { region_t reg; - reg.extent = exts.at(n); - reg.outer_boundaries = xpose(obs.at(n)); + reg.extent = exts.AT(n); + reg.outer_boundaries = xpose(obs.AT(n)); reg.map = m; regs.push_back (reg); } @@ -711,17 +748,17 @@ namespace Carpet { assert (gdata.dim == dim); // Set up one refinement level - groupdata.at(group).activetimelevels.resize(mglevels); + groupdata.AT(group).activetimelevels.resize(mglevels); for (int ml=0; ml<mglevels; ++ml) { - groupdata.at(group).activetimelevels.at(ml).resize(1); + groupdata.AT(group).activetimelevels.AT(ml).resize(1); } // Grid function groups use the global grid descriptors - arrdata.at(group).resize(maps); + arrdata.AT(group).resize(maps); for (int m=0; m<maps; ++m) { - arrdata.at(group).at(m).hh = vhh.at(m); - arrdata.at(group).at(m).dd = vdd.at(m); - arrdata.at(group).at(m).tt = vtt.at(m); + arrdata.AT(group).AT(m).hh = vhh.AT(m); + arrdata.AT(group).AT(m).dd = vdd.AT(m); + arrdata.AT(group).AT(m).tt = vtt.AT(m); } break; @@ -735,13 +772,13 @@ namespace Carpet { assert (gdata.dim >= 0 and gdata.dim <= dim); // Use only one refinement level for grid arrays - groupdata.at(group).activetimelevels.resize(mglevels); + groupdata.AT(group).activetimelevels.resize(mglevels); for (int ml=0; ml<mglevels; ++ml) { - groupdata.at(group).activetimelevels.at(ml).resize(1); + groupdata.AT(group).activetimelevels.AT(ml).resize(1); } // Use only one map for grid arrays - arrdata.at(group).resize(1); + arrdata.AT(group).resize(1); ivect sizes; i2vect ghosts; @@ -788,33 +825,33 @@ namespace Carpet { ivect const str(1); ibbox const baseext(lb, ub, str); vector <vector <ibbox> > baseexts (1); - baseexts.at(0).resize (1); - baseexts.at(0).at(0) = baseext; + baseexts.AT(0).resize (1); + baseexts.AT(0).AT(0) = baseext; i2vect const nboundaryzones(0); // One refinement level vector<int> grouptimereffacts(1); - grouptimereffacts.at(0) = 1; + grouptimereffacts.AT(0) = 1; vector<ivect> groupspacereffacts(1); - groupspacereffacts.at(0) = ivect(1); + groupspacereffacts.AT(0) = ivect(1); // There is only one map - int const m=0; + int const m = 0; - arrdata.at(group).at(m).hh = + arrdata.AT(group).AT(m).hh = new gh (groupspacereffacts, vertex_centered, convergence_factor, vertex_centered, baseexts, nboundaryzones); i2vect const buffers = i2vect (0); int const my_prolongation_order_space = 0; - arrdata.at (group).at(m).dd = - new dh (*arrdata.at (group).at(m).hh, + arrdata.AT(group).AT(m).dd = + new dh (*arrdata.AT(group).AT(m).hh, ghosts, buffers, my_prolongation_order_space); CCTK_REAL const basedelta = 1.0; - arrdata.at (group).at(m).tt = - new th (*arrdata.at (group).at(m).hh, grouptimereffacts, basedelta); + arrdata.AT(group).AT(m).tt = + new th (*arrdata.AT(group).AT(m).hh, grouptimereffacts, basedelta); } @@ -826,15 +863,26 @@ namespace Carpet { ivect const & convpowers, ivect const & convoffsets) { +#if 0 + // Do not set up anything for groups that have zero variables + // TODO: To do this, need to change modes.cc to provide illegal + // entries for GroupDynamicData + int const nvars = CCTK_NumVarsInGroupI (group); + assert (nvars >= 0); + if (nvars == 0) return; +#endif + // Set refinement structure for scalars and arrays vector<region_t> superregs(1); int const m = 0; int const rl = 0; - int const c = 0; - superregs.at(c).extent = - arrdata.at(group).at(m).hh->baseextents.at(rl).at(c); - superregs.at(c).outer_boundaries = b2vect(true); - superregs.at(c).map = m; + { + int const c = 0; + superregs.AT(c).extent = + arrdata.AT(group).AT(m).hh->baseextents.AT(rl).AT(c); + superregs.AT(c).outer_boundaries = b2vect(true); + superregs.AT(c).map = m; + } vector<region_t> regs; // Split it into components, one for each processor @@ -871,7 +919,7 @@ namespace Carpet { region_t empty; empty.extent = ebox; empty.processor = c; - regs.at(c) = empty; + regs.AT(c) = empty; } } } @@ -881,21 +929,21 @@ namespace Carpet { int const nprocs = CCTK_nProcs (cctkGH); vector<bool> used (nprocs, false); for (int c=0; c<nprocs; ++c) { - int const p = regs.at(c).processor; + int const p = regs.AT(c).processor; assert (p >= 0 and p < nprocs); - assert (not used.at(p)); - used.at(p) = true; + assert (not used.AT(p)); + used.AT(p) = true; } for (int c=0; c<nprocs; ++c) { - assert (used.at(c)); + assert (used.AT(c)); } } // Only one refinement level vector<vector<region_t> > superregss(1); - superregss.at(rl) = superregs; + superregss.AT(rl) = superregs; vector<vector<region_t> > regss(1); - regss.at(rl) = regs; + regss.AT(rl) = regs; // Create all multigrid levels vector<vector<vector<region_t> > > regsss (mglevels); @@ -906,32 +954,31 @@ namespace Carpet { offset[0][d] = 0; offset[1][d] = convoffsets[d]; } - regsss.at(0) = regss; + regsss.AT(0) = regss; for (int ml=1; ml<mglevels; ++ml) { - int const rl = 0; - for (int c=0; c<int(regss.at(rl).size()); ++c) { + for (int c=0; c<int(regss.AT(rl).size()); ++c) { // this base ivect const baselo = ivect(0); ivect const baselo1 = baselo; // next finer grid - ivect const flo = regsss.at(ml-1).at(rl).at(c).extent.lower(); - ivect const fhi = regsss.at(ml-1).at(rl).at(c).extent.upper(); - ivect const fstr = regsss.at(ml-1).at(rl).at(c).extent.stride(); + ivect const flo = regsss.AT(ml-1).AT(rl).AT(c).extent.lower(); + ivect const fhi = regsss.AT(ml-1).AT(rl).AT(c).extent.upper(); + ivect const fstr = regsss.AT(ml-1).AT(rl).AT(c).extent.stride(); // this grid ivect const str = fstr * mgfact1; ivect const lo = flo + - either (regsss.at(ml-1).at(rl).at(c).outer_boundaries[0], + either (regsss.AT(ml-1).AT(rl).AT(c).outer_boundaries[0], + (offset[0] - mgfact1 * offset[0]) * fstr, ivect(0)); ivect const hi = fhi + - either (regsss.at(ml-1).at(rl).at(c).outer_boundaries[1], + either (regsss.AT(ml-1).AT(rl).AT(c).outer_boundaries[1], - (offset[1] - mgfact1 * offset[1]) * fstr, ivect(0)); ivect const lo1 = baselo1 + (lo - baselo1 + str - 1) / str * str; ivect const hi1 = lo1 + (hi - lo1) / str * str; - regsss.at(ml).at(rl).at(c) = regsss.at(ml-1).at(rl).at(c); - regsss.at(ml).at(rl).at(c).extent = ibbox(lo1, hi1, str); + regsss.AT(ml).AT(rl).AT(c) = regsss.AT(ml-1).AT(rl).AT(c); + regsss.AT(ml).AT(rl).AT(c).extent = ibbox(lo1, hi1, str); } } @@ -940,8 +987,9 @@ namespace Carpet { char * const groupname = CCTK_GroupName (group); assert (groupname); Checkpoint ("Recomposing grid array group \"%s\"...", groupname); - arrdata.at(group).at(0).hh->regrid (superregss, regsss); - arrdata.at(group).at(0).hh->recompose (0, false); + arrdata.AT(group).AT(0).hh->regrid (superregss, regsss, false); + arrdata.AT(group).AT(0).hh->recompose (0, false); + arrdata.AT(group).AT(0).hh->regrid_free (false); Checkpoint ("Done recomposing grid array group \"%s\".", groupname); free (groupname); } @@ -957,25 +1005,25 @@ namespace Carpet { DECLARE_CCTK_PARAMETERS; // Initialise group information - groupdata.at(group).info.dim = gdata.dim; - groupdata.at(group).info.gsh = new int [dim]; - groupdata.at(group).info.lsh = new int [dim]; - groupdata.at(group).info.lbnd = new int [dim]; - groupdata.at(group).info.ubnd = new int [dim]; - groupdata.at(group).info.bbox = new int [2*dim]; - groupdata.at(group).info.nghostzones = new int [dim]; - - groupdata.at(group).transport_operator = + groupdata.AT(group).info.dim = gdata.dim; + groupdata.AT(group).info.gsh = new int [dim]; + groupdata.AT(group).info.lsh = new int [dim]; + groupdata.AT(group).info.lbnd = new int [dim]; + groupdata.AT(group).info.ubnd = new int [dim]; + groupdata.AT(group).info.bbox = new int [2*dim]; + groupdata.AT(group).info.nghostzones = new int [dim]; + + groupdata.AT(group).transport_operator = get_transport_operator (cctkGH, group, gdata); - groupdata.at(group).info.activetimelevels = 0; + groupdata.AT(group).info.activetimelevels = 0; // Initialise group variables - for (size_t m=0; m<arrdata.at(group).size(); ++m) { + for (size_t m=0; m<arrdata.AT(group).size(); ++m) { - arrdata.at(group).at(m).data.resize(CCTK_NumVarsInGroupI(group)); - for (size_t var=0; var<arrdata.at(group).at(m).data.size(); ++var) { - arrdata.at(group).at(m).data.at(var) = 0; + arrdata.AT(group).AT(m).data.resize(CCTK_NumVarsInGroupI(group)); + for (size_t var=0; var<arrdata.AT(group).AT(m).data.size(); ++var) { + arrdata.AT(group).AT(m).data.AT(var) = 0; } } @@ -989,14 +1037,14 @@ namespace Carpet { // Allocate level times leveltimes.resize (mglevels); for (int ml=0; ml<mglevels; ++ml) { - leveltimes.at(ml).resize (1); + leveltimes.AT(ml).resize (1); } // Allocate orgin and spacings origin_space.resize (maps); delta_space.resize (maps); for (int m=0; m<maps; ++m) { - origin_space.at(m).resize (mglevels); + origin_space.AT(m).resize (mglevels); } // Current state @@ -1009,11 +1057,12 @@ namespace Carpet { } // Set up things as if in local mode - mglevel = 0; - reflevel = 0; - mc_grouptype = CCTK_GF; - map = 0; - component = 0; + mglevel = 0; + reflevel = 0; + mc_grouptype = CCTK_GF; + map = 0; + component = 0; + local_component = -1; // Leave everything, so that everything is set up correctly leave_local_mode (cctkGH); @@ -1402,17 +1451,36 @@ namespace Carpet { // Sanity check assert (all (npoints <= INT_MAX)); +#if 0 int max = INT_MAX; for (int d=0; d<dim; ++d) { assert (npoints[d] <= max); max /= npoints[d]; } +#endif + { + CCTK_REAL const total_npoints = prod(rvect(npoints)); + CCTK_REAL const size_max = numeric_limits<ibbox::size_type>::max(); + if (total_npoints > size_max) { + CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING, + "The domain for map %d contains %g grid points. This number is larger than the maximum number supported by Carpet (%g).", + m, double(total_npoints), double(size_max)); + } + CCTK_REAL const int_max = numeric_limits<int>::max(); + if (total_npoints > int_max) { + if (dist::rank() == 0) { + CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, + "The domain for map %d contains %g grid points. This number is larger than the maximum number that can be represented as an integer (%g). This can lead to strange problems in thorns which try to calculate the total number of grid points.", + m, double(total_npoints), double(int_max)); + } + } + } // Save domain specification domainspecs.resize(maps); - domainspecs.at(m).exterior_min = exterior_min; - domainspecs.at(m).exterior_max = exterior_max; - domainspecs.at(m).npoints = npoints; + domainspecs.AT(m).exterior_min = exterior_min; + domainspecs.AT(m).exterior_max = exterior_max; + domainspecs.AT(m).npoints = npoints; } @@ -1432,26 +1500,53 @@ namespace Carpet { assert (baseextents.empty()); baseextents.resize (num_convergence_levels); for (int ml=0; ml<num_convergence_levels; ++ml) { - baseextents.at(ml).resize (maxreflevels); + baseextents.AT(ml).resize (maxreflevels); for (int rl=0; rl<maxreflevels; ++rl) { if (ml == 0) { if (rl == 0) { // Use base extent - baseextents.at(ml).at(rl) = baseextent; + baseextents.AT(ml).AT(rl) = baseextent; } else { // Refine next coarser refinement level - assert (refcentering == vertex_centered); - assert (not any (any (is_staggered))); - i2vect const bnd_shift = - (nboundaryzones - 1) * i2vect (not is_internal) + shiftout; - ibbox const & cbox = baseextents.at(ml).at(rl-1); - ibbox const cbox_phys = cbox.expand (- bnd_shift); - assert (all (baseextent.stride() % spacereffacts.at(rl-1) == 0)); - ivect const fstride = baseextent.stride() / spacereffacts.at(rl); - ibbox const fbox_phys = - ibbox (cbox_phys.lower(), cbox_phys.upper(), fstride); - ibbox const fbox = fbox_phys.expand (bnd_shift); - baseextents.at(ml).at(rl) = fbox; + if (refcentering == vertex_centered) { + ibbox const & cbox = baseextents.AT(ml).AT(rl-1); + assert (not any (any (is_staggered))); + i2vect const bnd_shift = + (nboundaryzones - 1) * i2vect (not is_internal) + shiftout; + ibbox const cbox_phys = cbox.expand (- bnd_shift); + assert (all (baseextent.stride() % spacereffacts.AT(rl-1) == 0)); + ivect const fstride = baseextent.stride() / spacereffacts.AT(rl); + ibbox const fbox_phys = + ibbox (cbox_phys.lower(), cbox_phys.upper(), fstride); + ibbox const fbox = fbox_phys.expand (bnd_shift); + baseextents.AT(ml).AT(rl) = fbox; + } else { + ibbox const & cbox = baseextents.AT(ml).AT(rl-1); + assert (all (all (is_staggered))); + ivect const cstride = cbox.stride(); + assert (all (cstride % 2 == 0)); + i2vect const bnd_shift_cstride = + + (cstride / 2 - i2vect (is_internal) * cstride) + + (nboundaryzones - 1) * i2vect (not is_internal) * cstride + + shiftout * cstride; + ibbox const cbox_phys + (cbox.lower() - (- bnd_shift_cstride[0]), + cbox.upper() + (- bnd_shift_cstride[1]), + cbox.stride()); + assert (all (baseextent.stride() % spacereffacts.AT(rl-1) == 0)); + ivect const fstride = baseextent.stride() / spacereffacts.AT(rl); + ibbox const fbox_phys = + ibbox (cbox_phys.lower(), cbox_phys.upper(), fstride); + assert (all (cstride % fstride == 0)); + assert (all (all (bnd_shift_cstride % (cstride / fstride) == 0))); + i2vect const bnd_shift_fstride = + bnd_shift_cstride / (cstride / fstride); + ibbox const fbox + (fbox_phys.lower() - bnd_shift_fstride[0], + fbox_phys.upper() + bnd_shift_fstride[1], + fbox_phys.stride()); + baseextents.AT(ml).AT(rl) = fbox; + } } } else { // Coarsen next finer convergence level @@ -1459,13 +1554,13 @@ namespace Carpet { assert (not any (any (is_staggered))); i2vect const bnd_shift = (nboundaryzones - 1) * i2vect (not is_internal) + shiftout; - ibbox const & fbox = baseextents.at(ml-1).at(rl); + ibbox const & fbox = baseextents.AT(ml-1).AT(rl); ibbox const fbox_phys = fbox.expand (- bnd_shift); ivect const cstride = fbox.stride() * int (convergence_factor); ibbox const cbox_phys = ibbox (fbox_phys.lower(), fbox_phys.upper(), cstride); ibbox const cbox = cbox_phys.expand (bnd_shift); - baseextents.at(ml).at(rl) = cbox; + baseextents.AT(ml).AT(rl) = cbox; } } } @@ -1493,10 +1588,10 @@ namespace Carpet { vector<vector<region_t> > regss(1); // Distribute onto the processors - SplitRegions (cctkGH, superregsss.at(m).at(rl), regss.at(rl)); + SplitRegions (cctkGH, superregsss.AT(m).AT(rl), regss.AT(rl)); // Create all multigrid levels - MakeMultigridBoxes (cctkGH, m, regss, regssss.at(m)); + MakeMultigridBoxes (cctkGH, m, regss, regssss.AT(m)); } // for m } else { @@ -1506,7 +1601,7 @@ namespace Carpet { vector<vector<region_t> > superregss(maps); for (int m=0; m<maps; ++m) { - superregss.at(m) = superregsss.at(m).at(rl); + superregss.AT(m) = superregsss.AT(m).AT(rl); } vector<vector<region_t> > regss(maps); @@ -1514,9 +1609,9 @@ namespace Carpet { vector<vector<vector<region_t> > > regsss(maps); for (int m=0; m<maps; ++m) { - superregsss.at(m).at(rl) = superregss.at(m); - regsss.at(m).resize(1); - regsss.at(m).at(rl) = regss.at(m); + superregsss.AT(m).AT(rl) = superregss.AT(m); + regsss.AT(m).resize(1); + regsss.AT(m).AT(rl) = regss.AT(m); } // Create all multigrid levels @@ -1583,8 +1678,7 @@ namespace Carpet { ivect baseconvpowers = convpowers * int(basemglevel); rvect real_sizes = - (((rvect (sizes) - - rvect (convoffsets)) + (((rvect (sizes) - rvect (convoffsets)) / ipow (rvect(convergence_factor), baseconvpowers)) + rvect (convoffsets)); // Do not modify extra dimensions @@ -1720,8 +1814,8 @@ namespace Carpet { int num_gf_vars = 0; vector<int> num_array_groups(dim+1), num_array_vars(dim+1); for (int d=0; d<=dim; ++d) { - num_array_groups.at(d) = 0; - num_array_vars.at(d) = 0; + num_array_groups.AT(d) = 0; + num_array_vars.AT(d) = 0; } for (int group=0; group<CCTK_NumGroups(); ++group) { @@ -1737,8 +1831,8 @@ namespace Carpet { case CCTK_SCALAR: case CCTK_ARRAY: assert (gdata.dim<=dim); - num_array_groups.at(gdata.dim) += 1; - num_array_vars.at(gdata.dim) += gdata.numvars * gdata.numtimelevels; + num_array_groups.AT(gdata.dim) += 1; + num_array_vars.AT(gdata.dim) += gdata.numvars * gdata.numtimelevels; break; default: assert (0); @@ -1751,11 +1845,11 @@ namespace Carpet { num_gf_vars, num_gf_groups); CCTK_VInfo (CCTK_THORNSTRING, " There are %d grid scalars in %d groups", - num_array_vars.at(0), num_array_groups.at(0)); + num_array_vars.AT(0), num_array_groups.AT(0)); for (int d=1; d<=dim; ++d) { CCTK_VInfo (CCTK_THORNSTRING, " There are %d %d-dimensional grid arrays in %d groups", - num_array_vars.at(d), d, num_array_groups.at(d)); + num_array_vars.AT(d), d, num_array_groups.AT(d)); } CCTK_VInfo (CCTK_THORNSTRING, " (The number of variables counts all time levels)"); @@ -1770,13 +1864,31 @@ namespace Carpet { { assert (group>=0 and group<CCTK_NumGroups()); - if (CCTK_GroupTypeI(group) != CCTK_GF) { + if (gdata.grouptype != CCTK_GF) { // Ignore everything but true grid functions - return op_error; + return op_copy; } bool const can_transfer = can_transfer_variable_type (cctkGH, group, gdata); + // Catch a common error (using the tag "prolongate" instead of + // "prolongation") + { + int const prolong_length = Util_TableGetString + (gdata.tagstable, 0, NULL, "Prolongate"); + if (prolong_length >= 0) { + char * const groupname = CCTK_GroupName (group); + CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING, + "Group \"%s\" contains the illegal tag \"Prolongate\". (Did you mean \"Prolongation\" instead?)", + groupname); + free (groupname); + } else if (prolong_length == UTIL_ERROR_TABLE_NO_SUCH_KEY) { + // good -- do nothing + } else { + assert (0); + } + } + // Get prolongation method char prolong_string[1000]; bool have_prolong_string = false; @@ -1861,6 +1973,7 @@ namespace Carpet { if (not have_prolong_string) { if (can_transfer) { // Use the default +#if 0 if (gdata.numtimelevels == 1) { // Only one time level: char * const groupname = CCTK_GroupName (group); @@ -1873,6 +1986,8 @@ namespace Carpet { // Several time levels: use the default return op_Lagrange; } +#endif + return op_Lagrange; } else { if (gdata.grouptype == CCTK_GF) { char * const groupname = CCTK_GroupName (group); @@ -1895,6 +2010,8 @@ namespace Carpet { return op_sync; } else if (CCTK_Equals(prolong_string, "sync")) { return op_sync; + } else if (CCTK_Equals(prolong_string, "restrict")) { + return op_restrict; } else if (CCTK_Equals(prolong_string, "copy")) { return op_copy; } else if (CCTK_Equals(prolong_string, "Lagrange")) { @@ -1903,6 +2020,8 @@ namespace Carpet { return op_ENO; } else if (CCTK_Equals(prolong_string, "WENO")) { return op_WENO; + } else if (CCTK_Equals(prolong_string, "Lagrange_monotone")) { + return op_Lagrange_monotone; } else { char * const groupname = CCTK_GroupName (group); CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING, @@ -2170,7 +2289,7 @@ namespace Carpet { DECLARE_CCTK_PARAMETERS; int const prolongation_stencil_size - = vdd.at(m)->prolongation_stencil_size(); + = vdd.AT(m)->prolongation_stencil_size(); int const min_nghosts = ((prolongation_stencil_size + refinement_factor - 1) / (refinement_factor - 1)); diff --git a/Carpet/Carpet/src/Shutdown.cc b/Carpet/Carpet/src/Shutdown.cc index 4edf04374..6da0daf3e 100644 --- a/Carpet/Carpet/src/Shutdown.cc +++ b/Carpet/Carpet/src/Shutdown.cc @@ -1,13 +1,13 @@ #include <cstdio> #include <cstdlib> -#include "cctk.h" -#include "cctk_Parameters.h" +#include <cctk.h> +#include <cctk_Parameters.h> -#include "dist.hh" +#include <dist.hh> -#include "carpet.hh" -#include "Timers.hh" +#include <carpet.hh> +#include <Timers.hh> @@ -52,6 +52,15 @@ namespace Carpet { } END_REVERSE_MGLEVEL_LOOP; } // for rl + // Stop all timers before shutdown, since timers may rely on data + // structures which are destroyed during shutdown + int const ierr = CCTK_TimerStop ("CCTK total time"); + assert (not ierr); + timer.stop(); + if (output_timers_every > 0) { + TimerSet::writeData (cctkGH, timer_file); + } + BEGIN_REVERSE_MGLEVEL_LOOP(cctkGH) { do_early_global_mode = true; do_late_global_mode = true; @@ -65,10 +74,6 @@ namespace Carpet { CCTK_ScheduleTraverse ("CCTK_SHUTDOWN", cctkGH, CallFunction); } END_REVERSE_MGLEVEL_LOOP; - timer.stop(); - if (output_timers_every > 0) { - TimerSet::writeData (cctkGH, timer_file); - } // earlier checkpoint before finalising MPI Waypoint ("Done with shutdown"); diff --git a/Carpet/Carpet/src/Storage.cc b/Carpet/Carpet/src/Storage.cc index e038a261f..636247d20 100644 --- a/Carpet/Carpet/src/Storage.cc +++ b/Carpet/Carpet/src/Storage.cc @@ -1,14 +1,15 @@ #include <cassert> #include <cstdlib> -#include "cctk.h" -#include "cctk_Parameters.h" +#include <cctk.h> +#include <cctk_Parameters.h> -#include "dh.hh" -#include "gf.hh" -#include "operators.hh" +#include <defs.hh> +#include <dh.hh> +#include <gf.hh> +#include <operators.hh> -#include "carpet.hh" +#include <carpet.hh> @@ -94,16 +95,16 @@ namespace Carpet { // Record previous number of allocated time levels if (status) { // Note: This remembers only the last level - status[n] = groupdata.at(group).activetimelevels.at(ml).at(rl); + status[n] = groupdata.AT(group).activetimelevels.AT(ml).AT(rl); } // Only do something if the number of time levels actually // needs to be changed -- do nothing otherwise const bool do_increase - = inc and timelevels[n] > groupdata.at(group).activetimelevels.at(ml).at(rl); + = inc and timelevels[n] > groupdata.AT(group).activetimelevels.AT(ml).AT(rl); const bool do_decrease - = not inc and timelevels[n] < groupdata.at(group).activetimelevels.at(ml).at(rl); + = not inc and timelevels[n] < groupdata.AT(group).activetimelevels.AT(ml).AT(rl); if (do_increase or do_decrease) { if (not can_do) { @@ -127,13 +128,13 @@ namespace Carpet { if (gp.grouptype == CCTK_GF) { assert ((map == -1 or maps == 1) and (component == -1 - or vhh.at(0)->local_components(reflevel) == 1)); + or vhh.AT(0)->local_components(reflevel) == 1)); } // Set the new number of active time levels - groupdata.at(group).activetimelevels.at(ml).at(rl) = timelevels[n]; + groupdata.AT(group).activetimelevels.AT(ml).AT(rl) = timelevels[n]; - for (int m=0; m<(int)arrdata.at(group).size(); ++m) { + for (int m=0; m<(int)arrdata.AT(group).size(); ++m) { for (int var=0; var<gp.numvars; ++var) { #ifdef CCTK_HAVE_CONTIGUOUS_GROUPS bool const contiguous = gp.contiguous; @@ -152,19 +153,19 @@ namespace Carpet { assert (vectorlength>0 and vectorlength<=gp.numvars); ggf* const vectorleader = (vectorindex>0 - ? arrdata.at(group).at(m).data.at(var - vectorindex) + ? arrdata.AT(group).AT(m).data.AT(var - vectorindex) : NULL); const int varindex = firstvarindex + var; #warning "TODO: allocate these in SetupGH, and after recomposing" - if (not arrdata.at(group).at(m).data.at(var)) { + if (not arrdata.AT(group).AT(m).data.AT(var)) { switch (gp.vartype) { #define TYPECASE(N,T) \ case N: \ - arrdata.at(group).at(m).data.at(var) = new gf<T> \ + arrdata.AT(group).AT(m).data.AT(var) = new gf<T> \ (varindex, \ - groupdata.at(group).transport_operator, \ - *arrdata.at(group).at(m).tt, \ - *arrdata.at(group).at(m).dd, \ + groupdata.AT(group).transport_operator, \ + *arrdata.AT(group).AT(m).tt, \ + *arrdata.AT(group).AT(m).dd, \ prolongation_order_time, \ vectorlength, vectorindex, (gf<T>*)vectorleader); \ break; @@ -175,18 +176,17 @@ namespace Carpet { } // switch gp.vartype } // if not allocated - arrdata.at(group).at(m).data.at(var)->set_timelevels + arrdata.AT(group).AT(m).data.AT(var)->set_timelevels (ml, rl, timelevels[n]); // Set the data pointers for grid arrays if (gp.grouptype != CCTK_GF) { assert (rl==0 and m==0); - int const c = CCTK_MyProc(cgh); for (int tl=0; tl<gp.numtimelevels; ++tl) { cgh->data[varindex][tl] - = (tl < groupdata.at(group).activetimelevels.at(ml).at(rl) - ? ((*arrdata.at(group).at(m).data.at(var)) - (tl, 0, c, 0)->storage()) + = (tl < groupdata.AT(group).activetimelevels.AT(ml).AT(rl) + ? ((*arrdata.AT(group).AT(m).data.AT(var)) + (tl, 0, 0, 0)->storage()) : NULL); } } // if grouptype != GF @@ -202,7 +202,7 @@ namespace Carpet { // Record current number of time levels // Note: This adds the time levels of all refinement levels total_num_timelevels - += groupdata.at(group).activetimelevels.at(ml).at(rl); + += groupdata.AT(group).activetimelevels.AT(ml).AT(rl); } // for rl } // for ml @@ -292,8 +292,9 @@ namespace Carpet { if (groupdata.size() == 0) return -3; int const rl = grouptype == CCTK_GF ? reflevel : 0; // Return whether storage is allocated - assert (groupdata.at(group).activetimelevels.at(mglevel).at(rl) != deadbeef); - return groupdata.at(group).activetimelevels.at(mglevel).at(rl) > 0; + CCTK_INT const deadbeef = get_deadbeef(); + assert (groupdata.AT(group).activetimelevels.AT(mglevel).AT(rl) != deadbeef); + return groupdata.AT(group).activetimelevels.AT(mglevel).AT(rl) > 0; } @@ -318,12 +319,12 @@ namespace Carpet { return &error; // global or level mode for a GF } - const int gpdim = groupdata.at(group).info.dim; + const int gpdim = groupdata.AT(group).info.dim; assert (dir>=0 and dir<gpdim); if (CCTK_QueryGroupStorageI(cgh, group)) { - return &groupdata.at(group).info.lsh[dir]; + return &groupdata.AT(group).info.lsh[dir]; } else { @@ -337,8 +338,19 @@ namespace Carpet { int GroupDynamicData (const cGH* cgh, int group, cGroupDynamicData* data) { + // Return values: + // 0 for success + // -1 if given pointer to data structure is NULL + // -3 if given GH pointer is invalid + // (-77 if group has zero variables) + // -78 if group does not exist + if (not cgh) return -3; + if (not (group>=0 and group<CCTK_NumGroups())) return -78; + if (not data) return -1; + assert (cgh); assert (group>=0 and group<CCTK_NumGroups()); - *data = groupdata.at(group).info; + assert (data); + *data = groupdata.AT(group).info; return 0; } @@ -358,12 +370,13 @@ namespace Carpet { check (not CCTK_GroupData (group, & gp)); if (gp.grouptype == CCTK_GF) { - if (groupdata.at(group).transport_operator != op_none and - groupdata.at(group).transport_operator != op_sync and - groupdata.at(group).transport_operator != op_copy) + if (groupdata.AT(group).transport_operator != op_none and + groupdata.AT(group).transport_operator != op_sync and + groupdata.AT(group).transport_operator != op_restrict and + groupdata.AT(group).transport_operator != op_copy) { - if (groupdata.at(group).activetimelevels.at(ml).at(rl) != 0 and - (groupdata.at(group).activetimelevels.at(ml).at(rl) < + if (groupdata.AT(group).activetimelevels.AT(ml).AT(rl) != 0 and + (groupdata.AT(group).activetimelevels.AT(ml).AT(rl) < prolongation_order_time+1)) { static vector<bool> didwarn; @@ -371,9 +384,9 @@ namespace Carpet { if ((int)didwarn.size() < numgroups) { didwarn.resize (numgroups, false); } - if (not didwarn.at(group)) { + if (not didwarn.AT(group)) { // Warn only once per group - didwarn.at(group) = true; + didwarn.AT(group) = true; char * const groupname = CCTK_GroupName (group); CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, "There are not enough time levels for the desired temporal prolongation order in the grid function group \"%s\". With Carpet::prolongation_order_time=%d, you need at least %d time levels.", diff --git a/Carpet/Carpet/src/Timers.cc b/Carpet/Carpet/src/Timers.cc index 265c2cd4c..c279bf0cc 100644 --- a/Carpet/Carpet/src/Timers.cc +++ b/Carpet/Carpet/src/Timers.cc @@ -3,10 +3,9 @@ #include <cstring> #include <list> -#include "cctk.h" -#include "cctk_Parameters.h" - -#include "util_String.h" +#include <cctk.h> +#include <cctk_Parameters.h> +#include <util_String.h> #if HAVE_UNISTD_H # include <fcntl.h> @@ -15,7 +14,7 @@ #include <defs.hh> -#include "Timers.hh" +#include <Timers.hh> @@ -236,6 +235,8 @@ namespace Carpet { case val_double: printf (" %g", timer->vals[i].val.d); break; + case val_none: + break; default: assert (0); } @@ -245,4 +246,27 @@ namespace Carpet { if (was_running) start(); } + + + // Output (debug) messages that a timer is starting or stopping + void + Timer::msgStart () + const + { + DECLARE_CCTK_PARAMETERS; + if (timers_verbose) { + CCTK_VInfo (CCTK_THORNSTRING, "Timer \"%s\" starting", name()); + } + } + + void + Timer::msgStop () + const + { + DECLARE_CCTK_PARAMETERS; + if (timers_verbose) { + CCTK_VInfo (CCTK_THORNSTRING, "Timer \"%s\" stopping", name()); + } + } + } // namespace Carpet diff --git a/Carpet/Carpet/src/Timers.hh b/Carpet/Carpet/src/Timers.hh index 2c2543168..af887cb69 100644 --- a/Carpet/Carpet/src/Timers.hh +++ b/Carpet/Carpet/src/Timers.hh @@ -1,6 +1,7 @@ +#include <iostream> #include <list> -#include "cctk.h" +#include <cctk.h> @@ -79,6 +80,7 @@ namespace Carpet { void start () { + msgStart (); running = true; CCTK_TimerStartI (handle); } @@ -89,6 +91,7 @@ namespace Carpet { { CCTK_TimerStopI (handle); running = false; + msgStop (); } // Reset the timer @@ -107,6 +110,32 @@ namespace Carpet { void printData (); + private: + + // Output (debug) messages that a timer is starting or stopping + void + msgStart () + const; + + void + msgStop () + const; + }; + + + // Macros for using timers in a convenient manner + +#define TIMING_BEGIN(name) \ + { \ + static Carpet::Timer timer (name); \ + timer.start(); \ + { + +#define TIMING_END \ + } \ + timer.stop(); \ +} while (0) + } // namespace Carpet diff --git a/Carpet/Carpet/src/Timing.cc b/Carpet/Carpet/src/Timing.cc index 6c4102733..2fd24f3bd 100644 --- a/Carpet/Carpet/src/Timing.cc +++ b/Carpet/Carpet/src/Timing.cc @@ -3,9 +3,9 @@ #include <cmath> #include <cstdlib> -#include "cctk.h" -#include "cctk_Arguments.h" -#include "cctk_Parameters.h" +#include <cctk.h> +#include <cctk_Arguments.h> +#include <cctk_Parameters.h> // IRIX wants this before <time.h> #if HAVE_SYS_TYPES_H @@ -27,10 +27,10 @@ # include <unistd.h> #endif -#include "defs.hh" -#include "dist.hh" +#include <defs.hh> +#include <dist.hh> -#include "carpet.hh" +#include <carpet.hh> @@ -77,17 +77,17 @@ namespace Carpet { for (int m = 0; m < maps; ++ m) { assert (reflevel >= 0); int const rl = reflevel; - for (int c = 0; c < vhh.at(m)->components(rl); ++ c) { + for (int c = 0; c < vhh.AT(m)->components(rl); ++ c) { assert (mglevel >= 0); int const ml = mglevel; // Base region - ibbox const ext = vhh.at(m)->extent(ml,rl,c); + ibbox const ext = vhh.AT(m)->extent(ml,rl,c); // Count the grid points CCTK_REAL const domainsize = ext.size(); - if (vhh.at(m)->is_local (rl, c)) { + if (vhh.AT(m)->is_local (rl, c)) { local_num_grid_points += domainsize; } global_num_grid_points += domainsize; @@ -117,7 +117,11 @@ namespace Carpet { + // Time at which the simulation started + CCTK_REAL startup_walltime; // in seconds + // Time at which the evolution started + bool in_evolution = false; CCTK_REAL initial_walltime; // in seconds CCTK_REAL initial_phystime; @@ -136,13 +140,19 @@ namespace Carpet { { DECLARE_CCTK_ARGUMENTS; - * physical_time_per_hour = 0.0; + startup_walltime = get_walltime(); + + * physical_time_per_hour = 0.0; + * current_physical_time_per_hour = 0.0; * time_total = 0.0; + * time_evolution = 0.0; * time_computing = 0.0; * time_communicating = 0.0; * time_io = 0.0; + * evolution_steps_count = 0.0; + * local_grid_points_per_second = 0.0; * total_grid_points_per_second = 0.0; * local_grid_point_updates_count = 0.0; @@ -171,10 +181,11 @@ namespace Carpet { // Begin timing (to be called after initialisation, just before the // main evolution begins) void - BeginTiming (cGH const * const cctkGH) + BeginTimingEvolution (cGH const * const cctkGH) { DECLARE_CCTK_ARGUMENTS; + in_evolution = true; initial_walltime = get_walltime(); initial_phystime = cctkGH->cctk_time; } @@ -184,15 +195,18 @@ namespace Carpet { // Take a step on the current refinement and multigrid level (to be // called when EVOL is scheduled) void - StepTiming (cGH const * const cctkGH) + StepTimingEvolution (cGH const * const cctkGH) { DECLARE_CCTK_ARGUMENTS; + assert (in_evolution); assert (timing_state == state_computing); CCTK_REAL local_updates, global_updates; current_level_updates (cctkGH, local_updates, global_updates); + ++ * evolution_steps_count; + * local_grid_point_updates_count += local_updates; * total_grid_point_updates_count += global_updates; @@ -266,7 +280,9 @@ namespace Carpet { assert (timing_state == state_computing); // Measure the elapsed time - * time_total = get_walltime() - initial_walltime; + double const walltime = get_walltime(); + * time_total = walltime - startup_walltime; + * time_evolution = in_evolution ? walltime - initial_walltime : 0.0; * time_computing = * time_total - (* time_communicating + * time_io); } @@ -327,12 +343,52 @@ namespace Carpet { UpdatePhysicalTimePerHour (cGH const * const cctkGH) { DECLARE_CCTK_ARGUMENTS; + DECLARE_CCTK_PARAMETERS; + + if (not in_evolution) { + * physical_time_per_hour = 0.0; + * current_physical_time_per_hour = 0.0; + return; + } + + static int last_iteration = -1; + static size_t num_samples = 0; + static CCTK_REAL last_physical_time; + static CCTK_REAL last_time_evolution; + assert (cctk_iteration > last_iteration); // expect progress // Calculate elapsed physical time CCTK_REAL const physical_time = cctkGH->cctk_time - initial_phystime; - // Calculate physical time per hour - * physical_time_per_hour = 3600.0 * physical_time / max (* time_total, eps); + // Calculate average physical time per hour + * physical_time_per_hour = + 3600.0 * physical_time / max (* time_evolution, eps); + + // Calculate current physical time per hour as moving average + if (last_iteration < 0) { + // No past data are available + * current_physical_time_per_hour = * physical_time_per_hour; + } else if (num_samples < 3 or + * time_evolution < 0.01 * timing_average_window_minutes * 60.0) + { + // Less than three previous samples are available, or less thatn + // one percent of a window of past data are available + * current_physical_time_per_hour = * physical_time_per_hour; + } else { + CCTK_REAL const window = + min (* time_evolution, timing_average_window_minutes * 60.0); + CCTK_REAL const alpha = + exp (- (* time_evolution - last_time_evolution) / window); + * current_physical_time_per_hour = + (1.0 - alpha) * * physical_time_per_hour + + ( alpha) * * current_physical_time_per_hour; + } + + // Remember last iteration + last_iteration = cctk_iteration; + ++ num_samples; + last_physical_time = physical_time; + last_time_evolution = * time_evolution; } @@ -357,7 +413,13 @@ namespace Carpet { DECLARE_CCTK_ARGUMENTS; CCTK_VInfo (CCTK_THORNSTRING, - "Total run time: %g h", double (* time_total / 3600.0)); + "Total run time: %g h (iteration %d)", + double (* time_total / 3600.0), + cctk_iteration); + CCTK_VInfo (CCTK_THORNSTRING, + "Total evolution time: %g h (%d steps)", + double (* time_evolution / 3600.0), + int (* evolution_steps_count)); CCTK_VInfo (CCTK_THORNSTRING, "(Comp, Comm, I/O) fractions = (%3.1f%%, %3.1f%%, %3.1f%%)", double (100.0 * * time_computing / @@ -461,7 +523,10 @@ namespace Carpet { DECLARE_CCTK_ARGUMENTS; CCTK_VInfo (CCTK_THORNSTRING, - "Physical time per hour: %g", + "Current physical time per hour: %g", + double (* current_physical_time_per_hour)); + CCTK_VInfo (CCTK_THORNSTRING, + "Average physical time per hour: %g", double (* physical_time_per_hour)); } @@ -479,25 +544,25 @@ namespace Carpet { << "Memory statistics:" << eol << " Grid hierarchy:" << eol; for (int m = 0; m < Carpet::maps; ++ m) { - cout << " gh[" << m << "]: " << PRINTMEM(*vhh.at(m)) << eol - << " dh[" << m << "]: " << PRINTMEM(*vdd.at(m)) << eol - << " th[" << m << "]: " << PRINTMEM(*vtt.at(m)) << eol; + cout << " gh[" << m << "]: " << PRINTMEM(*vhh.AT(m)) << eol + << " dh[" << m << "]: " << PRINTMEM(*vdd.AT(m)) << eol + << " th[" << m << "]: " << PRINTMEM(*vtt.AT(m)) << eol; } #if 0 for (int g = 0; g < (int)arrdata.size(); ++ g) { if (CCTK_GroupTypeI(g) != CCTK_GF) { char * const groupname = CCTK_GroupName(g); - for (int m = 0; m < (int)arrdata.at(g).size(); ++ m) { + for (int m = 0; m < (int)arrdata.AT(g).size(); ++ m) { cout << " Group " << groupname << ":" << eol - << " gh[" << m << "]: " << PRINTMEM(*arrdata.at(g).at(m).hh) << eol - << " dh[" << m << "]: " << PRINTMEM(*arrdata.at(g).at(m).dd) << eol - << " th[" << m << "]: " << PRINTMEM(*arrdata.at(g).at(m).tt) << eol; - for (int v = 0; v < (int)arrdata.at(g).at(m).data.size(); ++ v) { + << " gh[" << m << "]: " << PRINTMEM(*arrdata.AT(g).AT(m).hh) << eol + << " dh[" << m << "]: " << PRINTMEM(*arrdata.AT(g).AT(m).dd) << eol + << " th[" << m << "]: " << PRINTMEM(*arrdata.AT(g).AT(m).tt) << eol; + for (int v = 0; v < (int)arrdata.AT(g).AT(m).data.size(); ++ v) { char * const fullname = CCTK_FullName(CCTK_FirstVarIndexI(g)+v); cout << " Variable " << fullname << ":" << eol << " ggf[" << m << "]: "; - if (arrdata.at(g).at(m).data.at(v)) { - cout << PRINTMEM(*arrdata.at(g).at(m).data.at(v)); + if (arrdata.AT(g).AT(m).data.AT(v)) { + cout << PRINTMEM(*arrdata.AT(g).AT(m).data.AT(v)); } else { cout << "<null>"; } diff --git a/Carpet/Carpet/src/carpet.hh b/Carpet/Carpet/src/carpet.hh index 1a6ee0f3b..bbcb4296a 100644 --- a/Carpet/Carpet/src/carpet.hh +++ b/Carpet/Carpet/src/carpet.hh @@ -3,11 +3,11 @@ #include <vector> -#include "cctk.h" -#include "cctk_Arguments.h" -#include "cctk_Functions.h" +#include <cctk.h> +#include <cctk_Arguments.h> +#include <cctk_Functions.h> -#include "gh.hh" +#include <gh.hh> #include "carpet_public.hh" @@ -36,7 +36,7 @@ namespace Carpet { int CallFunction (void* function, cFunctionData* attribute, void* data); // Other functions - bool Regrid (cGH const * cctkGH, bool force_recompose); + bool Regrid (cGH const * cctkGH, bool force_recompose, bool do_init); void CycleTimeLevels (const cGH* cgh); void FlipTimeLevels (const cGH* cgh); @@ -52,8 +52,8 @@ namespace Carpet { allbutcurrenttime, alltimes }; - int min_timelevel (checktimes where, int num_tl); - int max_timelevel (checktimes where, int num_tl); + int min_timelevel (checktimes where, int num_tl, bool persistent) CCTK_ATTRIBUTE_CONST; + int max_timelevel (checktimes where, int num_tl, bool persistent) CCTK_ATTRIBUTE_CONST; void Poison (const cGH* cgh, checktimes where, int what = 0); void PoisonGroup (const cGH* cgh, int group, checktimes where); diff --git a/Carpet/Carpet/src/carpet_public.h b/Carpet/Carpet/src/carpet_public.h index ce2faaad5..20a265848 100644 --- a/Carpet/Carpet/src/carpet_public.h +++ b/Carpet/Carpet/src/carpet_public.h @@ -3,7 +3,7 @@ #include <mpi.h> -#include "cctk.h" +#include <cctk.h> @@ -76,7 +76,7 @@ namespace Carpet { }; - struct CarpetGH const * GetCarpetGH (const cGH * const cgh); + struct CarpetGH const * GetCarpetGH (const cGH * const cgh) CCTK_ATTRIBUTE_CONST; @@ -86,6 +86,16 @@ namespace Carpet { + /* Grid function access */ + CCTK_POINTER Carpet_VarDataPtrI (CCTK_POINTER_TO_CONST const cctkGH, + CCTK_INT const m, + CCTK_INT const rl, + CCTK_INT const c, + CCTK_INT const tl, + CCTK_INT const varindex); + + + /* Call a schedule group */ int CallScheduleGroup (cGH * const cgh, const char * const group); @@ -104,10 +114,10 @@ namespace Carpet { /* Helper functions */ - MPI_Comm CarpetMPIComm (void); - MPI_Datatype CarpetMPIDatatype (int vartype); - MPI_Datatype CarpetSimpleMPIDatatype (int vartype); - int CarpetSimpleMPIDatatypeLength (int vartype); + MPI_Comm CarpetMPIComm (void) CCTK_ATTRIBUTE_CONST; + MPI_Datatype CarpetMPIDatatype (int vartype) CCTK_ATTRIBUTE_CONST; + MPI_Datatype CarpetSimpleMPIDatatype (int vartype) CCTK_ATTRIBUTE_CONST; + int CarpetSimpleMPIDatatypeLength (int vartype) CCTK_ATTRIBUTE_CONST; diff --git a/Carpet/Carpet/src/functions.hh b/Carpet/Carpet/src/functions.hh index d8b508441..e1fd104b8 100644 --- a/Carpet/Carpet/src/functions.hh +++ b/Carpet/Carpet/src/functions.hh @@ -7,13 +7,13 @@ #include <mpi.h> -#include "cctk.h" -#include "cctk_Schedule.h" +#include <cctk.h> +#include <cctk_Schedule.h> -#include "bbox.hh" -#include "dh.hh" -#include "gh.hh" -#include "vect.hh" +#include <bbox.hh> +#include <dh.hh> +#include <gh.hh> +#include <vect.hh> @@ -33,24 +33,20 @@ namespace Carpet { int GroupStorageDecrease (const cGH* cgh, int n_groups, const int* groups, const int* timelevels, int* status); int Barrier (const cGH* cgh); - int Exit (cGH* cgh, int retval); - int Abort (cGH* cgh, int retval); - int MyProc (const cGH* cgh); - int nProcs (const cGH* cgh); + int NamedBarrier (const cGH* cgh, int id); + int Exit (const cGH* cgh, int retval); + int Abort (const cGH* cgh, int retval); + int MyProc (const cGH* cgh) CCTK_ATTRIBUTE_CONST; + int nProcs (const cGH* cgh) CCTK_ATTRIBUTE_CONST; const int* ArrayGroupSizeB (const cGH* cgh, int dir, int group, - const char* groupname); - int QueryGroupStorageB (const cGH* cgh, int group, const char* groupname); + const char* groupname) CCTK_ATTRIBUTE_PURE; + int QueryGroupStorageB (const cGH* cgh, int group, const char* groupname) CCTK_ATTRIBUTE_PURE; int GroupDynamicData (const cGH* cgh, int group, cGroupDynamicData* data); void Restrict (const cGH* cgh); - // Strings - vector <string> - AllGatherString (MPI_Comm const world, - string const & data); - // Multi-Model void SplitUniverse (MPI_Comm const world, string const model, MPI_Comm & comm, @@ -58,19 +54,19 @@ namespace Carpet { // Model id to model name vector <string> Models (); - string Model (int id); + string Model (int id) CCTK_ATTRIBUTE_PURE; // Model name to model id std::map <string, int> ModelMap (); - int ModelMap (string name); + int ModelMap (string name) CCTK_ATTRIBUTE_PURE; // Processor to model id vector <int> ModelIds (); - int ModelId (int proc); + int ModelId (int proc) CCTK_ATTRIBUTE_PURE; // Model id to processors - vector <vector <int> > ModelProcs (); - vector <int> ModelProcs (int proc); + vector <vector <int> > ModelProcs () CCTK_ATTRIBUTE_PURE; + vector <int> ModelProcs (int proc) CCTK_ATTRIBUTE_PURE; extern "C" { CCTK_POINTER_TO_CONST @@ -90,10 +86,6 @@ namespace Carpet { - void SetSystemLimits (); - - - // Helpers for storage void GroupsStorageCheck (cGH const * const cctkGH); @@ -102,18 +94,27 @@ namespace Carpet { RegridMap (cGH const * cctkGH, int m, gh::rregs const & supeerregss, - gh::mregs const & regsss); + gh::mregs const & regsss, + bool do_init); void PostRegrid (cGH const * cctkGH); bool Recompose (cGH const * cctkGH, int rl, bool do_init); + void + RegridFree (cGH const * cctkGH, + bool do_init); void CheckRegions (gh::mregs const & regsss); void + OutputSuperregions (cGH const * cctkGH, + int m, + gh const & hh, + gh::rregs const & superregss); + void OutputGrids (cGH const * cctkGH, int const m, gh const & hh, @@ -177,8 +178,8 @@ namespace Carpet { // Timing statistics functions void InitTimingStats (cGH const * cctkGH); - void BeginTiming (cGH const * cctkGH); - void StepTiming (cGH const * cctkGH); + void BeginTimingEvolution (cGH const * cctkGH); + void StepTimingEvolution (cGH const * cctkGH); void BeginTimingIO (cGH const * cctkGH); void EndTimingIO (cGH const * cctkGH, CCTK_REAL files, CCTK_REAL bytes, bool is_binary); diff --git a/Carpet/Carpet/src/helpers.cc b/Carpet/Carpet/src/helpers.cc index c799e07f4..d5b49fc61 100644 --- a/Carpet/Carpet/src/helpers.cc +++ b/Carpet/Carpet/src/helpers.cc @@ -6,15 +6,15 @@ #include <mpi.h> -#include "cctk.h" -#include "cctk_FortranString.h" -#include "cctk_Parameters.h" +#include <cctk.h> +#include <cctk_FortranString.h> +#include <cctk_Parameters.h> -#include "defs.hh" -#include "dist.hh" -#include "ggf.hh" +#include <defs.hh> +#include <dist.hh> +#include <ggf.hh> -#include "carpet.hh" +#include <carpet.hh> @@ -64,9 +64,51 @@ namespace Carpet { { return do_prolongate; } - - - + + + + // Get pointer to grid variable for a specific map and refinement level + CCTK_POINTER + Carpet_VarDataPtrI (CCTK_POINTER_TO_CONST const cctkGH, + CCTK_INT const m, + CCTK_INT const rl, + CCTK_INT const c, + CCTK_INT const tl, + CCTK_INT const varindex) + { + assert (cctkGH); + assert (varindex >= 0 and varindex < CCTK_NumVars()); + int const groupindex = CCTK_GroupIndexFromVarI (varindex); + assert (groupindex >= 0); + int const grouptype = CCTK_GroupTypeI (groupindex); + assert (mglevel >= 0); + if (grouptype == CCTK_GF) { + assert (m >= 0 and m < maps); + assert (rl >= 0 and rl < reflevels); + assert (c >= 0 and c < arrdata.AT(groupindex).AT(m).hh->components(reflevel)); + assert (arrdata.AT(groupindex).AT(m).hh->is_local(rl, c)); + } else { + assert (m == 0); + assert (rl == 0); + assert (c == CCTK_MyProc (NULL)); + } + int const maxtimelevels = CCTK_MaxTimeLevelsGI (groupindex); + assert (tl >= 0 and tl < maxtimelevels); + + int const activetimelevels = + groupdata.AT(groupindex).activetimelevels.AT(mglevel).AT(rl); + if (tl < activetimelevels) { + int const var = varindex - CCTK_FirstVarIndexI (groupindex); + ggf * const ff = arrdata.AT(groupindex).AT(m).data.AT(var); + gdata * const data = (*ff) (tl, rl, c, mglevel); + return data->storage(); + } else { + return NULL; + } + } + + + // Multi-Model CCTK_POINTER_TO_CONST Carpet_GetMPICommUniverse (CCTK_POINTER_TO_CONST const cctkGH) @@ -106,13 +148,13 @@ namespace Carpet { assert (size == dim); - ibbox const & baseext = vhh.at(m)->baseextents.at(ml).at(0); + ibbox const & baseext = vhh.AT(m)->baseextents.AT(ml).AT(0); ivect const igsh = baseext.shape() / baseext.stride(); for (int d = 0; d < dim; ++ d) { gsh[d] = igsh[d]; - lower[d] = origin_space.at(m).at(ml)[d]; - delta[d] = delta_space.at(m)[d] * mglevelfact; + lower[d] = origin_space.AT(m).AT(ml)[d]; + delta[d] = delta_space.AT(m)[d] * mglevelfact; upper[d] = lower[d] + delta[d] * (gsh[d] - 1); } @@ -125,16 +167,37 @@ namespace Carpet { int Barrier (const cGH* cgh) { - void *dummy = &dummy; + const void *dummy = &dummy; dummy = &cgh; MPI_Barrier (dist::comm()); return 0; } + int NamedBarrier (const cGH* const cgh, const int id) + { + const void *dummy = &dummy; + dummy = &cgh; + + assert (id >= 0); + const int root = 0; + int my_id = dist::rank()==root ? id : -1; + Checkpoint ("About to Bcast %d", id); + MPI_Bcast (&my_id, 1, MPI_INT, root, dist::comm()); + Checkpoint ("Finished Bcast"); + if (my_id != id) { + CCTK_VWarn (CCTK_WARN_ABORT, __LINE__, __FILE__, CCTK_THORNSTRING, + "Wrong Barrier name: expected %d, found %d", id, my_id); + } + Checkpoint ("About to Barrier %d", id); + MPI_Barrier (dist::comm()); + Checkpoint ("Finished Barrier"); + return 0; + } + - int Exit (cGH* cgh, int retval) + int Exit (const cGH* cgh, int retval) { CCTK_Barrier (cgh); dist::finalize(); @@ -142,7 +205,7 @@ namespace Carpet { return -1; } - int Abort (cGH* cgh, int retval) + int Abort (const cGH* cgh, int retval) { void *dummy = &dummy; dummy = &cgh; @@ -189,7 +252,7 @@ namespace Carpet { #define TYPECASE(N,T) \ case N: { \ T dummy; \ - return dist::datatype(dummy); \ + return dist::mpi_datatype(dummy); \ } #include "typecase" #undef TYPECASE @@ -266,15 +329,17 @@ namespace Carpet { // Timelevels - int min_timelevel (const checktimes where, const int num_tl) + int min_timelevel (const checktimes where, const int num_tl, + const bool persistent) { assert (num_tl>0); switch (where) { case currenttime: return 0; case currenttimebutnotifonly: - // don't include current time if there is only one time level - return num_tl>1 ? 0 : 1; + // don't include current time if there is only one (persistent) + // time level + return (not persistent or num_tl>1) ? 0 : 1; case previoustime: return 1; case allbutlasttime: @@ -290,7 +355,8 @@ namespace Carpet { return -999; } - int max_timelevel (const checktimes where, const int num_tl) + int max_timelevel (const checktimes where, const int num_tl, + const bool persistent) { assert (num_tl>0); switch (where) { diff --git a/Carpet/Carpet/src/make.code.defn b/Carpet/Carpet/src/make.code.defn index db03ff6d7..8edcaac69 100644 --- a/Carpet/Carpet/src/make.code.defn +++ b/Carpet/Carpet/src/make.code.defn @@ -1,8 +1,7 @@ # Main make.code.defn file for thorn Carpet -*-Makefile-*- # Source files in this directory -SRCS = AllGatherString.cc \ - CallFunction.cc \ +SRCS = CallFunction.cc \ CarpetBasegrid.cc \ CarpetParamCheck.cc \ CarpetStartup.cc \ @@ -11,7 +10,6 @@ SRCS = AllGatherString.cc \ Cycle.cc \ Evolve.cc \ Initialise.cc \ - Limits.cc \ MultiModel.cc \ OutputGH.cc \ Poison.cc \ diff --git a/Carpet/Carpet/src/modes.cc b/Carpet/Carpet/src/modes.cc index 998f593ef..138842da4 100644 --- a/Carpet/Carpet/src/modes.cc +++ b/Carpet/Carpet/src/modes.cc @@ -11,7 +11,7 @@ #include <defs.hh> #include <ggf.hh> -#include "carpet.hh" +#include <carpet.hh> @@ -54,7 +54,7 @@ namespace Carpet { // assert (mglevel>=0 and mglevel<mglevels); // assert (reflevel>=0 and reflevel<reflevels); // assert (map>=0 and map<maps); -// assert (vhh.at(map)->local_components(reflevel)==1 or component==-1); +// assert (vhh.AT(map)->local_components(reflevel)==1 or component==-1); } @@ -76,13 +76,16 @@ namespace Carpet { // TODO: this could also just be "mglevel" instead cctkGH->cctk_convlevel = basemglevel + mglevel; + // Set mode + cctkGH->cctk_mode = CCTK_MODE_GLOBAL; + // Set time delta cctkGH->cctk_delta_time = delta_time * mglevelfact; if (maps == 1) { // Set space delta for (int d=0; d<dim; ++d) { - cctkGH->cctk_origin_space[d] = origin_space.at(0).at(mglevel)[d]; - cctkGH->cctk_delta_space[d] = delta_space.at(0)[d] * mglevelfact; + cctkGH->cctk_origin_space[d] = origin_space.AT(0).AT(mglevel)[d]; + cctkGH->cctk_delta_space[d] = delta_space.AT(0)[d] * mglevelfact; } } @@ -94,48 +97,48 @@ namespace Carpet { const int rl = 0; const int m = 0; - const int c = CCTK_MyProc(cctkGH); + const int c = dist::rank(); - const ibbox& baseext = arrdata.at(group).at(m).hh->baseextents.at(ml).at(rl); - const ibbox& ext = arrdata.at(group).at(m).dd->boxes.at(ml).at(rl).at(c).exterior; - const b2vect& obnds = arrdata.at(group).at(m).hh->outer_boundaries(rl,c); + const ibbox& baseext = arrdata.AT(group).AT(m).hh->baseextents.AT(ml).AT(rl); + const ibbox& ext = arrdata.AT(group).AT(m).dd->boxes.AT(ml).AT(rl).AT(c).exterior; + const b2vect& obnds = arrdata.AT(group).AT(m).hh->outer_boundaries(rl,c); - ivect::ref(const_cast<int*>(groupdata.at(group).info.nghostzones)) - = arrdata.at(group).at(m).dd->ghost_width[0]; - ivect::ref(const_cast<int*>(groupdata.at(group).info.gsh)) + ivect::ref(const_cast<int*>(groupdata.AT(group).info.nghostzones)) + = arrdata.AT(group).AT(m).dd->ghost_width[0]; + ivect::ref(const_cast<int*>(groupdata.AT(group).info.gsh)) = baseext.shape() / baseext.stride(); - ivect::ref(const_cast<int*>(groupdata.at(group).info.lsh)) + ivect::ref(const_cast<int*>(groupdata.AT(group).info.lsh)) = ext.shape() / ext.stride(); - ivect::ref(const_cast<int*>(groupdata.at(group).info.lbnd)) + ivect::ref(const_cast<int*>(groupdata.AT(group).info.lbnd)) = (ext.lower() - baseext.lower()) / ext.stride(); - ivect::ref(const_cast<int*>(groupdata.at(group).info.ubnd)) + ivect::ref(const_cast<int*>(groupdata.AT(group).info.ubnd)) = (ext.upper() - baseext.lower()) / ext.stride(); if (gp.disttype == CCTK_DISTRIB_CONSTANT) { int const d = gp.dim==0 ? 0 : gp.dim-1; - ivect & gsh = ivect::ref(const_cast<int*>(groupdata.at(group).info.gsh)); - ivect & lsh = ivect::ref(const_cast<int*>(groupdata.at(group).info.lsh)); - ivect & lbnd = ivect::ref(const_cast<int*>(groupdata.at(group).info.lbnd)); - ivect & ubnd = ivect::ref(const_cast<int*>(groupdata.at(group).info.ubnd)); + ivect & gsh = ivect::ref(const_cast<int*>(groupdata.AT(group).info.gsh)); + ivect & lsh = ivect::ref(const_cast<int*>(groupdata.AT(group).info.lsh)); + ivect & lbnd = ivect::ref(const_cast<int*>(groupdata.AT(group).info.lbnd)); + ivect & ubnd = ivect::ref(const_cast<int*>(groupdata.AT(group).info.ubnd)); gsh[d] = lsh[d]; lbnd[d] = 0; ubnd[d] = lsh[d] - 1; } for (int d=0; d<dim; ++d) { - const_cast<int*>(groupdata.at(group).info.bbox)[2*d ] = obnds[0][d]; - const_cast<int*>(groupdata.at(group).info.bbox)[2*d+1] = obnds[1][d]; + const_cast<int*>(groupdata.AT(group).info.bbox)[2*d ] = obnds[0][d]; + const_cast<int*>(groupdata.AT(group).info.bbox)[2*d+1] = obnds[1][d]; } - groupdata.at(group).info.activetimelevels - = groupdata.at(group).activetimelevels.at(mglevel).at(0); + groupdata.AT(group).info.activetimelevels + = groupdata.AT(group).activetimelevels.AT(mglevel).AT(0); for (int d=0; d<dim; ++d) { - assert (groupdata.at(group).info.lsh[d]>=0); - assert (groupdata.at(group).info.lsh[d]<=groupdata.at(group).info.gsh[d]); - assert (groupdata.at(group).info.lbnd[d]>=0); - assert (groupdata.at(group).info.lbnd[d]<=groupdata.at(group).info.ubnd[d]+1); - assert (groupdata.at(group).info.ubnd[d]<groupdata.at(group).info.gsh[d]); - assert (groupdata.at(group).info.lbnd[d] + groupdata.at(group).info.lsh[d] - 1 - == groupdata.at(group).info.ubnd[d]); - assert (groupdata.at(group).info.lbnd[d]<=groupdata.at(group).info.ubnd[d]+1); + assert (groupdata.AT(group).info.lsh[d]>=0); + assert (groupdata.AT(group).info.lsh[d]<=groupdata.AT(group).info.gsh[d]); + assert (groupdata.AT(group).info.lbnd[d]>=0); + assert (groupdata.AT(group).info.lbnd[d]<=groupdata.AT(group).info.ubnd[d]+1); + assert (groupdata.AT(group).info.ubnd[d]<groupdata.AT(group).info.gsh[d]); + assert (groupdata.AT(group).info.lbnd[d] + groupdata.AT(group).info.lsh[d] - 1 + == groupdata.AT(group).info.ubnd[d]); + assert (groupdata.AT(group).info.lbnd[d]<=groupdata.AT(group).info.ubnd[d]+1); } const int numvars = CCTK_NumVarsInGroupI (group); @@ -144,17 +147,18 @@ namespace Carpet { assert (firstvar>=0); const int max_tl = CCTK_MaxTimeLevelsGI (group); assert (max_tl>=0); - const int active_tl = groupdata.at(group).info.activetimelevels; + const int active_tl = groupdata.AT(group).info.activetimelevels; assert (active_tl>=0 and active_tl<=max_tl); - assert (arrdata.at(group).at(m).hh->is_local(rl,c)); + assert (arrdata.AT(group).AT(m).hh->is_local(rl,c)); for (int var=0; var<numvars; ++var) { assert (firstvar+var<CCTK_NumVars()); - ggf * const ff = arrdata.at(group).at(m).data.at(var); + ggf * const ff = arrdata.AT(group).AT(m).data.AT(var); for (int tl=0; tl<max_tl; ++tl) { if (ff and tl<active_tl) { - gdata * const data = (*ff) (tl, rl, c, ml); + int const lc = 0; + gdata * const data = (*ff) (tl, rl, lc, ml); assert (data); cctkGH->data[firstvar+var][tl] = data->storage(); } else { @@ -186,36 +190,38 @@ namespace Carpet { if (maps == 1) { // Save and unset space delta for (int d=0; d<dim; ++d) { - origin_space.at(0).at(mglevel)[d] = cctkGH->cctk_origin_space[d]; - delta_space.at(mglevel)[d] = cctkGH->cctk_delta_space[d] / mglevelfact; + origin_space.AT(0).AT(mglevel)[d] = cctkGH->cctk_origin_space[d]; + delta_space.AT(mglevel)[d] = cctkGH->cctk_delta_space[d] / mglevelfact; cctkGH->cctk_origin_space[d] = -424242.0; cctkGH->cctk_delta_space[d] = -424242.0; } } + CCTK_INT const deadbeef = get_deadbeef(); + // Set array information for (int group=0; group<CCTK_NumGroups(); ++group) { if (CCTK_GroupTypeI(group) != CCTK_GF) { const int m = 0; -// ivect::ref(const_cast<int*>(groupdata.at(group).info.nghostzones)) +// ivect::ref(const_cast<int*>(groupdata.AT(group).info.nghostzones)) // = deadbeef; - ivect::ref(const_cast<int*>(groupdata.at(group).info.nghostzones)) - = arrdata.at(group).at(m).dd->ghost_width[0]; - ivect::ref(const_cast<int*>(groupdata.at(group).info.gsh)) + ivect::ref(const_cast<int*>(groupdata.AT(group).info.nghostzones)) + = arrdata.AT(group).AT(m).dd->ghost_width[0]; + ivect::ref(const_cast<int*>(groupdata.AT(group).info.gsh)) = deadbeef; - ivect::ref(const_cast<int*>(groupdata.at(group).info.lsh)) + ivect::ref(const_cast<int*>(groupdata.AT(group).info.lsh)) = deadbeef; - ivect::ref(const_cast<int*>(groupdata.at(group).info.lbnd)) + ivect::ref(const_cast<int*>(groupdata.AT(group).info.lbnd)) = -deadbeef; - ivect::ref(const_cast<int*>(groupdata.at(group).info.ubnd)) + ivect::ref(const_cast<int*>(groupdata.AT(group).info.ubnd)) = deadbeef; for (int d=0; d<dim; ++d) { - const_cast<int*>(groupdata.at(group).info.bbox)[2*d ] = deadbeef; - const_cast<int*>(groupdata.at(group).info.bbox)[2*d+1] = deadbeef; + const_cast<int*>(groupdata.AT(group).info.bbox)[2*d ] = deadbeef; + const_cast<int*>(groupdata.AT(group).info.bbox)[2*d+1] = deadbeef; } - groupdata.at(group).info.activetimelevels = deadbeef; + groupdata.AT(group).info.activetimelevels = deadbeef; const int numvars = CCTK_NumVarsInGroupI (group); if (numvars>0) { @@ -236,6 +242,9 @@ namespace Carpet { } // if grouptype } // for group + // Set mode + cctkGH->cctk_mode = CCTK_MODE_META; + mglevel = -1; mglevelfact = -deadbeef; cctkGH->cctk_convlevel = -deadbeef; @@ -255,27 +264,30 @@ namespace Carpet { assert (rl>=0 and rl<reflevels); Checkpoint ("Entering level mode"); + // Set mode + cctkGH->cctk_mode = CCTK_MODE_LEVEL; + reflevel = rl; - timereflevelfact = timereffacts.at (reflevel); - spacereflevelfact = spacereffacts.at (reflevel); + timereflevelfact = timereffacts.AT (reflevel); + spacereflevelfact = spacereffacts.AT (reflevel); ivect::ref(cctkGH->cctk_levfac) = spacereflevelfact; cctkGH->cctk_timefac = timereflevelfact; // Set number of time levels for (int group=0; group<CCTK_NumGroups(); ++group) { if (CCTK_GroupTypeI(group) == CCTK_GF) { - groupdata.at(group).info.activetimelevels - = groupdata.at(group).activetimelevels.at(mglevel).at(reflevel); + groupdata.AT(group).info.activetimelevels + = groupdata.AT(group).activetimelevels.AT(mglevel).AT(reflevel); } } // Set current time assert (mglevel>=0 and mglevel<(int)leveltimes.size()); - assert (reflevel>=0 and reflevel<(int)leveltimes.at(mglevel).size()); + assert (reflevel>=0 and reflevel<(int)leveltimes.AT(mglevel).size()); if (not adaptive_stepsize) { - cctkGH->cctk_time = leveltimes.at(mglevel).at(reflevel); + cctkGH->cctk_time = leveltimes.AT(mglevel).AT(reflevel); } else { - leveltimes.at(mglevel).at(reflevel) = cctkGH->cctk_time; + leveltimes.AT(mglevel).AT(reflevel) = cctkGH->cctk_time; } assert (is_level_mode()); @@ -290,11 +302,13 @@ namespace Carpet { if (reflevel == -1) return; // early return Checkpoint ("Leaving level mode"); - + + CCTK_INT const deadbeef = get_deadbeef(); + // Save and unset current time assert (mglevel>=0 and mglevel<(int)leveltimes.size()); - assert (reflevel>=0 and reflevel<(int)leveltimes.at(mglevel).size()); - leveltimes.at(mglevel).at(reflevel) = cctkGH->cctk_time; + assert (reflevel>=0 and reflevel<(int)leveltimes.AT(mglevel).size()); + leveltimes.AT(mglevel).AT(reflevel) = cctkGH->cctk_time; if (not adaptive_stepsize) { cctkGH->cctk_time = global_time; } else { @@ -304,13 +318,16 @@ namespace Carpet { // Unset number of time levels for (int group=0; group<CCTK_NumGroups(); ++group) { if (CCTK_GroupTypeI(group) == CCTK_GF) { - groupdata.at(group).info.activetimelevels = deadbeef; + groupdata.AT(group).info.activetimelevels = deadbeef; } } + // Set mode + cctkGH->cctk_mode = CCTK_MODE_GLOBAL; + reflevel = -1; - timereflevelfact = timereffacts.at (reflevels - 1); - // TODO: use spacereffacts.at (reflevel - 1) instead? + timereflevelfact = timereffacts.AT (reflevels - 1); + // TODO: use spacereffacts.AT (reflevel - 1) instead? spacereflevelfact = ivect(-deadbeef); ivect::ref(cctkGH->cctk_levfac) = spacereflevelfact; cctkGH->cctk_timefac = timereflevelfact; @@ -332,6 +349,9 @@ namespace Carpet { or grouptype == CCTK_GF); Checkpoint ("Entering singlemap mode"); + // Set mode + cctkGH->cctk_mode = CCTK_MODE_SINGLEMAP; + assert (mc_grouptype == -1); mc_grouptype = grouptype; carpetGH.map = map = m; @@ -341,26 +361,26 @@ namespace Carpet { if (maps > 1) { // Set space delta for (int d=0; d<dim; ++d) { - cctkGH->cctk_origin_space[d] = origin_space.at(map).at(mglevel)[d]; - cctkGH->cctk_delta_space[d] = delta_space.at(map)[d] * mglevelfact; + cctkGH->cctk_origin_space[d] = origin_space.AT(map).AT(mglevel)[d]; + cctkGH->cctk_delta_space[d] = delta_space.AT(map)[d] * mglevelfact; } } // Set grid shape - const ibbox& coarseext = vhh.at(map)->baseextents.at(mglevel).at(0 ); - const ibbox& baseext = vhh.at(map)->baseextents.at(mglevel).at(reflevel); + const ibbox& coarseext = vhh.AT(map)->baseextents.AT(mglevel).AT(0 ); + const ibbox& baseext = vhh.AT(map)->baseextents.AT(mglevel).AT(reflevel); // assert (all (baseext.lower() % baseext.stride() == 0)); ivect::ref(cctkGH->cctk_levoff) = baseext.lower() - coarseext.lower(); ivect::ref(cctkGH->cctk_levoffdenom) = baseext.stride(); ivect::ref(cctkGH->cctk_gsh) = baseext.shape() / baseext.stride(); - assert (all (vdd.at(map)->ghost_width[0] == vdd.at(map)->ghost_width[1])); - ivect::ref(cctkGH->cctk_nghostzones) = vdd.at(map)->ghost_width[0]; + assert (all (vdd.AT(map)->ghost_width[0] == vdd.AT(map)->ghost_width[1])); + ivect::ref(cctkGH->cctk_nghostzones) = vdd.AT(map)->ghost_width[0]; for (int group=0; group<CCTK_NumGroups(); ++group) { if (CCTK_GroupTypeI(group) == CCTK_GF) { - ivect::ref(const_cast<int*>(groupdata.at(group).info.gsh)) + ivect::ref(const_cast<int*>(groupdata.AT(group).info.gsh)) = ivect::ref(cctkGH->cctk_gsh); - ivect::ref(const_cast<int*>(groupdata.at(group).info.nghostzones)) + ivect::ref(const_cast<int*>(groupdata.AT(group).info.nghostzones)) = ivect::ref(cctkGH->cctk_nghostzones); } } @@ -385,12 +405,14 @@ namespace Carpet { if (mc_grouptype == CCTK_GF) { + CCTK_INT const deadbeef = get_deadbeef(); + // Save space delta // (Do this early and often, so that interpolation has access to // the correct values right away.) for (int d=0; d<dim; ++d) { - origin_space.at(map).at(mglevel)[d] = cctkGH->cctk_origin_space[d]; - delta_space.at(map)[d] = cctkGH->cctk_delta_space[d] / mglevelfact; + origin_space.AT(map).AT(mglevel)[d] = cctkGH->cctk_origin_space[d]; + delta_space.AT(map)[d] = cctkGH->cctk_delta_space[d] / mglevelfact; } if (maps > 1) { // Unset space delta @@ -405,19 +427,22 @@ namespace Carpet { ivect::ref(cctkGH->cctk_levoffdenom) = 0; ivect::ref(cctkGH->cctk_gsh) = deadbeef; // ivect::ref(cctkGH->cctk_nghostzones) = deadbeef; - ivect::ref(cctkGH->cctk_nghostzones) = vdd.at(map)->ghost_width[0]; + ivect::ref(cctkGH->cctk_nghostzones) = vdd.AT(map)->ghost_width[0]; for (int group=0; group<CCTK_NumGroups(); ++group) { if (CCTK_GroupTypeI(group) == CCTK_GF) { - ivect::ref(const_cast<int*>(groupdata.at(group).info.gsh)) + ivect::ref(const_cast<int*>(groupdata.AT(group).info.gsh)) = ivect::ref(cctkGH->cctk_gsh); - ivect::ref(const_cast<int*>(groupdata.at(group).info.nghostzones)) + ivect::ref(const_cast<int*>(groupdata.AT(group).info.nghostzones)) = ivect::ref(cctkGH->cctk_nghostzones); } } } // if mc_grouptype + // Set mode + cctkGH->cctk_mode = CCTK_MODE_LEVEL; + mc_grouptype = -1; carpetGH.map = map = -1; @@ -428,25 +453,32 @@ namespace Carpet { // Set local mode - void enter_local_mode (cGH * const cctkGH, int const c, int const grouptype) + void enter_local_mode (cGH * const cctkGH, + int const c, int const lc, int const grouptype) { assert (is_singlemap_mode()); if (mc_grouptype == CCTK_GF) { - assert (c>=0 and c<vhh.at(map)->components(reflevel)); + assert (c>=0 and c<vhh.AT(map)->components(reflevel)); + assert (lc==-1 or (lc>=0 and lc<vhh.AT(map)->local_components(reflevel))); } else { - assert (c>=0 and c<CCTK_nProcs(cctkGH)); + assert (c>=0 and c<dist::size()); + assert (lc==-1 or lc==0); } Checkpoint ("Entering local mode"); + // Set mode + cctkGH->cctk_mode = CCTK_MODE_LOCAL; + assert (grouptype == mc_grouptype); component = c; + local_component = lc; if (mc_grouptype == CCTK_GF) { // Set cGH fields - const ibbox& baseext = vhh.at(map)->baseextents.at(mglevel).at(reflevel); - const ibbox& ext = vdd.at(map)->boxes.at(mglevel).at(reflevel).at(component).exterior; - const b2vect& obnds = vhh.at(map)->outer_boundaries(reflevel,component); + const ibbox& baseext = vhh.AT(map)->baseextents.AT(mglevel).AT(reflevel); + const ibbox& ext = vdd.AT(map)->boxes.AT(mglevel).AT(reflevel).AT(component).exterior; + const b2vect& obnds = vhh.AT(map)->outer_boundaries(reflevel,component); ivect::ref(cctkGH->cctk_lsh) = ext.shape() / ext.stride(); ivect::ref(cctkGH->cctk_lbnd) @@ -484,44 +516,47 @@ namespace Carpet { for (int group=0; group<CCTK_NumGroups(); ++group) { if (CCTK_GroupTypeI(group) == CCTK_GF) { - ivect::ref(const_cast<int*>(groupdata.at(group).info.lsh)) + ivect::ref(const_cast<int*>(groupdata.AT(group).info.lsh)) = ivect::ref(cctkGH->cctk_lsh); - ivect::ref(const_cast<int*>(groupdata.at(group).info.lbnd)) + ivect::ref(const_cast<int*>(groupdata.AT(group).info.lbnd)) = ivect::ref(cctkGH->cctk_lbnd); - ivect::ref(const_cast<int*>(groupdata.at(group).info.ubnd)) + ivect::ref(const_cast<int*>(groupdata.AT(group).info.ubnd)) = ivect::ref(cctkGH->cctk_ubnd); for (int d=0; d<dim; ++d) { - const_cast<int*>(groupdata.at(group).info.bbox)[2*d ] + const_cast<int*>(groupdata.AT(group).info.bbox)[2*d ] = cctkGH->cctk_bbox[2*d ]; - const_cast<int*>(groupdata.at(group).info.bbox)[2*d+1] + const_cast<int*>(groupdata.AT(group).info.bbox)[2*d+1] = cctkGH->cctk_bbox[2*d+1]; } - const int numvars = CCTK_NumVarsInGroupI (group); - if (numvars>0) { - const int firstvar = CCTK_FirstVarIndexI (group); - assert (firstvar>=0); - const int max_tl = CCTK_MaxTimeLevelsGI (group); - assert (max_tl>=0); - const int active_tl = CCTK_ActiveTimeLevelsGI (cctkGH, group); - assert (active_tl>=0 and active_tl<=max_tl); - const int available_tl = - do_allow_past_timelevels ? active_tl : min (1, active_tl); - - // assert (vhh.at(map)->is_local(reflevel,component)); - - assert (group<(int)arrdata.size()); - for (int var=0; var<numvars; ++var) { - assert (firstvar+var<CCTK_NumVars()); - ggf * const ff = arrdata.at(group).at(map).data.at(var); - for (int tl=0; tl<max_tl; ++tl) { - if (ff and tl<available_tl) { - gdata * const data = (*ff) (tl, reflevel, component, mglevel); - assert (data); - cctkGH->data[firstvar+var][tl] = data->storage(); - } else { - cctkGH->data[firstvar+var][tl] = NULL; + if (local_component != -1) { + const int numvars = CCTK_NumVarsInGroupI (group); + if (numvars>0) { + const int firstvar = CCTK_FirstVarIndexI (group); + assert (firstvar>=0); + const int max_tl = CCTK_MaxTimeLevelsGI (group); + assert (max_tl>=0); + const int active_tl = CCTK_ActiveTimeLevelsGI (cctkGH, group); + assert (active_tl>=0 and active_tl<=max_tl); + const int available_tl = + do_allow_past_timelevels ? active_tl : min (1, active_tl); + + // assert (vhh.AT(map)->is_local(reflevel,component)); + + assert (group<(int)arrdata.size()); + for (int var=0; var<numvars; ++var) { + assert (firstvar+var<CCTK_NumVars()); + ggf * const ff = arrdata.AT(group).AT(map).data.AT(var); + for (int tl=0; tl<max_tl; ++tl) { + if (ff and tl<available_tl) { + gdata * const data = + (*ff) (tl, reflevel, local_component, mglevel); + assert (data); + cctkGH->data[firstvar+var][tl] = data->storage(); + } else { + cctkGH->data[firstvar+var][tl] = NULL; + } } } } @@ -547,6 +582,8 @@ namespace Carpet { if (mc_grouptype == CCTK_GF) { + CCTK_INT const deadbeef = get_deadbeef(); + // Unset cGH fields ivect::ref(cctkGH->cctk_lsh) = deadbeef; ivect::ref(cctkGH->cctk_lbnd) = -deadbeef; @@ -569,32 +606,34 @@ namespace Carpet { for (int group=0; group<CCTK_NumGroups(); ++group) { if (CCTK_GroupTypeI(group) == CCTK_GF) { - ivect::ref(const_cast<int*>(groupdata.at(group).info.lsh)) + ivect::ref(const_cast<int*>(groupdata.AT(group).info.lsh)) = ivect::ref(cctkGH->cctk_lsh); - ivect::ref(const_cast<int*>(groupdata.at(group).info.lbnd)) + ivect::ref(const_cast<int*>(groupdata.AT(group).info.lbnd)) = ivect::ref(cctkGH->cctk_lbnd); - ivect::ref(const_cast<int*>(groupdata.at(group).info.ubnd)) + ivect::ref(const_cast<int*>(groupdata.AT(group).info.ubnd)) = ivect::ref(cctkGH->cctk_ubnd); for (int d=0; d<dim; ++d) { - const_cast<int*>(groupdata.at(group).info.bbox)[2*d ] + const_cast<int*>(groupdata.AT(group).info.bbox)[2*d ] = cctkGH->cctk_bbox[2*d ]; - const_cast<int*>(groupdata.at(group).info.bbox)[2*d+1] + const_cast<int*>(groupdata.AT(group).info.bbox)[2*d+1] = cctkGH->cctk_bbox[2*d+1]; } - const int numvars = CCTK_NumVarsInGroupI (group); - if (numvars>0) { - const int firstvar = CCTK_FirstVarIndexI (group); - assert (firstvar>=0); - const int max_tl = CCTK_MaxTimeLevelsGI (group); - assert (max_tl>=0); - - assert (group<(int)arrdata.size()); - for (int var=0; var<numvars; ++var) { - assert (firstvar+var<CCTK_NumVars()); - for (int tl=0; tl<max_tl; ++tl) { - cctkGH->data[firstvar+var][tl] = NULL; + if (local_component != -1) { + const int numvars = CCTK_NumVarsInGroupI (group); + if (numvars>0) { + const int firstvar = CCTK_FirstVarIndexI (group); + assert (firstvar>=0); + const int max_tl = CCTK_MaxTimeLevelsGI (group); + assert (max_tl>=0); + + assert (group<(int)arrdata.size()); + for (int var=0; var<numvars; ++var) { + assert (firstvar+var<CCTK_NumVars()); + for (int tl=0; tl<max_tl; ++tl) { + cctkGH->data[firstvar+var][tl] = NULL; + } } } } @@ -604,7 +643,11 @@ namespace Carpet { } // if mc_grouptype + // Set mode + cctkGH->cctk_mode = CCTK_MODE_SINGLEMAP; + component = -1; + local_component = -1; assert (is_singlemap_mode()); } @@ -749,7 +792,8 @@ namespace Carpet { bool map_iterator::done () const { - return grouptype == CCTK_GF ? m >= maps : m >= 1; + int const maxm = grouptype == CCTK_GF ? maps : 1; + return m >= maxm; } void map_iterator::step () @@ -763,7 +807,46 @@ namespace Carpet { - // Local mode iterator + // processor local map iterator + + local_map_iterator::local_map_iterator (cGH const * const cctkGH_, + int const grouptype_) + : cctkGH(const_cast<cGH*>(cctkGH_)), grouptype(grouptype_), m(0) + { + assert (grouptype == CCTK_GF + or grouptype == CCTK_ARRAY or grouptype == CCTK_SCALAR); + enter_singlemap_mode (cctkGH, m, grouptype); + } + + local_map_iterator::~local_map_iterator () + { + leave_singlemap_mode (cctkGH); + } + + bool local_map_iterator::done () const + { + int const maxm = grouptype == CCTK_GF ? maps : 1; + return m >= maxm; + } + + void local_map_iterator::step () + { + while (true) { + ++ m; + if (done()) break; + int const maxlc = + grouptype == CCTK_GF ? vhh.AT(m)->local_components(reflevel) : 1; + if (maxlc > 0) break; + } + if (not done()) { + leave_singlemap_mode (cctkGH); + enter_singlemap_mode (cctkGH, m, grouptype); + } + } + + + + // local mode iterator component_iterator::component_iterator (cGH const * const cctkGH_, int const grouptype_) @@ -771,7 +854,6 @@ namespace Carpet { { assert (grouptype == CCTK_GF or grouptype == CCTK_ARRAY or grouptype == CCTK_SCALAR); - assert (is_singlemap_mode()); step (); } @@ -793,17 +875,21 @@ namespace Carpet { ++ c; if (not done()) { leave_local_mode (cctkGH); - enter_local_mode (cctkGH, c, grouptype); + int const lc = + (grouptype == CCTK_GF + ? vhh.AT(map)->get_local_component(reflevel, c) + : (c == dist::rank() ? 0 : -1)); + enter_local_mode (cctkGH, c, lc, grouptype); } } - // Processor local mode iterator + // processor local mode iterator local_component_iterator::local_component_iterator (cGH const * const cctkGH_, int const grouptype_) - : cctkGH(const_cast<cGH*>(cctkGH_)), grouptype(grouptype_), c(-1) + : cctkGH(const_cast<cGH*>(cctkGH_)), grouptype(grouptype_), lc(-1) { assert (grouptype == CCTK_GF or grouptype == CCTK_ARRAY or grouptype == CCTK_SCALAR); @@ -818,23 +904,21 @@ namespace Carpet { bool local_component_iterator::done () const { - int const maxc = (grouptype == CCTK_GF - ? vhh.AT(map)->components(reflevel) - : dist::size()); - return c >= maxc; + int const maxlc = (grouptype == CCTK_GF + ? vhh.AT(map)->local_components(reflevel) + : 1); + return lc >= maxlc; } void local_component_iterator::step () { - do { - ++ c; - } while (not done() and not (grouptype == CCTK_GF - ? vhh.at(map)->is_local(reflevel, c) - : c == CCTK_MyProc(cctkGH))); - + ++ lc; if (not done()) { + int const c = (grouptype == CCTK_GF + ? vhh.AT(map)->get_component(reflevel,lc) + : dist::rank()); leave_local_mode (cctkGH); - enter_local_mode (cctkGH, c, grouptype); + enter_local_mode (cctkGH, c, lc, grouptype); } } @@ -847,7 +931,7 @@ namespace Carpet { // Singlemap escape singlemap_escape::singlemap_escape (cGH const * const cctkGH_) - : cctkGH(const_cast<cGH*>(cctkGH_)), c(component) + : cctkGH(const_cast<cGH*>(cctkGH_)), c(component), lc(local_component) { assert (not is_meta_mode()); assert (not is_global_mode()); @@ -861,7 +945,7 @@ namespace Carpet { { assert (is_singlemap_mode()); if (c != -1) { - enter_local_mode (cctkGH, c, mc_grouptype); + enter_local_mode (cctkGH, c, lc, mc_grouptype); } } @@ -871,7 +955,7 @@ namespace Carpet { level_escape::level_escape (cGH const * const cctkGH_) : cctkGH(const_cast<cGH*>(cctkGH_)), - grouptype(mc_grouptype), m(map), c(component) + grouptype(mc_grouptype), m(map), c(component), lc(local_component) { assert (not is_meta_mode()); assert (not is_global_mode()); @@ -889,7 +973,7 @@ namespace Carpet { if (m != -1) { enter_singlemap_mode (cctkGH, m, grouptype); if (c != -1) { - enter_local_mode (cctkGH, c, grouptype); + enter_local_mode (cctkGH, c, lc, grouptype); } } } @@ -900,7 +984,8 @@ namespace Carpet { global_escape::global_escape (cGH const * const cctkGH_) : cctkGH(const_cast<cGH*>(cctkGH_)), - rl(reflevel), grouptype(mc_grouptype), m(map), c(component) + rl(reflevel), + grouptype(mc_grouptype), m(map), c(component), lc(local_component) { assert (not is_meta_mode()); if (not is_global_mode()) { @@ -922,7 +1007,7 @@ namespace Carpet { if (m != -1) { enter_singlemap_mode (cctkGH, m, grouptype); if (c != -1) { - enter_local_mode (cctkGH, c, grouptype); + enter_local_mode (cctkGH, c, lc, grouptype); } } } @@ -934,7 +1019,8 @@ namespace Carpet { meta_escape::meta_escape (cGH const * const cctkGH_) : cctkGH(const_cast<cGH*>(cctkGH_)), - ml(mglevel), rl(reflevel), grouptype(mc_grouptype), m(map), c(component) + ml(mglevel), rl(reflevel), + grouptype(mc_grouptype), m(map), c(component), lc(local_component) { if (not is_meta_mode()) { if (not is_global_mode()) { @@ -960,7 +1046,7 @@ namespace Carpet { if (m != -1) { enter_singlemap_mode (cctkGH, m, grouptype); if (c != -1) { - enter_local_mode (cctkGH, c, grouptype); + enter_local_mode (cctkGH, c, lc, grouptype); } } } @@ -979,27 +1065,27 @@ namespace Carpet { if (is_meta_mode()) { BEGIN_MGLEVEL_LOOP(cctkGH) { BEGIN_REFLEVEL_LOOP(cctkGH) { - BEGIN_MAP_LOOP(cctkGH, CCTK_GF) { + BEGIN_LOCAL_MAP_LOOP(cctkGH, CCTK_GF) { BEGIN_LOCAL_COMPONENT_LOOP(cctkGH, CCTK_GF) { function (cctkGH); } END_LOCAL_COMPONENT_LOOP; - } END_MAP_LOOP; + } END_LOCAL_MAP_LOOP; } END_REFLEVEL_LOOP; } END_MGLEVEL_LOOP; } else if (is_global_mode()) { BEGIN_REFLEVEL_LOOP(cctkGH) { - BEGIN_MAP_LOOP(cctkGH, CCTK_GF) { + BEGIN_LOCAL_MAP_LOOP(cctkGH, CCTK_GF) { BEGIN_LOCAL_COMPONENT_LOOP(cctkGH, CCTK_GF) { function (cctkGH); } END_LOCAL_COMPONENT_LOOP; - } END_MAP_LOOP; + } END_LOCAL_MAP_LOOP; } END_REFLEVEL_LOOP; } else if (is_level_mode()) { - BEGIN_MAP_LOOP(cctkGH, CCTK_GF) { + BEGIN_LOCAL_MAP_LOOP(cctkGH, CCTK_GF) { BEGIN_LOCAL_COMPONENT_LOOP(cctkGH, CCTK_GF) { function (cctkGH); } END_LOCAL_COMPONENT_LOOP; - } END_MAP_LOOP; + } END_LOCAL_MAP_LOOP; } else if (is_singlemap_mode()) { BEGIN_LOCAL_COMPONENT_LOOP(cctkGH, CCTK_GF) { function (cctkGH); @@ -1140,7 +1226,13 @@ namespace Carpet { : cctkGH(const_cast<cGH*>(cctkGH_)) { assert (is_singlemap_mode()); - enter_local_mode (cctkGH, c, grouptype); + int const lc = + (c != -1 + ? (grouptype == CCTK_GF + ? vhh.AT(map)->get_local_component(reflevel, c) + : (c == dist::rank() ? 0 : -1)) + : -1); + enter_local_mode (cctkGH, c, lc, grouptype); } component_setter::~component_setter () diff --git a/Carpet/Carpet/src/modes.hh b/Carpet/Carpet/src/modes.hh index 55a5cfd35..c2631d952 100644 --- a/Carpet/Carpet/src/modes.hh +++ b/Carpet/Carpet/src/modes.hh @@ -27,27 +27,27 @@ namespace Carpet { // Mode indicators - bool is_meta_mode (); - bool is_global_mode (); - bool is_level_mode (); - bool is_singlemap_mode (); - bool is_local_mode (); + bool is_meta_mode () CCTK_ATTRIBUTE_PURE; + bool is_global_mode () CCTK_ATTRIBUTE_PURE; + bool is_level_mode () CCTK_ATTRIBUTE_PURE; + bool is_singlemap_mode () CCTK_ATTRIBUTE_PURE; + bool is_local_mode () CCTK_ATTRIBUTE_PURE; // Mode setting - void enter_global_mode (cGH * const cctkGH, int const ml); - void leave_global_mode (cGH * const cctkGH); + void enter_global_mode (cGH * cctkGH, int ml); + void leave_global_mode (cGH * cctkGH); - void enter_level_mode (cGH * const cctkGH, int const rl); - void leave_level_mode (cGH * const cctkGH); + void enter_level_mode (cGH * cctkGH, int rl); + void leave_level_mode (cGH * cctkGH); - void enter_singlemap_mode (cGH * const cctkGH, int const m, int const grouptype); - void leave_singlemap_mode (cGH * const cctkGH); + void enter_singlemap_mode (cGH * cctkGH, int m, int grouptype); + void leave_singlemap_mode (cGH * cctkGH); - void enter_local_mode (cGH * const cctkGH, int const c, int const grouptype); - void leave_local_mode (cGH * const cctkGH); + void enter_local_mode (cGH * cctkGH, int c, int lc, int grouptype); + void leave_local_mode (cGH * cctkGH); @@ -57,7 +57,7 @@ namespace Carpet { cGH * cctkGH; int ml; public: - mglevel_iterator (cGH const * const cctkGH); + mglevel_iterator (cGH const * cctkGH); ~mglevel_iterator (); bool done () const; void step (); @@ -67,7 +67,7 @@ namespace Carpet { cGH * cctkGH; int ml; public: - reverse_mglevel_iterator (cGH const * const cctkGH); + reverse_mglevel_iterator (cGH const * cctkGH); ~reverse_mglevel_iterator (); bool done () const; void step (); @@ -77,7 +77,7 @@ namespace Carpet { cGH * cctkGH; int rl; public: - reflevel_iterator (cGH const * const cctkGH); + reflevel_iterator (cGH const * cctkGH); ~reflevel_iterator (); bool done () const; void step (); @@ -87,7 +87,7 @@ namespace Carpet { cGH * cctkGH; int rl; public: - reverse_reflevel_iterator (cGH const * const cctkGH); + reverse_reflevel_iterator (cGH const * cctkGH); ~reverse_reflevel_iterator (); bool done () const; void step (); @@ -103,12 +103,23 @@ namespace Carpet { int grouptype; int m; public: - map_iterator (cGH const * const cctkGH, int const grouptype); + map_iterator (cGH const * cctkGH, int grouptype); ~map_iterator (); bool done () const; void step (); }; + class local_map_iterator { + cGH * cctkGH; + int grouptype; + int m; + public: + local_map_iterator (cGH const * cctkGH, int grouptype); + ~local_map_iterator (); + bool done () const; + void step (); + }; + // Loop over all components. If grouptype is CCTK_GF, then loop // over grid function components. If grouptype is CCTK_ARRAY (or // CCTK_SCALAR), then loop over grid array (or grid scalar) @@ -120,7 +131,7 @@ namespace Carpet { int grouptype; int c; public: - component_iterator (cGH const * const cctkGH, int const grouptype); + component_iterator (cGH const * cctkGH, int grouptype); ~component_iterator (); bool done () const; void step (); @@ -129,9 +140,9 @@ namespace Carpet { class local_component_iterator { cGH * cctkGH; int grouptype; - int c; + int lc; public: - local_component_iterator (cGH const * const cctkGH, int const grouptype); + local_component_iterator (cGH const * cctkGH, int grouptype); ~local_component_iterator (); bool done () const; void step (); @@ -201,6 +212,18 @@ namespace Carpet { map_loop_ = false; \ } while (false) +#define BEGIN_LOCAL_MAP_LOOP(cctkGH, grouptype) \ + do { \ + bool local_map_loop_ = true; \ + for (Carpet::local_map_iterator local_map_iter_(cctkGH, grouptype); \ + not local_map_iter_.done(); \ + local_map_iter_.step()) { +#define END_LOCAL_MAP_LOOP \ + } \ + assert (local_map_loop_); \ + local_map_loop_ = false; \ + } while (false) + #define BEGIN_COMPONENT_LOOP(cctkGH, grouptype) \ do { \ bool component_loop_ = true; \ @@ -232,8 +255,9 @@ namespace Carpet { class singlemap_escape { cGH * cctkGH; int c; + int lc; public: - singlemap_escape (cGH const * const cctkGH); + singlemap_escape (cGH const * cctkGH); ~singlemap_escape (); }; @@ -242,8 +266,9 @@ namespace Carpet { int grouptype; int m; int c; + int lc; public: - level_escape (cGH const * const cctkGH); + level_escape (cGH const * cctkGH); ~level_escape (); }; @@ -253,8 +278,9 @@ namespace Carpet { int grouptype; int m; int c; + int lc; public: - global_escape (cGH const * const cctkGH); + global_escape (cGH const * cctkGH); ~global_escape (); }; @@ -265,8 +291,9 @@ namespace Carpet { int grouptype; int m; int c; + int lc; public: - meta_escape (cGH const * const cctkGH); + meta_escape (cGH const * cctkGH); ~meta_escape (); }; @@ -325,30 +352,28 @@ namespace Carpet { class mglevel_setter { cGH * cctkGH; public: - mglevel_setter (cGH const * const cctkGH, int const ml); + mglevel_setter (cGH const * cctkGH, int ml); ~mglevel_setter (); }; class reflevel_setter { cGH * cctkGH; public: - reflevel_setter (cGH const * const cctkGH, int const rl); + reflevel_setter (cGH const * cctkGH, int rl); ~reflevel_setter (); }; class map_setter { cGH * cctkGH; public: - map_setter (cGH const * const cctkGH, - int const m, int const grouptype); + map_setter (cGH const * cctkGH, int m, int grouptype); ~map_setter (); }; class component_setter { cGH * cctkGH; public: - component_setter (cGH const * const cctkGH, - int const c, int const grouptype); + component_setter (cGH const * cctkGH, int c, int grouptype); ~component_setter (); }; diff --git a/Carpet/Carpet/src/variables.cc b/Carpet/Carpet/src/variables.cc index a27a5bacb..0bf834ff4 100644 --- a/Carpet/Carpet/src/variables.cc +++ b/Carpet/Carpet/src/variables.cc @@ -1,5 +1,4 @@ - -#include "variables.hh" +#include <variables.hh> @@ -51,6 +50,7 @@ namespace Carpet { int mc_grouptype; int map; int component; + int local_component; // Current refinement factors int timereflevelfact; @@ -90,9 +90,13 @@ namespace Carpet { bool do_allow_past_timelevels; // Is prolongation enabled? + // (This flag disables prolongation during MoL integration + // substeps.) bool do_prolongate; // Is tapering enabled? + // (This flag disables prolongation while the current refinement + // level is not aligned with the parent.) bool do_taper; // Should we warn about groups with insufficiently many time levels? @@ -106,6 +110,7 @@ namespace Carpet { vector<gh*> vhh; // [map] vector<dh*> vdd; // [map] vector<th*> vtt; // [map] + int regridding_epoch; // Data for the groups vector<groupdesc> groupdata; // [group] diff --git a/Carpet/Carpet/src/variables.hh b/Carpet/Carpet/src/variables.hh index 892664264..2746ec295 100644 --- a/Carpet/Carpet/src/variables.hh +++ b/Carpet/Carpet/src/variables.hh @@ -16,16 +16,16 @@ #include <mpi.h> -#include "cctk.h" +#include <cctk.h> -#include "bbox.hh" -#include "data.hh" -#include "dh.hh" -#include "ggf.hh" -#include "gh.hh" -#include "operators.hh" -#include "th.hh" -#include "vect.hh" +#include <bbox.hh> +#include <data.hh> +#include <dh.hh> +#include <ggf.hh> +#include <gh.hh> +#include <operators.hh> +#include <th.hh> +#include <vect.hh> #include "carpet_public.h" @@ -80,6 +80,7 @@ namespace Carpet { extern int mc_grouptype; // -1, CCTK_SCALAR/CCTK_ARRAY, CCTK_GF extern int map; extern int component; + extern int local_component; // -1 for non-local // Current refinement factors extern int timereflevelfact; @@ -126,9 +127,13 @@ namespace Carpet { extern bool do_allow_past_timelevels; // Is prolongation enabled? + // (This flag disables prolongation during MoL integration + // substeps.) extern bool do_prolongate; // Is tapering enabled? + // (This flag disables prolongation while the current refinement + // level is not aligned with the parent.) extern bool do_taper; // Should we warn about groups with insufficiently many time levels? @@ -142,6 +147,7 @@ namespace Carpet { extern vector<gh*> vhh; // [map] extern vector<dh*> vdd; // [map] extern vector<th*> vtt; // [map] + extern int regridding_epoch; // Data for the groups struct groupdesc { diff --git a/Carpet/Carpet/test/small.par b/Carpet/Carpet/test/small.par new file mode 100644 index 000000000..67b4aef5c --- /dev/null +++ b/Carpet/Carpet/test/small.par @@ -0,0 +1,16 @@ +ActiveThorns = " + Boundary + CarpetLib + Carpet + CoordBase + IOUtil + InitBase + InterpToArray + LoopControl + SymBase +" + +IO::out_dir = $parfile + +InterpToArray::nparrays1d = 1 +InterpToArray::parray1d_npoints_i = 1 diff --git a/Carpet/CarpetEvolutionMask/README b/Carpet/CarpetEvolutionMask/README index dcb1e73b0..a94811ca6 100644 --- a/Carpet/CarpetEvolutionMask/README +++ b/Carpet/CarpetEvolutionMask/README @@ -1,11 +1,12 @@ Cactus Code Thorn CarpetEvolutionMask -Thorn Author(s) : Christian D. Ott <cott@aei.mpg.de> - Erik Schnetter <schnetter@cct.lsu.edu> -Thorn Maintainer(s) : Christian D. Ott <cott@aei.mpg.de> - Erik Schnetter <schnetter@cct.lsu.edu> +Author(s) : Christian D. Ott <cott@aei.mpg.de> + Erik Schnetter <schnetter@cct.lsu.edu> +Maintainer(s): Christian D. Ott <cott@aei.mpg.de> + Erik Schnetter <schnetter@cct.lsu.edu> +Licence : GPLv2+ -------------------------------------------------------------------------- -Purpose of the thorn: +1. Purpose Provide a grid function "evolution_mask" which is zero for all grid points that do not need to be evolved because they are going to be diff --git a/Carpet/CarpetIOASCII/README b/Carpet/CarpetIOASCII/README index 35eabae48..3d942afef 100644 --- a/Carpet/CarpetIOASCII/README +++ b/Carpet/CarpetIOASCII/README @@ -1,7 +1,9 @@ Cactus Code Thorn CarpetIOASCII -Authors : Erik Schnetter <schnetter@uni-tuebingen.de> +Author(s) : Erik Schnetter <schnetter@cct.lsu.edu> +Maintainer(s): Erik Schnetter <schnetter@cct.lsu.edu> +Licence : GPLv2+ -------------------------------------------------------------------------- -Purpose of the thorn: +1. Purpose This thorn provides ASCII output for Carpet. diff --git a/Carpet/CarpetIOASCII/src/ioascii.cc b/Carpet/CarpetIOASCII/src/ioascii.cc index 2e742a57f..de1c341e8 100644 --- a/Carpet/CarpetIOASCII/src/ioascii.cc +++ b/Carpet/CarpetIOASCII/src/ioascii.cc @@ -34,6 +34,10 @@ namespace Carpet { } +#define GetParameter(parameter) \ + outdim == 0 ? out0D_##parameter : \ + outdim == 1 ? out1D_##parameter : \ + outdim == 2 ? out2D_##parameter : out3D_##parameter namespace CarpetIOASCII { @@ -154,7 +158,7 @@ namespace CarpetIOASCII { DECLARE_CCTK_PARAMETERS; // re-parse the 'IOASCII::out%dD_dir' parameter if it has changed - const char* the_out_dir = GetStringParameter("out%dD_dir"); + const char* the_out_dir = GetParameter(dir); if (CCTK_EQUALS (the_out_dir, "")) { the_out_dir = out_dir; } @@ -177,7 +181,7 @@ namespace CarpetIOASCII { } // re-parse the 'IOASCII::out%d_vars' parameter if it has changed - const char* const out_vars = GetStringParameter("out%dD_vars"); + const char* const out_vars = GetParameter(vars); if (strcmp (out_vars, my_out_vars)) { ostringstream parameter_name; parameter_name << "IOASCII::out" << outdim << "D_vars"; @@ -191,7 +195,7 @@ namespace CarpetIOASCII { int count = 0; ostringstream msg; msg << "Periodic " << outdim << "D AMR output requested for:"; - for (int vi=0; vi< CCTK_NumVars(); ++vi) { + for (int vi=0; vi<CCTK_NumVars(); ++vi) { if (requests.at(vi)) { ++count; char* const fullname = CCTK_FullName(vi); @@ -218,7 +222,7 @@ namespace CarpetIOASCII { static Carpet::Timer * timer = NULL; if (not timer) { ostringstream timer_name; - timer_name << "CarpetIOASCII<" << outdim << ">::OutputVarAs"; + timer_name << "CarpetIOASCII<" << outdim << ">::OutputGH"; timer = new Carpet::Timer (timer_name.str().c_str()); } @@ -262,7 +266,7 @@ namespace CarpetIOASCII { // check if output for this variable was requested individually by // a "<varname>{ out_every = <number> }" option string // this will overwrite the output criterion setting - const char* myoutcriterion = GetStringParameter("out%dD_criterion"); + const char* myoutcriterion = GetParameter(criterion); if (CCTK_EQUALS(myoutcriterion, "default")) { myoutcriterion = out_criterion; } @@ -278,7 +282,7 @@ namespace CarpetIOASCII { bool output_this_iteration = false; if (CCTK_EQUALS (myoutcriterion, "iteration")) { - int myoutevery = GetIntParameter("out%dD_every"); + int myoutevery = GetParameter(every); if (myoutevery == -2) { myoutevery = out_every; } @@ -295,7 +299,7 @@ namespace CarpetIOASCII { } } } else if (CCTK_EQUALS (myoutcriterion, "divisor")) { - int myoutevery = GetIntParameter("out%dD_every"); + int myoutevery = GetParameter(every); if (myoutevery == -2) { myoutevery = out_every; } @@ -307,7 +311,7 @@ namespace CarpetIOASCII { output_this_iteration = true; } } else if (CCTK_EQUALS (myoutcriterion, "time")) { - CCTK_REAL myoutdt = GetRealParameter("out%dD_dt"); + CCTK_REAL myoutdt = GetParameter(dt); if (myoutdt == -2) { myoutdt = out_dt; } @@ -536,33 +540,28 @@ namespace CarpetIOASCII { file); // Find the output offset - ivect offset; - if (groupdata.grouptype == CCTK_GF) { - offset = GetOutputOffset (cctkGH, m, dirs); - } else { - offset = 0; - } + const ivect offset = + groupdata.grouptype == CCTK_GF ? GetOutputOffset (cctkGH, m, dirs) : 0; + + const gh* const hh = arrdata.at(group).at(m).hh; + const dh* const dd = arrdata.at(group).at(m).dd; // Traverse all components on this multigrid level, refinement // level, and map const int c_min = 0; const int c_max = groupdata.grouptype == CCTK_GF ? - vhh.at(m)->components(reflevel) : + hh->components(reflevel) : groupdata.disttype != CCTK_DISTRIB_CONSTANT ? CCTK_nProcs(cctkGH) : 1; for (int c = c_min; c < c_max; ++ c) { - - const ggf* const ff = arrdata.at(group).at(m).data.at(var); - - const int tl_min = 0; - const int tl_max = output_all_timelevels ? num_tl : 1; - for (int tl = tl_min; tl < tl_max; ++tl) { + int const lc = hh->get_local_component(rl,c); + int const proc = hh->processor(rl,c); + if (dist::rank() == proc or dist::rank() == ioproc) { - const gdata* const data = (*ff) (tl, rl, c, ml); - const ibbox ext = GetOutputBBox (cctkGH, group, m, c, - data->extent()); + const ibbox& data_ext = dd->boxes.at(ml).at(rl).at(c).exterior; + const ibbox ext = GetOutputBBox (cctkGH, group, m, c, data_ext); CCTK_REAL coord_time; rvect coord_lower, coord_upper; @@ -572,7 +571,7 @@ namespace CarpetIOASCII { // Apply offset ivect offset1; if (groupdata.grouptype == CCTK_GF) { - const ibbox& baseext = vhh.at(m)->baseextents.at(ml).at(rl); + const ibbox& baseext = hh->baseextents.at(ml).at(rl); offset1 = baseext.lower() + offset * ext.stride(); } else { offset1 = offset * ext.stride(); @@ -583,35 +582,80 @@ namespace CarpetIOASCII { } } - vector<const gdata*> datas; - if (one_file_per_group) { - const int numvars = CCTK_NumVarsInGroupI(group); - datas.resize (numvars); - for (int n=0; n<numvars; ++n) { - const ggf* const ff1 = arrdata.at(group).at(m).data.at(n); - datas.at(n) = (*ff1) (tl, rl, c, ml); + const int tl_min = 0; + const int tl_max = output_all_timelevels ? num_tl : 1; + for (int tl = tl_min; tl < tl_max; ++tl) { + + mempool pool; + + const int n_min = one_file_per_group ? 0 : var; + const int n_max = + one_file_per_group ? CCTK_NumVarsInGroupI(group) : var+1; + vector<const gdata*> datas(n_max - n_min); + for (size_t n = 0; n < datas.size(); ++ n) { + if (dist::rank() == proc) { + const ggf* const ff = + arrdata.at(group).at(m).data.at(n + n_min); + datas.at(n) = (*ff) (tl, rl, lc, ml); + } else { + datas.at(n) = NULL; + } } - } else { - datas.resize (1); - datas.at(0) = data; - } - - WriteASCII (file, datas, ext, vindex, cctkGH->cctk_iteration, - offset1, dirs, - rl, ml, m, c, tl, - coord_time, coord_lower, coord_upper); - - // Append EOL after every component - if (dist::rank()==ioproc) { - if (separate_components) { + + vector<gdata*> tmpdatas(datas.size()); + + if (proc != ioproc) { + + for (size_t n = 0; n < datas.size(); ++ n) { + const ggf* const ff = + arrdata.at(group).at(m).data.at(n + n_min); + tmpdatas.at(n) = ff->typed_data (tl, rl, c, ml); + size_t const memsize = + tmpdatas.at(n)->allocsize (data_ext, ioproc); + void * const memptr = pool.alloc (memsize); + tmpdatas.at(n)->allocate(data_ext, ioproc, memptr, memsize); + } // for n + + for (comm_state state; not state.done(); state.step()) { + for (size_t n=0; n<datas.size(); ++n) { + tmpdatas.at(n)->copy_from + (state, datas.at(n), data_ext, ioproc, proc); + } + } + + } else { + + for (size_t n=0; n<datas.size(); ++n) { + tmpdatas.at(n) = const_cast<gdata*> (datas.at(n)); + } + + } + + if (dist::rank() == ioproc) { + WriteASCII (file, tmpdatas, ext, vindex, cctkGH->cctk_iteration, + offset1, dirs, + rl, ml, m, c, tl, + coord_time, coord_lower, coord_upper); + } + + if (proc != ioproc) { + for (size_t n=0; n<tmpdatas.size(); ++n) { + delete tmpdatas.at(n); + } + } + + // Append EOL after every component + if (dist::rank() == ioproc) { + if (separate_components) { + assert (file.good()); + file << eol; + } assert (file.good()); - file << eol; } - assert (file.good()); - } + + } // for tl - } // for tl - + } } // for c // Append EOL after every complete set of components @@ -916,16 +960,16 @@ namespace CarpetIOASCII { case 0: // 0D output offset[0] = GetGridOffset (cctkGH, m, 1, - "out%dD_point_xi", /*"out_point_xi"*/ NULL, - "out%dD_point_x", /*"out_point_x"*/ NULL, + "out0D_point_xi", /*"out_point_xi"*/ NULL, + "out0D_point_x", /*"out_point_x"*/ NULL, /*out_point_x*/ 0.0); offset[1] = GetGridOffset (cctkGH, m, 2, - "out%dD_point_yi", /*"out_point_yi"*/ NULL, - "out%dD_point_y", /*"out_point_y"*/ NULL, + "out0D_point_yi", /*"out_point_yi"*/ NULL, + "out0D_point_y", /*"out_point_y"*/ NULL, /*out_point_y*/ 0.0); offset[2] = GetGridOffset (cctkGH, m, 3, - "out%dD_point_zi", /*"out_point_zi"*/ NULL, - "out%dD_point_z", /*"out_point_z"*/ NULL, + "out0D_point_zi", /*"out_point_zi"*/ NULL, + "out0D_point_z", /*"out_point_z"*/ NULL, /*out_point_z*/ 0.0); break; @@ -934,32 +978,32 @@ namespace CarpetIOASCII { switch (dirs[0]) { case 0: offset[1] = GetGridOffset (cctkGH, m, 2, - "out%dD_xline_yi", "out_xline_yi", - "out%dD_xline_y", "out_xline_y", + "out1D_xline_yi", "out_xline_yi", + "out1D_xline_y", "out_xline_y", out_xline_y); offset[2] = GetGridOffset (cctkGH, m, 3, - "out%dD_xline_zi", "out_xline_zi", - "out%dD_xline_z", "out_xline_z", + "out1D_xline_zi", "out_xline_zi", + "out1D_xline_z", "out_xline_z", out_xline_z); break; case 1: offset[0] = GetGridOffset (cctkGH, m, 1, - "out%dD_yline_xi", "out_yline_xi", - "out%dD_yline_x", "out_yline_x", + "out1D_yline_xi", "out_yline_xi", + "out1D_yline_x", "out_yline_x", out_yline_x); offset[2] = GetGridOffset (cctkGH, m, 3, - "out%dD_yline_zi", "out_yline_zi", - "out%dD_yline_z", "out_yline_z", + "out1D_yline_zi", "out_yline_zi", + "out1D_yline_z", "out_yline_z", out_yline_z); break; case 2: offset[0] = GetGridOffset (cctkGH, m, 1, - "out%dD_zline_xi", "out_zline_xi", - "out%dD_zline_x", "out_zline_x", + "out1D_zline_xi", "out_zline_xi", + "out1D_zline_x", "out_zline_x", out_zline_x); offset[1] = GetGridOffset (cctkGH, m, 2, - "out%dD_zline_yi", "out_zline_yi", - "out%dD_zline_y", "out_zline_y", + "out1D_zline_yi", "out_zline_yi", + "out1D_zline_y", "out_zline_y", out_zline_y); break; case 3: @@ -974,18 +1018,18 @@ namespace CarpetIOASCII { // 2D output if (dirs[0]==0 and dirs[1]==1) { offset[2] = GetGridOffset (cctkGH, m, 3, - "out%dD_xyplane_zi", "out_xyplane_zi", - "out%dD_xyplane_z", "out_xyplane_z", + "out2D_xyplane_zi", "out_xyplane_zi", + "out2D_xyplane_z", "out_xyplane_z", out_xyplane_z); } else if (dirs[0]==0 and dirs[1]==2) { offset[1] = GetGridOffset (cctkGH, m, 2, - "out%dD_xzplane_yi", "out_xzplane_yi", - "out%dD_xzplane_y", "out_xzplane_y", + "out2D_xzplane_yi", "out_xzplane_yi", + "out2D_xzplane_y", "out_xzplane_y", out_xzplane_y); } else if (dirs[0]==1 and dirs[1]==2) { offset[0] = GetGridOffset (cctkGH, m, 1, - "out%dD_yzplane_xi", "out_yzplane_xi", - "out%dD_yzplane_x", "out_yzplane_x", + "out2D_yzplane_xi", "out_yzplane_xi", + "out2D_yzplane_x", "out_yzplane_x", out_yzplane_x); } else { assert (0); @@ -1006,11 +1050,10 @@ namespace CarpetIOASCII { // Omit symmetry and ghost zones if requested - template<int outdim> - ibbox IOASCII<outdim>::GetOutputBBox (const cGH* const cctkGH, - const int group, - const int m, const int c, - const ibbox& ext) + ibbox GetOutputBBox (const cGH* const cctkGH, + const int group, + const int m, const int c, + const ibbox& ext) { DECLARE_CCTK_PARAMETERS; @@ -1074,12 +1117,11 @@ namespace CarpetIOASCII { // Determine coordinates - template<int outdim> - void IOASCII<outdim>::GetCoordinates (const cGH* const cctkGH, const int m, - const cGroup& groupdata, - const ibbox& ext, - CCTK_REAL& coord_time, - rvect& coord_lower, rvect& coord_upper) + void GetCoordinates (const cGH* const cctkGH, const int m, + const cGroup& groupdata, + const ibbox& ext, + CCTK_REAL& coord_time, + rvect& coord_lower, rvect& coord_upper) { coord_time = cctkGH->cctk_time; @@ -1108,16 +1150,12 @@ namespace CarpetIOASCII { - template<int outdim> - int IOASCII<outdim> - ::GetGridOffset (const cGH* const cctkGH, const int m, const int dir, - const char* const itempl, const char* const iglobal, - const char* const ctempl, const char* const cglobal, - const CCTK_REAL cfallback) + int GetGridOffset (const cGH* const cctkGH, const int m, const int dir, + const char* const iparam, const char* const iglobal, + const char* const cparam, const char* const cglobal, + const CCTK_REAL cfallback) { // First choice: explicit coordinate - char cparam[1000]; - snprintf (cparam, sizeof cparam, ctempl, outdim); const int ncparam = CCTK_ParameterQueryTimesSet (cparam, CCTK_THORNSTRING); assert (ncparam >= 0); if (ncparam > 0) { @@ -1132,8 +1170,6 @@ namespace CarpetIOASCII { } // Second choice: explicit index - char iparam[1000]; - snprintf (iparam, sizeof iparam, itempl, outdim); const int niparam = CCTK_ParameterQueryTimesSet (iparam, CCTK_THORNSTRING); assert (niparam >= 0); if (niparam > 0) { @@ -1184,10 +1220,8 @@ namespace CarpetIOASCII { - template<int outdim> - int IOASCII<outdim> - ::CoordToOffset (const cGH* cctkGH, const int m, const int dir, - const CCTK_REAL coord, const int ifallback) + int CoordToOffset (const cGH* cctkGH, const int m, const int dir, + const CCTK_REAL coord, const int ifallback) { assert (m>=0 and m<Carpet::maps and dir>=1 and dir<=dim); @@ -1212,59 +1246,6 @@ namespace CarpetIOASCII { - template<int outdim> - const char* IOASCII<outdim> - ::GetStringParameter (const char* const parametertemplate) - { - char parametername[1000]; - snprintf (parametername, sizeof parametername, parametertemplate, outdim); - int ptype; - const char* const* const ppval = (const char* const*)CCTK_ParameterGet - (parametername, CCTK_THORNSTRING, &ptype); - assert (ppval); - const char* const pval = *ppval; - assert (ptype == PARAMETER_STRING or ptype == PARAMETER_KEYWORD); - return pval; - } - - - - template<int outdim> - CCTK_INT IOASCII<outdim> - ::GetIntParameter (const char* const parametertemplate) - { - char parametername[1000]; - snprintf (parametername, sizeof parametername, parametertemplate, outdim); - int ptype; - const CCTK_INT* const ppval - = (const CCTK_INT*)CCTK_ParameterGet - (parametername, CCTK_THORNSTRING, &ptype); - assert (ppval); - assert (ptype == PARAMETER_INT or ptype == PARAMETER_BOOLEAN); - const CCTK_INT pval = *ppval; - return pval; - } - - - - template<int outdim> - CCTK_REAL IOASCII<outdim> - ::GetRealParameter (const char* const parametertemplate) - { - char parametername[1000]; - snprintf (parametername, sizeof parametername, parametertemplate, outdim); - int ptype; - const CCTK_REAL* const ppval - = (const CCTK_REAL*)CCTK_ParameterGet - (parametername, CCTK_THORNSTRING, &ptype); - assert (ppval); - assert (ptype == PARAMETER_REAL); - const CCTK_REAL pval = *ppval; - return pval; - } - - - CCTK_REAL nicelooking (const CCTK_REAL val, const CCTK_REAL base) { @@ -1276,7 +1257,7 @@ namespace CarpetIOASCII { // Output template<int outdim> void WriteASCII (ostream& os, - vector<const gdata*> const gfdatas, + vector<gdata*> const gfdatas, const bbox<int,dim>& gfext, const int vi, const int time, @@ -1292,228 +1273,196 @@ namespace CarpetIOASCII { const vect<CCTK_REAL,dim>& coord_upper) { DECLARE_CCTK_PARAMETERS; - + assert (outdim<=dim); + const int vartype = CCTK_VarTypeI(vi); - - bool all_on_root = true; - for (size_t n=0; n<gfdatas.size(); ++n) { - all_on_root &= gfdatas.at(n)->proc() == ioproc; - } - if (all_on_root) { - // output on processor 0 - - if (dist::rank() == ioproc) { - - if (CCTK_EQUALS (out_fileinfo, "axis labels") or - CCTK_EQUALS (out_fileinfo, "all")) - { - - assert (os.good()); - - os << "# iteration " << time << eol - << "# refinement level " << rl - << " multigrid level " << ml - << " map " << m - << " component " << c - << " time level " << tl - << eol - << "# column format: 1:it\t2:tl 3:rl 4:c 5:ml"; - int col=6; - assert (dim>=1 and dim<=3); - const char* const coords = "xyz"; - for (int d=0; d<dim; ++d) { - os << (d==0 ? "\t" : " ") << col++ << ":i" << coords[d]; - } - os << "\t" << col++ << ":time"; + + if (CCTK_EQUALS (out_fileinfo, "axis labels") or + CCTK_EQUALS (out_fileinfo, "all")) + { + + assert (os.good()); + + os << "# iteration " << time << eol + << "# refinement level " << rl + << " multigrid level " << ml + << " map " << m + << " component " << c + << " time level " << tl + << eol + << "# column format: 1:it\t2:tl 3:rl 4:c 5:ml"; + int col=6; + assert (dim>=1 and dim<=3); + const char* const coords = "xyz"; + for (int d=0; d<dim; ++d) { + os << (d==0 ? "\t" : " ") << col++ << ":i" << coords[d]; + } + os << "\t" << col++ << ":time"; + for (int d=0; d<dim; ++d) { + os << (d==0 ? "\t" : " ") << col++ << ":" << coords[d]; + } + os << "\t" << col << ":data" << eol; + if (one_file_per_group) { + os << "# data columns:"; + int const gindex = CCTK_GroupIndexFromVarI(vi); + int const firstvar = CCTK_FirstVarIndexI(gindex); + int const numvars = CCTK_NumVarsInGroupI(gindex); + for (int n=firstvar; n<firstvar+numvars; ++n) { + os << " " << col << ":" << CCTK_VarName(n); + col += CarpetSimpleMPIDatatypeLength (vartype); + } + os << eol; + } + + } // if out_fileinfo + + // boolean that says if we are doing 1D-diagonal output + // This is not beautiful, but works for the moment + bool const diagonal_output = outdim == 1 and dirs[0] == 3; + + if (not diagonal_output) { // not outputting the diagonal + + const vect<int,outdim> lo = gfext.lower()[dirs]; + const vect<int,outdim> up = gfext.upper()[dirs]; + const vect<int,outdim> str = gfext.stride()[dirs]; + const bbox<int,outdim> ext(lo,up,str); + + // Check whether the output origin is contained in the extent of + // the data that should be output + ivect org1(org); + for (int d=0; d<outdim; ++d) org1[dirs[d]] = ext.lower()[d]; + if (gfext.contains(org1)) { + + typename bbox<int,outdim>::iterator it=ext.begin(); + do { + + ivect index(org); + for (int d=0; d<outdim; ++d) index[dirs[d]] = (*it)[d]; + os << time << "\t" << tl << " " << rl << " " << c << " " << ml + << "\t"; + for (int d=0; d<dim-1; ++d) os << index[d] << " "; + os << index[dim-1]; + os << "\t" << coord_time << "\t"; for (int d=0; d<dim; ++d) { - os << (d==0 ? "\t" : " ") << col++ << ":" << coords[d]; - } - os << "\t" << col << ":data" << eol; - if (one_file_per_group) { - os << "# data columns:"; - int const gindex = CCTK_GroupIndexFromVarI(vi); - int const firstvar = CCTK_FirstVarIndexI(gindex); - int const numvars = CCTK_NumVarsInGroupI(gindex); - for (int n=firstvar; n<firstvar+numvars; ++n) { - os << " " << col << ":" << CCTK_VarName(n); - col += CarpetSimpleMPIDatatypeLength (vartype); + if (d > 0) os << " "; + assert (gfext.upper()[d] - gfext.lower()[d] >= 0); + if (gfext.upper()[d] - gfext.lower()[d] == 0) { + os << coord_lower[d]; + } else { + CCTK_REAL const dx + = ((coord_upper[d] - coord_lower[d]) + / (gfext.upper()[d] - gfext.lower()[d])); + os << (nicelooking + (coord_lower[d] + (index[d] - gfext.lower()[d]) * dx, + dx * 1.0e-8)); } - os << eol; } - - } // if out_fileinfo - - // boolean that says if we are doing 1D-diagonal output - // This is not beautiful, but works for the moment - bool const diagonal_output = outdim == 1 and dirs[0] == 3; - - if (not diagonal_output) { // not outputting the diagonal - - const vect<int,outdim> lo = gfext.lower()[dirs]; - const vect<int,outdim> up = gfext.upper()[dirs]; - const vect<int,outdim> str = gfext.stride()[dirs]; - const bbox<int,outdim> ext(lo,up,str); - - // Check whether the output origin is contained in the extent - // of the data that should be output - ivect org1(org); - for (int d=0; d<outdim; ++d) org1[dirs[d]] = ext.lower()[d]; - if (gfext.contains(org1)) { - - typename bbox<int,outdim>::iterator it=ext.begin(); - do { - - ivect index(org); - for (int d=0; d<outdim; ++d) index[dirs[d]] = (*it)[d]; - os << time << "\t" << tl << " " << rl << " " << c << " " << ml - << "\t"; - for (int d=0; d<dim-1; ++d) os << index[d] << " "; - os << index[dim-1]; - os << "\t" << coord_time << "\t"; - for (int d=0; d<dim; ++d) { - if (d > 0) os << " "; - assert (gfext.upper()[d] - gfext.lower()[d] >= 0); - if (gfext.upper()[d] - gfext.lower()[d] == 0) { - os << coord_lower[d]; - } else { - CCTK_REAL const dx - = ((coord_upper[d] - coord_lower[d]) - / (gfext.upper()[d] - gfext.lower()[d])); - os << (nicelooking - (coord_lower[d] + (index[d] - gfext.lower()[d]) * dx, - dx * 1.0e-8)); - } - } - os << "\t"; - for (size_t n=0; n<gfdatas.size(); ++n) { - const gdata* gfdata = gfdatas.at(n); - if (n > 0) os << " "; - switch (vartype) { + os << "\t"; + for (size_t n=0; n<gfdatas.size(); ++n) { + const gdata* gfdata = gfdatas.at(n); + if (n > 0) os << " "; + switch (vartype) { #define TYPECASE(N,T) \ - case N: \ - os << (*(const data<T>*)gfdata)[index]; \ - break; + case N: \ + os << (*(const data<T>*)gfdata)[index]; \ + break; #include "carpet_typecase.hh" #undef TYPECASE - default: - UnsupportedVarType(vi); - } - } // for n - os << eol; - - ++it; - - for (int d=0; d<outdim; ++d) { - if ((*it)[d]!=(*ext.end())[d]) break; - os << eol; - } - - } while (it!=ext.end()); + default: + UnsupportedVarType(vi); + } + } // for n + os << eol; - } else { - - os << "#" << eol; - - } // if not ext contains org - - assert (os.good()); - - } else { // taking care of the diagonal - - const vect<int,3> lo = gfext.lower(); - const vect<int,3> up = gfext.upper(); - const vect<int,3> str = gfext.stride(); - const bbox<int,3> ext(lo,up,str); - - gh const & hh = *vhh.at(m); - ibbox const & base = hh.baseextents.at(mglevel).at(reflevel); - - assert (base.stride()[0] == base.stride()[1] - and base.stride()[0] == base.stride()[2]); + ++it; - // output the data on the diagonal - for (int i=maxval(base.lower()); - i<=minval(base.upper()); i+=base.stride()[0]) - { - - ivect const pos = ivect(i,i,i); - - // check if the point in question is in our gf's extent - if(gfext.contains(pos)) { - os << time << "\t" << tl << " " << rl << " " << c << " " << ml - << "\t"; - for (int d=0; d<dim-1; ++d) os << pos[d] << " "; os << pos[dim-1]; - os << "\t" << coord_time << "\t"; - for (int d=0; d<dim; ++d) { - if (d > 0) os << " "; - CCTK_REAL const dx = ((coord_upper[d] - coord_lower[d]) - / (gfext.upper()[d] - gfext.lower()[d])); - os << (nicelooking - (coord_lower[d] + (pos[d] - gfext.lower()[d]) * dx, - dx * 1.0e-8)); - } - os << "\t"; - for (size_t n=0; n<gfdatas.size(); ++n) { - const gdata* gfdata = gfdatas.at(n); - if (n > 0) os << " "; - switch (vartype) { + for (int d=0; d<outdim; ++d) { + if ((*it)[d]!=(*ext.end())[d]) break; + os << eol; + } + + } while (it!=ext.end()); + + } else { + + os << "#" << eol; + + } // if not ext contains org + + assert (os.good()); + + } else { // taking care of the diagonal + + const ivect lo = gfext.lower(); + const ivect up = gfext.upper(); + const ivect str = gfext.stride(); + const ibbox ext(lo,up,str); + + gh const & hh = *vhh.at(m); + ibbox const & base = hh.baseextents.at(mglevel).at(reflevel); + + assert (base.stride()[0] == base.stride()[1] and + base.stride()[0] == base.stride()[2]); + + // output the data on the diagonal + for (int i=maxval(base.lower()); + i<=minval(base.upper()); i+=base.stride()[0]) + { + + ivect const pos = ivect(i,i,i); + + // check if the point in question is in our gf's extent + if(gfext.contains(pos)) { + os << time << "\t" << tl << " " << rl << " " << c << " " << ml + << "\t"; + for (int d=0; d<dim-1; ++d) os << pos[d] << " "; os << pos[dim-1]; + os << "\t" << coord_time << "\t"; + for (int d=0; d<dim; ++d) { + if (d > 0) os << " "; + assert (gfext.upper()[d] - gfext.lower()[d] >= 0); + if (gfext.upper()[d] - gfext.lower()[d] == 0) { + os << coord_lower[d]; + } else { + CCTK_REAL const dx = ((coord_upper[d] - coord_lower[d]) + / (gfext.upper()[d] - gfext.lower()[d])); + os << (nicelooking + (coord_lower[d] + (pos[d] - gfext.lower()[d]) * dx, + dx * 1.0e-8)); + } + } + os << "\t"; + for (size_t n=0; n<gfdatas.size(); ++n) { + const gdata* gfdata = gfdatas.at(n); + if (n > 0) os << " "; + switch (vartype) { #define TYPECASE(N,T) \ - case N: \ - os << (*(const data<T>*)gfdata)[pos]; \ - break; + case N: \ + os << (*(const data<T>*)gfdata)[pos]; \ + break; #include "carpet_typecase.hh" #undef TYPECASE - default: - UnsupportedVarType(vi); - } - } // for n - - os << eol; - - } else { - - os << "#" << eol; - - } // if not ext contains org - - } // end for loop + default: + UnsupportedVarType(vi); + } + } // for n - os << eol; + os << eol; - assert (os.good()); + } else { - } // if(dirs[0]<3) - - } // if(dist::...) - } else { - // copy to processor 0 and output there + os << "#" << eol; + + } // if not ext contains org + + } // end for loop - mempool pool; - vector<gdata*> tmps (gfdatas.size()); - for (size_t n=0; n<gfdatas.size(); ++n) { - tmps.at(n) = gfdatas.at(n)->make_typed (vi, error_centered, op_sync); - size_t const memsize = - tmps.at(n)->allocsize (gfdatas.at(n)->extent(), ioproc); - void * const memptr = pool.alloc (memsize); - tmps.at(n)->allocate(gfdatas.at(n)->extent(), ioproc, memptr, memsize); - } - for (comm_state state; not state.done(); state.step()) { - for (size_t n=0; n<gfdatas.size(); ++n) { - tmps.at(n)->copy_from (state, gfdatas.at(n), gfdatas.at(n)->extent()); - } - } - vector<const gdata*> ctmps (gfdatas.size()); - for (size_t n=0; n<gfdatas.size(); ++n) { - ctmps.at(n) = tmps.at(n); - } - WriteASCII (os, ctmps, gfext, vi, time, org, dirs, rl, ml, m, c, tl, - coord_time, coord_lower, coord_upper); - for (size_t n=0; n<gfdatas.size(); ++n) { - delete tmps.at(n); - } + os << eol; - } + assert (os.good()); + + } // if(dirs[0]<3) + } @@ -1526,7 +1475,7 @@ namespace CarpetIOASCII { template void WriteASCII (ostream& os, - vector<const gdata*> const gfdatas, + vector<gdata*> const gfdatas, const bbox<int,dim>& gfext, const int vi, const int time, @@ -1543,7 +1492,7 @@ namespace CarpetIOASCII { template void WriteASCII (ostream& os, - vector<const gdata*> const gfdatas, + vector<gdata*> const gfdatas, const bbox<int,dim>& gfext, const int vi, const int time, @@ -1560,7 +1509,7 @@ namespace CarpetIOASCII { template void WriteASCII (ostream& os, - vector<const gdata*> const gfdatas, + vector<gdata*> const gfdatas, const bbox<int,dim>& gfext, const int vi, const int time, @@ -1577,7 +1526,7 @@ namespace CarpetIOASCII { template void WriteASCII (ostream& os, - vector<const gdata*> const gfdatas, + vector<gdata*> const gfdatas, const bbox<int,dim>& gfext, const int vi, const int time, diff --git a/Carpet/CarpetIOASCII/src/ioascii.hh b/Carpet/CarpetIOASCII/src/ioascii.hh index 9713689b9..08b7789d6 100644 --- a/Carpet/CarpetIOASCII/src/ioascii.hh +++ b/Carpet/CarpetIOASCII/src/ioascii.hh @@ -9,58 +9,77 @@ namespace CarpetIOASCII { - + using namespace std; - - - + + + // Scheduled functions extern "C" { int CarpetIOASCIIStartup (void); void CarpetIOASCIIInit (CCTK_ARGUMENTS); } - - - + + + // routines which are independent of the output dimension + static ibbox GetOutputBBox (const cGH* cctkGH, + int group, + int m, int c, + const ibbox& ext); + + static void GetCoordinates (const cGH* cctkGH, int m, + const cGroup& groupdata, + const ibbox& ext, + CCTK_REAL& coord_time, + rvect& coord_lower, rvect& coord_upper); + + static int GetGridOffset (const cGH* cctkGH, int m, int dir, + const char* iparam, const char* iglobal, + const char* cparam, const char* cglobal, + CCTK_REAL cfallback); + static int CoordToOffset (const cGH* cctkGH, int m, int dir, + CCTK_REAL coord, int ifallback); + + // Everything is a class template, so that it can easily be // instantiated for all output dimensions - + template<int outdim> struct IOASCII { - + // name of the output directory static char* my_out_dir; - + // list of variables to output static char* my_out_vars; - + // I/O request description list (for all variables) static vector<ioRequest*> requests; - - - + + + // Scheduled functions static int Startup(); - + // Registered functions static void* SetupGH (tFleshConfig* fc, int convLevel, cGH* cctkGH); - + static int OutputGH (const cGH* cctkGH); static int OutputVarAs (const cGH* cctkGH, const char* varname, const char* alias); static int TimeToOutput (const cGH* cctkGH, int vindex); static int TriggerOutput (const cGH* cctkGH, int vindex); - + // Other functions static void CheckSteerableParameters (const cGH* cctkGH); - + static bool DidOutput (const cGH* cctkGH, int vindex, string basefilename, bool& is_new_file, bool& truncate_file); - + static bool DirectionIsRequested (const vect<int,outdim>& dirs); - + static void OutputDirection (const cGH* cctkGH, int vindex, string alias, @@ -78,37 +97,15 @@ namespace CarpetIOASCII { bool is_new_file, bool truncate_file, fstream& file); - + static void CloseFile (const cGH* cctkGH, fstream& file); - + static ivect GetOutputOffset (const cGH* cctkGH, int m, const vect<int,outdim>& dirs); - - static ibbox GetOutputBBox (const cGH* cctkGH, - int group, - int m, int c, - const ibbox& ext); - - static void GetCoordinates (const cGH* cctkGH, int m, - const cGroup& groupdata, - const ibbox& ext, - CCTK_REAL& coord_time, - rvect& coord_lower, rvect& coord_upper); - - static int GetGridOffset (const cGH* cctkGH, int m, int dir, - const char* itempl, const char* iglobal, - const char* ctempl, const char* cglobal, - CCTK_REAL cfallback); - static int CoordToOffset (const cGH* cctkGH, int m, int dir, - CCTK_REAL coord, int ifallback); - - static const char* GetStringParameter (const char* parametertemplate); - static CCTK_INT GetIntParameter (const char* parametertemplate); - static CCTK_REAL GetRealParameter (const char* parametertemplate); - + }; // struct IOASCII - + } // namespace CarpetIOASCII #endif // ! defined CARPETIOASCII_HH diff --git a/Carpet/CarpetIOASCII/src/make.configuration.deps b/Carpet/CarpetIOASCII/src/make.configuration.deps index 5bfdf71ba..e2cc0712b 100644 --- a/Carpet/CarpetIOASCII/src/make.configuration.deps +++ b/Carpet/CarpetIOASCII/src/make.configuration.deps @@ -4,7 +4,7 @@ CARPETIOASCII_BUILD_DIR = $(BUILD_DIR)/CarpetIOASCII CARPETIOASCII_SRC_DIR = $(PACKAGE_DIR)/Carpet/CarpetIOASCII/src/util CARPETIOASCII_CFLAGS = -DCCODE $(CFLAGS) -CARPETIOASCII_LDFLAGS = $(DEBUG_LD) $(LDFLAGS) $(EXTRAFLAGS) +CARPETIOASCII_LDFLAGS = $(DEBUG_LD) $(LDFLAGS) $(EXTRAFLAGS) $(GENERAL_LIBRARIES) # add includes CARPETIOASCII_CFLAGS += -I$(CONFIG) -I$(BINDINGS_DIR)/include -I$(FLESH_DIR)/include diff --git a/Carpet/CarpetIOASCII/src/util/Carpet2ygraph.pl b/Carpet/CarpetIOASCII/src/util/Carpet2ygraph.pl index 29a6a0483..29a6a0483 100755..100644 --- a/Carpet/CarpetIOASCII/src/util/Carpet2ygraph.pl +++ b/Carpet/CarpetIOASCII/src/util/Carpet2ygraph.pl diff --git a/Carpet/CarpetIOASCII/src/util/Carpet2ygraphCat.pl b/Carpet/CarpetIOASCII/src/util/Carpet2ygraphCat.pl index de8ad2626..de8ad2626 100755..100644 --- a/Carpet/CarpetIOASCII/src/util/Carpet2ygraphCat.pl +++ b/Carpet/CarpetIOASCII/src/util/Carpet2ygraphCat.pl diff --git a/Carpet/CarpetIOASCII/src/util/mergeCarpetIOASCII.pl b/Carpet/CarpetIOASCII/src/util/mergeCarpetIOASCII.pl index 6072832b2..6072832b2 100755..100644 --- a/Carpet/CarpetIOASCII/src/util/mergeCarpetIOASCII.pl +++ b/Carpet/CarpetIOASCII/src/util/mergeCarpetIOASCII.pl diff --git a/Carpet/CarpetIOBasic/README b/Carpet/CarpetIOBasic/README index a0b0fa1f2..856666e42 100644 --- a/Carpet/CarpetIOBasic/README +++ b/Carpet/CarpetIOBasic/README @@ -1,8 +1,9 @@ Cactus Code Thorn CarpetIOBasic -Thorn Author(s) : Erik Schnetter <schnetter@cct.lsu.edu> -Thorn Maintainer(s) : Erik Schnetter <schnetter@cct.lsu.edu> +Author(s) : Erik Schnetter <schnetter@cct.lsu.edu> +Maintainer(s): Erik Schnetter <schnetter@cct.lsu.edu> +Licence : GPLv2+ -------------------------------------------------------------------------- -Purpose of the thorn: +1. Purpose This thorn provides info output for Carpet. diff --git a/Carpet/CarpetIOHDF5/README b/Carpet/CarpetIOHDF5/README index 93df6aa4e..21040ec18 100644 --- a/Carpet/CarpetIOHDF5/README +++ b/Carpet/CarpetIOHDF5/README @@ -1,8 +1,10 @@ Cactus Code Thorn CarpetIOHDF5 -Authors : Erik Schnetter <schnetter@aei.mpg.de> +Author(s) : Erik Schnetter <schnetter@cct.lsu.edu> +Maintainer(s): Erik Schnetter <schnetter@cct.lsu.edu> +Licence : GPLv2+ -------------------------------------------------------------------------- -Purpose of the thorn: +1. Purpose This thorn provides HDF5 based file I/O for Carpet. See http://www.hdfgroup.org/HDF5/ for information about HDF5. diff --git a/Carpet/CarpetIOHDF5/doc/documentation.tex b/Carpet/CarpetIOHDF5/doc/documentation.tex index 4f449c2fd..dff8e30e2 100644 --- a/Carpet/CarpetIOHDF5/doc/documentation.tex +++ b/Carpet/CarpetIOHDF5/doc/documentation.tex @@ -25,7 +25,12 @@ % Do not delete next line % START CACTUS THORNGUIDE +\ifx\ThisThorn\undefined \newcommand{\ThisThorn}{{\it CarpetIOHDF5}} +\else +\renewcommand{\ThisThorn}{{\it CarpetIOHDF5}} +\fi + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{abstract} diff --git a/Carpet/CarpetIOHDF5/interface.ccl b/Carpet/CarpetIOHDF5/interface.ccl index a2ef8350e..521e023a9 100644 --- a/Carpet/CarpetIOHDF5/interface.ccl +++ b/Carpet/CarpetIOHDF5/interface.ccl @@ -24,6 +24,10 @@ CCTK_INT next_output_iteration TYPE=scalar CCTK_REAL next_output_time TYPE=scalar CCTK_INT this_iteration TYPE=scalar +CCTK_INT last_output_iteration_slice[3] TYPE=scalar +CCTK_REAL last_output_time_slice[3] TYPE=scalar +CCTK_INT this_iteration_slice[3] TYPE=scalar + CCTK_INT FUNCTION Coord_GroupSystem \ (CCTK_POINTER_TO_CONST IN GH, \ @@ -37,6 +41,16 @@ CCTK_INT FUNCTION \ USES FUNCTION MultiPatch_MapIsCartesian +# Determine which boundaries are symmetry boundaries +CCTK_INT FUNCTION \ + SymmetryTableHandleForGrid (CCTK_POINTER_TO_CONST IN cctkGH) +REQUIRES FUNCTION SymmetryTableHandleForGrid + +CCTK_INT FUNCTION \ + SymmetryTableHandleForGI (CCTK_POINTER_TO_CONST IN cctkGH, \ + CCTK_INT IN group_index) +REQUIRES FUNCTION SymmetryTableHandleForGI + # Check whether existing output files should be truncated or not CCTK_INT FUNCTION IO_TruncateOutputFiles \ @@ -53,12 +67,6 @@ FUNCTION UniqueConfigID (CCTK_POINTER_TO_CONST IN cctkGH) USES FUNCTION UniqueConfigID # Return a pointer to an unmodifiable C string -# which contains a unique ID for this source tree -CCTK_POINTER_TO_CONST \ -FUNCTION UniqueSourceID (CCTK_POINTER_TO_CONST IN cctkGH) -USES FUNCTION UniqueSourceID - -# Return a pointer to an unmodifiable C string # which contains a unique ID for this build CCTK_POINTER_TO_CONST \ FUNCTION UniqueBuildID (CCTK_POINTER_TO_CONST IN cctkGH) diff --git a/Carpet/CarpetIOHDF5/make.configuration.defn b/Carpet/CarpetIOHDF5/make.configuration.defn new file mode 100644 index 000000000..b2c159945 --- /dev/null +++ b/Carpet/CarpetIOHDF5/make.configuration.defn @@ -0,0 +1,2 @@ +# add the Carpet HDF5-to-ASCII converter/slicer +ALL_UTILS += hdf5toascii_slicer hdf5_slicer diff --git a/Carpet/CarpetIOHDF5/param.ccl b/Carpet/CarpetIOHDF5/param.ccl index bbaca928b..cc017adcb 100644 --- a/Carpet/CarpetIOHDF5/param.ccl +++ b/Carpet/CarpetIOHDF5/param.ccl @@ -31,6 +31,30 @@ USES STRING recover_dir USES STRING recover_file USES STRING filereader_ID_dir +# 1D slice output +USES CCTK_INT out_xline_yi +USES CCTK_INT out_xline_zi +USES CCTK_INT out_yline_xi +USES CCTK_INT out_yline_zi +USES CCTK_INT out_zline_xi +USES CCTK_INT out_zline_yi + +USES CCTK_REAL out_xline_y +USES CCTK_REAL out_xline_z +USES CCTK_REAL out_yline_x +USES CCTK_REAL out_yline_z +USES CCTK_REAL out_zline_x +USES CCTK_REAL out_zline_y + +# 2D slice output +USES CCTK_INT out_xyplane_zi +USES CCTK_INT out_xzplane_yi +USES CCTK_INT out_yzplane_xi + +USES CCTK_REAL out_xyplane_z +USES CCTK_REAL out_xzplane_y +USES CCTK_REAL out_yzplane_x + shares: Cactus @@ -46,11 +70,44 @@ STRING out_dir "Name of CarpetIOHDF5 output directory, overrides 'IO::out_dir'" ".+" :: "Not empty: directory name" } "" +CCTK_STRING out0D_dir "Name of 0D HDF5 slice output directory, overrides IO::out_dir" STEERABLE = ALWAYS +{ + "^$" :: "Empty: use IO::out_dir" + ".+" :: "Not empty: directory name" +} "" + +CCTK_STRING out1D_dir "Name of 1D HDF5 slice output directory, overrides IO::out_dir" STEERABLE = ALWAYS +{ + "^$" :: "Empty: use IO::out_dir" + ".+" :: "Not empty: directory name" +} "" + +CCTK_STRING out2D_dir "Name of 2D HDF5 slice output directory, overrides IO::out_dir" STEERABLE = ALWAYS +{ + "^$" :: "Empty: use IO::out_dir" + ".+" :: "Not empty: directory name" +} "" + STRING out_vars "Variables to output in CarpetIOHDF5 file format" STEERABLE = ALWAYS { "" :: "List of group or variable names" } "" +CCTK_STRING out0D_vars "Variables to output in 0D HDF5 file format" STEERABLE = ALWAYS +{ + "" :: "List of group or variable names" +} "" + +CCTK_STRING out1D_vars "Variables to output in 1D HDF5 file format" STEERABLE = ALWAYS +{ + "" :: "List of group or variable names" +} "" + +CCTK_STRING out2D_vars "Variables to output in 2D HDF5 file format" STEERABLE = ALWAYS +{ + "" :: "List of group or variable names" +} "" + STRING out_extension "File extension to use for CarpetIOHDF5 output" STEERABLE = ALWAYS { "" :: "File extension (including a leading dot, if desired)" @@ -65,6 +122,33 @@ KEYWORD out_criterion "Criterion to select CarpetIOHDF5 output intervals, overri "time" :: "Output every that much coordinate time" } "default" +KEYWORD out0D_criterion "Criterion to select 0D HDF5 slice output intervals, overrides out_every" STEERABLE = ALWAYS +{ + "default" :: "Use IO::out_criterion" + "never" :: "Never output" + "iteration" :: "Output every so many iterations" + "divisor" :: "Output if iteration mod divisor == 0." + "time" :: "Output every that much coordinate time" +} "default" + +KEYWORD out1D_criterion "Criterion to select 1D HDF5 slice output intervals, overrides out_every" STEERABLE = ALWAYS +{ + "default" :: "Use IO::out_criterion" + "never" :: "Never output" + "iteration" :: "Output every so many iterations" + "divisor" :: "Output if (iteration % out_every) == 0." + "time" :: "Output every that much coordinate time" +} "default" + +KEYWORD out2D_criterion "Criterion to select 2D HDF5 slice output intervals, overrides out_every" STEERABLE = ALWAYS +{ + "default" :: "Use IO::out_criterion" + "never" :: "Never output" + "iteration" :: "Output every so many iterations" + "divisor" :: "Output if (iteration % out_every) == 0." + "time" :: "Output every that much coordinate time" +} "default" + INT out_every "How often to do CarpetIOHDF5 output, overrides out_every" STEERABLE = ALWAYS { 1:* :: "Output every so many time steps" @@ -72,6 +156,27 @@ INT out_every "How often to do CarpetIOHDF5 output, overrides out_every" STEERAB -2 :: "Use 'IO::out_every'" } -2 +CCTK_INT out0D_every "How often to do 0D HDF5 slice output, overrides out_every" STEERABLE = ALWAYS +{ + 1:* :: "Output every so many time steps" + -1:0 :: "No output" + -2 :: "Use IO::out_every" +} -2 + +CCTK_INT out1D_every "How often to do 1D HDF5 slice output, overrides out_every" STEERABLE = ALWAYS +{ + 1:* :: "Output every so many time steps" + -1:0 :: "No output" + -2 :: "Use IO::out_every" +} -2 + +CCTK_INT out2D_every "How often to do 2D HDF5 slice output, overrides out_every" STEERABLE = ALWAYS +{ + 1:* :: "Output every so many time steps" + -1:0 :: "No output" + -2 :: "Use IO::out_every" +} -2 + REAL out_dt "How often to do CarpetIOHDF5 output, overrides 'IO::out_dt'" STEERABLE = ALWAYS { (0:* :: "In intervals of that much coordinate time" @@ -80,6 +185,202 @@ REAL out_dt "How often to do CarpetIOHDF5 output, overrides 'IO::out_dt'" STEERA -2 :: "Default to 'IO::out_dt'" } -2 +REAL out0D_dt "How often to do 0D HDF5 slice output, overrides IO::out_dt" STEERABLE = ALWAYS +{ + (0:* :: "In intervals of that much coordinate time" + 0 :: "As often as possible" + -1 :: "Disable output" + -2 :: "Default to IO::out_dt" +} -2 + +REAL out1D_dt "How often to do 1D HDF5 slice output, overrides IO::out_dt" STEERABLE = ALWAYS +{ + (0:* :: "In intervals of that much coordinate time" + 0 :: "As often as possible" + -1 :: "Disable output" + -2 :: "Default to IO::out_dt" +} -2 + +REAL out2D_dt "How often to do 2D HDF5 slice output, overrides IO::out_dt" STEERABLE = ALWAYS +{ + (0:* :: "In intervals of that much coordinate time" + 0 :: "As often as possible" + -1 :: "Disable output" + -2 :: "Default to IO::out_dt" +} -2 + + +############################################################################ +# 0D slice output +############################################################################ +CCTK_INT out0D_point_xi "x-index (counting from 0) for 0D points" STEERABLE = ALWAYS +{ + 0:* :: "" +} 0 +CCTK_INT out0D_point_yi "y-index (counting from 0) for 0D points" STEERABLE = ALWAYS +{ + 0:* :: "" +} 0 +CCTK_INT out0D_point_zi "z-index (counting from 0) for 0D points" STEERABLE = ALWAYS +{ + 0:* :: "" +} 0 + +CCTK_REAL out0D_point_x "x coordinate for 0D points" STEERABLE = ALWAYS +{ + *:* :: "" +} 0 +CCTK_REAL out0D_point_y "y coordinate for 0D points" STEERABLE = ALWAYS +{ + *:* :: "" +} 0 +CCTK_REAL out0D_point_z "z coordinate for 0D points" STEERABLE = ALWAYS +{ + *:* :: "" +} 0 + + + +############################################################################ +# 1D slice output +############################################################################ +BOOLEAN out1D_x "Do 1D HDF5 slice output in the x-direction" STEERABLE = ALWAYS +{ +} "yes" +BOOLEAN out1D_y "Do 1D HDF5 slice output in the y-direction" STEERABLE = ALWAYS +{ +} "yes" +BOOLEAN out1D_z "Do 1D HDF5 slice output in the z-direction" STEERABLE = ALWAYS +{ +} "yes" + +CCTK_INT out1D_xline_yi "y-index (counting from 0) for 1D lines in x-direction" STEERABLE = ALWAYS +{ + 0:* :: "" +} 0 +CCTK_INT out1D_xline_zi "z-index (counting from 0) for 1D lines in x-direction" STEERABLE = ALWAYS +{ + 0:* :: "" +} 0 + +CCTK_INT out1D_yline_xi "x-index (counting from 0) for 1D lines in y-direction" STEERABLE = ALWAYS +{ + 0:* :: "" +} 0 +CCTK_INT out1D_yline_zi "z-index (counting from 0) for 1D lines in y-direction" STEERABLE = ALWAYS +{ + 0:* :: "" +} 0 + +CCTK_INT out1D_zline_xi "x-index (counting from 0) for 1D lines in z-direction" STEERABLE = ALWAYS +{ + 0:* :: "" +} 0 +CCTK_INT out1D_zline_yi "y-index (counting from 0) for 1D lines in z-direction" STEERABLE = ALWAYS +{ + 0:* :: "" +} 0 + +CCTK_REAL out1D_xline_y "y coordinate for 1D lines in x-direction" STEERABLE = ALWAYS +{ + *:* :: "" +} 0 +CCTK_REAL out1D_xline_z "z coordinate for 1D lines in x-direction" STEERABLE = ALWAYS +{ + *:* :: "" +} 0 + +CCTK_REAL out1D_yline_x "x coordinate for 1D lines in y-direction" STEERABLE = ALWAYS +{ + *:* :: "" +} 0 +CCTK_REAL out1D_yline_z "z coordinate for 1D lines in y-direction" STEERABLE = ALWAYS +{ + *:* :: "" +} 0 + +CCTK_REAL out1D_zline_x "x coordinate for 1D lines in z-direction" STEERABLE = ALWAYS +{ + *:* :: "" +} 0 +CCTK_REAL out1D_zline_y "y coordinate for 1D lines in z-direction" STEERABLE = ALWAYS +{ + *:* :: "" +} 0 + + +############################################################################ +# 2D slice output +############################################################################ +BOOLEAN out2D_xy "Do 2D HDF5 slice output in the xy-direction" STEERABLE = ALWAYS +{ +} "yes" +BOOLEAN out2D_xz "Do 2D HDF5 slice output in the xz-direction" STEERABLE = ALWAYS +{ +} "yes" +BOOLEAN out2D_yz "Do 2D HDF5 slice output in the yz-direction" STEERABLE = ALWAYS +{ +} "yes" + +CCTK_INT out2D_xyplane_zi "z-index (counting from 0) for 2D planes in xy-direction" STEERABLE = ALWAYS +{ + 0:* :: "" +} 0 + +CCTK_INT out2D_xzplane_yi "y-index (counting from 0) for 2D planes in xz-direction" STEERABLE = ALWAYS +{ + 0:* :: "" +} 0 + +CCTK_INT out2D_yzplane_xi "x-index (counting from 0) for 2D planes in yz-direction" STEERABLE = ALWAYS +{ + 0:* :: "" +} 0 + +CCTK_REAL out2D_xyplane_z "z coordinate for 2D planes in xy-direction" STEERABLE = ALWAYS +{ + *:* :: "" +} 0 + +CCTK_REAL out2D_xzplane_y "y coordinate for 2D planes in xz-direction" STEERABLE = ALWAYS +{ + *:* :: "" +} 0 + +CCTK_REAL out2D_yzplane_x "x coordinate for 2D planes in yz-direction" STEERABLE = ALWAYS +{ + *:* :: "" +} 0 + +####################################################################### +# general slice output parameters +####################################################################### +BOOLEAN output_all_timelevels "Output all timelevels instead of only the current" STEERABLE = ALWAYS +{ +} "no" + +BOOLEAN output_symmetry_points "Output symmetry points (assuming that there are nghostzones symmetry points)" +{ +} "yes" + +BOOLEAN out3D_ghosts "Output ghost zones" +{ +} "yes" + +BOOLEAN out3D_outer_ghosts "Output outer boundary zones (assuming that there are nghostzones boundary points)" +{ +} "yes" + +# These parameters are here for historic reasons only. +# They might go away in the future. Do not use them. + +BOOLEAN out1D_d "Do output along the diagonal" STEERABLE = ALWAYS +{ +} "yes" + +####################################################################### +# checkpoint/recovery +####################################################################### BOOLEAN checkpoint "Do checkpointing with CarpetIOHDF5 ?" STEERABLE = ALWAYS { } "no" @@ -110,3 +411,7 @@ INT compression_level "Compression level to use for writing HDF5 data" STEERABLE { 0:9 :: "Higher numbers compress better, a value of zero disables compression" } 0 + +BOOLEAN use_checksums "Use checksums for the HDF5 data" STEERABLE = ALWAYS +{ +} "no" diff --git a/Carpet/CarpetIOHDF5/schedule.ccl b/Carpet/CarpetIOHDF5/schedule.ccl index c08126887..0caa9f202 100644 --- a/Carpet/CarpetIOHDF5/schedule.ccl +++ b/Carpet/CarpetIOHDF5/schedule.ccl @@ -1,6 +1,7 @@ # Schedule definitions for thorn CarpetIOHDF5 storage: next_output_iteration next_output_time this_iteration +storage: last_output_iteration_slice last_output_time_slice this_iteration_slice schedule CarpetIOHDF5_Startup at STARTUP after IOUtil_Startup { diff --git a/Carpet/CarpetIOHDF5/src/CarpetIOHDF5.cc b/Carpet/CarpetIOHDF5/src/CarpetIOHDF5.cc index b9bf36307..e34204c3c 100644 --- a/Carpet/CarpetIOHDF5/src/CarpetIOHDF5.cc +++ b/Carpet/CarpetIOHDF5/src/CarpetIOHDF5.cc @@ -57,9 +57,6 @@ static void GetVarIndex (int vindex, const char* optstring, void* arg); static void CheckSteerableParameters (const cGH *const cctkGH, CarpetIOHDF5GH *myGH); -static int WriteMetadata (const cGH *cctkGH, int nioprocs, - int firstvar, int numvars, - bool called_from_checkpoint, hid_t file); static int WriteAttribute (hid_t const group, char const * const name, @@ -98,6 +95,10 @@ int CarpetIOHDF5_Startup (void) const int GHExtension = CCTK_RegisterGHExtension (CCTK_THORNSTRING); CCTK_RegisterGHExtensionSetupGH (GHExtension, SetupGH); + IOHDF5<0>::Startup(); + IOHDF5<1>::Startup(); + IOHDF5<2>::Startup(); + return (0); } @@ -110,6 +111,12 @@ void CarpetIOHDF5_Init (CCTK_ARGUMENTS) *next_output_iteration = 0; *next_output_time = cctk_time; + for (int d=0; d<3; ++d) { + this_iteration_slice[d] = 0; + last_output_iteration_slice[d] = 0; + last_output_time_slice[d] = cctk_time; + } + last_checkpoint_iteration = cctk_iteration; last_checkpoint_walltime = CCTK_RunTime() / 3600.0; } @@ -271,6 +278,29 @@ hid_t CCTKtoHDF5_Datatype (const cGH* const cctkGH, } +// add attributes to an HDF5 slice dataset +int AddSliceAttributes(const cGH* const cctkGH, + const char* const fullname, + const int refinementlevel, + const vector<double>& origin, + const vector<double>& delta, + const vector<int>& iorigin, + hid_t& dataset) +{ + int error_count = 0; + + error_count += WriteAttribute(dataset, "time", cctkGH->cctk_time); + error_count += WriteAttribute(dataset, "timestep", cctkGH->cctk_iteration); + error_count += WriteAttribute(dataset, "name", fullname); + error_count += WriteAttribute(dataset, "level", refinementlevel); + error_count += WriteAttribute(dataset, "origin", &origin[0], origin.size()); + error_count += WriteAttribute(dataset, "delta", &delta[0], delta.size()); + error_count += WriteAttribute(dataset, "iorigin", &iorigin[0], iorigin.size()); + + return error_count; +} + + ////////////////////////////////////////////////////////////////////////////// // private routines ////////////////////////////////////////////////////////////////////////////// @@ -422,20 +452,18 @@ static void CheckSteerableParameters (const cGH *const cctkGH, // notify the user about the new setting if (not CCTK_Equals (verbose, "none")) { int count = 0; - string msg ("Periodic HDF5 output requested for '"); - for (int i = CCTK_NumVars () - 1; i >= 0; i--) { - if (myGH->requests[i]) { - if (count++) { - msg += "', '"; - } - char *fullname = CCTK_FullName (i); - msg += fullname; + ostringstream msg; + msg << "Periodic scalar output requested for:"; + for (int vi=0; vi<CCTK_NumVars(); ++vi) { + if (myGH->requests[vi]) { + ++count; + char* const fullname = CCTK_FullName(vi); + msg << eol << " " << fullname; free (fullname); } } - if (count) { - msg += "'"; - CCTK_INFO (msg.c_str()); + if (count > 0) { + CCTK_INFO (msg.str().c_str()); } } @@ -756,7 +784,7 @@ static int OutputVarAs (const cGH* const cctkGH, const char* const fullname, CCTK_REAL local[2], global[2]; local[0] = io_files; local[1] = io_bytes; - MPI_Allreduce (local, global, 2, dist::datatype (local[0]), MPI_SUM, dist::comm()); + MPI_Allreduce (local, global, 2, dist::mpi_datatype (local[0]), MPI_SUM, dist::comm()); io_files = global[0]; io_bytes = global[1]; } @@ -910,7 +938,7 @@ static void Checkpoint (const cGH* const cctkGH, int called_from) CCTK_REAL local[2], global[2]; local[0] = io_files; local[1] = io_bytes; - MPI_Allreduce (local, global, 2, dist::datatype (local[0]), MPI_SUM, dist::comm()); + MPI_Allreduce (local, global, 2, dist::mpi_datatype (local[0]), MPI_SUM, dist::comm()); io_files = global[0]; io_bytes = global[1]; } @@ -1001,9 +1029,9 @@ static void Checkpoint (const cGH* const cctkGH, int called_from) } // Checkpoint -static int WriteMetadata (const cGH * const cctkGH, int const nioprocs, - int const firstvar, int const numvars, - bool const called_from_checkpoint, hid_t const file) +int WriteMetadata (const cGH * const cctkGH, int const nioprocs, + int const firstvar, int const numvars, + bool const called_from_checkpoint, hid_t const file) { DECLARE_CCTK_PARAMETERS; hid_t group; @@ -1048,12 +1076,6 @@ static int WriteMetadata (const cGH * const cctkGH, int const nioprocs, (group, "config id", static_cast<char const *> (UniqueConfigID (cctkGH))); } - // Unique source tree identifier - if (CCTK_IsFunctionAliased ("UniqueSourceID")) { - error_count += WriteAttribute - (group, "source id", static_cast<char const *> (UniqueSourceID (cctkGH))); - } - // unique build identifier if (CCTK_IsFunctionAliased ("UniqueBuildID")) { error_count += WriteAttribute @@ -1142,9 +1164,11 @@ static int WriteMetadata (const cGH * const cctkGH, int const nioprocs, // Save grid structure if (called_from_checkpoint or not CCTK_Equals (out_save_parameters, "no")) { + vector <vector <vector <region_t> > > grid_superstructure (maps); vector <vector <vector <region_t> > > grid_structure (maps); vector <vector <vector <CCTK_REAL> > > grid_times (maps); for (int m = 0; m < maps; ++ m) { + grid_superstructure.at(m) = vhh.at(m)->superregions; grid_structure.at(m) = vhh.at(m)->regions.at(0); grid_times.at(m).resize(mglevels); for (int ml = 0; ml < mglevels; ++ ml) { @@ -1155,6 +1179,12 @@ static int WriteMetadata (const cGH * const cctkGH, int const nioprocs, } } ostringstream gs_buf; + // We could write this information only into one of the checkpoint + // files (to save space), or write it into a separate metadata + // file + gs_buf << grid_superstructure; + // We could omit the grid structure (to save space), or write it + // only into one of the checkpoint files gs_buf << grid_structure; gs_buf << grid_times; gs_buf << leveltimes; diff --git a/Carpet/CarpetIOHDF5/src/CarpetIOHDF5.hh b/Carpet/CarpetIOHDF5/src/CarpetIOHDF5.hh index 3d03939c0..f31be614c 100644 --- a/Carpet/CarpetIOHDF5/src/CarpetIOHDF5.hh +++ b/Carpet/CarpetIOHDF5/src/CarpetIOHDF5.hh @@ -4,6 +4,8 @@ #define H5_USE_16_API 1 #include <hdf5.h> +#include <vector> + #include "cctk_Arguments.h" #include "CactusBase/IOUtil/src/ioutil_Utils.h" #include "carpet.hh" @@ -15,7 +17,7 @@ // some macros for HDF5 group names #define METADATA_GROUP "Parameters and Global Attributes" #define ALL_PARAMETERS "All Parameters" -#define GRID_STRUCTURE "Grid Structure" +#define GRID_STRUCTURE "Grid Structure v2" // atomic HDF5 datatypes for the generic CCTK datatypes // (the one for CCTK_COMPLEX is created at startup as a compound HDF5 datatype) @@ -56,6 +58,16 @@ } while (0) +// datatype of the start[] parameter in a call to H5Sselect_hyperslab() +// (the HDF5 API has changed in this respect after version 1.6.3) +#if (H5_VERS_MAJOR == 1 && \ + (H5_VERS_MINOR < 6 || (H5_VERS_MINOR == 6 && H5_VERS_RELEASE < 4))) +#define slice_start_size_t hssize_t +#else +#define slice_start_size_t hsize_t +#endif + + // CarpetIOHDF5 GH extension structure typedef struct { @@ -114,11 +126,106 @@ namespace CarpetIOHDF5 const ioRequest* const request, bool called_from_checkpoint); + int WriteMetadata (const cGH * const cctkGH, int const nioprocs, + int const firstvar, int const numvars, + bool const called_from_checkpoint, hid_t const file); + + int AddSliceAttributes(const cGH* const cctkGH, + const char* const fullname, + const int refinementlevel, + const vector<double>& origin, + const vector<double>& delta, + const vector<int>& iorigin, + hid_t& dataset); + // returns an HDF5 datatype corresponding to the given CCTK datatype hid_t CCTKtoHDF5_Datatype (const cGH* const cctkGH, int cctk_type, bool single_precision); + + // Everything is a class template, so that it can easily be + // instantiated for all output dimensions + + template<int outdim> + struct IOHDF5 { + + // name of the output directory + static char* my_out_slice_dir; + + // list of variables to output + static char* my_out_slice_vars; + + // I/O request description list (for all variables) + static vector<ioRequest*> slice_requests; + + + + // Scheduled functions + static int Startup(); + + // Registered functions + static void* SetupGH (tFleshConfig* fc, int convLevel, cGH* cctkGH); + + static int OutputGH (const cGH* cctkGH); + static int OutputVarAs (const cGH* cctkGH, + const char* varname, const char* alias); + static int TimeToOutput (const cGH* cctkGH, int vindex); + static int TriggerOutput (const cGH* cctkGH, int vindex); + + // Other functions + static void CheckSteerableParameters (const cGH* cctkGH); + + static bool DidOutput (const cGH* cctkGH, + int vindex, + string basefilename, + bool& is_new_file, bool& truncate_file); + + static bool DirectionIsRequested (const vect<int,outdim>& dirs); + + static void OutputDirection (const cGH* cctkGH, + int vindex, + string alias, + string basefilename, + const vect<int,outdim>& dirs, + bool is_new_file, + bool truncate_file); + + static int OpenFile (const cGH* cctkGH, + int m, + int vindex, + int numvars, + string alias, + string basefilename, + const vect<int,outdim>& dirs, + bool is_new_file, + bool truncate_file, + hid_t& file); + + static int WriteHDF5 (const cGH* cctkGH, + hid_t& file, + vector<gdata*> const gfdatas, + const bbox<int,dim>& gfext, + const int vi, + const vect<int,dim>& org, + const vect<int,outdim>& dirs, + const int rl, + const int ml, + const int m, + const int c, + const int tl, + const CCTK_REAL coord_time, + const vect<CCTK_REAL,dim>& coord_lower, + const vect<CCTK_REAL,dim>& coord_upper); + + static int CloseFile (const cGH* cctkGH, + hid_t& file); + + static ivect GetOutputOffset (const cGH* cctkGH, int m, + const vect<int,outdim>& dirs); + + }; // struct IOHDF5 + // scheduled routines (must be declared as C according to schedule.ccl) extern "C" { diff --git a/Carpet/CarpetIOHDF5/src/Input.cc b/Carpet/CarpetIOHDF5/src/Input.cc index 738e78ad0..c89cb652e 100644 --- a/Carpet/CarpetIOHDF5/src/Input.cc +++ b/Carpet/CarpetIOHDF5/src/Input.cc @@ -60,6 +60,7 @@ typedef struct { double delta_time; vector<double> mgleveltimes; // [num_mglevels*num_reflevels] + vector<vector<vector<region_t> > > grid_superstructure; // [map][reflevel][component] vector<vector<vector<region_t> > > grid_structure; // [map][reflevel][component] vector<vector<vector<CCTK_REAL> > > grid_times; // [map][mglevel][reflevel] vector<vector<CCTK_REAL> > leveltimes; // [mglevel][reflevel] @@ -100,10 +101,15 @@ int CarpetIOHDF5_RecoverParameters () ////////////////////////////////////////////////////////////////////////////// void CarpetIOHDF5_RecoverGridStructure (CCTK_ARGUMENTS) { + DECLARE_CCTK_PARAMETERS; DECLARE_CCTK_ARGUMENTS; fileset_t & fileset = * filesets.begin(); + if (not CCTK_Equals (verbose, "none")) { + CCTK_INFO ("recovering grid structure"); + } + // Abort with an error if there is no grid structure in the // checkpoint file, or if the number of maps is wrong if (fileset.grid_structure.empty()) { @@ -115,7 +121,7 @@ void CarpetIOHDF5_RecoverGridStructure (CCTK_ARGUMENTS) int(fileset.grid_structure.size()), maps); } - vector<vector<vector<region_t> > > superregsss = fileset.grid_structure; + vector<vector<vector<region_t> > > superregsss = fileset.grid_superstructure; vector<vector<vector<vector<region_t> > > > regssss (maps); int type; @@ -184,7 +190,7 @@ void CarpetIOHDF5_RecoverGridStructure (CCTK_ARGUMENTS) for (int m = 0; m < maps; ++ m) { // Regrid - RegridMap (cctkGH, m, superregsss.at(m), regssss.at(m)); + RegridMap (cctkGH, m, superregsss.at(m), regssss.at(m), false); // Set time hierarchy correctly after RegridMap created it for (int ml = 0; ml < mglevels; ++ ml) { @@ -199,10 +205,12 @@ void CarpetIOHDF5_RecoverGridStructure (CCTK_ARGUMENTS) // Set level times correctly after PostRegrid created them leveltimes = fileset.leveltimes; - + for (int rl = 0; rl < reflevels; ++ rl) { Recompose (cctkGH, rl, false); } + + RegridFree (cctkGH, false); } ////////////////////////////////////////////////////////////////////////////// @@ -384,16 +392,26 @@ int Recover (cGH* cctkGH, const char *basefilename, int called_from) for (unsigned int gindex = 0; gindex < group_bboxes.size(); gindex++) { group_bboxes[gindex].resize (maps); const int grouptype = CCTK_GroupTypeI (gindex); - BEGIN_MAP_LOOP (cctkGH, grouptype) { - struct arrdesc& data = arrdata.at(gindex).at(Carpet::map); - - BEGIN_LOCAL_COMPONENT_LOOP (cctkGH, grouptype) { - if (grouptype == CCTK_GF or (mglevel == 0 and reflevel == 0)) { - group_bboxes[gindex][Carpet::map] |= - data.dd->boxes.at(mglevel).at(reflevel).at(component).exterior; + if (grouptype == CCTK_GF) { + for (int m=0; m<maps; ++m) { + struct arrdesc& data = arrdata.at(gindex).at(m); + for (int lc=0; lc<data.hh->local_components(reflevel); ++lc) { + int const c = data.hh->get_component(reflevel,lc); + group_bboxes[gindex][m] |= + data.dd->boxes.at(mglevel).at(reflevel).at(c).exterior; } - } END_LOCAL_COMPONENT_LOOP; - } END_MAP_LOOP; + group_bboxes[gindex][m].normalize(); + } + } else { + if (mglevel==0 and reflevel==0) { + int const m=0; + struct arrdesc& data = arrdata.at(gindex).at(m); + int const c=dist::rank(); + group_bboxes[gindex][m] |= + data.dd->boxes.at(mglevel).at(reflevel).at(c).exterior; + group_bboxes[gindex][m].normalize(); + } + } } // mark variables in groups with no grid points (size 0) as already done @@ -513,9 +531,10 @@ int Recover (cGH* cctkGH, const char *basefilename, int called_from) // actually read the patch if (not read_completely.at(patch->vindex).at(patch->timelevel)) { - ReadVar (cctkGH, file.file, io_bytes, patch, - bboxes_read.at(patch->vindex).at(patch->timelevel), - in_recovery); + error_count += + ReadVar (cctkGH, file.file, io_bytes, patch, + bboxes_read.at(patch->vindex).at(patch->timelevel), + in_recovery); // update the read_completely entry const int gindex = CCTK_GroupIndexFromVarI (patch->vindex); @@ -563,6 +582,10 @@ int Recover (cGH* cctkGH, const char *basefilename, int called_from) (ioUtilGH->do_inVars and ioUtilGH->do_inVars[vindex])) { continue; } + if (called_from == FILEREADER_DATA and tl > 0) { + // file reader reads only timelevel 0 + continue; + } if (not read_completely[vindex][tl]) { // check if the variable has been read partially @@ -578,14 +601,28 @@ int Recover (cGH* cctkGH, const char *basefilename, int called_from) "(variable has option tag \"CHECKPOINT = 'no'\")", fullname, tl); } else { - CCTK_VWarn (2, __LINE__, __FILE__, CCTK_THORNSTRING, - "variable '%s' timelevel %d has not been read", - fullname, tl); + // TODO: With the file reader, the files are read + // sequentially, and each file contains only some of the + // variables. The warning below is emitted for all files, + // even those which don't contain the variable. This + // makes this warning useless, so we omit it when called + // for the file reader. + if (called_from != FILEREADER_DATA) { + CCTK_VWarn (2, __LINE__, __FILE__, CCTK_THORNSTRING, + "variable '%s' timelevel %d has not been read", + fullname, tl); + } } } else { CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, "variable '%s' timelevel %d has been read only partially", fullname, tl); + // for (int m = 0; m < maps; m++) { + // bboxes_read[vindex][tl][m].normalize(); + // const int gindex = CCTK_GroupIndexFromVarI (vindex); + // cout << "Need: " << group_bboxes[gindex][m] << endl; + // cout << "Read: " << bboxes_read[vindex][tl][m] << endl; + // } num_incomplete++; } free (fullname); @@ -593,6 +630,8 @@ int Recover (cGH* cctkGH, const char *basefilename, int called_from) } } if (num_incomplete) { + // cout.flush(); + // cerr.flush(); CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING, "%d variables on mglevel %d reflevel %d have been read " "only partially", num_incomplete, mglevel, reflevel); @@ -602,7 +641,7 @@ int Recover (cGH* cctkGH, const char *basefilename, int called_from) CCTK_REAL local[2], global[2]; local[0] = io_files; local[1] = io_bytes; - MPI_Allreduce (local, global, 2, dist::datatype (local[0]), MPI_SUM, dist::comm()); + MPI_Allreduce (local, global, 2, dist::mpi_datatype (local[0]), MPI_SUM, dist::comm()); io_files = global[0]; io_bytes = global[1]; } @@ -645,6 +684,9 @@ int Recover (cGH* cctkGH, const char *basefilename, int called_from) } } } + if (error_count and abort_on_io_errors) { + CCTK_WARN(0, "Found errors while trying to restart from checkpoint, aborting."); + } if (in_recovery and not CCTK_Equals (verbose, "none")) { CCTK_VInfo (CCTK_THORNSTRING, @@ -831,6 +873,7 @@ static void ReadMetadata (fileset_t& fileset, hid_t file) H5P_DEFAULT, &gs_cstr.front())); HDF5_ERROR (H5Dclose (dataset)); istringstream gs_buf (&gs_cstr.front()); + gs_buf >> fileset.grid_superstructure; gs_buf >> fileset.grid_structure; gs_buf >> fileset.grid_times; gs_buf >> fileset.leveltimes; @@ -975,7 +1018,7 @@ static int ReadVar (const cGH* const cctkGH, CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, "Cannot input variable '%s' (no storage)", fullname); free (fullname); - return 0; + return 1; } // filereader reads the current timelevel @@ -999,7 +1042,10 @@ static int ReadVar (const cGH* const cctkGH, // Traverse all local components on all maps hid_t filespace = -1, dataset = -1; - BEGIN_MAP_LOOP (cctkGH, group.grouptype) { + hid_t xfer = H5P_DEFAULT; + H5Z_EDC_t checksums = H5Z_NO_EDC; + + BEGIN_LOCAL_MAP_LOOP (cctkGH, group.grouptype) { // skip this dataset if it belongs to another map if (group.grouptype == CCTK_GF and patch->map != Carpet::map) { @@ -1023,8 +1069,10 @@ static int ReadVar (const cGH* const cctkGH, upper[patch->rank-1] = newupper; } const ibbox filebox(lower, upper, stride); + // cout << "Found in file: " << filebox << endl; - ibbox& interior_membox = +#if 0 + const ibbox& interior_membox = data.dd->boxes.at(mglevel).at(reflevel).at(component).interior; // skip this dataset if it doesn't overlap with this component's interior @@ -1032,6 +1080,19 @@ static int ReadVar (const cGH* const cctkGH, if (interior_overlap.empty()) { continue; } +#endif + const ibbox& exterior_membox = + data.dd->boxes.at(mglevel).at(reflevel).at(component).exterior; + + // skip this dataset if it doesn't overlap with this component's + // exterior, or if it only reads what has already been read + const ibbox exterior_overlap = exterior_membox & filebox; + const ibset exterior_overlaps = + exterior_overlap - bboxes_read.at(Carpet::map); + if (exterior_overlaps.empty()) { + // cout << "Skipping this bbox" << endl; + continue; + } if (CCTK_Equals (verbose, "full")) { char *fullname = CCTK_FullName (patch->vindex); @@ -1041,21 +1102,19 @@ static int ReadVar (const cGH* const cctkGH, } // get the overlap with this component's exterior - ibbox& membox = + const ibbox& membox = data.dd->boxes.at(mglevel).at(reflevel).at(component).exterior; const ibbox overlap = membox & filebox; + // cout << "Overlap: " << overlap << endl; bboxes_read.at(Carpet::map) |= overlap; + bboxes_read.at(Carpet::map).normalize(); + // cout << "New read: " << bboxes_read.at(Carpet::map) << endl; // calculate hyperslab selection parameters // before HDF5-1.6.4 the H5Sselect_hyperslab() function expected // the 'start' argument to be of type 'hssize_t' -#if (H5_VERS_MAJOR == 1 && \ - (H5_VERS_MINOR < 6 || (H5_VERS_MINOR == 6 && H5_VERS_RELEASE < 4))) - hssize_t memorigin[dim], fileorigin[dim]; -#else - hsize_t memorigin[dim], fileorigin[dim]; -#endif + slice_start_size_t memorigin[dim], fileorigin[dim]; hsize_t memdims[dim], count[dim]; for (int i = 0; i < patch->rank; i++) { memdims[patch->rank-i-1] = @@ -1073,6 +1132,14 @@ static int ReadVar (const cGH* const cctkGH, if (dataset < 0) { HDF5_ERROR (dataset = H5Dopen (file, patch->patchname.c_str())); HDF5_ERROR (filespace = H5Dget_space (dataset)); + xfer = H5Pcreate (H5P_DATASET_XFER); + checksums = H5Pget_edc_check (xfer); + if (use_checksums && (checksums == H5Z_DISABLE_EDC)) + CCTK_WARN(1, "Checksums not enabled in HDF5 library, but " + "requested in parameter, reading data without " + "tests on checksums."); + if (!use_checksums && (checksums == H5Z_ENABLE_EDC)) + H5Pset_edc_check(xfer, H5Z_DISABLE_EDC); } // read the hyperslab @@ -1082,7 +1149,7 @@ static int ReadVar (const cGH* const cctkGH, NULL, count, NULL)); HDF5_ERROR (H5Sselect_hyperslab (memspace, H5S_SELECT_SET, memorigin, NULL, count, NULL)); - HDF5_ERROR (H5Dread (dataset, datatype, memspace, filespace, H5P_DEFAULT, + HDF5_ERROR (H5Dread (dataset, datatype, memspace, filespace, xfer, cctkGH->data[patch->vindex][timelevel])); hid_t datatype; HDF5_ERROR (datatype = H5Dget_type (dataset)); @@ -1098,14 +1165,14 @@ static int ReadVar (const cGH* const cctkGH, / (delta_time * mglevelfact)) ); } - } END_MAP_LOOP; + } END_LOCAL_MAP_LOOP; if (dataset >= 0) { HDF5_ERROR (H5Dclose (dataset)); HDF5_ERROR (H5Sclose (filespace)); } - return 1; + return error_count; } } // namespace CarpetIOHDF5 diff --git a/Carpet/CarpetIOHDF5/src/Output.cc b/Carpet/CarpetIOHDF5/src/Output.cc index 675c51bc6..62f9d9778 100644 --- a/Carpet/CarpetIOHDF5/src/Output.cc +++ b/Carpet/CarpetIOHDF5/src/Output.cc @@ -72,18 +72,25 @@ int WriteVarUnchunked (const cGH* const cctkGH, BEGIN_MAP_LOOP (cctkGH, group.grouptype) { // Collect the set of all components' bboxes ibset bboxes; - BEGIN_COMPONENT_LOOP (cctkGH, group.grouptype) { + for (int c=0; c<arrdata.at(gindex).at(Carpet::map).hh->components(refinementlevel); ++c) { // Using "interior" removes ghost zones and refinement boundaries. +#if 0 bboxes += arrdata.at(gindex).at(Carpet::map).dd-> - boxes.at(mglevel).at(refinementlevel).at(component).interior; - } END_COMPONENT_LOOP; + boxes.at(mglevel).at(refinementlevel).at(c).interior; +#endif + bboxes += arrdata.at(gindex).at(Carpet::map).dd-> + boxes.at(mglevel).at(refinementlevel).at(c).exterior; + } // Normalise the set, i.e., try to represent the set with fewer bboxes. - // + bboxes.normalize(); + +#if 0 // According to Cactus conventions, DISTRIB=CONSTANT arrays // (including grid scalars) are assumed to be the same on all // processors and are therefore stored only by processor 0. - if (group.disttype != CCTK_DISTRIB_CONSTANT) bboxes.normalize(); + if (group.disttype != CCTK_DISTRIB_CONSTANT); +#endif // Loop over all components in the bbox set int bbox_id = 0; @@ -150,6 +157,11 @@ int WriteVarUnchunked (const cGH* const cctkGH, HDF5_ERROR (H5Pset_chunk (plist, group.dim, shape)); HDF5_ERROR (H5Pset_deflate (plist, compression_lvl)); } + // enable checksums if requested + if (use_checksums) { + HDF5_ERROR (H5Pset_chunk (plist, group.dim, shape)); + HDF5_ERROR (H5Pset_filter (plist, H5Z_FILTER_FLETCHER32, 0, 0, NULL)); + } HDF5_ERROR (dataset = H5Dcreate (outfile, datasetname.str().c_str(), filedatatype, dataspace, plist)); HDF5_ERROR (H5Pclose (plist)); @@ -160,24 +172,33 @@ int WriteVarUnchunked (const cGH* const cctkGH, BEGIN_COMPONENT_LOOP (cctkGH, group.grouptype) { // Get the intersection of the current component with this combination // (use either the interior or exterior here, as we did above) + gh const * const hh = arrdata.at(gindex).at(Carpet::map).hh; + dh const * const dd = arrdata.at(gindex).at(Carpet::map).dd; +#if 0 ibbox const overlap = *bbox & - arrdata.at(gindex).at(Carpet::map).dd-> - boxes.at(mglevel).at(refinementlevel).at(component).interior; + dd->boxes.at(mglevel).at(refinementlevel).at(component).interior; +#endif + ibbox const overlap = *bbox & + dd->boxes.at(mglevel).at(refinementlevel).at(component).exterior; // Continue if this component is not part of this combination if (overlap.empty()) continue; // Copy the overlap to the local processor const ggf* ff = arrdata.at(gindex).at(Carpet::map).data.at(var); - const gdata* const data = (*ff) (request->timelevel, - refinementlevel, - component, mglevel); + const gdata* const data = + local_component >= 0 + ? (*ff) (request->timelevel, refinementlevel, + local_component, mglevel) + : NULL; + // TODO: This does not work; data may be NULL gdata* const processor_component = data->make_typed (request->vindex, error_centered, op_sync); processor_component->allocate (overlap, 0); for (comm_state state; not state.done(); state.step()) { - processor_component->copy_from (state, data, overlap); + int const p = hh->processor(refinementlevel,component); + processor_component->copy_from (state, data, overlap, 0, p); } // Write data @@ -207,12 +228,7 @@ int WriteVarUnchunked (const cGH* const cctkGH, // before HDF5-1.6.4 the H5Sselect_hyperslab() function expected // the 'start' argument to be of type 'hssize_t' -#if (H5_VERS_MAJOR == 1 && \ - (H5_VERS_MINOR < 6 || (H5_VERS_MINOR == 6 && H5_VERS_RELEASE < 4))) - hssize_t overlaporigin[dim]; -#else - hsize_t overlaporigin[dim]; -#endif + slice_start_size_t overlaporigin[dim]; for (int d = 0; d < group.dim; ++d) { assert (group.dim-1-d>=0 and group.dim-1-d<dim); overlaporigin[group.dim-1-d] = @@ -321,8 +337,10 @@ int WriteVarChunkedSequential (const cGH* const cctkGH, BEGIN_MAP_LOOP (cctkGH, group.grouptype) { BEGIN_COMPONENT_LOOP (cctkGH, group.grouptype) { // Using "exterior" includes ghost zones and refinement boundaries. - ibbox& bbox = arrdata.at(gindex).at(Carpet::map).dd-> - boxes.at(mglevel).at(refinementlevel).at(component).exterior; + gh const * const hh = arrdata.at(gindex).at(Carpet::map).hh; + dh const * const dd = arrdata.at(gindex).at(Carpet::map).dd; + ibbox const& bbox = + dd->boxes.at(mglevel).at(refinementlevel).at(component).exterior; // Get the shape of the HDF5 dataset (in Fortran index order) hsize_t shape[dim]; @@ -338,14 +356,19 @@ int WriteVarChunkedSequential (const cGH* const cctkGH, // Copy the overlap to the local processor const ggf* ff = arrdata.at(gindex).at(Carpet::map).data.at(var); - const gdata* const data = (*ff) (request->timelevel, refinementlevel, - component, mglevel); + const gdata* const data = + local_component >= 0 + ? (*ff) (request->timelevel, refinementlevel, + local_component, mglevel) + : NULL; + // TODO: This does not work; data may be NULL gdata* const processor_component = - data->make_typed (request->vindex,error_centered, op_sync); + data->make_typed (request->vindex, error_centered, op_sync); processor_component->allocate (bbox, 0); for (comm_state state; not state.done(); state.step()) { - processor_component->copy_from (state, data, bbox); + int const p = hh->processor(refinementlevel,component); + processor_component->copy_from (state, data, bbox, 0, p); } // Write data on I/O processor 0 @@ -412,6 +435,11 @@ int WriteVarChunkedSequential (const cGH* const cctkGH, HDF5_ERROR (H5Pset_chunk (plist, group.dim, shape)); HDF5_ERROR (H5Pset_deflate (plist, compression_lvl)); } + // enable checksums if requested + if (use_checksums) { + HDF5_ERROR (H5Pset_chunk (plist, group.dim, shape)); + HDF5_ERROR (H5Pset_filter (plist, H5Z_FILTER_FLETCHER32, 0, 0, NULL)); + } HDF5_ERROR (dataspace = H5Screate_simple (group.dim, shape, NULL)); HDF5_ERROR (dataset = H5Dcreate (outfile, datasetname.str().c_str(), filedatatype, dataspace, plist)); @@ -479,13 +507,17 @@ int WriteVarChunkedParallel (const cGH* const cctkGH, out_single_precision and not called_from_checkpoint)); // Traverse all maps - BEGIN_MAP_LOOP (cctkGH, group.grouptype) { + BEGIN_LOCAL_MAP_LOOP (cctkGH, group.grouptype) { BEGIN_LOCAL_COMPONENT_LOOP (cctkGH, group.grouptype) { - const ggf* ff = arrdata.at(gindex).at(Carpet::map).data.at(var); - const ibbox& bbox = (*ff) (request->timelevel, refinementlevel, - group.disttype == CCTK_DISTRIB_CONSTANT ? - 0 : component, mglevel)->extent(); + // const ggf* ff = arrdata.at(gindex).at(Carpet::map).data.at(var); + // const ibbox& bbox = (*ff) (request->timelevel, refinementlevel, + // group.disttype == CCTK_DISTRIB_CONSTANT ? + // 0 : component, mglevel)->extent(); + const dh* dd = arrdata.at(gindex).at(Carpet::map).dd; + const ibbox& bbox = + dd->boxes.AT(mglevel).AT(refinementlevel) + .AT(group.disttype == CCTK_DISTRIB_CONSTANT ? 0 : component).exterior; // Don't create zero-sized components if (bbox.empty()) continue; @@ -499,8 +531,8 @@ int WriteVarChunkedParallel (const cGH* const cctkGH, MPI_Datatype datatype; switch (group.vartype) { -#define TYPECASE(N,T) \ - case N: { T dummy; datatype = dist::datatype(dummy); } break; +#define TYPECASE(N,T) \ + case N: { T dummy; datatype = dist::mpi_datatype(dummy); } break; #include "carpet_typecase.hh" #undef TYPECASE default: assert (0 and "invalid datatype"); @@ -565,6 +597,11 @@ int WriteVarChunkedParallel (const cGH* const cctkGH, HDF5_ERROR (H5Pset_chunk (plist, group.dim, shape)); HDF5_ERROR (H5Pset_deflate (plist, compression_lvl)); } + // enable checksums if requested + if (use_checksums) { + HDF5_ERROR (H5Pset_chunk (plist, group.dim, shape)); + HDF5_ERROR (H5Pset_filter (plist, H5Z_FILTER_FLETCHER32, 0, 0, NULL)); + } HDF5_ERROR (dataspace = H5Screate_simple (group.dim, shape, NULL)); HDF5_ERROR (dataset = H5Dcreate (outfile, datasetname.str().c_str(), filedatatype, dataspace, plist)); @@ -581,7 +618,7 @@ int WriteVarChunkedParallel (const cGH* const cctkGH, if (data != mydata) free (data); } END_LOCAL_COMPONENT_LOOP; - } END_MAP_LOOP; + } END_LOCAL_MAP_LOOP; free (fullname); diff --git a/Carpet/CarpetIOHDF5/src/OutputSlice.cc b/Carpet/CarpetIOHDF5/src/OutputSlice.cc new file mode 100644 index 000000000..156332acb --- /dev/null +++ b/Carpet/CarpetIOHDF5/src/OutputSlice.cc @@ -0,0 +1,1458 @@ +#include <cassert> +#include <cctype> +#include <climits> +#include <cmath> +#include <cstdlib> +#include <cstring> + +#include <map> +#include <string> + +#include "cctk.h" +#include "util_Table.h" + +#include "CactusBase/IOUtil/src/ioGH.h" + +#include "CarpetTimers.hh" + +#include "CarpetIOHDF5.hh" + + + +// That's a hack +namespace Carpet { + void UnsupportedVarType (const int vindex); +} + + +#define GetParameter(parameter) \ + outdim == 0 ? out0D_##parameter : \ + outdim == 1 ? out1D_##parameter : out2D_##parameter + +namespace CarpetIOHDF5 { + + using namespace std; + using namespace Carpet; + + + + // routines which are independent of the output dimension + static ibbox GetOutputBBox (const cGH* cctkGH, + int group, + int m, int c, + const ibbox& ext); + + static void GetCoordinates (const cGH* cctkGH, int m, + const cGroup& groupdata, + const ibbox& ext, + CCTK_REAL& coord_time, + rvect& coord_lower, rvect& coord_upper); + + static int GetGridOffset (const cGH* cctkGH, int m, int dir, + const char* itempl, const char* iglobal, + const char* ctempl, const char* cglobal, + CCTK_REAL cfallback); + static int CoordToOffset (const cGH* cctkGH, int m, int dir, + CCTK_REAL coord, int ifallback); + + + + // IO processor + const int ioproc = 0; + const int nioprocs = 1; + + + + // Global configuration parameters + bool stop_on_parse_errors = false; + + + + // Definition of static members + template<int outdim> char* IOHDF5<outdim>::my_out_slice_dir; + template<int outdim> char* IOHDF5<outdim>::my_out_slice_vars; + template<int outdim> vector<ioRequest*> IOHDF5<outdim>::slice_requests; + + + + template<int outdim> + int IOHDF5<outdim>::Startup() + { + ostringstream msg; + msg << "AMR " << outdim << "D HDF5 I/O provided by CarpetIOHDF5"; + CCTK_RegisterBanner (msg.str().c_str()); + + ostringstream extension_name; + extension_name << "CarpetIOHDF5_" << outdim << "D"; + const int GHExtension = + CCTK_RegisterGHExtension(extension_name.str().c_str()); + CCTK_RegisterGHExtensionSetupGH (GHExtension, SetupGH); + + ostringstream method_name; + method_name << "IOHDF5_" << outdim << "D"; + const int IOMethod = CCTK_RegisterIOMethod (method_name.str().c_str()); + CCTK_RegisterIOMethodOutputGH (IOMethod, OutputGH); + CCTK_RegisterIOMethodOutputVarAs (IOMethod, OutputVarAs); + CCTK_RegisterIOMethodTimeToOutput (IOMethod, TimeToOutput); + CCTK_RegisterIOMethodTriggerOutput (IOMethod, TriggerOutput); + + return 0; + } + + + + template<int outdim> + void* IOHDF5<outdim>::SetupGH (tFleshConfig* const fc, + const int convLevel, cGH* const cctkGH) + { + DECLARE_CCTK_PARAMETERS; + const void *dummy; + + dummy = &fc; + dummy = &convLevel; + dummy = &cctkGH; + dummy = &dummy; + + if (not CCTK_Equals (verbose, "none")) { + CCTK_VInfo (CCTK_THORNSTRING, "I/O Method 'IOHDF5_%dD' registered: " + "%dD AMR output of grid variables to HDF5 files", + outdim, outdim); + } + + const int numvars = CCTK_NumVars(); + slice_requests.resize (numvars); + + // initial I/O parameter check + my_out_slice_dir = 0; + my_out_slice_vars = strdup (""); + stop_on_parse_errors = strict_io_parameter_check != 0; + CheckSteerableParameters (cctkGH); + stop_on_parse_errors = false; + + // We register only once, ergo we get only one handle. We store + // that statically, so there is no need to pass anything to + // Cactus. + return NULL; + } + + + + template<int outdim> + void IOHDF5<outdim>::CheckSteerableParameters (const cGH* const cctkGH) + { + DECLARE_CCTK_PARAMETERS; + + // re-parse the 'IOHDF5::out%dD_dir' parameter if it has changed + const char* the_out_dir = GetParameter(dir); + if (CCTK_EQUALS (the_out_dir, "")) { + the_out_dir = io_out_dir; + } + + if (not my_out_slice_dir or strcmp (the_out_dir, my_out_slice_dir)) { + free (my_out_slice_dir); + my_out_slice_dir = strdup (the_out_dir); + + // create the output directory + const int result = IOUtil_CreateDirectory (cctkGH, my_out_slice_dir, 0, 0); + if (result < 0) { + CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, + "Problem creating %dD-output directory '%s'", + outdim, my_out_slice_dir); + } else if (result > 0 and CCTK_Equals (verbose, "full")) { + CCTK_VInfo (CCTK_THORNSTRING, + "%dD-output directory '%s' already exists", + outdim, my_out_slice_dir); + } + } + + // re-parse the 'IOHDF5::out%d_vars' parameter if it has changed + const char* const out_slice_vars = GetParameter(vars); + if (strcmp (out_slice_vars, my_out_slice_vars)) { + ostringstream parameter_name; + parameter_name << "IOHDF5::out" << outdim << "D_vars"; + IOUtil_ParseVarsForOutput (cctkGH, CCTK_THORNSTRING, + parameter_name.str().c_str(), + stop_on_parse_errors, out_slice_vars, + -1, -1.0, &slice_requests[0]); + + // notify the user about the new setting + if (not CCTK_Equals (verbose, "none")) { + int count = 0; + ostringstream msg; + msg << "Periodic " << outdim << "D AMR output requested for:"; + for (int vi=0; vi< CCTK_NumVars(); ++vi) { + if (slice_requests.at(vi)) { + ++count; + char* const fullname = CCTK_FullName(vi); + msg << "\n" << " " << fullname; + free (fullname); + } + } + if (count > 0) { + CCTK_INFO (msg.str().c_str()); + } + } + + // save the last setting of 'IOHDF5::out%d_vars' parameter + free (my_out_slice_vars); + my_out_slice_vars = strdup (out_slice_vars); + } + } + + + + template<int outdim> + int IOHDF5<outdim>::OutputGH (const cGH* const cctkGH) + { + static Carpet::Timer * timer = NULL; + if (not timer) { + ostringstream timer_name; + timer_name << "CarpetIOHDF5<" << outdim << ">::OutputGH"; + timer = new Carpet::Timer (timer_name.str().c_str()); + } + + timer->start(); + for (int vi=0; vi<CCTK_NumVars(); ++vi) { + if (TimeToOutput(cctkGH, vi)) { + TriggerOutput(cctkGH, vi); + } + } + timer->stop(); + + return 0; + } + + + + template<int outdim> + int IOHDF5<outdim>::TimeToOutput (const cGH* const cctkGH, const int vindex) + { + DECLARE_CCTK_ARGUMENTS; + DECLARE_CCTK_PARAMETERS; + + assert (vindex >= 0 and vindex < CCTK_NumVars()); + + if (CCTK_GroupTypeFromVarI(vindex) != CCTK_GF and not do_global_mode) { + return 0; + } + + CheckSteerableParameters (cctkGH); + + // check if output for this variable was requested + if (not slice_requests.at(vindex)) { + return 0; + } + + // check whether this refinement level should be output + if (not (slice_requests.at(vindex)->refinement_levels & (1 << reflevel))) { + return 0; + } + + // check if output for this variable was requested individually by + // a "<varname>{ out_every = <number> }" option string + // this will overwrite the output criterion setting + const char* myoutcriterion = GetParameter(criterion); + if (CCTK_EQUALS(myoutcriterion, "default")) { + myoutcriterion = io_out_criterion; + } + if (slice_requests.at(vindex)->out_every >= 0) { + myoutcriterion = "divisor"; + } + + if (CCTK_EQUALS (myoutcriterion, "never")) { + return 0; + } + + // check whether to output at this iteration + bool output_this_iteration = false; + + if (CCTK_EQUALS (myoutcriterion, "iteration")) { + int myoutevery = GetParameter(every); + if (myoutevery == -2) { + myoutevery = io_out_every; + } + if (myoutevery > 0) { + if (cctk_iteration == this_iteration_slice[outdim]) { + // we already decided to output this iteration + output_this_iteration = true; + } else if (cctk_iteration >= + last_output_iteration_slice[outdim] + myoutevery) { + // it is time for the next output + output_this_iteration = true; + last_output_iteration_slice[outdim] = cctk_iteration; + this_iteration_slice[outdim] = cctk_iteration; + } + } + } else if (CCTK_EQUALS (myoutcriterion, "divisor")) { + int myoutevery = GetParameter(every); + if (myoutevery == -2) { + myoutevery = io_out_every; + } + if (slice_requests[vindex]->out_every >= 0) { + myoutevery = slice_requests[vindex]->out_every; + } + if (myoutevery > 0 and (cctk_iteration % myoutevery) == 0) { + // we already decided to output this iteration + output_this_iteration = true; + } + } else if (CCTK_EQUALS (myoutcriterion, "time")) { + CCTK_REAL myoutdt = GetParameter(dt); + if (myoutdt == -2) { + myoutdt = io_out_dt; + } + if (myoutdt == 0 or cctk_iteration == this_iteration_slice[outdim]) { + output_this_iteration = true; + } else if (myoutdt > 0) { + int do_output = + cctk_time / cctk_delta_time >= + (last_output_time_slice[outdim] + myoutdt) / cctk_delta_time - 1.0e-12; + MPI_Bcast (&do_output, 1, MPI_INT, 0, dist::comm()); + if (do_output) { + // it is time for the next output + output_this_iteration = true; + last_output_time_slice[outdim] = cctk_time; + this_iteration_slice[outdim] = cctk_iteration; + } + } + } // select output criterion + + return output_this_iteration ? 1 : 0; + } + + + + template<int outdim> + int IOHDF5<outdim>::TriggerOutput (const cGH* const cctkGH, const int vindex) + { + DECLARE_CCTK_PARAMETERS; + + assert (vindex >= 0 and vindex < CCTK_NumVars()); + + char* const fullname = CCTK_FullName(vindex); + + int retval; + if (one_file_per_group) { + char* const alias = CCTK_GroupNameFromVarI (vindex); + for (char* p = alias; *p; ++p) *p = (char) tolower (*p); + retval = OutputVarAs (cctkGH, fullname, alias); + free (alias); + } else { + const char* const alias = CCTK_VarName (vindex); + retval = OutputVarAs (cctkGH, fullname, alias); + } + + free (fullname); + + return retval; + } + + + + static void GetVarIndex (const int vindex, const char* const optstring, + void* const arg) + { + if (optstring) { + char* const fullname = CCTK_FullName(vindex); + CCTK_VWarn (2, __LINE__, __FILE__, CCTK_THORNSTRING, + "Option string '%s' will be ignored for HDF5 output of " + "variable '%s'", optstring, fullname); + free (fullname); + } + + *static_cast<int*>(arg) = vindex; + } + + template<int outdim> + int IOHDF5<outdim>::OutputVarAs (const cGH* const cctkGH, + const char* const varname, + const char* const alias) + { + DECLARE_CCTK_PARAMETERS; + + int vindex = -1; + + if (CCTK_TraverseString (varname, GetVarIndex, &vindex, CCTK_VAR) < 0) { + CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, + "error while parsing variable name '%s' (alias name '%s')", + varname, alias); + return -1; + } + + if (vindex < 0) { + return -1; + } + + if (not (is_level_mode() or + (is_singlemap_mode() and maps == 1) or + (is_local_mode() and maps == 1 and + vhh.at(Carpet::map)->local_components(reflevel) == 1))) + { + CCTK_WARN (1, "OutputVarAs must be called in level mode"); + return -1; + } + + BEGIN_LEVEL_MODE (cctkGH) { + + // Get information + const int group = CCTK_GroupIndexFromVarI (vindex); + assert (group >= 0); + cGroup groupdata; + { + int const ierr = CCTK_GroupData (group, & groupdata); + assert (not ierr); + } + + // Check information + if (groupdata.grouptype != CCTK_GF) { + assert (do_global_mode); + } + + if (outdim >= groupdata.dim) { + CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, + "Cannot produce %dD slice HDF5 output file '%s' for variable '%s' " + "because it has only %d dimensions", + outdim, alias, varname, groupdata.dim); + return -1; + } + + // Check for storage + if (not CCTK_QueryGroupStorageI (cctkGH, group)) { + // This may be okay if storage is e.g. scheduled only in the + // analysis bin + CCTK_VWarn (4, __LINE__, __FILE__, CCTK_THORNSTRING, + "Cannot output variable '%s' because it has no storage", + varname); + return 0; + } + + ostringstream basefilenamebuf; + basefilenamebuf << my_out_slice_dir << "/" << alias; + const string basefilename = basefilenamebuf.str(); + + // Check if the file has been created already + bool is_new_file, truncate_file; + const bool did_output = + DidOutput (cctkGH, vindex, basefilename, is_new_file, truncate_file); + if (did_output) { + return 0; + } + + // Loop over all direction combinations + vect<int,outdim> dirs (0); + bool done; + do { + + // Output each combination only once + bool ascending = true; + for (int d1=0; d1<outdim; ++d1) { + for (int d2=d1+1; d2<outdim; ++d2) { + ascending = ascending and dirs[d1] < dirs[d2]; + } + } + + // Skip output if the dimensions are not ascending + if (ascending) { + + // Skip output if not requested + if (DirectionIsRequested(dirs)) { + OutputDirection (cctkGH, vindex, alias, basefilename, dirs, + is_new_file, truncate_file); + } + + } // if ascending + + // Next direction combination + done = true; + for (int d=0; d<outdim; ++d) { + ++dirs[d]; + if (dirs[d]<groupdata.dim + (outdim == 1 ? 1 : 0)) { + done = false; + break; + } + dirs[d] = 0; + } + + } while (not done); // output all directions + + } END_LEVEL_MODE; + + return 0; + } + + + + // Traverse all maps and components on this refinement and multigrid + // level + template<int outdim> + void IOHDF5<outdim>::OutputDirection (const cGH* const cctkGH, + const int vindex, + const string alias, + const string basefilename, + const vect<int,outdim>& dirs, + const bool is_new_file, + const bool truncate_file) + { + DECLARE_CCTK_PARAMETERS; + + // Get information + const int group = CCTK_GroupIndexFromVarI (vindex); + assert (group >= 0); + const int vindex0 = CCTK_FirstVarIndexI (group); + assert (vindex0 >= 0 and vindex >= vindex0); + const int var = vindex - vindex0; + cGroup groupdata; + { + int const ierr = CCTK_GroupData (group, & groupdata); + assert (not ierr); + } + + const int ml = groupdata.grouptype == CCTK_GF ? mglevel : 0; + const int rl = groupdata.grouptype == CCTK_GF ? reflevel : 0; + + const int num_tl = CCTK_NumTimeLevelsFromVarI (vindex); + assert (num_tl >= 1); + + const int numvars = CCTK_NumVarsInGroupI(group); + + + + // Loop over all maps + const int m_min = 0; + const int m_max = groupdata.grouptype == CCTK_GF ? Carpet::maps : 1; + for (int m = m_min; m < m_max; ++ m) { + + hid_t file = -1; + int error_count = 0; + error_count += OpenFile (cctkGH, m, vindex, numvars, alias, basefilename, + dirs, is_new_file, truncate_file, file); + + // Find the output offset + const ivect offset = + groupdata.grouptype == CCTK_GF ? GetOutputOffset (cctkGH, m, dirs) : 0; + + const gh* const hh = arrdata.at(group).at(m).hh; + const dh* const dd = arrdata.at(group).at(m).dd; + + // Traverse all components on this multigrid level, refinement + // level, and map + const int c_min = 0; + const int c_max = + groupdata.grouptype == CCTK_GF ? + vhh.at(m)->components(reflevel) : + groupdata.disttype != CCTK_DISTRIB_CONSTANT ? + CCTK_nProcs(cctkGH) : + 1; + for (int c = c_min; c < c_max; ++ c) { + int const lc = hh->get_local_component(rl,c); + int const proc = hh->processor(rl,c); + if (dist::rank() == proc or dist::rank() == ioproc) { + + const ibbox& data_ext = dd->boxes.at(ml).at(rl).at(c).exterior; + const ibbox ext = GetOutputBBox (cctkGH, group, m, c, data_ext); + + CCTK_REAL coord_time; + rvect coord_lower, coord_upper; + GetCoordinates (cctkGH, m, groupdata, ext, + coord_time, coord_lower, coord_upper); + + // Apply offset + ivect offset1; + if (groupdata.grouptype == CCTK_GF) { + const ibbox& baseext = hh->baseextents.at(ml).at(rl); + offset1 = baseext.lower() + offset * ext.stride(); + } else { + offset1 = offset * ext.stride(); + } + for (int d=0; d<outdim; ++d) { + if (dirs[d] < 3) { + offset1[dirs[d]] = ext.lower()[dirs[d]]; + } + } + + const int tl_min = 0; + const int tl_max = output_all_timelevels ? num_tl : 1; + for (int tl = tl_min; tl < tl_max; ++tl) { + + mempool pool; + + const int n_min = one_file_per_group ? 0 : var; + const int n_max = + one_file_per_group ? CCTK_NumVarsInGroupI(group) : var+1; + vector<const gdata*> datas(n_max - n_min); + for (size_t n = 0; n < datas.size(); ++ n) { + if (dist::rank() == proc) { + const ggf* const ff = + arrdata.at(group).at(m).data.at(n + n_min); + datas.at(n) = (*ff) (tl, rl, lc, ml); + } else { + datas.at(n) = NULL; + } + } + + vector<gdata*> tmpdatas(datas.size()); + + if (proc != ioproc) { + + for (size_t n = 0; n < datas.size(); ++ n) { + const ggf* const ff = + arrdata.at(group).at(m).data.at(n + n_min); + tmpdatas.at(n) = ff->typed_data (tl, rl, c, ml); + size_t const memsize = + tmpdatas.at(n)->allocsize (data_ext, ioproc); + void * const memptr = pool.alloc (memsize); + tmpdatas.at(n)->allocate(data_ext, ioproc, memptr, memsize); + } // for n + + for (comm_state state; not state.done(); state.step()) { + for (size_t n=0; n<datas.size(); ++n) { + tmpdatas.at(n)->copy_from + (state, datas.at(n), data_ext, ioproc, proc); + } + } + + } else { + + for (size_t n=0; n<datas.size(); ++n) { + tmpdatas.at(n) = const_cast<gdata*> (datas.at(n)); + } + + } + + if (dist::rank() == ioproc) { + error_count += + WriteHDF5 (cctkGH, file, tmpdatas, ext, vindex, + offset1, dirs, + rl, ml, m, c, tl, + coord_time, coord_lower, coord_upper); + } + + if (proc != ioproc) { + for (size_t n=0; n<tmpdatas.size(); ++n) { + delete tmpdatas.at(n); + } + } + + } // for tl + + } + } // for c + + error_count += CloseFile (cctkGH, file); + if (error_count > 0 and abort_on_io_errors) { + CCTK_WARN (0, "Aborting simulation due to previous I/O errors"); + } + + } // for m + } + + + + template<int outdim> + bool IOHDF5<outdim>::DidOutput (const cGH* const cctkGH, + const int vindex, + const string basefilename, + bool& is_new_file, bool& truncate_file) + { + DECLARE_CCTK_PARAMETERS; + + typedef std::map<string, vector<vector<vector<int> > > > filelist; + static filelist created_files; + + filelist::iterator thisfile = created_files.find (basefilename); + is_new_file = thisfile == created_files.end(); + truncate_file = is_new_file and IO_TruncateOutputFiles (cctkGH); + + if (is_new_file) { + const int numelems = + one_file_per_group ? CCTK_NumGroups() : CCTK_NumVars(); + vector<vector<vector<int> > > last_outputs; // [ml][rl][var] + last_outputs.resize(mglevels); + for (int ml=0; ml<mglevels; ++ml) { + last_outputs.at(ml).resize (maxreflevels); + for (int rl=0; rl<maxreflevels; ++rl) { + last_outputs.at(ml).at(rl).resize + (numelems, cctkGH->cctk_iteration - 1); + } + } + // TODO: this makes a copy of last_outputs, which is expensive; + // change this to use a reference instead + thisfile = created_files.insert + (thisfile, filelist::value_type (basefilename, last_outputs)); + assert (thisfile != created_files.end()); + } + + // Check if this variable has been output already during this + // iteration + const int elem = + one_file_per_group ? CCTK_GroupIndexFromVarI(vindex) : vindex; + int& last_output = thisfile->second.at(mglevel).at(reflevel).at(elem); + if (last_output == cctkGH->cctk_iteration) { + // has already been output during this iteration + char* const fullname = CCTK_FullName (vindex); + CCTK_VWarn (5, __LINE__, __FILE__, CCTK_THORNSTRING, + "Skipping output for variable '%s', because this variable " + "has already been output during the current iteration -- " + "probably via a trigger during the analysis stage", + fullname); + free (fullname); + return true; + } + assert (last_output < cctkGH->cctk_iteration); + last_output = cctkGH->cctk_iteration; + + return false; + } + + + + CCTK_REAL io_files; + CCTK_REAL io_bytes; + + template<int outdim> + int IOHDF5<outdim>::OpenFile (const cGH* const cctkGH, + const int m, + const int vindex, + const int numvars, + const string alias, + const string basefilename, + const vect<int,outdim>& dirs, + const bool is_new_file, + const bool truncate_file, + hid_t& file) + { + DECLARE_CCTK_PARAMETERS; + + int error_count = 0; + + BeginTimingIO (cctkGH); + io_files = 0; + io_bytes = 0; + + if (dist::rank() == ioproc) { + + const int grouptype = CCTK_GroupTypeFromVarI(vindex); + assert (grouptype >= 0); + + // Invent a file name + ostringstream filenamebuf; + filenamebuf << basefilename; + if (maps > 1 and grouptype == CCTK_GF) { + filenamebuf << "." << m; + } + filenamebuf << "."; + for (int d=0; d<outdim; ++d) { + const char* const coords = "xyzd"; + filenamebuf << coords[dirs[d]]; + } + filenamebuf << ".h5"; + // we need a persistent temporary here + const string filenamestr = filenamebuf.str(); + const char* const filename = filenamestr.c_str(); + + // Open the file + bool file_exists = false; + if (not truncate_file) { + H5E_BEGIN_TRY { + file_exists = H5Fis_hdf5(filename) > 0; + } H5E_END_TRY; + } + + if (truncate_file or not file_exists) { + HDF5_ERROR(file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, + H5P_DEFAULT)); + // write metadata information + error_count += + WriteMetadata(cctkGH, nioprocs, vindex, numvars, false, file); + } else { + HDF5_ERROR (file = H5Fopen(filename, H5F_ACC_RDWR, H5P_DEFAULT)); + } + io_files += 1; + + } // if on the I/O processor + + return error_count; + } + + template<int outdim> + int IOHDF5<outdim>::CloseFile (const cGH* const cctkGH, + hid_t& file) + { + DECLARE_CCTK_PARAMETERS; + + int error_count = 0; + + if (dist::rank() == ioproc) { + if (file >= 0) { + HDF5_ERROR(H5Fclose(file)); + } + } + if (nioprocs > 1) { + CCTK_REAL local[2], global[2]; + local[0] = io_files; + local[1] = io_bytes; + MPI_Allreduce (local, global, 2, dist::mpi_datatype (local[0]), MPI_SUM, dist::comm()); + io_files = global[0]; + io_bytes = global[1]; + } + + EndTimingIO (cctkGH, io_files, io_bytes, true); + + return error_count; + } + + + + // Check whether this output direction has been requested + template<int outdim> + bool IOHDF5<outdim>::DirectionIsRequested (const vect<int,outdim>& dirs) + { + DECLARE_CCTK_PARAMETERS; + + switch (outdim) { + + case 0: + // Output is always requested (if switched on) + return true; + + case 1: + switch (dirs[0]) { + case 0: return out1D_x; + case 1: return out1D_y; + case 2: return out1D_z; + case 3: return out1D_d; + default: assert (0); + } + + case 2: + if (dirs[0]==0 and dirs[1]==1) return out2D_xy; + if (dirs[0]==0 and dirs[1]==2) return out2D_xz; + if (dirs[0]==1 and dirs[1]==2) return out2D_yz; + assert (0); + +// case 3: +// // Output is always requested (if switched on) +// return true; + + default: + assert (0); + // Prevent compiler warning about missing return statement + return false; + } + } + + + + // Get the region that should be output, in terms of grid points; + // this is the offset perpendicular to the output hyperslab + template<int outdim> + ivect IOHDF5<outdim>::GetOutputOffset (const cGH* const cctkGH, const int m, + const vect<int,outdim>& dirs) + { + DECLARE_CCTK_PARAMETERS; + + // Default is zero + ivect offset (0); + + switch (outdim) { + + case 0: + // 0D output + offset[0] = GetGridOffset (cctkGH, m, 1, + "out0D_point_xi", /*"out_point_xi"*/ NULL, + "out0D_point_x", /*"out_point_x"*/ NULL, + /*out_point_x*/ 0.0); + offset[1] = GetGridOffset (cctkGH, m, 2, + "out0D_point_yi", /*"out_point_yi"*/ NULL, + "out0D_point_y", /*"out_point_y"*/ NULL, + /*out_point_y*/ 0.0); + offset[2] = GetGridOffset (cctkGH, m, 3, + "out0D_point_zi", /*"out_point_zi"*/ NULL, + "out0D_point_z", /*"out_point_z"*/ NULL, + /*out_point_z*/ 0.0); + break; + + case 1: + // 1D output + switch (dirs[0]) { + case 0: + offset[1] = GetGridOffset (cctkGH, m, 2, + "out1D_xline_yi", "out_xline_yi", + "out1D_xline_y", "out_xline_y", + out_xline_y); + offset[2] = GetGridOffset (cctkGH, m, 3, + "out1D_xline_zi", "out_xline_zi", + "out1D_xline_z", "out_xline_z", + out_xline_z); + break; + case 1: + offset[0] = GetGridOffset (cctkGH, m, 1, + "out1D_yline_xi", "out_yline_xi", + "out1D_yline_x", "out_yline_x", + out_yline_x); + offset[2] = GetGridOffset (cctkGH, m, 3, + "out1D_yline_zi", "out_yline_zi", + "out1D_yline_z", "out_yline_z", + out_yline_z); + break; + case 2: + offset[0] = GetGridOffset (cctkGH, m, 1, + "out1D_zline_xi", "out_zline_xi", + "out1D_zline_x", "out_zline_x", + out_zline_x); + offset[1] = GetGridOffset (cctkGH, m, 2, + "out1D_zline_yi", "out_zline_yi", + "out1D_zline_y", "out_zline_y", + out_zline_y); + break; + case 3: + // the diagonal: we don't care about the offset + break; + default: + assert (0); + } + break; + + case 2: + // 2D output + if (dirs[0]==0 and dirs[1]==1) { + offset[2] = GetGridOffset (cctkGH, m, 3, + "out2D_xyplane_zi", "out_xyplane_zi", + "out2D_xyplane_z", "out_xyplane_z", + out_xyplane_z); + } else if (dirs[0]==0 and dirs[1]==2) { + offset[1] = GetGridOffset (cctkGH, m, 2, + "out2D_xzplane_yi", "out_xzplane_yi", + "out2D_xzplane_y", "out_xzplane_y", + out_xzplane_y); + } else if (dirs[0]==1 and dirs[1]==2) { + offset[0] = GetGridOffset (cctkGH, m, 1, + "out2D_yzplane_xi", "out_yzplane_xi", + "out2D_yzplane_x", "out_yzplane_x", + out_yzplane_x); + } else { + assert (0); + } + break; + +// case 3: +// // 3D output: the offset does not matter +// break; + + default: + assert (0); + } + + return offset; + } + + + + // Omit symmetry and ghost zones if requested + ibbox GetOutputBBox (const cGH* const cctkGH, + const int group, + const int m, const int c, + const ibbox& ext) + { + DECLARE_CCTK_PARAMETERS; + + const int groupdim = CCTK_GroupDimI(group); + assert (groupdim >= 0); + const int grouptype = CCTK_GroupTypeI(group); + assert (grouptype >= 0); + + // TODO: This is a bit ad hoc + CCTK_INT symtable; + if (grouptype == CCTK_GF and groupdim == cctkGH->cctk_dim) { + symtable = SymmetryTableHandleForGrid (cctkGH); + if (symtable < 0) CCTK_WARN (0, "internal error"); + } else { + symtable = SymmetryTableHandleForGI (cctkGH, group); + if (symtable < 0) CCTK_WARN (0, "internal error"); + } + + CCTK_INT symbnd[2*dim]; + int const ierr = Util_TableGetIntArray + (symtable, 2*groupdim, symbnd, "symmetry_handle"); + if (ierr != 2*groupdim) CCTK_WARN (0, "internal error"); + + bool is_symbnd[2*dim]; + for (int d=0; d<2*groupdim; ++d) { + is_symbnd[d] = symbnd[d] >= 0; + } + + ivect lo = ext.lower(); + ivect hi = ext.upper(); + const ivect str = ext.stride(); + + const b2vect obnds = vhh.at(m)->outer_boundaries(reflevel,c); + const i2vect ghost_width = arrdata.at(group).at(m).dd->ghost_width; + + for (int d=0; d<groupdim; ++d) { + bool const output_lower_ghosts = + obnds[0][d] + ? (is_symbnd[2*d] + ? output_symmetry_points + : out3D_outer_ghosts) + : out3D_ghosts; + bool const output_upper_ghosts = + obnds[1][d] + ? (is_symbnd[2*d+1] + ? output_symmetry_points + : out3D_outer_ghosts) + : out3D_ghosts; + + if (not output_lower_ghosts) { + lo[d] += ghost_width[0][d] * str[d]; + } + if (not output_upper_ghosts) { + hi[d] -= ghost_width[1][d] * str[d]; + } + } + + return ibbox(lo,hi,str); + } + + + + // Determine coordinates + void GetCoordinates (const cGH* const cctkGH, const int m, + const cGroup& groupdata, + const ibbox& ext, + CCTK_REAL& coord_time, + rvect& coord_lower, rvect& coord_upper) + { + coord_time = cctkGH->cctk_time; + + rvect global_lower; + rvect coord_delta; + if (groupdata.grouptype == CCTK_GF) { + rvect const cctk_origin_space = origin_space.at(m).at(mglevel); + rvect const cctk_delta_space = delta_space.at(m) * rvect(mglevelfact); + for (int d=0; d<dim; ++d) { + // lower boundary of Carpet's integer indexing + global_lower[d] = cctk_origin_space[d]; + // grid spacing of Carpet's integer indexing + coord_delta[d] = (cctk_delta_space[d] / + vhh.at(m)->baseextents.at(0).at(0).stride()[d]); + } + } else { + for (int d=0; d<dim; ++d) { + global_lower[d] = 0.0; + coord_delta[d] = 1.0; + } + } + + coord_lower = global_lower + coord_delta * rvect(ext.lower()); + coord_upper = global_lower + coord_delta * rvect(ext.upper()); + } + + + + int GetGridOffset (const cGH* const cctkGH, const int m, const int dir, + const char* const iparam, const char* const iglobal, + const char* const cparam, const char* const cglobal, + const CCTK_REAL cfallback) + { + // First choice: explicit coordinate + const int ncparam = CCTK_ParameterQueryTimesSet (cparam, CCTK_THORNSTRING); + assert (ncparam >= 0); + if (ncparam > 0) { + int ptype; + const CCTK_REAL* const pcoord + = ((const CCTK_REAL*)CCTK_ParameterGet + (cparam, CCTK_THORNSTRING, &ptype)); + assert (pcoord); + const CCTK_REAL coord = *pcoord; + assert (ptype == PARAMETER_REAL); + return CoordToOffset (cctkGH, m, dir, coord, 0); + } + + // Second choice: explicit index + const int niparam = CCTK_ParameterQueryTimesSet (iparam, CCTK_THORNSTRING); + assert (niparam >= 0); + if (niparam > 0) { + int ptype; + const int* const pindex + = (const int*)CCTK_ParameterGet (iparam, CCTK_THORNSTRING, &ptype); + assert (pindex); + const int index = *pindex; + assert (ptype == PARAMETER_INT); + return index; + } + + // Third choice: explicit global coordinate + const char* iothorn = CCTK_ImplementationThorn ("IO"); + assert (iothorn); + if (cglobal) { + const int ncglobal = CCTK_ParameterQueryTimesSet (cglobal, iothorn); + assert (ncglobal >= 0); + if (ncglobal > 0) { + int ptype; + const CCTK_REAL* const pcoord + = (const CCTK_REAL*)CCTK_ParameterGet (cglobal, iothorn, &ptype); + assert (pcoord); + const CCTK_REAL coord = *pcoord; + assert (ptype == PARAMETER_REAL); + return CoordToOffset (cctkGH, m, dir, coord, 0); + } + } + + // Fourth choice: explicit global index + if (iglobal) { + const int niglobal = CCTK_ParameterQueryTimesSet (iglobal, iothorn); + assert (niglobal >= 0); + if (niglobal > 0) { + int ptype; + const int* const pindex + = (const int*)CCTK_ParameterGet (iglobal, iothorn, &ptype); + assert (pindex); + const int index = *pindex; + assert (ptype == PARAMETER_INT); + return index; + } + } + + // Fifth choice: default coordinate + return CoordToOffset (cctkGH, m, dir, cfallback, 0); + } + + + + int CoordToOffset (const cGH* cctkGH, const int m, const int dir, + const CCTK_REAL coord, const int ifallback) + { + assert (m>=0 and m<Carpet::maps and dir>=1 and dir<=dim); + + assert (mglevel!=-1 and reflevel!=-1 and Carpet::map==-1); + + rvect const cctk_origin_space = origin_space.at(m).at(mglevel); + rvect const cctk_delta_space = delta_space.at(m) * rvect (mglevelfact); + ivect const cctk_levfac = spacereffacts.at (reflevel); + ibbox const & coarseext = vhh.at(m)->baseextents.at(mglevel).at(0 ); + ibbox const & baseext = vhh.at(m)->baseextents.at(mglevel).at(reflevel); + ivect const cctk_levoff = baseext.lower() - coarseext.lower(); + ivect const cctk_levoffdenom = baseext.stride(); + + const CCTK_REAL delta = cctk_delta_space[dir-1] / cctk_levfac[dir-1]; + const CCTK_REAL lower = cctk_origin_space[dir-1] + cctk_delta_space[dir-1] / cctk_levfac[dir-1] * cctk_levoff[dir-1] / cctk_levoffdenom[dir-1]; + + const CCTK_REAL rindex = (coord - lower) / delta; + int cindex = (int)floor(rindex + 0.75); + + return cindex; + } + + + + // Output + template<int outdim> + int IOHDF5<outdim>::WriteHDF5 (const cGH* cctkGH, + hid_t& file, + vector<gdata*> const gfdatas, + const bbox<int,dim>& gfext, + const int vi, + const vect<int,dim>& org, + const vect<int,outdim>& dirs, + const int rl, + const int ml, + const int m, + const int c, + const int tl, + const CCTK_REAL coord_time, + const vect<CCTK_REAL,dim>& coord_lower, + const vect<CCTK_REAL,dim>& coord_upper) + { + DECLARE_CCTK_PARAMETERS; + + assert (outdim<=dim); + + cGroup groupdata; + { + int const gi = CCTK_GroupIndexFromVarI (vi); + assert (gi >= 0); + int const ierr = CCTK_GroupData (gi, & groupdata); + assert (not ierr); + } + + // boolean that says if we are doing 1D-diagonal output + // This is not beautiful, but works for the moment + bool const diagonal_output = outdim == 1 and dirs[0] == 3; + + // Check whether the output bbox overlaps + // with the extent of the data to be output +// FIXME: move this check up in the call stack + bool output_bbox_overlaps_data_extent; + if (not diagonal_output) { + + const vect<int,outdim> lo = gfext.lower()[dirs]; + const vect<int,outdim> up = gfext.upper()[dirs]; + const vect<int,outdim> str = gfext.stride()[dirs]; + const bbox<int,outdim> ext(lo,up,str); + + // Check whether the output origin is contained in the extent + // of the data that should be output + ivect org1(org); + for (int d=0; d<outdim; ++d) org1[dirs[d]] = ext.lower()[d]; + output_bbox_overlaps_data_extent = gfext.contains(org1); + + } else { + + gh const & hh = *vhh.at(m); + ibbox const & base = hh.baseextents.at(mglevel).at(reflevel); + + assert (base.stride()[0] == base.stride()[1] and + base.stride()[0] == base.stride()[2]); + + // Check if any point on the diagonal is in our gf's extent + output_bbox_overlaps_data_extent = false; + for (int i=maxval(base.lower()); + i<=minval(base.upper()); i+=base.stride()[0]) { + + ivect const pos = ivect(i,i,i); + output_bbox_overlaps_data_extent |= gfext.contains(pos); + } + } + // Shortcut if there is nothing to output + if (not output_bbox_overlaps_data_extent) { + return 0; + } + + int error_count = 0; + + ostringstream datasetname_suffix; + datasetname_suffix << " it=" << cctkGH->cctk_iteration << " tl=" << tl; + if (mglevels > 1) datasetname_suffix << " ml=" << ml; + if (groupdata.grouptype == CCTK_GF) { + if (maps > 1) datasetname_suffix << " m=" << m; + datasetname_suffix << " rl=" << rl; + } + if (groupdata.grouptype == CCTK_GF or + groupdata.disttype != CCTK_DISTRIB_CONSTANT) { + datasetname_suffix << " c=" << c; + } + + // enable compression and checksums if requested + hid_t plist; + HDF5_ERROR(plist = H5Pcreate(H5P_DATASET_CREATE)); + if (compression_level) { + HDF5_ERROR(H5Pset_deflate(plist, compression_level)); + } + if (use_checksums) { + HDF5_ERROR(H5Pset_filter(plist, H5Z_FILTER_FLETCHER32, 0, 0, 0)); + } + + // enable datatype conversion if requested + const hid_t mem_type = + CCTKtoHDF5_Datatype(cctkGH, groupdata.vartype, false); + const hid_t slice_type = + CCTKtoHDF5_Datatype(cctkGH, groupdata.vartype, out_single_precision); + + if (not diagonal_output) { // not outputting the diagonal + + const vect<int,outdim> lo = gfext.lower()[dirs]; + const vect<int,outdim> up = gfext.upper()[dirs]; + const vect<int,outdim> str = gfext.stride()[dirs]; + const bbox<int,outdim> ext(lo,up,str); + + // Check whether the output origin is contained in the extent of + // the data that should be output + ivect org1(org); + for (int d=0; d<outdim; ++d) org1[dirs[d]] = ext.lower()[d]; + assert (gfext.contains(org1)); + + // HDF5 wants ranks to be >= 1 + const int rank = outdim > 0 ? outdim : 1; + vector<hsize_t> mem_shape(dim); + vector<hsize_t> slice_shape(rank, 1); + for (int d = 0; d < dim; d++) { + mem_shape[dim-1-d] = gfext.shape()[d] / gfext.stride()[d]; + if (d < outdim) { + slice_shape[outdim-1-d] = ext.shape()[d] / ext.stride()[d]; + } + } + + ivect slice_lower(org - gfext.lower()); + for (int d = 0; d < outdim; d++) { + slice_lower[dirs[d]] = 0; + } + ivect slice_upper(slice_lower); + for (int d = 0; d < outdim; d++) { + slice_upper[dirs[d]] = ext.upper()[d] - ext.lower()[d]; + } + slice_lower /= gfext.stride(); + slice_upper /= gfext.stride(); + + slice_start_size_t slice_start[dim]; + hsize_t slice_count[dim]; + for (int d = 0; d < dim; d++) { + slice_start[dim-1-d] = slice_lower[d]; + slice_count[dim-1-d] = slice_upper[d] - slice_lower[d] + 1; + } + if (compression_level or use_checksums) { + HDF5_ERROR(H5Pset_chunk(plist, slice_shape.size(), &slice_shape[0])); + } + hid_t slice_space, mem_space; + HDF5_ERROR(slice_space = + H5Screate_simple (slice_shape.size(), &slice_shape[0], NULL)); + HDF5_ERROR(mem_space = + H5Screate_simple (mem_shape.size(), &mem_shape[0], NULL)); + HDF5_ERROR(H5Sselect_hyperslab (mem_space, H5S_SELECT_SET, + slice_start, NULL, slice_count, NULL)); + + vector<int> iorigin(rank, 0); + vector<double> delta(rank, 0), origin(rank, 0); + for (int d = 0; d < outdim; d++) { + assert(gfext.upper()[dirs[d]] - gfext.lower()[dirs[d]] >= 0); + iorigin[d] = ext.lower()[d]; + delta[d] = 0; + origin[d] = coord_lower[dirs[d]]; + if (gfext.upper()[dirs[d]] - gfext.lower()[dirs[d]] > 0) { + delta[d] = (coord_upper[dirs[d]] - coord_lower[dirs[d]]) / + (gfext.upper()[dirs[d]] - gfext.lower()[dirs[d]]) * gfext.stride()[dirs[d]]; + origin[d] += (org1[dirs[d]] - gfext.lower()[dirs[d]]) * delta[d]; + } + } + + // now loop over all variables + for (size_t n = 0; n < gfdatas.size(); n++) { + + // create a unique name for this variable's dataset + char *fullname = CCTK_FullName(vi + n); + string datasetname (fullname); + datasetname.append (datasetname_suffix.str()); + + // remove an already existing dataset of the same name + if (slice_requests.at(vi + n)->check_exist) { + H5E_BEGIN_TRY { + H5Gunlink(file, datasetname.c_str()); + } H5E_END_TRY; + } + + // write the dataset + hid_t dataset; + HDF5_ERROR(dataset = + H5Dcreate (file, datasetname.c_str(), + slice_type, slice_space, plist)); + HDF5_ERROR(H5Dwrite (dataset, mem_type, mem_space, H5S_ALL, + H5P_DEFAULT, gfdatas[n]->storage())); + error_count += + AddSliceAttributes (cctkGH, fullname, rl, origin, delta, iorigin, + dataset); + HDF5_ERROR(H5Dclose (dataset)); + free (fullname); + + io_bytes += + H5Sget_simple_extent_npoints(slice_space) * H5Tget_size(slice_type); + } // for n + + HDF5_ERROR(H5Sclose (mem_space)); + HDF5_ERROR(H5Sclose (slice_space)); + + } else { // taking care of the diagonal + + const ivect lo = gfext.lower(); + const ivect up = gfext.upper(); + const ivect str = gfext.stride(); + const ibbox ext(lo,up,str); + + gh const & hh = *vhh.at(m); + ibbox const & base = hh.baseextents.at(mglevel).at(reflevel); + + assert (base.stride()[0] == base.stride()[1] and + base.stride()[0] == base.stride()[2]); + + // count the number of points on the diagonal + hsize_t npoints = 0; + for (int i = maxval(base.lower()); + i <= minval(base.upper()); + i += base.stride()[0]) + { + if (gfext.contains(i)) { + ++ npoints; + } + } + assert(npoints > 0); + + // allocate a contiguous buffer for the diagonal points + vector<char> buffer (CCTK_VarTypeSize(groupdata.vartype) * + npoints * gfdatas.size()); + + // copy diagonal points into contiguous buffer + hsize_t offset = 0; + for (int i = maxval(base.lower()); + i <= minval(base.upper()); + i += base.stride()[0]) + { + ivect const pos = ivect(i,i,i); + if(gfext.contains(pos)) { + for (size_t n = 0; n < gfdatas.size(); n++) { + switch (groupdata.vartype) { +#define TYPECASE(N,T) \ + case N: { T* typed_buffer = (T*) &buffer.front(); \ + typed_buffer[offset + n*npoints] = \ + (*(const data<T>*)gfdatas.at(n))[pos]; \ + break; \ + } +#include "carpet_typecase.hh" +#undef TYPECASE + } + } + ++ offset; + } + } + assert(offset == npoints); + + if (compression_level or use_checksums) { + HDF5_ERROR(H5Pset_chunk(plist, 1, &npoints)); + } + hid_t slice_space; + HDF5_ERROR(slice_space = H5Screate_simple(1, &npoints, NULL)); + + // loop over all variables and write out diagonals + for (size_t n = 0; n < gfdatas.size(); n++) { + + // create a unique name for this variable's dataset + char *fullname = CCTK_FullName(vi + n); + string datasetname (fullname); + free (fullname); + datasetname.append (datasetname_suffix.str()); + + // remove an already existing dataset of the same name + if (slice_requests[vi + n]->check_exist) { + H5E_BEGIN_TRY { + H5Gunlink(file, datasetname.c_str()); + } H5E_END_TRY; + } + + // write the dataset + hid_t dataset; + HDF5_ERROR(dataset = + H5Dcreate(file, datasetname.c_str(), + slice_type, slice_space, plist)); + HDF5_ERROR(H5Dwrite (dataset, mem_type, + H5S_ALL, H5S_ALL, H5P_DEFAULT, + &buffer.front() + n*npoints*gfdatas.size())); + HDF5_ERROR(H5Dclose (dataset)); + + io_bytes += + H5Sget_simple_extent_npoints(slice_space) * H5Tget_size(slice_type); + } + + HDF5_ERROR(H5Sclose(slice_space)); + + } // if(not diagonal_output) + + HDF5_ERROR(H5Pclose(plist)); + + return error_count; + } + + + + // Explicit instantiation for all slice output dimensions + template class IOHDF5<0>; + template class IOHDF5<1>; + template class IOHDF5<2>; +// template class IOHDF5<3>; + +} // namespace CarpetIOHDF5 diff --git a/Carpet/CarpetIOHDF5/src/make.code.defn b/Carpet/CarpetIOHDF5/src/make.code.defn index 930eab3af..223c95158 100644 --- a/Carpet/CarpetIOHDF5/src/make.code.defn +++ b/Carpet/CarpetIOHDF5/src/make.code.defn @@ -1,7 +1,7 @@ # Main make.code.defn file for thorn CarpetIOHDF5 # Source files in this directory -SRCS = CarpetIOHDF5.cc Input.cc Output.cc +SRCS = CarpetIOHDF5.cc Input.cc Output.cc OutputSlice.cc # Extend CXXFLAGS if HDF5 library was built with LFS support ifneq ($(strip $(HDF5_LFS_FLAGS)),) diff --git a/Carpet/CarpetIOHDF5/src/make.configuration.defn b/Carpet/CarpetIOHDF5/src/make.configuration.defn index b2c159945..ca3b64978 100644 --- a/Carpet/CarpetIOHDF5/src/make.configuration.defn +++ b/Carpet/CarpetIOHDF5/src/make.configuration.defn @@ -1,2 +1,2 @@ -# add the Carpet HDF5-to-ASCII converter/slicer -ALL_UTILS += hdf5toascii_slicer hdf5_slicer +# add the Carpet HDF5-to-ASCII converter/slicer/recombiner +ALL_UTILS += hdf5toascii_slicer hdf5tobinary_slicer hdf5_slicer hdf5_recombiner diff --git a/Carpet/CarpetIOHDF5/src/make.configuration.deps b/Carpet/CarpetIOHDF5/src/make.configuration.deps index 61b8e22e0..475206db9 100644 --- a/Carpet/CarpetIOHDF5/src/make.configuration.deps +++ b/Carpet/CarpetIOHDF5/src/make.configuration.deps @@ -2,7 +2,7 @@ CARPETIOHDF5_BUILD_DIR = $(BUILD_DIR)/CarpetIOHDF5 CARPETIOHDF5_SRC_DIR = $(PACKAGE_DIR)/Carpet/CarpetIOHDF5/src/util CARPETIOHDF5_CFLAGS = -DCCODE $(CFLAGS) -CARPETIOHDF5_LDFLAGS = $(DEBUG_LD) $(LDFLAGS) $(EXTRAFLAGS) $(HDF5_LIB_DIRS:%=-L%) $(HDF5_LIBS:%=-l%) +CARPETIOHDF5_LDFLAGS = $(DEBUG_LD) $(LDFLAGS) $(EXTRAFLAGS) $(GENERAL_LIBRARIES) # Extend CFLAGS if HDF5 library was built with LFS support ifneq ($(strip $(HDF5_LFS_FLAGS)),) diff --git a/Carpet/CarpetIOHDF5/src/util/SubstituteDeprecatedParameters.pl b/Carpet/CarpetIOHDF5/src/util/SubstituteDeprecatedParameters.pl index bfd1b17b0..bfd1b17b0 100755..100644 --- a/Carpet/CarpetIOHDF5/src/util/SubstituteDeprecatedParameters.pl +++ b/Carpet/CarpetIOHDF5/src/util/SubstituteDeprecatedParameters.pl diff --git a/Carpet/CarpetIOHDF5/src/util/hdf5_recombiner.cc b/Carpet/CarpetIOHDF5/src/util/hdf5_recombiner.cc new file mode 100644 index 000000000..ecee483d3 --- /dev/null +++ b/Carpet/CarpetIOHDF5/src/util/hdf5_recombiner.cc @@ -0,0 +1,253 @@ +#include <cassert> +#include <cstdio> +#include <cstring> +#include <iostream> +#include <list> +#include <string> +#include <vector> + +#include <cctk_Config.h> + +#include <hdf5.h> + +using namespace std; + + + +// Global constants +int const dim = 3; + +// Files and datasets +int const num_input_files = 0; +char const *const input_file_pattern = "interptoarray::parrays3d.file_%d.h5"; +int const iteration_divisor = 1024; +char const *const output_file_name = "parrays3d-float.h5"; +char const *const output_dataset_name = "phi"; +hsize_t const output_dims[] = { 0, 1024, 1024, 1024 }; // [t,z,y,x] +hsize_t const output_maxdims[] = { H5S_UNLIMITED, 1024, 1024, 1024 }; +typedef float output_t; +hid_t const output_type = H5T_NATIVE_FLOAT; + +// Technical details +hsize_t const chunk_size[] = { 1, 128, 128, 128 }; // 8 MB for float +int const compression_level = 1; +bool const write_checksum = true; + + + +// Check a return value +#define check(_expr) do { bool const _val = (_expr); assert(_val); } while(0) + + + +static herr_t add_name (hid_t group, const char *name, + H5L_info_t const *info, void *op_data); + + + +int main (int argc, char **argv) +{ + cout << "hdf5_recombiner" << endl + << "Copyright 2009 Erik Schnetter <schnetter@cct.lsu.edu>" << endl + << endl; + + + + cout << "Opening output file \"" << output_file_name << "\"" << endl; + + htri_t is_hdf5; + H5E_BEGIN_TRY { + is_hdf5 = H5Fis_hdf5 (output_file_name); + } H5E_END_TRY; + bool const file_exists = is_hdf5 > 0; + hid_t const output_file = + file_exists ? + H5Fopen (output_file_name, H5F_ACC_RDWR, H5P_DEFAULT) : + H5Fcreate (output_file_name, H5F_ACC_EXCL, H5P_DEFAULT, H5P_DEFAULT); + + + + cout << "Opening output dataset \"" << output_dataset_name << "\""<< endl; + + hid_t const output_datatype = output_type; + + hid_t const output_dataspace = + H5Screate_simple (dim+1, output_dims, output_maxdims); + assert (output_dataspace >= 0); + + hid_t const output_properties = H5Pcreate (H5P_DATASET_CREATE); + assert (output_properties >= 0); + check (not H5Pset_chunk (output_properties, dim+1, chunk_size)); + if (compression_level > 0) { + check (not H5Pset_deflate (output_properties, compression_level)); + } + if (write_checksum) { + check (not H5Pset_fletcher32 (output_properties)); + } + + hid_t const output_dataset = + file_exists ? + H5Dopen (output_file, output_dataset_name, H5P_DEFAULT) : + H5Dcreate (output_file, output_dataset_name, + output_datatype, output_dataspace, + H5P_DEFAULT, output_properties, H5P_DEFAULT); + assert (output_dataset >= 0); + + + + list<string> input_file_names; + for (int input_file_num=0; input_file_num<num_input_files; ++input_file_num) { + char input_file_name[10000]; + snprintf (input_file_name, sizeof input_file_name, + input_file_pattern, input_file_num); + input_file_names.push_back (input_file_name); + } + for (int n=1; n<argc; ++n) { + input_file_names.push_back (argv[n]); + } + + for (list<string>::const_iterator iinput_file_name = input_file_names.begin(); + iinput_file_name != input_file_names.end(); + ++ iinput_file_name) + { + string const& input_file_name = *iinput_file_name; + cout << "Opening input file \"" << input_file_name << "\"" << endl; + hid_t const input_file = + H5Fopen (input_file_name.c_str(), H5F_ACC_RDWR, H5P_DEFAULT); + assert (input_file >= 0); + + typedef list<string> names_t; + names_t names; + hsize_t idx = 0; + check (not H5Literate (input_file, + H5_INDEX_NAME, H5_ITER_NATIVE, + &idx, add_name, &names)); + for (names_t::const_iterator iname = + names.begin(); iname!=names.end(); ++iname) + { + char const *const input_dataset_name = iname->c_str(); + cout << "Reading input dataset \"" << input_dataset_name << "\"" << endl; + + char varname[10000]; + int it, tl, c; + int const icnt = sscanf (input_dataset_name, + "%s it=%d tl=%d c=%d", varname, &it, &tl, &c); + assert (icnt == 4); + assert (it % iteration_divisor == 0); + int const iteration = it / iteration_divisor; + + hid_t const input_dataset = + H5Dopen (input_file, input_dataset_name, H5P_DEFAULT); + assert (input_dataset >= 0); + + int iorigin[dim]; + hid_t const iorigin_attr = + H5Aopen (input_dataset, "iorigin", H5P_DEFAULT); + assert (iorigin_attr >= 0); + check (not H5Aread (iorigin_attr, H5T_NATIVE_INT, iorigin)); + check (not H5Aclose (iorigin_attr)); + + hid_t const input_dataspace = H5Dget_space (input_dataset); + assert (input_dataspace >= 0); + assert (H5Sis_simple (input_dataspace) > 0); + assert (H5Sget_simple_extent_ndims (input_dataspace) == dim); + hsize_t input_dims[dim]; + check (H5Sget_simple_extent_dims (input_dataspace, input_dims, NULL) == + dim); + + hid_t const input_memory_dataspace = + H5Screate_simple (dim, input_dims, NULL); + assert (input_memory_dataspace); + hssize_t const input_memory_npoints = + H5Sget_simple_extent_npoints (input_memory_dataspace); + vector<output_t> data (input_memory_npoints); + + check (not H5Dread (input_dataset, + output_type, input_memory_dataspace, + input_dataspace, + H5P_DEFAULT, &data.front())); + + check (not H5Sclose (input_memory_dataspace)); + check (not H5Sclose (input_dataspace)); + check (not H5Dclose (input_dataset)); + + + + cout << "Writing output dataset" << endl; + + hsize_t output_extent[dim+1]; + output_extent[0] = iteration + 1; + for (int d=0; d<dim; ++d) { + output_extent[d+1] = output_dims[d+1]; + } + check (not H5Dextend (output_dataset, output_extent)); + + hid_t const output_dataspace = + H5Screate_simple (dim+1, output_extent, output_maxdims); + assert (output_dataspace >= 0); + + hsize_t output_offset[dim+1]; + hsize_t output_dims[dim+1]; + output_offset[0] = iteration; + output_dims [0] = 1; + for (int d=0; d<dim; ++d) { + output_offset[d+1] = iorigin[dim-1-d]; + output_dims [d+1] = input_dims[d]; + } + check (not H5Sselect_hyperslab (output_dataspace, H5S_SELECT_SET, + output_offset, NULL, output_dims, NULL)); + cout << " extent [" + << output_offset[3] << "," + << output_offset[2] << "," + << output_offset[1] << "," + << output_offset[0] << "] - [" + << output_offset[3] + output_dims[3] << "," + << output_offset[2] + output_dims[2] << "," + << output_offset[1] + output_dims[1] << "," + << output_offset[0] + output_dims[0] << "] " + << "(" << data.size() << " points)" << endl; + + hid_t const output_memory_dataspace = + H5Screate_simple (dim+1, output_dims, NULL); + assert (output_memory_dataspace); + hssize_t const output_memory_npoints = + H5Sget_simple_extent_npoints (output_memory_dataspace); + assert (output_memory_npoints == input_memory_npoints); + + check (not H5Dwrite (output_dataset, + output_type, output_memory_dataspace, + output_dataspace, + H5P_DEFAULT, &data.front())); + + H5Sclose (output_memory_dataspace); + H5Sclose (output_dataspace); + + } // for names + + check (not H5Fclose (input_file)); + + } // for input_file_num + + + + check (not H5Dclose (output_dataset)); + check (not H5Pclose (output_properties)); + check (not H5Sclose (output_dataspace)); + check (not H5Fclose (output_file)); + + cout << "Done." << endl; + return 0; +} + + + +static herr_t add_name (hid_t const group, const char *const name, + H5L_info_t const *const info, void *const op_data) +{ + typedef list<string> names_t; + names_t& names = * static_cast<names_t*> (op_data); + if (strcmp (name, "Parameters and Global Attributes") != 0) { + names.push_back (name); + } + return 0; +} diff --git a/Carpet/CarpetIOHDF5/src/util/hdf5toascii_slicer.cc b/Carpet/CarpetIOHDF5/src/util/hdf5toascii_slicer.cc index 9472f41b0..0c9d32885 100644 --- a/Carpet/CarpetIOHDF5/src/util/hdf5toascii_slicer.cc +++ b/Carpet/CarpetIOHDF5/src/util/hdf5toascii_slicer.cc @@ -18,16 +18,9 @@ #include <cstring> #include <regex.h> -// some macros to fix compatibility issues as long -// as 1.8.0 is in beta phase #define H5_USE_16_API 1 - #include <hdf5.h> -#if (H5_VERS_MAJOR == 1 && (H5_VERS_MINOR == 8) && (H5_VERS_RELEASE == 0)) -#warning "Hacking HDF5 1.8.0 compatiblity with 1.6.x; fix once 1.8.0 stable" -#endif - using namespace std; /***************************************************************************** diff --git a/Carpet/CarpetIOHDF5/src/util/hdf5tobinary_slicer.cc b/Carpet/CarpetIOHDF5/src/util/hdf5tobinary_slicer.cc new file mode 100644 index 000000000..d1d75c169 --- /dev/null +++ b/Carpet/CarpetIOHDF5/src/util/hdf5tobinary_slicer.cc @@ -0,0 +1,814 @@ + /*@@ + @file hdf5tobinary_slicer.cc + @date April 23, 2009 + @author Erik Schnetter, based on hdf5toascii_slicer.cc by Thomas Radke + @desc + Utility program to extract a 1D line or 2D slice from 3D datasets + in datafiles generated by CarpetIOHDF5. + The extracted slab is written to a binary file. + @enddesc + @@*/ + +#include <algorithm> +#include <iostream> +#include <iomanip> +#include <limits> +#include <sstream> +#include <string> +#include <vector> +#include <cassert> +#include <cmath> +#include <cstdio> +#include <cstring> +#include <regex.h> + +#define H5_USE_16_API 1 +#include <hdf5.h> + +using namespace std; + +/***************************************************************************** + ************************* Macro Definitions *************************** + *****************************************************************************/ + +// uncomment the following line to get some debug output +// #define DEBUG 1 + +// value for an unset parameter +#define PARAMETER_UNSET -424242.0 + +// fuzzy factor for comparing dataset timesteps with user-specified value +#define FUZZY_FACTOR 1e-6 + +// the datatype for the 'start' argument in H5Sselect_hyperslab() +#if (H5_VERS_MAJOR == 1 && \ + (H5_VERS_MINOR < 6 || (H5_VERS_MINOR == 6 && H5_VERS_RELEASE < 4))) +#define h5size_t hssize_t +#else +#define h5size_t hsize_t +#endif + +// macro to check the return code of calls to the HDF5 library +#define CHECK_HDF5(fn_call) { \ + const int _retval = fn_call; \ + if (_retval < 0) { \ + cerr << "HDF5 call " << #fn_call \ + << " in file " << __FILE__ << " line " << __LINE__ \ + << " returned error code " << _retval << endl; \ + } \ + } + + +/***************************************************************************** + ************************** Type Definitions *************************** + *****************************************************************************/ + +typedef struct { + hid_t file; + string name; + bool is_real; + hsize_t dims[3]; // C order + + int map, mglevel, component, iteration, timelevel, rflevel; + double time; + int iorigin[3]; // Fortran order + double origin[3], delta[3]; // Fortran order +} patch_t; + + +/***************************************************************************** + ************************* Global Data ************************* + *****************************************************************************/ + +// the slab coordinate as selected by the user (Fortan order) +static double slab_coord[3] = {PARAMETER_UNSET, PARAMETER_UNSET, PARAMETER_UNSET}; + +// flag for outputting data in full 3D +static bool out3D = false; + +// the specific timestep selected by the user +static double timestep = PARAMETER_UNSET; + +// the regular expression to match against dataset names +static const char* regex = NULL; +static regex_t preg; + +// the dataset name, if given explicitly +static const char* datasetname = NULL; + +// the list of all patches +static vector<patch_t> patchlist; + +// maximum refinement level across all patches +static int max_rflevel = -1; + +// whether to print omitted patches +static bool verbose = false; + +// pointer to array that is filled with the data (Fortran order) +static int datadims[3] = {-1,-1,-1}; +static float* dataptr = NULL; +static unsigned char* bdataptr = NULL; + +// output file name +static char* basename1 = NULL; + +// output format, either raw binary or HDF5 +static bool out_hdf5 = false; +static int out_hdf5_4d_index = -1; + +// output type (float or byte) +static bool out_float = false; +static float data_min = -1.0; +static float data_max = +1.0; + +/***************************************************************************** + ************************* Function Prototypes ************************* + *****************************************************************************/ +static herr_t FindPatches (hid_t group, const char *name, void *_file); +static void ReadPatch (const patch_t& patch, int last_iteration); +static bool ComparePatches (const patch_t& a, const patch_t& b); + + + /*@@ + @routine main + @date Sun 30 July 2006 + @author Thomas Radke + @desc + Evaluates command line options and opens the input files. + @enddesc + + @var argc + @vdesc number of command line parameters + @vtype int + @vio in + @endvar + @var argv + @vdesc array of command line parameters + @vtype char* const [] + @vio in + @endvar + @@*/ +int main (int argc, char *const argv[]) +{ + int i; + bool help = false; +#if 0 + int iorigin[3] = {-1, -1, -1}; +#endif + int num_slab_options = 0; + + + // evaluate command line parameters + for (i = 1; i < argc; i++) { + if (strcmp (argv[i], "--help") == 0) { + help = true; break; + } else if (strcmp (argv[i], "--verbose") == 0) { + verbose = true; + } else if (strcmp (argv[i], "--out3d-cube") == 0) { + out3D = true; + } else if (strcmp (argv[i], "--timestep") == 0 and i+1 < argc) { + timestep = atof (argv[++i]); + } else if (strcmp (argv[i], "--match") == 0 and i+1 < argc) { + regex = argv[++i]; + if (regcomp (&preg, regex, REG_EXTENDED)) { + cerr << "Error: invalid regular expression '" << regex << "' given" + << endl << endl; + return (-1); + } + } else if (strcmp (argv[i], "--dataset") == 0 and i+1 < argc) { + datasetname = argv[++i]; + } else if (strcmp (argv[i], "--out-precision") == 0 and i+1 < argc) { + cout << setprecision (atoi (argv[++i])); + } else if (strcmp (argv[i], "--out0d-point") == 0 and i+3 < argc) { + slab_coord[0] = atof (argv[++i]); + slab_coord[1] = atof (argv[++i]); + slab_coord[2] = atof (argv[++i]); num_slab_options++; + } else if (strcmp (argv[i], "--out1d-xline-yz") == 0 and i+2 < argc) { + slab_coord[1] = atof (argv[++i]); + slab_coord[2] = atof (argv[++i]); num_slab_options++; + } else if (strcmp (argv[i], "--out1d-yline-xz") == 0 and i+2 < argc) { + slab_coord[0] = atof (argv[++i]); + slab_coord[2] = atof (argv[++i]); num_slab_options++; + } else if (strcmp (argv[i], "--out1d-zline-xy") == 0 and i+2 < argc) { + slab_coord[0] = atof (argv[++i]); + slab_coord[1] = atof (argv[++i]); num_slab_options++; + } else if (strcmp (argv[i], "--out2d-yzplane-x") == 0 and i+1 < argc) { + slab_coord[0] = atof (argv[++i]); num_slab_options++; + } else if (strcmp (argv[i], "--out2d-xzplane-y") == 0 and i+1 < argc) { + slab_coord[1] = atof (argv[++i]); num_slab_options++; + } else if (strcmp (argv[i], "--out2d-xyplane-z") == 0 and i+1 < argc) { + slab_coord[2] = atof (argv[++i]); num_slab_options++; +#if 0 + } else if (strcmp (argv[i], "--out2d-yzplane-xi") == 0 and i+1 < argc) { + iorigin[0] = atoi (argv[++i]); num_slab_options++; + } else if (strcmp (argv[i], "--out2d-xzplane-yi") == 0 and i+1 < argc) { + iorigin[1] = atoi (argv[++i]); num_slab_options++; + } else if (strcmp (argv[i], "--out2d-xyplane-zi") == 0 and i+1 < argc) { + iorigin[2] = atoi (argv[++i]); num_slab_options++; +#endif + } else if (strcmp (argv[i], "--size") == 0 and i+3 < argc) { + datadims[0] = atof (argv[++i]); + datadims[1] = atof (argv[++i]); + datadims[2] = atof (argv[++i]); + } else if (strcmp (argv[i], "--basename") == 0 and i+1 < argc) { + basename1 = argv[++i]; + } else if (strcmp (argv[i], "--out-hdf5") == 0) { + out_hdf5 = true; + } else if (strcmp (argv[i], "--out-float") == 0) { + out_float = true; + } else if (strcmp (argv[i], "--data-min") == 0 and i+1 < argc) { + data_min = atof (argv[++i]); + } else if (strcmp (argv[i], "--data-max") == 0 and i+1 < argc) { + data_max = atof (argv[++i]); + } else if (strcmp (argv[i], "--out-hdf5-4d-index") == 0 and i+1 < argc) { + out_hdf5_4d_index = atof (argv[++i]); + } else { + break; + } + } + + /* give some help if called with incorrect number of parameters */ + if (help or i >= argc or num_slab_options != (out3D ? 0 : 1)) { + const string indent (strlen (argv[0]) + 1, ' '); + cerr << endl << " ---------------------------" + << endl << " Carpet HDF5 to ASCII Slicer" + << endl << " ---------------------------" << endl + << endl + << "Usage: " << endl + << argv[0] << " [--help]" << endl + << indent << "[--match <regex string>]" << endl + << indent << "[--dataset <string (can contain %p)>]" << endl + << indent << "[--out-precision <digits>]" << endl + << indent << "[--timestep <cctk_time value>]" << endl + << indent << "[--verbose]" << endl + << indent << "<--out0d-point value value value> | <--out1d-line value value> | <--out2d-plane value> | <out3d-cube>" << endl + << indent << "--size <ni> <nj> <nk>" << endl + << indent << "--basename <filename>" << endl + << indent << "[--out-hdf5]" << endl + << indent << "[--out-float]" << endl + << indent << "[--out-hdf5-4d-index <t index>]" << endl + << indent << "<hdf5_infiles>" << endl << endl + << " where" << endl + << " [--help] prints this help" << endl + << " [--match <regex string>] selects HDF5 datasets by their names" << endl + << " matching a regex string using POSIX" << endl + << " Extended Regular Expression syntax" << endl + << " [--out-precision <digits>] sets the output precision" << endl + << " for floating-point numbers" << endl + << " [--timestep <cctk_time value>] selects all HDF5 datasets which" << endl + << " (fuzzily) match the specified time" << endl + << " [--verbose] lists skipped HDF5 datasets on stderr" << endl + << endl + << " and either --out0d-point value value value> or <--out1d-line value value> or <--out2d-plane value> or <--out3d-cube>" << endl + << " must be specified as in the following:" << endl + << " --out0d-point <origin_x> <origin_y> <origin_z>" << endl + << endl + << " --out1d-xline-yz <origin_y> <origin_z>" << endl + << " --out1d-yline-xz <origin_x> <origin_z>" << endl + << " --out1d-zline-xy <origin_x> <origin_y>" << endl + << endl + << " --out2d-yzplane-x <origin_x>" << endl + << " --out2d-xzplane-y <origin_y>" << endl + << " --out2d-xyplane-z <origin_z>" << endl + << endl + << " --out3d-cube" << endl +#if 0 + << " --out2d-yzplane-xi <origin_xi>" << endl + << " --out2d-xzplane-yi <origin_yi>" << endl + << " --out2d-xyplane-zi <origin_zi>" << endl +#endif + << endl + << " eg, to extract a 2D xy-plane at z = 0:" << endl + << " " << argv[0] << " --out2d-xyplane-z 0 alp.file_*.h5" << endl + << endl + << " or the same plane but only for datasets of refinement level 0:" << endl + << " " << argv[0] << " --match 'ADMBASE::alp it=[0-9]+ tl=0 rl=0' --out2d-xyplane-z 0 alp.file_*.h5" << endl; + return (0); + } + + if (not basename1) { + cerr << "Parameter --basename is not set" << endl; + return 1; + } + + if (regex and datasetname) { + cerr << "Parameters --match and --dataset cannot be used together" << endl; + return 1; + } + + { + if (datadims[0]<0 || datadims[1]<0 || datadims[2]<0) { + cerr << "Parameter --size is not set" << endl; + return 1; + } + size_t const npoints = (size_t)datadims[0]*datadims[1]*datadims[2]; + dataptr = new float[npoints]; + assert (dataptr); + bdataptr = new unsigned char[npoints]; + assert (bdataptr); + } + + vector<hid_t> filelist; + for (; i < argc; i++) { + hid_t file; + + H5E_BEGIN_TRY { + file = H5Fopen (argv[i], H5F_ACC_RDONLY, H5P_DEFAULT); + } H5E_END_TRY; + + if (file < 0) { + cerr << "Could not open Carpet HDF5 input file '" << argv[i] << "'" + << endl << endl; + continue; + } + + if (not datasetname) { + cout << "File " << argv[i] << ":" << endl; + size_t const before = patchlist.size(); + CHECK_HDF5 (H5Giterate (file, "/", NULL, FindPatches, &file)); + size_t const after = patchlist.size(); + size_t const count = after - before; + cout << " will read " << count << " " + << (count==1 ? "patch" : "patches") << endl; + } else { + const string ppmarker ("%p"); + const string filemarker (".file_"); + string name (datasetname); + const size_t pppos = name.find(ppmarker); + if (pppos != string::npos) { + const string filename (argv[i]); + const size_t procpos = filename.find(filemarker); + assert (procpos != string::npos); + const int proc = atoi(filename.c_str() + procpos + filemarker.length()); + ostringstream namebuf; + namebuf << name.substr(0,pppos) << proc + << name.substr(pppos + ppmarker.length()); + name = namebuf.str(); + } + cout << " Examining dataset " << name << endl; + hid_t group; + CHECK_HDF5 (group = H5Dopen (file, name.c_str())); + FindPatches (group, name.c_str(), &file); + CHECK_HDF5 (H5Dclose (group)); + } + + filelist.push_back (file); + } + + if (! patchlist.empty()) { + /* now sort the patches by their time attribute */ + sort (patchlist.begin(), patchlist.end(), ComparePatches); + + cout << "# 1D ASCII output created by"; + for (int j = 0; j < argc; j++) cout << " " << argv[j]; + cout << endl << "#" << endl; + + int last_iteration = patchlist[0].iteration - 1; + for (size_t j = 0; j < patchlist.size(); j++) { + ReadPatch (patchlist[j], last_iteration); + last_iteration = patchlist[j].iteration; + } + } else { + cerr << "No valid datasets found" << endl << endl; + } + + // find minimum and maximum + { + float const float_max = numeric_limits<float>::max(); + float data_min1 = +float_max; + float data_max1 = -float_max; + double data_sum = 0.0; + double data_sum2 = 0.0; + double data_count = 0.0; + size_t const npoints = (size_t)datadims[0]*datadims[1]*datadims[2]; + for (size_t n=0; n<npoints; ++n) { + float const data = dataptr[n]; + if (data > -sqrt(float_max) and data < sqrt(float_max)) { + data_min1 = min(data_min1, data); + data_max1 = max(data_max1, data); + data_sum += (double)data; + data_sum2 += pow((double)data, 2.0); + ++ data_count; + } + } + double const data_avg = data_sum / data_count; + double const data_stddev = + sqrt(max(0.0, data_sum2/data_count - pow(data_avg, 2))); + + cerr << "Minimum: " << data_min1 << endl + << "Maximum: " << data_max1 << endl + << "Average: " << data_avg << endl + << "Standard deviation: " << data_stddev << endl + << "Valid points: " << data_count << endl; + } + + // convert from float to byte + if (not out_float) { + unsigned char const byte_min = 0; + unsigned char const byte_max = 255; + float const scale_factor = + ((float)byte_max - (float)byte_min + 1) / (data_max - data_min); + size_t const npoints = (size_t)datadims[0]*datadims[1]*datadims[2]; + for (size_t n=0; n<npoints; ++n) { + float const data = dataptr[n]; + float const data_scaled = + (float)byte_min + floor((data - data_min) * scale_factor); + float const data_clamped = + max((float)byte_min, min((float)byte_max, data_scaled)); + unsigned char const bdata = + (unsigned char)data_clamped; + bdataptr[n] = bdata; + } + } + + hid_t const out_type = out_float ? H5T_NATIVE_FLOAT : H5T_NATIVE_UCHAR; + size_t const out_size = out_float ? sizeof *dataptr : sizeof *bdataptr; + void const * const out_data = + out_float ? + static_cast<void const*>(dataptr) : + static_cast<void const*>(bdataptr); + + // write output files + if (out_hdf5) { + // HDF5 output + if (out_hdf5_4d_index == -1) { + // 3D output + char filename[1000]; + snprintf (filename, sizeof filename, "%s.h5", basename1); + hid_t const outfile = H5Fcreate (filename, H5F_ACC_TRUNC, + H5P_DEFAULT, H5P_DEFAULT); + assert (outfile >= 0); + hsize_t const dims[3] = { datadims[2], datadims[1], datadims[0] }; + hid_t const dataspace = H5Screate_simple (3, dims, NULL); + assert (dataspace >= 0); + hid_t const dataset_properties = H5Pcreate (H5P_DATASET_CREATE); + assert (dataset_properties >= 0); + hid_t const dataset = H5Dcreate (outfile, "data", + out_type, dataspace, + dataset_properties); + assert (dataset >= 0); + hid_t const transfer_properties = H5Pcreate (H5P_DATASET_XFER); + assert (transfer_properties >= 0); + { + herr_t const herr = H5Dwrite (dataset, out_type, + H5S_ALL, H5S_ALL, + transfer_properties, out_data); + assert (herr >= 0); + } + CHECK_HDF5 (H5Dclose (dataset)); + CHECK_HDF5 (H5Sclose (dataspace)); + CHECK_HDF5 (H5Fclose (outfile)); + } else { + // 4d output + char filename[1000]; + snprintf (filename, sizeof filename, "%s.h5", basename1); + htri_t is_hdf5; + H5E_BEGIN_TRY { + is_hdf5 = H5Fis_hdf5 (filename); + } H5E_END_TRY; + bool const file_is_new = not (is_hdf5 > 0); + hid_t const outfile = + file_is_new ? + H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT) : + H5Fopen (filename, H5F_ACC_RDWR, H5P_DEFAULT); + assert (outfile >= 0); + + hsize_t const dims[4] = + { 0, datadims[2], datadims[1], datadims[0] }; + hsize_t const maxdims[4] = + { H5S_UNLIMITED, datadims[2], datadims[1], datadims[0] }; + hid_t const dataspace = H5Screate_simple (4, dims, maxdims); + assert (dataspace >= 0); + hid_t const dataset_properties = H5Pcreate (H5P_DATASET_CREATE); + assert (dataset_properties >= 0); + // hsize_t const chunk_dims[4] = {1, 32, 32, 32 }; + // Chunks must be < 4 GByte + // hsize_t const chunk_dims[4] = + // {1, datadims[2], datadims[1], datadims[0] }; + hsize_t const chunk_dims[4] = + {1, min(128,datadims[2]), min(128,datadims[1]), min(128,datadims[0]) }; + CHECK_HDF5 (H5Pset_chunk (dataset_properties, 4, chunk_dims)); + int const compression_level = 1; + CHECK_HDF5 (H5Pset_deflate (dataset_properties, compression_level)); + hid_t const dataset = + file_is_new ? + H5Dcreate (outfile, "data", + out_type, dataspace, dataset_properties) : + H5Dopen (outfile, "data"); + assert (dataset >= 0); + // TODO: assert that the dataset's dataspace has the correct + // dimensions + + hsize_t const extended_dims[4] = + { out_hdf5_4d_index+1, datadims[2], datadims[1], datadims[0] }; + CHECK_HDF5 (H5Dextend (dataset, extended_dims)); + + // for debugging only + // CHECK_HDF5 (H5Fflush (outfile, H5F_SCOPE_GLOBAL)); + + hsize_t const memory_dims[4] = + { 1, datadims[2], datadims[1], datadims[0] }; + hid_t const memory_dataspace = H5Screate_simple (4, memory_dims, NULL); + assert (memory_dataspace >= 0); + + hid_t const file_dataspace = H5Screate_simple (4, extended_dims, NULL); + assert (file_dataspace >= 0); + // hssize_t const file_offset[4] = + // { out_hdf5_4d_index, 0, 0, 0 }; + // CHECK_HDF5 (H5Soffset_simple (file_dataspace, file_offset)); + hsize_t const file_offset[4] = { out_hdf5_4d_index, 0, 0, 0 }; + CHECK_HDF5 (H5Sselect_hyperslab (file_dataspace, H5S_SELECT_SET, + file_offset, NULL, memory_dims, NULL)); + + hid_t const transfer_properties = H5Pcreate (H5P_DATASET_XFER); + assert (transfer_properties >= 0); + CHECK_HDF5 (H5Dwrite (dataset, + out_type, memory_dataspace, file_dataspace, + transfer_properties, out_data)); + + CHECK_HDF5 (H5Sclose (file_dataspace)); + CHECK_HDF5 (H5Sclose (memory_dataspace)); + CHECK_HDF5 (H5Dclose (dataset)); + CHECK_HDF5 (H5Sclose (dataspace)); + CHECK_HDF5 (H5Fclose (outfile)); + } + } else { + // raw binary output + { + char filename[1000]; + snprintf (filename, sizeof filename, "%s.bin", basename1); + FILE* const outfile = fopen(filename, "w"); + assert (outfile); + size_t const npoints = (size_t)datadims[0]*datadims[1]*datadims[2]; + size_t const icnt = fwrite (out_data, out_size, npoints, outfile); + assert (icnt == npoints); + int const ierr = fclose (outfile); + assert (not ierr); + } + } + + { + delete[] dataptr; + dataptr = NULL; + delete[] bdataptr; + bdataptr = NULL; + } + + // close all input files + for (size_t j = 0; j < filelist.size(); j++) { + if (filelist[j] >= 0) { + CHECK_HDF5 (H5Fclose (filelist[j])); + } + } + + return (0); +} + + + /*@@ + @routine FindPatches + @date Tue 8 August 2006 + @author Thomas Radke + @desc + The worker routine which is called by H5Giterate(). + It checks whether the current HDF5 object is a patch matching + the user's slab criteria, and adds it to the patches list. + @enddesc + + @var group + @vdesc HDF5 object to start the iteration + @vtype hid_t + @vio in + @endvar + @var name + @vdesc name of the object at the current iteration + @vtype const char * + @vio in + @endvar + @var _file + @vdesc pointer to the descriptor of the currently opened file + @vtype void * + @vio in + @endvar +@@*/ +static herr_t FindPatches (hid_t group, const char *name, void *_file) +{ + int ndims; + hid_t dataset, datatype, attr; + H5G_stat_t object_info; + H5T_class_t typeclass; + patch_t patch; + + + /* we are interested in datasets only - skip anything else */ + CHECK_HDF5 (H5Gget_objinfo (group, name, 0, &object_info)); + if (object_info.type != H5G_DATASET) { + return (0); + } + + /* check the dataset's datatype - make sure it is either integer or real */ + CHECK_HDF5 (dataset = H5Dopen (group, name)); + patch.name = name; + + CHECK_HDF5 (datatype = H5Dget_type (dataset)); + CHECK_HDF5 (typeclass = H5Tget_class (datatype)); + CHECK_HDF5 (H5Tclose (datatype)); + + // read the timestep + CHECK_HDF5 (attr = H5Aopen_name (dataset, "time")); + CHECK_HDF5 (H5Aread (attr, H5T_NATIVE_DOUBLE, &patch.time)); + CHECK_HDF5 (H5Aclose (attr)); + + // read the dimensions + hid_t dataspace = -1; + CHECK_HDF5 (dataspace = H5Dget_space (dataset)); + ndims = H5Sget_simple_extent_ndims (dataspace); + + bool is_okay = false; + if (typeclass != H5T_FLOAT and typeclass != H5T_INTEGER) { + if (verbose) { + cerr << "skipping dataset '" << name << "':" << endl + << " is not of integer or floating-point datatype" << endl; + } + } else if (ndims != 3) { + if (verbose) { + cerr << "skipping dataset '" << name << "':" << endl + << " dataset has " << ndims << " dimensions" << endl; + } + } else if (regex && regexec (&preg, name, 0, NULL, 0)) { + if (verbose) { + cerr << "skipping dataset '" << name << "':" << endl + << " name doesn't match regex" << endl; + } + } else if (timestep != PARAMETER_UNSET and + fabs (timestep - patch.time) > FUZZY_FACTOR) { + if (verbose) { + cerr << "skipping dataset '" << name << "':" << endl + << " timestep (" << patch.time << ") doesn't match" << endl; + } + } else { + if (not out3D) { + CHECK_HDF5 (attr = H5Aopen_name (dataset, "origin")); + CHECK_HDF5 (H5Aread (attr, H5T_NATIVE_DOUBLE, patch.origin)); + CHECK_HDF5 (H5Aclose (attr)); + CHECK_HDF5 (attr = H5Aopen_name (dataset, "delta")); + CHECK_HDF5 (H5Aread (attr, H5T_NATIVE_DOUBLE, patch.delta)); + CHECK_HDF5 (H5Aclose (attr)); + } + CHECK_HDF5 (H5Sget_simple_extent_dims (dataspace, patch.dims, NULL)); + + int i; + is_okay = out3D; + if (not out3D) { + for (i = 0; i < 3; i++) { + if (slab_coord[i] != PARAMETER_UNSET) { + is_okay = slab_coord[i] >= patch.origin[i] and + slab_coord[i] <= patch.origin[i] + + (patch.dims[2-i]-1)*patch.delta[i]; + if (not is_okay) break; + } + } + } + if (not is_okay) { + if (verbose) { + cerr << "skipping dataset '" << name << "':" << endl + << " slab " << slab_coord[i] << " is out of dataset range [" + << patch.origin[i] << ", " + << patch.origin[i] + (patch.dims[2-i]-1)*patch.delta[i] << "]" + << endl; + } + } + } + CHECK_HDF5 (H5Sclose (dataspace)); + + if (not is_okay) { + CHECK_HDF5 (H5Dclose (dataset)); + return (0); + } + + patch.file = *(hid_t *) _file; + patch.is_real = typeclass == H5T_FLOAT; + + /* read attributes */ + CHECK_HDF5 (attr = H5Aopen_name (dataset, "timestep")); + CHECK_HDF5 (H5Aread (attr, H5T_NATIVE_INT, &patch.iteration)); + CHECK_HDF5 (H5Aclose (attr)); + CHECK_HDF5 (attr = H5Aopen_name (dataset, "level")); + CHECK_HDF5 (H5Aread (attr, H5T_NATIVE_INT, &patch.rflevel)); + CHECK_HDF5 (H5Aclose (attr)); + CHECK_HDF5 (attr = H5Aopen_name (dataset, "group_timelevel")); + CHECK_HDF5 (H5Aread (attr, H5T_NATIVE_INT, &patch.timelevel)); + CHECK_HDF5 (H5Aclose (attr)); + CHECK_HDF5 (attr = H5Aopen_name (dataset, "carpet_mglevel")); + CHECK_HDF5 (H5Aread (attr, H5T_NATIVE_INT, &patch.mglevel)); + CHECK_HDF5 (H5Aclose (attr)); + CHECK_HDF5 (attr = H5Aopen_name (dataset, "iorigin")); + CHECK_HDF5 (H5Aread (attr, H5T_NATIVE_INT, patch.iorigin)); + CHECK_HDF5 (H5Aclose (attr)); + + CHECK_HDF5 (H5Dclose (dataset)); + + // the component and map info are not contained in the HDF5 dataset + // and thus have to be parsed from the dataset's name + patch.map = patch.component = 0; + string::size_type loc = patch.name.find (" m=", 0); + if (loc != string::npos) patch.map = atoi (patch.name.c_str() + loc + 3); + loc = patch.name.find (" c=", 0); + if (loc != string::npos) patch.component = atoi(patch.name.c_str() + loc + 3); + + if (max_rflevel < patch.rflevel) max_rflevel = patch.rflevel; + + patchlist.push_back (patch); + + return (0); +} + + + /*@@ + @routine ReadPatch + @date Tue 8 August 2006 + @author Thomas Radke + @desc + Reads a slab from the given patch + and outputs it in CarpetIOASCII format. + @enddesc + + @var patch + @vdesc patch to output + @vtype const patch_t& + @vio in + @endvar + @var last_iteration + @vdesc iteration number of the last patch that was output + @vtype int + @vio in + @endvar +@@*/ +static void ReadPatch (const patch_t& patch, int last_iteration) +{ + if (patch.iteration != last_iteration) cout << endl; + + cout << "# iteration " << patch.iteration << endl + << "# refinement level " << patch.rflevel + << " multigrid level " << patch.mglevel + << " map " << patch.map + << " component " << patch.component + << " time level " << patch.timelevel + << endl; + + // C order + h5size_t slabstart[3] = + {patch.iorigin[2], patch.iorigin[1], patch.iorigin[0]}; + hsize_t slabcount[3] = {patch.dims[0], patch.dims[1], patch.dims[2]}; + hsize_t slabsize[3] = {datadims[2], datadims[1], datadims[0]}; + for (int d=0; d<3; ++d) { + if (slab_coord[d] != PARAMETER_UNSET) { + slabstart[2-d] = (h5size_t) ((slab_coord[d] - patch.origin[d]) / + patch.delta[d] + 0.5); + slabcount[2-d] = 1; + } + } + for (int d=0; d<3; ++d) { + cout << "slab[" << d << "]: lbnd=" << slabstart[2-d] << " lsh=" << slabcount[2-d] << " gsh=" << slabsize[2-d] << endl; + } + for (int d=0; d<3; ++d) { + assert (slabstart[2-d] >= 0); + assert (slabcount[2-d] >= 0); + assert (slabstart[2-d] + slabcount[2-d] <= slabsize[2-d]); + } + + hid_t dataset, filespace, slabspace; + CHECK_HDF5 (dataset = H5Dopen (patch.file, patch.name.c_str())); + CHECK_HDF5 (filespace = H5Dget_space (dataset)); +#if 0 + CHECK_HDF5 (slabspace = H5Screate_simple (3, slabcount, slabsize)); + CHECK_HDF5 (H5Soffset_simple (slabspace, (hssize_t*)slabstart)); +// CHECK_HDF5 (H5Sselect_hyperslab (filespace, H5S_SELECT_SET, +// slabstart, NULL, slabcount, NULL)); +#endif + CHECK_HDF5 (slabspace = H5Screate_simple (3, slabsize, NULL)); + CHECK_HDF5 (H5Sselect_hyperslab (slabspace, H5S_SELECT_SET, + slabstart, NULL, slabcount, NULL)); + assert (patch.is_real); + CHECK_HDF5 (H5Dread (dataset, + H5T_NATIVE_FLOAT, + slabspace, filespace, H5P_DEFAULT, + dataptr)); + CHECK_HDF5 (H5Sclose (slabspace)); + CHECK_HDF5 (H5Sclose (filespace)); + CHECK_HDF5 (H5Dclose (dataset)); +} + + +// comparison function to sort patches by iteration number, refinement level, +// multigrid level, map, and component +static bool ComparePatches (const patch_t& a, const patch_t& b) +{ + if (a.iteration != b.iteration) return (a.iteration < b.iteration); + if (a.rflevel != b.rflevel) return (a.rflevel < b.rflevel); + if (a.mglevel != b.mglevel) return (a.mglevel < b.mglevel); + if (a.map != b.map) return (a.map < b.map); + if (a.component != b.component) return (a.component < b.component); + return (a.timelevel < b.timelevel); +} diff --git a/Carpet/CarpetIOScalar/README b/Carpet/CarpetIOScalar/README index cfce28fd4..a6cc34d50 100644 --- a/Carpet/CarpetIOScalar/README +++ b/Carpet/CarpetIOScalar/README @@ -1,8 +1,9 @@ Cactus Code Thorn CarpetIOScalar -Thorn Author(s) : Erik Schnetter <schnetter@aei.mpg.de> -Thorn Maintainer(s) : Erik Schnetter <schnetter@aei.mpg.de> +Author(s) : Erik Schnetter <schnetter@cct.lsu.edu> +Maintainer(s): Erik Schnetter <schnetter@cct.lsu.edu> +Licence : GPLv2+ -------------------------------------------------------------------------- -Purpose of the thorn: +1. Purpose This thorn provides scalar output for Carpet. diff --git a/Carpet/CarpetIOScalar/src/ioscalar.cc b/Carpet/CarpetIOScalar/src/ioscalar.cc index b25241659..b96528698 100644 --- a/Carpet/CarpetIOScalar/src/ioscalar.cc +++ b/Carpet/CarpetIOScalar/src/ioscalar.cc @@ -54,6 +54,7 @@ namespace CarpetIOScalar { static void* SetupGH (tFleshConfig* fc, int convLevel, cGH* cctkGH); static int OutputGH (const cGH* cctkGH); static int OutputVarAs (const cGH* cctkGH, const char* varname, const char* alias); + static int OutputVarAs (const cGH* cctkGH, const char* varname, const char* alias, const char* out_reductions); static int TimeToOutput (const cGH* cctkGH, int vindex); static int TriggerOutput (const cGH* cctkGH, int vindex); @@ -169,6 +170,19 @@ namespace CarpetIOScalar { OutputVarAs (const cGH * const cctkGH, const char* const varname, const char* const alias) { + DECLARE_CCTK_PARAMETERS; + + int const retval = OutputVarAs (cctkGH, varname, alias, + outScalar_reductions); + + return retval; + } + + int + OutputVarAs (const cGH * const cctkGH, + const char* const varname, const char* const alias, + const char* out_reductions) + { DECLARE_CCTK_ARGUMENTS; DECLARE_CCTK_PARAMETERS; @@ -233,7 +247,7 @@ namespace CarpetIOScalar { // Find the set of desired reductions list<info> reductions; - string const redlist (outScalar_reductions); + string const redlist (out_reductions); string::const_iterator p = redlist.begin(); while (p!=redlist.end()) { while (p!=redlist.end() and isspace(*p)) ++p; @@ -613,6 +627,11 @@ namespace CarpetIOScalar { assert (vindex>=0 and vindex<CCTK_NumVars()); + // use individual reductions list for this variable when given + // otherwise IOScalar::outScalar_reductions + const char* out_reductions = IOparameters.requests[vindex]->reductions; + if (not out_reductions) out_reductions = outScalar_reductions; + int retval; if (one_file_per_group) { @@ -621,7 +640,7 @@ namespace CarpetIOScalar { int const gindex = CCTK_GroupIndexFromVarI(vindex); char* const groupname = CCTK_GroupName(gindex); for (char* p=groupname; *p; ++p) *p=tolower(*p); - retval = OutputVarAs (cctkGH, fullname, groupname); + retval = OutputVarAs (cctkGH, fullname, groupname, out_reductions); free (fullname); free (groupname); @@ -635,7 +654,7 @@ namespace CarpetIOScalar { char* const fullname = CCTK_FullName(vindex); char const* const varname = CCTK_VarName(vindex); - retval = OutputVarAs (cctkGH, fullname, varname); + retval = OutputVarAs (cctkGH, fullname, varname, out_reductions); free (fullname); last_output.at(vindex) = cctk_iteration; @@ -661,20 +680,18 @@ namespace CarpetIOScalar { // notify the user about the new setting if (not CCTK_Equals (verbose, "none")) { int count = 0; - string msg ("Periodic scalar output requested for '"); - for (int i = CCTK_NumVars () - 1; i >= 0; i--) { - if (IOparameters.requests[i]) { - if (count++) { - msg += "', '"; - } - char *fullname = CCTK_FullName (i); - msg += fullname; + ostringstream msg; + msg << "Periodic scalar output requested for:"; + for (int vi=0; vi<CCTK_NumVars(); ++vi) { + if (IOparameters.requests[vi]) { + ++count; + char* const fullname = CCTK_FullName(vi); + msg << eol << " " << fullname; free (fullname); } } - if (count) { - msg += "'"; - CCTK_INFO (msg.c_str()); + if (count > 0) { + CCTK_INFO (msg.str().c_str()); } } diff --git a/Carpet/CarpetIOScalar/src/util/mergeCarpetIOScalar.pl b/Carpet/CarpetIOScalar/src/util/mergeCarpetIOScalar.pl index 3aae60c3b..3aae60c3b 100755..100644 --- a/Carpet/CarpetIOScalar/src/util/mergeCarpetIOScalar.pl +++ b/Carpet/CarpetIOScalar/src/util/mergeCarpetIOScalar.pl diff --git a/Carpet/CarpetIOStreamedHDF5/README b/Carpet/CarpetIOStreamedHDF5/README index 57009b177..0f5f11a91 100644 --- a/Carpet/CarpetIOStreamedHDF5/README +++ b/Carpet/CarpetIOStreamedHDF5/README @@ -1,9 +1,10 @@ Cactus Code Thorn CarpetIOStreamedHDF5 -Thorn Author(s) : Thomas Radke <tradke@aei.mpg.de> -Thorn Maintainer(s) : Thomas Radke <tradke@aei.mpg.de> +Author(s) : Thomas Radke <tradke@aei.mpg.de> +Maintainer(s): Thomas Radke <tradke@aei.mpg.de> +Licence : GPLv2+ -------------------------------------------------------------------------- -Purpose of the thorn: +1. Purpose This thorn uses the HDF5 Stream Virtual File Driver to stream Carpet HDF5 data files via a socket to any connected clients. diff --git a/Carpet/CarpetInterp/README b/Carpet/CarpetInterp/README index e7692e3ea..6e6aa5fa3 100644 --- a/Carpet/CarpetInterp/README +++ b/Carpet/CarpetInterp/README @@ -1,8 +1,9 @@ Cactus Code Thorn CarpetInterp -Thorn Author(s) : Erik Schnetter <schnetter@uni-tuebingen.de> -Thorn Maintainer(s) : Erik Schnetter <schnetter@uni-tuebingen.de> +Author(s) : Erik Schnetter <schnetter@cct.lsu.edu> +Maintainer(s): Erik Schnetter <schnetter@cct.lsu.edu> +Licence : GPLv2+ -------------------------------------------------------------------------- -Purpose of the thorn: +1. Purpose This thorn provides a parallel interpolator for Carpet. diff --git a/Carpet/CarpetInterp/param.ccl b/Carpet/CarpetInterp/param.ccl index d75bad138..090ef1bcb 100644 --- a/Carpet/CarpetInterp/param.ccl +++ b/Carpet/CarpetInterp/param.ccl @@ -16,11 +16,11 @@ CCTK_REAL ipoison "Integer poison value" STEERABLE=always BOOLEAN tree_search "Use a tree search to find the source processor" STEERABLE=always { -} "no" +} "yes" BOOLEAN check_tree_search "Cross-check the result of the tree search" STEERABLE=always { -} "yes" +} "no" SHARES: Cactus diff --git a/Carpet/CarpetInterp/src/interp.cc b/Carpet/CarpetInterp/src/interp.cc index 4591fc04b..4707fd7cc 100644 --- a/Carpet/CarpetInterp/src/interp.cc +++ b/Carpet/CarpetInterp/src/interp.cc @@ -4,6 +4,7 @@ #include <cstdlib> #include <cstring> #include <iostream> +#include <map> #include <vector> #include <mpi.h> @@ -65,6 +66,7 @@ namespace CarpetInterp { int const N_interp_points, int const N_input_arrays, int const N_output_arrays, + bool& want_global_mode, bool& have_source_map, vector<int> & num_time_derivs, int & prolongation_order_time, @@ -83,14 +85,16 @@ namespace CarpetInterp { int const maxrl, int const maxncomps, int const N_dims, + int const ndims, int const npoints, vector<CCTK_INT> & source_map, void const * const coords_list[], - vector<CCTK_REAL> const& coords, + CCTK_REAL const * const coords, vector<int>& procs, - vector<int>& N_points_to, + vector<int>& sendcnt, vector<int>& rlev, vector<int>& home, + std::map<int, int>& homecntsmap, vector<int>& homecnts); static void @@ -103,13 +107,15 @@ namespace CarpetInterp { bool const want_global_mode, int const prolongation_order_time, int const N_dims, - vector<int> & homecnts, - vector<CCTK_REAL*> & coords, - vector<char*> & outputs, + vector<int> const & homecnts, + std::map<int, int> const & homecntsmap, + vector<CCTK_INT> const & recvcnt, + vector<CCTK_REAL*> const & coords, + vector<char*> const & outputs, CCTK_INT* const per_proc_statuses, CCTK_INT* const per_proc_retvals, - vector<CCTK_INT> & operand_indices, - vector<CCTK_INT> & time_deriv_order, + vector<CCTK_INT> const & operand_indices, + vector<CCTK_INT> const & time_deriv_order, vector<int> const & num_time_derivs, CCTK_INT const local_interp_handle, CCTK_INT const param_table_handle, @@ -130,9 +136,9 @@ namespace CarpetInterp { char* const outputs, CCTK_INT& overall_status, CCTK_INT& overall_retval, - vector<CCTK_INT> & operand_indices, - vector<CCTK_INT> & time_deriv_order, - vector<CCTK_INT> & interp_num_time_levels, + vector<CCTK_INT> const & operand_indices, + vector<CCTK_INT> const & time_deriv_order, + vector<CCTK_INT> const & interp_num_time_levels, CCTK_INT const local_interp_handle, CCTK_INT const param_table_handle, vector<int> const & num_tl, @@ -289,8 +295,6 @@ namespace CarpetInterp { "It is not possible to interpolate in meta mode"); } - bool const want_global_mode = is_global_mode(); - // Multiple convergence levels are not supported assert (mglevels == 1); @@ -331,31 +335,13 @@ namespace CarpetInterp { MPI_Barrier (dist::comm()); } - - // Find range of refinement levels - assert (maps > 0); - for (int m=1; m<maps; ++m) { - assert (arrdata.AT(coord_group).AT(0).hh->reflevels() == - arrdata.AT(coord_group).AT(m).hh->reflevels()); - } - int const minrl = want_global_mode ? 0 : reflevel; - int const maxrl = want_global_mode ? - arrdata.AT(coord_group).AT(0).hh->reflevels() : reflevel+1; - - // Find maximum number of components over all levels and maps - int maxncomps = 0; - for (int rl=minrl; rl<maxrl; ++rl) { - for (int m=0; m<maps; ++m) { - maxncomps = max(maxncomps, arrdata.AT(coord_group).AT(m).hh->components(rl)); - } - } - ////////////////////////////////////////////////////////////////////// // Extract parameter table options: // - source map // - output array operand indices // - time interpolation order ////////////////////////////////////////////////////////////////////// + bool want_global_mode; vector<CCTK_INT> source_map (N_interp_points); vector<CCTK_INT> operand_indices (N_output_arrays); vector<CCTK_INT> time_deriv_order (N_output_arrays); @@ -369,7 +355,7 @@ namespace CarpetInterp { (cctkGH, param_table_handle, N_interp_points, N_input_arrays, N_output_arrays, - have_source_map, num_time_derivs, + want_global_mode, have_source_map, num_time_derivs, prolongation_order_time, current_time, delta_time, source_map, operand_indices, time_deriv_order); if (iret < 0) { @@ -378,121 +364,133 @@ namespace CarpetInterp { } } + // Find range of refinement levels + assert (maps > 0); + for (int m=1; m<maps; ++m) { + assert (arrdata.AT(coord_group).AT(0).hh->reflevels() == + arrdata.AT(coord_group).AT(m).hh->reflevels()); + } + int const minrl = want_global_mode ? 0 : reflevel; + int const maxrl = want_global_mode ? + arrdata.AT(coord_group).AT(0).hh->reflevels() : reflevel+1; + + // Find maximum number of components over all levels and maps + int maxncomps = 0; + for (int rl=minrl; rl<maxrl; ++rl) { + for (int m=0; m<maps; ++m) { + maxncomps = max(maxncomps, arrdata.AT(coord_group).AT(m).hh->components(rl)); + } + } + ////////////////////////////////////////////////////////////////////// // Map interpolation points to processors ////////////////////////////////////////////////////////////////////// - vector<int> N_points_to (dist::size()); + vector<int> sendcnt (dist::size()); + vector<int> dstprocs (N_interp_points); // which processor owns point n vector<int> rlev (N_interp_points); // refinement level of point n vector<int> home (N_interp_points); // component of point n - vector<int> dstprocs (N_interp_points); // which processor owns point n - vector<int> allhomecnts ((maxrl-minrl) * maps * maxncomps * dist::size()); - // number of points in component c - vector<CCTK_REAL> coords_buffer (N_dims * N_interp_points); + std::map<int, int> homecntsmap; // components hash map + vector<int> allhomecnts; // number of points in component + // homecntsmap.find(c) + int const ndims = have_source_map ? N_dims + 1 : N_dims; // Each point from coord_list is mapped onto the processor // that owns it (dstprocs) - // Also accumulate the number of points per processor (N_points_to) + // Also accumulate the number of points per processor (sendcnt) map_points (cctkGH, coord_system_handle, coord_group, - ml, minrl, maxrl, maxncomps, N_dims, N_interp_points, + ml, minrl, maxrl, maxncomps, N_dims, ndims, N_interp_points, source_map, - coords_list, coords_buffer, - dstprocs, N_points_to, - rlev, home, allhomecnts); - //cout << "CarpetInterp: N_points_to=" << N_points_to << endl; + coords_list, NULL, + dstprocs, sendcnt, + rlev, home, homecntsmap, allhomecnts); + //cout << "CarpetInterp: sendcnt=" << sendcnt << endl; ////////////////////////////////////////////////////////////////////// // Communicate the number of points each processor is going to communicate ////////////////////////////////////////////////////////////////////// - // N_points_from denotes the number of points + // recvcnt denotes the number of points // that this processor is to receive from others - vector<int> N_points_from (dist::size()); - { - assert ((int)N_points_from.size() == dist::size()); - assert ((int)N_points_to.size() == dist::size()); - } + vector<int> recvcnt (dist::size()); { - static Timer timer ("CarpetInterp::send_npoints"); - timer.start (); - MPI_Alltoall (&N_points_to[0], 1, dist::datatype (N_points_to[0]), - &N_points_from[0], 1, dist::datatype (N_points_from[0]), + static Timer * timer = NULL; + if (not timer) { + timer = new Timer ("CarpetInterp::send_npoints"); + } + timer->start (); + MPI_Alltoall (&sendcnt[0], 1, dist::mpi_datatype (sendcnt[0]), + &recvcnt[0], 1, dist::mpi_datatype (recvcnt[0]), dist::comm()); - timer.stop (dist::size() * sizeof(CCTK_INT)); + timer->stop (dist::size() * sizeof(CCTK_INT)); } - //cout << "CarpetInterp: N_points_from=" << N_points_from << endl; + //cout << "CarpetInterp: recvcnt=" << recvcnt << endl; ////////////////////////////////////////////////////////////////////// // Communicate the interpolation coordinates ////////////////////////////////////////////////////////////////////// - vector<int> sendcnt (dist::size()); - vector<int> recvcnt (dist::size()); - vector<int> senddispl (dist::size()); - vector<int> recvdispl (dist::size()); // Set up counts and displacements for MPI_Alltoallv() - sendcnt.AT(0) = N_dims * N_points_to.AT(0); - recvcnt.AT(0) = N_dims * N_points_from.AT(0); - senddispl.AT(0) = recvdispl.AT(0) = 0; + // N_points_local is the total number of points to receive + // and thus the total number of points to interpolate on this processor int N_points_local = recvcnt.AT(0); + vector<int> senddispl (dist::size()); + vector<int> recvdispl (dist::size()); for (int p = 1; p < dist::size(); p++) { - sendcnt.AT(p) = N_dims * N_points_to.AT(p); - recvcnt.AT(p) = N_dims * N_points_from.AT(p); N_points_local += recvcnt.AT(p); senddispl.AT(p) = senddispl.AT(p-1) + sendcnt.AT(p-1); recvdispl.AT(p) = recvdispl.AT(p-1) + recvcnt.AT(p-1); } - if (N_dims > 0) assert (N_points_local % N_dims == 0); - // N_points_local is the total number of points to receive - // and thus the total number of points to interpolate on this processor - if (N_dims > 0) N_points_local /= N_dims; - // Set up the per-component coordinates - // as offset into the single communication send buffer - vector<CCTK_REAL*> coords (allhomecnts.size()); - { - int offset = 0; - for (int c = 0; c < (int)allhomecnts.size(); c++) { - coords.AT(c) = &coords_buffer.front() + N_dims*offset; - offset += allhomecnts.AT(c); - } - assert (offset == N_interp_points); - } - - // Copy the input coordinates into the communication send buffer - // also remember the position of each point in the original input arrays + // remember the position of each point in the original input arrays vector<int> indices (N_interp_points); { // totalhomecnts is the accumulated number of points over all components vector<int> totalhomecnts (allhomecnts.size()); - for (int idx = 1; idx < (int)allhomecnts.size(); idx++) { - totalhomecnts.AT(idx) = totalhomecnts.AT(idx-1) + allhomecnts.AT(idx-1); + if (totalhomecnts.size() > 0) { + totalhomecnts.AT(0) = 0; + for (size_t c = 1; c < totalhomecnts.size(); c++) { + totalhomecnts.AT(c) = totalhomecnts.AT(c-1) + allhomecnts.AT(c-1); + } } - vector<int> tmpcnts (allhomecnts.size(), 0); + vector<int> tmpcnts (allhomecnts.size()); +#pragma omp parallel for for (int n = 0; n < N_interp_points; n++) { - int const idx = component_idx + int const cidx = component_idx (dstprocs.AT(n), source_map.AT(n), rlev.AT(n), home.AT(n)); - for (int d = 0; d < N_dims; d++) { - assert (d + N_dims*tmpcnts.AT(idx) < N_dims*allhomecnts.AT(idx)); - coords.AT(idx)[d + N_dims*tmpcnts.AT(idx)] = - static_cast<CCTK_REAL const *>(coords_list[d])[n]; + std::map<int, int>::const_iterator it = homecntsmap.find(cidx); + assert (it != homecntsmap.end()); + int const idx = it->second; + assert (idx < (int)totalhomecnts.size()); +#pragma omp critical + { + indices.AT(n) = totalhomecnts.AT(idx) + tmpcnts.AT(idx)++; } - indices.AT(n) = totalhomecnts.AT(idx) + tmpcnts.AT(idx); - tmpcnts.AT(idx)++; } assert (tmpcnts == allhomecnts); } + // Allocate the communication send buffer + // and copy the input coordinates and the source map (if necessary) into it + vector<CCTK_REAL> coords_buffer (ndims * N_interp_points); +#pragma omp parallel for + for (int n = 0; n < N_interp_points; n++) { + int const idx = indices.AT(n); + assert ((idx+1) * ndims <= (int)coords_buffer.size()); + for (int d = 0; d < N_dims; d++) { + coords_buffer[d + ndims*idx] = + static_cast<CCTK_REAL const *>(coords_list[d])[n]; + } + if (have_source_map) { + coords_buffer[N_dims + ndims*idx] = source_map.AT(n); + } + } + // Send this processor's points to owning processors, // receive other processors' points for interpolation on this processor { - vector<CCTK_REAL> tmp (N_dims * N_points_local); - MPI_Datatype const datatype = dist::datatype (tmp[0]); + vector<CCTK_REAL> tmp (ndims * N_points_local); { - assert ((int)sendcnt.size() == dist::size()); - assert ((int)recvcnt.size() == dist::size()); - assert ((int)senddispl.size() == dist::size()); - assert ((int)recvdispl.size() == dist::size()); int const sendbufsize = (int)coords_buffer.size(); int const recvbufsize = (int)tmp.size(); for (int n=0; n<dist::size(); ++n) { @@ -511,16 +509,26 @@ namespace CarpetInterp { } #endif { - static Timer timer ("CarpetInterp::send_coordinates"); - timer.start (); - MPI_Alltoallv (&coords_buffer[0], &sendcnt[0], &senddispl[0], datatype, - &tmp[0], &recvcnt[0], &recvdispl[0], datatype, + MPI_Datatype datatype = dist::mpi_datatype (tmp[0]); + MPI_Datatype vdatatype; + MPI_Type_vector(1, ndims, 0, datatype, &vdatatype); + MPI_Type_commit(&vdatatype); + + static Timer * timer = NULL; + if (not timer) { + timer = new Timer ("CarpetInterp::send_coordinates"); + } + timer->start (); + MPI_Alltoallv (&coords_buffer[0], &sendcnt[0], &senddispl[0], vdatatype, + &tmp[0], &recvcnt[0], &recvdispl[0], vdatatype, dist::comm()); - timer.stop (coords_buffer.size() * sizeof(CCTK_REAL)); + timer->stop (coords_buffer.size() * sizeof(CCTK_REAL)); + + MPI_Type_free(&vdatatype); } #ifndef _NDEBUG { - vector<bool> filled(tmp.size(), false); + vector<bool> filled(N_points_local, false); for (int n=0; n<(int)dist::size(); ++n) { //#pragma omp parallel for for (int i=0; i<recvcnt.AT(n); ++i) { @@ -530,7 +538,7 @@ namespace CarpetInterp { } bool error = false; for (int i=0; i<(int)filled.size(); ++i) { - error = error or not (filled.AT(i)); + error = error or not filled.AT(i); } if (error) { cout << "error" << endl; @@ -543,8 +551,6 @@ namespace CarpetInterp { assert (filled.AT(i)); } } -#endif -#ifndef _NDEBUG #pragma omp parallel for for (int i=0; i<(int)tmp.size(); ++i) { assert (tmp.AT(i) != poison); @@ -554,108 +560,14 @@ namespace CarpetInterp { } ////////////////////////////////////////////////////////////////////// - // Communicate the source map (if neccessary) + // Set up (local) source map ////////////////////////////////////////////////////////////////////// if (have_source_map) { - // Calculate displacements and lengths - sendcnt.AT(0) = N_points_to.AT(0); - recvcnt.AT(0) = N_points_from.AT(0); - senddispl.AT(0) = recvdispl.AT(0) = 0; - for (int p = 1; p < dist::size(); p++) { - sendcnt.AT(p) = N_points_to.AT(p); - recvcnt.AT(p) = N_points_from.AT(p); - senddispl.AT(p) = senddispl.AT(p-1) + sendcnt.AT(p-1); - recvdispl.AT(p) = recvdispl.AT(p-1) + recvcnt.AT(p-1); - } - - // Set up the per-component maps - // as offset into the single communication send buffer - vector<CCTK_INT> tmp (source_map.size()); - vector<CCTK_INT*> maps (allhomecnts.size()); - { - int offset = 0; - for (int c = 0; c < (int)allhomecnts.size(); c++) { - maps.AT(c) = &tmp.front() + offset; - offset += allhomecnts.AT(c); - } - assert (offset == N_interp_points); - } - - // Copy the input maps into the communication send buffer - { - // totalhomecnts is the accumulated number of points over all components - vector<int> totalhomecnts (allhomecnts.size()); - for (int idx = 1; idx < (int)allhomecnts.size(); idx++) { - totalhomecnts.AT(idx) = - totalhomecnts.AT(idx-1) + allhomecnts.AT(idx-1); - } - - vector<int> tmpcnts (allhomecnts.size(), 0); - for (int n = 0; n < N_interp_points; n++) { - int const idx = component_idx - (dstprocs.AT(n), source_map.AT(n), rlev.AT(n), home.AT(n)); - assert (tmpcnts.AT(idx) < allhomecnts.AT(idx)); - maps.AT(idx)[tmpcnts.AT(idx)] = source_map.AT(n); - tmpcnts.AT(idx)++; - } - assert (tmpcnts == allhomecnts); - } - - // Transmit the source maps source_map.resize (N_points_local); - MPI_Datatype const datatype = dist::datatype (tmp[0]); - { - assert ((int)sendcnt.size() == dist::size()); - assert ((int)recvcnt.size() == dist::size()); - assert ((int)senddispl.size() == dist::size()); - assert ((int)recvdispl.size() == dist::size()); - int const sendbufsize = (int)tmp.size(); - int const recvbufsize = (int)source_map.size(); - for (int n=0; n<dist::size(); ++n) { - assert (sendcnt.AT(n) >= 0); - assert (senddispl.AT(n) >= 0); - assert (senddispl.AT(n) + sendcnt.AT(n) <= sendbufsize); - assert (recvcnt.AT(n) >= 0); - assert (recvdispl.AT(n) >= 0); - assert (recvdispl.AT(n) + recvcnt.AT(n) <= recvbufsize); - } - } -#ifndef _NDEBUG -#pragma omp parallel for - for (int i=0; i<(int)source_map.size(); ++i) { - source_map[i] = ipoison; - } -#endif - { - static Timer timer ("CarpetInterp::send_maps"); - timer.start (); - MPI_Alltoallv (&tmp[0], &sendcnt[0], &senddispl[0], datatype, - &source_map[0], &recvcnt[0], &recvdispl[0], datatype, - dist::comm()); - timer.stop (tmp.size() * sizeof(CCTK_INT)); - } -#ifndef _NDEBUG - { - vector<bool> filled(source_map.size(), false); - for (int n=0; n<(int)dist::size(); ++n) { - //#pragma omp parallel for - for (int i=0; i<recvcnt.AT(n); ++i) { - assert (not filled.AT(recvdispl.AT(n)+i)); - filled.AT(recvdispl.AT(n)+i) = true; - } - } -#pragma omp parallel for - for (int i=0; i<(int)filled.size(); ++i) { - assert (filled.AT(i)); - } - } -#endif -#ifndef _NDEBUG #pragma omp parallel for - for (int i=0; i<(int)source_map.size(); ++i) { - assert (source_map[i] != poison); + for (int n = 0; n < N_points_local; n++) { + source_map.AT(n) = static_cast<int>(coords_buffer[ndims*n + N_dims]); } -#endif } else { // No explicit source map specified if (Carpet::map != -1) { @@ -672,13 +584,12 @@ namespace CarpetInterp { ////////////////////////////////////////////////////////////////////// // Map (local) interpolation points to components ////////////////////////////////////////////////////////////////////// - vector<int> srcprocs (N_points_local); // which processor requested point n - // Remember from where point n came + vector<int> srcprocs (N_points_local); // which processor requested point n { int offset = 0; - for (int p = 0; p < (int)N_points_from.size(); p++) { - for (int n = 0; n < N_points_from.AT(p); n++) { + for (int p = 0; p < (int)recvcnt.size(); p++) { + for (int n = 0; n < recvcnt.AT(p); n++) { srcprocs.AT(offset++) = p; } } @@ -701,15 +612,16 @@ namespace CarpetInterp { // (One could argue though that the per-point status codes as returned // by the local interpolator could be used to determine the global // interpolator return value instead.) - rlev.resize (N_points_local); // reflevel of (local) point n - home.resize (N_points_local); // component of (local) point n - vector<int> homecnts (allhomecnts.size(), 0); // points per components + rlev.resize (N_points_local); // reflevel of (local) point n + home.resize (N_points_local); // component of (local) point n + vector<int> homecnts; // number of points in component + // homecntsmap.find(c) map_points (cctkGH, coord_system_handle, coord_group, - ml, minrl, maxrl, maxncomps, N_dims, N_points_local, + ml, minrl, maxrl, maxncomps, N_dims, ndims, N_points_local, source_map, - NULL, coords_buffer, - srcprocs, N_points_to, - rlev, home, homecnts); + NULL, &coords_buffer.front(), + srcprocs, sendcnt, + rlev, home, homecntsmap, homecnts); // Free some memory source_map.clear(); @@ -720,17 +632,17 @@ namespace CarpetInterp { { int offset = 0; vector<CCTK_REAL> tmp (coords_buffer.size()); - for (int c = 0; c < (int)homecnts.size(); c++) { + for (size_t c = 0; c < homecnts.size(); c++) { #pragma omp parallel for for (int n = 0; n < homecnts.AT(c); n++) { for (int d = 0; d < N_dims; d++) { - tmp.AT(d*homecnts.AT(c) + n + offset) = - coords_buffer.AT(n*N_dims + d + offset); + tmp.AT(d*homecnts.AT(c) + n + N_dims*offset) = + coords_buffer.AT((n + offset)*ndims + d); } } - offset += N_dims * homecnts[c]; + offset += homecnts.AT(c); } - assert (offset == N_dims * N_points_local); + assert (offset == N_points_local); coords_buffer.swap (tmp); } @@ -741,7 +653,8 @@ namespace CarpetInterp { const int vtypesize = CCTK_VarTypeSize (vtype); assert (vtypesize > 0); vector<char> outputs_buffer (N_points_local * N_output_arrays * vtypesize); - vector<char*> outputs (homecnts.size()); + vector<char*> outputs (homecnts.size(), &outputs_buffer.front()); + vector<CCTK_REAL*> coords(homecnts.size(), &coords_buffer.front()); vector<CCTK_INT> status_and_retval_buffer (2 * dist::size(), 0); CCTK_INT* per_proc_statuses = &status_and_retval_buffer.front(); CCTK_INT* per_proc_retvals = per_proc_statuses + dist::size(); @@ -750,10 +663,10 @@ namespace CarpetInterp { // into the single communication buffers { int offset = 0; - for (int c = 0; c < (int)homecnts.size(); c++) { - coords.AT(c) = &coords_buffer.front() + N_dims*offset; - outputs.AT(c) = &outputs_buffer.front() + N_output_arrays*offset*vtypesize; - offset += homecnts.AT(c); + for (size_t c = 0; c < homecnts.size(); c++) { + coords[c] += N_dims*offset; + outputs[c] += N_output_arrays*offset*vtypesize; + offset += homecnts[c]; } assert (offset == N_points_local); } @@ -765,7 +678,7 @@ namespace CarpetInterp { want_global_mode, prolongation_order_time, N_dims, - homecnts, + homecnts, homecntsmap, recvcnt, coords, outputs, per_proc_statuses, per_proc_retvals, operand_indices, time_deriv_order, num_time_derivs, local_interp_handle, param_table_handle, @@ -783,51 +696,35 @@ namespace CarpetInterp { ////////////////////////////////////////////////////////////////////// // Communicate interpolation results ////////////////////////////////////////////////////////////////////// - sendcnt.AT(0) = N_output_arrays * N_points_from.AT(0); - recvcnt.AT(0) = N_output_arrays * N_points_to.AT(0); - senddispl.AT(0) = recvdispl.AT(0) = 0; - for (int p = 1; p < dist::size(); p++) { - sendcnt.AT(p) = N_output_arrays * N_points_from.AT(p); - recvcnt.AT(p) = N_output_arrays * N_points_to.AT(p); - senddispl.AT(p) = senddispl.AT(p-1) + sendcnt.AT(p-1); - recvdispl.AT(p) = recvdispl.AT(p-1) + recvcnt.AT(p-1); - } { + vector<char> tmp (N_interp_points * N_output_arrays * vtypesize); + MPI_Datatype datatype; switch (vtype) { -#define TYPECASE(N,T) \ - case N: { T dummy; datatype = dist::datatype(dummy); } break; +#define TYPECASE(N,T) \ + case N: { T dummy; datatype = dist::mpi_datatype(dummy); break; } #include "carpet_typecase.hh" #undef TYPECASE - default: CCTK_WARN (0, "invalid datatype"); abort(); + default: { CCTK_WARN (0, "invalid datatype"); abort(); } } + MPI_Type_vector(1, N_output_arrays, 0, datatype, &datatype); + MPI_Type_commit(&datatype); - vector<char> tmp (N_interp_points * N_output_arrays * vtypesize); - { - assert ((int)sendcnt.size() == dist::size()); - assert ((int)recvcnt.size() == dist::size()); - assert ((int)senddispl.size() == dist::size()); - assert ((int)recvdispl.size() == dist::size()); - int const sendbufsize = (int)outputs_buffer.size(); - int const recvbufsize = (int)tmp.size() / vtypesize; - for (int n=0; n<dist::size(); ++n) { - assert (sendcnt.AT(n) >= 0); - assert (senddispl.AT(n) >= 0); - assert (senddispl.AT(n) + sendcnt.AT(n) <= sendbufsize); - assert (recvcnt.AT(n) >= 0); - assert (recvdispl.AT(n) >= 0); - assert (recvdispl.AT(n) + recvcnt.AT(n) <= recvbufsize); - } - } - { - static Timer timer ("CarpetInterp::recv_points"); - timer.start (); - MPI_Alltoallv (&outputs_buffer[0], &sendcnt[0], &senddispl[0], datatype, - &tmp[0], &recvcnt[0], &recvdispl[0], datatype, - dist::comm()); - timer.stop (N_interp_points * N_output_arrays * vtypesize); + static Timer * timer = NULL; + if (not timer) { + timer = new Timer ("CarpetInterp::recv_points"); } + timer->start (); + // distribute the results the same way as the coordinates were gathered + // simply by interchanging the send/recv counts/displacements + MPI_Alltoallv (&outputs_buffer[0], &recvcnt[0], &recvdispl[0], datatype, + &tmp[0], &sendcnt[0], &senddispl[0], datatype, + dist::comm()); + timer->stop (N_interp_points * N_output_arrays * vtypesize); + + MPI_Type_free(&datatype); + outputs_buffer.swap (tmp); } @@ -843,7 +740,7 @@ namespace CarpetInterp { assert (status_and_retval_buffer.size() == tmp.size()); } MPI_Allreduce (&status_and_retval_buffer[0], &tmp[0], tmp.size(), - dist::datatype (tmp[0]), MPI_MIN, dist::comm()); + dist::mpi_datatype (tmp[0]), MPI_MIN, dist::comm()); status_and_retval_buffer.swap (tmp); per_proc_statuses = &status_and_retval_buffer.front(); per_proc_retvals = per_proc_statuses + dist::size(); @@ -857,7 +754,7 @@ namespace CarpetInterp { vector<int> reverse_indices(indices.size()); #pragma omp parallel for for (int i = 0; i < (int)indices.size(); i++) { - reverse_indices.AT(indices[i]) = i; + reverse_indices[indices[i]] = i; } for (int d = 0; d < N_output_arrays; d++) { @@ -909,6 +806,7 @@ namespace CarpetInterp { int const N_interp_points, int const N_input_arrays, int const N_output_arrays, + bool& want_global_mode, bool& have_source_map, vector<int>& num_time_derivs, int& prolongation_order_time, @@ -920,10 +818,29 @@ namespace CarpetInterp { { DECLARE_CCTK_PARAMETERS; + int iret; + + // Do we want to interpolate in global mode, i.e., from all + // refinement levels? + CCTK_INT want_global_mode1; + iret = Util_TableGetInt (param_table_handle, + &want_global_mode1, "want_global_mode"); + if (iret == UTIL_ERROR_TABLE_NO_SUCH_KEY) { + want_global_mode = is_global_mode(); + } else if (iret < 0) { + CCTK_WARN (CCTK_WARN_ALERT, "internal error"); + return -1; + } else if (iret != 1) { + CCTK_WARN (CCTK_WARN_ALERT, "internal error"); + return -1; + } else { + want_global_mode = want_global_mode1; + } + // Find source map assert ((int)source_map.size() == N_interp_points); - int iret = Util_TableGetIntArray (param_table_handle, N_interp_points, - &source_map.front(), "source_map"); + iret = Util_TableGetIntArray (param_table_handle, N_interp_points, + &source_map.front(), "source_map"); have_source_map = not (iret == UTIL_ERROR_TABLE_NO_SUCH_KEY); if (not have_source_map) { // No explicit source map specified @@ -948,14 +865,17 @@ namespace CarpetInterp { iret = Util_TableGetIntArray (param_table_handle, source_map.size(), &source_map.front(), "source_map"); assert (iret == (int)source_map.size()); + +#ifndef _NDEBUG // Check source map #pragma omp parallel for for (int n = 0; n < (int)source_map.size(); ++n) { - if (not (source_map.AT(n) >= 0 and source_map.AT(n) < maps)) { - cout << "CI: n=" << n << " map=" << source_map.AT(n) << endl; + if (not (source_map[n] >= 0 and source_map[n] < maps)) { + cout << "CI: n=" << n << " map=" << source_map[n] << endl; } - assert (source_map.AT(n) >= 0 and source_map.AT(n) < maps); + assert (source_map[n] >= 0 and source_map[n] < maps); } +#endif } // Find the time interpolation order @@ -997,8 +917,8 @@ namespace CarpetInterp { return 0; } - - + + // Find the component and integer index to which a grid point // belongs. This uses a linear search over all components, which @@ -1016,29 +936,29 @@ namespace CarpetInterp { int & restrict c) { // cout << "CarpetInterp: assign: m=" << m << " pos=" << pos << endl; - + assert (ml>=0 and ml<mglevels); assert (minrl>=0 and minrl<maxrl and maxrl<=reflevels); - + CCTK_REAL const rone = 1.0; CCTK_REAL const rhalf = rone / 2; - + if (all (pos >= lower and pos <= upper)) { // The point is within the domain - + // Try finer levels first for (rl = maxrl-1; rl >= minrl; --rl) { - + ivect const fact = maxspacereflevelfact / spacereffacts.AT(rl) * ipow(mgfact, ml); ivect const ipos = ivect(floor((pos - lower) / (delta * rvect(fact)) + rhalf)) * fact; - + ivect const & stride = hh->baseextent(ml,rl).stride(); assert (all (ipos % stride == 0)); - + gh::cregs const & regs = hh->regions.AT(ml).AT(rl); - + // Search all components linearly for (c = 0; c < int(regs.size()); ++c) { region_t const & reg = regs.AT(c); @@ -1050,14 +970,14 @@ namespace CarpetInterp { } } } - + // The point does not belong to any component. This should happen // only rarely. rl = -1; c = -1; } - - + + // Find the component and integer index to which a grid point // belongs. This uses a tree search over the superregions in the @@ -1076,29 +996,29 @@ namespace CarpetInterp { int & restrict c) { // cout << "CarpetInterp: assign: m=" << m << " pos=" << pos << endl; - + assert (ml>=0 and ml<mglevels); assert (minrl>=0 and minrl<maxrl and maxrl<=reflevels); - + CCTK_REAL const rone = 1.0; CCTK_REAL const rhalf = rone / 2; - + if (all (pos >= lower and pos <= upper)) { // The point is within the domain - + // Try finer levels first for (rl = maxrl-1; rl >= minrl; --rl) { - + ivect const fact = maxspacereflevelfact / spacereffacts.AT(rl) * ipow(mgfact, ml); ivect const ipos = ivect(floor((pos - lower) / (delta * rvect(fact)) + rhalf)) * fact; - + ivect const & stride = hh->baseextent(ml,rl).stride(); assert (all (ipos % stride == 0)); - + gh::cregs const & regs = hh->superregions.AT(rl); - + // Search all superregions linearly. Each superregion // corresponds to a "refined region", and the number of // superregions is thus presumably independent of the number @@ -1108,11 +1028,11 @@ namespace CarpetInterp { if (reg.extent.contains(ipos)) { // We found the superregion to which this grid point // belongs - + // Search the superregion hierarchically pseudoregion_t const * const preg = reg.processors->search(ipos); assert (preg); - + // We now know the refinement level, component, and index // to which this grid point belongs c = preg->component; @@ -1121,15 +1041,15 @@ namespace CarpetInterp { } } } - + // The point does not belong to any component. This should happen // only rarely. rl = -1; c = -1; } - - - + + + static void map_points (cGH const* const cctkGH, int const coord_system_handle, @@ -1139,14 +1059,16 @@ namespace CarpetInterp { int const maxrl, int const maxncomps, int const N_dims, + int const ndims, int const npoints, vector<CCTK_INT> & source_map, void const* const coords_list[], - vector<CCTK_REAL> const& coords, + CCTK_REAL const * const coords, vector<int>& procs, - vector<int>& N_points_to, + vector<int>& sendcnt, vector<int>& rlev, vector<int>& home, + std::map<int, int>& homecntsmap, vector<int>& homecnts) { DECLARE_CCTK_PARAMETERS; @@ -1155,13 +1077,11 @@ namespace CarpetInterp { if (not timer) timer = new Timer ("CarpetInterp::map_points"); timer->start (); + assert (npoints == 0 or coords or coords_list); bool const map_onto_processors = coords_list != NULL; - if (not map_onto_processors) { - assert ((int)coords.size() == N_dims * npoints); - } assert ((int)procs.size() == npoints); - assert ((int)N_points_to.size() == dist::size()); + assert ((int)sendcnt.size() == dist::size()); assert ((int)rlev.size() == npoints); assert ((int)home.size() == npoints); assert ((int)source_map.size() == npoints); @@ -1172,10 +1092,10 @@ namespace CarpetInterp { vector<rvect> lower (maps); vector<rvect> upper (maps); vector<rvect> delta (maps); // spacing on finest possible grid - + int const grouptype = CCTK_GroupTypeI (coord_group); switch (grouptype) { - + case CCTK_GF: { for (int m = 0; m < Carpet::maps; ++ m) { jvect gsh; @@ -1186,21 +1106,21 @@ namespace CarpetInterp { } break; } - + case CCTK_SCALAR: case CCTK_ARRAY: { - + rvect coord_lower, coord_upper; char const * const coord_system_name = CCTK_CoordSystemName (coord_system_handle); - + for (int d = 0; d < N_dims; ++ d) { int const iret = CCTK_CoordRange (cctkGH, &coord_lower[d], &coord_upper[d], d+1, NULL, coord_system_name); assert (iret == 0); } - + assert (arrdata.AT(coord_group).size() == 1); int const m = 0; ibbox const & baseextent = @@ -1211,11 +1131,14 @@ namespace CarpetInterp { rvect (baseextent.upper() - baseextent.lower())); break; } - + default: assert (0); } + // Clear the components hash map + homecntsmap.clear(); + // Assign interpolation points to processors/components #pragma omp parallel for for (int n = 0; n < npoints; ++n) { @@ -1226,20 +1149,20 @@ namespace CarpetInterp { gh const * hh = NULL; if (m >= 0) { - + hh = arrdata.AT(coord_group).AT(m).hh; - + // Find the grid point closest to the interpolation point for (int d = 0; d < N_dims; ++d) { if (map_onto_processors) { pos[d] = static_cast<CCTK_REAL const *>(coords_list[d])[n]; } else { - pos[d] = coords[N_dims*n + d]; + pos[d] = coords[ndims*n + d]; } } - + // Find the component that this grid point belongs to - + // Calculate rl, c, and proc if (not tree_search) { find_location_linear @@ -1262,12 +1185,12 @@ namespace CarpetInterp { } } } - + } // if m >= 0 - + if (c == -1) { // The point could not be mapped onto any component - + // Warn only once, namely when mapping points onto processors. // (This routine is called twice; first to map points onto // processors, then to map points onto components.) @@ -1277,13 +1200,13 @@ namespace CarpetInterp { "Interpolation point #%d at [%g,%g,%g] of patch #%d is not on any component", n, (double)pos[0], (double)pos[1], (double)pos[2], (int)m); } - + // Map the point (arbitrarily) to the first component of the // coarsest grid // TODO: Handle these points explicitly later on rl = minrl; c = 0; - + // Find a patch which exists on this processor for (m=0; m<maps; ++m) { hh = arrdata.AT(coord_group).AT(m).hh; @@ -1291,7 +1214,8 @@ namespace CarpetInterp { } assert (m < maps); } - + +#ifndef _NDEBUG if (not (rl >= minrl and rl < maxrl) or not (c >= 0 and c < hh->components(rl))) { @@ -1299,21 +1223,42 @@ namespace CarpetInterp { } assert (rl >= minrl and rl < maxrl); assert (c >= 0 and c < hh->components(rl)); - +#endif + if (map_onto_processors) { int const proc = hh->processor(rl,c); procs.AT(n) = proc; - int & this_N_points_to = N_points_to.AT(proc); + int & this_sendcnt = sendcnt.AT(proc); #pragma omp atomic - ++ this_N_points_to; + ++ this_sendcnt; } rlev.AT(n) = rl; home.AT(n) = c; - int & this_homecnts = homecnts.AT(component_idx (procs.AT(n), m, rl, c)); -#pragma omp atomic - ++ this_homecnts; - + int const cidx = component_idx (procs.AT(n), m, rl, c); +// only scalars of intrinsic type can be atomically updated +//#pragma omp atomic +#pragma omp critical + { + homecntsmap[cidx]++; + } + } // for n + + // allocate and fill the (dense) homecnts vector from the hash map + homecnts.resize (homecntsmap.size()); + { + int c = 0; + for (std::map<int, int>::iterator it = homecntsmap.begin(); + it != homecntsmap.end(); it++) { + // store the number of points of this component in homecnts + assert (it->second > 0); + homecnts.AT(c) = it->second; + // save the homecnts index in the hash map + it->second = c++; + } + assert (c == (int)homecnts.size()); + } + timer->stop (npoints); } @@ -1328,13 +1273,15 @@ namespace CarpetInterp { bool const want_global_mode, int const prolongation_order_time, int const N_dims, - vector<int> & homecnts, - vector<CCTK_REAL*>& coords, - vector<char*>& outputs, + vector<int> const & homecnts, + std::map<int, int> const & homecntsmap, + vector<CCTK_INT> const & recvcnt, + vector<CCTK_REAL*> const & coords, + vector<char*> const & outputs, CCTK_INT* const per_proc_statuses, CCTK_INT* const per_proc_retvals, - vector<CCTK_INT>& operand_indices, - vector<CCTK_INT>& time_deriv_order, + vector<CCTK_INT> const & operand_indices, + vector<CCTK_INT> const & time_deriv_order, vector<int> const & num_time_derivs, CCTK_INT const local_interp_handle, CCTK_INT const param_table_handle, @@ -1364,22 +1311,24 @@ namespace CarpetInterp { } } - { - // Ensure that this processor is only supposed to interpolate - // points from maps and components that are actually located on - // this processor - for (int rl=minrl; rl<maxrl; ++rl) { - for (int m=0; m<maps; ++m) { - gh const * const hh = arrdata.AT(coord_group).AT(m).hh; - for (int c=0; c<hh->components(rl); ++c) { - for (int p=0; p<dist::size(); ++p) { - int const idx = component_idx (p, m, rl, c); - assert (hh->is_local(rl, c) or homecnts.AT(idx) == 0); +#ifndef _NDEBUG + // Ensure that this processor is only supposed to interpolate + // points from maps and components that are actually located on + // this processor + for (int rl=minrl; rl<maxrl; ++rl) { + for (int m=0; m<maps; ++m) { + gh const * const hh = arrdata.AT(coord_group).AT(m).hh; + for (int c=0; c<hh->components(rl); ++c) { + for (int p=0; p<dist::size(); ++p) { + int const cidx = component_idx (p, m, rl, c); + if (homecntsmap.find(cidx) != homecntsmap.end()) { + assert (hh->is_local(rl, c)); } } } } } +#endif // TODO: Don't use explicit mode switching; code the loops // manually @@ -1410,14 +1359,20 @@ namespace CarpetInterp { : 1)); } - BEGIN_MAP_LOOP(cctkGH, CCTK_GF) { + BEGIN_LOCAL_MAP_LOOP(cctkGH, CCTK_GF) { BEGIN_LOCAL_COMPONENT_LOOP(cctkGH, CCTK_GF) { for (int p = 0; p < dist::size(); p++) { - int const idx = - component_idx (p, Carpet::map,reflevel,component); - //cout << "CarpetInterp: interpolate_single_component: rl=" << reflevel << " map=" << (Carpet::map) << " component=" << component << " p=" << p << endl; - if (homecnts.AT(idx) > 0) { + // short cut if there's nothing to interpolate for processor p + if (recvcnt[p] <= 0) continue; + + int const cidx = + component_idx (p, Carpet::map, reflevel, component); + std::map<int,int>::const_iterator it = homecntsmap.find(cidx); + if (it != homecntsmap.end()) { + //cout << "CarpetInterp: interpolate_single_component: rl=" << reflevel << " map=" << (Carpet::map) << " component=" << component << " p=" << p << endl; + int const idx = it->second; + assert (idx < (int)homecnts.size()); interpolate_single_component (cctkGH, coord_system_handle, coord_group, N_dims, @@ -1433,7 +1388,7 @@ namespace CarpetInterp { } // for p } END_LOCAL_COMPONENT_LOOP; - } END_MAP_LOOP; + } END_LOCAL_MAP_LOOP; } LEAVE_LEVEL_MODE; } // for rl @@ -1599,9 +1554,9 @@ namespace CarpetInterp { char* const outputs, CCTK_INT& overall_status, CCTK_INT& overall_retval, - vector<CCTK_INT>& operand_indices, - vector<CCTK_INT>& time_deriv_order, - vector<CCTK_INT>& interp_num_time_levels, + vector<CCTK_INT> const & operand_indices, + vector<CCTK_INT> const & time_deriv_order, + vector<CCTK_INT> const & interp_num_time_levels, CCTK_INT const local_interp_handle, CCTK_INT const param_table_handle, vector<int> const & num_tl, @@ -1633,7 +1588,7 @@ namespace CarpetInterp { // Get global origin and spacing of the underlying coordinate system int const grouptype = CCTK_GroupTypeI (coord_group); switch (grouptype) { - + case CCTK_GF: { jvect gsh; GetCoordRange (cctkGH, Carpet::map, mglevel, dim, @@ -1642,7 +1597,7 @@ namespace CarpetInterp { delta /= maxspacereflevelfact; break; } - + case CCTK_SCALAR: case CCTK_ARRAY: { #ifdef NEW_COORD_API @@ -1655,13 +1610,13 @@ namespace CarpetInterp { char const * const coord_system_name = CCTK_CoordSystemName (coord_system_handle); assert (CCTK_CoordSystemDim (coord_system_name) >= N_dims); - + for (int d = 0; d < N_dims; ++ d) { int const iret = CCTK_CoordRange (cctkGH, &lower[d], &upper[d], d+1, NULL, coord_system_name); assert (iret == 0); } - + int const m = 0; // delta for the Carpet grid indices ibbox const & baseextent = @@ -1670,7 +1625,7 @@ namespace CarpetInterp { #endif break; } - + default: assert (0); } @@ -1721,7 +1676,7 @@ namespace CarpetInterp { // if the desired timelevel does not exist int const my_tl = tl >= interp_num_tl ? 0 : tl; assert (my_tl < num_tl.AT(n)); - + // Are there enough time levels? int const active_tl = CCTK_ActiveTimeLevelsVI (cctkGH, vi); if (active_tl <= my_tl) { @@ -1731,7 +1686,7 @@ namespace CarpetInterp { fullname, active_tl, reflevel); free (fullname); } - + #if 0 input_arrays[n] = CCTK_VarDataPtrI (cctkGH, my_tl, vi); #else @@ -1739,7 +1694,7 @@ namespace CarpetInterp { int const vi0 = CCTK_FirstVarIndexI (gi); input_arrays[n] = ((*arrdata.AT(gi).AT(Carpet::map).data.AT(vi-vi0)) - (my_tl, reflevel, component, mglevel)->storage()); + (my_tl, reflevel, local_component, mglevel)->storage()); #endif } } // for input arrays @@ -1818,7 +1773,7 @@ namespace CarpetInterp { dest += tfacs[tl] * src; } } - + for (int tl=0; tl<max_num_tl; ++tl) { delete [] (CCTK_REAL *)tmp_output_arrays[tl][j]; } diff --git a/Carpet/CarpetInterp/test/waveinterp-1p.par b/Carpet/CarpetInterp/test/waveinterp-1p.par index c854dfb35..8a07bf51d 100644 --- a/Carpet/CarpetInterp/test/waveinterp-1p.par +++ b/Carpet/CarpetInterp/test/waveinterp-1p.par @@ -24,7 +24,6 @@ Carpet::domain_from_coordbase = yes Carpet::max_refinement_levels = 20 driver::ghost_size = 2 -Carpet::buffer_width = 4 Carpet::prolongation_order_space = 3 Carpet::prolongation_order_time = 2 @@ -33,8 +32,6 @@ Carpet::convergence_level = 0 Carpet::init_3_timelevels = yes -CarpetLib::save_memory_during_regridding = yes - ActiveThorns = "NaNChecker" diff --git a/Carpet/CarpetInterp/test/waveinterp-2p.par b/Carpet/CarpetInterp/test/waveinterp-2p.par index c854dfb35..8a07bf51d 100644 --- a/Carpet/CarpetInterp/test/waveinterp-2p.par +++ b/Carpet/CarpetInterp/test/waveinterp-2p.par @@ -24,7 +24,6 @@ Carpet::domain_from_coordbase = yes Carpet::max_refinement_levels = 20 driver::ghost_size = 2 -Carpet::buffer_width = 4 Carpet::prolongation_order_space = 3 Carpet::prolongation_order_time = 2 @@ -33,8 +32,6 @@ Carpet::convergence_level = 0 Carpet::init_3_timelevels = yes -CarpetLib::save_memory_during_regridding = yes - ActiveThorns = "NaNChecker" diff --git a/Carpet/CarpetInterp2/README b/Carpet/CarpetInterp2/README index 6480393c9..de19cb6e4 100644 --- a/Carpet/CarpetInterp2/README +++ b/Carpet/CarpetInterp2/README @@ -1,8 +1,9 @@ Cactus Code Thorn CarpetInterp2 -Thorn Author(s) : Erik Schnetter <schnetter@cct.lsu.edu> -Thorn Maintainer(s) : Erik Schnetter <schnetter@cct.lsu.edu> +Author(s) : Erik Schnetter <schnetter@cct.lsu.edu> +Maintainer(s): Erik Schnetter <schnetter@cct.lsu.edu> +Licence : GPLv2+ -------------------------------------------------------------------------- -Purpose of the thorn: +1. Purpose This thorn provides a parallel interpolator for Carpet. diff --git a/Carpet/CarpetInterp2/interface.ccl b/Carpet/CarpetInterp2/interface.ccl index 1a8e1c177..15b3919c7 100644 --- a/Carpet/CarpetInterp2/interface.ccl +++ b/Carpet/CarpetInterp2/interface.ccl @@ -46,8 +46,6 @@ CCTK_INT FUNCTION \ CCTK_POINTER IN ddadxdx) USES FUNCTION MultiPatch_GlobalToLocal - - CCTK_INT FUNCTION \ InterpGridArrays \ (CCTK_POINTER_TO_CONST IN cctkGH, \ @@ -62,3 +60,52 @@ CCTK_INT FUNCTION \ PROVIDES FUNCTION InterpGridArrays \ WITH CarpetInterp2_InterpGridArrays \ LANGUAGE C + +CCTK_INT FUNCTION \ + MultiPatchInterpGridArrays \ + (CCTK_POINTER_TO_CONST IN cctkGH, \ + CCTK_INT IN N_dims, \ + CCTK_INT IN order, \ + CCTK_INT IN N_interp_points, \ + CCTK_INT ARRAY IN interp_maps, \ + CCTK_POINTER_TO_CONST IN interp_coords, \ + CCTK_INT IN N_input_arrays, \ + CCTK_INT ARRAY IN input_array_indices, \ + CCTK_INT IN N_output_arrays, \ + CCTK_POINTER IN output_arrays) +PROVIDES FUNCTION MultiPatchInterpGridArrays \ + WITH CarpetInterp2_MultiPatchInterpGridArrays \ + LANGUAGE C + + + +CCTK_POINTER FUNCTION \ + Interp2GridArraysSetup \ + (CCTK_POINTER_TO_CONST IN cctkGH, \ + CCTK_INT IN N_dims, \ + CCTK_INT IN order, \ + CCTK_INT IN N_interp_points, \ + CCTK_POINTER_TO_CONST IN interp_coords) +PROVIDES FUNCTION Interp2GridArraysSetup \ + WITH CarpetInterp2_Interp2GridArraysSetup \ + LANGUAGE C + +CCTK_INT FUNCTION \ + Interp2GridArrays \ + (CCTK_POINTER_TO_CONST IN cctkGH, \ + CCTK_POINTER_TO_CONST IN interp_handle, \ + CCTK_INT IN N_input_arrays, \ + CCTK_INT ARRAY IN input_array_indices, \ + CCTK_INT IN N_output_arrays, \ + CCTK_POINTER IN output_arrays) +PROVIDES FUNCTION Interp2GridArrays \ + WITH CarpetInterp2_Interp2GridArrays \ + LANGUAGE C + +CCTK_INT FUNCTION \ + Interp2GridArraysFree \ + (CCTK_POINTER_TO_CONST IN cctkGH, \ + CCTK_POINTER IN interp_handle) +PROVIDES FUNCTION Interp2GridArraysFree \ + WITH CarpetInterp2_Interp2GridArraysFree \ + LANGUAGE C diff --git a/Carpet/CarpetInterp2/src/fasterp.cc b/Carpet/CarpetInterp2/src/fasterp.cc index 039c01a15..4b5126b78 100644 --- a/Carpet/CarpetInterp2/src/fasterp.cc +++ b/Carpet/CarpetInterp2/src/fasterp.cc @@ -25,7 +25,9 @@ namespace CarpetInterp2 { int const ipoison = -1234567890; CCTK_REAL const poison = -1.0e+12; + int get_poison (int const &) CCTK_ATTRIBUTE_CONST; int get_poison (int const &) { return ipoison; } + CCTK_REAL get_poison (CCTK_REAL const &) CCTK_ATTRIBUTE_CONST; CCTK_REAL get_poison (CCTK_REAL const &) { return poison; } template <typename T> @@ -72,7 +74,9 @@ namespace CarpetInterp2 { { \ sizeof s.name / sizeof(type), /* count elements */ \ (char*)&s.name - (char*)&s, /* offsetof doesn't work (why?) */ \ - dist::datatype<type>() /* find MPI datatype */ \ + dist::mpi_datatype<type>(), /* find MPI datatype */ \ + STRINGIFY(name), /* field name */ \ + STRINGIFY(type), /* type name */ \ } dist::mpi_struct_descr_t const descr[] = { ENTRY(int, mrc), @@ -83,11 +87,12 @@ namespace CarpetInterp2 { #endif ENTRY(int, ind3d), ENTRY(CCTK_REAL, offset), - {1, sizeof(s), MPI_UB} + {1, sizeof(s), MPI_UB, "MPI_UB", "MPI_UB"} }; #undef ENTRY - dist::create_mpi_datatype - (sizeof(descr) / sizeof(descr[0]), descr, newtype); + newtype = + dist::create_mpi_datatype (sizeof descr / sizeof descr[0], descr, + "fasterp_iloc_t::mpi_datatype", sizeof s); initialised = true; } return newtype; @@ -240,6 +245,7 @@ namespace CarpetInterp2 { // round is not available with PGI compilers // CCTK_REAL const rx = round(x); CCTK_REAL const rx = floor(x+0.5); +#warning "TODO: make eps a relative error my taking max(abs(xmin),abs(xmax)) into account" if (abs(x - rx) < eps) { // The interpolation point coincides with a grid point; no // interpolation is necessary (this is a special case) @@ -478,7 +484,8 @@ namespace CarpetInterp2 { fasterp_setup_t (cGH const * restrict const cctkGH, fasterp_glocs_t const & locations, int const order_) - : order (order_) + : order (order_), + regridding_epoch (Carpet::regridding_epoch) { // Some global properties int const npoints = locations.size(); @@ -1026,6 +1033,12 @@ namespace CarpetInterp2 { { DECLARE_CCTK_PARAMETERS; + // Check regridding epoch + if (regridding_epoch != Carpet::regridding_epoch) { + CCTK_WARN (CCTK_WARN_ALERT, + "The Carpet grid structure was changed since this fasterp_setup was created"); + } + // Desired time level int const tl = 0; // current time @@ -1072,19 +1085,19 @@ namespace CarpetInterp2 { MPI_Irecv (& recv_points.AT(recv_proc.offset * nvars), recv_proc.npoints * nvars, - dist::datatype<CCTK_REAL>(), recv_proc.p, mpi_tag, + dist::mpi_datatype<CCTK_REAL>(), recv_proc.p, mpi_tag, comm_world, & recv_reqs.AT(pp)); #ifdef CARPET_DEBUG MPI_Irecv (& recv_pn.AT(recv_proc.offset), recv_proc.npoints * 2, - dist::datatype<int>(), recv_proc.p, mpi_tag, + dist::mpi_datatype<int>(), recv_proc.p, mpi_tag, comm_world, & recv_reqs_pn.AT(pp)); #endif } // Interpolate data and post Isends if (verbose) CCTK_INFO ("Interpolating and posting MPI_Isends"); - // TODO: Use one arrays per processor? + // TODO: Use one array per processor? vector<CCTK_REAL> send_points (send_descr.npoints * nvars); fill_with_poison (send_points); vector<MPI_Request> send_reqs (send_descr.procs.size()); @@ -1107,6 +1120,8 @@ namespace CarpetInterp2 { int const rl = send_comp.mrc.rl; int const c = send_comp.mrc.c; + int const lc = Carpet::vhh.AT(m)->get_local_component(rl,c); + // Get pointers to 3D data vector<CCTK_REAL const *> varptrs (nvars); for (size_t v=0; v<nvars; ++v) { @@ -1117,11 +1132,13 @@ namespace CarpetInterp2 { varptrs.AT(v) = (CCTK_REAL const *) (* Carpet::arrdata.AT(gi).AT(m).data.AT(vi)) - (tl, rl, c, Carpet::mglevel)->storage(); + (tl, rl, lc, Carpet::mglevel)->storage(); assert (varptrs.AT(v)); } -#pragma omp parallel for + // TODO: This loops seems unbalanced. Maybe the different + // interpolations have different costs. +#pragma omp parallel for schedule (dynamic, 1000) for (int n=0; n<int(send_comp.locs.size()); ++n) { size_t const ind = (send_comp.offset + n) * nvars; send_comp.locs.AT(n).interpolate @@ -1161,12 +1178,12 @@ namespace CarpetInterp2 { MPI_Isend (& send_points.AT(send_proc.offset * nvars), send_proc.npoints * nvars, - dist::datatype<CCTK_REAL>(), send_proc.p, mpi_tag, + dist::mpi_datatype<CCTK_REAL>(), send_proc.p, mpi_tag, comm_world, & send_reqs.AT(pp)); #ifdef CARPET_DEBUG MPI_Isend (& send_pn.AT(send_proc.offset), send_proc.npoints * 2, - dist::datatype<int>(), send_proc.p, mpi_tag, + dist::mpi_datatype<int>(), send_proc.p, mpi_tag, comm_world, & send_reqs_pn.AT(pp)); #endif } // for pp diff --git a/Carpet/CarpetInterp2/src/fasterp.hh b/Carpet/CarpetInterp2/src/fasterp.hh index 393fd5144..1a58e8222 100644 --- a/Carpet/CarpetInterp2/src/fasterp.hh +++ b/Carpet/CarpetInterp2/src/fasterp.hh @@ -38,7 +38,7 @@ namespace CarpetInterp2 { static int components; static void determine_mrc_info (); - static int get_max_ind () + static int get_max_ind () CCTK_ATTRIBUTE_PURE { return maps * reflevels * components; } @@ -63,12 +63,12 @@ namespace CarpetInterp2 { mrc_t (int ind); // Convert a mrc into an integer index - int get_ind () const + int get_ind () const CCTK_ATTRIBUTE_PURE { return c + components * (rl + reflevels * m); } - bool operator== (mrc_t const & a) const + bool operator== (mrc_t const & a) const CCTK_ATTRIBUTE_PURE { return m == a.m and rl == a.rl and c == a.c; } @@ -116,7 +116,7 @@ namespace CarpetInterp2 { coords[d].resize(n); } } - size_t size () const { return coords[0].size(); } + size_t size () const CCTK_ATTRIBUTE_PURE { return coords[0].size(); } }; // A local location, given by map and local coordinates @@ -130,7 +130,7 @@ namespace CarpetInterp2 { coords[d].resize(n); } } - size_t size () const { return maps.size(); } + size_t size () const CCTK_ATTRIBUTE_PURE { return maps.size(); } }; // An integer location, given by map, refinement level, and @@ -146,7 +146,7 @@ namespace CarpetInterp2 { int ind3d; // closest grid point rvect offset; // in terms of grid points - static MPI_Datatype mpi_datatype (); + static MPI_Datatype mpi_datatype () CCTK_ATTRIBUTE_CONST; void output (ostream& os) const; }; @@ -277,6 +277,8 @@ namespace CarpetInterp2 { send_descr_t send_descr; int order; + int regridding_epoch; + void setup (cGH const * restrict cctkGH, fasterp_llocs_t const & locations); @@ -300,7 +302,7 @@ namespace CarpetInterp2 { size_t get_npoints () - const + const CCTK_ATTRIBUTE_PURE { return recv_descr.npoints; } diff --git a/Carpet/CarpetInterp2/src/interp2.cc b/Carpet/CarpetInterp2/src/interp2.cc index f8a17df99..ee026744d 100644 --- a/Carpet/CarpetInterp2/src/interp2.cc +++ b/Carpet/CarpetInterp2/src/interp2.cc @@ -75,4 +75,189 @@ namespace CarpetInterp2 { return 0; } + extern "C" + CCTK_INT + CarpetInterp2_MultiPatchInterpGridArrays (CCTK_POINTER_TO_CONST const cctkGH_, + CCTK_INT const N_dims, + CCTK_INT const order, + CCTK_INT const N_interp_points, + CCTK_INT const * const interp_maps, + CCTK_POINTER_TO_CONST const interp_coords_, + CCTK_INT const N_input_arrays, + CCTK_INT const * const input_array_indices, + CCTK_INT const N_output_arrays, + CCTK_POINTER const output_arrays_) + { + // Check input values and convert types + cGH const * const cctkGH = static_cast<cGH const *> (cctkGH_); + assert (cctkGH); + + assert (N_dims == dim); + + assert (N_interp_points >= 0); + + assert (interp_maps); + CCTK_REAL const * const * const interp_coords = + static_cast<CCTK_REAL const * const *> (interp_coords_); + assert (interp_coords); + for (int d=0; d<dim; ++d) { + assert (N_interp_points==0 or interp_coords[d]); + } + + assert (N_input_arrays >= 0); + + assert (input_array_indices); + for (int n=0; n<N_input_arrays; ++n) { + assert (input_array_indices[n]>=0 and + input_array_indices[n]<CCTK_NumVars()); + } + + assert (N_output_arrays >= 0); + assert (N_output_arrays == N_input_arrays); + + CCTK_REAL * const * const output_arrays = + static_cast<CCTK_REAL * const *> (output_arrays_); + assert (output_arrays); + for (int n=0; n<N_output_arrays; ++n) { + assert (N_output_arrays==0 or output_arrays[n]); + } + + // Set up interpolation + fasterp_llocs_t locations (N_interp_points); + for (int i=0; i<N_interp_points; ++i) { + locations.maps.AT(i) = interp_maps[i]; + } + for (int d=0; d<dim; ++d) { + for (int i=0; i<N_interp_points; ++i) { + locations.coords[d].AT(i) = interp_coords[d][i]; + } + } + fasterp_setup_t const setup (cctkGH, locations, order); + + // Interpolate + vector<int> varinds (N_input_arrays); + for (int n=0; n<N_input_arrays; ++n) { + varinds.AT(n) = input_array_indices[n]; + } + vector<CCTK_REAL *> values (N_input_arrays); + for (int n=0; n<N_input_arrays; ++n) { + values.AT(n) = output_arrays[n]; + } + setup.interpolate (cctkGH, varinds, values); + + // Done + return 0; + } + + + + extern "C" + CCTK_POINTER + CarpetInterp2_Interp2GridArraysSetup + (CCTK_POINTER_TO_CONST const cctkGH_, + CCTK_INT const N_dims, + CCTK_INT const order, + CCTK_INT const N_interp_points, + CCTK_POINTER_TO_CONST const interp_coords_) + { + // Check input values and convert types + cGH const * const cctkGH = static_cast<cGH const *> (cctkGH_); + assert (cctkGH); + + assert (N_dims == dim); + + assert (N_interp_points >= 0); + + CCTK_REAL const * const * const interp_coords = + static_cast<CCTK_REAL const * const *> (interp_coords_); + assert (interp_coords); + for (int d=0; d<dim; ++d) { + assert (N_interp_points==0 or interp_coords[d]); + } + + // Set up interpolation + fasterp_glocs_t locations (N_interp_points); + for (int d=0; d<dim; ++d) { + for (int i=0; i<N_interp_points; ++i) { + locations.coords[d].AT(i) = interp_coords[d][i]; + } + } + fasterp_setup_t * const setup = + new fasterp_setup_t (cctkGH, locations, order); + + // Done + return setup; + } + + extern "C" + CCTK_INT + CarpetInterp2_Interp2GridArrays + (CCTK_POINTER_TO_CONST const cctkGH_, + CCTK_POINTER_TO_CONST const setup_, + CCTK_INT const N_input_arrays, + CCTK_INT const * const input_array_indices, + CCTK_INT const N_output_arrays, + CCTK_POINTER const output_arrays_) + { + // Check input values and convert types + cGH const * const cctkGH = static_cast<cGH const *> (cctkGH_); + assert (cctkGH); + + fasterp_setup_t const * const setup = + static_cast<fasterp_setup_t const *> (setup_); + assert (setup); + + assert (N_input_arrays >= 0); + + assert (input_array_indices); + for (int n=0; n<N_input_arrays; ++n) { + assert (input_array_indices[n]>=0 and + input_array_indices[n]<CCTK_NumVars()); + } + + assert (N_output_arrays >= 0); + assert (N_output_arrays == N_input_arrays); + + CCTK_REAL * const * const output_arrays = + static_cast<CCTK_REAL * const *> (output_arrays_); + assert (output_arrays); + for (int n=0; n<N_output_arrays; ++n) { + assert (N_output_arrays==0 or output_arrays[n]); + } + + // Interpolate + vector<int> varinds (N_input_arrays); + for (int n=0; n<N_input_arrays; ++n) { + varinds.AT(n) = input_array_indices[n]; + } + vector<CCTK_REAL *> values (N_input_arrays); + for (int n=0; n<N_input_arrays; ++n) { + values.AT(n) = output_arrays[n]; + } + setup->interpolate (cctkGH, varinds, values); + + // Done + return 0; + } + + extern "C" + CCTK_INT + CarpetInterp2_Interp2GridArraysFree + (CCTK_POINTER_TO_CONST const cctkGH_, + CCTK_POINTER const setup_) + { + // Check input values and convert types + cGH const * const cctkGH = static_cast<cGH const *> (cctkGH_); + assert (cctkGH); + + fasterp_setup_t const * const setup = + static_cast<fasterp_setup_t const *> (setup_); + assert (setup); + + delete setup; + + // Done + return 0; + } + } // namespace CarpetInterp2 diff --git a/Carpet/CarpetLib/README b/Carpet/CarpetLib/README index 82e529534..6e2e17abc 100644 --- a/Carpet/CarpetLib/README +++ b/Carpet/CarpetLib/README @@ -1,7 +1,9 @@ Cactus Code Thorn CarpetLib -Authors : Erik Schnetter <schnetter@uni-tuebingen.de> +Author(s) : Erik Schnetter <schnetter@cct.lsu.edu> +Maintainer(s): Erik Schnetter <schnetter@cct.lsu.edu> +Licence : GPLv2+ -------------------------------------------------------------------------- -Purpose of the thorn: +1. Purpose This thorn contains the backend library that provides mesh refinement. diff --git a/Carpet/CarpetLib/interface.ccl b/Carpet/CarpetLib/interface.ccl index 6e7462678..c88cf032d 100644 --- a/Carpet/CarpetLib/interface.ccl +++ b/Carpet/CarpetLib/interface.ccl @@ -2,6 +2,8 @@ IMPLEMENTS: CarpetLib +includes header: mpi_string.hh in mpi_string.hh + includes header: defs.hh in defs.hh includes header: dist.hh in dist.hh includes header: typeprops.hh in typeprops.hh @@ -28,6 +30,7 @@ includes header: th.hh in th.hh includes header: operators.hh in operators.hh uses include header: carpet_typecase.hh +uses include header: CarpetTimers.hh diff --git a/Carpet/CarpetLib/param.ccl b/Carpet/CarpetLib/param.ccl index 45724f25d..31a43a135 100644 --- a/Carpet/CarpetLib/param.ccl +++ b/Carpet/CarpetLib/param.ccl @@ -41,19 +41,48 @@ BOOLEAN poison_new_memory "Try to catch uninitialised data by setting newly allo { } "no" +RESTRICTED: + CCTK_INT poison_value "Integer value (0..255) used to poison new timelevels (with memset)" STEERABLE=always { 0:255 :: "Must fit into a byte. Use 0 for zero, 255 for nan, and e.g. 113 for a large value." } 255 +CCTK_INT deadbeef "A strange integer value that indicates that something has gone wrong; the integer equivalent of a nan" STEERABLE=always +{ + *:* :: "should be large and positive" +} 666 # 7353315 + +PRIVATE: + +# System limits + +INT max_core_size_MB "Maximum size of a core file, set via setrlimit" STEERABLE=recover +{ + -2 :: "unchanged" + -1 :: "unlimited" + 0:* :: "limited" +} -2 + +INT max_memory_size_MB "Maximum amount of memory per MPI process, set via setrlimit" STEERABLE=recover +{ + -2 :: "unchanged" + -1 :: "unlimited" + 0:* :: "limited" +} -2 + + + +# Statistics + INT print_timestats_every "Print timing statistics periodically" STEERABLE=always { -1 :: "don't report" - 0 :: "don't report" + 0 :: "report after initialisation" 1:* :: "report every so many iterations" -} 0 +} -1 STRING timestat_file "File name in which timestat output is collected (because stdout from the root node may not be enough)" STEERABLE=always { @@ -70,7 +99,7 @@ INT print_memstats_every "Report periodically how much memory is used per proces 1:* :: "report every so many iterations" } 0 -INT max_allowed_memory_MB "Maximum allowed amount of memory per process (in Megabytes)" STEERABLE=always +INT max_allowed_memory_MB "Maximum allowed amount of memory per process that can be allocated for grid variables (in Megabytes)" STEERABLE=always { -1 :: "no maximum" 0 :: "no maximum" @@ -85,21 +114,29 @@ STRING memstat_file "File name in which memstat output is collected (because std -# Experimental recomposing parameters - BOOLEAN combine_recompose "Recompose all grid functions of one refinement levels at once" STEERABLE=always { -} "no" +} "yes" -# Experimental communication parameters +# Communication experiment parameters -BOOLEAN interleave_communications "Try to interleave communications with each other; each processor begins to communicate with its 'right neighbour' in rank, instead of with the root processor" STEERABLE=always +INT message_size_multiplier "Enlarge size of transmitted messages by this factor" STEERABLE=always { -} "no" + 1:* :: "" +} 1 + +INT message_count_multiplier "Transmit messages this many times" STEERABLE=always +{ + 1:* :: "" +} 1 -BOOLEAN vary_tags "Use different tags for each communication" STEERABLE=always + + +# Experimental communication parameters + +BOOLEAN interleave_communications "Try to interleave communications with each other; each processor begins to communicate with its 'right neighbour' in rank, instead of with the root processor" STEERABLE=always { } "no" @@ -107,11 +144,11 @@ BOOLEAN barrier_between_stages "Add a barrier between the communication stages ( { } "no" -BOOLEAN combine_sends "Send data together and in order of processor ranks" STEERABLE=always +BOOLEAN check_communication_schedule "Check the communication schedule at run time (expensive)" STEERABLE=always { } "no" -BOOLEAN reduce_mpi_waitall "Call MPI_Waitall only for requests that are not null" STEERABLE=always +BOOLEAN combine_sends "Send data together and in order of processor ranks" STEERABLE=always { } "no" diff --git a/Carpet/CarpetLib/schedule.ccl b/Carpet/CarpetLib/schedule.ccl index d371bc7a5..a208c97ca 100644 --- a/Carpet/CarpetLib/schedule.ccl +++ b/Carpet/CarpetLib/schedule.ccl @@ -1,10 +1,10 @@ # Schedule definitions for thorn CarpetLib -SCHEDULE CarpetLib_setmemlimit AT WRAGH +SCHEDULE CarpetLib_registercycleclock AT startup BEFORE Driver_Startup { LANG: C OPTIONS: global -} "Set operating system memory limit" +} "Register cycle based timer" SCHEDULE CarpetLib_printtimestats AT analysis { diff --git a/Carpet/CarpetLib/src/bbox.cc b/Carpet/CarpetLib/src/bbox.cc index a14e1e9a3..164d63884 100644 --- a/Carpet/CarpetLib/src/bbox.cc +++ b/Carpet/CarpetLib/src/bbox.cc @@ -1,4 +1,4 @@ - +#include <algorithm> #include <cassert> #include <iostream> #include <limits> @@ -6,7 +6,8 @@ #include <string> #include <typeinfo> -#include "cctk.h" +#include <cctk.h> +#include <cctk_Parameters.h> #include "defs.hh" #include "vect.hh" @@ -21,8 +22,8 @@ using namespace std; template<class T, int D> void bbox<T,D>::assert_bbox_limits () const { - assert (all(_stride>T(0))); - assert (all((_upper-_lower)%_stride == T(0))); + ASSERT_BBOX (all(_stride>T(0))); + ASSERT_BBOX (all((_upper-_lower)%_stride == T(0))); if (numeric_limits<T>::is_integer) { // prevent accidental wrap-around if (any (_lower >= numeric_limits<T>::max() / 2) or @@ -30,29 +31,34 @@ void bbox<T,D>::assert_bbox_limits () const any (_upper >= numeric_limits<T>::max() / 2) or any (_upper <= numeric_limits<T>::min() / 2)) { - ostringstream lbuf, ubuf, sbuf; - lbuf << _lower; - ubuf << _upper; - sbuf << _stride; - string const lstr = lbuf.str(); - string const ustr = ubuf.str(); - string const sstr = sbuf.str(); - CCTK_VWarn (CCTK_WARN_ABORT, __LINE__, __FILE__, CCTK_THORNSTRING, - "Tried to create a very large bbox [%s,%s,%s] of type %s -- it is likely that this would lead to an integer overflow", - lstr.c_str(), ustr.c_str(), sstr.c_str(), - typeid(*this).name()); + ostringstream buf; + T dummy; + buf << "Tried to create a very large bbox [" << _lower << "," << _upper << "," << _stride << "] for the type " << typeid(dummy).name() << " -- it is likely that this would lead to an integer overflow"; + CCTK_WARN (CCTK_WARN_ABORT, buf.str().c_str()); } } } +// Poison +template<class T, int D> +bbox<T,D> bbox<T,D>::poison () +{ + DECLARE_CCTK_PARAMETERS; + + vect<T,D> const v (deadbeef); + return bbox (v, v, v); +} + + + // Accessors template<class T, int D> typename bbox<T,D>::size_type bbox<T,D>::size () const { if (empty()) return 0; const vect<T,D> sh(shape()/stride()); -#ifdef NDEBUG +#ifndef CARPET_DEBUG return prod(vect<size_type,D>(sh)); #else size_type sz = 1, max = numeric_limits<size_type>::max(); @@ -103,7 +109,7 @@ bool bbox<T,D>::is_aligned_with (const bbox& b) const { template<class T, int D> bool bbox<T,D>::operator== (const bbox& b) const { if (empty() and b.empty()) return true; - assert (all(stride()==b.stride())); + ASSERT_BBOX (all(stride()==b.stride())); return all(lower()==b.lower() and upper()==b.upper()); } @@ -160,8 +166,8 @@ bool bbox<T,D>::operator> (const bbox& b) const { template<class T, int D> bbox<T,D> bbox<T,D>::expand (const vect<T,D>& lo, const vect<T,D>& hi) const { // Allow expansion only into directions where the extent is not negative - // assert (all(lower()<=upper() or (lo==T(0) and hi==T(0)))); - assert (all(shape()>=vect<T,D>(0) or (lo==T(0) and hi==T(0)))); + // ASSERT_BBOX (all(lower()<=upper() or (lo==T(0) and hi==T(0)))); + ASSERT_BBOX (all(shape()>=vect<T,D>(0) or (lo==T(0) and hi==T(0)))); const vect<T,D> str = stride(); const vect<T,D> lb = lower() - lo * str; const vect<T,D> ub = upper() + hi * str; @@ -197,7 +203,7 @@ template<class T, int D> bbox<T,D> bbox<T,D>::expanded_containing (const bbox& b) const { if (empty()) return b; if (b.empty()) return *this; - assert (is_aligned_with(b)); + ASSERT_BBOX (is_aligned_with(b)); const vect<T,D> lo = min(lower(), b.lower()); const vect<T,D> up = max(upper(), b.upper()); const vect<T,D> str = min(stride(), b.stride()); @@ -268,12 +274,13 @@ void bbox<T,D>::input (istream& is) { consume (is, '/'); size_type size_dummy; is >> size_dummy; - assert (is.good()); + ASSERT_BBOX (is.good()); skipws (is); } consume (is, ')'); } catch (input_error &err) { - cout << "Input error while reading a bbox" << endl; + T Tdummy; + cout << "Input error while reading a bbox<" << typestring(Tdummy) << "," << D << ">" << endl; throw err; } if (any(_stride<=T(0))) { @@ -286,8 +293,8 @@ void bbox<T,D>::input (istream& is) { << " The stride does not evenly divide the extent." << endl; throw input_error(); } - assert (all(_stride>T(0))); - assert (all((_upper-_lower)%_stride == T(0))); + ASSERT_BBOX (all(_stride>T(0))); + ASSERT_BBOX (all((_upper-_lower)%_stride == T(0))); } @@ -308,4 +315,5 @@ template class bbox<int,0>; template class bbox<int,1>; template class bbox<int,2>; template class bbox<int,3>; -template class bbox<CCTK_REAL,3>; +template class bbox<int,4>; +template class bbox<CCTK_REAL,dim>; diff --git a/Carpet/CarpetLib/src/bbox.hh b/Carpet/CarpetLib/src/bbox.hh index a79fbe87b..8386f58a2 100644 --- a/Carpet/CarpetLib/src/bbox.hh +++ b/Carpet/CarpetLib/src/bbox.hh @@ -13,6 +13,14 @@ using namespace std; +#ifdef CARPET_DEBUG +# define ASSERT_BBOX(x) assert(x) +#else +# define ASSERT_BBOX(x) +#endif + + + // Forward declaration template<class T, int D> class bbox; @@ -69,11 +77,14 @@ public: const vect<T,D>& stride_) : _lower(lower_), _upper(upper_), _stride(stride_) { -#ifndef NDEBUG +#ifndef CARPET_DEBUG assert_bbox_limits(); #endif } + // Poison + static bbox poison (); + // Accessors // (Don't return references; *this might be a temporary) @@ -131,7 +142,7 @@ public: bbox b. */ bbox operator& (const bbox& b) const { - assert (all(stride()==b.stride())); + ASSERT_BBOX (all(stride()==b.stride())); vect<T,D> lo = max(lower(),b.lower()); vect<T,D> up = min(upper(),b.upper()); return bbox(lo,up,stride()); @@ -179,7 +190,7 @@ public: iterator end () const; // Memory usage - size_t memory () const + size_t memory () const CCTK_ATTRIBUTE_CONST { return memoryof (_lower) + memoryof (_upper) + memoryof (_stride); } @@ -194,6 +205,8 @@ public: // Memory usage template<class T, int D> +inline size_t memoryof (bbox<T,D> const & b) CCTK_ATTRIBUTE_CONST; +template<class T, int D> inline size_t memoryof (bbox<T,D> const & b) { return b.memory(); } diff --git a/Carpet/CarpetLib/src/bboxset.cc b/Carpet/CarpetLib/src/bboxset.cc index eceb264d8..a5748a7c6 100644 --- a/Carpet/CarpetLib/src/bboxset.cc +++ b/Carpet/CarpetLib/src/bboxset.cc @@ -51,6 +51,11 @@ bboxset<T,D>::bboxset (const vector<list<box> >& vlb) { normalize(); } +template<class T, int D> +bboxset<T,D> bboxset<T,D>::poison () { + return bboxset (bbox<T,D>::poison()); +} + // Invariant @@ -455,16 +460,54 @@ bool bboxset<T,D>::operator!= (const bboxset<T,D>& s) const { +// Input +template<class T,int D> +istream& bboxset<T,D>::input (istream& is) { + T Tdummy; + try { + skipws (is); + consume (is, "bboxset<"); + consume (is, typestring(Tdummy)); + consume (is, ","); + int D_; + is >> D_; + if (D_ != D) { + cout << "Input error: Wrong bboxset dimension " << D_ << ", expected " << D << endl; + throw input_error(); + } + consume (is, ">:{"); + consume (is, "size="); + size_type size_; + is >> size_; + consume (is, ","); + consume (is, "setsize="); + int setsize_; + is >> setsize_; + consume (is, ","); + consume (is, "set="); + is >> bs; + consume (is, "}"); + } catch (input_error & err) { + cout << "Input error while reading a bboxset<" << typestring(Tdummy) << "," << D << ">" << endl; + throw err; + } + return is; +} + + + // Output template<class T,int D> -void bboxset<T,D>::output (ostream& os) const { +ostream& bboxset<T,D>::output (ostream& os) const { T Tdummy; - os << "bboxset<" << typestring(Tdummy) << "," << D << ">:" + os << "bboxset<" << typestring(Tdummy) << "," << D << ">:{" << "size=" << size() << "," << "setsize=" << setsize() << "," - << "set=" << bs; + << "set=" << bs + << "}"; + return os; } -template class bboxset<int,3>; +template class bboxset<int,dim>; diff --git a/Carpet/CarpetLib/src/bboxset.hh b/Carpet/CarpetLib/src/bboxset.hh index 45e0dc0f2..5d206da33 100644 --- a/Carpet/CarpetLib/src/bboxset.hh +++ b/Carpet/CarpetLib/src/bboxset.hh @@ -28,6 +28,10 @@ template<class T, int D> class bboxset; // template<class T,int D> // bboxset<T,D> operator- (const bbox<T,D>& b, const bboxset<T,D>& s); +// Input +template<class T,int D> +istream& operator>> (istream& is, bboxset<T,D>& s); + // Output template<class T,int D> ostream& operator<< (ostream& os, const bboxset<T,D>& s); @@ -60,6 +64,8 @@ public: bboxset (const list<box>& lb); bboxset (const vector<list<box> >& vlb); + static bboxset poison (); + // Invariant bool invariant () const; @@ -143,10 +149,13 @@ public: // iterator end () const { return bs.end(); } // Memory usage - size_t memory () const { return memoryof (bs); } + size_t memory () const CCTK_ATTRIBUTE_PURE { return memoryof (bs); } + + // Input + istream& input (istream& is); // Output - void output (ostream& os) const; + ostream& output (ostream& os) const; }; @@ -186,64 +195,112 @@ inline bboxset<T,D> operator& (const bbox<T,D>& b, const bboxset<T,D>& s) { template<class T,int D> -inline bool operator== (const bbox<T,D>& b, const bboxset<T,D>& s) { +inline bool operator== (const bbox<T,D>& b, const bboxset<T,D>& s) + CCTK_ATTRIBUTE_PURE; +template<class T,int D> +inline bool operator== (const bbox<T,D>& b, const bboxset<T,D>& s) +{ return bboxset<T,D>(b) == s; } template<class T,int D> -inline bool operator!= (const bbox<T,D>& b, const bboxset<T,D>& s) { +inline bool operator!= (const bbox<T,D>& b, const bboxset<T,D>& s) + CCTK_ATTRIBUTE_PURE; +template<class T,int D> +inline bool operator!= (const bbox<T,D>& b, const bboxset<T,D>& s) +{ return bboxset<T,D>(b) != s; } template<class T,int D> -inline bool operator< (const bbox<T,D>& b, const bboxset<T,D>& s) { +inline bool operator< (const bbox<T,D>& b, const bboxset<T,D>& s) + CCTK_ATTRIBUTE_PURE; +template<class T,int D> +inline bool operator< (const bbox<T,D>& b, const bboxset<T,D>& s) +{ return bboxset<T,D>(b) < s; } template<class T,int D> -inline bool operator<= (const bbox<T,D>& b, const bboxset<T,D>& s) { +inline bool operator<= (const bbox<T,D>& b, const bboxset<T,D>& s) + CCTK_ATTRIBUTE_PURE; +template<class T,int D> +inline bool operator<= (const bbox<T,D>& b, const bboxset<T,D>& s) +{ return bboxset<T,D>(b) <= s; } template<class T,int D> -inline bool operator> (const bbox<T,D>& b, const bboxset<T,D>& s) { +inline bool operator> (const bbox<T,D>& b, const bboxset<T,D>& s) + CCTK_ATTRIBUTE_PURE; +template<class T,int D> +inline bool operator> (const bbox<T,D>& b, const bboxset<T,D>& s) +{ return bboxset<T,D>(b) > s; } template<class T,int D> -inline bool operator>= (const bbox<T,D>& b, const bboxset<T,D>& s) { +inline bool operator>= (const bbox<T,D>& b, const bboxset<T,D>& s) + CCTK_ATTRIBUTE_PURE; +template<class T,int D> +inline bool operator>= (const bbox<T,D>& b, const bboxset<T,D>& s) +{ return bboxset<T,D>(b) >= s; } template<class T,int D> -inline bool operator== (const bboxset<T,D>& s, const bbox<T,D>& b) { +inline bool operator== (const bboxset<T,D>& s, const bbox<T,D>& b) + CCTK_ATTRIBUTE_PURE; +template<class T,int D> +inline bool operator== (const bboxset<T,D>& s, const bbox<T,D>& b) +{ return s == bboxset<T,D>(b); } template<class T,int D> -inline bool operator!= (const bboxset<T,D>& s, const bbox<T,D>& b) { +inline bool operator!= (const bboxset<T,D>& s, const bbox<T,D>& b) + CCTK_ATTRIBUTE_PURE; +template<class T,int D> +inline bool operator!= (const bboxset<T,D>& s, const bbox<T,D>& b) +{ return s != bboxset<T,D>(b); } template<class T,int D> -inline bool operator< (const bboxset<T,D>& s, const bbox<T,D>& b) { +inline bool operator< (const bboxset<T,D>& s, const bbox<T,D>& b) + CCTK_ATTRIBUTE_PURE; +template<class T,int D> +inline bool operator< (const bboxset<T,D>& s, const bbox<T,D>& b) +{ return s < bboxset<T,D>(b); } template<class T,int D> -inline bool operator<= (const bboxset<T,D>& s, const bbox<T,D>& b) { +inline bool operator<= (const bboxset<T,D>& s, const bbox<T,D>& b) + CCTK_ATTRIBUTE_PURE; +template<class T,int D> +inline bool operator<= (const bboxset<T,D>& s, const bbox<T,D>& b) +{ return s <= bboxset<T,D>(b); } template<class T,int D> -inline bool operator> (const bboxset<T,D>& s, const bbox<T,D>& b) { +inline bool operator> (const bboxset<T,D>& s, const bbox<T,D>& b) + CCTK_ATTRIBUTE_PURE; +template<class T,int D> +inline bool operator> (const bboxset<T,D>& s, const bbox<T,D>& b) +{ return s > bboxset<T,D>(b); } template<class T,int D> -inline bool operator>= (const bboxset<T,D>& s, const bbox<T,D>& b) { +inline bool operator>= (const bboxset<T,D>& s, const bbox<T,D>& b) + CCTK_ATTRIBUTE_PURE; +template<class T,int D> +inline bool operator>= (const bboxset<T,D>& s, const bbox<T,D>& b) +{ return s >= bboxset<T,D>(b); } @@ -251,15 +308,26 @@ inline bool operator>= (const bboxset<T,D>& s, const bbox<T,D>& b) { // Memory usage template<class T, int D> -inline size_t memoryof (bboxset<T,D> const & s) { return s.memory(); } +inline size_t memoryof (bboxset<T,D> const & s) + CCTK_ATTRIBUTE_PURE; +template<class T, int D> +inline size_t memoryof (bboxset<T,D> const & s) +{ return s.memory(); } + + + +// Input +template<class T,int D> +inline istream& operator>> (istream& is, bboxset<T,D>& s) { + return s.input(is); +} // Output template<class T,int D> inline ostream& operator<< (ostream& os, const bboxset<T,D>& s) { - s.output(os); - return os; + return s.output(os); } diff --git a/Carpet/CarpetLib/src/commstate.cc b/Carpet/CarpetLib/src/commstate.cc index 7a00157c2..ef1b64cdb 100644 --- a/Carpet/CarpetLib/src/commstate.cc +++ b/Carpet/CarpetLib/src/commstate.cc @@ -21,241 +21,463 @@ using namespace CarpetLib; +char const * tostring (astate const & thestate) +{ + switch (thestate) { + case state_get_buffer_sizes: return "state_get_buffer_sizes"; + case state_fill_send_buffers: return "state_fill_send_buffers"; + case state_do_some_work: return "state_do_some_work"; + case state_empty_recv_buffers: return "state_empty_recv_buffers"; + case state_done: return "state_done"; + default: assert(0); abort(); + } + return NULL; +} + + + // Communication state control comm_state::comm_state () { - // A comm_state object will step through - // state_get_buffer_sizes - // state_fill_send_buffers - // state_empty_recv_buffers - DECLARE_CCTK_PARAMETERS; - + static Timer timer ("commstate::create"); timer.start (); thestate = state_get_buffer_sizes; - + typebufs.resize (dist::c_ndatatypes()); -#define INSTANTIATE(T) \ - { \ - T dummy; \ - int const type = dist::c_datatype (dummy); \ - assert (typebufs.AT(type).datatypesize == 0); \ - typebufs.AT(type).datatypesize = sizeof dummy; \ - typebufs.AT(type).mpi_datatype = dist::datatype (dummy); \ - typebufs.AT(type).procbufs.resize (dist::size()); \ +#define INSTANTIATE(T) \ + { \ + T dummy; \ + unsigned const type = dist::c_datatype (dummy); \ + typebufs.AT(type).mpi_datatype = dist::mpi_datatype (dummy); \ + typebufs.AT(type).datatypesize = sizeof dummy; \ } #include "instantiate" #undef INSTANTIATE - - srequests.resize (dist::c_ndatatypes() * dist::size(), MPI_REQUEST_NULL); - rrequests.resize (dist::c_ndatatypes() * dist::size(), MPI_REQUEST_NULL); + + srequests.reserve (dist::c_ndatatypes() * dist::size()); + rrequests.reserve (dist::c_ndatatypes() * dist::size()); timer.stop (0); } + void comm_state::step () { DECLARE_CCTK_PARAMETERS; static Timer total ("commstate::step"); total.start (); - assert (thestate != state_done); + + if (barrier_between_stages) { + // Add a barrier, ensuring e.g. that all Irecvs are posted before + // the first Isends are made + if (commstate_verbose) { + CCTK_VInfo (CCTK_THORNSTRING, + "before MPI_Barrier; state=%s", tostring(thestate)); + } + MPI_Barrier (dist::comm()); + if (commstate_verbose) { + CCTK_INFO ("after MPI_Barrier"); + } + } + switch (thestate) { - case state_get_buffer_sizes: + + + case state_get_buffer_sizes: { + + if (check_communication_schedule) { + vector<int> sendcount(dist::size() * dist::c_ndatatypes()); + for (unsigned type = 0; type < dist::c_ndatatypes(); ++ type) { + for (int proc = 0; proc < dist::size(); ++ proc) { + sendcount.AT(proc * dist::c_ndatatypes() + type) = + typebufs.AT(type).in_use ? + typebufs.AT(type).procbufs.AT(proc).sendbufsize : + 0; + } + assert (sendcount.AT(dist::rank() * dist::c_ndatatypes() + type) == 0); + } + vector<int> recvcount(dist::size() * dist::c_ndatatypes()); + if (commstate_verbose) { + CCTK_INFO ("before MPI_Alltoall"); + } + MPI_Alltoall (&sendcount.front(), dist::c_ndatatypes(), MPI_INT, + &recvcount.front(), dist::c_ndatatypes(), MPI_INT, + dist::comm()); + if (commstate_verbose) { + CCTK_INFO ("after MPI_Alltoall"); + } + for (unsigned type = 0; type < dist::c_ndatatypes(); ++ type) { + for (int proc = 0; proc < dist::size(); ++ proc) { + assert (recvcount.AT(proc * dist::c_ndatatypes() + type) == + (typebufs.AT(type).in_use ? + int (typebufs.AT(type).procbufs.AT(proc).recvbufsize) : + 0)); + } + assert (recvcount.AT(dist::rank() * dist::c_ndatatypes() + type) == 0); + } + } + // The sizes of the collective communication buffers are known so // now allocate them. // The receive operations are also posted here already (a clever // MPI layer may take advantage of such early posting). - num_posted_recvs = num_completed_recvs = 0; - for (int proc1 = 0; proc1 < dist::size(); ++ proc1) { - size_t const proc = - interleave_communications - ? (proc1 + dist::rank()) % dist::size() - : proc1; - - for (size_t type = 0; type < typebufs.size(); type++) { + for (unsigned type = 0; type < dist::c_ndatatypes(); ++ type) { + if (typebufs.AT(type).in_use) { - // skip unused datatype buffers - if (not typebufs.AT(type).in_use) continue; - - int datatypesize = typebufs.AT(type).datatypesize; - procbufdesc& procbuf = typebufs.AT(type).procbufs.AT(proc); - - assert (procbuf.sendbufbase.empty()); - assert (procbuf.recvbufbase.empty()); - procbuf.sendbufbase.resize (procbuf.sendbufsize*datatypesize); - procbuf.recvbufbase.resize (procbuf.recvbufsize*datatypesize); - // TODO: this may be a bit extreme, and it is only for - // internal consistency checking - if (poison_new_memory) { - memset (&procbuf.sendbufbase.front(), poison_value, - procbuf.sendbufsize*datatypesize); - memset (&procbuf.recvbufbase.front(), poison_value, - procbuf.recvbufsize*datatypesize); - } - procbuf.sendbuf = &procbuf.sendbufbase.front(); - procbuf.recvbuf = &procbuf.recvbufbase.front(); - - if (procbuf.recvbufsize > 0) { - static Timer timer ("commstate_sizes_irecv"); - timer.start (); - int const tag = - vary_tags - ? (dist::rank() + dist::size() * (proc + dist::size() * type)) % 32768 - : type; - if (commstate_verbose) { - CCTK_VInfo (CCTK_THORNSTRING, - "About to MPI_Irecv from %d", (int)proc); + for (int proc1 = 0; proc1 < dist::size(); ++ proc1) { + int const proc = + interleave_communications ? + (proc1 + dist::rank()) % dist::size() : + proc1; + + int const datatypesize = typebufs.AT(type).datatypesize; + procbufdesc & procbuf = typebufs.AT(type).procbufs.AT(proc); + + assert (procbuf.sendbufbase.empty()); + assert (procbuf.recvbufbase.empty()); + procbuf.sendbufbase.resize + (procbuf.sendbufsize * datatypesize * message_size_multiplier); + procbuf.recvbufbase.resize + (procbuf.recvbufsize * datatypesize * message_size_multiplier); + // TODO: this may be a bit extreme, and it is only for + // internal consistency checking + if (poison_new_memory) { + memset (&procbuf.sendbufbase.front(), poison_value, + procbuf.sendbufsize * datatypesize * message_size_multiplier); + memset (&procbuf.recvbufbase.front(), poison_value, + procbuf.recvbufsize * datatypesize * message_size_multiplier); } - MPI_Irecv (&procbuf.recvbufbase.front(), procbuf.recvbufsize, - typebufs.AT(type).mpi_datatype, proc, tag, - dist::comm(), &rrequests.AT(dist::size()*type + proc)); - if (commstate_verbose) { - CCTK_INFO ("Finished MPI_Irecv"); + procbuf.sendbuf = &procbuf.sendbufbase.front(); + procbuf.recvbuf = &procbuf.recvbufbase.front(); + + if (procbuf.recvbufsize > 0) { + static Timer timer ("commstate::sizes_irecv"); + timer.start (); + int const tag = type; + if (commstate_verbose) { + CCTK_VInfo (CCTK_THORNSTRING, + "About to MPI_Irecv from processor %d for type %s", + proc, dist::c_datatype_name(type)); + } + MPI_Irecv (&procbuf.recvbufbase.front(), + procbuf.recvbufsize * message_size_multiplier, + typebufs.AT(type).mpi_datatype, proc, tag, + dist::comm(), &push_back(rrequests)); + if (commstate_verbose) { + CCTK_INFO ("Finished MPI_Irecv"); + } + assert (not procbuf.did_post_recv); + procbuf.did_post_recv = true; + timer.stop (procbuf.recvbufsize * datatypesize); } - timer.stop (procbuf.recvbufsize * datatypesize); - num_posted_recvs++; - } + + } // for proc + } - } + } // for type - if (barrier_between_stages) { - // Add a barrier, to try to ensure that all Irecvs are posted - // before the first Isends are made - // (Alternative: Use MPI_Alltoallv instead) - MPI_Barrier (dist::comm()); + if (check_communication_schedule) { + for (unsigned type = 0; type < dist::c_ndatatypes(); ++ type) { + if (typebufs.AT(type).in_use) { + for (int proc = 0; proc < dist::size(); ++ proc) { + procbufdesc const & procbuf = typebufs.AT(type).procbufs.AT(proc); + assert (procbuf.did_post_recv == (procbuf.recvbufsize > 0)); + } + } + } } - // Now go and get the send buffers filled with data. - // Once a buffer is full it will be posted right away - // (see gdata::copy_into_sendbuffer() and - // gdata::interpolate_into_sendbuffer()). thestate = state_fill_send_buffers; break; + } + - case state_fill_send_buffers: + + case state_fill_send_buffers: { if (combine_sends) { - // Send the data. Do not send them sequentially, but try to - // intersperse the communications - for (int proc1 = 0; proc1 < dist::size(); ++ proc1) { - int const proc = - interleave_communications - ? (proc1 + dist::size() - dist::rank()) % dist::size() - : proc1; - - for (size_t type = 0; type < typebufs.size(); type++) { - // skip unused datatype buffers - if (not typebufs.AT(type).in_use) continue; + for (unsigned type = 0; type < dist::c_ndatatypes(); ++ type) { + if (typebufs.AT(type).in_use) { - int const datatypesize = typebufs.AT(type).datatypesize; - procbufdesc const & procbuf = typebufs.AT(type).procbufs.AT(proc); - - size_t const fillstate = - procbuf.sendbuf - &procbuf.sendbufbase.front(); - assert (fillstate == procbuf.sendbufsize * datatypesize); - - if (procbuf.sendbufsize > 0) { - int const tag = - vary_tags - ? (proc + dist::size() * (dist::rank() + dist::size() * type)) % 32768 - : type; - if (use_mpi_send) { - // use MPI_Send - static Timer timer ("commstate_send"); - timer.start (); - if (commstate_verbose) { - CCTK_VInfo (CCTK_THORNSTRING, - "About to MPI_Send to %d", (int)proc); + for (int proc1 = 0; proc1 < dist::size(); ++ proc1) { + int const proc = + interleave_communications + ? (proc1 + dist::size() - dist::rank()) % dist::size() + : proc1; + + procbufdesc & procbuf = typebufs.AT(type).procbufs.AT(proc); + if (procbuf.sendbufsize > 0) { + + int const datatypesize = typebufs.AT(type).datatypesize; + + size_t const fillstate = + procbuf.sendbuf - &procbuf.sendbufbase.front(); + assert (fillstate == procbuf.sendbufsize * datatypesize); + + // Enlarge messages for performance testing + if (message_size_multiplier > 1) { + size_t const nbytes = + procbuf.sendbufsize * datatypesize * + (message_size_multiplier - 1); +#warning "TODO" + // memset (procbuf.sendbuf, poison_value, nbytes); + memset (procbuf.sendbuf, 0, nbytes); } - MPI_Send (const_cast<char*>(&procbuf.sendbufbase.front()), - procbuf.sendbufsize, - typebufs.AT(type).mpi_datatype, proc, tag, - dist::comm()); - if (commstate_verbose) { - CCTK_INFO ("Finished MPI_Send"); + + int const tag = type; + if (use_mpi_send) { + // use MPI_Send + static Timer timer ("commstate::send"); + timer.start (); + if (commstate_verbose) { + CCTK_VInfo (CCTK_THORNSTRING, + "About to MPI_Send to processor %d for type %s", + proc, dist::c_datatype_name(type)); + } + MPI_Send (const_cast<char*>(&procbuf.sendbufbase.front()), + procbuf.sendbufsize * message_size_multiplier, + typebufs.AT(type).mpi_datatype, proc, tag, + dist::comm()); + assert (not procbuf.did_post_send); + procbuf.did_post_send = true; + if (commstate_verbose) { + CCTK_INFO ("Finished MPI_Send"); + } + timer.stop (procbuf.sendbufsize * datatypesize); + } else if (use_mpi_ssend) { + // use MPI_Ssend + static Timer timer ("commstate::ssend"); + timer.start (); + if (commstate_verbose) { + CCTK_VInfo (CCTK_THORNSTRING, + "About to MPI_Ssend to processor %d for type %s", + proc, dist::c_datatype_name(type)); + } + MPI_Ssend (const_cast<char*>(&procbuf.sendbufbase.front()), + procbuf.sendbufsize * message_size_multiplier, + typebufs.AT(type).mpi_datatype, proc, tag, + dist::comm()); + assert (not procbuf.did_post_send); + procbuf.did_post_send = true; + if (commstate_verbose) { + CCTK_INFO ("Finished MPI_Ssend"); + } + timer.stop (procbuf.sendbufsize * datatypesize); + } else { + // use MPI_Isend + static Timer timer ("commstate::isend"); + timer.start (); + if (commstate_verbose) { + CCTK_VInfo (CCTK_THORNSTRING, + "About to MPI_Isend to processor %d for type %s", + proc, dist::c_datatype_name(type)); + } + MPI_Isend (const_cast<char*>(&procbuf.sendbufbase.front()), + procbuf.sendbufsize * message_size_multiplier, + typebufs.AT(type).mpi_datatype, proc, tag, + dist::comm(), &push_back(srequests)); + assert (not procbuf.did_post_send); + procbuf.did_post_send = true; + if (commstate_verbose) { + CCTK_INFO ("Finished MPI_Isend"); + } + timer.stop (procbuf.sendbufsize * datatypesize); } - srequests.AT(dist::size()*type + proc) = MPI_REQUEST_NULL; - timer.stop (procbuf.sendbufsize * datatypesize); - } else if (use_mpi_ssend) { - // use MPI_Ssend - static Timer timer ("commstate_ssend"); + + } + } // for proc + + } + } // for type + } // if combine_sends + + if (check_communication_schedule) { + for (unsigned type = 0; type < dist::c_ndatatypes(); ++ type) { + if (typebufs.AT(type).in_use) { + for (int proc = 0; proc < dist::size(); ++ proc) { + procbufdesc const & procbuf = typebufs.AT(type).procbufs.AT(proc); + assert (procbuf.did_post_send == (procbuf.sendbufsize > 0)); + } + } + } + } + + thestate = state_do_some_work; + break; + } + + + + case state_do_some_work: { + static Timer timer ("commstate::do_some_work::waitall"); + timer.start (); + if (commstate_verbose) { + CCTK_INFO ("About to MPI_Waitall"); + } + MPI_Waitall (rrequests.size(), &rrequests.front(), MPI_STATUSES_IGNORE); + if (commstate_verbose) { + CCTK_INFO ("Finished MPI_Waitall"); + } + timer.stop (0); + + thestate = state_empty_recv_buffers; + break; + } + + + + case state_empty_recv_buffers: { + static Timer timer ("commstate::empty_recv_buffers::waitall"); + timer.start (); + if (commstate_verbose) { + CCTK_INFO ("About to MPI_Waitall"); + } + MPI_Waitall (srequests.size(), &srequests.front(), MPI_STATUSES_IGNORE); + if (commstate_verbose) { + CCTK_INFO ("Finished MPI_Waitall"); + } + timer.stop (0); + + // Transfer messages again for performance testing + for (int n = 1; n < message_count_multiplier; ++ n) { + + srequests.clear(); + srequests.reserve (dist::c_ndatatypes() * dist::size()); + rrequests.clear(); + rrequests.reserve (dist::c_ndatatypes() * dist::size()); + + // Irecv + for (unsigned type = 0; type < dist::c_ndatatypes(); ++ type) { + if (typebufs.AT(type).in_use) { + + for (int proc1 = 0; proc1 < dist::size(); ++ proc1) { + int const proc = + interleave_communications ? + (proc1 + dist::rank()) % dist::size() : + proc1; + + procbufdesc & procbuf = typebufs.AT(type).procbufs.AT(proc); + + if (procbuf.recvbufsize > 0) { + static Timer timer ("commstate::message_count_multiplier::irecv"); timer.start (); + int const tag = type; if (commstate_verbose) { CCTK_VInfo (CCTK_THORNSTRING, - "About to MPI_Ssend to %d", (int)proc); + "About to MPI_Irecv from processor %d for type %s", + proc, dist::c_datatype_name(type)); } - MPI_Ssend (const_cast<char*>(&procbuf.sendbufbase.front()), - procbuf.sendbufsize, + MPI_Irecv (&procbuf.recvbufbase.front(), + procbuf.recvbufsize * message_size_multiplier, typebufs.AT(type).mpi_datatype, proc, tag, - dist::comm()); + dist::comm(), &push_back(rrequests)); if (commstate_verbose) { - CCTK_INFO ("Finished MPI_Ssend"); + CCTK_INFO ("Finished MPI_Irecv"); } - srequests.AT(dist::size()*type + proc) = MPI_REQUEST_NULL; - timer.stop (procbuf.sendbufsize * datatypesize); - } else { - // use MPI_Isend - static Timer timer ("commstate_isend"); + timer.stop (procbuf.recvbufsize * typebufs.AT(type).datatypesize); + } + + } // for proc + + } + } // for type + + // Isend + for (unsigned type = 0; type < dist::c_ndatatypes(); ++ type) { + if (typebufs.AT(type).in_use) { + + for (int proc1 = 0; proc1 < dist::size(); ++ proc1) { + int const proc = + interleave_communications + ? (proc1 + dist::size() - dist::rank()) % dist::size() + : proc1; + + procbufdesc & procbuf = typebufs.AT(type).procbufs.AT(proc); + + if (procbuf.sendbufsize > 0) { + int const tag = type; + assert (not use_mpi_send); + assert (not use_mpi_ssend); + static Timer timer ("commstate::message_count_multiplier::isend"); timer.start (); if (commstate_verbose) { - CCTK_VWarn (3, __LINE__, __FILE__, CCTK_THORNSTRING, - "About to MPI_Isend to %d", (int)proc); + CCTK_VInfo (CCTK_THORNSTRING, + "About to MPI_Isend to processor %d for type %s", + proc, dist::c_datatype_name(type)); } MPI_Isend (const_cast<char*>(&procbuf.sendbufbase.front()), - procbuf.sendbufsize, + procbuf.sendbufsize * message_size_multiplier, typebufs.AT(type).mpi_datatype, proc, tag, - dist::comm(), &srequests.AT(dist::size()*type + proc)); + dist::comm(), &push_back(srequests)); if (commstate_verbose) { CCTK_INFO ("Finished MPI_Isend"); } - timer.stop (procbuf.sendbufsize * datatypesize); + timer.stop (procbuf.sendbufsize * typebufs.AT(type).datatypesize); } - } + + } // for proc - } // for type - - } // for proc - } + } + } // for type + + // Waitall + { + static Timer timer ("commstate::message_count_multiplier::waitall(irecv)"); + timer.start (); + if (commstate_verbose) { + CCTK_INFO ("About to MPI_Waitall"); + } + MPI_Waitall (rrequests.size(), &rrequests.front(), MPI_STATUSES_IGNORE); + if (commstate_verbose) { + CCTK_INFO ("Finished MPI_Waitall"); + } + timer.stop (0); + } + + // Waitall + { + static Timer timer ("commstate::message_count_multiplier::waitall(isend)"); + timer.start (); + if (commstate_verbose) { + CCTK_INFO ("About to MPI_Waitall"); + } + MPI_Waitall (srequests.size(), &srequests.front(), MPI_STATUSES_IGNORE); + if (commstate_verbose) { + CCTK_INFO ("Finished MPI_Waitall"); + } + timer.stop (0); + } + + } // for n - // Now fall through to the next state in which the recv buffers - // are emptied as soon as data has arrived. - thestate = state_do_some_work; + thestate = state_done; break; + } + + + + case state_done: { + assert (0); abort(); + } - case state_do_some_work: - // Now fall through to the next state in which the recv buffers - // are emptied as soon as data has arrived. - thestate = state_empty_recv_buffers; - case state_empty_recv_buffers: - // Finish (at least one of) the posted communications - if (not AllPostedCommunicationsFinished ()) { - // No state change if there are still outstanding - // communications; do another comm_state loop iteration. - } else { - // Everything is done so release the collective communication buffers. - for (size_t type = 0; type < typebufs.size(); type++) { - for (size_t proc = 0; proc < typebufs.AT(type).procbufs.size(); proc++) { - typebufs.AT(type).procbufs.AT(proc).sendbufbase.clear(); - typebufs.AT(type).procbufs.AT(proc).recvbufbase.clear(); - } - } - thestate = state_done; - } - break; default: - assert (0 && "invalid state"); + assert (0); abort(); } + + + total.stop (0); } -bool comm_state::done () +bool comm_state::done () const { return thestate == state_done; } @@ -264,116 +486,16 @@ bool comm_state::done () comm_state::~comm_state () { DECLARE_CCTK_PARAMETERS; - + assert (thestate == state_done or thestate == state_get_buffer_sizes); } -// wait for completion of posted collective buffer sends/receives -// -// This function will wait for all of the posted receive operations to -// finish. -// -// It returns true if all posted communications have been completed. -bool comm_state::AllPostedCommunicationsFinished () -{ - DECLARE_CCTK_PARAMETERS; - - // check if all outstanding receives have been completed already - if (num_posted_recvs == num_completed_recvs) { - // finalize the outstanding sends in one go - if (reduce_mpi_waitall) { - size_t nreqs = 0; - for (size_t i=0; i<srequests.size(); ++i) { - if (srequests.AT(i) != MPI_REQUEST_NULL) { - ++nreqs; - } - } - vector<MPI_Request> reqs(nreqs); - nreqs = 0; - for (size_t i=0; i<srequests.size(); ++i) { - if (srequests.AT(i) != MPI_REQUEST_NULL) { - reqs.AT(nreqs) = srequests.AT(i); - ++nreqs; - } - } - assert (nreqs == reqs.size()); - static Timer timer ("commstate_waitall_final"); - timer.start (); - if (commstate_verbose) { - CCTK_INFO ("About to MPI_Waitall"); - } - MPI_Waitall (reqs.size(), &reqs.front(), MPI_STATUSES_IGNORE); - if (commstate_verbose) { - CCTK_INFO ("Finished MPI_Waitall"); - } - timer.stop (0); - } else { - static Timer timer ("commstate_waitall_final"); - timer.start (); - if (commstate_verbose) { - CCTK_INFO ("About to MPI_Waitall"); - } - MPI_Waitall (srequests.size(), &srequests.front(), MPI_STATUSES_IGNORE); - if (commstate_verbose) { - CCTK_INFO ("Finished MPI_Waitall"); - } - timer.stop (0); - } - - return true; - } - - // wait for completion of all posted receive operations - if (reduce_mpi_waitall) { - size_t nreqs = 0; - for (size_t i=0; i<rrequests.size(); ++i) { - if (rrequests.AT(i) != MPI_REQUEST_NULL) { - ++nreqs; - } - } - vector<MPI_Request> reqs(nreqs); - nreqs = 0; - for (size_t i=0; i<rrequests.size(); ++i) { - if (rrequests.AT(i) != MPI_REQUEST_NULL) { - reqs.AT(nreqs) = rrequests.AT(i); - ++nreqs; - } - } - assert (nreqs == reqs.size()); - static Timer timer ("commstate_waitall"); - timer.start (); - if (commstate_verbose) { - CCTK_INFO ("About to MPI_Waitall"); - } - MPI_Waitall (reqs.size(), &reqs.front(), MPI_STATUSES_IGNORE); - if (commstate_verbose) { - CCTK_INFO ("Finished MPI_Waitall"); - } - timer.stop (0); - } else { - static Timer timer ("commstate_waitall"); - timer.start (); - if (commstate_verbose) { - CCTK_INFO ("About to MPI_Waitall"); - } - MPI_Waitall (rrequests.size(), &rrequests.front(), MPI_STATUSES_IGNORE); - if (commstate_verbose) { - CCTK_INFO ("Finished MPI_Waitall"); - } - timer.stop (0); - } - num_completed_recvs = num_posted_recvs; - - return false; -} - - void comm_state:: -reserve_send_space (unsigned int const type, +reserve_send_space (unsigned const type, int const proc, int const npoints) { @@ -381,14 +503,19 @@ reserve_send_space (unsigned int const type, assert (proc >= 0 and proc < dist::size()); assert (npoints >= 0); typebufdesc & typebuf = typebufs.AT(type); + if (not typebuf.in_use) { + typebuf.procbufs.resize (dist::size()); + typebuf.in_use = true; + } procbufdesc & procbuf = typebuf.procbufs.AT(proc); procbuf.sendbufsize += npoints; - typebuf.in_use = true; } + + void comm_state:: -reserve_recv_space (unsigned int const type, +reserve_recv_space (unsigned const type, int const proc, int const npoints) { @@ -396,19 +523,25 @@ reserve_recv_space (unsigned int const type, assert (proc >= 0 and proc < dist::size()); assert (npoints >= 0); typebufdesc & typebuf = typebufs.AT(type); + if (not typebuf.in_use) { + typebuf.procbufs.resize (dist::size()); + typebuf.in_use = true; + } procbufdesc & procbuf = typebuf.procbufs.AT(proc); procbuf.recvbufsize += npoints; - typebuf.in_use = true; } + + void * comm_state:: -send_buffer (unsigned int const type, +send_buffer (unsigned const type, int const proc, int const npoints) { assert (type < dist::c_ndatatypes()); assert (proc >= 0 and proc < dist::size()); + assert (npoints > 0); typebufdesc const & typebuf = typebufs.AT(type); procbufdesc const & procbuf = typebuf.procbufs.AT(proc); @@ -419,14 +552,17 @@ send_buffer (unsigned int const type, return procbuf.sendbuf; } + + void * comm_state:: -recv_buffer (unsigned int const type, +recv_buffer (unsigned const type, int const proc, int const npoints) { assert (type < dist::c_ndatatypes()); assert (proc >= 0 and proc < dist::size()); + assert (npoints > 0); typebufdesc const & typebuf = typebufs.AT(type); procbufdesc const & procbuf = typebuf.procbufs.AT(proc); @@ -437,9 +573,11 @@ recv_buffer (unsigned int const type, return procbuf.recvbuf; } + + void comm_state:: -commit_send_space (unsigned int const type, +commit_send_space (unsigned const type, int const proc, int const npoints) { @@ -448,6 +586,7 @@ commit_send_space (unsigned int const type, assert (type < dist::c_ndatatypes()); assert (proc >= 0 and proc < dist::size()); assert (npoints >= 0); + assert (npoints > 0); typebufdesc & typebuf = typebufs.AT(type); procbufdesc & procbuf = typebuf.procbufs.AT(proc); procbuf.sendbuf += npoints * typebuf.datatypesize; @@ -461,16 +600,30 @@ commit_send_space (unsigned int const type, &procbuf.sendbufbase.front() + procbuf.sendbufsize * typebuf.datatypesize) { + if (message_size_multiplier > 1) { + size_t const nbytes = + procbuf.sendbufsize * typebuf.datatypesize * + (message_size_multiplier - 1); + memset (procbuf.sendbuf, poison_value, nbytes); + } + static Timer timer ("commit_send_space::isend"); timer.start (); if (commstate_verbose) { CCTK_VInfo (CCTK_THORNSTRING, - "About to MPI_Isend to %d", (int)proc); + "About to MPI_Isend to processor %d for type %s", + proc, dist::c_datatype_name(type)); } + int const tag = type; + assert (procbuf.sendbufsize > 0); + assert (not use_mpi_send); + assert (not use_mpi_ssend); MPI_Isend (&procbuf.sendbufbase.front(), - procbuf.sendbufsize, typebuf.mpi_datatype, - proc, type, dist::comm(), - & srequests.AT(type * dist::size() + proc)); + procbuf.sendbufsize * message_size_multiplier, + typebuf.mpi_datatype, proc, tag, + dist::comm(), &push_back(srequests)); + assert (not procbuf.did_post_send); + procbuf.did_post_send = true; if (commstate_verbose) { CCTK_INFO ("Finished MPI_Isend"); } @@ -479,15 +632,18 @@ commit_send_space (unsigned int const type, } } + + void comm_state:: -commit_recv_space (unsigned int const type, +commit_recv_space (unsigned const type, int const proc, int const npoints) { assert (type < dist::c_ndatatypes()); assert (proc >= 0 and proc < dist::size()); assert (npoints >= 0); + assert (npoints > 0); typebufdesc & typebuf = typebufs.AT(type); procbufdesc & procbuf = typebuf.procbufs.AT(proc); procbuf.recvbuf += npoints * typebuf.datatypesize; diff --git a/Carpet/CarpetLib/src/commstate.hh b/Carpet/CarpetLib/src/commstate.hh index c01f732da..e59ce7cb4 100644 --- a/Carpet/CarpetLib/src/commstate.hh +++ b/Carpet/CarpetLib/src/commstate.hh @@ -2,7 +2,7 @@ #define COMMSTATE_HH #include <cstdlib> -#include <queue> +#include <iostream> #include <vector> #include <mpi.h> @@ -29,115 +29,132 @@ enum astate { state_done }; +char const * tostring (astate const & thestate); + +inline ostream& operator<< (ostream& os, astate const & thestate) +{ + return os << tostring(thestate); +} + + + struct comm_state { astate thestate; - + comm_state (); void step (); - bool done (); + bool done () const; ~comm_state (); - + private: // Forbid copying and passing by value comm_state (comm_state const &); comm_state& operator= (comm_state const &); - -public: - - ////////////////////////////////////////////////////////////////////////// - // the following members are used for collective communications - ////////////////////////////////////////////////////////////////////////// - -public: - // structure describing a per-processor buffer for collective communications + + + + // structure describing a per-processor buffer struct procbufdesc { - // the allocated communication buffers + // allocated communication buffers vector<char> sendbufbase; vector<char> recvbufbase; - - // the sizes of communication buffers (in elements of type <datatype>) + + // sizes of the communication buffers (in elements of type <datatype>) size_t sendbufsize; size_t recvbufsize; - + // pointers to step through the communication buffers // (these get advanced by the routines which fill/empty the buffers) char* sendbuf; char* recvbuf; - + + bool did_post_send; + bool did_post_recv; + // constructor for an instance of this structure - procbufdesc() : sendbufsize(0), recvbufsize(0), - sendbuf(NULL), recvbuf(NULL) + procbufdesc() : + sendbufsize(0), recvbufsize(0), + sendbuf(NULL), recvbuf(NULL), + did_post_send(false), did_post_recv(false) { } }; - + + + // structure describing a collective communications buffer for a C datatype struct typebufdesc { // flag indicating whether this buffer is in use bool in_use; - + + // the MPI datatype + MPI_Datatype mpi_datatype; + // the size of this datatype (in bytes) int datatypesize; - - // the corresponding MPI datatype - MPI_Datatype mpi_datatype; - + // per-processor buffers - vector<procbufdesc> procbufs; // [dist::size()] - + vector<procbufdesc> procbufs; // [dist::size()] + // constructor for an instance of this structure - typebufdesc() : in_use(false), datatypesize(0), - mpi_datatype(MPI_DATATYPE_NULL) + typebufdesc() : + in_use(false), + mpi_datatype(MPI_DATATYPE_NULL), datatypesize(0) { } }; - - // list of datatype buffers - vector<typebufdesc> typebufs; // [dist::c_ndatatypes()] - + + + + // datatype buffers + vector<typebufdesc> typebufs; // [type] + + + + // outstanding requests for posted send/recv communications + vector<MPI_Request> srequests; + vector<MPI_Request> rrequests; + + static inline + MPI_Request & push_back (vector<MPI_Request> & reqs) + { + reqs.push_back (MPI_REQUEST_NULL); + return reqs.back(); + } + + + +public: + void - reserve_send_space (unsigned int type, + reserve_send_space (unsigned type, int proc, int npoints); - + void - reserve_recv_space (unsigned int type, + reserve_recv_space (unsigned type, int proc, int npoints); - + void * - send_buffer (unsigned int type, + send_buffer (unsigned type, int proc, int npoints); - + void * - recv_buffer (unsigned int type, + recv_buffer (unsigned type, int proc, int npoints); - + void - commit_send_space (unsigned int type, + commit_send_space (unsigned type, int proc, int npoints); - + void - commit_recv_space (unsigned int type, + commit_recv_space (unsigned type, int proc, int npoints); - -private: - // lists of outstanding requests for posted send/recv communications - vector<MPI_Request> srequests; // [dist::size() * dist::c_ndatatypes()] - vector<MPI_Request> rrequests; // [dist::size() * dist::c_ndatatypes()] - - // number of posted and already completed receive communications - int num_posted_recvs; - int num_completed_recvs; - - // wait for completion of posted collective buffer sends/receives - bool AllPostedCommunicationsFinished(); }; - - #endif // COMMSTATE_HH diff --git a/Carpet/CarpetLib/src/copy_3d.cc b/Carpet/CarpetLib/src/copy_3d.cc index 36a48df40..06adb0276 100644 --- a/Carpet/CarpetLib/src/copy_3d.cc +++ b/Carpet/CarpetLib/src/copy_3d.cc @@ -7,7 +7,7 @@ #include <cctk.h> #include <cctk_Parameters.h> -#include "operator_prototypes.hh" +#include "operator_prototypes_3d.hh" #include "typeprops.hh" using namespace std; diff --git a/Carpet/CarpetLib/src/copy_4d.cc b/Carpet/CarpetLib/src/copy_4d.cc new file mode 100644 index 000000000..c5ba95371 --- /dev/null +++ b/Carpet/CarpetLib/src/copy_4d.cc @@ -0,0 +1,142 @@ +#include <algorithm> +#include <cassert> +#include <cmath> +#include <cstdlib> +#include <iostream> + +#include <cctk.h> +#include <cctk_Parameters.h> + +#include "operator_prototypes_4d.hh" +#include "typeprops.hh" + +using namespace std; + + + +namespace CarpetLib { + + + +#define SRCIND4(i,j,k,l) \ + index4 (srcioff + (i), srcjoff + (j), srckoff + (k), srcloff + (l), \ + srciext, srcjext, srckext, srclext) +#define DSTIND4(i,j,k,l) \ + index4 (dstioff + (i), dstjoff + (j), dstkoff + (k), dstloff + (l), \ + dstiext, dstjext, dstkext, dstlext) + + + + template <typename T> + void + copy_4d (T const * restrict const src, + ivect4 const & restrict srcext, + T * restrict const dst, + ivect4 const & restrict dstext, + ibbox4 const & restrict srcbbox, + ibbox4 const & restrict dstbbox, + ibbox4 const & restrict regbbox) + { + if (any (srcbbox.stride() != regbbox.stride() or + dstbbox.stride() != regbbox.stride())) + { + cout << "copy_4d.cc:" << endl + << "srcbbox=" << srcbbox << endl + << "dstbbox=" << dstbbox << endl + << "regbbox=" << regbbox << endl; + CCTK_WARN (0, "Internal error: strides disagree"); + } + + if (any (srcbbox.stride() != dstbbox.stride())) { + CCTK_WARN (0, "Internal error: strides disagree"); + } + + // This could be handled, but is likely to point to an error + // elsewhere + if (regbbox.empty()) { + CCTK_WARN (0, "Internal error: region extent is empty"); + } + + if (not regbbox.is_contained_in(srcbbox) or + not regbbox.is_contained_in(dstbbox)) + { + CCTK_WARN (0, "Internal error: region extent is not contained in array extent"); + } + + if (any (srcext != srcbbox.shape() / srcbbox.stride() or + dstext != dstbbox.shape() / dstbbox.stride())) + { + CCTK_WARN (0, "Internal error: array sizes don't agree with bounding boxes"); + } + + + + ivect4 const regext = regbbox.shape() / regbbox.stride(); + assert (all ((regbbox.lower() - srcbbox.lower()) % srcbbox.stride() == 0)); + ivect4 const srcoff = (regbbox.lower() - srcbbox.lower()) / srcbbox.stride(); + assert (all ((regbbox.lower() - dstbbox.lower()) % dstbbox.stride() == 0)); + ivect4 const dstoff = (regbbox.lower() - dstbbox.lower()) / dstbbox.stride(); + + + + ptrdiff_t const srciext = srcext[0]; + ptrdiff_t const srcjext = srcext[1]; + ptrdiff_t const srckext = srcext[2]; + ptrdiff_t const srclext = srcext[3]; + + ptrdiff_t const dstiext = dstext[0]; + ptrdiff_t const dstjext = dstext[1]; + ptrdiff_t const dstkext = dstext[2]; + ptrdiff_t const dstlext = dstext[3]; + + ptrdiff_t const regiext = regext[0]; + ptrdiff_t const regjext = regext[1]; + ptrdiff_t const regkext = regext[2]; + ptrdiff_t const reglext = regext[3]; + + ptrdiff_t const srcioff = srcoff[0]; + ptrdiff_t const srcjoff = srcoff[1]; + ptrdiff_t const srckoff = srcoff[2]; + ptrdiff_t const srcloff = srcoff[3]; + + ptrdiff_t const dstioff = dstoff[0]; + ptrdiff_t const dstjoff = dstoff[1]; + ptrdiff_t const dstkoff = dstoff[2]; + ptrdiff_t const dstloff = dstoff[3]; + + + + // Loop over region +#pragma omp parallel for + for (int l=0; l<reglext; ++l) { + for (int k=0; k<regkext; ++k) { + for (int j=0; j<regjext; ++j) { + for (int i=0; i<regiext; ++i) { + + dst [DSTIND4(i, j, k, l)] = src [SRCIND4(i, j, k, l)]; + + } + } + } + } + + } + + + +#define INSTANTIATE(T) \ + template \ + void \ + copy_4d (T const * restrict const src, \ + ivect4 const & restrict srcext, \ + T * restrict const dst, \ + ivect4 const & restrict dstext, \ + ibbox4 const & restrict srcbbox, \ + ibbox4 const & restrict dstbbox, \ + ibbox4 const & restrict regbbox); +#include "instantiate" +#undef INSTANTIATE + + + +} // namespace CarpetLib diff --git a/Carpet/CarpetLib/src/data.cc b/Carpet/CarpetLib/src/data.cc index d19df3788..da32ee4ea 100644 --- a/Carpet/CarpetLib/src/data.cc +++ b/Carpet/CarpetLib/src/data.cc @@ -25,7 +25,8 @@ #include "vect.hh" #include "data.hh" -#include "operator_prototypes.hh" +#include "operator_prototypes_3d.hh" +#include "operator_prototypes_4d.hh" using namespace std; @@ -100,6 +101,73 @@ call_operator (void #endif } +template <typename T> +static +void +call_operator (void + (* the_operator) (T const * restrict const src, + ivect4 const & restrict srcext, + T * restrict const dst, + ivect4 const & restrict dstext, + ibbox4 const & restrict srcbbox, + ibbox4 const & restrict dstbbox, + ibbox4 const & restrict regbbox), + T const * restrict const src, + ivect4 const & restrict srcext, + T * restrict const dst, + ivect4 const & restrict dstext, + ibbox4 const & restrict srcbbox, + ibbox4 const & restrict dstbbox, + ibbox4 const & restrict regbbox) +{ +#ifndef _OPENMP + (* the_operator) (src, srcext, dst, dstext, srcbbox, dstbbox, regbbox); +#else +# if ! defined (NDEBUG) && ! defined (CARPET_OPTIMISE) + ibset allregbboxes; +# endif +#pragma omp parallel + { + int const num_threads = omp_get_num_threads(); + int const thread_num = omp_get_thread_num(); + // Parallelise in z direction + // TODO: parallelise along longest extent + int const dir = 2; + int const stride = regbbox.stride()[dir]; + int const first_point = regbbox.lower()[dir]; + int const last_point = regbbox.upper()[dir] + stride; + int const num_points = last_point - first_point; + assert (num_points >= 0); + assert (num_points % stride == 0); + int const my_num_points = + (num_points / stride + num_threads - 1) / num_threads * stride; + int const my_first_point = + min (last_point, first_point + thread_num * my_num_points); + int const my_last_point = + max (my_first_point, min (last_point, my_first_point + my_num_points)); + ibbox4 const myregbbox + (regbbox.lower().replace (dir, my_first_point), + regbbox.upper().replace (dir, my_last_point - stride), + regbbox.stride()); + if (not myregbbox.empty()) { + (* the_operator) (src, srcext, dst, dstext, srcbbox, dstbbox, myregbbox); +# if ! defined (NDEBUG) && ! defined (CARPET_OPTIMISE) +#pragma omp critical + allregbboxes += myregbbox; +# endif + } + } +# if ! defined (NDEBUG) && ! defined (CARPET_OPTIMISE) + if (not (allregbboxes == ibset (regbbox))) { + allregbboxes.normalize(); + cout << "allregbboxes=" << allregbboxes << endl + << "regbbox=" << regbbox << endl; + } + assert (allregbboxes == ibset (regbbox)); +# endif +#endif +} + // Fortran wrappers @@ -200,16 +268,13 @@ prolongate_3d_weno (CCTK_REAL8 const * restrict const src, -static const CCTK_REAL eps = 1.0e-10; - // Constructors template<typename T> data<T>::data (const int varindex_, const centering cent_, const operator_type transport_operator_, const int vectorlength_, const int vectorindex_, - data* const vectorleader_, - const int tag_) - : gdata(varindex_, cent_, transport_operator_, tag_), + data* const vectorleader_) + : gdata(varindex_, cent_, transport_operator_), _memory(NULL), vectorlength(vectorlength_), vectorindex(vectorindex_), vectorleader(vectorleader_) @@ -249,11 +314,10 @@ data<T>::~data () template<typename T> data<T>* data<T>::make_typed (const int varindex_, const centering cent_, - const operator_type transport_operator_, - const int tag_) + const operator_type transport_operator_) const { - return new data(varindex_, cent_, transport_operator_, 1, 0, NULL, tag_); + return new data(varindex_, cent_, transport_operator_, 1, 0, NULL); } @@ -335,6 +399,7 @@ copy_from_innerloop (gdata const * const gsrc, assert (proc() == src->proc()); assert (dist::rank() == proc()); +#if CARPET_DIM == 3 copy_3d (static_cast <T const *> (src->storage()), src->shape(), static_cast <T *> (this->storage()), @@ -342,6 +407,17 @@ copy_from_innerloop (gdata const * const gsrc, src->extent(), this->extent(), box); +#elif CARPET_DIM == 4 + copy_4d (static_cast <T const *> (src->storage()), + src->shape(), + static_cast <T *> (this->storage()), + this->shape(), + src->extent(), + this->extent(), + box); +#else +# error "Value for CARPET_DIM not supported" +#endif } @@ -382,7 +458,8 @@ transfer_time (vector <gdata const *> const & gsrcs, { // Use this timelevel, or interpolate in time if set to -1 int timelevel0, ntimelevels; - find_source_timelevel (times, time, order_time, timelevel0, ntimelevels); + find_source_timelevel + (times, time, order_time, transport_operator, timelevel0, ntimelevels); if (ntimelevels > 1) { // Time interpolation is necessary @@ -437,7 +514,8 @@ transfer_p_r (data const * const src, copy_from_innerloop (src, box); } else if (all (src->extent().stride() > this->extent().stride())) { // Prolongate - assert (transport_operator != op_sync); + assert (transport_operator != op_sync and + transport_operator != op_restrict); transfer_p_vc_cc (src, box, order_space); } else if (all (src->extent().stride() < this->extent().stride())) { // Restrict @@ -457,6 +535,9 @@ transfer_p_vc_cc (data const * const src, ibbox const & box, int const order_space) { + transfer_prolongate (src, box, order_space); + +#if 0 if (cent == vertex_centered) { // Vertex centred @@ -501,6 +582,8 @@ transfer_p_vc_cc (data const * const src, newdstbox .contracted_for (tmpsrcbox) .expand (offsetlo, offsethi); // Allocate temporary storage + // TODO: This may not be necessary if the source is already a + // temporary data * const newsrc = new data (src->varindex, vertex_centered, src->transport_operator); newsrc->allocate (newsrcbox, src->proc()); @@ -538,6 +621,7 @@ transfer_p_vc_cc (data const * const src, } else { assert (0); } +#endif } template <> @@ -562,25 +646,139 @@ transfer_prolongate (data const * const src, static Timer total ("prolongate"); total.start (); +#if CARPET_DIM == 3 + switch (transport_operator) { case op_copy: case op_Lagrange: { static Timer timer ("prolongate_Lagrange"); timer.start (); + // enum centering { vertex_centered, cell_centered }; + switch (cent) { + case vertex_centered: + switch (order_space) { + case 1: + call_operator<T> (& prolongate_3d_o1_rf2, + static_cast <T const *> (src->storage()), + src->shape(), + static_cast <T *> (this->storage()), + this->shape(), + src->extent(), + this->extent(), + box); + break; + case 3: + call_operator<T> (& prolongate_3d_o3_rf2, + static_cast <T const *> (src->storage()), + src->shape(), + static_cast <T *> (this->storage()), + this->shape(), + src->extent(), + this->extent(), + box); + break; + case 5: + call_operator<T> (& prolongate_3d_o5_rf2, + static_cast <T const *> (src->storage()), + src->shape(), + static_cast <T *> (this->storage()), + this->shape(), + src->extent(), + this->extent(), + box); + break; + case 7: + call_operator<T> (& prolongate_3d_o7_rf2, + static_cast <T const *> (src->storage()), + src->shape(), + static_cast <T *> (this->storage()), + this->shape(), + src->extent(), + this->extent(), + box); + break; + case 9: + call_operator<T> (& prolongate_3d_o9_rf2, + static_cast <T const *> (src->storage()), + src->shape(), + static_cast <T *> (this->storage()), + this->shape(), + src->extent(), + this->extent(), + box); + break; + case 11: + call_operator<T> (& prolongate_3d_o11_rf2, + static_cast <T const *> (src->storage()), + src->shape(), + static_cast <T *> (this->storage()), + this->shape(), + src->extent(), + this->extent(), + box); + break; + default: + CCTK_WARN (CCTK_WARN_ABORT, + "There is no vertex-centred stencil for op=\"LAGRANGE\" with order_space not in {1, 3, 5, 7, 9, 11}"); + break; + } + break; + case cell_centered: + switch (order_space) { + case 0: + call_operator<T> (& prolongate_3d_cc_o0_rf2, + static_cast <T const *> (src->storage()), + src->shape(), + static_cast <T *> (this->storage()), + this->shape(), + src->extent(), + this->extent(), + box); + break; + case 1: + call_operator<T> (& prolongate_3d_cc_o1_rf2, + static_cast <T const *> (src->storage()), + src->shape(), + static_cast <T *> (this->storage()), + this->shape(), + src->extent(), + this->extent(), + box); + break; + case 2: + call_operator<T> (& prolongate_3d_cc_o2_rf2, + static_cast <T const *> (src->storage()), + src->shape(), + static_cast <T *> (this->storage()), + this->shape(), + src->extent(), + this->extent(), + box); + break; + default: + CCTK_WARN (CCTK_WARN_ABORT, + "There is no cell-centred stencil for op=\"LAGRANGE\" with order_space not in {0, 1, 2}"); + break; + } + break; + default: + assert (0); + } + timer.stop (0); + break; + } + + case op_ENO: { + static Timer timer ("prolongate_ENO"); + timer.start (); switch (order_space) { case 1: - call_operator<T> (& prolongate_3d_o1_rf2, - static_cast <T const *> (src->storage()), - src->shape(), - static_cast <T *> (this->storage()), - this->shape(), - src->extent(), - this->extent(), - box); + CCTK_WARN (CCTK_WARN_ABORT, + "There is no stencil for op=\"ENO\" with order_space=1"); break; case 3: - call_operator<T> (& prolongate_3d_o3_rf2, + call_operator<T> (& prolongate_3d_eno, static_cast <T const *> (src->storage()), src->shape(), static_cast <T *> (this->storage()), @@ -590,37 +788,10 @@ transfer_prolongate (data const * const src, box); break; case 5: - call_operator<T> (& prolongate_3d_o5_rf2, - static_cast <T const *> (src->storage()), - src->shape(), - static_cast <T *> (this->storage()), - this->shape(), - src->extent(), - this->extent(), - box); - break; - case 7: - call_operator<T> (& prolongate_3d_o7_rf2, - static_cast <T const *> (src->storage()), - src->shape(), - static_cast <T *> (this->storage()), - this->shape(), - src->extent(), - this->extent(), - box); - break; - case 9: - call_operator<T> (& prolongate_3d_o9_rf2, - static_cast <T const *> (src->storage()), - src->shape(), - static_cast <T *> (this->storage()), - this->shape(), - src->extent(), - this->extent(), - box); - break; - case 11: - call_operator<T> (& prolongate_3d_o11_rf2, + // There is only one parameter for the prolongation order, but + // Whisky may want 5th order for spacetime and 3rd order for + // hydro, so we cheat here. + call_operator<T> (& prolongate_3d_eno, static_cast <T const *> (src->storage()), src->shape(), static_cast <T *> (this->storage()), @@ -631,22 +802,26 @@ transfer_prolongate (data const * const src, break; default: CCTK_WARN (CCTK_WARN_ABORT, - "There is no stencil for op=\"LAGRANGE\" with order_space not in {1, 3, 5, 7, 9, 11}"); + "There is no stencil for op=\"ENO\" with order_space!=3"); break; } timer.stop (0); break; } - case op_ENO: { - static Timer timer ("prolongate_ENO"); + case op_WENO: { + static Timer timer ("prolongate_WENO"); timer.start (); switch (order_space) { case 1: CCTK_WARN (CCTK_WARN_ABORT, - "There is no stencil for op=\"ENO\" with order_space=1"); + "There is no stencil for op=\"WENO\" with order_space=1"); break; case 3: + CCTK_WARN (CCTK_WARN_ABORT, + "There is no stencil for op=\"WENO\" with order_space=3"); + break; + case 5: call_operator<T> (& prolongate_3d_eno, static_cast <T const *> (src->storage()), src->shape(), @@ -656,40 +831,29 @@ transfer_prolongate (data const * const src, this->extent(), box); break; - case 5: - // there is only a parameter for the prolongation order, but Whisky may want 5th order for spacetime and 3rd order for hydro; so this is a trick. - call_operator<T> (& prolongate_3d_eno, - static_cast <T const *> (src->storage()), - src->shape(), - static_cast <T *> (this->storage()), - this->shape(), - src->extent(), - this->extent(), - box); - break; default: CCTK_WARN (CCTK_WARN_ABORT, - "There is no stencil for op=\"ENO\" with order_space!=3"); + "There is no stencil for op=\"WENO\" with order_space!=5"); break; } timer.stop (0); break; } - case op_WENO: { - static Timer timer ("prolongate_WENO"); + case op_Lagrange_monotone: { + static Timer timer ("prolongate_Lagrange_monotone"); timer.start (); switch (order_space) { case 1: CCTK_WARN (CCTK_WARN_ABORT, - "There is no stencil for op=\"WENO\" with order_space=1"); + "There is no stencil for op=\"Lagrange_monotone\" with order_space=1"); break; case 3: CCTK_WARN (CCTK_WARN_ABORT, - "There is no stencil for op=\"WENO\" with order_space=3"); + "There is no stencil for op=\"Lagrange_monotone\" with order_space=3"); break; case 5: - call_operator<T> (& prolongate_3d_eno, + call_operator<T> (& prolongate_3d_o5_monotone_rf2, static_cast <T const *> (src->storage()), src->shape(), static_cast <T *> (this->storage()), @@ -700,7 +864,7 @@ transfer_prolongate (data const * const src, break; default: CCTK_WARN (CCTK_WARN_ABORT, - "There is no stencil for op=\"WENO\" with order_space!=5"); + "There is no stencil for op=\"Lagrange_monotone\" with order_space!=5"); break; } timer.stop (0); @@ -711,6 +875,48 @@ transfer_prolongate (data const * const src, assert (0); } // switch (transport_operator) +#elif CARPET_DIM == 4 + + switch (transport_operator) { + + case op_copy: + case op_Lagrange: { + static Timer timer ("prolongate_Lagrange"); + timer.start (); + // enum centering { vertex_centered, cell_centered }; + switch (cent) { + case vertex_centered: + switch (order_space) { + case 1: + call_operator<T> (& prolongate_4d_o1_rf2, + static_cast <T const *> (src->storage()), + src->shape(), + static_cast <T *> (this->storage()), + this->shape(), + src->extent(), + this->extent(), + box); + break; + default: + CCTK_WARN (CCTK_WARN_ABORT, + "There is no vertex-centred stencil for op=\"LAGRANGE\" with order_space not in {1}"); + break; + } + break; + default: + assert (0); + } + timer.stop (0); + break; + } + default: + assert (0); + } // switch (transport_operator) + +#else +# error "Value for CARPET_DIM not supported" +#endif + total.stop (0); } @@ -736,12 +942,15 @@ transfer_restrict (data const * const src, static Timer total ("restrict"); total.start (); +#if CARPET_DIM == 3 + switch (transport_operator) { case op_copy: case op_Lagrange: case op_ENO: case op_WENO: + case op_Lagrange_monotone: // enum centering { vertex_centered, cell_centered }; switch (cent) { case vertex_centered: @@ -771,6 +980,36 @@ transfer_restrict (data const * const src, assert (0); } +#elif CARPET_DIM == 4 + + switch (transport_operator) { + + case op_copy: + case op_Lagrange: + // enum centering { vertex_centered, cell_centered }; + switch (cent) { + case vertex_centered: + restrict_4d_rf2 (static_cast <T const *> (src->storage()), + src->shape(), + static_cast <T *> (this->storage()), + this->shape(), + src->extent(), + this->extent(), + box); + break; + default: + assert (0); + } + break; + + default: + assert (0); + } + +#else +# error "Value for CARPET_DIM not supported" +#endif + total.stop (0); } @@ -797,7 +1036,9 @@ time_interpolate (vector <data *> const & srcs, { static Timer total ("time_interpolate"); total.start (); - + +#if CARPET_DIM == 3 + switch (transport_operator) { case op_copy: @@ -886,8 +1127,10 @@ time_interpolate (vector <data *> const & srcs, } case op_ENO: - case op_WENO: { - // ENO and WENO timer interpolation is the same for order_time <= 2 + case op_WENO: + case op_Lagrange_monotone: { + // ENO, WENO, and Lagrange_monotone time interpolation is the same + // for order_time <= 2 static Timer timer ("time_interpolate_ENO"); timer.start (); switch (order_time) { @@ -935,6 +1178,14 @@ time_interpolate (vector <data *> const & srcs, assert (0); } // switch (transport_operator) +#elif CARPET_DIM == 4 + + assert (0); + +#else +# error "Value for CARPET_DIM not supported" +#endif + total.stop (0); } @@ -982,22 +1233,9 @@ output (ostream & os) return os; } -template<typename T> -ostream & -operator << (ostream & os, data<T> const & d) -{ - char const * space = ""; - for (int i = 0; i < d.vectorlength; i++) { - os << space << d[i]; - space = " "; - } - return os; -} - #define INSTANTIATE(T) \ -template class data<T>; \ -template ostream & operator << <T> (ostream & os, data<T> const & d); +template class data<T>; #include "instantiate" #undef INSTANTIATE diff --git a/Carpet/CarpetLib/src/data.hh b/Carpet/CarpetLib/src/data.hh index 6b7a774e1..d321e46c1 100644 --- a/Carpet/CarpetLib/src/data.hh +++ b/Carpet/CarpetLib/src/data.hh @@ -20,9 +20,6 @@ using namespace std; template<typename T> class data; -template<typename T> -ostream & operator << ( ostream & os, const data<T> & d ); - // A distributed multi-dimensional array template<typename T> class data: public gdata @@ -35,7 +32,7 @@ class data: public gdata int vectorlength; // number of vector elements int vectorindex; // index of this vector element data* vectorleader; // if index!=0: first vector element - + private: // Forbid copying and passing by value data (data const &); @@ -48,23 +45,21 @@ public: const centering cent = error_centered, const operator_type transport_operator = op_error, const int vectorlength = 1, const int vectorindex = 0, - data* const vectorleader = NULL, - const int tag = -1); + data* const vectorleader = NULL); data (const int varindex, const centering cent, const operator_type transport_operator, const int vectorlength, const int vectorindex, data* const vectorleader, const ibbox& extent, const int proc); - + // Destructors virtual ~data (); - + // Pseudo constructors virtual data* make_typed (const int varindex, const centering cent, - const operator_type transport_operator, - const int tag) const; - + const operator_type transport_operator) const; + // Storage management virtual void allocate (const ibbox& extent, const int proc, void* const memptr = NULL, size_t const memsize = 0); @@ -156,19 +151,10 @@ private: public: // Memory usage - size_t memory () const; + virtual size_t memory () const CCTK_ATTRIBUTE_PURE; // Output - ostream & output (ostream& os) const; - - friend ostream & operator<< <T> (ostream & os, data<T> const & d); + virtual ostream & output (ostream& os) const; }; - -// Memory usage -template<typename T> -inline size_t memoryof (data<T> const & d) -{ - return d.memory(); -} #endif // DATA_HH diff --git a/Carpet/CarpetLib/src/defs.cc b/Carpet/CarpetLib/src/defs.cc index 357061ee2..ab3b021d8 100644 --- a/Carpet/CarpetLib/src/defs.cc +++ b/Carpet/CarpetLib/src/defs.cc @@ -2,11 +2,13 @@ #include <cctype> #include <iostream> #include <list> +#include <map> #include <set> #include <stack> #include <vector> #include "cctk.h" +#include "cctk_Parameters.h" #include "bbox.hh" #include "defs.hh" @@ -19,6 +21,8 @@ using namespace std; template <typename T> +inline T ipow_helper (T x, unsigned int y) CCTK_ATTRIBUTE_CONST; +template <typename T> inline T ipow_helper (T x, unsigned int y) { T z = y&1 ? x : 1; @@ -31,7 +35,7 @@ inline T ipow_helper (T x, unsigned int y) } template<class T> -T ipow (T x, int y) +T ipow (T const x, int const y) { if (y < 0) return T(1) / ipow_helper(x, -y); @@ -41,8 +45,23 @@ T ipow (T x, int y) +// Access to CarpetLib parameters +CCTK_INT get_poison_value() +{ + DECLARE_CCTK_PARAMETERS; + return poison_value; +} + +CCTK_INT get_deadbeef() +{ + DECLARE_CCTK_PARAMETERS; + return deadbeef; +} + + + void skipws (istream& is) { - while (is.good() && isspace(is.peek())) { + while (is.good() and isspace(is.peek())) { is.get(); } } @@ -138,6 +157,60 @@ memoryof (vector<T> const & c) +// List input +template<class T> +istream& input (istream& is, list<T>& l) { + l.clear(); + try { + skipws (is); + consume (is, '['); + skipws (is); + while (is.good() and is.peek() != ']') { + T elem; + is >> elem; + l.push_back (elem); + skipws (is); + if (is.peek() != ',') break; + is.get(); + skipws (is); + } + skipws (is); + consume (is, ']'); + } catch (input_error &err) { + cout << "Input error while reading a list<>" << endl + << " The following elements have been read so far: " << l << endl; + throw err; + } + return is; +} + +// Set input +template<class T> +istream& input (istream& is, set<T>& s) { + s.clear(); + try { + skipws (is); + consume (is, '{'); + skipws (is); + while (is.good() and is.peek() != '}') { + T elem; + is >> elem; + s.insert (elem); + skipws (is); + if (is.peek() != ',') break; + is.get(); + skipws (is); + } + skipws (is); + consume (is, ']'); + } catch (input_error &err) { + cout << "Input error while reading a set<>" << endl + << " The following elements have been read so far: " << s << endl; + throw err; + } + return is; +} + // Vector input template<class T> istream& input (istream& is, vector<T>& v) { @@ -146,7 +219,7 @@ istream& input (istream& is, vector<T>& v) { skipws (is); consume (is, '['); skipws (is); - while (is.good() && is.peek() != ']') { + while (is.good() and is.peek() != ']') { T elem; is >> elem; v.push_back (elem); @@ -179,6 +252,25 @@ ostream& output (ostream& os, const list<T>& l) { return os; } +// Map output +template<class S, class T> +ostream& output (ostream& os, const map<S,T>& m) { + os << "{"; + for (typename map<S,T>::const_iterator ti=m.begin(); ti!=m.end(); ++ti) { + if (ti!=m.begin()) os << ","; + os << ti->first << ":" << ti->second; + } + os << "}"; + return os; +} + +// Pair output +template<class S, class T> +ostream& output (ostream& os, const pair<S,T>& p) { + os << "(" << p.first << "," << p.second << ")"; + return os; +} + // Set output template<class T> ostream& output (ostream& os, const set<T>& s) { @@ -196,7 +288,7 @@ template<class T> ostream& output (ostream& os, const stack<T>& s) { stack<T> s2 (s); list<T> l; - while (! s2.empty()) { + while (not s2.empty()) { l.insert (l.begin(), s2.top()); s2.pop(); } @@ -231,28 +323,32 @@ ostream& output (ostream& os, const vector<T>& v) { #include "th.hh" #include "vect.hh" +#include "CarpetTimers.hh" + template int ipow (int x, int y); template CCTK_REAL ipow (CCTK_REAL x, int y); -template vect<int,3> ipow (vect<int,3> x, int y); +template vect<int,dim> ipow (vect<int,dim> x, int y); -template size_t memoryof (list<bbox<int,3> > const & l); -template size_t memoryof (list<vect<int,3> > const & l); +template size_t memoryof (list<bbox<int,dim> > const & l); +template size_t memoryof (list<vect<int,dim> > const & l); template size_t memoryof (list<dh*> const & l); +template size_t memoryof (list<gh*> const & l); +template size_t memoryof (list<gdata*> const & l); template size_t memoryof (list<ggf*> const & l); template size_t memoryof (list<th*> const & l); template size_t memoryof (stack<void*> const & s); template size_t memoryof (vector<bool> const & v); template size_t memoryof (vector<int> const & v); template size_t memoryof (vector<CCTK_REAL> const & v); -template size_t memoryof (vector<bbox<int,3> > const & v); -template size_t memoryof (vector<vect<int,3> > const & v); -template size_t memoryof (vector<fulltree <int,3,pseudoregion_t> *> const & f); +template size_t memoryof (vector<bbox<int,dim> > const & v); +template size_t memoryof (vector<vect<int,dim> > const & v); +template size_t memoryof (vector<fulltree <int,dim,pseudoregion_t> *> const & f); template size_t memoryof (vector<pseudoregion_t> const & v); template size_t memoryof (vector<region_t> const & v); template size_t memoryof (vector<sendrecv_pseudoregion_t> const & v); template size_t memoryof (vector<vector<int> > const & v); template size_t memoryof (vector<vector<CCTK_REAL> > const & v); -template size_t memoryof (vector<vector<bbox<int,3> > > const & v); +template size_t memoryof (vector<vector<bbox<int,dim> > > const & v); template size_t memoryof (vector<vector<dh::dboxes> > const & v); template size_t memoryof (vector<vector<dh::fast_dboxes> > const & v); template size_t memoryof (vector<vector<region_t> > const & v); @@ -262,49 +358,54 @@ template size_t memoryof (vector<vector<vector<region_t> > > const & v); template size_t memoryof (vector<vector<vector<gdata*> > > const & v); template size_t memoryof (vector<vector<vector<vector<gdata*> > > > const & v); +template istream& input (istream& os, list<bbox<int,dim> >& l); +template istream& input (istream& os, set<bbox<int,dim> >& s); template istream& input (istream& os, vector<int>& v); template istream& input (istream& os, vector<CCTK_REAL>& v); -template istream& input (istream& os, vector<bbox<int,3> >& v); -template istream& input (istream& os, vector<bbox<CCTK_REAL,3> >& v); -template istream& input (istream& os, vector<vect<int,3> >& v); -template istream& input (istream& os, vector<vect<vect<bool,2>,3> >& v); +template istream& input (istream& os, vector<bbox<int,dim> >& v); +template istream& input (istream& os, vector<bbox<CCTK_REAL,dim> >& v); +template istream& input (istream& os, vector<vect<int,dim> >& v); +template istream& input (istream& os, vector<vect<vect<bool,2>,dim> >& v); template istream& input (istream& os, vector<region_t>& v); +template istream& input (istream& os, vector<pseudoregion_t>& v); +template istream& input (istream& os, vector<sendrecv_pseudoregion_t>& v); template istream& input (istream& os, vector<vector<CCTK_REAL> >& v); -template istream& input (istream& os, vector<vector<bbox<int,3> > >& v); -template istream& input (istream& os, vector<vector<bbox<CCTK_REAL,3> > >& v); -template istream& input (istream& os, vector<vector<vect<vect<bool,2>,3> > >& v); +template istream& input (istream& os, vector<vector<bbox<int,dim> > >& v); +template istream& input (istream& os, vector<vector<bbox<CCTK_REAL,dim> > >& v); +template istream& input (istream& os, vector<vector<vect<vect<bool,2>,dim> > >& v); template istream& input (istream& os, vector<vector<region_t> >& v); template istream& input (istream& os, vector<vector<vector<CCTK_REAL> > >& v); template istream& input (istream& os, vector<vector<vector<region_t> > >& v); -template ostream& output (ostream& os, const list<bbox<int,3> >& l); +template ostream& output (ostream& os, const list<bbox<int,dim> >& l); template ostream& output (ostream& os, const list<region_t>& l); -template ostream& output (ostream& os, const set<bbox<int,3> >& s); -template ostream& output (ostream& os, const set<bboxset<int,3> >& s); -template ostream& output (ostream& os, const stack<bbox<int,3> >& s); +template ostream& output (ostream& os, const map<string,Carpet::Timer*>& m); +template ostream& output (ostream& os, const set<bbox<int,dim> >& s); +template ostream& output (ostream& os, const set<bboxset<int,dim> >& s); +template ostream& output (ostream& os, const stack<bbox<int,dim> >& s); template ostream& output (ostream& os, const vector<bool>& v); template ostream& output (ostream& os, const vector<int>& v); template ostream& output (ostream& os, const vector<CCTK_REAL>& v); -template ostream& output (ostream& os, const vector<bbox<int,3> >& v); -template ostream& output (ostream& os, const vector<bbox<CCTK_REAL,3> >& v); -template ostream& output (ostream& os, const vector<vect<int,3> >& v); -template ostream& output (ostream& os, const vector<vect<vect<bool,2>,3> >& v); +template ostream& output (ostream& os, const vector<bbox<int,dim> >& v); +template ostream& output (ostream& os, const vector<bbox<CCTK_REAL,dim> >& v); +template ostream& output (ostream& os, const vector<vect<int,dim> >& v); +template ostream& output (ostream& os, const vector<vect<vect<bool,2>,dim> >& v); template ostream& output (ostream& os, const vector<dh::dboxes> & v); template ostream& output (ostream& os, const vector<dh::fast_dboxes> & v); template ostream& output (ostream& os, const vector<region_t>& v); template ostream& output (ostream& os, const vector<pseudoregion_t>& v); template ostream& output (ostream& os, const vector<sendrecv_pseudoregion_t>& v); -template ostream& output (ostream& os, const vector<list<bbox<int,3> > >& v); +template ostream& output (ostream& os, const vector<list<bbox<int,dim> > >& v); template ostream& output (ostream& os, const vector<vector<int> >& v); template ostream& output (ostream& os, const vector<vector<CCTK_REAL> >& v); -template ostream& output (ostream& os, const vector<vector<bbox<int,3> > >& v); -template ostream& output (ostream& os, const vector<vector<bbox<CCTK_REAL,3> > >& v); -template ostream& output (ostream& os, const vector<vector<vect<vect<bool,2>,3> > >& v); +template ostream& output (ostream& os, const vector<vector<bbox<int,dim> > >& v); +template ostream& output (ostream& os, const vector<vector<bbox<CCTK_REAL,dim> > >& v); +template ostream& output (ostream& os, const vector<vector<vect<vect<bool,2>,dim> > >& v); template ostream& output (ostream& os, const vector<vector<dh::dboxes> > & b); template ostream& output (ostream& os, const vector<vector<dh::fast_dboxes> > & b); template ostream& output (ostream& os, const vector<vector<region_t> >& v); template ostream& output (ostream& os, const vector<vector<vector<CCTK_REAL> > >& v); -template ostream& output (ostream& os, const vector<vector<vector<bbox<int,3> > > >& v); +template ostream& output (ostream& os, const vector<vector<vector<bbox<int,dim> > > >& v); template ostream& output (ostream& os, const vector<vector<vector<dh::dboxes> > > & b); template ostream& output (ostream& os, const vector<vector<vector<dh::fast_dboxes> > > & b); template ostream& output (ostream& os, const vector<vector<vector<region_t> > >& v); diff --git a/Carpet/CarpetLib/src/defs.hh b/Carpet/CarpetLib/src/defs.hh index a44d20ef0..3a1188d21 100644 --- a/Carpet/CarpetLib/src/defs.hh +++ b/Carpet/CarpetLib/src/defs.hh @@ -11,25 +11,24 @@ #include <cstdlib> #include <iostream> #include <list> +#include <map> #include <set> #include <stack> #include <vector> #include "cctk.h" +#include "typeprops.hh" -using namespace std; - - -// A compile time pseudo assert statement -#define static_assert(_x, _msg) do { typedef int ai[(_x) ? 1 : -1]; } while(0) +using namespace std; -// Check a return value -#define check(_expr) do { bool const _val = (_expr); assert(_val); } while(0) +// Stringify +#define STRINGIFY1(x) #x +#define STRINGIFY(x) STRINGIFY1(x) @@ -40,14 +39,11 @@ using namespace std; -// Use this macro AT instead of vector's operator[] or at(). -// Depending on the macro NDEBUG, this macro AT either checks for -// valid indices or not. -#ifndef CARPET_OPTIMISE -# define AT(index) at(index) -#else -# define AT(index) operator[](index) +// Number of dimensions +#ifndef CARPET_DIM +# define CARPET_DIM 3 #endif +const int dim = CARPET_DIM; @@ -55,9 +51,25 @@ using namespace std; char const * const eol = "\n"; + +// A compile time pseudo assert statement +#define static_assert(_x, _msg) do { typedef int ai[(_x) ? 1 : -1]; } while(0) -// Number of dimensions -const int dim = 3; + + +// Check a return value +#define check(_expr) do { bool const _val = (_expr); assert(_val); } while(0) + + + +// Use this macro AT instead of vector's operator[] or at(). +// Depending on the macro CARPET_OPTIMISE, this macro AT either checks +// for valid indices or not. +#if ! defined(CARPET_OPTIMISE) +# define AT(index) at(index) +#else +# define AT(index) operator[](index) +#endif @@ -100,11 +112,19 @@ enum centering { error_centered, vertex_centered, cell_centered }; // Useful helper template<class T> +inline T square (const T& x) CCTK_ATTRIBUTE_CONST; +template<class T> inline T square (const T& x) { return x*x; } // Another useful helper template<class T> -T ipow (T x, int y); +T ipow (T x, int y) CCTK_ATTRIBUTE_CONST; + + + +// Access to CarpetLib parameters +CCTK_INT get_poison_value() CCTK_ATTRIBUTE_CONST; +CCTK_INT get_deadbeef() CCTK_ATTRIBUTE_CONST; @@ -120,52 +140,62 @@ void consume (istream& is, char const * c); // Names for types #ifdef HAVE_CCTK_INT1 -inline const char * typestring (const CCTK_INT1& dummy) +inline const char * typestring (const CCTK_INT1&) CCTK_ATTRIBUTE_CONST; +inline const char * typestring (const CCTK_INT1&) { return "CCTK_INT1"; } #endif #ifdef HAVE_CCTK_INT2 -inline const char * typestring (const CCTK_INT2& dummy) +inline const char * typestring (const CCTK_INT2&) CCTK_ATTRIBUTE_CONST; +inline const char * typestring (const CCTK_INT2&) { return "CCTK_INT2"; } #endif #ifdef HAVE_CCTK_INT4 -inline const char * typestring (const CCTK_INT4& dummy) +inline const char * typestring (const CCTK_INT4&) CCTK_ATTRIBUTE_CONST; +inline const char * typestring (const CCTK_INT4&) { return "CCTK_INT4"; } #endif #ifdef HAVE_CCTK_INT8 -inline const char * typestring (const CCTK_INT8& dummy) +inline const char * typestring (const CCTK_INT8&) CCTK_ATTRIBUTE_CONST; +inline const char * typestring (const CCTK_INT8&) { return "CCTK_INT8"; } #endif #ifdef HAVE_CCTK_REAL4 -inline const char * typestring (const CCTK_REAL4& dummy) +inline const char * typestring (const CCTK_REAL4&) CCTK_ATTRIBUTE_CONST; +inline const char * typestring (const CCTK_REAL4&) { return "CCTK_REAL4"; } #endif #ifdef HAVE_CCTK_REAL8 -inline const char * typestring (const CCTK_REAL8& dummy) +inline const char * typestring (const CCTK_REAL8&) CCTK_ATTRIBUTE_CONST; +inline const char * typestring (const CCTK_REAL8&) { return "CCTK_REAL8"; } #endif #ifdef HAVE_CCTK_REAL16 -inline const char * typestring (const CCTK_REAL16& dummy) +inline const char * typestring (const CCTK_REAL16&) CCTK_ATTRIBUTE_CONST; +inline const char * typestring (const CCTK_REAL16&) { return "CCTK_REAL16"; } #endif #ifdef HAVE_CCTK_REAL4 -inline const char * typestring (const CCTK_COMPLEX8& dummy) +inline const char * typestring (const CCTK_COMPLEX8&) CCTK_ATTRIBUTE_CONST; +inline const char * typestring (const CCTK_COMPLEX8&) { return "CCTK_COMPLEX8"; } #endif #ifdef HAVE_CCTK_REAL8 -inline const char * typestring (const CCTK_COMPLEX16& dummy) +inline const char * typestring (const CCTK_COMPLEX16&) CCTK_ATTRIBUTE_CONST; +inline const char * typestring (const CCTK_COMPLEX16&) { return "CCTK_COMPLEX16"; } #endif #ifdef HAVE_CCTK_REAL16 -inline const char * typestring (const CCTK_COMPLEX32& dummy) +inline const char * typestring (const CCTK_COMPLEX32&) CCTK_ATTRIBUTE_CONST; +inline const char * typestring (const CCTK_COMPLEX32&) { return "CCTK_COMPLEX32"; } #endif @@ -174,78 +204,105 @@ inline const char * typestring (const CCTK_COMPLEX32& dummy) namespace CarpetLib { namespace good { - // Explicitly overload abs for all types in the same namespace, to - // circumvent confusion among some compilers + // Explicitly overload some functions for all types in the same + // namespace CarpetLib::good, to circumvent confusion among some + // compilers - // CCTK_BYTE is unsigned - inline CCTK_BYTE abs (CCTK_BYTE const & x) { return x; } + // + // abs + // -#if 0 - // This does not work on AIX, which does not have long long abs - // (long long) -# ifdef HAVE_CCTK_INT1 - inline CCTK_INT1 abs (CCTK_INT1 const & x) { return std::abs (x); } -# endif -# ifdef HAVE_CCTK_INT2 - inline CCTK_INT2 abs (CCTK_INT2 const & x) { return std::abs (x); } -# endif -# ifdef HAVE_CCTK_INT4 - inline CCTK_INT4 abs (CCTK_INT4 const & x) { return std::abs (x); } -# endif -# ifdef HAVE_CCTK_INT8 - inline CCTK_INT8 abs (CCTK_INT8 const & x) { return std::abs (x); } -# endif -#endif + template <typename T> + inline typename typeprops<T>::real abs (T const & x) CCTK_ATTRIBUTE_CONST; + template <typename T> + inline typename typeprops<T>::real abs (T const & x) + { return std::abs (x); } -#if 0 - // This does not work on Linux with Intel compilers, which do not - // always have long long llabs (long long) - inline signed char abs (signed char const & x) { return ::abs (x); } - inline unsigned char abs (unsigned char const & x) { return ::abs (x); } - inline short abs (short const & x) { return ::abs (x); } - inline int abs (int const & x) { return ::abs (x); } - inline long abs (long const & x) { return ::labs (x); } -# ifdef SIZEOF_LONG_LONG - inline long long abs (long long const & x) { return ::llabs (x); } -# endif -#endif +// // This does not work on Linux with Intel compilers, which do not +// // always have long long llabs (long long) +// template<> inline signed char abs<signed char> (signed char const & x) CCTK_ATTRIBUTE_CONST { return ::abs (x); } +// template<> inline unsigned char abs<unsigned char> (unsigned char const & x) CCTK_ATTRIBUTE_CONST { return ::abs (x); } +// template<> inline short abs<short> (short const & x) { return ::abs (x); } +// template<> inline int abs<int> (int const & x) CCTK_ATTRIBUTE_CONST { return ::abs (x); } +// template<> inline long abs<long> (long const & x) CCTK_ATTRIBUTE_CONST { return ::labs (x); } +// #ifdef SIZEOF_LONG_LONG +// inline long long abs<long long> (long long const & x) CCTK_ATTRIBUTE_CONST { return ::llabs (x); } +// #endif -#if 1 -# ifdef HAVE_CCTK_INT1 - inline CCTK_INT1 abs (CCTK_INT1 const & x) { return x < 0 ? - x : x; } -# endif -# ifdef HAVE_CCTK_INT2 - inline CCTK_INT2 abs (CCTK_INT2 const & x) { return x < 0 ? - x : x; } -# endif -# ifdef HAVE_CCTK_INT4 - inline CCTK_INT4 abs (CCTK_INT4 const & x) { return x < 0 ? - x : x; } -# endif -# ifdef HAVE_CCTK_INT8 - inline CCTK_INT8 abs (CCTK_INT8 const & x) { return x < 0 ? - x : x; } -# endif +// // This template does not work on AIX, which does not have long +// // long abs (long long) +// #ifdef HAVE_CCTK_INT1 +// template<> inline CCTK_INT1 abs<CCTK_INT1> (CCTK_INT1 const & x) CCTK_ATTRIBUTE_CONST { return x < 0 ? - x : x; } +// #endif +// #ifdef HAVE_CCTK_INT2 +// template<> inline CCTK_INT2 abs<CCTK_INT2> (CCTK_INT2 const & x) CCTK_ATTRIBUTE_CONST { return x < 0 ? - x : x; } +// #endif +// #ifdef HAVE_CCTK_INT4 +// template<> inline CCTK_INT4 abs<CCTK_INT4> (CCTK_INT4 const & x) CCTK_ATTRIBUTE_CONST { return x < 0 ? - x : x; } +// #endif +// #ifdef HAVE_CCTK_INT8 +// template<> inline CCTK_INT8 abs<CCTK_INT8> (CCTK_INT8 const & x) CCTK_ATTRIBUTE_CONST { return x < 0 ? - x : x; } +// #endif + +#ifdef HAVE_CCTK_COMPLEX8 + template<> inline CCTK_REAL4 abs<CCTK_COMPLEX8> (CCTK_COMPLEX8 const & x) CCTK_ATTRIBUTE_CONST; + template<> inline CCTK_REAL4 abs<CCTK_COMPLEX8> (CCTK_COMPLEX8 const & x) + { return CCTK_Cmplx8Abs (x); } +#endif +#ifdef HAVE_CCTK_COMPLEX16 + template<> inline CCTK_REAL8 abs<CCTK_COMPLEX16> (CCTK_COMPLEX16 const & x) CCTK_ATTRIBUTE_CONST; + template<> inline CCTK_REAL8 abs<CCTK_COMPLEX16> (CCTK_COMPLEX16 const & x) + { return CCTK_Cmplx16Abs (x); } +#endif +#ifdef HAVE_CCTK_COMPLEX32 + template<> inline CCTK_REAL16 abs<CCTK_COMPLEX32> (CCTK_COMPLEX32 const & x) CCTK_ATTRIBUTE_CONST; + template<> inline CCTK_REAL16 abs<CCTK_COMPLEX32> (CCTK_COMPLEX32 const & x) + { return CCTK_Cmplx32Abs (x); } #endif + // + // isnan + // + +#undef isnan + + // Default implementation, only good for integers + template <typename T> + inline int isnan (T const & x) CCTK_ATTRIBUTE_CONST; + template <typename T> + inline int isnan (T const & x) + { return 0; } + #ifdef HAVE_CCTK_REAL4 - inline CCTK_REAL4 abs (CCTK_REAL4 const & x) { return std::abs (x); } + template<> inline int isnan (CCTK_REAL4 const & x) CCTK_ATTRIBUTE_CONST; + template<> inline int isnan (CCTK_REAL4 const & x) + { return ::isnan (x); } #endif #ifdef HAVE_CCTK_REAL8 - inline CCTK_REAL8 abs (CCTK_REAL8 const & x) { return std::abs (x); } + template<> inline int isnan (CCTK_REAL8 const & x) CCTK_ATTRIBUTE_CONST; + template<> inline int isnan (CCTK_REAL8 const & x) + { return ::isnan (x); } #endif #ifdef HAVE_CCTK_REAL16 - inline CCTK_REAL16 abs (CCTK_REAL16 const & x) { return std::abs (x); } + template<> inline int isnan (CCTK_REAL16 const & x) CCTK_ATTRIBUTE_CONST; + template<> inline int isnan (CCTK_REAL16 const & x) + { return ::isnan (x); } #endif #ifdef HAVE_CCTK_COMPLEX8 - inline CCTK_REAL4 abs (CCTK_COMPLEX8 const & x) - { return CCTK_Cmplx8Abs (x); } + template<> inline int isnan (CCTK_COMPLEX8 const & x) CCTK_ATTRIBUTE_CONST; + template<> inline int isnan (CCTK_COMPLEX8 const & x) + { return ::isnan (CCTK_Cmplx8Real (x)) or ::isnan (CCTK_Cmplx8Imag (x)); } #endif #ifdef HAVE_CCTK_COMPLEX16 - inline CCTK_REAL8 abs (CCTK_COMPLEX16 const & x) - { return CCTK_Cmplx16Abs (x); } + template<> inline int isnan (CCTK_COMPLEX16 const & x) CCTK_ATTRIBUTE_CONST; + template<> inline int isnan (CCTK_COMPLEX16 const & x) + { return ::isnan (CCTK_Cmplx16Real (x)) or ::isnan (CCTK_Cmplx16Imag (x)); } #endif #ifdef HAVE_CCTK_COMPLEX32 - inline CCTK_REAL16 abs (CCTK_COMPLEX32 const & x) - { return CCTK_Cmplx32Abs (x); } + template<> inline int isnan (CCTK_COMPLEX32 const & x) CCTK_ATTRIBUTE_CONST; + template<> inline int isnan (CCTK_COMPLEX32 const & x) + { return ::isnan (CCTK_Cmplx32Real (x)) or std::isnan (CCTK_Cmplx32Imag (x)); } #endif } // namespace good @@ -254,33 +311,69 @@ namespace CarpetLib { // Container memory usage -inline size_t memoryof (char e) { return sizeof e; } -inline size_t memoryof (short e) { return sizeof e; } -inline size_t memoryof (int e) { return sizeof e; } -inline size_t memoryof (long e) { return sizeof e; } -inline size_t memoryof (long long e) { return sizeof e; } -inline size_t memoryof (unsigned char e) { return sizeof e; } -inline size_t memoryof (unsigned short e) { return sizeof e; } -inline size_t memoryof (unsigned int e) { return sizeof e; } -inline size_t memoryof (unsigned long e) { return sizeof e; } -inline size_t memoryof (unsigned long long e) { return sizeof e; } -inline size_t memoryof (float e) { return sizeof e; } -inline size_t memoryof (double e) { return sizeof e; } -inline size_t memoryof (long double e) { return sizeof e; } -inline size_t memoryof (void * e) { return sizeof e; } -template<class T> inline size_t memoryof (T * e) { return sizeof e; } -template<class T> inline size_t memoryof (T const * e) { return sizeof e; } -template<class T> size_t memoryof (list<T> const & c); -template<class T> size_t memoryof (set<T> const & c); -template<class T> size_t memoryof (stack<T> const & c); -template<class T> size_t memoryof (vector<T> const & c); +inline size_t memoryof (char const e) CCTK_ATTRIBUTE_CONST; +inline size_t memoryof (short const e) CCTK_ATTRIBUTE_CONST; +inline size_t memoryof (int const e) CCTK_ATTRIBUTE_CONST; +inline size_t memoryof (long const e) CCTK_ATTRIBUTE_CONST; +inline size_t memoryof (long long const e) CCTK_ATTRIBUTE_CONST; +inline size_t memoryof (unsigned char const e) CCTK_ATTRIBUTE_CONST; +inline size_t memoryof (unsigned short const e) CCTK_ATTRIBUTE_CONST; +inline size_t memoryof (unsigned int const e) CCTK_ATTRIBUTE_CONST; +inline size_t memoryof (unsigned long const e) CCTK_ATTRIBUTE_CONST; +inline size_t memoryof (unsigned long long const e) CCTK_ATTRIBUTE_CONST; +inline size_t memoryof (float const e) CCTK_ATTRIBUTE_CONST; +inline size_t memoryof (double const e) CCTK_ATTRIBUTE_CONST; +inline size_t memoryof (long double const e) CCTK_ATTRIBUTE_CONST; +inline size_t memoryof (void * const e) CCTK_ATTRIBUTE_CONST; +inline size_t memoryof (void const * const e) CCTK_ATTRIBUTE_CONST; +template<class T> inline size_t memoryof (T * const e) CCTK_ATTRIBUTE_CONST; +template<class T> inline size_t memoryof (T const * const e) CCTK_ATTRIBUTE_CONST; +template<class T> inline size_t memoryof (typename list<T>::iterator const & i) CCTK_ATTRIBUTE_CONST; +template<class T> inline size_t memoryof (typename list<T>::const_iterator const & i) CCTK_ATTRIBUTE_CONST; + +inline size_t memoryof (char const e) { return sizeof e; } +inline size_t memoryof (short const e) { return sizeof e; } +inline size_t memoryof (int const e) { return sizeof e; } +inline size_t memoryof (long const e) { return sizeof e; } +inline size_t memoryof (long long const e) { return sizeof e; } +inline size_t memoryof (unsigned char const e) { return sizeof e; } +inline size_t memoryof (unsigned short const e) { return sizeof e; } +inline size_t memoryof (unsigned int const e) { return sizeof e; } +inline size_t memoryof (unsigned long const e) { return sizeof e; } +inline size_t memoryof (unsigned long long const e) { return sizeof e; } +inline size_t memoryof (float const e) { return sizeof e; } +inline size_t memoryof (double const e) { return sizeof e; } +inline size_t memoryof (long double const e) { return sizeof e; } +inline size_t memoryof (void * const e) { return sizeof e; } +inline size_t memoryof (void const * const e) { return sizeof e; } +template<class T> inline size_t memoryof (T * const e) { return sizeof e; } +template<class T> inline size_t memoryof (T const * const e) { return sizeof e; } +template<class T> inline size_t memoryof (typename list<T>::iterator const & i) { return sizeof i; } +template<class T> inline size_t memoryof (typename list<T>::const_iterator const & i) { return sizeof i; } + +template<class T> size_t memoryof (list<T> const & c) CCTK_ATTRIBUTE_PURE; +template<class T> size_t memoryof (set<T> const & c) CCTK_ATTRIBUTE_PURE; +template<class T> size_t memoryof (stack<T> const & c) CCTK_ATTRIBUTE_PURE; +template<class T> size_t memoryof (vector<T> const & c) CCTK_ATTRIBUTE_PURE; // Container input +template<class T> istream& input (istream& is, list<T>& l); +template<class T> istream& input (istream& is, set<T>& s); template<class T> istream& input (istream& is, vector<T>& v); template<class T> +inline istream& operator>> (istream& is, list<T>& l) { + return input(is,l); +} + +template<class T> +inline istream& operator>> (istream& is, set<T>& s) { + return input(is,s); +} + +template<class T> inline istream& operator>> (istream& is, vector<T>& v) { return input(is,v); } @@ -289,6 +382,8 @@ inline istream& operator>> (istream& is, vector<T>& v) { // Container output template<class T> ostream& output (ostream& os, const list<T>& l); +template<class S, class T> ostream& output (ostream& os, const map<S,T>& m); +template<class S, class T> ostream& output (ostream& os, const pair<S,T>& p); template<class T> ostream& output (ostream& os, const set<T>& s); template<class T> ostream& output (ostream& os, const stack<T>& s); template<class T> ostream& output (ostream& os, const vector<T>& v); @@ -298,6 +393,11 @@ inline ostream& operator<< (ostream& os, const list<T>& l) { return output(os,l); } +template<class S, class T> +inline ostream& operator<< (ostream& os, const map<S,T>& m) { + return output(os,m); +} + template<class T> inline ostream& operator<< (ostream& os, const set<T>& s) { return output(os,s); diff --git a/Carpet/CarpetLib/src/dh.cc b/Carpet/CarpetLib/src/dh.cc index 046600c6b..36b3c310f 100644 --- a/Carpet/CarpetLib/src/dh.cc +++ b/Carpet/CarpetLib/src/dh.cc @@ -3,6 +3,9 @@ #include "cctk.h" #include "cctk_Parameters.h" +#include "CarpetTimers.hh" + +#include "mpi_string.hh" #include "bbox.hh" #include "bboxset.hh" #include "defs.hh" @@ -19,6 +22,10 @@ using namespace CarpetLib; +list<dh*> dh::alldh; + + + // Constructors dh:: dh (gh & h_, @@ -31,12 +38,14 @@ dh (gh & h_, assert (all (all (ghost_width >= 0))); assert (all (all (buffer_width >= 0))); assert (prolongation_order_space >= 0); - h.add (this); + alldhi = alldh.insert(alldh.end(), this); + gh_handle = h.add (this); CHECKPOINT; - regrid (); + regrid (false); for (int rl = 0; rl < h.reflevels(); ++ rl) { recompose (rl, false); } + regrid_free (false); } @@ -46,7 +55,8 @@ dh:: ~dh () { CHECKPOINT; - h.remove (this); + h.erase (gh_handle); + alldh.erase(alldhi); } @@ -135,6 +145,15 @@ assert_error (char const * restrict const checkstring, there_was_an_error = true; } +#ifdef CARPET_OPTIMISE + +// For highest efficiency, omit all self-checks +#define ASSERT_rl(check, message) +#define ASSERT_c(check, message) +#define ASSERT_cc(check, message) + +#else + #define ASSERT_rl(check, message) \ do { \ if (not (check)) { \ @@ -156,41 +175,60 @@ assert_error (char const * restrict const checkstring, } \ } while (false) +#endif + void dh:: -regrid () +regrid (bool const do_init) { DECLARE_CCTK_PARAMETERS; + + static Carpet::Timer timer ("CarpetLib::dh::regrid"); + timer.start(); CHECKPOINT; - static Timer total ("dh::regrid"); + static Timer total ("CarpetLib::dh::regrid"); total.start (); - oldboxes.clear(); + mboxes oldboxes; swap (boxes, oldboxes); - fast_oldboxes.clear(); - swap (fast_boxes, fast_oldboxes); + + full_mboxes full_boxes; + + fast_boxes.clear(); + // cerr << "QQQ: regrid[1]" << endl; boxes.resize (h.mglevels()); + full_boxes.resize (h.mglevels()); fast_boxes.resize (h.mglevels()); for (int ml = 0; ml < h.mglevels(); ++ ml) { + // cerr << "QQQ: regrid[2] ml=" << ml << endl; boxes.AT(ml).resize (h.reflevels()); + full_boxes.AT(ml).resize (h.reflevels()); fast_boxes.AT(ml).resize (h.reflevels()); for (int rl = 0; rl < h.reflevels(); ++ rl) { + // cerr << "QQQ: regrid[3] rl=" << rl << endl; boxes.AT(ml).AT(rl).resize (h.components(rl)); - fast_boxes.AT(ml).AT(rl).resize (dist::size()); + full_boxes.AT(ml).AT(rl).resize (h.components(rl)); cboxes & level = boxes.AT(ml).AT(rl); - fast_cboxes & fast_level = fast_boxes.AT(ml).AT(rl); + full_cboxes & full_level = full_boxes.AT(ml).AT(rl); + fast_dboxes & fast_level = fast_boxes.AT(ml).AT(rl); + + vector<fast_dboxes> fast_level_otherprocs (dist::size()); // Domain: + // cerr << "QQQ: regrid[a]" << endl; + + static Carpet::Timer timer_domain ("CarpetLib::dh::regrid::domain"); + timer_domain.start(); ibbox const & domain_exterior = h.baseextent(ml,rl); // Variables may have size zero @@ -211,17 +249,24 @@ regrid () ibset domain_boundary = domain_exterior - domain_active; domain_boundary.normalize(); + timer_domain.stop(); + + static Carpet::Timer timer_region ("CarpetLib::dh::regrid::region"); + timer_region.start(); + + // cerr << "QQQ: regrid[b]" << endl; for (int c = 0; c < h.components(rl); ++ c) { - dboxes & box = boxes.AT(ml).AT(rl).AT(c); + full_dboxes & box = full_level.AT(c); // Interior: ibbox & intr = box.interior; + intr = ibbox::poison(); // The interior of the grid has the extent as specified by the // regridding thorn @@ -237,10 +282,12 @@ regrid () "The interior must be contained in the domain"); // All interiors must be disjunct +#ifdef CARPET_DEBUG for (int cc = 0; cc < c; ++ cc) { - ASSERT_cc (not intr.intersects (level.AT(cc).interior), + ASSERT_cc (not intr.intersects (full_level.AT(cc).interior), "All interiors must be disjunct"); } +#endif @@ -261,6 +308,7 @@ regrid () // Exterior: ibbox & extr = box.exterior; + extr = ibbox::poison(); ASSERT_c (all (all (ghost_width >= 0)), "The gh ghost widths must not be negative"); @@ -280,6 +328,7 @@ regrid () // Cactus ghost zones (which include outer boundaries): ibset & ghosts = box.ghosts; + ghosts = ibset::poison(); ghosts = extr - intr; ghosts.normalize(); @@ -295,6 +344,7 @@ regrid () // Communicated region: ibbox & comm = box.communicated; + comm = ibbox::poison(); comm = extr.expand (i2vect (is_outer_boundary) * (- boundary_width)); @@ -313,6 +363,7 @@ regrid () // Outer boundary: ibset & outer_boundaries = box.outer_boundaries; + outer_boundaries = ibset::poison(); outer_boundaries = extr - comm; outer_boundaries.normalize(); @@ -327,6 +378,7 @@ regrid () // Owned region: ibbox & owned = box.owned; + owned = ibbox::poison(); owned = intr.expand (i2vect (is_outer_boundary) * (- boundary_width)); @@ -341,10 +393,12 @@ regrid () "The owned region must be contained in the active part of the domain"); // All owned regions must be disjunct +#ifdef CARPET_DEBUG for (int cc = 0; cc < c; ++ cc) { - ASSERT_cc (not owned.intersects (level.AT(cc).owned), + ASSERT_cc (not owned.intersects (full_level.AT(cc).owned), "All owned regions must be disjunct"); } +#endif @@ -352,6 +406,7 @@ regrid () // boundaries): ibset & boundaries = box.boundaries; + boundaries = ibset::poison(); boundaries = comm - owned; boundaries.normalize(); @@ -365,9 +420,15 @@ regrid () } // for c + timer_region.stop(); + // Conjunction of all buffer zones: + // cerr << "QQQ: regrid[c]" << endl; + + static Carpet::Timer timer_buffers ("CarpetLib::dh::regrid::buffers"); + timer_buffers.start(); // Enlarge active part of domain i2vect const safedist = i2vect (0); @@ -376,7 +437,7 @@ regrid () // All owned regions ibset allowned; for (int c = 0; c < h.components(rl); ++ c) { - dboxes const & box = boxes.AT(ml).AT(rl).AT(c); + full_dboxes const & box = full_level.AT(c); allowned += box.owned; } allowned.normalize(); @@ -409,20 +470,13 @@ regrid () for (int c = 0; c < h.components(rl); ++ c) { - - dboxes & box = boxes.AT(ml).AT(rl).AT(c); - - + full_dboxes & box = full_level.AT(c); // Buffer zones: - box.buffers = box.owned & allbuffers; box.buffers.normalize(); - - // Active region: - box.active = box.owned - box.buffers; box.active.normalize(); @@ -431,22 +485,29 @@ regrid () // The conjunction of all buffer zones must equal allbuffers + // cerr << "QQQ: regrid[d]" << endl; ibset allbuffers1; for (int c = 0; c < h.components(rl); ++ c) { - dboxes const & box = boxes.AT(ml).AT(rl).AT(c); + full_dboxes const & box = full_level.AT(c); allbuffers1 += box.buffers; } allbuffers1.normalize(); ASSERT_rl (allbuffers1 == allbuffers, "Buffer zone consistency check"); + timer_buffers.stop(); + // Test constituency relations: + // cerr << "QQQ: regrid[e]" << endl; + + static Carpet::Timer timer_test ("CarpetLib::dh::regrid::test"); + timer_test.start(); for (int c = 0; c < h.components(rl); ++ c) { - dboxes const & box = boxes.AT(ml).AT(rl).AT(c); + full_dboxes const & box = full_level.AT(c); ASSERT_c ((box.active & box.buffers).empty(), "Consistency check"); @@ -473,24 +534,36 @@ regrid () } // for c + timer_test.stop(); + // Communication schedule: + // cerr << "QQQ: regrid[4]" << endl; - for (int c = 0; c < h.components(rl); ++ c) { + static Carpet::Timer timer_comm ("CarpetLib::dh::regrid::comm"); + timer_comm.start(); + + for (int lc = 0; lc < h.local_components(rl); ++ lc) { + int const c = h.get_component (rl, lc); + // cerr << "QQQ: regrid[4a] lc=" << lc << " c=" << c << endl; - dboxes & box = boxes.AT(ml).AT(rl).AT(c); + full_dboxes & box = full_level.AT(c); // Multigrid restriction: + static Carpet::Timer timer_comm_mgrest + ("CarpetLib::dh::regrid::comm::mgrest"); + timer_comm_mgrest.start(); + if (ml > 0) { int const oml = ml - 1; // Multigrid restriction must fill all active points - dboxes const & obox = boxes.AT(oml).AT(rl).AT(c); + full_dboxes const & obox = full_boxes.AT(oml).AT(rl).AT(c); ibset needrecv = box.active; @@ -513,11 +586,8 @@ regrid () ibbox const send = recv.expanded_for (obox.interior); ASSERT_c (send <= obox.exterior, "Multigrid restriction: Send region must be contained in exterior"); - if (on_this_proc (rl, c)) { - int const p = dist::rank(); - fast_level.AT(p).fast_mg_rest_sendrecv.push_back - (sendrecv_pseudoregion_t (send, c, recv, c)); - } + fast_level.fast_mg_rest_sendrecv.push_back + (sendrecv_pseudoregion_t (send, c, recv, c)); } needrecv -= ovlp; @@ -529,9 +599,16 @@ regrid () } // if ml > 0 + timer_comm_mgrest.stop(); + // Multigrid prolongation: + // cerr << "QQQ: regrid[f]" << endl; + + static Carpet::Timer timer_comm_mgprol + ("CarpetLib::dh::regrid::comm::mprol"); + timer_comm_mgprol.start(); if (ml > 0) { int const oml = ml - 1; @@ -539,7 +616,7 @@ regrid () // Multigrid prolongation must fill all active points // (this could probably be relaxed) - dboxes const & obox = boxes.AT(oml).AT(rl).AT(c); + full_dboxes const & obox = full_boxes.AT(oml).AT(rl).AT(c); ibset oneedrecv = obox.active; @@ -565,11 +642,8 @@ regrid () recv.expanded_for (box.interior).expand (stencil_size); ASSERT_c (send <= box.exterior, "Multigrid prolongation: Send region must be contained in exterior"); - if (on_this_proc (rl, c)) { - int const p = dist::rank(); - fast_level.AT(p).fast_mg_prol_sendrecv.push_back - (sendrecv_pseudoregion_t (send, c, recv, c)); - } + fast_level.fast_mg_prol_sendrecv.push_back + (sendrecv_pseudoregion_t (send, c, recv, c)); } oneedrecv -= ovlp; @@ -581,9 +655,16 @@ regrid () } // if ml > 0 + timer_comm_mgprol.stop(); + // Refinement prolongation: + // cerr << "QQQ: regrid[g]" << endl; + + static Carpet::Timer timer_comm_refprol + ("CarpetLib::dh::regrid::comm::refprol"); + timer_comm_refprol.start(); if (rl > 0) { int const orl = rl - 1; @@ -600,7 +681,7 @@ regrid () i2vect (h.reffacts.at(rl) / h.reffacts.at(orl)); for (int cc = 0; cc < h.components(orl); ++ cc) { - dboxes const & obox = boxes.AT(ml).AT(orl).AT(cc); + full_dboxes const & obox = full_boxes.AT(ml).AT(orl).AT(cc); ibset contracted_oactive; for (ibset::const_iterator @@ -617,16 +698,19 @@ regrid () ovlp.normalize(); for (ibset::const_iterator - ri =ovlp.begin(); ri != ovlp.end(); ++ ri) + ri = ovlp.begin(); ri != ovlp.end(); ++ ri) { ibbox const & recv = * ri; ibbox const send = recv.expanded_for (obox.interior).expand (stencil_size); ASSERT_c (send <= obox.exterior, "Refinement prolongation: Send region must be contained in exterior"); - if (on_this_proc (rl, c) or on_this_proc (orl, cc)) { - int const p = dist::rank(); - fast_level.AT(p).fast_ref_prol_sendrecv.push_back + fast_level.fast_ref_prol_sendrecv.push_back + (sendrecv_pseudoregion_t (send, cc, recv, c)); + if (not on_this_proc (orl, cc)) { + fast_dboxes & fast_level_otherproc = + fast_level_otherprocs.AT(this_proc(orl, cc)); + fast_level_otherproc.fast_ref_prol_sendrecv.push_back (sendrecv_pseudoregion_t (send, cc, recv, c)); } } @@ -635,83 +719,120 @@ regrid () } // for cc - needrecv.normalize(); - // All points must have been received + needrecv.normalize(); ASSERT_c (needrecv.empty(), "Refinement prolongation: All points must have been received"); } // if rl > 0 + timer_comm_refprol.stop(); + // Synchronisation: + // cerr << "QQQ: regrid[h]" << endl; - // Synchronisation should fill as many boundary points as - // possible + static Carpet::Timer timer_comm_sync + ("CarpetLib::dh::regrid::comm::sync"); + timer_comm_sync.start(); + { + + // Synchronisation should fill as many boundary points as + // possible + #if 0 - // Outer boundaries are not synchronised, since they cannot be - // filled by boundary prolongation either, and therefore the - // user code must set them anyway. - ibset needrecv = box.boundaries; + // Outer boundaries are not synchronised, since they cannot + // be filled by boundary prolongation either, and therefore + // the user code must set them anyway. + ibset needrecv = box.boundaries; #else - // Outer boundaries are synchronised for backward - // compatibility. - ibset needrecv = box.ghosts; + // Outer boundaries are synchronised for backward + // compatibility. + ibset needrecv = box.ghosts; #endif - - ibset & sync = box.sync; - - for (int cc = 0; cc < h.components(rl); ++ cc) { - dboxes const & obox = boxes.AT(ml).AT(rl).AT(cc); + ibset const needrecv_orig = needrecv; + ibset & sync = box.sync; + + for (int cc = 0; cc < h.components(rl); ++ cc) { + full_dboxes const & obox = full_level.AT(cc); + #if 0 - ibset ovlp = needrecv & obox.owned; + ibset ovlp = needrecv & obox.owned; #else - ibset ovlp = needrecv & obox.interior; + ibset ovlp = needrecv & obox.interior; #endif - ovlp.normalize(); - - if (cc == c) { - ASSERT_cc (ovlp.empty(), - "A region may not synchronise from itself"); - } - - for (ibset::const_iterator - ri = ovlp.begin(); ri != ovlp.end(); ++ ri) - { - ibbox const & recv = * ri; - ibbox const & send = recv; - if (on_this_proc (rl, c) or on_this_proc (rl, cc)) { - int const p = dist::rank(); - fast_level.AT(p).fast_sync_sendrecv.push_back + ovlp.normalize(); + + if (cc == c) { + ASSERT_cc (ovlp.empty(), + "A region may not synchronise from itself"); + } + + for (ibset::const_iterator + ri = ovlp.begin(); ri != ovlp.end(); ++ ri) + { + ibbox const & recv = * ri; + ibbox const & send = recv; + fast_level.fast_sync_sendrecv.push_back (sendrecv_pseudoregion_t (send, cc, recv, c)); + if (not on_this_proc (rl, cc)) { + fast_dboxes & fast_level_otherproc = + fast_level_otherprocs.AT(this_proc(rl, cc)); + fast_level_otherproc.fast_sync_sendrecv.push_back + (sendrecv_pseudoregion_t (send, cc, recv, c)); + } } - } + + needrecv -= ovlp; + sync += ovlp; + + } // for cc - needrecv -= ovlp; - sync += ovlp; + sync.normalize(); - } // for cc + } - needrecv.normalize(); - sync.normalize(); + timer_comm_sync.stop(); // Boundary prolongation: + // cerr << "QQQ: regrid[i]" << endl; + + static Carpet::Timer timer_comm_refbndprol + ("CarpetLib::dh::regrid::comm::refbndprol"); + timer_comm_refbndprol.start(); if (rl > 0) { int const orl = rl - 1; +#if 0 + // Outer boundaries are not synchronised, since they cannot + // be filled by boundary prolongation either, and therefore + // the user code must set them anyway. + ibset needrecv = box.boundaries; +#else + // Outer boundaries are synchronised for backward + // compatibility. + ibset needrecv = box.ghosts; +#endif + + // Points which are synchronised need not be boundary + // prolongated + needrecv -= box.sync; + // Outer boundary points cannot be boundary prolongated needrecv &= box.communicated; // Prolongation must fill what cannot be synchronised, and // also all buffer zones needrecv += box.buffers; + needrecv.normalize(); + ibset const needrecv_orig = needrecv; ibset & bndref = box.bndref; @@ -721,9 +842,10 @@ regrid () "Refinement factors must be integer multiples of each other"); i2vect const reffact = i2vect (h.reffacts.at(rl) / h.reffacts.at(orl)); + ivect const reffact1 = h.reffacts.at(rl) / h.reffacts.at(orl); for (int cc = 0; cc < h.components(orl); ++ cc) { - dboxes const & obox = boxes.AT(ml).AT(orl).AT(cc); + full_dboxes const & obox = full_boxes.AT(ml).AT(orl).AT(cc); ibset contracted_oactive; for (ibset::const_iterator @@ -747,251 +869,522 @@ regrid () recv.expanded_for (obox.interior).expand (stencil_size); ASSERT_c (send <= obox.exterior, "Boundary prolongation: Send region must be contained in exterior"); - if (on_this_proc (rl, c) or on_this_proc (orl, cc)) { - int const p = dist::rank(); - fast_level.AT(p).fast_ref_bnd_prol_sendrecv.push_back + fast_level.fast_ref_bnd_prol_sendrecv.push_back + (sendrecv_pseudoregion_t (send, cc, recv, c)); + if (not on_this_proc (orl, cc)) { + fast_dboxes & fast_level_otherproc = + fast_level_otherprocs.AT(this_proc(orl, cc)); + fast_level_otherproc.fast_ref_bnd_prol_sendrecv.push_back (sendrecv_pseudoregion_t (send, cc, recv, c)); } } needrecv -= ovlp; bndref += ovlp; - + } // for cc - needrecv.normalize(); bndref.normalize(); + // All points must now have been received, either through + // synchronisation or through boundary prolongation + needrecv.normalize(); + ASSERT_c (needrecv.empty(), + "Synchronisation and boundary prolongation: All points must have been received"); + } // if rl > 0 - // All points must now have been received, either through - // synchronisation or through boundary prolongation - ASSERT_c (needrecv.empty(), - "Synchronisation and boundary prolongation: All points must have been received"); + timer_comm_refbndprol.stop(); - } // for c + } // for lc // Refinement restriction: + // cerr << "QQQ: regrid[j]" << endl; + + static Carpet::Timer timer_comm_refrest + ("CarpetLib::dh::regrid::comm::refrest"); + timer_comm_refrest.start(); if (rl > 0) { int const orl = rl - 1; - fast_cboxes & fast_olevel = fast_boxes.AT(ml).AT(orl); - - ibset needrecv; - for (int c = 0; c < h.components(rl); ++ c) { - dboxes const & box = boxes.AT(ml).AT(rl).AT(c); - dboxes const & obox0 = boxes.AT(ml).AT(orl).AT(0); - - // Refinement restriction may fill all active points, and - // must use all active points - - for (ibset::const_iterator - ai = box.active.begin(); ai != box.active.end(); ++ ai) - { - ibbox const & active = * ai; - needrecv += active.contracted_for (obox0.interior); - } - needrecv.normalize(); - } // for c + fast_dboxes & fast_olevel = fast_boxes.AT(ml).AT(orl); - for (int cc = 0; cc < h.components(orl); ++ cc) { - dboxes & obox = boxes.AT(ml).AT(orl).AT(cc); - - for (int c = 0; c < h.components(rl); ++ c) { - dboxes const & box = boxes.AT(ml).AT(rl).AT(c); + if (h.components(orl) > 0) { + for (int lc = 0; lc < h.local_components(rl); ++ lc) { + int const c = h.get_component (rl, lc); + + full_dboxes const & box = full_level.AT(c); + full_dboxes const & obox0 = full_boxes.AT(ml).AT(orl).AT(0); + + // Refinement restriction may fill all active points, and + // must use all active points - ibset contracted_active; + ibset needrecv; for (ibset::const_iterator ai = box.active.begin(); ai != box.active.end(); ++ ai) { ibbox const & active = * ai; - contracted_active += active.contracted_for (obox.interior); + needrecv += active.contracted_for (obox0.interior); } - contracted_active.normalize(); + needrecv.normalize(); - ibset ovlp = obox.active & contracted_active; - ovlp.normalize(); - - for (ibset::const_iterator - ri =ovlp.begin(); ri != ovlp.end(); ++ ri) - { - ibbox const & recv = * ri; - ibbox const send = recv.expanded_for (box.interior); - ASSERT_c (send <= box.active, - "Refinement restriction: Send region must be contained in active part"); - if (on_this_proc (rl, c) or on_this_proc (orl, cc)) { - int const p = dist::rank(); - fast_olevel.AT(p).fast_ref_rest_sendrecv.push_back + for (int cc = 0; cc < h.components(orl); ++ cc) { + full_dboxes & obox = full_boxes.AT(ml).AT(orl).AT(cc); + + ibset contracted_active; + for (ibset::const_iterator + ai = box.active.begin(); ai != box.active.end(); ++ ai) + { + ibbox const & active = * ai; + contracted_active += active.contracted_for (obox0.interior); + } + contracted_active.normalize(); + + ibset ovlp = obox.active & contracted_active; + ovlp.normalize(); + + for (ibset::const_iterator + ri = ovlp.begin(); ri != ovlp.end(); ++ ri) + { + ibbox const & recv = * ri; + ibbox const send = recv.expanded_for (box.interior); + ASSERT_c (send <= box.active, + "Refinement restriction: Send region must be contained in active part"); + fast_olevel.fast_ref_rest_sendrecv.push_back (sendrecv_pseudoregion_t (send, c, recv, cc)); + if (not on_this_proc (orl, cc)) { + fast_dboxes & fast_level_otherproc = + fast_level_otherprocs.AT(this_proc(orl, cc)); + fast_level_otherproc.fast_ref_rest_sendrecv.push_back + (sendrecv_pseudoregion_t (send, c, recv, cc)); + } } - } - - needrecv -= ovlp; - } // for c - - } // for cc - - needrecv.normalize(); - - // All points must have been received - ASSERT_rl (needrecv.empty(), - "Refinement restriction: All points must have been received"); + needrecv -= ovlp; + + } // for cc + + // All points must have been received + needrecv.normalize(); + ASSERT_rl (needrecv.empty(), + "Refinement restriction: All points must have been received"); + + } // for lc + } // if orl not empty } // if rl > 0 + timer_comm_refrest.stop(); + + timer_comm.stop(); + // Regridding schedule: + // cerr << "QQQ: regrid[5]" << endl; - for (int c = 0; c < h.components(rl); ++ c) { - - dboxes & box = boxes.AT(ml).AT(rl).AT(c); - - ibset needrecv = box.active; + fast_level.do_init = do_init; + if (do_init) { + static Carpet::Timer timer_regrid ("CarpetLib::dh::regrid::regrid"); + timer_regrid.start(); + for (int lc = 0; lc < h.local_components(rl); ++ lc) { + int const c = h.get_component (rl, lc); + // cerr << "QQQ: regrid[5a] lc=" << lc << " c=" << c << endl; - // Synchronisation: - - if (int (oldboxes.size()) > ml and int (oldboxes.AT(ml).size()) > rl) { + full_dboxes & box = full_level.AT(c); - int const oldcomponents = oldboxes.AT(ml).AT(rl).size(); + ibset needrecv = box.active; - // Synchronisation copies from the same level of the old - // grid structure. It should fill as many active points as - // possible - for (int cc = 0; cc < oldcomponents; ++ cc) { - dboxes const & obox = oldboxes.AT(ml).AT(rl).AT(cc); + + // Synchronisation: + // cerr << "QQQ: regrid[k]" << endl; + + static Carpet::Timer timer_regrid_sync + ("CarpetLib::dh::regrid::regrid::sync"); + timer_regrid_sync.start(); + + if (int (oldboxes.size()) > ml and int (oldboxes.AT(ml).size()) > rl) + { - ibset ovlp = needrecv & obox.owned; - ovlp.normalize(); + int const oldcomponents = oldboxes.AT(ml).AT(rl).size(); - for (ibset::const_iterator - ri =ovlp.begin(); ri != ovlp.end(); ++ ri) - { - ibbox const & recv = * ri; - ibbox const & send = recv; - if (on_this_proc (rl, c) or on_this_oldproc (rl, cc)) { - int const p = dist::rank(); - fast_level.AT(p).fast_old2new_sync_sendrecv.push_back + // Synchronisation copies from the same level of the old + // grid structure. It should fill as many active points + // as possible. + + for (int cc = 0; cc < oldcomponents; ++ cc) { + dboxes const & obox = oldboxes.AT(ml).AT(rl).AT(cc); + + ibset ovlp = needrecv & obox.owned; + ovlp.normalize(); + + for (ibset::const_iterator + ri = ovlp.begin(); ri != ovlp.end(); ++ ri) + { + ibbox const & recv = * ri; + ibbox const & send = recv; + fast_level.fast_old2new_sync_sendrecv.push_back (sendrecv_pseudoregion_t (send, cc, recv, c)); + if (not on_this_oldproc (rl, cc)) { + fast_dboxes & fast_level_otherproc = + fast_level_otherprocs.AT(this_proc(rl, cc)); + fast_level_otherproc.fast_old2new_sync_sendrecv.push_back + (sendrecv_pseudoregion_t (send, cc, recv, c)); + } } - } + + needrecv -= ovlp; + + } // for cc - needrecv -= ovlp; + needrecv.normalize(); - } // for cc + } // if not oldboxes.empty - needrecv.normalize(); - - } // if not oldboxes.empty - - - - // Prolongation: - - if (rl > 0) { - int const orl = rl - 1; + timer_regrid_sync.stop(); - // Prolongation interpolates from the next coarser level of - // the new grid structure. It must fill what cannot be - // synchronised - - i2vect const stencil_size = i2vect (prolongation_stencil_size()); - ASSERT_c (all (h.reffacts.at(rl) % h.reffacts.at(orl) == 0), - "Refinement factors must be integer multiples of each other"); - i2vect const reffact = - i2vect (h.reffacts.at(rl) / h.reffacts.at(orl)); - for (int cc = 0; cc < h.components(orl); ++ cc) { - dboxes const & obox = boxes.AT(ml).AT(orl).AT(cc); + // Prolongation: + // cerr << "QQQ: regrid[l]" << endl; + + static Carpet::Timer timer_regrid_prolongate + ("CarpetLib::dh::regrid::regrid::prolongate"); + timer_regrid_prolongate.start(); + + if (rl > 0) { + int const orl = rl - 1; - ibset contracted_oactive; - for (ibset::const_iterator - ai = obox.active.begin(); ai != obox.active.end(); ++ ai) - { - ibbox const & oactive = * ai; - // untested for cell centering - contracted_oactive += - oactive.contracted_for (box.interior).expand (reffact); - } - contracted_oactive.normalize(); + // Prolongation interpolates from the next coarser level + // of the new grid structure. It must fill what cannot be + // synchronised. - ibset ovlp = needrecv & contracted_oactive; - ovlp.normalize(); + i2vect const stencil_size = i2vect (prolongation_stencil_size()); - for (ibset::const_iterator - ri = ovlp.begin(); ri != ovlp.end(); ++ ri) - { - ibbox const & recv = * ri; - ibbox const send = - recv.expanded_for (obox.interior).expand (stencil_size); - ASSERT_c (send <= obox.exterior, - "Regridding prolongation: Send region must be contained in exterior"); - if (on_this_proc (rl, c) or on_this_proc (orl, cc)) { - int const p = dist::rank(); - fast_level.AT(p).fast_old2new_ref_prol_sendrecv.push_back + ASSERT_c (all (h.reffacts.at(rl) % h.reffacts.at(orl) == 0), + "Refinement factors must be integer multiples of each other"); + i2vect const reffact = + i2vect (h.reffacts.at(rl) / h.reffacts.at(orl)); + + for (int cc = 0; cc < h.components(orl); ++ cc) { + full_dboxes const & obox = full_boxes.AT(ml).AT(orl).AT(cc); + + ibset contracted_oactive; + for (ibset::const_iterator + ai = obox.active.begin(); ai != obox.active.end(); ++ ai) + { + ibbox const & oactive = * ai; + // untested for cell centering + contracted_oactive += + oactive.contracted_for (box.interior).expand (reffact); + } + contracted_oactive.normalize(); + + ibset ovlp = needrecv & contracted_oactive; + ovlp.normalize(); + + for (ibset::const_iterator + ri = ovlp.begin(); ri != ovlp.end(); ++ ri) + { + ibbox const & recv = * ri; + ibbox const send = + recv.expanded_for (obox.interior).expand (stencil_size); + ASSERT_c (send <= obox.exterior, + "Regridding prolongation: Send region must be contained in exterior"); + fast_level.fast_old2new_ref_prol_sendrecv.push_back (sendrecv_pseudoregion_t (send, cc, recv, c)); + if (not on_this_proc (orl, cc)) { + fast_dboxes & fast_level_otherproc = + fast_level_otherprocs.AT(this_proc(orl, cc)); + fast_level_otherproc.fast_old2new_ref_prol_sendrecv. + push_back (sendrecv_pseudoregion_t (send, cc, recv, c)); + } } - } + + needrecv -= ovlp; + + } // for cc - needrecv -= ovlp; + needrecv.normalize(); - } // for cc + } // if rl > 0 - needrecv.normalize(); + if (int (oldboxes.size()) > ml and int (oldboxes.AT(ml).size()) > 0) { + // All points must now have been received, either through + // synchronisation or through prolongation + ASSERT_c (needrecv.empty(), + "Regridding prolongation: All points must have been received"); + } - } // if rl > 0 + timer_regrid_prolongate.stop(); + + } // for lc - if (int (oldboxes.size()) > ml and int (oldboxes.AT(ml).size()) > 0) { - // All points must now have been received, either through - // synchronisation or through prolongation - ASSERT_c (needrecv.empty(), - "Regridding prolongation: All points must have been received"); + timer_regrid.stop(); + + } // if do_init + + + + // cerr << "QQQ: regrid[6]" << endl; + for (int lc = 0; lc < h.local_components(rl); ++ lc) { + int const c = h.get_component (rl, lc); + + level.AT(c).exterior = full_level.AT(c).exterior; + level.AT(c).owned = full_level.AT(c).owned; + level.AT(c).interior = full_level.AT(c).interior; + + level.AT(c).exterior_size = full_level.AT(c).exterior.size(); + level.AT(c).owned_size = full_level.AT(c).owned.size(); + level.AT(c).active_size = full_level.AT(c).active.size(); + + } // for lc + + + + // Broadcast grid structure and communication schedule + // cerr << "QQQ: regrid[7]" << endl; + + { + + static Carpet::Timer timer_bcast_boxes + ("CarpetLib::dh::regrid::bcast_boxes"); + timer_bcast_boxes.start(); + + int const count_send = h.local_components(rl); + vector<dboxes> level_send (count_send); + for (int lc = 0; lc < h.local_components(rl); ++ lc) { + int const c = h.get_component (rl, lc); + level_send.AT(lc) = level.AT(c); + } + // cerr << "QQQ: regrid[7a]" << endl; + vector<vector<dboxes> > const level_recv = + allgatherv (dist::comm(), level_send); + // cerr << "QQQ: regrid[7b]" << endl; + vector<int> count_recv (dist::size(), 0); + for (int c = 0; c < h.components(rl); ++ c) { + int const p = this_proc (rl, c); + if (p != dist::rank()) { + level.AT(c) = level_recv.AT(p).AT(count_recv.AT(p)); + ++ count_recv.AT(p); + } + } + for (int p = 0; p < dist::size(); ++ p) { + if (p != dist::rank()) { + assert (count_recv.AT(p) == int(level_recv.AT(p).size())); + } } + // cerr << "QQQ: regrid[7c]" << endl; - } // for c + timer_bcast_boxes.stop(); + + } - } // for rl - } // for m - - - - // Output: - if (output_bboxes or there_was_an_error) { - - for (int ml = 0; ml < h.mglevels(); ++ ml) { - for (int rl = 0; rl < h.reflevels(); ++ rl) { + { + + static Carpet::Timer timer_bcast_comm + ("CarpetLib::dh::regrid::bcast_comm"); + timer_bcast_comm.start(); + + static Carpet::Timer timer_bcast_comm_ref_prol + ("CarpetLib::dh::regrid::bcast_comm::ref_prol"); + timer_bcast_comm_ref_prol.start(); + broadcast_schedule (fast_level_otherprocs, fast_level, + & fast_dboxes::fast_ref_prol_sendrecv); + timer_bcast_comm_ref_prol.stop(); + + static Carpet::Timer timer_bcast_comm_sync + ("CarpetLib::dh::regrid::bcast_comm::sync"); + timer_bcast_comm_sync.start(); + broadcast_schedule (fast_level_otherprocs, fast_level, + & fast_dboxes::fast_sync_sendrecv); + timer_bcast_comm_sync.stop(); + + static Carpet::Timer timer_bcast_comm_ref_bnd_prol + ("CarpetLib::dh::regrid::bcast_comm::ref_bnd_prol"); + timer_bcast_comm_ref_bnd_prol.start(); + broadcast_schedule (fast_level_otherprocs, fast_level, + & fast_dboxes::fast_ref_bnd_prol_sendrecv); + timer_bcast_comm_ref_bnd_prol.stop(); + + if (rl > 0) { + int const orl = rl - 1; + fast_dboxes & fast_olevel = fast_boxes.AT(ml).AT(orl); + static Carpet::Timer timer_bcast_comm_ref_rest + ("CarpetLib::dh::regrid::bcast_comm::ref_rest"); + timer_bcast_comm_ref_rest.start(); + broadcast_schedule (fast_level_otherprocs, fast_olevel, + & fast_dboxes::fast_ref_rest_sendrecv); + timer_bcast_comm_ref_rest.stop(); + } + + // TODO: Maybe broadcast old2new schedule only if do_init is + // set + static Carpet::Timer timer_bcast_comm_old2new_sync + ("CarpetLib::dh::regrid::bcast_comm::old2new_sync"); + timer_bcast_comm_old2new_sync.start(); + broadcast_schedule (fast_level_otherprocs, fast_level, + & fast_dboxes::fast_old2new_sync_sendrecv); + timer_bcast_comm_old2new_sync.stop(); + + static Carpet::Timer timer_bcast_comm_old2new_ref_prol + ("CarpetLib::dh::regrid::bcast_comm::old2new_ref_prol"); + timer_bcast_comm_old2new_ref_prol.start(); + broadcast_schedule (fast_level_otherprocs, fast_level, + & fast_dboxes::fast_old2new_ref_prol_sendrecv); + timer_bcast_comm_old2new_ref_prol.stop(); + + timer_bcast_comm.stop(); + + } + + + + // Output: + if (output_bboxes or there_was_an_error) { + for (int c = 0; c < h.components(rl); ++ c) { - dboxes const & box = boxes.AT(ml).AT(rl).AT(c); - fast_dboxes const & fast_box = fast_boxes.AT(ml).AT(rl).AT(c); + full_dboxes const & box = full_boxes.AT(ml).AT(rl).AT(c); cout << eol; cout << "ml=" << ml << " rl=" << rl << " c=" << c << eol; cout << box; - cout << fast_box; - cout << endl; } // for c - } // for rl - } // for m + + fast_dboxes const & fast_box = fast_boxes.AT(ml).AT(rl); + + cout << eol; + cout << "ml=" << ml << " rl=" << rl << eol; + cout << fast_box; + + } // if output_bboxes + + + + // Free memory early to save space + if (int (oldboxes.size()) > ml and int (oldboxes.AT(ml).size()) > rl) { + oldboxes.AT(ml).AT(rl).clear(); + } + + if (ml > 0) { + if (rl > 0) { + full_boxes.AT(ml-1).AT(rl-1).clear(); + } + if (rl == h.reflevels()-1) { + full_boxes.AT(ml-1).AT(rl).clear(); + } + } + if (ml == h.mglevels()-1) { + if (rl > 0) { + full_boxes.AT(ml).AT(rl-1).clear(); + } + if (rl == h.reflevels()-1) { + full_boxes.AT(ml).AT(rl).clear(); + } + } + + } // for rl + + if (ml > 0) { + full_boxes.AT(ml-1).clear(); + } + if (ml == h.mglevels()-1) { + full_boxes.AT(ml).clear(); + } + + } // for ml + + + + // Output: + if (output_bboxes or there_was_an_error) { + + cout << eol; + cout << "memoryof(gh)=" << memoryof(h) << eol; + cout << "memoryof(dh)=" << memoryof(*this) << eol; + cout << "memoryof(dh.boxes)=" << memoryof(boxes) << eol; + cout << "memoryof(dh.fast_boxes)=" << memoryof(fast_boxes) << eol; + int gfcount = 0; + size_t gfmemory = 0; + for (list<ggf*>::const_iterator + gfi = gfs.begin(); gfi != gfs.end(); ++ gfi) + { + ++ gfcount; + gfmemory += memoryof(**gfi); + } + cout << "#gfs=" << gfcount << eol; + cout << "memoryof(gfs)=" << gfmemory << eol; } // if output_bboxes if (there_was_an_error) { CCTK_WARN (CCTK_WARN_ABORT, - "The grid structure is inconsistent. " - "It is impossible to continue."); + "The grid structure is inconsistent. It is impossible to continue."); } total.stop (0); + timer.stop(); +} + + + +void +dh:: +broadcast_schedule (vector<fast_dboxes> & fast_level_otherprocs, + fast_dboxes & fast_level, + srpvect fast_dboxes::* const schedule_item) +{ + // cerr << "QQQ: broadcast_schedule[1]" << endl; + static Carpet::Timer timer_bs1 ("CarpetLib::dh::bs1"); + timer_bs1.start(); + vector <srpvect> send (dist::size()); + for (int p=0; p<dist::size(); ++p) { + swap (send.AT(p), fast_level_otherprocs.AT(p).*schedule_item); + } + timer_bs1.stop(); + + static Carpet::Timer timer_bs2 ("CarpetLib::dh::bs2"); + timer_bs2.start(); + srpvect const recv = alltoallv1 (dist::comm(), send); + timer_bs2.stop(); + + static Carpet::Timer timer_bs3 ("CarpetLib::dh::bs3"); + timer_bs3.start(); + (fast_level.*schedule_item).insert + ((fast_level.*schedule_item).end(), recv.begin(), recv.end()); + timer_bs3.stop(); + // cerr << "QQQ: broadcast_schedule[2]" << endl; +} + + + +void +dh:: +regrid_free (bool const do_init) +{ + if (do_init) { + for (int ml = 0; ml < h.mglevels(); ++ ml) { + for (int rl = 0; rl < h.reflevels(); ++ rl) { + fast_boxes.AT(ml).AT(rl).fast_old2new_sync_sendrecv.clear(); + fast_boxes.AT(ml).AT(rl).fast_old2new_ref_prol_sendrecv.clear(); + } + } + } else { + for (int ml = 0; ml < h.mglevels(); ++ ml) { + for (int rl = 0; rl < h.reflevels(); ++ rl) { + assert (fast_boxes.AT(ml).AT(rl).fast_old2new_sync_sendrecv.empty()); + assert (fast_boxes.AT(ml).AT(rl).fast_old2new_ref_prol_sendrecv.empty()); + } + } + } } @@ -1004,7 +1397,7 @@ recompose (int const rl, bool const do_prolongate) assert (rl>=0 and rl<h.reflevels()); - static Timer timer ("dh::recompose"); + static Carpet::Timer timer ("CarpetLib::dh::recompose"); timer.start (); for (list<ggf*>::iterator f=gfs.begin(); f!=gfs.end(); ++f) { @@ -1017,11 +1410,21 @@ recompose (int const rl, bool const do_prolongate) for (list<ggf*>::iterator f=gfs.begin(); f!=gfs.end(); ++f) { (*f)->recompose_allocate (rl); } +#warning "TODO: If this works, rename do_prolongate to do_init here, and remove the do_prolongate parameter from ggf::recompose_fill" +#if 0 for (comm_state state; not state.done(); state.step()) { for (list<ggf*>::iterator f=gfs.begin(); f!=gfs.end(); ++f) { (*f)->recompose_fill (state, rl, do_prolongate); } } +#endif + if (do_prolongate) { + for (comm_state state; not state.done(); state.step()) { + for (list<ggf*>::iterator f=gfs.begin(); f!=gfs.end(); ++f) { + (*f)->recompose_fill (state, rl, true); + } + } + } for (list<ggf*>::iterator f=gfs.begin(); f!=gfs.end(); ++f) { (*f)->recompose_free_old (rl); } @@ -1030,33 +1433,144 @@ recompose (int const rl, bool const do_prolongate) // but requires less memory. This is the default. for (list<ggf*>::iterator f=gfs.begin(); f!=gfs.end(); ++f) { (*f)->recompose_allocate (rl); +#if 0 for (comm_state state; not state.done(); state.step()) { (*f)->recompose_fill (state, rl, do_prolongate); } +#endif + if (do_prolongate) { + for (comm_state state; not state.done(); state.step()) { + (*f)->recompose_fill (state, rl, true); + } + } (*f)->recompose_free_old (rl); } } - timer.stop (0); + timer.stop (); } // Grid function management -void +dh::ggf_handle dh:: add (ggf * const f) { CHECKPOINT; - gfs.push_back (f); + return gfs.insert (gfs.end(), f); } void dh:: -remove (ggf * const f) +erase (ggf_handle const fi) { CHECKPOINT; - gfs.remove (f); + gfs.erase (fi); +} + + + +// Equality + +bool +dh::full_dboxes:: +operator== (full_dboxes const & b) const +{ + return + exterior == b.exterior and + all(all(is_outer_boundary == b.is_outer_boundary)) and + outer_boundaries == b.outer_boundaries and + communicated == b.communicated and + boundaries == b.boundaries and + owned == b.owned and + buffers == b.buffers and + active == b.active and + sync == b.sync and + bndref == b.bndref and + ghosts == b.ghosts and + interior == b.interior; +} + + + +// MPI datatypes + +MPI_Datatype +mpi_datatype (dh::dboxes const &) +{ + static bool initialised = false; + static MPI_Datatype newtype; + if (not initialised) { + static dh::dboxes s; +#define ENTRY(type, name) \ + { \ + sizeof s.name / sizeof(type), /* count elements */ \ + (char*)&s.name - (char*)&s, /* offsetof doesn't work (why?) */ \ + dist::mpi_datatype<type>(), /* find MPI datatype */ \ + STRINGIFY(name), /* field name */ \ + STRINGIFY(type), /* type name */ \ + } + dist::mpi_struct_descr_t const descr[] = { + ENTRY(int, exterior), + ENTRY(int, owned), + ENTRY(int, interior), + ENTRY(dh::dboxes::size_type, exterior_size), + ENTRY(dh::dboxes::size_type, owned_size), + ENTRY(dh::dboxes::size_type, active_size), + {1, sizeof s, MPI_UB, "MPI_UB", "MPI_UB"} + }; +#undef ENTRY + newtype = + dist::create_mpi_datatype (sizeof descr / sizeof descr[0], descr, + "dh::dboxes", sizeof s); +#if 0 + int type_size; + MPI_Type_size (newtype, & type_size); + assert (type_size <= sizeof s); + MPI_Aint type_lb, type_ub; + MPI_Type_lb (newtype, & type_lb); + MPI_Type_ub (newtype, & type_ub); + assert (type_ub - type_lb == sizeof s); +#endif + initialised = true; + } + return newtype; +} + +MPI_Datatype +mpi_datatype (dh::fast_dboxes const &) +{ + static bool initialised = false; + static MPI_Datatype newtype; + if (not initialised) { + static dh::fast_dboxes s; +#define ENTRY(type, name) \ + { \ + sizeof s.name / sizeof(type), /* count elements */ \ + (char*)&s.name - (char*)&s, /* offsetof doesn't work (why?) */ \ + dist::mpi_datatype<type>(), /* find MPI datatype */ \ + STRINGIFY(name), /* field name */ \ + STRINGIFY(type), /* type name */ \ + } + dist::mpi_struct_descr_t const descr[] = { + ENTRY (dh::srpvect, fast_mg_rest_sendrecv), + ENTRY (dh::srpvect, fast_mg_prol_sendrecv), + ENTRY (dh::srpvect, fast_ref_prol_sendrecv), + ENTRY (dh::srpvect, fast_ref_rest_sendrecv), + ENTRY (dh::srpvect, fast_sync_sendrecv), + ENTRY (dh::srpvect, fast_ref_bnd_prol_sendrecv), + ENTRY (dh::srpvect, fast_old2new_sync_sendrecv), + ENTRY (dh::srpvect, fast_old2new_ref_prol_sendrecv), + {1, sizeof s, MPI_UB, "MPI_UB", "MPI_UB"} + }; +#undef ENTRY + newtype = + dist::create_mpi_datatype (sizeof descr / sizeof descr[0], descr, + "dh::fast_dboxes", sizeof s); + initialised = true; + } + return newtype; } @@ -1069,22 +1583,48 @@ memory () const { return + sizeof alldhi + // memoryof (alldhi) + + sizeof & h + // memoryof (& h) + + sizeof gh_handle + // memoryof (gh_handle) + memoryof (ghost_width) + memoryof (buffer_width) + memoryof (prolongation_order_space) + memoryof (boxes) + memoryof (fast_boxes) + - memoryof (fast_oldboxes) + memoryof (gfs); } size_t +dh:: +allmemory () +{ + size_t mem = memoryof(alldh); + for (list<dh*>::const_iterator + dhi = alldh.begin(); dhi != alldh.end(); ++ dhi) + { + mem += memoryof(**dhi); + } + return mem; +} + +size_t dh::dboxes:: memory () const { return memoryof (exterior) + + memoryof (owned) + + memoryof (interior); +} + +size_t +dh::full_dboxes:: +memory () + const +{ + return + memoryof (exterior) + memoryof (is_outer_boundary) + memoryof (outer_boundaries) + memoryof (communicated) + @@ -1116,6 +1656,135 @@ memory () +// Input + +istream & +dh::dboxes:: +input (istream & is) +{ + // Regions: + try { + skipws (is); + consume (is, "dh::dboxes:{"); + skipws (is); + consume (is, "exterior:"); + is >> exterior; + exterior_size = exterior.size(); + skipws (is); + consume (is, "owned:"); + is >> owned; + owned_size = owned.size(); + skipws (is); + consume (is, "interior:"); + is >> interior; + skipws (is); + consume (is, "active_size:"); + is >> active_size; + skipws (is); + consume (is, "}"); + } catch (input_error & err) { + cout << "Input error while reading a dh::full_dboxes" << endl; + throw err; + } + return is; +} + +istream & +dh::full_dboxes:: +input (istream & is) +{ + // Regions: + try { + skipws (is); + consume (is, "dh::full_dboxes:{"); + skipws (is); + consume (is, "exterior:"); + is >> exterior; + skipws (is); + consume (is, "is_outer_boundary:"); + is >> is_outer_boundary; + skipws (is); + consume (is, "outer_boundaries:"); + is >> outer_boundaries; + skipws (is); + consume (is, "communicated:"); + is >> communicated; + skipws (is); + consume (is, "boundaries:"); + is >> boundaries; + skipws (is); + consume (is, "owned:"); + is >> owned; + skipws (is); + consume (is, "buffers:"); + is >> buffers; + skipws (is); + consume (is, "active:"); + is >> active; + skipws (is); + consume (is, "sync:"); + is >> sync; + skipws (is); + consume (is, "bndref:"); + is >> bndref; + skipws (is); + consume (is, "ghosts:"); + is >> ghosts; + skipws (is); + consume (is, "interior:"); + is >> interior; + skipws (is); + consume (is, "}"); + } catch (input_error & err) { + cout << "Input error while reading a dh::full_dboxes" << endl; + throw err; + } + return is; +} + +istream & +dh::fast_dboxes:: +input (istream & is) +{ + // Communication schedule: + try { + skipws (is); + consume (is, "dh::fast_dboxes:{"); + skipws (is); + consume (is, "fast_mg_rest_sendrecv:"); + is >> fast_mg_rest_sendrecv; + skipws (is); + consume (is, "fast_mg_prol_sendrecv:"); + is >> fast_mg_prol_sendrecv; + skipws (is); + consume (is, "fast_ref_prol_sendrecv:"); + is >> fast_ref_prol_sendrecv; + skipws (is); + consume (is, "fast_ref_rest_sendrecv:"); + is >> fast_ref_rest_sendrecv; + skipws (is); + consume (is, "fast_sync_sendrecv:"); + is >> fast_sync_sendrecv; + skipws (is); + consume (is, "fast_ref_bnd_prol_sendrecv:"); + is >> fast_ref_bnd_prol_sendrecv; + skipws (is); + consume (is, "fast_old2new_sync_sendrecv:"); + is >> fast_old2new_sync_sendrecv; + skipws (is); + consume (is, "fast_old2new_ref_prol_sendrecv:"); + is >> fast_old2new_ref_prol_sendrecv; + skipws (is); + consume (is, "}"); + } catch (input_error & err) { + cout << "Input error while reading a dh::fast_dboxes" << endl; + throw err; + } + return is; +} + + + // Output ostream & @@ -1149,19 +1818,35 @@ output (ostream & os) const { // Regions: - os << "dh::dboxes:" << eol; - os << "exterior:" << exterior << eol; - os << "is_outer_boundary:" << is_outer_boundary << eol; - os << "outer_boundaries:" << outer_boundaries << eol; - os << "communicated:" << communicated << eol; - os << "boundaries:" << boundaries << eol; - os << "owned:" << owned << eol; - os << "buffers:" << buffers << eol; - os << "active:" << active << eol; - os << "sync:" << sync << eol; - os << "bndref:" << bndref << eol; - os << "ghosts:" << ghosts << eol; - os << "interior:" << interior << eol; + os << "dh::dboxes:{" << eol + << " exterior: " << exterior << eol + << " owned: " << owned << eol + << " interior: " << interior << eol + << " active_size: " << active_size << eol + << "}" << eol; + return os; +} + +ostream & +dh::full_dboxes:: +output (ostream & os) + const +{ + // Regions: + os << "dh::full_dboxes:{" << eol + << " exterior: " << exterior << eol + << " is_outer_boundary: " << is_outer_boundary << eol + << " outer_boundaries: " << outer_boundaries << eol + << " communicated: " << communicated << eol + << " boundaries: " << boundaries << eol + << " owned: " << owned << eol + << " buffers: " << buffers << eol + << " active: " << active << eol + << " sync: " << sync << eol + << " bndref: " << bndref << eol + << " ghosts: " << ghosts << eol + << " interior: " << interior << eol + << "}" << eol; return os; } @@ -1171,14 +1856,15 @@ output (ostream & os) const { // Communication schedule: - os << "dh::fast_dboxes:" << eol; - os << "fast_mg_rest_sendrecv: " << fast_mg_rest_sendrecv << eol; - os << "fast_mg_prol_sendrecv: " << fast_mg_prol_sendrecv << eol; - os << "fast_ref_prol_sendrecv: " << fast_ref_prol_sendrecv << eol; - os << "fast_ref_rest_sendrecv: " << fast_ref_rest_sendrecv << eol; - os << "fast_sync_sendrecv: " << fast_sync_sendrecv << eol; - os << "fast_ref_bnd_prol_sendrecv: " << fast_ref_bnd_prol_sendrecv << eol; - os << "fast_old2new_sync_sendrecv:" << fast_old2new_sync_sendrecv << eol; - os << "fast_old2new_ref_prol_sendrecv:" << fast_old2new_ref_prol_sendrecv << eol; + os << "dh::fast_dboxes:{" << eol + << " fast_mg_rest_sendrecv: " << fast_mg_rest_sendrecv << eol + << " fast_mg_prol_sendrecv: " << fast_mg_prol_sendrecv << eol + << " fast_ref_prol_sendrecv: " << fast_ref_prol_sendrecv << eol + << " fast_ref_rest_sendrecv: " << fast_ref_rest_sendrecv << eol + << " fast_sync_sendrecv: " << fast_sync_sendrecv << eol + << " fast_ref_bnd_prol_sendrecv: " << fast_ref_bnd_prol_sendrecv << eol + << " fast_old2new_sync_sendrecv: " << fast_old2new_sync_sendrecv << eol + << " fast_old2new_ref_prol_sendrecv: " << fast_old2new_ref_prol_sendrecv << eol + << "}" << eol; return os; } diff --git a/Carpet/CarpetLib/src/dh.hh b/Carpet/CarpetLib/src/dh.hh index 078e0b725..93a29f83b 100644 --- a/Carpet/CarpetLib/src/dh.hh +++ b/Carpet/CarpetLib/src/dh.hh @@ -24,9 +24,13 @@ class ggf; class dh; + // A data hierarchy (grid hierarchy plus ghost zones) class dh { + static list<dh*> alldh; + list<dh*>::iterator alldhi; + // Types public: typedef list<ibbox> iblist; @@ -42,6 +46,23 @@ public: // Region description: ibbox exterior; // whole region (including boundaries) + ibbox owned; // evolved in time + ibbox interior; // interior (without ghost zones) + + // Region statistics: + typedef ibbox::size_type size_type; + size_type exterior_size, owned_size, active_size; + + size_t memory () const CCTK_ATTRIBUTE_PURE; + istream & input (istream & is); + ostream & output (ostream & os) const; + }; + + struct full_dboxes { + + // Complete region description: + + ibbox exterior; // whole region (including boundaries) b2vect is_outer_boundary; ibset outer_boundaries; // outer boundary @@ -61,7 +82,14 @@ public: ibset ghosts; // ghost zones, as seen from Cactus ibbox interior; // interior (without ghost zones) - size_t memory () const; + bool operator== (full_dboxes const & b) const; + bool operator!= (full_dboxes const & b) const + { + return not operator==(b); + } + + size_t memory () const CCTK_ATTRIBUTE_PURE; + istream & input (istream& is); ostream & output (ostream & os) const; }; @@ -78,10 +106,19 @@ public: // Regridding schedule: + bool do_init; // the srpvects below are only defined + // if this is true srpvect fast_old2new_sync_sendrecv; srpvect fast_old2new_ref_prol_sendrecv; - size_t memory () const; + bool operator== (fast_dboxes const & b) const CCTK_ATTRIBUTE_PURE; + bool operator!= (fast_dboxes const & b) const + { + return not operator==(b); + } + + size_t memory () const CCTK_ATTRIBUTE_PURE; + istream & input (istream & is); ostream & output (ostream & os) const; }; @@ -91,8 +128,11 @@ private: typedef vector<cboxes> rboxes; // ... for each refinement level typedef vector<rboxes> mboxes; // ... for each multigrid level - typedef vector<fast_dboxes> fast_cboxes; // ... for each component - typedef vector<fast_cboxes> fast_rboxes; // ... for each refinement level + typedef vector<full_dboxes> full_cboxes; // ... for each component + typedef vector<full_cboxes> full_rboxes; // ... for each refinement level + typedef vector<full_rboxes> full_mboxes; // ... for each multigrid level + + typedef vector<fast_dboxes> fast_rboxes; // ... for each refinement level typedef vector<fast_rboxes> fast_mboxes; // ... for each multigrid level @@ -104,16 +144,17 @@ public: // should be readonly // Fields gh & h; // hierarchy + gh::dh_handle gh_handle; + i2vect ghost_width; // number of ghost zones i2vect buffer_width; // number of buffer zones int prolongation_order_space; // order of spatial prolongation operator mboxes boxes; // grid hierarchy - mboxes oldboxes; // old grid hierarchy, used during regridding fast_mboxes fast_boxes; // grid hierarchy - fast_mboxes fast_oldboxes; + typedef list<ggf*>::iterator ggf_handle; list<ggf*> gfs; // list of all grid functions public: @@ -127,51 +168,101 @@ public: ~dh (); // Helpers - int prolongation_stencil_size () const; + int prolongation_stencil_size () const CCTK_ATTRIBUTE_CONST; // Modifiers - void regrid (); + void regrid (bool do_init); + void regrid_free (bool do_init); void recompose (int rl, bool do_prolongate); private: - int this_proc (int rl, int c) const; - bool on_this_proc (int rl, int c) const; - bool on_this_proc (int rl, int c, int cc) const; - int this_oldproc (int rl, int c) const; - bool on_this_oldproc (int rl, int c) const; + int this_proc (int rl, int c) const CCTK_ATTRIBUTE_PURE; + bool on_this_proc (int rl, int c) const CCTK_ATTRIBUTE_PURE; + bool on_this_proc (int rl, int c, int cc) const CCTK_ATTRIBUTE_PURE; + int this_oldproc (int rl, int c) const CCTK_ATTRIBUTE_PURE; + bool on_this_oldproc (int rl, int c) const CCTK_ATTRIBUTE_PURE; + + static + void + broadcast_schedule (vector<fast_dboxes> & fast_level_otherprocs, + fast_dboxes & fast_level, + srpvect fast_dboxes::* const schedule_item); public: // Grid function management - void add (ggf * f); - void remove (ggf * f); + ggf_handle add (ggf * f); + void erase (ggf_handle fi); // Output - size_t memory () const; + size_t memory () const CCTK_ATTRIBUTE_PURE; + static size_t allmemory () CCTK_ATTRIBUTE_PURE; ostream & output (ostream & os) const; }; +MPI_Datatype mpi_datatype (dh::dboxes const &) CCTK_ATTRIBUTE_CONST; +MPI_Datatype mpi_datatype (dh::fast_dboxes const &); +namespace dist { + template<> inline MPI_Datatype mpi_datatype<dh::dboxes> () + CCTK_ATTRIBUTE_CONST; + template<> inline MPI_Datatype mpi_datatype<dh::dboxes> () + { dh::dboxes dummy; return mpi_datatype(dummy); } + template<> inline MPI_Datatype mpi_datatype<dh::fast_dboxes> () + CCTK_ATTRIBUTE_CONST; + template<> inline MPI_Datatype mpi_datatype<dh::fast_dboxes> () + { dh::fast_dboxes dummy; return mpi_datatype(dummy); } +} + +inline size_t memoryof (dh::dboxes const & b) CCTK_ATTRIBUTE_PURE; inline size_t memoryof (dh::dboxes const & b) { return b.memory (); } +inline size_t memoryof (dh::full_dboxes const & b) CCTK_ATTRIBUTE_PURE; +inline size_t memoryof (dh::full_dboxes const & b) +{ + return b.memory (); +} + +inline size_t memoryof (dh::fast_dboxes const & b) CCTK_ATTRIBUTE_PURE; inline size_t memoryof (dh::fast_dboxes const & b) { return b.memory (); } +inline size_t memoryof (dh const & d) CCTK_ATTRIBUTE_PURE; inline size_t memoryof (dh const & d) { return d.memory (); } +inline istream & operator>> (istream & is, dh::dboxes & b) +{ + return b.input (is); +} + +inline istream & operator>> (istream & is, dh::full_dboxes & b) +{ + return b.input (is); +} + +inline istream & operator>> (istream & is, dh::fast_dboxes & b) +{ + return b.input (is); +} + inline ostream & operator<< (ostream & os, dh::dboxes const & b) { return b.output (os); } +inline ostream & operator<< (ostream & os, dh::full_dboxes const & b) +{ + return b.output (os); +} + inline ostream & operator<< (ostream & os, dh::fast_dboxes const & b) { return b.output (os); diff --git a/Carpet/CarpetLib/src/dist.cc b/Carpet/CarpetLib/src/dist.cc index c870990fb..89acacfad 100644 --- a/Carpet/CarpetLib/src/dist.cc +++ b/Carpet/CarpetLib/src/dist.cc @@ -1,4 +1,5 @@ #include <cassert> +#include <typeinfo> #include <mpi.h> #ifdef _OPENMP @@ -9,6 +10,8 @@ #include "cctk_Parameters.h" #include "defs.hh" +#include "limits.hh" +#include "startup_time.hh" #include "dist.hh" @@ -20,9 +23,11 @@ namespace dist { MPI_Comm comm_ = MPI_COMM_NULL; - MPI_Datatype mpi_complex8; - MPI_Datatype mpi_complex16; - MPI_Datatype mpi_complex32; + MPI_Datatype mpi_complex8 = MPI_DATATYPE_NULL; + MPI_Datatype mpi_complex16 = MPI_DATATYPE_NULL; + MPI_Datatype mpi_complex32 = MPI_DATATYPE_NULL; + + int total_num_threads_ = -1; void init (int& argc, char**& argv) { MPI_Init (&argc, &argv); @@ -34,19 +39,32 @@ namespace dist { #ifdef HAVE_CCTK_REAL4 CCTK_REAL4 dummy4; - MPI_Type_contiguous (2, datatype(dummy4), &mpi_complex8); + MPI_Type_contiguous (2, mpi_datatype(dummy4), &mpi_complex8); MPI_Type_commit (&mpi_complex8); #endif #ifdef HAVE_CCTK_REAL8 CCTK_REAL8 dummy8; - MPI_Type_contiguous (2, datatype(dummy8), &mpi_complex16); + MPI_Type_contiguous (2, mpi_datatype(dummy8), &mpi_complex16); MPI_Type_commit (&mpi_complex16); #endif #ifdef HAVE_CCTK_REAL16 CCTK_REAL16 dummy16; - MPI_Type_contiguous (2, datatype(dummy16), &mpi_complex32); + MPI_Type_contiguous (2, mpi_datatype(dummy16), &mpi_complex32); MPI_Type_commit (&mpi_complex32); #endif + + // Output startup time + // cerr << "QQQ: pseudoinit[1]" << endl; + CarpetLib::output_startup_time (); + // cerr << "QQQ: pseudoinit[2]" << endl; + + // Check and/or modify system limits + CarpetLib::set_system_limits (); + // cerr << "QQQ: pseudoinit[3]" << endl; + + // cerr << "QQQ: pseudoinit[4]" << endl; + collect_total_num_threads (); + // cerr << "QQQ: pseudoinit[5]" << endl; } void finalize () { @@ -56,10 +74,27 @@ namespace dist { // Create an MPI datatype from a C datatype description - void create_mpi_datatype (size_t const count, - mpi_struct_descr_t const descr[], - MPI_Datatype & newtype) + + ostream& operator<< (ostream& os, mpi_struct_descr_t const& descr) { + int type_size; + MPI_Type_size (descr.type, &type_size); + os << "{" + << "blocklength:" << descr.blocklength << "," + << "displacement:" << descr.displacement << "," + << "type:" << descr.type << "," + << "type_size:" << type_size << "," + << "field_name:" << descr.field_name << "," + << "type_name:" << descr.type_name + << "}"; + return os; + } + + MPI_Datatype create_mpi_datatype (size_t const count, + mpi_struct_descr_t const descr[], + char const * const name, size_t const size) + { + DECLARE_CCTK_PARAMETERS; int blocklengths[count]; MPI_Aint displacements[count]; MPI_Datatype types[count]; @@ -68,10 +103,128 @@ namespace dist { displacements[n] = descr[n].displacement; types [n] = descr[n].type; } + MPI_Datatype newtype; MPI_Type_struct (count, blocklengths, displacements, types, &newtype); MPI_Type_commit (&newtype); + if (verbose) { + CCTK_VInfo (CCTK_THORNSTRING, + "Creating new MPI type for C type %s:", name); + cout << " Type has " << count << " components" << endl; + for (size_t n=0; n<count; ++n) { + cout << " [" << n << "]: " << descr[n] << endl; + } + cout << " New MPI type ID is " << newtype << endl; + int datatypesize; + MPI_Type_size (newtype, &datatypesize); + cout << " C type size is " << size << endl; + cout << " MPI type size is " << datatypesize << endl; + } + return newtype; + } + +#if 0 + + ostream& + generic_mpi_datatype_t::field_t::output (ostream& os) const + { + int type_size; + MPI_Type_size (mpi_datatype, &type_size); + os << "{" + << "offset:" << offset << "," + << "count:" << count << "," + << "mpi_datatype:" << mpi_datatype << "," + << "type_size:" << type_size << "," + << "field_name:" << field_name << "," + << "type_name:" << type_name + << "}"; + return os; + } + + generic_mpi_datatype_t::generic_mpi_datatype_t (string const type_name_) + : type_name (type_name_), type_is_committed (false) + { + } + + template <typename U> + void + generic_mpi_datatype_t::add_field (size_t const offset, size_t const count, + string const field_name) + { + assert (not type_is_committed); + U u; + entries.push_back (field_t (offset, count, mpi_datatype(u), + field_name, typeid(U).name())); + } + + void + generic_mpi_datatype_t::commit () + { + DECLARE_CCTK_PARAMETERS; + + // Debug output + if (verbose) { + CCTK_VInfo (CCTK_THORNSTRING, + "Creating new MPI type for C type %s:", type_name.c_str()); + cout << *this; + } + + assert (not type_is_committed); + type_is_committed = true; + + // Out of caution -- this could be allowed + assert (not entries.empty()); + + // Create MPI type + size_t const count = entries.size(); + int blocklengths [count+1]; + MPI_Aint displacements[count+1]; + MPI_Datatype types [count+1]; + { + size_t n = 0; + for (list<field_t>::const_iterator ifield = + entries.begin(); ifield!=entries.end(); ++ifield, ++n) + { + blocklengths [n] = ifield->count; + displacements[n] = ifield->offset; + types [n] = ifield->mpi_datatype; + } + assert (n == count); + // Add MPI_UB + blocklengths [n] = 1; + displacements[n] = type_size(); + types [n] = MPI_UB; + } + + MPI_Type_struct + (count+1, blocklengths, displacements, types, &mpi_datatype); + MPI_Type_commit (&mpi_datatype); + } + + ostream& + generic_mpi_datatype_t::output (ostream& os) const + { + cout << "Datatype: " << type_name << endl; + size_t const count = entries.size(); + cout << " Type has " << count << " components" << endl; + { + size_t n = 0; + for (list<field_t>::const_iterator ifield = + entries.begin(); ifield!=entries.end(); ++ifield, ++n) + { + cout << " [" << n << "]: " << *ifield << endl; + } + assert (n == count); + } + cout << " MPI type ID: " << mpi_datatype << endl; + int datatypesize; + MPI_Type_size (mpi_datatype, &datatypesize); + cout << " C type size: " << size << endl; + cout << " MPI type size: " << datatypesize << endl; + return os; } +#endif + void checkpoint (const char* file, int line) { @@ -105,15 +258,48 @@ namespace dist { } // Global number of threads - int total_num_threads_worker () + void collect_total_num_threads () { - int total_num_threads_; int const mynthreads = num_threads(); + // cerr << "QQQ: collect_total_num_threads[1]" << endl; MPI_Allreduce (const_cast <int *> (& mynthreads), & total_num_threads_, 1, MPI_INT, MPI_SUM, comm()); + // cerr << "QQQ: collect_total_num_threads[2]" << endl; assert (total_num_threads_ >= size()); - return total_num_threads_; } - + + + + char const * c_datatype_name (unsigned const type) + { + switch (type) { + case 0: return "char"; + case 1: return "signed char"; + case 2: return "unsigned char"; + case 3: return "short"; + case 4: return "unsigned short"; + case 5: return "int"; + case 6: return "unsigned int"; + case 7: return "long"; + case 8: return "unsigned long"; + case 9: return "long long"; + case 10: return "unsigned long long"; + case 11: return "float"; + case 12: return "double"; + case 13: return "long double"; +#ifdef HAVE_CCTK_COMPLEX8 + case 14: return "CCTK_COMPLEX8"; +#endif +#ifdef HAVE_CCTK_COMPLEX16 + case 15: return "CCTK_COMPLEX16"; +#endif +#ifdef HAVE_CCTK_COMPLEX32 + case 16: return "CCTK_COMPLEX32"; +#endif + } + assert (0); abort(); + return NULL; + } + } // namespace dist diff --git a/Carpet/CarpetLib/src/dist.hh b/Carpet/CarpetLib/src/dist.hh index 6868d85ce..091da31e4 100644 --- a/Carpet/CarpetLib/src/dist.hh +++ b/Carpet/CarpetLib/src/dist.hh @@ -4,6 +4,7 @@ #include <cassert> #include <cstdio> #include <cstdlib> +#include <iostream> #include <mpi.h> #ifdef _OPENMP @@ -26,20 +27,102 @@ namespace dist { extern MPI_Datatype mpi_complex16; extern MPI_Datatype mpi_complex32; + extern int total_num_threads_; + void init (int& argc, char**& argv); void pseudoinit (MPI_Comm const c); void finalize (); + + // Create MPI datatypes from C structures + struct mpi_struct_descr_t { int blocklength; MPI_Aint displacement; MPI_Datatype type; + char const * field_name; + char const * type_name; + }; + + ostream& operator<< (ostream& os, mpi_struct_descr_t const& descr); + + MPI_Datatype create_mpi_datatype (size_t const count, + mpi_struct_descr_t const descr[], + char const * name, size_t size); +#if 0 + + class generic_mpi_datatype_t { + + string const type_name; + virtual size_t type_size() const = 0; + + struct field_t { + size_t offset; + size_t count; + MPI_Datatype mpi_datatype; + string field_name; + string type_name; + field_t (size_t const offset_, + size_t const count_, + MPI_Datatype const mpi_datatype_, + string const field_name_, + string const type_name_) + : offset(offset_), + count(count_), + mpi_datatype(mpi_datatype_), + field_name(field_name_), + type_name(type_name_) + { + } + ostream& output (ostream& os) const; + }; + friend ostream& operator<< (ostream& os, + generic_mpi_datatype_t::field_t const& field); + + list<field_t> entries; + + bool type_is_committed; + MPI_Datatype mpi_datatype; + + public: + + generic_mpi_datatype_t (string const type_name_); + + template <typename U> + void add_field (size_t offset, size_t count, string field_name); + + void commit (); + + MPI_Datatype get () const + { + assert (type_is_committed); + return mpi_datatype; + } + + ostream& output (ostream& os) const; + }; + + template <typename T> + class mpi_datatype_t: public generic_mpi_datatype_t { + virtual size_t type_size() const + { + return sizeof(T); + } }; + + inline ostream& operator<< (ostream& os, + generic_mpi_datatype_t::field_t const& field) + { + return field.output(os); + } - void create_mpi_datatype (size_t const count, - mpi_struct_descr_t const descr[], - MPI_Datatype & newtype); + inline ostream& operator<< (ostream& os, generic_mpi_datatype_t const& type) + { + return type.output(os); + } + +#endif @@ -52,18 +135,21 @@ namespace dist { // Information about the communicator // Return the communicator + inline MPI_Comm comm () CCTK_ATTRIBUTE_CONST; inline MPI_Comm comm () { return comm_; } // Always return a good communicator + inline MPI_Comm goodcomm () CCTK_ATTRIBUTE_CONST; inline MPI_Comm goodcomm () { return comm_ != MPI_COMM_NULL ? comm_ : MPI_COMM_WORLD; } // Rank in the communicator (this processor's number, 0 .. size-1) + inline int rank () CCTK_ATTRIBUTE_CONST; inline int rank () { static int rank_ = -1; @@ -72,6 +158,7 @@ namespace dist { } // Size of the communicator + inline int size () CCTK_ATTRIBUTE_CONST; inline int size () { static int size_ = -1; @@ -83,6 +170,7 @@ namespace dist { void set_num_threads (int num_threads); // Local number of threads + inline int num_threads () CCTK_ATTRIBUTE_CONST; inline int num_threads () { static int num_threads_ = -1; @@ -98,13 +186,10 @@ namespace dist { } // Global number of threads - int total_num_threads_worker (); + void collect_total_num_threads (); + inline int total_num_threads () CCTK_ATTRIBUTE_CONST; inline int total_num_threads () { - static int total_num_threads_ = -1; - if (total_num_threads_ == -1) { - total_num_threads_ = total_num_threads_worker(); - } return total_num_threads_; } @@ -114,168 +199,248 @@ namespace dist { // C Datatype helpers // Map a C datatype to a 0-based index running up to c_ndatatypes(). ///////////////////////////////////////////////////////////////////////// + inline unsigned int c_datatype (const char&) CCTK_ATTRIBUTE_CONST; inline unsigned int c_datatype (const char&) { return 0; } - inline unsigned int c_datatype (const signed char&) + inline unsigned int c_datatype (const signed char&) CCTK_ATTRIBUTE_CONST; + inline unsigned int c_datatype (const signed char&) { return 1; } + inline unsigned int c_datatype (const unsigned char&) CCTK_ATTRIBUTE_CONST; inline unsigned int c_datatype (const unsigned char&) { return 2; } + inline unsigned int c_datatype (const short&) CCTK_ATTRIBUTE_CONST; inline unsigned int c_datatype (const short&) { return 3; } + inline unsigned int c_datatype (const unsigned short&) CCTK_ATTRIBUTE_CONST; inline unsigned int c_datatype (const unsigned short&) { return 4; } + inline unsigned int c_datatype (const int&) CCTK_ATTRIBUTE_CONST; inline unsigned int c_datatype (const int&) { return 5; } + inline unsigned int c_datatype (const unsigned int&) CCTK_ATTRIBUTE_CONST; inline unsigned int c_datatype (const unsigned int&) { return 6; } + inline unsigned int c_datatype (const long&) CCTK_ATTRIBUTE_CONST; inline unsigned int c_datatype (const long&) { return 7; } + inline unsigned int c_datatype (const unsigned long&) CCTK_ATTRIBUTE_CONST; inline unsigned int c_datatype (const unsigned long&) { return 8; } + inline unsigned int c_datatype (const long long&) CCTK_ATTRIBUTE_CONST; inline unsigned int c_datatype (const long long&) { return 9; } - inline unsigned int c_datatype (const float&) + inline unsigned int c_datatype (const unsigned long long&) CCTK_ATTRIBUTE_CONST; + inline unsigned int c_datatype (const unsigned long long&) { return 10; } - inline unsigned int c_datatype (const double&) + inline unsigned int c_datatype (const float&) CCTK_ATTRIBUTE_CONST; + inline unsigned int c_datatype (const float&) { return 11; } - inline unsigned int c_datatype (const long double&) + inline unsigned int c_datatype (const double&) CCTK_ATTRIBUTE_CONST; + inline unsigned int c_datatype (const double&) { return 12; } + inline unsigned int c_datatype (const long double&) CCTK_ATTRIBUTE_CONST; + inline unsigned int c_datatype (const long double&) + { return 13; } + #ifdef HAVE_CCTK_COMPLEX8 + inline unsigned int c_datatype (const CCTK_COMPLEX8&) CCTK_ATTRIBUTE_CONST; inline unsigned int c_datatype (const CCTK_COMPLEX8&) - { return 13; } + { return 14; } #endif #ifdef HAVE_CCTK_COMPLEX16 + inline unsigned int c_datatype (const CCTK_COMPLEX16&) CCTK_ATTRIBUTE_CONST; inline unsigned int c_datatype (const CCTK_COMPLEX16&) - { return 14; } + { return 15; } #endif #ifdef HAVE_CCTK_COMPLEX32 + inline unsigned int c_datatype (const CCTK_COMPLEX32&) CCTK_ATTRIBUTE_CONST; inline unsigned int c_datatype (const CCTK_COMPLEX32&) - { return 15; } + { return 16; } #endif // keep this function's return code consistent with functions above + inline unsigned int c_ndatatypes () CCTK_ATTRIBUTE_CONST; inline unsigned int c_ndatatypes () - { return 16; } + { return 17; } template <typename T> unsigned int c_datatype () { abort(); } - template<> inline unsigned int c_datatype <char> () { return 0; } - template<> inline unsigned int c_datatype <signed char> () { return 1; } - template<> inline unsigned int c_datatype <unsigned char> () { return 2; } - template<> inline unsigned int c_datatype <short> () { return 3; } - template<> inline unsigned int c_datatype <unsigned short> () { return 4; } - template<> inline unsigned int c_datatype <int> () { return 5; } - template<> inline unsigned int c_datatype <unsigned int> () { return 6; } - template<> inline unsigned int c_datatype <long> () { return 7; } - template<> inline unsigned int c_datatype <unsigned long> () { return 8; } - template<> inline unsigned int c_datatype <long long> () { return 9; } - template<> inline unsigned int c_datatype <float> () { return 10; } - template<> inline unsigned int c_datatype <double> () { return 11; } - template<> inline unsigned int c_datatype <long double> () { return 12; } + template<> inline unsigned int c_datatype <char> () CCTK_ATTRIBUTE_CONST; + template<> inline unsigned int c_datatype <char> () { return 0; } + template<> inline unsigned int c_datatype <signed char> () CCTK_ATTRIBUTE_CONST; + template<> inline unsigned int c_datatype <signed char> () { return 1; } + template<> inline unsigned int c_datatype <unsigned char> () CCTK_ATTRIBUTE_CONST; + template<> inline unsigned int c_datatype <unsigned char> () { return 2; } + template<> inline unsigned int c_datatype <short> () CCTK_ATTRIBUTE_CONST; + template<> inline unsigned int c_datatype <short> () { return 3; } + template<> inline unsigned int c_datatype <unsigned short> () CCTK_ATTRIBUTE_CONST; + template<> inline unsigned int c_datatype <unsigned short> () { return 4; } + template<> inline unsigned int c_datatype <int> () CCTK_ATTRIBUTE_CONST; + template<> inline unsigned int c_datatype <int> () { return 5; } + template<> inline unsigned int c_datatype <unsigned int> () CCTK_ATTRIBUTE_CONST; + template<> inline unsigned int c_datatype <unsigned int> () { return 6; } + template<> inline unsigned int c_datatype <long> () CCTK_ATTRIBUTE_CONST; + template<> inline unsigned int c_datatype <long> () { return 7; } + template<> inline unsigned int c_datatype <unsigned long> () CCTK_ATTRIBUTE_CONST; + template<> inline unsigned int c_datatype <unsigned long> () { return 8; } + template<> inline unsigned int c_datatype <long long> () CCTK_ATTRIBUTE_CONST; + template<> inline unsigned int c_datatype <long long> () { return 9; } + template<> inline unsigned int c_datatype <unsigned long long> () CCTK_ATTRIBUTE_CONST; + template<> inline unsigned int c_datatype <unsigned long long> () { return 10; } + template<> inline unsigned int c_datatype <float> () CCTK_ATTRIBUTE_CONST; + template<> inline unsigned int c_datatype <float> () { return 11; } + template<> inline unsigned int c_datatype <double> () CCTK_ATTRIBUTE_CONST; + template<> inline unsigned int c_datatype <double> () { return 12; } + template<> inline unsigned int c_datatype <long double> () CCTK_ATTRIBUTE_CONST; + template<> inline unsigned int c_datatype <long double> () { return 13; } #ifdef HAVE_CCTK_COMPLEX8 - template<> inline unsigned int c_datatype <CCTK_COMPLEX8> () { return 13; } + template<> inline unsigned int c_datatype <CCTK_COMPLEX8> () CCTK_ATTRIBUTE_CONST; + template<> inline unsigned int c_datatype <CCTK_COMPLEX8> () { return 14; } #endif #ifdef HAVE_CCTK_COMPLEX16 - template<> inline unsigned int c_datatype <CCTK_COMPLEX16> () { return 14; } + template<> inline unsigned int c_datatype <CCTK_COMPLEX16> () CCTK_ATTRIBUTE_CONST; + template<> inline unsigned int c_datatype <CCTK_COMPLEX16> () { return 15; } #endif #ifdef HAVE_CCTK_COMPLEX32 - template<> inline unsigned int c_datatype <CCTK_COMPLEX32> () { return 15; } + template<> inline unsigned int c_datatype <CCTK_COMPLEX32> () CCTK_ATTRIBUTE_CONST; + template<> inline unsigned int c_datatype <CCTK_COMPLEX32> () { return 16; } #endif + // Map a C datatype index to a string + char const * c_datatype_name (unsigned type) CCTK_ATTRIBUTE_CONST; + ///////////////////////////////////////////////////////////////// // MPI Datatype helpers // Map a C datatype to its corresponding MPI datatype. ///////////////////////////////////////////////////////////////// - inline MPI_Datatype datatype (const char&) + inline MPI_Datatype mpi_datatype (const char&) CCTK_ATTRIBUTE_CONST; + inline MPI_Datatype mpi_datatype (const char&) { return MPI_CHAR; } - inline MPI_Datatype datatype (const signed char&) + inline MPI_Datatype mpi_datatype (const signed char&) CCTK_ATTRIBUTE_CONST; + inline MPI_Datatype mpi_datatype (const signed char&) { return MPI_CHAR; } - inline MPI_Datatype datatype (const unsigned char&) + inline MPI_Datatype mpi_datatype (const unsigned char&) CCTK_ATTRIBUTE_CONST; + inline MPI_Datatype mpi_datatype (const unsigned char&) { return MPI_UNSIGNED_CHAR; } - inline MPI_Datatype datatype (const short&) + inline MPI_Datatype mpi_datatype (const short&) CCTK_ATTRIBUTE_CONST; + inline MPI_Datatype mpi_datatype (const short&) { return MPI_SHORT; } - inline MPI_Datatype datatype (const unsigned short&) + inline MPI_Datatype mpi_datatype (const unsigned short&) CCTK_ATTRIBUTE_CONST; + inline MPI_Datatype mpi_datatype (const unsigned short&) { return MPI_UNSIGNED_SHORT; } - inline MPI_Datatype datatype (const int&) + inline MPI_Datatype mpi_datatype (const int&) CCTK_ATTRIBUTE_CONST; + inline MPI_Datatype mpi_datatype (const int&) { return MPI_INT; } - inline MPI_Datatype datatype (const unsigned int&) + inline MPI_Datatype mpi_datatype (const unsigned int&) CCTK_ATTRIBUTE_CONST; + inline MPI_Datatype mpi_datatype (const unsigned int&) { return MPI_UNSIGNED; } - inline MPI_Datatype datatype (const long&) + inline MPI_Datatype mpi_datatype (const long&) CCTK_ATTRIBUTE_CONST; + inline MPI_Datatype mpi_datatype (const long&) { return MPI_LONG; } - inline MPI_Datatype datatype (const unsigned long&) + inline MPI_Datatype mpi_datatype (const unsigned long&) CCTK_ATTRIBUTE_CONST; + inline MPI_Datatype mpi_datatype (const unsigned long&) { return MPI_UNSIGNED_LONG; } - inline MPI_Datatype datatype (const long long&) + inline MPI_Datatype mpi_datatype (const long long&) CCTK_ATTRIBUTE_CONST; + inline MPI_Datatype mpi_datatype (const long long&) { return MPI_LONG_LONG_INT; } - inline MPI_Datatype datatype (const float&) + inline MPI_Datatype mpi_datatype (const unsigned long long&) CCTK_ATTRIBUTE_CONST; + inline MPI_Datatype mpi_datatype (const unsigned long long&) + { return MPI_LONG_LONG_INT; } // should be unsigned, but this doesn't exist + + inline MPI_Datatype mpi_datatype (const float&) CCTK_ATTRIBUTE_CONST; + inline MPI_Datatype mpi_datatype (const float&) { return MPI_FLOAT; } - inline MPI_Datatype datatype (const double&) + inline MPI_Datatype mpi_datatype (const double&) CCTK_ATTRIBUTE_CONST; + inline MPI_Datatype mpi_datatype (const double&) { return MPI_DOUBLE; } - inline MPI_Datatype datatype (const long double&) + inline MPI_Datatype mpi_datatype (const long double&) CCTK_ATTRIBUTE_CONST; + inline MPI_Datatype mpi_datatype (const long double&) { return MPI_LONG_DOUBLE; } #ifdef HAVE_CCTK_COMPLEX8 - inline MPI_Datatype datatype (const CCTK_COMPLEX8&) + inline MPI_Datatype mpi_datatype (const CCTK_COMPLEX8&) CCTK_ATTRIBUTE_CONST; + inline MPI_Datatype mpi_datatype (const CCTK_COMPLEX8&) { return mpi_complex8; } #endif #ifdef HAVE_CCTK_COMPLEX16 - inline MPI_Datatype datatype (const CCTK_COMPLEX16&) + inline MPI_Datatype mpi_datatype (const CCTK_COMPLEX16&) CCTK_ATTRIBUTE_CONST; + inline MPI_Datatype mpi_datatype (const CCTK_COMPLEX16&) { return mpi_complex16; } #endif #ifdef HAVE_CCTK_COMPLEX32 - inline MPI_Datatype datatype (const CCTK_COMPLEX32&) + inline MPI_Datatype mpi_datatype (const CCTK_COMPLEX32&) CCTK_ATTRIBUTE_CONST; + inline MPI_Datatype mpi_datatype (const CCTK_COMPLEX32&) { return mpi_complex32; } #endif - template <typename T> MPI_Datatype datatype () { abort(); } - template<> inline MPI_Datatype datatype <char> () { return MPI_CHAR; } - template<> inline MPI_Datatype datatype <signed char> () { return MPI_CHAR; } - template<> inline MPI_Datatype datatype <unsigned char> () { return MPI_UNSIGNED_CHAR; } - template<> inline MPI_Datatype datatype <short> () { return MPI_SHORT; } - template<> inline MPI_Datatype datatype <unsigned short> () { return MPI_UNSIGNED_SHORT; } - template<> inline MPI_Datatype datatype <int> () { return MPI_INT; } - template<> inline MPI_Datatype datatype <unsigned int> () { return MPI_UNSIGNED; } - template<> inline MPI_Datatype datatype <long> () { return MPI_LONG; } - template<> inline MPI_Datatype datatype <unsigned long> () { return MPI_UNSIGNED_LONG; } - template<> inline MPI_Datatype datatype <long long> () { return MPI_LONG_LONG_INT; } - template<> inline MPI_Datatype datatype <float> () { return MPI_FLOAT; } - template<> inline MPI_Datatype datatype <double> () { return MPI_DOUBLE; } - template<> inline MPI_Datatype datatype <long double> () { return MPI_LONG_DOUBLE; } + template <typename T> MPI_Datatype mpi_datatype () { abort(); } + template<> inline MPI_Datatype mpi_datatype <char> () CCTK_ATTRIBUTE_CONST; + template<> inline MPI_Datatype mpi_datatype <char> () { return MPI_CHAR; } + template<> inline MPI_Datatype mpi_datatype <signed char> () CCTK_ATTRIBUTE_CONST; + template<> inline MPI_Datatype mpi_datatype <signed char> () { return MPI_CHAR; } + template<> inline MPI_Datatype mpi_datatype <unsigned char> () CCTK_ATTRIBUTE_CONST; + template<> inline MPI_Datatype mpi_datatype <unsigned char> () { return MPI_UNSIGNED_CHAR; } + template<> inline MPI_Datatype mpi_datatype <short> () CCTK_ATTRIBUTE_CONST; + template<> inline MPI_Datatype mpi_datatype <short> () { return MPI_SHORT; } + template<> inline MPI_Datatype mpi_datatype <unsigned short> () CCTK_ATTRIBUTE_CONST; + template<> inline MPI_Datatype mpi_datatype <unsigned short> () { return MPI_UNSIGNED_SHORT; } + template<> inline MPI_Datatype mpi_datatype <int> () CCTK_ATTRIBUTE_CONST; + template<> inline MPI_Datatype mpi_datatype <int> () { return MPI_INT; } + template<> inline MPI_Datatype mpi_datatype <unsigned int> () CCTK_ATTRIBUTE_CONST; + template<> inline MPI_Datatype mpi_datatype <unsigned int> () { return MPI_UNSIGNED; } + template<> inline MPI_Datatype mpi_datatype <long> () CCTK_ATTRIBUTE_CONST; + template<> inline MPI_Datatype mpi_datatype <long> () { return MPI_LONG; } + template<> inline MPI_Datatype mpi_datatype <unsigned long> () CCTK_ATTRIBUTE_CONST; + template<> inline MPI_Datatype mpi_datatype <unsigned long> () { return MPI_UNSIGNED_LONG; } + template<> inline MPI_Datatype mpi_datatype <long long> () CCTK_ATTRIBUTE_CONST; + template<> inline MPI_Datatype mpi_datatype <long long> () { return MPI_LONG_LONG_INT; } + template<> inline MPI_Datatype mpi_datatype <unsigned long long> () CCTK_ATTRIBUTE_CONST; + template<> inline MPI_Datatype mpi_datatype <unsigned long long> () { return MPI_LONG_LONG_INT; } // should be unsigned, but this doesn't exist + template<> inline MPI_Datatype mpi_datatype <float> () CCTK_ATTRIBUTE_CONST; + template<> inline MPI_Datatype mpi_datatype <float> () { return MPI_FLOAT; } + template<> inline MPI_Datatype mpi_datatype <double> () CCTK_ATTRIBUTE_CONST; + template<> inline MPI_Datatype mpi_datatype <double> () { return MPI_DOUBLE; } + template<> inline MPI_Datatype mpi_datatype <long double> () CCTK_ATTRIBUTE_CONST; + template<> inline MPI_Datatype mpi_datatype <long double> () { return MPI_LONG_DOUBLE; } #ifdef HAVE_CCTK_COMPLEX8 - template<> inline MPI_Datatype datatype <CCTK_COMPLEX8> () { return mpi_complex8; } + template<> inline MPI_Datatype mpi_datatype <CCTK_COMPLEX8> () CCTK_ATTRIBUTE_CONST; + template<> inline MPI_Datatype mpi_datatype <CCTK_COMPLEX8> () { return mpi_complex8; } #endif #ifdef HAVE_CCTK_COMPLEX16 - template<> inline MPI_Datatype datatype <CCTK_COMPLEX16> () { return mpi_complex16; } + template<> inline MPI_Datatype mpi_datatype <CCTK_COMPLEX16> () CCTK_ATTRIBUTE_CONST; + template<> inline MPI_Datatype mpi_datatype <CCTK_COMPLEX16> () { return mpi_complex16; } #endif #ifdef HAVE_CCTK_COMPLEX32 - template<> inline MPI_Datatype datatype <CCTK_COMPLEX32> () { return mpi_complex32; } + template<> inline MPI_Datatype mpi_datatype <CCTK_COMPLEX32> () CCTK_ATTRIBUTE_CONST; + template<> inline MPI_Datatype mpi_datatype <CCTK_COMPLEX32> () { return mpi_complex32; } #endif } // namespace dist diff --git a/Carpet/CarpetLib/src/fulltree.cc b/Carpet/CarpetLib/src/fulltree.cc index cb6de5116..3234a73dc 100644 --- a/Carpet/CarpetLib/src/fulltree.cc +++ b/Carpet/CarpetLib/src/fulltree.cc @@ -15,6 +15,8 @@ fulltree<T,D,P>::fulltree () : type (type_empty) { assert (invariant()); + // This is unused + assert (0); } @@ -193,6 +195,15 @@ fulltree<T,D,P>::const_iterator::const_iterator (fulltree const & f_) if (f.is_branch()) { assert (f.subtrees.size() > 0); it = new const_iterator (* f.subtrees.at(i)); + while ((*it).done()) { + delete it; + it = 0; + ++ i; + if (done()) break; + // to do: use a new function "reset iterator" instead + it = new const_iterator (* f.subtrees.at(i)); + } + assert (done() or not (*it).done()); } } @@ -253,6 +264,7 @@ fulltree<T,D,P>::const_iterator::operator++ () ++ i; } else { ++ *it; +#if 0 if ((*it).done()) { delete it; it = 0; @@ -260,8 +272,19 @@ fulltree<T,D,P>::const_iterator::operator++ () if (not done()) { // to do: use a new function "reset iterator" instead it = new const_iterator (* f.subtrees.at(i)); + assert (not (*it).done()); } } +#endif + while ((*it).done()) { + delete it; + it = 0; + ++ i; + if (done()) break; + // to do: use a new function "reset iterator" instead + it = new const_iterator (* f.subtrees.at(i)); + } + assert (done() or not (*it).done()); } return *this; } @@ -289,6 +312,15 @@ fulltree<T,D,P>::iterator::iterator (fulltree & f_) if (f.is_branch()) { assert (f.subtrees.size() > 0); it = new iterator (* f.subtrees.at(i)); + while ((*it).done()) { + delete it; + it = 0; + ++ i; + if (done()) break; + // to do: use a new function "reset iterator" instead + it = new iterator (* f.subtrees.at(i)); + } + assert (done() or not (*it).done()); } } @@ -349,6 +381,7 @@ fulltree<T,D,P>::iterator::operator++ () ++ i; } else { ++ *it; +#if 0 if ((*it).done()) { delete it; it = 0; @@ -356,8 +389,19 @@ fulltree<T,D,P>::iterator::operator++ () if (not done()) { // to do: use a new function "reset iterator" instead it = new iterator (* f.subtrees.at(i)); + assert (not (*it).done()); } } +#endif + while ((*it).done()) { + delete it; + it = 0; + ++ i; + if (done()) break; + // to do: use a new function "reset iterator" instead + it = new iterator (* f.subtrees.at(i)); + } + assert (done() or not (*it).done()); } return *this; } @@ -409,7 +453,7 @@ fulltree<T,D,P>::output (ostream & os) const << "dir=" << dir << "," << "subtrees=["; for (size_t i=0; i<subtrees.size(); ++i) { - os << bounds.at(i) << ":[" << i << "]=" << subtrees.at(i) << ":"; + os << bounds.at(i) << ":[" << i << "]=" << *subtrees.at(i) << ":"; } os << bounds.at(subtrees.size()) << "]"; } else { diff --git a/Carpet/CarpetLib/src/fulltree.hh b/Carpet/CarpetLib/src/fulltree.hh index 4678759b6..82d09be02 100644 --- a/Carpet/CarpetLib/src/fulltree.hh +++ b/Carpet/CarpetLib/src/fulltree.hh @@ -163,7 +163,7 @@ public: #endif // Memory usage - size_t memory () const; + size_t memory () const CCTK_ATTRIBUTE_PURE; // Output helper void output (ostream & os) const; @@ -173,6 +173,8 @@ public: // Memory usage template <typename T, int D, typename P> +inline size_t memoryof (fulltree<T,D,P> const & f) CCTK_ATTRIBUTE_PURE; +template <typename T, int D, typename P> inline size_t memoryof (fulltree<T,D,P> const & f) { return f.memory(); } diff --git a/Carpet/CarpetLib/src/gdata.cc b/Carpet/CarpetLib/src/gdata.cc index 39c9ebf8c..e1888835c 100644 --- a/Carpet/CarpetLib/src/gdata.cc +++ b/Carpet/CarpetLib/src/gdata.cc @@ -26,34 +26,25 @@ using namespace CarpetLib; -// Hand out the next MPI tag -static int nexttag () -{ - DECLARE_CCTK_PARAMETERS; - - int const min_tag = 100; - static int last = 0; - ++last; - if (last >= 30000) last = 0; - return min_tag + last; -} +list<gdata*> gdata::allgdata; // Constructors gdata::gdata (const int varindex_, const centering cent_, - const operator_type transport_operator_, - const int tag_) + const operator_type transport_operator_) : _storage(NULL), varindex(varindex_), cent(cent_), transport_operator(transport_operator_), _has_storage(false), - comm_active(false), - tag(tag_ >= 0 ? tag_ : nexttag()) + comm_active(false) { DECLARE_CCTK_PARAMETERS; + + allgdatai = allgdata.insert(allgdata.end(), this); + if (barriers) { MPI_Barrier (dist::comm()); } @@ -63,6 +54,9 @@ gdata::gdata (const int varindex_, gdata::~gdata () { DECLARE_CCTK_PARAMETERS; + + allgdata.erase(allgdatai); + if (barriers) { MPI_Barrier (dist::comm()); } @@ -76,14 +70,17 @@ void gdata:: copy_from (comm_state & state, gdata const * const src, - ibbox const & box) + ibbox const & box, + int const dstproc, + int const srcproc) { - vector <gdata const *> srcs (1, src); + vector <gdata const *> const srcs (1, src); CCTK_REAL const time = 0.0; - vector <CCTK_REAL> times (1, time); + vector <CCTK_REAL> const times (1, time); transfer_from (state, srcs, times, box, box, + dstproc, srcproc, time, 0, 0); } @@ -96,37 +93,52 @@ transfer_from (comm_state & state, vector<CCTK_REAL> const & times, ibbox const & dstbox, ibbox const & srcbox, + int const dstproc, + int const srcproc, CCTK_REAL const time, int const order_space, int const order_time) { - assert (has_storage()); - assert (not dstbox.empty()); - assert (all(dstbox.lower() >= extent().lower())); - assert (all(dstbox.upper() <= extent().upper())); - assert (all(dstbox.stride() == extent().stride())); - assert (all((dstbox.lower() - extent().lower()) % dstbox.stride() == 0)); - - assert (not srcbox.empty()); - assert (srcs.size() == times.size() and srcs.size() > 0); - for (int t=0; t<(int)srcs.size(); ++t) { - assert (srcs.AT(t)->has_storage()); - assert (all(srcbox.lower() >= srcs.AT(t)->extent().lower())); - assert (all(srcbox.upper() <= srcs.AT(t)->extent().upper())); + bool const is_dst = dist::rank() == dstproc; + bool const is_src = dist::rank() == srcproc; + // Return early if this communication does not concern us + assert (is_dst or is_src); // why should we be here? + if (not is_dst and not is_src) return; + + if (is_dst) { + assert (proc() == dstproc); + assert (has_storage()); + assert (not dstbox.empty()); + assert (all(dstbox.lower() >= extent().lower())); + assert (all(dstbox.upper() <= extent().upper())); + assert (all(dstbox.stride() == extent().stride())); + assert (all((dstbox.lower() - extent().lower()) % dstbox.stride() == 0)); } - gdata const * const src = srcs.AT(0); - assert (transport_operator != op_error); - if (transport_operator == op_none) return; + if (is_src) { + assert (not srcbox.empty()); + assert (srcs.size() == times.size() and srcs.size() > 0); + for (int t=0; t<(int)srcs.size(); ++t) { + assert (srcs.AT(t)->proc() == srcproc); + assert (srcs.AT(t)->has_storage()); + assert (all(srcbox.lower() >= srcs.AT(t)->extent().lower())); + assert (all(srcbox.upper() <= srcs.AT(t)->extent().upper())); + } + } + gdata const * const src = is_src ? srcs.AT(0) : NULL; - // Return early if this communication does not concern us - if (dist::rank() != proc() and dist::rank() != src->proc()) return; + operator_type const my_transport_operator = + is_dst ? transport_operator : src->transport_operator; + assert (my_transport_operator != op_error); + assert (my_transport_operator != op_none); // why should we be here? + if (my_transport_operator == op_none) return; // Interpolate either on the source or on the destination processor, // depending on whether this increases or reduces the amount of data int timelevel0, ntimelevels; - find_source_timelevel (times, time, order_time, timelevel0, ntimelevels); - assert (int (srcs.size()) >= ntimelevels); + find_source_timelevel + (times, time, order_time, my_transport_operator, timelevel0, ntimelevels); + if (is_src) assert (int (srcs.size()) >= ntimelevels); int const dstpoints = dstbox.size(); int const srcpoints = srcbox.size() * ntimelevels; bool const interp_on_src = dstpoints <= srcpoints; @@ -136,46 +148,45 @@ transfer_from (comm_state & state, case state_get_buffer_sizes: // don't count processor-local copies - if (proc() != src->proc()) { - // if this is a destination processor: advance its recv buffer - // size - if (proc() == dist::rank()) { - state.reserve_recv_space (c_datatype(), src->proc(), npoints); + if (not (is_dst and is_src)) { + if (is_dst) { + // increment the recv buffer size + state.reserve_recv_space (c_datatype(), srcproc, npoints); } - // if this is a source processor: increment its send buffer size - if (src->proc() == dist::rank()) { - state.reserve_send_space (c_datatype(), proc(), npoints); + if (is_src) { + // increment the send buffer size + state.reserve_send_space (src->c_datatype(), dstproc, npoints); } } break; case state_fill_send_buffers: - // if this is a source processor: copy its data into the send - // buffer - if (proc() != src->proc()) { - if (src->proc() == dist::rank()) { + if (not (is_dst and is_src)) { + if (is_src) { + // copy the data into the send buffer if (interp_on_src) { - size_t const sendbufsize = c_datatype_size() * dstbox.size(); + size_t const sendbufsize = src->c_datatype_size() * dstbox.size(); void * const sendbuf = - state.send_buffer (c_datatype(), proc(), dstbox.size()); + state.send_buffer (src->c_datatype(), dstproc, dstbox.size()); gdata * const buf = - make_typed (varindex, cent, transport_operator, tag); - buf->allocate (dstbox, src->proc(), sendbuf, sendbufsize); + src->make_typed (src->varindex, src->cent, src->transport_operator); + buf->allocate (dstbox, srcproc, sendbuf, sendbufsize); buf->transfer_from_innerloop (srcs, times, dstbox, time, order_space, order_time); delete buf; - state.commit_send_space (c_datatype(), proc(), dstbox.size()); + state.commit_send_space (src->c_datatype(), dstproc, dstbox.size()); } else { for (int tl = timelevel0; tl < timelevel0 + ntimelevels; ++ tl) { - size_t const sendbufsize = c_datatype_size() * srcbox.size(); + size_t const sendbufsize = src->c_datatype_size() * srcbox.size(); void * const sendbuf = - state.send_buffer (c_datatype(), proc(), srcbox.size()); + state.send_buffer (src->c_datatype(), dstproc, srcbox.size()); gdata * const buf = - make_typed (varindex, cent, transport_operator, tag); - buf->allocate (srcbox, src->proc(), sendbuf, sendbufsize); + src->make_typed (src->varindex, src->cent, + src->transport_operator); + buf->allocate (srcbox, srcproc, sendbuf, sendbufsize); buf->copy_from_innerloop (srcs.AT(tl), srcbox); delete buf; - state.commit_send_space (c_datatype(), proc(), srcbox.size()); + state.commit_send_space (src->c_datatype(), dstproc, srcbox.size()); } } } @@ -184,45 +195,42 @@ transfer_from (comm_state & state, case state_do_some_work: // handle the processor-local case - if (proc() == src->proc()) { - if (proc() == dist::rank()) { - transfer_from_innerloop - (srcs, times, dstbox, time, order_space, order_time); - } + if (is_dst and is_src) { + transfer_from_innerloop + (srcs, times, dstbox, time, order_space, order_time); } break; case state_empty_recv_buffers: - // if this is a destination processor: copy it from the recv - // buffer - if (proc() != src->proc()) { - if (proc() == dist::rank()) { + if (not (is_dst and is_src)) { + if (is_dst) { + // copy from the recv buffer if (interp_on_src) { size_t const recvbufsize = c_datatype_size() * dstbox.size(); void * const recvbuf = - state.recv_buffer (c_datatype(), src->proc(), dstbox.size()); - gdata * const buf = - make_typed (varindex, cent, transport_operator, tag); - buf->allocate (dstbox, proc(), recvbuf, recvbufsize); - state.commit_recv_space (c_datatype(), src->proc(), dstbox.size()); + state.recv_buffer (c_datatype(), srcproc, dstbox.size()); + gdata * const buf = make_typed (varindex, cent, transport_operator); + buf->allocate (dstbox, dstproc, recvbuf, recvbufsize); + state.commit_recv_space (c_datatype(), srcproc, dstbox.size()); copy_from_innerloop (buf, dstbox); delete buf; } else { - gdata const * const null = 0; - vector <gdata const *> bufs (timelevel0 + ntimelevels, null); - for (int tl = timelevel0; tl < timelevel0 + ntimelevels; ++ tl) { + gdata const * const null = NULL; + vector <gdata const *> bufs (ntimelevels, null); + vector <CCTK_REAL> timebuf (ntimelevels); + for (int tl = 0; tl < ntimelevels; ++ tl) { size_t const recvbufsize = c_datatype_size() * srcbox.size(); void * const recvbuf = - state.recv_buffer (c_datatype(), src->proc(), srcbox.size()); - gdata * const buf = - make_typed (varindex, cent, transport_operator, tag); - buf->allocate (srcbox, proc(), recvbuf, recvbufsize); - state.commit_recv_space (c_datatype(), src->proc(), srcbox.size()); + state.recv_buffer (c_datatype(), srcproc, srcbox.size()); + gdata * const buf = make_typed (varindex, cent, transport_operator); + buf->allocate (srcbox, dstproc, recvbuf, recvbufsize); + state.commit_recv_space (c_datatype(), srcproc, srcbox.size()); bufs.AT(tl) = buf; + timebuf.AT(tl) = times.AT(timelevel0 + tl); } transfer_from_innerloop - (bufs, times, dstbox, time, order_space, order_time); - for (int tl = timelevel0; tl < timelevel0 + ntimelevels; ++ tl) { + (bufs, timebuf, dstbox, time, order_space, order_time); + for (int tl = 0; tl < ntimelevels; ++ tl) { delete bufs.AT(tl); } } @@ -231,7 +239,7 @@ transfer_from (comm_state & state, break; default: - assert (0); + assert (0); abort(); } } @@ -242,9 +250,9 @@ gdata:: find_source_timelevel (vector <CCTK_REAL> const & times, CCTK_REAL const time, int const order_time, + operator_type const transport_operator, int & timelevel0, int & ntimelevels) - const { // Ensure that the times are consistent assert (times.size() > 0); @@ -253,7 +261,8 @@ find_source_timelevel (vector <CCTK_REAL> const & times, CCTK_REAL const eps = 1.0e-12; CCTK_REAL const min_time = * min_element (times.begin(), times.end()); CCTK_REAL const max_time = * max_element (times.begin(), times.end()); - CCTK_REAL const some_time = abs (min_time) + abs (max_time); + // TODO: Use a real delta-time from somewhere instead of 1.0 + CCTK_REAL const some_time = abs (min_time) + abs (max_time) + 1.0; if (transport_operator != op_copy) { if (time < min_time - eps * some_time or time > max_time + eps * some_time) @@ -303,3 +312,18 @@ find_source_timelevel (vector <CCTK_REAL> const & times, assert (timelevel0 >= 0 and timelevel0 < (int)times.size()); assert (ntimelevels > 0); } + + + +size_t +gdata:: +allmemory () +{ + size_t mem = memoryof(allgdata); + for (list<gdata*>::const_iterator + gdatai = allgdata.begin(); gdatai != allgdata.end(); ++ gdatai) + { + mem += memoryof(**gdatai); + } + return mem; +} diff --git a/Carpet/CarpetLib/src/gdata.hh b/Carpet/CarpetLib/src/gdata.hh index 09622fb34..4b62cf564 100644 --- a/Carpet/CarpetLib/src/gdata.hh +++ b/Carpet/CarpetLib/src/gdata.hh @@ -24,14 +24,19 @@ using namespace std; // A generic data storage without type information class gdata { + + static list<gdata*> allgdata; + list<gdata*>::iterator allgdatai; protected: // should be readonly // Fields void * _storage; // A copy of the storage pointer - + +public: const int varindex; // Cactus variable index, or -1 +protected: centering cent; operator_type transport_operator; @@ -47,8 +52,6 @@ protected: // should be readonly bool comm_active; // a communication is going on MPI_Request request; // outstanding MPI request - int tag; // MPI tag for this object - private: // Forbid copying and passing by value gdata (gdata const &); @@ -59,8 +62,7 @@ public: // Constructors gdata (const int varindex, const centering cent = error_centered, - const operator_type transport_operator = op_error, - const int tag = -1); + const operator_type transport_operator = op_error); // Destructors virtual ~gdata (); @@ -69,8 +71,7 @@ public: virtual gdata* make_typed (const int varindex, const centering cent = error_centered, - const operator_type transport_operator = op_error, - const int tag = -1) const = 0; + const operator_type transport_operator = op_error) const = 0; // Storage management virtual void allocate (const ibbox& extent, const int proc, @@ -148,7 +149,9 @@ public: void copy_from (comm_state & state, gdata const * src, - ibbox const & box); + ibbox const & box, + int dstproc, + int srcproc); void transfer_from (comm_state & state, @@ -156,18 +159,21 @@ public: vector<CCTK_REAL> const & times, ibbox const & dstbox, ibbox const & srcbox, + int dstproc, + int srcproc, CCTK_REAL time, int order_space, int order_time); protected: + static void find_source_timelevel (vector <CCTK_REAL> const & times, CCTK_REAL time, int order_time, + operator_type transport_operator, int & timelevel0, - int & ntimelevels) - const; + int & ntimelevels); private: virtual @@ -186,8 +192,25 @@ private: int order_time) = 0; +public: + virtual size_t memory () const CCTK_ATTRIBUTE_PURE = 0; + static size_t allmemory () CCTK_ATTRIBUTE_PURE; + virtual ostream& output (ostream& os) const = 0; }; +inline size_t memoryof (gdata const & d) CCTK_ATTRIBUTE_PURE; +inline size_t memoryof (gdata const & d) +{ + return d.memory (); +} + +inline ostream& operator<< (ostream& os, const gdata& d) +{ + return d.output(os); +} + + + #endif // GDATA_HH diff --git a/Carpet/CarpetLib/src/gf.cc b/Carpet/CarpetLib/src/gf.cc index 37b06db75..696628c59 100644 --- a/Carpet/CarpetLib/src/gf.cc +++ b/Carpet/CarpetLib/src/gf.cc @@ -41,23 +41,23 @@ gf<T>::~gf () // Access to the data template<typename T> -const data<T>* gf<T>::operator() (int tl, int rl, int c, int ml) const +const data<T>* gf<T>::operator() (int tl, int rl, int lc, int ml) const { assert (rl>=0 and rl<h.reflevels()); - assert (c>=0 and c<h.components(rl)); + assert (lc>=0 and lc<h.local_components(rl)); assert (ml>=0 and ml<h.mglevels()); assert (tl>=0 and tl<timelevels(ml, rl)); - return (const data<T>*)storage.AT(ml).AT(rl).AT(c).AT(tl); + return (const data<T>*)storage.AT(ml).AT(rl).AT(lc).AT(tl); } template<typename T> -data<T>* gf<T>::operator() (int tl, int rl, int c, int ml) +data<T>* gf<T>::operator() (int tl, int rl, int lc, int ml) { assert (rl>=0 and rl<h.reflevels()); - assert (c>=0 and c<h.components(rl)); + assert (lc>=0 and lc<h.local_components(rl)); assert (ml>=0 and ml<h.mglevels()); assert (tl>=0 and tl<timelevels(ml, rl)); - return (data<T>*)storage.AT(ml).AT(rl).AT(c).AT(tl); + return (data<T>*)storage.AT(ml).AT(rl).AT(lc).AT(tl); } diff --git a/Carpet/CarpetLib/src/gf.hh b/Carpet/CarpetLib/src/gf.hh index d5feb0a63..be0a1bb94 100644 --- a/Carpet/CarpetLib/src/gf.hh +++ b/Carpet/CarpetLib/src/gf.hh @@ -46,13 +46,11 @@ public: // Helpers -protected: - - virtual gdata* typed_data (int tl, int rl, int c, int ml) + virtual gdata* typed_data (int tl, int rl, int lc, int ml) const { data<T>* const vl = this->vectorleader - ? (data<T>*)(*this->vectorleader)(tl,rl,c,ml) + ? (data<T>*)(*this->vectorleader)(tl,rl,lc,ml) : NULL; return new data<T>(this->varindex, h.refcent, this->transport_operator, @@ -64,11 +62,9 @@ protected: // Access to the data -public: - - virtual const data<T>* operator() (int tl, int rl, int c, int ml) const; + virtual const data<T>* operator() (int tl, int rl, int lc, int ml) const; - virtual data<T>* operator() (int tl, int rl, int c, int ml); + virtual data<T>* operator() (int tl, int rl, int lc, int ml); diff --git a/Carpet/CarpetLib/src/ggf.cc b/Carpet/CarpetLib/src/ggf.cc index 41e6787dc..d975a55a1 100644 --- a/Carpet/CarpetLib/src/ggf.cc +++ b/Carpet/CarpetLib/src/ggf.cc @@ -7,6 +7,8 @@ #include "cctk.h" +#include "CarpetTimers.hh" + #include "defs.hh" #include "dh.hh" #include "th.hh" @@ -19,6 +21,10 @@ using namespace CarpetLib; +list<ggf*> ggf::allggf; + + + // Constructors ggf::ggf (const int varindex_, const operator_type transport_operator_, th& t_, dh& d_, @@ -44,12 +50,15 @@ ggf::ggf (const int varindex_, const operator_type transport_operator_, timelevels_.AT(ml).resize(d.h.reflevels(), 0); } - d.add(this); + allggfi = allggf.insert(allggf.end(), this); + + dh_handle = d.add(this); } // Destructors ggf::~ggf () { - d.remove(this); + d.erase(dh_handle); + allggf.erase(allggfi); } // Comparison @@ -69,23 +78,24 @@ void ggf::set_timelevels (const int ml, const int rl, const int new_timelevels) if (new_timelevels < timelevels(ml,rl)) { - for (int c=0; c<(int)storage.AT(ml).AT(rl).size(); ++c) { + for (int lc=0; lc<h.local_components(rl); ++ lc) { for (int tl=new_timelevels; tl<timelevels(ml,rl); ++tl) { - delete storage.AT(ml).AT(rl).AT(c).AT(tl); + delete storage.AT(ml).AT(rl).AT(lc).AT(tl); } - storage.AT(ml).AT(rl).AT(c).resize (new_timelevels); - } // for c + storage.AT(ml).AT(rl).AT(lc).resize (new_timelevels); + } // for lc } else if (new_timelevels > timelevels(ml,rl)) { - for (int c=0; c<(int)storage.AT(ml).AT(rl).size(); ++c) { - storage.AT(ml).AT(rl).AT(c).resize (new_timelevels); + for (int lc=0; lc<h.local_components(rl); ++ lc) { + int const c = h.get_component(rl,lc); + storage.AT(ml).AT(rl).AT(lc).resize (new_timelevels); for (int tl=timelevels(ml,rl); tl<new_timelevels; ++tl) { - storage.AT(ml).AT(rl).AT(c).AT(tl) = typed_data(tl,rl,c,ml); - storage.AT(ml).AT(rl).AT(c).AT(tl)->allocate - (d.boxes.AT(ml).AT(rl).AT(c).exterior, h.processor(rl,c)); + storage.AT(ml).AT(rl).AT(lc).AT(tl) = typed_data(tl,rl,lc,ml); + storage.AT(ml).AT(rl).AT(lc).AT(tl)->allocate + (d.boxes.AT(ml).AT(rl).AT(c).exterior, dist::rank()); } // for tl - } // for c + } // for lc } @@ -97,34 +107,39 @@ void ggf::set_timelevels (const int ml, const int rl, const int new_timelevels) void ggf::recompose_crop () { // Free storage that will not be needed - static Timer timer ("ggf::recompose_crop"); + static Carpet::Timer timer ("CarpetLib::ggf::recompose_crop"); timer.start (); for (int ml=0; ml<h.mglevels(); ++ml) { for (int rl=h.reflevels(); rl<(int)storage.AT(ml).size(); ++rl) { - for (int c=0; c<(int)storage.AT(ml).AT(rl).size(); ++c) { - for (int tl=0; tl<(int)storage.AT(ml).AT(rl).AT(c).size(); ++tl) { - delete storage.AT(ml).AT(rl).AT(c).AT(tl); + for (int lc=0; lc<(int)storage.AT(ml).AT(rl).size(); ++lc) { + for (int tl=0; tl<(int)storage.AT(ml).AT(rl).AT(lc).size(); ++tl) { + delete storage.AT(ml).AT(rl).AT(lc).AT(tl); } // for tl - } // for c + } // for lc } // for rl storage.AT(ml).resize(h.reflevels()); } // for ml - timer.stop (0); + timer.stop (); } void ggf::recompose_allocate (const int rl) { // Retain storage that might be needed - static Timer timer ("ggf::recompose_allocate"); + static Carpet::Timer timer ("CarpetLib::ggf::recompose_allocate"); timer.start (); oldstorage.resize(storage.size()); for (int ml=0; ml<(int)storage.size(); ++ml) { oldstorage.AT(ml).resize(storage.AT(ml).size()); +#if 0 oldstorage.AT(ml).AT(rl) = storage.AT(ml).AT(rl); storage.AT(ml).AT(rl).clear(); +#else + oldstorage.AT(ml).AT(rl).clear(); + swap (storage.AT(ml).AT(rl), oldstorage.AT(ml).AT(rl)); +#endif } for (int ml=0; ml<d.h.mglevels(); ++ml) { @@ -135,32 +150,36 @@ void ggf::recompose_allocate (const int rl) storage.resize(h.mglevels()); for (int ml=0; ml<h.mglevels(); ++ml) { storage.AT(ml).resize(h.reflevels()); - storage.AT(ml).AT(rl).resize(h.components(rl)); - for (int c=0; c<h.components(rl); ++c) { - storage.AT(ml).AT(rl).AT(c).resize(timelevels(ml,rl)); + storage.AT(ml).AT(rl).resize(h.local_components(rl)); + for (int lc=0; lc<h.local_components(rl); ++ lc) { + int const c = h.get_component(rl,lc); + storage.AT(ml).AT(rl).AT(lc).resize(timelevels(ml,rl)); for (int tl=0; tl<timelevels(ml,rl); ++tl) { - storage.AT(ml).AT(rl).AT(c).AT(tl) = typed_data(tl,rl,c,ml); - storage.AT(ml).AT(rl).AT(c).AT(tl)->allocate - (d.boxes.AT(ml).AT(rl).AT(c).exterior, h.processor(rl,c)); + storage.AT(ml).AT(rl).AT(lc).AT(tl) = typed_data(tl,rl,lc,ml); + storage.AT(ml).AT(rl).AT(lc).AT(tl)->allocate + (d.boxes.AT(ml).AT(rl).AT(c).exterior, dist::rank()); } // for tl - } // for c + } // for lc } // for ml - timer.stop (0); + timer.stop (); } void ggf::recompose_fill (comm_state & state, int const rl, bool const do_prolongate) { // Initialise the new storage - static Timer timer ("ggf::recompose_fill"); + static Carpet::Timer timer ("CarpetLib::ggf::recompose_fill"); timer.start (); - + for (int ml = 0; ml < h.mglevels(); ++ ml) { + assert (d.fast_boxes.AT(ml).AT(rl).do_init); + vector <int> tls; if (do_prolongate and rl > 0 and - transport_operator != op_none and transport_operator != op_sync) + transport_operator != op_none and transport_operator != op_sync and + transport_operator != op_restrict) { int const numtl = timelevels (ml, rl); tls.resize (numtl); @@ -185,7 +204,9 @@ void ggf::recompose_fill (comm_state & state, int const rl, // Initialise from a coarser level of the new hierarchy, where // possible if (rl > 0) { - if (transport_operator != op_none and transport_operator != op_sync) { + if (transport_operator != op_none and transport_operator != op_sync and + transport_operator != op_restrict) + { for (int tl = 0; tl < timelevels (ml, rl); ++tl) { transfer_from_all (state, tl, rl, ml, @@ -199,43 +220,43 @@ void ggf::recompose_fill (comm_state & state, int const rl, } // for ml - timer.stop (0); + timer.stop (); } void ggf::recompose_free_old (const int rl) { // Delete old storage - static Timer timer ("dh::recompose_free_old"); + static Carpet::Timer timer ("dh::recompose_free_old"); timer.start (); for (int ml=0; ml<(int)oldstorage.size(); ++ml) { - for (int c=0; c<(int)oldstorage.AT(ml).AT(rl).size(); ++c) { - for (int tl=0; tl<timelevels(ml,rl); ++tl) { - delete oldstorage.AT(ml).AT(rl).AT(c).AT(tl); + for (int lc=0; lc<(int)oldstorage.AT(ml).AT(rl).size(); ++lc) { + for (int tl=0; tl<(int)oldstorage.AT(ml).AT(rl).AT(lc).size(); ++tl) { + delete oldstorage.AT(ml).AT(rl).AT(lc).AT(tl); } // for tl - } // for c + } // for lc oldstorage.AT(ml).AT(rl).clear(); } // for ml - timer.stop (0); + timer.stop (); } void ggf::recompose_free (const int rl) { // Delete old storage - static Timer timer ("dh::recompose_free"); + static Carpet::Timer timer ("dh::recompose_free"); timer.start (); for (int ml=0; ml<(int)storage.size(); ++ml) { - for (int c=0; c<(int)storage.AT(ml).AT(rl).size(); ++c) { + for (int lc=0; lc<h.local_components(rl); ++ lc) { for (int tl=0; tl<timelevels(ml,rl); ++tl) { - delete storage.AT(ml).AT(rl).AT(c).AT(tl); + delete storage.AT(ml).AT(rl).AT(lc).AT(tl); } // for tl - } // for c + } // for lc storage.AT(ml).AT(rl).clear(); } // for ml - timer.stop (0); + timer.stop (); } @@ -246,8 +267,8 @@ void ggf::cycle_all (int const rl, int const ml) { assert (ml>=0 and ml<h.mglevels()); int const ntl = timelevels(ml,rl); assert (ntl > 0); - for (int c=0; c<(int)storage.AT(ml).AT(rl).size(); ++c) { - fdata & fdatas = storage.AT(ml).AT(rl).AT(c); + for (int lc=0; lc<(int)storage.AT(ml).AT(rl).size(); ++lc) { + fdata & fdatas = storage.AT(ml).AT(rl).AT(lc); gdata * const tmpdata = fdatas.AT(ntl-1); for (int tl=ntl-1; tl>0; --tl) { fdatas.AT(tl) = fdatas.AT(tl-1); @@ -260,8 +281,8 @@ void ggf::cycle_all (int const rl, int const ml) { void ggf::flip_all (int const rl, int const ml) { assert (rl>=0 and rl<h.reflevels()); assert (ml>=0 and ml<h.mglevels()); - for (int c=0; c<(int)storage.AT(ml).AT(rl).size(); ++c) { - fdata & fdatas = storage.AT(ml).AT(rl).AT(c); + for (int lc=0; lc<(int)storage.AT(ml).AT(rl).size(); ++lc) { + fdata & fdatas = storage.AT(ml).AT(rl).AT(lc); for (int tl=0; tl<(timelevels(ml,rl)-1)/2; ++tl) { const int tl1 = tl; const int tl2 = timelevels(ml,rl)-1 - tl; @@ -279,15 +300,13 @@ void ggf::flip_all (int const rl, int const ml) { void ggf::fill_all (int const rl, int const ml) { assert (rl>=0 and rl<h.reflevels()); assert (ml>=0 and ml<h.mglevels()); - for (int c=0; c<(int)storage.AT(ml).AT(rl).size(); ++c) { - if (h.is_local(rl,c)) { - fdata const & fdatas = storage.AT(ml).AT(rl).AT(c); - void const * const srcptr = fdatas.AT(0)->storage(); - size_t const size = fdatas.AT(0)->size() * fdatas.AT(0)->elementsize(); - for (int tl=1; tl<timelevels(ml,rl); ++tl) { - void * const dstptr = fdatas.AT(tl)->storage(); - memcpy (dstptr, srcptr, size); - } + for (int lc=0; lc<(int)storage.AT(ml).AT(rl).size(); ++lc) { + fdata const & fdatas = storage.AT(ml).AT(rl).AT(lc); + void const * const srcptr = fdatas.AT(0)->storage(); + size_t const size = fdatas.AT(0)->size() * fdatas.AT(0)->elementsize(); + for (int tl=1; tl<timelevels(ml,rl); ++tl) { + void * const dstptr = fdatas.AT(tl)->storage(); + memcpy (dstptr, srcptr, size); } } } @@ -322,7 +341,9 @@ ref_bnd_prolongate_all (comm_state & state, { // Interpolate assert (rl>=1); - if (transport_operator == op_none or transport_operator == op_sync) return; + if (transport_operator == op_none or transport_operator == op_sync or + transport_operator == op_restrict) + return; vector<int> tl2s; static Timer timer ("ref_bnd_prolongate_all"); timer.start (); @@ -435,7 +456,9 @@ ref_prolongate_all (comm_state & state, CCTK_REAL const time) { assert (rl>=1); - if (transport_operator == op_none or transport_operator == op_sync) return; + if (transport_operator == op_none or transport_operator == op_sync or + transport_operator == op_restrict) + return; static Timer timer ("ref_prolongate_all"); timer.start (); vector<int> tl2s; @@ -467,8 +490,7 @@ transfer_from_all (comm_state & state, assert (ml1>=0 and ml1<h.mglevels()); assert (tl1>=0 and tl1<timelevels(ml1,rl1)); - int const p = dist::rank(); - srpvect const & psendrecvs = d.fast_boxes.AT(ml1).AT(rl1).AT(p).*sendrecvs; + srpvect const & psendrecvs = d.fast_boxes.AT(ml1).AT(rl1).*sendrecvs; // Return early if this communication does not concern us if (psendrecvs.empty()) return; @@ -482,7 +504,11 @@ transfer_from_all (comm_state & state, assert (rl2>=0 and rl2<(int)srcstorage.AT(ml2).size()); for (size_t i = 0; i < tl2s.size(); ++ i) { int const tl2 = tl2s.AT(i); - assert (tl2>=0 and tl2<(int)srcstorage.AT(ml2).AT(rl2).AT(0).size()); + assert (tl2>=0); + int const lc = 0; + if (lc < int(srcstorage.AT(ml2).AT(rl2).size())) { + assert (tl2<(int)srcstorage.AT(ml2).AT(rl2).AT(lc).size()); + } } // Set up source times @@ -514,14 +540,21 @@ transfer_from_all (comm_state & state, ibbox const & recv = precv.extent; int const c2 = psend.component; int const c1 = precv.component; + int const lc2 = h.get_local_component(rl2,c2); + int const lc1 = h.get_local_component(rl1,c1); + int const p2 = h.processor(rl2,c2); + int const p1 = h.processor(rl1,c1); // Source and destination data - gdata * const dst = storage.AT(ml1).AT(rl1).AT(c1).AT(tl1); + gdata * const dst = + lc1>=0 ? storage.AT(ml1).AT(rl1).AT(lc1).AT(tl1) : NULL; cdata const & srcs = srcstorage.AT(ml2).AT(rl2); for (int i=0; i<(int)gsrcs.size(); ++i) { - gsrcs.AT(i) = srcs.AT(c2).AT(tl2s.AT(i)); + gsrcs.AT(i) = lc2>=0 ? srcs.AT(lc2).AT(tl2s.AT(i)) : NULL; } - dst->transfer_from (state, gsrcs, times, recv, send, time, pos, pot); + + dst->transfer_from + (state, gsrcs, times, recv, send, p1, p2 , time, pos, pot); } total.stop (0); @@ -546,3 +579,16 @@ memory () memoryof (vectorleader) + memoryof (oldstorage); } + +size_t +ggf:: +allmemory () +{ + size_t mem = memoryof(allggf); + for (list<ggf*>::const_iterator + ggfi = allggf.begin(); ggfi != allggf.end(); ++ ggfi) + { + mem += memoryof(**ggfi); + } + return mem; +} diff --git a/Carpet/CarpetLib/src/ggf.hh b/Carpet/CarpetLib/src/ggf.hh index b2c86b8db..f89a73ee0 100644 --- a/Carpet/CarpetLib/src/ggf.hh +++ b/Carpet/CarpetLib/src/ggf.hh @@ -28,6 +28,9 @@ ostream& operator<< (ostream& os, const ggf& f); // A generic grid function without type information class ggf { + + static list<ggf*> allggf; + list<ggf*>::iterator allggfi; // Types typedef list<ibbox> iblist; @@ -38,7 +41,7 @@ class ggf { typedef gdata* tdata; // data ... typedef vector<tdata> fdata; // ... for each time level - typedef vector<fdata> cdata; // ... for each component + typedef vector<fdata> cdata; // ... for each local component typedef vector<cdata> rdata; // ... for each refinement level typedef vector<rdata> mdata; // ... for each multigrid level @@ -53,6 +56,7 @@ public: // should be readonly const gh &h; // grid hierarchy dh &d; // data hierarchy + dh::ggf_handle dh_handle; protected: vector<vector<int> > timelevels_; // time levels [ml][rl] @@ -80,10 +84,10 @@ public: virtual ~ggf (); // Comparison - bool operator== (const ggf& f) const; + bool operator== (const ggf& f) const CCTK_ATTRIBUTE_PURE; // Querying - int timelevels (int const ml, int const rl) const + int timelevels (int const ml, int const rl) const CCTK_ATTRIBUTE_PURE { return timelevels_.AT(ml).AT(rl); } @@ -141,9 +145,7 @@ public: // Helpers -protected: - - virtual gdata* typed_data (int tl, int rl, int c, int ml) = 0; + virtual gdata* typed_data (int tl, int rl, int lc, int ml) const = 0; @@ -181,13 +183,14 @@ protected: public: // Access to the data - virtual const gdata* operator() (int tl, int rl, int c, int ml) const = 0; - virtual gdata* operator() (int tl, int rl, int c, int ml) = 0; + virtual const gdata* operator() (int tl, int rl, int lc, int ml) const CCTK_ATTRIBUTE_PURE = 0; + virtual gdata* operator() (int tl, int rl, int lc, int ml) CCTK_ATTRIBUTE_PURE = 0; // Output - virtual size_t memory () const; + virtual size_t memory () const CCTK_ATTRIBUTE_PURE = 0; + static size_t allmemory () CCTK_ATTRIBUTE_PURE; virtual ostream& output (ostream& os) const = 0; private: @@ -199,6 +202,7 @@ private: +inline size_t memoryof (ggf const & f) CCTK_ATTRIBUTE_PURE; inline size_t memoryof (ggf const & f) { return f.memory (); diff --git a/Carpet/CarpetLib/src/gh.cc b/Carpet/CarpetLib/src/gh.cc index 9ecdb925c..21cb399a6 100644 --- a/Carpet/CarpetLib/src/gh.cc +++ b/Carpet/CarpetLib/src/gh.cc @@ -6,6 +6,8 @@ #include "cctk.h" #include "cctk_Parameters.h" +#include "CarpetTimers.hh" + #include "defs.hh" #include "dh.hh" #include "th.hh" @@ -19,7 +21,11 @@ using namespace CarpetLib; - // Constructors +list<gh*> gh::allgh; + + + +// Constructors gh:: gh (vector<ivect> const & reffacts_, centering const refcent_, int const mgfact_, centering const mgcent_, @@ -65,12 +71,15 @@ gh (vector<ivect> const & reffacts_, centering const refcent_, boundary_width[0] + boundary_width[1])); } } + + allghi = allgh.insert(allgh.end(), this); } // Destructors gh:: ~gh () { + allgh.erase(allghi); } @@ -78,14 +87,16 @@ gh:: // Modifiers void gh:: -regrid (rregs const & superregs, mregs const & regs) +regrid (rregs const & superregs, mregs const & regs, bool const do_init) { DECLARE_CCTK_PARAMETERS; + + static Carpet::Timer timer ("CarpetLib::gh::regrid"); + timer.start(); superregions = superregs; - // Save the grid hierarchy - oldregions.clear (); + assert (oldregions.empty()); swap (oldregions, regions); regions = regs; @@ -182,19 +193,70 @@ regrid (rregs const & superregs, mregs const & regs) } } + + + // Calculate global and local components + global_components_.resize(reflevels()); + local_components_.resize(reflevels()); + for (int rl=0; rl<reflevels(); ++rl) { + { + int lc = 0; + for (int c=0; c<components(rl); ++c) { + lc += is_local(rl,c); + } + global_components_.AT(rl).resize(lc); + } + local_components_.AT(rl).resize(components(rl)); + { + int lc = 0; + for (int c=0; c<components(rl); ++c) { + if (is_local(rl,c)) { + global_components_.AT(rl).AT(lc) = c; + local_components_.AT(rl).AT(c) = lc; + ++lc; + } else { + local_components_.AT(rl).AT(c) = -1; + } + } + } + } + + + // Output if (output_bboxes) { do_output_bboxes (cout); do_output_bases (cout); } + + // Regrid the other hierarchies for (list<th*>::iterator t=ths.begin(); t!=ths.end(); ++t) { (*t)->regrid(); } for (list<dh*>::iterator d=dhs.begin(); d!=dhs.end(); ++d) { - (*d)->regrid(); + (*d)->regrid(do_init); + } + + timer.stop(); +} + + + +void +gh:: +regrid_free (bool const do_init) +{ + oldregions.clear(); + + for (list<th*>::iterator t=ths.begin(); t!=ths.end(); ++t) { + (*t)->regrid_free(); + } + + for (list<dh*>::iterator d=dhs.begin(); d!=dhs.end(); ++d) { + (*d)->regrid_free(do_init); } } @@ -205,11 +267,6 @@ gh:: recompose (int const rl, bool const do_prolongate) { - // Handle changes in number of mglevels - if (oldregions.size() != regions.size()) { - oldregions.resize (regions.size()); - } - bool const do_recompose = level_did_change(rl); if (do_recompose) { @@ -219,12 +276,6 @@ recompose (int const rl, (*d)->recompose (rl, do_prolongate); } - // Overwrite old with new grid hierarchy - for (int ml=0; ml<mglevels(); ++ml) { - oldregions.AT(ml).resize (regions.AT(ml).size()); - oldregions.AT(ml).AT(rl) = regions.AT(ml).AT(rl); - } - } return do_recompose; @@ -235,7 +286,6 @@ recompose (int const rl, bool gh:: level_did_change (int const rl) - const { // Find out whether this level changed if (regions.size() != oldregions.size()) return true; @@ -263,11 +313,23 @@ gh:: local_components (int const rl) const { - int lc = 0; - for (int c=0; c<components(rl); ++c) { - lc += is_local(rl,c); - } - return lc; + return global_components_.AT(rl).size(); +} + +int +gh:: +get_component (int const rl, int const lc) + const +{ + return global_components_.AT(rl).AT(lc); +} + +int +gh:: +get_local_component (int const rl, int const c) + const +{ + return local_components_.AT(rl).AT(c); } @@ -374,36 +436,36 @@ locate_position (ivect const & ipos, // Time hierarchy management -void +gh::th_handle gh:: add (th * const t) { - ths.push_back (t); + return ths.insert(ths.end(), t); } void gh:: -remove (th * const t) +erase (th_handle const ti) { - ths.remove (t); + ths.erase(ti); } // Data hierarchy management -void +gh::dh_handle gh:: add (dh * const d) { - dhs.push_back (d); + return dhs.insert(dhs.end(), d); } void gh:: -remove (dh * const d) +erase (dh_handle di) { - dhs.remove (d); + dhs.erase (di); } @@ -416,6 +478,7 @@ memory () const { return + sizeof allghi + // memoryof (allghi) + memoryof (reffacts) + memoryof (refcent) + memoryof (mgfact) + @@ -428,6 +491,19 @@ memory () memoryof (dhs); } +size_t +gh:: +allmemory () +{ + size_t mem = memoryof(allgh); + for (list<gh*>::const_iterator + ghi = allgh.begin(); ghi != allgh.end(); ++ ghi) + { + mem += memoryof(**ghi); + } + return mem; +} + // Output diff --git a/Carpet/CarpetLib/src/gh.hh b/Carpet/CarpetLib/src/gh.hh index b80d71ca3..1942ae38b 100644 --- a/Carpet/CarpetLib/src/gh.hh +++ b/Carpet/CarpetLib/src/gh.hh @@ -28,6 +28,9 @@ class gh; // level. The extents do not include ghost zones. class gh { + static list<gh*> allgh; + list<gh*>::iterator allghi; + public: // Types @@ -47,14 +50,21 @@ public: // should be readonly vector<vector<ibbox> > baseextents; // [ml][rl] const i2vect boundary_width; +private: + vector<vector<int> > global_components_; // [rl][lc] + vector<vector<int> > local_components_; // [rl][c] +public: + // Extents of the regions before distributing them over the // processors rregs superregions; mregs regions; // extents and properties of all grids - mregs oldregions; // a copy, used during regridding + mregs oldregions; // extents and properties of all grids + typedef list<th*>::iterator th_handle; list<th*> ths; // list of all time hierarchies + typedef list<dh*>::iterator dh_handle; list<dh*> dhs; // list of all data hierarchies public: @@ -69,64 +79,67 @@ public: ~gh (); // Modifiers - void regrid (rregs const & superregs, mregs const & regs); + void regrid (rregs const & superregs, mregs const & regs, bool do_init); + void regrid_free (bool do_init); bool recompose (int rl, bool do_prolongate); private: - bool level_did_change (int rl) const; + bool level_did_change (int rl) CCTK_ATTRIBUTE_PURE; // Accessors public: - ibbox const & extent (const int ml, const int rl, const int c) const + ibbox const & extent (const int ml, const int rl, const int c) const CCTK_ATTRIBUTE_PURE { return regions.AT(ml).AT(rl).AT(c).extent; } - ibbox const & baseextent (const int ml, const int rl) const + ibbox const & baseextent (const int ml, const int rl) const CCTK_ATTRIBUTE_PURE { return baseextents.AT(ml).AT(rl); } - b2vect const & outer_boundaries (const int rl, const int c) const + b2vect const & outer_boundaries (const int rl, const int c) const CCTK_ATTRIBUTE_PURE { return regions.AT(0).AT(rl).AT(c).outer_boundaries; } - int processor (const int rl, const int c) const + int processor (const int rl, const int c) const CCTK_ATTRIBUTE_PURE { return regions.AT(0).AT(rl).AT(c).processor; } - int old_processor (const int rl, const int c) const + int old_processor (const int rl, const int c) const CCTK_ATTRIBUTE_PURE { return oldregions.AT(0).AT(rl).AT(c).processor; } - int mglevels () const + int mglevels () const CCTK_ATTRIBUTE_PURE { return (int)regions.size(); } - int reflevels () const + int reflevels () const CCTK_ATTRIBUTE_PURE { if (mglevels() == 0) return 0; return (int)regions.AT(0).size(); } - int components (const int rl) const + int components (const int rl) const CCTK_ATTRIBUTE_PURE { return (int)regions.AT(0).AT(rl).size(); } - bool is_local (const int rl, const int c) const + bool is_local (const int rl, const int c) const CCTK_ATTRIBUTE_PURE { return processor(rl,c) == dist::rank(); } - int local_components (const int rl) const; + int local_components (int rl) const CCTK_ATTRIBUTE_PURE; + int get_component (int rl, int lc) const CCTK_ATTRIBUTE_PURE; + int get_local_component (int rl, int c) const CCTK_ATTRIBUTE_PURE; void locate_position (rvect const & rpos, int const ml, @@ -139,15 +152,16 @@ public: int & rl, int & c, ivect & aligned_ipos) const; // Time hierarchy management - void add (th * t); - void remove (th * t); + th_handle add (th * t); + void erase (th_handle ti); // Data hierarchy management - void add (dh * d); - void remove (dh * d); + dh_handle add (dh * d); + void erase (dh_handle di); // Output - size_t memory () const; + size_t memory () const CCTK_ATTRIBUTE_PURE; + static size_t allmemory () CCTK_ATTRIBUTE_PURE; ostream & output (ostream & os) const; private: @@ -158,6 +172,7 @@ private: +inline size_t memoryof (gh const & g) CCTK_ATTRIBUTE_PURE; inline size_t memoryof (gh const & g) { return g.memory (); diff --git a/Carpet/CarpetLib/src/interpolate_3d_2tl.cc b/Carpet/CarpetLib/src/interpolate_3d_2tl.cc index 0b984b142..9dad6a55d 100644 --- a/Carpet/CarpetLib/src/interpolate_3d_2tl.cc +++ b/Carpet/CarpetLib/src/interpolate_3d_2tl.cc @@ -6,7 +6,7 @@ #include <cctk.h> #include <cctk_Parameters.h> -#include "operator_prototypes.hh" +#include "operator_prototypes_3d.hh" #include "typeprops.hh" using namespace std; diff --git a/Carpet/CarpetLib/src/interpolate_3d_3tl.cc b/Carpet/CarpetLib/src/interpolate_3d_3tl.cc index c0e8b44fd..6fdaa854d 100644 --- a/Carpet/CarpetLib/src/interpolate_3d_3tl.cc +++ b/Carpet/CarpetLib/src/interpolate_3d_3tl.cc @@ -6,7 +6,7 @@ #include <cctk.h> #include <cctk_Parameters.h> -#include "operator_prototypes.hh" +#include "operator_prototypes_3d.hh" #include "typeprops.hh" using namespace std; diff --git a/Carpet/CarpetLib/src/interpolate_3d_4tl.cc b/Carpet/CarpetLib/src/interpolate_3d_4tl.cc index 7d4c7fe26..0a2f5c66c 100644 --- a/Carpet/CarpetLib/src/interpolate_3d_4tl.cc +++ b/Carpet/CarpetLib/src/interpolate_3d_4tl.cc @@ -6,7 +6,7 @@ #include <cctk.h> #include <cctk_Parameters.h> -#include "operator_prototypes.hh" +#include "operator_prototypes_3d.hh" #include "typeprops.hh" using namespace std; diff --git a/Carpet/CarpetLib/src/interpolate_3d_5tl.cc b/Carpet/CarpetLib/src/interpolate_3d_5tl.cc index f4204ea68..848d04a7e 100644 --- a/Carpet/CarpetLib/src/interpolate_3d_5tl.cc +++ b/Carpet/CarpetLib/src/interpolate_3d_5tl.cc @@ -6,7 +6,7 @@ #include <cctk.h> #include <cctk_Parameters.h> -#include "operator_prototypes.hh" +#include "operator_prototypes_3d.hh" #include "typeprops.hh" using namespace std; diff --git a/Carpet/CarpetLib/src/interpolate_eno_3d_3tl.cc b/Carpet/CarpetLib/src/interpolate_eno_3d_3tl.cc index f3693c220..729bb20b5 100644 --- a/Carpet/CarpetLib/src/interpolate_eno_3d_3tl.cc +++ b/Carpet/CarpetLib/src/interpolate_eno_3d_3tl.cc @@ -6,7 +6,7 @@ #include <cctk.h> #include <cctk_Parameters.h> -#include "operator_prototypes.hh" +#include "operator_prototypes_3d.hh" #include "typeprops.hh" using namespace std; diff --git a/Carpet/Carpet/src/Limits.cc b/Carpet/CarpetLib/src/limits.cc index 47b92f945..f3c5ed650 100644 --- a/Carpet/Carpet/src/Limits.cc +++ b/Carpet/CarpetLib/src/limits.cc @@ -8,7 +8,9 @@ #include "defs.hh" -namespace Carpet { +#include "limits.hh" + +namespace CarpetLib { using namespace std; @@ -29,7 +31,7 @@ namespace Carpet { void - SetSystemLimits () + set_system_limits () { DECLARE_CCTK_PARAMETERS; set_limit (RLIMIT_CORE, "core file size", max_core_size_MB); @@ -86,7 +88,7 @@ namespace Carpet { if (value == RLIM_INFINITY) { s << "[unlimited]"; } else { - s << (value / (CCTK_REAL) (1024*1024)) << " MB"; + s << (value / CCTK_REAL (1024*1024)) << " MB"; } } diff --git a/Carpet/CarpetLib/src/limits.hh b/Carpet/CarpetLib/src/limits.hh new file mode 100644 index 000000000..910f02e26 --- /dev/null +++ b/Carpet/CarpetLib/src/limits.hh @@ -0,0 +1,8 @@ +#include <cctk.h> + +namespace CarpetLib { + + void + set_system_limits (); + +} // namespace CarpetLib diff --git a/Carpet/CarpetLib/src/make.code.defn b/Carpet/CarpetLib/src/make.code.defn index 88f6261ce..81a0352ad 100644 --- a/Carpet/CarpetLib/src/make.code.defn +++ b/Carpet/CarpetLib/src/make.code.defn @@ -13,12 +13,16 @@ SRCS = bbox.cc \ gf.cc \ ggf.cc \ gh.cc \ + limits.cc \ mem.cc \ + mpi_string.cc \ region.cc \ + startup_time.cc \ th.cc \ timestat.cc \ vect.cc \ copy_3d.cc \ + copy_4d.cc \ interpolate_3d_2tl.cc \ interpolate_3d_3tl.cc \ interpolate_3d_4tl.cc \ @@ -26,6 +30,7 @@ SRCS = bbox.cc \ interpolate_eno_3d_3tl.cc \ restrict_3d_cc_rf2.cc \ restrict_3d_rf2.cc \ + restrict_4d_rf2.cc \ prolongate_3d_cc_rf2.cc \ prolongate_3d_o1_rf2.cc \ prolongate_3d_o3_rf2.cc \ @@ -33,8 +38,13 @@ SRCS = bbox.cc \ prolongate_3d_o7_rf2.cc \ prolongate_3d_o9_rf2.cc \ prolongate_3d_o11_rf2.cc \ + prolongate_3d_cc_o0_rf2.cc \ + prolongate_3d_cc_o1_rf2.cc \ + prolongate_3d_cc_o2_rf2.cc \ + prolongate_3d_o5_monotone_rf2.cc \ prolongate_3d_real8_eno.F90 \ - prolongate_3d_real8_weno.F90 + prolongate_3d_real8_weno.F90 \ + prolongate_4d_o1_rf2.cc # Subdirectories containing source files SUBDIRS = diff --git a/Carpet/CarpetLib/src/mem.cc b/Carpet/CarpetLib/src/mem.cc index 848988637..b3840a115 100644 --- a/Carpet/CarpetLib/src/mem.cc +++ b/Carpet/CarpetLib/src/mem.cc @@ -21,6 +21,11 @@ #include "defs.hh" #include "dist.hh" +#include "dh.hh" +#include "gdata.hh" +#include "ggf.hh" +#include "gh.hh" +#include "th.hh" #include "mem.hh" @@ -30,12 +35,18 @@ using namespace std; +double const MEGA = 1024*1024; + + + struct mstat { - // Carpet statistics + // Carpet object statistics double total_bytes; double total_objects; double max_bytes; double max_objects; + // Carpet administrative data structure statistics + double total_admin_bytes; // malloc statistics double malloc_used_bytes; double malloc_free_bytes; @@ -71,15 +82,15 @@ mem (size_t const vectorlength, size_t const nelems, if (memptr == NULL) { const double nbytes = vectorlength * nelems * sizeof (T); if (max_allowed_memory_MB > 0 - and (total_allocated_bytes + nbytes > 1.0e6 * max_allowed_memory_MB)) + and (total_allocated_bytes + nbytes > MEGA * max_allowed_memory_MB)) { T Tdummy; CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING, "Refusing to allocate %.0f bytes (%.3f MB) of memory for type %s. %.0f bytes (%.3f MB) are currently allocated in %d objects. The parameter file specifies a maximum of %d MB", - double(nbytes), double(nbytes/1.0e6), + double(nbytes), double(nbytes/MEGA), typestring(Tdummy), double(total_allocated_bytes), - double(total_allocated_bytes/1.0e6), + double(total_allocated_bytes/MEGA), int(total_allocated_objects), int(max_allowed_memory_MB)); } @@ -90,10 +101,10 @@ mem (size_t const vectorlength, size_t const nelems, T Tdummy; CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING, "Failed to allocate %.0f bytes (%.3f MB) of memory for type %s. %.0f bytes (%.3f MB) are currently allocated in %d objects", - double(nbytes), double(nbytes/1.0e6), + double(nbytes), double(nbytes/MEGA), typestring(Tdummy), double(total_allocated_bytes), - double(total_allocated_bytes/1.0e6), + double(total_allocated_bytes/MEGA), int(total_allocated_objects)); } total_allocated_bytes += nbytes; @@ -214,7 +225,7 @@ alloc (size_t nbytes) if (not freeptr) { CCTK_VWarn (CCTK_WARN_ABORT, __LINE__, __FILE__, CCTK_THORNSTRING, "Failed to allocate %.3f MB of memory", - double(freesize/1.0e6)); + double(freesize/MEGA)); } // Remember the pointer so that it can be freed chunks.push (freeptr); @@ -251,40 +262,6 @@ memory () -extern "C" void CarpetLib_setmemlimit (CCTK_ARGUMENTS); - -void CarpetLib_setmemlimit (CCTK_ARGUMENTS) -{ - DECLARE_CCTK_ARGUMENTS; - DECLARE_CCTK_PARAMETERS; - - // Set address space limit - struct rlimit aslimit; - { - check (not getrlimit (RLIMIT_AS, & aslimit)); - } - CCTK_VInfo (CCTK_THORNSTRING, - "Old address space size limit: hard=%lld, soft=%lld", - (long long) aslimit.rlim_max, (long long) aslimit.rlim_cur); - if (max_allowed_memory_MB > 0) { - aslimit.rlim_cur = max_allowed_memory_MB * 1000000LL; - } - { - check (not setrlimit (RLIMIT_AS, & aslimit)); - } - { - check (not getrlimit (RLIMIT_AS, & aslimit)); - } - CCTK_VInfo (CCTK_THORNSTRING, - "Old address space size limit: hard=%lld, soft=%lld", - (long long) aslimit.rlim_max, (long long) aslimit.rlim_cur); - CCTK_VInfo (CCTK_THORNSTRING, - "(Unlimited address space size indicated by %lld)", - (long long) RLIM_INFINITY); -} - - - extern "C" void CarpetLib_printmemstats (CCTK_ARGUMENTS); void CarpetLib_printmemstats (CCTK_ARGUMENTS) @@ -294,14 +271,17 @@ void CarpetLib_printmemstats (CCTK_ARGUMENTS) int const ioproc = 0; - if (print_memstats_every > 0 - and cctk_iteration % print_memstats_every == 0) + if ((print_memstats_every == 0 and cctk_iteration == 0) or + (print_memstats_every > 0 and cctk_iteration % print_memstats_every == 0)) { mstat mybuf; mybuf.total_bytes = total_allocated_bytes; mybuf.total_objects = total_allocated_objects; mybuf.max_bytes = max_allocated_bytes; mybuf.max_objects = max_allocated_objects; + mybuf.total_admin_bytes = + gh::allmemory() + dh::allmemory() + th::allmemory() + + ggf::allmemory() + gdata::allmemory(); #ifdef HAVE_MALLINFO // NOTE: struct mallinfo returns byte-counts as int, which can // overflow. In this case, the information is incorrect. @@ -316,14 +296,23 @@ void CarpetLib_printmemstats (CCTK_ARGUMENTS) cout << "Memory statistics from CarpetLib:" << eol << " Current number of objects: " << total_allocated_objects << eol << " Current allocated memory: " - << setprecision(3) << total_allocated_bytes / 1.0e6 << " MB" << eol + << setprecision(3) << total_allocated_bytes / MEGA << " MB" << eol << " Maximum number of objects: " << max_allocated_objects << eol << " Maximum allocated memory: " - << setprecision(3) << max_allocated_bytes / 1.0e6 << " MB" << eol + << setprecision(3) << max_allocated_bytes / MEGA << " MB" << eol + << " Current administrative memory: " + << setprecision(3) << mybuf.total_admin_bytes / MEGA << " MB" << eol << " Total allocated used system memory: " - << setprecision(3) << mybuf.malloc_used_bytes / 1.0e6 << " MB" << eol + << setprecision(3) << mybuf.malloc_used_bytes / MEGA << " MB" << eol << " Total allocated free system memory: " - << setprecision(3) << mybuf.malloc_free_bytes / 1.0e6 << " MB" << endl; + << setprecision(3) << mybuf.malloc_free_bytes / MEGA << " MB" << endl; + +#warning "TODO" + cout << " gh::allmemory: " << gh ::allmemory() << eol + << " dh::allmemory: " << dh ::allmemory() << eol + << " th::allmemory: " << th ::allmemory() << eol + << " ggf::allmemory: " << ggf ::allmemory() << eol + << " gdata::allmemory: " << gdata::allmemory() << endl; if (strcmp (memstat_file, "") != 0) { vector<mstat> allbuf (dist::size()); @@ -333,9 +322,15 @@ void CarpetLib_printmemstats (CCTK_ARGUMENTS) if (dist::rank() == ioproc) { + double max_total_bytes = 0; + double avg_total_bytes = 0; + double cnt_total_bytes = 0; double max_max_bytes = 0; double avg_max_bytes = 0; double cnt_max_bytes = 0; + double max_admin_bytes = 0; + double avg_admin_bytes = 0; + double cnt_admin_bytes = 0; double max_used_bytes = 0; double avg_used_bytes = 0; double cnt_used_bytes = 0; @@ -343,9 +338,15 @@ void CarpetLib_printmemstats (CCTK_ARGUMENTS) double avg_free_bytes = 0; double cnt_free_bytes = 0; for (size_t n=0; n<allbuf.size(); ++n) { + max_total_bytes = max (max_total_bytes, allbuf[n].total_bytes); + avg_total_bytes += allbuf[n].total_bytes; + ++ cnt_total_bytes; max_max_bytes = max (max_max_bytes, allbuf[n].max_bytes); avg_max_bytes += allbuf[n].max_bytes; ++ cnt_max_bytes; + max_admin_bytes = max (max_admin_bytes, allbuf[n].total_admin_bytes); + avg_admin_bytes += allbuf[n].total_admin_bytes; + ++ cnt_admin_bytes; max_used_bytes = max (max_used_bytes, allbuf[n].malloc_used_bytes); avg_used_bytes += allbuf[n].malloc_used_bytes; ++ cnt_used_bytes; @@ -353,7 +354,9 @@ void CarpetLib_printmemstats (CCTK_ARGUMENTS) avg_free_bytes += allbuf[n].malloc_free_bytes; ++ cnt_free_bytes; } + avg_total_bytes /= cnt_total_bytes; avg_max_bytes /= cnt_max_bytes; + avg_admin_bytes /= cnt_admin_bytes; avg_used_bytes /= cnt_used_bytes; avg_free_bytes /= cnt_free_bytes; @@ -377,13 +380,15 @@ void CarpetLib_printmemstats (CCTK_ARGUMENTS) } file << "# Running on " << dist::size() << " processors" << eol; file << "#" << eol; - file << "# iteration maxmaxbytes avgmaxbytes maxusedbytes avgusedbytes maxfreebytes avgfreebytes" << eol; + file << "# iteration maxtotalbytes avgtotalbytes maxmaxbytes avgm avgfreebytes" << eol; } else { file.open (filename.c_str(), ios::out | ios::app); } file << cctk_iteration + << "\t "<< max_total_bytes << " " << avg_total_bytes << "\t "<< max_max_bytes << " " << avg_max_bytes + << "\t "<< max_admin_bytes << " " << avg_admin_bytes << "\t "<< max_used_bytes << " " << avg_used_bytes << "\t "<< max_free_bytes << " " << avg_free_bytes << eol; diff --git a/Carpet/CarpetLib/src/mem.hh b/Carpet/CarpetLib/src/mem.hh index dbd976c21..fe8694d32 100644 --- a/Carpet/CarpetLib/src/mem.hh +++ b/Carpet/CarpetLib/src/mem.hh @@ -24,7 +24,7 @@ public: T * memptr = NULL, size_t memsize = 0); ~mem (); - T * storage (size_t vectorindex) const + T * storage (size_t vectorindex) const CCTK_ATTRIBUTE_PURE { assert (vectorindex < vectorlength_); assert (clients_.AT(vectorindex)); @@ -33,13 +33,15 @@ public: void register_client (size_t vectorindex); void unregister_client (size_t vectorindex); - bool has_clients () const; + bool has_clients () const CCTK_ATTRIBUTE_PURE; // Memory usage - size_t memory () const; + size_t memory () const CCTK_ATTRIBUTE_PURE; }; template<typename T> +inline size_t memoryof (mem<T> const & m) CCTK_ATTRIBUTE_PURE; +template<typename T> inline size_t memoryof (mem<T> const & m) { return m.memory(); } @@ -84,9 +86,10 @@ public: void * alloc (size_t nbytes); // Memory usage - size_t memory () const; + size_t memory () const CCTK_ATTRIBUTE_PURE; }; +inline size_t memoryof (mempool const & m) CCTK_ATTRIBUTE_PURE; inline size_t memoryof (mempool const & m) { return m.memory(); } #endif // ifndef MEM_HH diff --git a/Carpet/CarpetLib/src/mpi_string.cc b/Carpet/CarpetLib/src/mpi_string.cc new file mode 100644 index 000000000..063ed0bdf --- /dev/null +++ b/Carpet/CarpetLib/src/mpi_string.cc @@ -0,0 +1,480 @@ +#include <algorithm> +#include <cassert> +#include <cstring> +#include <string> +#include <vector> + +#include <mpi.h> + +#include "cctk.h" + +#include "dh.hh" +#include "mpi_string.hh" +#include "region.hh" + + + +namespace CarpetLib +{ + + using namespace std; + + + + vector <string> + allgather_string (MPI_Comm const comm, + string const & data) + { + // Get the total number of processors + int num_procs; + MPI_Comm_size (comm, & num_procs); + + // Gather the lengths of the data strings + int const length = data.length(); + vector <int> lengths (num_procs); + + MPI_Allgather (const_cast <int *> (& length), 1, MPI_INT, + & lengths.front(), 1, MPI_INT, + comm); + + // Allocate space for all data strings + vector <int> offsets (num_procs + 1); + offsets.AT(0) = 0; + for (int n = 0; n < num_procs; ++ n) + { + offsets.AT(n + 1) = offsets.AT(n) + lengths.AT(n); + } + int const total_length = offsets.AT(num_procs); + vector <char> alldata_buffer (total_length); + + // Gather all data strings + MPI_Allgatherv (const_cast <char *> (data.c_str()), length, MPI_CHAR, + & alldata_buffer.front(), + const_cast <int *> (& lengths.front()), + const_cast <int *> (& offsets.front()), + MPI_CHAR, + comm); + + // Convert data buffer with C strings to C++ strings + vector <string> alldata (num_procs); + for (int n = 0; n < num_procs; ++ n) + { + alldata.AT(n) = + string (& alldata_buffer.AT (offsets.AT(n)), lengths.AT(n)); + } + + return alldata; + } + + + + vector <string> + alltoallv_string (MPI_Comm const comm, + vector<string> const & data) + { + // Get the total number of processors + int num_procs; + MPI_Comm_size (comm, & num_procs); + + // Exchange the lengths of the data strings + vector <int> lengths_in (num_procs); + for (int n = 0; n < num_procs; ++ n) + { + lengths_in.AT(n) = data.AT(n).length(); + } + vector <int> lengths (num_procs); + MPI_Alltoall (& lengths_in.front(), 1, MPI_INT, + & lengths.front(), 1, MPI_INT, + comm); + + // Allocate space for all data strings + vector <int> offsets_in (num_procs + 1); + offsets_in.AT(0) = 0; + for (int n = 0; n < num_procs; ++ n) + { + offsets_in.AT(n + 1) = offsets_in.AT(n) + lengths_in.AT(n); + } + int const total_length_in = offsets_in.AT(num_procs); + vector <char> alldata_buffer_in (total_length_in); + + vector <int> offsets (num_procs + 1); + offsets.AT(0) = 0; + for (int n = 0; n < num_procs; ++ n) + { + offsets.AT(n + 1) = offsets.AT(n) + lengths.AT(n); + } + int const total_length = offsets.AT(num_procs); + vector <char> alldata_buffer (total_length); + + // Convert C++ strings to data buffer with C strings + for (int n = 0; n < num_procs; ++ n) + { + memcpy (& alldata_buffer_in.AT (offsets_in.AT(n)), + data.AT(n).c_str(), + lengths_in.AT(n)); + } + + // Exchange all data strings + MPI_Alltoallv (& alldata_buffer_in.front(), + & lengths_in.front(), & offsets_in.front(), MPI_CHAR, + & alldata_buffer.front(), + & lengths.front(), & offsets.front(), MPI_CHAR, + comm); + + // Convert data buffer with C strings to C++ strings + vector <string> alldata (num_procs); + for (int n = 0; n < num_procs; ++ n) + { + alldata.AT(n) = + string (& alldata_buffer.AT (offsets.AT(n)), lengths.AT(n)); + } + + return alldata; + } + + + + string + broadcast_string (MPI_Comm const comm, + int const root, + string const & data) + { + // Get my rank + int rank; + MPI_Comm_rank (comm, & rank); + + if (rank == root) { + + // Broadcast the length of the data string + int const length = data.length(); + MPI_Bcast (const_cast <int *> (& length), 1, MPI_INT, root, comm); + + // Broadcast data string + char const * const buf = data.c_str(); + MPI_Bcast (const_cast <char *> (buf), length, MPI_CHAR, root, comm); + + // Return original string + return data; + + } else { + + // Broadcast the length of the data string + int length; + MPI_Bcast (& length, 1, MPI_INT, root, comm); + + // Allocate space for data string + vector <char> data_buffer (length); + + // Broadcast data string + char * const buf = & data_buffer.front(); + MPI_Bcast (buf, length, MPI_CHAR, root, comm); + + // Convert data buffer with C strings to C++ strings + string const result = string (& data_buffer.front(), length); + + return result; + + } + } + + + + ////////////////////////////////////////////////////////////////////////////// + + + + template <typename T> + vector <vector <T> > + allgatherv (MPI_Comm comm, + vector <T> const & data) + { + // cerr << "QQQ: allgatherv[0]" << endl; + // Get the total number of processors + int num_procs; + MPI_Comm_size (comm, & num_procs); + + // Exchange the sizes of the data vectors + int const size_in = data.size(); + vector <int> sizes_out (num_procs); + // cerr << "QQQ: allgatherv[1] size_in=" << size_in << endl; + MPI_Allgather (const_cast <int *> (& size_in), 1, MPI_INT, + & sizes_out.front(), 1, MPI_INT, + comm); + // cerr << "QQQ: allgatherv[2]" << endl; + + // Allocate space for all data vectors + vector <int> offsets_out (num_procs + 1); + offsets_out.AT(0) = 0; + for (int n = 0; n < num_procs; ++ n) + { + offsets_out.AT(n + 1) = offsets_out.AT(n) + sizes_out.AT(n); + } + int const total_length_out = offsets_out.AT(num_procs); + vector <T> alldata_buffer_out (total_length_out); + + // Exchange all data vectors + T const dummy; + MPI_Datatype const type = mpi_datatype (dummy); + int datatypesize; + MPI_Type_size (type, &datatypesize); + // cerr << "QQQ: allgatherv[3] total_length_out=" << total_length_out << " datatypesize=" << datatypesize << endl; +#if 0 + MPI_Allgatherv (const_cast <T *> (& data.front()), + size_in, type, + & alldata_buffer_out.front(), + & sizes_out.front(), & offsets_out.front(), type, + comm); +#else + int const typesize = sizeof(T); + for (int n = 0; n < num_procs; ++ n) + { + sizes_out.AT(n) *= typesize; + offsets_out.AT(n) *= typesize; + } + MPI_Allgatherv (const_cast <T *> (& data.front()), + size_in * typesize, MPI_CHAR, + & alldata_buffer_out.front(), + & sizes_out.front(), & offsets_out.front(), MPI_CHAR, + comm); + for (int n = 0; n < num_procs; ++ n) + { + sizes_out.AT(n) /= typesize; + offsets_out.AT(n) /= typesize; + } +#endif + // cerr << "QQQ: allgatherv[4]" << endl; + + // Convert data buffer to vectors + vector <vector <T> > alldata_out (num_procs); + { + typename vector <T>::const_iterator p = alldata_buffer_out.begin(); + for (int n = 0; n < num_procs; ++ n) + { + typename vector <T>::const_iterator const pold = p; + advance (p, sizes_out.AT(n)); + alldata_out.AT(n).assign (pold, p); + } + assert (p == alldata_buffer_out.end()); + } + + // cerr << "QQQ: allgatherv[5]" << endl; + return alldata_out; + } + + + + template <typename T> + vector <T> + alltoall (MPI_Comm const comm, + vector <T> const & data) + { + // Get the total number of processors + int num_procs; + MPI_Comm_size (comm, & num_procs); + + // Allocate space for all data + vector <T> alldata (num_procs); + + // Exchange all data vectors + T const dummy; + MPI_Datatype const type = mpi_datatype (dummy); + MPI_Alltoall (& data.front(), 1, type, + & alldata.front(), 1, type, + comm); + + return alldata; + } + + + + template <typename T> + vector <vector <T> > + alltoallv (MPI_Comm const comm, + vector <vector <T> > const & data) + { + // Get the total number of processors + int num_procs; + MPI_Comm_size (comm, & num_procs); + + // Exchange the sizes of the data vectors + vector <int> sizes_in (num_procs); + for (int n = 0; n < num_procs; ++ n) + { + sizes_in.AT(n) = data.AT(n).size(); + } + vector <int> sizes_out (num_procs); + MPI_Alltoall (& sizes_in.front(), 1, MPI_INT, + & sizes_out.front(), 1, MPI_INT, + comm); + + // Copy vectors to data buffer + vector <int> offsets_in (num_procs + 1); + offsets_in.AT(0) = 0; + for (int n = 0; n < num_procs; ++ n) + { + offsets_in.AT(n + 1) = offsets_in.AT(n) + sizes_in.AT(n); + } + int const total_length_in = offsets_in.AT(num_procs); + vector <T> alldata_buffer_in; + alldata_buffer_in.reserve (total_length_in); + for (int n = 0; n < num_procs; ++ n) + { + alldata_buffer_in.insert (alldata_buffer_in.end(), + data.AT(n).begin(), data.AT(n).end()); + } + + // Allocate space for all data vectors + vector <int> offsets_out (num_procs + 1); + offsets_out.AT(0) = 0; + for (int n = 0; n < num_procs; ++ n) + { + offsets_out.AT(n + 1) = offsets_out.AT(n) + sizes_out.AT(n); + } + int const total_length_out = offsets_out.AT(num_procs); + vector <T> alldata_buffer_out (total_length_out); + + // Exchange all data vectors + T const dummy; + MPI_Datatype const type = mpi_datatype (dummy); + MPI_Alltoallv (& alldata_buffer_in.front(), + & sizes_in.front(), & offsets_in.front(), type, + & alldata_buffer_out.front(), + & sizes_out.front(), & offsets_out.front(), type, + comm); + + // Convert data buffer to vectors + vector <vector <T> > alldata_out (num_procs); + { + typename vector <T>::const_iterator p = alldata_buffer_out.begin(); + for (int n = 0; n < num_procs; ++ n) + { + typename vector <T>::const_iterator const pold = p; + advance (p, sizes_out.AT(n)); + alldata_out.AT(n).assign (pold, p); + } + } + + return alldata_out; + } + + + + template <typename T> + vector <T> + alltoallv1 (MPI_Comm const comm, + vector <vector <T> > const & data) + { + // Get the total number of processors + int num_procs; + MPI_Comm_size (comm, & num_procs); + + // Exchange the sizes of the data vectors + vector <int> sizes_in (num_procs); + for (int n = 0; n < num_procs; ++ n) + { + sizes_in.AT(n) = data.AT(n).size(); + } + vector <int> sizes_out (num_procs); + // cerr << "QQQ: alltoallv1[1]" << endl; + MPI_Alltoall (& sizes_in.front(), 1, MPI_INT, + & sizes_out.front(), 1, MPI_INT, + comm); + // cerr << "QQQ: alltoallv1[2]" << endl; + +#if 0 + // Copy vectors to data buffer + vector <int> offsets_in (num_procs + 1); + offsets_in.AT(0) = 0; + for (int n = 0; n < num_procs; ++ n) + { + offsets_in.AT(n + 1) = offsets_in.AT(n) + sizes_in.AT(n); + } + int const total_length_in = offsets_in.AT(num_procs); + vector <T> alldata_buffer_in; + alldata_buffer_in.reserve (total_length_in); + for (int n = 0; n < num_procs; ++ n) + { + alldata_buffer_in.insert (alldata_buffer_in.end(), + data.AT(n).begin(), data.AT(n).end()); + } + + // Allocate space for all data vectors + vector <int> offsets_out (num_procs + 1); + offsets_out.AT(0) = 0; + for (int n = 0; n < num_procs; ++ n) + { + offsets_out.AT(n + 1) = offsets_out.AT(n) + sizes_out.AT(n); + } + int const total_length_out = offsets_out.AT(num_procs); + vector <T> alldata_buffer_out (total_length_out); + + // Exchange all data vectors + T const dummy; + MPI_Datatype const type = mpi_datatype (dummy); + // cerr << "QQQ: alltoallv1[3]" << endl; + MPI_Alltoallv (& alldata_buffer_in.front(), + & sizes_in.front(), & offsets_in.front(), type, + & alldata_buffer_out.front(), + & sizes_out.front(), & offsets_out.front(), type, + comm); + // cerr << "QQQ: alltoallv1[4]" << endl; +#endif + + // Allocate space for all data vectors + vector <int> offsets_out (num_procs + 1); + offsets_out.AT(0) = 0; + for (int n = 0; n < num_procs; ++ n) + { + offsets_out.AT(n + 1) = offsets_out.AT(n) + sizes_out.AT(n); + } + int const total_length_out = offsets_out.AT(num_procs); + vector <T> alldata_buffer_out (total_length_out); + + // Exchange all data vectors + T const dummy; + MPI_Datatype const type = mpi_datatype (dummy); + int const tag = 4711; + vector <MPI_Request> reqs (2 * num_procs); + int nreqs = 0; + // cerr << "QQQ: alltoallv1[5]" << endl; + for (int n = 0; n < num_procs; ++ n) + { + if (sizes_out.AT(n) > 0) { + MPI_Irecv (& alldata_buffer_out.AT(offsets_out.AT(n)), + sizes_out.AT(n), + type, + n, tag, comm, & reqs.AT(nreqs)); + ++ nreqs; + } + } + // cerr << "QQQ: alltoallv1[6]" << endl; + for (int n = 0; n < num_procs; ++ n) + { + if (sizes_in.AT(n) > 0) { + MPI_Isend (const_cast <T *> (& data.AT(n).front()), + sizes_in.AT(n), + type, + n, tag, comm, & reqs.AT(nreqs)); + ++ nreqs; + } + } + // cerr << "QQQ: alltoallv1[7]" << endl; + MPI_Waitall (nreqs, & reqs.front(), MPI_STATUSES_IGNORE); + // cerr << "QQQ: alltoallv1[8]" << endl; + + return alldata_buffer_out; + } + + + + template + vector <vector <dh::dboxes> > + allgatherv (MPI_Comm comm, + vector <dh::dboxes> const & data); + + template + vector <sendrecv_pseudoregion_t> + alltoallv1 (MPI_Comm comm, + vector <vector <sendrecv_pseudoregion_t> > const & data); + +} // namespace CarpetLib diff --git a/Carpet/CarpetLib/src/mpi_string.hh b/Carpet/CarpetLib/src/mpi_string.hh new file mode 100644 index 000000000..6ed8d447d --- /dev/null +++ b/Carpet/CarpetLib/src/mpi_string.hh @@ -0,0 +1,55 @@ +#include <string> +#include <vector> + +#include <cctk.h> + +#include <mpi.h> + + + +namespace CarpetLib +{ + + using namespace std; + + + + // String communication + + vector <string> + allgather_string (MPI_Comm comm, + string const & data); + + vector <string> + alltoallv_string (MPI_Comm comm, + vector <string> const & data); + + string + broadcast_string (MPI_Comm comm, int root, + string const & data); + + + + // Arbitrary datatypes + + template <typename T> + vector <vector <T> > + allgatherv (MPI_Comm comm, + vector <T> const & data); + + template <typename T> + vector <T> + alltoall (MPI_Comm comm, + vector <T> const & data); + + template <typename T> + vector <vector <T> > + alltoallv (MPI_Comm comm, + vector <vector <T> > const & data); + + template <typename T> + vector <T> + alltoallv1 (MPI_Comm comm, + vector <vector <T> > const & data); + +} // namespace CarpetLib diff --git a/Carpet/CarpetLib/src/operator_prototypes.hh b/Carpet/CarpetLib/src/operator_prototypes.hh index 0eb990923..1feae8a90 100644 --- a/Carpet/CarpetLib/src/operator_prototypes.hh +++ b/Carpet/CarpetLib/src/operator_prototypes.hh @@ -1,253 +1,12 @@ #ifndef OPERATOR_PROTOTYPES #define OPERATOR_PROTOTYPES -#include <cstdlib> - -#include <cctk.h> - -#include <vect.hh> -#include <bbox.hh> - namespace CarpetLib { - using namespace std; - - - - static inline - size_t - index3 (size_t const i, size_t const j, size_t const k, - size_t const exti, size_t const extj, size_t const extk) - { -#ifdef CARPET_DEBUG - assert (static_cast <ptrdiff_t> (i) >= 0 and i < exti); - assert (static_cast <ptrdiff_t> (j) >= 0 and j < extj); - assert (static_cast <ptrdiff_t> (k) >= 0 and k < extk); -#endif - - return i + exti * (j + extj * k); - } - - - - static int const dim3 = 3; - - typedef vect <bool, dim3> bvect3; - typedef vect <int, dim3> ivect3; - typedef bbox <int, dim3> ibbox3; - static int const reffact2 = 2; - - - template <typename T> - void - copy_3d (T const * restrict const src, - ivect3 const & restrict srcext, - T * restrict const dst, - ivect3 const & restrict dstext, - ibbox3 const & restrict srcbbox, - ibbox3 const & restrict dstbbox, - ibbox3 const & restrict regbbox); - - - - template <typename T> - void - prolongate_3d_o1_rf2 (T const * restrict const src, - ivect3 const & restrict srcext, - T * restrict const dst, - ivect3 const & restrict dstext, - ibbox3 const & restrict srcbbox, - ibbox3 const & restrict dstbbox, - ibbox3 const & restrict regbbox); - - template <typename T> - void - prolongate_3d_o3_rf2 (T const * restrict const src, - ivect3 const & restrict srcext, - T * restrict const dst, - ivect3 const & restrict dstext, - ibbox3 const & restrict srcbbox, - ibbox3 const & restrict dstbbox, - ibbox3 const & restrict regbbox); - - template <typename T> - void - prolongate_3d_o5_rf2 (T const * restrict const src, - ivect3 const & restrict srcext, - T * restrict const dst, - ivect3 const & restrict dstext, - ibbox3 const & restrict srcbbox, - ibbox3 const & restrict dstbbox, - ibbox3 const & restrict regbbox); - - template <typename T> - void - prolongate_3d_o7_rf2 (T const * restrict const src, - ivect3 const & restrict srcext, - T * restrict const dst, - ivect3 const & restrict dstext, - ibbox3 const & restrict srcbbox, - ibbox3 const & restrict dstbbox, - ibbox3 const & restrict regbbox); - - template <typename T> - void - prolongate_3d_o9_rf2 (T const * restrict const src, - ivect3 const & restrict srcext, - T * restrict const dst, - ivect3 const & restrict dstext, - ibbox3 const & restrict srcbbox, - ibbox3 const & restrict dstbbox, - ibbox3 const & restrict regbbox); - - template <typename T> - void - prolongate_3d_o11_rf2 (T const * restrict const src, - ivect3 const & restrict srcext, - T * restrict const dst, - ivect3 const & restrict dstext, - ibbox3 const & restrict srcbbox, - ibbox3 const & restrict dstbbox, - ibbox3 const & restrict regbbox); - - - - template <typename T> - void - restrict_3d_rf2 (T const * restrict const src, - ivect3 const & restrict srcext, - T * restrict const dst, - ivect3 const & restrict dstext, - ibbox3 const & restrict srcbbox, - ibbox3 const & restrict dstbbox, - ibbox3 const & restrict regbbox); - - - - template <typename T> - void - interpolate_3d_2tl (T const * restrict const src1, - CCTK_REAL const t1, - T const * restrict const src2, - CCTK_REAL const t2, - ivect3 const & restrict srcext, - T * restrict const dst, - CCTK_REAL const t, - ivect3 const & restrict dstext, - ibbox3 const & restrict srcbbox, - ibbox3 const & restrict dstbbox, - ibbox3 const & restrict regbbox); - - template <typename T> - void - interpolate_3d_3tl (T const * restrict const src1, - CCTK_REAL const t1, - T const * restrict const src2, - CCTK_REAL const t2, - T const * restrict const src3, - CCTK_REAL const t3, - ivect3 const & restrict srcext, - T * restrict const dst, - CCTK_REAL const t, - ivect3 const & restrict dstext, - ibbox3 const & restrict srcbbox, - ibbox3 const & restrict dstbbox, - ibbox3 const & restrict regbbox); - - template <typename T> - void - interpolate_3d_4tl (T const * restrict const src1, - CCTK_REAL const t1, - T const * restrict const src2, - CCTK_REAL const t2, - T const * restrict const src3, - CCTK_REAL const t3, - T const * restrict const src4, - CCTK_REAL const t4, - ivect3 const & restrict srcext, - T * restrict const dst, - CCTK_REAL const t, - ivect3 const & restrict dstext, - ibbox3 const & restrict srcbbox, - ibbox3 const & restrict dstbbox, - ibbox3 const & restrict regbbox); - - template <typename T> - void - interpolate_3d_5tl (T const * restrict const src1, - CCTK_REAL const t1, - T const * restrict const src2, - CCTK_REAL const t2, - T const * restrict const src3, - CCTK_REAL const t3, - T const * restrict const src4, - CCTK_REAL const t4, - T const * restrict const src5, - CCTK_REAL const t5, - ivect3 const & restrict srcext, - T * restrict const dst, - CCTK_REAL const t, - ivect3 const & restrict dstext, - ibbox3 const & restrict srcbbox, - ibbox3 const & restrict dstbbox, - ibbox3 const & restrict regbbox); - - template <typename T> - void - interpolate_eno_3d_3tl (T const * restrict const src1, - CCTK_REAL const t1, - T const * restrict const src2, - CCTK_REAL const t2, - T const * restrict const src3, - CCTK_REAL const t3, - ivect3 const & restrict srcext, - T * restrict const dst, - CCTK_REAL const t, - ivect3 const & restrict dstext, - ibbox3 const & restrict srcbbox, - ibbox3 const & restrict dstbbox, - ibbox3 const & restrict regbbox); - - - - template <typename T> - void - prolongate_3d_cc_rf2_std2prim (T const * restrict const src, - ivect3 const & restrict srcext, - T * restrict const dst, - ivect3 const & restrict dstext, - ibbox3 const & restrict srcbbox, - ibbox3 const & restrict dstbbox, - ibbox3 const & restrict regbbox); - - template <typename T> - void - prolongate_3d_cc_rf2_prim2std (T const * restrict const src, - ivect3 const & restrict srcext, - T * restrict const dst, - ivect3 const & restrict dstext, - ibbox3 const & restrict srcbbox, - ibbox3 const & restrict dstbbox, - ibbox3 const & restrict regbbox); - - - - template <typename T> - void - restrict_3d_cc_rf2 (T const * restrict const src, - ivect3 const & restrict srcext, - T * restrict const dst, - ivect3 const & restrict dstext, - ibbox3 const & restrict srcbbox, - ibbox3 const & restrict dstbbox, - ibbox3 const & restrict regbbox); - - - } // namespace CarpetLib diff --git a/Carpet/CarpetLib/src/operator_prototypes_3d.hh b/Carpet/CarpetLib/src/operator_prototypes_3d.hh new file mode 100644 index 000000000..19deccea8 --- /dev/null +++ b/Carpet/CarpetLib/src/operator_prototypes_3d.hh @@ -0,0 +1,305 @@ +#ifndef OPERATOR_PROTOTYPES_3D +#define OPERATOR_PROTOTYPES_3D + +#include <cstdlib> + +#include <cctk.h> + +#include "defs.hh" +#include "bbox.hh" +#include "vect.hh" + +#include "operator_prototypes.hh" + + + +namespace CarpetLib { + + using namespace std; + + + + static inline + size_t + index3 (size_t const i, size_t const j, size_t const k, + size_t const exti, size_t const extj, size_t const extk) + CCTK_ATTRIBUTE_CONST; + static inline + size_t + index3 (size_t const i, size_t const j, size_t const k, + size_t const exti, size_t const extj, size_t const extk) + { +#ifdef CARPET_DEBUG + assert (static_cast <ptrdiff_t> (i) >= 0 and i < exti); + assert (static_cast <ptrdiff_t> (j) >= 0 and j < extj); + assert (static_cast <ptrdiff_t> (k) >= 0 and k < extk); +#endif + + return i + exti * (j + extj * k); + } + + + + static int const dim3 = 3; + + typedef vect <bool, dim3> bvect3; + typedef vect <int, dim3> ivect3; + typedef bbox <int, dim3> ibbox3; + + + + template <typename T> + void + copy_3d (T const * restrict const src, + ivect3 const & restrict srcext, + T * restrict const dst, + ivect3 const & restrict dstext, + ibbox3 const & restrict srcbbox, + ibbox3 const & restrict dstbbox, + ibbox3 const & restrict regbbox); + + + + template <typename T> + void + prolongate_3d_o1_rf2 (T const * restrict const src, + ivect3 const & restrict srcext, + T * restrict const dst, + ivect3 const & restrict dstext, + ibbox3 const & restrict srcbbox, + ibbox3 const & restrict dstbbox, + ibbox3 const & restrict regbbox); + + template <typename T> + void + prolongate_3d_o3_rf2 (T const * restrict const src, + ivect3 const & restrict srcext, + T * restrict const dst, + ivect3 const & restrict dstext, + ibbox3 const & restrict srcbbox, + ibbox3 const & restrict dstbbox, + ibbox3 const & restrict regbbox); + + template <typename T> + void + prolongate_3d_o5_rf2 (T const * restrict const src, + ivect3 const & restrict srcext, + T * restrict const dst, + ivect3 const & restrict dstext, + ibbox3 const & restrict srcbbox, + ibbox3 const & restrict dstbbox, + ibbox3 const & restrict regbbox); + + template <typename T> + void + prolongate_3d_o7_rf2 (T const * restrict const src, + ivect3 const & restrict srcext, + T * restrict const dst, + ivect3 const & restrict dstext, + ibbox3 const & restrict srcbbox, + ibbox3 const & restrict dstbbox, + ibbox3 const & restrict regbbox); + + template <typename T> + void + prolongate_3d_o9_rf2 (T const * restrict const src, + ivect3 const & restrict srcext, + T * restrict const dst, + ivect3 const & restrict dstext, + ibbox3 const & restrict srcbbox, + ibbox3 const & restrict dstbbox, + ibbox3 const & restrict regbbox); + + template <typename T> + void + prolongate_3d_o11_rf2 (T const * restrict const src, + ivect3 const & restrict srcext, + T * restrict const dst, + ivect3 const & restrict dstext, + ibbox3 const & restrict srcbbox, + ibbox3 const & restrict dstbbox, + ibbox3 const & restrict regbbox); + + + + template <typename T> + void + prolongate_3d_o5_monotone_rf2 (T const * restrict const src, + ivect3 const & restrict srcext, + T * restrict const dst, + ivect3 const & restrict dstext, + ibbox3 const & restrict srcbbox, + ibbox3 const & restrict dstbbox, + ibbox3 const & restrict regbbox); + + + + template <typename T> + void + prolongate_3d_cc_o0_rf2 (T const * restrict const src, + ivect3 const & restrict srcext, + T * restrict const dst, + ivect3 const & restrict dstext, + ibbox3 const & restrict srcbbox, + ibbox3 const & restrict dstbbox, + ibbox3 const & restrict regbbox); + + template <typename T> + void + prolongate_3d_cc_o1_rf2 (T const * restrict const src, + ivect3 const & restrict srcext, + T * restrict const dst, + ivect3 const & restrict dstext, + ibbox3 const & restrict srcbbox, + ibbox3 const & restrict dstbbox, + ibbox3 const & restrict regbbox); + + template <typename T> + void + prolongate_3d_cc_o2_rf2 (T const * restrict const src, + ivect3 const & restrict srcext, + T * restrict const dst, + ivect3 const & restrict dstext, + ibbox3 const & restrict srcbbox, + ibbox3 const & restrict dstbbox, + ibbox3 const & restrict regbbox); + + + + template <typename T> + void + restrict_3d_rf2 (T const * restrict const src, + ivect3 const & restrict srcext, + T * restrict const dst, + ivect3 const & restrict dstext, + ibbox3 const & restrict srcbbox, + ibbox3 const & restrict dstbbox, + ibbox3 const & restrict regbbox); + + + + template <typename T> + void + interpolate_3d_2tl (T const * restrict const src1, + CCTK_REAL const t1, + T const * restrict const src2, + CCTK_REAL const t2, + ivect3 const & restrict srcext, + T * restrict const dst, + CCTK_REAL const t, + ivect3 const & restrict dstext, + ibbox3 const & restrict srcbbox, + ibbox3 const & restrict dstbbox, + ibbox3 const & restrict regbbox); + + template <typename T> + void + interpolate_3d_3tl (T const * restrict const src1, + CCTK_REAL const t1, + T const * restrict const src2, + CCTK_REAL const t2, + T const * restrict const src3, + CCTK_REAL const t3, + ivect3 const & restrict srcext, + T * restrict const dst, + CCTK_REAL const t, + ivect3 const & restrict dstext, + ibbox3 const & restrict srcbbox, + ibbox3 const & restrict dstbbox, + ibbox3 const & restrict regbbox); + + template <typename T> + void + interpolate_3d_4tl (T const * restrict const src1, + CCTK_REAL const t1, + T const * restrict const src2, + CCTK_REAL const t2, + T const * restrict const src3, + CCTK_REAL const t3, + T const * restrict const src4, + CCTK_REAL const t4, + ivect3 const & restrict srcext, + T * restrict const dst, + CCTK_REAL const t, + ivect3 const & restrict dstext, + ibbox3 const & restrict srcbbox, + ibbox3 const & restrict dstbbox, + ibbox3 const & restrict regbbox); + + template <typename T> + void + interpolate_3d_5tl (T const * restrict const src1, + CCTK_REAL const t1, + T const * restrict const src2, + CCTK_REAL const t2, + T const * restrict const src3, + CCTK_REAL const t3, + T const * restrict const src4, + CCTK_REAL const t4, + T const * restrict const src5, + CCTK_REAL const t5, + ivect3 const & restrict srcext, + T * restrict const dst, + CCTK_REAL const t, + ivect3 const & restrict dstext, + ibbox3 const & restrict srcbbox, + ibbox3 const & restrict dstbbox, + ibbox3 const & restrict regbbox); + + template <typename T> + void + interpolate_eno_3d_3tl (T const * restrict const src1, + CCTK_REAL const t1, + T const * restrict const src2, + CCTK_REAL const t2, + T const * restrict const src3, + CCTK_REAL const t3, + ivect3 const & restrict srcext, + T * restrict const dst, + CCTK_REAL const t, + ivect3 const & restrict dstext, + ibbox3 const & restrict srcbbox, + ibbox3 const & restrict dstbbox, + ibbox3 const & restrict regbbox); + + + + template <typename T> + void + prolongate_3d_cc_rf2_std2prim (T const * restrict const src, + ivect3 const & restrict srcext, + T * restrict const dst, + ivect3 const & restrict dstext, + ibbox3 const & restrict srcbbox, + ibbox3 const & restrict dstbbox, + ibbox3 const & restrict regbbox); + + template <typename T> + void + prolongate_3d_cc_rf2_prim2std (T const * restrict const src, + ivect3 const & restrict srcext, + T * restrict const dst, + ivect3 const & restrict dstext, + ibbox3 const & restrict srcbbox, + ibbox3 const & restrict dstbbox, + ibbox3 const & restrict regbbox); + + + + template <typename T> + void + restrict_3d_cc_rf2 (T const * restrict const src, + ivect3 const & restrict srcext, + T * restrict const dst, + ivect3 const & restrict dstext, + ibbox3 const & restrict srcbbox, + ibbox3 const & restrict dstbbox, + ibbox3 const & restrict regbbox); + + + +} // namespace CarpetLib + + + +#endif // #ifndef OPERATOR_PROTOTYPES_3D diff --git a/Carpet/CarpetLib/src/operator_prototypes_4d.hh b/Carpet/CarpetLib/src/operator_prototypes_4d.hh new file mode 100644 index 000000000..afd75c655 --- /dev/null +++ b/Carpet/CarpetLib/src/operator_prototypes_4d.hh @@ -0,0 +1,92 @@ +#ifndef OPERATOR_PROTOTYPES_4D +#define OPERATOR_PROTOTYPES_4D + +#include <cstdlib> + +#include <cctk.h> + +#include "defs.hh" +#include "bbox.hh" +#include "vect.hh" + +#include "operator_prototypes.hh" + + + +namespace CarpetLib { + + using namespace std; + + + + static inline + size_t + index4 (size_t const i, size_t const j, size_t const k, size_t const kl, + size_t const exti, size_t const extj, size_t const extk, size_t const extl) + CCTK_ATTRIBUTE_CONST; + static inline + size_t + index4 (size_t const i, size_t const j, size_t const k, size_t const l, + size_t const exti, size_t const extj, size_t const extk, size_t const extl) + { +#ifdef CARPET_DEBUG + assert (static_cast <ptrdiff_t> (i) >= 0 and i < exti); + assert (static_cast <ptrdiff_t> (j) >= 0 and j < extj); + assert (static_cast <ptrdiff_t> (k) >= 0 and k < extk); + assert (static_cast <ptrdiff_t> (l) >= 0 and l < extl); +#endif + + return i + exti * (j + extj * (k + extk * l)); + } + + + + static int const dim4 = 4; + + typedef vect <bool, dim4> bvect4; + typedef vect <int, dim4> ivect4; + typedef bbox <int, dim4> ibbox4; + + + + template <typename T> + void + copy_4d (T const * restrict const src, + ivect4 const & restrict srcext, + T * restrict const dst, + ivect4 const & restrict dstext, + ibbox4 const & restrict srcbbox, + ibbox4 const & restrict dstbbox, + ibbox4 const & restrict regbbox); + + + + template <typename T> + void + prolongate_4d_o1_rf2 (T const * restrict const src, + ivect4 const & restrict srcext, + T * restrict const dst, + ivect4 const & restrict dstext, + ibbox4 const & restrict srcbbox, + ibbox4 const & restrict dstbbox, + ibbox4 const & restrict regbbox); + + + + template <typename T> + void + restrict_4d_rf2 (T const * restrict const src, + ivect4 const & restrict srcext, + T * restrict const dst, + ivect4 const & restrict dstext, + ibbox4 const & restrict srcbbox, + ibbox4 const & restrict dstbbox, + ibbox4 const & restrict regbbox); + + + +} // namespace CarpetLib + + + +#endif // #ifndef OPERATOR_PROTOTYPES_4D diff --git a/Carpet/CarpetLib/src/operators.hh b/Carpet/CarpetLib/src/operators.hh index 8ecd308a4..07e4e5616 100644 --- a/Carpet/CarpetLib/src/operators.hh +++ b/Carpet/CarpetLib/src/operators.hh @@ -9,11 +9,13 @@ enum operator_type op_none, // do not transport op_sync, // transport only on the same level // (error if called between levels) + op_restrict, // restrict only, do not prolongate op_copy, // use simple copying for prolongation // (needs only one time level) op_Lagrange, // Lagrange interpolation (standard) op_ENO, // use ENO stencils (for hydro) - op_WENO // use WENO stencils (for hydro) + op_WENO, // use WENO stencils (for hydro) + op_Lagrange_monotone // monotone Lagrange interpolation (for hydro) }; #endif // OPERATORS_HH diff --git a/Carpet/CarpetLib/src/prolongate_3d_cc_o0_rf2.cc b/Carpet/CarpetLib/src/prolongate_3d_cc_o0_rf2.cc new file mode 100644 index 000000000..352f4c380 --- /dev/null +++ b/Carpet/CarpetLib/src/prolongate_3d_cc_o0_rf2.cc @@ -0,0 +1,320 @@ +#include <algorithm> +#include <cassert> +#include <cmath> +#include <cstdlib> + +#include <cctk.h> +#include <cctk_Parameters.h> + +#include "operator_prototypes_3d.hh" +#include "typeprops.hh" + +using namespace std; + + + +namespace CarpetLib { + + + +#define SRCIND3(i,j,k) \ + index3 (i, j, k, \ + srciext, srcjext, srckext) +#define DSTIND3(i,j,k) \ + index3 (i, j, k, \ + dstiext, dstjext, dstkext) + + + + template <typename T> + void + prolongate_3d_cc_o0_rf2 (T const * restrict const src, + ivect3 const & restrict srcext, + T * restrict const dst, + ivect3 const & restrict dstext, + ibbox3 const & restrict srcbbox, + ibbox3 const & restrict dstbbox, + ibbox3 const & restrict regbbox) + { + typedef typename typeprops<T>::real RT; + + + + if (any (srcbbox.stride() <= regbbox.stride() or + dstbbox.stride() != regbbox.stride())) + { + CCTK_WARN (0, "Internal error: strides disagree"); + } + + if (any (srcbbox.stride() != reffact2 * dstbbox.stride())) { + CCTK_WARN (0, "Internal error: source strides are not twice the destination strides"); + } + + if (any (dstbbox.stride() % 2 != 0)) { + CCTK_WARN (0, "Internal error: destination strides are not even"); + } + + // This could be handled, but is likely to point to an error + // elsewhere + if (regbbox.empty()) { + CCTK_WARN (0, "Internal error: region extent is empty"); + } + + + + ivect3 const regext = regbbox.shape() / regbbox.stride(); + assert (all ((regbbox.lower() - srcbbox.lower() + regbbox.stride() / 2) % regbbox.stride() == 0)); + ivect3 const srcoff = (regbbox.lower() - srcbbox.lower() + regbbox.stride() / 2) / regbbox.stride(); + assert (all ((regbbox.lower() - dstbbox.lower()) % regbbox.stride() == 0)); + ivect3 const dstoff = (regbbox.lower() - dstbbox.lower()) / regbbox.stride(); + + + + bvect3 const needoffsetlo = srcoff % reffact2 != 0; + bvect3 const needoffsethi = (srcoff + regext - 1) % reffact2 != 0; + ivect3 const offsetlo = either (needoffsetlo, 1, 0); + ivect3 const offsethi = either (needoffsethi, 1, 0); + + + + if (not regbbox.expand(offsetlo, offsethi).is_contained_in(srcbbox) or + not regbbox .is_contained_in(dstbbox)) + + if (any (srcext != srcbbox.shape() / srcbbox.stride() or + dstext != dstbbox.shape() / dstbbox.stride())) + { + CCTK_WARN (0, "Internal error: array sizes don't agree with bounding boxes"); + } + + + + size_t const srciext = srcext[0]; + size_t const srcjext = srcext[1]; + size_t const srckext = srcext[2]; + + size_t const dstiext = dstext[0]; + size_t const dstjext = dstext[1]; + size_t const dstkext = dstext[2]; + + size_t const regiext = regext[0]; + size_t const regjext = regext[1]; + size_t const regkext = regext[2]; + + size_t const srcioff = srcoff[0]; + size_t const srcjoff = srcoff[1]; + size_t const srckoff = srcoff[2]; + + size_t const dstioff = dstoff[0]; + size_t const dstjoff = dstoff[1]; + size_t const dstkoff = dstoff[2]; + + + + size_t const fi = srcioff % 2; + size_t const fj = srcjoff % 2; + size_t const fk = srckoff % 2; + + size_t const i0 = srcioff / 2; + size_t const j0 = srcjoff / 2; + size_t const k0 = srckoff / 2; + + + + // Loop over fine region + // Label scheme: l 8 fk fj fi + + size_t is, js, ks; + size_t id, jd, kd; + size_t i, j, k; + + // begin k loop + k = 0; + ks = k0; + kd = dstkoff; + if (fk == 0) goto l80; + goto l81; + + // begin j loop + l80: + j = 0; + js = j0; + jd = dstjoff; + if (fj == 0) goto l800; + goto l801; + + // begin i loop + l800: + i = 0; + is = i0; + id = dstioff; + if (fi == 0) goto l8000; + goto l8001; + + // kernel + l8000: + dst[DSTIND3(id,jd,kd)] = src[SRCIND3(is,js,ks)]; + i = i+1; + id = id+1; + if (i < regiext) goto l8001; + goto l900; + + // kernel + l8001: + dst[DSTIND3(id,jd,kd)] = src[SRCIND3(is,js,ks)]; + i = i+1; + id = id+1; + is = is+1; + if (i < regiext) goto l8000; + goto l900; + + // end i loop + l900: + j = j+1; + jd = jd+1; + if (j < regjext) goto l801; + goto l90; + + // begin i loop + l801: + i = 0; + is = i0; + id = dstioff; + if (fi == 0) goto l8010; + goto l8011; + + // kernel + l8010: + dst[DSTIND3(id,jd,kd)] = src[SRCIND3(is,js,ks)]; + i = i+1; + id = id+1; + if (i < regiext) goto l8011; + goto l901; + + // kernel + l8011: + dst[DSTIND3(id,jd,kd)] = src[SRCIND3(is,js,ks)]; + i = i+1; + id = id+1; + is = is+1; + if (i < regiext) goto l8010; + goto l901; + + // end i loop + l901: + j = j+1; + jd = jd+1; + js = js+1; + if (j < regjext) goto l800; + goto l90; + + // end j loop + l90: + k = k+1; + kd = kd+1; + if (k < regkext) goto l81; + goto l9; + + // begin j loop + l81: + j = 0; + js = j0; + jd = dstjoff; + if (fj == 0) goto l810; + goto l811; + + // begin i loop + l810: + i = 0; + is = i0; + id = dstioff; + if (fi == 0) goto l8100; + goto l8101; + + // kernel + l8100: + dst[DSTIND3(id,jd,kd)] = src[SRCIND3(is,js,ks)]; + i = i+1; + id = id+1; + if (i < regiext) goto l8101; + goto l910; + + // kernel + l8101: + dst[DSTIND3(id,jd,kd)] = src[SRCIND3(is,js,ks)]; + i = i+1; + id = id+1; + is = is+1; + if (i < regiext) goto l8100; + goto l910; + + // end i loop + l910: + j = j+1; + jd = jd+1; + if (j < regjext) goto l811; + goto l91; + + // begin i loop + l811: + i = 0; + is = i0; + id = dstioff; + if (fi == 0) goto l8110; + goto l8111; + + // kernel + l8110: + dst[DSTIND3(id,jd,kd)] = src[SRCIND3(is,js,ks)]; + i = i+1; + id = id+1; + if (i < regiext) goto l8111; + goto l911; + + // kernel + l8111: + dst[DSTIND3(id,jd,kd)] = src[SRCIND3(is,js,ks)]; + i = i+1; + id = id+1; + is = is+1; + if (i < regiext) goto l8110; + goto l911; + + // end i loop + l911: + j = j+1; + jd = jd+1; + js = js+1; + if (j < regjext) goto l810; + goto l91; + + // end j loop + l91: + k = k+1; + kd = kd+1; + ks = ks+1; + if (k < regkext) goto l80; + goto l9; + + // end k loop + l9:; + + } + + + +#define INSTANTIATE(T) \ + template \ + void \ + prolongate_3d_cc_o0_rf2 (T const * restrict const src, \ + ivect3 const & restrict srcext, \ + T * restrict const dst, \ + ivect3 const & restrict dstext, \ + ibbox3 const & restrict srcbbox, \ + ibbox3 const & restrict dstbbox, \ + ibbox3 const & restrict regbbox); +#include "instantiate" +#undef INSTANTIATE + + + +} // CarpetLib diff --git a/Carpet/CarpetLib/src/prolongate_3d_cc_o1_rf2.cc b/Carpet/CarpetLib/src/prolongate_3d_cc_o1_rf2.cc new file mode 100644 index 000000000..42fc078ee --- /dev/null +++ b/Carpet/CarpetLib/src/prolongate_3d_cc_o1_rf2.cc @@ -0,0 +1,390 @@ +#include <algorithm> +#include <cassert> +#include <cmath> +#include <cstdlib> + +#include <cctk.h> +#include <cctk_Parameters.h> + +#include "operator_prototypes_3d.hh" +#include "typeprops.hh" + +using namespace std; + + + +namespace CarpetLib { + + + +#define SRCIND3(i,j,k) \ + index3 (i, j, k, \ + srciext, srcjext, srckext) +#define DSTIND3(i,j,k) \ + index3 (i, j, k, \ + dstiext, dstjext, dstkext) + + + + template <typename T> + void + prolongate_3d_cc_o1_rf2 (T const * restrict const src, + ivect3 const & restrict srcext, + T * restrict const dst, + ivect3 const & restrict dstext, + ibbox3 const & restrict srcbbox, + ibbox3 const & restrict dstbbox, + ibbox3 const & restrict regbbox) + { + typedef typename typeprops<T>::real RT; + + + + if (any (srcbbox.stride() <= regbbox.stride() or + dstbbox.stride() != regbbox.stride())) + { + CCTK_WARN (0, "Internal error: strides disagree"); + } + + if (any (srcbbox.stride() != reffact2 * dstbbox.stride())) { + CCTK_WARN (0, "Internal error: source strides are not twice the destination strides"); + } + + if (any (dstbbox.stride() % 2 != 0)) { + CCTK_WARN (0, "Internal error: destination strides are not even"); + } + + // This could be handled, but is likely to point to an error + // elsewhere + if (regbbox.empty()) { + CCTK_WARN (0, "Internal error: region extent is empty"); + } + + + + ivect3 const regext = regbbox.shape() / regbbox.stride(); + assert (all ((regbbox.lower() - srcbbox.lower() + regbbox.stride() / 2) % regbbox.stride() == 0)); + ivect3 const srcoff = (regbbox.lower() - srcbbox.lower() + regbbox.stride() / 2) / regbbox.stride(); + assert (all ((regbbox.lower() - dstbbox.lower()) % regbbox.stride() == 0)); + ivect3 const dstoff = (regbbox.lower() - dstbbox.lower()) / regbbox.stride(); + + + + ivect3 const offsetlo = 1; + ivect3 const offsethi = 1; + + + + if (not regbbox.expand(offsetlo, offsethi).is_contained_in(srcbbox) or + not regbbox .is_contained_in(dstbbox)) + { + CCTK_WARN (0, "Internal error: region extent is not contained in array extent"); + } + + if (any (srcext != srcbbox.shape() / srcbbox.stride() or + dstext != dstbbox.shape() / dstbbox.stride())) + { + CCTK_WARN (0, "Internal error: array sizes don't agree with bounding boxes"); + } + + + + size_t const srciext = srcext[0]; + size_t const srcjext = srcext[1]; + size_t const srckext = srcext[2]; + + size_t const dstiext = dstext[0]; + size_t const dstjext = dstext[1]; + size_t const dstkext = dstext[2]; + + size_t const regiext = regext[0]; + size_t const regjext = regext[1]; + size_t const regkext = regext[2]; + + size_t const srcioff = srcoff[0]; + size_t const srcjoff = srcoff[1]; + size_t const srckoff = srcoff[2]; + + size_t const dstioff = dstoff[0]; + size_t const dstjoff = dstoff[1]; + size_t const dstkoff = dstoff[2]; + + + + size_t const fi = srcioff % 2; + size_t const fj = srcjoff % 2; + size_t const fk = srckoff % 2; + + size_t const i0 = srcioff / 2; + size_t const j0 = srcjoff / 2; + size_t const k0 = srckoff / 2; + + RT const one = 1; + + RT const f1 = one/4; + RT const f2 = 3*one/4; + + + + // Loop over fine region + // Label scheme: l 8 fk fj fi + + size_t is, js, ks; + size_t id, jd, kd; + size_t i, j, k; + + // begin k loop + k = 0; + ks = k0; + kd = dstkoff; + if (fk == 0) goto l80; + goto l81; + + // begin j loop + l80: + j = 0; + js = j0; + jd = dstjoff; + if (fj == 0) goto l800; + goto l801; + + // begin i loop + l800: + i = 0; + is = i0; + id = dstioff; + if (fi == 0) goto l8000; + goto l8001; + + // kernel + l8000: + dst[DSTIND3(id,jd,kd)] = + + f1*f1*f1 * src[SRCIND3(is-1,js-1,ks-1)] + + f2*f1*f1 * src[SRCIND3(is ,js-1,ks-1)] + + f1*f2*f1 * src[SRCIND3(is-1,js ,ks-1)] + + f2*f2*f1 * src[SRCIND3(is ,js ,ks-1)] + + f1*f1*f2 * src[SRCIND3(is-1,js-1,ks )] + + f2*f1*f2 * src[SRCIND3(is ,js-1,ks )] + + f1*f2*f2 * src[SRCIND3(is-1,js ,ks )] + + f2*f2*f2 * src[SRCIND3(is ,js ,ks )]; + i = i+1; + id = id+1; + if (i < regiext) goto l8001; + goto l900; + + // kernel + l8001: + dst[DSTIND3(id,jd,kd)] = + + f2*f1*f1 * src[SRCIND3(is ,js-1,ks-1)] + + f1*f1*f1 * src[SRCIND3(is+1,js-1,ks-1)] + + f2*f2*f1 * src[SRCIND3(is ,js ,ks-1)] + + f1*f2*f1 * src[SRCIND3(is+1,js ,ks-1)] + + f2*f1*f2 * src[SRCIND3(is ,js-1,ks )] + + f1*f1*f2 * src[SRCIND3(is+1,js-1,ks )] + + f2*f2*f2 * src[SRCIND3(is ,js ,ks )] + + f1*f2*f2 * src[SRCIND3(is+1,js ,ks )]; + i = i+1; + id = id+1; + is = is+1; + if (i < regiext) goto l8000; + goto l900; + + // end i loop + l900: + j = j+1; + jd = jd+1; + if (j < regjext) goto l801; + goto l90; + + // begin i loop + l801: + i = 0; + is = i0; + id = dstioff; + if (fi == 0) goto l8010; + goto l8011; + + // kernel + l8010: + dst[DSTIND3(id,jd,kd)] = + + f1*f2*f1 * src[SRCIND3(is-1,js ,ks-1)] + + f2*f2*f1 * src[SRCIND3(is ,js ,ks-1)] + + f1*f1*f1 * src[SRCIND3(is-1,js+1,ks-1)] + + f2*f1*f1 * src[SRCIND3(is ,js+1,ks-1)] + + f1*f2*f2 * src[SRCIND3(is-1,js ,ks )] + + f2*f2*f2 * src[SRCIND3(is ,js ,ks )] + + f1*f1*f2 * src[SRCIND3(is-1,js+1,ks )] + + f2*f1*f2 * src[SRCIND3(is ,js+1,ks )]; + i = i+1; + id = id+1; + if (i < regiext) goto l8011; + goto l901; + + // kernel + l8011: + dst[DSTIND3(id,jd,kd)] = + + f2*f2*f1 * src[SRCIND3(is ,js ,ks-1)] + + f1*f2*f1 * src[SRCIND3(is+1,js ,ks-1)] + + f2*f1*f1 * src[SRCIND3(is ,js+1,ks-1)] + + f1*f1*f1 * src[SRCIND3(is+1,js+1,ks-1)] + + f2*f2*f2 * src[SRCIND3(is ,js ,ks )] + + f1*f2*f2 * src[SRCIND3(is+1,js ,ks )] + + f2*f1*f2 * src[SRCIND3(is ,js+1,ks )] + + f1*f1*f2 * src[SRCIND3(is+1,js+1,ks )]; + i = i+1; + id = id+1; + is = is+1; + if (i < regiext) goto l8010; + goto l901; + + // end i loop + l901: + j = j+1; + jd = jd+1; + js = js+1; + if (j < regjext) goto l800; + goto l90; + + // end j loop + l90: + k = k+1; + kd = kd+1; + if (k < regkext) goto l81; + goto l9; + + // begin j loop + l81: + j = 0; + js = j0; + jd = dstjoff; + if (fj == 0) goto l810; + goto l811; + + // begin i loop + l810: + i = 0; + is = i0; + id = dstioff; + if (fi == 0) goto l8100; + goto l8101; + + // kernel + l8100: + dst[DSTIND3(id,jd,kd)] = + + f1*f1*f2 * src[SRCIND3(is-1,js-1,ks )] + + f2*f1*f2 * src[SRCIND3(is ,js-1,ks )] + + f1*f2*f2 * src[SRCIND3(is-1,js ,ks )] + + f2*f2*f2 * src[SRCIND3(is ,js ,ks )] + + f1*f1*f1 * src[SRCIND3(is-1,js-1,ks+1)] + + f2*f1*f1 * src[SRCIND3(is ,js-1,ks+1)] + + f1*f2*f1 * src[SRCIND3(is-1,js ,ks+1)] + + f2*f2*f1 * src[SRCIND3(is ,js ,ks+1)]; + i = i+1; + id = id+1; + if (i < regiext) goto l8101; + goto l910; + + // kernel + l8101: + dst[DSTIND3(id,jd,kd)] = + + f2*f1*f2 * src[SRCIND3(is ,js-1,ks )] + + f1*f1*f2 * src[SRCIND3(is+1,js-1,ks )] + + f2*f2*f2 * src[SRCIND3(is ,js ,ks )] + + f1*f2*f2 * src[SRCIND3(is+1,js ,ks )] + + f2*f1*f1 * src[SRCIND3(is ,js-1,ks+1)] + + f1*f1*f1 * src[SRCIND3(is+1,js-1,ks+1)] + + f2*f2*f1 * src[SRCIND3(is ,js ,ks+1)] + + f1*f2*f1 * src[SRCIND3(is+1,js ,ks+1)]; + i = i+1; + id = id+1; + is = is+1; + if (i < regiext) goto l8100; + goto l910; + + // end i loop + l910: + j = j+1; + jd = jd+1; + if (j < regjext) goto l811; + goto l91; + + // begin i loop + l811: + i = 0; + is = i0; + id = dstioff; + if (fi == 0) goto l8110; + goto l8111; + + // kernel + l8110: + dst[DSTIND3(id,jd,kd)] = + + f1*f2*f2 * src[SRCIND3(is-1,js ,ks )] + + f2*f2*f2 * src[SRCIND3(is ,js ,ks )] + + f1*f1*f2 * src[SRCIND3(is-1,js+1,ks )] + + f2*f1*f2 * src[SRCIND3(is ,js+1,ks )] + + f1*f2*f1 * src[SRCIND3(is-1,js ,ks+1)] + + f2*f2*f1 * src[SRCIND3(is ,js ,ks+1)] + + f1*f1*f1 * src[SRCIND3(is-1,js+1,ks+1)] + + f2*f1*f1 * src[SRCIND3(is ,js+1,ks+1)]; + i = i+1; + id = id+1; + if (i < regiext) goto l8111; + goto l911; + + // kernel + l8111: + dst[DSTIND3(id,jd,kd)] = + + f2*f2*f2 * src[SRCIND3(is ,js ,ks )] + + f1*f2*f2 * src[SRCIND3(is+1,js ,ks )] + + f2*f1*f2 * src[SRCIND3(is ,js+1,ks )] + + f1*f1*f2 * src[SRCIND3(is+1,js+1,ks )] + + f2*f2*f1 * src[SRCIND3(is ,js ,ks+1)] + + f1*f2*f1 * src[SRCIND3(is+1,js ,ks+1)] + + f2*f1*f1 * src[SRCIND3(is ,js+1,ks+1)] + + f1*f1*f1 * src[SRCIND3(is+1,js+1,ks+1)]; + i = i+1; + id = id+1; + is = is+1; + if (i < regiext) goto l8110; + goto l911; + + // end i loop + l911: + j = j+1; + jd = jd+1; + js = js+1; + if (j < regjext) goto l810; + goto l91; + + // end j loop + l91: + k = k+1; + kd = kd+1; + ks = ks+1; + if (k < regkext) goto l80; + goto l9; + + // end k loop + l9:; + + } + + + +#define INSTANTIATE(T) \ + template \ + void \ + prolongate_3d_cc_o1_rf2 (T const * restrict const src, \ + ivect3 const & restrict srcext, \ + T * restrict const dst, \ + ivect3 const & restrict dstext, \ + ibbox3 const & restrict srcbbox, \ + ibbox3 const & restrict dstbbox, \ + ibbox3 const & restrict regbbox); +#include "instantiate" +#undef INSTANTIATE + + + +} // CarpetLib diff --git a/Carpet/CarpetLib/src/prolongate_3d_cc_o2_rf2.cc b/Carpet/CarpetLib/src/prolongate_3d_cc_o2_rf2.cc new file mode 100644 index 000000000..f55dfe9fa --- /dev/null +++ b/Carpet/CarpetLib/src/prolongate_3d_cc_o2_rf2.cc @@ -0,0 +1,545 @@ +#include <algorithm> +#include <cassert> +#include <cmath> +#include <cstdlib> + +#include <cctk.h> +#include <cctk_Parameters.h> + +#include "operator_prototypes_3d.hh" +#include "typeprops.hh" + +using namespace std; + + + +namespace CarpetLib { + + + +#define SRCIND3(i,j,k) \ + index3 (i, j, k, \ + srciext, srcjext, srckext) +#define DSTIND3(i,j,k) \ + index3 (i, j, k, \ + dstiext, dstjext, dstkext) + + + + template <typename T> + void + prolongate_3d_cc_o2_rf2 (T const * restrict const src, + ivect3 const & restrict srcext, + T * restrict const dst, + ivect3 const & restrict dstext, + ibbox3 const & restrict srcbbox, + ibbox3 const & restrict dstbbox, + ibbox3 const & restrict regbbox) + { + typedef typename typeprops<T>::real RT; + + + + if (any (srcbbox.stride() <= regbbox.stride() or + dstbbox.stride() != regbbox.stride())) + { + CCTK_WARN (0, "Internal error: strides disagree"); + } + + if (any (srcbbox.stride() != reffact2 * dstbbox.stride())) { + CCTK_WARN (0, "Internal error: source strides are not twice the destination strides"); + } + + if (any (dstbbox.stride() % 2 != 0)) { + CCTK_WARN (0, "Internal error: destination strides are not even"); + } + + // This could be handled, but is likely to point to an error + // elsewhere + if (regbbox.empty()) { + CCTK_WARN (0, "Internal error: region extent is empty"); + } + + + + ivect3 const regext = regbbox.shape() / regbbox.stride(); + assert (all ((regbbox.lower() - srcbbox.lower() + regbbox.stride() / 2) % regbbox.stride() == 0)); + ivect3 const srcoff = (regbbox.lower() - srcbbox.lower() + regbbox.stride() / 2) / regbbox.stride(); + assert (all ((regbbox.lower() - dstbbox.lower()) % regbbox.stride() == 0)); + ivect3 const dstoff = (regbbox.lower() - dstbbox.lower()) / regbbox.stride(); + + + + bvect3 const needoffsetlo = srcoff % reffact2 != 0; + bvect3 const needoffsethi = (srcoff + regext - 1) % reffact2 != 0; + ivect3 const offsetlo = either (needoffsetlo, 2, 1); + ivect3 const offsethi = either (needoffsethi, 2, 1); + + + + if (not regbbox.expand(offsetlo, offsethi).is_contained_in(srcbbox) or + not regbbox .is_contained_in(dstbbox)) + { + CCTK_WARN (0, "Internal error: region extent is not contained in array extent"); + } + + if (any (srcext != srcbbox.shape() / srcbbox.stride() or + dstext != dstbbox.shape() / dstbbox.stride())) + { + CCTK_WARN (0, "Internal error: array sizes don't agree with bounding boxes"); + } + + + + size_t const srciext = srcext[0]; + size_t const srcjext = srcext[1]; + size_t const srckext = srcext[2]; + + size_t const dstiext = dstext[0]; + size_t const dstjext = dstext[1]; + size_t const dstkext = dstext[2]; + + size_t const regiext = regext[0]; + size_t const regjext = regext[1]; + size_t const regkext = regext[2]; + + size_t const srcioff = srcoff[0]; + size_t const srcjoff = srcoff[1]; + size_t const srckoff = srcoff[2]; + + size_t const dstioff = dstoff[0]; + size_t const dstjoff = dstoff[1]; + size_t const dstkoff = dstoff[2]; + + + + size_t const fi = srcioff % 2; + size_t const fj = srcjoff % 2; + size_t const fk = srckoff % 2; + + size_t const i0 = srcioff / 2; + size_t const j0 = srcjoff / 2; + size_t const k0 = srckoff / 2; + + RT const one = 1; + + RT const f1 = 5*one/32; + RT const f2 = 30*one/32; + RT const f3 = -3*one/32; + + + + // Loop over fine region + // Label scheme: l 8 fk fj fi + + size_t is, js, ks; + size_t id, jd, kd; + size_t i, j, k; + + // begin k loop + k = 0; + ks = k0; + kd = dstkoff; + if (fk == 0) goto l80; + goto l81; + + // begin j loop + l80: + j = 0; + js = j0; + jd = dstjoff; + if (fj == 0) goto l800; + goto l801; + + // begin i loop + l800: + i = 0; + is = i0; + id = dstioff; + if (fi == 0) goto l8000; + goto l8001; + + // kernel + l8000: + dst[DSTIND3(id,jd,kd)] = + + f1*f1*f1 * src[SRCIND3(is-1,js-1,ks-1)] + + f2*f1*f1 * src[SRCIND3(is ,js-1,ks-1)] + + f3*f1*f1 * src[SRCIND3(is+1,js-1,ks-1)] + + f1*f2*f1 * src[SRCIND3(is-1,js ,ks-1)] + + f2*f2*f1 * src[SRCIND3(is ,js ,ks-1)] + + f3*f2*f1 * src[SRCIND3(is+1,js ,ks-1)] + + f1*f3*f1 * src[SRCIND3(is-1,js+1,ks-1)] + + f2*f3*f1 * src[SRCIND3(is ,js+1,ks-1)] + + f3*f3*f1 * src[SRCIND3(is+1,js+1,ks-1)] + + f1*f1*f2 * src[SRCIND3(is-1,js-1,ks )] + + f2*f1*f2 * src[SRCIND3(is ,js-1,ks )] + + f3*f1*f2 * src[SRCIND3(is+1,js-1,ks )] + + f1*f2*f2 * src[SRCIND3(is-1,js ,ks )] + + f2*f2*f2 * src[SRCIND3(is ,js ,ks )] + + f3*f2*f2 * src[SRCIND3(is+1,js ,ks )] + + f1*f3*f2 * src[SRCIND3(is-1,js+1,ks )] + + f2*f3*f2 * src[SRCIND3(is ,js+1,ks )] + + f3*f3*f2 * src[SRCIND3(is+1,js+1,ks )] + + f1*f1*f3 * src[SRCIND3(is-1,js-1,ks+1)] + + f2*f1*f3 * src[SRCIND3(is ,js-1,ks+1)] + + f3*f1*f3 * src[SRCIND3(is+1,js-1,ks+1)] + + f1*f2*f3 * src[SRCIND3(is-1,js ,ks+1)] + + f2*f2*f3 * src[SRCIND3(is ,js ,ks+1)] + + f3*f2*f3 * src[SRCIND3(is+1,js ,ks+1)] + + f1*f3*f3 * src[SRCIND3(is-1,js+1,ks+1)] + + f2*f3*f3 * src[SRCIND3(is ,js+1,ks+1)] + + f3*f3*f3 * src[SRCIND3(is+1,js+1,ks+1)]; + i = i+1; + id = id+1; + if (i < regiext) goto l8001; + goto l900; + + // kernel + l8001: + dst[DSTIND3(id,jd,kd)] = + + f3*f1*f1 * src[SRCIND3(is-1,js-1,ks-1)] + + f2*f1*f1 * src[SRCIND3(is ,js-1,ks-1)] + + f1*f1*f1 * src[SRCIND3(is+1,js-1,ks-1)] + + f3*f2*f1 * src[SRCIND3(is-1,js ,ks-1)] + + f2*f2*f1 * src[SRCIND3(is ,js ,ks-1)] + + f1*f2*f1 * src[SRCIND3(is+1,js ,ks-1)] + + f3*f3*f1 * src[SRCIND3(is-1,js+1,ks-1)] + + f2*f3*f1 * src[SRCIND3(is ,js+1,ks-1)] + + f1*f3*f1 * src[SRCIND3(is+1,js+1,ks-1)] + + f3*f1*f2 * src[SRCIND3(is-1,js-1,ks )] + + f2*f1*f2 * src[SRCIND3(is ,js-1,ks )] + + f1*f1*f2 * src[SRCIND3(is+1,js-1,ks )] + + f3*f2*f2 * src[SRCIND3(is-1,js ,ks )] + + f2*f2*f2 * src[SRCIND3(is ,js ,ks )] + + f1*f2*f2 * src[SRCIND3(is+1,js ,ks )] + + f3*f3*f2 * src[SRCIND3(is-1,js+1,ks )] + + f2*f3*f2 * src[SRCIND3(is ,js+1,ks )] + + f1*f3*f2 * src[SRCIND3(is+1,js+1,ks )] + + f3*f1*f3 * src[SRCIND3(is-1,js-1,ks+1)] + + f2*f1*f3 * src[SRCIND3(is ,js-1,ks+1)] + + f1*f1*f3 * src[SRCIND3(is+1,js-1,ks+1)] + + f3*f2*f3 * src[SRCIND3(is-1,js ,ks+1)] + + f2*f2*f3 * src[SRCIND3(is ,js ,ks+1)] + + f1*f2*f3 * src[SRCIND3(is+1,js ,ks+1)] + + f3*f3*f3 * src[SRCIND3(is-1,js+1,ks+1)] + + f2*f3*f3 * src[SRCIND3(is ,js+1,ks+1)] + + f1*f3*f3 * src[SRCIND3(is+1,js+1,ks+1)]; + i = i+1; + id = id+1; + is = is+1; + if (i < regiext) goto l8000; + goto l900; + + // end i loop + l900: + j = j+1; + jd = jd+1; + if (j < regjext) goto l801; + goto l90; + + // begin i loop + l801: + i = 0; + is = i0; + id = dstioff; + if (fi == 0) goto l8010; + goto l8011; + + // kernel + l8010: + dst[DSTIND3(id,jd,kd)] = + + f1*f3*f1 * src[SRCIND3(is-1,js-1,ks-1)] + + f2*f3*f1 * src[SRCIND3(is ,js-1,ks-1)] + + f3*f3*f1 * src[SRCIND3(is+1,js-1,ks-1)] + + f1*f2*f1 * src[SRCIND3(is-1,js ,ks-1)] + + f2*f2*f1 * src[SRCIND3(is ,js ,ks-1)] + + f3*f2*f1 * src[SRCIND3(is+1,js ,ks-1)] + + f1*f1*f1 * src[SRCIND3(is-1,js+1,ks-1)] + + f2*f1*f1 * src[SRCIND3(is ,js+1,ks-1)] + + f3*f1*f1 * src[SRCIND3(is+1,js+1,ks-1)] + + f1*f3*f2 * src[SRCIND3(is-1,js-1,ks )] + + f2*f3*f2 * src[SRCIND3(is ,js-1,ks )] + + f3*f3*f2 * src[SRCIND3(is+1,js-1,ks )] + + f1*f2*f2 * src[SRCIND3(is-1,js ,ks )] + + f2*f2*f2 * src[SRCIND3(is ,js ,ks )] + + f3*f2*f2 * src[SRCIND3(is+1,js ,ks )] + + f1*f1*f2 * src[SRCIND3(is-1,js+1,ks )] + + f2*f1*f2 * src[SRCIND3(is ,js+1,ks )] + + f3*f1*f2 * src[SRCIND3(is+1,js+1,ks )] + + f1*f3*f3 * src[SRCIND3(is-1,js-1,ks+1)] + + f2*f3*f3 * src[SRCIND3(is ,js-1,ks+1)] + + f3*f3*f3 * src[SRCIND3(is+1,js-1,ks+1)] + + f1*f2*f3 * src[SRCIND3(is-1,js ,ks+1)] + + f2*f2*f3 * src[SRCIND3(is ,js ,ks+1)] + + f3*f2*f3 * src[SRCIND3(is+1,js ,ks+1)] + + f1*f1*f3 * src[SRCIND3(is-1,js+1,ks+1)] + + f2*f1*f3 * src[SRCIND3(is ,js+1,ks+1)] + + f3*f1*f3 * src[SRCIND3(is+1,js+1,ks+1)]; + i = i+1; + id = id+1; + if (i < regiext) goto l8011; + goto l901; + + // kernel + l8011: + dst[DSTIND3(id,jd,kd)] = + + f3*f3*f1 * src[SRCIND3(is-1,js-1,ks-1)] + + f2*f3*f1 * src[SRCIND3(is ,js-1,ks-1)] + + f1*f3*f1 * src[SRCIND3(is+1,js-1,ks-1)] + + f3*f2*f1 * src[SRCIND3(is-1,js ,ks-1)] + + f2*f2*f1 * src[SRCIND3(is ,js ,ks-1)] + + f1*f2*f1 * src[SRCIND3(is+1,js ,ks-1)] + + f3*f1*f1 * src[SRCIND3(is-1,js+1,ks-1)] + + f2*f1*f1 * src[SRCIND3(is ,js+1,ks-1)] + + f1*f1*f1 * src[SRCIND3(is+1,js+1,ks-1)] + + f3*f3*f2 * src[SRCIND3(is-1,js-1,ks )] + + f2*f3*f2 * src[SRCIND3(is ,js-1,ks )] + + f1*f3*f2 * src[SRCIND3(is+1,js-1,ks )] + + f3*f2*f2 * src[SRCIND3(is-1,js ,ks )] + + f2*f2*f2 * src[SRCIND3(is ,js ,ks )] + + f1*f2*f2 * src[SRCIND3(is+1,js ,ks )] + + f3*f1*f2 * src[SRCIND3(is-1,js+1,ks )] + + f2*f1*f2 * src[SRCIND3(is ,js+1,ks )] + + f1*f1*f2 * src[SRCIND3(is+1,js+1,ks )] + + f3*f3*f3 * src[SRCIND3(is-1,js-1,ks+1)] + + f2*f3*f3 * src[SRCIND3(is ,js-1,ks+1)] + + f1*f3*f3 * src[SRCIND3(is+1,js-1,ks+1)] + + f3*f2*f3 * src[SRCIND3(is-1,js ,ks+1)] + + f2*f2*f3 * src[SRCIND3(is ,js ,ks+1)] + + f1*f2*f3 * src[SRCIND3(is+1,js ,ks+1)] + + f3*f1*f3 * src[SRCIND3(is-1,js+1,ks+1)] + + f2*f1*f3 * src[SRCIND3(is ,js+1,ks+1)] + + f1*f1*f3 * src[SRCIND3(is+1,js+1,ks+1)]; + i = i+1; + id = id+1; + is = is+1; + if (i < regiext) goto l8010; + goto l901; + + // end i loop + l901: + j = j+1; + jd = jd+1; + js = js+1; + if (j < regjext) goto l800; + goto l90; + + // end j loop + l90: + k = k+1; + kd = kd+1; + if (k < regkext) goto l81; + goto l9; + + // begin j loop + l81: + j = 0; + js = j0; + jd = dstjoff; + if (fj == 0) goto l810; + goto l811; + + // begin i loop + l810: + i = 0; + is = i0; + id = dstioff; + if (fi == 0) goto l8100; + goto l8101; + + // kernel + l8100: + dst[DSTIND3(id,jd,kd)] = + + f1*f1*f3 * src[SRCIND3(is-1,js-1,ks-1)] + + f2*f1*f3 * src[SRCIND3(is ,js-1,ks-1)] + + f3*f1*f3 * src[SRCIND3(is+1,js-1,ks-1)] + + f1*f2*f3 * src[SRCIND3(is-1,js ,ks-1)] + + f2*f2*f3 * src[SRCIND3(is ,js ,ks-1)] + + f3*f2*f3 * src[SRCIND3(is+1,js ,ks-1)] + + f1*f3*f3 * src[SRCIND3(is-1,js+1,ks-1)] + + f2*f3*f3 * src[SRCIND3(is ,js+1,ks-1)] + + f3*f3*f3 * src[SRCIND3(is+1,js+1,ks-1)] + + f1*f1*f2 * src[SRCIND3(is-1,js-1,ks )] + + f2*f1*f2 * src[SRCIND3(is ,js-1,ks )] + + f3*f1*f2 * src[SRCIND3(is+1,js-1,ks )] + + f1*f2*f2 * src[SRCIND3(is-1,js ,ks )] + + f2*f2*f2 * src[SRCIND3(is ,js ,ks )] + + f3*f2*f2 * src[SRCIND3(is+1,js ,ks )] + + f1*f3*f2 * src[SRCIND3(is-1,js+1,ks )] + + f2*f3*f2 * src[SRCIND3(is ,js+1,ks )] + + f3*f3*f2 * src[SRCIND3(is+1,js+1,ks )] + + f1*f1*f1 * src[SRCIND3(is-1,js-1,ks+1)] + + f2*f1*f1 * src[SRCIND3(is ,js-1,ks+1)] + + f3*f1*f1 * src[SRCIND3(is+1,js-1,ks+1)] + + f1*f2*f1 * src[SRCIND3(is-1,js ,ks+1)] + + f2*f2*f1 * src[SRCIND3(is ,js ,ks+1)] + + f3*f2*f1 * src[SRCIND3(is+1,js ,ks+1)] + + f1*f3*f1 * src[SRCIND3(is-1,js+1,ks+1)] + + f2*f3*f1 * src[SRCIND3(is ,js+1,ks+1)] + + f3*f3*f1 * src[SRCIND3(is+1,js+1,ks+1)]; + i = i+1; + id = id+1; + if (i < regiext) goto l8101; + goto l910; + + // kernel + l8101: + dst[DSTIND3(id,jd,kd)] = + + f3*f1*f3 * src[SRCIND3(is-1,js-1,ks-1)] + + f2*f1*f3 * src[SRCIND3(is ,js-1,ks-1)] + + f1*f1*f3 * src[SRCIND3(is+1,js-1,ks-1)] + + f3*f2*f3 * src[SRCIND3(is-1,js ,ks-1)] + + f2*f2*f3 * src[SRCIND3(is ,js ,ks-1)] + + f1*f2*f3 * src[SRCIND3(is+1,js ,ks-1)] + + f3*f3*f3 * src[SRCIND3(is-1,js+1,ks-1)] + + f2*f3*f3 * src[SRCIND3(is ,js+1,ks-1)] + + f1*f3*f3 * src[SRCIND3(is+1,js+1,ks-1)] + + f3*f1*f2 * src[SRCIND3(is-1,js-1,ks )] + + f2*f1*f2 * src[SRCIND3(is ,js-1,ks )] + + f1*f1*f2 * src[SRCIND3(is+1,js-1,ks )] + + f3*f2*f2 * src[SRCIND3(is-1,js ,ks )] + + f2*f2*f2 * src[SRCIND3(is ,js ,ks )] + + f1*f2*f2 * src[SRCIND3(is+1,js ,ks )] + + f3*f3*f2 * src[SRCIND3(is-1,js+1,ks )] + + f2*f3*f2 * src[SRCIND3(is ,js+1,ks )] + + f1*f3*f2 * src[SRCIND3(is+1,js+1,ks )] + + f3*f1*f1 * src[SRCIND3(is-1,js-1,ks+1)] + + f2*f1*f1 * src[SRCIND3(is ,js-1,ks+1)] + + f1*f1*f1 * src[SRCIND3(is+1,js-1,ks+1)] + + f3*f2*f1 * src[SRCIND3(is-1,js ,ks+1)] + + f2*f2*f1 * src[SRCIND3(is ,js ,ks+1)] + + f1*f2*f1 * src[SRCIND3(is+1,js ,ks+1)] + + f3*f3*f1 * src[SRCIND3(is-1,js+1,ks+1)] + + f2*f3*f1 * src[SRCIND3(is ,js+1,ks+1)] + + f1*f3*f1 * src[SRCIND3(is+1,js+1,ks+1)]; + i = i+1; + id = id+1; + is = is+1; + if (i < regiext) goto l8100; + goto l910; + + // end i loop + l910: + j = j+1; + jd = jd+1; + if (j < regjext) goto l811; + goto l91; + + // begin i loop + l811: + i = 0; + is = i0; + id = dstioff; + if (fi == 0) goto l8110; + goto l8111; + + // kernel + l8110: + dst[DSTIND3(id,jd,kd)] = + + f1*f3*f3 * src[SRCIND3(is-1,js-1,ks-1)] + + f2*f3*f3 * src[SRCIND3(is ,js-1,ks-1)] + + f3*f3*f3 * src[SRCIND3(is+1,js-1,ks-1)] + + f1*f2*f3 * src[SRCIND3(is-1,js ,ks-1)] + + f2*f2*f3 * src[SRCIND3(is ,js ,ks-1)] + + f3*f2*f3 * src[SRCIND3(is+1,js ,ks-1)] + + f1*f1*f3 * src[SRCIND3(is-1,js+1,ks-1)] + + f2*f1*f3 * src[SRCIND3(is ,js+1,ks-1)] + + f3*f1*f3 * src[SRCIND3(is+1,js+1,ks-1)] + + f1*f3*f2 * src[SRCIND3(is-1,js-1,ks )] + + f2*f3*f2 * src[SRCIND3(is ,js-1,ks )] + + f3*f3*f2 * src[SRCIND3(is+1,js-1,ks )] + + f1*f2*f2 * src[SRCIND3(is-1,js ,ks )] + + f2*f2*f2 * src[SRCIND3(is ,js ,ks )] + + f3*f2*f2 * src[SRCIND3(is+1,js ,ks )] + + f1*f1*f2 * src[SRCIND3(is-1,js+1,ks )] + + f2*f1*f2 * src[SRCIND3(is ,js+1,ks )] + + f3*f1*f2 * src[SRCIND3(is+1,js+1,ks )] + + f1*f3*f1 * src[SRCIND3(is-1,js-1,ks+1)] + + f2*f3*f1 * src[SRCIND3(is ,js-1,ks+1)] + + f3*f3*f1 * src[SRCIND3(is+1,js-1,ks+1)] + + f1*f2*f1 * src[SRCIND3(is-1,js ,ks+1)] + + f2*f2*f1 * src[SRCIND3(is ,js ,ks+1)] + + f3*f2*f1 * src[SRCIND3(is+1,js ,ks+1)] + + f1*f1*f1 * src[SRCIND3(is-1,js+1,ks+1)] + + f2*f1*f1 * src[SRCIND3(is ,js+1,ks+1)] + + f3*f1*f1 * src[SRCIND3(is+1,js+1,ks+1)]; + i = i+1; + id = id+1; + if (i < regiext) goto l8111; + goto l911; + + // kernel + l8111: + dst[DSTIND3(id,jd,kd)] = + + f3*f3*f3 * src[SRCIND3(is-1,js-1,ks-1)] + + f2*f3*f3 * src[SRCIND3(is ,js-1,ks-1)] + + f1*f3*f3 * src[SRCIND3(is+1,js-1,ks-1)] + + f3*f2*f3 * src[SRCIND3(is-1,js ,ks-1)] + + f2*f2*f3 * src[SRCIND3(is ,js ,ks-1)] + + f1*f2*f3 * src[SRCIND3(is+1,js ,ks-1)] + + f3*f1*f3 * src[SRCIND3(is-1,js+1,ks-1)] + + f2*f1*f3 * src[SRCIND3(is ,js+1,ks-1)] + + f1*f1*f3 * src[SRCIND3(is+1,js+1,ks-1)] + + f3*f3*f2 * src[SRCIND3(is-1,js-1,ks )] + + f2*f3*f2 * src[SRCIND3(is ,js-1,ks )] + + f1*f3*f2 * src[SRCIND3(is+1,js-1,ks )] + + f3*f2*f2 * src[SRCIND3(is-1,js ,ks )] + + f2*f2*f2 * src[SRCIND3(is ,js ,ks )] + + f1*f2*f2 * src[SRCIND3(is+1,js ,ks )] + + f3*f1*f2 * src[SRCIND3(is-1,js+1,ks )] + + f2*f1*f2 * src[SRCIND3(is ,js+1,ks )] + + f1*f1*f2 * src[SRCIND3(is+1,js+1,ks )] + + f3*f3*f1 * src[SRCIND3(is-1,js-1,ks+1)] + + f2*f3*f1 * src[SRCIND3(is ,js-1,ks+1)] + + f1*f3*f1 * src[SRCIND3(is+1,js-1,ks+1)] + + f3*f2*f1 * src[SRCIND3(is-1,js ,ks+1)] + + f2*f2*f1 * src[SRCIND3(is ,js ,ks+1)] + + f1*f2*f1 * src[SRCIND3(is+1,js ,ks+1)] + + f3*f1*f1 * src[SRCIND3(is-1,js+1,ks+1)] + + f2*f1*f1 * src[SRCIND3(is ,js+1,ks+1)] + + f1*f1*f1 * src[SRCIND3(is+1,js+1,ks+1)]; + i = i+1; + id = id+1; + is = is+1; + if (i < regiext) goto l8110; + goto l911; + + // end i loop + l911: + j = j+1; + jd = jd+1; + js = js+1; + if (j < regjext) goto l810; + goto l91; + + // end j loop + l91: + k = k+1; + kd = kd+1; + ks = ks+1; + if (k < regkext) goto l80; + goto l9; + + // end k loop + l9:; + + } + + + +#define INSTANTIATE(T) \ + template \ + void \ + prolongate_3d_cc_o2_rf2 (T const * restrict const src, \ + ivect3 const & restrict srcext, \ + T * restrict const dst, \ + ivect3 const & restrict dstext, \ + ibbox3 const & restrict srcbbox, \ + ibbox3 const & restrict dstbbox, \ + ibbox3 const & restrict regbbox); +#include "instantiate" +#undef INSTANTIATE + + + +} // CarpetLib diff --git a/Carpet/CarpetLib/src/prolongate_3d_cc_rf2.cc b/Carpet/CarpetLib/src/prolongate_3d_cc_rf2.cc index f58295560..04e00b255 100644 --- a/Carpet/CarpetLib/src/prolongate_3d_cc_rf2.cc +++ b/Carpet/CarpetLib/src/prolongate_3d_cc_rf2.cc @@ -11,7 +11,7 @@ #include <cctk.h> #include <cctk_Parameters.h> -#include "operator_prototypes.hh" +#include "operator_prototypes_3d.hh" #include "typeprops.hh" using namespace std; @@ -120,7 +120,7 @@ namespace CarpetLib { -#pragma omp parallel for + // NOTE: This loop is not parallel for (int k=0; k<regkext; ++k) { for (int j=0; j<regjext; ++j) { for (int i=0; i<regiext; ++i) { @@ -139,13 +139,13 @@ namespace CarpetLib { // + src [SRCIND2(i-1, j-1)]; // 3D dst [DSTIND3(i, j, k)] = - + dst [DSTIND3(i-1, j, k)] - + dst [DSTIND3(i, j-1, k)] - + dst [DSTIND3(i, j, k-1)] - - dst [DSTIND3(i, j-1, k-1)] - - dst [DSTIND3(i-1, j, k-1)] - - dst [DSTIND3(i-1, j-1, k)] + dst [DSTIND3(i-1, j-1, k-1)] + - dst [DSTIND3(i , j-1, k-1)] + - dst [DSTIND3(i-1, j , k-1)] + + dst [DSTIND3(i , j , k-1)] + - dst [DSTIND3(i-1, j-1, k )] + + dst [DSTIND3(i , j-1, k )] + + dst [DSTIND3(i-1, j , k )] + src [SRCIND3(i-1, j-1, k-1)]; } } @@ -172,14 +172,14 @@ namespace CarpetLib { // Convert from the "primitive" form of the grid function to the - // "standard" version + // "standard" version, i.e., the derivative template <typename T> void prolongate_3d_cc_rf2_prim2std (T const * restrict const src, - ivect const & restrict srcext, + ivect3 const & restrict srcext, T * restrict const dst, - ivect const & restrict dstext, + ivect3 const & restrict dstext, ibbox3 const & restrict srcbbox, ibbox3 const & restrict dstbbox, ibbox3 const & restrict regbbox) @@ -253,18 +253,19 @@ namespace CarpetLib { -#pragma omp parallel for + // NOTE: This loop is not parallel for (int k=0; k<regkext; ++k) { for (int j=0; j<regjext; ++j) { for (int i=0; i<regiext; ++i) { - dst [DSTIND3(i, j, k)] = reffact2 * - (- src [SRCIND3(i, j+1, k+1)] - - src [SRCIND3(i+1, j, k+1)] - - src [SRCIND3(i+1, j+1, k)] - + src [SRCIND3(i+1, j, k)] - + src [SRCIND3(i, j+1, k)] - + src [SRCIND3(i, j, k+1)] - - src [SRCIND3(i, j, k)] + dst [DSTIND3(i, j, k)] = + (reffact2 * reffact2 * reffact2) * + (- src [SRCIND3(i , j , k )] + + src [SRCIND3(i+1, j , k )] + + src [SRCIND3(i , j+1, k )] + - src [SRCIND3(i+1, j+1, k )] + + src [SRCIND3(i , j , k+1)] + - src [SRCIND3(i+1, j , k+1)] + - src [SRCIND3(i , j+1, k+1)] + src [SRCIND3(i+1, j+1, k+1)]); } } @@ -278,9 +279,9 @@ namespace CarpetLib { template \ void \ prolongate_3d_cc_rf2_prim2std (T const * restrict const src, \ - ivect const & restrict srcext, \ + ivect3 const & restrict srcext, \ T * restrict const dst, \ - ivect const & restrict dstext, \ + ivect3 const & restrict dstext, \ ibbox3 const & restrict srcbbox, \ ibbox3 const & restrict dstbbox, \ ibbox3 const & restrict regbbox); diff --git a/Carpet/CarpetLib/src/prolongate_3d_o11_rf2.cc b/Carpet/CarpetLib/src/prolongate_3d_o11_rf2.cc index 6fe17e03d..a1d26660e 100644 --- a/Carpet/CarpetLib/src/prolongate_3d_o11_rf2.cc +++ b/Carpet/CarpetLib/src/prolongate_3d_o11_rf2.cc @@ -6,7 +6,7 @@ #include <cctk.h> #include <cctk_Parameters.h> -#include "operator_prototypes.hh" +#include "operator_prototypes_3d.hh" #include "typeprops.hh" using namespace std; @@ -231,7 +231,7 @@ namespace CarpetLib { goto l81; // begin j loop - l80: + l80: j = 0; js = j0; jd = dstjoff; @@ -239,7 +239,7 @@ namespace CarpetLib { goto l801; // begin i loop - l800: + l800: i = 0; is = i0; id = dstioff; @@ -247,7 +247,7 @@ namespace CarpetLib { goto l8001; // kernel - l8000: + l8000: dst[DSTIND3(id,jd,kd)] = interp0<T> (& src[SRCIND3(is,js,ks)]); i = i+1; id = id+1; @@ -255,7 +255,7 @@ namespace CarpetLib { goto l900; // kernel - l8001: + l8001: dst[DSTIND3(id,jd,kd)] = interp1<T> (& src[SRCIND3(is-5,js,ks)], srcdi); i = i+1; id = id+1; @@ -264,14 +264,14 @@ namespace CarpetLib { goto l900; // end i loop - l900: + l900: j = j+1; jd = jd+1; if (j < regjext) goto l801; goto l90; // begin i loop - l801: + l801: i = 0; is = i0; id = dstioff; @@ -279,7 +279,7 @@ namespace CarpetLib { goto l8011; // kernel - l8010: + l8010: dst[DSTIND3(id,jd,kd)] = interp1<T> (& src[SRCIND3(is,js-5,ks)], srcdj); i = i+1; id = id+1; @@ -287,7 +287,7 @@ namespace CarpetLib { goto l901; // kernel - l8011: + l8011: dst[DSTIND3(id,jd,kd)] = interp2<T> (& src[SRCIND3(is-5,js-5,ks)], srcdi, srcdj); i = i+1; @@ -297,7 +297,7 @@ namespace CarpetLib { goto l901; // end i loop - l901: + l901: j = j+1; jd = jd+1; js = js+1; @@ -305,14 +305,14 @@ namespace CarpetLib { goto l90; // end j loop - l90: + l90: k = k+1; kd = kd+1; if (k < regkext) goto l81; goto l9; // begin j loop - l81: + l81: j = 0; js = j0; jd = dstjoff; @@ -320,7 +320,7 @@ namespace CarpetLib { goto l811; // begin i loop - l810: + l810: i = 0; is = i0; id = dstioff; @@ -328,7 +328,7 @@ namespace CarpetLib { goto l8101; // kernel - l8100: + l8100: dst[DSTIND3(id,jd,kd)] = interp1<T> (& src[SRCIND3(is,js,ks-5)], srcdk); i = i+1; id = id+1; @@ -336,7 +336,7 @@ namespace CarpetLib { goto l910; // kernel - l8101: + l8101: dst[DSTIND3(id,jd,kd)] = interp2<T> (& src[SRCIND3(is-5,js,ks-5)], srcdi, srcdj); i = i+1; @@ -346,14 +346,14 @@ namespace CarpetLib { goto l910; // end i loop - l910: + l910: j = j+1; jd = jd+1; if (j < regjext) goto l811; goto l91; // begin i loop - l811: + l811: i = 0; is = i0; id = dstioff; @@ -361,7 +361,7 @@ namespace CarpetLib { goto l8111; // kernel - l8110: + l8110: dst[DSTIND3(id,jd,kd)] = interp2<T> (& src[SRCIND3(is,js-5,ks-5)], srcdj, srcdk); i = i+1; @@ -370,7 +370,7 @@ namespace CarpetLib { goto l911; // kernel - l8111: + l8111: { dst[DSTIND3(id,jd,kd)] = interp3<T> (& src[SRCIND3(is-5,js-5,ks-5)], srcdi, srcdj, srcdk); @@ -382,7 +382,7 @@ namespace CarpetLib { goto l911; // end i loop - l911: + l911: j = j+1; jd = jd+1; js = js+1; @@ -390,7 +390,7 @@ namespace CarpetLib { goto l91; // end j loop - l91: + l91: k = k+1; kd = kd+1; ks = ks+1; @@ -398,7 +398,7 @@ namespace CarpetLib { goto l9; // end k loop - l9:; + l9:; } diff --git a/Carpet/CarpetLib/src/prolongate_3d_o1_rf2.cc b/Carpet/CarpetLib/src/prolongate_3d_o1_rf2.cc index 72c52f05e..0b1ff0751 100644 --- a/Carpet/CarpetLib/src/prolongate_3d_o1_rf2.cc +++ b/Carpet/CarpetLib/src/prolongate_3d_o1_rf2.cc @@ -6,7 +6,7 @@ #include <cctk.h> #include <cctk_Parameters.h> -#include "operator_prototypes.hh" +#include "operator_prototypes_3d.hh" #include "typeprops.hh" using namespace std; @@ -139,7 +139,7 @@ namespace CarpetLib { goto l81; // begin j loop - l80: + l80: j = 0; js = j0; jd = dstjoff; @@ -147,7 +147,7 @@ namespace CarpetLib { goto l801; // begin i loop - l800: + l800: i = 0; is = i0; id = dstioff; @@ -155,7 +155,7 @@ namespace CarpetLib { goto l8001; // kernel - l8000: + l8000: dst[DSTIND3(id,jd,kd)] = src[SRCIND3(is,js,ks)]; i = i+1; id = id+1; @@ -163,7 +163,7 @@ namespace CarpetLib { goto l900; // kernel - l8001: + l8001: dst[DSTIND3(id,jd,kd)] = + f1 * src[SRCIND3(is ,js,ks)] + f2 * src[SRCIND3(is+1,js,ks)]; @@ -174,14 +174,14 @@ namespace CarpetLib { goto l900; // end i loop - l900: + l900: j = j+1; jd = jd+1; if (j < regjext) goto l801; goto l90; // begin i loop - l801: + l801: i = 0; is = i0; id = dstioff; @@ -189,7 +189,7 @@ namespace CarpetLib { goto l8011; // kernel - l8010: + l8010: dst[DSTIND3(id,jd,kd)] = + f1 * src[SRCIND3(is,js ,ks)] + f2 * src[SRCIND3(is,js+1,ks)]; @@ -199,7 +199,7 @@ namespace CarpetLib { goto l901; // kernel - l8011: + l8011: dst[DSTIND3(id,jd,kd)] = + f1*f1 * src[SRCIND3(is ,js ,ks)] + f2*f1 * src[SRCIND3(is+1,js ,ks)] @@ -212,7 +212,7 @@ namespace CarpetLib { goto l901; // end i loop - l901: + l901: j = j+1; jd = jd+1; js = js+1; @@ -220,14 +220,14 @@ namespace CarpetLib { goto l90; // end j loop - l90: + l90: k = k+1; kd = kd+1; if (k < regkext) goto l81; goto l9; // begin j loop - l81: + l81: j = 0; js = j0; jd = dstjoff; @@ -235,7 +235,7 @@ namespace CarpetLib { goto l811; // begin i loop - l810: + l810: i = 0; is = i0; id = dstioff; @@ -243,7 +243,7 @@ namespace CarpetLib { goto l8101; // kernel - l8100: + l8100: dst[DSTIND3(id,jd,kd)] = + f1 * src[SRCIND3(is,js,ks )] + f2 * src[SRCIND3(is,js,ks+1)]; @@ -253,7 +253,7 @@ namespace CarpetLib { goto l910; // kernel - l8101: + l8101: dst[DSTIND3(id,jd,kd)] = + f1*f1 * src[SRCIND3(is ,js,ks )] + f2*f1 * src[SRCIND3(is+1,js,ks )] @@ -266,14 +266,14 @@ namespace CarpetLib { goto l910; // end i loop - l910: + l910: j = j+1; jd = jd+1; if (j < regjext) goto l811; goto l91; // begin i loop - l811: + l811: i = 0; is = i0; id = dstioff; @@ -281,7 +281,7 @@ namespace CarpetLib { goto l8111; // kernel - l8110: + l8110: dst[DSTIND3(id,jd,kd)] = + f1*f1 * src[SRCIND3(is,js ,ks )] + f2*f1 * src[SRCIND3(is,js+1,ks )] @@ -293,7 +293,7 @@ namespace CarpetLib { goto l911; // kernel - l8111: + l8111: { T const res1 = + f1*f1*f1 * src[SRCIND3(is ,js ,ks )] @@ -314,7 +314,7 @@ namespace CarpetLib { goto l911; // end i loop - l911: + l911: j = j+1; jd = jd+1; js = js+1; @@ -322,7 +322,7 @@ namespace CarpetLib { goto l91; // end j loop - l91: + l91: k = k+1; kd = kd+1; ks = ks+1; @@ -330,7 +330,7 @@ namespace CarpetLib { goto l9; // end k loop - l9:; + l9:; } diff --git a/Carpet/CarpetLib/src/prolongate_3d_o3_rf2.cc b/Carpet/CarpetLib/src/prolongate_3d_o3_rf2.cc index a55bd69da..91b3e5bc1 100644 --- a/Carpet/CarpetLib/src/prolongate_3d_o3_rf2.cc +++ b/Carpet/CarpetLib/src/prolongate_3d_o3_rf2.cc @@ -6,7 +6,7 @@ #include <cctk.h> #include <cctk_Parameters.h> -#include "operator_prototypes.hh" +#include "operator_prototypes_3d.hh" #include "typeprops.hh" using namespace std; @@ -31,7 +31,7 @@ namespace CarpetLib { prolongate_3d_o3_rf2 (T const * restrict const src, ivect3 const & restrict srcext, T * restrict const dst, - ivect const & restrict dstext, + ivect3 const & restrict dstext, ibbox3 const & restrict srcbbox, ibbox3 const & restrict dstbbox, ibbox3 const & restrict regbbox) @@ -143,7 +143,7 @@ namespace CarpetLib { goto l81; // begin j loop - l80: + l80: j = 0; js = j0; jd = dstjoff; @@ -151,7 +151,7 @@ namespace CarpetLib { goto l801; // begin i loop - l800: + l800: i = 0; is = i0; id = dstioff; @@ -159,7 +159,7 @@ namespace CarpetLib { goto l8001; // kernel - l8000: + l8000: dst[DSTIND3(id,jd,kd)] = src[SRCIND3(is,js,ks)]; i = i+1; id = id+1; @@ -167,7 +167,7 @@ namespace CarpetLib { goto l900; // kernel - l8001: + l8001: dst[DSTIND3(id,jd,kd)] = + f1 * src[SRCIND3(is-1,js,ks)] + f2 * src[SRCIND3(is ,js,ks)] @@ -180,14 +180,14 @@ namespace CarpetLib { goto l900; // end i loop - l900: + l900: j = j+1; jd = jd+1; if (j < regjext) goto l801; goto l90; // begin i loop - l801: + l801: i = 0; is = i0; id = dstioff; @@ -195,7 +195,7 @@ namespace CarpetLib { goto l8011; // kernel - l8010: + l8010: dst[DSTIND3(id,jd,kd)] = + f1 * src[SRCIND3(is,js-1,ks)] + f2 * src[SRCIND3(is,js ,ks)] @@ -207,7 +207,7 @@ namespace CarpetLib { goto l901; // kernel - l8011: + l8011: dst[DSTIND3(id,jd,kd)] = + f1*f1 * src[SRCIND3(is-1,js-1,ks)] + f2*f1 * src[SRCIND3(is ,js-1,ks)] @@ -232,7 +232,7 @@ namespace CarpetLib { goto l901; // end i loop - l901: + l901: j = j+1; jd = jd+1; js = js+1; @@ -240,14 +240,14 @@ namespace CarpetLib { goto l90; // end j loop - l90: + l90: k = k+1; kd = kd+1; if (k < regkext) goto l81; goto l9; // begin j loop - l81: + l81: j = 0; js = j0; jd = dstjoff; @@ -255,7 +255,7 @@ namespace CarpetLib { goto l811; // begin i loop - l810: + l810: i = 0; is = i0; id = dstioff; @@ -263,7 +263,7 @@ namespace CarpetLib { goto l8101; // kernel - l8100: + l8100: dst[DSTIND3(id,jd,kd)] = + f1 * src[SRCIND3(is,js,ks-1)] + f2 * src[SRCIND3(is,js,ks )] @@ -275,7 +275,7 @@ namespace CarpetLib { goto l910; // kernel - l8101: + l8101: dst[DSTIND3(id,jd,kd)] = + f1*f1 * src[SRCIND3(is-1,js,ks-1)] + f2*f1 * src[SRCIND3(is ,js,ks-1)] @@ -300,14 +300,14 @@ namespace CarpetLib { goto l910; // end i loop - l910: + l910: j = j+1; jd = jd+1; if (j < regjext) goto l811; goto l91; // begin i loop - l811: + l811: i = 0; is = i0; id = dstioff; @@ -315,7 +315,7 @@ namespace CarpetLib { goto l8111; // kernel - l8110: + l8110: dst[DSTIND3(id,jd,kd)] = + f1*f1 * src[SRCIND3(is,js-1,ks-1)] + f2*f1 * src[SRCIND3(is,js ,ks-1)] @@ -339,7 +339,7 @@ namespace CarpetLib { goto l911; // kernel - l8111: + l8111: { T const res1 = + f1*f1*f1 * src[SRCIND3(is-1,js-1,ks-1)] @@ -418,7 +418,7 @@ namespace CarpetLib { goto l911; // end i loop - l911: + l911: j = j+1; jd = jd+1; js = js+1; @@ -426,7 +426,7 @@ namespace CarpetLib { goto l91; // end j loop - l91: + l91: k = k+1; kd = kd+1; ks = ks+1; @@ -434,7 +434,7 @@ namespace CarpetLib { goto l9; // end k loop - l9:; + l9:; } diff --git a/Carpet/CarpetLib/src/prolongate_3d_o5_monotone_rf2.cc b/Carpet/CarpetLib/src/prolongate_3d_o5_monotone_rf2.cc new file mode 100644 index 000000000..9ac0b2f7e --- /dev/null +++ b/Carpet/CarpetLib/src/prolongate_3d_o5_monotone_rf2.cc @@ -0,0 +1,851 @@ +// This is meant to reproduce the prolongation algorithm used in the +// SACRA code (based on IH's interpretation of their papers and +// comments in talks, so it might be an idea for someone to talk to +// them! Of course, given that this is "general purpose" and SACRA is +// very specific in the variables converted, it probably won't be +// possible to get a perfect reproduction). +// +// The idea is to use fifth order Lagrange interpolation based on the +// nearest 6 points (in any one dimension). However, we must also +// ensure monotonicity. To do this we check that the result of the +// fifth order result (which is just copied from prolongate_3d_o5_rf2) +// is monotonic with respect to the relevant neighbours), and if not +// we impose linear interpolation instead (from prolongate_3d_o1_rf2). +// +// Note that this code does not work for complex GFs (due to the use +// of the max and min intrinsics). + +#include <algorithm> +#include <cassert> +#include <cmath> +#include <cstdlib> + +#include <cctk.h> +#include <cctk_Parameters.h> + +#include "operator_prototypes_3d.hh" +#include "typeprops.hh" + +using namespace std; + + + +namespace CarpetLib { + + + +#define SRCIND3(i,j,k) \ + index3 (i, j, k, \ + srciext, srcjext, srckext) +#define DSTIND3(i,j,k) \ + index3 (i, j, k, \ + dstiext, dstjext, dstkext) + + + template <typename T> + inline + T + min4 (T const & x1, T const & x2, T const & x3, T const & x4) + { + return min (min(x1, x2), min (x3, x4)); + } + + template <typename T> + inline + T + max4 (T const & x1, T const & x2, T const & x3, T const & x4) + { + return max (max(x1, x2), max (x3, x4)); + } + + template <typename T> + inline + T + min8 (T const & x1, T const & x2, T const & x3, T const & x4, + T const & x5, T const & x6, T const & x7, T const & x8) + { + return min( min (min(x1, x2), min (x3, x4)), + min (min(x5, x6), min (x7, x8)) ); + } + + template <typename T> + inline + T + max8 (T const & x1, T const & x2, T const & x3, T const & x4, + T const & x5, T const & x6, T const & x7, T const & x8) + { + return max( max (max(x1, x2), max (x3, x4)), + max (max(x5, x6), max (x7, x8)) ); + } + + + template <typename T> + void + prolongate_3d_o5_monotone_rf2 (T const * restrict const src, + ivect3 const & restrict srcext, + T * restrict const dst, + ivect3 const & restrict dstext, + ibbox3 const & restrict srcbbox, + ibbox3 const & restrict dstbbox, + ibbox3 const & restrict regbbox) + { + typedef typename typeprops<T>::real RT; + + + + if (any (srcbbox.stride() <= regbbox.stride() or + dstbbox.stride() != regbbox.stride())) + { + CCTK_WARN (0, "Internal error: strides disagree"); + } + + if (any (srcbbox.stride() != reffact2 * dstbbox.stride())) { + CCTK_WARN (0, "Internal error: source strides are not twice the destination strides"); + } + + // This could be handled, but is likely to point to an error + // elsewhere + if (regbbox.empty()) { + CCTK_WARN (0, "Internal error: region extent is empty"); + } + + + + ivect3 const regext = regbbox.shape() / regbbox.stride(); + assert (all ((regbbox.lower() - srcbbox.lower()) % regbbox.stride() == 0)); + ivect3 const srcoff = (regbbox.lower() - srcbbox.lower()) / regbbox.stride(); + assert (all ((regbbox.lower() - dstbbox.lower()) % regbbox.stride() == 0)); + ivect3 const dstoff = (regbbox.lower() - dstbbox.lower()) / regbbox.stride(); + + + + bvect3 const needoffsetlo = srcoff % reffact2 != 0 or regext > 1; + bvect3 const needoffsethi = (srcoff + regext - 1) % reffact2 != 0 or regext > 1; + ivect3 const offsetlo = either (needoffsetlo, 3, 0); + ivect3 const offsethi = either (needoffsethi, 3, 0); + + + + if (not regbbox.expand(offsetlo, offsethi).is_contained_in(srcbbox) or + not regbbox .is_contained_in(dstbbox)) + { + CCTK_WARN (0, "Internal error: region extent is not contained in array extent"); + } + + if (any (srcext != srcbbox.shape() / srcbbox.stride() or + dstext != dstbbox.shape() / dstbbox.stride())) + { + CCTK_WARN (0, "Internal error: array sizes don't agree with bounding boxes"); + } + + + + size_t const srciext = srcext[0]; + size_t const srcjext = srcext[1]; + size_t const srckext = srcext[2]; + + size_t const dstiext = dstext[0]; + size_t const dstjext = dstext[1]; + size_t const dstkext = dstext[2]; + + size_t const regiext = regext[0]; + size_t const regjext = regext[1]; + size_t const regkext = regext[2]; + + size_t const srcioff = srcoff[0]; + size_t const srcjoff = srcoff[1]; + size_t const srckoff = srcoff[2]; + + size_t const dstioff = dstoff[0]; + size_t const dstjoff = dstoff[1]; + size_t const dstkoff = dstoff[2]; + + + + size_t const fi = srcioff % 2; + size_t const fj = srcjoff % 2; + size_t const fk = srckoff % 2; + + size_t const i0 = srcioff / 2; + size_t const j0 = srcjoff / 2; + size_t const k0 = srckoff / 2; + + RT const one = 1; + + RT const f1 = 3*one/256; + RT const f2 = - 25*one/256; + RT const f3 = 150*one/256; + RT const f4 = 150*one/256; + RT const f5 = - 25*one/256; + RT const f6 = 3*one/256; + + RT const o1_f1 = one/2; + RT const o1_f2 = one/2; + + + // Loop over fine region + // Label scheme: l 8 fk fj fi + + size_t is, js, ks; + size_t id, jd, kd; + size_t i, j, k; + + // begin k loop + k = 0; + ks = k0; + kd = dstkoff; + if (fk == 0) goto l80; + goto l81; + + // begin j loop + l80: + j = 0; + js = j0; + jd = dstjoff; + if (fj == 0) goto l800; + goto l801; + + // begin i loop + l800: + i = 0; + is = i0; + id = dstioff; + if (fi == 0) goto l8000; + goto l8001; + + // kernel + l8000: + dst[DSTIND3(id,jd,kd)] = src[SRCIND3(is,js,ks)]; + i = i+1; + id = id+1; + if (i < regiext) goto l8001; + goto l900; + + // kernel + l8001: + dst[DSTIND3(id,jd,kd)] = + + f1 * src[SRCIND3(is-2,js,ks)] + + f2 * src[SRCIND3(is-1,js,ks)] + + f3 * src[SRCIND3(is ,js,ks)] + + f4 * src[SRCIND3(is+1,js,ks)] + + f5 * src[SRCIND3(is+2,js,ks)] + + f6 * src[SRCIND3(is+3,js,ks)]; + // Monotonicity enforcement + if ((dst[DSTIND3(id,jd,kd)] > max(src[SRCIND3(is ,js ,ks )], + src[SRCIND3(is+1,js ,ks )]))|| + (dst[DSTIND3(id,jd,kd)] < min(src[SRCIND3(is ,js ,ks )], + src[SRCIND3(is+1,js ,ks )]))) { + dst[DSTIND3(id,jd,kd)] = + + o1_f1 * src[SRCIND3(is ,js,ks)] + + o1_f2 * src[SRCIND3(is+1,js,ks)]; + + } + + i = i+1; + id = id+1; + is = is+1; + if (i < regiext) goto l8000; + goto l900; + + // end i loop + l900: + j = j+1; + jd = jd+1; + if (j < regjext) goto l801; + goto l90; + + // begin i loop + l801: + i = 0; + is = i0; + id = dstioff; + if (fi == 0) goto l8010; + goto l8011; + + // kernel + l8010: + dst[DSTIND3(id,jd,kd)] = + + f1 * src[SRCIND3(is,js-2,ks)] + + f2 * src[SRCIND3(is,js-1,ks)] + + f3 * src[SRCIND3(is,js ,ks)] + + f4 * src[SRCIND3(is,js+1,ks)] + + f5 * src[SRCIND3(is,js+2,ks)] + + f6 * src[SRCIND3(is,js+3,ks)]; + // Monotonicity enforcement + if ((dst[DSTIND3(id,jd,kd)] > max(src[SRCIND3(is ,js ,ks )], + src[SRCIND3(is ,js+1,ks )]))|| + (dst[DSTIND3(id,jd,kd)] < min(src[SRCIND3(is ,js ,ks )], + src[SRCIND3(is ,js+1,ks )]))) { + dst[DSTIND3(id,jd,kd)] = + + o1_f1 * src[SRCIND3(is,js ,ks)] + + o1_f2 * src[SRCIND3(is,js+1,ks)]; + + } + i = i+1; + id = id+1; + if (i < regiext) goto l8011; + goto l901; + + // kernel + l8011: + dst[DSTIND3(id,jd,kd)] = + + f1*f1 * src[SRCIND3(is-2,js-2,ks)] + + f2*f1 * src[SRCIND3(is-1,js-2,ks)] + + f3*f1 * src[SRCIND3(is ,js-2,ks)] + + f4*f1 * src[SRCIND3(is+1,js-2,ks)] + + f5*f1 * src[SRCIND3(is+2,js-2,ks)] + + f6*f1 * src[SRCIND3(is+3,js-2,ks)] + + f1*f2 * src[SRCIND3(is-2,js-1,ks)] + + f2*f2 * src[SRCIND3(is-1,js-1,ks)] + + f3*f2 * src[SRCIND3(is ,js-1,ks)] + + f4*f2 * src[SRCIND3(is+1,js-1,ks)] + + f5*f2 * src[SRCIND3(is+2,js-1,ks)] + + f6*f2 * src[SRCIND3(is+3,js-1,ks)] + + f1*f3 * src[SRCIND3(is-2,js ,ks)] + + f2*f3 * src[SRCIND3(is-1,js ,ks)] + + f3*f3 * src[SRCIND3(is ,js ,ks)] + + f4*f3 * src[SRCIND3(is+1,js ,ks)] + + f5*f3 * src[SRCIND3(is+2,js ,ks)] + + f6*f3 * src[SRCIND3(is+3,js ,ks)] + + f1*f4 * src[SRCIND3(is-2,js+1,ks)] + + f2*f4 * src[SRCIND3(is-1,js+1,ks)] + + f3*f4 * src[SRCIND3(is ,js+1,ks)] + + f4*f4 * src[SRCIND3(is+1,js+1,ks)] + + f5*f4 * src[SRCIND3(is+2,js+1,ks)] + + f6*f4 * src[SRCIND3(is+3,js+1,ks)] + + f1*f5 * src[SRCIND3(is-2,js+2,ks)] + + f2*f5 * src[SRCIND3(is-1,js+2,ks)] + + f3*f5 * src[SRCIND3(is ,js+2,ks)] + + f4*f5 * src[SRCIND3(is+1,js+2,ks)] + + f5*f5 * src[SRCIND3(is+2,js+2,ks)] + + f6*f5 * src[SRCIND3(is+3,js+2,ks)] + + f1*f6 * src[SRCIND3(is-2,js+3,ks)] + + f2*f6 * src[SRCIND3(is-1,js+3,ks)] + + f3*f6 * src[SRCIND3(is ,js+3,ks)] + + f4*f6 * src[SRCIND3(is+1,js+3,ks)] + + f5*f6 * src[SRCIND3(is+2,js+3,ks)] + + f6*f6 * src[SRCIND3(is+3,js+3,ks)]; + // Monotonicity enforcement + if ((dst[DSTIND3(id,jd,kd)] > max4(src[SRCIND3(is ,js ,ks )], + src[SRCIND3(is+1,js ,ks )], + src[SRCIND3(is ,js+1,ks )], + src[SRCIND3(is+1,js+1,ks )]))|| + (dst[DSTIND3(id,jd,kd)] < min4(src[SRCIND3(is ,js ,ks )], + src[SRCIND3(is+1,js ,ks )], + src[SRCIND3(is ,js+1,ks )], + src[SRCIND3(is+1,js+1,ks )]))) { + dst[DSTIND3(id,jd,kd)] = + + o1_f1*o1_f1 * src[SRCIND3(is ,js ,ks)] + + o1_f2*o1_f1 * src[SRCIND3(is+1,js ,ks)] + + o1_f1*o1_f2 * src[SRCIND3(is ,js+1,ks)] + + o1_f2*o1_f2 * src[SRCIND3(is+1,js+1,ks)]; + } + i = i+1; + id = id+1; + is = is+1; + if (i < regiext) goto l8010; + goto l901; + + // end i loop + l901: + j = j+1; + jd = jd+1; + js = js+1; + if (j < regjext) goto l800; + goto l90; + + // end j loop + l90: + k = k+1; + kd = kd+1; + if (k < regkext) goto l81; + goto l9; + + // begin j loop + l81: + j = 0; + js = j0; + jd = dstjoff; + if (fj == 0) goto l810; + goto l811; + + // begin i loop + l810: + i = 0; + is = i0; + id = dstioff; + if (fi == 0) goto l8100; + goto l8101; + + // kernel + l8100: + dst[DSTIND3(id,jd,kd)] = + + f1 * src[SRCIND3(is,js,ks-2)] + + f2 * src[SRCIND3(is,js,ks-1)] + + f3 * src[SRCIND3(is,js,ks )] + + f4 * src[SRCIND3(is,js,ks+1)] + + f5 * src[SRCIND3(is,js,ks+2)] + + f6 * src[SRCIND3(is,js,ks+3)]; + // Monotonicity enforcement + if ((dst[DSTIND3(id,jd,kd)] > max(src[SRCIND3(is ,js ,ks )], + src[SRCIND3(is ,js ,ks+1)]))|| + (dst[DSTIND3(id,jd,kd)] < min(src[SRCIND3(is ,js ,ks )], + src[SRCIND3(is ,js ,ks+1)]))) { + dst[DSTIND3(id,jd,kd)] = + + o1_f1 * src[SRCIND3(is,js,ks )] + + o1_f2 * src[SRCIND3(is,js,ks+1)]; + } + i = i+1; + id = id+1; + if (i < regiext) goto l8101; + goto l910; + + // kernel + l8101: + dst[DSTIND3(id,jd,kd)] = + + f1*f1 * src[SRCIND3(is-2,js,ks-2)] + + f2*f1 * src[SRCIND3(is-1,js,ks-2)] + + f3*f1 * src[SRCIND3(is ,js,ks-2)] + + f4*f1 * src[SRCIND3(is+1,js,ks-2)] + + f5*f1 * src[SRCIND3(is+2,js,ks-2)] + + f6*f1 * src[SRCIND3(is+3,js,ks-2)] + + f1*f2 * src[SRCIND3(is-2,js,ks-1)] + + f2*f2 * src[SRCIND3(is-1,js,ks-1)] + + f3*f2 * src[SRCIND3(is ,js,ks-1)] + + f4*f2 * src[SRCIND3(is+1,js,ks-1)] + + f5*f2 * src[SRCIND3(is+2,js,ks-1)] + + f6*f2 * src[SRCIND3(is+3,js,ks-1)] + + f1*f3 * src[SRCIND3(is-2,js,ks )] + + f2*f3 * src[SRCIND3(is-1,js,ks )] + + f3*f3 * src[SRCIND3(is ,js,ks )] + + f4*f3 * src[SRCIND3(is+1,js,ks )] + + f5*f3 * src[SRCIND3(is+2,js,ks )] + + f6*f3 * src[SRCIND3(is+3,js,ks )] + + f1*f4 * src[SRCIND3(is-2,js,ks+1)] + + f2*f4 * src[SRCIND3(is-1,js,ks+1)] + + f3*f4 * src[SRCIND3(is ,js,ks+1)] + + f4*f4 * src[SRCIND3(is+1,js,ks+1)] + + f5*f4 * src[SRCIND3(is+2,js,ks+1)] + + f6*f4 * src[SRCIND3(is+3,js,ks+1)] + + f1*f5 * src[SRCIND3(is-2,js,ks+2)] + + f2*f5 * src[SRCIND3(is-1,js,ks+2)] + + f3*f5 * src[SRCIND3(is ,js,ks+2)] + + f4*f5 * src[SRCIND3(is+1,js,ks+2)] + + f5*f5 * src[SRCIND3(is+2,js,ks+2)] + + f6*f5 * src[SRCIND3(is+3,js,ks+2)] + + f1*f6 * src[SRCIND3(is-2,js,ks+3)] + + f2*f6 * src[SRCIND3(is-1,js,ks+3)] + + f3*f6 * src[SRCIND3(is ,js,ks+3)] + + f4*f6 * src[SRCIND3(is+1,js,ks+3)] + + f5*f6 * src[SRCIND3(is+2,js,ks+3)] + + f6*f6 * src[SRCIND3(is+3,js,ks+3)]; + // Monotonicity enforcement + if ((dst[DSTIND3(id,jd,kd)] > max4(src[SRCIND3(is ,js ,ks )], + src[SRCIND3(is+1,js ,ks )], + src[SRCIND3(is ,js ,ks+1)], + src[SRCIND3(is+1,js ,ks+1)]))|| + (dst[DSTIND3(id,jd,kd)] < min4(src[SRCIND3(is ,js ,ks )], + src[SRCIND3(is+1,js ,ks )], + src[SRCIND3(is ,js ,ks+1)], + src[SRCIND3(is+1,js ,ks+1)]))) { + dst[DSTIND3(id,jd,kd)] = + + o1_f1*o1_f1 * src[SRCIND3(is ,js,ks )] + + o1_f2*o1_f1 * src[SRCIND3(is+1,js,ks )] + + o1_f1*o1_f2 * src[SRCIND3(is ,js,ks+1)] + + o1_f2*o1_f2 * src[SRCIND3(is+1,js,ks+1)]; + } + i = i+1; + id = id+1; + is = is+1; + if (i < regiext) goto l8100; + goto l910; + + // end i loop + l910: + j = j+1; + jd = jd+1; + if (j < regjext) goto l811; + goto l91; + + // begin i loop + l811: + i = 0; + is = i0; + id = dstioff; + if (fi == 0) goto l8110; + goto l8111; + + // kernel + l8110: + dst[DSTIND3(id,jd,kd)] = + + f1*f1 * src[SRCIND3(is,js-2,ks-2)] + + f2*f1 * src[SRCIND3(is,js-1,ks-2)] + + f3*f1 * src[SRCIND3(is,js ,ks-2)] + + f4*f1 * src[SRCIND3(is,js+1,ks-2)] + + f5*f1 * src[SRCIND3(is,js+2,ks-2)] + + f6*f1 * src[SRCIND3(is,js+3,ks-2)] + + f1*f2 * src[SRCIND3(is,js-2,ks-1)] + + f2*f2 * src[SRCIND3(is,js-1,ks-1)] + + f3*f2 * src[SRCIND3(is,js ,ks-1)] + + f4*f2 * src[SRCIND3(is,js+1,ks-1)] + + f5*f2 * src[SRCIND3(is,js+2,ks-1)] + + f6*f2 * src[SRCIND3(is,js+3,ks-1)] + + f1*f3 * src[SRCIND3(is,js-2,ks )] + + f2*f3 * src[SRCIND3(is,js-1,ks )] + + f3*f3 * src[SRCIND3(is,js ,ks )] + + f4*f3 * src[SRCIND3(is,js+1,ks )] + + f5*f3 * src[SRCIND3(is,js+2,ks )] + + f6*f3 * src[SRCIND3(is,js+3,ks )] + + f1*f4 * src[SRCIND3(is,js-2,ks+1)] + + f2*f4 * src[SRCIND3(is,js-1,ks+1)] + + f3*f4 * src[SRCIND3(is,js ,ks+1)] + + f4*f4 * src[SRCIND3(is,js+1,ks+1)] + + f5*f4 * src[SRCIND3(is,js+2,ks+1)] + + f6*f4 * src[SRCIND3(is,js+3,ks+1)] + + f1*f5 * src[SRCIND3(is,js-2,ks+2)] + + f2*f5 * src[SRCIND3(is,js-1,ks+2)] + + f3*f5 * src[SRCIND3(is,js ,ks+2)] + + f4*f5 * src[SRCIND3(is,js+1,ks+2)] + + f5*f5 * src[SRCIND3(is,js+2,ks+2)] + + f6*f5 * src[SRCIND3(is,js+3,ks+2)] + + f1*f6 * src[SRCIND3(is,js-2,ks+3)] + + f2*f6 * src[SRCIND3(is,js-1,ks+3)] + + f3*f6 * src[SRCIND3(is,js ,ks+3)] + + f4*f6 * src[SRCIND3(is,js+1,ks+3)] + + f5*f6 * src[SRCIND3(is,js+2,ks+3)] + + f6*f6 * src[SRCIND3(is,js+3,ks+3)]; + // Monotonicity enforcement + if ((dst[DSTIND3(id,jd,kd)] > max4(src[SRCIND3(is ,js ,ks )], + src[SRCIND3(is ,js+1,ks )], + src[SRCIND3(is ,js ,ks+1)], + src[SRCIND3(is ,js+1,ks+1)]))|| + (dst[DSTIND3(id,jd,kd)] < min4(src[SRCIND3(is ,js ,ks )], + src[SRCIND3(is ,js+1,ks )], + src[SRCIND3(is ,js ,ks+1)], + src[SRCIND3(is ,js+1,ks+1)]))) { + dst[DSTIND3(id,jd,kd)] = + + o1_f1*o1_f1 * src[SRCIND3(is,js ,ks )] + + o1_f2*o1_f1 * src[SRCIND3(is,js+1,ks )] + + o1_f1*o1_f2 * src[SRCIND3(is,js ,ks+1)] + + o1_f2*o1_f2 * src[SRCIND3(is,js+1,ks+1)]; + } + i = i+1; + id = id+1; + if (i < regiext) goto l8111; + goto l911; + + // kernel + l8111: + { + T const res1 = + + f1*f1*f1 * src[SRCIND3(is-2,js-2,ks-2)] + + f2*f1*f1 * src[SRCIND3(is-1,js-2,ks-2)] + + f3*f1*f1 * src[SRCIND3(is ,js-2,ks-2)] + + f4*f1*f1 * src[SRCIND3(is+1,js-2,ks-2)] + + f5*f1*f1 * src[SRCIND3(is+2,js-2,ks-2)] + + f6*f1*f1 * src[SRCIND3(is+3,js-2,ks-2)] + + f1*f2*f1 * src[SRCIND3(is-2,js-1,ks-2)] + + f2*f2*f1 * src[SRCIND3(is-1,js-1,ks-2)] + + f3*f2*f1 * src[SRCIND3(is ,js-1,ks-2)] + + f4*f2*f1 * src[SRCIND3(is+1,js-1,ks-2)] + + f5*f2*f1 * src[SRCIND3(is+2,js-1,ks-2)] + + f6*f2*f1 * src[SRCIND3(is+3,js-1,ks-2)] + + f1*f3*f1 * src[SRCIND3(is-2,js ,ks-2)] + + f2*f3*f1 * src[SRCIND3(is-1,js ,ks-2)] + + f3*f3*f1 * src[SRCIND3(is ,js ,ks-2)] + + f4*f3*f1 * src[SRCIND3(is+1,js ,ks-2)] + + f5*f3*f1 * src[SRCIND3(is+2,js ,ks-2)] + + f6*f3*f1 * src[SRCIND3(is+3,js ,ks-2)] + + f1*f4*f1 * src[SRCIND3(is-2,js+1,ks-2)] + + f2*f4*f1 * src[SRCIND3(is-1,js+1,ks-2)] + + f3*f4*f1 * src[SRCIND3(is ,js+1,ks-2)] + + f4*f4*f1 * src[SRCIND3(is+1,js+1,ks-2)] + + f5*f4*f1 * src[SRCIND3(is+2,js+1,ks-2)] + + f6*f4*f1 * src[SRCIND3(is+3,js+1,ks-2)] + + f1*f5*f1 * src[SRCIND3(is-2,js+2,ks-2)] + + f2*f5*f1 * src[SRCIND3(is-1,js+2,ks-2)] + + f3*f5*f1 * src[SRCIND3(is ,js+2,ks-2)] + + f4*f5*f1 * src[SRCIND3(is+1,js+2,ks-2)] + + f5*f5*f1 * src[SRCIND3(is+2,js+2,ks-2)] + + f6*f5*f1 * src[SRCIND3(is+3,js+2,ks-2)] + + f1*f6*f1 * src[SRCIND3(is-2,js+3,ks-2)] + + f2*f6*f1 * src[SRCIND3(is-1,js+3,ks-2)] + + f3*f6*f1 * src[SRCIND3(is ,js+3,ks-2)] + + f4*f6*f1 * src[SRCIND3(is+1,js+3,ks-2)] + + f5*f6*f1 * src[SRCIND3(is+2,js+3,ks-2)] + + f6*f6*f1 * src[SRCIND3(is+3,js+3,ks-2)]; + T const res2 = + + f1*f1*f2 * src[SRCIND3(is-2,js-2,ks-1)] + + f2*f1*f2 * src[SRCIND3(is-1,js-2,ks-1)] + + f3*f1*f2 * src[SRCIND3(is ,js-2,ks-1)] + + f4*f1*f2 * src[SRCIND3(is+1,js-2,ks-1)] + + f5*f1*f2 * src[SRCIND3(is+2,js-2,ks-1)] + + f6*f1*f2 * src[SRCIND3(is+3,js-2,ks-1)] + + f1*f2*f2 * src[SRCIND3(is-2,js-1,ks-1)] + + f2*f2*f2 * src[SRCIND3(is-1,js-1,ks-1)] + + f3*f2*f2 * src[SRCIND3(is ,js-1,ks-1)] + + f4*f2*f2 * src[SRCIND3(is+1,js-1,ks-1)] + + f5*f2*f2 * src[SRCIND3(is+2,js-1,ks-1)] + + f6*f2*f2 * src[SRCIND3(is+3,js-1,ks-1)] + + f1*f3*f2 * src[SRCIND3(is-2,js ,ks-1)] + + f2*f3*f2 * src[SRCIND3(is-1,js ,ks-1)] + + f3*f3*f2 * src[SRCIND3(is ,js ,ks-1)] + + f4*f3*f2 * src[SRCIND3(is+1,js ,ks-1)] + + f5*f3*f2 * src[SRCIND3(is+2,js ,ks-1)] + + f6*f3*f2 * src[SRCIND3(is+3,js ,ks-1)] + + f1*f4*f2 * src[SRCIND3(is-2,js+1,ks-1)] + + f2*f4*f2 * src[SRCIND3(is-1,js+1,ks-1)] + + f3*f4*f2 * src[SRCIND3(is ,js+1,ks-1)] + + f4*f4*f2 * src[SRCIND3(is+1,js+1,ks-1)] + + f5*f4*f2 * src[SRCIND3(is+2,js+1,ks-1)] + + f6*f4*f2 * src[SRCIND3(is+3,js+1,ks-1)] + + f1*f5*f2 * src[SRCIND3(is-2,js+2,ks-1)] + + f2*f5*f2 * src[SRCIND3(is-1,js+2,ks-1)] + + f3*f5*f2 * src[SRCIND3(is ,js+2,ks-1)] + + f4*f5*f2 * src[SRCIND3(is+1,js+2,ks-1)] + + f5*f5*f2 * src[SRCIND3(is+2,js+2,ks-1)] + + f6*f5*f2 * src[SRCIND3(is+3,js+2,ks-1)] + + f1*f6*f2 * src[SRCIND3(is-2,js+3,ks-1)] + + f2*f6*f2 * src[SRCIND3(is-1,js+3,ks-1)] + + f3*f6*f2 * src[SRCIND3(is ,js+3,ks-1)] + + f4*f6*f2 * src[SRCIND3(is+1,js+3,ks-1)] + + f5*f6*f2 * src[SRCIND3(is+2,js+3,ks-1)] + + f6*f6*f2 * src[SRCIND3(is+3,js+3,ks-1)]; + T const res3 = + + f1*f1*f3 * src[SRCIND3(is-2,js-2,ks )] + + f2*f1*f3 * src[SRCIND3(is-1,js-2,ks )] + + f3*f1*f3 * src[SRCIND3(is ,js-2,ks )] + + f4*f1*f3 * src[SRCIND3(is+1,js-2,ks )] + + f5*f1*f3 * src[SRCIND3(is+2,js-2,ks )] + + f6*f1*f3 * src[SRCIND3(is+3,js-2,ks )] + + f1*f2*f3 * src[SRCIND3(is-2,js-1,ks )] + + f2*f2*f3 * src[SRCIND3(is-1,js-1,ks )] + + f3*f2*f3 * src[SRCIND3(is ,js-1,ks )] + + f4*f2*f3 * src[SRCIND3(is+1,js-1,ks )] + + f5*f2*f3 * src[SRCIND3(is+2,js-1,ks )] + + f6*f2*f3 * src[SRCIND3(is+3,js-1,ks )] + + f1*f3*f3 * src[SRCIND3(is-2,js ,ks )] + + f2*f3*f3 * src[SRCIND3(is-1,js ,ks )] + + f3*f3*f3 * src[SRCIND3(is ,js ,ks )] + + f4*f3*f3 * src[SRCIND3(is+1,js ,ks )] + + f5*f3*f3 * src[SRCIND3(is+2,js ,ks )] + + f6*f3*f3 * src[SRCIND3(is+3,js ,ks )] + + f1*f4*f3 * src[SRCIND3(is-2,js+1,ks )] + + f2*f4*f3 * src[SRCIND3(is-1,js+1,ks )] + + f3*f4*f3 * src[SRCIND3(is ,js+1,ks )] + + f4*f4*f3 * src[SRCIND3(is+1,js+1,ks )] + + f5*f4*f3 * src[SRCIND3(is+2,js+1,ks )] + + f6*f4*f3 * src[SRCIND3(is+3,js+1,ks )] + + f1*f5*f3 * src[SRCIND3(is-2,js+2,ks )] + + f2*f5*f3 * src[SRCIND3(is-1,js+2,ks )] + + f3*f5*f3 * src[SRCIND3(is ,js+2,ks )] + + f4*f5*f3 * src[SRCIND3(is+1,js+2,ks )] + + f5*f5*f3 * src[SRCIND3(is+2,js+2,ks )] + + f6*f5*f3 * src[SRCIND3(is+3,js+2,ks )] + + f1*f6*f3 * src[SRCIND3(is-2,js+3,ks )] + + f2*f6*f3 * src[SRCIND3(is-1,js+3,ks )] + + f3*f6*f3 * src[SRCIND3(is ,js+3,ks )] + + f4*f6*f3 * src[SRCIND3(is+1,js+3,ks )] + + f5*f6*f3 * src[SRCIND3(is+2,js+3,ks )] + + f6*f6*f3 * src[SRCIND3(is+3,js+3,ks )]; + T const res4 = + + f1*f1*f4 * src[SRCIND3(is-2,js-2,ks+1)] + + f2*f1*f4 * src[SRCIND3(is-1,js-2,ks+1)] + + f3*f1*f4 * src[SRCIND3(is ,js-2,ks+1)] + + f4*f1*f4 * src[SRCIND3(is+1,js-2,ks+1)] + + f5*f1*f4 * src[SRCIND3(is+2,js-2,ks+1)] + + f6*f1*f4 * src[SRCIND3(is+3,js-2,ks+1)] + + f1*f2*f4 * src[SRCIND3(is-2,js-1,ks+1)] + + f2*f2*f4 * src[SRCIND3(is-1,js-1,ks+1)] + + f3*f2*f4 * src[SRCIND3(is ,js-1,ks+1)] + + f4*f2*f4 * src[SRCIND3(is+1,js-1,ks+1)] + + f5*f2*f4 * src[SRCIND3(is+2,js-1,ks+1)] + + f6*f2*f4 * src[SRCIND3(is+3,js-1,ks+1)] + + f1*f3*f4 * src[SRCIND3(is-2,js ,ks+1)] + + f2*f3*f4 * src[SRCIND3(is-1,js ,ks+1)] + + f3*f3*f4 * src[SRCIND3(is ,js ,ks+1)] + + f4*f3*f4 * src[SRCIND3(is+1,js ,ks+1)] + + f5*f3*f4 * src[SRCIND3(is+2,js ,ks+1)] + + f6*f3*f4 * src[SRCIND3(is+3,js ,ks+1)] + + f1*f4*f4 * src[SRCIND3(is-2,js+1,ks+1)] + + f2*f4*f4 * src[SRCIND3(is-1,js+1,ks+1)] + + f3*f4*f4 * src[SRCIND3(is ,js+1,ks+1)] + + f4*f4*f4 * src[SRCIND3(is+1,js+1,ks+1)] + + f5*f4*f4 * src[SRCIND3(is+2,js+1,ks+1)] + + f6*f4*f4 * src[SRCIND3(is+3,js+1,ks+1)] + + f1*f5*f4 * src[SRCIND3(is-2,js+2,ks+1)] + + f2*f5*f4 * src[SRCIND3(is-1,js+2,ks+1)] + + f3*f5*f4 * src[SRCIND3(is ,js+2,ks+1)] + + f4*f5*f4 * src[SRCIND3(is+1,js+2,ks+1)] + + f5*f5*f4 * src[SRCIND3(is+2,js+2,ks+1)] + + f6*f5*f4 * src[SRCIND3(is+3,js+2,ks+1)] + + f1*f6*f4 * src[SRCIND3(is-2,js+3,ks+1)] + + f2*f6*f4 * src[SRCIND3(is-1,js+3,ks+1)] + + f3*f6*f4 * src[SRCIND3(is ,js+3,ks+1)] + + f4*f6*f4 * src[SRCIND3(is+1,js+3,ks+1)] + + f5*f6*f4 * src[SRCIND3(is+2,js+3,ks+1)] + + f6*f6*f4 * src[SRCIND3(is+3,js+3,ks+1)]; + T const res5 = + + f1*f1*f5 * src[SRCIND3(is-2,js-2,ks+2)] + + f2*f1*f5 * src[SRCIND3(is-1,js-2,ks+2)] + + f3*f1*f5 * src[SRCIND3(is ,js-2,ks+2)] + + f4*f1*f5 * src[SRCIND3(is+1,js-2,ks+2)] + + f5*f1*f5 * src[SRCIND3(is+2,js-2,ks+2)] + + f6*f1*f5 * src[SRCIND3(is+3,js-2,ks+2)] + + f1*f2*f5 * src[SRCIND3(is-2,js-1,ks+2)] + + f2*f2*f5 * src[SRCIND3(is-1,js-1,ks+2)] + + f3*f2*f5 * src[SRCIND3(is ,js-1,ks+2)] + + f4*f2*f5 * src[SRCIND3(is+1,js-1,ks+2)] + + f5*f2*f5 * src[SRCIND3(is+2,js-1,ks+2)] + + f6*f2*f5 * src[SRCIND3(is+3,js-1,ks+2)] + + f1*f3*f5 * src[SRCIND3(is-2,js ,ks+2)] + + f2*f3*f5 * src[SRCIND3(is-1,js ,ks+2)] + + f3*f3*f5 * src[SRCIND3(is ,js ,ks+2)] + + f4*f3*f5 * src[SRCIND3(is+1,js ,ks+2)] + + f5*f3*f5 * src[SRCIND3(is+2,js ,ks+2)] + + f6*f3*f5 * src[SRCIND3(is+3,js ,ks+2)] + + f1*f4*f5 * src[SRCIND3(is-2,js+1,ks+2)] + + f2*f4*f5 * src[SRCIND3(is-1,js+1,ks+2)] + + f3*f4*f5 * src[SRCIND3(is ,js+1,ks+2)] + + f4*f4*f5 * src[SRCIND3(is+1,js+1,ks+2)] + + f5*f4*f5 * src[SRCIND3(is+2,js+1,ks+2)] + + f6*f4*f5 * src[SRCIND3(is+3,js+1,ks+2)] + + f1*f5*f5 * src[SRCIND3(is-2,js+2,ks+2)] + + f2*f5*f5 * src[SRCIND3(is-1,js+2,ks+2)] + + f3*f5*f5 * src[SRCIND3(is ,js+2,ks+2)] + + f4*f5*f5 * src[SRCIND3(is+1,js+2,ks+2)] + + f5*f5*f5 * src[SRCIND3(is+2,js+2,ks+2)] + + f6*f5*f5 * src[SRCIND3(is+3,js+2,ks+2)] + + f1*f6*f5 * src[SRCIND3(is-2,js+3,ks+2)] + + f2*f6*f5 * src[SRCIND3(is-1,js+3,ks+2)] + + f3*f6*f5 * src[SRCIND3(is ,js+3,ks+2)] + + f4*f6*f5 * src[SRCIND3(is+1,js+3,ks+2)] + + f5*f6*f5 * src[SRCIND3(is+2,js+3,ks+2)] + + f6*f6*f5 * src[SRCIND3(is+3,js+3,ks+2)]; + T const res6 = + + f1*f1*f6 * src[SRCIND3(is-2,js-2,ks+3)] + + f2*f1*f6 * src[SRCIND3(is-1,js-2,ks+3)] + + f3*f1*f6 * src[SRCIND3(is ,js-2,ks+3)] + + f4*f1*f6 * src[SRCIND3(is+1,js-2,ks+3)] + + f5*f1*f6 * src[SRCIND3(is+2,js-2,ks+3)] + + f6*f1*f6 * src[SRCIND3(is+3,js-2,ks+3)] + + f1*f2*f6 * src[SRCIND3(is-2,js-1,ks+3)] + + f2*f2*f6 * src[SRCIND3(is-1,js-1,ks+3)] + + f3*f2*f6 * src[SRCIND3(is ,js-1,ks+3)] + + f4*f2*f6 * src[SRCIND3(is+1,js-1,ks+3)] + + f5*f2*f6 * src[SRCIND3(is+2,js-1,ks+3)] + + f6*f2*f6 * src[SRCIND3(is+3,js-1,ks+3)] + + f1*f3*f6 * src[SRCIND3(is-2,js ,ks+3)] + + f2*f3*f6 * src[SRCIND3(is-1,js ,ks+3)] + + f3*f3*f6 * src[SRCIND3(is ,js ,ks+3)] + + f4*f3*f6 * src[SRCIND3(is+1,js ,ks+3)] + + f5*f3*f6 * src[SRCIND3(is+2,js ,ks+3)] + + f6*f3*f6 * src[SRCIND3(is+3,js ,ks+3)] + + f1*f4*f6 * src[SRCIND3(is-2,js+1,ks+3)] + + f2*f4*f6 * src[SRCIND3(is-1,js+1,ks+3)] + + f3*f4*f6 * src[SRCIND3(is ,js+1,ks+3)] + + f4*f4*f6 * src[SRCIND3(is+1,js+1,ks+3)] + + f5*f4*f6 * src[SRCIND3(is+2,js+1,ks+3)] + + f6*f4*f6 * src[SRCIND3(is+3,js+1,ks+3)] + + f1*f5*f6 * src[SRCIND3(is-2,js+2,ks+3)] + + f2*f5*f6 * src[SRCIND3(is-1,js+2,ks+3)] + + f3*f5*f6 * src[SRCIND3(is ,js+2,ks+3)] + + f4*f5*f6 * src[SRCIND3(is+1,js+2,ks+3)] + + f5*f5*f6 * src[SRCIND3(is+2,js+2,ks+3)] + + f6*f5*f6 * src[SRCIND3(is+3,js+2,ks+3)] + + f1*f6*f6 * src[SRCIND3(is-2,js+3,ks+3)] + + f2*f6*f6 * src[SRCIND3(is-1,js+3,ks+3)] + + f3*f6*f6 * src[SRCIND3(is ,js+3,ks+3)] + + f4*f6*f6 * src[SRCIND3(is+1,js+3,ks+3)] + + f5*f6*f6 * src[SRCIND3(is+2,js+3,ks+3)] + + f6*f6*f6 * src[SRCIND3(is+3,js+3,ks+3)]; + dst[DSTIND3(id,jd,kd)] = res1 + res2 + res3 + res4 + res5 + res6; + // Monotonicity enforcement + if ((dst[DSTIND3(id,jd,kd)] > max8(src[SRCIND3(is ,js ,ks )], + src[SRCIND3(is+1,js ,ks )], + src[SRCIND3(is ,js+1,ks )], + src[SRCIND3(is ,js ,ks+1)], + src[SRCIND3(is+1,js+1,ks )], + src[SRCIND3(is+1,js ,ks+1)], + src[SRCIND3(is ,js+1,ks+1)], + src[SRCIND3(is+1,js+1,ks+1)]))|| + (dst[DSTIND3(id,jd,kd)] < min8(src[SRCIND3(is ,js ,ks )], + src[SRCIND3(is+1,js ,ks )], + src[SRCIND3(is ,js+1,ks )], + src[SRCIND3(is ,js ,ks+1)], + src[SRCIND3(is+1,js+1,ks )], + src[SRCIND3(is+1,js ,ks+1)], + src[SRCIND3(is ,js+1,ks+1)], + src[SRCIND3(is+1,js+1,ks+1)]))) { + T const res1 = + + o1_f1*o1_f1*o1_f1 * src[SRCIND3(is ,js ,ks )] + + o1_f2*o1_f1*o1_f1 * src[SRCIND3(is+1,js ,ks )] + + o1_f1*o1_f2*o1_f1 * src[SRCIND3(is ,js+1,ks )] + + o1_f2*o1_f2*o1_f1 * src[SRCIND3(is+1,js+1,ks )]; + T const res2 = + + o1_f1*o1_f1*o1_f2 * src[SRCIND3(is ,js ,ks+1)] + + o1_f2*o1_f1*o1_f2 * src[SRCIND3(is+1,js ,ks+1)] + + o1_f1*o1_f2*o1_f2 * src[SRCIND3(is ,js+1,ks+1)] + + o1_f2*o1_f2*o1_f2 * src[SRCIND3(is+1,js+1,ks+1)]; + dst[DSTIND3(id,jd,kd)] = res1 + res2; + } + } + i = i+1; + id = id+1; + is = is+1; + if (i < regiext) goto l8110; + goto l911; + + // end i loop + l911: + j = j+1; + jd = jd+1; + js = js+1; + if (j < regjext) goto l810; + goto l91; + + // end j loop + l91: + k = k+1; + kd = kd+1; + ks = ks+1; + if (k < regkext) goto l80; + goto l9; + + // end k loop + l9:; + + } + + + +#define INSTANTIATE(T) \ + template \ + void \ + prolongate_3d_o5_monotone_rf2 (T const * restrict const src, \ + ivect3 const & restrict srcext, \ + T * restrict const dst, \ + ivect3 const & restrict dstext, \ + ibbox3 const & restrict srcbbox, \ + ibbox3 const & restrict dstbbox, \ + ibbox3 const & restrict regbbox); +#define CARPET_NO_COMPLEX +#include "instantiate" +#undef CARPET_NO_COMPLEX +#undef INSTANTIATE + + template <> + void + prolongate_3d_o5_monotone_rf2 (CCTK_COMPLEX const * restrict const src, + ivect3 const & restrict srcext, + CCTK_COMPLEX * restrict const dst, + ivect3 const & restrict dstext, + ibbox3 const & restrict srcbbox, + ibbox3 const & restrict dstbbox, + ibbox3 const & restrict regbbox) + { + CCTK_WARN(0, "This should never be called!"); + } + + +} // namespace CarpetLib diff --git a/Carpet/CarpetLib/src/prolongate_3d_o5_rf2.cc b/Carpet/CarpetLib/src/prolongate_3d_o5_rf2.cc index 71133b004..6cbde8cde 100644 --- a/Carpet/CarpetLib/src/prolongate_3d_o5_rf2.cc +++ b/Carpet/CarpetLib/src/prolongate_3d_o5_rf2.cc @@ -6,7 +6,7 @@ #include <cctk.h> #include <cctk_Parameters.h> -#include "operator_prototypes.hh" +#include "operator_prototypes_3d.hh" #include "typeprops.hh" using namespace std; @@ -143,7 +143,7 @@ namespace CarpetLib { goto l81; // begin j loop - l80: + l80: j = 0; js = j0; jd = dstjoff; @@ -151,7 +151,7 @@ namespace CarpetLib { goto l801; // begin i loop - l800: + l800: i = 0; is = i0; id = dstioff; @@ -159,7 +159,7 @@ namespace CarpetLib { goto l8001; // kernel - l8000: + l8000: dst[DSTIND3(id,jd,kd)] = src[SRCIND3(is,js,ks)]; i = i+1; id = id+1; @@ -167,7 +167,7 @@ namespace CarpetLib { goto l900; // kernel - l8001: + l8001: dst[DSTIND3(id,jd,kd)] = + f1 * src[SRCIND3(is-2,js,ks)] + f2 * src[SRCIND3(is-1,js,ks)] @@ -182,14 +182,14 @@ namespace CarpetLib { goto l900; // end i loop - l900: + l900: j = j+1; jd = jd+1; if (j < regjext) goto l801; goto l90; // begin i loop - l801: + l801: i = 0; is = i0; id = dstioff; @@ -197,7 +197,7 @@ namespace CarpetLib { goto l8011; // kernel - l8010: + l8010: dst[DSTIND3(id,jd,kd)] = + f1 * src[SRCIND3(is,js-2,ks)] + f2 * src[SRCIND3(is,js-1,ks)] @@ -211,7 +211,7 @@ namespace CarpetLib { goto l901; // kernel - l8011: + l8011: dst[DSTIND3(id,jd,kd)] = + f1*f1 * src[SRCIND3(is-2,js-2,ks)] + f2*f1 * src[SRCIND3(is-1,js-2,ks)] @@ -256,7 +256,7 @@ namespace CarpetLib { goto l901; // end i loop - l901: + l901: j = j+1; jd = jd+1; js = js+1; @@ -264,14 +264,14 @@ namespace CarpetLib { goto l90; // end j loop - l90: + l90: k = k+1; kd = kd+1; if (k < regkext) goto l81; goto l9; // begin j loop - l81: + l81: j = 0; js = j0; jd = dstjoff; @@ -279,7 +279,7 @@ namespace CarpetLib { goto l811; // begin i loop - l810: + l810: i = 0; is = i0; id = dstioff; @@ -287,7 +287,7 @@ namespace CarpetLib { goto l8101; // kernel - l8100: + l8100: dst[DSTIND3(id,jd,kd)] = + f1 * src[SRCIND3(is,js,ks-2)] + f2 * src[SRCIND3(is,js,ks-1)] @@ -301,7 +301,7 @@ namespace CarpetLib { goto l910; // kernel - l8101: + l8101: dst[DSTIND3(id,jd,kd)] = + f1*f1 * src[SRCIND3(is-2,js,ks-2)] + f2*f1 * src[SRCIND3(is-1,js,ks-2)] @@ -346,14 +346,14 @@ namespace CarpetLib { goto l910; // end i loop - l910: + l910: j = j+1; jd = jd+1; if (j < regjext) goto l811; goto l91; // begin i loop - l811: + l811: i = 0; is = i0; id = dstioff; @@ -361,7 +361,7 @@ namespace CarpetLib { goto l8111; // kernel - l8110: + l8110: dst[DSTIND3(id,jd,kd)] = + f1*f1 * src[SRCIND3(is,js-2,ks-2)] + f2*f1 * src[SRCIND3(is,js-1,ks-2)] @@ -405,7 +405,7 @@ namespace CarpetLib { goto l911; // kernel - l8111: + l8111: { T const res1 = + f1*f1*f1 * src[SRCIND3(is-2,js-2,ks-2)] @@ -638,7 +638,7 @@ namespace CarpetLib { goto l911; // end i loop - l911: + l911: j = j+1; jd = jd+1; js = js+1; @@ -646,7 +646,7 @@ namespace CarpetLib { goto l91; // end j loop - l91: + l91: k = k+1; kd = kd+1; ks = ks+1; @@ -654,7 +654,7 @@ namespace CarpetLib { goto l9; // end k loop - l9:; + l9:; } diff --git a/Carpet/CarpetLib/src/prolongate_3d_o7_rf2.cc b/Carpet/CarpetLib/src/prolongate_3d_o7_rf2.cc index b65f1632d..44ee78d01 100644 --- a/Carpet/CarpetLib/src/prolongate_3d_o7_rf2.cc +++ b/Carpet/CarpetLib/src/prolongate_3d_o7_rf2.cc @@ -6,7 +6,7 @@ #include <cctk.h> #include <cctk_Parameters.h> -#include "operator_prototypes.hh" +#include "operator_prototypes_3d.hh" #include "typeprops.hh" using namespace std; @@ -227,7 +227,7 @@ namespace CarpetLib { goto l81; // begin j loop - l80: + l80: j = 0; js = j0; jd = dstjoff; @@ -235,7 +235,7 @@ namespace CarpetLib { goto l801; // begin i loop - l800: + l800: i = 0; is = i0; id = dstioff; @@ -243,7 +243,7 @@ namespace CarpetLib { goto l8001; // kernel - l8000: + l8000: dst[DSTIND3(id,jd,kd)] = interp0<T> (& src[SRCIND3(is,js,ks)]); i = i+1; id = id+1; @@ -251,7 +251,7 @@ namespace CarpetLib { goto l900; // kernel - l8001: + l8001: dst[DSTIND3(id,jd,kd)] = interp1<T> (& src[SRCIND3(is-3,js,ks)], srcdi); i = i+1; id = id+1; @@ -260,14 +260,14 @@ namespace CarpetLib { goto l900; // end i loop - l900: + l900: j = j+1; jd = jd+1; if (j < regjext) goto l801; goto l90; // begin i loop - l801: + l801: i = 0; is = i0; id = dstioff; @@ -275,7 +275,7 @@ namespace CarpetLib { goto l8011; // kernel - l8010: + l8010: dst[DSTIND3(id,jd,kd)] = interp1<T> (& src[SRCIND3(is,js-3,ks)], srcdj); i = i+1; id = id+1; @@ -283,7 +283,7 @@ namespace CarpetLib { goto l901; // kernel - l8011: + l8011: dst[DSTIND3(id,jd,kd)] = interp2<T> (& src[SRCIND3(is-3,js-3,ks)], srcdi, srcdj); i = i+1; @@ -293,7 +293,7 @@ namespace CarpetLib { goto l901; // end i loop - l901: + l901: j = j+1; jd = jd+1; js = js+1; @@ -301,14 +301,14 @@ namespace CarpetLib { goto l90; // end j loop - l90: + l90: k = k+1; kd = kd+1; if (k < regkext) goto l81; goto l9; // begin j loop - l81: + l81: j = 0; js = j0; jd = dstjoff; @@ -316,7 +316,7 @@ namespace CarpetLib { goto l811; // begin i loop - l810: + l810: i = 0; is = i0; id = dstioff; @@ -324,7 +324,7 @@ namespace CarpetLib { goto l8101; // kernel - l8100: + l8100: dst[DSTIND3(id,jd,kd)] = interp1<T> (& src[SRCIND3(is,js,ks-3)], srcdk); i = i+1; id = id+1; @@ -332,7 +332,7 @@ namespace CarpetLib { goto l910; // kernel - l8101: + l8101: dst[DSTIND3(id,jd,kd)] = interp2<T> (& src[SRCIND3(is-3,js,ks-3)], srcdi, srcdj); i = i+1; @@ -342,14 +342,14 @@ namespace CarpetLib { goto l910; // end i loop - l910: + l910: j = j+1; jd = jd+1; if (j < regjext) goto l811; goto l91; // begin i loop - l811: + l811: i = 0; is = i0; id = dstioff; @@ -357,7 +357,7 @@ namespace CarpetLib { goto l8111; // kernel - l8110: + l8110: dst[DSTIND3(id,jd,kd)] = interp2<T> (& src[SRCIND3(is,js-3,ks-3)], srcdj, srcdk); i = i+1; @@ -366,7 +366,7 @@ namespace CarpetLib { goto l911; // kernel - l8111: + l8111: { dst[DSTIND3(id,jd,kd)] = interp3<T> (& src[SRCIND3(is-3,js-3,ks-3)], srcdi, srcdj, srcdk); @@ -378,7 +378,7 @@ namespace CarpetLib { goto l911; // end i loop - l911: + l911: j = j+1; jd = jd+1; js = js+1; @@ -386,7 +386,7 @@ namespace CarpetLib { goto l91; // end j loop - l91: + l91: k = k+1; kd = kd+1; ks = ks+1; @@ -394,7 +394,7 @@ namespace CarpetLib { goto l9; // end k loop - l9:; + l9:; } diff --git a/Carpet/CarpetLib/src/prolongate_3d_o9_rf2.cc b/Carpet/CarpetLib/src/prolongate_3d_o9_rf2.cc index a01a3bd35..04e9a97b8 100644 --- a/Carpet/CarpetLib/src/prolongate_3d_o9_rf2.cc +++ b/Carpet/CarpetLib/src/prolongate_3d_o9_rf2.cc @@ -6,7 +6,7 @@ #include <cctk.h> #include <cctk_Parameters.h> -#include "operator_prototypes.hh" +#include "operator_prototypes_3d.hh" #include "typeprops.hh" using namespace std; @@ -229,7 +229,7 @@ namespace CarpetLib { goto l81; // begin j loop - l80: + l80: j = 0; js = j0; jd = dstjoff; @@ -237,7 +237,7 @@ namespace CarpetLib { goto l801; // begin i loop - l800: + l800: i = 0; is = i0; id = dstioff; @@ -245,7 +245,7 @@ namespace CarpetLib { goto l8001; // kernel - l8000: + l8000: dst[DSTIND3(id,jd,kd)] = interp0<T> (& src[SRCIND3(is,js,ks)]); i = i+1; id = id+1; @@ -253,7 +253,7 @@ namespace CarpetLib { goto l900; // kernel - l8001: + l8001: dst[DSTIND3(id,jd,kd)] = interp1<T> (& src[SRCIND3(is-4,js,ks)], srcdi); i = i+1; id = id+1; @@ -262,14 +262,14 @@ namespace CarpetLib { goto l900; // end i loop - l900: + l900: j = j+1; jd = jd+1; if (j < regjext) goto l801; goto l90; // begin i loop - l801: + l801: i = 0; is = i0; id = dstioff; @@ -277,7 +277,7 @@ namespace CarpetLib { goto l8011; // kernel - l8010: + l8010: dst[DSTIND3(id,jd,kd)] = interp1<T> (& src[SRCIND3(is,js-4,ks)], srcdj); i = i+1; id = id+1; @@ -285,7 +285,7 @@ namespace CarpetLib { goto l901; // kernel - l8011: + l8011: dst[DSTIND3(id,jd,kd)] = interp2<T> (& src[SRCIND3(is-4,js-4,ks)], srcdi, srcdj); i = i+1; @@ -295,7 +295,7 @@ namespace CarpetLib { goto l901; // end i loop - l901: + l901: j = j+1; jd = jd+1; js = js+1; @@ -303,14 +303,14 @@ namespace CarpetLib { goto l90; // end j loop - l90: + l90: k = k+1; kd = kd+1; if (k < regkext) goto l81; goto l9; // begin j loop - l81: + l81: j = 0; js = j0; jd = dstjoff; @@ -318,7 +318,7 @@ namespace CarpetLib { goto l811; // begin i loop - l810: + l810: i = 0; is = i0; id = dstioff; @@ -326,7 +326,7 @@ namespace CarpetLib { goto l8101; // kernel - l8100: + l8100: dst[DSTIND3(id,jd,kd)] = interp1<T> (& src[SRCIND3(is,js,ks-4)], srcdk); i = i+1; id = id+1; @@ -334,7 +334,7 @@ namespace CarpetLib { goto l910; // kernel - l8101: + l8101: dst[DSTIND3(id,jd,kd)] = interp2<T> (& src[SRCIND3(is-4,js,ks-4)], srcdi, srcdj); i = i+1; @@ -344,14 +344,14 @@ namespace CarpetLib { goto l910; // end i loop - l910: + l910: j = j+1; jd = jd+1; if (j < regjext) goto l811; goto l91; // begin i loop - l811: + l811: i = 0; is = i0; id = dstioff; @@ -359,7 +359,7 @@ namespace CarpetLib { goto l8111; // kernel - l8110: + l8110: dst[DSTIND3(id,jd,kd)] = interp2<T> (& src[SRCIND3(is,js-4,ks-4)], srcdj, srcdk); i = i+1; @@ -368,7 +368,7 @@ namespace CarpetLib { goto l911; // kernel - l8111: + l8111: { dst[DSTIND3(id,jd,kd)] = interp3<T> (& src[SRCIND3(is-4,js-4,ks-4)], srcdi, srcdj, srcdk); @@ -380,7 +380,7 @@ namespace CarpetLib { goto l911; // end i loop - l911: + l911: j = j+1; jd = jd+1; js = js+1; @@ -388,7 +388,7 @@ namespace CarpetLib { goto l91; // end j loop - l91: + l91: k = k+1; kd = kd+1; ks = ks+1; @@ -396,7 +396,7 @@ namespace CarpetLib { goto l9; // end k loop - l9:; + l9:; } diff --git a/Carpet/CarpetLib/src/prolongate_4d_o1_rf2.cc b/Carpet/CarpetLib/src/prolongate_4d_o1_rf2.cc new file mode 100644 index 000000000..4c8022916 --- /dev/null +++ b/Carpet/CarpetLib/src/prolongate_4d_o1_rf2.cc @@ -0,0 +1,602 @@ +#include <algorithm> +#include <cassert> +#include <cmath> +#include <cstdlib> + +#include <cctk.h> +#include <cctk_Parameters.h> + +#include "operator_prototypes_4d.hh" +#include "typeprops.hh" + +using namespace std; + + + +namespace CarpetLib { + + + +#define SRCIND4(i,j,k,l) \ + index4 (i, j, k, l, \ + srciext, srcjext, srckext, srclext) +#define DSTIND4(i,j,k,l) \ + index4 (i, j, k, l, \ + dstiext, dstjext, dstkext, dstlext) + + + + template <typename T> + void + prolongate_4d_o1_rf2 (T const * restrict const src, + ivect4 const & restrict srcext, + T * restrict const dst, + ivect4 const & restrict dstext, + ibbox4 const & restrict srcbbox, + ibbox4 const & restrict dstbbox, + ibbox4 const & restrict regbbox) + { + typedef typename typeprops<T>::real RT; + + + + if (any (srcbbox.stride() <= regbbox.stride() or + dstbbox.stride() != regbbox.stride())) + { + CCTK_WARN (0, "Internal error: strides disagree"); + } + + if (any (srcbbox.stride() != reffact2 * dstbbox.stride())) { + CCTK_WARN (0, "Internal error: source strides are not twice the destination strides"); + } + + // This could be handled, but is likely to point to an error + // elsewhere + if (regbbox.empty()) { + CCTK_WARN (0, "Internal error: region extent is empty"); + } + + + + ivect4 const regext = regbbox.shape() / regbbox.stride(); + assert (all ((regbbox.lower() - srcbbox.lower()) % regbbox.stride() == 0)); + ivect4 const srcoff = (regbbox.lower() - srcbbox.lower()) / regbbox.stride(); + assert (all ((regbbox.lower() - dstbbox.lower()) % regbbox.stride() == 0)); + ivect4 const dstoff = (regbbox.lower() - dstbbox.lower()) / regbbox.stride(); + + + + bvect4 const needoffsetlo = srcoff % reffact2 != 0 or regext > 1; + bvect4 const needoffsethi = (srcoff + regext - 1) % reffact2 != 0 or regext > 1; + ivect4 const offsetlo = either (needoffsetlo, 1, 0); + ivect4 const offsethi = either (needoffsethi, 1, 0); + + + + if (not regbbox.expand(offsetlo, offsethi).is_contained_in(srcbbox) or + not regbbox .is_contained_in(dstbbox)) + { + CCTK_WARN (0, "Internal error: region extent is not contained in array extent"); + } + + if (any (srcext != srcbbox.shape() / srcbbox.stride() or + dstext != dstbbox.shape() / dstbbox.stride())) + { + CCTK_WARN (0, "Internal error: array sizes don't agree with bounding boxes"); + } + + + + size_t const srciext = srcext[0]; + size_t const srcjext = srcext[1]; + size_t const srckext = srcext[2]; + size_t const srclext = srcext[3]; + + size_t const dstiext = dstext[0]; + size_t const dstjext = dstext[1]; + size_t const dstkext = dstext[2]; + size_t const dstlext = dstext[3]; + + size_t const regiext = regext[0]; + size_t const regjext = regext[1]; + size_t const regkext = regext[2]; + size_t const reglext = regext[3]; + + size_t const srcioff = srcoff[0]; + size_t const srcjoff = srcoff[1]; + size_t const srckoff = srcoff[2]; + size_t const srcloff = srcoff[3]; + + size_t const dstioff = dstoff[0]; + size_t const dstjoff = dstoff[1]; + size_t const dstkoff = dstoff[2]; + size_t const dstloff = dstoff[3]; + + + + size_t const fi = srcioff % 2; + size_t const fj = srcjoff % 2; + size_t const fk = srckoff % 2; + size_t const fl = srcloff % 2; + + size_t const i0 = srcioff / 2; + size_t const j0 = srcjoff / 2; + size_t const k0 = srckoff / 2; + size_t const l0 = srcloff / 2; + + RT const one = 1; + + RT const f1 = one/2; + RT const f2 = one/2; + + + + // Loop over fine region + // Label scheme: l 8 fl fk fj fi + + size_t is, js, ks, ls; + size_t id, jd, kd, ld; + size_t i, j, k, l; + + // begin l loop + l = 0; + ls = l0; + ld = dstloff; + if (fl == 0) goto l80; + goto l81; + + // begin k loop + l80: + k = 0; + ks = k0; + kd = dstkoff; + if (fk == 0) goto l800; + goto l801; + + // begin j loop + l800: + j = 0; + js = j0; + jd = dstjoff; + if (fj == 0) goto l8000; + goto l8001; + + // begin i loop + l8000: + i = 0; + is = i0; + id = dstioff; + if (fi == 0) goto l80000; + goto l80001; + + // kernel + l80000: + dst[DSTIND4(id,jd,kd,ld)] = + + src[SRCIND4(is,js,ks,ls)]; + i = i+1; + id = id+1; + if (i < regiext) goto l80001; + goto l9000; + + // kernel + l80001: + dst[DSTIND4(id,jd,kd,ld)] = + + f1 * src[SRCIND4(is ,js,ks,ls)] + + f2 * src[SRCIND4(is+1,js,ks,ls)]; + i = i+1; + id = id+1; + is = is+1; + if (i < regiext) goto l80000; + goto l9000; + + // end i loop + l9000: + j = j+1; + jd = jd+1; + if (j < regjext) goto l8001; + goto l900; + + // begin i loop + l8001: + i = 0; + is = i0; + id = dstioff; + if (fi == 0) goto l80010; + goto l80011; + + // kernel + l80010: + dst[DSTIND4(id,jd,kd,ld)] = + + f1 * src[SRCIND4(is,js ,ks,ls)] + + f2 * src[SRCIND4(is,js+1,ks,ls)]; + i = i+1; + id = id+1; + if (i < regiext) goto l80011; + goto l9001; + + // kernel + l80011: + dst[DSTIND4(id,jd,kd,ld)] = + + f1*f1 * src[SRCIND4(is ,js ,ks,ls)] + + f2*f1 * src[SRCIND4(is+1,js ,ks,ls)] + + f1*f2 * src[SRCIND4(is ,js+1,ks,ls)] + + f2*f2 * src[SRCIND4(is+1,js+1,ks,ls)]; + i = i+1; + id = id+1; + is = is+1; + if (i < regiext) goto l80010; + goto l9001; + + // end i loop + l9001: + j = j+1; + jd = jd+1; + js = js+1; + if (j < regjext) goto l8000; + goto l900; + + // end j loop + l900: + k = k+1; + kd = kd+1; + if (k < regkext) goto l800; + goto l90; + + // begin j loop + l801: + j = 0; + js = j0; + jd = dstjoff; + if (fj == 0) goto l8010; + goto l8011; + + // begin i loop + l8010: + i = 0; + is = i0; + id = dstioff; + if (fi == 0) goto l80100; + goto l80101; + + // kernel + l80100: + dst[DSTIND4(id,jd,kd,ld)] = + + f1 * src[SRCIND4(is,js,ks ,ls)] + + f2 * src[SRCIND4(is,js,ks+1,ls)]; + i = i+1; + id = id+1; + if (i < regiext) goto l80101; + goto l9010; + + // kernel + l80101: + dst[DSTIND4(id,jd,kd,ld)] = + + f1*f1 * src[SRCIND4(is ,js,ks ,ls)] + + f2*f1 * src[SRCIND4(is+1,js,ks ,ls)] + + f1*f2 * src[SRCIND4(is ,js,ks+1,ls)] + + f2*f2 * src[SRCIND4(is+1,js,ks+1,ls)]; + i = i+1; + id = id+1; + is = is+1; + if (i < regiext) goto l80100; + goto l9010; + + // end i loop + l9010: + j = j+1; + jd = jd+1; + if (j < regjext) goto l8011; + goto l901; + + // begin i loop + l8011: + i = 0; + is = i0; + id = dstioff; + if (fi == 0) goto l80110; + goto l80111; + + // kernel + l80110: + dst[DSTIND4(id,jd,kd,ld)] = + + f1*f1 * src[SRCIND4(is,js ,ks ,ls)] + + f2*f1 * src[SRCIND4(is,js+1,ks ,ls)] + + f1*f2 * src[SRCIND4(is,js ,ks+1,ls)] + + f2*f2 * src[SRCIND4(is,js+1,ks+1,ls)]; + i = i+1; + id = id+1; + if (i < regiext) goto l80111; + goto l9011; + + // kernel + l80111: + dst[DSTIND4(id,jd,kd,ld)] = + + f1*f1*f1 * src[SRCIND4(is ,js ,ks ,ls)] + + f2*f1*f1 * src[SRCIND4(is+1,js ,ks ,ls)] + + f1*f2*f1 * src[SRCIND4(is ,js+1,ks ,ls)] + + f2*f2*f1 * src[SRCIND4(is+1,js+1,ks ,ls)] + + f1*f1*f2 * src[SRCIND4(is ,js ,ks+1,ls)] + + f2*f1*f2 * src[SRCIND4(is+1,js ,ks+1,ls)] + + f1*f2*f2 * src[SRCIND4(is ,js+1,ks+1,ls)] + + f2*f2*f2 * src[SRCIND4(is+1,js+1,ks+1,ls)]; + i = i+1; + id = id+1; + is = is+1; + if (i < regiext) goto l80110; + goto l9011; + + // end i loop + l9011: + j = j+1; + jd = jd+1; + js = js+1; + if (j < regjext) goto l8010; + goto l901; + + // end j loop + l901: + k = k+1; + kd = kd+1; + ks = ks+1; + if (k < regkext) goto l800; + goto l90; + + // end k loop + l90: + l = l+1; + ld = ld+1; + ls = ls+1; + if (l < reglext) goto l81; + goto l80; + + // begin k loop + l81: + k = 0; + ks = k0; + kd = dstkoff; + if (fk == 0) goto l810; + goto l811; + + // begin j loop + l810: + j = 0; + js = j0; + jd = dstjoff; + if (fj == 0) goto l8100; + goto l8101; + + // begin i loop + l8100: + i = 0; + is = i0; + id = dstioff; + if (fi == 0) goto l81000; + goto l81001; + + // kernel + l81000: + dst[DSTIND4(id,jd,kd,ld)] = + + f1 * src[SRCIND4(is,js,ks,ls )] + + f2 * src[SRCIND4(is,js,ks,ls+1)]; + i = i+1; + id = id+1; + if (i < regiext) goto l81001; + goto l9100; + + // kernel + l81001: + dst[DSTIND4(id,jd,kd,ld)] = + + f1*f1 * src[SRCIND4(is ,js,ks,ls )] + + f2*f1 * src[SRCIND4(is+1,js,ks,ls )] + + f1*f2 * src[SRCIND4(is ,js,ks,ls+1)] + + f2*f2 * src[SRCIND4(is+1,js,ks,ls+1)]; + i = i+1; + id = id+1; + is = is+1; + if (i < regiext) goto l81000; + goto l9100; + + // end i loop + l9100: + j = j+1; + jd = jd+1; + if (j < regjext) goto l8101; + goto l910; + + // begin i loop + l8101: + i = 0; + is = i0; + id = dstioff; + if (fi == 0) goto l81010; + goto l81011; + + // kernel + l81010: + dst[DSTIND4(id,jd,kd,ld)] = + + f1*f1 * src[SRCIND4(is,js ,ks,ls )] + + f2*f1 * src[SRCIND4(is,js+1,ks,ls )] + + f1*f2 * src[SRCIND4(is,js ,ks,ls+1)] + + f2*f2 * src[SRCIND4(is,js+1,ks,ls+1)]; + i = i+1; + id = id+1; + if (i < regiext) goto l81011; + goto l9101; + + // kernel + l81011: + dst[DSTIND4(id,jd,kd,ld)] = + + f1*f1*f1 * src[SRCIND4(is ,js ,ks,ls )] + + f2*f1*f1 * src[SRCIND4(is+1,js ,ks,ls )] + + f1*f2*f1 * src[SRCIND4(is ,js+1,ks,ls )] + + f2*f2*f1 * src[SRCIND4(is+1,js+1,ks,ls )] + + f1*f1*f2 * src[SRCIND4(is ,js ,ks,ls+1)] + + f2*f1*f2 * src[SRCIND4(is+1,js ,ks,ls+1)] + + f1*f2*f2 * src[SRCIND4(is ,js+1,ks,ls+1)] + + f2*f2*f2 * src[SRCIND4(is+1,js+1,ks,ls+1)]; + i = i+1; + id = id+1; + is = is+1; + if (i < regiext) goto l81010; + goto l9101; + + // end i loop + l9101: + j = j+1; + jd = jd+1; + js = js+1; + if (j < regjext) goto l8100; + goto l910; + + // end j loop + l910: + k = k+1; + kd = kd+1; + if (k < regkext) goto l810; + goto l91; + + // begin j loop + l811: + j = 0; + js = j0; + jd = dstjoff; + if (fj == 0) goto l8110; + goto l8111; + + // begin i loop + l8110: + i = 0; + is = i0; + id = dstioff; + if (fi == 0) goto l81100; + goto l81101; + + // kernel + l81100: + dst[DSTIND4(id,jd,kd,ld)] = + + f1*f1 * src[SRCIND4(is,js,ks ,ls )] + + f2*f1 * src[SRCIND4(is,js,ks+1,ls )] + + f1*f2 * src[SRCIND4(is,js,ks ,ls+1)] + + f2*f2 * src[SRCIND4(is,js,ks+1,ls+1)]; + i = i+1; + id = id+1; + if (i < regiext) goto l81101; + goto l9110; + + // kernel + l81101: + dst[DSTIND4(id,jd,kd,ld)] = + + f1*f1*f1 * src[SRCIND4(is ,js,ks ,ls )] + + f2*f1*f1 * src[SRCIND4(is+1,js,ks ,ls )] + + f1*f2*f1 * src[SRCIND4(is ,js,ks+1,ls )] + + f2*f2*f1 * src[SRCIND4(is+1,js,ks+1,ls )] + + f1*f1*f2 * src[SRCIND4(is ,js,ks ,ls+1)] + + f2*f1*f2 * src[SRCIND4(is+1,js,ks ,ls+1)] + + f1*f2*f2 * src[SRCIND4(is ,js,ks+1,ls+1)] + + f2*f2*f2 * src[SRCIND4(is+1,js,ks+1,ls+1)]; + i = i+1; + id = id+1; + is = is+1; + if (i < regiext) goto l81100; + goto l9110; + + // end i loop + l9110: + j = j+1; + jd = jd+1; + if (j < regjext) goto l8111; + goto l911; + + // begin i loop + l8111: + i = 0; + is = i0; + id = dstioff; + if (fi == 0) goto l81110; + goto l81111; + + // kernel + l81110: + dst[DSTIND4(id,jd,kd,ld)] = + + f1*f1*f1*f1 * src[SRCIND4(is,js ,ks ,ls )] + + f2*f1*f1*f1 * src[SRCIND4(is,js+1,ks ,ls )] + + f1*f2*f2*f1 * src[SRCIND4(is,js ,ks+1,ls )] + + f2*f2*f2*f1 * src[SRCIND4(is,js+1,ks+1,ls )] + + f1*f1*f1*f2 * src[SRCIND4(is,js ,ks ,ls+1)] + + f2*f1*f1*f2 * src[SRCIND4(is,js+1,ks ,ls+1)] + + f1*f2*f2*f2 * src[SRCIND4(is,js ,ks+1,ls+1)] + + f2*f2*f2*f2 * src[SRCIND4(is,js+1,ks+1,ls+1)]; + i = i+1; + id = id+1; + if (i < regiext) goto l81111; + goto l9111; + + // kernel + l81111: + dst[DSTIND4(id,jd,kd,ld)] = + + f1*f1*f1*f1 * src[SRCIND4(is ,js ,ks ,ls )] + + f2*f1*f1*f1 * src[SRCIND4(is+1,js ,ks ,ls )] + + f1*f2*f1*f1 * src[SRCIND4(is ,js+1,ks ,ls )] + + f2*f2*f1*f1 * src[SRCIND4(is+1,js+1,ks ,ls )] + + f1*f1*f2*f1 * src[SRCIND4(is ,js ,ks+1,ls )] + + f2*f1*f2*f1 * src[SRCIND4(is+1,js ,ks+1,ls )] + + f1*f2*f2*f1 * src[SRCIND4(is ,js+1,ks+1,ls )] + + f2*f2*f2*f1 * src[SRCIND4(is+1,js+1,ks+1,ls )] + + f1*f1*f1*f2 * src[SRCIND4(is ,js ,ks ,ls+1)] + + f2*f1*f1*f2 * src[SRCIND4(is+1,js ,ks ,ls+1)] + + f1*f2*f1*f2 * src[SRCIND4(is ,js+1,ks ,ls+1)] + + f2*f2*f1*f2 * src[SRCIND4(is+1,js+1,ks ,ls+1)] + + f1*f1*f2*f2 * src[SRCIND4(is ,js ,ks+1,ls+1)] + + f2*f1*f2*f2 * src[SRCIND4(is+1,js ,ks+1,ls+1)] + + f1*f2*f2*f2 * src[SRCIND4(is ,js+1,ks+1,ls+1)] + + f2*f2*f2*f2 * src[SRCIND4(is+1,js+1,ks+1,ls+1)]; + i = i+1; + id = id+1; + is = is+1; + if (i < regiext) goto l81110; + goto l9111; + + // end i loop + l9111: + j = j+1; + jd = jd+1; + js = js+1; + if (j < regjext) goto l8110; + goto l911; + + // end j loop + l911: + k = k+1; + kd = kd+1; + ks = ks+1; + if (k < regkext) goto l810; + goto l91; + + // end k loop + l91: + l = l+1; + ld = ld+1; + ls = ls+1; + if (l < reglext) goto l81; + goto l81; + + } + + + +#define INSTANTIATE(T) \ + template \ + void \ + prolongate_4d_o1_rf2 (T const * restrict const src, \ + ivect4 const & restrict srcext, \ + T * restrict const dst, \ + ivect4 const & restrict dstext, \ + ibbox4 const & restrict srcbbox, \ + ibbox4 const & restrict dstbbox, \ + ibbox4 const & restrict regbbox); +#include "instantiate" +#undef INSTANTIATE + + + +} // CarpetLib diff --git a/Carpet/CarpetLib/src/region.cc b/Carpet/CarpetLib/src/region.cc index 0230d373d..860d24c6b 100644 --- a/Carpet/CarpetLib/src/region.cc +++ b/Carpet/CarpetLib/src/region.cc @@ -251,6 +251,67 @@ operator<< (ostream & os, region_t const & reg) +// Create an MPI datatype for a pseudoretion +MPI_Datatype +mpi_datatype (pseudoregion_t const &) +{ + static bool initialised = false; + static MPI_Datatype newtype; + if (not initialised) { + static pseudoregion_t s; +#define ENTRY(type, name) \ + { \ + sizeof s.name / sizeof(type), /* count elements */ \ + (char*)&s.name - (char*)&s, /* offsetof doesn't work (why?) */ \ + dist::mpi_datatype<type>(), /* find MPI datatype */ \ + STRINGIFY(name), /* field name */ \ + STRINGIFY(type), /* type name */ \ + } + dist::mpi_struct_descr_t const descr[] = { + ENTRY(int, extent), + ENTRY(int, component), + {1, sizeof s, MPI_UB, "MPI_UB", "MPI_UB"} + }; +#undef ENTRY + newtype = + dist::create_mpi_datatype (sizeof descr / sizeof descr[0], descr, + "pseudoregion_t", sizeof s); + initialised = true; + } + return newtype; +} + +MPI_Datatype +mpi_datatype (sendrecv_pseudoregion_t const &) +{ + static bool initialised = false; + static MPI_Datatype newtype; + if (not initialised) { + static sendrecv_pseudoregion_t s; +#define ENTRY(type, name) \ + { \ + sizeof s.name / sizeof(type), /* count elements */ \ + (char*)&s.name - (char*)&s, /* offsetof doesn't work (why?) */ \ + dist::mpi_datatype<type>(), /* find MPI datatype */ \ + STRINGIFY(name), /* field name */ \ + STRINGIFY(type), /* type name */ \ + } + dist::mpi_struct_descr_t const descr[] = { + ENTRY(pseudoregion_t, send), + ENTRY(pseudoregion_t, recv), + {1, sizeof s, MPI_UB, "MPI_UB", "MPI_UB"} + }; +#undef ENTRY + newtype = + dist::create_mpi_datatype (sizeof descr / sizeof descr[0], descr, + "sendrecv_pseudoregion_t", sizeof s); + initialised = true; + } + return newtype; +} + + + // Compare two pseudoregions for equality. bool operator== (pseudoregion_t const & a, pseudoregion_t const & b) @@ -262,9 +323,45 @@ operator== (pseudoregion_t const & a, pseudoregion_t const & b) +istream & operator>> (istream & is, pseudoregion_t & p) +{ + try { + skipws (is); + consume (is, "(ext:"); + is >> p.extent; + skipws (is); + consume (is, ",c:"); + is >> p.component; + skipws (is); + consume (is, ")"); + } catch (input_error & err) { + cout << "Input error while reading a pseudoregion_t" << endl; + throw err; + } + return is; +} + +istream & operator>> (istream & is, sendrecv_pseudoregion_t & srp) +{ + try { + skipws (is); + consume (is, "(send:"); + is >> srp.send; + consume (is, ",recv:"); + is >> srp.recv; + consume (is, ")"); + } catch (input_error & err) { + cout << "Input error while reading a sendrecv_pseudoregion_t" << endl; + throw err; + } + return is; +} + + + ostream & operator<< (ostream & os, pseudoregion_t const & p) { - return os << p.extent << "/c:" << p.component; + return os << "(ext:" << p.extent << ",c:" << p.component << ")"; } ostream & operator<< (ostream & os, sendrecv_pseudoregion_t const & srp) diff --git a/Carpet/CarpetLib/src/region.hh b/Carpet/CarpetLib/src/region.hh index 66037bdc7..ed14b024d 100644 --- a/Carpet/CarpetLib/src/region.hh +++ b/Carpet/CarpetLib/src/region.hh @@ -5,6 +5,7 @@ #include <vector> #include "defs.hh" +#include "dist.hh" #include "bbox.hh" #include "fulltree.hh" #include "vect.hh" @@ -24,12 +25,16 @@ struct region_t { region_t & operator= (region_t const & a); ~region_t (); - bool invariant () const; + bool invariant () const CCTK_ATTRIBUTE_PURE; }; -bool operator== (region_t const & a, region_t const & b); +bool operator== (region_t const & a, region_t const & b) + CCTK_ATTRIBUTE_PURE; +inline +bool operator!= (region_t const & a, region_t const & b) + CCTK_ATTRIBUTE_PURE; inline bool operator!= (region_t const & a, region_t const & b) { @@ -44,7 +49,7 @@ combine_regions (vector<region_t> const & oldregs, -size_t memoryof (region_t const & reg); +size_t memoryof (region_t const & reg) CCTK_ATTRIBUTE_PURE; istream & operator>> (istream & is, region_t & reg); ostream & operator<< (ostream & os, region_t const & reg); @@ -61,19 +66,37 @@ struct pseudoregion_t { pseudoregion_t () { } + pseudoregion_t (pseudoregion_t const & p) + : extent (p.extent), component (p.component) + { + } pseudoregion_t (ibbox const & extent_, int const component_) : extent (extent_), component (component_) { } }; -bool operator== (pseudoregion_t const & a, pseudoregion_t const & b); +MPI_Datatype mpi_datatype (pseudoregion_t const &) + CCTK_ATTRIBUTE_CONST; +namespace dist { + template<> inline MPI_Datatype mpi_datatype<pseudoregion_t> () + CCTK_ATTRIBUTE_CONST; + template<> inline MPI_Datatype mpi_datatype<pseudoregion_t> () + { pseudoregion_t dummy; return mpi_datatype(dummy); } +} + +bool operator== (pseudoregion_t const & a, pseudoregion_t const & b) + CCTK_ATTRIBUTE_PURE; +inline +bool operator!= (pseudoregion_t const & a, pseudoregion_t const & b) + CCTK_ATTRIBUTE_PURE; inline bool operator!= (pseudoregion_t const & a, pseudoregion_t const & b) { return not (a == b); } +inline size_t memoryof (pseudoregion_t const & p) CCTK_ATTRIBUTE_PURE; inline size_t memoryof (pseudoregion_t const & p) { return @@ -81,6 +104,7 @@ inline size_t memoryof (pseudoregion_t const & p) memoryof (p.component); } +istream & operator>> (istream & is, pseudoregion_t & p); ostream & operator<< (ostream & os, pseudoregion_t const & p); @@ -90,19 +114,35 @@ struct sendrecv_pseudoregion_t { sendrecv_pseudoregion_t () { } + sendrecv_pseudoregion_t (sendrecv_pseudoregion_t const & srp) + : send (srp.send), recv (srp.recv) + { + } sendrecv_pseudoregion_t (ibbox const & send_extent, int const send_component, - ibbox const & recv_extent, int const recv_component) + ibbox const & recv_extent, int const recv_component) : send (pseudoregion_t (send_extent, send_component)), recv (pseudoregion_t (recv_extent, recv_component)) { } }; +MPI_Datatype mpi_datatype (sendrecv_pseudoregion_t const &) + CCTK_ATTRIBUTE_CONST; +namespace dist { + template<> inline MPI_Datatype mpi_datatype<sendrecv_pseudoregion_t> () + CCTK_ATTRIBUTE_CONST; + template<> inline MPI_Datatype mpi_datatype<sendrecv_pseudoregion_t> () + { sendrecv_pseudoregion_t dummy; return mpi_datatype(dummy); } +} + +inline size_t memoryof (sendrecv_pseudoregion_t const & srp) + CCTK_ATTRIBUTE_PURE; inline size_t memoryof (sendrecv_pseudoregion_t const & srp) { return memoryof (srp.send) + memoryof (srp.recv); } +istream & operator>> (istream & os, sendrecv_pseudoregion_t & srp); ostream & operator<< (ostream & os, sendrecv_pseudoregion_t const & srp); diff --git a/Carpet/CarpetLib/src/restrict_3d_cc_rf2.cc b/Carpet/CarpetLib/src/restrict_3d_cc_rf2.cc index 7eebd36b0..c2f89ae4d 100644 --- a/Carpet/CarpetLib/src/restrict_3d_cc_rf2.cc +++ b/Carpet/CarpetLib/src/restrict_3d_cc_rf2.cc @@ -5,7 +5,7 @@ #include <cctk.h> #include <cctk_Parameters.h> -#include "operator_prototypes.hh" +#include "operator_prototypes_3d.hh" #include "typeprops.hh" using namespace std; diff --git a/Carpet/CarpetLib/src/restrict_3d_rf2.cc b/Carpet/CarpetLib/src/restrict_3d_rf2.cc index 26031f304..1e0cc6ec4 100644 --- a/Carpet/CarpetLib/src/restrict_3d_rf2.cc +++ b/Carpet/CarpetLib/src/restrict_3d_rf2.cc @@ -7,7 +7,7 @@ #include <cctk.h> #include <cctk_Parameters.h> -#include "operator_prototypes.hh" +#include "operator_prototypes_3d.hh" #include "typeprops.hh" using namespace std; diff --git a/Carpet/CarpetLib/src/restrict_4d_rf2.cc b/Carpet/CarpetLib/src/restrict_4d_rf2.cc new file mode 100644 index 000000000..77bf2d28b --- /dev/null +++ b/Carpet/CarpetLib/src/restrict_4d_rf2.cc @@ -0,0 +1,141 @@ +#include <algorithm> +#include <cassert> +#include <cmath> +#include <cstdlib> +#include <iostream> + +#include <cctk.h> +#include <cctk_Parameters.h> + +#include "operator_prototypes_4d.hh" +#include "typeprops.hh" + +using namespace std; + + + +namespace CarpetLib { + + + +#define SRCIND4(i,j,k,l) \ + index4 (srcioff + (i), srcjoff + (j), srckoff + (k), srcloff + (l), \ + srciext, srcjext, srckext, srclext) +#define DSTIND4(i,j,k,l) \ + index4 (dstioff + (i), dstjoff + (j), dstkoff + (k), dstloff + (l), \ + dstiext, dstjext, dstkext, dstlext) + + + + template <typename T> + void + restrict_4d_rf2 (T const * restrict const src, + ivect4 const & restrict srcext, + T * restrict const dst, + ivect4 const & restrict dstext, + ibbox4 const & restrict srcbbox, + ibbox4 const & restrict dstbbox, + ibbox4 const & restrict regbbox) + { + if (any (srcbbox.stride() >= regbbox.stride() or + dstbbox.stride() != regbbox.stride())) + { + CCTK_WARN (0, "Internal error: strides disagree"); + } + + if (any (reffact2 * srcbbox.stride() != dstbbox.stride())) { + CCTK_WARN (0, "Internal error: destination strides are not twice the source strides"); + } + + // This could be handled, but is likely to point to an error + // elsewhere + if (regbbox.empty()) { + CCTK_WARN (0, "Internal error: region extent is empty"); + } + + if (not regbbox.is_contained_in(srcbbox) or + not regbbox.is_contained_in(dstbbox)) + { + cerr << "srcbbox: " << srcbbox << endl + << "dstbbox: " << dstbbox << endl + << "regbbox: " << regbbox << endl; + CCTK_WARN (0, "Internal error: region extent is not contained in array extent"); + } + + if (any (srcext != srcbbox.shape() / srcbbox.stride() or + dstext != dstbbox.shape() / dstbbox.stride())) + { + CCTK_WARN (0, "Internal error: array sizes don't agree with bounding boxes"); + } + + + + ivect4 const regext = regbbox.shape() / regbbox.stride(); + assert (all ((regbbox.lower() - srcbbox.lower()) % srcbbox.stride() == 0)); + ivect4 const srcoff = (regbbox.lower() - srcbbox.lower()) / srcbbox.stride(); + assert (all ((regbbox.lower() - dstbbox.lower()) % dstbbox.stride() == 0)); + ivect4 const dstoff = (regbbox.lower() - dstbbox.lower()) / dstbbox.stride(); + + + + ptrdiff_t const srciext = srcext[0]; + ptrdiff_t const srcjext = srcext[1]; + ptrdiff_t const srckext = srcext[2]; + ptrdiff_t const srclext = srcext[3]; + + ptrdiff_t const dstiext = dstext[0]; + ptrdiff_t const dstjext = dstext[1]; + ptrdiff_t const dstkext = dstext[2]; + ptrdiff_t const dstlext = dstext[3]; + + ptrdiff_t const regiext = regext[0]; + ptrdiff_t const regjext = regext[1]; + ptrdiff_t const regkext = regext[2]; + ptrdiff_t const reglext = regext[3]; + + ptrdiff_t const srcioff = srcoff[0]; + ptrdiff_t const srcjoff = srcoff[1]; + ptrdiff_t const srckoff = srcoff[2]; + ptrdiff_t const srcloff = srcoff[3]; + + ptrdiff_t const dstioff = dstoff[0]; + ptrdiff_t const dstjoff = dstoff[1]; + ptrdiff_t const dstkoff = dstoff[2]; + ptrdiff_t const dstloff = dstoff[3]; + + + + // Loop over coarse region +#pragma omp parallel for + for (int l=0; l<reglext; ++l) { + for (int k=0; k<regkext; ++k) { + for (int j=0; j<regjext; ++j) { + for (int i=0; i<regiext; ++i) { + + dst [DSTIND4(i, j, k, l)] = src [SRCIND4(2*i, 2*j, 2*k, 2*l)]; + + } + } + } + } + + } + + + +#define INSTANTIATE(T) \ + template \ + void \ + restrict_4d_rf2 (T const * restrict const src, \ + ivect4 const & restrict srcext, \ + T * restrict const dst, \ + ivect4 const & restrict dstext, \ + ibbox4 const & restrict srcbbox, \ + ibbox4 const & restrict dstbbox, \ + ibbox4 const & restrict regbbox); +#include "instantiate" +#undef INSTANTIATE + + + +} // namespace CarpetLib diff --git a/Carpet/CarpetLib/src/startup_time.cc b/Carpet/CarpetLib/src/startup_time.cc new file mode 100644 index 000000000..f361345fa --- /dev/null +++ b/Carpet/CarpetLib/src/startup_time.cc @@ -0,0 +1,82 @@ +#include <cstdio> +#include <cstdlib> +#include <string> + +#include <cctk.h> + +// IRIX wants this before <time.h> +#if HAVE_SYS_TYPES_H +# include <sys/types.h> +#endif + +#if TIME_WITH_SYS_TIME +# include <sys/time.h> +# include <time.h> +#else +# if HAVE_SYS_TIME_H +# include <sys/time.h> +# elif HAVE_TIME_H +# include <time.h> +# endif +#endif + +#if HAVE_UNISTD_H +# include <unistd.h> +#endif + +#include "startup_time.hh" + + + +namespace CarpetLib { + + using namespace std; + + + + // Return the current wall time + static + double + get_walltime () + { +#ifdef HAVE_TIME_GETTIMEOFDAY + // get the current time + struct timeval tv; + gettimeofday (& tv, 0); + return tv.tv_sec + tv.tv_usec / 1.0e6; +#else + return 0.0; +#endif + } + + + + void + output_startup_time () + { + char * const cactus_starttime = getenv ("CACTUS_STARTTIME"); + if (not cactus_starttime) { + CCTK_VWarn (CCTK_WARN_PICKY, + __LINE__, __FILE__, CCTK_THORNSTRING, + "Could not determine Cactus startup time (environment variable CACTUS_STARTTIME is not set; it should be set to the output of \"date +%%s\")"); + return; + } + + double starttime; + int const iret = sscanf (cactus_starttime, "%lf", &starttime); + if (iret != 1) { + CCTK_VWarn (CCTK_WARN_COMPLAIN, + __LINE__, __FILE__, CCTK_THORNSTRING, + "Could not determine Cactus startup time (environment variable CACTUS_STARTTIME has illegal value \"%s\"; it should instead be set to the output of \"date +%%s\", which is a single number)", + cactus_starttime); + return; + } + + double const currenttime = get_walltime (); + double const startuptime = currenttime - starttime; + + CCTK_VInfo (CCTK_THORNSTRING, + "Process startup time was %.3g seconds", startuptime); + } + +} // namespace CarpetLib diff --git a/Carpet/CarpetLib/src/startup_time.hh b/Carpet/CarpetLib/src/startup_time.hh new file mode 100644 index 000000000..f92b3df4b --- /dev/null +++ b/Carpet/CarpetLib/src/startup_time.hh @@ -0,0 +1,6 @@ +namespace CarpetLib { + + void + output_startup_time (); + +} // namespace CarpetLib diff --git a/Carpet/CarpetLib/src/th.cc b/Carpet/CarpetLib/src/th.cc index a10dcb289..dd441e455 100644 --- a/Carpet/CarpetLib/src/th.cc +++ b/Carpet/CarpetLib/src/th.cc @@ -14,6 +14,10 @@ using namespace std; +list<th*> th::allth; + + + // Constructors th::th (gh& h_, const vector<int> & reffacts_, const CCTK_REAL basedelta) : h(h_), reffacts(reffacts_), delta(basedelta) @@ -24,13 +28,15 @@ th::th (gh& h_, const vector<int> & reffacts_, const CCTK_REAL basedelta) assert (reffacts.AT(n) >= reffacts.AT(n-1)); assert (reffacts.AT(n) % reffacts.AT(n-1) == 0); } - h.add(this); + allthi = allth.insert(allth.end(), this); + gh_handle = h.add(this); } // Destructors th::~th () { - h.remove(this); + h.erase(gh_handle); + allth.erase(allthi); } // Modifiers @@ -60,6 +66,10 @@ void th::regrid () } } +void th::regrid_free () +{ +} + // Memory usage @@ -75,6 +85,19 @@ memory () memoryof (deltas); } +size_t +th:: +allmemory () +{ + size_t mem = memoryof(allth); + for (list<th*>::const_iterator + thi = allth.begin(); thi != allth.end(); ++ thi) + { + mem += memoryof(**thi); + } + return mem; +} + // Output diff --git a/Carpet/CarpetLib/src/th.hh b/Carpet/CarpetLib/src/th.hh index 34e9af999..f1a7b72b7 100644 --- a/Carpet/CarpetLib/src/th.hh +++ b/Carpet/CarpetLib/src/th.hh @@ -25,10 +25,14 @@ ostream& operator<< (ostream& os, const th& t); // The time hierarchy (information about the current time) class th { + static list<th*> allth; + list<th*>::iterator allthi; + public: // should be readonly // Fields gh& h; // hierarchy + gh::th_handle gh_handle; private: @@ -48,9 +52,10 @@ public: // Modifiers void regrid (); + void regrid_free (); // Time management - CCTK_REAL get_time (const int rl, const int ml) const + CCTK_REAL get_time (const int rl, const int ml) const CCTK_ATTRIBUTE_PURE { assert (rl>=0 and rl<h.reflevels()); assert (ml>=0 and ml<h.mglevels()); @@ -69,7 +74,7 @@ public: set_time(rl,ml, get_time(rl,ml) + get_delta(rl,ml)); } - CCTK_REAL get_delta (const int rl, const int ml) const + CCTK_REAL get_delta (const int rl, const int ml) const CCTK_ATTRIBUTE_PURE { assert (rl>=0 and rl<h.reflevels()); assert (ml>=0 and ml<h.mglevels()); @@ -83,7 +88,7 @@ public: deltas.AT(ml).AT(rl) = dt; } - CCTK_REAL time (const int tl, const int rl, const int ml) const + CCTK_REAL time (const int tl, const int rl, const int ml) const CCTK_ATTRIBUTE_PURE { assert (rl>=0 and rl<h.reflevels()); assert (ml>=0 and ml<h.mglevels()); @@ -91,12 +96,14 @@ public: } // Output - size_t memory () const; + size_t memory () const CCTK_ATTRIBUTE_PURE; + static size_t allmemory () CCTK_ATTRIBUTE_PURE; void output (ostream& os) const; }; +inline size_t memoryof (th const & t) CCTK_ATTRIBUTE_PURE; inline size_t memoryof (th const & t) { return t.memory (); diff --git a/Carpet/CarpetLib/src/timestat.cc b/Carpet/CarpetLib/src/timestat.cc index cbccfe51b..1115a6663 100644 --- a/Carpet/CarpetLib/src/timestat.cc +++ b/Carpet/CarpetLib/src/timestat.cc @@ -6,6 +6,7 @@ #include <fstream> #include <iomanip> #include <iostream> +#include <limits> #include <sstream> #include <sys/time.h> @@ -32,6 +33,7 @@ namespace CarpetLib { static bool have_cputick = false; + // CPU tick time in seconts static double cputick = 0.0; @@ -266,11 +268,11 @@ namespace CarpetLib { os << timername << ":" << " cnt: " << count - << " time: sum: " << wtime - << " avg: " << avg - << " stddev: " << stddev - << " min: " << wmin - << " max: " << wmax + << " time: sum: " << cputick * wtime + << " avg: " << cputick * avg + << " stddev: " << cputick * stddev + << " min: " << cputick * wmin + << " max: " << cputick * wmax << " bytes: sum: " << bytes << " avg: " << bavg << " stddev: " << bstddev @@ -324,11 +326,11 @@ namespace CarpetLib { file << "Build ID: " << build_id << eol; } if (CCTK_IsFunctionAliased ("UniqueSimulationID")) { - char const * const job_id = + char const * const sim_id = static_cast <char const *> (UniqueSimulationID (cctkGH)); - file << "Simulation ID: " << job_id << eol; + file << "Simulation ID: " << sim_id << eol; } - file << "Running on " << dist::size() << " processors" << eol; + file << "Running with " << dist::size() << " processes and " << dist::total_num_threads() << " threads" << eol; } // if do_print_info file << "********************************************************************************" << eol @@ -341,4 +343,161 @@ namespace CarpetLib { } + + + struct t_cycleclock { + double total; + double total_squared; + double min_total; + double max_total; + double count; + ticks last; + + t_cycleclock () + { + reset(); + } + + ~t_cycleclock () + { + } + + void start () + { + last = getticks(); + } + + void stop () + { + ticks const current = getticks(); + double const difference = elapsed (current, last); + total += difference; + total_squared += pow (difference, 2); + min_total = min_total == 0.0 ? difference : min (min_total, difference); + max_total = max (min_total, difference); + count += 1; + } + + void reset () + { + total = 0.0; + total_squared = 0.0; + min_total = 0.0; // numeric_limits<double>::max(); + max_total = 0.0; + count = 0.0; + // last = 0.0; + } + + }; + + + + void * cycleclock_create (int const timernum) + { + return new t_cycleclock; + } + + void cycleclock_destroy (int const timernum, void * const data) + { + if (data) { + delete static_cast<t_cycleclock*> (data); + } + } + + void cycleclock_start (int const timernum, void * const data) + { + static_cast<t_cycleclock*> (data) -> start(); + } + + void cycleclock_stop (int const timernum, void * const data) + { + static_cast<t_cycleclock*> (data) -> stop(); + } + + void cycleclock_reset (int const timernum, void * const data) + { + static_cast<t_cycleclock*> (data) -> reset(); + } + + void cycleclock_get (int const timernum, void * const data_, + cTimerVal * const vals) + { + t_cycleclock const & data = * static_cast<t_cycleclock const *> (data_); + + // Total time + vals[0].type = val_double; + vals[0].heading = "cycle"; + vals[0].units = "secs"; + vals[0].val.d = data.total; + vals[0].seconds = cputick * vals[0].val.d; + vals[0].resolution = cputick; + + // Average + vals[1].type = val_double; + vals[1].heading = "cycle[avg]"; + vals[1].units = "secs"; + vals[1].val.d = data.count == 0.0 ? 0.0 : data.total / data.count; + vals[1].seconds = cputick * vals[1].val.d; + vals[1].resolution = cputick; + + // Standard deviation + vals[2].type = val_double; + vals[2].heading = "cycle[stddev]"; + vals[2].units = "secs"; + vals[2].val.d = (data.count == 0.0 + ? 0.0 + : sqrt (abs (data.total_squared * data.count - + pow (data.total, 2)) / data.count)); + vals[2].seconds = cputick * vals[2].val.d; + vals[2].resolution = cputick; + + // Minimum + vals[3].type = val_double; + vals[3].heading = "cycle[min]"; + vals[3].units = "secs"; + vals[3].val.d = data.min_total; + vals[3].seconds = cputick * vals[3].val.d; + vals[3].resolution = cputick; + + // Maximum + vals[4].type = val_double; + vals[4].heading = "cycle[max]"; + vals[4].units = "secs"; + vals[4].val.d = data.max_total; + vals[4].seconds = cputick * vals[4].val.d; + vals[4].resolution = cputick; + } + + void cycleclock_set (int const timernum, void * const data_, + cTimerVal * const vals) + { + t_cycleclock & data = * static_cast<t_cycleclock * restrict> (data_); + + data.reset(); // punt + data.total = vals[0].val.d; + } + + extern "C" { + int CarpetLib_registercycleclock (void); + } + + int CarpetLib_registercycleclock (void) + { + if (not have_cputick) calculate_cputick (); + + cClockFuncs functions; + functions.n_vals = 5; + functions.create = cycleclock_create; + functions.destroy = cycleclock_destroy; + functions.start = cycleclock_start; + functions.stop = cycleclock_stop; + functions.reset = cycleclock_reset; + functions.get = cycleclock_get; + functions.set = cycleclock_set; + + CCTK_ClockRegister("cycle", &functions); + + return 0; + } + } // namespace CarpetLib diff --git a/Carpet/CarpetLib/src/vect.cc b/Carpet/CarpetLib/src/vect.cc index 28eff14dc..e38ed745a 100644 --- a/Carpet/CarpetLib/src/vect.cc +++ b/Carpet/CarpetLib/src/vect.cc @@ -43,21 +43,42 @@ void vect<T,D>::output (ostream& os) const { +// Specialise some constructors for lower dimensions +// These functions are declared, but must not be used. + +template<> vect<int,0>::vect (const int& x, const int& y) { assert(0); } +template<> vect<int,1>::vect (const int& x, const int& y) { assert(0); } +template<> vect<int,3>::vect (const int& x, const int& y) { assert(0); } +template<> vect<int,4>::vect (const int& x, const int& y) { assert(0); } + +template<> vect<int,0>::vect (const int& x, const int& y, const int& z) { assert(0); } +template<> vect<int,1>::vect (const int& x, const int& y, const int& z) { assert(0); } +template<> vect<int,2>::vect (const int& x, const int& y, const int& z) { assert(0); } +template<> vect<int,4>::vect (const int& x, const int& y, const int& z) { assert(0); } + +template<> vect<int,0>::vect (const int& x, const int& y, const int& z, const int& t) { assert(0); } +template<> vect<int,1>::vect (const int& x, const int& y, const int& z, const int& t) { assert(0); } +template<> vect<int,2>::vect (const int& x, const int& y, const int& z, const int& t) { assert(0); } +template<> vect<int,3>::vect (const int& x, const int& y, const int& z, const int& t) { assert(0); } + + + // Note: We need all dimensions all the time. template class vect<int,0>; template class vect<int,1>; template class vect<int,2>; template class vect<int,3>; +template class vect<int,4>; -template void vect<CCTK_REAL,3>::input (istream& is); -template void vect<vect<bool,2>,3>::input (istream& is); -template void vect<vect<bool,3>,2>::input (istream& is); +template void vect<CCTK_REAL,dim>::input (istream& is); +template void vect<vect<bool,2>,dim>::input (istream& is); +template void vect<vect<bool,dim>,2>::input (istream& is); template void vect<bool,2>::output (ostream& os) const; -template void vect<bool,3>::output (ostream& os) const; +template void vect<bool,dim>::output (ostream& os) const; template void vect<CCTK_REAL,2>::output (ostream& os) const; -template void vect<CCTK_REAL,3>::output (ostream& os) const; -template void vect<vect<bool,2>,3>::output (ostream& os) const; -template void vect<vect<int,2>,3>::output (ostream& os) const; -template void vect<vect<bool,3>,2>::output (ostream& os) const; -template void vect<vect<int,3>,2>::output (ostream& os) const; +template void vect<CCTK_REAL,dim>::output (ostream& os) const; +template void vect<vect<bool,2>,dim>::output (ostream& os) const; +template void vect<vect<int,2>,dim>::output (ostream& os) const; +template void vect<vect<bool,dim>,2>::output (ostream& os) const; +template void vect<vect<int,dim>,2>::output (ostream& os) const; diff --git a/Carpet/CarpetLib/src/vect.hh b/Carpet/CarpetLib/src/vect.hh index 56898d970..03e62aba6 100644 --- a/Carpet/CarpetLib/src/vect.hh +++ b/Carpet/CarpetLib/src/vect.hh @@ -8,39 +8,17 @@ #include "cctk.h" +#include "defs.hh" #include "vect_helpers.hh" using namespace std; -#if 0 - -// A pure function returns a value that depends only on the function -// arguments and on global variables, and the function has no side -// effects. -#ifdef HAVE_CCTK_CXX_ATTRIBUTE_PURE -# define PURE __attribute__((pure)) -#else -# define PURE -#endif - -// A const function returns a value that depends only on the function -// arguments, and the function has no side effects. This is even more -// strict than pure functions. Const functions cannot dereference -// pointers or references (or this). -#ifdef HAVE_CCTK_CXX_ATTRIBUTE_CONST -# define CONST __attribute__((const)) +#ifdef CARPET_DEBUG +# define ASSERT_VECT(x) assert(x) #else -# define CONST -#endif - -#else - -// Don't take any risks -# define PURE -# define CONST - +# define ASSERT_VECT(x) #endif @@ -72,38 +50,44 @@ public: // Constructors /** Explicit empty constructor. */ - explicit vect () CONST { } + explicit vect () CCTK_MEMBER_ATTRIBUTE_CONST { } /** Copy constructor. */ - vect (const vect& a) PURE { + vect (const vect& a) CCTK_MEMBER_ATTRIBUTE_PURE + { for (int d=0; d<D; ++d) elt[d]=a.elt[d]; } /** Constructor from a single element. This constructor might be confusing, but it is very convenient. */ - vect (const T& x) PURE { + vect (const T& x) CCTK_MEMBER_ATTRIBUTE_PURE + { for (int d=0; d<D; ++d) elt[d]=x; } /** Constructor for 2-element vectors from 2 elements. */ - vect (const T& x, const T& y) PURE { - assert (D==2); + vect (const T& x, const T& y) CCTK_MEMBER_ATTRIBUTE_PURE + { + ASSERT_VECT (D==2); // Note: this statement may give "index out of range" warnings. // You can safely ignore these. elt[0]=x; elt[1]=y; } /** Constructor for 3-element vectors from 3 elements. */ - vect (const T& x, const T& y, const T& z) PURE { - assert (D==3); + vect (const T& x, const T& y, const T& z) CCTK_MEMBER_ATTRIBUTE_PURE + { + ASSERT_VECT (D==3); // Note: this statement may give "index out of range" warnings. // You can safely ignore these. elt[0]=x; elt[1]=y; elt[2]=z; } /** Constructor for 4-element vectors from 4 elements. */ - vect (const T& x, const T& y, const T& z, const T& t) PURE { - assert (D==4); + vect (const T& x, const T& y, const T& z, const T& t) + CCTK_MEMBER_ATTRIBUTE_PURE + { + ASSERT_VECT (D==4); // Note: this statement may give "index out of range" warnings. // You can safely ignore these. elt[0]=x; elt[1]=y; elt[2]=z; elt[3]=t; @@ -112,7 +96,8 @@ public: #if 0 // This creates confusion /** Constructor from a pointer, i.e., a C array. */ - explicit vect (const T* const x) PURE { + explicit vect (const T* const x) CCTK_MEMBER_ATTRIBUTE_PURE + { for (int d=0; d<D; ++d) elt[d]=x[d]; } #endif @@ -120,7 +105,8 @@ public: #if 0 // This leads to an ICE on AIX template<int E> - operator vect<vect<T,D>,E> () CONST { + operator vect<vect<T,D>,E> () CCTK_MEMBER_ATTRIBUTE_CONST + { vect<vect<T,D>,E> r; for (int e=0; e<E; ++e) r[e]=*this; return r; @@ -129,74 +115,88 @@ public: /** Constructor from a vector with a different type. */ template<typename S> - /*explicit*/ vect (const vect<S,D>& a) /*PURE*/ { + /*explicit*/ vect (const vect<S,D>& a) /*CCTK_MEMBER_ATTRIBUTE_PURE*/ + { for (int d=0; d<D; ++d) elt[d]=(T)a[d]; } /** Create a new 0-element vector with a specific type. */ - static vect make () CONST { - assert (D==0); + static vect make () CCTK_MEMBER_ATTRIBUTE_CONST + { + ASSERT_VECT (D==0); return vect(); } /** Create a new 1-element vector with a specific type. */ - static vect make (const T& x) PURE { - assert (D==1); + static vect make (const T& x) CCTK_MEMBER_ATTRIBUTE_PURE + { + ASSERT_VECT (D==1); return vect(x); } /** Create a new 2-element vector with a specific type. */ - static vect make (const T& x, const T& y) PURE { - assert (D==2); + static vect make (const T& x, const T& y) CCTK_MEMBER_ATTRIBUTE_PURE + { + ASSERT_VECT (D==2); return vect(x, y); } /** Create a new 3-element vector with a specific type. */ - static vect make (const T& x, const T& y, const T& z) PURE { - assert (D==3); + static vect make (const T& x, const T& y, const T& z) + CCTK_MEMBER_ATTRIBUTE_PURE + { + ASSERT_VECT (D==3); return vect(x, y, z); } /** Create a new 4-element vector with a specific type. */ - static vect make (const T& x, const T& y, const T& z, const T& t) PURE { - assert (D==4); + static vect make (const T& x, const T& y, const T& z, const T& t) + CCTK_MEMBER_ATTRIBUTE_PURE + { + ASSERT_VECT (D==4); return vect(x, y, z, t); } /** Treat a constant pointer as a reference to a constant vector. */ - static const vect& ref (const T* const x) PURE { + static const vect& ref (const T* const x) CCTK_MEMBER_ATTRIBUTE_PURE + { return *(const vect*)x; } /** Treat a pointer as a reference to a vector. */ - static vect& ref (T* const x) PURE { + static vect& ref (T* const x) CCTK_MEMBER_ATTRIBUTE_PURE + { return *(vect*)x; } /** Create a vector with one element set to 1 and all other elements set to zero. */ - static vect dir (const int d) CONST { + static vect dir (const int d) CCTK_MEMBER_ATTRIBUTE_CONST + { vect r=(T)0; r[d]=1; return r; } /** Create a vector with e[i] = i. */ - static vect seq () CONST { + static vect seq () CCTK_MEMBER_ATTRIBUTE_CONST + { vect r; for (int d=0; d<D; ++d) r[d]=d; return r; } /** Create a vector with e[i] = n + i. */ - static vect seq (const int n) CONST { + static vect seq (const int n) CCTK_MEMBER_ATTRIBUTE_CONST + { vect r; for (int d=0; d<D; ++d) r[d]=n+d; return r; } /** Create a vector with e[i] = n + s * i. */ - static vect seq (const int n, const int s) CONST { + static vect seq (const int n, const int s) CCTK_MEMBER_ATTRIBUTE_CONST + { vect r; for (int d=0; d<D; ++d) r[d]=n+s*d; return r; @@ -207,21 +207,24 @@ public: /** Return a non-writable element of a vector. */ // (Don't return a reference; *this might be a temporary) // Do return a reference, so that a vector can be accessed as array - const T& operator[] (const int d) const PURE { - assert(d>=0 && d<D); + const T& operator[] (const int d) const CCTK_MEMBER_ATTRIBUTE_PURE + { + ASSERT_VECT(d>=0 && d<D); return elt[d]; } /** Return a writable element of a vector as reference. */ - T& operator[] (const int d) PURE { - assert(d>=0 && d<D); + T& operator[] (const int d) CCTK_MEMBER_ATTRIBUTE_PURE + { + ASSERT_VECT(d>=0 && d<D); return elt[d]; } #if 0 // This creates confusion /** Return a pointer to a vector. */ - operator const T* () const PURE { + operator const T* () const CCTK_MEMBER_ATTRIBUTE_PURE + { return this; } #endif @@ -229,7 +232,9 @@ public: /** Return a combination of the vector elements e[a[i]]. The element combination is selected by another vector. */ template<typename TT, int DD> - vect<T,DD> operator[] (const vect<TT,DD>& a) const /*PURE*/ { + vect<T,DD> operator[] (const vect<TT,DD>& a) + const /*CCTK_MEMBER_ATTRIBUTE_PURE*/ + { vect<T,DD> r; // (*this)[] performs index checking for (int d=0; d<DD; ++d) r[d] = (*this)[a[d]]; @@ -249,14 +254,16 @@ public: // Non-modifying operators /** Return a new vector where one element has been replaced. */ - vect replace (const int d, const T& x) const PURE { - assert (d>=0 && d<D); + vect replace (const int d, const T& x) const CCTK_MEMBER_ATTRIBUTE_PURE + { + ASSERT_VECT (d>=0 && d<D); vect r; for (int dd=0; dd<D; ++dd) r[dd]=dd==d?x:elt[dd]; return r; } - vect reverse () const PURE { + vect reverse () const CCTK_MEMBER_ATTRIBUTE_PURE + { vect r; for (int d=0; d<D; ++d) r[d]=elt[D-1-d]; return r; @@ -272,7 +279,9 @@ public: elements set to either a[i] or b[i], depending on whether (*this)[i] is true or not. */ template<typename TT> - vect<TT,D> ifthen (const vect<TT,D>& a, const vect<TT,D>& b) const /*PURE*/ { + vect<TT,D> ifthen (const vect<TT,D>& a, const vect<TT,D>& b) + const /*CCTK_MEMBER_ATTRIBUTE_PURE*/ + { vect<TT,D> r; for (int d=0; d<D; ++d) r[d]=elt[d]?a[d]:b[d]; return r; @@ -286,15 +295,16 @@ public: vect &vec; int d; public: - iter (vect &a) PURE: vec(a), d(0) { } - iter& operator++ () { assert(d<D); ++d; return *this; } - bool operator bool () const PURE { return d==D; } - T& operator* () PURE { return vec[d]; } + iter (vect &a) CCTK_MEMBER_ATTRIBUTE_PURE: vec(a), d(0) { } + iter& operator++ () { ASSERT_VECT(d<D); ++d; return *this; } + bool operator bool () const CCTK_MEMBER_ATTRIBUTE_PURE { return d==D; } + T& operator* () CCTK_MEMBER_ATTRIBUTE_PURE { return vec[d]; } }; #endif // Memory usage - size_t memory () const { return D * memoryof (*elt); } + size_t memory () const CCTK_MEMBER_ATTRIBUTE_CONST + { return D * memoryof (*elt); } // Input/Output helpers void input (istream& is); @@ -310,7 +320,8 @@ public: true or not. */ template<typename S,typename T,int D> inline vect<T,D> either (const vect<S,D>& a, - const vect<T,D>& b, const vect<T,D>& c) PURE; + const vect<T,D>& b, const vect<T,D>& c) + CCTK_ATTRIBUTE_PURE; template<typename S,typename T,int D> inline vect<T,D> either (const vect<S,D>& a, const vect<T,D>& b, const vect<T,D>& c) @@ -322,7 +333,8 @@ inline vect<T,D> either (const vect<S,D>& a, template<typename S,typename T,int D> inline vect<T,D> either (const vect<S,D>& a, - const T& b, const T& c) PURE; + const T& b, const T& c) + CCTK_ATTRIBUTE_PURE; template<typename S,typename T,int D> inline vect<T,D> either (const vect<S,D>& a, const T& b, const T& c) @@ -332,9 +344,11 @@ inline vect<T,D> either (const vect<S,D>& a, /** Transpose a vector of a vector */ template<typename T, int D, int DD> -inline vect<vect<T,D>,DD> xpose (vect<vect<T,DD>,D> const & a) PURE; +inline vect<vect<T,D>,DD> xpose (vect<vect<T,DD>,D> const & a) + CCTK_ATTRIBUTE_PURE; template<typename T, int D, int DD> -inline vect<vect<T,D>,DD> xpose (vect<vect<T,DD>,D> const & a) { +inline vect<vect<T,D>,DD> xpose (vect<vect<T,DD>,D> const & a) +{ vect<vect<T,D>,DD> r; for (int dd=0; dd<DD; ++dd) for (int d=0; d<D; ++d) r[dd][d] = a[d][dd]; return r; @@ -342,9 +356,11 @@ inline vect<vect<T,D>,DD> xpose (vect<vect<T,DD>,D> const & a) { /** Return the element-wise integer power of two vectors. */ template<typename T,int D> -inline vect<T,D> ipow (const vect<T,D>& a, const vect<int,D>& b) PURE; +inline vect<T,D> ipow (const vect<T,D>& a, const vect<int,D>& b) + CCTK_ATTRIBUTE_PURE; template<typename T,int D> -inline vect<T,D> ipow (const vect<T,D>& a, const vect<int,D>& b) { +inline vect<T,D> ipow (const vect<T,D>& a, const vect<int,D>& b) +{ vect<T,D> r; for (int d=0; d<D; ++d) r[d]=ipow(a[d],b[d]); return r; @@ -398,26 +414,29 @@ DECLARE_REDUCTION_OPERATOR_2 (hypot,0,+=,*,sqrt) /** Count the number of elements in the vector. */ template<typename T,int D> -inline int count (const vect<T,D>& a) PURE; +inline int count (const vect<T,D>& a) CCTK_ATTRIBUTE_PURE; template<typename T,int D> -inline int count (const vect<T,D>& a) { +inline int count (const vect<T,D>& a) +{ return D; } /** Return the size (number of elements) of the vector. */ template<typename T,int D> -inline int size (const vect<T,D>& a) CONST; +inline int size (const vect<T,D>& a) CCTK_ATTRIBUTE_CONST; template<typename T,int D> -inline int size (const vect<T,D>& a) { +inline int size (const vect<T,D>& a) +{ return D; } /** Return the index of the first maximum element. */ template<typename T,int D> -inline int maxloc (const vect<T,D>& a) PURE; +inline int maxloc (const vect<T,D>& a) CCTK_ATTRIBUTE_PURE; template<typename T,int D> -inline int maxloc (const vect<T,D>& a) { - assert (D>0); +inline int maxloc (const vect<T,D>& a) +{ + ASSERT_VECT (D>0); int r(0); for (int d=1; d<D; ++d) if (a[d]>a[r]) r=d; return r; @@ -425,10 +444,11 @@ inline int maxloc (const vect<T,D>& a) { /** Return the index of the first minimum element. */ template<typename T,int D> -inline int minloc (const vect<T,D>& a) PURE; +inline int minloc (const vect<T,D>& a) CCTK_ATTRIBUTE_PURE; template<typename T,int D> -inline int minloc (const vect<T,D>& a) { - assert (D>0); +inline int minloc (const vect<T,D>& a) +{ + ASSERT_VECT (D>0); int r(0); for (int d=1; d<D; ++d) if (a[d]<a[r]) r=d; return r; @@ -436,15 +456,16 @@ inline int minloc (const vect<T,D>& a) { /** Return the n-dimensional linear array index. */ template<typename T,int D> -inline T index (const vect<T,D>& lsh, const vect<T,D>& ind) PURE; +inline T index (const vect<T,D>& lsh, const vect<T,D>& ind) CCTK_ATTRIBUTE_PURE; template<typename T,int D> -inline T index (const vect<T,D>& lsh, const vect<T,D>& ind) { +inline T index (const vect<T,D>& lsh, const vect<T,D>& ind) +{ T r(0); for (int d=D-1; d>=0; --d) { - assert (lsh[d]>=0); + ASSERT_VECT (lsh[d]>=0); // Be generous, and allow relative indices which may be negtive - // assert (ind[d]>=0 and ind[d]<lsh[d]); - assert (abs(ind[d])<=lsh[d]); + // ASSERT_VECT (ind[d]>=0 and ind[d]<lsh[d]); + ASSERT_VECT (abs(ind[d])<=lsh[d]); r = r * lsh[d] + ind[d]; } return r; @@ -460,7 +481,11 @@ inline T index (const vect<T,D>& lsh, const vect<T,D>& ind) { /** Return a new vector where the function func() has been applied to all elements. */ template<typename T, typename U, int D> -inline vect<U,D> map (U (* const func)(T x), const vect<T,D>& a) { +inline vect<U,D> map (U (* const func)(T x), const vect<T,D>& a) + CCTK_ATTRIBUTE_PURE; +template<typename T, typename U, int D> +inline vect<U,D> map (U (* const func)(T x), const vect<T,D>& a) +{ vect<U,D> r; for (int d=0; d<D; ++d) r[d] = func(a[d]); return r; @@ -471,6 +496,10 @@ inline vect<U,D> map (U (* const func)(T x), const vect<T,D>& a) { template<typename S, typename T, typename U, int D> inline vect<U,D> zip (U (* const func)(S x, T y), const vect<S,D>& a, const vect<T,D>& b) + CCTK_ATTRIBUTE_PURE; +template<typename S, typename T, typename U, int D> +inline vect<U,D> zip (U (* const func)(S x, T y), + const vect<S,D>& a, const vect<T,D>& b) { vect<U,D> r; for (int d=0; d<D; ++d) r[d] = func(a[d], b[d]); @@ -481,6 +510,9 @@ inline vect<U,D> zip (U (* const func)(S x, T y), the vector a, starting with the scalar value val. */ template<typename T, typename U, int D> inline U fold (U (* const func)(U val, T x), U val, const vect<T,D>& a) + CCTK_ATTRIBUTE_PURE; +template<typename T, typename U, int D> +inline U fold (U (* const func)(U val, T x), U val, const vect<T,D>& a) { for (int d=0; d<D; ++d) val = func(val, a[d]); return val; @@ -490,8 +522,11 @@ inline U fold (U (* const func)(U val, T x), U val, const vect<T,D>& a) the vector a, starting with element 0. */ template<typename T, typename U, int D> inline U fold1 (U (* const func)(U val, T x), const vect<T,D>& a) + CCTK_ATTRIBUTE_PURE; +template<typename T, typename U, int D> +inline U fold1 (U (* const func)(U val, T x), const vect<T,D>& a) { - assert (D>=1); + ASSERT_VECT (D>=1); U val = a[0]; for (int d=1; d<D; ++d) val = func(val, a[d]); return val; @@ -502,6 +537,10 @@ inline U fold1 (U (* const func)(U val, T x), const vect<T,D>& a) template<typename T, typename U, int D> inline vect<U,D> scan0 (U (* const func)(U val, T x), U val, const vect<T,D>& a) + CCTK_ATTRIBUTE_PURE; +template<typename T, typename U, int D> +inline vect<U,D> scan0 (U (* const func)(U val, T x), U val, + const vect<T,D>& a) { vect<U,D> r; for (int d=0; d<D; ++d) { @@ -516,6 +555,10 @@ inline vect<U,D> scan0 (U (* const func)(U val, T x), U val, template<typename T, typename U, int D> inline vect<U,D> scan1 (U (* const func)(U val, T x), U val, const vect<T,D>& a) + CCTK_ATTRIBUTE_PURE; +template<typename T, typename U, int D> +inline vect<U,D> scan1 (U (* const func)(U val, T x), U val, + const vect<T,D>& a) { vect<U,D> r; for (int d=0; d<D; ++d) { @@ -531,7 +574,10 @@ inline vect<U,D> scan1 (U (* const func)(U val, T x), U val, // Memory usage template<typename T,int D> -inline size_t memoryof (vect<T,D> const & a) { return a.memory(); } +inline size_t memoryof (vect<T,D> const & a) CCTK_ATTRIBUTE_CONST; +template<typename T,int D> +inline size_t memoryof (vect<T,D> const & a) +{ return a.memory(); } @@ -562,23 +608,26 @@ inline ostream& operator<< (ostream& os, const vect<T,D>& a) { /** Constructor for 2-element vectors from 2 elements. */ template<typename T> -inline vect<T,2>::vect<T,2> (const T& x, const T& y) PURE; +inline vect<T,2>::vect<T,2> (const T& x, const T& y) CCTK_ATTRIBUTE_PURE; template<typename T> -inline vect<T,2>::vect<T,2> (const T& x, const T& y) { +inline vect<T,2>::vect<T,2> (const T& x, const T& y) +{ elt[0]=x; elt[1]=y; } /** Constructor for 3-element vectors from 3 elements. */ -vect (const T& x, const T& y, const T& z) PURE; -vect (const T& x, const T& y, const T& z) { - assert (D==3); +vect (const T& x, const T& y, const T& z) CCTK_ATTRIBUTE_PURE; +vect (const T& x, const T& y, const T& z) +{ + ASSERT_VECT (D==3); elt[0]=x; elt[1]=y; elt[2]=z; } /** Constructor for 4-element vectors from 4 elements. */ -vect (const T& x, const T& y, const T& z, const T& t) PURE; -vect (const T& x, const T& y, const T& z, const T& t) { - assert (D==4); +vect (const T& x, const T& y, const T& z, const T& t) CCTK_ATTRIBUTE_PURE; +vect (const T& x, const T& y, const T& z, const T& t) +{ + ASSERT_VECT (D==4); elt[0]=x; elt[1]=y; elt[2]=z; elt[3]=t; } #endif @@ -590,29 +639,30 @@ vect (const T& x, const T& y, const T& z, const T& t) { // Specialise some constructors for lower dimensions -// These functions are declared, but never defined, so that using them -// will result in a linker error - -template<> inline vect<int,0>::vect (const int& x, const int& y) { assert(0); } -template<> inline vect<int,1>::vect (const int& x, const int& y) { assert(0); } +// These functions are declared, but must not be used. -template<> inline vect<int,0>::vect (const int& x, const int& y, const int& z) { assert(0); } -template<> inline vect<int,1>::vect (const int& x, const int& y, const int& z) { assert(0); } -template<> inline vect<int,2>::vect (const int& x, const int& y, const int& z) { assert(0); } +template<> vect<int,0>::vect (const int& x, const int& y); +template<> vect<int,1>::vect (const int& x, const int& y); +template<> vect<int,3>::vect (const int& x, const int& y); +template<> vect<int,4>::vect (const int& x, const int& y); -template<> inline vect<int,0>::vect (const int& x, const int& y, const int& z, const int& t) { assert(0); } -template<> inline vect<int,1>::vect (const int& x, const int& y, const int& z, const int& t) { assert(0); } -template<> inline vect<int,2>::vect (const int& x, const int& y, const int& z, const int& t) { assert(0); } -template<> inline vect<int,3>::vect (const int& x, const int& y, const int& z, const int& t) { assert(0); } +template<> vect<int,0>::vect (const int& x, const int& y, const int& z); +template<> vect<int,1>::vect (const int& x, const int& y, const int& z); +template<> vect<int,2>::vect (const int& x, const int& y, const int& z); +template<> vect<int,4>::vect (const int& x, const int& y, const int& z); +template<> vect<int,0>::vect (const int& x, const int& y, const int& z, const int& t); +template<> vect<int,1>::vect (const int& x, const int& y, const int& z, const int& t); +template<> vect<int,2>::vect (const int& x, const int& y, const int& z, const int& t); +template<> vect<int,3>::vect (const int& x, const int& y, const int& z, const int& t); // Specialise for CCTK_REAL template<> -inline vect<CCTK_REAL,3>& vect<CCTK_REAL,3>::operator%=(const vect<CCTK_REAL,3>& a) { - for (int d=0; d<3; ++d) { +inline vect<CCTK_REAL,dim>& vect<CCTK_REAL,dim>::operator%=(const vect<CCTK_REAL,dim>& a) { + for (int d=0; d<dim; ++d) { elt[d]=fmod(elt[d],a[d]); if (elt[d]>a[d]*(CCTK_REAL)(1.0-1.0e-10)) elt[d]=(CCTK_REAL)0; if (elt[d]<a[d]*(CCTK_REAL)( 1.0e-10)) elt[d]=(CCTK_REAL)0; @@ -621,9 +671,9 @@ inline vect<CCTK_REAL,3>& vect<CCTK_REAL,3>::operator%=(const vect<CCTK_REAL,3>& } template<> -inline vect<CCTK_REAL,3> operator%(const vect<CCTK_REAL,3>& a, const vect<CCTK_REAL,3>& b) { - vect<CCTK_REAL,3> r; - for (int d=0; d<3; ++d) { +inline vect<CCTK_REAL,dim> operator%(const vect<CCTK_REAL,dim>& a, const vect<CCTK_REAL,dim>& b) { + vect<CCTK_REAL,dim> r; + for (int d=0; d<dim; ++d) { r[d]=fmod(a[d],b[d]); if (r[d]>b[d]*(CCTK_REAL)(1.0-1.0e-10)) r[d]=(CCTK_REAL)0; if (r[d]<b[d]*(CCTK_REAL)( 1.0e-10)) r[d]=(CCTK_REAL)0; diff --git a/Carpet/CarpetLib/src/vect_helpers.hh b/Carpet/CarpetLib/src/vect_helpers.hh index afcce6e7e..471ae02ba 100644 --- a/Carpet/CarpetLib/src/vect_helpers.hh +++ b/Carpet/CarpetLib/src/vect_helpers.hh @@ -7,7 +7,8 @@ #define DECLARE_MEMBER_OPERATOR_0(fn,op) \ \ - vect fn () const PURE { \ + vect fn () const CCTK_ATTRIBUTE_PURE \ + { \ vect r; \ for (int d=0; d<D; ++d) r[d]=op elt[d]; \ return r; \ @@ -20,7 +21,8 @@ #define DECLARE_MEMBER_OPERATOR_0_RET(fn,op,R) \ \ - vect<R,D> fn () const PURE { \ + vect<R,D> fn () const CCTK_ATTRIBUTE_PURE \ + { \ vect<R,D> r; \ for (int d=0; d<D; ++d) r[d]=op elt[d]; \ return r; \ @@ -33,12 +35,14 @@ #define DECLARE_MEMBER_OPERATOR_1_REF(fn,op) \ \ - vect& fn (const T& x) { \ + vect& fn (const T& x) \ + { \ for (int d=0; d<D; ++d) elt[d] op x; \ return *this; \ } \ \ - vect& fn (const vect& a) { \ + vect& fn (const vect& a) \ + { \ for (int d=0; d<D; ++d) elt[d] op a[d]; \ return *this; \ } @@ -47,25 +51,26 @@ // Declare a function which takes 1 argument and returns type R -#define DECLARE_FUNCTION_1_RET(fn,R) \ - \ - template<typename T,int D> \ - inline vect<R,D> fn (const vect<T,D>& a) PURE; \ - template<typename T,int D> \ - inline vect<R,D> fn (const vect<T,D>& a) { \ - vect<R,D> r; \ - for (int d=0; d<D; ++d) r[d]=fn(a[d]); \ - return r; \ - } \ - \ - template<typename T,int D,int E> \ - inline vect<R,D> fn (const vect<vect<T,D>,E>& a) PURE; \ - template<typename T,int D,int E> \ - inline vect<R,D> fn (const vect<vect<T,D>,E>& a) \ - { \ - vect<R,D> r; \ - for (int e=0; e<E; ++e) r[e]=fn(a[e]); \ - return r; \ +#define DECLARE_FUNCTION_1_RET(fn,R) \ + \ + template<typename T,int D> \ + inline vect<R,D> fn (const vect<T,D>& a) CCTK_ATTRIBUTE_PURE; \ + template<typename T,int D> \ + inline vect<R,D> fn (const vect<T,D>& a) \ + { \ + vect<R,D> r; \ + for (int d=0; d<D; ++d) r[d]=fn(a[d]); \ + return r; \ + } \ + \ + template<typename T,int D,int E> \ + inline vect<R,D> fn (const vect<vect<T,D>,E>& a) CCTK_ATTRIBUTE_PURE; \ + template<typename T,int D,int E> \ + inline vect<R,D> fn (const vect<vect<T,D>,E>& a) \ + { \ + vect<R,D> r; \ + for (int e=0; e<E; ++e) r[e]=fn(a[e]); \ + return r; \ } @@ -81,36 +86,45 @@ #define DECLARE_FUNCTION_2_RET(fn,R) \ \ template<typename T,int D> \ - inline vect<R,D> fn (const vect<T,D>& a, const vect<T,D>& b) PURE; \ + inline vect<R,D> fn (const vect<T,D>& a, const vect<T,D>& b) \ + CCTK_ATTRIBUTE_PURE; \ template<typename T,int D> \ - inline vect<R,D> fn (const vect<T,D>& a, const vect<T,D>& b) { \ + inline vect<R,D> fn (const vect<T,D>& a, const vect<T,D>& b) \ + { \ vect<R,D> r; \ for (int d=0; d<D; ++d) r[d]=fn(a[d],b[d]); \ return r; \ } \ \ template<typename T,int D> \ - inline vect<R,D> fn (const T& a, const vect<T,D>& b) PURE; \ + inline vect<R,D> fn (const T& a, const vect<T,D>& b) \ + CCTK_ATTRIBUTE_PURE; \ template<typename T,int D> \ - inline vect<R,D> fn (const T& a, const vect<T,D>& b) { \ + inline vect<R,D> fn (const T& a, const vect<T,D>& b) \ + { \ vect<R,D> r; \ for (int d=0; d<D; ++d) r[d]=fn(a,b[d]); \ return r; \ } \ \ template<typename T,int D> \ - inline vect<R,D> fn (const vect<T,D>& a, const T& b) PURE; \ + inline vect<R,D> fn (const vect<T,D>& a, const T& b) \ + CCTK_ATTRIBUTE_PURE; \ template<typename T,int D> \ - inline vect<R,D> fn (const vect<T,D>& a, const T& b) { \ + inline vect<R,D> fn (const vect<T,D>& a, const T& b) \ + { \ vect<R,D> r; \ for (int d=0; d<D; ++d) r[d]=fn(a[d],b); \ return r; \ } \ \ template<typename T,int D,int E> \ - inline vect<vect<R,D>,E> fn (const vect<vect<T,D>,E>& a, const vect<vect<T,D>,E>& b) PURE; \ + inline vect<vect<R,D>,E> fn (const vect<vect<T,D>,E>& a, \ + const vect<vect<T,D>,E>& b) \ + CCTK_ATTRIBUTE_PURE; \ template<typename T,int D,int E> \ - inline vect<vect<R,D>,E> fn (const vect<vect<T,D>,E>& a, const vect<vect<T,D>,E>& b) \ + inline vect<vect<R,D>,E> fn (const vect<vect<T,D>,E>& a, \ + const vect<vect<T,D>,E>& b) \ { \ vect<vect<R,D>,E> r; \ for (int e=0; e<E; ++e) r[e]=fn(a[e],b[e]); \ @@ -118,7 +132,8 @@ } \ \ template<typename T,int D,int E> \ - inline vect<vect<R,D>,E> fn (const T& a, const vect<vect<T,D>,E>& b) PURE; \ + inline vect<vect<R,D>,E> fn (const T& a, const vect<vect<T,D>,E>& b) \ + CCTK_ATTRIBUTE_PURE; \ template<typename T,int D,int E> \ inline vect<vect<R,D>,E> fn (const T& a, const vect<vect<T,D>,E>& b) \ { \ @@ -128,7 +143,8 @@ } \ \ template<typename T,int D,int E> \ - inline vect<vect<R,D>,E> fn (const vect<vect<T,D>,E>& a, const T& b) PURE; \ + inline vect<vect<R,D>,E> fn (const vect<vect<T,D>,E>& a, const T& b) \ + CCTK_ATTRIBUTE_PURE; \ template<typename T,int D,int E> \ inline vect<vect<R,D>,E> fn (const vect<vect<T,D>,E>& a, const T& b) \ { \ @@ -150,25 +166,28 @@ #define DECLARE_OPERATOR_1_RET(fn,op,R) \ \ template<typename T,int D> \ - inline vect<R,D> fn (const vect<T,D>& a) PURE; \ + inline vect<R,D> fn (const vect<T,D>& a) CCTK_ATTRIBUTE_PURE; \ template<typename T,int D> \ - inline vect<R,D> fn (const vect<T,D>& a) { \ + inline vect<R,D> fn (const vect<T,D>& a) \ + { \ vect<R,D> r; \ for (int d=0; d<D; ++d) r[d]=op a[d]; \ return r; \ } \ \ template<typename T,int D> \ - inline vect<R,D> fn (const T& a) PURE; \ + inline vect<R,D> fn (const T& a) CCTK_ATTRIBUTE_PURE; \ template<typename T,int D> \ - inline vect<R,D> fn (const T& a) { \ + inline vect<R,D> fn (const T& a) \ + { \ vect<R,D> r; \ for (int d=0; d<D; ++d) r[d]=op a; \ return r; \ } \ \ template<typename T,int D,int E> \ - inline vect<vect<R,D>,E> fn (const vect<vect<T,D>,E>& a) PURE; \ + inline vect<vect<R,D>,E> fn (const vect<vect<T,D>,E>& a) \ + CCTK_ATTRIBUTE_PURE; \ template<typename T,int D,int E> \ inline vect<vect<R,D>,E> fn (const vect<vect<T,D>,E>& a) \ { \ @@ -178,7 +197,7 @@ } \ \ template<typename T,int D,int E> \ - inline vect<vect<R,D>,E> fn (const T& a) PURE; \ + inline vect<vect<R,D>,E> fn (const T& a) CCTK_ATTRIBUTE_PURE; \ template<typename T,int D,int E> \ inline vect<vect<R,D>,E> fn (const T& a) \ { \ @@ -194,36 +213,45 @@ #define DECLARE_OPERATOR_2_RET(fn,op,R) \ \ template<typename T,int D> \ - inline vect<R,D> fn (const vect<T,D>& a, const vect<T,D>& b) PURE; \ + inline vect<R,D> fn (const vect<T,D>& a, const vect<T,D>& b) \ + CCTK_ATTRIBUTE_PURE; \ template<typename T,int D> \ - inline vect<R,D> fn (const vect<T,D>& a, const vect<T,D>& b) { \ + inline vect<R,D> fn (const vect<T,D>& a, const vect<T,D>& b) \ + { \ vect<R,D> r; \ for (int d=0; d<D; ++d) r[d]=a[d] op b[d]; \ return r; \ } \ \ template<typename T,int D> \ - inline vect<R,D> fn (const T& a, const vect<T,D>& b) PURE; \ + inline vect<R,D> fn (const T& a, const vect<T,D>& b) \ + CCTK_ATTRIBUTE_PURE; \ template<typename T,int D> \ - inline vect<R,D> fn (const T& a, const vect<T,D>& b) { \ + inline vect<R,D> fn (const T& a, const vect<T,D>& b) \ + { \ vect<R,D> r; \ for (int d=0; d<D; ++d) r[d]=a op b[d]; \ return r; \ } \ \ template<typename T,int D> \ - inline vect<R,D> fn (const vect<T,D>& a, const T& b) PURE; \ + inline vect<R,D> fn (const vect<T,D>& a, const T& b) \ + CCTK_ATTRIBUTE_PURE; \ template<typename T,int D> \ - inline vect<R,D> fn (const vect<T,D>& a, const T& b) { \ + inline vect<R,D> fn (const vect<T,D>& a, const T& b) \ + { \ vect<R,D> r; \ for (int d=0; d<D; ++d) r[d]=a[d] op b; \ return r; \ } \ \ template<typename T,int D,int E> \ - inline vect<vect<R,D>,E> fn (const vect<vect<T,D>,E>& a, const vect<vect<T,D>,E>& b) PURE; \ + inline vect<vect<R,D>,E> fn (const vect<vect<T,D>,E>& a, \ + const vect<vect<T,D>,E>& b) \ + CCTK_ATTRIBUTE_PURE; \ template<typename T,int D,int E> \ - inline vect<vect<R,D>,E> fn (const vect<vect<T,D>,E>& a, const vect<vect<T,D>,E>& b) \ + inline vect<vect<R,D>,E> fn (const vect<vect<T,D>,E>& a, \ + const vect<vect<T,D>,E>& b) \ { \ vect<vect<R,D>,E> r; \ for (int e=0; e<E; ++e) r[e]=a[e] op b[e]; \ @@ -231,7 +259,8 @@ } \ \ template<typename T,int D,int E> \ - inline vect<vect<R,D>,E> fn (const T& a, const vect<vect<T,D>,E>& b) PURE; \ + inline vect<vect<R,D>,E> fn (const T& a, const vect<vect<T,D>,E>& b) \ + CCTK_ATTRIBUTE_PURE; \ template<typename T,int D,int E> \ inline vect<vect<R,D>,E> fn (const T& a, const vect<vect<T,D>,E>& b) \ { \ @@ -241,14 +270,15 @@ } \ \ template<typename T,int D,int E> \ - inline vect<vect<R,D>,E> fn (const vect<vect<T,D>,E>& a, const T& b) PURE; \ + inline vect<vect<R,D>,E> fn (const vect<vect<T,D>,E>& a, const T& b) \ + CCTK_ATTRIBUTE_PURE; \ template<typename T,int D,int E> \ inline vect<vect<R,D>,E> fn (const vect<vect<T,D>,E>& a, const T& b) \ { \ vect<vect<R,D>,E> r; \ for (int e=0; e<E; ++e) r[e]=a[e] op b; \ return r; \ - } + } @@ -264,18 +294,20 @@ #define DECLARE_REDUCTION_OPERATOR_1_T_RET(fn,init,op,final,T,R) \ \ template<typename U,int D> \ - inline vect<R,D> fn (const vect<U,D>& a) PURE; \ + inline vect<R,D> fn (const vect<U,D>& a) CCTK_ATTRIBUTE_PURE; \ template<typename U,int D> \ - inline vect<R,D> fn (const vect<U,D>& a) { \ + inline vect<R,D> fn (const vect<U,D>& a) \ + { \ vect<R,D> r; \ for (int d=0; d<D; ++d) r[d]=fn(a[d]); \ return r; \ } \ \ template<int D> \ - inline R fn (const vect<T,D>& a) PURE; \ + inline R fn (const vect<T,D>& a) CCTK_ATTRIBUTE_PURE; \ template<int D> \ - inline R fn (const vect<T,D>& a) { \ + inline R fn (const vect<T,D>& a) \ + { \ R r(init); \ for (int d=0; d<D; ++d) r op a[d]; \ return final(r); \ @@ -285,15 +317,16 @@ // Declare a reduction function which takes 1 argument -#define DECLARE_REDUCTION_OPERATOR_1(fn,init,op,final) \ - \ - template<typename T,int D> \ - inline T fn (const vect<T,D>& a) PURE; \ - template<typename T,int D> \ - inline T fn (const vect<T,D>& a) { \ - T r(init); \ - for (int d=0; d<D; ++d) r op a[d]; \ - return final(r); \ +#define DECLARE_REDUCTION_OPERATOR_1(fn,init,op,final) \ + \ + template<typename T,int D> \ + inline T fn (const vect<T,D>& a) CCTK_ATTRIBUTE_PURE; \ + template<typename T,int D> \ + inline T fn (const vect<T,D>& a) \ + { \ + T r(init); \ + for (int d=0; d<D; ++d) r op a[d]; \ + return final(r); \ } @@ -303,9 +336,10 @@ #define DECLARE_REDUCTION_FUNCTION_1(fn,init,op,final) \ \ template<typename T,int D> \ - inline T fn (const vect<T,D>& a) PURE; \ + inline T fn (const vect<T,D>& a) CCTK_ATTRIBUTE_PURE; \ template<typename T,int D> \ - inline T fn (const vect<T,D>& a) { \ + inline T fn (const vect<T,D>& a) \ + { \ T r(init); \ for (int d=0; d<D; ++d) op(r,a[d]); \ return final(r); \ @@ -315,15 +349,17 @@ // Declare a reduction function which takes 2 arguments -#define DECLARE_REDUCTION_OPERATOR_2(fn,init,op,op2,final) \ - \ - template<typename T,int D> \ - inline T fn (const vect<T,D>& a, const vect<T,D>& b) PURE; \ - template<typename T,int D> \ - inline T fn (const vect<T,D>& a, const vect<T,D>& b) { \ - T r(init); \ - for (int d=0; d<D; ++d) r op (a[d] op2 b[d]); \ - return final(r); \ +#define DECLARE_REDUCTION_OPERATOR_2(fn,init,op,op2,final) \ + \ + template<typename T,int D> \ + inline T fn (const vect<T,D>& a, const vect<T,D>& b) \ + CCTK_ATTRIBUTE_PURE; \ + template<typename T,int D> \ + inline T fn (const vect<T,D>& a, const vect<T,D>& b) \ + { \ + T r(init); \ + for (int d=0; d<D; ++d) r op (a[d] op2 b[d]); \ + return final(r); \ } diff --git a/Carpet/CarpetMask/README b/Carpet/CarpetMask/README index 9c2fde769..a54ac4dbb 100644 --- a/Carpet/CarpetMask/README +++ b/Carpet/CarpetMask/README @@ -1,9 +1,10 @@ Cactus Code Thorn CarpetMask -Thorn Author(s) : Erik Schnetter <schnetter@cct.lsu.edu> -Thorn Maintainer(s) : Erik Schnetter <schnetter@cct.lsu.edu> +Author(s) : Erik Schnetter <schnetter@cct.lsu.edu> +Maintainer(s): Erik Schnetter <schnetter@cct.lsu.edu> +Licence : GPLv2+ -------------------------------------------------------------------------- -Purpose of the thorn: +1. Purpose Remove unwanted regions from Carpet's reduction operations. This can be used e.g. to excise the interior of horizons. diff --git a/Carpet/CarpetMask/configuration.ccl b/Carpet/CarpetMask/configuration.ccl new file mode 100644 index 000000000..505f2b2b9 --- /dev/null +++ b/Carpet/CarpetMask/configuration.ccl @@ -0,0 +1,5 @@ +# Configuration definitions for thorn CarpetMask + +REQUIRES LoopControl + +REQUIRES THORNS: LoopControl diff --git a/Carpet/CarpetMask/schedule.ccl b/Carpet/CarpetMask/schedule.ccl index a7b972557..1b136ff9a 100644 --- a/Carpet/CarpetMask/schedule.ccl +++ b/Carpet/CarpetMask/schedule.ccl @@ -1,5 +1,11 @@ # Schedule definitions for thorn CarpetMask +SCHEDULE CarpetSurfaceParamCheck AT paramcheck +{ + LANG: C + OPTIONS: global +} "Check parameters" + # TODO: Schedule this only if there is an excluded centre which is active SCHEDULE GROUP MaskBase_SetupMask AT poststep AFTER SphericalSurface_HasBeenSet { diff --git a/Carpet/CarpetMask/src/mask_excluded.cc b/Carpet/CarpetMask/src/mask_excluded.cc index e842caf31..e179bc268 100644 --- a/Carpet/CarpetMask/src/mask_excluded.cc +++ b/Carpet/CarpetMask/src/mask_excluded.cc @@ -4,6 +4,8 @@ #include <cctk_Arguments.h> #include <cctk_Parameters.h> +#include <loopcontrol.h> + #include "mask_excluded.hh" @@ -46,25 +48,26 @@ namespace CarpetMask { bool const exterior = exclude_exterior[n]; - for (int k = 0; k < cctk_lsh[2]; ++ k) { - for (int j = 0; j < cctk_lsh[1]; ++ j) { - for (int i = 0; i < cctk_lsh[0]; ++ i) { - int const ind = CCTK_GFINDEX3D (cctkGH, i, j, k); - - CCTK_REAL const dx2 = pow (x[ind] - x0, 2); - CCTK_REAL const dy2 = pow (y[ind] - y0, 2); - CCTK_REAL const dz2 = pow (z[ind] - z0, 2); - - if (exterior ? - dx2 + dy2 + dz2 >= r2 : - dx2 + dy2 + dz2 <= r2) - { - weight[ind] = 0.0; - } - - } +#pragma omp parallel + LC_LOOP3(CarpetExcludedSetup, + i,j,k, + 0,0,0, cctk_lsh[0],cctk_lsh[1],cctk_lsh[2], + cctk_lsh[0],cctk_lsh[1],cctk_lsh[2]) + { + int const ind = CCTK_GFINDEX3D (cctkGH, i, j, k); + + CCTK_REAL const dx2 = pow (x[ind] - x0, 2); + CCTK_REAL const dy2 = pow (y[ind] - y0, 2); + CCTK_REAL const dz2 = pow (z[ind] - z0, 2); + + if (exterior ? + dx2 + dy2 + dz2 >= r2 : + dx2 + dy2 + dz2 <= r2) + { + weight[ind] = 0.0; } - } + + } LC_ENDLOOP3(CarpetExcludedSetup); } // if r>=0 } // for n diff --git a/Carpet/CarpetMask/src/mask_surface.cc b/Carpet/CarpetMask/src/mask_surface.cc index e1a02079f..d23dc5461 100644 --- a/Carpet/CarpetMask/src/mask_surface.cc +++ b/Carpet/CarpetMask/src/mask_surface.cc @@ -23,6 +23,33 @@ namespace CarpetMask { /** + * Check parameters. + */ + + void + CarpetSurfaceParamCheck (CCTK_ARGUMENTS) + { + DECLARE_CCTK_ARGUMENTS; + DECLARE_CCTK_PARAMETERS; + + for (int n = 0; n < num_excluded; ++ n) { + + int const sn = excluded_surface[n]; + if (sn >= 0) { + + if (not (sn < nsurfaces)) { + CCTK_VParamWarn (CCTK_THORNSTRING, + "Mask %d depends on spherical surface %d, but there are only %d spherical surfaces", + n, sn, int(nsurfaces)); + } + + } // if sn >= 0 + } // for n + } + + + + /** * Set the weight in the excluded regions to zero. */ @@ -52,6 +79,11 @@ namespace CarpetMask { int const sn = excluded_surface[n]; if (sn >= 0) { + if (not (sn < nsurfaces)) { + CCTK_VWarn (CCTK_WARN_ABORT, __LINE__, __FILE__, CCTK_THORNSTRING, + "Mask %d depends on spherical surface %d, but there are only %d spherical surfaces", + n, sn, int(nsurfaces)); + } assert (sn < nsurfaces); if (sf_active[sn]) { @@ -81,6 +113,7 @@ namespace CarpetMask { } } +#pragma omp parallel for for (int k = 0; k < cctk_lsh[2]; ++ k) { for (int j = 0; j < cctk_lsh[1]; ++ j) { for (int i = 0; i < cctk_lsh[0]; ++ i) { diff --git a/Carpet/CarpetMask/src/mask_surface.hh b/Carpet/CarpetMask/src/mask_surface.hh index a3e1f19d0..63e46d35b 100644 --- a/Carpet/CarpetMask/src/mask_surface.hh +++ b/Carpet/CarpetMask/src/mask_surface.hh @@ -5,6 +5,8 @@ namespace CarpetMask { extern "C" { void + CarpetSurfaceParamCheck (CCTK_ARGUMENTS); + void CarpetSurfaceSetup (CCTK_ARGUMENTS); } diff --git a/Carpet/CarpetReduce/README b/Carpet/CarpetReduce/README index d28f8cb3a..38a70d075 100644 --- a/Carpet/CarpetReduce/README +++ b/Carpet/CarpetReduce/README @@ -1,8 +1,10 @@ Cactus Code Thorn CarpetReduce -Authors : Erik Schnetter <schnetter@uni-tuebingen.de> +Author(s) : Erik Schnetter <schnetter@cct.lsu.edu> +Maintainer(s): Erik Schnetter <schnetter@cct.lsu.edu> +Licence : GPLv2+ -------------------------------------------------------------------------- -Purpose of the thorn: +1. Purpose This thorn provides parallel reduction operators for Carpet. diff --git a/Carpet/CarpetReduce/src/mask_carpet.cc b/Carpet/CarpetReduce/src/mask_carpet.cc index 679c85392..6a87db4a9 100644 --- a/Carpet/CarpetReduce/src/mask_carpet.cc +++ b/Carpet/CarpetReduce/src/mask_carpet.cc @@ -75,9 +75,8 @@ namespace CarpetMask { // Enlarge this set ibset enlarged[dim]; for (int d=0; d<dim; ++d) { - for (ibset::const_iterator bi = notrefined.begin(); - bi != notrefined.end(); - ++bi) + for (ibset::const_iterator + bi = notrefined.begin(); bi != notrefined.end(); ++bi) { enlarged[d] |= (*bi).expand(ivect::dir(d), ivect::dir(d)); } diff --git a/Carpet/CarpetReduce/src/reduce.cc b/Carpet/CarpetReduce/src/reduce.cc index 3034d72ef..b72c089f9 100644 --- a/Carpet/CarpetReduce/src/reduce.cc +++ b/Carpet/CarpetReduce/src/reduce.cc @@ -5,6 +5,7 @@ #include <cmath> #include <cstdio> #include <cstdlib> +#include <cstring> #include <complex> #include <limits> #include <vector> @@ -56,6 +57,18 @@ namespace CarpetReduce { } template<typename T> inline T + mysqr (const T x) + { + return x*x; + } + + template<typename T> inline T + mysqrabs (const T x) + { + return x*x; + } + + template<typename T> inline T mysqrt (const T x) { return sqrt(x); @@ -112,9 +125,22 @@ namespace CarpetReduce { // return 0; // } + template<> inline CCTK_BYTE mysqr (CCTK_BYTE const x) + { + // prevent overflow + return 0; + } + + template<> inline CCTK_BYTE mysqrabs (CCTK_BYTE const x) + { + // prevent overflow + return 0; + } + template<> inline CCTK_BYTE mysqrt (CCTK_BYTE const x) { - return static_cast<CCTK_BYTE> (sqrt (static_cast<CCTK_REAL> (x))); + // return static_cast<CCTK_BYTE> (sqrt (static_cast<CCTK_REAL> (x))); + return 0; } #endif @@ -124,9 +150,22 @@ namespace CarpetReduce { // return 0; // } + template<> inline CCTK_INT1 mysqr (CCTK_INT1 const x) + { + // prevent overflow + return 0; + } + + template<> inline CCTK_INT1 mysqrabs (CCTK_INT1 const x) + { + // prevent overflow + return 0; + } + template<> inline CCTK_INT1 mysqrt (CCTK_INT1 const x) { - return static_cast<CCTK_INT1> (sqrt (static_cast<CCTK_REAL> (x))); + // return static_cast<CCTK_INT1> (sqrt (static_cast<CCTK_REAL> (x))); + return 0; } #endif @@ -136,23 +175,72 @@ namespace CarpetReduce { // return 0; // } + template<> inline CCTK_INT2 mysqr (CCTK_INT2 const x) + { + // prevent overflow + return 0; + } + + template<> inline CCTK_INT2 mysqrabs (CCTK_INT2 const x) + { + // prevent overflow + return 0; + } + template<> inline CCTK_INT2 mysqrt (CCTK_INT2 const x) { - return static_cast<CCTK_INT2> (sqrt (static_cast<CCTK_REAL> (x))); + // return static_cast<CCTK_INT2> (sqrt (static_cast<CCTK_REAL> (x))); + return 0; } #endif #ifdef HAVE_CCTK_INT4 +// template<> inline int myisnan (CCTK_INT4 const x) +// { +// return 0; +// } + + template<> inline CCTK_INT4 mysqr (CCTK_INT4 const x) + { + // prevent overflow + return 0; + } + + template<> inline CCTK_INT4 mysqrabs (CCTK_INT4 const x) + { + // prevent overflow + return 0; + } + template<> inline CCTK_INT4 mysqrt (CCTK_INT4 const x) { - return static_cast<CCTK_INT4> (sqrt (static_cast<CCTK_REAL> (x))); + // return static_cast<CCTK_INT4> (sqrt (static_cast<CCTK_REAL> (x))); + return 0; } #endif #ifdef HAVE_CCTK_INT8 +// template<> inline int myisnan (CCTK_INT8 const x) +// { +// return 0; +// } + + template<> inline CCTK_INT8 mysqr (CCTK_INT8 const x) + { + // prevent overflow + return 0; + } + + template<> inline CCTK_INT8 mysqrabs (CCTK_INT8 const x) + { + // prevent overflow + return 0; + } + template<> inline CCTK_INT8 mysqrt (CCTK_INT8 const x) { - return static_cast<CCTK_INT8> (sqrt (static_cast<CCTK_REAL> (x))); + // return static_cast<CCTK_INT8> (sqrt (static_cast<CCTK_REAL> (x))); + return 0; } #endif @@ -181,6 +269,12 @@ namespace CarpetReduce { mymax(x.imag(), y.imag())); } + template<> inline complex<CCTK_REAL4> + mysqrabs (const complex<CCTK_REAL4> x) + { + return mysqr(abs(x)); + } + template<> struct my_numeric_limits<complex<CCTK_REAL4> > { static complex<CCTK_REAL4> min () @@ -224,6 +318,12 @@ namespace CarpetReduce { mymax(x.imag(), y.imag())); } + template<> inline complex<CCTK_REAL8> + mysqrabs (const complex<CCTK_REAL8> x) + { + return mysqr(abs(x)); + } + template<> struct my_numeric_limits<complex<CCTK_REAL8> > { static complex<CCTK_REAL8> min () @@ -267,6 +367,12 @@ namespace CarpetReduce { mymax(x.imag(), y.imag())); } + template<> inline complex<CCTK_REAL16> + mysqrabs (const complex<CCTK_REAL16> x) + { + return mysqr(abs(x)); + } + template<> struct my_numeric_limits<complex<CCTK_REAL16> > { static complex<CCTK_REAL16> min () @@ -399,7 +505,7 @@ namespace CarpetReduce { template<class T> struct op { static inline void initialise (T& accum, T& cnt) { accum = T(0); cnt = T(0); } - static inline void reduce (T& accum, T& cnt, const T& val, const CCTK_REAL weight) { if (weight!=0) accum += weight*val*val; cnt += T(weight); } + static inline void reduce (T& accum, T& cnt, const T& val, const CCTK_REAL weight) { if (weight!=0) accum += weight*mysqr(val); cnt += T(weight); } static inline void combine (T& accum, T& cnt, const T& accum2, const T& cnt2) { accum += accum2; cnt += cnt2; } static inline void finalise (T& accum, const T& cnt) { } }; @@ -413,7 +519,7 @@ namespace CarpetReduce { template<class T> struct op { static inline void initialise (T& accum, T& cnt) { accum = T(0); cnt = T(0); } - static inline void reduce (T& accum, T& cnt, const T& val, const CCTK_REAL weight) { if (weight!=0) accum += weight*abs(val*val); cnt += T(weight); } + static inline void reduce (T& accum, T& cnt, const T& val, const CCTK_REAL weight) { if (weight!=0) accum += weight*mysqrabs(val); cnt += T(weight); } static inline void combine (T& accum, T& cnt, const T& accum2, const T& cnt2) { accum += accum2; cnt += cnt2; } static inline void finalise (T& accum, const T& cnt) { } }; @@ -455,7 +561,7 @@ namespace CarpetReduce { template<class T> struct op { static inline void initialise (T& accum, T& cnt) { accum = T(0); cnt = T(0); } - static inline void reduce (T& accum, T& cnt, const T& val, const CCTK_REAL weight) { if (weight!=0) accum += weight*abs(val)*abs(val); cnt += T(weight); } + static inline void reduce (T& accum, T& cnt, const T& val, const CCTK_REAL weight) { if (weight!=0) accum += weight*mysqrabs(val); cnt += T(weight); } static inline void combine (T& accum, T& cnt, const T& accum2, const T& cnt2) { accum += accum2; cnt += cnt2; } static inline void finalise (T& accum, const T& cnt) { accum = mysqrt(accum / cnt); } }; @@ -503,13 +609,13 @@ namespace CarpetReduce { imin[d] = (bbox[2*d ] ? 0 : nghostzones[d]); imax[d] = lsh[d] - (bbox[2*d+1] ? 0 : nghostzones[d]); } - static_assert (dim==3, "Only 3 dimensions are currently supported"); #pragma omp parallel { T myoutval_local; T mycnt_local; OP::initialise (myoutval_local, mycnt_local); #pragma omp for nowait +#if CARPET_DIM == 3 for (int k=imin[2]; k<imax[2]; ++k) { for (int j=imin[1]; j<imax[1]; ++j) { for (int i=imin[0]; i<imax[0]; ++i) { @@ -524,6 +630,26 @@ namespace CarpetReduce { } } } +#elif CARPET_DIM == 4 + for (int l=imin[3]; l<imax[3]; ++l) { + for (int k=imin[2]; k<imax[2]; ++k) { + for (int j=imin[1]; j<imax[1]; ++j) { + for (int i=imin[0]; i<imax[0]; ++i) { + const int index = i + lsh[0] * (j + lsh[1] * (k + lsh[2] * l)); + CCTK_REAL const w = weight ? weight[index] * levfac : levfac; + T myinval = T(0); + for (size_t tl=0; tl<inarrays.size(); ++tl) { + myinval += + static_cast<const T*>(inarrays.AT(tl))[index] * tfacs.AT(tl); + } + OP::reduce (myoutval_local, mycnt_local, myinval, w); + } + } + } + } +#else +# error "Value of CARPET_DIM is not supported" +#endif #pragma omp critical { OP::combine (myoutval, mycnt, myoutval_local, mycnt_local); @@ -762,48 +888,60 @@ namespace CarpetReduce { assert (num_outvals>=0); assert (outvals or (proc!=-1 and proc!=CCTK_MyProc(cgh))); + assert (num_outvals==0 or myoutvals); + assert (num_outvals==0 or mycounts); + const int vartypesize = CCTK_VarTypeSize(outtype); assert (vartypesize>=0); + const int mpilength = CarpetSimpleMPIDatatypeLength(outtype); - assert (num_outvals==0 or myoutvals); - assert (num_outvals==0 or mycounts); + char* const sendbuf = static_cast<char*>(const_cast<void*>(myoutvals)); + const int bufsize = num_outvals * vartypesize; + const int mpicount = num_outvals * mpilength * (red->uses_cnt() ? 2 : 1); + if (red->uses_cnt()) { + if (not (sendbuf + bufsize == static_cast<const char*>(mycounts))) { + cerr << "sendbuf=" << (void*)sendbuf << endl + << "bufsize=" << bufsize << endl + << "mycounts=" << mycounts << endl + << "num_outvals=" << num_outvals << endl + << "outtype=" << outtype << endl + << "vartypesize=" << vartypesize << endl + << "mpilength=" << mpilength << endl + << "mpicount=" << mpicount << endl; + } + assert (sendbuf + bufsize == static_cast<const char*>(mycounts)); + assert (red->mpi_op() == MPI_SUM); + } - vector<char> counts; + char* recvbuf = static_cast<char*>(outvals); + vector<char> buffer; if (proc==-1 or proc==CCTK_MyProc(cgh)) { - counts.resize(vartypesize * num_outvals); + if (red->uses_cnt()) { + buffer.resize (2*bufsize); + recvbuf = &buffer[0]; + } } const MPI_Datatype mpitype = CarpetSimpleMPIDatatype(outtype); - const int mpilength = CarpetSimpleMPIDatatypeLength(outtype); if (proc == -1) { - MPI_Allreduce (const_cast<void*>(myoutvals), outvals, - mpilength*num_outvals, - mpitype, red->mpi_op(), - CarpetMPIComm()); - if (red->uses_cnt()) { - MPI_Allreduce (const_cast<void*>(mycounts), &counts[0], - num_outvals*mpilength, - mpitype, MPI_SUM, - CarpetMPIComm()); - } + MPI_Allreduce (sendbuf, recvbuf, mpicount, + mpitype, red->mpi_op(), CarpetMPIComm()); } else { - MPI_Reduce (const_cast<void*>(myoutvals), outvals, - num_outvals*mpilength, - mpitype, red->mpi_op(), proc, CarpetMPIComm()); - if (red->uses_cnt()) { - MPI_Reduce (const_cast<void*>(mycounts), &counts[0], - num_outvals*mpilength, - mpitype, MPI_SUM, proc, CarpetMPIComm()); - } + MPI_Reduce (sendbuf, recvbuf, mpicount, + mpitype, red->mpi_op(), proc, CarpetMPIComm()); } if (proc==-1 or proc==CCTK_MyProc(cgh)) { + assert (outvals); + char* counts = NULL; + if (red->uses_cnt()) { + memcpy (outvals, recvbuf, bufsize); + counts = recvbuf + bufsize; + } + for (int n=0; n<num_outvals; ++n) { - assert (outvals); - assert ((int)counts.size() == vartypesize * num_outvals); - switch (outtype) { #define FINALISE(OP,S) \ case do_##OP: { \ @@ -915,24 +1053,27 @@ namespace CarpetReduce { const int vartypesize = CCTK_VarTypeSize(outtype); assert (vartypesize>=0); - vector<char> myoutvals (vartypesize * num_inarrays * num_outvals); - vector<char> mycounts (vartypesize * num_inarrays * num_outvals); + // keep local outvals and counts in a single buffer + // to save a copy operation in the Finalise() step + vector<char> buffer (2 * vartypesize * num_inarrays * num_outvals); + char* const myoutvals = &buffer[0]; + char* const mycounts = &buffer[vartypesize * num_inarrays * num_outvals]; - Initialise (cgh, proc, num_inarrays * num_outvals, &myoutvals[0], outtype, - &mycounts[0], red); + Initialise (cgh, proc, num_inarrays * num_outvals, myoutvals, outtype, + mycounts, red); if (do_local_reduction) { Reduce (cgh, proc, &mylsh[0], &mybbox[0][0], &mynghostzones[0], num_inarrays, myinarrays, tfacs, intype, - num_inarrays * num_outvals, &myoutvals[0], outtype, - &mycounts[0], red, + num_inarrays * num_outvals, myoutvals, outtype, + mycounts, red, NULL, 1.0); } else { Copy (cgh, proc, lsize, num_inarrays, inarrays, intype, - num_inarrays * num_outvals, &myoutvals[0], outtype, - &mycounts[0]); + num_inarrays * num_outvals, myoutvals, outtype, + mycounts); } Finalise (cgh, proc, num_inarrays * num_outvals, outvals, outtype, - &myoutvals[0], &mycounts[0], red); + myoutvals, mycounts, red); return 0; } @@ -1020,11 +1161,14 @@ namespace CarpetReduce { - vector<char> myoutvals (vartypesize * num_invars * num_outvals); - vector<char> mycounts (vartypesize * num_invars * num_outvals); + // keep local outvals and counts in a single buffer + // to save a copy operation in the Finalise() step + vector<char> buffer (2 * vartypesize * num_invars * num_outvals); + char* const myoutvals = &buffer[0]; + char* const mycounts = &buffer[vartypesize * num_invars * num_outvals]; - Initialise (cgh, proc, num_invars * num_outvals, &myoutvals[0], outtype, - &mycounts[0], red); + Initialise (cgh, proc, num_invars * num_outvals, myoutvals, outtype, + mycounts, red); BEGIN_GLOBAL_MODE(cgh) { for (int rl=minrl; rl<maxrl; ++rl) { @@ -1062,32 +1206,44 @@ namespace CarpetReduce { } else { assert (0); } + assert (num_tl >= 1); - // Are there enough time levels? - int const max_tl = CCTK_MaxTimeLevelsVI(vi); - int const active_tl = CCTK_ActiveTimeLevelsVI(cgh, vi); - if (max_tl == 1 and active_tl == 1) { - num_tl = 1; + if (num_tl == 1) { + // One time level does not count as interpolation need_time_interp = false; - static vector<bool> have_warned; - if (have_warned.empty()) { - have_warned.resize (CCTK_NumVars(), false); - } - if (not have_warned.at(vi)) { - char * const fullname = CCTK_FullName(vi); - CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, - "Grid function \"%s\" has only %d time levels on refinement level %d; this is not enough for time interpolation", - fullname, max_tl, reflevel); - free (fullname); - have_warned.at(vi) = true; + } else { + // Are there enough time levels? + int const active_tl = CCTK_ActiveTimeLevelsVI(cgh, vi); + if (active_tl < num_tl) { + int const max_tl = CCTK_MaxTimeLevelsVI(vi); + if (max_tl == 1 and active_tl == 1) { + static vector<bool> have_warned; + if (have_warned.empty()) { + have_warned.resize (CCTK_NumVars(), false); + } + if (not have_warned.at(vi)) { + char * const fullname = CCTK_FullName(vi); + CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, + "Grid function \"%s\" has only %d time levels on refinement level %d; this is not enough for time interpolation", + fullname, max_tl, reflevel); + free (fullname); + have_warned.at(vi) = true; + } + // fall back to no time interpolation + num_tl = 1; + need_time_interp = false; + } else { + char * const fullname = CCTK_FullName(vi); + CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, + "Grid function \"%s\" has only %d active time levels out of %d maximum time levels on refinement level %d; this is not enough for time interpolation", + fullname, active_tl, max_tl, reflevel); + if (not do_allow_past_timelevels) { + CCTK_WARN (1, "(Note: access to past time levels is disabled at this point, probably because of the schedule bin from which this code is called.)"); + } + free (fullname); + return 1; // error + } } - } else if (active_tl < num_tl) { - char * const fullname = CCTK_FullName(vi); - CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING, - "Grid function \"%s\" has only %d active time levels out of %d maximum time levels on refinement level %d; this is not enough for time interpolation", - fullname, active_tl, max_tl, reflevel); - free (fullname); - return 1; // error } } else { @@ -1155,93 +1311,98 @@ namespace CarpetReduce { int const grouptype = reduce_arrays ? CCTK_ARRAY : CCTK_GF; for (int m=minm; m<maxm; ++m) { - ENTER_SINGLEMAP_MODE(cgh, m, grouptype) { - BEGIN_LOCAL_COMPONENT_LOOP(cgh, grouptype) { - - - - assert (grpdim<=dim); - int lsh[dim], bbox[2*dim], nghostzones[dim]; - ierr = CCTK_GrouplshVI(cgh, grpdim, lsh, vi); - assert (not ierr); - ierr = CCTK_GroupbboxVI(cgh, 2*grpdim, bbox, vi); - assert (not ierr); - ierr = CCTK_GroupnghostzonesVI(cgh, grpdim, nghostzones, vi); - assert (not ierr); - for (int d=0; d<grpdim; ++d) { - assert (lsh[d]>=0); - assert (nghostzones[d]>=0 and 2*nghostzones[d]<=lsh[d]); - } - - vect<int,dim> mylsh, mynghostzones; - vect<vect<int,2>,dim> mybbox; - for (int d=0; d<grpdim; ++d) { - mylsh[d] = lsh[d]; - mybbox[d][0] = bbox[2*d ]; - mybbox[d][1] = bbox[2*d+1]; - mynghostzones[d] = nghostzones[d]; - } - for (int d=grpdim; d<dim; ++d) { - mylsh[d] = 1; - mybbox[d][0] = 0; - mybbox[d][1] = 0; - mynghostzones[d] = 0; - } - - - - CCTK_REAL const * weight; - CCTK_REAL levfac; - if (want_global_mode or want_level_mode) { - static int iweight = -1; - if (iweight == -1) { - iweight = CCTK_VarIndex ("CarpetReduce::weight"); - assert (iweight >= 0); + int const maxlc = + grouptype == CCTK_GF ? vhh.AT(m)->local_components(reflevel) : 1; + if (maxlc > 0) { + ENTER_SINGLEMAP_MODE(cgh, m, grouptype) { + BEGIN_LOCAL_COMPONENT_LOOP(cgh, grouptype) { + + + + assert (grpdim<=dim); + int lsh[dim], bbox[2*dim], nghostzones[dim]; + ierr = CCTK_GrouplshVI(cgh, grpdim, lsh, vi); + assert (not ierr); + ierr = CCTK_GroupbboxVI(cgh, 2*grpdim, bbox, vi); + assert (not ierr); + ierr = CCTK_GroupnghostzonesVI(cgh, grpdim, nghostzones, vi); + assert (not ierr); + for (int d=0; d<grpdim; ++d) { + assert (lsh[d]>=0); + assert (nghostzones[d]>=0 and 2*nghostzones[d]<=lsh[d]); } - weight = (static_cast<CCTK_REAL const *> - (CCTK_VarDataPtrI (cgh, 0, iweight))); - assert (weight); - CCTK_REAL const levfac1 = - 1.0 / prod (rvect (spacereflevelfact)); - levfac = want_level_mode or igrid ? 1.0 : levfac1; - } else { - weight = NULL; - levfac = 1.0; - } - - vector<vector<const void*> > myinarrays (num_tl); - vector<const void* const*> inarrays (num_tl); - for (int tl=0; tl<num_tl; ++tl) { - myinarrays.at(tl).resize (num_invars); - for (int n=0; n<num_invars; ++n) { + + vect<int,dim> mylsh, mynghostzones; + vect<vect<int,2>,dim> mybbox; + for (int d=0; d<grpdim; ++d) { + mylsh[d] = lsh[d]; + mybbox[d][0] = bbox[2*d ]; + mybbox[d][1] = bbox[2*d+1]; + mynghostzones[d] = nghostzones[d]; + } + for (int d=grpdim; d<dim; ++d) { + mylsh[d] = 1; + mybbox[d][0] = 0; + mybbox[d][1] = 0; + mynghostzones[d] = 0; + } + + + + CCTK_REAL const * weight; + CCTK_REAL levfac; + if (want_global_mode or want_level_mode) { + static int iweight = -1; + if (iweight == -1) { + iweight = CCTK_VarIndex ("CarpetReduce::weight"); + assert (iweight >= 0); + } + weight = (static_cast<CCTK_REAL const *> + (CCTK_VarDataPtrI (cgh, 0, iweight))); + assert (weight); + CCTK_REAL const levfac1 = + 1.0 / prod (rvect (spacereflevelfact)); + levfac = want_level_mode or igrid ? 1.0 : levfac1; + } else { + weight = NULL; + levfac = 1.0; + } + + vector<vector<const void*> > myinarrays (num_tl); + vector<const void* const*> inarrays (num_tl); + for (int tl=0; tl<num_tl; ++tl) { + myinarrays.at(tl).resize (num_invars); + for (int n=0; n<num_invars; ++n) { #if 0 - myinarrays.at(tl).at(n) - = CCTK_VarDataPtrI(cgh, tl, invars[n]); + myinarrays.at(tl).at(n) + = CCTK_VarDataPtrI(cgh, tl, invars[n]); #else - int const vi = invars[n]; - int const gi = CCTK_GroupIndexFromVarI (vi); - int const vi0 = CCTK_FirstVarIndexI (gi); - myinarrays.at(tl).at(n) - = ((*arrdata.at(gi).at(Carpet::map).data.at(vi-vi0)) - (tl, reflevel, component, mglevel)->storage()); + int const vi = invars[n]; + int const gi = CCTK_GroupIndexFromVarI (vi); + int const vi0 = CCTK_FirstVarIndexI (gi); + myinarrays.at(tl).at(n) + = ((*arrdata.at(gi).at(Carpet::map).data.at(vi-vi0)) + (tl, reflevel, local_component, mglevel)->storage()); #endif - assert (myinarrays.at(tl).at(n)); + assert (myinarrays.at(tl).at(n)); + } + inarrays.at(tl) = &myinarrays.at(tl).at(0); } - inarrays.at(tl) = &myinarrays.at(tl).at(0); - } - - - - Reduce (cgh, proc, &mylsh[0], &mybbox[0][0], &mynghostzones[0], - num_invars, inarrays, tfacs, intype, - num_invars * num_outvals, &myoutvals[0], outtype, - &mycounts[0], red, - weight, levfac); - - - - } END_LOCAL_COMPONENT_LOOP; - } LEAVE_SINGLEMAP_MODE; + + + + Reduce (cgh, proc, + &mylsh[0], &mybbox[0][0], &mynghostzones[0], + num_invars, inarrays, tfacs, intype, + num_invars * num_outvals, myoutvals, outtype, + mycounts, red, + weight, levfac); + + + + } END_LOCAL_COMPONENT_LOOP; + } LEAVE_SINGLEMAP_MODE; + } // if maxlc > 0 } // for m } LEAVE_LEVEL_MODE; @@ -1249,7 +1410,7 @@ namespace CarpetReduce { } END_GLOBAL_MODE; Finalise (cgh, proc, num_invars * num_outvals, outvals, outtype, - &myoutvals[0], &mycounts[0], red); + myoutvals, mycounts, red); return 0; } diff --git a/Carpet/CarpetRegrid/README b/Carpet/CarpetRegrid/README index edcf5e710..315d55e0d 100644 --- a/Carpet/CarpetRegrid/README +++ b/Carpet/CarpetRegrid/README @@ -1,7 +1,9 @@ Cactus Code Thorn CarpetRegrid -Authors : Erik Schnetter <schnetter@uni-tuebingen.de> +Author(s) : Erik Schnetter <schnetter@cct.lsu.edu> +Maintainer(s): Erik Schnetter <schnetter@cct.lsu.edu> +Licence : GPLv2+ -------------------------------------------------------------------------- -Purpose of the thorn: +1. Purpose This thorn handles regridding for Carpet. diff --git a/Carpet/CarpetRegrid2/README b/Carpet/CarpetRegrid2/README index fe220ac82..12db67f2d 100644 --- a/Carpet/CarpetRegrid2/README +++ b/Carpet/CarpetRegrid2/README @@ -1,9 +1,10 @@ Cactus Code Thorn CarpetRegrid2 -Thorn Author(s) : Erik Schnetter <schnetter@cct.lsu.edu> -Thorn Maintainer(s) : Erik Schnetter <schnetter@cct.lsu.edu> +Author(s) : Erik Schnetter <schnetter@cct.lsu.edu> +Maintainer(s): Erik Schnetter <schnetter@cct.lsu.edu> +Licence : GPLv2+ -------------------------------------------------------------------------- -Purpose of the thorn: +1. Purpose Set up refined regions by specifying a set of centres and radii about them. The refined regions are then the conjunction of these regions. diff --git a/Carpet/CarpetRegrid2/interface.ccl b/Carpet/CarpetRegrid2/interface.ccl index 6eb913280..f5a32a7f6 100644 --- a/Carpet/CarpetRegrid2/interface.ccl +++ b/Carpet/CarpetRegrid2/interface.ccl @@ -11,6 +11,7 @@ USES INCLUDE HEADER: region.hh USES INCLUDE HEADER: vect.hh USES INCLUDE HEADER: carpet.hh +USES INCLUDE HEADER: CarpetTimers.hh diff --git a/Carpet/CarpetRegrid2/src/regrid.cc b/Carpet/CarpetRegrid2/src/regrid.cc index b0d4c4d7c..85f1c0b83 100644 --- a/Carpet/CarpetRegrid2/src/regrid.cc +++ b/Carpet/CarpetRegrid2/src/regrid.cc @@ -19,6 +19,7 @@ #include <vect.hh> #include <carpet.hh> +#include <CarpetTimers.hh> #include "indexing.hh" @@ -829,6 +830,10 @@ namespace CarpetRegrid2 { DECLARE_CCTK_ARGUMENTS; DECLARE_CCTK_PARAMETERS; + char const * const where = "CarpetRegrid2::Regrid"; + static Carpet::Timer timer (where); + timer.start(); + assert (is_singlemap_mode()); // Decide whether to change the grid hierarchy @@ -950,7 +955,7 @@ namespace CarpetRegrid2 { Regrid (cctkGH, superregss); // Make multiprocessor aware - vector <vector <region_t> > regss; + vector <vector <region_t> > regss (superregss.size()); for (size_t rl = 0; rl < regss.size(); ++ rl) { SplitRegions (cctkGH, superregss.at(rl), regss.at(rl)); } // for rl @@ -973,6 +978,8 @@ namespace CarpetRegrid2 { } // if do_recompose + timer.stop(); + return do_recompose; } @@ -989,6 +996,10 @@ namespace CarpetRegrid2 { DECLARE_CCTK_ARGUMENTS; DECLARE_CCTK_PARAMETERS; + char const * const where = "CarpetRegrid2::RegridMaps"; + static Carpet::Timer timer (where); + timer.start(); + assert (is_level_mode()); // Decide whether to change the grid hierarchy @@ -1161,6 +1172,8 @@ namespace CarpetRegrid2 { } // if do_recompose + timer.stop(); + return do_recompose; } diff --git a/Carpet/CarpetSlab/README b/Carpet/CarpetSlab/README index 04ae8cd8c..983f62701 100644 --- a/Carpet/CarpetSlab/README +++ b/Carpet/CarpetSlab/README @@ -1,7 +1,9 @@ Cactus Code Thorn CarpetSlab -Authors : Erik Schnetter <schnetter@uni-tuebingen.de> +Author(s) : Erik Schnetter <schnetter@cct.lsu.edu> +Maintainer(s): Erik Schnetter <schnetter@cct.lsu.edu> +Licence : GPLv2+ -------------------------------------------------------------------------- -Purpose of the thorn: +1. Purpose This thorn provides hyperslabbing for Carpet. diff --git a/Carpet/CarpetSlab/src/GetHyperslab.cc b/Carpet/CarpetSlab/src/GetHyperslab.cc index 9a4e07117..8f86d8568 100644 --- a/Carpet/CarpetSlab/src/GetHyperslab.cc +++ b/Carpet/CarpetSlab/src/GetHyperslab.cc @@ -196,7 +196,8 @@ namespace CarpetSlab { ++ext_iter) { // Copy data - alldata->copy_from (state, mydata, *ext_iter); + int const proc = myhh->processor(reflevel, component); + alldata->copy_from (state, mydata, *ext_iter, collect_proc, proc); } @@ -207,26 +208,25 @@ namespace CarpetSlab { // Copy result to all processors if (dest_proc == -1) { vector<gdata*> tmpdata(CCTK_nProcs(cgh)); - vector<comm_state> state; for (int proc=0; proc<CCTK_nProcs(cgh); ++proc) { if (proc != collect_proc) { void* myhdata = rank==proc ? hdata : 0; tmpdata.at(proc) = mydata->make_typed (-1, error_centered, op_sync); tmpdata.at(proc)->allocate (alldata->extent(), proc, myhdata); - tmpdata.at(proc)->copy_from (state.at(proc), alldata, alldata->extent()); } } - for (int proc=0; proc<CCTK_nProcs(cgh); ++proc) { - if (proc != collect_proc) { - tmpdata.at(proc)->copy_from (state.at(proc), alldata, alldata->extent()); + for (comm_state state; not state.done(); state.step()) { + for (int proc=0; proc<CCTK_nProcs(cgh); ++proc) { + if (proc != collect_proc) { + tmpdata.at(proc)->copy_from (state, alldata, alldata->extent(), proc, collect_proc); + } } } for (int proc=0; proc<CCTK_nProcs(cgh); ++proc) { if (proc != collect_proc) { - tmpdata.at(proc)->copy_from (state.at(proc), alldata, alldata->extent()); delete tmpdata.at(proc); } } diff --git a/Carpet/CarpetSlab/src/slab.cc b/Carpet/CarpetSlab/src/slab.cc index ba88e16a6..b20566d47 100644 --- a/Carpet/CarpetSlab/src/slab.cc +++ b/Carpet/CarpetSlab/src/slab.cc @@ -228,7 +228,8 @@ namespace CarpetSlab { ++ext_iter) { // Copy data - alldata->copy_from (state, mydata, *ext_iter); + int const proc = myhh->processor(reflevel, component); + alldata->copy_from (state, mydata, *ext_iter, collect_proc, proc); } @@ -239,26 +240,25 @@ namespace CarpetSlab { // Copy result to all processors if (dest_proc == -1) { vector<gdata*> tmpdata(CCTK_nProcs(cgh)); - vector<comm_state> state; for (int proc=0; proc<CCTK_nProcs(cgh); ++proc) { if (proc != collect_proc) { void* myhdata = rank==proc ? hdata : 0; tmpdata.at(proc) = mydata->make_typed (-1, error_centered, op_sync); tmpdata.at(proc)->allocate (alldata->extent(), proc, myhdata); - tmpdata.at(proc)->copy_from (state.at(proc), alldata, alldata->extent()); } } - for (int proc=0; proc<CCTK_nProcs(cgh); ++proc) { - if (proc != collect_proc) { - tmpdata.at(proc)->copy_from (state.at(proc), alldata, alldata->extent()); + for (comm_state state; not state.done(); state.step()) { + for (int proc=0; proc<CCTK_nProcs(cgh); ++proc) { + if (proc != collect_proc) { + tmpdata.at(proc)->copy_from (state, alldata, alldata->extent(), proc, collect_proc); + } } } for (int proc=0; proc<CCTK_nProcs(cgh); ++proc) { if (proc != collect_proc) { - tmpdata.at(proc)->copy_from (state.at(proc), alldata, alldata->extent()); delete tmpdata.at(proc); } } diff --git a/Carpet/CarpetTest/README b/Carpet/CarpetTest/README index cc28f9b36..8b25fe66d 100644 --- a/Carpet/CarpetTest/README +++ b/Carpet/CarpetTest/README @@ -1,8 +1,10 @@ Cactus Code Thorn CarpetTest -Authors : Erik Schnetter <schnetter@uni-tuebingen.de> +Author(s) : Erik Schnetter <schnetter@cct.lsu.edu> +Maintainer(s): Erik Schnetter <schnetter@cct.lsu.edu> +Licence : GPLv2+ -------------------------------------------------------------------------- -Purpose of the thorn: +1. Purpose This thorn contains a few test grid functions, grid arrays, and scalars to test the driver. diff --git a/Carpet/CarpetTracker/README b/Carpet/CarpetTracker/README index 798c9445d..e28e16360 100644 --- a/Carpet/CarpetTracker/README +++ b/Carpet/CarpetTracker/README @@ -1,8 +1,9 @@ Cactus Code Thorn CarpetTracker -Thorn Author(s) : Erik Schnetter <schnetter@cct.lsu.edu> -Thorn Maintainer(s) : Erik Schnetter <schnetter@cct.lsu.edu> +Author(s) : Erik Schnetter <schnetter@cct.lsu.edu> +Maintainer(s): Erik Schnetter <schnetter@cct.lsu.edu> +Licence : GPLv2+ -------------------------------------------------------------------------- -Purpose of the thorn: +1. Purpose Track black holes and update the location of the refinement regions. diff --git a/Carpet/CarpetWeb/CarpetMonth/index.html b/Carpet/CarpetWeb/CarpetMonth/index.html index b967aacfb..663364358 100644 --- a/Carpet/CarpetWeb/CarpetMonth/index.html +++ b/Carpet/CarpetWeb/CarpetMonth/index.html @@ -1,10 +1,10 @@ -<?xml version="1.0" encoding="ISO-8859-15"?> +<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" /> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Carpet Month</title> </head> @@ -103,7 +103,7 @@ <li>Scott Hawley <b>(away)</b></li> <li>Christian Ott <b>(away)</b></li> <li>Werner Benger</li> - <li>Ralf Kähler</li> + <li>Ralf Kähler</li> </ul> diff --git a/Carpet/CarpetWeb/contributors.html b/Carpet/CarpetWeb/contributors.html index f00fc2cc6..7f9255c39 100644 --- a/Carpet/CarpetWeb/contributors.html +++ b/Carpet/CarpetWeb/contributors.html @@ -1,10 +1,10 @@ -<?xml version="1.0" encoding="ISO-8859-15"?> +<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" /> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Carpet Contributors</title> </head> @@ -33,7 +33,7 @@ <tr><td> 17</td> <td><a href="http://www.cct.lsu.edu/~bzink/">Burkhard Zink</a></td></tr> <tr><td> 10</td> <td><a href="http://www.nongnu.org/cvs/">cvs_anon</a></td></tr> <tr><td> 5</td> <td>Luca Baiotti</td></tr> - <tr><td> 2</td> <td><a href="http://www.aei.mpg.de/~knarf/">Frank Löffler</a></td></tr> + <tr><td> 2</td> <td><a href="http://www.aei.mpg.de/~knarf/">Frank Löffler</a></td></tr> </table> diff --git a/Carpet/CarpetWeb/design-walkthrough.html b/Carpet/CarpetWeb/design-walkthrough.html index e453e8238..f39954d3f 100644 --- a/Carpet/CarpetWeb/design-walkthrough.html +++ b/Carpet/CarpetWeb/design-walkthrough.html @@ -1,10 +1,10 @@ -<?xml version="1.0" encoding="ISO-8859-15"?> +<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> -<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" /> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Carpet Design Walkthrough</title> </head> <body> diff --git a/Carpet/CarpetWeb/feature-requests.html b/Carpet/CarpetWeb/feature-requests.html index 606eee0bc..4156a859e 100644 --- a/Carpet/CarpetWeb/feature-requests.html +++ b/Carpet/CarpetWeb/feature-requests.html @@ -1,10 +1,10 @@ -<?xml version="1.0" encoding="ISO-8859-15"?> +<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" /> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Carpet Feature Requests</title> </head> diff --git a/Carpet/CarpetWeb/get-carpet.html b/Carpet/CarpetWeb/get-carpet.html index 9d6d909ca..319d8291f 100644 --- a/Carpet/CarpetWeb/get-carpet.html +++ b/Carpet/CarpetWeb/get-carpet.html @@ -1,10 +1,10 @@ -<?xml version="1.0" encoding="ISO-8859-15"?> +<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" /> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Obtaining Carpet</title> </head> @@ -153,8 +153,8 @@ up with a fully functional local repository.</p> <p>We thank - the <a href="http://www.tat.physik.cct.lsu.edu/">Institut für - Astronomie und Astrophysik</a> of the Universität Tübingen for + the <a href="http://www.tat.physik.cct.lsu.edu/">Institut für + Astronomie und Astrophysik</a> of the Universität Tübingen for hosting the CVS and darcs servers.</p> <h3>Git Repository</h3> diff --git a/Carpet/CarpetWeb/index.html b/Carpet/CarpetWeb/index.html index 44f987855..236defe56 100644 --- a/Carpet/CarpetWeb/index.html +++ b/Carpet/CarpetWeb/index.html @@ -5,17 +5,20 @@ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>CarpetCode</title> + <title>Carpet — AMR for Cactus</title> </head> <body> - <h1 align="center">CarpetCode</h1> + <h1 align="center">Carpet — Adaptive Mesh Refinement for the + Cactus Framework</h1> <table> <tr> <td valign="top" bgcolor="#ffcc77" width="1%"> +<a href="logo/Sierpinski.pdf"><img src="logo/Sierpinski.png" width="150" alt="Carpet logo (a SierpiÅ„ski carpet)" /></a> + <p><b>CarpetCode</b><br /> <a href="http://www.carpetcode.org/">home page</a></p> @@ -47,7 +50,7 @@ <a href="https://mailserv.aei.mpg.de/mailman/listinfo/visualization/">Mailing List</a></p> <p><b>Results</b><br /> -<a href="publications.html">Publications</a></p> +<a href="publications/publications.html">Publications</a></p> <p><b>Related</b><br /> <a href="http://www.cactuscode.org/">Cactus</a><br /> @@ -56,13 +59,14 @@ <a href="http://numrel.aei.mpg.de/">numrel@aei</a><br /> <a href="http://www.whiskycode.org/">Whisky</a><br /> <a href="http://relativity.phys.lsu.edu/postdocs/matt/taka.php">Taka</a><br /> -<a href="http://sbir.nasa.gov/SBIR/abstracts/05/sttr/phase1/STTR-05-1-T4.02-9864.html?solicitationId=STTR_05_P1">parca</a></p> +<a href="http://sbir.nasa.gov/SBIR/abstracts/05/sttr/phase1/STTR-05-1-T4.02-9864.html?solicitationId=STTR_05_P1">ParCa</a></p> <p><b>Carpet Users</b><br /> <a href="http://numrel.aei.mpg.de/">AEI Potsdam</a><br /> <!-- <a href="http://www.as.arizona.edu/">University of Arizona</a><br /> --> <!-- <a href="http://www.astro.auth.gr/Science-Subjects/Gravity.html">AUTH</a><br /> --> <a href="http://www.tapir.caltech.edu/">Caltech</a><br /> +<!-- <a href="http://astrosun2.astro.cornell.edu/research/projects/blackholes/">Cornell</a><br /> --> <a href="http://www.cra.gatech.edu/">Georgia Tech</a><br /> <a href="http://ww2.tpi.uni-jena.de/gravity/">Jena</a><br /> <a href="http://www.kisti.re.kr/english/">KISTI</a><br /> @@ -80,7 +84,8 @@ <a href="http://research.physics.uiuc.edu/CTA/IRG/">UIUC</a><br /> <a href="http://www.nuclecu.unam.mx/~gravit/Gravit/">UNAM</a><br /> <!-- <a href="http://cgwa.phys.utb.edu/">UTB</a><br /> --> -<a href="http://wugrav.wustl.edu/">WashU</a></p> +<a href="http://wugrav.wustl.edu/">WashU</a><br /> +<a href="http://www.yukawa.kyoto-u.ac.jp/english/contents/labs/astro.html">YITP</a></p> <p><b>Feedback</b><br /> <a href="mailto:schnetter@carpetcode.org">Send email</a></p> @@ -88,7 +93,7 @@ </td> <td valign="top"> - <p>Carpet is an adaptive mesh refinement driver for + <p>Carpet is an adaptive mesh refinement and multi-patch driver for the <a href="http://www.cactuscode.org/">Cactus Framework</a>. Cactus is a software framework for solving time-dependent partial differential equations on block-structured grids, and Carpet acts @@ -114,248 +119,127 @@ <h2>News</h2> <table><tr><td valign="top"> - <p><b>March 29, 2008:</b> We have benchmarked McLachlan, a new - BSSN-type vacuum Einstein code, using Carpet for unigrid and AMR - calculations. We compare several current large machines: - Franklin (NERSC), Queen Bee (LONI), and Ranger (TACC). - <!-- These machines have different architectures and - interconnects.--></p> - </td><td valign="top"> - <p><a - href="scaling-amr/results-carpet-1lev.pdf"><img - src="scaling-amr/results-carpet-1lev.png" width="180" - alt="Unigrid benchmark results"/></a></p> + <p><b>March 30, 2009:</b> We have ported Carpet to + the <a href="http://www-03.ibm.com/systems/deepcomputing/bluegene/">BlueGene/P</a> + architecture, using + the <a href="http://www.alcf.anl.gov/resources/storage.php">Surveyor</a> + system at the <a href="http://www.alcf.anl.gov/">ALCF</a>. The + graph to the right shows preliminary performance and scaling + results, comparing different compilers and options + (<a href="http://gcc.gnu.org/">gcc</a>, <a href="http://www.ibm.com/software/awdtools/xlcpp/">IBM's + XL compilers</a> without OpenMP, and IBM's XL compilers + with <a href="http://www.openmp.org/">OpenMP</a>, which required + reducing the optimisation level). For these benchmarks, the + problem size was reduced to about one eighth of the standard + size, using 13<sup>3</sup> grid points per core. The results + show that Carpet scales fine up to the size of the total machine + (4k cores), but further work on compiler options is + required.</p> </td><td valign="top"> - <p><a - href="scaling-amr/results-carpet-9lev.pdf"><img - src="scaling-amr/results-carpet-9lev.png" width="180" - alt="AMR benchmark results"/></a></p> + <p><a href="scaling-surveyor/results-surveyor.pdf"><img + src="scaling-surveyor/results-surveyor.png" + width="180" alt="AMR benchmark results" /></a></p> </td></tr></table> <table><tr><td valign="top"> - <p><b>March 1, 2008:</b> Carpet has a logo! This logo is - a <a href="http://en.wikipedia.org/wiki/Sierpinski_carpet">SierpiÅ„ski - carpet</a>, which is a fractal pattern with - a <a href="http://en.wikipedia.org/wiki/Hausdorff_dimension">Hausdorff - dimension</a> of 1.89279.</p> + <p><b>March 20, 2009:</b> Carpet can now perform <i>performance + experiments</i> by artificially increasing the size or the + number of MPI messages exchanged between processes. This can + help determine whether either the communication bandwidth or the + communication latency are a bottleneck of a particular + simulation. The figure to the right shows results for the + standard <a href="http://www.cct.lsu.edu/~eschnett/McLachlan/">McLachlan</a> + AMR benchmark run on + the <a href="http://en.wikipedia.org/wiki/Cray_XT4">Cray XT4</a> + <a href="http://www.nics.tennessee.edu/computing-resources/kraken">Kraken</a>, using 25<sup>3</sup> grid points per core. These + results indicate that the additional latency from increasing the + number of messages has no significant effect, and hence the + benchmark is bandwidth limited for this problem size.</p> </td><td valign="top"> - <p><a href="logo/Sierpinski.pdf"><img src="logo/Sierpinski.png" - width="100" alt="Carpet logo (a SierpiÅ„ski - carpet)"/></a></p> + <p><a href="scaling-whatif/results-whatif.pdf"><img + src="scaling-whatif/results-whatif.png" + width="180" alt="AMR benchmark results" /></a></p> </td></tr></table> - - <p><b>March 1, 2008:</b> We have improved the development version - of Carpet significantly:<br /></p> - <ul> - <li><p>The data structures and algorithms storing and handling - the communication schedule are much more efficient on large - numbers (several hundred or more) processors. This makes Carpet - scale to more than 8,000 cores.</p></li> - - <li><p>The interface for defining and making dynamic changes to - grid hierarchies is simpler, and buffer zones are handled in a - cleaner manner. This makes it easier to write user code which - defines or updates the grid hierarchy, and reduces the chance of - inconsistencies therein.</p></li> - - <li><p>During checkpointing and recovery, the grid structure is - saved and restored by default. This avoids accidental changes - upon recovery.</p></li> - - <li><p>The efficiency of I/O has been increased, especially for - HDF5 based binary I/O. It is possible to combine several - variables into one file to reduce the number of output - files.</p></li> - - <li><p>A new thorn LoopControl offers iterators over grid - points, implemented as C-style macros. These iterators allow - additional important loop-level optimisations, such - as <a href="http://en.wikipedia.org/wiki/Loop_tiling">loop - tiling</a> or - <a href="http://www.openmp.org/">OpenMP</a> parallelisation. - Efficient cache handling and hybrid communication models have a - large potential for performance improvements on current and - future architectures.</p></li> - </ul> - <p>More details can be found <a href="version-4.html">here</a>. - These improvements are largely due - to <a href="http://www.cct.lsu.edu/~eschnett/">Erik Schnetter</a> - (LSU), - <a href="http://www.aei.mpg.de/~tradke/">Thomas Radke</a> (AEI), and - <a href="http://www.tapir.caltech.edu/~cott/">Christian D. Ott</a> - (UA). Special thanks go to Christian Reisswig and Luca - Baiotti.</p> - - <p><b>March 1, 2008:</b> The development version of Carpet is now - maintained using <a href="http://git.or.cz/">git</a> instead - of <a href="http://www.darcs.net/">darcs</a>. Git offers a very - similar set of features to darcs, most importantly supporting - decentralised development. Git has a much larger user community - than darcs, and we hope that this makes it easier to use. - The <a href="get-carpet.html">download instructions</a> contain - details on using git to obtain Carpet, and point to further - information. (The darcs repository for the development version - will not see any further changes.)</p> - - <p><b>March 1, 2008:</b> The repository for the development - version of Carpet moved today to - a <a href="http://carpetcode.dyndns.org/">new server</a>. The - stable versions of Carpet continue to be served from the old - server for the time being. We plan to move all of carpetcode.org - to this new server in the future. The new server is a courtesy - of <a href="http://www.tapir.caltech.edu/~cott/">Christian - D. Ott</a>.</p> - + <table><tr><td valign="top"> - <p><b>January 14, 2008:</b> Carpet's communication - infrastructure has been improved significantly, making Carpet - scale to at least 4,000 processors, including mesh refinement. - Using "friendly user time" - on <a - href="http://www.tacc.utexas.edu/services/userguides/ranger/">Ranger</a>, - the new 60,000 - core <a href="http://www.teragrid.org/">TeraGrid</a> - supercomputer - at <a href="http://www.tacc.utexas.edu/">TACC</a>, we measured - the benchmark results below for a numerical relativity kernel - solving the BSSN equations. These benchmarks emply a hybrid - communication scheme - combining <a href="http://www-unix.mcs.anl.gov/mpi/">MPI</a> - and - <a href="http://www.openmp.org/">OpenMP</a>, using the shared - memory capabilities of Ranger's nodes to reduce the memory - overhead of parallelisation. We are grateful for the help we - received from Ranger's support team.</p> - <p>The graph below shows weak scaling tests for both unigrid and - mesh refinement benchmarks. The problem size per core was - kept fixed, and there were 4 OpenMP threads per MPI process, - with 1 MPI process per socket. The benchmark was also run - with the PUGH driver for comparison for certain core counts. - As the graphs show, this benchmark scales near perfectly for - unigrid, and has only small variations in run time for nine - levels of mesh refinement.</p> + <p><b>March 16, 2009:</b> Erik Schnetter and Steve Brandt + published a white + paper <a href="http://www.cct.lsu.edu/CCT-TR/CCT-TR-2009-4"><i>Relativistic + Astrophysics on the SiCortex Architecture</i></a>. This paper + expands on a + <a href="http://www.sicortex.com/news_events/campaigns/lsu_webinar">webinar</a> + by Erik and Steve that was hosted + by <a href="http://www.sicortex.com/">SiCortex</a>.</p> + <p>The graph at the right shows Carpet's parallel scalability + using + the <a href="http://www.cct.lsu.edu/~eschnett/McLachlan/">McLachlan</a> + code with nine levels of AMR for a set of current HPC systems. + The results have been rescaled to the architectures' theoretical + single-core peak performance. This makes it possible to compare + Carpet's scalability on different architectures. (It is not + possible to compare the systems' absolute performance in this + figure.)</p> </td><td valign="top"> - <p><a - href="scaling-ranger/results-ranger.pdf"><img - src="scaling-ranger/results-ranger.png" width="234" - alt="Scaling graph for Ranger"/></a></p> + <p><a href="sicortex/results-scaled.pdf"><img + src="sicortex/results-scaled.png" + width="180" alt="AMR benchmark results" /></a></p> + </td></tr></table> + + <table><tr><td valign="top"> + <p><b>November 9, 2008:</b> In the context of + the <a href="http://www.cct.lsu.edu/xirel/">XiRel project</a>, + we re-designed Carpet's communication layer to avoid many + operations that had a cost of O(<var>N</var>), growing linearly + with the number of MPI processes. Such costs are generally not + acceptable when running on several thousand cores, and have to + be reduced e.g. to O(log <var>N</var>). Carpet now stores the + communication schedule (mostly) in a distributed manner, + increasing performance and reducing its memory requirement. + These improvements are currently being tested; preliminary + scaling results are shown in the figure to the right.</p> + </td><td valign="top"> + <p><a href="scaling-improved/results-best.pdf"><img + src="scaling-improved/results-best.png" + width="180" alt="AMR benchmark results" /></a></p> </td></tr></table> -<!-- - <p><b>October 4, 2007:</b> Announcement: <i>The BBH factory</i><br /> - <b>Physicist version:</b> The BBH factory is a glorified set of shell - scripts which help maintaining source code on different machines - and building Cactus executables there. They also simplify the - task of managing many simulations on many machines and try to - prevent stupid errors.<br /> - <b>Computer scientist version:</b> The BBH factory is a set of - abstractions over the various low-level interface that current - supercomputers offer for maintaining source code and performing - simulations. As middleware, they encompass policies and best - practices that prevent common human errors. They would also be - well suited for implementing graphical user interfaces.</p> ---> - - <p><b>October 3, 2007:</b> Carpet's timing infrastructure has been - extended to automatically measure both time spent computing and - time spent in I/O. The performance of large simulations depends - not only on the computational efficiency and communication - latency, but also on the throughput to file servers. These new - statistics give a real-time overview and can point out - performance problems. The statistics are collected in the - existing <tt>Carpet::timing</tt> variables.</p> - - <p><b>August 30, 2007:</b> So far this year, ten of the - publications from three research groups examining the dynamics - of binary black hole systems are based on simulations performed - with Cactus and Carpet:<br /> - - <a href="http://www.journals.uchicago.edu/ApJ/journal/issues/ApJ/v661n1/71342/71342.html">Astrophys. J. <b>661</b>, 430-436 (2007)</a> - (<a href="http://arxiv.org/abs/gr-qc/0701143">arXiv:gr-qc/0701143</a>)<br /> - - <a href="http://link.aps.org/abstract/PRL/v99/e041102">Phys. Rev. Lett. <b>99</b>, 041102 (2007)</a> - (<a href="http://arxiv.org/abs/gr-qc/0701163">arXiv:gr-qc/0701163</a>)<br /> - - <a href="http://www.journals.uchicago.edu/ApJ/journal/issues/ApJL/v659n1/21515/brief/21515.abstract.html">Astrophys. J. <b>659</b>, L5-L8 (2007)</a> - (<a href="http://arxiv.org/abs/gr-qc/0701164">arXiv:gr-qc/0701164</a>)<br /> - - <a href="http://link.aps.org/abstract/PRL/v98/e231102">Phys. Rev. Lett. <b>98</b>, 231102 (2007)</a> - (<a href="http://arxiv.org/abs/gr-qc/0702133">arXiv:gr-qc/0702133</a>)<br /> - - <a href="http://www.iop.org/EJ/abstract/0264-9381/24/15/009/">Class. Quantum Grav. <b>24</b>, 3911-3918 (2007)</a> - (<a href="http://arxiv.org/abs/gr-qc/0701038">arXiv:gr-qc/0701038</a>)<br /> - - <a href="http://arxiv.org/abs/0705.3829">arXiv:0705.3829 [gr-qc]</a><br /> - - <a href="http://arxiv.org/abs/0706.2541">arXiv:0706.2541 [gr-qc]</a><br /> - - <a href="http://arxiv.org/abs/0707.2559">arXiv:0707.2559 [gr-qc]</a><br /> - - <a href="http://arxiv.org/abs/0708.3999">arXiv:0708.3999 [gr-qc]</a><br /> - - <a href="http://arxiv.org/abs/0708.4048">arXiv:0708.4048 [gr-qc]</a><br /> - These publications mainly examine the spin dynamics and the - gravitational wave recoil in BBH systems. Since not all - research groups use Cactus and Carpet, this represents only part - of the published work on this subject.</p> + <p><b>June 25, 2008:</b> We are happy to announce + the <a href="http://www.cct.lsu.edu/~eschnett/SimFactory"><i>Simulation + Factory</i></a>, a tool to help access remote HPC systems, + manage source trees, and submit and control simulations. The + Simulation Factory contains a set of abstractions of the tasks + which are necessary to set up and successfully finish numerical + simulations using the Cactus framework. These abstractions hide + tedious low-level management tasks, they capture "best + practices" of experienced users, and they create a log trail + ensuring repeatable and well-documented scientific results. + Using these abstractions, many types of potentially disastrous + user errors are avoided, and different supercomputers can be + used in a uniform manner.</p> <table><tr><td valign="top"> - <p><b>August 26, 2007:</b> In experiments with hybrid - communication schemes - combining <a href="http://www-unix.mcs.anl.gov/mpi/">MPI</a> - and - <a href="http://www.openmp.org/">OpenMP</a>, we found a 20% - speed improvement when using a single node - of <a - href="http://www.ncsa.uiuc.edu/UserInfo/Resources/Hardware/Intel64Cluster/">Abe</a> - at <a href="http://www.ncsa.uiuc.edu">NCSA</a>, and a - substantial scaling improvement when using 1024 and more CPUs. - (Abe has 8 CPUs per node.) These experiments included cache - optimisations when traversing the 3D arrays. The tests were - performed with a modified version of - the <a - href="http://www.cactuscode.org/">Cactus</a> <a - href="http://www.cactuscode.org/WaveToyDemo/">WaveToy</a> - example application without using I/O or analysis methods.</p> + <p><b>March 29, 2008:</b> We have benchmarked McLachlan, a new + BSSN-type vacuum Einstein code, using Carpet for unigrid and AMR + calculations. We compare several current large machines: + <a href="http://www.nersc.gov/nusers/systems/franklin/">Franklin</a> + (NERSC), <a href="http://www.loni.org/systems/system.php?system=QueenBee">Queen + Bee</a> (LONI), + and <a href="http://www.tacc.utexas.edu/services/userguides/ranger/">Ranger</a> + (TACC). + <!-- These machines have different architectures and + interconnects.--></p> </td><td valign="top"> <p><a - href="hybrid-scaling/results-wavetoy-abe.pdf"><img - src="hybrid-scaling/results-wavetoy-abe.png" width="200" - alt="Scaling graph for Abe"/></a></p> + href="scaling-amr/results-carpet-1lev.pdf"><img + src="scaling-amr/results-carpet-1lev.png" width="180" + alt="Unigrid benchmark results" /></a></p> + </td><td valign="top"> + <p><a + href="scaling-amr/results-carpet-9lev.pdf"><img + src="scaling-amr/results-carpet-9lev.png" width="180" + alt="AMR benchmark results" /></a></p> </td></tr></table> - <p><b>August 15, 2007:</b> We are happy to hear that our - proposal <i>ALPACA: Cactus tools for Application Level Profiling - And Correctness Analysis</i> will be funded by - <a - href="http://www.nsf.gov/">NSF's</a> <a - href="http://www.nsf.gov/publications/pub_summ.jsp?ods_key=nsf07503">SDCI</a> - programme for three years. - The <a - href="http://www.cactuscode.org/Development/alpaca">ALPACA</a> - project is aiming at developing complex, collaborative - scientific applications, appropriate for highly scalable - hardware architectures, providing fault tolerance, advanced - debugging, and transparency against new developments in - communication, programming, and execution models. Such tools - are especially rare at the application level, where they are - most critically needed.</p> - - <p><b>July 31, 2007:</b> We are happy to hear that our - proposal <i>XiRel: Cyberinfrastructure for Numerical - Relativity</i> will be funded by - <a href="http://www.nsf.gov/">NSF's</a> <a href="http://www.nsf.gov/funding/pgm_summ.jsp?pims_id=6681">PIF</a> - programme for three - years. <a href="http://www.cct.lsu.edu/xirel/">XiRel</a> is - collaborative proposal - by <a href="http://www.cct.lsu.edu/">LSU</a>, <a href="http://gravity.psu.edu/numrel/">PSU</a>, - and <a href="http://www.phys.utb.edu/numrel/">UTB</a> - (now <a href="http://ccrg.rit.edu/">RIT</a>). The central goal of - XiRel is the development of a highly scalable, efficient, and - accurate adaptive mesh refinement layer based on the current - Carpet driver, which will be fully integrated and supported in - Cactus and optimised for numerical relativity.</p> - <p><a href="olds.html"><b>Old News...</b></a></p> <hr /> @@ -436,7 +320,7 @@ <td valign="top" width="10%"> <p><a href="pictures/meudon-lapse-height.png"><img src="pictures/thumbnail-meudon-lapse-height.png" height="80" - width="80" alt="lapse height field"/></a></p> + width="80" alt="lapse height field" /></a></p> </td> <td valign="top" width="38%"> @@ -606,7 +490,7 @@ <p> <!-- Created: Tue Aug 12 12:12:08 CEST 2003 --> <!-- hhmts start --> -Last modified: Sat Mar 01 2008 +Last modified: Mon Mar 30 2009 <!-- hhmts end --> </p> diff --git a/Carpet/CarpetWeb/logo/Sierpinski.pl b/Carpet/CarpetWeb/logo/Sierpinski.pl index b2970aa1d..b2970aa1d 100755..100644 --- a/Carpet/CarpetWeb/logo/Sierpinski.pl +++ b/Carpet/CarpetWeb/logo/Sierpinski.pl diff --git a/Carpet/CarpetWeb/olds.html b/Carpet/CarpetWeb/olds.html index 8bd58f747..1d29d2cc8 100644 --- a/Carpet/CarpetWeb/olds.html +++ b/Carpet/CarpetWeb/olds.html @@ -1,10 +1,10 @@ -<?xml version="1.0" encoding="ISO-8859-15"?> +<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" /> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Old News</title> </head> @@ -14,6 +14,217 @@ <p><a href="index.html"><b>New News...</b></a></p> + <table><tr><td valign="top"> + <p><b>March 1, 2008:</b> Carpet has a logo! This logo is + a <a href="http://en.wikipedia.org/wiki/Sierpinski_carpet">SierpiÅ„ski + carpet</a>, which is a fractal pattern with + a <a href="http://en.wikipedia.org/wiki/Hausdorff_dimension">Hausdorff + dimension</a> of 1.89279.</p> + </td><td valign="top"> + <p><a href="logo/Sierpinski.pdf"><img src="logo/Sierpinski.png" + width="100" alt="Carpet logo (a SierpiÅ„ski + carpet)" /></a></p> + </td></tr></table> + + <p><b>March 1, 2008:</b> We have improved the development version + of Carpet significantly:<br /></p> + <ul> + <li><p>The data structures and algorithms storing and handling + the communication schedule are much more efficient on large + numbers (several hundred or more) processors. This makes Carpet + scale to more than 8,000 cores.</p></li> + + <li><p>The interface for defining and making dynamic changes to + grid hierarchies is simpler, and buffer zones are handled in a + cleaner manner. This makes it easier to write user code which + defines or updates the grid hierarchy, and reduces the chance of + inconsistencies therein.</p></li> + + <li><p>During checkpointing and recovery, the grid structure is + saved and restored by default. This avoids accidental changes + upon recovery.</p></li> + + <li><p>The efficiency of I/O has been increased, especially for + HDF5 based binary I/O. It is possible to combine several + variables into one file to reduce the number of output + files.</p></li> + + <li><p>A new thorn LoopControl offers iterators over grid + points, implemented as C-style macros. These iterators allow + additional important loop-level optimisations, such + as <a href="http://en.wikipedia.org/wiki/Loop_tiling">loop + tiling</a> or + <a href="http://www.openmp.org/">OpenMP</a> parallelisation. + Efficient cache handling and hybrid communication models have a + large potential for performance improvements on current and + future architectures.</p></li> + </ul> + <p>More details can be found <a href="version-4.html">here</a>. + These improvements are largely due + to <a href="http://www.cct.lsu.edu/~eschnett/">Erik Schnetter</a> + (LSU), + <a href="http://www.aei.mpg.de/~tradke/">Thomas Radke</a> (AEI), and + <a href="http://www.tapir.caltech.edu/~cott/">Christian D. Ott</a> + (UA). Special thanks go to Christian Reisswig and Luca + Baiotti.</p> + + <p><b>March 1, 2008:</b> The development version of Carpet is now + maintained using <a href="http://git.or.cz/">git</a> instead + of <a href="http://www.darcs.net/">darcs</a>. Git offers a very + similar set of features to darcs, most importantly supporting + decentralised development. Git has a much larger user community + than darcs, and we hope that this makes it easier to use. + The <a href="get-carpet.html">download instructions</a> contain + details on using git to obtain Carpet, and point to further + information. (The darcs repository for the development version + will not see any further changes.)</p> + + <p><b>March 1, 2008:</b> The repository for the development + version of Carpet moved today to + a <a href="http://carpetcode.dyndns.org/">new server</a>. The + stable versions of Carpet continue to be served from the old + server for the time being. We plan to move all of carpetcode.org + to this new server in the future. The new server is a courtesy + of <a href="http://www.tapir.caltech.edu/~cott/">Christian + D. Ott</a>.</p> + + <table><tr><td valign="top"> + <p><b>January 14, 2008:</b> Carpet's communication + infrastructure has been improved significantly, making Carpet + scale to at least 4,000 processors, including mesh refinement. + Using "friendly user time" + on <a + href="http://www.tacc.utexas.edu/services/userguides/ranger/">Ranger</a>, + the new 60,000 + core <a href="http://www.teragrid.org/">TeraGrid</a> + supercomputer + at <a href="http://www.tacc.utexas.edu/">TACC</a>, we measured + the benchmark results below for a numerical relativity kernel + solving the BSSN equations. These benchmarks emply a hybrid + communication scheme + combining <a href="http://www-unix.mcs.anl.gov/mpi/">MPI</a> + and + <a href="http://www.openmp.org/">OpenMP</a>, using the shared + memory capabilities of Ranger's nodes to reduce the memory + overhead of parallelisation. We are grateful for the help we + received from Ranger's support team.</p> + <p>The graph below shows weak scaling tests for both unigrid and + mesh refinement benchmarks. The problem size per core was + kept fixed, and there were 4 OpenMP threads per MPI process, + with 1 MPI process per socket. The benchmark was also run + with the PUGH driver for comparison for certain core counts. + As the graphs show, this benchmark scales near perfectly for + unigrid, and has only small variations in run time for nine + levels of mesh refinement.</p> + </td><td valign="top"> + <p><a + href="scaling-ranger/results-ranger.pdf"><img + src="scaling-ranger/results-ranger.png" width="234" + alt="Scaling graph for Ranger" /></a></p> + </td></tr></table> + + <hr /> + + <p><b>October 3, 2007:</b> Carpet's timing infrastructure has been + extended to automatically measure both time spent computing and + time spent in I/O. The performance of large simulations depends + not only on the computational efficiency and communication + latency, but also on the throughput to file servers. These new + statistics give a real-time overview and can point out + performance problems. The statistics are collected in the + existing <tt>Carpet::timing</tt> variables.</p> + + <p><b>August 30, 2007:</b> So far this year, ten of the + publications from three research groups examining the dynamics + of binary black hole systems are based on simulations performed + with Cactus and Carpet:<br /> + + <a href="http://www.journals.uchicago.edu/ApJ/journal/issues/ApJ/v661n1/71342/71342.html">Astrophys. J. <b>661</b>, 430-436 (2007)</a> + (<a href="http://arxiv.org/abs/gr-qc/0701143">arXiv:gr-qc/0701143</a>)<br /> + + <a href="http://link.aps.org/abstract/PRL/v99/e041102">Phys. Rev. Lett. <b>99</b>, 041102 (2007)</a> + (<a href="http://arxiv.org/abs/gr-qc/0701163">arXiv:gr-qc/0701163</a>)<br /> + + <a href="http://www.journals.uchicago.edu/ApJ/journal/issues/ApJL/v659n1/21515/brief/21515.abstract.html">Astrophys. J. <b>659</b>, L5-L8 (2007)</a> + (<a href="http://arxiv.org/abs/gr-qc/0701164">arXiv:gr-qc/0701164</a>)<br /> + + <a href="http://link.aps.org/abstract/PRL/v98/e231102">Phys. Rev. Lett. <b>98</b>, 231102 (2007)</a> + (<a href="http://arxiv.org/abs/gr-qc/0702133">arXiv:gr-qc/0702133</a>)<br /> + + <a href="http://www.iop.org/EJ/abstract/0264-9381/24/15/009/">Class. Quantum Grav. <b>24</b>, 3911-3918 (2007)</a> + (<a href="http://arxiv.org/abs/gr-qc/0701038">arXiv:gr-qc/0701038</a>)<br /> + + <a href="http://arxiv.org/abs/0705.3829">arXiv:0705.3829 [gr-qc]</a><br /> + + <a href="http://arxiv.org/abs/0706.2541">arXiv:0706.2541 [gr-qc]</a><br /> + + <a href="http://arxiv.org/abs/0707.2559">arXiv:0707.2559 [gr-qc]</a><br /> + + <a href="http://arxiv.org/abs/0708.3999">arXiv:0708.3999 [gr-qc]</a><br /> + + <a href="http://arxiv.org/abs/0708.4048">arXiv:0708.4048 [gr-qc]</a><br /> + These publications mainly examine the spin dynamics and the + gravitational wave recoil in BBH systems. Since not all + research groups use Cactus and Carpet, this represents only part + of the published work on this subject.</p> + + <table><tr><td valign="top"> + <p><b>August 26, 2007:</b> In experiments with hybrid + communication schemes + combining <a href="http://www-unix.mcs.anl.gov/mpi/">MPI</a> + and + <a href="http://www.openmp.org/">OpenMP</a>, we found a 20% + speed improvement when using a single node + of <a + href="http://www.ncsa.uiuc.edu/UserInfo/Resources/Hardware/Intel64Cluster/">Abe</a> + at <a href="http://www.ncsa.uiuc.edu">NCSA</a>, and a + substantial scaling improvement when using 1024 and more CPUs. + (Abe has 8 CPUs per node.) These experiments included cache + optimisations when traversing the 3D arrays. The tests were + performed with a modified version of + the <a + href="http://www.cactuscode.org/">Cactus</a> <a + href="http://www.cactuscode.org/WaveToyDemo/">WaveToy</a> + example application without using I/O or analysis methods.</p> + </td><td valign="top"> + <p><a + href="hybrid-scaling/results-wavetoy-abe.pdf"><img + src="hybrid-scaling/results-wavetoy-abe.png" width="200" + alt="Scaling graph for Abe" /></a></p> + </td></tr></table> + + <p><b>August 15, 2007:</b> We are happy to hear that our + proposal <i>ALPACA: Cactus tools for Application Level Profiling + And Correctness Analysis</i> will be funded by + <a + href="http://www.nsf.gov/">NSF's</a> <a + href="http://www.nsf.gov/publications/pub_summ.jsp?ods_key=nsf07503">SDCI</a> + programme for three years. + The <a + href="http://www.cactuscode.org/Development/alpaca">ALPACA</a> + project is aiming at developing complex, collaborative + scientific applications, appropriate for highly scalable + hardware architectures, providing fault tolerance, advanced + debugging, and transparency against new developments in + communication, programming, and execution models. Such tools + are especially rare at the application level, where they are + most critically needed.</p> + + <p><b>July 31, 2007:</b> We are happy to hear that our + proposal <i>XiRel: Cyberinfrastructure for Numerical + Relativity</i> will be funded by + <a href="http://www.nsf.gov/">NSF's</a> <a href="http://www.nsf.gov/funding/pgm_summ.jsp?pims_id=6681">PIF</a> + programme for three + years. <a href="http://www.cct.lsu.edu/xirel/">XiRel</a> is + collaborative proposal + by <a href="http://www.cct.lsu.edu/">LSU</a>, <a href="http://gravity.psu.edu/numrel/">PSU</a>, + and <a href="http://www.phys.utb.edu/numrel/">UTB</a> + (now <a href="http://ccrg.rit.edu/">RIT</a>). The central goal of + XiRel is the development of a highly scalable, efficient, and + accurate adaptive mesh refinement layer based on the current + Carpet driver, which will be fully integrated and supported in + Cactus and optimised for numerical relativity.</p> + <p><b>February 26, 2007:</b> The thorn <tt>LSUPETSc</tt> implements a generic elliptic solver for Carpet's multi-patch infrastructure, based diff --git a/Carpet/CarpetWeb/publications.html b/Carpet/CarpetWeb/publications.html deleted file mode 100644 index 4cc367634..000000000 --- a/Carpet/CarpetWeb/publications.html +++ /dev/null @@ -1,1040 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE html - PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> - <head> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title>Publications using Carpet</title> - </head> - - <body> - - <h1 align="center">Publications using Carpet</h1> - - <h2>How to cite Carpet</h2> - - <p>Thank you for using Carpet. - When you write a publication using data produced with the help - Cactus or Carpet, consider citing the following if - appropriate:</p> - -<ol> - -<li> -<p>Tom Goodale, Gabrielle Allen, Gerd Lanfermann, Joan Massó, Thomas - Radke, Edward Seidel, John Shalf,<br /> -<i>The Cactus Framework and Toolkit: Design and Applications,</i><br /> -in: Vector and Parallel Processing - VECPAR'2002, 5th International -Conference, Lecture Notes in Computer Science, -Springer, Berlin 2003 -<a href="http://www.springerlink.com/content/2fapcbeyyc1xg0mm/">(Springer)</a> -<a - href="http://www.cactuscode.org/Articles/Cactus_Goodale03a.pre.pdf">(PDF, - 269 kB)</a>.</p> -</li> - -<li> -<p>Cactus web site,<br /> - URL <a - href="http://www.cactuscode.org/">http://www.cactuscode.org/</a>.</p> -</li> - -<li> -<p>Erik Schnetter, Scott H. Hawley, Ian Hawke,<br /> -<i>Evolutions in 3D numerical relativity using fixed mesh - refinement,</i><br /> -<a href="http://dx.doi.org/10.1088/0264-9381/21/6/014">Class. Quantum - Grav. <b>21</b>, 1465-1488 (2004)</a>,<br /> -<a href="http://arxiv.org/abs/gr-qc/0310042">arXiv:gr-qc/0310042</a>.</p> -</li> - -<li> -<p>Carpet web site,<br /> - URL <a - href="http://www.carpetcode.org/">http://www.carpetcode.org/</a>.</p> -</li> - -</ol> - - <p><a href="http://www.citebase.org/">Citebase</a> collects - statistics about citations - of <a href="http:www.arXiv.org/">arXiv.org</a> eprints. Its entry - for the - original <a - href="http://www.citebase.org/abstract?id=oai%3AarXiv.org%3Agr-qc%2F0310042">Carpet - paper</a> lists other eprints which refer to it or are co-cited with - it.</p> - - - - <hr /> - - - - <h2>Publications in refereed journals</h2> - -<!-- Refereed publications are sorted by their "received" date --> - -<ol> - -<li> -<!-- Schnetter-etal-03b --> -<!-- received 2003-10-07 --> -<p>Erik Schnetter, Scott H. Hawley, Ian Hawke,<br /> -<i>Evolutions in 3D numerical relativity using fixed mesh - refinement,</i><br /> -<a href="http://dx.doi.org/10.1088/0264-9381/21/6/014">Class. Quantum - Grav. <b>21</b>, 1465-1488 (2004)</a>,<br /> -<a href="http://arxiv.org/abs/gr-qc/0310042">arXiv:gr-qc/0310042</a>.</p> -</li> - -<li> -<!-- Baiotti04b --> -<!-- received 2004-10-12 --> -<p>Luca Baiotti, Ian Hawke, Luciano Rezzolla, Erik Schnetter,<br /> -<i>Gravitational-Wave Emission from Rotating Gravitational Collapse in - three Dimensions,</i><br /> -<a href="http://link.aps.org/abstract/PRL/v94/e131101">Phys. Rev. Lett. <b>94</b>, 131101 (2005)</a>,<br /> -<a href="http://arxiv.org/abs/gr-qc/0503016">arXiv:gr-qc/0503016</a>.</p> -</li> - -<li> -<!-- Zink2005a --> -<!-- received 2005-02-11 --> -<p>Burkhard Zink, Nikolaos Stergioulas, Ian Hawke, Christian D. Ott, Erik -Schnetter, Ewald Müller,<br /> -<i>Formation of Supermassive Black Holes through Fragmentation of - Torodial Supermassive Stars,</i><br /> -<a href="http://link.aps.org/abstract/PRL/v96/e161101">Phys. Rev. Lett. <b>96</b>, 161101 (2006)</a>,<br /> -<a href="http://arxiv.org/abs/gr-qc/0501080">arXiv:gr-qc/0501080</a>.</p> -</li> - -<li> -<!-- Sperhake2005a --> -<!-- received 2005-03-16 --> -<p>Ulrich Sperhake, Bernard Kelly, Pablo Laguna, Kenneth L. Smith, Erik -Schnetter,<br /> -<i>Black hole head-on collisions and gravitational waves with fixed - mesh-refinement and dynamic singularity excision,</i><br /> -<a href="http://link.aps.org/abstract/PRD/v71/e124042">Phys. Rev. D <b>71</b>, 124042 (2005)</a>,<br /> -<a href="http://arxiv.org/abs/gr-qc/0503071">arXiv:gr-qc/0503071</a>.</p> -</li> - -<li> -<!-- Diener-etal-2006a --> -<!-- received 2005-12-21 --> -<p>Peter Diener, Frank Herrmann, Denis Pollney, Erik Schnetter, Edward -Seidel, Ryoji Takahashi, Jonathan Thornburg, Jason Ventrella,<br /> -<i>Accurate Evolution of Orbiting Binary Black Holes</i>,<br /> -<a href="http://link.aps.org/abstract/PRL/v96/e121101">Phys. Rev. Lett. <b>96</b>, 121101 (2006)</a>,<br /> -<a href="http://arxiv.org/abs/gr-qc/0512108">arXiv:gr-qc/0512108</a>.</p> -</li> - -<li> -<!-- Diener05b --> -<!-- received 2005-12-22 --> -<p>Peter Diener, Ernst Nils Dorband, Erik Schnetter, Manuel Tiglio,<br /> -<i>Optimized high-order derivative and dissipation operators - satisfying summation by parts, and applications in three-dimensional - multi-block evolutions,</i><br /> -<a - href="http://www.springerlink.com/content/l724hr0846n2/">J. Sci. Comput. <b>32</b>, - 109-145 (2007)</a>,<br /> -<a href="http://arxiv.org/abs/gr-qc/0512001">arXiv:gr-qc/0512001</a>.</p> -</li> - -<li> -<!-- Schnetter06a --> -<!-- received 2006-02-20 --> -<p>Erik Schnetter, Peter Diener, Ernst Nils Dorband, Manuel Tiglio,<br /> -<i>A multi-block infrastructure for three-dimensional time-dependent - numerical relativity</i>,<br /> -<a href="http://dx.doi.org/10.1088/0264-9381/23/16/S14">Class. Quantum - Grav. <b>23</b>, S553-S578 (2006)</a>,<br /> -<a href="http://arxiv.org/abs/gr-qc/0602104">arXiv:gr-qc/0602104</a>.</p> -</li> - -<li> -<!-- Sopuerta:2006bw --> -<!-- received 2006-03-20 --> -<p>Carlos F. Sopuerta, Ulrich Sperhake, Pablo Laguna,<br /> -<i>Hydro-without-Hydro Framework for Simulations of Black Hole-Neutron - Star Binaries</i>,<br /> -<a href="http://dx.doi.org/10.1088/0264-9381/23/16/S15">Class. Quantum - Grav. <b>23</b>, S579-S598 (2006)</a>,<br /> -<a href="http://arxiv.org/abs/gr-qc/0605018">arXiv:gr-qc/0605018</a>.</p> -</li> - -<li> -<!-- Schnetter-Krishnan-Beyer-2006 --> -<!-- received 2006-04-11 --> -<p>Erik Schnetter, Badri Krishnan, Florian Beyer,<br /> -<i>Introduction to dynamical horizons in numerical relativity</i>,<br /> -<a href="http://link.aps.org/abstract/PRD/v74/e024028">Phys. Rev. D <b>74</b>, 024028 (2006)</a>,<br /> -<a href="http://arxiv.org/abs/gr-qc/0604015">arXiv:gr-qc/0604015</a>.</p> -</li> - -<li> -<!-- received 2006-06-13 --> -<p>Frank Löffler, Luciano Rezzolla, Marcus Ansorg,<br /> -<i>Numerical evolutions of a black hole-neutron star system in full - General Relativity: Head-on collision</i>,<br /> -<a href="http://link.aps.org/abstract/PRD/v74/e104018">Phys. Rev. D <b>74</b>, 104018 (2006)</a>,<br /> -<a href="http://arxiv.org/abs/gr-qc/0606104">arXiv:gr-qc/0606104</a>.</p> -</li> - -<li> -<!-- received 2006-06-18 --> -<!-- Sperhake:2006cy --> -<p>Ulrich Sperhake,<br /> -<i>Binary black-hole evolutions of excision and puncture data,</i><br /> -<a - href="http://link.aps.org/abstract/PRD/v76/e104015">Phys. Rev. D <b>76</b>, - 104015 (2007)</a>,<br /> -<a href="http://arxiv.org/abs/gr-qc/0606079">arXiv:gr-qc/0606079</a>.</p> -</li> - -<li> -<!-- received 2006-08-22 --> -<p>Ernst Nils Dorband, Emanuele Berti, Peter Diener, Erik Schnetter, - Manuel Tiglio,<br /> -<i>A numerical study of the quasinormal mode excitation of Kerr black - holes</i>,<br /> -<a href="http://link.aps.org/abstract/PRD/v74/e084028">Phys. Rev. D <b>74</b>, 084028 (2006)</a>,<br /> -<a href="http://arxiv.org/abs/gr-qc/0608091">arXiv:gr-qc/0608091</a>.</p> -</li> - -<li> -<!-- received 2006-08-26 --> -<p>Luca Baiotti, Luciano Rezzolla,<br /> -<i>Challenging the paradigm of singularity excision in gravitational - collapse,</i><br /> -<a href="http://link.aps.org/abstract/PRL/v97/e141101">Phys. Rev. Lett. <b>97</b>, 141101 (2006)</a>,<br /> -<a href="http://arxiv.org/abs/gr-qc/0608113">arXiv:gr-qc/0608113</a>.</p> -</li> - -<li> -<!-- received 2006-09-29 --> -<p>Christian D. Ott, Harald Dimmelmeier, Andreas Marek, Hans-Thomas -Janka, Ian Hawke, Burkhard Zink, Erik Schnetter,<br /> -<i>3D Collapse of Rotating Stellar Iron Cores in General Relativity - Including Deleptonization and a Nuclear Equation of State,</i><br /> -<a - href="http://link.aps.org/abstract/PRL/v98/e261101">Phys. Rev. Lett. <b>98</b>, 261101 (2007)</a>,<br /> -<a href="http://arxiv.org/abs/astro-ph/0609819">arXiv:astro-ph/0609819</a>.</p> -</li> - -<li> -<!-- received 2006-10-05 --> -<p>Christian Reisswig, Nigel T. Bishop, Chi Wai Lai, Jonathan - Thornburg, Béla Szilágyi,<br /> -<i>Characteristic evolutions in numerical relativity using six angular - patches,</i><br /> -<a href="http://dx.doi.org/10.1088/0264-9381/24/12/S21">Class. Quantum - Grav. <b>24</b>, S327-S339 (2007)</a>,<br /> -<a href="http://arxiv.org/abs/gr-qc/0610019">arXiv:gr-qc/0610019</a>.</p> -</li> - -<li> -<!-- received 2006-11-03 --> -<p>Bernd Brügmann, José A. González, Mark Hannam, Sascha Husa, Ulrich - Sperhake, Wolfgang Tichy,<br /> -<i>Calibration of Moving Puncture Simulations,</i><br /> -<a - href="http://link.aps.org/abstract/PRD/v77/e024027">Phys. Rev. D <b>77</b>, - 024027 (2008)</a>,<br /> -<a href="http://arxiv.org/abs/gr-qc/0610128">arXiv:gr-qc/0610128</a>.</p> -</li> - -<li> -<!-- received 2006-11-19 --> -<p>Burkhard Zink, Nikolaos Stergioulas, Ian Hawke, Christian D. Ott, -Erik Schnetter, Ewald Müller,<br /> -<i>Non-axisymmetric instability and fragmentation of general - relativistic quasitoroidal stars,</i><br /> -<a href="http://link.aps.org/abstract/PRD/v76/e024019">Phys. Rev. D <b>76</b>, 024019 (2007)</a>,<br /> -<a href="http://arxiv.org/abs/astro-ph/0611601">arXiv:astro-ph/0611601</a>.</p> -</li> - -<li> -<!-- received 2006-12-20 --> -<p>Christian D. Ott, Harald Dimmelmeier, Andreas Marek, Hans-Thomas -Janka, Burkhard Zink, Ian Hawke, Erik Schnetter,<br /> -<i>Rotating collapse of stellar iron cores in general relativity,</i><br /> -<a href="http://dx.doi.org/10.1088/0264-9381/24/12/S10">Class. Quantum - Grav. <b>24</b> S139-S154 (2007)</a>,<br /> -<a href="http://arxiv.org/abs/astro-ph/0612638">arXiv:astro-ph/0612638</a>.</p> -</li> - -<li> -<!-- received 2006-12-21 --> -<p>Luca Baiotti, Ian Hawke, Luciano Rezzolla,<br /> -<i>On the gravitational radiation from the collapse of neutron stars - to rotating black holes,</i><br /> -<a href="http://dx.doi.org/10.1088/0264-9381/24/12/S13">Class. Quantum - Grav. <b>24</b> S187-S206 (2007)</a>,<br /> -<a href="http://arxiv.org/abs/gr-qc/0701043">arXiv:gr-qc/0701043</a>.</p> -</li> - -<li> -<!-- received 2006-12-22 --> -<p>Enrique Pazos, Ernst Nils Dorband, Alessandro Nagar, Carlos -Palenzuela, Erik Schnetter, Manuel Tiglio,<br /> -<i>How far away is far enough for extracting numerical waveforms, and - how much do they depend on the extraction method?</i><br /> -<a href="http://dx.doi.org/10.1088/0264-9381/24/12/S22">Class. Quantum - Grav. <b>24</b>, S341-S368 (2007)</a>,<br /> -<a href="http://arxiv.org/abs/gr-qc/0612149">arXiv:gr-qc/0612149</a>.</p> -</li> - -<li> -<!-- received 2006-12-22 --> -<p>Béla Szilágyi, Denis Pollney, Luciano Rezzolla, Jonathan Thornburg, - Jeffrey Winicour,<br /> -<i>An explicit harmonic code for black-hole evolution using - excision,</i><br /> -<a href="http://dx.doi.org/10.1088/0264-9381/24/12/S18">Class. Quantum - Grav. <b>24</b>, S275-S293 (2007)</a>,<br /> -<a href="http://arxiv.org/abs/gr-qc/0612150">arXiv:gr-qc/0612150</a>.</p> -</li> - -<li> - <!-- received 2006-12-26 --> - <p>Comparisons of binary black hole merger waveforms,<br /> - <i>John G. Baker, Manuela Campanelli, Frans Pretorius, Yosef - Zlochower,</i><br /> - <a href="http://dx.doi.org/10.1088/0264-9381/24/12/S03">Class. Quantum - Grav. <b>24</b>, S25-S31 (2007)</a>,<br /> - <a href="http://arxiv.org/abs/gr-qc/0701016">arXiv:gr-qc/0701016</a>.</p> -</li> - -<li> -<!-- Herrmann:2006ks --> -<!-- received 2007-01-04 --> -<p>Frank Herrmann, Ian Hinder, Deirdre M. Shoemaker, Pablo Laguna,<br /> -<i>Unequal mass binary black hole plunges and gravitational - recoil,</i><br /> -<a href="http://dx.doi.org/10.1088/0264-9381/24/12/S04">Class. Quantum - Grav. <b>24</b>, S33-S42 (2007)</a>,<br /> -<a href="http://arxiv.org/abs/gr-qc/0601026">arXiv:gr-qc/0601026</a>.</p> -</li> - -<li> -<!-- received 2007-01-20 --> -<p>Bruno Giacomazzo, Luciano Rezzolla,<br /> -<i>WhiskyMHD: a new numerical code for general relativistic - magnetohydrodynamics,</i><br /> -<a href="http://dx.doi.org/10.1088/0264-9381/24/12/S16">Class. Quantum - Grav. <b>24</b>, S235-S258 (2007)</a>,<br /> -<a href="http://arxiv.org/abs/gr-qc/0701109">arXiv:gr-qc/0701109</a>.</p> -</li> - -<li> -<!-- received 2007-01-22 --> -<p>Pedro Marronetti, Wolfgang Tichy, Bernd Brügmann, José González, - Mark Hannam, Sascha Husa, Ulrich Sperhake,<br /> -<i>Binary black holes on a budget: simulations using workstations,</i><br /> -<a href="http://dx.doi.org/10.1088/0264-9381/24/12/S05">Class. Quantum - Grav. <b>24</b>, S45-S58 (2007)</a>,<br /> -<a href="http://arxiv.org/abs/gr-qc/0701123">arXiv:gr-qc/0701123</a>.</p> -</li> - -<li> -<!-- received 2007-01-29 --> -<p>Frank Herrmann, Ian Hinder, Deirdre M. Shoemaker, Pablo Laguna, - Richard A. Matzner,<br /> -<i>Gravitational Recoil from Spinning Binary Black Hole Mergers,</i><br /> -<a - href="http://www.journals.uchicago.edu/doi/abs/10.1086/513603">Astrophys. J. <b>661</b>, - 430-436 (2007)</a>,<br /> -<a href="http://arxiv.org/abs/gr-qc/0701143">arXiv:gr-qc/0701143</a>.</p> -</li> - -<li> -<!-- received 2007-01-29 --> -<p>Michael Koppitz, Denis Pollney, Christian Reisswig, Luciano - Rezzolla, Jonathan Thornburg, Peter Diener, Erik Schnetter,<br /> -<i>Recoil Velocities from Equal-Mass Binary-Black-Hole Mergers,</i><br /> -<a - href="http://link.aps.org/abstract/PRL/v99/e041102">Phys. Rev. Lett. <b>99</b>, - 041102 (2007)</a>,<br /> -<a href="http://arxiv.org/abs/gr-qc/0701163">arXiv:gr-qc/0701163</a>.</p> -</li> - -<li> -<!-- received 2007-02-08 --> -<p>Manuela Campanelli, Carlos O. Lousto, Yosef Zlochower, David - Merritt,<br /> -<i>Large Merger Recoils and Spin Flips From Generic Black-Hole Binaries,</i><br /> -<a href="http://www.journals.uchicago.edu/doi/abs/10.1086/516712">Astrophys. J. Lett.<b>659</b>, - L5-L8 (2007)</a>,<br /> -<a href="http://arxiv.org/abs/gr-qc/0701164">arXiv:gr-qc/0701164</a>.</p> -</li> - -<li> -<!-- received 2007-02-26 --> -<p>José A. González, Mark D. Hannam, Ulrich Sperhake, Bernd Brügmann, - Sascha Husa,<br /> -<i>Supermassive recoil velocities for binary black-hole mergers with - antialigned spins,</i><br /> -<a - href="http://link.aps.org/abstract/PRL/v98/e231101">Phys. Rev. Lett. <b>98</b>, - 231101 (2007)</a>,<br /> -<a href="http://arxiv.org/abs/gr-qc/0702052">arXiv:gr-qc/0702052</a>.</p> -</li> - -<li> -<!-- received 2007-02-26 --> -<p>Manuela Campanelli, Carlos O. Lousto, Yosef Zlochower, David - Merritt,<br /> -<i>Maximum gravitational recoil,</i><br /> -<a - href="http://link.aps.org/abstract/PRL/v98/e231102">Phys. Rev. Lett. <b>98</b>, - 231102 (2007)</a>,<br /> -<a href="http://arxiv.org/abs/gr-qc/0702133">arXiv:gr-qc/0702133</a>.</p> -</li> - -<li> -<!-- received 2007-03-22 --> -<p>Jonathan Thornburg, Peter Diener, Denis Pollney, Luciano Rezzolla, - Erik Schnetter, Ed Seidel, Ryoji Takahashi,<br /> -<i>Are moving punctures equivalent to moving black holes?,</i><br /> -<a href="http://dx.doi.org/10.1088/0264-9381/24/15/009">Class. Quantum - Grav. <b>24</b>, 3911-3918 (2007)</a>,<br /> -<a href="http://arxiv.org/abs/gr-qc/0701038">arXiv:gr-qc/0701038</a>.</p> -</li> - -<!-- received 2007-04-30 --> -<li> -<p>Parameswaran Ajith, Stanislav Babak, Yanbei Chen, Martin Hewitson, - Badri Krishnan, John T. Whelan, Bernd Brügmann, Peter Diener, José - González, Mark Hannam, Sascha Husa, Michael Koppitz, Denis Pollney, - Luciano Rezzolla, LucÃa SantamarÃa, Alicia M. Sintes, Ulrich - Sperhake, Jonathan Thornburg,<br /> -<i>Phenomenological template family for black-hole coalescence - waveforms,</i><br /> -<a href="http://dx.doi.org/10.1088/0264-9381/24/19/S31">Class. Quantum - Grav. <b>24</b> S689-S699 (2007)</a>,<br /> -<a href="http://arxiv.org/abs/0704.3764">arXiv:0704.3764 - [gr-qc]</a>.</p> -</li> - -<li> -<!-- received 2007-06-13 --> -<p>Birjoo Vaishnav, Ian Hinder, Frank Herrmann, Deirdre M. Shoemaker,<br /> -<i>Matched Filtering of Numerical Relativity Templates of Spinning - Binary Black Holes,</i><br /> -<a - href="http://link.aps.org/abstract/PRD/v76/e084020">Phys. Rev. D <b>76</b>, - 084020 (2007)</a>,<br /> -<a href="http://arxiv.org/abs/0705.3829">arXiv:0705.3829 - [gr-qc]</a>.</p> -</li> - -<li> -<!-- received 2007-06-18 --> -<p>Frank Herrmann, Ian Hinder, Deirdre M. Shoemaker, Pablo Laguna, - Richard A. Matzner,<br /> -<i>Binary Black Holes: Spin Dynamics and Gravitational Recoil,</i><br /> -<a href="http://link.aps.org/abstract/PRD/v76/e084032">Phys. Rev. D <b>76</b>, 084032 (2007)</a>,<br /> -<a href="http://arxiv.org/abs/0706.2541">arXiv:0706.2541 - [gr-qc]</a>.</p> -</li> - -<li> -<!-- received 2007-07-06 --> -<p>Badri Krishnan, Carlos O. Lousto, Yosef Zlochower,<br /> -<i>Quasi-Local Linear Momentum in Black-Hole Binaries,</i><br /> -<a - href="http://link.aps.org/abstract/PRD/v76/e081501">Phys. Rev. D <b>76</b>, - 081501(R) (2007)</a>,<br /> -<a href="http://arxiv.org/abs/0707.0876">arXiv:0707.0876 - [gr-qc]</a>.</p> -</li> - -<li> -<!-- received 2007-07-20 --> -<p>David Brown, Olivier Sarbach, Erik Schnetter, Manuel Tiglio, Peter - Diener, Ian Hawke, Denis Pollney,<br /> -<i>Excision without excision,</i><br /> -<a - href="http://link.aps.org/abstract/PRD/v76/e081503">Phys. Rev. D <b>76</b>, - 081503(R) (2007)</a>,<br /> -<a href="http://arxiv.org/abs/0707.3101">arXiv:0707.3101 - [gr-qc]</a>.</p> -</li> - -<li> -<!-- Rezzolla2007a --> -<!-- received 2007-08-29 --> -<p>Luciano Rezzolla, Ernst Nils Dorband, Christian Reisswig, Peter - Diener, Denis Pollney, Erik Schnetter, Béla Szilágyi,<br /> -<i>Spin Diagrams for Equal-Mass Black-Hole Binaries with Aligned - Spins,</i><br /> -<a href="http://www.journals.uchicago.edu/doi/abs/10.1086/587679">Astrophys. J. <b>679</b>, - 1422-1426 (2008)</a>,<br /> -<a href="http://arxiv.org/abs/0708.3999">arXiv:0708.3999 - [gr-qc]</a>.</p> -</li> - -<li> -<!-- received 2007-08-30 --> -<p>Carlos O. Lousto, Yosef Zlochower,<br /> -<i>Further insight into gravitational recoil,</i><br /> -<a - href="http://link.aps.org/abstract/PRD/v77/e044028">Phys. Rev. D <b>77</b>, - 044028 (2008)</a>,<br /> -<a href="http://arxiv.org/abs/0708.4048">arXiv:0708.4048 - [gr-qc]</a>.</p> -</li> - -<li> -<!-- received 2007-09-06 --> -<p>Denis Pollney, Christian Reisswig, Luciano Rezzolla, Bela Szilagyi, - Marcus Ansorg, Barrett Deris, Peter Diener, Ernst Nils Dorband, - Michael Koppitz, Alessandro Nagar, Erik Schnetter,<br /> -<i>Recoil velocities from equal-mass binary black-hole mergers: a - systematic investigation of spin-orbit aligned configurations,</i><br /> -<a href="http://link.aps.org/abstract/PRD/v76/e124002">Phys. Rev. D <b>76</b>, - 124002 (2007)</a>,<br /> -<a href="http://arxiv.org/abs/0707.2559">arXiv:0707.2559 - [gr-qc]</a>.</p> -</li> - -<li> -<!-- received 2007-10-15 --> -<p>Parameswaran Ajith, Stanislav Babak, Yanbei Chen, Martin Hewitson, - Badri Krishnan, Alicia M. Sintes, John T. Whelan, Bernd Brügmann, - Peter Diener, Ernst Nils Dorband, José González, Mark Hannam, Sascha Husa, - Denis Pollney, Luciano Rezzolla, LucÃa SantamarÃa, Ulrich Sperhake, - Jonathan Thornburg,<br /> -<i>A template bank for gravitational waveforms from coalescing binary - black holes: I. non-spinning binaries,</i><br /> -<a href="http://link.aps.org/abstract/PRD/v77/e104017">Phys. Rev. D <b>77</b>, - 104017 (2008)</a>,<br /> -<a href="http://arxiv.org/abs/0710.2335">arXiv:0710.2335 - [gr-qc]</a>.</p> -</li> - -<li> -<!-- received 2007-10-18 --> -<p>Luciano Rezzolla, Peter Diener, Ernst Nils Dorband, Denis Pollney, - Christian Reisswig, Erik Schnetter, Jennifer Seiler,<br /> -<i>The final spin from the coalescence of aligned-spin black-hole - binaries,</i><br /> -<a href="http://www.journals.uchicago.edu/doi/abs/10.1086/528935">Astrophys. J. Lett.<b>674</b>, - L29-L32 (2008)</a>,<br /> -<a href="http://arxiv.org/abs/0710.3345">arXiv:0710.3345 - [gr-qc]</a>.</p> -</li> - -<li> -<!-- received 2007-10-22 --> -<!-- uses Carpet only indirectly --> -<p>Latham Boyle, Michael Kesden, Samaya Nissanke,<br /> -<i>Binary black hole merger: symmetry and the spin expansion,</i><br /> -<a href="http://link.aps.org/abstract/PRL/v100/e151101">Phys. Rev. Lett. <b>100</b>, 151101 (2008)</a>,<br /> -<a href="http://arxiv.org/abs/0709.0299">arXiv:0709.0299 - [gr-qc]</a>.</p> -</li> - -<li> -<!-- received 2007-11-07 --> -<p>Emanuele Berti, Vitor Cardoso, José A. González, Ulrich Sperhake, - Bernd Brügmann,<br /> -<i>Multipolar analysis of spinning binaries,</i><br /> -<a href="http://dx.doi.org/10.1088/0264-9381/25/11/114035">Class. Quantum - Grav. <b>25</b>, 114035 (2008)</a>,<br /> -<a href="http://arxiv.org/abs/0711.1097">arXiv:0711.1097 - [gr-qc]</a>.</p> -</li> - -<li> -<!-- received 2007-12-04 --> -<p>Burkhard Zink, Erik Schnetter, Manuel Tiglio,<br /> -<i>Multi-patch methods in general relativistic astrophysics - - I. Hydrodynamical flows on fixed backgrounds,</i><br /> -<a href="http://link.aps.org/abstract/PRD/v77/e103015">Phys. Rev. D <b>77</b>, - 103015 (2008)</a>,<br /> -<a href="http://arxiv.org/abs/0712.0353">arXiv:0712.0353 - [astro-ph]</a>.</p> -</li> - -<li> -<!-- received 2007-12-14 --> -<p>Deirdre M. Shoemaker, Birjoo Vaishnav, Ian Hinder, Frank - Herrmann,<br /> -<i>Numerical relativity meets data analysis: spinning binary black - hole case,</i><br /> -<a href="http://dx.doi.org/10.1088/0264-9381/25/11/114047">Class. Quantum - Grav. <b>25</b>, 114047 (2008)</a>,<br /> -<a href="http://arxiv.org/abs/0802.4427">arXiv:0802.4427 - [gr-qc]</a>.</p> -</li> - -</ol> - - - -<h2>Conference Proceedings, Preprints, and Technical Reports</h2> - -<!-- Preprints are sorted by their date --> - -<ol> - -<li> -<p>Burkhard Zink, Nikolaos Stergioulas, Ian Hawke, Christian D. Ott, - Erik Schnetter, Ewald Müller,<br /> -<i>Rotational instabilities in supermassive stars: a new way to form - supermassive black holes,</i>,<br /> in N. K. Spyrou, - N. Stergioulas, and C. Tsagas, editors, <i>International Scientific - Workshop on Cosmology and Gravitational Physics, Thessaloniki, - December 15-16, 2005,</i> pages 155–160, Thessaloniki, 2006. - ZITI.</p> -</li> - -<li> -<p>Burkhard Zink, Nikolaos Stergioulas, Ian Hawke, Christian D. Ott, - Erik Schnetter, Ewald Müller,<br /> -<i>Fragmentation of general relativistic quasi-toroidal - polytropes,</i><br /> -<a href="http://arxiv.org/abs/0704.0431">arXiv:0704.0431 [gr-qc]</a>.</p> -</li> - -<li> -<p>Dylan Stark, Gabrielle Allen, Tom Goodale, Thomas Radke, Erik - Schnetter,<br /> -<i>An Extensible Timing Infrastructure for Adaptive Large-scale - Applications,</i><br /> -<a href="http://www.springer.com/computer/lncs?SGWID=0-164-6-73659-0">in - Roman Wyrzykowski, editor, <i>Parallel Processing and Applied - Mathematics (PPAM), 2007, Gdansk, Poland (in print),</i> volume 4967 - of Lecture Notes in Computer Science. Springer, 2007</a>,<br /> -<a href="http://arxiv.org/abs/0705.3015">arXiv:0705.3015 - [cs.PF]</a>.</p> -</li> - -<li> -<p>Ulrich Sperhake, Bernd Brügmann, José González, Mark Hannam, Sascha - Husa,<br /> -<i>Head-On collisions of different initial data,</i><br /> -<a href="http://arxiv.org/abs/0705.2035">arXiv:0705.2035 - [gr-qc]</a>.</p> -</li> - -<li> -<p>Luca Baiotti, Ian Hawke, Luciano Rezzolla, Erik Schnetter, -<i>Details on the gravitational-wave emission from rotating - gravitational collapse in 3D,</i><br /> -<a href="http://dx.doi.org/10.1088/1742-6596/66/1/012045">J. Phys.: - Conf. Ser. <b>66</b>, 012045 (2007)</a>.</p> -</li> - -<li> -<p>Ulrich Sperhake,<br /> -<i>Black-hole binary evolutions with the LEAN code,</i><br /> -<a href="http://dx.doi.org/10.1088/1742-6596/66/1/012049">J. Phys.: - Conf. Ser. <b>66</b> 012049 (2007)</a>.</p> -</li> - -<li> -<!-- uses Carpet only indirectly --> -<p>José A. Font,<br /> -<i>Current status of relativistic core collapse simulations,</i><br /> -<a href="http://dx.doi.org/10.1088/1742-6596/66/1/012063">J. Phys.: - Conf. Ser. <b>66</b>, 012063 (2007)</a>.</p> -</li> - -<li> -<p>Burkhard Zink, Nikolaos Stergioulas, Ian Hawke, Christian D. Ott, - Erik Schnetter, Ewald Müller,<br /> -<i>Supermassive Black Hole Formation through Rotational - Instabilities,</i><br /> -<a href="http://dx.doi.org/10.1088/1742-6596/68/1/012050">J. Phys.: - Conf. Ser. <b>68</b>, 012050 (2007)</a>.</p> -</li> - -<li> -<p>Bernd Brügmann, José A. González, Mark Hannam, Sascha Husa, Ulrich - Sperhake,<br /> -<i>Exploring black hole superkicks,</i><br /> -<a href="http://arxiv.org/abs/0707.0135">arXiv:0707.0135 - [gr-qc]</a>.</p> -</li> - -<li> -<p>Erik Schnetter, Christian D. Ott, Gabrielle Allen, Peter Diener, Tom -Goodale, Thomas Radke, Edward Seidel, John Shalf,<br /> -<i>Cactus Framework: Black Holes to Gamma Ray Bursts,</i><br /> -<a href="http://arxiv.org/abs/0707.1607">arXiv:0707.1607 [cs.DC]</a>.</p> -</li> - -<li> -<!-- uses Carpet only indirectly --> -<p>John G. Baker, William D. Boggs, Joan M. Centrella, Bernard - J. Kelly, Sean T. McWilliams, James R. van Meter,<br /> -<i>Gravitational waves from black-hole mergers,</i><br /> -<a href="http://arxiv.org/abs/0708.4202">arXiv:0708.4202 - [astro-ph]</a>.</p> -</li> - -<li> -<!-- uses Carpet only indirectly --> -<p>Alessandra Buonanno, Lawrence E. Kidder, Luis Lehner,<br /> -<i>Estimating the final spin of a binary black hole - coalescence,</i><br /> -<a href="http://arxiv.org/abs/0709.3839">arXiv:0709.3839 - [astro-ph]</a>.</p> -</li> - -<li> -<p>Manuela Campanelli, Carlos O. Lousto, Yosef Zlochower,<br /> -<i>Close encounters of three black holes,</i><br /> -<a href="http://arxiv.org/abs/0710.0879">arXiv:0710.0879 - [gr-qc]</a>.</p> -</li> - -<li> -<p>Ulrich Sperhake, Emanuele Berti, Vitor Cardoso, José A. González, - Bernd Brügmann, Marcus Ansorg,<br /> -<i>Eccentric binary black-hole mergers: The transition from inspiral - to plunge in general relativity,</i><br /> -<a href="http://arxiv.org/abs/0710.3823">arXiv:0710.3823 - [gr-qc]</a>.</p> -</li> - -<li> -<p>Ian Hinder, Birjoo Vaishnav, Frank Herrmann, Deirdre M. Shoemaker, - Pablo Laguna,<br /> -<i>Universality and Final Spin in Eccentric Binary Black Hole - Inspirals,</i><br /> -<a href="http://arxiv.org/abs/0710.5167">arXiv:0710.5167 - [gr-qc]</a>.</p> -</li> - -<li> -<p>Tanja Bode, Deirdre M. Shoemaker, Frank Herrmann, Ian Hinder,<br /> -<i>Delicacy of Binary Black Hole Mergers in the Presence of Spurious - Radiation,</i><br /> -<a href="http://arxiv.org/abs/0711.0669">arXiv:0711.0669 - [gr-qc]</a>.</p> -</li> - -<li> -<p>Thibault Damour, Alessandro Nagar, Ernst Nils Dorband, Denis - Pollney, Luciano Rezzolla,<br /> -<i>Faithful Effective-One-Body waveforms of equal-mass coalescing - black-hole binaries,</i><br /> -<a href="http://arxiv.org/abs/0712.3003">arXiv:0712.3003 - [gr-qc]</a>.</p> -</li> - -<li> -<p>Luciano Rezzolla, Enrico Barausse, Ernst Nils Dorband, Denis - Pollney, Christian Reisswig, Jennifer Seiler, Sascha Husa,<br /> -<i>On the final spin from the coalescence of two black holes,</i><br /> -<a href="http://arxiv.org/abs/0712.3541">arXiv:0712.3541 - [gr-qc]</a>.</p> -</li> - -<li> -<p>Oleg Korobkin, Burak Aksoylu, Michael Holst, Enrique Pazos, Manuel - Tiglio ,<br /> -<i>Solving the Einstein constraint equations on multi-block -triangulations using finite element methods,</i><br /> -<a href="http://arxiv.org/abs/0801.1823">arXiv:0801.1823 - [gr-qc]</a>.</p> -</li> - -<li> -<p>Eloisa Bentivegna, Deirdre M. Shoemaker, Ian Hinder, Frank - Herrmann,<br /> -<i>Probing the Binary Black Hole Merger Regime with Scalar - Perturbations,</i><br /> -<a href="http://arxiv.org/abs/0801.3478">arXiv:0801.3478 - [gr-qc]</a>.</p> -</li> - -<li> -<p>Matthew C. Washik, James Healy, Frank Herrmann, Ian Hinder, Deirdre - M. Shoemaker, Pablo Laguna, Richard A. Matzner,<br /> -<i>Binary Black Hole Encounters, Gravitational Bursts and Maximum - Final Spin,</i><br /> -<a href="http://arxiv.org/abs/0802.2520">arXiv:0802.2520 - [gr-qc]</a>.</p> -</li> - -<li> -<p>Jennifer Seiler, Béla Szilágyi, Denis Pollney, Luciano - Rezzolla,<br /> -<i>Constraint-preserving boundary treatment for a harmonic formulation - of the Einstein equations,</i><br /> -<a href="http://arxiv.org/abs/0802.3341">arXiv:0802.3341 - [gr-qc]</a>.</p> -</li> - -<li> -<p>Sergio Dain, Carlos O. Lousto, Yosef Zlochower,<br /> -<i>Extra-Large Remnant Recoil Velocities and Spins from - Near-Extremal-Bowen-York-Spin Black-Hole Binaries,</i><br /> -<a href="http://arxiv.org/abs/0803.0351">arXiv:0803.0351 - [gr-qc]</a>.</p> -</li> - -<li> -<p>Accurate evolutions of inspiralling neutron-star binaries: prompt - and delayed collapse to black hole,<br /> -<i>Luca Baiotti, Bruno Giacomazzo, Luciano Rezzolla,</i><br /> -<a href="http://arxiv.org/abs/0804.0594">arXiv:0804.0594 - [gr-qc]</a>.</p> -</li> - -<li> - <p>Modeling gravitational recoil from precessing highly-spinning - unequal-mass black-hole binaries,<br /> -<i>Carlos O. Lousto, Yosef Zlochower,</i><br /> -<a href="http://arxiv.org/abs/0805.0159">arXiv:0805.0159 - [gr-qc]</a>.</p> -</li> - -<li> - <p>Transformation of the multipolar components of gravitational - radiation under rotations and boosts,<br /> - <i>Leonardo Gualtieri, Emanuele Berti, Vitor Cardoso, Ulrich - Sperhake,</i><br /> - <a href="http://arxiv.org/abs/0805.1017">arXiv:0805.1017 - [gr-qc]</a>.</p> -</li> - -<li> - <!-- 2008-06-13 --> - <p>XiRel: Standard Benchmarks for Numerical Relativity Codes Using - Cactus and Carpet,<br /> - <i>Jian Tao, Gabrielle Allen, Ian Hinder, Erik Schnetter, Yosef - Zlochower,</i><br /> - <a href="http://www.cct.lsu.edu/CCT-TR/CCT-TR-2008-5">Technical - Report CCT-TR-2008-5, Louisiana State University (2008)</a>.</p> -</li> - -<li> - <p>Comparisons of eccentric binary black hole simulations with - post-Newtonian models,<br /> - <i>Ian Hinder, Frank Herrmann, Pablo Lagona, Deirdre Shoemaker,</i><br /> - <a href="http://arxiv.org/abs/0806.1037">arXiv:0806.1037 - [gr-qc]</a>.</p> -</li> - -<li> - <p>The high-energy collision of two black holes,<br /> - <i>Ulrich Sperhake, Vitor Cardoso, Frans Pretorius, Emanuele - Berti, José A. González,</i><br /> - <a href="http://arxiv.org/abs/0806.1738">arXiv:0806.1738 - [gr-qc]</a>.</p> -</li> - -<li> - <p>Superkicks in Hyperbolic Encounters of Binary Black Holes,<br /> - <i>James Healy, Frank Herrmann, Ian Hinder, Deirdre M. Shoemaker, - Pablo Laguna, Richard A. Matzner,</i><br /> - <a href="http://arxiv.org/abs/0807.3292">arXiv:0807.3292 - [gr-qc]</a>.</p> -</li> - -<li> - <p>Comparison of Numerical and Post-Newtonian Waveforms for Generic - Precessing Black-Hole Binaries,<br /> - <i>Manuela Campanelli, Carlos O. Lousto, Hiroyuki Nakano, Yosef - Zlochower,</i><br /> - <a href="http://arxiv.org/abs/0808.0713">arXiv:0808.0713 - [gr-qc]</a>.</p> -</li> - -<li> - <p>Gravitational-Wave Extraction from Neutron-Star Oscillations: - comparing linear and nonlinear techniques,<br /> - <i>Luca Baiotti, Sebastiano Bernuzzi, Giovanni Corvino, Roberto De - Pietri, Alessandro Nagar,</i><br /> - <a href="http://arxiv.org/abs/0808.4002">arXiv:0808.4002 - [gr-qc]</a>.</p> -</li> - -<li> - <p>Turduckening black holes: an analytical and computational study,<br /> - <i>David Brown, Peter Diener, Olivier Sarbach, Erik Schnetter, - Manuel Tiglio,</i><br /> - <a href="http://arxiv.org/abs/0809.3533">arXiv:0809.3533 - [gr-qc]</a>.</p> -</li> - -</ol> - - - -<h2>Theses</h2> - -<!-- Theses are sorted by year, then by the last name --> - -<ol> - -<li> -<p>Michael Koppitz,<br /> -Numerical Studies Of Black Hole Initial Data,<br /> -<a href="http://opus.kobv.de/ubp/volltexte/2005/134">PhD thesis, - Universität Potsdam, 2004</a>.</p> -</li> - -<li> -<!-- Herrmann2005:PhD --> -<p>Frank Herrmann,<br /> -Evolution and analysis of binary black hole spacetimes,<br /> -PhD thesis, Universität Potsdam, 2005.</p> -</li> - -<li> -<!-- Loeffler05 --> -<p>Frank Löffler,<br /> -Numerical Simulations of Neutron Star-Black Hole Mergers,<br /> -<a href="http://opus.kobv.de/ubp/volltexte/2006/774/">PhD thesis, - Universität Potsdam, 2006</a>.</p> -</li> - -<li> -<p>Sasanka Madiraju,<br /> -Performance Profiling with Cactus Benchmarks,<br /> -Masters thesis, Louisiana State University, 2006 -<a href="http://www.cactuscode.org/Articles/Cactus_Madiraju06.pdf">(PDF, 600 kB)</a>.</p> -</li> - -<li> -<p>Burkhard Zink,<br /> -Black hole formation from non-axisymmetric instabilities in -quasi-toroidal stars,<br /> -PhD thesis, Technische Universität München, 2006 -<a href="http://nbn-resolving.de/urn/resolver.pl?urn=urn:nbn:de:bvb:91-diss20060623-1915123970">(PDF, 8.6 MB)</a>.</p> -</li> - -<li> -<p>Ernst Nils Dorband,<br /> -Computing and Analyzing Gravitational Radiation in Black Hole -Simulations Using a New Multi-Block Approach to Numerical Relativity,<br /> -PhD thesis, Louisiana State University, 2007 -<a href="http://www.cct.lsu.edu/~dorband/thesis.pdf">(PDF, 2.4 MB)</a>.</p> -</li> - -<li> -<p>Wolfgang Kastaun,<br /> -Developing a code for general relativistic hydrodynamics with - application to neutron star oscillations,<br /> -<a href="http://tobias-lib.ub.uni-tuebingen.de/volltexte/2007/2803/">PhD - thesis, Universität Tübingen, 2007</a>).</p> -</li> - -<li> -<p>Gian Mario Manca,<br /> -Dynamical instabilities in rapidly rotating neutron star models,<br /> -PhD thesis, Università di Parma, 2007.</p> -</li> - -<li> -<p>Christian D. Ott,<br /> -Stellar Iron Core Collapse in {3+1} General Relativity and The - Gravitational Wave Signature of Core-Collapse Supernovae,<br /> -PhD thesis, Universität Potsdam, 2007 -(available - from <a href="http://www.tapir.caltech.edu/~cott/">Chrisitan's home - page</a>).</p> -</li> - -<li> -<p>Anıl ZenginoÄŸlu,<br /> -A conformal approach to numerical calculations of asymptotically flat - spacetimes,<br /> -PhD thesis, Max-Planck Institute for Gravitational Physics (AEI) and - University of Potsdam, 2007, -<a href="http://arxiv.org/abs/0711.0873">arXiv:0711.0873 - [gr-qc]</a>.</p> -</li> - -<li> - <p>Eloisa Bentivegna,<br /> Ringing in unison: exploring black hole - coalescence with quasinormal modes,<br /> PhD thesis, Pennsylvania - State University, 2008, - <a href="http://etda.libraries.psu.edu/theses/approved/WorldWideIndex/ETD-2570/index.html">ETD - 2570</a>.</p> -</li> - -<li> -<p>Michael Jasiulek,<br /> -Spin Measures on Isolated and Dynamical Horizons in Numerical - Relativity,<br /> -Diplomarbeit, Humboldt-Universität zu Berlin, 2008.</p> -</li> - -</ol> - - - -<!-- - -Luca Baiotti, -Numerical relativity simulations of non-vacuum spacetimes in three -dimensions, -PhD thesis, SISSA, 2004. -[does not use Carpet] - -Bernard Kelly, -The Next Generation of Binary Black Hole Head-On Collisions, and their -Aftermath, -PhD thesis, Penn State University, 2004. -[does not use Carpet] - -Kenneth Smith, -Dynamic Singularity Excision in Numerical Relativity, -PhD thesis, Penn State University, 2004. -[does not use Carpet] - -Bruno Giacomazzo, -General Relativistic Magnetohydrodynamics: fundamental aspects and applications, -PhD thesis, SISSA, 2006. -[does not use Carpet] - ---> - - - - <hr /> - - <p>Please tell us if you have written a publication or a thesis - using Carpet.</p> - - <hr /> - - <p>Go back to the <a href=".">Carpet home page</a>.</p> - - <hr /> - - <p> - <a href="http://www.xemacs.org/About/created.html"><img - src="cbxSmall.jpg" alt="Created with XEmacs!" height="36" - width="100" /></a> - - <a href="http://www.anybrowser.org/campaign/"><img - src="logoab8.png" alt="Best Viewed With Any Browser" height="31" - width="88" /></a> - - <a href="http://validator.w3.org/check?uri=referer"><img - src="valid-xhtml10.png" alt="Valid XHTML 1.0!" height="31" - width="88" /></a> - </p> - - <address><a href="mailto:schnetter@cct.lsu.edu">Erik Schnetter</a></address> -<p> -<!-- Created: Sun Feb 26 2006 --> -<!-- hhmts start --> -Last modified: 2008-09-26 -<!-- hhmts end --> -</p> - - </body> -</html> diff --git a/Carpet/CarpetWeb/publications/Makefile b/Carpet/CarpetWeb/publications/Makefile new file mode 100644 index 000000000..d385e223f --- /dev/null +++ b/Carpet/CarpetWeb/publications/Makefile @@ -0,0 +1,46 @@ +SECTIONS = background refereed book report thesis webpage + +ALLSECTIONS = $(SECTIONS) internal + +all: carpet-publications.pdf publications.html + +carpet-publications.pdf: carpet-publications.tex carpet-publications.bib $(SECTIONS:%=citations-%.bibitems) + rubber -d carpet-publications + +publications.html: $(SECTIONS:%=citations-%.html-updated) + +.PRECIOUS: $(SECTIONS:%=citations-%.tex) +citations-%.tex: citations.template + sed -e 's/STATUS/$*/g' citations.template > $@ + +.PRECIOUS: $(SECTIONS:%=citations-%.bib) +citations-%.bib: carpet-publications.bib + bibtool -q -- 'select.by.string{status "$*"}' -- 'sort{on}' -- 'sort.reverse{on}' -- 'sort.format{%N(receiveddate)}' < carpet-publications.bib > $@ + +# this produces also %.aux and %.bbl +.PRECIOUS: $(SECTIONS:%=citations-%.pdf) +citations-%.pdf: citations-%.tex citations-%.bib + rubber -d citations-$* + +citations-%.bibitems: citations-%.pdf + cat citations-$*.bbl | grep -v thebibliography | sed -e 's/bibitem/blurb/' > $@ + +# http://www.spinellis.gr/sw/textproc/bib2xhtml/ +# Sorted alphabetically: +# ./bib2xhtml -r -s empty -u $*.aux publications.html +# ./bib2xhtml -s unsort -u $*.aux publications.html +# ./bib2xhtml -s unsortlist -u $*.aux publications.html +citations-%.html-updated: citations-%.pdf + ./bib2xhtml -s unsortlist -u citations-$*.aux publications.html + : > $@ + +EMPTY := +SPACE := $(EMPTY) $(EMPTY) +check: + bibtool -q -- 'select.non{status "$(subst $(SPACE),\|,$(ALLSECTIONS))"}' < carpet-publications.bib + +clean: + rubber -d --clean carpet-publications + $(RM) $(SECTIONS:%=citations-%.*) + +.PHONY: all check clean diff --git a/Carpet/CarpetWeb/publications/apsrev-titles-manyauthors.bst b/Carpet/CarpetWeb/publications/apsrev-titles-manyauthors.bst new file mode 100644 index 000000000..13f3e1eed --- /dev/null +++ b/Carpet/CarpetWeb/publications/apsrev-titles-manyauthors.bst @@ -0,0 +1,2410 @@ +%% +%% This is file `apsrev.bst', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% merlin.mbs (with options: `head,ay,nat,seq-no,nm-init,ed-au,nmlm,x10,x0,m10,m0,nmft,nmft-def,fnm-def,nmfted,lab,lab-def,keyxyr,yr-par,note-yr,tit-it,jtit-x,jttl-rm,thtit-x,trtit-x,vol-bf,vnum-x,volp-com,jpg-1,num-xser,jnm-x,pub-date,pre-pub,isbn,issn,edby,blk-com,pp,ed,abr,ednx,ord,jabr,revdata,eprint,url,url-blk,misc-simple,bibinfo,nfss,{}') +%% physjour.mbs (with options: `ay,nat,seq-no,nm-init,ed-au,nmlm,x10,x0,m10,m0,nmft,nmft-def,fnm-def,nmfted,lab,lab-def,keyxyr,yr-par,note-yr,tit-it,jtit-x,jttl-rm,thtit-x,trtit-x,vol-bf,vnum-x,volp-com,jpg-1,num-xser,jnm-x,pub-date,pre-pub,isbn,issn,edby,blk-com,pp,ed,abr,ednx,ord,jabr,revdata,eprint,url,url-blk,misc-simple,bibinfo,nfss,{}') +%% geojour.mbs (with options: `ay,nat,seq-no,nm-init,ed-au,nmlm,x10,x0,m10,m0,nmft,nmft-def,fnm-def,nmfted,lab,lab-def,keyxyr,yr-par,note-yr,tit-it,jtit-x,jttl-rm,thtit-x,trtit-x,vol-bf,vnum-x,volp-com,jpg-1,num-xser,jnm-x,pub-date,pre-pub,isbn,issn,edby,blk-com,pp,ed,abr,ednx,ord,jabr,revdata,eprint,url,url-blk,misc-simple,bibinfo,nfss,{}') +%% photjour.mbs (with options: `ay,nat,seq-no,nm-init,ed-au,nmlm,x10,x0,m10,m0,nmft,nmft-def,fnm-def,nmfted,lab,lab-def,keyxyr,yr-par,note-yr,tit-it,jtit-x,jttl-rm,thtit-x,trtit-x,vol-bf,vnum-x,volp-com,jpg-1,num-xser,jnm-x,pub-date,pre-pub,isbn,issn,edby,blk-com,pp,ed,abr,ednx,ord,jabr,revdata,eprint,url,url-blk,misc-simple,bibinfo,nfss,{}') +%% merlin.mbs (with options: `tail,ay,nat,seq-no,nm-init,ed-au,nmlm,x10,x0,m10,m0,nmft,nmft-def,fnm-def,nmfted,lab,lab-def,keyxyr,yr-par,note-yr,tit-it,jtit-x,jttl-rm,thtit-x,trtit-x,vol-bf,vnum-x,volp-com,jpg-1,num-xser,jnm-x,pub-date,pre-pub,isbn,issn,edby,blk-com,pp,ed,abr,ednx,ord,jabr,revdata,eprint,url,url-blk,misc-simple,bibinfo,nfss,{}') +%% ---------------------------------------- +%% *** REVTeX-compatible apsrev.bst 1702 *** +%% +%% Copyright 1994-2000 Patrick W Daly + % =============================================================== + % IMPORTANT NOTICE: + % This bibliographic style (bst) file has been generated from one or + % more master bibliographic style (mbs) files, listed above. + % + % This generated file can be redistributed and/or modified under the terms + % of the LaTeX Project Public License Distributed from CTAN + % archives in directory macros/latex/base/lppl.txt; either + % version 1 of the License, or any later version. + % =============================================================== + % Name and version information of the main mbs file: + % \ProvidesFile{merlin.mbs}[2000/05/04 4.01 (PWD, AO, DPC)] + % For use with BibTeX version 0.99a or later + %------------------------------------------------------------------- + % This bibliography style file is intended for texts in ENGLISH + % This is an author-year citation style bibliography. As such, it is + % non-standard LaTeX, and requires a special package file to function properly. + % Such a package is natbib.sty by Patrick W. Daly + % The form of the \bibitem entries is + % \bibitem[Jones et al.(1990)]{key}... + % \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}... + % The essential feature is that the label (the part in brackets) consists + % of the author names, as they should appear in the citation, with the year + % in parentheses following. There must be no space before the opening + % parenthesis! + % With natbib v5.3, a full list of authors may also follow the year. + % In natbib.sty, it is possible to define the type of enclosures that is + % really wanted (brackets or parentheses), but in either case, there must + % be parentheses in the label. + % The \cite command functions as follows: + % \citet{key} ==>> Jones et al. (1990) + % \citet*{key} ==>> Jones, Baker, and Smith (1990) + % \citep{key} ==>> (Jones et al., 1990) + % \citep*{key} ==>> (Jones, Baker, and Smith, 1990) + % \citep[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2) + % \citep[e.g.][]{key} ==>> (e.g. Jones et al., 1990) + % \citep[e.g.][p. 32]{key} ==>> (e.g. Jones et al., p. 32) + % \citeauthor{key} ==>> Jones et al. + % \citeauthor*{key} ==>> Jones, Baker, and Smith + % \citeyear{key} ==>> 1990 + %--------------------------------------------------------------------- + +ENTRY + { address + archive + author + booktitle + chapter + collaboration + edition + editor + eid + eprint + howpublished + institution + isbn + issn + journal + key + month + note + number + numpages + organization + pages + publisher + school + series + title + type + url + volume + year + } + {} + { label extra.label sort.label short.list } +INTEGERS { output.state before.all mid.sentence after.sentence after.block } +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := +} +STRINGS { s t} +FUNCTION {output.nonnull} +{ 's := + output.state mid.sentence = + { ", " * write$ } + { output.state after.block = + { add.period$ write$ + newline$ + "\newblock " write$ + } + { output.state before.all = + 'write$ + { add.period$ " " * write$ } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ + s +} +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} +FUNCTION {fin.entry} +{ add.period$ + write$ + newline$ +} + +FUNCTION {new.block} +{ output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} +FUNCTION {new.sentence} +{ output.state after.block = + 'skip$ + { output.state before.all = + 'skip$ + { after.sentence 'output.state := } + if$ + } + if$ +} +FUNCTION {add.blank} +{ " " * before.all 'output.state := +} + +FUNCTION {date.block} +{ + skip$ +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "\emph{" swap$ * "}" * } + if$ +} +FUNCTION {bolden} +{ duplicate$ empty$ + { pop$ "" } + { "\textbf{" swap$ * "}" * } + if$ +} +FUNCTION {bib.name.font} +{ duplicate$ empty$ + { pop$ "" } + { "\bibnamefont{" swap$ * "}" * } + if$ +} +FUNCTION {bib.fname.font} +{ duplicate$ empty$ + { pop$ "" } + { "\bibfnamefont{" swap$ * "}" * } + if$ +} +FUNCTION {cite.name.font} +{ duplicate$ empty$ + { pop$ "" } + { "\citenamefont{" swap$ * "}" * } + if$ +} +FUNCTION {tie.or.space.prefix} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ +} + +FUNCTION {capitalize} +{ "u" change.case$ "t" change.case$ } + +FUNCTION {space.word} +{ " " swap$ * " " * } + % Here are the language-specific definitions for explicit words. + % Each function has a name bbl.xxx where xxx is the English word. + % The language selected here is ENGLISH +FUNCTION {bbl.and} +{ "and"} + +FUNCTION {bbl.etal} +{ "et~al." } + +FUNCTION {bbl.editors} +{ "eds." } + +FUNCTION {bbl.editor} +{ "ed." } + +FUNCTION {bbl.edby} +{ "edited by" } + +FUNCTION {bbl.edition} +{ "ed." } + +FUNCTION {bbl.volume} +{ "vol." } + +FUNCTION {bbl.of} +{ "of" } + +FUNCTION {bbl.number} +{ "no." } + +FUNCTION {bbl.nr} +{ "no." } + +FUNCTION {bbl.in} +{ "in" } + +FUNCTION {bbl.pages} +{ "pp." } + +FUNCTION {bbl.page} +{ "p." } + +FUNCTION {bbl.eidpp} +{ "pages" } + +FUNCTION {bbl.chapter} +{ "chap." } + +FUNCTION {bbl.techrep} +{ "Tech. Rep." } + +FUNCTION {bbl.mthesis} +{ "Master's thesis" } + +FUNCTION {bbl.phdthesis} +{ "Ph.D. thesis" } + +FUNCTION {bbl.first} +{ "1st" } + +FUNCTION {bbl.second} +{ "2nd" } + +FUNCTION {bbl.third} +{ "3rd" } + +FUNCTION {bbl.fourth} +{ "4th" } + +FUNCTION {bbl.fifth} +{ "5th" } + +FUNCTION {bbl.st} +{ "st" } + +FUNCTION {bbl.nd} +{ "nd" } + +FUNCTION {bbl.rd} +{ "rd" } + +FUNCTION {bbl.th} +{ "th" } + +MACRO {jan} {"Jan."} + +MACRO {feb} {"Feb."} + +MACRO {mar} {"Mar."} + +MACRO {apr} {"Apr."} + +MACRO {may} {"May"} + +MACRO {jun} {"Jun."} + +MACRO {jul} {"Jul."} + +MACRO {aug} {"Aug."} + +MACRO {sep} {"Sep."} + +MACRO {oct} {"Oct."} + +MACRO {nov} {"Nov."} + +MACRO {dec} {"Dec."} + +FUNCTION {eng.ord} +{ duplicate$ "1" swap$ * + #-2 #1 substring$ "1" = + { bbl.th * } + { duplicate$ #-1 #1 substring$ + duplicate$ "1" = + { pop$ bbl.st * } + { duplicate$ "2" = + { pop$ bbl.nd * } + { "3" = + { bbl.rd * } + { bbl.th * } + if$ + } + if$ + } + if$ + } + if$ +} + + + + + + + + + + + + + + + + + + + + + + + + + + + %------------------------------------------------------------------- + + % Begin module: + + + % \ProvidesFile{physjour.mbs}[1999/10/05 2.1 (PWD)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +MACRO {aa}{"Astron. \& Astrophys."} + + +MACRO {aasup}{"Astron. \& Astrophys. Suppl. Ser."} + + +MACRO {aj} {"Astron. J."} + + +MACRO {aph} {"Acta Phys."} + +MACRO {advp} {"Adv. Phys."} + +MACRO {ajp} {"Amer. J. Phys."} + +MACRO {ajm} {"Amer. J. Math."} + +MACRO {amsci} {"Amer. Sci."} + +MACRO {anofd} {"Ann. Fluid Dyn."} + +MACRO {am} {"Ann. Math."} + +MACRO {ap} {"Ann. Phys. (NY)"} + +MACRO {adp} {"Ann. Phys. (Leipzig)"} + +MACRO {ao} {"Appl. Opt."} + +MACRO {apl} {"Appl. Phys. Lett."} + +MACRO {app} {"Astroparticle Phys."} + +MACRO {apj} {"Astrophys. J."} + + +MACRO {apjsup} {"Astrophys. J. Suppl."} + + +MACRO {apss} {"Astrophys. Space Sci."} + + +MACRO {araa} {"Ann. Rev. Astron. Astrophys."} + + +MACRO {baas} {"Bull. Amer. Astron. Soc."} + + +MACRO {baps} {"Bull. Amer. Phys. Soc."} + +MACRO {cmp} {"Comm. Math. Phys."} + +MACRO {cpam} {"Commun. Pure Appl. Math."} + +MACRO {cppcf} {"Comm. Plasma Phys. \& Controlled Fusion"} + +MACRO {cpc} {"Comp. Phys. Comm."} + +MACRO {cqg} {"Class. Quant. Grav."} + +MACRO {cra} {"C. R. Acad. Sci. A"} + +MACRO {fed} {"Fusion Eng. \& Design"} + +MACRO {ft} {"Fusion Tech."} + +MACRO {grg} {"Gen. Relativ. Gravit."} + +MACRO {ieeens} {"IEEE Trans. Nucl. Sci."} + +MACRO {ieeeps} {"IEEE Trans. Plasma Sci."} + +MACRO {ijimw} {"Interntl. J. Infrared \& Millimeter Waves"} + +MACRO {ip} {"Infrared Phys."} + +MACRO {irp} {"Infrared Phys."} + +MACRO {jap} {"J. Appl. Phys."} + +MACRO {jasa} {"J. Acoust. Soc. America"} + +MACRO {jcp} {"J. Comp. Phys."} + +MACRO {jetp} {"Sov. Phys.--JETP"} + +MACRO {jfe} {"J. Fusion Energy"} + +MACRO {jfm} {"J. Fluid Mech."} + +MACRO {jmp} {"J. Math. Phys."} + +MACRO {jne} {"J. Nucl. Energy"} + +MACRO {jnec} {"J. Nucl. Energy, C: Plasma Phys., Accelerators, Thermonucl. Res."} + +MACRO {jnm} {"J. Nucl. Mat."} + +MACRO {jpc} {"J. Phys. Chem."} + +MACRO {jpp} {"J. Plasma Phys."} + +MACRO {jpsj} {"J. Phys. Soc. Japan"} + +MACRO {jsi} {"J. Sci. Instrum."} + +MACRO {jvst} {"J. Vac. Sci. \& Tech."} + +MACRO {nat} {"Nature"} + +MACRO {nature} {"Nature"} + + + +MACRO {nedf} {"Nucl. Eng. \& Design/Fusion"} + +MACRO {nf} {"Nucl. Fusion"} + +MACRO {nim} {"Nucl. Inst. \& Meth."} + +MACRO {nimpr} {"Nucl. Inst. \& Meth. in Phys. Res."} + +MACRO {np} {"Nucl. Phys."} + +MACRO {npb} {"Nucl. Phys. B"} + +MACRO {nt/f} {"Nucl. Tech./Fusion"} + +MACRO {npbpc} {"Nucl. Phys. B (Proc. Suppl.)"} + +MACRO {inc} {"Nuovo Cimento"} + +MACRO {nc} {"Nuovo Cimento"} + +MACRO {pf} {"Phys. Fluids"} + +MACRO {pfa} {"Phys. Fluids A: Fluid Dyn."} + +MACRO {pfb} {"Phys. Fluids B: Plasma Phys."} + +MACRO {pl} {"Phys. Lett."} + +MACRO {pla} {"Phys. Lett. A"} + +MACRO {plb} {"Phys. Lett. B"} + +MACRO {prep} {"Phys. Rep."} + +MACRO {pnas} {"Proc. Nat. Acad. Sci. USA"} + +MACRO {pp} {"Phys. Plasmas"} + +MACRO {ppcf} {"Plasma Phys. \& Controlled Fusion"} + +MACRO {phitrsl} {"Philos. Trans. Roy. Soc. London"} + +MACRO {prl} {"Phys. Rev. Lett."} + +MACRO {pr} {"Phys. Rev."} + +MACRO {physrev} {"Phys. Rev."} + +MACRO {pra} {"Phys. Rev. A"} + +MACRO {prb} {"Phys. Rev. B"} + +MACRO {prc} {"Phys. Rev. C"} + +MACRO {prd} {"Phys. Rev. D"} + +MACRO {pre} {"Phys. Rev. E"} + +MACRO {ps} {"Phys. Scripta"} + +MACRO {procrsl} {"Proc. Roy. Soc. London"} + +MACRO {rmp} {"Rev. Mod. Phys."} + +MACRO {rsi} {"Rev. Sci. Inst."} + +MACRO {science} {"Science"} + + +MACRO {sciam} {"Sci. Am."} + +MACRO {sam} {"Stud. Appl. Math."} + +MACRO {sjpp} {"Sov. J. Plasma Phys."} + +MACRO {spd} {"Sov. Phys.--Doklady"} + +MACRO {sptp} {"Sov. Phys.--Tech. Phys."} + +MACRO {spu} {"Sov. Phys.--Uspeki"} + +MACRO {st} {"Sky and Telesc."} + + + + + + % End module: physjour.mbs + + + + %------------------------------------------------------------------- + % Begin module: + % \ProvidesFile{geojour.mbs}[1999/11/16 2.0g (PWD)] +MACRO {aisr} {"Adv. Space Res."} +MACRO {ag} {"Ann. Geophys."} +MACRO {anigeo} {"Ann. Geofis."} +MACRO {angl} {"Ann. Glaciol."} +MACRO {andmet} {"Ann. d. Meteor."} +MACRO {andgeo} {"Ann. d. Geophys."} +MACRO {andphy} {"Ann. Phys.-Paris"} +MACRO {afmgb} {"Arch. Meteor. Geophys. Bioklimatol."} +MACRO {atph} {"Atm\'osphera"} +MACRO {aao} {"Atmos. Ocean"} +MACRO {ass}{"Astrophys. Space Sci."} +MACRO {atenv} {"Atmos. Environ."} +MACRO {aujag} {"Aust. J. Agr. Res."} +MACRO {aumet} {"Aust. Meteorol. Mag."} +MACRO {blmet} {"Bound.-Lay. Meteorol."} +MACRO {bams} {"Bull. Amer. Meteorol. Soc."} +MACRO {cch} {"Clim. Change"} +MACRO {cdyn} {"Clim. Dynam."} +MACRO {cbul} {"Climatol. Bull."} +MACRO {cap} {"Contrib. Atmos. Phys."} +MACRO {dsr} {"Deep-Sea Res."} +MACRO {dhz} {"Dtsch. Hydrogr. Z."} +MACRO {dao} {"Dynam. Atmos. Oceans"} +MACRO {eco} {"Ecology"} +MACRO {empl}{"Earth, Moon and Planets"} +MACRO {envres} {"Environ. Res."} +MACRO {envst} {"Environ. Sci. Technol."} +MACRO {ecms} {"Estuarine Coastal Mar. Sci."} +MACRO {expa}{"Exper. Astron."} +MACRO {geoint} {"Geofis. Int."} +MACRO {geopub} {"Geofys. Publ."} +MACRO {geogeo} {"Geol. Geofiz."} +MACRO {gafd} {"Geophys. Astrophys. Fluid Dyn."} +MACRO {gfd} {"Geophys. Fluid Dyn."} +MACRO {geomag} {"Geophys. Mag."} +MACRO {georl} {"Geophys. Res. Lett."} +MACRO {grl} {"Geophys. Res. Lett."} +MACRO {ga} {"Geophysica"} +MACRO {gs} {"Geophysics"} +MACRO {ieeetap} {"IEEE Trans. Antenn. Propag."} +MACRO {ijawp} {"Int. J. Air Water Pollut."} +MACRO {ijc} {"Int. J. Climatol."} +MACRO {ijrs} {"Int. J. Remote Sens."} +MACRO {jam} {"J. Appl. Meteorol."} +MACRO {jaot} {"J. Atmos. Ocean. Technol."} +MACRO {jatp} {"J. Atmos. Terr. Phys."} +MACRO {jce} {"J. Climate"} +MACRO {jcam} {"J. Climate Appl. Meteor."} +MACRO {jcm} {"J. Climate Meteor."} +MACRO {jcy} {"J. Climatol."} +MACRO {jgr} {"J. Geophys. Res."} +MACRO {jga} {"J. Glaciol."} +MACRO {jh} {"J. Hydrol."} +MACRO {jmr} {"J. Mar. Res."} +MACRO {jmrj} {"J. Meteor. Res. Japan"} +MACRO {jm} {"J. Meteor."} +MACRO {jpo} {"J. Phys. Oceanogr."} +MACRO {jra} {"J. Rech. Atmos."} +MACRO {jaes} {"J. Aeronaut. Sci."} +MACRO {japca} {"J. Air Pollut. Control Assoc."} +MACRO {jas} {"J. Atmos. Sci."} +MACRO {jmts} {"J. Mar. Technol. Soc."} +MACRO {jmsj} {"J. Meteorol. Soc. Japan"} +MACRO {josj} {"J. Oceanogr. Soc. Japan"} +MACRO {jwm} {"J. Wea. Mod."} +MACRO {lao} {"Limnol. Oceanogr."} +MACRO {mwl} {"Mar. Wea. Log"} +MACRO {mau} {"Mausam"} +MACRO {meteor} {"``Meteor'' Forschungsergeb."} +MACRO {map} {"Meteorol. Atmos. Phys."} +MACRO {metmag} {"Meteor. Mag."} +MACRO {metmon} {"Meteor. Monogr."} +MACRO {metrun} {"Meteor. Rundsch."} +MACRO {metzeit} {"Meteor. Z."} +MACRO {metgid} {"Meteor. Gidrol."} +MACRO {mwr} {"Mon. Weather Rev."} +MACRO {nwd} {"Natl. Weather Dig."} +MACRO {nzjmfr} {"New Zeal. J. Mar. Freshwater Res."} +MACRO {npg} {"Nonlin. Proc. Geophys."} +MACRO {om} {"Oceanogr. Meteorol."} +MACRO {ocac} {"Oceanol. Acta"} +MACRO {oceanus} {"Oceanus"} +MACRO {paleoc} {"Paleoceanography"} +MACRO {pce} {"Phys. Chem. Earth"} +MACRO {pmg} {"Pap. Meteor. Geophys."} +MACRO {ppom} {"Pap. Phys. Oceanogr. Meteor."} +MACRO {physzeit} {"Phys. Z."} +MACRO {pps} {"Planet. Space Sci."} +MACRO {pss} {"Planet. Space Sci."} +MACRO {pag} {"Pure Appl. Geophys."} +MACRO {qjrms} {"Quart. J. Roy. Meteorol. Soc."} +MACRO {quatres} {"Quat. Res."} +MACRO {rsci} {"Radio Sci."} +MACRO {rse} {"Remote Sens. Environ."} +MACRO {rgeo} {"Rev. Geophys."} +MACRO {rgsp} {"Rev. Geophys. Space Phys."} +MACRO {rdgeo} {"Rev. Geofis."} +MACRO {revmeta} {"Rev. Meteorol."} +MACRO {sgp}{"Surveys in Geophys."} +MACRO {sp} {"Solar Phys."} +MACRO {ssr} {"Space Sci. Rev."} +MACRO {tellus} {"Tellus"} +MACRO {tac} {"Theor. Appl. Climatol."} +MACRO {tagu} {"Trans. Am. Geophys. Union (EOS)"} +MACRO {wrr} {"Water Resour. Res."} +MACRO {weather} {"Weather"} +MACRO {wafc} {"Weather Forecast."} +MACRO {ww} {"Weatherwise"} +MACRO {wmob} {"WMO Bull."} +MACRO {zeitmet} {"Z. Meteorol."} + % End module: geojour.mbs + + + + + + + + + + + + + + + + + + + + + + + + + + %------------------------------------------------------------------- + + % Begin module: + + + % \ProvidesFile{photjour.mbs}[1999/02/24 2.0b (PWD)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +MACRO {appopt} {"Appl. Opt."} + +MACRO {bell} {"Bell Syst. Tech. J."} + +MACRO {ell} {"Electron. Lett."} + +MACRO {jasp} {"J. Appl. Spectr."} + +MACRO {jqe} {"IEEE J. Quantum Electron."} + +MACRO {jlwt} {"J. Lightwave Technol."} + +MACRO {jmo} {"J. Mod. Opt."} + +MACRO {josa} {"J. Opt. Soc. America"} + +MACRO {josaa} {"J. Opt. Soc. Amer.~A"} + +MACRO {josab} {"J. Opt. Soc. Amer.~B"} + +MACRO {jdp} {"J. Phys. (Paris)"} + +MACRO {oc} {"Opt. Commun."} + +MACRO {ol} {"Opt. Lett."} + +MACRO {phtl} {"IEEE Photon. Technol. Lett."} + +MACRO {pspie} {"Proc. Soc. Photo-Opt. Instrum. Eng."} + +MACRO {sse} {"Solid-State Electron."} + +MACRO {sjot} {"Sov. J. Opt. Technol."} + +MACRO {sjqe} {"Sov. J. Quantum Electron."} + +MACRO {sleb} {"Sov. Phys.--Leb. Inst. Rep."} + +MACRO {stph} {"Sov. Phys.--Techn. Phys."} + +MACRO {stphl} {"Sov. Techn. Phys. Lett."} + +MACRO {vr} {"Vision Res."} + +MACRO {zph} {"Z. f. Physik"} + +MACRO {zphb} {"Z. f. Physik~B"} + +MACRO {zphd} {"Z. f. Physik~D"} + +MACRO {CLEO} {"CLEO"} + +MACRO {ASSL} {"Adv. Sol.-State Lasers"} + +MACRO {OSA} {"OSA"} + + + + + % End module: photjour.mbs + + + +%% Copyright 1994-2000 Patrick W Daly +MACRO {acmcs} {"ACM Comput. Surv."} + +MACRO {acta} {"Acta Inf."} + +MACRO {cacm} {"Commun. ACM"} + +MACRO {ibmjrd} {"IBM J. Res. Dev."} + +MACRO {ibmsj} {"IBM Syst.~J."} + +MACRO {ieeese} {"IEEE Trans. Software Eng."} + +MACRO {ieeetc} {"IEEE Trans. Comput."} + +MACRO {ieeetcad} + {"IEEE Trans. Comput. Aid. Des."} + +MACRO {ipl} {"Inf. Process. Lett."} + +MACRO {jacm} {"J.~ACM"} + +MACRO {jcss} {"J.~Comput. Syst. Sci."} + +MACRO {scp} {"Sci. Comput. Program."} + +MACRO {sicomp} {"SIAM J. Comput."} + +MACRO {tocs} {"ACM Trans. Comput. Syst."} + +MACRO {tods} {"ACM Trans. Database Syst."} + +MACRO {tog} {"ACM Trans. Graphic."} + +MACRO {toms} {"ACM Trans. Math. Software"} + +MACRO {toois} {"ACM Trans. Office Inf. Syst."} + +MACRO {toplas} {"ACM Trans. Progr. Lang. Syst."} + +MACRO {tcs} {"Theor. Comput. Sci."} + +FUNCTION {bibinfo.check} +{ swap$ + duplicate$ missing$ + { + pop$ pop$ + "" + } + { duplicate$ empty$ + { + swap$ pop$ + } + { swap$ + "\bibinfo{" swap$ * "}{" * swap$ * "}" * + } + if$ + } + if$ +} +FUNCTION {bibinfo.warn} +{ swap$ + duplicate$ missing$ + { + swap$ "missing " swap$ * " in " * cite$ * warning$ pop$ + "" + } + { duplicate$ empty$ + { + swap$ "empty " swap$ * " in " * cite$ * warning$ + } + { swap$ + "\bibinfo{" swap$ * "}{" * swap$ * "}" * + } + if$ + } + if$ +} +FUNCTION {format.eprint} +{ eprint duplicate$ empty$ + 'skip$ + { "\eprint" + archive empty$ + 'skip$ + { "[" * archive * "]" * } + if$ + "{" * swap$ * "}" * + } + if$ +} +FUNCTION {format.url} +{ url empty$ + { "" } + { "\urlprefix\url{" url * "}" * } + if$ +} + +STRINGS { bibinfo} +INTEGERS { nameptr namesleft numnames } + +FUNCTION {format.names} +{ 'bibinfo := + duplicate$ empty$ 'skip$ { + 's := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{f.}" format.name$ duplicate$ empty$ 'skip$ + { tie.or.space.prefix bib.fname.font swap$ * } + if$ + s nameptr + "{vv~}{ll}" format.name$ bib.name.font * + s nameptr + "{jj}" format.name$ duplicate$ empty$ 'skip$ + { bib.fname.font ", " swap$ * } + if$ + * + bibinfo bibinfo.check + 't := + nameptr #1 > + { + nameptr #0 + #100 + + #1 + = + numnames #0 + #100 + + > and + { "others" 't := + #1 'namesleft := } + 'skip$ + if$ + namesleft #1 > + { ", " * t * } + { + numnames #2 > + { "," * } + 'skip$ + if$ + s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + t "others" = + { + " " * bbl.etal bib.name.font * + } + { + bbl.and + bib.name.font + space.word * t * + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + } if$ +} +FUNCTION {format.names.ed} +{ + format.names +} +FUNCTION {format.key} +{ empty$ + { key field.or.null } + { "" } + if$ +} + +FUNCTION {format.authors} +{ author "author" format.names + duplicate$ empty$ 'skip$ + { collaboration "collaboration" bibinfo.check + duplicate$ empty$ 'skip$ + { " (" swap$ * ")" * } + if$ + * + } + if$ +} +FUNCTION {get.bbl.editor} +{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ } + +FUNCTION {format.editors} +{ editor "editor" format.names duplicate$ empty$ 'skip$ + { + "," * + " " * + get.bbl.editor + * + } + if$ +} +FUNCTION {format.isbn} +{ isbn "isbn" bibinfo.check + duplicate$ empty$ 'skip$ + { + "ISBN " swap$ * + } + if$ +} + +FUNCTION {format.issn} +{ issn "issn" bibinfo.check + duplicate$ empty$ 'skip$ + { + "ISSN " swap$ * + } + if$ +} + +FUNCTION {format.note} +{ + note empty$ + { "" } + { note #1 #1 substring$ + duplicate$ "{" = + 'skip$ + { output.state mid.sentence = + { "l" } + { "u" } + if$ + change.case$ + } + if$ + note #2 global.max$ substring$ * "note" bibinfo.check + } + if$ +} + +FUNCTION {format.title} +{ title + duplicate$ empty$ + { skip$ } + { "t" change.case$ } + if$ + "title" bibinfo.check + duplicate$ empty$ 'skip$ + { + emphasize + } + if$ +} + +FUNCTION {format.full.names} +{'s := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv~}{ll}" format.name$ + 't := + nameptr #1 > + { + nameptr #0 + #100 + + #1 + = + numnames #0 + #100 + + > and + { "others" 't := + #1 'namesleft := } + 'skip$ + if$ + namesleft #1 > + { ", " * t * } + { + s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + t "others" = + { + " " * bbl.etal * + cite.name.font + } + { + numnames #2 > + { "," * } + 'skip$ + if$ + bbl.and + space.word * t * + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + t "others" = + 'skip$ + { cite.name.font } + if$ +} + +FUNCTION {author.editor.key.full} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.full.names } + if$ + } + { author format.full.names } + if$ +} + +FUNCTION {author.key.full} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { author format.full.names } + if$ +} + +FUNCTION {editor.key.full} +{ editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.full.names } + if$ +} + +FUNCTION {make.full.names} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.full + { type$ "proceedings" = + 'editor.key.full + 'author.key.full + if$ + } + if$ +} + +FUNCTION {output.bibitem} +{ newline$ + "\bibitem[{" write$ + label write$ + ")" make.full.names duplicate$ short.list = + { pop$ } + { * } + if$ + "}]{" * write$ + cite$ write$ + "}" write$ + newline$ + "" + before.all 'output.state := +} + +FUNCTION {n.dashify} +{ + 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {word.in} +{ bbl.in + " " * } + +FUNCTION {format.date} +{ year "year" bibinfo.check duplicate$ empty$ + { + "empty year in " cite$ * "; set to ????" * warning$ + pop$ "????" + } + 'skip$ + if$ + extra.label * + before.all 'output.state := + " (" swap$ * ")" * +} +FUNCTION {format.date.misc} +{ + year empty$ 'skip$ { + format.date "year" output.check + } if$ +} +FUNCTION {format.monthdate} +{ month "month" bibinfo.check duplicate$ empty$ 'skip$ + { + " " * + } + if$ + year "year" bibinfo.check duplicate$ empty$ + { + "empty year in " cite$ * "; set to ????" * warning$ + pop$ "????" + } + 'skip$ + if$ + extra.label * + before.all 'output.state := + * " (" swap$ * ")" * +} +FUNCTION {format.monthdate.misc} +{ + year empty$ 'skip$ { + format.monthdate "year" output.check + } if$ +} +FUNCTION {format.btitle} +{ title "title" bibinfo.check + duplicate$ empty$ 'skip$ + { + emphasize + } + if$ +} +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} +FUNCTION {format.bvolume} +{ volume empty$ + { "" } + { bbl.volume volume tie.or.space.prefix + "volume" bibinfo.check * * + series "series" bibinfo.check + duplicate$ empty$ 'pop$ + { swap$ bbl.of space.word * swap$ + emphasize * } + if$ + "volume and number" number either.or.check + } + if$ +} +FUNCTION {format.number.series} +{ volume empty$ + { number empty$ + { series field.or.null } + { series empty$ + { number "number" bibinfo.check } + { output.state mid.sentence = + { bbl.number } + { bbl.number capitalize } + if$ + number tie.or.space.prefix "number" bibinfo.check * * + bbl.in space.word * + series "series" bibinfo.check * + } + if$ + } + if$ + } + { "" } + if$ +} +FUNCTION {is.num} +{ chr.to.int$ + duplicate$ "0" chr.to.int$ < not + swap$ "9" chr.to.int$ > not and +} + +FUNCTION {extract.num} +{ duplicate$ 't := + "" 's := + { t empty$ not } + { t #1 #1 substring$ + t #2 global.max$ substring$ 't := + duplicate$ is.num + { s swap$ * 's := } + { pop$ "" 't := } + if$ + } + while$ + s empty$ + 'skip$ + { pop$ s } + if$ +} + +FUNCTION {convert.edition} +{ extract.num "l" change.case$ 's := + s "first" = s "1" = or + { bbl.first 't := } + { s "second" = s "2" = or + { bbl.second 't := } + { s "third" = s "3" = or + { bbl.third 't := } + { s "fourth" = s "4" = or + { bbl.fourth 't := } + { s "fifth" = s "5" = or + { bbl.fifth 't := } + { s #1 #1 substring$ is.num + { s eng.ord 't := } + { edition 't := } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + t +} + +FUNCTION {format.edition} +{ edition duplicate$ empty$ 'skip$ + { + convert.edition + output.state mid.sentence = + { "l" } + { "t" } + if$ change.case$ + "edition" bibinfo.check + " " * bbl.edition * + } + if$ +} +INTEGERS { multiresult } +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} +FUNCTION {format.pages} +{ pages duplicate$ empty$ 'skip$ + { duplicate$ multi.page.check + { + bbl.pages swap$ + n.dashify + } + { + bbl.page swap$ + } + if$ + tie.or.space.prefix + "pages" bibinfo.check + * * + } + if$ +} +FUNCTION {first.page} +{ 't := + "" + { t empty$ not t #1 #1 substring$ "-" = not and } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + while$ +} + +FUNCTION {format.journal.pages} +{ pages duplicate$ empty$ 'pop$ + { swap$ duplicate$ empty$ + { pop$ pop$ format.pages } + { + ", " * + swap$ + first.page + "pages" bibinfo.check + * + } + if$ + } + if$ +} +FUNCTION {format.journal.eid} +{ eid "eid" bibinfo.check + duplicate$ empty$ 'skip$ + { swap$ duplicate$ empty$ 'skip$ + { + ", " * + } + if$ + swap$ + numpages empty$ 'skip$ + { bbl.eidpp numpages tie.or.space.prefix + "numpages" bibinfo.check * * + " (" swap$ * ")" * * + } + if$ + } + if$ * +} +FUNCTION {format.vol.num.pages} +{ volume field.or.null + duplicate$ empty$ 'skip$ + { + "volume" bibinfo.check + } + if$ + bolden + eid empty$ + { format.journal.pages } + { format.journal.eid } + if$ +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + 'format.pages + { type empty$ + { bbl.chapter } + { type "l" change.case$ + "type" bibinfo.check + } + if$ + chapter tie.or.space.prefix + "chapter" bibinfo.check + * * + pages empty$ + 'skip$ + { ", " * format.pages * } + if$ + } + if$ +} + +FUNCTION {format.booktitle} +{ + booktitle "booktitle" bibinfo.check + emphasize +} +FUNCTION {format.in.ed.booktitle} +{ format.booktitle duplicate$ empty$ 'skip$ + { + editor "editor" format.names.ed duplicate$ empty$ 'pop$ + { + bbl.edby + " " * swap$ * + swap$ + "," * + " " * swap$ + * } + if$ + word.in swap$ * + } + if$ +} +FUNCTION {format.thesis.type} +{ type duplicate$ empty$ + 'pop$ + { swap$ pop$ + "t" change.case$ "type" bibinfo.check + } + if$ +} +FUNCTION {format.tr.number} +{ number "number" bibinfo.check + type duplicate$ empty$ + { pop$ bbl.techrep } + 'skip$ + if$ + "type" bibinfo.check + swap$ duplicate$ empty$ + { pop$ "t" change.case$ } + { tie.or.space.prefix * * } + if$ +} +FUNCTION {format.article.crossref} +{ + word.in + " \cite{" * crossref * "}" * +} +FUNCTION {format.book.crossref} +{ volume duplicate$ empty$ + { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ + pop$ word.in + } + { bbl.volume + swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word * + } + if$ + " \cite{" * crossref * "}" * +} +FUNCTION {format.incoll.inproc.crossref} +{ + word.in + " \cite{" * crossref * "}" * +} +FUNCTION {format.org.or.pub} +{ 't := + "" + add.blank "(" * + t empty$ + { address "address" bibinfo.check * + } + { t * + address empty$ + 'skip$ + { ", " * address "address" bibinfo.check * } + if$ + } + if$ + year duplicate$ empty$ + { "empty year in " cite$ * "; set to ????" * warning$ + pop$ "????" } + { "year" bibinfo.check extra.label * } + if$ + t empty$ address empty$ and + { * } + { ", " swap$ * * } + if$ + ")" * +} +FUNCTION {format.publisher.address} +{ publisher "publisher" bibinfo.warn format.org.or.pub +} + +FUNCTION {format.organization.address} +{ organization "organization" bibinfo.check format.org.or.pub +} + +FUNCTION {article} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.title output + crossref missing$ + { + "" + journal + duplicate$ empty$ + { pop$ pop$ } { + "journal" bibinfo.check + * "journal" output.check + add.blank + } if$ + format.vol.num.pages output + format.date "year" output.check + } + { format.article.crossref output.nonnull + format.pages output + } + if$ + format.issn output + format.note output + format.eprint output + format.url output + fin.entry +} +FUNCTION {book} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + editor format.key output + } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + format.number.series output + format.publisher.address output + } + { + format.book.crossref output.nonnull + format.date "year" output.check + } + if$ + format.edition output + format.isbn output + format.note output + format.eprint output + format.url output + fin.entry +} +FUNCTION {booklet} +{ output.bibitem + format.authors output + author format.key output + format.title "title" output.check + howpublished "howpublished" bibinfo.check output + address "address" bibinfo.check output + format.date "year" output.check + format.isbn output + format.note output + format.eprint output + format.url output + fin.entry +} + +FUNCTION {inbook} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + editor format.key output + } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + format.btitle "title" output.check + crossref missing$ + { + format.publisher.address output + format.bvolume output + format.chapter.pages "chapter and pages" output.check + format.number.series output + } + { + format.chapter.pages "chapter and pages" output.check + format.book.crossref output.nonnull + format.date "year" output.check + } + if$ + format.edition output + crossref missing$ + { format.isbn output } + 'skip$ + if$ + format.note output + format.eprint output + format.url output + fin.entry +} + +FUNCTION {incollection} +{ output.bibitem + format.authors "author" output.check + author format.key output + crossref missing$ + { format.title output + format.in.ed.booktitle "booktitle" output.check + format.publisher.address output + format.bvolume output + format.number.series output + format.chapter.pages output + format.edition output + format.isbn output + } + { format.incoll.inproc.crossref output.nonnull + format.chapter.pages output + } + if$ + format.note output + format.eprint output + format.url output + fin.entry +} +FUNCTION {inproceedings} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.title output + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + publisher empty$ + { format.organization.address output } + { organization "organization" bibinfo.check output + format.publisher.address output + } + if$ + format.bvolume output + format.number.series output + format.pages output + format.isbn output + format.issn output + } + { format.incoll.inproc.crossref output.nonnull + format.pages output + } + if$ + format.note output + format.eprint output + format.url output + fin.entry +} +FUNCTION {conference} { inproceedings } +FUNCTION {manual} +{ output.bibitem + format.authors output + author format.key output + format.btitle "title" output.check + organization "organization" bibinfo.check output + address "address" bibinfo.check output + format.edition output + format.date "year" output.check + format.note output + format.eprint output + format.url output + fin.entry +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.title output + bbl.mthesis format.thesis.type output.nonnull + school "school" bibinfo.warn output + address "address" bibinfo.check output + format.date "year" output.check + format.note output + format.eprint output + format.url output + fin.entry +} + +FUNCTION {misc} +{ output.bibitem + format.authors output + author format.key output + format.title output + howpublished "howpublished" bibinfo.check output + format.date.misc + format.note output + format.eprint output + format.url output + fin.entry +} +FUNCTION {phdthesis} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.title output + bbl.phdthesis format.thesis.type output.nonnull + school "school" bibinfo.warn output + address "address" bibinfo.check output + format.date "year" output.check + format.note output + format.eprint output + format.url output + fin.entry +} + +FUNCTION {proceedings} +{ output.bibitem + format.editors output + editor format.key output + format.btitle "title" output.check + format.bvolume output + format.number.series output + publisher empty$ + { format.organization.address output } + { organization "organization" bibinfo.check output + format.publisher.address output + } + if$ + format.isbn output + format.issn output + format.note output + format.eprint output + format.url output + fin.entry +} + +FUNCTION {techreport} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.title output + format.tr.number output.nonnull + institution "institution" bibinfo.warn output + address "address" bibinfo.check output + format.date "year" output.check + format.note output + format.eprint output + format.url output + fin.entry +} + +FUNCTION {unpublished} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.title output + format.monthdate.misc + format.note "note" output.check + format.eprint output + format.url output + fin.entry +} + +FUNCTION {default.type} { misc } +READ +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} +INTEGERS { len } +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} +FUNCTION {format.lab.names} +{ 's := + "" 't := + s #1 "{vv~}{ll}" format.name$ + s num.names$ duplicate$ + #2 > + { pop$ + " " * bbl.etal * + cite.name.font + "others" 't := + } + { #2 < + 'skip$ + { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { + " " * bbl.etal * + cite.name.font + "others" 't := + } + { bbl.and space.word * s #2 "{vv~}{ll}" format.name$ + * } + if$ + } + if$ + } + if$ + t "others" = + 'skip$ + { cite.name.font } + if$ +} + +FUNCTION {author.key.label} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.editor.key.label} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.lab.names } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {editor.key.label} +{ editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.lab.names } + if$ +} + +FUNCTION {calc.short.authors} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.label + { type$ "proceedings" = + 'editor.key.label + 'author.key.label + if$ + } + if$ + 'short.list := +} + +FUNCTION {calc.label} +{ calc.short.authors + short.list + "(" + * + year duplicate$ empty$ + short.list key field.or.null = or + { pop$ "" } + 'skip$ + if$ + * + 'label := +} + +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" + format.name$ 't := + nameptr #1 > + { + nameptr #0 + #100 + + #1 + = + numnames #0 + #100 + + > and + { "others" 't := + #1 'namesleft := } + 'skip$ + if$ + " " * + namesleft #1 = t "others" = and + { "zzzzz" * } + { t sortify * } + if$ + } + { t sortify * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {sort.format.title} +{ 't := + "A " #2 + "An " #3 + "The " #4 t chop.word + chop.word + chop.word + sortify + #1 global.max$ substring$ +} +FUNCTION {author.sort} +{ author empty$ + { key empty$ + { "to sort, need author or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { author sort.format.names } + if$ +} +FUNCTION {author.editor.sort} +{ author empty$ + { editor empty$ + { key empty$ + { "to sort, need author, editor, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ + } + { author sort.format.names } + if$ +} +FUNCTION {editor.sort} +{ editor empty$ + { key empty$ + { "to sort, need editor or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ +} +INTEGERS { seq.num } +FUNCTION {init.seq} +{ #0 'seq.num :=} +EXECUTE {init.seq} +FUNCTION {int.to.fix} +{ "000000000" swap$ int.to.str$ * + #-1 #10 substring$ +} +FUNCTION {presort} +{ calc.label + label sortify + " " + * + seq.num #1 + 'seq.num := + seq.num int.to.fix + 'sort.label := + sort.label + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} + +ITERATE {presort} +SORT +STRINGS { last.label next.extra } +INTEGERS { last.extra.num number.label } +FUNCTION {initialize.extra.label.stuff} +{ #0 int.to.chr$ 'last.label := + "" 'next.extra := + #0 'last.extra.num := + #0 'number.label := +} +FUNCTION {forward.pass} +{ last.label label = + { last.extra.num #1 + 'last.extra.num := + last.extra.num int.to.chr$ 'extra.label := + } + { "a" chr.to.int$ 'last.extra.num := + "" 'extra.label := + label 'last.label := + } + if$ + number.label #1 + 'number.label := +} +FUNCTION {reverse.pass} +{ next.extra "b" = + { "a" 'extra.label := } + 'skip$ + if$ + extra.label 'next.extra := + extra.label + duplicate$ empty$ + 'skip$ + { "{\natexlab{" swap$ * "}}" * } + if$ + 'extra.label := + label extra.label * 'label := +} +EXECUTE {initialize.extra.label.stuff} +ITERATE {forward.pass} +REVERSE {reverse.pass} +FUNCTION {bib.sort.order} +{ sort.label + " " + * + year field.or.null sortify + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} +ITERATE {bib.sort.order} +SORT +FUNCTION {begin.bib} +{ preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "\begin{thebibliography}{" number.label int.to.str$ * "}" * + write$ newline$ + "\expandafter\ifx\csname natexlab\endcsname\relax\def\natexlab#1{#1}\fi" + write$ newline$ + "\expandafter\ifx\csname bibnamefont\endcsname\relax" + write$ newline$ + " \def\bibnamefont#1{#1}\fi" + write$ newline$ + "\expandafter\ifx\csname bibfnamefont\endcsname\relax" + write$ newline$ + " \def\bibfnamefont#1{#1}\fi" + write$ newline$ + "\expandafter\ifx\csname citenamefont\endcsname\relax" + write$ newline$ + " \def\citenamefont#1{#1}\fi" + write$ newline$ + "\expandafter\ifx\csname url\endcsname\relax" + write$ newline$ + " \def\url#1{\texttt{#1}}\fi" + write$ newline$ + "\expandafter\ifx\csname urlprefix\endcsname\relax\def\urlprefix{URL }\fi" + write$ newline$ + "\providecommand{\bibinfo}[2]{#2}" + write$ newline$ + "\providecommand{\eprint}[2][]{\url{#2}}" + write$ newline$ +} +EXECUTE {begin.bib} +EXECUTE {init.state.consts} +ITERATE {call.type$} +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} +EXECUTE {end.bib} +%% End of customized bst file +%% +%% End of file `apsrev.bst'. diff --git a/Carpet/CarpetWeb/publications/bib2xhtml b/Carpet/CarpetWeb/publications/bib2xhtml new file mode 100644 index 000000000..1b63bc196 --- /dev/null +++ b/Carpet/CarpetWeb/publications/bib2xhtml @@ -0,0 +1,1254 @@ +#!/opt/local/bin/perl -w +eval 'exec /opt/local/bin/perl -w -S $0 ${1+"$@"}' + if 0; + +$version = '$Id: bib2xhtml 2.26 2007/06/14 14:59:44 dds Exp $'; + +# +# Convert from bibtex to XHTML. +# +# (C) Copyright 1995, 1996 David Hull. +# (David Hull / hull@cs.uiuc.edu / http://www.uiuc.edu/ph/www/dlhull) +# +# (C) Copyright 2002-2007 Diomidis Spinellis +# http://www.spinellis.gr +# +# This program is free software. You can redistribute it and/or modify +# it under the terms of the GNU General Public License. See the +# files README and COPYING for details. +# +# This source code contains UTF-8 characters. You might want to use +# an appropriate editor, if you want to view/modify the LaTeX to Unicode +# substitution commands. +# + +use Getopt::Std; + +require 'ctime.pl'; + +eval {use PDF::API2}; +$have_pdf_api = 1 unless (defined $@ && $@ ne ''); + +# Label styles. +$label_styles{'plain'} = $LABEL_PLAIN = 1; +$label_styles{'ordered'} = $LABEL_ORDERED = 2; +$label_styles{'numbered'} = $LABEL_NUMBERED = 3; +$label_styles{'default'} = $LABEL_DEFAULT = 4; + +$list_start[$LABEL_PLAIN] = 'ul class="bib2xhtml"'; +$list_end[$LABEL_PLAIN] = "/ul"; +$list_start[$LABEL_ORDERED] = 'ol class="bib2xhtml"'; +$list_end[$LABEL_ORDERED] = "/ol"; +$list_start[$LABEL_NUMBERED] = 'dl compact="1" class="bib2xhtml"'; +$list_end[$LABEL_NUMBERED] = "/dl"; +$list_start[$LABEL_DEFAULT] = 'dl class="bib2xhtml"'; +$list_end[$LABEL_DEFAULT] = "/dl"; + +@tmpfiles = (); + +sub usage { + $program = $0; + $program =~ s+^.*/++; + print STDERR <<_EOF_; +usage: $program [-a] [-b bibtex-options] [-c] [-d delim] [-D mappings] + [-e extended-information] [-h heading] [-i] [-k] + [-m macro file] [-r] [-s style] [-t] [-u] [-v] + sourcefile [htmlfile] + + -a Write abstract to htmlfile. + -b bibtex-options + Options to pass to bibtex. + -c Sort chronologically, by year and then by author. + -d delim + Specify bibliography delimiter. + -D mappings + Specify file path to URL mappings. + -e extended-information + Specify the extended metadata information (page count, size, PDF icon) + that will be included in each citation. + -h heading + String to use instead of default title when creating a new htmlfile. + If updating an existing htmlfile, this option is ignored. + -i Use included citations + -k In labeled styles append to the label of each entry its bibtex key. + -m macro file + Specify an additional macro file. + -r Sort in reverse chronological order. + -s style + Control style of bibliography: + (empty, plain, alpha, named, unsort, or unsortlist). + -t Write timestamp to htmlfile. + -u Output a Unicode-coded document. + -v Report the version number. +_EOF_ + exit(1); +} + +# Return the command needed to open a (perhaps compressed) file, +# as well as the type of compression. +sub openCommand { + local($path) = @_; + local($cmd); + local($cmp); + +command: { + ($path =~ m/\.Z$/ && + ($cmd = "uncompress -c $path |", $cmp = "Compressed", last command)); + ($path =~ m/\.g?z$/ && + ($cmd = "gzip -d -c $path |", $cmp = "Gzipped", last command)); + ($cmd = "<$path", $cmp = "", last command); + } + + ($cmd, $cmp); +} + +@paperTypes = ("PostScript", "PDF", "DVI", "DOI"); + +sub PostScriptPageCount { + local($cmd) = @_; + local($pageCount); + + #print "in PostScriptPageCount $cmd\n"; + + open(FILE, $cmd) || (warn "error opening $cmd: $!\n", return undef); + + local($_); + local($/) = "\n"; + +line: + while (<FILE>) { + last line if m/^%%EndComments/; + if (m/^%%Pages:\s*(\d+)/) { + $pageCount = $1 if ($1 > 0); + last line; + } + } + close(FILE); + + $pageCount; +} + +sub PDFPageCount { + return undef unless ($have_pdf_api); + my($file) = @_; + $file =~ s/^\<//; + # print "in PDFPageCount $file\n"; + my($pdf); + eval {$pdf = PDF::API2->open($file)}; + return undef if (defined $@ && $@ ne ''); + return $pdf->pages; +} + +sub DVIPageCount { + local($cmd) = @_; + local($pageCount); + + #print "in DVIPageCount $cmd\n"; + + if ($cmd =~ m/^</) { + # Simple file. + $cmd = "dviselect : $cmd >/dev/null"; + } else { + # Compressed file. + $cmd .= "dviselect : >/dev/null"; + } + + # Look at dviselect's stderr. + open(DVISELECT, "-|") || (open(STDERR, ">&STDOUT"), exec $cmd); + + local($_); + local($/) = "\n"; +line: + while (<DVISELECT>) { + if (m/[Ww]rote (\d+) pages/) { + $pageCount = $1; + last line; + } + } + close(DVISELECT); + + $pageCount; +} + +# Make an intelligent link to a paper file. +sub doPaperLinks { + local($file); + local($url); + local($paper, $ppaper); + local($cstr, $pstr, $sstr); + +papertype: + foreach $paper (@paperTypes) { + + $ppaper = $paper unless defined($notype); # Paper type + $sstr = ""; # size string + $pstr = ""; # pages string + $cstr = ""; # compression type string + + if (($url) = m/\<\!\-\- $paper:[\s\n]+(\S+)[\s\n]+\-\-\>/) { + + # If $url looks like a file (doesn't begin with http://, ftp://, + # etc.), get more info. + if ($paper ne 'DOI' && $url !~ m/^[^\:\/]+\:\//) { + local($file) = $url; + local($path); + local($dir); + foreach $dir (@filedir) { + $path = join('/', $dir, $file); + if ( -f $path) { + if (defined $dirmap{$dir}) { + $url = join('/', $dirmap{$dir}, $file); + } else { + $url = $path; + } + last; + } + } + + if (! -f $path) { + print STDERR "couldn't find $file\n"; + next papertype; + } + + local($opencmd); + local($size); + local($pageCountRoutine); + local($pageCount) = 0; + + ($opencmd, $cstr) = &openCommand($path); + + # Get size. + $size = -s _; + if (! defined $nosize) { + if ($size < 1000) { + $sstr = ", $size bytes"; + } elsif ($size < 1000000) { + $sstr = sprintf ", %.1f kbyte", $size / 1000; + } elsif ($size < 1000000000) { + $sstr = sprintf ", %.1f Mbyte", $size / 1000000; + } else { + $sstr = sprintf ", %.1f Gbyte", $size / 1000000000; + } + } + + # Get page count. + $pageCountRoutine = $paper . "PageCount"; + $pageCount = &$pageCountRoutine($opencmd); + $pstr = ", $pageCount pages" if (defined $pageCount && !defined $nopages); + + # Get compression type. + $cstr = "$cstr " if ($cstr ne ""); + undef $cstr if (defined $nocompression); + } elsif ($paper eq 'DOI' && + (($url =~ m/^doi:(.*)/i) || + ($url =~ m/^http:\/\/[\w.]+\/(.*)/i) || + ($url =~ m/^(.*)$/))) { + # Convert the DOI URL into an HTTP link + $url = "http://dx.doi.org/$1"; + $ppaper = "doi:$1" unless (defined($nodoi)); + } + + $ppaper = $typeicon{$paper} if (defined $typeicon{$paper}); + + #print STDERR "found $paper $file$pstr$sstr\n"; + + if ($nobrackets) { + s/\<\!\-\- $paper:[\s\n]+\S+[\s\n]+\-\-\>/<a href=\"$url\">${cstr}$ppaper<\/a>$pstr$sstr/; + } else { + s/\<\!\-\- $paper:[\s\n]+\S+[\s\n]+\-\-\>/(<a href=\"$url\">${cstr}$ppaper<\/a>$pstr$sstr)/; + } + } + } +} + +# html_encode(string) +# Protect character entities in string. +sub html_encode { + local($_) = @_; + + s/&/&/g; # Must be first. + s/</</g; + s/>/>/g; + s/"/"/g; + + $_; +} + +# Convert $_ into an HTML entity representation +sub html_ent { + # Accents. + s/\\i\b/i/g; # dotless i. + s/\\\'(\001\d+)\{([AEIOUaeiou])\1\}/&$2acute;/g; # acute accent \'{x} + s/\\\'([AEIOUaeiou])/&$1acute;/g; # acute accent \'x + s/\\\`(\001\d+)\{([AEIOUaeiou])\1\}/&$2grave;/g; # grave accent \`{x} + s/\\\`([AEIOUaeiou])/&$1grave;/g; # grave accent \`x + s/\\\"(\001\d+)\{([AEIOUaeiouy])\1\}/&$2uml;/g; # umlaut \"{x} + s/\\\"([AEIOUaeiouy])/&$1uml;/g; # umlaut \"x + s/\\\~(\001\d+)\{([ANOano])\1\}/&$2tilde;/g; # tilde \~{x} + s/\\\~([ANOano])/&$1tilde;/g; # tilde \~x + s/\\\^(\001\d+)\{([AEIOUaeiou])\1\}/&$2circ;/g; # circumflex \^{x} + s/\\\^([AEIOUaeiou])/&$1circ;/g; # circumflex \^x + s/\\c(\001\d+)\{([Cc])\1\}/&$2cedil;/g; # cedilla \c{x} + # The following accents have no HTML equivalent. + # (This list is still not complete.) + s/\\u(\001\d+)\{(.)\1\}/$2/g; # breve accent \u{x} + s/\\v(\001\d+)\{(.)\1\}/$2/g; # hacek accent \v{x} + s/\\([lL])\b/$1/g; # slashed l + s/\\\=(\001\d+)\{(.)\1\}/$2/g; # macron \={x} + s/\\\=(.)/$1/g; # macron accent \=x + s/\\\.(\001\d+)\{(.)\1\}/$2/g; # dot \.{x} + s/\\\.(.)/$1/g; # dot accent \.x + + # Other special characters. + s/\\([Oo])\b\s*/&$1slash;/g; # \[Oo] -> &[Oo]slash; + s/\\AA\b\s*/Å/g; # \AA -> Å + s/\\aa\b\s*/å/g; # \aa -> å + s/\\AE\b\s*/Æ/g; # \AE -> Æ + s/\\ae\b\s*/æ/g; # \ae -> æ + s/\\ss\b\s*/ß/g; # \ss -> ß + s/\\S\b\s*/§/g; # \S -> § + s/\\P\b\s*/¶/g; # \P -> ¶ + s/\\pounds\b\s*/£/g; # \pounds -> £ + s/\?\`/¿/g; # ?` -> ¿ + s/\!\`/¡/g; # !` -> ¡ + + # Other special characters. + # Try to be careful to not change the dashes in HTML comments + # (<!-- comment -->) to –s. + s/\-\-\-/—/g; # --- -> — + s/([^\!])\-\-([^\>])/$1–$2/g; # -- -> – + #s/\-\-\-/\227/g; # --- -> — + #s/([^\!])\-\-([^\>])/$1\226$2/g; # -- -> – + + # Upper and lower case greek + s/\\([aA]lpha)\b/&$1;/g; + s/\\([bB]eta)\b/&$1;/g; + s/\\([gG]amma)\b/&$1;/g; + s/\\([dD]elta)\b/&$1;/g; + s/\\varepsilon\b/ε/g; + s/\\([eE]psilon)\b/&$1;/g; + s/\\([zZ]eta)\b/&$1;/g; + s/\\([eE]ta)\b/&$1;/g; + s/\\([tT]heta)\b/&$1;/g; + s/\\vartheta\b/θ/g; + s/\\([iI]ota)\b/&$1;/g; + s/\\([kK]appa)\b/&$1;/g; + s/\\([lL]ambda)\b/&$1;/g; + s/\\([mM]u)\b/&$1;/g; + s/\\([nN]u)\b/&$1;/g; + s/\\([xX]i)\b/&$1;/g; + s/\\([oO]micron)\b/&$1;/g; + s/\\([pP]i)\b/&$1;/g; + s/\\varpi\b/π/g; + s/\\([rR]ho)\b/&$1;/g; + s/\\varrho\b/ρ/g; + s/\\([sS]igma)\b/&$1;/g; + s/\\varsigma\b/ς/g; + s/\\([tT]au)\b/&$1;/g; + s/\\([uU]psilon)\b/&$1;/g; + s/\\([pP]hi)\b/&$1;/g; + s/\\varphi\b/φ/g; + s/\\([cC]hi)\b/&$1;/g; + s/\\([pP]si)\b/&$1;/g; + s/\\([oO]mega)\b/&$1;/g; +} + +# Convert $_ into a UTF-8 character +sub utf_ent { + # Accents. + s/\\i\b/ı/g; # dotless i. + + # acute accent \'{x} + s/\\\'(\001\d+)\{A\1\}/Ã/g; + s/\\\'(\001\d+)\{C\1\}/Ć/g; + s/\\\'(\001\d+)\{E\1\}/É/g; + s/\\\'(\001\d+)\{I\1\}/Ã/g; + s/\\\'(\001\d+)\{L\1\}/Ĺ/g; + s/\\\'(\001\d+)\{N\1\}/Ń/g; + s/\\\'(\001\d+)\{O\1\}/Ó/g; + s/\\\'(\001\d+)\{R\1\}/Å”/g; + s/\\\'(\001\d+)\{S\1\}/Åš/g; + s/\\\'(\001\d+)\{U\1\}/Ú/g; + s/\\\'(\001\d+)\{Y\1\}/Ã/g; + s/\\\'(\001\d+)\{Z\1\}/Ź/g; + s/\\\'(\001\d+)\{a\1\}/á/g; + s/\\\'(\001\d+)\{c\1\}/ć/g; + s/\\\'(\001\d+)\{e\1\}/é/g; + s/\\\'(\001\d+)\{ı\1\}/Ã/g; + s/\\\'(\001\d+)\{i\1\}/Ã/g; + s/\\\'(\001\d+)\{l\1\}/ĺ/g; + s/\\\'(\001\d+)\{n\1\}/Å„/g; + s/\\\'(\001\d+)\{o\1\}/ó/g; + s/\\\'(\001\d+)\{r\1\}/Å•/g; + s/\\\'(\001\d+)\{s\1\}/Å›/g; + s/\\\'(\001\d+)\{u\1\}/ú/g; + s/\\\'(\001\d+)\{y\1\}/ý/g; + s/\\\'(\001\d+)\{z\1\}/ź/g; + + # acute accent \'x + s/\\\'A/Ã/g; + s/\\\'C/Ć/g; + s/\\\'E/É/g; + s/\\\'I/Ã/g; + s/\\\'L/Ĺ/g; + s/\\\'N/Ń/g; + s/\\\'O/Ó/g; + s/\\\'R/Å”/g; + s/\\\'S/Åš/g; + s/\\\'U/Ù/g; + s/\\\'Y/Ã/g; + s/\\\'Z/Ź/g; + s/\\\'a/á/g; + s/\\\'c/ć/g; + s/\\\'e/é/g; + s/\\\'i/Ã/g; + s/\\\'ı/Ã/g; + s/\\\'l/ĺ/g; + s/\\\'n/Å„/g; + s/\\\'o/ó/g; + s/\\\'r/Å•/g; + s/\\\'s/Å›/g; + s/\\\'u/ú/g; + s/\\\'y/ý/g; + s/\\\'z/ź/g; + + # grave accent \`{x} + s/\\\`(\001\d+)\{A\1\}/À/g; + s/\\\`(\001\d+)\{E\1\}/È/g; + s/\\\`(\001\d+)\{I\1\}/ÃŒ/g; + s/\\\`(\001\d+)\{O\1\}/Ã’/g; + s/\\\`(\001\d+)\{U\1\}/Ù/g; + s/\\\`(\001\d+)\{a\1\}/à /g; + s/\\\`(\001\d+)\{e\1\}/è/g; + s/\\\`(\001\d+)\{i\1\}/ì/g; + s/\\\`(\001\d+)\{o\1\}/ò/g; + s/\\\`(\001\d+)\{u\1\}/ù/g; + + # grave accent \`x + s/\\\`A/À/g; + s/\\\`E/È/g; + s/\\\`I/ÃŒ/g; + s/\\\`O/Ã’/g; + s/\\\`U/Ù/g; + s/\\\`a/à /g; + s/\\\`e/è/g; + s/\\\`i/ì/g; + s/\\\`o/ò/g; + s/\\\`u/ù/g; + + # umlaut \"{x} + s/\\\"(\001\d+)\{A\1\}/Ä/g; + s/\\\"(\001\d+)\{E\1\}/Ë/g; + s/\\\"(\001\d+)\{I\1\}/Ã/g; + s/\\\"(\001\d+)\{O\1\}/Ö/g; + s/\\\"(\001\d+)\{U\1\}/Ãœ/g; + s/\\\"(\001\d+)\{Y\1\}/Ÿ/g; + s/\\\"(\001\d+)\{a\1\}/ä/g; + s/\\\"(\001\d+)\{e\1\}/ë/g; + s/\\\"(\001\d+)\{i\1\}/ï/g; + s/\\\"(\001\d+)\{o\1\}/ö/g; + s/\\\"(\001\d+)\{u\1\}/ü/g; + s/\\\"(\001\d+)\{y\1\}/ÿ/g; + + # umlaut \"x + s/\\\"A/Ä/g; + s/\\\"E/Ë/g; + s/\\\"I/Ã/g; + s/\\\"O/Ö/g; + s/\\\"U/Ãœ/g; + s/\\\"Y/Ÿ/g; + s/\\\"a/ä/g; + s/\\\"e/ë/g; + s/\\\"i/ï/g; + s/\\\"o/ö/g; + s/\\\"u/ü/g; + s/\\\"y/ÿ/g; + + # tilde \~{x} + s/\\\~(\001\d+)\{A\1\}/Ã/g; + s/\\\~(\001\d+)\{N\1\}/Ñ/g; + s/\\\~(\001\d+)\{O\1\}/Õ/g; + s/\\\~(\001\d+)\{a\1\}/ã/g; + s/\\\~(\001\d+)\{n\1\}/ñ/g; + s/\\\~(\001\d+)\{o\1\}/õ/g; + + # tilde \~x + s/\\\~A/Ã/g; + s/\\\~N/Ñ/g; + s/\\\~O/Õ/g; + s/\\\~a/ã/g; + s/\\\~n/ñ/g; + s/\\\~O/õ/g; + + # circumflex \^{x} + s/\\\^(\001\d+)\{A\1\}/Â/g; + s/\\\^(\001\d+)\{E\1\}/Ê/g; + s/\\\^(\001\d+)\{G\1\}/Äœ/g; + s/\\\^(\001\d+)\{H\1\}/Ĥ/g; + s/\\\^(\001\d+)\{I\1\}/ÃŽ/g; + s/\\\^(\001\d+)\{J\1\}/Ä´/g; + s/\\\^(\001\d+)\{O\1\}/Ô/g; + s/\\\^(\001\d+)\{U\1\}/Û/g; + s/\\\^(\001\d+)\{W\1\}/Å´/g; + s/\\\^(\001\d+)\{Y\1\}/Ŷ/g; + s/\\\^(\001\d+)\{a\1\}/â/g; + s/\\\^(\001\d+)\{e\1\}/ê/g; + s/\\\^(\001\d+)\{g\1\}/Ä/g; + s/\\\^(\001\d+)\{h\1\}/Ä¥/g; + s/\\\^(\001\d+)\{i\1\}/î/g; + s/\\\^(\001\d+)\{j\1\}/ĵ/g; + s/\\\^(\001\d+)\{o\1\}/ô/g; + s/\\\^(\001\d+)\{u\1\}/û/g; + s/\\\^(\001\d+)\{w\1\}/ŵ/g; + s/\\\^(\001\d+)\{y\1\}/Å·/g; + + # circumflex \^x + s/\\\^A/Â/g; + s/\\\^E/Ê/g; + s/\\\^G/Äœ/g; + s/\\\^H/Ĥ/g; + s/\\\^I/ÃŽ/g; + s/\\\^J/Ä´/g; + s/\\\^O/Ô/g; + s/\\\^U/Û/g; + s/\\\^W/Å´/g; + s/\\\^Y/Ŷ/g; + s/\\\^a/â/g; + s/\\\^e/ê/g; + s/\\\^g/Ä/g; + s/\\\^h/Ä¥/g; + s/\\\^i/î/g; + s/\\\^J/ĵ/g; + s/\\\^o/ô/g; + s/\\\^u/û/g; + s/\\\^w/ŵ/g; + s/\\\^y/Å·/g; + + # cedilla \c{x} + s/\\c(\001\d+)\{C\1\}/Ç/g; + s/\\c(\001\d+)\{c\1\}/ç/g; + s/\\c(\001\d+)\{K\1\}/Ķ/g; + s/\\c(\001\d+)\{k\1\}/Ä·/g; + s/\\c(\001\d+)\{L\1\}/Ä»/g; + s/\\c(\001\d+)\{l\1\}/ļ/g; + s/\\c(\001\d+)\{N\1\}/Å…/g; + s/\\c(\001\d+)\{n\1\}/ņ/g; + s/\\c(\001\d+)\{N\1\}/Å–/g; + s/\\c(\001\d+)\{n\1\}/Å—/g; + + # double acute accent \H{x} + s/\\H(\001\d+)\{O\1\}/Å/g; + s/\\H(\001\d+)\{U\1\}/Å°/g; + s/\\H(\001\d+)\{o\1\}/Å‘/g; + s/\\H(\001\d+)\{u\1\}/ű/g; + + # breve accent \u{x} + s/\\u(\001\d+)\{A\1\}/Ä‚/g; + s/\\u(\001\d+)\{E\1\}/Ä”/g; + s/\\u(\001\d+)\{G\1\}/Äž/g; + s/\\u(\001\d+)\{I\1\}/Ĭ/g; + s/\\u(\001\d+)\{O\1\}/ÅŽ/g; + s/\\u(\001\d+)\{U\1\}/Ŭ/g; + s/\\u(\001\d+)\{a\1\}/ă/g; + s/\\u(\001\d+)\{e\1\}/Ä•/g; + s/\\u(\001\d+)\{g\1\}/ÄŸ/g; + s/\\u(\001\d+)\{i\1\}/Ä/g; + s/\\u(\001\d+)\{o\1\}/Å/g; + s/\\u(\001\d+)\{u\1\}/Å/g; + + # hacek/caron? accent \v{x} + s/\\v(\001\d+)\{C\1\}/ÄŒ/g; + s/\\v(\001\d+)\{D\1\}/ÄŽ/g; + s/\\v(\001\d+)\{E\1\}/Äš/g; + s/\\v(\001\d+)\{L\1\}/Ľ/g; + s/\\v(\001\d+)\{N\1\}/Ň/g; + s/\\v(\001\d+)\{R\1\}/Ř/g; + s/\\v(\001\d+)\{S\1\}/Å /g; + s/\\v(\001\d+)\{T\1\}/Ť/g; + s/\\v(\001\d+)\{Z\1\}/Ž/g; + s/\\v(\001\d+)\{c\1\}/Ä/g; + s/\\v(\001\d+)\{d\1\}/Ä/g; + s/\\v(\001\d+)\{e\1\}/Ä›/g; + s/\\v(\001\d+)\{l\1\}/ľ/g; + s/\\v(\001\d+)\{n\1\}/ň/g; + s/\\v(\001\d+)\{r\1\}/Å™/g; + s/\\v(\001\d+)\{s\1\}/Å¡/g; + s/\\v(\001\d+)\{t\1\}/Å¥/g; + s/\\v(\001\d+)\{z\1\}/ž/g; + + # macron \={x} + s/\\\=(\001\d+)\{A\1\}/Ä€/g; + s/\\\=(\001\d+)\{E\1\}/Ä’/g; + s/\\\=(\001\d+)\{O\1\}/ÅŒ/g; + s/\\\=(\001\d+)\{U\1\}/Ū/g; + s/\\\=(\001\d+)\{a\1\}/Ä/g; + s/\\\=(\001\d+)\{e\1\}/Ä“/g; + s/\\\=(\001\d+)\{o\1\}/Å/g; + s/\\\=(\001\d+)\{u\1\}/Å«/g; + + # macron \=x + s/\\\=A/Ä€/g; + s/\\\=E/Ä’/g; + s/\\\=O/ÅŒ/g; + s/\\\=U/Ū/g; + s/\\\=a/Ä/g; + s/\\\=e/Ä“/g; + s/\\\=o/Å/g; + s/\\\=u/Å«/g; + + # dot \.{x} + s/\\\.(\001\d+)\{G\1\}/Ä /g; + s/\\\.(\001\d+)\{L\1\}/Ä¿/g; + s/\\\.(\001\d+)\{Z\1\}/Å»/g; + s/\\\.(\001\d+)\{g\1\}/Ä¡/g; + s/\\\.(\001\d+)\{l\1\}/Å€/g; + s/\\\.(\001\d+)\{z\1\}/ż/g; + + # dot \.x + s/\\\.G/Ä /g; + s/\\\.L/Ä¿/g; + s/\\\.Z/Å»/g; + s/\\\.g/Ä¡/g; + s/\\\.l/Å€/g; + s/\\\.z/ż/g; + + + # slashed l + s/\\l\b/Å‚/g; + s/\\L\b/Å/g; + + # krouzek \accent23x or \accent'27 + s/\{\\accent2[37]\s*u\}/ů/g; + s/\\accent2[37]\s*u/ů/g; + + # Other special characters. + s/\\O\b\s*/Ø/g; + s/\\o\b\s*/ø/g; + s/\\AA\b\s*/Ã…/g; + s/\\aa\b\s*/Ã¥/g; + s/\\AE\b\s*/Æ/g; + s/\\ae\b\s*/æ/g; + s/\\OE\b\s*/Å’/g; + s/\\oe\b\s*/Å“/g; + s/\\ss\b\s*/ß/g; + s/\\S\b\s*/§/g; + s/\\P\b\s*/¶/g; + s/\\pounds\b\s*/£/g; + s/\?\`/¿/g; + s/\!\`/¡/g; + + # en and em dashes + # Try to be careful to not change the dashes in HTML comments + # (<!-- comment -->) to –s. + s/\-\-\-/—/g; # --- -> — + s/([^\!])\-\-([^\>])/$1–$2/g; # -- -> – + + # Upper case Greek + s/\\Alpha\b/Α/g; + s/\\Beta\b/Î’/g; + s/\\Gamma\b/Γ/g; + s/\\Delta\b/Δ/g; + s/\\Epsilon\b/Ε/g; + s/\\Zeta\b/Ζ/g; + s/\\Eta\b/Η/g; + s/\\Theta\b/Θ/g; + s/\\Iota\b/Ι/g; + s/\\Kappa\b/Κ/g; + s/\\Lambda\b/Λ/g; + s/\\Mu\b/Îœ/g; + s/\\Nu\b/Î/g; + s/\\Xi\b/Ξ/g; + s/\\Omicron\b/Ο/g; + s/\\Pi\b/Î /g; + s/\\Rho\b/Ρ/g; + s/\\Sigma\b/Σ/g; + s/\\Tau\b/Τ/g; + s/\\Upsilon\b/Î¥/g; + s/\\Phi\b/Φ/g; + s/\\Chi\b/Χ/g; + s/\\Psi\b/Ψ/g; + s/\\Omega\b/Ω/g; + + # Lower case Greek + s/\\alpha\b/α/g; + s/\\beta\b/β/g; + s/\\gamma\b/γ/g; + s/\\delta\b/δ/g; + s/\\varepsilon\b/ε/g; + s/\\epsilon\b/ε/g; + s/\\zeta\b/ζ/g; + s/\\eta\b/η/g; + s/\\theta\b/θ/g; + s/\\vartheta\b/θ/g; + s/\\iota\b/ι/g; + s/\\kappa\b/κ/g; + s/\\lambda\b/λ/g; + s/\\mu\b/μ/g; + s/\\nu\b/ν/g; + s/\\xi\b/ξ/g; + s/\\omicron\b/ο/g; + s/\\pi\b/Ï€/g; + s/\\varpi\b/Ï€/g; + s/\\rho\b/Ï/g; + s/\\varrho\b/Ï/g; + s/\\sigma\b/σ/g; + s/\\varsigma\b/Ï‚/g; + s/\\tau\b/Ï„/g; + s/\\upsilon\b/Ï…/g; + s/\\phi\b/φ/g; + s/\\varphi\b/φ/g; + s/\\chi\b/χ/g; + s/\\psi\b/ψ/g; + s/\\omega\b/ω/g; +} + + +# Prevent "identifier used only once" warnings. +$opt_a = $opt_b = $opt_c = $opt_D = $opt_d = $opt_e = $opt_h = $opt_m = $opt_r = undef; +$opt_i = $opt_k = $opt_s = $opt_t = $opt_v = $opt_u = undef; + +$macrofile = ''; + +$command_line = &html_encode(join(' ', $0, @ARGV)); + +getopts("ab:cd:D:e:h:ikm:rs:tuv") || &usage; + +if (defined($opt_v)) { + print "$version\n"; + exit 0; +} + +&usage if (($#ARGV < 0) || ($#ARGV > 1)); + +if ($ARGV[0] =~ m/\.bib$/) { + $bibfile = $ARGV[0]; + $bibfile =~ s/\.bib$//; + $delimiter = $bibfile; +} elsif ($ARGV[0] =~ m/\.aux$/) { + if ($opt_i) { + print STDERR "source file must be a bibliography (.bib) file when run with the -i switch \n"; + &usage; + } + $citefile = $ARGV[0]; + $citefile =~ s/\.aux$//; + $delimiter = $citefile; +} else { + print STDERR "Unknown file extension on $ARGV[0]\n"; + &usage; +} + +$htmlfile = $ARGV[1] if ($#ARGV == 1); + +$delimiter = $opt_d if (defined($opt_d)); +$title = (defined($opt_h) ? $opt_h : "Bibliography generated from $ARGV[0]"); +$macrofile = "$opt_m," if (defined($opt_m)); + +$opt_s = 'empty' if (! defined $opt_s); +style: { + ($opt_s eq 'empty') && + ($bstfile = "html-n", + $label_style = $LABEL_PLAIN, + last style); + ($opt_s eq 'plain') && + ($bstfile = "html-n", + $label_style = $LABEL_NUMBERED, + last style); + ($opt_s eq 'alpha') && + ($bstfile = "html-a", + $label_style = $LABEL_DEFAULT, + last style); + ($opt_s eq 'named') && + ($bstfile = "html-n", + $label_style = $LABEL_DEFAULT, + last style); + ($opt_s eq 'unsort') && + ($bstfile = "html-u", + $label_style = $LABEL_NUMBERED, + last style); + ($opt_s eq 'unsortlist') && + ($bstfile = "html-u", + #$label_style = $LABEL_PLAIN, + $label_style = $LABEL_ORDERED, + last style); + ($opt_s =~ s/\.bst$//) && + ($bstfile = $opt_s, + # label-style will be defined in .bst file. + last style); + print STDERR "Unknown style: $_\n"; + &usage; +} + +if ($bstfile eq "html-u" && ($opt_r || $opt_c)) { + print STDERR "Unsorted styles do not support a sort specification\n"; + exit(1); +} + +$bstfile .= "c" if (defined ($opt_c)); +$bstfile .= "r" if (defined ($opt_r)); +$bstfile .= "a" if (defined ($opt_a)); + +# Extended information is specified as a sequence of +# (PostScript|PDF|DVI|DOI):icon or +# (notype|nosize|nopages|nocompression|nodoi|nobrackets) +# Set correspondingly the associative array %typeicon and the no* variables +# Example usage: +# perl bib2xhtml -e 'nosize,nopages,PDF:<img src="pdficon_small.gif" alt="PDF" border="0" />' example.bib >example.html +undef $nopages; +undef $nosize; +undef $nodoi; +undef $notype; +undef $nocompression; +undef $nobrackets; + +if (defined($opt_e)) { + my(@opts) = split(/,/, $opt_e); + for $opt (@opts) { + if ($opt =~ m/(PostScript|PDF|DVI|DOI):(.*)/) { + $typeicon{$1} = $2; + } elsif ($opt =~ m/(notype|nosize|nopages|nocompression|nodoi|nobrackets)/) { + eval "\$$1 = 1"; + } else { + print STDERR qq{Invalid extended information specification: $opt +This can be a comma-separated list of the following specifications: +PostScript|PDF|DVI|DOI:new-text (e.g. PDF file icon) +notype|nosize|nopages|nocompression|nodoi|nobrackets +}; + exit 1; + } + } +} + +# PostScript and PDF files are assumed to be in same directory +# as the target HTML file. +if (defined($htmlfile) && ($htmlfile =~ m+(^.*)/+)) { + push @filedir, $1; +} else { + push @filedir, "." +} +if (defined $opt_D) { + local($dir, $url); + foreach $dir (split(/\,/, $opt_D)) { + $url = $dir; + if ($dir =~ s/\@(.*)$//) { $url = $1; } + push @filedir, $dir; + $dirmap{$dir} = $url; + } +} + +umask(077); + +open(HTMLFILE, (defined($htmlfile) ? ">$htmlfile$$" : ">&STDOUT")); +if (defined($htmlfile) && open(OHTMLFILE, "$htmlfile")) { + $mode = (stat OHTMLFILE)[2] & 0xfff; + $updating = 1; +} else { + $mode = 0644; + $updating = 0; + + # An existing HTML file does not exist, so output some boilerplate. + if ($opt_u) { + $enc = 'UTF-8'; + } else { + $enc = 'US-ASCII'; + } + print HTMLFILE +qq{<?xml version="1.0" encoding="$enc"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> +<title>$title</title> +<meta http-equiv="Content-type" content="text/html; charset=$enc" />} . q{ +<meta name="Generator" content="$Id: bib2xhtml 2.26 2007/06/14 14:59:44 dds Exp $" /> +</head> +<body> +} +} + +$beginstring = "<!-- BEGIN CITATIONS $delimiter -->"; +$endstring = "<!-- END CITATIONS $delimiter -->"; + +@citations = (); + +if ($opt_i && $updating) { + loop: + while (<OHTMLFILE>) { + print HTMLFILE; + last loop if m/^$beginstring$/; + } + loop: + while (<OHTMLFILE>) { + print HTMLFILE; + last loop if m/^$endstring$/; + push(@citations, $2) if m/^([^\\]*)?(.+\})(.*)?$/; + } + push(@citations, "\\bibdata{$bibfile}"); +} + +# Create an .aux file for bibtex to read. + +$auxfile = "bib$$"; +push(@tmpfiles, "$auxfile.aux"); + +open(AUXFILE, ">$auxfile" . ".aux"); + +print AUXFILE "\\relax\n\\bibstyle{$bstfile}\n"; + +if (defined($citefile)) { + $citefile .= ".aux"; + open(CITEFILE, "<$citefile") || die "error opening $citefile: $!\n"; + while (<CITEFILE>) { + print AUXFILE $_ if (m/^\\(citation|bibdata){/); + } + close(CITEFILE); +} elsif (@citations) { + foreach $citation (@citations) { + print AUXFILE "$citation\n"; + } +} else { + print AUXFILE "\\citation{*}\n\\bibdata{$macrofile$bibfile}\n"; +} + +close(AUXFILE); + + +# run bibtex, redirecting bibtex's output from STDOUT to STDERR. + +push(@tmpfiles, "$auxfile.blg"); +push(@tmpfiles, "$auxfile.bbl"); + +#Flush HTMLFILE to avoid duplicate buffer writes after the fork +select(HTMLFILE); +$| = 1; $| = 0; +select(STDOUT); + +# We attempt to fork in order to redirect bibtex's stdout to stderr. +# This is needed when bib2xhtml is generating its output on the +# standard output. +# The shell redirection syntax used in the system() alternative +# is by no means portable. +eval { fork || (open(STDOUT, ">&STDERR"), + # Handle leakage in Win32 prevents the final rename() + close(HTMLFILE), + close(OHTMLFILE), + exec('bibtex', (split(/\s+/, ($opt_b ? $opt_b : "")), $auxfile))); + wait; }; +# fork is not implemented on some non-Unix platforms. +if ($@) { + # The fork failed (perhaps not implemented on this system). + system("bibtex $opt_b $auxfile 1>&2"); +} + +$beginstring = "<!-- BEGIN BIBLIOGRAPHY $delimiter -->"; +$endstring = "<!-- END BIBLIOGRAPHY $delimiter -->"; + +if ($updating) { +loop: + while (<OHTMLFILE>) { + last loop if m/^$beginstring$/; + print HTMLFILE; + } +loop: + while (<OHTMLFILE>) { + last loop if m/^$endstring$/; + } +} + +print HTMLFILE "$beginstring\n"; +print HTMLFILE <<EOF; +<!-- + DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY! + YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED! +--> +<!-- Generated by: $command_line --> +EOF +# Now we make two passes over the .bbl file. In the first pass, we +# just collect the {cite, label} pairs, which we will use later for +# crossrefs. + +$t = $auxfile . ".bbl"; + +$/ = ""; + +# Make a first pass through the .bbl file, collecting citation/label pairs. +open(BBLFILE, "<$t") || die "error opening $t: $!\n"; +$nentry = 0; +loop: +while (<BBLFILE>) { + # Check for definitions at start of .bbl file. + if (($nentry == 0) && (m/^#/)) { + if ((m/#\s*label-style:\s*(\S+)/) && (! defined $label_style)) { + $label_style = $label_styles{$1}; + if (! defined $label_style) { + print STDERR "label style unknown: \n"; + next loop; + } + } + next loop; + } + $nentry++; + ($bcite, $blabel) = m+<dt><a name=\"([^\"]*)\">\[([^\]]*)\]</a></dt><dd>+; + $blabel = "$nentry" if ($label_style == $LABEL_NUMBERED); + $bibcite{$bcite} = $blabel; +} +close(BBLFILE); + +$label_style = $LABEL_DEFAULT if (! defined $label_style); +$list_start = $list_start[$label_style]; +$list_end = $list_end[$label_style]; + +if (defined($opt_t)) { + print HTMLFILE "$nentry references, last updated " . &ctime(time) . "<p />\n"; +} + +print HTMLFILE "<$list_start>\n\n"; + +#foreach $key (sort (keys(%bibcite))) { +# print "$key : $bibcite{$key}\n"; +#} + +open(BBLFILE, "<$t") || die "error opening $t: $!\n"; +$nentry = 0; +loop: +while (<BBLFILE>) { + # Skip definitions at start of .bbl file. + next loop if (($nentry == 0) && (m/^#/)); + + $nentry++; + + # Protect \{, \}, and \$, and then assign matching {} pairs a unique ID. + s/\\\{/\002/g; + s/\\\}/\003/g; + s/\\\$/\004/g; + { + local ($c, $l, $z) = (0, 0, ()); + s/([\{\}])/join("","\001",($1 eq "\{" ? $z[$l++]=$c++ : $z[--$l]),$1)/ge; + } + + # bibtex sometimes breaks long lines by inserting "%\n". We remove + # that because it might accidently break the line in the middle + # of a URL. We don't need to deal with TeX comments in general + # because bibtex seems to munge them up anyway, so there shouldn't + # be any in the bibliography file. + s/\%\n//g; + + # bibtex's add.period$ knows how to avoid adding extra periods + # when a block already ends in a period. bib2xhtml's modifications + # of bibtex's style files break that. We fix it here. + s/(\.(<\/cite>|<\/a>|\')+)\./$1/g; + + # Adjust beginning of entry based on bibliography style. + if ($label_style == $LABEL_PLAIN || $label_style == $LABEL_ORDERED) { + s:<dt>(<a name=\"[^\"]*\">)\[[^\]]*\](</a>)</dt><dd>:<li>$1$2:; + s:</dd>:</li>:; + + # Attempt to fix up empty <a name=...></a> tag, which some browsers + # don't handle properly (even though it *is* legal HTML). + # First try to combine a <a name=...></a> with a following <A ". + s:(<a name=\"[^\"]*\")></a><a\b:$1: + # If that doesn't work, try to swallow following word. + or s:(<a name=\"[^\"]*\">)</a>([\w]+):$1$2<\/a>:; + } elsif ($label_style == $LABEL_NUMBERED) { + s:(<dt><a name=\"[^\"]*\">\[)[^\]]*(\]</a></dt><dd>):$1$nentry$2:; + } + + # Append the key name, if asked so + if ($opt_k && ($label_style == $LABEL_NUMBERED || $label_style == $LABEL_DEFAULT)) { + # $1 $2 $3 $4 $5 + s:(<dt><a name=\")([^\"]*)(\">\[)([^\]]*)(\]</a></dt><dd>):$1$2$3$4 --- $2$5:; + } + + # Attempt to fix up crossrefs. + while (m/(\\(cite(label)?)(\001\d+)\{([^\001]+)\4\})/) { + $old = $1; + $cmd = $2; + $doxref = defined($3); + $bcite = $5; + if (! defined $bibcite{$bcite}) { + $blabel = " [" . $bcite . "]"; + } elsif ($doxref) { + $blabel = " <a href=\"#$bcite\">[" . $bibcite{$bcite} . "]<\/a>"; + } else { + $blabel = " [" . $bibcite{$bcite} . "]"; + } + $old =~ s/(\W)/\\$1/g; + s/\s*$old/$blabel/g; + } + # In some styles crossrefs become something like + # "In Doe and Roe [Doe and Roe, 1995]." Change this to + # "In [Doe and Roe, 1995]." to remove the redundancy. + s/In (<a href=\"[^\"]*\">)([^\[]+) \[(\2)/In $1\[$2/; + + # Handle the latex2html commands \htmladdnormallink{text}{url} + # and \htmladdnormallinkfoot{text}{url}. + s/\\htmladdnormallink(foot)?(\001\d+)\{([^\001]+)\2\}(\001\d+)\{([^\001]+)\4\}/<a href="$5">$3<\/a>/g; + + s/\&/\005/g; # Protect original & sequences + s/\\?&/&/g; # \& -> & and & -> & + s/\005/&/g; # Restore original & sequences + + if ($opt_u) { + utf_ent(); + } else { + html_ent(); + } + + # Handle \char123 -> &123;. + while (m/\\char([\'\"]?[0-9a-fA-F]+)/) { + $o = $r = $1; + if ($r =~ s/^\'//) { + $r = oct($r); + } elsif ($r =~ s/^\"//) { + $r = hex($r); + } + s/\\char$o\s*/&#$r;/g; + } + + s/{\\etalchar\001(\d+)\{(.)}\001\1\}/$2/g; # {\etalchar{x}} -> x + + s/\\par\b/<p \/>/g; + + # \url{text} -> <a href"text">text</a> + s/\\url(\001\d+)\{([^\001]*)\1\}/<a href="$2">$2<\/a>/g; + + # remove spaces from urls + while (m+<a href="(.*?)">(.*?)</a>+s) { + my $before = $`; + my $url = $1; + my $text = $2; + my $after = $'; #' + $url =~ s/ //g; + $_ = "$before\<a_ href=\"$url\">$text</a>$after"; + } + s/<a_ /<a /g; + + # There's no way to easily handle \rm and \textrm because + # HTML has no tag to convert back to plain text. Since it's very + # difficult to do the right thing, we do the wrong thing, and just + # remove them. + s/(\001\d+)\{\\rm\s+([^\001]*)\1\}/$2/g; # {\rm text} -> text + s/\\textrm(\001\d+)\{([^\001]*)\1\}/$2/g; # \textrm{text} -> text + + # This doesn't create correct HTML, because HTML doesn't allow nested + # character style tags. Oh well. + s/(\001\d+)\{\\em\s+([^\001]*)\1\}/<em>$2<\/em>/g; # {\em text} -> <EM>text</EM> + s/(\001\d+)\{\\it\s+([^\001]*)\1\}/<i>$2<\/i>/g; # {\it text} -> <I>text</I> + s/(\001\d+)\{\\bf\s+([^\001]*)\1\}/<b>$2<\/b>/g; # {\bf text} -> <B>text</B> + s/(\001\d+)\{\\tt\s+([^\001]*)\1\}/<tt>$2<\/tt>/g; # {\tt text} -> <TT>text</TT> + + s/\\emph(\001\d+)\{([^\001]*)\1\}/<em>$2<\/em>/g; # \emph{text} -> <EM>text</EM> + s/\\textit(\001\d+)\{([^\001]*)\1\}/<i>$2<\/i>/g; # \textit{text} -> <I>text</I> + s/\\textbf(\001\d+)\{([^\001]*)\1\}/<b>$2<\/b>/g; # \textbf{text} -> <B>text</B> + s/\\texttt(\001\d+)\{([^\001]*)\1\}/<tt>$2<\/tt>/g;# \textit{text} -> <TT>text</TT> + + s/\\mathrm(\001\d+)\{([^\001]*)\1\}/$2/g; # \mathrm{text} -> text + s/\\mathnormal(\001\d+)\{([^\001]*)\1\}/$2/g; # \mathnormal{text} -> text + s/\\mathsf(\001\d+)\{([^\001]*)\1\}/$2/g; # \mathsf{text} -> text + s/\\mathbf(\001\d+)\{([^\001]*)\1\}/<b>$2<\/b>/g; # \mathbf{text} -> <B>text</B> + s/\\mathcal(\001\d+)\{([^\001]*)\1\}/<i>$2<\/i>/g;# \mathcal{text} -> <I>text</I> + s/\\mathit(\001\d+)\{([^\001]*)\1\}/<i>$2<\/i>/g; # \mathit{text} -> <I>text</I> + s/\\mathtt(\001\d+)\{([^\001]*)\1\}/<tt>$2<\/tt>/g;# \mathtt{text} -> <TT>text</TT> + + # {\boldmath $mathstuff$} -> <B>mathstuff</B> +# s/(\001\d+)\{\s*\\boldmath ?([^A-Za-z\{\}][^\{\}]*)\}/<b>$1<\/b>/g; + + +sub domath { + local($t) = @_; + $t =~ s/\^(\001\d+)\{\\circ\1\}/\&\#176;/g; # ^{\circ}->degree + $t =~ s/\^\\circ/\&\#176;/g; # ^\circ->degree +# $t =~ s/\^(\001\d+)\{([^\001]*)\1\}/<sup>$2<\/sup>/g; # ^{x} + $t =~ s/\^(\001\d+)\{(.*)\1\}/<sup>$2<\/sup>/g; # ^{x} + $t =~ s/\^(\w)/<sup>$1<\/sup>/g; # ^x +# $t =~ s/\_(\001\d+)\{([^\001]*)\1\}/<sub>$2<\/sub>/g; # _{x} + $t =~ s/\_(\001\d+)\{(.*)\1\}/<sub>$2<\/sub>/g; # _{x} + $t =~ s/\_(\w)/<sub>$1<\/sub>/g; # _x + $t; +} + + # Handle superscripts and subscripts in inline math mode. + s/(\$([^\$]+)\$)/&domath($2)/ge; # $ ... $ + s/(\\\((([^\\]|\\[^\(\)])+)\\\))/&domath($2)/ge; # \( ... \) + + # Remove \mbox. + s/\\mbox(\001\d+)\{([^\001]*)\1\}/$2/g; # \mbox{x} + + # Escape tildes protecting URLs + # For some reason /g doesn't work + while (s/(\<a href\=\"[^<]*?)\~/$1\005/g) { ; } + if ($opt_u) { + s/([^\\])~/$1 /g; # ~ non-breaking space -   + s/\\\,/ /g; # \, thin space -   + s/\\ldots\b\s*/…/g; # Horizontal ellipsis + s/\\dots\b\s*/…/g; # Horizontal ellipsis + } else { + s/([^\\])~/$1 /g; # ~ non-breaking space + s/\\\,/ /g; # \, thin space + s/\\ldots\b/…/g; # Horizontal ellipsis + s/\\dots\b/…/g; # Horizontal ellipsis + + } + s/\005/\~/g; # Unescape tildes + s/\\ / /g; # \ (normal space) + s/\\textasciitilde\b\s*/~/g; # \textasciitilde -> ~ + + # Non-alphabetic macros that we keep. + s/\\([\#\&\%\~\_\^\|])/$1/g; + + # Non-alphabetic macros that we remove. + # (discretionary hyphen) + # (italic correction) + s/\\\W//g; + + # Clean up things we don't handle. +# s/\\//g; + + # The format {\Xyz{Abc}} is interpreted by BibTeX as a single letter + # whose text is given by "Abc". If we see this pattern, it is + # likely that discarding the \Xyz will do the right thing. + s/\001(\d+)\{\\[A-Za-z]+\001(\d+)\{([^\001]*)\001\2\}\001\1\}/$3/g; + + # Macro names may be meaningful, so keep them and don't run them together. + s/\\([A-Za-z]+)/ $1 /g; + + # Remove an empty <a href=...></a> tag that bad cross-referencing + # in the BibTeX file may have left us with. + s+In <a href=\"[^\"]*\"></a>++; + + &doPaperLinks; + + # Get rid of { } ids, and put protected { } back. + s/\001\d+[\{\}]//g; + tr/\002\003\004/{}$/; + + print HTMLFILE $_; +} + +close(BBLFILE); + +print HTMLFILE "<$list_end>\n\n$endstring\n"; + +if ($updating) { + while (<OHTMLFILE>) { + print HTMLFILE; + } + close (OHTMLFILE); +} else { + print HTMLFILE "</body></html>\n"; +} + +close(HTMLFILE); + +if (defined ($htmlfile)) { + #$mode &= 0777; + #print "setting $htmlfile$$ to $mode\n"; + #printf("mode = %lo\n", $mode); + + chmod($mode, "$htmlfile$$"); + rename("$htmlfile$$", $htmlfile); +} + +unlink(@tmpfiles); + +exit(0); diff --git a/Carpet/CarpetWeb/publications/carpet-publications.aux b/Carpet/CarpetWeb/publications/carpet-publications.aux new file mode 100644 index 000000000..e030aacba --- /dev/null +++ b/Carpet/CarpetWeb/publications/carpet-publications.aux @@ -0,0 +1,7 @@ +\relax +\select@language{english} +\@writefile{toc}{\select@language{english}} +\@writefile{lof}{\select@language{english}} +\@writefile{lot}{\select@language{english}} +\bibstyle{apsrev} +\newlabel{LastPage}{{}{10}} diff --git a/Carpet/CarpetWeb/publications/carpet-publications.bib b/Carpet/CarpetWeb/publications/carpet-publications.bib new file mode 100644 index 000000000..7821f5734 --- /dev/null +++ b/Carpet/CarpetWeb/publications/carpet-publications.bib @@ -0,0 +1,2040 @@ +status (refereed, preparing, theses, book, report, invited, contributed, internal, webpage) + +receiveddate +OLDfulltexturl +doi +urn + +Resolve DOI's with http://dx.doi.org/ + + + +******************************************************************************** +MISSING: +******************************************************************************** + +add DOI for Carpet-Aylott2009a + +add invited talk: Florida mesh refinement + +add Seattle2008 (September 17, 2008) + +add 2008 Alpaca talk + +maybe: +\item E. Schnetter, \emph{Kranc: Automatic Code Generation for the + Cactus Framework}. Talk given at the Workshop on Automating the + Development of Scientific Computing Software, Baton Rouge, LA, March + 2008. + +maybe: +\item E. Schnetter, \emph{Modelling black hole binary mergers}. Talk + given at Department of Physics \& Astronomy, LSU, Baton Rouge, LA, + April 2008. + + + +******************************************************************************** +BACKGROUND: +******************************************************************************** + +@InProceedings{Carpet-Goodale2002a, + status = {background}, + author = {Tom Goodale and Gabrielle Allen and Gerd Lanfermann + and Joan Mass{\'o} and Thomas Radke and Edward + Seidel and John Shalf}, + title = {The {Cactus} Framework and Toolkit: Design and + Applications}, + booktitle = {Vector and Parallel Processing -- VECPAR'2002, 5th + International Conference, Lecture Notes in Computer + Science}, + year = 2003, + address = {Berlin}, + publisher = {Springer}, + url = {http://edoc.mpg.de/3341}, +} + + + +******************************************************************************** +REFEREED: +******************************************************************************** + +% Schnetter-etal-03b +@Article{Carpet-Schnetter2003a, + status = {refereed background}, + author = {Erik Schnetter and Scott H. Hawley and Ian Hawke}, + title = {Evolutions in 3D numerical relativity using fixed + mesh refinement}, + journal = {Class. Quantum Grav.}, + year = 2004, + volume = 21, + pages = {1465-1488}, + eprint = {arXiv:gr-qc/0310042}, + url = {http://arxiv.org/abs/gr-qc/0310042}, + receiveddate = {2003-10-07}, + OLDfulltexturl = {http://stacks.iop.org/CQG/21/1465}, + doi = {10.1088/0264-9381/21/6/014}, +} + +% Baiotti04b +@Article{Carpet-Baiotti2004a, + status = {refereed}, + author = {Luca Baiotti and Ian Hawke and Luciano Rezzolla and + Erik Schnetter}, + title = {Gravitational-Wave Emission from Rotating + Gravitational Collapse in three Dimensions}, + journal = {Phys. Rev. Lett.}, + year = 2005, + volume = 95, + pages = 131101, + eprint = {arXiv:gr-qc/0503016}, + url = {http://arxiv.org/abs/gr-qc/0503016}, + receiveddate = {2004-10-12}, + OLDfulltexturl = {http://link.aps.org/abstract/PRL/v96/e161101}, + doi = {10.1103/PhysRevLett.94.131101}, +} + +% Zink2005a +@Article{Carpet-Zink2005a, + status = {refereed}, + author = {Burkhard Zink and Nikolaos Stergioulas and Ian Hawke + and Christian D. Ott and Erik Schnetter and Ewald + M{\"u}ller}, + title = {Formation of Supermassive Black Holes through + Fragmentation of Torodial Supermassive Stars}, + journal = {Phys. Rev. Lett.}, + year = 2006, + volume = 96, + pages = 161101, + eprint = {arXiv:gr-qc/0501080}, + url = {http://arxiv.org/abs/gr-qc/0501080}, + receiveddate = {2005-02-11}, + OLDfulltexturl = {http://link.aps.org/abstract/PRL/v96/e161101}, + doi = {10.1103/PhysRevLett.96.161101}, +} + +% Sperhake2005a +@Article{Carpet-Sperhake2005a, + status = {refereed}, + author = {Ulrich Sperhake and Bernard Kelly and Pablo Laguna + and Kenneth L. Smith and Erik Schnetter}, + title = {Black hole head-on collisions and gravitational + waves with fixed mesh-refinement and dynamic + singularity excision}, + journal = {Phys. Rev. D}, + year = 2005, + volume = 71, + pages = 124042, + eprint = {arXiv:gr-qc/0503071}, + url = {http://arxiv.org/abs/gr-qc/0503071}, + receiveddate = {2005-03-16}, + OLDfulltexturl = {http://link.aps.org/abstract/PRD/v71/e124042}, + doi = {10.1103/PhysRevD.71.124042}, +} + +% Diener-etal-2006a +@Article{Carpet-Diener2005a, + status = {refereed}, + author = {Peter Diener and Frank Herrmann and Denis Pollney + and Erik Schnetter and Edward Seidel and Ryoji + Takahashi and Jonathan Thornburg and Jason + Ventrella}, + title = {Accurate Evolution of Orbiting Binary Black Holes}, + journal = {Phys. Rev. Lett.}, + year = 2006, + volume = 96, + pages = 121101, + eprint = {arXiv:gr-qc/0512108}, + url = {http://arxiv.org/abs/gr-qc/0512108}, + receiveddate = {2005-12-21}, + OLDfulltexturl = {http://link.aps.org/abstract/PRL/v96/e121101}, + doi = {10.1103/PhysRevLett.96.121101}, +} + +% Diener05b +@Article{Carpet-Diener2005b, + status = {refereed}, + author = {Peter Diener and Ernst Nils Dorband and Erik + Schnetter and Manuel Tiglio}, + title = {Optimized high-order derivative and dissipation + operators satisfying summation by parts, and + applications in three-dimensional multi-block + evolutions}, + journal = {J. Sci. Comput.}, + year = 2007, + volume = 32, + pages = {109-145}, + eprint = {arXiv:gr-qc/0512001}, + url = {http://arxiv.org/abs/gr-qc/0512001}, + receiveddate = {2005-12-22}, + OLDfulltexturl = {http://www.springerlink.com/content/l724hr0846n2/}, + doi = {10.1007/s10915-006-9123-7}, +} + +% Schnetter06a +@Article{Carpet-Schnetter2006a, + status = {refereed background}, + author = {Erik Schnetter and Peter Diener and Ernst Nils + Dorband and Manuel Tiglio}, + title = {A multi-block infrastructure for three-dimensional + time-dependent numerical relativity}, + journal = {Class. Quantum Grav.}, + year = 2006, + volume = 23, + pages = {S553-S578}, + eprint = {arXiv:gr-qc/0602104}, + url = {http://arxiv.org/abs/gr-qc/0602104}, + receiveddate = {2006-02-20}, + OLDfulltexturl = {http://stacks.iop.org/CQG/23/S553}, + doi = {10.1088/0264-9381/23/16/S14}, +} + +% Sopuerta:2006bw +@Article{Carpet-Sopuerta2006a, + status = {refereed}, + author = {Carlos F. Sopuerta and Ulrich Sperhake and Pablo + Laguna}, + title = {Hydro-without-Hydro Framework for Simulations of + Black Hole-Neutron Star Binaries}, + journal = {Class. Quantum Grav.}, + year = 2006, + volume = 23, + pages = {S579-S598}, + eprint = {arXiv:gr-qc/0605018}, + url = {http://arxiv.org/abs/gr-qc/0605018}, + receiveddate = {2006-03-20}, + OLDfulltexturl = {http://stacks.iop.org/CQG/23/S579}, + doi = {10.1088/0264-9381/23/16/S15}, +} + +% Schnetter-Krishnan-Beyer-2006 +@Article{Carpet-Schnetter2006b, + status = {refereed}, + author = {Erik Schnetter and Badri Krishnan and Florian Beyer}, + title = {Introduction to dynamical horizons in numerical + relativity}, + journal = {Phys. Rev. D}, + year = 2006, + volume = 74, + pages = 024028, + eprint = {arXiv:gr-qc/0604015}, + url = {http://arxiv.org/abs/gr-qc/0604015}, + receiveddate = {2006-04-11}, + OLDfulltexturl = {http://link.aps.org/abstract/PRD/v74/e024028}, + doi = {10.1103/PhysRevD.74.024028}, +} + +% Loeffler06a +@Article{Carpet-Loeffler2006a, + status = {refereed}, + author = {Frank L{\"o}ffler and Luciano Rezzolla and Marcus + Ansorg}, + title = {Numerical evolutions of a black hole-neutron star + system in full General Relativity: Head-on + collision}, + journal = {Phys. Rev. D}, + year = 2006, + volume = 74, + pages = 104018, + eprint = {arXiv:gr-qc/0606104}, + url = {http://arxiv.org/abs/gr-qc/0606104}, + receiveddate = {2006-06-23}, + OLDfulltexturl = {http://link.aps.org/abstract/PRD/v74/e104018}, + doi = {10.1103/PhysRevD.74.104018}, +} + +% Sperhake:2006cy +@Article{Carpet-Sperhake2006a, + status = {refereed}, + author = {Ulrich Sperhake}, + title = {Binary black-hole evolutions of excision and + puncture data}, + journal = {Phys. Rev. D}, + year = 2007, + volume = 76, + pages = 104015, + eprint = {arXiv:gr-qc/0606079}, + url = {http://arxiv.org/abs/gr-qc/0606079}, + receiveddate = {2006-06-18}, + OLDfulltexturl = {http://link.aps.org/abstract/PRD/v76/e104015}, + doi = {10.1103/PhysRevD.76.104015}, +} + +@Article{Carpet-Dorband2006a, + status = {refereed}, + author = {Ernst Nils Dorband and Emanuele Berti and Peter + Diener and Erik Schnetter and Manuel Tiglio}, + title = {A numerical study of the quasinormal mode excitation + of Kerr black holes}, + journal = {Phys. Rev. D}, + year = 2006, + volume = 74, + pages = 084028, + eprint = {arXiv:gr-qc/0608091}, + url = {http://arxiv.org/abs/gr-qc/0608091}, + receiveddate = {2006-08-22}, + OLDfulltexturl = {http://link.aps.org/abstract/PRD/v74/e084028}, + doi = {10.1103/PhysRevD.74.084028}, +} + +@Article{Carpet-Baiotti2006a, + status = {refereed}, + author = {Luca Baiotti and Luciano Rezzolla}, + title = {Challenging the paradigm of singularity excision in + gravitational collapse}, + journal = {Phys. Rev. Lett.}, + year = 2006, + volume = 97, + pages = 141101, + eprint = {arXiv:gr-qc/0608113}, + url = {http://arxiv.org/abs/gr-qc/0608113}, + receiveddate = {2006-08-26}, + OLDfulltexturl = {http://link.aps.org/abstract/PRL/v97/e141101}, + doi = {10.1103/PhysRevLett.97.141101}, +} + +@Article{Carpet-Ott2006a, + status = {refereed}, + author = {Christian D. Ott and Harald Dimmelmeier and Andreas + Marek and Hans-Thomas Janka and Ian Hawke and + Burkhard Zink and Erik Schnetter}, + title = {{3D} Collapse of Rotating Stellar Iron Cores in + General Relativity Including Deleptonization and a + Nuclear Equation of State}, + journal = {Phys. Rev. Lett.}, + year = 2007, + volume = 98, + pages = 261101, + eprint = {arXiv:astro-ph/0609819}, + url = {http://arxiv.org/abs/astro-ph/0609819}, + receiveddate = {2006-09-29}, + OLDfulltexturl = {http://link.aps.org/abstract/PRL/v98/e261101}, + doi = {10.1103/PhysRevLett.98.261101}, +} + +@Article{Carpet-Reisswig2006a, + status = {refereed}, + author = {Christian Reisswig and Nigel T. Bishop and Chi Wai + Lai and Jonathan Thornburg and B{\'e}la + Szil{\'a}gyi}, + title = {Characteristic evolutions in numerical relativity + using six angular patches}, + journal = {Class. Quantum Grav.}, + year = 2007, + volume = 24, + pages = {S327-S339}, + eprint = {arXiv:gr-qc/0610019}, + url = {http://arxiv.org/abs/gr-qc/0610019}, + receiveddate = {2006-10-05}, + OLDfulltexturl = {http://stacks.iop.org/CQG/24/S327}, + doi = {10.1088/0264-9381/24/12/S21}, +} + +@Article{Carpet-Bruegmann2006a, + status = {refereed}, + author = {Bernd Br{\"u}gmann and Jos{\'e} A. Gonz{\'a}lez and + Mark Hannam and Sascha Husa and Ulrich Sperhake and + Wolfgang Tichy}, + title = {Calibration of Moving Puncture Simulations}, + journal = {Phys. Rev. D}, + year = 2008, + volume = 77, + pages = 024027, + eprint = {arXiv:gr-qc/0610128}, + url = {http://arxiv.org/abs/gr-qc/0610128}, + receiveddate = {2006-11-03}, + OLDfulltexturl = {http://link.aps.org/abstract/PRD/v77/e024027}, + doi = {10.1103/PhysRevD.77.024027}, +} + +@Article{Carpet-Zink2006a, + status = {refereed}, + author = {Burkhard Zink and Nikolaos Stergioulas and Ian Hawke + and Christian D. Ott and Erik Schnetter and Ewald + M{\"u}ller}, + title = {Non-axisymmetric instability and fragmentation of + general relativistic quasitoroidal stars}, + journal = {Phys. Rev. D}, + year = 2007, + volume = 76, + pages = 024019, + eprint = {arXiv:astro-ph/0611601}, + url = {http://arxiv.org/abs/astro-ph/0611601}, + receiveddate = {2006-11-19}, + OLDfulltexturl = {http://link.aps.org/abstract/PRD/v76/e024019}, + doi = {10.1103/PhysRevD.76.024019}, +} + +@Article{Carpet-Ott2006b, + status = {refereed}, + author = {Christian D. Ott and Harald Dimmelmeier and Andreas + Marek and Hans-Thomas Janka and Burkhard Zink and + Ian Hawke and Erik Schnetter}, + title = {Rotating collapse of stellar iron cores in general + relativity}, + journal = {Class. Quantum Grav.}, + year = 2007, + volume = 24, + pages = {S139-S154}, + eprint = {arXiv:astro-ph/0612638}, + url = {http://arxiv.org/abs/astro-ph/0612638}, + receiveddate = {2006-12-20}, + OLDfulltexturl = {http://stacks.iop.org/CQG/24/S139}, + doi = {10.1088/0264-9381/24/12/S10}, +} + +@Article{Carpet-Baiotti2006b, + status = {refereed}, + author = {Luca Baiotti and Ian Hawke and Luciano Rezzolla}, + title = {On the gravitational radiation from the collapse of + neutron stars to rotating black holes}, + journal = {Class. Quantum Grav.}, + year = 2007, + volume = 24, + pages = {S187-S206}, + eprint = {arXiv:gr-qc/0701043}, + url = {http://arxiv.org/abs/gr-qc/0701043}, + receiveddate = {2006-12-21}, + OLDfulltexturl = {http://stacks.iop.org/CQG/24/S187}, + doi = {10.1088/0264-9381/24/12/S13}, +} + +@Article{Carept-Pazos2006a, + status = {refereed}, + author = {Enrique Pazos and Ernst Nils Dorband and Alessandro + Nagar and Carlos Palenzuela and Erik Schnetter and + Manuel Tiglio}, + title = {How far away is far enough for extracting numerical + waveforms, and how much do they depend on the + extraction method?}, + journal = {Class. Quantum Grav.}, + year = 2007, + volume = 24, + pages = {S341-S368}, + eprint = {arXiv:gr-qc/0612149}, + url = {http://arxiv.org/abs/gr-qc/0612149}, + receiveddate = {2006-12-22}, + OLDfulltexturl = {http://stacks.iop.org/CQG/24/S341}, + doi = {10.1088/0264-9381/24/12/S22}, +} + +@Article{Carpet-Szilagyi2006a, + status = {refereed}, + author = {B{\'e}la Szil{\'a}gyi and Denis Pollney and Luciano + Rezzolla and Jonathan Thornburg and Jeffrey + Winicour}, + title = {An explicit harmonic code for black-hole evolution + using excision}, + journal = {Class. Quantum Grav.}, + year = 2007, + volume = 24, + pages = {S275-S293}, + eprint = {arXiv:gr-qc/0612150}, + url = {http://arxiv.org/abs/gr-qc/0612150}, + receiveddate = {2006-12-22}, + OLDfulltexturl = {http://stacks.iop.org/CQG/24/S275}, + doi = {10.1088/0264-9381/24/12/S18}, +} + +@Article{Carpet-Baker2006a, + status = {refereed}, + author = {John G. Baker and Manuela Campanelli and Frans + Pretorius and Yosef Zlochower}, + title = {Comparisons of binary black hole merger waveforms}, + journal = {Class. Quantum Grav.}, + year = 2007, + volume = 24, + pages = {S25-S31}, + eprint = {arXiv:gr-qc/0701016}, + url = {http://arxiv.org/abs/gr-qc/0701016}, + receiveddate = {2006-12-26}, + OLDfulltexturl = {http://stacks.iop.org/CQG/24/S25}, + doi = {10.1088/0264-9381/24/12/S03}, +} + +% Herrmann:2006ks +@Article{Carpet-Herrmann2007a, + status = {refereed}, + author = {Frank Herrmann and Ian Hinder and Deirdre + M. Shoemaker and Pablo Laguna}, + title = {Unequal mass binary black hole plunges and + gravitational recoil}, + journal = {Class. Quantum Grav.}, + year = 2007, + volume = 24, + pages = {S33-S42}, + eprint = {arXiv:gr-qc/0601026}, + url = {http://arxiv.org/abs/gr-qc/0601026}, + receiveddate = {2007-01-04}, + OLDfulltexturl = {http://stacks.iop.org/CQG/24/S33}, + doi = {10.1088/0264-9381/24/12/S04}, +} + +@Article{Carpet-Giacomazzo2007a, + status = {refereed}, + author = {Bruno Giacomazzo and Luciano Rezzolla}, + title = {{WhiskyMHD}: a new numerical code for general + relativistic magnetohydrodynamics}, + journal = {Class. Quantum Grav.}, + year = 2007, + volume = 24, + pages = {S235-S258}, + eprint = {arXiv:gr-qc/0701109}, + url = {http://arxiv.org/abs/gr-qc/0701109}, + receiveddate = {2007-01-20}, + OLDfulltexturl = {http://stacks.iop.org/CQG/24/S235}, + doi = {10.1088/0264-9381/24/12/S16}, +} + +@Article{Carpet-Marronetti2007a, + status = {refereed}, + author = {Pedro Marronetti and Wolfgang Tichy and Bernd + Br{\"u}gmann and Jos{\'e} Gonz{\'a}lez and Mark + Hannam and Sascha Husa and Ulrich Sperhake}, + title = {Binary black holes on a budget: simulations using + workstations}, + journal = {Class. Quantum Grav.}, + year = 2007, + volume = 24, + pages = {S45-S58}, + eprint = {arXiv:gr-qc/0701123}, + url = {http://arxiv.org/abs/gr-qc/0701123}, + receiveddate = {2007-01-22}, + OLDfulltexturl = {http://stacks.iop.org/CQG/24/S45}, + doi = {10.1088/0264-9381/24/12/S05}, +} + +@Article{Carpet-Herrmann2007b, + status = {refereed}, + author = {Frank Herrmann and Ian Hinder and Deirdre + M. Shoemaker and Pablo Laguna and Richard + A. Matzner}, + title = {Gravitational Recoil from Spinning Binary Black Hole + Mergers}, + journal = {Astrophys. J.}, + year = 2007, + volume = 661, + pages = {430-436}, + eprint = {arXiv:gr-qc/0701143}, + url = {http://arxiv.org/abs/gr-qc/0701143}, + receiveddate = {2007-01-29}, + OLDfulltexturl = + {http://www.journals.uchicago.edu/doi/abs/10.1086/513603}, + doi = {10.1086/513603}, +} + +@Article{Carpet-Koppitz2007a, + status = {refereed}, + author = {Michael Koppitz and Denis Pollney and Christian + Reisswig and Luciano Rezzolla and Jonathan Thornburg + and Peter Diener and Erik Schnetter}, + title = {Recoil Velocities from Equal-Mass Binary-Black-Hole + Mergers}, + journal = {Phys. Rev. Lett.}, + year = 2007, + volume = 99, + pages = 041102, + eprint = {arXiv:gr-qc/0701163}, + url = {http://arxiv.org/abs/gr-qc/0701163}, + receiveddate = {2007-01-29}, + OLDfulltexturl = {http://link.aps.org/abstract/PRL/v99/e041102}, + doi = {10.1103/PhysRevLett.99.041102}, +} + +@Article{Carpet-Campanelli2007a, + status = {refereed}, + author = {Manuela Campanelli and Carlos O. Lousto and Yosef + Zlochower and David Merritt}, + title = {Large Merger Recoils and Spin Flips From Generic + Black-Hole Binaries}, + journal = {Astrophys. J. Lett.}, + year = 2007, + volume = 659, + pages = {L5-L8}, + eprint = {arXiv:gr-qc/0701164}, + doi = {http://arxiv.org/abs/gr-qc/0701164}, + receiveddate = {2007-02-08}, + OLDfulltexturl = + {http://www.journals.uchicago.edu/doi/abs/10.1086/516712}, +} + +@Article{Carpet-Gonzalez2007a, + status = {refereed}, + author = {Jos{\'e} A. Gonz{\'a}lez and Mark D. Hannam and + Ulrich Sperhake and Bernd Br{\"u}gmann and Sascha + Husa}, + title = {Supermassive recoil velocities for binary black-hole + mergers with antialigned spins}, + journal = {Phys. Rev. Lett.}, + year = 2007, + volume = 98, + pages = 231101, + eprint = {arXiv:gr-qc/0702052}, + url = {http://arxiv.org/abs/gr-qc/0702052}, + receiveddate = {2007-02-26}, + OLDfulltexturl = {http://link.aps.org/abstract/PRL/v98/e231101}, + doi = {10.1103/PhysRevLett.98.231101}, +} + +@Article{Carpet-Campanelli2007b, + status = {refereed}, + author = {Manuela Campanelli and Carlos O. Lousto and Yosef + Zlochower and David Merritt}, + title = {Maximum gravitational recoil}, + journal = {Phys. Rev. Lett.}, + year = 2007, + volume = 98, + pages = 231102, + eprint = {arXiv:gr-qc/0702133}, + url = {http://arxiv.org/abs/gr-qc/0702133}, + receiveddate = {2007-02-26}, + OLDfulltexturl = {http://link.aps.org/abstract/PRL/v98/e231102}, + doi = {10.1103/PhysRevLett.98.231102}, +} + +@Article{Carpet-Thornburg2007a, + status = {refereed}, + author = {Jonathan Thornburg and Peter Diener and Denis + Pollney and Luciano Rezzolla and Erik Schnetter and + Ed Seidel and Ryoji Takahashi}, + title = {Are moving punctures equivalent to moving black + holes?}, + journal = {Class. Quantum Grav.}, + year = 2007, + volume = 24, + pages = {3911-3918}, + eprint = {arXiv:gr-qc/0701038}, + url = {http://arxiv.org/abs/gr-qc/0701038}, + receiveddate = {2007-03-22}, + OLDfulltexturl = {http://stacks.iop.org/CQG/24/3911}, + doi = {10.1088/0264-9381/24/15/009} +} + +@Article{Carpet-Ajith2007a, + status = {refereed}, + author = {Parameswaran Ajith and Stanislav Babak and Yanbei + Chen and Martin Hewitson and Badri Krishnan and John + T. Whelan and Bernd Br{\"u}gmann and Peter Diener + and Jos{\'e} González and Mark Hannam and Sascha + Husa and Michael Koppitz and Denis Pollney and + Luciano Rezzolla and Luc{\'i}a Santamar{\'i}a and + Alicia M. Sintes and Ulrich Sperhake and Jonathan + Thornburg}, + title = {Phenomenological template family for black-hole + coalescence waveforms}, + journal = {Class. Quantum Grav.}, + year = 2007, + volume = 24, + pages = {S689-S699}, + eprint = {arXiv:0704.3764 [gr-qc]}, + url = {http://arxiv.org/abs/0704.3764}, + receiveddate = {2007-04-30}, + OLDfulltexturl = {http://stacks.iop.org/CQG/24/S689}, + doi = {10.1088/0264-9381/24/19/S31}, +} + +@Article{Carpet-Vaishnav2007a, + status = {refereed}, + author = {Birjoo Vaishnav and Ian Hinder and Frank Herrmann + and Deirdre M. Shoemaker}, + title = {Matched Filtering of Numerical Relativity Templates + of Spinning Binary Black Holes}, + journal = {Phys. Rev. D}, + year = 2007, + volume = 76, + pages = 084020, + eprint = {arXiv:0705.3829 [gr-qc]}, + url = {http://arxiv.org/abs/0705.3829}, + receiveddate = {2007-06-13}, + OLDfulltexturl = {http://link.aps.org/abstract/PRD/v76/e084020}, + doi = {10.1103/PhysRevD.76.084020}, +} + +Article{CarpetResult-Grandclement2007a, + status = {refereed}, + author = {Philippe Grandcl{\'e}ment and J{\'e}r{\^o}me Novak}, + title = {Spectral Methods for Numerical Relativity}, + journal = {Living Rev. Relativity}, + year = 2009, + volume = 12, + eprint = {arXiv:0706.2286 [gr-qc]}, + receiveddate = {2007-06-15}, + fulltexturl = {http://www.livingreviews.org/lrr-2009-1}, +} + +@Article{Carpet-Herrmann2007c, + status = {refereed}, + author = {Frank Herrmann and Ian Hinder and Deirdre + M. Shoemaker and Pablo Laguna and Richard + A. Matzner}, + title = {Binary Black Holes: Spin Dynamics and Gravitational + Recoil}, + journal = {Phys. Rev. D}, + year = 2007, + volume = 76, + pages = 084032, + eprint = {arXiv:0706.2541 [gr-qc]}, + url = {http://arxiv.org/abs/0706.2541}, + receiveddate = {2007-06-18}, + OLDfulltexturl = {http://link.aps.org/abstract/PRD/v76/e084032}, + doi = {10.1103/PhysRevD.76.084032}, +} + +@Article{Carpet-Krishnan2007a, + status = {refereed}, + author = {Badri Krishnan and Carlos O. Lousto and Yosef + Zlochower}, + title = {Quasi-Local Linear Momentum in Black-Hole Binaries}, + journal = {Phys. Rev. D }, + year = 2007, + volume = 76, + pages = {081501(R)}, + eprint = {arXiv:0707.0876 [gr-qc]}, + url = {http://arxiv.org/abs/0707.0876}, + receiveddate = {2007-07-06}, + OLDfulltexturl = {http://link.aps.org/abstract/PRD/v76/e081501}, + doi = {10.1103/PhysRevD.76.081501}, +} + +@Article{Carpet-Brown2007a, + status = {refereed}, + author = {David Brown and Olivier Sarbach and Erik Schnetter + and Manuel Tiglio and Peter Diener and Ian Hawke and + Denis Pollney}, + title = {Excision without excision}, + journal = {Phys. Rev. D}, + year = 2007, + volume = 76, + pages = {081503(R)}, + eprint = {arXiv:0707.3101 [gr-qc]}, + url = {http://arxiv.org/abs/0707.3101}, + receiveddate = {2007-07-20}, + OLDfulltexturl = {http://link.aps.org/abstract/PRD/v76/e081503}, + doi = {10.1103/PhysRevD.76.081503}, +} + +@Article{Carpet-Bruegmann2007a, + status = {refereed}, + author = {Bernd Br{\"u}gmann and Jos{\'e} A. Gonz{\'a}lez and + Mark Hannam and Sascha Husa and Ulrich Sperhake}, + title = {Exploring black hole superkicks}, + journal = {Phys. Rev. D}, + year = 2008, + volume = 77, + pages = 124047, + eprint = {arXiv:0707.0135 [gr-qc]}, + url = {http://arxiv.org/abs/0707.0135}, + receiveddate = {2007-08-07}, + OLDfulltexturl = {http://link.aps.org/abstract/PRD/v77/e124047}, + doi = {10.1103/PhysRevD.77.124047}, +} + +% Rezzolla2007a +@Article{Carpet-Rezzolla2007a, + status = {refereed}, + author = {Luciano Rezzolla and Ernst Nils Dorband and + Christian Reisswig and Peter Diener and Denis + Pollney and Erik Schnetter and B{\'e}la + Szil{\'s}gyi}, + title = {Spin Diagrams for Equal-Mass Black-Hole Binaries + with Aligned Spins}, + journal = {Astrophys. J.}, + year = 2008, + volume = 679, + pages = {1422-1426}, + eprint = {arXiv:0708.3999 [gr-qc]}, + url = {http://arxiv.org/abs/0708.3999}, + receiveddate = {2007-08-29}, + OLDfulltexturl = + {http://www.journals.uchicago.edu/doi/abs/10.1086/587679}, + doi = {10.1086/587679}, +} + +@Article{Carpet-Lousto2007a, + status = {refereed}, + author = {Carlos O. Lousto and Yosef Zlochower}, + title = {Further insight into gravitational recoil}, + journal = {Phys. Rev. D}, + year = 2008, + volume = 77, + pages = 044028, + eprint = {arXiv:0708.4048 [gr-qc]}, + url = {http://arxiv.org/abs/0708.4048}, + receiveddate = {2007-08-30}, + OLDfulltexturl = {http://link.aps.org/abstract/PRD/v77/e044028}, + doi = {10.1103/PhysRevD.77.044028}, +} + +@Article{Carpet-Pollney207a, + status = {refereed}, + author = {Denis Pollney and Christian Reisswig and Luciano + Rezzolla and B{\'e}la Szil{\'a}gyi and Marcus Ansorg + and Barrett Deris and Peter Diener and Ernst Nils + Dorband and Michael Koppitz and Alessandro Nagar and + Erik Schnetter}, + title = {Recoil velocities from equal-mass binary black-hole + mergers: a systematic investigation of spin-orbit + aligned configurations}, + journal = {Phys. Rev. D}, + year = 2007, + volume = 76, + pages = 124002, + eprint = {arXiv:0707.2559 [gr-qc]}, + url = {http://arxiv.org/abs/0707.2559}, + receiveddate = {2007-09-06}, + OLDfulltexturl = {http://link.aps.org/abstract/PRD/v76/e124002}, + doi = {10.1103/PhysRevD.76.124002}, +} + +@InProceedings{Carpet-Stark2007a, + status = {refereed}, + author = {Dylan Stark and Gabrielle Allen and Tom Goodale and + Thomas Radke and Erik Schnetter}, + title = {An Extensible Timing Infrastructure for Adaptive + Large-scale Applications}, + booktitle = {Parallel Processing and Applied Mathematics}, + pages = {1170-1179}, + year = 2008, + editor = {Roman Wyrzykowski}, + volume = 4967, + series = {Lecture Notes in Computer Science}, + publisher = {Springer}, + eprint = {arXiv:0705.3015 [cs.PF]}, + url = {http://arxiv.org/abs/0705.3015}, + receiveddate = {2007-09-09}, + OLDfulltexturl = {http://www.springerlink.com/ + content/p7n0gl4308p65864/ + ?p=7a20e00c017c4c4f87c070073332888e&pi=0}, + doi = {10.1007/978-3-540-68111-3}, +} + +@Article{CarpetResult-Buonanno2007a, + status = {refereed}, + author = {Alessandra Buonanno and Lawrence E. Kidder and Luis + Lehner}, + title = {Estimating the final spin of a binary black hole + coalescence}, + journal = {Phys. Rev. D}, + year = 2008, + volume = 77, + pages = 026004, + eprint = {arXiv:0709.3839 [astro-ph]}, + url = {http://arxiv.org/abs/0709.3839}, + receiveddate = {2007-09-25}, + OLDfulltexturl = {http://link.aps.org/abstract/PRD/v77/e026004}, +} + +@Article{Carpet-Campanelli2007c, + status = {refereed}, + author = {Manuela Campanelli and Carlos O. Lousto and Yosef + Zlochower}, + title = {Close encounters of three black holes}, + journal = {Phys. Rev. D}, + year = 2008, + volume = 77, + pages = {101501(5)}, + eprint = {arXiv:0710.0879 [gr-qc]}, + url = {http://arxiv.org/abs/0710.0879}, + receiveddate = {2007-10-03}, + OLDfulltexturl = {http://link.aps.org/abstract/PRD/v77/e101501}, + doi = {10.1103/PhysRevD.77.101501}, +} + +@Article{Carpet-Ajith2007b, + status = {refereed}, + author = {Parameswaran Ajith and Stanislav Babak and Yanbei + Chen and Martin Hewitson and Badri Krishnan and + Alicia M. Sintes and John T. Whelan and Bernd + Br{\"u}gmann and Peter Diener and Ernst Nils Dorband + and Jos{\'e} Gonz{\'a}lez and Mark Hannam and Sascha + Husa and Denis Pollney and Luciano Rezzolla and + Luc{\'i}a Santamar{\'i}a and Ulrich Sperhake and + Jonathan Thornburg}, + title = {A template bank for gravitational waveforms from + coalescing binary black holes: {I.} non-spinning + binaries}, + journal = {Phys. Rev. D}, + year = 2008, + volume = 77, + pages = 104017, + eprint = {arXiv:0710.2335 [gr-qc]}, + url = {http://arxiv.org/abs/0710.2335}, + receiveddate = {2007-10-15}, + OLDfulltexturl = {http://link.aps.org/abstract/PRD/v77/e104017}, + doi = {10.1103/PhysRevD.77.104017}, +} + +@Article{Carpet-Rezzolla2007b, + status = {refereed}, + author = {Luciano Rezzolla and Peter Diener and Ernst Nils + Dorband and Denis Pollney and Christian Reisswig and + Erik Schnetter and Jennifer Seiler}, + title = {The final spin from the coalescence of aligned-spin + black-hole binaries}, + journal = {Astrophys. J. Lett.}, + year = 2008, + volume = 674, + pages = {L29-L32}, + eprint = {arXiv:0710.3345 [gr-qc]}, + url = {http://arxiv.org/abs/0710.3345}, + receiveddate = {2007-10-18}, + OLDfulltexturl = + {http://www.journals.uchicago.edu/doi/abs/10.1086/528935}, + doi = {10.1086/528935}, +} + +@Article{CarpetResult-Boyle2007a, + status = {refereed}, + author = {Latham Boyle and Michael Kesden and Samaya Nissanke}, + title = {Binary black hole merger: symmetry and the spin + expansion}, + journal = {Phys. Rev. Lett.}, + year = 2008, + volume = 100, + pages = 151101, + eprint = {arXiv:0709.0299 [gr-qc]}, + url = {http://arxiv.org/abs/0709.0299}, + receiveddate = {2007-10-22}, + OLDfulltexturl = {http://link.aps.org/abstract/PRL/v100/e151101}, + doi = {10.1103/PhysRevLett.100.151101}, +} + +@Article{Carpet-Sperhake2007a, + status = {refereed}, + author = {Ulrich Sperhake and Emanuele Berti and Vitor Cardoso + and Jos{\'e} A. Gonz{\'a}lez and Bernd Br{\"u}gmann + and Marcus Ansorg}, + title = {Eccentric binary black-hole mergers: The transition + from inspiral to plunge in general relativity}, + journal = {Phys. Rev. D}, + year = 2008, + volume = 78, + pages = 064069, + eprint = {arXiv:0710.3823 [gr-qc]}, + url = {http://arxiv.org/abs/0710.3823}, + receiveddate = {2007-10-22}, + OLDfulltexturl = {http://link.aps.org/doi/10.1103/PhysRevD.78.064069}, + doi = {10.1103/PhysRevD.78.064069}, +} + +@Article{Carpet-Hinder2007a, + status = {refereed}, + author = {Ian Hinder and Birjoo Vaishnav and Frank Herrmann + and Deirdre M. Shoemaker and Pablo Laguna}, + title = {Circularization and Final Spin in Eccentric Binary + Black Hole Inspirals}, + journal = {Phys. Rev. D}, + year = 2008, + volume = 77, + pages = {081502(R)}, + eprint = {arXiv:0710.5167 [gr-qc]}, + url = {http://arxiv.org/abs/0710.5167}, + receiveddate = {2007-10-31}, + OLDfulltexturl = {http://link.aps.org/doi/10.1103/PhysRevD.77.081502}, + doi = {10.1103/PhysRevD.77.081502}, +} + +@Article{Carpet-Bode2007a, + status = {refereed}, + author = {Tanja Bode and Deirdre Shoemaker and Frank Herrmann + and Ian Hinder}, + title = {Robustness of binary black hole mergers in the + presence of spurious radiation}, + journal = {Phys. Rev. D}, + year = 2008, + volume = 78, + pages = 044027, + eprint = {arXiv:0711.0669 [gr-qc]}, + url = {http://arxiv.org/abs/0711.0669}, + receiveddate = {2007-11-06}, + OLDfulltexturl = {http://link.aps.org/doi/10.1103/PhysRevD.77.044027}, + doi = {10.1103/PhysRevD.77.044027}, +} + +@Article{Carpet-Berti2007a, + status = {refereed}, + author = {Emanuele Berti and Vitor Cardoso and Jos{\'e} + A. Gonz{\'a}lez and Ulrich Sperhake and Bernd + Br{\"u}gmann}, + title = {Multipolar analysis of spinning binaries}, + journal = {Class. Quantum Grav.}, + year = 2008, + volume = 25, + pages = 114035, + eprint = {arXiv:0711.1097 [gr-qc]}, + url = {http://arxiv.org/abs/0711.1097}, + receiveddate = {2007-11-07}, + OLDfulltexturl = {http://stacks.iop.org/CQG/25/114035}, + doi = {10.1088/0264-9381/25/11/114035}, +} + +@Article{Carpet-Zink2007a, + status = {refereed}, + author = {Burkhard Zink and Erik Schnetter and Manuel Tiglio}, + title = {Multi-patch methods in general relativistic + astrophysics - {I.} {Hydrodynamical} flows on fixed + backgrounds}, + journal = {Phys. Rev. D }, + year = 2008, + volume = 77, + pages = 103015, + eprint = {arXiv:0712.0353 [astro-ph]}, + url = {http://arxiv.org/abs/0712.0353}, + receiveddate = {2007-12-04}, + OLDfulltexturl = {http://link.aps.org/abstract/PRD/v77/e103015}, + doi = {10.1103/PhysRevD.77.103015}, +} + +@Article{Carpet-Shoemaker2007a, + status = {refereed}, + author = {Deirdre M. Shoemaker and Birjoo Vaishnav and Ian + Hinder and Frank Herrmann}, + title = {Numerical relativity meets data analysis: spinning + binary black hole case}, + journal = {Class. Quantum Grav.}, + year = 2008, + volume = 25, + pages = 114047, + eprint = {arXiv:0802.4427 [gr-qc]}, + url = {http://arxiv.org/abs/0802.4427}, + receiveddate = {2007-12-14}, + OLDfulltexturl = {http://stacks.iop.org/CQG/25/114047}, + doi = {10.1088/0264-9381/25/11/114047}, +} + +@Article{Carpet-Damour2007a, + status = {refereed}, + author = {Thibault Damour and Alessandro Nagar and Ernst Nils + Dorband and Denis Pollney and Luciano Rezzolla}, + title = {Faithful effective-one-body waveforms of equal-mass + coalescing black-hole binaries}, + journal = {Phys. Rev. D}, + year = 2008, + volume = 77, + pages = 084017, + eprint = {arXiv:0712.3003 [gr-qc]}, + url = {http://arxiv.org/abs/0712.3003}, + receiveddate = {2007-12-18}, + OLDfulltexturl = {http://link.aps.org/doi/10.1103/PhysRevD.77.084017}, + doi = {10.1103/PhysRevD.77.084017}, +} + +@Article{Carpet-Rezzolla2007c, + status = {refereed}, + author = {Luciano Rezzolla and Enrico Barausse and Ernst Nils + Dorband and Denis Pollney and Christian Reisswig and + Jennifer Seiler and Sascha Husa}, + title = {Final spin from the coalescence of two black holes}, + journal = {Phys. Rev. D}, + year = 2008, + volume = 78, + pages = 044002, + eprint = {arXiv:0712.3541 [gr-qc]}, + url = {http://arxiv.org/abs/0712.3541}, + receiveddate = {2007-12-22}, + OLDfulltexturl = {http://link.aps.org/doi/10.1103/PhysRevD.78.044002}, + doi = {10.1103/PhysRevD.78.044002}, +} + +@Article{Carpet-Bentivegna2008a, + status = {refereed}, + author = {Eloisa Bentivegna and Deirdre M. Shoemaker and Ian + Hinder and and Frank Herrmann}, + title = {Probing the binary black hole merger regime with + scalar perturbations}, + journal = {Phys. Rev. D}, + year = 2008, + volume = 77, + pages = 124016, + eprint = {arXiv:0801.3478 [gr-qc]}, + url = {http://arxiv.org/abs/0801.3478}, + receiveddate = {2008-01-24}, + OLDfulltexturl = {http://link.aps.org/doi/10.1103/PhysRevD.77.124016}, + doi = {10.1103/PhysRevD.77.124016}, +} + +@Article{Carpet-Washik2008a, + status = {refereed}, + author = {Matthew C. Washik and James Healy and Frank Herrmann + and Ian Hinder and Deirdre M. Shoemaker and Pablo + Laguna and Richard A. Matzner}, + title = {Binary-Black-Hole Encounters, Gravitational Bursts, + and Maximum Final Spin}, + journal = {Phys. Rev. Lett.}, + year = 2008, + volume = 101, + pages = 061102, + eprint = {arXiv:0802.2520 [gr-qc]}, + url = {http://arxiv.org/abs/0802.2520}, + receiveddate = {2008-02-20}, + OLDfulltexturl = {http://link.aps.org/doi/10.1103/ + PhysRevLett.101.061102}, + doi = {10.1103/PhysRevLett.101.061102}, +} + +@Article{Carpet-Seiler2008a, + status = {refereed}, + author = {Jennifer Seiler and B{\'e}la Szil{\'a}gyi and Denis + Pollney and Luciano Rezzolla}, + title = {Constraint-preserving boundary treatment for a + harmonic formulation of the Einstein equations}, + journal = {Class. Quantum Grav.}, + year = 2008, + volume = 25, + pages = 175020, + eprint = {arXiv:0802.3341 [gr-qc]}, + url = {http://arxiv.org/abs/0802.3341}, + receiveddate = {2008-02-22}, + OLDfulltexturl = {http://stacks.iop.org/CQG/25/175020}, + doi = {10.1088/0264-9381/25/17/175020}, +} + +@Article{Carpet-Dain2008a, + status = {refereed}, + author = {Sergio Dain and Carlos O. Lousto and and Yosef + Zlochower}, + title = {Extra-large remnant recoil velocities and spins from + near-extremal-{Bowen}-{York}-spin black-hole + binaries}, + journal = {Phys. Rev. D}, + year = 2008, + volume = 78, + pages = 024039, + eprint = {arXiv:0803.0351 [gr-qc]}, + url = {http://arxiv.org/abs/0803.0351}, + receiveddate = {2008-03-03}, + OLDfulltexturl = {http://link.aps.org/doi/10.1103/PhysRevD.78.024039}, + doi = {10.1103/PhysRevD.78.024039}, +} + +@Article{Carpet-Baiotti2008a, + status = {refereed}, + author = {Luca Baiotti and Bruno Giacomazzo and Luciano + Rezzolla}, + title = {Accurate evolutions of inspiralling neutron-star + binaries: Prompt and delayed collapse to a black + hole}, + journal = {Phys. Rev. D}, + year = 2008, + volume = 78, + pages = 084033, + eprint = {arXiv:0804.0594 [gr-qc]}, + url = {http://arxiv.org/abs/0804.0594}, + receiveddate = {2008-04-03}, + OLDfulltexturl = {http://link.aps.org/doi/10.1103/PhysRevD.78.084033}, + doi = {10.1103/PhysRevD.78.084033}, +} + +@Article{CarpetResult-Benger2007a, + status = {refereed}, + author = {Werner Benger}, + title = {Colliding galaxies, rotating neutron stars and + merging black holes -- visualizing high dimensional + datasets on arbitrary meshes}, + journal = {New J. Phys.}, + year = 2008, + volume = 10, + pages = 125004, + receiveddate = {2008-04-14}, + url = {http://www.iop.org/EJ/ + abstract/1367-2630/10/12/125004}, + doi = {10.1088/1367-2630/10/12/125004}, +} + +@Article{Carpet-Lousto2008a, + status = {refereed}, + author = {Carlos O. Lousto and Yosef Zlochower}, + title = {Modeling gravitational recoil from precessing + highly-spinning unequal-mass black-hole binaries}, + journal = {Phys. Rev. D}, + year = 2009, + volume = 79, + pages = 064018, + eprint = {arXiv:0805.0159 [gr-qc]}, + url = {http://arxiv.org/abs/0805.0159}, + receiveddate = {2008-05-01}, + doi = {10.1103/PhysRevD.79.064018}, +} + +@Article{Carpet-Gualtieri2008a, + status = {refereed}, + author = {Leonardo Gualtieri and Emanuele Berti and Vitor + Cardoso and Ulrich Sperhake}, + title = {Transformation of the multipolar components of + gravitational radiation under rotations and boosts}, + journal = {Phys. Rev. D}, + year = 2008, + volume = 78, + pages = 044024, + eprint = {arXiv:0805.1017 [gr-qc]}, + url = {http://arxiv.org/abs/0805.1017}, + receiveddate = {2008-05-08}, + OLDfulltexturl = {http://link.aps.org/doi/10.1103/PhysRevD.78.044024}, + doi = {10.1103/PhysRevD.78.044024}, +} + +@Article{Carpet-Sperhake2008a, + status = {refereed}, + author = {Ulrich Sperhake and Vitor Cardoso and Frans + Pretorius and Emanuele Berti and and Jos{\'e} + A. Gonz{\'a}lez}, + title = {High-Energy Collision of Two Black Holes}, + journal = {Phys. Rev. Lett.}, + year = 2008, + volume = 101, + pages = 161101, + eprint = {arXiv:0806.1738 [gr-qc]}, + url = {http://arxiv.org/abs/0806.1738}, + receiveddate = {2008-06-10}, + OLDfulltexturl = + {http://link.aps.org/doi/10.1103/PhysRevLett.101.161101}, + doi = {10.1103/PhysRevLett.101.161101}, +} + +@Article{Carpet-Healy2008a, + status = {refereed}, + author = {James Healy and Frank Herrmann and Ian Hinder and + Deirdre M. Shoemaker and Pablo Laguna and and + Richard A. Matzner}, + title = {Superkicks in Hyperbolic Encounters of Binary Black + Holes}, + journal = {Phys. Rev. Lett.}, + year = 2009, + volume = 102, + pages = 041101, + eprint = {arXiv:0807.3292 [gr-qc]}, + url = {http://arxiv.org/abs/0807.3292}, + receiveddate = {2008-07-22}, + OLDfulltexturl = + {http://link.aps.org/doi/10.1103/PhysRevLett.102.041101}, + doi = {10.1103/PhysRevLett.102.041101}, +} + +@Article{Carpet-Campanelli2008a, + status = {refereed}, + author = {Manuela Campanelli and Carlos O. Lousto and Hiroyuki + Nakano and Yosef Zlochower}, + title = {Comparison of Numerical and Post-{Newtonian} + Waveforms for Generic Precessing Black-Hole + Binaries}, + journal = {Phys. Rev. D}, + year = 2009, + volume = 79, + pages = 084010, + eprint = {arXiv:0808.0713 [gr-qc]}, + url = {http://arxiv.org/abs/0808.0713}, + receiveddate = {2008-08-05}, + doi = {10.1103/PhysRevD.79.084010}, +} + +@Article{Carpet-Baiotti2008b, + status = {refereed}, + author = {Luca Baiotti and Sebastiano Bernuzzi and Giovanni + Corvino and Roberto De Pietri and Alessandro Nagar}, + title = {Gravitational-wave extraction from neutron-star + oscillations: Comparing linear and nonlinear + techniques}, + journal = {Phys. Rev. D}, + year = 2009, + volume = 79, + pages = 024002, + eprint = {arXiv:0808.4002 [gr-qc]}, + url = {http://arxiv.org/abs/0808.4002}, + receiveddate = {2008-08-27}, + OLDfulltexturl = {http://link.aps.org/doi/10.1103/PhysRevD.79.024002}, + doi = {10.1103/PhysRevD.79.024002}, +} + +@Article{Carpet-Brown2007b, + status = {refereed}, + author = {David Brown and Peter Diener and Olivier Sarbach and + Erik Schnetter and Manuel Tiglio}, + title = {Turduckening black holes: an analytical and + computational study}, + journal = {Phys. Rev. D}, + year = 2009, + volume = 79, + pages = 044023, + eprint = {arXiv:0809.3533 [gr-qc]}, + url = {http://arxiv.org/abs/0809.3533}, + receiveddate = {2008-09-20}, + OLDfulltexturl = {http://link.aps.org/doi/10.1103/PhysRevD.79.044023}, + doi = {10.1103/PhysRevD.79.044023}, +} + +@Article{Carpet-Korobkin2008a, + status = {refereed}, + author = {Oleg Korobkin and Burak Aksoylu and Michael Holst + and Enrique Pazos and Manuel Tiglio}, + title = {Solving the Einstein constraint equations on + multi-block triangulations using finite element + methods}, + journal = {Class. Quantum Grav.}, + year = 2009, + volume = 26, + pages = 145007, + eprint = {arXiv:0801.1823 [gr-qc]}, + url = {http://arxiv.org/abs/0801.1823}, + receiveddate = {2008-11-05}, + doi = {10.1088/0264-9381/26/14/145007}, +} + +@Article{Carpet-Campanelli2008b, + status = {refereed}, + author = {Manuela Campanelli and Carlos O. Lousto and Yosef + Zlochower}, + title = {Algebraic Classification of Numerical Spacetimes and + Black-Hole-Binary Remnants}, + journal = {Phys. Rev. D}, + year = 2009, + volume = 79, + pages = 084012, + eprint = {arXiv:0811.3006 [gr-qc]}, + url = {http://arxiv.org/abs/0811.3006}, + receiveddate = {2008-11-18}, + doi = {10.1103/PhysRevD.79.084012}, +} + +@Article{Carpet-Etienne2008a, + status = {refereed}, + author = {Zachariah B. Etienne and Yuk Tung Liu and Stuart + L. Shapiro and and Thomas W. Baumgarte}, + title = {General relativistic simulations of + black-hole-neutron-star mergers: Effects of + black-hole spin}, + journal = {Phys. Rev. D}, + year = 2009, + volume = 79, + pages = 044024, + eprint = {arXiv:0812.2245 [astro-ph]}, + url = {http://arxiv.org/abs/0812.2245}, + receiveddate = {2008-12-09}, + doi = {10.1103/PhysRevD.79.044024}, +} + +@Article{Carpet-Rezzolla2008a, + status = {refereed}, + author = {Luciano Rezzolla}, + title = {Modelling the final state from binary black-hole + coalescences}, + journal = {Class. Quantum Grav.}, + year = 2009, + volume = 26, + pages = 094023, + eprint = {arXiv:0812.2325 [gr-qc]}, + url = {http://arxiv.org/abs/0812.2325}, + receiveddate = {2008-12-10}, + doi = {10.1088/0264-9381/26/9/094023}, +} + +@Article{CarpetResult-Hannam2008a, + status = {refereed}, + author = {Mark Hannam and Sascha Husa and John G. Baker and + Michael Boyle and Bernd Br{\"u}gmann and Tony Chu + and Nils Dorband and Frank Herrmann and Ian Hinder + and Bernard J. Kelly and Lawrence E. Kidder and + Pablo Laguna and Keith D. Matthews and James R. {van + Meter} and Harald P. Pfeiffer and Denis Pollney and + Christian Reisswig and Mark A. Scheel and Deirdre + Shoemaker}, + title = {The {Samurai} Project: verifying the consistency of + black-hole-binary waveforms for gravitational-wave + detection}, + journal = {Phys. Rev. D}, + year = 2009, + volume = 79, + pages = 084025, + eprint = {arXiv:0901.2437 [gr-qc]}, + url = {http://arxiv.org/abs/0901.2437}, + receiveddate = {2009-01-20}, + doi = {10.1103/PhysRevD.79.084025}, +} + +@Article{Carpet-Aylott2009a, + status = {refereed}, + author = {Benjamin Aylott and John G. Baker and William + D. Boggs and Michael Boyle and Patrick R. Brady and + Duncan A. Brown and Bernd Br{\"u}gmann and Luisa + T. Buchman and Alessandra Buonanno and Laura + Cadonati and Jordan Camp and Manuela Campanelli and + Joan Centrella and Shourov Chatterji and Nelson + Christensen and Tony Chu and Peter Diener and Nils + Dorband and Zachariah B. Etienne and Joshua Faber + and Stephen Fairhurst and Benjamin Farr and + Sebastian Fischetti and Gianluca Guidi and Lisa + M. Goggin and Mark Hannam and Frank Herrmann and Ian + Hinder and Sascha Husa and Vicky Kalogera and Drew + Keppel and Lawrence E. Kidder and Bernard J. Kelly + and Badri Krishnan and Pablo Laguna and Carlos + O. Lousto and Ilya Mandel and Pedro Marronetti and + Richard Matzner and Sean T. McWilliams and Keith + D. Matthews and R. Adam Mercer and Satyanarayan + R. P. Mohapatra and Abdul H. Mrou{\'e} and Hiroyuki + Nakano and Evan Ochsner and Yi Pan and Larne + Pekowsky and Harald P. Pfeiffer and Denis Pollney + and Frans Pretorius and Vivien Raymond and Christian + Reisswig and Luciano Rezzolla and Oliver Rinne and + Craig Robinson and Christian R{\"o}ver and Luc{\'i}a + Santamar{\'i}a and Bangalore Sathyaprakash and Mark + A. Scheel and Erik Schnetter and Jennifer Seiler and + Stuart L. Shapiro and Deirdre Shoemaker and Ulrich + Sperhake and Alexander Stroeer and Riccardo Sturani + and Wolfgang Tichy and Yuk Tung Liu and Marc van der + Sluys and James R. van Meter and Ruslan Vaulin and + Alberto Vecchio and John Veitch and Andrea + Vicer{\'e} and John T. Whelan and Yosef Zlochower}, + title = {Testing gravitational-wave searches with numerical + relativity waveforms: Results from the first + {Numerical} {INJection} {Analysis} ({NINJA}) + project}, + journal = {Class. Quantum Grav.}, + year = 2009, + volume = 26, + pages = 165008, + eprint = {arXiv:0901.4399 [gr-qc]}, + url = {http://arxiv.org/abs/0901.4399}, + receiveddate = {2009-01-29}, + doi = {10.1088/0264-9381/26/16/165008}, +} + +@Article{Carpet-Baiotti2009a, + status = {refereed}, + author = {Luca Baiotti and Bruno Giacomazzo and Luciano + Rezzolla}, + title = {Accurate evolutions of inspiralling neutron-star + binaries: assessment of the truncation error}, + journal = {Class. Quantum Grav.}, + year = 2009, + volume = 26, + pages = 114005, + eprint = {arXiv:0901.4955 [gr-qc]}, + url = {http://arxiv.org/abs/0901.4955}, + receiveddate = {2009-02-02}, + doi = {10.1088/0264-9381/26/11/114005}, +} + +@Article{Carpet-Cadonati2009a, + status = {refereed}, + author = {Benjamin Aylott and John G. Baker and William + D. Boggs and Michael Boyle and Patrick R. Brady and + Duncan A. Brown and Bernd Br{\"u}gmann and Luisa + T. Buchman and Alessandra Buonanno and Laura + Cadonati and Jordan Camp and Manuela Campanelli and + Joan Centrella and Shourov Chatterji and Nelson + Christensen and Tony Chu and Peter Diener and Nils + Dorband and Zachariah B. Etienne and Joshua Faber + and Stephen Fairhurst and Benjamin Farr and + Sebastian Fischetti and Gianluca Guidi and Lisa + M. Goggin and Mark Hannam and Frank Herrmann and Ian + Hinder and Sascha Husa and Vicky Kalogera and Drew + Keppel and Lawrence E. Kidder and Bernard J. Kelly + and Badri Krishnan and Pablo Laguna and Carlos + O. Lousto and Ilya Mandel and Pedro Marronetti and + Richard Matzner and Sean T. McWilliams and Keith + D. Matthews and R. Adam Mercer and Satyanarayan + R. P. Mohapatra and Abdul H. Mrou{\'e} and Hiroyuki + Nakano and Evan Ochsner and Yi Pan and Larne + Pekowsky and Harald P. Pfeiffer and Denis Pollney + and Frans Pretorius and Vivien Raymond and Christian + Reisswig and Luciano Rezzolla and Oliver Rinne and + Craig Robinson and Christian R{\"o}ver and Luc{\'i}a + Santamar{\'i}a and Bangalore Sathyaprakash and Mark + A. Scheel and Erik Schnetter and Jennifer Seiler and + Stuart L. Shapiro and Deirdre Shoemaker and Ulrich + Sperhake and Alexander Stroeer and Riccardo Sturani + and Wolfgang Tichy and Yuk Tung Liu and Marc van der + Sluys and James R. van Meter and Ruslan Vaulin and + Alberto Vecchio and John Veitch and Andrea + Vicer{\'e} and John T. Whelan and Yosef Zlochower}, + title = {Status of {NINJA}: the {Numerical} {INJection} + {Analysis} project}, + journal = {Class. Quantum Grav.}, + year = 2009, + volume = 26, + pages = 114008, + eprint = {arXiv:0901.4399 [gr-qc]}, + url = {http://arxiv.org/abs/0905.4227}, + receiveddate = {2009-03-10}, + fulltexturl = {http://stacks.iop.org/CQG/26/114008}, + doi = {10.1088/0264-9381/26/11/114008} +} + +@Article{Carpet-Saijo2009a, + author = {Motoyuki Saijo and Ian Hawke}, + title = {Collapse of differentially rotating supermassive + stars: Post black hole formation}, + journal = {Phys. Rev. D (accepted)}, + year = 2009, + eprint = {arXiv:0908.3002 [gr-qc]}, + url = {http://arxiv.org/abs/0908.3002}, + receiveddate = {2009-08-21} +} + + + +******************************************************************************** +SUBMITTED: +******************************************************************************** + + + +******************************************************************************** +PREPARING: +******************************************************************************** + + + +******************************************************************************** +THESIS: +******************************************************************************** + +@PhdThesis{Carpet-Koppitz2004a, + status = {thesis}, + author = {Michael Koppitz}, + title = {Numerical Studies Of Black Hole Initial Data}, + school = {Universit{\"a}t Potsdam}, + year = 2004, + url = {http://opus.kobv.de/ubp/volltexte/2005/134/}, + receiveddate = 2004, +} + +% Herrmann2005:PhD +@PhdThesis{Carpet-Herrmann2005a, + status = {thesis}, + author = {Frank Herrmann}, + title = {Evolution and analysis of binary black hole + spacetimes}, + school = {Universit{\"a}t Potsdam}, + year = 2005, + receiveddate = 2005, +} + +% Loeffler05 +@PhdThesis{Carpet-Loeffler2005a, + status = {thesis}, + author = {Frank L{\"o}ffler}, + title = {Numerical Simulations of Neutron Star-Black Hole + Mergers}, + school = {Universit{\"a}t Potsdam}, + year = 2006, + url = {http://opus.kobv.de/ubp/volltexte/2006/774/}, + receiveddate = 2006, +} + +@MastersThesis{Carpet-Madiraju2006a, + status = {thesis}, + author = {Sasanka Madiraju}, + title = {Performance Profiling with {Cactus} Benchmarks}, + school = {Louisiana State University}, + year = 2006, + url = {http://www.cactuscode.org/ + Articles/Cactus_Madiraju06.pdf}, + receiveddate = 2006, +} + +@PhdThesis{Carpet-Zink2006d, + status = {thesis}, + author = {Burkhard Zink}, + title = {Black hole formation from non-axisymmetric + instabilities in quasi-toroidal stars}, + school = {Technische Universit{\"a}t M{\"u}nchen}, + year = 2006, + url = {http://nbn-resolving.de/urn/resolver.pl + ?urn=urn:nbn:de:bvb:91-diss20060623-1915123970}, + receiveddate = 2006, +} + +@PhdThesis{Carpet-Dorband2007a, + status = {thesis}, + author = {Ernst Nils Dorband}, + title = {Computing and Analyzing Gravitational Radiation in + Black Hole Simulations Using a New Multi-Block + Approach to Numerical Relativity}, + school = {Louisiana State University}, + year = 2007, + url = {http://www.cct.lsu.edu/~dorband/thesis.pdf}, + receiveddate = 2007, +} + +@PhdThesis{Carpet-Kastaun2007a, + status = {thesis}, + author = {Wolfgang Kastaun}, + title = {Developing a code for general relativistic + hydrodynamics with application to neutron star + oscillations}, + school = {Universit{\"a}t T{\"u}bingen}, + year = 2007, + url = {http://tobias-lib.ub.uni-tuebingen.de/ + volltexte/2007/2803/}, + receiveddate = 2007, +} + +@PhdThesis{Carpet-Manca2007a, + status = {thesis}, + author = {Gian Mario Manca}, + title = {Dynamical instabilities in rapidly rotating neutron + star models}, + school = {Universit{\`a} di Parma}, + year = 2007, + receiveddate = 2007, +} + +@PhdThesis{Carpet-Ott2007a, + status = {thesis}, + author = {Christian D. Ott}, + title = {Stellar Iron Core Collapse in \{3+1\} General + Relativity and The Gravitational Wave Signature of + Core-Collapse Supernovae}, + school = {Universit{\"a}t Potsdam}, + year = 2007, + url = {http://stellarcollapse.org/papers/thesis_final.pdf}, + receiveddate = 2007, +} + +@PhdThesis{Carpet-2007a, + status = {thesis}, + author = {An{\i}l Zengino{\u{g}}lu}, + title = {A conformal approach to numerical calculations of + asymptotically flat spacetimes}, + school = {Universit{\"a}t Potsdam}, + year = 2007, + eprint = {arXiv:0711.0873 [gr-qc]}, + url = {http://arxiv.org/abs/0711.0873}, + receiveddate = 2007, +} + +@PhdThesis{Carpet-Bentivegna2008b, + status = {thesis}, + author = {Eloisa Bentivegna}, + title = {Ringing in unison: exploring black hole coalescence + with quasinormal modes}, + school = {Pennsylvania State University}, + year = 2008, + url = {http://etda.libraries.psu.edu/ + theses/approved/WorldWideIndex/ETD-2570/index.html}, + receiveddate = 2008, +} + +@MastersThesis{Carpet-Jasiulek2008a, + status = {thesis}, + author = {Michael Jasiulek}, + title = {Spin Measures on Isolated and Dynamical Horizons in + Numerical Relativity}, + school = {Humboldt-Universit{\"a}t zu Berlin}, + year = 2008, + receiveddate = 2008, +} + +% Luca Baiotti, +% Numerical relativity simulations of non-vacuum spacetimes in three +% dimensions, +% PhD thesis, SISSA, 2004. +% [does not use Carpet] +% +% Bernard Kelly, +% The Next Generation of Binary Black Hole Head-On Collisions, and their +% Aftermath, +% PhD thesis, Penn State University, 2004. +% [does not use Carpet] +% +% Kenneth Smith, +% Dynamic Singularity Excision in Numerical Relativity, +% PhD thesis, Penn State University, 2004. +% [does not use Carpet] +% +% Bruno Giacomazzo, +% General Relativistic Magnetohydrodynamics: fundamental aspects and applications, +% PhD thesis, SISSA, 2006. +% [does not use Carpet] + + + +******************************************************************************** +BOOK: +******************************************************************************** + +@InCollection{Carpet-Schnetter2007a, + status = {book}, + author = {Erik Schnetter and Christian D. Ott and Gabrielle + Allen and Peter Diener and Tom Goodale and Thomas + Radke and Edward Seidel and John Shalf}, + title = {{Cactus} {Framework}: Black Holes to Gamma Ray + Bursts}, + booktitle = {Petascale Computing: Algorithms and Applications}, + pages = {507-528}, + publisher = {Chapman \& Hall/CRC}, + year = 2007, + editor = {David A. Bader}, + series = {Computational Science Series}, + chapter = 24, + eprint = {arXiv:0707.1607 [cs.DC]}, + url = {http://arxiv.org/abs/0707.1607}, + receiveddate = {2007-07-11}, + isbn = 9781584889090, +} + + + +******************************************************************************** +REPORT: +******************************************************************************** + +@InProceedings{Carpet-Zink2005b, + status = {report}, + author = {Burkhard Zink and Nikolaos Stergioulas and Ian Hawke + and Christian D. Ott and Erik Schnetter and Ewald + M{\"u}ller}, + title = {Rotational instabilities in supermassive stars: a + new way to form supermassive black holes}, + booktitle = {International Scientific Workshop on Cosmology and + Gravitational Physics, Thessaloniki, December 15-16, + 2005}, + pages = {155-160}, + year = 2006, + editor = {N. K. Spyrou and N. Stergioulas and C. Tsagas}, + publisher = {ZITI} +} + +@InProceedings{Carpet-Sperhake2006b, + status = {report}, + author = {Ulrich Sperhake and Bernd Br{\"u}gmann and Jos{\'e} + Gonz{\'a}lez and Mark Hannam and Sascha Husa}, + title = {Head-On collisions of different initial data}, + booktitle = {Proceedings of the 11th Marcel Grossmann Meeting + (MG11) in Berlin, Germany, July 23-29, 2006}, + year = 2007, + eprint = {arXiv:0705.2035 [gr-qc]}, + url = {http://arxiv.org/abs/0705.2035}, + receiveddate = {2006-07-23}, +} + +@InProceedings{Carpet-Zink2006b, + status = {report}, + author = {Burkhard Zink and Nikolaos Stergioulas and Ian Hawke + and Christian D. Ott and Erik Schnetter and Ewald + M{\"u}ller}, + title = {Fragmentation of general relativistic quasi-toroidal + polytropes}, + booktitle = {Proceedings of the 11th Marcel Grossmann Meeting + (MG11) in Berlin, Germany, July 23-29, 2006}, + year = 2007, + eprint = {arXiv:0704.0431 [gr-qc]}, + url = {http://arxiv.org/abs/0704.0431}, + receiveddate = {2006-07-23}, +} + +@InProceedings{Carpet-Zink2006c, + status = {report}, + author = {Burkhard Zink and Nikolaos Stergioulas and Ian Hawke + and Christian D. Ott and Erik Schnetter and Ewald + M{\"u}ller}, + title = {Supermassive Black Hole Formation through Rotational + Instabilities}, + booktitle = {12th Conference on Recent Developments in Gravity + (NEB XII)}, + pages = 012050, + year = 2007, + volume = 68, + series = {J. Phys.: Conf. Ser.}, + receiveddate = {2006-06-29}, + url = {http://stacks.iop.org/JPConf/68/012050}, + doi = {10.1088/1742-6596/68/1/012050}, +} + +@InProceedings{Carpet-Baiotti2006c, + status = {report}, + author = {Luca Baiotti and Ian Hawke and Luciano Rezzolla and + Erik Schnetter}, + title = {Details on the gravitational-wave emission from + rotating gravitational collapse in {3D}}, + booktitle = {XXIXth Spanish Relativity Meeting (E.R.E. 2006)}, + pages = 012045, + year = 2007, + volume = 66, + series = {J. Phys.: Conf. Ser.}, + receiveddate = {2006-09-04}, + url = {http://stacks.iop.org/JPConf/66/012045}, + doi = {10.1088/1742-6596/66/1/012045}, +} + +@InProceedings{Carpet-Sperhake2006c, + status = {report}, + author = {Ulrich Sperhake}, + title = {Black-hole binary evolutions with the {LEAN} code}, + booktitle = {XXIXth Spanish Relativity Meeting (E.R.E. 2006)}, + pages = 012049, + year = 2007, + volume = 66, + series = {J. Phys.: Conf. Ser.}, + receiveddate = {2006-09-04}, + url = {http://stacks.iop.org/JPConf/66/012049}, + doi = {10.1088/1742-6596/66/1/012049}, +} + +@InProceedings{CarpetResult-Font2006a, + status = {report}, + author = {Jos{\'e} A. Font}, + title = {Current status of relativistic core collapse + simulations}, + booktitle = {XXIXth Spanish Relativity Meeting (E.R.E. 2006)}, + pages = 012063, + year = 2007, + volume = 66, + series = {J. Phys.: Conf. Ser.}, + receiveddate = {2006-09-04}, + url = {http://stacks.iop.org/JPConf/66/012063}, + doi = {10.1088/1742-6596/66/1/012063}, +} + +@InProceedings{CarpetResult-Baker2007a, + status = {report}, + author = {John G. Baker and William D. Boggs and Joan + M. Centrella and Bernard J. Kelly and Sean + T. McWilliams and James R. van Meter}, + title = {Gravitational waves from black-hole mergers}, + booktitle = {Proceedings of the 2007 Spring Symposium of the + Space Telescope Science Institute (Baltimore, MD)}, + year = 2007, + pages = {(to be published)}, + eprint = {arXiv:0708.4202 [astro-ph]}, + url = {http://arxiv.org/abs/0708.4202}, + receiveddate = {2007-04-23}, +} + +@Unpublished{Carpet-Hinder2008a, + status = {report}, + author = {Ian Hinder and Frank Herrmann and Pablo Laguna and + Deirdre Shoemaker}, + title = {Comparisons of eccentric binary black hole + simulations with post-{Newtonian} models}, + note = {arXiv:0806.1037 [gr-qc]}, + year = 2008, + receiveddate = {2008-06-05}, + url = {http://arxiv.org/abs/0806.1037}, +} + +@TechReport{Carpet-Tao2008a, + status = {report}, + author = {Jian Tao and Gabrielle Allen and Ian Hinder and Erik + Schnetter and Yosef Zlochower}, + title = {{XiRel}: Standard Benchmarks for Numerical + Relativity Codes Using {Cactus} and {Carpet}}, + institution = {Center for Computation \& Technology, Louisiana + State University}, + year = 2008, + number = 5, + receiveddate = {2008-07-01}, + url = {http://www.cct.lsu.edu/CCT-TR/CCT-TR-2008-5}, +} + +@Unpublished{Carpet-Giacomazzo2009a, + status = {report}, + author = {Bruno Giacomazzo and Luciano Rezzolla and Luca + Baiotti}, + title = {The influence of magnetic fields on the + gravitational-wave emission from binary neutron + stars}, + note = {arXiv:0901.2722v1 [gr-qc]}, + year = 2009, + receiveddate = {2009-01-18}, + url = {http://arxiv.org/abs/0901.2722}, +} + +@Unpublished{CarpetResult-Nakano2008a, + status = {report}, + author = {Hiroyuki Nakano and Manuela Campanelli and Carlos + O. Lousto and Yosef Zlochower}, + title = {Comparison of Post-{Newtonian} and Numerical + Evolutions of Black-Hole Binaries}, + note = {arXiv:0901.3861 [gr-qc]}, + year = 2009, + url = {http://arxiv.org/abs/0901.3861}, + receiveddate = {2009-01-24}, +} + +@Unpublished{Carpet-Bode2009a, + status = {report}, + author = {Tanja Bode and Pablo Laguna and Deirdre M. Shoemaker + and Ian Hinder and Frank Herrmann and Jirjoo + Vishnav}, + title = {Binary black hole evolutions of approximate puncture + initial data}, + note = {arXiv:0902.1127 [gr-qc]}, + year = 2009, + receiveddate = {2009-02-06}, + url = {http://arxiv.org/abs/0902.1127}, +} + +@Unpublished{Carpet-Bernuzzi2009a, + status = {report}, + author = {Sebastiano Bernuzzi and Lucao Baiotti and Giovanni + Corvino and Roberto De Pietri and Alessandro Nagar}, + title = {Gravitational-wave extraction from neutron-star + oscillations}, + note = {arXiv:0902.2720 [gr-qc]}, + year = 2009, + receiveddate = {2009-02-16}, + url = {http://arxiv.org/abs/0902.2720}, +} + +@Unpublished{Carpet-Barausse2009a, + status = {report}, + author = {Enrico Barausse and Luciano Rezzolla}, + title = {Predicting the direction of the final spin from the + coalescence of two black holes}, + note = {arXiv:0904.2577 [gr-qc]}, + year = 2009, + receiveddate = {2009-04-16}, + url = {http://arxiv.org/abs/0904.2577}, +} + +@Unpublished{Carpet-Lousto2009a, + status = {report}, + author = {Carlos O. Lousto and Manuela Campanelli and Yosef + Zlochower}, + title = {Remnant Masses, Spins and Recoils from the Merger of + Generic Black-Hole Binaries}, + note = {arXiv:0904.3541 [gr-qc]}, + year = 2009, + receiveddate = {2009-04-22}, + url = {http://arxiv.org/abs/0904.3541}, +} + +@Unpublished{Carpet-Ott2009a, + status = {report}, + author = {Christian D. Ott}, + title = {Probing the Core-Collapse Supernova Mechanism with + Gravitational Waves}, + note = {arXiv:0905.2797 [gr-qc]}, + year = 2009, + receiveddate = {2009-05-18}, + url = {http://arxiv.org/abs/0905.2797}, +} + +@Unpublished{Carpet-Healy2009b, + status = {report}, + author = {James Healy and Pablo Laguna and Richard A. Matzner + and Deirdre M. Shoemaker}, + title = {Final Mass and Spin of Merged Black Holes and the + Golden Black Hole}, + note = {arXiv:0905.3914 [gr-qc]}, + year = 2009, + receiveddate = {2009-05-24}, + url = {http://arxiv.org/abs/0905.3914}, +} + +@Unpublished{Carpet-Reisswig2009a, + status = {report}, + author = {Christian Reisswig and Sascha Husa and Luciano + Rezzolla and Ernst Nils Dorband and Denis Pollney + and Jennifer Seiler}, + title = {Gravitational-wave detectability of equal-mass + black-hole binaries with aligned spins}, + note = {arXiv:0907.0462 [gr-qc]}, + year = 2009, + receiveddate = {2009-07-02}, + url = {http://arxiv.org/abs/0907.0462}, +} + +@Unpublished{Carpet-Healy2009a, + status = {report}, + author = {James Healy and Janna Levin and Deirdre Shoemaker}, + title = {Zoom-Whirl Orbits in Black Hole Binaries}, + note = {arXiv:0907.0671 [gr-qc]}, + year = 2009, + receiveddate = {2009-07-03}, + url = {http://arxiv.org/abs/0907.0671}, +} + +@Unpublished{Carpet-Lovelace2009a, + status = {report}, + author = {Geoffrey Lovelace and Yanbei Chen and Michael Cohen + and Jeffrey D. Kaplan and Drew Keppel and Keith + D. Matthews and David A. Nichols and Mark A. Scheel + and Ulrich Sperhake}, + title = {Momentum flow in black-hole binaries: {II.} + {Numerical} simulations of equal-mass, head-on + mergers with antiparallel spins}, + note = {arXiv:0907.0869 [gr-qc]}, + year = 2009, + receiveddate = {2009-07-05}, + url = {http://arxiv.org/abs/0907.0869}, +} + +@Unpublished{Carpet-Sperhake2009a, + status = {report}, + author = {Ulrich Sperhake and Vitor Cardoso and Frans + Pretorius and Emanuele Berti and Tanja Hinderer and + Nicolas Yunes}, + title = {Cross section, final spin and zoom-whirl behavior in + high-energy black hole collisions}, + note = {arXiv:0907.1252 [gr-qc]}, + year = 2009, + receiveddate = {2009-07-07}, + url = {http://arxiv.org/abs/0907.1252}, +} + +@Unpublished{Carpet-Reisswig2009b, + status = {report}, + author = {Christian Reisswig and Nigel T. Bishop and Denis + Pollney and B{\'e}la Szil{\'a}gyi}, + title = {Unambiguous determination of gravitational waveforms + from binary black hole mergers}, + note = {arXiv:0907.2637 [gr-qc]}, + year = 2009, + receiveddate = {2009-07-15}, + url = {http://arxiv.org/abs/0907.2637}, +} + +@Unpublished{Carpet-Vega2009a, + status = {report}, + author = {Ian Vega and Peter Diener and Wolfgang Tichy and + Steven Detweiler}, + title = {Self-force with (3+1) codes: a primer for numerical + relativists}, + note = {arXiv:0908.2138 [gr-qc]}, + year = 2009, + receiveddate = {2009-08-13}, + url = {http://arxiv.org/abs/0908.2138}, +} + + + +******************************************************************************** +INVITED: +******************************************************************************** + + + +******************************************************************************** +CONTRIBUTED: +******************************************************************************** + + + +******************************************************************************** +INTERNAL: +******************************************************************************** + + + +******************************************************************************** +WEBPAGE: +******************************************************************************** + +@Misc{Carpet-cactusweb, + status = {webpage}, + title = {{Cactus} {Computational} {Toolkit}}, + url = {http://www.cactuscode.org/}, +} + +@Misc{Carpet-carpetweb, + status = {webpage}, + title = {Mesh Refinement with {Carpet}}, + url = {http://www.carpetcode.org/}, +} + + + +******************************************************************************** diff --git a/Carpet/CarpetWeb/publications/carpet-publications.log b/Carpet/CarpetWeb/publications/carpet-publications.log new file mode 100644 index 000000000..3a17dfc3b --- /dev/null +++ b/Carpet/CarpetWeb/publications/carpet-publications.log @@ -0,0 +1,214 @@ +This is pdfTeX, Version 3.141592-1.40.3 (Web2C 7.5.6) (format=pdflatex 2009.7.3) 3 AUG 2009 22:08 +entering extended mode +**\nonstopmode \input{/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publicatio +ns/carpet-publications.tex} + +(/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publications/carpet-publication +s.tex (/opt/local/share/texmf-dist/tex/latex/revtex/revtex4.cls +Document Class: revtex4 2001/08/02 v4.0 (http://publish.aps.org/revtex4/ for do +cumentation) + Copyright (c) 2001 The American Physical Society. + mailto:revtex@aps.org + Licensed under the LPPL: +http://www.ctan.org/tex-archive/macros/latex/base/lppl.txt + Arthur Ogawa <ogawa@teleport.com> + Based on work by David Carlisle <david@dcarlisle.demon.co.uk>. +ltxutil: portions licensed from W. E. Baxter (web@superscript.com) +Class revtex4 Info: Repairing broken LateX \@sect on input line 596. +\intertabularlinepenalty=\count79 +\@tbpen=\count80 +\@arstrutbox@hline=\box26 +Class revtex4 Info: Repairing broken LaTeX \@xbitor on input line 1610. +ltxgrid: portions licensed from W. E. Baxter (web@superscript.com) +\c@linecount=\count81 +\output=\toks14 +\@protection@box=\box27 +\@topmark@saved=\toks15 +\footins@saved=\box28 +\pagesofar=\box29 +\footbox=\box30 +\pagegrid@col=\count82 +Class revtex4 Info: Incorporating package {textcase} [1998/11/12 v0.06 Text on +ly upper/lower case changing (DPC)]. on input line 3682. +(/opt/local/share/texmf-local/tex/latex/html/url.sty +Package: url 1999/03/02 ver 1.4 Verb mode for urls, email addresses, and file + names +) +\c@affil=\count83 +\absbox=\box31 +\c@part=\count84 +\c@section=\count85 +\c@subsection=\count86 +\c@subsubsection=\count87 +\c@paragraph=\count88 +\c@subparagraph=\count89 +\abovecaptionskip=\skip41 +\belowcaptionskip=\skip42 +\c@figure=\count90 +\c@table=\count91 + +(/opt/local/share/texmf-dist/tex/latex/natbib/natbib.sty +Package: natbib 2007/02/05 8.0 (PWD) +\bibhang=\skip43 +\bibsep=\skip44 +LaTeX Info: Redefining \cite on input line 602. +\c@NAT@ctr=\count92 +) +\widetext@top=\box32 +\widetext@bot=\box33 + +(/opt/local/share/texmf-dist/tex/latex/revtex/revsymb.sty +Package: revsymb 2001/08/02 v4.0 (http://publish.aps.org/revtex4/ for documenta +tion) +LaTeX Info: Redefining \REV@mathfrak on input line 118. +)) + +Class revtex4 Warning: No Society specified, using generic APS style. + +(/opt/local/share/texmf-dist/tex/latex/revtex/aps.rtx +File: aps.rtx 2001/08/02 v4.0 (http://publish.aps.org/revtex4/ for documentatio +n) +) +(/opt/local/share/texmf-dist/tex/latex/revtex/11pt.rtx +File: 11pt.rtx 2001/08/02 v4.0 (http://publish.aps.org/revtex4/ for documentati +on) +) +(/opt/local/share/texmf-dist/tex/generic/babel/babel.sty +Package: babel 2005/11/23 v3.8h The Babel package + +(/opt/local/share/texmf-dist/tex/generic/babel/english.ldf +Language: english 2005/03/30 v3.3o English support from the babel system + +(/opt/local/share/texmf-dist/tex/generic/babel/babel.def +File: babel.def 2005/11/23 v3.8h Babel common definitions +\babel@savecnt=\count93 +\U@D=\dimen102 +) +\l@british = a dialect from \language\l@english +\l@UKenglish = a dialect from \language\l@english +\l@canadian = a dialect from \language\l@american +\l@australian = a dialect from \language\l@british +\l@newzealand = a dialect from \language\l@british +)) +(/opt/local/share/texmf-dist/tex/latex/base/inputenc.sty +Package: inputenc 2006/05/05 v1.1b Input encoding file +\inpenc@prehook=\toks16 +\inpenc@posthook=\toks17 + +(/opt/local/share/texmf-local/tex/latex/html/latin9.def +File: latin1.def 1998/03/05 v0.97 Input encoding file(test version: still liabl +e to change) +)) +(/opt/local/share/texmf-dist/tex/latex/psnfss/mathpazo.sty +Package: mathpazo 2005/04/12 PSNFSS-v9.2a Palatino w/ Pazo Math (D.Puga, WaS) +\symupright=\mathgroup4 +) +(/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publications/carpet-publication +s.aux) +\openout1 = `carpet-publications.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 24. +LaTeX Font Info: ... okay on input line 24. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 24. +LaTeX Font Info: ... okay on input line 24. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 24. +LaTeX Font Info: ... okay on input line 24. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 24. +LaTeX Font Info: ... okay on input line 24. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 24. +LaTeX Font Info: ... okay on input line 24. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 24. +LaTeX Font Info: ... okay on input line 24. +LaTeX Font Info: Try loading font information for OT1+ppl on input line 24. + (/opt/local/share/texmf-dist/tex/latex/psnfss/ot1ppl.fd +File: ot1ppl.fd 2001/06/04 font definitions for OT1/ppl. +) +Class revtex4 Info: Patching LaTeX tabular. on input line 24. +Class revtex4 Info: cite was not loaded (OK!) on input line 24. +Class revtex4 Info: multicol was not loaded (OK!) on input line 24. +\big@size=\dimen103 +LaTeX Font Info: Font shape `OT1/ppl/bx/n' in size <17.28> not available +(Font) Font shape `OT1/ppl/b/n' tried instead on input line 26. +LaTeX Font Info: Font shape `OT1/ppl/bx/n' in size <12> not available +(Font) Font shape `OT1/ppl/b/n' tried instead on input line 32. + +(/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publications/citations-backgrou +nd.bibitems +LaTeX Font Info: Try loading font information for OML+zplm on input line 27. + + (/opt/local/share/texmf-dist/tex/latex/psnfss/omlzplm.fd +File: omlzplm.fd 2002/09/08 Fontinst v1.914 font definitions for OML/zplm. +) +LaTeX Font Info: Try loading font information for OMS+zplm on input line 27. + + +(/opt/local/share/texmf-dist/tex/latex/psnfss/omszplm.fd +File: omszplm.fd 2002/09/08 Fontinst v1.914 font definitions for OMS/zplm. +) +LaTeX Font Info: Try loading font information for OMX+zplm on input line 27. + + +(/opt/local/share/texmf-dist/tex/latex/psnfss/omxzplm.fd +File: omxzplm.fd 2002/09/08 Fontinst v1.914 font definitions for OMX/zplm. +) +LaTeX Font Info: Try loading font information for OT1+zplm on input line 27. + + +(/opt/local/share/texmf-dist/tex/latex/psnfss/ot1zplm.fd +File: ot1zplm.fd 2002/09/08 Fontinst v1.914 font definitions for OT1/zplm. +) +LaTeX Font Info: Font shape `OT1/ppl/bx/n' in size <10.95> not available +(Font) Font shape `OT1/ppl/b/n' tried instead on input line 37. +) +(/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publications/citations-webpage. +bibitems) +(/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publications/citations-refereed +.bibitems [1{/opt/local/share/texmf/fonts/map/pdftex/updmap/pdftex.map}] +[2] +Underfull \hbox (badness 1577) in paragraph at lines 403--412 +\OT1/ppl/m/it/10.95 from near-extremal-Bowen-York-spin black-hole bi-na-ries\OT +1/ppl/m/n/10.95 , Phys. Rev. D \OT1/ppl/b/n/10.95 78\OT1/ppl/m/n/10.95 , 024039 + (2008), + [] + +[3] [4] [5] [6]) +(/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publications/citations-book.bib +items) +(/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publications/citations-thesis.b +ibitems [7] +LaTeX Font Info: Try loading font information for OMS+ppl on input line 53. + (/opt/local/share/texmf-dist/tex/latex/psnfss/omsppl.fd +File: omsppl.fd +) +LaTeX Font Info: Font shape `OMS/ppl/m/it' in size <10.95> not available +(Font) Font shape `OMS/cmsy/m/n' tried instead on input line 53. +) +(/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publications/citations-report.b +ibitems [8] +Underfull \hbox (badness 1194) in paragraph at lines 77--83 +[]\OT1/ppl/m/n/10.95 J. Healy, J. Levin, and D. Shoe-maker, \OT1/ppl/m/it/10.95 + Zoom-whirl or-bits in black hole bi-na-ries \OT1/ppl/m/n/10.95 (2009), + [] + +[9]) [10] +(/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publications/carpet-publication +s.aux) ) +Here is how much of TeX's memory you used: + 2247 strings out of 94073 + 29343 string characters out of 1164798 + 92868 words of memory out of 1500000 + 5528 multiletter control sequences out of 10000+50000 + 16601 words of font info for 45 fonts, out of 1200000 for 2000 + 645 hyphenation exceptions out of 8191 + 26i,4n,21p,290b,245s stack positions out of 5000i,500n,6000p,200000b,5000s +{/opt/local/share/texmf-dist/fonts/enc/dvips/base/8r.enc}</opt/local/sh +are/texmf-dist/fonts/type1/bluesky/cm/cmsy10.pfb></opt/local/share/texmf-dist/f +onts/type1/urw/palatino/uplb8a.pfb></opt/local/share/texmf-dist/fonts/type1/urw +/palatino/uplr8a.pfb></opt/local/share/texmf-dist/fonts/type1/urw/palatino/uplr +i8a.pfb> +Output written on carpet-publications.pdf (10 pages, 99221 bytes). +PDF statistics: + 52 PDF objects out of 1000 (max. 8388607) + 0 named destinations out of 1000 (max. 131072) + 1 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/Carpet/CarpetWeb/publications/carpet-publications.pdf b/Carpet/CarpetWeb/publications/carpet-publications.pdf Binary files differnew file mode 100644 index 000000000..216cc5bac --- /dev/null +++ b/Carpet/CarpetWeb/publications/carpet-publications.pdf diff --git a/Carpet/CarpetWeb/publications/carpet-publications.tex b/Carpet/CarpetWeb/publications/carpet-publications.tex new file mode 100644 index 000000000..f1211bdf4 --- /dev/null +++ b/Carpet/CarpetWeb/publications/carpet-publications.tex @@ -0,0 +1,81 @@ +\documentclass[11pt, tightenlines]{revtex4} + +\usepackage[english]{babel} +\usepackage[latin9]{inputenc} +\usepackage{mathpazo} +\usepackage{url} +\urlstyle{rm} + +% \textwidth = 6.5 in +% \textheight = 9.1 in +% \oddsidemargin = 0.0 in +% \evensidemargin = 0.0 in +% \topmargin = 0.0 in +% \headheight = 0.0 in +% \headsep = 0.0 in +% \parskip = 0.1in +% \parindent = 0.0in + +% Included bibliographies +\newcommand{\blurb}[2][]{\frenchspacing\item} + +\pagestyle{empty} + +\begin{document} + +{\LARGE\bf Carpet Publications} + + + +\hrulefill + +{\large\bf Background Publications and Web Pages} + +\begin{enumerate} + \input{citations-background.bibitems} + \input{citations-webpage.bibitems} +\end{enumerate} + + + +\hrulefill + +{\large\bf Publications in Refereed Journals} + +\begin{enumerate} + \input{citations-refereed.bibitems} +\end{enumerate} + + + +\hrulefill + +{\large\bf Book Chapters} + +\begin{enumerate} + \input{citations-book.bibitems} +\end{enumerate} + + + +\hrulefill + +{\large\bf Theses} + +\begin{enumerate} + \input{citations-thesis.bibitems} +\end{enumerate} + + + +\hrulefill + +{\large\bf Conference Proceedings and Technical Reports} + +\begin{enumerate} + \input{citations-report.bibitems} +\end{enumerate} + + + +\end{document} diff --git a/Carpet/CarpetWeb/publications/citations-background.aux b/Carpet/CarpetWeb/publications/citations-background.aux new file mode 100644 index 000000000..277d60c6b --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-background.aux @@ -0,0 +1,15 @@ +\relax +\citation{*} +\bibdata{citations-background} +\bibcite{carpet-goodale2002a}{{1}{2003}{{Goodale et~al.}}{{Goodale, Allen, Lanfermann, Mass{\'o}, Radke, Seidel, and Shalf}}} +\bibcite{carpet-schnetter2006a}{{2}{2006}{{Schnetter et~al.}}{{Schnetter, Diener, Dorband, and Tiglio}}} +\bibcite{carpet-schnetter2003a}{{3}{2004}{{Schnetter et~al.}}{{Schnetter, Hawley, and Hawke}}} +\global \chardef \firstnote@num3\relax +\bibstyle{apsrev-titles-manyauthors} +\select@language{english} +\@writefile{toc}{\select@language{english}} +\@writefile{lof}{\select@language{english}} +\@writefile{lot}{\select@language{english}} +\@writefile{toc}{\contentsline {section}{\numberline {}References}{1}{}} +\newlabel{LastBibItem}{{3}{1}{}{}{}} +\newlabel{LastPage}{{}{1}} diff --git a/Carpet/CarpetWeb/publications/citations-background.bbl b/Carpet/CarpetWeb/publications/citations-background.bbl new file mode 100644 index 000000000..3d946f071 --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-background.bbl @@ -0,0 +1,53 @@ +\begin{thebibliography}{3} +\expandafter\ifx\csname natexlab\endcsname\relax\def\natexlab#1{#1}\fi +\expandafter\ifx\csname bibnamefont\endcsname\relax + \def\bibnamefont#1{#1}\fi +\expandafter\ifx\csname bibfnamefont\endcsname\relax + \def\bibfnamefont#1{#1}\fi +\expandafter\ifx\csname citenamefont\endcsname\relax + \def\citenamefont#1{#1}\fi +\expandafter\ifx\csname url\endcsname\relax + \def\url#1{\texttt{#1}}\fi +\expandafter\ifx\csname urlprefix\endcsname\relax\def\urlprefix{URL }\fi +\providecommand{\bibinfo}[2]{#2} +\providecommand{\eprint}[2][]{\url{#2}} + +\bibitem[{\citenamefont{Goodale et~al.}(2003)\citenamefont{Goodale, Allen, + Lanfermann, Mass{\'o}, Radke, Seidel, and Shalf}}]{carpet-goodale2002a} +\bibinfo{author}{\bibfnamefont{T.}~\bibnamefont{Goodale}}, + \bibinfo{author}{\bibfnamefont{G.}~\bibnamefont{Allen}}, + \bibinfo{author}{\bibfnamefont{G.}~\bibnamefont{Lanfermann}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Mass{\'o}}}, + \bibinfo{author}{\bibfnamefont{T.}~\bibnamefont{Radke}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Seidel}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Shalf}}, + \emph{\bibinfo{title}{The {Cactus} framework and toolkit: Design and + applications}}, in \emph{\bibinfo{booktitle}{Vector and Parallel Processing + -- VECPAR'2002, 5th International Conference, Lecture Notes in Computer + Science}} (\bibinfo{publisher}{Springer}, \bibinfo{address}{Berlin}, + \bibinfo{year}{2003}), \urlprefix\url{http://edoc.mpg.de/3341}. + +\bibitem[{\citenamefont{Schnetter et~al.}(2006)\citenamefont{Schnetter, Diener, + Dorband, and Tiglio}}]{carpet-schnetter2006a} +\bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, + \bibinfo{author}{\bibfnamefont{E.~N.} \bibnamefont{Dorband}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Tiglio}}, + \emph{\bibinfo{title}{A multi-block infrastructure for three-dimensional + time-dependent numerical relativity}}, \bibinfo{journal}{Class. Quantum + Grav.} \textbf{\bibinfo{volume}{23}}, \bibinfo{pages}{S553} + (\bibinfo{year}{2006}), \eprint{arXiv:gr-qc/0602104}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0602104}. + +\bibitem[{\citenamefont{Schnetter et~al.}(2004)\citenamefont{Schnetter, Hawley, + and Hawke}}]{carpet-schnetter2003a} +\bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibinfo{author}{\bibfnamefont{S.~H.} \bibnamefont{Hawley}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hawke}}, + \emph{\bibinfo{title}{Evolutions in 3d numerical relativity using fixed mesh + refinement}}, \bibinfo{journal}{Class. Quantum Grav.} + \textbf{\bibinfo{volume}{21}}, \bibinfo{pages}{1465} (\bibinfo{year}{2004}), + \eprint{arXiv:gr-qc/0310042}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0310042}. + +\end{thebibliography} diff --git a/Carpet/CarpetWeb/publications/citations-background.bib b/Carpet/CarpetWeb/publications/citations-background.bib new file mode 100644 index 000000000..2b5e78ee4 --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-background.bib @@ -0,0 +1,49 @@ + +@InProceedings{ carpet-goodale2002a, + status = {background}, + author = {Tom Goodale and Gabrielle Allen and Gerd Lanfermann and + Joan Mass{\'o} and Thomas Radke and Edward Seidel and John + Shalf}, + title = {The {Cactus} Framework and Toolkit: Design and + Applications}, + booktitle = {Vector and Parallel Processing -- VECPAR'2002, 5th + International Conference, Lecture Notes in Computer + Science}, + year = 2003, + address = {Berlin}, + publisher = {Springer}, + url = {http://edoc.mpg.de/3341} +} + +@Article{ carpet-schnetter2006a, + status = {refereed background}, + author = {Erik Schnetter and Peter Diener and Ernst Nils Dorband and + Manuel Tiglio}, + title = {A multi-block infrastructure for three-dimensional + time-dependent numerical relativity}, + journal = {Class. Quantum Grav.}, + year = 2006, + volume = 23, + pages = {S553-S578}, + eprint = {arXiv:gr-qc/0602104}, + url = {http://arxiv.org/abs/gr-qc/0602104}, + receiveddate = {2006-02-20}, + oldfulltexturl= {http://stacks.iop.org/CQG/23/S553}, + doi = {10.1088/0264-9381/23/16/S14} +} + +@Article{ carpet-schnetter2003a, + status = {refereed background}, + author = {Erik Schnetter and Scott H. Hawley and Ian Hawke}, + title = {Evolutions in 3D numerical relativity using fixed mesh + refinement}, + journal = {Class. Quantum Grav.}, + year = 2004, + volume = 21, + pages = {1465-1488}, + eprint = {arXiv:gr-qc/0310042}, + url = {http://arxiv.org/abs/gr-qc/0310042}, + receiveddate = {2003-10-07}, + oldfulltexturl= {http://stacks.iop.org/CQG/21/1465}, + doi = {10.1088/0264-9381/21/6/014} +} diff --git a/Carpet/CarpetWeb/publications/citations-background.bibitems b/Carpet/CarpetWeb/publications/citations-background.bibitems new file mode 100644 index 000000000..5cbc6373a --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-background.bibitems @@ -0,0 +1,51 @@ +\expandafter\ifx\csname natexlab\endcsname\relax\def\natexlab#1{#1}\fi +\expandafter\ifx\csname bibnamefont\endcsname\relax + \def\bibnamefont#1{#1}\fi +\expandafter\ifx\csname bibfnamefont\endcsname\relax + \def\bibfnamefont#1{#1}\fi +\expandafter\ifx\csname citenamefont\endcsname\relax + \def\citenamefont#1{#1}\fi +\expandafter\ifx\csname url\endcsname\relax + \def\url#1{\texttt{#1}}\fi +\expandafter\ifx\csname urlprefix\endcsname\relax\def\urlprefix{URL }\fi +\providecommand{\bibinfo}[2]{#2} +\providecommand{\eprint}[2][]{\url{#2}} + +\blurb[{\citenamefont{Goodale et~al.}(2003)\citenamefont{Goodale, Allen, + Lanfermann, Mass{\'o}, Radke, Seidel, and Shalf}}]{carpet-goodale2002a} +\bibinfo{author}{\bibfnamefont{T.}~\bibnamefont{Goodale}}, + \bibinfo{author}{\bibfnamefont{G.}~\bibnamefont{Allen}}, + \bibinfo{author}{\bibfnamefont{G.}~\bibnamefont{Lanfermann}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Mass{\'o}}}, + \bibinfo{author}{\bibfnamefont{T.}~\bibnamefont{Radke}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Seidel}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Shalf}}, + \emph{\bibinfo{title}{The {Cactus} framework and toolkit: Design and + applications}}, in \emph{\bibinfo{booktitle}{Vector and Parallel Processing + -- VECPAR'2002, 5th International Conference, Lecture Notes in Computer + Science}} (\bibinfo{publisher}{Springer}, \bibinfo{address}{Berlin}, + \bibinfo{year}{2003}), \urlprefix\url{http://edoc.mpg.de/3341}. + +\blurb[{\citenamefont{Schnetter et~al.}(2006)\citenamefont{Schnetter, Diener, + Dorband, and Tiglio}}]{carpet-schnetter2006a} +\bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, + \bibinfo{author}{\bibfnamefont{E.~N.} \bibnamefont{Dorband}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Tiglio}}, + \emph{\bibinfo{title}{A multi-block infrastructure for three-dimensional + time-dependent numerical relativity}}, \bibinfo{journal}{Class. Quantum + Grav.} \textbf{\bibinfo{volume}{23}}, \bibinfo{pages}{S553} + (\bibinfo{year}{2006}), \eprint{arXiv:gr-qc/0602104}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0602104}. + +\blurb[{\citenamefont{Schnetter et~al.}(2004)\citenamefont{Schnetter, Hawley, + and Hawke}}]{carpet-schnetter2003a} +\bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibinfo{author}{\bibfnamefont{S.~H.} \bibnamefont{Hawley}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hawke}}, + \emph{\bibinfo{title}{Evolutions in 3d numerical relativity using fixed mesh + refinement}}, \bibinfo{journal}{Class. Quantum Grav.} + \textbf{\bibinfo{volume}{21}}, \bibinfo{pages}{1465} (\bibinfo{year}{2004}), + \eprint{arXiv:gr-qc/0310042}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0310042}. + diff --git a/Carpet/CarpetWeb/publications/citations-background.blg b/Carpet/CarpetWeb/publications/citations-background.blg new file mode 100644 index 000000000..d9f08e695 --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-background.blg @@ -0,0 +1,46 @@ +This is BibTeX, Version 0.99c (Web2C 7.5.6) +The top-level auxiliary file: citations-background.aux +The style file: apsrev-titles-manyauthors.bst +Database file #1: citations-background.bib +Reallocated wiz_functions (elt_size=4) to 6000 items from 3000. +You've used 3 entries, + 3482 wiz_defined-function locations, + 1182 strings with 10913 characters, +and the built_in function-call counts, 2785 in all, are: += -- 133 +> -- 115 +< -- 14 ++ -- 104 +- -- 28 +* -- 415 +:= -- 271 +add.period$ -- 3 +call.type$ -- 3 +change.case$ -- 15 +chr.to.int$ -- 3 +cite$ -- 3 +duplicate$ -- 255 +empty$ -- 230 +format.name$ -- 65 +if$ -- 508 +int.to.chr$ -- 1 +int.to.str$ -- 4 +missing$ -- 40 +newline$ -- 24 +num.names$ -- 9 +pop$ -- 70 +preamble$ -- 1 +purify$ -- 12 +quote$ -- 0 +skip$ -- 91 +stack$ -- 0 +substring$ -- 63 +swap$ -- 214 +text.length$ -- 14 +text.prefix$ -- 0 +top$ -- 0 +type$ -- 18 +warning$ -- 0 +while$ -- 8 +width$ -- 0 +write$ -- 51 diff --git a/Carpet/CarpetWeb/publications/citations-background.html-updated b/Carpet/CarpetWeb/publications/citations-background.html-updated new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-background.html-updated diff --git a/Carpet/CarpetWeb/publications/citations-background.log b/Carpet/CarpetWeb/publications/citations-background.log new file mode 100644 index 000000000..cf3aa7a98 --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-background.log @@ -0,0 +1,197 @@ +This is pdfTeX, Version 3.141592-1.40.3 (Web2C 7.5.6) (format=pdflatex 2009.7.3) 3 AUG 2009 22:08 +entering extended mode +**\nonstopmode \input{/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publicatio +ns/citations-background.tex} + +(/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publications/citations-backgrou +nd.tex (/opt/local/share/texmf-dist/tex/latex/revtex/revtex4.cls +Document Class: revtex4 2001/08/02 v4.0 (http://publish.aps.org/revtex4/ for do +cumentation) + Copyright (c) 2001 The American Physical Society. + mailto:revtex@aps.org + Licensed under the LPPL: +http://www.ctan.org/tex-archive/macros/latex/base/lppl.txt + Arthur Ogawa <ogawa@teleport.com> + Based on work by David Carlisle <david@dcarlisle.demon.co.uk>. +ltxutil: portions licensed from W. E. Baxter (web@superscript.com) +Class revtex4 Info: Repairing broken LateX \@sect on input line 596. +\intertabularlinepenalty=\count79 +\@tbpen=\count80 +\@arstrutbox@hline=\box26 +Class revtex4 Info: Repairing broken LaTeX \@xbitor on input line 1610. +ltxgrid: portions licensed from W. E. Baxter (web@superscript.com) +\c@linecount=\count81 +\output=\toks14 +\@protection@box=\box27 +\@topmark@saved=\toks15 +\footins@saved=\box28 +\pagesofar=\box29 +\footbox=\box30 +\pagegrid@col=\count82 +Class revtex4 Info: Incorporating package {textcase} [1998/11/12 v0.06 Text on +ly upper/lower case changing (DPC)]. on input line 3682. +(/opt/local/share/texmf-local/tex/latex/html/url.sty +Package: url 1999/03/02 ver 1.4 Verb mode for urls, email addresses, and file + names +) +\c@affil=\count83 +\absbox=\box31 +\c@part=\count84 +\c@section=\count85 +\c@subsection=\count86 +\c@subsubsection=\count87 +\c@paragraph=\count88 +\c@subparagraph=\count89 +\abovecaptionskip=\skip41 +\belowcaptionskip=\skip42 +\c@figure=\count90 +\c@table=\count91 + +(/opt/local/share/texmf-dist/tex/latex/natbib/natbib.sty +Package: natbib 2007/02/05 8.0 (PWD) +\bibhang=\skip43 +\bibsep=\skip44 +LaTeX Info: Redefining \cite on input line 602. +\c@NAT@ctr=\count92 +) +\widetext@top=\box32 +\widetext@bot=\box33 + +(/opt/local/share/texmf-dist/tex/latex/revtex/revsymb.sty +Package: revsymb 2001/08/02 v4.0 (http://publish.aps.org/revtex4/ for documenta +tion) +LaTeX Info: Redefining \REV@mathfrak on input line 118. +)) + +Class revtex4 Warning: No Society specified, using generic APS style. + +(/opt/local/share/texmf-dist/tex/latex/revtex/aps.rtx +File: aps.rtx 2001/08/02 v4.0 (http://publish.aps.org/revtex4/ for documentatio +n) +) +(/opt/local/share/texmf-dist/tex/latex/revtex/10pt.rtx +File: 10pt.rtx 2001/08/02 v4.0 (http://publish.aps.org/revtex4/ for documentati +on) +) +(/opt/local/share/texmf-dist/tex/generic/babel/babel.sty +Package: babel 2005/11/23 v3.8h The Babel package + +(/opt/local/share/texmf-dist/tex/generic/babel/english.ldf +Language: english 2005/03/30 v3.3o English support from the babel system + +(/opt/local/share/texmf-dist/tex/generic/babel/babel.def +File: babel.def 2005/11/23 v3.8h Babel common definitions +\babel@savecnt=\count93 +\U@D=\dimen102 +) +\l@british = a dialect from \language\l@english +\l@UKenglish = a dialect from \language\l@english +\l@canadian = a dialect from \language\l@american +\l@australian = a dialect from \language\l@british +\l@newzealand = a dialect from \language\l@british +)) +(/opt/local/share/texmf-dist/tex/latex/base/fontenc.sty +Package: fontenc 2005/09/27 v1.99g Standard LaTeX package + +(/opt/local/share/texmf-dist/tex/latex/base/t1enc.def +File: t1enc.def 2005/09/27 v1.99g Standard LaTeX file +LaTeX Font Info: Redeclaring font encoding T1 on input line 43. +)) +(/opt/local/share/texmf-dist/tex/latex/base/inputenc.sty +Package: inputenc 2006/05/05 v1.1b Input encoding file +\inpenc@prehook=\toks16 +\inpenc@posthook=\toks17 + +(/opt/local/share/texmf-local/tex/latex/html/latin9.def +File: latin1.def 1998/03/05 v0.97 Input encoding file(test version: still liabl +e to change) +)) +(/opt/local/share/texmf-dist/tex/latex/psnfss/mathpazo.sty +Package: mathpazo 2005/04/12 PSNFSS-v9.2a Palatino w/ Pazo Math (D.Puga, WaS) +\symupright=\mathgroup4 +) +(/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publications/citations-backgrou +nd.aux) +\openout1 = `citations-background.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Try loading font information for T1+ppl on input line 8. + (/opt/local/share/texmf-dist/tex/latex/psnfss/t1ppl.fd +File: t1ppl.fd 2001/06/04 font definitions for T1/ppl. +) +Class revtex4 Info: Patching LaTeX tabular. on input line 8. +Class revtex4 Info: cite was not loaded (OK!) on input line 8. +Class revtex4 Info: multicol was not loaded (OK!) on input line 8. +\big@size=\dimen103 + +(/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publications/citations-backgrou +nd.bbl +LaTeX Font Info: Try loading font information for T1+cmtt on input line 28. + (/opt/local/share/texmf-dist/tex/latex/base/t1cmtt.fd +File: t1cmtt.fd 1999/05/25 v2.5h Standard LaTeX font definitions +) +LaTeX Font Info: Try loading font information for OT1+ppl on input line 28. + +(/opt/local/share/texmf-dist/tex/latex/psnfss/ot1ppl.fd +File: ot1ppl.fd 2001/06/04 font definitions for OT1/ppl. +) +LaTeX Font Info: Try loading font information for OML+zplm on input line 28. + + +(/opt/local/share/texmf-dist/tex/latex/psnfss/omlzplm.fd +File: omlzplm.fd 2002/09/08 Fontinst v1.914 font definitions for OML/zplm. +) +LaTeX Font Info: Try loading font information for OMS+zplm on input line 28. + + +(/opt/local/share/texmf-dist/tex/latex/psnfss/omszplm.fd +File: omszplm.fd 2002/09/08 Fontinst v1.914 font definitions for OMS/zplm. +) +LaTeX Font Info: Try loading font information for OMX+zplm on input line 28. + + +(/opt/local/share/texmf-dist/tex/latex/psnfss/omxzplm.fd +File: omxzplm.fd 2002/09/08 Fontinst v1.914 font definitions for OMX/zplm. +) +LaTeX Font Info: Try loading font information for OT1+zplm on input line 28. + + +(/opt/local/share/texmf-dist/tex/latex/psnfss/ot1zplm.fd +File: ot1zplm.fd 2002/09/08 Fontinst v1.914 font definitions for OT1/zplm. +) +LaTeX Font Info: Font shape `T1/ppl/bx/n' in size <9> not available +(Font) Font shape `T1/ppl/b/n' tried instead on input line 38. +) [1{/opt/local/share/texmf/fonts/map/pdftex/updmap/pdftex.map}] +(/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publications/citations-backgrou +nd.aux) ) +Here is how much of TeX's memory you used: + 2449 strings out of 94073 + 30383 string characters out of 1164798 + 86906 words of memory out of 1500000 + 5739 multiletter control sequences out of 10000+50000 + 16600 words of font info for 39 fonts, out of 1200000 for 2000 + 645 hyphenation exceptions out of 8191 + 26i,4n,21p,334b,263s stack positions out of 5000i,500n,6000p,200000b,5000s +{/opt/local/share/texmf-dist/fonts/enc/dvips/base/8r.enc}{/opt/local/s +hare/texmf-dist/fonts/enc/dvips/cm-super/cm-super-t1.enc}</opt/local/share/texm +f-dist/fonts/type1/public/cm-super/sftt0900.pfb></opt/local/share/texmf-dist/fo +nts/type1/urw/palatino/uplb8a.pfb></opt/local/share/texmf-dist/fonts/type1/urw/ +palatino/uplr8a.pfb></opt/local/share/texmf-dist/fonts/type1/urw/palatino/uplri +8a.pfb> +Output written on citations-background.pdf (1 page, 81385 bytes). +PDF statistics: + 24 PDF objects out of 1000 (max. 8388607) + 0 named destinations out of 1000 (max. 131072) + 1 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/Carpet/CarpetWeb/publications/citations-background.pdf b/Carpet/CarpetWeb/publications/citations-background.pdf Binary files differnew file mode 100644 index 000000000..9dee86b29 --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-background.pdf diff --git a/Carpet/CarpetWeb/publications/citations-background.tex b/Carpet/CarpetWeb/publications/citations-background.tex new file mode 100644 index 000000000..bfc18cba4 --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-background.tex @@ -0,0 +1,15 @@ +\documentclass{revtex4} + +\usepackage[english]{babel} +\usepackage[T1]{fontenc} +\usepackage[latin9]{inputenc} +\usepackage{mathpazo} + +\begin{document} + +\nocite{*} + +\bibliographystyle{apsrev-titles-manyauthors} +\bibliography{citations-background} + +\end{document} diff --git a/Carpet/CarpetWeb/publications/citations-book.aux b/Carpet/CarpetWeb/publications/citations-book.aux new file mode 100644 index 000000000..1b47498d6 --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-book.aux @@ -0,0 +1,13 @@ +\relax +\citation{*} +\bibdata{citations-book} +\bibcite{carpet-schnetter2007a}{{1}{2007}{{Schnetter et~al.}}{{Schnetter, Ott, Allen, Diener, Goodale, Radke, Seidel, and Shalf}}} +\global \chardef \firstnote@num1\relax +\bibstyle{apsrev-titles-manyauthors} +\select@language{english} +\@writefile{toc}{\select@language{english}} +\@writefile{lof}{\select@language{english}} +\@writefile{lot}{\select@language{english}} +\@writefile{toc}{\contentsline {section}{\numberline {}References}{1}{}} +\newlabel{LastBibItem}{{1}{1}{}{}{}} +\newlabel{LastPage}{{}{1}} diff --git a/Carpet/CarpetWeb/publications/citations-book.bbl b/Carpet/CarpetWeb/publications/citations-book.bbl new file mode 100644 index 000000000..6c885f04f --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-book.bbl @@ -0,0 +1,34 @@ +\begin{thebibliography}{1} +\expandafter\ifx\csname natexlab\endcsname\relax\def\natexlab#1{#1}\fi +\expandafter\ifx\csname bibnamefont\endcsname\relax + \def\bibnamefont#1{#1}\fi +\expandafter\ifx\csname bibfnamefont\endcsname\relax + \def\bibfnamefont#1{#1}\fi +\expandafter\ifx\csname citenamefont\endcsname\relax + \def\citenamefont#1{#1}\fi +\expandafter\ifx\csname url\endcsname\relax + \def\url#1{\texttt{#1}}\fi +\expandafter\ifx\csname urlprefix\endcsname\relax\def\urlprefix{URL }\fi +\providecommand{\bibinfo}[2]{#2} +\providecommand{\eprint}[2][]{\url{#2}} + +\bibitem[{\citenamefont{Schnetter et~al.}(2007)\citenamefont{Schnetter, Ott, + Allen, Diener, Goodale, Radke, Seidel, and Shalf}}]{carpet-schnetter2007a} +\bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibinfo{author}{\bibfnamefont{C.~D.} \bibnamefont{Ott}}, + \bibinfo{author}{\bibfnamefont{G.}~\bibnamefont{Allen}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, + \bibinfo{author}{\bibfnamefont{T.}~\bibnamefont{Goodale}}, + \bibinfo{author}{\bibfnamefont{T.}~\bibnamefont{Radke}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Seidel}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Shalf}}, + \emph{\bibinfo{title}{{Cactus} {Framework}: Black holes to gamma ray + bursts}}, in \emph{\bibinfo{booktitle}{Petascale Computing: Algorithms and + Applications}}, edited by \bibinfo{editor}{\bibfnamefont{D.~A.} + \bibnamefont{Bader}} (\bibinfo{publisher}{Chapman \& Hall/CRC}, + \bibinfo{year}{2007}), Computational Science Series, + chap.~\bibinfo{chapter}{24}, pp. \bibinfo{pages}{507--528}, ISBN + \bibinfo{isbn}{9781584889090}, \eprint{arXiv:0707.1607 [cs.DC]}, + \urlprefix\url{http://arxiv.org/abs/0707.1607}. + +\end{thebibliography} diff --git a/Carpet/CarpetWeb/publications/citations-book.bib b/Carpet/CarpetWeb/publications/citations-book.bib new file mode 100644 index 000000000..f29fc0c4f --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-book.bib @@ -0,0 +1,19 @@ + +@InCollection{ carpet-schnetter2007a, + status = {book}, + author = {Erik Schnetter and Christian D. Ott and Gabrielle Allen + and Peter Diener and Tom Goodale and Thomas Radke and + Edward Seidel and John Shalf}, + title = {{Cactus} {Framework}: Black Holes to Gamma Ray Bursts}, + booktitle = {Petascale Computing: Algorithms and Applications}, + pages = {507-528}, + publisher = {Chapman \& Hall/CRC}, + year = 2007, + editor = {David A. Bader}, + series = {Computational Science Series}, + chapter = 24, + eprint = {arXiv:0707.1607 [cs.DC]}, + url = {http://arxiv.org/abs/0707.1607}, + receiveddate = {2007-07-11}, + isbn = 9781584889090 +} diff --git a/Carpet/CarpetWeb/publications/citations-book.bibitems b/Carpet/CarpetWeb/publications/citations-book.bibitems new file mode 100644 index 000000000..b8c37e24a --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-book.bibitems @@ -0,0 +1,32 @@ +\expandafter\ifx\csname natexlab\endcsname\relax\def\natexlab#1{#1}\fi +\expandafter\ifx\csname bibnamefont\endcsname\relax + \def\bibnamefont#1{#1}\fi +\expandafter\ifx\csname bibfnamefont\endcsname\relax + \def\bibfnamefont#1{#1}\fi +\expandafter\ifx\csname citenamefont\endcsname\relax + \def\citenamefont#1{#1}\fi +\expandafter\ifx\csname url\endcsname\relax + \def\url#1{\texttt{#1}}\fi +\expandafter\ifx\csname urlprefix\endcsname\relax\def\urlprefix{URL }\fi +\providecommand{\bibinfo}[2]{#2} +\providecommand{\eprint}[2][]{\url{#2}} + +\blurb[{\citenamefont{Schnetter et~al.}(2007)\citenamefont{Schnetter, Ott, + Allen, Diener, Goodale, Radke, Seidel, and Shalf}}]{carpet-schnetter2007a} +\bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibinfo{author}{\bibfnamefont{C.~D.} \bibnamefont{Ott}}, + \bibinfo{author}{\bibfnamefont{G.}~\bibnamefont{Allen}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, + \bibinfo{author}{\bibfnamefont{T.}~\bibnamefont{Goodale}}, + \bibinfo{author}{\bibfnamefont{T.}~\bibnamefont{Radke}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Seidel}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Shalf}}, + \emph{\bibinfo{title}{{Cactus} {Framework}: Black holes to gamma ray + bursts}}, in \emph{\bibinfo{booktitle}{Petascale Computing: Algorithms and + Applications}}, edited by \bibinfo{editor}{\bibfnamefont{D.~A.} + \bibnamefont{Bader}} (\bibinfo{publisher}{Chapman \& Hall/CRC}, + \bibinfo{year}{2007}), Computational Science Series, + chap.~\bibinfo{chapter}{24}, pp. \bibinfo{pages}{507--528}, ISBN + \bibinfo{isbn}{9781584889090}, \eprint{arXiv:0707.1607 [cs.DC]}, + \urlprefix\url{http://arxiv.org/abs/0707.1607}. + diff --git a/Carpet/CarpetWeb/publications/citations-book.blg b/Carpet/CarpetWeb/publications/citations-book.blg new file mode 100644 index 000000000..1b141dfaf --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-book.blg @@ -0,0 +1,46 @@ +This is BibTeX, Version 0.99c (Web2C 7.5.6) +The top-level auxiliary file: citations-book.aux +The style file: apsrev-titles-manyauthors.bst +Database file #1: citations-book.bib +Reallocated wiz_functions (elt_size=4) to 6000 items from 3000. +You've used 1 entry, + 3482 wiz_defined-function locations, + 1170 strings with 10483 characters, +and the built_in function-call counts, 1511 in all, are: += -- 69 +> -- 68 +< -- 11 ++ -- 61 +- -- 17 +* -- 230 +:= -- 137 +add.period$ -- 1 +call.type$ -- 1 +change.case$ -- 5 +chr.to.int$ -- 1 +cite$ -- 1 +duplicate$ -- 131 +empty$ -- 120 +format.name$ -- 38 +if$ -- 278 +int.to.chr$ -- 1 +int.to.str$ -- 2 +missing$ -- 18 +newline$ -- 18 +num.names$ -- 4 +pop$ -- 24 +preamble$ -- 1 +purify$ -- 4 +quote$ -- 0 +skip$ -- 53 +stack$ -- 0 +substring$ -- 39 +swap$ -- 127 +text.length$ -- 11 +text.prefix$ -- 0 +top$ -- 0 +type$ -- 6 +warning$ -- 0 +while$ -- 5 +width$ -- 0 +write$ -- 29 diff --git a/Carpet/CarpetWeb/publications/citations-book.html-updated b/Carpet/CarpetWeb/publications/citations-book.html-updated new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-book.html-updated diff --git a/Carpet/CarpetWeb/publications/citations-book.log b/Carpet/CarpetWeb/publications/citations-book.log new file mode 100644 index 000000000..45c61692f --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-book.log @@ -0,0 +1,192 @@ +This is pdfTeX, Version 3.141592-1.40.3 (Web2C 7.5.6) (format=pdflatex 2009.7.3) 3 AUG 2009 22:08 +entering extended mode +**\nonstopmode \input{/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publicatio +ns/citations-book.tex} + +(/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publications/citations-book.tex +(/opt/local/share/texmf-dist/tex/latex/revtex/revtex4.cls +Document Class: revtex4 2001/08/02 v4.0 (http://publish.aps.org/revtex4/ for do +cumentation) + Copyright (c) 2001 The American Physical Society. + mailto:revtex@aps.org + Licensed under the LPPL: +http://www.ctan.org/tex-archive/macros/latex/base/lppl.txt + Arthur Ogawa <ogawa@teleport.com> + Based on work by David Carlisle <david@dcarlisle.demon.co.uk>. +ltxutil: portions licensed from W. E. Baxter (web@superscript.com) +Class revtex4 Info: Repairing broken LateX \@sect on input line 596. +\intertabularlinepenalty=\count79 +\@tbpen=\count80 +\@arstrutbox@hline=\box26 +Class revtex4 Info: Repairing broken LaTeX \@xbitor on input line 1610. +ltxgrid: portions licensed from W. E. Baxter (web@superscript.com) +\c@linecount=\count81 +\output=\toks14 +\@protection@box=\box27 +\@topmark@saved=\toks15 +\footins@saved=\box28 +\pagesofar=\box29 +\footbox=\box30 +\pagegrid@col=\count82 +Class revtex4 Info: Incorporating package {textcase} [1998/11/12 v0.06 Text on +ly upper/lower case changing (DPC)]. on input line 3682. +(/opt/local/share/texmf-local/tex/latex/html/url.sty +Package: url 1999/03/02 ver 1.4 Verb mode for urls, email addresses, and file + names +) +\c@affil=\count83 +\absbox=\box31 +\c@part=\count84 +\c@section=\count85 +\c@subsection=\count86 +\c@subsubsection=\count87 +\c@paragraph=\count88 +\c@subparagraph=\count89 +\abovecaptionskip=\skip41 +\belowcaptionskip=\skip42 +\c@figure=\count90 +\c@table=\count91 + +(/opt/local/share/texmf-dist/tex/latex/natbib/natbib.sty +Package: natbib 2007/02/05 8.0 (PWD) +\bibhang=\skip43 +\bibsep=\skip44 +LaTeX Info: Redefining \cite on input line 602. +\c@NAT@ctr=\count92 +) +\widetext@top=\box32 +\widetext@bot=\box33 + +(/opt/local/share/texmf-dist/tex/latex/revtex/revsymb.sty +Package: revsymb 2001/08/02 v4.0 (http://publish.aps.org/revtex4/ for documenta +tion) +LaTeX Info: Redefining \REV@mathfrak on input line 118. +)) + +Class revtex4 Warning: No Society specified, using generic APS style. + +(/opt/local/share/texmf-dist/tex/latex/revtex/aps.rtx +File: aps.rtx 2001/08/02 v4.0 (http://publish.aps.org/revtex4/ for documentatio +n) +) +(/opt/local/share/texmf-dist/tex/latex/revtex/10pt.rtx +File: 10pt.rtx 2001/08/02 v4.0 (http://publish.aps.org/revtex4/ for documentati +on) +) +(/opt/local/share/texmf-dist/tex/generic/babel/babel.sty +Package: babel 2005/11/23 v3.8h The Babel package + +(/opt/local/share/texmf-dist/tex/generic/babel/english.ldf +Language: english 2005/03/30 v3.3o English support from the babel system + +(/opt/local/share/texmf-dist/tex/generic/babel/babel.def +File: babel.def 2005/11/23 v3.8h Babel common definitions +\babel@savecnt=\count93 +\U@D=\dimen102 +) +\l@british = a dialect from \language\l@english +\l@UKenglish = a dialect from \language\l@english +\l@canadian = a dialect from \language\l@american +\l@australian = a dialect from \language\l@british +\l@newzealand = a dialect from \language\l@british +)) +(/opt/local/share/texmf-dist/tex/latex/base/fontenc.sty +Package: fontenc 2005/09/27 v1.99g Standard LaTeX package + +(/opt/local/share/texmf-dist/tex/latex/base/t1enc.def +File: t1enc.def 2005/09/27 v1.99g Standard LaTeX file +LaTeX Font Info: Redeclaring font encoding T1 on input line 43. +)) +(/opt/local/share/texmf-dist/tex/latex/base/inputenc.sty +Package: inputenc 2006/05/05 v1.1b Input encoding file +\inpenc@prehook=\toks16 +\inpenc@posthook=\toks17 + +(/opt/local/share/texmf-local/tex/latex/html/latin9.def +File: latin1.def 1998/03/05 v0.97 Input encoding file(test version: still liabl +e to change) +)) +(/opt/local/share/texmf-dist/tex/latex/psnfss/mathpazo.sty +Package: mathpazo 2005/04/12 PSNFSS-v9.2a Palatino w/ Pazo Math (D.Puga, WaS) +\symupright=\mathgroup4 +) +(/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publications/citations-book.aux +) +\openout1 = `citations-book.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Try loading font information for T1+ppl on input line 8. + (/opt/local/share/texmf-dist/tex/latex/psnfss/t1ppl.fd +File: t1ppl.fd 2001/06/04 font definitions for T1/ppl. +) +Class revtex4 Info: Patching LaTeX tabular. on input line 8. +Class revtex4 Info: cite was not loaded (OK!) on input line 8. +Class revtex4 Info: multicol was not loaded (OK!) on input line 8. +\big@size=\dimen103 + +(/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publications/citations-book.bbl +LaTeX Font Info: Try loading font information for T1+cmtt on input line 32. +(/opt/local/share/texmf-dist/tex/latex/base/t1cmtt.fd +File: t1cmtt.fd 1999/05/25 v2.5h Standard LaTeX font definitions +) +LaTeX Font Info: Try loading font information for OT1+ppl on input line 32. + +(/opt/local/share/texmf-dist/tex/latex/psnfss/ot1ppl.fd +File: ot1ppl.fd 2001/06/04 font definitions for OT1/ppl. +) +LaTeX Font Info: Try loading font information for OML+zplm on input line 32. + + +(/opt/local/share/texmf-dist/tex/latex/psnfss/omlzplm.fd +File: omlzplm.fd 2002/09/08 Fontinst v1.914 font definitions for OML/zplm. +) +LaTeX Font Info: Try loading font information for OMS+zplm on input line 32. + + +(/opt/local/share/texmf-dist/tex/latex/psnfss/omszplm.fd +File: omszplm.fd 2002/09/08 Fontinst v1.914 font definitions for OMS/zplm. +) +LaTeX Font Info: Try loading font information for OMX+zplm on input line 32. + + +(/opt/local/share/texmf-dist/tex/latex/psnfss/omxzplm.fd +File: omxzplm.fd 2002/09/08 Fontinst v1.914 font definitions for OMX/zplm. +) +LaTeX Font Info: Try loading font information for OT1+zplm on input line 32. + + +(/opt/local/share/texmf-dist/tex/latex/psnfss/ot1zplm.fd +File: ot1zplm.fd 2002/09/08 Fontinst v1.914 font definitions for OT1/zplm. +)) [1{/opt/local/share/texmf/fonts/map/pdftex/updmap/pdftex.map}] +(/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publications/citations-book.aux +) ) +Here is how much of TeX's memory you used: + 2443 strings out of 94073 + 30236 string characters out of 1164798 + 85894 words of memory out of 1500000 + 5735 multiletter control sequences out of 10000+50000 + 15151 words of font info for 37 fonts, out of 1200000 for 2000 + 645 hyphenation exceptions out of 8191 + 26i,4n,21p,306b,259s stack positions out of 5000i,500n,6000p,200000b,5000s +{/opt/local/share/texmf-dist/fonts/enc/dvips/cm-super/cm-super-t1.enc}{/opt/ +local/share/texmf-dist/fonts/enc/dvips/base/8r.enc}</opt/local/share/texmf-dist +/fonts/type1/public/cm-super/sftt0900.pfb></opt/local/share/texmf-dist/fonts/ty +pe1/urw/palatino/uplr8a.pfb></opt/local/share/texmf-dist/fonts/type1/urw/palati +no/uplri8a.pfb> +Output written on citations-book.pdf (1 page, 65000 bytes). +PDF statistics: + 20 PDF objects out of 1000 (max. 8388607) + 0 named destinations out of 1000 (max. 131072) + 1 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/Carpet/CarpetWeb/publications/citations-book.pdf b/Carpet/CarpetWeb/publications/citations-book.pdf Binary files differnew file mode 100644 index 000000000..c7c9a8f72 --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-book.pdf diff --git a/Carpet/CarpetWeb/publications/citations-book.tex b/Carpet/CarpetWeb/publications/citations-book.tex new file mode 100644 index 000000000..818709ccd --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-book.tex @@ -0,0 +1,15 @@ +\documentclass{revtex4} + +\usepackage[english]{babel} +\usepackage[T1]{fontenc} +\usepackage[latin9]{inputenc} +\usepackage{mathpazo} + +\begin{document} + +\nocite{*} + +\bibliographystyle{apsrev-titles-manyauthors} +\bibliography{citations-book} + +\end{document} diff --git a/Carpet/CarpetWeb/publications/citations-refereed.aux b/Carpet/CarpetWeb/publications/citations-refereed.aux new file mode 100644 index 000000000..02df98353 --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-refereed.aux @@ -0,0 +1,87 @@ +\relax +\citation{*} +\bibdata{citations-refereed} +\bibcite{carpet-cadonati2009a}{{1}{2009{}}{{Aylott et~al.}}{{Aylott, Baker, Boggs, Boyle, Brady, Brown, Br{\"u}gmann, Buchman, Buonanno, Cadonati, Camp, Campanelli, Centrella, Chatterji, Christensen, Chu, Diener, Dorband, Etienne, Faber, Fairhurst, Farr, Fischetti, Guidi, Goggin, Hannam, Herrmann, Hinder, Husa, Kalogera, Keppel, Kidder, Kelly, Krishnan, Laguna, Lousto, Mandel, Marronetti, Matzner, McWilliams, Matthews, Mercer, Mohapatra, Mrou{\'e}, Nakano, Ochsner, Pan, Pekowsky, Pfeiffer, Pollney, Pretorius, Raymond, Reisswig, Rezzolla, Rinne, Robinson, R{\"o}ver, Santamar{\'i}a, Sathyaprakash, Scheel, Schnetter, Seiler, Shapiro, Shoemaker, Sperhake, Stroeer, Sturani, Tichy, Liu, van~der Sluys, van Meter, Vaulin, Vecchio, Veitch, Vicer{\'e}, Whelan, and Zlochower}}} +\bibcite{carpet-baiotti2009a}{{2}{2009{}}{{Baiotti et~al.}}{{Baiotti, Giacomazzo, and Rezzolla}}} +\bibcite{carpet-aylott2009a}{{3}{2009{}}{{Aylott et~al.}}{{Aylott, Baker, Boggs, Boyle, Brady, Brown, Br{\"u}gmann, Buchman, Buonanno, Cadonati, Camp, Campanelli, Centrella, Chatterji, Christensen, Chu, Diener, Dorband, Etienne, Faber, Fairhurst, Farr, Fischetti, Guidi, Goggin, Hannam, Herrmann, Hinder, Husa, Kalogera, Keppel, Kidder, Kelly, Krishnan, Laguna, Lousto, Mandel, Marronetti, Matzner, McWilliams, Matthews, Mercer, Mohapatra, Mrou{\'e}, Nakano, Ochsner, Pan, Pekowsky, Pfeiffer, Pollney, Pretorius, Raymond, Reisswig, Rezzolla, Rinne, Robinson, R{\"o}ver, Santamar{\'i}a, Sathyaprakash, Scheel, Schnetter, Seiler, Shapiro, Shoemaker, Sperhake, Stroeer, Sturani, Tichy, Liu, van~der Sluys, van Meter, Vaulin, Vecchio, Veitch, Vicer{\'e}, Whelan, and Zlochower}}} +\bibcite{carpetresult-hannam2008a}{{4}{2009}{{Hannam et~al.}}{{Hannam, Husa, Baker, Boyle, Br{\"u}gmann, Chu, Dorband, Herrmann, Hinder, Kelly, Kidder, Laguna, Matthews, {van Meter}, Pfeiffer, Pollney, Reisswig, Scheel, and Shoemaker}}} +\bibcite{carpet-rezzolla2008a}{{5}{2009}{{Rezzolla}}{{}}} +\bibcite{carpet-etienne2008a}{{6}{2009}{{Etienne et~al.}}{{Etienne, Liu, Shapiro, , and Baumgarte}}} +\bibcite{carpet-campanelli2008b}{{7}{2009{}}{{Campanelli et~al.}}{{Campanelli, Lousto, and Zlochower}}} +\bibcite{carpet-korobkin2008a}{{8}{2009}{{Korobkin et~al.}}{{Korobkin, Aksoylu, Holst, Pazos, and Tiglio}}} +\bibcite{carpet-brown2007b}{{9}{2009}{{Brown et~al.}}{{Brown, Diener, Sarbach, Schnetter, and Tiglio}}} +\bibcite{carpet-baiotti2008b}{{10}{2009{}}{{Baiotti et~al.}}{{Baiotti, Bernuzzi, Corvino, Pietri, and Nagar}}} +\bibcite{carpet-campanelli2008a}{{11}{2009{}}{{Campanelli et~al.}}{{Campanelli, Lousto, Nakano, and Zlochower}}} +\bibcite{carpet-healy2008a}{{12}{2009}{{Healy et~al.}}{{Healy, Herrmann, Hinder, Shoemaker, Laguna, , and Matzner}}} +\bibcite{carpet-sperhake2008a}{{13}{2008{}}{{Sperhake et~al.}}{{Sperhake, Cardoso, Pretorius, Berti, , and Gonz{\'a}lez}}} +\bibcite{carpet-gualtieri2008a}{{14}{2008}{{Gualtieri et~al.}}{{Gualtieri, Berti, Cardoso, and Sperhake}}} +\bibcite{carpet-lousto2008a}{{15}{2009}{{Lousto and Zlochower}}{{}}} +\bibcite{carpetresult-benger2007a}{{16}{2008}{{Benger}}{{}}} +\bibcite{carpet-baiotti2008a}{{17}{2008}{{Baiotti et~al.}}{{Baiotti, Giacomazzo, and Rezzolla}}} +\bibcite{carpet-dain2008a}{{18}{2008}{{Dain et~al.}}{{Dain, Lousto, , and Zlochower}}} +\bibcite{carpet-seiler2008a}{{19}{2008}{{Seiler et~al.}}{{Seiler, Szil{\'a}gyi, Pollney, and Rezzolla}}} +\bibcite{carpet-washik2008a}{{20}{2008}{{Washik et~al.}}{{Washik, Healy, Herrmann, Hinder, Shoemaker, Laguna, and Matzner}}} +\bibcite{carpet-bentivegna2008a}{{21}{2008}{{Bentivegna et~al.}}{{Bentivegna, Shoemaker, Hinder, , and Herrmann}}} +\select@language{english} +\@writefile{toc}{\select@language{english}} +\@writefile{lof}{\select@language{english}} +\@writefile{lot}{\select@language{english}} +\@writefile{toc}{\contentsline {section}{\numberline {}References}{1}{}} +\bibcite{carpet-rezzolla2007c}{{22}{2008{}}{{Rezzolla et~al.}}{{Rezzolla, Barausse, Dorband, Pollney, Reisswig, Seiler, and Husa}}} +\bibcite{carpet-damour2007a}{{23}{2008}{{Damour et~al.}}{{Damour, Nagar, Dorband, Pollney, and Rezzolla}}} +\bibcite{carpet-shoemaker2007a}{{24}{2008}{{Shoemaker et~al.}}{{Shoemaker, Vaishnav, Hinder, and Herrmann}}} +\bibcite{carpet-zink2007a}{{25}{2008}{{Zink et~al.}}{{Zink, Schnetter, and Tiglio}}} +\bibcite{carpet-berti2007a}{{26}{2008}{{Berti et~al.}}{{Berti, Cardoso, Gonz{\'a}lez, Sperhake, and Br{\"u}gmann}}} +\bibcite{carpet-bode2007a}{{27}{2008}{{Bode et~al.}}{{Bode, Shoemaker, Herrmann, and Hinder}}} +\bibcite{carpet-hinder2007a}{{28}{2008}{{Hinder et~al.}}{{Hinder, Vaishnav, Herrmann, Shoemaker, and Laguna}}} +\bibcite{carpetresult-boyle2007a}{{29}{2008}{{Boyle et~al.}}{{Boyle, Kesden, and Nissanke}}} +\bibcite{carpet-sperhake2007a}{{30}{2008{}}{{Sperhake et~al.}}{{Sperhake, Berti, Cardoso, Gonz{\'a}lez, Br{\"u}gmann, and Ansorg}}} +\bibcite{carpet-rezzolla2007b}{{31}{2008{}}{{Rezzolla et~al.}}{{Rezzolla, Diener, Dorband, Pollney, Reisswig, Schnetter, and Seiler}}} +\bibcite{carpet-ajith2007b}{{32}{2008}{{Ajith et~al.}}{{Ajith, Babak, Chen, Hewitson, Krishnan, Sintes, Whelan, Br{\"u}gmann, Diener, Dorband, Gonz{\'a}lez, Hannam, Husa, Pollney, Rezzolla, Santamar{\'i}a, Sperhake, and Thornburg}}} +\bibcite{carpet-campanelli2007c}{{33}{2008}{{Campanelli et~al.}}{{Campanelli, Lousto, and Zlochower}}} +\bibcite{carpetresult-buonanno2007a}{{34}{2008}{{Buonanno et~al.}}{{Buonanno, Kidder, and Lehner}}} +\bibcite{carpet-stark2007a}{{35}{2008}{{Stark et~al.}}{{Stark, Allen, Goodale, Radke, and Schnetter}}} +\bibcite{carpet-pollney207a}{{36}{2007}{{Pollney et~al.}}{{Pollney, Reisswig, Rezzolla, Szil{\'a}gyi, Ansorg, Deris, Diener, Dorband, Koppitz, Nagar, and Schnetter}}} +\bibcite{carpet-lousto2007a}{{37}{2008}{{Lousto and Zlochower}}{{}}} +\bibcite{carpet-rezzolla2007a}{{38}{2008{}}{{Rezzolla et~al.}}{{Rezzolla, Dorband, Reisswig, Diener, Pollney, Schnetter, and Szil{\'s}gyi}}} +\bibcite{carpet-bruegmann2007a}{{39}{2008{}}{{Br{\"u}gmann et~al.}}{{Br{\"u}gmann, Gonz{\'a}lez, Hannam, Husa, and Sperhake}}} +\bibcite{carpet-brown2007a}{{40}{2007}{{Brown et~al.}}{{Brown, Sarbach, Schnetter, Tiglio, Diener, Hawke, and Pollney}}} +\bibcite{carpet-krishnan2007a}{{41}{2007}{{Krishnan et~al.}}{{Krishnan, Lousto, and Zlochower}}} +\bibcite{carpet-herrmann2007c}{{42}{2007{}}{{Herrmann et~al.}}{{Herrmann, Hinder, Shoemaker, Laguna, and Matzner}}} +\bibcite{carpet-vaishnav2007a}{{43}{2007}{{Vaishnav et~al.}}{{Vaishnav, Hinder, Herrmann, and Shoemaker}}} +\bibcite{carpet-ajith2007a}{{44}{2007}{{Ajith et~al.}}{{Ajith, Babak, Chen, Hewitson, Krishnan, Whelan, Br{\"u}gmann, Diener, Gonz\~A\IeC {\textexclamdown }lez, Hannam, Husa, Koppitz, Pollney, Rezzolla, Santamar{\'i}a, Sintes, Sperhake, and Thornburg}}} +\bibcite{carpet-thornburg2007a}{{45}{2007}{{Thornburg et~al.}}{{Thornburg, Diener, Pollney, Rezzolla, Schnetter, Seidel, and Takahashi}}} +\bibcite{carpet-gonzalez2007a}{{46}{2007}{{Gonz{\'a}lez et~al.}}{{Gonz{\'a}lez, Hannam, Sperhake, Br{\"u}gmann, and Husa}}} +\bibcite{carpet-campanelli2007b}{{47}{2007{}}{{Campanelli et~al.}}{{Campanelli, Lousto, Zlochower, and Merritt}}} +\bibcite{carpet-campanelli2007a}{{48}{2007{}}{{Campanelli et~al.}}{{Campanelli, Lousto, Zlochower, and Merritt}}} +\bibcite{carpet-herrmann2007b}{{49}{2007{}}{{Herrmann et~al.}}{{Herrmann, Hinder, Shoemaker, Laguna, and Matzner}}} +\bibcite{carpet-koppitz2007a}{{50}{2007}{{Koppitz et~al.}}{{Koppitz, Pollney, Reisswig, Rezzolla, Thornburg, Diener, and Schnetter}}} +\bibcite{carpet-marronetti2007a}{{51}{2007}{{Marronetti et~al.}}{{Marronetti, Tichy, Br{\"u}gmann, Gonz{\'a}lez, Hannam, Husa, and Sperhake}}} +\bibcite{carpet-giacomazzo2007a}{{52}{2007}{{Giacomazzo and Rezzolla}}{{}}} +\bibcite{carpet-herrmann2007a}{{53}{2007{}}{{Herrmann et~al.}}{{Herrmann, Hinder, Shoemaker, and Laguna}}} +\bibcite{carpet-baker2006a}{{54}{2007}{{Baker et~al.}}{{Baker, Campanelli, Pretorius, and Zlochower}}} +\bibcite{carept-pazos2006a}{{55}{2007}{{Pazos et~al.}}{{Pazos, Dorband, Nagar, Palenzuela, Schnetter, and Tiglio}}} +\bibcite{carpet-szilagyi2006a}{{56}{2007}{{Szil{\'a}gyi et~al.}}{{Szil{\'a}gyi, Pollney, Rezzolla, Thornburg, and Winicour}}} +\bibcite{carpet-baiotti2006b}{{57}{2007}{{Baiotti et~al.}}{{Baiotti, Hawke, and Rezzolla}}} +\bibcite{carpet-ott2006b}{{58}{2007{}}{{Ott et~al.}}{{Ott, Dimmelmeier, Marek, Janka, Zink, Hawke, and Schnetter}}} +\bibcite{carpet-zink2006a}{{59}{2007}{{Zink et~al.}}{{Zink, Stergioulas, Hawke, Ott, Schnetter, and M{\"u}ller}}} +\bibcite{carpet-bruegmann2006a}{{60}{2008{}}{{Br{\"u}gmann et~al.}}{{Br{\"u}gmann, Gonz{\'a}lez, Hannam, Husa, Sperhake, and Tichy}}} +\bibcite{carpet-reisswig2006a}{{61}{2007}{{Reisswig et~al.}}{{Reisswig, Bishop, Lai, Thornburg, and Szil{\'a}gyi}}} +\bibcite{carpet-ott2006a}{{62}{2007{}}{{Ott et~al.}}{{Ott, Dimmelmeier, Marek, Janka, Hawke, Zink, and Schnetter}}} +\bibcite{carpet-baiotti2006a}{{63}{2006}{{Baiotti and Rezzolla}}{{}}} +\bibcite{carpet-dorband2006a}{{64}{2006}{{Dorband et~al.}}{{Dorband, Berti, Diener, Schnetter, and Tiglio}}} +\bibcite{carpet-loeffler2006a}{{65}{2006}{{L{\"o}ffler et~al.}}{{L{\"o}ffler, Rezzolla, and Ansorg}}} +\bibcite{carpet-sperhake2006a}{{66}{2007}{{Sperhake}}{{}}} +\bibcite{carpet-schnetter2006b}{{67}{2006{}}{{Schnetter et~al.}}{{Schnetter, Krishnan, and Beyer}}} +\bibcite{carpet-sopuerta2006a}{{68}{2006}{{Sopuerta et~al.}}{{Sopuerta, Sperhake, and Laguna}}} +\bibcite{carpet-schnetter2006a}{{69}{2006{}}{{Schnetter et~al.}}{{Schnetter, Diener, Dorband, and Tiglio}}} +\bibcite{carpet-diener2005b}{{70}{2007}{{Diener et~al.}}{{Diener, Dorband, Schnetter, and Tiglio}}} +\bibcite{carpet-diener2005a}{{71}{2006}{{Diener et~al.}}{{Diener, Herrmann, Pollney, Schnetter, Seidel, Takahashi, Thornburg, and Ventrella}}} +\bibcite{carpet-sperhake2005a}{{72}{2005}{{Sperhake et~al.}}{{Sperhake, Kelly, Laguna, Smith, and Schnetter}}} +\bibcite{carpet-zink2005a}{{73}{2006}{{Zink et~al.}}{{Zink, Stergioulas, Hawke, Ott, Schnetter, and M{\"u}ller}}} +\bibcite{carpet-baiotti2004a}{{74}{2005}{{Baiotti et~al.}}{{Baiotti, Hawke, Rezzolla, and Schnetter}}} +\bibcite{carpet-schnetter2003a}{{75}{2004}{{Schnetter et~al.}}{{Schnetter, Hawley, and Hawke}}} +\global \chardef \firstnote@num75\relax +\bibstyle{apsrev-titles-manyauthors} +\newlabel{LastBibItem}{{75}{4}{}{}{}} +\newlabel{LastPage}{{}{4}} diff --git a/Carpet/CarpetWeb/publications/citations-refereed.bbl b/Carpet/CarpetWeb/publications/citations-refereed.bbl new file mode 100644 index 000000000..8ab9766b9 --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-refereed.bbl @@ -0,0 +1,1188 @@ +\begin{thebibliography}{75} +\expandafter\ifx\csname natexlab\endcsname\relax\def\natexlab#1{#1}\fi +\expandafter\ifx\csname bibnamefont\endcsname\relax + \def\bibnamefont#1{#1}\fi +\expandafter\ifx\csname bibfnamefont\endcsname\relax + \def\bibfnamefont#1{#1}\fi +\expandafter\ifx\csname citenamefont\endcsname\relax + \def\citenamefont#1{#1}\fi +\expandafter\ifx\csname url\endcsname\relax + \def\url#1{\texttt{#1}}\fi +\expandafter\ifx\csname urlprefix\endcsname\relax\def\urlprefix{URL }\fi +\providecommand{\bibinfo}[2]{#2} +\providecommand{\eprint}[2][]{\url{#2}} + +\bibitem[{\citenamefont{Aylott et~al.}(2009{\natexlab{a}})\citenamefont{Aylott, + Baker, Boggs, Boyle, Brady, Brown, Br{\"u}gmann, Buchman, Buonanno, Cadonati, + Camp, Campanelli, Centrella, Chatterji, Christensen, Chu, Diener, Dorband, + Etienne, Faber, Fairhurst, Farr, Fischetti, Guidi, Goggin, Hannam, Herrmann, + Hinder, Husa, Kalogera, Keppel, Kidder, Kelly, Krishnan, Laguna, Lousto, + Mandel, Marronetti, Matzner, McWilliams, Matthews, Mercer, Mohapatra, + Mrou{\'e}, Nakano, Ochsner, Pan, Pekowsky, Pfeiffer, Pollney, Pretorius, + Raymond, Reisswig, Rezzolla, Rinne, Robinson, R{\"o}ver, Santamar{\'i}a, + Sathyaprakash, Scheel, Schnetter, Seiler, Shapiro, Shoemaker, Sperhake, + Stroeer, Sturani, Tichy, Liu, van~der Sluys, van Meter, Vaulin, Vecchio, + Veitch, Vicer{\'e}, Whelan, and Zlochower}}]{carpet-cadonati2009a} +\bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Aylott}}, + \bibinfo{author}{\bibfnamefont{J.~G.} \bibnamefont{Baker}}, + \bibinfo{author}{\bibfnamefont{W.~D.} \bibnamefont{Boggs}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Boyle}}, + \bibinfo{author}{\bibfnamefont{P.~R.} \bibnamefont{Brady}}, + \bibinfo{author}{\bibfnamefont{D.~A.} \bibnamefont{Brown}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Br{\"u}gmann}}, + \bibinfo{author}{\bibfnamefont{L.~T.} \bibnamefont{Buchman}}, + \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Buonanno}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Cadonati}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Camp}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Campanelli}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Centrella}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Chatterji}}, + \bibinfo{author}{\bibfnamefont{N.}~\bibnamefont{Christensen}}, + \bibinfo{author}{\bibfnamefont{T.}~\bibnamefont{Chu}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, + \bibinfo{author}{\bibfnamefont{N.}~\bibnamefont{Dorband}}, + \bibinfo{author}{\bibfnamefont{Z.~B.} \bibnamefont{Etienne}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Faber}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Fairhurst}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Farr}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Fischetti}}, + \bibinfo{author}{\bibfnamefont{G.}~\bibnamefont{Guidi}}, + \bibinfo{author}{\bibfnamefont{L.~M.} \bibnamefont{Goggin}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Hannam}}, + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hinder}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Husa}}, + \bibinfo{author}{\bibfnamefont{V.}~\bibnamefont{Kalogera}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Keppel}}, + \bibinfo{author}{\bibfnamefont{L.~E.} \bibnamefont{Kidder}}, + \bibinfo{author}{\bibfnamefont{B.~J.} \bibnamefont{Kelly}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Krishnan}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Laguna}}, + \bibinfo{author}{\bibfnamefont{C.~O.} \bibnamefont{Lousto}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Mandel}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Marronetti}}, + \bibinfo{author}{\bibfnamefont{R.}~\bibnamefont{Matzner}}, + \bibinfo{author}{\bibfnamefont{S.~T.} \bibnamefont{McWilliams}}, + \bibinfo{author}{\bibfnamefont{K.~D.} \bibnamefont{Matthews}}, + \bibinfo{author}{\bibfnamefont{R.~A.} \bibnamefont{Mercer}}, + \bibinfo{author}{\bibfnamefont{S.~R.~P.} \bibnamefont{Mohapatra}}, + \bibinfo{author}{\bibfnamefont{A.~H.} \bibnamefont{Mrou{\'e}}}, + \bibinfo{author}{\bibfnamefont{H.}~\bibnamefont{Nakano}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Ochsner}}, + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Pan}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Pekowsky}}, + \bibinfo{author}{\bibfnamefont{H.~P.} \bibnamefont{Pfeiffer}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Pretorius}}, + \bibinfo{author}{\bibfnamefont{V.}~\bibnamefont{Raymond}}, + \bibinfo{author}{\bibfnamefont{C.}~\bibnamefont{Reisswig}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \bibinfo{author}{\bibfnamefont{O.}~\bibnamefont{Rinne}}, + \bibinfo{author}{\bibfnamefont{C.}~\bibnamefont{Robinson}}, + \bibinfo{author}{\bibfnamefont{C.}~\bibnamefont{R{\"o}ver}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Santamar{\'i}a}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Sathyaprakash}}, + \bibinfo{author}{\bibfnamefont{M.~A.} \bibnamefont{Scheel}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Seiler}}, + \bibinfo{author}{\bibfnamefont{S.~L.} \bibnamefont{Shapiro}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Shoemaker}}, + \bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, + \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Stroeer}}, + \bibinfo{author}{\bibfnamefont{R.}~\bibnamefont{Sturani}}, + \bibinfo{author}{\bibfnamefont{W.}~\bibnamefont{Tichy}}, + \bibinfo{author}{\bibfnamefont{Y.~T.} \bibnamefont{Liu}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{van~der Sluys}}, + \bibinfo{author}{\bibfnamefont{J.~R.} \bibnamefont{van Meter}}, + \bibinfo{author}{\bibfnamefont{R.}~\bibnamefont{Vaulin}}, + \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Vecchio}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Veitch}}, + \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Vicer{\'e}}}, + \bibinfo{author}{\bibfnamefont{J.~T.} \bibnamefont{Whelan}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Zlochower}}, + \emph{\bibinfo{title}{Status of {NINJA}: the {Numerical} {INJection} + {Analysis} project}}, \bibinfo{journal}{Class. Quantum Grav.} + \textbf{\bibinfo{volume}{26}}, \bibinfo{pages}{114008} + (\bibinfo{year}{2009}{\natexlab{a}}), \eprint{arXiv:0901.4399 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0905.4227}. + +\bibitem[{\citenamefont{Baiotti + et~al.}(2009{\natexlab{a}})\citenamefont{Baiotti, Giacomazzo, and + Rezzolla}}]{carpet-baiotti2009a} +\bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Baiotti}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Giacomazzo}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \emph{\bibinfo{title}{Accurate evolutions of inspiralling neutron-star + binaries: assessment of the truncation error}}, \bibinfo{journal}{Class. + Quantum Grav.} \textbf{\bibinfo{volume}{26}}, \bibinfo{pages}{114005} + (\bibinfo{year}{2009}{\natexlab{a}}), \eprint{arXiv:0901.4955 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0901.4955}. + +\bibitem[{\citenamefont{Aylott et~al.}(2009{\natexlab{b}})\citenamefont{Aylott, + Baker, Boggs, Boyle, Brady, Brown, Br{\"u}gmann, Buchman, Buonanno, Cadonati, + Camp, Campanelli, Centrella, Chatterji, Christensen, Chu, Diener, Dorband, + Etienne, Faber, Fairhurst, Farr, Fischetti, Guidi, Goggin, Hannam, Herrmann, + Hinder, Husa, Kalogera, Keppel, Kidder, Kelly, Krishnan, Laguna, Lousto, + Mandel, Marronetti, Matzner, McWilliams, Matthews, Mercer, Mohapatra, + Mrou{\'e}, Nakano, Ochsner, Pan, Pekowsky, Pfeiffer, Pollney, Pretorius, + Raymond, Reisswig, Rezzolla, Rinne, Robinson, R{\"o}ver, Santamar{\'i}a, + Sathyaprakash, Scheel, Schnetter, Seiler, Shapiro, Shoemaker, Sperhake, + Stroeer, Sturani, Tichy, Liu, van~der Sluys, van Meter, Vaulin, Vecchio, + Veitch, Vicer{\'e}, Whelan, and Zlochower}}]{carpet-aylott2009a} +\bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Aylott}}, + \bibinfo{author}{\bibfnamefont{J.~G.} \bibnamefont{Baker}}, + \bibinfo{author}{\bibfnamefont{W.~D.} \bibnamefont{Boggs}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Boyle}}, + \bibinfo{author}{\bibfnamefont{P.~R.} \bibnamefont{Brady}}, + \bibinfo{author}{\bibfnamefont{D.~A.} \bibnamefont{Brown}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Br{\"u}gmann}}, + \bibinfo{author}{\bibfnamefont{L.~T.} \bibnamefont{Buchman}}, + \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Buonanno}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Cadonati}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Camp}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Campanelli}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Centrella}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Chatterji}}, + \bibinfo{author}{\bibfnamefont{N.}~\bibnamefont{Christensen}}, + \bibinfo{author}{\bibfnamefont{T.}~\bibnamefont{Chu}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, + \bibinfo{author}{\bibfnamefont{N.}~\bibnamefont{Dorband}}, + \bibinfo{author}{\bibfnamefont{Z.~B.} \bibnamefont{Etienne}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Faber}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Fairhurst}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Farr}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Fischetti}}, + \bibinfo{author}{\bibfnamefont{G.}~\bibnamefont{Guidi}}, + \bibinfo{author}{\bibfnamefont{L.~M.} \bibnamefont{Goggin}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Hannam}}, + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hinder}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Husa}}, + \bibinfo{author}{\bibfnamefont{V.}~\bibnamefont{Kalogera}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Keppel}}, + \bibinfo{author}{\bibfnamefont{L.~E.} \bibnamefont{Kidder}}, + \bibinfo{author}{\bibfnamefont{B.~J.} \bibnamefont{Kelly}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Krishnan}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Laguna}}, + \bibinfo{author}{\bibfnamefont{C.~O.} \bibnamefont{Lousto}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Mandel}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Marronetti}}, + \bibinfo{author}{\bibfnamefont{R.}~\bibnamefont{Matzner}}, + \bibinfo{author}{\bibfnamefont{S.~T.} \bibnamefont{McWilliams}}, + \bibinfo{author}{\bibfnamefont{K.~D.} \bibnamefont{Matthews}}, + \bibinfo{author}{\bibfnamefont{R.~A.} \bibnamefont{Mercer}}, + \bibinfo{author}{\bibfnamefont{S.~R.~P.} \bibnamefont{Mohapatra}}, + \bibinfo{author}{\bibfnamefont{A.~H.} \bibnamefont{Mrou{\'e}}}, + \bibinfo{author}{\bibfnamefont{H.}~\bibnamefont{Nakano}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Ochsner}}, + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Pan}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Pekowsky}}, + \bibinfo{author}{\bibfnamefont{H.~P.} \bibnamefont{Pfeiffer}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Pretorius}}, + \bibinfo{author}{\bibfnamefont{V.}~\bibnamefont{Raymond}}, + \bibinfo{author}{\bibfnamefont{C.}~\bibnamefont{Reisswig}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \bibinfo{author}{\bibfnamefont{O.}~\bibnamefont{Rinne}}, + \bibinfo{author}{\bibfnamefont{C.}~\bibnamefont{Robinson}}, + \bibinfo{author}{\bibfnamefont{C.}~\bibnamefont{R{\"o}ver}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Santamar{\'i}a}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Sathyaprakash}}, + \bibinfo{author}{\bibfnamefont{M.~A.} \bibnamefont{Scheel}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Seiler}}, + \bibinfo{author}{\bibfnamefont{S.~L.} \bibnamefont{Shapiro}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Shoemaker}}, + \bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, + \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Stroeer}}, + \bibinfo{author}{\bibfnamefont{R.}~\bibnamefont{Sturani}}, + \bibinfo{author}{\bibfnamefont{W.}~\bibnamefont{Tichy}}, + \bibinfo{author}{\bibfnamefont{Y.~T.} \bibnamefont{Liu}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{van~der Sluys}}, + \bibinfo{author}{\bibfnamefont{J.~R.} \bibnamefont{van Meter}}, + \bibinfo{author}{\bibfnamefont{R.}~\bibnamefont{Vaulin}}, + \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Vecchio}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Veitch}}, + \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Vicer{\'e}}}, + \bibinfo{author}{\bibfnamefont{J.~T.} \bibnamefont{Whelan}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Zlochower}}, + \emph{\bibinfo{title}{Testing gravitational-wave searches with numerical + relativity waveforms: Results from the first {Numerical} {INJection} + {Analysis} ({NINJA}) project}}, \bibinfo{journal}{Class. Quantum Grav.} + \textbf{\bibinfo{volume}{26}}, \bibinfo{pages}{165008} + (\bibinfo{year}{2009}{\natexlab{b}}), \eprint{arXiv:0901.4399 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0901.4399}. + +\bibitem[{\citenamefont{Hannam et~al.}(2009)\citenamefont{Hannam, Husa, Baker, + Boyle, Br{\"u}gmann, Chu, Dorband, Herrmann, Hinder, Kelly, Kidder, Laguna, + Matthews, {van Meter}, Pfeiffer, Pollney, Reisswig, Scheel, and + Shoemaker}}]{carpetresult-hannam2008a} +\bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Hannam}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Husa}}, + \bibinfo{author}{\bibfnamefont{J.~G.} \bibnamefont{Baker}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Boyle}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Br{\"u}gmann}}, + \bibinfo{author}{\bibfnamefont{T.}~\bibnamefont{Chu}}, + \bibinfo{author}{\bibfnamefont{N.}~\bibnamefont{Dorband}}, + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hinder}}, + \bibinfo{author}{\bibfnamefont{B.~J.} \bibnamefont{Kelly}}, + \bibinfo{author}{\bibfnamefont{L.~E.} \bibnamefont{Kidder}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Laguna}}, + \bibinfo{author}{\bibfnamefont{K.~D.} \bibnamefont{Matthews}}, + \bibinfo{author}{\bibfnamefont{J.~R.} \bibnamefont{{van Meter}}}, + \bibinfo{author}{\bibfnamefont{H.~P.} \bibnamefont{Pfeiffer}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, + \bibinfo{author}{\bibfnamefont{C.}~\bibnamefont{Reisswig}}, + \bibinfo{author}{\bibfnamefont{M.~A.} \bibnamefont{Scheel}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Shoemaker}}, + \emph{\bibinfo{title}{The {Samurai} project: verifying the consistency of + black-hole-binary waveforms for gravitational-wave detection}}, + \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{79}}, + \bibinfo{pages}{084025} (\bibinfo{year}{2009}), \eprint{arXiv:0901.2437 + [gr-qc]}, \urlprefix\url{http://arxiv.org/abs/0901.2437}. + +\bibitem[{\citenamefont{Rezzolla}(2009)}]{carpet-rezzolla2008a} +\bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \emph{\bibinfo{title}{Modelling the final state from binary black-hole + coalescences}}, \bibinfo{journal}{Class. Quantum Grav.} + \textbf{\bibinfo{volume}{26}}, \bibinfo{pages}{094023} + (\bibinfo{year}{2009}), \eprint{arXiv:0812.2325 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0812.2325}. + +\bibitem[{\citenamefont{Etienne et~al.}(2009)\citenamefont{Etienne, Liu, + Shapiro, , and Baumgarte}}]{carpet-etienne2008a} +\bibinfo{author}{\bibfnamefont{Z.~B.} \bibnamefont{Etienne}}, + \bibinfo{author}{\bibfnamefont{Y.~T.} \bibnamefont{Liu}}, + \bibinfo{author}{\bibfnamefont{S.~L.} \bibnamefont{Shapiro}}, , + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{T.~W.} + \bibnamefont{Baumgarte}}, \emph{\bibinfo{title}{General relativistic + simulations of black-hole-neutron-star mergers: Effects of black-hole spin}}, + \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{79}}, + \bibinfo{pages}{044024} (\bibinfo{year}{2009}), \eprint{arXiv:0812.2245 + [astro-ph]}, \urlprefix\url{http://arxiv.org/abs/0812.2245}. + +\bibitem[{\citenamefont{Campanelli + et~al.}(2009{\natexlab{a}})\citenamefont{Campanelli, Lousto, and + Zlochower}}]{carpet-campanelli2008b} +\bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Campanelli}}, + \bibinfo{author}{\bibfnamefont{C.~O.} \bibnamefont{Lousto}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Zlochower}}, + \emph{\bibinfo{title}{Algebraic classification of numerical spacetimes and + black-hole-binary remnants}}, \bibinfo{journal}{Phys. Rev. D} + \textbf{\bibinfo{volume}{79}}, \bibinfo{pages}{084012} + (\bibinfo{year}{2009}{\natexlab{a}}), \eprint{arXiv:0811.3006 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0811.3006}. + +\bibitem[{\citenamefont{Korobkin et~al.}(2009)\citenamefont{Korobkin, Aksoylu, + Holst, Pazos, and Tiglio}}]{carpet-korobkin2008a} +\bibinfo{author}{\bibfnamefont{O.}~\bibnamefont{Korobkin}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Aksoylu}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Holst}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Pazos}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Tiglio}}, + \emph{\bibinfo{title}{Solving the einstein constraint equations on + multi-block triangulations using finite element methods}}, + \bibinfo{journal}{Class. Quantum Grav.} \textbf{\bibinfo{volume}{26}}, + \bibinfo{pages}{145007} (\bibinfo{year}{2009}), \eprint{arXiv:0801.1823 + [gr-qc]}, \urlprefix\url{http://arxiv.org/abs/0801.1823}. + +\bibitem[{\citenamefont{Brown et~al.}(2009)\citenamefont{Brown, Diener, + Sarbach, Schnetter, and Tiglio}}]{carpet-brown2007b} +\bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Brown}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, + \bibinfo{author}{\bibfnamefont{O.}~\bibnamefont{Sarbach}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Tiglio}}, + \emph{\bibinfo{title}{Turduckening black holes: an analytical and + computational study}}, \bibinfo{journal}{Phys. Rev. D} + \textbf{\bibinfo{volume}{79}}, \bibinfo{pages}{044023} + (\bibinfo{year}{2009}), \eprint{arXiv:0809.3533 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0809.3533}. + +\bibitem[{\citenamefont{Baiotti + et~al.}(2009{\natexlab{b}})\citenamefont{Baiotti, Bernuzzi, Corvino, Pietri, + and Nagar}}]{carpet-baiotti2008b} +\bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Baiotti}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Bernuzzi}}, + \bibinfo{author}{\bibfnamefont{G.}~\bibnamefont{Corvino}}, + \bibinfo{author}{\bibfnamefont{R.~D.} \bibnamefont{Pietri}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Nagar}}, + \emph{\bibinfo{title}{Gravitational-wave extraction from neutron-star + oscillations: Comparing linear and nonlinear techniques}}, + \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{79}}, + \bibinfo{pages}{024002} (\bibinfo{year}{2009}{\natexlab{b}}), + \eprint{arXiv:0808.4002 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0808.4002}. + +\bibitem[{\citenamefont{Campanelli + et~al.}(2009{\natexlab{b}})\citenamefont{Campanelli, Lousto, Nakano, and + Zlochower}}]{carpet-campanelli2008a} +\bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Campanelli}}, + \bibinfo{author}{\bibfnamefont{C.~O.} \bibnamefont{Lousto}}, + \bibinfo{author}{\bibfnamefont{H.}~\bibnamefont{Nakano}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Zlochower}}, + \emph{\bibinfo{title}{Comparison of numerical and post-{Newtonian} waveforms + for generic precessing black-hole binaries}}, \bibinfo{journal}{Phys. Rev. D} + \textbf{\bibinfo{volume}{79}}, \bibinfo{pages}{084010} + (\bibinfo{year}{2009}{\natexlab{b}}), \eprint{arXiv:0808.0713 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0808.0713}. + +\bibitem[{\citenamefont{Healy et~al.}(2009)\citenamefont{Healy, Herrmann, + Hinder, Shoemaker, Laguna, , and Matzner}}]{carpet-healy2008a} +\bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Healy}}, + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hinder}}, + \bibinfo{author}{\bibfnamefont{D.~M.} \bibnamefont{Shoemaker}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Laguna}}, , \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{R.~A.} \bibnamefont{Matzner}}, + \emph{\bibinfo{title}{Superkicks in hyperbolic encounters of binary black + holes}}, \bibinfo{journal}{Phys. Rev. Lett.} \textbf{\bibinfo{volume}{102}}, + \bibinfo{pages}{041101} (\bibinfo{year}{2009}), \eprint{arXiv:0807.3292 + [gr-qc]}, \urlprefix\url{http://arxiv.org/abs/0807.3292}. + +\bibitem[{\citenamefont{Sperhake + et~al.}(2008{\natexlab{a}})\citenamefont{Sperhake, Cardoso, Pretorius, Berti, + , and Gonz{\'a}lez}}]{carpet-sperhake2008a} +\bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, + \bibinfo{author}{\bibfnamefont{V.}~\bibnamefont{Cardoso}}, + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Pretorius}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Berti}}, , \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{J.~A.} \bibnamefont{Gonz{\'a}lez}}, + \emph{\bibinfo{title}{High-energy collision of two black holes}}, + \bibinfo{journal}{Phys. Rev. Lett.} \textbf{\bibinfo{volume}{101}}, + \bibinfo{pages}{161101} (\bibinfo{year}{2008}{\natexlab{a}}), + \eprint{arXiv:0806.1738 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0806.1738}. + +\bibitem[{\citenamefont{Gualtieri et~al.}(2008)\citenamefont{Gualtieri, Berti, + Cardoso, and Sperhake}}]{carpet-gualtieri2008a} +\bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Gualtieri}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Berti}}, + \bibinfo{author}{\bibfnamefont{V.}~\bibnamefont{Cardoso}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, + \emph{\bibinfo{title}{Transformation of the multipolar components of + gravitational radiation under rotations and boosts}}, \bibinfo{journal}{Phys. + Rev. D} \textbf{\bibinfo{volume}{78}}, \bibinfo{pages}{044024} + (\bibinfo{year}{2008}), \eprint{arXiv:0805.1017 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0805.1017}. + +\bibitem[{\citenamefont{Lousto and Zlochower}(2009)}]{carpet-lousto2008a} +\bibinfo{author}{\bibfnamefont{C.~O.} \bibnamefont{Lousto}} \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Zlochower}}, + \emph{\bibinfo{title}{Modeling gravitational recoil from precessing + highly-spinning unequal-mass black-hole binaries}}, \bibinfo{journal}{Phys. + Rev. D} \textbf{\bibinfo{volume}{79}}, \bibinfo{pages}{064018} + (\bibinfo{year}{2009}), \eprint{arXiv:0805.0159 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0805.0159}. + +\bibitem[{\citenamefont{Benger}(2008)}]{carpetresult-benger2007a} +\bibinfo{author}{\bibfnamefont{W.}~\bibnamefont{Benger}}, + \emph{\bibinfo{title}{Colliding galaxies, rotating neutron stars and merging + black holes -- visualizing high dimensional datasets on arbitrary meshes}}, + \bibinfo{journal}{New J. Phys.} \textbf{\bibinfo{volume}{10}}, + \bibinfo{pages}{125004} (\bibinfo{year}{2008}), + \urlprefix\url{http://www.iop.org/EJ/ abstract/1367-2630/10/12/125004}. + +\bibitem[{\citenamefont{Baiotti et~al.}(2008)\citenamefont{Baiotti, Giacomazzo, + and Rezzolla}}]{carpet-baiotti2008a} +\bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Baiotti}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Giacomazzo}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \emph{\bibinfo{title}{Accurate evolutions of inspiralling neutron-star + binaries: Prompt and delayed collapse to a black hole}}, + \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{78}}, + \bibinfo{pages}{084033} (\bibinfo{year}{2008}), \eprint{arXiv:0804.0594 + [gr-qc]}, \urlprefix\url{http://arxiv.org/abs/0804.0594}. + +\bibitem[{\citenamefont{Dain et~al.}(2008)\citenamefont{Dain, Lousto, , and + Zlochower}}]{carpet-dain2008a} +\bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Dain}}, + \bibinfo{author}{\bibfnamefont{C.~O.} \bibnamefont{Lousto}}, , + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Zlochower}}, + \emph{\bibinfo{title}{Extra-large remnant recoil velocities and spins from + near-extremal-{Bowen}-{York}-spin black-hole binaries}}, + \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{78}}, + \bibinfo{pages}{024039} (\bibinfo{year}{2008}), \eprint{arXiv:0803.0351 + [gr-qc]}, \urlprefix\url{http://arxiv.org/abs/0803.0351}. + +\bibitem[{\citenamefont{Seiler et~al.}(2008)\citenamefont{Seiler, Szil{\'a}gyi, + Pollney, and Rezzolla}}]{carpet-seiler2008a} +\bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Seiler}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Szil{\'a}gyi}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \emph{\bibinfo{title}{Constraint-preserving boundary treatment for a harmonic + formulation of the einstein equations}}, \bibinfo{journal}{Class. Quantum + Grav.} \textbf{\bibinfo{volume}{25}}, \bibinfo{pages}{175020} + (\bibinfo{year}{2008}), \eprint{arXiv:0802.3341 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0802.3341}. + +\bibitem[{\citenamefont{Washik et~al.}(2008)\citenamefont{Washik, Healy, + Herrmann, Hinder, Shoemaker, Laguna, and Matzner}}]{carpet-washik2008a} +\bibinfo{author}{\bibfnamefont{M.~C.} \bibnamefont{Washik}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Healy}}, + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hinder}}, + \bibinfo{author}{\bibfnamefont{D.~M.} \bibnamefont{Shoemaker}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Laguna}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{R.~A.} \bibnamefont{Matzner}}, + \emph{\bibinfo{title}{Binary-black-hole encounters, gravitational bursts, and + maximum final spin}}, \bibinfo{journal}{Phys. Rev. Lett.} + \textbf{\bibinfo{volume}{101}}, \bibinfo{pages}{061102} + (\bibinfo{year}{2008}), \eprint{arXiv:0802.2520 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0802.2520}. + +\bibitem[{\citenamefont{Bentivegna et~al.}(2008)\citenamefont{Bentivegna, + Shoemaker, Hinder, , and Herrmann}}]{carpet-bentivegna2008a} +\bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Bentivegna}}, + \bibinfo{author}{\bibfnamefont{D.~M.} \bibnamefont{Shoemaker}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hinder}}, , \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, + \emph{\bibinfo{title}{Probing the binary black hole merger regime with scalar + perturbations}}, \bibinfo{journal}{Phys. Rev. D} + \textbf{\bibinfo{volume}{77}}, \bibinfo{pages}{124016} + (\bibinfo{year}{2008}), \eprint{arXiv:0801.3478 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0801.3478}. + +\bibitem[{\citenamefont{Rezzolla + et~al.}(2008{\natexlab{a}})\citenamefont{Rezzolla, Barausse, Dorband, + Pollney, Reisswig, Seiler, and Husa}}]{carpet-rezzolla2007c} +\bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Barausse}}, + \bibinfo{author}{\bibfnamefont{E.~N.} \bibnamefont{Dorband}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, + \bibinfo{author}{\bibfnamefont{C.}~\bibnamefont{Reisswig}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Seiler}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Husa}}, + \emph{\bibinfo{title}{Final spin from the coalescence of two black holes}}, + \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{78}}, + \bibinfo{pages}{044002} (\bibinfo{year}{2008}{\natexlab{a}}), + \eprint{arXiv:0712.3541 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0712.3541}. + +\bibitem[{\citenamefont{Damour et~al.}(2008)\citenamefont{Damour, Nagar, + Dorband, Pollney, and Rezzolla}}]{carpet-damour2007a} +\bibinfo{author}{\bibfnamefont{T.}~\bibnamefont{Damour}}, + \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Nagar}}, + \bibinfo{author}{\bibfnamefont{E.~N.} \bibnamefont{Dorband}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \emph{\bibinfo{title}{Faithful effective-one-body waveforms of equal-mass + coalescing black-hole binaries}}, \bibinfo{journal}{Phys. Rev. D} + \textbf{\bibinfo{volume}{77}}, \bibinfo{pages}{084017} + (\bibinfo{year}{2008}), \eprint{arXiv:0712.3003 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0712.3003}. + +\bibitem[{\citenamefont{Shoemaker et~al.}(2008)\citenamefont{Shoemaker, + Vaishnav, Hinder, and Herrmann}}]{carpet-shoemaker2007a} +\bibinfo{author}{\bibfnamefont{D.~M.} \bibnamefont{Shoemaker}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Vaishnav}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hinder}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, + \emph{\bibinfo{title}{Numerical relativity meets data analysis: spinning + binary black hole case}}, \bibinfo{journal}{Class. Quantum Grav.} + \textbf{\bibinfo{volume}{25}}, \bibinfo{pages}{114047} + (\bibinfo{year}{2008}), \eprint{arXiv:0802.4427 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0802.4427}. + +\bibitem[{\citenamefont{Zink et~al.}(2008)\citenamefont{Zink, Schnetter, and + Tiglio}}]{carpet-zink2007a} +\bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Zink}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Tiglio}}, + \emph{\bibinfo{title}{Multi-patch methods in general relativistic + astrophysics - {I.} {Hydrodynamical} flows on fixed backgrounds}}, + \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{77}}, + \bibinfo{pages}{103015} (\bibinfo{year}{2008}), \eprint{arXiv:0712.0353 + [astro-ph]}, \urlprefix\url{http://arxiv.org/abs/0712.0353}. + +\bibitem[{\citenamefont{Berti et~al.}(2008)\citenamefont{Berti, Cardoso, + Gonz{\'a}lez, Sperhake, and Br{\"u}gmann}}]{carpet-berti2007a} +\bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Berti}}, + \bibinfo{author}{\bibfnamefont{V.}~\bibnamefont{Cardoso}}, + \bibinfo{author}{\bibfnamefont{J.~A.} \bibnamefont{Gonz{\'a}lez}}, + \bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Br{\"u}gmann}}, + \emph{\bibinfo{title}{Multipolar analysis of spinning binaries}}, + \bibinfo{journal}{Class. Quantum Grav.} \textbf{\bibinfo{volume}{25}}, + \bibinfo{pages}{114035} (\bibinfo{year}{2008}), \eprint{arXiv:0711.1097 + [gr-qc]}, \urlprefix\url{http://arxiv.org/abs/0711.1097}. + +\bibitem[{\citenamefont{Bode et~al.}(2008)\citenamefont{Bode, Shoemaker, + Herrmann, and Hinder}}]{carpet-bode2007a} +\bibinfo{author}{\bibfnamefont{T.}~\bibnamefont{Bode}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Shoemaker}}, + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hinder}}, + \emph{\bibinfo{title}{Robustness of binary black hole mergers in the presence + of spurious radiation}}, \bibinfo{journal}{Phys. Rev. D} + \textbf{\bibinfo{volume}{78}}, \bibinfo{pages}{044027} + (\bibinfo{year}{2008}), \eprint{arXiv:0711.0669 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0711.0669}. + +\bibitem[{\citenamefont{Hinder et~al.}(2008)\citenamefont{Hinder, Vaishnav, + Herrmann, Shoemaker, and Laguna}}]{carpet-hinder2007a} +\bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hinder}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Vaishnav}}, + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, + \bibinfo{author}{\bibfnamefont{D.~M.} \bibnamefont{Shoemaker}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Laguna}}, + \emph{\bibinfo{title}{Circularization and final spin in eccentric binary + black hole inspirals}}, \bibinfo{journal}{Phys. Rev. D} + \textbf{\bibinfo{volume}{77}}, \bibinfo{pages}{081502(R)} + (\bibinfo{year}{2008}), \eprint{arXiv:0710.5167 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0710.5167}. + +\bibitem[{\citenamefont{Boyle et~al.}(2008)\citenamefont{Boyle, Kesden, and + Nissanke}}]{carpetresult-boyle2007a} +\bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Boyle}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Kesden}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Nissanke}}, + \emph{\bibinfo{title}{Binary black hole merger: symmetry and the spin + expansion}}, \bibinfo{journal}{Phys. Rev. Lett.} + \textbf{\bibinfo{volume}{100}}, \bibinfo{pages}{151101} + (\bibinfo{year}{2008}), \eprint{arXiv:0709.0299 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0709.0299}. + +\bibitem[{\citenamefont{Sperhake + et~al.}(2008{\natexlab{b}})\citenamefont{Sperhake, Berti, Cardoso, + Gonz{\'a}lez, Br{\"u}gmann, and Ansorg}}]{carpet-sperhake2007a} +\bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Berti}}, + \bibinfo{author}{\bibfnamefont{V.}~\bibnamefont{Cardoso}}, + \bibinfo{author}{\bibfnamefont{J.~A.} \bibnamefont{Gonz{\'a}lez}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Br{\"u}gmann}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Ansorg}}, + \emph{\bibinfo{title}{Eccentric binary black-hole mergers: The transition + from inspiral to plunge in general relativity}}, \bibinfo{journal}{Phys. Rev. + D} \textbf{\bibinfo{volume}{78}}, \bibinfo{pages}{064069} + (\bibinfo{year}{2008}{\natexlab{b}}), \eprint{arXiv:0710.3823 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0710.3823}. + +\bibitem[{\citenamefont{Rezzolla + et~al.}(2008{\natexlab{b}})\citenamefont{Rezzolla, Diener, Dorband, Pollney, + Reisswig, Schnetter, and Seiler}}]{carpet-rezzolla2007b} +\bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, + \bibinfo{author}{\bibfnamefont{E.~N.} \bibnamefont{Dorband}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, + \bibinfo{author}{\bibfnamefont{C.}~\bibnamefont{Reisswig}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Seiler}}, + \emph{\bibinfo{title}{The final spin from the coalescence of aligned-spin + black-hole binaries}}, \bibinfo{journal}{Astrophys. J. Lett.} + \textbf{\bibinfo{volume}{674}}, \bibinfo{pages}{L29} + (\bibinfo{year}{2008}{\natexlab{b}}), \eprint{arXiv:0710.3345 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0710.3345}. + +\bibitem[{\citenamefont{Ajith et~al.}(2008)\citenamefont{Ajith, Babak, Chen, + Hewitson, Krishnan, Sintes, Whelan, Br{\"u}gmann, Diener, Dorband, + Gonz{\'a}lez, Hannam, Husa, Pollney, Rezzolla, Santamar{\'i}a, Sperhake, and + Thornburg}}]{carpet-ajith2007b} +\bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Ajith}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Babak}}, + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Chen}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Hewitson}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Krishnan}}, + \bibinfo{author}{\bibfnamefont{A.~M.} \bibnamefont{Sintes}}, + \bibinfo{author}{\bibfnamefont{J.~T.} \bibnamefont{Whelan}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Br{\"u}gmann}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, + \bibinfo{author}{\bibfnamefont{E.~N.} \bibnamefont{Dorband}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Gonz{\'a}lez}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Hannam}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Husa}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Santamar{\'i}a}}, + \bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Thornburg}}, + \emph{\bibinfo{title}{A template bank for gravitational waveforms from + coalescing binary black holes: {I.} non-spinning binaries}}, + \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{77}}, + \bibinfo{pages}{104017} (\bibinfo{year}{2008}), \eprint{arXiv:0710.2335 + [gr-qc]}, \urlprefix\url{http://arxiv.org/abs/0710.2335}. + +\bibitem[{\citenamefont{Campanelli et~al.}(2008)\citenamefont{Campanelli, + Lousto, and Zlochower}}]{carpet-campanelli2007c} +\bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Campanelli}}, + \bibinfo{author}{\bibfnamefont{C.~O.} \bibnamefont{Lousto}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Zlochower}}, + \emph{\bibinfo{title}{Close encounters of three black holes}}, + \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{77}}, + \bibinfo{pages}{101501(5)} (\bibinfo{year}{2008}), \eprint{arXiv:0710.0879 + [gr-qc]}, \urlprefix\url{http://arxiv.org/abs/0710.0879}. + +\bibitem[{\citenamefont{Buonanno et~al.}(2008)\citenamefont{Buonanno, Kidder, + and Lehner}}]{carpetresult-buonanno2007a} +\bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Buonanno}}, + \bibinfo{author}{\bibfnamefont{L.~E.} \bibnamefont{Kidder}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Lehner}}, + \emph{\bibinfo{title}{Estimating the final spin of a binary black hole + coalescence}}, \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{77}}, + \bibinfo{pages}{026004} (\bibinfo{year}{2008}), \eprint{arXiv:0709.3839 + [astro-ph]}, \urlprefix\url{http://arxiv.org/abs/0709.3839}. + +\bibitem[{\citenamefont{Stark et~al.}(2008)\citenamefont{Stark, Allen, Goodale, + Radke, and Schnetter}}]{carpet-stark2007a} +\bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Stark}}, + \bibinfo{author}{\bibfnamefont{G.}~\bibnamefont{Allen}}, + \bibinfo{author}{\bibfnamefont{T.}~\bibnamefont{Goodale}}, + \bibinfo{author}{\bibfnamefont{T.}~\bibnamefont{Radke}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \emph{\bibinfo{title}{An extensible timing infrastructure for adaptive + large-scale applications}}, in \emph{\bibinfo{booktitle}{Parallel Processing + and Applied Mathematics}}, edited by + \bibinfo{editor}{\bibfnamefont{R.}~\bibnamefont{Wyrzykowski}} + (\bibinfo{publisher}{Springer}, \bibinfo{year}{2008}), vol. + \bibinfo{volume}{4967} of \emph{\bibinfo{series}{Lecture Notes in Computer + Science}}, pp. \bibinfo{pages}{1170--1179}, \eprint{arXiv:0705.3015 [cs.PF]}, + \urlprefix\url{http://arxiv.org/abs/0705.3015}. + +\bibitem[{\citenamefont{Pollney et~al.}(2007)\citenamefont{Pollney, Reisswig, + Rezzolla, Szil{\'a}gyi, Ansorg, Deris, Diener, Dorband, Koppitz, Nagar, and + Schnetter}}]{carpet-pollney207a} +\bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, + \bibinfo{author}{\bibfnamefont{C.}~\bibnamefont{Reisswig}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Szil{\'a}gyi}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Ansorg}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Deris}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, + \bibinfo{author}{\bibfnamefont{E.~N.} \bibnamefont{Dorband}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Koppitz}}, + \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Nagar}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \emph{\bibinfo{title}{Recoil velocities from equal-mass binary black-hole + mergers: a systematic investigation of spin-orbit aligned configurations}}, + \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{76}}, + \bibinfo{pages}{124002} (\bibinfo{year}{2007}), \eprint{arXiv:0707.2559 + [gr-qc]}, \urlprefix\url{http://arxiv.org/abs/0707.2559}. + +\bibitem[{\citenamefont{Lousto and Zlochower}(2008)}]{carpet-lousto2007a} +\bibinfo{author}{\bibfnamefont{C.~O.} \bibnamefont{Lousto}} \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Zlochower}}, + \emph{\bibinfo{title}{Further insight into gravitational recoil}}, + \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{77}}, + \bibinfo{pages}{044028} (\bibinfo{year}{2008}), \eprint{arXiv:0708.4048 + [gr-qc]}, \urlprefix\url{http://arxiv.org/abs/0708.4048}. + +\bibitem[{\citenamefont{Rezzolla + et~al.}(2008{\natexlab{c}})\citenamefont{Rezzolla, Dorband, Reisswig, Diener, + Pollney, Schnetter, and Szil{\'s}gyi}}]{carpet-rezzolla2007a} +\bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \bibinfo{author}{\bibfnamefont{E.~N.} \bibnamefont{Dorband}}, + \bibinfo{author}{\bibfnamefont{C.}~\bibnamefont{Reisswig}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Szil{\'s}gyi}}, + \emph{\bibinfo{title}{Spin diagrams for equal-mass black-hole binaries with + aligned spins}}, \bibinfo{journal}{Astrophys. J.} + \textbf{\bibinfo{volume}{679}}, \bibinfo{pages}{1422} + (\bibinfo{year}{2008}{\natexlab{c}}), \eprint{arXiv:0708.3999 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0708.3999}. + +\bibitem[{\citenamefont{Br{\"u}gmann + et~al.}(2008{\natexlab{a}})\citenamefont{Br{\"u}gmann, Gonz{\'a}lez, Hannam, + Husa, and Sperhake}}]{carpet-bruegmann2007a} +\bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Br{\"u}gmann}}, + \bibinfo{author}{\bibfnamefont{J.~A.} \bibnamefont{Gonz{\'a}lez}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Hannam}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Husa}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, + \emph{\bibinfo{title}{Exploring black hole superkicks}}, + \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{77}}, + \bibinfo{pages}{124047} (\bibinfo{year}{2008}{\natexlab{a}}), + \eprint{arXiv:0707.0135 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0707.0135}. + +\bibitem[{\citenamefont{Brown et~al.}(2007)\citenamefont{Brown, Sarbach, + Schnetter, Tiglio, Diener, Hawke, and Pollney}}]{carpet-brown2007a} +\bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Brown}}, + \bibinfo{author}{\bibfnamefont{O.}~\bibnamefont{Sarbach}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Tiglio}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hawke}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, + \emph{\bibinfo{title}{Excision without excision}}, \bibinfo{journal}{Phys. + Rev. D} \textbf{\bibinfo{volume}{76}}, \bibinfo{pages}{081503(R)} + (\bibinfo{year}{2007}), \eprint{arXiv:0707.3101 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0707.3101}. + +\bibitem[{\citenamefont{Krishnan et~al.}(2007)\citenamefont{Krishnan, Lousto, + and Zlochower}}]{carpet-krishnan2007a} +\bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Krishnan}}, + \bibinfo{author}{\bibfnamefont{C.~O.} \bibnamefont{Lousto}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Zlochower}}, + \emph{\bibinfo{title}{Quasi-local linear momentum in black-hole binaries}}, + \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{76}}, + \bibinfo{pages}{081501(R)} (\bibinfo{year}{2007}), \eprint{arXiv:0707.0876 + [gr-qc]}, \urlprefix\url{http://arxiv.org/abs/0707.0876}. + +\bibitem[{\citenamefont{Herrmann + et~al.}(2007{\natexlab{a}})\citenamefont{Herrmann, Hinder, Shoemaker, Laguna, + and Matzner}}]{carpet-herrmann2007c} +\bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hinder}}, + \bibinfo{author}{\bibfnamefont{D.~M.} \bibnamefont{Shoemaker}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Laguna}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{R.~A.} \bibnamefont{Matzner}}, + \emph{\bibinfo{title}{Binary black holes: Spin dynamics and gravitational + recoil}}, \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{76}}, + \bibinfo{pages}{084032} (\bibinfo{year}{2007}{\natexlab{a}}), + \eprint{arXiv:0706.2541 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0706.2541}. + +\bibitem[{\citenamefont{Vaishnav et~al.}(2007)\citenamefont{Vaishnav, Hinder, + Herrmann, and Shoemaker}}]{carpet-vaishnav2007a} +\bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Vaishnav}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hinder}}, + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{D.~M.} \bibnamefont{Shoemaker}}, + \emph{\bibinfo{title}{Matched filtering of numerical relativity templates of + spinning binary black holes}}, \bibinfo{journal}{Phys. Rev. D} + \textbf{\bibinfo{volume}{76}}, \bibinfo{pages}{084020} + (\bibinfo{year}{2007}), \eprint{arXiv:0705.3829 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0705.3829}. + +\bibitem[{\citenamefont{Ajith et~al.}(2007)\citenamefont{Ajith, Babak, Chen, + Hewitson, Krishnan, Whelan, Br{\"u}gmann, Diener, González, Hannam, Husa, + Koppitz, Pollney, Rezzolla, Santamar{\'i}a, Sintes, Sperhake, and + Thornburg}}]{carpet-ajith2007a} +\bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Ajith}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Babak}}, + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Chen}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Hewitson}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Krishnan}}, + \bibinfo{author}{\bibfnamefont{J.~T.} \bibnamefont{Whelan}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Br{\"u}gmann}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{González}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Hannam}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Husa}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Koppitz}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Santamar{\'i}a}}, + \bibinfo{author}{\bibfnamefont{A.~M.} \bibnamefont{Sintes}}, + \bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Thornburg}}, + \emph{\bibinfo{title}{Phenomenological template family for black-hole + coalescence waveforms}}, \bibinfo{journal}{Class. Quantum Grav.} + \textbf{\bibinfo{volume}{24}}, \bibinfo{pages}{S689} (\bibinfo{year}{2007}), + \eprint{arXiv:0704.3764 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0704.3764}. + +\bibitem[{\citenamefont{Thornburg et~al.}(2007)\citenamefont{Thornburg, Diener, + Pollney, Rezzolla, Schnetter, Seidel, and Takahashi}}]{carpet-thornburg2007a} +\bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Thornburg}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Seidel}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{R.}~\bibnamefont{Takahashi}}, + \emph{\bibinfo{title}{Are moving punctures equivalent to moving black + holes?}}, \bibinfo{journal}{Class. Quantum Grav.} + \textbf{\bibinfo{volume}{24}}, \bibinfo{pages}{3911} (\bibinfo{year}{2007}), + \eprint{arXiv:gr-qc/0701038}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0701038}. + +\bibitem[{\citenamefont{Gonz{\'a}lez et~al.}(2007)\citenamefont{Gonz{\'a}lez, + Hannam, Sperhake, Br{\"u}gmann, and Husa}}]{carpet-gonzalez2007a} +\bibinfo{author}{\bibfnamefont{J.~A.} \bibnamefont{Gonz{\'a}lez}}, + \bibinfo{author}{\bibfnamefont{M.~D.} \bibnamefont{Hannam}}, + \bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Br{\"u}gmann}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Husa}}, + \emph{\bibinfo{title}{Supermassive recoil velocities for binary black-hole + mergers with antialigned spins}}, \bibinfo{journal}{Phys. Rev. Lett.} + \textbf{\bibinfo{volume}{98}}, \bibinfo{pages}{231101} + (\bibinfo{year}{2007}), \eprint{arXiv:gr-qc/0702052}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0702052}. + +\bibitem[{\citenamefont{Campanelli + et~al.}(2007{\natexlab{a}})\citenamefont{Campanelli, Lousto, Zlochower, and + Merritt}}]{carpet-campanelli2007b} +\bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Campanelli}}, + \bibinfo{author}{\bibfnamefont{C.~O.} \bibnamefont{Lousto}}, + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Zlochower}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Merritt}}, + \emph{\bibinfo{title}{Maximum gravitational recoil}}, \bibinfo{journal}{Phys. + Rev. Lett.} \textbf{\bibinfo{volume}{98}}, \bibinfo{pages}{231102} + (\bibinfo{year}{2007}{\natexlab{a}}), \eprint{arXiv:gr-qc/0702133}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0702133}. + +\bibitem[{\citenamefont{Campanelli + et~al.}(2007{\natexlab{b}})\citenamefont{Campanelli, Lousto, Zlochower, and + Merritt}}]{carpet-campanelli2007a} +\bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Campanelli}}, + \bibinfo{author}{\bibfnamefont{C.~O.} \bibnamefont{Lousto}}, + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Zlochower}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Merritt}}, + \emph{\bibinfo{title}{Large merger recoils and spin flips from generic + black-hole binaries}}, \bibinfo{journal}{Astrophys. J. Lett.} + \textbf{\bibinfo{volume}{659}}, \bibinfo{pages}{L5} + (\bibinfo{year}{2007}{\natexlab{b}}), \eprint{arXiv:gr-qc/0701164}. + +\bibitem[{\citenamefont{Herrmann + et~al.}(2007{\natexlab{b}})\citenamefont{Herrmann, Hinder, Shoemaker, Laguna, + and Matzner}}]{carpet-herrmann2007b} +\bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hinder}}, + \bibinfo{author}{\bibfnamefont{D.~M.} \bibnamefont{Shoemaker}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Laguna}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{R.~A.} \bibnamefont{Matzner}}, + \emph{\bibinfo{title}{Gravitational recoil from spinning binary black hole + mergers}}, \bibinfo{journal}{Astrophys. J.} \textbf{\bibinfo{volume}{661}}, + \bibinfo{pages}{430} (\bibinfo{year}{2007}{\natexlab{b}}), + \eprint{arXiv:gr-qc/0701143}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0701143}. + +\bibitem[{\citenamefont{Koppitz et~al.}(2007)\citenamefont{Koppitz, Pollney, + Reisswig, Rezzolla, Thornburg, Diener, and Schnetter}}]{carpet-koppitz2007a} +\bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Koppitz}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, + \bibinfo{author}{\bibfnamefont{C.}~\bibnamefont{Reisswig}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Thornburg}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \emph{\bibinfo{title}{Recoil velocities from equal-mass binary-black-hole + mergers}}, \bibinfo{journal}{Phys. Rev. Lett.} \textbf{\bibinfo{volume}{99}}, + \bibinfo{pages}{041102} (\bibinfo{year}{2007}), \eprint{arXiv:gr-qc/0701163}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0701163}. + +\bibitem[{\citenamefont{Marronetti et~al.}(2007)\citenamefont{Marronetti, + Tichy, Br{\"u}gmann, Gonz{\'a}lez, Hannam, Husa, and + Sperhake}}]{carpet-marronetti2007a} +\bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Marronetti}}, + \bibinfo{author}{\bibfnamefont{W.}~\bibnamefont{Tichy}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Br{\"u}gmann}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Gonz{\'a}lez}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Hannam}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Husa}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, + \emph{\bibinfo{title}{Binary black holes on a budget: simulations using + workstations}}, \bibinfo{journal}{Class. Quantum Grav.} + \textbf{\bibinfo{volume}{24}}, \bibinfo{pages}{S45} (\bibinfo{year}{2007}), + \eprint{arXiv:gr-qc/0701123}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0701123}. + +\bibitem[{\citenamefont{Giacomazzo and + Rezzolla}(2007)}]{carpet-giacomazzo2007a} +\bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Giacomazzo}} \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \emph{\bibinfo{title}{{WhiskyMHD}: a new numerical code for general + relativistic magnetohydrodynamics}}, \bibinfo{journal}{Class. Quantum Grav.} + \textbf{\bibinfo{volume}{24}}, \bibinfo{pages}{S235} (\bibinfo{year}{2007}), + \eprint{arXiv:gr-qc/0701109}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0701109}. + +\bibitem[{\citenamefont{Herrmann + et~al.}(2007{\natexlab{c}})\citenamefont{Herrmann, Hinder, Shoemaker, and + Laguna}}]{carpet-herrmann2007a} +\bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hinder}}, + \bibinfo{author}{\bibfnamefont{D.~M.} \bibnamefont{Shoemaker}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Laguna}}, + \emph{\bibinfo{title}{Unequal mass binary black hole plunges and + gravitational recoil}}, \bibinfo{journal}{Class. Quantum Grav.} + \textbf{\bibinfo{volume}{24}}, \bibinfo{pages}{S33} + (\bibinfo{year}{2007}{\natexlab{c}}), \eprint{arXiv:gr-qc/0601026}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0601026}. + +\bibitem[{\citenamefont{Baker et~al.}(2007)\citenamefont{Baker, Campanelli, + Pretorius, and Zlochower}}]{carpet-baker2006a} +\bibinfo{author}{\bibfnamefont{J.~G.} \bibnamefont{Baker}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Campanelli}}, + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Pretorius}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Zlochower}}, + \emph{\bibinfo{title}{Comparisons of binary black hole merger waveforms}}, + \bibinfo{journal}{Class. Quantum Grav.} \textbf{\bibinfo{volume}{24}}, + \bibinfo{pages}{S25} (\bibinfo{year}{2007}), \eprint{arXiv:gr-qc/0701016}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0701016}. + +\bibitem[{\citenamefont{Pazos et~al.}(2007)\citenamefont{Pazos, Dorband, Nagar, + Palenzuela, Schnetter, and Tiglio}}]{carept-pazos2006a} +\bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Pazos}}, + \bibinfo{author}{\bibfnamefont{E.~N.} \bibnamefont{Dorband}}, + \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Nagar}}, + \bibinfo{author}{\bibfnamefont{C.}~\bibnamefont{Palenzuela}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Tiglio}}, + \emph{\bibinfo{title}{How far away is far enough for extracting numerical + waveforms, and how much do they depend on the extraction method?}}, + \bibinfo{journal}{Class. Quantum Grav.} \textbf{\bibinfo{volume}{24}}, + \bibinfo{pages}{S341} (\bibinfo{year}{2007}), \eprint{arXiv:gr-qc/0612149}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0612149}. + +\bibitem[{\citenamefont{Szil{\'a}gyi et~al.}(2007)\citenamefont{Szil{\'a}gyi, + Pollney, Rezzolla, Thornburg, and Winicour}}]{carpet-szilagyi2006a} +\bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Szil{\'a}gyi}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Thornburg}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Winicour}}, + \emph{\bibinfo{title}{An explicit harmonic code for black-hole evolution + using excision}}, \bibinfo{journal}{Class. Quantum Grav.} + \textbf{\bibinfo{volume}{24}}, \bibinfo{pages}{S275} (\bibinfo{year}{2007}), + \eprint{arXiv:gr-qc/0612150}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0612150}. + +\bibitem[{\citenamefont{Baiotti et~al.}(2007)\citenamefont{Baiotti, Hawke, and + Rezzolla}}]{carpet-baiotti2006b} +\bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Baiotti}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hawke}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \emph{\bibinfo{title}{On the gravitational radiation from the collapse of + neutron stars to rotating black holes}}, \bibinfo{journal}{Class. Quantum + Grav.} \textbf{\bibinfo{volume}{24}}, \bibinfo{pages}{S187} + (\bibinfo{year}{2007}), \eprint{arXiv:gr-qc/0701043}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0701043}. + +\bibitem[{\citenamefont{Ott et~al.}(2007{\natexlab{a}})\citenamefont{Ott, + Dimmelmeier, Marek, Janka, Zink, Hawke, and Schnetter}}]{carpet-ott2006b} +\bibinfo{author}{\bibfnamefont{C.~D.} \bibnamefont{Ott}}, + \bibinfo{author}{\bibfnamefont{H.}~\bibnamefont{Dimmelmeier}}, + \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Marek}}, + \bibinfo{author}{\bibfnamefont{H.-T.} \bibnamefont{Janka}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Zink}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hawke}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \emph{\bibinfo{title}{Rotating collapse of stellar iron cores in general + relativity}}, \bibinfo{journal}{Class. Quantum Grav.} + \textbf{\bibinfo{volume}{24}}, \bibinfo{pages}{S139} + (\bibinfo{year}{2007}{\natexlab{a}}), \eprint{arXiv:astro-ph/0612638}, + \urlprefix\url{http://arxiv.org/abs/astro-ph/0612638}. + +\bibitem[{\citenamefont{Zink et~al.}(2007)\citenamefont{Zink, Stergioulas, + Hawke, Ott, Schnetter, and M{\"u}ller}}]{carpet-zink2006a} +\bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Zink}}, + \bibinfo{author}{\bibfnamefont{N.}~\bibnamefont{Stergioulas}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hawke}}, + \bibinfo{author}{\bibfnamefont{C.~D.} \bibnamefont{Ott}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{M{\"u}ller}}, + \emph{\bibinfo{title}{Non-axisymmetric instability and fragmentation of + general relativistic quasitoroidal stars}}, \bibinfo{journal}{Phys. Rev. D} + \textbf{\bibinfo{volume}{76}}, \bibinfo{pages}{024019} + (\bibinfo{year}{2007}), \eprint{arXiv:astro-ph/0611601}, + \urlprefix\url{http://arxiv.org/abs/astro-ph/0611601}. + +\bibitem[{\citenamefont{Br{\"u}gmann + et~al.}(2008{\natexlab{b}})\citenamefont{Br{\"u}gmann, Gonz{\'a}lez, Hannam, + Husa, Sperhake, and Tichy}}]{carpet-bruegmann2006a} +\bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Br{\"u}gmann}}, + \bibinfo{author}{\bibfnamefont{J.~A.} \bibnamefont{Gonz{\'a}lez}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Hannam}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Husa}}, + \bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{W.}~\bibnamefont{Tichy}}, + \emph{\bibinfo{title}{Calibration of moving puncture simulations}}, + \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{77}}, + \bibinfo{pages}{024027} (\bibinfo{year}{2008}{\natexlab{b}}), + \eprint{arXiv:gr-qc/0610128}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0610128}. + +\bibitem[{\citenamefont{Reisswig et~al.}(2007)\citenamefont{Reisswig, Bishop, + Lai, Thornburg, and Szil{\'a}gyi}}]{carpet-reisswig2006a} +\bibinfo{author}{\bibfnamefont{C.}~\bibnamefont{Reisswig}}, + \bibinfo{author}{\bibfnamefont{N.~T.} \bibnamefont{Bishop}}, + \bibinfo{author}{\bibfnamefont{C.~W.} \bibnamefont{Lai}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Thornburg}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Szil{\'a}gyi}}, + \emph{\bibinfo{title}{Characteristic evolutions in numerical relativity using + six angular patches}}, \bibinfo{journal}{Class. Quantum Grav.} + \textbf{\bibinfo{volume}{24}}, \bibinfo{pages}{S327} (\bibinfo{year}{2007}), + \eprint{arXiv:gr-qc/0610019}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0610019}. + +\bibitem[{\citenamefont{Ott et~al.}(2007{\natexlab{b}})\citenamefont{Ott, + Dimmelmeier, Marek, Janka, Hawke, Zink, and Schnetter}}]{carpet-ott2006a} +\bibinfo{author}{\bibfnamefont{C.~D.} \bibnamefont{Ott}}, + \bibinfo{author}{\bibfnamefont{H.}~\bibnamefont{Dimmelmeier}}, + \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Marek}}, + \bibinfo{author}{\bibfnamefont{H.-T.} \bibnamefont{Janka}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hawke}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Zink}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \emph{\bibinfo{title}{{3D} collapse of rotating stellar iron cores in general + relativity including deleptonization and a nuclear equation of state}}, + \bibinfo{journal}{Phys. Rev. Lett.} \textbf{\bibinfo{volume}{98}}, + \bibinfo{pages}{261101} (\bibinfo{year}{2007}{\natexlab{b}}), + \eprint{arXiv:astro-ph/0609819}, + \urlprefix\url{http://arxiv.org/abs/astro-ph/0609819}. + +\bibitem[{\citenamefont{Baiotti and Rezzolla}(2006)}]{carpet-baiotti2006a} +\bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Baiotti}} \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \emph{\bibinfo{title}{Challenging the paradigm of singularity excision in + gravitational collapse}}, \bibinfo{journal}{Phys. Rev. Lett.} + \textbf{\bibinfo{volume}{97}}, \bibinfo{pages}{141101} + (\bibinfo{year}{2006}), \eprint{arXiv:gr-qc/0608113}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0608113}. + +\bibitem[{\citenamefont{Dorband et~al.}(2006)\citenamefont{Dorband, Berti, + Diener, Schnetter, and Tiglio}}]{carpet-dorband2006a} +\bibinfo{author}{\bibfnamefont{E.~N.} \bibnamefont{Dorband}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Berti}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Tiglio}}, + \emph{\bibinfo{title}{A numerical study of the quasinormal mode excitation of + kerr black holes}}, \bibinfo{journal}{Phys. Rev. D} + \textbf{\bibinfo{volume}{74}}, \bibinfo{pages}{084028} + (\bibinfo{year}{2006}), \eprint{arXiv:gr-qc/0608091}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0608091}. + +\bibitem[{\citenamefont{L{\"o}ffler et~al.}(2006)\citenamefont{L{\"o}ffler, + Rezzolla, and Ansorg}}]{carpet-loeffler2006a} +\bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{L{\"o}ffler}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Ansorg}}, + \emph{\bibinfo{title}{Numerical evolutions of a black hole-neutron star + system in full general relativity: Head-on collision}}, + \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{74}}, + \bibinfo{pages}{104018} (\bibinfo{year}{2006}), \eprint{arXiv:gr-qc/0606104}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0606104}. + +\bibitem[{\citenamefont{Sperhake}(2007)}]{carpet-sperhake2006a} +\bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, + \emph{\bibinfo{title}{Binary black-hole evolutions of excision and puncture + data}}, \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{76}}, + \bibinfo{pages}{104015} (\bibinfo{year}{2007}), \eprint{arXiv:gr-qc/0606079}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0606079}. + +\bibitem[{\citenamefont{Schnetter + et~al.}(2006{\natexlab{a}})\citenamefont{Schnetter, Krishnan, and + Beyer}}]{carpet-schnetter2006b} +\bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Krishnan}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Beyer}}, + \emph{\bibinfo{title}{Introduction to dynamical horizons in numerical + relativity}}, \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{74}}, + \bibinfo{pages}{024028} (\bibinfo{year}{2006}{\natexlab{a}}), + \eprint{arXiv:gr-qc/0604015}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0604015}. + +\bibitem[{\citenamefont{Sopuerta et~al.}(2006)\citenamefont{Sopuerta, Sperhake, + and Laguna}}]{carpet-sopuerta2006a} +\bibinfo{author}{\bibfnamefont{C.~F.} \bibnamefont{Sopuerta}}, + \bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Laguna}}, + \emph{\bibinfo{title}{Hydro-without-hydro framework for simulations of black + hole-neutron star binaries}}, \bibinfo{journal}{Class. Quantum Grav.} + \textbf{\bibinfo{volume}{23}}, \bibinfo{pages}{S579} (\bibinfo{year}{2006}), + \eprint{arXiv:gr-qc/0605018}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0605018}. + +\bibitem[{\citenamefont{Schnetter + et~al.}(2006{\natexlab{b}})\citenamefont{Schnetter, Diener, Dorband, and + Tiglio}}]{carpet-schnetter2006a} +\bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, + \bibinfo{author}{\bibfnamefont{E.~N.} \bibnamefont{Dorband}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Tiglio}}, + \emph{\bibinfo{title}{A multi-block infrastructure for three-dimensional + time-dependent numerical relativity}}, \bibinfo{journal}{Class. Quantum + Grav.} \textbf{\bibinfo{volume}{23}}, \bibinfo{pages}{S553} + (\bibinfo{year}{2006}{\natexlab{b}}), \eprint{arXiv:gr-qc/0602104}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0602104}. + +\bibitem[{\citenamefont{Diener et~al.}(2007)\citenamefont{Diener, Dorband, + Schnetter, and Tiglio}}]{carpet-diener2005b} +\bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, + \bibinfo{author}{\bibfnamefont{E.~N.} \bibnamefont{Dorband}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Tiglio}}, + \emph{\bibinfo{title}{Optimized high-order derivative and dissipation + operators satisfying summation by parts, and applications in + three-dimensional multi-block evolutions}}, \bibinfo{journal}{J. Sci. + Comput.} \textbf{\bibinfo{volume}{32}}, \bibinfo{pages}{109} + (\bibinfo{year}{2007}), \eprint{arXiv:gr-qc/0512001}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0512001}. + +\bibitem[{\citenamefont{Diener et~al.}(2006)\citenamefont{Diener, Herrmann, + Pollney, Schnetter, Seidel, Takahashi, Thornburg, and + Ventrella}}]{carpet-diener2005a} +\bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Seidel}}, + \bibinfo{author}{\bibfnamefont{R.}~\bibnamefont{Takahashi}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Thornburg}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Ventrella}}, + \emph{\bibinfo{title}{Accurate evolution of orbiting binary black holes}}, + \bibinfo{journal}{Phys. Rev. Lett.} \textbf{\bibinfo{volume}{96}}, + \bibinfo{pages}{121101} (\bibinfo{year}{2006}), \eprint{arXiv:gr-qc/0512108}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0512108}. + +\bibitem[{\citenamefont{Sperhake et~al.}(2005)\citenamefont{Sperhake, Kelly, + Laguna, Smith, and Schnetter}}]{carpet-sperhake2005a} +\bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Kelly}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Laguna}}, + \bibinfo{author}{\bibfnamefont{K.~L.} \bibnamefont{Smith}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \emph{\bibinfo{title}{Black hole head-on collisions and gravitational waves + with fixed mesh-refinement and dynamic singularity excision}}, + \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{71}}, + \bibinfo{pages}{124042} (\bibinfo{year}{2005}), \eprint{arXiv:gr-qc/0503071}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0503071}. + +\bibitem[{\citenamefont{Zink et~al.}(2006)\citenamefont{Zink, Stergioulas, + Hawke, Ott, Schnetter, and M{\"u}ller}}]{carpet-zink2005a} +\bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Zink}}, + \bibinfo{author}{\bibfnamefont{N.}~\bibnamefont{Stergioulas}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hawke}}, + \bibinfo{author}{\bibfnamefont{C.~D.} \bibnamefont{Ott}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{M{\"u}ller}}, + \emph{\bibinfo{title}{Formation of supermassive black holes through + fragmentation of torodial supermassive stars}}, \bibinfo{journal}{Phys. Rev. + Lett.} \textbf{\bibinfo{volume}{96}}, \bibinfo{pages}{161101} + (\bibinfo{year}{2006}), \eprint{arXiv:gr-qc/0501080}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0501080}. + +\bibitem[{\citenamefont{Baiotti et~al.}(2005)\citenamefont{Baiotti, Hawke, + Rezzolla, and Schnetter}}]{carpet-baiotti2004a} +\bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Baiotti}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hawke}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \emph{\bibinfo{title}{Gravitational-wave emission from rotating gravitational + collapse in three dimensions}}, \bibinfo{journal}{Phys. Rev. Lett.} + \textbf{\bibinfo{volume}{95}}, \bibinfo{pages}{131101} + (\bibinfo{year}{2005}), \eprint{arXiv:gr-qc/0503016}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0503016}. + +\bibitem[{\citenamefont{Schnetter et~al.}(2004)\citenamefont{Schnetter, Hawley, + and Hawke}}]{carpet-schnetter2003a} +\bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibinfo{author}{\bibfnamefont{S.~H.} \bibnamefont{Hawley}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hawke}}, + \emph{\bibinfo{title}{Evolutions in 3d numerical relativity using fixed mesh + refinement}}, \bibinfo{journal}{Class. Quantum Grav.} + \textbf{\bibinfo{volume}{21}}, \bibinfo{pages}{1465} (\bibinfo{year}{2004}), + \eprint{arXiv:gr-qc/0310042}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0310042}. + +\end{thebibliography} diff --git a/Carpet/CarpetWeb/publications/citations-refereed.bib b/Carpet/CarpetWeb/publications/citations-refereed.bib new file mode 100644 index 000000000..fb2d5c8e9 --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-refereed.bib @@ -0,0 +1,1324 @@ + +@Article{ carpet-cadonati2009a, + status = {refereed}, + author = {Benjamin Aylott and John G. Baker and William D. Boggs and + Michael Boyle and Patrick R. Brady and Duncan A. Brown and + Bernd Br{\"u}gmann and Luisa T. Buchman and Alessandra + Buonanno and Laura Cadonati and Jordan Camp and Manuela + Campanelli and Joan Centrella and Shourov Chatterji and + Nelson Christensen and Tony Chu and Peter Diener and Nils + Dorband and Zachariah B. Etienne and Joshua Faber and + Stephen Fairhurst and Benjamin Farr and Sebastian Fischetti + and Gianluca Guidi and Lisa M. Goggin and Mark Hannam and + Frank Herrmann and Ian Hinder and Sascha Husa and Vicky + Kalogera and Drew Keppel and Lawrence E. Kidder and Bernard + J. Kelly and Badri Krishnan and Pablo Laguna and Carlos O. + Lousto and Ilya Mandel and Pedro Marronetti and Richard + Matzner and Sean T. McWilliams and Keith D. Matthews and R. + Adam Mercer and Satyanarayan R. P. Mohapatra and Abdul H. + Mrou{\'e} and Hiroyuki Nakano and Evan Ochsner and Yi Pan + and Larne Pekowsky and Harald P. Pfeiffer and Denis Pollney + and Frans Pretorius and Vivien Raymond and Christian + Reisswig and Luciano Rezzolla and Oliver Rinne and Craig + Robinson and Christian R{\"o}ver and Luc{\'i}a + Santamar{\'i}a and Bangalore Sathyaprakash and Mark A. + Scheel and Erik Schnetter and Jennifer Seiler and Stuart L. + Shapiro and Deirdre Shoemaker and Ulrich Sperhake and + Alexander Stroeer and Riccardo Sturani and Wolfgang Tichy + and Yuk Tung Liu and Marc van der Sluys and James R. van + Meter and Ruslan Vaulin and Alberto Vecchio and John Veitch + and Andrea Vicer{\'e} and John T. Whelan and Yosef Zlochower}, + title = {Status of {NINJA}: the {Numerical} {INJection} {Analysis} + project}, + journal = {Class. Quantum Grav.}, + year = 2009, + volume = 26, + pages = 114008, + eprint = {arXiv:0901.4399 [gr-qc]}, + url = {http://arxiv.org/abs/0905.4227}, + receiveddate = {2009-03-10}, + fulltexturl = {http://stacks.iop.org/CQG/26/114008}, + doi = {10.1088/0264-9381/26/11/114008} +} + +@Article{ carpet-baiotti2009a, + status = {refereed}, + author = {Luca Baiotti and Bruno Giacomazzo and Luciano Rezzolla}, + title = {Accurate evolutions of inspiralling neutron-star binaries: + assessment of the truncation error}, + journal = {Class. Quantum Grav.}, + year = 2009, + volume = 26, + pages = 114005, + eprint = {arXiv:0901.4955 [gr-qc]}, + url = {http://arxiv.org/abs/0901.4955}, + receiveddate = {2009-02-02}, + doi = {10.1088/0264-9381/26/11/114005} +} + +@Article{ carpet-aylott2009a, + status = {refereed}, + author = {Benjamin Aylott and John G. Baker and William D. Boggs and + Michael Boyle and Patrick R. Brady and Duncan A. Brown and + Bernd Br{\"u}gmann and Luisa T. Buchman and Alessandra + Buonanno and Laura Cadonati and Jordan Camp and Manuela + Campanelli and Joan Centrella and Shourov Chatterji and + Nelson Christensen and Tony Chu and Peter Diener and Nils + Dorband and Zachariah B. Etienne and Joshua Faber and + Stephen Fairhurst and Benjamin Farr and Sebastian Fischetti + and Gianluca Guidi and Lisa M. Goggin and Mark Hannam and + Frank Herrmann and Ian Hinder and Sascha Husa and Vicky + Kalogera and Drew Keppel and Lawrence E. Kidder and Bernard + J. Kelly and Badri Krishnan and Pablo Laguna and Carlos O. + Lousto and Ilya Mandel and Pedro Marronetti and Richard + Matzner and Sean T. McWilliams and Keith D. Matthews and R. + Adam Mercer and Satyanarayan R. P. Mohapatra and Abdul H. + Mrou{\'e} and Hiroyuki Nakano and Evan Ochsner and Yi Pan + and Larne Pekowsky and Harald P. Pfeiffer and Denis Pollney + and Frans Pretorius and Vivien Raymond and Christian + Reisswig and Luciano Rezzolla and Oliver Rinne and Craig + Robinson and Christian R{\"o}ver and Luc{\'i}a + Santamar{\'i}a and Bangalore Sathyaprakash and Mark A. + Scheel and Erik Schnetter and Jennifer Seiler and Stuart L. + Shapiro and Deirdre Shoemaker and Ulrich Sperhake and + Alexander Stroeer and Riccardo Sturani and Wolfgang Tichy + and Yuk Tung Liu and Marc van der Sluys and James R. van + Meter and Ruslan Vaulin and Alberto Vecchio and John Veitch + and Andrea Vicer{\'e} and John T. Whelan and Yosef Zlochower}, + title = {Testing gravitational-wave searches with numerical + relativity waveforms: Results from the first {Numerical} + {INJection} {Analysis} ({NINJA}) project}, + journal = {Class. Quantum Grav.}, + year = 2009, + volume = 26, + pages = 165008, + eprint = {arXiv:0901.4399 [gr-qc]}, + url = {http://arxiv.org/abs/0901.4399}, + receiveddate = {2009-01-29}, + doi = {10.1088/0264-9381/26/16/165008} +} + +@Article{ carpetresult-hannam2008a, + status = {refereed}, + author = {Mark Hannam and Sascha Husa and John G. Baker and Michael + Boyle and Bernd Br{\"u}gmann and Tony Chu and Nils Dorband + and Frank Herrmann and Ian Hinder and Bernard J. Kelly and + Lawrence E. Kidder and Pablo Laguna and Keith D. Matthews + and James R. {van Meter} and Harald P. Pfeiffer and Denis + Pollney and Christian Reisswig and Mark A. Scheel and + Deirdre Shoemaker}, + title = {The {Samurai} Project: verifying the consistency of + black-hole-binary waveforms for gravitational-wave + detection}, + journal = {Phys. Rev. D}, + year = 2009, + volume = 79, + pages = 084025, + eprint = {arXiv:0901.2437 [gr-qc]}, + url = {http://arxiv.org/abs/0901.2437}, + receiveddate = {2009-01-20}, + doi = {10.1103/PhysRevD.79.084025} +} + +@Article{ carpet-rezzolla2008a, + status = {refereed}, + author = {Luciano Rezzolla}, + title = {Modelling the final state from binary black-hole + coalescences}, + journal = {Class. Quantum Grav.}, + year = 2009, + volume = 26, + pages = 094023, + eprint = {arXiv:0812.2325 [gr-qc]}, + url = {http://arxiv.org/abs/0812.2325}, + receiveddate = {2008-12-10}, + doi = {10.1088/0264-9381/26/9/094023} +} + +@Article{ carpet-etienne2008a, + status = {refereed}, + author = {Zachariah B. Etienne and Yuk Tung Liu and Stuart L. + Shapiro and and Thomas W. Baumgarte}, + title = {General relativistic simulations of + black-hole-neutron-star mergers: Effects of black-hole + spin}, + journal = {Phys. Rev. D}, + year = 2009, + volume = 79, + pages = 044024, + eprint = {arXiv:0812.2245 [astro-ph]}, + url = {http://arxiv.org/abs/0812.2245}, + receiveddate = {2008-12-09}, + doi = {10.1103/PhysRevD.79.044024} +} + +@Article{ carpet-campanelli2008b, + status = {refereed}, + author = {Manuela Campanelli and Carlos O. Lousto and Yosef + Zlochower}, + title = {Algebraic Classification of Numerical Spacetimes and + Black-Hole-Binary Remnants}, + journal = {Phys. Rev. D}, + year = 2009, + volume = 79, + pages = 084012, + eprint = {arXiv:0811.3006 [gr-qc]}, + url = {http://arxiv.org/abs/0811.3006}, + receiveddate = {2008-11-18}, + doi = {10.1103/PhysRevD.79.084012} +} + +@Article{ carpet-korobkin2008a, + status = {refereed}, + author = {Oleg Korobkin and Burak Aksoylu and Michael Holst and + Enrique Pazos and Manuel Tiglio}, + title = {Solving the Einstein constraint equations on multi-block + triangulations using finite element methods}, + journal = {Class. Quantum Grav.}, + year = 2009, + volume = 26, + pages = 145007, + eprint = {arXiv:0801.1823 [gr-qc]}, + url = {http://arxiv.org/abs/0801.1823}, + receiveddate = {2008-11-05}, + doi = {10.1088/0264-9381/26/14/145007} +} + +@Article{ carpet-brown2007b, + status = {refereed}, + author = {David Brown and Peter Diener and Olivier Sarbach and Erik + Schnetter and Manuel Tiglio}, + title = {Turduckening black holes: an analytical and computational + study}, + journal = {Phys. Rev. D}, + year = 2009, + volume = 79, + pages = 044023, + eprint = {arXiv:0809.3533 [gr-qc]}, + url = {http://arxiv.org/abs/0809.3533}, + receiveddate = {2008-09-20}, + oldfulltexturl= {http://link.aps.org/doi/10.1103/PhysRevD.79.044023}, + doi = {10.1103/PhysRevD.79.044023} +} + +@Article{ carpet-baiotti2008b, + status = {refereed}, + author = {Luca Baiotti and Sebastiano Bernuzzi and Giovanni Corvino + and Roberto De Pietri and Alessandro Nagar}, + title = {Gravitational-wave extraction from neutron-star + oscillations: Comparing linear and nonlinear techniques}, + journal = {Phys. Rev. D}, + year = 2009, + volume = 79, + pages = 024002, + eprint = {arXiv:0808.4002 [gr-qc]}, + url = {http://arxiv.org/abs/0808.4002}, + receiveddate = {2008-08-27}, + oldfulltexturl= {http://link.aps.org/doi/10.1103/PhysRevD.79.024002}, + doi = {10.1103/PhysRevD.79.024002} +} + +@Article{ carpet-campanelli2008a, + status = {refereed}, + author = {Manuela Campanelli and Carlos O. Lousto and Hiroyuki + Nakano and Yosef Zlochower}, + title = {Comparison of Numerical and Post-{Newtonian} Waveforms for + Generic Precessing Black-Hole Binaries}, + journal = {Phys. Rev. D}, + year = 2009, + volume = 79, + pages = 084010, + eprint = {arXiv:0808.0713 [gr-qc]}, + url = {http://arxiv.org/abs/0808.0713}, + receiveddate = {2008-08-05}, + doi = {10.1103/PhysRevD.79.084010} +} + +@Article{ carpet-healy2008a, + status = {refereed}, + author = {James Healy and Frank Herrmann and Ian Hinder and Deirdre + M. Shoemaker and Pablo Laguna and and Richard A. Matzner}, + title = {Superkicks in Hyperbolic Encounters of Binary Black + Holes}, + journal = {Phys. Rev. Lett.}, + year = 2009, + volume = 102, + pages = 041101, + eprint = {arXiv:0807.3292 [gr-qc]}, + url = {http://arxiv.org/abs/0807.3292}, + receiveddate = {2008-07-22}, + oldfulltexturl= {http://link.aps.org/doi/10.1103/PhysRevLett.102.041101}, + doi = {10.1103/PhysRevLett.102.041101} +} + +@Article{ carpet-sperhake2008a, + status = {refereed}, + author = {Ulrich Sperhake and Vitor Cardoso and Frans Pretorius and + Emanuele Berti and and Jos{\'e} A. Gonz{\'a}lez}, + title = {High-Energy Collision of Two Black Holes}, + journal = {Phys. Rev. Lett.}, + year = 2008, + volume = 101, + pages = 161101, + eprint = {arXiv:0806.1738 [gr-qc]}, + url = {http://arxiv.org/abs/0806.1738}, + receiveddate = {2008-06-10}, + oldfulltexturl= {http://link.aps.org/doi/10.1103/PhysRevLett.101.161101}, + doi = {10.1103/PhysRevLett.101.161101} +} + +@Article{ carpet-gualtieri2008a, + status = {refereed}, + author = {Leonardo Gualtieri and Emanuele Berti and Vitor Cardoso + and Ulrich Sperhake}, + title = {Transformation of the multipolar components of + gravitational radiation under rotations and boosts}, + journal = {Phys. Rev. D}, + year = 2008, + volume = 78, + pages = 044024, + eprint = {arXiv:0805.1017 [gr-qc]}, + url = {http://arxiv.org/abs/0805.1017}, + receiveddate = {2008-05-08}, + oldfulltexturl= {http://link.aps.org/doi/10.1103/PhysRevD.78.044024}, + doi = {10.1103/PhysRevD.78.044024} +} + +@Article{ carpet-lousto2008a, + status = {refereed}, + author = {Carlos O. Lousto and Yosef Zlochower}, + title = {Modeling gravitational recoil from precessing + highly-spinning unequal-mass black-hole binaries}, + journal = {Phys. Rev. D}, + year = 2009, + volume = 79, + pages = 064018, + eprint = {arXiv:0805.0159 [gr-qc]}, + url = {http://arxiv.org/abs/0805.0159}, + receiveddate = {2008-05-01}, + doi = {10.1103/PhysRevD.79.064018} +} + +@Article{ carpetresult-benger2007a, + status = {refereed}, + author = {Werner Benger}, + title = {Colliding galaxies, rotating neutron stars and merging + black holes -- visualizing high dimensional datasets on + arbitrary meshes}, + journal = {New J. Phys.}, + year = 2008, + volume = 10, + pages = 125004, + receiveddate = {2008-04-14}, + url = {http://www.iop.org/EJ/ abstract/1367-2630/10/12/125004}, + doi = {10.1088/1367-2630/10/12/125004} +} + +@Article{ carpet-baiotti2008a, + status = {refereed}, + author = {Luca Baiotti and Bruno Giacomazzo and Luciano Rezzolla}, + title = {Accurate evolutions of inspiralling neutron-star binaries: + Prompt and delayed collapse to a black hole}, + journal = {Phys. Rev. D}, + year = 2008, + volume = 78, + pages = 084033, + eprint = {arXiv:0804.0594 [gr-qc]}, + url = {http://arxiv.org/abs/0804.0594}, + receiveddate = {2008-04-03}, + oldfulltexturl= {http://link.aps.org/doi/10.1103/PhysRevD.78.084033}, + doi = {10.1103/PhysRevD.78.084033} +} + +@Article{ carpet-dain2008a, + status = {refereed}, + author = {Sergio Dain and Carlos O. Lousto and and Yosef Zlochower}, + title = {Extra-large remnant recoil velocities and spins from + near-extremal-{Bowen}-{York}-spin black-hole binaries}, + journal = {Phys. Rev. D}, + year = 2008, + volume = 78, + pages = 024039, + eprint = {arXiv:0803.0351 [gr-qc]}, + url = {http://arxiv.org/abs/0803.0351}, + receiveddate = {2008-03-03}, + oldfulltexturl= {http://link.aps.org/doi/10.1103/PhysRevD.78.024039}, + doi = {10.1103/PhysRevD.78.024039} +} + +@Article{ carpet-seiler2008a, + status = {refereed}, + author = {Jennifer Seiler and B{\'e}la Szil{\'a}gyi and Denis + Pollney and Luciano Rezzolla}, + title = {Constraint-preserving boundary treatment for a harmonic + formulation of the Einstein equations}, + journal = {Class. Quantum Grav.}, + year = 2008, + volume = 25, + pages = 175020, + eprint = {arXiv:0802.3341 [gr-qc]}, + url = {http://arxiv.org/abs/0802.3341}, + receiveddate = {2008-02-22}, + oldfulltexturl= {http://stacks.iop.org/CQG/25/175020}, + doi = {10.1088/0264-9381/25/17/175020} +} + +@Article{ carpet-washik2008a, + status = {refereed}, + author = {Matthew C. Washik and James Healy and Frank Herrmann and + Ian Hinder and Deirdre M. Shoemaker and Pablo Laguna and + Richard A. Matzner}, + title = {Binary-Black-Hole Encounters, Gravitational Bursts, and + Maximum Final Spin}, + journal = {Phys. Rev. Lett.}, + year = 2008, + volume = 101, + pages = 061102, + eprint = {arXiv:0802.2520 [gr-qc]}, + url = {http://arxiv.org/abs/0802.2520}, + receiveddate = {2008-02-20}, + oldfulltexturl= {http://link.aps.org/doi/10.1103/ PhysRevLett.101.061102}, + doi = {10.1103/PhysRevLett.101.061102} +} + +@Article{ carpet-bentivegna2008a, + status = {refereed}, + author = {Eloisa Bentivegna and Deirdre M. Shoemaker and Ian Hinder + and and Frank Herrmann}, + title = {Probing the binary black hole merger regime with scalar + perturbations}, + journal = {Phys. Rev. D}, + year = 2008, + volume = 77, + pages = 124016, + eprint = {arXiv:0801.3478 [gr-qc]}, + url = {http://arxiv.org/abs/0801.3478}, + receiveddate = {2008-01-24}, + oldfulltexturl= {http://link.aps.org/doi/10.1103/PhysRevD.77.124016}, + doi = {10.1103/PhysRevD.77.124016} +} + +@Article{ carpet-rezzolla2007c, + status = {refereed}, + author = {Luciano Rezzolla and Enrico Barausse and Ernst Nils + Dorband and Denis Pollney and Christian Reisswig and + Jennifer Seiler and Sascha Husa}, + title = {Final spin from the coalescence of two black holes}, + journal = {Phys. Rev. D}, + year = 2008, + volume = 78, + pages = 044002, + eprint = {arXiv:0712.3541 [gr-qc]}, + url = {http://arxiv.org/abs/0712.3541}, + receiveddate = {2007-12-22}, + oldfulltexturl= {http://link.aps.org/doi/10.1103/PhysRevD.78.044002}, + doi = {10.1103/PhysRevD.78.044002} +} + +@Article{ carpet-damour2007a, + status = {refereed}, + author = {Thibault Damour and Alessandro Nagar and Ernst Nils + Dorband and Denis Pollney and Luciano Rezzolla}, + title = {Faithful effective-one-body waveforms of equal-mass + coalescing black-hole binaries}, + journal = {Phys. Rev. D}, + year = 2008, + volume = 77, + pages = 084017, + eprint = {arXiv:0712.3003 [gr-qc]}, + url = {http://arxiv.org/abs/0712.3003}, + receiveddate = {2007-12-18}, + oldfulltexturl= {http://link.aps.org/doi/10.1103/PhysRevD.77.084017}, + doi = {10.1103/PhysRevD.77.084017} +} + +@Article{ carpet-shoemaker2007a, + status = {refereed}, + author = {Deirdre M. Shoemaker and Birjoo Vaishnav and Ian Hinder + and Frank Herrmann}, + title = {Numerical relativity meets data analysis: spinning binary + black hole case}, + journal = {Class. Quantum Grav.}, + year = 2008, + volume = 25, + pages = 114047, + eprint = {arXiv:0802.4427 [gr-qc]}, + url = {http://arxiv.org/abs/0802.4427}, + receiveddate = {2007-12-14}, + oldfulltexturl= {http://stacks.iop.org/CQG/25/114047}, + doi = {10.1088/0264-9381/25/11/114047} +} + +@Article{ carpet-zink2007a, + status = {refereed}, + author = {Burkhard Zink and Erik Schnetter and Manuel Tiglio}, + title = {Multi-patch methods in general relativistic astrophysics - + {I.} {Hydrodynamical} flows on fixed backgrounds}, + journal = {Phys. Rev. D }, + year = 2008, + volume = 77, + pages = 103015, + eprint = {arXiv:0712.0353 [astro-ph]}, + url = {http://arxiv.org/abs/0712.0353}, + receiveddate = {2007-12-04}, + oldfulltexturl= {http://link.aps.org/abstract/PRD/v77/e103015}, + doi = {10.1103/PhysRevD.77.103015} +} + +@Article{ carpet-berti2007a, + status = {refereed}, + author = {Emanuele Berti and Vitor Cardoso and Jos{\'e} A. + Gonz{\'a}lez and Ulrich Sperhake and Bernd Br{\"u}gmann}, + title = {Multipolar analysis of spinning binaries}, + journal = {Class. Quantum Grav.}, + year = 2008, + volume = 25, + pages = 114035, + eprint = {arXiv:0711.1097 [gr-qc]}, + url = {http://arxiv.org/abs/0711.1097}, + receiveddate = {2007-11-07}, + oldfulltexturl= {http://stacks.iop.org/CQG/25/114035}, + doi = {10.1088/0264-9381/25/11/114035} +} + +@Article{ carpet-bode2007a, + status = {refereed}, + author = {Tanja Bode and Deirdre Shoemaker and Frank Herrmann and + Ian Hinder}, + title = {Robustness of binary black hole mergers in the presence of + spurious radiation}, + journal = {Phys. Rev. D}, + year = 2008, + volume = 78, + pages = 044027, + eprint = {arXiv:0711.0669 [gr-qc]}, + url = {http://arxiv.org/abs/0711.0669}, + receiveddate = {2007-11-06}, + oldfulltexturl= {http://link.aps.org/doi/10.1103/PhysRevD.77.044027}, + doi = {10.1103/PhysRevD.77.044027} +} + +@Article{ carpet-hinder2007a, + status = {refereed}, + author = {Ian Hinder and Birjoo Vaishnav and Frank Herrmann and + Deirdre M. Shoemaker and Pablo Laguna}, + title = {Circularization and Final Spin in Eccentric Binary Black + Hole Inspirals}, + journal = {Phys. Rev. D}, + year = 2008, + volume = 77, + pages = {081502(R)}, + eprint = {arXiv:0710.5167 [gr-qc]}, + url = {http://arxiv.org/abs/0710.5167}, + receiveddate = {2007-10-31}, + oldfulltexturl= {http://link.aps.org/doi/10.1103/PhysRevD.77.081502}, + doi = {10.1103/PhysRevD.77.081502} +} + +@Article{ carpetresult-boyle2007a, + status = {refereed}, + author = {Latham Boyle and Michael Kesden and Samaya Nissanke}, + title = {Binary black hole merger: symmetry and the spin + expansion}, + journal = {Phys. Rev. Lett.}, + year = 2008, + volume = 100, + pages = 151101, + eprint = {arXiv:0709.0299 [gr-qc]}, + url = {http://arxiv.org/abs/0709.0299}, + receiveddate = {2007-10-22}, + oldfulltexturl= {http://link.aps.org/abstract/PRL/v100/e151101}, + doi = {10.1103/PhysRevLett.100.151101} +} + +@Article{ carpet-sperhake2007a, + status = {refereed}, + author = {Ulrich Sperhake and Emanuele Berti and Vitor Cardoso and + Jos{\'e} A. Gonz{\'a}lez and Bernd Br{\"u}gmann and Marcus + Ansorg}, + title = {Eccentric binary black-hole mergers: The transition from + inspiral to plunge in general relativity}, + journal = {Phys. Rev. D}, + year = 2008, + volume = 78, + pages = 064069, + eprint = {arXiv:0710.3823 [gr-qc]}, + url = {http://arxiv.org/abs/0710.3823}, + receiveddate = {2007-10-22}, + oldfulltexturl= {http://link.aps.org/doi/10.1103/PhysRevD.78.064069}, + doi = {10.1103/PhysRevD.78.064069} +} + +@Article{ carpet-rezzolla2007b, + status = {refereed}, + author = {Luciano Rezzolla and Peter Diener and Ernst Nils Dorband + and Denis Pollney and Christian Reisswig and Erik Schnetter + and Jennifer Seiler}, + title = {The final spin from the coalescence of aligned-spin + black-hole binaries}, + journal = {Astrophys. J. Lett.}, + year = 2008, + volume = 674, + pages = {L29-L32}, + eprint = {arXiv:0710.3345 [gr-qc]}, + url = {http://arxiv.org/abs/0710.3345}, + receiveddate = {2007-10-18}, + oldfulltexturl= {http://www.journals.uchicago.edu/doi/abs/10.1086/528935}, + doi = {10.1086/528935} +} + +@Article{ carpet-ajith2007b, + status = {refereed}, + author = {Parameswaran Ajith and Stanislav Babak and Yanbei Chen and + Martin Hewitson and Badri Krishnan and Alicia M. Sintes and + John T. Whelan and Bernd Br{\"u}gmann and Peter Diener and + Ernst Nils Dorband and Jos{\'e} Gonz{\'a}lez and Mark + Hannam and Sascha Husa and Denis Pollney and Luciano + Rezzolla and Luc{\'i}a Santamar{\'i}a and Ulrich Sperhake + and Jonathan Thornburg}, + title = {A template bank for gravitational waveforms from + coalescing binary black holes: {I.} non-spinning binaries}, + journal = {Phys. Rev. D}, + year = 2008, + volume = 77, + pages = 104017, + eprint = {arXiv:0710.2335 [gr-qc]}, + url = {http://arxiv.org/abs/0710.2335}, + receiveddate = {2007-10-15}, + oldfulltexturl= {http://link.aps.org/abstract/PRD/v77/e104017}, + doi = {10.1103/PhysRevD.77.104017} +} + +@Article{ carpet-campanelli2007c, + status = {refereed}, + author = {Manuela Campanelli and Carlos O. Lousto and Yosef + Zlochower}, + title = {Close encounters of three black holes}, + journal = {Phys. Rev. D}, + year = 2008, + volume = 77, + pages = {101501(5)}, + eprint = {arXiv:0710.0879 [gr-qc]}, + url = {http://arxiv.org/abs/0710.0879}, + receiveddate = {2007-10-03}, + oldfulltexturl= {http://link.aps.org/abstract/PRD/v77/e101501}, + doi = {10.1103/PhysRevD.77.101501} +} + +@Article{ carpetresult-buonanno2007a, + status = {refereed}, + author = {Alessandra Buonanno and Lawrence E. Kidder and Luis + Lehner}, + title = {Estimating the final spin of a binary black hole + coalescence}, + journal = {Phys. Rev. D}, + year = 2008, + volume = 77, + pages = 026004, + eprint = {arXiv:0709.3839 [astro-ph]}, + url = {http://arxiv.org/abs/0709.3839}, + receiveddate = {2007-09-25}, + oldfulltexturl= {http://link.aps.org/abstract/PRD/v77/e026004} +} + +@InProceedings{ carpet-stark2007a, + status = {refereed}, + author = {Dylan Stark and Gabrielle Allen and Tom Goodale and Thomas + Radke and Erik Schnetter}, + title = {An Extensible Timing Infrastructure for Adaptive + Large-scale Applications}, + booktitle = {Parallel Processing and Applied Mathematics}, + pages = {1170-1179}, + year = 2008, + editor = {Roman Wyrzykowski}, + volume = 4967, + series = {Lecture Notes in Computer Science}, + publisher = {Springer}, + eprint = {arXiv:0705.3015 [cs.PF]}, + url = {http://arxiv.org/abs/0705.3015}, + receiveddate = {2007-09-09}, + oldfulltexturl= {http://www.springerlink.com/ content/p7n0gl4308p65864/ + ?p=7a20e00c017c4c4f87c070073332888e&pi=0}, + doi = {10.1007/978-3-540-68111-3} +} + +@Article{ carpet-pollney207a, + status = {refereed}, + author = {Denis Pollney and Christian Reisswig and Luciano Rezzolla + and B{\'e}la Szil{\'a}gyi and Marcus Ansorg and Barrett + Deris and Peter Diener and Ernst Nils Dorband and Michael + Koppitz and Alessandro Nagar and Erik Schnetter}, + title = {Recoil velocities from equal-mass binary black-hole + mergers: a systematic investigation of spin-orbit aligned + configurations}, + journal = {Phys. Rev. D}, + year = 2007, + volume = 76, + pages = 124002, + eprint = {arXiv:0707.2559 [gr-qc]}, + url = {http://arxiv.org/abs/0707.2559}, + receiveddate = {2007-09-06}, + oldfulltexturl= {http://link.aps.org/abstract/PRD/v76/e124002}, + doi = {10.1103/PhysRevD.76.124002} +} + +@Article{ carpet-lousto2007a, + status = {refereed}, + author = {Carlos O. Lousto and Yosef Zlochower}, + title = {Further insight into gravitational recoil}, + journal = {Phys. Rev. D}, + year = 2008, + volume = 77, + pages = 044028, + eprint = {arXiv:0708.4048 [gr-qc]}, + url = {http://arxiv.org/abs/0708.4048}, + receiveddate = {2007-08-30}, + oldfulltexturl= {http://link.aps.org/abstract/PRD/v77/e044028}, + doi = {10.1103/PhysRevD.77.044028} +} + +@Article{ carpet-rezzolla2007a, + status = {refereed}, + author = {Luciano Rezzolla and Ernst Nils Dorband and Christian + Reisswig and Peter Diener and Denis Pollney and Erik + Schnetter and B{\'e}la Szil{\'s}gyi}, + title = {Spin Diagrams for Equal-Mass Black-Hole Binaries with + Aligned Spins}, + journal = {Astrophys. J.}, + year = 2008, + volume = 679, + pages = {1422-1426}, + eprint = {arXiv:0708.3999 [gr-qc]}, + url = {http://arxiv.org/abs/0708.3999}, + receiveddate = {2007-08-29}, + oldfulltexturl= {http://www.journals.uchicago.edu/doi/abs/10.1086/587679}, + doi = {10.1086/587679} +} + +@Article{ carpet-bruegmann2007a, + status = {refereed}, + author = {Bernd Br{\"u}gmann and Jos{\'e} A. Gonz{\'a}lez and Mark + Hannam and Sascha Husa and Ulrich Sperhake}, + title = {Exploring black hole superkicks}, + journal = {Phys. Rev. D}, + year = 2008, + volume = 77, + pages = 124047, + eprint = {arXiv:0707.0135 [gr-qc]}, + url = {http://arxiv.org/abs/0707.0135}, + receiveddate = {2007-08-07}, + oldfulltexturl= {http://link.aps.org/abstract/PRD/v77/e124047}, + doi = {10.1103/PhysRevD.77.124047} +} + +@Article{ carpet-brown2007a, + status = {refereed}, + author = {David Brown and Olivier Sarbach and Erik Schnetter and + Manuel Tiglio and Peter Diener and Ian Hawke and Denis + Pollney}, + title = {Excision without excision}, + journal = {Phys. Rev. D}, + year = 2007, + volume = 76, + pages = {081503(R)}, + eprint = {arXiv:0707.3101 [gr-qc]}, + url = {http://arxiv.org/abs/0707.3101}, + receiveddate = {2007-07-20}, + oldfulltexturl= {http://link.aps.org/abstract/PRD/v76/e081503}, + doi = {10.1103/PhysRevD.76.081503} +} + +@Article{ carpet-krishnan2007a, + status = {refereed}, + author = {Badri Krishnan and Carlos O. Lousto and Yosef Zlochower}, + title = {Quasi-Local Linear Momentum in Black-Hole Binaries}, + journal = {Phys. Rev. D }, + year = 2007, + volume = 76, + pages = {081501(R)}, + eprint = {arXiv:0707.0876 [gr-qc]}, + url = {http://arxiv.org/abs/0707.0876}, + receiveddate = {2007-07-06}, + oldfulltexturl= {http://link.aps.org/abstract/PRD/v76/e081501}, + doi = {10.1103/PhysRevD.76.081501} +} + +@Article{ carpet-herrmann2007c, + status = {refereed}, + author = {Frank Herrmann and Ian Hinder and Deirdre M. Shoemaker and + Pablo Laguna and Richard A. Matzner}, + title = {Binary Black Holes: Spin Dynamics and Gravitational + Recoil}, + journal = {Phys. Rev. D}, + year = 2007, + volume = 76, + pages = 084032, + eprint = {arXiv:0706.2541 [gr-qc]}, + url = {http://arxiv.org/abs/0706.2541}, + receiveddate = {2007-06-18}, + oldfulltexturl= {http://link.aps.org/abstract/PRD/v76/e084032}, + doi = {10.1103/PhysRevD.76.084032} +} + +@Article{ carpet-vaishnav2007a, + status = {refereed}, + author = {Birjoo Vaishnav and Ian Hinder and Frank Herrmann and + Deirdre M. Shoemaker}, + title = {Matched Filtering of Numerical Relativity Templates of + Spinning Binary Black Holes}, + journal = {Phys. Rev. D}, + year = 2007, + volume = 76, + pages = 084020, + eprint = {arXiv:0705.3829 [gr-qc]}, + url = {http://arxiv.org/abs/0705.3829}, + receiveddate = {2007-06-13}, + oldfulltexturl= {http://link.aps.org/abstract/PRD/v76/e084020}, + doi = {10.1103/PhysRevD.76.084020} +} + +@Article{ carpet-ajith2007a, + status = {refereed}, + author = {Parameswaran Ajith and Stanislav Babak and Yanbei Chen and + Martin Hewitson and Badri Krishnan and John T. Whelan and + Bernd Br{\"u}gmann and Peter Diener and Jos{\'e} González + and Mark Hannam and Sascha Husa and Michael Koppitz and + Denis Pollney and Luciano Rezzolla and Luc{\'i}a + Santamar{\'i}a and Alicia M. Sintes and Ulrich Sperhake and + Jonathan Thornburg}, + title = {Phenomenological template family for black-hole + coalescence waveforms}, + journal = {Class. Quantum Grav.}, + year = 2007, + volume = 24, + pages = {S689-S699}, + eprint = {arXiv:0704.3764 [gr-qc]}, + url = {http://arxiv.org/abs/0704.3764}, + receiveddate = {2007-04-30}, + oldfulltexturl= {http://stacks.iop.org/CQG/24/S689}, + doi = {10.1088/0264-9381/24/19/S31} +} + +@Article{ carpet-thornburg2007a, + status = {refereed}, + author = {Jonathan Thornburg and Peter Diener and Denis Pollney and + Luciano Rezzolla and Erik Schnetter and Ed Seidel and Ryoji + Takahashi}, + title = {Are moving punctures equivalent to moving black holes?}, + journal = {Class. Quantum Grav.}, + year = 2007, + volume = 24, + pages = {3911-3918}, + eprint = {arXiv:gr-qc/0701038}, + url = {http://arxiv.org/abs/gr-qc/0701038}, + receiveddate = {2007-03-22}, + oldfulltexturl= {http://stacks.iop.org/CQG/24/3911}, + doi = {10.1088/0264-9381/24/15/009} +} + +@Article{ carpet-gonzalez2007a, + status = {refereed}, + author = {Jos{\'e} A. Gonz{\'a}lez and Mark D. Hannam and Ulrich + Sperhake and Bernd Br{\"u}gmann and Sascha Husa}, + title = {Supermassive recoil velocities for binary black-hole + mergers with antialigned spins}, + journal = {Phys. Rev. Lett.}, + year = 2007, + volume = 98, + pages = 231101, + eprint = {arXiv:gr-qc/0702052}, + url = {http://arxiv.org/abs/gr-qc/0702052}, + receiveddate = {2007-02-26}, + oldfulltexturl= {http://link.aps.org/abstract/PRL/v98/e231101}, + doi = {10.1103/PhysRevLett.98.231101} +} + +@Article{ carpet-campanelli2007b, + status = {refereed}, + author = {Manuela Campanelli and Carlos O. Lousto and Yosef + Zlochower and David Merritt}, + title = {Maximum gravitational recoil}, + journal = {Phys. Rev. Lett.}, + year = 2007, + volume = 98, + pages = 231102, + eprint = {arXiv:gr-qc/0702133}, + url = {http://arxiv.org/abs/gr-qc/0702133}, + receiveddate = {2007-02-26}, + oldfulltexturl= {http://link.aps.org/abstract/PRL/v98/e231102}, + doi = {10.1103/PhysRevLett.98.231102} +} + +@Article{ carpet-campanelli2007a, + status = {refereed}, + author = {Manuela Campanelli and Carlos O. Lousto and Yosef + Zlochower and David Merritt}, + title = {Large Merger Recoils and Spin Flips From Generic + Black-Hole Binaries}, + journal = {Astrophys. J. Lett.}, + year = 2007, + volume = 659, + pages = {L5-L8}, + eprint = {arXiv:gr-qc/0701164}, + doi = {http://arxiv.org/abs/gr-qc/0701164}, + receiveddate = {2007-02-08}, + oldfulltexturl= {http://www.journals.uchicago.edu/doi/abs/10.1086/516712} +} + +@Article{ carpet-herrmann2007b, + status = {refereed}, + author = {Frank Herrmann and Ian Hinder and Deirdre M. Shoemaker and + Pablo Laguna and Richard A. Matzner}, + title = {Gravitational Recoil from Spinning Binary Black Hole + Mergers}, + journal = {Astrophys. J.}, + year = 2007, + volume = 661, + pages = {430-436}, + eprint = {arXiv:gr-qc/0701143}, + url = {http://arxiv.org/abs/gr-qc/0701143}, + receiveddate = {2007-01-29}, + oldfulltexturl= {http://www.journals.uchicago.edu/doi/abs/10.1086/513603}, + doi = {10.1086/513603} +} + +@Article{ carpet-koppitz2007a, + status = {refereed}, + author = {Michael Koppitz and Denis Pollney and Christian Reisswig + and Luciano Rezzolla and Jonathan Thornburg and Peter + Diener and Erik Schnetter}, + title = {Recoil Velocities from Equal-Mass Binary-Black-Hole + Mergers}, + journal = {Phys. Rev. Lett.}, + year = 2007, + volume = 99, + pages = 041102, + eprint = {arXiv:gr-qc/0701163}, + url = {http://arxiv.org/abs/gr-qc/0701163}, + receiveddate = {2007-01-29}, + oldfulltexturl= {http://link.aps.org/abstract/PRL/v99/e041102}, + doi = {10.1103/PhysRevLett.99.041102} +} + +@Article{ carpet-marronetti2007a, + status = {refereed}, + author = {Pedro Marronetti and Wolfgang Tichy and Bernd Br{\"u}gmann + and Jos{\'e} Gonz{\'a}lez and Mark Hannam and Sascha Husa + and Ulrich Sperhake}, + title = {Binary black holes on a budget: simulations using + workstations}, + journal = {Class. Quantum Grav.}, + year = 2007, + volume = 24, + pages = {S45-S58}, + eprint = {arXiv:gr-qc/0701123}, + url = {http://arxiv.org/abs/gr-qc/0701123}, + receiveddate = {2007-01-22}, + oldfulltexturl= {http://stacks.iop.org/CQG/24/S45}, + doi = {10.1088/0264-9381/24/12/S05} +} + +@Article{ carpet-giacomazzo2007a, + status = {refereed}, + author = {Bruno Giacomazzo and Luciano Rezzolla}, + title = {{WhiskyMHD}: a new numerical code for general relativistic + magnetohydrodynamics}, + journal = {Class. Quantum Grav.}, + year = 2007, + volume = 24, + pages = {S235-S258}, + eprint = {arXiv:gr-qc/0701109}, + url = {http://arxiv.org/abs/gr-qc/0701109}, + receiveddate = {2007-01-20}, + oldfulltexturl= {http://stacks.iop.org/CQG/24/S235}, + doi = {10.1088/0264-9381/24/12/S16} +} + +@Article{ carpet-herrmann2007a, + status = {refereed}, + author = {Frank Herrmann and Ian Hinder and Deirdre M. Shoemaker and + Pablo Laguna}, + title = {Unequal mass binary black hole plunges and gravitational + recoil}, + journal = {Class. Quantum Grav.}, + year = 2007, + volume = 24, + pages = {S33-S42}, + eprint = {arXiv:gr-qc/0601026}, + url = {http://arxiv.org/abs/gr-qc/0601026}, + receiveddate = {2007-01-04}, + oldfulltexturl= {http://stacks.iop.org/CQG/24/S33}, + doi = {10.1088/0264-9381/24/12/S04} +} + +@Article{ carpet-baker2006a, + status = {refereed}, + author = {John G. Baker and Manuela Campanelli and Frans Pretorius + and Yosef Zlochower}, + title = {Comparisons of binary black hole merger waveforms}, + journal = {Class. Quantum Grav.}, + year = 2007, + volume = 24, + pages = {S25-S31}, + eprint = {arXiv:gr-qc/0701016}, + url = {http://arxiv.org/abs/gr-qc/0701016}, + receiveddate = {2006-12-26}, + oldfulltexturl= {http://stacks.iop.org/CQG/24/S25}, + doi = {10.1088/0264-9381/24/12/S03} +} + +@Article{ carept-pazos2006a, + status = {refereed}, + author = {Enrique Pazos and Ernst Nils Dorband and Alessandro Nagar + and Carlos Palenzuela and Erik Schnetter and Manuel + Tiglio}, + title = {How far away is far enough for extracting numerical + waveforms, and how much do they depend on the extraction + method?}, + journal = {Class. Quantum Grav.}, + year = 2007, + volume = 24, + pages = {S341-S368}, + eprint = {arXiv:gr-qc/0612149}, + url = {http://arxiv.org/abs/gr-qc/0612149}, + receiveddate = {2006-12-22}, + oldfulltexturl= {http://stacks.iop.org/CQG/24/S341}, + doi = {10.1088/0264-9381/24/12/S22} +} + +@Article{ carpet-szilagyi2006a, + status = {refereed}, + author = {B{\'e}la Szil{\'a}gyi and Denis Pollney and Luciano + Rezzolla and Jonathan Thornburg and Jeffrey Winicour}, + title = {An explicit harmonic code for black-hole evolution using + excision}, + journal = {Class. Quantum Grav.}, + year = 2007, + volume = 24, + pages = {S275-S293}, + eprint = {arXiv:gr-qc/0612150}, + url = {http://arxiv.org/abs/gr-qc/0612150}, + receiveddate = {2006-12-22}, + oldfulltexturl= {http://stacks.iop.org/CQG/24/S275}, + doi = {10.1088/0264-9381/24/12/S18} +} + +@Article{ carpet-baiotti2006b, + status = {refereed}, + author = {Luca Baiotti and Ian Hawke and Luciano Rezzolla}, + title = {On the gravitational radiation from the collapse of + neutron stars to rotating black holes}, + journal = {Class. Quantum Grav.}, + year = 2007, + volume = 24, + pages = {S187-S206}, + eprint = {arXiv:gr-qc/0701043}, + url = {http://arxiv.org/abs/gr-qc/0701043}, + receiveddate = {2006-12-21}, + oldfulltexturl= {http://stacks.iop.org/CQG/24/S187}, + doi = {10.1088/0264-9381/24/12/S13} +} + +@Article{ carpet-ott2006b, + status = {refereed}, + author = {Christian D. Ott and Harald Dimmelmeier and Andreas Marek + and Hans-Thomas Janka and Burkhard Zink and Ian Hawke and + Erik Schnetter}, + title = {Rotating collapse of stellar iron cores in general + relativity}, + journal = {Class. Quantum Grav.}, + year = 2007, + volume = 24, + pages = {S139-S154}, + eprint = {arXiv:astro-ph/0612638}, + url = {http://arxiv.org/abs/astro-ph/0612638}, + receiveddate = {2006-12-20}, + oldfulltexturl= {http://stacks.iop.org/CQG/24/S139}, + doi = {10.1088/0264-9381/24/12/S10} +} + +@Article{ carpet-zink2006a, + status = {refereed}, + author = {Burkhard Zink and Nikolaos Stergioulas and Ian Hawke and + Christian D. Ott and Erik Schnetter and Ewald M{\"u}ller}, + title = {Non-axisymmetric instability and fragmentation of general + relativistic quasitoroidal stars}, + journal = {Phys. Rev. D}, + year = 2007, + volume = 76, + pages = 024019, + eprint = {arXiv:astro-ph/0611601}, + url = {http://arxiv.org/abs/astro-ph/0611601}, + receiveddate = {2006-11-19}, + oldfulltexturl= {http://link.aps.org/abstract/PRD/v76/e024019}, + doi = {10.1103/PhysRevD.76.024019} +} + +@Article{ carpet-bruegmann2006a, + status = {refereed}, + author = {Bernd Br{\"u}gmann and Jos{\'e} A. Gonz{\'a}lez and Mark + Hannam and Sascha Husa and Ulrich Sperhake and Wolfgang + Tichy}, + title = {Calibration of Moving Puncture Simulations}, + journal = {Phys. Rev. D}, + year = 2008, + volume = 77, + pages = 024027, + eprint = {arXiv:gr-qc/0610128}, + url = {http://arxiv.org/abs/gr-qc/0610128}, + receiveddate = {2006-11-03}, + oldfulltexturl= {http://link.aps.org/abstract/PRD/v77/e024027}, + doi = {10.1103/PhysRevD.77.024027} +} + +@Article{ carpet-reisswig2006a, + status = {refereed}, + author = {Christian Reisswig and Nigel T. Bishop and Chi Wai Lai and + Jonathan Thornburg and B{\'e}la Szil{\'a}gyi}, + title = {Characteristic evolutions in numerical relativity using + six angular patches}, + journal = {Class. Quantum Grav.}, + year = 2007, + volume = 24, + pages = {S327-S339}, + eprint = {arXiv:gr-qc/0610019}, + url = {http://arxiv.org/abs/gr-qc/0610019}, + receiveddate = {2006-10-05}, + oldfulltexturl= {http://stacks.iop.org/CQG/24/S327}, + doi = {10.1088/0264-9381/24/12/S21} +} + +@Article{ carpet-ott2006a, + status = {refereed}, + author = {Christian D. Ott and Harald Dimmelmeier and Andreas Marek + and Hans-Thomas Janka and Ian Hawke and Burkhard Zink and + Erik Schnetter}, + title = {{3D} Collapse of Rotating Stellar Iron Cores in General + Relativity Including Deleptonization and a Nuclear Equation + of State}, + journal = {Phys. Rev. Lett.}, + year = 2007, + volume = 98, + pages = 261101, + eprint = {arXiv:astro-ph/0609819}, + url = {http://arxiv.org/abs/astro-ph/0609819}, + receiveddate = {2006-09-29}, + oldfulltexturl= {http://link.aps.org/abstract/PRL/v98/e261101}, + doi = {10.1103/PhysRevLett.98.261101} +} + +@Article{ carpet-baiotti2006a, + status = {refereed}, + author = {Luca Baiotti and Luciano Rezzolla}, + title = {Challenging the paradigm of singularity excision in + gravitational collapse}, + journal = {Phys. Rev. Lett.}, + year = 2006, + volume = 97, + pages = 141101, + eprint = {arXiv:gr-qc/0608113}, + url = {http://arxiv.org/abs/gr-qc/0608113}, + receiveddate = {2006-08-26}, + oldfulltexturl= {http://link.aps.org/abstract/PRL/v97/e141101}, + doi = {10.1103/PhysRevLett.97.141101} +} + +@Article{ carpet-dorband2006a, + status = {refereed}, + author = {Ernst Nils Dorband and Emanuele Berti and Peter Diener and + Erik Schnetter and Manuel Tiglio}, + title = {A numerical study of the quasinormal mode excitation of + Kerr black holes}, + journal = {Phys. Rev. D}, + year = 2006, + volume = 74, + pages = 084028, + eprint = {arXiv:gr-qc/0608091}, + url = {http://arxiv.org/abs/gr-qc/0608091}, + receiveddate = {2006-08-22}, + oldfulltexturl= {http://link.aps.org/abstract/PRD/v74/e084028}, + doi = {10.1103/PhysRevD.74.084028} +} + +@Article{ carpet-loeffler2006a, + status = {refereed}, + author = {Frank L{\"o}ffler and Luciano Rezzolla and Marcus Ansorg}, + title = {Numerical evolutions of a black hole-neutron star system + in full General Relativity: Head-on collision}, + journal = {Phys. Rev. D}, + year = 2006, + volume = 74, + pages = 104018, + eprint = {arXiv:gr-qc/0606104}, + url = {http://arxiv.org/abs/gr-qc/0606104}, + receiveddate = {2006-06-23}, + oldfulltexturl= {http://link.aps.org/abstract/PRD/v74/e104018}, + doi = {10.1103/PhysRevD.74.104018} +} + +@Article{ carpet-sperhake2006a, + status = {refereed}, + author = {Ulrich Sperhake}, + title = {Binary black-hole evolutions of excision and puncture + data}, + journal = {Phys. Rev. D}, + year = 2007, + volume = 76, + pages = 104015, + eprint = {arXiv:gr-qc/0606079}, + url = {http://arxiv.org/abs/gr-qc/0606079}, + receiveddate = {2006-06-18}, + oldfulltexturl= {http://link.aps.org/abstract/PRD/v76/e104015}, + doi = {10.1103/PhysRevD.76.104015} +} + +@Article{ carpet-schnetter2006b, + status = {refereed}, + author = {Erik Schnetter and Badri Krishnan and Florian Beyer}, + title = {Introduction to dynamical horizons in numerical + relativity}, + journal = {Phys. Rev. D}, + year = 2006, + volume = 74, + pages = 024028, + eprint = {arXiv:gr-qc/0604015}, + url = {http://arxiv.org/abs/gr-qc/0604015}, + receiveddate = {2006-04-11}, + oldfulltexturl= {http://link.aps.org/abstract/PRD/v74/e024028}, + doi = {10.1103/PhysRevD.74.024028} +} + +@Article{ carpet-sopuerta2006a, + status = {refereed}, + author = {Carlos F. Sopuerta and Ulrich Sperhake and Pablo Laguna}, + title = {Hydro-without-Hydro Framework for Simulations of Black + Hole-Neutron Star Binaries}, + journal = {Class. Quantum Grav.}, + year = 2006, + volume = 23, + pages = {S579-S598}, + eprint = {arXiv:gr-qc/0605018}, + url = {http://arxiv.org/abs/gr-qc/0605018}, + receiveddate = {2006-03-20}, + oldfulltexturl= {http://stacks.iop.org/CQG/23/S579}, + doi = {10.1088/0264-9381/23/16/S15} +} + +@Article{ carpet-schnetter2006a, + status = {refereed background}, + author = {Erik Schnetter and Peter Diener and Ernst Nils Dorband and + Manuel Tiglio}, + title = {A multi-block infrastructure for three-dimensional + time-dependent numerical relativity}, + journal = {Class. Quantum Grav.}, + year = 2006, + volume = 23, + pages = {S553-S578}, + eprint = {arXiv:gr-qc/0602104}, + url = {http://arxiv.org/abs/gr-qc/0602104}, + receiveddate = {2006-02-20}, + oldfulltexturl= {http://stacks.iop.org/CQG/23/S553}, + doi = {10.1088/0264-9381/23/16/S14} +} + +@Article{ carpet-diener2005b, + status = {refereed}, + author = {Peter Diener and Ernst Nils Dorband and Erik Schnetter and + Manuel Tiglio}, + title = {Optimized high-order derivative and dissipation operators + satisfying summation by parts, and applications in + three-dimensional multi-block evolutions}, + journal = {J. Sci. Comput.}, + year = 2007, + volume = 32, + pages = {109-145}, + eprint = {arXiv:gr-qc/0512001}, + url = {http://arxiv.org/abs/gr-qc/0512001}, + receiveddate = {2005-12-22}, + oldfulltexturl= {http://www.springerlink.com/content/l724hr0846n2/}, + doi = {10.1007/s10915-006-9123-7} +} + +@Article{ carpet-diener2005a, + status = {refereed}, + author = {Peter Diener and Frank Herrmann and Denis Pollney and Erik + Schnetter and Edward Seidel and Ryoji Takahashi and + Jonathan Thornburg and Jason Ventrella}, + title = {Accurate Evolution of Orbiting Binary Black Holes}, + journal = {Phys. Rev. Lett.}, + year = 2006, + volume = 96, + pages = 121101, + eprint = {arXiv:gr-qc/0512108}, + url = {http://arxiv.org/abs/gr-qc/0512108}, + receiveddate = {2005-12-21}, + oldfulltexturl= {http://link.aps.org/abstract/PRL/v96/e121101}, + doi = {10.1103/PhysRevLett.96.121101} +} + +@Article{ carpet-sperhake2005a, + status = {refereed}, + author = {Ulrich Sperhake and Bernard Kelly and Pablo Laguna and + Kenneth L. Smith and Erik Schnetter}, + title = {Black hole head-on collisions and gravitational waves with + fixed mesh-refinement and dynamic singularity excision}, + journal = {Phys. Rev. D}, + year = 2005, + volume = 71, + pages = 124042, + eprint = {arXiv:gr-qc/0503071}, + url = {http://arxiv.org/abs/gr-qc/0503071}, + receiveddate = {2005-03-16}, + oldfulltexturl= {http://link.aps.org/abstract/PRD/v71/e124042}, + doi = {10.1103/PhysRevD.71.124042} +} + +@Article{ carpet-zink2005a, + status = {refereed}, + author = {Burkhard Zink and Nikolaos Stergioulas and Ian Hawke and + Christian D. Ott and Erik Schnetter and Ewald M{\"u}ller}, + title = {Formation of Supermassive Black Holes through + Fragmentation of Torodial Supermassive Stars}, + journal = {Phys. Rev. Lett.}, + year = 2006, + volume = 96, + pages = 161101, + eprint = {arXiv:gr-qc/0501080}, + url = {http://arxiv.org/abs/gr-qc/0501080}, + receiveddate = {2005-02-11}, + oldfulltexturl= {http://link.aps.org/abstract/PRL/v96/e161101}, + doi = {10.1103/PhysRevLett.96.161101} +} + +@Article{ carpet-baiotti2004a, + status = {refereed}, + author = {Luca Baiotti and Ian Hawke and Luciano Rezzolla and Erik + Schnetter}, + title = {Gravitational-Wave Emission from Rotating Gravitational + Collapse in three Dimensions}, + journal = {Phys. Rev. Lett.}, + year = 2005, + volume = 95, + pages = 131101, + eprint = {arXiv:gr-qc/0503016}, + url = {http://arxiv.org/abs/gr-qc/0503016}, + receiveddate = {2004-10-12}, + oldfulltexturl= {http://link.aps.org/abstract/PRL/v96/e161101}, + doi = {10.1103/PhysRevLett.94.131101} +} + +@Article{ carpet-schnetter2003a, + status = {refereed background}, + author = {Erik Schnetter and Scott H. Hawley and Ian Hawke}, + title = {Evolutions in 3D numerical relativity using fixed mesh + refinement}, + journal = {Class. Quantum Grav.}, + year = 2004, + volume = 21, + pages = {1465-1488}, + eprint = {arXiv:gr-qc/0310042}, + url = {http://arxiv.org/abs/gr-qc/0310042}, + receiveddate = {2003-10-07}, + oldfulltexturl= {http://stacks.iop.org/CQG/21/1465}, + doi = {10.1088/0264-9381/21/6/014} +} diff --git a/Carpet/CarpetWeb/publications/citations-refereed.bibitems b/Carpet/CarpetWeb/publications/citations-refereed.bibitems new file mode 100644 index 000000000..bbc630a94 --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-refereed.bibitems @@ -0,0 +1,1186 @@ +\expandafter\ifx\csname natexlab\endcsname\relax\def\natexlab#1{#1}\fi +\expandafter\ifx\csname bibnamefont\endcsname\relax + \def\bibnamefont#1{#1}\fi +\expandafter\ifx\csname bibfnamefont\endcsname\relax + \def\bibfnamefont#1{#1}\fi +\expandafter\ifx\csname citenamefont\endcsname\relax + \def\citenamefont#1{#1}\fi +\expandafter\ifx\csname url\endcsname\relax + \def\url#1{\texttt{#1}}\fi +\expandafter\ifx\csname urlprefix\endcsname\relax\def\urlprefix{URL }\fi +\providecommand{\bibinfo}[2]{#2} +\providecommand{\eprint}[2][]{\url{#2}} + +\blurb[{\citenamefont{Aylott et~al.}(2009{\natexlab{a}})\citenamefont{Aylott, + Baker, Boggs, Boyle, Brady, Brown, Br{\"u}gmann, Buchman, Buonanno, Cadonati, + Camp, Campanelli, Centrella, Chatterji, Christensen, Chu, Diener, Dorband, + Etienne, Faber, Fairhurst, Farr, Fischetti, Guidi, Goggin, Hannam, Herrmann, + Hinder, Husa, Kalogera, Keppel, Kidder, Kelly, Krishnan, Laguna, Lousto, + Mandel, Marronetti, Matzner, McWilliams, Matthews, Mercer, Mohapatra, + Mrou{\'e}, Nakano, Ochsner, Pan, Pekowsky, Pfeiffer, Pollney, Pretorius, + Raymond, Reisswig, Rezzolla, Rinne, Robinson, R{\"o}ver, Santamar{\'i}a, + Sathyaprakash, Scheel, Schnetter, Seiler, Shapiro, Shoemaker, Sperhake, + Stroeer, Sturani, Tichy, Liu, van~der Sluys, van Meter, Vaulin, Vecchio, + Veitch, Vicer{\'e}, Whelan, and Zlochower}}]{carpet-cadonati2009a} +\bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Aylott}}, + \bibinfo{author}{\bibfnamefont{J.~G.} \bibnamefont{Baker}}, + \bibinfo{author}{\bibfnamefont{W.~D.} \bibnamefont{Boggs}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Boyle}}, + \bibinfo{author}{\bibfnamefont{P.~R.} \bibnamefont{Brady}}, + \bibinfo{author}{\bibfnamefont{D.~A.} \bibnamefont{Brown}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Br{\"u}gmann}}, + \bibinfo{author}{\bibfnamefont{L.~T.} \bibnamefont{Buchman}}, + \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Buonanno}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Cadonati}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Camp}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Campanelli}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Centrella}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Chatterji}}, + \bibinfo{author}{\bibfnamefont{N.}~\bibnamefont{Christensen}}, + \bibinfo{author}{\bibfnamefont{T.}~\bibnamefont{Chu}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, + \bibinfo{author}{\bibfnamefont{N.}~\bibnamefont{Dorband}}, + \bibinfo{author}{\bibfnamefont{Z.~B.} \bibnamefont{Etienne}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Faber}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Fairhurst}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Farr}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Fischetti}}, + \bibinfo{author}{\bibfnamefont{G.}~\bibnamefont{Guidi}}, + \bibinfo{author}{\bibfnamefont{L.~M.} \bibnamefont{Goggin}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Hannam}}, + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hinder}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Husa}}, + \bibinfo{author}{\bibfnamefont{V.}~\bibnamefont{Kalogera}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Keppel}}, + \bibinfo{author}{\bibfnamefont{L.~E.} \bibnamefont{Kidder}}, + \bibinfo{author}{\bibfnamefont{B.~J.} \bibnamefont{Kelly}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Krishnan}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Laguna}}, + \bibinfo{author}{\bibfnamefont{C.~O.} \bibnamefont{Lousto}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Mandel}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Marronetti}}, + \bibinfo{author}{\bibfnamefont{R.}~\bibnamefont{Matzner}}, + \bibinfo{author}{\bibfnamefont{S.~T.} \bibnamefont{McWilliams}}, + \bibinfo{author}{\bibfnamefont{K.~D.} \bibnamefont{Matthews}}, + \bibinfo{author}{\bibfnamefont{R.~A.} \bibnamefont{Mercer}}, + \bibinfo{author}{\bibfnamefont{S.~R.~P.} \bibnamefont{Mohapatra}}, + \bibinfo{author}{\bibfnamefont{A.~H.} \bibnamefont{Mrou{\'e}}}, + \bibinfo{author}{\bibfnamefont{H.}~\bibnamefont{Nakano}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Ochsner}}, + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Pan}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Pekowsky}}, + \bibinfo{author}{\bibfnamefont{H.~P.} \bibnamefont{Pfeiffer}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Pretorius}}, + \bibinfo{author}{\bibfnamefont{V.}~\bibnamefont{Raymond}}, + \bibinfo{author}{\bibfnamefont{C.}~\bibnamefont{Reisswig}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \bibinfo{author}{\bibfnamefont{O.}~\bibnamefont{Rinne}}, + \bibinfo{author}{\bibfnamefont{C.}~\bibnamefont{Robinson}}, + \bibinfo{author}{\bibfnamefont{C.}~\bibnamefont{R{\"o}ver}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Santamar{\'i}a}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Sathyaprakash}}, + \bibinfo{author}{\bibfnamefont{M.~A.} \bibnamefont{Scheel}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Seiler}}, + \bibinfo{author}{\bibfnamefont{S.~L.} \bibnamefont{Shapiro}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Shoemaker}}, + \bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, + \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Stroeer}}, + \bibinfo{author}{\bibfnamefont{R.}~\bibnamefont{Sturani}}, + \bibinfo{author}{\bibfnamefont{W.}~\bibnamefont{Tichy}}, + \bibinfo{author}{\bibfnamefont{Y.~T.} \bibnamefont{Liu}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{van~der Sluys}}, + \bibinfo{author}{\bibfnamefont{J.~R.} \bibnamefont{van Meter}}, + \bibinfo{author}{\bibfnamefont{R.}~\bibnamefont{Vaulin}}, + \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Vecchio}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Veitch}}, + \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Vicer{\'e}}}, + \bibinfo{author}{\bibfnamefont{J.~T.} \bibnamefont{Whelan}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Zlochower}}, + \emph{\bibinfo{title}{Status of {NINJA}: the {Numerical} {INJection} + {Analysis} project}}, \bibinfo{journal}{Class. Quantum Grav.} + \textbf{\bibinfo{volume}{26}}, \bibinfo{pages}{114008} + (\bibinfo{year}{2009}{\natexlab{a}}), \eprint{arXiv:0901.4399 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0905.4227}. + +\blurb[{\citenamefont{Baiotti + et~al.}(2009{\natexlab{a}})\citenamefont{Baiotti, Giacomazzo, and + Rezzolla}}]{carpet-baiotti2009a} +\bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Baiotti}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Giacomazzo}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \emph{\bibinfo{title}{Accurate evolutions of inspiralling neutron-star + binaries: assessment of the truncation error}}, \bibinfo{journal}{Class. + Quantum Grav.} \textbf{\bibinfo{volume}{26}}, \bibinfo{pages}{114005} + (\bibinfo{year}{2009}{\natexlab{a}}), \eprint{arXiv:0901.4955 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0901.4955}. + +\blurb[{\citenamefont{Aylott et~al.}(2009{\natexlab{b}})\citenamefont{Aylott, + Baker, Boggs, Boyle, Brady, Brown, Br{\"u}gmann, Buchman, Buonanno, Cadonati, + Camp, Campanelli, Centrella, Chatterji, Christensen, Chu, Diener, Dorband, + Etienne, Faber, Fairhurst, Farr, Fischetti, Guidi, Goggin, Hannam, Herrmann, + Hinder, Husa, Kalogera, Keppel, Kidder, Kelly, Krishnan, Laguna, Lousto, + Mandel, Marronetti, Matzner, McWilliams, Matthews, Mercer, Mohapatra, + Mrou{\'e}, Nakano, Ochsner, Pan, Pekowsky, Pfeiffer, Pollney, Pretorius, + Raymond, Reisswig, Rezzolla, Rinne, Robinson, R{\"o}ver, Santamar{\'i}a, + Sathyaprakash, Scheel, Schnetter, Seiler, Shapiro, Shoemaker, Sperhake, + Stroeer, Sturani, Tichy, Liu, van~der Sluys, van Meter, Vaulin, Vecchio, + Veitch, Vicer{\'e}, Whelan, and Zlochower}}]{carpet-aylott2009a} +\bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Aylott}}, + \bibinfo{author}{\bibfnamefont{J.~G.} \bibnamefont{Baker}}, + \bibinfo{author}{\bibfnamefont{W.~D.} \bibnamefont{Boggs}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Boyle}}, + \bibinfo{author}{\bibfnamefont{P.~R.} \bibnamefont{Brady}}, + \bibinfo{author}{\bibfnamefont{D.~A.} \bibnamefont{Brown}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Br{\"u}gmann}}, + \bibinfo{author}{\bibfnamefont{L.~T.} \bibnamefont{Buchman}}, + \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Buonanno}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Cadonati}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Camp}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Campanelli}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Centrella}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Chatterji}}, + \bibinfo{author}{\bibfnamefont{N.}~\bibnamefont{Christensen}}, + \bibinfo{author}{\bibfnamefont{T.}~\bibnamefont{Chu}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, + \bibinfo{author}{\bibfnamefont{N.}~\bibnamefont{Dorband}}, + \bibinfo{author}{\bibfnamefont{Z.~B.} \bibnamefont{Etienne}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Faber}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Fairhurst}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Farr}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Fischetti}}, + \bibinfo{author}{\bibfnamefont{G.}~\bibnamefont{Guidi}}, + \bibinfo{author}{\bibfnamefont{L.~M.} \bibnamefont{Goggin}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Hannam}}, + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hinder}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Husa}}, + \bibinfo{author}{\bibfnamefont{V.}~\bibnamefont{Kalogera}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Keppel}}, + \bibinfo{author}{\bibfnamefont{L.~E.} \bibnamefont{Kidder}}, + \bibinfo{author}{\bibfnamefont{B.~J.} \bibnamefont{Kelly}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Krishnan}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Laguna}}, + \bibinfo{author}{\bibfnamefont{C.~O.} \bibnamefont{Lousto}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Mandel}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Marronetti}}, + \bibinfo{author}{\bibfnamefont{R.}~\bibnamefont{Matzner}}, + \bibinfo{author}{\bibfnamefont{S.~T.} \bibnamefont{McWilliams}}, + \bibinfo{author}{\bibfnamefont{K.~D.} \bibnamefont{Matthews}}, + \bibinfo{author}{\bibfnamefont{R.~A.} \bibnamefont{Mercer}}, + \bibinfo{author}{\bibfnamefont{S.~R.~P.} \bibnamefont{Mohapatra}}, + \bibinfo{author}{\bibfnamefont{A.~H.} \bibnamefont{Mrou{\'e}}}, + \bibinfo{author}{\bibfnamefont{H.}~\bibnamefont{Nakano}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Ochsner}}, + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Pan}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Pekowsky}}, + \bibinfo{author}{\bibfnamefont{H.~P.} \bibnamefont{Pfeiffer}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Pretorius}}, + \bibinfo{author}{\bibfnamefont{V.}~\bibnamefont{Raymond}}, + \bibinfo{author}{\bibfnamefont{C.}~\bibnamefont{Reisswig}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \bibinfo{author}{\bibfnamefont{O.}~\bibnamefont{Rinne}}, + \bibinfo{author}{\bibfnamefont{C.}~\bibnamefont{Robinson}}, + \bibinfo{author}{\bibfnamefont{C.}~\bibnamefont{R{\"o}ver}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Santamar{\'i}a}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Sathyaprakash}}, + \bibinfo{author}{\bibfnamefont{M.~A.} \bibnamefont{Scheel}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Seiler}}, + \bibinfo{author}{\bibfnamefont{S.~L.} \bibnamefont{Shapiro}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Shoemaker}}, + \bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, + \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Stroeer}}, + \bibinfo{author}{\bibfnamefont{R.}~\bibnamefont{Sturani}}, + \bibinfo{author}{\bibfnamefont{W.}~\bibnamefont{Tichy}}, + \bibinfo{author}{\bibfnamefont{Y.~T.} \bibnamefont{Liu}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{van~der Sluys}}, + \bibinfo{author}{\bibfnamefont{J.~R.} \bibnamefont{van Meter}}, + \bibinfo{author}{\bibfnamefont{R.}~\bibnamefont{Vaulin}}, + \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Vecchio}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Veitch}}, + \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Vicer{\'e}}}, + \bibinfo{author}{\bibfnamefont{J.~T.} \bibnamefont{Whelan}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Zlochower}}, + \emph{\bibinfo{title}{Testing gravitational-wave searches with numerical + relativity waveforms: Results from the first {Numerical} {INJection} + {Analysis} ({NINJA}) project}}, \bibinfo{journal}{Class. Quantum Grav.} + \textbf{\bibinfo{volume}{26}}, \bibinfo{pages}{165008} + (\bibinfo{year}{2009}{\natexlab{b}}), \eprint{arXiv:0901.4399 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0901.4399}. + +\blurb[{\citenamefont{Hannam et~al.}(2009)\citenamefont{Hannam, Husa, Baker, + Boyle, Br{\"u}gmann, Chu, Dorband, Herrmann, Hinder, Kelly, Kidder, Laguna, + Matthews, {van Meter}, Pfeiffer, Pollney, Reisswig, Scheel, and + Shoemaker}}]{carpetresult-hannam2008a} +\bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Hannam}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Husa}}, + \bibinfo{author}{\bibfnamefont{J.~G.} \bibnamefont{Baker}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Boyle}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Br{\"u}gmann}}, + \bibinfo{author}{\bibfnamefont{T.}~\bibnamefont{Chu}}, + \bibinfo{author}{\bibfnamefont{N.}~\bibnamefont{Dorband}}, + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hinder}}, + \bibinfo{author}{\bibfnamefont{B.~J.} \bibnamefont{Kelly}}, + \bibinfo{author}{\bibfnamefont{L.~E.} \bibnamefont{Kidder}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Laguna}}, + \bibinfo{author}{\bibfnamefont{K.~D.} \bibnamefont{Matthews}}, + \bibinfo{author}{\bibfnamefont{J.~R.} \bibnamefont{{van Meter}}}, + \bibinfo{author}{\bibfnamefont{H.~P.} \bibnamefont{Pfeiffer}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, + \bibinfo{author}{\bibfnamefont{C.}~\bibnamefont{Reisswig}}, + \bibinfo{author}{\bibfnamefont{M.~A.} \bibnamefont{Scheel}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Shoemaker}}, + \emph{\bibinfo{title}{The {Samurai} project: verifying the consistency of + black-hole-binary waveforms for gravitational-wave detection}}, + \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{79}}, + \bibinfo{pages}{084025} (\bibinfo{year}{2009}), \eprint{arXiv:0901.2437 + [gr-qc]}, \urlprefix\url{http://arxiv.org/abs/0901.2437}. + +\blurb[{\citenamefont{Rezzolla}(2009)}]{carpet-rezzolla2008a} +\bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \emph{\bibinfo{title}{Modelling the final state from binary black-hole + coalescences}}, \bibinfo{journal}{Class. Quantum Grav.} + \textbf{\bibinfo{volume}{26}}, \bibinfo{pages}{094023} + (\bibinfo{year}{2009}), \eprint{arXiv:0812.2325 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0812.2325}. + +\blurb[{\citenamefont{Etienne et~al.}(2009)\citenamefont{Etienne, Liu, + Shapiro, , and Baumgarte}}]{carpet-etienne2008a} +\bibinfo{author}{\bibfnamefont{Z.~B.} \bibnamefont{Etienne}}, + \bibinfo{author}{\bibfnamefont{Y.~T.} \bibnamefont{Liu}}, + \bibinfo{author}{\bibfnamefont{S.~L.} \bibnamefont{Shapiro}}, , + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{T.~W.} + \bibnamefont{Baumgarte}}, \emph{\bibinfo{title}{General relativistic + simulations of black-hole-neutron-star mergers: Effects of black-hole spin}}, + \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{79}}, + \bibinfo{pages}{044024} (\bibinfo{year}{2009}), \eprint{arXiv:0812.2245 + [astro-ph]}, \urlprefix\url{http://arxiv.org/abs/0812.2245}. + +\blurb[{\citenamefont{Campanelli + et~al.}(2009{\natexlab{a}})\citenamefont{Campanelli, Lousto, and + Zlochower}}]{carpet-campanelli2008b} +\bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Campanelli}}, + \bibinfo{author}{\bibfnamefont{C.~O.} \bibnamefont{Lousto}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Zlochower}}, + \emph{\bibinfo{title}{Algebraic classification of numerical spacetimes and + black-hole-binary remnants}}, \bibinfo{journal}{Phys. Rev. D} + \textbf{\bibinfo{volume}{79}}, \bibinfo{pages}{084012} + (\bibinfo{year}{2009}{\natexlab{a}}), \eprint{arXiv:0811.3006 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0811.3006}. + +\blurb[{\citenamefont{Korobkin et~al.}(2009)\citenamefont{Korobkin, Aksoylu, + Holst, Pazos, and Tiglio}}]{carpet-korobkin2008a} +\bibinfo{author}{\bibfnamefont{O.}~\bibnamefont{Korobkin}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Aksoylu}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Holst}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Pazos}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Tiglio}}, + \emph{\bibinfo{title}{Solving the einstein constraint equations on + multi-block triangulations using finite element methods}}, + \bibinfo{journal}{Class. Quantum Grav.} \textbf{\bibinfo{volume}{26}}, + \bibinfo{pages}{145007} (\bibinfo{year}{2009}), \eprint{arXiv:0801.1823 + [gr-qc]}, \urlprefix\url{http://arxiv.org/abs/0801.1823}. + +\blurb[{\citenamefont{Brown et~al.}(2009)\citenamefont{Brown, Diener, + Sarbach, Schnetter, and Tiglio}}]{carpet-brown2007b} +\bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Brown}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, + \bibinfo{author}{\bibfnamefont{O.}~\bibnamefont{Sarbach}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Tiglio}}, + \emph{\bibinfo{title}{Turduckening black holes: an analytical and + computational study}}, \bibinfo{journal}{Phys. Rev. D} + \textbf{\bibinfo{volume}{79}}, \bibinfo{pages}{044023} + (\bibinfo{year}{2009}), \eprint{arXiv:0809.3533 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0809.3533}. + +\blurb[{\citenamefont{Baiotti + et~al.}(2009{\natexlab{b}})\citenamefont{Baiotti, Bernuzzi, Corvino, Pietri, + and Nagar}}]{carpet-baiotti2008b} +\bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Baiotti}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Bernuzzi}}, + \bibinfo{author}{\bibfnamefont{G.}~\bibnamefont{Corvino}}, + \bibinfo{author}{\bibfnamefont{R.~D.} \bibnamefont{Pietri}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Nagar}}, + \emph{\bibinfo{title}{Gravitational-wave extraction from neutron-star + oscillations: Comparing linear and nonlinear techniques}}, + \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{79}}, + \bibinfo{pages}{024002} (\bibinfo{year}{2009}{\natexlab{b}}), + \eprint{arXiv:0808.4002 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0808.4002}. + +\blurb[{\citenamefont{Campanelli + et~al.}(2009{\natexlab{b}})\citenamefont{Campanelli, Lousto, Nakano, and + Zlochower}}]{carpet-campanelli2008a} +\bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Campanelli}}, + \bibinfo{author}{\bibfnamefont{C.~O.} \bibnamefont{Lousto}}, + \bibinfo{author}{\bibfnamefont{H.}~\bibnamefont{Nakano}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Zlochower}}, + \emph{\bibinfo{title}{Comparison of numerical and post-{Newtonian} waveforms + for generic precessing black-hole binaries}}, \bibinfo{journal}{Phys. Rev. D} + \textbf{\bibinfo{volume}{79}}, \bibinfo{pages}{084010} + (\bibinfo{year}{2009}{\natexlab{b}}), \eprint{arXiv:0808.0713 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0808.0713}. + +\blurb[{\citenamefont{Healy et~al.}(2009)\citenamefont{Healy, Herrmann, + Hinder, Shoemaker, Laguna, , and Matzner}}]{carpet-healy2008a} +\bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Healy}}, + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hinder}}, + \bibinfo{author}{\bibfnamefont{D.~M.} \bibnamefont{Shoemaker}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Laguna}}, , \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{R.~A.} \bibnamefont{Matzner}}, + \emph{\bibinfo{title}{Superkicks in hyperbolic encounters of binary black + holes}}, \bibinfo{journal}{Phys. Rev. Lett.} \textbf{\bibinfo{volume}{102}}, + \bibinfo{pages}{041101} (\bibinfo{year}{2009}), \eprint{arXiv:0807.3292 + [gr-qc]}, \urlprefix\url{http://arxiv.org/abs/0807.3292}. + +\blurb[{\citenamefont{Sperhake + et~al.}(2008{\natexlab{a}})\citenamefont{Sperhake, Cardoso, Pretorius, Berti, + , and Gonz{\'a}lez}}]{carpet-sperhake2008a} +\bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, + \bibinfo{author}{\bibfnamefont{V.}~\bibnamefont{Cardoso}}, + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Pretorius}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Berti}}, , \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{J.~A.} \bibnamefont{Gonz{\'a}lez}}, + \emph{\bibinfo{title}{High-energy collision of two black holes}}, + \bibinfo{journal}{Phys. Rev. Lett.} \textbf{\bibinfo{volume}{101}}, + \bibinfo{pages}{161101} (\bibinfo{year}{2008}{\natexlab{a}}), + \eprint{arXiv:0806.1738 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0806.1738}. + +\blurb[{\citenamefont{Gualtieri et~al.}(2008)\citenamefont{Gualtieri, Berti, + Cardoso, and Sperhake}}]{carpet-gualtieri2008a} +\bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Gualtieri}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Berti}}, + \bibinfo{author}{\bibfnamefont{V.}~\bibnamefont{Cardoso}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, + \emph{\bibinfo{title}{Transformation of the multipolar components of + gravitational radiation under rotations and boosts}}, \bibinfo{journal}{Phys. + Rev. D} \textbf{\bibinfo{volume}{78}}, \bibinfo{pages}{044024} + (\bibinfo{year}{2008}), \eprint{arXiv:0805.1017 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0805.1017}. + +\blurb[{\citenamefont{Lousto and Zlochower}(2009)}]{carpet-lousto2008a} +\bibinfo{author}{\bibfnamefont{C.~O.} \bibnamefont{Lousto}} \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Zlochower}}, + \emph{\bibinfo{title}{Modeling gravitational recoil from precessing + highly-spinning unequal-mass black-hole binaries}}, \bibinfo{journal}{Phys. + Rev. D} \textbf{\bibinfo{volume}{79}}, \bibinfo{pages}{064018} + (\bibinfo{year}{2009}), \eprint{arXiv:0805.0159 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0805.0159}. + +\blurb[{\citenamefont{Benger}(2008)}]{carpetresult-benger2007a} +\bibinfo{author}{\bibfnamefont{W.}~\bibnamefont{Benger}}, + \emph{\bibinfo{title}{Colliding galaxies, rotating neutron stars and merging + black holes -- visualizing high dimensional datasets on arbitrary meshes}}, + \bibinfo{journal}{New J. Phys.} \textbf{\bibinfo{volume}{10}}, + \bibinfo{pages}{125004} (\bibinfo{year}{2008}), + \urlprefix\url{http://www.iop.org/EJ/ abstract/1367-2630/10/12/125004}. + +\blurb[{\citenamefont{Baiotti et~al.}(2008)\citenamefont{Baiotti, Giacomazzo, + and Rezzolla}}]{carpet-baiotti2008a} +\bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Baiotti}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Giacomazzo}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \emph{\bibinfo{title}{Accurate evolutions of inspiralling neutron-star + binaries: Prompt and delayed collapse to a black hole}}, + \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{78}}, + \bibinfo{pages}{084033} (\bibinfo{year}{2008}), \eprint{arXiv:0804.0594 + [gr-qc]}, \urlprefix\url{http://arxiv.org/abs/0804.0594}. + +\blurb[{\citenamefont{Dain et~al.}(2008)\citenamefont{Dain, Lousto, , and + Zlochower}}]{carpet-dain2008a} +\bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Dain}}, + \bibinfo{author}{\bibfnamefont{C.~O.} \bibnamefont{Lousto}}, , + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Zlochower}}, + \emph{\bibinfo{title}{Extra-large remnant recoil velocities and spins from + near-extremal-{Bowen}-{York}-spin black-hole binaries}}, + \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{78}}, + \bibinfo{pages}{024039} (\bibinfo{year}{2008}), \eprint{arXiv:0803.0351 + [gr-qc]}, \urlprefix\url{http://arxiv.org/abs/0803.0351}. + +\blurb[{\citenamefont{Seiler et~al.}(2008)\citenamefont{Seiler, Szil{\'a}gyi, + Pollney, and Rezzolla}}]{carpet-seiler2008a} +\bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Seiler}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Szil{\'a}gyi}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \emph{\bibinfo{title}{Constraint-preserving boundary treatment for a harmonic + formulation of the einstein equations}}, \bibinfo{journal}{Class. Quantum + Grav.} \textbf{\bibinfo{volume}{25}}, \bibinfo{pages}{175020} + (\bibinfo{year}{2008}), \eprint{arXiv:0802.3341 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0802.3341}. + +\blurb[{\citenamefont{Washik et~al.}(2008)\citenamefont{Washik, Healy, + Herrmann, Hinder, Shoemaker, Laguna, and Matzner}}]{carpet-washik2008a} +\bibinfo{author}{\bibfnamefont{M.~C.} \bibnamefont{Washik}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Healy}}, + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hinder}}, + \bibinfo{author}{\bibfnamefont{D.~M.} \bibnamefont{Shoemaker}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Laguna}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{R.~A.} \bibnamefont{Matzner}}, + \emph{\bibinfo{title}{Binary-black-hole encounters, gravitational bursts, and + maximum final spin}}, \bibinfo{journal}{Phys. Rev. Lett.} + \textbf{\bibinfo{volume}{101}}, \bibinfo{pages}{061102} + (\bibinfo{year}{2008}), \eprint{arXiv:0802.2520 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0802.2520}. + +\blurb[{\citenamefont{Bentivegna et~al.}(2008)\citenamefont{Bentivegna, + Shoemaker, Hinder, , and Herrmann}}]{carpet-bentivegna2008a} +\bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Bentivegna}}, + \bibinfo{author}{\bibfnamefont{D.~M.} \bibnamefont{Shoemaker}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hinder}}, , \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, + \emph{\bibinfo{title}{Probing the binary black hole merger regime with scalar + perturbations}}, \bibinfo{journal}{Phys. Rev. D} + \textbf{\bibinfo{volume}{77}}, \bibinfo{pages}{124016} + (\bibinfo{year}{2008}), \eprint{arXiv:0801.3478 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0801.3478}. + +\blurb[{\citenamefont{Rezzolla + et~al.}(2008{\natexlab{a}})\citenamefont{Rezzolla, Barausse, Dorband, + Pollney, Reisswig, Seiler, and Husa}}]{carpet-rezzolla2007c} +\bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Barausse}}, + \bibinfo{author}{\bibfnamefont{E.~N.} \bibnamefont{Dorband}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, + \bibinfo{author}{\bibfnamefont{C.}~\bibnamefont{Reisswig}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Seiler}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Husa}}, + \emph{\bibinfo{title}{Final spin from the coalescence of two black holes}}, + \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{78}}, + \bibinfo{pages}{044002} (\bibinfo{year}{2008}{\natexlab{a}}), + \eprint{arXiv:0712.3541 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0712.3541}. + +\blurb[{\citenamefont{Damour et~al.}(2008)\citenamefont{Damour, Nagar, + Dorband, Pollney, and Rezzolla}}]{carpet-damour2007a} +\bibinfo{author}{\bibfnamefont{T.}~\bibnamefont{Damour}}, + \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Nagar}}, + \bibinfo{author}{\bibfnamefont{E.~N.} \bibnamefont{Dorband}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \emph{\bibinfo{title}{Faithful effective-one-body waveforms of equal-mass + coalescing black-hole binaries}}, \bibinfo{journal}{Phys. Rev. D} + \textbf{\bibinfo{volume}{77}}, \bibinfo{pages}{084017} + (\bibinfo{year}{2008}), \eprint{arXiv:0712.3003 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0712.3003}. + +\blurb[{\citenamefont{Shoemaker et~al.}(2008)\citenamefont{Shoemaker, + Vaishnav, Hinder, and Herrmann}}]{carpet-shoemaker2007a} +\bibinfo{author}{\bibfnamefont{D.~M.} \bibnamefont{Shoemaker}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Vaishnav}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hinder}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, + \emph{\bibinfo{title}{Numerical relativity meets data analysis: spinning + binary black hole case}}, \bibinfo{journal}{Class. Quantum Grav.} + \textbf{\bibinfo{volume}{25}}, \bibinfo{pages}{114047} + (\bibinfo{year}{2008}), \eprint{arXiv:0802.4427 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0802.4427}. + +\blurb[{\citenamefont{Zink et~al.}(2008)\citenamefont{Zink, Schnetter, and + Tiglio}}]{carpet-zink2007a} +\bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Zink}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Tiglio}}, + \emph{\bibinfo{title}{Multi-patch methods in general relativistic + astrophysics - {I.} {Hydrodynamical} flows on fixed backgrounds}}, + \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{77}}, + \bibinfo{pages}{103015} (\bibinfo{year}{2008}), \eprint{arXiv:0712.0353 + [astro-ph]}, \urlprefix\url{http://arxiv.org/abs/0712.0353}. + +\blurb[{\citenamefont{Berti et~al.}(2008)\citenamefont{Berti, Cardoso, + Gonz{\'a}lez, Sperhake, and Br{\"u}gmann}}]{carpet-berti2007a} +\bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Berti}}, + \bibinfo{author}{\bibfnamefont{V.}~\bibnamefont{Cardoso}}, + \bibinfo{author}{\bibfnamefont{J.~A.} \bibnamefont{Gonz{\'a}lez}}, + \bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Br{\"u}gmann}}, + \emph{\bibinfo{title}{Multipolar analysis of spinning binaries}}, + \bibinfo{journal}{Class. Quantum Grav.} \textbf{\bibinfo{volume}{25}}, + \bibinfo{pages}{114035} (\bibinfo{year}{2008}), \eprint{arXiv:0711.1097 + [gr-qc]}, \urlprefix\url{http://arxiv.org/abs/0711.1097}. + +\blurb[{\citenamefont{Bode et~al.}(2008)\citenamefont{Bode, Shoemaker, + Herrmann, and Hinder}}]{carpet-bode2007a} +\bibinfo{author}{\bibfnamefont{T.}~\bibnamefont{Bode}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Shoemaker}}, + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hinder}}, + \emph{\bibinfo{title}{Robustness of binary black hole mergers in the presence + of spurious radiation}}, \bibinfo{journal}{Phys. Rev. D} + \textbf{\bibinfo{volume}{78}}, \bibinfo{pages}{044027} + (\bibinfo{year}{2008}), \eprint{arXiv:0711.0669 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0711.0669}. + +\blurb[{\citenamefont{Hinder et~al.}(2008)\citenamefont{Hinder, Vaishnav, + Herrmann, Shoemaker, and Laguna}}]{carpet-hinder2007a} +\bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hinder}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Vaishnav}}, + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, + \bibinfo{author}{\bibfnamefont{D.~M.} \bibnamefont{Shoemaker}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Laguna}}, + \emph{\bibinfo{title}{Circularization and final spin in eccentric binary + black hole inspirals}}, \bibinfo{journal}{Phys. Rev. D} + \textbf{\bibinfo{volume}{77}}, \bibinfo{pages}{081502(R)} + (\bibinfo{year}{2008}), \eprint{arXiv:0710.5167 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0710.5167}. + +\blurb[{\citenamefont{Boyle et~al.}(2008)\citenamefont{Boyle, Kesden, and + Nissanke}}]{carpetresult-boyle2007a} +\bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Boyle}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Kesden}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Nissanke}}, + \emph{\bibinfo{title}{Binary black hole merger: symmetry and the spin + expansion}}, \bibinfo{journal}{Phys. Rev. Lett.} + \textbf{\bibinfo{volume}{100}}, \bibinfo{pages}{151101} + (\bibinfo{year}{2008}), \eprint{arXiv:0709.0299 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0709.0299}. + +\blurb[{\citenamefont{Sperhake + et~al.}(2008{\natexlab{b}})\citenamefont{Sperhake, Berti, Cardoso, + Gonz{\'a}lez, Br{\"u}gmann, and Ansorg}}]{carpet-sperhake2007a} +\bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Berti}}, + \bibinfo{author}{\bibfnamefont{V.}~\bibnamefont{Cardoso}}, + \bibinfo{author}{\bibfnamefont{J.~A.} \bibnamefont{Gonz{\'a}lez}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Br{\"u}gmann}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Ansorg}}, + \emph{\bibinfo{title}{Eccentric binary black-hole mergers: The transition + from inspiral to plunge in general relativity}}, \bibinfo{journal}{Phys. Rev. + D} \textbf{\bibinfo{volume}{78}}, \bibinfo{pages}{064069} + (\bibinfo{year}{2008}{\natexlab{b}}), \eprint{arXiv:0710.3823 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0710.3823}. + +\blurb[{\citenamefont{Rezzolla + et~al.}(2008{\natexlab{b}})\citenamefont{Rezzolla, Diener, Dorband, Pollney, + Reisswig, Schnetter, and Seiler}}]{carpet-rezzolla2007b} +\bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, + \bibinfo{author}{\bibfnamefont{E.~N.} \bibnamefont{Dorband}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, + \bibinfo{author}{\bibfnamefont{C.}~\bibnamefont{Reisswig}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Seiler}}, + \emph{\bibinfo{title}{The final spin from the coalescence of aligned-spin + black-hole binaries}}, \bibinfo{journal}{Astrophys. J. Lett.} + \textbf{\bibinfo{volume}{674}}, \bibinfo{pages}{L29} + (\bibinfo{year}{2008}{\natexlab{b}}), \eprint{arXiv:0710.3345 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0710.3345}. + +\blurb[{\citenamefont{Ajith et~al.}(2008)\citenamefont{Ajith, Babak, Chen, + Hewitson, Krishnan, Sintes, Whelan, Br{\"u}gmann, Diener, Dorband, + Gonz{\'a}lez, Hannam, Husa, Pollney, Rezzolla, Santamar{\'i}a, Sperhake, and + Thornburg}}]{carpet-ajith2007b} +\bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Ajith}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Babak}}, + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Chen}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Hewitson}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Krishnan}}, + \bibinfo{author}{\bibfnamefont{A.~M.} \bibnamefont{Sintes}}, + \bibinfo{author}{\bibfnamefont{J.~T.} \bibnamefont{Whelan}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Br{\"u}gmann}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, + \bibinfo{author}{\bibfnamefont{E.~N.} \bibnamefont{Dorband}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Gonz{\'a}lez}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Hannam}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Husa}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Santamar{\'i}a}}, + \bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Thornburg}}, + \emph{\bibinfo{title}{A template bank for gravitational waveforms from + coalescing binary black holes: {I.} non-spinning binaries}}, + \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{77}}, + \bibinfo{pages}{104017} (\bibinfo{year}{2008}), \eprint{arXiv:0710.2335 + [gr-qc]}, \urlprefix\url{http://arxiv.org/abs/0710.2335}. + +\blurb[{\citenamefont{Campanelli et~al.}(2008)\citenamefont{Campanelli, + Lousto, and Zlochower}}]{carpet-campanelli2007c} +\bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Campanelli}}, + \bibinfo{author}{\bibfnamefont{C.~O.} \bibnamefont{Lousto}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Zlochower}}, + \emph{\bibinfo{title}{Close encounters of three black holes}}, + \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{77}}, + \bibinfo{pages}{101501(5)} (\bibinfo{year}{2008}), \eprint{arXiv:0710.0879 + [gr-qc]}, \urlprefix\url{http://arxiv.org/abs/0710.0879}. + +\blurb[{\citenamefont{Buonanno et~al.}(2008)\citenamefont{Buonanno, Kidder, + and Lehner}}]{carpetresult-buonanno2007a} +\bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Buonanno}}, + \bibinfo{author}{\bibfnamefont{L.~E.} \bibnamefont{Kidder}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Lehner}}, + \emph{\bibinfo{title}{Estimating the final spin of a binary black hole + coalescence}}, \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{77}}, + \bibinfo{pages}{026004} (\bibinfo{year}{2008}), \eprint{arXiv:0709.3839 + [astro-ph]}, \urlprefix\url{http://arxiv.org/abs/0709.3839}. + +\blurb[{\citenamefont{Stark et~al.}(2008)\citenamefont{Stark, Allen, Goodale, + Radke, and Schnetter}}]{carpet-stark2007a} +\bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Stark}}, + \bibinfo{author}{\bibfnamefont{G.}~\bibnamefont{Allen}}, + \bibinfo{author}{\bibfnamefont{T.}~\bibnamefont{Goodale}}, + \bibinfo{author}{\bibfnamefont{T.}~\bibnamefont{Radke}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \emph{\bibinfo{title}{An extensible timing infrastructure for adaptive + large-scale applications}}, in \emph{\bibinfo{booktitle}{Parallel Processing + and Applied Mathematics}}, edited by + \bibinfo{editor}{\bibfnamefont{R.}~\bibnamefont{Wyrzykowski}} + (\bibinfo{publisher}{Springer}, \bibinfo{year}{2008}), vol. + \bibinfo{volume}{4967} of \emph{\bibinfo{series}{Lecture Notes in Computer + Science}}, pp. \bibinfo{pages}{1170--1179}, \eprint{arXiv:0705.3015 [cs.PF]}, + \urlprefix\url{http://arxiv.org/abs/0705.3015}. + +\blurb[{\citenamefont{Pollney et~al.}(2007)\citenamefont{Pollney, Reisswig, + Rezzolla, Szil{\'a}gyi, Ansorg, Deris, Diener, Dorband, Koppitz, Nagar, and + Schnetter}}]{carpet-pollney207a} +\bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, + \bibinfo{author}{\bibfnamefont{C.}~\bibnamefont{Reisswig}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Szil{\'a}gyi}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Ansorg}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Deris}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, + \bibinfo{author}{\bibfnamefont{E.~N.} \bibnamefont{Dorband}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Koppitz}}, + \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Nagar}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \emph{\bibinfo{title}{Recoil velocities from equal-mass binary black-hole + mergers: a systematic investigation of spin-orbit aligned configurations}}, + \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{76}}, + \bibinfo{pages}{124002} (\bibinfo{year}{2007}), \eprint{arXiv:0707.2559 + [gr-qc]}, \urlprefix\url{http://arxiv.org/abs/0707.2559}. + +\blurb[{\citenamefont{Lousto and Zlochower}(2008)}]{carpet-lousto2007a} +\bibinfo{author}{\bibfnamefont{C.~O.} \bibnamefont{Lousto}} \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Zlochower}}, + \emph{\bibinfo{title}{Further insight into gravitational recoil}}, + \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{77}}, + \bibinfo{pages}{044028} (\bibinfo{year}{2008}), \eprint{arXiv:0708.4048 + [gr-qc]}, \urlprefix\url{http://arxiv.org/abs/0708.4048}. + +\blurb[{\citenamefont{Rezzolla + et~al.}(2008{\natexlab{c}})\citenamefont{Rezzolla, Dorband, Reisswig, Diener, + Pollney, Schnetter, and Szil{\'s}gyi}}]{carpet-rezzolla2007a} +\bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \bibinfo{author}{\bibfnamefont{E.~N.} \bibnamefont{Dorband}}, + \bibinfo{author}{\bibfnamefont{C.}~\bibnamefont{Reisswig}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Szil{\'s}gyi}}, + \emph{\bibinfo{title}{Spin diagrams for equal-mass black-hole binaries with + aligned spins}}, \bibinfo{journal}{Astrophys. J.} + \textbf{\bibinfo{volume}{679}}, \bibinfo{pages}{1422} + (\bibinfo{year}{2008}{\natexlab{c}}), \eprint{arXiv:0708.3999 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0708.3999}. + +\blurb[{\citenamefont{Br{\"u}gmann + et~al.}(2008{\natexlab{a}})\citenamefont{Br{\"u}gmann, Gonz{\'a}lez, Hannam, + Husa, and Sperhake}}]{carpet-bruegmann2007a} +\bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Br{\"u}gmann}}, + \bibinfo{author}{\bibfnamefont{J.~A.} \bibnamefont{Gonz{\'a}lez}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Hannam}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Husa}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, + \emph{\bibinfo{title}{Exploring black hole superkicks}}, + \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{77}}, + \bibinfo{pages}{124047} (\bibinfo{year}{2008}{\natexlab{a}}), + \eprint{arXiv:0707.0135 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0707.0135}. + +\blurb[{\citenamefont{Brown et~al.}(2007)\citenamefont{Brown, Sarbach, + Schnetter, Tiglio, Diener, Hawke, and Pollney}}]{carpet-brown2007a} +\bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Brown}}, + \bibinfo{author}{\bibfnamefont{O.}~\bibnamefont{Sarbach}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Tiglio}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hawke}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, + \emph{\bibinfo{title}{Excision without excision}}, \bibinfo{journal}{Phys. + Rev. D} \textbf{\bibinfo{volume}{76}}, \bibinfo{pages}{081503(R)} + (\bibinfo{year}{2007}), \eprint{arXiv:0707.3101 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0707.3101}. + +\blurb[{\citenamefont{Krishnan et~al.}(2007)\citenamefont{Krishnan, Lousto, + and Zlochower}}]{carpet-krishnan2007a} +\bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Krishnan}}, + \bibinfo{author}{\bibfnamefont{C.~O.} \bibnamefont{Lousto}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Zlochower}}, + \emph{\bibinfo{title}{Quasi-local linear momentum in black-hole binaries}}, + \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{76}}, + \bibinfo{pages}{081501(R)} (\bibinfo{year}{2007}), \eprint{arXiv:0707.0876 + [gr-qc]}, \urlprefix\url{http://arxiv.org/abs/0707.0876}. + +\blurb[{\citenamefont{Herrmann + et~al.}(2007{\natexlab{a}})\citenamefont{Herrmann, Hinder, Shoemaker, Laguna, + and Matzner}}]{carpet-herrmann2007c} +\bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hinder}}, + \bibinfo{author}{\bibfnamefont{D.~M.} \bibnamefont{Shoemaker}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Laguna}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{R.~A.} \bibnamefont{Matzner}}, + \emph{\bibinfo{title}{Binary black holes: Spin dynamics and gravitational + recoil}}, \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{76}}, + \bibinfo{pages}{084032} (\bibinfo{year}{2007}{\natexlab{a}}), + \eprint{arXiv:0706.2541 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0706.2541}. + +\blurb[{\citenamefont{Vaishnav et~al.}(2007)\citenamefont{Vaishnav, Hinder, + Herrmann, and Shoemaker}}]{carpet-vaishnav2007a} +\bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Vaishnav}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hinder}}, + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{D.~M.} \bibnamefont{Shoemaker}}, + \emph{\bibinfo{title}{Matched filtering of numerical relativity templates of + spinning binary black holes}}, \bibinfo{journal}{Phys. Rev. D} + \textbf{\bibinfo{volume}{76}}, \bibinfo{pages}{084020} + (\bibinfo{year}{2007}), \eprint{arXiv:0705.3829 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0705.3829}. + +\blurb[{\citenamefont{Ajith et~al.}(2007)\citenamefont{Ajith, Babak, Chen, + Hewitson, Krishnan, Whelan, Br{\"u}gmann, Diener, González, Hannam, Husa, + Koppitz, Pollney, Rezzolla, Santamar{\'i}a, Sintes, Sperhake, and + Thornburg}}]{carpet-ajith2007a} +\bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Ajith}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Babak}}, + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Chen}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Hewitson}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Krishnan}}, + \bibinfo{author}{\bibfnamefont{J.~T.} \bibnamefont{Whelan}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Br{\"u}gmann}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{González}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Hannam}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Husa}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Koppitz}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Santamar{\'i}a}}, + \bibinfo{author}{\bibfnamefont{A.~M.} \bibnamefont{Sintes}}, + \bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Thornburg}}, + \emph{\bibinfo{title}{Phenomenological template family for black-hole + coalescence waveforms}}, \bibinfo{journal}{Class. Quantum Grav.} + \textbf{\bibinfo{volume}{24}}, \bibinfo{pages}{S689} (\bibinfo{year}{2007}), + \eprint{arXiv:0704.3764 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0704.3764}. + +\blurb[{\citenamefont{Thornburg et~al.}(2007)\citenamefont{Thornburg, Diener, + Pollney, Rezzolla, Schnetter, Seidel, and Takahashi}}]{carpet-thornburg2007a} +\bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Thornburg}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Seidel}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{R.}~\bibnamefont{Takahashi}}, + \emph{\bibinfo{title}{Are moving punctures equivalent to moving black + holes?}}, \bibinfo{journal}{Class. Quantum Grav.} + \textbf{\bibinfo{volume}{24}}, \bibinfo{pages}{3911} (\bibinfo{year}{2007}), + \eprint{arXiv:gr-qc/0701038}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0701038}. + +\blurb[{\citenamefont{Gonz{\'a}lez et~al.}(2007)\citenamefont{Gonz{\'a}lez, + Hannam, Sperhake, Br{\"u}gmann, and Husa}}]{carpet-gonzalez2007a} +\bibinfo{author}{\bibfnamefont{J.~A.} \bibnamefont{Gonz{\'a}lez}}, + \bibinfo{author}{\bibfnamefont{M.~D.} \bibnamefont{Hannam}}, + \bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Br{\"u}gmann}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Husa}}, + \emph{\bibinfo{title}{Supermassive recoil velocities for binary black-hole + mergers with antialigned spins}}, \bibinfo{journal}{Phys. Rev. Lett.} + \textbf{\bibinfo{volume}{98}}, \bibinfo{pages}{231101} + (\bibinfo{year}{2007}), \eprint{arXiv:gr-qc/0702052}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0702052}. + +\blurb[{\citenamefont{Campanelli + et~al.}(2007{\natexlab{a}})\citenamefont{Campanelli, Lousto, Zlochower, and + Merritt}}]{carpet-campanelli2007b} +\bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Campanelli}}, + \bibinfo{author}{\bibfnamefont{C.~O.} \bibnamefont{Lousto}}, + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Zlochower}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Merritt}}, + \emph{\bibinfo{title}{Maximum gravitational recoil}}, \bibinfo{journal}{Phys. + Rev. Lett.} \textbf{\bibinfo{volume}{98}}, \bibinfo{pages}{231102} + (\bibinfo{year}{2007}{\natexlab{a}}), \eprint{arXiv:gr-qc/0702133}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0702133}. + +\blurb[{\citenamefont{Campanelli + et~al.}(2007{\natexlab{b}})\citenamefont{Campanelli, Lousto, Zlochower, and + Merritt}}]{carpet-campanelli2007a} +\bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Campanelli}}, + \bibinfo{author}{\bibfnamefont{C.~O.} \bibnamefont{Lousto}}, + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Zlochower}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Merritt}}, + \emph{\bibinfo{title}{Large merger recoils and spin flips from generic + black-hole binaries}}, \bibinfo{journal}{Astrophys. J. Lett.} + \textbf{\bibinfo{volume}{659}}, \bibinfo{pages}{L5} + (\bibinfo{year}{2007}{\natexlab{b}}), \eprint{arXiv:gr-qc/0701164}. + +\blurb[{\citenamefont{Herrmann + et~al.}(2007{\natexlab{b}})\citenamefont{Herrmann, Hinder, Shoemaker, Laguna, + and Matzner}}]{carpet-herrmann2007b} +\bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hinder}}, + \bibinfo{author}{\bibfnamefont{D.~M.} \bibnamefont{Shoemaker}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Laguna}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{R.~A.} \bibnamefont{Matzner}}, + \emph{\bibinfo{title}{Gravitational recoil from spinning binary black hole + mergers}}, \bibinfo{journal}{Astrophys. J.} \textbf{\bibinfo{volume}{661}}, + \bibinfo{pages}{430} (\bibinfo{year}{2007}{\natexlab{b}}), + \eprint{arXiv:gr-qc/0701143}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0701143}. + +\blurb[{\citenamefont{Koppitz et~al.}(2007)\citenamefont{Koppitz, Pollney, + Reisswig, Rezzolla, Thornburg, Diener, and Schnetter}}]{carpet-koppitz2007a} +\bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Koppitz}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, + \bibinfo{author}{\bibfnamefont{C.}~\bibnamefont{Reisswig}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Thornburg}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \emph{\bibinfo{title}{Recoil velocities from equal-mass binary-black-hole + mergers}}, \bibinfo{journal}{Phys. Rev. Lett.} \textbf{\bibinfo{volume}{99}}, + \bibinfo{pages}{041102} (\bibinfo{year}{2007}), \eprint{arXiv:gr-qc/0701163}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0701163}. + +\blurb[{\citenamefont{Marronetti et~al.}(2007)\citenamefont{Marronetti, + Tichy, Br{\"u}gmann, Gonz{\'a}lez, Hannam, Husa, and + Sperhake}}]{carpet-marronetti2007a} +\bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Marronetti}}, + \bibinfo{author}{\bibfnamefont{W.}~\bibnamefont{Tichy}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Br{\"u}gmann}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Gonz{\'a}lez}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Hannam}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Husa}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, + \emph{\bibinfo{title}{Binary black holes on a budget: simulations using + workstations}}, \bibinfo{journal}{Class. Quantum Grav.} + \textbf{\bibinfo{volume}{24}}, \bibinfo{pages}{S45} (\bibinfo{year}{2007}), + \eprint{arXiv:gr-qc/0701123}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0701123}. + +\blurb[{\citenamefont{Giacomazzo and + Rezzolla}(2007)}]{carpet-giacomazzo2007a} +\bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Giacomazzo}} \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \emph{\bibinfo{title}{{WhiskyMHD}: a new numerical code for general + relativistic magnetohydrodynamics}}, \bibinfo{journal}{Class. Quantum Grav.} + \textbf{\bibinfo{volume}{24}}, \bibinfo{pages}{S235} (\bibinfo{year}{2007}), + \eprint{arXiv:gr-qc/0701109}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0701109}. + +\blurb[{\citenamefont{Herrmann + et~al.}(2007{\natexlab{c}})\citenamefont{Herrmann, Hinder, Shoemaker, and + Laguna}}]{carpet-herrmann2007a} +\bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hinder}}, + \bibinfo{author}{\bibfnamefont{D.~M.} \bibnamefont{Shoemaker}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Laguna}}, + \emph{\bibinfo{title}{Unequal mass binary black hole plunges and + gravitational recoil}}, \bibinfo{journal}{Class. Quantum Grav.} + \textbf{\bibinfo{volume}{24}}, \bibinfo{pages}{S33} + (\bibinfo{year}{2007}{\natexlab{c}}), \eprint{arXiv:gr-qc/0601026}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0601026}. + +\blurb[{\citenamefont{Baker et~al.}(2007)\citenamefont{Baker, Campanelli, + Pretorius, and Zlochower}}]{carpet-baker2006a} +\bibinfo{author}{\bibfnamefont{J.~G.} \bibnamefont{Baker}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Campanelli}}, + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Pretorius}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Zlochower}}, + \emph{\bibinfo{title}{Comparisons of binary black hole merger waveforms}}, + \bibinfo{journal}{Class. Quantum Grav.} \textbf{\bibinfo{volume}{24}}, + \bibinfo{pages}{S25} (\bibinfo{year}{2007}), \eprint{arXiv:gr-qc/0701016}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0701016}. + +\blurb[{\citenamefont{Pazos et~al.}(2007)\citenamefont{Pazos, Dorband, Nagar, + Palenzuela, Schnetter, and Tiglio}}]{carept-pazos2006a} +\bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Pazos}}, + \bibinfo{author}{\bibfnamefont{E.~N.} \bibnamefont{Dorband}}, + \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Nagar}}, + \bibinfo{author}{\bibfnamefont{C.}~\bibnamefont{Palenzuela}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Tiglio}}, + \emph{\bibinfo{title}{How far away is far enough for extracting numerical + waveforms, and how much do they depend on the extraction method?}}, + \bibinfo{journal}{Class. Quantum Grav.} \textbf{\bibinfo{volume}{24}}, + \bibinfo{pages}{S341} (\bibinfo{year}{2007}), \eprint{arXiv:gr-qc/0612149}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0612149}. + +\blurb[{\citenamefont{Szil{\'a}gyi et~al.}(2007)\citenamefont{Szil{\'a}gyi, + Pollney, Rezzolla, Thornburg, and Winicour}}]{carpet-szilagyi2006a} +\bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Szil{\'a}gyi}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Thornburg}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Winicour}}, + \emph{\bibinfo{title}{An explicit harmonic code for black-hole evolution + using excision}}, \bibinfo{journal}{Class. Quantum Grav.} + \textbf{\bibinfo{volume}{24}}, \bibinfo{pages}{S275} (\bibinfo{year}{2007}), + \eprint{arXiv:gr-qc/0612150}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0612150}. + +\blurb[{\citenamefont{Baiotti et~al.}(2007)\citenamefont{Baiotti, Hawke, and + Rezzolla}}]{carpet-baiotti2006b} +\bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Baiotti}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hawke}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \emph{\bibinfo{title}{On the gravitational radiation from the collapse of + neutron stars to rotating black holes}}, \bibinfo{journal}{Class. Quantum + Grav.} \textbf{\bibinfo{volume}{24}}, \bibinfo{pages}{S187} + (\bibinfo{year}{2007}), \eprint{arXiv:gr-qc/0701043}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0701043}. + +\blurb[{\citenamefont{Ott et~al.}(2007{\natexlab{a}})\citenamefont{Ott, + Dimmelmeier, Marek, Janka, Zink, Hawke, and Schnetter}}]{carpet-ott2006b} +\bibinfo{author}{\bibfnamefont{C.~D.} \bibnamefont{Ott}}, + \bibinfo{author}{\bibfnamefont{H.}~\bibnamefont{Dimmelmeier}}, + \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Marek}}, + \bibinfo{author}{\bibfnamefont{H.-T.} \bibnamefont{Janka}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Zink}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hawke}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \emph{\bibinfo{title}{Rotating collapse of stellar iron cores in general + relativity}}, \bibinfo{journal}{Class. Quantum Grav.} + \textbf{\bibinfo{volume}{24}}, \bibinfo{pages}{S139} + (\bibinfo{year}{2007}{\natexlab{a}}), \eprint{arXiv:astro-ph/0612638}, + \urlprefix\url{http://arxiv.org/abs/astro-ph/0612638}. + +\blurb[{\citenamefont{Zink et~al.}(2007)\citenamefont{Zink, Stergioulas, + Hawke, Ott, Schnetter, and M{\"u}ller}}]{carpet-zink2006a} +\bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Zink}}, + \bibinfo{author}{\bibfnamefont{N.}~\bibnamefont{Stergioulas}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hawke}}, + \bibinfo{author}{\bibfnamefont{C.~D.} \bibnamefont{Ott}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{M{\"u}ller}}, + \emph{\bibinfo{title}{Non-axisymmetric instability and fragmentation of + general relativistic quasitoroidal stars}}, \bibinfo{journal}{Phys. Rev. D} + \textbf{\bibinfo{volume}{76}}, \bibinfo{pages}{024019} + (\bibinfo{year}{2007}), \eprint{arXiv:astro-ph/0611601}, + \urlprefix\url{http://arxiv.org/abs/astro-ph/0611601}. + +\blurb[{\citenamefont{Br{\"u}gmann + et~al.}(2008{\natexlab{b}})\citenamefont{Br{\"u}gmann, Gonz{\'a}lez, Hannam, + Husa, Sperhake, and Tichy}}]{carpet-bruegmann2006a} +\bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Br{\"u}gmann}}, + \bibinfo{author}{\bibfnamefont{J.~A.} \bibnamefont{Gonz{\'a}lez}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Hannam}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Husa}}, + \bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{W.}~\bibnamefont{Tichy}}, + \emph{\bibinfo{title}{Calibration of moving puncture simulations}}, + \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{77}}, + \bibinfo{pages}{024027} (\bibinfo{year}{2008}{\natexlab{b}}), + \eprint{arXiv:gr-qc/0610128}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0610128}. + +\blurb[{\citenamefont{Reisswig et~al.}(2007)\citenamefont{Reisswig, Bishop, + Lai, Thornburg, and Szil{\'a}gyi}}]{carpet-reisswig2006a} +\bibinfo{author}{\bibfnamefont{C.}~\bibnamefont{Reisswig}}, + \bibinfo{author}{\bibfnamefont{N.~T.} \bibnamefont{Bishop}}, + \bibinfo{author}{\bibfnamefont{C.~W.} \bibnamefont{Lai}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Thornburg}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Szil{\'a}gyi}}, + \emph{\bibinfo{title}{Characteristic evolutions in numerical relativity using + six angular patches}}, \bibinfo{journal}{Class. Quantum Grav.} + \textbf{\bibinfo{volume}{24}}, \bibinfo{pages}{S327} (\bibinfo{year}{2007}), + \eprint{arXiv:gr-qc/0610019}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0610019}. + +\blurb[{\citenamefont{Ott et~al.}(2007{\natexlab{b}})\citenamefont{Ott, + Dimmelmeier, Marek, Janka, Hawke, Zink, and Schnetter}}]{carpet-ott2006a} +\bibinfo{author}{\bibfnamefont{C.~D.} \bibnamefont{Ott}}, + \bibinfo{author}{\bibfnamefont{H.}~\bibnamefont{Dimmelmeier}}, + \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Marek}}, + \bibinfo{author}{\bibfnamefont{H.-T.} \bibnamefont{Janka}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hawke}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Zink}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \emph{\bibinfo{title}{{3D} collapse of rotating stellar iron cores in general + relativity including deleptonization and a nuclear equation of state}}, + \bibinfo{journal}{Phys. Rev. Lett.} \textbf{\bibinfo{volume}{98}}, + \bibinfo{pages}{261101} (\bibinfo{year}{2007}{\natexlab{b}}), + \eprint{arXiv:astro-ph/0609819}, + \urlprefix\url{http://arxiv.org/abs/astro-ph/0609819}. + +\blurb[{\citenamefont{Baiotti and Rezzolla}(2006)}]{carpet-baiotti2006a} +\bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Baiotti}} \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \emph{\bibinfo{title}{Challenging the paradigm of singularity excision in + gravitational collapse}}, \bibinfo{journal}{Phys. Rev. Lett.} + \textbf{\bibinfo{volume}{97}}, \bibinfo{pages}{141101} + (\bibinfo{year}{2006}), \eprint{arXiv:gr-qc/0608113}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0608113}. + +\blurb[{\citenamefont{Dorband et~al.}(2006)\citenamefont{Dorband, Berti, + Diener, Schnetter, and Tiglio}}]{carpet-dorband2006a} +\bibinfo{author}{\bibfnamefont{E.~N.} \bibnamefont{Dorband}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Berti}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Tiglio}}, + \emph{\bibinfo{title}{A numerical study of the quasinormal mode excitation of + kerr black holes}}, \bibinfo{journal}{Phys. Rev. D} + \textbf{\bibinfo{volume}{74}}, \bibinfo{pages}{084028} + (\bibinfo{year}{2006}), \eprint{arXiv:gr-qc/0608091}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0608091}. + +\blurb[{\citenamefont{L{\"o}ffler et~al.}(2006)\citenamefont{L{\"o}ffler, + Rezzolla, and Ansorg}}]{carpet-loeffler2006a} +\bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{L{\"o}ffler}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Ansorg}}, + \emph{\bibinfo{title}{Numerical evolutions of a black hole-neutron star + system in full general relativity: Head-on collision}}, + \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{74}}, + \bibinfo{pages}{104018} (\bibinfo{year}{2006}), \eprint{arXiv:gr-qc/0606104}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0606104}. + +\blurb[{\citenamefont{Sperhake}(2007)}]{carpet-sperhake2006a} +\bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, + \emph{\bibinfo{title}{Binary black-hole evolutions of excision and puncture + data}}, \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{76}}, + \bibinfo{pages}{104015} (\bibinfo{year}{2007}), \eprint{arXiv:gr-qc/0606079}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0606079}. + +\blurb[{\citenamefont{Schnetter + et~al.}(2006{\natexlab{a}})\citenamefont{Schnetter, Krishnan, and + Beyer}}]{carpet-schnetter2006b} +\bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Krishnan}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Beyer}}, + \emph{\bibinfo{title}{Introduction to dynamical horizons in numerical + relativity}}, \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{74}}, + \bibinfo{pages}{024028} (\bibinfo{year}{2006}{\natexlab{a}}), + \eprint{arXiv:gr-qc/0604015}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0604015}. + +\blurb[{\citenamefont{Sopuerta et~al.}(2006)\citenamefont{Sopuerta, Sperhake, + and Laguna}}]{carpet-sopuerta2006a} +\bibinfo{author}{\bibfnamefont{C.~F.} \bibnamefont{Sopuerta}}, + \bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Laguna}}, + \emph{\bibinfo{title}{Hydro-without-hydro framework for simulations of black + hole-neutron star binaries}}, \bibinfo{journal}{Class. Quantum Grav.} + \textbf{\bibinfo{volume}{23}}, \bibinfo{pages}{S579} (\bibinfo{year}{2006}), + \eprint{arXiv:gr-qc/0605018}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0605018}. + +\blurb[{\citenamefont{Schnetter + et~al.}(2006{\natexlab{b}})\citenamefont{Schnetter, Diener, Dorband, and + Tiglio}}]{carpet-schnetter2006a} +\bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, + \bibinfo{author}{\bibfnamefont{E.~N.} \bibnamefont{Dorband}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Tiglio}}, + \emph{\bibinfo{title}{A multi-block infrastructure for three-dimensional + time-dependent numerical relativity}}, \bibinfo{journal}{Class. Quantum + Grav.} \textbf{\bibinfo{volume}{23}}, \bibinfo{pages}{S553} + (\bibinfo{year}{2006}{\natexlab{b}}), \eprint{arXiv:gr-qc/0602104}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0602104}. + +\blurb[{\citenamefont{Diener et~al.}(2007)\citenamefont{Diener, Dorband, + Schnetter, and Tiglio}}]{carpet-diener2005b} +\bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, + \bibinfo{author}{\bibfnamefont{E.~N.} \bibnamefont{Dorband}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Tiglio}}, + \emph{\bibinfo{title}{Optimized high-order derivative and dissipation + operators satisfying summation by parts, and applications in + three-dimensional multi-block evolutions}}, \bibinfo{journal}{J. Sci. + Comput.} \textbf{\bibinfo{volume}{32}}, \bibinfo{pages}{109} + (\bibinfo{year}{2007}), \eprint{arXiv:gr-qc/0512001}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0512001}. + +\blurb[{\citenamefont{Diener et~al.}(2006)\citenamefont{Diener, Herrmann, + Pollney, Schnetter, Seidel, Takahashi, Thornburg, and + Ventrella}}]{carpet-diener2005a} +\bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Diener}}, + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Seidel}}, + \bibinfo{author}{\bibfnamefont{R.}~\bibnamefont{Takahashi}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Thornburg}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Ventrella}}, + \emph{\bibinfo{title}{Accurate evolution of orbiting binary black holes}}, + \bibinfo{journal}{Phys. Rev. Lett.} \textbf{\bibinfo{volume}{96}}, + \bibinfo{pages}{121101} (\bibinfo{year}{2006}), \eprint{arXiv:gr-qc/0512108}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0512108}. + +\blurb[{\citenamefont{Sperhake et~al.}(2005)\citenamefont{Sperhake, Kelly, + Laguna, Smith, and Schnetter}}]{carpet-sperhake2005a} +\bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Kelly}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Laguna}}, + \bibinfo{author}{\bibfnamefont{K.~L.} \bibnamefont{Smith}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \emph{\bibinfo{title}{Black hole head-on collisions and gravitational waves + with fixed mesh-refinement and dynamic singularity excision}}, + \bibinfo{journal}{Phys. Rev. D} \textbf{\bibinfo{volume}{71}}, + \bibinfo{pages}{124042} (\bibinfo{year}{2005}), \eprint{arXiv:gr-qc/0503071}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0503071}. + +\blurb[{\citenamefont{Zink et~al.}(2006)\citenamefont{Zink, Stergioulas, + Hawke, Ott, Schnetter, and M{\"u}ller}}]{carpet-zink2005a} +\bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Zink}}, + \bibinfo{author}{\bibfnamefont{N.}~\bibnamefont{Stergioulas}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hawke}}, + \bibinfo{author}{\bibfnamefont{C.~D.} \bibnamefont{Ott}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{M{\"u}ller}}, + \emph{\bibinfo{title}{Formation of supermassive black holes through + fragmentation of torodial supermassive stars}}, \bibinfo{journal}{Phys. Rev. + Lett.} \textbf{\bibinfo{volume}{96}}, \bibinfo{pages}{161101} + (\bibinfo{year}{2006}), \eprint{arXiv:gr-qc/0501080}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0501080}. + +\blurb[{\citenamefont{Baiotti et~al.}(2005)\citenamefont{Baiotti, Hawke, + Rezzolla, and Schnetter}}]{carpet-baiotti2004a} +\bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Baiotti}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hawke}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \emph{\bibinfo{title}{Gravitational-wave emission from rotating gravitational + collapse in three dimensions}}, \bibinfo{journal}{Phys. Rev. Lett.} + \textbf{\bibinfo{volume}{95}}, \bibinfo{pages}{131101} + (\bibinfo{year}{2005}), \eprint{arXiv:gr-qc/0503016}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0503016}. + +\blurb[{\citenamefont{Schnetter et~al.}(2004)\citenamefont{Schnetter, Hawley, + and Hawke}}]{carpet-schnetter2003a} +\bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibinfo{author}{\bibfnamefont{S.~H.} \bibnamefont{Hawley}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hawke}}, + \emph{\bibinfo{title}{Evolutions in 3d numerical relativity using fixed mesh + refinement}}, \bibinfo{journal}{Class. Quantum Grav.} + \textbf{\bibinfo{volume}{21}}, \bibinfo{pages}{1465} (\bibinfo{year}{2004}), + \eprint{arXiv:gr-qc/0310042}, + \urlprefix\url{http://arxiv.org/abs/gr-qc/0310042}. + diff --git a/Carpet/CarpetWeb/publications/citations-refereed.blg b/Carpet/CarpetWeb/publications/citations-refereed.blg new file mode 100644 index 000000000..84cd33c49 --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-refereed.blg @@ -0,0 +1,46 @@ +This is BibTeX, Version 0.99c (Web2C 7.5.6) +The top-level auxiliary file: citations-refereed.aux +The style file: apsrev-titles-manyauthors.bst +Database file #1: citations-refereed.bib +Reallocated wiz_functions (elt_size=4) to 6000 items from 3000. +You've used 75 entries, + 3482 wiz_defined-function locations, + 1633 strings with 30180 characters, +and the built_in function-call counts, 86266 in all, are: += -- 4037 +> -- 4328 +< -- 537 ++ -- 3983 +- -- 1065 +* -- 13269 +:= -- 7974 +add.period$ -- 75 +call.type$ -- 75 +change.case$ -- 375 +chr.to.int$ -- 63 +cite$ -- 75 +duplicate$ -- 7487 +empty$ -- 6622 +format.name$ -- 2358 +if$ -- 15943 +int.to.chr$ -- 13 +int.to.str$ -- 76 +missing$ -- 1137 +newline$ -- 240 +num.names$ -- 226 +pop$ -- 1772 +preamble$ -- 1 +purify$ -- 300 +quote$ -- 0 +skip$ -- 3032 +stack$ -- 0 +substring$ -- 2179 +swap$ -- 6829 +text.length$ -- 530 +text.prefix$ -- 0 +top$ -- 0 +type$ -- 450 +warning$ -- 0 +while$ -- 227 +width$ -- 0 +write$ -- 988 diff --git a/Carpet/CarpetWeb/publications/citations-refereed.html-updated b/Carpet/CarpetWeb/publications/citations-refereed.html-updated new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-refereed.html-updated diff --git a/Carpet/CarpetWeb/publications/citations-refereed.log b/Carpet/CarpetWeb/publications/citations-refereed.log new file mode 100644 index 000000000..baeb02cf6 --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-refereed.log @@ -0,0 +1,198 @@ +This is pdfTeX, Version 3.141592-1.40.3 (Web2C 7.5.6) (format=pdflatex 2009.7.3) 3 AUG 2009 22:08 +entering extended mode +**\nonstopmode \input{/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publicatio +ns/citations-refereed.tex} + +(/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publications/citations-refereed +.tex (/opt/local/share/texmf-dist/tex/latex/revtex/revtex4.cls +Document Class: revtex4 2001/08/02 v4.0 (http://publish.aps.org/revtex4/ for do +cumentation) + Copyright (c) 2001 The American Physical Society. + mailto:revtex@aps.org + Licensed under the LPPL: +http://www.ctan.org/tex-archive/macros/latex/base/lppl.txt + Arthur Ogawa <ogawa@teleport.com> + Based on work by David Carlisle <david@dcarlisle.demon.co.uk>. +ltxutil: portions licensed from W. E. Baxter (web@superscript.com) +Class revtex4 Info: Repairing broken LateX \@sect on input line 596. +\intertabularlinepenalty=\count79 +\@tbpen=\count80 +\@arstrutbox@hline=\box26 +Class revtex4 Info: Repairing broken LaTeX \@xbitor on input line 1610. +ltxgrid: portions licensed from W. E. Baxter (web@superscript.com) +\c@linecount=\count81 +\output=\toks14 +\@protection@box=\box27 +\@topmark@saved=\toks15 +\footins@saved=\box28 +\pagesofar=\box29 +\footbox=\box30 +\pagegrid@col=\count82 +Class revtex4 Info: Incorporating package {textcase} [1998/11/12 v0.06 Text on +ly upper/lower case changing (DPC)]. on input line 3682. +(/opt/local/share/texmf-local/tex/latex/html/url.sty +Package: url 1999/03/02 ver 1.4 Verb mode for urls, email addresses, and file + names +) +\c@affil=\count83 +\absbox=\box31 +\c@part=\count84 +\c@section=\count85 +\c@subsection=\count86 +\c@subsubsection=\count87 +\c@paragraph=\count88 +\c@subparagraph=\count89 +\abovecaptionskip=\skip41 +\belowcaptionskip=\skip42 +\c@figure=\count90 +\c@table=\count91 + +(/opt/local/share/texmf-dist/tex/latex/natbib/natbib.sty +Package: natbib 2007/02/05 8.0 (PWD) +\bibhang=\skip43 +\bibsep=\skip44 +LaTeX Info: Redefining \cite on input line 602. +\c@NAT@ctr=\count92 +) +\widetext@top=\box32 +\widetext@bot=\box33 + +(/opt/local/share/texmf-dist/tex/latex/revtex/revsymb.sty +Package: revsymb 2001/08/02 v4.0 (http://publish.aps.org/revtex4/ for documenta +tion) +LaTeX Info: Redefining \REV@mathfrak on input line 118. +)) + +Class revtex4 Warning: No Society specified, using generic APS style. + +(/opt/local/share/texmf-dist/tex/latex/revtex/aps.rtx +File: aps.rtx 2001/08/02 v4.0 (http://publish.aps.org/revtex4/ for documentatio +n) +) +(/opt/local/share/texmf-dist/tex/latex/revtex/10pt.rtx +File: 10pt.rtx 2001/08/02 v4.0 (http://publish.aps.org/revtex4/ for documentati +on) +) +(/opt/local/share/texmf-dist/tex/generic/babel/babel.sty +Package: babel 2005/11/23 v3.8h The Babel package + +(/opt/local/share/texmf-dist/tex/generic/babel/english.ldf +Language: english 2005/03/30 v3.3o English support from the babel system + +(/opt/local/share/texmf-dist/tex/generic/babel/babel.def +File: babel.def 2005/11/23 v3.8h Babel common definitions +\babel@savecnt=\count93 +\U@D=\dimen102 +) +\l@british = a dialect from \language\l@english +\l@UKenglish = a dialect from \language\l@english +\l@canadian = a dialect from \language\l@american +\l@australian = a dialect from \language\l@british +\l@newzealand = a dialect from \language\l@british +)) +(/opt/local/share/texmf-dist/tex/latex/base/fontenc.sty +Package: fontenc 2005/09/27 v1.99g Standard LaTeX package + +(/opt/local/share/texmf-dist/tex/latex/base/t1enc.def +File: t1enc.def 2005/09/27 v1.99g Standard LaTeX file +LaTeX Font Info: Redeclaring font encoding T1 on input line 43. +)) +(/opt/local/share/texmf-dist/tex/latex/base/inputenc.sty +Package: inputenc 2006/05/05 v1.1b Input encoding file +\inpenc@prehook=\toks16 +\inpenc@posthook=\toks17 + +(/opt/local/share/texmf-local/tex/latex/html/latin9.def +File: latin1.def 1998/03/05 v0.97 Input encoding file(test version: still liabl +e to change) +)) +(/opt/local/share/texmf-dist/tex/latex/psnfss/mathpazo.sty +Package: mathpazo 2005/04/12 PSNFSS-v9.2a Palatino w/ Pazo Math (D.Puga, WaS) +\symupright=\mathgroup4 +) +(/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publications/citations-refereed +.aux) +\openout1 = `citations-refereed.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Try loading font information for T1+ppl on input line 8. + (/opt/local/share/texmf-dist/tex/latex/psnfss/t1ppl.fd +File: t1ppl.fd 2001/06/04 font definitions for T1/ppl. +) +Class revtex4 Info: Patching LaTeX tabular. on input line 8. +Class revtex4 Info: cite was not loaded (OK!) on input line 8. +Class revtex4 Info: multicol was not loaded (OK!) on input line 8. +\big@size=\dimen103 + +(/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publications/citations-refereed +.bbl +LaTeX Font Info: Font shape `T1/ppl/bx/n' in size <9> not available +(Font) Font shape `T1/ppl/b/n' tried instead on input line 106. +LaTeX Font Info: Try loading font information for T1+cmtt on input line 108. + + (/opt/local/share/texmf-dist/tex/latex/base/t1cmtt.fd +File: t1cmtt.fd 1999/05/25 v2.5h Standard LaTeX font definitions +) +LaTeX Font Info: Try loading font information for OT1+ppl on input line 108. + + +(/opt/local/share/texmf-dist/tex/latex/psnfss/ot1ppl.fd +File: ot1ppl.fd 2001/06/04 font definitions for OT1/ppl. +) +LaTeX Font Info: Try loading font information for OML+zplm on input line 108 +. + +(/opt/local/share/texmf-dist/tex/latex/psnfss/omlzplm.fd +File: omlzplm.fd 2002/09/08 Fontinst v1.914 font definitions for OML/zplm. +) +LaTeX Font Info: Try loading font information for OMS+zplm on input line 108 +. + +(/opt/local/share/texmf-dist/tex/latex/psnfss/omszplm.fd +File: omszplm.fd 2002/09/08 Fontinst v1.914 font definitions for OMS/zplm. +) +LaTeX Font Info: Try loading font information for OMX+zplm on input line 108 +. + +(/opt/local/share/texmf-dist/tex/latex/psnfss/omxzplm.fd +File: omxzplm.fd 2002/09/08 Fontinst v1.914 font definitions for OMX/zplm. +) +LaTeX Font Info: Try loading font information for OT1+zplm on input line 108 +. + +(/opt/local/share/texmf-dist/tex/latex/psnfss/ot1zplm.fd +File: ot1zplm.fd 2002/09/08 Fontinst v1.914 font definitions for OT1/zplm. +) [1{/opt/local/share/texmf/fonts/map/pdftex/updmap/pdftex.map}] [2] [3]) [4] +(/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publications/citations-refereed +.aux) ) +Here is how much of TeX's memory you used: + 2524 strings out of 94073 + 31931 string characters out of 1164798 + 111498 words of memory out of 1500000 + 5814 multiletter control sequences out of 10000+50000 + 16600 words of font info for 39 fonts, out of 1200000 for 2000 + 645 hyphenation exceptions out of 8191 + 26i,4n,21p,923b,407s stack positions out of 5000i,500n,6000p,200000b,5000s +{/opt/local/share/texmf-dist/fonts/enc/dvips/cm-super/cm-super-t1.enc}{/ +opt/local/share/texmf-dist/fonts/enc/dvips/base/8r.enc}</opt/local/share/texmf- +dist/fonts/type1/public/cm-super/sftt0900.pfb></opt/local/share/texmf-dist/font +s/type1/urw/palatino/uplb8a.pfb></opt/local/share/texmf-dist/fonts/type1/urw/pa +latino/uplr8a.pfb></opt/local/share/texmf-dist/fonts/type1/urw/palatino/uplri8a +.pfb> +Output written on citations-refereed.pdf (4 pages, 106463 bytes). +PDF statistics: + 33 PDF objects out of 1000 (max. 8388607) + 0 named destinations out of 1000 (max. 131072) + 1 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/Carpet/CarpetWeb/publications/citations-refereed.pdf b/Carpet/CarpetWeb/publications/citations-refereed.pdf Binary files differnew file mode 100644 index 000000000..a297011d6 --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-refereed.pdf diff --git a/Carpet/CarpetWeb/publications/citations-refereed.tex b/Carpet/CarpetWeb/publications/citations-refereed.tex new file mode 100644 index 000000000..f667172a3 --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-refereed.tex @@ -0,0 +1,15 @@ +\documentclass{revtex4} + +\usepackage[english]{babel} +\usepackage[T1]{fontenc} +\usepackage[latin9]{inputenc} +\usepackage{mathpazo} + +\begin{document} + +\nocite{*} + +\bibliographystyle{apsrev-titles-manyauthors} +\bibliography{citations-refereed} + +\end{document} diff --git a/Carpet/CarpetWeb/publications/citations-report.aux b/Carpet/CarpetWeb/publications/citations-report.aux new file mode 100644 index 000000000..87c079724 --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-report.aux @@ -0,0 +1,35 @@ +\relax +\citation{*} +\bibdata{citations-report} +\bibcite{carpet-zink2005b}{{1}{2006}{{Zink et~al.}}{{Zink, Stergioulas, Hawke, Ott, Schnetter, and M{\"u}ller}}} +\bibcite{carpet-reisswig2009b}{{2}{2009{}}{{Reisswig et~al.}}{{Reisswig, Bishop, Pollney, and Szil{\'a}gyi}}} +\bibcite{carpet-sperhake2009a}{{3}{2009}{{Sperhake et~al.}}{{Sperhake, Cardoso, Pretorius, Berti, Hinderer, and Yunes}}} +\bibcite{carpet-lovelace2009a}{{4}{2009}{{Lovelace et~al.}}{{Lovelace, Chen, Cohen, Kaplan, Keppel, Matthews, Nichols, Scheel, and Sperhake}}} +\bibcite{carpet-healy2009a}{{5}{2009{}}{{Healy et~al.}}{{Healy, Levin, and Shoemaker}}} +\bibcite{carpet-reisswig2009a}{{6}{2009{}}{{Reisswig et~al.}}{{Reisswig, Husa, Rezzolla, Dorband, Pollney, and Seiler}}} +\bibcite{carpet-healy2009b}{{7}{2009{}}{{Healy et~al.}}{{Healy, Laguna, Matzner, and Shoemaker}}} +\bibcite{carpet-ott2009a}{{8}{2009}{{Ott}}{{}}} +\bibcite{carpet-lousto2009a}{{9}{2009}{{Lousto et~al.}}{{Lousto, Campanelli, and Zlochower}}} +\bibcite{carpet-barausse2009a}{{10}{2009}{{Barausse and Rezzolla}}{{}}} +\bibcite{carpet-bernuzzi2009a}{{11}{2009}{{Bernuzzi et~al.}}{{Bernuzzi, Baiotti, Corvino, Pietri, and Nagar}}} +\bibcite{carpet-bode2009a}{{12}{2009}{{Bode et~al.}}{{Bode, Laguna, Shoemaker, Hinder, Herrmann, and Vishnav}}} +\bibcite{carpetresult-nakano2008a}{{13}{2009}{{Nakano et~al.}}{{Nakano, Campanelli, Lousto, and Zlochower}}} +\bibcite{carpet-giacomazzo2009a}{{14}{2009}{{Giacomazzo et~al.}}{{Giacomazzo, Rezzolla, and Baiotti}}} +\bibcite{carpet-tao2008a}{{15}{2008}{{Tao et~al.}}{{Tao, Allen, Hinder, Schnetter, and Zlochower}}} +\bibcite{carpet-hinder2008a}{{16}{2008}{{Hinder et~al.}}{{Hinder, Herrmann, Laguna, and Shoemaker}}} +\bibcite{carpetresult-baker2007a}{{17}{2007}{{Baker et~al.}}{{Baker, Boggs, Centrella, Kelly, McWilliams, and van Meter}}} +\bibcite{carpet-baiotti2006c}{{18}{2007}{{Baiotti et~al.}}{{Baiotti, Hawke, Rezzolla, and Schnetter}}} +\bibcite{carpet-sperhake2006c}{{19}{2007}{{Sperhake}}{{}}} +\bibcite{carpetresult-font2006a}{{20}{2007}{{Font}}{{}}} +\bibcite{carpet-sperhake2006b}{{21}{2007}{{Sperhake et~al.}}{{Sperhake, Br{\"u}gmann, Gonz{\'a}lez, Hannam, and Husa}}} +\bibcite{carpet-zink2006b}{{22}{2007{}}{{Zink et~al.}}{{Zink, Stergioulas, Hawke, Ott, Schnetter, and M{\"u}ller}}} +\bibcite{carpet-zink2006c}{{23}{2007{}}{{Zink et~al.}}{{Zink, Stergioulas, Hawke, Ott, Schnetter, and M{\"u}ller}}} +\global \chardef \firstnote@num23\relax +\bibstyle{apsrev-titles-manyauthors} +\select@language{english} +\@writefile{toc}{\select@language{english}} +\@writefile{lof}{\select@language{english}} +\@writefile{lot}{\select@language{english}} +\@writefile{toc}{\contentsline {section}{\numberline {}References}{1}{}} +\newlabel{LastBibItem}{{23}{1}{}{}{}} +\newlabel{LastPage}{{}{1}} diff --git a/Carpet/CarpetWeb/publications/citations-report.bbl b/Carpet/CarpetWeb/publications/citations-report.bbl new file mode 100644 index 000000000..f020e907e --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-report.bbl @@ -0,0 +1,292 @@ +\begin{thebibliography}{23} +\expandafter\ifx\csname natexlab\endcsname\relax\def\natexlab#1{#1}\fi +\expandafter\ifx\csname bibnamefont\endcsname\relax + \def\bibnamefont#1{#1}\fi +\expandafter\ifx\csname bibfnamefont\endcsname\relax + \def\bibfnamefont#1{#1}\fi +\expandafter\ifx\csname citenamefont\endcsname\relax + \def\citenamefont#1{#1}\fi +\expandafter\ifx\csname url\endcsname\relax + \def\url#1{\texttt{#1}}\fi +\expandafter\ifx\csname urlprefix\endcsname\relax\def\urlprefix{URL }\fi +\providecommand{\bibinfo}[2]{#2} +\providecommand{\eprint}[2][]{\url{#2}} + +\bibitem[{\citenamefont{Zink et~al.}(2006)\citenamefont{Zink, Stergioulas, + Hawke, Ott, Schnetter, and M{\"u}ller}}]{carpet-zink2005b} +\bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Zink}}, + \bibinfo{author}{\bibfnamefont{N.}~\bibnamefont{Stergioulas}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hawke}}, + \bibinfo{author}{\bibfnamefont{C.~D.} \bibnamefont{Ott}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{M{\"u}ller}}, + \emph{\bibinfo{title}{Rotational instabilities in supermassive stars: a new + way to form supermassive black holes}}, in + \emph{\bibinfo{booktitle}{International Scientific Workshop on Cosmology and + Gravitational Physics, Thessaloniki, December 15-16, 2005}}, edited by + \bibinfo{editor}{\bibfnamefont{N.~K.} \bibnamefont{Spyrou}}, + \bibinfo{editor}{\bibfnamefont{N.}~\bibnamefont{Stergioulas}}, + \bibnamefont{and} \bibinfo{editor}{\bibfnamefont{C.}~\bibnamefont{Tsagas}} + (\bibinfo{publisher}{ZITI}, \bibinfo{year}{2006}), pp. + \bibinfo{pages}{155--160}. + +\bibitem[{\citenamefont{Reisswig + et~al.}(2009{\natexlab{a}})\citenamefont{Reisswig, Bishop, Pollney, and + Szil{\'a}gyi}}]{carpet-reisswig2009b} +\bibinfo{author}{\bibfnamefont{C.}~\bibnamefont{Reisswig}}, + \bibinfo{author}{\bibfnamefont{N.~T.} \bibnamefont{Bishop}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Szil{\'a}gyi}}, + \emph{\bibinfo{title}{Unambiguous determination of gravitational waveforms + from binary black hole mergers}} (\bibinfo{year}{2009}{\natexlab{a}}), + \bibinfo{note}{arXiv:0907.2637 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0907.2637}. + +\bibitem[{\citenamefont{Sperhake et~al.}(2009)\citenamefont{Sperhake, Cardoso, + Pretorius, Berti, Hinderer, and Yunes}}]{carpet-sperhake2009a} +\bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, + \bibinfo{author}{\bibfnamefont{V.}~\bibnamefont{Cardoso}}, + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Pretorius}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Berti}}, + \bibinfo{author}{\bibfnamefont{T.}~\bibnamefont{Hinderer}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{N.}~\bibnamefont{Yunes}}, + \emph{\bibinfo{title}{Cross section, final spin and zoom-whirl behavior in + high-energy black hole collisions}} (\bibinfo{year}{2009}), + \bibinfo{note}{arXiv:0907.1252 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0907.1252}. + +\bibitem[{\citenamefont{Lovelace et~al.}(2009)\citenamefont{Lovelace, Chen, + Cohen, Kaplan, Keppel, Matthews, Nichols, Scheel, and + Sperhake}}]{carpet-lovelace2009a} +\bibinfo{author}{\bibfnamefont{G.}~\bibnamefont{Lovelace}}, + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Chen}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Cohen}}, + \bibinfo{author}{\bibfnamefont{J.~D.} \bibnamefont{Kaplan}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Keppel}}, + \bibinfo{author}{\bibfnamefont{K.~D.} \bibnamefont{Matthews}}, + \bibinfo{author}{\bibfnamefont{D.~A.} \bibnamefont{Nichols}}, + \bibinfo{author}{\bibfnamefont{M.~A.} \bibnamefont{Scheel}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, + \emph{\bibinfo{title}{Momentum flow in black-hole binaries: {II.} {Numerical} + simulations of equal-mass, head-on mergers with antiparallel spins}} + (\bibinfo{year}{2009}), \bibinfo{note}{arXiv:0907.0869 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0907.0869}. + +\bibitem[{\citenamefont{Healy et~al.}(2009{\natexlab{a}})\citenamefont{Healy, + Levin, and Shoemaker}}]{carpet-healy2009a} +\bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Healy}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Levin}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Shoemaker}}, + \emph{\bibinfo{title}{Zoom-whirl orbits in black hole binaries}} + (\bibinfo{year}{2009}{\natexlab{a}}), \bibinfo{note}{arXiv:0907.0671 + [gr-qc]}, \urlprefix\url{http://arxiv.org/abs/0907.0671}. + +\bibitem[{\citenamefont{Reisswig + et~al.}(2009{\natexlab{b}})\citenamefont{Reisswig, Husa, Rezzolla, Dorband, + Pollney, and Seiler}}]{carpet-reisswig2009a} +\bibinfo{author}{\bibfnamefont{C.}~\bibnamefont{Reisswig}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Husa}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \bibinfo{author}{\bibfnamefont{E.~N.} \bibnamefont{Dorband}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Seiler}}, + \emph{\bibinfo{title}{Gravitational-wave detectability of equal-mass + black-hole binaries with aligned spins}} + (\bibinfo{year}{2009}{\natexlab{b}}), \bibinfo{note}{arXiv:0907.0462 + [gr-qc]}, \urlprefix\url{http://arxiv.org/abs/0907.0462}. + +\bibitem[{\citenamefont{Healy et~al.}(2009{\natexlab{b}})\citenamefont{Healy, + Laguna, Matzner, and Shoemaker}}]{carpet-healy2009b} +\bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Healy}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Laguna}}, + \bibinfo{author}{\bibfnamefont{R.~A.} \bibnamefont{Matzner}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{D.~M.} + \bibnamefont{Shoemaker}}, \emph{\bibinfo{title}{Final mass and spin of merged + black holes and the golden black hole}} (\bibinfo{year}{2009}{\natexlab{b}}), + \bibinfo{note}{arXiv:0905.3914 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0905.3914}. + +\bibitem[{\citenamefont{Ott}(2009)}]{carpet-ott2009a} +\bibinfo{author}{\bibfnamefont{C.~D.} \bibnamefont{Ott}}, + \emph{\bibinfo{title}{Probing the core-collapse supernova mechanism with + gravitational waves}} (\bibinfo{year}{2009}), \bibinfo{note}{arXiv:0905.2797 + [gr-qc]}, \urlprefix\url{http://arxiv.org/abs/0905.2797}. + +\bibitem[{\citenamefont{Lousto et~al.}(2009)\citenamefont{Lousto, Campanelli, + and Zlochower}}]{carpet-lousto2009a} +\bibinfo{author}{\bibfnamefont{C.~O.} \bibnamefont{Lousto}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Campanelli}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Zlochower}}, + \emph{\bibinfo{title}{Remnant masses, spins and recoils from the merger of + generic black-hole binaries}} (\bibinfo{year}{2009}), + \bibinfo{note}{arXiv:0904.3541 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0904.3541}. + +\bibitem[{\citenamefont{Barausse and Rezzolla}(2009)}]{carpet-barausse2009a} +\bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Barausse}} \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \emph{\bibinfo{title}{Predicting the direction of the final spin from the + coalescence of two black holes}} (\bibinfo{year}{2009}), + \bibinfo{note}{arXiv:0904.2577 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0904.2577}. + +\bibitem[{\citenamefont{Bernuzzi et~al.}(2009)\citenamefont{Bernuzzi, Baiotti, + Corvino, Pietri, and Nagar}}]{carpet-bernuzzi2009a} +\bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Bernuzzi}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Baiotti}}, + \bibinfo{author}{\bibfnamefont{G.}~\bibnamefont{Corvino}}, + \bibinfo{author}{\bibfnamefont{R.~D.} \bibnamefont{Pietri}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Nagar}}, + \emph{\bibinfo{title}{Gravitational-wave extraction from neutron-star + oscillations}} (\bibinfo{year}{2009}), \bibinfo{note}{arXiv:0902.2720 + [gr-qc]}, \urlprefix\url{http://arxiv.org/abs/0902.2720}. + +\bibitem[{\citenamefont{Bode et~al.}(2009)\citenamefont{Bode, Laguna, + Shoemaker, Hinder, Herrmann, and Vishnav}}]{carpet-bode2009a} +\bibinfo{author}{\bibfnamefont{T.}~\bibnamefont{Bode}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Laguna}}, + \bibinfo{author}{\bibfnamefont{D.~M.} \bibnamefont{Shoemaker}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hinder}}, + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Vishnav}}, + \emph{\bibinfo{title}{Binary black hole evolutions of approximate puncture + initial data}} (\bibinfo{year}{2009}), \bibinfo{note}{arXiv:0902.1127 + [gr-qc]}, \urlprefix\url{http://arxiv.org/abs/0902.1127}. + +\bibitem[{\citenamefont{Nakano et~al.}(2009)\citenamefont{Nakano, Campanelli, + Lousto, and Zlochower}}]{carpetresult-nakano2008a} +\bibinfo{author}{\bibfnamefont{H.}~\bibnamefont{Nakano}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Campanelli}}, + \bibinfo{author}{\bibfnamefont{C.~O.} \bibnamefont{Lousto}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Zlochower}}, + \emph{\bibinfo{title}{Comparison of post-{Newtonian} and numerical evolutions + of black-hole binaries}} (\bibinfo{year}{2009}), + \bibinfo{note}{arXiv:0901.3861 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0901.3861}. + +\bibitem[{\citenamefont{Giacomazzo et~al.}(2009)\citenamefont{Giacomazzo, + Rezzolla, and Baiotti}}]{carpet-giacomazzo2009a} +\bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Giacomazzo}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Baiotti}}, + \emph{\bibinfo{title}{The influence of magnetic fields on the + gravitational-wave emission from binary neutron stars}} + (\bibinfo{year}{2009}), \bibinfo{note}{arXiv:0901.2722v1 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0901.2722}. + +\bibitem[{\citenamefont{Tao et~al.}(2008)\citenamefont{Tao, Allen, Hinder, + Schnetter, and Zlochower}}]{carpet-tao2008a} +\bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Tao}}, + \bibinfo{author}{\bibfnamefont{G.}~\bibnamefont{Allen}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hinder}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Zlochower}}, + \emph{\bibinfo{title}{{XiRel}: Standard benchmarks for numerical relativity + codes using {Cactus} and {Carpet}}}, \bibinfo{type}{Tech. Rep.} + \bibinfo{number}{5}, \bibinfo{institution}{Center for Computation \& + Technology, Louisiana State University} (\bibinfo{year}{2008}), + \urlprefix\url{http://www.cct.lsu.edu/CCT-TR/CCT-TR-2008-5}. + +\bibitem[{\citenamefont{Hinder et~al.}(2008)\citenamefont{Hinder, Herrmann, + Laguna, and Shoemaker}}]{carpet-hinder2008a} +\bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hinder}}, + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Laguna}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Shoemaker}}, + \emph{\bibinfo{title}{Comparisons of eccentric binary black hole simulations + with post-{Newtonian} models}} (\bibinfo{year}{2008}), + \bibinfo{note}{arXiv:0806.1037 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0806.1037}. + +\bibitem[{\citenamefont{Baker et~al.}(2007)\citenamefont{Baker, Boggs, + Centrella, Kelly, McWilliams, and van Meter}}]{carpetresult-baker2007a} +\bibinfo{author}{\bibfnamefont{J.~G.} \bibnamefont{Baker}}, + \bibinfo{author}{\bibfnamefont{W.~D.} \bibnamefont{Boggs}}, + \bibinfo{author}{\bibfnamefont{J.~M.} \bibnamefont{Centrella}}, + \bibinfo{author}{\bibfnamefont{B.~J.} \bibnamefont{Kelly}}, + \bibinfo{author}{\bibfnamefont{S.~T.} \bibnamefont{McWilliams}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{J.~R.} \bibnamefont{van + Meter}}, \emph{\bibinfo{title}{Gravitational waves from black-hole mergers}}, + in \emph{\bibinfo{booktitle}{Proceedings of the 2007 Spring Symposium of the + Space Telescope Science Institute (Baltimore, MD)}} (\bibinfo{year}{2007}), + p. \bibinfo{pages}{(to be published)}, \eprint{arXiv:0708.4202 [astro-ph]}, + \urlprefix\url{http://arxiv.org/abs/0708.4202}. + +\bibitem[{\citenamefont{Baiotti et~al.}(2007)\citenamefont{Baiotti, Hawke, + Rezzolla, and Schnetter}}]{carpet-baiotti2006c} +\bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Baiotti}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hawke}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \emph{\bibinfo{title}{Details on the gravitational-wave emission from + rotating gravitational collapse in {3D}}}, in + \emph{\bibinfo{booktitle}{XXIXth Spanish Relativity Meeting (E.R.E. 2006)}} + (\bibinfo{year}{2007}), vol.~\bibinfo{volume}{66} of + \emph{\bibinfo{series}{J. Phys.: Conf. Ser.}}, p. \bibinfo{pages}{012045}, + \urlprefix\url{http://stacks.iop.org/JPConf/66/012045}. + +\bibitem[{\citenamefont{Sperhake}(2007)}]{carpet-sperhake2006c} +\bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, + \emph{\bibinfo{title}{Black-hole binary evolutions with the {LEAN} code}}, in + \emph{\bibinfo{booktitle}{XXIXth Spanish Relativity Meeting (E.R.E. 2006)}} + (\bibinfo{year}{2007}), vol.~\bibinfo{volume}{66} of + \emph{\bibinfo{series}{J. Phys.: Conf. Ser.}}, p. \bibinfo{pages}{012049}, + \urlprefix\url{http://stacks.iop.org/JPConf/66/012049}. + +\bibitem[{\citenamefont{Font}(2007)}]{carpetresult-font2006a} +\bibinfo{author}{\bibfnamefont{J.~A.} \bibnamefont{Font}}, + \emph{\bibinfo{title}{Current status of relativistic core collapse + simulations}}, in \emph{\bibinfo{booktitle}{XXIXth Spanish Relativity Meeting + (E.R.E. 2006)}} (\bibinfo{year}{2007}), vol.~\bibinfo{volume}{66} of + \emph{\bibinfo{series}{J. Phys.: Conf. Ser.}}, p. \bibinfo{pages}{012063}, + \urlprefix\url{http://stacks.iop.org/JPConf/66/012063}. + +\bibitem[{\citenamefont{Sperhake et~al.}(2007)\citenamefont{Sperhake, + Br{\"u}gmann, Gonz{\'a}lez, Hannam, and Husa}}]{carpet-sperhake2006b} +\bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Br{\"u}gmann}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Gonz{\'a}lez}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Hannam}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Husa}}, + \emph{\bibinfo{title}{Head-on collisions of different initial data}}, in + \emph{\bibinfo{booktitle}{Proceedings of the 11th Marcel Grossmann Meeting + (MG11) in Berlin, Germany, July 23-29, 2006}} (\bibinfo{year}{2007}), + \eprint{arXiv:0705.2035 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0705.2035}. + +\bibitem[{\citenamefont{Zink et~al.}(2007{\natexlab{a}})\citenamefont{Zink, + Stergioulas, Hawke, Ott, Schnetter, and M{\"u}ller}}]{carpet-zink2006b} +\bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Zink}}, + \bibinfo{author}{\bibfnamefont{N.}~\bibnamefont{Stergioulas}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hawke}}, + \bibinfo{author}{\bibfnamefont{C.~D.} \bibnamefont{Ott}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{M{\"u}ller}}, + \emph{\bibinfo{title}{Fragmentation of general relativistic quasi-toroidal + polytropes}}, in \emph{\bibinfo{booktitle}{Proceedings of the 11th Marcel + Grossmann Meeting (MG11) in Berlin, Germany, July 23-29, 2006}} + (\bibinfo{year}{2007}{\natexlab{a}}), \eprint{arXiv:0704.0431 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0704.0431}. + +\bibitem[{\citenamefont{Zink et~al.}(2007{\natexlab{b}})\citenamefont{Zink, + Stergioulas, Hawke, Ott, Schnetter, and M{\"u}ller}}]{carpet-zink2006c} +\bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Zink}}, + \bibinfo{author}{\bibfnamefont{N.}~\bibnamefont{Stergioulas}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hawke}}, + \bibinfo{author}{\bibfnamefont{C.~D.} \bibnamefont{Ott}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{M{\"u}ller}}, + \emph{\bibinfo{title}{Supermassive black hole formation through rotational + instabilities}}, in \emph{\bibinfo{booktitle}{12th Conference on Recent + Developments in Gravity (NEB XII)}} (\bibinfo{year}{2007}{\natexlab{b}}), + vol.~\bibinfo{volume}{68} of \emph{\bibinfo{series}{J. Phys.: Conf. Ser.}}, + p. \bibinfo{pages}{012050}, + \urlprefix\url{http://stacks.iop.org/JPConf/68/012050}. + +\end{thebibliography} diff --git a/Carpet/CarpetWeb/publications/citations-report.bib b/Carpet/CarpetWeb/publications/citations-report.bib new file mode 100644 index 000000000..bb02083ed --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-report.bib @@ -0,0 +1,296 @@ + +@InProceedings{ carpet-zink2005b, + status = {report}, + author = {Burkhard Zink and Nikolaos Stergioulas and Ian Hawke and + Christian D. Ott and Erik Schnetter and Ewald M{\"u}ller}, + title = {Rotational instabilities in supermassive stars: a new way + to form supermassive black holes}, + booktitle = {International Scientific Workshop on Cosmology and + Gravitational Physics, Thessaloniki, December 15-16, 2005}, + pages = {155-160}, + year = 2006, + editor = {N. K. Spyrou and N. Stergioulas and C. Tsagas}, + publisher = {ZITI} +} + +@Unpublished{ carpet-reisswig2009b, + status = {report}, + author = {Christian Reisswig and Nigel T. Bishop and Denis Pollney + and B{\'e}la Szil{\'a}gyi}, + title = {Unambiguous determination of gravitational waveforms from + binary black hole mergers}, + note = {arXiv:0907.2637 [gr-qc]}, + year = 2009, + url = {http://arxiv.org/abs/0907.2637} +} + +@Unpublished{ carpet-sperhake2009a, + status = {report}, + author = {Ulrich Sperhake and Vitor Cardoso and Frans Pretorius and + Emanuele Berti and Tanja Hinderer and Nicolas Yunes}, + title = {Cross section, final spin and zoom-whirl behavior in + high-energy black hole collisions}, + note = {arXiv:0907.1252 [gr-qc]}, + year = 2009, + receiveddate = {2009-07-07}, + url = {http://arxiv.org/abs/0907.1252} +} + +@Unpublished{ carpet-lovelace2009a, + status = {report}, + author = {Geoffrey Lovelace and Yanbei Chen and Michael Cohen and + Jeffrey D. Kaplan and Drew Keppel and Keith D. Matthews and + David A. Nichols and Mark A. Scheel and Ulrich Sperhake}, + title = {Momentum flow in black-hole binaries: {II.} {Numerical} + simulations of equal-mass, head-on mergers with + antiparallel spins}, + note = {arXiv:0907.0869 [gr-qc]}, + year = 2009, + receiveddate = {2009-07-05}, + url = {http://arxiv.org/abs/0907.0869} +} + +@Unpublished{ carpet-healy2009a, + status = {report}, + author = {James Healy and Janna Levin and Deirdre Shoemaker}, + title = {Zoom-Whirl Orbits in Black Hole Binaries}, + note = {arXiv:0907.0671 [gr-qc]}, + year = 2009, + receiveddate = {2009-07-03}, + url = {http://arxiv.org/abs/0907.0671} +} + +@Unpublished{ carpet-reisswig2009a, + status = {report}, + author = {Christian Reisswig and Sascha Husa and Luciano Rezzolla + and Ernst Nils Dorband and Denis Pollney and Jennifer + Seiler}, + title = {Gravitational-wave detectability of equal-mass black-hole + binaries with aligned spins}, + note = {arXiv:0907.0462 [gr-qc]}, + year = 2009, + receiveddate = {2009-07-02}, + url = {http://arxiv.org/abs/0907.0462} +} + +@Unpublished{ carpet-healy2009b, + status = {report}, + author = {James Healy and Pablo Laguna and Richard A. Matzner and + Deirdre M. Shoemaker}, + title = {Final Mass and Spin of Merged Black Holes and the Golden + Black Hole}, + note = {arXiv:0905.3914 [gr-qc]}, + year = 2009, + receiveddate = {2009-05-24}, + url = {http://arxiv.org/abs/0905.3914} +} + +@Unpublished{ carpet-ott2009a, + status = {report}, + author = {Christian D. Ott}, + title = {Probing the Core-Collapse Supernova Mechanism with + Gravitational Waves}, + note = {arXiv:0905.2797 [gr-qc]}, + year = 2009, + receiveddate = {2009-05-18}, + url = {http://arxiv.org/abs/0905.2797} +} + +@Unpublished{ carpet-lousto2009a, + status = {report}, + author = {Carlos O. Lousto and Manuela Campanelli and Yosef + Zlochower}, + title = {Remnant Masses, Spins and Recoils from the Merger of + Generic Black-Hole Binaries}, + note = {arXiv:0904.3541 [gr-qc]}, + year = 2009, + receiveddate = {2009-04-22}, + url = {http://arxiv.org/abs/0904.3541} +} + +@Unpublished{ carpet-barausse2009a, + status = {report}, + author = {Enrico Barausse and Luciano Rezzolla}, + title = {Predicting the direction of the final spin from the + coalescence of two black holes}, + note = {arXiv:0904.2577 [gr-qc]}, + year = 2009, + receiveddate = {2009-04-16}, + url = {http://arxiv.org/abs/0904.2577} +} + +@Unpublished{ carpet-bernuzzi2009a, + status = {report}, + author = {Sebastiano Bernuzzi and Lucao Baiotti and Giovanni Corvino + and Roberto De Pietri and Alessandro Nagar}, + title = {Gravitational-wave extraction from neutron-star + oscillations}, + note = {arXiv:0902.2720 [gr-qc]}, + year = 2009, + receiveddate = {2009-02-16}, + url = {http://arxiv.org/abs/0902.2720} +} + +@Unpublished{ carpet-bode2009a, + status = {report}, + author = {Tanja Bode and Pablo Laguna and Deirdre M. Shoemaker and + Ian Hinder and Frank Herrmann and Jirjoo Vishnav}, + title = {Binary black hole evolutions of approximate puncture + initial data}, + note = {arXiv:0902.1127 [gr-qc]}, + year = 2009, + receiveddate = {2009-02-06}, + url = {http://arxiv.org/abs/0902.1127} +} + +@Unpublished{ carpetresult-nakano2008a, + status = {report}, + author = {Hiroyuki Nakano and Manuela Campanelli and Carlos O. + Lousto and Yosef Zlochower}, + title = {Comparison of Post-{Newtonian} and Numerical Evolutions of + Black-Hole Binaries}, + note = {arXiv:0901.3861 [gr-qc]}, + year = 2009, + url = {http://arxiv.org/abs/0901.3861}, + receiveddate = {2009-01-24} +} + +@Unpublished{ carpet-giacomazzo2009a, + status = {report}, + author = {Bruno Giacomazzo and Luciano Rezzolla and Luca Baiotti}, + title = {The influence of magnetic fields on the gravitational-wave + emission from binary neutron stars}, + note = {arXiv:0901.2722v1 [gr-qc]}, + year = 2009, + receiveddate = {2009-01-18}, + url = {http://arxiv.org/abs/0901.2722} +} + +@TechReport{ carpet-tao2008a, + status = {report}, + author = {Jian Tao and Gabrielle Allen and Ian Hinder and Erik + Schnetter and Yosef Zlochower}, + title = {{XiRel}: Standard Benchmarks for Numerical Relativity + Codes Using {Cactus} and {Carpet}}, + institution = {Center for Computation \& Technology, Louisiana State + University}, + year = 2008, + number = 5, + receiveddate = {2008-07-01}, + url = {http://www.cct.lsu.edu/CCT-TR/CCT-TR-2008-5} +} + +@Unpublished{ carpet-hinder2008a, + status = {report}, + author = {Ian Hinder and Frank Herrmann and Pablo Laguna and Deirdre + Shoemaker}, + title = {Comparisons of eccentric binary black hole simulations + with post-{Newtonian} models}, + note = {arXiv:0806.1037 [gr-qc]}, + year = 2008, + receiveddate = {2008-06-05}, + url = {http://arxiv.org/abs/0806.1037} +} + +@InProceedings{ carpetresult-baker2007a, + status = {report}, + author = {John G. Baker and William D. Boggs and Joan M. Centrella + and Bernard J. Kelly and Sean T. McWilliams and James R. + van Meter}, + title = {Gravitational waves from black-hole mergers}, + booktitle = {Proceedings of the 2007 Spring Symposium of the Space + Telescope Science Institute (Baltimore, MD)}, + year = 2007, + pages = {(to be published)}, + eprint = {arXiv:0708.4202 [astro-ph]}, + url = {http://arxiv.org/abs/0708.4202}, + receiveddate = {2007-04-23} +} + +@InProceedings{ carpet-baiotti2006c, + status = {report}, + author = {Luca Baiotti and Ian Hawke and Luciano Rezzolla and Erik + Schnetter}, + title = {Details on the gravitational-wave emission from rotating + gravitational collapse in {3D}}, + booktitle = {XXIXth Spanish Relativity Meeting (E.R.E. 2006)}, + pages = 012045, + year = 2007, + volume = 66, + series = {J. Phys.: Conf. Ser.}, + receiveddate = {2006-09-04}, + url = {http://stacks.iop.org/JPConf/66/012045}, + doi = {10.1088/1742-6596/66/1/012045} +} + +@InProceedings{ carpet-sperhake2006c, + status = {report}, + author = {Ulrich Sperhake}, + title = {Black-hole binary evolutions with the {LEAN} code}, + booktitle = {XXIXth Spanish Relativity Meeting (E.R.E. 2006)}, + pages = 012049, + year = 2007, + volume = 66, + series = {J. Phys.: Conf. Ser.}, + receiveddate = {2006-09-04}, + url = {http://stacks.iop.org/JPConf/66/012049}, + doi = {10.1088/1742-6596/66/1/012049} +} + +@InProceedings{ carpetresult-font2006a, + status = {report}, + author = {Jos{\'e} A. Font}, + title = {Current status of relativistic core collapse simulations}, + booktitle = {XXIXth Spanish Relativity Meeting (E.R.E. 2006)}, + pages = 012063, + year = 2007, + volume = 66, + series = {J. Phys.: Conf. Ser.}, + receiveddate = {2006-09-04}, + url = {http://stacks.iop.org/JPConf/66/012063}, + doi = {10.1088/1742-6596/66/1/012063} +} + +@InProceedings{ carpet-sperhake2006b, + status = {report}, + author = {Ulrich Sperhake and Bernd Br{\"u}gmann and Jos{\'e} + Gonz{\'a}lez and Mark Hannam and Sascha Husa}, + title = {Head-On collisions of different initial data}, + booktitle = {Proceedings of the 11th Marcel Grossmann Meeting (MG11) in + Berlin, Germany, July 23-29, 2006}, + year = 2007, + eprint = {arXiv:0705.2035 [gr-qc]}, + url = {http://arxiv.org/abs/0705.2035}, + receiveddate = {2006-07-23} +} + +@InProceedings{ carpet-zink2006b, + status = {report}, + author = {Burkhard Zink and Nikolaos Stergioulas and Ian Hawke and + Christian D. Ott and Erik Schnetter and Ewald M{\"u}ller}, + title = {Fragmentation of general relativistic quasi-toroidal + polytropes}, + booktitle = {Proceedings of the 11th Marcel Grossmann Meeting (MG11) in + Berlin, Germany, July 23-29, 2006}, + year = 2007, + eprint = {arXiv:0704.0431 [gr-qc]}, + url = {http://arxiv.org/abs/0704.0431}, + receiveddate = {2006-07-23} +} + +@InProceedings{ carpet-zink2006c, + status = {report}, + author = {Burkhard Zink and Nikolaos Stergioulas and Ian Hawke and + Christian D. Ott and Erik Schnetter and Ewald M{\"u}ller}, + title = {Supermassive Black Hole Formation through Rotational + Instabilities}, + booktitle = {12th Conference on Recent Developments in Gravity (NEB + XII)}, + pages = 012050, + year = 2007, + volume = 68, + series = {J. Phys.: Conf. Ser.}, + receiveddate = {2006-06-29}, + url = {http://stacks.iop.org/JPConf/68/012050}, + doi = {10.1088/1742-6596/68/1/012050} +} diff --git a/Carpet/CarpetWeb/publications/citations-report.bibitems b/Carpet/CarpetWeb/publications/citations-report.bibitems new file mode 100644 index 000000000..21554a20e --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-report.bibitems @@ -0,0 +1,290 @@ +\expandafter\ifx\csname natexlab\endcsname\relax\def\natexlab#1{#1}\fi +\expandafter\ifx\csname bibnamefont\endcsname\relax + \def\bibnamefont#1{#1}\fi +\expandafter\ifx\csname bibfnamefont\endcsname\relax + \def\bibfnamefont#1{#1}\fi +\expandafter\ifx\csname citenamefont\endcsname\relax + \def\citenamefont#1{#1}\fi +\expandafter\ifx\csname url\endcsname\relax + \def\url#1{\texttt{#1}}\fi +\expandafter\ifx\csname urlprefix\endcsname\relax\def\urlprefix{URL }\fi +\providecommand{\bibinfo}[2]{#2} +\providecommand{\eprint}[2][]{\url{#2}} + +\blurb[{\citenamefont{Zink et~al.}(2006)\citenamefont{Zink, Stergioulas, + Hawke, Ott, Schnetter, and M{\"u}ller}}]{carpet-zink2005b} +\bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Zink}}, + \bibinfo{author}{\bibfnamefont{N.}~\bibnamefont{Stergioulas}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hawke}}, + \bibinfo{author}{\bibfnamefont{C.~D.} \bibnamefont{Ott}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{M{\"u}ller}}, + \emph{\bibinfo{title}{Rotational instabilities in supermassive stars: a new + way to form supermassive black holes}}, in + \emph{\bibinfo{booktitle}{International Scientific Workshop on Cosmology and + Gravitational Physics, Thessaloniki, December 15-16, 2005}}, edited by + \bibinfo{editor}{\bibfnamefont{N.~K.} \bibnamefont{Spyrou}}, + \bibinfo{editor}{\bibfnamefont{N.}~\bibnamefont{Stergioulas}}, + \bibnamefont{and} \bibinfo{editor}{\bibfnamefont{C.}~\bibnamefont{Tsagas}} + (\bibinfo{publisher}{ZITI}, \bibinfo{year}{2006}), pp. + \bibinfo{pages}{155--160}. + +\blurb[{\citenamefont{Reisswig + et~al.}(2009{\natexlab{a}})\citenamefont{Reisswig, Bishop, Pollney, and + Szil{\'a}gyi}}]{carpet-reisswig2009b} +\bibinfo{author}{\bibfnamefont{C.}~\bibnamefont{Reisswig}}, + \bibinfo{author}{\bibfnamefont{N.~T.} \bibnamefont{Bishop}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Szil{\'a}gyi}}, + \emph{\bibinfo{title}{Unambiguous determination of gravitational waveforms + from binary black hole mergers}} (\bibinfo{year}{2009}{\natexlab{a}}), + \bibinfo{note}{arXiv:0907.2637 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0907.2637}. + +\blurb[{\citenamefont{Sperhake et~al.}(2009)\citenamefont{Sperhake, Cardoso, + Pretorius, Berti, Hinderer, and Yunes}}]{carpet-sperhake2009a} +\bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, + \bibinfo{author}{\bibfnamefont{V.}~\bibnamefont{Cardoso}}, + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Pretorius}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Berti}}, + \bibinfo{author}{\bibfnamefont{T.}~\bibnamefont{Hinderer}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{N.}~\bibnamefont{Yunes}}, + \emph{\bibinfo{title}{Cross section, final spin and zoom-whirl behavior in + high-energy black hole collisions}} (\bibinfo{year}{2009}), + \bibinfo{note}{arXiv:0907.1252 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0907.1252}. + +\blurb[{\citenamefont{Lovelace et~al.}(2009)\citenamefont{Lovelace, Chen, + Cohen, Kaplan, Keppel, Matthews, Nichols, Scheel, and + Sperhake}}]{carpet-lovelace2009a} +\bibinfo{author}{\bibfnamefont{G.}~\bibnamefont{Lovelace}}, + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Chen}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Cohen}}, + \bibinfo{author}{\bibfnamefont{J.~D.} \bibnamefont{Kaplan}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Keppel}}, + \bibinfo{author}{\bibfnamefont{K.~D.} \bibnamefont{Matthews}}, + \bibinfo{author}{\bibfnamefont{D.~A.} \bibnamefont{Nichols}}, + \bibinfo{author}{\bibfnamefont{M.~A.} \bibnamefont{Scheel}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, + \emph{\bibinfo{title}{Momentum flow in black-hole binaries: {II.} {Numerical} + simulations of equal-mass, head-on mergers with antiparallel spins}} + (\bibinfo{year}{2009}), \bibinfo{note}{arXiv:0907.0869 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0907.0869}. + +\blurb[{\citenamefont{Healy et~al.}(2009{\natexlab{a}})\citenamefont{Healy, + Levin, and Shoemaker}}]{carpet-healy2009a} +\bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Healy}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Levin}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Shoemaker}}, + \emph{\bibinfo{title}{Zoom-whirl orbits in black hole binaries}} + (\bibinfo{year}{2009}{\natexlab{a}}), \bibinfo{note}{arXiv:0907.0671 + [gr-qc]}, \urlprefix\url{http://arxiv.org/abs/0907.0671}. + +\blurb[{\citenamefont{Reisswig + et~al.}(2009{\natexlab{b}})\citenamefont{Reisswig, Husa, Rezzolla, Dorband, + Pollney, and Seiler}}]{carpet-reisswig2009a} +\bibinfo{author}{\bibfnamefont{C.}~\bibnamefont{Reisswig}}, + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Husa}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \bibinfo{author}{\bibfnamefont{E.~N.} \bibnamefont{Dorband}}, + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Pollney}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Seiler}}, + \emph{\bibinfo{title}{Gravitational-wave detectability of equal-mass + black-hole binaries with aligned spins}} + (\bibinfo{year}{2009}{\natexlab{b}}), \bibinfo{note}{arXiv:0907.0462 + [gr-qc]}, \urlprefix\url{http://arxiv.org/abs/0907.0462}. + +\blurb[{\citenamefont{Healy et~al.}(2009{\natexlab{b}})\citenamefont{Healy, + Laguna, Matzner, and Shoemaker}}]{carpet-healy2009b} +\bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Healy}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Laguna}}, + \bibinfo{author}{\bibfnamefont{R.~A.} \bibnamefont{Matzner}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{D.~M.} + \bibnamefont{Shoemaker}}, \emph{\bibinfo{title}{Final mass and spin of merged + black holes and the golden black hole}} (\bibinfo{year}{2009}{\natexlab{b}}), + \bibinfo{note}{arXiv:0905.3914 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0905.3914}. + +\blurb[{\citenamefont{Ott}(2009)}]{carpet-ott2009a} +\bibinfo{author}{\bibfnamefont{C.~D.} \bibnamefont{Ott}}, + \emph{\bibinfo{title}{Probing the core-collapse supernova mechanism with + gravitational waves}} (\bibinfo{year}{2009}), \bibinfo{note}{arXiv:0905.2797 + [gr-qc]}, \urlprefix\url{http://arxiv.org/abs/0905.2797}. + +\blurb[{\citenamefont{Lousto et~al.}(2009)\citenamefont{Lousto, Campanelli, + and Zlochower}}]{carpet-lousto2009a} +\bibinfo{author}{\bibfnamefont{C.~O.} \bibnamefont{Lousto}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Campanelli}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Zlochower}}, + \emph{\bibinfo{title}{Remnant masses, spins and recoils from the merger of + generic black-hole binaries}} (\bibinfo{year}{2009}), + \bibinfo{note}{arXiv:0904.3541 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0904.3541}. + +\blurb[{\citenamefont{Barausse and Rezzolla}(2009)}]{carpet-barausse2009a} +\bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Barausse}} \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, + \emph{\bibinfo{title}{Predicting the direction of the final spin from the + coalescence of two black holes}} (\bibinfo{year}{2009}), + \bibinfo{note}{arXiv:0904.2577 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0904.2577}. + +\blurb[{\citenamefont{Bernuzzi et~al.}(2009)\citenamefont{Bernuzzi, Baiotti, + Corvino, Pietri, and Nagar}}]{carpet-bernuzzi2009a} +\bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Bernuzzi}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Baiotti}}, + \bibinfo{author}{\bibfnamefont{G.}~\bibnamefont{Corvino}}, + \bibinfo{author}{\bibfnamefont{R.~D.} \bibnamefont{Pietri}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Nagar}}, + \emph{\bibinfo{title}{Gravitational-wave extraction from neutron-star + oscillations}} (\bibinfo{year}{2009}), \bibinfo{note}{arXiv:0902.2720 + [gr-qc]}, \urlprefix\url{http://arxiv.org/abs/0902.2720}. + +\blurb[{\citenamefont{Bode et~al.}(2009)\citenamefont{Bode, Laguna, + Shoemaker, Hinder, Herrmann, and Vishnav}}]{carpet-bode2009a} +\bibinfo{author}{\bibfnamefont{T.}~\bibnamefont{Bode}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Laguna}}, + \bibinfo{author}{\bibfnamefont{D.~M.} \bibnamefont{Shoemaker}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hinder}}, + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Vishnav}}, + \emph{\bibinfo{title}{Binary black hole evolutions of approximate puncture + initial data}} (\bibinfo{year}{2009}), \bibinfo{note}{arXiv:0902.1127 + [gr-qc]}, \urlprefix\url{http://arxiv.org/abs/0902.1127}. + +\blurb[{\citenamefont{Nakano et~al.}(2009)\citenamefont{Nakano, Campanelli, + Lousto, and Zlochower}}]{carpetresult-nakano2008a} +\bibinfo{author}{\bibfnamefont{H.}~\bibnamefont{Nakano}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Campanelli}}, + \bibinfo{author}{\bibfnamefont{C.~O.} \bibnamefont{Lousto}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Zlochower}}, + \emph{\bibinfo{title}{Comparison of post-{Newtonian} and numerical evolutions + of black-hole binaries}} (\bibinfo{year}{2009}), + \bibinfo{note}{arXiv:0901.3861 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0901.3861}. + +\blurb[{\citenamefont{Giacomazzo et~al.}(2009)\citenamefont{Giacomazzo, + Rezzolla, and Baiotti}}]{carpet-giacomazzo2009a} +\bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Giacomazzo}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Baiotti}}, + \emph{\bibinfo{title}{The influence of magnetic fields on the + gravitational-wave emission from binary neutron stars}} + (\bibinfo{year}{2009}), \bibinfo{note}{arXiv:0901.2722v1 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0901.2722}. + +\blurb[{\citenamefont{Tao et~al.}(2008)\citenamefont{Tao, Allen, Hinder, + Schnetter, and Zlochower}}]{carpet-tao2008a} +\bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Tao}}, + \bibinfo{author}{\bibfnamefont{G.}~\bibnamefont{Allen}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hinder}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{Y.}~\bibnamefont{Zlochower}}, + \emph{\bibinfo{title}{{XiRel}: Standard benchmarks for numerical relativity + codes using {Cactus} and {Carpet}}}, \bibinfo{type}{Tech. Rep.} + \bibinfo{number}{5}, \bibinfo{institution}{Center for Computation \& + Technology, Louisiana State University} (\bibinfo{year}{2008}), + \urlprefix\url{http://www.cct.lsu.edu/CCT-TR/CCT-TR-2008-5}. + +\blurb[{\citenamefont{Hinder et~al.}(2008)\citenamefont{Hinder, Herrmann, + Laguna, and Shoemaker}}]{carpet-hinder2008a} +\bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hinder}}, + \bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, + \bibinfo{author}{\bibfnamefont{P.}~\bibnamefont{Laguna}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{D.}~\bibnamefont{Shoemaker}}, + \emph{\bibinfo{title}{Comparisons of eccentric binary black hole simulations + with post-{Newtonian} models}} (\bibinfo{year}{2008}), + \bibinfo{note}{arXiv:0806.1037 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0806.1037}. + +\blurb[{\citenamefont{Baker et~al.}(2007)\citenamefont{Baker, Boggs, + Centrella, Kelly, McWilliams, and van Meter}}]{carpetresult-baker2007a} +\bibinfo{author}{\bibfnamefont{J.~G.} \bibnamefont{Baker}}, + \bibinfo{author}{\bibfnamefont{W.~D.} \bibnamefont{Boggs}}, + \bibinfo{author}{\bibfnamefont{J.~M.} \bibnamefont{Centrella}}, + \bibinfo{author}{\bibfnamefont{B.~J.} \bibnamefont{Kelly}}, + \bibinfo{author}{\bibfnamefont{S.~T.} \bibnamefont{McWilliams}}, + \bibnamefont{and} \bibinfo{author}{\bibfnamefont{J.~R.} \bibnamefont{van + Meter}}, \emph{\bibinfo{title}{Gravitational waves from black-hole mergers}}, + in \emph{\bibinfo{booktitle}{Proceedings of the 2007 Spring Symposium of the + Space Telescope Science Institute (Baltimore, MD)}} (\bibinfo{year}{2007}), + p. \bibinfo{pages}{(to be published)}, \eprint{arXiv:0708.4202 [astro-ph]}, + \urlprefix\url{http://arxiv.org/abs/0708.4202}. + +\blurb[{\citenamefont{Baiotti et~al.}(2007)\citenamefont{Baiotti, Hawke, + Rezzolla, and Schnetter}}]{carpet-baiotti2006c} +\bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Baiotti}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hawke}}, + \bibinfo{author}{\bibfnamefont{L.}~\bibnamefont{Rezzolla}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \emph{\bibinfo{title}{Details on the gravitational-wave emission from + rotating gravitational collapse in {3D}}}, in + \emph{\bibinfo{booktitle}{XXIXth Spanish Relativity Meeting (E.R.E. 2006)}} + (\bibinfo{year}{2007}), vol.~\bibinfo{volume}{66} of + \emph{\bibinfo{series}{J. Phys.: Conf. Ser.}}, p. \bibinfo{pages}{012045}, + \urlprefix\url{http://stacks.iop.org/JPConf/66/012045}. + +\blurb[{\citenamefont{Sperhake}(2007)}]{carpet-sperhake2006c} +\bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, + \emph{\bibinfo{title}{Black-hole binary evolutions with the {LEAN} code}}, in + \emph{\bibinfo{booktitle}{XXIXth Spanish Relativity Meeting (E.R.E. 2006)}} + (\bibinfo{year}{2007}), vol.~\bibinfo{volume}{66} of + \emph{\bibinfo{series}{J. Phys.: Conf. Ser.}}, p. \bibinfo{pages}{012049}, + \urlprefix\url{http://stacks.iop.org/JPConf/66/012049}. + +\blurb[{\citenamefont{Font}(2007)}]{carpetresult-font2006a} +\bibinfo{author}{\bibfnamefont{J.~A.} \bibnamefont{Font}}, + \emph{\bibinfo{title}{Current status of relativistic core collapse + simulations}}, in \emph{\bibinfo{booktitle}{XXIXth Spanish Relativity Meeting + (E.R.E. 2006)}} (\bibinfo{year}{2007}), vol.~\bibinfo{volume}{66} of + \emph{\bibinfo{series}{J. Phys.: Conf. Ser.}}, p. \bibinfo{pages}{012063}, + \urlprefix\url{http://stacks.iop.org/JPConf/66/012063}. + +\blurb[{\citenamefont{Sperhake et~al.}(2007)\citenamefont{Sperhake, + Br{\"u}gmann, Gonz{\'a}lez, Hannam, and Husa}}]{carpet-sperhake2006b} +\bibinfo{author}{\bibfnamefont{U.}~\bibnamefont{Sperhake}}, + \bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Br{\"u}gmann}}, + \bibinfo{author}{\bibfnamefont{J.}~\bibnamefont{Gonz{\'a}lez}}, + \bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Hannam}}, \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Husa}}, + \emph{\bibinfo{title}{Head-on collisions of different initial data}}, in + \emph{\bibinfo{booktitle}{Proceedings of the 11th Marcel Grossmann Meeting + (MG11) in Berlin, Germany, July 23-29, 2006}} (\bibinfo{year}{2007}), + \eprint{arXiv:0705.2035 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0705.2035}. + +\blurb[{\citenamefont{Zink et~al.}(2007{\natexlab{a}})\citenamefont{Zink, + Stergioulas, Hawke, Ott, Schnetter, and M{\"u}ller}}]{carpet-zink2006b} +\bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Zink}}, + \bibinfo{author}{\bibfnamefont{N.}~\bibnamefont{Stergioulas}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hawke}}, + \bibinfo{author}{\bibfnamefont{C.~D.} \bibnamefont{Ott}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{M{\"u}ller}}, + \emph{\bibinfo{title}{Fragmentation of general relativistic quasi-toroidal + polytropes}}, in \emph{\bibinfo{booktitle}{Proceedings of the 11th Marcel + Grossmann Meeting (MG11) in Berlin, Germany, July 23-29, 2006}} + (\bibinfo{year}{2007}{\natexlab{a}}), \eprint{arXiv:0704.0431 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0704.0431}. + +\blurb[{\citenamefont{Zink et~al.}(2007{\natexlab{b}})\citenamefont{Zink, + Stergioulas, Hawke, Ott, Schnetter, and M{\"u}ller}}]{carpet-zink2006c} +\bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Zink}}, + \bibinfo{author}{\bibfnamefont{N.}~\bibnamefont{Stergioulas}}, + \bibinfo{author}{\bibfnamefont{I.}~\bibnamefont{Hawke}}, + \bibinfo{author}{\bibfnamefont{C.~D.} \bibnamefont{Ott}}, + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Schnetter}}, + \bibnamefont{and} + \bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{M{\"u}ller}}, + \emph{\bibinfo{title}{Supermassive black hole formation through rotational + instabilities}}, in \emph{\bibinfo{booktitle}{12th Conference on Recent + Developments in Gravity (NEB XII)}} (\bibinfo{year}{2007}{\natexlab{b}}), + vol.~\bibinfo{volume}{68} of \emph{\bibinfo{series}{J. Phys.: Conf. Ser.}}, + p. \bibinfo{pages}{012050}, + \urlprefix\url{http://stacks.iop.org/JPConf/68/012050}. + diff --git a/Carpet/CarpetWeb/publications/citations-report.blg b/Carpet/CarpetWeb/publications/citations-report.blg new file mode 100644 index 000000000..de6d2bae5 --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-report.blg @@ -0,0 +1,46 @@ +This is BibTeX, Version 0.99c (Web2C 7.5.6) +The top-level auxiliary file: citations-report.aux +The style file: apsrev-titles-manyauthors.bst +Database file #1: citations-report.bib +Reallocated wiz_functions (elt_size=4) to 6000 items from 3000. +You've used 23 entries, + 3482 wiz_defined-function locations, + 1284 strings with 15537 characters, +and the built_in function-call counts, 19701 in all, are: += -- 1044 +> -- 829 +< -- 118 ++ -- 722 +- -- 203 +* -- 2834 +:= -- 1923 +add.period$ -- 23 +call.type$ -- 23 +change.case$ -- 129 +chr.to.int$ -- 20 +cite$ -- 23 +duplicate$ -- 1855 +empty$ -- 1535 +format.name$ -- 475 +if$ -- 3651 +int.to.chr$ -- 4 +int.to.str$ -- 24 +missing$ -- 266 +newline$ -- 84 +num.names$ -- 70 +pop$ -- 487 +preamble$ -- 1 +purify$ -- 92 +quote$ -- 0 +skip$ -- 727 +stack$ -- 0 +substring$ -- 393 +swap$ -- 1560 +text.length$ -- 114 +text.prefix$ -- 0 +top$ -- 0 +type$ -- 138 +warning$ -- 0 +while$ -- 54 +width$ -- 0 +write$ -- 280 diff --git a/Carpet/CarpetWeb/publications/citations-report.html-updated b/Carpet/CarpetWeb/publications/citations-report.html-updated new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-report.html-updated diff --git a/Carpet/CarpetWeb/publications/citations-report.log b/Carpet/CarpetWeb/publications/citations-report.log new file mode 100644 index 000000000..41ed746d2 --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-report.log @@ -0,0 +1,193 @@ +This is pdfTeX, Version 3.141592-1.40.3 (Web2C 7.5.6) (format=pdflatex 2009.7.3) 3 AUG 2009 22:08 +entering extended mode +**\nonstopmode \input{/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publicatio +ns/citations-report.tex} + +(/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publications/citations-report.t +ex (/opt/local/share/texmf-dist/tex/latex/revtex/revtex4.cls +Document Class: revtex4 2001/08/02 v4.0 (http://publish.aps.org/revtex4/ for do +cumentation) + Copyright (c) 2001 The American Physical Society. + mailto:revtex@aps.org + Licensed under the LPPL: +http://www.ctan.org/tex-archive/macros/latex/base/lppl.txt + Arthur Ogawa <ogawa@teleport.com> + Based on work by David Carlisle <david@dcarlisle.demon.co.uk>. +ltxutil: portions licensed from W. E. Baxter (web@superscript.com) +Class revtex4 Info: Repairing broken LateX \@sect on input line 596. +\intertabularlinepenalty=\count79 +\@tbpen=\count80 +\@arstrutbox@hline=\box26 +Class revtex4 Info: Repairing broken LaTeX \@xbitor on input line 1610. +ltxgrid: portions licensed from W. E. Baxter (web@superscript.com) +\c@linecount=\count81 +\output=\toks14 +\@protection@box=\box27 +\@topmark@saved=\toks15 +\footins@saved=\box28 +\pagesofar=\box29 +\footbox=\box30 +\pagegrid@col=\count82 +Class revtex4 Info: Incorporating package {textcase} [1998/11/12 v0.06 Text on +ly upper/lower case changing (DPC)]. on input line 3682. +(/opt/local/share/texmf-local/tex/latex/html/url.sty +Package: url 1999/03/02 ver 1.4 Verb mode for urls, email addresses, and file + names +) +\c@affil=\count83 +\absbox=\box31 +\c@part=\count84 +\c@section=\count85 +\c@subsection=\count86 +\c@subsubsection=\count87 +\c@paragraph=\count88 +\c@subparagraph=\count89 +\abovecaptionskip=\skip41 +\belowcaptionskip=\skip42 +\c@figure=\count90 +\c@table=\count91 + +(/opt/local/share/texmf-dist/tex/latex/natbib/natbib.sty +Package: natbib 2007/02/05 8.0 (PWD) +\bibhang=\skip43 +\bibsep=\skip44 +LaTeX Info: Redefining \cite on input line 602. +\c@NAT@ctr=\count92 +) +\widetext@top=\box32 +\widetext@bot=\box33 + +(/opt/local/share/texmf-dist/tex/latex/revtex/revsymb.sty +Package: revsymb 2001/08/02 v4.0 (http://publish.aps.org/revtex4/ for documenta +tion) +LaTeX Info: Redefining \REV@mathfrak on input line 118. +)) + +Class revtex4 Warning: No Society specified, using generic APS style. + +(/opt/local/share/texmf-dist/tex/latex/revtex/aps.rtx +File: aps.rtx 2001/08/02 v4.0 (http://publish.aps.org/revtex4/ for documentatio +n) +) +(/opt/local/share/texmf-dist/tex/latex/revtex/10pt.rtx +File: 10pt.rtx 2001/08/02 v4.0 (http://publish.aps.org/revtex4/ for documentati +on) +) +(/opt/local/share/texmf-dist/tex/generic/babel/babel.sty +Package: babel 2005/11/23 v3.8h The Babel package + +(/opt/local/share/texmf-dist/tex/generic/babel/english.ldf +Language: english 2005/03/30 v3.3o English support from the babel system + +(/opt/local/share/texmf-dist/tex/generic/babel/babel.def +File: babel.def 2005/11/23 v3.8h Babel common definitions +\babel@savecnt=\count93 +\U@D=\dimen102 +) +\l@british = a dialect from \language\l@english +\l@UKenglish = a dialect from \language\l@english +\l@canadian = a dialect from \language\l@american +\l@australian = a dialect from \language\l@british +\l@newzealand = a dialect from \language\l@british +)) +(/opt/local/share/texmf-dist/tex/latex/base/fontenc.sty +Package: fontenc 2005/09/27 v1.99g Standard LaTeX package + +(/opt/local/share/texmf-dist/tex/latex/base/t1enc.def +File: t1enc.def 2005/09/27 v1.99g Standard LaTeX file +LaTeX Font Info: Redeclaring font encoding T1 on input line 43. +)) +(/opt/local/share/texmf-dist/tex/latex/base/inputenc.sty +Package: inputenc 2006/05/05 v1.1b Input encoding file +\inpenc@prehook=\toks16 +\inpenc@posthook=\toks17 + +(/opt/local/share/texmf-local/tex/latex/html/latin9.def +File: latin1.def 1998/03/05 v0.97 Input encoding file(test version: still liabl +e to change) +)) +(/opt/local/share/texmf-dist/tex/latex/psnfss/mathpazo.sty +Package: mathpazo 2005/04/12 PSNFSS-v9.2a Palatino w/ Pazo Math (D.Puga, WaS) +\symupright=\mathgroup4 +) +(/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publications/citations-report.a +ux) +\openout1 = `citations-report.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Try loading font information for T1+ppl on input line 8. + (/opt/local/share/texmf-dist/tex/latex/psnfss/t1ppl.fd +File: t1ppl.fd 2001/06/04 font definitions for T1/ppl. +) +Class revtex4 Info: Patching LaTeX tabular. on input line 8. +Class revtex4 Info: cite was not loaded (OK!) on input line 8. +Class revtex4 Info: multicol was not loaded (OK!) on input line 8. +\big@size=\dimen103 + +(/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publications/citations-report.b +bl +LaTeX Font Info: Try loading font information for T1+cmtt on input line 44. + (/opt/local/share/texmf-dist/tex/latex/base/t1cmtt.fd +File: t1cmtt.fd 1999/05/25 v2.5h Standard LaTeX font definitions +) +LaTeX Font Info: Try loading font information for OT1+ppl on input line 44. + +(/opt/local/share/texmf-dist/tex/latex/psnfss/ot1ppl.fd +File: ot1ppl.fd 2001/06/04 font definitions for OT1/ppl. +) +LaTeX Font Info: Try loading font information for OML+zplm on input line 44. + + +(/opt/local/share/texmf-dist/tex/latex/psnfss/omlzplm.fd +File: omlzplm.fd 2002/09/08 Fontinst v1.914 font definitions for OML/zplm. +) +LaTeX Font Info: Try loading font information for OMS+zplm on input line 44. + + +(/opt/local/share/texmf-dist/tex/latex/psnfss/omszplm.fd +File: omszplm.fd 2002/09/08 Fontinst v1.914 font definitions for OMS/zplm. +) +LaTeX Font Info: Try loading font information for OMX+zplm on input line 44. + + +(/opt/local/share/texmf-dist/tex/latex/psnfss/omxzplm.fd +File: omxzplm.fd 2002/09/08 Fontinst v1.914 font definitions for OMX/zplm. +) +LaTeX Font Info: Try loading font information for OT1+zplm on input line 44. + + +(/opt/local/share/texmf-dist/tex/latex/psnfss/ot1zplm.fd +File: ot1zplm.fd 2002/09/08 Fontinst v1.914 font definitions for OT1/zplm. +)) [1{/opt/local/share/texmf/fonts/map/pdftex/updmap/pdftex.map}] +(/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publications/citations-report.a +ux) ) +Here is how much of TeX's memory you used: + 2465 strings out of 94073 + 30715 string characters out of 1164798 + 96898 words of memory out of 1500000 + 5757 multiletter control sequences out of 10000+50000 + 15151 words of font info for 37 fonts, out of 1200000 for 2000 + 645 hyphenation exceptions out of 8191 + 26i,4n,21p,310b,302s stack positions out of 5000i,500n,6000p,200000b,5000s +{/opt/local/share/texmf-dist/fonts/enc/dvips/cm-super/cm-super-t1.enc}{/op +t/local/share/texmf-dist/fonts/enc/dvips/base/8r.enc}</opt/local/share/texmf-di +st/fonts/type1/public/cm-super/sftt0900.pfb></opt/local/share/texmf-dist/fonts/ +type1/urw/palatino/uplr8a.pfb></opt/local/share/texmf-dist/fonts/type1/urw/pala +tino/uplri8a.pfb> +Output written on citations-report.pdf (1 page, 84284 bytes). +PDF statistics: + 20 PDF objects out of 1000 (max. 8388607) + 0 named destinations out of 1000 (max. 131072) + 1 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/Carpet/CarpetWeb/publications/citations-report.pdf b/Carpet/CarpetWeb/publications/citations-report.pdf Binary files differnew file mode 100644 index 000000000..a95535951 --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-report.pdf diff --git a/Carpet/CarpetWeb/publications/citations-report.tex b/Carpet/CarpetWeb/publications/citations-report.tex new file mode 100644 index 000000000..652cd9ac3 --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-report.tex @@ -0,0 +1,15 @@ +\documentclass{revtex4} + +\usepackage[english]{babel} +\usepackage[T1]{fontenc} +\usepackage[latin9]{inputenc} +\usepackage{mathpazo} + +\begin{document} + +\nocite{*} + +\bibliographystyle{apsrev-titles-manyauthors} +\bibliography{citations-report} + +\end{document} diff --git a/Carpet/CarpetWeb/publications/citations-thesis.aux b/Carpet/CarpetWeb/publications/citations-thesis.aux new file mode 100644 index 000000000..850432530 --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-thesis.aux @@ -0,0 +1,24 @@ +\relax +\citation{*} +\bibdata{citations-thesis} +\bibcite{carpet-bentivegna2008b}{{1}{2008}{{Bentivegna}}{{}}} +\bibcite{carpet-jasiulek2008a}{{2}{2008}{{Jasiulek}}{{}}} +\bibcite{carpet-dorband2007a}{{3}{2007}{{Dorband}}{{}}} +\bibcite{carpet-kastaun2007a}{{4}{2007}{{Kastaun}}{{}}} +\bibcite{carpet-manca2007a}{{5}{2007}{{Manca}}{{}}} +\bibcite{carpet-ott2007a}{{6}{2007}{{Ott}}{{}}} +\bibcite{carpet-2007a}{{7}{2007}{{Zengino{\u {g}}lu}}{{}}} +\bibcite{carpet-loeffler2005a}{{8}{2006}{{L{\"o}ffler}}{{}}} +\bibcite{carpet-madiraju2006a}{{9}{2006}{{Madiraju}}{{}}} +\bibcite{carpet-zink2006d}{{10}{2006}{{Zink}}{{}}} +\bibcite{carpet-herrmann2005a}{{11}{2005}{{Herrmann}}{{}}} +\bibcite{carpet-koppitz2004a}{{12}{2004}{{Koppitz}}{{}}} +\global \chardef \firstnote@num12\relax +\bibstyle{apsrev-titles-manyauthors} +\select@language{english} +\@writefile{toc}{\select@language{english}} +\@writefile{lof}{\select@language{english}} +\@writefile{lot}{\select@language{english}} +\@writefile{toc}{\contentsline {section}{\numberline {}References}{1}{}} +\newlabel{LastBibItem}{{12}{1}{}{}{}} +\newlabel{LastPage}{{}{1}} diff --git a/Carpet/CarpetWeb/publications/citations-thesis.bbl b/Carpet/CarpetWeb/publications/citations-thesis.bbl new file mode 100644 index 000000000..fd55fd51e --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-thesis.bbl @@ -0,0 +1,101 @@ +\begin{thebibliography}{12} +\expandafter\ifx\csname natexlab\endcsname\relax\def\natexlab#1{#1}\fi +\expandafter\ifx\csname bibnamefont\endcsname\relax + \def\bibnamefont#1{#1}\fi +\expandafter\ifx\csname bibfnamefont\endcsname\relax + \def\bibfnamefont#1{#1}\fi +\expandafter\ifx\csname citenamefont\endcsname\relax + \def\citenamefont#1{#1}\fi +\expandafter\ifx\csname url\endcsname\relax + \def\url#1{\texttt{#1}}\fi +\expandafter\ifx\csname urlprefix\endcsname\relax\def\urlprefix{URL }\fi +\providecommand{\bibinfo}[2]{#2} +\providecommand{\eprint}[2][]{\url{#2}} + +\bibitem[{\citenamefont{Bentivegna}(2008)}]{carpet-bentivegna2008b} +\bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Bentivegna}}, + \emph{\bibinfo{title}{Ringing in unison: exploring black hole coalescence + with quasinormal modes}}, Ph.D. thesis, \bibinfo{school}{Pennsylvania State + University} (\bibinfo{year}{2008}), + \urlprefix\url{http://etda.libraries.psu.edu/ + theses/approved/WorldWideIndex/ETD-2570/index.html}. + +\bibitem[{\citenamefont{Jasiulek}(2008)}]{carpet-jasiulek2008a} +\bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Jasiulek}}, + \emph{\bibinfo{title}{Spin measures on isolated and dynamical horizons in + numerical relativity}}, Master's thesis, + \bibinfo{school}{Humboldt-Universit{\"a}t zu Berlin} (\bibinfo{year}{2008}). + +\bibitem[{\citenamefont{Dorband}(2007)}]{carpet-dorband2007a} +\bibinfo{author}{\bibfnamefont{E.~N.} \bibnamefont{Dorband}}, + \emph{\bibinfo{title}{Computing and analyzing gravitational radiation in + black hole simulations using a new multi-block approach to numerical + relativity}}, Ph.D. thesis, \bibinfo{school}{Louisiana State University} + (\bibinfo{year}{2007}), + \urlprefix\url{http://www.cct.lsu.edu/~dorband/thesis.pdf}. + +\bibitem[{\citenamefont{Kastaun}(2007)}]{carpet-kastaun2007a} +\bibinfo{author}{\bibfnamefont{W.}~\bibnamefont{Kastaun}}, + \emph{\bibinfo{title}{Developing a code for general relativistic + hydrodynamics with application to neutron star oscillations}}, Ph.D. thesis, + \bibinfo{school}{Universit{\"a}t T{\"u}bingen} (\bibinfo{year}{2007}), + \urlprefix\url{http://tobias-lib.ub.uni-tuebingen.de/ volltexte/2007/2803/}. + +\bibitem[{\citenamefont{Manca}(2007)}]{carpet-manca2007a} +\bibinfo{author}{\bibfnamefont{G.~M.} \bibnamefont{Manca}}, + \emph{\bibinfo{title}{Dynamical instabilities in rapidly rotating neutron + star models}}, Ph.D. thesis, \bibinfo{school}{Universit{\`a} di Parma} + (\bibinfo{year}{2007}). + +\bibitem[{\citenamefont{Ott}(2007)}]{carpet-ott2007a} +\bibinfo{author}{\bibfnamefont{C.~D.} \bibnamefont{Ott}}, + \emph{\bibinfo{title}{Stellar iron core collapse in \{3+1\} general + relativity and the gravitational wave signature of core-collapse + supernovae}}, Ph.D. thesis, \bibinfo{school}{Universit{\"a}t Potsdam} + (\bibinfo{year}{2007}), + \urlprefix\url{http://stellarcollapse.org/papers/thesis_final.pdf}. + +\bibitem[{\citenamefont{Zengino{\u{g}}lu}(2007)}]{carpet-2007a} +\bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Zengino{\u{g}}lu}}, + \emph{\bibinfo{title}{A conformal approach to numerical calculations of + asymptotically flat spacetimes}}, Ph.D. thesis, + \bibinfo{school}{Universit{\"a}t Potsdam} (\bibinfo{year}{2007}), + \eprint{arXiv:0711.0873 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0711.0873}. + +\bibitem[{\citenamefont{L{\"o}ffler}(2006)}]{carpet-loeffler2005a} +\bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{L{\"o}ffler}}, + \emph{\bibinfo{title}{Numerical simulations of neutron star-black hole + mergers}}, Ph.D. thesis, \bibinfo{school}{Universit{\"a}t Potsdam} + (\bibinfo{year}{2006}), + \urlprefix\url{http://opus.kobv.de/ubp/volltexte/2006/774/}. + +\bibitem[{\citenamefont{Madiraju}(2006)}]{carpet-madiraju2006a} +\bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Madiraju}}, + \emph{\bibinfo{title}{Performance profiling with {Cactus} benchmarks}}, + Master's thesis, \bibinfo{school}{Louisiana State University} + (\bibinfo{year}{2006}), \urlprefix\url{http://www.cactuscode.org/ + Articles/Cactus_Madiraju06.pdf}. + +\bibitem[{\citenamefont{Zink}(2006)}]{carpet-zink2006d} +\bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Zink}}, + \emph{\bibinfo{title}{Black hole formation from non-axisymmetric + instabilities in quasi-toroidal stars}}, Ph.D. thesis, + \bibinfo{school}{Technische Universit{\"a}t M{\"u}nchen} + (\bibinfo{year}{2006}), + \urlprefix\url{http://nbn-resolving.de/urn/resolver.pl + ?urn=urn:nbn:de:bvb:91-diss20060623-1915123970}. + +\bibitem[{\citenamefont{Herrmann}(2005)}]{carpet-herrmann2005a} +\bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, + \emph{\bibinfo{title}{Evolution and analysis of binary black hole + spacetimes}}, Ph.D. thesis, \bibinfo{school}{Universit{\"a}t Potsdam} + (\bibinfo{year}{2005}). + +\bibitem[{\citenamefont{Koppitz}(2004)}]{carpet-koppitz2004a} +\bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Koppitz}}, + \emph{\bibinfo{title}{Numerical studies of black hole initial data}}, Ph.D. + thesis, \bibinfo{school}{Universit{\"a}t Potsdam} (\bibinfo{year}{2004}), + \urlprefix\url{http://opus.kobv.de/ubp/volltexte/2005/134/}. + +\end{thebibliography} diff --git a/Carpet/CarpetWeb/publications/citations-thesis.bib b/Carpet/CarpetWeb/publications/citations-thesis.bib new file mode 100644 index 000000000..340c75234 --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-thesis.bib @@ -0,0 +1,132 @@ + +@PhDThesis{ carpet-bentivegna2008b, + status = {thesis}, + author = {Eloisa Bentivegna}, + title = {Ringing in unison: exploring black hole coalescence with + quasinormal modes}, + school = {Pennsylvania State University}, + year = 2008, + url = {http://etda.libraries.psu.edu/ + theses/approved/WorldWideIndex/ETD-2570/index.html}, + receiveddate = 2008 +} + +@MastersThesis{ carpet-jasiulek2008a, + status = {thesis}, + author = {Michael Jasiulek}, + title = {Spin Measures on Isolated and Dynamical Horizons in + Numerical Relativity}, + school = {Humboldt-Universit{\"a}t zu Berlin}, + year = 2008, + receiveddate = 2008 +} + +@PhDThesis{ carpet-dorband2007a, + status = {thesis}, + author = {Ernst Nils Dorband}, + title = {Computing and Analyzing Gravitational Radiation in Black + Hole Simulations Using a New Multi-Block Approach to + Numerical Relativity}, + school = {Louisiana State University}, + year = 2007, + url = {http://www.cct.lsu.edu/~dorband/thesis.pdf}, + receiveddate = 2007 +} + +@PhDThesis{ carpet-kastaun2007a, + status = {thesis}, + author = {Wolfgang Kastaun}, + title = {Developing a code for general relativistic hydrodynamics + with application to neutron star oscillations}, + school = {Universit{\"a}t T{\"u}bingen}, + year = 2007, + url = {http://tobias-lib.ub.uni-tuebingen.de/ + volltexte/2007/2803/}, + receiveddate = 2007 +} + +@PhDThesis{ carpet-manca2007a, + status = {thesis}, + author = {Gian Mario Manca}, + title = {Dynamical instabilities in rapidly rotating neutron star + models}, + school = {Universit{\`a} di Parma}, + year = 2007, + receiveddate = 2007 +} + +@PhDThesis{ carpet-ott2007a, + status = {thesis}, + author = {Christian D. Ott}, + title = {Stellar Iron Core Collapse in \{3+1\} General Relativity + and The Gravitational Wave Signature of Core-Collapse + Supernovae}, + school = {Universit{\"a}t Potsdam}, + year = 2007, + url = {http://stellarcollapse.org/papers/thesis_final.pdf}, + receiveddate = 2007 +} + +@PhDThesis{ carpet-2007a, + status = {thesis}, + author = {An{\i}l Zengino{\u{g}}lu}, + title = {A conformal approach to numerical calculations of + asymptotically flat spacetimes}, + school = {Universit{\"a}t Potsdam}, + year = 2007, + eprint = {arXiv:0711.0873 [gr-qc]}, + url = {http://arxiv.org/abs/0711.0873}, + receiveddate = 2007 +} + +@PhDThesis{ carpet-loeffler2005a, + status = {thesis}, + author = {Frank L{\"o}ffler}, + title = {Numerical Simulations of Neutron Star-Black Hole Mergers}, + school = {Universit{\"a}t Potsdam}, + year = 2006, + url = {http://opus.kobv.de/ubp/volltexte/2006/774/}, + receiveddate = 2006 +} + +@MastersThesis{ carpet-madiraju2006a, + status = {thesis}, + author = {Sasanka Madiraju}, + title = {Performance Profiling with {Cactus} Benchmarks}, + school = {Louisiana State University}, + year = 2006, + url = {http://www.cactuscode.org/ + Articles/Cactus_Madiraju06.pdf}, + receiveddate = 2006 +} + +@PhDThesis{ carpet-zink2006d, + status = {thesis}, + author = {Burkhard Zink}, + title = {Black hole formation from non-axisymmetric instabilities + in quasi-toroidal stars}, + school = {Technische Universit{\"a}t M{\"u}nchen}, + year = 2006, + url = {http://nbn-resolving.de/urn/resolver.pl + ?urn=urn:nbn:de:bvb:91-diss20060623-1915123970}, + receiveddate = 2006 +} + +@PhDThesis{ carpet-herrmann2005a, + status = {thesis}, + author = {Frank Herrmann}, + title = {Evolution and analysis of binary black hole spacetimes}, + school = {Universit{\"a}t Potsdam}, + year = 2005, + receiveddate = 2005 +} + +@PhDThesis{ carpet-koppitz2004a, + status = {thesis}, + author = {Michael Koppitz}, + title = {Numerical Studies Of Black Hole Initial Data}, + school = {Universit{\"a}t Potsdam}, + year = 2004, + url = {http://opus.kobv.de/ubp/volltexte/2005/134/}, + receiveddate = 2004 +} diff --git a/Carpet/CarpetWeb/publications/citations-thesis.bibitems b/Carpet/CarpetWeb/publications/citations-thesis.bibitems new file mode 100644 index 000000000..b32dd4aed --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-thesis.bibitems @@ -0,0 +1,99 @@ +\expandafter\ifx\csname natexlab\endcsname\relax\def\natexlab#1{#1}\fi +\expandafter\ifx\csname bibnamefont\endcsname\relax + \def\bibnamefont#1{#1}\fi +\expandafter\ifx\csname bibfnamefont\endcsname\relax + \def\bibfnamefont#1{#1}\fi +\expandafter\ifx\csname citenamefont\endcsname\relax + \def\citenamefont#1{#1}\fi +\expandafter\ifx\csname url\endcsname\relax + \def\url#1{\texttt{#1}}\fi +\expandafter\ifx\csname urlprefix\endcsname\relax\def\urlprefix{URL }\fi +\providecommand{\bibinfo}[2]{#2} +\providecommand{\eprint}[2][]{\url{#2}} + +\blurb[{\citenamefont{Bentivegna}(2008)}]{carpet-bentivegna2008b} +\bibinfo{author}{\bibfnamefont{E.}~\bibnamefont{Bentivegna}}, + \emph{\bibinfo{title}{Ringing in unison: exploring black hole coalescence + with quasinormal modes}}, Ph.D. thesis, \bibinfo{school}{Pennsylvania State + University} (\bibinfo{year}{2008}), + \urlprefix\url{http://etda.libraries.psu.edu/ + theses/approved/WorldWideIndex/ETD-2570/index.html}. + +\blurb[{\citenamefont{Jasiulek}(2008)}]{carpet-jasiulek2008a} +\bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Jasiulek}}, + \emph{\bibinfo{title}{Spin measures on isolated and dynamical horizons in + numerical relativity}}, Master's thesis, + \bibinfo{school}{Humboldt-Universit{\"a}t zu Berlin} (\bibinfo{year}{2008}). + +\blurb[{\citenamefont{Dorband}(2007)}]{carpet-dorband2007a} +\bibinfo{author}{\bibfnamefont{E.~N.} \bibnamefont{Dorband}}, + \emph{\bibinfo{title}{Computing and analyzing gravitational radiation in + black hole simulations using a new multi-block approach to numerical + relativity}}, Ph.D. thesis, \bibinfo{school}{Louisiana State University} + (\bibinfo{year}{2007}), + \urlprefix\url{http://www.cct.lsu.edu/~dorband/thesis.pdf}. + +\blurb[{\citenamefont{Kastaun}(2007)}]{carpet-kastaun2007a} +\bibinfo{author}{\bibfnamefont{W.}~\bibnamefont{Kastaun}}, + \emph{\bibinfo{title}{Developing a code for general relativistic + hydrodynamics with application to neutron star oscillations}}, Ph.D. thesis, + \bibinfo{school}{Universit{\"a}t T{\"u}bingen} (\bibinfo{year}{2007}), + \urlprefix\url{http://tobias-lib.ub.uni-tuebingen.de/ volltexte/2007/2803/}. + +\blurb[{\citenamefont{Manca}(2007)}]{carpet-manca2007a} +\bibinfo{author}{\bibfnamefont{G.~M.} \bibnamefont{Manca}}, + \emph{\bibinfo{title}{Dynamical instabilities in rapidly rotating neutron + star models}}, Ph.D. thesis, \bibinfo{school}{Universit{\`a} di Parma} + (\bibinfo{year}{2007}). + +\blurb[{\citenamefont{Ott}(2007)}]{carpet-ott2007a} +\bibinfo{author}{\bibfnamefont{C.~D.} \bibnamefont{Ott}}, + \emph{\bibinfo{title}{Stellar iron core collapse in \{3+1\} general + relativity and the gravitational wave signature of core-collapse + supernovae}}, Ph.D. thesis, \bibinfo{school}{Universit{\"a}t Potsdam} + (\bibinfo{year}{2007}), + \urlprefix\url{http://stellarcollapse.org/papers/thesis_final.pdf}. + +\blurb[{\citenamefont{Zengino{\u{g}}lu}(2007)}]{carpet-2007a} +\bibinfo{author}{\bibfnamefont{A.}~\bibnamefont{Zengino{\u{g}}lu}}, + \emph{\bibinfo{title}{A conformal approach to numerical calculations of + asymptotically flat spacetimes}}, Ph.D. thesis, + \bibinfo{school}{Universit{\"a}t Potsdam} (\bibinfo{year}{2007}), + \eprint{arXiv:0711.0873 [gr-qc]}, + \urlprefix\url{http://arxiv.org/abs/0711.0873}. + +\blurb[{\citenamefont{L{\"o}ffler}(2006)}]{carpet-loeffler2005a} +\bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{L{\"o}ffler}}, + \emph{\bibinfo{title}{Numerical simulations of neutron star-black hole + mergers}}, Ph.D. thesis, \bibinfo{school}{Universit{\"a}t Potsdam} + (\bibinfo{year}{2006}), + \urlprefix\url{http://opus.kobv.de/ubp/volltexte/2006/774/}. + +\blurb[{\citenamefont{Madiraju}(2006)}]{carpet-madiraju2006a} +\bibinfo{author}{\bibfnamefont{S.}~\bibnamefont{Madiraju}}, + \emph{\bibinfo{title}{Performance profiling with {Cactus} benchmarks}}, + Master's thesis, \bibinfo{school}{Louisiana State University} + (\bibinfo{year}{2006}), \urlprefix\url{http://www.cactuscode.org/ + Articles/Cactus_Madiraju06.pdf}. + +\blurb[{\citenamefont{Zink}(2006)}]{carpet-zink2006d} +\bibinfo{author}{\bibfnamefont{B.}~\bibnamefont{Zink}}, + \emph{\bibinfo{title}{Black hole formation from non-axisymmetric + instabilities in quasi-toroidal stars}}, Ph.D. thesis, + \bibinfo{school}{Technische Universit{\"a}t M{\"u}nchen} + (\bibinfo{year}{2006}), + \urlprefix\url{http://nbn-resolving.de/urn/resolver.pl + ?urn=urn:nbn:de:bvb:91-diss20060623-1915123970}. + +\blurb[{\citenamefont{Herrmann}(2005)}]{carpet-herrmann2005a} +\bibinfo{author}{\bibfnamefont{F.}~\bibnamefont{Herrmann}}, + \emph{\bibinfo{title}{Evolution and analysis of binary black hole + spacetimes}}, Ph.D. thesis, \bibinfo{school}{Universit{\"a}t Potsdam} + (\bibinfo{year}{2005}). + +\blurb[{\citenamefont{Koppitz}(2004)}]{carpet-koppitz2004a} +\bibinfo{author}{\bibfnamefont{M.}~\bibnamefont{Koppitz}}, + \emph{\bibinfo{title}{Numerical studies of black hole initial data}}, Ph.D. + thesis, \bibinfo{school}{Universit{\"a}t Potsdam} (\bibinfo{year}{2004}), + \urlprefix\url{http://opus.kobv.de/ubp/volltexte/2005/134/}. + diff --git a/Carpet/CarpetWeb/publications/citations-thesis.blg b/Carpet/CarpetWeb/publications/citations-thesis.blg new file mode 100644 index 000000000..c2ec896d7 --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-thesis.blg @@ -0,0 +1,46 @@ +This is BibTeX, Version 0.99c (Web2C 7.5.6) +The top-level auxiliary file: citations-thesis.aux +The style file: apsrev-titles-manyauthors.bst +Database file #1: citations-thesis.bib +Reallocated wiz_functions (elt_size=4) to 6000 items from 3000. +You've used 12 entries, + 3482 wiz_defined-function locations, + 1215 strings with 12161 characters, +and the built_in function-call counts, 5178 in all, are: += -- 334 +> -- 84 +< -- 24 ++ -- 50 +- -- 24 +* -- 621 +:= -- 703 +add.period$ -- 12 +call.type$ -- 12 +change.case$ -- 60 +chr.to.int$ -- 12 +cite$ -- 12 +duplicate$ -- 516 +empty$ -- 470 +format.name$ -- 60 +if$ -- 936 +int.to.chr$ -- 1 +int.to.str$ -- 13 +missing$ -- 72 +newline$ -- 51 +num.names$ -- 36 +pop$ -- 134 +preamble$ -- 1 +purify$ -- 48 +quote$ -- 0 +skip$ -- 169 +stack$ -- 0 +substring$ -- 134 +swap$ -- 325 +text.length$ -- 12 +text.prefix$ -- 0 +top$ -- 0 +type$ -- 72 +warning$ -- 0 +while$ -- 24 +width$ -- 0 +write$ -- 156 diff --git a/Carpet/CarpetWeb/publications/citations-thesis.html-updated b/Carpet/CarpetWeb/publications/citations-thesis.html-updated new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-thesis.html-updated diff --git a/Carpet/CarpetWeb/publications/citations-thesis.log b/Carpet/CarpetWeb/publications/citations-thesis.log new file mode 100644 index 000000000..0fdd5acee --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-thesis.log @@ -0,0 +1,206 @@ +This is pdfTeX, Version 3.141592-1.40.3 (Web2C 7.5.6) (format=pdflatex 2009.7.3) 3 AUG 2009 22:08 +entering extended mode +**\nonstopmode \input{/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publicatio +ns/citations-thesis.tex} + +(/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publications/citations-thesis.t +ex (/opt/local/share/texmf-dist/tex/latex/revtex/revtex4.cls +Document Class: revtex4 2001/08/02 v4.0 (http://publish.aps.org/revtex4/ for do +cumentation) + Copyright (c) 2001 The American Physical Society. + mailto:revtex@aps.org + Licensed under the LPPL: +http://www.ctan.org/tex-archive/macros/latex/base/lppl.txt + Arthur Ogawa <ogawa@teleport.com> + Based on work by David Carlisle <david@dcarlisle.demon.co.uk>. +ltxutil: portions licensed from W. E. Baxter (web@superscript.com) +Class revtex4 Info: Repairing broken LateX \@sect on input line 596. +\intertabularlinepenalty=\count79 +\@tbpen=\count80 +\@arstrutbox@hline=\box26 +Class revtex4 Info: Repairing broken LaTeX \@xbitor on input line 1610. +ltxgrid: portions licensed from W. E. Baxter (web@superscript.com) +\c@linecount=\count81 +\output=\toks14 +\@protection@box=\box27 +\@topmark@saved=\toks15 +\footins@saved=\box28 +\pagesofar=\box29 +\footbox=\box30 +\pagegrid@col=\count82 +Class revtex4 Info: Incorporating package {textcase} [1998/11/12 v0.06 Text on +ly upper/lower case changing (DPC)]. on input line 3682. +(/opt/local/share/texmf-local/tex/latex/html/url.sty +Package: url 1999/03/02 ver 1.4 Verb mode for urls, email addresses, and file + names +) +\c@affil=\count83 +\absbox=\box31 +\c@part=\count84 +\c@section=\count85 +\c@subsection=\count86 +\c@subsubsection=\count87 +\c@paragraph=\count88 +\c@subparagraph=\count89 +\abovecaptionskip=\skip41 +\belowcaptionskip=\skip42 +\c@figure=\count90 +\c@table=\count91 + +(/opt/local/share/texmf-dist/tex/latex/natbib/natbib.sty +Package: natbib 2007/02/05 8.0 (PWD) +\bibhang=\skip43 +\bibsep=\skip44 +LaTeX Info: Redefining \cite on input line 602. +\c@NAT@ctr=\count92 +) +\widetext@top=\box32 +\widetext@bot=\box33 + +(/opt/local/share/texmf-dist/tex/latex/revtex/revsymb.sty +Package: revsymb 2001/08/02 v4.0 (http://publish.aps.org/revtex4/ for documenta +tion) +LaTeX Info: Redefining \REV@mathfrak on input line 118. +)) + +Class revtex4 Warning: No Society specified, using generic APS style. + +(/opt/local/share/texmf-dist/tex/latex/revtex/aps.rtx +File: aps.rtx 2001/08/02 v4.0 (http://publish.aps.org/revtex4/ for documentatio +n) +) +(/opt/local/share/texmf-dist/tex/latex/revtex/10pt.rtx +File: 10pt.rtx 2001/08/02 v4.0 (http://publish.aps.org/revtex4/ for documentati +on) +) +(/opt/local/share/texmf-dist/tex/generic/babel/babel.sty +Package: babel 2005/11/23 v3.8h The Babel package + +(/opt/local/share/texmf-dist/tex/generic/babel/english.ldf +Language: english 2005/03/30 v3.3o English support from the babel system + +(/opt/local/share/texmf-dist/tex/generic/babel/babel.def +File: babel.def 2005/11/23 v3.8h Babel common definitions +\babel@savecnt=\count93 +\U@D=\dimen102 +) +\l@british = a dialect from \language\l@english +\l@UKenglish = a dialect from \language\l@english +\l@canadian = a dialect from \language\l@american +\l@australian = a dialect from \language\l@british +\l@newzealand = a dialect from \language\l@british +)) +(/opt/local/share/texmf-dist/tex/latex/base/fontenc.sty +Package: fontenc 2005/09/27 v1.99g Standard LaTeX package + +(/opt/local/share/texmf-dist/tex/latex/base/t1enc.def +File: t1enc.def 2005/09/27 v1.99g Standard LaTeX file +LaTeX Font Info: Redeclaring font encoding T1 on input line 43. +)) +(/opt/local/share/texmf-dist/tex/latex/base/inputenc.sty +Package: inputenc 2006/05/05 v1.1b Input encoding file +\inpenc@prehook=\toks16 +\inpenc@posthook=\toks17 + +(/opt/local/share/texmf-local/tex/latex/html/latin9.def +File: latin1.def 1998/03/05 v0.97 Input encoding file(test version: still liabl +e to change) +)) +(/opt/local/share/texmf-dist/tex/latex/psnfss/mathpazo.sty +Package: mathpazo 2005/04/12 PSNFSS-v9.2a Palatino w/ Pazo Math (D.Puga, WaS) +\symupright=\mathgroup4 +) +(/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publications/citations-thesis.a +ux) +\openout1 = `citations-thesis.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Try loading font information for T1+ppl on input line 8. + (/opt/local/share/texmf-dist/tex/latex/psnfss/t1ppl.fd +File: t1ppl.fd 2001/06/04 font definitions for T1/ppl. +) +Class revtex4 Info: Patching LaTeX tabular. on input line 8. +Class revtex4 Info: cite was not loaded (OK!) on input line 8. +Class revtex4 Info: multicol was not loaded (OK!) on input line 8. +\big@size=\dimen103 + +(/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publications/citations-thesis.b +bl +LaTeX Font Info: Try loading font information for T1+cmtt on input line 20. + (/opt/local/share/texmf-dist/tex/latex/base/t1cmtt.fd +File: t1cmtt.fd 1999/05/25 v2.5h Standard LaTeX font definitions +) +LaTeX Font Info: Try loading font information for OT1+ppl on input line 20. + +(/opt/local/share/texmf-dist/tex/latex/psnfss/ot1ppl.fd +File: ot1ppl.fd 2001/06/04 font definitions for OT1/ppl. +) +LaTeX Font Info: Try loading font information for OML+zplm on input line 20. + + +(/opt/local/share/texmf-dist/tex/latex/psnfss/omlzplm.fd +File: omlzplm.fd 2002/09/08 Fontinst v1.914 font definitions for OML/zplm. +) +LaTeX Font Info: Try loading font information for OMS+zplm on input line 20. + + +(/opt/local/share/texmf-dist/tex/latex/psnfss/omszplm.fd +File: omszplm.fd 2002/09/08 Fontinst v1.914 font definitions for OMS/zplm. +) +LaTeX Font Info: Try loading font information for OMX+zplm on input line 20. + + +(/opt/local/share/texmf-dist/tex/latex/psnfss/omxzplm.fd +File: omxzplm.fd 2002/09/08 Fontinst v1.914 font definitions for OMX/zplm. +) +LaTeX Font Info: Try loading font information for OT1+zplm on input line 20. + + +(/opt/local/share/texmf-dist/tex/latex/psnfss/ot1zplm.fd +File: ot1zplm.fd 2002/09/08 Fontinst v1.914 font definitions for OT1/zplm. +) +Underfull \hbox (badness 10000) in paragraph at lines 81--88 +[]\T1/ppl/m/n/9 B. Zink, \T1/ppl/m/it/9 Black hole for-ma-tion from non-axisymm +etric in-sta-bil-i-ties in quasi-toroidal stars\T1/ppl/m/n/9 , Ph.D. the-sis, T +ech-nis- + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 81--88 +\T1/ppl/m/n/9 che Uni-ver-sität München (2006), URL $\T1/cmtt/m/n/9 http : / / +nbn-[]resolving . de / urn / resolver . pl ? urn = urn : nbn : de : bvb : + [] + +) [1{/opt/local/share/texmf/fonts/map/pdftex/updmap/pdftex.map}] +(/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publications/citations-thesis.a +ux) ) +Here is how much of TeX's memory you used: + 2454 strings out of 94073 + 30478 string characters out of 1164798 + 89898 words of memory out of 1500000 + 5746 multiletter control sequences out of 10000+50000 + 15151 words of font info for 37 fonts, out of 1200000 for 2000 + 645 hyphenation exceptions out of 8191 + 26i,4n,21p,308b,280s stack positions out of 5000i,500n,6000p,200000b,5000s +{/opt/local/share/texmf-dist/fonts/enc/dvips/cm-super/cm-super-t1.enc}{/op +t/local/share/texmf-dist/fonts/enc/dvips/base/8r.enc}</opt/local/share/texmf-di +st/fonts/type1/public/cm-super/sftt0900.pfb></opt/local/share/texmf-dist/fonts/ +type1/urw/palatino/uplr8a.pfb></opt/local/share/texmf-dist/fonts/type1/urw/pala +tino/uplri8a.pfb> +Output written on citations-thesis.pdf (1 page, 80328 bytes). +PDF statistics: + 20 PDF objects out of 1000 (max. 8388607) + 0 named destinations out of 1000 (max. 131072) + 1 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/Carpet/CarpetWeb/publications/citations-thesis.pdf b/Carpet/CarpetWeb/publications/citations-thesis.pdf Binary files differnew file mode 100644 index 000000000..828a70216 --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-thesis.pdf diff --git a/Carpet/CarpetWeb/publications/citations-thesis.tex b/Carpet/CarpetWeb/publications/citations-thesis.tex new file mode 100644 index 000000000..7edab39cb --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-thesis.tex @@ -0,0 +1,15 @@ +\documentclass{revtex4} + +\usepackage[english]{babel} +\usepackage[T1]{fontenc} +\usepackage[latin9]{inputenc} +\usepackage{mathpazo} + +\begin{document} + +\nocite{*} + +\bibliographystyle{apsrev-titles-manyauthors} +\bibliography{citations-thesis} + +\end{document} diff --git a/Carpet/CarpetWeb/publications/citations-webpage.aux b/Carpet/CarpetWeb/publications/citations-webpage.aux new file mode 100644 index 000000000..213d6fb3d --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-webpage.aux @@ -0,0 +1,14 @@ +\relax +\citation{*} +\bibdata{citations-webpage} +\bibcite{carpet-carpetweb}{{1}{}{{car}}{{}}} +\bibcite{carpet-cactusweb}{{2}{}{{car}}{{}}} +\global \chardef \firstnote@num2\relax +\bibstyle{apsrev-titles-manyauthors} +\select@language{english} +\@writefile{toc}{\select@language{english}} +\@writefile{lof}{\select@language{english}} +\@writefile{lot}{\select@language{english}} +\@writefile{toc}{\contentsline {section}{\numberline {}References}{1}{}} +\newlabel{LastBibItem}{{2}{1}{}{}{}} +\newlabel{LastPage}{{}{1}} diff --git a/Carpet/CarpetWeb/publications/citations-webpage.bbl b/Carpet/CarpetWeb/publications/citations-webpage.bbl new file mode 100644 index 000000000..e249cb868 --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-webpage.bbl @@ -0,0 +1,23 @@ +\begin{thebibliography}{2} +\expandafter\ifx\csname natexlab\endcsname\relax\def\natexlab#1{#1}\fi +\expandafter\ifx\csname bibnamefont\endcsname\relax + \def\bibnamefont#1{#1}\fi +\expandafter\ifx\csname bibfnamefont\endcsname\relax + \def\bibfnamefont#1{#1}\fi +\expandafter\ifx\csname citenamefont\endcsname\relax + \def\citenamefont#1{#1}\fi +\expandafter\ifx\csname url\endcsname\relax + \def\url#1{\texttt{#1}}\fi +\expandafter\ifx\csname urlprefix\endcsname\relax\def\urlprefix{URL }\fi +\providecommand{\bibinfo}[2]{#2} +\providecommand{\eprint}[2][]{\url{#2}} + +\bibitem[{car({\natexlab{a}})}]{carpet-carpetweb} +\emph{\bibinfo{title}{Mesh refinement with {Carpet}}}, + \urlprefix\url{http://www.carpetcode.org/}. + +\bibitem[{car({\natexlab{b}})}]{carpet-cactusweb} +\emph{\bibinfo{title}{{Cactus} {Computational} {Toolkit}}}, + \urlprefix\url{http://www.cactuscode.org/}. + +\end{thebibliography} diff --git a/Carpet/CarpetWeb/publications/citations-webpage.bib b/Carpet/CarpetWeb/publications/citations-webpage.bib new file mode 100644 index 000000000..daa32d7a5 --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-webpage.bib @@ -0,0 +1,12 @@ + +@Misc{ carpet-carpetweb, + status = {webpage}, + title = {Mesh Refinement with {Carpet}}, + url = {http://www.carpetcode.org/} +} + +@Misc{ carpet-cactusweb, + status = {webpage}, + title = {{Cactus} {Computational} {Toolkit}}, + url = {http://www.cactuscode.org/} +} diff --git a/Carpet/CarpetWeb/publications/citations-webpage.bibitems b/Carpet/CarpetWeb/publications/citations-webpage.bibitems new file mode 100644 index 000000000..0ddaec695 --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-webpage.bibitems @@ -0,0 +1,21 @@ +\expandafter\ifx\csname natexlab\endcsname\relax\def\natexlab#1{#1}\fi +\expandafter\ifx\csname bibnamefont\endcsname\relax + \def\bibnamefont#1{#1}\fi +\expandafter\ifx\csname bibfnamefont\endcsname\relax + \def\bibfnamefont#1{#1}\fi +\expandafter\ifx\csname citenamefont\endcsname\relax + \def\citenamefont#1{#1}\fi +\expandafter\ifx\csname url\endcsname\relax + \def\url#1{\texttt{#1}}\fi +\expandafter\ifx\csname urlprefix\endcsname\relax\def\urlprefix{URL }\fi +\providecommand{\bibinfo}[2]{#2} +\providecommand{\eprint}[2][]{\url{#2}} + +\blurb[{car({\natexlab{a}})}]{carpet-carpetweb} +\emph{\bibinfo{title}{Mesh refinement with {Carpet}}}, + \urlprefix\url{http://www.carpetcode.org/}. + +\blurb[{car({\natexlab{b}})}]{carpet-cactusweb} +\emph{\bibinfo{title}{{Cactus} {Computational} {Toolkit}}}, + \urlprefix\url{http://www.cactuscode.org/}. + diff --git a/Carpet/CarpetWeb/publications/citations-webpage.blg b/Carpet/CarpetWeb/publications/citations-webpage.blg new file mode 100644 index 000000000..38a2abdee --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-webpage.blg @@ -0,0 +1,46 @@ +This is BibTeX, Version 0.99c (Web2C 7.5.6) +The top-level auxiliary file: citations-webpage.aux +The style file: apsrev-titles-manyauthors.bst +Database file #1: citations-webpage.bib +Reallocated wiz_functions (elt_size=4) to 6000 items from 3000. +You've used 2 entries, + 3482 wiz_defined-function locations, + 1163 strings with 10236 characters, +and the built_in function-call counts, 566 in all, are: += -- 40 +> -- 0 +< -- 0 ++ -- 5 +- -- 0 +* -- 50 +:= -- 73 +add.period$ -- 2 +call.type$ -- 2 +change.case$ -- 10 +chr.to.int$ -- 1 +cite$ -- 6 +duplicate$ -- 48 +empty$ -- 59 +format.name$ -- 0 +if$ -- 103 +int.to.chr$ -- 2 +int.to.str$ -- 3 +missing$ -- 4 +newline$ -- 21 +num.names$ -- 0 +pop$ -- 24 +preamble$ -- 1 +purify$ -- 8 +quote$ -- 0 +skip$ -- 20 +stack$ -- 0 +substring$ -- 26 +swap$ -- 16 +text.length$ -- 0 +text.prefix$ -- 0 +top$ -- 0 +type$ -- 12 +warning$ -- 0 +while$ -- 0 +width$ -- 0 +write$ -- 30 diff --git a/Carpet/CarpetWeb/publications/citations-webpage.html-updated b/Carpet/CarpetWeb/publications/citations-webpage.html-updated new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-webpage.html-updated diff --git a/Carpet/CarpetWeb/publications/citations-webpage.log b/Carpet/CarpetWeb/publications/citations-webpage.log new file mode 100644 index 000000000..157fd7840 --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-webpage.log @@ -0,0 +1,193 @@ +This is pdfTeX, Version 3.141592-1.40.3 (Web2C 7.5.6) (format=pdflatex 2009.7.3) 3 AUG 2009 22:08 +entering extended mode +**\nonstopmode \input{/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publicatio +ns/citations-webpage.tex} + +(/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publications/citations-webpage. +tex (/opt/local/share/texmf-dist/tex/latex/revtex/revtex4.cls +Document Class: revtex4 2001/08/02 v4.0 (http://publish.aps.org/revtex4/ for do +cumentation) + Copyright (c) 2001 The American Physical Society. + mailto:revtex@aps.org + Licensed under the LPPL: +http://www.ctan.org/tex-archive/macros/latex/base/lppl.txt + Arthur Ogawa <ogawa@teleport.com> + Based on work by David Carlisle <david@dcarlisle.demon.co.uk>. +ltxutil: portions licensed from W. E. Baxter (web@superscript.com) +Class revtex4 Info: Repairing broken LateX \@sect on input line 596. +\intertabularlinepenalty=\count79 +\@tbpen=\count80 +\@arstrutbox@hline=\box26 +Class revtex4 Info: Repairing broken LaTeX \@xbitor on input line 1610. +ltxgrid: portions licensed from W. E. Baxter (web@superscript.com) +\c@linecount=\count81 +\output=\toks14 +\@protection@box=\box27 +\@topmark@saved=\toks15 +\footins@saved=\box28 +\pagesofar=\box29 +\footbox=\box30 +\pagegrid@col=\count82 +Class revtex4 Info: Incorporating package {textcase} [1998/11/12 v0.06 Text on +ly upper/lower case changing (DPC)]. on input line 3682. +(/opt/local/share/texmf-local/tex/latex/html/url.sty +Package: url 1999/03/02 ver 1.4 Verb mode for urls, email addresses, and file + names +) +\c@affil=\count83 +\absbox=\box31 +\c@part=\count84 +\c@section=\count85 +\c@subsection=\count86 +\c@subsubsection=\count87 +\c@paragraph=\count88 +\c@subparagraph=\count89 +\abovecaptionskip=\skip41 +\belowcaptionskip=\skip42 +\c@figure=\count90 +\c@table=\count91 + +(/opt/local/share/texmf-dist/tex/latex/natbib/natbib.sty +Package: natbib 2007/02/05 8.0 (PWD) +\bibhang=\skip43 +\bibsep=\skip44 +LaTeX Info: Redefining \cite on input line 602. +\c@NAT@ctr=\count92 +) +\widetext@top=\box32 +\widetext@bot=\box33 + +(/opt/local/share/texmf-dist/tex/latex/revtex/revsymb.sty +Package: revsymb 2001/08/02 v4.0 (http://publish.aps.org/revtex4/ for documenta +tion) +LaTeX Info: Redefining \REV@mathfrak on input line 118. +)) + +Class revtex4 Warning: No Society specified, using generic APS style. + +(/opt/local/share/texmf-dist/tex/latex/revtex/aps.rtx +File: aps.rtx 2001/08/02 v4.0 (http://publish.aps.org/revtex4/ for documentatio +n) +) +(/opt/local/share/texmf-dist/tex/latex/revtex/10pt.rtx +File: 10pt.rtx 2001/08/02 v4.0 (http://publish.aps.org/revtex4/ for documentati +on) +) +(/opt/local/share/texmf-dist/tex/generic/babel/babel.sty +Package: babel 2005/11/23 v3.8h The Babel package + +(/opt/local/share/texmf-dist/tex/generic/babel/english.ldf +Language: english 2005/03/30 v3.3o English support from the babel system + +(/opt/local/share/texmf-dist/tex/generic/babel/babel.def +File: babel.def 2005/11/23 v3.8h Babel common definitions +\babel@savecnt=\count93 +\U@D=\dimen102 +) +\l@british = a dialect from \language\l@english +\l@UKenglish = a dialect from \language\l@english +\l@canadian = a dialect from \language\l@american +\l@australian = a dialect from \language\l@british +\l@newzealand = a dialect from \language\l@british +)) +(/opt/local/share/texmf-dist/tex/latex/base/fontenc.sty +Package: fontenc 2005/09/27 v1.99g Standard LaTeX package + +(/opt/local/share/texmf-dist/tex/latex/base/t1enc.def +File: t1enc.def 2005/09/27 v1.99g Standard LaTeX file +LaTeX Font Info: Redeclaring font encoding T1 on input line 43. +)) +(/opt/local/share/texmf-dist/tex/latex/base/inputenc.sty +Package: inputenc 2006/05/05 v1.1b Input encoding file +\inpenc@prehook=\toks16 +\inpenc@posthook=\toks17 + +(/opt/local/share/texmf-local/tex/latex/html/latin9.def +File: latin1.def 1998/03/05 v0.97 Input encoding file(test version: still liabl +e to change) +)) +(/opt/local/share/texmf-dist/tex/latex/psnfss/mathpazo.sty +Package: mathpazo 2005/04/12 PSNFSS-v9.2a Palatino w/ Pazo Math (D.Puga, WaS) +\symupright=\mathgroup4 +) +(/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publications/citations-webpage. +aux) +\openout1 = `citations-webpage.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 8. +LaTeX Font Info: ... okay on input line 8. +LaTeX Font Info: Try loading font information for T1+ppl on input line 8. + (/opt/local/share/texmf-dist/tex/latex/psnfss/t1ppl.fd +File: t1ppl.fd 2001/06/04 font definitions for T1/ppl. +) +Class revtex4 Info: Patching LaTeX tabular. on input line 8. +Class revtex4 Info: cite was not loaded (OK!) on input line 8. +Class revtex4 Info: multicol was not loaded (OK!) on input line 8. +\big@size=\dimen103 + +(/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publications/citations-webpage. +bbl +LaTeX Font Info: Try loading font information for T1+cmtt on input line 17. + (/opt/local/share/texmf-dist/tex/latex/base/t1cmtt.fd +File: t1cmtt.fd 1999/05/25 v2.5h Standard LaTeX font definitions +) +LaTeX Font Info: Try loading font information for OT1+ppl on input line 17. + +(/opt/local/share/texmf-dist/tex/latex/psnfss/ot1ppl.fd +File: ot1ppl.fd 2001/06/04 font definitions for OT1/ppl. +) +LaTeX Font Info: Try loading font information for OML+zplm on input line 17. + + +(/opt/local/share/texmf-dist/tex/latex/psnfss/omlzplm.fd +File: omlzplm.fd 2002/09/08 Fontinst v1.914 font definitions for OML/zplm. +) +LaTeX Font Info: Try loading font information for OMS+zplm on input line 17. + + +(/opt/local/share/texmf-dist/tex/latex/psnfss/omszplm.fd +File: omszplm.fd 2002/09/08 Fontinst v1.914 font definitions for OMS/zplm. +) +LaTeX Font Info: Try loading font information for OMX+zplm on input line 17. + + +(/opt/local/share/texmf-dist/tex/latex/psnfss/omxzplm.fd +File: omxzplm.fd 2002/09/08 Fontinst v1.914 font definitions for OMX/zplm. +) +LaTeX Font Info: Try loading font information for OT1+zplm on input line 17. + + +(/opt/local/share/texmf-dist/tex/latex/psnfss/ot1zplm.fd +File: ot1zplm.fd 2002/09/08 Fontinst v1.914 font definitions for OT1/zplm. +)) [1{/opt/local/share/texmf/fonts/map/pdftex/updmap/pdftex.map}] +(/Users/eschnett/Calpha/carpet/Carpet/CarpetWeb/publications/citations-webpage. +aux) ) +Here is how much of TeX's memory you used: + 2440 strings out of 94073 + 30236 string characters out of 1164798 + 85900 words of memory out of 1500000 + 5732 multiletter control sequences out of 10000+50000 + 15151 words of font info for 37 fonts, out of 1200000 for 2000 + 645 hyphenation exceptions out of 8191 + 26i,4n,21p,308b,257s stack positions out of 5000i,500n,6000p,200000b,5000s +{/opt/local/share/texmf-dist/fonts/enc/dvips/cm-super/cm-super-t1.enc}{/o +pt/local/share/texmf-dist/fonts/enc/dvips/base/8r.enc}</opt/local/share/texmf-d +ist/fonts/type1/public/cm-super/sftt0900.pfb></opt/local/share/texmf-dist/fonts +/type1/urw/palatino/uplr8a.pfb></opt/local/share/texmf-dist/fonts/type1/urw/pal +atino/uplri8a.pfb> +Output written on citations-webpage.pdf (1 page, 47024 bytes). +PDF statistics: + 20 PDF objects out of 1000 (max. 8388607) + 0 named destinations out of 1000 (max. 131072) + 1 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/Carpet/CarpetWeb/publications/citations-webpage.pdf b/Carpet/CarpetWeb/publications/citations-webpage.pdf Binary files differnew file mode 100644 index 000000000..46713763b --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-webpage.pdf diff --git a/Carpet/CarpetWeb/publications/citations-webpage.tex b/Carpet/CarpetWeb/publications/citations-webpage.tex new file mode 100644 index 000000000..b476a9761 --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations-webpage.tex @@ -0,0 +1,15 @@ +\documentclass{revtex4} + +\usepackage[english]{babel} +\usepackage[T1]{fontenc} +\usepackage[latin9]{inputenc} +\usepackage{mathpazo} + +\begin{document} + +\nocite{*} + +\bibliographystyle{apsrev-titles-manyauthors} +\bibliography{citations-webpage} + +\end{document} diff --git a/Carpet/CarpetWeb/publications/citations.template b/Carpet/CarpetWeb/publications/citations.template new file mode 100644 index 000000000..ed7fa930b --- /dev/null +++ b/Carpet/CarpetWeb/publications/citations.template @@ -0,0 +1,15 @@ +\documentclass{revtex4} + +\usepackage[english]{babel} +\usepackage[T1]{fontenc} +\usepackage[latin9]{inputenc} +\usepackage{mathpazo} + +\begin{document} + +\nocite{*} + +\bibliographystyle{apsrev-titles-manyauthors} +\bibliography{citations-STATUS} + +\end{document} diff --git a/Carpet/CarpetWeb/publications/html-n.bst b/Carpet/CarpetWeb/publications/html-n.bst new file mode 100644 index 000000000..ec45d2e73 --- /dev/null +++ b/Carpet/CarpetWeb/publications/html-n.bst @@ -0,0 +1,1312 @@ + % $Id: html-btxbst.doc 1.4 2005/09/04 13:27:21 dds Exp $
+ %
+ % This file is either "html-btxbst.doc" or was derived from
+ % "html-btxbst.doc" using cpp. "html-btxbst.doc" itself was edited
+ % from "btxbst.doc" and "named.bst".
+ % The following copyright information is from btxbst.doc:
+ % version 0.99b for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+ % "named" style (sorted keys of the form [name, year])
+ % Some code for this was taken from "named.bst".
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ dvi
+ html
+ keywords
+ pdf
+ postscript
+ url
+ doi
+ mailto
+ }
+ {}
+ { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ author empty$
+ { editor empty$
+ { organization empty$
+ 'skip$
+ { "<!-- Authors: " organization purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " editor purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " author purify$ * " -->" * write$ newline$ }
+ if$
+ keywords empty$
+ 'skip$
+ { "<!-- Keywords: " keywords * " -->" * write$ newline$ }
+ if$
+ "<dt><a name=" quote$ * cite$ * quote$ * ">[" * label * "]</a></dt><dd>" * write$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ postscript empty$
+ 'skip$
+ { newline$ "<!-- PostScript: " postscript * " -->" * write$ }
+ if$
+ pdf empty$
+ 'skip$
+ { newline$ "<!-- PDF: " pdf * " -->" * write$ }
+ if$
+ dvi empty$
+ 'skip$
+ { newline$ "<!-- DVI: " dvi * " -->" * write$ }
+ if$
+ doi empty$
+ 'skip$
+ { newline$ "<!-- DOI: " doi * " -->" * write$ }
+ if$
+ "</dd>" write$
+ newline$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {str.to.int}
+{
+ 's :=
+ #0
+ { s empty$ not }
+ { % Multiply the number on the top of the stack by 10 = 1010 binary
+ duplicate$ + % x2
+ duplicate$ % x2 x2
+ duplicate$ + duplicate$ + % x2 x8
+ +
+ s #1 #1 substring$ chr.to.int$ #48 - + % #48 is ascii for '0'
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "<cite>" swap$ * "</cite>" * }
+ if$
+}
+
+FUNCTION {add.link} % title
+{
+ 't :=
+ t empty$
+ { "" }
+ { url empty$
+ { html empty$
+ { t }
+ { "<a href=" quote$ * html * quote$ * ">" * t * "</a>" * }
+ if$ }
+ { "<a href=" quote$ * url * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {add.mailto} % authors
+{
+ 't :=
+ t empty$
+ { "" }
+ { mailto empty$
+ { t }
+ { "<a href=" quote$ * "mailto:" * mailto * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+ add.mailto
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+ add.link
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+ add.link
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "<cite>" * journal * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ "<a href=" * quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "<cite>" * series * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "<cite>" * booktitle * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+
+FUNCTION {format.lab.names}
+{ 's :=
+ s num.names$ 'numnames :=
+ numnames #1 =
+ { s #1 "{vv }{ll}" format.name$ }
+ { numnames #2 =
+ { s #1 "{vv }{ll }and " format.name$ s #2 "{vv }{ll}" format.name$ * }
+ { s #1 "{vv }{ll }" format.name$ "et~al." * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+ year empty$
+ 'skip$
+ { ", " * }
+ if$
+ year field.or.null purify$ * % CHANGED - pfps - 15 Feb 1989
+ 'label :=
+ year field.or.null purify$
+ * sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et al." * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ calc.label
+ sort.label
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ *
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label extra.label * 'label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {begin.bib}
+{
+ "# label-style: default" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/Carpet/CarpetWeb/publications/html-nr.bst b/Carpet/CarpetWeb/publications/html-nr.bst new file mode 100644 index 000000000..2adebb502 --- /dev/null +++ b/Carpet/CarpetWeb/publications/html-nr.bst @@ -0,0 +1,1313 @@ + % $Id: html-btxbst.doc 1.4 2005/09/04 13:27:21 dds Exp $
+ %
+ % This file is either "html-btxbst.doc" or was derived from
+ % "html-btxbst.doc" using cpp. "html-btxbst.doc" itself was edited
+ % from "btxbst.doc" and "named.bst".
+ % The following copyright information is from btxbst.doc:
+ % version 0.99b for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+ % "named" style (sorted keys of the form [name, year])
+ % Some code for this was taken from "named.bst".
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ dvi
+ html
+ keywords
+ pdf
+ postscript
+ url
+ doi
+ mailto
+ }
+ {}
+ { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ author empty$
+ { editor empty$
+ { organization empty$
+ 'skip$
+ { "<!-- Authors: " organization purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " editor purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " author purify$ * " -->" * write$ newline$ }
+ if$
+ keywords empty$
+ 'skip$
+ { "<!-- Keywords: " keywords * " -->" * write$ newline$ }
+ if$
+ "<dt><a name=" quote$ * cite$ * quote$ * ">[" * label * "]</a></dt><dd>" * write$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ postscript empty$
+ 'skip$
+ { newline$ "<!-- PostScript: " postscript * " -->" * write$ }
+ if$
+ pdf empty$
+ 'skip$
+ { newline$ "<!-- PDF: " pdf * " -->" * write$ }
+ if$
+ dvi empty$
+ 'skip$
+ { newline$ "<!-- DVI: " dvi * " -->" * write$ }
+ if$
+ doi empty$
+ 'skip$
+ { newline$ "<!-- DOI: " doi * " -->" * write$ }
+ if$
+ "</dd>" write$
+ newline$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {str.to.int}
+{
+ 's :=
+ #0
+ { s empty$ not }
+ { % Multiply the number on the top of the stack by 10 = 1010 binary
+ duplicate$ + % x2
+ duplicate$ % x2 x2
+ duplicate$ + duplicate$ + % x2 x8
+ +
+ s #1 #1 substring$ chr.to.int$ #48 - + % #48 is ascii for '0'
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "<cite>" swap$ * "</cite>" * }
+ if$
+}
+
+FUNCTION {add.link} % title
+{
+ 't :=
+ t empty$
+ { "" }
+ { url empty$
+ { html empty$
+ { t }
+ { "<a href=" quote$ * html * quote$ * ">" * t * "</a>" * }
+ if$ }
+ { "<a href=" quote$ * url * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {add.mailto} % authors
+{
+ 't :=
+ t empty$
+ { "" }
+ { mailto empty$
+ { t }
+ { "<a href=" quote$ * "mailto:" * mailto * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+ add.mailto
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+ add.link
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+ add.link
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "<cite>" * journal * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ "<a href=" * quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "<cite>" * series * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "<cite>" * booktitle * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+
+FUNCTION {format.lab.names}
+{ 's :=
+ s num.names$ 'numnames :=
+ numnames #1 =
+ { s #1 "{vv }{ll}" format.name$ }
+ { numnames #2 =
+ { s #1 "{vv }{ll }and " format.name$ s #2 "{vv }{ll}" format.name$ * }
+ { s #1 "{vv }{ll }" format.name$ "et~al." * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+ year empty$
+ 'skip$
+ { ", " * }
+ if$
+ year field.or.null purify$ * % CHANGED - pfps - 15 Feb 1989
+ 'label :=
+ year field.or.null purify$
+ str.to.int #9999 swap$ - int.to.str$
+ * sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et al." * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ calc.label
+ sort.label
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ *
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label extra.label * 'label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {begin.bib}
+{
+ "# label-style: default" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/Carpet/CarpetWeb/publications/html-u.bst b/Carpet/CarpetWeb/publications/html-u.bst new file mode 100644 index 000000000..59934c81b --- /dev/null +++ b/Carpet/CarpetWeb/publications/html-u.bst @@ -0,0 +1,1043 @@ + % $Id: html-btxbst.doc 1.4 2005/09/04 13:27:21 dds Exp $
+ %
+ % This file is either "html-btxbst.doc" or was derived from
+ % "html-btxbst.doc" using cpp. "html-btxbst.doc" itself was edited
+ % from "btxbst.doc" and "named.bst".
+ % The following copyright information is from btxbst.doc:
+ % version 0.99b for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+
+ENTRY
+ { address
+ author
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ type
+ volume
+ year
+ dvi
+ html
+ keywords
+ pdf
+ postscript
+ url
+ doi
+ mailto
+ }
+ {}
+ { label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.bibitem}
+{ newline$
+ author empty$
+ { editor empty$
+ { organization empty$
+ 'skip$
+ { "<!-- Authors: " organization purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " editor purify$ * " -->" * write$ newline$ }
+ if$
+ }
+ { "<!-- Authors: " author purify$ * " -->" * write$ newline$ }
+ if$
+ keywords empty$
+ 'skip$
+ { "<!-- Keywords: " keywords * " -->" * write$ newline$ }
+ if$
+ "<dt><a name=" quote$ * cite$ * quote$ * ">[" * label * "]</a></dt><dd>" * write$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ postscript empty$
+ 'skip$
+ { newline$ "<!-- PostScript: " postscript * " -->" * write$ }
+ if$
+ pdf empty$
+ 'skip$
+ { newline$ "<!-- PDF: " pdf * " -->" * write$ }
+ if$
+ dvi empty$
+ 'skip$
+ { newline$ "<!-- DVI: " dvi * " -->" * write$ }
+ if$
+ doi empty$
+ 'skip$
+ { newline$ "<!-- DOI: " doi * " -->" * write$ }
+ if$
+ "</dd>" write$
+ newline$
+ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {str.to.int}
+{
+ 's :=
+ #0
+ { s empty$ not }
+ { % Multiply the number on the top of the stack by 10 = 1010 binary
+ duplicate$ + % x2
+ duplicate$ % x2 x2
+ duplicate$ + duplicate$ + % x2 x8
+ +
+ s #1 #1 substring$ chr.to.int$ #48 - + % #48 is ascii for '0'
+ s #2 global.max$ substring$ 's :=
+ }
+ while$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "<cite>" swap$ * "</cite>" * }
+ if$
+}
+
+FUNCTION {add.link} % title
+{
+ 't :=
+ t empty$
+ { "" }
+ { url empty$
+ { html empty$
+ { t }
+ { "<a href=" quote$ * html * quote$ * ">" * t * "</a>" * }
+ if$ }
+ { "<a href=" quote$ * url * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {add.mailto} % authors
+{
+ 't :=
+ t empty$
+ { "" }
+ { mailto empty$
+ { t }
+ { "<a href=" quote$ * "mailto:" * mailto * quote$ * ">" * t * "</a>" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et~al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+ add.mailto
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+ add.link
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.btitle}
+{ title emphasize
+ add.link
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "<cite>" * journal * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et~al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et~al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ "<a href=" * quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "<cite>" * series * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{
+ "In <a href=" quote$ * "#" * crossref * quote$ * ">" *
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "<cite>" * booktitle * "</cite>" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ "</a> \citelabel{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+STRINGS { longest.label }
+
+INTEGERS { number.label longest.label.width }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #1 'number.label :=
+ #0 'longest.label.width :=
+}
+
+FUNCTION {longest.label.pass}
+{ number.label int.to.str$ 'label :=
+ number.label #1 + 'number.label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {longest.label.pass}
+
+FUNCTION {begin.bib}
+{
+ "# label-style: numbered" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+}
+
+EXECUTE {end.bib}
diff --git a/Carpet/CarpetWeb/publications/old/background.tex b/Carpet/CarpetWeb/publications/old/background.tex new file mode 100644 index 000000000..764c6fb52 --- /dev/null +++ b/Carpet/CarpetWeb/publications/old/background.tex @@ -0,0 +1,18 @@ +\documentclass{revtex4} + +\usepackage[english]{babel} +\usepackage[T1]{fontenc} +\usepackage[latin9]{inputenc} +\usepackage{mathpazo} + +\begin{document} + +\nocite{Carpet-Goodale2002a} +\nocite{Carpet-Schnetter2003a} +\nocite{Carpet-cactusweb} +\nocite{Carpet-carpetweb} + +\bibliographystyle{apsrev-titles-manyauthors} +\bibliography{publications} + +\end{document} diff --git a/Carpet/CarpetWeb/publications/old/refereed.tex b/Carpet/CarpetWeb/publications/old/refereed.tex new file mode 100644 index 000000000..dbcee5757 --- /dev/null +++ b/Carpet/CarpetWeb/publications/old/refereed.tex @@ -0,0 +1,78 @@ +\documentclass{revtex4} + +\usepackage[english]{babel} +\usepackage[T1]{fontenc} +\usepackage[latin9]{inputenc} +\usepackage{mathpazo} + +\begin{document} + +% Refereed publications are sorted by their "received" date + +% 2003 +\nocite{Carpet-Schnetter2003a} % 2003-10-07 + +% 2004 +\nocite{Carpet-Baiotti2004a} % 2004-10-12 + +% 2005 +\nocite{Carpet-Zink2005a} % 2005-02-11 +\nocite{Carpet-Sperhake2005a} % 2005-03-16 +\nocite{Carpet-Diener2005a} % 2005-12-21 +\nocite{Carpet-Diener2005b} % 2005-12-22 + +% 2006 +\nocite{Carpet-Schnetter2006a} +\nocite{Carpet-Sopuerta2006a} +\nocite{Carpet-Schnetter2006b} +\nocite{Carpet-Loeffler2006a} +\nocite{Carpet-Sperhake2006a} +\nocite{Carpet-Dorband2006a} +\nocite{Carpet-Baiotti2006a} +\nocite{Carpet-Ott2006a} +\nocite{Carpet-Reisswig2006a} +\nocite{Carpet-Bruegmann2006a} +\nocite{Carpet-Zink2006a} +\nocite{Carpet-Ott2006b} +\nocite{Carpet-Baiotti2006b} +\nocite{Carept-Pazos2006a} +\nocite{Carpet-Szilagyi2006a} +\nocite{Carpet-Baker2006a} + +% 2007 +\nocite{Carpet-Herrmann2007a} +\nocite{Carpet-Giacomazzo2007a} +\nocite{Carpet-Marronetti2007a} +\nocite{Carpet-Herrmann2007b} +\nocite{Carpet-Koppitz2007a} +\nocite{Carpet-Campanelli2007a} +\nocite{Carpet-Gonzalez2007a} +\nocite{Carpet-Campanelli2007b} +\nocite{Carpet-Thornburg2007a} +\nocite{Carpet-Ajith2007a} +\nocite{Carpet-Vaishnav2007a} +\nocite{Carpet-Herrmann2007c} +\nocite{Carpet-Krishnan2007a} +\nocite{Carpet-Brown2007a} % 2007-07-20 +\nocite{Carpet-Bruegmann2007a} % 2007-08-07 +\nocite{Carpet-Rezzolla2007a} % 2007-08-29 +\nocite{Carpet-Lousto2007a} % 2007-08-30 +\nocite{Carpet-Pollney207a} % 2007-09-06 +\nocite{CarpetResult-Buonanno2007a} % 2007-09-25 +\nocite{Carpet-Campanelli2007c} % 2007-10-03 +\nocite{Carpet-Ajith2007b} % 2007-10-15 +\nocite{Carpet-Rezzolla2007b} +\nocite{CarpetResult-Boyle2007a} +\nocite{Carpet-Berti2007a} +\nocite{Carpet-Zink2007a} +\nocite{Carpet-Shoemaker2007a} + +% 2008 +\nocite{CarpetResult-Benger2007a} + + + +\bibliographystyle{apsrev-titles-manyauthors} +\bibliography{publications} + +\end{document} diff --git a/Carpet/CarpetWeb/publications/old/reports.tex b/Carpet/CarpetWeb/publications/old/reports.tex new file mode 100644 index 000000000..43efe7f70 --- /dev/null +++ b/Carpet/CarpetWeb/publications/old/reports.tex @@ -0,0 +1,39 @@ +\documentclass{revtex4} + +\usepackage[english]{babel} +\usepackage[T1]{fontenc} +\usepackage[latin9]{inputenc} +\usepackage{mathpazo} + +\begin{document} + +% Preprints are sorted by their date + +% 2005 +\nocite{Carpet-Zink2005b} % 2005-12-15 + +% 2006 +\nocite{Carpet-Zink2006c} % 2006-06-29 +\nocite{Carpet-Sperhake2006b} % 2006-07-23 +\nocite{Carpet-Zink2006b} % 2006-07-23 +\nocite{Carpet-Baiotti2006c} % 2006-09-04 +\nocite{Carpet-Sperhake2006c} % 2006-09-04 +\nocite{CarpetResult-Font2006a} % 2006-09-04 + +% 2007 +\nocite{CarpetResult-Baker2007a} % 2007-04-23 +\nocite{Carpet-Schnetter2007a} % 2007-07-11 (book chapter) +\nocite{Carpet-Stark2007a} % 2007-09-09 + +% 2008 + +% 2009 +\nocite{CarpetResult-Hannam2008a} % 2009-01-20 +\nocite{CarpetResult-Nakano2008a} % 2009-01-24 + + + +\bibliographystyle{apsrev-titles-manyauthors} +\bibliography{publications} + +\end{document} diff --git a/Carpet/CarpetWeb/publications/publications.html b/Carpet/CarpetWeb/publications/publications.html new file mode 100644 index 000000000..6e9a9e2aa --- /dev/null +++ b/Carpet/CarpetWeb/publications/publications.html @@ -0,0 +1,1251 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>Publications using Carpet</title> + </head> + + <body> + + <h1 align="center">Publications using Carpet</h1> + + <h2>How to cite Carpet</h2> + + <p> + Thank you for using Carpet. When you write a publication using + data produced with the help of Cactus or Carpet, consider citing + the following if appropriate: + </p> + +<!-- BEGIN BIBLIOGRAPHY citations-background --> +<!-- + DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY! + YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED! +--> +<!-- Generated by: ./bib2xhtml -s unsortlist -u citations-background.aux publications.html --> +<ol class="bib2xhtml"> + +<!-- Authors: Tom Goodale and Gabrielle Allen and Gerd Lanfermann and Joan + Masso and Thomas Radke and Edward Seidel and John Shalf --> +<li><a name="carpet-goodale2002a">Tom</a> Goodale, Gabrielle Allen, + Gerd Lanfermann, Joan Massó, Thomas Radke, Edward Seidel, and John Shalf. +<a href="http://edoc.mpg.de/3341">The Cactus framework and toolkit: Design + and applications</a>. +In <cite>Vector and Parallel Processing – VECPAR'2002, 5th International + Conference, Lecture Notes in Computer Science</cite>, Berlin, 2003. + Springer.</li> + +<!-- Authors: Erik Schnetter and Peter Diener and Ernst Nils Dorband and Manuel + Tiglio --> +<li><a name="carpet-schnetter2006a">Erik</a> Schnetter, Peter + Diener, Ernst Nils Dorband, and Manuel Tiglio. +<a href="http://arxiv.org/abs/gr-qc/0602104">A multi-block infrastructure for + three-dimensional time-dependent numerical relativity</a>. +<cite>Class. Quantum Grav.</cite>, 23:S553–S578, 2006. +(<a href="http://dx.doi.org/10.1088/0264-9381/23/16/S14">doi:10.1088/0264-9381/23/16/S14</a>)</li> + +<!-- Authors: Erik Schnetter and Scott H Hawley and Ian Hawke --> +<li><a name="carpet-schnetter2003a">Erik</a> Schnetter, Scott H. + Hawley, and Ian Hawke. +<a href="http://arxiv.org/abs/gr-qc/0310042">Evolutions in 3d numerical + relativity using fixed mesh refinement</a>. +<cite>Class. Quantum Grav.</cite>, 21:1465–1488, 2004. +(<a href="http://dx.doi.org/10.1088/0264-9381/21/6/014">doi:10.1088/0264-9381/21/6/014</a>)</li> + +</ol> + +<!-- END BIBLIOGRAPHY citations-background --> +<!-- BEGIN BIBLIOGRAPHY citations-webpage --> +<!-- + DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY! + YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED! +--> +<!-- Generated by: ./bib2xhtml -s unsortlist -u citations-webpage.aux publications.html --> +<ol class="bib2xhtml"> + +<li><a name="carpet-carpetweb" + href="http://www.carpetcode.org/">Mesh refinement with Carpet</a>.</li> + +<li><a name="carpet-cactusweb" + href="http://www.cactuscode.org/">Cactus Computational + Toolkit</a>.</li> + +</ol> + +<!-- END BIBLIOGRAPHY citations-webpage --> + <p> + <a href="http://www.citebase.org/">Citebase</a> collects + statistics about citations + of <a href="http:www.arXiv.org/">arXiv.org</a> eprints. Its + entry for the + original <a href="http://www.citebase.org/abstract?id=oai%3AarXiv.org%3Agr-qc%2F0310042">Carpet + paper</a> lists other eprints which refer to it or are co-cited + with it. + </p> + + <p> + Please tell us if you have written a publication or a thesis + using Carpet. This list of publications is also available + as <a href="carpet-publications.pdf">pdf</a> + or <a href="carpet-publications.bib">bibtex file</a>. + </p> + + <hr /> + + <h2>Publications in refereed journals</h2> + +<!-- BEGIN BIBLIOGRAPHY citations-refereed --> +<!-- + DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY! + YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED! +--> +<!-- Generated by: ./bib2xhtml -s unsortlist -u citations-refereed.aux publications.html --> +<ol class="bib2xhtml"> + +<!-- Authors: Benjamin Aylott and John G Baker and William D Boggs and Michael + Boyle and Patrick R Brady and Duncan A Brown and Bernd Brugmann and Luisa T + Buchman and Alessandra Buonanno and Laura Cadonati and Jordan Camp and + Manuela Campanelli and Joan Centrella and Shourov Chatterji and Nelson + Christensen and Tony Chu and Peter Diener and Nils Dorband and Zachariah B + Etienne and Joshua Faber and Stephen Fairhurst and Benjamin Farr and + Sebastian Fischetti and Gianluca Guidi and Lisa M Goggin and Mark Hannam and + Frank Herrmann and Ian Hinder and Sascha Husa and Vicky Kalogera and Drew + Keppel and Lawrence E Kidder and Bernard J Kelly and Badri Krishnan and Pablo + Laguna and Carlos O Lousto and Ilya Mandel and Pedro Marronetti and Richard + Matzner and Sean T McWilliams and Keith D Matthews and R Adam Mercer and + Satyanarayan R P Mohapatra and Abdul H Mroue and Hiroyuki Nakano and Evan + Ochsner and Yi Pan and Larne Pekowsky and Harald P Pfeiffer and Denis Pollney + and Frans Pretorius and Vivien Raymond and Christian Reisswig and Luciano + Rezzolla and Oliver Rinne and Craig Robinson and Christian Rover and Lucia + Santamaria and Bangalore Sathyaprakash and Mark A Scheel and Erik Schnetter + and Jennifer Seiler and Stuart L Shapiro and Deirdre Shoemaker and Ulrich + Sperhake and Alexander Stroeer and Riccardo Sturani and Wolfgang Tichy and + Yuk Tung Liu and Marc van der Sluys and James R van Meter and Ruslan Vaulin + and Alberto Vecchio and John Veitch and Andrea Vicere and John T Whelan and + Yosef Zlochower --> +<li><a name="carpet-cadonati2009a">Benjamin</a> Aylott, John G. + Baker, William D. Boggs, Michael Boyle, Patrick R. Brady, Duncan A. Brown, + Bernd Brügmann, Luisa T. Buchman, Alessandra Buonanno, Laura Cadonati, + Jordan Camp, Manuela Campanelli, Joan Centrella, Shourov Chatterji, Nelson + Christensen, Tony Chu, Peter Diener, Nils Dorband, Zachariah B. Etienne, + Joshua Faber, Stephen Fairhurst, Benjamin Farr, Sebastian Fischetti, Gianluca + Guidi, Lisa M. Goggin, Mark Hannam, Frank Herrmann, Ian Hinder, Sascha Husa, + Vicky Kalogera, Drew Keppel, Lawrence E. Kidder, Bernard J. Kelly, Badri + Krishnan, Pablo Laguna, Carlos O. Lousto, Ilya Mandel, Pedro Marronetti, + Richard Matzner, Sean T. McWilliams, Keith D. Matthews, R. Adam Mercer, + Satyanarayan R. P. Mohapatra, Abdul H. Mroué, Hiroyuki Nakano, Evan + Ochsner, Yi Pan, Larne Pekowsky, Harald P. Pfeiffer, Denis Pollney, Frans + Pretorius, Vivien Raymond, Christian Reisswig, Luciano Rezzolla, Oliver + Rinne, Craig Robinson, Christian Röver, LucÃa SantamarÃa, + Bangalore Sathyaprakash, Mark A. Scheel, Erik Schnetter, Jennifer Seiler, + Stuart L. Shapiro, Deirdre Shoemaker, Ulrich Sperhake, Alexander Stroeer, + Riccardo Sturani, Wolfgang Tichy, Yuk Tung Liu, Marc van der Sluys, James R. + van Meter, Ruslan Vaulin, Alberto Vecchio, John Veitch, Andrea Viceré, + John T. Whelan, and Yosef Zlochower. +<a href="http://arxiv.org/abs/0905.4227">Status of NINJA: the Numerical + INJection Analysis project</a>. +<cite>Class. Quantum Grav.</cite>, 26:114008, 2009. +(<a href="http://dx.doi.org/10.1088/0264-9381/26/11/114008">doi:10.1088/0264-9381/26/11/114008</a>)</li> + +<!-- Authors: Luca Baiotti and Bruno Giacomazzo and Luciano Rezzolla --> +<li><a name="carpet-baiotti2009a">Luca</a> Baiotti, Bruno + Giacomazzo, and Luciano Rezzolla. +<a href="http://arxiv.org/abs/0901.4955">Accurate evolutions of inspiralling + neutron-star binaries: assessment of the truncation error</a>. +<cite>Class. Quantum Grav.</cite>, 26:114005, 2009. +(<a href="http://dx.doi.org/10.1088/0264-9381/26/11/114005">doi:10.1088/0264-9381/26/11/114005</a>)</li> + +<!-- Authors: Benjamin Aylott and John G Baker and William D Boggs and Michael + Boyle and Patrick R Brady and Duncan A Brown and Bernd Brugmann and Luisa T + Buchman and Alessandra Buonanno and Laura Cadonati and Jordan Camp and + Manuela Campanelli and Joan Centrella and Shourov Chatterji and Nelson + Christensen and Tony Chu and Peter Diener and Nils Dorband and Zachariah B + Etienne and Joshua Faber and Stephen Fairhurst and Benjamin Farr and + Sebastian Fischetti and Gianluca Guidi and Lisa M Goggin and Mark Hannam and + Frank Herrmann and Ian Hinder and Sascha Husa and Vicky Kalogera and Drew + Keppel and Lawrence E Kidder and Bernard J Kelly and Badri Krishnan and Pablo + Laguna and Carlos O Lousto and Ilya Mandel and Pedro Marronetti and Richard + Matzner and Sean T McWilliams and Keith D Matthews and R Adam Mercer and + Satyanarayan R P Mohapatra and Abdul H Mroue and Hiroyuki Nakano and Evan + Ochsner and Yi Pan and Larne Pekowsky and Harald P Pfeiffer and Denis Pollney + and Frans Pretorius and Vivien Raymond and Christian Reisswig and Luciano + Rezzolla and Oliver Rinne and Craig Robinson and Christian Rover and Lucia + Santamaria and Bangalore Sathyaprakash and Mark A Scheel and Erik Schnetter + and Jennifer Seiler and Stuart L Shapiro and Deirdre Shoemaker and Ulrich + Sperhake and Alexander Stroeer and Riccardo Sturani and Wolfgang Tichy and + Yuk Tung Liu and Marc van der Sluys and James R van Meter and Ruslan Vaulin + and Alberto Vecchio and John Veitch and Andrea Vicere and John T Whelan and + Yosef Zlochower --> +<li><a name="carpet-aylott2009a">Benjamin</a> Aylott, John G. + Baker, William D. Boggs, Michael Boyle, Patrick R. Brady, Duncan A. Brown, + Bernd Brügmann, Luisa T. Buchman, Alessandra Buonanno, Laura Cadonati, + Jordan Camp, Manuela Campanelli, Joan Centrella, Shourov Chatterji, Nelson + Christensen, Tony Chu, Peter Diener, Nils Dorband, Zachariah B. Etienne, + Joshua Faber, Stephen Fairhurst, Benjamin Farr, Sebastian Fischetti, Gianluca + Guidi, Lisa M. Goggin, Mark Hannam, Frank Herrmann, Ian Hinder, Sascha Husa, + Vicky Kalogera, Drew Keppel, Lawrence E. Kidder, Bernard J. Kelly, Badri + Krishnan, Pablo Laguna, Carlos O. Lousto, Ilya Mandel, Pedro Marronetti, + Richard Matzner, Sean T. McWilliams, Keith D. Matthews, R. Adam Mercer, + Satyanarayan R. P. Mohapatra, Abdul H. Mroué, Hiroyuki Nakano, Evan + Ochsner, Yi Pan, Larne Pekowsky, Harald P. Pfeiffer, Denis Pollney, Frans + Pretorius, Vivien Raymond, Christian Reisswig, Luciano Rezzolla, Oliver + Rinne, Craig Robinson, Christian Röver, LucÃa SantamarÃa, + Bangalore Sathyaprakash, Mark A. Scheel, Erik Schnetter, Jennifer Seiler, + Stuart L. Shapiro, Deirdre Shoemaker, Ulrich Sperhake, Alexander Stroeer, + Riccardo Sturani, Wolfgang Tichy, Yuk Tung Liu, Marc van der Sluys, James R. + van Meter, Ruslan Vaulin, Alberto Vecchio, John Veitch, Andrea Viceré, + John T. Whelan, and Yosef Zlochower. +<a href="http://arxiv.org/abs/0901.4399">Testing gravitational-wave searches + with numerical relativity waveforms: Results from the first Numerical + INJection Analysis (NINJA) project</a>. +<cite>Class. Quantum Grav.</cite>, 26:165008, 2009. +(<a href="http://dx.doi.org/10.1088/0264-9381/26/16/165008">doi:10.1088/0264-9381/26/16/165008</a>)</li> + +<!-- Authors: Mark Hannam and Sascha Husa and John G Baker and Michael Boyle + and Bernd Brugmann and Tony Chu and Nils Dorband and Frank Herrmann and Ian + Hinder and Bernard J Kelly and Lawrence E Kidder and Pablo Laguna and Keith D + Matthews and James R van Meter and Harald P Pfeiffer and Denis Pollney and + Christian Reisswig and Mark A Scheel and Deirdre Shoemaker --> +<li><a name="carpetresult-hannam2008a">Mark</a> Hannam, Sascha + Husa, John G. Baker, Michael Boyle, Bernd Brügmann, Tony Chu, Nils + Dorband, Frank Herrmann, Ian Hinder, Bernard J. Kelly, Lawrence E. Kidder, + Pablo Laguna, Keith D. Matthews, James R. van Meter, Harald P. Pfeiffer, + Denis Pollney, Christian Reisswig, Mark A. Scheel, and Deirdre Shoemaker. +<a href="http://arxiv.org/abs/0901.2437">The Samurai project: verifying the + consistency of black-hole-binary waveforms for gravitational-wave + detection</a>. +<cite>Phys. Rev. D</cite>, 79:084025, 2009. +(<a href="http://dx.doi.org/10.1103/PhysRevD.79.084025">doi:10.1103/PhysRevD.79.084025</a>)</li> + +<!-- Authors: Luciano Rezzolla --> +<li><a name="carpet-rezzolla2008a">Luciano</a> Rezzolla. +<a href="http://arxiv.org/abs/0812.2325">Modelling the final state from binary + black-hole coalescences</a>. +<cite>Class. Quantum Grav.</cite>, 26:094023, 2009. +(<a href="http://dx.doi.org/10.1088/0264-9381/26/9/094023">doi:10.1088/0264-9381/26/9/094023</a>)</li> + +<!-- Authors: Zachariah B Etienne and Yuk Tung Liu and Stuart L Shapiro and and + Thomas W Baumgarte --> +<li><a name="carpet-etienne2008a">Zachariah</a> B. Etienne, + Yuk Tung Liu, Stuart L. Shapiro, , and Thomas W. Baumgarte. +<a href="http://arxiv.org/abs/0812.2245">General relativistic simulations of + black-hole-neutron-star mergers: Effects of black-hole spin</a>. +<cite>Phys. Rev. D</cite>, 79:044024, 2009. +(<a href="http://dx.doi.org/10.1103/PhysRevD.79.044024">doi:10.1103/PhysRevD.79.044024</a>)</li> + +<!-- Authors: Manuela Campanelli and Carlos O Lousto and Yosef Zlochower --> +<li><a name="carpet-campanelli2008b">Manuela</a> Campanelli, + Carlos O. Lousto, and Yosef Zlochower. +<a href="http://arxiv.org/abs/0811.3006">Algebraic classification of numerical + spacetimes and black-hole-binary remnants</a>. +<cite>Phys. Rev. D</cite>, 79:084012, 2009. +(<a href="http://dx.doi.org/10.1103/PhysRevD.79.084012">doi:10.1103/PhysRevD.79.084012</a>)</li> + +<!-- Authors: Oleg Korobkin and Burak Aksoylu and Michael Holst and Enrique + Pazos and Manuel Tiglio --> +<li><a name="carpet-korobkin2008a">Oleg</a> Korobkin, Burak + Aksoylu, Michael Holst, Enrique Pazos, and Manuel Tiglio. +<a href="http://arxiv.org/abs/0801.1823">Solving the einstein constraint + equations on multi-block triangulations using finite element methods</a>. +<cite>Class. Quantum Grav.</cite>, 26:145007, 2009. +(<a href="http://dx.doi.org/10.1088/0264-9381/26/14/145007">doi:10.1088/0264-9381/26/14/145007</a>)</li> + +<!-- Authors: David Brown and Peter Diener and Olivier Sarbach and Erik + Schnetter and Manuel Tiglio --> +<li><a name="carpet-brown2007b">David</a> Brown, Peter Diener, + Olivier Sarbach, Erik Schnetter, and Manuel Tiglio. +<a href="http://arxiv.org/abs/0809.3533">Turduckening black holes: an + analytical and computational study</a>. +<cite>Phys. Rev. D</cite>, 79:044023, 2009. +(<a href="http://dx.doi.org/10.1103/PhysRevD.79.044023">doi:10.1103/PhysRevD.79.044023</a>)</li> + +<!-- Authors: Luca Baiotti and Sebastiano Bernuzzi and Giovanni Corvino and + Roberto De Pietri and Alessandro Nagar --> +<li><a name="carpet-baiotti2008b">Luca</a> Baiotti, Sebastiano + Bernuzzi, Giovanni Corvino, Roberto De Pietri, and Alessandro Nagar. +<a href="http://arxiv.org/abs/0808.4002">Gravitational-wave extraction from + neutron-star oscillations: Comparing linear and nonlinear techniques</a>. +<cite>Phys. Rev. D</cite>, 79:024002, 2009. +(<a href="http://dx.doi.org/10.1103/PhysRevD.79.024002">doi:10.1103/PhysRevD.79.024002</a>)</li> + +<!-- Authors: Manuela Campanelli and Carlos O Lousto and Hiroyuki Nakano and + Yosef Zlochower --> +<li><a name="carpet-campanelli2008a">Manuela</a> Campanelli, + Carlos O. Lousto, Hiroyuki Nakano, and Yosef Zlochower. +<a href="http://arxiv.org/abs/0808.0713">Comparison of numerical and + post-Newtonian waveforms for generic precessing black-hole binaries</a>. +<cite>Phys. Rev. D</cite>, 79:084010, 2009. +(<a href="http://dx.doi.org/10.1103/PhysRevD.79.084010">doi:10.1103/PhysRevD.79.084010</a>)</li> + +<!-- Authors: James Healy and Frank Herrmann and Ian Hinder and Deirdre M + Shoemaker and Pablo Laguna and and Richard A Matzner --> +<li><a name="carpet-healy2008a">James</a> Healy, Frank Herrmann, + Ian Hinder, Deirdre M. Shoemaker, Pablo Laguna, , and Richard A. Matzner. +<a href="http://arxiv.org/abs/0807.3292">Superkicks in hyperbolic encounters of + binary black holes</a>. +<cite>Phys. Rev. Lett.</cite>, 102:041101, 2009. +(<a href="http://dx.doi.org/10.1103/PhysRevLett.102.041101">doi:10.1103/PhysRevLett.102.041101</a>)</li> + +<!-- Authors: Ulrich Sperhake and Vitor Cardoso and Frans Pretorius and + Emanuele Berti and and Jose A Gonzalez --> +<li><a name="carpet-sperhake2008a">Ulrich</a> Sperhake, Vitor + Cardoso, Frans Pretorius, Emanuele Berti, , and José A. González. +<a href="http://arxiv.org/abs/0806.1738">High-energy collision of two black + holes</a>. +<cite>Phys. Rev. Lett.</cite>, 101:161101, 2008. +(<a href="http://dx.doi.org/10.1103/PhysRevLett.101.161101">doi:10.1103/PhysRevLett.101.161101</a>)</li> + +<!-- Authors: Leonardo Gualtieri and Emanuele Berti and Vitor Cardoso and + Ulrich Sperhake --> +<li><a name="carpet-gualtieri2008a">Leonardo</a> Gualtieri, + Emanuele Berti, Vitor Cardoso, and Ulrich Sperhake. +<a href="http://arxiv.org/abs/0805.1017">Transformation of the multipolar + components of gravitational radiation under rotations and boosts</a>. +<cite>Phys. Rev. D</cite>, 78:044024, 2008. +(<a href="http://dx.doi.org/10.1103/PhysRevD.78.044024">doi:10.1103/PhysRevD.78.044024</a>)</li> + +<!-- Authors: Carlos O Lousto and Yosef Zlochower --> +<li><a name="carpet-lousto2008a">Carlos</a> O. Lousto and Yosef + Zlochower. +<a href="http://arxiv.org/abs/0805.0159">Modeling gravitational recoil from + precessing highly-spinning unequal-mass black-hole binaries</a>. +<cite>Phys. Rev. D</cite>, 79:064018, 2009. +(<a href="http://dx.doi.org/10.1103/PhysRevD.79.064018">doi:10.1103/PhysRevD.79.064018</a>)</li> + +<!-- Authors: Werner Benger --> +<li><a name="carpetresult-benger2007a">Werner</a> Benger. +<a href="http://www.iop.org/EJ/abstract/1367-2630/10/12/125004">Colliding + galaxies, rotating neutron stars and merging black holes – visualizing high + dimensional datasets on arbitrary meshes</a>. +<cite>New J. Phys.</cite>, 10:125004, 2008. +(<a href="http://dx.doi.org/10.1088/1367-2630/10/12/125004">doi:10.1088/1367-2630/10/12/125004</a>)</li> + +<!-- Authors: Luca Baiotti and Bruno Giacomazzo and Luciano Rezzolla --> +<li><a name="carpet-baiotti2008a">Luca</a> Baiotti, Bruno + Giacomazzo, and Luciano Rezzolla. +<a href="http://arxiv.org/abs/0804.0594">Accurate evolutions of inspiralling + neutron-star binaries: Prompt and delayed collapse to a black hole</a>. +<cite>Phys. Rev. D</cite>, 78:084033, 2008. +(<a href="http://dx.doi.org/10.1103/PhysRevD.78.084033">doi:10.1103/PhysRevD.78.084033</a>)</li> + +<!-- Authors: Sergio Dain and Carlos O Lousto and and Yosef Zlochower --> +<li><a name="carpet-dain2008a">Sergio</a> Dain, Carlos O. Lousto, + , and Yosef Zlochower. +<a href="http://arxiv.org/abs/0803.0351">Extra-large remnant recoil velocities + and spins from near-extremal-Bowen-York-spin black-hole binaries</a>. +<cite>Phys. Rev. D</cite>, 78:024039, 2008. +(<a href="http://dx.doi.org/10.1103/PhysRevD.78.024039">doi:10.1103/PhysRevD.78.024039</a>)</li> + +<!-- Authors: Jennifer Seiler and Bela Szilagyi and Denis Pollney and Luciano + Rezzolla --> +<li><a name="carpet-seiler2008a">Jennifer</a> Seiler, Béla + Szilágyi, Denis Pollney, and Luciano Rezzolla. +<a href="http://arxiv.org/abs/0802.3341">Constraint-preserving boundary + treatment for a harmonic formulation of the einstein equations</a>. +<cite>Class. Quantum Grav.</cite>, 25:175020, 2008. +(<a href="http://dx.doi.org/10.1088/0264-9381/25/17/175020">doi:10.1088/0264-9381/25/17/175020</a>)</li> + +<!-- Authors: Matthew C Washik and James Healy and Frank Herrmann and Ian + Hinder and Deirdre M Shoemaker and Pablo Laguna and Richard A Matzner --> +<li><a name="carpet-washik2008a">Matthew</a> C. Washik, James + Healy, Frank Herrmann, Ian Hinder, Deirdre M. Shoemaker, Pablo Laguna, and + Richard A. Matzner. +<a href="http://arxiv.org/abs/0802.2520">Binary-black-hole encounters, + gravitational bursts, and maximum final spin</a>. +<cite>Phys. Rev. Lett.</cite>, 101:061102, 2008. +(<a href="http://dx.doi.org/10.1103/PhysRevLett.101.061102">doi:10.1103/PhysRevLett.101.061102</a>)</li> + +<!-- Authors: Eloisa Bentivegna and Deirdre M Shoemaker and Ian Hinder and and + Frank Herrmann --> +<li><a name="carpet-bentivegna2008a">Eloisa</a> Bentivegna, + Deirdre M. Shoemaker, Ian Hinder, , and Frank Herrmann. +<a href="http://arxiv.org/abs/0801.3478">Probing the binary black hole merger + regime with scalar perturbations</a>. +<cite>Phys. Rev. D</cite>, 77:124016, 2008. +(<a href="http://dx.doi.org/10.1103/PhysRevD.77.124016">doi:10.1103/PhysRevD.77.124016</a>)</li> + +<!-- Authors: Luciano Rezzolla and Enrico Barausse and Ernst Nils Dorband and + Denis Pollney and Christian Reisswig and Jennifer Seiler and Sascha Husa --> +<li><a name="carpet-rezzolla2007c">Luciano</a> Rezzolla, Enrico + Barausse, Ernst Nils Dorband, Denis Pollney, Christian Reisswig, Jennifer + Seiler, and Sascha Husa. +<a href="http://arxiv.org/abs/0712.3541">Final spin from the coalescence of two + black holes</a>. +<cite>Phys. Rev. D</cite>, 78:044002, 2008. +(<a href="http://dx.doi.org/10.1103/PhysRevD.78.044002">doi:10.1103/PhysRevD.78.044002</a>)</li> + +<!-- Authors: Thibault Damour and Alessandro Nagar and Ernst Nils Dorband and + Denis Pollney and Luciano Rezzolla --> +<li><a name="carpet-damour2007a">Thibault</a> Damour, Alessandro + Nagar, Ernst Nils Dorband, Denis Pollney, and Luciano Rezzolla. +<a href="http://arxiv.org/abs/0712.3003">Faithful effective-one-body waveforms + of equal-mass coalescing black-hole binaries</a>. +<cite>Phys. Rev. D</cite>, 77:084017, 2008. +(<a href="http://dx.doi.org/10.1103/PhysRevD.77.084017">doi:10.1103/PhysRevD.77.084017</a>)</li> + +<!-- Authors: Deirdre M Shoemaker and Birjoo Vaishnav and Ian Hinder and Frank + Herrmann --> +<li><a name="carpet-shoemaker2007a">Deirdre</a> M. Shoemaker, + Birjoo Vaishnav, Ian Hinder, and Frank Herrmann. +<a href="http://arxiv.org/abs/0802.4427">Numerical relativity meets data + analysis: spinning binary black hole case</a>. +<cite>Class. Quantum Grav.</cite>, 25:114047, 2008. +(<a href="http://dx.doi.org/10.1088/0264-9381/25/11/114047">doi:10.1088/0264-9381/25/11/114047</a>)</li> + +<!-- Authors: Burkhard Zink and Erik Schnetter and Manuel Tiglio --> +<li><a name="carpet-zink2007a">Burkhard</a> Zink, Erik Schnetter, + and Manuel Tiglio. +<a href="http://arxiv.org/abs/0712.0353">Multi-patch methods in general + relativistic astrophysics - I. Hydrodynamical flows on fixed + backgrounds</a>. +<cite>Phys. Rev. D</cite>, 77:103015, 2008. +(<a href="http://dx.doi.org/10.1103/PhysRevD.77.103015">doi:10.1103/PhysRevD.77.103015</a>)</li> + +<!-- Authors: Emanuele Berti and Vitor Cardoso and Jose A Gonzalez and Ulrich + Sperhake and Bernd Brugmann --> +<li><a name="carpet-berti2007a">Emanuele</a> Berti, Vitor Cardoso, + José A. González, Ulrich Sperhake, and Bernd Brügmann. +<a href="http://arxiv.org/abs/0711.1097">Multipolar analysis of spinning + binaries</a>. +<cite>Class. Quantum Grav.</cite>, 25:114035, 2008. +(<a href="http://dx.doi.org/10.1088/0264-9381/25/11/114035">doi:10.1088/0264-9381/25/11/114035</a>)</li> + +<!-- Authors: Tanja Bode and Deirdre Shoemaker and Frank Herrmann and Ian + Hinder --> +<li><a name="carpet-bode2007a">Tanja</a> Bode, Deirdre Shoemaker, + Frank Herrmann, and Ian Hinder. +<a href="http://arxiv.org/abs/0711.0669">Robustness of binary black hole + mergers in the presence of spurious radiation</a>. +<cite>Phys. Rev. D</cite>, 78:044027, 2008. +(<a href="http://dx.doi.org/10.1103/PhysRevD.77.044027">doi:10.1103/PhysRevD.77.044027</a>)</li> + +<!-- Authors: Ian Hinder and Birjoo Vaishnav and Frank Herrmann and Deirdre M + Shoemaker and Pablo Laguna --> +<li><a name="carpet-hinder2007a">Ian</a> Hinder, Birjoo Vaishnav, + Frank Herrmann, Deirdre M. Shoemaker, and Pablo Laguna. +<a href="http://arxiv.org/abs/0710.5167">Circularization and final spin in + eccentric binary black hole inspirals</a>. +<cite>Phys. Rev. D</cite>, 77:081502(R), 2008. +(<a href="http://dx.doi.org/10.1103/PhysRevD.77.081502">doi:10.1103/PhysRevD.77.081502</a>)</li> + +<!-- Authors: Latham Boyle and Michael Kesden and Samaya Nissanke --> +<li><a name="carpetresult-boyle2007a">Latham</a> Boyle, Michael + Kesden, and Samaya Nissanke. +<a href="http://arxiv.org/abs/0709.0299">Binary black hole merger: symmetry and + the spin expansion</a>. +<cite>Phys. Rev. Lett.</cite>, 100:151101, 2008. +(<a href="http://dx.doi.org/10.1103/PhysRevLett.100.151101">doi:10.1103/PhysRevLett.100.151101</a>)</li> + +<!-- Authors: Ulrich Sperhake and Emanuele Berti and Vitor Cardoso and Jose A + Gonzalez and Bernd Brugmann and Marcus Ansorg --> +<li><a name="carpet-sperhake2007a">Ulrich</a> Sperhake, Emanuele + Berti, Vitor Cardoso, José A. González, Bernd Brügmann, and + Marcus Ansorg. +<a href="http://arxiv.org/abs/0710.3823">Eccentric binary black-hole mergers: + The transition from inspiral to plunge in general relativity</a>. +<cite>Phys. Rev. D</cite>, 78:064069, 2008. +(<a href="http://dx.doi.org/10.1103/PhysRevD.78.064069">doi:10.1103/PhysRevD.78.064069</a>)</li> + +<!-- Authors: Luciano Rezzolla and Peter Diener and Ernst Nils Dorband and + Denis Pollney and Christian Reisswig and Erik Schnetter and Jennifer Seiler + --> +<li><a name="carpet-rezzolla2007b">Luciano</a> Rezzolla, Peter + Diener, Ernst Nils Dorband, Denis Pollney, Christian Reisswig, Erik + Schnetter, and Jennifer Seiler. +<a href="http://arxiv.org/abs/0710.3345">The final spin from the coalescence of + aligned-spin black-hole binaries</a>. +<cite>Astrophys. J. Lett.</cite>, 674:L29–L32, 2008. +(<a href="http://dx.doi.org/10.1086/528935">doi:10.1086/528935</a>)</li> + +<!-- Authors: Parameswaran Ajith and Stanislav Babak and Yanbei Chen and Martin + Hewitson and Badri Krishnan and Alicia M Sintes and John T Whelan and Bernd + Brugmann and Peter Diener and Ernst Nils Dorband and Jose Gonzalez and Mark + Hannam and Sascha Husa and Denis Pollney and Luciano Rezzolla and Lucia + Santamaria and Ulrich Sperhake and Jonathan Thornburg --> +<li><a name="carpet-ajith2007b">Parameswaran</a> Ajith, Stanislav + Babak, Yanbei Chen, Martin Hewitson, Badri Krishnan, Alicia M. Sintes, + John T. Whelan, Bernd Brügmann, Peter Diener, Ernst Nils Dorband, + José González, Mark Hannam, Sascha Husa, Denis Pollney, Luciano + Rezzolla, LucÃa SantamarÃa, Ulrich Sperhake, and Jonathan Thornburg. +<a href="http://arxiv.org/abs/0710.2335">A template bank for gravitational + waveforms from coalescing binary black holes: I. non-spinning binaries</a>. +<cite>Phys. Rev. D</cite>, 77:104017, 2008. +(<a href="http://dx.doi.org/10.1103/PhysRevD.77.104017">doi:10.1103/PhysRevD.77.104017</a>)</li> + +<!-- Authors: Manuela Campanelli and Carlos O Lousto and Yosef Zlochower --> +<li><a name="carpet-campanelli2007c">Manuela</a> Campanelli, + Carlos O. Lousto, and Yosef Zlochower. +<a href="http://arxiv.org/abs/0710.0879">Close encounters of three black + holes</a>. +<cite>Phys. Rev. D</cite>, 77:101501(5), 2008. +(<a href="http://dx.doi.org/10.1103/PhysRevD.77.101501">doi:10.1103/PhysRevD.77.101501</a>)</li> + +<!-- Authors: Alessandra Buonanno and Lawrence E Kidder and Luis Lehner --> +<li><a name="carpetresult-buonanno2007a">Alessandra</a> Buonanno, + Lawrence E. Kidder, and Luis Lehner. +<a href="http://arxiv.org/abs/0709.3839">Estimating the final spin of a binary + black hole coalescence</a>. +<cite>Phys. Rev. D</cite>, 77:026004, 2008.</li> + +<!-- Authors: Dylan Stark and Gabrielle Allen and Tom Goodale and Thomas Radke + and Erik Schnetter --> +<li><a name="carpet-stark2007a">Dylan</a> Stark, Gabrielle Allen, + Tom Goodale, Thomas Radke, and Erik Schnetter. +<a href="http://arxiv.org/abs/0705.3015">An extensible timing infrastructure + for adaptive large-scale applications</a>. +In Roman Wyrzykowski, editor, <cite>Parallel Processing and Applied + Mathematics</cite>, volume 4967 of <cite>Lecture Notes in Computer + Science</cite>, pages 1170–1179. Springer, 2008. +(<a href="http://dx.doi.org/10.1007/978-3-540-68111-3">doi:10.1007/978-3-540-68111-3</a>)</li> + +<!-- Authors: Denis Pollney and Christian Reisswig and Luciano Rezzolla and + Bela Szilagyi and Marcus Ansorg and Barrett Deris and Peter Diener and Ernst + Nils Dorband and Michael Koppitz and Alessandro Nagar and Erik Schnetter --> +<li><a name="carpet-pollney207a">Denis</a> Pollney, Christian + Reisswig, Luciano Rezzolla, Béla Szilágyi, Marcus Ansorg, Barrett + Deris, Peter Diener, Ernst Nils Dorband, Michael Koppitz, Alessandro Nagar, + and Erik Schnetter. +<a href="http://arxiv.org/abs/0707.2559">Recoil velocities from equal-mass + binary black-hole mergers: a systematic investigation of spin-orbit aligned + configurations</a>. +<cite>Phys. Rev. D</cite>, 76:124002, 2007. +(<a href="http://dx.doi.org/10.1103/PhysRevD.76.124002">doi:10.1103/PhysRevD.76.124002</a>)</li> + +<!-- Authors: Carlos O Lousto and Yosef Zlochower --> +<li><a name="carpet-lousto2007a">Carlos</a> O. Lousto and Yosef + Zlochower. +<a href="http://arxiv.org/abs/0708.4048">Further insight into gravitational + recoil</a>. +<cite>Phys. Rev. D</cite>, 77:044028, 2008. +(<a href="http://dx.doi.org/10.1103/PhysRevD.77.044028">doi:10.1103/PhysRevD.77.044028</a>)</li> + +<!-- Authors: Luciano Rezzolla and Ernst Nils Dorband and Christian Reisswig + and Peter Diener and Denis Pollney and Erik Schnetter and Bela Szilsgyi --> +<li><a name="carpet-rezzolla2007a">Luciano</a> Rezzolla, + Ernst Nils Dorband, Christian Reisswig, Peter Diener, Denis Pollney, Erik + Schnetter, and Béla SzilÅ›gyi. +<a href="http://arxiv.org/abs/0708.3999">Spin diagrams for equal-mass + black-hole binaries with aligned spins</a>. +<cite>Astrophys. J.</cite>, 679:1422–1426, 2008. +(<a href="http://dx.doi.org/10.1086/587679">doi:10.1086/587679</a>)</li> + +<!-- Authors: Bernd Brugmann and Jose A Gonzalez and Mark Hannam and Sascha + Husa and Ulrich Sperhake --> +<li><a name="carpet-bruegmann2007a">Bernd</a> Brügmann, + José A. González, Mark Hannam, Sascha Husa, and Ulrich Sperhake. +<a href="http://arxiv.org/abs/0707.0135">Exploring black hole superkicks</a>. +<cite>Phys. Rev. D</cite>, 77:124047, 2008. +(<a href="http://dx.doi.org/10.1103/PhysRevD.77.124047">doi:10.1103/PhysRevD.77.124047</a>)</li> + +<!-- Authors: David Brown and Olivier Sarbach and Erik Schnetter and Manuel + Tiglio and Peter Diener and Ian Hawke and Denis Pollney --> +<li><a name="carpet-brown2007a">David</a> Brown, Olivier Sarbach, + Erik Schnetter, Manuel Tiglio, Peter Diener, Ian Hawke, and Denis Pollney. +<a href="http://arxiv.org/abs/0707.3101">Excision without excision</a>. +<cite>Phys. Rev. D</cite>, 76:081503(R), 2007. +(<a href="http://dx.doi.org/10.1103/PhysRevD.76.081503">doi:10.1103/PhysRevD.76.081503</a>)</li> + +<!-- Authors: Badri Krishnan and Carlos O Lousto and Yosef Zlochower --> +<li><a name="carpet-krishnan2007a">Badri</a> Krishnan, Carlos O. + Lousto, and Yosef Zlochower. +<a href="http://arxiv.org/abs/0707.0876">Quasi-local linear momentum in + black-hole binaries</a>. +<cite>Phys. Rev. D</cite>, 76:081501(R), 2007. +(<a href="http://dx.doi.org/10.1103/PhysRevD.76.081501">doi:10.1103/PhysRevD.76.081501</a>)</li> + +<!-- Authors: Frank Herrmann and Ian Hinder and Deirdre M Shoemaker and Pablo + Laguna and Richard A Matzner --> +<li><a name="carpet-herrmann2007c">Frank</a> Herrmann, Ian Hinder, + Deirdre M. Shoemaker, Pablo Laguna, and Richard A. Matzner. +<a href="http://arxiv.org/abs/0706.2541">Binary black holes: Spin dynamics and + gravitational recoil</a>. +<cite>Phys. Rev. D</cite>, 76:084032, 2007. +(<a href="http://dx.doi.org/10.1103/PhysRevD.76.084032">doi:10.1103/PhysRevD.76.084032</a>)</li> + +<!-- Authors: Birjoo Vaishnav and Ian Hinder and Frank Herrmann and Deirdre M + Shoemaker --> +<li><a name="carpet-vaishnav2007a">Birjoo</a> Vaishnav, Ian + Hinder, Frank Herrmann, and Deirdre M. Shoemaker. +<a href="http://arxiv.org/abs/0705.3829">Matched filtering of numerical + relativity templates of spinning binary black holes</a>. +<cite>Phys. Rev. D</cite>, 76:084020, 2007. +(<a href="http://dx.doi.org/10.1103/PhysRevD.76.084020">doi:10.1103/PhysRevD.76.084020</a>)</li> + +<!-- Authors: Parameswaran Ajith and Stanislav Babak and Yanbei Chen and Martin + Hewitson and Badri Krishnan and John T Whelan and Bernd Brugmann and Peter + Diener and Jose González and Mark Hannam and Sascha Husa and Michael Koppitz + and Denis Pollney and Luciano Rezzolla and Lucia Santamaria and Alicia M + Sintes and Ulrich Sperhake and Jonathan Thornburg --> +<li><a name="carpet-ajith2007a">Parameswaran</a> Ajith, Stanislav + Babak, Yanbei Chen, Martin Hewitson, Badri Krishnan, John T. Whelan, Bernd + Brügmann, Peter Diener, José González, Mark Hannam, Sascha Husa, + Michael Koppitz, Denis Pollney, Luciano Rezzolla, LucÃa SantamarÃa, + Alicia M. Sintes, Ulrich Sperhake, and Jonathan Thornburg. +<a href="http://arxiv.org/abs/0704.3764">Phenomenological template family for + black-hole coalescence waveforms</a>. +<cite>Class. Quantum Grav.</cite>, 24:S689–S699, 2007. +(<a href="http://dx.doi.org/10.1088/0264-9381/24/19/S31">doi:10.1088/0264-9381/24/19/S31</a>)</li> + +<!-- Authors: Jonathan Thornburg and Peter Diener and Denis Pollney and Luciano + Rezzolla and Erik Schnetter and Ed Seidel and Ryoji Takahashi --> +<li><a name="carpet-thornburg2007a">Jonathan</a> Thornburg, Peter + Diener, Denis Pollney, Luciano Rezzolla, Erik Schnetter, Ed Seidel, and Ryoji + Takahashi. +<a href="http://arxiv.org/abs/gr-qc/0701038">Are moving punctures equivalent to + moving black holes?</a>. +<cite>Class. Quantum Grav.</cite>, 24:3911–3918, 2007. +(<a href="http://dx.doi.org/10.1088/0264-9381/24/15/009">doi:10.1088/0264-9381/24/15/009</a>)</li> + +<!-- Authors: Jose A Gonzalez and Mark D Hannam and Ulrich Sperhake and Bernd + Brugmann and Sascha Husa --> +<li><a name="carpet-gonzalez2007a">Jos</a>é A. González, + Mark D. Hannam, Ulrich Sperhake, Bernd Brügmann, and Sascha Husa. +<a href="http://arxiv.org/abs/gr-qc/0702052">Supermassive recoil velocities for + binary black-hole mergers with antialigned spins</a>. +<cite>Phys. Rev. Lett.</cite>, 98:231101, 2007. +(<a href="http://dx.doi.org/10.1103/PhysRevLett.98.231101">doi:10.1103/PhysRevLett.98.231101</a>)</li> + +<!-- Authors: Manuela Campanelli and Carlos O Lousto and Yosef Zlochower and + David Merritt --> +<li><a name="carpet-campanelli2007b">Manuela</a> Campanelli, + Carlos O. Lousto, Yosef Zlochower, and David Merritt. +<a href="http://arxiv.org/abs/gr-qc/0702133">Maximum gravitational recoil</a>. +<cite>Phys. Rev. Lett.</cite>, 98:231102, 2007. +(<a href="http://dx.doi.org/10.1103/PhysRevLett.98.231102">doi:10.1103/PhysRevLett.98.231102</a>)</li> + +<!-- Authors: Manuela Campanelli and Carlos O Lousto and Yosef Zlochower and + David Merritt --> +<li><a name="carpet-campanelli2007a">Manuela</a> Campanelli, + Carlos O. Lousto, Yosef Zlochower, and David Merritt. +Large merger recoils and spin flips from generic black-hole binaries. +<cite>Astrophys. J. Lett.</cite>, 659:L5–L8, 2007. +(<a href="http://dx.doi.org/abs/gr-qc/0701164">doi:abs/gr-qc/0701164</a>)</li> + +<!-- Authors: Frank Herrmann and Ian Hinder and Deirdre M Shoemaker and Pablo + Laguna and Richard A Matzner --> +<li><a name="carpet-herrmann2007b">Frank</a> Herrmann, Ian Hinder, + Deirdre M. Shoemaker, Pablo Laguna, and Richard A. Matzner. +<a href="http://arxiv.org/abs/gr-qc/0701143">Gravitational recoil from spinning + binary black hole mergers</a>. +<cite>Astrophys. J.</cite>, 661:430–436, 2007. +(<a href="http://dx.doi.org/10.1086/513603">doi:10.1086/513603</a>)</li> + +<!-- Authors: Michael Koppitz and Denis Pollney and Christian Reisswig and + Luciano Rezzolla and Jonathan Thornburg and Peter Diener and Erik Schnetter + --> +<li><a name="carpet-koppitz2007a">Michael</a> Koppitz, Denis + Pollney, Christian Reisswig, Luciano Rezzolla, Jonathan Thornburg, Peter + Diener, and Erik Schnetter. +<a href="http://arxiv.org/abs/gr-qc/0701163">Recoil velocities from equal-mass + binary-black-hole mergers</a>. +<cite>Phys. Rev. Lett.</cite>, 99:041102, 2007. +(<a href="http://dx.doi.org/10.1103/PhysRevLett.99.041102">doi:10.1103/PhysRevLett.99.041102</a>)</li> + +<!-- Authors: Pedro Marronetti and Wolfgang Tichy and Bernd Brugmann and Jose + Gonzalez and Mark Hannam and Sascha Husa and Ulrich Sperhake --> +<li><a name="carpet-marronetti2007a">Pedro</a> Marronetti, + Wolfgang Tichy, Bernd Brügmann, José González, Mark Hannam, + Sascha Husa, and Ulrich Sperhake. +<a href="http://arxiv.org/abs/gr-qc/0701123">Binary black holes on a budget: + simulations using workstations</a>. +<cite>Class. Quantum Grav.</cite>, 24:S45–S58, 2007. +(<a href="http://dx.doi.org/10.1088/0264-9381/24/12/S05">doi:10.1088/0264-9381/24/12/S05</a>)</li> + +<!-- Authors: Bruno Giacomazzo and Luciano Rezzolla --> +<li><a name="carpet-giacomazzo2007a">Bruno</a> Giacomazzo and + Luciano Rezzolla. +<a href="http://arxiv.org/abs/gr-qc/0701109">WhiskyMHD: a new numerical code + for general relativistic magnetohydrodynamics</a>. +<cite>Class. Quantum Grav.</cite>, 24:S235–S258, 2007. +(<a href="http://dx.doi.org/10.1088/0264-9381/24/12/S16">doi:10.1088/0264-9381/24/12/S16</a>)</li> + +<!-- Authors: Frank Herrmann and Ian Hinder and Deirdre M Shoemaker and Pablo + Laguna --> +<li><a name="carpet-herrmann2007a">Frank</a> Herrmann, Ian Hinder, + Deirdre M. Shoemaker, and Pablo Laguna. +<a href="http://arxiv.org/abs/gr-qc/0601026">Unequal mass binary black hole + plunges and gravitational recoil</a>. +<cite>Class. Quantum Grav.</cite>, 24:S33–S42, 2007. +(<a href="http://dx.doi.org/10.1088/0264-9381/24/12/S04">doi:10.1088/0264-9381/24/12/S04</a>)</li> + +<!-- Authors: John G Baker and Manuela Campanelli and Frans Pretorius and Yosef + Zlochower --> +<li><a name="carpet-baker2006a">John</a> G. Baker, Manuela + Campanelli, Frans Pretorius, and Yosef Zlochower. +<a href="http://arxiv.org/abs/gr-qc/0701016">Comparisons of binary black hole + merger waveforms</a>. +<cite>Class. Quantum Grav.</cite>, 24:S25–S31, 2007. +(<a href="http://dx.doi.org/10.1088/0264-9381/24/12/S03">doi:10.1088/0264-9381/24/12/S03</a>)</li> + +<!-- Authors: Enrique Pazos and Ernst Nils Dorband and Alessandro Nagar and + Carlos Palenzuela and Erik Schnetter and Manuel Tiglio --> +<li><a name="carept-pazos2006a">Enrique</a> Pazos, Ernst Nils + Dorband, Alessandro Nagar, Carlos Palenzuela, Erik Schnetter, and Manuel + Tiglio. +<a href="http://arxiv.org/abs/gr-qc/0612149">How far away is far enough for + extracting numerical waveforms, and how much do they depend on the extraction + method?</a>. +<cite>Class. Quantum Grav.</cite>, 24:S341–S368, 2007. +(<a href="http://dx.doi.org/10.1088/0264-9381/24/12/S22">doi:10.1088/0264-9381/24/12/S22</a>)</li> + +<!-- Authors: Bela Szilagyi and Denis Pollney and Luciano Rezzolla and Jonathan + Thornburg and Jeffrey Winicour --> +<li><a name="carpet-szilagyi2006a">B</a>éla Szilágyi, + Denis Pollney, Luciano Rezzolla, Jonathan Thornburg, and Jeffrey Winicour. +<a href="http://arxiv.org/abs/gr-qc/0612150">An explicit harmonic code for + black-hole evolution using excision</a>. +<cite>Class. Quantum Grav.</cite>, 24:S275–S293, 2007. +(<a href="http://dx.doi.org/10.1088/0264-9381/24/12/S18">doi:10.1088/0264-9381/24/12/S18</a>)</li> + +<!-- Authors: Luca Baiotti and Ian Hawke and Luciano Rezzolla --> +<li><a name="carpet-baiotti2006b">Luca</a> Baiotti, Ian Hawke, and + Luciano Rezzolla. +<a href="http://arxiv.org/abs/gr-qc/0701043">On the gravitational radiation + from the collapse of neutron stars to rotating black holes</a>. +<cite>Class. Quantum Grav.</cite>, 24:S187–S206, 2007. +(<a href="http://dx.doi.org/10.1088/0264-9381/24/12/S13">doi:10.1088/0264-9381/24/12/S13</a>)</li> + +<!-- Authors: Christian D Ott and Harald Dimmelmeier and Andreas Marek and Hans + Thomas Janka and Burkhard Zink and Ian Hawke and Erik Schnetter --> +<li><a name="carpet-ott2006b">Christian</a> D. Ott, Harald + Dimmelmeier, Andreas Marek, Hans-Thomas Janka, Burkhard Zink, Ian Hawke, and + Erik Schnetter. +<a href="http://arxiv.org/abs/astro-ph/0612638">Rotating collapse of stellar + iron cores in general relativity</a>. +<cite>Class. Quantum Grav.</cite>, 24:S139–S154, 2007. +(<a href="http://dx.doi.org/10.1088/0264-9381/24/12/S10">doi:10.1088/0264-9381/24/12/S10</a>)</li> + +<!-- Authors: Burkhard Zink and Nikolaos Stergioulas and Ian Hawke and + Christian D Ott and Erik Schnetter and Ewald Muller --> +<li><a name="carpet-zink2006a">Burkhard</a> Zink, Nikolaos + Stergioulas, Ian Hawke, Christian D. Ott, Erik Schnetter, and Ewald + Müller. +<a href="http://arxiv.org/abs/astro-ph/0611601">Non-axisymmetric instability + and fragmentation of general relativistic quasitoroidal stars</a>. +<cite>Phys. Rev. D</cite>, 76:024019, 2007. +(<a href="http://dx.doi.org/10.1103/PhysRevD.76.024019">doi:10.1103/PhysRevD.76.024019</a>)</li> + +<!-- Authors: Bernd Brugmann and Jose A Gonzalez and Mark Hannam and Sascha + Husa and Ulrich Sperhake and Wolfgang Tichy --> +<li><a name="carpet-bruegmann2006a">Bernd</a> Brügmann, + José A. González, Mark Hannam, Sascha Husa, Ulrich Sperhake, and + Wolfgang Tichy. +<a href="http://arxiv.org/abs/gr-qc/0610128">Calibration of moving puncture + simulations</a>. +<cite>Phys. Rev. D</cite>, 77:024027, 2008. +(<a href="http://dx.doi.org/10.1103/PhysRevD.77.024027">doi:10.1103/PhysRevD.77.024027</a>)</li> + +<!-- Authors: Christian Reisswig and Nigel T Bishop and Chi Wai Lai and + Jonathan Thornburg and Bela Szilagyi --> +<li><a name="carpet-reisswig2006a">Christian</a> Reisswig, + Nigel T. Bishop, Chi Wai Lai, Jonathan Thornburg, and Béla Szilágyi. +<a href="http://arxiv.org/abs/gr-qc/0610019">Characteristic evolutions in + numerical relativity using six angular patches</a>. +<cite>Class. Quantum Grav.</cite>, 24:S327–S339, 2007. +(<a href="http://dx.doi.org/10.1088/0264-9381/24/12/S21">doi:10.1088/0264-9381/24/12/S21</a>)</li> + +<!-- Authors: Christian D Ott and Harald Dimmelmeier and Andreas Marek and Hans + Thomas Janka and Ian Hawke and Burkhard Zink and Erik Schnetter --> +<li><a name="carpet-ott2006a">Christian</a> D. Ott, Harald + Dimmelmeier, Andreas Marek, Hans-Thomas Janka, Ian Hawke, Burkhard Zink, and + Erik Schnetter. +<a href="http://arxiv.org/abs/astro-ph/0609819">3D collapse of rotating + stellar iron cores in general relativity including deleptonization and a + nuclear equation of state</a>. +<cite>Phys. Rev. Lett.</cite>, 98:261101, 2007. +(<a href="http://dx.doi.org/10.1103/PhysRevLett.98.261101">doi:10.1103/PhysRevLett.98.261101</a>)</li> + +<!-- Authors: Luca Baiotti and Luciano Rezzolla --> +<li><a name="carpet-baiotti2006a">Luca</a> Baiotti and Luciano + Rezzolla. +<a href="http://arxiv.org/abs/gr-qc/0608113">Challenging the paradigm of + singularity excision in gravitational collapse</a>. +<cite>Phys. Rev. Lett.</cite>, 97:141101, 2006. +(<a href="http://dx.doi.org/10.1103/PhysRevLett.97.141101">doi:10.1103/PhysRevLett.97.141101</a>)</li> + +<!-- Authors: Ernst Nils Dorband and Emanuele Berti and Peter Diener and Erik + Schnetter and Manuel Tiglio --> +<li><a name="carpet-dorband2006a">Ernst</a> Nils Dorband, Emanuele + Berti, Peter Diener, Erik Schnetter, and Manuel Tiglio. +<a href="http://arxiv.org/abs/gr-qc/0608091">A numerical study of the + quasinormal mode excitation of kerr black holes</a>. +<cite>Phys. Rev. D</cite>, 74:084028, 2006. +(<a href="http://dx.doi.org/10.1103/PhysRevD.74.084028">doi:10.1103/PhysRevD.74.084028</a>)</li> + +<!-- Authors: Frank Loffler and Luciano Rezzolla and Marcus Ansorg --> +<li><a name="carpet-loeffler2006a">Frank</a> Löffler, Luciano + Rezzolla, and Marcus Ansorg. +<a href="http://arxiv.org/abs/gr-qc/0606104">Numerical evolutions of a black + hole-neutron star system in full general relativity: Head-on collision</a>. +<cite>Phys. Rev. D</cite>, 74:104018, 2006. +(<a href="http://dx.doi.org/10.1103/PhysRevD.74.104018">doi:10.1103/PhysRevD.74.104018</a>)</li> + +<!-- Authors: Ulrich Sperhake --> +<li><a name="carpet-sperhake2006a">Ulrich</a> Sperhake. +<a href="http://arxiv.org/abs/gr-qc/0606079">Binary black-hole evolutions of + excision and puncture data</a>. +<cite>Phys. Rev. D</cite>, 76:104015, 2007. +(<a href="http://dx.doi.org/10.1103/PhysRevD.76.104015">doi:10.1103/PhysRevD.76.104015</a>)</li> + +<!-- Authors: Erik Schnetter and Badri Krishnan and Florian Beyer --> +<li><a name="carpet-schnetter2006b">Erik</a> Schnetter, Badri + Krishnan, and Florian Beyer. +<a href="http://arxiv.org/abs/gr-qc/0604015">Introduction to dynamical horizons + in numerical relativity</a>. +<cite>Phys. Rev. D</cite>, 74:024028, 2006. +(<a href="http://dx.doi.org/10.1103/PhysRevD.74.024028">doi:10.1103/PhysRevD.74.024028</a>)</li> + +<!-- Authors: Carlos F Sopuerta and Ulrich Sperhake and Pablo Laguna --> +<li><a name="carpet-sopuerta2006a">Carlos</a> F. Sopuerta, Ulrich + Sperhake, and Pablo Laguna. +<a href="http://arxiv.org/abs/gr-qc/0605018">Hydro-without-hydro framework for + simulations of black hole-neutron star binaries</a>. +<cite>Class. Quantum Grav.</cite>, 23:S579–S598, 2006. +(<a href="http://dx.doi.org/10.1088/0264-9381/23/16/S15">doi:10.1088/0264-9381/23/16/S15</a>)</li> + +<!-- Authors: Erik Schnetter and Peter Diener and Ernst Nils Dorband and Manuel + Tiglio --> +<li><a name="carpet-schnetter2006a">Erik</a> Schnetter, Peter + Diener, Ernst Nils Dorband, and Manuel Tiglio. +<a href="http://arxiv.org/abs/gr-qc/0602104">A multi-block infrastructure for + three-dimensional time-dependent numerical relativity</a>. +<cite>Class. Quantum Grav.</cite>, 23:S553–S578, 2006. +(<a href="http://dx.doi.org/10.1088/0264-9381/23/16/S14">doi:10.1088/0264-9381/23/16/S14</a>)</li> + +<!-- Authors: Peter Diener and Ernst Nils Dorband and Erik Schnetter and Manuel + Tiglio --> +<li><a name="carpet-diener2005b">Peter</a> Diener, Ernst Nils + Dorband, Erik Schnetter, and Manuel Tiglio. +<a href="http://arxiv.org/abs/gr-qc/0512001">Optimized high-order derivative + and dissipation operators satisfying summation by parts, and applications in + three-dimensional multi-block evolutions</a>. +<cite>J. Sci. Comput.</cite>, 32:109–145, 2007. +(<a href="http://dx.doi.org/10.1007/s10915-006-9123-7">doi:10.1007/s10915-006-9123-7</a>)</li> + +<!-- Authors: Peter Diener and Frank Herrmann and Denis Pollney and Erik + Schnetter and Edward Seidel and Ryoji Takahashi and Jonathan Thornburg and + Jason Ventrella --> +<li><a name="carpet-diener2005a">Peter</a> Diener, Frank Herrmann, + Denis Pollney, Erik Schnetter, Edward Seidel, Ryoji Takahashi, Jonathan + Thornburg, and Jason Ventrella. +<a href="http://arxiv.org/abs/gr-qc/0512108">Accurate evolution of orbiting + binary black holes</a>. +<cite>Phys. Rev. Lett.</cite>, 96:121101, 2006. +(<a href="http://dx.doi.org/10.1103/PhysRevLett.96.121101">doi:10.1103/PhysRevLett.96.121101</a>)</li> + +<!-- Authors: Ulrich Sperhake and Bernard Kelly and Pablo Laguna and Kenneth L + Smith and Erik Schnetter --> +<li><a name="carpet-sperhake2005a">Ulrich</a> Sperhake, Bernard + Kelly, Pablo Laguna, Kenneth L. Smith, and Erik Schnetter. +<a href="http://arxiv.org/abs/gr-qc/0503071">Black hole head-on collisions and + gravitational waves with fixed mesh-refinement and dynamic singularity + excision</a>. +<cite>Phys. Rev. D</cite>, 71:124042, 2005. +(<a href="http://dx.doi.org/10.1103/PhysRevD.71.124042">doi:10.1103/PhysRevD.71.124042</a>)</li> + +<!-- Authors: Burkhard Zink and Nikolaos Stergioulas and Ian Hawke and + Christian D Ott and Erik Schnetter and Ewald Muller --> +<li><a name="carpet-zink2005a">Burkhard</a> Zink, Nikolaos + Stergioulas, Ian Hawke, Christian D. Ott, Erik Schnetter, and Ewald + Müller. +<a href="http://arxiv.org/abs/gr-qc/0501080">Formation of supermassive black + holes through fragmentation of torodial supermassive stars</a>. +<cite>Phys. Rev. Lett.</cite>, 96:161101, 2006. +(<a href="http://dx.doi.org/10.1103/PhysRevLett.96.161101">doi:10.1103/PhysRevLett.96.161101</a>)</li> + +<!-- Authors: Luca Baiotti and Ian Hawke and Luciano Rezzolla and Erik + Schnetter --> +<li><a name="carpet-baiotti2004a">Luca</a> Baiotti, Ian Hawke, + Luciano Rezzolla, and Erik Schnetter. +<a href="http://arxiv.org/abs/gr-qc/0503016">Gravitational-wave emission from + rotating gravitational collapse in three dimensions</a>. +<cite>Phys. Rev. Lett.</cite>, 95:131101, 2005. +(<a href="http://dx.doi.org/10.1103/PhysRevLett.94.131101">doi:10.1103/PhysRevLett.94.131101</a>)</li> + +<!-- Authors: Erik Schnetter and Scott H Hawley and Ian Hawke --> +<li><a name="carpet-schnetter2003a">Erik</a> Schnetter, Scott H. + Hawley, and Ian Hawke. +<a href="http://arxiv.org/abs/gr-qc/0310042">Evolutions in 3d numerical + relativity using fixed mesh refinement</a>. +<cite>Class. Quantum Grav.</cite>, 21:1465–1488, 2004. +(<a href="http://dx.doi.org/10.1088/0264-9381/21/6/014">doi:10.1088/0264-9381/21/6/014</a>)</li> + +</ol> + +<!-- END BIBLIOGRAPHY citations-refereed --> +<h2>Book Chapters</h2> + +<!-- BEGIN BIBLIOGRAPHY citations-book --> +<!-- + DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY! + YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED! +--> +<!-- Generated by: ./bib2xhtml -s unsortlist -u citations-book.aux publications.html --> +<ol class="bib2xhtml"> + +<!-- Authors: Erik Schnetter and Christian D Ott and Gabrielle Allen and Peter + Diener and Tom Goodale and Thomas Radke and Edward Seidel and John Shalf --> +<li><a name="carpet-schnetter2007a">Erik</a> Schnetter, + Christian D. Ott, Gabrielle Allen, Peter Diener, Tom Goodale, Thomas Radke, + Edward Seidel, and John Shalf. +<a href="http://arxiv.org/abs/0707.1607">Cactus Framework: Black holes to + gamma ray bursts</a>. +In David A. Bader, editor, <cite>Petascale Computing: Algorithms and + Applications</cite>, Computational Science Series, chapter 24, pages + 507–528. Chapman & Hall/CRC, 2007.</li> + +</ol> + +<!-- END BIBLIOGRAPHY citations-book --> +<h2>Conference Proceedings, Preprints, Technical Reports, and Books</h2> + +<!-- BEGIN BIBLIOGRAPHY citations-report --> +<!-- + DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY! + YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED! +--> +<!-- Generated by: ./bib2xhtml -s unsortlist -u citations-report.aux publications.html --> +<ol class="bib2xhtml"> + +<!-- Authors: Burkhard Zink and Nikolaos Stergioulas and Ian Hawke and + Christian D Ott and Erik Schnetter and Ewald Muller --> +<li><a name="carpet-zink2005b">Burkhard</a> Zink, Nikolaos + Stergioulas, Ian Hawke, Christian D. Ott, Erik Schnetter, and Ewald + Müller. +Rotational instabilities in supermassive stars: a new way to form supermassive + black holes. +In N. K. Spyrou, N. Stergioulas, and C. Tsagas, editors, <cite>International + Scientific Workshop on Cosmology and Gravitational Physics, Thessaloniki, + December 15-16, 2005</cite>, pages 155–160. ZITI, 2006.</li> + +<!-- Authors: Christian Reisswig and Nigel T Bishop and Denis Pollney and Bela + Szilagyi --> +<li><a name="carpet-reisswig2009b">Christian</a> Reisswig, Nigel T. + Bishop, Denis Pollney, and Béla Szilágyi. +<a href="http://arxiv.org/abs/0907.2637">Unambiguous determination of + gravitational waveforms from binary black hole mergers</a>. +arXiv:0907.2637 [gr-qc], 2009.</li> + +<!-- Authors: Ulrich Sperhake and Vitor Cardoso and Frans Pretorius and + Emanuele Berti and Tanja Hinderer and Nicolas Yunes --> +<li><a name="carpet-sperhake2009a">Ulrich</a> Sperhake, Vitor + Cardoso, Frans Pretorius, Emanuele Berti, Tanja Hinderer, and Nicolas Yunes. +<a href="http://arxiv.org/abs/0907.1252">Cross section, final spin and + zoom-whirl behavior in high-energy black hole collisions</a>. +arXiv:0907.1252 [gr-qc], 2009.</li> + +<!-- Authors: Geoffrey Lovelace and Yanbei Chen and Michael Cohen and Jeffrey D + Kaplan and Drew Keppel and Keith D Matthews and David A Nichols and Mark A + Scheel and Ulrich Sperhake --> +<li><a name="carpet-lovelace2009a">Geoffrey</a> Lovelace, Yanbei + Chen, Michael Cohen, Jeffrey D. Kaplan, Drew Keppel, Keith D. Matthews, + David A. Nichols, Mark A. Scheel, and Ulrich Sperhake. +<a href="http://arxiv.org/abs/0907.0869">Momentum flow in black-hole binaries: + II. Numerical simulations of equal-mass, head-on mergers with + antiparallel spins</a>. +arXiv:0907.0869 [gr-qc], 2009.</li> + +<!-- Authors: James Healy and Janna Levin and Deirdre Shoemaker --> +<li><a name="carpet-healy2009a">James</a> Healy, Janna Levin, and + Deirdre Shoemaker. +<a href="http://arxiv.org/abs/0907.0671">Zoom-whirl orbits in black hole + binaries</a>. +arXiv:0907.0671 [gr-qc], 2009.</li> + +<!-- Authors: Christian Reisswig and Sascha Husa and Luciano Rezzolla and Ernst + Nils Dorband and Denis Pollney and Jennifer Seiler --> +<li><a name="carpet-reisswig2009a">Christian</a> Reisswig, Sascha + Husa, Luciano Rezzolla, Ernst Nils Dorband, Denis Pollney, and Jennifer + Seiler. +<a href="http://arxiv.org/abs/0907.0462">Gravitational-wave detectability of + equal-mass black-hole binaries with aligned spins</a>. +arXiv:0907.0462 [gr-qc], 2009.</li> + +<!-- Authors: James Healy and Pablo Laguna and Richard A Matzner and Deirdre M + Shoemaker --> +<li><a name="carpet-healy2009b">James</a> Healy, Pablo Laguna, + Richard A. Matzner, and Deirdre M. Shoemaker. +<a href="http://arxiv.org/abs/0905.3914">Final mass and spin of merged black + holes and the golden black hole</a>. +arXiv:0905.3914 [gr-qc], 2009.</li> + +<!-- Authors: Christian D Ott --> +<li><a name="carpet-ott2009a">Christian</a> D. Ott. +<a href="http://arxiv.org/abs/0905.2797">Probing the core-collapse supernova + mechanism with gravitational waves</a>. +arXiv:0905.2797 [gr-qc], 2009.</li> + +<!-- Authors: Carlos O Lousto and Manuela Campanelli and Yosef Zlochower --> +<li><a name="carpet-lousto2009a">Carlos</a> O. Lousto, Manuela + Campanelli, and Yosef Zlochower. +<a href="http://arxiv.org/abs/0904.3541">Remnant masses, spins and recoils from + the merger of generic black-hole binaries</a>. +arXiv:0904.3541 [gr-qc], 2009.</li> + +<!-- Authors: Enrico Barausse and Luciano Rezzolla --> +<li><a name="carpet-barausse2009a">Enrico</a> Barausse and Luciano + Rezzolla. +<a href="http://arxiv.org/abs/0904.2577">Predicting the direction of the final + spin from the coalescence of two black holes</a>. +arXiv:0904.2577 [gr-qc], 2009.</li> + +<!-- Authors: Sebastiano Bernuzzi and Lucao Baiotti and Giovanni Corvino and + Roberto De Pietri and Alessandro Nagar --> +<li><a name="carpet-bernuzzi2009a">Sebastiano</a> Bernuzzi, Lucao + Baiotti, Giovanni Corvino, Roberto De Pietri, and Alessandro Nagar. +<a href="http://arxiv.org/abs/0902.2720">Gravitational-wave extraction from + neutron-star oscillations</a>. +arXiv:0902.2720 [gr-qc], 2009.</li> + +<!-- Authors: Tanja Bode and Pablo Laguna and Deirdre M Shoemaker and Ian + Hinder and Frank Herrmann and Jirjoo Vishnav --> +<li><a name="carpet-bode2009a">Tanja</a> Bode, Pablo Laguna, + Deirdre M. Shoemaker, Ian Hinder, Frank Herrmann, and Jirjoo Vishnav. +<a href="http://arxiv.org/abs/0902.1127">Binary black hole evolutions of + approximate puncture initial data</a>. +arXiv:0902.1127 [gr-qc], 2009.</li> + +<!-- Authors: Hiroyuki Nakano and Manuela Campanelli and Carlos O Lousto and + Yosef Zlochower --> +<li><a name="carpetresult-nakano2008a">Hiroyuki</a> Nakano, + Manuela Campanelli, Carlos O. Lousto, and Yosef Zlochower. +<a href="http://arxiv.org/abs/0901.3861">Comparison of post-Newtonian and + numerical evolutions of black-hole binaries</a>. +arXiv:0901.3861 [gr-qc], 2009.</li> + +<!-- Authors: Bruno Giacomazzo and Luciano Rezzolla and Luca Baiotti --> +<li><a name="carpet-giacomazzo2009a">Bruno</a> Giacomazzo, Luciano + Rezzolla, and Luca Baiotti. +<a href="http://arxiv.org/abs/0901.2722">The influence of magnetic fields on + the gravitational-wave emission from binary neutron stars</a>. +arXiv:0901.2722v1 [gr-qc], 2009.</li> + +<!-- Authors: Jian Tao and Gabrielle Allen and Ian Hinder and Erik Schnetter + and Yosef Zlochower --> +<li><a name="carpet-tao2008a">Jian</a> Tao, Gabrielle Allen, Ian + Hinder, Erik Schnetter, and Yosef Zlochower. +<a href="http://www.cct.lsu.edu/CCT-TR/CCT-TR-2008-5">XiRel: Standard + benchmarks for numerical relativity codes using Cactus and Carpet</a>. +Technical Report 5, Center for Computation & Technology, Louisiana State + University, 2008.</li> + +<!-- Authors: Ian Hinder and Frank Herrmann and Pablo Laguna and Deirdre + Shoemaker --> +<li><a name="carpet-hinder2008a">Ian</a> Hinder, Frank Herrmann, + Pablo Laguna, and Deirdre Shoemaker. +<a href="http://arxiv.org/abs/0806.1037">Comparisons of eccentric binary black + hole simulations with post-Newtonian models</a>. +arXiv:0806.1037 [gr-qc], 2008.</li> + +<!-- Authors: John G Baker and William D Boggs and Joan M Centrella and Bernard + J Kelly and Sean T McWilliams and James R van Meter --> +<li><a name="carpetresult-baker2007a">John</a> G. Baker, + William D. Boggs, Joan M. Centrella, Bernard J. Kelly, Sean T. McWilliams, + and James R. van Meter. +<a href="http://arxiv.org/abs/0708.4202">Gravitational waves from black-hole + mergers</a>. +In <cite>Proceedings of the 2007 Spring Symposium of the Space Telescope + Science Institute (Baltimore, MD)</cite>, page (to be published), 2007.</li> + +<!-- Authors: Luca Baiotti and Ian Hawke and Luciano Rezzolla and Erik + Schnetter --> +<li><a name="carpet-baiotti2006c">Luca</a> Baiotti, Ian Hawke, + Luciano Rezzolla, and Erik Schnetter. +<a href="http://stacks.iop.org/JPConf/66/012045">Details on the + gravitational-wave emission from rotating gravitational collapse in 3D</a>. +In <cite>XXIXth Spanish Relativity Meeting (E.R.E. 2006)</cite>, volume 66 of + <cite>J. Phys.: Conf. Ser.</cite>, page 012045, 2007. +(<a href="http://dx.doi.org/10.1088/1742-6596/66/1/012045">doi:10.1088/1742-6596/66/1/012045</a>)</li> + +<!-- Authors: Ulrich Sperhake --> +<li><a name="carpet-sperhake2006c">Ulrich</a> Sperhake. +<a href="http://stacks.iop.org/JPConf/66/012049">Black-hole binary evolutions + with the LEAN code</a>. +In <cite>XXIXth Spanish Relativity Meeting (E.R.E. 2006)</cite>, volume 66 of + <cite>J. Phys.: Conf. Ser.</cite>, page 012049, 2007. +(<a href="http://dx.doi.org/10.1088/1742-6596/66/1/012049">doi:10.1088/1742-6596/66/1/012049</a>)</li> + +<!-- Authors: Jose A Font --> +<li><a name="carpetresult-font2006a">Jos</a>é A. Font. +<a href="http://stacks.iop.org/JPConf/66/012063">Current status of relativistic + core collapse simulations</a>. +In <cite>XXIXth Spanish Relativity Meeting (E.R.E. 2006)</cite>, volume 66 of + <cite>J. Phys.: Conf. Ser.</cite>, page 012063, 2007. +(<a href="http://dx.doi.org/10.1088/1742-6596/66/1/012063">doi:10.1088/1742-6596/66/1/012063</a>)</li> + +<!-- Authors: Ulrich Sperhake and Bernd Brugmann and Jose Gonzalez and Mark + Hannam and Sascha Husa --> +<li><a name="carpet-sperhake2006b">Ulrich</a> Sperhake, Bernd + Brügmann, José González, Mark Hannam, and Sascha Husa. +<a href="http://arxiv.org/abs/0705.2035">Head-on collisions of different + initial data</a>. +In <cite>Proceedings of the 11th Marcel Grossmann Meeting (MG11) in Berlin, + Germany, July 23-29, 2006</cite>, 2007.</li> + +<!-- Authors: Burkhard Zink and Nikolaos Stergioulas and Ian Hawke and + Christian D Ott and Erik Schnetter and Ewald Muller --> +<li><a name="carpet-zink2006b">Burkhard</a> Zink, Nikolaos + Stergioulas, Ian Hawke, Christian D. Ott, Erik Schnetter, and Ewald + Müller. +<a href="http://arxiv.org/abs/0704.0431">Fragmentation of general relativistic + quasi-toroidal polytropes</a>. +In <cite>Proceedings of the 11th Marcel Grossmann Meeting (MG11) in Berlin, + Germany, July 23-29, 2006</cite>, 2007.</li> + +<!-- Authors: Burkhard Zink and Nikolaos Stergioulas and Ian Hawke and + Christian D Ott and Erik Schnetter and Ewald Muller --> +<li><a name="carpet-zink2006c">Burkhard</a> Zink, Nikolaos + Stergioulas, Ian Hawke, Christian D. Ott, Erik Schnetter, and Ewald + Müller. +<a href="http://stacks.iop.org/JPConf/68/012050">Supermassive black hole + formation through rotational instabilities</a>. +In <cite>12th Conference on Recent Developments in Gravity (NEB XII)</cite>, + volume 68 of <cite>J. Phys.: Conf. Ser.</cite>, page 012050, 2007. +(<a href="http://dx.doi.org/10.1088/1742-6596/68/1/012050">doi:10.1088/1742-6596/68/1/012050</a>)</li> + +</ol> + +<!-- END BIBLIOGRAPHY citations-report --> +<h2>Theses</h2> + +<!-- BEGIN BIBLIOGRAPHY citations-thesis --> +<!-- + DO NOT MODIFY THIS BIBLIOGRAPHY BY HAND! IT IS MAINTAINED AUTOMATICALLY! + YOUR CHANGES WILL BE LOST THE NEXT TIME IT IS UPDATED! +--> +<!-- Generated by: ./bib2xhtml -s unsortlist -u citations-thesis.aux publications.html --> +<ol class="bib2xhtml"> + +<!-- Authors: Eloisa Bentivegna --> +<li><a name="carpet-bentivegna2008b">Eloisa</a> Bentivegna. +<a href="http://etda.libraries.psu.edu/ +theses/approved/WorldWideIndex/ETD-2570/index.html"><cite>Ringing in unison: + exploring black hole coalescence with quasinormal modes</cite></a>. +PhD thesis, Pennsylvania State University, 2008.</li> + +<!-- Authors: Michael Jasiulek --> +<li><a name="carpet-jasiulek2008a">Michael</a> Jasiulek. +Spin measures on isolated and dynamical horizons in numerical relativity. +Master's thesis, Humboldt-Universität zu Berlin, 2008.</li> + +<!-- Authors: Ernst Nils Dorband --> +<li><a name="carpet-dorband2007a">Ernst</a> Nils Dorband. +<a href="http://www.cct.lsu.edu/~dorband/thesis.pdf"><cite>Computing and + Analyzing Gravitational Radiation in Black Hole Simulations Using a New + Multi-Block Approach to Numerical Relativity</cite></a>. +PhD thesis, Louisiana State University, 2007.</li> + +<!-- Authors: Wolfgang Kastaun --> +<li><a name="carpet-kastaun2007a">Wolfgang</a> Kastaun. +<a href="http://tobias-lib.ub.uni-tuebingen.de/ +volltexte/2007/2803/"><cite>Developing a code for general relativistic + hydrodynamics with application to neutron star oscillations</cite></a>. +PhD thesis, Universität Tübingen, 2007.</li> + +<!-- Authors: Gian Mario Manca --> +<li><a name="carpet-manca2007a">Gian</a> Mario Manca. +<cite>Dynamical instabilities in rapidly rotating neutron star models</cite>. +PhD thesis, Università di Parma, 2007.</li> + +<!-- Authors: Christian D Ott --> +<li><a name="carpet-ott2007a">Christian</a> D. Ott. +<a href="http://stellarcollapse.org/papers/thesis_final.pdf"><cite>Stellar Iron + Core Collapse in {3+1} General Relativity and The Gravitational Wave + Signature of Core-Collapse Supernovae</cite></a>. +PhD thesis, Universität Potsdam, 2007.</li> + +<!-- Authors: Anil Zenginoglu --> +<li><a name="carpet-2007a">An</a>ıl ZenginoÄŸlu. +<a href="http://arxiv.org/abs/0711.0873"><cite>A conformal approach to + numerical calculations of asymptotically flat spacetimes</cite></a>. +PhD thesis, Universität Potsdam, 2007.</li> + +<!-- Authors: Frank Loffler --> +<li><a name="carpet-loeffler2005a">Frank</a> Löffler. +<a href="http://opus.kobv.de/ubp/volltexte/2006/774/"><cite>Numerical + Simulations of Neutron Star-Black Hole Mergers</cite></a>. +PhD thesis, Universität Potsdam, 2006.</li> + +<!-- Authors: Sasanka Madiraju --> +<li><a name="carpet-madiraju2006a">Sasanka</a> Madiraju. +<a href="http://www.cactuscode.org/Articles/Cactus_Madiraju06.pdf">Performance + profiling with Cactus benchmarks</a>. +Master's thesis, Louisiana State University, 2006.</li> + +<!-- Authors: Burkhard Zink --> +<li><a name="carpet-zink2006d">Burkhard</a> Zink. +<a href="http://nbn-resolving.de/urn/resolver.pl +?urn=urn:nbn:de:bvb:91-diss20060623-1915123970"><cite>Black hole formation + from non-axisymmetric instabilities in quasi-toroidal stars</cite></a>. +PhD thesis, Technische Universität München, 2006.</li> + +<!-- Authors: Frank Herrmann --> +<li><a name="carpet-herrmann2005a">Frank</a> Herrmann. +<cite>Evolution and analysis of binary black hole spacetimes</cite>. +PhD thesis, Universität Potsdam, 2005.</li> + +<!-- Authors: Michael Koppitz --> +<li><a name="carpet-koppitz2004a">Michael</a> Koppitz. +<a href="http://opus.kobv.de/ubp/volltexte/2005/134/"><cite>Numerical Studies + Of Black Hole Initial Data</cite></a>. +PhD thesis, Universität Potsdam, 2004.</li> + +</ol> + +<!-- END BIBLIOGRAPHY citations-thesis --> +<!-- + +Luca Baiotti, +Numerical relativity simulations of non-vacuum spacetimes in three +dimensions, +PhD thesis, SISSA, 2004. +[does not use Carpet] + +Bernard Kelly, +The Next Generation of Binary Black Hole Head-On Collisions, and their +Aftermath, +PhD thesis, Penn State University, 2004. +[does not use Carpet] + +Kenneth Smith, +Dynamic Singularity Excision in Numerical Relativity, +PhD thesis, Penn State University, 2004. +[does not use Carpet] + +Bruno Giacomazzo, +General Relativistic Magnetohydrodynamics: fundamental aspects and applications, +PhD thesis, SISSA, 2006. +[does not use Carpet] + +--> + + <hr /> + + <p>Go back to the <a href="..">Carpet home page</a>.</p> + + <hr /> + + <p> + <a href="http://www.xemacs.org/About/created.html"><img src="../cbxSmall.jpg" + alt="Created with XEmacs!" height="36" width="100" /></a> + + <a href="http://www.anybrowser.org/campaign/"><img src="../logoab8.png" + alt="Best Viewed With Any Browser" height="31" width="88" /></a> + + <a href="http://validator.w3.org/check?uri=referer"><img src="../valid-xhtml10.png" + alt="Valid XHTML 1.0!" height="31" width="88" /></a> + </p> + + <address><a href="mailto:schnetter@cct.lsu.edu">Erik Schnetter</a></address> +<p> +<!-- Created: Sun Feb 26 2006 --> +<!-- hhmts start --> +Last modified: 2009-03-06 +<!-- hhmts end --> +</p> + + </body> +</html> diff --git a/Carpet/CarpetWeb/scaling-amr/minimise.sh b/Carpet/CarpetWeb/scaling-amr/minimise.sh index 2769773d8..2769773d8 100755..100644 --- a/Carpet/CarpetWeb/scaling-amr/minimise.sh +++ b/Carpet/CarpetWeb/scaling-amr/minimise.sh diff --git a/Carpet/CarpetWeb/scaling-improved/KL9_CCT_vacuum.asc b/Carpet/CarpetWeb/scaling-improved/KL9_CCT_vacuum.asc new file mode 100644 index 000000000..72e3829c3 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-improved/KL9_CCT_vacuum.asc @@ -0,0 +1,15 @@ + +# min +#1:ncores 2:totalwalltime 3:initialise 4:evolve 5:thorns 6:syncs 7:output 8:regrid 9:restrict + 1 166.538 1.234 165.301 151.533 13.013 0.002 0.038 0.121 + 2 184.087 1.467 182.617 146.464 32.789 0.002 0.046 2.615 + 4 222.507 2.042 220.460 154.111 60.024 0.001 0.057 5.615 + 8 249.777 2.394 247.378 161.157 76.278 0.002 0.066 8.865 + 16 289.908 3.178 286.723 187.395 83.122 0.001 0.091 14.265 + 32 306.595 4.026 302.561 182.373 101.549 0.001 0.135 16.780 + 64 325.550 5.807 319.727 182.030 113.278 0.001 0.177 22.330 + 128 327.973 9.502 318.444 182.151 109.057 0.001 0.327 24.063 + 256 355.912 23.444 332.316 182.260 120.230 0.001 0.702 25.793 + 512 410.086 71.320 338.582 180.838 118.263 0.001 2.623 33.638 + 1024 606.565 255.550 350.505 185.833 122.054 0.001 7.273 33.686 + 2048 1357.896 982.257 375.051 205.373 140.679 0.001 14.646 35.469 diff --git a/Carpet/CarpetWeb/scaling-improved/Makefile b/Carpet/CarpetWeb/scaling-improved/Makefile new file mode 100644 index 000000000..a409ba7f3 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-improved/Makefile @@ -0,0 +1,36 @@ +all: results-old.pdf results.pdf results-best.pdf results-scaled.pdf results-sicortex.pdf results-surveyor.pdf results-openmp-node.pdf results-openmp-procs.pdf results-whatif.pdf + +results.eps results-best.eps: results-franklin.out results-hlrb2.out results-kraken.out results-queenbee.out results-ranger.out +results-scaled.eps: results-franklin.out results-hlrb2.out results-kraken.out results-queenbee.out results-ranger.out results-sicortex.out results-surveyor.out +results-sicortex.eps: results-sicortex.out +results-surveyor.eps: results-surveyor.out +results-openmp-node.eps: results-ranger-openmp-node.out +results-openmp-procs.eps: results-ranger-openmp-procs.out +results-whatif.eps: results-whatif-orig.out results-whatif-bw.out results-whatif-bwlat.out + +results-ranger-openmp-procs.out results-ranger-openmp-node.out: results2openmp results-ranger.out + ./results2openmp + +results-whatif-orig.out results-whatif-bw.out results-whatif-bwlat.out: results2whatif results-ranger.out + ./results2whatif + +%.eps: %.gnuplot + gnuplot < $*.gnuplot + +%.pdf: %.eps + epstopdf $*.eps + +rsync: + -rsync -Paz franklin.nersc.gov:/project/projectdirs/m152/schnette/franklin/Calpha/results-franklin.out . + -rsync -Paz -e 'ssh numrel02.cct.lsu.edu ssh' lu78kog@hlrb2.lrz-muenchen.de:Calpha/results-hlrb2.out . + -rsync -Paz kraken-pwd.nics.utk.edu:work/Calpha/results-kraken.out . + -rsync -Paz queenbee.loni.org:work/Calpha/results-queenbee.out . + -rsync -Paz ranger.tacc.utexas.edu:work/Calpha/results-ranger.out . + +clean: + rm -f results-old.pdf results.pdf results-best.pdf results-scaled.pdf results-sicortex.pdf results-surveyor.pdf results-openmp-node.pdf results-openmp-procs.pdf results-whatif.pdf + rm -f results-old.eps results.eps results-best.eps results-scaled.eps results-sicortex.eps results-surveyor.eps results-openmp-node.eps results-openmp-procs.eps results-whatif.eps + +.PHONY: all rsync clean + +.PRECIOUS: results-old.eps results.eps results-best.eps results-scaled.eps results-sicortex.eps results-surveyor.eps results-openmp-node.eps results-openmp-procs.eps results-whatif.eps diff --git a/Carpet/CarpetWeb/scaling-improved/openmp-ranger.out b/Carpet/CarpetWeb/scaling-improved/openmp-ranger.out new file mode 100644 index 000000000..2eacd10b3 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-improved/openmp-ranger.out @@ -0,0 +1,45 @@ +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000001 01 01 71 135.63270587 135.40044100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000002 02 01 71 186.41453722 186.15565600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000002 02 02 71 141.51701227 281.73762600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 04 01 71 228.27816767 228.01424800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 04 02 71 209.97284200 414.55791500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 04 04 71 257.80748799 1012.46728000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 01 71 279.55088937 277.57337300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 02 71 242.58659491 479.38994400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 04 71 328.67928713 1292.82478800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 08 71 291.50975695 2271.12593300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 71 343.44192950 342.61343200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 02 71 291.96150409 576.26800500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 04 71 379.51016019 1481.32459900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 08 71 403.38112376 3126.97943500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 16 71 406.25572666 6185.22252200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 71 375.95657347 375.46341200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 02 71 330.96690626 645.80038000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 04 71 429.58751955 1668.59631500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 08 71 490.51058293 3782.34037100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 16 71 656.72454561 9945.57355800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 71 417.34331894 415.39392000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 02 71 368.67281962 693.36329100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 04 71 488.48490761 1789.02781400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 08 71 607.70209688 4613.98434600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 16 71 758.89552524 11259.30765700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 71 431.95664416 431.63498300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 02 71 444.19184591 804.59427400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 04 71 545.43877754 1850.99568200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 08 71 636.76134103 4722.85116200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 16 71 743.16011415 11063.20738400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 71 430.91503566 430.43491100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 02 71 440.23977765 802.17812500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 04 71 522.37506390 1795.84423300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 08 71 697.91456742 4817.27303700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 16 71 792.28551614 11551.60588900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 71 432.57437397 431.60298900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 02 71 450.67742913 816.63503800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 04 71 531.22941551 1840.13502800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 01 71 438.81654108 438.29943200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 02 71 484.87606011 874.36265300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 04 71 547.03842935 1875.64522500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 01 71 399.03692711 398.91291300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 01 71 455.91632274 455.34043200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 008192 16 01 71 433.90391986 433.17103800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 012288 16 01 71 437.99540328 436.87931300 diff --git a/Carpet/CarpetWeb/scaling-improved/openmp.eps b/Carpet/CarpetWeb/scaling-improved/openmp.eps new file mode 100644 index 000000000..437a4f913 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-improved/openmp.eps @@ -0,0 +1,1207 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: openmp.eps +%%Creator: gnuplot 4.2 patchlevel 4 +%%CreationDate: Sun Dec 28 23:16:40 2008 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 230 176 +%%EndComments +%%BeginProlog +/gnudict 256 dict def +gnudict begin +% +% The following 6 true/false flags may be edited by hand if required +% The unit line width may also be changed +% +/Color true def +/Blacktext false def +/Solid false def +/Dashlength 1 def +/Landscape false def +/Level1 false def +/Rounded false def +/TransparentPatterns false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +% +/vshift -46 def +/dl1 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if +} def +/dl2 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul add } if +} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +Level1 {} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title (openmp.eps) + /Subject (gnuplot plot) + /Creator (gnuplot 4.2 patchlevel 4 ) + /Author (Erik Schnetter) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Sun Dec 28 23:16:40 2008) + /DOCINFO pdfmark +end +} ifelse +% +% Gnuplot Prolog Version 4.2 (August 2006) +% +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/N {newpath moveto} bind def +/Z {closepath} bind def +/C {setrgbcolor} bind def +/f {rlineto fill} bind def +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow {currentpoint stroke M 0 vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def +/DL {Color {setrgbcolor Solid {pop []} if 0 setdash} + {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def +/BL {stroke userlinewidth 2 mul setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/AL {stroke userlinewidth 2 div setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/UL {dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def} def +/PL {stroke userlinewidth setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +% Default Line colors +/LCw {1 1 1} def +/LCb {0 0 0} def +/LCa {0 0 0} def +/LC0 {1 0 0} def +/LC1 {0 1 0} def +/LC2 {0 0 1} def +/LC3 {1 0 1} def +/LC4 {0 1 1} def +/LC5 {1 1 0} def +/LC6 {0 0 0} def +/LC7 {1 0.3 0} def +/LC8 {0.5 0.5 0.5} def +% Default Line Types +/LTw {PL [] 1 setgray} def +/LTb {BL [] LCb DL} def +/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def +/LT0 {PL [] LC0 DL} def +/LT1 {PL [4 dl1 2 dl2] LC1 DL} def +/LT2 {PL [2 dl1 3 dl2] LC2 DL} def +/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def +/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def +/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def +/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def +/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def +/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def +/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def +/Dia {stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt} def +/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt} def +/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke} def +/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt} def +/Star {2 copy Pls Crs} def +/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill} def +/TriUF {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill} def +/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt} def +/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill} def +/Pent {stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt} def +/PentF {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore} def +/Circle {stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt} def +/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def +/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def +/C1 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath} bind def +/C2 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C3 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C4 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C5 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc} bind def +/C6 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C7 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C8 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C9 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath} bind def +/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C11 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C12 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C13 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C14 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc} bind def +/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath} bind def +/Square {dup Rec} bind def +/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def +/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def +/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def +/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def +/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def +/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare} bind def +/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare} bind def +/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def +/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def +/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def +/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def +/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def +/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def +/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def +/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def +/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def +/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def +/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def +/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def +/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def +/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def +/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def +/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def +/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def +/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def +/DiaE {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke} def +/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke} def +/TriUE {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke} def +/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke} def +/PentE {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore} def +/CircE {stroke [] 0 setdash + hpt 0 360 arc stroke} def +/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def +/DiaW {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke} def +/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke} def +/TriUW {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke} def +/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke} def +/PentW {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore} def +/CircW {stroke [] 0 setdash + hpt 0 360 arc Opaque stroke} def +/BoxFill {gsave Rec 1 setgray fill grestore} def +/Density { + /Fillden exch def + currentrgbcolor + /ColB exch def /ColG exch def /ColR exch def + /ColR ColR Fillden mul Fillden sub 1 add def + /ColG ColG Fillden mul Fillden sub 1 add def + /ColB ColB Fillden mul Fillden sub 1 add def + ColR ColG ColB setrgbcolor} def +/BoxColFill {gsave Rec PolyFill} def +/PolyFill {gsave Density fill grestore grestore} def +/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def +% +% PostScript Level 1 Pattern Fill routine for rectangles +% Usage: x y w h s a XX PatternFill +% x,y = lower left corner of box to be filled +% w,h = width and height of box +% a = angle in degrees between lines and x-axis +% XX = 0/1 for no/yes cross-hatch +% +/PatternFill {gsave /PFa [ 9 2 roll ] def + PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate + PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec + gsave 1 setgray fill grestore clip + currentlinewidth 0.5 mul setlinewidth + /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def + 0 0 M PFa 5 get rotate PFs -2 div dup translate + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 M 0 PFs V} for + 0 PFa 6 get ne { + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 2 1 roll M PFs 0 V} for + } if + stroke grestore} def +% +/languagelevel where + {pop languagelevel} {1} ifelse + 2 lt + {/InterpretLevel1 true def} + {/InterpretLevel1 Level1 def} + ifelse +% +% PostScript level 2 pattern fill definitions +% +/Level2PatternFill { +/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} + bind def +/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} +>> matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +/MFshow { + { dup 5 get 3 ge + { 5 get 3 eq {gsave} {grestore} ifelse } + {dup dup 0 get findfont exch 1 get scalefont setfont + [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 + get exch 4 get {show} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq + {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 + get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div + dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get + show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop + pop aload pop M} ifelse }ifelse }ifelse } + ifelse } + forall} bind def +/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } + {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont + 6 get stringwidth pop add} {pop} ifelse} ifelse} forall} bind def +/MLshow { currentpoint stroke M + 0 exch R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MRshow { currentpoint stroke M + exch dup MFwidth neg 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MCshow { currentpoint stroke M + exch dup MFwidth -2 div 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/XYsave { [( ) 1 2 true false 3 ()] } bind def +/XYrestore { [( ) 1 2 true false 4 ()] } bind def +end +%%EndProlog +gnudict begin +gsave +50 50 translate +0.050 0.050 scale +0 setgray +newpath +(Helvetica) findfont 140 scalefont setfont +gsave % colour palette begin +/maxcolors 0 def +/HSV2RGB { exch dup 0.0 eq {pop exch pop dup dup} % achromatic gray + { /HSVs exch def /HSVv exch def 6.0 mul dup floor dup 3 1 roll sub + /HSVf exch def /HSVi exch cvi def /HSVp HSVv 1.0 HSVs sub mul def + /HSVq HSVv 1.0 HSVs HSVf mul sub mul def + /HSVt HSVv 1.0 HSVs 1.0 HSVf sub mul sub mul def + /HSVi HSVi 6 mod def 0 HSVi eq {HSVv HSVt HSVp} + {1 HSVi eq {HSVq HSVv HSVp}{2 HSVi eq {HSVp HSVv HSVt} + {3 HSVi eq {HSVp HSVq HSVv}{4 HSVi eq {HSVt HSVp HSVv} + {HSVv HSVp HSVq} ifelse} ifelse} ifelse} ifelse} ifelse + } ifelse} def +/Constrain { + dup 0 lt {0 exch pop}{dup 1 gt {1 exch pop} if} ifelse} def +/YIQ2RGB { + 3 copy -1.702 mul exch -1.105 mul add add Constrain 4 1 roll + 3 copy -0.647 mul exch -0.272 mul add add Constrain 5 1 roll + 0.621 mul exch -0.956 mul add add Constrain 3 1 roll } def +/CMY2RGB { 1 exch sub exch 1 exch sub 3 2 roll 1 exch sub 3 1 roll exch } def +/XYZ2RGB { 3 copy -0.9017 mul exch -0.1187 mul add exch 0.0585 mul exch add + Constrain 4 1 roll 3 copy -0.0279 mul exch 1.999 mul add exch + -0.9844 mul add Constrain 5 1 roll -0.2891 mul exch -0.5338 mul add + exch 1.91 mul exch add Constrain 3 1 roll} def +/SelectSpace {ColorSpace (HSV) eq {HSV2RGB}{ColorSpace (XYZ) eq { + XYZ2RGB}{ColorSpace (CMY) eq {CMY2RGB}{ColorSpace (YIQ) eq {YIQ2RGB} + if} ifelse} ifelse} ifelse} def +/InterpolatedColor false def +/cF7 {sqrt} bind def % sqrt(x) +/cF5 {dup dup mul mul} bind def % x^3 +/cF15 {360 mul sin} bind def % sin(360x) +/pm3dround {maxcolors 0 gt {dup 1 ge + {pop 1} {maxcolors mul floor maxcolors 1 sub div} ifelse} if} def +/pm3dGamma 1.0 1.5 div def +/ColorSpace (RGB) def +Color true and { % COLOUR vs. GRAY map + InterpolatedColor { %% Interpolation vs. RGB-Formula + /g {stroke pm3dround /grayv exch def interpolate + SelectSpace setrgbcolor} bind def + }{ + /g {stroke pm3dround dup cF7 Constrain exch dup cF5 Constrain exch cF15 Constrain + SelectSpace setrgbcolor} bind def + } ifelse +}{ + /g {stroke pm3dround pm3dGamma exp setgray} bind def +} ifelse +1.000 UL +LTb +1799 2144 M +[ [(Helvetica) 140.0 0.0 true true 0 (Cactus Benchmark)] +] -46.7 MCshow +1.000 UP +%pm3d_map_begin +.145 g 1080 1038 N -1012 196 337 0 338 0 h +.3461 g 2430 1038 N 0 -196 338 0 0 196 h +.2895 g 2093 1038 N 0 -196 337 0 0 196 h +.2409 g 1755 1038 N 0 -196 338 0 0 196 h +.1871 g 1418 1038 N 0 -196 337 0 0 196 h +.4281 g 2430 1234 N 0 -195 338 0 0 195 h +.3732 g 2093 1234 N 0 -195 337 0 0 195 h +.3224 g 1755 1234 N 0 -195 338 0 0 195 h +.2605 g 1418 1234 N 0 -195 337 0 0 195 h +.1665 g 1080 1038 N 0 -195 675 195 -337 196 h +.6007 g 2430 1429 N 0 -196 338 0 0 196 h +.5298 g 2093 1429 N 0 -196 337 0 0 196 h +.445 g 1755 1429 N 0 -196 338 0 0 196 h +.3559 g 1418 1429 N 0 -196 337 0 0 196 h +.7722 g 2430 1625 N 0 -195 338 0 0 195 h +.7223 g 2093 1625 N 0 -195 337 0 0 195 h +.6415 g 1755 1625 N 0 -195 338 0 0 195 h +.4883 g 1418 1625 N 0 -195 337 0 0 195 h +%pm3d_map_end +1.000 UL +LT0 +1.000 UL +LTb +634 1934 N +634 585 L +2331 0 V +0 1349 V +-2331 0 V +Z stroke +1.000 UL +LTb +744 586 M +0 41 V +0 1307 R +0 -41 V +941 586 M +0 41 V +0 1307 R +0 -41 V +1081 586 M +0 41 V +0 1307 R +0 -41 V +1190 586 M +0 41 V +0 1307 R +0 -41 V +1279 586 M +0 41 V +0 1307 R +0 -41 V +1354 586 M +0 41 V +0 1307 R +0 -41 V +1419 586 M +0 41 V +0 1307 R +0 -41 V +1476 586 M +0 41 V +0 1307 R +0 -41 V +744 586 M +0 82 V +stroke +744 404 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.25)] +] -46.7 MCshow +1.000 UL +LTb +1.000 UL +LTb +744 1934 M +0 -82 V +1081 586 M +0 41 V +0 1307 R +0 -41 V +1279 586 M +0 41 V +0 1307 R +0 -41 V +1419 586 M +0 41 V +0 1307 R +0 -41 V +1527 586 M +0 41 V +0 1307 R +0 -41 V +1616 586 M +0 41 V +0 1307 R +0 -41 V +1691 586 M +0 41 V +0 1307 R +0 -41 V +1756 586 M +0 41 V +0 1307 R +0 -41 V +1812 586 M +0 41 V +0 1307 R +0 -41 V +1081 586 M +0 82 V +stroke +1081 404 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.5)] +] -46.7 MCshow +1.000 UL +LTb +1.000 UL +LTb +1081 1934 M +0 -82 V +1419 586 M +0 41 V +0 1307 R +0 -41 V +1616 586 M +0 41 V +0 1307 R +0 -41 V +1756 586 M +0 41 V +0 1307 R +0 -41 V +1864 586 M +0 41 V +0 1307 R +0 -41 V +1953 586 M +0 41 V +0 1307 R +0 -41 V +2028 586 M +0 41 V +0 1307 R +0 -41 V +2093 586 M +0 41 V +0 1307 R +0 -41 V +2150 586 M +0 41 V +0 1307 R +0 -41 V +1419 586 M +0 82 V +stroke +1419 404 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 1)] +] -46.7 MCshow +1.000 UL +LTb +1.000 UL +LTb +1419 1934 M +0 -82 V +1756 586 M +0 41 V +0 1307 R +0 -41 V +1953 586 M +0 41 V +0 1307 R +0 -41 V +2093 586 M +0 41 V +0 1307 R +0 -41 V +2201 586 M +0 41 V +0 1307 R +0 -41 V +2290 586 M +0 41 V +0 1307 R +0 -41 V +2365 586 M +0 41 V +0 1307 R +0 -41 V +2430 586 M +0 41 V +0 1307 R +0 -41 V +2487 586 M +0 41 V +0 1307 R +0 -41 V +1756 586 M +0 82 V +stroke +1756 404 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 2)] +] -46.7 MCshow +1.000 UL +LTb +1.000 UL +LTb +1756 1934 M +0 -82 V +2093 586 M +0 41 V +0 1307 R +0 -41 V +2290 586 M +0 41 V +0 1307 R +0 -41 V +2430 586 M +0 41 V +0 1307 R +0 -41 V +2539 586 M +0 41 V +0 1307 R +0 -41 V +2627 586 M +0 41 V +0 1307 R +0 -41 V +2703 586 M +0 41 V +0 1307 R +0 -41 V +2768 586 M +0 41 V +0 1307 R +0 -41 V +2825 586 M +0 41 V +0 1307 R +0 -41 V +2093 586 M +0 82 V +stroke +2093 404 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 4)] +] -46.7 MCshow +1.000 UL +LTb +1.000 UL +LTb +2093 1934 M +0 -82 V +2430 586 M +0 41 V +0 1307 R +0 -41 V +2627 586 M +0 41 V +0 1307 R +0 -41 V +2768 586 M +0 41 V +0 1307 R +0 -41 V +2876 586 M +0 41 V +0 1307 R +0 -41 V +2965 586 M +0 41 V +0 1307 R +0 -41 V +2430 586 M +0 82 V +stroke +2430 404 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 8)] +] -46.7 MCshow +1.000 UL +LTb +1.000 UL +LTb +2430 1934 M +0 -82 V +2768 586 M +0 41 V +0 1307 R +0 -41 V +2965 586 M +0 41 V +0 1307 R +0 -41 V +2768 586 M +0 82 V +stroke +2768 404 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 16)] +] -46.7 MCshow +1.000 UL +LTb +1.000 UL +LTb +2768 1934 M +0 -82 V +stroke +LCb setrgbcolor +1800 194 M +[ [(Helvetica) 140.0 0.0 true true 0 (number of MPI processes)] +] -46.7 MCshow +LTb +1.000 UL +LTb +635 649 M +41 0 V +2289 0 R +-41 0 V +635 763 M +41 0 V +2289 0 R +-41 0 V +635 844 M +41 0 V +2289 0 R +-41 0 V +635 907 M +41 0 V +2289 0 R +-41 0 V +635 958 M +41 0 V +2289 0 R +-41 0 V +635 1002 M +41 0 V +2289 0 R +-41 0 V +635 1039 M +41 0 V +2289 0 R +-41 0 V +635 1073 M +41 0 V +2289 0 R +-41 0 V +635 649 M +82 0 V +stroke +526 649 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.25)] +] -46.7 MRshow +1.000 UL +LTb +1.000 UL +LTb +2965 649 M +-82 0 V +635 844 M +41 0 V +2289 0 R +-41 0 V +635 958 M +41 0 V +2289 0 R +-41 0 V +635 1039 M +41 0 V +2289 0 R +-41 0 V +635 1102 M +41 0 V +2289 0 R +-41 0 V +635 1154 M +41 0 V +2289 0 R +-41 0 V +635 1197 M +41 0 V +2289 0 R +-41 0 V +635 1235 M +41 0 V +2289 0 R +-41 0 V +635 1267 M +41 0 V +2289 0 R +-41 0 V +635 844 M +82 0 V +stroke +526 844 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.5)] +] -46.7 MRshow +1.000 UL +LTb +1.000 UL +LTb +2965 844 M +-82 0 V +635 1039 M +41 0 V +2289 0 R +-41 0 V +635 1154 M +41 0 V +2289 0 R +-41 0 V +635 1235 M +41 0 V +2289 0 R +-41 0 V +635 1297 M +41 0 V +2289 0 R +-41 0 V +635 1348 M +41 0 V +2289 0 R +-41 0 V +635 1392 M +41 0 V +2289 0 R +-41 0 V +635 1429 M +41 0 V +2289 0 R +-41 0 V +635 1462 M +41 0 V +2289 0 R +-41 0 V +635 1039 M +82 0 V +stroke +526 1039 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 1)] +] -46.7 MRshow +1.000 UL +LTb +1.000 UL +LTb +2965 1039 M +-82 0 V +635 1235 M +41 0 V +2289 0 R +-41 0 V +635 1348 M +41 0 V +2289 0 R +-41 0 V +635 1429 M +41 0 V +2289 0 R +-41 0 V +635 1492 M +41 0 V +2289 0 R +-41 0 V +635 1543 M +41 0 V +2289 0 R +-41 0 V +635 1587 M +41 0 V +2289 0 R +-41 0 V +635 1625 M +41 0 V +2289 0 R +-41 0 V +635 1658 M +41 0 V +2289 0 R +-41 0 V +635 1235 M +82 0 V +stroke +526 1235 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 2)] +] -46.7 MRshow +1.000 UL +LTb +1.000 UL +LTb +2965 1235 M +-82 0 V +635 1429 M +41 0 V +2289 0 R +-41 0 V +635 1543 M +41 0 V +2289 0 R +-41 0 V +635 1625 M +41 0 V +2289 0 R +-41 0 V +635 1687 M +41 0 V +2289 0 R +-41 0 V +635 1739 M +41 0 V +2289 0 R +-41 0 V +635 1782 M +41 0 V +2289 0 R +-41 0 V +635 1820 M +41 0 V +2289 0 R +-41 0 V +635 1853 M +41 0 V +2289 0 R +-41 0 V +635 1429 M +82 0 V +stroke +526 1429 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 4)] +] -46.7 MRshow +1.000 UL +LTb +1.000 UL +LTb +2965 1429 M +-82 0 V +635 1625 M +41 0 V +2289 0 R +-41 0 V +635 1739 M +41 0 V +2289 0 R +-41 0 V +635 1820 M +41 0 V +2289 0 R +-41 0 V +635 1883 M +41 0 V +2289 0 R +-41 0 V +635 1934 M +41 0 V +2289 0 R +-41 0 V +635 1625 M +82 0 V +stroke +526 1625 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 8)] +] -46.7 MRshow +1.000 UL +LTb +1.000 UL +LTb +2965 1625 M +-82 0 V +635 1820 M +41 0 V +2289 0 R +-41 0 V +635 1934 M +41 0 V +2289 0 R +-41 0 V +635 1820 M +82 0 V +stroke +526 1820 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 16)] +] -46.7 MRshow +1.000 UL +LTb +1.000 UL +LTb +2965 1820 M +-82 0 V +stroke +LCb setrgbcolor +64 1260 M +currentpoint gsave translate 90 rotate 0 0 moveto +[ [(Helvetica) 140.0 0.0 true true 0 (number of OpenMP threads)] +] -46.7 MCshow +grestore +LTb +1.000 UL +LTb +634 1934 N +634 585 L +2331 0 V +0 1349 V +-2331 0 V +Z stroke +stroke gsave %% draw gray scale smooth box +maxcolors 0 gt {/imax maxcolors def} {/imax 1024 def} ifelse +3023 585 translate 117 1349 scale 0 setlinewidth +/ystep 1 imax div def /y0 0 def /ii 0 def +{ y0 g 0 y0 N 1 0 V 0 ystep V -1 0 f +/y0 y0 ystep add def /ii ii 1 add def +ii imax ge {exit} if } loop +grestore 0 setgray +1.000 UL +LTb +3023 585 N +117 0 V +0 1349 V +-117 0 V +0 -1349 V +Z stroke +1.000 UL +LTb +1.000 UL +LTb +3140 585 M +-63 0 V +stroke +3224 585 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0)] +] -46.7 MLshow +1.000 UL +LTb +3023 585 M +63 0 V +54 269 R +-63 0 V +stroke +3224 854 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 5)] +] -46.7 MLshow +1.000 UL +LTb +3023 854 M +63 0 V +54 270 R +-63 0 V +stroke +3224 1124 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 10)] +] -46.7 MLshow +1.000 UL +LTb +3023 1124 M +63 0 V +54 270 R +-63 0 V +stroke +3224 1394 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 15)] +] -46.7 MLshow +1.000 UL +LTb +3023 1394 M +63 0 V +54 270 R +-63 0 V +stroke +3224 1664 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 20)] +] -46.7 MLshow +1.000 UL +LTb +3023 1664 M +63 0 V +54 270 R +-63 0 V +stroke +3224 1934 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 25)] +] -46.7 MLshow +1.000 UL +LTb +3023 1934 M +63 0 V +stroke +LCb setrgbcolor +3602 1259 M +currentpoint gsave translate 90 rotate 0 0 moveto +[ [(Helvetica) 140.0 0.0 true true 0 (time per RHS evaluation [)] +[(Symbol) 140.0 0.0 true true 0 (m)] +[(Helvetica) 140.0 0.0 true true 0 (s])] +] -46.7 MCshow +grestore +LTb +1.000 UP +grestore % colour palette end +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Symbol Helvetica diff --git a/Carpet/CarpetWeb/scaling-improved/openmp.gnuplot b/Carpet/CarpetWeb/scaling-improved/openmp.gnuplot new file mode 100644 index 000000000..f0bc72218 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-improved/openmp.gnuplot @@ -0,0 +1,31 @@ +set terminal postscript eps enhanced color colortext +set output "openmp.eps" + +set size 0.5 + +set logscale x +set logscale y + +set title "Cactus Benchmark" +set xlabel "number of MPI processes" +set ylabel "number of OpenMP threads" +set xrange [0.2:24] +set yrange [0.2:24] +set xtics 2 +set ytics 2 +set cbrange [0:] +set cblabel "time per RHS evaluation [{/Symbol m}s]" + +set pm3d map +set pm3d +#set pm3d corners2color c1 + +# 25^3 grid points per core +# 128 time steps +# 9 refinement levels +# a factor 2 because of the Berger-Oliger subcycling +# 4 Runge-Kutta substeps per time step +# 1e6 us per second +sp "< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && ($6==$5 || $6==16) && $8==71) print; }' results-ranger.out | sort -n -k 7 | awk 'BEGIN { print 0, 0, 0, 0, 0.5, 0, 0.5, 0, 100; print 0, 0, 0, 0, 0.5, 0, 1, 0, 100; print 0, 0, 0, 0, 0.5, 0, 2, 0, 100; print 0, 0, 0, 0, 0.5, 0, 4, 0, 100; print 0, 0, 0, 0, 0.5, 0, 8, 0, 100; print 0, 0, 0, 0, 0.5, 0, 16, 0, 100; } { if ($7!=old7) { print \"\"; print 0, 0, 0, 0, 0.5, 0, old7, 0, 100; } old7=$7; print; }';" u ($5/$7):($7):($9/25**3/128/2/4*1e6) notitle + +# TODO: show also ppn-used vs. threads, for mpiprocs=1 diff --git a/Carpet/CarpetWeb/scaling-improved/openmp.pdf b/Carpet/CarpetWeb/scaling-improved/openmp.pdf Binary files differnew file mode 100644 index 000000000..030f5f76a --- /dev/null +++ b/Carpet/CarpetWeb/scaling-improved/openmp.pdf diff --git a/Carpet/CarpetWeb/scaling-improved/results-best.eps b/Carpet/CarpetWeb/scaling-improved/results-best.eps new file mode 100644 index 000000000..bc7e08b28 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-improved/results-best.eps @@ -0,0 +1,854 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: results-best.eps +%%Creator: gnuplot 4.2 patchlevel 4 +%%CreationDate: Thu Mar 26 16:34:37 2009 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 230 176 +%%EndComments +%%BeginProlog +/gnudict 256 dict def +gnudict begin +% +% The following 6 true/false flags may be edited by hand if required +% The unit line width may also be changed +% +/Color true def +/Blacktext false def +/Solid false def +/Dashlength 1 def +/Landscape false def +/Level1 false def +/Rounded false def +/TransparentPatterns false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +% +/vshift -46 def +/dl1 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if +} def +/dl2 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul add } if +} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +Level1 {} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title (results-best.eps) + /Subject (gnuplot plot) + /Creator (gnuplot 4.2 patchlevel 4 ) + /Author (Erik Schnetter) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Thu Mar 26 16:34:37 2009) + /DOCINFO pdfmark +end +} ifelse +% +% Gnuplot Prolog Version 4.2 (August 2006) +% +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/N {newpath moveto} bind def +/Z {closepath} bind def +/C {setrgbcolor} bind def +/f {rlineto fill} bind def +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow {currentpoint stroke M 0 vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def +/DL {Color {setrgbcolor Solid {pop []} if 0 setdash} + {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def +/BL {stroke userlinewidth 2 mul setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/AL {stroke userlinewidth 2 div setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/UL {dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def} def +/PL {stroke userlinewidth setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +% Default Line colors +/LCw {1 1 1} def +/LCb {0 0 0} def +/LCa {0 0 0} def +/LC0 {1 0 0} def +/LC1 {0 1 0} def +/LC2 {0 0 1} def +/LC3 {1 0 1} def +/LC4 {0 1 1} def +/LC5 {1 1 0} def +/LC6 {0 0 0} def +/LC7 {1 0.3 0} def +/LC8 {0.5 0.5 0.5} def +% Default Line Types +/LTw {PL [] 1 setgray} def +/LTb {BL [] LCb DL} def +/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def +/LT0 {PL [] LC0 DL} def +/LT1 {PL [4 dl1 2 dl2] LC1 DL} def +/LT2 {PL [2 dl1 3 dl2] LC2 DL} def +/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def +/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def +/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def +/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def +/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def +/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def +/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def +/Dia {stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt} def +/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt} def +/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke} def +/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt} def +/Star {2 copy Pls Crs} def +/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill} def +/TriUF {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill} def +/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt} def +/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill} def +/Pent {stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt} def +/PentF {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore} def +/Circle {stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt} def +/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def +/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def +/C1 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath} bind def +/C2 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C3 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C4 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C5 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc} bind def +/C6 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C7 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C8 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C9 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath} bind def +/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C11 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C12 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C13 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C14 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc} bind def +/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath} bind def +/Square {dup Rec} bind def +/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def +/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def +/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def +/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def +/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def +/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare} bind def +/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare} bind def +/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def +/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def +/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def +/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def +/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def +/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def +/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def +/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def +/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def +/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def +/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def +/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def +/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def +/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def +/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def +/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def +/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def +/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def +/DiaE {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke} def +/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke} def +/TriUE {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke} def +/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke} def +/PentE {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore} def +/CircE {stroke [] 0 setdash + hpt 0 360 arc stroke} def +/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def +/DiaW {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke} def +/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke} def +/TriUW {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke} def +/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke} def +/PentW {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore} def +/CircW {stroke [] 0 setdash + hpt 0 360 arc Opaque stroke} def +/BoxFill {gsave Rec 1 setgray fill grestore} def +/Density { + /Fillden exch def + currentrgbcolor + /ColB exch def /ColG exch def /ColR exch def + /ColR ColR Fillden mul Fillden sub 1 add def + /ColG ColG Fillden mul Fillden sub 1 add def + /ColB ColB Fillden mul Fillden sub 1 add def + ColR ColG ColB setrgbcolor} def +/BoxColFill {gsave Rec PolyFill} def +/PolyFill {gsave Density fill grestore grestore} def +/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def +% +% PostScript Level 1 Pattern Fill routine for rectangles +% Usage: x y w h s a XX PatternFill +% x,y = lower left corner of box to be filled +% w,h = width and height of box +% a = angle in degrees between lines and x-axis +% XX = 0/1 for no/yes cross-hatch +% +/PatternFill {gsave /PFa [ 9 2 roll ] def + PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate + PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec + gsave 1 setgray fill grestore clip + currentlinewidth 0.5 mul setlinewidth + /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def + 0 0 M PFa 5 get rotate PFs -2 div dup translate + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 M 0 PFs V} for + 0 PFa 6 get ne { + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 2 1 roll M PFs 0 V} for + } if + stroke grestore} def +% +/languagelevel where + {pop languagelevel} {1} ifelse + 2 lt + {/InterpretLevel1 true def} + {/InterpretLevel1 Level1 def} + ifelse +% +% PostScript level 2 pattern fill definitions +% +/Level2PatternFill { +/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} + bind def +/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} +>> matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +/MFshow { + { dup 5 get 3 ge + { 5 get 3 eq {gsave} {grestore} ifelse } + {dup dup 0 get findfont exch 1 get scalefont setfont + [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 + get exch 4 get {show} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq + {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 + get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div + dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get + show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop + pop aload pop M} ifelse }ifelse }ifelse } + ifelse } + forall} bind def +/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } + {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont + 6 get stringwidth pop add} {pop} ifelse} ifelse} forall} bind def +/MLshow { currentpoint stroke M + 0 exch R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MRshow { currentpoint stroke M + exch dup MFwidth neg 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MCshow { currentpoint stroke M + exch dup MFwidth -2 div 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/XYsave { [( ) 1 2 true false 3 ()] } bind def +/XYrestore { [( ) 1 2 true false 4 ()] } bind def +end +%%EndProlog +gnudict begin +gsave +50 50 translate +0.050 0.050 scale +0 setgray +newpath +(Helvetica) findfont 140 scalefont setfont +1.000 UL +LTb +798 448 M +63 0 V +2585 0 R +-63 0 V +stroke +714 448 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0)] +] -46.7 MRshow +1.000 UL +LTb +798 655 M +63 0 V +2585 0 R +-63 0 V +stroke +714 655 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 5)] +] -46.7 MRshow +1.000 UL +LTb +798 861 M +63 0 V +2585 0 R +-63 0 V +stroke +714 861 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 10)] +] -46.7 MRshow +1.000 UL +LTb +798 1068 M +63 0 V +2585 0 R +-63 0 V +stroke +714 1068 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 15)] +] -46.7 MRshow +1.000 UL +LTb +798 1274 M +63 0 V +2585 0 R +-63 0 V +stroke +714 1274 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 20)] +] -46.7 MRshow +1.000 UL +LTb +798 1481 M +63 0 V +2585 0 R +-63 0 V +stroke +714 1481 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 25)] +] -46.7 MRshow +1.000 UL +LTb +798 1687 M +63 0 V +2585 0 R +-63 0 V +stroke +714 1687 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 30)] +] -46.7 MRshow +1.000 UL +LTb +798 1894 M +63 0 V +2585 0 R +-63 0 V +stroke +714 1894 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 35)] +] -46.7 MRshow +1.000 UL +LTb +798 2100 M +63 0 V +2585 0 R +-63 0 V +stroke +714 2100 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 40)] +] -46.7 MRshow +1.000 UL +LTb +888 448 M +0 63 V +0 1589 R +0 -63 V +stroke +888 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 1)] +] -46.7 MCshow +1.000 UL +LTb +1239 448 M +0 63 V +0 1589 R +0 -63 V +stroke +1239 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 4)] +] -46.7 MCshow +1.000 UL +LTb +1590 448 M +0 63 V +0 1589 R +0 -63 V +stroke +1590 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 16)] +] -46.7 MCshow +1.000 UL +LTb +1940 448 M +0 63 V +0 1589 R +0 -63 V +stroke +1940 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 64)] +] -46.7 MCshow +1.000 UL +LTb +2291 448 M +0 63 V +0 1589 R +0 -63 V +stroke +2291 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 256)] +] -46.7 MCshow +1.000 UL +LTb +2642 448 M +0 63 V +0 1589 R +0 -63 V +stroke +2642 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (1k)] +] -46.7 MCshow +1.000 UL +LTb +2993 448 M +0 63 V +0 1589 R +0 -63 V +stroke +2993 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (4k)] +] -46.7 MCshow +1.000 UL +LTb +3343 448 M +0 63 V +0 1589 R +0 -63 V +stroke +3343 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (16k)] +] -46.7 MCshow +1.000 UL +LTb +1.000 UL +LTb +798 2100 N +798 448 L +2648 0 V +0 1652 V +-2648 0 V +Z stroke +LCb setrgbcolor +308 1274 M +currentpoint gsave translate 90 rotate 0 0 moveto +[ [(Helvetica) 140.0 0.0 true true 0 (time per RHS evaluation [)] +[(Symbol) 140.0 0.0 true true 0 (m)] +[(Helvetica) 140.0 0.0 true true 0 (s])] +] -46.7 MCshow +grestore +LTb +LCb setrgbcolor +2122 98 M +[ [(Helvetica) 140.0 0.0 true true 0 (number of cores)] +] -46.7 MCshow +LTb +2122 2310 M +[ [(Helvetica) 140.0 0.0 true true 0 (Cactus Benchmark)] +] -46.7 MCshow +1.000 UP +1.000 UL +LTb +1.000 UP +3.000 UL +LT0 +LTb +2795 1141 M +[ [(Helvetica) 140.0 0.0 true true 0 (Franklin)] +] -46.7 MRshow +LT0 +2879 1141 M +399 0 V +888 966 M +176 150 V +175 251 V +175 82 V +176 72 V +175 47 V +175 52 V +176 -78 V +175 -69 V +176 -74 V +175 -55 V +392 -18 V +134 27 V +888 966 Pls +1064 1116 Pls +1239 1367 Pls +1414 1449 Pls +1590 1521 Pls +1765 1568 Pls +1940 1620 Pls +2116 1542 Pls +2291 1473 Pls +2467 1399 Pls +2642 1344 Pls +3034 1326 Pls +3168 1353 Pls +3078 1141 Pls +1.000 UP +3.000 UL +LT1 +LTb +2795 1001 M +[ [(Helvetica) 140.0 0.0 true true 0 (HLRB II)] +] -46.7 MRshow +LT1 +2879 1001 M +399 0 V +888 966 M +176 256 V +175 231 V +175 108 V +176 104 V +175 160 V +175 149 V +176 -111 V +175 -85 V +176 -18 V +350 155 V +888 966 Crs +1064 1222 Crs +1239 1453 Crs +1414 1561 Crs +1590 1665 Crs +1765 1825 Crs +1940 1974 Crs +2116 1863 Crs +2291 1778 Crs +2467 1760 Crs +2817 1915 Crs +3078 1001 Crs +1.000 UP +3.000 UL +LT2 +LTb +2795 861 M +[ [(Helvetica) 140.0 0.0 true true 0 (Kraken \(NT=1\))] +] -46.7 MRshow +LT2 +2879 861 M +399 0 V +1239 1399 M +175 91 V +176 78 V +175 50 V +175 62 V +176 -79 V +175 -65 V +176 -91 V +175 -53 V +175 33 V +176 -54 V +175 13 V +1239 1399 Star +1414 1490 Star +1590 1568 Star +1765 1618 Star +1940 1680 Star +2116 1601 Star +2291 1536 Star +2467 1445 Star +2642 1392 Star +2817 1425 Star +2993 1371 Star +3168 1384 Star +3078 861 Star +1.000 UP +3.000 UL +LT3 +LTb +2795 721 M +[ [(Helvetica) 140.0 0.0 true true 0 (Queen Bee \(NT=2\))] +] -46.7 MRshow +LT3 +2879 721 M +399 0 V +1064 995 M +175 244 V +175 325 V +176 46 V +175 31 V +175 134 V +176 -7 V +175 43 V +176 -16 V +175 41 V +175 -30 V +1064 995 Box +1239 1239 Box +1414 1564 Box +1590 1610 Box +1765 1641 Box +1940 1775 Box +2116 1768 Box +2291 1811 Box +2467 1795 Box +2642 1836 Box +2817 1806 Box +3078 721 Box +1.000 UP +3.000 UL +LT4 +LTb +2795 581 M +[ [(Helvetica) 140.0 0.0 true true 0 (Ranger \(NT=1\))] +] -46.7 MRshow +LT4 +2879 581 M +399 0 V +888 798 M +176 131 V +175 108 V +175 133 V +176 165 V +175 83 V +175 107 V +176 38 V +175 -3 V +176 5 V +175 16 V +175 -103 V +176 147 V +175 -57 V +103 11 V +888 798 BoxF +1064 929 BoxF +1239 1037 BoxF +1414 1170 BoxF +1590 1335 BoxF +1765 1418 BoxF +1940 1525 BoxF +2116 1563 BoxF +2291 1560 BoxF +2467 1565 BoxF +2642 1581 BoxF +2817 1478 BoxF +2993 1625 BoxF +3168 1568 BoxF +3271 1579 BoxF +3078 581 BoxF +1.000 UL +LTb +798 2100 N +798 448 L +2648 0 V +0 1652 V +-2648 0 V +Z stroke +1.000 UP +1.000 UL +LTb +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Symbol Helvetica diff --git a/Carpet/CarpetWeb/scaling-improved/results-best.gnuplot b/Carpet/CarpetWeb/scaling-improved/results-best.gnuplot new file mode 100644 index 000000000..a6d513861 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-improved/results-best.gnuplot @@ -0,0 +1,28 @@ +set terminal postscript eps enhanced color colortext +set output "results-best.eps" + +set size 0.5 + +set logscale x +set xtics (1, 4, 16, 64, 256, "1k" 1024, "4k" 4096, "16k" 16384) +set xrange [0.7:24576] +set yrange [0:] + +set title "Cactus Benchmark" +set xlabel "number of cores" +set ylabel "time per RHS evaluation [{/Symbol m}s]" + +set key bottom + +# 25^3 grid points per core +# 128 time steps +# 9 refinement levels +# a factor 2 because of the Berger-Oliger subcycling +# 4 Runge-Kutta substeps per time step +# 1e6 us per second +p \ +"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && $7== 1 && $8== 0) print; }' results-franklin.out" u 5:($9/25**3/128/2/4*1e6) t "Franklin" w lp lt 1 lw 3, \ +"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && $7== 1 && $8==10) print; }' results-hlrb2.out" u 5:($9/25**3/128/2/4*1e6) t "HLRB II" w lp lt 2 lw 3, \ +"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && ($6== 4 || $6==$5) && $7== 1 && $8==50) print; }' results-kraken.out" u 5:($9/25**3/128/2/4*1e6) t "Kraken (NT=1)" w lp lt 3 lw 3, \ +"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && ($6== 8 || $6==$5) && $7== 2 && $8== 0) print; }' results-queenbee.out" u 5:($9/25**3/128/2/4*1e6) t "Queen Bee (NT=2)" w lp lt 4 lw 3, \ +"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && ($6==16 || $6==$5) && $7== 1 && $8==71) print; }' results-ranger.out" u 5:($9/25**3/128/2/4*1e6) t "Ranger (NT=1)" w lp lt 5 lw 3 diff --git a/Carpet/CarpetWeb/scaling-improved/results-best.pdf b/Carpet/CarpetWeb/scaling-improved/results-best.pdf Binary files differnew file mode 100644 index 000000000..33914ba94 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-improved/results-best.pdf diff --git a/Carpet/CarpetWeb/scaling-improved/results-best.png b/Carpet/CarpetWeb/scaling-improved/results-best.png Binary files differnew file mode 100644 index 000000000..72ce65072 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-improved/results-best.png diff --git a/Carpet/CarpetWeb/scaling-improved/results-franklin.out b/Carpet/CarpetWeb/scaling-improved/results-franklin.out new file mode 100644 index 000000000..e06898667 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-improved/results-franklin.out @@ -0,0 +1,61 @@ +# Cactus benchmark results +# processes = procs +# nodes = procs / ppn +# +# benchmark steps size machine procs ppn tpp iter walltime cputime +Bench_McLachlan_Carpet_9lev 000128 0016 franklin 000001 01 01 00 46.59141803 46.54692400 +Bench_McLachlan_Carpet_9lev 000128 0016 franklin 000002 02 01 00 64.66142988 64.03200700 +Bench_McLachlan_Carpet_9lev 000128 0016 franklin 000002 02 02 00 106.16554523 106.07061500 +Bench_McLachlan_Carpet_9lev 000128 0016 franklin 000004 04 01 00 99.28665590 97.61407500 +Bench_McLachlan_Carpet_9lev 000128 0016 franklin 000004 04 02 00 138.40062428 137.36857400 +Bench_McLachlan_Carpet_9lev 000128 0016 franklin 000004 04 04 00 185.69085288 185.13554300 +Bench_McLachlan_Carpet_9lev 000128 0016 franklin 000008 04 01 00 134.16131091 131.96025200 +Bench_McLachlan_Carpet_9lev 000128 0016 franklin 000008 04 02 00 193.42913461 191.87198200 +Bench_McLachlan_Carpet_9lev 000128 0016 franklin 000008 04 04 00 254.52130032 253.30783200 +Bench_McLachlan_Carpet_9lev 000128 0016 franklin 000016 04 01 00 146.17235804 144.01698800 +Bench_McLachlan_Carpet_9lev 000128 0016 franklin 000016 04 02 00 206.43724728 204.82077300 +Bench_McLachlan_Carpet_9lev 000128 0016 franklin 000016 04 04 00 349.00458694 347.49770200 +Bench_McLachlan_Carpet_9lev 000128 0020 franklin 000001 01 01 00 109.02620959 108.30275200 +Bench_McLachlan_Carpet_9lev 000128 0020 franklin 000002 02 01 00 153.42561579 152.54552000 +Bench_McLachlan_Carpet_9lev 000128 0020 franklin 000002 02 02 00 205.82838392 205.10481500 +Bench_McLachlan_Carpet_9lev 000128 0020 franklin 000004 04 01 00 200.73065782 198.60041000 +Bench_McLachlan_Carpet_9lev 000128 0020 franklin 000004 04 02 00 312.24916768 310.29545300 +Bench_McLachlan_Carpet_9lev 000128 0020 franklin 000004 04 04 00 413.10681486 410.76164900 +Bench_McLachlan_Carpet_9lev 000128 0020 franklin 000008 04 01 00 226.20393562 223.07393600 +Bench_McLachlan_Carpet_9lev 000128 0020 franklin 000008 04 02 00 308.03878021 305.65912700 +Bench_McLachlan_Carpet_9lev 000128 0020 franklin 000008 04 04 00 497.83455467 495.27092500 +Bench_McLachlan_Carpet_9lev 000128 0020 franklin 000016 04 01 00 243.05851984 240.24699000 +Bench_McLachlan_Carpet_9lev 000128 0020 franklin 000016 04 02 00 334.25339341 330.78065500 +Bench_McLachlan_Carpet_9lev 000128 0020 franklin 000016 04 04 00 555.86645508 552.71452600 +Bench_McLachlan_Carpet_9lev 000128 0025 franklin 000001 01 01 00 200.52615380 200.11651900 +Bench_McLachlan_Carpet_9lev 000128 0025 franklin 000002 02 01 00 258.85028219 257.58810300 +Bench_McLachlan_Carpet_9lev 000128 0025 franklin 000002 02 02 00 376.77956176 374.53139800 +Bench_McLachlan_Carpet_9lev 000128 0025 franklin 000004 04 01 00 356.12734818 352.49403200 +Bench_McLachlan_Carpet_9lev 000128 0025 franklin 000004 04 02 00 467.80149412 464.40499100 +Bench_McLachlan_Carpet_9lev 000128 0025 franklin 000004 04 04 00 703.13283277 698.62764900 +Bench_McLachlan_Carpet_9lev 000128 0025 franklin 000008 04 01 00 387.94961166 383.00392000 +Bench_McLachlan_Carpet_9lev 000128 0025 franklin 000008 04 02 00 529.59994006 524.28075700 +Bench_McLachlan_Carpet_9lev 000128 0025 franklin 000008 04 04 00 827.06824517 821.43530600 +Bench_McLachlan_Carpet_9lev 000128 0025 franklin 000016 04 01 00 415.75278378 411.28570600 +Bench_McLachlan_Carpet_9lev 000128 0025 franklin 000016 04 02 00 600.05137348 593.86910000 +Bench_McLachlan_Carpet_9lev 000128 0025 franklin 000016 04 04 00 999.85881615 992.26602400 +Bench_McLachlan_Carpet_9lev 000128 0025 franklin 000032 04 01 00 433.85825539 429.98283300 +Bench_McLachlan_Carpet_9lev 000128 0025 franklin 000064 04 01 00 454.07660961 451.30421500 +Bench_McLachlan_Carpet_9lev 000128 0025 franklin 000128 04 01 00 423.68280458 420.67826400 +Bench_McLachlan_Carpet_9lev 000128 0025 franklin 000256 04 01 00 396.90142655 393.84460100 +Bench_McLachlan_Carpet_9lev 000128 0025 franklin 000512 04 01 00 368.35541272 365.66287100 +Bench_McLachlan_Carpet_9lev 000128 0025 franklin 001024 04 01 00 347.23339319 344.68554700 +Bench_McLachlan_Carpet_9lev 000128 0025 franklin 004816 04 01 00 339.97812581 337.50111100 +Bench_McLachlan_Carpet_9lev 000128 0025 franklin 008192 04 01 00 350.57442069 348.11775800 +Bench_McLachlan_Carpet_9lev 000128 0030 franklin 000001 01 01 00 342.52737689 341.37732300 +Bench_McLachlan_Carpet_9lev 000128 0030 franklin 000002 02 01 00 411.65423775 409.59765500 +Bench_McLachlan_Carpet_9lev 000128 0030 franklin 000002 02 02 00 675.66905141 672.46602300 +Bench_McLachlan_Carpet_9lev 000128 0030 franklin 000004 04 01 00 540.94369054 532.70927500 +Bench_McLachlan_Carpet_9lev 000128 0030 franklin 000004 04 02 00 788.15172911 781.74488600 +Bench_McLachlan_Carpet_9lev 000128 0030 franklin 000004 04 04 00 1095.25965381 1087.87998700 +Bench_McLachlan_Carpet_9lev 000128 0030 franklin 000008 04 01 00 593.98074484 585.41257700 +Bench_McLachlan_Carpet_9lev 000128 0030 franklin 000008 04 02 00 827.25919771 818.51112900 +Bench_McLachlan_Carpet_9lev 000128 0030 franklin 000008 04 04 00 1241.78931952 1230.92093400 +Bench_McLachlan_Carpet_9lev 000128 0030 franklin 000016 04 01 00 617.07089901 610.27012600 +Bench_McLachlan_Carpet_9lev 000128 0030 franklin 000016 04 02 00 972.72111559 961.15606200 +Bench_McLachlan_Carpet_9lev 000128 0030 franklin 000016 04 04 00 1827.67744350 1814.06942400 diff --git a/Carpet/CarpetWeb/scaling-improved/results-hlrb2.out b/Carpet/CarpetWeb/scaling-improved/results-hlrb2.out new file mode 100644 index 000000000..b0e9853ab --- /dev/null +++ b/Carpet/CarpetWeb/scaling-improved/results-hlrb2.out @@ -0,0 +1,85 @@ +# Cactus benchmark results +# processes = procs +# nodes = procs / ppn +# +# benchmark steps size machine procs ppn tpp iter walltime cputime +Bench_McLachlan_Carpet_1lev 000024 0020 hlrb2 000001 01 01 00 5.13499665 5.14400000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000001 01 01 00 186.91880655 185.61600000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000002 02 01 00 220.20438910 219.11600000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000002 02 02 00 214.55147696 423.92400000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000004 04 01 00 231.18661833 230.90000000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000004 04 02 00 251.77147675 492.43200000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000004 04 04 00 291.56947160 1082.29200000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000008 08 01 00 284.81413913 284.18800000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000008 08 02 00 306.43832397 590.70000000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000008 08 04 00 324.80125213 1212.27600000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000008 08 08 00 369.53091407 2550.59200000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000016 16 01 00 301.74512243 301.32800000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000016 16 02 00 305.04176641 579.66400000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000016 16 04 00 363.74049592 1335.77600000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000016 16 08 00 426.92180514 2849.48800000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000016 16 16 00 474.11036873 5928.32400000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000032 32 01 00 312.45066810 311.97600000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000032 32 02 00 350.20448923 654.86000000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000032 32 04 00 431.81555462 1477.58400000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000032 32 08 00 471.02439666 3095.39600000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000032 32 16 00 628.79774189 7100.15200000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000032 32 32 00 675.18877506 14212.50000000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000064 64 01 00 335.72597265 335.33600000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000064 64 02 00 391.93287492 682.36400000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000064 64 04 00 453.71378946 1517.36000000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000064 64 08 00 540.30726910 3248.62000000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000064 64 16 00 732.82437968 7613.05600000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000064 64 32 00 867.69349027 16565.68400000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000064 64 64 00 1005.85764909 37395.58400000 +Bench_McLachlan_Carpet_9lev 000000 0025 hlrb2 000001 01 01 10 1.29906511 1.20000000 +Bench_McLachlan_Carpet_9lev 000000 0025 hlrb2 000002 02 01 10 2.13740206 2.10400000 +Bench_McLachlan_Carpet_9lev 000000 0025 hlrb2 000004 04 01 10 2.62449074 2.54800000 +Bench_McLachlan_Carpet_9lev 000000 0025 hlrb2 000008 08 01 10 2.21243858 2.19200000 +Bench_McLachlan_Carpet_9lev 000000 0025 hlrb2 000016 16 01 10 2.43998551 2.32800000 +Bench_McLachlan_Carpet_9lev 000000 0025 hlrb2 000032 32 01 10 2.35174751 2.33200000 +Bench_McLachlan_Carpet_9lev 000000 0025 hlrb2 000064 64 01 10 2.89009404 2.89200000 +Bench_McLachlan_Carpet_9lev 000000 0025 hlrb2 000128 128 01 10 2.22359061 2.20000000 +Bench_McLachlan_Carpet_9lev 000000 0025 hlrb2 000256 256 01 10 2.50717616 2.46800000 +Bench_McLachlan_Carpet_9lev 000000 0025 hlrb2 000512 512 01 10 6.91676068 6.71600000 +Bench_McLachlan_Carpet_9lev 000000 0025 hlrb2 001024 1024 01 10 30.94050145 30.87600000 +Bench_McLachlan_Carpet_9lev 000000 0025 hlrb2 002048 2048 01 10 3.83641720 3.80800000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000001 01 01 00 182.51141620 182.02400000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000001 01 01 10 200.79874182 200.18800000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000002 02 01 00 281.35725307 280.12400000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000002 02 01 10 299.81318593 298.43600000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000002 02 02 00 204.77519417 405.15200000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000004 04 01 00 373.53716779 371.05200000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000004 04 01 10 389.50963879 387.18000000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000004 04 02 00 323.96468210 635.69600000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000004 04 04 00 274.13237286 1066.83600000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000008 08 01 00 416.79449534 413.90000000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000008 08 01 10 431.01822519 428.78400000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000008 08 02 00 402.00020862 783.81200000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000008 08 04 00 471.18366361 1798.19600000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000008 08 08 00 345.37232614 2586.30400000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000016 16 01 00 490.85937953 489.64400000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000016 16 01 10 471.45920944 469.04800000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000016 16 02 00 455.23554587 885.59600000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000016 16 04 00 582.81878591 2200.88000000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000016 16 08 00 639.37896895 4726.56800000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000016 16 16 00 485.79755044 6897.66400000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000032 32 01 00 525.12310481 524.21200000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000032 32 01 10 533.41243887 532.36800000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000032 32 02 00 506.58320308 957.85600000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000032 32 04 00 643.36008477 2417.87600000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000032 32 08 00 858.16334009 6280.97200000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000032 32 16 00 1073.52412605 15029.21600000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000032 32 32 00 796.23935318 20802.44000000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000064 64 01 00 595.84084988 595.24800000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000064 64 01 10 591.00428939 590.34400000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000064 64 02 00 599.32032919 1027.06000000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000064 64 04 00 741.07681203 2395.47200000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000064 64 08 00 926.82490373 6575.82000000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000064 64 16 00 1314.07155108 17533.72400000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000064 64 32 00 1355.17224264 33640.83200000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000064 64 64 00 1319.33960485 57778.41600000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000128 128 01 10 548.16778946 547.12800000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000256 256 01 10 515.22758889 513.61200000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000512 512 01 10 508.34639978 505.00800000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 002048 2048 01 10 568.32370758 567.65200000 diff --git a/Carpet/CarpetWeb/scaling-improved/results-kraken.out b/Carpet/CarpetWeb/scaling-improved/results-kraken.out new file mode 100644 index 000000000..f9728c756 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-improved/results-kraken.out @@ -0,0 +1,155 @@ +# Cactus benchmark results +# processes = procs +# nodes = procs / ppn +# +# benchmark steps size machine procs ppn tpp iter walltime cputime +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000001 01 01 33 109.19729781 108.99882800 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000001 01 01 34 109.09158993 108.95080200 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000002 01 01 33 148.00641775 147.46521000 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000002 01 01 34 148.16187906 147.77725300 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000002 02 01 33 102.00947356 101.07031500 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000002 02 01 34 156.70413160 155.81374400 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000002 02 02 33 120.50324011 119.90754000 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000002 02 02 34 120.47982860 120.00346300 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000004 01 01 33 178.69807887 177.90312300 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000004 01 01 34 178.83109379 178.35513800 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000004 02 01 33 125.59497881 124.02373500 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000004 02 01 34 186.82694960 185.61961300 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000004 02 02 33 181.93941998 181.19531200 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000004 02 02 34 181.48260045 180.60730600 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000004 04 01 34 211.47782874 209.34510400 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000004 04 02 34 200.71978760 198.68443700 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000004 04 04 33 149.56758142 148.14525800 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000004 04 04 34 149.55455232 148.19328600 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000008 02 01 33 136.45625806 134.60037200 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000008 02 01 34 209.99556732 208.06101300 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000008 02 02 33 180.95635247 179.98325900 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000008 02 02 34 180.68239951 179.73525700 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000008 04 01 34 237.70729899 234.50266700 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000008 04 02 34 197.34633946 194.59619800 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000008 04 04 33 188.64441633 187.08766200 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000008 04 04 34 188.58916926 187.20766000 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000016 04 01 34 255.59704399 252.35976700 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000016 04 02 34 215.29695988 212.00524800 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000016 04 04 33 215.65991402 213.45737200 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000016 04 04 34 215.44885087 213.58133100 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 016384 04 01 34 247.56583500 238.97092800 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 016384 04 04 34 235.92132401 234.86663400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000001 01 01 33 202.49026227 201.88463000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000001 01 01 34 202.58828378 202.18864100 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000002 01 01 33 264.73202300 264.27650400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000002 01 01 34 264.90249634 264.41650800 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000002 02 01 33 165.44561672 164.02621600 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000002 02 01 34 264.46396589 263.09642300 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000002 02 02 33 214.43991065 212.49327000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000002 02 02 34 214.37821507 212.40132200 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 01 01 33 328.79410410 327.94450300 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 01 01 34 329.11067104 328.30052900 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 02 01 33 206.90042567 204.72480900 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 02 01 34 336.04583859 333.90087900 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 02 02 33 271.49293232 269.68886600 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 02 02 34 271.63745141 270.14490100 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 04 01 34 372.38452768 367.98705000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 04 01 40 372.03597379 367.97498500 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 04 01 41 392.82768083 380.37575900 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 04 01 42 373.66510510 369.27107700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 04 01 50 368.31895638 364.48679000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 04 01 51 389.47344708 376.82760600 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 04 01 52 381.81449485 369.91510800 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 04 02 34 290.58105302 287.16990900 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 04 04 33 249.97653389 247.73548000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 04 04 34 249.93689775 247.75549200 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 02 01 33 221.96153808 219.27369900 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 02 01 34 361.20681596 358.99450800 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 02 02 33 301.06568599 298.90267800 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 02 02 34 300.77219176 298.41466800 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 04 01 34 407.60074544 401.93712300 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 04 01 40 406.22219968 400.48103400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 04 01 41 432.37560892 417.52610000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 04 01 42 406.76333976 401.51711500 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 04 01 50 403.65297389 398.66888300 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 04 01 51 427.29224968 414.18987800 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 04 01 52 421.87990785 407.86147400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 04 02 34 323.52657080 318.13587900 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 04 04 33 285.03661680 281.53359100 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 04 04 34 285.44802928 281.94565700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000016 04 01 34 438.65774727 433.75105700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000016 04 01 40 437.11231232 432.00299900 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000016 04 01 41 471.07068157 458.44064900 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000016 04 01 42 436.67520261 431.73097400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000016 04 01 50 433.79905939 429.07077700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000016 04 01 51 468.87827706 455.78450100 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000016 04 01 52 465.03736973 453.38033300 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000016 04 02 34 368.64797521 362.79467100 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000016 04 04 33 352.07736850 347.05771000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000016 04 04 34 352.05782557 347.29366700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000032 04 01 34 457.92055535 453.76035900 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000032 04 01 40 455.55066156 451.18017200 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000032 04 01 41 498.60762858 489.55061300 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000032 04 01 42 458.02307916 453.80837500 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000032 04 01 50 453.33379769 449.05209000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000032 04 01 51 491.67039084 482.87815000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000032 04 01 52 490.74024415 479.36598700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000032 04 02 34 377.04069376 372.46728400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000032 04 04 34 400.57756186 393.43260000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000064 04 01 34 480.94191217 478.12985600 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000064 04 01 40 481.26686096 478.52986600 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000064 04 01 41 537.32176471 531.71323500 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000064 04 01 42 480.81742573 477.93786000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000064 04 01 43 537.09543371 530.57710700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000064 04 01 50 477.42585325 474.75770700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000064 04 01 51 533.61160135 527.58096600 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000064 04 01 52 543.91181445 536.93353600 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000064 04 02 34 398.29332542 394.60868200 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000064 04 04 34 456.41613126 454.54041600 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000128 04 01 34 450.16913104 447.73999500 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000128 04 01 40 451.70227528 448.60801500 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000128 04 01 41 508.44143081 502.75140000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000128 04 01 42 449.33756542 446.68789900 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000128 04 01 50 446.53416204 443.65970800 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000128 04 01 51 500.59744263 494.36288200 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000128 04 01 52 517.28014588 510.25591400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000128 04 02 34 407.26108623 403.70926900 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000128 04 04 34 451.18516040 450.31215100 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000256 04 01 34 422.14895868 419.53817200 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000256 04 01 40 421.97694206 419.01421600 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000256 04 01 41 475.54798317 470.22535700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000256 04 01 42 421.12047768 418.43815100 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000256 04 01 50 421.50431681 418.52209200 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000256 04 01 51 476.86723900 470.84938700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000256 04 01 52 518.99811196 512.80408400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000256 04 02 34 420.01091719 416.57804300 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000256 04 04 34 453.44058633 452.18426700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000512 04 01 34 389.54352736 386.97619000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000512 04 01 40 390.15875745 387.68823700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000512 04 01 41 454.51942396 450.28011900 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000512 04 01 42 391.22567034 388.69628300 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000512 04 01 50 386.16655254 383.67997000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000512 04 01 51 458.97451353 454.44442800 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000512 04 01 52 490.89922404 485.80636300 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000512 04 02 34 388.41631484 385.63210600 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000512 04 04 34 383.46425056 382.26388500 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 001024 04 01 34 369.72977018 367.19493400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 001024 04 01 40 368.90278816 366.38286900 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 001024 04 01 41 439.54885840 434.64718200 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 001024 04 01 42 369.72414255 367.41096000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 001024 04 01 50 365.84427381 363.40272800 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 001024 04 01 51 436.93441629 431.95500700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 001024 04 01 52 480.04649687 474.67367400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 001024 04 04 34 405.19849849 404.13726000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 002048 04 01 34 353.80410862 351.20992500 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 002048 04 01 50 378.49561858 376.21552700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 002048 04 01 51 476.40951514 471.73747300 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 002048 04 01 52 523.34186959 518.44838400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 002048 04 04 34 388.17184496 387.18421600 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 004096 04 01 34 356.66594577 354.00613500 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 004096 04 01 50 357.60511637 355.38218100 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 004096 04 01 51 484.72250724 480.57803300 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 004096 04 01 52 502.55980611 496.09100500 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 004096 04 04 34 377.75547314 376.76753700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 008192 04 01 34 358.68025899 356.47829200 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 008192 04 01 50 362.58709908 360.02246700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 008192 04 01 51 496.09946489 492.02273600 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 008192 04 01 52 494.35133028 489.53059200 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 008192 04 04 34 377.67238784 376.55554100 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 016384 04 04 34 360.58743620 359.65844000 diff --git a/Carpet/CarpetWeb/scaling-improved/results-kraken.out.old b/Carpet/CarpetWeb/scaling-improved/results-kraken.out.old new file mode 100644 index 000000000..f9728c756 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-improved/results-kraken.out.old @@ -0,0 +1,155 @@ +# Cactus benchmark results +# processes = procs +# nodes = procs / ppn +# +# benchmark steps size machine procs ppn tpp iter walltime cputime +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000001 01 01 33 109.19729781 108.99882800 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000001 01 01 34 109.09158993 108.95080200 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000002 01 01 33 148.00641775 147.46521000 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000002 01 01 34 148.16187906 147.77725300 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000002 02 01 33 102.00947356 101.07031500 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000002 02 01 34 156.70413160 155.81374400 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000002 02 02 33 120.50324011 119.90754000 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000002 02 02 34 120.47982860 120.00346300 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000004 01 01 33 178.69807887 177.90312300 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000004 01 01 34 178.83109379 178.35513800 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000004 02 01 33 125.59497881 124.02373500 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000004 02 01 34 186.82694960 185.61961300 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000004 02 02 33 181.93941998 181.19531200 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000004 02 02 34 181.48260045 180.60730600 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000004 04 01 34 211.47782874 209.34510400 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000004 04 02 34 200.71978760 198.68443700 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000004 04 04 33 149.56758142 148.14525800 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000004 04 04 34 149.55455232 148.19328600 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000008 02 01 33 136.45625806 134.60037200 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000008 02 01 34 209.99556732 208.06101300 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000008 02 02 33 180.95635247 179.98325900 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000008 02 02 34 180.68239951 179.73525700 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000008 04 01 34 237.70729899 234.50266700 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000008 04 02 34 197.34633946 194.59619800 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000008 04 04 33 188.64441633 187.08766200 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000008 04 04 34 188.58916926 187.20766000 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000016 04 01 34 255.59704399 252.35976700 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000016 04 02 34 215.29695988 212.00524800 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000016 04 04 33 215.65991402 213.45737200 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 000016 04 04 34 215.44885087 213.58133100 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 016384 04 01 34 247.56583500 238.97092800 +Bench_McLachlan_Carpet_9lev 000128 0020 kraken 016384 04 04 34 235.92132401 234.86663400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000001 01 01 33 202.49026227 201.88463000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000001 01 01 34 202.58828378 202.18864100 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000002 01 01 33 264.73202300 264.27650400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000002 01 01 34 264.90249634 264.41650800 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000002 02 01 33 165.44561672 164.02621600 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000002 02 01 34 264.46396589 263.09642300 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000002 02 02 33 214.43991065 212.49327000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000002 02 02 34 214.37821507 212.40132200 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 01 01 33 328.79410410 327.94450300 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 01 01 34 329.11067104 328.30052900 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 02 01 33 206.90042567 204.72480900 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 02 01 34 336.04583859 333.90087900 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 02 02 33 271.49293232 269.68886600 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 02 02 34 271.63745141 270.14490100 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 04 01 34 372.38452768 367.98705000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 04 01 40 372.03597379 367.97498500 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 04 01 41 392.82768083 380.37575900 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 04 01 42 373.66510510 369.27107700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 04 01 50 368.31895638 364.48679000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 04 01 51 389.47344708 376.82760600 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 04 01 52 381.81449485 369.91510800 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 04 02 34 290.58105302 287.16990900 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 04 04 33 249.97653389 247.73548000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 04 04 34 249.93689775 247.75549200 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 02 01 33 221.96153808 219.27369900 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 02 01 34 361.20681596 358.99450800 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 02 02 33 301.06568599 298.90267800 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 02 02 34 300.77219176 298.41466800 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 04 01 34 407.60074544 401.93712300 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 04 01 40 406.22219968 400.48103400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 04 01 41 432.37560892 417.52610000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 04 01 42 406.76333976 401.51711500 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 04 01 50 403.65297389 398.66888300 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 04 01 51 427.29224968 414.18987800 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 04 01 52 421.87990785 407.86147400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 04 02 34 323.52657080 318.13587900 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 04 04 33 285.03661680 281.53359100 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 04 04 34 285.44802928 281.94565700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000016 04 01 34 438.65774727 433.75105700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000016 04 01 40 437.11231232 432.00299900 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000016 04 01 41 471.07068157 458.44064900 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000016 04 01 42 436.67520261 431.73097400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000016 04 01 50 433.79905939 429.07077700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000016 04 01 51 468.87827706 455.78450100 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000016 04 01 52 465.03736973 453.38033300 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000016 04 02 34 368.64797521 362.79467100 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000016 04 04 33 352.07736850 347.05771000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000016 04 04 34 352.05782557 347.29366700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000032 04 01 34 457.92055535 453.76035900 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000032 04 01 40 455.55066156 451.18017200 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000032 04 01 41 498.60762858 489.55061300 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000032 04 01 42 458.02307916 453.80837500 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000032 04 01 50 453.33379769 449.05209000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000032 04 01 51 491.67039084 482.87815000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000032 04 01 52 490.74024415 479.36598700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000032 04 02 34 377.04069376 372.46728400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000032 04 04 34 400.57756186 393.43260000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000064 04 01 34 480.94191217 478.12985600 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000064 04 01 40 481.26686096 478.52986600 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000064 04 01 41 537.32176471 531.71323500 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000064 04 01 42 480.81742573 477.93786000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000064 04 01 43 537.09543371 530.57710700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000064 04 01 50 477.42585325 474.75770700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000064 04 01 51 533.61160135 527.58096600 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000064 04 01 52 543.91181445 536.93353600 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000064 04 02 34 398.29332542 394.60868200 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000064 04 04 34 456.41613126 454.54041600 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000128 04 01 34 450.16913104 447.73999500 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000128 04 01 40 451.70227528 448.60801500 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000128 04 01 41 508.44143081 502.75140000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000128 04 01 42 449.33756542 446.68789900 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000128 04 01 50 446.53416204 443.65970800 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000128 04 01 51 500.59744263 494.36288200 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000128 04 01 52 517.28014588 510.25591400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000128 04 02 34 407.26108623 403.70926900 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000128 04 04 34 451.18516040 450.31215100 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000256 04 01 34 422.14895868 419.53817200 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000256 04 01 40 421.97694206 419.01421600 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000256 04 01 41 475.54798317 470.22535700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000256 04 01 42 421.12047768 418.43815100 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000256 04 01 50 421.50431681 418.52209200 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000256 04 01 51 476.86723900 470.84938700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000256 04 01 52 518.99811196 512.80408400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000256 04 02 34 420.01091719 416.57804300 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000256 04 04 34 453.44058633 452.18426700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000512 04 01 34 389.54352736 386.97619000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000512 04 01 40 390.15875745 387.68823700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000512 04 01 41 454.51942396 450.28011900 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000512 04 01 42 391.22567034 388.69628300 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000512 04 01 50 386.16655254 383.67997000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000512 04 01 51 458.97451353 454.44442800 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000512 04 01 52 490.89922404 485.80636300 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000512 04 02 34 388.41631484 385.63210600 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000512 04 04 34 383.46425056 382.26388500 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 001024 04 01 34 369.72977018 367.19493400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 001024 04 01 40 368.90278816 366.38286900 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 001024 04 01 41 439.54885840 434.64718200 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 001024 04 01 42 369.72414255 367.41096000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 001024 04 01 50 365.84427381 363.40272800 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 001024 04 01 51 436.93441629 431.95500700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 001024 04 01 52 480.04649687 474.67367400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 001024 04 04 34 405.19849849 404.13726000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 002048 04 01 34 353.80410862 351.20992500 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 002048 04 01 50 378.49561858 376.21552700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 002048 04 01 51 476.40951514 471.73747300 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 002048 04 01 52 523.34186959 518.44838400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 002048 04 04 34 388.17184496 387.18421600 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 004096 04 01 34 356.66594577 354.00613500 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 004096 04 01 50 357.60511637 355.38218100 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 004096 04 01 51 484.72250724 480.57803300 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 004096 04 01 52 502.55980611 496.09100500 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 004096 04 04 34 377.75547314 376.76753700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 008192 04 01 34 358.68025899 356.47829200 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 008192 04 01 50 362.58709908 360.02246700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 008192 04 01 51 496.09946489 492.02273600 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 008192 04 01 52 494.35133028 489.53059200 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 008192 04 04 34 377.67238784 376.55554100 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 016384 04 04 34 360.58743620 359.65844000 diff --git a/Carpet/CarpetWeb/scaling-improved/results-old.gnuplot b/Carpet/CarpetWeb/scaling-improved/results-old.gnuplot new file mode 100644 index 000000000..640ab4e33 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-improved/results-old.gnuplot @@ -0,0 +1,28 @@ +set terminal postscript eps enhanced color colortext +set output "results-old.eps" + +set size 0.5 + +set logscale x +set xtics (1, 4, 16, 64, 256, "1k" 1024, "4k" 4096, "16k" 16384) +set xrange [0.7:4096] +set yrange [0:30] + +set title "Cactus Benchmark" +set xlabel "number of cores" +set ylabel "time per RHS evaluation [{/Symbol m}s]" + +set parametric +set trange [0:100] + +set key bottom + +# 25^3 grid points per core +# 128 time steps +# 9 refinement levels +# a factor 2 because of the Berger-Oliger subcycling +# 4 Runge-Kutta substeps per time step +# 1e6 us per second +p \ +"KL9_CCT_vacuum.asc" u 1:($4/25**3/128/2/4*1e6) t "Ranger, Sept. 2008" w lp lw 3, \ +16, t t "node boundary" diff --git a/Carpet/CarpetWeb/scaling-improved/results-openmp-node.gnuplot b/Carpet/CarpetWeb/scaling-improved/results-openmp-node.gnuplot new file mode 100644 index 000000000..c3cb5e0b1 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-improved/results-openmp-node.gnuplot @@ -0,0 +1,30 @@ +set terminal postscript eps enhanced color colortext +set output "results-openmp-node.eps" + +set size 0.5 + +set logscale x +set xtics 2 +set xrange [0.7:24] +set yrange [0:] + +set title "Cactus Benchmark (using 1 node)" +set xlabel "number of MPI processes" +set ylabel "time per RHS evaluation [{/Symbol m}s]" + +set key bottom + +# 25^3 grid points per core +# 128 time steps +# 9 refinement levels +# a factor 2 because of the Berger-Oliger subcycling +# 4 Runge-Kutta substeps per time step +# 1e6 us per second +p \ +"results-ranger-openmp-node.out" u 5:($9/25**3/128/2/4*1e6) t "Ranger (varying NT)" w lp lw 3 +#p \ +#"results-ranger-openmp-node.out" u 5:($7== 1 ? $9/25**3/128/2/4*1e6 : 0/0) t "Ranger (NT=1)" w lp lw 3, \ +#"results-ranger-openmp-node.out" u 5:($7== 2 ? $9/25**3/128/2/4*1e6 : 0/0) t "Ranger (NT=2)" w lp lw 3, \ +#"results-ranger-openmp-node.out" u 5:($7== 4 ? $9/25**3/128/2/4*1e6 : 0/0) t "Ranger (NT=4)" w lp lw 3, \ +#"results-ranger-openmp-node.out" u 5:($7== 8 ? $9/25**3/128/2/4*1e6 : 0/0) t "Ranger (NT=8)" w lp lw 3, \ +#"results-ranger-openmp-node.out" u 5:($7==16 ? $9/25**3/128/2/4*1e6 : 0/0) t "Ranger (NT=16)" w lp lw 3 diff --git a/Carpet/CarpetWeb/scaling-improved/results-openmp-procs.gnuplot b/Carpet/CarpetWeb/scaling-improved/results-openmp-procs.gnuplot new file mode 100644 index 000000000..f39e8dac7 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-improved/results-openmp-procs.gnuplot @@ -0,0 +1,24 @@ +set terminal postscript eps enhanced color colortext +set output "results-openmp-procs.eps" + +set size 0.5 + +set logscale x +set xtics 2 +set xrange [0.7:24] +set yrange [0:] + +set title "Cactus Benchmark (using 16 cores)" +set xlabel "number of allocated nodes" +set ylabel "time per RHS evaluation [{/Symbol m}s]" + +set key bottom + +# 25^3 grid points per core +# 128 time steps +# 9 refinement levels +# a factor 2 because of the Berger-Oliger subcycling +# 4 Runge-Kutta substeps per time step +# 1e6 us per second +p \ +"results-ranger-openmp-procs.out" u ($5/$6):($9/25**3/128/2/4*1e6) t "Ranger (varying NT)" w lp lw 3 diff --git a/Carpet/CarpetWeb/scaling-improved/results-queenbee.out b/Carpet/CarpetWeb/scaling-improved/results-queenbee.out new file mode 100644 index 000000000..5db4b6512 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-improved/results-queenbee.out @@ -0,0 +1,64 @@ +# Cactus benchmark results +# processes = procs +# nodes = procs / ppn +# +# benchmark steps size machine procs ppn tpp iter walltime cputime +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000001 01 01 00 192.41465856 192.19000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000002 01 01 00 247.58707602 247.54000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000002 02 01 00 252.84641560 252.63000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000002 02 02 00 211.89443066 423.22000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000004 01 01 00 291.86994262 291.58000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000004 02 01 00 299.71507797 299.27000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000004 02 02 00 284.05902364 560.60000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000004 04 01 00 327.73749532 327.60000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000004 04 02 00 306.53941308 601.71000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000004 04 04 00 266.50271884 1047.06000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000008 01 01 00 334.87156639 334.98000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000008 02 01 00 341.38289479 341.18000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000008 02 02 00 329.95559572 650.56000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000008 04 01 00 363.86975480 363.84000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000008 04 02 00 347.63124832 685.44000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000008 04 04 00 349.35187769 1372.93000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000008 08 01 00 472.02766403 471.96000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000008 08 02 00 432.37333332 848.06000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000008 08 04 00 405.74953017 1589.56000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000008 08 08 00 311.92569237 2418.38000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000016 02 01 00 376.39248101 376.05000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000016 02 02 00 360.33294887 704.33000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000016 04 01 00 391.21701541 391.10000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000016 04 02 00 376.96218700 738.11000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000016 04 04 00 427.00053038 1655.09000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000016 08 01 00 487.31315479 487.13000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000016 08 02 00 450.30715053 886.20000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000016 08 04 00 478.74580880 1858.89000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000016 08 08 00 451.08012243 3476.24000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000032 04 01 00 412.51873882 412.45000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000032 04 02 00 397.65224627 781.26000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000032 04 04 00 494.58752844 1893.86000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000032 08 01 00 521.08718036 520.56000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000032 08 02 00 462.28543603 901.44000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000032 08 04 00 536.74782493 2071.99000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000032 08 08 00 553.78660053 4207.04000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000064 08 01 00 534.01307232 534.02000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000064 08 02 00 514.00439649 964.46000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000064 08 04 00 589.64245797 2178.76000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000064 08 08 00 648.65108784 4776.36000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000128 08 01 00 521.74439626 521.24000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000128 08 02 00 511.19930447 956.29000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000128 08 04 00 619.28712022 2143.82000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000128 08 08 00 695.10842290 5124.03000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000256 08 01 00 514.35862553 514.12000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000256 08 02 00 528.11674355 977.45000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000256 08 04 00 625.20248372 2171.54000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000256 08 08 00 750.10765112 5297.43000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000512 08 01 00 508.68920159 508.38000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000512 08 02 00 521.84319640 969.64000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000512 08 04 00 595.94903104 2098.18000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000512 08 08 00 820.56607938 4984.09000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 001024 08 01 00 483.79867738 483.14000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 001024 08 02 00 537.76884637 990.30000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 001024 08 04 00 619.06761756 2145.23000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 001024 08 08 00 794.11657260 5014.59000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 002048 08 02 00 526.11768787 968.65000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 002048 08 04 00 624.46017058 2173.93000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 002048 08 08 00 751.06089897 4937.30000000 diff --git a/Carpet/CarpetWeb/scaling-improved/results-ranger-openmp-node.out b/Carpet/CarpetWeb/scaling-improved/results-ranger-openmp-node.out new file mode 100644 index 000000000..8e2712572 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-improved/results-ranger-openmp-node.out @@ -0,0 +1,20 @@ + +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000001 01 01 71 135.63270587 135.40044100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000002 02 01 71 186.41453722 186.15565600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 04 01 71 228.27816767 228.01424800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 01 71 279.55088937 277.57337300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 71 343.44192950 342.61343200 + +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000002 02 02 71 141.51701227 281.73762600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 04 02 71 209.97284200 414.55791500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 02 71 242.58659491 479.38994400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 02 71 291.96150409 576.26800500 + +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 04 04 71 257.80748799 1012.46728000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 04 71 328.67928713 1292.82478800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 04 71 379.51016019 1481.32459900 + +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 08 71 291.50975695 2271.12593300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 08 71 403.38112376 3126.97943500 + +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 16 71 406.25572666 6185.22252200 diff --git a/Carpet/CarpetWeb/scaling-improved/results-ranger-openmp-procs.out b/Carpet/CarpetWeb/scaling-improved/results-ranger-openmp-procs.out new file mode 100644 index 000000000..3f100e361 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-improved/results-ranger-openmp-procs.out @@ -0,0 +1,20 @@ + +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 01 01 71 292.02127953 289.43007600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 02 01 71 295.99160188 294.03436700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 04 01 71 296.42845066 294.75439600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 01 71 300.73102585 300.54277200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 71 343.44192950 342.61343200 + +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 02 02 71 274.05435093 535.64549700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 04 02 71 274.77006856 537.34158400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 02 71 267.87115046 526.22084900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 02 71 291.96150409 576.26800500 + +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 04 04 71 380.32455437 1480.97253000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 04 71 397.65546045 1544.81659500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 04 71 379.51016019 1481.32459900 + +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 08 71 414.87878198 3210.36063800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 08 71 403.38112376 3126.97943500 + +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 16 71 406.25572666 6185.22252200 diff --git a/Carpet/CarpetWeb/scaling-improved/results-ranger.out b/Carpet/CarpetWeb/scaling-improved/results-ranger.out new file mode 100644 index 000000000..f3d2cd6f5 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-improved/results-ranger.out @@ -0,0 +1,731 @@ +# Cactus benchmark results +# processes = procs +# nodes = procs / ppn +# +# benchmark steps size machine procs ppn tpp iter walltime cputime +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000001 01 01 00 203.34181004 203.17269400 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000002 01 01 00 216.48381171 214.91743400 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000004 01 01 00 224.79743401 222.67391600 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000004 02 01 00 225.55916500 223.26195300 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000004 02 02 00 227.73820433 448.76805100 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000004 04 01 00 250.15185397 247.88349900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000004 04 02 00 228.08169453 449.48009900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000004 04 04 00 217.13066064 842.24063700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000008 01 01 00 233.10094116 229.75036200 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000008 02 01 00 233.19921911 229.78636000 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000008 02 02 00 244.37134496 477.12581700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000008 04 01 00 258.23619396 254.33989300 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000008 04 02 00 244.90335442 477.42583900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000008 04 04 00 249.90565515 961.74010700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000008 08 01 00 269.97584784 266.77666800 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000008 08 02 00 263.66399936 514.15613600 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000008 08 04 00 251.26438961 962.74016300 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000008 08 08 00 451.35835544 1759.58196800 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 01 01 00 251.79208282 248.25551300 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 02 01 00 250.43519239 247.35945700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 02 02 00 262.76931463 499.52722200 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 04 01 00 272.61282118 268.75279900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 04 02 00 263.38652800 497.81511700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 04 04 00 267.84285138 1015.03143900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 08 01 00 283.82180268 280.40552400 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 08 02 00 276.44695753 529.56109800 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 08 04 00 269.95993217 1019.53972100 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 16 02 00 302.52861096 580.79630100 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 16 04 00 287.96300239 1085.59584900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 16 08 00 506.02417788 1958.31438900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 16 16 00 945.63415069 3586.02411700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 02 01 00 244.06186508 240.83505200 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 02 02 00 311.07908856 545.71810200 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 04 01 00 260.56962053 256.90806000 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 04 02 00 307.42328503 541.94187400 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 08 02 00 329.18879068 579.17619800 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 08 04 00 320.86426466 1168.51303200 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 08 08 00 557.53919876 2063.66497100 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 16 01 00 301.34188177 297.53859700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 16 02 00 355.17583551 633.57159300 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 16 04 00 341.13174056 1237.64134900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 16 08 00 569.41086980 2091.24669300 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 16 16 00 1033.12306375 3830.38338700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000064 04 01 00 289.06331326 285.16581900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000064 04 02 00 352.71452486 598.60540800 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000064 04 04 00 362.43147997 1209.49558600 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000064 08 01 00 304.82141249 300.97080700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000064 08 02 00 357.45966333 615.11044000 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000064 08 04 00 364.19004945 1221.94837000 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000064 16 02 00 410.85168504 676.29426200 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000064 16 04 00 389.78656087 1289.66060200 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000064 16 08 00 617.16478157 2196.09324100 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000064 16 16 00 1122.14518604 3964.89579300 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000128 08 01 00 283.19449419 279.26945200 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000128 08 02 00 354.73297941 638.81991800 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000128 08 04 00 351.54334233 1171.76523100 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000128 08 08 00 686.13575692 2212.90629800 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000128 16 01 00 314.41209947 309.90736600 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000128 16 02 00 381.45197367 685.53884100 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000128 16 04 00 381.18182537 1250.76617500 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000128 16 16 00 1238.58164954 4001.79410300 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000256 16 01 00 321.26949165 317.55183900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000256 16 02 00 353.36466413 627.80722700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000256 16 04 00 394.88733847 1258.84668200 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000256 16 08 00 750.20929978 2398.59789600 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000256 16 16 00 1296.49837951 4002.73814800 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000512 16 01 00 330.05376020 328.70453600 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000512 16 02 00 370.45905646 641.72410300 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000512 16 04 00 463.38659104 1306.92167900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000512 16 08 00 817.68327319 2451.90123900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000512 16 16 00 1392.72301206 4172.90078600 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 001024 16 01 00 327.57180887 326.18838700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 001024 16 02 00 393.14333660 665.91761700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 001024 16 04 00 460.19393866 1323.99474200 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 001024 16 08 00 829.87244544 2422.70740900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 001024 16 16 00 1417.12743675 4216.83553800 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 002048 16 01 00 336.75282418 335.08493800 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 002048 16 02 00 415.28737663 659.84523800 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 002048 16 04 00 461.46395478 1308.48578000 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 002048 16 08 00 824.18623915 2315.60871300 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 002048 16 16 00 1773.87495286 4689.15305600 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 004096 16 01 00 345.42287805 344.43352700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 004096 16 02 00 456.01397646 731.16169900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 004096 16 04 00 468.62811576 1321.83061000 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 004096 16 08 00 781.69233130 2354.10312300 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 008192 16 02 00 408.13220878 671.70598400 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 008192 16 04 00 435.55672982 1382.01036700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 008192 16 08 00 824.13038674 2327.15343400 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 008192 16 16 00 1644.94038777 4342.18337400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 15 1.99500456 1.73611200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 16 2.00825253 1.71611100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 17 1.99534991 1.74410700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 18 1.92537351 1.72410800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 19 1.80289350 1.67210600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 20 1.89577949 1.72410400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 21 2.03105967 1.73610600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 22 1.98644780 1.70410400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 23 1.98241529 1.72811000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 24 2.09280068 1.74410900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 25 1.72968587 1.72010700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 26 1.83753688 1.66410200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 32 1.76542921 1.71211000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 33 1.70881499 1.68010700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 34 1.71809744 1.72410700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 35 1.92583941 1.92412000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 36 2.60543477 1.84011200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 37 1.78591132 1.67610600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 38 1.67977806 1.65610300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 39 1.71200809 1.68410800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 40 1.92712333 1.71610600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 45 10.92630000 10.82467500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 46 202.63338200 50.85917400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 47 10.95013800 10.73666800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 60 13.47732400 13.25682900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 61 11.09817600 11.08468800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 62 13.52589500 13.27283100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 63 13.51054200 13.21682600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 64 11.08019700 11.07269300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 65 12.79806000 12.49678500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 66 11.67222800 11.50471500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 68 11.02299500 10.90468000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 69 12.30104200 12.03675200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 70 11.51838900 11.09269500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 71 11.67129800 11.41671600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 15 1.85304780 1.82811700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 16 2.01170792 1.84011400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 17 2.03905799 2.02812900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 18 2.03484985 1.84811400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 19 1.89138905 1.81611400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 20 1.88166371 1.86011400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 21 1.85964446 1.85211800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 22 1.88492482 1.87211600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 23 1.89094756 1.88011500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 24 2.19453134 1.84011900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 25 2.15761771 1.87611600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 26 1.89103346 1.85611700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 32 1.89248386 1.86011400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 33 2.09446628 1.84811300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 34 1.94313465 1.84011200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 35 1.91670404 1.87211900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 36 1.93606592 1.90011600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 37 1.82418737 1.80011200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 38 1.85275587 1.81611200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 39 1.89841448 1.87211900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 40 2.24104077 1.92011800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 45 12.05363100 11.94074500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 46 153.75240200 38.76242300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 47 12.12808900 12.11676100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 60 14.92394500 14.78492700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 61 12.12349400 12.10075400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 62 14.80466800 14.74892300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 63 14.96187400 14.76092000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 64 12.12595700 12.12475500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 65 14.30293200 14.16088700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 66 13.13248600 13.04481600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 68 11.91711700 11.90874800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 69 13.52738500 13.50084500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 70 12.10463500 12.10076100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 71 12.51535400 12.43277500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 15 2.14613841 2.13613300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 16 2.08964146 2.07213000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 17 2.23050875 2.22414000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 18 2.45300750 2.42815000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 19 2.69288940 2.66816700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 20 2.30087397 2.26413900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 21 2.71575292 2.69617000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 22 2.27281504 2.25213900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 23 2.89347846 2.86417800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 24 2.74981965 2.75217300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 25 2.43014465 2.41215200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 26 2.27919672 2.19213600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 32 2.51603498 2.49615300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 33 2.34132568 2.24014300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 34 2.19736293 2.14013200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 35 2.42015784 2.16013200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 36 2.19682006 2.18013500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 37 2.47760253 2.47215200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 38 2.09433999 2.05612900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 39 2.15514387 2.13613200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 40 2.23896073 2.21614100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 45 10.95491800 10.87668200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 46 106.99900000 27.63373000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 47 10.66279400 10.57666300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 60 16.02752500 15.98900000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 61 11.20916600 11.15670000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 62 15.88848200 15.86499100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 63 15.97672400 15.93699700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 64 11.44016900 11.21270800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 65 16.10954400 15.98500300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 66 13.21578600 13.20082600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 68 10.71742600 10.70867100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 69 13.56445000 13.52484800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 70 11.25670200 11.16469700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 71 11.90071800 11.63672700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 15 2.44970802 2.26414000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 16 2.44833974 2.32414800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 17 2.17747496 2.13212900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 18 2.17540596 2.14813400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 19 2.22853039 2.21214100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 20 2.25197693 2.24414200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 21 2.39005092 2.35214700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 22 2.21986902 2.19213900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 23 2.22432535 2.22013800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 24 2.34639108 2.32014600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 25 2.22560016 2.19613700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 26 2.31736788 2.28814300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 32 2.33359981 2.31614200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 33 2.07182797 2.03212500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 34 2.33560754 2.32414700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 35 2.19612642 2.09213100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 36 2.19244615 2.16413500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 37 2.56025559 2.53615900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 38 2.14005742 2.10413400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 39 2.21802727 2.19213500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 40 2.34475534 2.23213900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 45 10.59146700 10.47665100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 46 121.83194400 31.24195100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 47 9.74507300 9.73260600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 61 10.81497000 10.58865900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 62 15.83085700 15.80098800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 63 16.00367800 15.98499700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 64 10.68756500 10.54865800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 65 15.84196900 15.81298400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 66 14.56524400 14.53291100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 68 10.19511200 10.18463500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 69 15.11225800 15.08894100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 70 10.60586400 10.56865700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 71 11.36569300 11.30870500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 15 2.61408830 2.59216400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 16 2.38613506 2.36814600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 17 2.65185052 2.63216400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 18 2.21687388 2.21614200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 19 2.46240048 2.31214300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 20 2.46646909 2.46415100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 21 2.57484497 2.56415900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 22 2.65125207 2.62016000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 23 2.49789271 2.49615600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 24 2.46372185 2.44414900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 25 2.49743606 2.34014800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 26 2.53578516 2.46815600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 32 2.32310441 2.33614600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 33 2.56218035 2.55615800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 34 2.20594374 2.18413700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 35 2.36721832 2.37214800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 36 2.66904334 2.66416600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 37 2.66352913 2.64016100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 38 2.33906610 2.33214500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 39 2.36094293 2.33214600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 40 2.50301425 2.42415400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 45 10.54430300 10.50866100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 46 105.94739300 26.98968800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 47 10.16426200 10.14063600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 61 10.65739500 10.62066700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 62 16.37545900 16.34101900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 63 16.53941800 16.50903400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 64 11.19909400 11.17269800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 65 16.05018200 15.99299800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 66 18.35528100 18.28514800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 68 10.25009600 10.23264100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 69 19.74344600 19.55722000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 70 10.69282400 10.68066800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 71 11.11411900 11.08069000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 23 2.77533373 2.72417000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 24 3.47726487 3.45621600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 25 7.75072005 7.74448500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 26 2.78908377 2.76417400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 32 2.50527371 2.47615500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 33 2.84105095 2.84017600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 34 2.38207440 2.37614700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 35 2.48143756 2.46815400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 36 2.52331640 2.47615600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 37 2.48741660 2.45215200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 38 2.69686531 2.56816000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 39 2.43263093 2.39615100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 40 2.63556658 2.61216400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 45 10.70063300 10.44465300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 47 10.23449000 10.22063700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 63 17.44569300 17.40108600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 65 16.34998700 16.31701600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 66 25.81468100 25.64560200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 66 32.28495700 32.28201600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 66 34.81439500 34.63816500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 66 34.96018700 34.65416800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 68 10.12227100 10.11663300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 69 27.51798900 27.31770500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 71 13.30935100 12.96880600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 23 2.70602361 2.68016800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 24 2.82725128 2.82817600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 25 2.71012373 2.64816500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 26 2.70717850 2.66416700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 32 2.80160223 2.80017500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 33 2.96337194 2.94818500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 34 2.44735784 2.42415500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 35 2.92295252 2.88017700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 36 2.84464568 2.47215300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 38 2.47655275 2.48015500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 39 2.36914912 2.30414100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 42 10.24891600 9.95662400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 52 10.04778200 9.97662400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 63 17.51489100 17.46509400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 65 16.74508900 16.51303500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 71 10.68492600 10.54465500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 23 3.64010966 3.64423000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 24 3.75214619 3.70422900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 25 3.54584343 3.52822100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 26 3.33211255 3.22020200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 32 3.52961315 3.53621800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 33 2.77292498 2.72416800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 34 2.44419424 2.45215200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 35 2.62340227 2.00412400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 36 2.55986319 2.41615100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 37 2.50177845 2.52415600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 38 2.29403566 2.28414100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 39 2.21099217 2.17613500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 59 19.20047400 18.75317000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 60 19.44039300 19.17319900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 63 19.68925600 19.28920800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 65 18.39071800 18.36115100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 69 77.17565300 76.88080800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 71 10.14661700 9.86061600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 004096 16 01 32 3.02414120 3.01619100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 004096 16 01 33 2.82916677 2.81217700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 004096 16 01 34 2.73830927 2.70416900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 004096 16 01 35 3.13103430 3.08419400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 004096 16 01 36 3.62117172 2.96818500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 004096 16 01 37 3.07523643 3.05219100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 004096 16 01 38 9.34603220 9.33258200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 004096 16 01 39 4.41087391 4.40027600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 004096 16 01 71 10.41400200 9.96062700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 008192 16 01 32 19.03294052 19.03318900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 008192 16 01 33 3.20325611 3.18420100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 008192 16 01 34 3.64873286 3.63622900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 008192 16 01 35 5.76824320 5.74435900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 008192 16 01 36 4.06577632 3.83224100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 008192 16 01 37 4.00333875 3.99624700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 008192 16 01 38 3.47725648 3.44421500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 008192 16 01 39 4.64220864 3.98825000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 012288 16 01 37 7.63925136 7.62847900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 012288 16 01 38 4.95942385 4.92830900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 012288 16 01 39 6.55097068 5.95237300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000001 01 01 00 122.54106532 122.43964000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000001 01 01 70 137.91245362 137.53659500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000001 01 01 71 135.63270587 135.40044100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000002 01 01 00 183.05137779 182.34740400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000002 01 01 70 187.30018361 186.34765600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000002 01 01 71 185.75841382 184.67950200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000002 02 01 00 180.00077328 179.96324900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000002 02 01 70 188.91985668 188.72779100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000002 02 01 71 186.41453722 186.15565600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000002 02 02 00 129.85302923 258.85217000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000002 02 02 70 139.97521767 278.69341900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000002 02 02 71 141.51701227 281.73762600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 01 01 00 236.26691144 234.90266100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 01 01 70 236.73086903 234.96268500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 01 01 71 229.82467734 228.02229000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 02 01 00 236.15145878 235.09065900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 02 01 70 240.49140858 239.34294100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 02 01 71 232.66685038 231.09043800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 02 02 00 216.99292067 426.67066900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 02 02 70 217.82767517 428.97080600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 02 02 71 216.73058569 426.98272200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 04 01 00 248.75942817 248.53554600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 04 01 70 232.06587985 231.78249500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 04 01 71 228.27816767 228.01424800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 04 02 00 214.19796909 422.93842400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 04 02 70 220.67594718 435.16720400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 04 02 71 209.97284200 414.55791500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 04 04 00 225.72213129 891.25570400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 04 04 70 257.72389956 1015.82752300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 04 04 71 257.80748799 1012.46728000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 01 01 00 274.82082107 272.30100200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 01 01 70 288.00210531 285.37783300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 01 01 71 274.44160638 271.89699400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 02 01 00 273.54665117 271.10493300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 02 01 70 286.84754310 284.44175300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 02 01 71 265.18844890 262.77241500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 02 02 00 271.56964828 531.53722400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 02 02 70 258.95359301 506.47966600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 02 02 71 246.48077225 483.78221200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 04 01 00 288.28569852 286.34586800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 04 01 70 282.58045572 280.80555200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 04 01 71 270.86291599 269.04481700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 04 02 00 271.14896550 530.75718300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 04 02 70 257.72701692 505.51159700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 04 02 71 249.47188872 489.49062600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 04 04 00 322.88345290 1264.75505300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 04 04 70 328.14615812 1287.45648300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 04 04 71 321.18477198 1262.11486800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 01 00 297.04119270 296.97457100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 01 70 287.90201298 287.66194600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 01 71 279.55088937 277.57337300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 02 00 285.83271012 561.34306600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 02 71 242.58659491 479.38994400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 04 00 320.14915635 1255.83848600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 04 70 320.23161459 1253.39429600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 04 71 328.67928713 1292.82478800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 08 00 448.40270118 1763.57421700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 08 70 292.77910061 2273.21404200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 08 71 291.50975695 2271.12593300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 01 01 00 301.51189092 299.24667900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 01 01 70 303.41105413 300.74280200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 01 01 71 292.02127953 289.43007600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 02 01 00 301.62872519 299.57471400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 02 01 70 309.30955111 307.18317000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 02 01 71 295.99160188 294.03436700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 02 02 00 309.13612524 597.00130800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 02 02 70 288.63654603 562.76319700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 02 02 71 274.05435093 535.64549700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 04 01 00 318.14699887 316.27575400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 04 01 70 303.45030848 302.42288800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 04 01 71 296.42845066 294.75439600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 04 02 00 309.54233248 602.84166500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 04 02 70 295.24449971 575.24799300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 04 02 71 274.77006856 537.34158400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 04 04 00 417.05867436 1607.25245900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 04 04 70 409.92962198 1583.87495800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 04 04 71 380.32455437 1480.97253000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 01 00 323.18693460 323.06420400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 01 70 310.41332580 309.94337800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 01 71 300.73102585 300.54277200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 02 00 328.35249656 635.21967600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 02 70 284.72961366 558.63492700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 02 71 267.87115046 526.22084900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 04 00 418.01371976 1606.47240400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 04 70 405.35986899 1569.39808900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 04 71 397.65546045 1544.81659500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 08 00 726.72729222 2703.58096900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 08 70 407.85024613 3166.64991000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 08 71 414.87878198 3210.36063800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 00 360.43062715 359.66248400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 01 362.41548137 362.25466100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 02 359.46430584 358.82244000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 03 360.40211611 359.69846600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 04 361.60963682 360.76253200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 05 362.19089131 361.76658000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 06 362.14195383 361.62658800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 07 362.09293188 361.56259000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 08 363.41700161 362.63865000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 11 361.72727898 360.91055500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 27 362.05011972 361.62260700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 29 369.80960707 356.04224300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 30 372.54992350 360.49454200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 31 372.06669911 371.12721500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 69 350.95761078 350.33787100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 70 351.63983979 350.51789600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 71 343.44192950 342.61343200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 02 00 340.94451255 667.23371500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 02 71 291.96150409 576.26800500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 04 00 440.90069490 1696.21401700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 04 01 443.54903601 1698.69415800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 04 02 440.82711267 1688.11348200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 04 03 441.00726498 1691.36168700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 04 71 379.51016019 1481.32459900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 08 00 698.48752227 2602.79866000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 08 70 413.90443403 3212.12476500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 08 71 403.38112376 3126.97943500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 16 00 795.00396901 3094.41337900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 16 70 387.08693269 5906.86915500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 16 71 406.25572666 6185.22252200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 02 01 00 326.04384389 324.21627800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 02 01 70 337.57346556 335.35695900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 02 01 71 318.80304607 316.93181800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 02 02 00 333.07253875 644.93227800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 02 02 70 316.28406517 610.91020600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 02 02 71 298.15574373 578.73616000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 04 01 00 333.26932616 331.41269600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 04 01 71 313.61524679 311.77549800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 04 02 00 333.52000621 645.64032800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 04 02 71 291.33919633 566.53543500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 04 04 00 515.54133086 1943.80147900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 04 04 70 469.89494876 1810.14911700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 04 04 71 442.70702729 1717.55536200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 01 00 343.17846395 341.57736700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 01 70 340.33822680 338.78114200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 01 71 323.65484424 321.82412700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 02 00 351.70758524 675.06217300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 02 70 303.79429054 591.36899800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 02 71 293.69677634 568.89953600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 04 00 517.49909365 1954.82218200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 04 70 479.90251154 1844.21924800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 04 71 451.36163723 1748.77729400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 08 00 1055.86987880 3701.79133200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 08 70 531.59447720 4051.62517600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 08 71 507.91281970 3901.08381400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 00 390.31553259 389.97238000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 01 395.77887272 395.56872000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 02 390.80241660 389.85234000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 03 393.12085078 392.10847000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 04 395.55309817 395.37269600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 05 389.81423140 389.29636700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 06 393.19438455 392.82055600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 07 389.67084561 389.54837000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 08 391.29633427 391.10443000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 11 390.72713972 390.20437800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 27 398.28608009 396.02876700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 29 401.03977832 386.98017800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 30 404.52326881 394.25663200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 31 437.06683003 436.70730500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 69 382.99106211 382.33189300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 70 385.36752349 385.00806600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 71 375.95657347 375.46341200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 02 00 383.35456131 739.23424900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 02 70 349.61876433 680.23451300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 02 71 330.96690626 645.80038000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 04 00 529.41246322 1993.43258400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 04 01 537.49802173 2019.49822300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 04 02 528.36463041 1995.14468600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 04 03 535.24064646 2024.62652000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 04 70 463.23995386 1788.59178500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 04 71 429.58751955 1668.59631500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 08 00 1036.91991574 3633.95512500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 08 70 517.86666666 3962.95167500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 08 71 490.51058293 3782.34037100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 16 00 1346.48871925 4979.39919700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 16 70 649.30993415 9793.99613300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 16 71 656.72454561 9945.57355800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 04 01 00 384.25940026 382.68789800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 04 01 70 360.45498790 359.24643200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 04 01 71 342.33402440 341.78132500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 04 02 00 382.84727695 697.47958200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 04 02 70 347.90248895 645.36434500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 04 02 71 334.55869590 624.17098500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 04 04 00 569.85026179 2026.69067000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 04 04 70 516.36014326 1858.87618300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 04 04 71 487.75067417 1760.92603900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 01 00 386.26711080 386.06411100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 01 70 369.37387139 368.83503800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 01 71 367.71863649 367.61898100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 02 00 397.71097153 728.80952900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 02 70 353.01166100 652.56876500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 02 71 334.64443949 624.41101400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 04 00 572.20395575 2024.86254400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 04 70 534.26113687 1926.90839800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 04 71 504.74932960 1827.05818100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 08 00 1554.26026900 4989.75183300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 08 70 652.86537102 4888.66553100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 08 71 600.04190600 4547.24018500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 00 431.31010658 431.16292700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 01 441.13154728 439.83948700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 02 439.77616612 438.00337900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 03 470.26668580 469.08130800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 04 433.97723262 433.57512000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 05 456.80279773 455.35247100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 06 439.04137152 438.76341500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 07 427.26071143 426.63864600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 08 427.65338278 427.44271400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 11 437.41002050 437.15531900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 27 463.11914877 462.82891700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 29 2328.28713066 2318.43289800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 30 439.66708345 429.57086600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 31 433.89363870 433.76313800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 69 416.50034724 415.57397400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 70 436.47173601 436.23527100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 71 417.34331894 415.39392000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 02 00 427.14753026 787.80123700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 02 70 395.14246498 733.56984800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 02 71 368.67281962 693.36329100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 04 00 591.74799377 2118.78441700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 04 01 606.03415259 2161.71509800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 04 02 606.57069465 2160.00298500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 04 03 609.42726870 2169.47158600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 04 70 528.83833280 1917.96386400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 04 71 488.48490761 1789.02781400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 08 00 1546.19907614 5007.49296100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 08 70 631.67315156 4768.09001100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 08 71 607.70209688 4613.98434600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 16 00 1858.96060941 6315.72272000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 16 70 804.20874109 11734.48135300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 16 71 758.89552524 11259.30765700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 01 00 364.62904241 364.22276400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 01 70 379.81920310 379.69573800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 01 71 396.00827453 395.18070400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 02 00 440.86034016 796.68577000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 02 70 378.40813455 703.46795100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 02 71 413.95889019 758.59540300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 04 00 599.82393181 1979.99574800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 04 70 540.37555430 1850.29964100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 04 71 503.74059530 1748.33327700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 08 00 1788.01350286 5380.72425200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 08 70 678.67737144 5006.15286600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 08 71 642.28407215 4769.47405600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 00 404.99298149 404.92531000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 01 431.08043735 430.71091800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 02 427.04413413 426.51866000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 03 433.42988977 431.87500600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 04 417.92239112 417.67407500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 05 429.07855982 427.86275000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 06 444.53289246 444.34380100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 07 418.31180983 416.85004500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 08 422.25409577 420.87826200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 11 413.70373561 412.40574900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 27 434.69497877 432.78307600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 29 419.66531388 410.26962500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 30 439.21915391 428.73479800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 31 434.61412737 433.23107800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 69 430.70154522 430.00688500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 70 438.41579003 437.91137400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 71 431.95664416 431.63498300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 02 00 472.33713063 856.02950200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 02 70 421.91766016 779.28067100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 02 71 444.19184591 804.59427400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 04 00 628.96382082 2049.31606300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 04 01 642.24077718 2088.03048700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 04 02 689.82439842 2179.65220800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 04 03 670.76284182 2138.68566500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 04 70 559.62706526 1905.94711600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 04 71 545.43877754 1850.99568200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 08 00 1763.50365242 5334.35736900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 08 70 689.57964971 5051.44369100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 08 71 636.76134103 4722.85116200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 16 00 2237.19241006 7141.26229600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 16 70 800.63435093 11681.41004500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 16 71 743.16011415 11063.20738400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 00 416.81854382 416.65008200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 01 424.06496044 423.97053300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 02 435.50639245 435.05518500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 03 452.47220833 452.26825200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 04 420.10070920 419.89827200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 05 419.56022792 419.16618300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 06 435.70374093 433.69513500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 07 426.06771261 425.86660700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 08 416.79365528 416.45001900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 11 426.59510188 424.97055100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 27 422.20029125 421.98237100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 29 451.74462182 442.01958200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 30 429.08432736 421.15431500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 31 431.13646925 430.77493200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 69 428.61061831 428.29876600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 70 443.75125332 443.19964900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 71 430.91503566 430.43491100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 02 00 493.58668537 878.29491000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 02 70 482.44695258 863.17793000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 02 71 440.23977765 802.17812500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 04 00 639.43174573 2105.13555200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 04 02 661.28716728 2138.28163000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 04 03 661.23409816 2155.13869800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 04 70 563.27954600 1899.01067800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 04 71 522.37506390 1795.84423300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 08 00 2007.78571537 5415.25443200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 08 70 761.92412640 5155.37016100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 08 71 697.91456742 4817.27303700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 16 00 2633.87542579 7447.83346100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 16 70 874.75492376 12621.71282100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 16 71 792.28551614 11551.60588900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 00 432.15376549 432.15100400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 01 441.80254700 441.46759900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 02 466.84211560 466.84116400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 03 455.53552447 455.25647500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 04 429.11185786 428.98679500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 27 483.96443456 481.35408500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 29 455.41548594 447.59996800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 30 470.07764442 460.69678200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 31 467.55431002 465.62509900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 69 445.45534276 444.89979100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 71 432.57437397 431.60298900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 02 00 481.33138896 871.35843600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 02 71 450.67742913 816.63503800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 04 00 629.96891954 2108.09974400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 04 01 650.63503716 2168.72754200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 04 02 659.67285103 2198.78939500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 04 03 658.38587013 2192.54502800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 04 71 531.22941551 1840.13502800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 08 00 2182.42442297 5113.60358800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 16 00 2917.04701424 7032.92755200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 01 00 430.57254488 429.10679800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 01 01 437.24065480 436.92725400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 01 02 470.04598340 469.48934500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 01 03 452.01172928 452.10824500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 01 04 435.76047032 435.42721100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 01 27 464.35032003 462.29691900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 01 29 465.19633431 457.62460400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 01 30 452.24806910 439.00743100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 01 31 454.38764507 451.27620200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 01 71 438.81654108 438.29943200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 02 00 503.23849598 902.79243700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 02 71 484.87606011 874.36265300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 04 00 648.85708079 2173.22782000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 04 01 678.40451218 2219.06267800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 04 02 692.87624405 2285.97485100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 04 03 693.47299075 2276.57427800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 04 71 547.03842935 1875.64522500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 08 00 2192.73954194 5185.64406200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 16 00 3194.24190197 7228.57974800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 01 00 474.30655592 473.98159600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 01 01 482.89148177 482.66217100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 01 02 486.30503508 484.72232100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 01 03 486.71080130 485.29434700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 01 27 519.71460553 519.34445800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 01 29 502.39021118 491.49071300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 01 30 466.38628136 456.32853800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 01 31 463.41367294 463.26092800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 01 71 399.03692711 398.91291300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 02 00 516.41948016 932.54231900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 02 71 485.12292738 857.40158900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 04 00 644.42646233 2202.95367200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 04 01 676.88389260 2272.85005100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 04 02 671.90049929 2283.31869400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 04 03 679.92398633 2195.80124500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 04 71 573.36576023 1935.17692900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 08 00 2191.28902042 5020.00972000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 01 30 564.43722649 556.34275800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 01 31 540.58077165 540.06973100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 01 71 455.91632274 455.34043200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 02 00 598.95507284 1056.66598500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 02 71 471.13539881 838.79645300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 04 00 655.37947027 2238.28789400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 04 01 686.16152266 2319.69698300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 04 02 700.27613265 2338.29413500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 04 03 673.68116989 2296.11949200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 04 71 573.91736912 1928.58452600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 08 00 2164.29166218 4984.59550500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 008192 16 01 71 433.90391986 433.17103800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 008192 16 02 00 618.88302882 1096.32051400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 008192 16 02 71 451.53836770 830.44792700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 008192 16 04 00 664.84209040 2282.41064700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 008192 16 04 01 687.25730075 2343.11442100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 008192 16 04 02 686.03115911 2356.38325800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 008192 16 04 03 699.08293954 2368.18000400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 008192 16 04 71 543.33106637 1907.09519100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 008192 16 08 00 2165.34595664 4986.41963400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 012288 16 01 71 437.99540328 436.87931300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 012288 16 02 71 463.45291184 859.60171800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 012288 16 04 01 738.65903756 2406.06234900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 012288 16 04 02 793.26796536 2537.16257600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 012288 16 04 03 710.98674150 2315.13667500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 012288 16 04 71 545.43758320 1926.07638400 diff --git a/Carpet/CarpetWeb/scaling-improved/results-scaled.gnuplot b/Carpet/CarpetWeb/scaling-improved/results-scaled.gnuplot new file mode 100644 index 000000000..018da8749 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-improved/results-scaled.gnuplot @@ -0,0 +1,40 @@ +set terminal postscript eps enhanced color colortext +set output "results-scaled.eps" + +set size 0.5 + +set logscale x +set xtics (1, 4, 16, 64, 256, "1k" 1024, "4k" 4096, "16k" 16384) +set xrange [0.7:24576] +set yrange [0:] + +set title "Cactus Benchmark" +set xlabel "number of cores" +set ylabel "1000 cycles per RHS evaluation" + +set key bottom + +# 25^3 grid points per core +# 128 time steps +# 9 refinement levels +# a factor 2 because of the Berger-Oliger subcycling +# 4 Runge-Kutta substeps per time step +# 1e6 us per second + +# MHz flop/cycle +# Franklin : 2300 4 +# HLRB II : 1600 4 +# Kraken : 2300 4 +# Queen Bee: 2330 4 +# Ranger : 2300 4 +# SiCortex : 700 2 +# Surveyor : 850 4 + +p \ +"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && $7== 1 && $8== 0) print; }' results-franklin.out" u 5:($9/25**3/128/2/4*1e3*(2300*4)) t "Franklin" w lp lt 1 lw 3, \ +"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && $7== 1 && $8==10) print; }' results-hlrb2.out" u 5:($9/25**3/128/2/4*1e3*(1600*4)) t "HLRB II" w lp lt 2 lw 3, \ +"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && ($6== 4 || $6==$5) && $7== 1 && $8==50) print; }' results-kraken.out" u 5:($9/25**3/128/2/4*1e3*(2300*4)) t "Kraken (NT=1)" w lp lt 3 lw 3, \ +"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && ($6== 8 || $6==$5) && $7== 2 && $8== 0) print; }' results-queenbee.out" u 5:($9/25**3/128/2/4*1e3*(2330*4)) t "Queen Bee (NT=2)" w lp lt 4 lw 3, \ +"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && ($6==16 || $6==$5) && $7== 1 && $8==71) print; }' results-ranger.out" u 5:($9/25**3/128/2/4*1e3*(2300*4)) t "Ranger (NT=1)" w lp lt 5 lw 3, \ +"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==20 && ($6== 6 || $6==$5) && $7== 1 && $8== 9) print; }' results-sicortex.out" u 5:($9/20**3/128/2/4*1e3*( 700*2)) t "SiCortex (NT=1)" w lp lt 6 lw 3, \ +"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==13 && ($6== 4 || $6==$5) && $7== 1 && $8==12) print; }' results-surveyor.out" u 5:($9/13**3/128/2/4*1e3*( 850*4)) t "Surveyor (NT=1)" w lp lt 7 lw 3 diff --git a/Carpet/CarpetWeb/scaling-improved/results-sicortex.gnuplot b/Carpet/CarpetWeb/scaling-improved/results-sicortex.gnuplot new file mode 100644 index 000000000..016baa5dd --- /dev/null +++ b/Carpet/CarpetWeb/scaling-improved/results-sicortex.gnuplot @@ -0,0 +1,24 @@ +set terminal postscript eps enhanced color colortext +set output "results-sicortex.eps" + +set size 0.5 + +set logscale x +set xtics (1, 4, 16, 64, 256, "1k" 1024, "4k" 4096, "16k" 16384) +set xrange [0.7:24576] +set yrange [0:] + +set title "Cactus Benchmark" +set xlabel "number of cores" +set ylabel "time per RHS evaluation [{/Symbol m}s]" + +set key bottom + +# 25^3 grid points per core +# 128 time steps +# 9 refinement levels +# a factor 2 because of the Berger-Oliger subcycling +# 4 Runge-Kutta substeps per time step +# 1e6 us per second +p \ +"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==20 && ($6== 6 || $6==$5) && $7== 1 && $8== 9) print; }' results-sicortex.out" u 5:($9/20**3/128/2/4*1e6) t "SiCortex (NT=1)" w lp lt 1 lw 3 diff --git a/Carpet/CarpetWeb/scaling-improved/results-sicortex.out b/Carpet/CarpetWeb/scaling-improved/results-sicortex.out new file mode 100644 index 000000000..e06222dec --- /dev/null +++ b/Carpet/CarpetWeb/scaling-improved/results-sicortex.out @@ -0,0 +1,73 @@ +# Cactus benchmark results +# processes = procs +# nodes = procs / ppn +# +# benchmark steps size machine procs ppn tpp iter walltime cputime +Bench_McLachlan_Carpet_9lev 000016 0020 sicortex 000009 03 01 09 160.97924924 160.90000000 +Bench_McLachlan_Carpet_9lev 000016 0020 sicortex 000012 02 01 09 169.91864061 169.83800000 +Bench_McLachlan_Carpet_9lev 000016 0020 sicortex 000012 06 01 09 216.23553324 216.08500000 +Bench_McLachlan_Carpet_9lev 000016 0020 sicortex 000018 03 01 09 194.86012912 194.76400000 +Bench_McLachlan_Carpet_9lev 000016 0020 sicortex 000018 06 01 09 209.45180464 209.34200000 +Bench_McLachlan_Carpet_9lev 000016 0020 sicortex 000036 06 01 09 218.57264876 218.44500000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000001 01 01 09 577.03916478 576.51300000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000001 01 01 10 584.84026647 584.26700000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000002 01 01 09 1063.53720546 1062.85200000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000002 01 01 10 1073.46784306 1072.78200000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000002 02 01 09 886.65131402 886.22300000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000002 02 01 10 879.80119944 879.30700000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000002 02 02 10 1080.79185009 2041.34200000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000003 01 01 09 1637.62942624 1636.88100000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000003 01 01 10 1658.30288005 1657.51800000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000003 03 01 09 1014.73026657 1014.23700000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000003 03 01 10 991.87625074 991.39300000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000003 03 03 10 1350.42324567 3631.75200000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000004 02 01 09 1555.37436056 1554.86200000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000004 02 01 10 1548.87241173 1548.36700000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000004 02 02 10 1990.86815596 3806.46600000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000006 01 01 09 2953.73614597 2952.76700000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000006 01 01 10 3058.68801212 3057.59900000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000006 02 01 09 2192.51062202 2192.05300000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000006 02 01 10 2160.93858528 2160.50300000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000006 02 02 10 2905.12031174 5576.29500000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000006 03 01 09 1811.42113948 1810.98300000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000006 03 01 10 1783.56004071 1783.05200000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000006 03 03 10 2471.15107203 6736.12300000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000006 06 01 09 1312.47908449 1311.62500000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000006 06 01 10 1256.62998867 1255.75800000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000006 06 02 10 5779.03792477 2972.75600000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000006 06 03 10 7082.16307092 5182.78300000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000006 06 06 10 1992.49259830 9297.26600000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000009 03 01 09 1150.66821122 1150.17600000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000009 03 01 10 1634.80302310 1634.35900000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000009 03 03 10 3699.17927527 10041.99900000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000012 02 01 09 1206.51082349 1206.05800000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000012 02 01 10 2445.88993430 2445.16000000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000012 02 02 10 4919.54614115 9497.25900000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000012 06 01 09 1536.47537231 1535.58100000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000012 06 01 10 1487.75196719 1486.85700000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000012 06 02 10 10569.93517756 5442.61700000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000012 06 03 10 10535.11860585 8066.33800000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000012 06 06 10 3076.13520050 15588.30900000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000018 03 01 09 1386.79382586 1386.32300000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000018 03 01 10 2212.76893878 2212.24700000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000018 03 03 10 6044.88727355 16669.88300000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000018 06 01 09 1490.72433352 1489.82600000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000018 06 01 10 1449.57670307 1448.65400000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000018 06 02 10 9206.37890959 4956.86500000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000018 06 06 10 4521.90128183 23111.06500000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000036 06 01 09 1556.78021669 1555.88500000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000036 06 01 10 1506.67594385 1505.71200000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000036 06 02 10 11190.43197107 5677.51000000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000048 06 01 09 1805.66064787 1804.73900000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000048 06 01 10 1766.07638407 1765.00800000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000096 06 01 09 1729.37948060 1728.85000000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000096 06 01 10 1707.35560274 1706.36200000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000192 06 01 09 1559.74821520 1559.26200000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000192 06 01 10 1535.94878769 1535.01800000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000384 06 01 09 1495.67836642 1495.17400000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000384 06 01 10 1462.88292074 1462.33400000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000768 06 01 09 1342.76321959 1341.88500000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000768 06 01 10 1325.73432612 1324.92600000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 001152 06 01 09 1249.66528654 1249.07300000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 001152 06 01 10 1236.83454061 1236.02500000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 001410 06 01 10 1584.19222546 1583.07200000 diff --git a/Carpet/CarpetWeb/scaling-improved/results-surveyor.gnuplot b/Carpet/CarpetWeb/scaling-improved/results-surveyor.gnuplot new file mode 100644 index 000000000..9501d9233 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-improved/results-surveyor.gnuplot @@ -0,0 +1,24 @@ +set terminal postscript eps enhanced color colortext +set output "results-surveyor.eps" + +set size 0.5 + +set logscale x +set xtics (1, 4, 16, 64, 256, "1k" 1024, "4k" 4096, "16k" 16384) +set xrange [0.7:24576] +set yrange [0:] + +set title "Cactus Benchmark" +set xlabel "number of cores" +set ylabel "time per RHS evaluation [{/Symbol m}s]" + +set key bottom + +# 25^3 grid points per core +# 128 time steps +# 9 refinement levels +# a factor 2 because of the Berger-Oliger subcycling +# 4 Runge-Kutta substeps per time step +# 1e6 us per second +p \ +"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==13 && ($6== 4 || $6==$5) && $7== 1 && $8==12) print; }' results-surveyor.out" u 5:($9/13**3/128/2/4*1e6) t "Surveyor (NT=1)" w lp lt 1 lw 3 diff --git a/Carpet/CarpetWeb/scaling-improved/results-surveyor.out b/Carpet/CarpetWeb/scaling-improved/results-surveyor.out new file mode 100644 index 000000000..48e76387a --- /dev/null +++ b/Carpet/CarpetWeb/scaling-improved/results-surveyor.out @@ -0,0 +1,27 @@ +# Cactus benchmark results +# processes = procs +# nodes = procs / ppn +# +# benchmark steps size machine procs ppn tpp iter walltime cputime +Bench_McLachlan_Carpet_9lev 000016 0013 surveyor 000008 04 01 11 624.81453443 624.81587300 +Bench_McLachlan_Carpet_9lev 000016 0013 surveyor 000016 04 01 11 722.29658222 722.29789900 +Bench_McLachlan_Carpet_9lev 000016 0013 surveyor 000032 04 01 11 856.51289034 856.51418100 +Bench_McLachlan_Carpet_9lev 000016 0013 surveyor 000064 04 01 11 990.83257842 990.83382200 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000004 04 01 12 474.73102307 474.73792200 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000008 04 01 12 587.83344865 587.84038800 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000016 04 01 12 621.02077198 621.02724100 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000032 04 01 12 663.63607979 663.64234500 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000064 04 01 12 704.49752784 704.50370900 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000128 04 01 12 680.81795001 680.82374700 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000256 04 01 12 656.88587546 656.89153500 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000512 04 01 12 629.33461618 629.34111400 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 001024 04 01 12 614.91167831 614.91829700 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 002048 04 01 12 605.89694047 605.90319800 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 004096 04 01 12 610.38005638 610.38661600 +Bench_McLachlan_Carpet_9lev 000128 0016 surveyor 000004 04 01 00 854.29521608 854.30252600 +Bench_McLachlan_Carpet_9lev 000128 0016 surveyor 000004 04 01 03 877.72644567 877.73262500 +Bench_McLachlan_Carpet_9lev 000128 0016 surveyor 000004 04 01 12 856.12551332 856.13247900 +Bench_McLachlan_Carpet_9lev 000128 0020 surveyor 000004 04 01 00 1737.21421933 1737.22385900 +Bench_McLachlan_Carpet_9lev 000128 0020 surveyor 000004 04 01 03 1771.05630064 1771.06430100 +Bench_McLachlan_Carpet_9lev 000128 0025 surveyor 000004 04 01 00 3050.30690145 3050.31646500 +Bench_McLachlan_Carpet_9lev 000128 0025 surveyor 000004 04 01 03 3093.32195663 3093.32960000 diff --git a/Carpet/CarpetWeb/scaling-improved/results-whatif-bw.out b/Carpet/CarpetWeb/scaling-improved/results-whatif-bw.out new file mode 100644 index 000000000..23c5c310a --- /dev/null +++ b/Carpet/CarpetWeb/scaling-improved/results-whatif-bw.out @@ -0,0 +1,12 @@ +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 04 01 51 389.47344708 376.82760600 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 04 01 51 427.29224968 414.18987800 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000016 04 01 51 468.87827706 455.78450100 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000032 04 01 51 491.67039084 482.87815000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000064 04 01 51 533.61160135 527.58096600 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000128 04 01 51 500.59744263 494.36288200 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000256 04 01 51 476.86723900 470.84938700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000512 04 01 51 458.97451353 454.44442800 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 001024 04 01 51 436.93441629 431.95500700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 002048 04 01 51 476.40951514 471.73747300 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 004096 04 01 51 484.72250724 480.57803300 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 008192 04 01 51 496.09946489 492.02273600 diff --git a/Carpet/CarpetWeb/scaling-improved/results-whatif-bwlat.out b/Carpet/CarpetWeb/scaling-improved/results-whatif-bwlat.out new file mode 100644 index 000000000..a3e22a0d1 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-improved/results-whatif-bwlat.out @@ -0,0 +1,12 @@ +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 04 01 52 381.81449485 369.91510800 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 04 01 52 421.87990785 407.86147400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000016 04 01 52 465.03736973 453.38033300 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000032 04 01 52 490.74024415 479.36598700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000064 04 01 52 543.91181445 536.93353600 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000128 04 01 52 517.28014588 510.25591400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000256 04 01 52 518.99811196 512.80408400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000512 04 01 52 490.89922404 485.80636300 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 001024 04 01 52 480.04649687 474.67367400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 002048 04 01 52 523.34186959 518.44838400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 004096 04 01 52 502.55980611 496.09100500 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 008192 04 01 52 494.35133028 489.53059200 diff --git a/Carpet/CarpetWeb/scaling-improved/results-whatif-orig.out b/Carpet/CarpetWeb/scaling-improved/results-whatif-orig.out new file mode 100644 index 000000000..00101ea76 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-improved/results-whatif-orig.out @@ -0,0 +1,12 @@ +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 04 01 50 368.31895638 364.48679000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 04 01 50 403.65297389 398.66888300 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000016 04 01 50 433.79905939 429.07077700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000032 04 01 50 453.33379769 449.05209000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000064 04 01 50 477.42585325 474.75770700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000128 04 01 50 446.53416204 443.65970800 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000256 04 01 50 421.50431681 418.52209200 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000512 04 01 50 386.16655254 383.67997000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 001024 04 01 50 365.84427381 363.40272800 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 002048 04 01 50 378.49561858 376.21552700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 004096 04 01 50 357.60511637 355.38218100 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 008192 04 01 50 362.58709908 360.02246700 diff --git a/Carpet/CarpetWeb/scaling-improved/results-whatif.gnuplot b/Carpet/CarpetWeb/scaling-improved/results-whatif.gnuplot new file mode 100644 index 000000000..ae9ef9df3 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-improved/results-whatif.gnuplot @@ -0,0 +1,32 @@ +set terminal postscript eps enhanced color colortext +set output "results-whatif.eps" + +set size 0.5 + +set logscale x +set xtics (1, 4, 16, 64, 256, "1k" 1024, "4k" 4096, "16k" 16384) +set xrange [0.7:24576] +set yrange [0:] + +set title "Cactus Benchmark (Kraken, NT=1)" +set xlabel "number of cores" +#set ylabel "time per RHS evaluation [{/Symbol m}s]" +set ylabel "wall time increase" + +set key bottom + +# 25^3 grid points per core +# 128 time steps +# 9 refinement levels +# a factor 2 because of the Berger-Oliger subcycling +# 4 Runge-Kutta substeps per time step +# 1e6 us per second +#p \ +#"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && ($6== 4 || $6==$5) && $7== 1 && $8==50) print; }' results-kraken.out" u 5:($9/25**3/128/2/4*1e6) t "original" w lp lt 1 lw 3, \ +#"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && ($6== 4 || $6==$5) && $7== 1 && $8==51) print; }' results-kraken.out" u 5:($9/25**3/128/2/4*1e6) t "bandwidth" w lp lt 2 lw 3, \ +#"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && ($6== 4 || $6==$5) && $7== 1 && $8==52) print; }' results-kraken.out" u 5:($9/25**3/128/2/4*1e6) t "bandwidth+latency" w lp lt 3 lw 3 + +p \ +"< paste results-whatif-orig.out results-whatif-orig.out" u 5:($19/$9) t "original" w lp lt 1 lw 3, \ +"< paste results-whatif-orig.out results-whatif-bw.out" u 5:($19/$9) t "increased BW" w lp lt 2 lw 3, \ +"< paste results-whatif-orig.out results-whatif-bwlat.out" u 5:($19/$9) t "increased BW and LAT" w lp lt 3 lw 3 diff --git a/Carpet/CarpetWeb/scaling-improved/results.gnuplot b/Carpet/CarpetWeb/scaling-improved/results.gnuplot new file mode 100644 index 000000000..83062f7bf --- /dev/null +++ b/Carpet/CarpetWeb/scaling-improved/results.gnuplot @@ -0,0 +1,48 @@ +set terminal postscript eps enhanced color colortext +set output "results.eps" + +#set size 0.5 + +set logscale x +set xtics (1, 4, 16, 64, 256, "1k" 1024, "4k" 4096, "16k" 16384) +set xrange [0.7:24576] +set yrange [0:] + +set title "Cactus Benchmark" +set xlabel "number of cores" +set ylabel "time per RHS evaluation [{/Symbol m}s]" + +set key bottom + +# 25^3 grid points per core +# 128 time steps +# 9 refinement levels +# a factor 2 because of the Berger-Oliger subcycling +# 4 Runge-Kutta substeps per time step +# 1e6 us per second +p \ +"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && $7== 1 && $8==10) print; }' results-hlrb2.out" u 5:($9/25**3/128/2/4*1e6) t "HLRB II" w lp lt 1 lw 3, \ +"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && ($6== 4 || $6==$5) && $7== 1 && $8==50) print; }' results-kraken.out" u 5:($9/25**3/128/2/4*1e6) t "Kraken (NT=1)" w lp lt 2 lw 3, \ +"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && ($6== 8 || $6==$5) && $7== 1 && $8== 0) print; }' results-queenbee.out" u 5:($9/25**3/128/2/4*1e6) t "Queen Bee (NT=1)" w lp lt 3 lw 3, \ +"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && ($6== 8 || $6==$5) && $7== 2 && $8== 0) print; }' results-queenbee.out" u 5:($9/25**3/128/2/4*1e6) t "Queen Bee (NT=2)" w lp lt 3 lw 3, \ +"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && ($6== 8 || $6==$5) && $7== 4 && $8== 0) print; }' results-queenbee.out" u 5:($9/25**3/128/2/4*1e6) t "Queen Bee (NT=4)" w lp lt 3 lw 3, \ +"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && ($6== 8 || $6==$5) && $7== 8 && $8== 0) print; }' results-queenbee.out" u 5:($9/25**3/128/2/4*1e6) t "Queen Bee (NT=8)" w lp lt 3 lw 3, \ +"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && ($6==16 || $6==$5) && $7== 1 && $8==71) print; }' results-ranger.out" u 5:($9/25**3/128/2/4*1e6) t "Ranger (NT=1)" w lp lt 4 lw 3, \ +"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && ($6==16 || $6==$5) && $7== 2 && $8==71) print; }' results-ranger.out" u 5:($9/25**3/128/2/4*1e6) t "Ranger (NT=2)" w lp lt 4 lw 3, \ +"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && ($6==16 || $6==$5) && $7== 4 && $8==71) print; }' results-ranger.out" u 5:($9/25**3/128/2/4*1e6) t "Ranger (NT=4)" w lp lt 4 lw 3 + +# HLRB 2: have results up to 2048 cores; runs with 4080 cores failed, +# reason unknown. Job with updated executable and fewer output files +# submitted; still fails for unknown reason. Could be out of memory. + +# Intrepid: no allocation. + +# Kraken: have results up to 8192 cores; runs with up 18048 cores did +# fail, reason unknown. (out of memory? did work with NT=2 and +# NT=4.) + +# Queen Bee: have results up to 1024 cores; runs with up to 2048 cores +# are submitted. + +# Ranger: have results up to 12288 cores; runs with more cores depend +# on permissions from system administrators. diff --git a/Carpet/CarpetWeb/scaling-improved/results2openmp b/Carpet/CarpetWeb/scaling-improved/results2openmp new file mode 100644 index 000000000..40ad477fc --- /dev/null +++ b/Carpet/CarpetWeb/scaling-improved/results2openmp @@ -0,0 +1,19 @@ +# Cactus benchmark results +# processes = procs +# nodes = procs / ppn +# +# benchmark steps size machine procs ppn tpp iter walltime cputime + + + +# Select output for 16 allocated cores +awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && $5==16 && $8==71) print; }' results-ranger.out | +sort -n -k 7 | +awk '{ if ($7!=old7) print ""; old7=$7; print; }' > results-ranger-openmp-procs.out + + + +# Select output for 1 node +awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && $5/$6==1 && $8==71) print; }' results-ranger.out | +sort -n -k 7 | +awk '{ if ($7!=old7) print ""; old7=$7; print; }' > results-ranger-openmp-node.out diff --git a/Carpet/CarpetWeb/scaling-improved/results2whatif b/Carpet/CarpetWeb/scaling-improved/results2whatif new file mode 100644 index 000000000..54ab149f9 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-improved/results2whatif @@ -0,0 +1,16 @@ +# Cactus benchmark results +# processes = procs +# nodes = procs / ppn +# +# benchmark steps size machine procs ppn tpp iter walltime cputime + + + +# Select output for original +awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && ($6== 4 || $6==$5) && $7== 1 && $8==50) print; }' results-kraken.out > results-whatif-orig.out + +# Select output for increased bandwidth +awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && ($6== 4 || $6==$5) && $7== 1 && $8==51) print; }' results-kraken.out > results-whatif-bw.out + +# Select output for increased bandwidth and latency +awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && ($6== 4 || $6==$5) && $7== 1 && $8==52) print; }' results-kraken.out > results-whatif-bwlat.out diff --git a/Carpet/CarpetWeb/scaling-ranger/findrow b/Carpet/CarpetWeb/scaling-ranger/findrow index 8fa9c2f59..8fa9c2f59 100755..100644 --- a/Carpet/CarpetWeb/scaling-ranger/findrow +++ b/Carpet/CarpetWeb/scaling-ranger/findrow diff --git a/Carpet/CarpetWeb/scaling-ranger/loopprocs b/Carpet/CarpetWeb/scaling-ranger/loopprocs index e7ed327ba..e7ed327ba 100755..100644 --- a/Carpet/CarpetWeb/scaling-ranger/loopprocs +++ b/Carpet/CarpetWeb/scaling-ranger/loopprocs diff --git a/Carpet/CarpetWeb/scaling-surveyor/Makefile b/Carpet/CarpetWeb/scaling-surveyor/Makefile new file mode 100644 index 000000000..a409ba7f3 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-surveyor/Makefile @@ -0,0 +1,36 @@ +all: results-old.pdf results.pdf results-best.pdf results-scaled.pdf results-sicortex.pdf results-surveyor.pdf results-openmp-node.pdf results-openmp-procs.pdf results-whatif.pdf + +results.eps results-best.eps: results-franklin.out results-hlrb2.out results-kraken.out results-queenbee.out results-ranger.out +results-scaled.eps: results-franklin.out results-hlrb2.out results-kraken.out results-queenbee.out results-ranger.out results-sicortex.out results-surveyor.out +results-sicortex.eps: results-sicortex.out +results-surveyor.eps: results-surveyor.out +results-openmp-node.eps: results-ranger-openmp-node.out +results-openmp-procs.eps: results-ranger-openmp-procs.out +results-whatif.eps: results-whatif-orig.out results-whatif-bw.out results-whatif-bwlat.out + +results-ranger-openmp-procs.out results-ranger-openmp-node.out: results2openmp results-ranger.out + ./results2openmp + +results-whatif-orig.out results-whatif-bw.out results-whatif-bwlat.out: results2whatif results-ranger.out + ./results2whatif + +%.eps: %.gnuplot + gnuplot < $*.gnuplot + +%.pdf: %.eps + epstopdf $*.eps + +rsync: + -rsync -Paz franklin.nersc.gov:/project/projectdirs/m152/schnette/franklin/Calpha/results-franklin.out . + -rsync -Paz -e 'ssh numrel02.cct.lsu.edu ssh' lu78kog@hlrb2.lrz-muenchen.de:Calpha/results-hlrb2.out . + -rsync -Paz kraken-pwd.nics.utk.edu:work/Calpha/results-kraken.out . + -rsync -Paz queenbee.loni.org:work/Calpha/results-queenbee.out . + -rsync -Paz ranger.tacc.utexas.edu:work/Calpha/results-ranger.out . + +clean: + rm -f results-old.pdf results.pdf results-best.pdf results-scaled.pdf results-sicortex.pdf results-surveyor.pdf results-openmp-node.pdf results-openmp-procs.pdf results-whatif.pdf + rm -f results-old.eps results.eps results-best.eps results-scaled.eps results-sicortex.eps results-surveyor.eps results-openmp-node.eps results-openmp-procs.eps results-whatif.eps + +.PHONY: all rsync clean + +.PRECIOUS: results-old.eps results.eps results-best.eps results-scaled.eps results-sicortex.eps results-surveyor.eps results-openmp-node.eps results-openmp-procs.eps results-whatif.eps diff --git a/Carpet/CarpetWeb/scaling-surveyor/results-surveyor.eps b/Carpet/CarpetWeb/scaling-surveyor/results-surveyor.eps new file mode 100644 index 000000000..6fed628bd --- /dev/null +++ b/Carpet/CarpetWeb/scaling-surveyor/results-surveyor.eps @@ -0,0 +1,764 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: results-surveyor.eps +%%Creator: gnuplot 4.2 patchlevel 4 +%%CreationDate: Mon Mar 30 10:12:39 2009 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 230 176 +%%EndComments +%%BeginProlog +/gnudict 256 dict def +gnudict begin +% +% The following 6 true/false flags may be edited by hand if required +% The unit line width may also be changed +% +/Color true def +/Blacktext false def +/Solid false def +/Dashlength 1 def +/Landscape false def +/Level1 false def +/Rounded false def +/TransparentPatterns false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +% +/vshift -46 def +/dl1 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if +} def +/dl2 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul add } if +} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +Level1 {} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title (results-surveyor.eps) + /Subject (gnuplot plot) + /Creator (gnuplot 4.2 patchlevel 4 ) + /Author (Erik Schnetter) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Mon Mar 30 10:12:39 2009) + /DOCINFO pdfmark +end +} ifelse +% +% Gnuplot Prolog Version 4.2 (August 2006) +% +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/N {newpath moveto} bind def +/Z {closepath} bind def +/C {setrgbcolor} bind def +/f {rlineto fill} bind def +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow {currentpoint stroke M 0 vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def +/DL {Color {setrgbcolor Solid {pop []} if 0 setdash} + {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def +/BL {stroke userlinewidth 2 mul setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/AL {stroke userlinewidth 2 div setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/UL {dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def} def +/PL {stroke userlinewidth setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +% Default Line colors +/LCw {1 1 1} def +/LCb {0 0 0} def +/LCa {0 0 0} def +/LC0 {1 0 0} def +/LC1 {0 1 0} def +/LC2 {0 0 1} def +/LC3 {1 0 1} def +/LC4 {0 1 1} def +/LC5 {1 1 0} def +/LC6 {0 0 0} def +/LC7 {1 0.3 0} def +/LC8 {0.5 0.5 0.5} def +% Default Line Types +/LTw {PL [] 1 setgray} def +/LTb {BL [] LCb DL} def +/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def +/LT0 {PL [] LC0 DL} def +/LT1 {PL [4 dl1 2 dl2] LC1 DL} def +/LT2 {PL [2 dl1 3 dl2] LC2 DL} def +/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def +/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def +/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def +/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def +/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def +/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def +/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def +/Dia {stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt} def +/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt} def +/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke} def +/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt} def +/Star {2 copy Pls Crs} def +/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill} def +/TriUF {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill} def +/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt} def +/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill} def +/Pent {stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt} def +/PentF {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore} def +/Circle {stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt} def +/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def +/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def +/C1 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath} bind def +/C2 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C3 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C4 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C5 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc} bind def +/C6 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C7 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C8 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C9 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath} bind def +/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C11 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C12 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C13 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C14 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc} bind def +/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath} bind def +/Square {dup Rec} bind def +/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def +/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def +/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def +/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def +/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def +/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare} bind def +/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare} bind def +/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def +/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def +/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def +/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def +/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def +/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def +/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def +/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def +/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def +/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def +/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def +/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def +/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def +/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def +/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def +/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def +/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def +/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def +/DiaE {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke} def +/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke} def +/TriUE {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke} def +/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke} def +/PentE {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore} def +/CircE {stroke [] 0 setdash + hpt 0 360 arc stroke} def +/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def +/DiaW {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke} def +/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke} def +/TriUW {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke} def +/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke} def +/PentW {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore} def +/CircW {stroke [] 0 setdash + hpt 0 360 arc Opaque stroke} def +/BoxFill {gsave Rec 1 setgray fill grestore} def +/Density { + /Fillden exch def + currentrgbcolor + /ColB exch def /ColG exch def /ColR exch def + /ColR ColR Fillden mul Fillden sub 1 add def + /ColG ColG Fillden mul Fillden sub 1 add def + /ColB ColB Fillden mul Fillden sub 1 add def + ColR ColG ColB setrgbcolor} def +/BoxColFill {gsave Rec PolyFill} def +/PolyFill {gsave Density fill grestore grestore} def +/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def +% +% PostScript Level 1 Pattern Fill routine for rectangles +% Usage: x y w h s a XX PatternFill +% x,y = lower left corner of box to be filled +% w,h = width and height of box +% a = angle in degrees between lines and x-axis +% XX = 0/1 for no/yes cross-hatch +% +/PatternFill {gsave /PFa [ 9 2 roll ] def + PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate + PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec + gsave 1 setgray fill grestore clip + currentlinewidth 0.5 mul setlinewidth + /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def + 0 0 M PFa 5 get rotate PFs -2 div dup translate + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 M 0 PFs V} for + 0 PFa 6 get ne { + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 2 1 roll M PFs 0 V} for + } if + stroke grestore} def +% +/languagelevel where + {pop languagelevel} {1} ifelse + 2 lt + {/InterpretLevel1 true def} + {/InterpretLevel1 Level1 def} + ifelse +% +% PostScript level 2 pattern fill definitions +% +/Level2PatternFill { +/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} + bind def +/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} +>> matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +/MFshow { + { dup 5 get 3 ge + { 5 get 3 eq {gsave} {grestore} ifelse } + {dup dup 0 get findfont exch 1 get scalefont setfont + [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 + get exch 4 get {show} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq + {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 + get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div + dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get + show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop + pop aload pop M} ifelse }ifelse }ifelse } + ifelse } + forall} bind def +/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } + {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont + 6 get stringwidth pop add} {pop} ifelse} ifelse} forall} bind def +/MLshow { currentpoint stroke M + 0 exch R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MRshow { currentpoint stroke M + exch dup MFwidth neg 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MCshow { currentpoint stroke M + exch dup MFwidth -2 div 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/XYsave { [( ) 1 2 true false 3 ()] } bind def +/XYrestore { [( ) 1 2 true false 4 ()] } bind def +end +%%EndProlog +gnudict begin +gsave +50 50 translate +0.050 0.050 scale +0 setgray +newpath +(Helvetica) findfont 140 scalefont setfont +1.000 UL +LTb +882 448 M +63 0 V +2501 0 R +-63 0 V +stroke +798 448 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0)] +] -46.7 MRshow +1.000 UL +LTb +882 684 M +63 0 V +2501 0 R +-63 0 V +stroke +798 684 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 50)] +] -46.7 MRshow +1.000 UL +LTb +882 920 M +63 0 V +2501 0 R +-63 0 V +stroke +798 920 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 100)] +] -46.7 MRshow +1.000 UL +LTb +882 1156 M +63 0 V +2501 0 R +-63 0 V +stroke +798 1156 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 150)] +] -46.7 MRshow +1.000 UL +LTb +882 1392 M +63 0 V +2501 0 R +-63 0 V +stroke +798 1392 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 200)] +] -46.7 MRshow +1.000 UL +LTb +882 1628 M +63 0 V +2501 0 R +-63 0 V +stroke +798 1628 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 250)] +] -46.7 MRshow +1.000 UL +LTb +882 1864 M +63 0 V +2501 0 R +-63 0 V +stroke +798 1864 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 300)] +] -46.7 MRshow +1.000 UL +LTb +882 2100 M +63 0 V +2501 0 R +-63 0 V +stroke +798 2100 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 350)] +] -46.7 MRshow +1.000 UL +LTb +969 448 M +0 63 V +0 1589 R +0 -63 V +stroke +969 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 1)] +] -46.7 MCshow +1.000 UL +LTb +1309 448 M +0 63 V +0 1589 R +0 -63 V +stroke +1309 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 4)] +] -46.7 MCshow +1.000 UL +LTb +1649 448 M +0 63 V +0 1589 R +0 -63 V +stroke +1649 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 16)] +] -46.7 MCshow +1.000 UL +LTb +1988 448 M +0 63 V +0 1589 R +0 -63 V +stroke +1988 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 64)] +] -46.7 MCshow +1.000 UL +LTb +2328 448 M +0 63 V +0 1589 R +0 -63 V +stroke +2328 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 256)] +] -46.7 MCshow +1.000 UL +LTb +2667 448 M +0 63 V +0 1589 R +0 -63 V +stroke +2667 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (1k)] +] -46.7 MCshow +1.000 UL +LTb +3007 448 M +0 63 V +0 1589 R +0 -63 V +stroke +3007 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (4k)] +] -46.7 MCshow +1.000 UL +LTb +3347 448 M +0 63 V +0 1589 R +0 -63 V +stroke +3347 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (16k)] +] -46.7 MCshow +1.000 UL +LTb +1.000 UL +LTb +882 2100 N +882 448 L +2564 0 V +0 1652 V +-2564 0 V +Z stroke +LCb setrgbcolor +308 1274 M +currentpoint gsave translate 90 rotate 0 0 moveto +[ [(Helvetica) 140.0 0.0 true true 0 (time per RHS evaluation [)] +[(Symbol) 140.0 0.0 true true 0 (m)] +[(Helvetica) 140.0 0.0 true true 0 (s])] +] -46.7 MCshow +grestore +LTb +LCb setrgbcolor +2164 98 M +[ [(Helvetica) 140.0 0.0 true true 0 (number of cores)] +] -46.7 MCshow +LTb +2164 2310 M +[ [(Helvetica) 140.0 0.0 true true 0 (Cactus Benchmark)] +] -46.7 MCshow +1.000 UP +1.000 UL +LTb +1.000 UP +3.000 UL +LT0 +LTb +2795 861 M +[ [(Helvetica) 140.0 0.0 true true 0 (Surveyor \(gcc\))] +] -46.7 MRshow +LT0 +2879 861 M +399 0 V +1309 1444 M +170 237 V +170 70 V +169 89 V +170 86 V +170 -50 V +170 -50 V +170 -58 V +169 -30 V +170 -19 V +170 10 V +1309 1444 Pls +1479 1681 Pls +1649 1751 Pls +1818 1840 Pls +1988 1926 Pls +2158 1876 Pls +2328 1826 Pls +2498 1768 Pls +2667 1738 Pls +2837 1719 Pls +3007 1729 Pls +3078 861 Pls +1.000 UP +3.000 UL +LT1 +LTb +2795 721 M +[ [(Helvetica) 140.0 0.0 true true 0 (Surveyor \(XL -O3\))] +] -46.7 MRshow +LT1 +2879 721 M +399 0 V +1309 1191 M +170 271 V +170 101 V +169 112 V +170 119 V +170 -59 V +170 -60 V +170 -71 V +169 -21 V +170 -14 V +170 40 V +1309 1191 Crs +1479 1462 Crs +1649 1563 Crs +1818 1675 Crs +1988 1794 Crs +2158 1735 Crs +2328 1675 Crs +2498 1604 Crs +2667 1583 Crs +2837 1569 Crs +3007 1609 Crs +3078 721 Crs +1.000 UP +3.000 UL +LT2 +LTb +2795 581 M +[ [(Helvetica) 140.0 0.0 true true 0 (Surveyor \(XL -O2 NT=1\))] +] -46.7 MRshow +LT2 +2879 581 M +399 0 V +1309 1292 M +170 287 V +170 111 V +169 117 V +170 129 V +170 -64 V +170 -64 V +170 -76 V +169 -27 V +170 -17 V +170 27 V +1309 1292 Star +1479 1579 Star +1649 1690 Star +1818 1807 Star +1988 1936 Star +2158 1872 Star +2328 1808 Star +2498 1732 Star +2667 1705 Star +2837 1688 Star +3007 1715 Star +3078 581 Star +1.000 UL +LTb +882 2100 N +882 448 L +2564 0 V +0 1652 V +-2564 0 V +Z stroke +1.000 UP +1.000 UL +LTb +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Symbol Helvetica diff --git a/Carpet/CarpetWeb/scaling-surveyor/results-surveyor.gnuplot b/Carpet/CarpetWeb/scaling-surveyor/results-surveyor.gnuplot new file mode 100644 index 000000000..8bd18e336 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-surveyor/results-surveyor.gnuplot @@ -0,0 +1,26 @@ +set terminal postscript eps enhanced color colortext +set output "results-surveyor.eps" + +set size 0.5 + +set logscale x +set xtics (1, 4, 16, 64, 256, "1k" 1024, "4k" 4096, "16k" 16384) +set xrange [0.7:24576] +set yrange [0:] + +set title "Cactus Benchmark" +set xlabel "number of cores" +set ylabel "time per RHS evaluation [{/Symbol m}s]" + +set key bottom + +# 25^3 grid points per core +# 128 time steps +# 9 refinement levels +# a factor 2 because of the Berger-Oliger subcycling +# 4 Runge-Kutta substeps per time step +# 1e6 us per second +p \ +"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==13 && ($6== 4 || $6==$5) && $7== 1 && $8==12) print; }' results-surveyor.out" u 5:($9/13**3/128/2/4*1e6) t "Surveyor (gcc)" w lp lt 1 lw 3, \ +"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==13 && ($6== 4 || $6==$5) && $7== 1 && $8==17) print; }' results-surveyor.out" u 5:($9/13**3/128/2/4*1e6) t "Surveyor (XL -O3)" w lp lt 2 lw 3, \ +"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==13 && ($6== 4 || $6==$5) && $7== 1 && $8==24) print; }' results-surveyor.out" u 5:($9/13**3/128/2/4*1e6) t "Surveyor (XL -O2 NT=1)" w lp lt 3 lw 3 diff --git a/Carpet/CarpetWeb/scaling-surveyor/results-surveyor.out b/Carpet/CarpetWeb/scaling-surveyor/results-surveyor.out new file mode 100644 index 000000000..28e221cb7 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-surveyor/results-surveyor.out @@ -0,0 +1,83 @@ +# Cactus benchmark results +# processes = procs +# nodes = procs / ppn +# +# benchmark steps size machine procs ppn tpp iter walltime cputime +Bench_McLachlan_Carpet_9lev 000016 0013 surveyor 000008 04 01 11 624.81453443 624.81587300 +Bench_McLachlan_Carpet_9lev 000016 0013 surveyor 000016 04 01 11 722.29658222 722.29789900 +Bench_McLachlan_Carpet_9lev 000016 0013 surveyor 000032 04 01 11 856.51289034 856.51418100 +Bench_McLachlan_Carpet_9lev 000016 0013 surveyor 000064 04 01 11 990.83257842 990.83382200 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000004 04 01 12 474.73102307 474.73792200 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000004 04 01 13 474.73304176 474.74013000 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000004 04 01 14 353.43284893 353.44015100 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000004 04 01 15 354.80218959 354.80959700 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000004 04 01 16 354.25393677 354.25944800 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000004 04 01 17 354.24795341 354.25368500 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000004 04 01 24 402.40606427 402.43172300 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000004 04 02 24 368.71265006 368.73671500 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000004 04 04 24 423.47243500 423.49637700 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000008 04 01 12 587.83344865 587.84038800 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000008 04 01 13 587.83427477 587.84117200 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000008 04 01 16 483.27703333 483.28223200 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000008 04 01 17 483.28208899 483.28713400 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000008 04 01 24 539.04188609 539.06714400 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000008 04 02 24 478.89512539 478.91900600 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000008 04 04 24 529.95997810 529.98364000 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000016 04 01 12 621.02077198 621.02724100 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000016 04 01 13 621.02325130 621.02977400 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000016 04 01 16 531.48647189 531.49166300 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000016 04 01 17 531.50013304 531.50524200 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000016 04 01 24 591.86942029 591.89477900 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000016 04 02 24 546.27444744 546.29893600 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000016 04 04 24 601.43862677 601.46170600 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000032 04 01 12 663.63607979 663.64234500 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000032 04 01 17 584.96824789 584.97351100 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000032 04 01 24 647.66671872 647.69216700 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000032 04 02 24 583.07553291 583.10012000 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000032 04 04 24 680.23909044 680.26201800 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000064 04 01 12 704.49752784 704.50370900 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000064 04 01 17 641.53944421 641.54449600 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000064 04 01 24 709.36412024 709.38944500 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000064 04 02 24 672.67334104 672.69806600 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000064 04 04 24 733.98860598 734.01216900 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000128 04 01 12 680.81795001 680.82374700 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000128 04 01 17 613.33822298 613.34337200 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000128 04 01 24 678.77758837 678.80245200 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000128 04 02 24 712.54289889 712.56739100 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000128 04 04 24 777.76560855 777.78945600 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000256 04 01 12 656.88587546 656.89153500 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000256 04 01 17 584.75300932 584.75826400 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000256 04 01 24 648.16144729 648.18662400 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000256 04 02 24 726.10420942 726.12888400 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000256 04 04 24 871.23243618 871.25640300 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000512 04 01 12 629.33461618 629.34111400 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000512 04 01 17 550.75939202 550.76536000 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000512 04 01 24 612.12420130 612.15021700 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000512 04 02 24 660.35826373 660.38315900 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 000512 04 04 24 777.18240929 777.20551700 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 001024 04 01 12 614.91167831 614.91829700 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 001024 04 01 17 540.82126856 540.82751900 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 001024 04 01 24 599.33794880 599.36401100 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 001024 04 02 24 726.01640749 726.04139400 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 001024 04 04 24 801.99207425 802.01554500 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 002048 04 01 12 605.89694047 605.90319800 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 002048 04 01 17 534.18274617 534.18838400 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 002048 04 01 24 591.15428829 591.18018600 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 002048 04 02 24 684.06852770 684.09363500 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 002048 04 04 24 786.45297337 786.47702100 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 004096 04 01 12 610.38005638 610.38661600 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 004096 04 01 17 553.31349373 553.31948300 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 004096 04 01 24 603.95671153 603.98307400 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 004096 04 02 24 621.42736435 621.45178700 +Bench_McLachlan_Carpet_9lev 000128 0013 surveyor 004096 04 04 24 723.74744177 723.77182100 +Bench_McLachlan_Carpet_9lev 000128 0016 surveyor 000004 04 01 00 854.29521608 854.30252600 +Bench_McLachlan_Carpet_9lev 000128 0016 surveyor 000004 04 01 03 877.72644567 877.73262500 +Bench_McLachlan_Carpet_9lev 000128 0016 surveyor 000004 04 01 12 856.12551332 856.13247900 +Bench_McLachlan_Carpet_9lev 000128 0016 surveyor 000008 04 01 12 997.28535914 997.29286100 +Bench_McLachlan_Carpet_9lev 000128 0016 surveyor 000016 04 01 12 1033.45034432 1033.45698300 +Bench_McLachlan_Carpet_9lev 000128 0016 surveyor 000032 04 01 12 1080.10361314 1080.11021100 +Bench_McLachlan_Carpet_9lev 000128 0016 surveyor 000064 04 01 12 1126.44904256 1126.45584400 +Bench_McLachlan_Carpet_9lev 000128 0020 surveyor 000004 04 01 00 1737.21421933 1737.22385900 +Bench_McLachlan_Carpet_9lev 000128 0020 surveyor 000004 04 01 03 1771.05630064 1771.06430100 +Bench_McLachlan_Carpet_9lev 000128 0025 surveyor 000004 04 01 00 3050.30690145 3050.31646500 +Bench_McLachlan_Carpet_9lev 000128 0025 surveyor 000004 04 01 03 3093.32195663 3093.32960000 diff --git a/Carpet/CarpetWeb/scaling-surveyor/results-surveyor.pdf b/Carpet/CarpetWeb/scaling-surveyor/results-surveyor.pdf Binary files differnew file mode 100644 index 000000000..2eed66999 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-surveyor/results-surveyor.pdf diff --git a/Carpet/CarpetWeb/scaling-surveyor/results-surveyor.png b/Carpet/CarpetWeb/scaling-surveyor/results-surveyor.png Binary files differnew file mode 100644 index 000000000..76032a1ea --- /dev/null +++ b/Carpet/CarpetWeb/scaling-surveyor/results-surveyor.png diff --git a/Carpet/CarpetWeb/scaling-whatif/Makefile b/Carpet/CarpetWeb/scaling-whatif/Makefile new file mode 100644 index 000000000..a409ba7f3 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-whatif/Makefile @@ -0,0 +1,36 @@ +all: results-old.pdf results.pdf results-best.pdf results-scaled.pdf results-sicortex.pdf results-surveyor.pdf results-openmp-node.pdf results-openmp-procs.pdf results-whatif.pdf + +results.eps results-best.eps: results-franklin.out results-hlrb2.out results-kraken.out results-queenbee.out results-ranger.out +results-scaled.eps: results-franklin.out results-hlrb2.out results-kraken.out results-queenbee.out results-ranger.out results-sicortex.out results-surveyor.out +results-sicortex.eps: results-sicortex.out +results-surveyor.eps: results-surveyor.out +results-openmp-node.eps: results-ranger-openmp-node.out +results-openmp-procs.eps: results-ranger-openmp-procs.out +results-whatif.eps: results-whatif-orig.out results-whatif-bw.out results-whatif-bwlat.out + +results-ranger-openmp-procs.out results-ranger-openmp-node.out: results2openmp results-ranger.out + ./results2openmp + +results-whatif-orig.out results-whatif-bw.out results-whatif-bwlat.out: results2whatif results-ranger.out + ./results2whatif + +%.eps: %.gnuplot + gnuplot < $*.gnuplot + +%.pdf: %.eps + epstopdf $*.eps + +rsync: + -rsync -Paz franklin.nersc.gov:/project/projectdirs/m152/schnette/franklin/Calpha/results-franklin.out . + -rsync -Paz -e 'ssh numrel02.cct.lsu.edu ssh' lu78kog@hlrb2.lrz-muenchen.de:Calpha/results-hlrb2.out . + -rsync -Paz kraken-pwd.nics.utk.edu:work/Calpha/results-kraken.out . + -rsync -Paz queenbee.loni.org:work/Calpha/results-queenbee.out . + -rsync -Paz ranger.tacc.utexas.edu:work/Calpha/results-ranger.out . + +clean: + rm -f results-old.pdf results.pdf results-best.pdf results-scaled.pdf results-sicortex.pdf results-surveyor.pdf results-openmp-node.pdf results-openmp-procs.pdf results-whatif.pdf + rm -f results-old.eps results.eps results-best.eps results-scaled.eps results-sicortex.eps results-surveyor.eps results-openmp-node.eps results-openmp-procs.eps results-whatif.eps + +.PHONY: all rsync clean + +.PRECIOUS: results-old.eps results.eps results-best.eps results-scaled.eps results-sicortex.eps results-surveyor.eps results-openmp-node.eps results-openmp-procs.eps results-whatif.eps diff --git a/Carpet/CarpetWeb/scaling-whatif/results-ranger.out b/Carpet/CarpetWeb/scaling-whatif/results-ranger.out new file mode 100644 index 000000000..f3d2cd6f5 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-whatif/results-ranger.out @@ -0,0 +1,731 @@ +# Cactus benchmark results +# processes = procs +# nodes = procs / ppn +# +# benchmark steps size machine procs ppn tpp iter walltime cputime +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000001 01 01 00 203.34181004 203.17269400 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000002 01 01 00 216.48381171 214.91743400 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000004 01 01 00 224.79743401 222.67391600 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000004 02 01 00 225.55916500 223.26195300 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000004 02 02 00 227.73820433 448.76805100 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000004 04 01 00 250.15185397 247.88349900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000004 04 02 00 228.08169453 449.48009900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000004 04 04 00 217.13066064 842.24063700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000008 01 01 00 233.10094116 229.75036200 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000008 02 01 00 233.19921911 229.78636000 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000008 02 02 00 244.37134496 477.12581700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000008 04 01 00 258.23619396 254.33989300 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000008 04 02 00 244.90335442 477.42583900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000008 04 04 00 249.90565515 961.74010700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000008 08 01 00 269.97584784 266.77666800 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000008 08 02 00 263.66399936 514.15613600 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000008 08 04 00 251.26438961 962.74016300 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000008 08 08 00 451.35835544 1759.58196800 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 01 01 00 251.79208282 248.25551300 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 02 01 00 250.43519239 247.35945700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 02 02 00 262.76931463 499.52722200 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 04 01 00 272.61282118 268.75279900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 04 02 00 263.38652800 497.81511700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 04 04 00 267.84285138 1015.03143900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 08 01 00 283.82180268 280.40552400 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 08 02 00 276.44695753 529.56109800 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 08 04 00 269.95993217 1019.53972100 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 16 02 00 302.52861096 580.79630100 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 16 04 00 287.96300239 1085.59584900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 16 08 00 506.02417788 1958.31438900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 16 16 00 945.63415069 3586.02411700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 02 01 00 244.06186508 240.83505200 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 02 02 00 311.07908856 545.71810200 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 04 01 00 260.56962053 256.90806000 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 04 02 00 307.42328503 541.94187400 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 08 02 00 329.18879068 579.17619800 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 08 04 00 320.86426466 1168.51303200 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 08 08 00 557.53919876 2063.66497100 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 16 01 00 301.34188177 297.53859700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 16 02 00 355.17583551 633.57159300 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 16 04 00 341.13174056 1237.64134900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 16 08 00 569.41086980 2091.24669300 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 16 16 00 1033.12306375 3830.38338700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000064 04 01 00 289.06331326 285.16581900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000064 04 02 00 352.71452486 598.60540800 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000064 04 04 00 362.43147997 1209.49558600 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000064 08 01 00 304.82141249 300.97080700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000064 08 02 00 357.45966333 615.11044000 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000064 08 04 00 364.19004945 1221.94837000 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000064 16 02 00 410.85168504 676.29426200 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000064 16 04 00 389.78656087 1289.66060200 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000064 16 08 00 617.16478157 2196.09324100 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000064 16 16 00 1122.14518604 3964.89579300 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000128 08 01 00 283.19449419 279.26945200 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000128 08 02 00 354.73297941 638.81991800 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000128 08 04 00 351.54334233 1171.76523100 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000128 08 08 00 686.13575692 2212.90629800 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000128 16 01 00 314.41209947 309.90736600 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000128 16 02 00 381.45197367 685.53884100 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000128 16 04 00 381.18182537 1250.76617500 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000128 16 16 00 1238.58164954 4001.79410300 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000256 16 01 00 321.26949165 317.55183900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000256 16 02 00 353.36466413 627.80722700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000256 16 04 00 394.88733847 1258.84668200 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000256 16 08 00 750.20929978 2398.59789600 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000256 16 16 00 1296.49837951 4002.73814800 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000512 16 01 00 330.05376020 328.70453600 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000512 16 02 00 370.45905646 641.72410300 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000512 16 04 00 463.38659104 1306.92167900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000512 16 08 00 817.68327319 2451.90123900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000512 16 16 00 1392.72301206 4172.90078600 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 001024 16 01 00 327.57180887 326.18838700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 001024 16 02 00 393.14333660 665.91761700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 001024 16 04 00 460.19393866 1323.99474200 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 001024 16 08 00 829.87244544 2422.70740900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 001024 16 16 00 1417.12743675 4216.83553800 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 002048 16 01 00 336.75282418 335.08493800 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 002048 16 02 00 415.28737663 659.84523800 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 002048 16 04 00 461.46395478 1308.48578000 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 002048 16 08 00 824.18623915 2315.60871300 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 002048 16 16 00 1773.87495286 4689.15305600 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 004096 16 01 00 345.42287805 344.43352700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 004096 16 02 00 456.01397646 731.16169900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 004096 16 04 00 468.62811576 1321.83061000 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 004096 16 08 00 781.69233130 2354.10312300 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 008192 16 02 00 408.13220878 671.70598400 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 008192 16 04 00 435.55672982 1382.01036700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 008192 16 08 00 824.13038674 2327.15343400 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 008192 16 16 00 1644.94038777 4342.18337400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 15 1.99500456 1.73611200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 16 2.00825253 1.71611100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 17 1.99534991 1.74410700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 18 1.92537351 1.72410800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 19 1.80289350 1.67210600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 20 1.89577949 1.72410400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 21 2.03105967 1.73610600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 22 1.98644780 1.70410400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 23 1.98241529 1.72811000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 24 2.09280068 1.74410900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 25 1.72968587 1.72010700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 26 1.83753688 1.66410200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 32 1.76542921 1.71211000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 33 1.70881499 1.68010700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 34 1.71809744 1.72410700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 35 1.92583941 1.92412000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 36 2.60543477 1.84011200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 37 1.78591132 1.67610600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 38 1.67977806 1.65610300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 39 1.71200809 1.68410800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 40 1.92712333 1.71610600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 45 10.92630000 10.82467500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 46 202.63338200 50.85917400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 47 10.95013800 10.73666800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 60 13.47732400 13.25682900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 61 11.09817600 11.08468800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 62 13.52589500 13.27283100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 63 13.51054200 13.21682600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 64 11.08019700 11.07269300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 65 12.79806000 12.49678500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 66 11.67222800 11.50471500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 68 11.02299500 10.90468000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 69 12.30104200 12.03675200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 70 11.51838900 11.09269500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 71 11.67129800 11.41671600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 15 1.85304780 1.82811700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 16 2.01170792 1.84011400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 17 2.03905799 2.02812900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 18 2.03484985 1.84811400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 19 1.89138905 1.81611400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 20 1.88166371 1.86011400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 21 1.85964446 1.85211800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 22 1.88492482 1.87211600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 23 1.89094756 1.88011500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 24 2.19453134 1.84011900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 25 2.15761771 1.87611600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 26 1.89103346 1.85611700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 32 1.89248386 1.86011400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 33 2.09446628 1.84811300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 34 1.94313465 1.84011200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 35 1.91670404 1.87211900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 36 1.93606592 1.90011600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 37 1.82418737 1.80011200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 38 1.85275587 1.81611200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 39 1.89841448 1.87211900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 40 2.24104077 1.92011800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 45 12.05363100 11.94074500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 46 153.75240200 38.76242300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 47 12.12808900 12.11676100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 60 14.92394500 14.78492700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 61 12.12349400 12.10075400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 62 14.80466800 14.74892300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 63 14.96187400 14.76092000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 64 12.12595700 12.12475500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 65 14.30293200 14.16088700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 66 13.13248600 13.04481600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 68 11.91711700 11.90874800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 69 13.52738500 13.50084500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 70 12.10463500 12.10076100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 71 12.51535400 12.43277500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 15 2.14613841 2.13613300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 16 2.08964146 2.07213000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 17 2.23050875 2.22414000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 18 2.45300750 2.42815000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 19 2.69288940 2.66816700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 20 2.30087397 2.26413900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 21 2.71575292 2.69617000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 22 2.27281504 2.25213900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 23 2.89347846 2.86417800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 24 2.74981965 2.75217300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 25 2.43014465 2.41215200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 26 2.27919672 2.19213600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 32 2.51603498 2.49615300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 33 2.34132568 2.24014300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 34 2.19736293 2.14013200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 35 2.42015784 2.16013200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 36 2.19682006 2.18013500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 37 2.47760253 2.47215200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 38 2.09433999 2.05612900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 39 2.15514387 2.13613200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 40 2.23896073 2.21614100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 45 10.95491800 10.87668200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 46 106.99900000 27.63373000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 47 10.66279400 10.57666300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 60 16.02752500 15.98900000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 61 11.20916600 11.15670000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 62 15.88848200 15.86499100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 63 15.97672400 15.93699700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 64 11.44016900 11.21270800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 65 16.10954400 15.98500300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 66 13.21578600 13.20082600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 68 10.71742600 10.70867100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 69 13.56445000 13.52484800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 70 11.25670200 11.16469700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 71 11.90071800 11.63672700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 15 2.44970802 2.26414000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 16 2.44833974 2.32414800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 17 2.17747496 2.13212900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 18 2.17540596 2.14813400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 19 2.22853039 2.21214100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 20 2.25197693 2.24414200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 21 2.39005092 2.35214700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 22 2.21986902 2.19213900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 23 2.22432535 2.22013800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 24 2.34639108 2.32014600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 25 2.22560016 2.19613700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 26 2.31736788 2.28814300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 32 2.33359981 2.31614200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 33 2.07182797 2.03212500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 34 2.33560754 2.32414700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 35 2.19612642 2.09213100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 36 2.19244615 2.16413500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 37 2.56025559 2.53615900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 38 2.14005742 2.10413400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 39 2.21802727 2.19213500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 40 2.34475534 2.23213900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 45 10.59146700 10.47665100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 46 121.83194400 31.24195100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 47 9.74507300 9.73260600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 61 10.81497000 10.58865900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 62 15.83085700 15.80098800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 63 16.00367800 15.98499700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 64 10.68756500 10.54865800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 65 15.84196900 15.81298400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 66 14.56524400 14.53291100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 68 10.19511200 10.18463500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 69 15.11225800 15.08894100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 70 10.60586400 10.56865700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 71 11.36569300 11.30870500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 15 2.61408830 2.59216400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 16 2.38613506 2.36814600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 17 2.65185052 2.63216400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 18 2.21687388 2.21614200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 19 2.46240048 2.31214300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 20 2.46646909 2.46415100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 21 2.57484497 2.56415900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 22 2.65125207 2.62016000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 23 2.49789271 2.49615600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 24 2.46372185 2.44414900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 25 2.49743606 2.34014800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 26 2.53578516 2.46815600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 32 2.32310441 2.33614600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 33 2.56218035 2.55615800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 34 2.20594374 2.18413700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 35 2.36721832 2.37214800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 36 2.66904334 2.66416600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 37 2.66352913 2.64016100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 38 2.33906610 2.33214500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 39 2.36094293 2.33214600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 40 2.50301425 2.42415400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 45 10.54430300 10.50866100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 46 105.94739300 26.98968800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 47 10.16426200 10.14063600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 61 10.65739500 10.62066700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 62 16.37545900 16.34101900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 63 16.53941800 16.50903400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 64 11.19909400 11.17269800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 65 16.05018200 15.99299800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 66 18.35528100 18.28514800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 68 10.25009600 10.23264100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 69 19.74344600 19.55722000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 70 10.69282400 10.68066800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 71 11.11411900 11.08069000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 23 2.77533373 2.72417000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 24 3.47726487 3.45621600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 25 7.75072005 7.74448500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 26 2.78908377 2.76417400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 32 2.50527371 2.47615500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 33 2.84105095 2.84017600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 34 2.38207440 2.37614700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 35 2.48143756 2.46815400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 36 2.52331640 2.47615600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 37 2.48741660 2.45215200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 38 2.69686531 2.56816000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 39 2.43263093 2.39615100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 40 2.63556658 2.61216400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 45 10.70063300 10.44465300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 47 10.23449000 10.22063700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 63 17.44569300 17.40108600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 65 16.34998700 16.31701600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 66 25.81468100 25.64560200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 66 32.28495700 32.28201600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 66 34.81439500 34.63816500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 66 34.96018700 34.65416800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 68 10.12227100 10.11663300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 69 27.51798900 27.31770500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 71 13.30935100 12.96880600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 23 2.70602361 2.68016800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 24 2.82725128 2.82817600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 25 2.71012373 2.64816500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 26 2.70717850 2.66416700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 32 2.80160223 2.80017500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 33 2.96337194 2.94818500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 34 2.44735784 2.42415500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 35 2.92295252 2.88017700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 36 2.84464568 2.47215300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 38 2.47655275 2.48015500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 39 2.36914912 2.30414100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 42 10.24891600 9.95662400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 52 10.04778200 9.97662400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 63 17.51489100 17.46509400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 65 16.74508900 16.51303500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 71 10.68492600 10.54465500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 23 3.64010966 3.64423000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 24 3.75214619 3.70422900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 25 3.54584343 3.52822100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 26 3.33211255 3.22020200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 32 3.52961315 3.53621800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 33 2.77292498 2.72416800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 34 2.44419424 2.45215200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 35 2.62340227 2.00412400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 36 2.55986319 2.41615100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 37 2.50177845 2.52415600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 38 2.29403566 2.28414100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 39 2.21099217 2.17613500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 59 19.20047400 18.75317000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 60 19.44039300 19.17319900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 63 19.68925600 19.28920800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 65 18.39071800 18.36115100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 69 77.17565300 76.88080800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 71 10.14661700 9.86061600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 004096 16 01 32 3.02414120 3.01619100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 004096 16 01 33 2.82916677 2.81217700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 004096 16 01 34 2.73830927 2.70416900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 004096 16 01 35 3.13103430 3.08419400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 004096 16 01 36 3.62117172 2.96818500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 004096 16 01 37 3.07523643 3.05219100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 004096 16 01 38 9.34603220 9.33258200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 004096 16 01 39 4.41087391 4.40027600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 004096 16 01 71 10.41400200 9.96062700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 008192 16 01 32 19.03294052 19.03318900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 008192 16 01 33 3.20325611 3.18420100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 008192 16 01 34 3.64873286 3.63622900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 008192 16 01 35 5.76824320 5.74435900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 008192 16 01 36 4.06577632 3.83224100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 008192 16 01 37 4.00333875 3.99624700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 008192 16 01 38 3.47725648 3.44421500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 008192 16 01 39 4.64220864 3.98825000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 012288 16 01 37 7.63925136 7.62847900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 012288 16 01 38 4.95942385 4.92830900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 012288 16 01 39 6.55097068 5.95237300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000001 01 01 00 122.54106532 122.43964000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000001 01 01 70 137.91245362 137.53659500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000001 01 01 71 135.63270587 135.40044100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000002 01 01 00 183.05137779 182.34740400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000002 01 01 70 187.30018361 186.34765600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000002 01 01 71 185.75841382 184.67950200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000002 02 01 00 180.00077328 179.96324900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000002 02 01 70 188.91985668 188.72779100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000002 02 01 71 186.41453722 186.15565600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000002 02 02 00 129.85302923 258.85217000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000002 02 02 70 139.97521767 278.69341900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000002 02 02 71 141.51701227 281.73762600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 01 01 00 236.26691144 234.90266100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 01 01 70 236.73086903 234.96268500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 01 01 71 229.82467734 228.02229000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 02 01 00 236.15145878 235.09065900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 02 01 70 240.49140858 239.34294100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 02 01 71 232.66685038 231.09043800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 02 02 00 216.99292067 426.67066900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 02 02 70 217.82767517 428.97080600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 02 02 71 216.73058569 426.98272200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 04 01 00 248.75942817 248.53554600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 04 01 70 232.06587985 231.78249500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 04 01 71 228.27816767 228.01424800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 04 02 00 214.19796909 422.93842400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 04 02 70 220.67594718 435.16720400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 04 02 71 209.97284200 414.55791500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 04 04 00 225.72213129 891.25570400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 04 04 70 257.72389956 1015.82752300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 04 04 71 257.80748799 1012.46728000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 01 01 00 274.82082107 272.30100200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 01 01 70 288.00210531 285.37783300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 01 01 71 274.44160638 271.89699400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 02 01 00 273.54665117 271.10493300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 02 01 70 286.84754310 284.44175300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 02 01 71 265.18844890 262.77241500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 02 02 00 271.56964828 531.53722400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 02 02 70 258.95359301 506.47966600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 02 02 71 246.48077225 483.78221200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 04 01 00 288.28569852 286.34586800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 04 01 70 282.58045572 280.80555200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 04 01 71 270.86291599 269.04481700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 04 02 00 271.14896550 530.75718300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 04 02 70 257.72701692 505.51159700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 04 02 71 249.47188872 489.49062600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 04 04 00 322.88345290 1264.75505300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 04 04 70 328.14615812 1287.45648300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 04 04 71 321.18477198 1262.11486800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 01 00 297.04119270 296.97457100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 01 70 287.90201298 287.66194600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 01 71 279.55088937 277.57337300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 02 00 285.83271012 561.34306600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 02 71 242.58659491 479.38994400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 04 00 320.14915635 1255.83848600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 04 70 320.23161459 1253.39429600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 04 71 328.67928713 1292.82478800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 08 00 448.40270118 1763.57421700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 08 70 292.77910061 2273.21404200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 08 71 291.50975695 2271.12593300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 01 01 00 301.51189092 299.24667900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 01 01 70 303.41105413 300.74280200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 01 01 71 292.02127953 289.43007600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 02 01 00 301.62872519 299.57471400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 02 01 70 309.30955111 307.18317000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 02 01 71 295.99160188 294.03436700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 02 02 00 309.13612524 597.00130800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 02 02 70 288.63654603 562.76319700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 02 02 71 274.05435093 535.64549700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 04 01 00 318.14699887 316.27575400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 04 01 70 303.45030848 302.42288800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 04 01 71 296.42845066 294.75439600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 04 02 00 309.54233248 602.84166500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 04 02 70 295.24449971 575.24799300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 04 02 71 274.77006856 537.34158400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 04 04 00 417.05867436 1607.25245900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 04 04 70 409.92962198 1583.87495800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 04 04 71 380.32455437 1480.97253000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 01 00 323.18693460 323.06420400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 01 70 310.41332580 309.94337800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 01 71 300.73102585 300.54277200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 02 00 328.35249656 635.21967600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 02 70 284.72961366 558.63492700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 02 71 267.87115046 526.22084900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 04 00 418.01371976 1606.47240400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 04 70 405.35986899 1569.39808900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 04 71 397.65546045 1544.81659500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 08 00 726.72729222 2703.58096900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 08 70 407.85024613 3166.64991000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 08 71 414.87878198 3210.36063800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 00 360.43062715 359.66248400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 01 362.41548137 362.25466100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 02 359.46430584 358.82244000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 03 360.40211611 359.69846600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 04 361.60963682 360.76253200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 05 362.19089131 361.76658000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 06 362.14195383 361.62658800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 07 362.09293188 361.56259000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 08 363.41700161 362.63865000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 11 361.72727898 360.91055500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 27 362.05011972 361.62260700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 29 369.80960707 356.04224300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 30 372.54992350 360.49454200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 31 372.06669911 371.12721500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 69 350.95761078 350.33787100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 70 351.63983979 350.51789600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 71 343.44192950 342.61343200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 02 00 340.94451255 667.23371500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 02 71 291.96150409 576.26800500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 04 00 440.90069490 1696.21401700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 04 01 443.54903601 1698.69415800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 04 02 440.82711267 1688.11348200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 04 03 441.00726498 1691.36168700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 04 71 379.51016019 1481.32459900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 08 00 698.48752227 2602.79866000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 08 70 413.90443403 3212.12476500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 08 71 403.38112376 3126.97943500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 16 00 795.00396901 3094.41337900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 16 70 387.08693269 5906.86915500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 16 71 406.25572666 6185.22252200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 02 01 00 326.04384389 324.21627800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 02 01 70 337.57346556 335.35695900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 02 01 71 318.80304607 316.93181800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 02 02 00 333.07253875 644.93227800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 02 02 70 316.28406517 610.91020600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 02 02 71 298.15574373 578.73616000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 04 01 00 333.26932616 331.41269600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 04 01 71 313.61524679 311.77549800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 04 02 00 333.52000621 645.64032800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 04 02 71 291.33919633 566.53543500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 04 04 00 515.54133086 1943.80147900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 04 04 70 469.89494876 1810.14911700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 04 04 71 442.70702729 1717.55536200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 01 00 343.17846395 341.57736700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 01 70 340.33822680 338.78114200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 01 71 323.65484424 321.82412700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 02 00 351.70758524 675.06217300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 02 70 303.79429054 591.36899800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 02 71 293.69677634 568.89953600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 04 00 517.49909365 1954.82218200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 04 70 479.90251154 1844.21924800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 04 71 451.36163723 1748.77729400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 08 00 1055.86987880 3701.79133200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 08 70 531.59447720 4051.62517600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 08 71 507.91281970 3901.08381400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 00 390.31553259 389.97238000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 01 395.77887272 395.56872000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 02 390.80241660 389.85234000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 03 393.12085078 392.10847000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 04 395.55309817 395.37269600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 05 389.81423140 389.29636700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 06 393.19438455 392.82055600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 07 389.67084561 389.54837000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 08 391.29633427 391.10443000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 11 390.72713972 390.20437800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 27 398.28608009 396.02876700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 29 401.03977832 386.98017800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 30 404.52326881 394.25663200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 31 437.06683003 436.70730500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 69 382.99106211 382.33189300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 70 385.36752349 385.00806600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 71 375.95657347 375.46341200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 02 00 383.35456131 739.23424900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 02 70 349.61876433 680.23451300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 02 71 330.96690626 645.80038000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 04 00 529.41246322 1993.43258400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 04 01 537.49802173 2019.49822300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 04 02 528.36463041 1995.14468600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 04 03 535.24064646 2024.62652000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 04 70 463.23995386 1788.59178500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 04 71 429.58751955 1668.59631500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 08 00 1036.91991574 3633.95512500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 08 70 517.86666666 3962.95167500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 08 71 490.51058293 3782.34037100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 16 00 1346.48871925 4979.39919700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 16 70 649.30993415 9793.99613300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 16 71 656.72454561 9945.57355800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 04 01 00 384.25940026 382.68789800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 04 01 70 360.45498790 359.24643200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 04 01 71 342.33402440 341.78132500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 04 02 00 382.84727695 697.47958200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 04 02 70 347.90248895 645.36434500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 04 02 71 334.55869590 624.17098500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 04 04 00 569.85026179 2026.69067000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 04 04 70 516.36014326 1858.87618300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 04 04 71 487.75067417 1760.92603900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 01 00 386.26711080 386.06411100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 01 70 369.37387139 368.83503800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 01 71 367.71863649 367.61898100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 02 00 397.71097153 728.80952900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 02 70 353.01166100 652.56876500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 02 71 334.64443949 624.41101400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 04 00 572.20395575 2024.86254400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 04 70 534.26113687 1926.90839800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 04 71 504.74932960 1827.05818100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 08 00 1554.26026900 4989.75183300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 08 70 652.86537102 4888.66553100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 08 71 600.04190600 4547.24018500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 00 431.31010658 431.16292700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 01 441.13154728 439.83948700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 02 439.77616612 438.00337900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 03 470.26668580 469.08130800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 04 433.97723262 433.57512000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 05 456.80279773 455.35247100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 06 439.04137152 438.76341500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 07 427.26071143 426.63864600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 08 427.65338278 427.44271400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 11 437.41002050 437.15531900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 27 463.11914877 462.82891700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 29 2328.28713066 2318.43289800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 30 439.66708345 429.57086600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 31 433.89363870 433.76313800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 69 416.50034724 415.57397400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 70 436.47173601 436.23527100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 71 417.34331894 415.39392000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 02 00 427.14753026 787.80123700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 02 70 395.14246498 733.56984800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 02 71 368.67281962 693.36329100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 04 00 591.74799377 2118.78441700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 04 01 606.03415259 2161.71509800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 04 02 606.57069465 2160.00298500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 04 03 609.42726870 2169.47158600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 04 70 528.83833280 1917.96386400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 04 71 488.48490761 1789.02781400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 08 00 1546.19907614 5007.49296100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 08 70 631.67315156 4768.09001100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 08 71 607.70209688 4613.98434600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 16 00 1858.96060941 6315.72272000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 16 70 804.20874109 11734.48135300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 16 71 758.89552524 11259.30765700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 01 00 364.62904241 364.22276400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 01 70 379.81920310 379.69573800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 01 71 396.00827453 395.18070400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 02 00 440.86034016 796.68577000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 02 70 378.40813455 703.46795100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 02 71 413.95889019 758.59540300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 04 00 599.82393181 1979.99574800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 04 70 540.37555430 1850.29964100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 04 71 503.74059530 1748.33327700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 08 00 1788.01350286 5380.72425200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 08 70 678.67737144 5006.15286600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 08 71 642.28407215 4769.47405600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 00 404.99298149 404.92531000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 01 431.08043735 430.71091800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 02 427.04413413 426.51866000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 03 433.42988977 431.87500600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 04 417.92239112 417.67407500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 05 429.07855982 427.86275000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 06 444.53289246 444.34380100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 07 418.31180983 416.85004500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 08 422.25409577 420.87826200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 11 413.70373561 412.40574900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 27 434.69497877 432.78307600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 29 419.66531388 410.26962500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 30 439.21915391 428.73479800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 31 434.61412737 433.23107800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 69 430.70154522 430.00688500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 70 438.41579003 437.91137400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 71 431.95664416 431.63498300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 02 00 472.33713063 856.02950200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 02 70 421.91766016 779.28067100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 02 71 444.19184591 804.59427400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 04 00 628.96382082 2049.31606300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 04 01 642.24077718 2088.03048700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 04 02 689.82439842 2179.65220800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 04 03 670.76284182 2138.68566500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 04 70 559.62706526 1905.94711600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 04 71 545.43877754 1850.99568200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 08 00 1763.50365242 5334.35736900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 08 70 689.57964971 5051.44369100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 08 71 636.76134103 4722.85116200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 16 00 2237.19241006 7141.26229600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 16 70 800.63435093 11681.41004500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 16 71 743.16011415 11063.20738400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 00 416.81854382 416.65008200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 01 424.06496044 423.97053300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 02 435.50639245 435.05518500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 03 452.47220833 452.26825200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 04 420.10070920 419.89827200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 05 419.56022792 419.16618300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 06 435.70374093 433.69513500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 07 426.06771261 425.86660700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 08 416.79365528 416.45001900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 11 426.59510188 424.97055100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 27 422.20029125 421.98237100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 29 451.74462182 442.01958200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 30 429.08432736 421.15431500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 31 431.13646925 430.77493200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 69 428.61061831 428.29876600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 70 443.75125332 443.19964900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 71 430.91503566 430.43491100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 02 00 493.58668537 878.29491000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 02 70 482.44695258 863.17793000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 02 71 440.23977765 802.17812500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 04 00 639.43174573 2105.13555200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 04 02 661.28716728 2138.28163000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 04 03 661.23409816 2155.13869800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 04 70 563.27954600 1899.01067800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 04 71 522.37506390 1795.84423300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 08 00 2007.78571537 5415.25443200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 08 70 761.92412640 5155.37016100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 08 71 697.91456742 4817.27303700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 16 00 2633.87542579 7447.83346100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 16 70 874.75492376 12621.71282100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 16 71 792.28551614 11551.60588900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 00 432.15376549 432.15100400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 01 441.80254700 441.46759900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 02 466.84211560 466.84116400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 03 455.53552447 455.25647500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 04 429.11185786 428.98679500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 27 483.96443456 481.35408500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 29 455.41548594 447.59996800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 30 470.07764442 460.69678200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 31 467.55431002 465.62509900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 69 445.45534276 444.89979100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 71 432.57437397 431.60298900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 02 00 481.33138896 871.35843600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 02 71 450.67742913 816.63503800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 04 00 629.96891954 2108.09974400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 04 01 650.63503716 2168.72754200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 04 02 659.67285103 2198.78939500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 04 03 658.38587013 2192.54502800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 04 71 531.22941551 1840.13502800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 08 00 2182.42442297 5113.60358800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 16 00 2917.04701424 7032.92755200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 01 00 430.57254488 429.10679800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 01 01 437.24065480 436.92725400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 01 02 470.04598340 469.48934500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 01 03 452.01172928 452.10824500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 01 04 435.76047032 435.42721100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 01 27 464.35032003 462.29691900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 01 29 465.19633431 457.62460400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 01 30 452.24806910 439.00743100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 01 31 454.38764507 451.27620200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 01 71 438.81654108 438.29943200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 02 00 503.23849598 902.79243700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 02 71 484.87606011 874.36265300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 04 00 648.85708079 2173.22782000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 04 01 678.40451218 2219.06267800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 04 02 692.87624405 2285.97485100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 04 03 693.47299075 2276.57427800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 04 71 547.03842935 1875.64522500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 08 00 2192.73954194 5185.64406200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 16 00 3194.24190197 7228.57974800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 01 00 474.30655592 473.98159600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 01 01 482.89148177 482.66217100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 01 02 486.30503508 484.72232100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 01 03 486.71080130 485.29434700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 01 27 519.71460553 519.34445800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 01 29 502.39021118 491.49071300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 01 30 466.38628136 456.32853800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 01 31 463.41367294 463.26092800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 01 71 399.03692711 398.91291300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 02 00 516.41948016 932.54231900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 02 71 485.12292738 857.40158900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 04 00 644.42646233 2202.95367200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 04 01 676.88389260 2272.85005100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 04 02 671.90049929 2283.31869400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 04 03 679.92398633 2195.80124500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 04 71 573.36576023 1935.17692900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 08 00 2191.28902042 5020.00972000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 01 30 564.43722649 556.34275800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 01 31 540.58077165 540.06973100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 01 71 455.91632274 455.34043200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 02 00 598.95507284 1056.66598500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 02 71 471.13539881 838.79645300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 04 00 655.37947027 2238.28789400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 04 01 686.16152266 2319.69698300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 04 02 700.27613265 2338.29413500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 04 03 673.68116989 2296.11949200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 04 71 573.91736912 1928.58452600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 08 00 2164.29166218 4984.59550500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 008192 16 01 71 433.90391986 433.17103800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 008192 16 02 00 618.88302882 1096.32051400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 008192 16 02 71 451.53836770 830.44792700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 008192 16 04 00 664.84209040 2282.41064700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 008192 16 04 01 687.25730075 2343.11442100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 008192 16 04 02 686.03115911 2356.38325800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 008192 16 04 03 699.08293954 2368.18000400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 008192 16 04 71 543.33106637 1907.09519100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 008192 16 08 00 2165.34595664 4986.41963400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 012288 16 01 71 437.99540328 436.87931300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 012288 16 02 71 463.45291184 859.60171800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 012288 16 04 01 738.65903756 2406.06234900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 012288 16 04 02 793.26796536 2537.16257600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 012288 16 04 03 710.98674150 2315.13667500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 012288 16 04 71 545.43758320 1926.07638400 diff --git a/Carpet/CarpetWeb/scaling-whatif/results-whatif-bw.out b/Carpet/CarpetWeb/scaling-whatif/results-whatif-bw.out new file mode 100644 index 000000000..23c5c310a --- /dev/null +++ b/Carpet/CarpetWeb/scaling-whatif/results-whatif-bw.out @@ -0,0 +1,12 @@ +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 04 01 51 389.47344708 376.82760600 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 04 01 51 427.29224968 414.18987800 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000016 04 01 51 468.87827706 455.78450100 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000032 04 01 51 491.67039084 482.87815000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000064 04 01 51 533.61160135 527.58096600 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000128 04 01 51 500.59744263 494.36288200 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000256 04 01 51 476.86723900 470.84938700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000512 04 01 51 458.97451353 454.44442800 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 001024 04 01 51 436.93441629 431.95500700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 002048 04 01 51 476.40951514 471.73747300 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 004096 04 01 51 484.72250724 480.57803300 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 008192 04 01 51 496.09946489 492.02273600 diff --git a/Carpet/CarpetWeb/scaling-whatif/results-whatif-bwlat.out b/Carpet/CarpetWeb/scaling-whatif/results-whatif-bwlat.out new file mode 100644 index 000000000..a3e22a0d1 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-whatif/results-whatif-bwlat.out @@ -0,0 +1,12 @@ +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 04 01 52 381.81449485 369.91510800 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 04 01 52 421.87990785 407.86147400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000016 04 01 52 465.03736973 453.38033300 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000032 04 01 52 490.74024415 479.36598700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000064 04 01 52 543.91181445 536.93353600 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000128 04 01 52 517.28014588 510.25591400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000256 04 01 52 518.99811196 512.80408400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000512 04 01 52 490.89922404 485.80636300 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 001024 04 01 52 480.04649687 474.67367400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 002048 04 01 52 523.34186959 518.44838400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 004096 04 01 52 502.55980611 496.09100500 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 008192 04 01 52 494.35133028 489.53059200 diff --git a/Carpet/CarpetWeb/scaling-whatif/results-whatif-orig.out b/Carpet/CarpetWeb/scaling-whatif/results-whatif-orig.out new file mode 100644 index 000000000..00101ea76 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-whatif/results-whatif-orig.out @@ -0,0 +1,12 @@ +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 04 01 50 368.31895638 364.48679000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 04 01 50 403.65297389 398.66888300 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000016 04 01 50 433.79905939 429.07077700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000032 04 01 50 453.33379769 449.05209000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000064 04 01 50 477.42585325 474.75770700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000128 04 01 50 446.53416204 443.65970800 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000256 04 01 50 421.50431681 418.52209200 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000512 04 01 50 386.16655254 383.67997000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 001024 04 01 50 365.84427381 363.40272800 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 002048 04 01 50 378.49561858 376.21552700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 004096 04 01 50 357.60511637 355.38218100 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 008192 04 01 50 362.58709908 360.02246700 diff --git a/Carpet/CarpetWeb/scaling-whatif/results-whatif.eps b/Carpet/CarpetWeb/scaling-whatif/results-whatif.eps new file mode 100644 index 000000000..00a627161 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-whatif/results-whatif.eps @@ -0,0 +1,813 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: results-whatif.eps +%%Creator: gnuplot 4.2 patchlevel 4 +%%CreationDate: Fri Mar 27 15:37:44 2009 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 230 176 +%%EndComments +%%BeginProlog +/gnudict 256 dict def +gnudict begin +% +% The following 6 true/false flags may be edited by hand if required +% The unit line width may also be changed +% +/Color true def +/Blacktext false def +/Solid false def +/Dashlength 1 def +/Landscape false def +/Level1 false def +/Rounded false def +/TransparentPatterns false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +% +/vshift -46 def +/dl1 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if +} def +/dl2 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul add } if +} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +Level1 {} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title (results-whatif.eps) + /Subject (gnuplot plot) + /Creator (gnuplot 4.2 patchlevel 4 ) + /Author (Erik Schnetter) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Fri Mar 27 15:37:44 2009) + /DOCINFO pdfmark +end +} ifelse +% +% Gnuplot Prolog Version 4.2 (August 2006) +% +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/N {newpath moveto} bind def +/Z {closepath} bind def +/C {setrgbcolor} bind def +/f {rlineto fill} bind def +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow {currentpoint stroke M 0 vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def +/DL {Color {setrgbcolor Solid {pop []} if 0 setdash} + {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def +/BL {stroke userlinewidth 2 mul setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/AL {stroke userlinewidth 2 div setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/UL {dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def} def +/PL {stroke userlinewidth setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +% Default Line colors +/LCw {1 1 1} def +/LCb {0 0 0} def +/LCa {0 0 0} def +/LC0 {1 0 0} def +/LC1 {0 1 0} def +/LC2 {0 0 1} def +/LC3 {1 0 1} def +/LC4 {0 1 1} def +/LC5 {1 1 0} def +/LC6 {0 0 0} def +/LC7 {1 0.3 0} def +/LC8 {0.5 0.5 0.5} def +% Default Line Types +/LTw {PL [] 1 setgray} def +/LTb {BL [] LCb DL} def +/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def +/LT0 {PL [] LC0 DL} def +/LT1 {PL [4 dl1 2 dl2] LC1 DL} def +/LT2 {PL [2 dl1 3 dl2] LC2 DL} def +/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def +/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def +/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def +/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def +/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def +/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def +/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def +/Dia {stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt} def +/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt} def +/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke} def +/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt} def +/Star {2 copy Pls Crs} def +/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill} def +/TriUF {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill} def +/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt} def +/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill} def +/Pent {stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt} def +/PentF {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore} def +/Circle {stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt} def +/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def +/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def +/C1 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath} bind def +/C2 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C3 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C4 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C5 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc} bind def +/C6 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C7 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C8 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C9 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath} bind def +/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C11 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C12 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C13 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C14 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc} bind def +/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath} bind def +/Square {dup Rec} bind def +/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def +/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def +/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def +/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def +/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def +/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare} bind def +/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare} bind def +/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def +/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def +/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def +/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def +/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def +/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def +/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def +/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def +/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def +/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def +/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def +/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def +/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def +/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def +/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def +/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def +/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def +/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def +/DiaE {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke} def +/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke} def +/TriUE {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke} def +/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke} def +/PentE {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore} def +/CircE {stroke [] 0 setdash + hpt 0 360 arc stroke} def +/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def +/DiaW {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke} def +/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke} def +/TriUW {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke} def +/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke} def +/PentW {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore} def +/CircW {stroke [] 0 setdash + hpt 0 360 arc Opaque stroke} def +/BoxFill {gsave Rec 1 setgray fill grestore} def +/Density { + /Fillden exch def + currentrgbcolor + /ColB exch def /ColG exch def /ColR exch def + /ColR ColR Fillden mul Fillden sub 1 add def + /ColG ColG Fillden mul Fillden sub 1 add def + /ColB ColB Fillden mul Fillden sub 1 add def + ColR ColG ColB setrgbcolor} def +/BoxColFill {gsave Rec PolyFill} def +/PolyFill {gsave Density fill grestore grestore} def +/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def +% +% PostScript Level 1 Pattern Fill routine for rectangles +% Usage: x y w h s a XX PatternFill +% x,y = lower left corner of box to be filled +% w,h = width and height of box +% a = angle in degrees between lines and x-axis +% XX = 0/1 for no/yes cross-hatch +% +/PatternFill {gsave /PFa [ 9 2 roll ] def + PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate + PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec + gsave 1 setgray fill grestore clip + currentlinewidth 0.5 mul setlinewidth + /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def + 0 0 M PFa 5 get rotate PFs -2 div dup translate + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 M 0 PFs V} for + 0 PFa 6 get ne { + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 2 1 roll M PFs 0 V} for + } if + stroke grestore} def +% +/languagelevel where + {pop languagelevel} {1} ifelse + 2 lt + {/InterpretLevel1 true def} + {/InterpretLevel1 Level1 def} + ifelse +% +% PostScript level 2 pattern fill definitions +% +/Level2PatternFill { +/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} + bind def +/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} +>> matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +/MFshow { + { dup 5 get 3 ge + { 5 get 3 eq {gsave} {grestore} ifelse } + {dup dup 0 get findfont exch 1 get scalefont setfont + [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 + get exch 4 get {show} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq + {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 + get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div + dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get + show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop + pop aload pop M} ifelse }ifelse }ifelse } + ifelse } + forall} bind def +/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } + {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont + 6 get stringwidth pop add} {pop} ifelse} ifelse} forall} bind def +/MLshow { currentpoint stroke M + 0 exch R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MRshow { currentpoint stroke M + exch dup MFwidth neg 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MCshow { currentpoint stroke M + exch dup MFwidth -2 div 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/XYsave { [( ) 1 2 true false 3 ()] } bind def +/XYrestore { [( ) 1 2 true false 4 ()] } bind def +end +%%EndProlog +gnudict begin +gsave +50 50 translate +0.050 0.050 scale +0 setgray +newpath +(Helvetica) findfont 140 scalefont setfont +1.000 UL +LTb +882 448 M +63 0 V +2501 0 R +-63 0 V +stroke +798 448 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0)] +] -46.7 MRshow +1.000 UL +LTb +882 655 M +63 0 V +2501 0 R +-63 0 V +stroke +798 655 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.2)] +] -46.7 MRshow +1.000 UL +LTb +882 861 M +63 0 V +2501 0 R +-63 0 V +stroke +798 861 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.4)] +] -46.7 MRshow +1.000 UL +LTb +882 1068 M +63 0 V +2501 0 R +-63 0 V +stroke +798 1068 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.6)] +] -46.7 MRshow +1.000 UL +LTb +882 1274 M +63 0 V +2501 0 R +-63 0 V +stroke +798 1274 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0.8)] +] -46.7 MRshow +1.000 UL +LTb +882 1481 M +63 0 V +2501 0 R +-63 0 V +stroke +798 1481 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 1)] +] -46.7 MRshow +1.000 UL +LTb +882 1687 M +63 0 V +2501 0 R +-63 0 V +stroke +798 1687 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 1.2)] +] -46.7 MRshow +1.000 UL +LTb +882 1894 M +63 0 V +2501 0 R +-63 0 V +stroke +798 1894 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 1.4)] +] -46.7 MRshow +1.000 UL +LTb +882 2100 M +63 0 V +2501 0 R +-63 0 V +stroke +798 2100 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 1.6)] +] -46.7 MRshow +1.000 UL +LTb +969 448 M +0 63 V +0 1589 R +0 -63 V +stroke +969 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 1)] +] -46.7 MCshow +1.000 UL +LTb +1309 448 M +0 63 V +0 1589 R +0 -63 V +stroke +1309 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 4)] +] -46.7 MCshow +1.000 UL +LTb +1649 448 M +0 63 V +0 1589 R +0 -63 V +stroke +1649 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 16)] +] -46.7 MCshow +1.000 UL +LTb +1988 448 M +0 63 V +0 1589 R +0 -63 V +stroke +1988 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 64)] +] -46.7 MCshow +1.000 UL +LTb +2328 448 M +0 63 V +0 1589 R +0 -63 V +stroke +2328 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 256)] +] -46.7 MCshow +1.000 UL +LTb +2667 448 M +0 63 V +0 1589 R +0 -63 V +stroke +2667 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (1k)] +] -46.7 MCshow +1.000 UL +LTb +3007 448 M +0 63 V +0 1589 R +0 -63 V +stroke +3007 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (4k)] +] -46.7 MCshow +1.000 UL +LTb +3347 448 M +0 63 V +0 1589 R +0 -63 V +stroke +3347 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (16k)] +] -46.7 MCshow +1.000 UL +LTb +1.000 UL +LTb +882 2100 N +882 448 L +2564 0 V +0 1652 V +-2564 0 V +Z stroke +LCb setrgbcolor +308 1274 M +currentpoint gsave translate 90 rotate 0 0 moveto +[ [(Helvetica) 140.0 0.0 true true 0 (wall time increase)] +] -46.7 MCshow +grestore +LTb +LCb setrgbcolor +2164 98 M +[ [(Helvetica) 140.0 0.0 true true 0 (number of cores)] +] -46.7 MCshow +LTb +2164 2310 M +[ [(Helvetica) 140.0 0.0 true true 0 (Cactus Benchmark \(Kraken, NT=1\))] +] -46.7 MCshow +1.000 UP +1.000 UL +LTb +1.000 UP +3.000 UL +LT0 +LTb +2795 1001 M +[ [(Helvetica) 140.0 0.0 true true 0 (original)] +] -46.7 MRshow +LT0 +2879 1001 M +399 0 V +1309 1481 M +170 0 V +170 0 V +169 0 V +170 0 V +170 0 V +170 0 V +170 0 V +169 0 V +170 0 V +170 0 V +170 0 V +1309 1481 Pls +1479 1481 Pls +1649 1481 Pls +1818 1481 Pls +1988 1481 Pls +2158 1481 Pls +2328 1481 Pls +2498 1481 Pls +2667 1481 Pls +2837 1481 Pls +3007 1481 Pls +3177 1481 Pls +3078 1001 Pls +1.000 UP +3.000 UL +LT1 +LTb +2795 861 M +[ [(Helvetica) 140.0 0.0 true true 0 (increased BW)] +] -46.7 MRshow +LT1 +2879 861 M +399 0 V +1309 1540 M +170 1 V +170 23 V +169 4 V +170 34 V +170 4 V +170 10 V +170 59 V +169 6 V +170 67 V +170 100 V +170 13 V +1309 1540 Crs +1479 1541 Crs +1649 1564 Crs +1818 1568 Crs +1988 1602 Crs +2158 1606 Crs +2328 1616 Crs +2498 1675 Crs +2667 1681 Crs +2837 1748 Crs +3007 1848 Crs +3177 1861 Crs +3078 861 Crs +1.000 UP +3.000 UL +LT2 +LTb +2795 721 M +[ [(Helvetica) 140.0 0.0 true true 0 (increased LAT)] +] -46.7 MRshow +LT2 +2879 721 M +399 0 V +1309 1460 M +170 7 V +170 5 V +169 7 V +170 21 V +170 15 V +170 57 V +170 -20 V +169 30 V +170 0 V +170 -64 V +170 -41 V +1309 1460 Star +1479 1467 Star +1649 1472 Star +1818 1479 Star +1988 1500 Star +2158 1515 Star +2328 1572 Star +2498 1552 Star +2667 1582 Star +2837 1582 Star +3007 1518 Star +3177 1477 Star +3078 721 Star +1.000 UP +3.000 UL +LT3 +LTb +2795 581 M +[ [(Helvetica) 140.0 0.0 true true 0 (increased BW and LAT)] +] -46.7 MRshow +LT3 +2879 581 M +399 0 V +1309 1518 M +170 9 V +170 28 V +169 11 V +170 58 V +170 20 V +170 75 V +170 42 V +169 42 V +170 73 V +170 23 V +170 -43 V +1309 1518 Box +1479 1527 Box +1649 1555 Box +1818 1566 Box +1988 1624 Box +2158 1644 Box +2328 1719 Box +2498 1761 Box +2667 1803 Box +2837 1876 Box +3007 1899 Box +3177 1856 Box +3078 581 Box +1.000 UL +LTb +882 2100 N +882 448 L +2564 0 V +0 1652 V +-2564 0 V +Z stroke +1.000 UP +1.000 UL +LTb +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica diff --git a/Carpet/CarpetWeb/scaling-whatif/results-whatif.gnuplot b/Carpet/CarpetWeb/scaling-whatif/results-whatif.gnuplot new file mode 100644 index 000000000..378d3928a --- /dev/null +++ b/Carpet/CarpetWeb/scaling-whatif/results-whatif.gnuplot @@ -0,0 +1,33 @@ +set terminal postscript eps enhanced color colortext +set output "results-whatif.eps" + +set size 0.5 + +set logscale x +set xtics (1, 4, 16, 64, 256, "1k" 1024, "4k" 4096, "16k" 16384) +set xrange [0.7:24576] +set yrange [0:] + +set title "Cactus Benchmark (Kraken, NT=1)" +set xlabel "number of cores" +#set ylabel "time per RHS evaluation [{/Symbol m}s]" +set ylabel "wall time increase" + +set key bottom + +# 25^3 grid points per core +# 128 time steps +# 9 refinement levels +# a factor 2 because of the Berger-Oliger subcycling +# 4 Runge-Kutta substeps per time step +# 1e6 us per second +#p \ +#"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && ($6== 4 || $6==$5) && $7== 1 && $8==50) print; }' results-kraken.out" u 5:($9/25**3/128/2/4*1e6) t "original" w lp lt 1 lw 3, \ +#"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && ($6== 4 || $6==$5) && $7== 1 && $8==51) print; }' results-kraken.out" u 5:($9/25**3/128/2/4*1e6) t "bandwidth" w lp lt 2 lw 3, \ +#"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && ($6== 4 || $6==$5) && $7== 1 && $8==52) print; }' results-kraken.out" u 5:($9/25**3/128/2/4*1e6) t "bandwidth+latency" w lp lt 3 lw 3 + +p \ +"< paste results-whatif-orig.out results-whatif-orig.out" u 5:($19/$9) t "original" w lp lt 1 lw 3, \ +"< paste results-whatif-orig.out results-whatif-bw.out" u 5:($19/$9) t "increased BW" w lp lt 2 lw 3, \ +"< paste results-whatif-bw.out results-whatif-bwlat.out" u 5:($19/$9) t "increased LAT" w lp lt 3 lw 3, \ +"< paste results-whatif-orig.out results-whatif-bwlat.out" u 5:($19/$9) t "increased BW and LAT" w lp lt 4 lw 3 diff --git a/Carpet/CarpetWeb/scaling-whatif/results-whatif.pdf b/Carpet/CarpetWeb/scaling-whatif/results-whatif.pdf Binary files differnew file mode 100644 index 000000000..0b33d0977 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-whatif/results-whatif.pdf diff --git a/Carpet/CarpetWeb/scaling-whatif/results-whatif.png b/Carpet/CarpetWeb/scaling-whatif/results-whatif.png Binary files differnew file mode 100644 index 000000000..06e442856 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-whatif/results-whatif.png diff --git a/Carpet/CarpetWeb/scaling-whatif/results2whatif b/Carpet/CarpetWeb/scaling-whatif/results2whatif new file mode 100644 index 000000000..54ab149f9 --- /dev/null +++ b/Carpet/CarpetWeb/scaling-whatif/results2whatif @@ -0,0 +1,16 @@ +# Cactus benchmark results +# processes = procs +# nodes = procs / ppn +# +# benchmark steps size machine procs ppn tpp iter walltime cputime + + + +# Select output for original +awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && ($6== 4 || $6==$5) && $7== 1 && $8==50) print; }' results-kraken.out > results-whatif-orig.out + +# Select output for increased bandwidth +awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && ($6== 4 || $6==$5) && $7== 1 && $8==51) print; }' results-kraken.out > results-whatif-bw.out + +# Select output for increased bandwidth and latency +awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && ($6== 4 || $6==$5) && $7== 1 && $8==52) print; }' results-kraken.out > results-whatif-bwlat.out diff --git a/Carpet/CarpetWeb/sicortex/results-hlrb2.out b/Carpet/CarpetWeb/sicortex/results-hlrb2.out new file mode 100644 index 000000000..b0e9853ab --- /dev/null +++ b/Carpet/CarpetWeb/sicortex/results-hlrb2.out @@ -0,0 +1,85 @@ +# Cactus benchmark results +# processes = procs +# nodes = procs / ppn +# +# benchmark steps size machine procs ppn tpp iter walltime cputime +Bench_McLachlan_Carpet_1lev 000024 0020 hlrb2 000001 01 01 00 5.13499665 5.14400000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000001 01 01 00 186.91880655 185.61600000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000002 02 01 00 220.20438910 219.11600000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000002 02 02 00 214.55147696 423.92400000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000004 04 01 00 231.18661833 230.90000000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000004 04 02 00 251.77147675 492.43200000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000004 04 04 00 291.56947160 1082.29200000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000008 08 01 00 284.81413913 284.18800000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000008 08 02 00 306.43832397 590.70000000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000008 08 04 00 324.80125213 1212.27600000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000008 08 08 00 369.53091407 2550.59200000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000016 16 01 00 301.74512243 301.32800000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000016 16 02 00 305.04176641 579.66400000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000016 16 04 00 363.74049592 1335.77600000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000016 16 08 00 426.92180514 2849.48800000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000016 16 16 00 474.11036873 5928.32400000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000032 32 01 00 312.45066810 311.97600000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000032 32 02 00 350.20448923 654.86000000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000032 32 04 00 431.81555462 1477.58400000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000032 32 08 00 471.02439666 3095.39600000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000032 32 16 00 628.79774189 7100.15200000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000032 32 32 00 675.18877506 14212.50000000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000064 64 01 00 335.72597265 335.33600000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000064 64 02 00 391.93287492 682.36400000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000064 64 04 00 453.71378946 1517.36000000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000064 64 08 00 540.30726910 3248.62000000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000064 64 16 00 732.82437968 7613.05600000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000064 64 32 00 867.69349027 16565.68400000 +Bench_McLachlan_Carpet_1lev 000024 0065 hlrb2 000064 64 64 00 1005.85764909 37395.58400000 +Bench_McLachlan_Carpet_9lev 000000 0025 hlrb2 000001 01 01 10 1.29906511 1.20000000 +Bench_McLachlan_Carpet_9lev 000000 0025 hlrb2 000002 02 01 10 2.13740206 2.10400000 +Bench_McLachlan_Carpet_9lev 000000 0025 hlrb2 000004 04 01 10 2.62449074 2.54800000 +Bench_McLachlan_Carpet_9lev 000000 0025 hlrb2 000008 08 01 10 2.21243858 2.19200000 +Bench_McLachlan_Carpet_9lev 000000 0025 hlrb2 000016 16 01 10 2.43998551 2.32800000 +Bench_McLachlan_Carpet_9lev 000000 0025 hlrb2 000032 32 01 10 2.35174751 2.33200000 +Bench_McLachlan_Carpet_9lev 000000 0025 hlrb2 000064 64 01 10 2.89009404 2.89200000 +Bench_McLachlan_Carpet_9lev 000000 0025 hlrb2 000128 128 01 10 2.22359061 2.20000000 +Bench_McLachlan_Carpet_9lev 000000 0025 hlrb2 000256 256 01 10 2.50717616 2.46800000 +Bench_McLachlan_Carpet_9lev 000000 0025 hlrb2 000512 512 01 10 6.91676068 6.71600000 +Bench_McLachlan_Carpet_9lev 000000 0025 hlrb2 001024 1024 01 10 30.94050145 30.87600000 +Bench_McLachlan_Carpet_9lev 000000 0025 hlrb2 002048 2048 01 10 3.83641720 3.80800000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000001 01 01 00 182.51141620 182.02400000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000001 01 01 10 200.79874182 200.18800000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000002 02 01 00 281.35725307 280.12400000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000002 02 01 10 299.81318593 298.43600000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000002 02 02 00 204.77519417 405.15200000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000004 04 01 00 373.53716779 371.05200000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000004 04 01 10 389.50963879 387.18000000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000004 04 02 00 323.96468210 635.69600000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000004 04 04 00 274.13237286 1066.83600000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000008 08 01 00 416.79449534 413.90000000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000008 08 01 10 431.01822519 428.78400000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000008 08 02 00 402.00020862 783.81200000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000008 08 04 00 471.18366361 1798.19600000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000008 08 08 00 345.37232614 2586.30400000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000016 16 01 00 490.85937953 489.64400000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000016 16 01 10 471.45920944 469.04800000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000016 16 02 00 455.23554587 885.59600000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000016 16 04 00 582.81878591 2200.88000000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000016 16 08 00 639.37896895 4726.56800000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000016 16 16 00 485.79755044 6897.66400000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000032 32 01 00 525.12310481 524.21200000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000032 32 01 10 533.41243887 532.36800000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000032 32 02 00 506.58320308 957.85600000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000032 32 04 00 643.36008477 2417.87600000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000032 32 08 00 858.16334009 6280.97200000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000032 32 16 00 1073.52412605 15029.21600000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000032 32 32 00 796.23935318 20802.44000000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000064 64 01 00 595.84084988 595.24800000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000064 64 01 10 591.00428939 590.34400000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000064 64 02 00 599.32032919 1027.06000000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000064 64 04 00 741.07681203 2395.47200000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000064 64 08 00 926.82490373 6575.82000000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000064 64 16 00 1314.07155108 17533.72400000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000064 64 32 00 1355.17224264 33640.83200000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000064 64 64 00 1319.33960485 57778.41600000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000128 128 01 10 548.16778946 547.12800000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000256 256 01 10 515.22758889 513.61200000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 000512 512 01 10 508.34639978 505.00800000 +Bench_McLachlan_Carpet_9lev 000128 0025 hlrb2 002048 2048 01 10 568.32370758 567.65200000 diff --git a/Carpet/CarpetWeb/sicortex/results-kraken.out b/Carpet/CarpetWeb/sicortex/results-kraken.out new file mode 100644 index 000000000..a1a16999d --- /dev/null +++ b/Carpet/CarpetWeb/sicortex/results-kraken.out @@ -0,0 +1,243 @@ +# Cactus benchmark results +# processes = procs +# nodes = procs / ppn +# +# benchmark steps size machine procs ppn tpp iter walltime cputime +Bench_McLachlan_Carpet_1lev 000010 0020 kraken 000001 01 01 02 7.94787478 7.93249400 +Bench_McLachlan_Carpet_1lev 000010 0020 kraken 000002 01 01 02 9.26108479 9.27258000 +Bench_McLachlan_Carpet_1lev 000010 0020 kraken 000002 02 01 02 9.36145306 9.31658700 +Bench_McLachlan_Carpet_1lev 000010 0020 kraken 000002 02 02 02 16.08203602 16.05700600 +Bench_McLachlan_Carpet_1lev 000010 0020 kraken 000004 01 01 02 10.67179680 10.63266800 +Bench_McLachlan_Carpet_1lev 000010 0020 kraken 000004 02 01 02 11.27463484 11.21670000 +Bench_McLachlan_Carpet_1lev 000010 0020 kraken 000004 02 02 02 19.23526311 19.18919600 +Bench_McLachlan_Carpet_1lev 000010 0020 kraken 000004 04 01 00 11.60254765 11.46872000 +Bench_McLachlan_Carpet_1lev 000010 0020 kraken 000004 04 01 02 11.55528212 11.45271400 +Bench_McLachlan_Carpet_1lev 000010 0020 kraken 000004 04 02 02 18.88284779 18.80917300 +Bench_McLachlan_Carpet_1lev 000010 0020 kraken 000004 04 04 02 32.62604594 32.62603600 +Bench_McLachlan_Carpet_1lev 000010 0020 kraken 000008 02 01 02 12.22258759 12.16075600 +Bench_McLachlan_Carpet_1lev 000010 0020 kraken 000008 02 02 02 21.00340366 20.95331000 +Bench_McLachlan_Carpet_1lev 000010 0020 kraken 000008 04 01 02 12.75144887 12.66879000 +Bench_McLachlan_Carpet_1lev 000010 0020 kraken 000008 04 02 02 21.47143698 21.38933500 +Bench_McLachlan_Carpet_1lev 000010 0020 kraken 000008 04 04 02 36.18515110 36.16226200 +Bench_McLachlan_Carpet_1lev 000010 0020 kraken 000016 04 01 02 14.79342532 14.70491800 +Bench_McLachlan_Carpet_1lev 000010 0020 kraken 000016 04 02 02 26.46943021 26.40965100 +Bench_McLachlan_Carpet_1lev 000010 0020 kraken 000016 04 04 02 38.64918733 38.62241100 +Bench_McLachlan_Carpet_1lev 000010 0040 kraken 000004 04 01 12 27.21192789 26.64166500 +Bench_McLachlan_Carpet_1lev 000010 0040 kraken 000008 04 01 12 28.44224620 27.86974100 +Bench_McLachlan_Carpet_1lev 000010 0040 kraken 000016 04 01 12 30.56476092 30.08188200 +Bench_McLachlan_Carpet_1lev 000010 0040 kraken 000032 04 01 12 35.21725655 34.79417600 +Bench_McLachlan_Carpet_1lev 000010 0040 kraken 000064 04 01 12 36.77948976 36.50628200 +Bench_McLachlan_Carpet_1lev 000010 0040 kraken 000128 04 01 12 36.81042242 36.57428400 +Bench_McLachlan_Carpet_1lev 000010 0040 kraken 000256 04 01 12 34.36209798 34.08612900 +Bench_McLachlan_Carpet_1lev 000010 0040 kraken 000512 04 01 12 32.68366075 32.38602700 +Bench_McLachlan_Carpet_1lev 000010 0040 kraken 001024 04 01 12 32.57933545 32.22201500 +Bench_McLachlan_Carpet_1lev 000010 0040 kraken 002048 04 01 12 32.94867969 32.64603700 +Bench_McLachlan_Carpet_1lev 000010 0050 kraken 000004 04 01 12 47.53453064 46.63891600 +Bench_McLachlan_Carpet_1lev 000010 0050 kraken 000008 04 01 12 57.37259865 55.95150100 +Bench_McLachlan_Carpet_1lev 000010 0050 kraken 000016 04 01 12 61.84874105 61.02382200 +Bench_McLachlan_Carpet_1lev 000010 0050 kraken 000032 04 01 12 63.57527709 62.93193100 +Bench_McLachlan_Carpet_1lev 000010 0050 kraken 000064 04 01 12 60.43496895 60.02775000 +Bench_McLachlan_Carpet_1lev 000010 0050 kraken 000128 04 01 12 62.58501983 62.20388500 +Bench_McLachlan_Carpet_1lev 000010 0050 kraken 001024 04 01 12 60.39621639 59.78773300 +Bench_McLachlan_Carpet_1lev 000010 0050 kraken 004096 04 01 12 64.66578913 64.03600400 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000001 01 01 02 290.59384036 290.42214400 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000002 01 01 02 322.72628903 322.52815700 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000002 02 01 02 315.50726414 314.96368700 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000002 02 02 02 566.60829949 566.32739300 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000004 01 01 02 319.04495120 318.80392300 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000004 02 01 02 326.05179238 325.57634500 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000004 02 02 02 608.65147138 608.28201300 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000004 04 01 02 338.25178266 337.01706500 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000004 04 01 12 113.96951675 112.35102400 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000004 04 01 13 114.07574987 112.41902600 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000004 04 02 02 602.51760316 601.32958500 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000004 04 04 02 1188.90550756 1188.34226800 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000008 02 01 02 336.60824203 335.88098800 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000008 02 02 02 620.35857821 619.90274200 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000008 04 01 02 351.16425180 349.96586900 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000008 04 01 12 116.48792005 115.05118800 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000008 04 01 13 116.72861791 115.19119800 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000008 04 02 02 639.66929793 638.63991400 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000008 04 04 02 1362.29413152 1361.64109500 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000016 04 01 02 346.97067857 345.86561500 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000016 04 01 12 116.12090397 114.32314200 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000016 04 01 13 116.46594119 114.61916800 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000016 04 02 02 682.83341646 681.59859200 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000016 04 04 02 1346.92159390 1346.23613500 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000032 04 01 12 122.02278614 120.49153900 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000032 04 01 13 121.89060760 120.41952500 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000064 04 01 12 133.34211421 131.98424500 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000064 04 01 13 133.07034540 131.70423300 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000128 04 01 12 126.24902773 125.24382700 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000128 04 01 13 126.16576052 125.01580900 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000256 04 01 12 121.48957920 120.34752300 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000256 04 01 13 121.20860124 120.02749600 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000512 04 01 12 122.69511318 121.47159100 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 000512 04 01 13 122.63144135 121.28757900 +Bench_McLachlan_Carpet_1lev 000010 0065 kraken 001024 04 01 13 119.64759731 118.44740700 +Bench_McLachlan_Carpet_9lev 000000 0016 kraken 000004 04 01 20 0.42990088 0.41202400 +Bench_McLachlan_Carpet_9lev 000000 0016 kraken 000008 04 01 20 0.60535240 0.58003700 +Bench_McLachlan_Carpet_9lev 000000 0016 kraken 000016 04 01 20 0.73021340 0.69604300 +Bench_McLachlan_Carpet_9lev 000000 0016 kraken 000032 04 01 20 0.77014732 0.75605100 +Bench_McLachlan_Carpet_9lev 000000 0016 kraken 000064 04 01 20 0.77263713 0.76404700 +Bench_McLachlan_Carpet_9lev 000000 0016 kraken 000128 04 01 20 0.71798992 0.71604500 +Bench_McLachlan_Carpet_9lev 000000 0016 kraken 000256 04 01 20 0.77080584 0.75604900 +Bench_McLachlan_Carpet_9lev 000000 0016 kraken 000512 04 01 20 0.80342603 0.82005000 +Bench_McLachlan_Carpet_9lev 000000 0016 kraken 001024 04 01 20 0.85210562 0.82405100 +Bench_McLachlan_Carpet_9lev 000000 0016 kraken 002048 04 01 20 0.95456362 0.95605900 +Bench_McLachlan_Carpet_9lev 000000 0016 kraken 004096 04 01 20 1.09393191 1.05606800 +Bench_McLachlan_Carpet_9lev 000000 0020 kraken 000004 04 01 20 0.78223920 0.76805200 +Bench_McLachlan_Carpet_9lev 000000 0020 kraken 000008 04 01 20 0.96144462 0.94805900 +Bench_McLachlan_Carpet_9lev 000000 0020 kraken 000016 04 01 20 1.05743384 1.03206100 +Bench_McLachlan_Carpet_9lev 000000 0020 kraken 000032 04 01 20 1.14855146 1.14407500 +Bench_McLachlan_Carpet_9lev 000000 0020 kraken 000064 04 01 20 1.06396031 1.03606700 +Bench_McLachlan_Carpet_9lev 000000 0020 kraken 000128 04 01 20 1.08736897 1.08006600 +Bench_McLachlan_Carpet_9lev 000000 0020 kraken 000256 04 01 20 1.10718513 1.10407000 +Bench_McLachlan_Carpet_9lev 000000 0020 kraken 000512 04 01 20 1.12612391 1.10406900 +Bench_McLachlan_Carpet_9lev 000000 0020 kraken 001024 04 01 20 1.16232228 1.13607000 +Bench_McLachlan_Carpet_9lev 000000 0020 kraken 002048 04 01 20 1.26629829 1.23607800 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000004 04 01 20 1.24968076 1.26407700 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000004 04 01 21 1.24759078 1.18407500 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000004 04 01 22 1.25134802 1.20407600 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000004 04 01 23 1.24739766 1.21207300 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000004 04 01 24 1.24745512 1.26008100 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000004 04 01 26 5.36358881 5.35233400 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000004 04 01 28 1.24911022 1.21207500 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000008 04 01 20 1.53654361 1.50809000 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000008 04 01 21 1.54063582 1.49209100 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000008 04 01 22 1.54419923 1.50809400 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000008 04 01 23 1.53450680 1.49209400 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000008 04 01 24 1.55324411 1.50409400 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000008 04 01 28 1.55500674 1.47609100 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000016 04 01 20 1.66094589 1.62809800 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000016 04 01 21 1.65917921 1.56009700 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000016 04 01 22 1.65821075 1.61210300 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000016 04 01 23 1.66190243 1.60410200 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000016 04 01 24 1.65859079 1.64410300 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000016 04 01 28 1.64964342 1.60809800 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000032 04 01 20 1.66092253 1.62810300 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000032 04 01 21 1.66033697 1.62410600 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000032 04 01 22 1.69760680 1.64410000 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000032 04 01 23 1.65760398 1.62410200 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000032 04 01 24 1.66064453 1.63210200 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000032 04 01 28 1.69893694 1.66410600 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000064 04 01 20 1.55421257 1.56010000 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000064 04 01 21 1.41991830 1.40009100 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000064 04 01 22 1.43889093 1.40809100 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000064 04 01 23 1.42048407 1.38808800 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000064 04 01 24 1.40849781 1.40408800 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000064 04 01 28 1.42752171 1.43208600 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000128 04 01 20 1.40061307 1.37208800 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000128 04 01 21 1.46240473 1.43209000 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000128 04 01 22 1.46996927 1.46009300 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000128 04 01 23 1.45506263 1.44008900 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000128 04 01 24 1.45532107 1.45209300 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000128 04 01 28 1.46230698 1.44009000 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000256 04 01 20 1.51593757 1.50809700 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000256 04 01 21 1.52082348 1.49609300 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000256 04 01 22 1.47858047 1.48409400 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000256 04 01 23 1.46152544 1.44008900 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000256 04 01 24 1.50064564 1.48409500 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000256 04 01 28 1.47120667 1.46408800 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000512 04 01 20 1.42407560 1.40008900 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000512 04 01 21 1.45830798 1.42808900 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000512 04 01 22 1.41723943 1.39608800 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000512 04 01 23 1.44575596 1.46009300 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000512 04 01 24 1.39861012 1.39608800 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 000512 04 01 28 1.39329314 1.38408500 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 001024 04 01 20 1.44669151 1.39608900 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 001024 04 01 21 1.40720439 1.38408400 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 001024 04 01 22 1.45295382 1.43609300 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 001024 04 01 23 1.42609310 1.40008700 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 001024 04 01 24 1.42653608 1.40808900 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 001024 04 01 28 1.45682573 1.44408900 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 002048 04 01 23 1.52519488 1.48809600 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 002048 04 01 24 1.48798704 1.46409100 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 002048 04 01 28 1.53453398 1.50409300 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 002048 04 01 30 11.01676250 10.72066700 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 004096 04 01 23 1.65628982 1.62810500 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 004096 04 01 24 1.65733194 1.60410000 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 004096 04 01 28 1.62728333 1.58410300 +Bench_McLachlan_Carpet_9lev 000000 0025 kraken 008192 04 01 28 2.10963917 2.07613500 +Bench_McLachlan_Carpet_9lev 000064 0016 kraken 000008 04 01 12 59.28970456 58.29564300 +Bench_McLachlan_Carpet_9lev 000064 0016 kraken 000016 04 01 12 65.98585582 64.96806400 +Bench_McLachlan_Carpet_9lev 000064 0016 kraken 000032 04 01 12 71.64952087 70.63641500 +Bench_McLachlan_Carpet_9lev 000064 0016 kraken 000064 04 01 12 80.28133035 79.52496800 +Bench_McLachlan_Carpet_9lev 000064 0016 kraken 000128 04 01 12 75.78867579 75.31270100 +Bench_McLachlan_Carpet_9lev 000064 0016 kraken 000512 04 01 12 74.75542927 74.26863300 +Bench_McLachlan_Carpet_9lev 000064 0020 kraken 000008 04 01 12 99.57380557 98.01411400 +Bench_McLachlan_Carpet_9lev 000064 0020 kraken 000016 04 01 12 109.34496260 107.86274600 +Bench_McLachlan_Carpet_9lev 000064 0020 kraken 000032 04 01 12 117.08045626 115.62722600 +Bench_McLachlan_Carpet_9lev 000064 0020 kraken 000064 04 01 12 127.15897346 126.14786400 +Bench_McLachlan_Carpet_9lev 000064 0020 kraken 000128 04 01 12 120.24960089 119.38347000 +Bench_McLachlan_Carpet_9lev 000064 0020 kraken 000256 04 01 12 115.43514180 114.55514800 +Bench_McLachlan_Carpet_9lev 000064 0020 kraken 000512 04 01 12 108.67757297 107.86273900 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000001 01 01 02 390.82171249 390.59240000 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000001 01 01 12 82.98405814 82.78917100 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000002 01 01 02 518.23250127 518.06037600 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000002 01 01 12 111.45380449 111.26294600 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000002 02 01 02 513.29658246 512.72406100 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000002 02 01 12 111.51867676 110.83092900 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000002 02 02 02 768.23593163 767.13994400 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000002 02 02 12 168.05468917 167.05044300 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000004 01 01 02 663.19027090 662.88144400 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000004 01 01 12 142.01069903 141.60486900 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000004 02 01 02 652.03929019 651.12868200 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000004 02 01 12 140.29551244 139.34470500 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000004 02 02 02 957.09496880 956.29577900 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000004 02 02 12 220.49860144 219.84573000 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000004 04 01 02 661.17707586 659.74922900 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000004 04 01 12 157.98915696 156.30178100 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000004 04 02 02 953.97091055 952.22752600 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000004 04 02 12 227.09365702 225.50606800 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000004 04 04 02 1419.20380092 1417.19654500 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000004 04 04 12 313.76681566 311.72748600 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000008 02 01 02 714.04854393 713.20855500 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000008 02 01 12 157.72910070 156.59778900 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000008 02 02 02 1082.61224389 1081.52357600 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000008 02 02 12 226.94823670 226.05015500 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000008 04 01 02 733.03455138 731.44970700 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000008 04 01 12 176.83414459 174.33889100 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000008 04 02 02 1081.98371029 1080.09549500 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000008 04 02 12 236.78401709 234.65070100 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000008 04 04 02 1663.53895569 1660.96380500 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000008 04 04 12 368.81383181 366.28688800 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000016 04 01 02 761.48003578 759.71548300 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000016 04 01 12 191.28287601 189.32785300 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000016 04 02 02 1185.30628443 1182.85792300 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000016 04 02 12 258.24271488 255.62396100 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000016 04 04 02 1997.87910414 1994.81669500 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000016 04 04 12 438.11482263 435.09521100 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000032 04 01 12 198.71298528 196.70829100 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000064 04 01 12 210.70279431 209.46508500 +Bench_McLachlan_Carpet_9lev 000064 0025 kraken 000128 04 01 12 201.95456743 200.34852000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000001 01 01 30 191.13029528 190.56792200 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000002 01 01 30 251.60589910 251.05972400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000002 02 01 30 252.20534420 250.99569200 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000002 02 02 30 358.18211675 356.35828400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 01 01 30 312.89618635 312.17951200 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 02 01 30 320.25629282 318.25590200 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 02 02 30 452.85988450 450.93618600 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 04 01 30 359.11516166 355.09020200 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 04 02 30 455.83467698 451.25223400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000004 04 04 30 666.83156729 662.73740700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 02 01 30 346.07263160 343.40145400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 02 02 30 506.04421544 503.57144000 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 04 01 30 395.14211416 389.88835800 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 04 02 30 512.53612590 506.69569200 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000008 04 04 30 793.37660098 788.42126400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000016 04 01 30 426.47779179 421.43031100 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000016 04 02 30 584.80397463 578.43612200 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000016 04 04 30 961.81026244 955.04365500 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000032 04 01 30 442.68943238 438.42743500 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000064 04 01 30 467.59605861 464.96112600 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000128 04 01 30 436.89950633 433.63111200 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000256 04 01 30 409.53397202 406.27737100 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 000512 04 01 30 376.08005142 373.48734500 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 001024 04 01 30 357.54836154 355.05822700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 002048 04 01 30 350.21378970 347.39769100 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 004096 04 01 30 352.67783785 349.93386500 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 008192 04 01 30 351.96358228 349.36181400 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 008192 04 02 30 471.55692077 468.38126300 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 016384 04 02 30 479.72800827 476.78171700 +Bench_McLachlan_Carpet_9lev 000128 0025 kraken 016384 04 04 30 809.98531985 808.91855300 diff --git a/Carpet/CarpetWeb/sicortex/results-queenbee.out b/Carpet/CarpetWeb/sicortex/results-queenbee.out new file mode 100644 index 000000000..5db4b6512 --- /dev/null +++ b/Carpet/CarpetWeb/sicortex/results-queenbee.out @@ -0,0 +1,64 @@ +# Cactus benchmark results +# processes = procs +# nodes = procs / ppn +# +# benchmark steps size machine procs ppn tpp iter walltime cputime +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000001 01 01 00 192.41465856 192.19000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000002 01 01 00 247.58707602 247.54000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000002 02 01 00 252.84641560 252.63000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000002 02 02 00 211.89443066 423.22000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000004 01 01 00 291.86994262 291.58000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000004 02 01 00 299.71507797 299.27000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000004 02 02 00 284.05902364 560.60000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000004 04 01 00 327.73749532 327.60000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000004 04 02 00 306.53941308 601.71000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000004 04 04 00 266.50271884 1047.06000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000008 01 01 00 334.87156639 334.98000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000008 02 01 00 341.38289479 341.18000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000008 02 02 00 329.95559572 650.56000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000008 04 01 00 363.86975480 363.84000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000008 04 02 00 347.63124832 685.44000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000008 04 04 00 349.35187769 1372.93000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000008 08 01 00 472.02766403 471.96000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000008 08 02 00 432.37333332 848.06000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000008 08 04 00 405.74953017 1589.56000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000008 08 08 00 311.92569237 2418.38000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000016 02 01 00 376.39248101 376.05000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000016 02 02 00 360.33294887 704.33000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000016 04 01 00 391.21701541 391.10000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000016 04 02 00 376.96218700 738.11000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000016 04 04 00 427.00053038 1655.09000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000016 08 01 00 487.31315479 487.13000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000016 08 02 00 450.30715053 886.20000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000016 08 04 00 478.74580880 1858.89000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000016 08 08 00 451.08012243 3476.24000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000032 04 01 00 412.51873882 412.45000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000032 04 02 00 397.65224627 781.26000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000032 04 04 00 494.58752844 1893.86000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000032 08 01 00 521.08718036 520.56000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000032 08 02 00 462.28543603 901.44000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000032 08 04 00 536.74782493 2071.99000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000032 08 08 00 553.78660053 4207.04000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000064 08 01 00 534.01307232 534.02000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000064 08 02 00 514.00439649 964.46000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000064 08 04 00 589.64245797 2178.76000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000064 08 08 00 648.65108784 4776.36000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000128 08 01 00 521.74439626 521.24000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000128 08 02 00 511.19930447 956.29000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000128 08 04 00 619.28712022 2143.82000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000128 08 08 00 695.10842290 5124.03000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000256 08 01 00 514.35862553 514.12000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000256 08 02 00 528.11674355 977.45000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000256 08 04 00 625.20248372 2171.54000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000256 08 08 00 750.10765112 5297.43000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000512 08 01 00 508.68920159 508.38000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000512 08 02 00 521.84319640 969.64000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000512 08 04 00 595.94903104 2098.18000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 000512 08 08 00 820.56607938 4984.09000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 001024 08 01 00 483.79867738 483.14000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 001024 08 02 00 537.76884637 990.30000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 001024 08 04 00 619.06761756 2145.23000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 001024 08 08 00 794.11657260 5014.59000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 002048 08 02 00 526.11768787 968.65000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 002048 08 04 00 624.46017058 2173.93000000 +Bench_McLachlan_Carpet_9lev 000128 0025 queenbee 002048 08 08 00 751.06089897 4937.30000000 diff --git a/Carpet/CarpetWeb/sicortex/results-ranger.out b/Carpet/CarpetWeb/sicortex/results-ranger.out new file mode 100644 index 000000000..f3d2cd6f5 --- /dev/null +++ b/Carpet/CarpetWeb/sicortex/results-ranger.out @@ -0,0 +1,731 @@ +# Cactus benchmark results +# processes = procs +# nodes = procs / ppn +# +# benchmark steps size machine procs ppn tpp iter walltime cputime +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000001 01 01 00 203.34181004 203.17269400 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000002 01 01 00 216.48381171 214.91743400 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000004 01 01 00 224.79743401 222.67391600 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000004 02 01 00 225.55916500 223.26195300 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000004 02 02 00 227.73820433 448.76805100 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000004 04 01 00 250.15185397 247.88349900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000004 04 02 00 228.08169453 449.48009900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000004 04 04 00 217.13066064 842.24063700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000008 01 01 00 233.10094116 229.75036200 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000008 02 01 00 233.19921911 229.78636000 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000008 02 02 00 244.37134496 477.12581700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000008 04 01 00 258.23619396 254.33989300 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000008 04 02 00 244.90335442 477.42583900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000008 04 04 00 249.90565515 961.74010700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000008 08 01 00 269.97584784 266.77666800 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000008 08 02 00 263.66399936 514.15613600 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000008 08 04 00 251.26438961 962.74016300 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000008 08 08 00 451.35835544 1759.58196800 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 01 01 00 251.79208282 248.25551300 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 02 01 00 250.43519239 247.35945700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 02 02 00 262.76931463 499.52722200 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 04 01 00 272.61282118 268.75279900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 04 02 00 263.38652800 497.81511700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 04 04 00 267.84285138 1015.03143900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 08 01 00 283.82180268 280.40552400 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 08 02 00 276.44695753 529.56109800 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 08 04 00 269.95993217 1019.53972100 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 16 02 00 302.52861096 580.79630100 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 16 04 00 287.96300239 1085.59584900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 16 08 00 506.02417788 1958.31438900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000016 16 16 00 945.63415069 3586.02411700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 02 01 00 244.06186508 240.83505200 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 02 02 00 311.07908856 545.71810200 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 04 01 00 260.56962053 256.90806000 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 04 02 00 307.42328503 541.94187400 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 08 02 00 329.18879068 579.17619800 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 08 04 00 320.86426466 1168.51303200 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 08 08 00 557.53919876 2063.66497100 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 16 01 00 301.34188177 297.53859700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 16 02 00 355.17583551 633.57159300 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 16 04 00 341.13174056 1237.64134900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 16 08 00 569.41086980 2091.24669300 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000032 16 16 00 1033.12306375 3830.38338700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000064 04 01 00 289.06331326 285.16581900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000064 04 02 00 352.71452486 598.60540800 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000064 04 04 00 362.43147997 1209.49558600 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000064 08 01 00 304.82141249 300.97080700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000064 08 02 00 357.45966333 615.11044000 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000064 08 04 00 364.19004945 1221.94837000 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000064 16 02 00 410.85168504 676.29426200 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000064 16 04 00 389.78656087 1289.66060200 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000064 16 08 00 617.16478157 2196.09324100 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000064 16 16 00 1122.14518604 3964.89579300 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000128 08 01 00 283.19449419 279.26945200 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000128 08 02 00 354.73297941 638.81991800 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000128 08 04 00 351.54334233 1171.76523100 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000128 08 08 00 686.13575692 2212.90629800 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000128 16 01 00 314.41209947 309.90736600 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000128 16 02 00 381.45197367 685.53884100 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000128 16 04 00 381.18182537 1250.76617500 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000128 16 16 00 1238.58164954 4001.79410300 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000256 16 01 00 321.26949165 317.55183900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000256 16 02 00 353.36466413 627.80722700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000256 16 04 00 394.88733847 1258.84668200 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000256 16 08 00 750.20929978 2398.59789600 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000256 16 16 00 1296.49837951 4002.73814800 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000512 16 01 00 330.05376020 328.70453600 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000512 16 02 00 370.45905646 641.72410300 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000512 16 04 00 463.38659104 1306.92167900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000512 16 08 00 817.68327319 2451.90123900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 000512 16 16 00 1392.72301206 4172.90078600 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 001024 16 01 00 327.57180887 326.18838700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 001024 16 02 00 393.14333660 665.91761700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 001024 16 04 00 460.19393866 1323.99474200 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 001024 16 08 00 829.87244544 2422.70740900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 001024 16 16 00 1417.12743675 4216.83553800 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 002048 16 01 00 336.75282418 335.08493800 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 002048 16 02 00 415.28737663 659.84523800 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 002048 16 04 00 461.46395478 1308.48578000 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 002048 16 08 00 824.18623915 2315.60871300 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 002048 16 16 00 1773.87495286 4689.15305600 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 004096 16 01 00 345.42287805 344.43352700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 004096 16 02 00 456.01397646 731.16169900 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 004096 16 04 00 468.62811576 1321.83061000 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 004096 16 08 00 781.69233130 2354.10312300 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 008192 16 02 00 408.13220878 671.70598400 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 008192 16 04 00 435.55672982 1382.01036700 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 008192 16 08 00 824.13038674 2327.15343400 +Bench_McLachlan_Carpet_1lev 000024 0065 ranger 008192 16 16 00 1644.94038777 4342.18337400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 15 1.99500456 1.73611200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 16 2.00825253 1.71611100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 17 1.99534991 1.74410700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 18 1.92537351 1.72410800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 19 1.80289350 1.67210600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 20 1.89577949 1.72410400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 21 2.03105967 1.73610600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 22 1.98644780 1.70410400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 23 1.98241529 1.72811000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 24 2.09280068 1.74410900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 25 1.72968587 1.72010700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 26 1.83753688 1.66410200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 32 1.76542921 1.71211000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 33 1.70881499 1.68010700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 34 1.71809744 1.72410700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 35 1.92583941 1.92412000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 36 2.60543477 1.84011200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 37 1.78591132 1.67610600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 38 1.67977806 1.65610300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 39 1.71200809 1.68410800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 40 1.92712333 1.71610600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 45 10.92630000 10.82467500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 46 202.63338200 50.85917400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 47 10.95013800 10.73666800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 60 13.47732400 13.25682900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 61 11.09817600 11.08468800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 62 13.52589500 13.27283100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 63 13.51054200 13.21682600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 64 11.08019700 11.07269300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 65 12.79806000 12.49678500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 66 11.67222800 11.50471500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 68 11.02299500 10.90468000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 69 12.30104200 12.03675200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 70 11.51838900 11.09269500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000016 16 01 71 11.67129800 11.41671600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 15 1.85304780 1.82811700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 16 2.01170792 1.84011400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 17 2.03905799 2.02812900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 18 2.03484985 1.84811400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 19 1.89138905 1.81611400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 20 1.88166371 1.86011400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 21 1.85964446 1.85211800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 22 1.88492482 1.87211600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 23 1.89094756 1.88011500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 24 2.19453134 1.84011900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 25 2.15761771 1.87611600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 26 1.89103346 1.85611700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 32 1.89248386 1.86011400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 33 2.09446628 1.84811300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 34 1.94313465 1.84011200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 35 1.91670404 1.87211900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 36 1.93606592 1.90011600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 37 1.82418737 1.80011200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 38 1.85275587 1.81611200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 39 1.89841448 1.87211900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 40 2.24104077 1.92011800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 45 12.05363100 11.94074500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 46 153.75240200 38.76242300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 47 12.12808900 12.11676100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 60 14.92394500 14.78492700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 61 12.12349400 12.10075400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 62 14.80466800 14.74892300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 63 14.96187400 14.76092000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 64 12.12595700 12.12475500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 65 14.30293200 14.16088700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 66 13.13248600 13.04481600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 68 11.91711700 11.90874800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 69 13.52738500 13.50084500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 70 12.10463500 12.10076100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000032 16 01 71 12.51535400 12.43277500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 15 2.14613841 2.13613300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 16 2.08964146 2.07213000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 17 2.23050875 2.22414000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 18 2.45300750 2.42815000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 19 2.69288940 2.66816700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 20 2.30087397 2.26413900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 21 2.71575292 2.69617000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 22 2.27281504 2.25213900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 23 2.89347846 2.86417800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 24 2.74981965 2.75217300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 25 2.43014465 2.41215200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 26 2.27919672 2.19213600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 32 2.51603498 2.49615300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 33 2.34132568 2.24014300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 34 2.19736293 2.14013200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 35 2.42015784 2.16013200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 36 2.19682006 2.18013500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 37 2.47760253 2.47215200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 38 2.09433999 2.05612900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 39 2.15514387 2.13613200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 40 2.23896073 2.21614100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 45 10.95491800 10.87668200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 46 106.99900000 27.63373000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 47 10.66279400 10.57666300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 60 16.02752500 15.98900000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 61 11.20916600 11.15670000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 62 15.88848200 15.86499100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 63 15.97672400 15.93699700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 64 11.44016900 11.21270800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 65 16.10954400 15.98500300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 66 13.21578600 13.20082600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 68 10.71742600 10.70867100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 69 13.56445000 13.52484800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 70 11.25670200 11.16469700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000064 16 01 71 11.90071800 11.63672700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 15 2.44970802 2.26414000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 16 2.44833974 2.32414800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 17 2.17747496 2.13212900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 18 2.17540596 2.14813400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 19 2.22853039 2.21214100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 20 2.25197693 2.24414200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 21 2.39005092 2.35214700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 22 2.21986902 2.19213900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 23 2.22432535 2.22013800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 24 2.34639108 2.32014600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 25 2.22560016 2.19613700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 26 2.31736788 2.28814300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 32 2.33359981 2.31614200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 33 2.07182797 2.03212500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 34 2.33560754 2.32414700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 35 2.19612642 2.09213100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 36 2.19244615 2.16413500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 37 2.56025559 2.53615900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 38 2.14005742 2.10413400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 39 2.21802727 2.19213500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 40 2.34475534 2.23213900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 45 10.59146700 10.47665100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 46 121.83194400 31.24195100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 47 9.74507300 9.73260600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 61 10.81497000 10.58865900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 62 15.83085700 15.80098800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 63 16.00367800 15.98499700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 64 10.68756500 10.54865800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 65 15.84196900 15.81298400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 66 14.56524400 14.53291100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 68 10.19511200 10.18463500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 69 15.11225800 15.08894100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 70 10.60586400 10.56865700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000128 16 01 71 11.36569300 11.30870500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 15 2.61408830 2.59216400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 16 2.38613506 2.36814600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 17 2.65185052 2.63216400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 18 2.21687388 2.21614200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 19 2.46240048 2.31214300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 20 2.46646909 2.46415100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 21 2.57484497 2.56415900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 22 2.65125207 2.62016000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 23 2.49789271 2.49615600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 24 2.46372185 2.44414900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 25 2.49743606 2.34014800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 26 2.53578516 2.46815600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 32 2.32310441 2.33614600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 33 2.56218035 2.55615800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 34 2.20594374 2.18413700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 35 2.36721832 2.37214800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 36 2.66904334 2.66416600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 37 2.66352913 2.64016100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 38 2.33906610 2.33214500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 39 2.36094293 2.33214600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 40 2.50301425 2.42415400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 45 10.54430300 10.50866100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 46 105.94739300 26.98968800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 47 10.16426200 10.14063600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 61 10.65739500 10.62066700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 62 16.37545900 16.34101900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 63 16.53941800 16.50903400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 64 11.19909400 11.17269800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 65 16.05018200 15.99299800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 66 18.35528100 18.28514800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 68 10.25009600 10.23264100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 69 19.74344600 19.55722000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 70 10.69282400 10.68066800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000256 16 01 71 11.11411900 11.08069000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 23 2.77533373 2.72417000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 24 3.47726487 3.45621600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 25 7.75072005 7.74448500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 26 2.78908377 2.76417400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 32 2.50527371 2.47615500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 33 2.84105095 2.84017600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 34 2.38207440 2.37614700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 35 2.48143756 2.46815400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 36 2.52331640 2.47615600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 37 2.48741660 2.45215200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 38 2.69686531 2.56816000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 39 2.43263093 2.39615100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 40 2.63556658 2.61216400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 45 10.70063300 10.44465300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 47 10.23449000 10.22063700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 63 17.44569300 17.40108600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 65 16.34998700 16.31701600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 66 25.81468100 25.64560200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 66 32.28495700 32.28201600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 66 34.81439500 34.63816500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 66 34.96018700 34.65416800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 68 10.12227100 10.11663300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 69 27.51798900 27.31770500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 000512 16 01 71 13.30935100 12.96880600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 23 2.70602361 2.68016800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 24 2.82725128 2.82817600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 25 2.71012373 2.64816500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 26 2.70717850 2.66416700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 32 2.80160223 2.80017500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 33 2.96337194 2.94818500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 34 2.44735784 2.42415500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 35 2.92295252 2.88017700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 36 2.84464568 2.47215300 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 38 2.47655275 2.48015500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 39 2.36914912 2.30414100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 42 10.24891600 9.95662400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 52 10.04778200 9.97662400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 63 17.51489100 17.46509400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 65 16.74508900 16.51303500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 001024 16 01 71 10.68492600 10.54465500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 23 3.64010966 3.64423000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 24 3.75214619 3.70422900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 25 3.54584343 3.52822100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 26 3.33211255 3.22020200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 32 3.52961315 3.53621800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 33 2.77292498 2.72416800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 34 2.44419424 2.45215200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 35 2.62340227 2.00412400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 36 2.55986319 2.41615100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 37 2.50177845 2.52415600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 38 2.29403566 2.28414100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 39 2.21099217 2.17613500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 59 19.20047400 18.75317000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 60 19.44039300 19.17319900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 63 19.68925600 19.28920800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 65 18.39071800 18.36115100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 69 77.17565300 76.88080800 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 002048 16 01 71 10.14661700 9.86061600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 004096 16 01 32 3.02414120 3.01619100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 004096 16 01 33 2.82916677 2.81217700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 004096 16 01 34 2.73830927 2.70416900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 004096 16 01 35 3.13103430 3.08419400 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 004096 16 01 36 3.62117172 2.96818500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 004096 16 01 37 3.07523643 3.05219100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 004096 16 01 38 9.34603220 9.33258200 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 004096 16 01 39 4.41087391 4.40027600 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 004096 16 01 71 10.41400200 9.96062700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 008192 16 01 32 19.03294052 19.03318900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 008192 16 01 33 3.20325611 3.18420100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 008192 16 01 34 3.64873286 3.63622900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 008192 16 01 35 5.76824320 5.74435900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 008192 16 01 36 4.06577632 3.83224100 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 008192 16 01 37 4.00333875 3.99624700 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 008192 16 01 38 3.47725648 3.44421500 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 008192 16 01 39 4.64220864 3.98825000 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 012288 16 01 37 7.63925136 7.62847900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 012288 16 01 38 4.95942385 4.92830900 +Bench_McLachlan_Carpet_9lev 000000 0025 ranger 012288 16 01 39 6.55097068 5.95237300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000001 01 01 00 122.54106532 122.43964000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000001 01 01 70 137.91245362 137.53659500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000001 01 01 71 135.63270587 135.40044100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000002 01 01 00 183.05137779 182.34740400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000002 01 01 70 187.30018361 186.34765600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000002 01 01 71 185.75841382 184.67950200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000002 02 01 00 180.00077328 179.96324900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000002 02 01 70 188.91985668 188.72779100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000002 02 01 71 186.41453722 186.15565600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000002 02 02 00 129.85302923 258.85217000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000002 02 02 70 139.97521767 278.69341900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000002 02 02 71 141.51701227 281.73762600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 01 01 00 236.26691144 234.90266100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 01 01 70 236.73086903 234.96268500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 01 01 71 229.82467734 228.02229000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 02 01 00 236.15145878 235.09065900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 02 01 70 240.49140858 239.34294100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 02 01 71 232.66685038 231.09043800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 02 02 00 216.99292067 426.67066900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 02 02 70 217.82767517 428.97080600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 02 02 71 216.73058569 426.98272200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 04 01 00 248.75942817 248.53554600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 04 01 70 232.06587985 231.78249500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 04 01 71 228.27816767 228.01424800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 04 02 00 214.19796909 422.93842400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 04 02 70 220.67594718 435.16720400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 04 02 71 209.97284200 414.55791500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 04 04 00 225.72213129 891.25570400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 04 04 70 257.72389956 1015.82752300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000004 04 04 71 257.80748799 1012.46728000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 01 01 00 274.82082107 272.30100200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 01 01 70 288.00210531 285.37783300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 01 01 71 274.44160638 271.89699400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 02 01 00 273.54665117 271.10493300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 02 01 70 286.84754310 284.44175300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 02 01 71 265.18844890 262.77241500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 02 02 00 271.56964828 531.53722400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 02 02 70 258.95359301 506.47966600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 02 02 71 246.48077225 483.78221200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 04 01 00 288.28569852 286.34586800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 04 01 70 282.58045572 280.80555200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 04 01 71 270.86291599 269.04481700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 04 02 00 271.14896550 530.75718300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 04 02 70 257.72701692 505.51159700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 04 02 71 249.47188872 489.49062600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 04 04 00 322.88345290 1264.75505300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 04 04 70 328.14615812 1287.45648300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 04 04 71 321.18477198 1262.11486800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 01 00 297.04119270 296.97457100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 01 70 287.90201298 287.66194600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 01 71 279.55088937 277.57337300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 02 00 285.83271012 561.34306600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 02 71 242.58659491 479.38994400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 04 00 320.14915635 1255.83848600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 04 70 320.23161459 1253.39429600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 04 71 328.67928713 1292.82478800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 08 00 448.40270118 1763.57421700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 08 70 292.77910061 2273.21404200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000008 08 08 71 291.50975695 2271.12593300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 01 01 00 301.51189092 299.24667900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 01 01 70 303.41105413 300.74280200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 01 01 71 292.02127953 289.43007600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 02 01 00 301.62872519 299.57471400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 02 01 70 309.30955111 307.18317000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 02 01 71 295.99160188 294.03436700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 02 02 00 309.13612524 597.00130800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 02 02 70 288.63654603 562.76319700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 02 02 71 274.05435093 535.64549700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 04 01 00 318.14699887 316.27575400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 04 01 70 303.45030848 302.42288800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 04 01 71 296.42845066 294.75439600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 04 02 00 309.54233248 602.84166500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 04 02 70 295.24449971 575.24799300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 04 02 71 274.77006856 537.34158400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 04 04 00 417.05867436 1607.25245900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 04 04 70 409.92962198 1583.87495800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 04 04 71 380.32455437 1480.97253000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 01 00 323.18693460 323.06420400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 01 70 310.41332580 309.94337800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 01 71 300.73102585 300.54277200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 02 00 328.35249656 635.21967600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 02 70 284.72961366 558.63492700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 02 71 267.87115046 526.22084900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 04 00 418.01371976 1606.47240400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 04 70 405.35986899 1569.39808900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 04 71 397.65546045 1544.81659500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 08 00 726.72729222 2703.58096900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 08 70 407.85024613 3166.64991000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 08 08 71 414.87878198 3210.36063800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 00 360.43062715 359.66248400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 01 362.41548137 362.25466100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 02 359.46430584 358.82244000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 03 360.40211611 359.69846600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 04 361.60963682 360.76253200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 05 362.19089131 361.76658000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 06 362.14195383 361.62658800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 07 362.09293188 361.56259000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 08 363.41700161 362.63865000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 11 361.72727898 360.91055500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 27 362.05011972 361.62260700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 29 369.80960707 356.04224300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 30 372.54992350 360.49454200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 31 372.06669911 371.12721500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 69 350.95761078 350.33787100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 70 351.63983979 350.51789600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 01 71 343.44192950 342.61343200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 02 00 340.94451255 667.23371500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 02 71 291.96150409 576.26800500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 04 00 440.90069490 1696.21401700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 04 01 443.54903601 1698.69415800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 04 02 440.82711267 1688.11348200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 04 03 441.00726498 1691.36168700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 04 71 379.51016019 1481.32459900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 08 00 698.48752227 2602.79866000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 08 70 413.90443403 3212.12476500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 08 71 403.38112376 3126.97943500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 16 00 795.00396901 3094.41337900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 16 70 387.08693269 5906.86915500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000016 16 16 71 406.25572666 6185.22252200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 02 01 00 326.04384389 324.21627800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 02 01 70 337.57346556 335.35695900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 02 01 71 318.80304607 316.93181800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 02 02 00 333.07253875 644.93227800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 02 02 70 316.28406517 610.91020600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 02 02 71 298.15574373 578.73616000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 04 01 00 333.26932616 331.41269600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 04 01 71 313.61524679 311.77549800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 04 02 00 333.52000621 645.64032800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 04 02 71 291.33919633 566.53543500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 04 04 00 515.54133086 1943.80147900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 04 04 70 469.89494876 1810.14911700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 04 04 71 442.70702729 1717.55536200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 01 00 343.17846395 341.57736700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 01 70 340.33822680 338.78114200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 01 71 323.65484424 321.82412700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 02 00 351.70758524 675.06217300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 02 70 303.79429054 591.36899800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 02 71 293.69677634 568.89953600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 04 00 517.49909365 1954.82218200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 04 70 479.90251154 1844.21924800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 04 71 451.36163723 1748.77729400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 08 00 1055.86987880 3701.79133200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 08 70 531.59447720 4051.62517600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 08 08 71 507.91281970 3901.08381400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 00 390.31553259 389.97238000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 01 395.77887272 395.56872000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 02 390.80241660 389.85234000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 03 393.12085078 392.10847000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 04 395.55309817 395.37269600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 05 389.81423140 389.29636700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 06 393.19438455 392.82055600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 07 389.67084561 389.54837000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 08 391.29633427 391.10443000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 11 390.72713972 390.20437800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 27 398.28608009 396.02876700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 29 401.03977832 386.98017800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 30 404.52326881 394.25663200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 31 437.06683003 436.70730500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 69 382.99106211 382.33189300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 70 385.36752349 385.00806600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 01 71 375.95657347 375.46341200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 02 00 383.35456131 739.23424900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 02 70 349.61876433 680.23451300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 02 71 330.96690626 645.80038000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 04 00 529.41246322 1993.43258400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 04 01 537.49802173 2019.49822300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 04 02 528.36463041 1995.14468600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 04 03 535.24064646 2024.62652000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 04 70 463.23995386 1788.59178500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 04 71 429.58751955 1668.59631500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 08 00 1036.91991574 3633.95512500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 08 70 517.86666666 3962.95167500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 08 71 490.51058293 3782.34037100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 16 00 1346.48871925 4979.39919700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 16 70 649.30993415 9793.99613300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000032 16 16 71 656.72454561 9945.57355800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 04 01 00 384.25940026 382.68789800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 04 01 70 360.45498790 359.24643200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 04 01 71 342.33402440 341.78132500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 04 02 00 382.84727695 697.47958200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 04 02 70 347.90248895 645.36434500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 04 02 71 334.55869590 624.17098500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 04 04 00 569.85026179 2026.69067000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 04 04 70 516.36014326 1858.87618300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 04 04 71 487.75067417 1760.92603900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 01 00 386.26711080 386.06411100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 01 70 369.37387139 368.83503800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 01 71 367.71863649 367.61898100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 02 00 397.71097153 728.80952900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 02 70 353.01166100 652.56876500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 02 71 334.64443949 624.41101400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 04 00 572.20395575 2024.86254400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 04 70 534.26113687 1926.90839800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 04 71 504.74932960 1827.05818100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 08 00 1554.26026900 4989.75183300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 08 70 652.86537102 4888.66553100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 08 08 71 600.04190600 4547.24018500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 00 431.31010658 431.16292700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 01 441.13154728 439.83948700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 02 439.77616612 438.00337900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 03 470.26668580 469.08130800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 04 433.97723262 433.57512000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 05 456.80279773 455.35247100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 06 439.04137152 438.76341500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 07 427.26071143 426.63864600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 08 427.65338278 427.44271400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 11 437.41002050 437.15531900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 27 463.11914877 462.82891700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 29 2328.28713066 2318.43289800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 30 439.66708345 429.57086600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 31 433.89363870 433.76313800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 69 416.50034724 415.57397400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 70 436.47173601 436.23527100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 01 71 417.34331894 415.39392000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 02 00 427.14753026 787.80123700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 02 70 395.14246498 733.56984800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 02 71 368.67281962 693.36329100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 04 00 591.74799377 2118.78441700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 04 01 606.03415259 2161.71509800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 04 02 606.57069465 2160.00298500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 04 03 609.42726870 2169.47158600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 04 70 528.83833280 1917.96386400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 04 71 488.48490761 1789.02781400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 08 00 1546.19907614 5007.49296100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 08 70 631.67315156 4768.09001100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 08 71 607.70209688 4613.98434600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 16 00 1858.96060941 6315.72272000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 16 70 804.20874109 11734.48135300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000064 16 16 71 758.89552524 11259.30765700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 01 00 364.62904241 364.22276400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 01 70 379.81920310 379.69573800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 01 71 396.00827453 395.18070400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 02 00 440.86034016 796.68577000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 02 70 378.40813455 703.46795100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 02 71 413.95889019 758.59540300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 04 00 599.82393181 1979.99574800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 04 70 540.37555430 1850.29964100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 04 71 503.74059530 1748.33327700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 08 00 1788.01350286 5380.72425200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 08 70 678.67737144 5006.15286600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 08 08 71 642.28407215 4769.47405600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 00 404.99298149 404.92531000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 01 431.08043735 430.71091800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 02 427.04413413 426.51866000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 03 433.42988977 431.87500600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 04 417.92239112 417.67407500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 05 429.07855982 427.86275000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 06 444.53289246 444.34380100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 07 418.31180983 416.85004500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 08 422.25409577 420.87826200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 11 413.70373561 412.40574900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 27 434.69497877 432.78307600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 29 419.66531388 410.26962500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 30 439.21915391 428.73479800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 31 434.61412737 433.23107800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 69 430.70154522 430.00688500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 70 438.41579003 437.91137400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 01 71 431.95664416 431.63498300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 02 00 472.33713063 856.02950200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 02 70 421.91766016 779.28067100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 02 71 444.19184591 804.59427400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 04 00 628.96382082 2049.31606300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 04 01 642.24077718 2088.03048700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 04 02 689.82439842 2179.65220800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 04 03 670.76284182 2138.68566500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 04 70 559.62706526 1905.94711600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 04 71 545.43877754 1850.99568200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 08 00 1763.50365242 5334.35736900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 08 70 689.57964971 5051.44369100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 08 71 636.76134103 4722.85116200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 16 00 2237.19241006 7141.26229600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 16 70 800.63435093 11681.41004500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000128 16 16 71 743.16011415 11063.20738400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 00 416.81854382 416.65008200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 01 424.06496044 423.97053300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 02 435.50639245 435.05518500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 03 452.47220833 452.26825200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 04 420.10070920 419.89827200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 05 419.56022792 419.16618300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 06 435.70374093 433.69513500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 07 426.06771261 425.86660700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 08 416.79365528 416.45001900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 11 426.59510188 424.97055100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 27 422.20029125 421.98237100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 29 451.74462182 442.01958200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 30 429.08432736 421.15431500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 31 431.13646925 430.77493200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 69 428.61061831 428.29876600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 70 443.75125332 443.19964900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 01 71 430.91503566 430.43491100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 02 00 493.58668537 878.29491000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 02 70 482.44695258 863.17793000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 02 71 440.23977765 802.17812500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 04 00 639.43174573 2105.13555200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 04 02 661.28716728 2138.28163000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 04 03 661.23409816 2155.13869800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 04 70 563.27954600 1899.01067800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 04 71 522.37506390 1795.84423300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 08 00 2007.78571537 5415.25443200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 08 70 761.92412640 5155.37016100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 08 71 697.91456742 4817.27303700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 16 00 2633.87542579 7447.83346100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 16 70 874.75492376 12621.71282100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000256 16 16 71 792.28551614 11551.60588900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 00 432.15376549 432.15100400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 01 441.80254700 441.46759900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 02 466.84211560 466.84116400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 03 455.53552447 455.25647500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 04 429.11185786 428.98679500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 27 483.96443456 481.35408500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 29 455.41548594 447.59996800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 30 470.07764442 460.69678200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 31 467.55431002 465.62509900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 69 445.45534276 444.89979100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 01 71 432.57437397 431.60298900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 02 00 481.33138896 871.35843600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 02 71 450.67742913 816.63503800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 04 00 629.96891954 2108.09974400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 04 01 650.63503716 2168.72754200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 04 02 659.67285103 2198.78939500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 04 03 658.38587013 2192.54502800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 04 71 531.22941551 1840.13502800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 08 00 2182.42442297 5113.60358800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 000512 16 16 00 2917.04701424 7032.92755200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 01 00 430.57254488 429.10679800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 01 01 437.24065480 436.92725400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 01 02 470.04598340 469.48934500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 01 03 452.01172928 452.10824500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 01 04 435.76047032 435.42721100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 01 27 464.35032003 462.29691900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 01 29 465.19633431 457.62460400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 01 30 452.24806910 439.00743100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 01 31 454.38764507 451.27620200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 01 71 438.81654108 438.29943200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 02 00 503.23849598 902.79243700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 02 71 484.87606011 874.36265300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 04 00 648.85708079 2173.22782000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 04 01 678.40451218 2219.06267800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 04 02 692.87624405 2285.97485100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 04 03 693.47299075 2276.57427800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 04 71 547.03842935 1875.64522500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 08 00 2192.73954194 5185.64406200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 001024 16 16 00 3194.24190197 7228.57974800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 01 00 474.30655592 473.98159600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 01 01 482.89148177 482.66217100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 01 02 486.30503508 484.72232100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 01 03 486.71080130 485.29434700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 01 27 519.71460553 519.34445800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 01 29 502.39021118 491.49071300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 01 30 466.38628136 456.32853800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 01 31 463.41367294 463.26092800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 01 71 399.03692711 398.91291300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 02 00 516.41948016 932.54231900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 02 71 485.12292738 857.40158900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 04 00 644.42646233 2202.95367200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 04 01 676.88389260 2272.85005100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 04 02 671.90049929 2283.31869400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 04 03 679.92398633 2195.80124500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 04 71 573.36576023 1935.17692900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 002048 16 08 00 2191.28902042 5020.00972000 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 01 30 564.43722649 556.34275800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 01 31 540.58077165 540.06973100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 01 71 455.91632274 455.34043200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 02 00 598.95507284 1056.66598500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 02 71 471.13539881 838.79645300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 04 00 655.37947027 2238.28789400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 04 01 686.16152266 2319.69698300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 04 02 700.27613265 2338.29413500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 04 03 673.68116989 2296.11949200 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 04 71 573.91736912 1928.58452600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 004096 16 08 00 2164.29166218 4984.59550500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 008192 16 01 71 433.90391986 433.17103800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 008192 16 02 00 618.88302882 1096.32051400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 008192 16 02 71 451.53836770 830.44792700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 008192 16 04 00 664.84209040 2282.41064700 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 008192 16 04 01 687.25730075 2343.11442100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 008192 16 04 02 686.03115911 2356.38325800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 008192 16 04 03 699.08293954 2368.18000400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 008192 16 04 71 543.33106637 1907.09519100 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 008192 16 08 00 2165.34595664 4986.41963400 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 012288 16 01 71 437.99540328 436.87931300 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 012288 16 02 71 463.45291184 859.60171800 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 012288 16 04 01 738.65903756 2406.06234900 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 012288 16 04 02 793.26796536 2537.16257600 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 012288 16 04 03 710.98674150 2315.13667500 +Bench_McLachlan_Carpet_9lev 000128 0025 ranger 012288 16 04 71 545.43758320 1926.07638400 diff --git a/Carpet/CarpetWeb/sicortex/results-scaled.eps b/Carpet/CarpetWeb/sicortex/results-scaled.eps new file mode 100644 index 000000000..6348129c2 --- /dev/null +++ b/Carpet/CarpetWeb/sicortex/results-scaled.eps @@ -0,0 +1,844 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: results-scaled.eps +%%Creator: gnuplot 4.2 patchlevel 4 +%%CreationDate: Sat Mar 14 10:38:15 2009 +%%DocumentFonts: (atend) +%%BoundingBox: 50 50 230 176 +%%EndComments +%%BeginProlog +/gnudict 256 dict def +gnudict begin +% +% The following 6 true/false flags may be edited by hand if required +% The unit line width may also be changed +% +/Color true def +/Blacktext false def +/Solid false def +/Dashlength 1 def +/Landscape false def +/Level1 false def +/Rounded false def +/TransparentPatterns false def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +% +/vshift -46 def +/dl1 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if +} def +/dl2 { + 10.0 Dashlength mul mul + Rounded { currentlinewidth 0.75 mul add } if +} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +Level1 {} { +/SDict 10 dict def +systemdict /pdfmark known not { + userdict /pdfmark systemdict /cleartomark get put +} if +SDict begin [ + /Title (results-scaled.eps) + /Subject (gnuplot plot) + /Creator (gnuplot 4.2 patchlevel 4 ) + /Author (Erik Schnetter) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Sat Mar 14 10:38:15 2009) + /DOCINFO pdfmark +end +} ifelse +% +% Gnuplot Prolog Version 4.2 (August 2006) +% +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/N {newpath moveto} bind def +/Z {closepath} bind def +/C {setrgbcolor} bind def +/f {rlineto fill} bind def +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow {currentpoint stroke M 0 vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R + Blacktext {gsave 0 setgray show grestore} {show} ifelse} def +/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def +/DL {Color {setrgbcolor Solid {pop []} if 0 setdash} + {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def +/BL {stroke userlinewidth 2 mul setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/AL {stroke userlinewidth 2 div setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +/UL {dup gnulinewidth mul /userlinewidth exch def + dup 1 lt {pop 1} if 10 mul /udl exch def} def +/PL {stroke userlinewidth setlinewidth + Rounded {1 setlinejoin 1 setlinecap} if} def +% Default Line colors +/LCw {1 1 1} def +/LCb {0 0 0} def +/LCa {0 0 0} def +/LC0 {1 0 0} def +/LC1 {0 1 0} def +/LC2 {0 0 1} def +/LC3 {1 0 1} def +/LC4 {0 1 1} def +/LC5 {1 1 0} def +/LC6 {0 0 0} def +/LC7 {1 0.3 0} def +/LC8 {0.5 0.5 0.5} def +% Default Line Types +/LTw {PL [] 1 setgray} def +/LTb {BL [] LCb DL} def +/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def +/LT0 {PL [] LC0 DL} def +/LT1 {PL [4 dl1 2 dl2] LC1 DL} def +/LT2 {PL [2 dl1 3 dl2] LC2 DL} def +/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def +/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def +/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def +/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def +/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def +/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def +/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def +/Dia {stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt} def +/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt} def +/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke} def +/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt} def +/Star {2 copy Pls Crs} def +/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill} def +/TriUF {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill} def +/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt} def +/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill} def +/Pent {stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt} def +/PentF {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore} def +/Circle {stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt} def +/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def +/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def +/C1 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath} bind def +/C2 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C3 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C4 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C5 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc} bind def +/C6 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C7 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath} bind def +/C8 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C9 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath} bind def +/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath} bind def +/C11 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C12 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C13 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/C14 {BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc} bind def +/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath} bind def +/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath} bind def +/Square {dup Rec} bind def +/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def +/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def +/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def +/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def +/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def +/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def +/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def +/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare} bind def +/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare} bind def +/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def +/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare} bind def +/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def +/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def +/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def +/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def +/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def +/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def +/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def +/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def +/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def +/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def +/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def +/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def +/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def +/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def +/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def +/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def +/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def +/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def +/DiaE {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke} def +/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke} def +/TriUE {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke} def +/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke} def +/PentE {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore} def +/CircE {stroke [] 0 setdash + hpt 0 360 arc stroke} def +/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def +/DiaW {stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke} def +/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke} def +/TriUW {stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke} def +/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke} def +/PentW {stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore} def +/CircW {stroke [] 0 setdash + hpt 0 360 arc Opaque stroke} def +/BoxFill {gsave Rec 1 setgray fill grestore} def +/Density { + /Fillden exch def + currentrgbcolor + /ColB exch def /ColG exch def /ColR exch def + /ColR ColR Fillden mul Fillden sub 1 add def + /ColG ColG Fillden mul Fillden sub 1 add def + /ColB ColB Fillden mul Fillden sub 1 add def + ColR ColG ColB setrgbcolor} def +/BoxColFill {gsave Rec PolyFill} def +/PolyFill {gsave Density fill grestore grestore} def +/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def +% +% PostScript Level 1 Pattern Fill routine for rectangles +% Usage: x y w h s a XX PatternFill +% x,y = lower left corner of box to be filled +% w,h = width and height of box +% a = angle in degrees between lines and x-axis +% XX = 0/1 for no/yes cross-hatch +% +/PatternFill {gsave /PFa [ 9 2 roll ] def + PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate + PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec + gsave 1 setgray fill grestore clip + currentlinewidth 0.5 mul setlinewidth + /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def + 0 0 M PFa 5 get rotate PFs -2 div dup translate + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 M 0 PFs V} for + 0 PFa 6 get ne { + 0 1 PFs PFa 4 get div 1 add floor cvi + {PFa 4 get mul 0 2 1 roll M PFs 0 V} for + } if + stroke grestore} def +% +/languagelevel where + {pop languagelevel} {1} ifelse + 2 lt + {/InterpretLevel1 true def} + {/InterpretLevel1 Level1 def} + ifelse +% +% PostScript level 2 pattern fill definitions +% +/Level2PatternFill { +/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8} + bind def +/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke} +>> matrix makepattern +/Pat1 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke + 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke} +>> matrix makepattern +/Pat2 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L + 8 8 L 8 0 L 0 0 L fill} +>> matrix makepattern +/Pat3 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L + 0 12 M 12 0 L stroke} +>> matrix makepattern +/Pat4 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L + 0 -4 M 12 8 L stroke} +>> matrix makepattern +/Pat5 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L + 0 12 M 8 -4 L 4 12 M 10 0 L stroke} +>> matrix makepattern +/Pat6 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L + 0 -4 M 8 12 L 4 -4 M 10 8 L stroke} +>> matrix makepattern +/Pat7 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L + 12 0 M -4 8 L 12 4 M 0 10 L stroke} +>> matrix makepattern +/Pat8 exch def +<< Tile8x8 + /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L + -4 0 M 12 8 L -4 4 M 8 10 L stroke} +>> matrix makepattern +/Pat9 exch def +/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def +/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def +/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def +/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def +/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def +/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def +/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def +} def +% +% +%End of PostScript Level 2 code +% +/PatternBgnd { + TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse +} def +% +% Substitute for Level 2 pattern fill codes with +% grayscale if Level 2 support is not selected. +% +/Level1PatternFill { +/Pattern1 {0.250 Density} bind def +/Pattern2 {0.500 Density} bind def +/Pattern3 {0.750 Density} bind def +/Pattern4 {0.125 Density} bind def +/Pattern5 {0.375 Density} bind def +/Pattern6 {0.625 Density} bind def +/Pattern7 {0.875 Density} bind def +} def +% +% Now test for support of Level 2 code +% +Level1 {Level1PatternFill} {Level2PatternFill} ifelse +% +/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont +dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall +currentdict end definefont pop +/MFshow { + { dup 5 get 3 ge + { 5 get 3 eq {gsave} {grestore} ifelse } + {dup dup 0 get findfont exch 1 get scalefont setfont + [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6 + get exch 4 get {show} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq + {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5 + get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div + dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get + show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop + pop aload pop M} ifelse }ifelse }ifelse } + ifelse } + forall} bind def +/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse } + {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont + 6 get stringwidth pop add} {pop} ifelse} ifelse} forall} bind def +/MLshow { currentpoint stroke M + 0 exch R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MRshow { currentpoint stroke M + exch dup MFwidth neg 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/MCshow { currentpoint stroke M + exch dup MFwidth -2 div 3 -1 roll R + Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def +/XYsave { [( ) 1 2 true false 3 ()] } bind def +/XYrestore { [( ) 1 2 true false 4 ()] } bind def +end +%%EndProlog +gnudict begin +gsave +50 50 translate +0.050 0.050 scale +0 setgray +newpath +(Helvetica) findfont 140 scalefont setfont +1.000 UL +LTb +882 448 M +63 0 V +2501 0 R +-63 0 V +stroke +798 448 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 0)] +] -46.7 MRshow +1.000 UL +LTb +882 684 M +63 0 V +2501 0 R +-63 0 V +stroke +798 684 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 50)] +] -46.7 MRshow +1.000 UL +LTb +882 920 M +63 0 V +2501 0 R +-63 0 V +stroke +798 920 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 100)] +] -46.7 MRshow +1.000 UL +LTb +882 1156 M +63 0 V +2501 0 R +-63 0 V +stroke +798 1156 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 150)] +] -46.7 MRshow +1.000 UL +LTb +882 1392 M +63 0 V +2501 0 R +-63 0 V +stroke +798 1392 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 200)] +] -46.7 MRshow +1.000 UL +LTb +882 1628 M +63 0 V +2501 0 R +-63 0 V +stroke +798 1628 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 250)] +] -46.7 MRshow +1.000 UL +LTb +882 1864 M +63 0 V +2501 0 R +-63 0 V +stroke +798 1864 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 300)] +] -46.7 MRshow +1.000 UL +LTb +882 2100 M +63 0 V +2501 0 R +-63 0 V +stroke +798 2100 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 350)] +] -46.7 MRshow +1.000 UL +LTb +969 448 M +0 63 V +0 1589 R +0 -63 V +stroke +969 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 1)] +] -46.7 MCshow +1.000 UL +LTb +1309 448 M +0 63 V +0 1589 R +0 -63 V +stroke +1309 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 4)] +] -46.7 MCshow +1.000 UL +LTb +1649 448 M +0 63 V +0 1589 R +0 -63 V +stroke +1649 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 16)] +] -46.7 MCshow +1.000 UL +LTb +1988 448 M +0 63 V +0 1589 R +0 -63 V +stroke +1988 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 64)] +] -46.7 MCshow +1.000 UL +LTb +2328 448 M +0 63 V +0 1589 R +0 -63 V +stroke +2328 308 M +[ [(Helvetica) 140.0 0.0 true true 0 ( 256)] +] -46.7 MCshow +1.000 UL +LTb +2667 448 M +0 63 V +0 1589 R +0 -63 V +stroke +2667 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (1k)] +] -46.7 MCshow +1.000 UL +LTb +3007 448 M +0 63 V +0 1589 R +0 -63 V +stroke +3007 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (4k)] +] -46.7 MCshow +1.000 UL +LTb +3347 448 M +0 63 V +0 1589 R +0 -63 V +stroke +3347 308 M +[ [(Helvetica) 140.0 0.0 true true 0 (16k)] +] -46.7 MCshow +1.000 UL +LTb +1.000 UL +LTb +882 2100 N +882 448 L +2564 0 V +0 1652 V +-2564 0 V +Z stroke +LCb setrgbcolor +308 1274 M +currentpoint gsave translate 90 rotate 0 0 moveto +[ [(Helvetica) 140.0 0.0 true true 0 (1000 cycles per RHS evaluation)] +] -46.7 MCshow +grestore +LTb +LCb setrgbcolor +2164 98 M +[ [(Helvetica) 140.0 0.0 true true 0 (number of cores)] +] -46.7 MCshow +LTb +2164 2310 M +[ [(Helvetica) 140.0 0.0 true true 0 (Cactus Benchmark)] +] -46.7 MCshow +1.000 UP +1.000 UL +LTb +1.000 UP +3.000 UL +LT0 +LTb +2795 1141 M +[ [(Helvetica) 140.0 0.0 true true 0 (HLRB II)] +] -46.7 MRshow +LT0 +2879 1141 M +399 0 V +969 827 M +170 187 V +170 169 V +170 79 V +170 76 V +169 117 V +170 109 V +170 -81 V +170 -62 V +170 -13 V +339 113 V +969 827 Pls +1139 1014 Pls +1309 1183 Pls +1479 1262 Pls +1649 1338 Pls +1818 1455 Pls +1988 1564 Pls +2158 1483 Pls +2328 1421 Pls +2498 1408 Pls +2837 1521 Pls +3078 1141 Pls +1.000 UP +3.000 UL +LT1 +LTb +2795 1001 M +[ [(Helvetica) 140.0 0.0 true true 0 (Kraken \(NT=1\))] +] -46.7 MRshow +LT1 +2879 1001 M +399 0 V +969 967 M +170 165 V +170 291 V +170 97 V +170 85 V +169 44 V +170 68 V +170 -83 V +170 -75 V +170 -90 V +169 -51 V +170 -20 V +170 7 V +170 -2 V +969 967 Crs +1139 1132 Crs +1309 1423 Crs +1479 1520 Crs +1649 1605 Crs +1818 1649 Crs +1988 1717 Crs +2158 1634 Crs +2328 1559 Crs +2498 1469 Crs +2667 1418 Crs +2837 1398 Crs +3007 1405 Crs +3177 1403 Crs +3078 1001 Crs +1.000 UP +3.000 UL +LT2 +LTb +2795 861 M +[ [(Helvetica) 140.0 0.0 true true 0 (Queen Bee \(NT=2\))] +] -46.7 MRshow +LT2 +2879 861 M +399 0 V +1139 1031 M +170 260 V +170 346 V +170 49 V +169 33 V +170 142 V +170 -8 V +170 47 V +170 -17 V +169 44 V +170 -32 V +1139 1031 Star +1309 1291 Star +1479 1637 Star +1649 1686 Star +1818 1719 Star +1988 1861 Star +2158 1853 Star +2328 1900 Star +2498 1883 Star +2667 1927 Star +2837 1895 Star +3078 861 Star +1.000 UP +3.000 UL +LT3 +LTb +2795 721 M +[ [(Helvetica) 140.0 0.0 true true 0 (Ranger \(NT=1\))] +] -46.7 MRshow +LT3 +2879 721 M +399 0 V +969 816 M +170 138 V +170 114 V +170 139 V +170 173 V +169 88 V +170 113 V +170 39 V +170 -2 V +170 4 V +169 17 V +170 -108 V +170 154 V +170 -59 V +99 11 V +969 816 Box +1139 954 Box +1309 1068 Box +1479 1207 Box +1649 1380 Box +1818 1468 Box +1988 1581 Box +2158 1620 Box +2328 1618 Box +2498 1622 Box +2667 1639 Box +2837 1531 Box +3007 1685 Box +3177 1626 Box +3276 1637 Box +3078 721 Box +1.000 UP +3.000 UL +LTb +2795 581 M +[ [(Helvetica) 140.0 0.0 true true 0 (SiCortex \(NT=1\))] +] -46.7 MRshow +2879 581 M +399 0 V +969 913 M +170 250 V +100 104 V +169 240 V +170 180 V +99 -37 V +170 54 V +71 201 V +170 -62 V +169 -137 V +170 -52 V +170 -123 V +99 -75 V +969 913 BoxF +1139 1163 BoxF +1239 1267 BoxF +1408 1507 BoxF +1578 1687 BoxF +1677 1650 BoxF +1847 1704 BoxF +1918 1905 BoxF +2088 1843 BoxF +2257 1706 BoxF +2427 1654 BoxF +2597 1531 BoxF +2696 1456 BoxF +3078 581 BoxF +1.000 UL +LTb +882 2100 N +882 448 L +2564 0 V +0 1652 V +-2564 0 V +Z stroke +1.000 UP +1.000 UL +LTb +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica diff --git a/Carpet/CarpetWeb/sicortex/results-scaled.gnuplot b/Carpet/CarpetWeb/sicortex/results-scaled.gnuplot new file mode 100644 index 000000000..a70d55d00 --- /dev/null +++ b/Carpet/CarpetWeb/sicortex/results-scaled.gnuplot @@ -0,0 +1,36 @@ +set terminal postscript eps enhanced color colortext +set output "results-scaled.eps" + +set size 0.5 + +set logscale x +set xtics (1, 4, 16, 64, 256, "1k" 1024, "4k" 4096, "16k" 16384) +set xrange [0.7:24576] +set yrange [0:] + +set title "Cactus Benchmark" +set xlabel "number of cores" +set ylabel "1000 cycles per RHS evaluation" + +set key bottom + +# 25^3 grid points per core +# 128 time steps +# 9 refinement levels +# a factor 2 because of the Berger-Oliger subcycling +# 4 Runge-Kutta substeps per time step +# 1e6 us per second + +# MHz flop/cycle +# HLRB II : 1600 4 +# Kraken : 2300 4 +# Queen Bee: 2330 4 +# Ranger : 2300 4 +# SiCortex : 700 2 + +p \ +"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && $7== 1 && $8==10) print; }' results-hlrb2.out" u 5:($9/25**3/128/2/4*1e3*(1600*4)) t "HLRB II" w lp lt 1 lw 3, \ +"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && ($6== 4 || $6==$5) && $7== 1 && $8==30) print; }' results-kraken.out" u 5:($9/25**3/128/2/4*1e3*(2300*4)) t "Kraken (NT=1)" w lp lt 2 lw 3, \ +"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && ($6== 8 || $6==$5) && $7== 2 && $8== 0) print; }' results-queenbee.out" u 5:($9/25**3/128/2/4*1e3*(2330*4)) t "Queen Bee (NT=2)" w lp lt 3 lw 3, \ +"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==25 && ($6==16 || $6==$5) && $7== 1 && $8==71) print; }' results-ranger.out" u 5:($9/25**3/128/2/4*1e3*(2300*4)) t "Ranger (NT=1)" w lp lt 4 lw 3, \ +"< awk '/^Bench_McLachlan_Carpet_9lev/ { if ($2==128 && $3==20 && ($6== 6 || $6==$5) && $7== 1 && $8== 9) print; }' results-sicortex.out" u 5:($9/20**3/128/2/4*1e3*( 700*2)) t "SiCortex (NT=1)" w lp lt -1 lw 3 diff --git a/Carpet/CarpetWeb/sicortex/results-scaled.pdf b/Carpet/CarpetWeb/sicortex/results-scaled.pdf Binary files differnew file mode 100644 index 000000000..629e96d5d --- /dev/null +++ b/Carpet/CarpetWeb/sicortex/results-scaled.pdf diff --git a/Carpet/CarpetWeb/sicortex/results-scaled.png b/Carpet/CarpetWeb/sicortex/results-scaled.png Binary files differnew file mode 100644 index 000000000..41b39a93f --- /dev/null +++ b/Carpet/CarpetWeb/sicortex/results-scaled.png diff --git a/Carpet/CarpetWeb/sicortex/results-sicortex.out b/Carpet/CarpetWeb/sicortex/results-sicortex.out new file mode 100644 index 000000000..e06222dec --- /dev/null +++ b/Carpet/CarpetWeb/sicortex/results-sicortex.out @@ -0,0 +1,73 @@ +# Cactus benchmark results +# processes = procs +# nodes = procs / ppn +# +# benchmark steps size machine procs ppn tpp iter walltime cputime +Bench_McLachlan_Carpet_9lev 000016 0020 sicortex 000009 03 01 09 160.97924924 160.90000000 +Bench_McLachlan_Carpet_9lev 000016 0020 sicortex 000012 02 01 09 169.91864061 169.83800000 +Bench_McLachlan_Carpet_9lev 000016 0020 sicortex 000012 06 01 09 216.23553324 216.08500000 +Bench_McLachlan_Carpet_9lev 000016 0020 sicortex 000018 03 01 09 194.86012912 194.76400000 +Bench_McLachlan_Carpet_9lev 000016 0020 sicortex 000018 06 01 09 209.45180464 209.34200000 +Bench_McLachlan_Carpet_9lev 000016 0020 sicortex 000036 06 01 09 218.57264876 218.44500000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000001 01 01 09 577.03916478 576.51300000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000001 01 01 10 584.84026647 584.26700000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000002 01 01 09 1063.53720546 1062.85200000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000002 01 01 10 1073.46784306 1072.78200000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000002 02 01 09 886.65131402 886.22300000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000002 02 01 10 879.80119944 879.30700000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000002 02 02 10 1080.79185009 2041.34200000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000003 01 01 09 1637.62942624 1636.88100000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000003 01 01 10 1658.30288005 1657.51800000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000003 03 01 09 1014.73026657 1014.23700000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000003 03 01 10 991.87625074 991.39300000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000003 03 03 10 1350.42324567 3631.75200000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000004 02 01 09 1555.37436056 1554.86200000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000004 02 01 10 1548.87241173 1548.36700000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000004 02 02 10 1990.86815596 3806.46600000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000006 01 01 09 2953.73614597 2952.76700000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000006 01 01 10 3058.68801212 3057.59900000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000006 02 01 09 2192.51062202 2192.05300000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000006 02 01 10 2160.93858528 2160.50300000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000006 02 02 10 2905.12031174 5576.29500000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000006 03 01 09 1811.42113948 1810.98300000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000006 03 01 10 1783.56004071 1783.05200000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000006 03 03 10 2471.15107203 6736.12300000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000006 06 01 09 1312.47908449 1311.62500000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000006 06 01 10 1256.62998867 1255.75800000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000006 06 02 10 5779.03792477 2972.75600000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000006 06 03 10 7082.16307092 5182.78300000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000006 06 06 10 1992.49259830 9297.26600000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000009 03 01 09 1150.66821122 1150.17600000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000009 03 01 10 1634.80302310 1634.35900000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000009 03 03 10 3699.17927527 10041.99900000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000012 02 01 09 1206.51082349 1206.05800000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000012 02 01 10 2445.88993430 2445.16000000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000012 02 02 10 4919.54614115 9497.25900000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000012 06 01 09 1536.47537231 1535.58100000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000012 06 01 10 1487.75196719 1486.85700000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000012 06 02 10 10569.93517756 5442.61700000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000012 06 03 10 10535.11860585 8066.33800000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000012 06 06 10 3076.13520050 15588.30900000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000018 03 01 09 1386.79382586 1386.32300000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000018 03 01 10 2212.76893878 2212.24700000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000018 03 03 10 6044.88727355 16669.88300000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000018 06 01 09 1490.72433352 1489.82600000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000018 06 01 10 1449.57670307 1448.65400000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000018 06 02 10 9206.37890959 4956.86500000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000018 06 06 10 4521.90128183 23111.06500000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000036 06 01 09 1556.78021669 1555.88500000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000036 06 01 10 1506.67594385 1505.71200000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000036 06 02 10 11190.43197107 5677.51000000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000048 06 01 09 1805.66064787 1804.73900000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000048 06 01 10 1766.07638407 1765.00800000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000096 06 01 09 1729.37948060 1728.85000000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000096 06 01 10 1707.35560274 1706.36200000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000192 06 01 09 1559.74821520 1559.26200000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000192 06 01 10 1535.94878769 1535.01800000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000384 06 01 09 1495.67836642 1495.17400000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000384 06 01 10 1462.88292074 1462.33400000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000768 06 01 09 1342.76321959 1341.88500000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 000768 06 01 10 1325.73432612 1324.92600000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 001152 06 01 09 1249.66528654 1249.07300000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 001152 06 01 10 1236.83454061 1236.02500000 +Bench_McLachlan_Carpet_9lev 000128 0020 sicortex 001410 06 01 10 1584.19222546 1583.07200000 diff --git a/Carpet/CarpetWeb/status-reports.html b/Carpet/CarpetWeb/status-reports.html index 8d60a7e5a..00c999f43 100644 --- a/Carpet/CarpetWeb/status-reports.html +++ b/Carpet/CarpetWeb/status-reports.html @@ -1,10 +1,10 @@ -<?xml version="1.0" encoding="ISO-8859-15"?> +<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" /> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Carpet Status Reports</title> </head> diff --git a/Carpet/CarpetWeb/version-3.html b/Carpet/CarpetWeb/version-3.html index d9e4fe9d8..086a57def 100644 --- a/Carpet/CarpetWeb/version-3.html +++ b/Carpet/CarpetWeb/version-3.html @@ -1,10 +1,10 @@ -<?xml version="1.0" encoding="ISO-8859-15"?> +<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" /> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Carpet Version 3</title> </head> diff --git a/Carpet/CarpetWeb/version-4.html b/Carpet/CarpetWeb/version-4.html index e8f0a91d7..6067bcda9 100644 --- a/Carpet/CarpetWeb/version-4.html +++ b/Carpet/CarpetWeb/version-4.html @@ -1,10 +1,10 @@ -<?xml version="1.0" encoding="ISO-8859-15"?> +<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" /> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Carpet Version 4</title> </head> diff --git a/Carpet/CarpetWeb/visualisation-tools.html b/Carpet/CarpetWeb/visualisation-tools.html index 8dbe93d43..9b8573904 100644 --- a/Carpet/CarpetWeb/visualisation-tools.html +++ b/Carpet/CarpetWeb/visualisation-tools.html @@ -1,10 +1,10 @@ -<?xml version="1.0" encoding="ISO-8859-15"?> +<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" /> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Carpet Visualisation Tools</title> </head> diff --git a/Carpet/CarpetWeb/work-with-darcs.html b/Carpet/CarpetWeb/work-with-darcs.html index 5235d6faa..23596fed3 100644 --- a/Carpet/CarpetWeb/work-with-darcs.html +++ b/Carpet/CarpetWeb/work-with-darcs.html @@ -1,10 +1,10 @@ -<?xml version="1.0" encoding="ISO-8859-15"?> +<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" /> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Working with Darcs</title> </head> diff --git a/Carpet/CarpetWeb/work-with-git.html b/Carpet/CarpetWeb/work-with-git.html index 1edd52d53..c19481cca 100644 --- a/Carpet/CarpetWeb/work-with-git.html +++ b/Carpet/CarpetWeb/work-with-git.html @@ -1,10 +1,10 @@ -<?xml version="1.0" encoding="ISO-8859-15"?> +<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" /> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Working with Git</title> </head> diff --git a/Carpet/LoopControl/README b/Carpet/LoopControl/README index 50e2eacb5..f3c5055b2 100644 --- a/Carpet/LoopControl/README +++ b/Carpet/LoopControl/README @@ -1,9 +1,10 @@ Cactus Code Thorn LoopControl -Thorn Author(s) : Erik Schnetter <schnetter@cct.lsu.edu> -Thorn Maintainer(s) : Erik Schnetter <schnetter@cct.lsu.edu> +Author(s) : Erik Schnetter <schnetter@cct.lsu.edu> +Maintainer(s): Erik Schnetter <schnetter@cct.lsu.edu> +Licence : GPLv2+ -------------------------------------------------------------------------- -Purpose of the thorn: +1. Purpose Iterate over multi-dimensional arrays in an efficient manner, using OpenMP (if available) and cach-aware loop tiling. diff --git a/Carpet/LoopControl/par/Bench_McLachlan_Carpet_1lev.hill.par b/Carpet/LoopControl/par/Bench_McLachlan_Carpet_1lev.hill.par new file mode 100644 index 000000000..c7cac7fdd --- /dev/null +++ b/Carpet/LoopControl/par/Bench_McLachlan_Carpet_1lev.hill.par @@ -0,0 +1,132 @@ +Cactus::cctk_run_title = "Benchmark of McLachlan using Carpet with one refinement level" +Cactus::cctk_timer_output = "full" + +Cactus::cctk_itlast = @ITERATIONS@ + + + +ActiveThorns = "Fortran" + + + +ActiveThorns = "LoopControl" + +#LoopControl::printstats = yes + +LoopControl::legacy_init = no +LoopControl::use_random_restart_hill_climbing = yes + + + +ActiveThorns = "IOUtil" + +#IO::print_timing_info = yes + + + +ActiveThorns = "InitBase" + + + +ActiveThorns = "Carpet CarpetLib CarpetReduce" + +Carpet::domain_from_coordbase = yes + +driver::ghost_size = 3 + +Carpet::init_fill_timelevels = yes + +CarpetLib::combine_recompose = yes + +#CarpetLib::print_timestats_every = 1 +CarpetLib::print_memstats_every = @ITERATIONS@ + + + +ActiveThorns = "Boundary CartGrid3D CoordBase SymBase" + +CoordBase::domainsize = "minmax" +CoordBase::xmin = 0.0 +CoordBase::ymin = 0.0 +CoordBase::zmin = 0.0 +CoordBase::xmax = 1.0 +CoordBase::ymax = 1.0 +CoordBase::zmax = 1.0 + +CoordBase::spacing = "numcells" +CoordBase::ncells_x = @NCELLSI@ +CoordBase::ncells_y = @NCELLSJ@ +CoordBase::ncells_z = @NCELLSK@ + +CartGrid3D::type = "coordbase" +CartGrid3D::domain = "octant" +CartGrid3D::avoid_originx = no +CartGrid3D::avoid_originy = no +CartGrid3D::avoid_originz = no + +CoordBase::boundary_size_x_lower = 3 +CoordBase::boundary_size_y_lower = 3 +CoordBase::boundary_size_z_lower = 3 +CoordBase::boundary_shiftout_x_lower = 1 +CoordBase::boundary_shiftout_y_lower = 1 +CoordBase::boundary_shiftout_z_lower = 1 + +CoordBase::boundary_size_x_upper = 3 +CoordBase::boundary_size_y_upper = 3 +CoordBase::boundary_size_z_upper = 3 + + + +ActiveThorns = "MoL NaNChecker Time" + +MoL::ODE_Method = "RK4" +MoL::MoL_Intermediate_Steps = 4 +MoL::MoL_Num_Scratch_Levels = 1 + +Time::dtfac = 0.4 + + + +ActiveThorns = "ADMBase ADMCoupling ADMMacros CoordGauge StaticConformal" + +ADMBase::initial_data = "Cartesian Minkowski" +ADMBase::initial_lapse = "one" +ADMBase::initial_shift = "zero" +ADMBase::initial_dtlapse = "zero" +ADMBase::initial_dtshift = "zero" + + + +ActiveThorns = "GenericFD ML_BSSN ML_BSSN_Helper TmunuBase" + +ADMBase::evolution_method = "ML_BSSN" +ADMBase::lapse_evolution_method = "ML_BSSN" +ADMBase::shift_evolution_method = "ML_BSSN" + +ML_BSSN::my_boundary_condition = "Minkowski" + +ML_BSSN::harmonicN = 1 # 1+log +ML_BSSN::harmonicF = 2.0 # 1+log +ML_BSSN::ShiftGammaCoeff = 0.75 +ML_BSSN::BetaDriver = 0.5 + + + +ActiveThorns = "CarpetIOBasic" + +IOBasic::outInfo_every = @ITERATIONS@ +#IOBasic::outInfo_vars = "ADMBase::alp" + + + +#ActiveThorns = "CarpetIOASCII" +# +#IOASCII::out0D_every = @ITERATIONS@ +#IOASCII::out0D_vars = "Carpet::timing" + + + +ActiveThorns = "TimerReport" + +TimerReport::output_all_timers = yes +TimerReport::all_timers_clock = "cycle" diff --git a/Carpet/LoopControl/par/Bench_McLachlan_Carpet_1lev.legacy.par b/Carpet/LoopControl/par/Bench_McLachlan_Carpet_1lev.legacy.par new file mode 100644 index 000000000..dc1bbbdcb --- /dev/null +++ b/Carpet/LoopControl/par/Bench_McLachlan_Carpet_1lev.legacy.par @@ -0,0 +1,132 @@ +Cactus::cctk_run_title = "Benchmark of McLachlan using Carpet with one refinement level" +Cactus::cctk_timer_output = "full" + +Cactus::cctk_itlast = @ITERATIONS@ + + + +ActiveThorns = "Fortran" + + + +ActiveThorns = "LoopControl" + +#LoopControl::printstats = yes + +LoopControl::legacy_init = yes +LoopControl::use_random_restart_hill_climbing = no + + + +ActiveThorns = "IOUtil" + +#IO::print_timing_info = yes + + + +ActiveThorns = "InitBase" + + + +ActiveThorns = "Carpet CarpetLib CarpetReduce" + +Carpet::domain_from_coordbase = yes + +driver::ghost_size = 3 + +Carpet::init_fill_timelevels = yes + +CarpetLib::combine_recompose = yes + +#CarpetLib::print_timestats_every = 1 +CarpetLib::print_memstats_every = @ITERATIONS@ + + + +ActiveThorns = "Boundary CartGrid3D CoordBase SymBase" + +CoordBase::domainsize = "minmax" +CoordBase::xmin = 0.0 +CoordBase::ymin = 0.0 +CoordBase::zmin = 0.0 +CoordBase::xmax = 1.0 +CoordBase::ymax = 1.0 +CoordBase::zmax = 1.0 + +CoordBase::spacing = "numcells" +CoordBase::ncells_x = @NCELLSI@ +CoordBase::ncells_y = @NCELLSJ@ +CoordBase::ncells_z = @NCELLSK@ + +CartGrid3D::type = "coordbase" +CartGrid3D::domain = "octant" +CartGrid3D::avoid_originx = no +CartGrid3D::avoid_originy = no +CartGrid3D::avoid_originz = no + +CoordBase::boundary_size_x_lower = 3 +CoordBase::boundary_size_y_lower = 3 +CoordBase::boundary_size_z_lower = 3 +CoordBase::boundary_shiftout_x_lower = 1 +CoordBase::boundary_shiftout_y_lower = 1 +CoordBase::boundary_shiftout_z_lower = 1 + +CoordBase::boundary_size_x_upper = 3 +CoordBase::boundary_size_y_upper = 3 +CoordBase::boundary_size_z_upper = 3 + + + +ActiveThorns = "MoL NaNChecker Time" + +MoL::ODE_Method = "RK4" +MoL::MoL_Intermediate_Steps = 4 +MoL::MoL_Num_Scratch_Levels = 1 + +Time::dtfac = 0.4 + + + +ActiveThorns = "ADMBase ADMCoupling ADMMacros CoordGauge StaticConformal" + +ADMBase::initial_data = "Cartesian Minkowski" +ADMBase::initial_lapse = "one" +ADMBase::initial_shift = "zero" +ADMBase::initial_dtlapse = "zero" +ADMBase::initial_dtshift = "zero" + + + +ActiveThorns = "GenericFD ML_BSSN ML_BSSN_Helper TmunuBase" + +ADMBase::evolution_method = "ML_BSSN" +ADMBase::lapse_evolution_method = "ML_BSSN" +ADMBase::shift_evolution_method = "ML_BSSN" + +ML_BSSN::my_boundary_condition = "Minkowski" + +ML_BSSN::harmonicN = 1 # 1+log +ML_BSSN::harmonicF = 2.0 # 1+log +ML_BSSN::ShiftGammaCoeff = 0.75 +ML_BSSN::BetaDriver = 0.5 + + + +ActiveThorns = "CarpetIOBasic" + +IOBasic::outInfo_every = @ITERATIONS@ +#IOBasic::outInfo_vars = "ADMBase::alp" + + + +#ActiveThorns = "CarpetIOASCII" +# +#IOASCII::out0D_every = @ITERATIONS@ +#IOASCII::out0D_vars = "Carpet::timing" + + + +ActiveThorns = "TimerReport" + +TimerReport::output_all_timers = yes +TimerReport::all_timers_clock = "cycle" diff --git a/Carpet/LoopControl/par/Bench_McLachlan_Carpet_1lev.par b/Carpet/LoopControl/par/Bench_McLachlan_Carpet_1lev.par new file mode 100644 index 000000000..ab607feca --- /dev/null +++ b/Carpet/LoopControl/par/Bench_McLachlan_Carpet_1lev.par @@ -0,0 +1,132 @@ +Cactus::cctk_run_title = "Benchmark of McLachlan using Carpet with one refinement level" +Cactus::cctk_timer_output = "full" + +Cactus::cctk_itlast = @ITERATIONS@ + + + +ActiveThorns = "Fortran" + + + +ActiveThorns = "LoopControl" + +#LoopControl::printstats = yes + +LoopControl::legacy_init = @LEGACY_INIT@ +LoopControl::use_random_restart_hill_climbing = @HILL_CLIMBING@ + + + +ActiveThorns = "IOUtil" + +#IO::print_timing_info = yes + + + +ActiveThorns = "InitBase" + + + +ActiveThorns = "Carpet CarpetLib CarpetReduce" + +Carpet::domain_from_coordbase = yes + +driver::ghost_size = 3 + +Carpet::init_fill_timelevels = yes + +CarpetLib::combine_recompose = yes + +#CarpetLib::print_timestats_every = 1 +CarpetLib::print_memstats_every = @ITERATIONS@ + + + +ActiveThorns = "Boundary CartGrid3D CoordBase SymBase" + +CoordBase::domainsize = "minmax" +CoordBase::xmin = 0.0 +CoordBase::ymin = 0.0 +CoordBase::zmin = 0.0 +CoordBase::xmax = 1.0 +CoordBase::ymax = 1.0 +CoordBase::zmax = 1.0 + +CoordBase::spacing = "numcells" +CoordBase::ncells_x = @NCELLSI@ +CoordBase::ncells_y = @NCELLSJ@ +CoordBase::ncells_z = @NCELLSK@ + +CartGrid3D::type = "coordbase" +CartGrid3D::domain = "octant" +CartGrid3D::avoid_originx = no +CartGrid3D::avoid_originy = no +CartGrid3D::avoid_originz = no + +CoordBase::boundary_size_x_lower = 3 +CoordBase::boundary_size_y_lower = 3 +CoordBase::boundary_size_z_lower = 3 +CoordBase::boundary_shiftout_x_lower = 1 +CoordBase::boundary_shiftout_y_lower = 1 +CoordBase::boundary_shiftout_z_lower = 1 + +CoordBase::boundary_size_x_upper = 3 +CoordBase::boundary_size_y_upper = 3 +CoordBase::boundary_size_z_upper = 3 + + + +ActiveThorns = "MoL NaNChecker Time" + +MoL::ODE_Method = "RK4" +MoL::MoL_Intermediate_Steps = 4 +MoL::MoL_Num_Scratch_Levels = 1 + +Time::dtfac = 0.4 + + + +ActiveThorns = "ADMBase ADMCoupling ADMMacros CoordGauge StaticConformal" + +ADMBase::initial_data = "Cartesian Minkowski" +ADMBase::initial_lapse = "one" +ADMBase::initial_shift = "zero" +ADMBase::initial_dtlapse = "zero" +ADMBase::initial_dtshift = "zero" + + + +ActiveThorns = "GenericFD ML_BSSN ML_BSSN_Helper TmunuBase" + +ADMBase::evolution_method = "ML_BSSN" +ADMBase::lapse_evolution_method = "ML_BSSN" +ADMBase::shift_evolution_method = "ML_BSSN" + +ML_BSSN::my_boundary_condition = "Minkowski" + +ML_BSSN::harmonicN = 1 # 1+log +ML_BSSN::harmonicF = 2.0 # 1+log +ML_BSSN::ShiftGammaCoeff = 0.75 +ML_BSSN::BetaDriver = 0.5 + + + +ActiveThorns = "CarpetIOBasic" + +IOBasic::outInfo_every = @ITERATIONS@ +#IOBasic::outInfo_vars = "ADMBase::alp" + + + +#ActiveThorns = "CarpetIOASCII" +# +#IOASCII::out0D_every = @ITERATIONS@ +#IOASCII::out0D_vars = "Carpet::timing" + + + +ActiveThorns = "TimerReport" + +TimerReport::output_all_timers = yes +TimerReport::all_timers_clock = "cycle" diff --git a/Carpet/LoopControl/par/Bench_McLachlan_Carpet_1lev.standard.par b/Carpet/LoopControl/par/Bench_McLachlan_Carpet_1lev.standard.par new file mode 100644 index 000000000..690b37c26 --- /dev/null +++ b/Carpet/LoopControl/par/Bench_McLachlan_Carpet_1lev.standard.par @@ -0,0 +1,132 @@ +Cactus::cctk_run_title = "Benchmark of McLachlan using Carpet with one refinement level" +Cactus::cctk_timer_output = "full" + +Cactus::cctk_itlast = @ITERATIONS@ + + + +ActiveThorns = "Fortran" + + + +ActiveThorns = "LoopControl" + +#LoopControl::printstats = yes + +LoopControl::legacy_init = no +LoopControl::use_random_restart_hill_climbing = no + + + +ActiveThorns = "IOUtil" + +#IO::print_timing_info = yes + + + +ActiveThorns = "InitBase" + + + +ActiveThorns = "Carpet CarpetLib CarpetReduce" + +Carpet::domain_from_coordbase = yes + +driver::ghost_size = 3 + +Carpet::init_fill_timelevels = yes + +CarpetLib::combine_recompose = yes + +#CarpetLib::print_timestats_every = 1 +CarpetLib::print_memstats_every = @ITERATIONS@ + + + +ActiveThorns = "Boundary CartGrid3D CoordBase SymBase" + +CoordBase::domainsize = "minmax" +CoordBase::xmin = 0.0 +CoordBase::ymin = 0.0 +CoordBase::zmin = 0.0 +CoordBase::xmax = 1.0 +CoordBase::ymax = 1.0 +CoordBase::zmax = 1.0 + +CoordBase::spacing = "numcells" +CoordBase::ncells_x = @NCELLSI@ +CoordBase::ncells_y = @NCELLSJ@ +CoordBase::ncells_z = @NCELLSK@ + +CartGrid3D::type = "coordbase" +CartGrid3D::domain = "octant" +CartGrid3D::avoid_originx = no +CartGrid3D::avoid_originy = no +CartGrid3D::avoid_originz = no + +CoordBase::boundary_size_x_lower = 3 +CoordBase::boundary_size_y_lower = 3 +CoordBase::boundary_size_z_lower = 3 +CoordBase::boundary_shiftout_x_lower = 1 +CoordBase::boundary_shiftout_y_lower = 1 +CoordBase::boundary_shiftout_z_lower = 1 + +CoordBase::boundary_size_x_upper = 3 +CoordBase::boundary_size_y_upper = 3 +CoordBase::boundary_size_z_upper = 3 + + + +ActiveThorns = "MoL NaNChecker Time" + +MoL::ODE_Method = "RK4" +MoL::MoL_Intermediate_Steps = 4 +MoL::MoL_Num_Scratch_Levels = 1 + +Time::dtfac = 0.4 + + + +ActiveThorns = "ADMBase ADMCoupling ADMMacros CoordGauge StaticConformal" + +ADMBase::initial_data = "Cartesian Minkowski" +ADMBase::initial_lapse = "one" +ADMBase::initial_shift = "zero" +ADMBase::initial_dtlapse = "zero" +ADMBase::initial_dtshift = "zero" + + + +ActiveThorns = "GenericFD ML_BSSN ML_BSSN_Helper TmunuBase" + +ADMBase::evolution_method = "ML_BSSN" +ADMBase::lapse_evolution_method = "ML_BSSN" +ADMBase::shift_evolution_method = "ML_BSSN" + +ML_BSSN::my_boundary_condition = "Minkowski" + +ML_BSSN::harmonicN = 1 # 1+log +ML_BSSN::harmonicF = 2.0 # 1+log +ML_BSSN::ShiftGammaCoeff = 0.75 +ML_BSSN::BetaDriver = 0.5 + + + +ActiveThorns = "CarpetIOBasic" + +IOBasic::outInfo_every = @ITERATIONS@ +#IOBasic::outInfo_vars = "ADMBase::alp" + + + +#ActiveThorns = "CarpetIOASCII" +# +#IOASCII::out0D_every = @ITERATIONS@ +#IOASCII::out0D_vars = "Carpet::timing" + + + +ActiveThorns = "TimerReport" + +TimerReport::output_all_timers = yes +TimerReport::all_timers_clock = "cycle" diff --git a/Carpet/LoopControl/src/loopcontrol.h b/Carpet/LoopControl/src/loopcontrol.h index dfe7dda60..7f882617c 100644 --- a/Carpet/LoopControl/src/loopcontrol.h +++ b/Carpet/LoopControl/src/loopcontrol.h @@ -162,6 +162,11 @@ static inline int lc_state_valid (lc_statset_t const * restrict const ls, lc_state_t const * restrict const state) + CCTK_ATTRIBUTE_PURE; +static inline +int +lc_state_valid (lc_statset_t const * restrict const ls, + lc_state_t const * restrict const state) { if (state->topology >= 0 && state->topology < ls->ntopologies) { int const * restrict const ntilings = @@ -177,6 +182,11 @@ static inline int lc_state_equal (lc_state_t const * restrict const state1, lc_state_t const * restrict const state2) + CCTK_ATTRIBUTE_PURE; +static inline +int +lc_state_equal (lc_state_t const * restrict const state1, + lc_state_t const * restrict const state2) { return (state1->topology == state2->topology && state1->tiling[0] == state2->tiling[0] && @@ -193,7 +203,8 @@ lc_stattime_init (lc_stattime_t * restrict const lt, lc_stattime_t * lc_stattime_find (lc_statset_t const * restrict const ls, - lc_state_t const * restrict const state); + lc_state_t const * restrict const state) + CCTK_ATTRIBUTE_PURE; lc_stattime_t * lc_stattime_find_create (lc_statset_t * restrict const ls, @@ -211,7 +222,8 @@ lc_statset_init (lc_statset_t * restrict const ls, lc_statset_t * lc_statset_find (lc_statmap_t const * restrict const lm, int const num_threads, - int const npoints[3]); + int const npoints[3]) + CCTK_ATTRIBUTE_PURE; lc_statset_t * lc_statset_find_create (lc_statmap_t * restrict const lm, @@ -253,6 +265,10 @@ typedef struct lc_control_t { static inline int lc_min (int const i, int const j) + CCTK_ATTRIBUTE_CONST; +static inline +int +lc_min (int const i, int const j) { return i < j ? i : j; } @@ -260,6 +276,10 @@ lc_min (int const i, int const j) static inline int lc_max (int const i, int const j) + CCTK_ATTRIBUTE_CONST; +static inline +int +lc_max (int const i, int const j) { return i > j ? i : j; } diff --git a/Carpet/doc/documentation.tex b/Carpet/doc/documentation.tex index ed1e75c84..9871de511 100644 --- a/Carpet/doc/documentation.tex +++ b/Carpet/doc/documentation.tex @@ -873,7 +873,7 @@ answers. Firstly, Carpet does not itself implement periodic boundaries. The thorn {\tt TAT/Periodic} is ``more or less'' driver independent and does. This should be used to implement the actual boundary - conditions. You should not need to change your code - just activate + conditions. You should not need to change your code -- just activate the thorn with the appropriate parameters. Secondly, periodic boundaries do {\bf not} work the same way as @@ -890,7 +890,7 @@ answers. shown in figure~\ref{fig:Periodic1}. \begin{figure}[htbp] \begin{center} - \includegraphics[scale=0.5]{Periodic1 + \includegraphics[scale=0.5]{Periodic1} \caption{Periodic grids identify boundary points and interior points. The interior points are given by circles and the boundary points by squares. The identifications are shown by the @@ -917,7 +917,7 @@ answers. \end{itemize} \begin{figure}[htbp] \begin{center} - \includegraphics[scale=0.5]{Periodic2 + \includegraphics[scale=0.5]{Periodic2} \caption{A periodic refined grid. The boundary zones are blue plus signs, the interior blue crosses. Note that the interior points on the refined grid extend \textit{outside} the diff --git a/Carpet/doc/scheduling.aux b/Carpet/doc/scheduling.aux new file mode 100644 index 000000000..97a8a11d8 --- /dev/null +++ b/Carpet/doc/scheduling.aux @@ -0,0 +1,45 @@ +\relax +\citation{Schnetter-etal-03b} +\citation{Berger-1982} +\citation{Berger84} +\citation{Berger86} +\citation{Berger89} +\citation{Berger91} +\@writefile{toc}{\contentsline {section}{\numberline {1}Introduction}{1}} +\@writefile{toc}{\contentsline {section}{\numberline {2}\textbf {PUGH} Scheduling}{1}} +\@writefile{toc}{\contentsline {section}{\numberline {3}\textbf {Carpet} Scheduling}{1}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}The Berger-Oliger Algorithm}{2}} +\newlabel{sect-Berger-Oliger-algorithm}{{3.1}{2}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}Grid Attributes}{2}} +\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces The \textbf {PUGH} schedule}}{2}} +\newlabel{fig-PUGH-schedule}{{1}{2}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.3}Modes}{3}} +\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces The Berger-Oliger Algorithm}}{3}} +\newlabel{fig-Berger-Oliger-algorithm}{{2}{3}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.1}What to Do in Each Mode}{4}} +\@writefile{lot}{\contentsline {table}{\numberline {1}{\ignorespaces What Carpet Defines in Each Mode}}{4}} +\newlabel{tab-what-Carpet-defines-in-each-mode}{{1}{4}} +\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces Carpet Loops and Modes}}{5}} +\newlabel{fig-Carpet-loops-and-modes}{{3}{5}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.2}Querying and Changing Modes}{6}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.4}The \textbf {Carpet} Scheduling Pipeline}{6}} +\newlabel{sect-Carpet-scheduling-pipeline}{{3.4}{6}} +\bibstyle{alpha} +\bibdata{scheduling} +\bibcite{Berger89}{BC89} +\bibcite{Berger-1982}{Ber82} +\bibcite{Berger86}{Ber86} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.5}Examples, Tips, and Tricks}{7}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.5.1}Example 1}{7}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.6}Other Miscellaneous Stuff}{7}} +\@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces Summary of the \textbf {Carpet} schedule}}{8}} +\newlabel{fig-Carpet-Berger-Oliger-summary}{{4}{8}} +\@writefile{lof}{\contentsline {figure}{\numberline {5}{\ignorespaces Detailed View of the \textbf {Carpet} Berger-Oliger Algorithm}}{9}} +\newlabel{fig-Carpet-Berger-Oliger-details}{{5}{9}} +\@writefile{lof}{\contentsline {figure}{\numberline {6}{\ignorespaces How Carpet uses Modes when Calling Scheduled Routines}}{10}} +\newlabel{fig-how-Carpet-uses-modes}{{6}{10}} +\@writefile{lof}{\contentsline {figure}{\numberline {7}{\ignorespaces Example1}}{11}} +\newlabel{fig-example1}{{7}{11}} +\bibcite{Berger84}{BO84} +\bibcite{Berger91}{BR91} +\bibcite{Schnetter-etal-03b}{SHH04} diff --git a/Carpet/doc/scheduling.bbl b/Carpet/doc/scheduling.bbl new file mode 100644 index 000000000..a01be44b7 --- /dev/null +++ b/Carpet/doc/scheduling.bbl @@ -0,0 +1,38 @@ +\begin{thebibliography}{SHH04} + +\bibitem[BC89]{Berger89} +Marsha~J. Berger and P.~Colella. +\newblock Local adaptive mesh refinement for shock hydrodynamics. +\newblock {\em J. Comput. Phys.}, 82:64--84, 1989. + +\bibitem[Ber82]{Berger-1982} +Marsha~J. Berger. +\newblock {\em Adaptive Mesh Refinement for Hyperbolic Partial Differential + Equations}. +\newblock PhD thesis, Stanford University, 1982. +\newblock {U}niversity {M}icrofilms \#DA 83-01196. + +\bibitem[Ber86]{Berger86} +Marsha~J. Berger. +\newblock Data structures for adaptive grid generation. +\newblock {\em SIAM Journal of Scientific and Statistical Computing}, + 7(3):904--916, July 1986. + +\bibitem[BO84]{Berger84} +Marsha~J. Berger and Joseph Oliger. +\newblock Adaptive mesh refinement for hyperbolic partial differential + equations. +\newblock {\em J. Comput. Phys.}, 53:484--512, 1984. + +\bibitem[BR91]{Berger91} +M.~Berger and I.~Rigoutsos. +\newblock Adaptive mesh refinement for hyperbolic partial differential + equations. +\newblock {\em IEEE Transactions on Systems, Man and Cybernetics}, 21(5), 1991. + +\bibitem[SHH04]{Schnetter-etal-03b} +Erik Schnetter, Scott~H. Hawley, and Ian Hawke. +\newblock Evolutions in {3D} numerical relativity using fixed mesh refinement. +\newblock {\em Class. Quantum Grav.}, 21(6):1465--1488, 21 March 2004. + +\end{thebibliography} diff --git a/Carpet/doc/scheduling.blg b/Carpet/doc/scheduling.blg new file mode 100644 index 000000000..14e6c4636 --- /dev/null +++ b/Carpet/doc/scheduling.blg @@ -0,0 +1,45 @@ +This is BibTeX, Version 0.99c (Web2C 7.5.6) +The top-level auxiliary file: scheduling.aux +The style file: alpha.bst +Database file #1: scheduling.bib +You've used 6 entries, + 2543 wiz_defined-function locations, + 601 strings with 5219 characters, +and the built_in function-call counts, 2243 in all, are: += -- 232 +> -- 98 +< -- 2 ++ -- 31 +- -- 31 +* -- 168 +:= -- 387 +add.period$ -- 19 +call.type$ -- 6 +change.case$ -- 34 +chr.to.int$ -- 6 +cite$ -- 6 +duplicate$ -- 83 +empty$ -- 157 +format.name$ -- 39 +if$ -- 443 +int.to.chr$ -- 1 +int.to.str$ -- 0 +missing$ -- 5 +newline$ -- 34 +num.names$ -- 18 +pop$ -- 19 +preamble$ -- 1 +purify$ -- 41 +quote$ -- 0 +skip$ -- 74 +stack$ -- 0 +substring$ -- 138 +swap$ -- 6 +text.length$ -- 2 +text.prefix$ -- 2 +top$ -- 0 +type$ -- 48 +warning$ -- 0 +while$ -- 23 +width$ -- 7 +write$ -- 82 diff --git a/Carpet/doc/scheduling.log b/Carpet/doc/scheduling.log new file mode 100644 index 000000000..074a13e27 --- /dev/null +++ b/Carpet/doc/scheduling.log @@ -0,0 +1,355 @@ +This is pdfTeX, Version 3.141592-1.40.3 (Web2C 7.5.6) (format=pdflatex 2008.7.9) 28 AUG 2008 15:53 +entering extended mode +**\nonstopmode \input{/Users/eschnett/Calpha/carpet/Carpet/doc/scheduling.tex} +(/Users/eschnett/Calpha/carpet/Carpet/doc/scheduling.tex +(/opt/local/share/texmf-dist/tex/latex/base/article.cls +Document Class: article 2005/09/16 v1.4f Standard LaTeX document class +(/opt/local/share/texmf-dist/tex/latex/base/size10.clo +File: size10.clo 2005/09/16 v1.4f Standard LaTeX file (size option) +) +\c@part=\count79 +\c@section=\count80 +\c@subsection=\count81 +\c@subsubsection=\count82 +\c@paragraph=\count83 +\c@subparagraph=\count84 +\c@figure=\count85 +\c@table=\count86 +\abovecaptionskip=\skip41 +\belowcaptionskip=\skip42 +\bibindent=\dimen102 +) +(/Users/eschnett/Calpha/carpet/Carpet/doc/scheduling.aux) +\openout1 = `scheduling.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 26. +LaTeX Font Info: ... okay on input line 26. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 26. +LaTeX Font Info: ... okay on input line 26. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 26. +LaTeX Font Info: ... okay on input line 26. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 26. +LaTeX Font Info: ... okay on input line 26. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 26. +LaTeX Font Info: ... okay on input line 26. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 26. +LaTeX Font Info: ... okay on input line 26. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <12> on input line 31. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <8> on input line 31. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <6> on input line 31. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <7> on input line 50. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <5> on input line 50. +LaTeX Font Info: Try loading font information for OMS+cmr on input line 62. + +(/opt/local/share/texmf-dist/tex/latex/base/omscmr.fd +File: omscmr.fd 1999/05/25 v2.5h Standard LaTeX font definitions +) +LaTeX Font Info: Font shape `OMS/cmr/m/n' in size <10> not available +(Font) Font shape `OMS/cmsy/m/n' tried instead on input line 62. + +Overfull \hbox (6.79999pt too wide) in paragraph at lines 118--119 + [] + [] + + +Overfull \hbox (6.79999pt too wide) in paragraph at lines 133--134 + [][] + [] + + +Overfull \hbox (6.79999pt too wide) in paragraph at lines 139--140 + [][] + [] + + +Overfull \hbox (2.31596pt too wide) in paragraph at lines 154--155 + [][] + [] + + +Overfull \hbox (6.79999pt too wide) in paragraph at lines 159--160 + [][] + [] + +[1 + +{/opt/local/share/texmf/fonts/map/pdftex/updmap/pdftex.map}] +LaTeX Font Info: Font shape `OT1/cmtt/bx/n' in size <10> not available +(Font) Font shape `OT1/cmtt/m/n' tried instead on input line 246. + [2] [3] [4] +[5] [6] +Overfull \hbox (6.79999pt too wide) in paragraph at lines 638--639 + [] + [] + + +Underfull \hbox (badness 3579) in paragraph at lines 679--679 +\OT1/cmr/m/n/10 POST[]RECOVER[]VARIABLES $[][]\OMS/cmsy/m/n/10 !$ + [] + + +Overfull \hbox (6.79999pt too wide) in paragraph at lines 679--680 + [][] + [] + + +Overfull \hbox (2.31596pt too wide) in paragraph at lines 690--691 + [][] + [] + + +Overfull \hbox (4.75467pt too wide) in paragraph at lines 711--712 + [][] + [] + + +Overfull \hbox (2.31596pt too wide) in paragraph at lines 720--721 + [][] + [] + + +Overfull \hbox (6.79999pt too wide) in paragraph at lines 724--725 + [][] + [] + + +Overfull \hbox (13.46664pt too wide) in paragraph at lines 750--751 + [] + [] + + +Overfull \hbox (3.21214pt too wide) in paragraph at lines 767--767 +[]$[]$ [] + [] + + +Overfull \hbox (13.46664pt too wide) in paragraph at lines 767--768 + [][] + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 946--946 +[]\OT1/cmtt/m/n/10 loop $\OMS/cmsy/m/n/10 "$ + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 946--946 +\OT1/cmr/m/n/10 INITIAL POS-TINI- + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 946--946 + + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 946--946 +[]\OT1/cmtt/m/n/10 loop $\OMS/cmsy/m/n/10 "$ + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 946--946 +[]\OT1/cmtt/m/n/10 loop $\OMS/cmsy/m/n/10 "$ + [] + + +Overfull \hbox (6.98305pt too wide) in paragraph at lines 946--946 +[]\OT1/cmr/m/n/10 POSTREGRIDINITIAL + [] + + +Overfull \hbox (6.45119pt too wide) in paragraph at lines 946--946 +[][] + [] + + +Overfull \hbox (6.45119pt too wide) in paragraph at lines 946--946 +[] + [] + + +Overfull \hbox (3.43626pt too wide) in paragraph at lines 946--946 +[] + [] + + +Overfull \hbox (6.45119pt too wide) in paragraph at lines 946--946 +[] + [] + + +Overfull \hbox (6.80959pt too wide) in paragraph at lines 946--946 +[]\OT1/cmr/m/n/10 POSTRESTRICTINITIAL + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 946--946 +\OT1/cmr/m/n/10 POSTPOSTINITIAL + [] + + +Overfull \hbox (6.63156pt too wide) in paragraph at lines 946--946 +[][] + [] + + +Overfull \hbox (8.19237pt too wide) in paragraph at lines 946--946 +[] + [] + + +Overfull \hbox (8.19237pt too wide) in paragraph at lines 946--946 +[] + [] + + +Overfull \hbox (2.01521pt too wide) in paragraph at lines 946--946 +[] + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 946--946 +[]\OT1/cmtt/m/n/10 loop $\OMS/cmsy/m/n/10 "$ + [] + + +Overfull \hbox (11.90251pt too wide) in paragraph at lines 946--946 +\OT1/cmr/m/n/10 RECOVER[]VARIABLES + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 946--946 +[]\OT1/cmtt/m/n/10 loop $\OMS/cmsy/m/n/10 "$ + [] + + +Underfull \hbox (badness 10000) in paragraph at lines 946--946 +[]\OT1/cmtt/m/n/10 loop $\OMS/cmsy/m/n/10 "$ + [] + + +Overfull \hbox (6.45119pt too wide) in paragraph at lines 946--946 +[][] + [] + + +Overfull \hbox (6.45119pt too wide) in paragraph at lines 946--946 +[] + [] + + +Overfull \hbox (3.43626pt too wide) in paragraph at lines 946--946 +[] + [] + + +Overfull \hbox (6.45119pt too wide) in paragraph at lines 946--946 +[] + [] + + +Overfull \hbox (30.9541pt too wide) in paragraph at lines 946--946 +[]\OT1/cmr/m/n/10 POST[]RECOVER[]VARIABLES + [] + + +Overfull \hbox (6.63156pt too wide) in paragraph at lines 946--946 +[][] + [] + + +Overfull \hbox (8.19237pt too wide) in paragraph at lines 946--946 +[] + [] + + +Overfull \hbox (13.46664pt too wide) in paragraph at lines 946--947 + [][] + [] + + +Overfull \hbox (3.21214pt too wide) in paragraph at lines 965--965 +[]$[]$ [] + [] + + +Overfull \hbox (13.46664pt too wide) in paragraph at lines 965--966 + [][] + [] + + +Overfull \hbox (333.56543pt too wide) in paragraph at lines 1072--1072 +[]$[]$ $[]$ + [] + + +Overfull \hbox (13.46664pt too wide) in paragraph at lines 1072--1073 + [][] + [] + + +Overfull \hbox (3.21214pt too wide) in paragraph at lines 1090--1090 +[]$[]$ [] + [] + + +Overfull \hbox (13.46664pt too wide) in paragraph at lines 1090--1091 + [][] + [] + + +Overfull \hbox (3.21214pt too wide) in paragraph at lines 1106--1106 +[]$[]$ [] + [] + + +Overfull \hbox (13.46664pt too wide) in paragraph at lines 1106--1107 + [][] + [] + + +LaTeX Warning: Float too large for page by 56.33575pt on input line 1133. + + +Underfull \hbox (badness 10000) in paragraph at lines 1237--1240 + + [] + + +LaTeX Warning: Float too large for page by 18.68066pt on input line 1321. + +(/Users/eschnett/Calpha/carpet/Carpet/doc/scheduling.bbl [7] [8] [9] [10] +[11]) [12] (/Users/eschnett/Calpha/carpet/Carpet/doc/scheduling.aux) ) +Here is how much of TeX's memory you used: + 295 strings out of 94073 + 3762 string characters out of 1164798 + 71804 words of memory out of 1500000 + 3642 multiletter control sequences out of 10000+50000 + 9493 words of font info for 34 fonts, out of 1200000 for 2000 + 645 hyphenation exceptions out of 8191 + 25i,16n,19p,239b,380s stack positions out of 5000i,500n,6000p,200000b,5000s +</opt/loc +al/share/texmf-dist/fonts/type1/bluesky/cm/cmbx10.pfb></opt/local/share/texmf-d +ist/fonts/type1/bluesky/cm/cmbx12.pfb></opt/local/share/texmf-dist/fonts/type1/ +bluesky/cm/cmbx8.pfb></opt/local/share/texmf-dist/fonts/type1/bluesky/cm/cmbx9. +pfb></opt/local/share/texmf-dist/fonts/type1/bluesky/cm/cmmi10.pfb></opt/local/ +share/texmf-dist/fonts/type1/bluesky/cm/cmr10.pfb></opt/local/share/texmf-dist/ +fonts/type1/bluesky/cm/cmr12.pfb></opt/local/share/texmf-dist/fonts/type1/blues +ky/cm/cmr17.pfb></opt/local/share/texmf-dist/fonts/type1/bluesky/cm/cmr6.pfb></ +opt/local/share/texmf-dist/fonts/type1/bluesky/cm/cmr7.pfb></opt/local/share/te +xmf-dist/fonts/type1/bluesky/cm/cmr8.pfb></opt/local/share/texmf-dist/fonts/typ +e1/bluesky/cm/cmr9.pfb></opt/local/share/texmf-dist/fonts/type1/bluesky/cm/cmsy +10.pfb></opt/local/share/texmf-dist/fonts/type1/bluesky/cm/cmti10.pfb></opt/loc +al/share/texmf-dist/fonts/type1/bluesky/cm/cmtt10.pfb></opt/local/share/texmf-d +ist/fonts/type1/bluesky/cm/cmtt8.pfb> +Output written on scheduling.pdf (12 pages, 153691 bytes). +PDF statistics: + 105 PDF objects out of 1000 (max. 8388607) + 0 named destinations out of 1000 (max. 131072) + 1 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/Carpet/doc/scheduling.pdf b/Carpet/doc/scheduling.pdf Binary files differnew file mode 100644 index 000000000..69659ef02 --- /dev/null +++ b/Carpet/doc/scheduling.pdf diff --git a/Carpet/doxygen/Doxyfile b/Carpet/doxygen/Doxyfile deleted file mode 100644 index 3964c2808..000000000 --- a/Carpet/doxygen/Doxyfile +++ /dev/null @@ -1,1081 +0,0 @@ -# Doxyfile 1.3.4 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = Carpet - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = doxygen - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, -# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en -# (Japanese with English messages), Korean, Norwegian, Polish, Portuguese, -# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# This tag can be used to specify the encoding used in the generated output. -# The encoding is not always determined by the language that is chosen, -# but also whether or not the output is meant for Windows or non-Windows users. -# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES -# forces the Windows encoding (this is the default for the Windows binary), -# whereas setting the tag to NO uses a Unix-style encoding (the default for -# all platforms other than Windows). - -USE_WINDOWS_ENCODING = NO - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited -# members of a class in the documentation of that class as if those members were -# ordinary class members. Constructors, destructors and assignment operators of -# the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = YES - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. It is allowed to use relative paths in the argument list. - -STRIP_FROM_PATH = /home/eschnett/Calpha/Cactus/arrangements/Carpet/ - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explict @brief command for a brief description. - -JAVADOC_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# reimplements. - -INHERIT_DOCS = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources -# only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources -# only. Doxygen will then generate output that is more tailored for Java. -# For instance, namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = YES - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = YES - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = YES - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = . - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp -# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc - -FILE_PATTERNS = *.c *.cc *.h *.hh *.F77 *.F *.F90 *.inc - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories -# that are symbolic links (a Unix filesystem feature) are excluded from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. - -EXCLUDE_PATTERNS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command <filter> <input-file>, where <filter> -# is the value of the INPUT_FILTER tag, and <input-file> is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. - -INPUT_FILTER = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. - -SOURCE_BROWSER = YES - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = NO - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = YES - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 4 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output dir. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = YES - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = mathpple - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = YES - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = YES - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimised for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assigments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_PREDEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. - -PREDEFINED = FOR_DOXYGEN_ONLY \ - CARPET_INT \ - CARPET_REAL \ - CARPET_COMPLEX - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse the -# parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::addtions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or -# super classes. Setting the tag to NO turns the diagrams off. Note that this -# option is superceded by the HAVE_DOT option below. This is only a fallback. It is -# recommended to install and use dot, since it yields more powerful graphs. - -CLASS_DIAGRAMS = YES - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = YES - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similiar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a call dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. - -CALL_GRAPH = YES - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found on the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_WIDTH = 1024 - -# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_HEIGHT = 1024 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes that -# lay further from the root node will be omitted. Note that setting this option to -# 1 or 2 may greatly reduce the computation time needed for large code bases. Also -# note that a graph may be further truncated if the graph's image dimensions are -# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT). -# If 0 is used for the depth value (the default), the graph is not depth-constrained. - -MAX_DOT_GRAPH_DEPTH = 0 - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::addtions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff --git a/Carpet/doxygen/README b/Carpet/doxygen/README deleted file mode 100644 index c426f7d30..000000000 --- a/Carpet/doxygen/README +++ /dev/null @@ -1,14 +0,0 @@ -This directory contains, in the CVS or darcs repository, the Doxygen -configuration file. The generated documentation will also be placed -here, but should not go into the repository. - -Create the Doxygen configuration by running the command - - doxygen doxygen/Doxyfile - -from one directory up, i.e., from the Carpet arrangement directory. -This will create html documentation in a subdirectory html, and latex -documentation in a subdirectory latex. The latex subdirectory -contains a makefile that creates pdf from the latex sources. - --erik diff --git a/CarpetAttic/Cart3dTest/utils/cmptest b/CarpetAttic/Cart3dTest/utils/cmptest index 53ea9d35f..53ea9d35f 100755..100644 --- a/CarpetAttic/Cart3dTest/utils/cmptest +++ b/CarpetAttic/Cart3dTest/utils/cmptest diff --git a/CarpetAttic/Cart3dTest/utils/mptest b/CarpetAttic/Cart3dTest/utils/mptest index 98b4c07c5..98b4c07c5 100755..100644 --- a/CarpetAttic/Cart3dTest/utils/mptest +++ b/CarpetAttic/Cart3dTest/utils/mptest diff --git a/CarpetDev/CarpetIOF5/README b/CarpetDev/CarpetIOF5/README index a03d4b2f5..a625117a0 100644 --- a/CarpetDev/CarpetIOF5/README +++ b/CarpetDev/CarpetIOF5/README @@ -11,16 +11,20 @@ Input and output data using the HDF5 based F5 file format. An F5 file contains the following hierarchy: - file - timestep - simulation - topology - coordinate_system - physical_quantity - tensor_component - data_region + Bundle + Slice + Grid + Topology + Representation + Field -2006-06-05: Werner says that tensor_component and data_region should -be interchanged. +We have a class hierarchy: -2007-04-25: Werner confirms this. + file + timestep (slice) + simulation (grid) [grid hierarchy of one patch] + topology (topology) [one refinement level] + coordinate_system (representation) + physical_quantity (field) + data_region + tensor_component diff --git a/CarpetDev/CarpetIOF5/configuration.ccl b/CarpetDev/CarpetIOF5/configuration.ccl index 1ab5bc27d..d5c33c995 100644 --- a/CarpetDev/CarpetIOF5/configuration.ccl +++ b/CarpetDev/CarpetIOF5/configuration.ccl @@ -1,3 +1,3 @@ # Configuration definitions for thorn CarpetIOF5 -REQUIRES Carpet CarpetLib HDF5 IOUtil +REQUIRES Carpet CarpetLib F5 HDF5 IOUtil diff --git a/CarpetDev/CarpetIOF5/interface.ccl b/CarpetDev/CarpetIOF5/interface.ccl index db9d9c014..aa7a39fee 100644 --- a/CarpetDev/CarpetIOF5/interface.ccl +++ b/CarpetDev/CarpetIOF5/interface.ccl @@ -3,7 +3,7 @@ IMPLEMENTS: IOF5 USES INCLUDE: bbox.hh defs.hh dh.hh vect.hh -USES INCLUDE: carpet.hh +USES INCLUDE: carpet.hh modes.hh @@ -26,7 +26,25 @@ REQUIRES FUNCTION IO_TruncateOutputFiles # Return a pointer to an unmodifiable C string +# which contains a unique ID for this configuration +CCTK_POINTER_TO_CONST \ +FUNCTION UniqueConfigID (CCTK_POINTER_TO_CONST IN cctkGH) +USES FUNCTION UniqueConfigID + +# Return a pointer to an unmodifiable C string +# which contains a unique ID for this build +CCTK_POINTER_TO_CONST \ +FUNCTION UniqueBuildID (CCTK_POINTER_TO_CONST IN cctkGH) +USES FUNCTION UniqueBuildID + +# Return a pointer to an unmodifiable C string # which contains a unique ID for this simulation CCTK_POINTER_TO_CONST \ -FUNCTION UniqueSimulationID (CCTK_POINTER_TO_CONST IN cctkGH) +FUNCTION UniqueSimulationID (CCTK_POINTER_TO_CONST IN cctkGH) USES FUNCTION UniqueSimulationID + +# Return a pointer to an unmodifiable C string +# which contains a unique ID for this run +CCTK_POINTER_TO_CONST \ +FUNCTION UniqueRunID (CCTK_POINTER_TO_CONST IN cctkGH) +USES FUNCTION UniqueRunID diff --git a/CarpetDev/CarpetIOF5/par/wavetoy-cc-ref.par b/CarpetDev/CarpetIOF5/par/wavetoy-cc-ref.par new file mode 100644 index 000000000..1e8c2783d --- /dev/null +++ b/CarpetDev/CarpetIOF5/par/wavetoy-cc-ref.par @@ -0,0 +1,244 @@ +Cactus::cctk_run_title = "WaveToy cell-centred refined" + +Cactus::cctk_full_warnings = yes +Cactus::highlight_warning_messages = no +#Cactus::cctk_timer_output = "full" + +Cactus::terminate = "time" +Cactus::cctk_final_time = 1.0 + + + +ActiveThorns = "IOUtil" + +IO::out_dir = $parfile + + + +ActiveThorns = "InitBase" + +InitBase::initial_data_setup_method = "init_single_level" + + + +ActiveThorns = "AEILocalInterp" + +ActiveThorns = "Fortran" + +ActiveThorns = "HDF5" + +ActiveThorns = "LocalInterp" + +ActiveThorns = "LoopControl" + +ActiveThorns = "NaNCatcher" + +ActiveThorns = "Slab" + + + +ActiveThorns = "Carpet CarpetLib CarpetInterp CarpetReduce CarpetSlab" + +Carpet::verbose = no +Carpet::schedule_barriers = no +Carpet::veryverbose = no +CarpetLib::output_bboxes = no + +Carpet::domain_from_coordbase = yes +Carpet::max_refinement_levels = 3 + +driver::ghost_size = 2 + +Carpet::refinement_centering = "cell" +Carpet::prolongation_order_space = 2 +Carpet::prolongation_order_time = 2 + +Carpet::convergence_level = 0 + +Carpet::init_each_timelevel = yes +Carpet::regrid_during_initialisation = no +Carpet::enable_all_storage = no + +Carpet::poison_new_timelevels = yes +CarpetLib::poison_new_memory = yes + +Carpet::grid_structure_filename = "carpet-grid-structure" +Carpet::output_timers_every = 100 +CarpetLib::print_timestats_every = 100 +CarpetLib::print_memstats_every = 100 + + + +ActiveThorns = "NaNChecker" + +NaNChecker::check_every = 100 +NaNChecker::action_if_found = "terminate" +NaNChecker::check_vars = " + WaveToy::scalarevolve +" + + + +ActiveThorns = "Boundary CartGrid3D CoordBase SymBase" + +CoordBase::domainsize = "minmax" + +CoordBase::xmin = -0.50 +CoordBase::ymin = -0.50 +CoordBase::zmin = -0.50 +CoordBase::xmax = +0.50 +CoordBase::ymax = +0.50 +CoordBase::zmax = +0.50 +CoordBase::dx = 0.05 +CoordBase::dy = 0.05 +CoordBase::dz = 0.05 + +CoordBase::boundary_staggered_x_lower = yes +CoordBase::boundary_staggered_y_lower = yes +CoordBase::boundary_staggered_z_lower = yes +CoordBase::boundary_staggered_x_upper = yes +CoordBase::boundary_staggered_y_upper = yes +CoordBase::boundary_staggered_z_upper = yes + +CartGrid3D::type = "coordbase" + + + +ActiveThorns = "CarpetRegrid2" + +CarpetRegrid2::regrid_every = 0 + +CarpetRegrid2::snap_to_coarse = yes + +CarpetRegrid2::num_centres = 1 + +CarpetRegrid2::num_levels_1 = 3 +CarpetRegrid2::radius_1[1] = 0.25 +CarpetRegrid2::radius_1[2] = 0.125 + + + +ActiveThorns = "WavetoyC" + +WaveToy::bound = "radiation" + + + +ActiveThorns = "IDScalarWaveC" + +IDScalarWave::initial_data = "gaussian" +IDScalarWave::radius = 0.0 +IDScalarWave::sigma = 0.1 +IDScalarWave::amplitude = 1.0 + + + +ActiveThorns = "Time" + +Time::dtfac = 0.5 + + + +ActiveThorns = "CarpetIOBasic" + +IOBasic::outInfo_every = 1 +IOBasic::outInfo_reductions = "norm2 minimum maximum" +IOBasic::outInfo_vars = " + WaveToy::phi +" + + + +ActiveThorns = "CarpetIOScalar" + +IOScalar::one_file_per_group = yes + +IOScalar::outScalar_every = 1 +IOScalar::outScalar_vars = " + grid::coordinates + CarpetReduce::weight + WaveToy::scalarevolve +" + + + +ActiveThorns = "CarpetIOASCII" + +IOASCII::one_file_per_group = yes + +#IOASCII::output_symmetry_points = no +#IOASCII::out3D_ghosts = no + +IOASCII::out0D_every = 1 +IOASCII::out0D_vars = " + Carpet::timing + grid::coordinates + CarpetReduce::weight + WaveToy::scalarevolve +" + +IOASCII::out1D_every = 1 +IOASCII::out1D_vars = " + grid::coordinates + CarpetReduce::weight + WaveToy::scalarevolve +" + +IOASCII::out2D_every = 10 +IOASCII::out2D_vars = " + grid::coordinates + CarpetReduce::weight + WaveToy::scalarevolve +" + +IOASCII::out3D_every = 100 +IOASCII::out3D_vars = " + grid::coordinates + CarpetReduce::weight + WaveToy::scalarevolve +" + + + +Activethorns = "CarpetIOHDF5" + +IOHDF5::out_every = 100 +IOHDF5::compression_level = 1 +IOHDF5::out_vars = " + grid::coordinates + CarpetReduce::weight + WaveToy::scalarevolve +" + +IOHDF5::checkpoint = yes +IO::checkpoint_dir = $parfile +IO::checkpoint_ID = yes +IO::checkpoint_every = 100 +IO::checkpoint_on_terminate = yes + +Carpet::regrid_during_recovery = no +IOHDF5::use_grid_structure_from_checkpoint = yes + +IO::recover = "autoprobe" +IO::recover_dir = $parfile + + + +ActiveThorns = "Formaline" + +Formaline::send_as_rdf = yes +Formaline::rdf_hostname[0] = "buran.aei.mpg.de" +Formaline::rdf_port [0] = 24997 +Formaline::rdf_hostname[1] = "devportal.cct.lsu.edu" +Formaline::rdf_port [1] = 8080 + + + +ActiveThorns = "Twitter" + + + +ActiveThorns = "TimerReport" + +TimerReport::out_every = 100 +TimerReport::out_filename = "TimerReport" diff --git a/CarpetDev/CarpetIOF5/par/wavetoy-cc-uni.par b/CarpetDev/CarpetIOF5/par/wavetoy-cc-uni.par new file mode 100644 index 000000000..d5265e3c8 --- /dev/null +++ b/CarpetDev/CarpetIOF5/par/wavetoy-cc-uni.par @@ -0,0 +1,230 @@ +Cactus::cctk_run_title = "WaveToy cell-centred unigrid" + +Cactus::cctk_full_warnings = yes +Cactus::highlight_warning_messages = no +#Cactus::cctk_timer_output = "full" + +Cactus::terminate = "time" +Cactus::cctk_final_time = 1.0 + + + +ActiveThorns = "IOUtil" + +IO::out_dir = $parfile + + + +ActiveThorns = "InitBase" + +InitBase::initial_data_setup_method = "init_single_level" + + + +ActiveThorns = "AEILocalInterp" + +ActiveThorns = "Fortran" + +ActiveThorns = "HDF5" + +ActiveThorns = "LocalInterp" + +ActiveThorns = "LoopControl" + +ActiveThorns = "NaNCatcher" + +ActiveThorns = "Slab" + + + +ActiveThorns = "Carpet CarpetLib CarpetInterp CarpetReduce CarpetSlab" + +Carpet::verbose = no +Carpet::schedule_barriers = no +Carpet::veryverbose = no +CarpetLib::output_bboxes = no + +Carpet::domain_from_coordbase = yes +Carpet::max_refinement_levels = 3 + +driver::ghost_size = 2 + +Carpet::refinement_centering = "cell" +Carpet::prolongation_order_space = 3 +Carpet::prolongation_order_time = 2 + +Carpet::convergence_level = 0 + +Carpet::init_each_timelevel = yes +Carpet::regrid_during_initialisation = no +Carpet::enable_all_storage = no + +Carpet::poison_new_timelevels = yes +CarpetLib::poison_new_memory = yes + +Carpet::grid_structure_filename = "carpet-grid-structure" +Carpet::output_timers_every = 100 +CarpetLib::print_timestats_every = 100 +CarpetLib::print_memstats_every = 100 + + + +ActiveThorns = "NaNChecker" + +NaNChecker::check_every = 100 +NaNChecker::action_if_found = "terminate" +NaNChecker::check_vars = " + WaveToy::scalarevolve +" + + + +ActiveThorns = "Boundary CartGrid3D CoordBase SymBase" + +CoordBase::domainsize = "minmax" + +CoordBase::xmin = -0.50 +CoordBase::ymin = -0.50 +CoordBase::zmin = -0.50 +CoordBase::xmax = +0.50 +CoordBase::ymax = +0.50 +CoordBase::zmax = +0.50 +CoordBase::dx = 0.0125 +CoordBase::dy = 0.0125 +CoordBase::dz = 0.0125 + +CoordBase::boundary_staggered_x_lower = yes +CoordBase::boundary_staggered_y_lower = yes +CoordBase::boundary_staggered_z_lower = yes +CoordBase::boundary_staggered_x_upper = yes +CoordBase::boundary_staggered_y_upper = yes +CoordBase::boundary_staggered_z_upper = yes + +CartGrid3D::type = "coordbase" + + + +ActiveThorns = "WavetoyC" + +WaveToy::bound = "radiation" + + + +ActiveThorns = "IDScalarWaveC" + +IDScalarWave::initial_data = "gaussian" +IDScalarWave::radius = 0.0 +IDScalarWave::sigma = 0.1 +IDScalarWave::amplitude = 1.0 + + + +ActiveThorns = "Time" + +Time::dtfac = 0.5 + + + +ActiveThorns = "CarpetIOBasic" + +IOBasic::outInfo_every = 1 +IOBasic::outInfo_reductions = "norm2 minimum maximum" +IOBasic::outInfo_vars = " + WaveToy::phi +" + + + +ActiveThorns = "CarpetIOScalar" + +IOScalar::one_file_per_group = yes + +IOScalar::outScalar_every = 1 +IOScalar::outScalar_vars = " + grid::coordinates + CarpetReduce::weight + WaveToy::scalarevolve +" + + + +ActiveThorns = "CarpetIOASCII" + +IOASCII::one_file_per_group = yes + +IOASCII::output_symmetry_points = no +IOASCII::out3D_ghosts = no + +IOASCII::out0D_every = 1 +IOASCII::out0D_vars = " + Carpet::timing + grid::coordinates + CarpetReduce::weight + WaveToy::scalarevolve +" + +IOASCII::out1D_every = 1 +IOASCII::out1D_vars = " + grid::coordinates + CarpetReduce::weight + WaveToy::scalarevolve +" + +IOASCII::out2D_every = 10 +IOASCII::out2D_vars = " + grid::coordinates + CarpetReduce::weight + WaveToy::scalarevolve +" + +IOASCII::out3D_every = 100 +IOASCII::out3D_vars = " + grid::coordinates + CarpetReduce::weight + WaveToy::scalarevolve +" + + + +Activethorns = "CarpetIOHDF5" + +IOHDF5::out_every = 100 +IOHDF5::compression_level = 1 +IOHDF5::out_vars = " + grid::coordinates + CarpetReduce::weight + WaveToy::scalarevolve +" + +IOHDF5::checkpoint = yes +IO::checkpoint_dir = $parfile +IO::checkpoint_ID = yes +IO::checkpoint_every = 100 +IO::checkpoint_on_terminate = yes + +Carpet::regrid_during_recovery = no +IOHDF5::use_grid_structure_from_checkpoint = yes + +IO::recover = "autoprobe" +IO::recover_dir = $parfile + + + +ActiveThorns = "Formaline" + +Formaline::send_as_rdf = yes +Formaline::rdf_hostname[0] = "buran.aei.mpg.de" +Formaline::rdf_port [0] = 24997 +Formaline::rdf_hostname[1] = "devportal.cct.lsu.edu" +Formaline::rdf_port [1] = 8080 + + + +ActiveThorns = "Twitter" + + + +ActiveThorns = "TimerReport" + +TimerReport::out_every = 100 +TimerReport::out_filename = "TimerReport" diff --git a/CarpetDev/CarpetIOF5/par/wavetoy-vc-ref.par b/CarpetDev/CarpetIOF5/par/wavetoy-vc-ref.par new file mode 100644 index 000000000..46ccdd6b2 --- /dev/null +++ b/CarpetDev/CarpetIOF5/par/wavetoy-vc-ref.par @@ -0,0 +1,244 @@ +Cactus::cctk_run_title = "WaveToy vertex-centred refined" + +Cactus::cctk_full_warnings = yes +Cactus::highlight_warning_messages = no +#Cactus::cctk_timer_output = "full" + +Cactus::terminate = "time" +Cactus::cctk_final_time = 1.0 + + + +ActiveThorns = "IOUtil" + +IO::out_dir = $parfile + + + +ActiveThorns = "InitBase" + +InitBase::initial_data_setup_method = "init_single_level" + + + +ActiveThorns = "AEILocalInterp" + +ActiveThorns = "Fortran" + +ActiveThorns = "HDF5" + +ActiveThorns = "LocalInterp" + +ActiveThorns = "LoopControl" + +ActiveThorns = "NaNCatcher" + +ActiveThorns = "Slab" + + + +ActiveThorns = "Carpet CarpetLib CarpetInterp CarpetReduce CarpetSlab" + +Carpet::verbose = no +Carpet::schedule_barriers = no +Carpet::veryverbose = no +CarpetLib::output_bboxes = no + +Carpet::domain_from_coordbase = yes +Carpet::max_refinement_levels = 3 + +driver::ghost_size = 2 + +Carpet::refinement_centering = "vertex" +Carpet::prolongation_order_space = 3 +Carpet::prolongation_order_time = 2 + +Carpet::convergence_level = 0 + +Carpet::init_each_timelevel = yes +Carpet::regrid_during_initialisation = no +Carpet::enable_all_storage = no + +Carpet::poison_new_timelevels = yes +CarpetLib::poison_new_memory = yes + +Carpet::grid_structure_filename = "carpet-grid-structure" +Carpet::output_timers_every = 100 +CarpetLib::print_timestats_every = 100 +CarpetLib::print_memstats_every = 100 + + + +ActiveThorns = "NaNChecker" + +NaNChecker::check_every = 100 +NaNChecker::action_if_found = "terminate" +NaNChecker::check_vars = " + WaveToy::scalarevolve +" + + + +ActiveThorns = "Boundary CartGrid3D CoordBase SymBase" + +CoordBase::domainsize = "minmax" + +CoordBase::xmin = -0.50 +CoordBase::ymin = -0.50 +CoordBase::zmin = -0.50 +CoordBase::xmax = +0.50 +CoordBase::ymax = +0.50 +CoordBase::zmax = +0.50 +CoordBase::dx = 0.05 +CoordBase::dy = 0.05 +CoordBase::dz = 0.05 + +CoordBase::boundary_staggered_x_lower = no +CoordBase::boundary_staggered_y_lower = no +CoordBase::boundary_staggered_z_lower = no +CoordBase::boundary_staggered_x_upper = no +CoordBase::boundary_staggered_y_upper = no +CoordBase::boundary_staggered_z_upper = no + +CartGrid3D::type = "coordbase" + + + +ActiveThorns = "CarpetRegrid2" + +CarpetRegrid2::regrid_every = 0 + +CarpetRegrid2::snap_to_coarse = yes + +CarpetRegrid2::num_centres = 1 + +CarpetRegrid2::num_levels_1 = 3 +CarpetRegrid2::radius_1[1] = 0.25 +CarpetRegrid2::radius_1[2] = 0.125 + + + +ActiveThorns = "WavetoyC" + +WaveToy::bound = "radiation" + + + +ActiveThorns = "IDScalarWaveC" + +IDScalarWave::initial_data = "gaussian" +IDScalarWave::radius = 0.0 +IDScalarWave::sigma = 0.1 +IDScalarWave::amplitude = 1.0 + + + +ActiveThorns = "Time" + +Time::dtfac = 0.5 + + + +ActiveThorns = "CarpetIOBasic" + +IOBasic::outInfo_every = 1 +IOBasic::outInfo_reductions = "norm2 minimum maximum" +IOBasic::outInfo_vars = " + WaveToy::phi +" + + + +ActiveThorns = "CarpetIOScalar" + +IOScalar::one_file_per_group = yes + +IOScalar::outScalar_every = 1 +IOScalar::outScalar_vars = " + grid::coordinates + CarpetReduce::weight + WaveToy::scalarevolve +" + + + +ActiveThorns = "CarpetIOASCII" + +IOASCII::one_file_per_group = yes + +#IOASCII::output_symmetry_points = no +#IOASCII::out3D_ghosts = no + +IOASCII::out0D_every = 1 +IOASCII::out0D_vars = " + Carpet::timing + grid::coordinates + CarpetReduce::weight + WaveToy::scalarevolve +" + +IOASCII::out1D_every = 1 +IOASCII::out1D_vars = " + grid::coordinates + CarpetReduce::weight + WaveToy::scalarevolve +" + +IOASCII::out2D_every = 10 +IOASCII::out2D_vars = " + grid::coordinates + CarpetReduce::weight + WaveToy::scalarevolve +" + +IOASCII::out3D_every = 100 +IOASCII::out3D_vars = " + grid::coordinates + CarpetReduce::weight + WaveToy::scalarevolve +" + + + +Activethorns = "CarpetIOHDF5" + +IOHDF5::out_every = 100 +IOHDF5::compression_level = 1 +IOHDF5::out_vars = " + grid::coordinates + CarpetReduce::weight + WaveToy::scalarevolve +" + +IOHDF5::checkpoint = yes +IO::checkpoint_dir = $parfile +IO::checkpoint_ID = yes +IO::checkpoint_every = 100 +IO::checkpoint_on_terminate = yes + +Carpet::regrid_during_recovery = no +IOHDF5::use_grid_structure_from_checkpoint = yes + +IO::recover = "autoprobe" +IO::recover_dir = $parfile + + + +ActiveThorns = "Formaline" + +Formaline::send_as_rdf = yes +Formaline::rdf_hostname[0] = "buran.aei.mpg.de" +Formaline::rdf_port [0] = 24997 +Formaline::rdf_hostname[1] = "devportal.cct.lsu.edu" +Formaline::rdf_port [1] = 8080 + + + +ActiveThorns = "Twitter" + + + +ActiveThorns = "TimerReport" + +TimerReport::out_every = 100 +TimerReport::out_filename = "TimerReport" diff --git a/CarpetDev/CarpetIOF5/par/wavetoy-vc-uni.par b/CarpetDev/CarpetIOF5/par/wavetoy-vc-uni.par new file mode 100644 index 000000000..e2339f342 --- /dev/null +++ b/CarpetDev/CarpetIOF5/par/wavetoy-vc-uni.par @@ -0,0 +1,245 @@ +Cactus::cctk_run_title = "WaveToy vertex-centred unigrid" + +Cactus::cctk_full_warnings = yes +Cactus::highlight_warning_messages = no + +Cactus::terminate = "time" +Cactus::cctk_final_time = 1.0 + + + +ActiveThorns = "IOUtil" + +IO::out_dir = $parfile + + + +ActiveThorns = "InitBase" + +InitBase::initial_data_setup_method = "init_single_level" + + + +ActiveThorns = "AEILocalInterp" + +ActiveThorns = "Fortran" + +ActiveThorns = "HDF5" + +ActiveThorns = "LocalInterp" + +ActiveThorns = "LoopControl" + +ActiveThorns = "NaNCatcher" + +ActiveThorns = "Slab" + + + +ActiveThorns = "Carpet CarpetLib CarpetInterp CarpetReduce CarpetSlab" + +Carpet::verbose = no +Carpet::schedule_barriers = no +Carpet::veryverbose = no +CarpetLib::output_bboxes = no + +Carpet::domain_from_coordbase = yes +Carpet::max_refinement_levels = 3 + +driver::ghost_size = 2 + +Carpet::refinement_centering = "vertex" +Carpet::prolongation_order_space = 3 +Carpet::prolongation_order_time = 2 + +Carpet::convergence_level = 0 + +Carpet::init_each_timelevel = yes +Carpet::regrid_during_initialisation = no +Carpet::enable_all_storage = no + +Carpet::poison_new_timelevels = yes +CarpetLib::poison_new_memory = yes + +Carpet::grid_structure_filename = "carpet-grid-structure" +Carpet::output_timers_every = 100 +CarpetLib::print_timestats_every = 100 +CarpetLib::print_memstats_every = 100 + + + +ActiveThorns = "NaNChecker" + +NaNChecker::check_every = 100 +NaNChecker::action_if_found = "terminate" +NaNChecker::check_vars = " + WaveToy::scalarevolve +" + + + +ActiveThorns = "Boundary CartGrid3D CoordBase SymBase" + +CoordBase::domainsize = "minmax" + +CoordBase::xmin = -0.50 +CoordBase::ymin = -0.50 +CoordBase::zmin = -0.50 +CoordBase::xmax = +0.50 +CoordBase::ymax = +0.50 +CoordBase::zmax = +0.50 +CoordBase::dx = 0.0125 +CoordBase::dy = 0.0125 +CoordBase::dz = 0.0125 + +CoordBase::boundary_staggered_x_lower = no +CoordBase::boundary_staggered_y_lower = no +CoordBase::boundary_staggered_z_lower = no +CoordBase::boundary_staggered_x_upper = no +CoordBase::boundary_staggered_y_upper = no +CoordBase::boundary_staggered_z_upper = no + +CartGrid3D::type = "coordbase" + + + +ActiveThorns = "WavetoyC" + +WaveToy::bound = "radiation" + + + +ActiveThorns = "IDScalarWaveC" + +IDScalarWave::initial_data = "gaussian" +IDScalarWave::radius = 0.0 +IDScalarWave::sigma = 0.1 +IDScalarWave::amplitude = 1.0 + + + +ActiveThorns = "Time" + +Time::dtfac = 0.5 + + + +ActiveThorns = "CarpetIOBasic" + +IOBasic::outInfo_every = 1 +IOBasic::outInfo_reductions = "norm2 minimum maximum" +IOBasic::outInfo_vars = " + WaveToy::phi +" + + + +#ActiveThorns = "CarpetIOScalar" +# +#IOScalar::one_file_per_group = yes +# +#IOScalar::outScalar_every = 1 +#IOScalar::outScalar_vars = " +# grid::coordinates +# CarpetReduce::weight +# WaveToy::scalarevolve +#" + + + +ActiveThorns = "CarpetIOASCII" + +IOASCII::one_file_per_group = yes + +IOASCII::output_symmetry_points = yes # no +IOASCII::out3D_ghosts = yes # no + +#IOASCII::out0D_every = 1 +#IOASCII::out0D_vars = " +# Carpet::timing +# grid::coordinates +# CarpetReduce::weight +# WaveToy::scalarevolve +#" + +IOASCII::out1D_every = 1 +IOASCII::out1D_vars = " + grid::coordinates + CarpetReduce::weight + WaveToy::scalarevolve +" + +#IOASCII::out2D_every = 10 +#IOASCII::out2D_vars = " +# grid::coordinates +# CarpetReduce::weight +# WaveToy::scalarevolve +#" +# +#IOASCII::out3D_every = 100 +#IOASCII::out3D_vars = " +# grid::coordinates +# CarpetReduce::weight +# WaveToy::scalarevolve +#" + + + +Activethorns = "CarpetIOHDF5" + +IOHDF5::out_every = 64 +IOHDF5::compression_level = 1 +IOHDF5::out_vars = " + grid::coordinates + CarpetReduce::weight + WaveToy::scalarevolve +" + +#IOHDF5::checkpoint = yes +#IO::checkpoint_dir = $parfile +#IO::checkpoint_ID = yes +#IO::checkpoint_every = 100 +#IO::checkpoint_on_terminate = yes +# +#Carpet::regrid_during_recovery = no +#IOHDF5::use_grid_structure_from_checkpoint = yes +# +#IO::recover = "autoprobe" +#IO::recover_dir = $parfile + + + +Activethorns = "CarpetIOF5" + +IOF5::out_every = 64 +IOF5::chunk_size_x = 8 +IOF5::chunk_size_y = 8 +IOF5::chunk_size_z = 8 +IOF5::compression_level = 1 +IOF5::write_checksum = yes +IOF5::out_vars = " + grid::coordinates + CarpetReduce::weight + WaveToy::scalarevolve +" + + +ActiveThorns = "Formaline" + +Formaline::send_as_rdf = yes +Formaline::rdf_hostname[0] = "buran.aei.mpg.de" +Formaline::rdf_port [0] = 24997 +Formaline::rdf_hostname[1] = "devportal.cct.lsu.edu" +Formaline::rdf_port [1] = 8080 + + + +ActiveThorns = "Twitter" + + + +ActiveThorns = "TimerReport" + +TimerReport::out_every = 100 +TimerReport::output_all_timers_together = yes +TimerReport::out_filename = "TimerReport" diff --git a/CarpetDev/CarpetIOF5/param.ccl b/CarpetDev/CarpetIOF5/param.ccl index 45b0eeca1..f9d1249bd 100644 --- a/CarpetDev/CarpetIOF5/param.ccl +++ b/CarpetDev/CarpetIOF5/param.ccl @@ -62,6 +62,15 @@ STRING out_extension "File name extension" STEERABLE=always "" :: "File extension (including a leading dot, if desired)" } ".f5" +BOOLEAN create_subdirs "Create subdirectories for the output files to reduce the number of files per directory" STEERABLE=always +{ +} "no" + +BOOLEAN one_dir_per_file "Create one subdirectory per output file to reduce locking overhead" STEERABLE=always +{ +} "no" + + STRING out_vars "Variables and groups which should be output in the F5 file format" STEERABLE=always @@ -101,17 +110,44 @@ REAL dt_fudge "Fudge factor for time comparisons" STEERABLE=always +INT chunk_size_x "Chunk size for chunked datasets" STEERABLE=always +{ + -1 :: "no chunking (use actual dataset size)" + 1:* :: "desired chunk size" +} -1 + +INT chunk_size_y "Chunk size for chunked datasets" STEERABLE=always +{ + -1 :: "no chunking (use actual dataset size)" + 1:* :: "desired chunk size" +} -1 + +INT chunk_size_z "Chunk size for chunked datasets" STEERABLE=always +{ + -1 :: "no chunking (use actual dataset size)" + 1:* :: "desired chunk size" +} -1 + INT compression_level "Compression level to use for writing HDF5 data" STEERABLE=always { - 0:9 :: "Higher numbers compress better, a value of zero disables compression" + 0 :: "no compression" + 1:9 :: "higher numbers compress better" } 0 +BOOLEAN write_checksum "Add a checksum when writing HDF5 files" STEERABLE=always +{ +} "no" + +BOOLEAN check_checksum "Check checksum (if present) when reading HDF5 files" STEERABLE=always +{ +} "no" + KEYWORD output_regions "Regions which should be output" STEERABLE=always { "exterior" :: "whole region (including boundaries)" - "communicated" :: "exterior without outer boundary" + #"communicated" :: "exterior without outer boundary" "owned" :: "evolved in time" # "active" :: "owned minus buffers" "interior" :: "interior (without ghost zones)" diff --git a/CarpetDev/CarpetIOF5/src/IOF5.cc b/CarpetDev/CarpetIOF5/src/IOF5.cc index 94e1089f3..1173f5228 100644 --- a/CarpetDev/CarpetIOF5/src/IOF5.cc +++ b/CarpetDev/CarpetIOF5/src/IOF5.cc @@ -9,12 +9,22 @@ #include <string> #include <vector> +// force HDF5 1.8.x installations to use the new API +#define H5Dcreate_vers 2 + +#include <hdf5.h> + #include "cctk.h" #include "cctk_Arguments.h" #include "cctk_Parameters.h" +#include "CactusBase/IOUtil/src/ioGH.h" +#include "CactusBase/IOUtil/src/ioutil_CheckpointRecovery.h" + #include "carpet.hh" +#include "defs.hh" + #include "extending.hh" #include "file.hh" #include "utils.hh" @@ -377,36 +387,93 @@ namespace CarpetIOF5 { extending_t extending (cctkGH); bool const use_IO_out_dir = strcmp (out_dir, "") == 0; - string const basename - = (use_IO_out_dir ? IO_out_dir : out_dir) + string ("/") + alias; + string const path = use_IO_out_dir ? IO_out_dir : out_dir; + string const basename = alias; bool const did_truncate = extending.get_did_truncate (basename); bool const do_truncate = not did_truncate and IO_TruncateOutputFiles (cctkGH); extending.set_did_truncate (basename); - F5::file_t file (cctkGH, basename, string (out_extension), do_truncate); + int const proc = CCTK_MyProc (cctkGH); + bool have_metafile; // whether there is a metadata file + int metadata_processor; // the processor which outputs the metadata file + int output_processor; // the processor which outputs our data + if (CCTK_EQUALS (out_mode, "proc")) + { + have_metafile = true; + metadata_processor = 0; + output_processor = proc; + } + else if (CCTK_EQUALS (out_mode, "np")) + { + have_metafile = true; + metadata_processor = 0; + output_processor = proc / out_proc_every * out_proc_every; + } + else if (CCTK_EQUALS (out_mode, "onefile")) + { + have_metafile = false; + metadata_processor = 0; + output_processor = 0; + } + else + { + assert (0); + } + + F5::file_t * metafile = NULL; + if (have_metafile and proc == metadata_processor) + { + metafile + = new F5::file_t (cctkGH, path, basename, string (out_extension), + do_truncate, true, false); + } + + F5::file_t * file = NULL; + if (proc == output_processor) + { + file = new F5::file_t (cctkGH, path, basename, string (out_extension), + do_truncate, not have_metafile, true); + } if (do_truncate) { // Output parameters once after the output file has been created - if (CCTK_EQUALS (out_save_parameters, "all") or - CCTK_EQUALS (out_save_parameters, "only set")) - { - WriteParameters (file); - } - else if (CCTK_EQUALS (out_save_parameters, "no")) + if (proc == metadata_processor) { - // do nothing - } - else - { - assert (0); + if (CCTK_EQUALS (out_save_parameters, "all") or + CCTK_EQUALS (out_save_parameters, "only set")) + { + WriteParameters (have_metafile ? * metafile : * file); + } + else if (CCTK_EQUALS (out_save_parameters, "no")) + { + // do nothing + } + else + { + assert (0); + } } } - writer_t writer (cctkGH, variable); - writer.write (file); + if (metafile) + { + writer_t writer (cctkGH, variable); + writer.write (* metafile); + delete metafile; + metafile = NULL; + } + { + writer_t writer (cctkGH, variable); +#warning "TODO: handle the case where not all processors are writing to their own file" + assert (proc == output_processor); + assert (file); + writer.write (* file); + delete file; + file = NULL; + } return Error_none; } @@ -416,12 +483,84 @@ namespace CarpetIOF5 { void WriteParameters (F5::file_t & file) { - bool const use_metafile = file.get_have_metafile(); - hid_t const hdf5_file - = use_metafile ? file.get_hdf5_metafile() : file.get_hdf5_file(); + DECLARE_CCTK_PARAMETERS; + + cGH const * const cctkGH = file.get_cctkGH (); + + hid_t const hdf5_file = file.get_hdf5_file(); + + hid_t const attribute_group + = F5::open_or_create_group (hdf5_file, + "Parameters and Global Attributes"); + assert (attribute_group >= 0); + + // unique configuration identifier + if (CCTK_IsFunctionAliased ("UniqueConfigID")) { + F5::write_or_check_attribute + (attribute_group, "config id", + static_cast<char const *> (UniqueConfigID (cctkGH))); + } + + // unique build identifier + if (CCTK_IsFunctionAliased ("UniqueBuildID")) { + F5::write_or_check_attribute + (attribute_group, "build id", + static_cast<char const *> (UniqueBuildID (cctkGH))); + } + + // unique simulation identifier + if (CCTK_IsFunctionAliased ("UniqueSimulationID")) { + F5::write_or_check_attribute + (attribute_group, "simulation id", + static_cast<char const *> (UniqueSimulationID (cctkGH))); + } + + // unique run identifier + if (CCTK_IsFunctionAliased ("UniqueRunID")) { + F5::write_or_check_attribute + (attribute_group, "run id", + static_cast<char const *> (UniqueRunID (cctkGH))); + } + + // Output Cactus parameters as single string + { + char * const parameters = IOUtil_GetAllParameters (cctkGH, true); + assert (parameters); + // Create a dataset, since the data may not fit into an attribute + hsize_t const size = strlen (parameters) + 1; + hid_t const dataspace = H5Screate_simple (1, & size, NULL); + assert (dataspace >= 0); + hid_t properties = H5Pcreate (H5P_DATASET_CREATE); + assert (properties >= 0); + check (not H5Pset_chunk (properties, 1, & size)); + if (compression_level > 0) + { + check (not H5Pset_deflate (properties, compression_level)); + } + if (write_checksum) + { + check (not H5Pset_fletcher32 (properties)); + } + hid_t const dataset + = H5Dcreate (attribute_group, "All Parameters", H5T_NATIVE_CHAR, + dataspace, H5P_DEFAULT, + properties, H5P_DEFAULT); + assert (dataset >= 0); + check (not H5Dwrite (dataset, H5T_NATIVE_CHAR, H5S_ALL, H5S_ALL, + H5P_DEFAULT, parameters)); + check (not H5Dclose (dataset)); + check (not H5Pclose (properties)); + check (not H5Sclose (dataspace)); + free (parameters); + } + + check (not H5Gclose (attribute_group)); + // This is far too slow to be useful +#if 0 hid_t const parameter_group = F5::open_or_create_group (hdf5_file, "Cactus parameters"); + assert (parameter_group >= 0); int first = 1; for (;;) @@ -479,8 +618,8 @@ namespace CarpetIOF5 { first = 0; } - herr_t const herr = H5Gclose (parameter_group); - assert (not herr); + check (not H5Gclose (parameter_group)); +#endif } diff --git a/CarpetDev/CarpetIOF5/src/coordinate_system.cc b/CarpetDev/CarpetIOF5/src/coordinate_system.cc index bb5b6808f..e030c08a9 100644 --- a/CarpetDev/CarpetIOF5/src/coordinate_system.cc +++ b/CarpetDev/CarpetIOF5/src/coordinate_system.cc @@ -102,8 +102,7 @@ namespace CarpetIOF5 { Cartesian_coordinate_system_t:: ~ Cartesian_coordinate_system_t () { - herr_t const herr = H5Gclose (m_hdf5_coordinate_system); - assert (not herr); + check (not H5Gclose (m_hdf5_coordinate_system)); } @@ -114,8 +113,10 @@ namespace CarpetIOF5 { assert (all (m_level_delta > (CCTK_REAL) 0)); ostringstream namebuf; - namebuf << "Cartesian 3D, x0=" << m_level_origin - << ", dx=" << m_level_delta; + namebuf << "Cartesian3D-" + << name_from_ivect (m_level_origin) + << "-" + << name_from_ivect (m_level_delta); string const namestr = namebuf.str(); m_name = namestr; char const * const name = namestr.c_str(); @@ -124,6 +125,7 @@ namespace CarpetIOF5 { = open_or_create_group (m_topology.get_hdf5_topology(), name); assert (m_hdf5_coordinate_system >= 0); +#warning "TODO: don't output coordinates as attributes" write_or_check_attribute (m_hdf5_coordinate_system, "origin", m_level_origin); write_or_check_attribute @@ -133,21 +135,20 @@ namespace CarpetIOF5 { void coordinate_system_t:: - get_link_destination (string & filename, + get_link_destination (int const proc, + string & filename, string & objectname) const { - static bool initialised = false; - static string l_filename; - static string l_objectname; - if (not initialised) + get_topology().get_link_destination (proc, filename, objectname); + if (objectname.empty()) { - initialised = true; - get_topology().get_link_destination (l_filename, l_objectname); - l_objectname += string ("/") + m_name; + objectname = m_name; + } + else + { + objectname += string ("/") + m_name; } - filename = l_filename; - objectname = l_objectname; } diff --git a/CarpetDev/CarpetIOF5/src/coordinate_system.hh b/CarpetDev/CarpetIOF5/src/coordinate_system.hh index 3a36a458a..2b67b4561 100644 --- a/CarpetDev/CarpetIOF5/src/coordinate_system.hh +++ b/CarpetDev/CarpetIOF5/src/coordinate_system.hh @@ -46,7 +46,8 @@ namespace CarpetIOF5 { const; void - get_link_destination (string & filename, + get_link_destination (int proc, + string & filename, string & objectname) const; diff --git a/CarpetDev/CarpetIOF5/src/data_region.cc b/CarpetDev/CarpetIOF5/src/data_region.cc index 21728c2e6..99b188323 100644 --- a/CarpetDev/CarpetIOF5/src/data_region.cc +++ b/CarpetDev/CarpetIOF5/src/data_region.cc @@ -3,12 +3,14 @@ #include <sstream> #include <string> +#include <hdf5.h> + #include "cctk.h" -#include "cctk_Parameters.h" #include "carpet.hh" #include "data_region.hh" +#include "utils.hh" @@ -21,54 +23,19 @@ namespace CarpetIOF5 { data_region_t:: - data_region_t (tensor_component_t & tensor_component, + data_region_t (physical_quantity_t & physical_quantity, bbox<int, dim> const & region) - : m_tensor_component (tensor_component), - m_region (region) + : m_physical_quantity (physical_quantity), + m_region (region), + m_name (string ("region-") + F5::name_from_ibbox (region)) { - DECLARE_CCTK_PARAMETERS; - assert (not region.empty()); - ostringstream namebuf; -#if 0 - namebuf << "map=" << Carpet::map << " " - << "region=" << m_region; -#else - namebuf << "region=" << m_region; -#endif - string const namestr = namebuf.str(); - char const * const name = namestr.c_str(); - assert (name != 0); - - int const vartype = CCTK_VarTypeI (m_tensor_component.get_variable()); - assert (vartype >= 0); - hid_t const hdf5_datatype = hdf5_datatype_from_cactus_datatype (vartype); - assert (hdf5_datatype >= 0); - - vect<hsize_t, dim> const dims - = (region.shape() / region.stride()).reverse(); - m_dataspace = H5Screate_simple (dim, & dims [0], 0); - assert (m_dataspace >= 0); - - m_properties = H5Pcreate (H5P_DATASET_CREATE); - assert (m_properties >= 0); - if (compression_level > 0) - { - herr_t const herr1 = H5Pset_chunk (m_properties, dim, & dims [0]); - assert (not herr1); - herr_t const herr2 = H5Pset_deflate (m_properties, compression_level); - assert (not herr2); - } - - m_dataset - = H5Dcreate (m_tensor_component.get_hdf5_tensor_component(), name, - hdf5_datatype, m_dataspace, - H5P_DEFAULT, m_properties, H5P_DEFAULT); - assert (m_dataset >= 0); - - write_or_check_attribute - (m_dataset, "iorigin", region.lower() / region.stride()); + m_hdf5_data_region + = open_or_create_group (m_physical_quantity + .get_hdf5_physical_quantity(), + m_name.c_str()); + assert (m_hdf5_data_region >= 0); assert (invariant()); } @@ -78,73 +45,35 @@ namespace CarpetIOF5 { data_region_t:: ~ data_region_t () { - herr_t herr; - - herr = H5Dclose (m_dataset); - assert (not herr); - - herr = H5Sclose (m_dataspace); - assert (not herr); - - herr = H5Pclose (m_properties); + herr_t const herr = H5Gclose (m_hdf5_data_region); assert (not herr); } - string data_region_t:: - name_from_region (bbox<int, dim> const & region) + physical_quantity_t & data_region_t:: + get_physical_quantity () + const { - ostringstream namebuf; -#if 0 - namebuf << "map=" << Carpet::map << " " - << "region=" << region; -#else - namebuf << "region=" << region; -#endif - return namebuf.str(); + return m_physical_quantity; } - tensor_component_t & data_region_t:: - get_tensor_component () + bbox<int, dim> const & data_region_t:: + get_region () const { - return m_tensor_component; + return m_region; } - void data_region_t:: - write (void const * const data, - int const cactus_datatype) + hid_t data_region_t:: + get_hdf5_data_region () const { - hid_t const memory_hdf5_datatype - = hdf5_datatype_from_cactus_datatype (cactus_datatype); - assert (memory_hdf5_datatype >= 0); - - vect<hsize_t, dim> const dims - = (m_region.shape() / m_region.stride()).reverse(); - hid_t const memory_dataspace - = H5Screate_simple (dim, & dims [0], & dims [0]); - assert (memory_dataspace >= 0); - - hid_t const transfer_properties = H5Pcreate (H5P_DATASET_XFER); - assert (transfer_properties >= 0); - - herr_t herr; - herr - = H5Dwrite (m_dataset, memory_hdf5_datatype, memory_dataspace, - m_dataspace, transfer_properties, data); - assert (not herr); - - herr = H5Pclose (transfer_properties); - assert (not herr); - - herr = H5Sclose (memory_dataspace); - assert (not herr); + return m_hdf5_data_region; } @@ -154,9 +83,7 @@ namespace CarpetIOF5 { const { return (not m_region.empty() - and m_properties >= 0 - and m_dataset >= 0 - and m_dataspace >= 0); + and m_hdf5_data_region >= 0); } } // namespace F5 diff --git a/CarpetDev/CarpetIOF5/src/data_region.hh b/CarpetDev/CarpetIOF5/src/data_region.hh index 29d5504c7..35e5ecc79 100644 --- a/CarpetDev/CarpetIOF5/src/data_region.hh +++ b/CarpetDev/CarpetIOF5/src/data_region.hh @@ -1,18 +1,14 @@ #ifndef DATA_REGION_HH #define DATA_REGION_HH -// force HDF5 1.8.x installations to use the new API -#ifdef H5Dcreate_vers -#undef H5Dcreate_vers -#endif -#define H5Dcreate_vers 2 +#include <string> #include <hdf5.h> #include "bbox.hh" #include "defs.hh" -#include "tensor_component.hh" +#include "physical_quantity.hh" @@ -20,15 +16,16 @@ namespace CarpetIOF5 { namespace F5 { + using std::string; + class data_region_t { - tensor_component_t & m_tensor_component; + physical_quantity_t & m_physical_quantity; bbox<int, dim> const m_region; + string const m_name; - hid_t m_properties; - hid_t m_dataset; - hid_t m_dataspace; + hid_t m_hdf5_data_region; data_region_t (); data_region_t (data_region_t const &); @@ -36,22 +33,22 @@ namespace CarpetIOF5 { public: - data_region_t (tensor_component_t & tensor_component, + data_region_t (physical_quantity_t & physical_quantity, bbox<int, dim> const & region); virtual ~ data_region_t (); - static string - name_from_region (bbox<int, dim> const & region); + physical_quantity_t & + get_physical_quantity () + const; - tensor_component_t & - get_tensor_component () + bbox<int, dim> const & + get_region () const; - void - write (void const * data, - int cactus_datatype) + hid_t + get_hdf5_data_region () const; virtual bool diff --git a/CarpetDev/CarpetIOF5/src/extending.cc b/CarpetDev/CarpetIOF5/src/extending.cc index bff256190..26d63cb60 100644 --- a/CarpetDev/CarpetIOF5/src/extending.cc +++ b/CarpetDev/CarpetIOF5/src/extending.cc @@ -1,6 +1,5 @@ #include <cassert> #include <cstring> -#include <iostream> #include "cctk.h" diff --git a/CarpetDev/CarpetIOF5/src/f5writer.cc b/CarpetDev/CarpetIOF5/src/f5writer.cc new file mode 100644 index 000000000..b351c7391 --- /dev/null +++ b/CarpetDev/CarpetIOF5/src/f5writer.cc @@ -0,0 +1,445 @@ +#include <sstream> +#include <string> + +#include <hdf5.h> + +#include "cctk.h" +#include "cctk_Arguments.h" +#include "cctk_Parameters.h" + +#include "carpet.hh" + +#include "data_region.hh" +#include "f5writer.hh" +#include "file.hh" +#include "meta_data_region.hh" +#include "physical_quantity.hh" +#include "simulation.hh" +#include "tensor_component.hh" +#include "timestep.hh" +#include "topology.hh" + + + +namespace CarpetIOF5 { + + f5writer_t:: + f5writer_t (cGH const * const cctkGH, + int const variable) + : m_cctkGH (cctkGH), + m_variable (variable) + { + } + + + + void f5writer_t:: + write (F5::file_t & file) + const + { + write_meta (file, file.get_have_metafile()); + } + + + + void f5writer_t:: + write_meta (F5::file_t & file, + bool const have_metafile) + const + { + DECLARE_CCTK_PARAMETERS; + + if (verbose or veryverbose) + { + CCTK_VInfo (CCTK_THORNSTRING, + "OutputVarAs/write_meta"); + } + + if (Carpet::is_meta_mode()) + { + for (Carpet::mglevel_iterator mglevel_iter (m_cctkGH); + not mglevel_iter.done(); + mglevel_iter.step()) + { + write_one_mglevel (file, have_metafile); + } + } + else + { + write_one_mglevel (file, have_metafile); + } + } + + + + void f5writer_t:: + write_one_mglevel (F5::file_t & file, + bool const have_metafile) + const + { + DECLARE_CCTK_PARAMETERS; + + if (verbose or veryverbose) + { + CCTK_VInfo (CCTK_THORNSTRING, + "OutputVarAs/write_one_mglevel mglevel=%d", + Carpet::mglevel); + } + + // ostringstream namebuf; + // namebuf << "convlevel=" << m_cctkGH->cctk_convlevel; + // string const namestr = namebuf.str(); + // char const * const name = namestr.c_str(); + + int const grouptype = CCTK_GroupTypeFromVarI (m_variable); + assert (grouptype >= 0); + switch (grouptype) + { + case CCTK_ARRAY: + case CCTK_SCALAR: + { + if (Carpet::do_global_mode) + { + write_global (file, have_metafile); + } + } + break; + case CCTK_GF: + { + if (Carpet::is_global_mode()) + { + for (Carpet::reflevel_iterator reflevel_iter (m_cctkGH); + not reflevel_iter.done(); + reflevel_iter.step()) + { + write_one_reflevel (file, have_metafile); + } + } + else + { + write_one_reflevel (simulation, have_metafile); + } + } + break; + default: + assert (0); + } + } + + + + void f5writer_t:: + write_global (F5::simulation_t & simulation, + bool const have_metafile) + const + { + DECLARE_CCTK_PARAMETERS; + + if (verbose or veryverbose) + { + CCTK_INFO ("OutputVarAs/write_global"); + } + + F5::unigrid_topology_t topology (simulation); + + int const grouptype = CCTK_GroupTypeFromVarI (m_variable); + assert (grouptype >= 0); + assert (grouptype == CCTK_SCALAR or grouptype == CCTK_ARRAY); + + vect<CCTK_REAL, dim> level_origin, level_delta; + for (int d=0; d<dim; ++d) + { + level_origin[d] = 0.0; + level_delta[d] = 1.0; + } + F5::Cartesian_coordinate_system_t coordinate_system + (topology, level_origin, level_delta); + + int const group = CCTK_GroupIndexFromVarI (m_variable); + assert (group >= 0 and group < CCTK_NumGroups()); + F5::physical_quantity_t physical_quantity (coordinate_system, group); + + int const map = 0; + int const reflevel = 0; + int const myproc = CCTK_MyProc (m_cctkGH); + dh * const dd = Carpet::arrdata.at(group).at(map).dd; + dh::dboxes const & boxes + = dd->boxes.at(Carpet::mglevel).at(reflevel).at(myproc); + bbox<int, dim> const & region = determine_region (boxes); + + if (have_metafile) + { + F5::meta_data_region_t meta_data_region (physical_quantity, region); + gh * const hh = Carpet::vhh.at(Carpet::map); + int const proc = hh->processor (Carpet::reflevel, Carpet::component); + meta_data_region.write (proc); + } + + F5::data_region_t data_region (physical_quantity, region); + + F5::tensor_component_t tensor_component (data_region, m_variable); + int const timelevel = 0; + void const * const varptr + = CCTK_VarDataPtrI (m_cctkGH, timelevel, m_variable); + assert (varptr != 0); + int const vartype = CCTK_VarTypeI (m_variable); + assert (vartype >= 0); + tensor_component.write (varptr, vartype); + } + + + + void f5writer_t:: + write_one_reflevel (F5::file_t & file, + bool const have_metafile) + const + { + DECLARE_CCTK_PARAMETERS; + + if (verbose or veryverbose) + { + CCTK_VInfo (CCTK_THORNSTRING, + "OutputVarAs/write_one_reflevel reflevel=%d", + Carpet::reflevel); + } + + // int const grouptype = CCTK_GroupTypeFromVarI (m_variable); + // assert (grouptype >= 0); + // assert (grouptype == CCTK_GF); + + // A name for the simulation + string sim_id; + if (CCTK_IsFunctionAliased ("UniqueSimulationID")) + { + sim_id = static_cast<char const *> (UniqueSimulationID (m_cctkGH)); + } + else { + char parfilename[10000]; + int const len = CCTK_ParameterFilename (sizeof parfilename, parfilename); + assert (len >= 0 and len < sizeof parfilename); + sim_id = parfilename; + if (sim_id.length() >= 4 + and sim_id.substr (sim_id.length() - 4) == ".par") + { + sim_id = sim_id.substr (0, sim_id.length() - 4); + } + } + + // Refinement factor of current refinement level + vect <hsize_t, dim> const current_refinement + = vect <int, dim>::ref (m_cctkGH->cctk_levfac); + + // Refinement factor of root refinement level + vect <hsize_t, dim> const rootlevel_refinement (1); + + // Remember time when the root level was output the last time + static CCTK_REAL rootlevel_time = 0.0; + if (all (current_refinement == 1)) + { + rootlevel_time = m_cctkGH->cctk_time; + } + + F5Path * refinement_path = NULL; + if (any (current_refinement != 1)) + { + refinement_path + = F5Rcreate_relative_vertex_Qrefinement3D (file, + m_cctkGH->cctk_time, + sim_id.c_str(), + current_refinement, + rootlevel_time, + rootlevel_refinement); + } + +#warning "TODO: what is this doing?" + F5T_REFINEMENT3D_POINT = refinement_path->myChart->Point_hid_t; + + if (Carpet::is_level_mode()) + { + for (Carpet::map_iterator map_iter (m_cctkGH, grouptype); + not map_iter.done(); + map_iter.step()) + { + write_one_map (simulation, have_metafile); + } + } + else + { + write_one_map (simulation, have_metafile); + } + } + + + + void f5writer_t:: + write_one_map (F5::simulation_t & simulation, + bool const have_metafile) + const + { + DECLARE_CCTK_PARAMETERS; + + if (verbose or veryverbose) + { + CCTK_VInfo (CCTK_THORNSTRING, + "OutputVarAs/write_one_map map=%d", Carpet::map); + } + + // F5::mesh_refinement_topology_t topology + // (simulation, Carpet::map, Carpet::reflevel, Carpet::maxreflevels, + // Carpet::spacereflevelfact, Carpet::maxspacereflevelfact); + + // vect<CCTK_REAL, dim> level_origin, level_delta; + // for (int d=0; d<dim; ++d) + // { + // cGH const * const cctkGH = m_cctkGH; + // DECLARE_CCTK_ARGUMENTS; + // level_origin[d] = CCTK_ORIGIN_SPACE(d); + // level_delta[d] = CCTK_DELTA_SPACE(d); + // } + // F5::Cartesian_coordinate_system_t coordinate_system + // (topology, level_origin, level_delta); + // + // int const group = CCTK_GroupIndexFromVarI (m_variable); + // assert (group >= 0 and group < CCTK_NumGroups()); + // F5::physical_quantity_t physical_quantity (coordinate_system, group); + +#warning "TODO: this should depend on the patch number" + char const * const coordinate_system = NULL; + + // Depends on the refinement level + string const gridname = sim_id + "-" + current_refinement; + + F5Path * const myPath + = F5Rcreate_vertex_refinement3D (file, + m_cctkGH->cctk_time, + sim_id.c_str(), + refinement, + coordinate_system); + + if (not refinement_path) + { + // Make root level appear as unigrid topology as well, just to + // be nice to tools that do not understand AMR + F5Rlink_default_vertex_topology (myPath, current_refinement); + } + + // Global information for this refinement level + vect <hsize_t, dim> const level_dims + = vect <int, dim>::ref (m_cctkGH->cctk_gsh); +#warning "TODO: switch to double precision" + vect <float, dim> const level_min + (CCTK_ORIGIN_SPACE(0), CCTK_ORIGIN_SPACE(1), CCTK_ORIGIN_SPACE(2)); + vect <float, dim> const level_spacing + (CCTK_DELTA_SPACE(0), CCTK_DELTA_SPACE(1), CCTK_DELTA_SPACE(2)); + vect <float, dim> const level_max + = level_min + level_spacing * (level_dims - 1); + + // Output geometric information for an entire level; it is + // uniformely covered in coordinate space + assert (dim == 3); + F5Fwrite_linear (myPath, FIBER_HDF5_POSITIONS_STRING, + dim, & level_dims [0], + F5T_COORD3_FLOAT, & level_min [0], & level_spacing [0]); + + F5Fset_range (myPath, & level_min [0], & level_max [0]); + +#error "CONTINUE HERE" + + if (Carpet::is_singlemap_mode()) + { + int const grouptype = CCTK_GroupTypeI (group); + assert (grouptype >= 0); + + for (Carpet::component_iterator component_iter (m_cctkGH, grouptype); + not component_iter.done(); + component_iter.step()) + { + write_one_component (physical_quantity, have_metafile); + } + } + else + { + write_one_component (physical_quantity, have_metafile); + } + } + + + + void f5writer_t:: + write_one_component (F5::physical_quantity_t & physical_quantity, + bool const have_metafile) + const + { + DECLARE_CCTK_PARAMETERS; + + if (verbose or veryverbose) + { + CCTK_VInfo (CCTK_THORNSTRING, + "OutputVarAs/write_one_component component=%d", + Carpet::component); + } + + gh * const hh = Carpet::vhh.at(Carpet::map); + bool const is_local = hh->is_local (Carpet::reflevel, Carpet::component); + if (have_metafile or is_local) + { + dh * const dd = Carpet::vdd.at(Carpet::map); + bbox<int, dim> const & region + = (dd->boxes.at(Carpet::mglevel).at(Carpet::reflevel) + .at(Carpet::component).exterior); + + if (have_metafile) + { + F5::meta_data_region_t meta_data_region (physical_quantity, region); + int const proc = hh->processor (Carpet::reflevel, Carpet::component); + meta_data_region.write (proc); + } + + if (is_local) + { + F5::data_region_t data_region (physical_quantity, region); + + F5::tensor_component_t tensor_component (data_region, m_variable); + int const timelevel = 0; + void const * const varptr + = CCTK_VarDataPtrI (m_cctkGH, timelevel, m_variable); + assert (varptr != 0); + int const vartype = CCTK_VarTypeI (m_variable); + assert (vartype >= 0); + tensor_component.write (varptr, vartype); + } + } + } + + + + bbox<int,dim> const & f5writer_t:: + determine_region (dh::dboxes const & boxes) + const + { + DECLARE_CCTK_PARAMETERS; + +#warning "TODO: use superregions instead of regions (? only if the regions are on the same processor?); use HDF5 chunks as well" + + bbox<int,dim> dh::dboxes::* boxptr; + if (CCTK_EQUALS (output_regions, "exterior")) + { + boxptr = & dh::dboxes::exterior; + } + else if (CCTK_EQUALS (output_regions, "owned")) + { + boxptr = & dh::dboxes::owned; + } + else if (CCTK_EQUALS (output_regions, "interior")) + { + boxptr = & dh::dboxes::interior; + } + else + { + assert (0); + } + + return boxes.*boxptr; + } + +} // namespace CarpetIOF5 diff --git a/CarpetDev/CarpetIOF5/src/f5writer.hh b/CarpetDev/CarpetIOF5/src/f5writer.hh new file mode 100644 index 000000000..ae016721e --- /dev/null +++ b/CarpetDev/CarpetIOF5/src/f5writer.hh @@ -0,0 +1,74 @@ +#ifndef F5WRITER_HH +#define F5WRITER_HH + +#include "cctk.h" + +#include "bbox.hh" +#include "defs.hh" +#include "dh.hh" + +#include "file.hh" +#include "physical_quantity.hh" +#include "simulation.hh" +#include "timestep.hh" +#include "topology.hh" + + + +namespace CarpetIOF5 { + + class f5writer_t { + + cGH const * const m_cctkGH; + int const m_variable; + + public: + + f5writer_t (cGH const * cctkGH, + int variable); + + void + write (F5::file_t & file) + const; + + private: + + void + write_meta (F5::file_t & file, + bool have_metafile) + const; + + void + write_one_mglevel (F5::timestep_t & timestep, + bool have_metafile) + const; + + void + write_global (F5::simulation_t & simulation, + bool have_metafile) + const; + + void + write_one_reflevel (F5::simulation_t & simulation, + bool have_metafile) + const; + + void + write_one_map (F5::simulation_t & simulation, + bool have_metafile) + const; + + void + write_one_component (F5::physical_quantity_t & physical_quantity, + bool have_metafile) + const; + + bbox<int,dim> const & + determine_region (dh::dboxes const & boxes) + const; + + }; + +} // namespace CarpetIOF5 + +#endif // #ifndef F5WRITER_HH diff --git a/CarpetDev/CarpetIOF5/src/file.cc b/CarpetDev/CarpetIOF5/src/file.cc index f200277b5..d78dcb001 100644 --- a/CarpetDev/CarpetIOF5/src/file.cc +++ b/CarpetDev/CarpetIOF5/src/file.cc @@ -1,16 +1,19 @@ #include <algorithm> #include <cassert> #include <iomanip> -#include <iostream> #include <sstream> #include <string> +#include <vector> #include <hdf5.h> #include "cctk.h" #include "cctk_Parameters.h" +#include "defs.hh" + #include "file.hh" +#include "utils.hh" @@ -22,58 +25,86 @@ namespace CarpetIOF5 { file_t:: file_t (cGH const * const cctkGH, + string const path, string const basename, string const extension, - bool const do_truncate) + bool const do_truncate, + bool const is_metafile, + bool const is_datafile) : m_cctkGH (cctkGH), + m_path (path), m_basename (basename), - m_extension (extension) + m_extension (extension), + m_is_metafile (is_metafile), + m_is_datafile (is_datafile) { - assert (cctkGH); - - int const proc = CCTK_MyProc (cctkGH); - m_have_metafile = determine_want_metafile (proc); - m_output_processor = determine_output_processor (proc); + DECLARE_CCTK_PARAMETERS; - m_metafilename = make_metafilename (); - m_filename = make_filename (proc); + assert (cctkGH); - char const * const metafilenameptr = m_metafilename.c_str(); - char const * const filenameptr = m_filename.c_str(); + // Create file names, creating subdirectories to avoid placing + // too many files into the same directory + check (CCTK_CreateDirectory (mode, path.c_str()) >= 0); + if (is_metafile) + { + m_filename = basename + extension; + } + else + { + int const myproc = CCTK_MyProc (cctkGH); + m_filename = create_filename (myproc, true); + } + string const filepath = m_path + "/" + m_filename; htri_t is_hdf5; H5E_BEGIN_TRY { - is_hdf5 = H5Fis_hdf5 (filenameptr); + is_hdf5 = H5Fis_hdf5 (filepath.c_str()); } H5E_END_TRY; bool const file_exists = is_hdf5 > 0; - // Ignore the metafile when determining whether the file already - // exists if (do_truncate or not file_exists) { - m_hdf5_metafile = -1; - if (m_have_metafile) + if (veryverbose) { - m_hdf5_metafile - = H5Fcreate (metafilenameptr, - H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); + CCTK_VInfo (CCTK_THORNSTRING, + "H5Fcreate (name=\"%s\")", filepath.c_str()); } m_hdf5_file - = H5Fcreate (filenameptr, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); + = H5Fcreate (filepath.c_str(), + H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); } else { - m_hdf5_metafile = -1; - if (m_have_metafile) + if (veryverbose) { - m_hdf5_metafile - = H5Fopen (metafilenameptr, H5F_ACC_RDWR, H5P_DEFAULT); + CCTK_VInfo (CCTK_THORNSTRING, + "H5Fopen (name=\"%s\")", filepath.c_str()); } - m_hdf5_file = H5Fopen (filenameptr, H5F_ACC_RDWR, H5P_DEFAULT); + m_hdf5_file = H5Fopen (filepath.c_str(), H5F_ACC_RDWR, H5P_DEFAULT); } + assert (m_hdf5_file >= 0); - m_filenames.resize (CCTK_nProcs (cctkGH)); - m_filenames.at(proc) = m_filename; + m_hdf5_fiber_contents = -1; + m_hdf5_fiber_global_charts = -1; + m_hdf5_fiber_parameter_space = -1; + if (m_is_metafile) + { + create_or_check_version (m_hdf5_file); + m_hdf5_fiber_contents + = open_or_create_group (m_hdf5_file, "TableOfContents"); + assert (m_hdf5_fiber_contents >= 0); + m_hdf5_fiber_global_charts + = open_or_create_group (m_hdf5_file, "Charts"); + assert (m_hdf5_fiber_global_charts >= 0); + m_hdf5_fiber_parameter_space + = open_or_create_group (m_hdf5_fiber_contents, "Parameters"); + assert (m_hdf5_fiber_parameter_space >= 0); + + hid_t const hdf5_time_group + = open_or_create_group (m_hdf5_fiber_parameter_space, "Time"); + assert (hdf5_time_group >= 0); + check (not H5Gclose (hdf5_time_group)); + } assert (invariant()); } @@ -83,102 +114,91 @@ namespace CarpetIOF5 { file_t:: ~ file_t() { - if (m_have_metafile) - { - herr_t const herr = H5Fclose (m_hdf5_metafile); - assert (not herr); - } - herr_t const herr = H5Fclose (m_hdf5_file); - assert (not herr); - } - - - - bool file_t:: - determine_want_metafile (int const proc) - const - { - DECLARE_CCTK_PARAMETERS; - - if (CCTK_EQUALS (out_mode, "proc") or - CCTK_EQUALS (out_mode, "np")) - { - return proc == 0; - } - else if (CCTK_EQUALS (out_mode, "onefile")) - { - return false; - } - else + if (m_is_metafile) { - assert (0); + check (not H5Gclose (m_hdf5_fiber_parameter_space)); + check (not H5Gclose (m_hdf5_fiber_contents)); + check (not H5Gclose (m_hdf5_fiber_global_charts)); } + check (not H5Fclose (m_hdf5_file)); } - int file_t:: - determine_output_processor (int const proc) + string file_t:: + create_filename (int const proc, bool const create_directories) const { DECLARE_CCTK_PARAMETERS; - if (CCTK_EQUALS (out_mode, "proc")) - { - return proc; - } - else if (CCTK_EQUALS (out_mode, "np")) - { - return proc / out_proc_every * out_proc_every; - } - else if (CCTK_EQUALS (out_mode, "onefile")) + int const nprocs = CCTK_nProcs (m_cctkGH); + string extrapath; + if (create_subdirs) { - return 0; + if (nprocs >= 10000) + { + ostringstream buf; + buf << extrapath + << m_basename + << ".p" << setw (max (0, processor_digits - 4)) << setfill ('0') + << proc / 10000 + << "nnnn/"; + extrapath = buf.str(); + if (create_directories) + { + string const filepath = m_path + "/" + extrapath; + check (CCTK_CreateDirectory (mode, filepath.c_str()) >= 0); + } + } + if (nprocs >= 100) + { + ostringstream buf; + buf << extrapath + << m_basename + << ".p" << setw (max (0, processor_digits - 2)) << setfill ('0') + << proc / 100 + << "nn/"; + extrapath = buf.str(); + if (create_directories) + { + string const filepath = m_path + "/" + extrapath; + check (CCTK_CreateDirectory (mode, filepath.c_str()) >= 0); + } + } } - else + if (one_dir_per_file and nprocs >= 1) { - assert (0); + ostringstream buf; + buf << extrapath + << m_basename + << ".p" << setw (processor_digits) << setfill ('0') + << proc + << "/"; + extrapath = buf.str(); + if (create_directories) + { + string const filepath = m_path + "/" + extrapath; + check (CCTK_CreateDirectory (mode, filepath.c_str()) >= 0); + } } + ostringstream buf; + buf << extrapath + << m_basename + << ".p" << setw (processor_digits) << setfill ('0') << proc + << m_extension; + return buf.str(); } - - - string file_t:: - make_metafilename () - const + + + void file_t:: + create_or_check_version (hid_t const hdf5_file) { - return m_basename + m_extension; - } - - - - string file_t:: - make_filename (int const proc) - const - { - DECLARE_CCTK_PARAMETERS; - - ostringstream filenamebuf; - - filenamebuf << m_basename; - - if (CCTK_EQUALS (out_mode, "proc") or - CCTK_EQUALS (out_mode, "np")) - { - filenamebuf << ".p" << setw (processor_digits) << setfill ('0') << proc; - } - else if (CCTK_EQUALS (out_mode, "onefile")) - { - // do nothing - } - else - { - assert (0); - } - - filenamebuf << m_extension; - - return filenamebuf.str(); + hid_t const hdf5_group = open_or_create_group (hdf5_file, "version"); + assert (hdf5_group >= 0); + string const version ("http://www.zib.de/visual/F5-0.1.2/"); + write_or_check_attribute (hdf5_group, "version", version.c_str()); + check (not H5Gclose (hdf5_group)); } @@ -192,72 +212,50 @@ namespace CarpetIOF5 { - bool file_t:: - get_have_metafile () - const - { - return m_have_metafile; - } - - - - int file_t:: - get_output_processor () + hid_t file_t:: + get_hdf5_file () const { - return m_output_processor; + return m_hdf5_file; } - string file_t:: - get_filename (int const proc) + hid_t file_t:: + get_hdf5_fiber_parameter_space () const { - assert (proc >= 0 and proc < CCTK_nProcs (m_cctkGH)); - if (m_filenames.at(proc).empty()) - { - m_filenames.at(proc) = make_filename (proc); - } - return m_filenames.at(proc); + return m_hdf5_fiber_parameter_space; } - hid_t file_t:: - get_hdf5_metafile() + bool file_t:: + get_is_metafile () const { - return m_hdf5_metafile; + return m_is_metafile; } - hid_t file_t:: - get_hdf5_file() + bool file_t:: + get_is_datafile () const { - return m_hdf5_file; + return m_is_datafile; } void file_t:: - get_link_destination (string & filename, + get_link_destination (int const proc, + string & filename, string & objectname) const { - static bool initialised = false; - static string l_filename; - static string l_objectname; - if (not initialised) - { - initialised = true; - l_filename = m_filename; - l_objectname = string (""); - } - filename = l_filename; - objectname = l_objectname; + filename = create_filename (proc); + objectname = ""; } @@ -266,9 +264,7 @@ namespace CarpetIOF5 { invariant() const { - return (m_cctkGH != 0 - and (not m_have_metafile or m_hdf5_metafile >= 0) - and m_hdf5_file >= 0); + return m_cctkGH != 0 and m_hdf5_file >= 0; } } // namespace F5 diff --git a/CarpetDev/CarpetIOF5/src/file.hh b/CarpetDev/CarpetIOF5/src/file.hh index 19add249e..44d8ce00c 100644 --- a/CarpetDev/CarpetIOF5/src/file.hh +++ b/CarpetDev/CarpetIOF5/src/file.hh @@ -23,48 +23,46 @@ namespace CarpetIOF5 { class file_t { - cGH const * const m_cctkGH; + // File mode for creating directories + static int const mode = 0755; - bool m_have_metafile; - int m_output_processor; + cGH const * const m_cctkGH; + string const m_path; string const m_basename; string const m_extension; - - string m_metafilename; string m_filename; - vector <string> mutable m_filenames; + bool const m_is_metafile; + bool const m_is_datafile; - hid_t m_hdf5_metafile; hid_t m_hdf5_file; + hid_t m_hdf5_fiber_contents; + hid_t m_hdf5_fiber_global_charts; + hid_t m_hdf5_fiber_parameter_space; + file_t (); file_t (file_t const &); file_t operator= (file_t const &); - bool - determine_want_metafile (int proc) - const; - - int - determine_output_processor (int proc) - const; - string - make_metafilename () + create_filename (int proc, + bool create_directories = false) const; - string - make_filename (int proc) - const; + static void + create_or_check_version (hid_t const hdf5_file); public: file_t (cGH const * cctkGH, - string filename, + string path, + string basename, string extension, - bool do_truncate); + bool do_truncate, + bool is_metafile, + bool is_datafile); virtual ~ file_t (); @@ -73,28 +71,23 @@ namespace CarpetIOF5 { get_cctkGH () const; - bool - get_have_metafile () - const; - - int - get_output_processor () + hid_t + get_hdf5_file () const; - string - get_filename (int proc) + hid_t + get_hdf5_fiber_parameter_space () const; - hid_t - get_hdf5_metafile () + bool get_is_metafile () const; - hid_t - get_hdf5_file () + bool get_is_datafile () const; void - get_link_destination (string & filename, + get_link_destination (int proc, + string & filename, string & objectname) const; diff --git a/CarpetDev/CarpetIOF5/src/make.code.defn b/CarpetDev/CarpetIOF5/src/make.code.defn index 0641b4f9d..d0350d235 100644 --- a/CarpetDev/CarpetIOF5/src/make.code.defn +++ b/CarpetDev/CarpetIOF5/src/make.code.defn @@ -4,16 +4,16 @@ SRCS = IOF5.cc \ coordinate_system.cc \ data_region.cc \ - extending.cc \ - file.cc \ + extending.cc \ + file.cc \ meta_data_region.cc \ - physical_quantity.cc \ - simulation.cc \ - tensor_component.cc \ - timestep.cc \ - topology.cc \ - utils.cc \ - writer.cc + physical_quantity.cc \ + simulation.cc \ + tensor_component.cc \ + timestep.cc \ + topology.cc \ + utils.cc \ + writer.cc # Subdirectories containing source files SUBDIRS = diff --git a/CarpetDev/CarpetIOF5/src/meta_data_region.cc b/CarpetDev/CarpetIOF5/src/meta_data_region.cc index 505508eb9..88963ec34 100644 --- a/CarpetDev/CarpetIOF5/src/meta_data_region.cc +++ b/CarpetDev/CarpetIOF5/src/meta_data_region.cc @@ -3,11 +3,14 @@ #include <sstream> #include <string> +#include <hdf5.h> + #include "cctk.h" #include "carpet.hh" -#include "data_region.hh" +#include "defs.hh" + #include "meta_data_region.hh" #include "utils.hh" @@ -22,17 +25,14 @@ namespace CarpetIOF5 { meta_data_region_t:: - meta_data_region_t (tensor_component_t & tensor_component, + meta_data_region_t (physical_quantity_t & physical_quantity, bbox<int, dim> const & region) - : m_tensor_component (tensor_component), - m_region (region) + : m_physical_quantity (physical_quantity), + m_region (region), + m_name (string ("region-") + F5::name_from_ibbox (region)) { assert (not region.empty()); - string const namestr = data_region_t::name_from_region (region); - char const * const name = namestr.c_str(); - assert (name != 0); - assert (invariant()); } @@ -45,11 +45,11 @@ namespace CarpetIOF5 { - tensor_component_t & meta_data_region_t:: - get_tensor_component () + physical_quantity_t & meta_data_region_t:: + get_physical_quantity () const { - return m_tensor_component; + return m_physical_quantity; } @@ -58,22 +58,48 @@ namespace CarpetIOF5 { write (int const proc) const { + DECLARE_CCTK_PARAMETERS; + string filename; string objectname; - get_tensor_component().get_link_destination (filename, objectname); + get_physical_quantity().get_link_destination (proc, filename, objectname); - string const name = data_region_t::name_from_region (m_region); + hid_t const hdf5_physical_quantity + = m_physical_quantity.get_hdf5_physical_quantity(); - hid_t const hdf5_tensor_component - = m_tensor_component.get_hdf5_tensor_component(); + bool link_exists; + H5E_BEGIN_TRY { + H5L_info_t linkbuf; + herr_t const herr + = H5Lget_info (hdf5_physical_quantity, m_name.c_str(), + & linkbuf, H5P_DEFAULT); + link_exists = herr == 0; + } H5E_END_TRY; + if (veryverbose) + { + CCTK_VInfo (CCTK_THORNSTRING, + "Link \"%s\" %s", + m_name.c_str(), + link_exists ? "exists" : "does not exist"); + } - herr_t const herr - = H5Lcreate_external (filename.c_str(), - objectname.c_str(), - hdf5_tensor_component, - name.c_str(), - H5P_DEFAULT, H5P_DEFAULT); - assert (not herr); + if (not link_exists) + { + if (veryverbose) + { + CCTK_VInfo (CCTK_THORNSTRING, + "H5Lcreate_external " + "(filename=\"%s\", objectname=\"%s\", linkname=\"%s\")", + filename.c_str(), + objectname.c_str(), + m_name.c_str()); + } + check (not H5Lcreate_external (filename.c_str(), + objectname.c_str(), + hdf5_physical_quantity, + m_name.c_str(), + H5P_DEFAULT, H5P_DEFAULT)); + } } diff --git a/CarpetDev/CarpetIOF5/src/meta_data_region.hh b/CarpetDev/CarpetIOF5/src/meta_data_region.hh index b109c5da4..ac59c18e2 100644 --- a/CarpetDev/CarpetIOF5/src/meta_data_region.hh +++ b/CarpetDev/CarpetIOF5/src/meta_data_region.hh @@ -1,12 +1,14 @@ #ifndef META_DATA_REGION_HH #define META_DATA_REGION_HH +#include <string> + #include <hdf5.h> #include "bbox.hh" #include "defs.hh" -#include "tensor_component.hh" +#include "physical_quantity.hh" @@ -14,11 +16,14 @@ namespace CarpetIOF5 { namespace F5 { + using std::string; + class meta_data_region_t { - tensor_component_t & m_tensor_component; + physical_quantity_t & m_physical_quantity; bbox<int, dim> const m_region; + string const m_name; hid_t m_properties; hid_t m_dataset; @@ -30,14 +35,14 @@ namespace CarpetIOF5 { public: - meta_data_region_t (tensor_component_t & tensor_component, + meta_data_region_t (physical_quantity_t & physical_quantity, bbox<int, dim> const & region); virtual ~ meta_data_region_t (); - tensor_component_t & - get_tensor_component () + physical_quantity_t & + get_physical_quantity () const; void diff --git a/CarpetDev/CarpetIOF5/src/physical_quantity.cc b/CarpetDev/CarpetIOF5/src/physical_quantity.cc index 0b6720ece..d0cb78dcd 100644 --- a/CarpetDev/CarpetIOF5/src/physical_quantity.cc +++ b/CarpetDev/CarpetIOF5/src/physical_quantity.cc @@ -1,6 +1,8 @@ #include <cassert> #include <cstdlib> +#include <hdf5.h> + #include "cctk.h" #include "physical_quantity.hh" @@ -67,6 +69,15 @@ namespace CarpetIOF5 { + string physical_quantity_t:: + get_name () + const + { + return m_name; + } + + + hid_t physical_quantity_t:: get_hdf5_physical_quantity () const @@ -77,21 +88,20 @@ namespace CarpetIOF5 { void physical_quantity_t:: - get_link_destination (string & filename, + get_link_destination (int const proc, + string & filename, string & objectname) const { - static bool initialised = false; - static string l_filename; - static string l_objectname; - if (not initialised) + get_coordinate_system().get_link_destination (proc, filename, objectname); + if (objectname.empty()) + { + objectname = m_name; + } + else { - initialised = true; - get_coordinate_system().get_link_destination (l_filename, l_objectname); - l_objectname += string ("/") + m_name; + objectname += string ("/") + m_name; } - filename = l_filename; - objectname = l_objectname; } diff --git a/CarpetDev/CarpetIOF5/src/physical_quantity.hh b/CarpetDev/CarpetIOF5/src/physical_quantity.hh index 38b670cb2..e2b025b81 100644 --- a/CarpetDev/CarpetIOF5/src/physical_quantity.hh +++ b/CarpetDev/CarpetIOF5/src/physical_quantity.hh @@ -40,12 +40,17 @@ namespace CarpetIOF5 { get_group () const; + string + get_name () + const; + hid_t get_hdf5_physical_quantity () const; void - get_link_destination (string & filename, + get_link_destination (int proc, + string & filename, string & objectname) const; diff --git a/CarpetDev/CarpetIOF5/src/simulation.cc b/CarpetDev/CarpetIOF5/src/simulation.cc index 98a0a3888..1adde5e5a 100644 --- a/CarpetDev/CarpetIOF5/src/simulation.cc +++ b/CarpetDev/CarpetIOF5/src/simulation.cc @@ -4,6 +4,8 @@ #include "cctk.h" +#include "defs.hh" + #include "simulation.hh" #include "utils.hh" @@ -28,6 +30,10 @@ namespace CarpetIOF5 { m_name.c_str()); assert (m_hdf5_simulation >= 0); + cGH const * const cctkGH = m_timestep.get_file().get_cctkGH(); + write_or_check_attribute + (m_hdf5_simulation, "TimeStep", cctkGH->cctk_iteration); + assert (invariant()); } @@ -36,8 +42,7 @@ namespace CarpetIOF5 { simulation_t:: ~ simulation_t() { - herr_t const herr = H5Gclose (m_hdf5_simulation); - assert (not herr); + check (not H5Gclose (m_hdf5_simulation)); } @@ -61,21 +66,20 @@ namespace CarpetIOF5 { void simulation_t:: - get_link_destination (string & filename, + get_link_destination (int const proc, + string & filename, string & objectname) const { - static bool initialised = false; - static string l_filename; - static string l_objectname; - if (not initialised) + get_timestep().get_link_destination (proc, filename, objectname); + if (objectname.empty()) + { + objectname = m_name; + } + else { - initialised = true; - get_timestep().get_link_destination (l_filename, l_objectname); - l_objectname += string ("/") + m_name; + objectname += string ("/") + m_name; } - filename = l_filename; - objectname = l_objectname; } diff --git a/CarpetDev/CarpetIOF5/src/simulation.hh b/CarpetDev/CarpetIOF5/src/simulation.hh index 272b3385c..4c4639958 100644 --- a/CarpetDev/CarpetIOF5/src/simulation.hh +++ b/CarpetDev/CarpetIOF5/src/simulation.hh @@ -47,7 +47,8 @@ namespace CarpetIOF5 { const; void - get_link_destination (string & filename, + get_link_destination (int proc, + string & filename, string & objectname) const; diff --git a/CarpetDev/CarpetIOF5/src/tensor_component.cc b/CarpetDev/CarpetIOF5/src/tensor_component.cc index 5d4b281fc..6cd2b6486 100644 --- a/CarpetDev/CarpetIOF5/src/tensor_component.cc +++ b/CarpetDev/CarpetIOF5/src/tensor_component.cc @@ -1,7 +1,15 @@ #include <cassert> #include <cstdlib> +// force HDF5 1.8.x installations to use the new API +#define H5Dcreate_vers 2 + +#include <hdf5.h> + #include "cctk.h" +#include "cctk_Parameters.h" + +#include "vect.hh" #include "tensor_component.hh" @@ -12,22 +20,65 @@ namespace CarpetIOF5 { namespace F5 { tensor_component_t:: - tensor_component_t (physical_quantity_t & physical_quantity, + tensor_component_t (data_region_t & data_region, int const variable) - : m_physical_quantity (physical_quantity), + : m_data_region (data_region), m_variable (variable) { + DECLARE_CCTK_PARAMETERS; + assert (variable >= 0 and variable < CCTK_NumVars()); char const * const name = CCTK_VarName (variable); assert (name != 0); m_name = string (name); - m_hdf5_tensor_component - = open_or_create_group (m_physical_quantity - .get_hdf5_physical_quantity(), - name); - assert (m_hdf5_tensor_component >= 0); + int const vartype = CCTK_VarTypeI (variable); + assert (vartype >= 0); + hid_t const hdf5_datatype = hdf5_datatype_from_cactus_datatype (vartype); + assert (hdf5_datatype >= 0); + + bbox<int, dim> const & region = m_data_region.get_region(); + + vect<hsize_t, dim> const dims + = (region.shape() / region.stride()).reverse(); + m_dataspace = H5Screate_simple (dim, & dims [0], 0); + assert (m_dataspace >= 0); + + m_properties = H5Pcreate (H5P_DATASET_CREATE); + assert (m_properties >= 0); + vect<int, dim> const user_chunk_size + (chunk_size_x, chunk_size_y, chunk_size_z); + bool const need_chunks + = any (user_chunk_size > 0) or compression_level > 0 or write_checksum; + if (need_chunks) + { + vect<hsize_t, dim> const chunk_size + = either (user_chunk_size > 0, + vect<hsize_t, dim> (user_chunk_size), + dims); + herr_t const herr = H5Pset_chunk (m_properties, dim, & chunk_size [0]); + assert (not herr); + } + if (compression_level > 0) + { + herr_t const herr = H5Pset_deflate (m_properties, compression_level); + assert (not herr); + } + if (write_checksum) + { + herr_t const herr = H5Pset_fletcher32 (m_properties); + assert (not herr); + } + + m_dataset + = H5Dcreate (m_data_region.get_hdf5_data_region(), m_name.c_str(), + hdf5_datatype, m_dataspace, + H5P_DEFAULT, m_properties, H5P_DEFAULT); + assert (m_dataset >= 0); + + write_or_check_attribute + (m_dataset, "iorigin", region.lower() / region.stride()); assert (invariant()); } @@ -37,17 +88,25 @@ namespace CarpetIOF5 { tensor_component_t:: ~ tensor_component_t () { - herr_t const herr = H5Gclose (m_hdf5_tensor_component); + herr_t herr; + + herr = H5Dclose (m_dataset); + assert (not herr); + + herr = H5Sclose (m_dataspace); + assert (not herr); + + herr = H5Pclose (m_properties); assert (not herr); } - physical_quantity_t & tensor_component_t:: - get_physical_quantity () + data_region_t & tensor_component_t:: + get_data_region () const { - return m_physical_quantity; + return m_data_region; } @@ -61,31 +120,38 @@ namespace CarpetIOF5 { - hid_t tensor_component_t:: - get_hdf5_tensor_component () - const - { - return m_hdf5_tensor_component; - } - - - +#warning "TODO: This assumes that the shape of data is the same as the shape of the region; this may not be so if not all of the data are written out" void tensor_component_t:: - get_link_destination (string & filename, - string & objectname) + write (void const * const data, + int const cactus_datatype) const { - static bool initialised = false; - static string l_filename; - static string l_objectname; - if (not initialised) - { - initialised = true; - get_physical_quantity().get_link_destination (l_filename, l_objectname); - l_objectname += string ("/") + m_name; - } - filename = l_filename; - objectname = l_objectname; + hid_t const memory_hdf5_datatype + = hdf5_datatype_from_cactus_datatype (cactus_datatype); + assert (memory_hdf5_datatype >= 0); + + bbox<int, dim> const & region = m_data_region.get_region(); + + vect<hsize_t, dim> const dims + = (region.shape() / region.stride()).reverse(); + hid_t const memory_dataspace + = H5Screate_simple (dim, & dims [0], & dims [0]); + assert (memory_dataspace >= 0); + + hid_t const transfer_properties = H5Pcreate (H5P_DATASET_XFER); + assert (transfer_properties >= 0); + + herr_t herr; + herr + = H5Dwrite (m_dataset, memory_hdf5_datatype, memory_dataspace, + m_dataspace, transfer_properties, data); + assert (not herr); + + herr = H5Pclose (transfer_properties); + assert (not herr); + + herr = H5Sclose (memory_dataspace); + assert (not herr); } @@ -95,7 +161,9 @@ namespace CarpetIOF5 { const { return (m_variable >= 0 and m_variable < CCTK_NumVars() - and m_hdf5_tensor_component >= 0); + and m_properties >= 0 + and m_dataset >= 0 + and m_dataspace >= 0); } } // namespace F5 diff --git a/CarpetDev/CarpetIOF5/src/tensor_component.hh b/CarpetDev/CarpetIOF5/src/tensor_component.hh index f659c0076..8a95d6faa 100644 --- a/CarpetDev/CarpetIOF5/src/tensor_component.hh +++ b/CarpetDev/CarpetIOF5/src/tensor_component.hh @@ -1,10 +1,11 @@ #ifndef TENSOR_COMPONENT_HH #define TENSOR_COMPONENT_HH +#include <string> + #include <hdf5.h> -#include "physical_quantity.hh" -#include "utils.hh" +#include "data_region.hh" @@ -14,12 +15,14 @@ namespace CarpetIOF5 { class tensor_component_t { - physical_quantity_t & m_physical_quantity; + data_region_t & m_data_region; int const m_variable; string m_name; - hid_t m_hdf5_tensor_component; + hid_t m_dataspace; + hid_t m_properties; + hid_t m_dataset; tensor_component_t (); tensor_component_t (tensor_component_t const &); @@ -27,27 +30,23 @@ namespace CarpetIOF5 { public: - tensor_component_t (physical_quantity_t & physical_quantity, + tensor_component_t (data_region_t & data_region, int variable); virtual ~ tensor_component_t (); - physical_quantity_t & - get_physical_quantity () + data_region_t & + get_data_region () const; hid_t get_variable () const; - hid_t - get_hdf5_tensor_component () - const; - void - get_link_destination (string & filename, - string & objectname) + write (void const * data, + int cactus_datatype) const; virtual bool diff --git a/CarpetDev/CarpetIOF5/src/timestep.cc b/CarpetDev/CarpetIOF5/src/timestep.cc index 73d106a92..409f47221 100644 --- a/CarpetDev/CarpetIOF5/src/timestep.cc +++ b/CarpetDev/CarpetIOF5/src/timestep.cc @@ -9,6 +9,8 @@ #include "cctk.h" #include "cctk_Functions.h" +#include "defs.hh" + #include "timestep.hh" #include "utils.hh" @@ -42,21 +44,14 @@ namespace CarpetIOF5 { { // Create a string from the time without losing information int const precision = numeric_limits<CCTK_REAL>::digits10 + 2; - buf << setprecision (precision) << "t=" << time; + buf << setprecision (precision) << "T=" << time; } m_name = buf.str(); m_hdf5_timestep = open_or_create_group (m_file.get_hdf5_file(), m_name.c_str()); assert (m_hdf5_timestep >= 0); - write_or_check_attribute (m_hdf5_timestep, "time", time); - - if (CCTK_IsFunctionAliased ("UniqueSimulationID")) { - cGH const * const cctkGH = get_file().get_cctkGH(); - char const * const job_id - = static_cast<char const *> (UniqueSimulationID (cctkGH)); - write_or_check_attribute (m_hdf5_timestep, "simulation id", job_id); - } + write_or_check_attribute (m_hdf5_timestep, "Time", time); assert (invariant()); } @@ -66,8 +61,7 @@ namespace CarpetIOF5 { timestep_t:: ~ timestep_t() { - herr_t const herr = H5Gclose (m_hdf5_timestep); - assert (not herr); + check (not H5Gclose (m_hdf5_timestep)); } @@ -100,21 +94,20 @@ namespace CarpetIOF5 { void timestep_t:: - get_link_destination (string & filename, + get_link_destination (int const proc, + string & filename, string & objectname) const { - static bool initialised = false; - static string l_filename; - static string l_objectname; - if (not initialised) + get_file().get_link_destination (proc, filename, objectname); + if (objectname.empty()) + { + objectname = m_name; + } + else { - initialised = true; - get_file().get_link_destination (l_filename, l_objectname); - l_objectname += string ("/") + m_name; + objectname += string ("/") + m_name; } - filename = l_filename; - objectname = l_objectname; } diff --git a/CarpetDev/CarpetIOF5/src/timestep.hh b/CarpetDev/CarpetIOF5/src/timestep.hh index 3a44ec29b..d70a00024 100644 --- a/CarpetDev/CarpetIOF5/src/timestep.hh +++ b/CarpetDev/CarpetIOF5/src/timestep.hh @@ -53,7 +53,8 @@ namespace CarpetIOF5 { const; void - get_link_destination (string & filename, + get_link_destination (int proc, + string & filename, string & objectname) const; diff --git a/CarpetDev/CarpetIOF5/src/topology.cc b/CarpetDev/CarpetIOF5/src/topology.cc index 401f65271..bc05c73a7 100644 --- a/CarpetDev/CarpetIOF5/src/topology.cc +++ b/CarpetDev/CarpetIOF5/src/topology.cc @@ -62,7 +62,7 @@ namespace CarpetIOF5 { unigrid_topology_t (simulation_t & simulation) : topology_t (simulation) { - char const * const name = "Vertices"; + char const * const name = "uniform"; m_name = string (name); m_hdf5_topology = open_or_create_group (m_simulation.get_hdf5_simulation(), name); @@ -94,6 +94,7 @@ namespace CarpetIOF5 { mesh_refinement_topology_t:: mesh_refinement_topology_t (simulation_t & simulation, int const map, + int const maps, int const refinement_level, int const max_refinement_levels, vect<int, dim> const & level_refinement_factor, @@ -110,7 +111,15 @@ namespace CarpetIOF5 { assert (all (level_refinement_factor <= max_refinement_factor)); ostringstream namebuf; - namebuf << "Vertices map=" << map << " level=" << refinement_level; + namebuf << "Vertices"; + if (maps > 1) + { + namebuf << "-map" << map; + } + if (max_refinement_levels > 1) + { + namebuf << "-level" << refinement_level; + } string const namestr = namebuf.str(); m_name = namestr; char const * const name = namestr.c_str(); @@ -157,21 +166,20 @@ namespace CarpetIOF5 { void topology_t:: - get_link_destination (string & filename, + get_link_destination (int const proc, + string & filename, string & objectname) const { - static bool initialised = false; - static string l_filename; - static string l_objectname; - if (not initialised) + get_simulation().get_link_destination (proc, filename, objectname); + if (objectname.empty()) + { + objectname = m_name; + } + else { - initialised = true; - get_simulation().get_link_destination (l_filename, l_objectname); - l_objectname += string ("/") + m_name; + objectname += string ("/") + m_name; } - filename = l_filename; - objectname = l_objectname; } diff --git a/CarpetDev/CarpetIOF5/src/topology.hh b/CarpetDev/CarpetIOF5/src/topology.hh index df841107b..e179e71db 100644 --- a/CarpetDev/CarpetIOF5/src/topology.hh +++ b/CarpetDev/CarpetIOF5/src/topology.hh @@ -45,7 +45,8 @@ namespace CarpetIOF5 { const; void - get_link_destination (string & filename, + get_link_destination (int proc, + string & filename, string & objectname) const; @@ -97,6 +98,7 @@ namespace CarpetIOF5 { mesh_refinement_topology_t (simulation_t & simulation, int map, + int maps, int refinement_level, int max_refinement_levels, vect<int, dim> const & level_refinement_factors, diff --git a/CarpetDev/CarpetIOF5/src/utils.cc b/CarpetDev/CarpetIOF5/src/utils.cc index b57e06a9e..d311f0992 100644 --- a/CarpetDev/CarpetIOF5/src/utils.cc +++ b/CarpetDev/CarpetIOF5/src/utils.cc @@ -1,11 +1,23 @@ #include <cassert> #include <complex> #include <cstring> +#include <sstream> #include <vector> +// force HDF5 1.8.x installations to use the new API +#define H5Acreate_vers 2 +#define H5Gcreate_vers 2 +#define H5Gopen_vers 2 +#define H5Tarray_create_vers 2 + +#include <hdf5.h> + #include "cctk.h" +#include "cctk_Parameters.h" +#include "bbox.hh" #include "defs.hh" +#include "vect.hh" #include "utils.hh" @@ -175,28 +187,96 @@ namespace CarpetIOF5 { + template <typename T, int D> + string + name_from_ivect (vect <T, D> const & ivect) + { + ostringstream buf; + for (int d = 0; d < dim; ++ d) + { + if (d > 0) + { + buf << ":"; + } + buf << ivect[d]; + } + return buf.str (); + } + + template + string + name_from_ivect (vect <int, dim> const & ivect); + + template + string + name_from_ivect (vect <CCTK_REAL, dim> const & ivect); + + + + template <typename T, int D> + string + name_from_ibbox (bbox <T, D> const & ibbox) + { + ostringstream buf; + buf << name_from_ivect (ibbox.lower ()) + << "-" + << name_from_ivect (ibbox.upper ()) + << "-" + << name_from_ivect (ibbox.stride ()); + return buf.str (); + } + + template + string + name_from_ibbox (bbox <int, dim> const & ivect); + + + hid_t open_or_create_group (hid_t const where, char const * const name) { + DECLARE_CCTK_PARAMETERS; + assert (where >= 0); assert (name != 0); + // bool group_exists; + // H5E_BEGIN_TRY { + // H5G_stat_t statbuf; + // herr_t const herr = H5Gget_objinfo (where, name, true, & statbuf); + // group_exists = herr == 0; + // } H5E_END_TRY; bool group_exists; H5E_BEGIN_TRY { - H5G_stat_t statbuf; + H5G_info_t groupinfo; herr_t const herr - = H5Gget_objinfo (where, name, true, & statbuf); + = H5Gget_info_by_name (where, name, & groupinfo, H5P_DEFAULT); group_exists = herr == 0; } H5E_END_TRY; + if (veryverbose) + { + CCTK_VInfo (CCTK_THORNSTRING, + "Group \"%s\" %s", + name, + group_exists ? "exists" : "does not exist"); + } hid_t group; if (group_exists) { + if (veryverbose) + { + CCTK_VInfo (CCTK_THORNSTRING, "H5Gopen (name=\"%s\")", name); + } group = H5Gopen (where, name, H5P_DEFAULT); } else { + if (veryverbose) + { + CCTK_VInfo (CCTK_THORNSTRING, "H5Gcreate (name=\"%s\")", name); + } group = H5Gcreate (where, name, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); } diff --git a/CarpetDev/CarpetIOF5/src/utils.hh b/CarpetDev/CarpetIOF5/src/utils.hh index ae7cb65a1..8d9d0a925 100644 --- a/CarpetDev/CarpetIOF5/src/utils.hh +++ b/CarpetDev/CarpetIOF5/src/utils.hh @@ -1,24 +1,6 @@ #ifndef UTILS_HH #define UTILS_HH -// force HDF5 1.8.x installations to use the new API -#ifdef H5Gopen_vers -#undef H5Gopen_vers -#endif -#ifdef H5Gcreate_vers -#undef H5Gcreate_vers -#endif -#ifdef H5Acreate_vers -#undef H5Acreate_vers -#endif -#ifdef H5Tarray_create_vers -#undef H5Tarray_create_vers -#endif -#define H5Gopen_vers 2 -#define H5Gcreate_vers 2 -#define H5Acreate_vers 2 -#define H5Tarray_create_vers 2 - #include <hdf5.h> #include "cctk.h" @@ -69,6 +51,16 @@ namespace CarpetIOF5 { + template <typename T, int D> + string + name_from_ivect (vect <T, D> const & ivect); + + template <typename T, int D> + string + name_from_ibbox (bbox <T, D> const & ibbox); + + + hid_t open_or_create_group (hid_t where, char const * name); diff --git a/CarpetDev/CarpetIOF5/src/writer-old.cc b/CarpetDev/CarpetIOF5/src/writer-old.cc new file mode 100644 index 000000000..4c4f639a8 --- /dev/null +++ b/CarpetDev/CarpetIOF5/src/writer-old.cc @@ -0,0 +1,511 @@ +#include <cstdlib> +#include <sstream> +#include <string> + +#include <hdf5.h> + +#include "cctk.h" +#include "cctk_Arguments.h" +#include "cctk_Parameters.h" + +#include "carpet.hh" + +#include "data_region.hh" +#include "file.hh" +#include "meta_data_region.hh" +#include "physical_quantity.hh" +#include "simulation.hh" +#include "tensor_component.hh" +#include "timestep.hh" +#include "topology.hh" +#include "writer.hh" + + + +namespace CarpetIOF5 { + + writer_t:: + writer_t (cGH const * const cctkGH, + int const variable) + : m_cctkGH (cctkGH), + m_variable (variable) + { + } + + + + void writer_t:: + write (F5::file_t & file) + const + { + write_meta (file); + } + + + + void writer_t:: + write_meta (F5::file_t & file) + const + { + DECLARE_CCTK_PARAMETERS; + + if (verbose or veryverbose) + { + CCTK_VInfo (CCTK_THORNSTRING, + "OutputVarAs/write_meta"); + } + + F5::timestep_t timestep (file, m_cctkGH->cctk_time); + + if (Carpet::is_meta_mode()) + { + for (Carpet::mglevel_iterator mglevel_iter (m_cctkGH); + not mglevel_iter.done(); + mglevel_iter.step()) + { + write_one_mglevel (timestep); + } + } + else + { + write_one_mglevel (timestep); + } + } + + + + void writer_t:: + write_one_mglevel (F5::timestep_t & timestep) + const + { + DECLARE_CCTK_PARAMETERS; + + if (verbose or veryverbose) + { + CCTK_VInfo (CCTK_THORNSTRING, + "OutputVarAs/write_one_mglevel mglevel=%d", + Carpet::mglevel); + } + + // ostringstream namebuf; + // namebuf << sim_id; + // if (m_cctkGH->cctk_convlevel != 0) + // { + // namebuf << "-convlevel" << m_cctkGH->cctk_convlevel; + // } + // string const name = namebuf.str(); + // F5::simulation_t simulation (timestep, name.c_str()); + + int const grouptype = CCTK_GroupTypeFromVarI (m_variable); + assert (grouptype >= 0); + switch (grouptype) + { + case CCTK_ARRAY: + case CCTK_SCALAR: + { + if (Carpet::is_global_mode()) + { + int const rl = 0; + enter_level_mode (m_cctkGH, rl); + write_global_reflevel (timestep); + leave_level_mode (m_cctkGH); + } + else + { + if (Carpet::do_global_mode) + { + write_global_reflevel (timestep); + } + } + } + break; + case CCTK_GF: + { + if (Carpet::is_global_mode()) + { + for (Carpet::reflevel_iterator reflevel_iter (m_cctkGH); + not reflevel_iter.done(); + reflevel_iter.step()) + { + write_one_reflevel (timestep); + } + } + else + { + write_one_reflevel (simulation); + } + } + break; + default: + assert (0); + } + } + + + + void writer_t:: + write_global_reflevel (F5::timestep_t & timestep) + const + { + DECLARE_CCTK_PARAMETERS; + + if (verbose or veryverbose) + { + CCTK_INFO ("OutputVarAs/write_global_reflevel"); + } + + if (Carpet::is_level_mode()) + { + for (Carpet::map_iterator map_iter (m_cctkGH, grouptype); + not map_iter.done(); + map_iter.step()) + { + write_global_map (timestep); + } + } + else + { + write_global_map (timestep); + } + } + + + + void writer_t:: + write_global_map (F5::timestep_t & timestep) + const + { + DECLARE_CCTK_PARAMETERS; + + if (verbose or veryverbose) + { + CCTK_INFO ("OutputVarAs/write_global_map"); + } + + write_global_component (timestep); + } + + + + void writer_t:: + write_global_component (F5::timestep_t & timestep) + const + { + DECLARE_CCTK_PARAMETERS; + + if (verbose or veryverbose) + { + CCTK_INFO ("OutputVarAs/write_global_component"); + } + + int const group = CCTK_GroupIndexFromVarI (m_variable); + assert (group >= 0 and group < CCTK_NumGroups()); + cGroup groupdata; + check (not CCTK_GropuData (group, & groupdata)); + assert (groupdata.grouptype == CCTK_SCALAR + or groupdata.grouptype == CCTK_ARRAY); + + for (Carpet::component_iterator component_iter (m_cctkGH, grouptype); + not component_iter.done(); + component_iter.step()) + + + + int const myproc = CCTK_MyProc (m_cctkGH); + if (groupdata.disttype == CCTK_DISTRIB_CONSTANT and myproc != 0) + { + // Output DISTRIB=constant groups only on the root processor + return; + } + + // Name the grid after the variable group + char * const c_name = CCTK_GroupNameFromVarI (m_variable); + string const name = c_name; + free (c_name); + F5::simulation_t simulation (timestep, name.c_str()); + + F5::unigrid_topology_t topology (simulation); + + vect<CCTK_REAL, dim> const level_origin (0.0), level_delta (1.0); + F5::Cartesian_coordinate_system_t coordinate_system + (topology, level_origin, level_delta); + + F5::physical_quantity_t physical_quantity (coordinate_system, group); + + int const map = 0; + int const reflevel = 0; + dh * const dd = Carpet::arrdata.at(group).at(map).dd; + dh::dboxes const & boxes + = dd->boxes.at(Carpet::mglevel).at(reflevel).at(myproc); + bbox<int, dim> const & region = determine_region (boxes); + + F5::file_t & file = timestep.get_file(); + bool const have_metafile + = file.get_is_metafile() and not file.get_is_datafile(); + if (have_metafile) + { + F5::meta_data_region_t meta_data_region (physical_quantity, region); + gh * const hh = Carpet::vhh.at(Carpet::map); + int const proc = hh->processor (Carpet::reflevel, Carpet::component); + meta_data_region.write (proc); + } + + F5::data_region_t data_region (physical_quantity, region); + + F5::tensor_component_t tensor_component (data_region, m_variable); + int const timelevel = 0; + void const * const varptr + = CCTK_VarDataPtrI (m_cctkGH, timelevel, m_variable); + assert (varptr != 0); + int const vartype = CCTK_VarTypeI (m_variable); + assert (vartype >= 0); + tensor_component.write (varptr, vartype); + } + + + + void writer_t:: + write_global (F5::timestep_t & timestep) + const + { + DECLARE_CCTK_PARAMETERS; + + if (verbose or veryverbose) + { + CCTK_INFO ("OutputVarAs/write_global"); + } + + int const group = CCTK_GroupIndexFromVarI (m_variable); + assert (group >= 0 and group < CCTK_NumGroups()); + cGroup groupdata; + check (not CCTK_GropuData (group, & groupdata)); + assert (groupdata.grouptype == CCTK_SCALAR + or groupdata.grouptype == CCTK_ARRAY); + + for (Carpet::component_iterator component_iter (m_cctkGH, grouptype); + not component_iter.done(); + component_iter.step()) + + + + int const myproc = CCTK_MyProc (m_cctkGH); + if (groupdata.disttype == CCTK_DISTRIB_CONSTANT and myproc != 0) + { + // Output DISTRIB=constant groups only on the root processor + return; + } + + // Name the grid after the variable group + char * const c_name = CCTK_GroupNameFromVarI (m_variable); + string const name = c_name; + free (c_name); + F5::simulation_t simulation (timestep, name.c_str()); + + F5::unigrid_topology_t topology (simulation); + + vect<CCTK_REAL, dim> const level_origin (0.0), level_delta (1.0); + F5::Cartesian_coordinate_system_t coordinate_system + (topology, level_origin, level_delta); + + F5::physical_quantity_t physical_quantity (coordinate_system, group); + + int const map = 0; + int const reflevel = 0; + dh * const dd = Carpet::arrdata.at(group).at(map).dd; + dh::dboxes const & boxes + = dd->boxes.at(Carpet::mglevel).at(reflevel).at(myproc); + bbox<int, dim> const & region = determine_region (boxes); + + F5::file_t & file = timestep.get_file(); + bool const have_metafile + = file.get_is_metafile() and not file.get_is_datafile(); + if (have_metafile) + { + F5::meta_data_region_t meta_data_region (physical_quantity, region); + gh * const hh = Carpet::vhh.at(Carpet::map); + int const proc = hh->processor (Carpet::reflevel, Carpet::component); + meta_data_region.write (proc); + } + + F5::data_region_t data_region (physical_quantity, region); + + F5::tensor_component_t tensor_component (data_region, m_variable); + int const timelevel = 0; + void const * const varptr + = CCTK_VarDataPtrI (m_cctkGH, timelevel, m_variable); + assert (varptr != 0); + int const vartype = CCTK_VarTypeI (m_variable); + assert (vartype >= 0); + tensor_component.write (varptr, vartype); + } + + + + void writer_t:: + write_one_map (F5::simulation_t & simulation) + const + { + DECLARE_CCTK_PARAMETERS; + + if (verbose or veryverbose) + { + CCTK_VInfo (CCTK_THORNSTRING, + "OutputVarAs/write_one_map map=%d", Carpet::map); + } + + F5::mesh_refinement_topology_t topology + (simulation, Carpet::map, Carpet::reflevel, Carpet::maxreflevels, + Carpet::spacereflevelfact, Carpet::maxspacereflevelfact); + + vect<CCTK_REAL, dim> level_origin, level_delta; + for (int d=0; d<dim; ++d) + { + cGH const * const cctkGH = m_cctkGH; + DECLARE_CCTK_ARGUMENTS; + level_origin[d] = CCTK_ORIGIN_SPACE(d); + level_delta[d] = CCTK_DELTA_SPACE(d); + } + F5::Cartesian_coordinate_system_t coordinate_system + (topology, level_origin, level_delta); + + int const group = CCTK_GroupIndexFromVarI (m_variable); + assert (group >= 0 and group < CCTK_NumGroups()); + F5::physical_quantity_t physical_quantity (coordinate_system, group); + + if (Carpet::is_singlemap_mode()) + { + int const grouptype = CCTK_GroupTypeI (group); + assert (grouptype >= 0); + + for (Carpet::component_iterator component_iter (m_cctkGH, grouptype); + not component_iter.done(); + component_iter.step()) + { + write_one_component (physical_quantity); + } + } + else + { + write_one_component (physical_quantity); + } + } + + + + void writer_t:: + write_one_reflevel (F5::simulation_t & simulation) + const + { + DECLARE_CCTK_PARAMETERS; + + if (verbose or veryverbose) + { + CCTK_VInfo (CCTK_THORNSTRING, + "OutputVarAs/write_one_reflevel reflevel=%d", + Carpet::reflevel); + } + + int const grouptype = CCTK_GroupTypeFromVarI (m_variable); + assert (grouptype >= 0); + assert (grouptype == CCTK_GF); + + if (Carpet::is_level_mode()) + { + for (Carpet::map_iterator map_iter (m_cctkGH, grouptype); + not map_iter.done(); + map_iter.step()) + { + write_one_map (simulation); + } + } + else + { + write_one_map (simulation); + } + } + + + + void writer_t:: + write_one_component (F5::physical_quantity_t & physical_quantity) + const + { + DECLARE_CCTK_PARAMETERS; + + if (verbose or veryverbose) + { + CCTK_VInfo (CCTK_THORNSTRING, + "OutputVarAs/write_one_component component=%d", + Carpet::component); + } + + F5::file_t & file + = (physical_quantity.get_coordinate_system().get_topology() + .get_simulation().get_timestep().get_file()); + bool const have_metafile + = file.get_is_metafile() and not file.get_is_datafile(); + gh * const hh = Carpet::vhh.at(Carpet::map); + bool const is_local = hh->is_local (Carpet::reflevel, Carpet::component); + if (have_metafile or is_local) + { + dh * const dd = Carpet::vdd.at(Carpet::map); + bbox<int, dim> const & region + = (dd->boxes.at(Carpet::mglevel).at(Carpet::reflevel) + .at(Carpet::component).exterior); + + if (have_metafile) + { + F5::meta_data_region_t meta_data_region (physical_quantity, region); + int const proc = hh->processor (Carpet::reflevel, Carpet::component); + meta_data_region.write (proc); + } + + if (is_local) + { + F5::data_region_t data_region (physical_quantity, region); + + F5::tensor_component_t tensor_component (data_region, m_variable); + int const timelevel = 0; + void const * const varptr + = CCTK_VarDataPtrI (m_cctkGH, timelevel, m_variable); + assert (varptr != 0); + int const vartype = CCTK_VarTypeI (m_variable); + assert (vartype >= 0); + tensor_component.write (varptr, vartype); + } + } + } + + + + bbox<int,dim> const & writer_t:: + determine_region (dh::dboxes const & boxes) + const + { + DECLARE_CCTK_PARAMETERS; + + // TODO: use superregions instead of regions (? only if the + // regions are on the same processor?) + + bbox<int,dim> dh::dboxes::* boxptr; + if (CCTK_EQUALS (output_regions, "exterior")) + { + boxptr = & dh::dboxes::exterior; + } + else if (CCTK_EQUALS (output_regions, "owned")) + { + boxptr = & dh::dboxes::owned; + } + else if (CCTK_EQUALS (output_regions, "interior")) + { + boxptr = & dh::dboxes::interior; + } + else + { + assert (0); + } + + return boxes.*boxptr; + } + +} // namespace CarpetIOF5 diff --git a/CarpetDev/CarpetIOF5/src/writer.cc b/CarpetDev/CarpetIOF5/src/writer.cc index df1949369..cf00271a0 100644 --- a/CarpetDev/CarpetIOF5/src/writer.cc +++ b/CarpetDev/CarpetIOF5/src/writer.cc @@ -1,22 +1,29 @@ +#include <cstdlib> #include <sstream> +#include <string> + +#include <hdf5.h> #include "cctk.h" #include "cctk_Arguments.h" #include "cctk_Parameters.h" #include "carpet.hh" +#include "modes.hh" #include "data_region.hh" #include "file.hh" #include "meta_data_region.hh" +#include "physical_quantity.hh" #include "simulation.hh" #include "tensor_component.hh" #include "timestep.hh" #include "topology.hh" +#include "utils.hh" #include "writer.hh" - + namespace CarpetIOF5 { writer_t:: @@ -33,20 +40,18 @@ namespace CarpetIOF5 { write (F5::file_t & file) const { - write_meta (file, file.get_have_metafile()); + write_meta (file); } void writer_t:: - write_meta (F5::file_t & file, - bool const have_metafile) + write_meta (F5::file_t & file) const { DECLARE_CCTK_PARAMETERS; - if (verbose or veryverbose) - { + if (verbose or veryverbose) { CCTK_VInfo (CCTK_THORNSTRING, "OutputVarAs/write_meta"); } @@ -55,24 +60,22 @@ namespace CarpetIOF5 { if (Carpet::is_meta_mode()) { - for (Carpet::mglevel_iterator mglevel_iter (m_cctkGH); - not mglevel_iter.done(); - mglevel_iter.step()) + BEGIN_MGLEVEL_LOOP (m_cctkGH) { - write_one_mglevel (timestep, have_metafile); + write_one_mglevel (timestep); } + END_MGLEVEL_LOOP; } else { - write_one_mglevel (timestep, have_metafile); + write_one_mglevel (timestep); } } void writer_t:: - write_one_mglevel (F5::timestep_t & timestep, - bool const have_metafile) + write_one_mglevel (F5::timestep_t & timestep) const { DECLARE_CCTK_PARAMETERS; @@ -84,12 +87,6 @@ namespace CarpetIOF5 { Carpet::mglevel); } - ostringstream namebuf; - namebuf << "convlevel=" << m_cctkGH->cctk_convlevel; - string const namestr = namebuf.str(); - char const * const name = namestr.c_str(); - F5::simulation_t simulation (timestep, name); - int const grouptype = CCTK_GroupTypeFromVarI (m_variable); assert (grouptype >= 0); switch (grouptype) @@ -97,9 +94,20 @@ namespace CarpetIOF5 { case CCTK_ARRAY: case CCTK_SCALAR: { - if (Carpet::do_global_mode) + if (Carpet::is_global_mode()) { - write_global (simulation, have_metafile); + ENTER_LEVEL_MODE (m_cctkGH, 0) + { + write_global (timestep); + } + LEAVE_LEVEL_MODE; + } + else + { + if (Carpet::do_global_mode) + { + write_global (timestep); + } } } break; @@ -107,16 +115,15 @@ namespace CarpetIOF5 { { if (Carpet::is_global_mode()) { - for (Carpet::reflevel_iterator reflevel_iter (m_cctkGH); - not reflevel_iter.done(); - reflevel_iter.step()) + BEGIN_REFLEVEL_LOOP (m_cctkGH) { - write_one_reflevel (simulation, have_metafile); + write_one_reflevel (timestep); } + END_REFLEVEL_LOOP; } else { - write_one_reflevel (simulation, have_metafile); + write_one_reflevel (timestep); } } break; @@ -128,69 +135,96 @@ namespace CarpetIOF5 { void writer_t:: - write_global (F5::simulation_t & simulation, - bool const have_metafile) + write_global (F5::timestep_t & timestep) const { DECLARE_CCTK_PARAMETERS; if (verbose or veryverbose) { - CCTK_INFO ("OutputVarAs/write_global"); + CCTK_VInfo (CCTK_THORNSTRING, + "OutputVarAs/write_global"); } - F5::unigrid_topology_t topology (simulation); - int const grouptype = CCTK_GroupTypeFromVarI (m_variable); - assert (grouptype >= 0); assert (grouptype == CCTK_SCALAR or grouptype == CCTK_ARRAY); - vect<CCTK_REAL, dim> level_origin, level_delta; - for (int d=0; d<dim; ++d) - { - level_origin[d] = 0.0; - level_delta[d] = 1.0; - } - F5::Cartesian_coordinate_system_t coordinate_system - (topology, level_origin, level_delta); - - int const group = CCTK_GroupIndexFromVarI (m_variable); - assert (group >= 0 and group < CCTK_NumGroups()); - F5::physical_quantity_t physical_quantity (coordinate_system, group); - - F5::tensor_component_t tensor_component (physical_quantity, m_variable); - - int const map = 0; - int const reflevel = 0; - int const myproc = CCTK_MyProc (m_cctkGH); - dh * const dd = Carpet::arrdata.at(group).at(map).dd; - dh::dboxes const & boxes - = dd->boxes.at(Carpet::mglevel).at(reflevel).at(myproc); - bbox<int, dim> const & region = determine_region (boxes); - - if (have_metafile) + BEGIN_MAP_LOOP (m_cctkGH, grouptype) { - F5::meta_data_region_t meta_data_region (tensor_component, region); - gh * const hh = Carpet::vhh.at(Carpet::map); - int const proc = hh->processor (Carpet::reflevel, Carpet::component); - meta_data_region.write (proc); + + // Name the grid after the variable group + ostringstream namebuf; + char * const c_name = CCTK_GroupNameFromVarI (m_variable); + namebuf << "Cactus-" << c_name; + free (c_name); + string const name = namebuf.str(); + F5::simulation_t simulation (timestep, name.c_str()); + + F5::unigrid_topology_t topology (simulation); + + vect<CCTK_REAL, dim> const level_origin (0.0), level_delta (1.0); + F5::Cartesian_coordinate_system_t coordinate_system + (topology, level_origin, level_delta); + + int const group = CCTK_GroupIndexFromVarI (m_variable); + assert (group >= 0 and group < CCTK_NumGroups()); + F5::physical_quantity_t physical_quantity (coordinate_system, group); + + int const myproc = CCTK_MyProc (m_cctkGH); + + F5::file_t & file = timestep.get_file(); + bool const write_metafile + = file.get_is_metafile() and not file.get_is_datafile(); + if (write_metafile) + { + + BEGIN_COMPONENT_LOOP (m_cctkGH, grouptype) + { + dh * const dd = Carpet::arrdata.at(group).at(Carpet::map).dd; + dh::dboxes const & boxes + = dd->boxes.at(Carpet::mglevel).at(Carpet::reflevel).at(myproc); + bbox<int, dim> const & region = determine_region (boxes); + F5::meta_data_region_t meta_data_region (physical_quantity, region); + + gh * const hh = Carpet::vhh.at(Carpet::map); + int const proc = hh->processor (Carpet::reflevel, Carpet::component); + meta_data_region.write (proc); + } + END_COMPONENT_LOOP; + + } + else // if not write_metafile + { + + BEGIN_LOCAL_COMPONENT_LOOP (m_cctkGH, grouptype) + { + dh * const dd = Carpet::arrdata.at(group).at(Carpet::map).dd; + dh::dboxes const & boxes + = dd->boxes.at(Carpet::mglevel).at(Carpet::reflevel).at(myproc); + bbox<int, dim> const & region = determine_region (boxes); + F5::data_region_t data_region (physical_quantity, region); + + F5::tensor_component_t tensor_component (data_region, m_variable); + int const timelevel = 0; + void const * const varptr + = CCTK_VarDataPtrI (m_cctkGH, timelevel, m_variable); + assert (varptr != 0); + int const vartype = CCTK_VarTypeI (m_variable); + assert (vartype >= 0); + tensor_component.write (varptr, vartype); + } + END_LOCAL_COMPONENT_LOOP; + + } // if not write_metafile + } - - F5::data_region_t data_region (tensor_component, region); - int const timelevel = 0; - void const * const varptr - = CCTK_VarDataPtrI (m_cctkGH, timelevel, m_variable); - assert (varptr != 0); - int const vartype = CCTK_VarTypeI (m_variable); - assert (vartype >= 0); - data_region.write (varptr, vartype); + END_MAP_LOOP; } void writer_t:: - write_one_reflevel (F5::simulation_t & simulation, - bool const have_metafile) + write_one_reflevel (F5::timestep_t & timestep) const { DECLARE_CCTK_PARAMETERS; @@ -203,29 +237,26 @@ namespace CarpetIOF5 { } int const grouptype = CCTK_GroupTypeFromVarI (m_variable); - assert (grouptype >= 0); assert (grouptype == CCTK_GF); if (Carpet::is_level_mode()) { - for (Carpet::map_iterator map_iter (m_cctkGH, grouptype); - not map_iter.done(); - map_iter.step()) + BEGIN_MAP_LOOP (m_cctkGH, grouptype) { - write_one_map (simulation, have_metafile); + write_one_map (timestep); } + END_MAP_LOOP; } else { - write_one_map (simulation, have_metafile); + write_one_map (timestep); } } void writer_t:: - write_one_map (F5::simulation_t & simulation, - bool const have_metafile) + write_one_map (F5::timestep_t & timestep) const { DECLARE_CCTK_PARAMETERS; @@ -236,8 +267,19 @@ namespace CarpetIOF5 { "OutputVarAs/write_one_map map=%d", Carpet::map); } + // Name the grid after the map number + ostringstream namebuf; + namebuf << "Carpet"; + if (Carpet::maps > 1) + { + namebuf << "-map" << Carpet::map; + } + string const name = namebuf.str(); + F5::simulation_t simulation (timestep, name.c_str()); + F5::mesh_refinement_topology_t topology - (simulation, Carpet::map, Carpet::reflevel, Carpet::maxreflevels, + (simulation, + Carpet::map, Carpet::maps, Carpet::reflevel, Carpet::maxreflevels, Carpet::spacereflevelfact, Carpet::maxspacereflevelfact); vect<CCTK_REAL, dim> level_origin, level_delta; @@ -255,31 +297,27 @@ namespace CarpetIOF5 { assert (group >= 0 and group < CCTK_NumGroups()); F5::physical_quantity_t physical_quantity (coordinate_system, group); - F5::tensor_component_t tensor_component (physical_quantity, m_variable); - if (Carpet::is_singlemap_mode()) { int const grouptype = CCTK_GroupTypeI (group); assert (grouptype >= 0); - for (Carpet::component_iterator component_iter (m_cctkGH, grouptype); - not component_iter.done(); - component_iter.step()) + BEGIN_COMPONENT_LOOP (m_cctkGH, grouptype) { - write_one_component (tensor_component, have_metafile); + write_one_component (physical_quantity); } + END_COMPONENT_LOOP; } else { - write_one_component (tensor_component, have_metafile); + write_one_component (physical_quantity); } } void writer_t:: - write_one_component (F5::tensor_component_t & tensor_component, - bool const have_metafile) + write_one_component (F5::physical_quantity_t & physical_quantity) const { DECLARE_CCTK_PARAMETERS; @@ -293,30 +331,37 @@ namespace CarpetIOF5 { gh * const hh = Carpet::vhh.at(Carpet::map); bool const is_local = hh->is_local (Carpet::reflevel, Carpet::component); - if (have_metafile or is_local) + + F5::file_t & file + = (physical_quantity.get_coordinate_system().get_topology() + .get_simulation().get_timestep().get_file()); + bool const write_metafile + = file.get_is_metafile() and not file.get_is_datafile(); + if (write_metafile or is_local) { dh * const dd = Carpet::vdd.at(Carpet::map); bbox<int, dim> const & region = (dd->boxes.at(Carpet::mglevel).at(Carpet::reflevel) .at(Carpet::component).exterior); - if (have_metafile) + if (write_metafile) { - F5::meta_data_region_t meta_data_region (tensor_component, region); + F5::meta_data_region_t meta_data_region (physical_quantity, region); int const proc = hh->processor (Carpet::reflevel, Carpet::component); meta_data_region.write (proc); } - - if (is_local) + else if (is_local) { - F5::data_region_t data_region (tensor_component, region); + F5::data_region_t data_region (physical_quantity, region); + + F5::tensor_component_t tensor_component (data_region, m_variable); int const timelevel = 0; void const * const varptr = CCTK_VarDataPtrI (m_cctkGH, timelevel, m_variable); assert (varptr != 0); int const vartype = CCTK_VarTypeI (m_variable); assert (vartype >= 0); - data_region.write (varptr, vartype); + tensor_component.write (varptr, vartype); } } } @@ -325,19 +370,17 @@ namespace CarpetIOF5 { bbox<int,dim> const & writer_t:: determine_region (dh::dboxes const & boxes) - const { DECLARE_CCTK_PARAMETERS; + // TODO: use superregions instead of regions (? only if the + // regions are on the same processor?) + bbox<int,dim> dh::dboxes::* boxptr; if (CCTK_EQUALS (output_regions, "exterior")) { boxptr = & dh::dboxes::exterior; } - else if (CCTK_EQUALS (output_regions, "communicated")) - { - boxptr = & dh::dboxes::communicated; - } else if (CCTK_EQUALS (output_regions, "owned")) { boxptr = & dh::dboxes::owned; diff --git a/CarpetDev/CarpetIOF5/src/writer.hh b/CarpetDev/CarpetIOF5/src/writer.hh index 94b31d3cd..77bad3915 100644 --- a/CarpetDev/CarpetIOF5/src/writer.hh +++ b/CarpetDev/CarpetIOF5/src/writer.hh @@ -6,10 +6,11 @@ #include "bbox.hh" #include "defs.hh" #include "dh.hh" +#include "vect.hh" #include "file.hh" +#include "physical_quantity.hh" #include "simulation.hh" -#include "tensor_component.hh" #include "timestep.hh" #include "topology.hh" @@ -34,38 +35,33 @@ namespace CarpetIOF5 { private: void - write_meta (F5::file_t & file, - bool have_metafile) + write_meta (F5::file_t & file) const; void - write_one_mglevel (F5::timestep_t & timestep, - bool have_metafile) + write_one_mglevel (F5::timestep_t & timestep) const; void - write_global (F5::simulation_t & simulation, - bool have_metafile) + write_global (F5::timestep_t & timestep) const; void - write_one_reflevel (F5::simulation_t & simulation, - bool have_metafile) + write_one_reflevel (F5::timestep_t & timestep) const; void - write_one_map (F5::simulation_t & simulation, - bool have_metafile) + write_one_map (F5::timestep_t & timestep) const; void - write_one_component (F5::tensor_component_t & tensor_component, - bool have_metafile) + write_one_component (F5::physical_quantity_t & physical_quantity) const; - bbox<int,dim> const & - determine_region (dh::dboxes const & boxes) - const; + + + static bbox<int,dim> const & + determine_region (dh::dboxes const & boxes); }; diff --git a/CarpetExtra/ReductionTest3/README b/CarpetExtra/ReductionTest3/README new file mode 100644 index 000000000..e7b1e569c --- /dev/null +++ b/CarpetExtra/ReductionTest3/README @@ -0,0 +1,9 @@ +CVS info : $Header:$ + +Cactus Code Thorn ReductionTest +Thorn Author(s) : Christian D. Ott <cott@aei.mpg.de> +Thorn Maintainer(s) : Christian D. Ott <cott@aei.mpg.de> +-------------------------------------------------------------------------- + +Purpose of the thorn: + diff --git a/CarpetExtra/ReductionTest3/doc/documentation.tex b/CarpetExtra/ReductionTest3/doc/documentation.tex new file mode 100644 index 000000000..2a85f9ff3 --- /dev/null +++ b/CarpetExtra/ReductionTest3/doc/documentation.tex @@ -0,0 +1,144 @@ +% *======================================================================* +% Cactus Thorn template for ThornGuide documentation +% Author: Ian Kelley +% Date: Sun Jun 02, 2002 +% $Header: /cactusdevcvs/Cactus/doc/ThornGuide/template.tex,v 1.12 2004/01/07 20:12:39 rideout Exp $ +% +% Thorn documentation in the latex file doc/documentation.tex +% will be included in ThornGuides built with the Cactus make system. +% The scripts employed by the make system automatically include +% pages about variables, parameters and scheduling parsed from the +% relevant thorn CCL files. +% +% This template contains guidelines which help to assure that your +% documentation will be correctly added to ThornGuides. More +% information is available in the Cactus UsersGuide. +% +% Guidelines: +% - Do not change anything before the line +% % START CACTUS THORNGUIDE", +% except for filling in the title, author, date, etc. fields. +% - Each of these fields should only be on ONE line. +% - Author names should be separated with a \\ or a comma. +% - You can define your own macros, but they must appear after +% the START CACTUS THORNGUIDE line, and must not redefine standard +% latex commands. +% - To avoid name clashes with other thorns, 'labels', 'citations', +% 'references', and 'image' names should conform to the following +% convention: +% ARRANGEMENT_THORN_LABEL +% For example, an image wave.eps in the arrangement CactusWave and +% thorn WaveToyC should be renamed to CactusWave_WaveToyC_wave.eps +% - Graphics should only be included using the graphicx package. +% More specifically, with the "\includegraphics" command. Do +% not specify any graphic file extensions in your .tex file. This +% will allow us to create a PDF version of the ThornGuide +% via pdflatex. +% - References should be included with the latex "\bibitem" command. +% - Use \begin{abstract}...\end{abstract} instead of \abstract{...} +% - Do not use \appendix, instead include any appendices you need as +% standard sections. +% - For the benefit of our Perl scripts, and for future extensions, +% please use simple latex. +% +% *======================================================================* +% +% Example of including a graphic image: +% \begin{figure}[ht] +% \begin{center} +% \includegraphics[width=6cm]{MyArrangement_MyThorn_MyFigure} +% \end{center} +% \caption{Illustration of this and that} +% \label{MyArrangement_MyThorn_MyLabel} +% \end{figure} +% +% Example of using a label: +% \label{MyArrangement_MyThorn_MyLabel} +% +% Example of a citation: +% \cite{MyArrangement_MyThorn_Author99} +% +% Example of including a reference +% \bibitem{MyArrangement_MyThorn_Author99} +% {J. Author, {\em The Title of the Book, Journal, or periodical}, 1 (1999), +% 1--16. {\tt http://www.nowhere.com/}} +% +% *======================================================================* + +% If you are using CVS use this line to give version information +% $Header: /cactusdevcvs/Cactus/doc/ThornGuide/template.tex,v 1.12 2004/01/07 20:12:39 rideout Exp $ + +\documentclass{article} + +% Use the Cactus ThornGuide style file +% (Automatically used from Cactus distribution, if you have a +% thorn without the Cactus Flesh download this from the Cactus +% homepage at www.cactuscode.org) +\usepackage{../../../../doc/latex/cactus} + +\begin{document} + +% The author of the documentation +\author{Christian D. Ott \textless cott@aei.mpg.de\textgreater} + +% The title of the document (not necessarily the name of the Thorn) +\title{ReductionTest} + +% the date your document was last changed, if your document is in CVS, +% please use: +% \date{$ $Date: 2004/01/07 20:12:39 $ $} +\date{April 18 2006} + +\maketitle + +% Do not delete next line +% START CACTUS THORNGUIDE + +% Add all definitions used in this documentation here +% \def\mydef etc + +% Add an abstract for this thorn's documentation +\begin{abstract} + +\end{abstract} + +% The following sections are suggestive only. +% Remove them or add your own. + +\section{Introduction} + +\section{Physical System} + +\section{Numerical Implementation} + +\section{Using This Thorn} + +\subsection{Obtaining This Thorn} + +\subsection{Basic Usage} + +\subsection{Special Behaviour} + +\subsection{Interaction With Other Thorns} + +\subsection{Examples} + +\subsection{Support and Feedback} + +\section{History} + +\subsection{Thorn Source Code} + +\subsection{Thorn Documentation} + +\subsection{Acknowledgements} + + +\begin{thebibliography}{9} + +\end{thebibliography} + +% Do not delete next line +% END CACTUS THORNGUIDE + +\end{document} diff --git a/CarpetExtra/ReductionTest3/interface.ccl b/CarpetExtra/ReductionTest3/interface.ccl new file mode 100644 index 000000000..46ce46253 --- /dev/null +++ b/CarpetExtra/ReductionTest3/interface.ccl @@ -0,0 +1,20 @@ +# Interface definition for thorn ReductionTest +# $Header:$ + +implements: ReductionTest3 +inherits: grid + +CCTK_REAL myredvar TYPE=GF TIMELEVELS=3 tags='ProlongationParameter="Whisky::Whisky_Prolongation_Type" tensortypealias="Scalar" tensorweight=+1.0 interpolator="matter"' + +CCTK_REAL center_of_mass_helpers TYPE=GF TIMELEVELS=3 tags='prolongation="none"' +{ + + dMx,dMy,dMz +} + +CCTK_REAL center_of_mass TYPE=SCALAR +{ + + Mx,My,Mz,Mr +} + diff --git a/CarpetExtra/ReductionTest3/par/reductiontest.par b/CarpetExtra/ReductionTest3/par/reductiontest.par new file mode 100644 index 000000000..4b3eb6155 --- /dev/null +++ b/CarpetExtra/ReductionTest3/par/reductiontest.par @@ -0,0 +1,186 @@ +#--- Base and Driver Thorns + +ActiveThorns = "time + coordbase + mol + boundary + spacemask + symbase + aeilocalinterp + nanchecker + constants + ioutil + initbase + carpet + carpetlib + carpetregrid2 + carpetreduce + carpetinterp + loopcontrol + cartgrid3d + carpetslab + triggerterminationmanual + RotatingSymmetry90 + ReflectionSymmetry + Slab + " + +#--- Output related thorns + +ActiveThorns = " carpetioascii + carpetioscalar + carpetiohdf5 + carpetiobasic + " + +#--- Spacetime :-) + + +ActiveThorns = " + ReductionTest3 + " + +############################# Flesh Stuff ################################## +Cactus::cctk_run_title = "Reduction Test" +Cactus::cctk_full_warnings = yes +Cactus::highlight_warning_messages = no +#Cactus::cctk_timer_output = "full" +Cactus::cctk_itlast = 64 + +############################# Output Related ################################## +IO::out_dir = $par +IO::checkpoint_dir = $par +IO::recover_dir = $par +iohdf5::out_dir = $par +IO::out_single_precision = yes + +#--- checkpoint recovery +io::recover = no +iohdf5::checkpoint = no +io::checkpoint_every = 32 +io::checkpoint_keep = 3 +carpetiohdf5::use_reflevels_from_checkpoint = "yes" + +IOBasic::outInfo_vars = "Carpet::average_physical_time_per_hour" + +carpetioscalar::outScalar_vars = " + " +carpetioascii::out0D_vars = " + " + + +carpetioascii::out1D_vars = " + " + +iohdf5::out_vars = " + " + +#--- output frequency + +iohdf5::out_criterion = "divisor" +carpetioascii::out1D_criterion = "divisor" +carpetioascii::out2D_criterion = "divisor" + +carpetioascii::out0D_criterion = "divisor" +carpetioscalar::outScalar_criterion = "divisor" + +#carpetioscalar::outScalar_dt = 0.203 +#carpetioscalar::out0D_dt = 0.203 +#IOASCII::out1D_dt = +#IOASCII::out2D_dt = -1 + +carpetioscalar::outScalar_every = 32 +carpetioascii::out0D_every = 32 +carpetioascii::out1D_every = 256 +carpetioascii::out2D_every = -1 +iohdf5::out_every = -1 + +carpetiobasic::outInfo_every = 1 +carpetiobasic::real_min = 1.0e-2 + +IOASCII::one_file_per_group = yes +IOASCII::output_symmetry_points = no +IOASCII::out1D_d = no +############################# Driver ################################## +# Carpet Parameters +Carpet::domain_from_coordbase = yes +Carpet::max_refinement_levels = 2 + +driver::ghost_size = 3 +Carpet::use_buffer_zones = yes + +Carpet::prolongation_order_space = 3 +Carpet::prolongation_order_time = 2 + +Carpet::init_fill_timelevels = yes + +Carpet::verbose = no +Carpet::veryverbose = no + +Carpet::output_timers_every = 4096 +CarpetLib::print_timestats_every = 4096 +CarpetLib::print_memstats_every = 4096 + +############################# Grid ################################## + +CoordBase::domainsize = "minmax" +CoordBase::xmin = 0.0 +CoordBase::ymin = 0.0 +CoordBase::zmin = 0.0 +CoordBase::xmax = 40.0 +CoordBase::ymax = 40.0 +CoordBase::zmax = 40.0 + +CoordBase::spacing = "gridspacing" +CoordBase::dx = 1.0 +CoordBase::dy = 1.0 +CoordBase::dz = 1.0 + +CartGrid3D::type = "coordbase" +CartGrid3D::domain = "full" +CartGrid3D::avoid_originx = no +CartGrid3D::avoid_originy = no +CartGrid3D::avoid_originz = no + +CoordBase::boundary_size_x_lower = 3 +CoordBase::boundary_size_y_lower = 3 +CoordBase::boundary_size_z_lower = 3 +CoordBase::boundary_shiftout_x_lower = 1 +CoordBase::boundary_shiftout_y_lower = 1 +CoordBase::boundary_shiftout_z_lower = 1 + +ReflectionSymmetry::reflection_z = yes +ReflectionSymmetry::avoid_origin_z = no + +#CoordBase::boundary_size_x_upper = 3 +#CoordBase::boundary_size_y_upper = 3 +#CoordBase::boundary_size_z_upper = 3 + +CarpetRegrid2::min_distance = 0 +CarpetRegrid2::boundary_shiftout = -10 +CarpetRegrid2::ensure_proper_nesting = yes + +CarpetRegrid2::num_centres = 1 +CarpetRegrid2::num_levels_1 = 1 +CarpetRegrid2::position_x_1 = 0 +CarpetRegrid2::position_y_1 = 0 +CarpetRegrid2::position_z_1 = 0 +CarpetRegrid2::radius_1[1] = 20.0 # 1.6 +#CarpetRegrid2::radius_1[2] = 40.0 # 0.8 +#CarpetRegrid2::radius_1[3] = 20.0 # 0.4 +#CarpetRegrid2::radius_1[4] = 12.0 # 0.2 + +CarpetRegrid2::regrid_every = 16 +CarpetRegrid2::movement_threshold_1 = 0.0e0 +CarpetRegrid2::radius_change_threshold_1 = 0.0e0 + +############################# Time Integration ################################## +# Time integration parameters +MoL::ODE_Method = "RK3" +MoL::Generic_Type = "RK" +MoL::MoL_Intermediate_Steps = 3 +MoL::MoL_Num_Scratch_Levels = 2 + +Time::dtfac = 0.25 + +############################ Analysis ############################### diff --git a/CarpetExtra/ReductionTest3/param.ccl b/CarpetExtra/ReductionTest3/param.ccl new file mode 100644 index 000000000..160649261 --- /dev/null +++ b/CarpetExtra/ReductionTest3/param.ccl @@ -0,0 +1,11 @@ +# Parameter definitions for thorn ReductionTest +# $Header:$ + +shares: grid + +USES KEYWORD domain + + + + + diff --git a/CarpetExtra/ReductionTest3/schedule.ccl b/CarpetExtra/ReductionTest3/schedule.ccl new file mode 100644 index 000000000..92a70fce8 --- /dev/null +++ b/CarpetExtra/ReductionTest3/schedule.ccl @@ -0,0 +1,49 @@ +# Schedule definitions for thorn ReductionTest +# $Header:$ + +STORAGE: center_of_mass center_of_mass_helpers[3] myredvar[3] + +SCHEDULE CoM3_Local AT CCTK_INITIAL AFTER Whisky_Initial +{ + + LANG: C + SYNC: center_of_mass_helpers +} "Setup integrands for CoM calculation" + +SCHEDULE CoM3_Local AT CCTK_EVOL AFTER MoL_Evolution +{ + + LANG: C + SYNC: center_of_mass_helpers +} "Setup integrands for CoM calculation" + +SCHEDULE CoM3_Local AT Postregridinitial +{ + + LANG: C + SYNC: center_of_mass_helpers +} "Setup integrands for CoM calculation" + +SCHEDULE CoM3_Local AT Postregrid +{ + + LANG: C + SYNC: center_of_mass_helpers +} "Setup integrands for CoM calculation" + + + +SCHEDULE CoM3 AT CCTK_ANALYSIS +{ + + LANG: C + OPTIONS: GLOBAL +} "CoM Reductions" + + +#SCHEDULE CoM3 AT Postregrid AFTER CoM3_Local +#{ +# +# LANG: C +# OPTIONS: GLOBAL +#} "CoM Reductions" diff --git a/CarpetExtra/ReductionTest3/src/CoM.c b/CarpetExtra/ReductionTest3/src/CoM.c new file mode 100644 index 000000000..2347e3e9a --- /dev/null +++ b/CarpetExtra/ReductionTest3/src/CoM.c @@ -0,0 +1,99 @@ +#include "cctk.h" +#include "cctk_Parameters.h" +#include "cctk_Arguments.h" +#include "util_Table.h" +#include <assert.h> +#include <math.h> + +void CoM3_Local(CCTK_ARGUMENTS) +{ + DECLARE_CCTK_ARGUMENTS; + DECLARE_CCTK_PARAMETERS; + + int i,j,k,index; + + int nx = cctk_lsh[0]; + int ny = cctk_lsh[1]; + int nz = cctk_lsh[2]; + + for (k=0;k<nz;k++) + for (j=0;j<ny;j++) + for (i=0;i<nx;i++) { + + index = CCTK_GFINDEX3D(cctkGH,i,j,k); + + dMx[index] = myredvar[index]*x[index]; + dMy[index] = myredvar[index]*y[index]; + dMz[index] = myredvar[index]*z[index]; + + } +} + + +void CoM3(CCTK_ARGUMENTS) +{ + DECLARE_CCTK_ARGUMENTS; + DECLARE_CCTK_PARAMETERS; + + + int varindex = -1; + int ierr = 0; + int cf = 1.0; + int reduction_handle; + int vartype; + + CCTK_REAL d3x,tiny,denstotal; + + CCTK_REAL sym_factor1,sym_factor2,sym_factor3; + + if (CCTK_EQUALS(domain,"bitant")){ + sym_factor1 = 2.0e0; + sym_factor2 = 2.0e0; + sym_factor3 = 0.0e0; + } else if (CCTK_EQUALS(domain,"octant")){ + sym_factor1 = 8.0e0; + sym_factor2 = 0.0e0; + sym_factor3 = 0.0e0; + } else { + sym_factor1 = 1.0e0; + sym_factor2 = 1.0e0; + sym_factor3 = 1.0e0; + } + + + reduction_handle = CCTK_ReductionHandle("sum"); + + + varindex = CCTK_VarIndex("ReductionTest3::myredvar"); + assert(varindex>=0); + ierr = CCTK_Reduce(cctkGH, -1, reduction_handle, + 1, CCTK_VARIABLE_REAL, (void *)&denstotal, 1, varindex); + assert(!ierr); + + varindex = CCTK_VarIndex("ReductionTest3::dMx"); + assert(varindex>=0); + ierr = CCTK_Reduce(cctkGH, -1, reduction_handle, + 1, CCTK_VARIABLE_REAL, (void *)Mx, 1, varindex); + assert(!ierr); + + varindex = CCTK_VarIndex("ReductionTest3::dMy"); + assert(varindex>=0); + ierr = CCTK_Reduce(cctkGH, -1, reduction_handle, + 1, CCTK_VARIABLE_REAL, (void *)My, 1, varindex); + assert(!ierr); + + varindex = CCTK_VarIndex("ReductionTest3::dMz"); + assert(varindex>=0); + ierr = CCTK_Reduce(cctkGH, -1, reduction_handle, + 1, CCTK_VARIABLE_REAL, (void *)Mz, 1, varindex); + assert(!ierr); + + denstotal = sym_factor1*denstotal; + *Mx = sym_factor2*(*Mx)/(denstotal); + *My = sym_factor2*(*My)/(denstotal); + *Mz = sym_factor3*(*Mz)/(denstotal); + *Mr = sqrt( (*Mx)*(*Mx)+(*My)*(*My)+(*Mz)*(*Mz) ); + + CCTK_VInfo(CCTK_THORNSTRING,"Mr: %15.6E Mx: %15.6E My: %15.6E Mz %15.6E",*Mr,*Mx,*My,*Mz); +} + diff --git a/CarpetExtra/ReductionTest3/src/make.code.defn b/CarpetExtra/ReductionTest3/src/make.code.defn new file mode 100644 index 000000000..6f1f90aa2 --- /dev/null +++ b/CarpetExtra/ReductionTest3/src/make.code.defn @@ -0,0 +1,8 @@ +# Main make.code.defn file for thorn ReductionTest +# $Header:$ + +# Source files in this directory +SRCS = CoM.c + +# Subdirectories containing source files +SUBDIRS = diff --git a/CarpetExtra/ReductionTest3/test/reductiontest.par b/CarpetExtra/ReductionTest3/test/reductiontest.par new file mode 100644 index 000000000..85a483338 --- /dev/null +++ b/CarpetExtra/ReductionTest3/test/reductiontest.par @@ -0,0 +1,210 @@ + +#--- Base and Driver Thorns + +ActiveThorns = " time + carpet + carpetlib + carpetregrid + carpetreduce + carpetslab + cartgrid3d + coordbase + mol + boundary + spacemask + carpetiobasic + carpetioscalar + carpetioascii + ioutil + symbase + aeilocalinterp + carpetinterp + " + +#--- Spacetime :-) + +ActiveThorns = " admbase + staticconformal + admconstraints + admcoupling + coordgauge + admmacros + bssn_mol + " + +#--- Hydrodynamics + +ActiveThorns = " whisky + whisky_init_data + whisky_rnsid + eos_base + eos_polytrope + reductiontest + " + + + +################## Output Related Stuff ################################## + +IOBasic::outInfo_vars = "whisky::rho admbase::alp" +iobasic::outInfo_every = 1 + +IOScalar::outScalar_vars = "whisky::rho admbase::alp" +ioscalar::outScalar_every = 1 + +IOASCII::out1D_vars = "whisky::rho admbase::alp" +ioascii::out1D_every = 1 + + +#--- general + + +#--- output directories +IO::out_dir = $parfile + +#--- checkpoint recovery +io::recover = "no" + + +#--- output frequency + +io::out_single_precision = "yes" + + + +############################# DRIVER ##################################### + +#--- Benchmarking + +carpet::constant_load_per_processor = "yes" + +#--- performance & infrastructure + +carpetlib::use_collective_communication_buffers = "yes" +carpet::enable_all_storage = "no" +CarpetLib::save_memory_during_regridding = "yes" + +#--- Carpet prolongation order settings + +Carpet::prolongation_order_space = 3 +Carpet::prolongation_order_time = 2 + + +#--- Carpet initial data setup parameters + +Carpet::init_3_timelevels = "yes" +Carpet::init_each_timelevel = "no" + + +#--- Grid Setup and carpet parameters + + +carpet::buffer_width = 6 + +driver::ghost_size = 3 + +cartgrid3d::type = "box" +cartgrid3d::domain = "full" +cartgrid3d::avoid_origin = "no" + +cartgrid3d::dxyz = 1.0 +driver::global_nx = 30 +driver::global_ny = 30 +driver::global_nz = 30 + +cactus::cctk_itlast = 128 + +Carpet::domain_from_coordbase = "no" + +carpet::max_refinement_levels = 3 +carpetregrid::refinement_levels = 1 + +carpetregrid::regrid_every = 16 +carpetregrid::num_new_levels = 1 +carpetregrid::activate_levels_on_regrid = "fixed" + +carpet::veryverbose = "no" +carpet::verbose = "no" + + +################## Spacetime Related Stuff ############################# + + +admbase::evolution_method = "adm_bssn" +admbase::lapse_evolution_method = "1+log" +admbase::shift_evolution_method = "static" + +boundary::radpower = 2 + +admconstraints::bound = "static" + +bssn_mol::timelevels = 3 + + +######################## Hydro Related Stuff ########################### + + +whisky::timelevels = 3 + +whisky::whisky_rho_central = 1.61930347e-08 +whisky::riemann_solver = "Marquina" +whisky::whisky_eos_type = "Polytype" +whisky::whisky_eos_table = "2D_Polytrope" +whisky::recon_method = "ppm" +whisky::ppm_detect = "yes" +whisky::whisky_stencil = 3 +whisky::bound = "none" + +whisky::EoS_Change = "no" +EOS_Polytrope::eos_gamma = 2.0 +EOS_Polytrope::eos_k = 1.0 +EOS_Polytrope::use_cgs = "yes" +EOS_Polytrope::gamma_ini = 2.0 + +#------ Atmosphere treatment + +SpaceMask::use_mask = yes + +whisky::rho_rel_min = 1.e-5 + +#------ Atmosphere only for +whisky::initial_atmosphere_factor = 0.99 + + + +####################### Initial Data ##################################### + + +admbase::initial_data = "rnsid" +admbase::initial_lapse = "rnsid" +admbase::initial_shift = "rnsid" +admbase::metric_type = "physical" + +rnsid::axes_ratio = 1.0 +rnsid::accuracy = 1e-7 + +rnsid::RNS_Gamma = 2.0 +rnsid::RNS_K = 100.0 + +rnsid::recover_2Dmodel = "no" +rnsid::save_2Dmodel = "no" + +#rnsid::mdiv = 151 +#rnsid::sdiv = 301 + + + + +##################### Infrastructure Related Stuff ######################## + +#--- Time integration + +mol::ode_method = "icn" +MoL::Generic_Type = "RK" +MoL::MoL_Intermediate_Steps = 3 +time::dtfac = 0.375 + + + +#---- Timer output +cactus::cctk_timer_output = "FULL" diff --git a/test-carpet b/test-carpet index 079f1b33b..079f1b33b 100755..100644 --- a/test-carpet +++ b/test-carpet |