Skip to content

Commit

Permalink
Merge pull request #29789 from idaholab/PR_transient_linear_physics
Browse files Browse the repository at this point in the history
Add support for transient in linear finite volume NS Physics
  • Loading branch information
GiudGiud authored Feb 11, 2025
2 parents 2de6bfc + 467fbdd commit cd66266
Show file tree
Hide file tree
Showing 30 changed files with 862 additions and 260 deletions.
16 changes: 14 additions & 2 deletions framework/include/problems/DumpObjectsProblem.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,15 @@ class DumpObjectsNonlinearSystem;
FEProblemBase::method_name(type, name, parameters); \
}

#define captureDumpUO(method_name, path) \
std::vector<std::shared_ptr<UserObject>> method_name( \
const std::string & type, const std::string & name, InputParameters & parameters) override \
{ \
dumpObjectHelper(path, type, name, parameters); \
FEProblemBase::method_name(type, name, parameters); \
return std::vector<std::shared_ptr<UserObject>>(); \
}

/**
* Specialization of SubProblem for dumping generated objects as input file syntax
*/
Expand Down Expand Up @@ -94,6 +103,7 @@ class DumpObjectsProblem : public FEProblemBase
captureDump(addAuxVariable, "AuxVariables")
captureDump(addBoundaryCondition, "BCs")
captureDump(addConstraint, "Constraints")
captureDump(addConvergence, "Convergence")
captureDump(addDamper, "Dampers")
captureDump(addDGKernel, "DGKernels")
captureDump(addDiracKernel, "DiracKernels")
Expand All @@ -110,18 +120,20 @@ class DumpObjectsProblem : public FEProblemBase
captureDump(addInitialCondition, "ICs")
captureDump(addInterfaceKernel, "InterfaceKernels")
captureDump(addKernel, "Kernels")
captureDump(addLinearFVBC, "LinearFVBCs")
captureDump(addLinearFVBC, "LinearFVBCs")
captureDump(addLinearFVKernel, "LinearFVKernels")
captureDump(addMarker, "Adaptivity/Markers")
captureDump(addMaterial, "Materials")
captureDump(addMeshDivision, "MeshDivisions")
captureDump(addMultiApp, "MultiApps")
captureDump(addNodalKernel, "NodalKernels")
captureDump(addPostprocessor, "Postprocessors")
captureDump(addPredictor, "Executioner/Predictor")
captureDump(addSampler, "Samplers")
captureDump(addScalarKernel, "ScalarKernels")
captureDump(addTransfer, "Transfers")
captureDump(addTimeIntegrator, "TimeIntegrators")
captureDump(addTimeIntegrator, "Executioner/TimeIntegrators")
captureDumpUO(addUserObject, "UserObjects")
captureDump(addVariable, "Variables")
captureDump(addVectorPostprocessor, "VectorPostprocessors")
// clang-format off
Expand Down
2 changes: 1 addition & 1 deletion framework/include/problems/FEProblemBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -615,7 +615,7 @@ class FEProblemBase : public SubProblem, public Restartable
virtual Function & getFunction(const std::string & name, const THREAD_ID tid = 0);

/// Add a MeshDivision
void
virtual void
addMeshDivision(const std::string & type, const std::string & name, InputParameters & params);
/// Get a MeshDivision
MeshDivision & getMeshDivision(const std::string & name, const THREAD_ID tid = 0) const;
Expand Down
32 changes: 15 additions & 17 deletions modules/navier_stokes/include/physics/WCNSFVFlowPhysics.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,34 +35,32 @@ class WCNSFVFlowPhysics final : public WCNSFVFlowPhysicsBase
virtual void addUserObjects() override;
virtual void addCorrectors() override;

/// Function adding kernels for the time derivative term of the weakly compressible continuity equation
void addMassTimeKernels();
/// Function adding kernels for the incompressible continuity equation
void addINSMassKernels();
void addMassKernels();
/// Function adding the pressure constraint
void addINSPressurePinKernel();
void addPressurePinKernel();

/**
* Functions adding kernels for the incompressible momentum equation
* If the material properties are not constant, these can be used for
* weakly-compressible simulations (except the Boussinesq kernel) as well.
*/
void addINSMomentumTimeKernels();
void addINSMomentumViscousDissipationKernels();
void addINSMomentumMixingLengthKernels();
void addINSMomentumAdvectionKernels();
void addINSMomentumPressureKernels() override;
void addINSMomentumGravityKernels() override;
void addINSMomentumBoussinesqKernels() override;
void addINSMomentumFrictionKernels();

