$$Date$$

Abstract

WaveMoL is an example implementation of a thorn that uses the method of lines thorn MoL. The wave equation in ﬁrst order form is implemented.

WaveToy is the simple test thorn that comes with Cactus as standard. This is written so that it solves the wave equation

$${\partial}_{t}^{2}\varphi ={\partial}_{{x}^{i}}^{2}{\varphi}^{i}$$ | (1) |

directly using the leapfrog scheme. This form of the equations isn’t suitable for use with the method of lines.

The purpose of this thorn is to rewrite the equations in ﬁrst order form

$$\begin{array}{rcll}{\partial}_{t}\Phi & =& {\partial}_{{x}^{i}}{\Pi}^{i},& \text{(2)}\text{}\text{}\\ {\partial}_{t}{\Pi}^{j}& =& {\partial}_{{x}^{j}}\Phi ,& \text{(3)}\text{}\text{}\\ {\partial}_{t}\varphi & =& \Phi ,& \text{(4)}\text{}\text{}\\ {\partial}_{{x}^{j}}\varphi & =& {\Pi}^{j}.& \text{(5)}\text{}\text{}\end{array}$$

The ﬁrst three equations (which expand to ﬁve separate PDEs) will be evolved. The ﬁnal equation is used to set the initial data and can be thought of as a constraint.

This will be implemented using simple second order diﬀerencing in space. Time evolution is performed by the method of lines thorn MoL.

The equations are evolved entirely using the method of lines thorn. So all we have to provide (for the evolution) is a method of calculating the right hand side of equation (2) and boundary conditions. The boundary conditions are standard from wavetoy itself. The right hand side is calculated using second order centred ﬁnite diﬀerences.

To be compatible with the method of lines thorn we must let it know that the GFs $\left(\varphi ,\Pi ,{\Phi}^{j}\right)$ exist and where they are stored. They should all have at least two time levels (although the addition of extra time levels may not cause problems it’s just wasting space). The GFs corresponding to the right hand sides must also be registered with the MoL thorn. These should only have one time level. MoL is informed of the existence of these grid functions through the accumulator parameters and the aliased functions.

bound | Scope: private | KEYWORD |

Description: Type of boundary condition to use
| ||

Range | Default: none | |

none | No boundary condition
| |

ﬂat | Flat boundary condition
| |

radiation | Radiation boundary condition
| |

wavemol_maxnumconstrainedvars | Scope: restricted | INT |

Description: The maximum number of constrained variables used by WaveMoL
| ||

Range | Default: 1 | |

1:1 | The energy
| |

wavemol_maxnumevolvedvars | Scope: restricted | INT |

Description: The maximum number of evolved variables used by WaveMoL
| ||

Range | Default: 5 | |

5:5 | Just 5: phi and the four derivatives
| |

mol_num_constrained_vars | Scope: shared from METHODOFLINES | INT |

mol_num_evolved_vars | Scope: shared from METHODOFLINES | INT |

mol_num_saveandrestore_vars | Scope: shared from METHODOFLINES | INT |

Implements:

wavemol

Group Names | Variable Names | Details | |

scalarevolvemol_scalar | compact | 0 | |

phi | description | The scalar ﬁeld and time derivative | |

phit | dimensions | 3 | |

distribution | DEFAULT | ||

group type | GF | ||

tags | tensortypealias=”Scalar” | ||

timelevels | 3 | ||

variable type | REAL | ||

scalarevolvemol_vector | compact | 0 | |

phix | description | The scalar ﬁeld spatial derivatives | |

phiy | dimensions | 3 | |

phiz | distribution | DEFAULT | |

group type | GF | ||

tags | tensortypealias=”U” | ||

timelevels | 3 | ||

variable type | REAL | ||

scalarrhsmol_scalar | compact | 0 | |

phirhs | description | The right hand side for the scalar ﬁeld | |

phitrhs | dimensions | 3 | |

distribution | DEFAULT | ||

group type | GF | ||

timelevels | 1 | ||

variable type | REAL | ||

scalarrhsmol_vector | compact | 0 | |

phixrhs | description | The right hand side for the scalar ﬁeld derivatives | |

phiyrhs | dimensions | 3 | |

phizrhs | distribution | DEFAULT | |

group type | GF | ||

timelevels | 1 | ||

variable type | REAL | ||

energy | compact | 0 | |

energy | description | The energy of the ﬁeld | |

dimensions | 3 | ||

distribution | DEFAULT | ||

group type | GF | ||

timelevels | 1 | ||

variable type | REAL | ||

Uses header:

Symmetry.h

This section lists all the variables which are assigned storage by thorn CactusExamples/WaveMoL. Storage can either last for the duration of the run (Always means that if this thorn is activated storage will be assigned, Conditional means that if this thorn is activated storage will be assigned for the duration of the run if some condition is met), or can be turned on for the duration of a schedule function.

Always: | |

scalarevolvemol_scalar[3] | |

scalarevolvemol_vector[3] | |

scalarrhsmol_scalar | |

scalarrhsmol_vector | |

energy | |

CCTK_STARTUP

wavemol_startup

register banner

Language: | c | |

Type: | function | |

CCTK_BASEGRID

wavemol_initsymbound

schedule symmetries

Language: | c | |

Options: | meta | |

Type: | function | |

MoL_Register

wavemol_registervars

register variables for mol

Language: | c | |

Options: | meta | |

Type: | function | |

MoL_CalcRHS

wavemol_calcrhs

register rhs calculation for mol

Language: | c | |

Type: | function | |

MoL_PostStep

wavemol_energy

calculate the energy

Language: | c | |

Type: | function | |

CCTK_POSTINITIAL

wavemol_energy

calculate the energy

Language: | c | |

Type: | function | |

MoL_PostStep

wavemol_boundaries

register boundary enforcement in mol

Language: | c | |

Options: | level | |

Sync: | scalarevolvemol_scalar | |

scalarevolvemol_vector | ||

Type: | function | |

MoL_PostStep

applybcs

apply boundary conditions for wavemol

After: | wavemol_boundaries | |

Type: | group | |

Alias Name: | Function Name: |

ApplyBCs | WaveMoL_ApplyBCs |