CGStaticBalanceSelfTest.cpp File Reference
#include "Mercury3D.h"
#include "StatisticsVector.h"
#include "Walls/InfiniteWall.h"
#include "CG/CG.h"
#include "CG/TimeSmoothedCG.h"
#include "CG/TimeAveragedCG.h"
#include "CG/Functions/Lucy.h"
#include "CG/Functions/Linear.h"
#include "CG/Functions/Heaviside.h"
#include "CG/Functions/Gauss.h"
#include <cmath>
#include <iostream>
#include <iomanip>
#include <Species/LinearViscoelasticSpecies.h>

Classes

class  CGStaticBalanceSelfTest
 Tests if the different CG templates work correctly. More...
 

Functions

void setCGHandler (DPMBase &problem)
 
void testCGHandler (DPMBase &problem)
 
int main (int argc, char *argv[])
 

Function Documentation

◆ main()

int main ( int argc  ,
char argv[] 
)
301 {
302  //declare the DPM problem and set the name
304  problem.setName("CGStaticBalanceSelfTest");
305 
306  //problem is steady after t=0.6, see gnuplot:
307  //set logscale y; p 'CGStaticBalanceSelfTest.ene' u 1:3
309 
310  //run the simulation
311  problem.solve(argc, argv);
312 
313  //problem is steady after t=0.6, see gnuplot:
314  //set logscale y; p 'CGStaticBalanceSelfTest.ene' u 1:3
316 
317 }
void setCGHandler(DPMBase &problem)
Definition: CGStaticBalanceSelfTest.cpp:108
void testCGHandler(DPMBase &problem)
Definition: CGStaticBalanceSelfTest.cpp:260
Tests if the different CG templates work correctly.
Definition: CGStaticBalanceSelfTest.cpp:63
Constructor for SteadyAxisymAdvectionDiffusion problem
Definition: steady_axisym_advection_diffusion.cc:213

References problem, setCGHandler(), and testCGHandler().

◆ setCGHandler()

