[Users] using WeylScal4 and Multipole for WF output -- scheduling issues

Ian Hinder ian.hinder at aei.mpg.de
Fri Oct 22 02:55:12 CDT 2010


On 21 Oct 2010, at 20:58, Bernard Kelly wrote:

> Hi all.
>
> I'm trying some GW extraction from a Carpet/McLachlan black-hole  
> binary evolution. I thought the combination of thorns WeylScal4 and  
> Multipole would give me something reasonable, but I'm having trouble  
> with it.
>
> I'm attaching a parameter file for my run. As you can see, the  
> extraction is supposed to be over a set of coordinate spheres at  
> radii 45, 50 55, 60 65, & 70.
>
> What I get is NaN in the WFs at all timesteps after t=0. I'm also  
> outputting 2D data (though not as frequently), and Psi4 seems well- 
> behaved. So what's going wrong?
>
> I have noted that though the routine "Multipole_Calc" should happen  
> after "calc_np" according to its schedule.ccl, it appears -before-  
> GROUP WeylScal4_Calculate in the run's initial printing of scheduled  
> routines.

Could you post the schedule output?  According to the copy of the code  
that I have from the release version, Multipole_Calc is called in  
ANALYSIS and WeylScal4_Calculate is called in MoL_PseudoEvolution,  
which is called in EVOL (and some other places).  The calc_np is a  
relic from when both were called in ANALYSIS.

> Suggestions appreciated,

I tried to run your parameter file to test, but unfortunately I have  
some work-in-progress hacks to my local copy of WeylScal4, so it  
didn't run.  Nevertheless, I think I know what the problem is.  The  
spatial triad used by WeylScal4 is a coordinate triad (d/dph, d/dr, d/ 
dth), suitably orthonormalised.  This triad is singular on the z axis,  
and the way it is computed there leads to a NaN.  When you compute  
spherical harmonic modes, points on the z axis (th = 0) are multiplied  
by sin(th) = 0, so the value on the axis is never used, but  
numerically the NaN still causes problems.

There are several approaches to this:

1. Replace the triad at that point with a different one.  This way,  
Psi4 on th = 0 is still "Psi4", just with respect to a different  
tetrad at that point.  This is probably the best approach, and I have  
it implemented in my local copy.  I can commit this to the development  
version.

2. Use an open integration formula on (0,Pi) on the 2-sphere when  
doing the mode decomposition.  This means that the point at th = 0 is  
not used.  Multipole does not do this, but it wouldn't be too hard to  
modify it.

3. Do a numerical trick to make sure that the point at th = 0 doesn't  
have a NaN.  The particular trick I usually use is to offset the  
coordinates used to construct the spatial triad by 10^-15 in one  
direction.

WeylScal4::offset                    = 1e-15

This is what I did before I implemented the triad change on the axis.

What do other people do to get around this problem?  Would some more  
physical tetrad (e.g. quasi-Kinnersley?) help?

> P.S. Is this appropriate to einsteintoolkit, or Cactus at large? I'm  
> using the ET_2010_06 release ...

WeylScal4 and Multipole are both part of the Einstein Toolkit (in the  
EinsteinAnalysis arrangement), so discussion is probably best on the  
ET list.  I have CC'd this message to that list.

Other comments about your parameter file:

* You have asked for the mode decomposition of Psi4r and Psi4i  
individually, and you have not set the spin weight parameter, so it  
will default to 0, which is not what you want.  Try

Multipole::variables = "WeylScal4::Psi4r{sw=-2  
cmplx='WeylScal4::Psi4i' name='Psi4'}"

instead.  This tells Multipole to use spin weight -2 for Psi4, and to  
treat Psi4r and Psi4i as the real and imaginary parts of a complex  
number.  This means you don't have to recombine the modes of the real  
and imaginary parts by hand.  WeylScal4 and Multipole could be  
modified to work with Cactus complex grid functions, but I don't have  
any experience with using them, and Kranc does not currently support  
them.

* Your time_refinement_factors parameter is quite aggressive - you are  
using time refinement only for finest four levels.  You can probably  
get away with time refinement for the last 6, or more depending on  
your finite differencing order and value of eta.

* I recommend using the parameters

  TimerReport::out_every                  = 32
  TimerReport::n_top_timers               = 40

which will give you a quick overview of the parts of the code which  
are taking the most time.

Apart from those points, the parameter file looks fine.

-- 
Ian Hinder
ian.hinder at aei.mpg.de



More information about the Users mailing list