Skip to content

Commit

Permalink
Clean up some tests
Browse files Browse the repository at this point in the history
remove parameter from Mortar base
Add flags to compute only rows of R and J
Add tensor mechanics case to check the row assembly
Verify that tests run correctly
  • Loading branch information
ttruster committed Jan 11, 2023
1 parent 54f3d3a commit 06c2d09
Show file tree
Hide file tree
Showing 20 changed files with 1,087 additions and 71 deletions.
5 changes: 4 additions & 1 deletion framework/include/constraints/ADMortarScalarBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,12 @@ class ADMortarScalarBase : public ADMortarConstraint
*/
virtual void initScalarQpResidual() {}

/// Whether to compute scalar contributions
/// Whether a scalar variable is declared for this constraint
const bool _use_scalar;

/// Whether to compute scalar contributions for this instance
const bool _compute_scalar_residuals;

/// A dummy object useful for constructing _kappa when not using scalars
const ADVariableValue _kappa_dummy;

Expand Down
5 changes: 4 additions & 1 deletion framework/include/constraints/MortarScalarBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -130,9 +130,12 @@ class MortarScalarBase : public MortarConstraint
{
}

/// Whether to compute scalar contributions
/// Whether a scalar variable is declared for this constraint
const bool _use_scalar;

/// Whether to compute scalar contributions for this instance
const bool _compute_scalar_residuals;

/// A dummy object useful for constructing _kappa when not using scalars
const VariableValue _kappa_dummy;

Expand Down
8 changes: 7 additions & 1 deletion framework/include/kernels/ADKernelScalarBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,15 @@ class ADKernelScalarBase : public ADKernel
*/
virtual void initScalarQpResidual() {}

/// Whether to compute scalar contributions
/// Whether a scalar variable is declared for this kernel
const bool _use_scalar;

/// Whether to compute scalar contributions for this instance
const bool _compute_scalar_residuals;

/// Whether to compute field contributions for this instance
const bool _compute_field_residuals;

/// A dummy object useful for constructing _kappa when not using scalars
const ADVariableValue _kappa_dummy;

Expand Down
8 changes: 7 additions & 1 deletion framework/include/kernels/KernelScalarBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -106,9 +106,15 @@ class KernelScalarBase : public Kernel
*/
virtual void initScalarQpOffDiagJacobian(const MooseVariableFEBase &) {}

/// Whether to compute scalar contributions
/// Whether a scalar variable is declared for this kernel
const bool _use_scalar;

/// Whether to compute scalar contributions for this instance
const bool _compute_scalar_residuals;

/// Whether to compute field contributions for this instance
const bool _compute_field_residuals;

/// A dummy object useful for constructing _kappa when not using scalars
const VariableValue _kappa_dummy;

Expand Down
6 changes: 4 additions & 2 deletions framework/src/constraints/ADMortarScalarBase.C
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,14 @@ ADMortarScalarBase::validParams()
// This name is fixed and required to be equal to the previous parameter; need to add error
// checks...
params.addCoupledVar("coupled_scalar", "Repeat name of scalar variable to ensure dependency");
params.addParam<bool>("compute_scalar_residuals", true, "Whether to compute scalar residuals");
return params;
}

