diff options
author | Ian Hinder <ian.hinder@aei.mpg.de> | 2013-09-06 17:36:34 +0200 |
---|---|---|
committer | Ian Hinder <ian.hinder@aei.mpg.de> | 2013-09-06 17:36:34 +0200 |
commit | 59e0613e1326ed133701147132e8968347a0c7fb (patch) | |
tree | 47234290b6c7405b0bd0a05c5eeca9c2530bec10 /Tools/CodeGen | |
parent | 129c36bd852d4a74269464c902546eeab78a370c (diff) |
Move expression generation and assignment functions from CalculationFunction.m to CodeGenKranc.m
Diffstat (limited to 'Tools/CodeGen')
-rw-r--r-- | Tools/CodeGen/CalculationFunction.m | 31 | ||||
-rw-r--r-- | Tools/CodeGen/CodeGenKranc.m | 22 |
2 files changed, 28 insertions, 25 deletions
diff --git a/Tools/CodeGen/CalculationFunction.m b/Tools/CodeGen/CalculationFunction.m index fcc446b..ce49c5f 100644 --- a/Tools/CodeGen/CalculationFunction.m +++ b/Tools/CodeGen/CalculationFunction.m @@ -132,25 +132,6 @@ simpCollect[collectList_, eqrhs_, localvar_, debug_] := all]; -(* Return a CodeGen block which assigns dest by evaluating expr *) -assignVariableFromExpression[dest_, expr_, declare_, vectorise_, noSimplify:Boolean : False] := - Module[{type, cleanExpr, code}, - type = If[StringMatchQ[ToString[dest], "dir*"], "ptrdiff_t", DataType[]]; - code = If[declare, type <> " CCTK_ATTRIBUTE_UNUSED ", ""] <> ToString[dest] <> " = " <> - generateCodeFromExpression[expr, vectorise, noSimplify] <> ";\n"; - code = LineBreak[code, 70] <> "\n"; - {code}]; - -generateCodeFromExpression[expr_, vectorise_, noSimplify:Boolean : False] := - Module[{cleanExpr, code}, - cleanExpr = ReplacePowers[expr, vectorise, noSimplify]; - code = ToString[cleanExpr, CForm, PageWidth -> Infinity]; - code = StringReplace[code, "normal1" -> "normal[0]"]; - code = StringReplace[code, "normal2" -> "normal[1]"]; - code = StringReplace[code, "normal3" -> "normal[2]"]; - code = StringReplace[code, "BesselJ"-> "gsl_sf_bessel_Jn"]; - code = StringReplace[code, "\"" -> ""]; - {code}]; (* -------------------------------------------------------------------------- Shorthands @@ -741,18 +722,18 @@ DefFn[ InfoMessage[InfoFull, "Generating code for " <> ToString[eq2[[1]], InputForm]]; Which[ SameQ[Head[eq2[[2]]], IfThen], - ret = assignVariableFromExpression[eq2[[1]], + ret = AssignVariableFromExpression[eq2[[1]], eq2[[2]] /. IfThen[cond_, x__]:> IfThen[Scalar[cond], x], declare2, OptionValue[UseVectors], noSimplify];, SameQ[Head[eq2], IfThenGroup], vars = eq2[[2,All,1]]; cond = eq2[[1]]; preDeclare = Pick[vars, declare2]; ret = {Map[DeclareVariableNoInit[#, DataType[]] &, Complement[Union[preDeclare], localName/@gfsInRHS]], {"\n"}, - Conditional[generateCodeFromExpression[Scalar[cond], False], - Riffle[assignVariableFromExpression[#[[1]], #[[2]], False, OptionValue[UseVectors], noSimplify]& /@ eq2[[2]], "\n"], - Riffle[assignVariableFromExpression[#[[1]], #[[2]], False, OptionValue[UseVectors], noSimplify]& /@ eq2[[3]], "\n"]]};, + Conditional[GenerateCodeFromExpression[Scalar[cond], False], + Riffle[AssignVariableFromExpression[#[[1]], #[[2]], False, OptionValue[UseVectors], noSimplify]& /@ eq2[[2]], "\n"], + Riffle[AssignVariableFromExpression[#[[1]], #[[2]], False, OptionValue[UseVectors], noSimplify]& /@ eq2[[3]], "\n"]]};, True, - ret = assignVariableFromExpression[eq2[[1]], eq2[[2]], declare2, OptionValue[UseVectors], noSimplify]; + ret = AssignVariableFromExpression[eq2[[1]], eq2[[2]], declare2, OptionValue[UseVectors], noSimplify]; ]; ret ]; @@ -866,7 +847,7 @@ DefFn[ VectorisationSimpleAssign[FlattenBlock[gridName[#]] & /@ Map[First, eqs2], Map[Last, eqs2]], Map[ - assignVariableFromExpression[FlattenBlock@gridName[#[[1]]], #[[2]], False, False, True] &, eqs2]]] + AssignVariableFromExpression[FlattenBlock@gridName[#[[1]]], #[[2]], False, False, True] &, eqs2]]] }, opts]]]; diff --git a/Tools/CodeGen/CodeGenKranc.m b/Tools/CodeGen/CodeGenKranc.m index 952b79e..d42d0c1 100644 --- a/Tools/CodeGen/CodeGenKranc.m +++ b/Tools/CodeGen/CodeGenKranc.m @@ -40,6 +40,8 @@ InitialiseGridLoopVariables::usage = "InitialiseGridLoopVariables[] returns a bl GenericGridLoop::usage = ""; ReplacePowers::usage = ""; CalculationMacros; +AssignVariableFromExpression; +GenerateCodeFromExpression; Begin["`Private`"]; @@ -406,6 +408,26 @@ CalculationMacros[vectorise_:False] := "QAD(x) (SQR(SQR(x)))"}] ]]; +(* Return a CodeGen block which assigns dest by evaluating expr *) +AssignVariableFromExpression[dest_, expr_, declare_, vectorise_, noSimplify:Boolean : False] := + Module[{type, cleanExpr, code}, + type = If[StringMatchQ[ToString[dest], "dir*"], "ptrdiff_t", DataType[]]; + code = If[declare, type <> " CCTK_ATTRIBUTE_UNUSED ", ""] <> ToString[dest] <> " = " <> + GenerateCodeFromExpression[expr, vectorise, noSimplify] <> ";\n"; + code = LineBreak[code, 70] <> "\n"; + {code}]; + +GenerateCodeFromExpression[expr_, vectorise_, noSimplify:Boolean : False] := + Module[{cleanExpr, code}, + cleanExpr = ReplacePowers[expr, vectorise, noSimplify]; + code = ToString[cleanExpr, CForm, PageWidth -> Infinity]; + code = StringReplace[code, "normal1" -> "normal[0]"]; + code = StringReplace[code, "normal2" -> "normal[1]"]; + code = StringReplace[code, "normal3" -> "normal[2]"]; + code = StringReplace[code, "BesselJ"-> "gsl_sf_bessel_Jn"]; + code = StringReplace[code, "\"" -> ""]; + {code}]; + End[]; EndPackage[]; |