void setCGHandler ( DPMBase problem)
109 {
110  //define the different coarse-graining objects
111 
112  //case 0: create global average rho(t)
114  cg0.statFile.setSaveCount(20);
115  cg0.statFile.setName(problem.getName() + ".LucyO.stat");
116  problem.cgHandler.copyAndAddObject(cg0);
117 
118 // TimeSmoothedCG<CGCoordinates::O> cg1;
119 // cg1.setWidthTime(0.01);
120 // cg1.setTimeStep(0.004);
121 // cg1.setTimeMax(0.2);
122 // cg1.statFile.setSaveCount(5);
123 // cg1.statFile.setName(problem.getName() + ".LucyO.TS.stat");
124 // problem.cgHandler.copyAndAddObject(cg1);
125 //
126 // TimeAveragedCG<CGCoordinates::O> cg2;
127 // cg2.setTimeMin(0.6);
128 // cg2.statFile.setSaveCount(50);
129 // cg2.statFile.setName(problem.getName() + ".LucyO.TA.stat");
130 // problem.cgHandler.copyAndAddObject(cg2);
131 //
133  cgB.setNZ(200);
134  cgB.setWidth(0.3);
135  cgB.statFile.setSaveCount(20000);
136  cgB.statFile.setName(problem.getName() + ".LucyZ.stat");
137  problem.cgHandler.copyAndAddObject(cgB);
138 //
139 // CG<CGFunctions::LinearZ> cgC;
140 // cgC.setNZ(200);
141 // cgC.setWidth(0.3);
142 // cgC.statFile.setSaveCount(20000);
143 // cgC.statFile.setName(problem.getName() + ".LinearZ.stat");
144 // problem.cgHandler.copyAndAddObject(cgC);
145 //
146 // CG<CGFunctions::HeavisideZ> cgD;
147 // cgD.setNZ(200);
148 // cgD.setWidth(0.3);
149 // cgD.statFile.setSaveCount(20000);
150 // cgD.statFile.setName(problem.getName() + ".HeavisideZ.stat");
151 // problem.cgHandler.copyAndAddObject(cgD);
152 //
153 // CG<CGFunctions::GaussZ> cgE;
154 // cgE.setNZ(200);
155 // cgE.setWidth(0.1);
156 // cgE.statFile.setSaveCount(20000);
157 // cgE.statFile.setName(problem.getName() + ".GaussZ.stat");
158 // problem.cgHandler.copyAndAddObject(cgE);
159 //
160 // CG<CGCoordinates::XZ> cgF;
161 // cgF.setNX(30);
162 // cgF.setNZ(30);
163 // cgF.setWidth(0.45);
164 // cgF.statFile.setSaveCount(20000);
165 // cgF.statFile.setName(problem.getName() + ".LucyXZ.stat");
166 // problem.cgHandler.copyAndAddObject(cgF);
167 //
168 // CG<CGFunctions::LinearXZ> cgG;
169 // cgG.setNX(30);
170 // cgG.setNZ(30);
171 // cgG.setWidth(0.45);
172 // cgG.statFile.setSaveCount(20000);
173 // cgG.statFile.setName(problem.getName() + ".LinearXZ.stat");
174 // problem.cgHandler.copyAndAddObject(cgG);
175 //
176 // CG<CGFunctions::HeavisideXZ> cgH;
177 // cgH.setNX(30);
178 // cgH.setNZ(30);
179 // cgH.setWidth(0.45);
180 // cgH.statFile.setSaveCount(20000);
181 // cgH.statFile.setName(problem.getName() + ".HeavisideXZ.stat");
182 // problem.cgHandler.copyAndAddObject(cgH);
183 //
184 // CG<CGFunctions::GaussXZ> cgI;
185 // cgI.setNX(30);
186 // cgI.setNZ(30);
187 // cgI.setWidth(0.15);
188 // cgI.statFile.setSaveCount(20000);
189 // cgI.statFile.setName(problem.getName() + ".GaussXZ.stat");
190 // problem.cgHandler.copyAndAddObject(cgI);
191 //
192 // CG<CGCoordinates::XYZ> cgJ;
193 // cgJ.setNX(10);
194 // cgJ.setNY(10);
195 // cgJ.setNZ(10);
196 // cgJ.setWidth(0.45);
197 // cgJ.statFile.setSaveCount(20000);
198 // cgJ.statFile.setName(problem.getName() + ".LucyXYZ.stat");
199 // problem.cgHandler.copyAndAddObject(cgJ);
200 //
201 // CG<CGFunctions::LinearXYZ> cgK;
202 // cgK.setNX(10);
203 // cgK.setNY(10);
204 // cgK.setNZ(10);
205 // cgK.setWidth(0.45);
206 // cgK.statFile.setSaveCount(20000);
207 // cgK.statFile.setName(problem.getName() + ".LinearXYZ.stat");
208 // problem.cgHandler.copyAndAddObject(cgK);
209 //
210 // CG<CGFunctions::HeavisideXYZ> cgL;
211 // cgL.setNX(10);
212 // cgL.setNY(10);
213 // cgL.setNZ(10);
214 // cgL.setWidth(0.45);
215 // cgL.statFile.setSaveCount(20000);
216 // cgL.statFile.setName(problem.getName() + ".HeavisideXYZ.stat");
217 // problem.cgHandler.copyAndAddObject(cgL);
218 //
219 // CG<CGFunctions::GaussXYZ> cgM;
220 // cgM.setNX(10);
221 // cgM.setNY(10);
222 // cgM.setNZ(10);
223 // cgM.setWidth(0.15);
224 // cgM.statFile.setSaveCount(20000);
225 // cgM.statFile.setName(problem.getName() + ".GaussXYZ.stat");
226 // problem.cgHandler.copyAndAddObject(cgM);
227 //
228 // CG<CGFunctions::GaussY> cg7;
229 // cg7.setNY(200);
230 // cg7.setWidth(0.15);
231 // cg7.statFile.setSaveCount(20000);
232 // cg7.statFile.setName(problem.getName() + ".GaussY.stat");
233 // problem.cgHandler.copyAndAddObject(cg7);
234 //
235 // CG<CGFunctions::GaussX> cg8;
236 // cg8.setNX(200);
237 // cg8.setWidth(0.15);
238 // cg8.statFile.setSaveCount(20000);
239 // cg8.statFile.setName(problem.getName() + ".GaussX.stat");
240 // problem.cgHandler.copyAndAddObject(cg8);
241 //
242 // CG<CGFunctions::GaussYZ> cg9;
243 // cg9.setNY(30);
244 // cg9.setNZ(30);
245 // cg9.setWidth(0.15);
246 // cg9.statFile.setSaveCount(20000);
247 // cg9.statFile.setName(problem.getName() + ".GaussYZ.stat");
248 // problem.cgHandler.copyAndAddObject(cg9);
249 //
250 // CG<CGFunctions::GaussXY> cgA;
251 // cgA.setNX(30);
252 // cgA.setNY(30);
253 // cgA.setWidth(0.15);
254 // cgA.statFile.setSaveCount(20000);
255 // cgA.statFile.setName(problem.getName() + ".GaussXY.stat");
256 // problem.cgHandler.copyAndAddObject(cgA);
257 
258 }
File statFile
File class to handle the output into a .stat file.
Definition: BaseCG.h:363
void setNZ(std::size_t nZ)
Sets nZ_, the number of spatial mesh points in the z-direction.
Definition: BaseCG.cc:81
Evaluates time-resolved continuum fields and writes the data into a stat file.
Definition: CG.h:55
void setWidth(Mdouble width) override
Definition: CG.h:199
void setName(const std::string &name)
Sets the file name, e.g. "Name.data".
Definition: File.cc:176
void setSaveCount(unsigned int saveCount)
Sets File::saveCount_.
Definition: File.cc:251