ADMortarScalarBase::ADMortarScalarBase(const InputParameters & parameters)
: ADMortarConstraint(parameters),
_use_scalar(isParamValid("scalar_variable") ? true : false),
_compute_scalar_residuals(!_use_scalar ? false : getParam<bool>("compute_scalar_residuals")),
_kappa_dummy(),
_kappa_var_ptr(
_use_scalar ? &_sys.getScalarVariable(_tid, parameters.get<VariableName>("scalar_variable"))
Expand All @@ -47,7 +49,7 @@ ADMortarScalarBase::computeResidual()
{
ADMortarConstraint::computeResidual();

if (_use_scalar)
if (_compute_scalar_residuals)
{
std::vector<Real> scalar_residuals(_k_order);
for (_qp = 0; _qp < _qrule_msm->n_points(); _qp++)
Expand All @@ -71,7 +73,7 @@ ADMortarScalarBase::computeJacobian()
// d-_var-residual / d-_var and d-_var-residual / d-jvar
ADMortarConstraint::computeJacobian();

if (_use_scalar)
if (_compute_scalar_residuals)
{
std::vector<ADReal> scalar_residuals;
scalar_residuals.resize(_k_order, 0);
Expand Down
1 change: 0 additions & 1 deletion framework/src/constraints/MortarConstraintBase.C
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,6 @@ MortarConstraintBase::validParams()
"compute_primal_residuals", true, "Whether to compute residuals for the primal variable.");
params.addParam<bool>(
"compute_lm_residuals", true, "Whether to compute Lagrange Multiplier residuals");
params.addParam<bool>("compute_scalar_residuals", true, "Whether to compute scalar residuals");
params.addParam<MooseEnum>(
"quadrature",
MooseEnum("DEFAULT FIRST SECOND THIRD FOURTH", "DEFAULT"),
Expand Down
65 changes: 35 additions & 30 deletions framework/src/constraints/MortarScalarBase.C
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,14 @@ MortarScalarBase::validParams()
// This name is fixed and required to be equal to the previous parameter; need to add error
// checks...
params.addCoupledVar("coupled_scalar", "Repeat name of scalar variable to ensure dependency");
params.addParam<bool>("compute_scalar_residuals", true, "Whether to compute scalar residuals");
return params;
}

MortarScalarBase::MortarScalarBase(const InputParameters & parameters)
: MortarConstraint(parameters),
_use_scalar(isParamValid("scalar_variable") ? true : false),
_compute_scalar_residuals(!_use_scalar ? false : getParam<bool>("compute_scalar_residuals")),
_kappa_dummy(),
_kappa_var_ptr(
_use_scalar ? &_sys.getScalarVariable(_tid, parameters.get<VariableName>("scalar_variable"))
Expand All @@ -47,7 +49,7 @@ MortarScalarBase::computeResidual()
{
MortarConstraintBase::computeResidual();

if (_use_scalar)
if (_compute_scalar_residuals)
{
std::vector<Real> scalar_residuals(_k_order);
for (_qp = 0; _qp < _qrule_msm->n_points(); _qp++)
Expand Down Expand Up @@ -98,42 +100,45 @@ MortarScalarBase::computeJacobian()
// Compute the jacobian for the lower dimensional LM dofs (if we even have an LM variable)
computeOffDiagJacobianScalar(Moose::MortarType::Lower, jvariable->number());

// Handle ALL d-_kappa-residual / d-_var and d-_kappa-residual / d-jvar columns
auto & ce = _assembly.scalarFieldCouplingEntries();
for (const auto & it : ce)
if (_compute_scalar_residuals)
{
MooseVariableScalar & ivariable = *(it.first);
MooseVariableFEBase & jvariable = *(it.second);
// Handle ALL d-_kappa-residual / d-_var and d-_kappa-residual / d-jvar columns
auto & ce = _assembly.scalarFieldCouplingEntries();
for (const auto & it : ce)
{
MooseVariableScalar & ivariable = *(it.first);
MooseVariableFEBase & jvariable = *(it.second);

unsigned int ivar = ivariable.number();
unsigned int jvar_num = jvariable.number();
unsigned int ivar = ivariable.number();
unsigned int jvar_num = jvariable.number();

if (ivar != _kappa_var) // only do the row for _kappa_var in this object
continue;
if (ivar != _kappa_var) // only do the row for _kappa_var in this object
continue;

if (_compute_primal_residuals)
{
// Compute the jacobian for the secondary interior primal dofs
computeScalarOffDiagJacobian(Moose::MortarType::Secondary, jvar_num);
// Compute the jacobian for the primary interior primal dofs.
computeScalarOffDiagJacobian(Moose::MortarType::Primary, jvar_num);
if (_compute_primal_residuals)
{
// Compute the jacobian for the secondary interior primal dofs
computeScalarOffDiagJacobian(Moose::MortarType::Secondary, jvar_num);
// Compute the jacobian for the primary interior primal dofs.
computeScalarOffDiagJacobian(Moose::MortarType::Primary, jvar_num);
}
if (_compute_lm_residuals)
// Compute the jacobian for the lower dimensional LM dofs (if we even have an LM variable)
computeScalarOffDiagJacobian(Moose::MortarType::Lower, jvar_num);
}
if (_compute_lm_residuals)
// Compute the jacobian for the lower dimensional LM dofs (if we even have an LM variable)
computeScalarOffDiagJacobian(Moose::MortarType::Lower, jvar_num);
}

// Do: d-_kappa-residual / d-_kappa and d-_kappa-residual / d-jvar,
// only want to process only nl-variables (not aux ones)
for (const auto & jvariable : coupled_scalar_vars)
{
if (_sys.hasScalarVariable(jvariable->name()))
// Do: d-_kappa-residual / d-_kappa and d-_kappa-residual / d-jvar,
// only want to process only nl-variables (not aux ones)
for (const auto & jvariable : coupled_scalar_vars)
{
const unsigned int jvar_num = jvariable->number();
if (jvar_num == _kappa_var)
computeScalarJacobian(); // d-_kappa-residual / d-_kappa
else
computeScalarOffDiagJacobianScalar(jvar_num); // d-_kappa-residual / d-jvar
if (_sys.hasScalarVariable(jvariable->name()))
{
const unsigned int jvar_num = jvariable->number();
if (jvar_num == _kappa_var)
computeScalarJacobian(); // d-_kappa-residual / d-_kappa
else
computeScalarOffDiagJacobianScalar(jvar_num); // d-_kappa-residual / d-jvar
}
}
}
}
Expand Down
20 changes: 14 additions & 6 deletions framework/src/kernels/ADKernelScalarBase.C
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,17 @@ ADKernelScalarBase::validParams()
// This name is fixed and required to be equal to the previous parameter; need to add error
// checks...
params.addCoupledVar("coupled_scalar", "Repeat name of scalar variable to ensure dependency");
params.addParam<bool>("compute_scalar_residuals", true, "Whether to compute scalar residuals");
params.addParam<bool>(
"compute_field_residuals", true, "Whether to compute residuals for the field variable.");
return params;
}

ADKernelScalarBase::ADKernelScalarBase(const InputParameters & parameters)
: ADKernel(parameters),
_use_scalar(isParamValid("scalar_variable") ? true : false),
_compute_scalar_residuals(!_use_scalar ? false : getParam<bool>("compute_scalar_residuals")),
_compute_field_residuals(getParam<bool>("compute_field_residuals")),
_kappa_dummy(),
_kappa_var_ptr(
_use_scalar ? &_sys.getScalarVariable(_tid, parameters.get<VariableName>("scalar_variable"))
Expand All @@ -52,9 +57,10 @@ ADKernelScalarBase::ADKernelScalarBase(const InputParameters & parameters)
void
ADKernelScalarBase::computeResidual()
{
ADKernel::computeResidual(); // compute and assemble regular variable contributions
if (_compute_field_residuals)
ADKernel::computeResidual(); // compute and assemble regular variable contributions

if (_use_scalar)
if (_compute_scalar_residuals)
{
std::vector<Real> scalar_residuals(_k_order);
for (_qp = 0; _qp < _qrule->n_points(); _qp++)
Expand All @@ -75,12 +81,13 @@ ADKernelScalarBase::computeResidual()
void
ADKernelScalarBase::computeJacobian()
{
ADKernel::computeJacobian();
if (_compute_field_residuals)
ADKernel::computeJacobian();

#ifndef MOOSE_SPARSE_AD
mooseError("ADKernelScalarBase assembly only supported for non-sparse AD");
#else
if (_use_scalar)
if (_compute_scalar_residuals)
{
computeScalarResidualsForJacobian();
_assembly.processResidualsAndJacobian(_scalar_residuals,
Expand Down Expand Up @@ -108,12 +115,13 @@ ADKernelScalarBase::computeOffDiagJacobianScalar(const unsigned int /*jvar_num*/
void
ADKernelScalarBase::computeResidualAndJacobian()
{
ADKernel::computeResidualAndJacobian();
if (_compute_field_residuals)
ADKernel::computeResidualAndJacobian();

#ifndef MOOSE_SPARSE_AD
mooseError("ADKernelScalarBase assembly only supported for non-sparse AD");
#else
if (_use_scalar)
if (_compute_scalar_residuals)
{
computeScalarResidualsForJacobian();
_assembly.processResidualsAndJacobian(_scalar_residuals,
Expand Down
47 changes: 32 additions & 15 deletions framework/src/kernels/KernelScalarBase.C
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,17 @@ KernelScalarBase::validParams()
// This name is fixed and required to be equal to the previous parameter; need to add error
// checks...
params.addCoupledVar("coupled_scalar", "Repeat name of scalar variable to ensure dependency");
params.addParam<bool>("compute_scalar_residuals", true, "Whether to compute scalar residuals");
params.addParam<bool>(
"compute_field_residuals", true, "Whether to compute residuals for the field variable.");
return params;
}

KernelScalarBase::KernelScalarBase(const InputParameters & parameters)
: Kernel(parameters),
_use_scalar(isParamValid("scalar_variable") ? true : false),
_compute_scalar_residuals(!_use_scalar ? false : getParam<bool>("compute_scalar_residuals")),
_compute_field_residuals(getParam<bool>("compute_field_residuals")),
_kappa_dummy(),
_kappa_var_ptr(
_use_scalar ? &_sys.getScalarVariable(_tid, parameters.get<VariableName>("scalar_variable"))
Expand All @@ -47,9 +52,10 @@ KernelScalarBase::KernelScalarBase(const InputParameters & parameters)
void
KernelScalarBase::computeResidual()
{
Kernel::computeResidual(); // compute and assemble regular variable contributions
if (_compute_field_residuals)
Kernel::computeResidual(); // compute and assemble regular variable contributions

if (_use_scalar)
if (_compute_scalar_residuals)
computeScalarResidual();
}

Expand All @@ -74,9 +80,10 @@ KernelScalarBase::computeScalarResidual()
void
KernelScalarBase::computeJacobian()
{
Kernel::computeJacobian();
if (_compute_field_residuals)
Kernel::computeJacobian();

if (_use_scalar)
if (_compute_scalar_residuals)
computeScalarJacobian();
}

Expand Down Expand Up @@ -108,8 +115,10 @@ KernelScalarBase::computeOffDiagJacobian(const unsigned int jvar_num)
{
if (jvar_num == variable().number()) // column for this kernel's variable
{
Kernel::computeJacobian(); // d-_var-residual / d-_var
computeScalarOffDiagJacobian(jvar_num); // d-_kappa-residual / d-_var
if (_compute_field_residuals)
Kernel::computeJacobian(); // d-_var-residual / d-_var
if (_compute_scalar_residuals)
computeScalarOffDiagJacobian(jvar_num); // d-_kappa-residual / d-_var
}
else if (jvar_num == _kappa_var) // column for this kernel's scalar variable
{
Expand All @@ -118,19 +127,23 @@ KernelScalarBase::computeOffDiagJacobian(const unsigned int jvar_num)
}
else // some other column for regular variable
{
Kernel::computeOffDiagJacobian(jvar_num); // d-_var-residual / d-jvar
computeScalarOffDiagJacobian(jvar_num); // d-_kappa-residual / d-jvar
if (_compute_field_residuals)
Kernel::computeOffDiagJacobian(jvar_num); // d-_var-residual / d-jvar
if (_compute_scalar_residuals)
computeScalarOffDiagJacobian(jvar_num); // d-_kappa-residual / d-jvar
}
}
else
{
if (jvar_num == variable().number()) // column for this kernel's variable
{
Kernel::computeJacobian(); // d-_var-residual / d-_var
if (_compute_field_residuals)
Kernel::computeJacobian(); // d-_var-residual / d-_var
}
else // some other column for regular variable
{
Kernel::computeOffDiagJacobian(jvar_num); // d-_var-residual / d-jvar
if (_compute_field_residuals)
Kernel::computeOffDiagJacobian(jvar_num); // d-_var-residual / d-jvar
}
}
}
Expand Down Expand Up @@ -205,19 +218,23 @@ KernelScalarBase::computeOffDiagJacobianScalar(const unsigned int svar_num)
// Perform assembly using method in Kernel; works for simple cases but not general
// Kernel::computeOffDiagJacobianScalar(svar_num); // d-_var-residual / d-_kappa
// Perform assembly using local_ke like d-_kappa_var-residual / d-_var
computeOffDiagJacobianScalarLocal(svar_num); // d-_var-residual / d-_kappa
computeScalarJacobian(); // d-_kappa-residual / d-_kappa
if (_compute_field_residuals)
computeOffDiagJacobianScalarLocal(svar_num); // d-_var-residual / d-_kappa
if (_compute_scalar_residuals)
computeScalarJacobian(); // d-_kappa-residual / d-_kappa
}
else // some other column for scalar variable
{
// Perform assembly using method in Kernel; works for simple cases but not general
// Kernel::computeOffDiagJacobianScalar(svar_num); // d-_var-residual / d-jvar
// Perform assembly using local_ke like d-_kappa_var-residual / d-_var
computeOffDiagJacobianScalarLocal(svar_num); // d-_var-residual / d-svar
computeScalarOffDiagJacobianScalar(svar_num); // d-_kappa-residual / d-svar
if (_compute_field_residuals)
computeOffDiagJacobianScalarLocal(svar_num); // d-_var-residual / d-svar
if (_compute_scalar_residuals)
computeScalarOffDiagJacobianScalar(svar_num); // d-_kappa-residual / d-svar
}
}
else
else if (_compute_field_residuals)
Kernel::computeOffDiagJacobianScalar(svar_num); // d-_var-residual / d-svar
}

Expand Down

0 comments on commit 06c2d09

Please sign in to comment.