chombo-discharge
Loading...
Searching...
No Matches
CD_Driver.H
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2021-2026 SINTEF Energy Research
3 *
4 * SPDX-License-Identifier: GPL-3.0-or-later
5 */
6
13#ifndef CD_DRIVER_H
14#define CD_DRIVER_H
15
16// Chombo includes
17#include <RefCountedPtr.H>
18
19// Our includes
21#include <CD_TimeStepper.H>
22#include <CD_AmrMesh.H>
23#include <CD_CellTagger.H>
25#include <CD_Initialize.H>
26#include <CD_NamespaceHeader.H>
27
32class Driver
33{
34public:
38 Driver() = delete;
39
47 Driver(const RefCountedPtr<ComputationalGeometry>& a_computationalGeometry,
48 const RefCountedPtr<TimeStepper>& a_timeStepper,
49 const RefCountedPtr<AmrMesh>& a_amrMesh,
50 const RefCountedPtr<CellTagger>& a_cellTagger = RefCountedPtr<CellTagger>(nullptr));
51
55 virtual ~Driver();
56
60 void
62
63protected:
67 RefCountedPtr<MultiFluidIndexSpace> m_multifluidIndexSpace;
68
72 RefCountedPtr<AmrMesh> m_amr;
73
77 RefCountedPtr<ComputationalGeometry> m_computationalGeometry;
78
82 RefCountedPtr<TimeStepper> m_timeStepper;
83
87 RefCountedPtr<CellTagger> m_cellTagger;
88
92 std::string m_inputFile;
93
97 std::string m_realm;
98
103
107 std::string m_outputDirectory;
108
112 std::string m_outputFileNames;
113
118
123
129
134
139
144
149
154
159
164
169
174
179
184
189
194
199
203 Vector<IntVectSet> m_geomTags;
204
209
213 EBAMRBool m_cachedTags;
214
219
224
229
233 Real m_dt;
234
238 Real m_time;
239
244
249
254
259
264
269
274
281
286
291
296
301
306
311
316
321
326
331
336
341
346
353 void
354 run(const Real a_startTime, const Real a_endTime, const int a_maxSteps);
355
363 void
364 setup(const std::string& a_inputFile,
365 const int a_initialRegrids,
366 const bool a_restart,
367 const std::string& a_restartFile);
368
373 void
374 setAmr(const RefCountedPtr<AmrMesh>& a_amrMesh);
375
379 void
380 sanityCheck();
381
386 void
387 parseOptions();
388
393 void
395
401 void
403
407 void
409
414 void
416
421 void
423
427 void
429
433 void
435
440 void
441 cacheTags(const EBAMRTags& a_tags);
442
446 void
448
455 void
457
474 void
475 getCellsAndBoxes(long long& a_numLocalCells,
476 long long& a_numLocalCellsGhosts,
477 long long& a_numLocalBoxes,
478 long long& a_numTotalCells,
479 long long& a_numTotalCellsGhosts,
480 long long& a_numTotalBoxes,
481 Vector<long long>& a_numLocalLevelBoxes,
482 Vector<long long>& a_numTotalLevelBoxes,
483 Vector<long long>& a_numLocalLevelCells,
484 Vector<long long>& a_numTotalLevelCells,
485 const int& a_finestLevel,
486 const Vector<DisjointBoxLayout>& a_grids);
487
491 void
492 gridReport();
493
494#ifdef CH_USE_HDF5
500 void
501 readCheckpointFile(const std::string& a_restartFile);
502#endif
503
510 void
511 regrid(const int a_lmin, const int a_lmax, const bool a_useInitialData);
512
518 void
519 regridInternals(const int a_oldFinestLevel, const int a_newFinestLevel);
520
525 void
526 setComputationalGeometry(const RefCountedPtr<ComputationalGeometry>& a_computationalGeometry);
527
532 void
533 setTimeStepper(const RefCountedPtr<TimeStepper>& a_timeStepper);
534
539 void
540 setCellTagger(const RefCountedPtr<CellTagger>& a_cellTagger);
541
546 void
547 setupFresh(const int a_initialRegrids);
548
552#ifdef CH_USE_HDF5
553 void
554 setupForRestart(const int a_initialRegrids, const std::string& a_restartFile);
555#endif
556
560 void
562
567 void
568 checkRestartFile(const std::string& a_restartFile) const;
569
576 void
577 stepReport(const Real a_startTime, const Real a_endTime, const int a_maxSteps);
578
583 void
584 writePlotFile(const std::string& a_filename);
585
589 void
591
596 void
598
603 void
605
610 void
612
617 void
619
623 void
625
629 void
631
635 void
637
638#ifdef CH_USE_HDF5
645 void
646 writeCheckpointLevel(HDF5Handle& a_handle, const int a_level);
647#endif
648
649#ifdef CH_USE_HDF5
655 void
656 writeCheckpointTags(HDF5Handle& a_handle, const int a_level);
657#endif
658
659#ifdef CH_USE_HDF5
665 void
666 writeCheckpointRealmLoads(HDF5Handle& a_handle, const int a_level);
667#endif
668
669#ifdef CH_USE_HDF5
675 void
676 readCheckpointLevel(HDF5Handle& a_handle, const int a_level);
677#endif
678
679#ifdef CH_USE_HDF5
687 void
688 readCheckpointRealmLoads(Vector<long int>& a_loads,
689 HDF5Handle& a_handle,
690 const std::string& a_realm,
691 const int a_level);
692#endif
693
697 void
699
706 bool
707 tagCells(Vector<IntVectSet>& a_allTags, EBAMRTags& a_cellTags);
708
713 int
715
720 Vector<std::string>
721 getPlotVariableNames() const;
722
730 virtual void
731 writePlotData(LevelData<EBCellFAB>& a_output, int& a_comp, const int a_level) const noexcept;
732
740 virtual void
741 writeTags(LevelData<EBCellFAB>& a_output, int& a_comp, const int a_level) const noexcept;
742
750 virtual void
751 writeRanks(LevelData<EBCellFAB>& a_output, int& a_comp, const int a_level) const noexcept;
752
761 virtual void
762 writeLevelset(LevelData<EBCellFAB>& a_output, int& a_comp, const int a_level) const noexcept;
763
771 virtual void
772 writeLoads(LevelData<EBCellFAB>& a_output, int& a_comp, const int a_level) const noexcept;
773
779 int
780 getFinestTagLevel(const EBAMRTags& a_cellTags) const;
781
785 void
786 rebuildParmParse() const;
787};
788
789#include <CD_NamespaceFooter.H>
790
791#endif
Declaration of core class for handling AMR-related operations (with embedded boundaries)
Declaration of a base class for tagging cells across an AMR hierarchy.
Declaration of base class for defining geometries.
Vector< RefCountedPtr< LayoutData< DenseIntVectSet > > > EBAMRTags
Declaration of cell tags.
Definition CD_EBAMRTags.H:25
Declaration of the initialization functions for chombo-discharge.
Multi-fluid index space.
Declaration of main (abstract) time stepper class.
Main class for time/space advancement of streamer equations.
Definition CD_Driver.H:33
int m_restartStep
Restart step.
Definition CD_Driver.H:193
std::string m_geometryGeneration
Geometry generation method – can choose between native Chombo or chombo-discharge.
Definition CD_Driver.H:102
void checkRestartFile(const std::string &a_restartFile) const
Check if restart file exists and abort if not found.
Definition CD_Driver.cpp:1704
bool m_allowCoarsening
Allow grid coarsening.
Definition CD_Driver.H:295
int getFinestTagLevel(const EBAMRTags &a_cellTags) const
Return the finest AMR level that contains any cell tags.
Definition CD_Driver.cpp:1845
void getCellsAndBoxes(long long &a_numLocalCells, long long &a_numLocalCellsGhosts, long long &a_numLocalBoxes, long long &a_numTotalCells, long long &a_numTotalCellsGhosts, long long &a_numTotalBoxes, Vector< long long > &a_numLocalLevelBoxes, Vector< long long > &a_numTotalLevelBoxes, Vector< long long > &a_numLocalLevelCells, Vector< long long > &a_numTotalLevelCells, const int &a_finestLevel, const Vector< DisjointBoxLayout > &a_grids)
Get statistics about a DisjointBoxLaout. This will compute the number of grid cells and patches both ...
Definition CD_Driver.cpp:367
void cacheTags(const EBAMRTags &a_tags)
Cache tags for use after regrid.
Definition CD_Driver.cpp:188
void parseGeometryGeneration()
Parse option for geometry generation.
Definition CD_Driver.cpp:1178
int m_irregTagGrowth
Irregular tag growth.
Definition CD_Driver.H:122
void setupGeometryOnly()
Set for restart.
Definition CD_Driver.cpp:1376
int m_regridInterval
Regrid interval.
Definition CD_Driver.H:138
bool m_plotLevelset
Plot level sets.
Definition CD_Driver.H:345
int m_numPlotGhost
Number of ghost cells to plot.
Definition CD_Driver.H:188
std::string m_outputDirectory
Output directory for output files.
Definition CD_Driver.H:107
void writePreRegridFile()
Write a regrid file.
Definition CD_Driver.cpp:2140
virtual void writeLoads(LevelData< EBCellFAB > &a_output, int &a_comp, const int a_level) const noexcept
Write computational loads to output.
Definition CD_Driver.cpp:2470
std::string m_inputFile
Input file.
Definition CD_Driver.H:92
int m_plotInterval
Plot interval.
Definition CD_Driver.H:148
bool tagCells(Vector< IntVectSet > &a_allTags, EBAMRTags &a_cellTags)
Tag cells for refinement. Computes cell tags and global tags (union of cell tags with geometric tags)...
Definition CD_Driver.cpp:1874
EBAMRBool m_cachedTags
Cached tags. This is done so that when we regrid and change box ownership we can copy the tags around...
Definition CD_Driver.H:213
void setupFresh(const int a_initialRegrids)
Setup function for fresh (non-restart) simulations.
Definition CD_Driver.cpp:1464
void allocateInternals()
Allocate internal storage for Driver.
Definition CD_Driver.cpp:155
void stepReport(const Real a_startTime, const Real a_endTime, const int a_maxSteps)
Write a time step report to stdout.
Definition CD_Driver.cpp:1730
std::string m_outputFileNames
Prefix for all output files.
Definition CD_Driver.H:112
void parseIrregTagGrowth()
Parse irregular tag growth.
Definition CD_Driver.cpp:1163
RefCountedPtr< MultiFluidIndexSpace > m_multifluidIndexSpace
Index space.
Definition CD_Driver.H:67
Real m_wallClockTwo
MPI timer.
Definition CD_Driver.H:258
void rebuildParmParse() const
Rebuild Parmparse.
Definition CD_Driver.cpp:993
void writeCrashFile()
Write a crash file.
Definition CD_Driver.cpp:2191
int m_verbosity
Verbosity.
Definition CD_Driver.H:117
void gridReport()
Print regrid report.
Definition CD_Driver.cpp:443
Driver()=delete
Weak constructor. Not allowed.
Real m_startTime
Simulation start time.
Definition CD_Driver.H:223
std::string m_realm
Name of realm where Driver allocates his data. This is always Realm::Primal.
Definition CD_Driver.H:97
void writeComputationalLoads()
Write computational loads.
Definition CD_Driver.cpp:1979
RefCountedPtr< AmrMesh > m_amr
AMR.
Definition CD_Driver.H:72
Real m_capacitance
Capacitance of the geometry (used for electrical energy calculations).
Definition CD_Driver.H:243
void writePlotFile()
Write a plot file. This writes to plt/.
Definition CD_Driver.cpp:2120
int getNumberOfPlotVariables() const
Get number of plot variables.
Definition CD_Driver.cpp:86
EBAMRTags m_tags
Tags.
Definition CD_Driver.H:208
void parseGeometryRefinement()
Parse geometrical refinement.
Definition CD_Driver.cpp:1196
void writeCheckpointFile()
Write a checkpoint file.
Definition CD_Driver.cpp:2510
void createOutputDirectories()
Create output directories.
Definition CD_Driver.cpp:1238
bool m_plotRanks
Plot MPI ranks.
Definition CD_Driver.H:335
int m_maxPlotLevel
Maximum plot depth.
Definition CD_Driver.H:173
Real m_refineAngle
Angle refinement threshold.
Definition CD_Driver.H:263
Real m_stopTime
Simulation stop time.
Definition CD_Driver.H:228
RefCountedPtr< TimeStepper > m_timeStepper
Time stepper.
Definition CD_Driver.H:82
RefCountedPtr< ComputationalGeometry > m_computationalGeometry
Geometry.
Definition CD_Driver.H:77
virtual void writeLevelset(LevelData< EBCellFAB > &a_output, int &a_comp, const int a_level) const noexcept
Write level sets.
Definition CD_Driver.cpp:2422
void getGeometryTags()
Get geometric tags.
Definition CD_Driver.cpp:230
bool m_writeRestartFiles
Write restart files or not.
Definition CD_Driver.H:290
Real m_time
Time.
Definition CD_Driver.H:238
Real m_wallClockOne
MPI timer.
Definition CD_Driver.H:253
void writeGeometry()
Write the geometry to file.
Definition CD_Driver.cpp:2066
int m_geoScanLevel
Geometry scan level.
Definition CD_Driver.H:128
void regridInternals(const int a_oldFinestLevel, const int a_newFinestLevel)
Regrid internal storage for this class.
Definition CD_Driver.cpp:692
bool m_geometryOnly
Geometry only.
Definition CD_Driver.H:320
void sanityCheck()
Sanity check.
Definition CD_Driver.cpp:1719
virtual void writePlotData(LevelData< EBCellFAB > &a_output, int &a_comp, const int a_level) const noexcept
Write internal plot data.
Definition CD_Driver.cpp:2320
Real m_wallClockStart
MPI timer.
Definition CD_Driver.H:248
void writePostRegridFile()
Write a regrid file.
Definition CD_Driver.cpp:2157
int m_geometricTagsDepth
Geometric tag depth.
Definition CD_Driver.H:153
void setCellTagger(const RefCountedPtr< CellTagger > &a_cellTagger)
Set the cell tagger.
Definition CD_Driver.cpp:1033
bool m_writeMemory
Write memory report.
Definition CD_Driver.H:305
void run(const Real a_startTime, const Real a_endTime, const int a_maxSteps)
Run a simulation for a specific time, or until a maximum number of steps have been performed.
Definition CD_Driver.cpp:748
void parseRuntimeOptions()
Parse runtime options.
Definition CD_Driver.cpp:1096
bool m_profile
Profile or not.
Definition CD_Driver.H:268
int m_dielectricTagsDepth
Geometric tag depth for dielectrics.
Definition CD_Driver.H:163
bool m_needsNewGeometricTags
Special option for when geometric tags are changed during a simulation.
Definition CD_Driver.H:280
bool m_writeRegridFiles
Write regrid files or not.
Definition CD_Driver.H:285
int m_timeStep
Time step.
Definition CD_Driver.H:133
void setComputationalGeometry(const RefCountedPtr< ComputationalGeometry > &a_computationalGeometry)
Set the computational geometry.
Definition CD_Driver.cpp:1006
void regrid(const int a_lmin, const int a_lmax, const bool a_useInitialData)
Do a regrid step.
Definition CD_Driver.cpp:581
int m_conductorTagsDepth
Geometric tag depth for conductors.
Definition CD_Driver.H:158
int m_maxSteps
Maximum number of steps.
Definition CD_Driver.H:168
bool m_plotLoads
Plot patch loads.
Definition CD_Driver.H:340
bool m_restart
Restart or not.
Definition CD_Driver.H:315
int m_growTags
Grow tagged cells.
Definition CD_Driver.H:198
void writeRestartFile()
Write a restart file.
Definition CD_Driver.cpp:2174
RefCountedPtr< CellTagger > m_cellTagger
Cell tagger.
Definition CD_Driver.H:87
void writeMemoryUsage()
Write the memory usage to file.
Definition CD_Driver.cpp:1941
virtual void writeTags(LevelData< EBCellFAB > &a_output, int &a_comp, const int a_level) const noexcept
Write cell tags to file.
Definition CD_Driver.cpp:2345
void parsePlotVariables()
Parse plot variables.
Definition CD_Driver.cpp:1126
Real m_outputDt
Time between outputs.
Definition CD_Driver.H:218
virtual ~Driver()
Destructor (does nothing)
Definition CD_Driver.cpp:80
Real m_dt
Time increment.
Definition CD_Driver.H:233
int m_initialRegrids
Number of initial regrids.
Definition CD_Driver.H:183
int m_checkpointInterval
Checkpoint interval.
Definition CD_Driver.H:143
bool m_ebisMemoryLoadBalance
Use memory as load balance for EBIS.
Definition CD_Driver.H:325
bool m_writeLoads
Write loads to file or not.
Definition CD_Driver.H:310
void parseOptions()
Parse options.
Definition CD_Driver.cpp:1048
bool m_doInitLoadBalancing
Do init load balancing.
Definition CD_Driver.H:300
virtual void writeRanks(LevelData< EBCellFAB > &a_output, int &a_comp, const int a_level) const noexcept
Write MPI ranks to output.
Definition CD_Driver.cpp:2394
bool m_doCoarsening
Turn on/off geometry coarsening below the base level.
Definition CD_Driver.H:273
void setupAndRun()
Setup and run simulations.
Definition CD_Driver.cpp:971
int m_maxCheckpointDepth
Maximum plot depth.
Definition CD_Driver.H:178
Vector< std::string > getPlotVariableNames() const
Get the string identifiers for the internal plot variables from Driver.
Definition CD_Driver.cpp:112
Vector< IntVectSet > m_geomTags
Tags.
Definition CD_Driver.H:203
void setTimeStepper(const RefCountedPtr< TimeStepper > &a_timeStepper)
Set the time stepper.
Definition CD_Driver.cpp:1020
void setup(const std::string &a_inputFile, const int a_initialRegrids, const bool a_restart, const std::string &a_restartFile)
Setup function.
Definition CD_Driver.cpp:1330
void setAmr(const RefCountedPtr< AmrMesh > &a_amrMesh)
Set amr.
Definition CD_Driver.cpp:1316
bool m_plotTags
Plot tagged cells.
Definition CD_Driver.H:330
void writeEBIS()
Write the geometry to file.