- applied_stress_tensorVector of values defining the constant applied stress to add, in order 11, 22, 33, 23, 13, 12
C++ Type:std::vector<Real>
Unit:(no unit assumed)
Controllable:No
Description:Vector of values defining the constant applied stress to add, in order 11, 22, 33, 23, 13, 12
- base_nameMaterial properties base name
C++ Type:std::string
Controllable:No
Description:Material properties base name
- 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 name of the displacement variables
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:The name of the displacement variables
- polar_xThe x component of the polarization
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:The x component of the polarization
- polar_yThe y component of the polarization
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:The y component of the polarization
- polar_zThe z component of the polarization
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:The z component of the polarization
GlobalATiO3MaterialRVEUserObject
Global Strain UserObject to provide Residual and diagonal Jacobian entry
Overview
Computes the necessary eigenstress needed for the GlobalStrain system which performs the calculation,
over the computational volume . For a conventional ferroelectric material (i.e. where A is a cation such as Pb or Ba), the eigenstrain that is generated via the electrostrictive coupling is,
where and are components of the polarization vector . The quantites is the components of the electrostrictive tensor of rank four. Therefore the eigenstress is,
The total stress is calculated via,
More details of this approach are provided in Biswas et al. (2020).
Example Input File Syntax
Input Parameters
- allow_duplicate_execution_on_initialFalseIn the case where this UserObject is depended upon by an initial condition, allow it to be executed twice during the initial setup (once before the IC and again after mesh adaptivity (if applicable).
Default:False
C++ Type:bool
Controllable:No
Description:In the case where this UserObject is depended upon by an initial condition, allow it to be executed twice during the initial setup (once before the IC and again after mesh adaptivity (if applicable).
- execute_onLINEARThe list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html.
Default:LINEAR
C++ Type:ExecFlagEnum
Options:XFEM_MARK, NONE, INITIAL, LINEAR, LINEAR_CONVERGENCE, NONLINEAR, NONLINEAR_CONVERGENCE, POSTCHECK, TIMESTEP_END, TIMESTEP_BEGIN, MULTIAPP_FIXED_POINT_END, MULTIAPP_FIXED_POINT_BEGIN, MULTIAPP_FIXED_POINT_CONVERGENCE, MULTISYSTEM_FIXED_POINT_ITERATION_END, FINAL, CUSTOM, TRANSFER
Controllable:No
Description:The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html.
- execution_order_group0Execution order groups are executed in increasing order (e.g., the lowest number is executed first). Note that negative group numbers may be used to execute groups before the default (0) group. Please refer to the user object documentation for ordering of user object execution within a group.
Default:0
C++ Type:int
Controllable:No
Description:Execution order groups are executed in increasing order (e.g., the lowest number is executed first). Note that negative group numbers may be used to execute groups before the default (0) group. Please refer to the user object documentation for ordering of user object execution within a group.
- force_postauxFalseForces the UserObject to be executed in POSTAUX
Default:False
C++ Type:bool
Controllable:No
Description:Forces the UserObject to be executed in POSTAUX
- force_preauxFalseForces the UserObject to be executed in PREAUX
Default:False
C++ Type:bool
Controllable:No
Description:Forces the UserObject to be executed in PREAUX
- force_preicFalseForces the UserObject to be executed in PREIC during initial setup
Default:False
C++ Type:bool
Controllable:No
Description:Forces the UserObject to be executed in PREIC during initial setup
Execution Scheduling Parameters
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
Controllable:No
Description:Adds user-defined labels for accessing object parameters via control logic.
- enableTrueSet the enabled status of the MooseObject.
Default:True
C++ Type:bool
Controllable:Yes
Description:Set the enabled status of the MooseObject.
- implicitTrueDetermines whether this object is calculated using an implicit or explicit form
Default:True
C++ Type:bool
Controllable:No
Description:Determines whether this object is calculated using an implicit or explicit form
- seed0The seed for the master random number generator
Default:0
C++ Type:unsigned int
Controllable:No
Description:The seed for the master random number generator
- use_displaced_meshFalseWhether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Default:False
C++ Type:bool
Controllable:No
Description:Whether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Advanced Parameters
- 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
Unit:(no unit assumed)
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.
- use_interpolated_stateFalseFor the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
Default:False
C++ Type:bool
Controllable:No
Description:For the old and older state use projected material properties interpolated at the quadrature points. To set up projection use the ProjectedStatefulMaterialStorageAction.
Material Property Retrieval Parameters
Input Files
References
- Sudipta Biswas, Daniel Schwen, and Jason D. Hales.
Development of a finite element based strain periodicity implementation method.
Finite Elements Anal. Design, 179:103436, 2020.[Export]
BibTeX
@article{Biswas2020, author = "Biswas, Sudipta and Schwen, Daniel and Hales, Jason D.", title = "{Development of a finite element based strain periodicity implementation method}", journal = "Finite Elements Anal. Design", volume = "179", pages = "103436", year = "2020", publisher = "Elsevier" }RIS
TY - JOUR AU - Biswas, Sudipta AU - Schwen, Daniel AU - Hales, Jason D. TI - Development of a finite element based strain periodicity implementation method JO - Finite Elements Anal. Design PY - 2020 VL - 179 PB - Elsevier SP - 103436 ER -Plain Text
Sudipta Biswas, Daniel Schwen, and Jason D. Hales. Development of a finite element based strain periodicity implementation method. Finite Elements Anal. Design, 179:103436, 2020.
(test/tests/auxkernels/surface_charge.i)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 3
nx = 4
ny = 4
nz = 8
xmin = -1.0
xmax = 1.0
ymin = -1.0
ymax = 1.0
zmin = -2.0
zmax = 2.0
elem_type = HEX8
[]
[./cnode]
input = gen
type = ExtraNodesetGenerator
coord = '-1.0 -1.0 -2.0'
new_boundary = 100
[../]
[subdomains]
type = SubdomainBoundingBoxGenerator
input = cnode
bottom_left = '-1.0 -1.0 -2.0'
block_id = 1
top_right = '1.0 1.0 0'
location = INSIDE
[]
[film_interface]
type = SideSetsBetweenSubdomainsGenerator
input = subdomains
primary_block = 0
paired_block = 1
new_boundary = 52
[]
[film_surface]
type = SideSetsFromNormalsGenerator
input = film_interface
normals = '0 0 1'
fixed_normal = true
new_boundary = '107'
[]
[substrate_bottom]
type = SideSetsFromNormalsGenerator
input = film_surface
normals = '0 0 -1'
fixed_normal = true
new_boundary = '108'
[]
[]
[GlobalParams]
len_scale = 1.0
polar_x = polar_x
polar_y = polar_y
polar_z = polar_z
potential_E_int = potential_E_int
displacements = 'u_x u_y u_z'
[]
[Variables]
[./global_strain]
order = SIXTH
family = SCALAR
[../]
[./polar_x]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = -1e-2
max = 1e-2
[../]
block = '0'
[../]
[./polar_y]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = -1e-2
max = 1e-2
[../]
block = '0'
[../]
[./polar_z]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = -1e-2
max = 1e-2
[../]
block = '0'
[../]
[./potential_E_int]
order = FIRST
family = LAGRANGE
block = '0 1'
[../]
[./u_x]
order = FIRST
family = LAGRANGE
block = '0 1'
[../]
[./u_y]
order = FIRST
family = LAGRANGE
block = '0 1'
[../]
[./u_z]
order = FIRST
family = LAGRANGE
block = '0 1'
[../]
[]
[AuxVariables]
[./disp_x]
block = '0 1'
[../]
[./disp_y]
block = '0 1'
[../]
[./disp_z]
block = '0 1'
[../]
[./e00]
order = CONSTANT
family = MONOMIAL
[../]
[./e01]
order = CONSTANT
family = MONOMIAL
[../]
[./e10]
order = CONSTANT
family = MONOMIAL
[../]
[./e11]
order = CONSTANT
family = MONOMIAL
[../]
[./e12]
order = CONSTANT
family = MONOMIAL
[../]
[./e22]
order = CONSTANT
family = MONOMIAL
[../]
[./s00]
order = CONSTANT
family = MONOMIAL
[../]
[./s01]
order = CONSTANT
family = MONOMIAL
[../]
[./s10]
order = CONSTANT
family = MONOMIAL
[../]
[./s11]
order = CONSTANT
family = MONOMIAL
[../]
[./s12]
order = CONSTANT
family = MONOMIAL
[../]
[./s22]
order = CONSTANT
family = MONOMIAL
[../]
[./divP]
order = CONSTANT
family = MONOMIAL
block = '0'
[../]
[./surfP]
order = CONSTANT
family = MONOMIAL
[../]
## P.n on the film/substrate interface (52), the remaining piece of
## the closed surface of block 0. It needs its OWN variable: a face
## value is written into the element dof, so two boundaries sharing
## an element cannot share a CONSTANT MONOMIAL variable.
[./surfP_52]
order = CONSTANT
family = MONOMIAL
block = '0'
## This variable exists only to feed the divergence-theorem assertion
## in [UserObjects], so keep it out of the Exodus file. That makes the
## whole check strictly additive and leaves the gold untouched.
outputs = none
[../]
[]
[AuxKernels]
[./disp_x]
type = GlobalDisplacementAux
variable = disp_x
scalar_global_strain = global_strain
global_strain_uo = global_strain_uo
component = 0
use_displaced_mesh = false
[../]
[./disp_y]
type = GlobalDisplacementAux
variable = disp_y
scalar_global_strain = global_strain
global_strain_uo = global_strain_uo
component = 1
use_displaced_mesh = false
[../]
[./disp_z]
type = GlobalDisplacementAux
variable = disp_z
scalar_global_strain = global_strain
global_strain_uo = global_strain_uo
component = 2
use_displaced_mesh = false
[../]
[./e00]
type = RankTwoAux
variable = e00
rank_two_tensor = total_strain
index_i = 0
index_j = 0
[../]
[./e01]
type = RankTwoAux
variable = e01
rank_two_tensor = total_strain
index_i = 0
index_j = 1
[../]
[./e10]
type = RankTwoAux
variable = e10
rank_two_tensor = total_strain
index_i = 1
index_j = 0
[../]
[./e12]
type = RankTwoAux
variable = e12
rank_two_tensor = total_strain
index_i = 1
index_j = 2
[../]
[./e11]
type = RankTwoAux
variable = e11
rank_two_tensor = total_strain
index_i = 1
index_j = 1
[../]
[./e22]
type = RankTwoAux
variable = e22
rank_two_tensor = total_strain
index_i = 2
index_j = 2
[../]
[./s00]
type = RankTwoAux
variable = s00
rank_two_tensor = stress
index_i = 0
index_j = 0
[../]
[./s01]
type = RankTwoAux
variable = s01
rank_two_tensor = stress
index_i = 0
index_j = 1
[../]
[./s10]
type = RankTwoAux
variable = s10
rank_two_tensor = stress
index_i = 1
index_j = 0
[../]
[./s12]
type = RankTwoAux
variable = s12
rank_two_tensor = stress
index_i = 1
index_j = 2
[../]
[./s11]
type = RankTwoAux
variable = s11
rank_two_tensor = stress
index_i = 1
index_j = 1
[../]
[./s22]
type = RankTwoAux
variable = s22
rank_two_tensor = stress
index_i = 2
index_j = 2
[../]
[./divP]
type = DivP
variable = divP
[../]
[./surfP]
type = SurfaceChargeP
variable = surfP
boundary = '107'
[../]
[./surfP_52]
type = SurfaceChargeP
variable = surfP_52
boundary = '52'
[../]
[]
[ScalarKernels]
[./global_strain]
type = GlobalStrain
variable = global_strain
global_strain_uo = global_strain_uo
use_displaced_mesh = false
[../]
[]
[Materials]
[./Landau_P_FE]
type = GenericConstantMaterial
prop_names = 'alpha1 alpha11 alpha12 alpha111 alpha112 alpha123 alpha1111 alpha1112 alpha1122 alpha1123'
prop_values = '-0.1722883 -0.073 0.75 0.26 0.61 -3.67 0.0 0.0 0.0 0.0'
block = '0'
[../]
[./Landau_P_substr]
type = GenericConstantMaterial
prop_names = 'alpha1 alpha11 alpha12 alpha111 alpha112 alpha123 alpha1111 alpha1112 alpha1122 alpha1123'
prop_values = '10.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0'
block = '1'
[../]
[./Landau_G_FE]
type = GenericConstantMaterial
prop_names = 'G110 G11_G110 G12_G110 G44_G110 G44P_G110'
prop_values = '0.173 0.6 0.0 0.3 0.3'
block = '0'
[../]
[./mat_C_FE]
type = GenericConstantMaterial
prop_names = 'C11 C12 C44'
prop_values = '175.0 79.4 111.1'
block = '0'
[../]
[./mat_C_sub]
type = GenericConstantMaterial
prop_names = 'C11 C12 C44'
prop_values = '220.0 34.4 161.1'
block = '1'
[../]
[./mat_Q]
type = GenericConstantMaterial
prop_names = 'Q11 Q12 Q44'
prop_values = '0.089 -0.026 0.03375'
block = '0 1'
[../]
[./ferro]
type = ComputeCubicParentElectrostrictiveStrain
eigenstrain_name = ferro
block = '0'
[../]
[./eigen_strain]
type = ComputeEigenstrain
eigen_base = '1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0'
eigenstrain_name = eigenstrain
prefactor = 0.0
block = '1'
[../]
[./elasticity_tensor_1]
type = ComputeElasticityTensor
fill_method = symmetric9
C_ijkl = '175.0 79.4 79.4 175.0 79.4 175.0 111.1 111.1 111.1'
[../]
[./strain_film]
type = ComputeSmallStrain
global_strain = global_strain
eigenstrain_names = 'ferro'
block = '0'
[../]
[./strain_substrate]
type = ComputeSmallStrain
global_strain = global_strain
eigenstrain_names = 'eigenstrain'
block = '1'
[../]
[./stress_1]
type = ComputeLinearElasticStress
[../]
[./global_strain]
type = ComputeGlobalStrain
scalar_global_strain = global_strain
global_strain_uo = global_strain_uo
[../]
[./permitivitty_1]
type = GenericConstantMaterial
prop_names = 'permittivity'
prop_values = '0.08854187'
[../]
[]
[Kernels]
[./div_x]
type = StressDivergenceTensors
variable = u_x
component = 0
use_displaced_mesh = false
[../]
[./div_y]
type = StressDivergenceTensors
variable = u_y
component = 1
use_displaced_mesh = false
[../]
[./div_z]
type = StressDivergenceTensors
variable = u_z
component = 2
use_displaced_mesh = false
[../]
[./bed_x]
type = BulkEnergyDerivativeEighth
variable = polar_x
component = 0
block = '0'
[../]
[./bed_y]
type = BulkEnergyDerivativeEighth
variable = polar_y
component = 1
block = '0'
[../]
[./bed_z]
type = BulkEnergyDerivativeEighth
variable = polar_z
component = 2
block = '0'
[../]
[./walled_x]
type = WallEnergyDerivative
variable = polar_x
component = 0
block = '0'
[../]
[./walled_y]
type = WallEnergyDerivative
variable = polar_y
component = 1
block = '0'
[../]
[./walled_z]
type = WallEnergyDerivative
variable = polar_z
component = 2
block = '0'
[../]
[./electrostr_polar_coupled_x]
type = CubicParentElasticPDerivative
variable = polar_x
component = 0
displacements = 'u_x u_y u_z'
block = '0'
[../]
[./electrostr_polar_coupled_y]
type = CubicParentElasticPDerivative
variable = polar_y
component = 1
displacements = 'u_x u_y u_z'
block = '0'
[../]
[./electrostr_polar_coupled_z]
type = CubicParentElasticPDerivative
variable = polar_z
component = 2
displacements = 'u_x u_y u_z'
block = '0'
[../]
[./polar_x_electric_E]
type = PolarElectricEStrong
variable = potential_E_int
block = '0'
[../]
[./FE_E_int]
type = Electrostatics
variable = potential_E_int
block = '0 1'
[../]
[./polar_electric_px]
type = PolarElectricPStrong
variable = polar_x
component = 0
block = '0'
[../]
[./polar_electric_py]
type = PolarElectricPStrong
variable = polar_y
component = 1
block = '0'
[../]
[./polar_electric_pz]
type = PolarElectricPStrong
variable = polar_z
component = 2
block = '0'
[../]
[./polar_x_time]
type = TimeDerivativeScaled
variable=polar_x
time_scale = 1.0
block = '0'
[../]
[./polar_y_time]
type = TimeDerivativeScaled
variable=polar_y
time_scale = 1.0
block = '0'
[../]
[./polar_z_time]
type = TimeDerivativeScaled
variable = polar_z
time_scale = 1.0
block = '0'
[../]
[./u_x_time]
type = TimeDerivativeScaled
variable = u_x
time_scale = 1.0
[../]
[./u_y_time]
type = TimeDerivativeScaled
variable = u_y
time_scale = 1.0
[../]
[./u_z_time]
type = TimeDerivativeScaled
variable = u_z
time_scale = 1.0
[../]
[]
[BCs]
[./Periodic]
[./xy]
auto_direction = 'x y'
variable = 'u_x u_y u_z polar_x polar_y polar_z potential_E_int'
[../]
[../]
[./boundary_interface_grounding]
type = DirichletBC
boundary = '52'
variable = potential_E_int
value = 0.0
[../]
[./centerfix_x]
type = DirichletBC
boundary = '108'
variable = u_x
value = 0
[../]
[./centerfix_y]
type = DirichletBC
boundary = '108'
variable = u_y
value = 0
[../]
[./centerfix_z]
type = DirichletBC
boundary = '108'
variable = u_z
value = 0
[../]
[]
[Postprocessors]
[./Fbulk]
type = BulkEnergyEighth
execute_on = 'timestep_end'
block = '0'
[../]
[./Fwall]
type = WallEnergy
execute_on = 'timestep_end'
block = '0'
[../]
[./Felastic]
type = CubicParentElasticEnergy
execute_on = 'timestep_end'
block = '0'
[../]
[./Felec]
type = ElectrostaticEnergy
execute_on = 'timestep_end'
block = '0'
[../]
[./Ftotal]
type = LinearCombinationPostprocessor
pp_names = 'Fbulk Fwall Felastic Felec'
pp_coefs = '0.160218 0.160218 0.160218 0.160218'
execute_on = 'timestep_end'
[../]
###############################################
##
## Gold-independent correctness check on the bound-charge
## capability: the divergence theorem
##
## int_V div(P) dV == oint_dV P.n dS
##
## over the FILM (block 0, z in [0,2]). The closed boundary of
## block 0 is the free surface 107 (z=+2), the film/substrate
## interface 52 (z=0), and the four lateral faces, which cancel
## pairwise under the x/y periodic BCs.
##
## NOTE: boundary 108 is the SUBSTRATE bottom (z=-2) and lies on
## block 1, where P is not defined. It is NOT part of this
## surface -- adding it is an error, not a refinement.
##
## Sign convention: DivP returns div(P) and SurfaceChargeP returns
## P.n, so the identity carries no minus sign. (The bound charges
## themselves are rho_b = -div(P) and sigma_b = +P.n.)
##
## Verified 2026-09-22 on the full closed surface: residual ~1e-18,
## i.e. ~1e-17 relative to the sum of the absolute face contributions.
## The 1e-6 tolerance below is loose because the lateral faces are
## omitted here; they cancel only to solver tolerance (~1e-8), not to
## round-off. Restricting sidesets to block 0 so they could be
## included would break Periodic/auto_direction, which is not worth it.
##
## outputs = none on purpose: this check must not perturb the Exodus
## gold file, so it adds no global variables to the output.
##
###############################################
[./volDivP]
type = ElementIntegralVariablePostprocessor
variable = divP
block = '0'
execute_on = 'timestep_end'
outputs = none
[../]
[./surfInt_107]
type = SideIntegralVariablePostprocessor
variable = surfP
boundary = '107'
execute_on = 'timestep_end'
outputs = none
[../]
[./surfInt_52]
type = SideIntegralVariablePostprocessor
variable = surfP_52
boundary = '52'
execute_on = 'timestep_end'
outputs = none
[../]
[./closedSurfP]
type = LinearCombinationPostprocessor
pp_names = 'surfInt_107 surfInt_52'
pp_coefs = '1 1'
execute_on = 'timestep_end'
outputs = none
[../]
[./divThmResidual]
type = LinearCombinationPostprocessor
pp_names = 'closedSurfP volDivP'
pp_coefs = '1 -1'
execute_on = 'timestep_end'
outputs = none
[../]
[]
[UserObjects]
[./global_strain_uo]
type = GlobalATiO3MaterialRVEUserObject
use_displaced_mesh = false
execute_on = 'Initial Linear Nonlinear'
applied_stress_tensor = '0.0 0.0 0.0 0.0 0.0 0.0'
block = '0'
[../]
###############################################
##
## Assert the divergence theorem every step. Unlike the Exodiff
## this does not care what the solution IS, only that DivP and
## SurfaceChargeP are consistent, so it survives a regold.
## error_level = ERROR is required: fail_mode = HARD on its own
## stops the run but still exits 0, which a test would not catch.
##
###############################################
[./divthm_assert]
type = Terminator
expression = 'abs(divThmResidual) > 1.0e-6'
fail_mode = HARD
error_level = ERROR
execute_on = 'TIMESTEP_END'
message = 'Divergence theorem violated: oint P.n dS != int div(P) dV over block 0. DivP/SurfaceChargeP are inconsistent.'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-ksp_gmres_restart -snes_atol -snes_rtol -ksp_rtol -pc_type -build_twosided'
petsc_options_value = ' 80 1e-8 1e-5 1e-5 bjacobi allreduce'
[../]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
scheme = 'bdf2'
dtmin = 1e-13
dtmax = 0.6
l_max_its = 200
[./TimeStepper]
type = IterationAdaptiveDT
optimal_iterations = 6
growth_factor = 1.2
cutback_factor = 0.75
linear_iteration_ratio = 1000
dt = 0.6
[../]
verbose = true
nl_max_its = 20
num_steps = 6
[]
[Outputs]
print_linear_residuals = false
perf_graph = false
[./out]
type = Exodus
file_base = out_surface_charge
elemental_as_nodal = true
time_step_interval = 1
[../]
[]
(tutorial/film.i)
[Mesh]
[gen]
############################################
##
## Type and dimension of the mesh
##
############################################
type = GeneratedMeshGenerator
dim = 3
nx = 32
ny = 32
nz = 30
xmin = -16.0
xmax = 16.0
ymin = -16.0
ymax = 16.0
zmin = -10.0
zmax = 20.0
#############################################
##
## FE type/order (hexahedral, tetrahedral
##
#############################################
elem_type = HEX8
[]
[./cnode]
input = gen
############################################
##
## additional boundary sideset (one node)
## to zero one of the elastic displacement vectors
## vectors and eliminates rigid body translations
## from the degrees of freedom
##
## NOTE: This must conform with the about
## [Mesh] block settings
##
############################################
type = ExtraNodesetGenerator
coord = '-16.0 -16.0 -10.0'
new_boundary = 100
[../]
[subdomains]
type = SubdomainBoundingBoxGenerator
input = cnode
bottom_left = '-16.0 -16.0 -10.0'
block_id = 1
top_right = '16.0 16.0 0'
location = INSIDE
[]
[film_interface]
type = SideSetsBetweenSubdomainsGenerator
input = subdomains
primary_block = 0
paired_block = 1
new_boundary = 52
[]
[film_surface]
type = SideSetsFromNormalsGenerator
input = film_interface
normals = '0 0 1'
fixed_normal = true
new_boundary = '107'
[]
[substrate_bottom]
type = SideSetsFromNormalsGenerator
input = film_surface
normals = '0 0 -1'
fixed_normal = true
new_boundary = '108'
[]
[]
[GlobalParams]
len_scale = 1.0
polar_x = polar_x
polar_y = polar_y
polar_z = polar_z
potential_E_int = potential_E_int
displacements = 'u_x u_y u_z'
##############################################
##=
## IMPORTANT(!): Units in Ferret are nm, kg,
## seconds, and attocoulombs
##
##############################################
vol = vol
u_x = u_x
u_y = u_y
u_z = u_z
[]
[Variables]
#################################
##
## Variable definitions
## P, u, phi, e^global_ij
## and their initial conditions
##
#################################
[./global_strain]
order = SIXTH
family = SCALAR
[../]
[./polar_x]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = -1e-2
max = 1e-2
[../]
block = '0'
[../]
[./polar_y]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = -1e-2
max = 1e-2
[../]
block = '0'
[../]
[./polar_z]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = -1e-2
max = 1e-2
[../]
block = '0'
[../]
[./potential_E_int]
order = FIRST
family = LAGRANGE
block = '0 1'
[../]
[./u_x]
order = FIRST
family = LAGRANGE
block = '0 1'
[../]
[./u_y]
order = FIRST
family = LAGRANGE
block = '0 1'
[../]
[./u_z]
order = FIRST
family = LAGRANGE
block = '0 1'
[../]
[]
[Kernels]
###############################################
##
## Physical Kernel operators
## to enforce TDLGD evolution
##
###############################################
#Elastic problem
[./TensorMechanics]
use_displaced_mesh = false
eigenstrain_names = eigenstrain
[../]
[./bed_x]
type = BulkEnergyDerivativeEighth
variable = polar_x
component = 0
block = '0'
[../]
[./bed_y]
type = BulkEnergyDerivativeEighth
variable = polar_y
component = 1
block = '0'
[../]
[./bed_z]
type = BulkEnergyDerivativeEighth
variable = polar_z
component = 2
block = '0'
[../]
[./walled_x]
type = WallEnergyDerivative
variable = polar_x
component = 0
block = '0'
[../]
[./walled_y]
type = WallEnergyDerivative
variable = polar_y
component = 1
block = '0'
[../]
[./walled_z]
type = WallEnergyDerivative
variable = polar_z
component = 2
block = '0'
[../]
[./walled2_x]
type = Wall2EnergyDerivative
variable = polar_x
component = 0
block = '0'
[../]
[./walled2_y]
type = Wall2EnergyDerivative
variable = polar_y
component = 1
block = '0'
[../]
[./walled2_z]
type = Wall2EnergyDerivative
variable = polar_z
component = 2
block = '0'
[../]
[./electrostr_ux]
type = ElectrostrictiveCouplingDispDerivative
variable = u_x
component = 0
block = '0'
[../]
[./electrostr_uy]
type = ElectrostrictiveCouplingDispDerivative
variable = u_y
component = 1
block = '0'
[../]
[./electrostr_uz]
type = ElectrostrictiveCouplingDispDerivative
variable = u_z
component = 2
block = '0'
[../]
[./electrostr_polar_coupled_x]
type = ElectrostrictiveCouplingPolarDerivative
variable = polar_x
component = 0
block = '0'
[../]
[./electrostr_polar_coupled_y]
type = ElectrostrictiveCouplingPolarDerivative
variable = polar_y
component = 1
block = '0'
[../]
[./electrostr_polar_coupled_z]
type = ElectrostrictiveCouplingPolarDerivative
variable = polar_z
component = 2
block = '0'
[../]
[./polar_x_electric_E]
type = PolarElectricEStrong
variable = potential_E_int
block = '0'
[../]
[./FE_E_int]
type = Electrostatics
variable = potential_E_int
block = '0 1'
[../]
[./polar_electric_px]
type = PolarElectricPStrong
variable = polar_x
component = 0
block = '0'
[../]
[./polar_electric_py]
type = PolarElectricPStrong
variable = polar_y
component = 1
block = '0'
[../]
[./polar_electric_pz]
type = PolarElectricPStrong
variable = polar_z
component = 2
block = '0'
[../]
[./polar_x_time]
type = TimeDerivativeScaled
variable=polar_x
time_scale = 1.0
block = '0'
[../]
[./polar_y_time]
type = TimeDerivativeScaled
variable = polar_y
time_scale = 1.0
block = '0'
[../]
[./polar_z_time]
type = TimeDerivativeScaled
variable = polar_z
time_scale = 1.0
block = '0'
[../]
[./u_x_time]
type = TimeDerivativeScaled
variable = u_x
time_scale = 1.0
[../]
[./u_y_time]
type = TimeDerivativeScaled
variable = u_y
time_scale = 1.0
[../]
[./u_z_time]
type = TimeDerivativeScaled
variable = u_z
time_scale = 1.0
[../]
[]
[AuxVariables]
######################################
##
## Auxiarilly variable definitions
## (can be intermediate variables
## or for postprocessed quantities)
##
######################################
######################################
##
## Global displacements
##
######################################
[./disp_x]
block = '0 1'
[../]
[./disp_y]
block = '0 1'
[../]
[./disp_z]
block = '0 1'
[../]
######################################
##
## Stress/strain tensor components
##
######################################
[./e00]
order = CONSTANT
family = MONOMIAL
block = '0 1'
[../]
[./e01]
order = CONSTANT
family = MONOMIAL
block = '0 1'
[../]
[./e10]
order = CONSTANT
family = MONOMIAL
block = '0 1'
[../]
[./e11]
order = CONSTANT
family = MONOMIAL
block = '0 1'
[../]
[./e12]
order = CONSTANT
family = MONOMIAL
block = '0 1'
[../]
[./e22]
order = CONSTANT
family = MONOMIAL
block = '0 1'
[../]
[./s00]
order = CONSTANT
family = MONOMIAL
block = '0 1'
[../]
[./s01]
order = CONSTANT
family = MONOMIAL
block = '0 1'
[../]
[./s10]
order = CONSTANT
family = MONOMIAL
block = '0 1'
[../]
[./s11]
order = CONSTANT
family = MONOMIAL
block = '0 1'
[../]
[./s12]
order = CONSTANT
family = MONOMIAL
block = '0 1'
[../]
[./s22]
order = CONSTANT
family = MONOMIAL
block = '0 1'
[../]
[./E_x]
order = CONSTANT
family = MONOMIAL
block = '0 1'
[../]
[./E_y]
order = CONSTANT
family = MONOMIAL
block = '0 1'
[../]
[./E_z]
order = CONSTANT
family = MONOMIAL
block = '0 1'
[../]
[]
[AuxKernels]
######################################
##
## Auxiarilly Kernel definitions
## (can be intermediate "operations"
## or for postprocessed quantities)
##
######################################
[./disp_x]
type = GlobalDisplacementAux
variable = disp_x
scalar_global_strain = global_strain
global_strain_uo = global_strain_uo
component = 0
use_displaced_mesh = false
[../]
[./disp_y]
type = GlobalDisplacementAux
variable = disp_y
scalar_global_strain = global_strain
global_strain_uo = global_strain_uo
component = 1
use_displaced_mesh = false
[../]
[./disp_z]
type = GlobalDisplacementAux
variable = disp_z
scalar_global_strain = global_strain
global_strain_uo = global_strain_uo
component = 2
use_displaced_mesh = false
[../]
[./e00]
type = RankTwoAux
variable = e00
rank_two_tensor = total_strain
index_i = 0
index_j = 0
[../]
[./e01]
type = RankTwoAux
variable = e01
rank_two_tensor = total_strain
index_i = 0
index_j = 1
[../]
[./e10]
type = RankTwoAux
variable = e10
rank_two_tensor = total_strain
index_i = 1
index_j = 0
[../]
[./e12]
type = RankTwoAux
variable = e12
rank_two_tensor = total_strain
index_i = 1
index_j = 2
[../]
[./e11]
type = RankTwoAux
variable = e11
rank_two_tensor = total_strain
index_i = 1
index_j = 1
[../]
[./e22]
type = RankTwoAux
variable = e22
rank_two_tensor = total_strain
index_i = 2
index_j = 2
[../]
[./s00]
type = RankTwoAux
variable = s00
rank_two_tensor = stress
index_i = 0
index_j = 0
[../]
[./s01]
type = RankTwoAux
variable = s01
rank_two_tensor = stress
index_i = 0
index_j = 1
[../]
[./s10]
type = RankTwoAux
variable = s10
rank_two_tensor = stress
index_i = 1
index_j = 0
[../]
[./s12]
type = RankTwoAux
variable = s12
rank_two_tensor = stress
index_i = 1
index_j = 2
[../]
[./s11]
type = RankTwoAux
variable = s11
rank_two_tensor = stress
index_i = 1
index_j = 1
[../]
[./s22]
type = RankTwoAux
variable = s22
rank_two_tensor = stress
index_i = 2
index_j = 2
[../]
[]
[ScalarKernels]
######################################
##
## Necessary for PBC system
##
######################################
[./global_strain]
type = GlobalStrain
variable = global_strain
global_strain_uo = global_strain_uo
use_displaced_mesh = false
[../]
[]
[Materials]
#################################################
##
## Landau coefficients from Li et al (2001)
##
##################################################
[./Landau_P_FE]
type = GenericConstantMaterial
prop_names = 'alpha1 alpha11 alpha12 alpha111 alpha112 alpha123 alpha1111 alpha1112 alpha1122 alpha1123'
prop_values = '-0.1722883 -0.073 0.75 0.26 0.61 -3.67 0.0 0.0 0.0 0.0'
block = '0'
[../]
[./Landau_P_substr]
type = GenericConstantMaterial
prop_names = 'alpha1 alpha11 alpha12 alpha111 alpha112 alpha123 alpha1111 alpha1112 alpha1122 alpha1123'
prop_values = '10.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0'
block = '1'
[../]
[./Landau_G_FE]
type = GenericConstantMaterial
prop_names = 'G110 G11_G110 G12_G110 G44_G110 G44P_G110'
prop_values = '0.173 0.6 0.0 0.3 0.3'
block = '0'
[../]
[./mat_C_FE]
type = GenericConstantMaterial
prop_names = 'C11 C12 C44'
prop_values = '175.0 79.4 111.1'
block = '0'
[../]
[./mat_C_sub]
type = GenericConstantMaterial
prop_names = 'C11 C12 C44'
prop_values = '220.0 34.4 161.1'
block = '1'
[../]
##############################################################
##
## NOTE: Sign convention in **this implementation**
## for the electrostrictive coeff. is multiplied by
## an overall factor of (-1). Note that other elastic
## coupling Kernels/Materials in Ferret DO NOT have the
## (-1) prefactor. Please be careful here.
##
###############################################################
[./mat_Q]
type = GenericConstantMaterial
prop_names = 'Q11 Q12 Q44'
prop_values = '-0.089 0.026 -0.03375'
block = '0 1'
[../]
[./mat_q]
type = GenericConstantMaterial
prop_names = 'q11 q12 q44'
prop_values = '-11.4 0.01438 -7.5'
[../]
[./eigen_strain]
type = ComputeEigenstrain
# eigen_base = 'exx exy exz eyx eyy eyz ezx ezy ezz'
eigen_base = '1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0'
eigenstrain_name = eigenstrain
prefactor = 0.0
[../]
[./elasticity_tensor_1]
type = ComputeElasticityTensor
fill_method = symmetric9
###############################################
##
## symmetric9 fill_method is (default)
## C11 C12 C13 C22 C23 C33 C44 C55 C66
##
###############################################
C_ijkl = '175.0 79.4 79.4 175.0 79.4 175.0 111.1 111.1 111.1'
[../]
[./strain_1]
type = ComputeSmallStrain
global_strain = global_strain
eigenstrain_names = eigenstrain
[../]
[./stress_1]
type = ComputeLinearElasticStress
[../]
[./global_strain]
type = ComputeGlobalStrain
scalar_global_strain = global_strain
global_strain_uo = global_strain_uo
[../]
[./permitivitty_1]
###############################################
##
## so-called background dielectric constant
## (it encapsulates the motion of core electrons
## at high frequency) = e_b*e_0 (here we use
## e_b = 10), see PRB. 74, 104014, (2006)
##
###############################################
type = GenericConstantMaterial
prop_names = 'permittivity'
prop_values = '0.08854187'
[../]
[]
[BCs]
[./Periodic]
[./xy]
auto_direction = 'x y'
variable = 'u_x u_y u_z polar_x polar_y polar_z potential_E_int'
[../]
[../]
[./boundary_interface_grounding]
type = DirichletBC
boundary = '52'
variable = potential_E_int
value = 0.0
[../]
# fix center point location
[./centerfix_x]
type = DirichletBC
boundary = '108'
variable = u_x
value = 0
[../]
[./centerfix_y]
type = DirichletBC
boundary = '108'
variable = u_y
value = 0
[../]
[./centerfix_z]
type = DirichletBC
boundary = '108'
variable = u_z
value = 0
[../]
[]
[Postprocessors]
###############################################
##=
## Postprocessors (integrations over the
## computational domain) to calculate the total
## energy decomposed into linear combinations of
## the different physics.
##
###############################################
[./Fbulk]
type = BulkEnergyEighth
execute_on = 'timestep_end'
block = '0'
[../]
[./Fwall]
type = WallEnergy
execute_on = 'timestep_end'
block = '0'
[../]
[./Felastic]
type = ElasticEnergy
execute_on = 'timestep_end'
use_displaced_mesh = false
block = '0'
[../]
[./Fcoupled]
type = ElectrostrictiveCouplingEnergy
execute_on = 'timestep_end'
block = '0'
[../]
[./Felec]
type = ElectrostaticEnergy
execute_on = 'timestep_end'
block = '0'
[../]
[./Ftotal]
type = LinearCombinationPostprocessor
pp_names = 'Fbulk Fwall Fcoupled Felec'
pp_coefs = '0.160218 0.160218 0.160218 0.160218' #converted to eV
execute_on = 'timestep_end'
[../]
[./vol]
type = VolumePostprocessor
execute_on = 'timestep_end'
[../]
[./px]
type = DomainVariantPopulation
execute_on = 'timestep_end'
component = 0
block = '0'
[../]
[./py]
type = DomainVariantPopulation
execute_on = 'timestep_end'
component = 1
block = '0'
[../]
[./pz]
type = DomainVariantPopulation
execute_on = 'timestep_end'
component = 2
block = '0'
[../]
[./perc_change]
type = ChangeOverTimePostprocessor
compute_relative_change = true
take_absolute_value = true
postprocessor = Ftotal
execute_on = 'timestep_end'
[../]
[./elapsed]
type = PerfGraphData
section_name = "Root" # for profiling the problem [on]
data_type = total
[../]
[]
[UserObjects]
###############################################
##
## GlobalStrain system to enforce periodicity
## in the anisotropic strain field
##
###############################################
[./global_strain_uo]
type = GlobalATiO3MaterialRVEUserObject
use_displaced_mesh = false
execute_on = 'Initial Linear Nonlinear'
applied_stress_tensor = '2.1 2.1 1.9056 0.0 0.0 0.0'
block = '0'
[../]
###############################################
##
## terminator to end energy evolution when the energy difference
## between subsequent time steps is lower than 5e-6
##
## NOTE: can fail if the time step is small
##
###############################################
[./kill]
type = Terminator
expression = 'perc_change <= 5.0e-4'
[../]
[]
[Preconditioning]
###############################################
##
## Numerical preconditioning/solver options
##
###############################################
[./smp]
type = SMP
full = true
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-ksp_gmres_restart -snes_atol -snes_rtol -ksp_rtol -pc_type -build_twosided'
petsc_options_value = ' 80 1e-8 1e-6 1e-5 bjacobi allreduce'
[../]
[]
[Executioner]
##########################################
##
## Time integ=ration/solver options
##
##########################################
type = Transient
solve_type = 'PJFNK'
scheme = 'bdf2'
dtmin = 1e-13
dtmax = 0.6
l_max_its = 200
[./TimeStepper]
type = IterationAdaptiveDT
optimal_iterations = 6
growth_factor = 1.2
cutback_factor = 0.75
linear_iteration_ratio = 1000
dt = 0.6
[../]
verbose = true
nl_max_its = 20
[]
[Outputs]
###############################################
##==
## Output options
##
###############################################
print_linear_residuals = false
perf_graph = false
[./out]
type = Exodus
file_base = out_PTOfilm_e12_T298K_E0_E0
elemental_as_nodal = true
time_step_interval = 1
[../]
[]
(test/tests/dispersion/genDomain_PyEz.i)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 3
nx = 2
ny = 2
nz = 2
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
elem_type = HEX8
[]
[./cnode]
input = gen
type = ExtraNodesetGenerator
coord = '-0.5 -0.5 -0.5'
new_boundary = 100
[../]
[]
[GlobalParams]
len_scale = 1.0
polar_x = polar_x
polar_y = polar_y
polar_z = polar_z
potential_E_int = potential_E_int
displacements = 'u_x u_y u_z'
u_x = u_x
u_y = u_y
u_z = u_z
[]
[Variables]
[./global_strain]
order = SIXTH
family = SCALAR
[../]
[./polar_x]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = -0.01e-4
max = 0.01e-4
[../]
[../]
[./polar_y]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = 0.01
max = 0.02
[../]
[../]
[./polar_z]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = -0.01e-4
max = 0.01e-4
[../]
[../]
[./potential_E_int]
order = FIRST
family = LAGRANGE
[../]
[./u_x]
order = FIRST
family = LAGRANGE
[../]
[./u_y]
order = FIRST
family = LAGRANGE
[../]
[./u_z]
order = FIRST
family = LAGRANGE
[../]
[]
[AuxVariables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./stress_xx_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yy_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_xy_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_xz_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_zz_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yz_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./e00]
order = CONSTANT
family = MONOMIAL
[../]
[./e01]
order = CONSTANT
family = MONOMIAL
[../]
[./e10]
order = CONSTANT
family = MONOMIAL
[../]
[./e11]
order = CONSTANT
family = MONOMIAL
[../]
[./e12]
order = CONSTANT
family = MONOMIAL
[../]
[./e22]
order = CONSTANT
family = MONOMIAL
[../]
[./eigs00]
order = CONSTANT
family = MONOMIAL
[../]
[./eigs11]
order = CONSTANT
family = MONOMIAL
[../]
[./eigs22]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./disp_x]
type = GlobalDisplacementAux
variable = disp_x
scalar_global_strain = global_strain
global_strain_uo = global_strain_uo
component = 0
use_displaced_mesh = false
[../]
[./disp_y]
type = GlobalDisplacementAux
variable = disp_y
scalar_global_strain = global_strain
global_strain_uo = global_strain_uo
component = 1
use_displaced_mesh = false
[../]
[./disp_z]
type = GlobalDisplacementAux
variable = disp_z
scalar_global_strain = global_strain
global_strain_uo = global_strain_uo
component = 2
use_displaced_mesh = false
[../]
[./e00]
type = RankTwoAux
variable = e00
rank_two_tensor = total_strain
index_i = 0
index_j = 0
[../]
[./e01]
type = RankTwoAux
variable = e01
rank_two_tensor = total_strain
index_i = 0
index_j = 1
[../]
[./e10]
type = RankTwoAux
variable = e10
rank_two_tensor = total_strain
index_i = 1
index_j = 0
[../]
[./e12]
type = RankTwoAux
variable = e12
rank_two_tensor = total_strain
index_i = 1
index_j = 2
[../]
[./e11]
type = RankTwoAux
variable = e11
rank_two_tensor = total_strain
index_i = 1
index_j = 1
[../]
[./e22]
type = RankTwoAux
variable = e22
rank_two_tensor = total_strain
index_i = 2
index_j = 2
[../]
[./eigs00]
type = LocalABO3EigenstressAux
variable = eigs00
index_i = 0
index_j = 0
[../]
[./eigs11]
type = LocalABO3EigenstressAux
variable = eigs11
index_i = 1
index_j = 1
[../]
[./eigs22]
type = LocalABO3EigenstressAux
variable = eigs22
index_i = 2
index_j = 2
[../]
[]
[ScalarKernels]
[./global_strain]
type = GlobalStrain
variable = global_strain
global_strain_uo = global_strain_uo
use_displaced_mesh = false
[../]
[]
[Materials]
[./Landau_P]
type = GenericConstantMaterial
prop_names = 'alpha1 alpha11 alpha12 alpha111 alpha112 alpha123 alpha1111 alpha1112 alpha1122 alpha1123'
prop_values = '-0.027721 -0.64755 0.323 8.004 4.47 4.91 0.0 0.0 0.0 0.0'
[../]
[./Landau_G]
type = GenericConstantMaterial
prop_names = 'G110 G11_G110 G12_G110 G44_G110 G44P_G110'
prop_values = '0.5 0.51 -0.02 0.02 0.0'
[../]
[./mat_C]
type = GenericConstantMaterial
prop_names = 'C11 C12 C44'
prop_values = '275.0 179.0 54.3'
[../]
[./mat_Q]
type = GenericConstantMaterial
prop_names = 'Q11 Q12 Q44'
prop_values = '-0.11 0.045 -0.029'
[../]
[./mat_q]
type = GenericConstantMaterial
prop_names = 'q11 q12 q44'
prop_values = '-14.2 0.74 -1.57'
[../]
[./eigen_strain]
type = ComputeEigenstrain
eigen_base = '0.0 0.0 0 0 0 0 0 0 0'
eigenstrain_name = eigenstrain
prefactor = 0.0
[../]
[./elasticity_tensor_1]
type = ComputeElasticityTensor
fill_method = symmetric9
C_ijkl = '275.0 179.0 179.0 275.0 179.0 275.0 54.3 54.3 54.3'
[../]
[./strain_1]
type = ComputeSmallStrain
global_strain = global_strain
eigenstrain_names = eigenstrain
[../]
[./stress_1]
type = ComputeLinearElasticStress
[../]
[./global_strain]
type = ComputeGlobalStrain
scalar_global_strain = global_strain
global_strain_uo = global_strain_uo
[../]
[./permitivitty_1]
type = GenericConstantMaterial
prop_names = 'permittivity'
prop_values = '0.08854187'
[../]
[]
[Kernels]
[./SolidMechanics]
use_displaced_mesh = false
eigenstrain_name = eigenstrain
[../]
[./bed_x]
type = BulkEnergyDerivativeEighth
variable = polar_x
component = 0
[../]
[./bed_y]
type = BulkEnergyDerivativeEighth
variable = polar_y
component = 1
[../]
[./bed_z]
type = BulkEnergyDerivativeEighth
variable = polar_z
component = 2
[../]
[./walled_x]
type = WallEnergyDerivative
variable = polar_x
component = 0
[../]
[./walled_y]
type = WallEnergyDerivative
variable = polar_y
component = 1
[../]
[./walled_z]
type = WallEnergyDerivative
variable = polar_z
component = 2
[../]
[./electrostr_ux]
type = ElectrostrictiveCouplingDispDerivative
variable = u_x
component = 0
[../]
[./electrostr_uy]
type = ElectrostrictiveCouplingDispDerivative
variable = u_y
component = 1
[../]
[./electrostr_uz]
type = ElectrostrictiveCouplingDispDerivative
variable = u_z
component = 2
[../]
[./electrostr_polar_coupled_x]
type = ElectrostrictiveCouplingPolarDerivative
variable = polar_x
component = 0
[../]
[./electrostr_polar_coupled_y]
type = ElectrostrictiveCouplingPolarDerivative
variable = polar_y
component = 1
[../]
[./electrostr_polar_coupled_z]
type = ElectrostrictiveCouplingPolarDerivative
variable = polar_z
component = 2
[../]
[./polar_x_electric_E]
type = PolarElectricEStrong
variable = potential_E_int
[../]
[./FE_E_int]
type = Electrostatics
variable = potential_E_int
[../]
[./polar_electric_px]
type = PolarElectricPStrong
variable = polar_x
component = 0
[../]
[./polar_electric_py]
type = PolarElectricPStrong
variable = polar_y
component = 1
[../]
[./polar_electric_pz]
type = PolarElectricPStrong
variable = polar_z
component = 2
[../]
[./polar_x_time]
type = TimeDerivativeScaled
variable=polar_x
time_scale = 1.0
[../]
[./polar_y_time]
type = TimeDerivativeScaled
variable=polar_y
time_scale = 1.0
[../]
[./polar_z_time]
type = TimeDerivativeScaled
variable = polar_z
time_scale = 1.0
[../]
[]
[BCs]
[./Periodic]
[./xyz]
auto_direction = 'x y z'
variable = 'u_x u_y u_z polar_x polar_y polar_z'
[../]
[../]
[./boundary_grounding]
type = DirichletBC
boundary = '0 1 2 3 4 5'
variable = potential_E_int
value = 0.0
[../]
[./centerfix_x]
type = DirichletBC
boundary = 100
variable = u_x
value = 0
[../]
[./centerfix_y]
type = DirichletBC
boundary = 100
variable = u_y
value = 0
[../]
[./centerfix_z]
type = DirichletBC
boundary = 100
variable = u_z
value = 0
[../]
[]
[Postprocessors]
[./Fbulk]
type = BulkEnergyEighth
execute_on = 'initial timestep_end'
[../]
[./Fwall]
type = WallEnergy
execute_on = 'initial timestep_end'
[../]
[./Felastic]
type = ElasticEnergy
execute_on = 'initial timestep_end'
use_displaced_mesh = false
[../]
[./Fcoupled]
type = ElectrostrictiveCouplingEnergy
execute_on = 'initial timestep_end'
[../]
[./Felec]
type = ElectrostaticEnergy
execute_on = 'initial timestep_end'
[../]
[./Ftotal]
type = LinearCombinationPostprocessor
pp_names = 'Fbulk Fwall Fcoupled Felec'
pp_coefs = ' 1 1 1 1'
execute_on = 'initial timestep_end'
[../]
[./perc_change]
type = ChangeOverTimePostprocessor
compute_relative_change = true
take_absolute_value = true
postprocessor = Ftotal
execute_on = 'initial timestep_end'
[../]
[]
[UserObjects]
[./global_strain_uo]
type = GlobalATiO3MaterialRVEUserObject
use_displaced_mesh = false
execute_on = 'Initial Linear Nonlinear'
applied_stress_tensor = '0.0 0.0 0.0 0.0 0.0 0.0'
[../]
[./kill]
type = Terminator
expression = 'perc_change <= 1.0e-6'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-ksp_gmres_restart -snes_atol -snes_rtol -ksp_rtol -pc_type -build_twosided'
petsc_options_value = ' 160 1e-10 1e-8 1e-6 bjacobi allreduce'
[../]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
scheme = 'implicit-euler'
dtmin = 1e-13
dtmax = 3.0
l_max_its = 200
[./TimeStepper]
type = IterationAdaptiveDT
optimal_iterations = 8
cutback_factor = 0.75
linear_iteration_ratio = 1000
dt = 0.3
[../]
verbose = true
[]
[Outputs]
print_linear_residuals = false
perf_graph = false
[./out]
type = Exodus
file_base = out_PyEz
elemental_as_nodal = true
[../]
[]
(test/tests/electrooptics/BTO_monodomain_T298K_REF.i)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 3
nx = 2
ny = 2
nz = 2
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
elem_type = HEX8
[]
[./cnode]
input = gen
type = ExtraNodesetGenerator
coord = '-0.5 -0.5 -0.5'
new_boundary = 100
[../]
[]
[GlobalParams]
len_scale = 1.0
polar_x = polar_x
polar_y = polar_y
polar_z = polar_z
potential_E_int = potential_E_int
displacements = 'u_x u_y u_z'
u_x = u_x
u_y = u_y
u_z = u_z
[]
[Functions]
[./stripe1]
type = ParsedFunction
expression = 0.01*cos(0.08975979010256552*(x))
[../]
[]
[Variables]
[./global_strain]
order = SIXTH
family = SCALAR
[../]
[./polar_x]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = -0.01e-4
max = 0.01e-4
[../]
[../]
[./polar_y]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = -0.01e-4
max = 0.01e-4
[../]
[../]
[./polar_z]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = 0.01
max = 0.02
[../]
[../]
[./potential_E_int]
order = FIRST
family = LAGRANGE
[../]
[./u_x]
order = FIRST
family = LAGRANGE
[../]
[./u_y]
order = FIRST
family = LAGRANGE
[../]
[./u_z]
order = FIRST
family = LAGRANGE
[../]
[]
[AuxVariables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./stress_xx_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yy_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_xy_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_xz_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_zz_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yz_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./e00]
order = CONSTANT
family = MONOMIAL
[../]
[./e01]
order = CONSTANT
family = MONOMIAL
[../]
[./e10]
order = CONSTANT
family = MONOMIAL
[../]
[./e11]
order = CONSTANT
family = MONOMIAL
[../]
[./e12]
order = CONSTANT
family = MONOMIAL
[../]
[./e22]
order = CONSTANT
family = MONOMIAL
[../]
[./dpn_1]
order = CONSTANT
family = MONOMIAL
[../]
[./dpn_2]
order = CONSTANT
family = MONOMIAL
[../]
[./dpn_3]
order = CONSTANT
family = MONOMIAL
[../]
[./den_1]
order = CONSTANT
family = MONOMIAL
[../]
[./den_2]
order = CONSTANT
family = MONOMIAL
[../]
[./den_3]
order = CONSTANT
family = MONOMIAL
[../]
[./n_1]
order = CONSTANT
family = MONOMIAL
[../]
[./n_2]
order = CONSTANT
family = MONOMIAL
[../]
[./n_3]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./disp_x]
type = GlobalDisplacementAux
variable = disp_x
scalar_global_strain = global_strain
global_strain_uo = global_strain_uo
component = 0
use_displaced_mesh = false
[../]
[./disp_y]
type = GlobalDisplacementAux
variable = disp_y
scalar_global_strain = global_strain
global_strain_uo = global_strain_uo
component = 1
use_displaced_mesh = false
[../]
[./disp_z]
type = GlobalDisplacementAux
variable = disp_z
scalar_global_strain = global_strain
global_strain_uo = global_strain_uo
component = 2
use_displaced_mesh = false
[../]
[./e00]
type = RankTwoAux
variable = e00
rank_two_tensor = total_strain
index_i = 0
index_j = 0
[../]
[./e01]
type = RankTwoAux
variable = e01
rank_two_tensor = total_strain
index_i = 0
index_j = 1
[../]
[./e10]
type = RankTwoAux
variable = e10
rank_two_tensor = total_strain
index_i = 1
index_j = 0
[../]
[./e12]
type = RankTwoAux
variable = e12
rank_two_tensor = total_strain
index_i = 1
index_j = 2
[../]
[./e11]
type = RankTwoAux
variable = e11
rank_two_tensor = total_strain
index_i = 1
index_j = 1
[../]
[./e22]
type = RankTwoAux
variable = e22
rank_two_tensor = total_strain
index_i = 2
index_j = 2
[../]
[./dn_p1]
type = PolarOpticChangeInRefractiveIndex
component = 0
variable = dpn_1
execute_on = 'timestep_end'
[../]
[./dn_p2]
type = PolarOpticChangeInRefractiveIndex
component = 1
variable = dpn_2
execute_on = 'timestep_end'
[../]
[./dn_p3]
type = PolarOpticChangeInRefractiveIndex
component = 2
variable = dpn_3
execute_on = 'timestep_end'
[../]
[./dn_e1]
type = ElastoChangeInRefractiveIndex
component = 0
variable = den_1
u_x = u_x
u_y = u_y
u_z = u_z
execute_on = 'timestep_end'
[../]
[./dn_e2]
type = ElastoChangeInRefractiveIndex
component = 1
variable = den_2
u_x = u_x
u_y = u_y
u_z = u_z
execute_on = 'timestep_end'
[../]
[./dn_e3]
type = ElastoChangeInRefractiveIndex
component = 2
variable = den_3
u_x = u_x
u_y = u_y
u_z = u_z
execute_on = 'timestep_end'
[../]
[./n_1_c]
type = ReworkedRefractiveIndex
variable = n_1
elasto = true
electro = false
polar = true
component = 0
var1 = dpn_1
var2 = den_1
execute_on = 'timestep_end'
[../]
[./n_2_c]
type = ReworkedRefractiveIndex
variable = n_2
elasto = true
electro = false
polar = true
component = 1
var1 = dpn_2
var2 = den_2
execute_on = 'timestep_end'
[../]
[./n_3_c]
type = ReworkedRefractiveIndex
variable = n_3
elasto = true
electro = false
polar = true
component = 2
var1 = dpn_3
var2 = den_3
execute_on = 'timestep_end'
[../]
[]
[ScalarKernels]
[./global_strain]
type = GlobalStrain
variable = global_strain
global_strain_uo = global_strain_uo
use_displaced_mesh = false
[../]
[]
[Materials]
[./Landau_P]
type = GenericConstantMaterial
prop_names = 'alpha1 alpha11 alpha12 alpha111 alpha112 alpha123 alpha1111 alpha1112 alpha1122 alpha1123'
prop_values = '-0.027721 -0.64755 0.323 8.004 4.47 4.91 0.0 0.0 0.0 0.0'
[../]
[./Landau_G]
type = GenericConstantMaterial
prop_names = 'G110 G11_G110 G12_G110 G44_G110 G44P_G110'
prop_values = '0.5 0.51 -0.02 0.02 0.0'
[../]
[./mat_C]
type = GenericConstantMaterial
prop_names = 'C11 C12 C44'
prop_values = '275.0 179.0 54.3'
[../]
[./mat_Q]
type = GenericConstantMaterial
prop_names = 'Q11 Q12 Q44'
prop_values = '-0.11 0.045 -0.029'
[../]
[./mat_q]
type = GenericConstantMaterial
prop_names = 'q11 q12 q44'
prop_values = '-14.2 0.74 -1.57'
[../]
[./eigen_strain]
type = ComputeEigenstrain
eigen_base = '0. 0 0 0 0 0 0 0 0'
eigenstrain_name = eigenstrain
prefactor = 0.0
[../]
[./elasticity_tensor_1]
type = ComputeElasticityTensor
fill_method = symmetric9
C_ijkl = '275.0 179.0 179.0 275.0 179.0 275.0 54.3 54.3 54.3'
[../]
[./strain_1]
type = ComputeSmallStrain
global_strain = global_strain
eigenstrain_names = eigenstrain
[../]
[./stress_1]
type = ComputeLinearElasticStress
[../]
[./global_strain]
type = ComputeGlobalStrain
scalar_global_strain = global_strain
global_strain_uo = global_strain_uo
[../]
[./slab_ferroelectric]
type = ComputeElectrostrictiveTensor
Q_mnkl = '-0.11 0.045 0.045 -0.11 0.045 -0.11 -0.029 -0.029 -0.029'
C_ijkl = '275.0 179.0 179.0 275.0 179.0 275.0 54.3 54.3 54.3'
[../]
[./ref_index]
type = GenericConstantMaterial
prop_names = 'n1 n2 n3 n4 n5 n6'
prop_values = '2.4272 2.4272 2.4272 0.0 0.0 0.0'
[../]
[./po_tensor]
type = GenericConstantMaterial
prop_names = 'g1111 g1122 g1212'
prop_values = '0.15 0.038 0.07'
[../]
[./eo_tensor]
type = GenericConstantMaterial
prop_names = 'p1111 p1122 p1212'
prop_values = '0.37 0.11 -0.30'
[../]
[]
[Kernels]
[./SolidMechanics]
use_displaced_mesh = false
[../]
[./bed_x]
type = BulkEnergyDerivativeEighth
variable = polar_x
component = 0
[../]
[./bed_y]
type = BulkEnergyDerivativeEighth
variable = polar_y
component = 1
[../]
[./bed_z]
type = BulkEnergyDerivativeEighth
variable = polar_z
component = 2
[../]
[./walled_x]
type = WallEnergyDerivative
variable = polar_x
component = 0
[../]
[./walled_y]
type = WallEnergyDerivative
variable = polar_y
component = 1
[../]
[./walled_z]
type = WallEnergyDerivative
variable = polar_z
component = 2
[../]
[./electrostr_ux]
type = ElectrostrictiveCouplingDispDerivative
variable = u_x
component = 0
[../]
[./electrostr_uy]
type = ElectrostrictiveCouplingDispDerivative
variable = u_y
component = 1
[../]
[./electrostr_uz]
type = ElectrostrictiveCouplingDispDerivative
variable = u_z
component = 2
[../]
[./electrostr_polar_coupled_x]
type = ElectrostrictiveCouplingPolarDerivative
variable = polar_x
component = 0
[../]
[./electrostr_polar_coupled_y]
type = ElectrostrictiveCouplingPolarDerivative
variable = polar_y
component = 1
[../]
[./electrostr_polar_coupled_z]
type = ElectrostrictiveCouplingPolarDerivative
variable = polar_z
component = 2
[../]
[./polar_x_electric_E]
type = PolarElectricEStrong
variable = potential_E_int
[../]
[./FE_E_int]
type = Electrostatics
variable = potential_E_int
permittivity = 0.08854187
[../]
[./polar_electric_px]
type = PolarElectricPStrong
variable = polar_x
component = 0
[../]
[./polar_electric_py]
type = PolarElectricPStrong
variable = polar_y
component = 1
[../]
[./polar_electric_pz]
type = PolarElectricPStrong
variable = polar_z
component = 2
[../]
[./polar_x_time]
type = TimeDerivativeScaled
variable=polar_x
time_scale = 1.0
[../]
[./polar_y_time]
type = TimeDerivativeScaled
variable=polar_y
time_scale = 1.0
[../]
[./polar_z_time]
type = TimeDerivativeScaled
variable = polar_z
time_scale = 1.0
[../]
[]
[BCs]
[./Periodic]
[./xyz]
auto_direction = 'x y z'
variable = 'u_x u_y u_z polar_x polar_y polar_z'
[../]
[../]
[./boundary_grounding]
type = DirichletBC
boundary = '0 1 2 3 4 5'
variable = potential_E_int
value = 0.0
[../]
[./centerfix_x]
type = DirichletBC
boundary = 100
variable = u_x
value = 0
[../]
[./centerfix_y]
type = DirichletBC
boundary = 100
variable = u_y
value = 0
[../]
[./centerfix_z]
type = DirichletBC
boundary = 100
variable = u_z
value = 0
[../]
[]
[Postprocessors]
[./Fbulk]
type = BulkEnergyEighth
execute_on = 'initial timestep_end'
[../]
[./Fwall]
type = WallEnergy
execute_on = 'initial timestep_end'
[../]
[./Felastic]
type = ElasticEnergy
execute_on = 'initial timestep_end'
use_displaced_mesh = false
[../]
[./Fcoupled]
type = ElectrostrictiveCouplingEnergy
execute_on = 'initial timestep_end'
[../]
[./Felec]
type = ElectrostaticEnergy
execute_on = 'initial timestep_end'
[../]
[./Ftotal]
type = LinearCombinationPostprocessor
pp_names = 'Fbulk Fwall Fcoupled Felec'
pp_coefs = ' 1 1 1 1'
execute_on = 'initial timestep_end'
[../]
[]
[UserObjects]
[./global_strain_uo]
type = GlobalATiO3MaterialRVEUserObject
use_displaced_mesh = false
execute_on = 'Initial Linear Nonlinear'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-ksp_gmres_restart -snes_atol -snes_rtol -ksp_rtol -pc_type -build_twosided'
petsc_options_value = ' 160 1e-10 1e-8 1e-6 bjacobi allreduce'
[../]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
scheme = 'implicit-euler'
dtmin = 1e-13
dtmax = 3.0
l_max_its = 200
[./TimeStepper]
type = IterationAdaptiveDT
optimal_iterations = 8
cutback_factor = 0.75
linear_iteration_ratio = 1000
dt = 0.3
[../]
verbose = true
num_steps = 5
[]
[Outputs]
print_linear_residuals = false
perf_graph = false
[./out]
type = Exodus
file_base = test_bire
elemental_as_nodal = true
[../]
[]
(test/tests/dispersion/genDomain_PzEz.i)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 3
nx = 2
ny = 2
nz = 2
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
elem_type = HEX8
[]
[./cnode]
input = gen
type = ExtraNodesetGenerator
coord = '-0.5 -0.5 -0.5'
new_boundary = 100
[../]
[]
[GlobalParams]
len_scale = 1.0
polar_x = polar_x
polar_y = polar_y
polar_z = polar_z
potential_E_int = potential_E_int
displacements = 'u_x u_y u_z'
u_x = u_x
u_y = u_y
u_z = u_z
[]
[Variables]
[./global_strain]
order = SIXTH
family = SCALAR
[../]
[./polar_x]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = -0.01e-4
max = 0.01e-4
[../]
[../]
[./polar_y]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = -0.01e-4
max = 0.01e-4
[../]
[../]
[./polar_z]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = 0.01
max = 0.02
[../]
[../]
[./potential_E_int]
order = FIRST
family = LAGRANGE
[../]
[./u_x]
order = FIRST
family = LAGRANGE
[../]
[./u_y]
order = FIRST
family = LAGRANGE
[../]
[./u_z]
order = FIRST
family = LAGRANGE
[../]
[]
[AuxVariables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./stress_xx_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yy_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_xy_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_xz_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_zz_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yz_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./e00]
order = CONSTANT
family = MONOMIAL
[../]
[./e01]
order = CONSTANT
family = MONOMIAL
[../]
[./e10]
order = CONSTANT
family = MONOMIAL
[../]
[./e11]
order = CONSTANT
family = MONOMIAL
[../]
[./e12]
order = CONSTANT
family = MONOMIAL
[../]
[./e22]
order = CONSTANT
family = MONOMIAL
[../]
[./eigs00]
order = CONSTANT
family = MONOMIAL
[../]
[./eigs11]
order = CONSTANT
family = MONOMIAL
[../]
[./eigs22]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./disp_x]
type = GlobalDisplacementAux
variable = disp_x
scalar_global_strain = global_strain
global_strain_uo = global_strain_uo
component = 0
use_displaced_mesh = false
[../]
[./disp_y]
type = GlobalDisplacementAux
variable = disp_y
scalar_global_strain = global_strain
global_strain_uo = global_strain_uo
component = 1
use_displaced_mesh = false
[../]
[./disp_z]
type = GlobalDisplacementAux
variable = disp_z
scalar_global_strain = global_strain
global_strain_uo = global_strain_uo
component = 2
use_displaced_mesh = false
[../]
[./e00]
type = RankTwoAux
variable = e00
rank_two_tensor = total_strain
index_i = 0
index_j = 0
[../]
[./e01]
type = RankTwoAux
variable = e01
rank_two_tensor = total_strain
index_i = 0
index_j = 1
[../]
[./e10]
type = RankTwoAux
variable = e10
rank_two_tensor = total_strain
index_i = 1
index_j = 0
[../]
[./e12]
type = RankTwoAux
variable = e12
rank_two_tensor = total_strain
index_i = 1
index_j = 2
[../]
[./e11]
type = RankTwoAux
variable = e11
rank_two_tensor = total_strain
index_i = 1
index_j = 1
[../]
[./e22]
type = RankTwoAux
variable = e22
rank_two_tensor = total_strain
index_i = 2
index_j = 2
[../]
[./eigs00]
type = LocalABO3EigenstressAux
variable = eigs00
index_i = 0
index_j = 0
[../]
[./eigs11]
type = LocalABO3EigenstressAux
variable = eigs11
index_i = 1
index_j = 1
[../]
[./eigs22]
type = LocalABO3EigenstressAux
variable = eigs22
index_i = 2
index_j = 2
[../]
[]
[ScalarKernels]
[./global_strain]
type = GlobalStrain
variable = global_strain
global_strain_uo = global_strain_uo
use_displaced_mesh = false
[../]
[]
[Materials]
[./Landau_P]
type = GenericConstantMaterial
prop_names = 'alpha1 alpha11 alpha12 alpha111 alpha112 alpha123 alpha1111 alpha1112 alpha1122 alpha1123'
prop_values = '-0.027721 -0.64755 0.323 8.004 4.47 4.91 0.0 0.0 0.0 0.0'
[../]
[./Landau_G]
type = GenericConstantMaterial
prop_names = 'G110 G11_G110 G12_G110 G44_G110 G44P_G110'
prop_values = '0.5 0.51 -0.02 0.02 0.0'
[../]
[./mat_C]
type = GenericConstantMaterial
prop_names = 'C11 C12 C44'
prop_values = '275.0 179.0 54.3'
[../]
[./mat_Q]
type = GenericConstantMaterial
prop_names = 'Q11 Q12 Q44'
prop_values = '-0.11 0.045 -0.029'
[../]
[./mat_q]
type = GenericConstantMaterial
prop_names = 'q11 q12 q44'
prop_values = '-14.2 0.74 -1.57'
[../]
[./eigen_strain]
type = ComputeEigenstrain
eigen_base = '0.0 0.0 0 0 0 0 0 0 0'
eigenstrain_name = eigenstrain
prefactor = 0.0
[../]
[./elasticity_tensor_1]
type = ComputeElasticityTensor
fill_method = symmetric9
C_ijkl = '275.0 179.0 179.0 275.0 179.0 275.0 54.3 54.3 54.3'
[../]
[./strain_1]
type = ComputeSmallStrain
global_strain = global_strain
eigenstrain_names = eigenstrain
[../]
[./stress_1]
type = ComputeLinearElasticStress
[../]
[./global_strain]
type = ComputeGlobalStrain
scalar_global_strain = global_strain
global_strain_uo = global_strain_uo
[../]
[./permitivitty_1]
type = GenericConstantMaterial
prop_names = 'permittivity'
prop_values = '0.08854187'
[../]
[]
[Kernels]
[./SolidMechanics]
use_displaced_mesh = false
eigenstrain_name = eigenstrain
[../]
[./bed_x]
type = BulkEnergyDerivativeEighth
variable = polar_x
component = 0
[../]
[./bed_y]
type = BulkEnergyDerivativeEighth
variable = polar_y
component = 1
[../]
[./bed_z]
type = BulkEnergyDerivativeEighth
variable = polar_z
component = 2
[../]
[./walled_x]
type = WallEnergyDerivative
variable = polar_x
component = 0
[../]
[./walled_y]
type = WallEnergyDerivative
variable = polar_y
component = 1
[../]
[./walled_z]
type = WallEnergyDerivative
variable = polar_z
component = 2
[../]
[./electrostr_ux]
type = ElectrostrictiveCouplingDispDerivative
variable = u_x
component = 0
[../]
[./electrostr_uy]
type = ElectrostrictiveCouplingDispDerivative
variable = u_y
component = 1
[../]
[./electrostr_uz]
type = ElectrostrictiveCouplingDispDerivative
variable = u_z
component = 2
[../]
[./electrostr_polar_coupled_x]
type = ElectrostrictiveCouplingPolarDerivative
variable = polar_x
component = 0
[../]
[./electrostr_polar_coupled_y]
type = ElectrostrictiveCouplingPolarDerivative
variable = polar_y
component = 1
[../]
[./electrostr_polar_coupled_z]
type = ElectrostrictiveCouplingPolarDerivative
variable = polar_z
component = 2
[../]
[./polar_x_electric_E]
type = PolarElectricEStrong
variable = potential_E_int
[../]
[./FE_E_int]
type = Electrostatics
variable = potential_E_int
[../]
[./polar_electric_px]
type = PolarElectricPStrong
variable = polar_x
component = 0
[../]
[./polar_electric_py]
type = PolarElectricPStrong
variable = polar_y
component = 1
[../]
[./polar_electric_pz]
type = PolarElectricPStrong
variable = polar_z
component = 2
[../]
[./polar_x_time]
type = TimeDerivativeScaled
variable=polar_x
time_scale = 1.0
[../]
[./polar_y_time]
type = TimeDerivativeScaled
variable=polar_y
time_scale = 1.0
[../]
[./polar_z_time]
type = TimeDerivativeScaled
variable = polar_z
time_scale = 1.0
[../]
[]
[BCs]
[./Periodic]
[./xyz]
auto_direction = 'x y z'
variable = 'u_x u_y u_z polar_x polar_y polar_z'
[../]
[../]
[./boundary_grounding]
type = DirichletBC
boundary = '0 1 2 3 4 5'
variable = potential_E_int
value = 0.0
[../]
[./centerfix_x]
type = DirichletBC
boundary = 100
variable = u_x
value = 0
[../]
[./centerfix_y]
type = DirichletBC
boundary = 100
variable = u_y
value = 0
[../]
[./centerfix_z]
type = DirichletBC
boundary = 100
variable = u_z
value = 0
[../]
[]
[Postprocessors]
[./Fbulk]
type = BulkEnergyEighth
execute_on = 'initial timestep_end'
[../]
[./Fwall]
type = WallEnergy
execute_on = 'initial timestep_end'
[../]
[./Felastic]
type = ElasticEnergy
execute_on = 'initial timestep_end'
use_displaced_mesh = false
[../]
[./Fcoupled]
type = ElectrostrictiveCouplingEnergy
execute_on = 'initial timestep_end'
[../]
[./Felec]
type = ElectrostaticEnergy
execute_on = 'initial timestep_end'
[../]
[./Ftotal]
type = LinearCombinationPostprocessor
pp_names = 'Fbulk Fwall Fcoupled Felec'
pp_coefs = ' 1 1 1 1'
execute_on = 'initial timestep_end'
[../]
[./perc_change]
type = ChangeOverTimePostprocessor
compute_relative_change = true
take_absolute_value = true
postprocessor = Ftotal
execute_on = 'initial timestep_end'
[../]
[]
[UserObjects]
[./global_strain_uo]
type = GlobalATiO3MaterialRVEUserObject
use_displaced_mesh = false
execute_on = 'Initial Linear Nonlinear'
applied_stress_tensor = '0.0 0.0 0.0 0.0 0.0 0.0'
[../]
[./kill]
type = Terminator
expression = 'perc_change <= 1.0e-6'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options = '-snes_ksp_ew'
petsc_options_iname = '-ksp_gmres_restart -snes_atol -snes_rtol -ksp_rtol -pc_type -build_twosided'
petsc_options_value = ' 160 1e-10 1e-8 1e-6 bjacobi allreduce'
[../]
[]
[Executioner]
type = Transient
solve_type = 'PJFNK'
scheme = 'implicit-euler'
dtmin = 1e-13
dtmax = 3.0
l_max_its = 200
[./TimeStepper]
type = IterationAdaptiveDT
optimal_iterations = 8
cutback_factor = 0.75
linear_iteration_ratio = 1000
dt = 0.3
[../]
verbose = true
[]
[Outputs]
print_linear_residuals = false
perf_graph = false
[./out]
type = Exodus
file_base = out_PzEz
elemental_as_nodal = true
[../]
[]