- Cs_ijklSurface elastic tensor, C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
C++ Type:std::vector<double>
Controllable:No
Description:Surface elastic tensor, C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
- S_kSurface euler angle vector, S_1, S_2, S_3
C++ Type:libMesh::VectorValue<double>
Controllable:No
Description:Surface euler angle vector, S_1, S_2, S_3
- boundaryThe list of boundary IDs from the mesh where this object applies
C++ Type:std::vector<BoundaryName>
Controllable:No
Description:The list of boundary IDs from the mesh where this object applies
- componentAn integer corresponding to the direction the variable this kernel acts in. (0 for x, 1 for y, 2 for z)
C++ Type:unsigned int
Controllable:No
Description:An integer corresponding to the direction the variable this kernel acts in. (0 for x, 1 for y, 2 for z)
- tausIntrinsic surface stress
C++ Type:double
Controllable:No
Description:Intrinsic surface stress
- variableThe name of the variable that this residual object operates on
C++ Type:NonlinearVariableName
Controllable:No
Description:The name of the variable that this residual object operates on
SurfaceMechanicsBC
Overview
An IntegratedBC
object which computes a residual contribution due to a surface tension . The surface elastic energy density is defined as,
where denote a local orthonormal basis in the tangent plane of an arbitrary surface with a surface normal . The surface stress is related to the surface elastic stiffness tensor via,
to first approximation () being an average of the residual surface stress components and the Kronecker symbol. A projection operator can be constructed such that
Therefore, and . Now we need to consider the stress divergence equation (condition of mechanical equilibrium of the surface) which is
TODO:
Example Input File Syntax
Input Parameters
- displacementsThe displacements
C++ Type:std::vector<VariableName>
Controllable:No
Description:The displacements
- prop_getter_suffixAn optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
C++ Type:MaterialPropertyName
Controllable:No
Description:An optional suffix parameter that can be appended to any attempt to retrieve/get material properties. The suffix will be prepended with a '_' character.
Optional Parameters
- absolute_value_vector_tagsThe tags for the vectors this residual object should fill with the absolute value of the residual contribution
C++ Type:std::vector<TagName>
Controllable:No
Description:The tags for the vectors this residual object should fill with the absolute value of the residual contribution
- extra_matrix_tagsThe extra tags for the matrices this Kernel should fill
C++ Type:std::vector<TagName>
Controllable:No
Description:The extra tags for the matrices this Kernel should fill
- extra_vector_tagsThe extra tags for the vectors this Kernel should fill
C++ Type:std::vector<TagName>
Controllable:No
Description:The extra tags for the vectors this Kernel should fill
- matrix_tagssystemThe tag for the matrices this Kernel should fill
Default:system
C++ Type:MultiMooseEnum
Options:nontime, system
Controllable:No
Description:The tag for the matrices this Kernel should fill
- vector_tagsnontimeThe tag for the vectors this Kernel should fill
Default:nontime
C++ Type:MultiMooseEnum
Options:nontime, time
Controllable:No
Description:The tag for the vectors this Kernel should fill
Tagging Parameters
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
Controllable:No
Description:Adds user-defined labels for accessing object parameters via control logic.
- diag_save_inThe name of auxiliary variables to save this BC's diagonal jacobian contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)
C++ Type:std::vector<AuxVariableName>
Controllable:No
Description:The name of auxiliary variables to save this BC's diagonal jacobian contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)
- enableTrueSet the enabled status of the MooseObject.
Default:True
C++ Type:bool
Controllable:Yes
Description:Set the enabled status of the MooseObject.
- implicitTrueDetermines whether this object is calculated using an implicit or explicit form
Default:True
C++ Type:bool
Controllable:No
Description:Determines whether this object is calculated using an implicit or explicit form
- save_inThe name of auxiliary variables to save this BC's residual contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)
C++ Type:std::vector<AuxVariableName>
Controllable:No
Description:The name of auxiliary variables to save this BC's residual contributions to. Everything about that variable must match everything about this variable (the type, what blocks it's on, etc.)
- seed0The seed for the master random number generator
Default:0
C++ Type:unsigned int
Controllable:No
Description:The seed for the master random number generator
- use_displaced_meshFalseWhether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Default:False
C++ Type:bool
Controllable:No
Description:Whether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Advanced Parameters
Input Files
(examples/other/vary_hydroP_ZnO_iso.i)
# Core-shell nanoparticle, 25 nm in diameter:
# Single-crystal round ZnO core, 15 nm in diameter.
# Single-crystal rutile TiO2 shell, 5 nm in thickness.
# Here, crystalline rTiO2 elastic parameters (both bulk and surface ones) in the shell were
# averaged out to isotropic symmetry, which effectively makes the rTiO2 shell amorphous.
# See Influence of Elastic and Surface Strains on the Optical Properties of Semiconducting Core-Shell Nanoparticles
# J. Mangeri, O. Heinonen, D. Karpeyev, and S. Nakhmanson, Phys. Rev. Applied 4, 014001 (2015)
[Mesh]
file = core_shell_exodus.e
uniform_refine = 0
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Variables]
[./disp_x]
order = FIRST
family = LAGRANGE
[../]
[./disp_y]
order = FIRST
family = LAGRANGE
[../]
[./disp_z]
order = FIRST
family = LAGRANGE
[../]
[]
[AuxVariables]
[./stress_xx_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yy_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_zz_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_xy_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yz_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_zx_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_xx_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_yy_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_zz_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_xy_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_yz_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_zx_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[]
[Kernels]
[./TensorMechanics]
use_displaced_mesh = false
[../]
[]
[AuxKernels]
[./stress_xx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xx_elastic
index_i = 0
index_j = 0
execute_on = 'timestep_end'
[../]
[./stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy_elastic
index_i = 1
index_j = 1
execute_on = 'timestep_end'
[../]
[./stress_zz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zz_elastic
index_i = 2
index_j = 2
execute_on = 'timestep_end'
[../]
[./stress_xy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xy_elastic
index_i = 0
index_j = 1
execute_on = 'timestep_end'
[../]
[./stress_yz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yz_elastic
index_i = 1
index_j = 2
execute_on = 'timestep_end'
[../]
[./stress_zx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zx_elastic
index_i = 2
index_j = 0
execute_on = 'timestep_end'
[../]
[./strain_xx]
type = RankTwoAux
rank_two_tensor = elastic_strain
variable = strain_xx_elastic
index_i = 0
index_j = 0
execute_on = 'timestep_end'
[../]
[./strain_yy]
type = RankTwoAux
rank_two_tensor = elastic_strain
variable = strain_yy_elastic
index_i = 1
index_j = 1
execute_on = 'timestep_end'
[../]
[./strain_zz]
type = RankTwoAux
rank_two_tensor = elastic_strain
variable = strain_zz_elastic
index_i = 2
index_j = 2
execute_on = 'timestep_end'
[../]
[./strain_xy]
type = RankTwoAux
rank_two_tensor = elastic_strain
variable = strain_xy_elastic
index_i = 0
index_j = 1
execute_on = 'timestep_end'
[../]
[./strain_yz]
type = RankTwoAux
rank_two_tensor = elastic_strain
variable = strain_yz_elastic
index_i = 1
index_j = 2
execute_on = 'timestep_end'
[../]
[./strain_zx]
type = RankTwoAux
rank_two_tensor = elastic_strain
variable = strain_zx_elastic
index_i = 2
index_j = 0
execute_on = 'timestep_end'
[../]
[]
[BCs]
# Surface elastic parameters for w-ZnO surface taken from Table III of JAP 111, 124305 (2012)
# and averaged out to represent an isotropic surface described by one diagonal elastic const C_1111,
# one shear elastic const C_1122 and one residual stress const tau_11.
#
# Original (anisotropic, w-ZnO 10-10 surface) elastic consts and residual stresses in N/m (PBE):
# C_1111 = 49.1, C_2222 = 34.9, C_1122 = 15.1, C_1212 = 13.7, tau_11 = -2.1, tau_22 = -1.4
#
# Isotropic C_1111 = [C_1111 + C_2222]/2 = 42.0, C_1122 = 15.0, C_1212 is computed automatically
# from C_1111 and C_1122, tau_11 = [tau_11 + tau_22]/2 = -1.7
# Conversion to [N/nm] multiplies everything by 10^{-9}
[./surface_elasticity_X]
type = SurfaceMechanicsBC
variable = disp_x
boundary = '1'
S_k = '0.0 0.0 0.0'
# Surface elastic tensor C_1111, C_1122
Cs_ijkl = '42.0 15.0'
# Intrinsic surface stress
taus = '-2.3'
component = 0
[../]
[./surface_elasticity_Y]
type = SurfaceMechanicsBC
variable = disp_y
boundary = '1'
S_k = '0.0 0.0 0.0'
# Surface elastic tensor C_1111, C_1122
Cs_ijkl = '42.0 15.0'
# Intrinsic surface stress
taus = '-2.3'
component = 1
[../]
[./surface_elasticity_Z]
type = SurfaceMechanicsBC
variable = disp_z
boundary = '1'
S_k = '0.0 0.0 0.0'
# Surface elastic tensor C_1111, C_1122
Cs_ijkl = '42.0 15.0'
# Intrinsic surface stress
taus = '-2.3'
component = 2
[../]
[]
[Materials]
# ZnO shell (full [hexagonal] crystalline symmetry)
# Single crystal (see Table 1.6 and Ref. 86) in "Zinc Oxide: Fundamentals, Materials and Device Technology"
# by Hadis Morkoc and Umit Ozgur (2009 WILEY-VCH Verlag GmbH & Co. KGaA, Weinheim ISBN: 978-3-527-40813-9), Chapter 1.
# In GPa: C_ijkl = 209.7 121.1 105.1 209.7 105.1 210.9 42.47 42.47 44.29
# In N/(nm)^2, 1 GPa = 1 * 10^{-9} N/(nm)^2:
[./elasticity_tensor1]
type = ComputeElasticityTensor
block = '1'
fill_method = symmetric9
C_ijkl = '209.7 121.1 105.1 209.7 105.1 210.9 42.47 42.47 44.29'
euler_angle_1 = 0.0
euler_angle_2 = 0.0
euler_angle_3 = 0.0
[../]
[./strain1]
type = ComputeSmallStrain
block = '1'
[../]
[./stress1]
type = ComputeLinearElasticStress
block = '1'
[../]
# Zn core (full [hexagonal] crystalline symmetry)
# Averaged constants for crystalline Zn, see Table 2 in H. M. Ledbetter, J. Phys. Chem. Ref. Data 6, 1181 (1977).
# In GPa: C_ijkl = 163.0 30.6 48.1 163.0 48.1 60.3 39.4 39.4 65.9
# In N/(nm)^2, 1 GPa = 1 * 10^{-9} N/(nm)^2:
[./elasticity_tensor2]
type = ComputeElasticityTensor
block = '2'
fill_method = symmetric9
C_ijkl = '163.0 30.6 48.1 163.0 48.1 60.3 39.4 39.4 65.9'
euler_angle_1 = 0.0
euler_angle_2 = 0.0
euler_angle_3 = 0.0
[../]
[./strain2]
type = ComputeSmallStrain
block = '2'
[../]
[./stress2]
type = ComputeLinearElasticStress
block = '2'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options = '-snes_ksp_ew -snes_converged_reason -ksp_converged_reason'
petsc_options_iname = '-pc_type -pc_factor_shift_type -pc_factor_shift_amount -ksp_atol -snes_atol'
petsc_options_value = ' bjacobi NONZERO 1e-10 2e-10 2e-10'
[../]
[]
[Executioner]
type = Steady
solve_type = 'PJFNK' #"PJFNK, JFNK, NEWTON"
[]
[Outputs]
print_linear_residuals = true
print_perf_log = true
[./Exodus]
type = Exodus
file_base = out_Zn_ZnO_collinear_taus3
elemental_as_nodal = true
execute_on = 'TIMESTEP_END'
[../]
[]
(examples/other/Hex_Core_Shell_Cylinder.i)
# Core-shell nanoparticle, 25 nm in diameter:
# Single-crystal round ZnO core, 15 nm in diameter.
# Single-crystal rutile TiO2 shell, 5 nm in thickness.
# Here, crystalline rTiO2 elastic parameters (both bulk and surface ones) in the shell were
# averaged out to isotropic symmetry, which effectively makes the rTiO2 shell amorphous.
[Mesh]
file = ZnO_Core_100_Shell_20_nm.e
# uniform_refine = 1
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Variables]
[./disp_x]
order = FIRST
family = LAGRANGE
[../]
[./disp_y]
order = FIRST
family = LAGRANGE
[../]
[./disp_z]
order = FIRST
family = LAGRANGE
[../]
[]
[AuxVariables]
[./stress_xx]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_zz]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_xy]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yz]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_zx]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_xx]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_zz]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_xy]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_yz]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_zx]
order = CONSTANT
family = MONOMIAL
[../]
[./elastic_energy]
order = CONSTANT
family = MONOMIAL
[../]
[./pressure]
order = CONSTANT
family = MONOMIAL
[../]
[./EgZnO]
order = CONSTANT
family = MONOMIAL
[../]
[]
[Kernels]
[./TensorMechanics]
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
use_displaced_mesh = false
[../]
[]
[AuxKernels]
[./stress_xx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 0
index_j = 0
use_displaced_mesh = false
[../]
[./stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
use_displaced_mesh = false
[../]
[./stress_zz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zz
index_i = 2
index_j = 2
use_displaced_mesh = false
[../]
[./stress_xy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xy
index_i = 0
index_j = 1
use_displaced_mesh = false
[../]
[./stress_yz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yz
index_i = 1
index_j = 2
use_displaced_mesh = false
[../]
[./stress_zx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zx
index_i = 2
index_j = 0
use_displaced_mesh = false
[../]
[./strain_xx]
type = RankTwoAux
rank_two_tensor = elastic_strain
variable = strain_xx
index_i = 0
index_j = 0
use_displaced_mesh = false
[../]
[./strain_yy]
type = RankTwoAux
rank_two_tensor = elastic_strain
variable = strain_yy
index_i = 1
index_j = 1
use_displaced_mesh = false
[../]
[./strain_zz]
type = RankTwoAux
rank_two_tensor = elastic_strain
variable = strain_zz
index_i = 2
index_j = 2
use_displaced_mesh = false
[../]
[./strain_xy]
type = RankTwoAux
rank_two_tensor = elastic_strain
variable = strain_xy
index_i = 0
index_j = 1
use_displaced_mesh = false
[../]
[./strain_yz]
type = RankTwoAux
rank_two_tensor = elastic_strain
variable = strain_yz
index_i = 1
index_j = 2
use_displaced_mesh = false
[../]
[./strain_zx]
type = RankTwoAux
rank_two_tensor = elastic_strain
variable = strain_zx
index_i = 2
index_j = 0
use_displaced_mesh = false
[../]
### Here we use the results from Phys Rev B 88, 235210 (2013) Wagner et al
# which computes the strain-induced bandgap change of wurtzite ZnO using
# the HSE approach. Here E0, db, du, Rb and nu are material properties.
# Units will be in eV. Note we are justified in the strain_xx = strain_yy(using histo2d)
# Here we consider Gamma_7c-Gamma-7v as an example
[./bandgap]
type = BandGapAuxZnO
variable = EgZnO
relaxed_energy = 3.200
uniaxial_strain_rate = -3.800
biaxial_strain_rate = -0.450
biaxial_relaxation_coeff = 0.929
poisson_ratio = 0.31
[../]
[]
[BCs]
# Positive pressure -- compression, negative pressure -- tension
#active = 'back_x_bc back_y_bc back_z_bc top_z_bc'
[./back_x_bc]
type = DirichletBC
variable = disp_x
boundary = 1
value = 0
[../]
[./back_y_bc]
type = DirichletBC
variable = disp_y
boundary = 1
value = 0
[../]
[./back_z_bc]
type = DirichletBC
variable = disp_z
boundary = 8
value = -15
[../]
#Load boundary condition (-.1 um displacement along z)
# [./top_x_bc]
# type = DirichletBC
# variable = disp_x
# boundary = 2
# value = 0
# [../]
#
# [./top_y_bc]
# type = DirichletBC
# variable = disp_y
# boundary = 2
# value = 0
# [../]
[./top_z_bc]
type = DirichletBC
variable = disp_z
boundary = 7
value = 15 #Edit this value#
[../]
### Should I also add in the boundary conditions for my other surfaces? According to Cubit, Surface 2
### does not exist. Do I just go along with what it's telling me?
# Surface elastic parameters for w-ZnO surface taken from Table III of JAP 111, 124305 (2012)
# and averaged out to represent an isotropic surface described by one diagonal elastic const C_1111,
# one shear elastic const C_1122 and one residual stress const tau_11.
#
# Original (anizotropic, w-ZnO 10-10 surface) elastic consts and residual stresses in N/m (PBE):
# C_1111 = 49.1, C_2222 = 34.9, C_1122 = 15.1, C_1212 = 13.7, tau_11 = -2.1, tau_22 = -1.4
#
# Isotropic C_1111 = [C_1111 + C_2222]/2 = 42.0, C_1122 = 15.0, C_1212 is computed automatically
# from C_1111 and C_1122, tau_11 = [tau_11 + tau_22]/2 = -1.7
# Conversion to [N/nm] multiplies everything by 10^{-9}
[./surface_elasticity_X_surf1]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_x
boundary = '3'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 0
[../]
[./surface_elasticity_Y_surf1]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_y
boundary = '3'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 1
[../]
[./surface_elasticity_Z_surf1]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_z
boundary = '3'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 2
[../]
[./surface_elasticity_X_surf2]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_x
boundary = '4'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 0
[../]
[./surface_elasticity_Y_surf2]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_y
boundary = '4'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 1
[../]
[./surface_elasticity_Z_surf2]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_z
boundary = '4'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 2
[../]
[./surface_elasticity_X_surf3]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_x
boundary = '5'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 0
[../]
[./surface_elasticity_Y_surf3]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_y
boundary = '5'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 1
[../]
[./surface_elasticity_Z_surf3]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_z
boundary = '5'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 2
[../]
[./surface_elasticity_X_surf4]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_x
boundary = '6'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 0
[../]
[./surface_elasticity_Y_surf4]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_y
boundary = '6'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 1
[../]
[./surface_elasticity_Z_surf4]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_z
boundary = '6'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 2
[../]
[./surface_elasticity_X_surf5]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_x
boundary = '7'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 0
[../]
[./surface_elasticity_Y_surf5]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_y
boundary = '7'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 1
[../]
[./surface_elasticity_Z_surf5]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_z
boundary = '7'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 2
[../]
[./surface_elasticity_X_surf6]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_x
boundary = '8'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 0
[../]
[./surface_elasticity_Y_surf6]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_y
boundary = '8'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 1
[../]
[./surface_elasticity_Z_surf6]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_z
boundary = '8'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 2
[../]
[./surface_elasticity_X_surf7]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_x
boundary = '9'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 0
[../]
[./surface_elasticity_Y_surf7]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_y
boundary = '9'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 1
[../]
[./surface_elasticity_Z_surf7]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_z
boundary = '9'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 2
[../]
[./surface_elasticity_X_surf8]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_x
boundary = '10'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 0
[../]
[./surface_elasticity_Y_surf8]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_y
boundary = '10'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 1
[../]
[./surface_elasticity_Z_surf8]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_z
boundary = '10'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 2
[../]
[]
[Materials]
# ZnO shell (full [hexagonal] crystalline symmetry)
# Single crystal (see Table 1.6 and Ref. 86) in "Zinc Oxide: Fundamentals, Materials and Device Technology"
# by Hadis Morkoc and Umit Ozgur (2009 WILEY-VCH Verlag GmbH & Co. KGaA, Weinheim ISBN: 978-3-527-40813-9), Chapter 1.
# In GPa: C_ijkl = 209.7 121.1 105.1 209.7 105.1 210.9 42.47 42.47 44.29
# In N/(nm)^2, 1 GPa = 1 * 10^{-9} N/(nm)^2:
[./elasticity_tensor1]
type = ComputeElasticityTensor
block = '1'
fill_method = symmetric9
C_ijkl = '209.7e-09 121.1e-09 105.1e-09 209.7e-09 105.1e-09 210.9e-09 42.47e-09 42.47e-09 44.29e-09'
euler_angle_1 = 0.0
euler_angle_2 = 0.0
euler_angle_3 = 0.0
[../]
[./strain1]
type = ComputeSmallStrain
block = '1'
[../]
[./stress1]
type = ComputeLinearElasticStress
block = '1'
[../]
# Zn core (full [hexagonal] crystalline symmetry)
# Averaged constants for crystalline Zn, see Table 2 in H. M. Ledbetter, J. Phys. Chem. Ref. Data 6, 1181 (1977).
# In GPa: C_ijkl = 163.0 30.6 48.1 163.0 48.1 60.3 39.4 39.4 65.9
# In N/(nm)^2, 1 GPa = 1 * 10^{-9} N/(nm)^2:
[./elasticity_tensor2]
type = ComputeElasticityTensor
block = '2'
fill_method = symmetric9
C_ijkl = '163.0e-09 30.6e-09 48.1e-09 163.0e-09 48.1e-09 60.3e-09 39.4e-09 39.4e-09 65.9e-09'
euler_angle_1 = 0.0
euler_angle_2 = 0.0
euler_angle_3 = 0.0
[../]
[./strain2]
type = ComputeSmallStrain
block = '2'
[../]
[./stress2]
type = ComputeLinearElasticStress
block = '2'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options = '-snes_view -snes_converged_reason -ksp_converged_reason'
petsc_options_iname = '-ksp_type -snes_rtol -pc_type -pc_hypre_type '
petsc_options_value = ' gmres 1e-9 hypre boomeramg'
[../]
[]
[Executioner]
type = Steady
solve_type = 'NEWTON'
[]
[Outputs]
[./Exodus]
type = Exodus
file_base = Out_ZnO_Core_100_Shell_20_nm
elemental_as_nodal = true
output_elemental_variables = 1
output_initial = 0
[../]
[]
(test/tests/anisotropic_elastic/vary_hydroP_ZnO_iso.i)
# Core-shell nanoparticle, 25 nm in diameter:
# Single-crystal round ZnO core, 15 nm in diameter.
# Single-crystal rutile TiO2 shell, 5 nm in thickness.
# Here, crystalline rTiO2 elastic parameters (both bulk and surface ones) in the shell were
# averaged out to isotropic symmetry, which effectively makes the rTiO2 shell amorphous.
# See Influence of Elastic and Surface Strains on the Optical Properties of Semiconducting Core-Shell Nanoparticles
# J. Mangeri, O. Heinonen, D. Karpeyev, and S. Nakhmanson, Phys. Rev. Applied 4, 014001 (2015)
[Mesh]
file = core_shell_exodus.e
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Variables]
[./disp_x]
order = FIRST
family = LAGRANGE
[../]
[./disp_y]
order = FIRST
family = LAGRANGE
[../]
[./disp_z]
order = FIRST
family = LAGRANGE
[../]
[]
[AuxVariables]
[./stress_xx_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yy_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_zz_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_xy_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yz_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_zx_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_xx_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_yy_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_zz_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_xy_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_yz_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_zx_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./elastic_energy]
order = CONSTANT
family = MONOMIAL
[../]
[./pressure]
order = CONSTANT
family = MONOMIAL
[../]
[./EgZnO]
order = CONSTANT
family = MONOMIAL
[../]
[]
[Kernels]
[./TensorMechanics]
use_displaced_mesh = false
[../]
[]
[AuxKernels]
[./stress_xx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xx_elastic
index_i = 0
index_j = 0
use_displaced_mesh = false
[../]
[./stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy_elastic
index_i = 1
index_j = 1
use_displaced_mesh = false
[../]
[./stress_zz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zz_elastic
index_i = 2
index_j = 2
use_displaced_mesh = false
[../]
[./stress_xy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xy_elastic
index_i = 0
index_j = 1
use_displaced_mesh = false
[../]
[./stress_yz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yz_elastic
index_i = 1
index_j = 2
use_displaced_mesh = false
[../]
[./stress_zx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zx_elastic
index_i = 2
index_j = 0
use_displaced_mesh = false
[../]
[./strain_xx]
type = RankTwoAux
rank_two_tensor = elastic_strain
variable = strain_xx_elastic
index_i = 0
index_j = 0
use_displaced_mesh = false
[../]
[./strain_yy]
type = RankTwoAux
rank_two_tensor = elastic_strain
variable = strain_yy_elastic
index_i = 1
index_j = 1
use_displaced_mesh = false
[../]
[./strain_zz]
type = RankTwoAux
rank_two_tensor = elastic_strain
variable = strain_zz_elastic
index_i = 2
index_j = 2
use_displaced_mesh = false
[../]
[./strain_xy]
type = RankTwoAux
rank_two_tensor = elastic_strain
variable = strain_xy_elastic
index_i = 0
index_j = 1
use_displaced_mesh = false
[../]
[./strain_yz]
type = RankTwoAux
rank_two_tensor = elastic_strain
variable = strain_yz_elastic
index_i = 1
index_j = 2
use_displaced_mesh = false
[../]
[./strain_zx]
type = RankTwoAux
rank_two_tensor = elastic_strain
variable = strain_zx_elastic
index_i = 2
index_j = 0
use_displaced_mesh = false
[../]
[./bandgap]
### Here we use the results from Phys Rev B 88, 235210 (2013) Wagner et al
# which computes the strain-induced bandgap change of wurtzite ZnO using
# the HSE approach. Here E0, db, du, Rb and nu are material properties.
# Units will be in eV. Note we are justified in the strain_xx = strain_yy(using histo2d)
# Here we consider Gamma_7c-Gamma-7v as an example
type = BandGapAuxZnO
variable = EgZnO
relaxed_energy = 3.200
uniaxial_strain_rate = -3.800
biaxial_strain_rate = -0.450
biaxial_relaxation_coeff = 0.929
poisson_ratio = 0.31
[../]
[]
[BCs]
# Positive pressure -- compression, negative pressure -- tension
[./hydrostatic_pressure_X]
type = HydrostaticBC
variable = disp_x
boundary = '1'
pressure = 0.0
component = 0
[../]
[./hydrostatic_pressure_Y]
type = HydrostaticBC
variable = disp_y
boundary = '1'
pressure = 0.0
component = 1
[../]
[./hydrostatic_pressure_Z]
type = HydrostaticBC
variable = disp_z
boundary = '1'
pressure = 0.0
component = 2
[../]
# Surface elastic parameters for w-ZnO surface taken from Table III of JAP 111, 124305 (2012)
# and averaged out to represent an isotropic surface described by one diagonal elastic const C_1111,
# one shear elastic const C_1122 and one residual stress const tau_11.
#
# Original (anizotropic, w-ZnO 10-10 surface) elastic consts and residual stresses in N/m (PBE):
# C_1111 = 49.1, C_2222 = 34.9, C_1122 = 15.1, C_1212 = 13.7, tau_11 = -2.1, tau_22 = -1.4
#
# Isotropic C_1111 = [C_1111 + C_2222]/2 = 42.0, C_1122 = 15.0, C_1212 is computed automatically
# from C_1111 and C_1122, tau_11 = [tau_11 + tau_22]/2 = -1.7
# Conversion to [N/nm] multiplies everything by 10^{-9}
[./surface_elasticity_X]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_x
S_k = '0 0 0'
boundary = '1'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1122
Cs_ijkl = '42.0e-09 15.0e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 0
[../]
[./surface_elasticity_Y]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_y
S_k = '0 0 0'
boundary = '1'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1122
Cs_ijkl = '42.0e-09 15.0e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 1
[../]
[./surface_elasticity_Z]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_z
S_k = '0 0 0'
boundary = '1'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1122
Cs_ijkl = '42.0e-09 15.0e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 2
[../]
[]
[Materials]
# ZnO shell (full [hexagonal] crystalline symmetry)
# Single crystal (see Table 1.6 and Ref. 86) in "Zinc Oxide: Fundamentals, Materials and Device Technology"
# by Hadis Morkoc and Umit Ozgur (2009 WILEY-VCH Verlag GmbH & Co. KGaA, Weinheim ISBN: 978-3-527-40813-9), Chapter 1.
# In GPa: C_ijkl = 209.7 121.1 105.1 209.7 105.1 210.9 42.47 42.47 44.29
# In N/(nm)^2, 1 GPa = 1 * 10^{-9} N/(nm)^2:
[./elasticity_tensor1]
type = ComputeElasticityTensor
block = '1'
fill_method = symmetric9
C_ijkl = '209.7e-09 121.1e-09 105.1e-09 209.7e-09 105.1e-09 210.9e-09 42.47e-09 42.47e-09 44.29e-09'
euler_angle_1 = 0.0
euler_angle_2 = 0.0
euler_angle_3 = 0.0
[../]
[./strain1]
type = ComputeSmallStrain
block = '1'
[../]
[./stress1]
type = ComputeLinearElasticStress
block = '1'
[../]
# Zn core (full [hexagonal] crystalline symmetry)
# Averaged constants for crystalline Zn, see Table 2 in H. M. Ledbetter, J. Phys. Chem. Ref. Data 6, 1181 (1977).
# In GPa: C_ijkl = 163.0 30.6 48.1 163.0 48.1 60.3 39.4 39.4 65.9
# In N/(nm)^2, 1 GPa = 1 * 10^{-9} N/(nm)^2:
[./elasticity_tensor2]
type = ComputeElasticityTensor
block = '2'
fill_method = symmetric9
C_ijkl = '163.0e-09 30.6e-09 48.1e-09 163.0e-09 48.1e-09 60.3e-09 39.4e-09 39.4e-09 65.9e-09'
euler_angle_1 = 0.0
euler_angle_2 = 0.0
euler_angle_3 = 0.0
[../]
[./strain2]
type = ComputeSmallStrain
block = '2'
[../]
[./stress2]
type = ComputeLinearElasticStress
block = '2'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options = '-snes_converged_reason -ksp_converged_reason'
petsc_options_iname = '-ksp_type -pc_type -snes_rtol -ksp_rtol'
petsc_options_value = ' gmres bjacobi 1e-4 1e-4'
[../]
[]
[Executioner]
type = Steady
solve_type = 'PJFNK' #"PJFNK, JFNK, NEWTON"
#PJFNK IS SLOW ~1500 seconds but NEWTON introduces the rigid body modes and causes many nonlinear iterations to show up
[]
[Outputs]
[./Exodus]
type = Exodus
file_base = out_Zn_ZnO_xstl000_core_iso_shell
elemental_as_nodal = true
[../]
[]
(examples/other/vary_hydroP_ZnO_xstl000.i)
# Core-shell nanoparticle, 25 nm in diameter:
# Single-crystal round ZnO core, 15 nm in diameter.
# Single-crystal rutile TiO2 shell, 5 nm in thickness.
# Here, crystalline rTiO2 elastic parameters (both bulk and surface ones) in the shell were
# averaged out to isotropic symmetry, which effectively makes the rTiO2 shell amorphous.
[Mesh]
file = core_shell_exodus.e
# uniform_refine = 1
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Variables]
[./disp_x]
order = FIRST
family = LAGRANGE
[../]
[./disp_y]
order = FIRST
family = LAGRANGE
[../]
[./disp_z]
order = FIRST
family = LAGRANGE
[../]
[]
[AuxVariables]
[./stress_xx]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_zz]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_xy]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yz]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_zx]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_xx]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_zz]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_xy]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_yz]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_zx]
order = CONSTANT
family = MONOMIAL
[../]
[./elastic_energy]
order = CONSTANT
family = MONOMIAL
[../]
[./pressure]
order = CONSTANT
family = MONOMIAL
[../]
[./EgZnO]
order = CONSTANT
family = MONOMIAL
[../]
[]
[Kernels]
[./TensorMechanics]
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
use_displaced_mesh = false
[../]
[]
[AuxKernels]
[./stress_xx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 0
index_j = 0
use_displaced_mesh = false
[../]
[./stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
use_displaced_mesh = false
[../]
[./stress_zz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zz
index_i = 2
index_j = 2
use_displaced_mesh = false
[../]
[./stress_xy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xy
index_i = 0
index_j = 1
use_displaced_mesh = false
[../]
[./stress_yz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yz
index_i = 1
index_j = 2
use_displaced_mesh = false
[../]
[./stress_zx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zx
index_i = 2
index_j = 0
use_displaced_mesh = false
[../]
[./strain_xx]
type = RankTwoAux
rank_two_tensor = elastic_strain
variable = strain_xx
index_i = 0
index_j = 0
use_displaced_mesh = false
[../]
[./strain_yy]
type = RankTwoAux
rank_two_tensor = elastic_strain
variable = strain_yy
index_i = 1
index_j = 1
use_displaced_mesh = false
[../]
[./strain_zz]
type = RankTwoAux
rank_two_tensor = elastic_strain
variable = strain_zz
index_i = 2
index_j = 2
use_displaced_mesh = false
[../]
[./strain_xy]
type = RankTwoAux
rank_two_tensor = elastic_strain
variable = strain_xy
index_i = 0
index_j = 1
use_displaced_mesh = false
[../]
[./strain_yz]
type = RankTwoAux
rank_two_tensor = elastic_strain
variable = strain_yz
index_i = 1
index_j = 2
use_displaced_mesh = false
[../]
[./strain_zx]
type = RankTwoAux
rank_two_tensor = elastic_strain
variable = strain_zx
index_i = 2
index_j = 0
use_displaced_mesh = false
[../]
[./elastic_energy]
type=TensorElasticEnergyAux
variable = elastic_energy
use_displaced_mesh = false
[../]
[./pressure]
type = TensorPressureAux
variable = pressure
[../]
### Here we use the results from Phys Rev B 88, 235210 (2013) Wagner et al
# which computes the strain-induced bandgap change of wurtzite ZnO using
# the HSE approach. Here E0, db, du, Rb and nu are material properties.
# Units will be in eV. Note we are justified in the strain_xx = strain_yy(using histo2d)
# Here we consider Gamma_7c-Gamma-7v as an example
[./bandgap]
type = BandGapAuxZnO
variable = EgZnO
relaxed_energy = 3.200
# calc_rel_energy = 3.200
# exp_meas_rel_energy = 3.313
uniaxial_strain_rate = -3.800
biaxial_strain_rate = -0.450
biaxial_relaxation_coeff = 0.929
poisson_ratio = 0.31
[../]
[]
[BCs]
# Positive pressure -- compression, negative pressure -- tension
[./hydrostatic_pressure_X]
type = HydrostaticBC
variable = disp_x
boundary = '1'
pressure = 0.0
component = 0
[../]
[./hydrostatic_pressure_Y]
type = HydrostaticBC
variable = disp_y
boundary = '1'
pressure = 0.0
component = 1
[../]
[./hydrostatic_pressure_Z]
type = HydrostaticBC
variable = disp_z
boundary = '1'
pressure = 0.0
component = 2
[../]
# Surface elastic parameters for w-ZnO surface taken from Table III of JAP 111, 124305 (2012)
# and averaged out to represent an isotropic surface described by one diagonal elastic const C_1111,
# one shear elastic const C_1122 and one residual stress const tau_11.
#
# Original (anizotropic, w-ZnO 10-10 surface) elastic consts and residual stresses in N/m (PBE):
# C_1111 = 49.1, C_2222 = 34.9, C_1122 = 15.1, C_1212 = 13.7, tau_11 = -2.1, tau_22 = -1.4
#
# Isotropic C_1111 = [C_1111 + C_2222]/2 = 42.0, C_1122 = 15.0, C_1212 is computed automatically
# from C_1111 and C_1122, tau_11 = [tau_11 + tau_22]/2 = -1.7
# Conversion to [N/nm] multiplies everything by 10^{-9}
[./surface_elasticity_X]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_x
boundary = '1'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1122
Cs_ijkl = '42.0e-09 15.0e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 0
[../]
[./surface_elasticity_Y]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_y
boundary = '1'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1122
Cs_ijkl = '42.0e-09 15.0e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 1
[../]
[./surface_elasticity_Z]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_z
boundary = '1'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1122
Cs_ijkl = '42.0e-09 15.0e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 2
[../]
[]
[Materials]
# ZnO shell (full [hexagonal] crystalline symmetry)
# Single crystal (see Table 1.6 and Ref. 86) in "Zinc Oxide: Fundamentals, Materials and Device Technology"
# by Hadis Morkoc and Umit Ozgur (2009 WILEY-VCH Verlag GmbH & Co. KGaA, Weinheim ISBN: 978-3-527-40813-9), Chapter 1.
# In GPa: C_ijkl = 209.7 121.1 105.1 209.7 105.1 210.9 42.47 42.47 44.29
# In N/(nm)^2, 1 GPa = 1 * 10^{-9} N/(nm)^2:
[./shell_grain1]
type = LinearElasticMaterial
block = '1'
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
fill_method = symmetric9
# C11 C12 C13 C22 C23 C33 C44 C55 C66
C_ijkl = '209.7e-09 121.1e-09 105.1e-09 209.7e-09 105.1e-09 210.9e-09 42.47e-09 42.47e-09 44.29e-09'
euler_angle_1 = 0.0
euler_angle_2 = 0.0
euler_angle_3 = 0.0
[../]
# Zn core (full [hexagonal] crystalline symmetry)
# Averaged constants for crystalline Zn, see Table 2 in H. M. Ledbetter, J. Phys. Chem. Ref. Data 6, 1181 (1977).
# In GPa: C_ijkl = 163.0 30.6 48.1 163.0 48.1 60.3 39.4 39.4 65.9
# In N/(nm)^2, 1 GPa = 1 * 10^{-9} N/(nm)^2:
[./core]
type = LinearElasticMaterial
block = '2'
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
fill_method = symmetric9
# C11 C12 C13 C22 C23 C33 C44 C55 C66
C_ijkl = '163.0e-09 30.6e-09 48.1e-09 163.0e-09 48.1e-09 60.3e-09 39.4e-09 39.4e-09 65.9e-09'
euler_angle_1 = 0.0
euler_angle_2 = 0.0
euler_angle_3 = 0.0
[../]
[]
[Postprocessors]
[./integrated_elastic_energy]
type = ElementIntegralVariablePostprocessor
# elastic_energy variable is computed by the TensorElasticEnergyAux AuxKernel above
variable = elastic_energy
# block = '1 2'
use_displaced_mesh = false
[../]
[./volume]
type = VolumePostprocessor
use_displaced_mesh = true
# variable = disp_x
# block = '1 2'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -pc_hypre_type '
petsc_options_value = ' gmres hypre boomeramg '
[../]
[]
[Executioner]
type = Steady
solve_type = 'NEWTON'
petsc_options = '-snes_view -snes_converged_reason -ksp_converged_reason -options_table -options_left'
[]
#[Debug]
# show_var_residual_norms = true
#[]
[Outputs]
[./Exodus]
type = Exodus
file_base = out_0_Zn_ZnO_xstl000_core_xstl000_shell_P-def
elemental_as_nodal = true
output_elemental_variables = 1
output_initial = 0
[../]
[./console]
type = Console
perf_log = true
linear_residuals = true
nonlinear_residuals = true
[../]
[]
(test/tests/anisotropic_elastic/surf_graintest.i)
[Mesh]
file = 6grains.e
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Variables]
[./disp_x]
order = FIRST
family = LAGRANGE
[../]
[./disp_y]
order = FIRST
family = LAGRANGE
[../]
[./disp_z]
order = FIRST
family = LAGRANGE
[../]
[]
[AuxVariables]
[./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
[../]
[./strain_xx_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_yy_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_xy_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_xz_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_zz_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_yz_elastic]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./matl_e11]
type = RankTwoAux
rank_two_tensor = total_strain
index_i = 0
index_j = 0
variable = strain_xx_elastic
execute_on = 'timestep_end'
[../]
[./matl_e12]
type = RankTwoAux
rank_two_tensor = total_strain
index_i = 0
index_j = 1
variable = strain_xy_elastic
execute_on = 'timestep_end'
[../]
[./matl_e13]
type = RankTwoAux
rank_two_tensor = total_strain
index_i = 0
index_j = 2
variable = strain_xz_elastic
execute_on = 'timestep_end'
[../]
[./matl_e22]
type = RankTwoAux
rank_two_tensor = total_strain
index_i = 1
index_j = 1
variable = strain_yy_elastic
execute_on = 'timestep_end'
[../]
[./matl_e23]
type = RankTwoAux
rank_two_tensor = total_strain
index_i = 1
index_j = 2
variable = strain_yz_elastic
execute_on = 'timestep_end'
[../]
[./matl_e33]
type = RankTwoAux
rank_two_tensor = total_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]
[./elasticity_tensor_1]
type = ComputeElasticityTensor
fill_method = symmetric9
C_ijkl = '380. 150. 150. 380. 150. 380. 110. 110. 110.'
block = '1 2 3'
[../]
[./strain_1]
type = ComputeSmallStrain
block = '1 2 3'
[../]
[./stress_1]
type = ComputeLinearElasticStress
block = '1 2 3'
[../]
[./elasticity_tensor_2]
type = ComputeElasticityTensor
C_ijkl = '319 99.6 99.6 319 99.6 319 109.53 109.53 109.53'
fill_method = symmetric9
block = '4 5'
euler_angle_1 = 0.0
euler_angle_2 = 83.0
euler_angle_3 = 0.0
[../]
[./strain_2]
type = ComputeSmallStrain
block = '4 5'
[../]
[./stress_2]
type = ComputeLinearElasticStress
block = '4 5'
[../]
[./elasticity_tensor_3]
type = ComputeElasticityTensor
C_ijkl = '309 195.6 195.6 309 309 539 349.53 349.53 349.53'
fill_method = symmetric9
block = '6'
euler_angle_1 = 55.0
euler_angle_2 = 26.0
euler_angle_3 = -10.0
[../]
[./strain_3]
type = ComputeSmallStrain
block = '6'
[../]
[./stress_3]
type = ComputeLinearElasticStress
block = '6'
[../]
[]
[Kernels]
[./TensorMechanics]
[../]
[]
[BCs]
active = 'anchor_up_Z anchor_dn_Z anchor_up_X anchor_dn_X anchor_up_Y anchor_dn_Y'
[./anchor_up_X]
type = DirichletBC
variable = disp_x
boundary = '2 13 15 21 27 28'
value = 0.0
[../]
[./anchor_up_Y]
type = DirichletBC
variable = disp_y
boundary = '2 13 15 21 27 28'
value = 0.0
[../]
[./anchor_up_Z]
type = DirichletBC
variable = disp_z
boundary = '2 13 15 21 27 28'
value = 0.025
[../]
[./anchor_dn_X]
type = DirichletBC
variable = disp_x
boundary = '6 9 18 22 24 29'
value = 0.0
[../]
[./anchor_dn_Y]
type = DirichletBC
variable = disp_y
boundary = '6 9 18 22 24 29'
value = 0.0
[../]
[./anchor_dn_Z]
type = DirichletBC
variable = disp_z
boundary = '6 9 18 22 24 29'
value = -0.025
[../]
[./surface_elasticity_X_surf3]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_x
boundary = '24'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-1 0.0 15.1e-1 13.7e-1 0.0 0.0 15.1e-1 0.0 34.9e-1'
# Intrinsic surface stress
taus = '-1.7e-1'
component = 0
[../]
[./surface_elasticity_Y_surf3]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_y
boundary = '24'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-1 0.0 15.1e-1 13.7e-1 0.0 0.0 15.1e-1 0.0 34.9e-1'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 1
[../]
[./surface_elasticity_Z_surf3]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_z
boundary = '24'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 2
[../]
[]
[Postprocessors]
[./Felastic]
type = ElasticEnergy
block = '1 2 3 4 5 6'
execute_on = 'timestep_end'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options = '-snes_view -snes_linesearch_monitor -snes_converged_reason -ksp_converged_reason -ksp_snes_ew'
petsc_options_iname = '-ksp_gmres_restart -snes_rtol -ksp_rtol -pc_type -pc_hypre_type'
petsc_options_value = ' 121 1e-8 1e-8 hypre boomeramg'
[../]
[]
[Executioner]
type = Steady
solve_type = 'NEWTON' #"PJFNK, JFNK, NEWTON"
[]
[Outputs]
print_linear_residuals = true
[./out]
type = Exodus
file_base = out_grains_surf_elastic
elemental_as_nodal = true
[../]
[]
(examples/other/Core_shell_ZnO_Trial1.i)
# Core-shell nanoparticle, 25 nm in diameter:
# Single-crystal round ZnO core, 15 nm in diameter.
# Single-crystal rutile TiO2 shell, 5 nm in thickness.
# Here, crystalline rTiO2 elastic parameters (both bulk and surface ones) in the shell were
# averaged out to isotropic symmetry, which effectively makes the rTiO2 shell amorphous.
[Mesh]
file = core_shell_nanowire_800nm_100_50.e
# uniform_refine = 1
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
[]
[Variables]
[./disp_x]
order = FIRST
family = LAGRANGE
[../]
[./disp_y]
order = FIRST
family = LAGRANGE
[../]
[./disp_z]
order = FIRST
family = LAGRANGE
[../]
[]
[AuxVariables]
[./stress_xx]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_zz]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_xy]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yz]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_zx]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_xx]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_zz]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_xy]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_yz]
order = CONSTANT
family = MONOMIAL
[../]
[./strain_zx]
order = CONSTANT
family = MONOMIAL
[../]
[./elastic_energy]
order = CONSTANT
family = MONOMIAL
[../]
[./pressure]
order = CONSTANT
family = MONOMIAL
[../]
[./EgZnO]
order = CONSTANT
family = MONOMIAL
[../]
[]
[Kernels]
[./TensorMechanics]
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
use_displaced_mesh = false
[../]
[]
[AuxKernels]
[./stress_xx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 0
index_j = 0
use_displaced_mesh = false
[../]
[./stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
use_displaced_mesh = false
[../]
[./stress_zz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zz
index_i = 2
index_j = 2
use_displaced_mesh = false
[../]
[./stress_xy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xy
index_i = 0
index_j = 1
use_displaced_mesh = false
[../]
[./stress_yz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yz
index_i = 1
index_j = 2
use_displaced_mesh = false
[../]
[./stress_zx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zx
index_i = 2
index_j = 0
use_displaced_mesh = false
[../]
[./strain_xx]
type = RankTwoAux
rank_two_tensor = elastic_strain
variable = strain_xx
index_i = 0
index_j = 0
use_displaced_mesh = false
[../]
[./strain_yy]
type = RankTwoAux
rank_two_tensor = elastic_strain
variable = strain_yy
index_i = 1
index_j = 1
use_displaced_mesh = false
[../]
[./strain_zz]
type = RankTwoAux
rank_two_tensor = elastic_strain
variable = strain_zz
index_i = 2
index_j = 2
use_displaced_mesh = false
[../]
[./strain_xy]
type = RankTwoAux
rank_two_tensor = elastic_strain
variable = strain_xy
index_i = 0
index_j = 1
use_displaced_mesh = false
[../]
[./strain_yz]
type = RankTwoAux
rank_two_tensor = elastic_strain
variable = strain_yz
index_i = 1
index_j = 2
use_displaced_mesh = false
[../]
[./strain_zx]
type = RankTwoAux
rank_two_tensor = elastic_strain
variable = strain_zx
index_i = 2
index_j = 0
use_displaced_mesh = false
[../]
### Here we use the results from Phys Rev B 88, 235210 (2013) Wagner et al
# which computes the strain-induced bandgap change of wurtzite ZnO using
# the HSE approach. Here E0, db, du, Rb and nu are material properties.
# Units will be in eV. Note we are justified in the strain_xx = strain_yy(using histo2d)
# Here we consider Gamma_7c-Gamma-7v as an example
[./bandgap]
type = BandGapAuxZnO
variable = EgZnO
relaxed_energy = 3.200
uniaxial_strain_rate = -3.800
biaxial_strain_rate = -0.450
biaxial_relaxation_coeff = 0.929
poisson_ratio = 0.31
[../]
[]
[BCs]
# Positive pressure -- compression, negative pressure -- tension
#active = 'back_x_bc back_y_bc back_z_bc top_z_bc'
[./back_x_bc2]
type = DirichletBC
variable = disp_x
boundary = 2
value = 0
[../]
[./back_y_bc2]
type = DirichletBC
variable = disp_y
boundary = 2
value = 0
[../]
[./back_z_bc2]
type = DirichletBC
variable = disp_z
boundary = 2
value = 0
[../]
[./back_x_bc4]
type = DirichletBC
variable = disp_x
boundary = 4
value = 0
[../]
[./back_y_bc4]
type = DirichletBC
variable = disp_y
boundary = 4
value = 0
[../]
[./back_z_bc4]
type = DirichletBC
variable = disp_z
boundary = 4
value = 0
[../]
#Load boundary condition (-.1 um displacement along z)
# [./top_x_bc]
# type = DirichletBC
# variable = disp_x
# boundary = 4
# value = 0
# [../]
#
# [./top_y_bc]
# type = DirichletBC
# variable = disp_y
# boundary = 4
# value = 0
# [../]
[./top_z_bc]
type = DirichletBC
variable = disp_z
boundary = 3
value = 20.3 #Edit this value#
[../]
### Should I also add in the boundary conditions for my other surfaces? According to Cubit, Surface 2
### does not exist. Do I just go along with what it's telling me?
# Surface elastic parameters for w-ZnO surface taken from Table III of JAP 111, 124305 (2012)
# and averaged out to represent an isotropic surface described by one diagonal elastic const C_1111,
# one shear elastic const C_1122 and one residual stress const tau_11.
#
# Original (anizotropic, w-ZnO 10-10 surface) elastic consts and residual stresses in N/m (PBE):
# C_1111 = 49.1, C_2222 = 34.9, C_1122 = 15.1, C_1212 = 13.7, tau_11 = -2.1, tau_22 = -1.4
#
# Isotropic C_1111 = [C_1111 + C_2222]/2 = 42.0, C_1122 = 15.0, C_1212 is computed automatically
# from C_1111 and C_1122, tau_11 = [tau_11 + tau_22]/2 = -1.7
# Conversion to [N/nm] multiplies everything by 10^{-9}
[./surface_elasticity_X_surf1]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_x
boundary = '1'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 0
[../]
[./surface_elasticity_Y_surf1]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_y
boundary = '1'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 1
[../]
[./surface_elasticity_Z_surf1]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_z
boundary = '1'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 2
[../]
[./surface_elasticity_X_surf2]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_x
boundary = '4'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 0
[../]
[./surface_elasticity_Y_surf2]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_y
boundary = '4'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 1
[../]
[./surface_elasticity_Z_surf2]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_z
boundary = '4'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 2
[../]
[./surface_elasticity_X_surf3]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_x
boundary = '5'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 0
[../]
[./surface_elasticity_Y_surf3]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_y
boundary = '5'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 1
[../]
[./surface_elasticity_Z_surf3]
type = SurfaceMechanicsBC
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
variable = disp_z
boundary = '5'
surface_euler_angle_1 = 0.0
surface_euler_angle_2 = 0.0
surface_euler_angle_3 = 0.0
# Surface elastic tensor C_1111, C_1112, C_1122, C_1212, C_1222, C_1211, C_2211, C_2212, C_2222
Cs_ijkl = '49.1e-09 0.0e-09 15.1e-09 13.7e-09 0.0e-09 0.0e-09 15.1e-09 0.0e-09 34.9e-09'
# Intrinsic surface stress
taus = '-1.7e-09'
component = 2
[../]
### I realize I'm missing some more Surface Elasticities here. I'm not sure how to incorporate them. Cubit doesn't show me
### a boundary 2. I'm assuming it was lost when I cut out the hole in the "shell cylinder".
[]
[Materials]
# ZnO shell (full [hexagonal] crystalline symmetry)
# Single crystal (see Table 1.6 and Ref. 86) in "Zinc Oxide: Fundamentals, Materials and Device Technology"
# by Hadis Morkoc and Umit Ozgur (2009 WILEY-VCH Verlag GmbH & Co. KGaA, Weinheim ISBN: 978-3-527-40813-9), Chapter 1.
# In GPa: C_ijkl = 209.7 121.1 105.1 209.7 105.1 210.9 42.47 42.47 44.29
# In N/(nm)^2, 1 GPa = 1 * 10^{-9} N/(nm)^2:
[./shell_grain1]
type = LinearElasticMaterial
block = '1'
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
fill_method = symmetric9
# C11 C12 C13 C22 C23 C33 C44 C55 C66
C_ijkl = '209.7e-09 121.1e-09 105.1e-09 209.7e-09 105.1e-09 210.9e-09 42.47e-09 42.47e-09 44.29e-09'
euler_angle_1 = 0.0
euler_angle_2 = 0.0
euler_angle_3 = 0.0
[../]
# Zn core (full [hexagonal] crystalline symmetry)
# Averaged constants for crystalline Zn, see Table 2 in H. M. Ledbetter, J. Phys. Chem. Ref. Data 6, 1181 (1977).
# In GPa: C_ijkl = 163.0 30.6 48.1 163.0 48.1 60.3 39.4 39.4 65.9
# In N/(nm)^2, 1 GPa = 1 * 10^{-9} N/(nm)^2:
[./core]
type = LinearElasticMaterial
block = '2'
disp_x = disp_x
disp_y = disp_y
disp_z = disp_z
fill_method = symmetric9
# C11 C12 C13 C22 C23 C33 C44 C55 C66
C_ijkl = '163.0e-09 30.6e-09 48.1e-09 163.0e-09 48.1e-09 60.3e-09 39.4e-09 39.4e-09 65.9e-09'
euler_angle_1 = 0.0
euler_angle_2 = 0.0
euler_angle_3 = 0.0
[../]
[]
[Postprocessors]
[./integrated_elastic_energy]
type = ElementIntegralVariablePostprocessor
# elastic_energy variable is computed by the TensorElasticEnergyAux AuxKernel above
variable = elastic_energy
# block = '1 2'
use_displaced_mesh = false
[../]
[./volume]
type = VolumePostprocessor
use_displaced_mesh = true
# variable = disp_x
# block = '1 2'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -pc_asm_overlap -pc_hypre_type '
petsc_options_value = ' gmres hypre 4 boomeramg'
[../]
[]
[Executioner]
type = Steady
solve_type = 'NEWTON'
petsc_options = '-snes_view -snes_converged_reason -ksp_converged_reason -options_table -options_left'
[]
#[Debug]
# show_var_residual_norms = true
#[]
[Outputs]
[./Exodus]
type = Exodus
file_base = out_0_Zn_ZnO_nanowire_100_nm
elemental_as_nodal = true
output_elemental_variables = 1
output_initial = 0
[../]
[./console]
type = Console
perf_log = true
linear_residuals = true
nonlinear_residuals = true
[../]
[]