diff options
author | Ian Hinder <ian.hinder@aei.mpg.de> | 2010-10-01 14:11:37 +0200 |
---|---|---|
committer | Ian Hinder <ian.hinder@aei.mpg.de> | 2010-10-01 14:11:37 +0200 |
commit | c134984ed7a4aac36e4d1b6eb056bc870562166e (patch) | |
tree | d4229d9c6cff8da36ab94d93c5d40c8ceaf5248e /Tools/CodeGen/ConservationCalculation.m | |
parent | 979539459e643028d63adb0b02bcb77857ea646b (diff) |
ConservationCalculation: Implement HLLE flux
Diffstat (limited to 'Tools/CodeGen/ConservationCalculation.m')
-rw-r--r-- | Tools/CodeGen/ConservationCalculation.m | 66 |
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] }]; |