Merge branch 'fix-thermalexpansion' into 'development'

thermal expansion working again

See merge request damask/DAMASK!392
This commit is contained in:
Franz Roters 2021-05-27 11:15:57 +00:00
commit 4eb78249e4
52 changed files with 253 additions and 212 deletions

@ -1 +1 @@
Subproject commit 6ced7cb62386f4769eb2bd98bad8fc518c4fcca3 Subproject commit 185cb53be76eded17565c5fa91bd9b4499cda4b8

View File

@ -1,7 +1,7 @@
TWIP_Steel_FeMnC: TWIP_Steel_FeMnC:
lattice: cF lattice: cF
mechanical: mechanical:
elastic: {type: hooke, C_11: 175.0e9, C_12: 115.0e9, C_44: 135.0e9} elastic: {type: Hooke, C_11: 175.0e9, C_12: 115.0e9, C_44: 135.0e9}
plastic: plastic:
type: dislotwin type: dislotwin
output: [rho_mob, rho_dip, gamma_sl, Lambda_sl, tau_pass, f_tw, Lambda_tw, tau_hat_tw, f_tr] output: [rho_mob, rho_dip, gamma_sl, Lambda_sl, tau_pass, f_tw, Lambda_tw, tau_hat_tw, f_tr]

View File

@ -1,7 +1,7 @@
Tungsten: Tungsten:
lattice: cI lattice: cI
mechanical: mechanical:
elastic: {type: hooke, C_11: 523.0e9, C_12: 202.0e9, C_44: 161.0e9} # Marinica et al. Journal of Physics: Condensed Matter(2013) elastic: {type: Hooke, C_11: 523.0e9, C_12: 202.0e9, C_44: 161.0e9} # Marinica et al. Journal of Physics: Condensed Matter(2013)
plastic: plastic:
type: dislotwin type: dislotwin
D: 2.0e-5 # Average grain size / m D: 2.0e-5 # Average grain size / m

View File

@ -1,16 +0,0 @@
# Kuo, J. C., Mikrostrukturmechanik von Bikristallen mit Kippkorngrenzen. Shaker-Verlag 2004. http://edoc.mpg.de/204079
Aluminum:
lattice: aP
mechanical:
output: [F, P, F_e, F_p, L_p]
elastic: {type: hooke, C_11: 110.9e9, C_12: 58.34e9}
plastic:
type: isotropic
output: [xi]
xi_0: 31e6
xi_inf: 63e6
dot_gamma_0: 0.001
n: 20
M: 3
h_0: 75e6
a: 2.25

View File

@ -1,8 +1,8 @@
FreeSurface: FreeSurface:
lattice: aP lattice: cI
mechanical: mechanical:
output: [F, P, F_e, F_p, L_p] output: [F, P, F_e, F_p, L_p]
elastic: {type: hooke, C_11: 1e8, C_12: 1e6} elastic: {type: Hooke, C_11: 1e8, C_12: 1e6, C_44: 4.95e7}
plastic: plastic:
type: isotropic type: isotropic
output: [xi] output: [xi]

View File

@ -2,7 +2,7 @@ Aluminum:
lattice: cF lattice: cF
mechanical: mechanical:
output: [F, P, F_e, F_p, L_p, O] output: [F, P, F_e, F_p, L_p, O]
elastic: {C_11: 106.75e9, C_12: 60.41e9, C_44: 28.34e9, type: hooke} elastic: {C_11: 106.75e9, C_12: 60.41e9, C_44: 28.34e9, type: Hooke}
plastic: plastic:
N_sl: [12] N_sl: [12]
a_sl: 2.25 a_sl: 2.25

View File

@ -4,7 +4,7 @@
Ferrite: Ferrite:
lattice: cI lattice: cI
mechanical: mechanical:
elastic: {C_11: 233.3e9, C_12: 135.5e9, C_44: 118.0e9, type: hooke} elastic: {C_11: 233.3e9, C_12: 135.5e9, C_44: 118.0e9, type: Hooke}
plastic: plastic:
N_sl: [12, 12] N_sl: [12, 12]
a_sl: 2.0 a_sl: 2.0

View File

@ -4,7 +4,7 @@
Martensite: Martensite:
lattice: cI lattice: cI
mechanical: mechanical:
elastic: {C_11: 417.4e9, C_12: 242.4e9, C_44: 211.1e9, type: hooke} elastic: {C_11: 417.4e9, C_12: 242.4e9, C_44: 211.1e9, type: Hooke}
plastic: plastic:
N_sl: [12, 12] N_sl: [12, 12]
a_sl: 2.0 a_sl: 2.0

View File

@ -4,7 +4,7 @@ Magnesium:
c/a: 1.62350 c/a: 1.62350
mechanical: mechanical:
output: [F, P, F_e, F_p, L_p, O] output: [F, P, F_e, F_p, L_p, O]
elastic: {C_11: 59.3e9, C_12: 25.7e9, C_13: 21.4e9, C_33: 61.5e9, C_44: 16.4e9, type: hooke} elastic: {C_11: 59.3e9, C_12: 25.7e9, C_13: 21.4e9, C_33: 61.5e9, C_44: 16.4e9, type: Hooke}
plastic: plastic:
N_sl: [3, 3, 0, 6, 0, 6] N_sl: [3, 3, 0, 6, 0, 6]
N_tw: [6, 0, 0, 6] N_tw: [6, 0, 0, 6]

View File

@ -6,7 +6,7 @@ cpTi:
c/a: 1.587 c/a: 1.587
mechanical: mechanical:
output: [F, P, F_e, F_p, L_p, O] output: [F, P, F_e, F_p, L_p, O]
elastic: {C_11: 160.0e9, C_12: 90.0e9, C_13: 66.0e9, C_33: 181.7e9, C_44: 46.5e9, type: hooke} elastic: {C_11: 160.0e9, C_12: 90.0e9, C_13: 66.0e9, C_33: 181.7e9, C_44: 46.5e9, type: Hooke}
plastic: plastic:
N_sl: [3, 3, 0, 6, 12] N_sl: [3, 3, 0, 6, 12]
a_sl: 2.0 a_sl: 2.0

View File

@ -1,4 +1,4 @@
lattice: cF
rho: 2700
references: references:
- en.wikipedia.org/wiki/Aluminium - en.wikipedia.org/wiki/Aluminium
lattice: cF
rho: 2700.0

View File

