aboutsummaryrefslogtreecommitdiff
path: root/schedule.ccl
blob: f8faeab254c38bc30cdb8197a3fda0b4db4fe983 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# Schedule definitions for thorn Exact
# $Header$

#######################################################################
# PARAMCHECK
#######################################################################

Schedule Exact_ParamCheck at PARAMCHECK
{
LANG: C
} "do consistency checks on our parameters"

#######################################################################
# INITIAL DATA
#######################################################################

# decode/copy parameters into grid scalars
# (to share them properly so Calc_Tmunu code can see them even
#  though it's compiled in other thorns)
Schedule Exact__decode_pars at INITIAL
{
LANG: Fortran
} "decode/copy thorn Exact parameters into grid scalars"

# Initial data (g and K) from a trivial slice through an exact solution.

if (CCTK_Equals(initial_data,"exact"))
{
  schedule Exact__initialize at CCTK_INITIAL
  {
    LANG: Fortran
  } "Set initial data from exact solution on a trivial slice"
}

# Initial data from an arbitrary slice through an exact solution, 
# but NOT evolving the slice afterwards.
# Note we only need storage for the slice itself, and only at startup.

if ( (CCTK_Equals(initial_data,"slice")) && ! (CCTK_Equals(evolution_method,"slice")) )
{
  schedule Exact__slice_initialize at CCTK_INITIAL
  {
    STORAGE: Exact_slice
    LANG: Fortran
  } "Set initial data from exact solution on an arbitrary slice"
}

#######################################################################
# LAPSE AND SHIFT
#######################################################################

# Lapse and/or shift from a trivial slice through an exact solution.
# At the initial time:

if ( (CCTK_Equals(initial_lapse,"exact")) || (CCTK_Equals(initial_shift,"exact")) )
{
  schedule Exact__gauge at CCTK_INITIAL
  {
    LANG: Fortran
  } "Set initial lapse and/or shift from exact solution on a trivial slice"
}

# During the evolution:

if ( (CCTK_Equals(lapse_evolution_method,"exact")) || (CCTK_Equals(shift_evolution_method,"exact")) )
{
  schedule Exact__RegisterSlicing at CCTK_STARTUP
  {
    LANG: C
  } "Register slicings"

  schedule Exact__gauge at CCTK_PRESTEP
  {
    LANG: Fortran
  } "Set evolution lapse and/or shift from exact solution on a trivial slice"
}

#######################################################################
# EVOLUTION
#######################################################################

# Fake the evolution of g and K by evolving the slice and 
# reading them off from the slice again. We need the slice and two
# temporary copies throughout. Note that if we set evolution_system 
# = "slice" without also setting initial_data = "slice", nothing will
# happen as a failsafe, and Cactus should complain about not having an
# evolution routine. Setting initial_data = "slice" on its own is ok though.

if ( (CCTK_Equals(evolution_method,"slice")) && (CCTK_Equals(initial_data,"slice")) )
{
  STORAGE: Exact_slice
  STORAGE: Exact_slicetemp1
  STORAGE: Exact_slicetemp2

  schedule Exact__slice_initialize at CCTK_INITIAL
  {
    LANG: Fortran
  } "Set initial data from exact solution on arbitrary slice"

  schedule Exact__slice_evolve at CCTK_EVOL
  {
    LANG: Fortran
  } "Evolve arbitrary slice and extract Cauchy data"
}

#######################################################################
# BOUNDARY DATA
#######################################################################

if (CCTK_Equals(overwrite_boundary,"exact"))
{
  schedule Exact__boundary at CCTK_POSTSTEP
  {
    LANG: Fortran
  } "Overwrite g and K on the boundary with exact solution data"
}