/// Functions which add time kernels for transient, weakly-compressible simulations.
void addWCNSMassTimeKernels();
void addWCNSMomentumTimeKernels();
void addMomentumTimeKernels() override;
void addMomentumViscousDissipationKernels();
void addMomentumMixingLengthKernels();
void addMomentumAdvectionKernels();
void addMomentumPressureKernels() override;
void addMomentumGravityKernels() override;
void addMomentumBoussinesqKernels() override;
void addMomentumFrictionKernels();

/// Functions adding boundary conditions for the incompressible simulation.
/// These are used for weakly-compressible simulations as well.
void addINSInletBC() override;
void addINSOutletBC() override;
void addINSWallsBC() override;
void addInletBC() override;
void addOutletBC() override;
void addWallsBC() override;

/// Return whether a Forchheimer friction model is in use
bool hasForchheimerFriction() const override;
Expand Down
17 changes: 9 additions & 8 deletions modules/navier_stokes/include/physics/WCNSFVFlowPhysicsBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -89,19 +89,20 @@ class WCNSFVFlowPhysicsBase : public NavierStokesPhysicsBase
virtual void addPostprocessors() override;

/**
* Functions adding kernels for the incompressible momentum equation
* Functions adding kernels for the flow momentum equations
* If the material properties are not constant, these can be used for
* weakly-compressible simulations (except the Boussinesq kernel) as well.
*/
virtual void addINSMomentumPressureKernels() = 0;
virtual void addINSMomentumGravityKernels() = 0;
virtual void addINSMomentumBoussinesqKernels() = 0;
virtual void addMomentumTimeKernels() = 0;
virtual void addMomentumPressureKernels() = 0;
virtual void addMomentumGravityKernels() = 0;
virtual void addMomentumBoussinesqKernels() = 0;

/// Functions adding boundary conditions for the incompressible simulation.
/// Functions adding boundary conditions for the flow simulation.
/// These are used for weakly-compressible simulations as well.
virtual void addINSInletBC() = 0;
virtual void addINSOutletBC() = 0;
virtual void addINSWallsBC() = 0;
virtual void addInletBC() = 0;
virtual void addOutletBC() = 0;
virtual void addWallsBC() = 0;

/// Return whether a Forchheimer friction model is in use
virtual bool hasForchheimerFriction() const = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,16 +31,15 @@ class WCNSFVFluidHeatTransferPhysics final : public WCNSFVFluidHeatTransferPhysi
* If the material properties are not constant, some of these can be used for
* weakly-compressible simulations as well.
*/
void addINSEnergyTimeKernels() override;
void addWCNSEnergyTimeKernels() override;
void addINSEnergyHeatConductionKernels() override;
void addINSEnergyAdvectionKernels() override;
void addINSEnergyAmbientConvection() override;
void addINSEnergyExternalHeatSource() override;
void addEnergyTimeKernels() override;
void addEnergyHeatConductionKernels() override;
void addEnergyAdvectionKernels() override;
void addEnergyAmbientConvection() override;
void addEnergyExternalHeatSource() override;

/// Functions adding boundary conditions for the incompressible simulation.
/// These are used for weakly-compressible simulations as well.
void addINSEnergyInletBC() override;
void addINSEnergyWallBC() override;
void addINSEnergyOutletBC() override {}
void addEnergyInletBC() override;
void addEnergyWallBC() override;
void addEnergyOutletBC() override {}
};
Original file line number Diff line number Diff line change
Expand Up @@ -68,21 +68,17 @@ class WCNSFVFluidHeatTransferPhysicsBase : public NavierStokesPhysicsBase,

/**
* Functions adding kernels for the incompressible / weakly compressible energy equation
* If the material properties are not constant, some of these can be used for
* weakly-compressible simulations as well.
*/
virtual void addINSEnergyTimeKernels() = 0;
virtual void addWCNSEnergyTimeKernels() = 0;
virtual void addINSEnergyHeatConductionKernels() = 0;
virtual void addINSEnergyAdvectionKernels() = 0;
virtual void addINSEnergyAmbientConvection() = 0;
virtual void addINSEnergyExternalHeatSource() = 0;

/// Functions adding boundary conditions for the incompressible simulation.
/// These are used for weakly-compressible simulations as well.
virtual void addINSEnergyInletBC() = 0;
virtual void addINSEnergyWallBC() = 0;
virtual void addINSEnergyOutletBC() = 0;
virtual void addEnergyTimeKernels() = 0;
virtual void addEnergyHeatConductionKernels() = 0;
virtual void addEnergyAdvectionKernels() = 0;
virtual void addEnergyAmbientConvection() = 0;
virtual void addEnergyExternalHeatSource() = 0;

/// Functions adding boundary conditions for the fluid heat transfer equation.
virtual void addEnergyInletBC() = 0;
virtual void addEnergyWallBC() = 0;
virtual void addEnergyOutletBC() = 0;