@ -0,0 +1,4 @@
references:
- en.wikipedia.org/wiki/Gold
lattice: cF
rho: 19300.0

View File

@ -0,0 +1,4 @@
references:
- en.wikipedia.org/wiki/Copper
lattice: cF
rho: 8960.0

View File

@ -1,4 +1,4 @@
lattice: cI
rho: 7874
references: references:
- en.wikipedia.org/wiki/Iron - en.wikipedia.org/wiki/Iron
lattice: cI
rho: 7874.0

View File

@ -1,4 +1,4 @@
lattice: cF
rho: 8908
references: references:
- en.wikipedia.org/wiki/Nickel - en.wikipedia.org/wiki/Nickel
lattice: cF
rho: 8908.0

View File

@ -0,0 +1,6 @@
references:
- www.totalmateria.com/page.aspx?ID=CheckArticle&site=ktn&NM=221
- en.wikipedia.org/wiki/Titanium
lattice: hP
c/a: 1.587
rho: 4506.0

View File

@ -0,0 +1,4 @@
references:
- en.wikipedia.org/wiki/Tungsten
lattice: cF
rho: 19300.0

View File

@ -1,2 +0,0 @@
lattice: hP
c/a: 1.587

View File

@ -0,0 +1,5 @@
type: thermalexpansion
references:
- en.wikipedia.org/wiki/Thermal_expansion
A_11: [23.1e-6]
T_ref: 293.15

View File

@ -0,0 +1,5 @@
type: thermalexpansion
references:
- en.wikipedia.org/wiki/Thermal_expansion
A_11: [14e-6]
T_ref: 293.15

View File

@ -0,0 +1,5 @@
type: thermalexpansion
references:
- en.wikipedia.org/wiki/Thermal_expansion, fitted from image description
A_11: [12.70371e-6, 7.54e-9, -1.0e-11]
T_ref: 273.0

View File

@ -0,0 +1,5 @@
type: thermalexpansion
references:
- en.wikipedia.org/wiki/Thermal_expansion
A_11: [17e-6]
T_ref: 293.15

View File

@ -0,0 +1,5 @@
type: thermalexpansion
references:
- en.wikipedia.org/wiki/Thermal_expansion
A_11: [11.8e-6]
T_ref: 293.15

View File

@ -0,0 +1,5 @@
type: thermalexpansion
references:
- en.wikipedia.org/wiki/Thermal_expansion
A_11: [4.5e-6]
T_ref: 293.15

View File

@ -0,0 +1,5 @@
type: thermalexpansion
references:
- en.wikipedia.org/wiki/Thermal_expansion, fitted from image description
A_11: [11.365e-6, 5.0e-9]
T_ref: 273.0

View File

@ -0,0 +1,6 @@
type: Hooke
references:
- www.mit.edu/~6.777/matprops/copper.htm, fixed typo
C_11: 168.3e9
C_12: 122.1e9
C_44: 75.7e9

View File

@ -0,0 +1,8 @@
type: Hooke
references:
- D. Cereceda et al.,
International Journal of Plasticity, 78, 242-265, 2016,
10.1016/j.ijplas.2015.09.002
C_11: 523.e9
C_12: 202.e9
C_44: 161.e9

View File

@ -1,7 +1,7 @@
type: dislotwin type: dislotwin
references: references:
- K. Sedighiani et al., - K. Sedighiani et al.,
International Journal of Plasticity, 134, 102779, 2020 International Journal of Plasticity, 134, 102779, 2020,
10.1016/j.ijplas.2020.102779 10.1016/j.ijplas.2020.102779
- K. Sedighiani et al., - K. Sedighiani et al.,
Mechanics of Materials, submitted Mechanics of Materials, submitted

View File

@ -1,14 +1,17 @@
# parameters fitted by D. Ma to:
# On the mathematical description of the tensile stress-strain curves of polycrystalline face centered cubic metals
# International Journal of Plasticity, Volume 12, Issue 1, 1996, Pages 35-43
# DOI: 10.1016/S0749-6419(95)00043-7
type: phenopowerlaw type: phenopowerlaw
output: [xi_sl] references:
- D. Ma et al.,
Acta Materialia, 103, 796-808, 2016,
10.1016/j.actamat.2015.11.016
- I. Kovács and G.Vörös,
International Journal of Plasticity, 12, 35-43, 1996,
10.1016/S0749-6419(95)00043-7
output: [xi_sl, gamma_sl]
N_sl: [12] N_sl: [12]
n_sl: 83 n_sl: 83.3
dot_gamma_0_sl: 0.001 dot_gamma_0_sl: 0.001
h_0_sl_sl: 75e6 h_0_sl_sl: 75.0e6
h_sl_sl: [1, 1, 1.4, 1.4, 1.4, 1.4, 1.4] h_sl_sl: [1, 1, 1.4, 1.4, 1.4, 1.4, 1.4]
a_sl: 1.0 a_sl: 1.0
xi_0_sl: [26e6] xi_0_sl: [26.25e6]
xi_inf_sl: [53e6] xi_inf_sl: [53.0e6]

View File

@ -1,7 +1,5 @@
references: references:
- www.engineeringtoolbox.com/thermal-conductivity-metals-d_858.html - www.engineeringtoolbox.com/thermal-conductivity-metals-d_858.html
- www.engineeringtoolbox.com/specific-heat-metals-d_152.html - www.engineeringtoolbox.com/specific-heat-metals-d_152.html
c_p: 0.91e3 C_p: 910.0
K_11: 236.0 K_11: 236.0
K_22: 236.0
K_33: 236.0

View File

@ -0,0 +1,4 @@
references:
- de.wikipedia.org/wiki/Gold
C_p: 128.0
K_11: 320.0

View File

@ -0,0 +1,4 @@
references:
- www.mit.edu/~6.777/matprops/copper.htm
C_p: 385.0
K_11: 401.0

View File

@ -1,7 +1,5 @@
references: references:
- www.engineeringtoolbox.com/thermal-conductivity-metals-d_858.html - www.engineeringtoolbox.com/thermal-conductivity-metals-d_858.html
- www.engineeringtoolbox.com/specific-heat-metals-d_152.html - www.engineeringtoolbox.com/specific-heat-metals-d_152.html
c_p: 0.49e3 C_p: 490.0
K_11: 54.0 K_11: 54.0
K_22: 54.0
K_33: 54.0

View File

