- solutionThe SolutionUserObject to extract data from.
C++ Type:UserObjectName
Controllable:No
Description:The SolutionUserObject to extract data from.
SolutionFunction
Function for reading a solution from file.
The solution is a variable
in the file but the SolutionFunction
makes it available as a function. The SolutionUserObject specified as the solution
parameter is used to compute the variable values.
The accuracy on the evaluation of this variable in various locations may be diminished by the solution file format. Exodus
for example does not store higher order variables accurately.
Example input syntax
In this input file, we load in u_xda_func
a reference solution for the problem, previously computed and stored in aux_nonlinear_solution_out_0001.xda
, then compare it to the current solution u
.
[Functions]
[./u_xda_func]
type = SolutionFunction
solution = xda_u
[../]
[]
[UserObjects]
[./xda_u]
type = SolutionUserObject
system = nl0
mesh = aux_nonlinear_solution_out_0001_mesh.xda
es = aux_nonlinear_solution_out_0001.xda
system_variables = u
execute_on = initial
[../]
[]
[Postprocessors]
[./unorm]
type = ElementL2Norm
variable = u
[../]
[./uerror]
type = ElementL2Error
variable = u
function = u_xda_func
[../]
[]
(test/tests/auxkernels/solution_aux/thread_xda.i)Input Parameters
- add_factor0Add this value (b) to the solution (x): ax+b, where a is the 'scale_factor'
Default:0
C++ Type:double
Controllable:No
Description:Add this value (b) to the solution (x): ax+b, where a is the 'scale_factor'
- execute_onLINEARThe list of flag(s) indicating when this object should be executed, the available options include FORWARD, ADJOINT, HOMOGENEOUS_FORWARD, ADJOINT_TIMESTEP_BEGIN, ADJOINT_TIMESTEP_END, NONE, INITIAL, LINEAR, NONLINEAR, POSTCHECK, TIMESTEP_END, TIMESTEP_BEGIN, MULTIAPP_FIXED_POINT_END, MULTIAPP_FIXED_POINT_BEGIN, FINAL, CUSTOM.
Default:LINEAR
C++ Type:ExecFlagEnum
Options:FORWARD, ADJOINT, HOMOGENEOUS_FORWARD, ADJOINT_TIMESTEP_BEGIN, ADJOINT_TIMESTEP_END, NONE, INITIAL, LINEAR, NONLINEAR, POSTCHECK, TIMESTEP_END, TIMESTEP_BEGIN, MULTIAPP_FIXED_POINT_END, MULTIAPP_FIXED_POINT_BEGIN, FINAL, CUSTOM
Controllable:No
Description:The list of flag(s) indicating when this object should be executed, the available options include FORWARD, ADJOINT, HOMOGENEOUS_FORWARD, ADJOINT_TIMESTEP_BEGIN, ADJOINT_TIMESTEP_END, NONE, INITIAL, LINEAR, NONLINEAR, POSTCHECK, TIMESTEP_END, TIMESTEP_BEGIN, MULTIAPP_FIXED_POINT_END, MULTIAPP_FIXED_POINT_BEGIN, FINAL, CUSTOM.
- from_variableThe name of the variable in the file that is to be extracted
C++ Type:std::string
Controllable:No
Description:The name of the variable in the file that is to be extracted
- scale_factor1Scale factor (a) to be applied to the solution (x): ax+b, where b is the 'add_factor'
Default:1
C++ Type:double
Controllable:No
Description:Scale factor (a) to be applied to the solution (x): ax+b, where b is the 'add_factor'
Optional 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:No
Description:Set the enabled status of the MooseObject.
Advanced Parameters
Input Files
- (modules/thermal_hydraulics/test/tests/misc/surrogate_power_profile/surrogate_power_profile.i)
- (test/tests/auxkernels/solution_aux/aux_nonlinear_solution_xdr.i)
- (test/tests/functions/solution_function/solution_function_rot2.i)
- (examples/ex14_pps/ex14_compare_solutions_2.i)
- (test/tests/functions/solution_function/solution_function_scale_transl.i)
- (test/tests/auxkernels/solution_aux/aux_nonlinear_solution_xda.i)
- (test/tests/functions/solution_function/solution_function_scale_mult.i)
- (modules/porous_flow/examples/groundwater/ex02_steady_state.i)
- (test/tests/functions/solution_function/solution_function_grad_p2.i)
- (test/tests/functions/solution_function/solution_function_rot4.i)
- (test/tests/functions/solution_function/solution_function_rot1.i)
- (test/tests/auxkernels/solution_aux/aux_nonlinear_solution_adapt_xda.i)
- (test/tests/auxkernels/solution_aux/thread_xda.i)
- (modules/porous_flow/examples/restart/gas_injection_new_mesh.i)
- (modules/porous_flow/examples/groundwater/ex02_abstraction.i)
- (test/tests/functions/solution_function/solution_function_exodus_test.i)
- (test/tests/functions/solution_function/solution_function_exodus_interp_test.i)
- (test/tests/functions/solution_function/solution_function_test.i)
- (test/tests/functions/solution_function/solution_function_rot3.i)
(test/tests/auxkernels/solution_aux/thread_xda.i)
[Mesh]
# This test uses SolutionUserObject which doesn't work with ParallelMesh.
type = GeneratedMesh
parallel_type = REPLICATED
dim = 2
nx = 2
ny = 2
[]
[Variables]
[./u]
order = FIRST
family = LAGRANGE
[../]
[]
[Functions]
[./u_xda_func]
type = SolutionFunction
solution = xda_u
[../]
[]
[Kernels]
[./diff]
type = Diffusion
variable = u
[../]
[]
[BCs]
[./left]
type = DirichletBC
variable = u
boundary = 1
value = 1
[../]
[./right]
type = DirichletBC
variable = u
boundary = 2
value = 2
[../]
[]
[UserObjects]
[./xda_u]
type = SolutionUserObject
system = nl0
mesh = aux_nonlinear_solution_out_0001_mesh.xda
es = aux_nonlinear_solution_out_0001.xda
system_variables = u
execute_on = initial
[../]
[]
[Executioner]
type = Steady
solve_type = PJFNK
nl_rel_tol = 1e-10
[]
[Postprocessors]
[./unorm]
type = ElementL2Norm
variable = u
[../]
[./uerror]
type = ElementL2Error
variable = u
function = u_xda_func
[../]
[]
[Outputs]
csv = true
[]
(modules/thermal_hydraulics/test/tests/misc/surrogate_power_profile/surrogate_power_profile.i)
# This takes an exodus file with a power profile and uses that in a heat structure
# of a core channel as power density. This tests the capability of taking a
# rattlesnake generated power profile and using it in RELAP-7.
[GlobalParams]
initial_p = 15.5e6
initial_vel = 0.
initial_T = 559.15
gravity_vector = '0 -9.8 0'
scaling_factor_1phase = '1 1 1e-4'
scaling_factor_temperature = 1e-2
closures = simple_closures
[]
[FluidProperties]
[water]
type = StiffenedGasFluidProperties
gamma = 2.35
q = -1167e3
q_prime = 0
p_inf = 1.e9
cv = 1816
[]
[]
[Closures]
[simple_closures]
type = Closures1PhaseSimple
[]
[]
[SolidProperties]
[fuel-mat]
type = ThermalFunctionSolidProperties
k = 2.5
cp = 300.
rho = 1.032e4
[]
[gap-mat]
type = ThermalFunctionSolidProperties
k = 0.6
cp = 1.
rho = 1.
[]
[clad-mat]
type = ThermalFunctionSolidProperties
k = 21.5
cp = 350.
rho = 6.55e3
[]
[]
[Components]
[CCH1:pipe]
type = FlowChannel1Phase
position = '0.02 0 0'
orientation = '0 1 0'
length = 3.865
n_elems = 20
A = 8.78882e-5
D_h = 0.01179
f = 0.01
fp = water
[]
[CCH1:solid]
type = HeatStructureCylindrical
position = '0.024748 0 0'
orientation = '0 1 0'
length = 3.865
n_elems = 20
initial_T = 559.15
names = 'fuel gap clad'
widths = '0.004096 0.0001 0.000552'
n_part_elems = '5 1 2'
solid_properties = 'fuel-mat gap-mat clad-mat'
solid_properties_T_ref = '300 300 300'
[]
[CCH1:hx]
type = HeatTransferFromHeatStructure1Phase
flow_channel = CCH1:pipe
hs = CCH1:solid
hs_side = outer
Hw = 5.33e4
P_hf = 2.9832563838489e-2
[]
[inlet]
type = InletMassFlowRateTemperature1Phase
input = 'CCH1:pipe:in'
m_dot = 0.1
T = 559.15
[]
[outlet]
type = Outlet1Phase
input = 'CCH1:pipe:out'
p = 15.5e6
[]
[]
[UserObjects]
[reactor_power_density_uo]
type = SolutionUserObject
mesh = 'power_profile.e'
system_variables = power_density
translation = '0. 0. 0.'
[]
[]
[Functions]
[power_density_fn]
type = SolutionFunction
from_variable = power_density
solution = reactor_power_density_uo
[]
[]
[AuxVariables]
[power_density]
family = MONOMIAL
order = CONSTANT
block = 'CCH1:solid:fuel'
[]
[]
[AuxKernels]
[power_density_aux]
type = FunctionAux
variable = power_density
function = power_density_fn
block = 'CCH1:solid:fuel'
execute_on = 'timestep_begin'
[]
[]
[Preconditioning]
[SMP_PJFNK]
type = SMP
full = true
[]
[]
[Executioner]
type = Transient
scheme = 'bdf2'
start_time = 0.0
num_steps = 10
dt = 1e-2
abort_on_solve_fail = true
solve_type = 'PJFNK'
line_search = 'basic'
nl_rel_tol = 1e-12
nl_abs_tol = 1e-9
nl_max_its = 10
l_tol = 1e-3
l_max_its = 100
[Quadrature]
type = GAUSS
order = SECOND
[]
[]
[Outputs]
[out]
type = Exodus
[]
velocity_as_vector = false
[]
(test/tests/auxkernels/solution_aux/aux_nonlinear_solution_xdr.i)
[Mesh]
# This test uses SolutionUserObject which doesn't work with DistributedMesh.
type = GeneratedMesh
parallel_type = replicated
dim = 2
nx = 2
ny = 2
[]
[Variables]
[./u]
order = FIRST
family = LAGRANGE
[../]
[]
[AuxVariables]
[./u_aux]
[../]
[]
[Functions]
[./u_xdr_func]
type = SolutionFunction
solution = xdr_u
[../]
[]
[Kernels]
[./diff]
type = Diffusion
variable = u
[../]
[]
[AuxKernels]
[./aux_xdr_kernel]
type = SolutionAux
variable = u_aux
solution = xdr_u_aux
execute_on = initial
[../]
[]
[BCs]
[./left]
type = DirichletBC
variable = u
boundary = 1
value = 1
[../]
[./right]
type = DirichletBC
variable = u
boundary = 2
value = 2
[../]
[]
[UserObjects]
[./xdr_u_aux]
type = SolutionUserObject
system = aux0
mesh = aux_nonlinear_solution_xdr_0001_mesh.xdr
es = aux_nonlinear_solution_xdr_0001.xdr
execute_on = initial
[../]
[./xdr_u]
type = SolutionUserObject
system = nl0
mesh = aux_nonlinear_solution_xdr_0001_mesh.xdr
es = aux_nonlinear_solution_xdr_0001.xdr
execute_on = initial
[../]
[]
[Executioner]
type = Steady
solve_type = PJFNK
nl_rel_tol = 1e-10
[]
[Outputs]
exodus = true
[]
[ICs]
[./u_func_ic]
function = u_xdr_func
variable = u
type = FunctionIC
[../]
[]
(test/tests/functions/solution_function/solution_function_rot2.i)
# checking rotation of points by 45 deg about y axis in a SolutionUserObject
[Mesh]
# this is chosen so when i rotate through 45deg i get a length of "1" along the x or y or z direction
type = GeneratedMesh
dim = 3
xmin = -0.70710678
xmax = 0.70710678
nx = 3
ymin = -0.70710678
ymax = 0.70710678
ny = 3
zmin = -0.70710678
zmax = 0.70710678
nz = 3
[]
[UserObjects]
[./solution_uo]
type = SolutionUserObject
mesh = cube_with_u_equals_x.e
timestep = 1
system_variables = u
rotation0_vector = '0 1 0'
rotation0_angle = 45
transformation_order = rotation0
[../]
[]
[Variables]
[./u]
order = FIRST
family = LAGRANGE
[../]
[]
[ICs]
[./u_init]
type = FunctionIC
variable = u
function = solution_fcn
[../]
[]
[Functions]
[./solution_fcn]
type = SolutionFunction
from_variable = u
solution = solution_uo
[../]
[]
[Kernels]
[./diff]
type = TimeDerivative
variable = u
[../]
[]
[Executioner]
type = Transient
solve_type = 'NEWTON'
l_max_its = 800
nl_rel_tol = 1e-10
num_steps = 1
end_time = 1
dt = 1
[]
[Outputs]
execute_on = 'timestep_end'
file_base = solution_function_rot2
exodus = true
[]
(examples/ex14_pps/ex14_compare_solutions_2.i)
[Mesh]
type = GeneratedMesh
dim = 2
nx = 11
ny = 11
xmin = 0.0
xmax = 1.0
ymin = 0.0
ymax = 1.0
[]
[Variables]
[./forced]
order = FIRST
family = LAGRANGE
[../]
[]
[Kernels]
[./diff]
type = Diffusion
variable = forced
[../]
[./forcing]
type = BodyForce
variable = forced
function = 'x*x+y*y' # Any object expecting a function name can also receive a ParsedFunction string
[../]
[]
[BCs]
[./all]
type = DirichletBC
variable = forced
boundary = 'bottom right top left'
value = 0
[../]
[]
[UserObjects]
[./fine_solution]
# Read in the fine grid solution
type = SolutionUserObject
system_variables = forced
mesh = ex14_compare_solutions_1_out_0000_mesh.xda
es = ex14_compare_solutions_1_out_0000.xda
[../]
[]
[Functions]
[./fine_function]
# Create a Function out of the fine grid solution
# Note: This references the SolutionUserObject above
type = SolutionFunction
solution = fine_solution
[../]
[]
[Executioner]
type = Steady
petsc_options_iname = '-pc_type -pc_hypre_type'
petsc_options_value = 'hypre boomeramg'
[./Quadrature]
# The integration of the error happens on the coarse mesh
# To reduce integration error of the finer solution we can
# raise the integration order.
# Note: This will slow down the calculation a bit
order = SIXTH
[../]
[]
[Postprocessors]
[./error]
# Compute the error between the computed solution and the fine-grid solution
type = ElementL2Error
variable = forced
function = fine_function
[../]
[]
[Outputs]
execute_on = 'timestep_end'
exodus = true
[]
(test/tests/functions/solution_function/solution_function_scale_transl.i)
# checking scale and translation, with ordering scale first, then translation second
[Mesh]
type = GeneratedMesh
dim = 3
xmin = -1
xmax = 1
nx = 3
ymin = -1
ymax = 1
ny = 3
zmin = -1
zmax = 1
nz = 3
[]
[UserObjects]
[./solution_uo]
type = SolutionUserObject
mesh = cube_with_u_equals_x.e
timestep = 1
system_variables = u
scale = '0.5 1 1'
translation = '2 0 0'
transformation_order = 'scale translation'
[../]
[]
[Variables]
[./u]
order = FIRST
family = LAGRANGE
[../]
[]
[ICs]
[./u_init]
type = FunctionIC
variable = u
function = solution_fcn
[../]
[]
[Functions]
[./solution_fcn]
type = SolutionFunction
from_variable = u
solution = solution_uo
[../]
[]
[Kernels]
[./diff]
type = TimeDerivative
variable = u
[../]
[]
[Executioner]
type = Transient
solve_type = 'NEWTON'
l_max_its = 800
nl_rel_tol = 1e-10
num_steps = 1
end_time = 1
dt = 1
[]
[Outputs]
execute_on = 'timestep_end'
file_base = solution_function_scale_transl
exodus = true
[]
(test/tests/auxkernels/solution_aux/aux_nonlinear_solution_xda.i)
[Mesh]
# This test uses SolutionUserObject which doesn't work with DistributedMesh.
type = GeneratedMesh
parallel_type = replicated
dim = 2
nx = 2
ny = 2
[]
[Variables]
[./u]
order = FIRST
family = LAGRANGE
[../]
[]
[AuxVariables]
[./u_aux]
[../]
[]
[Functions]
[./u_xda_func]
type = SolutionFunction
solution = xda_u
[../]
[]
[Kernels]
[./diff]
type = Diffusion
variable = u
[../]
[]
[AuxKernels]
[./aux_xda_kernel]
type = SolutionAux
variable = u_aux
solution = xda_u_aux
execute_on = initial
[../]
[]
[BCs]
[./left]
type = DirichletBC
variable = u
boundary = 1
value = 1
[../]
[./right]
type = DirichletBC
variable = u
boundary = 2
value = 2
[../]
[]
[UserObjects]
[./xda_u_aux]
type = SolutionUserObject
system = aux0
mesh = aux_nonlinear_solution_out_0001_mesh.xda
es = aux_nonlinear_solution_out_0001.xda
system_variables = u_aux
execute_on = initial
[../]
[./xda_u]
type = SolutionUserObject
system = nl0
mesh = aux_nonlinear_solution_out_0001_mesh.xda
es = aux_nonlinear_solution_out_0001.xda
system_variables = u
execute_on = initial
[../]
[]
[Executioner]
type = Steady
solve_type = PJFNK
nl_rel_tol = 1e-10
[]
[Outputs]
exodus = true
[]
[ICs]
[./u_func_ic]
function = u_xda_func
variable = u
type = FunctionIC
[../]
[]
(test/tests/functions/solution_function/solution_function_scale_mult.i)
# checking scale_multiplier
[Mesh]
type = GeneratedMesh
dim = 2
xmin = -1
xmax = 1
nx = 3
ymin = -1
ymax = 1
ny = 3
[]
[UserObjects]
[./solution_uo]
type = SolutionUserObject
mesh = square_with_u_equals_x.e
timestep = 1
system_variables = u
scale_multiplier = '2 2 0'
transformation_order = scale_multiplier
[../]
[]
[Variables]
[./u]
order = FIRST
family = LAGRANGE
[../]
[]
[ICs]
[./u_init]
type = FunctionIC
variable = u
function = solution_fcn
[../]
[]
[Functions]
[./solution_fcn]
type = SolutionFunction
from_variable = u
solution = solution_uo
[../]
[]
[Kernels]
[./diff]
type = TimeDerivative
variable = u
[../]
[]
[Executioner]
type = Transient
solve_type = 'NEWTON'
l_max_its = 800
nl_rel_tol = 1e-10
num_steps = 1
end_time = 1
dt = 1
[]
[Outputs]
execute_on = 'timestep_end'
file_base = solution_function_scale_mult
exodus = true
[]
(modules/porous_flow/examples/groundwater/ex02_steady_state.i)
# Steady-state groundwater model. See groundwater_models.md for a detailed description
[Mesh]
[basic_mesh]
# mesh create by external program: lies within -500<=x<=500 and -200<=y<=200, with varying z
type = FileMeshGenerator
file = ex02_mesh.e
[]
[name_blocks]
type = RenameBlockGenerator
input = basic_mesh
old_block = '2 3 4'
new_block = 'bot_aquifer aquitard top_aquifer'
[]
[zmax]
type = SideSetsFromNormalsGenerator
input = name_blocks
new_boundary = zmax
normals = '0 0 1'
[]
[xmin_bot_aquifer]
type = ParsedGenerateSideset
input = zmax
included_subdomains = 2
normal = '-1 0 0'
combinatorial_geometry = 'x <= -500.0'
new_sideset_name = xmin_bot_aquifer
[]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[pp]
[]
[]
[ICs]
[pp]
type = FunctionIC
variable = pp
function = initial_pp
[]
[]
[BCs]
[rainfall_recharge]
type = PorousFlowSink
boundary = zmax
variable = pp
flux_function = -1E-6 # recharge of 0.1mm/day = 1E-4m3/m2/day = 0.1kg/m2/day ~ 1E-6kg/m2/s
[]
[evapotranspiration]
type = PorousFlowHalfCubicSink
boundary = zmax
variable = pp
center = 0.0
cutoff = -5E4 # roots of depth 5m. 5m of water = 5E4 Pa
use_mobility = true
fluid_phase = 0
# Assume pan evaporation of 4mm/day = 4E-3m3/m2/day = 4kg/m2/day ~ 4E-5kg/m2/s
# Assume that if permeability was 1E-10m^2 and water table at topography then ET acts as pan strength
# Because use_mobility = true, then 4E-5 = maximum_flux = max * perm * density / visc = max * 1E-4, so max = 40
max = 40
[]
[]
[DiracKernels]
[river]
type = PorousFlowPolyLineSink
SumQuantityUO = baseflow
point_file = ex02_river.bh
# Assume a perennial river.
# Assume the river has an incision depth of 1m and a stage height of 1.5m, and these are constant in time and uniform over the whole model. Hence, if groundwater head is 0.5m (5000Pa) there will be no baseflow and leakage.
p_or_t_vals = '-999995000 5000 1000005000'
# Assume the riverbed conductance, k_zz*density*river_segment_length*river_width/riverbed_thickness/viscosity = 1E-6*river_segment_length kg/Pa/s
fluxes = '-1E3 0 1E3'
variable = pp
[]
[]
[Functions]
[initial_pp]
type = SolutionFunction
scale_factor = 1E4
from_variable = cosflow_depth
solution = initial_mesh
[]
[baseflow_rate]
type = ParsedFunction
symbol_names = 'baseflow_kg dt'
symbol_values = 'baseflow_kg dt'
expression = 'baseflow_kg / dt * 24.0 * 3600.0 / 400.0'
[]
[]
[PorousFlowUnsaturated]
fp = simple_fluid
porepressure = pp
[]
[FluidProperties]
[simple_fluid]
type = SimpleFluidProperties
[]
[]
[Materials]
[porosity_everywhere]
type = PorousFlowPorosityConst
porosity = 0.05
[]
[permeability_aquifers]
type = PorousFlowPermeabilityConst
block = 'top_aquifer bot_aquifer'
permeability = '1E-12 0 0 0 1E-12 0 0 0 1E-13'
[]
[permeability_aquitard]
type = PorousFlowPermeabilityConst
block = aquitard
permeability = '1E-16 0 0 0 1E-16 0 0 0 1E-17'
[]
[]
[UserObjects]
[initial_mesh]
type = SolutionUserObject
execute_on = INITIAL
mesh = ex02_mesh.e
timestep = LATEST
system_variables = cosflow_depth
[]
[baseflow]
type = PorousFlowSumQuantity
[]
[]
[Postprocessors]
[baseflow_kg]
type = PorousFlowPlotQuantity
uo = baseflow
outputs = 'none'
[]
[dt]
type = TimestepSize
outputs = 'none'
[]
[baseflow_l_per_m_per_day]
type = FunctionValuePostprocessor
function = baseflow_rate
indirect_dependencies = 'baseflow_kg dt'
[]
[]
[Preconditioning]
[smp]
type = SMP
full = true
# following 2 lines are not mandatory, but illustrate a popular preconditioner choice in groundwater models
petsc_options_iname = '-pc_type -sub_pc_type -pc_asm_overlap'
petsc_options_value = ' asm ilu 2 '
[]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1E6
[TimeStepper]
type = FunctionDT
function = 'max(1E6, t)'
[]
end_time = 1E12
nl_abs_tol = 1E-13
[]
[Outputs]
print_linear_residuals = false
[ex]
type = Exodus
execute_on = final
[]
[csv]
type = CSV
[]
[]
(test/tests/functions/solution_function/solution_function_grad_p2.i)
[Mesh]
type = GeneratedMesh
dim = 2
nx = 10
ny = 10
xmin = 0.0
xmax = 1.0
ymin = 0.0
ymax = 1.0
parallel_type = replicated
[]
[Variables]
[./u]
order = FIRST
family = LAGRANGE
[../]
[]
[AuxVariables]
[./test_variable_x]
order = FIRST
family = LAGRANGE
[../]
[./test_variable_y]
order = FIRST
family = LAGRANGE
[../]
[]
[AuxKernels]
[./test_variable_x_aux]
type = FunctionDerivativeAux
variable = test_variable_x
component = x
function = solution_function
[../]
[./test_variable_y_aux]
type = FunctionDerivativeAux
variable = test_variable_y
component = y
function = solution_function
[../]
[]
[UserObjects]
[./ex_soln]
type = SolutionUserObject
system_variables = test_variable
mesh = solution_function_grad_p1.e
[../]
[]
[Functions]
[./solution_function]
type = SolutionFunction
solution = ex_soln
[../]
[]
[Kernels]
[./diff]
type = Diffusion
variable = u
[../]
[]
[BCs]
[./left]
type = DirichletBC
variable = u
boundary = 1
value = 0
[../]
[./right]
type = DirichletBC
variable = u
boundary = 2
value = 1
[../]
[]
[Executioner]
type = Steady
nl_rel_tol = 1e-10
[]
[Outputs]
file_base = solution_function_grad_p2
exodus = true
[]
(test/tests/functions/solution_function/solution_function_rot4.i)
# checking rotation of points by 45 deg about z axis in a SolutionUserObject for a 2D situation
[Mesh]
# this is chosen so when i rotate through 45deg i get a length of "1" along the x or y direction
type = GeneratedMesh
dim = 2
xmin = -0.70710678
xmax = 0.70710678
nx = 3
ymin = -0.70710678
ymax = 0.70710678
ny = 3
[]
[UserObjects]
[./solution_uo]
type = SolutionUserObject
mesh = square_with_u_equals_x.e
timestep = 1
system_variables = u
rotation0_vector = '0 0 1'
rotation0_angle = 45
transformation_order = rotation0
[../]
[]
[Variables]
[./u]
order = FIRST
family = LAGRANGE
[../]
[]
[ICs]
[./u_init]
type = FunctionIC
variable = u
function = solution_fcn
[../]
[]
[Functions]
[./solution_fcn]
type = SolutionFunction
from_variable = u
solution = solution_uo
[../]
[]
[Kernels]
[./diff]
type = TimeDerivative
variable = u
[../]
[]
[Executioner]
type = Transient
solve_type = 'NEWTON'
l_max_its = 800
nl_rel_tol = 1e-10
num_steps = 1
end_time = 1
dt = 1
[]
[Outputs]
execute_on = 'timestep_end'
file_base = solution_function_rot4
exodus = true
[]
(test/tests/functions/solution_function/solution_function_rot1.i)
# checking rotation of points by 45 deg about z axis in a SolutionUserObject
[Mesh]
# this is chosen so when i rotate through 45deg i get a length of "1" along the x or y or z direction
type = GeneratedMesh
dim = 3
xmin = -0.70710678
xmax = 0.70710678
nx = 3
ymin = -0.70710678
ymax = 0.70710678
ny = 3
zmin = -0.70710678
zmax = 0.70710678
nz = 3
[]
[UserObjects]
[./solution_uo]
type = SolutionUserObject
mesh = cube_with_u_equals_x.e
timestep = LATEST
system_variables = u
rotation0_vector = '0 0 1'
rotation0_angle = 45
transformation_order = rotation0
[../]
[]
[Variables]
[./u]
order = FIRST
family = LAGRANGE
[../]
[]
[ICs]
[./u_init]
type = FunctionIC
variable = u
function = solution_fcn
[../]
[]
[Functions]
[./solution_fcn]
type = SolutionFunction
from_variable = u
solution = solution_uo
[../]
[]
[Kernels]
[./diff]
type = TimeDerivative
variable = u
[../]
[]
[Executioner]
type = Transient
solve_type = 'NEWTON'
l_max_its = 800
nl_rel_tol = 1e-10
num_steps = 1
end_time = 1
dt = 1
[]
[Outputs]
execute_on = 'timestep_end'
file_base = solution_function_rot1
exodus = true
[]
(test/tests/auxkernels/solution_aux/aux_nonlinear_solution_adapt_xda.i)
[Mesh]
# This test uses SolutionUserObject which doesn't work with DistributedMesh.
type = FileMesh
file = aux_nonlinear_solution_adapt_out_0004_mesh.xda
parallel_type = replicated
[]
[Adaptivity]
marker = error_frac
steps = 2
[./Indicators]
[./jump_indicator]
type = GradientJumpIndicator
variable = u
[../]
[../]
[./Markers]
[./error_frac]
type = ErrorFractionMarker
indicator = jump_indicator
refine = 0.7
[../]
[../]
[]
[Variables]
[./u]
order = FIRST
family = LAGRANGE
[../]
[]
[AuxVariables]
[./u_aux]
[../]
[]
[Functions]
[./u_xda_func]
type = SolutionFunction
solution = xda_u
[../]
[]
[Kernels]
[./diff]
type = Diffusion
variable = u
[../]
[]
[AuxKernels]
[./aux_xda_kernel]
type = SolutionAux
variable = u_aux
solution = xda_u_aux
execute_on = initial
[../]
[]
[BCs]
[./left]
type = DirichletBC
variable = u
boundary = 1
value = 1
[../]
[./right]
type = DirichletBC
variable = u
boundary = 2
value = 2
[../]
[]
[UserObjects]
[./xda_u_aux]
type = SolutionUserObject
system = aux0
mesh = aux_nonlinear_solution_adapt_out_0004_mesh.xda
es = aux_nonlinear_solution_adapt_out_0004.xda
system_variables = u_aux
execute_on = initial
[../]
[./xda_u]
type = SolutionUserObject
system = nl0
mesh = aux_nonlinear_solution_adapt_out_0004_mesh.xda
es = aux_nonlinear_solution_adapt_out_0004.xda
system_variables = u
execute_on = initial
[../]
[]
[Executioner]
type = Steady
solve_type = PJFNK
nl_rel_tol = 1e-10
[]
[Outputs]
exodus = true
[]
[ICs]
[./u_func_ic]
function = u_xda_func
variable = u
type = FunctionIC
[../]
[]
(test/tests/auxkernels/solution_aux/thread_xda.i)
[Mesh]
# This test uses SolutionUserObject which doesn't work with ParallelMesh.
type = GeneratedMesh
parallel_type = REPLICATED
dim = 2
nx = 2
ny = 2
[]
[Variables]
[./u]
order = FIRST
family = LAGRANGE
[../]
[]
[Functions]
[./u_xda_func]
type = SolutionFunction
solution = xda_u
[../]
[]
[Kernels]
[./diff]
type = Diffusion
variable = u
[../]
[]
[BCs]
[./left]
type = DirichletBC
variable = u
boundary = 1
value = 1
[../]
[./right]
type = DirichletBC
variable = u
boundary = 2
value = 2
[../]
[]
[UserObjects]
[./xda_u]
type = SolutionUserObject
system = nl0
mesh = aux_nonlinear_solution_out_0001_mesh.xda
es = aux_nonlinear_solution_out_0001.xda
system_variables = u
execute_on = initial
[../]
[]
[Executioner]
type = Steady
solve_type = PJFNK
nl_rel_tol = 1e-10
[]
[Postprocessors]
[./unorm]
type = ElementL2Norm
variable = u
[../]
[./uerror]
type = ElementL2Error
variable = u
function = u_xda_func
[../]
[]
[Outputs]
csv = true
[]
(modules/porous_flow/examples/restart/gas_injection_new_mesh.i)
# Using the results from the equilibrium run to provide the initial condition for
# porepressure, we now inject a gas phase into the brine-saturated reservoir. In this
# example, the mesh is not identical to the mesh used in gravityeq.i. Rather, it is
# generated so that it is more refined near the injection boundary and at the top of
# the model, as that is where the gas plume will be present.
#
# To use the hydrostatic pressure calculated using the gravity equilibrium run as the initial
# condition for the pressure, a SolutionUserObject is used, along with a SolutionFunction to
# interpolate the pressure from the gravity equilibrium run to the initial condition for liqiud
# porepressure in this example.
#
# Even though the gravity equilibrium is established using a 2D mesh, in this example,
# we use a mesh shifted 0.1 m to the right and rotate it about the Y axis to make a 2D radial
# model.
#
# Methane injection takes place over the surface of the hole created by rotating the mesh,
# and hence the injection area is 2 pi r h. We can calculate this using an AreaPostprocessor,
# and then use this in a ParsedFunction to calculate the injection rate so that 10 kg/s of
# methane is injected.
#
# Note: as this example uses the results from a previous simulation, gravityeq.i MUST be
# run before running this input file.
[Mesh]
type = GeneratedMesh
dim = 2
ny = 25
nx = 50
ymax = 100
xmin = 0.1
xmax = 5000
bias_x = 1.05
bias_y = 0.95
coord_type = RZ
rz_coord_axis = Y
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 -9.81 0'
temperature_unit = Celsius
[]
[Variables]
[pp_liq]
[]
[sat_gas]
initial_condition = 0
[]
[]
[ICs]
[ppliq_ic]
type = FunctionIC
variable = pp_liq
function = ppliq_ic
[]
[]
[AuxVariables]
[temperature]
initial_condition = 50
[]
[xnacl]
initial_condition = 0.1
[]
[brine_density]
family = MONOMIAL
order = CONSTANT
[]
[methane_density]
family = MONOMIAL
order = CONSTANT
[]
[massfrac_ph0_sp0]
initial_condition = 1
[]
[massfrac_ph1_sp0]
initial_condition = 0
[]
[pp_gas]
family = MONOMIAL
order = CONSTANT
[]
[sat_liq]
family = MONOMIAL
order = CONSTANT
[]
[]
[Kernels]
[mass0]
type = PorousFlowMassTimeDerivative
variable = pp_liq
[]
[flux0]
type = PorousFlowAdvectiveFlux
variable = pp_liq
[]
[mass1]
type = PorousFlowMassTimeDerivative
variable = sat_gas
fluid_component = 1
[]
[flux1]
type = PorousFlowAdvectiveFlux
variable = sat_gas
fluid_component = 1
[]
[]
[AuxKernels]
[brine_density]
type = PorousFlowPropertyAux
property = density
variable = brine_density
execute_on = 'initial timestep_end'
[]
[methane_density]
type = PorousFlowPropertyAux
property = density
variable = methane_density
phase = 1
execute_on = 'initial timestep_end'
[]
[pp_gas]
type = PorousFlowPropertyAux
property = pressure
phase = 1
variable = pp_gas
execute_on = 'initial timestep_end'
[]
[sat_liq]
type = PorousFlowPropertyAux
property = saturation
variable = sat_liq
execute_on = 'initial timestep_end'
[]
[]
[BCs]
[gas_injection]
type = PorousFlowSink
boundary = left
variable = sat_gas
flux_function = injection_rate
fluid_phase = 1
[]
[brine_out]
type = PorousFlowPiecewiseLinearSink
boundary = right
variable = pp_liq
multipliers = '0 1e9'
pt_vals = '0 1e9'
fluid_phase = 0
flux_function = 1e-6
use_mobility = true
use_relperm = true
mass_fraction_component = 0
[]
[]
[Functions]
[injection_rate]
type = ParsedFunction
symbol_values = injection_area
symbol_names = area
expression = '-1/area'
[]
[ppliq_ic]
type = SolutionFunction
solution = soln
[]
[]
[UserObjects]
[dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp_liq sat_gas'
number_fluid_phases = 2
number_fluid_components = 2
[]
[pc]
type = PorousFlowCapillaryPressureVG
alpha = 1e-5
m = 0.5
sat_lr = 0.2
pc_max = 1e7
[]
[soln]
type = SolutionUserObject
mesh = gravityeq_out.e
system_variables = porepressure
[]
[]
[FluidProperties]
[brine]
type = BrineFluidProperties
[]
[methane]
type = MethaneFluidProperties
[]
[methane_tab]
type = TabulatedBicubicFluidProperties
fp = methane
save_file = false
[]
[]
[Materials]
[temperature]
type = PorousFlowTemperature
temperature = temperature
[]
[ps]
type = PorousFlow2PhasePS
phase0_porepressure = pp_liq
phase1_saturation = sat_gas
capillary_pressure = pc
[]
[massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph1_sp0'
[]
[brine]
type = PorousFlowBrine
compute_enthalpy = false
compute_internal_energy = false
xnacl = xnacl
phase = 0
[]
[methane]
type = PorousFlowSingleComponentFluid
compute_enthalpy = false
compute_internal_energy = false
fp = methane_tab
phase = 1
[]
[porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[]
[permeability]
type = PorousFlowPermeabilityConst
permeability = '1e-13 0 0 0 5e-14 0 0 0 1e-13'
[]
[relperm_liq]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
s_res = 0.2
sum_s_res = 0.3
[]
[relperm_gas]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 1
s_res = 0.1
sum_s_res = 0.3
[]
[]
[Preconditioning]
[smp]
type = SMP
full = true
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type'
petsc_options_value = ' asm lu NONZERO'
[]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1e8
nl_abs_tol = 1e-12
nl_rel_tol = 1e-06
nl_max_its = 20
dtmax = 1e6
[TimeStepper]
type = IterationAdaptiveDT
dt = 1e1
growth_factor = 1.5
[]
[]
[Postprocessors]
[mass_ph0]
type = PorousFlowFluidMass
fluid_component = 0
execute_on = 'initial timestep_end'
[]
[mass_ph1]
type = PorousFlowFluidMass
fluid_component = 1
execute_on = 'initial timestep_end'
[]
[injection_area]
type = AreaPostprocessor
boundary = left
execute_on = initial
[]
[]
[Outputs]
execute_on = 'initial timestep_end'
exodus = true
perf_graph = true
[]
(modules/porous_flow/examples/groundwater/ex02_abstraction.i)
# Abstraction groundwater model. See groundwater_models.md for a detailed description
[Mesh]
[from_steady_state]
type = FileMeshGenerator
file = gold/ex02_steady_state_ex.e
[]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[pp]
[]
[]
[ICs]
[pp]
type = FunctionIC
variable = pp
function = steady_state_pp
[]
[]
[BCs]
[rainfall_recharge]
type = PorousFlowSink
boundary = zmax
variable = pp
flux_function = -1E-6 # recharge of 0.1mm/day = 1E-4m3/m2/day = 0.1kg/m2/day ~ 1E-6kg/m2/s
[]
[evapotranspiration]
type = PorousFlowHalfCubicSink
boundary = zmax
variable = pp
center = 0.0
cutoff = -5E4 # roots of depth 5m. 5m of water = 5E4 Pa
use_mobility = true
fluid_phase = 0
# Assume pan evaporation of 4mm/day = 4E-3m3/m2/day = 4kg/m2/day ~ 4E-5kg/m2/s
# Assume that if permeability was 1E-10m^2 and water table at topography then ET acts as pan strength
# Because use_mobility = true, then 4E-5 = maximum_flux = max * perm * density / visc = max * 1E-4, so max = 40
max = 40
[]
[]
[DiracKernels]
inactive = polyline_sink_borehole
[river]
type = PorousFlowPolyLineSink
SumQuantityUO = baseflow
point_file = ex02_river.bh
# Assume a perennial river.
# Assume the river has an incision depth of 1m and a stage height of 1.5m, and these are constant in time and uniform over the whole model. Hence, if groundwater head is 0.5m (5000Pa) there will be no baseflow and leakage.
p_or_t_vals = '-999995000 5000 1000005000'
# Assume the riverbed conductance, k_zz*density*river_segment_length*river_width/riverbed_thickness/viscosity = 1E-6*river_segment_length kg/Pa/s
fluxes = '-1E3 0 1E3'
variable = pp
[]
[horizontal_borehole]
type = PorousFlowPeacemanBorehole
SumQuantityUO = abstraction
bottom_p_or_t = -1E5
unit_weight = '0 0 -1E4'
character = 1.0
point_file = ex02.bh
variable = pp
[]
[polyline_sink_borehole]
type = PorousFlowPolyLineSink
SumQuantityUO = abstraction
fluxes = '-0.4 0 0.4'
p_or_t_vals = '-1E8 0 1E8'
point_file = ex02.bh
variable = pp
[]
[]
[Functions]
[steady_state_pp]
type = SolutionFunction
from_variable = pp
solution = steady_state_solution
[]
[baseflow_rate]
type = ParsedFunction
symbol_names = 'baseflow_kg dt'
symbol_values = 'baseflow_kg dt'
expression = 'baseflow_kg / dt * 24.0 * 3600.0 / 400.0'
[]
[abstraction_rate]
type = ParsedFunction
symbol_names = 'abstraction_kg dt'
symbol_values = 'abstraction_kg dt'
expression = 'abstraction_kg / dt * 24.0 * 3600.0'
[]
[]
[AuxVariables]
[ini_pp]
[]
[pp_change]
[]
[]
[AuxKernels]
[ini_pp]
type = FunctionAux
variable = ini_pp
function = steady_state_pp
execute_on = INITIAL
[]
[pp_change]
type = ParsedAux
variable = pp_change
coupled_variables = 'pp ini_pp'
expression = 'pp - ini_pp'
[]
[]
[PorousFlowUnsaturated]
fp = simple_fluid
porepressure = pp
[]
[FluidProperties]
[simple_fluid]
type = SimpleFluidProperties
[]
[]
[Materials]
[porosity_everywhere]
type = PorousFlowPorosityConst
porosity = 0.05
[]
[permeability_aquifers]
type = PorousFlowPermeabilityConst
block = 'top_aquifer bot_aquifer'
permeability = '1E-12 0 0 0 1E-12 0 0 0 1E-13'
[]
[permeability_aquitard]
type = PorousFlowPermeabilityConst
block = aquitard
permeability = '1E-16 0 0 0 1E-16 0 0 0 1E-17'
[]
[]
[UserObjects]
[steady_state_solution]
type = SolutionUserObject
execute_on = INITIAL
mesh = gold/ex02_steady_state_ex.e
timestep = LATEST
system_variables = pp
[]
[baseflow]
type = PorousFlowSumQuantity
[]
[abstraction]
type = PorousFlowSumQuantity
[]
[]
[Postprocessors]
[baseflow_kg]
type = PorousFlowPlotQuantity
uo = baseflow
outputs = 'none'
[]
[dt]
type = TimestepSize
outputs = 'none'
[]
[baseflow_l_per_m_per_day]
type = FunctionValuePostprocessor
function = baseflow_rate
indirect_dependencies = 'baseflow_kg dt'
[]
[abstraction_kg]
type = PorousFlowPlotQuantity
uo = abstraction
outputs = 'none'
[]
[abstraction_kg_per_day]
type = FunctionValuePostprocessor
function = abstraction_rate
indirect_dependencies = 'abstraction_kg dt'
[]
[]
[Preconditioning]
[smp]
type = SMP
full = true
# following 2 lines are not mandatory, but illustrate a popular preconditioner choice in groundwater models
petsc_options_iname = '-pc_type -sub_pc_type -pc_asm_overlap'
petsc_options_value = ' asm ilu 2 '
[]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 100
[TimeStepper]
type = FunctionDT
function = 'max(100, t)'
[]
end_time = 8.64E5 # 10 days
nl_abs_tol = 1E-11
[]
[Outputs]
print_linear_residuals = false
[ex]
type = Exodus
execute_on = final
[]
[csv]
type = CSV
[]
[]
(test/tests/functions/solution_function/solution_function_exodus_test.i)
# [Executioner]
# type = Steady
# petsc_options = '-snes'
# l_max_its = 800
# nl_rel_tol = 1e-10
# []
[Mesh]
type = FileMesh
file = cubesource.e
# This test uses SolutionUserObject which doesn't work with DistributedMesh.
parallel_type = replicated
[]
[Variables]
[./u]
order = FIRST
family = LAGRANGE
initial_condition = 0.0
[../]
[]
[AuxVariables]
# [./ne]
# order = FIRST
# family = LAGRANGE
# [../]
# [./ee]
# order = CONSTANT
# family = MONOMIAL
# [../]
[./nn]
order = FIRST
family = LAGRANGE
[../]
[./en]
order = CONSTANT
family = MONOMIAL
[../]
[]
[Functions]
# [./sourcee]
# type = SolutionFunction
# file_type = exodusII
# mesh = cubesource.e
# variable = source_element
# [../]
[./sourcen]
type = SolutionFunction
scale_factor = 2.0
solution = cube_soln
[../]
[]
[Kernels]
[./diff]
type = Diffusion
variable = u
[../]
[]
[AuxKernels]
# [./ne]
# type = FunctionAux
# variable = ne
# function = sourcee
# [../]
# [./ee]
# type = FunctionAux
# variable = ee
# function = sourcee
# [../]
[./nn]
type = FunctionAux
variable = nn
function = sourcen
[../]
[./en]
type = FunctionAux
variable = en
function = sourcen
[../]
[]
[BCs]
[./stuff]
type = DirichletBC
variable = u
boundary = '1 2'
value = 0.0
[../]
[]
[UserObjects]
[./cube_soln]
type = SolutionUserObject
timestep = 2
system_variables = source_nodal
mesh = cubesource.e
[../]
[]
[Executioner]
type = Transient
solve_type = 'NEWTON'
l_max_its = 800
nl_rel_tol = 1e-10
num_steps = 50
end_time = 5
dt = 0.5
[]
[Outputs]
execute_on = 'timestep_end'
exodus = true
[]
(test/tests/functions/solution_function/solution_function_exodus_interp_test.i)
[Mesh]
file = cubesource.e
# This test uses SolutionUserObject which doesn't work with DistributedMesh.
parallel_type = replicated
[]
[Variables]
[./u]
order = FIRST
family = LAGRANGE
initial_condition = 0.0
[../]
[]
[AuxVariables]
[./nn]
order = FIRST
family = LAGRANGE
[../]
# [./ne]
# order = FIRST
# family = LAGRANGE
# [../]
[./en]
order = CONSTANT
family = MONOMIAL
[../]
# [./ee]
# order = CONSTANT
# family = MONOMIAL
# [../]
[]
[Functions]
[./sourcen]
type = SolutionFunction
solution = cube_soln
[../]
# [./sourcee]
# type = SolutionFunction
# file_type = exodusII
# mesh = cubesource.e
# variable = source_element
# [../]
[]
[Kernels]
[./diff]
type = Diffusion
variable = u
[../]
[]
[AuxKernels]
[./nn]
type = FunctionAux
variable = nn
function = sourcen
[../]
# [./ne]
# type = FunctionAux
# variable = ne
# function = sourcee
# [../]
[./en]
type = FunctionAux
variable = en
function = sourcen
[../]
# [./ee]
# type = FunctionAux
# variable = ee
# function = sourcee
# [../]
[]
[BCs]
[./stuff]
type = DirichletBC
variable = u
boundary = '1 2'
value = 0.0
[../]
[]
[UserObjects]
[./cube_soln]
type = SolutionUserObject
mesh = cubesource.e
system_variables = source_nodal
[../]
[]
#[Executioner]
# type = Steady
# petsc_options = '-snes'
# l_max_its = 800
# nl_rel_tol = 1e-10
#[]
[Executioner]
type = Transient
solve_type = 'NEWTON'
l_max_its = 800
nl_rel_tol = 1e-10
num_steps = 50
end_time = 5
dt = 0.5
[]
[Outputs]
execute_on = 'timestep_end'
exodus = true
[]
(test/tests/functions/solution_function/solution_function_test.i)
[Mesh]
[./square]
type = GeneratedMeshGenerator
nx = 2
ny = 2
dim = 2
[../]
# This test uses SolutionUserObject which doesn't work with DistributedMesh.
parallel_type = replicated
[]
[Variables]
[./u]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = FunctionIC
function = initial_cond_func
[../]
[../]
[]
[AuxVariables]
[./u_aux]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = FunctionIC
function = initial_cond_func
[../]
[../]
[]
[Functions]
[./initial_cond_func]
type = SolutionFunction
solution = ex_soln
[../]
[]
[Kernels]
[./diff]
type = Diffusion
variable = u
[../]
[]
[BCs]
[./left]
type = DirichletBC
variable = u
boundary = 3
value = 0
[../]
[./right]
type = DirichletBC
variable = u
boundary = 1
value = 1
[../]
[]
[UserObjects]
[./ex_soln]
type = SolutionUserObject
system_variables = u
mesh = build_out_0001_mesh.xda
es = build_out_0001.xda
[../]
[]
[Executioner]
type = Steady
solve_type = 'PJFNK'
nl_rel_tol = 1e-10
[]
[Outputs]
file_base = out
exodus = true
[]
(test/tests/functions/solution_function/solution_function_rot3.i)
# checking rotation of points by 90 deg about z axis, then 45 deg about x axis in a SolutionUserObject
[Mesh]
# this is chosen so when i rotate through 45deg i get a length of "1" along the x or y or z direction
type = GeneratedMesh
dim = 3
xmin = -0.70710678
xmax = 0.70710678
nx = 3
ymin = -0.70710678
ymax = 0.70710678
ny = 3
zmin = -0.70710678
zmax = 0.70710678
nz = 3
[]
[UserObjects]
[./solution_uo]
type = SolutionUserObject
mesh = cube_with_u_equals_x.e
timestep = 1
system_variables = u
# the following takes:
# (0.7, 0.7, +/-0.7) -> (-0.7, 0.7, +/-0.7)
# (-0.7, 0.7, +/-0.7) -> (-0.7, -0.7, +/-0.7)
# (0.7, -0.7, +/-0.7) -> (0.7, 0.7, +/-0.7)
# (-0.7, -0.7, +/-0.7) -> (0.7, -0.7, +/-0.7)
rotation0_vector = '0 0 1'
rotation0_angle = 90
# then the following takes:
# (+/-0.7, 0.7, 0.7) -> (+/-0.7, 0, 1)
# (+/-0.7, 0.7, -0.7) -> (+/-0.7, 1, 0)
# (+/-0.7, -0.7, 0.7) -> (+/-0.7, -1, 0)
# (+/-0.7, -0.7, -0.7) -> (+/-0.7, 0, -1)
rotation1_vector = '1 0 0'
rotation1_angle = 45
# so, in total: a point y = +/-0.7 takes values from x = -/+0.7, so solution_function_rot3 should have u = -y
transformation_order = 'rotation0 rotation1'
[../]
[]
[Variables]
[./u]
order = FIRST
family = LAGRANGE
[../]
[]
[ICs]
[./u_init]
type = FunctionIC
variable = u
function = solution_fcn
[../]
[]
[Functions]
[./solution_fcn]
type = SolutionFunction
from_variable = u
solution = solution_uo
[../]
[]
[Kernels]
[./diff]
type = TimeDerivative
variable = u
[../]
[]
[Executioner]
type = Transient
solve_type = 'NEWTON'
l_max_its = 800
nl_rel_tol = 1e-10
num_steps = 1
end_time = 1
dt = 1
[]
[Outputs]
execute_on = 'timestep_end'
file_base = solution_function_rot3
exodus = true
[]