# Parameter definitions for thorn Carpet shares: Cactus USES BOOLEAN terminate_next USES KEYWORD terminate USES CCTK_INT cctk_itlast USES CCTK_REAL cctk_initial_time USES CCTK_REAL cctk_final_time USES CCTK_REAL max_runtime shares: InitBase USES KEYWORD initial_data_setup_method shares: IO USES STRING out_dir private: BOOLEAN domain_from_coordbase "Use the domain description from CoordBase" { } "no" BOOLEAN domain_from_multipatch "Use the domain description from MultiPatch" { } "no" CCTK_INT global_nx "Grid size in x direction" STEERABLE=recover { 0:* :: "must be nonnegative" } 10 CCTK_INT global_ny "Grid size in y direction" STEERABLE=recover { 0:* :: "must be nonnegative" } 10 CCTK_INT global_nz "Grid size in z direction" STEERABLE=recover { 0:* :: "must be nonnegative" } 10 CCTK_INT global_nsize "Grid size in each spatial direction" STEERABLE=recover { 0:* :: "must be nonnegative" -1 :: "use the per-dimension parameters" } -1 CCTK_INT ghost_size_x "Ghost zones in x direction" { 0:* :: "must be nonnegative" } 1 CCTK_INT ghost_size_y "Ghost zones in y direction" { 0:* :: "must be nonnegative" } 1 CCTK_INT ghost_size_z "Ghost zones in z direction" { 0:* :: "must be nonnegative" } 1 CCTK_INT ghost_size "Ghost zones in each spatial direction" { 0:* :: "must be nonnegative" -1 :: "use the per-dimension parameters" } -1 restricted: BOOLEAN periodic "do not use this parameter" { } "no" BOOLEAN periodic_x "do not use this parameter" { } "no" BOOLEAN periodic_y "do not use this parameter" { } "no" BOOLEAN periodic_z "do not use this parameter" { } "no" private: KEYWORD refinement_centering "Centering" { "vertex" :: "use a vertex centred grid structure" "cell" :: "use a cell centred grid structure" } "vertex" CCTK_INT max_refinement_levels "Maximum number of refinement levels (including the base level)" { 1:* :: "must be positive" } 1 CCTK_INT refinement_factor "Refinement factor" { 1:* :: "must be positive" } 2 STRING space_refinement_factors "Spatial refinement factors over the coarsest level" { "^$" :: "Use the value of refinement_factor" # V = [SDS(,SDS)*] # L = [SVS(,SVS)*] # = [S[SDS(,SDS)*]S(,S[SDS(,SDS)*]S)*] "^[[:space:]]*\[[[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*(,[[:space:]]*[[:digit:]]+[[:space:]]*)*\][[:space:]]*(,[[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*(,[[:space:]]*[[:digit:]]+[[:space:]]*)*\][[:space:]]*)*\][[:space:]]*$" :: "[ [,,], ... ]" } "" STRING time_refinement_factors "Temporal refinement factors over the coarsest level" { "^$" :: "Use the value of refinement_factor" # L = [SDS(,SDS)*] "^[[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*(,[[:space:]]*[[:digit:]]+[[:space:]]*)*\][[:space:]]*$" :: "[ , ... ]" } "" BOOLEAN refine_timestep "Correct Time::dtfac for spacings on finer grids" { } "no" CCTK_INT convergence_level "Convergence level" { *:* :: "negative for finer, positive for coarser resolutions" } 0 CCTK_INT num_convergence_levels "Number of convergence levels (including the base level)" { 1:* :: "must be positive" } 1 CCTK_INT convergence_factor "Multigrid factor" { 1:* :: "must be positive" } 2 CCTK_INT num_maps "Number of maps" { 1:* :: "" } 1 STRING model "Model name for multi-model simulations -- the model name is used to distribute the processors onto the models" { ".+" :: "" } "world" 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)" } 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)" } 1 BOOLEAN use_buffer_zones "Use buffer zones" { } "no" CCTK_INT additional_buffer_zones "Additional buffer zones" { *:* :: "" } 0 BOOLEAN use_tapered_grids "Use tapered grids, avoiding time interpolation during evolution" { } "no" CCTK_INT num_integrator_substeps "Number of substeps of the time integrator" { -1: :: "Call MoLNumIntegratorSubsteps" 0:* :: "" } -1 BOOLEAN sync_during_time_integration "Synchronise during time integration, even when prolongation is switched off" { } "yes" CCTK_STRING base_extents "Extents of base grid components, in grid point units of the finest level" { "^$" :: "leave empty for one grid component covering the whole region (default)" # We want the string to contain a list of bboxes. Each bbox contains # three vectors specifying the lower bound, upper bound, and stride. # (The upper bound is inclusive. All values are nonnegative integers.) # The syntax for vectors, bboxes, and lists is described below. # All spaces are optional. # The () parentheses and [] brackets are literals. # The {} braces are used for grouping. # If you put everything together, you get the tapeworm below. # There should be a way to define abbreviations in regexps! # Having #defines in param.ccl files would help a lot. # VECT := " [ 0 , 0 , 0 ]" # BBOX := " ( VECT : VECT : VECT )" # LIST := " [ {{ BBOX }* BBOX}? ]" # Almost human readable explanation follows. # The specification is hierarchical. # The following definitions are generic: # VECT3(x) := "[ x, x, x ]" # three x, separated by commas, enclosed in square brackets # BBOX3(x) := "( x : x : x )" # three x, separated by colons, enclosed in round parentheses # LIST(x) := "[ {{ x, }* x}? ]" # zero or more x, separated by commas, enclosed in square brackets # A domain is built up as follows: # REGION := BBOX3(VECT3(double)) # DOMAIN := LIST(REGION) "^[[:space:]]*\[(([[:space:]]*\([[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*:[[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*:[[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*\)[[:space:]]*,)*[[:space:]]*\([[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*:[[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*:[[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*\))?[[:space:]]*\][[:space:]]*$" :: "[ ([,,]:[,,]:[,,]), ... ]" } "" CCTK_STRING base_outerbounds "Outer boundaries of base grid components" { "^$" :: "leave empty for using the default, which depends on cctk_gsh" # See above for an explanation of this syntax, and of the tapeworm below. # Each vector element is 0 or 1, # where 0 is handled by synchronisation or prolongation, # and 1 stands for a user-supplied ("outer") boundary condition. # BND := " [ 0 , 0 ]" # VECT := " [ BND , BND , BND ]" # LIST := " [{{VECT ,}*VECT}? ]" # Almost human readable explanation follows. # The specification is hierarchical. # The following definitions are generic: # VECT2(x) := "[ x, x ]" # two x, separated by commas, enclosed in square brackets # VECT3(x) := "[ x, x, x ]" # three x, separated by commas, enclosed in square brackets # LIST(x) := "[ {{ x, }* x}? ]" # zero or more x, separated by commas, enclosed in square brackets # A domain is built up as follows: # REGION := VECT3(VECT2(double)) # DOMAIN := LIST(REGION) "^[[:space:]]*\[(([[:space:]]*\[[[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*,[[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*,[[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*\][[:space:]]*,)*[[:space:]]*\[[[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*,[[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*,[[:space:]]*\[[[:space:]]*[[:digit:]]+[[:space:]]*,[[:space:]]*[[:digit:]]+[[:space:]]*\][[:space:]]*\])?[[:space:]]*\][[:space:]]*$" :: "[ [ [,], [,], [,] ], ... ]" } "" BOOLEAN enable_all_storage "Enable storage for all 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" 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" 0:* :: "print only that many locations" } 10 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" BOOLEAN suppress_restriction "Suppress the restriction operations. This makes the coarser refinement levels independent of the finer ones." STEERABLE=always { } "no" BOOLEAN verbose "Display more info on the screen" STEERABLE=always { } "no" BOOLEAN veryverbose "Display a lot of info on the screen" STEERABLE=always { } "no" BOOLEAN storage_verbose "Display verbose storage information if veryverbose" STEERABLE=ALWAYS { } "no" BOOLEAN barriers "Insert barriers at strategic places for debugging purposes (slows down execution)" STEERABLE=always { } "no" BOOLEAN schedule_barriers "Insert barriers between scheduled items, so that timer statistics become more reliable (slows down execution)" STEERABLE=always { } "no" BOOLEAN output_internal_data "Periodically print internal data to the screen for debugging purposes" { } "no" INT print_timestats_every "Print interesting timing statistics periodically" STEERABLE=always { -1 :: "don't report" 0 :: "don't report" 1:* :: "report every so many iterations" } 0 INT output_timers_every "Print detailed statistics periodically" STEERABLE=always { -1 :: "don't report" 0 :: "don't report" 1:* :: "report every so many iterations" } 0 STRING timer_file "File name in which detailed timing statistics are collected" STEERABLE=recover { "^$" :: "empty filename: no file output" "^.+$" :: "file name" } "carpet-timing-statistics" INT max_core_size_MB "Maximum size of a core file" STEERABLE=recover { -2 :: "unchanged" -1 :: "unlimited" 0:* :: "limited" } -2 INT max_memory_size_MB "Maximum amount of memory per MPI process" STEERABLE=recover { -2 :: "unchanged" -1 :: "unlimited" 0:* :: "limited" } -2 KEYWORD processor_topology "How to determine the processor topology" STEERABLE=recover { "manual" :: "Specified by processor_topology_*" "along-z" :: "Split the region along the z direction only" "along-dir" :: "Split the region along one direction only" "automatic" :: "Choose the topology automatically" } "automatic" CCTK_INT processor_topology_3d_x "Number of processors in x-direction" STEERABLE=recover { 1:* :: "must be positive" } 1 CCTK_INT processor_topology_3d_y "Number of processors in y-direction" STEERABLE=recover { 1:* :: "must be positive" } 1 CCTK_INT processor_topology_3d_z "Number of processors in z-direction" STEERABLE=recover { 1:* :: "must be positive" } 1 CCTK_INT split_direction "Direction in which the domain should be split" STEERABLE=recover { 0:* :: "0 for x, 1 for y, 2 for z, etc." } 2 BOOLEAN constant_load_per_processor "Keep the load per processor constant -- this is meant for benchmarks" STEERABLE=recover { } "no" CCTK_REAL aspect_ratio_x "Desired aspect ratio for each processor's domain" STEERABLE=always { (0:* :: "" } 1.0 CCTK_REAL aspect_ratio_y "Desired aspect ratio for each processor's domain" STEERABLE=always { (0:* :: "" } 1.0 CCTK_REAL aspect_ratio_z "Desired aspect ratio for each processor's domain" STEERABLE=always { (0:* :: "" } 1.0 CCTK_INT min_points_per_proc "Minimum number of grid points per processor" STEERABLE=always { -1 :: "infinity" 1:* :: "that many" } -1 CCTK_INT num_threads "Number of threads per process" STEERABLE=recover { -1 :: "use system default, probably influenced by OMP_NUM_THREADS" 1:* :: "use this many threads" } -1 STRING grid_structure_filename "File name to output grid structure to (empty = no output)" STEERABLE=recover { ".*" :: "must be a legal file name" } "" STRING grid_coordinates_filename "File name to output grid coordinates to (empty = no output)" STEERABLE=recover { ".*" :: "must be a legal file name" } "" private: BOOLEAN init_each_timelevel "Call initial data routines once for each timelevel" STEERABLE=always { } "no" BOOLEAN init_fill_timelevels "Fill past time levels from current time level after calling initial data routines" STEERABLE=always { } "no" BOOLEAN prolongate_initial_data "Prolongate the refined regions during initial data generation" STEERABLE=always { } "no" BOOLEAN regrid_during_initialisation "Regrid while initialising" STEERABLE=recover { } "no" BOOLEAN regrid_during_recovery "Regrid while recovering" STEERABLE=recover { } "no" BOOLEAN regrid_in_level_mode "Regrid in level mode (instead of singlemap mode), enabling more efficient processor distributions when there are multiple maps" STEERABLE=always { } "yes" BOOLEAN init_3_timelevels "Set up 3 timelevels of initial data" STEERABLE=always { } "no" BOOLEAN adaptive_stepsize "Allow adaptive timestep sizes" { } "no"