aboutsummaryrefslogtreecommitdiff
path: root/Tools/CodeGen/ConservationCalculation.m
diff options
context:
space:
mode:
authorIan Hinder <ian.hinder@aei.mpg.de>2010-10-01 14:11:37 +0200
committerIan Hinder <ian.hinder@aei.mpg.de>2010-10-01 14:11:37 +0200
commitc134984ed7a4aac36e4d1b6eb056bc870562166e (patch)
treed4229d9c6cff8da36ab94d93c5d40c8ceaf5248e /Tools/CodeGen/ConservationCalculation.m
parent979539459e643028d63adb0b02bcb77857ea646b (diff)
ConservationCalculation: Implement HLLE flux
Diffstat (limited to 'Tools/CodeGen/ConservationCalculation.m')
-rw-r--r--Tools/CodeGen/ConservationCalculation.m66
1 files changed, 35 insertions, 31 deletions
diff --git a/Tools/CodeGen/ConservationCalculation.m b/Tools/CodeGen/ConservationCalculation.m
index 1bb0fc9..4831c7a 100644
--- a/Tools/CodeGen/ConservationCalculation.m
+++ b/Tools/CodeGen/ConservationCalculation.m
@@ -28,6 +28,8 @@ DiffMinus;
ShiftMinus;
PDplus;
ConservationCalculationDeclaredGroups;
+ConservationDifferencingRealParameters;
+hlleAlpha;
Begin["`Private`"];
@@ -39,6 +41,11 @@ ConservationDifferencingOperators[] :=
PDplus[i_] -> DPlus[i]
};
+ConservationDifferencingRealParameters[] :=
+{
+ hlleAlpha
+};
+
zeroRHSCalc[calc_] :=
{
Name -> lookup[calc,Name] <> "_zero_rhs",
@@ -115,38 +122,35 @@ reconstructCalc[calc_, i_] :=
Equations ->
Flatten[Table[minmodVar[v,i, leftSymbol[v], rightSymbol[v]],
{v, reconsVars[calc]}], 1]
-}
+};
-fluxCalc[i_] :=
-{
- Name -> "eulerauto_flux_" <> ToString[i],
- ApplyBCs -> True,
- Where -> Interior,
- Schedule -> {"in MoL_CalcRHS after eulerauto_conserved_flux_" <> ToString[i]},
- Shorthands -> {vRightTemp[ui]},
- Equations ->
+replaceVars[x_, vars_, f_] :=
+ Module[{},
+ x /. Map[(# -> f[#])&, vars]];
+
+hlle[flux[q_, j_] -> frhs_, vars_] :=
+ Module[{},
{
- vRightTemp[ui] -> ShiftMinus[vRight[ui],i],
-
- DenF -> 1/2 (eulerDenFlux[rhoLeft, vLeft, pLeft, i] +
- eulerDenFlux[ShiftMinus[rhoRight,i],
- vRightTemp,
- ShiftMinus[pRight,i], i] +
- alpha (ShiftMinus[DenRight,i] - DenLeft)),
-
- SF[uj] -> 1/2 (eulerSFlux[rhoLeft, vLeft, pLeft, {i, uj}] +
- eulerSFlux[ShiftMinus[rhoRight, i],
- vRightTemp,
- ShiftMinus[pRight, i], {i, uj}] +
- alpha (ShiftMinus[SRight[uj],i] - SLeft[uj])),
-
- EnF -> 1/2 (eulerEnFlux[rhoLeft, vLeft, pLeft, EnLeft, i] +
- eulerEnFlux[ShiftMinus[rhoRight,i],
- vRightTemp,
- ShiftMinus[pRight,i], ShiftMinus[EnRight,i], i] +
- alpha (ShiftMinus[EnRight,i] - EnLeft))
- }
-};
+ leftSymbol[fluxSymbol[q]] -> replaceVars[frhs, vars, leftSymbol],
+ rightSymbol[fluxSymbol[q]] -> replaceVars[frhs, vars, rightSymbol],
+ fluxSymbol[q] ->
+ 1/2(leftSymbol[fluxSymbol[q]] + rightSymbol[fluxSymbol[q]] +
+ hlleAlpha(ShiftMinus[rightSymbol[q],j] - leftSymbol[q]))
+ }];
+
+fluxCalc[calc_, i_] :=
+ Module[{fluxes = Select[lookup[calc, Equations], MatchQ[#, flux[_,i]->_] &]},
+ {
+ Name -> lookup[calc,Name] <> "_flux_" <> ToString[i],
+ ApplyBCs -> True,
+ Where -> Interior,
+ Schedule -> {"in MoL_CalcRHS after " <> lookup[calc,Name] <>
+ "_conserved_flux_" <> ToString[i]},
+ Shorthands -> Join[Map[leftSymbol[fluxSymbol[#]]&, consVars[calc]],
+ Map[rightSymbol[fluxSymbol[#]]&, consVars[calc]]],
+ Equations ->
+ Flatten[Map[hlle[#,GridFunctionsInExpression[#[[2]], lookup[calc, Groups]]] &, fluxes],1]
+ }];
rhs[calc_, i_] :=
{
@@ -168,7 +172,7 @@ ProcessConservationCalculation[calc_] :=
Table[
{reconstructCalc[calc, i],
(* conservedFluxCalc[i], *)
-(* fluxCalc[i], *)
+ fluxCalc[calc, i],
rhs[calc, i]}, {i, 1, 1}], 1]
}];