diff --git a/utils/solvers/c++/pend.cpp b/utils/solvers/c++/pend.cpp index e0be4e691eb58bc68e5e785793074f1b129282f4..4e51952198c9156b84031dc5d5034d176fb4c462 100644 --- a/utils/solvers/c++/pend.cpp +++ b/utils/solvers/c++/pend.cpp @@ -40,13 +40,12 @@ void exportIter(int iter, double t, double x1, double y1, double x2, double y2) } double defineNumber(onelab::client *c, const std::string &name, double value, - const std::string &label, const std::map<std::string, std::string> &attributes) { std::vector<onelab::number> ns; c->get(ns, name); if(ns.empty()){ // define new parameter - onelab::number n(name, value, label); + onelab::number n(name, value); if(attributes.size()) n.setAttributes(attributes); c->set(n); return value; @@ -101,14 +100,14 @@ int main(int argc, char **argv) std::map<std::string, std::string> attr; - double l = defineNumber(c, "Geom/Length", 1.0, "Arm length [m]", attr); - double time = defineNumber(c, "Dyna/time", 0., "time [s]", attr); - double dt = defineNumber(c, "Dyna/dt", 0.001, "time step [s]", attr); - double tmax = defineNumber(c, "Dyna/tmax", 20, "max time [s]", attr); - double refresh = defineNumber(c, "Dyna/refresh", 0.05, "refresh interval [s]", attr); + double l = defineNumber(c, "Geom/arm length [m]", 1.0, attr); + double time = defineNumber(c, "Dyna/time [s]", 0., attr); + double dt = defineNumber(c, "Dyna/time step [s]", 0.001, attr); + double tmax = defineNumber(c, "Dyna/max time [s]", 20, attr); + double refresh = defineNumber(c, "Dyna/refresh interval [s]", 0.05, attr); attr["Highlight"] = "Pink"; - double theta0 = defineNumber(c, "Init/theta", 10, "Initial theta angle [deg]", attr); - double phi0 = defineNumber(c, "Init/phi", 180, "Initial phi angle [deg]", attr); + double theta0 = defineNumber(c, "Init/initial theta angle [deg]", 10, attr); + double phi0 = defineNumber(c, "Init/initial phi angle [deg]", 180, attr); // we're done if we are not in the compute phase if(action != "compute"){ @@ -163,15 +162,15 @@ int main(int argc, char **argv) if(refr >= refresh){ refr = 0; setNumber(c, name + "/Progress", time, 0, tmax, false); - setNumber(c, "Dyna/time", time); + setNumber(c, "Dyna/time [s]", time); setNumber(c, "Solu/phi", phi); addNumberChoice(c, "Solu/phi", phi); setNumber(c, "Solu/theta", theta); addNumberChoice(c, "Solu/theta", theta); - setNumber(c, "Solu/phi_dot", phi_dot); - addNumberChoice(c, "Solu/phi_dot", phi_dot); - setNumber(c, "Solu/theta_dot", theta_dot); - addNumberChoice(c, "Solu/theta_dot", theta_dot); + setNumber(c, "Solu/phi dot", phi_dot); + addNumberChoice(c, "Solu/phi dot", phi_dot); + setNumber(c, "Solu/theta dot", theta_dot); + addNumberChoice(c, "Solu/theta dot", theta_dot); // ask Gmsh to refresh onelab::string s("Gmsh/Action", "refresh"); diff --git a/utils/solvers/python/pend.py b/utils/solvers/python/pend.py index 15ac4b2a37e17997e0f19e7a0e8557a75b9fd01d..7ce01c88ea5f18dab0784f8c87f3c67b78d9eece 100755 --- a/utils/solvers/python/pend.py +++ b/utils/solvers/python/pend.py @@ -7,9 +7,6 @@ import onelab import math, os -# import sys -# sys.stderr = open('ErrorLog.txt', 'wt') - def exportMsh(le1,le2): mshFile = open(onelab.path(__file__, "pend.msh"),'w') mshFile.write('$MeshFormat\n2.2 0 8\n$EndMeshFormat\n') @@ -32,23 +29,23 @@ def exportIter(iter,t,x1,y1,x2,y2): mshFile.write('\t3\n\t1 0 0 0\n\t2 %f %f 0\n\t3 %f %f 0\n$EndNodeData\n' %(x1,y1,x2,y2)) mshFile.close() -OL = onelab.client() +c = onelab.client() g = 9.8 # acceleration of gravity m = 0.3 # mass of pendulum balls -l = OL.defineNumber('Geom/Length', value=1.0, label='Arm length [m]') -time = OL.defineNumber('Dyna/time', value=0.0, label='time [s]') -dt = OL.defineNumber('Dyna/dt', value=0.001, label='time step [s]') -tmax = OL.defineNumber('Dyna/tmax', value=20, label='max time [s]') -refresh = OL.defineNumber('Dyna/refresh', value=0.05, label='refresh interval [s]') -theta0 = OL.defineNumber('Init/theta', value=10, label='Initial theta angle [deg]', +l = c.defineNumber('Geom/arm length [m]', value=1.0) +time = c.defineNumber('Dyna/time [s]', value=0.0) +dt = c.defineNumber('Dyna/time step [s]', value=0.001) +tmax = c.defineNumber('Dyna/max time [s]', value=20) +refresh = c.defineNumber('Dyna/refresh interval [s]', value=0.05) +theta0 = c.defineNumber('Init/initial theta angle [deg]', value=10, attributes={'Highlight':'Pink'}) -phi0 = OL.defineNumber('Init/phi', value=180, label='Initial phi angle [deg]', +phi0 = c.defineNumber('Init/initial phi angle [deg]', value=180, attributes={'Highlight':'Pink'}) # we're done if we are in the "check" phase -if OL.action == 'check' : +if c.action == 'check' : exit(0) l1 = l; @@ -97,46 +94,27 @@ while (time < tmax): if refr >= refresh: refr = 0 - OL.setNumber(OL.name + '/Progress', value=time, min=0, max=tmax, visible=0) - OL.setNumber('Dyna/time', value=time) - OL.setNumber('Solu/phi', value=phi) - OL.addNumberChoice('Solu/phi', phi) - OL.setNumber('Solu/theta', value=theta) - OL.addNumberChoice('Solu/theta', theta) - OL.setNumber('Solu/phi_dot', value=phi_dot) - OL.addNumberChoice('Solu/phi_dot', phi_dot) - OL.setNumber('Solu/theta_dot', value=theta_dot) - OL.addNumberChoice('Solu/theta_dot', theta_dot) + c.setNumber(c.name + '/Progress', value=time, min=0, max=tmax, visible=0) + c.setNumber('Dyna/time [s]', value=time) + c.setNumber('Solu/phi', value=phi) + c.addNumberChoice('Solu/phi', phi) + c.setNumber('Solu/theta', value=theta) + c.addNumberChoice('Solu/theta', theta) + c.setNumber('Solu/phi dot', value=phi_dot) + c.addNumberChoice('Solu/phi dot', phi_dot) + c.setNumber('Solu/theta dot', value=theta_dot) + c.addNumberChoice('Solu/theta dot', theta_dot) # ask Gmsh to refresh - OL.setString('Gmsh/Action', value='refresh') + c.setString('Gmsh/Action', value='refresh') # stop if we are asked to (by Gmsh) - if(OL.getString(OL.name + '/Action') == 'stop'): + if(c.getString(c.name + '/Action') == 'stop'): break; exportMsh(l1, l2) exportIter(iter, time, x1, y1+l1, x2, y2+l1+l2) - OL.mergeFile(onelab.path(__file__, 'pend.msh')) + c.mergeFile(onelab.path(__file__, 'pend.msh')) iter += 1 -OL.setNumber(OL.name + '/Progress', value=0) - -# comment the following lines out if you do not have gnuplot on your system -# OL.preProcess(onelab.path(__file__,'pend.plt.ol')) -# os.system('gnuplot pend.plt') - -# run a subclient -# OL.run('subclient', './sub.py','') - -# A = OL.defineNumber('A', value=10) -# B = OL.defineNumber('Group/B', value=0, min = -10, max = 10, step = 1) -# C = OL.defineNumber('Group/C', value=2, choices = [0, 1, 2, 3], -# attributes={'Highlight':'Pink'}) -# D = OL.defineNumber('Group/D', value=3, labels = {0:'zero', 1:'un', 2:'deux', -# 3:'trois'}, attributes={'Highlight':'Blue'}) - -# UTF-8 is allowed everywhere (should be prefixed by 'u' in python 2, not -# required in python 3) -# Omega = OL.getString(u'Ω', u'∫(∂φ/∂α)³dx', help=u'ask someone@universe.org', -# choices = ['oui', 'non', u'peut-être']) +c.setNumber(c.name + '/Progress', value=0)