- componentAn integer corresponding to the direction in order parameter space this kernel acts in (e.g. for unrotated functionals 0 for q_x, 1 for q_y, 2 for q_z).
C++ Type:unsigned int
Controllable:No
Description:An integer corresponding to the direction in order parameter space this kernel acts in (e.g. for unrotated functionals 0 for q_x, 1 for q_y, 2 for q_z).
- mag_xThe x component of the constrained magnetic vector
C++ Type:std::vector<VariableName>
Controllable:No
Description:The x component of the constrained magnetic vector
- mag_yThe y component of the constrained magnetic vector
C++ Type:std::vector<VariableName>
Controllable:No
Description:The y component of the constrained magnetic vector
- mag_zThe z component of the constrained magnetic vector
C++ Type:std::vector<VariableName>
Controllable:No
Description:The z component of the constrained magnetic vector
- potential_H_intThe internal magnetic potential variable
C++ Type:std::vector<VariableName>
Controllable:No
Description:The internal magnetic potential variable
- 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
MasterInteractionCartLLG
Calculates the Rij contribution (due to energy -M*H), assuming H = - div*Phi.
Overview
We consider the residual and jacobian contributions due to the demagnetization field (can also be an externally applied field). The free energy density due to the Zeeman interaction is,
This yields an effective field of
The LLG equation for the normalized magnetization is,
(1)
with the gyromagnetic ratio. Multiplying by a test function , moving over the RHS, neglecting the time derivative, and integrating over the volume, we have,
This equation in index notation is,
with the Levi-Civita symbol. Inserting the expression for the effective field due to the exchange stiffness, we have
Therefore the residual for can be written as,
The on-diagonal and off-diagonal jacobian expression is,
and
where is the shape function of the finite element method.
Example Input File Syntax
Input Parameters
- Hscale1scaling factor for effective fields
Default:1
C++ Type:double
Controllable:No
Description:scaling factor for effective fields
- 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
- g01electron gyromagnetic factor
Default:1
C++ Type:double
Controllable:No
Description:electron gyromagnetic factor
- potential_H_extThe external magnetic potential variable
C++ Type:std::vector<VariableName>
Controllable:No
Description:The external magnetic potential variable
- 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/magnets/mag_brick.i)
[Mesh]
[./fmg]
type = FileMeshGenerator
file = exodus_dx2_x10_y10_z30_b100.e
[]
[central_interface]
type = SideSetsBetweenSubdomainsGenerator
input = fmg
master_block = '1'
paired_block = '2'
primary_block = '1'
new_boundary = '70'
[]
[]
[GlobalParams]
mag_x = mag_x
mag_y = mag_y
mag_z = mag_z
potential_H_int = potential_H_int
[]
[Materials]
[./constants]
type = GenericConstantMaterial
prop_names = ' alpha Ae Ms g0 mu0 nx ny nz '
prop_values = '0.01 0.013 1.2 221010.0 1256.64 0 1 1 '
[../]
[./a_long]
type = GenericFunctionMaterial
prop_names = 'alpha_long'
prop_values = 'bc_func_1'
[../]
[./aniso]
type = GenericConstantMaterial
prop_names = 'K1 K2'
prop_values = '20.0 0' # positive is unaxial
[../]
[./permitivitty_1]
type = GenericConstantMaterial
prop_names = 'permittivity' # dummy variable at the moment since we use the "electrostatics" kernel
prop_values = '1.0'
block = '1 2'
[../]
[]
[Functions]
###############################
## ##
## Define the function for ##
## alpha_long ##
## ##
## here is just a (large) ##
## constant ##
## ##
###############################
[./bc_func_1]
type = ParsedFunction
value = 'st'
vars = 'st'
vals = '1e3'
[../]
[]
[Variables]
[./mag_x]
order = FIRST
family = LAGRANGE
block = '1'
[./InitialCondition]
type = RandomConstrainedVectorFieldIC
phi = azimuth_phi
theta = polar_theta
M0s = 1.0 #amplitude of the RandomConstrainedVectorFieldIC
component = 0
[../]
[../]
[./mag_y]
order = FIRST
family = LAGRANGE
block = '1'
[./InitialCondition]
type = RandomConstrainedVectorFieldIC
phi = azimuth_phi
theta = polar_theta
M0s = 1.0
component = 1
[../]
[../]
[./mag_z]
order = FIRST
family = LAGRANGE
block = '1'
[./InitialCondition]
type = RandomConstrainedVectorFieldIC
phi = azimuth_phi
theta = polar_theta
M0s = 1.0
component = 2
[../]
[../]
[./potential_H_int]
order = FIRST
family = LAGRANGE
block = '1 2'
[../]
[]
[AuxVariables]
#--------------------------------------------#
# #
# field to seed IC that obeys constraint #
# #
#--------------------------------------------#
[./azimuth_phi]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = 0.3
max = 0.31
seed = 2
[../]
[../]
[./polar_theta]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = 1.4
max = 1.41
seed = 37
[../]
[../]
[./mag_s]
order = FIRST
family = LAGRANGE
block = '1'
[../]
[./H_x]
order = CONSTANT
family = MONOMIAL
block = '1 2'
[../]
[./H_y]
order = CONSTANT
family = MONOMIAL
block = '1 2'
[../]
[./H_z]
order = CONSTANT
family = MONOMIAL
block = '1 2'
[../]
[./azimuth_phi_mag_min1]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = 0.0
max = 0.00001
seed = 2
[../]
[../]
[./polar_theta_mag_min1]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = 0.0
max = 0.00001
seed = 37
[../]
[../]
[]
[AuxKernels]
#---------------------------------------#
# #
# compute magnitude of m #
# #
#---------------------------------------#
[./mag_mag]
type = VectorMag
variable = mag_s
vector_x = mag_x
vector_y = mag_y
vector_z = mag_z
block = '1'
execute_on = 'timestep_end final'
[../]
#---------------------------------------#
# #
# compute demag field grad*Phi #
# #
#---------------------------------------#
[./hxo]
type = DemagFieldAux
component = 0
variable = H_x
block = '1 2'
execute_on = 'timestep_end final'
[../]
[./hyo]
type = DemagFieldAux
component = 1
variable = H_y
block = '1 2'
execute_on = 'timestep_end final'
[../]
[./hzo]
type = DemagFieldAux
component = 2
variable = H_z
block = '1 2'
execute_on = 'timestep_end final'
[../]
[]
[Kernels]
#---------------------------------------#
# #
# Time dependence #
# #
#---------------------------------------#
[./mag_x_time]
type = TimeDerivative
variable = mag_x
block = '1'
[../]
[./mag_y_time]
type = TimeDerivative
variable = mag_y
block = '1'
[../]
[./mag_z_time]
type = TimeDerivative
variable = mag_z
block = '1'
[../]
#---------------------------------------#
# #
# Exchange stiffness #
# #
#---------------------------------------#
[./dllg_x_exch]
type = MasterExchangeCartLLG
variable = mag_x
component = 0
[../]
[./dllg_y_exch]
type = MasterExchangeCartLLG
variable = mag_y
component = 1
[../]
[./dllg_z_exch]
type = MasterExchangeCartLLG
variable = mag_z
component = 2
[../]
#---------------------------------------#
# #
# anisotropy #
# #
#---------------------------------------#
[./d_aM_x]
type = MasterAnisotropyCartLLG
variable = mag_x
component = 0
[../]
[./d_aM_y]
type = MasterAnisotropyCartLLG
variable = mag_y
component = 1
[../]
[./d_aM_z]
type = MasterAnisotropyCartLLG
variable = mag_z
component = 2
[../]
#---------------------------------------#
# #
# demagnetization field #
# #
#---------------------------------------#
[./d_HM_x]
type = MasterInteractionCartLLG
variable = mag_x
component = 0
[../]
[./d_HM_y]
type = MasterInteractionCartLLG
variable = mag_y
component = 1
[../]
[./d_HM_z]
type = MasterInteractionCartLLG
variable = mag_z
component = 2
[../]
#---------------------------------------#
# #
# Magnetostatic Poisson equation #
# #
#---------------------------------------#
[./int_pot_lap]
type = Electrostatics
variable = potential_H_int
block = '1 2'
[../]
[./int_bc_pot_lap]
type = MagHStrongCart
variable = potential_H_int
block = '1'
[../]
#---------------------------------------#
# #
# LLB constraint terms #
# #
#---------------------------------------#
[./llb_x]
type = MasterLongitudinalLLB
variable = mag_x
component = 0
mag_x = mag_x
mag_y = mag_y
mag_z = mag_z
[../]
[./llb_y]
type = MasterLongitudinalLLB
variable = mag_y
component = 1
mag_x = mag_x
mag_y = mag_y
mag_z = mag_z
[../]
[./llb_z]
type = MasterLongitudinalLLB
variable = mag_z
component = 2
mag_x = mag_x
mag_y = mag_y
mag_z = mag_z
[../]
[]
[BCs]
#---------------------------------------#
# #
# ground the magnetostatic potential #
# at boundaries of the bounding box #
# #
#---------------------------------------#
[./bc_int_pot_boundary]
type = DirichletBC
variable = potential_H_int
value = 0.0
boundary = '1 2 3 4 5 6'
[../]
#---------------------------------------#
# #
# enforce Neumann condition (m*n = 0) #
# at the boundary of the brick #
# #
# Note: I don't think this #
# does anything but we #
# leave it in regardless #
# #
#---------------------------------------#
[./bc_surface_mag_x]
type = NeumannBC
variable = mag_x
value = 0.0
boundary = '70'
[../]
[./bc_surface_mag_y]
type = NeumannBC
variable = mag_y
value = 0.0
boundary = '70'
[../]
[./bc_surface_mag_z]
type = NeumannBC
variable = mag_z
value = 0.0
boundary = '70'
[../]
[]
[Postprocessors]
#---------------------------------------#
# #
# track dt step size #
# #
#---------------------------------------#
[./dt]
type = TimestepSize
[../]
#---------------------------------------#
# #
# Average |M| and along other #
# directions #
# #
#---------------------------------------#
[./<M>]
type = ElementAverageValue
variable = mag_s
block = '1'
execute_on = 'initial timestep_end final'
[../]
[./<mx>]
type = ElementAverageValue
variable = mag_x
block = '1'
execute_on = 'initial timestep_end final'
[../]
[./<my>]
type = ElementAverageValue
variable = mag_y
block = '1'
execute_on = 'initial timestep_end final'
[../]
[./<mz>]
type = ElementAverageValue
variable = mag_z
block = '1'
execute_on = 'initial timestep_end final'
[../]
#---------------------------------------#
# #
# Calculate anisotropy energy of #
# the magnetic body #
# #
#---------------------------------------#
[./Fa]
type = MasterMagneticAnisotropyEnergy
execute_on = 'initial timestep_end final'
block = '1'
energy_scale = 6241.51 #converts results to eV
[../]
#---------------------------------------#
# #
# Calculate exchange energy of #
# the magnetic body #
# #
#---------------------------------------#
[./Fexch]
type = MasterMagneticExchangeEnergy
execute_on = 'timestep_end final'
block = '1'
energy_scale = 6241.51 #converts results to eV
[../]
#---------------------------------------#
# #
# Calculate demagnetization energy #
# of the magnetic body #
# #
#---------------------------------------#
[./Fdemag]
type = MagnetostaticEnergyCart
execute_on = 'timestep_end final'
block = '1'
energy_scale = 6241.51 #converts results to eV
[../]
#---------------------------------------#
# #
# Calculate excess energy from missed #
# LLB targets #
# #
#---------------------------------------#
[./Fllb]
type = MagneticExcessLLBEnergy
execute_on = 'timestep_end final'
block = '1'
mag_x = mag_x
mag_y = mag_y
mag_z = mag_z
[../]
#---------------------------------------#
# #
# add all the energy contributions #
# and calculate their percent change #
# #
#---------------------------------------#
[./Ftot]
type = LinearCombinationPostprocessor
pp_names = 'Fexch Fdemag Fa'
pp_coefs = ' 1.0 1.0 1.0'
execute_on = 'timestep_end final'
[../]
[./perc_change]
type = EnergyRatePostprocessor
postprocessor = Ftot
dt = dt
execute_on = 'timestep_end final'
[../]
[]
[UserObjects]
[./kill]
type = Terminator
expression = 'perc_change <= 1.0e-5'
[../]
[]
[Preconditioning]
#---------------------------------------#
# #
# Solver options #
# #
#---------------------------------------#
[./smp]
type = SMP
full = true
petsc_options_iname = ' -ksp_gmres_restart -snes_atol -snes_rtol -ksp_rtol -pc_type'
petsc_options_value = ' 121 1e-8 1e-8 1e-5 bjacobi'
[../]
[]
[Executioner]
type = Transient
solve_type = 'NEWTON'
[./TimeIntegrator]
type = ImplicitEuler
[../]
dtmin = 1e-12
dtmax = 1.0e-2 #10 ns
[./TimeStepper]
type = IterationAdaptiveDT
optimal_iterations = 10
linear_iteration_ratio = 100
dt = 1.0e-8 #10 fs
[../]
verbose = true
num_steps = 2
[]
[Outputs]
print_linear_residuals = false
[./out]
type = Exodus
file_base = out_mag_brick
elemental_as_nodal = true
interval = 1
[../]
[./outCSV]
type = CSV
file_base = out_mag_brick
[../]
[]
(test/tests/magnets/slab_PML_small.i)
[GlobalParams]
mag_x = mag_x
mag_y = mag_y
mag_z = mag_z
potential_H_int = potential_H_int
g0 = 1.0
Hscale = 0.004519239
mu0 = 1.256637e-06
y0pmlminus = -25
deltasyminus = 1.0e04
deltawyminus = 5
deltapyminus = 0.1
[]
alphadef = 0.02
[Mesh]
[./mesh]
type = GeneratedMeshGenerator
dim = 3
nx = 25
ny = 43
nz = 5
xmin = -50
xmax = 50
ymin = -35
ymax = 50
zmin = -10
zmax = 10
[../]
[./infinite_domain]
type = SubdomainBoundingBoxGenerator
input = mesh
bottom_left = '-50 -35 -10'
top_right = '50 50 10'
block_id = 3
block_name = infinite_domain
[../]
[./vacuum_box]
type = SubdomainBoundingBoxGenerator
input = infinite_domain
bottom_left = '-50 -25 -10'
top_right = '50 50 10'
block_id = 2
block_name = vacuum
[../]
[./boundary1]
type = SideSetsBetweenSubdomainsGenerator
input = vacuum_box
new_boundary = id_boundary
paired_block = vacuum
primary_block = 3 #mesh #infinite_domain
[../]
[./brick]
type = SubdomainBoundingBoxGenerator
input = boundary1 #vacuum_box
bottom_left = '-10 -10 -1.5'
top_right = '10 10 1.5'
block_id = 1
block_name = brick
[../]
[../]
[Materials]
############################################################################
##
## material constants used.
##
##
############################################################################
[./constants]
type = GenericConstantMaterial
prop_names = ' alpha permittivity Ae Ms'
prop_values = '${alphadef} 1.0 1.3e-05 1.2'
block = '1'
[../]
#NOTE: g0 is g*mu0*Ms/2 as defined by Hertel
#alpha is chosen to be 1.0 as in the muMag paper
[./a_long]
type = GenericFunctionMaterial
prop_names = 'alpha_long'
prop_values = 'bc_func_1'
block = '1'
[../]
[./constantsv]
type = GenericConstantMaterial
prop_names = ' permittivity'
prop_values = '1.0'
block = '3 2'
[../]
[]
[Functions]
##############################
##
## Define the ramping function
## expression to be used
##
##############################
[./bc_func_1]
type = ParsedFunction
value = 'st'
vars = 'st'
vals = '1.e1' #3?
[../]
[]
[Variables]
[./mag_x]
order = FIRST
family = LAGRANGE
block = '1'
[./InitialCondition]
type = RandomConstrainedVectorFieldIC
phi = azimuth_phi
theta = polar_theta
M0s = 1.0 #amplitude of the RandomConstrainedVectorFieldIC
component = 0
[../]
[../]
[./mag_y]
order = FIRST
family = LAGRANGE
block = '1'
[./InitialCondition]
type = RandomConstrainedVectorFieldIC
phi = azimuth_phi
theta = polar_theta
M0s = 1.0
component = 1
[../]
[../]
[./mag_z]
order = FIRST
family = LAGRANGE
block= '1'
[./InitialCondition]
type = RandomConstrainedVectorFieldIC
phi = azimuth_phi
theta = polar_theta
M0s = 1.0
component = 2
[../]
[../]
[./potential_H_int]
order = FIRST
family = LAGRANGE
block = '1 2'
[../]
[./phi2]
order = FIRST
family = LAGRANGE
block = 3
[../]
[]
[AuxVariables]
#--------------------------------------------#
# #
# field to seed IC that obeys constraint #
# #
#--------------------------------------------#
[./azimuth_phi]
order = FIRST
family = LAGRANGE
block = '1'
[./InitialCondition]
type = RandomIC
min = 1.5708
max = 1.5709
seed = 2
[../]
[../]
[./polar_theta]
order = FIRST
family = LAGRANGE
block = '1'
[./InitialCondition]
type = RandomIC
min = 1.5708
max = 1.5709
seed = 37
[../]
[../]
[./mag_s]
order = FIRST
family = LAGRANGE
block = '1'
[../]
[./H_y]
order = FIRST
family = MONOMIAL
block = '1 2'
[../]
[./H_y_v]
order = FIRST
family = MONOMIAL
block = '3'
[../]
[]
[AuxKernels]
[./mag_mag]
type = VectorMag
variable = mag_s
vector_x = mag_x
vector_y = mag_y
vector_z = mag_z
execute_on = 'initial timestep_end final'
block = '1'
[../]
[./Hy_brick]
type = DemagFieldAux
variable = H_y
component = 1
block = '1 2'
[../]
[./Hy_id]
type = DemagFieldAuxPML
phi1 = phi2
variable = H_y_v
component = 1
block = '3'
[../]
[]
[Kernels]
#---------------------------------------#
# #
# Time dependence #
# #
#---------------------------------------#
[./mag_x_time]
type = TimeDerivative
variable = mag_x
block = '1'
[../]
[./mag_y_time]
type = TimeDerivative
variable = mag_y
block = '1'
[../]
[./mag_z_time]
type = TimeDerivative
variable = mag_z
block = '1'
[../]
#---------------------------------------#
# #
# Local magnetic exchange #
# #
#---------------------------------------#
[./dllg_x_exch]
type = MasterExchangeCartLLG
variable = mag_x
component = 0
mag_x = mag_x
mag_y = mag_y
mag_z = mag_z
block = '1'
[../]
[./dllg_y_exch]
type = MasterExchangeCartLLG
variable = mag_y
component = 1
mag_x = mag_x
mag_y = mag_y
mag_z = mag_z
block = '1'
[../]
[./dllg_z_exch]
type = MasterExchangeCartLLG
variable = mag_z
component = 2
mag_x = mag_x
mag_y = mag_y
mag_z = mag_z
block = '1'
[../]
#---------------------------------------#
# #
# demagnetization field #
# #
#---------------------------------------#
[./d_HM_x]
type = MasterInteractionCartLLG
variable = mag_x
component = 0
block = '1'
[../]
[./d_HM_y]
type = MasterInteractionCartLLG
variable = mag_y
component = 1
block = '1'
[../]
[./d_HM_z]
type = MasterInteractionCartLLG
variable = mag_z
component = 2
block = '1'
[../]
#---------------------------------------#
# #
# LLB constraint terms #
# #
#---------------------------------------#
[./llb1_x]
type = MasterLongitudinalLLB
variable = mag_x
component = 0
block = '1'
[../]
[./llb1_y]
type = MasterLongitudinalLLB
variable = mag_y
component = 1
block = '1'
[../]
[./llb1_z]
type = MasterLongitudinalLLB
variable = mag_z
component = 2
block = '1'
[../]
#---------------------------------------#
# #
# Magnetostatic Poisson equation #
# #
#---------------------------------------#
[./int_pot_lap]
type = Electrostatics
variable = potential_H_int
block = '1 2'
[../]
[./int_bc_pot_lap]
type = MagHStrongCart
variable = potential_H_int
block = '1'
[../]
[./infinite_domain]
type = MagneticPMLCart
variable = phi2
component = 1
block = '3'
[../]
[]
[InterfaceKernels]
[./PML_boundary]
type = InterfaceEquality
variable = potential_H_int
boundary = id_boundary
neighbor_var = potential_H_int
permittivity_neighbor = 1.
[../]
[]
[BCs]
[./vacuum_box]
type = DirichletBC
variable = phi2
value = 0.
boundary = 'bottom'
[../]
[./other_boundaries]
type = DirichletBC
variable = potential_H_int
value = 0.
boundary = 'left right front back top '
[../]
[./boundarydirichlet]
type = CoupledDirichletBC
variable = phi2
coupled_var = potential_H_int
boundary = id_boundary
[]
[]
[Postprocessors]
[./dt]
type = TimestepSize
[../]
#---------------------------------------#
# #
# Average M = |m| #
# #
#---------------------------------------#
[./M1]
type = ElementAverageValue
variable = mag_s
execute_on = 'initial timestep_end final'
block = '1'
[../]
[./<mx>]
type = ElementAverageValue
variable = mag_x
execute_on = 'initial timestep_end final'
block = '1'
[../]
[./<my>]
type = ElementAverageValue
variable = mag_y
execute_on = 'initial timestep_end final'
block = '1'
[../]
[./<mz>]
type = ElementAverageValue
variable = mag_z
execute_on = 'initial timestep_end final'
block = '1'
[../]
#---------------------------------------#
# #
# Calculate exchange energy of #
# the magnetic body #
# #
#---------------------------------------#
[./Fexch]
type = MasterMagneticExchangeEnergy
energy_scale = 0.001 #converts results to eV
execute_on = 'initial timestep_end final'
block = '1'
[../]
#---------------------------------------#
# #
# Calculate demagnetization energy #
# of the magnetic body #
# #
#---------------------------------------#
[./Fdemag]
type = MagnetostaticEnergyCart
energy_scale = 0.001 #converts results to eV
execute_on = 'initial timestep_begin timestep_end final'
block = '1'
[../]
#---------------------------------------#
# #
# Calculate excess energy from missed #
# LLB targets #
# #
#---------------------------------------#
[./Fllb1]
type = MagneticExcessLLBEnergy
mag_x = mag_x
mag_y = mag_y
mag_z = mag_z
execute_on = 'initial timestep_end final'
block = '1'
[../]
#---------------------------------------#
# #
# add all the energy contributions #
# and calculate their percent change #
# #
#---------------------------------------#
[./Ftot]
type = LinearCombinationPostprocessor
pp_names = 'Fexch Fdemag'
pp_coefs = ' 1.0 1.0'
execute_on = 'initial timestep_end final'
[../]
[./perc_change]
type = EnergyRatePostprocessor
postprocessor = Ftot
dt = dt
execute_on = 'timestep_end final'
[../]
[]
[UserObjects]
[./kill]
type = Terminator
expression = 'perc_change <= 1.0e-8'
[../]
[]
[Preconditioning]
#---------------------------------------#
# #
# Solver options #
# #
#---------------------------------------#
[./smp]
type = SMP #FDP
# petsc_options_iname = ' -pc_type -mat_fd_coloring_err -mat_fd_type'
# petsc_options_value = 'lu 1.e-06 ds'
full = true
petsc_options_iname = ' -ksp_gmres_restart -snes_atol -snes_rtol -ksp_rtol -pc_type -sub_pc_type '
petsc_options_value = ' 100 1e-12 1e-9 1e-8 bjacobi ilu'
[../]
[]
[Executioner]
type = Transient
solve_type = 'NEWTON'
automatic_scaling = true
[./TimeIntegrator]
type = NewmarkBeta
[../]
dtmin = 1.e-5
dtmax = 1.e-3
end_time = 2
[./TimeStepper]
type = IterationAdaptiveDT
optimal_iterations = 25 #usually 10
linear_iteration_ratio = 100
dt = 1e-4
growth_factor = 1.1
cutback_factor = 0.75
[../]
num_steps = 2
[../]
[Outputs]
print_linear_residuals = false
[pgraph]
type = PerfGraphOutput
execute_on = final
level = 2
[]
[./out]
type = Exodus
file_base = slab_PML_small_25_002
elemental_as_nodal = true
interval = 1
execute_on = 'initial timestep_end'
[../]
[./outCSV]
type = CSV
file_base = slab_PML_small_25_002
interval = 1
[../]
[]
(tutorial/ringdown.i)
[GlobalParams]
mag_x = mag_x
mag_y = mag_y
mag_z = mag_z
potential_H_int = potential_H_int
g0 = 1.0
Hscale = 0.004519239
mu0 = 1.256637e-06
[]
alphadef = 0.02
[Mesh]
[./mesh]
type = GeneratedMeshGenerator
dim = 3
nx = 50
ny = 50
nz = 10
xmin = -50
xmax = 50
ymin = -50
ymax = 50
zmin = -10
zmax = 10
[../]
[./vacuum_box]
type = SubdomainBoundingBoxGenerator
input = mesh
bottom_left = '-50 -50 -10'
top_right = '50 50 10'
block_id = 2
block_name = vacuum
[../]
[./brick]
type = SubdomainBoundingBoxGenerator
input = vacuum_box
bottom_left = '-10 -10 -1.5'
top_right = '10 10 1.5'
block_id = 1
block_name = brick
[../]
[../]
[Materials]
############################################################################
##
## material constants used.
##
############################################################################
[./constants]
type = GenericConstantMaterial
prop_names = ' alpha permittivity Ae Ms'
prop_values = '${alphadef} 1.0 1.3e-05 1.2'
block = '1'
[../]
[./a_long]
type = GenericFunctionMaterial
prop_names = 'alpha_long'
prop_values = 'bc_func_1'
block = '1'
[../]
[./constantsv]
type = GenericConstantMaterial
prop_names = ' alpha permittivity Ae Ms'
prop_values = '1 1.0 1.3e-05 .0'
block = '2'
[../]
[./a_longv]
type = GenericFunctionMaterial
prop_names = 'alpha_long'
prop_values = 'bc_func_1'
block = '2'
[../]
[]
[Functions]
[./bc_func_1]
type = ParsedFunction
value = 'st'
vars = 'st'
vals = '1.e1' #3?
[../]
[]
[Variables]
[./mag_x]
order = FIRST
family = LAGRANGE
block = '1'
[./InitialCondition]
type = RandomConstrainedVectorFieldIC
phi = azimuth_phi
theta = polar_theta
M0s = 1.0 #amplitude of the RandomConstrainedVectorFieldIC
component = 0
[../]
[../]
[./mag_y]
order = FIRST
family = LAGRANGE
block = '1'
[./InitialCondition]
type = RandomConstrainedVectorFieldIC
phi = azimuth_phi
theta = polar_theta
M0s = 1.0
component = 1
[../]
[../]
[./mag_z]
order = FIRST
family = LAGRANGE
block= '1'
[./InitialCondition]
type = RandomConstrainedVectorFieldIC
phi = azimuth_phi
theta = polar_theta
M0s = 1.0
component = 2
[../]
[../]
[./potential_H_int]
order = FIRST
family = LAGRANGE
block = '1 2'
[../]
[]
[AuxVariables]
#--------------------------------------------#
# #
# field to seed IC that obeys constraint #
# #
#--------------------------------------------#
[./azimuth_phi]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = 0.
max = 0.01
seed = 2
[../]
[../]
[./polar_theta]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = 1.5708
max = 1.5709
seed = 37
[../]
[../]
[./mag_s]
order = FIRST
family = LAGRANGE
[../]
[]
[Kernels]
#---------------------------------------#
# #
# Time dependence #
# #
#---------------------------------------#
[./mag_x_time]
type = TimeDerivative
variable = mag_x
block = '1'
[../]
[./mag_y_time]
type = TimeDerivative
variable = mag_y
block = '1'
[../]
[./mag_z_time]
type = TimeDerivative
variable = mag_z
block = '1'
[../]
#---------------------------------------#
# #
# Local magnetic exchange #
# #
#---------------------------------------#
[./dllg_x_exch]
type = MasterExchangeCartLLG
variable = mag_x
component = 0
mag_x = mag_x
mag_y = mag_y
mag_z = mag_z
block = '1'
[../]
[./dllg_y_exch]
type = MasterExchangeCartLLG
variable = mag_y
component = 1
mag_x = mag_x
mag_y = mag_y
mag_z = mag_z
block = '1'
[../]
[./dllg_z_exch]
type = MasterExchangeCartLLG
variable = mag_z
component = 2
mag_x = mag_x
mag_y = mag_y
mag_z = mag_z
block = '1'
[../]
#---------------------------------------#
# #
# demagnetization field #
# #
#---------------------------------------#
[./d_HM_x]
type = MasterInteractionCartLLG
variable = mag_x
component = 0
block = '1'
[../]
[./d_HM_y]
type = MasterInteractionCartLLG
variable = mag_y
component = 1
block = '1'
[../]
[./d_HM_z]
type = MasterInteractionCartLLG
variable = mag_z
component = 2
block = '1'
[../]
#---------------------------------------#
# #
# LLB constraint terms #
# #
#---------------------------------------#
[./llb1_x]
type = MasterLongitudinalLLB
variable = mag_x
component = 0
block = '1'
[../]
[./llb1_y]
type = MasterLongitudinalLLB
variable = mag_y
component = 1
block = '1'
[../]
[./llb1_z]
type = MasterLongitudinalLLB
variable = mag_z
component = 2
block = '1'
[../]
#---------------------------------------#
# #
# Magnetostatic Poisson equation #
# #
#---------------------------------------#
[./int_pot_lap]
type = Electrostatics
variable = potential_H_int
block = '1 2'
[../]
[./int_bc_pot_lap]
type = MagHStrongCart
variable = potential_H_int
block = '1'
[../]
[]
[BCs]
[./vacuum_box]
type = DirichletBC
value = 0.
variable = potential_H_int
boundary = '0 1 2 3 4 5'
[../]
[]
[Postprocessors]
[./dt]
type = TimestepSize
[../]
#---------------------------------------#
# #
# Average M = |m| #
# #
#---------------------------------------#
[./M1]
type = ElementAverageValue
variable = mag_s
execute_on = 'initial timestep_end final'
block = '1'
[../]
[./<mx>]
type = ElementAverageValue
variable = mag_x
execute_on = 'initial timestep_end final'
block = '1'
[../]
[./<my>]
type = ElementAverageValue
variable = mag_y
execute_on = 'initial timestep_end final'
block = '1'
[../]
[./<mz>]
type = ElementAverageValue
variable = mag_z
execute_on = 'initial timestep_end final'
block = '1'
[../]
#---------------------------------------#
# #
# Calculate exchange energy of #
# the magnetic body #
# #
#---------------------------------------#
[./Fexch]
type = MasterMagneticExchangeEnergy
energy_scale = 0.001 #converts results to eV
execute_on = 'initial timestep_end final'
block = '1'
[../]
#---------------------------------------#
# #
# Calculate demagnetization energy #
# of the magnetic body #
# #
#---------------------------------------#
[./Fdemag]
type = MagnetostaticEnergyCart
energy_scale = 0.001 #converts results to eV
execute_on = 'initial timestep_end final'
block = '1'
[../]
#---------------------------------------#
# #
# Calculate excess energy from missed #
# LLB targets #
# #
#---------------------------------------#
[./Fllb1]
type = MagneticExcessLLBEnergy
mag_x = mag_x
mag_y = mag_y
mag_z = mag_z
execute_on = 'initial timestep_end final'
block = '1'
[../]
#---------------------------------------#
# #
# add all the energy contributions #
# and calculate their percent change #
# #
#---------------------------------------#
[./Ftot]
type = LinearCombinationPostprocessor
pp_names = 'Fexch Fdemag'
pp_coefs = ' 1.0 1.0'
execute_on = 'initial timestep_end final'
[../]
[./perc_change]
type = EnergyRatePostprocessor
postprocessor = Ftot
dt = dt
execute_on = 'timestep_end final'
[../]
[./elapsed]
type = PerfGraphData
section_name = "Root" # for profiling the problem
data_type = total
[../]
[]
[AuxKernels]
[./mag_mag]
type = VectorMag
variable = mag_s
vector_x = mag_x
vector_y = mag_y
vector_z = mag_z
execute_on = 'initial timestep_end final'
block = '1'
[../]
[]
[UserObjects]
[./kill]
type = Terminator
expression = 'perc_change <= 1.0e-6'
[../]
[]
[Preconditioning]
#---------------------------------------#
# #
# Solver options #
# #
#---------------------------------------#
[./smp]
type = SMP
full = true
petsc_options_iname = ' -ksp_gmres_restart -snes_atol -snes_rtol -ksp_rtol -pc_type '
petsc_options_value = ' 100 1e-12 1e-9 1e-8 bjacobi'
[../]
[]
[Executioner]
type = Transient
solve_type = 'NEWTON'
[./TimeIntegrator]
type = NewmarkBeta
[../]
dtmin = 1.e-4
dtmax = 5.e-3
end_time = 10.0
[./TimeStepper]
type = IterationAdaptiveDT
optimal_iterations = 25 #usually 10
linear_iteration_ratio = 100
dt = 1e-6
growth_factor = 1.1
cutback_factor = 0.75
[../]
num_steps = 12000
[../]
[Outputs]
print_linear_residuals = false
[./out]
type = Exodus
file_base = out_ringdown
elemental_as_nodal = true
interval = 10
[../]
[./outCSV]
type = CSV
file_base = out_ringdown
[../]
[]
(test/tests/magnets/Sstate_gen-Py_OOMF.i)
##############################
##
## UNITS:
##
## gamma = (2.2101*10^5 / 2 pi) m/C
##
## gamma/(mu*0Ms) = 48291.9 nm*mus/pg
##
## coefficients given in (pg/nm*mus)
## which is equivalent to an energy/vol
##
## Effective fields are 1/(mu0*Ms)*coeff
## which gives units of aC/(nm*mus)
##
## Energies are natively printed in units
## of 0.160218 pg nm^2 / mus^2
## or 1.60218*10^{-22} J
## or 0.001 eV
##
##############################
Nx = 100
Ny = 25
Nz = 3
#
xMin = 0.0
yMin = 0.0
zMin = 1.5
xMax = 500.0
yMax = 125.0
zMax = 3.0
alphadef = 1.0
#
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 3
nx = ${Nx}
ny = ${Ny}
nz = ${Nz}
xmin = ${xMin}
xmax = ${xMax}
ymin = ${yMin}
ymax = ${yMax}
zmin = ${zMin}
zmax = ${zMax}
elem_type = HEX8
[]
[]
#
[UserObjects]
[./kill]
type = Terminator
expression = 'perc_change <= 1.0e-8'
[../]
[./reader_nearest]
type = PropertyReadFile
prop_file_name = 'fulldata_state.csv'
read_type = 'voronoi'
nprop = 6 # number of columns in CSV
nblock = 1
nvoronoi = 7500
#use_random_voronoi = true
[../]
[]
#
[GlobalParams]
mag_x = mag_x
mag_y = mag_y
mag_z = mag_z
potential_H_int = potential_H_int
mu0 = 1.0
Hscale = 1.0
g0 = 17680.8
[]
[Materials]
############################################################################
##
## material constants used.
##
##
############################################################################
[./constants]
type = GenericConstantMaterial
prop_names = ' alpha g0mu0Ms permittivity Ae Ms '
prop_values = '${alphadef} 34989.1 1.0 13.0 1.0 '
[../]
#NOTE: g0 is g*mu0*Ms/2 as defined by Hertel
#alpha is chosen to be 1.0 as in the muMag paper
[./a_long]
type = GenericFunctionMaterial
prop_names = 'alpha_long'
prop_values = 'bc_func_1'
[../]
[]
[Functions]
##############################
##
## Define the ramping function
## expression to be used
##
##############################
[./bc_func_1]
type = ParsedFunction
value = 'st'
vars = 'st'
vals = '1e1' #3?
[../]
[./node_mx]
type = PiecewiseConstantFromCSV
read_prop_user_object = 'reader_nearest'
read_type = 'voronoi'
column_number = '3'
[../]
[./node_my]
type = PiecewiseConstantFromCSV
read_prop_user_object = 'reader_nearest'
read_type = 'voronoi'
column_number = '4'
[../]
[./node_mz]
type = PiecewiseConstantFromCSV
read_prop_user_object = 'reader_nearest'
read_type = 'voronoi'
column_number = '5'
[../]
[]
#
[Variables]
[./mag_x]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = FunctionIC
function = node_mx
[../]
[../]
[./mag_y]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = FunctionIC
function = node_my
[../]
[../]
[./mag_z]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = FunctionIC
function = node_mz
[../]
[../]
[./potential_H_int]
order = FIRST
family = LAGRANGE
[../]
[]
[AuxVariables]
#--------------------------------------------#
# #
# field to seed IC that obeys constraint #
# #
#--------------------------------------------#
[./azimuth_phi]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = 0.234979
max = 0.244979
seed = 2
[../]
[../]
[./polar_theta]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = 1.46742
max = 1.47742
seed = 37
[../]
[../]
[./mag_s]
order = FIRST
family = LAGRANGE
[../]
[./H_x]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = ConstantIC
value = 1.0
[../]
[../]
[./H_y]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = ConstantIC
value = 1.0
[../]
[../]
[./H_z]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = ConstantIC
value = 1.0
[../]
[../]
[]
[AuxKernels]
[./mag_mag]
type = VectorMag
variable = mag_s
vector_x = mag_x
vector_y = mag_y
vector_z = mag_z
execute_on = 'initial timestep_end final'
[../]
[]
[Kernels]
#---------------------------------------#
# #
# Time dependence #
# #
#---------------------------------------#
[./mag_x_time]
type = TimeDerivative
variable = mag_x
[../]
[./mag_y_time]
type = TimeDerivative
variable = mag_y
[../]
[./mag_z_time]
type = TimeDerivative
variable = mag_z
[../]
#---------------------------------------#
# #
# Local magnetic exchange #
# #
#---------------------------------------#
[./dllg_x_exch]
type = MasterExchangeCartLLG
variable = mag_x
component = 0
[../]
[./dllg_y_exch]
type = MasterExchangeCartLLG
variable = mag_y
component = 1
[../]
[./dllg_z_exch]
type = MasterExchangeCartLLG
variable = mag_z
component = 2
[../]
#---------------------------------------#
# #
# demagnetization field #
# #
#---------------------------------------#
[./d_HM_x]
type = MasterInteractionCartLLG
variable = mag_x
component = 0
[../]
[./d_HM_y]
type = MasterInteractionCartLLG
variable = mag_y
component = 1
[../]
[./d_HM_z]
type = MasterInteractionCartLLG
variable = mag_z
component = 2
[../]
#---------------------------------------#
# #
# LLB constraint terms #
# #
#---------------------------------------#
[./llb1_x]
type = LongitudinalLLB
variable = mag_x
component = 0
[../]
[./llb1_y]
type = LongitudinalLLB
variable = mag_y
component = 1
[../]
[./llb1_z]
type = LongitudinalLLB
variable = mag_z
component = 2
[../]
#---------------------------------------#
# #
# Magnetostatic Poisson equation #
# #
#---------------------------------------#
[./int_pot_lap]
type = Electrostatics
variable = potential_H_int
[../]
[./int_bc_pot_lap]
type = MagHStrongCart
variable = potential_H_int
[../]
[]
[BCs]
[]
[Postprocessors]
[./dt]
type = TimestepSize
[../]
#---------------------------------------#
# #
# Average M = |m| #
# #
#---------------------------------------#
[./M1]
type = ElementAverageValue
variable = mag_s
execute_on = 'initial timestep_end final'
[../]
[./<mx>]
type = ElementAverageValue
variable = mag_x
execute_on = 'initial timestep_end final'
[../]
[./<my>]
type = ElementAverageValue
variable = mag_y
execute_on = 'initial timestep_end final'
[../]
[./<mz>]
type = ElementAverageValue
variable = mag_z
execute_on = 'initial timestep_end final'
[../]
#---------------------------------------#
# #
# Calculate exchange energy of #
# the magnetic body #
# #
#---------------------------------------#
[./Fexch]
type = MasterMagneticExchangeEnergy
energy_scale = 0.001 #converts results to eV
execute_on = 'initial timestep_end final'
[../]
#---------------------------------------#
# #
# Calculate demagnetization energy #
# of the magnetic body #
# #
#---------------------------------------#
[./Fdemag]
type = MagnetostaticEnergyCart
energy_scale = 0.001 #converts results to eV
execute_on = 'initial timestep_end final'
[../]
#---------------------------------------#
# #
# Calculate excess energy from missed #
# LLB targets #
# #
#---------------------------------------#
[./Fllb1]
type = MagneticExcessLLBEnergy
mag_x = mag_x
mag_y = mag_y
mag_z = mag_z
execute_on = 'initial timestep_end final'
[../]
#---------------------------------------#
# #
# add all the energy contributions #
# and calculate their percent change #
# #
#---------------------------------------#
[./Ftot]
type = LinearCombinationPostprocessor
pp_names = 'Fexch Fdemag'
pp_coefs = ' 1.0 1.0'
execute_on = 'initial timestep_end final'
[../]
[./perc_change]
type = EnergyRatePostprocessor
postprocessor = Ftot
dt = dt
execute_on = 'timestep_end final'
[../]
[]
[Preconditioning]
#---------------------------------------#
# #
# Solver options #
# #
#---------------------------------------#
[./smp]
type = SMP
full = true
petsc_options_iname = ' -ksp_gmres_restart -snes_atol -snes_rtol -ksp_rtol -pc_type '
petsc_options_value = ' 526 1e-5 1e-3 1e-6 bjacobi'
[../]
[]
#
[Executioner]
type = Transient
solve_type = 'NEWTON'
[./TimeIntegrator]
type = NewmarkBeta
[../]
dtmin = 1e-18
dtmax = 1.0
[./TimeStepper]
type = IterationAdaptiveDT
optimal_iterations = 38 #usually 10
linear_iteration_ratio = 1000
dt = 1e-8
growth_factor = 1.1
[../]
num_steps = 2
[]
[Outputs]
print_linear_residuals = false
[./out]
type = Exodus
file_base = out_Sstate_gen-Py_111_OOMF
elemental_as_nodal = true
interval = 1
[../]
[./outCSV]
type = CSV
file_base = out_Sstate_gen-Py_111_OOMF
[../]
[]
(test/tests/magnets/ringdown.i)
##############################
##
## UNITS:
##
## gamma = (2.2101*10^5 ) m/C
##
## NOTE:
## gamma*Hscale = 1/ns
##
## coefficients given in (pg/nm*ns)
## which is equivalent to an energy/vol
##
## Effective fields are 1/(mu0*Ms)*coeff
## which gives units of aC/(nm*mus)
##
## Energies are natively printed in units
## of 0.160218 pg nm^2 / mus^2
## or 1.60218*10^{-22} J
## or 0.001 eV
##
##############################
################
#
# LLG alpha:
#
################
alphadef = 0.02
[Mesh]
[./mesh]
type = GeneratedMeshGenerator
dim = 3
nx = 50
ny = 50
nz = 10
xmin = -50
xmax = 50
ymin = -50
ymax = 50
zmin = -10
zmax = 10
[../]
[./vacuum_box]
type = SubdomainBoundingBoxGenerator
input = mesh
bottom_left = '-50 -50 -10'
top_right = '50 50 10'
block_id = 2
block_name = vacuum
[../]
[./brick]
type = SubdomainBoundingBoxGenerator
input = vacuum_box
bottom_left = '-10 -10 -1.5'
top_right = '10 10 1.5'
block_id = 1
block_name = brick
[../]
[../]
[GlobalParams]
mag_x = mag_x
mag_y = mag_y
mag_z = mag_z
potential_H_int = potential_H_int
Hscale = 0.004519239
g0 = 1.0
mu0 = 1.256637e-06
[]
[Materials]
############################################################################
##
## material constants used.
##
############################################################################
[./constants]
type = GenericConstantMaterial
prop_names = ' alpha Ae Ms permittivity'
prop_values = '${alphadef} 1.3e-05 1.2 1.'
block = '1'
[../]
[./a_long]
type = GenericFunctionMaterial
prop_names = 'alpha_long'
prop_values = 'bc_func_1'
block = '1'
[../]
[./constantsv]
type = GenericConstantMaterial
prop_names = ' alpha Ae Ms permittivity'
prop_values = '1 1.e-05 0. 1. '
block = '2'
[../]
[./a_longv]
type = GenericFunctionMaterial
prop_names = 'alpha_long'
prop_values = 'bc_func_1'
block = '2'
[../]
[]
[Functions]
##############################
##
## Define the ramping function
## expression to be used
##
##############################
[./bc_func_1]
type = ParsedFunction
value = 'st'
vars = 'st'
vals = '1.e3' #3?
[../]
[]
[Variables]
[./mag_x]
order = FIRST
family = LAGRANGE
block = '1'
[./InitialCondition]
type = RandomConstrainedVectorFieldIC
phi = azimuth_phi
theta = polar_theta
M0s = 1.0 #amplitude of the RandomConstrainedVectorFieldIC
component = 0
[../]
[../]
[./mag_y]
order = FIRST
family = LAGRANGE
block = '1'
[./InitialCondition]
type = RandomConstrainedVectorFieldIC
phi = azimuth_phi
theta = polar_theta
M0s = 1.0 #amplitude of the RandomConstrainedVectorFieldIC
component = 1
[../]
[../]
[./mag_z]
order = FIRST
family = LAGRANGE
block= '1'
[./InitialCondition]
type = RandomConstrainedVectorFieldIC
phi = azimuth_phi
theta = polar_theta
M0s = 1.0 #amplitude of the RandomConstrainedVectorFieldIC
component = 2
[../]
[../]
[./potential_H_int]
order = FIRST
family = LAGRANGE
block = '1 2'
[../]
[]
[AuxVariables]
#--------------------------------------------#
# #
# field to seed IC that obeys constraint #
# #
#--------------------------------------------#
[./azimuth_phi]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = 0.
max = 0.01
seed = 2
[../]
[../]
[./polar_theta]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = 1.5708
max = 1.5709
seed = 37
[../]
[../]
[./mag_s]
order = FIRST
family = LAGRANGE
[../]
[./H_x]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = ConstantIC
value = 1.0
[../]
[../]
[./H_y]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = ConstantIC
value = 1.0
[../]
[../]
[./H_z]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = ConstantIC
value = 1.0
[../]
[../]
[]
[AuxKernels]
[./mag_mag]
type = VectorMag
variable = mag_s
vector_x = mag_x
vector_y = mag_y
vector_z = mag_z
execute_on = 'initial timestep_end final'
block = '1'
[../]
[]
[Kernels]
#---------------------------------------#
# #
# Time dependence #
# #
#---------------------------------------#
[./mag_x_time]
type = TimeDerivative
variable = mag_x
block = '1'
[../]
[./mag_y_time]
type = TimeDerivative
variable = mag_y
block = '1'
[../]
[./mag_z_time]
type = TimeDerivative
variable = mag_z
block = '1'
[../]
#---------------------------------------#
# #
# Local magnetic exchange #
# #
#---------------------------------------#
[./dllg_x_exch]
type = MasterExchangeCartLLG
variable = mag_x
component = 0
block = '1'
[../]
[./dllg_y_exch]
type = MasterExchangeCartLLG
variable = mag_y
component = 1
block = '1'
[../]
[./dllg_z_exch]
type = MasterExchangeCartLLG
variable = mag_z
component = 2
block = '1'
[../]
#---------------------------------------#
# #
# demagnetization field #
# #
#---------------------------------------#
[./d_HM_x]
type = MasterInteractionCartLLG
variable = mag_x
component = 0
block = '1'
[../]
[./d_HM_y]
type = MasterInteractionCartLLG
variable = mag_y
component = 1
block = '1'
[../]
[./d_HM_z]
type = MasterInteractionCartLLG
variable = mag_z
component = 2
block = '1'
[../]
#---------------------------------------#
# #
# LLB constraint terms #
# #
#---------------------------------------#
# [./llb1_x]
# type = MasterLongitudinalLLB
# variable = mag_x
# component = 0
# block = '1'
# [../]
# [./llb1_y]
# type = MasterLongitudinalLLB
# variable = mag_y
# component = 1
# block = '1'
# [../]
#
# [./llb1_z]
# type = MasterLongitudinalLLB
# variable = mag_z
# component = 2
# block = '1'
# [../]
#---------------------------------------#
# #
# Magnetostatic Poisson equation #
# #
#---------------------------------------#
[./int_pot_lap]
type = Electrostatics
variable = potential_H_int
block = '1 2'
[../]
[./int_bc_pot_lap]
type = MagHStrongCart
variable = potential_H_int
block = '1'
[../]
[]
[BCs]
[./vacuum_box]
type = DirichletBC
value = 0.
variable = potential_H_int
boundary = '0 1 2 3 4 5'
[../]
[]
[Postprocessors]
[./dt]
type = TimestepSize
[../]
#---------------------------------------#
# #
# Average M = |m| #
# #
#---------------------------------------#
[./M1]
type = ElementAverageValue
variable = mag_s
execute_on = 'initial timestep_end final'
block = '1'
[../]
[./<mx>]
type = ElementAverageValue
variable = mag_x
execute_on = 'initial timestep_end final'
block = '1'
[../]
[./<my>]
type = ElementAverageValue
variable = mag_y
execute_on = 'initial timestep_end final'
block = '1'
[../]
[./<mz>]
type = ElementAverageValue
variable = mag_z
execute_on = 'initial timestep_end final'
block = '1'
[../]
#---------------------------------------#
# #
# Calculate exchange energy of #
# the magnetic body #
# #
#---------------------------------------#
[./Fexch]
type = MasterMagneticExchangeEnergy
energy_scale = 1. #converts results to eV
execute_on = 'initial timestep_end final'
block = '1'
[../]
#---------------------------------------#
# #
# Calculate demagnetization energy #
# of the magnetic body #
# #
#---------------------------------------#
[./Fdemag]
type = MagnetostaticEnergyCart
energy_scale = 1. #converts results to eV
execute_on = 'initial timestep_end final'
block = '1'
[../]
#---------------------------------------#
# #
# Calculate excess energy from missed #
# LLB targets #
# #
#---------------------------------------#
[./Fllb1]
type = MagneticExcessLLBEnergy
mag_x = mag_x
mag_y = mag_y
mag_z = mag_z
execute_on = 'initial timestep_end final'
block = '1'
[../]
#---------------------------------------#
# #
# add all the energy contributions #
# and calculate their percent change #
# #
#---------------------------------------#
[./Ftot]
type = LinearCombinationPostprocessor
pp_names = 'Fexch Fdemag'
pp_coefs = ' 1.0 1.0'
execute_on = 'initial timestep_end final'
[../]
[./perc_change]
type = EnergyRatePostprocessor
postprocessor = Ftot
dt = dt
execute_on = 'timestep_end final'
[../]
[]
[UserObjects]
[./kill]
type = Terminator
expression = 'perc_change <= 1.0e-8'
[../]
[mag]
type = RenormalizeVector
v = 'mag_x mag_y mag_z'
norm = 1
execute_on = 'TIMESTEP_END'
# force_praux = true
[]
[]
[Preconditioning]
active = smp
[./muPBP]
type = PBP
solve_order = 'mag_x mag_y mag_z potential_H_int'
preconditioner = 'AMG ILU'
off_diag_row = 'mag_x mag_y mag_z'
off_diag_column = 'mag_x mag_y mag_z'
[../]
[./muFSP]
type = FSP
topsplit = 'magpot'
[./magpot]
splitting = 'mag pot'
splitting_type = additive
[../]
[./mag]
vars = 'mag_x mag_y mag_z'
petsc_options_iname = ' -ksp_gmres_restart -snes_atol -snes_rtol -ksp_rtol -pc_type -pc_sub_type '
petsc_options_value = ' 40 1e-20 1e-6 1e-6 bjacobi ilu'
[../]
[./pot]
vars = potential_H_int
petsc_options_iname = ' -ksp_gmres_restart -snes_atol -snes_rtol -ksp_rtol -pc_type -pc_sub_type '
petsc_options_value = ' 40 1e-12 1e-6 1e-6 bjacobi ilu'
[../]
[../]
#---------------------------------------#
# #
# Solver options #
# #
#---------------------------------------#
[./smp]
type = SMP
full = true
petsc_options_iname = ' -ksp_gmres_restart -snes_atol -snes_rtol -ksp_rtol -pc_type'
petsc_options_value = ' 40 1e-8 1e-8 1e-4 bjacobi'
[../]
[]
[Executioner]
type = Transient
solve_type = 'NEWTON'
# num_grids = 8
[./TimeIntegrator]
type = NewmarkBeta #LStableDirk4 #NewmarkBeta
[../]
dtmin = 1.e-5
dtmax = 2.e-3
end_time = 5.
automatic_scaling = true
[./TimeStepper]
type = IterationAdaptiveDT
optimal_iterations = 15 #usually 10
iteration_window = 2
linear_iteration_ratio = 1000
dt = 1.e-4
growth_factor = 1.1
cutback_factor = 0.75
[../]
num_steps = 20
[../]
[Outputs]
print_linear_residuals = false
[./out]
type = Exodus
file_base = ringdown
elemental_as_nodal = true
interval = 10
[../]
[./outCSV]
type = CSV
file_base = ringdown
[../]
[]