hi all,

some more information regarding this. i've ran a simulation based on the provided parfile qc0-mclachlan.par. i'm attaching a crude plot with the memory consumption, as reported by systemstatistics-process_memory and carpet-memory_procs, as function of the iteration.

the jump at iteration ~2048 corresponds to the time where some non-trivial regridding occurred. if i'm interpreting the plot correctly, while the total memory consumption of the system (as reported by systemstatistics) increases, the memory that carpet reports to be using is actually decreasing. is this a sign that something is probably leaking memory?

in case it's useful, i'm also attaching the exact parameter file i've used.

thanks,
Miguel

On 29/07/2018 21:12, Miguel Zilhão wrote:
hi Ian,

thanks again for your thorough reply! i've checked the low resolution run that i
have (and which ran successfully) and the pattern that i observe is that maxrss
typically grows after each regridding. the increase in maxrss is not monotonic,
though, as it does go down at times. then, after the BHs merge and the
regridding stops, maxrss settles down (to a value still a bit higher than the
maxrss at t=0). this is all for the first segment of the simulation, as i
haven't done any checkpointing for this run.

so i guess i don't have enough data to conclude whether what i'm observing is
indeed a memory leak, or if it's just Carpet's regridding algorithm doing what
it's supposed to do. in any case, i guess what surprises me is that, at times,
the memory consumption can be bigger than what it was at the beginning of the
run by a factor of 1.6, which can easily lead to an out-of-memory situation...

unfortunately these days i don't have the time to investigate this any
further...

many thanks,
Miguel

On 23/07/2018 16:06, [email protected] wrote:


On 23 Jul 2018, at 15:00, Miguel Zilhão 
<[email protected]
<mailto:[email protected]>> wrote:

hi Ian and all,

This could be caused by memory fragmentation due to all the freeing and 
mallocing that happens
during regridding when the sizes of the grids change.  Can you try using 
tcmalloc or jemalloc
instead of glibc malloc and reporting back?  One workaround could be to run 
shorter simulations
(i.e. set a walltime of 12 h instead of 24 h).

thanks for your reply. in one of my cases, for the resolution used and the 
available memory, i
was out of memory quite quickly -- within 6 hours or so... so unfortunately it 
becomes a bit
impractical for large simulations...