@ -0,0 +1,4 @@
references:
- www.mit.edu/~6.777/matprops/tungsten.htm
C_p: 132.51
K_11: 178.0

View File

@ -1,4 +1,3 @@
c_p: 1 C_p: 1
K_11: 0 K_11: 0
K_22: 0
K_33: 0 K_33: 0

View File

@ -1,4 +1,3 @@
c_p: 1 C_p: 1
K_11: 1e30 K_11: 1e30
K_22: 1e30
K_33: 1e30 K_33: 1e30

View File

@ -36,9 +36,9 @@ phase:
lattice: cF lattice: cF
mechanics: mechanics:
output: [F, P, F_e, F_p, L_p] output: [F, P, F_e, F_p, L_p]
elasticity: {C_11: 106.75e9, C_12: 60.41e9, C_44: 28.34e9, type: hooke} elasticity: {C_11: 106.75e9, C_12: 60.41e9, C_44: 28.34e9, type: Hooke}
Steel: Steel:
lattice: cI lattice: cI
mechanics: mechanics:
output: [F, P, F_e, F_p, L_p] output: [F, P, F_e, F_p, L_p]
elasticity: {C_11: 233.3e9, C_12: 135.5e9, C_44: 118.0e9, type: hooke} elasticity: {C_11: 233.3e9, C_12: 135.5e9, C_44: 118.0e9, type: Hooke}

View File

@ -9,7 +9,7 @@ phase:
lattice: cF lattice: cF
mechanical: mechanical:
output: [F, P, F_e, F_p, L_p, O] output: [F, P, F_e, F_p, L_p, O]
elastic: {C_11: 106.75e9, C_12: 60.41e9, C_44: 28.34e9, type: hooke} elastic: {C_11: 106.75e9, C_12: 60.41e9, C_44: 28.34e9, type: Hooke}
plastic: plastic:
N_sl: [12] N_sl: [12]
a_sl: 2.25 a_sl: 2.25
@ -26,7 +26,7 @@ phase:
lattice: cI lattice: cI
mechanical: mechanical:
output: [F, P, F_e, F_p, L_p, O] output: [F, P, F_e, F_p, L_p, O]
elastic: {C_11: 106.75e9, C_12: 60.41e9, C_44: 28.34e9, type: hooke} elastic: {C_11: 106.75e9, C_12: 60.41e9, C_44: 28.34e9, type: Hooke}
plastic: plastic:
N_sl: [12] N_sl: [12]
a_sl: 2.25 a_sl: 2.25

View File

@ -641,7 +641,7 @@ phase:
lattice: cF lattice: cF
mechanical: mechanical:
output: [F, F_e, F_p, L_p] output: [F, F_e, F_p, L_p]
elastic: {C_11: 106.75e9, C_12: 60.41e9, C_44: 28.34e9, type: hooke} elastic: {C_11: 106.75e9, C_12: 60.41e9, C_44: 28.34e9, type: Hooke}
plastic: plastic:
N_sl: [12] N_sl: [12]
a_sl: 2.25 a_sl: 2.25
@ -658,7 +658,7 @@ phase:
lattice: cI lattice: cI
mechanical: mechanical:
output: [F, P, F_e, F_p, L_p, O] output: [F, P, F_e, F_p, L_p, O]
elastic: {C_11: 106.75e9, C_12: 60.41e9, C_44: 28.34e9, type: hooke} elastic: {C_11: 106.75e9, C_12: 60.41e9, C_44: 28.34e9, type: Hooke}
plastic: plastic:
N_sl: [12] N_sl: [12]
a_sl: 2.25 a_sl: 2.25
@ -675,4 +675,4 @@ phase:
lattice: cI lattice: cI
mechanical: mechanical:
output: [F] output: [F]
elastic: {C_11: 106.75e9, C_12: 60.41e9, C_44: 28.34e9, type: hooke} elastic: {C_11: 106.75e9, C_12: 60.41e9, C_44: 28.34e9, type: Hooke}

View File

@ -9,7 +9,7 @@ phase:
lattice: cF lattice: cF
mechanical: mechanical:
output: [F, P, F_e, F_p, L_p, O] output: [F, P, F_e, F_p, L_p, O]
elastic: {C_11: 106.75e9, C_12: 60.41e9, C_44: 28.34e9, type: hooke} elastic: {C_11: 106.75e9, C_12: 60.41e9, C_44: 28.34e9, type: Hooke}
plastic: plastic:
N_sl: [12] N_sl: [12]
a_sl: 2.25 a_sl: 2.25

View File

@ -89,7 +89,7 @@ module subroutine RGC_init(num_homogMech)
print'(/,a)', ' <<<+- homogenization:mechanical:RGC init -+>>>' print'(/,a)', ' <<<+- homogenization:mechanical:RGC init -+>>>'
print'(a,i2)', ' # instances: ',count(homogenization_type == HOMOGENIZATION_RGC_ID) print'(a,i0)', ' # homogenizations: ',count(homogenization_type == HOMOGENIZATION_RGC_ID)
flush(IO_STDOUT) flush(IO_STDOUT)
print*, 'D.D. Tjahjanto et al., International Journal of Material Forming 2(1):939942, 2009' print*, 'D.D. Tjahjanto et al., International Journal of Material Forming 2(1):939942, 2009'

View File

@ -19,7 +19,7 @@ module subroutine isostrain_init
print'(/,a)', ' <<<+- homogenization:mechanical:isostrain init -+>>>' print'(/,a)', ' <<<+- homogenization:mechanical:isostrain init -+>>>'
print'(a,i2)', ' # instances: ',count(homogenization_type == HOMOGENIZATION_ISOSTRAIN_ID) print'(a,i0)', ' # homogenizations: ',count(homogenization_type == HOMOGENIZATION_ISOSTRAIN_ID)
flush(IO_STDOUT) flush(IO_STDOUT)
do ho = 1, size(homogenization_type) do ho = 1, size(homogenization_type)

View File

@ -19,7 +19,7 @@ module subroutine pass_init
print'(/,a)', ' <<<+- homogenization:mechanical:pass init -+>>>' print'(/,a)', ' <<<+- homogenization:mechanical:pass init -+>>>'
print'(a,i2)', ' # instances: ',count(homogenization_type == HOMOGENIZATION_NONE_ID) print'(a,i0)', ' # homogenizations: ',count(homogenization_type == HOMOGENIZATION_NONE_ID)
flush(IO_STDOUT) flush(IO_STDOUT)
do ho = 1, size(homogenization_type) do ho = 1, size(homogenization_type)

