chombo-discharge
Loading...
Searching...
No Matches
CD_CdrSolver.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_CDRSOLVER_H
14#define CD_CDRSOLVER_H
15
16// Std includes
17#include <random>
18#include <time.h>
19#include <chrono>
20#include <functional>
21
22// Our includes
23#include <CD_AmrMesh.H>
25#include <CD_CdrSpecies.H>
26#include <CD_CdrDomainBC.H>
27#include <CD_NamespaceHeader.H>
28
36{
37public:
42 CdrSolver();
43
48 CdrSolver(const CdrSolver& a_other) = delete;
49
54 CdrSolver(const CdrSolver&& a_other) = delete;
55
61 operator=(const CdrSolver& a_other) = delete;
62
68 operator=(const CdrSolver&& a_other) = delete;
69
73 virtual ~CdrSolver();
74
78 virtual void
80
84 virtual void
86
93 void
95
101 void
102 setDomainBcType(const CdrDomainBC::DomainSide a_domainSide, const CdrDomainBC::BcType a_bcType);
103
111 void
112 setDomainBcFunction(const CdrDomainBC::DomainSide a_domainSide, const CdrDomainBC::FluxFunction& a_fluxFunction);
113
121 virtual void
122 advanceEuler(EBAMRCellData& a_newPhi, const EBAMRCellData& a_oldPhi, const Real a_dt);
123
135 virtual void
136 advanceEuler(EBAMRCellData& a_newPhi,
137 const EBAMRCellData& a_oldPhi,
138 const EBAMRCellData& a_source,
139 const Real a_dt) = 0;
140
148 virtual void
149 advanceCrankNicholson(EBAMRCellData& a_newPhi, const EBAMRCellData& a_oldPhi, const Real a_dt);
150
158 virtual void
159 advanceCrankNicholson(EBAMRCellData& a_newPhi,
160 const EBAMRCellData& a_oldPhi,
161 const EBAMRCellData& a_source,
162 const Real a_dt) = 0;
163
179 virtual void
180 computeDivJ(EBAMRCellData& a_divJ,
181 EBAMRCellData& a_phi,
182 const Real a_extrapDt,
183 const bool a_conservativeOnly,
184 const bool a_ebFlux,
185 const bool a_domainFlux) = 0;
186
203 virtual void
204 computeDivF(EBAMRCellData& a_divF,
205 EBAMRCellData& a_phi,
206 const Real a_extrapDt,
207 const bool a_conservativeOnly,
208 const bool a_ebFlux,
209 const bool a_domainFlux) = 0;
210
222 virtual void
223 computeDivD(EBAMRCellData& a_divD,
224 EBAMRCellData& a_phi,
225 const bool a_conservativeOnly,
226 const bool a_ebFlux,
227 const bool a_domainFlux) = 0;
228
239 virtual void
240 computeDivG(EBAMRCellData& a_divG, EBAMRFluxData& a_G, const EBAMRIVData& a_ebFlux, const bool a_conservativeOnly);
241
248 virtual void
249 gwnDiffusionSource(EBAMRCellData& a_noiseSource, const EBAMRCellData& a_cellPhi);
250
256 virtual void
258
265 virtual void
266 preRegrid(const int a_lbase, const int a_oldFinestLevel);
267
273 virtual void
274 deallocate();
275
281 virtual void
283
288 virtual void
289 setRealm(const std::string& a_realm);
290
295 virtual RefCountedPtr<CdrSpecies>&
296 getSpecies() noexcept;
297
302 virtual const RefCountedPtr<CdrSpecies>&
303 getSpecies() const noexcept;
304
309 virtual void
310 setSpecies(const RefCountedPtr<CdrSpecies>& a_species);
311
316 virtual void
317 setComputationalGeometry(const RefCountedPtr<ComputationalGeometry>& a_computationalGeometry);
318
323 virtual void
324 setAmr(const RefCountedPtr<AmrMesh>& a_amr);
325
330 virtual void
331 setPhase(phase::which_phase a_phase);
332
337 virtual void
338 setVerbosity(const int a_verbosity);
339
347 virtual void
348 setTime(const int a_step, const Real a_time, const Real a_dt);
349
355 virtual void
356 setVelocity(const EBAMRCellData& a_velocity);
357
363 virtual void
364 setVelocity(const RealVect& a_velocity);
365
370 virtual void
371 setVelocity(const std::function<RealVect(const RealVect a_pos)>& a_velocity);
372
379 virtual void
380 setDiffusionCoefficient(const EBAMRFluxData& a_diffusionCoefficient, const EBAMRIVData& a_ebDiffusionCoefficient);
381
387 virtual void
388 setDiffusionCoefficient(const Real a_diffusionCoefficient);
389
395 virtual void
396 setDiffusionCoefficient(const std::function<Real(const RealVect a_position)>& a_diffCo);
397
403 virtual void
404 setSource(const EBAMRCellData& a_source);
405
411 virtual void
412 setSource(const Real a_source);
413
419 virtual void
420 setSource(const std::function<Real(const RealVect a_position)>& a_source);
421
427 virtual void
428 setEbFlux(const EBAMRIVData& a_ebFlux);
429
435 virtual void
436 setEbFlux(const Real a_ebFlux);
437
442 virtual void
443 initialData();
444
450 virtual void
451 allocate();
452
458 virtual void
460
470 virtual void
471 writePlotData(LevelData<EBCellFAB>& a_output,
472 int& a_icomp,
473 const std::string& a_outputRealm,
474 const int a_level) const noexcept;
475
476#ifdef CH_USE_HDF5
482 virtual void
483 writeCheckpointLevel(HDF5Handle& a_handle, const int a_level) const;
484#endif
485
486#ifdef CH_USE_HDF5
492 virtual void
493 readCheckpointLevel(HDF5Handle& a_handle, const int a_level);
494#endif
495
503 virtual void
504 regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel);
505
510 virtual std::string
511 getRealm() const;
512
518 virtual std::string
519 getName() const;
520
525 virtual Vector<std::string>
526 getPlotVariableNames() const;
527
532 virtual int
534
541 virtual Real
543
551 virtual Real
553
561 virtual Real
563
572 virtual Real
573 computeSourceDt(const Real a_max, const Real a_tolerance);
574
582 virtual void
583 weightedUpwind(EBAMRCellData& a_weightedUpwindPhi, const int a_pow);
584
590 virtual Real
591 computeMass();
592
600 virtual Real
601 computeMass(const EBAMRCellData& a_phi, const bool a_kappaScale = true);
602
608 virtual Real
610
615 virtual bool
616 isDiffusive();
617
622 virtual bool
623 isMobile();
624
629 virtual EBAMRCellData&
630 getPhi();
631
636 virtual EBAMRCellData&
637 getSource();
638
643 virtual EBAMRCellData&
645
650 virtual EBAMRFluxData&
652
657 virtual EBAMRIVData&
659
664 virtual EBAMRCellData&
666
671 virtual EBAMRFluxData&
673
678 virtual EBAMRIVData&
680
685 virtual EBAMRIVData&
686 getEbFlux();
687
692 virtual EBAMRIFData&
694
701 virtual void
703
710 virtual void
711 extrapolateAdvectiveFluxToEB(EBAMRIVData& a_ebFlux) const noexcept;
712
718 virtual void
719 redistribute(EBAMRCellData& a_phi, const EBAMRIVData& a_delta) const noexcept;
720
721protected:
725 enum class Redistribution
726 {
727 VolumeWeighted,
728 None
729 };
730
734 static constexpr int m_comp = 0;
735
739 static constexpr int m_nComp = 1;
740
744 RefCountedPtr<CdrSpecies> m_species;
745
749 RefCountedPtr<ComputationalGeometry> m_computationalGeometry;
750
754 RefCountedPtr<AmrMesh> m_amr;
755
759 Vector<RefCountedPtr<LayoutData<BaseIFFAB<FaceStencil>>>> m_interpStencils[SpaceDim];
760
765
769 std::string m_name;
770
775 std::string m_className;
776
780 std::string m_realm;
781
786
790 EBAMRCellData m_phi;
791
795 EBAMRCellData m_source;
796
801 EBAMRCellData m_cellVelocity;
802
807 EBAMRFluxData m_faceStates;
808
813 EBAMRFluxData m_faceVelocity;
814
819
823 EBAMRIVData m_massDifference;
824
828 EBAMRIVData m_ebZero;
829
833 EBAMRCellData m_cachePhi;
834
838 EBAMRCellData m_cacheSource;
839
843 EBAMRIVData m_ebVelocity;
844
848 EBAMRIVData m_ebFlux;
849
853 EBAMRIFData m_domainFlux;
854
860
866
872
877 std::map<CdrDomainBC::DomainSide, CdrDomainBC::FluxFunction> m_domainFluxFunctions;
878
884
889
893 Real m_time;
894
898 Real m_dt;
899
904
909
914
919
924
929
934
939
944
949
954
959
968 virtual void
969 averageVelocityToFaces(EBAMRFluxData& a_faceVelocity, const EBAMRCellData& a_cellVelocity);
970
977 virtual void
978 advectToFaces(EBAMRFluxData& a_facePhi, const EBAMRCellData& a_phi, const Real a_extrapDt) = 0;
979
989 virtual void
990 computeAdvectionFlux(EBAMRFluxData& a_flux,
991 const EBAMRFluxData& a_facePhi,
992 const EBAMRFluxData& a_faceVelocity,
993 const bool a_addDomainFlux = true);
994
1004 virtual void
1005 computeAdvectionFlux(LevelData<EBFluxFAB>& a_flux,
1006 const LevelData<EBFluxFAB>& a_facePhi,
1007 const LevelData<EBFluxFAB>& a_faceVelocity,
1008 const int a_lvl);
1009
1018 virtual void
1019 computeDiffusionFlux(EBAMRFluxData& a_flux, const EBAMRCellData& a_phi, const bool a_addDomainFlux);
1020
1028 virtual void
1029 computeDiffusionFlux(LevelData<EBFluxFAB>& a_flux, const LevelData<EBCellFAB>& a_phi, const int a_lvl);
1030
1040 virtual void
1041 computeAdvectionDiffusionFlux(EBAMRFluxData& a_flux,
1042 const EBAMRCellData& a_cellStates,
1043 const EBAMRFluxData& a_faceStates,
1044 const EBAMRFluxData& a_faceVelocities,
1045 const EBAMRFluxData& a_faceDiffCo,
1046 const bool a_addDomainFlux);
1047
1052 virtual void
1053 resetDomainFlux(EBAMRFluxData& a_flux);
1054
1059 virtual void
1060 fillDomainFlux(EBAMRFluxData& a_flux);
1061
1067 virtual void
1068 fillDomainFlux(LevelData<EBFluxFAB>& a_flux, const int a_level);
1069
1078 virtual void
1079 conservativeDivergenceNoKappaDivision(EBAMRCellData& a_conservativeDivergence,
1080 EBAMRFluxData& a_flux,
1081 const EBAMRIVData& a_ebFlux);
1082
1090 virtual void
1091 nonConservativeDivergence(EBAMRIVData& a_nonConservativeDivergence, const EBAMRCellData& a_divG);
1092
1101 virtual void
1102 hybridDivergence(EBAMRCellData& a_hybridDivergence,
1103 EBAMRIVData& a_massDifference,
1104 const EBAMRIVData& a_nonConservativeDivergence);
1105
1115 virtual void
1116 hybridDivergence(LevelData<EBCellFAB>& a_hybridDivergence,
1117 LevelData<BaseIVFAB<Real>>& a_massDifference,
1118 const LevelData<BaseIVFAB<Real>>& a_nonConservativeDivergence,
1119 const int a_lvl);
1120
1129 virtual void
1130 conservativeDivergenceRegular(LevelData<EBCellFAB>& a_divJ, const LevelData<EBFluxFAB>& a_flux, const int a_lvl);
1131
1137 virtual void
1138 interpolateFluxToFaceCentroids(EBAMRFluxData& a_flux);
1139
1146 virtual void
1147 interpolateFluxToFaceCentroids(LevelData<EBFluxFAB>& a_flux, const int a_lvl);
1148
1158 virtual void
1159 computeDivergenceIrregular(LevelData<EBCellFAB>& a_divG,
1160 const LevelData<EBFluxFAB>& a_centroidFluxes,
1161 const LevelData<BaseIVFAB<Real>>& a_ebFlux,
1162 const int a_lvl);
1163
1168 virtual void
1170
1176 virtual void
1178
1183 virtual void
1185
1189 virtual void
1190 parseDomainBc();
1191
1195 virtual void
1197
1201 virtual void
1202 parsePlotMode();
1203
1207 virtual void
1209
1213 virtual void
1215
1222 virtual std::string
1223 makeBcString(const int a_dir, const Side::LoHiSide a_side) const;
1224
1230 virtual void
1231 fillGwn(EBAMRFluxData& a_noise, const Real a_sigma);
1232
1239 virtual void
1240 smoothHeavisideFaces(EBAMRFluxData& a_facePhi, const EBAMRCellData& a_cellPhi);
1241
1253 virtual void
1254 writeData(LevelData<EBCellFAB>& a_output,
1255 int& a_comp,
1256 const EBAMRCellData& a_data,
1257 const std::string& a_outputRealm,
1258 const int a_level,
1259 const bool a_interpToCentroids,
1260 const bool a_interpGhost) const noexcept;
1261};
1262
1263#include <CD_NamespaceFooter.H>
1264
1265#endif
Declaration of core class for handling AMR-related operations (with embedded boundaries)
Declaration of domain boundary condition types for CdrSolver.
Declaration of a class that passes information into CdrSolver (e.g., initial conditions).
Declaration of base class for defining geometries.
Class for handling spatial operations.
Definition CD_AmrMesh.H:45
Class for encapsulating possible domain boundary conditions for CdrSolver.
Definition CD_CdrDomainBC.H:32
std::function< Real(const RealVect a_position, const Real a_time)> FluxFunction
Function which maps f(R^3,t) : R. Used for setting the associated value and boundary condition type.
Definition CD_CdrDomainBC.H:52
std::pair< int, Side::LoHiSide > DomainSide
Alias for mapping a direction and side. The first element in pair is the coordinate direction and the...
Definition CD_CdrDomainBC.H:58
BcType
Boundary condition types for the CDR solvers.
Definition CD_CdrDomainBC.H:38
Base class for solving convection-diffusion-reaction equations.
Definition CD_CdrSolver.H:36
virtual void gwnDiffusionSource(EBAMRCellData &a_noiseSource, const EBAMRCellData &a_cellPhi)
Compute a random gaussian white noise source term.
Definition CD_CdrSolver.cpp:3001
virtual void parseOptions()=0
Parse class options.
virtual void computeDivF(EBAMRCellData &a_divF, EBAMRCellData &a_phi, const Real a_extrapDt, const bool a_conservativeOnly, const bool a_ebFlux, const bool a_domainFlux)=0
Compute div(v*phi) explicitly.
bool m_isDiffusive
Is the solver diffusive or not.
Definition CD_CdrSolver.H:913
virtual void computeAdvectionDiffusionFlux(EBAMRFluxData &a_flux, const EBAMRCellData &a_cellStates, const EBAMRFluxData &a_faceStates, const EBAMRFluxData &a_faceVelocities, const EBAMRFluxData &a_faceDiffCo, const bool a_addDomainFlux)
Compute the full advection-diffusion flux. This assumes that the solver is mobile and diffusive.
Definition CD_CdrSolver.cpp:693
virtual void nonConservativeDivergence(EBAMRIVData &a_nonConservativeDivergence, const EBAMRCellData &a_divG)
Compute the non-conservative divergence.
Definition CD_CdrSolver.cpp:1478
virtual RefCountedPtr< CdrSpecies > & getSpecies() noexcept
Get the CDR species.
Definition CD_CdrSolver.cpp:42
bool m_plotPhi
If true, m_phi is added to plot files.
Definition CD_CdrSolver.H:923
virtual EBAMRIVData & getEbCenteredDiffusionCoefficient()
Get the EB-centered diffusion coefficient.
Definition CD_CdrSolver.cpp:2746
virtual void parseRuntimeOptions()=0
Parse runtime options.
virtual EBAMRIVData & getEbCenteredVelocity()
Get the eb-centered velocities.
Definition CD_CdrSolver.cpp:2713
int m_timeStep
Time step.
Definition CD_CdrSolver.H:888
EBAMRCellData m_source
Source term.
Definition CD_CdrSolver.H:795
virtual EBAMRCellData & getSource()
Get the source term.
Definition CD_CdrSolver.cpp:2680
CdrSolver(const CdrSolver &&a_other)=delete
Disallowed move constructor.
void setDomainBcFunction(const CdrDomainBC::DomainSide a_domainSide, const CdrDomainBC::FluxFunction &a_fluxFunction)
Set domain bc function on particular domain side.
Definition CD_CdrSolver.cpp:100
virtual void parsePlotVariables()
Parses plot variables.
Definition CD_CdrSolver.cpp:2958
CdrSolver()
Default constructor.
Definition CD_CdrSolver.cpp:30
virtual void parsePlotMode()
Parse plot mode.
Definition CD_CdrSolver.cpp:3258
EBAMRFluxData m_faceCenteredDiffusionCoefficient
Diffusion coefficients on face centers.
Definition CD_CdrSolver.H:865
virtual int getNumberOfPlotVariables() const
Get number of output fields.
Definition CD_CdrSolver.cpp:185
virtual bool isMobile()
Return true if the solver is mobile and false otherwise.
Definition CD_CdrSolver.cpp:2658
virtual EBAMRFluxData & getFaceCenteredVelocity()
Get the face-centered velocities.
Definition CD_CdrSolver.cpp:2702
bool m_plotDiffusionCoefficient
Output diffusion coefficients.
Definition CD_CdrSolver.H:933
EBAMRIVData m_massDifference
Scratch storage for the mass difference.
Definition CD_CdrSolver.H:823
CdrSolver(const CdrSolver &a_other)=delete
Disallowed copy constructor.
static constexpr int m_nComp
Number of components that this solver solves for.
Definition CD_CdrSolver.H:739
virtual void allocate()
Allocate internal storage.
Definition CD_CdrSolver.cpp:273
virtual void setPhase(phase::which_phase a_phase)
Set phase.
Definition CD_CdrSolver.cpp:1795
Real m_dt
Last time step increment.
Definition CD_CdrSolver.H:898
CdrSolver & operator=(const CdrSolver &&a_other)=delete
Disallowed move assignment operator.
virtual void hybridDivergence(EBAMRCellData &a_hybridDivergence, EBAMRIVData &a_massDifference, const EBAMRIVData &a_nonConservativeDivergence)
Use the non-conservative divergence to make the conservative divergence hold the hybrid divergence.
Definition CD_CdrSolver.cpp:1326
Redistribution m_whichRedistribution
Which type of redistribution to use.
Definition CD_CdrSolver.H:903
virtual Real computeAdvectionDt()
Compute the largest possible diffusive time step (for explicit methods)
Definition CD_CdrSolver.cpp:2035
bool m_plotVelocity
Output velocities.
Definition CD_CdrSolver.H:928
virtual EBAMRFluxData & getFaceCenteredDiffusionCoefficient()
Get the face-centered diffusion coefficient.
Definition CD_CdrSolver.cpp:2735
RefCountedPtr< AmrMesh > m_amr
AMR; needed for grid stuff.
Definition CD_CdrSolver.H:754
RefCountedPtr< CdrSpecies > m_species
Species through which e.g. mobility/diffusion and initial conditions is passed.
Definition CD_CdrSolver.H:744
virtual void registerOperators()
Register operators for AMR operations.
Definition CD_CdrSolver.cpp:1546
virtual void fillGwn(EBAMRFluxData &a_noise, const Real a_sigma)
Gaussian noise field.
Definition CD_CdrSolver.cpp:3195
virtual void setEbFlux(const EBAMRIVData &a_ebFlux)
Data-based version of setting the EB flux.
Definition CD_CdrSolver.cpp:1644
virtual void writePlotData(LevelData< EBCellFAB > &a_output, int &a_icomp, const std::string &a_outputRealm, const int a_level) const noexcept
Write output data to a_output.
Definition CD_CdrSolver.cpp:1871
virtual void redistribute(EBAMRCellData &a_phi, const EBAMRIVData &a_delta) const noexcept
Add data through redistribution into cell-centered holders.
Definition CD_CdrSolver.cpp:480
Vector< RefCountedPtr< LayoutData< BaseIFFAB< FaceStencil > > > > m_interpStencils[SpaceDim]
Stencils for interpolating face-centered fluxes to face centroids.
Definition CD_CdrSolver.H:759
virtual void setComputationalGeometry(const RefCountedPtr< ComputationalGeometry > &a_computationalGeometry)
Set computational geometry.
Definition CD_CdrSolver.cpp:1564
std::string m_realm
Realm where this solver is registered.
Definition CD_CdrSolver.H:780
virtual void computeDivJ(EBAMRCellData &a_divJ, EBAMRCellData &a_phi, const Real a_extrapDt, const bool a_conservativeOnly, const bool a_ebFlux, const bool a_domainFlux)=0
Compute div(J) explicitly, where J = nV - D*grad(n)
EBAMRIVData m_nonConservativeDivG
Scratch storage for the non-conservative divergence.
Definition CD_CdrSolver.H:818
virtual EBAMRCellData & getPhi()
Get the cell-centered phi.
Definition CD_CdrSolver.cpp:2669
virtual void initialDataDistribution()
Fill initial data from a distribution function.
Definition CD_CdrSolver.cpp:1237
EBAMRCellData m_phi
Cell-centered data (i.e. the advected-diffused quantity)
Definition CD_CdrSolver.H:790
virtual Real computeAdvectionDiffusionDt()
Compute the largest possible diffusive time step (for explicit methods).
Definition CD_CdrSolver.cpp:2204
virtual void advanceEuler(EBAMRCellData &a_newPhi, const EBAMRCellData &a_oldPhi, const Real a_dt)
Implicit diffusion Euler advance without source term.
Definition CD_CdrSolver.cpp:219
virtual bool isDiffusive()
Return true if the solver is diffusive and false otherwise.
Definition CD_CdrSolver.cpp:2647
RefCountedPtr< ComputationalGeometry > m_computationalGeometry
Computational geometry.
Definition CD_CdrSolver.H:749
virtual void resetDomainFlux(EBAMRFluxData &a_flux)
Set flux to zero on domain boundaries.
Definition CD_CdrSolver.cpp:796
virtual void computeDivG(EBAMRCellData &a_divG, EBAMRFluxData &a_G, const EBAMRIVData &a_ebFlux, const bool a_conservativeOnly)
Compute div(G) where G is a general face-centered flux on face centers and EB centers....
Definition CD_CdrSolver.cpp:418
virtual EBAMRIFData & getDomainFlux()
Get the domain flux data holder.
Definition CD_CdrSolver.cpp:2768
EBAMRIVData m_ebCenteredDiffusionCoefficient
Diffusion coefficients on EB faces.
Definition CD_CdrSolver.H:871
bool m_plotEbFlux
Output EB fluxes.
Definition CD_CdrSolver.H:938
EBAMRFluxData m_faceStates
Holder for face centered states.
Definition CD_CdrSolver.H:807
Redistribution
Redistribution method.
Definition CD_CdrSolver.H:726
EBAMRCellData m_cellVelocity
Cell-centered velocities.
Definition CD_CdrSolver.H:801
virtual void initialData()
Fill m_phi state with initial data from m_species.
Definition CD_CdrSolver.cpp:1212
virtual void smoothHeavisideFaces(EBAMRFluxData &a_facePhi, const EBAMRCellData &a_cellPhi)
Use Heaviside smoothing for computing face-centered states.
Definition CD_CdrSolver.cpp:3061
std::map< CdrDomainBC::DomainSide, CdrDomainBC::FluxFunction > m_domainFluxFunctions
Domain flux functions.
Definition CD_CdrSolver.H:877
bool m_regridSlopes
Use slopes when regridding.
Definition CD_CdrSolver.H:953
virtual void parseDomainBc()
Parses domain BC options.
Definition CD_CdrSolver.cpp:2886
virtual std::string getName() const
Get solver name.
Definition CD_CdrSolver.cpp:112
virtual void conservativeDivergenceNoKappaDivision(EBAMRCellData &a_conservativeDivergence, EBAMRFluxData &a_flux, const EBAMRIVData &a_ebFlux)
Compute conservative divergence from fluxes.
Definition CD_CdrSolver.cpp:996
void setDefaultDomainBC()
This sets default boundary conditions (wall type).
Definition CD_CdrSolver.cpp:64
virtual void setVerbosity(const int a_verbosity)
Set verbosity.
Definition CD_CdrSolver.cpp:1806
virtual Real computeCharge()
Compute the total charge in m_phi.
Definition CD_CdrSolver.cpp:2632
virtual void parseRegridSlopes()
Parse slope regrid.
Definition CD_CdrSolver.cpp:3282
std::string m_className
Class name.
Definition CD_CdrSolver.H:775
virtual ~CdrSolver()
Constructor.
virtual void averageVelocityToFaces()
Average velocities to faces.
Definition CD_CdrSolver.cpp:363
EBAMRIVData m_ebFlux
Flux through the embedded boundary.
Definition CD_CdrSolver.H:848
EBAMRCellData m_cellCenteredDiffusionCoefficient
Diffusion coefficients on cell centers.
Definition CD_CdrSolver.H:859
virtual void deallocate()
Deallocate internal storage.
Definition CD_CdrSolver.cpp:344
virtual void setTime(const int a_step, const Real a_time, const Real a_dt)
Set the time for this solver.
Definition CD_CdrSolver.cpp:1733
virtual std::string getRealm() const
Get the realm where this solver is registered.
Definition CD_CdrSolver.cpp:123
int m_seed
RNG seed.
Definition CD_CdrSolver.H:958
virtual Real computeDiffusionDt()
Compute the largest possible diffusive time step (for explicit methods)
Definition CD_CdrSolver.cpp:2107
virtual void weightedUpwind(EBAMRCellData &a_weightedUpwindPhi, const int a_pow)
Compute an upwind-weighted version of phi.
Definition CD_CdrSolver.cpp:2392
virtual void computeAdvectionFlux(EBAMRFluxData &a_flux, const EBAMRFluxData &a_facePhi, const EBAMRFluxData &a_faceVelocity, const bool a_addDomainFlux=true)
Set up face-centered advection flux.
Definition CD_CdrSolver.cpp:514
virtual void writeData(LevelData< EBCellFAB > &a_output, int &a_comp, const EBAMRCellData &a_data, const std::string &a_outputRealm, const int a_level, const bool a_interpToCentroids, const bool a_interpGhost) const noexcept
Write data to output. Convenience function.
Definition CD_CdrSolver.cpp:1946
EBAMRCellData m_cachePhi
Cached state vector for regrid.
Definition CD_CdrSolver.H:833
virtual void advanceEuler(EBAMRCellData &a_newPhi, const EBAMRCellData &a_oldPhi, const EBAMRCellData &a_source, const Real a_dt)=0
Implicit diffusion Euler advance with source term.
virtual void fillDomainFlux(EBAMRFluxData &a_flux)
Set domain in data holder. This sets the flux on the boundary to either zero or to m_domainFlux.
Definition CD_CdrSolver.cpp:861
bool m_plotNumbers
Plot numbers or densities.
Definition CD_CdrSolver.H:948
virtual Real computeMass()
Compute the "physical mass" in m_phi.
Definition CD_CdrSolver.cpp:2561
virtual void parseDivergenceComputation()
Parse the conservation.
Definition CD_CdrSolver.cpp:2930
virtual void preRegrid(const int a_lbase, const int a_oldFinestLevel)
Perform pre-regrid operations.
Definition CD_CdrSolver.cpp:401
virtual void setRealm(const std::string &a_realm)
Set the realm for this solver.
Definition CD_CdrSolver.cpp:134
virtual void advanceCrankNicholson(EBAMRCellData &a_newPhi, const EBAMRCellData &a_oldPhi, const EBAMRCellData &a_source, const Real a_dt)=0
Implicit diffusion Crank-Nicholson advance with source term.
virtual void defineInterpolationStencils()
Define stencils for doing face-centered to face-centroid-centered states.
Definition CD_CdrSolver.cpp:1162
Real m_time
Current time.
Definition CD_CdrSolver.H:893
EBAMRIVData m_ebZero
Scratch storage for the EB flux.
Definition CD_CdrSolver.H:828
bool m_blendConservation
Flag for blending the hybrid divergence.
Definition CD_CdrSolver.H:908
bool m_isMobile
Solve for advection/convection or not.
Definition CD_CdrSolver.H:918
virtual void interpolateFluxToFaceCentroids(EBAMRFluxData &a_flux)
Interpolate flux to centroids.
Definition CD_CdrSolver.cpp:1400
EBAMRIVData m_ebVelocity
EB-centered velocities.
Definition CD_CdrSolver.H:843
virtual void advectToFaces(EBAMRFluxData &a_facePhi, const EBAMRCellData &a_phi, const Real a_extrapDt)=0
Advection-only extrapolation to faces.
virtual void advanceCrankNicholson(EBAMRCellData &a_newPhi, const EBAMRCellData &a_oldPhi, const Real a_dt)
Implicit diffusion Crank-Nicholson advance without source term.
Definition CD_CdrSolver.cpp:246
static constexpr int m_comp
Component number in data holder.
Definition CD_CdrSolver.H:734
virtual void regrid(const int a_lmin, const int a_oldFinestLevel, const int a_newFinestLevel)
Regrid this solver.
Definition CD_CdrSolver.cpp:1502
EBAMRFluxData m_faceVelocity
Face-centered velocities (only normal components)
Definition CD_CdrSolver.H:813
virtual void setDiffusionCoefficient(const EBAMRFluxData &a_diffusionCoefficient, const EBAMRIVData &a_ebDiffusionCoefficient)
Data-based version of setting diffusion coefficients (which are stored on faces)
Definition CD_CdrSolver.cpp:1579
EBAMRCellData m_cacheSource
Cached source term for regrids.
Definition CD_CdrSolver.H:838
EBAMRIFData m_domainFlux
Domain flux.
Definition CD_CdrSolver.H:853
virtual void setAmr(const RefCountedPtr< AmrMesh > &a_amr)
Set the amr object.
Definition CD_CdrSolver.cpp:1533
virtual void setSpecies(const RefCountedPtr< CdrSpecies > &a_species)
Set species.
Definition CD_CdrSolver.cpp:1668
virtual EBAMRCellData & getCellCenteredVelocity()
Get the cell-centered velocity.
Definition CD_CdrSolver.cpp:2691
virtual EBAMRIVData & getEbFlux()
Get the eb flux data holder.
Definition CD_CdrSolver.cpp:2757
virtual Real computeSourceDt(const Real a_max, const Real a_tolerance)
Compute the largest possible source time step (for explicit methods.
Definition CD_CdrSolver.cpp:2327
int m_verbosity
Solver verbosity.
Definition CD_CdrSolver.H:883
virtual void setSource(const EBAMRCellData &a_source)
Data based version of setting source terms.
Definition CD_CdrSolver.cpp:1684
virtual void setVelocity(const EBAMRCellData &a_velocity)
Set velocity from data holder.
Definition CD_CdrSolver.cpp:1746
virtual void writePlotFile()
Write plot file.
Definition CD_CdrSolver.cpp:1817
virtual void conservativeDivergenceRegular(LevelData< EBCellFAB > &a_divJ, const LevelData< EBFluxFAB > &a_flux, const int a_lvl)
Compute the conservative divergence over regular cells.
Definition CD_CdrSolver.cpp:1100
virtual void initialDataParticles()
Fill initial data from particles.
Definition CD_CdrSolver.cpp:1268
virtual void computeDiffusionFlux(EBAMRFluxData &a_flux, const EBAMRCellData &a_phi, const bool a_addDomainFlux)
Compute the face-centered diffusion flux.
Definition CD_CdrSolver.cpp:579
virtual void computeDivergenceIrregular(LevelData< EBCellFAB > &a_divG, const LevelData< EBFluxFAB > &a_centroidFluxes, const LevelData< BaseIVFAB< Real > > &a_ebFlux, const int a_lvl)
Compute conservative divergence on irregular cells (not kappa divided)
Definition CD_CdrSolver.cpp:1032
virtual void extrapolateAdvectiveFluxToEB() noexcept
Extrapolate advective flux to EB.
Definition CD_CdrSolver.cpp:2779
virtual Vector< std::string > getPlotVariableNames() const
Get output plot names.
Definition CD_CdrSolver.cpp:145
bool m_plotSource
Output source term.
Definition CD_CdrSolver.H:943
virtual EBAMRCellData & getCellCenteredDiffusionCoefficient()
Get the cell-centered diffusion coefficient.
Definition CD_CdrSolver.cpp:2724
CdrSolver & operator=(const CdrSolver &a_other)=delete
Disallowed assignment operator.
std::string m_name
Solver name.
Definition CD_CdrSolver.H:769
virtual std::string makeBcString(const int a_dir, const Side::LoHiSide a_side) const
Shortcut for making a boundary condition string.
Definition CD_CdrSolver.cpp:2853
phase::which_phase m_phase
Phase.
Definition CD_CdrSolver.H:764
virtual void computeDivD(EBAMRCellData &a_divD, EBAMRCellData &a_phi, const bool a_conservativeOnly, const bool a_ebFlux, const bool a_domainFlux)=0
Compute div(D*grad(phi)) explicitly.
CdrDomainBC m_domainBC
Domain BCs.
Definition CD_CdrSolver.H:785
void setDomainBcType(const CdrDomainBC::DomainSide a_domainSide, const CdrDomainBC::BcType a_bcType)
Set domain bc type on domain side.
Definition CD_CdrSolver.cpp:89
Abstract class that describes the scalar quantity that is advected in CdrSolver.
Definition CD_CdrSpecies.H:31
Abstract base class for geometries.
Definition CD_ComputationalGeometry.H:39
Phase names namespace.
Definition CD_MultiFluidIndexSpace.H:28
which_phase
Enumeration of supported phases.
Definition CD_MultiFluidIndexSpace.H:38