aboutsummaryrefslogtreecommitdiff
path: root/Tools/CodeGen/CodeGenCactus.m
diff options
context:
space:
mode:
authorErik Schnetter <schnetter@gmail.com>2012-09-08 15:22:11 -0400
committerErik Schnetter <schnetter@gmail.com>2012-09-08 15:22:11 -0400
commit84338f2fd6af2160bf2ca4f44d7beacdba4341fc (patch)
tree8f95549cb6a5cf1cf620b7437e0e4d6a95cb4888 /Tools/CodeGen/CodeGenCactus.m
parenta5c91279f1a58305c657b25dd399eaefd37ed8dd (diff)
Handle Piecewise[] in code generation
Replace Piecewise[] by IfThen[] calls. Unfortunately, this does not work with vectorisation.
Diffstat (limited to 'Tools/CodeGen/CodeGenCactus.m')
-rw-r--r--Tools/CodeGen/CodeGenCactus.m10
1 files changed, 10 insertions, 0 deletions
diff --git a/Tools/CodeGen/CodeGenCactus.m b/Tools/CodeGen/CodeGenCactus.m
index 33b1c6b..9c85bd4 100644
--- a/Tools/CodeGen/CodeGenCactus.m
+++ b/Tools/CodeGen/CodeGenCactus.m
@@ -741,6 +741,16 @@ DefFn[
rhs = rhs /. 8/3 -> keightthird;
rhs = rhs /. -8/3 -> -keightthird;
*)
+
+ (* Handle Piecewise function *)
+ (* TODO: This does not work with vectorisation, since IfThen
+ there expects a constant condition *)
+ rhs = rhs /. Piecewise -> piecewise1
+ //. piecewise1[pairs_List, val_:0] :>
+ If[pairs==={}, val,
+ IfThen[First[pairs][[2]],
+ First[pairs][[1]],
+ piecewise1[Rest[pairs], val]]];
(* Remove parentheses *)
rhs = rhs //. Parenthesis[xx_] -> xx;