aboutsummaryrefslogtreecommitdiff
path: root/Tools
diff options
context:
space:
mode:
authorIan Hinder <ian.hinder@aei.mpg.de>2011-11-28 23:29:01 +0100
committerIan Hinder <ian.hinder@aei.mpg.de>2011-11-29 00:02:06 +0100
commitbbffc36ad42a1177f2f784bda23741302fd44dd6 (patch)
treede0832765b19e6055cbc2e1a6b24382692e5d545 /Tools
parent0fae31f1f74a6de36bf7327837c722cf09b5340e (diff)
Differencing.m: Add StencilSize function to return the stencil size used in an equation
Diffstat (limited to 'Tools')
-rw-r--r--Tools/CodeGen/Differencing.m26
1 files changed, 26 insertions, 0 deletions
diff --git a/Tools/CodeGen/Differencing.m b/Tools/CodeGen/Differencing.m
index 60e4b80..499fe81 100644
--- a/Tools/CodeGen/Differencing.m
+++ b/Tools/CodeGen/Differencing.m
@@ -141,6 +141,8 @@ shift::usage = "";
spacing::usage = "";
ComponentDerivativeOperatorStencilWidth::usage = "";
CheckStencil::usage = "";
+StencilSize::usage = "";
+
GridFunctionDerivativeToDef;
Begin["`Private`"];
@@ -265,6 +267,30 @@ DefFn[
name, zeroDims]},
{value, lookup[p, AllowedValues]}]]]]];
+(* It would be good to refactor StencilSize and CheckStencil as much
+ of the logic is repeated *)
+DefFn[
+ StencilSize[derivOps_, eqs_, name_, zeroDims_] :=
+ Module[{gfds, rgzList, rgz},
+ gfds = Map[GridFunctionDerivativesInExpression[{#}, eqs, zeroDims] &, derivOps];
+ rgzList = MapThread[If[Length[#2] > 0, DerivativeOperatorStencilWidth[#1,zeroDims], {0,0,0}] &, {derivOps, gfds}];
+ If[Length[rgzList] === 0, Return[{0,0,0}]];
+ rgz = Map[Max, Transpose[rgzList]]]];
+
+DefFn[
+ StencilSize[derivOps_, eqs_, name_, zeroDims_, intParams_] :=
+ Module[{psUsed, p},
+ psUsed = parametersUsedInOps[derivOps, intParams];
+ If[Length[psUsed] > 1, Throw["Too many parameters in partial derivatives"]];
+ If[psUsed === {},
+ StencilSize[derivOps,eqs,name,zeroDims],
+ p = psUsed[[1]];
+ {getParamName[p],
+ Table[{value,
+ StencilSize[derivOps/.getParamName[p]->value, eqs,
+ name, zeroDims]},
+ {value, lookup[p, AllowedValues]}]}]]];
+
(*************************************************************)
(* Misc *)
(*************************************************************)