Skip to content

Commit d3c5737

Browse files
authored
Merge pull request #261 from LLNL/bugfix/initializeProblemStartupDependencies
Bugfix/initialize problem startup dependencies
2 parents 684aedf + d9be3aa commit d3c5737

File tree

81 files changed

+947
-322
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

81 files changed

+947
-322
lines changed

RELEASE_NOTES.md

+18
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,21 @@
1+
Version vX.Y.Z -- Release date xxxx-xx-xx
2+
==============================================
3+
* Important Notes:
4+
*
5+
6+
Notable changes include:
7+
8+
* New features/ API changes:
9+
* Adding an optional second-stage problem start-up hook to the Physics package interface: Physics::initializeProblemStartupDependencies. The idea is to keep basic sizing
10+
of arrays and such in the first stage (Physics::initializeProblemStartup), while this new hook is used for updating any initial Physics state (and therefore provides a
11+
State and StateDerivatives object).
12+
13+
* Build changes / improvements:
14+
*
15+
16+
* Bug Fixes / improvements:
17+
* Fixed bug with ConstantBoundary in the presence of porosity with the new porosity models introduced in v2024.01.00.
18+
119
Version v2024.01.00 -- Release date 2024-01-19
220
==============================================
321
* Important Notes:

src/ArtificialViscosity/CullenDehnenViscosity.cc

+15-15
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ initializeProblemStartup(DataBase<Dimension>& dataBase) {
9090
mR = dataBase.newFluidFieldList(0.0, "mR");
9191
mVsig = dataBase.newFluidFieldList(0.0, "mVsig");
9292

93-
FieldList<Dimension, Scalar>& rvQ = myq.CqMultiplier();
94-
FieldList<Dimension, Scalar>& rvL = myq.ClMultiplier();
93+
auto& rvQ = myq.CqMultiplier();
94+
auto& rvL = myq.ClMultiplier();
9595
rvQ = dataBase.newFluidFieldList(malphMin, HydroFieldNames::ArtificialViscousCqMultiplier); // This will override the Q initializer intializing these to unity.
9696
rvL = dataBase.newFluidFieldList(malphMin, HydroFieldNames::ArtificialViscousClMultiplier);
9797
}
@@ -104,17 +104,17 @@ void
104104
CullenDehnenViscosity<Dimension>::
105105
registerState(DataBase<Dimension>& dataBase,
106106
State<Dimension>& state) {
107-
dataBase.resizeFluidFieldList(mPrevDvDt, Vector::zero, "mPrevDvDt", false);
108-
dataBase.resizeFluidFieldList(mPrevDivV, 0.0, "mPrevDivV", false);
109-
dataBase.resizeFluidFieldList(mCullAlpha, 1.0, "mCullAlpha", false);
107+
CHECK(mPrevDvDt.numFields() == dataBase.numFluidNodeLists());
108+
CHECK(mPrevDivV.numFields() == dataBase.numFluidNodeLists());
109+
CHECK(mCullAlpha.numFields() == dataBase.numFluidNodeLists());
110110
state.enroll(mPrevDvDt);
111111
state.enroll(mPrevDivV);
112112
state.enroll(mCullAlpha);
113113

114-
FieldList<Dimension, Scalar>& rvAlphaQ = myq.CqMultiplier();
115-
FieldList<Dimension, Scalar>& rvAlphaL = myq.ClMultiplier();
116-
state.enroll(rvAlphaQ, std::make_shared<IncrementCullenMultipliers<Dimension>>(malphMin, malphMax, mboolHopkins));
117-
state.enroll(rvAlphaL);
114+
auto& rvQ = myq.CqMultiplier();
115+
auto& rvL = myq.ClMultiplier();
116+
state.enroll(rvQ, make_policy<IncrementCullenMultipliers<Dimension>>(malphMin, malphMax, mboolHopkins));
117+
state.enroll(rvL);
118118
}
119119