View File

@ -296,7 +296,6 @@ module lattice
integer, parameter :: & integer, parameter :: &
BCT_NSLIP = sum(BCT_NSLIPSYSTEM) !< total # of slip systems for bct BCT_NSLIP = sum(BCT_NSLIPSYSTEM) !< total # of slip systems for bct
real(pReal), dimension(3+3,BCT_NSLIP), parameter :: & real(pReal), dimension(3+3,BCT_NSLIP), parameter :: &
BCT_SYSTEMSLIP = reshape(real([& BCT_SYSTEMSLIP = reshape(real([&
! {100)<001] systems ! {100)<001] systems
@ -366,30 +365,13 @@ module lattice
1, 1, 1, 1,-2, 1 & 1, 1, 1, 1,-2, 1 &
],pReal),shape(BCT_SYSTEMSLIP)) !< bct slip systems for c/a = 0.5456 (Sn), sorted by Bieler 2009 (https://doi.org/10.1007/s11664-009-0909-x) ],pReal),shape(BCT_SYSTEMSLIP)) !< bct slip systems for c/a = 0.5456 (Sn), sorted by Bieler 2009 (https://doi.org/10.1007/s11664-009-0909-x)
!--------------------------------------------------------------------------------------------------
! orthorhombic primitive (oP)
integer, dimension(*), parameter :: &
ORT_NCLEAVAGESYSTEM = [1, 1, 1] !< # of cleavage systems per family for orthorhombic primitive
integer, parameter :: &
ORT_NCLEAVAGE = sum(ORT_NCLEAVAGESYSTEM) !< total # of cleavage systems for orthorhombic primitive
real(pReal), dimension(3+3,ORT_NCLEAVAGE), parameter :: &
ORT_SYSTEMCLEAVAGE = reshape(real([&
0, 1, 0, 1, 0, 0, &
0, 0, 1, 0, 1, 0, &
1, 0, 0, 0, 0, 1 &
],pReal),shape(ORT_SYSTEMCLEAVAGE)) !< orthorhombic primitive cleavage systems
enum, bind(c); enumerator :: & enum, bind(c); enumerator :: &
lattice_UNDEFINED_ID, & lattice_UNDEFINED_ID, &
lattice_ISO_ID, &
lattice_FCC_ID, & lattice_FCC_ID, &
lattice_BCC_ID, & lattice_BCC_ID, &
lattice_BCT_ID, &
lattice_HEX_ID, & lattice_HEX_ID, &
lattice_ORT_ID lattice_BCT_ID
end enum end enum
! SHOULD NOT BE PART OF LATTICE BEGIN ! SHOULD NOT BE PART OF LATTICE BEGIN
@ -414,12 +396,10 @@ module lattice
public :: & public :: &
lattice_init, & lattice_init, &
lattice_ISO_ID, &
lattice_FCC_ID, & lattice_FCC_ID, &
lattice_BCC_ID, & lattice_BCC_ID, &
lattice_BCT_ID, &
lattice_HEX_ID, & lattice_HEX_ID, &
lattice_ORT_ID, & lattice_BCT_ID, &
lattice_equivalent_nu, & lattice_equivalent_nu, &
lattice_equivalent_mu, & lattice_equivalent_mu, &
lattice_applyLatticeSymmetry33, & lattice_applyLatticeSymmetry33, &
@ -479,13 +459,11 @@ subroutine lattice_init
elasticity => mech%get('elastic') elasticity => mech%get('elastic')
lattice_C66(1,1,ph) = elasticity%get_asFloat('C_11') lattice_C66(1,1,ph) = elasticity%get_asFloat('C_11')
lattice_C66(1,2,ph) = elasticity%get_asFloat('C_12') lattice_C66(1,2,ph) = elasticity%get_asFloat('C_12')
lattice_C66(4,4,ph) = elasticity%get_asFloat('C_44')
lattice_C66(1,3,ph) = elasticity%get_asFloat('C_13',defaultVal=0.0_pReal) lattice_C66(1,3,ph) = elasticity%get_asFloat('C_13',defaultVal=0.0_pReal)
lattice_C66(2,2,ph) = elasticity%get_asFloat('C_22',defaultVal=0.0_pReal)
lattice_C66(2,3,ph) = elasticity%get_asFloat('C_23',defaultVal=0.0_pReal) lattice_C66(2,3,ph) = elasticity%get_asFloat('C_23',defaultVal=0.0_pReal)
lattice_C66(3,3,ph) = elasticity%get_asFloat('C_33',defaultVal=0.0_pReal) lattice_C66(3,3,ph) = elasticity%get_asFloat('C_33',defaultVal=0.0_pReal)
lattice_C66(4,4,ph) = elasticity%get_asFloat('C_44',defaultVal=0.0_pReal)
lattice_C66(5,5,ph) = elasticity%get_asFloat('C_55',defaultVal=0.0_pReal)
lattice_C66(6,6,ph) = elasticity%get_asFloat('C_66',defaultVal=0.0_pReal) lattice_C66(6,6,ph) = elasticity%get_asFloat('C_66',defaultVal=0.0_pReal)
select case(phase%get_asString('lattice')) select case(phase%get_asString('lattice'))
@ -497,10 +475,6 @@ subroutine lattice_init
lattice_structure(ph) = lattice_HEX_ID lattice_structure(ph) = lattice_HEX_ID
case('tI') case('tI')
lattice_structure(ph) = lattice_BCT_ID lattice_structure(ph) = lattice_BCT_ID
case('oP')
lattice_structure(ph) = lattice_ORT_ID
case('aP')
lattice_structure(ph) = lattice_ISO_ID
case default case default
call IO_error(130,ext_msg='lattice_init: '//phase%get_asString('lattice')) call IO_error(130,ext_msg='lattice_init: '//phase%get_asString('lattice'))
end select end select
@ -1565,9 +1539,6 @@ function lattice_SchmidMatrix_cleavage(Ncleavage,structure,cOverA) result(Schmid
integer :: i integer :: i
select case(structure) select case(structure)
case('oP')
NcleavageMax = ORT_NCLEAVAGESYSTEM
cleavageSystems = ORT_SYSTEMCLEAVAGE
case('cF') case('cF')
NcleavageMax = FCC_NCLEAVAGESYSTEM NcleavageMax = FCC_NCLEAVAGESYSTEM
cleavageSystems = FCC_SYSTEMCLEAVAGE cleavageSystems = FCC_SYSTEMCLEAVAGE
@ -1693,32 +1664,25 @@ end function lattice_labels_slip
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief Return 3x3 tensor with symmetry according to given crystal structure !> @brief Return 3x3 tensor with symmetry according to given crystal structure
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
function lattice_applyLatticeSymmetry33(T,structure) result(T_sym) pure function lattice_applyLatticeSymmetry33(T,structure) result(T_sym)
real(pReal), dimension(3,3) :: T_sym real(pReal), dimension(3,3) :: T_sym
real(pReal), dimension(3,3), intent(in) :: T real(pReal), dimension(3,3), intent(in) :: T
character(len=*), intent(in) :: structure character(len=*), intent(in) :: structure
integer :: k
T_sym = 0.0_pReal T_sym = 0.0_pReal
select case(structure) select case(structure)
case('aP','cF','cI') case('cF','cI')
do k=1,3 T_sym(1,1) = T(1,1)
T_sym(k,k) = T(1,1) T_sym(2,2) = T(1,1)
enddo T_sym(3,3) = T(1,1)
case('hP') case('hP','tI')
T_sym(1,1) = T(1,1) T_sym(1,1) = T(1,1)
T_sym(2,2) = T(1,1) T_sym(2,2) = T(1,1)
T_sym(3,3) = T(3,3) T_sym(3,3) = T(3,3)
case('oP','tI')
T_sym(1,1) = T(1,1)
T_sym(2,2) = T(2,2)
T_sym(3,3) = T(3,3)
case default
call IO_error(137,ext_msg='lattice_applyLatticeSymmetry33: '//trim(structure))
end select end select
end function lattice_applyLatticeSymmetry33 end function lattice_applyLatticeSymmetry33
@ -1728,77 +1692,45 @@ end function lattice_applyLatticeSymmetry33
!> @brief Return stiffness matrix in 6x6 notation with symmetry according to given crystal structure !> @brief Return stiffness matrix in 6x6 notation with symmetry according to given crystal structure
!> @details J. A. Rayne and B. S. Chandrasekhar Phys. Rev. 120, 1658 Erratum Phys. Rev. 122, 1962 !> @details J. A. Rayne and B. S. Chandrasekhar Phys. Rev. 120, 1658 Erratum Phys. Rev. 122, 1962
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
function applyLatticeSymmetryC66(C66,structure) result(C66_sym) pure function applyLatticeSymmetryC66(C66,structure) result(C66_sym)
real(pReal), dimension(6,6) :: C66_sym real(pReal), dimension(6,6) :: C66_sym
real(pReal), dimension(6,6), intent(in) :: C66 real(pReal), dimension(6,6), intent(in) :: C66
character(len=*), intent(in) :: structure character(len=*), intent(in) :: structure
integer :: j,k integer :: i,j
C66_sym = 0.0_pReal C66_sym = 0.0_pReal
select case(structure) select case(structure)
case ('aP')
do k=1,3
do j=1,3
C66_sym(k,j) = C66(1,2)
enddo
C66_sym(k,k) = C66(1,1)
C66_sym(k+3,k+3) = 0.5_pReal*(C66(1,1)-C66(1,2))
enddo
case ('cF','cI') case ('cF','cI')
do k=1,3 C66_sym(1,1) = C66(1,1); C66_sym(2,2) = C66(1,1); C66_sym(3,3) = C66(1,1)
do j=1,3 C66_sym(1,2) = C66(1,2); C66_sym(1,3) = C66(1,2); C66_sym(2,3) = C66(1,2)
C66_sym(k,j) = C66(1,2) C66_sym(4,4) = C66(4,4); C66_sym(5,5) = C66(4,4); C66_sym(6,6) = C66(4,4) ! isotropic C_44 = (C_11-C_12)/2
enddo
C66_sym(k,k) = C66(1,1)
C66_sym(k+3,k+3) = C66(4,4)
enddo
case ('hP') case ('hP')
C66_sym(1,1) = C66(1,1) C66_sym(1,1) = C66(1,1); C66_sym(2,2) = C66(1,1)
C66_sym(2,2) = C66(1,1)
C66_sym(3,3) = C66(3,3) C66_sym(3,3) = C66(3,3)
C66_sym(1,2) = C66(1,2) C66_sym(1,2) = C66(1,2)
C66_sym(2,1) = C66(1,2) C66_sym(1,3) = C66(1,3); C66_sym(2,3) = C66(1,3)
C66_sym(1,3) = C66(1,3) C66_sym(4,4) = C66(4,4); C66_sym(5,5) = C66(4,4)
C66_sym(3,1) = C66(1,3)
C66_sym(2,3) = C66(1,3)
C66_sym(3,2) = C66(1,3)
C66_sym(4,4) = C66(4,4)
C66_sym(5,5) = C66(4,4)
C66_sym(6,6) = 0.5_pReal*(C66(1,1)-C66(1,2)) C66_sym(6,6) = 0.5_pReal*(C66(1,1)-C66(1,2))
case ('oP')
C66_sym(1,1) = C66(1,1)
C66_sym(2,2) = C66(2,2)
C66_sym(3,3) = C66(3,3)
C66_sym(1,2) = C66(1,2)
C66_sym(2,1) = C66(1,2)
C66_sym(1,3) = C66(1,3)
C66_sym(3,1) = C66(1,3)
C66_sym(2,3) = C66(2,3)
C66_sym(3,2) = C66(2,3)
C66_sym(4,4) = C66(4,4)
C66_sym(5,5) = C66(5,5)
C66_sym(6,6) = C66(6,6)
case ('tI') case ('tI')
C66_sym(1,1) = C66(1,1) C66_sym(1,1) = C66(1,1); C66_sym(2,2) = C66(1,1)
C66_sym(2,2) = C66(1,1)
C66_sym(3,3) = C66(3,3) C66_sym(3,3) = C66(3,3)
C66_sym(1,2) = C66(1,2) C66_sym(1,2) = C66(1,2)
C66_sym(2,1) = C66(1,2) C66_sym(1,3) = C66(1,3); C66_sym(2,3) = C66(1,3)
C66_sym(1,3) = C66(1,3) C66_sym(4,4) = C66(4,4); C66_sym(5,5) = C66(4,4)
C66_sym(3,1) = C66(1,3)
C66_sym(2,3) = C66(1,3)
C66_sym(3,2) = C66(1,3)
C66_sym(4,4) = C66(4,4)
C66_sym(5,5) = C66(4,4)
C66_sym(6,6) = C66(6,6) C66_sym(6,6) = C66(6,6)
case default
call IO_error(137,ext_msg='applyLatticeSymmetryC66: '//trim(structure))
end select end select
do i = 1, 6
do j = i+1, 6
C66_sym(j,i) = C66_sym(i,j)
enddo
enddo
end function applyLatticeSymmetryC66 end function applyLatticeSymmetryC66
@ -2012,7 +1944,7 @@ function buildCoordinateSystem(active,potential,system,structure,cOverA)
select case(structure) select case(structure)
case ('cF','cI','aP','oP','tI') case ('cF','cI','tI')
direction = system(1:3,p) direction = system(1:3,p)
normal = system(4:6,p) normal = system(4:6,p)
@ -2247,7 +2179,6 @@ function lattice_equivalent_nu(C,assumption) result(nu)
/ (S(1,1)+S(2,2)+S(3,3) +2.0_pReal*(S(1,2)+S(2,3)+S(1,3))) / (S(1,1)+S(2,2)+S(3,3) +2.0_pReal*(S(1,2)+S(2,3)+S(1,3)))
else else
error stop 'invalid assumption' error stop 'invalid assumption'
K = 0.0_pReal
endif endif
mu = lattice_equivalent_mu(C,assumption) mu = lattice_equivalent_mu(C,assumption)
@ -2280,7 +2211,6 @@ function lattice_equivalent_mu(C,assumption) result(mu)
/ (4.0_pReal*(S(1,1)+S(2,2)+S(3,3)) -4.0_pReal*(S(1,2)+S(2,3)+S(1,3)) +3.0_pReal*(S(4,4)+S(5,5)+S(6,6))) / (4.0_pReal*(S(1,1)+S(2,2)+S(3,3)) -4.0_pReal*(S(1,2)+S(2,3)+S(1,3)) +3.0_pReal*(S(4,4)+S(5,5)+S(6,6)))
else else
error stop 'invalid assumption' error stop 'invalid assumption'
mu = 0.0_pReal
endif endif
end function lattice_equivalent_mu end function lattice_equivalent_mu
@ -2294,9 +2224,12 @@ subroutine selfTest
real(pReal), dimension(:,:,:), allocatable :: CoSy real(pReal), dimension(:,:,:), allocatable :: CoSy
real(pReal), dimension(:,:), allocatable :: system real(pReal), dimension(:,:), allocatable :: system
real(pReal), dimension(6,6) :: C real(pReal), dimension(6,6) :: C, C_cF, C_cI, C_hP, C_tI
real(pReal), dimension(3,3) :: T, T_cF, T_cI, T_hP, T_tI
real(pReal), dimension(2) :: r real(pReal), dimension(2) :: r
real(pReal) :: lambda real(pReal) :: lambda
integer :: i
call random_number(r) call random_number(r)
@ -2304,11 +2237,52 @@ subroutine selfTest
CoSy = buildCoordinateSystem([1],[1],system,'cF',0.0_pReal) CoSy = buildCoordinateSystem([1],[1],system,'cF',0.0_pReal)
if(any(dNeq(CoSy(1:3,1:3,1),math_I3))) error stop 'buildCoordinateSystem' if(any(dNeq(CoSy(1:3,1:3,1),math_I3))) error stop 'buildCoordinateSystem'
do i = 1, 10
call random_number(C) call random_number(C)
C(1,1) = C(1,1) + 1.0_pReal C_cF = applyLatticeSymmetryC66(C,'cI')
C = applyLatticeSymmetryC66(C,'aP') C_cI = applyLatticeSymmetryC66(C,'cF')
if(dNeq(C(6,6),lattice_equivalent_mu(C,'voigt'),1.0e-12_pReal)) error stop 'equivalent_mu/voigt' C_hP = applyLatticeSymmetryC66(C,'hP')
if(dNeq(C(6,6),lattice_equivalent_mu(C,'voigt'),1.0e-12_pReal)) error stop 'equivalent_mu/reuss' C_tI = applyLatticeSymmetryC66(C,'tI')
if (any(dNeq(C_cI,transpose(C_cF)))) error stop 'SymmetryC66/cI-cF'
if (any(dNeq(C_cF,transpose(C_cI)))) error stop 'SymmetryC66/cF-cI'
if (any(dNeq(C_hP,transpose(C_hP)))) error stop 'SymmetryC66/hP'
if (any(dNeq(C_tI,transpose(C_tI)))) error stop 'SymmetryC66/tI'
if (any(dNeq(C(1,1),[C_cF(1,1),C_cF(2,2),C_cF(3,3)]))) error stop 'SymmetryC_11-22-33/c'
if (any(dNeq(C(1,2),[C_cF(1,2),C_cF(1,3),C_cF(2,3)]))) error stop 'SymmetryC_12-13-23/c'
if (any(dNeq(C(4,4),[C_cF(4,4),C_cF(5,5),C_cF(6,6)]))) error stop 'SymmetryC_44-55-66/c'
if (any(dNeq(C(1,1),[C_hP(1,1),C_hP(2,2)]))) error stop 'SymmetryC_11-22/hP'
if (any(dNeq(C(1,3),[C_hP(1,3),C_hP(2,3)]))) error stop 'SymmetryC_13-23/hP'
if (any(dNeq(C(4,4),[C_hP(4,4),C_hP(5,5)]))) error stop 'SymmetryC_44-55/hP'
if (any(dNeq(C(1,1),[C_tI(1,1),C_tI(2,2)]))) error stop 'SymmetryC_11-22/tI'
if (any(dNeq(C(1,3),[C_tI(1,3),C_tI(2,3)]))) error stop 'SymmetryC_13-23/tI'
if (any(dNeq(C(4,4),[C_tI(4,4),C_tI(5,5)]))) error stop 'SymmetryC_44-55/tI'
call random_number(T)
T_cF = lattice_applyLatticeSymmetry33(T,'cI')
T_cI = lattice_applyLatticeSymmetry33(T,'cF')
T_hP = lattice_applyLatticeSymmetry33(T,'hP')
T_tI = lattice_applyLatticeSymmetry33(T,'tI')
if (any(dNeq0(T_cF) .and. math_I3<1.0_pReal)) error stop 'Symmetry33/c'
if (any(dNeq0(T_hP) .and. math_I3<1.0_pReal)) error stop 'Symmetry33/hP'
if (any(dNeq0(T_tI) .and. math_I3<1.0_pReal)) error stop 'Symmetry33/tI'
if (any(dNeq(T(1,1),[T_cI(1,1),T_cI(2,2),T_cI(3,3)]))) error stop 'Symmetry33_11-22-33/c'
if (any(dNeq(T(1,1),[T_hP(1,1),T_hP(2,2)]))) error stop 'Symmetry33_11-22/hP'
if (any(dNeq(T(1,1),[T_tI(1,1),T_tI(2,2)]))) error stop 'Symmetry33_11-22/tI'
enddo
call random_number(C)
C(1,1) = C(1,1) + C(1,2) + 0.1_pReal
C(4,4) = 0.5_pReal * (C(1,1) - C(1,2))
C = applyLatticeSymmetryC66(C,'cI')
if(dNeq(C(4,4),lattice_equivalent_mu(C,'voigt'),1.0e-12_pReal)) error stop 'equivalent_mu/voigt'
if(dNeq(C(4,4),lattice_equivalent_mu(C,'reuss'),1.0e-12_pReal)) error stop 'equivalent_mu/reuss'
lambda = C(1,2) lambda = C(1,2)
if(dNeq(lambda*0.5_pReal/(lambda+lattice_equivalent_mu(C,'voigt')), & if(dNeq(lambda*0.5_pReal/(lambda+lattice_equivalent_mu(C,'voigt')), &

View File

@ -121,7 +121,6 @@ module subroutine damage_init
source => sources%get(1) source => sources%get(1)
param(ph)%mu = source%get_asFloat('M',defaultVal=0.0_pReal) param(ph)%mu = source%get_asFloat('M',defaultVal=0.0_pReal)
param(ph)%K(1,1) = source%get_asFloat('D_11',defaultVal=0.0_pReal) param(ph)%K(1,1) = source%get_asFloat('D_11',defaultVal=0.0_pReal)
param(ph)%K(2,2) = source%get_asFloat('D_22',defaultVal=0.0_pReal)
param(ph)%K(3,3) = source%get_asFloat('D_33',defaultVal=0.0_pReal) param(ph)%K(3,3) = source%get_asFloat('D_33',defaultVal=0.0_pReal)
param(ph)%K = lattice_applyLatticeSymmetry33(param(ph)%K,phase%get_asString('lattice')) param(ph)%K = lattice_applyLatticeSymmetry33(param(ph)%K,phase%get_asString('lattice'))
endif endif

View File

@ -947,18 +947,14 @@ subroutine crystallite_results(group,ph)
'second Piola-Kirchhoff stress','Pa') 'second Piola-Kirchhoff stress','Pa')
case('O') case('O')
select case(lattice_structure(ph)) select case(lattice_structure(ph))
case(lattice_ISO_ID)
structureLabel = 'aP'
case(lattice_FCC_ID) case(lattice_FCC_ID)
structureLabel = 'cF' structureLabel = 'cF'
case(lattice_BCC_ID) case(lattice_BCC_ID)
structureLabel = 'cI' structureLabel = 'cI'
case(lattice_BCT_ID)
structureLabel = 'tI'
case(lattice_HEX_ID) case(lattice_HEX_ID)
structureLabel = 'hP' structureLabel = 'hP'
case(lattice_ORT_ID) case(lattice_BCT_ID)
structureLabel = 'oP' structureLabel = 'tI'
end select end select
selected_rotations = select_rotations(crystallite_orientation,ph) selected_rotations = select_rotations(crystallite_orientation,ph)
call results_writeDataset(group//'/mechanical',selected_rotations,output_constituent(ph)%label(ou),& call results_writeDataset(group//'/mechanical',selected_rotations,output_constituent(ph)%label(ou),&

View File

@ -33,14 +33,15 @@ module function thermalexpansion_init(kinematics_length) result(myKinematics)
class(tNode), pointer :: & class(tNode), pointer :: &
phases, & phases, &
phase, & phase, &
mech, &
kinematics, & kinematics, &
kinematic_type kinematic_type
print'(/,a)', ' <<<+- phase:mechanical:eigen:thermalexpansion init -+>>>' print'(/,a)', ' <<<+- phase:mechanical:eigen:thermalexpansion init -+>>>'
myKinematics = kinematics_active('thermal_expansion',kinematics_length) myKinematics = kinematics_active('thermalexpansion',kinematics_length)
Ninstances = count(myKinematics) Ninstances = count(myKinematics)
print'(a,i2)', ' # instances: ',Ninstances; flush(IO_STDOUT) print'(a,i2)', ' # phases: ',Ninstances; flush(IO_STDOUT)
if(Ninstances == 0) return if(Ninstances == 0) return
phases => config_material%get('phase') phases => config_material%get('phase')
@ -51,7 +52,8 @@ module function thermalexpansion_init(kinematics_length) result(myKinematics)
if(any(myKinematics(:,p))) kinematics_thermal_expansion_instance(p) = count(myKinematics(:,1:p)) if(any(myKinematics(:,p))) kinematics_thermal_expansion_instance(p) = count(myKinematics(:,1:p))
phase => phases%get(p) phase => phases%get(p)
if(count(myKinematics(:,p)) == 0) cycle if(count(myKinematics(:,p)) == 0) cycle
kinematics => phase%get('kinematics') mech => phase%get('mechanical')
kinematics => mech%get('eigen')
do k = 1, kinematics%length do k = 1, kinematics%length
if(myKinematics(k,p)) then if(myKinematics(k,p)) then
associate(prm => param(kinematics_thermal_expansion_instance(p))) associate(prm => param(kinematics_thermal_expansion_instance(p)))
@ -62,15 +64,12 @@ module function thermalexpansion_init(kinematics_length) result(myKinematics)
! read up to three parameters (constant, linear, quadratic with T) ! read up to three parameters (constant, linear, quadratic with T)
temp = kinematic_type%get_as1dFloat('A_11') temp = kinematic_type%get_as1dFloat('A_11')
prm%A(1,1,1:size(temp)) = temp prm%A(1,1,1:size(temp)) = temp
temp = kinematic_type%get_as1dFloat('A_22',defaultVal=[(0.0_pReal, i=1,size(temp))],requiredSize=size(temp))
prm%A(2,2,1:size(temp)) = temp
temp = kinematic_type%get_as1dFloat('A_33',defaultVal=[(0.0_pReal, i=1,size(temp))],requiredSize=size(temp)) temp = kinematic_type%get_as1dFloat('A_33',defaultVal=[(0.0_pReal, i=1,size(temp))],requiredSize=size(temp))
prm%A(3,3,1:size(temp)) = temp prm%A(3,3,1:size(temp)) = temp
do i=1, size(prm%A,3) do i=1, size(prm%A,3)
prm%A(1:3,1:3,i) = lattice_applyLatticeSymmetry33(prm%A(1:3,1:3,i),& prm%A(1:3,1:3,i) = lattice_applyLatticeSymmetry33(prm%A(1:3,1:3,i),&
phase%get_asString('lattice')) phase%get_asString('lattice'))
enddo enddo
end associate end associate
endif endif
enddo enddo
@ -93,6 +92,7 @@ module subroutine thermalexpansion_LiAndItsTangent(Li, dLi_dTstar, ph,me)
real(pReal) :: T, dot_T real(pReal) :: T, dot_T
T = thermal_T(ph,me) T = thermal_T(ph,me)
dot_T = thermal_dot_T(ph,me) dot_T = thermal_dot_T(ph,me)

View File

@ -1,12 +1,11 @@
submodule(phase:mechanical) elastic submodule(phase:mechanical) elastic
enum, bind(c); enumerator :: & type :: tParameters
ELASTICITY_UNDEFINED_ID, & real(pReal), dimension(6,6) :: &
ELASTICITY_HOOKE_ID C66 !< Elastic constants in Voig notation
end enum end type tParameters
integer(kind(ELASTICITY_UNDEFINED_ID)), dimension(:), allocatable :: & type(tParameters), allocatable, dimension(:) :: param
phase_elasticity !< elasticity of each phase
contains contains
@ -22,20 +21,37 @@ module subroutine elastic_init(phases)
phase, & phase, &
mech, & mech, &
elastic elastic
character(len=:), allocatable :: struct
print'(/,a)', ' <<<+- phase:mechanical:elastic init -+>>>' print'(/,a)', ' <<<+- phase:mechanical:elastic init -+>>>'
print'(/,a)', ' <<<+- phase:mechanical:elastic:Hooke init -+>>>'
allocate(phase_elasticity(phases%length), source = ELASTICITY_undefined_ID) print'(a,i0)', ' # phases: ',phases%length; flush(IO_STDOUT)
allocate(param(phases%length))
do ph = 1, phases%length do ph = 1, phases%length
phase => phases%get(ph) phase => phases%get(ph)
mech => phase%get('mechanical') mech => phase%get('mechanical')
elastic => mech%get('elastic') elastic => mech%get('elastic')
if(IO_lc(elastic%get_asString('type')) == 'hooke') then ! accept small letter h for the moment if (elastic%get_asString('type') /= 'Hooke') call IO_error(200,ext_msg=elastic%get_asString('type'))
phase_elasticity(ph) = ELASTICITY_HOOKE_ID
else associate(prm => param(ph))
call IO_error(200,ext_msg=elastic%get_asString('type')) struct = phase%get_asString('lattice')
if (struct /= 'cI' .and. struct /= 'cF' .and. struct /= 'hP' .and. struct /= 'tI') &
call IO_error(137,ext_msg=trim(struct))
prm%C66(1,1) = elastic%get_asFloat('C_11')
prm%C66(1,2) = elastic%get_asFloat('C_12')
prm%C66(4,4) = elastic%get_asFloat('C_44')
if (struct == 'hP' .or. struct == 'tI') then
prm%C66(1,3) = elastic%get_asFloat('C_13')
prm%C66(3,3) = elastic%get_asFloat('C_33')
endif endif
if (struct == 'tI') prm%C66(6,6) = elastic%get_asFloat('C_66')
end associate
enddo enddo
end subroutine elastic_init end subroutine elastic_init
@ -63,9 +79,9 @@ module subroutine phase_hooke_SandItsTangents(S, dS_dFe, dS_dFi, &
real(pReal), dimension(3,3) :: E real(pReal), dimension(3,3) :: E
real(pReal), dimension(3,3,3,3) :: C real(pReal), dimension(3,3,3,3) :: C
integer :: & integer :: &
d, & !< counter in degradation loop
i, j i, j
C = math_66toSym3333(phase_homogenizedC(ph,en)) C = math_66toSym3333(phase_homogenizedC(ph,en))
C = phase_damage_C(C,ph,en) C = phase_damage_C(C,ph,en)

View File

@ -100,11 +100,9 @@ module subroutine thermal_init(phases)
allocate(current(ph)%dot_T(Nmembers),source=0.0_pReal) allocate(current(ph)%dot_T(Nmembers),source=0.0_pReal)
phase => phases%get(ph) phase => phases%get(ph)
thermal => phase%get('thermal',defaultVal=emptyDict) thermal => phase%get('thermal',defaultVal=emptyDict)
param(ph)%C_p = thermal%get_asFloat('c_p',defaultVal=0.0_pReal) param(ph)%C_p = thermal%get_asFloat('C_p',defaultVal=0.0_pReal)
if (param(ph)%C_p <= 0) param(ph)%C_p = thermal%get_asFloat('C_p',defaultVal=0.0_pReal) param(ph)%K(1,1) = thermal%get_asFloat('K_11',defaultVal=0.0_pReal) ! ToDo: make mandatory?
param(ph)%K(1,1) = thermal%get_asFloat('K_11',defaultVal=0.0_pReal) param(ph)%K(3,3) = thermal%get_asFloat('K_33',defaultVal=0.0_pReal) ! ToDo: depends on symmtery
param(ph)%K(2,2) = thermal%get_asFloat('K_22',defaultVal=0.0_pReal)
param(ph)%K(3,3) = thermal%get_asFloat('K_33',defaultVal=0.0_pReal)
param(ph)%K = lattice_applyLatticeSymmetry33(param(ph)%K,phase%get_asString('lattice')) param(ph)%K = lattice_applyLatticeSymmetry33(param(ph)%K,phase%get_asString('lattice'))
sources => thermal%get('source',defaultVal=emptyList) sources => thermal%get('source',defaultVal=emptyList)