change latticeName to latticeID

This commit is contained in:
Martin Diehl 2013-11-27 16:20:27 +00:00
parent 6c2ab1f1f8
commit 0bc99a9622
8 changed files with 215 additions and 115 deletions

View File

@ -28,6 +28,8 @@ module constitutive_dislotwin
use prec, only: & use prec, only: &
pReal, & pReal, &
pInt pInt
use lattice, only: &
LATTICE_iso_ID
implicit none implicit none
private private
@ -36,8 +38,8 @@ module constitutive_dislotwin
constitutive_dislotwin_sizeState, & !< total number of microstructural state variables constitutive_dislotwin_sizeState, & !< total number of microstructural state variables
constitutive_dislotwin_sizePostResults !< cumulative size of post results constitutive_dislotwin_sizePostResults !< cumulative size of post results
character(len=32), dimension(:), allocatable, public, protected :: & integer(kind(LATTICE_iso_ID)), dimension(:), allocatable, public :: &
constitutive_dislotwin_structureName !< name of the lattice structure constitutive_dislotwin_structureID !< ID of the lattice structure !< name of the lattice structure
integer(pInt), dimension(:,:), allocatable, target, public :: & integer(pInt), dimension(:,:), allocatable, target, public :: &
constitutive_dislotwin_sizePostResult !< size of each post result output constitutive_dislotwin_sizePostResult !< size of each post result output
@ -227,8 +229,8 @@ subroutine constitutive_dislotwin_init(file)
allocate(constitutive_dislotwin_Noutput(maxNinstance)) allocate(constitutive_dislotwin_Noutput(maxNinstance))
constitutive_dislotwin_Noutput = 0_pInt constitutive_dislotwin_Noutput = 0_pInt
allocate(constitutive_dislotwin_structureName(maxNinstance)) allocate(constitutive_dislotwin_structureID(maxNinstance))
constitutive_dislotwin_structureName = '' constitutive_dislotwin_structureID = -1
allocate(constitutive_dislotwin_structure(maxNinstance)) allocate(constitutive_dislotwin_structure(maxNinstance))
constitutive_dislotwin_structure = 0_pInt constitutive_dislotwin_structure = 0_pInt
allocate(constitutive_dislotwin_Nslip(lattice_maxNslipFamily,maxNinstance)) allocate(constitutive_dislotwin_Nslip(lattice_maxNslipFamily,maxNinstance))
@ -348,8 +350,19 @@ subroutine constitutive_dislotwin_init(file)
constitutive_dislotwin_Noutput(i) = constitutive_dislotwin_Noutput(i) + 1_pInt constitutive_dislotwin_Noutput(i) = constitutive_dislotwin_Noutput(i) + 1_pInt
constitutive_dislotwin_output(constitutive_dislotwin_Noutput(i),i) = IO_lc(IO_stringValue(line,positions,2_pInt)) constitutive_dislotwin_output(constitutive_dislotwin_Noutput(i),i) = IO_lc(IO_stringValue(line,positions,2_pInt))
case ('lattice_structure') case ('lattice_structure')
constitutive_dislotwin_structureName(i) = IO_lc(IO_stringValue(line,positions,2_pInt)) select case(IO_lc(IO_stringValue(line,positions,2_pInt)))
configNchunks = lattice_configNchunks(constitutive_dislotwin_structureName(i)) case(LATTICE_iso_label)
constitutive_dislotwin_structureID(i) = LATTICE_iso_ID
case(LATTICE_fcc_label)
constitutive_dislotwin_structureID(i) = LATTICE_fcc_ID
case(LATTICE_bcc_label)
constitutive_dislotwin_structureID(i) = LATTICE_bcc_ID
case(LATTICE_hex_label)
constitutive_dislotwin_structureID(i) = LATTICE_hex_ID
case(LATTICE_ort_label)
constitutive_dislotwin_structureID(i) = LATTICE_ort_ID
end select
configNchunks = lattice_configNchunks(constitutive_dislotwin_structureID(i))
Nchunks_SlipFamilies = configNchunks(1) Nchunks_SlipFamilies = configNchunks(1)
Nchunks_TwinFamilies = configNchunks(2) Nchunks_TwinFamilies = configNchunks(2)
Nchunks_SlipSlip = configNchunks(3) Nchunks_SlipSlip = configNchunks(3)
@ -503,7 +516,7 @@ subroutine constitutive_dislotwin_init(file)
sanityChecks: do i = 1_pInt,maxNinstance sanityChecks: do i = 1_pInt,maxNinstance
constitutive_dislotwin_structure(i) = & constitutive_dislotwin_structure(i) = &
lattice_initializeStructure(constitutive_dislotwin_structureName(i),constitutive_dislotwin_CoverA(i)) lattice_initializeStructure(constitutive_dislotwin_structureID(i),constitutive_dislotwin_CoverA(i))
structID = constitutive_dislotwin_structure(i) structID = constitutive_dislotwin_structure(i)
if (structID < 1_pInt) call IO_error(205_pInt,el=i) if (structID < 1_pInt) call IO_error(205_pInt,el=i)
@ -652,7 +665,7 @@ subroutine constitutive_dislotwin_init(file)
!* Elasticity matrix and shear modulus according to material.config !* Elasticity matrix and shear modulus according to material.config
constitutive_dislotwin_Cslip_66(1:6,1:6,i) = lattice_symmetrizeC66(constitutive_dislotwin_structureName(i),& constitutive_dislotwin_Cslip_66(1:6,1:6,i) = lattice_symmetrizeC66(constitutive_dislotwin_structureID(i),&
constitutive_dislotwin_Cslip_66(:,:,i)) constitutive_dislotwin_Cslip_66(:,:,i))
constitutive_dislotwin_Gmod(i) = & constitutive_dislotwin_Gmod(i) = &
0.2_pReal*(constitutive_dislotwin_Cslip_66(1,1,i)-constitutive_dislotwin_Cslip_66(1,2,i)) & 0.2_pReal*(constitutive_dislotwin_Cslip_66(1,1,i)-constitutive_dislotwin_Cslip_66(1,2,i)) &
@ -1097,7 +1110,8 @@ subroutine constitutive_dislotwin_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v,Temperat
lattice_NslipSystem, & lattice_NslipSystem, &
lattice_NtwinSystem, & lattice_NtwinSystem, &
lattice_shearTwin, & lattice_shearTwin, &
lattice_fcc_corellationTwinSlip lattice_fcc_corellationTwinSlip, &
LATTICE_fcc_ID
implicit none implicit none
integer(pInt), intent(in) :: ipc,ip,el integer(pInt), intent(in) :: ipc,ip,el
@ -1261,8 +1275,8 @@ subroutine constitutive_dislotwin_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v,Temperat
!* Shear rates and their derivatives due to twin !* Shear rates and their derivatives due to twin
if ( tau_twin(j) > 0.0_pReal ) then if ( tau_twin(j) > 0.0_pReal ) then
select case(constitutive_dislotwin_structureName(matID)) select case(constitutive_dislotwin_structureID(matID))
case ('fcc') case (LATTICE_fcc_ID)
s1=lattice_fcc_corellationTwinSlip(1,index_myFamily+i) s1=lattice_fcc_corellationTwinSlip(1,index_myFamily+i)
s2=lattice_fcc_corellationTwinSlip(2,index_myFamily+i) s2=lattice_fcc_corellationTwinSlip(2,index_myFamily+i)
if (tau_twin(j) < constitutive_dislotwin_tau_r(j,matID)) then if (tau_twin(j) < constitutive_dislotwin_tau_r(j,matID)) then
@ -1304,14 +1318,27 @@ end subroutine constitutive_dislotwin_LpAndItsTangent
!> @brief calculates the rate of change of microstructure !> @brief calculates the rate of change of microstructure
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
pure function constitutive_dislotwin_dotState(Tstar_v,Temperature,state,ipc,ip,el) pure function constitutive_dislotwin_dotState(Tstar_v,Temperature,state,ipc,ip,el)
use prec, only: p_vec use prec, only: &
p_vec
use math, only: pi use math, only: &
use mesh, only: mesh_NcpElems, mesh_maxNips pi
use material, only: homogenization_maxNgrains, material_phase, phase_plasticityInstance use mesh, only: &
use lattice, only: lattice_Sslip_v, lattice_Stwin_v, & mesh_NcpElems, &
lattice_maxNslipFamily,lattice_maxNtwinFamily, & mesh_maxNips
lattice_NslipSystem, lattice_NtwinSystem, lattice_sheartwin, lattice_fcc_corellationTwinSlip use material, only: &
homogenization_maxNgrains, &
material_phase, &
phase_plasticityInstance
use lattice, only: &
lattice_Sslip_v, &
lattice_Stwin_v, &
lattice_maxNslipFamily, &
lattice_maxNtwinFamily, &
lattice_NslipSystem, &
lattice_NtwinSystem, &
lattice_sheartwin, &
lattice_fcc_corellationTwinSlip, &
LATTICE_fcc_ID
implicit none implicit none
real(pReal), dimension(6), intent(in):: & real(pReal), dimension(6), intent(in):: &
@ -1447,8 +1474,8 @@ pure function constitutive_dislotwin_dotState(Tstar_v,Temperature,state,ipc,ip,e
!* Shear rates and their derivatives due to twin !* Shear rates and their derivatives due to twin
if ( tau_twin(j) > 0.0_pReal ) then if ( tau_twin(j) > 0.0_pReal ) then
select case(constitutive_dislotwin_structureName(matID)) select case(constitutive_dislotwin_structureID(matID))
case ('fcc') case (LATTICE_fcc_ID)
s1=lattice_fcc_corellationTwinSlip(1,index_myFamily+i) s1=lattice_fcc_corellationTwinSlip(1,index_myFamily+i)
s2=lattice_fcc_corellationTwinSlip(2,index_myFamily+i) s2=lattice_fcc_corellationTwinSlip(2,index_myFamily+i)
if (tau_twin(j) < constitutive_dislotwin_tau_r(j,matID)) then if (tau_twin(j) < constitutive_dislotwin_tau_r(j,matID)) then
@ -1505,7 +1532,8 @@ function constitutive_dislotwin_postResults(Tstar_v,Temperature,state,ipc,ip,el)
lattice_NslipSystem, & lattice_NslipSystem, &
lattice_NtwinSystem, & lattice_NtwinSystem, &
lattice_shearTwin, & lattice_shearTwin, &
lattice_fcc_corellationTwinSlip lattice_fcc_corellationTwinSlip, &
LATTICE_fcc_ID
implicit none implicit none
real(pReal), dimension(6), intent(in) :: & real(pReal), dimension(6), intent(in) :: &
@ -1688,8 +1716,8 @@ function constitutive_dislotwin_postResults(Tstar_v,Temperature,state,ipc,ip,el)
!* Shear rates due to twin !* Shear rates due to twin
if ( tau > 0.0_pReal ) then if ( tau > 0.0_pReal ) then
select case(constitutive_dislotwin_structureName(matID)) select case(constitutive_dislotwin_structureID(matID))
case ('fcc') case (LATTICE_fcc_ID)
s1=lattice_fcc_corellationTwinSlip(1,index_myFamily+i) s1=lattice_fcc_corellationTwinSlip(1,index_myFamily+i)
s2=lattice_fcc_corellationTwinSlip(2,index_myFamily+i) s2=lattice_fcc_corellationTwinSlip(2,index_myFamily+i)
if (tau < constitutive_dislotwin_tau_r(j,matID)) then if (tau < constitutive_dislotwin_tau_r(j,matID)) then

View File

@ -30,6 +30,8 @@ module constitutive_j2
use prec, only: & use prec, only: &
pReal,& pReal,&
pInt pInt
use lattice, only: &
LATTICE_iso_ID
implicit none implicit none
private private
@ -44,9 +46,9 @@ module constitutive_j2
character(len=64), dimension(:,:), allocatable, target, public :: & character(len=64), dimension(:,:), allocatable, target, public :: &
constitutive_j2_output !< name of each post result output constitutive_j2_output !< name of each post result output
character(len=32), dimension(:), allocatable, private :: & integer(kind(LATTICE_iso_ID)), dimension(:), allocatable, public :: &
constitutive_j2_structureName !< name of the lattice structure constitutive_j2_structureID !< ID of the lattice structure
integer(pInt), dimension(:), allocatable, private :: & integer(pInt), dimension(:), allocatable, private :: &
constitutive_j2_Noutput !< number of outputs per instance constitutive_j2_Noutput !< number of outputs per instance
@ -108,8 +110,7 @@ subroutine constitutive_j2_init(myFile)
debug_level, & debug_level, &
debug_constitutive, & debug_constitutive, &
debug_levelBasic debug_levelBasic
use lattice, only: & use lattice
lattice_symmetrizeC66
implicit none implicit none
integer(pInt), intent(in) :: myFile integer(pInt), intent(in) :: myFile
@ -145,8 +146,8 @@ subroutine constitutive_j2_init(myFile)
constitutive_j2_output = '' constitutive_j2_output = ''
allocate(constitutive_j2_Noutput(maxNinstance)) allocate(constitutive_j2_Noutput(maxNinstance))
constitutive_j2_Noutput = 0_pInt constitutive_j2_Noutput = 0_pInt
allocate(constitutive_j2_structureName(maxNinstance)) allocate(constitutive_j2_structureID(maxNinstance))
constitutive_j2_structureName = '' constitutive_j2_structureID = -1
allocate(constitutive_j2_Cslip_66(6,6,maxNinstance)) allocate(constitutive_j2_Cslip_66(6,6,maxNinstance))
constitutive_j2_Cslip_66 = 0.0_pReal constitutive_j2_Cslip_66 = 0.0_pReal
allocate(constitutive_j2_fTaylor(maxNinstance)) allocate(constitutive_j2_fTaylor(maxNinstance))
@ -202,7 +203,18 @@ subroutine constitutive_j2_init(myFile)
constitutive_j2_output(constitutive_j2_Noutput(i),i) = & constitutive_j2_output(constitutive_j2_Noutput(i),i) = &
IO_lc(IO_stringValue(line,positions,2_pInt)) IO_lc(IO_stringValue(line,positions,2_pInt))
case ('lattice_structure') case ('lattice_structure')
constitutive_j2_structureName(i) = IO_lc(IO_stringValue(line,positions,2_pInt)) select case(IO_lc(IO_stringValue(line,positions,2_pInt)))
case(LATTICE_iso_label)
constitutive_j2_structureID(i) = LATTICE_iso_ID
case(LATTICE_fcc_label)
constitutive_j2_structureID(i) = LATTICE_fcc_ID
case(LATTICE_bcc_label)
constitutive_j2_structureID(i) = LATTICE_bcc_ID
case(LATTICE_hex_label)
constitutive_j2_structureID(i) = LATTICE_hex_ID
case(LATTICE_ort_label)
constitutive_j2_structureID(i) = LATTICE_ort_ID
end select
case ('c11') case ('c11')
constitutive_j2_Cslip_66(1,1,i) = IO_floatValue(line,positions,2_pInt) constitutive_j2_Cslip_66(1,1,i) = IO_floatValue(line,positions,2_pInt)
case ('c12') case ('c12')
@ -255,7 +267,6 @@ subroutine constitutive_j2_init(myFile)
enddo enddo
sanityChecks: do i = 1_pInt,maxNinstance sanityChecks: do i = 1_pInt,maxNinstance
if (constitutive_j2_structureName(i) == '') call IO_error(205_pInt,el=i)
if (constitutive_j2_tau0(i) < 0.0_pReal) call IO_error(211_pInt,ext_msg='tau0 (' & if (constitutive_j2_tau0(i) < 0.0_pReal) call IO_error(211_pInt,ext_msg='tau0 (' &
//PLASTICITY_J2_label//')') //PLASTICITY_J2_label//')')
if (constitutive_j2_gdot0(i) <= 0.0_pReal) call IO_error(211_pInt,ext_msg='gdot0 (' & if (constitutive_j2_gdot0(i) <= 0.0_pReal) call IO_error(211_pInt,ext_msg='gdot0 (' &
@ -293,7 +304,7 @@ subroutine constitutive_j2_init(myFile)
constitutive_j2_sizeDotState(i) = 1_pInt constitutive_j2_sizeDotState(i) = 1_pInt
constitutive_j2_sizeState(i) = 1_pInt constitutive_j2_sizeState(i) = 1_pInt
constitutive_j2_Cslip_66(1:6,1:6,i) = lattice_symmetrizeC66(constitutive_j2_structureName(i),& constitutive_j2_Cslip_66(1:6,1:6,i) = lattice_symmetrizeC66(constitutive_j2_structureID(i),&
constitutive_j2_Cslip_66(1:6,1:6,i)) constitutive_j2_Cslip_66(1:6,1:6,i))
constitutive_j2_Cslip_66(1:6,1:6,i) = & constitutive_j2_Cslip_66(1:6,1:6,i) = &
math_Mandel3333to66(math_Voigt66to3333(constitutive_j2_Cslip_66(1:6,1:6,i))) ! Literature data is Voigt, DAMASK uses Mandel math_Mandel3333to66(math_Voigt66to3333(constitutive_j2_Cslip_66(1:6,1:6,i))) ! Literature data is Voigt, DAMASK uses Mandel

View File

@ -27,6 +27,8 @@ module constitutive_none
use prec, only: & use prec, only: &
pReal, & pReal, &
pInt pInt
use lattice, only: &
LATTICE_iso_ID
implicit none implicit none
private private
@ -38,8 +40,8 @@ module constitutive_none
integer(pInt), dimension(:,:), allocatable, target, public :: & integer(pInt), dimension(:,:), allocatable, target, public :: &
constitutive_none_sizePostResult !< size of each post result output constitutive_none_sizePostResult !< size of each post result output
character(len=32), dimension(:), allocatable, private :: & integer(kind(LATTICE_iso_ID)), dimension(:), allocatable, public :: &
constitutive_none_structureName constitutive_none_structureID !< ID of the lattice structure
real(pReal), dimension(:,:,:), allocatable, private :: & real(pReal), dimension(:,:,:), allocatable, private :: &
constitutive_none_Cslip_66 constitutive_none_Cslip_66
@ -75,8 +77,7 @@ subroutine constitutive_none_init(myFile)
debug_level, & debug_level, &
debug_constitutive, & debug_constitutive, &
debug_levelBasic debug_levelBasic
use lattice, only: & use lattice
lattice_symmetrizeC66
implicit none implicit none
integer(pInt), intent(in) :: myFile integer(pInt), intent(in) :: myFile
@ -106,8 +107,8 @@ subroutine constitutive_none_init(myFile)
constitutive_none_sizeState = 0_pInt constitutive_none_sizeState = 0_pInt
allocate(constitutive_none_sizePostResults(maxNinstance)) allocate(constitutive_none_sizePostResults(maxNinstance))
constitutive_none_sizePostResults = 0_pInt constitutive_none_sizePostResults = 0_pInt
allocate(constitutive_none_structureName(maxNinstance)) allocate(constitutive_none_structureID(maxNinstance))
constitutive_none_structureName = '' constitutive_none_structureID = -1
allocate(constitutive_none_Cslip_66(6,6,maxNinstance)) allocate(constitutive_none_Cslip_66(6,6,maxNinstance))
constitutive_none_Cslip_66 = 0.0_pReal constitutive_none_Cslip_66 = 0.0_pReal
@ -134,7 +135,18 @@ subroutine constitutive_none_init(myFile)
case ('plasticity','elasticity') case ('plasticity','elasticity')
cycle cycle
case ('lattice_structure') case ('lattice_structure')
constitutive_none_structureName(i) = IO_lc(IO_stringValue(line,positions,2_pInt)) select case(IO_lc(IO_stringValue(line,positions,2_pInt)))
case(LATTICE_iso_label)
constitutive_none_structureID(i) = LATTICE_iso_ID
case(LATTICE_fcc_label)
constitutive_none_structureID(i) = LATTICE_fcc_ID
case(LATTICE_bcc_label)
constitutive_none_structureID(i) = LATTICE_bcc_ID
case(LATTICE_hex_label)
constitutive_none_structureID(i) = LATTICE_hex_ID
case(LATTICE_ort_label)
constitutive_none_structureID(i) = LATTICE_ort_ID
end select
case ('c11') case ('c11')
constitutive_none_Cslip_66(1,1,i) = IO_floatValue(line,positions,2_pInt) constitutive_none_Cslip_66(1,1,i) = IO_floatValue(line,positions,2_pInt)
case ('c12') case ('c12')
@ -160,18 +172,14 @@ subroutine constitutive_none_init(myFile)
endif endif
enddo enddo
do i = 1_pInt,maxNinstance
if (constitutive_none_structureName(i) == '') call IO_error(205_pInt,el=i)
enddo
instancesLoop: do i = 1_pInt,maxNinstance instancesLoop: do i = 1_pInt,maxNinstance
constitutive_none_sizeDotState(i) = 1_pInt constitutive_none_sizeDotState(i) = 1_pInt
constitutive_none_sizeState(i) = 1_pInt constitutive_none_sizeState(i) = 1_pInt
constitutive_none_Cslip_66(:,:,i) = lattice_symmetrizeC66(constitutive_none_structureName(i),& constitutive_none_Cslip_66(1:6,1:6,i) = lattice_symmetrizeC66(constitutive_none_structureID(i),&
constitutive_none_Cslip_66(:,:,i)) constitutive_none_Cslip_66(1:6,1:6,i))
constitutive_none_Cslip_66(:,:,i) = & constitutive_none_Cslip_66(1:6,1:6,i) = &
math_Mandel3333to66(math_Voigt66to3333(constitutive_none_Cslip_66(:,:,i))) math_Mandel3333to66(math_Voigt66to3333(constitutive_none_Cslip_66(1:6,1:6,i)))
enddo instancesLoop enddo instancesLoop

View File

@ -29,6 +29,8 @@ use prec, only: &
pReal, & pReal, &
pInt, & pInt, &
p_vec p_vec
use lattice, only: &
LATTICE_iso_ID
implicit none implicit none
private private
@ -92,8 +94,8 @@ iV, & !< state in
iD !< state indices for stable dipole height iD !< state indices for stable dipole height
character(len=32), dimension(:), allocatable, public :: & integer(kind(LATTICE_iso_ID)), dimension(:), allocatable, public :: &
constitutive_nonlocal_structureName !< name of the lattice structure constitutive_nonlocal_structureID !< ID of the lattice structure
integer(pInt), dimension(:), allocatable, public :: & integer(pInt), dimension(:), allocatable, public :: &
constitutive_nonlocal_structure !< number representing the kind of lattice structure constitutive_nonlocal_structure !< number representing the kind of lattice structure
@ -238,7 +240,6 @@ use material, only: homogenization_maxNgrains, &
PLASTICITY_NONLOCAL_ID PLASTICITY_NONLOCAL_ID
use lattice use lattice
!*** input variables
integer(pInt), intent(in) :: myFile integer(pInt), intent(in) :: myFile
!*** local variables !*** local variables
@ -296,13 +297,13 @@ constitutive_nonlocal_sizePostResult = 0_pInt
constitutive_nonlocal_output = '' constitutive_nonlocal_output = ''
Noutput = 0_pInt Noutput = 0_pInt
allocate(constitutive_nonlocal_structureName(maxNmatIDs)) allocate(constitutive_nonlocal_structureID(maxNmatIDs))
allocate(constitutive_nonlocal_structure(maxNmatIDs)) allocate(constitutive_nonlocal_structure(maxNmatIDs))
allocate(Nslip(lattice_maxNslipFamily, maxNmatIDs)) allocate(Nslip(lattice_maxNslipFamily, maxNmatIDs))
allocate(slipFamily(lattice_maxNslip, maxNmatIDs)) allocate(slipFamily(lattice_maxNslip, maxNmatIDs))
allocate(slipSystemLattice(lattice_maxNslip, maxNmatIDs)) allocate(slipSystemLattice(lattice_maxNslip, maxNmatIDs))
allocate(totalNslip(maxNmatIDs)) allocate(totalNslip(maxNmatIDs))
constitutive_nonlocal_structureName = '' constitutive_nonlocal_structureID = -1
constitutive_nonlocal_structure = 0_pInt constitutive_nonlocal_structure = 0_pInt
Nslip = 0_pInt Nslip = 0_pInt
slipFamily = 0_pInt slipFamily = 0_pInt
@ -428,8 +429,19 @@ do while (trim(line) /= '#EOF#')
Noutput(i) = Noutput(i) + 1_pInt Noutput(i) = Noutput(i) + 1_pInt
constitutive_nonlocal_output(Noutput(i),i) = IO_lc(IO_stringValue(line,positions,2_pInt)) constitutive_nonlocal_output(Noutput(i),i) = IO_lc(IO_stringValue(line,positions,2_pInt))
case ('lattice_structure') case ('lattice_structure')
constitutive_nonlocal_structureName(i) = IO_lc(IO_stringValue(line,positions,2_pInt)) select case(IO_lc(IO_stringValue(line,positions,2_pInt)))
configNchunks = lattice_configNchunks(constitutive_nonlocal_structureName(i)) case(LATTICE_iso_label)
constitutive_nonlocal_structureID(i) = LATTICE_iso_ID
case(LATTICE_fcc_label)
constitutive_nonlocal_structureID(i) = LATTICE_fcc_ID
case(LATTICE_bcc_label)
constitutive_nonlocal_structureID(i) = LATTICE_bcc_ID
case(LATTICE_hex_label)
constitutive_nonlocal_structureID(i) = LATTICE_hex_ID
case(LATTICE_ort_label)
constitutive_nonlocal_structureID(i) = LATTICE_ort_ID
end select
configNchunks = lattice_configNchunks(constitutive_nonlocal_structureID(i))
Nchunks_SlipFamilies = configNchunks(1) Nchunks_SlipFamilies = configNchunks(1)
Nchunks_SlipSlip = configNchunks(3) Nchunks_SlipSlip = configNchunks(3)
Nchunks_nonSchmid = configNchunks(7) Nchunks_nonSchmid = configNchunks(7)
@ -585,7 +597,7 @@ enddo
do i = 1_pInt,maxNmatIDs do i = 1_pInt,maxNmatIDs
constitutive_nonlocal_structure(i) = & constitutive_nonlocal_structure(i) = &
lattice_initializeStructure(constitutive_nonlocal_structureName(i), CoverA(i)) ! our lattice structure is defined in the material.config file by the structureName (and the c/a ratio) lattice_initializeStructure(constitutive_nonlocal_structureID(i), CoverA(i)) ! our lattice structure is defined in the material.config file by the structureName (and the c/a ratio)
structID = constitutive_nonlocal_structure(i) structID = constitutive_nonlocal_structure(i)
@ -944,7 +956,7 @@ do i = 1,maxNmatIDs
!*** elasticity matrix and shear modulus according to material.config !*** elasticity matrix and shear modulus according to material.config
Cslip66(:,:,i) = lattice_symmetrizeC66(constitutive_nonlocal_structureName(i), Cslip66(:,:,i)) Cslip66(:,:,i) = lattice_symmetrizeC66(constitutive_nonlocal_structureID(i), Cslip66(:,:,i))
mu(i) = 0.2_pReal * ( Cslip66(1,1,i) - Cslip66(1,2,i) + 3.0_pReal*Cslip66(4,4,i)) ! (C11iso-C12iso)/2 with C11iso=(3*C11+2*C12+4*C44)/5 and C12iso=(C11+4*C12-2*C44)/5 mu(i) = 0.2_pReal * ( Cslip66(1,1,i) - Cslip66(1,2,i) + 3.0_pReal*Cslip66(4,4,i)) ! (C11iso-C12iso)/2 with C11iso=(3*C11+2*C12+4*C44)/5 and C12iso=(C11+4*C12-2*C44)/5
nu(i) = (Cslip66(1,1,i) + 4.0_pReal*Cslip66(1,2,i) - 2.0_pReal*Cslip66(4,4,i)) & nu(i) = (Cslip66(1,1,i) + 4.0_pReal*Cslip66(1,2,i) - 2.0_pReal*Cslip66(4,4,i)) &
/ (4.0_pReal*Cslip66(1,1,i) + 6.0_pReal*Cslip66(1,2,i) + 2.0_pReal*Cslip66(4,4,i)) ! C12iso/(C11iso+C12iso) with C11iso=(3*C11+2*C12+4*C44)/5 and C12iso=(C11+4*C12-2*C44)/5 / (4.0_pReal*Cslip66(1,1,i) + 6.0_pReal*Cslip66(1,2,i) + 2.0_pReal*Cslip66(4,4,i)) ! C12iso/(C11iso+C12iso) with C11iso=(3*C11+2*C12+4*C44)/5 and C12iso=(C11+4*C12-2*C44)/5

View File

@ -28,6 +28,8 @@ module constitutive_phenopowerlaw
use prec, only: & use prec, only: &
pReal,& pReal,&
pInt pInt
use lattice, only: &
LATTICE_iso_ID
implicit none implicit none
private private
@ -43,8 +45,8 @@ module constitutive_phenopowerlaw
character(len=64), dimension(:,:), allocatable, target, public :: & character(len=64), dimension(:,:), allocatable, target, public :: &
constitutive_phenopowerlaw_output !< name of each post result output constitutive_phenopowerlaw_output !< name of each post result output
character(len=32), dimension(:), allocatable, public :: & integer(kind(LATTICE_iso_ID)), dimension(:), allocatable, public :: &
constitutive_phenopowerlaw_structureName constitutive_phenopowerlaw_structureID !< ID of the lattice structure
integer(pInt), dimension(:), allocatable, private :: & integer(pInt), dimension(:), allocatable, private :: &
constitutive_phenopowerlaw_Noutput, & !< number of outputs per instance of this constitution constitutive_phenopowerlaw_Noutput, & !< number of outputs per instance of this constitution
@ -189,8 +191,8 @@ subroutine constitutive_phenopowerlaw_init(myFile)
constitutive_phenopowerlaw_outputID = -1 constitutive_phenopowerlaw_outputID = -1
allocate(constitutive_phenopowerlaw_Noutput(maxNinstance)) allocate(constitutive_phenopowerlaw_Noutput(maxNinstance))
constitutive_phenopowerlaw_Noutput = 0_pInt constitutive_phenopowerlaw_Noutput = 0_pInt
allocate(constitutive_phenopowerlaw_structureName(maxNinstance)) allocate(constitutive_phenopowerlaw_structureID(maxNinstance))
constitutive_phenopowerlaw_structureName = '' constitutive_phenopowerlaw_structureID = -1
allocate(constitutive_phenopowerlaw_structure(maxNinstance)) allocate(constitutive_phenopowerlaw_structure(maxNinstance))
constitutive_phenopowerlaw_structure = 0_pInt constitutive_phenopowerlaw_structure = 0_pInt
allocate(constitutive_phenopowerlaw_Nslip(lattice_maxNslipFamily,maxNinstance)) allocate(constitutive_phenopowerlaw_Nslip(lattice_maxNslipFamily,maxNinstance))
@ -303,8 +305,19 @@ subroutine constitutive_phenopowerlaw_init(myFile)
constitutive_phenopowerlaw_outputID(constitutive_phenopowerlaw_Noutput(i),i) = totalvolfrac_ID constitutive_phenopowerlaw_outputID(constitutive_phenopowerlaw_Noutput(i),i) = totalvolfrac_ID
end select end select
case ('lattice_structure') case ('lattice_structure')
constitutive_phenopowerlaw_structureName(i) = IO_lc(IO_stringValue(line,positions,2_pInt)) select case(IO_lc(IO_stringValue(line,positions,2_pInt)))
configNchunks = lattice_configNchunks(constitutive_phenopowerlaw_structureName(i)) case(LATTICE_iso_label)
constitutive_phenopowerlaw_structureID(i) = LATTICE_iso_ID
case(LATTICE_fcc_label)
constitutive_phenopowerlaw_structureID(i) = LATTICE_fcc_ID
case(LATTICE_bcc_label)
constitutive_phenopowerlaw_structureID(i) = LATTICE_bcc_ID
case(LATTICE_hex_label)
constitutive_phenopowerlaw_structureID(i) = LATTICE_hex_ID
case(LATTICE_ort_label)
constitutive_phenopowerlaw_structureID(i) = LATTICE_ort_ID
end select
configNchunks = lattice_configNchunks(constitutive_phenopowerlaw_structureID(i))
Nchunks_SlipFamilies = configNchunks(1) Nchunks_SlipFamilies = configNchunks(1)
Nchunks_TwinFamilies = configNchunks(2) Nchunks_TwinFamilies = configNchunks(2)
Nchunks_SlipSlip = configNchunks(3) Nchunks_SlipSlip = configNchunks(3)
@ -450,7 +463,7 @@ subroutine constitutive_phenopowerlaw_init(myFile)
sanityChecks: do i = 1_pInt,maxNinstance sanityChecks: do i = 1_pInt,maxNinstance
constitutive_phenopowerlaw_structure(i) = & constitutive_phenopowerlaw_structure(i) = &
lattice_initializeStructure(constitutive_phenopowerlaw_structureName(i), constitutive_phenopowerlaw_CoverA(i)) ! get structure lattice_initializeStructure(constitutive_phenopowerlaw_structureID(i), constitutive_phenopowerlaw_CoverA(i)) ! get structure
constitutive_phenopowerlaw_Nslip(1:lattice_maxNslipFamily,i) = & constitutive_phenopowerlaw_Nslip(1:lattice_maxNslipFamily,i) = &
min(lattice_NslipSystem(1:lattice_maxNslipFamily,constitutive_phenopowerlaw_structure(i)),& ! limit active slip systems per family to min of available and requested min(lattice_NslipSystem(1:lattice_maxNslipFamily,constitutive_phenopowerlaw_structure(i)),& ! limit active slip systems per family to min of available and requested
@ -550,11 +563,11 @@ subroutine constitutive_phenopowerlaw_init(myFile)
structID = constitutive_phenopowerlaw_structure(i) structID = constitutive_phenopowerlaw_structure(i)
constitutive_phenopowerlaw_Cslip_66(:,:,i) = & constitutive_phenopowerlaw_Cslip_66(1:6,1:6,i) = &
lattice_symmetrizeC66(constitutive_phenopowerlaw_structureName(i),& lattice_symmetrizeC66(constitutive_phenopowerlaw_structureID(i),&
constitutive_phenopowerlaw_Cslip_66(:,:,i)) ! assign elasticity tensor constitutive_phenopowerlaw_Cslip_66(:,:,i)) ! assign elasticity tensor
constitutive_phenopowerlaw_Cslip_66(:,:,i) = & constitutive_phenopowerlaw_Cslip_66(1:6,1:6,i) = &
math_Mandel3333to66(math_Voigt66to3333(constitutive_phenopowerlaw_Cslip_66(:,:,i))) math_Mandel3333to66(math_Voigt66to3333(constitutive_phenopowerlaw_Cslip_66(:,:,i)))
do f = 1_pInt,lattice_maxNslipFamily ! >>> interaction slip -- X do f = 1_pInt,lattice_maxNslipFamily ! >>> interaction slip -- X

View File

@ -28,6 +28,8 @@ module constitutive_titanmod
use prec, only: & use prec, only: &
pReal, & pReal, &
pInt pInt
use lattice, only: &
LATTICE_iso_ID
implicit none implicit none
private private
@ -65,8 +67,8 @@ module constitutive_titanmod
integer(pInt), dimension(:), allocatable, private :: & integer(pInt), dimension(:), allocatable, private :: &
constitutive_titanmod_Noutput !< number of outputs per instance of this plasticity constitutive_titanmod_Noutput !< number of outputs per instance of this plasticity
character(len=32), dimension(:), allocatable, public, protected :: & integer(kind(LATTICE_iso_ID)), dimension(:), allocatable, public :: &
constitutive_titanmod_structureName !< name of the lattice structure constitutive_titanmod_structureID !< ID of the lattice structure
integer(pInt), dimension(:), allocatable, private :: & integer(pInt), dimension(:), allocatable, private :: &
constitutive_titanmod_structure, & !< number representing the kind of lattice structure constitutive_titanmod_structure, & !< number representing the kind of lattice structure
@ -265,8 +267,8 @@ subroutine constitutive_titanmod_init(myFile)
allocate(constitutive_titanmod_Noutput(maxNinstance)) allocate(constitutive_titanmod_Noutput(maxNinstance))
constitutive_titanmod_Noutput = 0_pInt constitutive_titanmod_Noutput = 0_pInt
allocate(constitutive_titanmod_structureName(maxNinstance)) allocate(constitutive_titanmod_structureID(maxNinstance))
constitutive_titanmod_structureName = '' constitutive_titanmod_structureID= -1
allocate(constitutive_titanmod_structure(maxNinstance)) allocate(constitutive_titanmod_structure(maxNinstance))
constitutive_titanmod_structure = 0_pInt constitutive_titanmod_structure = 0_pInt
allocate(constitutive_titanmod_Nslip(lattice_maxNslipFamily,maxNinstance)) allocate(constitutive_titanmod_Nslip(lattice_maxNslipFamily,maxNinstance))
@ -413,8 +415,19 @@ subroutine constitutive_titanmod_init(myFile)
constitutive_titanmod_Noutput(i) = constitutive_titanmod_Noutput(i) + 1_pInt constitutive_titanmod_Noutput(i) = constitutive_titanmod_Noutput(i) + 1_pInt
constitutive_titanmod_output(constitutive_titanmod_Noutput(i),i) = IO_lc(IO_stringValue(line,positions,2_pInt)) constitutive_titanmod_output(constitutive_titanmod_Noutput(i),i) = IO_lc(IO_stringValue(line,positions,2_pInt))
case ('lattice_structure') case ('lattice_structure')
constitutive_titanmod_structureName(i) = IO_lc(IO_stringValue(line,positions,2_pInt)) select case(IO_lc(IO_stringValue(line,positions,2_pInt)))
configNchunks = lattice_configNchunks(constitutive_titanmod_structureName(i)) case(LATTICE_iso_label)
constitutive_titanmod_structureID(i) = LATTICE_iso_ID
case(LATTICE_fcc_label)
constitutive_titanmod_structureID(i) = LATTICE_fcc_ID
case(LATTICE_bcc_label)
constitutive_titanmod_structureID(i) = LATTICE_bcc_ID
case(LATTICE_hex_label)
constitutive_titanmod_structureID(i) = LATTICE_hex_ID
case(LATTICE_ort_label)
constitutive_titanmod_structureID(i) = LATTICE_ort_ID
end select
configNchunks = lattice_configNchunks(constitutive_titanmod_structureID(i))
Nchunks_SlipFamilies = configNchunks(1) Nchunks_SlipFamilies = configNchunks(1)
Nchunks_TwinFamilies = configNchunks(2) Nchunks_TwinFamilies = configNchunks(2)
Nchunks_SlipSlip = configNchunks(3) Nchunks_SlipSlip = configNchunks(3)
@ -616,7 +629,7 @@ subroutine constitutive_titanmod_init(myFile)
sanityChecks: do i = 1_pInt,maxNinstance sanityChecks: do i = 1_pInt,maxNinstance
constitutive_titanmod_structure(i) = & constitutive_titanmod_structure(i) = &
lattice_initializeStructure(constitutive_titanmod_structureName(i),constitutive_titanmod_CoverA(i)) lattice_initializeStructure(constitutive_titanmod_structureID(i),constitutive_titanmod_CoverA(i))
structID = constitutive_titanmod_structure(i) structID = constitutive_titanmod_structure(i)
if (structID < 1_pInt) call IO_error(205_pInt,el=i) if (structID < 1_pInt) call IO_error(205_pInt,el=i)
@ -838,7 +851,7 @@ subroutine constitutive_titanmod_init(myFile)
enddo outputsLoop enddo outputsLoop
constitutive_titanmod_Cslip_66(1:6,1:6,i) = & constitutive_titanmod_Cslip_66(1:6,1:6,i) = &
lattice_symmetrizeC66(constitutive_titanmod_structureName(i),& lattice_symmetrizeC66(constitutive_titanmod_structureID(i),&
constitutive_titanmod_Cslip_66(1:6,1:6,i)) ! assign elasticity tensor constitutive_titanmod_Cslip_66(1:6,1:6,i)) ! assign elasticity tensor
constitutive_titanmod_Gmod(i) = & constitutive_titanmod_Gmod(i) = &
0.2_pReal*(constitutive_titanmod_Cslip_66(1,1,i)-constitutive_titanmod_Cslip_66(1,2,i))& 0.2_pReal*(constitutive_titanmod_Cslip_66(1,1,i)-constitutive_titanmod_Cslip_66(1,2,i))&

View File

@ -165,13 +165,13 @@ subroutine crystallite_init(temperature)
use constitutive, only: & use constitutive, only: &
constitutive_microstructure constitutive_microstructure
use constitutive_phenopowerlaw, only: & use constitutive_phenopowerlaw, only: &
constitutive_phenopowerlaw_structureName constitutive_phenopowerlaw_structureID
use constitutive_dislotwin, only: & use constitutive_dislotwin, only: &
constitutive_dislotwin_structureName constitutive_dislotwin_structureID
use constitutive_titanmod, only: & use constitutive_titanmod, only: &
constitutive_titanmod_structureName constitutive_titanmod_structureID
use constitutive_nonlocal, only: & use constitutive_nonlocal, only: &
constitutive_nonlocal_structureName constitutive_nonlocal_structureID
implicit none implicit none
real(pReal), intent(in) :: temperature real(pReal), intent(in) :: temperature
@ -368,16 +368,16 @@ subroutine crystallite_init(temperature)
select case (phase_plasticity(myPhase)) select case (phase_plasticity(myPhase))
case (PLASTICITY_PHENOPOWERLAW_ID) case (PLASTICITY_PHENOPOWERLAW_ID)
crystallite_symmetryID(g,i,e) = & crystallite_symmetryID(g,i,e) = &
lattice_symmetryType(constitutive_phenopowerlaw_structureName(myMat)) lattice_symmetryType(constitutive_phenopowerlaw_structureID(myMat))
case (PLASTICITY_TITANMOD_ID) case (PLASTICITY_TITANMOD_ID)
crystallite_symmetryID(g,i,e) = & crystallite_symmetryID(g,i,e) = &
lattice_symmetryType(constitutive_titanmod_structureName(myMat)) lattice_symmetryType(constitutive_titanmod_structureID(myMat))
case (PLASTICITY_DISLOTWIN_ID) case (PLASTICITY_DISLOTWIN_ID)
crystallite_symmetryID(g,i,e) = & crystallite_symmetryID(g,i,e) = &
lattice_symmetryType(constitutive_dislotwin_structureName(myMat)) lattice_symmetryType(constitutive_dislotwin_structureID(myMat))
case (PLASTICITY_NONLOCAL_ID) case (PLASTICITY_NONLOCAL_ID)
crystallite_symmetryID(g,i,e) = & crystallite_symmetryID(g,i,e) = &
lattice_symmetryType(constitutive_nonlocal_structureName(myMat)) lattice_symmetryType(constitutive_nonlocal_structureID(myMat))
case default case default
crystallite_symmetryID(g,i,e) = 0_pInt !< @ToDo: does this happen for j2 material? crystallite_symmetryID(g,i,e) = 0_pInt !< @ToDo: does this happen for j2 material?
end select end select

View File

@ -500,7 +500,7 @@ module lattice
1, -2, 1, 6, -1, 2, -1, 1, & 1, -2, 1, 6, -1, 2, -1, 1, &
1, 1, -2, 6, -1, -1, 2, 1, & 1, 1, -2, 6, -1, -1, 2, 1, &
! !
-1, 1, 0, -2, -1, 1, 0, 1, & !! <10.-2>{10.1} shear = (4(c/a)^2-9)/(4 sqrt(3) c/a) -1, 1, 0, -2, -1, 1, 0, 1, & !! <10.-2>{10.1} shear = (4(c/a)^2-9)/(4 sqrt(3) c/a)
1, 0, -1, -2, 1, 0, -1, 1, & 1, 0, -1, -2, 1, 0, -1, 1, &
0, -1, 1, -2, 0, -1, 1, 1, & 0, -1, 1, -2, 0, -1, 1, 1, &
1, -1, 0, -2, 1, -1, 0, 1, & 1, -1, 0, -2, 1, -1, 0, 1, &
@ -690,15 +690,31 @@ module lattice
20,20,20,20,20,20, 19,19,19,19,19,19, 18,18,18,18,18,18, 17,17,17,17,16,17, & 20,20,20,20,20,20, 19,19,19,19,19,19, 18,18,18,18,18,18, 17,17,17,17,16,17, &
20,20,20,20,20,20, 19,19,19,19,19,19, 18,18,18,18,18,18, 17,17,17,17,17,16 & 20,20,20,20,20,20, 19,19,19,19,19,19, 18,18,18,18,18,18, 17,17,17,17,17,16 &
],pInt),[lattice_hex_Ntwin,lattice_hex_Ntwin],order=[2,1]) !< Twin--slip interaction types for hex (isotropic, 16 in total) ],pInt),[lattice_hex_Ntwin,lattice_hex_Ntwin],order=[2,1]) !< Twin--slip interaction types for hex (isotropic, 16 in total)
enum, bind(c)
enumerator :: LATTICE_iso_ID, &
LATTICE_fcc_ID, &
LATTICE_bcc_ID, &
LATTICE_hex_ID, &
LATTICE_ort_ID
end enum
character(len=*), parameter, public :: &
LATTICE_iso_label = 'iso', &
LATTICE_fcc_label = 'fcc', &
LATTICE_bcc_label = 'bcc', &
LATTICE_hex_label = 'hex', &
LATTICE_ort_label = 'ort'
public :: & public :: &
lattice_init, & lattice_init, &
lattice_initializeStructure, & lattice_initializeStructure, &
lattice_symmetryType, & lattice_symmetryType, &
lattice_symmetrizeC66, & lattice_symmetrizeC66, &
lattice_configNchunks lattice_configNchunks, &
LATTICE_iso_ID, &
LATTICE_fcc_ID, &
LATTICE_bcc_ID, &
LATTICE_hex_ID, &
LATTICE_ort_ID
contains contains
@ -732,9 +748,8 @@ subroutine lattice_init
write(6,'(a15,a)') ' Current time: ',IO_timeStamp() write(6,'(a15,a)') ' Current time: ',IO_timeStamp()
#include "compilation_info.f90" #include "compilation_info.f90"
if (.not. IO_open_jobFile_stat(fileunit,material_localFileExt)) then ! no local material configuration present... if (.not. IO_open_jobFile_stat(fileunit,material_localFileExt)) & ! no local material configuration present...
call IO_open_file(fileunit,material_configFile) ! ... open material.config file call IO_open_file(fileunit,material_configFile) ! ... open material.config file
endif
Nsections = IO_countSections(fileunit,material_partPhase) Nsections = IO_countSections(fileunit,material_partPhase)
lattice_Nstructure = 2_pInt + sum(IO_countTagInPart(fileunit,material_partPhase,'covera_ratio',Nsections)) ! fcc + bcc + all hex lattice_Nstructure = 2_pInt + sum(IO_countTagInPart(fileunit,material_partPhase,'covera_ratio',Nsections)) ! fcc + bcc + all hex
close(fileunit) close(fileunit)
@ -778,7 +793,7 @@ end subroutine lattice_init
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief Calculation of Schmid matrices, etc. !> @brief Calculation of Schmid matrices, etc.
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
integer(pInt) function lattice_initializeStructure(struct,CoverA) integer(pInt) function lattice_initializeStructure(struct_ID,CoverA)
use math, only: & use math, only: &
math_vectorproduct, & math_vectorproduct, &
math_tensorproduct, & math_tensorproduct, &
@ -793,8 +808,8 @@ integer(pInt) function lattice_initializeStructure(struct,CoverA)
IO_error IO_error
implicit none implicit none
character(len=*) struct integer(kind(LATTICE_fcc_ID)), intent(in) :: struct_ID
real(pReal) CoverA real(pReal) :: CoverA
real(pReal), dimension(3) :: sdU = 0.0_pReal, & real(pReal), dimension(3) :: sdU = 0.0_pReal, &
snU = 0.0_pReal, & snU = 0.0_pReal, &
np = 0.0_pReal, & np = 0.0_pReal, &
@ -812,8 +827,8 @@ integer(pInt) function lattice_initializeStructure(struct,CoverA)
processMe = .false. processMe = .false.
select case(struct(1:3)) ! check first three chars of structure name select case(struct_ID)
case ('fcc') case (LATTICE_fcc_ID)
myStructure = 1_pInt myStructure = 1_pInt
myNslipSystem = lattice_fcc_NslipSystem ! size of slip system families myNslipSystem = lattice_fcc_NslipSystem ! size of slip system families
myNtwinSystem = lattice_fcc_NtwinSystem ! size of twin system families myNtwinSystem = lattice_fcc_NtwinSystem ! size of twin system families
@ -842,7 +857,7 @@ integer(pInt) function lattice_initializeStructure(struct,CoverA)
interactionTwinTwin => lattice_fcc_interactionTwinTwin interactionTwinTwin => lattice_fcc_interactionTwinTwin
endif endif
case ('bcc') case (LATTICE_bcc_ID)
myStructure = 2_pInt myStructure = 2_pInt
myNslipSystem = lattice_bcc_NslipSystem ! size of slip system families myNslipSystem = lattice_bcc_NslipSystem ! size of slip system families
myNtwinSystem = lattice_bcc_NtwinSystem ! size of twin system families myNtwinSystem = lattice_bcc_NtwinSystem ! size of twin system families
@ -883,7 +898,7 @@ integer(pInt) function lattice_initializeStructure(struct,CoverA)
interactionTwinTwin => lattice_bcc_interactionTwinTwin interactionTwinTwin => lattice_bcc_interactionTwinTwin
endif endif
case ('hex') case (LATTICE_hex_ID)
if (CoverA < 1.0_pReal .or. CoverA > 2.0_pReal) call IO_error(206_pInt) ! checking physical significance of c/a if (CoverA < 1.0_pReal .or. CoverA > 2.0_pReal) call IO_error(206_pInt) ! checking physical significance of c/a
lattice_hex_Nstructure = lattice_hex_Nstructure + 1_pInt ! count instances of hex structures lattice_hex_Nstructure = lattice_hex_Nstructure + 1_pInt ! count instances of hex structures
@ -984,15 +999,15 @@ end function lattice_initializeStructure
!> @brief Maps structure to symmetry type !> @brief Maps structure to symmetry type
!> @details fcc(1) and bcc(2) are cubic(1) hex(3+) is hexagonal(2) !> @details fcc(1) and bcc(2) are cubic(1) hex(3+) is hexagonal(2)
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
integer(pInt) pure function lattice_symmetryType(structName) integer(pInt) pure function lattice_symmetryType(struct_ID)
implicit none implicit none
character(len=32), intent(in) :: structName integer(kind(LATTICE_fcc_ID)), intent(in) :: struct_ID
select case(structName(1:3)) select case(struct_ID)
case ('fcc','bcc') case (LATTICE_fcc_ID,LATTICE_bcc_ID)
lattice_symmetryType = 1_pInt lattice_symmetryType = 1_pInt
case ('hex') case (LATTICE_hex_ID)
lattice_symmetryType = 2_pInt lattice_symmetryType = 2_pInt
case default case default
lattice_symmetryType = 0_pInt lattice_symmetryType = 0_pInt
@ -1006,30 +1021,30 @@ end function lattice_symmetryType
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief Symmetrizes stiffness matrix according to lattice type !> @brief Symmetrizes stiffness matrix according to lattice type
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
pure function lattice_symmetrizeC66(structName,C66) pure function lattice_symmetrizeC66(struct_ID,C66)
implicit none implicit none
character(len=32), intent(in) :: structName integer(kind(LATTICE_fcc_ID)), intent(in) :: struct_ID
real(pReal), dimension(6,6), intent(in) :: C66 real(pReal), dimension(6,6), intent(in) :: C66
real(pReal), dimension(6,6) :: lattice_symmetrizeC66 real(pReal), dimension(6,6) :: lattice_symmetrizeC66
integer(pInt) :: j,k integer(pInt) :: j,k
lattice_symmetrizeC66 = 0.0_pReal lattice_symmetrizeC66 = 0.0_pReal
select case(structName(1:3)) select case(struct_ID)
case ('iso') case (LATTICE_iso_ID)
forall(k=1_pInt:3_pInt) forall(k=1_pInt:3_pInt)
forall(j=1_pInt:3_pInt) lattice_symmetrizeC66(k,j) = C66(1,2) forall(j=1_pInt:3_pInt) lattice_symmetrizeC66(k,j) = C66(1,2)
lattice_symmetrizeC66(k,k) = C66(1,1) lattice_symmetrizeC66(k,k) = C66(1,1)
lattice_symmetrizeC66(k+3,k+3) = 0.5_pReal*(C66(1,1)-C66(1,2)) lattice_symmetrizeC66(k+3,k+3) = 0.5_pReal*(C66(1,1)-C66(1,2))
end forall end forall
case ('fcc','bcc') case (LATTICE_fcc_ID,LATTICE_bcc_ID)
forall(k=1_pInt:3_pInt) forall(k=1_pInt:3_pInt)
forall(j=1_pInt:3_pInt) lattice_symmetrizeC66(k,j) = C66(1,2) forall(j=1_pInt:3_pInt) lattice_symmetrizeC66(k,j) = C66(1,2)
lattice_symmetrizeC66(k,k) = C66(1,1) lattice_symmetrizeC66(k,k) = C66(1,1)
lattice_symmetrizeC66(k+3_pInt,k+3_pInt) = C66(4,4) lattice_symmetrizeC66(k+3_pInt,k+3_pInt) = C66(4,4)
end forall end forall
case ('hex') case (LATTICE_hex_ID)
lattice_symmetrizeC66(1,1) = C66(1,1) lattice_symmetrizeC66(1,1) = C66(1,1)
lattice_symmetrizeC66(2,2) = C66(1,1) lattice_symmetrizeC66(2,2) = C66(1,1)
lattice_symmetrizeC66(3,3) = C66(3,3) lattice_symmetrizeC66(3,3) = C66(3,3)
@ -1042,7 +1057,7 @@ pure function lattice_symmetrizeC66(structName,C66)
lattice_symmetrizeC66(4,4) = C66(4,4) lattice_symmetrizeC66(4,4) = C66(4,4)
lattice_symmetrizeC66(5,5) = C66(4,4) lattice_symmetrizeC66(5,5) = C66(4,4)
lattice_symmetrizeC66(6,6) = 0.5_pReal*(C66(1,1)-C66(1,2)) lattice_symmetrizeC66(6,6) = 0.5_pReal*(C66(1,1)-C66(1,2))
case ('ort') case (LATTICE_ort_ID)
lattice_symmetrizeC66(1,1) = C66(1,1) lattice_symmetrizeC66(1,1) = C66(1,1)
lattice_symmetrizeC66(2,2) = C66(2,2) lattice_symmetrizeC66(2,2) = C66(2,2)
lattice_symmetrizeC66(3,3) = C66(3,3) lattice_symmetrizeC66(3,3) = C66(3,3)
@ -1070,16 +1085,16 @@ pure function lattice_symmetrizeC66(structName,C66)
! TwinTwinInteraction ! TwinTwinInteraction
! NnonSchmid ! NnonSchmid
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
function lattice_configNchunks(struct) function lattice_configNchunks(struct_ID)
use prec, only: & use prec, only: &
pInt pInt
implicit none implicit none
integer(pInt), dimension(7) :: lattice_configNchunks integer(pInt), dimension(7) :: lattice_configNchunks
character(len=*), intent(in) :: struct integer(kind(LATTICE_fcc_ID)) :: struct_ID
select case(struct(1:3)) ! check first three chars of structure name select case(struct_ID)
case ('fcc') case (LATTICE_fcc_ID)
lattice_configNchunks(1) = count(lattice_fcc_NslipSystem > 0_pInt) lattice_configNchunks(1) = count(lattice_fcc_NslipSystem > 0_pInt)
lattice_configNchunks(2) = count(lattice_fcc_NtwinSystem > 0_pInt) lattice_configNchunks(2) = count(lattice_fcc_NtwinSystem > 0_pInt)
lattice_configNchunks(3) = maxval(lattice_fcc_interactionSlipSlip) lattice_configNchunks(3) = maxval(lattice_fcc_interactionSlipSlip)
@ -1087,7 +1102,7 @@ function lattice_configNchunks(struct)
lattice_configNchunks(5) = maxval(lattice_fcc_interactionTwinSlip) lattice_configNchunks(5) = maxval(lattice_fcc_interactionTwinSlip)
lattice_configNchunks(6) = maxval(lattice_fcc_interactionTwinTwin) lattice_configNchunks(6) = maxval(lattice_fcc_interactionTwinTwin)
lattice_configNchunks(7) = lattice_fcc_NnonSchmid lattice_configNchunks(7) = lattice_fcc_NnonSchmid
case ('bcc') case (LATTICE_bcc_ID)
lattice_configNchunks(1) = count(lattice_bcc_NslipSystem > 0_pInt) lattice_configNchunks(1) = count(lattice_bcc_NslipSystem > 0_pInt)
lattice_configNchunks(2) = count(lattice_bcc_NtwinSystem > 0_pInt) lattice_configNchunks(2) = count(lattice_bcc_NtwinSystem > 0_pInt)
lattice_configNchunks(3) = maxval(lattice_bcc_interactionSlipSlip) lattice_configNchunks(3) = maxval(lattice_bcc_interactionSlipSlip)
@ -1095,7 +1110,7 @@ function lattice_configNchunks(struct)
lattice_configNchunks(5) = maxval(lattice_bcc_interactionTwinSlip) lattice_configNchunks(5) = maxval(lattice_bcc_interactionTwinSlip)
lattice_configNchunks(6) = maxval(lattice_bcc_interactionTwinTwin) lattice_configNchunks(6) = maxval(lattice_bcc_interactionTwinTwin)
lattice_configNchunks(7) = lattice_bcc_NnonSchmid lattice_configNchunks(7) = lattice_bcc_NnonSchmid
case ('hex') case (LATTICE_hex_ID)
lattice_configNchunks(1) = count(lattice_hex_NslipSystem > 0_pInt) lattice_configNchunks(1) = count(lattice_hex_NslipSystem > 0_pInt)
lattice_configNchunks(2) = count(lattice_hex_NtwinSystem > 0_pInt) lattice_configNchunks(2) = count(lattice_hex_NtwinSystem > 0_pInt)
lattice_configNchunks(3) = maxval(lattice_hex_interactionSlipSlip) lattice_configNchunks(3) = maxval(lattice_hex_interactionSlipSlip)