Skip to content

Commit

Permalink
Introduce Cactus parameters to disable using stress-energy tensor and…
Browse files Browse the repository at this point in the history
… MP jacobian

These Cactus parameters switch off the stress-energy tensor and the jacobian, improving performance if the code is compiled dynamically (e.g. OpenCL).
  • Loading branch information
eschnett committed Jul 28, 2013
1 parent 9d951be commit 5944de3
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 6 deletions.
12 changes: 12 additions & 0 deletions Auxiliary/Cactus/KrancNumericalTools/GenericFD/param.ccl
Expand Up @@ -32,6 +32,18 @@ CCTK_INT boundary_width "width of boundary (fix later to use Cactus boundary ca
} 1

restricted:
CCTK_INT assume_stress_energy_state "Assume stress_energy_state has a particular value" STEERABLE=RECOVER
{
-1 :: "do not assume anything"
0:1 :: "assume off or on"
} -1

CCTK_INT assume_use_jacobian "Assume use_jacobian has a particular value" STEERABLE=RECOVER
{
-1 :: "do not assume anything"
0:1 :: "assume off or on"
} -1

CCTK_STRING jacobian_group "Name of group containing Jacobian" STEERABLE=RECOVER
{
"" :: "String of the form <implementation>::<groupname>"
Expand Down
2 changes: 1 addition & 1 deletion Tools/CodeGen/CalculationFunction.m
Expand Up @@ -937,7 +937,7 @@ it is only possible to do this outside all if(){} statements. *)
assignLocalFunctions[gs_, useVectors_, useJacobian_, NameFunc_] :=
Module[{conds, varPatterns, varsInConds, simpleVars, code},
conds =
{{"eT" ~~ _ ~~ _, "*stress_energy_state", "ToReal(0.0)"}}; (* This should be passed as an option *)
{{"eT" ~~ _ ~~ _, "assume_stress_energy_state>=0 ? assume_stress_energy_state : *stress_energy_state", "ToReal(0.0)"}}; (* This should be passed as an option *)
If[useJacobian,
conds = Append[conds, JacobianConditionalGridFunctions[]]];

Expand Down
10 changes: 6 additions & 4 deletions Tools/CodeGen/Jacobian.m
Expand Up @@ -117,9 +117,10 @@
derivatives groups *)
CreateJacobianVariables[] :=
CommentedBlock["Jacobian variable pointers",
{"bool const use_jacobian = (!CCTK_IsFunctionAliased(\"MultiPatch_GetMap\") || MultiPatch_GetMap(cctkGH) != jacobian_identity_map)\n",
" && strlen(jacobian_group) > 0;\n",
"bool const usejacobian CCTK_ATTRIBUTE_UNUSED = use_jacobian;\n",
{"const bool use_jacobian1 = (!CCTK_IsFunctionAliased(\"MultiPatch_GetMap\") || MultiPatch_GetMap(cctkGH) != jacobian_identity_map)\n",
" && strlen(jacobian_group) > 0;\n",
"const bool use_jacobian = assume_use_jacobian>=0 ? assume_use_jacobian : use_jacobian1;\n",
"const bool usejacobian CCTK_ATTRIBUTE_UNUSED = use_jacobian;\n",
"if (use_jacobian && (strlen(jacobian_determinant_group) == 0 || strlen(jacobian_inverse_group) == 0 || strlen(jacobian_derivative_group) == 0))\n",
"{\n",
" CCTK_WARN (1, \"GenericFD::jacobian_group, GenericFD::jacobian_determinant_group, GenericFD::jacobian_inverse_group, and GenericFD::jacobian_derivative_group must all be set to valid group names\");\n",
Expand Down Expand Up @@ -159,7 +160,8 @@

(* Parameters to inherit from GenericFD *)
JacobianGenericFDParameters[] :=
{{Name -> "jacobian_group", Type -> "CCTK_STRING"},
{{Name -> "assume_use_jacobian", Type -> "CCTK_INT"},
{Name -> "jacobian_group", Type -> "CCTK_STRING"},
{Name -> "jacobian_determinant_group", Type -> "CCTK_STRING"},
{Name -> "jacobian_inverse_group", Type -> "CCTK_STRING"},
{Name -> "jacobian_derivative_group", Type -> "CCTK_STRING"},
Expand Down
3 changes: 2 additions & 1 deletion Tools/CodeGen/Param.m
Expand Up @@ -224,7 +224,8 @@
{
Name -> "GenericFD",
UsedParameters ->
If[OptionValue[UseJacobian], JacobianGenericFDParameters[], {}]
Join[{{Name -> "assume_stress_energy_state", Type -> "CCTK_INT"}},
If[OptionValue[UseJacobian], JacobianGenericFDParameters[], {}]]
};

realStructs = Map[krancParamStruct[#, "CCTK_REAL", False] &, reals];
Expand Down

0 comments on commit 5944de3

Please sign in to comment.