- alpha1The coefficients of the Landau expansion
C++ Type:std::vector<double>
Controllable:No
Description:The coefficients of the Landau expansion
- alpha11The coefficients of the Landau expansion
C++ Type:std::vector<double>
Controllable:No
Description:The coefficients of the Landau expansion
- alpha111The coefficients of the Landau expansion
C++ Type:double
Controllable:No
Description:The coefficients of the Landau expansion
- alpha112The coefficients of the Landau expansion
C++ Type:double
Controllable:No
Description:The coefficients of the Landau expansion
- alpha12The coefficients of the Landau expansion
C++ Type:std::vector<double>
Controllable:No
Description:The coefficients of the Landau expansion
- alpha123The coefficients of the Landau expansion
C++ Type:double
Controllable:No
Description:The coefficients of the Landau expansion
- polar_xThe x component of the polarization
C++ Type:std::vector<VariableName>
Controllable:No
Description:The x component of the polarization
- polar_yThe y component of the polarization
C++ Type:std::vector<VariableName>
Controllable:No
Description:The y component of the polarization
BulkEnergy
The BulkEnergy has not been documented. The content listed below should be used as a starting point for documenting the class, which includes the typical automatic documentation associated with a MooseObject; however, what is contained is ultimately determined by what is necessary to make the documentation clear for users.
Calculates an integral over the local sixth order energy density.
Overview
Example Input File Syntax
Input Parameters
- blockThe list of blocks (ids or names) that this object will be applied
C++ Type:std::vector<SubdomainName>
Controllable:No
Description:The list of blocks (ids or names) that this object will be applied
- execute_onTIMESTEP_ENDThe list of flag(s) indicating when this object should be executed, the available options include NONE, INITIAL, LINEAR, NONLINEAR, TIMESTEP_END, TIMESTEP_BEGIN, MULTIAPP_FIXED_POINT_END, MULTIAPP_FIXED_POINT_BEGIN, FINAL, CUSTOM, ALWAYS.
Default:TIMESTEP_END
C++ Type:ExecFlagEnum
Options:NONE, INITIAL, LINEAR, NONLINEAR, TIMESTEP_END, TIMESTEP_BEGIN, MULTIAPP_FIXED_POINT_END, MULTIAPP_FIXED_POINT_BEGIN, FINAL, CUSTOM, ALWAYS, TRANSFER
Controllable:No
Description:The list of flag(s) indicating when this object should be executed, the available options include NONE, INITIAL, LINEAR, NONLINEAR, TIMESTEP_END, TIMESTEP_BEGIN, MULTIAPP_FIXED_POINT_END, MULTIAPP_FIXED_POINT_BEGIN, FINAL, CUSTOM, ALWAYS.
- len_scale1the len_scale of the unit
Default:1
C++ Type:double
Controllable:No
Description:the len_scale of the unit
- polar_zThe z component of the polarization
C++ Type:std::vector<VariableName>
Controllable:No
Description:The z component of the polarization
- 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
- 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).
- 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.
- 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
- 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
- outputsVector of output names where you would like to restrict the output of variables(s) associated with this object
C++ Type:std::vector<OutputName>
Controllable:No
Description:Vector of output names where you would like to restrict the output of variables(s) associated with this object
- 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
(examples/other/PZT_nanowire_test.i)
[Mesh]
file = exodus_nanowire_rad20_h60.e
[]
[GlobalParams]
len_scale = 1.0
alpha1 = -0.14937
alpha11 = -0.0305
alpha111 = 0.2475
alpha12 = 0.632
alpha112 = 0.9684
alpha123 = -4.901
G110 = 0.173
G11_G110 = 2.0
G12_G110 = 0
G44_G110 = 1.0
G44P_G110 = 1.0
polar_x = polar_x
polar_y = polar_y
polar_z = polar_z
potential_int = potential_int
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
displacements = 'disp_x disp_y disp_z'
prefactor = 0.00 #negative = tension, positive = compression
[]
[Variables]
[./polar_x]
block = '1'
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = -0.5e-5
max = 0.5e-5
seed = 1
[../]
[../]
[./polar_y]
block = '1'
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = -0.5e-5
max = 0.5e-5
seed = 1
[../]
[../]
[./polar_z]
block = '1'
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = -0.5e-5
max = 0.5e-5
seed = 1
[../]
[../]
[./potential_int]
order = FIRST
family = LAGRANGE
block = '1 2'
[./InitialCondition]
type = RandomIC
min = -0.5e-5
max = 0.5e-5
seed = 1
[../]
[../]
[./disp_x]
order = FIRST
family = LAGRANGE
block = '1 2'
[../]
[./disp_y]
order = FIRST
family = LAGRANGE
block = '1 2'
[../]
[./disp_z]
order = FIRST
family = LAGRANGE
block = '1 2'
[../]
[]
[AuxVariables]
[./stress_xx_elastic]
order = CONSTANT
family = MONOMIAL
#initial_from_file_var = stress_xx
[../]
[./stress_yy_elastic]
order = CONSTANT
family = MONOMIAL
#initial_from_file_var = stress_yy
[../]
[./stress_xy_elastic]
order = CONSTANT
family = MONOMIAL
#initial_from_file_var = stress_xy
[../]
[./stress_xz_elastic]
order = CONSTANT
family = MONOMIAL
#initial_from_file_var = stress_xz
[../]
[./stress_zz_elastic]
order = CONSTANT
family = MONOMIAL
#initial_from_file_var = stress_zz
[../]
[./stress_yz_elastic]
order = CONSTANT
family = MONOMIAL
#initial_from_file_var = stress_yz
[../]
[./strain_xx_elastic]
order = CONSTANT
family = MONOMIAL
#initial_from_file_var = strain_xx
[../]
[./strain_yy_elastic]
order = CONSTANT
family = MONOMIAL
#initial_from_file_var = strain_yy
[../]
[./strain_xy_elastic]
order = CONSTANT
family = MONOMIAL
#initial_from_file_var = strain_xy
[../]
[./strain_xz_elastic]
order = CONSTANT
family = MONOMIAL
#initial_from_file_var = strain_xz
[../]
[./strain_zz_elastic]
order = CONSTANT
family = MONOMIAL
#initial_from_file_var = strain_zz
[../]
[./strain_yz_elastic]
order = CONSTANT
family = MONOMIAL
#initial_from_file_var = strain_yz
[../]
[./chern]
order = CONSTANT
family = MONOMIAL
[../]
[./chernMag]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./cherndens]
type = ChernSimonsDensity
variable = chern
[../]
[./cherndensMag]
type = ChernSimonsDensityMag
block = '1'
variable = chernMag
[../]
[./matl_e11]
type = RankTwoAux
rank_two_tensor = elastic_strain
index_i = 0
index_j = 0
variable = strain_xx_elastic
execute_on = 'timestep_end'
[../]
[./matl_e12]
type = RankTwoAux
rank_two_tensor = elastic_strain
index_i = 0
index_j = 1
variable = strain_xy_elastic
execute_on = 'timestep_end'
[../]
[./matl_e13]
type = RankTwoAux
rank_two_tensor = elastic_strain
index_i = 0
index_j = 2
variable = strain_xz_elastic
execute_on = 'timestep_end'
[../]
[./matl_e22]
type = RankTwoAux
rank_two_tensor = elastic_strain
index_i = 1
index_j = 1
variable = strain_yy_elastic
execute_on = 'timestep_end'
[../]
[./matl_e23]
type = RankTwoAux
rank_two_tensor = elastic_strain
index_i = 1
index_j = 2
variable = strain_yz_elastic
execute_on = 'timestep_end'
[../]
[./matl_e33]
type = RankTwoAux
rank_two_tensor = elastic_strain
index_i = 2
index_j = 2
variable = strain_zz_elastic
execute_on = 'timestep_end'
[../]
[./matl_s11]
type = RankTwoAux
rank_two_tensor = stress
index_i = 0
index_j = 0
variable = stress_xx_elastic
execute_on = 'timestep_end'
[../]
[./matl_s12]
type = RankTwoAux
rank_two_tensor = stress
index_i = 0
index_j = 1
variable = stress_xy_elastic
execute_on = 'timestep_end'
[../]
[./matl_s13]
type = RankTwoAux
rank_two_tensor = stress
index_i = 0
index_j = 2
variable = stress_xz_elastic
execute_on = 'timestep_end'
[../]
[./matl_s22]
type = RankTwoAux
rank_two_tensor = stress
index_i = 1
index_j = 1
variable = stress_yy_elastic
execute_on = 'timestep_end'
[../]
[./matl_s23]
type = RankTwoAux
rank_two_tensor = stress
index_i = 1
index_j = 2
variable = stress_yz_elastic
execute_on = 'timestep_end'
[../]
[./matl_s33]
type = RankTwoAux
rank_two_tensor = stress
index_i = 2
index_j = 2
variable = stress_zz_elastic
execute_on = 'timestep_end'
[../]
[]
[Materials]
[./eigen_strain_zz] #Use for stress-free strain (ie epitaxial)
type = ComputeEigenstrain
block = '1 2'
# eigen_base = 'exx exy exz eyx eyy eyz ezx ezy ezz'
eigen_base = '1 0 0 0 1 0 0 0 0'
eigenstrain_name = eigenstrain
[../]
[./elasticity_tensor_1]
type = ComputeElasticityTensor
fill_method = symmetric9
#from MaterialsProject
C_ijkl = '281 115.74 115.74 281 115.74 281 97.18 97.18 97.18'
block = '1'
[../]
[./strain_1]
type = ComputeSmallStrain
block = '1'
eigenstrain_names = eigenstrain
[../]
[./stress_1]
type = ComputeLinearElasticStress
block = '1'
[../]
[./slab_ferroelectric]
block = '1'
type = ComputeElectrostrictiveTensor
Q_mnkl = '0.0842 -0.02446 -0.02446 0.0842 -0.02446 0.0842 0.06417 0.06417 0.06417'
C_ijkl = '281 115.74 115.74 281 115.74 281 97.18 97.18 97.18'
[../]
[./elasticity_tensor_2]
type = ComputeElasticityTensor
#averaged from BulkMod
C_ijkl = '319 99.6 99.6 319 99.6 319 109.53 109.53 109.53'
fill_method = symmetric9
block = '2'
[../]
[./strain_2]
type = ComputeSmallStrain
block = '2'
eigenstrain_names = eigenstrain
[../]
[./stress_2]
type = ComputeLinearElasticStress
block = '2'
[../]
[]
[Kernels]
#Elastic problem
[./TensorMechanics]
#This is an action block
[../]
#Bulk energy density
[./bed_x]
type = BulkEnergyDerivativeSixth
variable = polar_x
component = 0
[../]
[./bed_y]
type = BulkEnergyDerivativeSixth
variable = polar_y
component = 1
[../]
[./bed_z]
type = BulkEnergyDerivativeSixth
variable = polar_z
component = 2
[../]
##Wall energy penalty
[./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
[../]
##Polarization-strain coupling
[./ferroelectriccouplingp_xx]
type = FerroelectricCouplingP
variable = polar_x
component = 0
[../]
[./ferroelectriccouplingp_yy]
type = FerroelectricCouplingP
variable = polar_y
component = 1
[../]
[./ferroelectriccouplingp_zz]
type = FerroelectricCouplingP
variable = polar_z
component = 2
[../]
[./ferroelectriccouplingX_xx]
type = FerroelectricCouplingX
block = '1'
variable = disp_x
component = 0
[../]
[./ferroelectriccouplingX_yy]
type = FerroelectricCouplingX
block = '1'
variable = disp_y
component = 1
[../]
[./ferroelectriccouplingX_zz]
type = FerroelectricCouplingX
block = '1'
variable = disp_z
component = 2
[../]
##Electrostatics
[./polar_x_electric_E]
type = PolarElectricEStrong
variable = potential_int
permittivity = 0.08854187
[../]
[./FE_E_int]
type = Electrostatics
variable = potential_int
block = '1'
permittivity = 0.08854187
[../]
[./DIE_E_int]
type = Electrostatics
variable = potential_int
block = '2'
permittivity = 2.6562561
[../]
[./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
[../]
##Time dependence
[./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]
[./potential_int_1]
type = DirichletBC
variable = potential_int
boundary = '5'
value = -0.00001
[../]
[./potential_int_2]
type = DirichletBC
variable = potential_int
boundary = '6'
value = -0.00001
[../]
[./disp_x]
type = DirichletBC
variable = disp_x
boundary = '1 2 5 6'
value = 0
[../]
[./disp_y]
type = DirichletBC
variable = disp_y
boundary = '1 2 5 6'
value = 0
[../]
[./disp_z]
type = DirichletBC
variable = disp_z
boundary = '1 2 5 6'
value = 0
[../]
[]
[Postprocessors]
[./avgChern]
block = '1'
type = ElementAverageValue
variable = chern
[../]
[./avgchernMag]
block = '1'
type = ElementAverageValue
variable = chernMag
[../]
[./Fbulk]
type = BulkEnergy
block = '1'
execute_on = 'timestep_end'
[../]
[./Fwall]
type = WallEnergy
block = '1'
execute_on = 'timestep_end'
[../]
[./Felastic]
type = ElasticEnergy
block = '1 2'
execute_on = 'timestep_end'
[../]
[./Fcoupled]
block = '1'
type = CoupledEnergy
execute_on = 'timestep_end'
[../]
[./Felec]
block = '1'
type = ElectrostaticEnergy
permittivity = 0.08854187
execute_on = 'timestep_end'
[../]
[./Ftotal]
type = TotalEnergyFlow
Fbulk = Fbulk
Fwall = Fwall
Fcoupled = Fcoupled
Felec = Felec
execute_on = 'timestep_end'
[../]
[./perc_change]
type = PercentChangePostprocessor
postprocessor = Ftotal
[../]
[]
[UserObjects]
[./kill]
type = Terminator
expression = 'perc_change <= 2.0e-3'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options = '-snes_view -snes_linesearch_monitor -snes_converged_reason -ksp_converged_reason'
petsc_options_iname = '-ksp_gmres_restart -snes_atol -snes_rtol -ksp_rtol -pc_type'
petsc_options_value = ' 121 1e-10 1e-6 1e-6 bjacobi'
[../]
[]
[Executioner]
type = Transient
[./TimeStepper]
type = IterationAdaptiveDT
dt = 0.7
#iteration_window = 3
optimal_iterations = 6 #should be 5 probably
growth_factor = 1.4
linear_iteration_ratio = 1000
cutback_factor = 0.8
[../]
solve_type = 'NEWTON' #"PJFNK, JFNK, NEWTON"
scheme = 'implicit-euler' #"implicit-euler, explicit-euler, crank-nicolson, bdf2, rk-2"
dtmin = 1e-13
dtmax = 0.7
[]
[Outputs]
print_linear_residuals = true
print_perf_log = true
[./out]
type = Exodus
file_base = out_PZT_nanowire_inSTO_test
elemental_as_nodal = true
interval = 8
[../]
[./outcsv]
type = CSV
file_base = out_PZT_nanowire_inSTO_test
[../]
[]
(test/tests/coupled/PTOtest_3D.i)
[Mesh]
type = GeneratedMesh
dim = 3
nx = 6
ny = 6
nz = 4
xmin = -1.5
xmax = 1.5
ymin = -1.5
ymax = 1.5
zmin = -1
zmax = 1
elem_type = HEX8
[]
[GlobalParams]
len_scale = 1.0
alpha1 = -0.1722883 # (3.766(T-765.1)*10^5) C^{-2} nm^2 (T = 293 K)
alpha11 = -0.07253
alpha111 = 0.26
alpha12 = 0.75
alpha112 = 0.61
alpha123 = -3.67
polar_x = polar_x
polar_y = polar_y
polar_z = polar_z
potential_E_int = potential_E_int
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
displacements = 'disp_x disp_y disp_z'
prefactor = 0.01 #negative = tension,positive = compression
[]
[Variables]
[./polar_x]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = -0.01e-5
max = 0.01e-5
seed = 5
legacy_generator = true
[../]
[../]
[./polar_y]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = -0.01e-5
max = 0.01e-5
seed = 5
legacy_generator = true
[../]
[../]
[./polar_z]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = -0.01e-5
max = 0.01e-5
seed = 5
legacy_generator = true
[../]
[../]
[./potential_E_int]
order = FIRST
family = LAGRANGE
[../]
[./disp_x]
order = FIRST
family = LAGRANGE
[../]
[./disp_y]
order = FIRST
family = LAGRANGE
[../]
[./disp_z]
order = FIRST
family = LAGRANGE
[../]
[]
[Materials]
[./Landau_G]
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'
[../]
[./eigen_strain_zz] #Use for stress-free strain (ie epitaxial)
type = ComputeEigenstrain
block = '0'
# eigen_base = 'exx exy exz eyx eyy eyz ezx ezy ezz'
eigen_base = '1 0 0 0 1 0 0 0 0'
eigenstrain_name = eigenstrain
[../]
[./elasticity_tensor_1]
type = ComputeElasticityTensor
fill_method = symmetric9
C_ijkl = '380. 150. 150. 380. 150. 380. 110. 110. 110.'
[../]
[./strain_1]
type = ComputeSmallStrain
eigenstrain_names = eigenstrain
[../]
[./stress_1]
type = ComputeLinearElasticStress
[../]
[./slab_ferroelectric]
type = ComputeElectrostrictiveTensor
Q_mnkl = '-0.089 0.026 0.026 -0.089 0.026 -0.089 -0.03375 -0.03375 -0.03375'
C_ijkl = '380. 150. 150. 380. 150. 380. 110. 110. 110.'
[../]
[./permitivitty_1]
type = GenericConstantMaterial
prop_names = 'permittivity'
prop_values = '0.08854187'
[../]
[]
[Kernels]
#Elastic problem
[./TensorMechanics]
[../]
[./bed_x]
type = BulkEnergyDerivativeSixth
variable = polar_x
component = 0
[../]
[./bed_y]
type = BulkEnergyDerivativeSixth
variable = polar_y
component = 1
[../]
[./bed_z]
type = BulkEnergyDerivativeSixth
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
[../]
[./ferroelectriccouplingp_xx]
type = FerroelectricCouplingP
variable = polar_x
component = 0
[../]
[./ferroelectriccouplingp_yy]
type = FerroelectricCouplingP
variable = polar_y
component = 1
[../]
[./ferroelectriccouplingp_zz]
type = FerroelectricCouplingP
variable = polar_z
component = 2
[../]
[./ferroelectriccouplingX_xx]
type = FerroelectricCouplingX
variable = disp_x
component = 0
[../]
[./ferroelectriccouplingX_yy]
type = FerroelectricCouplingX
variable = disp_y
component = 1
[../]
[./ferroelectriccouplingX_zz]
type = FerroelectricCouplingX
variable = disp_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]
[./potential_E_int_front]
type = DirichletBC
boundary = 'front'
value = 0.0001
variable = potential_E_int
[../]
[./potential_E_int_back]
type = DirichletBC
boundary = 'back'
value = 0.0001
variable = potential_E_int
[../]
[]
[Postprocessors]
[./Fbulk]
type = BulkEnergy
execute_on = 'initial timestep_end'
[../]
[./Fwall]
type = WallEnergy
execute_on = 'initial timestep_end'
[../]
[./Felastic]
type = ElasticEnergy
execute_on = 'initial timestep_end'
[../]
[./Fcoupled]
type = ElectrostrictiveEnergy
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 = PercentChangePostprocessor
postprocessor = Ftotal
execute_on = 'initial timestep_end'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options_iname = '-ksp_gmres_restart -snes_atol -snes_rtol -ksp_rtol -pc_type'
petsc_options_value = ' 121 1e-10 1e-8 1e-6 bjacobi'
[../]
[]
[Executioner]
type = Transient
solve_type = 'NEWTON'
scheme = 'implicit-euler'
dtmin = 1e-13
dtmax = 0.35
num_steps = 15
[]
[Outputs]
print_linear_residuals = false
[./out]
type = Exodus
file_base = outPTOchunk_test
elemental_as_nodal = true
interval = 1
[../]
[]
(test/tests/ics/PTOtest_fluc.i)
[Mesh]
type = GeneratedMesh
dim = 3
nx = 10
ny = 10
nz = 7
xmin = -4
xmax = 4
ymin = -4
ymax = 4
zmin = -3
zmax = 3
elem_type = HEX8
[]
[GlobalParams]
len_scale = 1.0
alpha1 = -0.1722883
alpha11 = -0.07253
alpha111 = 0.26
alpha12 = 0.75
alpha112 = 0.61
alpha123 = -3.67
polar_x = polar_x
polar_y = polar_y
polar_z = polar_z
potential_E_int = potential_E_int
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
displacements = 'disp_x disp_y disp_z'
prefactor = 0.01 #negative = tension, positive = compression
[]
[Variables]
[./polar_x]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = FluctuationsIC
epsilon = 1.0e-5
q1 = '354 1005 645'
q2 = '715 1065 1132'
q3 = '391 305 1106'
q4 = '1053 1116 627'
h = 0.22
[../]
[../]
[./polar_y]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = FluctuationsIC
epsilon = 1.0e-5
q1 = '354 850 10'
q2 = '715 28 5'
q3 = '391 305 1106'
q4 = '653 1116 627'
h = 0.15
[../]
[../]
[./polar_z]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = FluctuationsIC
epsilon = 1.0e-5
q1 = '860 165 645'
q2 = '715 665 1332'
q3 = '361 15 706'
q4 = '253 1116 627'
h = 0.05
[../]
[../]
[./potential_E_int]
order = FIRST
family = LAGRANGE
[../]
[./disp_x]
order = FIRST
family = LAGRANGE
[../]
[./disp_y]
order = FIRST
family = LAGRANGE
[../]
[./disp_z]
order = FIRST
family = LAGRANGE
[../]
[]
[Materials]
[./Landau_G]
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'
[../]
[./eigen_strain_zz] #Use for stress-free strain (ie epitaxial)
type = ComputeEigenstrain
block = '0'
# eigen_base = 'exx exy exz eyx eyy eyz ezx ezy ezz'
eigen_base = '1 0 0 0 1 0 0 0 0'
eigenstrain_name = eigenstrain
[../]
[./elasticity_tensor_1]
type = ComputeElasticityTensor
fill_method = symmetric9
C_ijkl = '380. 150. 150. 380. 150. 380. 110. 110. 110.'
[../]
[./strain_1]
type = ComputeSmallStrain
eigenstrain_names = eigenstrain
[../]
[./stress_1]
type = ComputeLinearElasticStress
[../]
[./slab_ferroelectric]
type = ComputeElectrostrictiveTensor
Q_mnkl = '-0.089 0.026 0.026 -0.089 0.026 -0.089 -0.03375 -0.03375 -0.03375'
C_ijkl = '380. 150. 150. 380. 150. 380. 110. 110. 110.'
[../]
[./permitivitty_1]
type = GenericConstantMaterial
prop_names = 'permittivity'
prop_values = '0.08854187'
[../]
[]
[Kernels]
[./TensorMechanics]
[../]
[./bed_x]
type = BulkEnergyDerivativeSixth
variable = polar_x
component = 0
[../]
[./bed_y]
type = BulkEnergyDerivativeSixth
variable = polar_y
component = 1
[../]
[./bed_z]
type = BulkEnergyDerivativeSixth
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
[../]
[./ferroelectriccouplingp_xx]
type = FerroelectricCouplingP
variable = polar_x
component = 0
[../]
[./ferroelectriccouplingp_yy]
type = FerroelectricCouplingP
variable = polar_y
component = 1
[../]
[./ferroelectriccouplingp_zz]
type = FerroelectricCouplingP
variable = polar_z
component = 2
[../]
[./ferroelectriccouplingX_xx]
type = FerroelectricCouplingX
variable = disp_x
component = 0
[../]
[./ferroelectriccouplingX_yy]
type = FerroelectricCouplingX
variable = disp_y
component = 1
[../]
[./ferroelectriccouplingX_zz]
type = FerroelectricCouplingX
variable = disp_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]
[./disp_x_front]
type = DirichletBC
boundary = 'front'
value = 0.0
variable = disp_x
[../]
[./disp_y_front]
type = DirichletBC
boundary = 'front'
value = 0.0
variable = disp_y
[../]
[./disp_z_front]
type = DirichletBC
boundary = 'front'
value = 0.0
variable = disp_z
[../]
[./potential_E_int_front]
type = DirichletBC
boundary = 'front'
value = 0.0001
variable = potential_E_int
[../]
[./potential_E_int_back]
type = DirichletBC
boundary = 'back'
value = 0.0001
variable = potential_E_int
[../]
[./disp_x_back]
type = DirichletBC
boundary = 'back'
value = 0.0
variable = disp_x
[../]
[./disp_y_back]
type = DirichletBC
boundary = 'back'
value = 0.0
variable = disp_y
[../]
[./disp_z_back]
type = DirichletBC
boundary = 'back'
value = 0.0
variable = disp_z
[../]
[]
[Postprocessors]
[./Fbulk]
type = BulkEnergy
execute_on = 'initial timestep_end'
[../]
[./Fwall]
type = WallEnergy
execute_on = 'initial timestep_end'
[../]
[./Felastic]
type = ElasticEnergy
execute_on = 'initial timestep_end'
[../]
[./Fcoupled]
type = ElectrostrictiveEnergy
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 = PercentChangePostprocessor
postprocessor = Ftotal
execute_on = 'initial timestep_end'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options_iname = '-ksp_gmres_restart -snes_rtol -ksp_rtol -pc_type'
petsc_options_value = ' 121 1e-6 1e-8 bjacobi'
[../]
[]
[Executioner]
type = Transient
solve_type = 'NEWTON'
scheme = 'implicit-euler'
dtmin = 1e-13
dtmax = 0.1
num_steps = 5
[]
[Outputs]
print_linear_residuals = false
[./out]
type = Exodus
file_base = outPTO_test_fluct
elemental_as_nodal = true
interval = 1
[../]
[]
(test/tests/coupled/PTOtest_2D.i)
[Mesh]
type = GeneratedMesh
dim = 2
nx = 32
ny = 32
xmin = -8
xmax = 8
ymin = -8
ymax = 8
[]
[GlobalParams]
len_scale = 1.0
alpha1 = -0.1722883 # (3.766(T-765.1)*10^5) C^{-2} nm^2 (T = 293 K)
alpha11 = -0.07253
alpha111 = 0.26
alpha12 = 0.75
alpha112 = 0.61
alpha123 = -3.67
polar_x = polar_x
polar_y = polar_y
potential_E_int = potential_E_int
disp_x = disp_x
disp_y = disp_y
displacements = 'disp_x disp_y'
prefactor = 0.0
[]
[Variables]
[./polar_x]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = -0.01e-4
max = 0.01e-4
seed = 5
legacy_generator = true
[../]
[../]
[./polar_y]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = -0.01e-4
max = 0.01e-4
seed = 5
legacy_generator = true
[../]
[../]
[./potential_E_int]
order = FIRST
family = LAGRANGE
[../]
[./disp_x]
order = FIRST
family = LAGRANGE
[../]
[./disp_y]
order = FIRST
family = LAGRANGE
[../]
[]
[Materials]
[./Landau_G]
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'
[../]
[./eigen_strain_zz] #Use for stress-free strain (ie epitaxial)
type = ComputeEigenstrain
block = '0'
# eigen_base = 'exx exy exz eyx eyy eyz ezx ezy ezz'
eigen_base = '1 0 0 0 1 0 0 0 0'
eigenstrain_name = eigenstrain
[../]
[./elasticity_tensor_1]
type = ComputeElasticityTensor
fill_method = symmetric9
C_ijkl = '380. 150. 150. 380. 150. 380. 110. 110. 110.'
[../]
[./strain_1]
type = ComputeSmallStrain
eigenstrain_names = eigenstrain
[../]
[./stress_1]
type = ComputeLinearElasticStress
[../]
[./slab_ferroelectric]
type = ComputeElectrostrictiveTensor
Q_mnkl = '-0.089 0.026 0.026 -0.089 0.026 -0.089 -0.03375 -0.03375 -0.03375'
C_ijkl = '380. 150. 150. 380. 150. 380. 110. 110. 110.'
[../]
[./permitivitty_1]
type = GenericConstantMaterial
prop_names = 'permittivity'
prop_values = '0.08854187'
[../]
[]
[Kernels]
#Elastic problem
[./TensorMechanics]
[../]
[./bed_x]
type = BulkEnergyDerivativeSixth
variable = polar_x
component = 0
[../]
[./bed_y]
type = BulkEnergyDerivativeSixth
variable = polar_y
component = 1
[../]
[./walled_x]
type = WallEnergyDerivative
variable = polar_x
component = 0
[../]
[./walled_y]
type = WallEnergyDerivative
variable = polar_y
component = 1
[../]
[./ferroelectriccouplingp_xx]
type = FerroelectricCouplingP
variable = polar_x
component = 0
[../]
[./ferroelectriccouplingp_yy]
type = FerroelectricCouplingP
variable = polar_y
component = 1
[../]
[./ferroelectriccouplingX_xx]
type = FerroelectricCouplingX
variable = disp_x
component = 0
[../]
[./ferroelectriccouplingX_yy]
type = FerroelectricCouplingX
variable = disp_y
component = 1
[../]
[./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_x_time]
type = TimeDerivativeScaled
variable=polar_x
time_scale = 1.0
[../]
[./polar_y_time]
type = TimeDerivativeScaled
variable=polar_y
time_scale = 1.0
[../]
[]
[BCs]
[./potential_E_int_front]
type = DirichletBC
boundary = 'top'
value = 0.0001
variable = potential_E_int
[../]
[./potential_E_int_back]
type = DirichletBC
boundary = 'bottom'
value = 0.0001
variable = potential_E_int
[../]
[./disp_x_back]
type = DirichletBC
boundary = 'top'
value = 0.0
variable = disp_x
[../]
[./disp_y_back]
type = DirichletBC
boundary = 'top'
value = 0.0
variable = disp_y
[../]
[]
[Postprocessors]
[./Fbulk]
type = BulkEnergy
execute_on = 'initial timestep_end'
[../]
[./Fwall]
type = WallEnergy
execute_on = 'initial timestep_end'
[../]
[./Felastic]
type = ElasticEnergy
execute_on = 'initial timestep_end'
[../]
[./Fcoupled]
type = ElectrostrictiveEnergy
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 = PercentChangePostprocessor
postprocessor = Ftotal
execute_on = 'initial timestep_end'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options_iname = '-ksp_gmres_restart -snes_atol -snes_rtol -ksp_rtol -pc_type'
petsc_options_value = ' 121 1e-10 1e-8 1e-6 bjacobi'
[../]
[]
[Executioner]
type = Transient
solve_type = 'NEWTON'
scheme = 'implicit-euler'
#dt = 0.5
dtmin = 1e-13
dtmax = 0.1
num_steps = 10
[]
[Outputs]
print_linear_residuals = false
[./out]
type = Exodus
file_base = outPTOchunk_test_2D
elemental_as_nodal = true
interval = 1
[../]
[]
(test/tests/electrostatics/Ferro_para_superlattice.i)
#############################################################
# TEMPORARILY DEACTIVATED
############################################################
#alpha1 alpha3
alpha1 = '-0.0827836 -0.250056'
#alpha11 alpha33
alpha11 = '0.42229 0.04990909090909092'
#alpha12 alpha13
alpha12 = '0.734181277056277 0.4521818181818182'
alpha111 = 0.0#0.26
alpha112 = 0.0#0.61
alpha123 = 0.0#-3.7
alpha1_para = '0.1854662 0.1854662'
alpha11_para = '0.0 0.0'
alpha12_para = '0.0 0.0'
alpha111_para = 0.0
alpha112_para = 0.0
alpha123_para = 0.0
G110 = 0.173
G11_G110 = 1.6
G12_G110 = 0
G44_G110 = 1.6
G44P_G110 = 1.6
G110_para = 0.173
G11_G110_para = 1.6
G12_G110_para = 0
G44_G110_para = 1.6
G44P_G110_para = 1.6
permittivity_electrostatic = 0.0885
permittivity_electrostatic_para = 0.0885
permitivitty_depol = 0.00885
permitivitty_depol_para = 0.00885
[Mesh]
type = FileMesh
file = template_mesh.msh
[]
[GlobalParams]
len_scale = 1.0
[]
[Variables]
[./FE_polar_x]
order = FIRST
family = LAGRANGE
block = 'ferro_volume'
[./InitialCondition]
type = RandomIC
min = -0.01e-5
max = 0.01e-5
seed = 5
legacy_generator = true
[../]
[../]
[./FE_polar_y]
order = FIRST
family = LAGRANGE
block = 'ferro_volume'
[./InitialCondition]
type = RandomIC
min = -0.01e-5
max = 0.01e-5
seed = 5
legacy_generator = true
[../]
[../]
[./FE_polar_z]
order = FIRST
family = LAGRANGE
block = 'ferro_volume'
[./InitialCondition]
type = RandomIC
min = -0.01e-5
max = 0.01e-5
seed = 5
legacy_generator = true
[../]
[../]
[./PE_polar_x]
order = FIRST
family = LAGRANGE
block = 'para_bottom_volume para_top_volume'
[./InitialCondition]
type = RandomIC
min = -0.01e-5
max = 0.01e-5
seed = 5
legacy_generator = true
[../]
[../]
[./PE_polar_y]
order = FIRST
family = LAGRANGE
block = 'para_bottom_volume para_top_volume'
[./InitialCondition]
type = RandomIC
min = -0.01e-5
max = 0.01e-5
seed = 5
legacy_generator = true
[../]
[../]
[./PE_polar_z]
order = FIRST
family = LAGRANGE
block = 'para_bottom_volume para_top_volume'
[./InitialCondition]
type = RandomIC
min = -0.01e-5
max = 0.01e-5
seed = 5
legacy_generator = true
[../]
[../]
[./potential_E_int]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = RandomIC
min = -0.01e-5
max = 0.01e-5
seed = 5
legacy_generator = true
[../]
[../]
[]
[Kernels]
#FERROELECTRIC BLOCK
[./bed_x_ferro]
type = BulkEnergyDerivativeSixth
block = 'ferro_volume'
variable = FE_polar_x
polar_x = FE_polar_x
polar_y = FE_polar_y
polar_z = FE_polar_z
alpha1 = ${alpha1}
alpha11 = ${alpha11}
alpha12 = ${alpha12}
alpha111 = ${alpha111}
alpha112 = ${alpha112}
alpha123 = ${alpha123}
component = 0
[../]
[./bed_y_ferro]
type = BulkEnergyDerivativeSixth
block = 'ferro_volume'
variable = FE_polar_y
polar_x = FE_polar_x
polar_y = FE_polar_y
polar_z = FE_polar_z
alpha1 = ${alpha1}
alpha11 = ${alpha11}
alpha12 = ${alpha12}
alpha111 = ${alpha111}
alpha112 = ${alpha112}
alpha123 = ${alpha123}
component = 1
[../]
[./bed_z_ferro]
type = BulkEnergyDerivativeSixth
block = 'ferro_volume'
variable = FE_polar_z
polar_x = FE_polar_x
polar_y = FE_polar_y
polar_z = FE_polar_z
alpha1 = ${alpha1}
alpha11 = ${alpha11}
alpha12 = ${alpha12}
alpha111 = ${alpha111}
alpha112 = ${alpha112}
alpha123 = ${alpha123}
component = 2
[../]
[./polar_x_electric_E_ferro]
type = PolarElectricEStrong
block = 'ferro_volume'
polar_x = FE_polar_x
polar_y = FE_polar_y
polar_z = FE_polar_z
variable = potential_E_int
[../]
[./FE_E_int_ferro]
type = Electrostatics
block = 'ferro_volume'
variable = potential_E_int
permittivity = ${permittivity_electrostatic}
[../]
[./polar_electric_px_ferro]
type = PolarElectricPStrong
block = 'ferro_volume'
variable = FE_polar_x
potential_E_int = potential_E_int
component = 0
[../]
[./polar_electric_py_ferro]
type = PolarElectricPStrong
block = 'ferro_volume'
variable = FE_polar_y
potential_E_int = potential_E_int
component = 1
[../]
[./polar_electric_pz_ferro]
type = PolarElectricPStrong
block = 'ferro_volume'
variable = FE_polar_z
potential_E_int = potential_E_int
component = 2
[../]
G110 = 0.173
G11_G110 = 1.6
G12_G110 = 0
G44_G110 = 1.6
G44P_G110 = 1.6
G110_para = 0.173
G11_G110_para = 1.6
G12_G110_para = 0
G44_G110_para = 1.6
G44P_G110_para = 1.6
[./walled_x_ferro]
type = WallEnergyDerivative
block = 'ferro_volume'
variable = FE_polar_x
polar_x = FE_polar_x
polar_y = FE_polar_y
polar_z = FE_polar_z
component = 0
[../]
[./walled_y_ferro]
type = WallEnergyDerivative
block = 'ferro_volume'
variable = FE_polar_y
polar_x = FE_polar_x
polar_y = FE_polar_y
polar_z = FE_polar_z
component = 1
[../]
[./walled_z_ferro]
type = WallEnergyDerivative
block = 'ferro_volume'
variable = FE_polar_z
polar_x = FE_polar_x
polar_y = FE_polar_y
polar_z = FE_polar_z
component = 2
[../]
[./polar_x_time_ferro]
type = TimeDerivativeScaled
block = 'ferro_volume'
variable = FE_polar_x
[../]
[./polar_y_time_ferro]
type = TimeDerivativeScaled
block = 'ferro_volume'
variable = FE_polar_y
[../]
[./polar_z_time_ferro]
type = TimeDerivativeScaled
block = 'ferro_volume'
variable = FE_polar_z
[../]
#PARAELECTRIC BLOCK
[./bed_xp_para]
alpha1111 = 0
alpha1112 = 0
alpha1122 = 0
alpha1123 = 0
type = BulkEnergyDerivativeSixth
block = 'para_bottom_volume para_top_volume'
variable = PE_polar_x
polar_x = PE_polar_x
polar_y = PE_polar_y
polar_z = PE_polar_z
alpha1 = ${alpha1_para}
alpha11 = ${alpha11_para}
alpha12 = ${alpha12_para}
alpha111 = ${alpha111_para}
alpha112 = ${alpha112_para}
alpha123 = ${alpha123_para}
component = 0
[../]
[./bed_yp_para]
alpha1111 = 0
alpha1112 = 0
alpha1122 = 0
alpha1123 = 0
type = BulkEnergyDerivativeSixth
block = 'para_bottom_volume para_top_volume'
variable = PE_polar_y
polar_x = PE_polar_x
polar_y = PE_polar_y
polar_z = PE_polar_z
alpha1 = ${alpha1_para}
alpha11 = ${alpha11_para}
alpha12 = ${alpha12_para}
alpha111 = ${alpha111_para}
alpha112 = ${alpha112_para}
alpha123 = ${alpha123_para}
component = 1
[../]
[./bed_zp_para]
alpha1111 = 0
alpha1112 = 0
alpha1122 = 0
alpha1123 = 0
type = BulkEnergyDerivativeSixth
block = 'para_bottom_volume para_top_volume'
variable = PE_polar_z
polar_x = PE_polar_x
polar_y = PE_polar_y
polar_z = PE_polar_z
alpha1 = ${alpha1_para}
alpha11 = ${alpha11_para}
alpha12 = ${alpha12_para}
alpha111 = ${alpha111_para}
alpha112 = ${alpha112_para}
alpha123 = ${alpha123_para}
component = 2
[../]
[./polar_x_electric_Ep_para]
type = PolarElectricEStrong
block = 'para_bottom_volume para_top_volume'
polar_x = PE_polar_x
polar_y = PE_polar_y
polar_z = PE_polar_z
variable = potential_E_int
[../]
[./FE_E_intp_para]
type = Electrostatics
block = 'para_bottom_volume para_top_volume'
variable = potential_E_int
permittivity = ${permittivity_electrostatic_para}
[../]
[./polar_electric_pxp_para]
type = PolarElectricPStrong
block = 'para_bottom_volume para_top_volume'
variable = PE_polar_x
potential_E_int = potential_E_int
component = 0
[../]
[./polar_electric_pyp_para]
type = PolarElectricPStrong
block = 'para_bottom_volume para_top_volume'
variable = PE_polar_y
potential_E_int = potential_E_int
component = 1
[../]
[./polar_electric_pzp_para]
type = PolarElectricPStrong
block = 'para_bottom_volume para_top_volume'
variable = PE_polar_z
potential_E_int = potential_E_int
component = 2
[../]
[./walled_xp_para]
type = WallEnergyDerivative
block = 'para_bottom_volume para_top_volume'
variable = PE_polar_x
polar_x = PE_polar_x
polar_y = PE_polar_y
polar_z = PE_polar_z
component = 0
[../]
[./walled_yp_para]
type = WallEnergyDerivative
block = 'para_bottom_volume para_top_volume'
variable = PE_polar_y
polar_x = PE_polar_x
polar_y = PE_polar_y
polar_z = PE_polar_z
component = 1
[../]
[./walled_zp_para]
type = WallEnergyDerivative
block = 'para_bottom_volume para_top_volume'
variable = PE_polar_z
polar_x = PE_polar_x
polar_y = PE_polar_y
polar_z = PE_polar_z
component = 2
[../]
[./polar_x_timep_para]
type = TimeDerivativeScaled
block = 'para_bottom_volume para_top_volume'
variable = PE_polar_x
[../]
[./polar_y_timep_para]
type = TimeDerivativeScaled
block = 'para_bottom_volume para_top_volume'
variable = PE_polar_y
[../]
[./polar_z_timep_para]
type = TimeDerivativeScaled
block = 'para_bottom_volume para_top_volume'
variable = PE_polar_z
[../]
[]
[BCs]
[./top_phi]
type = DirichletBC
variable = potential_E_int
value = 0.0001
boundary = 'para_top_surface_top'
[../]
[./bottom_phi]
type = DirichletBC
variable = potential_E_int
value = 0.0
boundary = 'para_bottom_surface_bottom'
[../]
[./Periodic]
[./per1]
variable = 'PE_polar_x PE_polar_y PE_polar_z potential_E_int'
primary = 'para_top_side_1'
secondary = 'para_top_side_3'
translation = '0 1 0'
[../]
[./per2]
variable = 'PE_polar_x PE_polar_y PE_polar_z potential_E_int'
primary = 'para_bottom_side_1'
secondary = 'para_bottom_side_3'
translation = '0 1 0'
[../]
[./per3]
variable = 'PE_polar_x PE_polar_y PE_polar_z potential_E_int'
primary = 'para_top_side_4'
secondary = 'para_top_side_2'
translation = '1 0 0'
[../]
[./per4]
variable = 'PE_polar_x PE_polar_y PE_polar_z potential_E_int'
primary = 'para_bottom_side_4'
secondary = 'para_bottom_side_2'
translation = '1 0 0'
[../]
[./per5]
variable = 'FE_polar_x FE_polar_y FE_polar_z potential_E_int'
primary = 'ferro_side_4'
secondary = 'ferro_side_2'
translation = '1 0 0'
[../]
[./per6]
variable = 'FE_polar_x FE_polar_y FE_polar_z potential_E_int'
primary = 'ferro_side_1'
secondary = 'ferro_side_3'
translation = '0 1 0'
[../]
[../]
[]
[Postprocessors]
[./aveFEPz]
type = ElementAverageValue
variable = FE_polar_z
execute_on = 'initial timestep_end'
block = 'ferro_volume'
#'initial linear nonlinear timestep_begin timestep_end'
[../]
[./avePEPz]
type = ElementAverageValue
variable = PE_polar_z
execute_on = 'initial timestep_end'
block = 'para_bottom_volume para_top_volume'
#'initial linear nonlinear timestep_begin timestep_end'
[../]
[./Fbulk_ferro]
type = BulkEnergy
block = 'ferro_volume'
polar_x = FE_polar_x
polar_y = FE_polar_y
polar_z = FE_polar_z
alpha1 = ${alpha1}
alpha11 = ${alpha11}
alpha12 = ${alpha12}
alpha111 = ${alpha111}
alpha112 = ${alpha112}
alpha123 = ${alpha123}
execute_on = 'initial timestep_end'
[../]
[./Fwall_ferro]
type = WallEnergy
polar_x = FE_polar_x
polar_y = FE_polar_y
polar_z = FE_polar_z
G110 = ${G110}
G11_G110 = ${G11_G110}
G12_G110 = ${G12_G110}
G44_G110 = ${G44_G110}
G44P_G110 = ${G44P_G110}
block = 'ferro_volume'
execute_on = 'initial timestep_end'
[../]
[./Felec_ferro]
type = ElectrostaticEnergy
block = 'ferro_volume'
polar_x = FE_polar_x
polar_y = FE_polar_y
polar_z = FE_polar_z
potential_E_int = potential_E_int
execute_on = 'initial timestep_end'
[../]
[./Fbulk_para]
type = BulkEnergy
block = 'para_bottom_volume para_top_volume'
polar_x = PE_polar_x
polar_y = PE_polar_y
polar_z = PE_polar_z
alpha1 = ${alpha1_para}
alpha11 = ${alpha11_para}
alpha12 = ${alpha12_para}
alpha111 = ${alpha111_para}
alpha112 = ${alpha112_para}
alpha123 = ${alpha123_para}
execute_on = 'initial timestep_end'
[../]
[./Fwall_para]
type = WallEnergy
polar_x = PE_polar_x
polar_y = PE_polar_y
polar_z = PE_polar_z
G110 = ${G110_para}
G11_G110 = ${G11_G110_para}
G12_G110 = ${G12_G110_para}
G44_G110 = ${G44_G110_para}
G44P_G110 = ${G44P_G110_para}
block = 'para_bottom_volume para_top_volume'
execute_on = 'initial timestep_end'
[../]
[./Felec_para]
type = ElectrostaticEnergy
block = 'para_bottom_volume para_top_volume'
polar_x = PE_polar_x
polar_y = PE_polar_y
polar_z = PE_polar_z
potential_E_int = potential_E_int
execute_on = 'initial timestep_end'
[../]
[./perc_change_ferro]
type = PercentChangePostprocessor
postprocessor = Fbulk_ferro
[../]
[]
[UserObjects]
[./kill]
type = Terminator
expression = 'perc_change_ferro <= 2.5e-6'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options_iname = '-ksp_gmres_restart -snes_atol -snes_rtol -ksp_rtol -pc_type '
petsc_options_value = ' 120 1e-10 1e-8 1e-5 bjacobi'
[../]
[]
[Executioner]
[./TimeStepper]
type = IterationAdaptiveDT
dt = 0.5
growth_factor = 1.4
cutback_factor = 0.9
optimal_iterations = 7
[../]
type = Transient
solve_type = 'PJFNK' #"PJFNK, JFNK, NEWTON"
scheme = 'bdf2' #"implicit-euler, explicit-euler, crank-nicolson, bdf2, rk-2"
dtmax = 1.0
num_steps = 25
[]
[Outputs]
print_linear_residuals = false
[./out]
type = Exodus
execute_on = 'timestep_end'
file_base = out_split_polar
elemental_as_nodal = true
interval = 1
[../]
[]
(examples/other/skyrm.i)
[Mesh]
file = exodus_disk_r8_h1.e
[]
[MeshModifiers]
[./centernodeset_1]
type = AddExtraNodeset
new_boundary = 'center_node_1'
coord = '0.0 0.0 -0.5'
[../]
[./centernodeset_2]
type = AddExtraNodeset
new_boundary = 'center_node_2'
coord = '0.0 0.0 0.5'
[../]
[./centernodeset_3]
type = AddExtraNodeset
new_boundary = 'center_node_3'
coord = '0.0 0.0 0.166667'
[../]
[./centernodeset_4]
type = AddExtraNodeset
new_boundary = 'center_node_4'
coord = '0.0 0.0 -0.166667'
[../]
[]
[GlobalParams]
len_scale = 1.0
alpha1 = -0.09179 #room temp PTO
alpha11 = 0.0706
alpha111 = 0.0
alpha12 = 0.1412
alpha112 = 0.0
alpha123 = 0.0
G110 = 0.141
G11_G110 = 0.0 #this is here to somehow prevent P_z "ringing" problems on the side...
G12_G110 = 0.0 #perhaps this allows for div P =0?
G44_G110 = 1.0
G44P_G110 = 1.0
polar_x = polar_x
polar_y = polar_y
polar_z = polar_z
lambda = 0.01
K = -0.01
[]
[Functions]
#This is a skyrmion.
[./parsed_function_x]
type = ParsedFunction
value = '-(0.738217-0.00686984*(x^2+y^2)^(0.5)+0.00644497*(x^2+y^2)-0.0188174*(x^2+y^2)^(1.5)+0.00441745*(x^2+y^2)^2-0.000274842*(x^2+y^2)^(5/2))*sin(-0.028395+0.267482*(x^2+y^2)^(0.5)-0.146762*(x^2+y^2)+0.0632932*(x^2+y^2)^(1.5)-0.00790942*(x^2+y^2)^(2)+0.000294936*(x^2+y^2)^(5/2))*sin(atan(y/x))'
[../]
[./parsed_function_y]
type = ParsedFunction
value = '(0.738217-0.00686984*(x^2+y^2)^(0.5)+0.00644497*(x^2+y^2)-0.0188174*(x^2+y^2)^(1.5)+0.00441745*(x^2+y^2)^2-0.000274842*(x^2+y^2)^(5/2))*sin(-0.028395+0.267482*(x^2+y^2)^(0.5)-0.146762*(x^2+y^2)+0.0632932*(x^2+y^2)^(1.5)-0.00790942*(x^2+y^2)^(2)+0.000294936*(x^2+y^2)^(5/2))*cos(atan(y/x))'
[../]
[./parsed_function_z]
type = ParsedFunction
value = '(0.738217-0.00686984*(x^2+y^2)^(0.5)+0.00644497*(x^2+y^2)-0.0188174*(x^2+y^2)^(1.5)+0.00441745*(x^2+y^2)^2-0.000274842*(x^2+y^2)^(5/2))*cos(-0.028395+0.267482*(x^2+y^2)^(0.5)-0.146762*(x^2+y^2)+0.0632932*(x^2+y^2)^(1.5)-0.00790942*(x^2+y^2)^(2)+0.000294936*(x^2+y^2)^(5/2))'
[../]
[]
[Variables]
[./polar_x]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = FunctionIC
function = parsed_function_x
[../]
[../]
[./polar_y]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = FunctionIC
function = parsed_function_y
[../]
[../]
[./polar_z]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = FunctionIC
function = parsed_function_z
[../]
[../]
[]
[Kernels]
#Bulk energy density
[./bed_x]
type = BulkEnergyDerivativeSixth
variable = polar_x
component = 0
[../]
[./bed_y]
type = BulkEnergyDerivativeSixth
variable = polar_y
component = 1
[../]
[./bed_z]
type = BulkEnergyDerivativeSixth
variable = polar_z
component = 2
[../]
##Wall energy penalty
[./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
[../]
[./anis_x]
type = AnisotropyEnergy
variable = polar_x
component = 0
[../]
[./anis_y]
type = AnisotropyEnergy
variable = polar_y
component = 1
[../]
##Electrostatics
#PdotE
#[./polar_electric_px]
# type = PolarElectricPStrong
# variable = polar_x
# component = 0
#[../]
#[./polar_electric_py]
# type = PolarElectricPStrong
# variable = polar_y
# component = 1
#[../]
#[./polar_electric_pz] # when K > 0, turning this block off will get the two band state
# type = PolarElectricPStrong
# variable = polar_z
# component = 2
#[../]
##Poisson problem:
#[./FE_E_int]
# type = Electrostatics
# variable = potential_int
# block = '1'
# permittivity = 3.54
#[../]
#[./polar_x_electric_E]
# type = PolarElectricEStrong
# variable = potential_int
#[../]
[./depol_z]
type = DepolEnergy
permitivitty = 0.00885
variable = polar_z
avePz = avePz
[../]
##Time dependence
[./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]
[./center_pol_x]
type = DirichletBC
variable = 'polar_x'
value = 0.0
boundary = 'center_node_1 center_node_2 center_node_3 center_node_4'
[../]
[./center_pol_y]
type = DirichletBC
variable = 'polar_y'
value = 0.0
boundary = 'center_node_1 center_node_2 center_node_3 center_node_4'
[../]
# [./center_pol_z]
# type = DirichletBC
# variable = 'polar_z'
# value = 0.65
# boundary = 'center_node_1 center_node_2 center_node_3 center_node_4'
# [../]
[./side_neumann_x]
variable = 'polar_x'
type = NeumannBC
value = 0.0
boundary = '1'
[../]
[./side_neumann_y]
variable = 'polar_y'
type = NeumannBC
value = 0.0
boundary = '1'
[../]
[./side_Neumann_z]
variable = 'polar_z'
type = NeumannBC
value = 0.0
boundary = '1'
[../]
[]
[Postprocessors]
[./avePz]
type = ElementAverageValue
variable = polar_z
execute_on = 'initial linear nonlinear timestep_begin timestep_end'
[../]
[./Fbulk]
type = BulkEnergy
execute_on = 'timestep_end'
[../]
[./Fwall]
type = WallEnergy
execute_on = 'timestep_end'
[../]
[./total_energy]
type = TotalEnergy
Fbulk = Fbulk
Fwall = Fbulk
execute_on = 'timestep_end'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options_iname = '-ksp_gmres_restart -snes_atol -snes_rtol -ksp_rtol -pc_type'
petsc_options_value = ' 250 1e-10 1e-8 1e-6 bjacobi '
[../]
[]
[Executioner]
type = Transient
[./TimeStepper]
type = IterationAdaptiveDT
dt = 0.1
#iteration_window = 3
optimal_iterations = 6 #should be 5 probably
growth_factor = 1.4
linear_iteration_ratio = 1000
cutback_factor = 0.9
[../]
solve_type = 'NEWTON' #"PJFNK, JFNK, NEWTON"
scheme = 'implicit-euler' #"implicit-euler, explicit-euler, crank-nicolson, bdf2, rk-2"
dtmin = 1e-13
dtmax = 0.7
num_steps = 500
[]
[Outputs]
print_linear_residuals = false
print_perf_log = true
[./out]
type = Exodus
execute_on = 'timestep_end'
file_base = out_ic_skyrm
elemental_as_nodal = true
[../]
[]