30 CPUs is quite a lot; do you really mean 30 CPUs, or 30 cores? What CPU are you using, and how many cores does it have? Also, what is the interconnect between the nodes? Infiniband, omnipath, gigabit ethernet, etc?
You can run a lower resolution by changing the
--define N 28
to something else. This must be a multiple of 4, and can probably go as low as 20 without the simulation crashing. [Roland: you mentioned 24 in your email. Did you try 20 and it crashed? I seem to remember 20 working at one point.] This is a measure of the number of grid cells across the black holes, so increasing it gives you more cells, higher resolution, and the run goes more slowly.
Roland's suggestions are also good, but I would make a couple of changes to what he recommended.
The original boundary condition in GW150914.rpar sets the time derivative ("rhs") of all fields to 0 on the outer spherical boundary. This fixes the fields to their initial value, so can be considered a Dirichlet (or "scalar") boundary condition: ML_BSSN::rhs_boundary_condition = "scalar". This is in general a bad thing to do (you will get almost perfect reflections of all outgoing waves), but the boundary was placed far enough away that it could not influence the waveform. This is generally very cheap with the spherical outer grid used here, and was done because we had not implemented radiative boundary conditions that worked with the spherical grids in McLachlan at the time.
The improvement that I believe Roland meant to make was to change the boundary condition to radiative (not Robin), which has now been implemented in the code. This makes the fields obey an advection-type equation on the outer boundary, assuming that all fields are solutions to outgoing radial wave equations. In Roland's parameter file, he set
NewRad::z_is_radial = yes
but this is a technical change to trick NewRad into working with the spherical grids that we use here. To change the boundary condition itself, you need to set
ML_BSSN::rhs_boundary_condition = "NewRad"
rather than "scalar".
The other change Roland made was to change final_time to half its current value:
final_time = waveform_length + outermost_detector
->
final_time = 0.5*(waveform_length + outermost_detector)
This doesn't seem correct. It is true that final_time is used to set sphere_outer_radius, but this will not halve the size of the domain. Further, it will halve the runtime of the simulation, so the simulation will stop before the BHs have merged. Instead, I would change sphere_outer_radius as follows:
-sphere_outer_radius = int((outermost_detector + final_time)/(i*hr))*i*hr
+sphere_outer_radius = int((1000)/(i*hr))*i*hr
This might make the waveform noiser, but with the changed boundary condition, it shouldn't be too bad.
This sounds liked quite a long time! It sounds too long. On the page describing the simulation,
https://einsteintoolkit.org/gallery/bbh/index.html, it says that the simulation takes 2.8 days on 128 cores of an Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz (Haswell). Assuming that you mean you are using 30 cores, and if you are using a similar CPU, then it should take 2.8 * 128/30 = 11.9 days. Is this about what you see? What speed is reported? You can see this in the output file GW150914_*.out:
----------------------------------------------------------------------------------------------------------
Iteration Time | *me_per_hour | ML_BSSN::phi | *TISTICS::maxrss_mb | *TICS::swap_used_mb
| | minimum maximum | minimum maximum | minimum maximum
----------------------------------------------------------------------------------------------------------
114640 246.602 | 10.5254966 | 0.0149352 0.9995490 | 3748 5289 | 0 0
114644 246.611 | 10.5255173 | 0.0144565 0.9995490 | 3748 5289 | 0 0
The third column is the speed of the simulation in coordinate time per hour (it is a truncation of "physical_time_per_hour").