diff --git a/src/material.f90 b/src/material.f90 index 652cc30fb..4bf994987 100644 --- a/src/material.f90 +++ b/src/material.f90 @@ -26,6 +26,7 @@ module material type(tRotationContainer), dimension(:), allocatable :: material_O_0 + type(tTensorContainer), dimension(:), allocatable :: material_F_i_0 integer, dimension(:), allocatable, public, protected :: & homogenization_Nconstituents !< number of grains in each homogenization @@ -48,6 +49,7 @@ module material public :: & tTensorContainer, & tRotationContainer, & + material_F_i_0, & material_O_0, & material_init @@ -159,14 +161,17 @@ subroutine parse() enddo allocate(material_O_0(materials%length)) + allocate(material_F_i_0(materials%length)) do ma = 1, materials%length material => materials%get(ma) constituents => material%get('constituents') allocate(material_O_0(ma)%data(constituents%length)) + allocate(material_F_i_0(ma)%data(1:3,1:3,constituents%length)) do co = 1, constituents%length constituent => constituents%get(co) call material_O_0(ma)%data(co)%fromQuaternion(constituent%get_as1dFloat('O',requiredSize=4)) + material_F_i_0(ma)%data(1:3,1:3,co) = constituent%get_as2dFloat('F_i',defaultVal=math_I3) ! requiredShape=(3,3) enddo enddo diff --git a/src/phase_mechanical.f90 b/src/phase_mechanical.f90 index 006133258..c05d6210e 100644 --- a/src/phase_mechanical.f90 +++ b/src/phase_mechanical.f90 @@ -206,6 +206,9 @@ module subroutine mechanical_init(materials,phases) phases integer :: & + ce, & + co, & + ma, & ph, & en, & Nmembers @@ -262,15 +265,21 @@ module subroutine mechanical_init(materials,phases) #endif enddo + do ce = 1, size(material_phaseID,2) + ma = discretization_materialAt((ce-1)/discretization_nIPs+1) + do co = 1,homogenization_Nconstituents(material_homogenizationID(ce)) + ph = material_phaseID(co,ce) + phase_mechanical_Fi0(ph)%data(1:3,1:3,material_phaseEntry(co,ce)) = material_F_i_0(ma)%data(1:3,1:3,co) + enddo + enddo + do ph = 1, phases%length do en = 1, count(material_phaseID == ph) phase_mechanical_Fp0(ph)%data(1:3,1:3,en) = phase_O_0(ph)%data(en)%asMatrix() ! Fp reflects initial orientation (see 10.1016/j.actamat.2006.01.005) phase_mechanical_Fp0(ph)%data(1:3,1:3,en) = phase_mechanical_Fp0(ph)%data(1:3,1:3,en) & / math_det33(phase_mechanical_Fp0(ph)%data(1:3,1:3,en))**(1.0_pReal/3.0_pReal) - phase_mechanical_Fi0(ph)%data(1:3,1:3,en) = math_I3 - phase_mechanical_F0(ph)%data(1:3,1:3,en) = math_I3 - + phase_mechanical_F0(ph)%data(1:3,1:3,en) = math_I3 phase_mechanical_Fe(ph)%data(1:3,1:3,en) = math_inv33(matmul(phase_mechanical_Fi0(ph)%data(1:3,1:3,en), & phase_mechanical_Fp0(ph)%data(1:3,1:3,en))) ! assuming that euler angles are given in internal strain free configuration enddo