aboutsummaryrefslogtreecommitdiff
path: root/Examples
diff options
context:
space:
mode:
authorIan Hinder <ian.hinder@aei.mpg.de>2012-03-21 20:03:18 +0100
committerIan Hinder <ian.hinder@aei.mpg.de>2012-03-21 20:10:54 +0100
commiteb9a37877b8b44349f60ad37d4f6c217547ded94 (patch)
tree8926d3ed8092a003121453202c7206fcc845087f /Examples
parent0d86bb482c7e9b2dd519ba469ff6e7bf61d81f30 (diff)
WaveCaKernel.m: Generate calculations for 2nd and 4th order
Diffstat (limited to 'Examples')
-rw-r--r--Examples/WaveCaKernel.m44
1 files changed, 32 insertions, 12 deletions
diff --git a/Examples/WaveCaKernel.m b/Examples/WaveCaKernel.m
index f4991ea..191d544 100644
--- a/Examples/WaveCaKernel.m
+++ b/Examples/WaveCaKernel.m
@@ -1,14 +1,27 @@
<< "KrancThorn.m";
+SetEnhancedTimes[False];
+
+Do[
+
groups = {{"phi_g", {phi}}, {"pi_g", {pi}}, {"xCopy_g", {xCopy}}};
+PDstandard[fdOrder_] :=
+ Symbol["PDstandard"<>ToString[fdOrder]<>"th"];
+
+fdOrders = {2,4};
+
derivatives =
{
- PDstandard2nd[i_] -> StandardCenteredDifferenceOperator[1,1,i],
- PDstandard2nd[i_, i_] -> StandardCenteredDifferenceOperator[2,1,i]
+Sequence@@Flatten[Table[
+ {PDstandard[fdOrder][i_] -> StandardCenteredDifferenceOperator[1,fdOrder/2,i],
+ PDstandard[fdOrder][i_,i_] -> StandardCenteredDifferenceOperator[2,fdOrder/2,i],
+ PDstandard[fdOrder][i_,j_] -> StandardCenteredDifferenceOperator[1,fdOrder/2,i] *
+ StandardCenteredDifferenceOperator[1,fdOrder/2,j]},
+ {fdOrder, fdOrders}],1]
};
-PD = PDstandard2nd;
+PD = PDstandard;
f[x_] := Exp[-(x/0.1)^2];
@@ -25,22 +38,24 @@ initialGaussianCalc =
}
};
-evolveCalc =
+evolveCalc[fdOrderp_] :=
{
- Name -> "calc_rhs",
- Schedule -> {"in MoL_CalcRHS"},
+ Name -> "calc_rhs_"<>ToString[fdOrderp],
+ Schedule -> {"in MoL_CalcRHS", "at ANALYSIS"},
+ (* ConditionalOnTextuals -> {"fdOrder == "<>ToString[fdOrder]}, *)
+ Conditional -> fdOrder == fdOrderp,
Where -> Interior,
Equations ->
{
dot[phi] -> pi,
- dot[pi] -> Euc[ui,uj] PD[phi,li,lj]
+ dot[pi] -> Euc[ui,uj] PD[fdOrderp][phi,li,lj]
}
};
boundCalc =
{
Name -> "calc_bound_rhs",
- Schedule -> {"in MoL_RHSBoundaries"},
+ Schedule -> {"in MoL_RHSBoundaries", "at ANALYSIS"},
Where -> Boundary,
Equations ->
{
@@ -63,10 +78,15 @@ copyCalc =
}
};
+intParameters = {{Name -> fdOrder, Default -> 2, AllowedValues -> fdOrders}};
+
CreateKrancThornTT[groups, ".",
- "SimpleWaveCaKernel",
- Calculations -> {initialGaussianCalc, evolveCalc, copyCalc, boundCalc},
+ If[version === CaKernel, "WaveCaKernel", "WaveHost"],
+ Calculations -> {initialGaussianCalc, Sequence@@(evolveCalc/@fdOrders), boundCalc} ~Join~ If[version === CaKernel, {copyCalc}, {}],
PartialDerivatives -> derivatives,
- UseCaKernel -> True,
+ UseCaKernel -> If[version === CaKernel, True, False],
EvolutionTimelevels -> 2,
- DeclaredGroups -> {"phi_g","pi_g","xCopy_g"}];
+ DeclaredGroups -> {"phi_g","pi_g","xCopy_g"},
+ IntParameters -> intParameters];
+
+, {version, {CaKernel, Host}}];