/[ascend]/trunk/pygtk/simulation.h
ViewVC logotype

Contents of /trunk/pygtk/simulation.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 900 - (show annotations) (download) (as text)
Wed Oct 25 06:03:04 2006 UTC (13 years, 3 months ago) by johnpye
File MIME type: text/x-chdr
File size: 2886 byte(s)
The 'sim' object is correctly accessible from script methods now, even if run during on_load.
Added 'getSimulation' to registry.cpp, added 'runDefaultMethod' to Simulation, added 'getMethod' to Type.
Running of 'on_load' is instigated at the Python level now, so that relevent python variables are set at simulations are built, etc. This appears to have cause some changes to the way the solver behaves, possibly.
Added SearchProcList to exports in libascend.

1 #ifndef ASCXX_SIMULATION_H
2 #define ASCXX_SIMULATION_H
3
4 #include <string>
5 #include <vector>
6 #include <map>
7
8 #include "symchar.h"
9 #include "type.h"
10 #include "instance.h"
11 #include "variable.h"
12 #include "relation.h"
13
14 #include "config.h"
15 extern "C"{
16 #include <compiler/createinst.h>
17 #include <solver/slv_types.h>
18 }
19
20 class Solver;
21 class SolverParameters;
22 class SolverStatus;
23 class IncidenceMatrix;
24 class SolverReporter;
25
26 /**
27 A class to contain singularity information as returned by the DOF
28 function slvDOF_structsing.
29 */
30 class SingularityInfo{
31 public:
32 bool isSingular() const;
33 std::vector<Relation> rels; /**< relations involved in the singularity */
34 std::vector<Variable> vars; /**< variables involved in the singularity */
35 std::vector<Variable> freeablevars; /**< vars that should be freed */
36 };
37
38 enum StructuralStatus{
39 ASCXX_DOF_UNDERSPECIFIED=1,
40 ASCXX_DOF_SQUARE=2, /* = everything's ok */
41 ASCXX_DOF_OVERSPECIFIED=4,
42 ASCXX_DOF_STRUCT_SINGULAR=3
43 };
44
45 /**
46 @TODO This class is for *Simulation* instances.
47
48 Handle instantiating, running initialisation functions, solving
49 and outputing results of solutions.
50
51 In ASCEND C-code, a simulation is a special type of Instance. It
52 has a 'simulation root' instance which often needs to be used for
53 solving, inspecting, etc, rather than the simulation instance itself.
54 */
55 class Simulation : public Instanc{
56 friend class IncidenceMatrix;
57 friend class SolverStatus;
58 friend class Integrator;
59
60 private:
61 Instanc simroot;
62 slv_system_structure *sys;
63 bool is_built;
64 SingularityInfo *sing; /// will be used to store this iff singularity found
65
66 // options to pass to BinTokenSetOptions
67 /// @TODO these should probably be put somewhere else
68 std::string *bin_srcname;
69 std::string *bin_objname;
70 std::string *bin_libname;
71 std::string *bin_cmd;
72 std::string *bin_rm;
73
74 int activeblock;
75
76 protected:
77 slv_system_structure *getSystem();
78
79 public:
80 explicit Simulation(Instance *i, const SymChar &name);
81 Simulation(const Simulation &);
82 ~Simulation();
83
84 Instanc &getModel();
85
86 void runDefaultMethod();
87 void run(const Method &method);
88 void run(const Method &method, Instanc &model);
89 enum StructuralStatus checkDoF() const;
90 void checkInstance();
91 void build();
92 void solve(Solver s, SolverReporter &reporter);
93 std::vector<Variable> getFixableVariables();
94 std::vector<Variable> getVariablesNearBounds(const double &epsilon=1e-4);
95
96 void write();
97
98 void setSolver(Solver &s);
99 const Solver getSolver() const;
100
101 SolverParameters getSolverParameters() const;
102 void setSolverParameters(SolverParameters &);
103
104 IncidenceMatrix getIncidenceMatrix();
105
106 const std::string getInstanceName(const Instanc &) const;
107
108 void processVarStatus();
109 const int getNumVars();
110
111 const int getActiveBlock() const;
112
113 std::vector<Variable> getFreeableVariables();
114 bool checkStructuralSingularity();
115 const SingularityInfo &getSingularityInfo() const;
116 };
117
118
119 #endif

john.pye@anu.edu.au
ViewVC Help
Powered by ViewVC 1.1.22