Reuse prepared gravity force for stellar cross preconditioning
This commit is contained in:
@@ -413,6 +413,8 @@ export namespace mean_field::preconditioning {
|
||||
m_gravityDirection(operation.GetGravityJacobianOperator().Width()),
|
||||
m_volumeDisplacement(operation.GetDomainDeformation().volumeDisplacementSize()),
|
||||
m_mechanicalAction(operation.GetDomainDeformation().volumeDisplacementSize()),
|
||||
m_zeroDensity(operation.GetGravityContext().GetDensityMap().reduced_size()),
|
||||
m_zeroDisplacement(operation.GetGravityContext().GetDisplacementMap().reduced_size()),
|
||||
m_zeroEnthalpy(operation.GetBarotropicClosureOperator().GetEnthalpySize()) {
|
||||
const auto &context = operation.GetGravityContext();
|
||||
m_materialOffsets[0] = 0;
|
||||
@@ -425,6 +427,8 @@ export namespace mean_field::preconditioning {
|
||||
m_combinedOffsets[0] = 0;
|
||||
m_combinedOffsets[1] = MaterialSize();
|
||||
m_combinedOffsets[2] = Height();
|
||||
m_zeroDensity = 0.0;
|
||||
m_zeroDisplacement = 0.0;
|
||||
m_zeroEnthalpy = 0.0;
|
||||
}
|
||||
|
||||
@@ -488,8 +492,12 @@ export namespace mean_field::preconditioning {
|
||||
auto enthalpyAction = MaterialBlock(materialAction, 2);
|
||||
|
||||
densityAction = 0.0;
|
||||
m_operation->GetDisplacementOperator().ApplyGravityGradientJacobianAction(
|
||||
gravityGradientDirection, m_mechanicalAction
|
||||
// Restrict the same prepared tensor action used by the full Jacobian.
|
||||
// The standalone gravity-gradient column still uses a legacy kernel
|
||||
// that rebuilds geometry during every application. Zero variations
|
||||
// select this column without changing its quadrature or derivative.
|
||||
m_operation->GetDisplacementOperator().GetGravityOperator().ApplyCompleteJacobianAction(
|
||||
m_zeroDensity, m_zeroDisplacement, gravityGradientDirection, m_mechanicalAction
|
||||
);
|
||||
m_operation->GetDomainDeformation().applyJacobianTranspose(
|
||||
m_operation->GetSurfaceDeformationParameters(), m_mechanicalAction, surfaceAction
|
||||
@@ -615,6 +623,8 @@ export namespace mean_field::preconditioning {
|
||||
mutable mfem::Vector m_gravityDirection;
|
||||
mutable mfem::Vector m_volumeDisplacement;
|
||||
mutable mfem::Vector m_mechanicalAction;
|
||||
mfem::Vector m_zeroDensity;
|
||||
mfem::Vector m_zeroDisplacement;
|
||||
mfem::Vector m_zeroEnthalpy;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user