Rocstar  1.0
Rocstar multiphysics simulation application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Coupling.h
Go to the documentation of this file.
1 /* *******************************************************************
2  * Rocstar Simulation Suite *
3  * Copyright@2015, Illinois Rocstar LLC. All rights reserved. *
4  * *
5  * Illinois Rocstar LLC *
6  * Champaign, IL *
7  * www.illinoisrocstar.com *
8  * sales@illinoisrocstar.com *
9  * *
10  * License: See LICENSE file in top level of distribution package or *
11  * http://opensource.org/licenses/NCSA *
12  *********************************************************************/
13 /* *******************************************************************
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, *
15  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES *
16  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND *
17  * NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR *
18  * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, *
20  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE *
21  * USE OR OTHER DEALINGS WITH THE SOFTWARE. *
22  *********************************************************************/
23 // $Id: Coupling.h,v 1.38 2009/11/04 15:15:14 mtcampbe Exp $
24 
25 #ifndef _COUPLING_H_
26 #define _COUPLING_H_
27 
28 using namespace std;
29 #include <vector>
30 #include <string>
31 
32 #include "FluidAgent.h"
33 #include "SolidAgent.h"
34 
35 class Scheduler;
36 class BurnAgent;
38 
39 typedef vector< Agent* > AgentList;
40 
41 #define MAXLEN 128
42 
44 public:
45  char coupling_scheme[MAXLEN]; //< Name of the coupling scheme
46  char fluid_module[MAXLEN]; //< Names of fluid module
47  char solid_module[MAXLEN]; //< Names of solid module
48  char burn_module[MAXLEN]; //< Names of burn module
49  char output_module[MAXLEN]; //< Names of IO module
50 
51  MPI_Comm communicator;
52  double simue_time; //< Maximum simulation time
53  double init_time; //< initial time stamp
54  double current_time; //< Current time stamp, init_time at beginning
55  double time_step; //< current time step
56  double maxwalltime;
59 
62 
64  double zoomFactor;
65 
66  double tolerTract; // < Tolerances for convergence check
67  double tolerVelo;
68  double tolerMass;
69  double tolerDisp;
70 
71  char timingDataDir[MAXLEN];
72  std::string timingDataFile;
73 
74  int cur_step;
75 
80 
83 
84  // internal
85  int iOutput;
86  int myRank;
87  double startTime;
88 public:
90  void read();
91  void print();
92  void update_communicator();
93  void update_start_time(int step, double t);
94 };
95 
96 // coupling
97 class Coupling : public COM_Object
98 {
99 protected:
100  std::string coupling_name;
101  vector<std::string> modules;
103  UserScheduler scheduler; //< NOTE: special simple user defined scheduler
104  UserScheduler init_scheduler; //< for initialization
106  int init_started; // initial_start
107  int restarting; // in restarting
108  int init_remeshed; // initialization after remeshing
109  // PC iteration
110  int iPredCorr; // class
111  int maxPredCorr; // modified
112 
115 
116  std::string restartInfo;
117 
118  // compute integrals
120  std::string integFname;
121 
123  std::string distFname;
124 private:
125  void baseInit();
126 public:
128  Coupling(const char *coupl_name, const char *name, Control_parameters *p, const RocmanControl_parameters *mp);
129  Coupling(const char *coupl_name, const char *fluidname, const char *solidname, Control_parameters *p, const RocmanControl_parameters *mp);
130  Coupling(const char *coupl_name, const char *fluidname, const char *solidname, const char *burnname, Control_parameters *p, const RocmanControl_parameters *mp);
131 
133  virtual ~Coupling();
134 
135  const char *name() { return coupling_name.c_str(); }
136 
138  Agent *add_agent( Agent *);
139 
142  void schedule();
143 
145  void init(double t, double dt, int reinit=0);
146 
147  void initialize(int reinit=0);
148 
150  void finalize();
151 
153  double run(double t, double dt, int iPredCorr, double zoom);
154  void run_initactions( double t, double dt);
155 
157  void input(double t);
158 
160  int get_ipc() const { return iPredCorr; }
161  int get_max_ipc() const { return maxPredCorr; }
162 
163  int initial_start() const { return init_started; }
164  int in_restart() const { return restarting; }
165 
167  int initial_remeshed() const { return init_remeshed; }
168 
169  int new_start(double t) const;
170 
171  void init_convergence( int iPredCorr);
172  int check_convergence();
173 
174  virtual void update_integrals(double currentTime) {}
175  virtual void update_distances(double currentTime) {}
176 
177  // Write out restart files (including visualization data)
178  void output_restart_files(double t);
179 
180  // Write out visualization files
181  void output_visualization_files(double t);
182 
183  const Control_parameters *get_control_param() { return param; }
184  const RocmanControl_parameters *get_rocmancontrol_param() { return rocmanparam; }
185 
186  void read_restart_info();
187  void write_restart_info(double CurrentTime, int iStep);
188 
189  void restart_at_time(double t, int step);
190  virtual void reload_rocface(const RocmanControl_parameters *param) {}
191 
192  // print for visualization
193  void print(const char *fname);
194 
195  // Experimental Interrupt
196  void Interrupt(int *,const char *);
197  int ProcessInterrupt();
198 
199 protected:
200  void callMethod(Scheduler_voidfn1_t fn, double t);
201  std::string normalize_modname(const char* mod);
202 };
203 
204 // subclass fully coupled involving fluid and solid, and maybe burn
205 class FullyCoupling: public Coupling {
206 protected:
210 public:
211  FullyCoupling(const char *coupl_name, const char *fluidname, const char *solidname, Control_parameters *p, const RocmanControl_parameters *mp):
212  Coupling(coupl_name, fluidname, solidname, p, mp), burn_agent(NULL) {}
213  FullyCoupling(const char *coupl_name, const char *fluidname, const char *solidname, const char *burnname, Control_parameters *p, const RocmanControl_parameters *mp):
214  Coupling(coupl_name, fluidname, solidname, burnname, p, mp) {}
215 
216  virtual void update_integrals(double currentTime);
217  virtual void update_distances(double currentTime);
218  virtual void reload_rocface(const RocmanControl_parameters *param);
219 };
220 
221 // fully coupled
222 #define DECLARE_NEW_FULLY_COUPLING_SCHEME( New_scheme) \
223  class New_scheme : public FullyCoupling { \
224  public: \
225  New_scheme(const char *, const char *, MPI_Comm com, Control_parameters *p, const RocmanControl_parameters *mp); \
226  New_scheme(const char *, const char *, const char*, MPI_Comm com, Control_parameters *p, const RocmanControl_parameters *mp); \
227  };
228 
229 #endif
230 
231 
232 
233 
234 
235 
virtual void update_integrals(double currentTime)
Definition: Coupling.h:174
int get_max_ipc() const
Definition: Coupling.h:161
FullyCoupling(const char *coupl_name, const char *fluidname, const char *solidname, Control_parameters *p, const RocmanControl_parameters *mp)
Definition: Coupling.h:211
int iPredCorr
Definition: Coupling.h:110
std::string distFname
Definition: Coupling.h:123
AgentList agents
Definition: Coupling.h:102
double time_step
Definition: Coupling.h:55
int init_remeshed
Definition: Coupling.h:108
double init_time
Definition: Coupling.h:53
double simue_time
Definition: Coupling.h:52
T mod(const T &x, const T &m)
Return the modulo of a number.
Definition: CImg.h:4788
int get_ipc() const
Definition: Coupling.h:160
FullyCoupling(const char *coupl_name, const char *fluidname, const char *solidname, const char *burnname, Control_parameters *p, const RocmanControl_parameters *mp)
Definition: Coupling.h:213
int in_restart() const
Definition: Coupling.h:164
#define MAXLEN
Definition: Coupling.h:41
std::string coupling_name
Definition: Coupling.h:100
double tolerTract
Definition: Coupling.h:66
double maxwalltime
Definition: Coupling.h:56
MPI_Comm communicator
Definition: Coupling.h:51
int maxNumPredCorrCycles
Definition: Coupling.h:60
int maxPredCorr
Definition: Coupling.h:111
FluidAgent * fluid_agent
Definition: Coupling.h:207
int initial_remeshed() const
true if in initialization step and remeshed is true
Definition: Coupling.h:167
const RocmanControl_parameters * rocmanparam
Definition: Coupling.h:114
std::string integFname
Definition: Coupling.h:120
double tolerMass
Definition: Coupling.h:68
Control_parameters * param
Definition: Coupling.h:113
double LastOutputTime
Definition: Coupling.h:76
Definition: Agent.h:110
std::string restartInfo
Definition: Coupling.h:116
virtual void update_distances(double currentTime)
Definition: Coupling.h:175
double tolerVelo
Definition: Coupling.h:67
vector< Agent * > AgentList
Definition: Coupling.h:37
double zoomFactor
Definition: Coupling.h:64
UserScheduler init_scheduler
Definition: Coupling.h:104
SolidAgent * solid_agent
Definition: Coupling.h:208
void(Scheduler::* Scheduler_voidfn1_t)(double)
Definition: Scheduler.h:104
double tolerDisp
Definition: Coupling.h:69
std::string timingDataFile
Definition: Coupling.h:72
double current_time
Definition: Coupling.h:54
const RocmanControl_parameters * get_rocmancontrol_param()
Definition: Coupling.h:184
void read(std::istream &is, T &t, const io_Read_write &)
Definition: io.h:132
int comm_rank
Definition: Coupling.h:105
virtual void reload_rocface(const RocmanControl_parameters *param)
Definition: Coupling.h:190
const char * name()
Definition: Coupling.h:135
int overwrite_dist
Definition: Coupling.h:122
int init_started
Definition: Coupling.h:106
double startTime
Definition: Coupling.h:87
int overwrite_integ
Definition: Coupling.h:119
UserScheduler scheduler
Definition: Coupling.h:103
const Control_parameters * get_control_param()
Definition: Coupling.h:183
int initial_start() const
Definition: Coupling.h:163
int restarting
Definition: Coupling.h:107
BurnAgent * burn_agent
Definition: Coupling.h:209
vector< std::string > modules
Definition: Coupling.h:101
double outputIntervalTime
Definition: Coupling.h:63