Dendro  5.01
Dendro in Greek language means tree. The Dendro library is a large scale (262K cores on ORNL's Titan) distributed memory adaptive octree framework. The main goal of Dendro is to perform large scale multiphysics simulations efficeiently in mordern supercomputers. Dendro consists of efficient parallel data structures and algorithms to perform variational ( finite element) methods and finite difference mthods on 2:1 balanced arbitary adaptive octrees which enables the users to perform simulations raning from black holes (binary black hole mergers) to blood flow in human body, where applications ranging from relativity, astrophysics to biomedical engineering.
rk.h
1 //
2 // Created by milinda on 1/29/17.
3 //
4 
13 #ifndef SFCSORTBENCH_RK_H
14 #define SFCSORTBENCH_RK_H
15 
16 #include "mesh.h"
17 
18 namespace ode {
19  namespace solver {
20 
21  class RK {
22 
23  protected :
24 
27 
29  unsigned int m_uiOrder;
30 
32  unsigned int m_uiNrp;
33 
35  MPI_Comm m_uiComm;
36 
38  double m_uiTimeBegin;
39 
41  double m_uiTimeEnd;
42 
44  double m_uiT_h;
45 
48 
50  double m_uiT_h_prev;
51 
54 
56  unsigned int m_uiCurrentStep;
57 
59  const double RK45_STAGE_1_COEF=16.0/135.0;
60 
61  const double RK45_STAGE_1_T=1.0;
62  const double RK45_STAGE_1_U=1.0;
63 
65  const double RK45_STAGE_2_COEF=0.0;
66 
67  const double RK45_STAGE_2_T=(1.0/4.0);
68  const double RK45_STAGE_2_U=(1.0/4.0);
69 
71  const double RK45_STAGE_3_COEF=6656.0/12825.0;
72 
73  const double RK45_STAGE_3_T=(3.0/8.0);
74  const double RK45_STAGE_3_U1=(3.0/32.0);
75  const double RK45_STAGE_3_U2=(9.0/32.0);
76 
77 
79  const double RK45_STAGE_4_COEF=28561.0/56430;
80  const double RK45_STAGE_4_T=(12.0/13.0);
81  const double RK45_STAGE_4_U1=(1932.0/2197.0);
82  const double RK45_STAGE_4_U2=(-7200.0/2197.0);
83  const double RK45_STAGE_4_U3=(7296.0/2197.0);
84 
86  const double RK45_STAGE_5_COEF=-9.0/50.0;
87  const double RK45_STAGE_5_T=1.0;
88  const double RK45_STAGE_5_U1=(439.0/216.0);
89  const double RK45_STAGE_5_U2=(-8.0);
90  const double RK45_STAGE_5_U3=(3680.0/513.0);
91  const double RK45_STAGE_5_U4=(-845.0/4104.0);
92 
94  const double RK45_STAGE_6_COEF=2.0/55.0;
95  const double RK45_STAGE_6_T=0.5;
96  const double RK45_STAGE_6_U1=(-8.0/27.0);
97  const double RK45_STAGE_6_U2=(2.0);
98  const double RK45_STAGE_6_U3=(-3544.0/2565.0);
99  const double RK45_STAGE_6_U4=(1859.0/4104.0);
100  const double RK45_STAGE_6_U5=(-11.0/40.0);
101 
103  std::vector<unsigned int > m_uiRefinedOctIDs;
104 
106  std::vector<unsigned int> m_uiCoarsenOctIDs;
107 
108 
109 
110  public:
112  RK(ot::Mesh * pMesh,double pTBegin,double pTEnd,double pTh);
113 
114  ~RK();
115 /*
117  inline void setTimeStepBegin(double tBegin){m_uiTimeBegin=tBegin;}
118  *//*
119  inline void setTimeStepEnd(double tEnd){m_uiTimeEnd=tEnd;}
120  *//*
121  inline void setCurrentTimeStep(unsigned int step) {m_uiCurrentStep=step;}
122  *//*
123  inline void setCurrentTimeValue(double tValue){m_uiCurrentTime=tValue;}
124  *//*
125  inline void setDT(double dt){m_uiT_h=dt;}*/
126 
127 
128 
130  virtual void performSingleIteration(){};
131 
133  virtual void applyInitialConditions(){};
134 
136  virtual void applyBoundaryConditions(){};
137 
138  virtual void rkSolve(){};
139 
141  inline void freeMesh(){delete m_uiMesh;};
142 
143 
144 
145 
146  };
147 
148 
149 
150  } // end of namespace solver
151 
152 } // end of namespace ode.
153 
154 #endif //SFCSORTBENCH_RK_H
std::vector< unsigned int > m_uiCoarsenOctIDs
Definition: rk.h:106
Definition: rk.h:21
double m_uiT_h_prev
Definition: rk.h:50
double m_uiTimeStepCurrent
Definition: rk.h:53
double m_uiTimeEnd
Definition: rk.h:41
const double RK45_STAGE_5_COEF
Definition: rk.h:86
double m_uiTimeBegin
Definition: rk.h:38
unsigned int m_uiNrp
Definition: rk.h:32
Definition: mesh.h:179
RK(ot::Mesh *pMesh, double pTBegin, double pTEnd, double pTh)
Definition: rk.cpp:16
const double RK45_STAGE_4_COEF
Definition: rk.h:79
unsigned int m_uiOrder
Definition: rk.h:29
double m_uiCurrentTime
Definition: rk.h:47
ot::Mesh * m_uiMesh
Definition: rk.h:26
const double RK45_STAGE_1_COEF
Definition: rk.h:59
void freeMesh()
free memeory of the mesh
Definition: rk.h:141
This file contains the base class for the Rungge-Kutta 45 Method.
Definition: rk4nlsm.h:33
std::vector< unsigned int > m_uiRefinedOctIDs
Definition: rk.h:103
virtual void applyBoundaryConditions()
Definition: rk.h:136
virtual void performSingleIteration()
Definition: rk.h:130
const double RK45_STAGE_6_COEF
Definition: rk.h:94
const double RK45_STAGE_3_COEF
Definition: rk.h:71
unsigned int m_uiCurrentStep
Definition: rk.h:56
virtual void applyInitialConditions()
Definition: rk.h:133
const double RK45_STAGE_2_COEF
Definition: rk.h:65
MPI_Comm m_uiComm
Definition: rk.h:35
double m_uiT_h
Definition: rk.h:44