- reaction_coefficientThe name of the reactivity, can be scalar, vector, or matrix material property.
C++ Type:MaterialPropertyName
Controllable:No
Description:The name of the reactivity, can be scalar, vector, or matrix material property.
- variableThe name of the variable that this residual object operates on
C++ Type:NonlinearVariableName
Controllable:No
Description:The name of the variable that this residual object operates on
ArrayReaction
Description
This array kernel implements the following piece of a weak form: where is the test function, is the finite element solution and is the reaction coefficients.
Similarly as showed in ArrayDiffusion, we can rearrange it into where the underlined term is the vector provided by ArrayReaction::computeQpResidual. Detailed explanations on the notations can be found in ArrayDiffusion.
In general, the reaction coefficient is a square matrix with the size of the number of components. When it is a diagonal matrix, it can be represented by a vector. In such a case, the components are not coupled with this array reaction kernel. If all elements of the diffusion coefficient vector are the same, we can use a scalar reaction coefficient. Thus this kernel gives users an option to set the type of diffusion coefficient with a parameter named as reaction_coefficient_type. Users can set it to scalar, array or full cooresponding to scalar, diagonal matrix and full matrix respectively. Its default value is array.
The local Jacobian can be found in the following equation: The underlined part is the local Jacobian evaluated by ArrayReaction::computeQpJacobian and ArrayReaction::computeQpOffDiagJacobian.
Input Parameters
- blockThe list of blocks (ids or names) that this object will be applied
C++ Type:std::vector<SubdomainName>
Controllable:No
Description:The list of blocks (ids or names) that this object will be applied
- displacementsThe displacements
C++ Type:std::vector<VariableName>
Controllable:No
Description:The displacements
- prop_getter_suffixAn optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
C++ Type:MaterialPropertyName
Controllable:No
Description:An optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
Optional Parameters
- absolute_value_vector_tagsThe tags for the vectors this residual object should fill with the absolute value of the residual contribution
C++ Type:std::vector<TagName>
Controllable:No
Description:The tags for the vectors this residual object should fill with the absolute value of the residual contribution
- extra_matrix_tagsThe extra tags for the matrices this Kernel should fill
C++ Type:std::vector<TagName>
Controllable:No
Description:The extra tags for the matrices this Kernel should fill
- extra_vector_tagsThe extra tags for the vectors this Kernel should fill
C++ Type:std::vector<TagName>
Controllable:No
Description:The extra tags for the vectors this Kernel should fill
- matrix_tagssystemThe tag for the matrices this Kernel should fill
Default:system
C++ Type:MultiMooseEnum
Options:nontime, system
Controllable:No
Description:The tag for the matrices this Kernel should fill
- vector_tagsnontimeThe tag for the vectors this Kernel should fill
Default:nontime
C++ Type:MultiMooseEnum
Options:nontime, time
Controllable:No
Description:The tag for the vectors this Kernel should fill
Tagging Parameters
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
Controllable:No
Description:Adds user-defined labels for accessing object parameters via control logic.
- diag_save_inThe name of auxiliary variables to save this Kernel's diagonal Jacobian contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)
C++ Type:std::vector<AuxVariableName>
Controllable:No
Description:The name of auxiliary variables to save this Kernel's diagonal Jacobian contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)
- enableTrueSet the enabled status of the MooseObject.
Default:True
C++ Type:bool
Controllable:Yes
Description:Set the enabled status of the MooseObject.
- implicitTrueDetermines whether this object is calculated using an implicit or explicit form
Default:True
C++ Type:bool
Controllable:No
Description:Determines whether this object is calculated using an implicit or explicit form
- save_inThe name of auxiliary variables to save this Kernel's residual contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)
C++ Type:std::vector<AuxVariableName>
Controllable:No
Description:The name of auxiliary variables to save this Kernel's residual contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)
- seed0The seed for the master random number generator
Default:0
C++ Type:unsigned int
Controllable:No
Description:The seed for the master random number generator
- use_displaced_meshFalseWhether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Default:False
C++ Type:bool
Controllable:No
Description:Whether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Advanced Parameters
Input Files
- (test/tests/problems/eigen_problem/jfnk_mo/ne_array_mo.i)
- (test/tests/tag/tag-array-grad.i)
- (test/tests/transfers/multiapp_copy_transfer/array_variable_transfer/sub.i)
- (test/tests/problems/eigen_problem/arraykernels/ne_array_kernels.i)
- (test/tests/kernels/array_kernels/array_custom_coupling_test.i)
- (test/tests/kernels/array_kernels/array_diffusion_reaction.i)
- (test/tests/bcs/array_vacuum/array_vacuum.i)
- (test/tests/kernels/hfem/array_neumann.i)
- (test/tests/preconditioners/fsp/array-test.i)
- (test/tests/kernels/array_kernels/array_diffusion_reaction_dg.i)
- (test/tests/kernels/array_kernels/array_diffusion_reaction_transient.i)
- (test/tests/kernels/array_kernels/array_save_in.i)
- (test/tests/kernels/hfem/array_dirichlet_pjfnk.i)
- (test/tests/kernels/array_kernels/array_diffusion_reaction_coupling.i)
- (modules/optimization/test/tests/executioners/steady_and_adjoint/array_variable.i)
- (test/tests/problems/eigen_problem/jfnk_mo/ne_mo_with_linear_aux.i)
- (test/tests/variables/array_variable/array_variable_size_one_test.i)
- (test/tests/kernels/hfem/variable_robin.i)
- (test/tests/kernels/array_kernels/array_diffusion_reaction_other_coupling.i)
(framework/src/kernels/ArrayReaction.C)
// This file is part of the MOOSE framework
// https://www.mooseframework.org
//
// All rights reserved, see COPYRIGHT for full restrictions
// https://github.com/idaholab/moose/blob/master/COPYRIGHT
//
// Licensed under LGPL 2.1, please see LICENSE for details
// https://www.gnu.org/licenses/lgpl-2.1.html
#include "ArrayReaction.h"
registerMooseObject("MooseApp", ArrayReaction);
InputParameters
ArrayReaction::validParams()
{
InputParameters params = ArrayKernel::validParams();
params.addRequiredParam<MaterialPropertyName>(
"reaction_coefficient",
"The name of the reactivity, can be scalar, vector, or matrix material property.");
params.addClassDescription("The array reaction operator with the weak "
"form of $(\\psi_i, u_h)$.");
return params;
}
ArrayReaction::ArrayReaction(const InputParameters & parameters)
: ArrayKernel(parameters),
_r(hasMaterialProperty<Real>("reaction_coefficient")
? &getMaterialProperty<Real>("reaction_coefficient")
: nullptr),
_r_array(hasMaterialProperty<RealEigenVector>("reaction_coefficient")
? &getMaterialProperty<RealEigenVector>("reaction_coefficient")
: nullptr),
_r_2d_array(hasMaterialProperty<RealEigenMatrix>("reaction_coefficient")
? &getMaterialProperty<RealEigenMatrix>("reaction_coefficient")
: nullptr)
{
if (!_r && !_r_array && !_r_2d_array)
{
MaterialPropertyName mat = getParam<MaterialPropertyName>("reaction_coefficient");
mooseError("Property " + mat + " is of unsupported type for ArrayReaction");
}
}
void
ArrayReaction::computeQpResidual(RealEigenVector & residual)
{
if (_r)
residual = (*_r)[_qp] * _u[_qp] * _test[_i][_qp];
else if (_r_array)
{
mooseAssert((*_r_array)[_qp].size() == _var.count(),
"reaction_coefficient size is inconsistent with the number of components of array "
"variable");
// WARNING: use noalias() syntax with caution. See ArrayDiffusion.C for more details.
residual.noalias() = (*_r_array)[_qp].asDiagonal() * _u[_qp] * _test[_i][_qp];
}
else
{
mooseAssert((*_r_2d_array)[_qp].cols() == _var.count(),
"reaction_coefficient size is inconsistent with the number of components of array "
"variable");
mooseAssert((*_r_2d_array)[_qp].rows() == _var.count(),
"reaction_coefficient size is inconsistent with the number of components of array "
"variable");
// WARNING: use noalias() syntax with caution. See ArrayDiffusion.C for more details.
residual.noalias() = (*_r_2d_array)[_qp] * _u[_qp] * _test[_i][_qp];
}
}
RealEigenVector
ArrayReaction::computeQpJacobian()
{
if (_r)
return RealEigenVector::Constant(_var.count(), _phi[_j][_qp] * _test[_i][_qp] * (*_r)[_qp]);
else if (_r_array)
return _phi[_j][_qp] * _test[_i][_qp] * (*_r_array)[_qp];
else
return _phi[_j][_qp] * _test[_i][_qp] * (*_r_2d_array)[_qp].diagonal();
}
RealEigenMatrix
ArrayReaction::computeQpOffDiagJacobian(const MooseVariableFEBase & jvar)
{
if (jvar.number() == _var.number() && _r_2d_array)
return _phi[_j][_qp] * _test[_i][_qp] * (*_r_2d_array)[_qp];
else
return ArrayKernel::computeQpOffDiagJacobian(jvar);
}
(framework/src/kernels/ArrayReaction.C)
// This file is part of the MOOSE framework
// https://www.mooseframework.org
//
// All rights reserved, see COPYRIGHT for full restrictions
// https://github.com/idaholab/moose/blob/master/COPYRIGHT
//
// Licensed under LGPL 2.1, please see LICENSE for details
// https://www.gnu.org/licenses/lgpl-2.1.html
#include "ArrayReaction.h"
registerMooseObject("MooseApp", ArrayReaction);
InputParameters
ArrayReaction::validParams()
{
InputParameters params = ArrayKernel::validParams();
params.addRequiredParam<MaterialPropertyName>(
"reaction_coefficient",
"The name of the reactivity, can be scalar, vector, or matrix material property.");
params.addClassDescription("The array reaction operator with the weak "
"form of $(\\psi_i, u_h)$.");
return params;
}
ArrayReaction::ArrayReaction(const InputParameters & parameters)
: ArrayKernel(parameters),
_r(hasMaterialProperty<Real>("reaction_coefficient")
? &getMaterialProperty<Real>("reaction_coefficient")
: nullptr),
_r_array(hasMaterialProperty<RealEigenVector>("reaction_coefficient")
? &getMaterialProperty<RealEigenVector>("reaction_coefficient")
: nullptr),
_r_2d_array(hasMaterialProperty<RealEigenMatrix>("reaction_coefficient")
? &getMaterialProperty<RealEigenMatrix>("reaction_coefficient")
: nullptr)
{
if (!_r && !_r_array && !_r_2d_array)
{
MaterialPropertyName mat = getParam<MaterialPropertyName>("reaction_coefficient");
mooseError("Property " + mat + " is of unsupported type for ArrayReaction");
}
}
void
ArrayReaction::computeQpResidual(RealEigenVector & residual)
{
if (_r)
residual = (*_r)[_qp] * _u[_qp] * _test[_i][_qp];
else if (_r_array)
{
mooseAssert((*_r_array)[_qp].size() == _var.count(),
"reaction_coefficient size is inconsistent with the number of components of array "
"variable");
// WARNING: use noalias() syntax with caution. See ArrayDiffusion.C for more details.
residual.noalias() = (*_r_array)[_qp].asDiagonal() * _u[_qp] * _test[_i][_qp];
}
else
{
mooseAssert((*_r_2d_array)[_qp].cols() == _var.count(),
"reaction_coefficient size is inconsistent with the number of components of array "
"variable");
mooseAssert((*_r_2d_array)[_qp].rows() == _var.count(),
"reaction_coefficient size is inconsistent with the number of components of array "
"variable");
// WARNING: use noalias() syntax with caution. See ArrayDiffusion.C for more details.
residual.noalias() = (*_r_2d_array)[_qp] * _u[_qp] * _test[_i][_qp];
}
}
RealEigenVector
ArrayReaction::computeQpJacobian()
{
if (_r)
return RealEigenVector::Constant(_var.count(), _phi[_j][_qp] * _test[_i][_qp] * (*_r)[_qp]);
else if (_r_array)
return _phi[_j][_qp] * _test[_i][_qp] * (*_r_array)[_qp];
else
return _phi[_j][_qp] * _test[_i][_qp] * (*_r_2d_array)[_qp].diagonal();
}
RealEigenMatrix
ArrayReaction::computeQpOffDiagJacobian(const MooseVariableFEBase & jvar)
{
if (jvar.number() == _var.number() && _r_2d_array)
return _phi[_j][_qp] * _test[_i][_qp] * (*_r_2d_array)[_qp];
else
return ArrayKernel::computeQpOffDiagJacobian(jvar);
}
(framework/src/kernels/ArrayReaction.C)
// This file is part of the MOOSE framework
// https://www.mooseframework.org
//
// All rights reserved, see COPYRIGHT for full restrictions
// https://github.com/idaholab/moose/blob/master/COPYRIGHT
//
// Licensed under LGPL 2.1, please see LICENSE for details
// https://www.gnu.org/licenses/lgpl-2.1.html
#include "ArrayReaction.h"
registerMooseObject("MooseApp", ArrayReaction);
InputParameters
ArrayReaction::validParams()
{
InputParameters params = ArrayKernel::validParams();
params.addRequiredParam<MaterialPropertyName>(
"reaction_coefficient",
"The name of the reactivity, can be scalar, vector, or matrix material property.");
params.addClassDescription("The array reaction operator with the weak "
"form of $(\\psi_i, u_h)$.");
return params;
}
ArrayReaction::ArrayReaction(const InputParameters & parameters)
: ArrayKernel(parameters),
_r(hasMaterialProperty<Real>("reaction_coefficient")
? &getMaterialProperty<Real>("reaction_coefficient")
: nullptr),
_r_array(hasMaterialProperty<RealEigenVector>("reaction_coefficient")
? &getMaterialProperty<RealEigenVector>("reaction_coefficient")
: nullptr),
_r_2d_array(hasMaterialProperty<RealEigenMatrix>("reaction_coefficient")
? &getMaterialProperty<RealEigenMatrix>("reaction_coefficient")
: nullptr)
{
if (!_r && !_r_array && !_r_2d_array)
{
MaterialPropertyName mat = getParam<MaterialPropertyName>("reaction_coefficient");
mooseError("Property " + mat + " is of unsupported type for ArrayReaction");
}
}
void
ArrayReaction::computeQpResidual(RealEigenVector & residual)
{
if (_r)
residual = (*_r)[_qp] * _u[_qp] * _test[_i][_qp];
else if (_r_array)
{
mooseAssert((*_r_array)[_qp].size() == _var.count(),
"reaction_coefficient size is inconsistent with the number of components of array "
"variable");
// WARNING: use noalias() syntax with caution. See ArrayDiffusion.C for more details.
residual.noalias() = (*_r_array)[_qp].asDiagonal() * _u[_qp] * _test[_i][_qp];
}
else
{
mooseAssert((*_r_2d_array)[_qp].cols() == _var.count(),
"reaction_coefficient size is inconsistent with the number of components of array "
"variable");
mooseAssert((*_r_2d_array)[_qp].rows() == _var.count(),
"reaction_coefficient size is inconsistent with the number of components of array "
"variable");
// WARNING: use noalias() syntax with caution. See ArrayDiffusion.C for more details.
residual.noalias() = (*_r_2d_array)[_qp] * _u[_qp] * _test[_i][_qp];
}
}
RealEigenVector
ArrayReaction::computeQpJacobian()
{
if (_r)
return RealEigenVector::Constant(_var.count(), _phi[_j][_qp] * _test[_i][_qp] * (*_r)[_qp]);
else if (_r_array)
return _phi[_j][_qp] * _test[_i][_qp] * (*_r_array)[_qp];
else
return _phi[_j][_qp] * _test[_i][_qp] * (*_r_2d_array)[_qp].diagonal();
}
RealEigenMatrix
ArrayReaction::computeQpOffDiagJacobian(const MooseVariableFEBase & jvar)
{
if (jvar.number() == _var.number() && _r_2d_array)
return _phi[_j][_qp] * _test[_i][_qp] * (*_r_2d_array)[_qp];
else
return ArrayKernel::computeQpOffDiagJacobian(jvar);
}
(test/tests/problems/eigen_problem/jfnk_mo/ne_array_mo.i)
[Mesh]
type = GeneratedMesh
dim = 2
xmin = 0
xmax = 10
ymin = 0
ymax = 10
elem_type = QUAD4
nx = 8
ny = 8
[]
# the minimum eigenvalue of this problem is 2*(PI/a)^2;
# Its inverse is 0.5*(a/PI)^2 = 5.0660591821169. Here a is equal to 10.
[Variables]
[u]
order = FIRST
family = LAGRANGE
components = 2
[]
[v]
order = FIRST
family = LAGRANGE
components = 2
[]
[]
[Kernels]
[diffu]
type = ArrayDiffusion
variable = u
diffusion_coefficient = dc
[]
[reactionu]
type = ArrayReaction
variable = u
reaction_coefficient = rc
extra_vector_tags = 'eigen'
[]
[diffv]
type = ArrayDiffusion
variable = v
diffusion_coefficient = dc
[]
[reactionv]
type = ArrayReaction
variable = v
reaction_coefficient = rc
extra_vector_tags = 'eigen'
[]
[]
[Materials]
[dc]
type = GenericConstantArray
prop_name = dc
prop_value = '1. 1.'
[]
[rc]
type = GenericConstantArray
prop_name = rc
prop_value = '-1 -1'
[]
[]
[BCs]
[hom_u]
type = ArrayDirichletBC
variable = u
values = '0 0'
boundary = '0 1 2 3'
[]
[eigenhom_u]
type = EigenArrayDirichletBC
variable = u
boundary = '0 1 2 3'
[]
[hom_v]
type = ArrayDirichletBC
variable = v
values = '0 0'
boundary = '0 1 2 3'
[]
[eigenhom_v]
type = EigenArrayDirichletBC
variable = v
boundary = '0 1 2 3'
[]
[]
[Executioner]
type = Eigenvalue
solve_type = PJFNKMO
constant_matrices = true
[]
[VectorPostprocessors]
[./eigenvalues]
type = Eigenvalues
execute_on = 'timestep_end'
[../]
[]
[Outputs]
csv = true
execute_on = 'timestep_end'
[]
(test/tests/tag/tag-array-grad.i)
[Mesh]
[gen]
type = CartesianMeshGenerator
dim = 2
dx = '1 1'
ix = '2 2'
dy = '1 1'
iy = '2 2'
subdomain_id = '0 0 0 1'
[]
[]
[Variables]
[u]
order = FIRST
family = L2_LAGRANGE
components = 2
[]
[]
[Kernels]
[diff]
type = ArrayDiffusion
variable = u
diffusion_coefficient = dc
[]
[reaction]
type = ArrayReaction
variable = u
reaction_coefficient = rc
[]
[]
[DGKernels]
[dgdiff]
type = ArrayDGDiffusion
variable = u
diff = dc
[]
[]
[BCs]
[left]
type = ArrayVacuumBC
variable = u
boundary = 1
[]
[right]
type = ArrayPenaltyDirichletBC
variable = u
boundary = 2
value = '1 2'
penalty = 4
[]
[]
[Materials]
[dc0]
type = GenericConstantArray
block = 0
prop_name = dc
prop_value = '1 1'
[]
[dc1]
type = GenericConstantArray
block = 1
prop_name = dc
prop_value = '2 1'
[]
[rc]
type = GenericConstant2DArray
block = '0 1'
prop_name = rc
prop_value = '1 0; -0.1 1'
[]
[]
[AuxVariables]
[u_tag_x]
order = FIRST
family = L2_LAGRANGE
components = 2
[]
[u_tag_y]
order = FIRST
family = L2_LAGRANGE
components = 2
[]
[]
[AuxKernels]
[u_tag_x]
type = TagVectorArrayVariableGradientAux
variable = u_tag_x
v = u
grad_component = x
vector_tag = 'SOLUTION'
[]
[u_tag_y]
type = TagVectorArrayVariableGradientAux
variable = u_tag_y
v = u
grad_component = y
vector_tag = 'NONTIME'
[]
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
[Executioner]
type = Steady
solve_type = 'NEWTON'
[]
[Outputs]
exodus = true
[]
(test/tests/transfers/multiapp_copy_transfer/array_variable_transfer/sub.i)
[Mesh]
type = GeneratedMesh
dim = 2
nx = 10
ny = 10
[]
[Variables]
[u]
order = FIRST
family = LAGRANGE
components = 2
[]
[]
[Kernels]
[diff]
type = ArrayDiffusion
variable = u
diffusion_coefficient = dc
[]
[reaction]
type = ArrayReaction
variable = u
reaction_coefficient = rc
[]
[]
[BCs]
[left]
type = ArrayDirichletBC
variable = u
boundary = 1
values = '0 0'
[]
[right]
type = ArrayDirichletBC
variable = u
boundary = 2
values = '1 2'
[]
[]
[Materials]
[dc]
type = GenericConstantArray
prop_name = dc
prop_value = '1 1'
[]
[rc]
type = GenericConstant2DArray
prop_name = rc
prop_value = '1 0; -0.1 1'
[]
[]
[Executioner]
type = Transient
num_steps = 1
solve_type = 'PJFNK'
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
[]
[Outputs]
exodus = true
[]
(test/tests/problems/eigen_problem/arraykernels/ne_array_kernels.i)
[Mesh]
type = GeneratedMesh
dim = 2
xmin = 0
xmax = 10
ymin = 0
ymax = 10
elem_type = QUAD4
nx = 8
ny = 8
[]
# the minimum eigenvalue of this problem is 2*(PI/a)^2;
# Its inverse is 0.5*(a/PI)^2 = 5.0660591821169. Here a is equal to 10.
[Variables]
[u]
order = FIRST
family = LAGRANGE
components = 2
[]
[v]
order = FIRST
family = LAGRANGE
components = 2
[]
[]
[Kernels]
[diffu]
type = ArrayDiffusion
variable = u
diffusion_coefficient = dc
[]
[reactionu]
type = ArrayReaction
variable = u
reaction_coefficient = rc
extra_vector_tags = 'eigen'
[]
[diffv]
type = ArrayDiffusion
variable = v
diffusion_coefficient = dc
[]
[reactionv]
type = ArrayReaction
variable = v
reaction_coefficient = rc
extra_vector_tags = 'eigen'
[]
[]
[Materials]
[dc]
type = GenericConstantArray
prop_name = dc
prop_value = '1. 1.'
[]
[rc]
type = GenericConstantArray
prop_name = rc
prop_value = '-1 -1'
[]
[]
[BCs]
[hom_u]
type = ArrayDirichletBC
variable = u
values = '0 0'
boundary = '0 1 2 3'
[]
[eigenhom_u]
type = EigenArrayDirichletBC
variable = u
boundary = '0 1 2 3'
[]
[hom_v]
type = ArrayDirichletBC
variable = v
values = '0 0'
boundary = '0 1 2 3'
[]
[eigenhom_v]
type = EigenArrayDirichletBC
variable = v
boundary = '0 1 2 3'
[]
[]
[Executioner]
type = Eigenvalue
[]
[VectorPostprocessors]
[./eigenvalues]
type = Eigenvalues
execute_on = 'timestep_end'
[../]
[]
[Outputs]
csv = true
execute_on = 'timestep_end'
[]
(test/tests/kernels/array_kernels/array_custom_coupling_test.i)
[Mesh]
[square]
type = GeneratedMeshGenerator
nx = 4
ny = 4
dim = 2
[]
[]
[Variables]
[u]
order = FIRST
family = L2_LAGRANGE
components = 2
[]
[]
[Kernels]
[diff]
type = ArrayDiffusion
variable = u
diffusion_coefficient = dc
[]
[reaction]
type = ArrayReaction
variable = u
reaction_coefficient = rc
[]
[]
[DGKernels]
[dgdiff]
type = ArrayDGDiffusion
variable = u
diff = dc
[]
[]
[BCs]
[left]
type = ArrayVacuumBC
variable = u
boundary = 1
[]
[right]
type = ArrayPenaltyDirichletBC
variable = u
boundary = 2
value = '1 2'
penalty = 4
[]
[]
[Materials]
[dc]
type = GenericConstantArray
prop_name = dc
prop_value = '1 1'
[]
[rc]
type = GenericConstant2DArray
prop_name = rc
prop_value = '1 0; -0.1 1'
[]
[]
[Preconditioning]
[pbp]
type = PBP
solve_order = 'u_0 u_1'
preconditioner = 'AMG AMG'
off_diag_row = 'u_0 u_1'
off_diag_column = 'u_0 u_1'
[]
[]
[Executioner]
type = Steady
solve_type = JFNK
petsc_options = '-mat_view'
[]
[Outputs]
exodus = true
[]
(test/tests/kernels/array_kernels/array_diffusion_reaction.i)
[Mesh]
type = GeneratedMesh
dim = 2
nx = 4
ny = 4
[]
[Variables]
[u]
order = FIRST
family = LAGRANGE
components = 2
[]
[]
[Kernels]
[diff]
type = ArrayDiffusion
variable = u
diffusion_coefficient = dc
[]
[reaction]
type = ArrayReaction
variable = u
reaction_coefficient = rc
[]
[]
[BCs]
[left]
type = ArrayDirichletBC
variable = u
boundary = 1
values = '0 0'
[]
[right]
type = ArrayDirichletBC
variable = u
boundary = 2
values = '1 2'
[]
[]
[Materials]
[dc]
type = GenericConstantArray
prop_name = dc
prop_value = '1 1'
[]
[rc]
type = GenericConstant2DArray
prop_name = rc
prop_value = '1 0; -0.1 1'
[]
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
[Executioner]
type = Steady
solve_type = 'NEWTON'
[]
[Outputs]
exodus = true
[]
(test/tests/bcs/array_vacuum/array_vacuum.i)
[Mesh]
type = GeneratedMesh
dim = 2
nx = 4
ny = 4
[]
[Variables]
[u]
order = FIRST
family = LAGRANGE
components = 2
[]
[]
[Kernels]
[diff]
type = ArrayDiffusion
variable = u
diffusion_coefficient = dc
[]
[reaction]
type = ArrayReaction
variable = u
reaction_coefficient = rc
[]
[]
[BCs]
[left]
type = ArrayVacuumBC
variable = u
boundary = 1
alpha = '1 1.2'
[]
[right]
type = ArrayDirichletBC
variable = u
boundary = 2
values = '1 2'
[]
[]
[Materials]
[dc]
type = GenericConstantArray
prop_name = dc
prop_value = '1 1'
[]
[rc]
type = GenericConstant2DArray
prop_name = rc
prop_value = '1 0; -0.1 1'
[]
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
[Executioner]
type = Steady
solve_type = 'NEWTON'
[]
[Outputs]
exodus = true
[]
(test/tests/kernels/hfem/array_neumann.i)
[Mesh]
[square]
type = GeneratedMeshGenerator
nx = 3
ny = 3
dim = 2
[]
build_all_side_lowerd_mesh = true
[]
[Variables]
[u]
order = THIRD
family = MONOMIAL
block = 0
components = 2
[]
[lambda]
order = CONSTANT
family = MONOMIAL
block = INTERNAL_SIDE_LOWERD_SUBDOMAIN
components = 2
[]
[]
[AuxVariables]
[v]
order = CONSTANT
family = MONOMIAL
block = 0
initial_condition = '1'
[]
[]
[Kernels]
[diff]
type = ArrayDiffusion
variable = u
block = 0
diffusion_coefficient = dc
[]
[reaction]
type = ArrayReaction
variable = u
block = 0
reaction_coefficient = rc
[]
[source]
type = ArrayCoupledForce
variable = u
v = v
coef = '1 2'
block = 0
[]
[]
[DGKernels]
[surface]
type = ArrayHFEMDiffusion
variable = u
lowerd_variable = lambda
[]
[]
[BCs]
[all]
type = ArrayNeumannBC
boundary = 'left right top bottom'
variable = u
[]
[]
[Materials]
[dc]
type = GenericConstantArray
prop_name = dc
prop_value = '1 1'
[]
[rc]
type = GenericConstantArray
prop_name = rc
prop_value = '1 1'
[]
[]
[Postprocessors]
[intu]
type = ElementIntegralArrayVariablePostprocessor
variable = u
block = 0
[]
[lambdanorm]
type = ElementArrayL2Norm
variable = lambda
block = INTERNAL_SIDE_LOWERD_SUBDOMAIN
[]
[]
[Executioner]
type = Steady
solve_type = 'NEWTON'
petsc_options_iname = '-pc_type -snes_linesearch_type -pc_factor_mat_solver_type'
petsc_options_value = 'lu basic mumps'
[]
[Outputs]
[out]
# we hide lambda because it may flip sign due to element
# renumbering with distributed mesh
type = Exodus
hide = lambda
[]
[]
(test/tests/preconditioners/fsp/array-test.i)
[Mesh]
type = GeneratedMesh
dim = 2
nx = 4
ny = 4
[]
[Variables]
[u]
order = FIRST
family = LAGRANGE
components = 2
[]
[v]
[]
[]
[Kernels]
[diff]
type = ArrayDiffusion
variable = u
diffusion_coefficient = dc
[]
[reaction]
type = ArrayReaction
variable = u
reaction_coefficient = rc
[]
[diffv]
type = Diffusion
variable = v
[]
[vu]
type = ArrayCoupledForce
variable = u
v = v
coef = '0 0.5'
[]
[]
[BCs]
[left]
type = ArrayDirichletBC
variable = u
boundary = 1
values = '0 0'
[]
[right]
type = ArrayDirichletBC
variable = u
boundary = 2
values = '1 2'
[]
[leftv]
type = DirichletBC
variable = v
boundary = 1
value = 0
[]
[rightv]
type = DirichletBC
variable = v
boundary = 2
value = 2
[]
[]
[Materials]
[dc]
type = GenericConstantArray
prop_name = dc
prop_value = '1 1'
[]
[rc]
type = GenericConstant2DArray
prop_name = rc
prop_value = '1 0; -0.1 1'
[]
[]
[Preconditioning]
[FSP]
type = FSP
topsplit = 'uv'
[uv]
splitting = 'u v'
# Generally speaking, there are four types of splitting we could choose
# <additive,multiplicative,symmetric_multiplicative,schur>
splitting_type = symmetric_multiplicative
[]
[u]
vars = 'u'
petsc_options_iname = '-pc_type -ksp_type'
petsc_options_value = ' hypre preonly'
[]
[v]
vars = 'v'
petsc_options_iname = '-pc_type -ksp_type'
petsc_options_value = ' hypre preonly'
[]
[]
[]
[Postprocessors]
[intu0]
type = ElementIntegralArrayVariablePostprocessor
variable = u
component = 0
[]
[intu1]
type = ElementIntegralArrayVariablePostprocessor
variable = u
component = 1
[]
[intv]
type = ElementIntegralVariablePostprocessor
variable = v
[]
[]
[Executioner]
type = Steady
solve_type = 'NEWTON'
[]
[Outputs]
exodus = true
[]
(test/tests/kernels/array_kernels/array_diffusion_reaction_dg.i)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 2
nx = 4
ny = 4
[]
[subdomain1]
input = gen
type = SubdomainBoundingBoxGenerator
bottom_left = '0.5 0.5 0'
top_right = '1 1 0'
block_id = 1
[]
[]
[Variables]
[u]
order = FIRST
family = L2_LAGRANGE
components = 2
[]
[]
[Kernels]
[diff]
type = ArrayDiffusion
variable = u
diffusion_coefficient = dc
[]
[reaction]
type = ArrayReaction
variable = u
reaction_coefficient = rc
[]
[]
[DGKernels]
[dgdiff]
type = ArrayDGDiffusion
variable = u
diff = dc
[]
[]
[BCs]
[left]
type = ArrayVacuumBC
variable = u
boundary = 1
[]
[right]
type = ArrayPenaltyDirichletBC
variable = u
boundary = 2
value = '1 2'
penalty = 4
[]
[]
[Materials]
[dc0]
type = GenericConstantArray
block = 0
prop_name = dc
prop_value = '1 1'
[]
[dc1]
type = GenericConstantArray
block = 1
prop_name = dc
prop_value = '2 1'
[]
[rc]
type = GenericConstant2DArray
block = '0 1'
prop_name = rc
prop_value = '1 0; -0.1 1'
[]
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
[Postprocessors]
[intu0]
type = ElementIntegralArrayVariablePostprocessor
variable = u
component = 0
[]
[intu1]
type = ElementIntegralArrayVariablePostprocessor
variable = u
component = 1
[]
[]
[Executioner]
type = Steady
solve_type = 'NEWTON'
[]
[Outputs]
exodus = true
[]
(test/tests/kernels/array_kernels/array_diffusion_reaction_transient.i)
[Mesh]
type = GeneratedMesh
dim = 2
nx = 4
ny = 4
[]
[Variables]
[u]
order = FIRST
family = LAGRANGE
components = 2
[]
[]
[Kernels]
[dudt]
type = ArrayTimeDerivative
variable = u
time_derivative_coefficient = tc
[]
[diff]
type = ArrayDiffusion
variable = u
diffusion_coefficient = dc
[]
[reaction]
type = ArrayReaction
variable = u
reaction_coefficient = rc
[]
[]
[BCs]
[left]
type = ArrayDirichletBC
variable = u
boundary = 1
values = '0 0'
[]
[right]
type = ArrayDirichletBC
variable = u
boundary = 2
values = '1 2'
[]
[]
[Materials]
[tc]
type = GenericConstantArray
prop_name = tc
prop_value = '1 1'
[]
[dc]
type = GenericConstantArray
prop_name = dc
prop_value = '1 1'
[]
[rc]
type = GenericConstant2DArray
prop_name = rc
prop_value = '1 0; -0.1 1'
[]
[]
[Postprocessors]
[intu0]
type = ElementIntegralArrayVariablePostprocessor
variable = u
component = 0
[]
[intu1]
type = ElementIntegralArrayVariablePostprocessor
variable = u
component = 1
[]
[]
[Executioner]
type = Transient
solve_type = 'NEWTON'
dt = 0.1
num_steps = 10
[]
[Outputs]
exodus = true
[]
(test/tests/kernels/array_kernels/array_save_in.i)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 2
nx = 4
ny = 4
[]
[subdomain1]
input = gen
type = SubdomainBoundingBoxGenerator
bottom_left = '0.5 0.5 0'
top_right = '1 1 0'
block_id = 1
[]
[]
[Variables]
[u]
order = FIRST
family = L2_LAGRANGE
components = 2
[]
[]
[AuxVariables]
[u_diff_save_in]
order = FIRST
family = L2_LAGRANGE
components = 2
[]
[u_vacuum_save_in]
order = FIRST
family = L2_LAGRANGE
components = 2
[]
[u_dg_save_in]
order = FIRST
family = L2_LAGRANGE
components = 2
[]
[u_diff_diag_save_in]
order = FIRST
family = L2_LAGRANGE
components = 2
[]
[u_vacuum_diag_save_in]
order = FIRST
family = L2_LAGRANGE
components = 2
[]
[u_dg_diag_save_in]
order = FIRST
family = L2_LAGRANGE
components = 2
[]
[]
[Kernels]
[diff]
type = ArrayDiffusion
variable = u
diffusion_coefficient = dc
save_in = u_diff_save_in
diag_save_in = u_diff_diag_save_in
[]
[reaction]
type = ArrayReaction
variable = u
reaction_coefficient = rc
[]
[]
[DGKernels]
[dgdiff]
type = ArrayDGDiffusion
variable = u
diff = dc
save_in = u_dg_save_in
diag_save_in = u_dg_diag_save_in
[]
[]
[BCs]
[left]
type = ArrayVacuumBC
variable = u
boundary = 1
save_in = u_vacuum_save_in
diag_save_in = u_vacuum_diag_save_in
[]
[right]
type = ArrayPenaltyDirichletBC
variable = u
boundary = 2
value = '1 2'
penalty = 4
[]
[]
[Materials]
[dc0]
type = GenericConstantArray
block = 0
prop_name = dc
prop_value = '1 1'
[]
[dc1]
type = GenericConstantArray
block = 1
prop_name = dc
prop_value = '2 1'
[]
[rc]
type = GenericConstant2DArray
block = '0 1'
prop_name = rc
prop_value = '1 0; -0.1 1'
[]
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
[Postprocessors]
[intu0]
type = ElementIntegralArrayVariablePostprocessor
variable = u
component = 0
[]
[intu1]
type = ElementIntegralArrayVariablePostprocessor
variable = u
component = 1
[]
[]
[Executioner]
type = Steady
solve_type = 'NEWTON'
[]
[Outputs]
exodus = true
[]
(test/tests/kernels/hfem/array_dirichlet_pjfnk.i)
[Mesh]
[square]
type = GeneratedMeshGenerator
nx = 3
ny = 3
dim = 2
[]
build_all_side_lowerd_mesh = true
[]
[Variables]
[u]
order = THIRD
family = MONOMIAL
block = 0
components = 2
[]
[lambda]
order = CONSTANT
family = MONOMIAL
block = INTERNAL_SIDE_LOWERD_SUBDOMAIN
components = 2
[]
[lambdab]
order = CONSTANT
family = MONOMIAL
block = BOUNDARY_SIDE_LOWERD_SUBDOMAIN
components = 2
[]
[]
[AuxVariables]
[v]
order = CONSTANT
family = MONOMIAL
block = 0
initial_condition = '1'
[]
[]
[Kernels]
[diff]
type = ArrayDiffusion
variable = u
block = 0
diffusion_coefficient = dc
[]
[reaction]
type = ArrayReaction
variable = u
block = 0
reaction_coefficient = re
[]
[source]
type = ArrayCoupledForce
variable = u
v = v
coef = '1 2'
block = 0
[]
[]
[DGKernels]
[surface]
type = ArrayHFEMDiffusionTest
variable = u
lowerd_variable = lambda
for_pjfnk = true
[]
[]
[BCs]
[all]
type = ArrayHFEMDirichletTestBC
boundary = 'left right top bottom'
variable = u
lowerd_variable = lambdab
for_pjfnk = true
[]
[]
[Materials]
[dc]
type = GenericConstantArray
prop_name = dc
prop_value = '1 1'
[]
[re]
type = GenericConstantArray
prop_name = re
prop_value = '0.1 0.1'
[]
[]
[Postprocessors]
[intu]
type = ElementIntegralArrayVariablePostprocessor
variable = u
block = 0
[]
[lambdanorm]
type = ElementArrayL2Norm
variable = lambda
block = INTERNAL_SIDE_LOWERD_SUBDOMAIN
[]
[]
[Executioner]
type = Steady
[]
[Outputs]
[out]
# we hide lambda because it may flip sign due to element
# renumbering with distributed mesh
type = Exodus
hide = lambda
[]
[]
(test/tests/kernels/array_kernels/array_diffusion_reaction_coupling.i)
[Mesh]
type = GeneratedMesh
dim = 2
nx = 4
ny = 4
[]
[Variables]
[u]
order = FIRST
family = LAGRANGE
components = 2
[]
[v]
[]
[]
[Kernels]
[diff]
type = ArrayDiffusion
variable = u
diffusion_coefficient = dc
[]
[reaction]
type = ArrayReaction
variable = u
reaction_coefficient = rc
[]
[diffv]
type = Diffusion
variable = v
[]
[vu]
type = ArrayCoupledForce
variable = u
v = v
coef = '0 0.5'
[]
[]
[BCs]
[left]
type = ArrayDirichletBC
variable = u
boundary = 1
values = '0 0'
[]
[right]
type = ArrayDirichletBC
variable = u
boundary = 2
values = '1 2'
[]
[leftv]
type = DirichletBC
variable = v
boundary = 1
value = 0
[]
[rightv]
type = DirichletBC
variable = v
boundary = 2
value = 2
[]
[]
[Materials]
[dc]
type = GenericConstantArray
prop_name = dc
prop_value = '1 1'
[]
[rc]
type = GenericConstant2DArray
prop_name = rc
prop_value = '1 0; -0.1 1'
[]
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
[Postprocessors]
[intu0]
type = ElementIntegralArrayVariablePostprocessor
variable = u
component = 0
[]
[intu1]
type = ElementIntegralArrayVariablePostprocessor
variable = u
component = 1
[]
[intv]
type = ElementIntegralVariablePostprocessor
variable = v
[]
[]
[Executioner]
type = Steady
solve_type = 'NEWTON'
[]
[Outputs]
exodus = true
[]
(modules/optimization/test/tests/executioners/steady_and_adjoint/array_variable.i)
[Mesh]
[gmg]
type = GeneratedMeshGenerator
dim = 2
xmax = 1
ymax = 1
nx = 10
ny = 10
[]
[]
[Problem]
nl_sys_names = 'nl0 adjoint'
[]
[Variables]
[u]
components = 2
[]
[u_adjoint]
components = 2
nl_sys = adjoint
[]
[]
[Kernels]
[diff]
type = ArrayDiffusion
variable = u
diffusion_coefficient = D
[]
[reaction]
type = ArrayReaction
variable = u
reaction_coefficient = A
[]
[src_u]
type = ArrayBodyForce
variable = u
function = '1 0'
[]
[src_adjoint]
type = ArrayBodyForce
variable = u_adjoint
function = '0 1'
[]
[]
[Materials]
[diffc]
type = GenericConstantArray
prop_name = 'D'
prop_value = '1 1'
[]
[coeff]
type = GenericConstant2DArray
prop_name = 'A'
prop_value = '0 -10; -1 0'
[]
[]
[BCs]
[dirichlet]
type = ArrayDirichletBC
variable = u
boundary = 'top right'
values = '0 0'
[]
[]
[Executioner]
type = SteadyAndAdjoint
forward_system = nl0
adjoint_system = adjoint
nl_rel_tol = 1e-12
l_tol = 1e-12
[]
[Outputs]
exodus = true
[]
(test/tests/problems/eigen_problem/jfnk_mo/ne_mo_with_linear_aux.i)
[Mesh]
type = GeneratedMesh
dim = 2
xmin = 0
xmax = 10
ymin = 0
ymax = 10
elem_type = QUAD4
nx = 8
ny = 8
[]
# the minimum eigenvalue of this problem is 2*(PI/a)^2;
# Its inverse is 0.5*(a/PI)^2 = 5.0660591821169. Here a is equal to 10.
[Variables]
[u]
order = FIRST
family = LAGRANGE
components = 2
[]
[v]
order = FIRST
family = LAGRANGE
components = 2
[]
[]
[AuxVariables]
[w][]
[]
[AuxKernels]
[w]
type = ArrayVariableComponent
variable = w
array_variable = u
component = 0
execute_on = linear
[]
[]
[Kernels]
[diffu]
type = ArrayDiffusion
variable = u
diffusion_coefficient = dc
[]
[reactionu]
type = ArrayReaction
variable = u
reaction_coefficient = rc
extra_vector_tags = 'eigen'
[]
[diffv]
type = ArrayDiffusion
variable = v
diffusion_coefficient = dc
[]
[reactionv]
type = ArrayReaction
variable = v
reaction_coefficient = rc
extra_vector_tags = 'eigen'
[]
[]
[Materials]
[dc]
type = GenericConstantArray
prop_name = dc
prop_value = '1. 1.'
[]
[rc]
type = GenericConstantArray
prop_name = rc
prop_value = '-1 -1'
[]
[]
[BCs]
[hom_u]
type = ArrayDirichletBC
variable = u
values = '0 0'
boundary = '0 1 2 3'
[]
[eigenhom_u]
type = EigenArrayDirichletBC
variable = u
boundary = '0 1 2 3'
[]
[hom_v]
type = ArrayDirichletBC
variable = v
values = '0 0'
boundary = '0 1 2 3'
[]
[eigenhom_v]
type = EigenArrayDirichletBC
variable = v
boundary = '0 1 2 3'
[]
[]
[Executioner]
type = Eigenvalue
solve_type = PJFNKMO
constant_matrices = true
[]
[VectorPostprocessors]
[eigenvalues]
type = Eigenvalues
execute_on = 'timestep_end'
[]
[]
[Postprocessors]
[unorm]
type = ElementArrayL2Norm
variable = u
component = 0
[]
[wnorm]
type = ElementL2Norm
variable = w
[]
[]
[Outputs]
csv = true
execute_on = 'timestep_end'
[]
(test/tests/variables/array_variable/array_variable_size_one_test.i)
[Mesh]
[square]
type = GeneratedMeshGenerator
nx = 3
ny = 3
dim = 2
[]
[]
[Variables]
[u]
order = FIRST
family = MONOMIAL
components = 1
array = true
[]
[]
[Kernels]
[diff]
type = ArrayDiffusion
variable = u
diffusion_coefficient = dc
[]
[reaction]
type = ArrayReaction
variable = u
reaction_coefficient = rc
[]
[source]
type = ArrayBodyForce
variable = u
function = '1'
[]
[]
[BCs]
[all]
type = ArrayVacuumBC
boundary = 'left right top bottom'
variable = u
[]
[]
[Materials]
[dc]
type = GenericConstantArray
prop_name = dc
prop_value = '1'
[]
[rc]
type = GenericConstantArray
prop_name = rc
prop_value = '2'
[]
[]
[Executioner]
type = Steady
solve_type = 'NEWTON'
[]
[Outputs]
[out]
type = Exodus
[]
[]
(test/tests/kernels/hfem/variable_robin.i)
[Mesh]
[square]
type = GeneratedMeshGenerator
nx = 3
ny = 3
dim = 2
[]
build_all_side_lowerd_mesh = true
[]
[Variables]
[u]
order = THIRD
family = MONOMIAL
block = 0
components = 2
[]
[uhat]
order = CONSTANT
family = MONOMIAL
block = BOUNDARY_SIDE_LOWERD_SUBDOMAIN
components = 2
[]
[lambda]
order = CONSTANT
family = MONOMIAL
block = INTERNAL_SIDE_LOWERD_SUBDOMAIN
components = 2
[]
[lambdab]
order = CONSTANT
family = MONOMIAL
block = BOUNDARY_SIDE_LOWERD_SUBDOMAIN
components = 2
[]
[]
[AuxVariables]
[v]
order = CONSTANT
family = MONOMIAL
block = 0
initial_condition = '1'
[]
[]
[Kernels]
[diff]
type = ArrayDiffusion
variable = u
block = 0
diffusion_coefficient = dc
[]
[source]
type = ArrayCoupledForce
variable = u
v = v
coef = '1 2'
block = 0
[]
[uhat_reaction]
type = ArrayReaction
variable = uhat
block = BOUNDARY_SIDE_LOWERD_SUBDOMAIN
reaction_coefficient = rc
[]
[uhat_coupled]
type = ArrayCoupledForce
variable = uhat
block = BOUNDARY_SIDE_LOWERD_SUBDOMAIN
v = lambdab
is_v_array = true
coef = '1 1'
[]
[]
[DGKernels]
[surface]
type = ArrayHFEMDiffusion
variable = u
lowerd_variable = lambda
[]
[]
[BCs]
[all]
type = ArrayHFEMDirichletBC
boundary = 'left right top bottom'
variable = u
lowerd_variable = lambdab
uhat = uhat
[]
[]
[Materials]
[dc]
type = GenericConstantArray
prop_name = dc
prop_value = '1 1'
[]
[rc]
type = GenericConstantArray
block = BOUNDARY_SIDE_LOWERD_SUBDOMAIN
prop_name = rc
prop_value = '0.5 0.5'
[]
[]
[Postprocessors]
[intu]
type = ElementIntegralArrayVariablePostprocessor
variable = u
block = 0
[]
[lambdanorm]
type = ElementArrayL2Norm
variable = lambda
block = INTERNAL_SIDE_LOWERD_SUBDOMAIN
[]
[]
[Executioner]
type = Steady
solve_type = 'NEWTON'
petsc_options_iname = '-pc_type -snes_linesearch_type -pc_factor_mat_solver_type'
petsc_options_value = 'lu basic mumps'
[]
[Outputs]
[out]
# we hide lambda because it may flip sign due to element
# renumbering with distributed mesh
type = Exodus
hide = lambda
[]
[]
(test/tests/kernels/array_kernels/array_diffusion_reaction_other_coupling.i)
[Mesh]
type = GeneratedMesh
dim = 2
nx = 4
ny = 4
[]
[Variables]
[u]
order = FIRST
family = LAGRANGE
components = 2
[]
[v]
[]
[]
[Kernels]
[diff]
type = ArrayDiffusion
variable = u
diffusion_coefficient = dc
[]
[reaction]
type = ArrayReaction
variable = u
reaction_coefficient = rc
[]
[diffv]
type = Diffusion
variable = v
[]
[vu]
type = ArrayCoupledForce
variable = u
v = v
coef = '0 0.5'
[]
[uv]
type = CoupledArrayForce
variable = v
v = u
coef = '0.05 0'
[]
[]
[BCs]
[left]
type = ArrayDirichletBC
variable = u
boundary = 1
values = '0 0'
[]
[right]
type = ArrayDirichletBC
variable = u
boundary = 2
values = '1 2'
[]
[leftv]
type = DirichletBC
variable = v
boundary = 1
value = 0
[]
[rightv]
type = DirichletBC
variable = v
boundary = 2
value = 2
[]
[]
[Materials]
[dc]
type = GenericConstantArray
prop_name = dc
prop_value = '1 1'
[]
[rc]
type = GenericConstant2DArray
prop_name = rc
prop_value = '1 0; -0.1 1'
[]
[]
[Preconditioning]
[smp]
type = SMP
full = true
[]
[]
[Postprocessors]
[intu0]
type = ElementIntegralArrayVariablePostprocessor
variable = u
component = 0
[]
[intu1]
type = ElementIntegralArrayVariablePostprocessor
variable = u
component = 1
[]
[intv]
type = ElementIntegralVariablePostprocessor
variable = v
[]
[]
[Executioner]
type = Steady
solve_type = 'NEWTON'
[]
[Outputs]
exodus = true
[]