diff --git a/code/config/material.config b/code/config/material.config index c5e7af71e..98c633ff3 100644 --- a/code/config/material.config +++ b/code/config/material.config @@ -99,10 +99,16 @@ crystallite 2 elasticity hooke plasticity none -lattice_structure fcc +lattice_structure orthorhombic c11 106.75e9 +c22 106.75e9 +c33 106.75e9 c12 60.41e9 +c13 60.41e9 +c23 60.41e9 c44 28.34e9 +c55 28.34e9 +c66 28.34e9 [Aluminum_J2isotropic] @@ -112,6 +118,7 @@ plasticity j2 (output) flowstress (output) strainrate +lattice_structure isotropic c11 110.9e9 c12 58.34e9 taylorfactor 3 diff --git a/code/constitutive_dislotwin.f90 b/code/constitutive_dislotwin.f90 index 62bb872de..598a77625 100644 --- a/code/constitutive_dislotwin.f90 +++ b/code/constitutive_dislotwin.f90 @@ -57,11 +57,6 @@ integer(pInt), dimension(:), allocatable :: constitutive_dislotwin integer(pInt), dimension(:,:), allocatable :: constitutive_dislotwin_Nslip, & ! number of active slip systems for each family and instance constitutive_dislotwin_Ntwin ! number of active twin systems for each family and instance real(pReal), dimension(:), allocatable :: constitutive_dislotwin_CoverA, & ! c/a ratio for hex type lattice - constitutive_dislotwin_C11, & ! C11 element in elasticity matrix - constitutive_dislotwin_C12, & ! C12 element in elasticity matrix - constitutive_dislotwin_C13, & ! C13 element in elasticity matrix - constitutive_dislotwin_C33, & ! C33 element in elasticity matrix - constitutive_dislotwin_C44, & ! C44 element in elasticity matrix constitutive_dislotwin_Gmod, & ! shear modulus constitutive_dislotwin_CAtomicVolume, & ! atomic volume in Bugers vector unit constitutive_dislotwin_D0, & ! prefactor for self-diffusion coefficient @@ -186,16 +181,6 @@ allocate(constitutive_dislotwin_totalNtwin(maxNinstance)) constitutive_dislotwin_totalNtwin = 0_pInt allocate(constitutive_dislotwin_CoverA(maxNinstance)) constitutive_dislotwin_CoverA = 0.0_pReal -allocate(constitutive_dislotwin_C11(maxNinstance)) - constitutive_dislotwin_C11 = 0.0_pReal -allocate(constitutive_dislotwin_C12(maxNinstance)) - constitutive_dislotwin_C12 = 0.0_pReal -allocate(constitutive_dislotwin_C13(maxNinstance)) - constitutive_dislotwin_C13 = 0.0_pReal -allocate(constitutive_dislotwin_C33(maxNinstance)) - constitutive_dislotwin_C33 = 0.0_pReal -allocate(constitutive_dislotwin_C44(maxNinstance)) - constitutive_dislotwin_C44 = 0.0_pReal allocate(constitutive_dislotwin_Gmod(maxNinstance)) constitutive_dislotwin_Gmod = 0.0_pReal allocate(constitutive_dislotwin_CAtomicVolume(maxNinstance)) @@ -301,15 +286,23 @@ do ! read thru sections of case ('covera_ratio') constitutive_dislotwin_CoverA(i) = IO_floatValue(line,positions,2_pInt) case ('c11') - constitutive_dislotwin_C11(i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_Cslip_66(1,1,i) = IO_floatValue(line,positions,2_pInt) case ('c12') - constitutive_dislotwin_C12(i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_Cslip_66(1,2,i) = IO_floatValue(line,positions,2_pInt) case ('c13') - constitutive_dislotwin_C13(i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_Cslip_66(1,3,i) = IO_floatValue(line,positions,2_pInt) + case ('c22') + constitutive_dislotwin_Cslip_66(2,2,i) = IO_floatValue(line,positions,2_pInt) + case ('c23') + constitutive_dislotwin_Cslip_66(2,3,i) = IO_floatValue(line,positions,2_pInt) case ('c33') - constitutive_dislotwin_C33(i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_Cslip_66(3,3,i) = IO_floatValue(line,positions,2_pInt) case ('c44') - constitutive_dislotwin_C44(i) = IO_floatValue(line,positions,2_pInt) + constitutive_dislotwin_Cslip_66(4,4,i) = IO_floatValue(line,positions,2_pInt) + case ('c55') + constitutive_dislotwin_Cslip_66(5,5,i) = IO_floatValue(line,positions,2_pInt) + case ('c66') + constitutive_dislotwin_Cslip_66(6,6,i) = IO_floatValue(line,positions,2_pInt) case ('nslip') forall (j = 1_pInt:lattice_maxNslipFamily) & constitutive_dislotwin_Nslip(j,i) = IO_intValue(line,positions,1_pInt+j) @@ -549,32 +542,12 @@ do i = 1_pInt,maxNinstance !* Elasticity matrix and shear modulus according to material.config - select case (myStructure) - case(1_pInt:2_pInt) ! cubic(s) - forall(k=1_pInt:3_pInt) - forall(j=1_pInt:3_pInt) & - constitutive_dislotwin_Cslip_66(k,j,i) = constitutive_dislotwin_C12(i) - constitutive_dislotwin_Cslip_66(k,k,i) = constitutive_dislotwin_C11(i) - constitutive_dislotwin_Cslip_66(k+3_pInt,k+3_pInt,i) = constitutive_dislotwin_C44(i) - end forall - case(3_pInt:) ! all hex - constitutive_dislotwin_Cslip_66(1,1,i) = constitutive_dislotwin_C11(i) - constitutive_dislotwin_Cslip_66(2,2,i) = constitutive_dislotwin_C11(i) - constitutive_dislotwin_Cslip_66(3,3,i) = constitutive_dislotwin_C33(i) - constitutive_dislotwin_Cslip_66(1,2,i) = constitutive_dislotwin_C12(i) - constitutive_dislotwin_Cslip_66(2,1,i) = constitutive_dislotwin_C12(i) - constitutive_dislotwin_Cslip_66(1,3,i) = constitutive_dislotwin_C13(i) - constitutive_dislotwin_Cslip_66(3,1,i) = constitutive_dislotwin_C13(i) - constitutive_dislotwin_Cslip_66(2,3,i) = constitutive_dislotwin_C13(i) - constitutive_dislotwin_Cslip_66(3,2,i) = constitutive_dislotwin_C13(i) - constitutive_dislotwin_Cslip_66(4,4,i) = constitutive_dislotwin_C44(i) - constitutive_dislotwin_Cslip_66(5,5,i) = constitutive_dislotwin_C44(i) - constitutive_dislotwin_Cslip_66(6,6,i) = 0.5_pReal*(constitutive_dislotwin_C11(i)-constitutive_dislotwin_C12(i)) - end select + constitutive_dislotwin_Cslip_66(:,:,i) = lattice_symmetrizeC66(constitutive_dislotwin_structureName(i),& + constitutive_dislotwin_Cslip_66) + constitutive_dislotwin_Gmod(i) = & + 0.2_pReal*(constitutive_dislotwin_Cslip_66(1,1,i)-constitutive_dislotwin_Cslip_66(1,2,i))+0.3_pReal*constitutive_dislotwin_Cslip_66(4,4,i) constitutive_dislotwin_Cslip_66(:,:,i) = math_Mandel3333to66(math_Voigt66to3333(constitutive_dislotwin_Cslip_66(:,:,i))) constitutive_dislotwin_Cslip_3333(:,:,:,:,i) = math_Voigt66to3333(constitutive_dislotwin_Cslip_66(:,:,i)) - constitutive_dislotwin_Gmod(i) = & - 0.2_pReal*(constitutive_dislotwin_C11(i)-constitutive_dislotwin_C12(i))+0.3_pReal*constitutive_dislotwin_C44(i) !* Process slip related parameters ------------------------------------------------ diff --git a/code/constitutive_j2.f90 b/code/constitutive_j2.f90 index 1384415a3..938a17199 100644 --- a/code/constitutive_j2.f90 +++ b/code/constitutive_j2.f90 @@ -60,11 +60,12 @@ module constitutive_j2 constitutive_j2_output ! name of each post result output integer(pInt), dimension(:), allocatable, private :: & - constitutive_j2_Noutput + constitutive_j2_Noutput !< name of each post result output + + character(len=32), dimension(:), allocatable, private :: & + constitutive_j2_structureName real(pReal), dimension(:), allocatable, private :: & - constitutive_j2_C11, & - constitutive_j2_C12, & !* Visco-plastic constitutive_j2 parameters constitutive_j2_fTaylor, & constitutive_j2_tau0, & @@ -120,6 +121,7 @@ subroutine constitutive_j2_init(myFile) debug_level, & debug_constitutive, & debug_levelBasic + use lattice, only: lattice_symmetrizeC66 implicit none integer(pInt), intent(in) :: myFile @@ -156,10 +158,8 @@ subroutine constitutive_j2_init(myFile) constitutive_j2_output = '' allocate(constitutive_j2_Noutput(maxNinstance)) constitutive_j2_Noutput = 0_pInt - allocate(constitutive_j2_C11(maxNinstance)) - constitutive_j2_C11 = 0.0_pReal - allocate(constitutive_j2_C12(maxNinstance)) - constitutive_j2_C12 = 0.0_pReal + allocate(constitutive_j2_structureName(maxNinstance)) + constitutive_j2_structureName = '' allocate(constitutive_j2_Cslip_66(6,6,maxNinstance)) constitutive_j2_Cslip_66 = 0.0_pReal allocate(constitutive_j2_fTaylor(maxNinstance)) @@ -213,10 +213,26 @@ subroutine constitutive_j2_init(myFile) case ('(output)') constitutive_j2_Noutput(i) = constitutive_j2_Noutput(i) + 1_pInt constitutive_j2_output(constitutive_j2_Noutput(i),i) = IO_lc(IO_stringValue(line,positions,2_pInt)) + case ('lattice_structure') + constitutive_j2_structureName(i) = IO_lc(IO_stringValue(line,positions,2_pInt)) case ('c11') - constitutive_j2_C11(i) = IO_floatValue(line,positions,2_pInt) + constitutive_j2_Cslip_66(1,1,i) = IO_floatValue(line,positions,2_pInt) case ('c12') - constitutive_j2_C12(i) = IO_floatValue(line,positions,2_pInt) + constitutive_j2_Cslip_66(1,2,i) = IO_floatValue(line,positions,2_pInt) + case ('c13') + constitutive_j2_Cslip_66(1,3,i) = IO_floatValue(line,positions,2_pInt) + case ('c22') + constitutive_j2_Cslip_66(2,2,i) = IO_floatValue(line,positions,2_pInt) + case ('c23') + constitutive_j2_Cslip_66(2,3,i) = IO_floatValue(line,positions,2_pInt) + case ('c33') + constitutive_j2_Cslip_66(3,3,i) = IO_floatValue(line,positions,2_pInt) + case ('c44') + constitutive_j2_Cslip_66(4,4,i) = IO_floatValue(line,positions,2_pInt) + case ('c55') + constitutive_j2_Cslip_66(5,5,i) = IO_floatValue(line,positions,2_pInt) + case ('c66') + constitutive_j2_Cslip_66(6,6,i) = IO_floatValue(line,positions,2_pInt) case ('tau0') constitutive_j2_tau0(i) = IO_floatValue(line,positions,2_pInt) case ('gdot0') @@ -250,6 +266,7 @@ subroutine constitutive_j2_init(myFile) enddo 100 do i = 1_pInt,maxNinstance ! sanity checks + if (constitutive_j2_structureName(i) == '') call IO_error(205_pInt,e=i) if (constitutive_j2_tau0(i) < 0.0_pReal) call IO_error(211_pInt,ext_msg='tau0 (' & //constitutive_j2_label//')') if (constitutive_j2_gdot0(i) <= 0.0_pReal) call IO_error(211_pInt,ext_msg='gdot0 (' & @@ -286,14 +303,9 @@ subroutine constitutive_j2_init(myFile) constitutive_j2_sizeDotState(i) = 1_pInt constitutive_j2_sizeState(i) = 1_pInt - - forall(k=1_pInt:3_pInt) - forall(j=1_pInt:3_pInt) - constitutive_j2_Cslip_66(k,j,i) = constitutive_j2_C12(i) - end forall - constitutive_j2_Cslip_66(k,k,i) = constitutive_j2_C11(i) - constitutive_j2_Cslip_66(k+3,k+3,i) = 0.5_pReal*(constitutive_j2_C11(i)-constitutive_j2_C12(i)) - end forall + + constitutive_j2_Cslip_66(:,:,i) = lattice_symmetrizeC66(constitutive_j2_structureName(i),& + constitutive_j2_Cslip_66) constitutive_j2_Cslip_66(1:6,1:6,i) = & math_Mandel3333to66(math_Voigt66to3333(constitutive_j2_Cslip_66(1:6,1:6,i))) diff --git a/code/constitutive_none.f90 b/code/constitutive_none.f90 index 9a00ee80a..c1eb16bef 100644 --- a/code/constitutive_none.f90 +++ b/code/constitutive_none.f90 @@ -46,22 +46,13 @@ module constitutive_none integer(pInt), dimension(:), allocatable, public :: & constitutive_none_sizeDotState, & constitutive_none_sizeState, & - constitutive_none_sizePostResults, & - constitutive_none_structure + constitutive_none_sizePostResults character(len=32), dimension(:), allocatable, private :: & constitutive_none_structureName integer(pInt), dimension(:,:), allocatable, target, public :: & constitutive_none_sizePostResult ! size of each post result output - - real(pReal), dimension(:), allocatable, private :: & - constitutive_none_CoverA, & - constitutive_none_C11, & - constitutive_none_C12, & - constitutive_none_C13, & - constitutive_none_C33, & - constitutive_none_C44 real(pReal), dimension(:,:,:), allocatable, private :: & constitutive_none_Cslip_66 @@ -100,7 +91,7 @@ subroutine constitutive_none_init(myFile) debug_level, & debug_constitutive, & debug_levelBasic - use lattice, only: lattice_initializeStructure, lattice_symmetryType + use lattice, only: lattice_symmetrizeC66 implicit none integer(pInt), intent(in) :: myFile @@ -132,20 +123,6 @@ subroutine constitutive_none_init(myFile) constitutive_none_sizePostResults = 0_pInt allocate(constitutive_none_structureName(maxNinstance)) constitutive_none_structureName = '' - allocate(constitutive_none_structure(maxNinstance)) - constitutive_none_structure = 0_pInt - allocate(constitutive_none_CoverA(maxNinstance)) - constitutive_none_CoverA = 0.0_pReal - allocate(constitutive_none_C11(maxNinstance)) - constitutive_none_C11 = 0.0_pReal - allocate(constitutive_none_C12(maxNinstance)) - constitutive_none_C12 = 0.0_pReal - allocate(constitutive_none_C13(maxNinstance)) - constitutive_none_C13 = 0.0_pReal - allocate(constitutive_none_C33(maxNinstance)) - constitutive_none_C33 = 0.0_pReal - allocate(constitutive_none_C44(maxNinstance)) - constitutive_none_C44 = 0.0_pReal allocate(constitutive_none_Cslip_66(6,6,maxNinstance)) constitutive_none_Cslip_66 = 0.0_pReal @@ -172,60 +149,40 @@ subroutine constitutive_none_init(myFile) cycle case ('lattice_structure') constitutive_none_structureName(i) = IO_lc(IO_stringValue(line,positions,2_pInt)) - case ('covera_ratio') - constitutive_none_CoverA(i) = IO_floatValue(line,positions,2_pInt) case ('c11') - constitutive_none_C11(i) = IO_floatValue(line,positions,2_pInt) + constitutive_none_Cslip_66(1,1,i) = IO_floatValue(line,positions,2_pInt) case ('c12') - constitutive_none_C12(i) = IO_floatValue(line,positions,2_pInt) + constitutive_none_Cslip_66(1,2,i) = IO_floatValue(line,positions,2_pInt) case ('c13') - constitutive_none_C13(i) = IO_floatValue(line,positions,2_pInt) + constitutive_none_Cslip_66(1,3,i) = IO_floatValue(line,positions,2_pInt) + case ('c22') + constitutive_none_Cslip_66(2,2,i) = IO_floatValue(line,positions,2_pInt) + case ('c23') + constitutive_none_Cslip_66(2,3,i) = IO_floatValue(line,positions,2_pInt) case ('c33') - constitutive_none_C33(i) = IO_floatValue(line,positions,2_pInt) + constitutive_none_Cslip_66(3,3,i) = IO_floatValue(line,positions,2_pInt) case ('c44') - constitutive_none_C44(i) = IO_floatValue(line,positions,2_pInt) + constitutive_none_Cslip_66(4,4,i) = IO_floatValue(line,positions,2_pInt) + case ('c55') + constitutive_none_Cslip_66(5,5,i) = IO_floatValue(line,positions,2_pInt) + case ('c66') + constitutive_none_Cslip_66(6,6,i) = IO_floatValue(line,positions,2_pInt) case default call IO_error(210_pInt,ext_msg=tag//' ('//constitutive_none_label//')') end select endif enddo -100 do i = 1_pInt,maxNinstance ! sanity checks - constitutive_none_structure(i) = lattice_initializeStructure(constitutive_none_structureName(i), & ! get structure - constitutive_none_CoverA(i)) - myStructure = constitutive_none_structure(i) - if (myStructure < 1_pInt) call IO_error(205_pInt,e=i) +100 do i = 1_pInt,maxNinstance + if (constitutive_none_structureName(i) == '') call IO_error(205_pInt,e=i) enddo do i = 1_pInt,maxNinstance constitutive_none_sizeDotState(i) = 1_pInt constitutive_none_sizeState(i) = 1_pInt - myStructure = constitutive_none_structure(i) - - select case (lattice_symmetryType(myStructure)) ! assign elasticity tensor - case(1_pInt) ! cubic(s) - forall(k=1_pInt:3_pInt) - forall(j=1_pInt:3_pInt) & - constitutive_none_Cslip_66(k,j,i) = constitutive_none_C12(i) - constitutive_none_Cslip_66(k,k,i) = constitutive_none_C11(i) - constitutive_none_Cslip_66(k+3_pInt,k+3_pInt,i) = constitutive_none_C44(i) - end forall - case(2_pInt) ! hex - constitutive_none_Cslip_66(1,1,i) = constitutive_none_C11(i) - constitutive_none_Cslip_66(2,2,i) = constitutive_none_C11(i) - constitutive_none_Cslip_66(3,3,i) = constitutive_none_C33(i) - constitutive_none_Cslip_66(1,2,i) = constitutive_none_C12(i) - constitutive_none_Cslip_66(2,1,i) = constitutive_none_C12(i) - constitutive_none_Cslip_66(1,3,i) = constitutive_none_C13(i) - constitutive_none_Cslip_66(3,1,i) = constitutive_none_C13(i) - constitutive_none_Cslip_66(2,3,i) = constitutive_none_C13(i) - constitutive_none_Cslip_66(3,2,i) = constitutive_none_C13(i) - constitutive_none_Cslip_66(4,4,i) = constitutive_none_C44(i) - constitutive_none_Cslip_66(5,5,i) = constitutive_none_C44(i) - constitutive_none_Cslip_66(6,6,i) = 0.5_pReal*(constitutive_none_C11(i)- & - constitutive_none_C12(i)) - end select + constitutive_none_Cslip_66(:,:,i) = lattice_symmetrizeC66(constitutive_none_structureName(i),& + constitutive_none_Cslip_66) constitutive_none_Cslip_66(:,:,i) = & math_Mandel3333to66(math_Voigt66to3333(constitutive_none_Cslip_66(:,:,i))) diff --git a/code/constitutive_nonlocal.f90 b/code/constitutive_nonlocal.f90 index 679900624..06fc31c3e 100644 --- a/code/constitutive_nonlocal.f90 +++ b/code/constitutive_nonlocal.f90 @@ -87,7 +87,7 @@ constitutive_nonlocal_output ! name of e integer(pInt), dimension(:), allocatable, private :: & constitutive_nonlocal_Noutput ! number of outputs per instance of this plasticity -character(len=32), dimension(:), allocatable, private :: & +character(len=32), dimension(:), allocatable, public :: & constitutive_nonlocal_structureName ! name of the lattice structure integer(pInt), dimension(:), allocatable, public :: & @@ -104,11 +104,6 @@ constitutive_nonlocal_colinearSystem ! colinear real(pReal), dimension(:), allocatable, private :: & constitutive_nonlocal_CoverA, & ! c/a ratio for hex type lattice -constitutive_nonlocal_C11, & ! C11 element in elasticity matrix -constitutive_nonlocal_C12, & ! C12 element in elasticity matrix -constitutive_nonlocal_C13, & ! C13 element in elasticity matrix -constitutive_nonlocal_C33, & ! C33 element in elasticity matrix -constitutive_nonlocal_C44, & ! C44 element in elasticity matrix constitutive_nonlocal_Gmod, & ! shear modulus constitutive_nonlocal_nu, & ! poisson's ratio constitutive_nonlocal_atomicVolume, & ! atomic volume @@ -235,6 +230,7 @@ use lattice, only: lattice_maxNslipFamily, & lattice_maxNinteraction, & lattice_NslipSystem, & lattice_initializeStructure, & + lattice_symmetrizeC66, & lattice_sd, & lattice_sn, & lattice_st, & @@ -312,11 +308,6 @@ constitutive_nonlocal_slipSystemLattice = 0_pInt constitutive_nonlocal_totalNslip = 0_pInt allocate(constitutive_nonlocal_CoverA(maxNinstance)) -allocate(constitutive_nonlocal_C11(maxNinstance)) -allocate(constitutive_nonlocal_C12(maxNinstance)) -allocate(constitutive_nonlocal_C13(maxNinstance)) -allocate(constitutive_nonlocal_C33(maxNinstance)) -allocate(constitutive_nonlocal_C44(maxNinstance)) allocate(constitutive_nonlocal_Gmod(maxNinstance)) allocate(constitutive_nonlocal_nu(maxNinstance)) allocate(constitutive_nonlocal_atomicVolume(maxNinstance)) @@ -350,11 +341,6 @@ allocate(constitutive_nonlocal_fEdgeMultiplication(maxNinstance)) allocate(constitutive_nonlocal_linetensionEffect(maxNinstance)) allocate(constitutive_nonlocal_edgeJogFactor(maxNinstance)) constitutive_nonlocal_CoverA = 0.0_pReal -constitutive_nonlocal_C11 = 0.0_pReal -constitutive_nonlocal_C12 = 0.0_pReal -constitutive_nonlocal_C13 = 0.0_pReal -constitutive_nonlocal_C33 = 0.0_pReal -constitutive_nonlocal_C44 = 0.0_pReal constitutive_nonlocal_Gmod = 0.0_pReal constitutive_nonlocal_atomicVolume = 0.0_pReal constitutive_nonlocal_Dsd0 = -1.0_pReal @@ -444,16 +430,24 @@ do constitutive_nonlocal_structureName(i) = IO_lc(IO_stringValue(line,positions,2_pInt)) case ('c/a_ratio','covera_ratio') constitutive_nonlocal_CoverA(i) = IO_floatValue(line,positions,2_pInt) - case ('c11') - constitutive_nonlocal_C11(i) = IO_floatValue(line,positions,2_pInt) - case ('c12') - constitutive_nonlocal_C12(i) = IO_floatValue(line,positions,2_pInt) - case ('c13') - constitutive_nonlocal_C13(i) = IO_floatValue(line,positions,2_pInt) - case ('c33') - constitutive_nonlocal_C33(i) = IO_floatValue(line,positions,2_pInt) - case ('c44') - constitutive_nonlocal_C44(i) = IO_floatValue(line,positions,2_pInt) + case ('c11') + constitutive_nonlocal_Cslip_66(1,1,i) = IO_floatValue(line,positions,2_pInt) + case ('c12') + constitutive_nonlocal_Cslip_66(1,2,i) = IO_floatValue(line,positions,2_pInt) + case ('c13') + constitutive_nonlocal_Cslip_66(1,3,i) = IO_floatValue(line,positions,2_pInt) + case ('c22') + constitutive_nonlocal_Cslip_66(2,2,i) = IO_floatValue(line,positions,2_pInt) + case ('c23') + constitutive_nonlocal_Cslip_66(2,3,i) = IO_floatValue(line,positions,2_pInt) + case ('c33') + constitutive_nonlocal_Cslip_66(3,3,i) = IO_floatValue(line,positions,2_pInt) + case ('c44') + constitutive_nonlocal_Cslip_66(4,4,i) = IO_floatValue(line,positions,2_pInt) + case ('c55') + constitutive_nonlocal_Cslip_66(5,5,i) = IO_floatValue(line,positions,2_pInt) + case ('c66') + constitutive_nonlocal_Cslip_66(6,6,i) = IO_floatValue(line,positions,2_pInt) case ('nslip') forall (f = 1_pInt:lattice_maxNslipFamily) & constitutive_nonlocal_Nslip(f,i) = IO_intValue(line,positions,1_pInt+f) @@ -850,36 +844,17 @@ do i = 1,maxNinstance !*** elasticity matrix and shear modulus according to material.config - select case (myStructure) - case(1_pInt:2_pInt) ! cubic(s) - forall(k=1_pInt:3_pInt) - forall(j=1_pInt:3_pInt) constitutive_nonlocal_Cslip_66(k,j,i) = constitutive_nonlocal_C12(i) - constitutive_nonlocal_Cslip_66(k,k,i) = constitutive_nonlocal_C11(i) - constitutive_nonlocal_Cslip_66(k+3_pInt,k+3_pInt,i) = constitutive_nonlocal_C44(i) - end forall - case(3_pInt:) ! all hex - constitutive_nonlocal_Cslip_66(1,1,i) = constitutive_nonlocal_C11(i) - constitutive_nonlocal_Cslip_66(2,2,i) = constitutive_nonlocal_C11(i) - constitutive_nonlocal_Cslip_66(3,3,i) = constitutive_nonlocal_C33(i) - constitutive_nonlocal_Cslip_66(1,2,i) = constitutive_nonlocal_C12(i) - constitutive_nonlocal_Cslip_66(2,1,i) = constitutive_nonlocal_C12(i) - constitutive_nonlocal_Cslip_66(1,3,i) = constitutive_nonlocal_C13(i) - constitutive_nonlocal_Cslip_66(3,1,i) = constitutive_nonlocal_C13(i) - constitutive_nonlocal_Cslip_66(2,3,i) = constitutive_nonlocal_C13(i) - constitutive_nonlocal_Cslip_66(3,2,i) = constitutive_nonlocal_C13(i) - constitutive_nonlocal_Cslip_66(4,4,i) = constitutive_nonlocal_C44(i) - constitutive_nonlocal_Cslip_66(5,5,i) = constitutive_nonlocal_C44(i) - constitutive_nonlocal_Cslip_66(6,6,i) = 0.5_pReal*(constitutive_nonlocal_C11(i)- constitutive_nonlocal_C12(i)) - end select + constitutive_nonlocal_Cslip_66(:,:,i) = lattice_symmetrizeC66(constitutive_nonlocal_structureName(i),& + constitutive_nonlocal_Cslip_66) + constitutive_nonlocal_Gmod(i) = 0.2_pReal * ( constitutive_nonlocal_Cslip_66(1,1,i) - constitutive_nonlocal_Cslip_66(1,2,i) & + + 3.0_pReal*constitutive_nonlocal_Cslip_66(4,4,i) ) ! (C11iso-C12iso)/2 with C11iso=(3*C11+2*C12+4*C44)/5 and C12iso=(C11+4*C12-2*C44)/5 + constitutive_nonlocal_nu(i) = ( constitutive_nonlocal_Cslip_66(1,1,i) + 4.0_pReal*constitutive_nonlocal_Cslip_66(1,2,i) & + - 2.0_pReal*constitutive_nonlocal_Cslip_66(1,2,i) ) & + / ( 4.0_pReal*constitutive_nonlocal_Cslip_66(1,1,i) + 6.0_pReal*constitutive_nonlocal_Cslip_66(1,2,i) & + + 2.0_pReal*constitutive_nonlocal_Cslip_66(4,4,i) ) constitutive_nonlocal_Cslip_66(1:6,1:6,i) = math_Mandel3333to66(math_Voigt66to3333(constitutive_nonlocal_Cslip_66(1:6,1:6,i))) constitutive_nonlocal_Cslip_3333(1:3,1:3,1:3,1:3,i) = math_Voigt66to3333(constitutive_nonlocal_Cslip_66(1:6,1:6,i)) - - constitutive_nonlocal_Gmod(i) = 0.2_pReal * ( constitutive_nonlocal_C11(i) - constitutive_nonlocal_C12(i) & - + 3.0_pReal*constitutive_nonlocal_C44(i) ) ! (C11iso-C12iso)/2 with C11iso=(3*C11+2*C12+4*C44)/5 and C12iso=(C11+4*C12-2*C44)/5 - constitutive_nonlocal_nu(i) = ( constitutive_nonlocal_C11(i) + 4.0_pReal*constitutive_nonlocal_C12(i) & - - 2.0_pReal*constitutive_nonlocal_C44(i) ) & - / ( 4.0_pReal*constitutive_nonlocal_C11(i) + 6.0_pReal*constitutive_nonlocal_C12(i) & - + 2.0_pReal*constitutive_nonlocal_C44(i) ) ! C12iso/(C11iso+C12iso) with C11iso=(3*C11+2*C12+4*C44)/5 and C12iso=(C11+4*C12-2*C44)/5 + ! C12iso/(C11iso+C12iso) with C11iso=(3*C11+2*C12+4*C44)/5 and C12iso=(C11+4*C12-2*C44)/5 do s1 = 1_pInt,ns f = constitutive_nonlocal_slipFamily(s1,i) diff --git a/code/constitutive_phenopowerlaw.f90 b/code/constitutive_phenopowerlaw.f90 index 3599a479a..6b3cadc07 100644 --- a/code/constitutive_phenopowerlaw.f90 +++ b/code/constitutive_phenopowerlaw.f90 @@ -53,16 +53,11 @@ module constitutive_phenopowerlaw character(len=64), dimension(:,:), allocatable, target, public :: & constitutive_phenopowerlaw_output !< name of each post result output - character(len=32), dimension(:), allocatable, private :: & + character(len=32), dimension(:), allocatable, public :: & constitutive_phenopowerlaw_structureName real(pReal), dimension(:), allocatable, private :: & constitutive_phenopowerlaw_CoverA, & !< c/a of the crystal (input parameter) - constitutive_phenopowerlaw_C11, & !< component 11 of the stiffness matrix (input parameter) - constitutive_phenopowerlaw_C12, & !< component 12 of the stiffness matrix (input parameter) - constitutive_phenopowerlaw_C13, & !< component 13 of the stiffness matrix (input parameter) - constitutive_phenopowerlaw_C33, & !< component 33 of the stiffness matrix (input parameter) - constitutive_phenopowerlaw_C44, & !< component 44 of the stiffness matrix (input parameter) constitutive_phenopowerlaw_gdot0_slip, & !< reference shear strain rate for slip (input parameter) constitutive_phenopowerlaw_gdot0_twin, & !< reference shear strain rate for twin (input parameter) constitutive_phenopowerlaw_n_slip, & !< stress exponent for slip (input parameter) @@ -127,7 +122,7 @@ subroutine constitutive_phenopowerlaw_init(myFile) use debug, only: debug_level,& debug_constitutive,& debug_levelBasic - use lattice, only: lattice_initializeStructure, lattice_symmetryType, & + use lattice, only: lattice_initializeStructure, lattice_symmetrizeC66, & lattice_maxNslipFamily, lattice_maxNtwinFamily, & lattice_maxNinteraction, lattice_NslipSystem, lattice_NtwinSystem, & lattice_interactionSlipSlip, & @@ -182,16 +177,6 @@ subroutine constitutive_phenopowerlaw_init(myFile) constitutive_phenopowerlaw_totalNtwin = 0_pInt allocate(constitutive_phenopowerlaw_CoverA(maxNinstance)) constitutive_phenopowerlaw_CoverA = 0.0_pReal - allocate(constitutive_phenopowerlaw_C11(maxNinstance)) - constitutive_phenopowerlaw_C11 = 0.0_pReal - allocate(constitutive_phenopowerlaw_C12(maxNinstance)) - constitutive_phenopowerlaw_C12 = 0.0_pReal - allocate(constitutive_phenopowerlaw_C13(maxNinstance)) - constitutive_phenopowerlaw_C13 = 0.0_pReal - allocate(constitutive_phenopowerlaw_C33(maxNinstance)) - constitutive_phenopowerlaw_C33 = 0.0_pReal - allocate(constitutive_phenopowerlaw_C44(maxNinstance)) - constitutive_phenopowerlaw_C44 = 0.0_pReal allocate(constitutive_phenopowerlaw_Cslip_66(6,6,maxNinstance)) constitutive_phenopowerlaw_Cslip_66 = 0.0_pReal allocate(constitutive_phenopowerlaw_gdot0_slip(maxNinstance)) @@ -274,15 +259,23 @@ subroutine constitutive_phenopowerlaw_init(myFile) case ('covera_ratio') constitutive_phenopowerlaw_CoverA(i) = IO_floatValue(line,positions,2_pInt) case ('c11') - constitutive_phenopowerlaw_C11(i) = IO_floatValue(line,positions,2_pInt) + constitutive_phenopowerlaw_Cslip_66(1,1,i) = IO_floatValue(line,positions,2_pInt) case ('c12') - constitutive_phenopowerlaw_C12(i) = IO_floatValue(line,positions,2_pInt) + constitutive_phenopowerlaw_Cslip_66(1,2,i) = IO_floatValue(line,positions,2_pInt) case ('c13') - constitutive_phenopowerlaw_C13(i) = IO_floatValue(line,positions,2_pInt) + constitutive_phenopowerlaw_Cslip_66(1,3,i) = IO_floatValue(line,positions,2_pInt) + case ('c22') + constitutive_phenopowerlaw_Cslip_66(2,2,i) = IO_floatValue(line,positions,2_pInt) + case ('c23') + constitutive_phenopowerlaw_Cslip_66(2,3,i) = IO_floatValue(line,positions,2_pInt) case ('c33') - constitutive_phenopowerlaw_C33(i) = IO_floatValue(line,positions,2_pInt) + constitutive_phenopowerlaw_Cslip_66(3,3,i) = IO_floatValue(line,positions,2_pInt) case ('c44') - constitutive_phenopowerlaw_C44(i) = IO_floatValue(line,positions,2_pInt) + constitutive_phenopowerlaw_Cslip_66(4,4,i) = IO_floatValue(line,positions,2_pInt) + case ('c55') + constitutive_phenopowerlaw_Cslip_66(5,5,i) = IO_floatValue(line,positions,2_pInt) + case ('c66') + constitutive_phenopowerlaw_Cslip_66(6,6,i) = IO_floatValue(line,positions,2_pInt) case ('nslip') forall (j = 1_pInt:lattice_maxNslipFamily)& constitutive_phenopowerlaw_Nslip(j,i) = IO_intValue(line,positions,1_pInt+j) @@ -448,29 +441,9 @@ subroutine constitutive_phenopowerlaw_init(myFile) myStructure = constitutive_phenopowerlaw_structure(i) - select case (lattice_symmetryType(myStructure)) ! assign elasticity tensor - case(1_pInt) ! cubic(s) - forall(k=1_pInt:3_pInt) - forall(j=1_pInt:3_pInt) & - constitutive_phenopowerlaw_Cslip_66(k,j,i) = constitutive_phenopowerlaw_C12(i) - constitutive_phenopowerlaw_Cslip_66(k,k,i) = constitutive_phenopowerlaw_C11(i) - constitutive_phenopowerlaw_Cslip_66(k+3_pInt,k+3_pInt,i) = constitutive_phenopowerlaw_C44(i) - end forall - case(2_pInt) ! hex - constitutive_phenopowerlaw_Cslip_66(1,1,i) = constitutive_phenopowerlaw_C11(i) - constitutive_phenopowerlaw_Cslip_66(2,2,i) = constitutive_phenopowerlaw_C11(i) - constitutive_phenopowerlaw_Cslip_66(3,3,i) = constitutive_phenopowerlaw_C33(i) - constitutive_phenopowerlaw_Cslip_66(1,2,i) = constitutive_phenopowerlaw_C12(i) - constitutive_phenopowerlaw_Cslip_66(2,1,i) = constitutive_phenopowerlaw_C12(i) - constitutive_phenopowerlaw_Cslip_66(1,3,i) = constitutive_phenopowerlaw_C13(i) - constitutive_phenopowerlaw_Cslip_66(3,1,i) = constitutive_phenopowerlaw_C13(i) - constitutive_phenopowerlaw_Cslip_66(2,3,i) = constitutive_phenopowerlaw_C13(i) - constitutive_phenopowerlaw_Cslip_66(3,2,i) = constitutive_phenopowerlaw_C13(i) - constitutive_phenopowerlaw_Cslip_66(4,4,i) = constitutive_phenopowerlaw_C44(i) - constitutive_phenopowerlaw_Cslip_66(5,5,i) = constitutive_phenopowerlaw_C44(i) - constitutive_phenopowerlaw_Cslip_66(6,6,i) = 0.5_pReal*(constitutive_phenopowerlaw_C11(i)- & - constitutive_phenopowerlaw_C12(i)) - end select + constitutive_phenopowerlaw_Cslip_66(:,:,i) = lattice_symmetrizeC66(constitutive_phenopowerlaw_structureName(i),& + constitutive_phenopowerlaw_Cslip_66) + ! assign elasticity tensor constitutive_phenopowerlaw_Cslip_66(:,:,i) = & math_Mandel3333to66(math_Voigt66to3333(constitutive_phenopowerlaw_Cslip_66(:,:,i))) diff --git a/code/constitutive_titanmod.f90 b/code/constitutive_titanmod.f90 index a87dfb032..83906f4fc 100644 --- a/code/constitutive_titanmod.f90 +++ b/code/constitutive_titanmod.f90 @@ -114,11 +114,6 @@ integer(pInt), dimension(:,:), allocatable :: & real(pReal), dimension(:), allocatable :: & constitutive_titanmod_CoverA, & ! c/a ratio for hex type lattice - constitutive_titanmod_C11, & ! C11 element in elasticity matrix - constitutive_titanmod_C12, & ! C12 element in elasticity matrix - constitutive_titanmod_C13, & ! C13 element in elasticity matrix - constitutive_titanmod_C33, & ! C33 element in elasticity matrix - constitutive_titanmod_C44, & ! C44 element in elasticity matrix constitutive_titanmod_debyefrequency, & !Debye frequency constitutive_titanmod_kinkf0, & !Debye frequency constitutive_titanmod_Gmod, & ! shear modulus @@ -298,16 +293,6 @@ allocate(constitutive_titanmod_totalNtwin(maxNinstance)) constitutive_titanmod_totalNtwin = 0_pInt allocate(constitutive_titanmod_CoverA(maxNinstance)) constitutive_titanmod_CoverA = 0.0_pReal -allocate(constitutive_titanmod_C11(maxNinstance)) - constitutive_titanmod_C11 = 0.0_pReal -allocate(constitutive_titanmod_C12(maxNinstance)) - constitutive_titanmod_C12 = 0.0_pReal -allocate(constitutive_titanmod_C13(maxNinstance)) - constitutive_titanmod_C13 = 0.0_pReal -allocate(constitutive_titanmod_C33(maxNinstance)) - constitutive_titanmod_C33 = 0.0_pReal -allocate(constitutive_titanmod_C44(maxNinstance)) - constitutive_titanmod_C44 = 0.0_pReal allocate(constitutive_titanmod_debyefrequency(maxNinstance)) constitutive_titanmod_debyefrequency = 0.0_pReal allocate(constitutive_titanmod_kinkf0(maxNinstance)) @@ -446,20 +431,32 @@ enddo constitutive_titanmod_CoverA(i) = IO_floatValue(line,positions,2_pInt) write(6,*) tag,constitutive_titanmod_CoverA(i) case ('c11') - constitutive_titanmod_C11(i) = IO_floatValue(line,positions,2_pInt) - write(6,*) tag,constitutive_titanmod_C11(i) + constitutive_titanmod_Cslip_66(1,1,i) = IO_floatValue(line,positions,2_pInt) + write(6,*) tag,constitutive_titanmod_Cslip_66(1,1,i) case ('c12') - constitutive_titanmod_C12(i) = IO_floatValue(line,positions,2_pInt) - write(6,*) tag,constitutive_titanmod_C12(i) + constitutive_titanmod_Cslip_66(1,2,i) = IO_floatValue(line,positions,2_pInt) + write(6,*) tag,constitutive_titanmod_Cslip_66(1,1,i) case ('c13') - constitutive_titanmod_C13(i) = IO_floatValue(line,positions,2_pInt) - write(6,*) tag,constitutive_titanmod_C13(i) + constitutive_titanmod_Cslip_66(1,3,i) = IO_floatValue(line,positions,2_pInt) + write(6,*) tag,constitutive_titanmod_Cslip_66(1,1,i) + case ('c22') + constitutive_titanmod_Cslip_66(2,2,i) = IO_floatValue(line,positions,2_pInt) + write(6,*) tag,constitutive_titanmod_Cslip_66(2,2,i) + case ('c23') + constitutive_titanmod_Cslip_66(2,3,i) = IO_floatValue(line,positions,2_pInt) + write(6,*) tag,constitutive_titanmod_Cslip_66(2,3,i) case ('c33') - constitutive_titanmod_C33(i) = IO_floatValue(line,positions,2_pInt) - write(6,*) tag,constitutive_titanmod_C33(i) + constitutive_titanmod_Cslip_66(3,3,i) = IO_floatValue(line,positions,2_pInt) + write(6,*) tag,constitutive_titanmod_Cslip_66(3,3,i) case ('c44') - constitutive_titanmod_C44(i) = IO_floatValue(line,positions,2_pInt) - write(6,*) tag,constitutive_titanmod_C44(i) + constitutive_titanmod_Cslip_66(4,4,i) = IO_floatValue(line,positions,2_pInt) + write(6,*) tag,constitutive_titanmod_Cslip_66(4,4,i) + case ('c55') + constitutive_titanmod_Cslip_66(5,5,i) = IO_floatValue(line,positions,2_pInt) + write(6,*) tag,constitutive_titanmod_Cslip_66(5,5,i) + case ('c66') + constitutive_titanmod_Cslip_66(1,3,i) = IO_floatValue(line,positions,2_pInt) + write(6,*) tag,constitutive_titanmod_Cslip_66(6,6,i) case ('debyefrequency') constitutive_titanmod_debyefrequency(i) = IO_floatValue(line,positions,2_pInt) write(6,*) tag,constitutive_titanmod_debyefrequency(i) @@ -870,32 +867,12 @@ do i = 1_pInt,maxNinstance write(6,*) 'Determining elasticity matrix' !* Elasticity matrix and shear modulus according to material.config - select case (myStructure) - case(1_pInt:2_pInt) ! cubic(s) - forall(k=1_pInt:3_pInt) - forall(j=1_pInt:3_pInt) & - constitutive_titanmod_Cslip_66(k,j,i) = constitutive_titanmod_C12(i) - constitutive_titanmod_Cslip_66(k,k,i) = constitutive_titanmod_C11(i) - constitutive_titanmod_Cslip_66(k+3_pInt,k+3_pInt,i) = constitutive_titanmod_C44(i) - end forall - case(3_pInt:) ! all hex - constitutive_titanmod_Cslip_66(1,1,i) = constitutive_titanmod_C11(i) - constitutive_titanmod_Cslip_66(2,2,i) = constitutive_titanmod_C11(i) - constitutive_titanmod_Cslip_66(3,3,i) = constitutive_titanmod_C33(i) - constitutive_titanmod_Cslip_66(1,2,i) = constitutive_titanmod_C12(i) - constitutive_titanmod_Cslip_66(2,1,i) = constitutive_titanmod_C12(i) - constitutive_titanmod_Cslip_66(1,3,i) = constitutive_titanmod_C13(i) - constitutive_titanmod_Cslip_66(3,1,i) = constitutive_titanmod_C13(i) - constitutive_titanmod_Cslip_66(2,3,i) = constitutive_titanmod_C13(i) - constitutive_titanmod_Cslip_66(3,2,i) = constitutive_titanmod_C13(i) - constitutive_titanmod_Cslip_66(4,4,i) = constitutive_titanmod_C44(i) - constitutive_titanmod_Cslip_66(5,5,i) = constitutive_titanmod_C44(i) - constitutive_titanmod_Cslip_66(6,6,i) = 0.5_pReal*(constitutive_titanmod_C11(i)-constitutive_titanmod_C12(i)) - end select + constitutive_titanmod_Cslip_66(:,:,i) = lattice_symmetrizeC66(constitutive_titanmod_structureName(i),& + constitutive_titanmod_Cslip_66) + constitutive_titanmod_Gmod(i) = & + 0.2_pReal*(constitutive_titanmod_Cslip_66(1,1,i)-constitutive_titanmod_Cslip_66(1,2,i))+0.3_pReal*constitutive_titanmod_Cslip_66(4,4,i) constitutive_titanmod_Cslip_66(:,:,i) = math_Mandel3333to66(math_Voigt66to3333(constitutive_titanmod_Cslip_66(:,:,i))) constitutive_titanmod_Cslip_3333(:,:,:,:,i) = math_Voigt66to3333(constitutive_titanmod_Cslip_66(:,:,i)) - constitutive_titanmod_Gmod(i) = & - 0.2_pReal*(constitutive_titanmod_C11(i)-constitutive_titanmod_C12(i))+0.3_pReal*constitutive_titanmod_C44(i) !* Construction of the twin elasticity matrices do j=1_pInt,lattice_maxNtwinFamily diff --git a/code/crystallite.f90 b/code/crystallite.f90 index 930e52c27..0598a27f7 100644 --- a/code/crystallite.f90 +++ b/code/crystallite.f90 @@ -139,13 +139,13 @@ subroutine crystallite_init(Temperature) use constitutive, only: constitutive_microstructure use constitutive_phenopowerlaw, only: constitutive_phenopowerlaw_label, & - constitutive_phenopowerlaw_structure + constitutive_phenopowerlaw_structureName use constitutive_titanmod, only: constitutive_titanmod_label, & - constitutive_titanmod_structure + constitutive_titanmod_structureName use constitutive_dislotwin, only: constitutive_dislotwin_label, & - constitutive_dislotwin_structure + constitutive_dislotwin_structureName use constitutive_nonlocal, only: constitutive_nonlocal_label, & - constitutive_nonlocal_structure + constitutive_nonlocal_structureName implicit none integer(pInt), parameter :: myFile = 200_pInt, & @@ -169,7 +169,6 @@ subroutine crystallite_init(Temperature) p, & output, & mySize, & - myStructure, & ! lattice structure myPhase, & myMat character(len=64) tag @@ -351,19 +350,16 @@ do e = FEsolving_execElem(1),FEsolving_execElem(2) myMat = phase_plasticityInstance(myPhase) select case (phase_plasticity(myPhase)) case (constitutive_phenopowerlaw_label) - myStructure = constitutive_phenopowerlaw_structure(myMat) + crystallite_symmetryID(g,i,e) = lattice_symmetryType(constitutive_phenopowerlaw_structureName(myMat)) case (constitutive_titanmod_label) - myStructure = constitutive_titanmod_structure(myMat) + crystallite_symmetryID(g,i,e) = lattice_symmetryType(constitutive_titanmod_structureName(myMat)) case (constitutive_dislotwin_label) - myStructure = constitutive_dislotwin_structure(myMat) + crystallite_symmetryID(g,i,e) = lattice_symmetryType(constitutive_dislotwin_structureName(myMat)) case (constitutive_nonlocal_label) - myStructure = constitutive_nonlocal_structure(myMat) + crystallite_symmetryID(g,i,e) = lattice_symmetryType(constitutive_nonlocal_structureName(myMat)) case default - myStructure = -1_pInt ! does this happen for j2 material? + crystallite_symmetryID(g,i,e) = 0_pInt ! does this happen for j2 material? end select - if (myStructure > 0_pInt) then - crystallite_symmetryID(g,i,e) = lattice_symmetryType(myStructure) ! structure = 1(fcc) or 2(bcc) => 1; 3(hex)=>2 - endif enddo enddo enddo diff --git a/code/lattice.f90 b/code/lattice.f90 index 9fde22baa..6d9bb1bf9 100644 --- a/code/lattice.f90 +++ b/code/lattice.f90 @@ -681,7 +681,8 @@ module lattice public :: & lattice_init, & lattice_initializeStructure, & - lattice_symmetryType + lattice_symmetryType, & + lattice_symmetrizeC66 contains @@ -690,15 +691,15 @@ contains !> @brief Maps structure to symmetry type !> @details fcc(1) and bcc(2) are cubic(1) hex(3+) is hexagonal(2) !-------------------------------------------------------------------------------------------------- -integer(pInt) pure function lattice_symmetryType(structID) +integer(pInt) pure function lattice_symmetryType(structName) implicit none - integer(pInt), intent(in) :: structID + character(len=32), intent(in) :: structName - select case(structID) - case (1_pInt,2_pInt) + select case(structName(1:3)) + case ('fcc','bcc') lattice_symmetryType = 1_pInt - case (3_pInt:) + case ('hex') lattice_symmetryType = 2_pInt case default lattice_symmetryType = 0_pInt @@ -709,6 +710,70 @@ integer(pInt) pure function lattice_symmetryType(structID) end function lattice_symmetryType +!-------------------------------------------------------------------------------------------------- +!> @brief Symmetrizes stiffness matrix according to lattice type +!-------------------------------------------------------------------------------------------------- +pure function lattice_symmetrizeC66(structName,C66) + + implicit none + + character(len=32), intent(in) :: structName + real(pReal), dimension(6,6), intent(in) :: C66 + real(pReal), dimension(6,6) :: lattice_symmetrizeC66 + integer(pInt) :: j,k + + lattice_symmetrizeC66 = 0.0_pReal + + select case(structName(1:3)) + case ('iso') + forall(k=1_pInt:3_pInt) + forall(j=1_pInt:3_pInt) + lattice_symmetrizeC66(k,j) = C66(1,2) + end forall + lattice_symmetrizeC66(k,k) = C66(1,1) + lattice_symmetrizeC66(k+3,k+3) = 0.5_pReal*(C66(1,1)-C66(1,2)) + end forall + case ('fcc','bcc') + forall(k=1_pInt:3_pInt) + forall(j=1_pInt:3_pInt) + lattice_symmetrizeC66(k,j) = C66(1,2) + lattice_symmetrizeC66(k,k) = C66(1,1) + lattice_symmetrizeC66(k+3_pInt,k+3_pInt) = C66(4,4) + end forall + end forall + case ('hex') + lattice_symmetrizeC66(1,1) = C66(1,1) + lattice_symmetrizeC66(2,2) = C66(1,1) + lattice_symmetrizeC66(3,3) = C66(3,3) + lattice_symmetrizeC66(1,2) = C66(1,2) + lattice_symmetrizeC66(2,1) = C66(1,2) + lattice_symmetrizeC66(1,3) = C66(1,3) + lattice_symmetrizeC66(3,1) = C66(1,3) + lattice_symmetrizeC66(2,3) = C66(1,3) + lattice_symmetrizeC66(3,2) = C66(1,3) + lattice_symmetrizeC66(4,4) = C66(4,4) + lattice_symmetrizeC66(5,5) = C66(4,4) + lattice_symmetrizeC66(6,6) = 0.5_pReal*(C66(1,1)-C66(1,2)) + case ('ort') + lattice_symmetrizeC66(1,1) = C66(1,1) + lattice_symmetrizeC66(2,2) = C66(2,2) + lattice_symmetrizeC66(3,3) = C66(3,3) + lattice_symmetrizeC66(1,2) = C66(1,2) + lattice_symmetrizeC66(2,1) = C66(1,2) + lattice_symmetrizeC66(1,3) = C66(1,3) + lattice_symmetrizeC66(3,1) = C66(1,3) + lattice_symmetrizeC66(2,3) = C66(2,3) + lattice_symmetrizeC66(3,2) = C66(2,3) + lattice_symmetrizeC66(4,4) = C66(4,4) + lattice_symmetrizeC66(5,5) = C66(5,5) + lattice_symmetrizeC66(6,6) = C66(6,6) + end select + + return + + end function lattice_symmetrizeC66 + + !-------------------------------------------------------------------------------------------------- !> @brief Module initialization !--------------------------------------------------------------------------------------------------