- 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
ODETimeDerivative
Returns the time derivative contribution to the residual for a scalar variable.
A scalar variable can be set to the solution of an ordinary differential equation (ODE), as specified in the Scalar Kernels syntax page. This kernel adds a time derivative term. The time integration scheme will be shared with the other non-linear variables. To use a different time integrating scheme, the ODETimeDerivative
scalar kernel should be replaced with a custom implementation.
Example input syntax
In this example, the scalar variables x
and y
are the solutions to the coupled ODE problem:
The time derivative terms are added for each variable using two ODETimeDerivative
scalar kernels.
[ScalarKernels]
[./td1]
type = ODETimeDerivative
variable = x
[../]
[./ode1]
type = ParsedODEKernel
function = '-3*x - 2*y'
variable = x
args = y
[../]
[./td2]
type = ODETimeDerivative
variable = y
[../]
[./ode2]
type = ParsedODEKernel
function = '-4*x - y'
variable = y
args = x
[../]
[]
(test/tests/kernels/ode/parsedode_sys_impl_test.i)Input 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.
- 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
- 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
- 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_tagssystem timeThe tag for the matrices this Kernel should fill
Default:system time
C++ Type:MultiMooseEnum
Options:nontime, system, time
Controllable:No
Description:The tag for the matrices this Kernel should fill
- vector_tagstimeThe tag for the vectors this Kernel should fill
Default:time
C++ Type:MultiMooseEnum
Options:nontime, time
Controllable:No
Description:The tag for the vectors this Kernel should fill
Tagging Parameters
Input Files
- (test/tests/postprocessors/scalar_coupled_postprocessor/scalar_coupled_postprocessor_test.i)
- (examples/ex18_scalar_kernel/ex18.i)
- (test/tests/outputs/variables/output_vars_test.i)
- (test/tests/outputs/variables/output_vars_nonexistent.i)
- (test/tests/controls/time_periods/scalarkernels/scalarkernels.i)
- (test/tests/time_integrators/actually_explicit_euler_verification/ee-ode.i)
- (test/tests/misc/check_error/scalar_kernel_with_var.i)
- (test/tests/ics/function_scalar_ic/function_scalar_ic.i)
- (test/tests/bcs/periodic/no_add_scalar.i)
- (test/tests/kernels/ode/parsedode_pp_test.i)
- (test/tests/time_integrators/explicit_ssp_runge_kutta/explicit_ssp_runge_kutta.i)
- (test/tests/kernels/ode/ode_sys_impl_test.i)
- (modules/thermal_hydraulics/test/tests/scalarkernels/postprocessor_source/postprocessor_source.i)
- (test/tests/time_integrators/scalar/scalar.i)
- (test/tests/scalar_kernels/ad_coupled_scalar/ad_coupled_scalar.i)
- (modules/thermal_hydraulics/test/tests/jacobians/userobjects/shaft_connected_test_component/shaft_connected_test_component.i)
- (test/tests/outputs/variables/output_vars_hidden_shown_check.i)
- (test/tests/controls/conditional_functional_enable/conditional_function_enable.i)
- (test/tests/kernels/bad_scaling_scalar_kernels/ill_conditioned_field_scalar_system.i)
- (test/tests/time_integrators/scalar/stiff.i)
- (examples/ex18_scalar_kernel/ex18_parsed.i)
- (test/tests/postprocessors/scalar_variable/scalar_variable_pps.i)
- (test/tests/kernels/ode/parsedode_sys_impl_test.i)
- (test/tests/tag/scalar_tag_vector.i)
- (test/tests/scaling/ignore-variables/ignore.i)
Child Objects
(test/tests/kernels/ode/parsedode_sys_impl_test.i)
[Mesh]
type = GeneratedMesh
dim = 2
xmin = 0
xmax = 1
ymin = 0
ymax = 1
nx = 2
ny = 2
elem_type = QUAD4
[]
[Functions]
[./f_fn]
type = ParsedFunction
value = -4
[../]
[./bc_all_fn]
type = ParsedFunction
value = x*x+y*y
[../]
# ODEs
[./exact_x_fn]
type = ParsedFunction
value = (-1/3)*exp(-t)+(4/3)*exp(5*t)
[../]
[]
# NL
[Variables]
[./u]
family = LAGRANGE
order = FIRST
[../]
# ODE variables
[./x]
family = SCALAR
order = FIRST
initial_condition = 1
[../]
[./y]
family = SCALAR
order = FIRST
initial_condition = 2
[../]
[]
[Kernels]
[./td]
type = TimeDerivative
variable = u
[../]
[./diff]
type = Diffusion
variable = u
[../]
[./uff]
type = BodyForce
variable = u
function = f_fn
[../]
[]
[ScalarKernels]
[./td1]
type = ODETimeDerivative
variable = x
[../]
[./ode1]
type = ParsedODEKernel
function = '-3*x - 2*y'
variable = x
args = y
[../]
[./td2]
type = ODETimeDerivative
variable = y
[../]
[./ode2]
type = ParsedODEKernel
function = '-4*x - y'
variable = y
args = x
[../]
[]
[BCs]
[./all]
type = FunctionDirichletBC
variable = u
boundary = '0 1 2 3'
function = bc_all_fn
[../]
[]
[Postprocessors]
active = 'exact_x l2err_x x y'
[./x]
type = ScalarVariable
variable = x
execute_on = 'initial timestep_end'
[../]
[./y]
type = ScalarVariable
variable = y
execute_on = 'initial timestep_end'
[../]
[./exact_x]
type = FunctionValuePostprocessor
function = exact_x_fn
execute_on = 'initial timestep_end'
point = '0 0 0'
[../]
[./l2err_x]
type = ScalarL2Error
variable = x
function = exact_x_fn
execute_on = 'initial timestep_end'
[../]
[]
[Executioner]
type = Transient
start_time = 0
dt = 0.01
num_steps = 100
solve_type = 'PJFNK'
[]
[Outputs]
file_base = ode_sys_impl_test_out
exodus = true
[]
(test/tests/postprocessors/scalar_coupled_postprocessor/scalar_coupled_postprocessor_test.i)
[Mesh]
type = GeneratedMesh
dim = 2
nx = 5
ny = 5
xmax = 1
ymax = 1
elem_type = QUAD4
[]
[Variables]
[./u]
initial_condition = 1
[../]
[./scalar_variable]
family = SCALAR
order = FIRST
initial_condition = 2
[../]
[]
[Kernels]
[./diff]
type = Diffusion
variable = u
[../]
[]
[ScalarKernels]
[./td1]
type = ODETimeDerivative
variable = scalar_variable
[../]
[]
[BCs]
[./leftDirichlet]
type = DirichletBC
variable = u
boundary = 'left'
value = 1
[../]
[./rightDirichlet]
type = DirichletBC
variable = u
boundary = 'right'
value = 0
[../]
[]
[Postprocessors]
[./totalFlux]
type = ScalarCoupledPostprocessor
variable = u
coupled_scalar = scalar_variable
boundary = left
[../]
[]
[Executioner]
type = Transient
dt = 1
num_steps = 1
solve_type = JFNK
l_max_its = 30
l_tol = 1e-6
nl_max_its = 20
nl_rel_tol = 1e-5
[]
[Outputs]
csv = true
[]
(examples/ex18_scalar_kernel/ex18.i)
[Mesh]
type = GeneratedMesh
dim = 2
xmin = 0
xmax = 1
ymin = 0
ymax = 1
nx = 10
ny = 10
elem_type = QUAD4
[]
[Functions]
# ODEs
[./exact_x_fn]
type = ParsedFunction
value = (-1/3)*exp(-t)+(4/3)*exp(5*t)
[../]
[./exact_y_fn]
type = ParsedFunction
value = (2/3)*exp(-t)+(4/3)*exp(5*t)
[../]
[]
[Variables]
[./diffused]
order = FIRST
family = LAGRANGE
[../]
# ODE variables
[./x]
family = SCALAR
order = FIRST
initial_condition = 1
[../]
[./y]
family = SCALAR
order = FIRST
initial_condition = 2
[../]
[]
[Kernels]
[./td]
type = TimeDerivative
variable = diffused
[../]
[./diff]
type = Diffusion
variable = diffused
[../]
[]
[ScalarKernels]
[./td1]
type = ODETimeDerivative
variable = x
[../]
[./ode1]
type = ImplicitODEx
variable = x
y = y
[../]
[./td2]
type = ODETimeDerivative
variable = y
[../]
[./ode2]
type = ImplicitODEy
variable = y
x = x
[../]
[]
[BCs]
[./right]
type = ScalarDirichletBC
variable = diffused
boundary = 1
scalar_var = x
[../]
[./left]
type = ScalarDirichletBC
variable = diffused
boundary = 3
scalar_var = y
[../]
[]
[Postprocessors]
# to print the values of x, y into a file so we can plot it
[./x]
type = ScalarVariable
variable = x
execute_on = timestep_end
[../]
[./y]
type = ScalarVariable
variable = y
execute_on = timestep_end
[../]
[./exact_x]
type = FunctionValuePostprocessor
function = exact_x_fn
execute_on = timestep_end
point = '0 0 0'
[../]
[./exact_y]
type = FunctionValuePostprocessor
function = exact_y_fn
execute_on = timestep_end
point = '0 0 0'
[../]
# Measure the error in ODE solution for 'x'.
[./l2err_x]
type = ScalarL2Error
variable = x
function = exact_x_fn
[../]
# Measure the error in ODE solution for 'y'.
[./l2err_y]
type = ScalarL2Error
variable = y
function = exact_y_fn
[../]
[]
[Executioner]
type = Transient
start_time = 0
dt = 0.01
num_steps = 10
#Preconditioned JFNK (default)
solve_type = 'PJFNK'
[]
[Outputs]
exodus = true
[]
(test/tests/outputs/variables/output_vars_test.i)
[Mesh]
type = GeneratedMesh
dim = 2
xmin = 0
xmax = 1
ymin = 0
ymax = 1
nx = 10
ny = 10
elem_type = QUAD9
[]
[Variables]
[./u]
order = FIRST
family = LAGRANGE
[../]
[./v]
order = SECOND
family = LAGRANGE
[../]
# ODE variables
[./x]
family = SCALAR
order = FIRST
initial_condition = 1
[../]
[./y]
family = SCALAR
order = FIRST
initial_condition = 2
[../]
[]
[AuxVariables]
[./elemental]
order = CONSTANT
family = MONOMIAL
[../]
[./elemental_restricted]
order = CONSTANT
family = MONOMIAL
[../]
[./nodal]
order = FIRST
family = LAGRANGE
[../]
[./nodal_restricted]
order = FIRST
family = LAGRANGE
[../]
[]
[Kernels]
[./td]
type = TimeDerivative
variable = u
[../]
[./diff_u]
type = Diffusion
variable = u
[../]
[./conv_u]
type = CoupledForce
variable = u
v = v
[../]
[./diff_v]
type = Diffusion
variable = v
[../]
[]
[AuxKernels]
[./elemental]
type = ConstantAux
variable = elemental
value = 1
[../]
[./elemental_restricted]
type = ConstantAux
variable = elemental_restricted
value = 1
[../]
[./nodal]
type = ConstantAux
variable = elemental
value = 2
[../]
[./nodal_restricted]
type = ConstantAux
variable = elemental_restricted
value = 2
[../]
[]
[ScalarKernels]
[./td1]
type = ODETimeDerivative
variable = x
[../]
[./ode1]
type = ImplicitODEx
variable = x
y = y
[../]
[./td2]
type = ODETimeDerivative
variable = y
[../]
[./ode2]
type = ImplicitODEy
variable = y
x = x
[../]
[]
[BCs]
active = 'left_u right_u left_v'
[./left_u]
type = DirichletBC
variable = u
boundary = 1
value = 1
[../]
[./right_u]
type = DirichletBC
variable = u
boundary = 3
value = 9
[../]
[./left_v]
type = DirichletBC
variable = v
boundary = 1
value = 5
[../]
[./right_v]
type = DirichletBC
variable = v
boundary = 2
value = 2
[../]
[]
[Postprocessors]
[./x]
type = ScalarVariable
variable = x
execute_on = 'initial timestep_end'
[../]
[./y]
type = ScalarVariable
variable = y
execute_on = 'initial timestep_end'
[../]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
dt = 0.01
num_steps = 1
[]
[Outputs]
show = 'x u nodal elemental'
[./out]
type = Exodus
elemental_as_nodal = true
scalar_as_nodal = true
[../]
[]
(test/tests/outputs/variables/output_vars_nonexistent.i)
[Mesh]
type = GeneratedMesh
dim = 2
xmin = 0
xmax = 1
ymin = 0
ymax = 1
nx = 10
ny = 10
elem_type = QUAD9
[]
[Variables]
[./u]
order = FIRST
family = LAGRANGE
[../]
[./v]
order = SECOND
family = LAGRANGE
[../]
# ODE variables
[./x]
family = SCALAR
order = FIRST
initial_condition = 1
[../]
[./y]
family = SCALAR
order = FIRST
initial_condition = 2
[../]
[]
[AuxVariables]
[./elemental]
order = CONSTANT
family = MONOMIAL
[../]
[./elemental_restricted]
order = CONSTANT
family = MONOMIAL
[../]
[./nodal]
order = FIRST
family = LAGRANGE
[../]
[./nodal_restricted]
order = FIRST
family = LAGRANGE
[../]
[]
[Kernels]
[./td]
type = TimeDerivative
variable = u
[../]
[./diff_u]
type = Diffusion
variable = u
[../]
[./conv_u]
type = CoupledForce
variable = u
v = v
[../]
[./diff_v]
type = Diffusion
variable = v
[../]
[]
[AuxKernels]
[./elemental]
type = ConstantAux
variable = elemental
value = 1
[../]
[./elemental_restricted]
type = ConstantAux
variable = elemental_restricted
value = 1
[../]
[./nodal]
type = ConstantAux
variable = elemental
value = 2
[../]
[./nodal_restricted]
type = ConstantAux
variable = elemental_restricted
value = 2
[../]
[]
[ScalarKernels]
[./td1]
type = ODETimeDerivative
variable = x
[../]
[./ode1]
type = ImplicitODEx
variable = x
y = y
[../]
[./td2]
type = ODETimeDerivative
variable = y
[../]
[./ode2]
type = ImplicitODEy
variable = y
x = x
[../]
[]
[BCs]
active = 'left_u right_u left_v'
[./left_u]
type = DirichletBC
variable = u
boundary = 1
value = 1
[../]
[./right_u]
type = DirichletBC
variable = u
boundary = 3
value = 9
[../]
[./left_v]
type = DirichletBC
variable = v
boundary = 1
value = 5
[../]
[./right_v]
type = DirichletBC
variable = v
boundary = 2
value = 2
[../]
[]
[Postprocessors]
[./x]
type = ScalarVariable
variable = x
execute_on = timestep_end
[../]
[./y]
type = ScalarVariable
variable = y
execute_on = timestep_end
[../]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
dt = 0.01
num_steps = 10
[]
[Outputs]
file_base = out_nonexistent
exodus = true
show = 'u elemental nodal x foo1 foo2'
[]
(test/tests/controls/time_periods/scalarkernels/scalarkernels.i)
# This tests controllability of the enable parameter of scalar kernels.
#
# There are 2 scalar variables, {u, v}, with the ODEs:
# du/dt = 1 u(0) = 0
# v = u v(0) = -10
# A control switches the ODE 'v = u' to the following ODE when t >= 2:
# dv/dt = 2
#
# 5 time steps (of size dt = 1) will be taken, and the predicted values are as follows:
# t u v
# ------------------
# 0 0 -10
# 1 1 1
# 2 2 2
# 3 3 4
# 4 4 6
# 5 5 8
u_initial = 0
u_growth = 1
v_initial = -10
v_growth = 2
t_transition = 2
[Mesh]
type = GeneratedMesh
dim = 1
nx = 10
[]
[Variables]
[./u]
family = SCALAR
order = FIRST
[../]
[./v]
family = SCALAR
order = FIRST
[../]
[]
[ICs]
[./u_ic]
type = ScalarConstantIC
variable = u
value = ${u_initial}
[../]
[./v_ic]
type = ScalarConstantIC
variable = v
value = ${v_initial}
[../]
[]
[ScalarKernels]
[./u_time]
type = ODETimeDerivative
variable = u
[../]
[./u_src]
type = ParsedODEKernel
variable = u
function = '-${u_growth}'
[../]
[./v_time]
type = ODETimeDerivative
variable = v
enable = false
[../]
[./v_src]
type = ParsedODEKernel
variable = v
function = '-${v_growth}'
enable = false
[../]
[./v_constraint]
type = ParsedODEKernel
variable = v
args = 'u'
function = 'v - u'
[../]
[]
[Controls]
[./time_period_control]
type = TimePeriod
end_time = ${t_transition}
enable_objects = 'ScalarKernel::v_constraint'
disable_objects = 'ScalarKernel::v_time ScalarKernel::v_src'
execute_on = 'INITIAL TIMESTEP_END'
[../]
[]
[Executioner]
type = Transient
scheme = implicit-euler
dt = 1
num_steps = 5
abort_on_solve_fail = true
nl_rel_tol = 1e-8
nl_abs_tol = 1e-8
[]
[Outputs]
csv = true
[]
(test/tests/time_integrators/actually_explicit_euler_verification/ee-ode.i)
# Tests that ActuallyExplicitEuler works with scalar variables.
#
# The ODE and IC used are the following:
# du/dt = 2, u(0) = 0
# Thus the solution is u(t) = 2*t.
[Mesh]
type = GeneratedMesh
dim = 1
nx = 1
[]
[Variables]
[./u]
family = SCALAR
order = FIRST
initial_condition = 0
[../]
[]
[ScalarKernels]
[./time]
type = ODETimeDerivative
variable = u
[../]
[./source]
type = ParsedODEKernel
variable = u
function = -2
[../]
[]
[Executioner]
type = Transient
[./TimeIntegrator]
type = ActuallyExplicitEuler
[../]
dt = 1
num_steps = 5
[]
[Outputs]
csv = true
[]
(test/tests/misc/check_error/scalar_kernel_with_var.i)
[Mesh]
type = GeneratedMesh
dim = 2
nx = 2
ny = 2
[]
[Variables]
[./u]
order = FIRST
family = LAGRANGE
[../]
[]
[AuxVariables]
[./v]
[../]
[]
[Kernels]
[./diff]
type = Diffusion
variable = u
[../]
[./rea]
type = Reaction
variable = u
[../]
[]
[ScalarKernels]
[./nope]
type = ODETimeDerivative
variable = u
[../]
[]
[BCs]
[./left]
type = DirichletBC
variable = u
boundary = 1
value = 0
[../]
[./right]
type = DirichletBC
variable = u
boundary = 2
value = 1
[../]
[]
[Executioner]
type = Transient
solve_type = 'NEWTON'
[]
[Outputs]
file_base = out
exodus = true
[]
(test/tests/ics/function_scalar_ic/function_scalar_ic.i)
[Mesh]
# a dummy mesh
type = GeneratedMesh
dim = 2
xmin = 0
xmax = 1
ymin = 0
ymax = 1
nx = 1
ny = 1
elem_type = QUAD4
[]
[Variables]
[./n]
family = SCALAR
order = FIRST
[../]
[]
[Functions]
[./f]
type = ParsedFunction
value = cos(t)
[../]
[]
[ICs]
[./f]
type = FunctionScalarIC
variable = n
function = f
[../]
[]
[ScalarKernels]
[./dn]
type = ODETimeDerivative
variable = n
[../]
[./ode1]
type = ParsedODEKernel
function = '-n'
variable = n
[../]
[]
[Executioner]
type = Transient
start_time = 0
end_time = 1
dt = 0.01
scheme = bdf2
solve_type = 'PJFNK'
timestep_tolerance = 1e-12
[]
[Outputs]
csv = true
[]
(test/tests/bcs/periodic/no_add_scalar.i)
# Test to make sure that periodic boundaries
# are not applied to scalar variables.
[Mesh]
type = GeneratedMesh
dim = 1
nx = 20
[]
[Variables]
[./c]
[./InitialCondition]
type = FunctionIC
function = x
[../]
[../]
[./scalar]
family = SCALAR
[../]
[]
[BCs]
[./Periodic]
[./all]
auto_direction = x
[../]
[../]
[]
[Kernels]
[./dt]
type = TimeDerivative
variable = c
[../]
[./diff]
type = Diffusion
variable = c
[../]
[]
[ScalarKernels]
[./scalar]
type = ODETimeDerivative
variable = scalar
[../]
[]
[Executioner]
type = Transient
dt = 0.1
num_steps = 3
[]
[Outputs]
exodus = true
[]
(test/tests/kernels/ode/parsedode_pp_test.i)
[Mesh]
type = GeneratedMesh
dim = 2
xmin = 0
xmax = 1
ymin = 0
ymax = 1
nx = 2
ny = 2
elem_type = QUAD4
[]
[Variables]
[./x]
family = SCALAR
order = FIRST
initial_condition = 0
[../]
[]
[ScalarKernels]
[./dt]
type = ODETimeDerivative
variable = x
[../]
[./ode1]
type = ParsedODEKernel
function = '-mytime'
postprocessors = mytime
variable = x
[../]
[]
[Postprocessors]
[./computed_x]
type = ScalarVariable
variable = x
execute_on = 'initial timestep_end'
[../]
[./mytime]
type = FunctionValuePostprocessor
function = t
execute_on = 'initial timestep_begin'
[../]
[./exact_x]
type = FunctionValuePostprocessor
function = '0.5*t^2'
execute_on = 'initial timestep_end'
[../]
[./l2err_x]
type = ScalarL2Error
variable = x
function = '0.5*t^2'
execute_on = 'initial timestep_end'
[../]
[]
[Executioner]
type = Transient
scheme = bdf2
dt = 0.1
num_steps = 10
solve_type = 'NEWTON'
[]
[Outputs]
file_base = ode_pp_test_out
hide = 'x mytime'
csv = true
[]
(test/tests/time_integrators/explicit_ssp_runge_kutta/explicit_ssp_runge_kutta.i)
# This test solves the following IVP:
# du/dt = f(u(t), t), u(0) = 1
# f(u(t), t) = -u(t) + t^3 + 3t^2
# The exact solution is the following:
# u(t) = exp(-t) + t^3
[Mesh]
[./mesh]
type = GeneratedMeshGenerator
dim = 1
nx = 1
[../]
[]
[Variables]
[./u]
family = SCALAR
order = FIRST
initial_condition = 1
[../]
[]
[ScalarKernels]
[./time_derivative]
type = ODETimeDerivative
variable = u
[../]
[./source_part1]
type = ParsedODEKernel
variable = u
function = 'u'
[../]
[./source_part2]
type = PostprocessorSinkScalarKernel
variable = u
postprocessor = sink_pp
[../]
[]
[Functions]
[./sink_fn]
type = ParsedFunction
value = '-t^3 - 3*t^2'
[../]
[]
[Postprocessors]
[./sink_pp]
type = FunctionValuePostprocessor
function = sink_fn
execute_on = 'LINEAR NONLINEAR'
[../]
[./l2_err]
type = ScalarL2Error
variable = u
function = ${fparse exp(-0.5) + 0.5^3}
[../]
[]
[Executioner]
type = Transient
[./TimeIntegrator]
type = ExplicitSSPRungeKutta
order = 1
[../]
end_time = 0.5
dt = 0.1
[]
[Outputs]
file_base = 'first_order'
exodus = true
[./csv]
type = CSV
show = 'u'
execute_on = 'FINAL'
[../]
[]
(test/tests/kernels/ode/ode_sys_impl_test.i)
[Mesh]
type = GeneratedMesh
dim = 2
xmin = 0
xmax = 1
ymin = 0
ymax = 1
nx = 2
ny = 2
elem_type = QUAD4
[]
[Functions]
[./f_fn]
type = ParsedFunction
value = -4
[../]
[./bc_all_fn]
type = ParsedFunction
value = x*x+y*y
[../]
# ODEs
[./exact_x_fn]
type = ParsedFunction
value = (-1/3)*exp(-t)+(4/3)*exp(5*t)
[../]
[]
# NL
[Variables]
[./u]
family = LAGRANGE
order = FIRST
[../]
# ODE variables
[./x]
family = SCALAR
order = FIRST
initial_condition = 1
[../]
[./y]
family = SCALAR
order = FIRST
initial_condition = 2
[../]
[]
[Kernels]
[./td]
type = TimeDerivative
variable = u
[../]
[./diff]
type = Diffusion
variable = u
[../]
[./uff]
type = BodyForce
variable = u
function = f_fn
[../]
[]
[ScalarKernels]
[./td1]
type = ODETimeDerivative
variable = x
[../]
[./ode1]
type = ImplicitODEx
variable = x
y = y
[../]
[./td2]
type = ODETimeDerivative
variable = y
[../]
[./ode2]
type = ImplicitODEy
variable = y
x = x
[../]
[]
[BCs]
[./all]
type = FunctionDirichletBC
variable = u
boundary = '0 1 2 3'
function = bc_all_fn
[../]
[]
[Postprocessors]
active = 'exact_x l2err_x x y'
[./x]
type = ScalarVariable
variable = x
execute_on = 'initial timestep_end'
[../]
[./y]
type = ScalarVariable
variable = y
execute_on = 'initial timestep_end'
[../]
[./exact_x]
type = FunctionValuePostprocessor
function = exact_x_fn
execute_on = 'initial timestep_end'
point = '0 0 0'
[../]
[./l2err_x]
type = ScalarL2Error
variable = x
function = exact_x_fn
execute_on = 'initial timestep_end'
[../]
[]
[Executioner]
type = Transient
start_time = 0
dt = 0.01
num_steps = 100
solve_type = 'PJFNK'
[]
[Outputs]
exodus = true
[]
(modules/thermal_hydraulics/test/tests/scalarkernels/postprocessor_source/postprocessor_source.i)
# This input file tests PostprocessorSourceScalarKernel.
#
# The following initial value problem is modeled here:
# du/dt = t, u(0) = 0
# Using backward Euler time integration with dt=1, the solution values should
# be as follows:
# u(0) = 0
# u(1) = 1
# u(2) = 3
[Mesh]
type = GeneratedMesh
dim = 1
nx = 1
[]
[Variables]
[u]
family = SCALAR
order = FIRST
[]
[]
[ICs]
[ic_u]
type = ScalarConstantIC
variable = u
value = 0
[]
[]
[ScalarKernels]
[sk_time]
type = ODETimeDerivative
variable = u
[]
[sk_source]
type = PostprocessorSourceScalarKernel
variable = u
pp = pp_source
[]
[]
[Functions]
[fn_source]
type = ParsedFunction
value = 't'
[]
[]
[Postprocessors]
[pp_source]
type = FunctionValuePostprocessor
function = fn_source
execute_on = 'LINEAR NONLINEAR'
[]
[]
[Executioner]
type = Transient
scheme = implicit-euler
dt = 1
num_steps = 2
[]
[Outputs]
csv = true
show = 'u'
execute_on = 'INITIAL TIMESTEP_END'
[]
(test/tests/time_integrators/scalar/scalar.i)
[Mesh]
type = GeneratedMesh
dim = 2
xmin = 0
xmax = 1
ymin = 0
ymax = 1
nx = 1
ny = 1
elem_type = QUAD4
[]
[Variables]
[./n]
family = SCALAR
order = FIRST
initial_condition = 1
[../]
[]
[ScalarKernels]
[./dn]
type = ODETimeDerivative
variable = n
[../]
[./ode1]
type = ParsedODEKernel
function = '-n'
variable = n
# implicit = false
[../]
[]
[Executioner]
type = Transient
[./TimeIntegrator]
# type = ImplicitEuler
# type = BDF2
type = CrankNicolson
# type = ImplicitMidpoint
# type = LStableDirk2
# type = LStableDirk3
# type = LStableDirk4
# type = AStableDirk4
#
# Explicit methods
# type = ExplicitEuler
# type = ExplicitMidpoint
# type = Heun
# type = Ralston
[../]
start_time = 0
end_time = 1
dt = 0.001
dtmin = 0.001 # Don't allow timestep cutting
solve_type = 'PJFNK'
nl_max_its = 2
nl_abs_tol = 1.e-12 # This is an ODE, so nl_abs_tol makes sense.
[]
[Functions]
[./exact_solution]
type = ParsedFunction
value = exp(t)
[../]
[]
[Postprocessors]
[./error_n]
# Post processor that computes the difference between the computed
# and exact solutions. For the exact solution used here, the
# error at the final time should converge at O(dt^p), where p is
# the order of the method.
type = ScalarL2Error
variable = n
function = exact_solution
# final is not currently supported for Postprocessor execute_on...
# execute_on = 'final'
[../]
[]
[Outputs]
csv = true
[]
(test/tests/scalar_kernels/ad_coupled_scalar/ad_coupled_scalar.i)
[Mesh]
type = GeneratedMesh
dim = 1
nx = 10
[]
[Kernels]
[diff]
type = Diffusion
variable = u
[]
[time]
type = TimeDerivative
variable = u
[]
[]
[ScalarKernels]
[time]
type = ODETimeDerivative
variable = v
[]
[flux_sink]
type = PostprocessorSinkScalarKernel
variable = v
postprocessor = scale_flux
[]
[]
[BCs]
[right]
type = DirichletBC
value = 0
variable = u
boundary = 'right'
[]
[left]
type = ADMatchedScalarValueBC
variable = u
v = v
boundary = 'left'
[]
[]
[Variables]
[u][]
[v]
family = SCALAR
order = FIRST
initial_condition = 1
[]
[]
[Postprocessors]
[flux]
type = SideDiffusiveFluxIntegral
variable = u
diffusivity = 1
boundary = 'left'
execute_on = 'initial nonlinear linear timestep_end'
[]
[scale_flux]
type = ScalePostprocessor
scaling_factor = -1
value = flux
execute_on = 'initial nonlinear linear timestep_end'
[]
[]
[Executioner]
type = Transient
dt = .1
end_time = 1
solve_type = PJFNK
nl_rel_tol = 1e-12
[]
[Outputs]
exodus = true
[]
(modules/thermal_hydraulics/test/tests/jacobians/userobjects/shaft_connected_test_component/shaft_connected_test_component.i)
[JacobianTestGeneral]
variable_names = 'rhoA rhouA rhoEA'
variable_values = '2.0 3.0 4.0'
scalar_variable_names = 'jct_var omega'
scalar_variable_values = '2 10'
aux_variable_names = 'A_elem A_linear'
aux_variable_values = '1.1 1.2'
use_transient_executioner = true
generate_mesh = false
[]
[Mesh]
file = ../../meshes/skew_2channel_1elem.e
construct_side_list_from_node_list = true
[]
[Materials]
[direction_mat]
type = DirectionMaterial
[]
[]
[UserObjects]
[sc_test_comp_uo]
type = ShaftConnectedTestComponentUserObject
volume = 0.3
rhoA = rhoA
rhouA = rhouA
rhoEA = rhoEA
jct_var = jct_var
omega = omega
boundary = '1 3'
normals = '-1 -1'
# note the actual names in 'numerical_flux_names' are not used for anything
numerical_flux_names = 'numerical_flux1 numerical_flux2'
execute_on = 'initial linear nonlinear'
[]
[]
[ScalarKernels]
[shaft_td]
type = ShaftTimeDerivativeScalarKernel
variable = omega
uo_names = sc_test_comp_uo
[]
[shaft_total_torque]
type = ShaftComponentTorqueScalarKernel
variable = omega
shaft_connected_component_uo = sc_test_comp_uo
[]
[jct_td]
type = ODETimeDerivative
variable = jct_var
[]
[jct_ask]
type = VolumeJunctionAdvectionScalarKernel
variable = jct_var
volume_junction_uo = sc_test_comp_uo
equation_index = 0
[]
[]
(test/tests/outputs/variables/output_vars_hidden_shown_check.i)
[Mesh]
type = GeneratedMesh
dim = 2
xmin = 0
xmax = 1
ymin = 0
ymax = 1
nx = 10
ny = 10
elem_type = QUAD9
[]
[Variables]
[./u]
order = FIRST
family = LAGRANGE
[../]
[./v]
order = SECOND
family = LAGRANGE
[../]
# ODE variables
[./x]
family = SCALAR
order = FIRST
initial_condition = 1
[../]
[./y]
family = SCALAR
order = FIRST
initial_condition = 2
[../]
[]
[AuxVariables]
[./elemental]
order = CONSTANT
family = MONOMIAL
[../]
[./elemental_restricted]
order = CONSTANT
family = MONOMIAL
[../]
[./nodal]
order = FIRST
family = LAGRANGE
[../]
[./nodal_restricted]
order = FIRST
family = LAGRANGE
[../]
[]
[Kernels]
[./td]
type = TimeDerivative
variable = u
[../]
[./diff_u]
type = Diffusion
variable = u
[../]
[./conv_u]
type = CoupledForce
variable = u
v = v
[../]
[./diff_v]
type = Diffusion
variable = v
[../]
[]
[AuxKernels]
[./elemental]
type = ConstantAux
variable = elemental
value = 1
[../]
[./elemental_restricted]
type = ConstantAux
variable = elemental_restricted
value = 1
[../]
[./nodal]
type = ConstantAux
variable = elemental
value = 2
[../]
[./nodal_restricted]
type = ConstantAux
variable = elemental_restricted
value = 2
[../]
[]
[ScalarKernels]
[./td1]
type = ODETimeDerivative
variable = x
[../]
[./ode1]
type = ImplicitODEx
variable = x
y = y
[../]
[./td2]
type = ODETimeDerivative
variable = y
[../]
[./ode2]
type = ImplicitODEy
variable = y
x = x
[../]
[]
[BCs]
active = 'left_u right_u left_v'
[./left_u]
type = DirichletBC
variable = u
boundary = 1
value = 1
[../]
[./right_u]
type = DirichletBC
variable = u
boundary = 3
value = 9
[../]
[./left_v]
type = DirichletBC
variable = v
boundary = 1
value = 5
[../]
[./right_v]
type = DirichletBC
variable = v
boundary = 2
value = 2
[../]
[]
[Postprocessors]
[./x]
type = ScalarVariable
variable = x
execute_on = timestep_end
[../]
[./y]
type = ScalarVariable
variable = y
execute_on = timestep_end
[../]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
dt = 0.01
num_steps = 10
[]
[Outputs]
file_base = out_hidden
exodus = true
hide = 'u elemental nodal x'
show = u
[]
(test/tests/controls/conditional_functional_enable/conditional_function_enable.i)
# This tests controllability of the enable parameter of a MOOSE object via a
# conditional function.
#
# There are 2 scalar variables, {u, v}, with the ODEs:
# du/dt = 1 u(0) = 0
# v = u v(0) = -10
# A control switches the ODE 'v = u' to the following ODE when u >= 1.99:
# dv/dt = 2
#
# 5 time steps (of size dt = 1) will be taken, and the predicted values are as follows:
# t u v
# ------------------
# 0 0 -10
# 1 1 1
# 2 2 2
# 3 3 4
# 4 4 6
# 5 5 8
u_initial = 0
u_growth = 1
u_threshold = 1.99
v_initial = -10
v_growth = 2
[Mesh]
type = GeneratedMesh
dim = 1
nx = 10
[]
[Variables]
[./u]
family = SCALAR
order = FIRST
[../]
[./v]
family = SCALAR
order = FIRST
[../]
[]
[ICs]
[./u_ic]
type = ScalarConstantIC
variable = u
value = ${u_initial}
[../]
[./v_ic]
type = ScalarConstantIC
variable = v
value = ${v_initial}
[../]
[]
[ScalarKernels]
[./u_time]
type = ODETimeDerivative
variable = u
[../]
[./u_src]
type = ParsedODEKernel
variable = u
function = '-${u_growth}'
[../]
[./v_time]
type = ODETimeDerivative
variable = v
enable = false
[../]
[./v_src]
type = ParsedODEKernel
variable = v
function = '-${v_growth}'
enable = false
[../]
[./v_constraint]
type = ParsedODEKernel
variable = v
args = 'u'
function = 'v - u'
[../]
[]
[Functions]
[./conditional_function]
type = ParsedFunction
vars = 'u_sol'
vals = 'u'
value = 'u_sol >= ${u_threshold}'
[../]
[]
[Controls]
[./u_threshold]
type = ConditionalFunctionEnableControl
conditional_function = conditional_function
enable_objects = 'ScalarKernel::v_time ScalarKernel::v_src'
disable_objects = 'ScalarKernel::v_constraint'
execute_on = 'INITIAL TIMESTEP_END'
[../]
[]
[Executioner]
type = Transient
scheme = implicit-euler
dt = 1
num_steps = 5
abort_on_solve_fail = true
nl_rel_tol = 1e-8
nl_abs_tol = 1e-8
[]
[Outputs]
csv = true
[]
(test/tests/kernels/bad_scaling_scalar_kernels/ill_conditioned_field_scalar_system.i)
[Mesh]
type = GeneratedMesh
dim = 1
nx = 2
[]
[Variables]
[./u]
[../]
[v]
family = SCALAR
initial_condition = 1
[]
[]
[Kernels]
[./diff]
type = Diffusion
variable = u
[../]
[scalar]
type = ScalarLagrangeMultiplier
variable = u
lambda = v
[]
[]
[BCs]
[./left]
type = DirichletBC
variable = u
boundary = left
value = 0
[../]
[./right]
type = DirichletBC
variable = u
boundary = right
value = 1
[../]
[]
[ScalarKernels]
[reaction]
type = ParsedODEKernel
function = '10^20 * v'
variable = v
[]
[time]
type = ODETimeDerivative
variable = v
[]
[]
[Executioner]
type = Transient
num_steps = 1
dtmin = 1
solve_type = NEWTON
petsc_options = '-pc_svd_monitor -ksp_view_pmat -snes_converged_reason -ksp_converged_reason'
petsc_options_iname = '-pc_type -snes_stol'
petsc_options_value = 'svd 0'
[]
[Outputs]
exodus = true
[]
(test/tests/time_integrators/scalar/stiff.i)
# This is a linear model problem described in Frank et al, "Order
# results for implicit Runge-Kutta methods applied to stiff systems",
# SIAM J. Numerical Analysis, vol. 22, no. 3, 1985, pp. 515-534.
#
# Problems "PL" and "PNL" from page 527 of the paper:
# { dy1/dt = lambda*y1 + y2**p, y1(0) = -1/(lambda+p)
# { dy2/dt = -y2, y2(0) = 1
#
# The exact solution is:
# y1 = -exp(-p*t)/(lambda+p)
# y2 = exp(-t)
#
# According to the following paragraph from the reference above, the
# p=1 version of this problem should not exhibit order reductions
# regardless of stiffness, while the nonlinear version (p>=2) will
# exhibit order reductions down to the "stage order" of the method for
# lambda large, negative.
# Use Dollar Bracket Expressions (DBEs) to set the value of LAMBDA in
# a single place. You can also set this on the command line with
# e.g. LAMBDA=-4, but note that this does not seem to override the
# value set in the input file. This is a bit different from the way
# that command line values normally work...
# Note that LAMBDA == Y2_EXPONENT is not allowed!
# LAMBDA = -10
# Y2_EXPONENT = 2
[Mesh]
type = GeneratedMesh
dim = 2
xmin = 0
xmax = 1
ymin = 0
ymax = 1
nx = 1
ny = 1
elem_type = QUAD4
[]
[Variables]
[./y1]
family = SCALAR
order = FIRST
[../]
[./y2]
family = SCALAR
order = FIRST
[../]
[]
[ICs]
[./y1_init]
type = FunctionScalarIC
variable = y1
function = y1_exact
[../]
[./y2_init]
type = FunctionScalarIC
variable = y2
function = y2_exact
[../]
[]
[ScalarKernels]
[./y1_time]
type = ODETimeDerivative
variable = y1
[../]
[./y1_space]
type = ParsedODEKernel
variable = y1
function = '-(${LAMBDA})*y1 - y2^${Y2_EXPONENT}'
args = 'y2'
[../]
[./y2_time]
type = ODETimeDerivative
variable = y2
[../]
[./y2_space]
type = ParsedODEKernel
variable = y2
function = 'y2'
[../]
[]
[Executioner]
type = Transient
[./TimeIntegrator]
type = LStableDirk2
[../]
start_time = 0
end_time = 1
dt = 0.125
solve_type = 'PJFNK'
nl_max_its = 6
nl_abs_tol = 1.e-13
nl_rel_tol = 1.e-32 # Force nl_abs_tol to be used.
line_search = 'none'
[]
[Functions]
[./y1_exact]
type = ParsedFunction
value = '-exp(-${Y2_EXPONENT}*t)/(lambda+${Y2_EXPONENT})'
vars = 'lambda'
vals = ${LAMBDA}
[../]
[./y2_exact]
type = ParsedFunction
value = exp(-t)
[../]
[]
[Postprocessors]
[./error_y1]
type = ScalarL2Error
variable = y1
function = y1_exact
execute_on = 'initial timestep_end'
[../]
[./error_y2]
type = ScalarL2Error
variable = y2
function = y2_exact
execute_on = 'initial timestep_end'
[../]
[./max_error_y1]
# Estimate ||e_1||_{\infty}
type = TimeExtremeValue
value_type = max
postprocessor = error_y1
execute_on = 'initial timestep_end'
[../]
[./max_error_y2]
# Estimate ||e_2||_{\infty}
type = TimeExtremeValue
value_type = max
postprocessor = error_y2
execute_on = 'initial timestep_end'
[../]
[./value_y1]
type = ScalarVariable
variable = y1
execute_on = 'initial timestep_end'
[../]
[./value_y2]
type = ScalarVariable
variable = y2
execute_on = 'initial timestep_end'
[../]
[./value_y1_abs_max]
type = TimeExtremeValue
value_type = abs_max
postprocessor = value_y1
execute_on = 'initial timestep_end'
[../]
[./value_y2_abs_max]
type = TimeExtremeValue
value_type = abs_max
postprocessor = value_y2
execute_on = 'initial timestep_end'
[../]
[]
[Outputs]
csv = true
[]
(examples/ex18_scalar_kernel/ex18_parsed.i)
#
# Example 18 modified to use parsed ODE kernels.
#
# The ParsedODEKernel takes function expressions in the input file and computes
# Jacobian entries via automatic differentiation. It allows for rapid development
# of new models without the need for code recompilation.
#
# This input file should produce the exact same result as ex18.i
#
[Mesh]
type = GeneratedMesh
dim = 2
xmin = 0
xmax = 1
ymin = 0
ymax = 1
nx = 10
ny = 10
elem_type = QUAD4
[]
[Functions]
# ODEs
[./exact_x_fn]
type = ParsedFunction
value = (-1/3)*exp(-t)+(4/3)*exp(5*t)
[../]
[./exact_y_fn]
type = ParsedFunction
value = (2/3)*exp(-t)+(4/3)*exp(5*t)
[../]
[]
[Variables]
[./diffused]
order = FIRST
family = LAGRANGE
[../]
# ODE variables
[./x]
family = SCALAR
order = FIRST
initial_condition = 1
[../]
[./y]
family = SCALAR
order = FIRST
initial_condition = 2
[../]
[]
[Kernels]
[./td]
type = TimeDerivative
variable = diffused
[../]
[./diff]
type = Diffusion
variable = diffused
[../]
[]
[ScalarKernels]
[./td1]
type = ODETimeDerivative
variable = x
[../]
#
# This parsed expression ODE Kernel behaves exactly as the ImplicitODEx kernel
# in the main example. Checkout ImplicitODEx::computeQpResidual() in the
# source code file ImplicitODEx.C to see the matching residual function.
#
# The ParsedODEKernel automaticaly generates the On- and Off-Diagonal Jacobian
# entries.
#
[./ode1]
type = ParsedODEKernel
function = '-3*x - 2*y'
variable = x
args = y
[../]
[./td2]
type = ODETimeDerivative
variable = y
[../]
#
# This parsed expression ODE Kernel behaves exactly as the ImplicitODEy Kernel
# in the main example.
#
[./ode2]
type = ParsedODEKernel
function = '-4*x - y'
variable = y
args = x
[../]
[]
[BCs]
[./right]
type = ScalarDirichletBC
variable = diffused
boundary = 1
scalar_var = x
[../]
[./left]
type = ScalarDirichletBC
variable = diffused
boundary = 3
scalar_var = y
[../]
[]
[Postprocessors]
# to print the values of x, y into a file so we can plot it
[./x]
type = ScalarVariable
variable = x
execute_on = timestep_end
[../]
[./y]
type = ScalarVariable
variable = y
execute_on = timestep_end
[../]
[./exact_x]
type = FunctionValuePostprocessor
function = exact_x_fn
execute_on = timestep_end
[../]
[./exact_y]
type = FunctionValuePostprocessor
function = exact_y_fn
execute_on = timestep_end
point = '0 0 0'
[../]
# Measure the error in ODE solution for 'x'.
[./l2err_x]
type = ScalarL2Error
variable = x
function = exact_x_fn
[../]
# Measure the error in ODE solution for 'y'.
[./l2err_y]
type = ScalarL2Error
variable = y
function = exact_y_fn
[../]
[]
[Executioner]
type = Transient
start_time = 0
dt = 0.01
num_steps = 10
solve_type = 'PJFNK'
[]
[Outputs]
file_base = 'ex18_out'
exodus = true
[]
(test/tests/postprocessors/scalar_variable/scalar_variable_pps.i)
[Mesh]
type = GeneratedMesh
dim = 1
nx = 10
[]
[Kernels]
[diff]
type = Diffusion
variable = u
[]
[time]
type = TimeDerivative
variable = u
[]
[]
[ScalarKernels]
[time]
type = ODETimeDerivative
variable = v
[]
[flux_sink]
type = PostprocessorSinkScalarKernel
variable = v
postprocessor = scale_flux
[]
[]
[BCs]
[right]
type = DirichletBC
value = 0
variable = u
boundary = 'right'
[]
[left]
type = ADMatchedScalarValueBC
variable = u
v = v
boundary = 'left'
[]
[]
[Variables]
[u][]
[v]
family = SCALAR
order = FIRST
initial_condition = 1
[]
[]
[Postprocessors]
[flux]
type = SideDiffusiveFluxIntegral
variable = u
diffusivity = 1
boundary = 'left'
execute_on = 'initial nonlinear linear timestep_end'
[]
[scale_flux]
type = ScalePostprocessor
scaling_factor = -1
value = flux
execute_on = 'initial nonlinear linear timestep_end'
[]
[reporter]
type = ScalarVariable
variable = v
execute_on = 'initial timestep_end'
[]
[]
[Executioner]
type = Transient
dt = .1
end_time = 1
solve_type = PJFNK
nl_rel_tol = 1e-12
[]
[Outputs]
csv = true
[]
(test/tests/kernels/ode/parsedode_sys_impl_test.i)
[Mesh]
type = GeneratedMesh
dim = 2
xmin = 0
xmax = 1
ymin = 0
ymax = 1
nx = 2
ny = 2
elem_type = QUAD4
[]
[Functions]
[./f_fn]
type = ParsedFunction
value = -4
[../]
[./bc_all_fn]
type = ParsedFunction
value = x*x+y*y
[../]
# ODEs
[./exact_x_fn]
type = ParsedFunction
value = (-1/3)*exp(-t)+(4/3)*exp(5*t)
[../]
[]
# NL
[Variables]
[./u]
family = LAGRANGE
order = FIRST
[../]
# ODE variables
[./x]
family = SCALAR
order = FIRST
initial_condition = 1
[../]
[./y]
family = SCALAR
order = FIRST
initial_condition = 2
[../]
[]
[Kernels]
[./td]
type = TimeDerivative
variable = u
[../]
[./diff]
type = Diffusion
variable = u
[../]
[./uff]
type = BodyForce
variable = u
function = f_fn
[../]
[]
[ScalarKernels]
[./td1]
type = ODETimeDerivative
variable = x
[../]
[./ode1]
type = ParsedODEKernel
function = '-3*x - 2*y'
variable = x
args = y
[../]
[./td2]
type = ODETimeDerivative
variable = y
[../]
[./ode2]
type = ParsedODEKernel
function = '-4*x - y'
variable = y
args = x
[../]
[]
[BCs]
[./all]
type = FunctionDirichletBC
variable = u
boundary = '0 1 2 3'
function = bc_all_fn
[../]
[]
[Postprocessors]
active = 'exact_x l2err_x x y'
[./x]
type = ScalarVariable
variable = x
execute_on = 'initial timestep_end'
[../]
[./y]
type = ScalarVariable
variable = y
execute_on = 'initial timestep_end'
[../]
[./exact_x]
type = FunctionValuePostprocessor
function = exact_x_fn
execute_on = 'initial timestep_end'
point = '0 0 0'
[../]
[./l2err_x]
type = ScalarL2Error
variable = x
function = exact_x_fn
execute_on = 'initial timestep_end'
[../]
[]
[Executioner]
type = Transient
start_time = 0
dt = 0.01
num_steps = 100
solve_type = 'PJFNK'
[]
[Outputs]
file_base = ode_sys_impl_test_out
exodus = true
[]
(test/tests/tag/scalar_tag_vector.i)
[Mesh]
type = GeneratedMesh
dim = 2
xmin = 0
xmax = 1
ymin = 0
ymax = 1
nx = 1
ny = 1
elem_type = QUAD4
[]
[Variables]
[./n]
family = SCALAR
order = FIRST
initial_condition = 1
[../]
[]
[AuxVariables]
[./tag_vector_var1]
family = SCALAR
order = FIRST
[../]
[./tag_vector_var2]
family = SCALAR
order = FIRST
[../]
[./tag_matrix_var2]
family = SCALAR
order = FIRST
[../]
[]
[ScalarKernels]
[./dn]
type = ODETimeDerivative
variable = n
extra_matrix_tags = 'mat_tag1 mat_tag2'
extra_vector_tags = 'vec_tag1'
[../]
[./ode1]
type = ParsedODEKernel
function = '-n'
variable = n
extra_matrix_tags = 'mat_tag1'
extra_vector_tags = 'vec_tag1'
[../]
[./ode2]
type = ParsedODEKernel
function = '-n'
variable = n
vector_tags = 'vec_tag2'
matrix_tags = 'mat_tag2'
[../]
[]
[AuxScalarKernels]
[./TagVectorAux]
type = ScalarTagVectorAux
variable = tag_vector_var1
v = n
vector_tag = vec_tag1
execute_on = timestep_end
[../]
[./TagVectorAux2]
type = ScalarTagVectorAux
variable = tag_vector_var2
v = n
vector_tag = vec_tag2
execute_on = timestep_end
[../]
[./TagMatrixAux2]
type = ScalarTagMatrixAux
variable = tag_matrix_var2
v = n
matrix_tag = mat_tag2
execute_on = timestep_end
[../]
[]
[Problem]
type = TagTestProblem
test_tag_vectors = 'time nontime residual vec_tag1 vec_tag2'
test_tag_matrices = 'mat_tag1 mat_tag2'
extra_tag_matrices = 'mat_tag1 mat_tag2'
extra_tag_vectors = 'vec_tag1 vec_tag2'
[]
[Executioner]
type = Transient
start_time = 0
num_steps = 10
dt = 0.001
dtmin = 0.001 # Don't allow timestep cutting
solve_type = NEWTON
nl_max_its = 2
nl_abs_tol = 1.e-12 # This is an ODE, so nl_abs_tol makes sense.
[]
[Functions]
[./exact_solution]
type = ParsedFunction
value = exp(t)
[../]
[]
[Postprocessors]
[./error_n]
# Post processor that computes the difference between the computed
# and exact solutions. For the exact solution used here, the
# error at the final time should converge at O(dt^p), where p is
# the order of the method.
type = ScalarL2Error
variable = n
function = exact_solution
# final is not currently supported for Postprocessor execute_on...
# execute_on = 'final'
[../]
[]
[Outputs]
csv = true
[]
(test/tests/scaling/ignore-variables/ignore.i)
[Mesh]
type = GeneratedMesh
dim = 1
nx = 3
[]
[Variables]
[u][]
[v][]
[x]
family = SCALAR
type = MooseVariableBase
[]
[y]
family = SCALAR
[]
[]
[Kernels]
[dt_u]
type = TimeDerivative
variable = u
[]
[diff_u]
type = Diffusion
variable = u
[]
[dt_v]
type = TimeDerivative
variable = v
[]
[diff_v]
type = MatDiffusion
variable = v
diffusivity = 1e-3
[]
[]
[ScalarKernels]
[dt_x]
type = ODETimeDerivative
variable = x
[]
[ode_x]
type = ParsedODEKernel
variable = x
args = y
function = '-3*x - 2*y'
[]
[dt_y]
type = ODETimeDerivative
variable = y
[]
[ode_y ]
type = ParsedODEKernel
variable = y
function = '10*y'
[]
[]
[Executioner]
type = Transient
num_steps = 2
automatic_scaling = true
compute_scaling_once = false
ignore_variables_for_autoscaling = 'v y'
solve_type = NEWTON
verbose = true
[]
[Outputs]
exodus = true
[]
(modules/thermal_hydraulics/include/scalarkernels/ODECoefTimeDerivative.h)
// 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
#pragma once
#include "ODETimeDerivative.h"
/**
* Time derivative multiplied by a coefficient for ODEs
*/
class ODECoefTimeDerivative : public ODETimeDerivative
{
public:
ODECoefTimeDerivative(const InputParameters & parameters);
protected:
virtual Real computeQpResidual() override;
virtual Real computeQpJacobian() override;
/// Coefficient that the time derivative terms is multiplied with
const Real & _coef;
public:
static InputParameters validParams();
};