From eb9a37877b8b44349f60ad37d4f6c217547ded94 Mon Sep 17 00:00:00 2001 From: Ian Hinder Date: Wed, 21 Mar 2012 20:03:18 +0100 Subject: WaveCaKernel.m: Generate calculations for 2nd and 4th order --- Examples/WaveCaKernel.m | 44 ++++++++++++++++++++++++++++++++------------ 1 file 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}}]; -- cgit v1.2.3