References problem, File::setName(), BaseCG::setNZ(), File::setSaveCount(), CG< Coordinates, BaseFunction, Fields >::setWidth(), and BaseCG::statFile.

Referenced by main().

◆ testCGHandler()

void testCGHandler ( DPMBase problem)
261 {
262  Mdouble totalMass;
263  Vec3D momentumBalance;
264 
265  logger(INFO, "Analysing #0: spatially averaged statistics rho(t) at t=1");
266  // cg0 stores the last available time step for analysis
267  CG<CGCoordinates::O>& cg0 =
268  *dynamic_cast<CG<CGCoordinates::O>*>(problem.cgHandler.getObject(0));
269  cg0.writeAll(std::cout);
270 
271  //check total mass
272  totalMass = cg0.getPoint(0).getDensity() - 0.8;
273  momentumBalance = cg0.getPoint(0).getInteractionForceDensity()
274  + cg0.getPoint(0).getDensity() * problem.getGravity();
275  logger(INFO, "Error in totalMass=%\n"
276  "Error in momentumBalance=%", totalMass, Vec3D::getLength(momentumBalance));
277 
278  //case B: z-statistics
279  CG<CGCoordinates::Z>& cgB =
280  *dynamic_cast<CG<CGCoordinates::Z>*>(problem.cgHandler.getObject(1));
281  cgB.writeAll(std::cout);
282  std::cout << std::endl;
283  totalMass = 0.0;
284  momentumBalance.setZero();
285  for (auto& p: cgB.getPoints())
286  {
287  logger(INFO, "z=%", p.coordinates.getZ());
288  totalMass += p.getDensity();
289  momentumBalance += p.getInteractionForceDensity()
290  + p.getDensity() * problem.getGravity();
291  }
292  totalMass = totalMass / cgB.getPoints().size() - 0.8;
293  momentumBalance /= cgB.getPoints().size();
294  logger(INFO, "Error in totalMass=%\n"
295  "Error in momentumBalance=%", totalMass, Vec3D::getLength(momentumBalance));
296 
297 
298 }
Logger< MERCURYDPM_LOGLEVEL > logger("MercuryKernel")
Definition of different loggers with certain modules. A user can define its own custom logger here.
float * p
Definition: Tutorial_Map_using.cpp:9
Mdouble getDensity() const
Definition: StandardFields.h:143
Vec3D getInteractionForceDensity() const
Definition: StandardFields.h:163
const std::vector< Point > & getPoints() const
Definition: CG.h:166
const Point & getPoint(size_t i) const
Definition: CG.h:161
void writeAll(std::ostream &os) const
Writes class content, including the points_, into an output stream, usually a stat file.
Definition: Kernel/Math/Vector.h:30
void setZero()
Sets all elements to zero.
Definition: Vector.cc:23
Mdouble getLength() const
Calculates the length of this Vec3D: .
Definition: Vector.cc:339
#define INFO(i)
Definition: mumps_solver.h:54

References CGFields::StandardFields::getDensity(), CGFields::StandardFields::getInteractionForceDensity(), Vec3D::getLength(), CG< Coordinates, BaseFunction, Fields >::getPoint(), CG< Coordinates, BaseFunction, Fields >::getPoints(), INFO, logger, p, problem, Vec3D::setZero(), and CG< Coordinates, BaseFunction, Fields >::writeAll().

Referenced by main().