summaryrefslogtreecommitdiff
path: root/gui/libs/ofxAChaosLib/src/AChaosNavierStokes.h
diff options
context:
space:
mode:
Diffstat (limited to 'gui/libs/ofxAChaosLib/src/AChaosNavierStokes.h')
-rw-r--r--gui/libs/ofxAChaosLib/src/AChaosNavierStokes.h93
1 files changed, 93 insertions, 0 deletions
diff --git a/gui/libs/ofxAChaosLib/src/AChaosNavierStokes.h b/gui/libs/ofxAChaosLib/src/AChaosNavierStokes.h
new file mode 100644
index 0000000..885379e
--- /dev/null
+++ b/gui/libs/ofxAChaosLib/src/AChaosNavierStokes.h
@@ -0,0 +1,93 @@
+/*
+ 32/64 bits A-Chaos Lib in openFrameworks
+ (c) s373.net/x 2004, 2012, 2015
+ http://s373.net/code/A-Chaos-Lib/A-Chaos.html
+ programmed by Andre Sier, revised 2015
+ License: MIT
+*/
+#pragma once
+#include "AChaosBase.h"
+
+class AChaosNavierStokes : public AChaosBase {
+public:
+
+ REAL a, b, c, d, e, r, dt;
+
+ vector<string> param_labels={"nv","nw","nx","ny","nz","r","dt"};
+
+ AChaosNavierStokes(){}
+ ~AChaosNavierStokes(){}
+
+ virtual void setup(REAL * params = NULL){
+
+ AChaosBase::init(params, 7, 5);
+
+ if(params==NULL){
+ //classic navierstokes
+ a = 1.0;
+ b = 1.0;
+ c = 1.0;
+ d = 1.0;
+ e = 1.0;
+ r = 28.0;
+ dt = 0.01;
+ REAL p[7] = {a,b,c,d,e,r,dt};
+ set(p);
+ } else { set(params); }
+
+ }
+
+ void reset(){
+ a = iv[0];
+ b = iv[1];
+ c = iv[2];
+ d = iv[3];
+ e = iv[4];
+ r = iv[5];
+ dt = iv[6];
+ }
+
+#define nava(a, b, c, d, e) ((-2*(a)) + (4*(b)*(c)) + (4*(d)*(e)))
+#define navb(a, b, c) ((-9*(b)) + (3*(a)*(c)))
+#define navc(a, b, c, r) ((-5*(c)) + (-7*(a)*(b)) + (r))
+#define navd(a, d, e) ((-5*(d)) - ((a)*(e)))
+#define nave(a, d, e) ((-3*(a)*(d)) - (e))
+
+ void calc(){
+
+ REAL dt2=dt/2., afa, bfb, cfc, dfd, efe;
+ REAL fa, fb, fc, fd, fe;
+ REAL ffa, ffb, ffc, ffd, ffe;
+
+ fa=nava(a, b, c, d, e);
+ fb=navb(a, b, c);
+ fc=navc(a, b, c, r);
+ fd=navd(a, d, e);
+ fe=nave(a, d, e);
+
+ afa = a +(dt*fa);
+ bfb = b +(dt*fb);
+ cfc = c +(dt*fc);
+ dfd = d +(dt*fd);
+ efe = e +(dt*fe);
+
+ ffa = nava(afa,bfb,cfc,dfd,efe);
+ ffb = navb(afa,bfb,cfc);
+ ffc = navc(afa,bfb,cfc,r);
+ ffd = navd(afa,dfd,efe);
+ ffe = nave(afa,dfd,efe);
+
+ a += (dt2*(fa+ffa));
+ b += (dt2*(fb+ffb));
+ c += (dt2*(fc+ffc));
+ d += (dt2*(fd+ffd));
+ e += (dt2*(fe+ffe));
+
+ ov[0] = a;
+ ov[1] = b;
+ ov[2] = c;
+ ov[3] = d;
+ ov[4] = e;
+
+ }
+}; \ No newline at end of file