what would i need to do in order to use tcmalloc or jemalloc?
I have used tcmalloc.  I think you will need the following:
- Install tcmalloc (https://github.com/gperftools/gperftools), and libunwind, 
which it depends on.
- In your optionlist, link with tcmalloc.  I have
LDFLAGS = -rdynamic -L/home/ianhin/software/gperftools-2.1/lib
-Wl,-rpath,/home/ianhin/software/gperftools-2.1/lib -ltcmalloc
This should be sufficient I think for tcmalloc to be used instead of glibc 
malloc.  Try this out,
and see if things are better.  I also have a thorn which hooks into the 
tcmalloc API.  You can
get it from

thanks a lot for these pointers. i've tried it out, though i've used tcmalloc 
from ubuntu's
repositories and therefore compiled ET with -ltcmalloc_minimal. i don't know 
whether this makes a
difference, but from the trial run that i'm doing i so far seem to see the same 
memory increase i
had seen before...

Hi,

Did you use the tcmalloc thorn and the parameters to make it release memory 
back to the OS after
each regridding?

is there anything else that can be tried to try to pinpoint this issue? it 
seems to be serious...
i looked for an open ticket but didn't find anything. shall i submit one?

You can look at the Carpet::memory_procs variable (in 
Carpet/Carpet/interface.ccl).  This will tell
you how much memory Carpet has allocated for different things.  If one of these 
is growing during
the run, but resets to a lower value after checkpoint recovery, then that 
suggests a memory leak.

Hmm.  Now this is coming back to me.  I just searched my email, and I found a 
draft email that I
never sent from 2015 with subject "Memory leak in Carpet?".  Here it is:

Does anyone have any reason to suspect that something in Carpet might be 
leaking memory?  I have a
fairly straightforward QC0 simulation, based on qc0-mclachlan, and it looks 
like something is
leaking memory.

I have looked at several diagnostics.

– carpet::grid_functions: this contains the amount of memory Carpet thinks is 
allocated for grid
functions.  Since I have regridding, this is not in general going to be 
constant, but it turns out
that it remains approximate constant at about 5 GB per process (average and 
maximum across
processes are about the same).  Each process has 12 GB available on Datura.  So 
I should be well
within the memory limits of the machine, by more than a factor of 2.

– The run crashes with signal 9 during regridding at some point; this is 
probably the OOM killer.
– SystemStatistics::swap_used_mb starts to grow after the first regridding, and 
seems to grow
linearly throughout the run.  The crash time corresponds to it hitting about 18 
GB, which is the
maximum swap configured on the node.

– SystemStatistics::arena: This is the 'arena' field from mallinfo
(http://man7.org/linux/man-pages/man3/mallinfo.3.html) which is supposed to 
give 'Non-mmapped
space allocated (bytes)'.  This suffers from being stored in a 32 bit integer 
in the mallinfo
structure (https://sourceware.org/ml/libc-alpha/2014-11/msg00431.html), but I 
have adjusted it
manually by adding 4 GB when it looks like it is dropping unphysically.  This 
shows that the
amount of non-mmapped memory allocated is increasing on the order of 1 GB on 
each regridding, and
not between regriddings.  Firstly, the amount of memory allocated shouldn't be 
increasing so much,
since carpet::grid_functions remains approximately constant.  Secondly, I 
thought that we were
supposed to be using mmap for grid function data, so why do we have such a 
large amount of
non-mmapped memory?

– SystemStatistics::hblkhd: This is the hblkhd field from mallinfo, which is 
supposed to be "Space
allocated in mmapped regions (bytes)".  This increases to about 2 GB after a 
couple of
regriddings, but then stays roughly constant at 2 GB, which seems fine, apart 
from the fact that I
had hoped that mmap was being used for all the gridfunction data

I suspect I got distracted doing my own investigations while I was writing it, 
and then lost track
of it.  Typically, I think I run with excess memory for each run, so that by 24 
h, it hasn't grown
too badly.

Further searching finds an email from someone else saying that they had memory 
leak problems and
asking me about it.  My reply was:

On 5 May 2015, at 17:14, Ian Hinder <[email protected] 
<mailto:[email protected]>> wrote:

Hi,

I have added Erik and Roland to CC, as we have been discussing this; I hope 
this is OK.

It sounds very similar.  I am running on several hundred cores (<600) and the 
simulations often
fail with OOM errors after less than a day.  First the RSS grows, then the 
swap, then the
OOM-killer kills it.  I have observed this both on Datura and Hydra.  Stopping 
the simulations and
recovering from a checkpoint usually fixes the problem, and it runs on for 
another half day or so.
  I have done a fair amount of work on this, so I will summarise here.

*Monitor process RSS*

The process resident set size is the amount of address space which is currently 
mapped into
physical memory by the OS.  Thorn SystemStatistics can be used to measure this 
and put it into a
Cactus variable, which can then be reduced across processes.  I use:

IOBasic::outInfo_every      = 1
IOBasic::outInfo_reductions = "maximum"
IOBasic::outInfo_vars       = "
   SystemStatistics::maxrss_mb
   SystemStatistics::swap_used_mb
   Carpet::gridfunctions
"

and

IOScalar::outScalar_every = 128
IOScalar::outScalar_vars  = "
   SystemStatistics::process_memory_mb
   Carpet::memory_procs
"

SystemStatistics calls its variable "maxrss" but it should actually be called 
"rss", as that is
what is output.  maxrss is also available from the OS, and would give the 
maximum the RSS had ever
been during the process lifetime.

Carpet::gridfunctions (in Carpet::memory_procs) measures the amount of memory 
Carpet has allocated
in gridfunctions.  For me, this remains essentially flat, whereas maxrss grows 
after each
regridding until it reaches the maximum available, then the swap starts to 
grow.  This indicates
that the problem is not due to Carpet allocating more and more grid points due 
to grids changing
size.  It could be due to failing to free allocated memory (a leak) or freed 
data taking up space
which cannot be used for further allocations or returned to the OS 
(fragmentation).

*Terminate and checkpoint on OOM*

I have a local change to SystemStatistics which adds parameters for maximum 
values of RSS and swap
usage, above which it calls CCTK_TerminateNext, so if you have 
checkpoint_on_terminate, you get a
clean termination and can continue the run without losing too much CPU time.  I 
have been running
with this for a couple of weeks now, and it works as advertised.  I have a 
branch with this on,
but I just realised it conflicts with a change Erik made.  If you want this, 
let me know and I
will sort it out.

*Memory profiling*

The malloc implementation in glibc provides no usable statistics.  mallinfo is 
limited to 32 bit
integers, which overflow for 64 bit systems.  malloc_info, at least in the 
version on datura,
doesn't include memory allocated via mmap.  Useless. Instead, you need to use 
an external memory
profiler to see what is going on.  I have used "igprof" successfully, and this 
shows me that there
is no "leak" of allocated memory corresponding to the increase in RSS.  i.e. 
the problem is not
caused by forgetting to free something.  This suggests that the problem is 
fragmentation, where
malloc has unallocated blocks of memory which it does not or cannot return to 
the OS.  Malloc
allocates memory in two ways: either in its main heap, or by allocating 
anonymous mmap regions.  I
had thought that only the latter could be fully returned to the OS, but this is 
not true.  Any
region of address space can be marked as unused (internally via the 
madvise(MADV_DONTNEED) system
call) and a malloc implementation can do this on regions of its address space 
which have been
freed.  If such regions are too small (smaller than a page), then they could 
accumulate and not be
returned to the OS.

*Alternative malloc implementations*

At the suggestion of Roland, I tried using the tcmalloc
(http://gperftools.googlecode.com/git/doc/tcmalloc.html) library, which is a 
drop-in replacement
for glibc malloc which is part of gperftools.  This works fairly easily.  You 
can compile the
"minimal" version with no dependencies and then modify your optionlist:

CPPFLAGS = -I/home/rhaas/software/gperftools-2.1/include/gperftools
LDFLAGS = -L/home/rhaas/software/gperftools-2.1/lib
-Wl,-rpath,/home/rhaas/software/gperftools-2.1/lib -ltcmalloc_minimal

I found in one example case that this reduced the RSS process growth, so I am 
now using it for all
my simulations.  However, I still run into the same problem eventually, so it 
might be that it
makes it better but doesn't solve it completely.

tcmalloc has an introspection interface which is presumably not as useless as 
glibc's malloc:
http://gperftools.googlecode.com/git/doc/tcmalloc.html. I haven't tried this 
yet.

*Checkpoint recovery*

I noticed from the igprof profile that there are 11000 allocations (and frees) 
during checkpoint
recovery on one process, all from the HDF5 uncompression routine.  This is the 
"deflate" filter.
  When it decompresses a dataset, it allocates a buffer, initially sized the 
same as the compressed
dataset (really dumb, as it will always need to be bigger).  It then 
uncompresses into the buffer,
"realloc"ing the buffer to twice the size each time it runs out of space.  You 
can imagine that
this might cause a lot of fragmentation.  There is no tunable parameter, but we 
could modify the
code (it's in 
https://svn.hdfgroup.uiuc.edu/hdf5/tags/hdf5-1_8_12/src/H5Zdeflate.c) to use a 
much
larger starting buffer size, in the hope that this reduces the number of 
reallocs, and hence the
amount of fragmentation.  This wouldn't help the accumulated RSS, but it would 
probably produce a
one-off decrease in the amount of fragmentation.  I am currently not using 
periodic checkpointing,
so I don't know if the compression routine has the same problem.  Probably not, 
since it knows the
output buffer size has to be smaller than the input buffer size.  Apparently 
Frank Löffler also
modified this routine, which solved some of his problems of running out of 
memory during recovery.
  Another alternative would be to disable checkpoint compression.

To see if you are suffering from the same problem, I think the quickest way 
would be to link
against tcmalloc and use 
MallocExtension::instance()->GetNumericProperty(property_name, value)
from tcmalloc to read off the generic.current_allocated_bytes property (Number 
of bytes used by
the application. This will not typically match the memory use reported by the 
OS, because it does
not include TCMalloc overhead or memory fragmentation).  You could also look at 
the other
properties they provide.  Then compare this with the process RSS from 
systemstatistics, and
Carpet's gridfunctions variable, and check to see if you actually have a memory 
leak, or if you
are suffering from fragmentation.

This brings to mind another question: are you using HDF5 compression?  If so, 
do you see the same
problem if you switch it off?

And finally: do you get this growth on the very first segment of a simulation, 
or only on subsequent
segments?  I am thinking that checkpoint *recovery* severely fragments the 
heap, especially with
compression, and this somehow causes growth in the RSS with each regridding.

So, while I had forgotten about all this, it turns out that I had actually 
thought quite a lot about
it :)

--
Ian Hinder
https://ianhinder.net

_______________________________________________
Users mailing list
[email protected]
http://lists.einsteintoolkit.org/mailman/listinfo/users

Attachment: QC0_mem.pdf
Description: Adobe PDF document

#------------------------------------------------------------------------------
ActiveThorns = "
  ADMBase
  ADMCoupling
  ADMMacros
  AEILocalInterp
  AHFinderDirect
  Boundary
  Carpet
  CarpetInterp
  CarpetIOASCII
  CarpetIOBasic
  CarpetIOHDF5
  CarpetIOScalar
  CarpetLib
  CarpetMask
  CarpetReduce
  CarpetRegrid2
  CarpetSlab
  CarpetTracker
  CartGrid3D
  CoordBase
  CoordGauge
  Dissipation
  # Formaline
  Fortran
  GenericFD
  GSL
  HDF5
  InitBase
  IOUtil
  LocalInterp
  LoopControl
  ML_ADMConstraints
  ML_BSSN
  ML_BSSN_Helper
  MoL
  Multipole
  NaNChecker
  NewRad
  # PunctureTracker
  QuasiLocalMeasures
  ReflectionSymmetry
  RotatingSymmetry180
  Slab
  SpaceMask
  SphericalSurface
  StaticConformal
  SummationByParts
  SymBase
  SystemStatistics
  TerminationTrigger
  Time
  TimerReport
  TmunuBase
  TwoPunctures
  Vectors
  WeylScal4
"
#------------------------------------------------------------------------------


# Grid setup
#------------------------------------------------------------------------------

CartGrid3D::type                     = "coordbase"
Carpet::domain_from_coordbase        = yes
CoordBase::domainsize                = "minmax"

# make sure all (xmax - xmin)/dx are integers!
CoordBase::xmin                      =    0.00
CoordBase::ymin                      = -120.00
CoordBase::zmin                      =    0.00
CoordBase::xmax                      = +120.00
CoordBase::ymax                      = +120.00
CoordBase::zmax                      = +120.00
CoordBase::dx                        =    2.00
CoordBase::dy                        =    2.00
CoordBase::dz                        =    2.00

driver::ghost_size                   = 3

CoordBase::boundary_size_x_lower     = 3
CoordBase::boundary_size_y_lower     = 3
CoordBase::boundary_size_z_lower     = 3
CoordBase::boundary_size_x_upper     = 3
CoordBase::boundary_size_y_upper     = 3
CoordBase::boundary_size_z_upper     = 3

CoordBase::boundary_shiftout_x_lower = 1
CoordBase::boundary_shiftout_y_lower = 0
CoordBase::boundary_shiftout_z_lower = 1

CarpetRegrid2::symmetry_rotating180  = yes

ReflectionSymmetry::reflection_x     = no
ReflectionSymmetry::reflection_y     = no
ReflectionSymmetry::reflection_z     = yes
ReflectionSymmetry::avoid_origin_x   = yes
ReflectionSymmetry::avoid_origin_y   = yes
ReflectionSymmetry::avoid_origin_z   = no


# Mesh refinement
#------------------------------------------------------------------------------

Carpet::max_refinement_levels           = 7

CarpetRegrid2::num_centres              = 3

CarpetRegrid2::num_levels_1             =  7
CarpetRegrid2::position_x_1             = +1.168642873
CarpetRegrid2::radius_1[ 1]             =  64.0
CarpetRegrid2::radius_1[ 2]             =  16.0
CarpetRegrid2::radius_1[ 3]             =   8.0
CarpetRegrid2::radius_1[ 4]             =   4.0
CarpetRegrid2::radius_1[ 5]             =   2.0
CarpetRegrid2::radius_1[ 6]             =   1.0
CarpetRegrid2::movement_threshold_1     =   0.16

CarpetRegrid2::num_levels_2             =  7
CarpetRegrid2::position_x_2             = -1.168642873
CarpetRegrid2::radius_2[ 1]             =  64.0
CarpetRegrid2::radius_2[ 2]             =  16.0
CarpetRegrid2::radius_2[ 3]             =   8.0
CarpetRegrid2::radius_2[ 4]             =   4.0
CarpetRegrid2::radius_2[ 5]             =   2.0
CarpetRegrid2::radius_2[ 6]             =   1.0
CarpetRegrid2::movement_threshold_2     =   0.16

CarpetRegrid2::num_levels_3             =  7
CarpetRegrid2::active_3                 = no
CarpetRegrid2::radius_3[ 1]             =  64.0
CarpetRegrid2::radius_3[ 2]             =  16.0
CarpetRegrid2::radius_3[ 3]             =   8.0
CarpetRegrid2::radius_3[ 4]             =   4.0
CarpetRegrid2::radius_3[ 5]             =   2.0
CarpetRegrid2::radius_3[ 6]             =   1.0
CarpetRegrid2::movement_threshold_3     =   0.16


Carpet::use_buffer_zones                = yes
Carpet::prolongation_order_space        = 5
Carpet::prolongation_order_time         = 2

CarpetRegrid2::freeze_unaligned_levels  = yes
CarpetRegrid2::regrid_every             = 128

CarpetRegrid2::verbose                  = no

Carpet::grid_structure_filename         = "carpet-grid-structure"
Carpet::grid_coordinates_filename       = "carpet-grid-coordinates"

Carpet::time_refinement_factors         = "[1, 1, 2, 4, 8, 16, 32, 64, 128, 
256]"

Time::dtfac                             = 0.25


# Initial Data
#------------------------------------------------------------------------------

ADMBase::metric_type = "physical"

ADMBase::initial_data                 = "twopunctures"
ADMBase::initial_lapse                = "twopunctures-averaged"
ADMBase::initial_shift                = "zero"
ADMBase::initial_dtlapse              = "zero"
ADMBase::initial_dtshift              = "zero"

ADMBase::lapse_timelevels             = 3
ADMBase::shift_timelevels             = 3
ADMBase::metric_timelevels            = 3

# TwoPunctures::target_M_plus           = 0.5
# TwoPunctures::target_M_minus          = 0.5

TwoPunctures::par_m_plus              = 0.453
TwoPunctures::par_m_minus             = 0.453

TwoPunctures::par_b                   = 1.168642873
TwoPunctures::center_offset[0]        = 0

TwoPunctures::par_P_plus[0]           = 0.0
TwoPunctures::par_P_plus[1]           = 0.3331917498
TwoPunctures::par_P_plus[2]           = 0.

TwoPunctures::par_P_minus[0]          =  0.0
TwoPunctures::par_P_minus[1]          = -0.3331917498
TwoPunctures::par_P_minus[2]          =  0.

TwoPunctures::par_S_plus[0]           = 0.
TwoPunctures::par_S_plus[1]           = 0.
TwoPunctures::par_S_plus[2]           = 0.

TwoPunctures::par_S_minus[0]          = 0.
TwoPunctures::par_S_minus[1]          = 0.
TwoPunctures::par_S_minus[2]          = 0.

# TwoPunctures::give_bare_mass          = yes

TwoPunctures::TP_epsilon              = 1.0e-2
TwoPunctures::TP_Tiny                 = 1.0e-2

TwoPunctures::npoints_A               = 30
TwoPunctures::npoints_B               = 30
TwoPunctures::npoints_phi             = 16
TwoPunctures::grid_setup_method       = "evaluation"

TwoPunctures::keep_u_around           = yes
TwoPunctures::verbose                 = yes

InitBase::initial_data_setup_method   = "init_some_levels"
Carpet::init_fill_timelevels          = yes
Carpet::init_3_timelevels             = no


# Evolution
#------------------------------------------------------------------------------

ADMBase::evolution_method         = "ML_BSSN"
ADMBase::lapse_evolution_method   = "ML_BSSN"
ADMBase::shift_evolution_method   = "ML_BSSN"
ADMBase::dtlapse_evolution_method = "ML_BSSN"
ADMBase::dtshift_evolution_method = "ML_BSSN"

ML_BSSN::harmonicN           = 1      # 1+log
ML_BSSN::harmonicF           = 2.0    # 1+log
ML_BSSN::ShiftGammaCoeff     = 0.75
ML_BSSN::BetaDriver          = 1.0
ML_BSSN::advectLapse         = 1
ML_BSSN::advectShift         = 1

ML_BSSN::MinimumLapse          = 1.0e-8
ML_BSSN::conformalMethod       = 1 # 1 for W


# Boundary conditions
#------------------------------------------------------------------------------

ML_BSSN::initial_boundary_condition = "extrapolate-gammas"
ML_BSSN::rhs_boundary_condition     = "NewRad"
Boundary::radpower                     = 2

ML_BSSN::ML_log_confac_bound = "none"
ML_BSSN::ML_metric_bound     = "none"
ML_BSSN::ML_Gamma_bound      = "none"
ML_BSSN::ML_trace_curv_bound = "none"
ML_BSSN::ML_curv_bound       = "none"
ML_BSSN::ML_lapse_bound      = "none"
ML_BSSN::ML_dtlapse_bound    = "none"
ML_BSSN::ML_shift_bound      = "none"
ML_BSSN::ML_dtshift_bound    = "none"


# Spatial finite differencing
#------------------------------------------------------------------------------

SummationByParts::order = 4
ML_BSSN::fdOrder        = 4

Dissipation::order = 5
Dissipation::vars  = "
  ML_BSSN::ML_log_confac
  ML_BSSN::ML_metric
  ML_BSSN::ML_trace_curv
  ML_BSSN::ML_curv
  ML_BSSN::ML_Gamma
  ML_BSSN::ML_lapse
  ML_BSSN::ML_shift
  ML_BSSN::ML_dtlapse
  ML_BSSN::ML_dtshift
"


# Integration method
#------------------------------------------------------------------------------

MoL::ODE_Method                 = "RK4"
MoL::MoL_Intermediate_Steps     = 4
MoL::MoL_Num_Scratch_Levels     = 1

Carpet::num_integrator_substeps = 4


# Spherical surfaces
#------------------------------------------------------------------------------

SphericalSurface::nsurfaces = 3
SphericalSurface::maxntheta = 66
SphericalSurface::maxnphi   = 124
SphericalSurface::verbose   = no

# Horizon 1
SphericalSurface::ntheta            [0] = 41
SphericalSurface::nphi              [0] = 80
SphericalSurface::nghoststheta      [0] = 2
SphericalSurface::nghostsphi        [0] = 2
CarpetMask::excluded_surface        [0] = 0
CarpetMask::excluded_surface_factor [0] = 1.0

# Horizon 2
SphericalSurface::ntheta            [1] = 41
SphericalSurface::nphi              [1] = 80
SphericalSurface::nghoststheta      [1] = 2
SphericalSurface::nghostsphi        [1] = 2
CarpetMask::excluded_surface        [1] = 1
CarpetMask::excluded_surface_factor [1] = 1.0

# Common horizon
SphericalSurface::ntheta            [2] = 41
SphericalSurface::nphi              [2] = 80
SphericalSurface::nghoststheta      [2] = 2
SphericalSurface::nghostsphi        [2] = 2
CarpetMask::excluded_surface        [2] = 2
CarpetMask::excluded_surface_factor [2] = 1.0

CarpetMask::verbose = no


# Puncture tracking
#------------------------------------------------------------------------------

CarpetTracker::surface[0]                       = 0
CarpetTracker::surface[1]                       = 1
CarpetTracker::surface[2]                       = 2

# PunctureTracker::track                      [0] = yes
# PunctureTracker::initial_x                  [0] = 3
# PunctureTracker::which_surface_to_store_info[0] = 0
# PunctureTracker::track                      [1] = yes
# PunctureTracker::initial_x                  [1] = -3
# PunctureTracker::which_surface_to_store_info[1] = 1

# PunctureTracker::verbose                        = no


# Wave extraction
#------------------------------------------------------------------------------

WeylScal4::fd_order     = "4th"
WeylScal4::offset       = 1e-8 

Multipole::nradii       = 4
Multipole::radius[0]    = 30
Multipole::radius[1]    = 50
Multipole::radius[2]    = 80
Multipole::radius[3]    = 100
Multipole::ntheta       = 120
Multipole::nphi         = 240
Multipole::variables    = "
  WeylScal4::Psi4r{sw=-2 cmplx='WeylScal4::Psi4i' name='Psi4'}
"
# Multipole::integration_method = "Simpson"

Multipole::out_every    = 64
Multipole::l_max        = 4
Multipole::output_hdf5  = no
Multipole::output_ascii = yes


# Horizons
#------------------------------------------------------------------------------

# AHFinderDirect::verbose_level                           = "algorithm 
highlights"
AHFinderDirect::verbose_level                            = "physics details"
AHFinderDirect::output_BH_diagnostics                    = "true"
AHFinderDirect::run_at_CCTK_POST_RECOVER_VARIABLES       = no

AHFinderDirect::N_horizons                               = 3
AHFinderDirect::find_every                               = 128

AHFinderDirect::output_h_every                           = 0
AHFinderDirect::max_Newton_iterations__initial           = 50
AHFinderDirect::max_Newton_iterations__subsequent        = 50
AHFinderDirect::max_allowable_Theta_growth_iterations    = 10
AHFinderDirect::max_allowable_Theta_nonshrink_iterations = 10
AHFinderDirect::geometry_interpolator_name               = "Lagrange polynomial 
interpolation"
AHFinderDirect::geometry_interpolator_pars               = "order=4"
AHFinderDirect::surface_interpolator_name                = "Lagrange polynomial 
interpolation"
AHFinderDirect::surface_interpolator_pars                = "order=4"

AHFinderDirect::move_origins                             = yes
AHFinderDirect::reshape_while_moving                     = yes
AHFinderDirect::predict_origin_movement                  = yes

AHFinderDirect::origin_x                             [1] = +1.168642873
AHFinderDirect::initial_guess__coord_sphere__x_center[1] = +1.168642873
AHFinderDirect::initial_guess__coord_sphere__radius  [1] = 0.25
AHFinderDirect::which_surface_to_store_info          [1] = 0
AHFinderDirect::set_mask_for_individual_horizon      [1] = no
AHFinderDirect::reset_horizon_after_not_finding      [1] = no
# AHFinderDirect::track_origin_from_grid_scalar        [1] = yes
# AHFinderDirect::track_origin_source_x                [1] = 
"PunctureTracker::pt_loc_x[0]"
# AHFinderDirect::track_origin_source_y                [1] = 
"PunctureTracker::pt_loc_y[0]"
# AHFinderDirect::track_origin_source_z                [1] = 
"PunctureTracker::pt_loc_z[0]"
AHFinderDirect::max_allowable_horizon_radius         [1] = 3
AHFinderDirect::dont_find_after_individual_time      [1] = 30.0

AHFinderDirect::origin_x                             [2] = -1.168642873
AHFinderDirect::initial_guess__coord_sphere__x_center[2] = -1.168642873
AHFinderDirect::initial_guess__coord_sphere__radius  [2] = 0.25
AHFinderDirect::which_surface_to_store_info          [2] = 1
AHFinderDirect::set_mask_for_individual_horizon      [2] = no
AHFinderDirect::reset_horizon_after_not_finding      [2] = no
# AHFinderDirect::track_origin_from_grid_scalar        [2] = yes
# AHFinderDirect::track_origin_source_x                [2] = 
"PunctureTracker::pt_loc_x[1]"
# AHFinderDirect::track_origin_source_y                [2] = 
"PunctureTracker::pt_loc_y[1]"
# AHFinderDirect::track_origin_source_z                [2] = 
"PunctureTracker::pt_loc_z[1]"
AHFinderDirect::max_allowable_horizon_radius         [2] = 3
AHFinderDirect::dont_find_after_individual_time      [2] = 30.0

AHFinderDirect::origin_x                             [3] = 0
AHFinderDirect::find_after_individual_time           [3] = 15.0
AHFinderDirect::initial_guess__coord_sphere__x_center[3] = 0
AHFinderDirect::initial_guess__coord_sphere__radius  [3] = 1.0
AHFinderDirect::which_surface_to_store_info          [3] = 2
AHFinderDirect::set_mask_for_individual_horizon      [3] = no
AHFinderDirect::max_allowable_horizon_radius         [3] = 6


# Isolated Horizons
#-------------------------------------------------------------------------------

QuasiLocalMeasures::verbose                = yes
QuasiLocalMeasures::veryverbose            = no
QuasiLocalMeasures::interpolator           = "Lagrange polynomial interpolation"
QuasiLocalMeasures::interpolator_options   = "order=4"
QuasiLocalMeasures::spatial_order          = 4
QuasiLocalMeasures::num_surfaces           = 3
QuasiLocalMeasures::surface_index      [0] = 0
QuasiLocalMeasures::surface_index      [1] = 1
QuasiLocalMeasures::surface_index      [2] = 2


# Check for NaNs
#-------------------------------------------------------------------------------

Carpet::poison_new_timelevels = yes
CarpetLib::poison_new_memory  = yes
Carpet::check_for_poison      = no

NaNChecker::check_every     = 512
NanChecker::check_after     = 0
NaNChecker::report_max      = 10
# NaNChecker::verbose         = "all"
NaNChecker::action_if_found = "terminate"
NaNChecker::out_NaNmask     = yes
NaNChecker::check_vars      = "
  ML_BSSN::ML_log_confac
"


# Timers
#-------------------------------------------------------------------------------

Cactus::cctk_timer_output               = "full"
TimerReport::out_every                  = 5120
TimerReport::n_top_timers               = 40
TimerReport::output_all_timers_together = yes
TimerReport::output_all_timers_readable = yes
TimerReport::output_schedule_timers     = no


# I/O thorns
#-------------------------------------------------------------------------------

Cactus::cctk_run_title       = $parfile
IO::out_dir                  = $parfile

IOScalar::one_file_per_group = yes
IOASCII::one_file_per_group  = yes

IOHDF5::use_checksums        = no
IOHDF5::one_file_per_group   = no

IOBasic::outInfo_every       = 4
IOBasic::outInfo_reductions  = "minimum maximum"
IOBasic::outInfo_vars        = "
  Carpet::physical_time_per_hour
  ML_BSSN::ML_log_confac
  SystemStatistics::maxrss_mb
"

# for scalar reductions of 3D grid functions
IOScalar::outScalar_every               = 64
IOScalar::outScalar_reductions          = "minimum maximum average norm2"
IOScalar::outScalar_vars                = "
  ML_BSSN::ML_Ham
  ML_BSSN::ML_mom
  SystemStatistics::maxrss_mb
  SystemStatistics::process_memory_mb
  Carpet::memory_procs
"


# output just at one point (0D)
IOASCII::out0D_every = 32
IOASCII::out0D_vars  = "
  Carpet::timing
  # PunctureTracker::pt_loc
  QuasiLocalMeasures::qlm_scalars{out_every = 128}
"

IOASCII::output_symmetry_points = no
IOASCII::out3D_ghosts           = no

# 1D text output
IOASCII::out1D_every            = 128
IOASCII::out1D_d                = no
IOASCII::out1D_x                = yes
IOASCII::out1D_y                = no
IOASCII::out1D_z                = no
IOASCII::out1D_vars             = "
  ADMBase::lapse
  ML_BSSN::ML_Ham
  ML_BSSN::ML_mom
"

# 1D HDF5 output
#IOHDF5::out1D_every            = 256
#IOHDF5::out1D_d                = no
#IOHDF5::out1D_x                = yes
#IOHDF5::out1D_y                = no
#IOHDF5::out1D_z                = no
#IOHDF5::out1D_vars             = "
#  ADMBase::lapse
#"

# # 2D HDF5 output
# IOHDF5::out2D_every             = 256
# IOHDF5::out2D_xy                = yes
# IOHDF5::out2D_xz                = no
# IOHDF5::out2D_yz                = no
# IOHDF5::out2D_vars              = "
#   ADMBase::lapse
# "

# # 3D HDF5 output
# IOHDF5::out_every                      = 8192
# IOHDF5::out_vars                       = "
#   ADMBase::lapse
# "

Carpet::verbose                    = no
Carpet::veryverbose                = no
Carpet::schedule_barriers          = no
Carpet::storage_verbose            = no
CarpetLib::output_bboxes           = no

Cactus::cctk_full_warnings         = yes
Cactus::highlight_warning_messages = no


# Checkpointing and recovery
#-------------------------------------------------------------------------------

CarpetIOHDF5::checkpoint             = yes
IO::checkpoint_dir                   = "../checkpoints"
IO::checkpoint_ID                    = no
IO::checkpoint_every_walltime_hours  = 23
IO::checkpoint_on_terminate          = yes
IO::out_proc_every                   = 2
IO::checkpoint_keep                  = 1

IO::recover                          = "autoprobe"
IO::recover_dir                      = "../checkpoints"

IO::abort_on_io_errors                      = yes
CarpetIOHDF5::open_one_input_file_at_a_time = yes
CarpetIOHDF5::compression_level             = 9


# Run termination
#-------------------------------------------------------------------------------

TerminationTrigger::max_walltime                 = 72 # hours
TerminationTrigger::on_remaining_walltime        = 60 # minutes
TerminationTrigger::output_remtime_every_minutes = 60
TerminationTrigger::termination_from_file        = yes
TerminationTrigger::termination_file             = "terminate.txt"
TerminationTrigger::create_termination_file      = yes

Cactus::terminate       = "time"
Cactus::cctk_final_time = 300.0
_______________________________________________
Users mailing list
[email protected]
http://lists.einsteintoolkit.org/mailman/listinfo/users

Reply via email to