/// Process thermal conductivity (multiple functor input options are available).
/// Return true if we have vector thermal conductivity and false if scalar
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,17 +67,14 @@ class WCNSFVScalarTransportPhysicsBase : public NavierStokesPhysicsBase,
/**
* Functions adding kernels for the incompressible / weakly-compressible scalar transport
* equation
* If the material properties are not constant, some of these can be used for
* weakly-compressible simulations as well.
*/
virtual void addScalarTimeKernels() = 0;
virtual void addScalarDiffusionKernels() = 0;
virtual void addScalarAdvectionKernels() = 0;
/// Equivalent of NSFVAction addScalarCoupledSourceKernels
virtual void addScalarSourceKernels() = 0;

/// Functions adding boundary conditions for the incompressible simulation.
/// These are used for weakly-compressible simulations as well.
/// Functions adding boundary conditions for the scalar conservation equations.
virtual void addScalarInletBC() = 0;
virtual void addScalarWallBC() = 0;
virtual void addScalarOutletBC() = 0;
Expand Down
17 changes: 9 additions & 8 deletions modules/navier_stokes/include/physics/WCNSLinearFVFlowPhysics.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,21 +37,22 @@ class WCNSLinearFVFlowPhysics final : public WCNSFVFlowPhysicsBase
virtual void addUserObjects() override;

/// Function adding kernels for the incompressible pressure correction equation
void addINSPressureCorrectionKernels();
void addPressureCorrectionKernels();

/**
* Functions adding kernels for the incompressible momentum equation
* If the material properties are not constant, these can be used for
* weakly-compressible simulations (except the Boussinesq kernel) as well.
*/
void addINSMomentumFluxKernels();
virtual void addINSMomentumPressureKernels() override;
virtual void addINSMomentumGravityKernels() override;
virtual void addINSMomentumBoussinesqKernels() override;
void addMomentumTimeKernels() override;
void addMomentumFluxKernels();
virtual void addMomentumPressureKernels() override;
virtual void addMomentumGravityKernels() override;
virtual void addMomentumBoussinesqKernels() override;

virtual void addINSInletBC() override;
virtual void addINSOutletBC() override;
virtual void addINSWallsBC() override;
virtual void addInletBC() override;
virtual void addOutletBC() override;
virtual void addWallsBC() override;

virtual bool hasForchheimerFriction() const override { return false; };

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,19 +29,15 @@ class WCNSLinearFVFluidHeatTransferPhysics final : public WCNSFVFluidHeatTransfe

/**
* Functions adding kernels for the incompressible / weakly compressible energy equation
* If the material properties are not constant, some of these can be used for
* weakly-compressible simulations as well.
*/
void addINSEnergyTimeKernels() override;
void addWCNSEnergyTimeKernels() override;
void addINSEnergyHeatConductionKernels() override;
void addINSEnergyAdvectionKernels() override;
void addINSEnergyAmbientConvection() override;
void addINSEnergyExternalHeatSource() override;
void addEnergyTimeKernels() override;
void addEnergyHeatConductionKernels() override;
void addEnergyAdvectionKernels() override;
void addEnergyAmbientConvection() override;
void addEnergyExternalHeatSource() override;

/// Functions adding boundary conditions for the incompressible simulation.
/// These are used for weakly-compressible simulations as well.
void addINSEnergyInletBC() override;
void addINSEnergyWallBC() override;
void addINSEnergyOutletBC() override;
/// Functions adding boundary conditions for the incompressible / weakly compressible energy equation
void addEnergyInletBC() override;
void addEnergyWallBC() override;
void addEnergyOutletBC() override;
};
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ void limitSolutionUpdate(NumericVector<Number> & solution,
/**
* Compute a normalization factor which is applied to the linear residual to determine
* convergence. This function is based on the description provided here:
* // @article{greenshields2022notes,
* @article{greenshields2022notes,
* title={Notes on computational fluid dynamics: General principles},
* author={Greenshields, Christopher J and Weller, Henry G},
* journal={(No Title)},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -417,7 +417,7 @@ LinearAssemblySegregatedSolve::solve()
// If we have passive scalar equations, solve them here. We assume the material properties in the
// Navier-Stokes equations do not depend on passive scalars, as they are passive, therefore we
// solve outside of the velocity-pressure loop
if (_has_passive_scalar_systems && converged)
if (_has_passive_scalar_systems && (converged || _continue_on_max_its))
{
// The reason why we need more than one iteration is due to the matrix relaxation
// which can be used to stabilize the equations
Expand Down
Loading

0 comments on commit cd66266

Please sign in to comment.