diff --git a/code/config/material.config b/code/config/material.config index c188af493..6157d1f32 100644 --- a/code/config/material.config +++ b/code/config/material.config @@ -427,7 +427,7 @@ pexponent 1.0 # p-exponent in glide velocity qexponent 1.0 # q-exponent in glide velocity Catomicvolume 1.0 # Adj. parameter controlling the atomic volume [in b] Cedgedipmindistance 1.0 # Adj. parameter controlling the minimum dipole distance [in b] -atol_rho 1.0e-200 +atol_rho 1.0 interactionSlipSlip 0.122 0.122 0.625 0.07 0.137 0.122 # Interaction coefficients (Kubin et al. 2008) ### Shearband parameters ### @@ -447,6 +447,7 @@ Cmfptwin 1.0 # Adj. parameter controlling twin mean free Cthresholdtwin 1.0 # Adj. parameter controlling twin threshold stress interactionSlipTwin 0.0 1.0 # Dislocation-Twin interaction coefficients interactionTwinTwin 0.0 1.0 # Twin-Twin interaction coefficients +atol_twinFrac 1.0e-7 SFE_0K -0.0396 # stacking fault energy at zero K; TWIP steel: -0.0526; Cu: -0.0396 dSFE_dT 0.0002 # temperature dependance of stacking fault energy diff --git a/code/constitutive_dislotwin.f90 b/code/constitutive_dislotwin.f90 index cd2778412..a2715fd60 100644 --- a/code/constitutive_dislotwin.f90 +++ b/code/constitutive_dislotwin.f90 @@ -76,7 +76,8 @@ real(pReal), dimension(:), allocatable :: constitutive_dislotwin constitutive_dislotwin_sbQedge, & ! FIXED (for now) value for shearband systems Qedge constitutive_dislotwin_SFE_0K, & ! stacking fault energy at zero K constitutive_dislotwin_dSFE_dT, & ! temperature dependance of stacking fault energy - constitutive_dislotwin_aTolRho ! absolute tolerance for integration of dislocation density + constitutive_dislotwin_aTolRho, & ! absolute tolerance for integration of dislocation density + constitutive_dislotwin_aTolTwinFrac ! absolute tolerance for integration of twin volume fraction real(pReal), dimension(:,:,:), allocatable :: constitutive_dislotwin_Cslip_66 ! elasticity matrix in Mandel notation for each instance real(pReal), dimension(:,:,:,:), allocatable :: constitutive_dislotwin_Ctwin_66 ! twin elasticity matrix in Mandel notation for each instance real(pReal), dimension(:,:,:,:,:), allocatable :: constitutive_dislotwin_Cslip_3333 ! elasticity matrix for each instance @@ -211,6 +212,8 @@ allocate(constitutive_dislotwin_L0(maxNinstance)) constitutive_dislotwin_L0 = 0.0_pReal allocate(constitutive_dislotwin_aTolRho(maxNinstance)) constitutive_dislotwin_aTolRho = 0.0_pReal +allocate(constitutive_dislotwin_aTolTwinFrac(maxNinstance)) + constitutive_dislotwin_aTolTwinFrac = 0.0_pReal allocate(constitutive_dislotwin_Cslip_66(6,6,maxNinstance)) constitutive_dislotwin_Cslip_66 = 0.0_pReal allocate(constitutive_dislotwin_Cslip_3333(3,3,3,3,maxNinstance)) @@ -363,6 +366,8 @@ do ! read thru sections of constitutive_dislotwin_Qsd(i) = IO_floatValue(line,positions,2_pInt) case ('atol_rho') constitutive_dislotwin_aTolRho(i) = IO_floatValue(line,positions,2_pInt) + case ('atol_twinfrac') + constitutive_dislotwin_aTolTwinFrac(i) = IO_floatValue(line,positions,2_pInt) case ('cmfptwin') constitutive_dislotwin_Cmfptwin(i) = IO_floatValue(line,positions,2_pInt) case ('cthresholdtwin') @@ -444,15 +449,17 @@ enddo //constitutive_dislotwin_label//')') if (constitutive_dislotwin_Qsd(i) <= 0.0_pReal) call IO_error(211_pInt,e=i,ext_msg='Qsd (' & //constitutive_dislotwin_label//')') - if (constitutive_dislotwin_aTolRho(i) <= 0.0_pReal) call IO_error(211_pInt,e=i,ext_msg='aTolRho (' & + if (constitutive_dislotwin_SFE_0K(i) == 0.0_pReal .and. & + constitutive_dislotwin_dSFE_dT(i) == 0.0_pReal) call IO_error(211_pInt,e=i,ext_msg='SFE (' & //constitutive_dislotwin_label//')') - if (constitutive_dislotwin_sbResistance(i) <= 0.0_pReal) call IO_error(211_pInt,e=i,ext_msg='sbResistance (' & + if (constitutive_dislotwin_aTolRho(i) <= 0.0_pReal) call IO_error(211_pInt,e=i,ext_msg='aTolRho (' & + //constitutive_dislotwin_label//')') + if (constitutive_dislotwin_aTolTwinFrac(i) <= 0.0_pReal) call IO_error(211_pInt,e=i,ext_msg='aTolTwinFrac (' & + //constitutive_dislotwin_label//')') + if (constitutive_dislotwin_sbResistance(i) < 0.0_pReal) call IO_error(211_pInt,e=i,ext_msg='sbResistance (' & //constitutive_dislotwin_label//')') if (constitutive_dislotwin_sbVelocity(i) < 0.0_pReal) call IO_error(211_pInt,e=i,ext_msg='sbVelocity (' & //constitutive_dislotwin_label//')') - if (constitutive_dislotwin_SFE_0K(i) == 0.0_pReal .AND. & - constitutive_dislotwin_dSFE_dT(i) == 0.0_pReal) call IO_error(211_pInt,e=i,ext_msg='SFE (' & - //constitutive_dislotwin_label//')') !* Determine total number of active slip or twin systems constitutive_dislotwin_Nslip(:,i) = min(lattice_NslipSystem(:,myStructure),constitutive_dislotwin_Nslip(:,i)) @@ -750,18 +757,22 @@ constitutive_dislotwin_stateInit(6_pInt*ns+4_pInt*nt+1_pInt:6_pInt*ns+5_pInt*nt) end function +!-------------------------------------------------------------------------------------------------- +!> @brief absolute state tolerance +!-------------------------------------------------------------------------------------------------- pure function constitutive_dislotwin_aTolState(myInstance) -!********************************************************************* -!* absolute state tolerance * -!********************************************************************* -use prec, only: pReal, pInt -implicit none + implicit none + integer(pInt), intent(in) :: myInstance ! number specifying the current instance of the plasticity + real(pReal), dimension(constitutive_dislotwin_sizeState(myInstance)) :: & + constitutive_dislotwin_aTolState ! relevant state values for the current instance of this plasticity -!* Input-Output variables -integer(pInt), intent(in) :: myInstance -real(pReal), dimension(constitutive_dislotwin_sizeState(myInstance)) :: constitutive_dislotwin_aTolState -constitutive_dislotwin_aTolState = constitutive_dislotwin_aTolRho(myInstance) + constitutive_dislotwin_aTolState(1:2*constitutive_dislotwin_totalNslip(myInstance)) = & + constitutive_dislotwin_aTolRho(myInstance) + constitutive_dislotwin_aTolState(2*constitutive_dislotwin_totalNslip(myInstance)+1: & + 2*constitutive_dislotwin_totalNslip(myInstance)+& + constitutive_dislotwin_totalNtwin(myInstance)) = & + constitutive_dislotwin_aTolTwinFrac(myInstance) end function constitutive_dislotwin_aTolState @@ -1052,7 +1063,8 @@ do f = 1_pInt,lattice_maxNslipFamily ! loop over enddo !* Shear banding (shearband) part -if(constitutive_dislotwin_sbVelocity(myInstance) /= 0.0_pReal) then +if(constitutive_dislotwin_sbVelocity(myInstance) /= 0.0_pReal .or. & + constitutive_dislotwin_sbResistance(myInstance) /= 0.0_pReal) then gdot_sb = 0.0_pReal dgdot_dtausb = 0.0_pReal call math_spectralDecompositionSym33(math_Mandel6to33(Tstar_v),eigValues,eigVectors, error)