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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
SetEnhancedTimes[False];
SetSourceLanguage["C"];
(******************************************************************************)
(* Derivatives *)
(******************************************************************************)
derivOrder = 4;
derivatives =
{
PDstandardNth[i_] -> StandardCenteredDifferenceOperator[1,derivOrder/2,i],
PDstandardNth[i_, i_] -> StandardCenteredDifferenceOperator[2,derivOrder/2,i],
PDstandardNth[i_, j_] -> StandardCenteredDifferenceOperator[1,derivOrder/2,i]
StandardCenteredDifferenceOperator[1,derivOrder/2,j]
(*
PDstandardNth[i_, i_, i_] ->
StandardCenteredDifferenceOperator[3,derivOrder/2,i],
PDstandardNth[i_, i_, j_] ->
StandardCenteredDifferenceOperator[2,derivOrder/2,i]
StandardCenteredDifferenceOperator[1,derivOrder/2,j],
PDstandardNth[i_, j_, i_] ->
StandardCenteredDifferenceOperator[2,derivOrder/2,i]
StandardCenteredDifferenceOperator[1,derivOrder/2,j],
PDstandardNth[j_, i_, i_] ->
StandardCenteredDifferenceOperator[2,derivOrder/2,i]
StandardCenteredDifferenceOperator[1,derivOrder/2,j],
PDstandardNth[i_, j_, k_] ->
StandardCenteredDifferenceOperator[1,derivOrder/2,i]
StandardCenteredDifferenceOperator[1,derivOrder/2,j]
StandardCenteredDifferenceOperator[1,derivOrder/2,k]
*)
};
FD = PDstandardNth;
ResetJacobians;
DefineJacobian[PD, FD, KD, Zero3];
(* timelevels *)
evolutionTimelevels = 2;
KD = KroneckerDelta;
(******************************************************************************)
(* Tensors *)
(******************************************************************************)
(* Register the tensor quantities with the TensorTools package *)
Map [DefineTensor, {u, rho, v, w}];
(******************************************************************************)
(* Groups *)
(******************************************************************************)
evolvedGroups =
{SetGroupName [CreateGroupFromTensor [u ], "WT_u" ],
SetGroupName [CreateGroupFromTensor [v[la]], "WT_v" ],
SetGroupName [CreateGroupFromTensor [rho ], "WT_rho"]};
evaluatedGroups =
{SetGroupName [CreateGroupFromTensor [w[ua]], "WT_w"]};
declaredGroups = Join [evolvedGroups, evaluatedGroups];
declaredGroupNames = Map [First, declaredGroups];
groups = declaredGroups;
(******************************************************************************)
(* Initial data *)
(******************************************************************************)
initialCalc =
{
Name -> "WTFO_Gaussian",
Schedule -> {"AT initial"},
(* Where -> Boundary, *)
(* Where -> Interior, *)
Equations ->
{
u -> 0,
v[la] -> 0,
rho -> 0
}
};
(******************************************************************************)
(* Evolution equations *)
(******************************************************************************)
evolCalc =
{
Name -> "WTFO_RHS",
Schedule -> {"IN MoL_CalcRHS", "AT analysis"},
Where -> Interior,
Equations ->
{
dot[u] -> rho,
dot[rho] -> KD[ua,ub] PD[v[la],lb],
dot[v[la]] -> PD[rho,la]
}
};
(******************************************************************************)
(* Constraint equations *)
(******************************************************************************)
constraintsCalc =
{
Name -> "WTFO_constraints",
Schedule -> {"AT analysis"},
Where -> Interior,
Equations ->
{
w[ua] -> Eps[ua,ub,uc] PD[v[lb],lc]
}
};
(******************************************************************************)
(* Construct the thorns *)
(******************************************************************************)
calculations =
{
initialCalc,
evolCalc,
constraintsCalc
};
CreateKrancThornTT [groups, ".", "ML_WaveToyFO",
Calculations -> calculations,
DeclaredGroups -> declaredGroupNames,
PartialDerivatives -> derivatives,
UseLoopControl -> True,
EvolutionTimelevels -> evolutionTimelevels
];
|