[Carpet] time_refinement_factors and prolongation order

Michael Koppitz koppitz at aei.mpg.de
Thu Aug 31 17:04:11 CEST 2006


On the carpet mailing list archive 
I found a setup ment to be used 
for runs without time refinement.
http://lists.carpetcode.org/archives/developers/2006-July/001732.html

I tried this (and other confiogurations and end up with an error:
"Assertion `prolongation_order_time == 2' failed"

Using prolongation_order_time =2 I get an error:
Internal error: extrapolation in time.  time=2  times=[1,0,-1]

maybe the two are not connected, but they sure look like they are.

Could somebody suggest a remedy?

thank you

Michael


On Saturday 26 August 2006 02:15, Erik Schnetter wrote:
> On Aug 24, 2006, at 11:55:43, Jonathan Thornburg wrote:
> > Hi, Erik,
> >
> > Thanks for clarifying mglevel.  Meanwhile, Thomas and I have some
> > more questions for you, mostly inspired by trying to fix my incorrect
> > description of when global mode routines are executed:
> > * I thought the standard loop order has mglevel as the outer loop,
> >   and reflevel nested inside this.  But I see that the following 3
> >   parts of the main time evolution loop invert this loop order,
> >   i.e. do reflevel as outer loop and mglevel nested inside this:
> >   * PRESTEP + EVOL
> >   * Restrict
> >   * POSTRESTRICT + POSTSTEP + CHECKPOINT + ANALYSIS + OutputGH
> >   Why is the loop order "inside-out" for these?
>
> When the simulation evolves physics, then different convergence
> levels are treated independently.  Since the refinement levels that
> should be evolved at a given iteration depend on the convergence
> level, the mglevel loop is the outer loop.  One could interchange the
> loops.  One reason for not interchanging them is that people may want
> to copy the fine grid result into the coarse grid result at certain
> times to keep the results from diverging, and therefore I wanted to
> evolve the finer convergence levels first.  However, I have not
> experimented with that.
>
> Internally, in CarpetLib, mglevels are actually the last element of
> the hierarchy!  The internal CarpetLib hierarchy is: map, reflevel,
> component, mglevel.  This reflects that patches are virtually
> independent of each other, while the grid structure of different
> convergence levels has to be the same.
>
> When the grid structure changes, then all convergence levels need to
> have the same grid structure.  This is why the grid structure should
> be set up once, and then applied to all convergence levels.  (Regrid
> has not even an mglevel loop.)
>
> By the way, Evolution_Restrict has mglevel outside reflevel.
>
> Initialisation is different from evolution.  In the initialisation
> loops, I generally have mglevel inside reflevel.  The grid structure
> is initialised reflevel by reflevel, making it possible to add finer
> reflevels until a certain accuracy criterion is satisfied.  On each
> reflevel, all mglevels are initialised together (in a tighter loop).
>
> > * In EvolutionI(), are Thomas and I correct in our belief that
> >     do_global_mode  ==  (rl == 0) ?  If so, why did you write it
> >    in the more complicated way you did, using the
> > have_done_global_mode
> >   flag?
>
> This is not correct.  The coarse grid is evolved much more rarely
> than the finer grids.  do_every is often false for rl=0, but true for
> larger rl.
>
> timereffacts for smaller rl are smaller (these are refinement
> factors).  Therefore the quotient that you look at is larger for
> smaller rl.
>
> > * In EvolutionII() you write the  do_global_mode  computation  in
> >   terms of  finest_active_reflevel .  We're confused about why
> >   you do this (when everywhere else it's either  rl == 0   or
> >   rl == maximum possible rl).  Can you clarify?
>
> do_global_mode is only equivalent to rl==reflevels-1 during
> initialisation.  Initialisation is different from evolution, since
> the levels are initialised one by one.  That is, all levels are
> "active" at t=0.
>
> During evolution, at any given time, not all levels may be active,
> since some levels may be skipped at that time.  Therefore
> finest_active_reflevel can be different from reflevels-1.
>
> The test is nowhere rl == maximum possible rl.  This would be an
> error, since changing the maximum possible rl must not have any
> effect on the physics.
>
> EvolutionII proceeds from coarsest to finest to allow people to apply
> boundary conditions, which interpolate from coarser levels.  In my
> experience, people prefer to have global mode routines run after
> local mode routines in the analysis bin, which motivated my choice.
> (This allows people e.g. to call reduction routines.)  During
> EvolutionI, in my experience people prefer to run global mode
> routines before local mode routines.  (This allows people e.g. to
> choose a gauge condition.)
>
> In the end, it turned out that these "preferences" do not work in
> general, which is why there are now global loop-local routines.  This
> mechanism allows people to choose the order between global and local
> routines, and it allows people to have more complicated schedules as
> well.  At the moment, I think that relying on the order between
> global and local routines is almost always a mistake, and I keep this
> order only for backwards compatibility.  If you need a certain order,
> then use global and global loop-local routines instead.
>
>
>
> By the way, I find more and more that the Cactus scheduler in its
> current form is too restrictive.  This is why I try to advertise
> "schedule scripts", written by hand, which allow people to switch
> modes, loop over levels, and activate/deactivate storage at will.
> There are no working examples yet, and I'm sure there are bugs that
> need to be corrected, but in the end I think that such scripts will
> be easier to understand than the scheduler gymnastics found e.g. in
> MoL.  Tom Goodale has mentioned schedule scripts as a likely future
> feature of Cactus, meaning that it would be a good thing to
> experiment now with prototypes of such scripts for mesh refinement.
>
> -erik




More information about the developers mailing list