120120
//------------------------------------------------------------------------------
@@ -125,12 +125,12 @@ void
125125
CullenDehnenViscosity<Dimension>::
126126
registerDerivatives(DataBase<Dimension>& dataBase,
127127
StateDerivatives<Dimension>& derivs) {
128-
dataBase.resizeFluidFieldList(mPrevDivV2, 0.0, "mPrevDivV2", false);
129-
dataBase.resizeFluidFieldList(mCullAlpha2, 1.0, "mCullAlpha2", false);
130-
dataBase.resizeFluidFieldList(mDalphaDt, 0.0, "mDalphaDt", false);
131-
dataBase.resizeFluidFieldList(mAlphaLocal, 0.0, "mAlphaLocal", false);
132-
dataBase.resizeFluidFieldList(mR, 0.0, "mR", false);
133-
dataBase.resizeFluidFieldList(mVsig, 0.0, "mVsig", false);
128+
CHECK(mPrevDivV2.numFields() == dataBase.numFluidNodeLists());
129+
CHECK(mCullAlpha2.numFields() == dataBase.numFluidNodeLists());
130+
CHECK(mDalphaDt.numFields() == dataBase.numFluidNodeLists());
131+
CHECK(mAlphaLocal.numFields() == dataBase.numFluidNodeLists());
132+
CHECK(mR.numFields() == dataBase.numFluidNodeLists());
133+
CHECK(mVsig.numFields() == dataBase.numFluidNodeLists());
134134
derivs.enroll(mPrevDivV2);
135135
derivs.enroll(mCullAlpha2);
136136
derivs.enroll(mDalphaDt);

src/ArtificialViscosity/MorrisMonaghanReducingViscosity.cc

+6-6
Original file line numberDiff line numberDiff line change
@@ -129,8 +129,8 @@ template<typename Dimension>
129129
void
130130
MorrisMonaghanReducingViscosity<Dimension>::
131131
initializeProblemStartup(DataBase<Dimension>& dataBase) {
132-
FieldList<Dimension, Scalar>& rvQ = myq.CqMultiplier();
133-
FieldList<Dimension, Scalar>& rvL = myq.ClMultiplier();
132+
auto& rvQ = myq.CqMultiplier();
133+
auto& rvL = myq.ClMultiplier();
134134
rvQ = dataBase.newFluidFieldList(0.0, HydroFieldNames::ArtificialViscousCqMultiplier); // This will override the Q initializer intializing these to unity.
135135
rvL = dataBase.newFluidFieldList(0.0, HydroFieldNames::ArtificialViscousClMultiplier);
136136
mDrvAlphaDtQ = dataBase.newFluidFieldList(0.0, IncrementBoundedState<Dimension, Scalar>::prefix() + HydroFieldNames::ArtificialViscousCqMultiplier);
@@ -145,10 +145,10 @@ void
145145
MorrisMonaghanReducingViscosity<Dimension>::
146146
registerState(DataBase<Dimension>& /*dataBase*/,
147147
State<Dimension>& state) {
148-
FieldList<Dimension, Scalar>& rvQ = myq.CqMultiplier();
149-
FieldList<Dimension, Scalar>& rvL = myq.ClMultiplier();
150-
state.enroll(rvQ, std::make_shared<IncrementBoundedState<Dimension, Scalar>>(maMin,maMax));
151-
state.enroll(rvL, std::make_shared<IncrementBoundedState<Dimension, Scalar>>(maMin,maMax));
148+
auto& rvQ = myq.CqMultiplier();
149+
auto& rvL = myq.ClMultiplier();
150+
state.enroll(rvQ, make_policy<IncrementBoundedState<Dimension, Scalar>>(maMin,maMax));
151+
state.enroll(rvL, make_policy<IncrementBoundedState<Dimension, Scalar>>(maMin,maMax));
152152
}
153153

154154
//------------------------------------------------------------------------------

src/CRKSPH/CRKSPHHydroBase.cc

+7-6
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "DataBase/IncrementBoundedState.hh"
1919
#include "DataBase/ReplaceState.hh"
2020
#include "DataBase/ReplaceBoundedState.hh"
21+
#include "DataBase/updateStateFields.hh"
2122
#include "Hydro/SpecificThermalEnergyPolicy.hh"
2223
#include "Hydro/SpecificFromTotalThermalEnergyPolicy.hh"
2324
#include "Hydro/PressurePolicy.hh"
@@ -149,12 +150,14 @@ CRKSPHHydroBase<Dimension>::
149150
template<typename Dimension>
150151
void
151152
CRKSPHHydroBase<Dimension>::
152-
initializeProblemStartup(DataBase<Dimension>& dataBase) {
153+
initializeProblemStartupDependencies(DataBase<Dimension>& dataBase,
154+
State<Dimension>& state,
155+
StateDerivatives<Dimension>& derivs) {
153156

154157
// Initialize the pressure, sound speed, and entropy.
155-
dataBase.fluidPressure(mPressure);
156-
dataBase.fluidSoundSpeed(mSoundSpeed);
157-
dataBase.fluidEntropy(mEntropy);
158+
updateStateFields<Dimension>(HydroFieldNames::pressure, state, derivs);
159+
updateStateFields<Dimension>(HydroFieldNames::soundSpeed, state, derivs);
160+
updateStateFields<Dimension>(HydroFieldNames::entropy, state, derivs);
158161
}
159162

160163
//------------------------------------------------------------------------------
@@ -168,8 +171,6 @@ registerState(DataBase<Dimension>& dataBase,
168171

169172
// Create the local storage for time step mask, pressure, sound speed, and correction fields.
170173
dataBase.resizeFluidFieldList(mTimeStepMask, 1, HydroFieldNames::timeStepMask);
171-
// dataBase.fluidPressure(mPressure);
172-
// dataBase.fluidSoundSpeed(mSoundSpeed);
173174
dataBase.resizeFluidFieldList(mEntropy, 0.0, HydroFieldNames::entropy, false);
174175
dataBase.resizeFluidFieldList(mPressure, 0.0, HydroFieldNames::pressure, false);
175176
dataBase.resizeFluidFieldList(mSoundSpeed, 0.0, HydroFieldNames::soundSpeed, false);

src/CRKSPH/CRKSPHHydroBase.hh

+3-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,9 @@ public:
6363

6464
// Tasks we do once on problem startup.
6565
virtual
66-
void initializeProblemStartup(DataBase<Dimension>& dataBase) override;
66+
void initializeProblemStartupDependencies(DataBase<Dimension>& dataBase,
67+
State<Dimension>& state,
68+
StateDerivatives<Dimension>& derivs) override;
6769

6870
// Register the state Hydro expects to use and evolve.
6971
virtual

src/CRKSPH/CRKSPHHydroBaseRZ.cc

+14-5
Original file line numberDiff line numberDiff line change
@@ -104,10 +104,19 @@ CRKSPHHydroBaseRZ::
104104
//------------------------------------------------------------------------------
105105
void
106106
CRKSPHHydroBaseRZ::
107-
initializeProblemStartup(DataBase<Dim<2> >& dataBase) {
108-
107+
initializeProblemStartup(DataBase<Dim<2>>& dataBase) {
109108
GeometryRegistrar::coords(CoordinateType::RZ);
109+
}
110110

111+
//------------------------------------------------------------------------------
112+
// On problem start up some dependent state needs to be calculated
113+
//------------------------------------------------------------------------------
114+
void
115+
CRKSPHHydroBaseRZ::
116+
initializeProblemStartupDependencies(DataBase<Dim<2>>& dataBase,
117+
State<Dim<2>>& state,
118+
StateDerivatives<Dim<2>>& derivs) {
119+
111120
// Correct the mass to mass/r.
112121
auto mass = dataBase.fluidMass();
113122
const auto pos = dataBase.fluidPosition();
@@ -121,7 +130,7 @@ initializeProblemStartup(DataBase<Dim<2> >& dataBase) {
121130
}
122131

123132
// Do general initializations.
124-
CRKSPHHydroBase<Dim<2> >::initializeProblemStartup(dataBase);
133+
CRKSPHHydroBase<Dim<2> >::initializeProblemStartupDependencies(dataBase, state, derivs);
125134

126135
// Convert back to mass.
127136
for (unsigned nodeListi = 0; nodeListi != numNodeLists; ++nodeListi) {
@@ -138,8 +147,8 @@ initializeProblemStartup(DataBase<Dim<2> >& dataBase) {
138147
//------------------------------------------------------------------------------
139148
void
140149
CRKSPHHydroBaseRZ::
141-
registerState(DataBase<Dim<2> >& dataBase,
142-
State<Dim<2> >& state) {
150+
registerState(DataBase<Dim<2>>& dataBase,
151+
State<Dim<2>>& state) {
143152

144153
// The base class does most of it.
145154
CRKSPHHydroBase<Dim<2> >::registerState(dataBase, state);

src/CRKSPH/CRKSPHHydroBaseRZ.hh

+13-3
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,19 @@ public:
6262
// Destructor.
6363
virtual ~CRKSPHHydroBaseRZ();
6464

65-
// Tasks we do once on problem startup.
66-
virtual
67-
void initializeProblemStartup(DataBase<Dimension>& dataBase) override;
65+
// An optional hook to initialize once when the problem is starting up.
66+
// Typically this is used to size arrays once all the materials and NodeLists have
67+
// been created. It is assumed after this method has been called it is safe to
68+
// call Physics::registerState for instance to create full populated State objects.
69+
virtual void initializeProblemStartup(DataBase<Dimension>& dataBase) override;
70+
71+
// A second optional method to be called on startup, after Physics::initializeProblemStartup has
72+
// been called.
73+
// One use for this hook is to fill in dependendent state using the State object, such as
74+
// temperature or pressure.
75+
virtual void initializeProblemStartupDependencies(DataBase<Dimension>& dataBase,
76+
State<Dimension>& state,
77+
StateDerivatives<Dimension>& derivs) override;
6878

6979
// Register the state Hydro expects to use and evolve.
7080
virtual

0 commit comments

Comments
 (0)