diff --git a/code/Makefile b/code/Makefile index 13eecede9..9aad0ad8d 100644 --- a/code/Makefile +++ b/code/Makefile @@ -317,8 +317,8 @@ VACANCY_FILES = \ vacancy_constant.o vacancy_generation.o CONSTITUTIVE_FILES = \ - constitutive_dislotwin.o constitutive_dislokmc.o constitutive_j2.o constitutive_phenopowerlaw.o \ - constitutive_titanmod.o constitutive_nonlocal.o constitutive_none.o constitutive.o + plastic_dislotwin.o plastic_dislokmc.o plastic_j2.o plastic_phenopowerlaw.o \ + plastic_titanmod.o plastic_nonlocal.o plastic_none.o constitutive.o HOMOGENIZATION_FILES = \ homogenization_RGC.o homogenization_isostrain.o homogenization_none.o homogenization.o @@ -431,36 +431,36 @@ crystallite.o: crystallite.f90 \ constitutive.o constitutive.o: constitutive.f90 \ - constitutive_nonlocal.o \ - constitutive_titanmod.o \ - constitutive_dislotwin.o \ - constitutive_dislokmc.o \ - constitutive_phenopowerlaw.o \ - constitutive_j2.o \ - constitutive_none.o \ + plastic_nonlocal.o \ + plastic_titanmod.o \ + plastic_dislotwin.o \ + plastic_dislokmc.o \ + plastic_phenopowerlaw.o \ + plastic_j2.o \ + plastic_none.o \ $(DAMAGE_FILES) \ $(THERMAL_FILES) \ $(VACANCY_FILES) -constitutive_nonlocal.o: constitutive_nonlocal.f90 \ +plastic_nonlocal.o: plastic_nonlocal.f90 \ lattice.o -constitutive_titanmod.o: constitutive_titanmod.f90 \ +plastic_titanmod.o: plastic_titanmod.f90 \ lattice.o -constitutive_dislokmc.o: constitutive_dislokmc.f90 \ +plastic_dislokmc.o: plastic_dislokmc.f90 \ lattice.o -constitutive_dislotwin.o: constitutive_dislotwin.f90 \ +plastic_dislotwin.o: plastic_dislotwin.f90 \ lattice.o -constitutive_phenopowerlaw.o: constitutive_phenopowerlaw.f90 \ +plastic_phenopowerlaw.o: plastic_phenopowerlaw.f90 \ lattice.o -constitutive_j2.o: constitutive_j2.f90 \ +plastic_j2.o: plastic_j2.f90 \ lattice.o -constitutive_none.o: constitutive_none.f90 \ +plastic_none.o: plastic_none.f90 \ lattice.o damage_none.o: damage_none.f90 \ diff --git a/code/commercialFEM_fileList.f90 b/code/commercialFEM_fileList.f90 index 1e7e7868b..c53de713b 100644 --- a/code/commercialFEM_fileList.f90 +++ b/code/commercialFEM_fileList.f90 @@ -25,13 +25,13 @@ #include "thermal_adiabatic.f90" #include "vacancy_constant.f90" #include "vacancy_generation.f90" -#include "constitutive_none.f90" -#include "constitutive_j2.f90" -#include "constitutive_phenopowerlaw.f90" -#include "constitutive_titanmod.f90" -#include "constitutive_dislotwin.f90" -#include "constitutive_dislokmc.f90" -#include "constitutive_nonlocal.f90" +#include "plastic_none.f90" +#include "plastic_j2.f90" +#include "plastic_phenopowerlaw.f90" +#include "plastic_titanmod.f90" +#include "plastic_dislotwin.f90" +#include "plastic_dislokmc.f90" +#include "plastic_nonlocal.f90" #include "constitutive.f90" #include "crystallite.f90" #include "homogenization_none.f90" diff --git a/code/constitutive.f90 b/code/constitutive.f90 index 5ab7f7ee0..e292b09c5 100644 --- a/code/constitutive.f90 +++ b/code/constitutive.f90 @@ -156,13 +156,13 @@ subroutine constitutive_init(temperature_init) mappingConstitutive - use constitutive_none - use constitutive_j2 - use constitutive_phenopowerlaw - use constitutive_dislotwin - use constitutive_dislokmc - use constitutive_titanmod - use constitutive_nonlocal + use plastic_none + use plastic_j2 + use plastic_phenopowerlaw + use plastic_dislotwin + use plastic_dislokmc + use plastic_titanmod + use plastic_nonlocal use damage_none use damage_isoBrittle use damage_isoDuctile @@ -194,15 +194,15 @@ subroutine constitutive_init(temperature_init) ! parse plasticities from config file 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 - if (any(phase_plasticity == PLASTICITY_NONE_ID)) call constitutive_none_init - if (any(phase_plasticity == PLASTICITY_J2_ID)) call constitutive_j2_init(FILEUNIT) - if (any(phase_plasticity == PLASTICITY_PHENOPOWERLAW_ID)) call constitutive_phenopowerlaw_init(FILEUNIT) - if (any(phase_plasticity == PLASTICITY_DISLOTWIN_ID)) call constitutive_dislotwin_init(FILEUNIT) - if (any(phase_plasticity == PLASTICITY_DISLOKMC_ID)) call constitutive_dislokmc_init(FILEUNIT) - if (any(phase_plasticity == PLASTICITY_TITANMOD_ID)) call constitutive_titanmod_init(FILEUNIT) + if (any(phase_plasticity == PLASTICITY_NONE_ID)) call plastic_none_init + if (any(phase_plasticity == PLASTICITY_J2_ID)) call plastic_j2_init(FILEUNIT) + if (any(phase_plasticity == PLASTICITY_PHENOPOWERLAW_ID)) call plastic_phenopowerlaw_init(FILEUNIT) + if (any(phase_plasticity == PLASTICITY_DISLOTWIN_ID)) call plastic_dislotwin_init(FILEUNIT) + if (any(phase_plasticity == PLASTICITY_DISLOKMC_ID)) call plastic_dislokmc_init(FILEUNIT) + if (any(phase_plasticity == PLASTICITY_TITANMOD_ID)) call plastic_titanmod_init(FILEUNIT) if (any(phase_plasticity == PLASTICITY_NONLOCAL_ID)) then - call constitutive_nonlocal_init(FILEUNIT) - call constitutive_nonlocal_stateInit() + call plastic_nonlocal_init(FILEUNIT) + call plastic_nonlocal_stateInit() endif close(FILEUNIT) @@ -252,38 +252,38 @@ subroutine constitutive_init(temperature_init) case (PLASTICITY_NONE_ID) outputName = PLASTICITY_NONE_label thisNoutput => null() - thisOutput => null() ! constitutive_none_output - thisSize => null() ! constitutive_none_sizePostResult + thisOutput => null() ! plastic_none_output + thisSize => null() ! plastic_none_sizePostResult case (PLASTICITY_J2_ID) outputName = PLASTICITY_J2_label - thisNoutput => constitutive_j2_Noutput - thisOutput => constitutive_j2_output - thisSize => constitutive_j2_sizePostResult + thisNoutput => plastic_j2_Noutput + thisOutput => plastic_j2_output + thisSize => plastic_j2_sizePostResult case (PLASTICITY_PHENOPOWERLAW_ID) outputName = PLASTICITY_PHENOPOWERLAW_label - thisNoutput => constitutive_phenopowerlaw_Noutput - thisOutput => constitutive_phenopowerlaw_output - thisSize => constitutive_phenopowerlaw_sizePostResult + thisNoutput => plastic_phenopowerlaw_Noutput + thisOutput => plastic_phenopowerlaw_output + thisSize => plastic_phenopowerlaw_sizePostResult case (PLASTICITY_DISLOTWIN_ID) outputName = PLASTICITY_DISLOTWIN_label - thisNoutput => constitutive_dislotwin_Noutput - thisOutput => constitutive_dislotwin_output - thisSize => constitutive_dislotwin_sizePostResult + thisNoutput => plastic_dislotwin_Noutput + thisOutput => plastic_dislotwin_output + thisSize => plastic_dislotwin_sizePostResult case (PLASTICITY_DISLOKMC_ID) outputName = PLASTICITY_DISLOKMC_label - thisNoutput => constitutive_dislokmc_Noutput - thisOutput => constitutive_dislokmc_output - thisSize => constitutive_dislokmc_sizePostResult + thisNoutput => plastic_dislokmc_Noutput + thisOutput => plastic_dislokmc_output + thisSize => plastic_dislokmc_sizePostResult case (PLASTICITY_TITANMOD_ID) outputName = PLASTICITY_TITANMOD_label - thisNoutput => constitutive_titanmod_Noutput - thisOutput => constitutive_titanmod_output - thisSize => constitutive_titanmod_sizePostResult + thisNoutput => plastic_titanmod_Noutput + thisOutput => plastic_titanmod_output + thisSize => plastic_titanmod_sizePostResult case (PLASTICITY_NONLOCAL_ID) outputName = PLASTICITY_NONLOCAL_label - thisNoutput => constitutive_nonlocal_Noutput - thisOutput => constitutive_nonlocal_output - thisSize => constitutive_nonlocal_sizePostResult + thisNoutput => plastic_nonlocal_Noutput + thisOutput => plastic_nonlocal_output + thisSize => plastic_nonlocal_sizePostResult case default knownPlasticity = .false. end select @@ -480,12 +480,12 @@ function constitutive_homogenizedC(ipc,ip,el) plasticState,& mappingConstitutive - use constitutive_titanmod, only: & - constitutive_titanmod_homogenizedC - use constitutive_dislotwin, only: & - constitutive_dislotwin_homogenizedC - use constitutive_dislokmc, only: & - constitutive_dislokmc_homogenizedC + use plastic_titanmod, only: & + plastic_titanmod_homogenizedC + use plastic_dislotwin, only: & + plastic_dislotwin_homogenizedC + use plastic_dislokmc, only: & + plastic_dislokmc_homogenizedC use lattice, only: & lattice_C66 @@ -499,11 +499,11 @@ function constitutive_homogenizedC(ipc,ip,el) select case (phase_plasticity(material_phase(ipc,ip,el))) case (PLASTICITY_DISLOTWIN_ID) - constitutive_homogenizedC = constitutive_dislotwin_homogenizedC(ipc,ip,el) + constitutive_homogenizedC = plastic_dislotwin_homogenizedC(ipc,ip,el) case (PLASTICITY_DISLOKMC_ID) - constitutive_homogenizedC = constitutive_dislokmc_homogenizedC(ipc,ip,el) + constitutive_homogenizedC = plastic_dislokmc_homogenizedC(ipc,ip,el) case (PLASTICITY_TITANMOD_ID) - constitutive_homogenizedC = constitutive_titanmod_homogenizedC (ipc,ip,el) + constitutive_homogenizedC = plastic_titanmod_homogenizedC (ipc,ip,el) case default constitutive_homogenizedC = lattice_C66(1:6,1:6,material_phase (ipc,ip,el)) @@ -569,14 +569,14 @@ subroutine constitutive_microstructure(Tstar_v, Fe, Fp, subdt, ipc, ip, el) LOCAL_DAMAGE_gurson_ID, & LOCAL_DAMAGE_phaseField_ID - use constitutive_titanmod, only: & - constitutive_titanmod_microstructure - use constitutive_nonlocal, only: & - constitutive_nonlocal_microstructure - use constitutive_dislotwin, only: & - constitutive_dislotwin_microstructure - use constitutive_dislokmc, only: & - constitutive_dislokmc_microstructure + use plastic_titanmod, only: & + plastic_titanmod_microstructure + use plastic_nonlocal, only: & + plastic_nonlocal_microstructure + use plastic_dislotwin, only: & + plastic_dislotwin_microstructure + use plastic_dislokmc, only: & + plastic_dislokmc_microstructure use damage_isoBrittle, only: & damage_isoBrittle_microstructure use damage_isoDuctile, only: & @@ -610,13 +610,13 @@ subroutine constitutive_microstructure(Tstar_v, Fe, Fp, subdt, ipc, ip, el) select case (phase_plasticity(material_phase(ipc,ip,el))) case (PLASTICITY_DISLOTWIN_ID) - call constitutive_dislotwin_microstructure(constitutive_getTemperature(ipc,ip,el),ipc,ip,el) + call plastic_dislotwin_microstructure(constitutive_getTemperature(ipc,ip,el),ipc,ip,el) case (PLASTICITY_DISLOKMC_ID) - call constitutive_dislokmc_microstructure(constitutive_getTemperature(ipc,ip,el),ipc,ip,el) + call plastic_dislokmc_microstructure(constitutive_getTemperature(ipc,ip,el),ipc,ip,el) case (PLASTICITY_TITANMOD_ID) - call constitutive_titanmod_microstructure (constitutive_getTemperature(ipc,ip,el),ipc,ip,el) + call plastic_titanmod_microstructure (constitutive_getTemperature(ipc,ip,el),ipc,ip,el) case (PLASTICITY_NONLOCAL_ID) - call constitutive_nonlocal_microstructure (Fe,Fp, ip,el) + call plastic_nonlocal_microstructure (Fe,Fp, ip,el) end select @@ -665,22 +665,22 @@ subroutine constitutive_LpAndItsTangent(Lp, dLp_dTstar, Tstar_v, ipc, ip, el) PLASTICITY_DISLOKMC_ID, & PLASTICITY_TITANMOD_ID, & PLASTICITY_NONLOCAL_ID - use constitutive_j2, only: & - constitutive_j2_LpAndItsTangent - use constitutive_phenopowerlaw, only: & - constitutive_phenopowerlaw_LpAndItsTangent, & - constitutive_phenopowerlaw_totalNslip - use constitutive_dislotwin, only: & - constitutive_dislotwin_LpAndItsTangent, & - constitutive_dislotwin_totalNslip - use constitutive_dislokmc, only: & - constitutive_dislokmc_LpAndItsTangent, & - constitutive_dislokmc_totalNslip - use constitutive_titanmod, only: & - constitutive_titanmod_LpAndItsTangent, & - constitutive_titanmod_totalNslip - use constitutive_nonlocal, only: & - constitutive_nonlocal_LpAndItsTangent, & + use plastic_j2, only: & + plastic_j2_LpAndItsTangent + use plastic_phenopowerlaw, only: & + plastic_phenopowerlaw_LpAndItsTangent, & + plastic_phenopowerlaw_totalNslip + use plastic_dislotwin, only: & + plastic_dislotwin_LpAndItsTangent, & + plastic_dislotwin_totalNslip + use plastic_dislokmc, only: & + plastic_dislokmc_LpAndItsTangent, & + plastic_dislokmc_totalNslip + use plastic_titanmod, only: & + plastic_titanmod_LpAndItsTangent, & + plastic_titanmod_totalNslip + use plastic_nonlocal, only: & + plastic_nonlocal_LpAndItsTangent, & totalNslip implicit none @@ -704,35 +704,35 @@ subroutine constitutive_LpAndItsTangent(Lp, dLp_dTstar, Tstar_v, ipc, ip, el) dLp_dTstar = 0.0_pReal case (PLASTICITY_J2_ID) nSlip = 1_pInt - call constitutive_j2_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v, & + call plastic_j2_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v, & constitutive_getSlipDamage(nSlip,Tstar_v,ipc,ip,el), & ipc,ip,el) case (PLASTICITY_PHENOPOWERLAW_ID) - nSlip = constitutive_phenopowerlaw_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el))) - call constitutive_phenopowerlaw_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v, & + nSlip = plastic_phenopowerlaw_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el))) + call plastic_phenopowerlaw_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v, & constitutive_getSlipDamage(nSlip,Tstar_v,ipc,ip,el), & ipc,ip,el) case (PLASTICITY_NONLOCAL_ID) nSlip = totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el))) - call constitutive_nonlocal_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v, & + call plastic_nonlocal_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v, & constitutive_getTemperature(ipc,ip,el), & constitutive_getSlipDamage(nSlip,Tstar_v,ipc,ip,el), & ipc,ip,el) case (PLASTICITY_DISLOTWIN_ID) - nSlip = constitutive_dislotwin_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el))) - call constitutive_dislotwin_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v, & + nSlip = plastic_dislotwin_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el))) + call plastic_dislotwin_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v, & constitutive_getTemperature(ipc,ip,el), & constitutive_getSlipDamage(nSlip,Tstar_v,ipc,ip,el), & ipc,ip,el) case (PLASTICITY_DISLOKMC_ID) - nSlip = constitutive_dislokmc_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el))) - call constitutive_dislokmc_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v, & + nSlip = plastic_dislokmc_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el))) + call plastic_dislokmc_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v, & constitutive_getTemperature(ipc,ip,el), & constitutive_getSlipDamage(nSlip,Tstar_v,ipc,ip,el), & ipc,ip,el) case (PLASTICITY_TITANMOD_ID) - nSlip = constitutive_titanmod_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el))) - call constitutive_titanmod_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v, & + nSlip = plastic_titanmod_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el))) + call plastic_titanmod_LpAndItsTangent(Lp,dLp_dTstar,Tstar_v, & constitutive_getTemperature(ipc,ip,el), & constitutive_getSlipDamage(nSlip,Tstar_v,ipc,ip,el), & ipc,ip,el) @@ -1086,18 +1086,18 @@ subroutine constitutive_collectDotState(Tstar_v, Lp, FeArray, FpArray, subdt, su LOCAL_DAMAGE_anisoBrittle_ID, & LOCAL_DAMAGE_gurson_ID, & LOCAL_VACANCY_generation_ID - use constitutive_j2, only: & - constitutive_j2_dotState - use constitutive_phenopowerlaw, only: & - constitutive_phenopowerlaw_dotState - use constitutive_dislotwin, only: & - constitutive_dislotwin_dotState - use constitutive_dislokmc, only: & - constitutive_dislokmc_dotState - use constitutive_titanmod, only: & - constitutive_titanmod_dotState - use constitutive_nonlocal, only: & - constitutive_nonlocal_dotState + use plastic_j2, only: & + plastic_j2_dotState + use plastic_phenopowerlaw, only: & + plastic_phenopowerlaw_dotState + use plastic_dislotwin, only: & + plastic_dislotwin_dotState + use plastic_dislokmc, only: & + plastic_dislokmc_dotState + use plastic_titanmod, only: & + plastic_titanmod_dotState + use plastic_nonlocal, only: & + plastic_nonlocal_dotState use damage_anisoBrittle, only: & damage_anisoBrittle_dotState use damage_gurson, only: & @@ -1135,17 +1135,17 @@ subroutine constitutive_collectDotState(Tstar_v, Lp, FeArray, FpArray, subdt, su select case (phase_plasticity(material_phase(ipc,ip,el))) case (PLASTICITY_J2_ID) - call constitutive_j2_dotState (Tstar_v,ipc,ip,el) + call plastic_j2_dotState (Tstar_v,ipc,ip,el) case (PLASTICITY_PHENOPOWERLAW_ID) - call constitutive_phenopowerlaw_dotState(Tstar_v,ipc,ip,el) + call plastic_phenopowerlaw_dotState(Tstar_v,ipc,ip,el) case (PLASTICITY_DISLOTWIN_ID) - call constitutive_dislotwin_dotState (Tstar_v,constitutive_getTemperature(ipc,ip,el),ipc,ip,el) + call plastic_dislotwin_dotState (Tstar_v,constitutive_getTemperature(ipc,ip,el),ipc,ip,el) case (PLASTICITY_DISLOKMC_ID) - call constitutive_dislokmc_dotState (Tstar_v,constitutive_getTemperature(ipc,ip,el),ipc,ip,el) + call plastic_dislokmc_dotState (Tstar_v,constitutive_getTemperature(ipc,ip,el),ipc,ip,el) case (PLASTICITY_TITANMOD_ID) - call constitutive_titanmod_dotState (Tstar_v,constitutive_getTemperature(ipc,ip,el),ipc,ip,el) + call plastic_titanmod_dotState (Tstar_v,constitutive_getTemperature(ipc,ip,el),ipc,ip,el) case (PLASTICITY_NONLOCAL_ID) - call constitutive_nonlocal_dotState (Tstar_v,FeArray,FpArray,constitutive_getTemperature(ipc,ip,el), & + call plastic_nonlocal_dotState (Tstar_v,FeArray,FpArray,constitutive_getTemperature(ipc,ip,el), & subdt,subfracArray,ip,el) end select @@ -1194,8 +1194,8 @@ logical function constitutive_collectDeltaState(Tstar_v, ipc, ip, el) plasticState, & mappingConstitutive, & PLASTICITY_NONLOCAL_ID - use constitutive_nonlocal, only: & - constitutive_nonlocal_deltaState + use plastic_nonlocal, only: & + plastic_nonlocal_deltaState implicit none integer(pInt), intent(in) :: & @@ -1216,7 +1216,7 @@ logical function constitutive_collectDeltaState(Tstar_v, ipc, ip, el) case (PLASTICITY_NONLOCAL_ID) constitutive_collectDeltaState = .true. - call constitutive_nonlocal_deltaState(Tstar_v,ip,el) + call plastic_nonlocal_deltaState(Tstar_v,ip,el) case default constitutive_collectDeltaState = .false. @@ -1813,18 +1813,18 @@ subroutine constitutive_getAccumulatedSlip(nSlip,accumulatedSlip,ipc, ip, el) PLASTICITY_dislokmc_ID, & PLASTICITY_titanmod_ID, & PLASTICITY_nonlocal_ID - use constitutive_J2, only: & - constitutive_J2_getAccumulatedSlip - use constitutive_phenopowerlaw, only: & - constitutive_phenopowerlaw_getAccumulatedSlip - use constitutive_dislotwin, only: & - constitutive_dislotwin_getAccumulatedSlip - use constitutive_dislokmc, only: & - constitutive_dislokmc_getAccumulatedSlip - use constitutive_titanmod, only: & - constitutive_titanmod_getAccumulatedSlip - use constitutive_nonlocal, only: & - constitutive_nonlocal_getAccumulatedSlip + use plastic_j2, only: & + plastic_j2_getAccumulatedSlip + use plastic_phenopowerlaw, only: & + plastic_phenopowerlaw_getAccumulatedSlip + use plastic_dislotwin, only: & + plastic_dislotwin_getAccumulatedSlip + use plastic_dislokmc, only: & + plastic_dislokmc_getAccumulatedSlip + use plastic_titanmod, only: & + plastic_titanmod_getAccumulatedSlip + use plastic_nonlocal, only: & + plastic_nonlocal_getAccumulatedSlip implicit none @@ -1842,17 +1842,17 @@ subroutine constitutive_getAccumulatedSlip(nSlip,accumulatedSlip,ipc, ip, el) nSlip = 0_pInt allocate(accumulatedSlip(nSlip)) case (PLASTICITY_J2_ID) - call constitutive_J2_getAccumulatedSlip(nSlip,accumulatedSlip,ipc, ip, el) + call plastic_j2_getAccumulatedSlip(nSlip,accumulatedSlip,ipc, ip, el) case (PLASTICITY_PHENOPOWERLAW_ID) - call constitutive_phenopowerlaw_getAccumulatedSlip(nSlip,accumulatedSlip,ipc, ip, el) + call plastic_phenopowerlaw_getAccumulatedSlip(nSlip,accumulatedSlip,ipc, ip, el) case (PLASTICITY_DISLOTWIN_ID) - call constitutive_dislotwin_getAccumulatedSlip(nSlip,accumulatedSlip,ipc, ip, el) + call plastic_dislotwin_getAccumulatedSlip(nSlip,accumulatedSlip,ipc, ip, el) case (PLASTICITY_DISLOKMC_ID) - call constitutive_dislokmc_getAccumulatedSlip(nSlip,accumulatedSlip,ipc, ip, el) + call plastic_dislokmc_getAccumulatedSlip(nSlip,accumulatedSlip,ipc, ip, el) case (PLASTICITY_TITANMOD_ID) - call constitutive_titanmod_getAccumulatedSlip(nSlip,accumulatedSlip,ipc, ip, el) + call plastic_titanmod_getAccumulatedSlip(nSlip,accumulatedSlip,ipc, ip, el) case (PLASTICITY_NONLOCAL_ID) - call constitutive_nonlocal_getAccumulatedSlip(nSlip,accumulatedSlip,ipc, ip, el) + call plastic_nonlocal_getAccumulatedSlip(nSlip,accumulatedSlip,ipc, ip, el) end select end subroutine constitutive_getAccumulatedSlip @@ -1878,16 +1878,16 @@ subroutine constitutive_getSlipRate(nSlip,slipRate,Lp,ipc, ip, el) PLASTICITY_dislokmc_ID, & PLASTICITY_titanmod_ID, & PLASTICITY_nonlocal_ID - use constitutive_phenopowerlaw, only: & - constitutive_phenopowerlaw_getSlipRate - use constitutive_dislotwin, only: & - constitutive_dislotwin_getSlipRate - use constitutive_dislokmc, only: & - constitutive_dislokmc_getSlipRate - use constitutive_titanmod, only: & - constitutive_titanmod_getSlipRate - use constitutive_nonlocal, only: & - constitutive_nonlocal_getSlipRate + use plastic_phenopowerlaw, only: & + plastic_phenopowerlaw_getSlipRate + use plastic_dislotwin, only: & + plastic_dislotwin_getSlipRate + use plastic_dislokmc, only: & + plastic_dislokmc_getSlipRate + use plastic_titanmod, only: & + plastic_titanmod_getSlipRate + use plastic_nonlocal, only: & + plastic_nonlocal_getSlipRate implicit none @@ -1911,15 +1911,15 @@ subroutine constitutive_getSlipRate(nSlip,slipRate,Lp,ipc, ip, el) allocate(slipRate(nSlip)) slipRate(1) = math_equivStrain33(Lp) case (PLASTICITY_PHENOPOWERLAW_ID) - call constitutive_phenopowerlaw_getSlipRate(nSlip,slipRate,ipc, ip, el) + call plastic_phenopowerlaw_getSlipRate(nSlip,slipRate,ipc, ip, el) case (PLASTICITY_DISLOTWIN_ID) - call constitutive_dislotwin_getSlipRate(nSlip,slipRate,ipc, ip, el) + call plastic_dislotwin_getSlipRate(nSlip,slipRate,ipc, ip, el) case (PLASTICITY_DISLOKMC_ID) - call constitutive_dislokmc_getSlipRate(nSlip,slipRate,ipc, ip, el) + call plastic_dislokmc_getSlipRate(nSlip,slipRate,ipc, ip, el) case (PLASTICITY_TITANMOD_ID) - call constitutive_titanmod_getSlipRate(nSlip,slipRate,ipc, ip, el) + call plastic_titanmod_getSlipRate(nSlip,slipRate,ipc, ip, el) case (PLASTICITY_NONLOCAL_ID) - call constitutive_nonlocal_getSlipRate(nSlip,slipRate,ipc, ip, el) + call plastic_nonlocal_getSlipRate(nSlip,slipRate,ipc, ip, el) end select end subroutine constitutive_getSlipRate @@ -1959,21 +1959,21 @@ function constitutive_postResults(Tstar_v, FeArray, ipc, ip, el) LOCAL_DAMAGE_phaseField_ID, & LOCAL_THERMAL_ADIABATIC_ID, & LOCAL_VACANCY_generation_ID - use constitutive_j2, only: & + use plastic_j2, only: & #ifdef HDF - constitutive_j2_postResults2,& + plastic_j2_postResults2,& #endif - constitutive_j2_postResults - use constitutive_phenopowerlaw, only: & - constitutive_phenopowerlaw_postResults - use constitutive_dislotwin, only: & - constitutive_dislotwin_postResults - use constitutive_dislokmc, only: & - constitutive_dislokmc_postResults - use constitutive_titanmod, only: & - constitutive_titanmod_postResults - use constitutive_nonlocal, only: & - constitutive_nonlocal_postResults + plastic_j2_postResults + use plastic_phenopowerlaw, only: & + plastic_phenopowerlaw_postResults + use plastic_dislotwin, only: & + plastic_dislotwin_postResults + use plastic_dislokmc, only: & + plastic_dislokmc_postResults + use plastic_titanmod, only: & + plastic_titanmod_postResults + use plastic_nonlocal, only: & + plastic_nonlocal_postResults #ifdef multiphysicsOut use damage_isoBrittle, only: & damage_isoBrittle_postResults @@ -2021,21 +2021,21 @@ function constitutive_postResults(Tstar_v, FeArray, ipc, ip, el) endPos = plasticState(material_phase(ipc,ip,el))%sizePostResults select case (phase_plasticity(material_phase(ipc,ip,el))) case (PLASTICITY_TITANMOD_ID) - constitutive_postResults(startPos:endPos) = constitutive_titanmod_postResults(ipc,ip,el) + constitutive_postResults(startPos:endPos) = plastic_titanmod_postResults(ipc,ip,el) case (PLASTICITY_J2_ID) - constitutive_postResults(startPos:endPos) = constitutive_j2_postResults(Tstar_v,ipc,ip,el) + constitutive_postResults(startPos:endPos) = plastic_j2_postResults(Tstar_v,ipc,ip,el) case (PLASTICITY_PHENOPOWERLAW_ID) constitutive_postResults(startPos:endPos) = & - constitutive_phenopowerlaw_postResults(Tstar_v,ipc,ip,el) + plastic_phenopowerlaw_postResults(Tstar_v,ipc,ip,el) case (PLASTICITY_DISLOTWIN_ID) constitutive_postResults(startPos:endPos) = & - constitutive_dislotwin_postResults(Tstar_v,constitutive_getTemperature(ipc,ip,el),ipc,ip,el) + plastic_dislotwin_postResults(Tstar_v,constitutive_getTemperature(ipc,ip,el),ipc,ip,el) case (PLASTICITY_DISLOKMC_ID) constitutive_postResults(startPos:endPos) = & - constitutive_dislokmc_postResults(Tstar_v,constitutive_getTemperature(ipc,ip,el),ipc,ip,el) + plastic_dislokmc_postResults(Tstar_v,constitutive_getTemperature(ipc,ip,el),ipc,ip,el) case (PLASTICITY_NONLOCAL_ID) constitutive_postResults(startPos:endPos) = & - constitutive_nonlocal_postResults (Tstar_v,FeArray,ip,el) + plastic_nonlocal_postResults (Tstar_v,FeArray,ip,el) end select #ifdef multiphysicsOut diff --git a/code/constitutive_titanmod.f90 b/code/constitutive_titanmod.f90 deleted file mode 100644 index c389008ff..000000000 --- a/code/constitutive_titanmod.f90 +++ /dev/null @@ -1,2022 +0,0 @@ -!-------------------------------------------------------------------------------------------------- -! $Id$ -!-------------------------------------------------------------------------------------------------- -!> @author Alankar Alankar, Max-Planck-Institut für Eisenforschung GmbH -!> @author Franz Roters, Max-Planck-Institut für Eisenforschung GmbH -!> @author Philip Eisenlohr, Max-Planck-Institut für Eisenforschung GmbH -!> @brief material subroutine for titanium -!-------------------------------------------------------------------------------------------------- -module constitutive_titanmod - use prec, only: & - pReal, & - pInt - - implicit none - private - character(len=18), dimension(3), parameter, private :: & - CONSTITUTIVE_TITANMOD_listBasicSlipStates = & - ['rho_edge ', 'rho_screw ', 'shear_system'] - character(len=18), dimension(1), parameter, private :: & - CONSTITUTIVE_TITANMOD_listBasicTwinStates = ['gdot_twin'] - character(len=19), dimension(11), parameter, private :: & - CONSTITUTIVE_TITANMOD_listDependentSlipStates = & - ['segment_edge ', 'segment_screw ', & - 'resistance_edge ', 'resistance_screw ', & - 'tau_slip ', & - 'velocity_edge ', 'velocity_screw ', & - 'gdot_slip_edge ', 'gdot_slip_screw ', & - 'stressratio_edge_p ', 'stressratio_screw_p' ] - character(len=18), dimension(2), parameter, private :: & - constitutive_titanmod_listDependentTwinStates = & - ['twin_fraction', 'tau_twin '] - real(pReal), parameter, private :: & - kB = 1.38e-23_pReal !< Boltzmann constant in J/Kelvin - - - integer(pInt), dimension(:), allocatable, public, protected :: & - constitutive_titanmod_sizePostResults !< cumulative size of post results - - integer(pInt), dimension(:,:), allocatable, target, public :: & - constitutive_titanmod_sizePostResult !< size of each post result output - - character(len=64), dimension(:,:), allocatable, target, public :: & - constitutive_titanmod_output !< name of each post result output - - integer(pInt), dimension(:), allocatable, target, public :: & - constitutive_titanmod_Noutput !< number of outputs per instance of this plasticity !< ID of the lattice structure - - integer(pInt), dimension(:), allocatable, public, protected :: & - constitutive_titanmod_totalNslip, & !< total number of active slip systems for each instance - constitutive_titanmod_totalNtwin !< total number of active twin systems for each instance - - integer(pInt), dimension(:,:), allocatable, private :: & - constitutive_titanmod_Nslip, & !< number of active slip systems for each family and instance - constitutive_titanmod_Ntwin, & !< number of active twin systems for each family and instance - constitutive_titanmod_slipFamily, & !< lookup table relating active slip system to slip family for each instance - constitutive_titanmod_twinFamily, & !< lookup table relating active twin system to twin family for each instance - constitutive_titanmod_slipSystemLattice, & !< lookup table relating active slip system index to lattice slip system index for each instance - constitutive_titanmod_twinSystemLattice !< lookup table relating active twin system index to lattice twin system index for each instance - - real(pReal), dimension(:), allocatable, private :: & - constitutive_titanmod_debyefrequency, & !< Debye frequency - constitutive_titanmod_kinkf0, & !< - constitutive_titanmod_CAtomicVolume, & !< atomic volume in Bugers vector unit - constitutive_titanmod_dc, & !< prefactor for self-diffusion coefficient - constitutive_titanmod_twinhpconstant, & !< activation energy for dislocation climb - constitutive_titanmod_GrainSize, & !< grain size - Not being used - constitutive_titanmod_MaxTwinFraction, & !< maximum allowed total twin volume fraction - constitutive_titanmod_r, & !< r-exponent in twin nucleation rate - constitutive_titanmod_CEdgeDipMinDistance, & !< Not being used - constitutive_titanmod_Cmfptwin, & !< Not being used - constitutive_titanmod_Cthresholdtwin, & !< Not being used - constitutive_titanmod_aTolRho !< absolute tolerance for integration of dislocation density - - real(pReal), dimension(:,:), allocatable, private :: & - constitutive_titanmod_rho_edge0, & !< initial edge dislocation density per slip system for each family and instance - constitutive_titanmod_rho_screw0, & !< initial screw dislocation density per slip system for each family and instance - constitutive_titanmod_shear_system0, & !< accumulated shear on each system - constitutive_titanmod_burgersPerSlipFam, & !< absolute length of burgers vector [m] for each slip family and instance - constitutive_titanmod_burgersPerSlipSys, & !< absolute length of burgers vector [m] for each slip system and instance - constitutive_titanmod_burgersPerTwinFam, & !< absolute length of burgers vector [m] for each twin family and instance - constitutive_titanmod_burgersPerTwinSys, & !< absolute length of burgers vector [m] for each twin system and instance - constitutive_titanmod_f0_PerSlipFam, & !< activation energy for glide [J] for each slip family and instance - constitutive_titanmod_f0_PerSlipSys, & !< activation energy for glide [J] for each slip system and instance - constitutive_titanmod_twinf0_PerTwinFam, & !< activation energy for glide [J] for each twin family and instance - constitutive_titanmod_twinf0_PerTwinSys, & !< activation energy for glide [J] for each twin system and instance - constitutive_titanmod_twinshearconstant_PerTwinFam, & !< activation energy for glide [J] for each twin family and instance - constitutive_titanmod_twinshearconstant_PerTwinSys, & !< activation energy for glide [J] for each twin system and instance - constitutive_titanmod_tau0e_PerSlipFam, & !< Initial yield stress for edge dislocations per slip family - constitutive_titanmod_tau0e_PerSlipSys, & !< Initial yield stress for edge dislocations per slip system - constitutive_titanmod_tau0s_PerSlipFam, & !< Initial yield stress for screw dislocations per slip family - constitutive_titanmod_tau0s_PerSlipSys, & !< Initial yield stress for screw dislocations per slip system - constitutive_titanmod_twintau0_PerTwinFam, & !< Initial yield stress for edge dislocations per twin family - constitutive_titanmod_twintau0_PerTwinSys, & !< Initial yield stress for edge dislocations per twin system - constitutive_titanmod_capre_PerSlipFam, & !< Capture radii for edge dislocations per slip family - constitutive_titanmod_capre_PerSlipSys, & !< Capture radii for edge dislocations per slip system - constitutive_titanmod_caprs_PerSlipFam, & !< Capture radii for screw dislocations per slip family - constitutive_titanmod_caprs_PerSlipSys, & !< Capture radii for screw dislocations per slip system - constitutive_titanmod_pe_PerSlipFam, & !< p-exponent in glide velocity - constitutive_titanmod_ps_PerSlipFam, & !< p-exponent in glide velocity - constitutive_titanmod_qe_PerSlipFam, & !< q-exponent in glide velocity - constitutive_titanmod_qs_PerSlipFam, & !< q-exponent in glide velocity - constitutive_titanmod_pe_PerSlipSys, & !< p-exponent in glide velocity - constitutive_titanmod_ps_PerSlipSys, & !< p-exponent in glide velocity - constitutive_titanmod_qe_PerSlipSys, & !< q-exponent in glide velocity - constitutive_titanmod_qs_PerSlipSys, & !< q-exponent in glide velocity - constitutive_titanmod_twinp_PerTwinFam, & !< p-exponent in glide velocity - constitutive_titanmod_twinq_PerTwinFam, & !< q-exponent in glide velocity - constitutive_titanmod_twinp_PerTwinSys, & !< p-exponent in glide velocity - constitutive_titanmod_twinq_PerTwinSys, & !< p-exponent in glide velocity - constitutive_titanmod_v0e_PerSlipFam, & !< edge dislocation velocity prefactor [m/s] for each family and instance - constitutive_titanmod_v0e_PerSlipSys, & !< screw dislocation velocity prefactor [m/s] for each slip system and instance - constitutive_titanmod_v0s_PerSlipFam, & !< edge dislocation velocity prefactor [m/s] for each family and instance - constitutive_titanmod_v0s_PerSlipSys, & !< screw dislocation velocity prefactor [m/s] for each slip system and instance - constitutive_titanmod_twingamma0_PerTwinFam, & !< edge dislocation velocity prefactor [m/s] for each family and instance - constitutive_titanmod_twingamma0_PerTwinSys, & !< screw dislocation velocity prefactor [m/s] for each slip system and instance - constitutive_titanmod_kinkcriticallength_PerSlipFam, & !< screw dislocation mobility prefactor for kink-pairs per slip family - constitutive_titanmod_kinkcriticallength_PerSlipSys, & !< screw dislocation mobility prefactor for kink-pairs per slip system - constitutive_titanmod_twinsizePerTwinFam, & !< twin thickness [m] for each twin family and instance - constitutive_titanmod_twinsizePerTwinSys, & !< twin thickness [m] for each twin system and instance - constitutive_titanmod_CeLambdaSlipPerSlipFam, & !< Adj. parameter for distance between 2 forest dislocations for each slip family and instance - constitutive_titanmod_CeLambdaSlipPerSlipSys, & !< Adj. parameter for distance between 2 forest dislocations for each slip system and instance - constitutive_titanmod_CsLambdaSlipPerSlipFam, & !< Adj. parameter for distance between 2 forest dislocations for each slip family and instance - constitutive_titanmod_CsLambdaSlipPerSlipSys, & !< Adj. parameter for distance between 2 forest dislocations for each slip system and instance - constitutive_titanmod_twinLambdaSlipPerTwinFam, & !< Adj. parameter for distance between 2 forest dislocations for each slip family and instance - constitutive_titanmod_twinLambdaSlipPerTwinSys, & !< Adj. parameter for distance between 2 forest dislocations for each slip system and instance - constitutive_titanmod_interactionSlipSlip, & !< coefficients for slip-slip interaction for each interaction type and instance - constitutive_titanmod_interaction_ee, & !< coefficients for e-e interaction for each interaction type and instance - constitutive_titanmod_interaction_ss, & !< coefficients for s-s interaction for each interaction type and instance - constitutive_titanmod_interaction_es, & !< coefficients for e-s-twin interaction for each interaction type and instance - constitutive_titanmod_interactionSlipTwin, & !< coefficients for twin-slip interaction for each interaction type and instance - constitutive_titanmod_interactionTwinSlip, & !< coefficients for twin-slip interaction for each interaction type and instance - constitutive_titanmod_interactionTwinTwin !< coefficients for twin-twin interaction for each interaction type and instance - - real(pReal), dimension(:,:,:), allocatable, private :: & - constitutive_titanmod_interactionMatrixSlipSlip, & !< interaction matrix of the different slip systems for each instance - constitutive_titanmod_interactionMatrix_ee, & !< interaction matrix of e-e for each instance - constitutive_titanmod_interactionMatrix_ss, & !< interaction matrix of s-s for each instance - constitutive_titanmod_interactionMatrix_es, & !< interaction matrix of e-s for each instance - constitutive_titanmod_interactionMatrixSlipTwin, & !< interaction matrix of slip systems with twin systems for each instance - constitutive_titanmod_interactionMatrixTwinSlip, & !< interaction matrix of twin systems with slip systems for each instance - constitutive_titanmod_interactionMatrixTwinTwin, & !< interaction matrix of the different twin systems for each instance - constitutive_titanmod_forestProjectionEdge, & !< matrix of forest projections of edge dislocations for each instance - constitutive_titanmod_forestProjectionScrew, & !< matrix of forest projections of screw dislocations for each instance - constitutive_titanmod_TwinforestProjectionEdge, & !< matrix of forest projections of edge dislocations in twin system for each instance - constitutive_titanmod_TwinforestProjectionScrew !< matrix of forest projections of screw dislocations in twin system for each instance - - real(pReal), dimension(:,:,:,:), allocatable, private :: & - constitutive_titanmod_Ctwin66 !< twin elasticity matrix in Mandel notation for each instance - - real(pReal), dimension(:,:,:,:,:,:), allocatable, private :: & - constitutive_titanmod_Ctwin3333 !< twin elasticity matrix for each instance - - enum, bind(c) - enumerator :: undefined_ID, & - rhoedge_ID, rhoscrew_ID, & - segment_edge_ID, segment_screw_ID, & - resistance_edge_ID, resistance_screw_ID, & - velocity_edge_ID, velocity_screw_ID, & - tau_slip_ID, & - gdot_slip_edge_ID, gdot_slip_screw_ID, & - gdot_slip_ID, & - stressratio_edge_p_ID, stressratio_screw_p_ID, & - shear_system_ID, & - twin_fraction_ID, & - shear_basal_ID, shear_prism_ID, shear_pyra_ID, shear_pyrca_ID, & - rhoedge_basal_ID, rhoedge_prism_ID, rhoedge_pyra_ID, rhoedge_pyrca_ID, & - rhoscrew_basal_ID, rhoscrew_prism_ID, rhoscrew_pyra_ID, rhoscrew_pyrca_ID, & - shear_total_ID - end enum - integer(kind(undefined_ID)), dimension(:,:), allocatable, private :: & - constitutive_titanmod_outputID !< ID of each post result output - - public :: & - constitutive_titanmod_microstructure, & - constitutive_titanmod_stateInit, & - constitutive_titanmod_init, & - constitutive_titanmod_LpAndItsTangent, & - constitutive_titanmod_dotState, & - constitutive_titanmod_getAccumulatedSlip, & - constitutive_titanmod_getSlipRate, & - constitutive_titanmod_postResults, & - constitutive_titanmod_homogenizedC - - contains - -!-------------------------------------------------------------------------------------------------- -!> @brief module initialization -!> @details reads in material parameters, allocates arrays, and does sanity checks -!-------------------------------------------------------------------------------------------------- -subroutine constitutive_titanmod_init(fileUnit) - use, intrinsic :: iso_fortran_env ! to get compiler_version and compiler_options (at least for gfortran 4.6 at the moment) - use debug, only: & - debug_level,& - debug_constitutive,& - debug_levelBasic - use math, only: & - math_Mandel3333to66,& - math_Voigt66to3333,& - math_mul3x3 - use IO, only: & - IO_read, & - IO_lc, & - IO_getTag, & - IO_isBlank, & - IO_stringPos, & - IO_stringValue, & - IO_floatValue, & - IO_intValue, & - IO_warning, & - IO_error, & - IO_timeStamp, & - IO_EOF - use material, only: & - homogenization_maxNgrains, & - phase_plasticity, & - phase_plasticityInstance, & - phase_Noutput, & - PLASTICITY_TITANMOD_label, & - PLASTICITY_TITANMOD_ID, & - plasticState, & - MATERIAL_partPhase - use lattice - use numerics,only: & - worldrank, & - numerics_integrator - - implicit none - integer(pInt), intent(in) :: fileUnit - - integer(pInt), parameter :: MAXNCHUNKS = LATTICE_maxNinteraction + 1_pInt - integer(pInt), dimension(1_pInt+2_pInt*MAXNCHUNKS) :: positions - integer(pInt) :: & - phase, & - instance, j, k, l, m, n, p, q, r, & - f, o, & - s, s1, s2, & - t, t1, t2, & - ns, nt, & - Nchunks_SlipSlip, Nchunks_SlipTwin, Nchunks_TwinSlip, Nchunks_TwinTwin, & - Nchunks_SlipFamilies, Nchunks_TwinFamilies, & - mySize, & - maxTotalNslip,maxTotalNtwin, maxNinstance - integer(pInt) :: sizeState, sizeDotState - integer(pInt) :: NofMyPhase - character(len=65536) :: & - tag = '', & - line = '' - - mainProcess: if (worldrank == 0) then - write(6,'(/,a)') ' <<<+- constitutive_'//PLASTICITY_TITANMOD_label//' init -+>>>' - write(6,'(a)') ' $Id$' - write(6,'(a15,a)') ' Current time: ',IO_timeStamp() -#include "compilation_info.f90" - endif mainProcess - - maxNinstance = int(count(phase_plasticity == PLASTICITY_TITANMOD_ID),pInt) - if (maxNinstance == 0_pInt) return - - if (iand(debug_level(debug_constitutive),debug_levelBasic) /= 0_pInt) & - write(6,'(a16,1x,i5,/)') '# instances:',maxNinstance - - allocate(constitutive_titanmod_sizePostResults(maxNinstance), source=0_pInt) - allocate(constitutive_titanmod_sizePostResult(maxval(phase_Noutput),maxNinstance), source=0_pInt) - allocate(constitutive_titanmod_output(maxval(phase_Noutput),maxNinstance)) - constitutive_titanmod_output = '' - allocate(constitutive_titanmod_outputID(maxval(phase_Noutput),maxNinstance), source=undefined_ID) - allocate(constitutive_titanmod_Noutput(maxNinstance), source=0_pInt) - - allocate(constitutive_titanmod_Nslip(lattice_maxNslipFamily,maxNinstance), source=0_pInt) - allocate(constitutive_titanmod_Ntwin(lattice_maxNtwinFamily,maxNinstance), source=0_pInt) - allocate(constitutive_titanmod_slipFamily(lattice_maxNslip,maxNinstance), source=0_pInt) - allocate(constitutive_titanmod_twinFamily(lattice_maxNtwin,maxNinstance), source=0_pInt) - allocate(constitutive_titanmod_slipSystemLattice(lattice_maxNslip,maxNinstance), source=0_pInt) - allocate(constitutive_titanmod_twinSystemLattice(lattice_maxNtwin,maxNinstance), source=0_pInt) - allocate(constitutive_titanmod_totalNslip(maxNinstance), source=0_pInt) - allocate(constitutive_titanmod_totalNtwin(maxNinstance), source=0_pInt) - allocate(constitutive_titanmod_debyefrequency(maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_kinkf0(maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_CAtomicVolume(maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_dc(maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_twinhpconstant(maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_GrainSize(maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_MaxTwinFraction(maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_r(maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_CEdgeDipMinDistance(maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_Cmfptwin(maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_Cthresholdtwin(maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_aTolRho(maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_rho_edge0(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_rho_screw0(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_shear_system0(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_burgersPerSlipFam(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_burgersPerTwinFam(lattice_maxNtwinFamily,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_f0_PerSlipFam(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_tau0e_PerSlipFam(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_tau0s_PerSlipFam(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_capre_PerSlipFam(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_caprs_PerSlipFam(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_pe_PerSlipFam(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_ps_PerSlipFam(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_qe_PerSlipFam(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_qs_PerSlipFam(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_v0e_PerSlipFam(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_v0s_PerSlipFam(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_kinkcriticallength_PerSlipFam(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_twinsizePerTwinFam(lattice_maxNtwinFamily,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_CeLambdaSlipPerSlipFam(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_CsLambdaSlipPerSlipFam(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) - - allocate(constitutive_titanmod_twinf0_PerTwinFam(lattice_maxNTwinFamily,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_twinshearconstant_PerTwinFam(lattice_maxNTwinFamily,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_twintau0_PerTwinFam(lattice_maxNTwinFamily,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_twinp_PerTwinFam(lattice_maxNTwinFamily,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_twinq_PerTwinFam(lattice_maxNTwinFamily,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_twingamma0_PerTwinFam(lattice_maxNTwinFamily,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_twinLambdaSlipPerTwinFam(lattice_maxNTwinFamily,maxNinstance), source=0.0_pReal) - - allocate(constitutive_titanmod_interactionSlipSlip(lattice_maxNinteraction,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_interaction_ee(lattice_maxNinteraction,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_interaction_ss(lattice_maxNinteraction,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_interaction_es(lattice_maxNinteraction,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_interactionSlipTwin(lattice_maxNinteraction,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_interactionTwinSlip(lattice_maxNinteraction,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_interactionTwinTwin(lattice_maxNinteraction,maxNinstance), source=0.0_pReal) - - rewind(fileUnit) - phase = 0_pInt - do while (trim(line) /= IO_EOF .and. IO_lc(IO_getTag(line,'<','>')) /= material_partPhase) ! wind forward to - line = IO_read(fileUnit) - enddo - - parsingFile: do while (trim(line) /= IO_EOF) ! read through sections of phase part - line = IO_read(fileUnit) - if (IO_isBlank(line)) cycle ! skip empty lines - if (IO_getTag(line,'<','>') /= '') then ! stop at next part - line = IO_read(fileUnit, .true.) ! reset IO_read - exit - endif - if (IO_getTag(line,'[',']') /= '') then ! next section - phase = phase + 1_pInt ! advance section counter - if (phase_plasticity(phase) == PLASTICITY_TITANMOD_ID) then - Nchunks_SlipFamilies = count(lattice_NslipSystem(:,phase) > 0_pInt) - Nchunks_TwinFamilies = count(lattice_NtwinSystem(:,phase) > 0_pInt) - Nchunks_SlipSlip = maxval(lattice_interactionSlipSlip(:,:,phase)) - Nchunks_SlipTwin = maxval(lattice_interactionSlipTwin(:,:,phase)) - Nchunks_TwinSlip = maxval(lattice_interactionTwinSlip(:,:,phase)) - Nchunks_TwinTwin = maxval(lattice_interactionTwinTwin(:,:,phase)) - endif - cycle ! skip to next line - endif - if (phase > 0_pInt ) then; if (phase_plasticity(phase) == PLASTICITY_TITANMOD_ID) then ! one of my sections. Do not short-circuit here (.and. between if-statements), it's not safe in Fortran - instance = phase_plasticityInstance(phase) ! which instance of my plasticity is present phase - positions = IO_stringPos(line,MAXNCHUNKS) - tag = IO_lc(IO_stringValue(line,positions,1_pInt)) ! extract key - select case(tag) - case ('(output)') - select case(IO_lc(IO_stringValue(line,positions,2_pInt))) - case ('rhoedge') - constitutive_titanmod_Noutput(instance) = constitutive_titanmod_Noutput(instance) + 1_pInt - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = rhoedge_ID - constitutive_titanmod_output(constitutive_titanmod_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,positions,2_pInt)) - case ('rhoscrew') - constitutive_titanmod_Noutput(instance) = constitutive_titanmod_Noutput(instance) + 1_pInt - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = rhoscrew_ID - constitutive_titanmod_output(constitutive_titanmod_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,positions,2_pInt)) - case ('segment_edge') - constitutive_titanmod_Noutput(instance) = constitutive_titanmod_Noutput(instance) + 1_pInt - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = segment_edge_ID - constitutive_titanmod_output(constitutive_titanmod_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,positions,2_pInt)) - case ('segment_screw') - constitutive_titanmod_Noutput(instance) = constitutive_titanmod_Noutput(instance) + 1_pInt - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = segment_screw_ID - constitutive_titanmod_output(constitutive_titanmod_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,positions,2_pInt)) - case ('resistance_edge') - constitutive_titanmod_Noutput(instance) = constitutive_titanmod_Noutput(instance) + 1_pInt - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = resistance_edge_ID - constitutive_titanmod_output(constitutive_titanmod_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,positions,2_pInt)) - case ('resistance_screw') - constitutive_titanmod_Noutput(instance) = constitutive_titanmod_Noutput(instance) + 1_pInt - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = resistance_screw_ID - constitutive_titanmod_output(constitutive_titanmod_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,positions,2_pInt)) - case ('velocity_edge') - constitutive_titanmod_Noutput(instance) = constitutive_titanmod_Noutput(instance) + 1_pInt - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = velocity_edge_ID - constitutive_titanmod_output(constitutive_titanmod_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,positions,2_pInt)) - case ('velocity_screw') - constitutive_titanmod_Noutput(instance) = constitutive_titanmod_Noutput(instance) + 1_pInt - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = velocity_screw_ID - constitutive_titanmod_output(constitutive_titanmod_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,positions,2_pInt)) - case ('tau_slip') - constitutive_titanmod_Noutput(instance) = constitutive_titanmod_Noutput(instance) + 1_pInt - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = tau_slip_ID - constitutive_titanmod_output(constitutive_titanmod_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,positions,2_pInt)) - case ('gdot_slip_edge') - constitutive_titanmod_Noutput(instance) = constitutive_titanmod_Noutput(instance) + 1_pInt - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = gdot_slip_edge_ID - constitutive_titanmod_output(constitutive_titanmod_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,positions,2_pInt)) - case ('gdot_slip_screw') - constitutive_titanmod_Noutput(instance) = constitutive_titanmod_Noutput(instance) + 1_pInt - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = gdot_slip_screw_ID - constitutive_titanmod_output(constitutive_titanmod_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,positions,2_pInt)) - case ('gdot_slip') - constitutive_titanmod_Noutput(instance) = constitutive_titanmod_Noutput(instance) + 1_pInt - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = gdot_slip_ID - constitutive_titanmod_output(constitutive_titanmod_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,positions,2_pInt)) - case ('stressratio_edge_p') - constitutive_titanmod_Noutput(instance) = constitutive_titanmod_Noutput(instance) + 1_pInt - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = stressratio_edge_p_ID - constitutive_titanmod_output(constitutive_titanmod_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,positions,2_pInt)) - case ('stressratio_screw_p') - constitutive_titanmod_Noutput(instance) = constitutive_titanmod_Noutput(instance) + 1_pInt - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = stressratio_screw_p_ID - constitutive_titanmod_output(constitutive_titanmod_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,positions,2_pInt)) - case ('shear_system') - constitutive_titanmod_Noutput(instance) = constitutive_titanmod_Noutput(instance) + 1_pInt - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = shear_system_ID - constitutive_titanmod_output(constitutive_titanmod_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,positions,2_pInt)) - case ('twin_fraction') - constitutive_titanmod_Noutput(instance) = constitutive_titanmod_Noutput(instance) + 1_pInt - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = twin_fraction_ID - constitutive_titanmod_output(constitutive_titanmod_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,positions,2_pInt)) - case ('shear_basal') - constitutive_titanmod_Noutput(instance) = constitutive_titanmod_Noutput(instance) + 1_pInt - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = shear_basal_ID - constitutive_titanmod_output(constitutive_titanmod_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,positions,2_pInt)) - case ('shear_prism') - constitutive_titanmod_Noutput(instance) = constitutive_titanmod_Noutput(instance) + 1_pInt - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = shear_prism_ID - constitutive_titanmod_output(constitutive_titanmod_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,positions,2_pInt)) - case ('shear_pyra') - constitutive_titanmod_Noutput(instance) = constitutive_titanmod_Noutput(instance) + 1_pInt - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = shear_pyra_ID - constitutive_titanmod_output(constitutive_titanmod_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,positions,2_pInt)) - case ('shear_pyrca') - constitutive_titanmod_Noutput(instance) = constitutive_titanmod_Noutput(instance) + 1_pInt - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = shear_pyrca_ID - constitutive_titanmod_output(constitutive_titanmod_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,positions,2_pInt)) - case ('rhoedge_basal') - constitutive_titanmod_Noutput(instance) = constitutive_titanmod_Noutput(instance) + 1_pInt - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = rhoedge_basal_ID - constitutive_titanmod_output(constitutive_titanmod_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,positions,2_pInt)) - case ('rhoedge_prism') - constitutive_titanmod_Noutput(instance) = constitutive_titanmod_Noutput(instance) + 1_pInt - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = rhoedge_prism_ID - constitutive_titanmod_output(constitutive_titanmod_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,positions,2_pInt)) - case ('rhoedge_pyra') - constitutive_titanmod_Noutput(instance) = constitutive_titanmod_Noutput(instance) + 1_pInt - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = rhoedge_pyra_ID - constitutive_titanmod_output(constitutive_titanmod_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,positions,2_pInt)) - case ('rhoedge_pyrca') - constitutive_titanmod_Noutput(instance) = constitutive_titanmod_Noutput(instance) + 1_pInt - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = rhoedge_pyrca_ID - constitutive_titanmod_output(constitutive_titanmod_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,positions,2_pInt)) - case ('rhoscrew_basal') - constitutive_titanmod_Noutput(instance) = constitutive_titanmod_Noutput(instance) + 1_pInt - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = rhoscrew_basal_ID - constitutive_titanmod_output(constitutive_titanmod_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,positions,2_pInt)) - case ('rhoscrew_prism') - constitutive_titanmod_Noutput(instance) = constitutive_titanmod_Noutput(instance) + 1_pInt - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = rhoscrew_prism_ID - constitutive_titanmod_output(constitutive_titanmod_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,positions,2_pInt)) - case ('rhoscrew_pyra') - constitutive_titanmod_Noutput(instance) = constitutive_titanmod_Noutput(instance) + 1_pInt - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = rhoscrew_pyra_ID - constitutive_titanmod_output(constitutive_titanmod_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,positions,2_pInt)) - case ('rhoscrew_pyrca') - constitutive_titanmod_Noutput(instance) = constitutive_titanmod_Noutput(instance) + 1_pInt - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = rhoscrew_pyrca_ID - constitutive_titanmod_output(constitutive_titanmod_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,positions,2_pInt)) - case ('shear_total') - constitutive_titanmod_Noutput(instance) = constitutive_titanmod_Noutput(instance) + 1_pInt - constitutive_titanmod_outputID(constitutive_titanmod_Noutput(instance),instance) = shear_total_ID - constitutive_titanmod_output(constitutive_titanmod_Noutput(instance),instance) = & - IO_lc(IO_stringValue(line,positions,2_pInt)) - end select - case ('debyefrequency') - constitutive_titanmod_debyefrequency(instance) = IO_floatValue(line,positions,2_pInt) - case ('kinkf0') - constitutive_titanmod_kinkf0(instance) = IO_floatValue(line,positions,2_pInt) - case ('nslip') - if (positions(1) < 1_pInt + Nchunks_SlipFamilies) & - call IO_warning(50_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_TITANMOD_label//')') - do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_Nslip(j,instance) = IO_intValue(line,positions,1_pInt+j) - enddo - case ('ntwin') - if (positions(1) < 1_pInt + Nchunks_TwinFamilies) & - call IO_warning(51_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_TITANMOD_label//')') - do j = 1_pInt, Nchunks_TwinFamilies - constitutive_titanmod_Ntwin(j,instance) = IO_intValue(line,positions,1_pInt+j) - enddo - case ('rho_edge0') - do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_rho_edge0(j,instance) = IO_floatValue(line,positions,1_pInt+j) - enddo - case ('rho_screw0') - do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_rho_screw0(j,instance) = IO_floatValue(line,positions,1_pInt+j) - enddo - case ('slipburgers') - do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_burgersPerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) - enddo - case ('twinburgers') - do j = 1_pInt, Nchunks_TwinFamilies - constitutive_titanmod_burgersPerTwinFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) - enddo - case ('f0') - do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_f0_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) - enddo - case ('twinf0') - do j = 1_pInt, Nchunks_TwinFamilies - constitutive_titanmod_twinf0_PerTwinFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) - enddo - case ('tau0e') - do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_tau0e_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) - enddo - case ('twintau0') - do j = 1_pInt, Nchunks_TwinFamilies - constitutive_titanmod_twintau0_PerTwinFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) - enddo - case ('tau0s') - do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_tau0s_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) - enddo - case ('capre') - do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_capre_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) - enddo - case ('caprs') - do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_caprs_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) - enddo - case ('v0e') - do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_v0e_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) - enddo - case ('twingamma0') - do j = 1_pInt, Nchunks_TwinFamilies - constitutive_titanmod_twingamma0_PerTwinFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) - enddo - case ('v0s') - do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_v0s_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) - enddo - case ('kinkcriticallength') - do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_kinkcriticallength_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) - enddo - case ('twinsize') - do j = 1_pInt, Nchunks_TwinFamilies - constitutive_titanmod_twinsizePerTwinFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) - enddo - case ('celambdaslip') - do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_CeLambdaSlipPerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) - enddo - case ('twinlambdaslip') - do j = 1_pInt, Nchunks_TwinFamilies - constitutive_titanmod_twinlambdaslipPerTwinFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) - enddo - case ('cslambdaslip') - do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_CsLambdaSlipPerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) - enddo - case ('grainsize') - constitutive_titanmod_GrainSize(instance) = IO_floatValue(line,positions,2_pInt) - case ('maxtwinfraction') - constitutive_titanmod_MaxTwinFraction(instance) = IO_floatValue(line,positions,2_pInt) - case ('pe') - do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_pe_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) - enddo - case ('twinp') - do j = 1_pInt, Nchunks_TwinFamilies - constitutive_titanmod_twinp_PerTwinFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) - enddo - case ('ps') - do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_ps_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) - enddo - case ('qe') - do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_qe_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) - enddo - case ('twinq') - do j = 1_pInt, Nchunks_TwinFamilies - constitutive_titanmod_twinq_PerTwinFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) - enddo - case ('qs') - do j = 1_pInt, Nchunks_SlipFamilies - constitutive_titanmod_qs_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) - enddo - case ('twinshearconstant') - do j = 1_pInt, Nchunks_TwinFamilies - constitutive_titanmod_twinshearconstant_PerTwinFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) - enddo - case ('dc') - constitutive_titanmod_dc(instance) = IO_floatValue(line,positions,2_pInt) - case ('twinhpconstant') - constitutive_titanmod_twinhpconstant(instance) = IO_floatValue(line,positions,2_pInt) - case ('atol_rho') - constitutive_titanmod_aTolRho(instance) = IO_floatValue(line,positions,2_pInt) - case ('interactionee') - do j = 1_pInt, lattice_maxNinteraction - constitutive_titanmod_interaction_ee(j,instance) = IO_floatValue(line,positions,1_pInt+j) - enddo - case ('interactionss') - do j = 1_pInt, lattice_maxNinteraction - constitutive_titanmod_interaction_ss(j,instance) = IO_floatValue(line,positions,1_pInt+j) - enddo - case ('interactiones') - do j = 1_pInt, lattice_maxNinteraction - constitutive_titanmod_interaction_es(j,instance) = IO_floatValue(line,positions,1_pInt+j) - enddo - case ('interaction_slipslip','interactionslipslip') - if (positions(1) < 1_pInt + Nchunks_SlipSlip) & - call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_TITANMOD_label//')') - do j = 1_pInt, Nchunks_SlipSlip - constitutive_titanmod_interactionSlipSlip(j,instance) = IO_floatValue(line,positions,1_pInt+j) - enddo - case ('interaction_sliptwin','interactionsliptwin') - if (positions(1) < 1_pInt + Nchunks_SlipTwin) & - call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_TITANMOD_label//')') - do j = 1_pInt, Nchunks_SlipTwin - constitutive_titanmod_interactionSlipTwin(j,instance) = IO_floatValue(line,positions,1_pInt+j) - enddo - case ('interaction_twinslip','interactiontwinslip') - if (positions(1) < 1_pInt + Nchunks_TwinSlip) & - call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_TITANMOD_label//')') - do j = 1_pInt, Nchunks_TwinSlip - constitutive_titanmod_interactionTwinSlip(j,instance) = IO_floatValue(line,positions,1_pInt+j) - enddo - case ('interaction_twintwin','interactiontwintwin') - if (positions(1) < 1_pInt + Nchunks_TwinTwin) & - call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_TITANMOD_label//')') - do j = 1_pInt, Nchunks_TwinTwin - constitutive_titanmod_interactionTwinTwin(j,instance) = IO_floatValue(line,positions,1_pInt+j) - enddo - end select - endif; endif - enddo parsingFile - - sanityChecks: do phase = 1_pInt, size(phase_plasticity) - myPhase: if (phase_plasticity(phase) == PLASTICITY_TITANMOD_ID) then - instance = phase_plasticityInstance(phase) - if (sum(constitutive_titanmod_Nslip(:,instance)) < 0_pInt) & - call IO_error(211_pInt,el=instance,ext_msg='nslip ('//PLASTICITY_TITANMOD_label//')') - if (sum(constitutive_titanmod_Ntwin(:,instance)) < 0_pInt) & - call IO_error(211_pInt,el=instance,ext_msg='ntwin ('//PLASTICITY_TITANMOD_label//')') - do f = 1_pInt,lattice_maxNslipFamily - if (constitutive_titanmod_Nslip(f,instance) > 0_pInt) then - if (constitutive_titanmod_rho_edge0(f,instance) < 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='rho_edge0 ('//PLASTICITY_TITANMOD_label//')') - if (constitutive_titanmod_rho_screw0(f,instance) < 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='rho_screw0 ('//PLASTICITY_TITANMOD_label//')') - if (constitutive_titanmod_burgersPerSlipFam(f,instance) <= 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='slipburgers ('//PLASTICITY_TITANMOD_label//')') - if (constitutive_titanmod_f0_PerSlipFam(f,instance) <= 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='f0 ('//PLASTICITY_TITANMOD_label//')') - if (constitutive_titanmod_tau0e_PerSlipFam(f,instance) <= 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='tau0e ('//PLASTICITY_TITANMOD_label//')') - if (constitutive_titanmod_tau0s_PerSlipFam(f,instance) <= 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='tau0s ('//PLASTICITY_TITANMOD_label//')') - if (constitutive_titanmod_capre_PerSlipFam(f,instance) <= 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='capre ('//PLASTICITY_TITANMOD_label//')') - if (constitutive_titanmod_caprs_PerSlipFam(f,instance) <= 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='caprs ('//PLASTICITY_TITANMOD_label//')') - if (constitutive_titanmod_v0e_PerSlipFam(f,instance) <= 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='v0e ('//PLASTICITY_TITANMOD_label//')') - if (constitutive_titanmod_v0s_PerSlipFam(f,instance) <= 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='v0s ('//PLASTICITY_TITANMOD_label//')') - if (constitutive_titanmod_kinkcriticallength_PerSlipFam(f,instance) <= 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='kinkCriticalLength ('//PLASTICITY_TITANMOD_label//')') - endif - enddo - do f = 1_pInt,lattice_maxNtwinFamily - if (constitutive_titanmod_Ntwin(f,instance) > 0_pInt) then - if (constitutive_titanmod_burgersPerTwinFam(f,instance) <= 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='twinburgers ('//PLASTICITY_TITANMOD_label//')') - if (constitutive_titanmod_twinf0_PerTwinFam(f,instance) <= 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='twinf0 ('//PLASTICITY_TITANMOD_label//')') - if (constitutive_titanmod_twinshearconstant_PerTwinFam(f,instance) <= 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='twinshearconstant ('//PLASTICITY_TITANMOD_label//')') - if (constitutive_titanmod_twintau0_PerTwinFam(f,instance) <= 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='twintau0 ('//PLASTICITY_TITANMOD_label//')') - if (constitutive_titanmod_twingamma0_PerTwinFam(f,instance) <= 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='twingamma0 ('//PLASTICITY_TITANMOD_label//')') - endif - enddo - if (constitutive_titanmod_dc(instance) <= 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='dc ('//PLASTICITY_TITANMOD_label//')') - if (constitutive_titanmod_twinhpconstant(instance) <= 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='twinhpconstant ('//PLASTICITY_TITANMOD_label//')') - if (constitutive_titanmod_aTolRho(instance) <= 0.0_pReal) & - call IO_error(211_pInt,el=instance,ext_msg='aTol_rho ('//PLASTICITY_TITANMOD_label//')') - -!-------------------------------------------------------------------------------------------------- -! determine total number of active slip or twin systems - constitutive_titanmod_Nslip(:,instance) = min(lattice_NslipSystem(:,phase),constitutive_titanmod_Nslip(:,instance)) - constitutive_titanmod_Ntwin(:,instance) = min(lattice_NtwinSystem(:,phase),constitutive_titanmod_Ntwin(:,instance)) - constitutive_titanmod_totalNslip(instance) = sum(constitutive_titanmod_Nslip(:,instance)) - constitutive_titanmod_totalNtwin(instance) = sum(constitutive_titanmod_Ntwin(:,instance)) - endif myPhase - enddo sanityChecks - -!-------------------------------------------------------------------------------------------------- -! allocation of variables whose size depends on the total number of active slip systems - maxTotalNslip = maxval(constitutive_titanmod_totalNslip) - maxTotalNtwin = maxval(constitutive_titanmod_totalNtwin) - - allocate(constitutive_titanmod_burgersPerSlipSys(maxTotalNslip, maxNinstance), source=0.0_pReal) - - allocate(constitutive_titanmod_f0_PerSlipSys(maxTotalNslip,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_tau0e_PerSlipSys(maxTotalNslip,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_tau0s_PerSlipSys(maxTotalNslip,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_capre_PerSlipSys(maxTotalNslip,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_caprs_PerSlipSys(maxTotalNslip,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_pe_PerSlipSys(maxTotalNslip,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_ps_PerSlipSys(maxTotalNslip,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_qe_PerSlipSys(maxTotalNslip,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_qs_PerSlipSys(maxTotalNslip,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_v0e_PerSlipSys(maxTotalNslip,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_v0s_PerSlipSys(maxTotalNslip,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_kinkcriticallength_PerSlipSys(maxTotalNslip,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_CeLambdaSlipPerSlipSys(maxTotalNslip, maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_CsLambdaSlipPerSlipSys(maxTotalNslip, maxNinstance), source=0.0_pReal) - - allocate(constitutive_titanmod_burgersPerTwinSys(maxTotalNtwin,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_twinf0_PerTwinSys(maxTotalNTwin,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_twinshearconstant_PerTwinSys(maxTotalNTwin,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_twintau0_PerTwinSys(maxTotalNTwin,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_twinp_PerTwinSys(maxTotalNTwin,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_twinq_PerTwinSys(maxTotalNTwin,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_twingamma0_PerTwinSys(maxTotalNTwin,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_twinsizePerTwinSys(maxTotalNtwin, maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_twinLambdaSlipPerTwinSys(maxTotalNtwin, maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_Ctwin66 (6,6,maxTotalNtwin,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_Ctwin3333 (3,3,3,3,maxTotalNtwin,maxNinstance), source=0.0_pReal) - - allocate(constitutive_titanmod_interactionMatrixSlipSlip(maxTotalNslip,maxTotalNslip,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_interactionMatrix_ee(maxTotalNslip,maxTotalNslip,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_interactionMatrix_ss(maxTotalNslip,maxTotalNslip,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_interactionMatrix_es(maxTotalNslip,maxTotalNslip,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_interactionMatrixSlipTwin(maxTotalNslip,maxTotalNtwin,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_interactionMatrixTwinSlip(maxTotalNtwin,maxTotalNslip,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_interactionMatrixTwinTwin(maxTotalNtwin,maxTotalNtwin,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_forestProjectionEdge(maxTotalNslip,maxTotalNslip,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_forestProjectionScrew(maxTotalNslip,maxTotalNslip,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_TwinforestProjectionEdge(maxTotalNtwin,maxTotalNtwin,maxNinstance), source=0.0_pReal) - allocate(constitutive_titanmod_TwinforestProjectionScrew(maxTotalNtwin,maxTotalNtwin,maxNinstance), source=0.0_pReal) - - initializeInstances: do phase = 1_pInt, size(phase_plasticity) - if (phase_plasticity(phase) == PLASTICITY_TITANMOD_ID) then - instance = phase_plasticityInstance(phase) - -!-------------------------------------------------------------------------------------------------- -! inverse lookup of slip system family - l = 0_pInt - do f = 1_pInt,lattice_maxNslipFamily - do s = 1_pInt,constitutive_titanmod_Nslip(f,instance) - l = l + 1_pInt - constitutive_titanmod_slipFamily(l,instance) = f - constitutive_titanmod_slipSystemLattice(l,instance) = sum(lattice_NslipSystem(1:f-1_pInt,phase)) + s - enddo; enddo - -!-------------------------------------------------------------------------------------------------- -! inverse lookup of twin system family - l = 0_pInt - do f = 1_pInt,lattice_maxNtwinFamily - do t = 1_pInt,constitutive_titanmod_Ntwin(f,instance) - l = l + 1_pInt - constitutive_titanmod_twinFamily(l,instance) = f - constitutive_titanmod_twinSystemLattice(l,instance) = sum(lattice_NtwinSystem(1:f-1_pInt,phase)) + t - enddo; enddo - -!-------------------------------------------------------------------------------------------------- -! determine size of state array - ns = constitutive_titanmod_totalNslip(instance) - nt = constitutive_titanmod_totalNtwin(instance) - - sizeDotState = & - size(constitutive_titanmod_listBasicSlipStates)*ns + & - size(constitutive_titanmod_listBasicTwinStates)*nt - sizeState = sizeDotState+ & - size(constitutive_titanmod_listDependentSlipStates)*ns + & - size(constitutive_titanmod_listDependentTwinStates)*nt - -!-------------------------------------------------------------------------------------------------- -! determine size of postResults array - outputsLoop: do o = 1_pInt,constitutive_titanmod_Noutput(instance) - mySize = 0_pInt - select case(constitutive_titanmod_outputID(o,instance)) - case(rhoedge_ID, rhoscrew_ID, & - segment_edge_ID, segment_screw_ID, & - resistance_edge_ID, resistance_screw_ID, & - velocity_edge_ID, velocity_screw_ID, & - tau_slip_ID, & - gdot_slip_edge_ID, gdot_slip_screw_ID, & - gdot_slip_ID, & - stressratio_edge_p_ID, stressratio_screw_p_ID, & - shear_system_ID) - mySize = constitutive_titanmod_totalNslip(instance) - case(twin_fraction_ID) - mySize = constitutive_titanmod_totalNtwin(instance) - case(shear_basal_ID, shear_prism_ID, shear_pyra_ID, shear_pyrca_ID, & ! use only if all 4 slip families in hex are considered - rhoedge_basal_ID, rhoedge_prism_ID, rhoedge_pyra_ID, rhoedge_pyrca_ID, & - rhoscrew_basal_ID, rhoscrew_prism_ID, rhoscrew_pyra_ID, rhoscrew_pyrca_ID, & - shear_total_ID) - mySize = 1_pInt - case default - call IO_error(105_pInt,ext_msg=constitutive_titanmod_output(o,instance)// & - ' ('//PLASTICITY_TITANMOD_label//')') - end select - - outputFound: if (mySize > 0_pInt) then - constitutive_titanmod_sizePostResult(o,instance) = mySize - constitutive_titanmod_sizePostResults(instance) = constitutive_titanmod_sizePostResults(instance) + mySize - endif outputFound - enddo outputsLoop -! Determine size of state array - plasticState(phase)%sizeState = sizeState - plasticState(phase)%sizeDotState = sizeDotState - plasticState(phase)%sizePostResults = constitutive_titanmod_sizePostResults(instance) - allocate(plasticState(phase)%aTolState (sizeState), source=constitutive_titanmod_aTolRho(instance)) - allocate(plasticState(phase)%state0 (sizeState,NofMyPhase), source=0.0_pReal) - allocate(plasticState(phase)%partionedState0 (sizeState,NofMyPhase), source=0.0_pReal) - allocate(plasticState(phase)%subState0 (sizeState,NofMyPhase), source=0.0_pReal) - allocate(plasticState(phase)%state (sizeState,NofMyPhase), source=0.0_pReal) - allocate(plasticState(phase)%state_backup (sizeState,NofMyPhase), source=0.0_pReal) - - allocate(plasticState(phase)%dotState (sizeDotState,NofMyPhase), source=0.0_pReal) - allocate(plasticState(phase)%deltaState (sizeDotState,NofMyPhase), source=0.0_pReal) - allocate(plasticState(phase)%dotState_backup (sizeDotState,NofMyPhase), source=0.0_pReal) - if (any(numerics_integrator == 1_pInt)) then - allocate(plasticState(phase)%previousDotState (sizeDotState,NofMyPhase), source=0.0_pReal) - allocate(plasticState(phase)%previousDotState2 (sizeDotState,NofMyPhase), source=0.0_pReal) - endif - if (any(numerics_integrator == 4_pInt)) & - allocate(plasticState(phase)%RK4dotState (sizeDotState,NofMyPhase), source=0.0_pReal) - if (any(numerics_integrator == 5_pInt)) & - allocate(plasticState(phase)%RKCK45dotState (6,sizeDotState,NofMyPhase),source=0.0_pReal) -!-------------------------------------------------------------------------------------------------- -! construction of the twin elasticity matrices - do j=1_pInt,lattice_maxNtwinFamily - do k=1_pInt,constitutive_titanmod_Ntwin(j,instance) - do l=1_pInt,3_pInt ; do m=1_pInt,3_pInt ; do n=1_pInt,3_pInt ; do o=1_pInt,3_pInt - do p=1_pInt,3_pInt ; do q=1_pInt,3_pInt ; do r=1_pInt,3_pInt ; do s=1_pInt,3_pInt - constitutive_titanmod_Ctwin3333(l,m,n,o,sum(constitutive_titanmod_Nslip(1:j-1_pInt,instance))+k,instance) = & - constitutive_titanmod_Ctwin3333(l,m,n,o,sum(constitutive_titanmod_Nslip(1:j-1_pInt,instance))+k,instance) + & - lattice_C3333(p,q,r,s,phase)*& - lattice_Qtwin(l,p,sum(lattice_NslipSystem(1:j-1_pInt,phase))+k,phase)* & - lattice_Qtwin(m,q,sum(lattice_NslipSystem(1:j-1_pInt,phase))+k,phase)* & - lattice_Qtwin(n,r,sum(lattice_NslipSystem(1:j-1_pInt,phase))+k,phase)* & - lattice_Qtwin(o,s,sum(lattice_NslipSystem(1:j-1_pInt,phase))+k,phase) - enddo; enddo; enddo; enddo - enddo; enddo; enddo ; enddo - constitutive_titanmod_Ctwin66(1:6,1:6,k,instance) = & - math_Mandel3333to66(constitutive_titanmod_Ctwin3333(1:3,1:3,1:3,1:3,k,instance)) - enddo; enddo - -!-------------------------------------------------------------------------------------------------- -! Burgers vector, dislocation velocity prefactor for each slip system - do s = 1_pInt,constitutive_titanmod_totalNslip(instance) - f = constitutive_titanmod_slipFamily(s,instance) - - constitutive_titanmod_burgersPerSlipSys(s,instance) = & - constitutive_titanmod_burgersPerSlipFam(f,instance) - - constitutive_titanmod_f0_PerSlipSys(s,instance) = & - constitutive_titanmod_f0_PerSlipFam(f,instance) - - constitutive_titanmod_tau0e_PerSlipSys(s,instance) = & - constitutive_titanmod_tau0e_PerSlipFam(f,instance) - - constitutive_titanmod_tau0s_PerSlipSys(s,instance) = & - constitutive_titanmod_tau0s_PerSlipFam(f,instance) - - constitutive_titanmod_capre_PerSlipSys(s,instance) = & - constitutive_titanmod_capre_PerSlipFam(f,instance) - - constitutive_titanmod_caprs_PerSlipSys(s,instance) = & - constitutive_titanmod_caprs_PerSlipFam(f,instance) - - constitutive_titanmod_v0e_PerSlipSys(s,instance) = & - constitutive_titanmod_v0e_PerSlipFam(f,instance) - - constitutive_titanmod_v0s_PerSlipSys(s,instance) = & - constitutive_titanmod_v0s_PerSlipFam(f,instance) - - constitutive_titanmod_kinkcriticallength_PerSlipSys(s,instance) = & - constitutive_titanmod_kinkcriticallength_PerSlipFam(f,instance) - - constitutive_titanmod_pe_PerSlipSys(s,instance) = & - constitutive_titanmod_pe_PerSlipFam(f,instance) - - constitutive_titanmod_ps_PerSlipSys(s,instance) = & - constitutive_titanmod_ps_PerSlipFam(f,instance) - - constitutive_titanmod_qe_PerSlipSys(s,instance) = & - constitutive_titanmod_qe_PerSlipFam(f,instance) - - constitutive_titanmod_qs_PerSlipSys(s,instance) = & - constitutive_titanmod_qs_PerSlipFam(f,instance) - - constitutive_titanmod_CeLambdaSlipPerSlipSys(s,instance) = & - constitutive_titanmod_CeLambdaSlipPerSlipFam(f,instance) - - constitutive_titanmod_CsLambdaSlipPerSlipSys(s,instance) = & - constitutive_titanmod_CsLambdaSlipPerSlipFam(f,instance) - enddo - -!-------------------------------------------------------------------------------------------------- -! Burgers vector, nucleation rate prefactor and twin size for each twin system - do t = 1_pInt,constitutive_titanmod_totalNtwin(instance) - f = constitutive_titanmod_twinFamily(t,instance) - - constitutive_titanmod_burgersPerTwinSys(t,instance) = & - constitutive_titanmod_burgersPerTwinFam(f,instance) - - constitutive_titanmod_twinsizePerTwinSys(t,instance) = & - constitutive_titanmod_twinsizePerTwinFam(f,instance) - - constitutive_titanmod_twinf0_PerTwinSys(t,instance) = & - constitutive_titanmod_twinf0_PerTwinFam(f,instance) - - constitutive_titanmod_twinshearconstant_PerTwinSys(t,instance) = & - constitutive_titanmod_twinshearconstant_PerTwinFam(f,instance) - - constitutive_titanmod_twintau0_PerTwinSys(t,instance) = & - constitutive_titanmod_twintau0_PerTwinFam(f,instance) - - constitutive_titanmod_twingamma0_PerTwinSys(t,instance) = & - constitutive_titanmod_twingamma0_PerTwinFam(f,instance) - - constitutive_titanmod_twinp_PerTwinSys(t,instance) = & - constitutive_titanmod_twinp_PerTwinFam(f,instance) - - constitutive_titanmod_twinq_PerTwinSys(t,instance) = & - constitutive_titanmod_twinq_PerTwinFam(f,instance) - - constitutive_titanmod_twinLambdaSlipPerTwinSys(t,instance) = & - constitutive_titanmod_twinLambdaSlipPerTwinFam(f,instance) - enddo - -!-------------------------------------------------------------------------------------------------- -! Construction of interaction matrices - do s1 = 1_pInt,constitutive_titanmod_totalNslip(instance) - do s2 = 1_pInt,constitutive_titanmod_totalNslip(instance) - constitutive_titanmod_interactionMatrixSlipSlip(s1,s2,instance) = & - constitutive_titanmod_interactionSlipSlip(lattice_interactionSlipSlip( & - constitutive_titanmod_slipSystemLattice(s1,instance),& - constitutive_titanmod_slipSystemLattice(s2,instance),phase),instance) - - constitutive_titanmod_interactionMatrix_ee(s1,s2,instance) = & - constitutive_titanmod_interaction_ee(lattice_interactionSlipSlip ( & - constitutive_titanmod_slipSystemLattice(s1,instance), & - constitutive_titanmod_slipSystemLattice(s2,instance), phase),instance) - - constitutive_titanmod_interactionMatrix_ss(s1,s2,instance) = & - constitutive_titanmod_interaction_ss(lattice_interactionSlipSlip( & - constitutive_titanmod_slipSystemLattice(s1,instance), & - constitutive_titanmod_slipSystemLattice(s2,instance), phase),instance) - - constitutive_titanmod_interactionMatrix_es(s1,s2,instance) = & - constitutive_titanmod_interaction_es(lattice_interactionSlipSlip( & - constitutive_titanmod_slipSystemLattice(s1,instance), & - constitutive_titanmod_slipSystemLattice(s2,instance), phase),instance) - enddo; enddo - - do s1 = 1_pInt,constitutive_titanmod_totalNslip(instance) - do t2 = 1_pInt,constitutive_titanmod_totalNtwin(instance) - constitutive_titanmod_interactionMatrixSlipTwin(s1,t2,instance) = & - constitutive_titanmod_interactionSlipTwin(lattice_interactionSlipTwin( & - constitutive_titanmod_slipSystemLattice(s1,instance), & - constitutive_titanmod_twinSystemLattice(t2,instance), phase),instance) - enddo; enddo - - do t1 = 1_pInt,constitutive_titanmod_totalNtwin(instance) - do s2 = 1_pInt,constitutive_titanmod_totalNslip(instance) - constitutive_titanmod_interactionMatrixTwinSlip(t1,s2,instance) = & - constitutive_titanmod_interactionTwinSlip(lattice_interactionTwinSlip( & - constitutive_titanmod_twinSystemLattice(t1,instance), & - constitutive_titanmod_slipSystemLattice(s2,instance), phase),instance) - enddo; enddo - - do t1 = 1_pInt,constitutive_titanmod_totalNtwin(instance) - do t2 = 1_pInt,constitutive_titanmod_totalNtwin(instance) - constitutive_titanmod_interactionMatrixTwinTwin(t1,t2,instance) = & - constitutive_titanmod_interactionTwinTwin(lattice_interactionTwinTwin( & - constitutive_titanmod_twinSystemLattice(t1,instance), & - constitutive_titanmod_twinSystemLattice(t2,instance), phase),instance) - enddo; enddo - - do s1 = 1_pInt,constitutive_titanmod_totalNslip(instance) - do s2 = 1_pInt,constitutive_titanmod_totalNslip(instance) -!-------------------------------------------------------------------------------------------------- -! calculation of forest projections for edge dislocations - constitutive_titanmod_forestProjectionEdge(s1,s2,instance) = & - abs(math_mul3x3(lattice_sn(:,constitutive_titanmod_slipSystemLattice(s1,instance),phase), & - lattice_st(:,constitutive_titanmod_slipSystemLattice(s2,instance),phase))) - -!-------------------------------------------------------------------------------------------------- -! calculation of forest projections for screw dislocations - constitutive_titanmod_forestProjectionScrew(s1,s2,instance) = & - abs(math_mul3x3(lattice_sn(:,constitutive_titanmod_slipSystemLattice(s1,instance),phase), & - lattice_sd(:,constitutive_titanmod_slipSystemLattice(s2,instance),phase))) - enddo; enddo - -!-------------------------------------------------------------------------------------------------- -! calculation of forest projections for edge dislocations in twin system - do t1 = 1_pInt,constitutive_titanmod_totalNtwin(instance) - do t2 = 1_pInt,constitutive_titanmod_totalNtwin(instance) - constitutive_titanmod_TwinforestProjectionEdge(t1,t2,instance) = & - abs(math_mul3x3(lattice_tn(:,constitutive_titanmod_twinSystemLattice(t1,instance),phase), & - lattice_tt(:,constitutive_titanmod_twinSystemLattice(t2,instance),phase))) - -!-------------------------------------------------------------------------------------------------- -! calculation of forest projections for screw dislocations in twin system - constitutive_titanmod_TwinforestProjectionScrew(t1,t2,instance) = & - abs(math_mul3x3(lattice_tn(:,constitutive_titanmod_twinSystemLattice(t1,instance),phase), & - lattice_td(:,constitutive_titanmod_twinSystemLattice(t2,instance),phase))) - enddo; enddo - call constitutive_titanmod_stateInit(phase,instance) - endif - enddo initializeInstances - -end subroutine constitutive_titanmod_init - - -!-------------------------------------------------------------------------------------------------- -!> @brief sets the initial microstructural state for a given instance of this plasticity -!-------------------------------------------------------------------------------------------------- -subroutine constitutive_titanmod_stateInit(ph,instance) - use lattice, only: & - lattice_maxNslipFamily, & - lattice_maxNtwinFamily, & - lattice_mu - - use material, only: & - plasticState, & - mappingConstitutive - - implicit none - integer(pInt), intent(in) :: instance !< number specifying the instance of the plasticity - integer(pInt), intent(in) :: ph !< number specifying the phase of the plasticity - - - integer(pInt) :: & - s,s0,s1, & - t,t0,t1, & - ns,nt,f - real(pReal), dimension(constitutive_titanmod_totalNslip(instance)) :: & - rho_edge0, & - rho_screw0, & - shear_system0, & - segment_edge0, & - segment_screw0, & - resistance_edge0, & - resistance_screw0 - real(pReal), dimension(constitutive_titanmod_totalNtwin(instance)) :: & - twingamma_dot0, & - resistance_twin0 - real(pReal), dimension(plasticState(ph)%sizeState) :: tempState !!!!!!!!!????????? check - - ns = constitutive_titanmod_totalNslip(instance) - nt = constitutive_titanmod_totalNtwin(instance) - - tempState = 0.0_pReal -!-------------------------------------------------------------------------------------------------- -! initialize basic slip state variables for slip - s1 = 0_pInt - do f = 1_pInt,lattice_maxNslipFamily - s0 = s1 + 1_pInt - s1 = s0 + constitutive_titanmod_Nslip(f,instance) - 1_pInt - do s = s0,s1 - rho_edge0(s) = constitutive_titanmod_rho_edge0(f,instance) - rho_screw0(s) = constitutive_titanmod_rho_screw0(f,instance) - shear_system0(s) = 0.0_pReal - enddo - enddo - -!-------------------------------------------------------------------------------------------------- -! initialize basic slip state variables for twin - t1 = 0_pInt - do f = 1_pInt,lattice_maxNtwinFamily - t0 = t1 + 1_pInt - t1 = t0 + constitutive_titanmod_Ntwin(f,instance) - 1_pInt - do t = t0,t1 - twingamma_dot0(t)=0.0_pReal - enddo - enddo - -!-------------------------------------------------------------------------------------------------- -! initialize dependent slip microstructural variables - forall (s = 1_pInt:ns) - segment_edge0(s) = constitutive_titanmod_CeLambdaSlipPerSlipSys(s,instance)/ & - sqrt(dot_product((rho_edge0),constitutive_titanmod_forestProjectionEdge(1:ns,s,instance))+ & - dot_product((rho_screw0),constitutive_titanmod_forestProjectionScrew(1:ns,s,instance))) - segment_screw0(s) = constitutive_titanmod_CsLambdaSlipPerSlipSys(s,instance)/ & - sqrt(dot_product((rho_edge0),constitutive_titanmod_forestProjectionEdge(1:ns,s,instance))+ & - dot_product((rho_screw0),constitutive_titanmod_forestProjectionScrew(1:ns,s,instance))) - resistance_edge0(s) = & - lattice_mu(ph)*constitutive_titanmod_burgersPerSlipSys(s,instance)* & - sqrt(dot_product((rho_edge0),constitutive_titanmod_interactionMatrix_ee(1:ns,s,instance))+ & - dot_product((rho_screw0),constitutive_titanmod_interactionMatrix_es(1:ns,s,instance))) - resistance_screw0(s) = & - lattice_mu(ph)*constitutive_titanmod_burgersPerSlipSys(s,instance)* & - sqrt(dot_product((rho_edge0),constitutive_titanmod_interactionMatrix_es(1:ns,s,instance))+ & - dot_product((rho_screw0), constitutive_titanmod_interactionMatrix_ss(1:ns,s,instance))) - end forall - - forall (t = 1_pInt:nt) & - resistance_twin0(t) = 0.0_pReal - -tempState = 0.0_pReal -tempState (1:ns) = rho_edge0 -tempState (1_pInt*ns+1_pInt:2_pInt*ns) = rho_screw0 -tempState (2_pInt*ns+1_pInt:3_pInt*ns) = shear_system0 -tempState (3_pInt*ns+1_pInt:3_pInt*ns+nt) = twingamma_dot0 -tempState (3_pInt*ns+nt+1_pInt:4_pInt*ns+nt) = segment_edge0 -tempState (4_pInt*ns+nt+1_pInt:5_pInt*ns+nt) = segment_screw0 -tempState (5_pInt*ns+nt+1_pInt:6_pInt*ns+nt) = resistance_edge0 -tempState (6_pInt*ns+nt+1_pInt:7_pInt*ns+nt) = resistance_screw0 -tempState (7_pInt*ns+nt+1_pInt:7_pInt*ns+2_pInt*nt)=resistance_twin0 - -plasticState(ph)%state0 = spread(tempState,2,size(plasticState(ph)%state(1,:))) -end subroutine constitutive_titanmod_stateInit - -!-------------------------------------------------------------------------------------------------- -!> @brief returns the homogenized elasticity matrix -!-------------------------------------------------------------------------------------------------- -function constitutive_titanmod_homogenizedC(ipc,ip,el) - use mesh, only: & - mesh_NcpElems, & - mesh_maxNips - use material, only: & - homogenization_maxNgrains, & - material_phase, & - phase_plasticityInstance, & - plasticState, & - mappingConstitutive - use lattice, only: & - lattice_C66 - -implicit none - real(pReal), dimension(6,6) :: & - constitutive_titanmod_homogenizedC - integer(pInt), intent(in) :: & - ipc, & !< component-ID of integration point - ip, & !< integration point - el !< element -real(pReal), dimension(constitutive_titanmod_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & - volumefraction_PerTwinSys - integer(pInt) :: & - ph, & - of, & - instance, & - ns, nt, & - i - real(pReal) :: & - sumf - -!-------------------------------------------------------------------------------------------------- -! shortened notation -! ph = material_phase(ipc,ip,el) - of = mappingConstitutive(1,ipc,ip,el) - ph = mappingConstitutive(2,ipc,ip,el) - instance = phase_plasticityInstance(ph) - ns = constitutive_titanmod_totalNslip(instance) - nt = constitutive_titanmod_totalNtwin(instance) - -!-------------------------------------------------------------------------------------------------- -! total twin volume fraction - do i=1_pInt,nt - volumefraction_PerTwinSys(i)=plasticState(ph)%state(3_pInt*ns+i, of)/ & - constitutive_titanmod_twinshearconstant_PerTwinSys(i,instance) - enddo - sumf = sum(abs(volumefraction_PerTwinSys(1:nt))) ! safe for nt == 0 - -!-------------------------------------------------------------------------------------------------- -! homogenized elasticity matrix - constitutive_titanmod_homogenizedC = (1.0_pReal-sumf)*lattice_C66(1:6,1:6,ph) - do i=1_pInt,nt - constitutive_titanmod_homogenizedC = constitutive_titanmod_homogenizedC & - + volumefraction_PerTwinSys(i)*& - constitutive_titanmod_Ctwin66(1:6,1:6,i,instance) - enddo - -end function constitutive_titanmod_homogenizedC - - -!-------------------------------------------------------------------------------------------------- -!> @brief calculates derived quantities from state -!-------------------------------------------------------------------------------------------------- -subroutine constitutive_titanmod_microstructure(temperature,ipc,ip,el) - - use mesh, only: & - mesh_NcpElems, & - mesh_maxNips - use material, only: & - homogenization_maxNgrains, & - material_phase,& - phase_plasticityInstance, & - plasticState, & - mappingConstitutive - use lattice, only: & - lattice_mu - - implicit none - integer(pInt), intent(in) :: & - ipc, & !< component-ID of integration point - ip, & !< integration point - el !< element - real(pReal), intent(in) :: & - temperature !< temperature at IP - integer(pInt) :: & - instance, & - ns, nt, s, t, & - i, & - ph, & - of - real(pReal) :: & - sumf, & - sfe ! stacking fault energy - real(pReal), dimension(constitutive_titanmod_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & - volumefraction_PerTwinSys - -!-------------------------------------------------------------------------------------------------- - -!Shortened notation - - of = mappingConstitutive(1,ipc,ip,el) - ph = mappingConstitutive(2,ipc,ip,el) - instance = phase_plasticityInstance(ph) - ns = constitutive_titanmod_totalNslip(instance) - nt = constitutive_titanmod_totalNtwin(instance) - -!-------------------------------------------------------------------------------------------------- -! total twin volume fraction - forall (i = 1_pInt:nt) & - volumefraction_PerTwinSys(i)=plasticState(ph)%state(3_pInt*ns+i, of)/ & - constitutive_titanmod_twinshearconstant_PerTwinSys(i,instance) - - sumf = sum(abs(volumefraction_PerTwinSys(1:nt))) ! safe for nt == 0 - - sfe = 0.0002_pReal*Temperature-0.0396_pReal - -!-------------------------------------------------------------------------------------------------- -! average segment length for edge dislocations in matrix - forall (s = 1_pInt:ns) & - plasticState(ph)%state(3_pInt*ns+nt+s, of) = constitutive_titanmod_CeLambdaSlipPerSlipSys(s,instance)/ & - sqrt(dot_product(plasticState(ph)%state(1:ns, of), & - constitutive_titanmod_forestProjectionEdge(1:ns,s,instance))+ & - dot_product(plasticState(ph)%state(ns+1_pInt:2_pInt*ns, of), & - constitutive_titanmod_forestProjectionScrew(1:ns,s,instance))) -!-------------------------------------------------------------------------------------------------- -! average segment length for screw dislocations in matrix - forall (s = 1_pInt:ns) & - plasticState(ph)%state(4_pInt*ns+nt+s, of) = constitutive_titanmod_CsLambdaSlipPerSlipSys(s,instance)/ & - sqrt(dot_product(plasticState(ph)%state(1:ns, of), & - constitutive_titanmod_forestProjectionEdge(1:ns,s,instance))+ & - dot_product(plasticState(ph)%state(ns+1_pInt:2_pInt*ns, of), & - constitutive_titanmod_forestProjectionScrew(1:ns,s,instance))) -!-------------------------------------------------------------------------------------------------- -! threshold stress or slip resistance for edge dislocation motion - forall (s = 1_pInt:ns) & - plasticState(ph)%state(5_pInt*ns+nt+s, of) = & - lattice_mu(ph)*constitutive_titanmod_burgersPerSlipSys(s,instance)*& - sqrt(dot_product((plasticState(ph)%state(1:ns, of)),& - constitutive_titanmod_interactionMatrix_ee(1:ns,s,instance))+ & - dot_product((plasticState(ph)%state(ns+1_pInt:2_pInt*ns, of)),& - constitutive_titanmod_interactionMatrix_es(1:ns,s,instance))) -!-------------------------------------------------------------------------------------------------- -! threshold stress or slip resistance for screw dislocation motion - forall (s = 1_pInt:ns) & - plasticState(ph)%state(6_pInt*ns+nt+s, of) = & - lattice_mu(ph)*constitutive_titanmod_burgersPerSlipSys(s,instance)*& - sqrt(dot_product((plasticState(ph)%state(1:ns, of)),& - constitutive_titanmod_interactionMatrix_es(1:ns,s,instance))+ & - dot_product((plasticState(ph)%state(ns+1_pInt:2_pInt*ns, of)),& - constitutive_titanmod_interactionMatrix_ss(1:ns,s,instance))) -!-------------------------------------------------------------------------------------------------- -! threshold stress or slip resistance for dislocation motion in twin - forall (t = 1_pInt:nt) & - plasticState(ph)%state(7_pInt*ns+nt+t, of) = & - lattice_mu(ph)*constitutive_titanmod_burgersPerTwinSys(t,instance)*& - (dot_product((abs(plasticState(ph)%state(2_pInt*ns+1_pInt:2_pInt*ns+nt, of))),& - constitutive_titanmod_interactionMatrixTwinTwin(1:nt,t,instance))) - -! state=tempState - -end subroutine constitutive_titanmod_microstructure - - -!-------------------------------------------------------------------------------------------------- -!> @brief calculates plastic velocity gradient and its tangent -!-------------------------------------------------------------------------------------------------- -subroutine constitutive_titanmod_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,temperature,slipDamage,ipc,ip,el) - use math, only: & - math_Plain3333to99, & - math_Mandel6to33 - use lattice, only: & - lattice_Sslip, & - lattice_Sslip_v, & - lattice_Stwin, & - lattice_Stwin_v, & - lattice_maxNslipFamily, & - lattice_maxNtwinFamily, & - lattice_NslipSystem, & - lattice_NtwinSystem, & - lattice_structure, & - LATTICE_hex_ID - use mesh, only: & - mesh_NcpElems, & - mesh_maxNips - use material, only: & - homogenization_maxNgrains, & - material_phase, & - phase_plasticityInstance, & - plasticState, & - mappingConstitutive - - implicit none - real(pReal), dimension(3,3), intent(out) :: & - Lp !< plastic velocity gradient - real(pReal), dimension(9,9), intent(out) :: & - dLp_dTstar99 !< derivative of Lp with respect to 2nd Piola Kirchhoff stress - - integer(pInt), intent(in) :: & - ipc, & !< component-ID of integration point - ip, & !< integration point - el !< element - real(pReal), dimension(6), intent(in) :: & - Tstar_v !< 2nd Piola Kirchhoff stress tensor in Mandel notation - real(pReal), intent(in) :: & - temperature !< temperature at IP - real(pReal), & - dimension(constitutive_titanmod_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))), & - intent(in) :: & - slipDamage - integer(pInt) :: & - index_myFamily, instance, & - ns,nt, & - f,i,j,k,l,m,n, & - ph, & - of - real(pReal) :: sumf, & - StressRatio_edge_p, minusStressRatio_edge_p, StressRatio_edge_pminus1, BoltzmannRatioedge, & - StressRatio_screw_p, minusStressRatio_screw_p, StressRatio_screw_pminus1, BoltzmannRatioscrew, & - twinStressRatio_p, twinminusStressRatio_p, twinStressRatio_pminus1, BoltzmannRatiotwin, & - twinDotGamma0, bottomstress_edge, bottomstress_screw, screwvelocity_prefactor - real(pReal), dimension(3,3,3,3) :: dLp_dTstar3333 - real(pReal), dimension(constitutive_titanmod_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & - gdot_slip,dgdot_dtauslip,tau_slip, & - edge_velocity, screw_velocity, & - gdot_slip_edge, gdot_slip_screw - real(pReal), dimension(constitutive_titanmod_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & - gdot_twin,dgdot_dtautwin,tau_twin, volumefraction_PerTwinSys - -! tempState=state - - - -!-------------------------------------------------------------------------------------------------- -! shortened notation - of = mappingConstitutive(1,ipc,ip,el) - ph = mappingConstitutive(2,ipc,ip,el) - instance = phase_plasticityInstance(ph) - ns = constitutive_titanmod_totalNslip(instance) - nt = constitutive_titanmod_totalNtwin(instance) - - do i=1_pInt,nt - volumefraction_PerTwinSys(i)=plasticState(ph)%state(3_pInt*ns+i, of)/ & - constitutive_titanmod_twinshearconstant_PerTwinSys(i,instance) - - enddo - - sumf = sum(abs(volumefraction_PerTwinSys(1:nt))) ! safe for nt == 0 - - - Lp = 0.0_pReal - dLp_dTstar3333 = 0.0_pReal - dLp_dTstar99 = 0.0_pReal - - !* Dislocation glide part - gdot_slip = 0.0_pReal - gdot_slip_edge = 0.0_pReal - gdot_slip_screw = 0.0_pReal - dgdot_dtauslip = 0.0_pReal - j = 0_pInt - slipFamiliesLoop: do f = 1_pInt,lattice_maxNslipFamily - index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family - do i = 1_pInt,constitutive_titanmod_Nslip(f,instance) ! process each (active) slip system in family - j = j+1_pInt - - !* Calculation of Lp - !* Resolved shear stress on slip system - tau_slip(j) = dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,ph))/slipDamage(j) - if(lattice_structure(ph)==LATTICE_hex_ID) then ! only for prismatic and pyr systems in hex - screwvelocity_prefactor=constitutive_titanmod_debyefrequency(instance)* & - plasticState(ph)%state(4_pInt*ns+nt+j, of)*(constitutive_titanmod_burgersPerSlipSys(j,instance)/ & - constitutive_titanmod_kinkcriticallength_PerSlipSys(j,instance))**2 - - !* Stress ratio for screw ! No slip resistance for screw dislocations, only Peierls stress - bottomstress_screw=constitutive_titanmod_tau0s_PerSlipSys(j,instance) - StressRatio_screw_p = ((abs(tau_slip(j)))/ & - ( bottomstress_screw) & - )**constitutive_titanmod_ps_PerSlipSys(j,instance) - - if((1.0_pReal-StressRatio_screw_p)>0.001_pReal) then - minusStressRatio_screw_p=1.0_pReal-StressRatio_screw_p - else - minusStressRatio_screw_p=0.001_pReal - endif - - bottomstress_screw=constitutive_titanmod_tau0s_PerSlipSys(j,instance) - StressRatio_screw_pminus1 = ((abs(tau_slip(j)))/ & - ( bottomstress_screw) & - )**(constitutive_titanmod_ps_PerSlipSys(j,instance)-1.0_pReal) - - !* Boltzmann ratio for screw - BoltzmannRatioscrew = constitutive_titanmod_kinkf0(instance)/(kB*Temperature) - - else ! if the structure is not hex or the slip family is basal - screwvelocity_prefactor=constitutive_titanmod_v0s_PerSlipSys(j,instance) - bottomstress_screw=constitutive_titanmod_tau0s_PerSlipSys(j,instance)+ & - plasticState(ph)%state(6*ns+nt+j, of) - StressRatio_screw_p = ((abs(tau_slip(j)))/( bottomstress_screw ))**constitutive_titanmod_ps_PerSlipSys(j,instance) - - if((1.0_pReal-StressRatio_screw_p)>0.001_pReal) then - minusStressRatio_screw_p=1.0_pReal-StressRatio_screw_p - else - minusStressRatio_screw_p=0.001_pReal - endif - - StressRatio_screw_pminus1 = ((abs(tau_slip(j)))/( bottomstress_screw))** & - (constitutive_titanmod_ps_PerSlipSys(j,instance)-1.0_pReal) - - !* Boltzmann ratio for screw - BoltzmannRatioscrew = constitutive_titanmod_f0_PerSlipSys(j,instance)/(kB*Temperature) - - endif - - !* Stress ratio for edge - bottomstress_edge=constitutive_titanmod_tau0e_PerSlipSys(j,instance)+ & - plasticState(ph)%state(5*ns+nt+j, of) - StressRatio_edge_p = ((abs(tau_slip(j)))/ & - ( bottomstress_edge) & - )**constitutive_titanmod_pe_PerSlipSys(j,instance) - - if((1.0_pReal-StressRatio_edge_p)>0.001_pReal) then - minusStressRatio_edge_p=1.0_pReal-StressRatio_edge_p - else - minusStressRatio_edge_p=0.001_pReal - endif - - StressRatio_edge_pminus1 = ((abs(tau_slip(j)))/( bottomstress_edge))** & - (constitutive_titanmod_pe_PerSlipSys(j,instance)-1.0_pReal) - - !* Boltzmann ratio for edge. For screws it is defined above - BoltzmannRatioedge = constitutive_titanmod_f0_PerSlipSys(j,instance)/(kB*Temperature) - - screw_velocity(j) =screwvelocity_prefactor * & ! there is no v0 for screw now because it is included in the prefactor - exp(-BoltzmannRatioscrew*(minusStressRatio_screw_p)** & - constitutive_titanmod_qs_PerSlipSys(j,instance)) - - edge_velocity(j) =constitutive_titanmod_v0e_PerSlipSys(j,instance)*exp(-BoltzmannRatioedge* & - (minusStressRatio_edge_p)** & - constitutive_titanmod_qe_PerSlipSys(j,instance)) - - !* Shear rates due to edge slip - gdot_slip_edge(j) = constitutive_titanmod_burgersPerSlipSys(j,instance)*(plasticState(ph)%state(j, of)* & - edge_velocity(j))* sign(1.0_pReal,tau_slip(j)) - !* Shear rates due to screw slip - gdot_slip_screw(j) = constitutive_titanmod_burgersPerSlipSys(j,instance)*(plasticState(ph)%state(ns+j, of) * & - screw_velocity(j))* sign(1.0_pReal,tau_slip(j)) - !Total shear rate - - gdot_slip(j) = gdot_slip_edge(j) + gdot_slip_screw(j) - - plasticState(ph)%state( 7*ns+2*nt+j, of)= edge_velocity(j) - plasticState(ph)%state( 8*ns+2*nt+j, of)= screw_velocity(j) - plasticState(ph)%state( 9*ns+2*nt+j, of)= tau_slip(j) - plasticState(ph)%state(10*ns+2*nt+j, of)= gdot_slip_edge(j) - plasticState(ph)%state(11*ns+2*nt+j, of)= gdot_slip_screw(j) - plasticState(ph)%state(12*ns+2*nt+j, of)= StressRatio_edge_p - plasticState(ph)%state(13*ns+2*nt+j, of)= StressRatio_screw_p - - !* Derivatives of shear rates - dgdot_dtauslip(j) = constitutive_titanmod_burgersPerSlipSys(j,instance)*(( & - ( & - ( & - ( & - (edge_velocity(j)*plasticState(ph)%state(j, of))) * & - BoltzmannRatioedge*& - constitutive_titanmod_pe_PerSlipSys(j,instance)* & - constitutive_titanmod_qe_PerSlipSys(j,instance) & - )/ & - bottomstress_edge & - )*& - StressRatio_edge_pminus1*(minusStressRatio_edge_p)** & - (constitutive_titanmod_qe_PerSlipSys(j,instance)-1.0_pReal) & - ) + & - ( & - ( & - ( & - (plasticState(ph)%state(ns+j, of) * screw_velocity(j)) * & - BoltzmannRatioscrew* & - constitutive_titanmod_ps_PerSlipSys(j,instance)* & - constitutive_titanmod_qs_PerSlipSys(j,instance) & - )/ & - bottomstress_screw & - )*& - StressRatio_screw_pminus1*(minusStressRatio_screw_p)**(constitutive_titanmod_qs_PerSlipSys(j,instance)-1.0_pReal) & - ) & - ) !* sign(1.0_pReal,tau_slip(j)) - - - -!************************************************* -!sumf=0.0_pReal - !* Plastic velocity gradient for dislocation glide - Lp = Lp + (1.0_pReal - sumf)*gdot_slip(j)*lattice_Sslip(1:3,1:3,1,index_myFamily+i,ph) - - !* Calculation of the tangent of Lp - forall (k=1_pInt:3_pInt,l=1_pInt:3_pInt,m=1_pInt:3_pInt,n=1_pInt:3_pInt) & - dLp_dTstar3333(k,l,m,n) = & - dLp_dTstar3333(k,l,m,n) + dgdot_dtauslip(j)*& - lattice_Sslip(k,l,1,index_myFamily+i,ph)*& - lattice_Sslip(m,n,1,index_myFamily+i,ph) - enddo - enddo slipFamiliesLoop - -!* Mechanical twinning part - gdot_twin = 0.0_pReal - dgdot_dtautwin = 0.0_pReal - j = 0_pInt - twinFamiliesLoop: do f = 1_pInt,lattice_maxNtwinFamily - index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,ph)) ! at which index starts my family - do i = 1_pInt,constitutive_titanmod_Ntwin(f,instance) ! process each (active) slip system in family - j = j+1_pInt - - !* Calculation of Lp - !* Resolved shear stress on twin system - tau_twin(j) = dot_product(Tstar_v,lattice_Stwin_v(:,index_myFamily+i,ph)) - -!************************************************************************************** - !* Stress ratios -! StressRatio_r = (plasticState(ph)%state6*ns+3*nt+j, of)/tau_twin(j))**constitutive_titanmod_r(instance) - - !* Shear rates and their derivatives due to twin -! if ( tau_twin(j) > 0.0_pReal ) !then -! gdot_twin(j) = 0.0_pReal!& -! (constitutive_titanmod_MaxTwinFraction(instance)-sumf)*lattice_shearTwin(index_myFamily+i,ph)*& -! plasticState(ph)%state(6*ns+4*nt+j, of)*constitutive_titanmod_Ndot0PerTwinSys(f,instance)*exp(-StressRatio_r) -! dgdot_dtautwin(j) = ((gdot_twin(j)*constitutive_titanmod_r(instance))/tau_twin(j))*StressRatio_r -! endif -!************************************************************************************** - - !* Stress ratio for edge - twinStressRatio_p = ((abs(tau_twin(j)))/ & - ( constitutive_titanmod_twintau0_PerTwinSys(j,instance)+plasticState(ph)%state(7*ns+nt+j, of)) & - )**constitutive_titanmod_twinp_PerTwinSys(j,instance) - - if((1.0_pReal-twinStressRatio_p)>0.001_pReal) then - twinminusStressRatio_p=1.0_pReal-twinStressRatio_p - else - twinminusStressRatio_p=0.001_pReal - endif - - twinStressRatio_pminus1 = ((abs(tau_twin(j)))/ & - ( constitutive_titanmod_twintau0_PerTwinSys(j,instance)+plasticState(ph)%state(7*ns+nt+j, of)) & - )**(constitutive_titanmod_twinp_PerTwinSys(j,instance)-1.0_pReal) - - !* Boltzmann ratio - BoltzmannRatiotwin = constitutive_titanmod_twinf0_PerTwinSys(j,instance)/(kB*Temperature) - - !* Initial twin shear rates - TwinDotGamma0 = & - constitutive_titanmod_twingamma0_PerTwinSys(j,instance) - - !* Shear rates due to twin - gdot_twin(j) =sign(1.0_pReal,tau_twin(j))*constitutive_titanmod_twingamma0_PerTwinSys(j,instance)* & - exp(-BoltzmannRatiotwin*(twinminusStressRatio_p)**constitutive_titanmod_twinq_PerTwinSys(j,instance)) - - - !* Derivatives of shear rates in twin - dgdot_dtautwin(j) = ( & - ( & - ( & - (abs(gdot_twin(j))) * & - BoltzmannRatiotwin*& - constitutive_titanmod_twinp_PerTwinSys(j,instance)* & - constitutive_titanmod_twinq_PerTwinSys(j,instance) & - )/ & - constitutive_titanmod_twintau0_PerTwinSys(j,instance) & - )*& - twinStressRatio_pminus1*(twinminusStressRatio_p)** & - (constitutive_titanmod_twinq_PerTwinSys(j,instance)-1.0_pReal) & - ) !* sign(1.0_pReal,tau_slip(j)) - - !* Plastic velocity gradient for mechanical twinning -! Lp = Lp + sumf*gdot_twin(j)*lattice_Stwin(:,:,index_myFamily+i,ph) - Lp = Lp + gdot_twin(j)*lattice_Stwin(:,:,index_myFamily+i,ph) - - !* Calculation of the tangent of Lp - forall (k=1_pInt:3_pInt,l=1_pInt:3_pInt,m=1_pInt:3_pInt,n=1_pInt:3_pInt) & - dLp_dTstar3333(k,l,m,n) = & - dLp_dTstar3333(k,l,m,n) + dgdot_dtautwin(j)*& - lattice_Stwin(k,l,index_myFamily+i,ph)*& - lattice_Stwin(m,n,index_myFamily+i,ph) - enddo - enddo twinFamiliesLoop - -dLp_dTstar99 = math_Plain3333to99(dLp_dTstar3333) -! tempState=state - - -end subroutine constitutive_titanmod_LpAndItsTangent - - -!-------------------------------------------------------------------------------------------------- -!> @brief calculates the rate of change of microstructure -!-------------------------------------------------------------------------------------------------- -subroutine constitutive_titanmod_dotState(Tstar_v,temperature,ipc,ip,el) - use lattice, only: & - lattice_Stwin_v, & - lattice_maxNslipFamily, & - lattice_maxNtwinFamily, & - lattice_NslipSystem, & - lattice_NtwinSystem - use mesh, only: & - mesh_NcpElems, & - mesh_maxNips - use material, only: & - homogenization_maxNgrains, & - material_phase, & - phase_plasticityInstance, & - plasticState, & - mappingConstitutive - -implicit none - real(pReal), dimension(6), intent(in):: & - Tstar_v !< 2nd Piola Kirchhoff stress tensor in Mandel notation - real(pReal), intent(in) :: & - temperature !< temperature at integration point - integer(pInt), intent(in) :: & - ipc, & !< component-ID of integration point - ip, & !< integration point - el !< element - - integer(pInt) :: & - index_myFamily, instance, & - ns,nt,& - f,i,j, & - ph, & - of - real(pReal) :: & - sumf,BoltzmannRatio, & - twinStressRatio_p,twinminusStressRatio_p - real(pReal), dimension(constitutive_titanmod_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & - DotRhoEdgeGeneration, & - DotRhoEdgeAnnihilation, & - DotRhoScrewGeneration, & - DotRhoScrewAnnihilation - real(pReal), dimension(constitutive_titanmod_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & - gdot_twin, & - tau_twin, & - volumefraction_PerTwinSys - -!-------------------------------------------------------------------------------------------------- -! shortened notation - - of = mappingConstitutive(1,ipc,ip,el) - ph = mappingConstitutive(2,ipc,ip,el) - instance = phase_plasticityInstance(ph) - ns = constitutive_titanmod_totalNslip(instance) - nt = constitutive_titanmod_totalNtwin(instance) - do i=1_pInt,nt - volumefraction_PerTwinSys(i)=plasticState(ph)%state(3_pInt*ns+i, of)/ & - constitutive_titanmod_twinshearconstant_PerTwinSys(i,instance) - - enddo - - sumf = sum(abs(volumefraction_PerTwinSys(1_pInt:nt))) ! safe for nt == 0 - - plasticState(ph)%dotState(:,of) = 0.0_pReal - j = 0_pInt - slipFamiliesLoop: do f = 1_pInt,lattice_maxNslipFamily - index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family - do i = 1_pInt,constitutive_titanmod_Nslip(f,instance) ! process each (active) slip system in family - j = j+1_pInt - - DotRhoEdgeGeneration(j) = & ! multiplication of edge dislocations - plasticState(ph)%state(ns+j, of)*plasticState(ph)%state(8*ns+2*nt+j, of)/plasticState(ph)%state(4*ns+nt+j, of) - DotRhoScrewGeneration(j) = & ! multiplication of screw dislocations - plasticState(ph)%state(j, of)*plasticState(ph)%state(7*ns+2*nt+j, of)/plasticState(ph)%state(3*ns+nt+j, of) - DotRhoEdgeAnnihilation(j) = -((plasticState(ph)%state(j, of))**2)* & ! annihilation of edge dislocations - constitutive_titanmod_capre_PerSlipSys(j,instance)*plasticState(ph)%state(7*ns+2*nt+j, of)*0.5_pReal - DotRhoScrewAnnihilation(j) = -((plasticState(ph)%state(ns+j, of))**2)* & ! annihilation of screw dislocations - constitutive_titanmod_caprs_PerSlipSys(j,instance)*plasticState(ph)%state(8*ns+2*nt+j, of)*0.5_pReal - plasticState(ph)%dotState(j, of) = & ! edge dislocation density rate of change - DotRhoEdgeGeneration(j)+DotRhoEdgeAnnihilation(j) - - plasticState(ph)%dotState(ns+j, of) = & ! screw dislocation density rate of change - DotRhoScrewGeneration(j)+DotRhoScrewAnnihilation(j) - - plasticState(ph)%dotState(2*ns+j, of) = & ! sum of shear due to edge and screw - plasticState(ph)%state(10*ns+2*nt+j, of)+plasticState(ph)%state(11*ns+2*nt+j, of) - enddo - enddo slipFamiliesLoop - -!* Twin fraction evolution - j = 0_pInt - twinFamiliesLoop: do f = 1_pInt,lattice_maxNtwinFamily - index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,ph)) ! at which index starts my family - do i = 1_pInt,constitutive_titanmod_Ntwin(f,instance) ! process each (active) twin system in family - j = j+1_pInt - - !* Resolved shear stress on twin system - tau_twin(j) = dot_product(Tstar_v,lattice_Stwin_v(:,index_myFamily+i,ph)) - - !* Stress ratio for edge - twinStressRatio_p = ((abs(tau_twin(j)))/ & - ( constitutive_titanmod_twintau0_PerTwinSys(j,instance)+plasticState(ph)%state(7*ns+nt+j, of)) & - )**(constitutive_titanmod_twinp_PerTwinSys(j,instance)) - - - if((1.0_pReal-twinStressRatio_p)>0.001_pReal) then - twinminusStressRatio_p=1.0_pReal-twinStressRatio_p - else - twinminusStressRatio_p=0.001_pReal - endif - - BoltzmannRatio = constitutive_titanmod_twinf0_PerTwinSys(j,instance)/(kB*Temperature) - - gdot_twin(j) =constitutive_titanmod_twingamma0_PerTwinSys(j,instance)*exp(-BoltzmannRatio* & - (twinminusStressRatio_p)** & - constitutive_titanmod_twinq_PerTwinSys(j,instance))*sign(1.0_pReal,tau_twin(j)) - - plasticState(ph)%dotState(3*ns+j, of)=gdot_twin(j) - - enddo - enddo twinFamiliesLoop - -end subroutine constitutive_titanmod_dotState -!-------------------------------------------------------------------------------------------------- -!> @brief returns accumulated slip -!-------------------------------------------------------------------------------------------------- -subroutine constitutive_titanmod_getAccumulatedSlip(nSlip,accumulatedSlip,ipc, ip, el) - use lattice, only: & - lattice_maxNslipFamily - use material, only: & - mappingConstitutive, & - plasticState, & - phase_plasticityInstance - - implicit none - - real(pReal), dimension(:), allocatable :: & - accumulatedSlip - integer(pInt) :: & - nSlip - integer(pInt), intent(in) :: & - ipc, & !< grain number - ip, & !< integration point number - el !< element number - integer(pInt) :: & - offset, & - phase, & - instance, & - offset_accshear_slip, & - f, j, i - - offset = mappingConstitutive(1,ipc,ip,el) - phase = mappingConstitutive(2,ipc,ip,el) - instance = phase_plasticityInstance(phase) - nSlip = constitutive_titanmod_totalNslip(instance) - allocate(accumulatedSlip(nSlip)) - offset_accshear_slip = 2_pInt*nSlip - - j = 0_pInt - do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families - do i = 1_pInt,constitutive_titanmod_Nslip(f,instance) ! process each (active) slip system in family - j = j+1_pInt - accumulatedSlip(j) = plasticState(phase)%state(offset_accshear_slip+j,offset) - enddo - enddo - -end subroutine constitutive_titanmod_getAccumulatedSlip - - -!-------------------------------------------------------------------------------------------------- -!> @brief returns accumulated slip -!-------------------------------------------------------------------------------------------------- -subroutine constitutive_titanmod_getSlipRate(nSlip,slipRate,ipc, ip, el) - use lattice, only: & - lattice_maxNslipFamily - use material, only: & - mappingConstitutive, & - plasticState, & - phase_plasticityInstance - - implicit none - - real(pReal), dimension(:), allocatable :: & - slipRate - integer(pInt) :: & - nSlip - integer(pInt), intent(in) :: & - ipc, & !< grain number - ip, & !< integration point number - el !< element number - integer(pInt) :: & - offset, & - phase, & - instance, & - offset_accshear_slip, & - f, j, i - - offset = mappingConstitutive(1,ipc,ip,el) - phase = mappingConstitutive(2,ipc,ip,el) - instance = phase_plasticityInstance(phase) - nSlip = constitutive_titanmod_totalNslip(instance) - allocate(slipRate(nSlip)) - offset_accshear_slip = 2_pInt*nSlip - - j = 0_pInt - do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families - do i = 1_pInt,constitutive_titanmod_Nslip(f,instance) ! process each (active) slip system in family - j = j+1_pInt - slipRate(j) = plasticState(phase)%dotState(offset_accshear_slip+j,offset) - enddo - enddo - -end subroutine constitutive_titanmod_getSlipRate - - -!-------------------------------------------------------------------------------------------------- -!> @brief return array of constitutive results -!-------------------------------------------------------------------------------------------------- -function constitutive_titanmod_postResults(ipc,ip,el) - use mesh, only: & - mesh_NcpElems, & - mesh_maxNips - use material, only: & - homogenization_maxNgrains, & - material_phase, & - phase_plasticityInstance, & - phase_Noutput, & - plasticState, & - mappingConstitutive - - implicit none - integer(pInt), intent(in) :: & - ipc, & !< component-ID of integration point - ip, & !< integration point - el !< element - real(pReal), dimension(constitutive_titanmod_sizePostResults(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & - constitutive_titanmod_postResults - - integer(pInt) :: & - instance, & - ns,nt,& - o,i,c, & - ph, & - of - real(pReal) :: sumf - - real(pReal), dimension(constitutive_titanmod_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & - volumefraction_PerTwinSys - -!-------------------------------------------------------------------------------------------------- -! shortened notation - of = mappingConstitutive(1,ipc,ip,el) - ph = mappingConstitutive(2,ipc,ip,el) - instance = phase_plasticityInstance(ph) - ns = constitutive_titanmod_totalNslip(instance) - nt = constitutive_titanmod_totalNtwin(instance) - - do i=1_pInt,nt - volumefraction_PerTwinSys(i)=plasticState(ph)%state(3_pInt*ns+i, of)/ & - constitutive_titanmod_twinshearconstant_PerTwinSys(i,instance) - enddo - - sumf = sum(abs(volumefraction_PerTwinSys(1:nt))) ! safe for nt == 0 - - -!-------------------------------------------------------------------------------------------------- -! required output - c = 0_pInt - constitutive_titanmod_postResults = 0.0_pReal - - do o = 1_pInt,constitutive_titanmod_Noutput(instance) - select case(constitutive_titanmod_outputID(o,instance)) - case (rhoedge_ID) - constitutive_titanmod_postResults(c+1_pInt:c+ns) = plasticState(ph)%state(1_pInt:ns, of) - c = c + ns - case (rhoscrew_ID) - constitutive_titanmod_postResults(c+1_pInt:c+ns) = plasticState(ph)%state(ns+1_pInt:2_pInt*ns, of) - c = c + ns - case (segment_edge_ID) - constitutive_titanmod_postResults(c+1_pInt:c+ns) = plasticState(ph)%state(3_pInt*ns+nt+1_pInt:4_pInt*ns+nt, of) - c = c + ns - case (segment_screw_ID) - constitutive_titanmod_postResults(c+1_pInt:c+ns) = plasticState(ph)%state(4_pInt*ns+nt+1_pInt:5_pInt*ns+nt, of) - c = c + ns - case (resistance_edge_ID) - constitutive_titanmod_postResults(c+1_pInt:c+ns) = plasticState(ph)%state(5_pInt*ns+nt+1_pInt:6_pInt*ns+nt, of) - c = c + ns - case (resistance_screw_ID) - constitutive_titanmod_postResults(c+1_pInt:c+ns) = plasticState(ph)%state(6_pInt*ns+nt+1_pInt:7_pInt*ns+nt, of) - c = c + ns - case (velocity_edge_ID) - constitutive_titanmod_postResults(c+1_pInt:c+ns) = plasticState(ph)%state(7*ns+2*nt+1:8*ns+2*nt, of) - c = c + ns - case (velocity_screw_ID) - constitutive_titanmod_postResults(c+1_pInt:c+ns) = plasticState(ph)%state(8*ns+2*nt+1:9*ns+2*nt, of) - c = c + ns - case (tau_slip_ID) - constitutive_titanmod_postResults(c+1_pInt:c+ns) = abs(plasticState(ph)%state(9*ns+2*nt+1:10*ns+2*nt, of)) - c = c + ns - case (gdot_slip_edge_ID) - constitutive_titanmod_postResults(c+1_pInt:c+ns) = abs(plasticState(ph)%state(10*ns+2*nt+1:11*ns+2*nt, of)) - c = c + ns - case (gdot_slip_screw_ID) - constitutive_titanmod_postResults(c+1_pInt:c+ns) = abs(plasticState(ph)%state(11*ns+2*nt+1:12*ns+2*nt, of)) - c = c + ns - case (gdot_slip_ID) - constitutive_titanmod_postResults(c+1_pInt:c+ns) = abs(plasticState(ph)%state(10*ns+2*nt+1:11*ns+2*nt, of)) + & - abs(plasticState(ph)%state(11*ns+2*nt+1:12*ns+2*nt, of)) - c = c + ns - case (stressratio_edge_p_ID) - constitutive_titanmod_postResults(c+1_pInt:c+ns) = abs(plasticState(ph)%state(12*ns+2*nt+1:13*ns+2*nt, of)) - c = c + ns - case (stressratio_screw_p_ID) - constitutive_titanmod_postResults(c+1_pInt:c+ns) = abs(plasticState(ph)%state(13*ns+2*nt+1:14*ns+2*nt, of)) - c = c + ns - case (shear_system_ID) - constitutive_titanmod_postResults(c+1_pInt:c+ns) = abs(plasticState(ph)%state(2*ns+1:3*ns, of)) - c = c + ns - case (shear_basal_ID) - constitutive_titanmod_postResults(c+1_pInt:c+1_pInt) = sum(abs(plasticState(ph)%state(2*ns+1:2*ns+3, of))) - c = c + 1_pInt - case (shear_prism_ID) - constitutive_titanmod_postResults(c+1_pInt:c+1_pInt) = sum(abs(plasticState(ph)%state(2*ns+4:2*ns+6, of))) - c = c + 1_pInt - case (shear_pyra_ID) - constitutive_titanmod_postResults(c+1_pInt:c+1_pInt) = sum(abs(plasticState(ph)%state(2*ns+7:2*ns+12, of))) - c = c + 1_pInt - case (shear_pyrca_ID) - constitutive_titanmod_postResults(c+1_pInt:c+1_pInt) = sum(abs(plasticState(ph)%state(2*ns+13:2*ns+24, of))) - c = c + 1_pInt - - case (rhoedge_basal_ID) - constitutive_titanmod_postResults(c+1_pInt:c+1_pInt) = sum(plasticState(ph)%state(1:3, of)) - c = c + 1_pInt - case (rhoedge_prism_ID) - constitutive_titanmod_postResults(c+1_pInt:c+1_pInt) = sum(plasticState(ph)%state(4:6, of)) - c = c + 1_pInt - case (rhoedge_pyra_ID) - constitutive_titanmod_postResults(c+1_pInt:c+1_pInt) = sum(plasticState(ph)%state(7:12,of)) - c = c + 1_pInt - case (rhoedge_pyrca_ID) - constitutive_titanmod_postResults(c+1_pInt:c+1_pInt) = sum(plasticState(ph)%state(13:24, of)) - c = c + 1_pInt - - case (rhoscrew_basal_ID) - constitutive_titanmod_postResults(c+1_pInt:c+1_pInt) = sum(plasticState(ph)%state(ns+1:ns+3, of)) - c = c + 1_pInt - case (rhoscrew_prism_ID) - constitutive_titanmod_postResults(c+1_pInt:c+1_pInt) = sum(plasticState(ph)%state(ns+4:ns+6, of)) - c = c + 1_pInt - case (rhoscrew_pyra_ID) - constitutive_titanmod_postResults(c+1_pInt:c+1_pInt) = sum(plasticState(ph)%state(ns+7:ns+12, of)) - c = c + 1_pInt - case (rhoscrew_pyrca_ID) - constitutive_titanmod_postResults(c+1_pInt:c+1_pInt) = sum(plasticState(ph)%state(ns+13:ns+24, of)) - c = c + 1_pInt - case (shear_total_ID) - constitutive_titanmod_postResults(c+1_pInt:c+1_pInt) = sum(abs(plasticState(ph)%state(2*ns+1:3*ns, of))) - c = c + 1_pInt - case (twin_fraction_ID) - constitutive_titanmod_postResults(c+1_pInt:c+nt) = abs(volumefraction_PerTwinSys(1:nt)) - c = c + nt - end select - enddo - -end function constitutive_titanmod_postResults - -end module constitutive_titanmod diff --git a/code/crystallite.f90 b/code/crystallite.f90 index 7b17593e0..a49a9b890 100644 --- a/code/crystallite.f90 +++ b/code/crystallite.f90 @@ -3991,8 +3991,8 @@ subroutine crystallite_orientations use lattice, only: & lattice_qDisorientation, & lattice_structure - use constitutive_nonlocal, only: & - constitutive_nonlocal_updateCompatibility + use plastic_nonlocal, only: & + plastic_nonlocal_updateCompatibility implicit none @@ -4073,7 +4073,7 @@ subroutine crystallite_orientations ! --- calculate compatibility and transmissivity between me and my neighbor --- - call constitutive_nonlocal_updateCompatibility(crystallite_orientation,i,e) + call plastic_nonlocal_updateCompatibility(crystallite_orientation,i,e) endif enddo diff --git a/code/constitutive_dislokmc.f90 b/code/plastic_dislokmc.f90 similarity index 55% rename from code/constitutive_dislokmc.f90 rename to code/plastic_dislokmc.f90 index 5729ed657..0f52a7eee 100644 --- a/code/constitutive_dislokmc.f90 +++ b/code/plastic_dislokmc.f90 @@ -8,7 +8,7 @@ !> @brief material subroutine incoprorating dislocation and twinning physics !> @details to be done !-------------------------------------------------------------------------------------------------- -module constitutive_dislokmc +module plastic_dislokmc use prec, only: & pReal, & pInt @@ -16,102 +16,102 @@ module constitutive_dislokmc implicit none private integer(pInt), dimension(:), allocatable, public, protected :: & - constitutive_dislokmc_sizePostResults !< cumulative size of post results + plastic_dislokmc_sizePostResults !< cumulative size of post results integer(pInt), dimension(:,:), allocatable, target, public :: & - constitutive_dislokmc_sizePostResult !< size of each post result output + plastic_dislokmc_sizePostResult !< size of each post result output character(len=64), dimension(:,:), allocatable, target, public :: & - constitutive_dislokmc_output !< name of each post result output + plastic_dislokmc_output !< name of each post result output character(len=12), dimension(3), parameter, private :: & - CONSTITUTIVE_DISLOKMC_listBasicSlipStates = & + plastic_dislokmc_listBasicSlipStates = & ['rhoEdge ', 'rhoEdgeDip ', 'accshearslip'] character(len=12), dimension(2), parameter, private :: & - CONSTITUTIVE_DISLOKMC_listBasicTwinStates = & + plastic_dislokmc_listBasicTwinStates = & ['twinFraction', 'accsheartwin'] character(len=17), dimension(4), parameter, private :: & - CONSTITUTIVE_DISLOKMC_listDependentSlipStates = & + plastic_dislokmc_listDependentSlipStates = & ['invLambdaSlip ', 'invLambdaSlipTwin', 'meanFreePathSlip ', 'tauSlipThreshold '] character(len=16), dimension(4), parameter, private :: & - CONSTITUTIVE_DISLOKMC_listDependentTwinStates = & + plastic_dislokmc_listDependentTwinStates = & ['invLambdaTwin ', 'meanFreePathTwin', 'tauTwinThreshold', 'twinVolume '] real(pReal), parameter, private :: & kB = 1.38e-23_pReal !< Boltzmann constant in J/Kelvin integer(pInt), dimension(:), allocatable, target, public :: & - constitutive_dislokmc_Noutput !< number of outputs per instance of this plasticity + plastic_dislokmc_Noutput !< number of outputs per instance of this plasticity integer(pInt), dimension(:), allocatable, public, protected :: & - constitutive_dislokmc_totalNslip, & !< total number of active slip systems for each instance - constitutive_dislokmc_totalNtwin !< total number of active twin systems for each instance + plastic_dislokmc_totalNslip, & !< total number of active slip systems for each instance + plastic_dislokmc_totalNtwin !< total number of active twin systems for each instance integer(pInt), dimension(:,:), allocatable, private :: & - constitutive_dislokmc_Nslip, & !< number of active slip systems for each family and instance - constitutive_dislokmc_Ntwin !< number of active twin systems for each family and instance + plastic_dislokmc_Nslip, & !< number of active slip systems for each family and instance + plastic_dislokmc_Ntwin !< number of active twin systems for each family and instance real(pReal), dimension(:), allocatable, private :: & - constitutive_dislokmc_CAtomicVolume, & !< atomic volume in Bugers vector unit - constitutive_dislokmc_D0, & !< prefactor for self-diffusion coefficient - constitutive_dislokmc_Qsd, & !< activation energy for dislocation climb - constitutive_dislokmc_GrainSize, & !< grain size - constitutive_dislokmc_MaxTwinFraction, & !< maximum allowed total twin volume fraction - constitutive_dislokmc_CEdgeDipMinDistance, & !< - constitutive_dislokmc_Cmfptwin, & !< - constitutive_dislokmc_Cthresholdtwin, & !< - constitutive_dislokmc_SolidSolutionStrength, & !< Strength due to elements in solid solution - constitutive_dislokmc_L0, & !< Length of twin nuclei in Burgers vectors - constitutive_dislokmc_xc, & !< critical distance for formation of twin nucleus - constitutive_dislokmc_VcrossSlip, & !< cross slip volume - constitutive_dislokmc_SFE_0K, & !< stacking fault energy at zero K - constitutive_dislokmc_dSFE_dT, & !< temperature dependance of stacking fault energy - constitutive_dislokmc_dipoleFormationFactor, & !< scaling factor for dipole formation: 0: off, 1: on. other values not useful - constitutive_dislokmc_aTolRho, & !< absolute tolerance for integration of dislocation density - constitutive_dislokmc_aTolTwinFrac !< absolute tolerance for integration of twin volume fraction + plastic_dislokmc_CAtomicVolume, & !< atomic volume in Bugers vector unit + plastic_dislokmc_D0, & !< prefactor for self-diffusion coefficient + plastic_dislokmc_Qsd, & !< activation energy for dislocation climb + plastic_dislokmc_GrainSize, & !< grain size + plastic_dislokmc_MaxTwinFraction, & !< maximum allowed total twin volume fraction + plastic_dislokmc_CEdgeDipMinDistance, & !< + plastic_dislokmc_Cmfptwin, & !< + plastic_dislokmc_Cthresholdtwin, & !< + plastic_dislokmc_SolidSolutionStrength, & !< Strength due to elements in solid solution + plastic_dislokmc_L0, & !< Length of twin nuclei in Burgers vectors + plastic_dislokmc_xc, & !< critical distance for formation of twin nucleus + plastic_dislokmc_VcrossSlip, & !< cross slip volume + plastic_dislokmc_SFE_0K, & !< stacking fault energy at zero K + plastic_dislokmc_dSFE_dT, & !< temperature dependance of stacking fault energy + plastic_dislokmc_dipoleFormationFactor, & !< scaling factor for dipole formation: 0: off, 1: on. other values not useful + plastic_dislokmc_aTolRho, & !< absolute tolerance for integration of dislocation density + plastic_dislokmc_aTolTwinFrac !< absolute tolerance for integration of twin volume fraction real(pReal), dimension(:,:,:,:), allocatable, private :: & - constitutive_dislokmc_Ctwin66 !< twin elasticity matrix in Mandel notation for each instance + plastic_dislokmc_Ctwin66 !< twin elasticity matrix in Mandel notation for each instance real(pReal), dimension(:,:,:,:,:,:), allocatable, private :: & - constitutive_dislokmc_Ctwin3333 !< twin elasticity matrix for each instance + plastic_dislokmc_Ctwin3333 !< twin elasticity matrix for each instance real(pReal), dimension(:,:), allocatable, private :: & - constitutive_dislokmc_rhoEdge0, & !< initial edge dislocation density per slip system for each family and instance - constitutive_dislokmc_rhoEdgeDip0, & !< initial edge dipole density per slip system for each family and instance - constitutive_dislokmc_burgersPerSlipFamily, & !< absolute length of burgers vector [m] for each slip family and instance - constitutive_dislokmc_burgersPerSlipSystem, & !< absolute length of burgers vector [m] for each slip system and instance - constitutive_dislokmc_burgersPerTwinFamily, & !< absolute length of burgers vector [m] for each twin family and instance - constitutive_dislokmc_burgersPerTwinSystem, & !< absolute length of burgers vector [m] for each twin system and instance - constitutive_dislokmc_QedgePerSlipFamily, & !< activation energy for glide [J] for each slip family and instance - constitutive_dislokmc_QedgePerSlipSystem, & !< activation energy for glide [J] for each slip system and instance - constitutive_dislokmc_v0PerSlipFamily, & !< dislocation velocity prefactor [m/s] for each family and instance - constitutive_dislokmc_v0PerSlipSystem, & !< dislocation velocity prefactor [m/s] for each slip system and instance - constitutive_dislokmc_tau_peierlsPerSlipFamily, & !< Peierls stress [Pa] for each family and instance - constitutive_dislokmc_Ndot0PerTwinFamily, & !< twin nucleation rate [1/m³s] for each twin family and instance - constitutive_dislokmc_Ndot0PerTwinSystem, & !< twin nucleation rate [1/m³s] for each twin system and instance - constitutive_dislokmc_tau_r, & !< stress to bring partial close together for each twin system and instance - constitutive_dislokmc_twinsizePerTwinFamily, & !< twin thickness [m] for each twin family and instance - constitutive_dislokmc_twinsizePerTwinSystem, & !< twin thickness [m] for each twin system and instance - constitutive_dislokmc_CLambdaSlipPerSlipFamily, & !< Adj. parameter for distance between 2 forest dislocations for each slip family and instance - constitutive_dislokmc_CLambdaSlipPerSlipSystem, & !< Adj. parameter for distance between 2 forest dislocations for each slip system and instance - constitutive_dislokmc_interaction_SlipSlip, & !< coefficients for slip-slip interaction for each interaction type and instance - constitutive_dislokmc_interaction_SlipTwin, & !< coefficients for slip-twin interaction for each interaction type and instance - constitutive_dislokmc_interaction_TwinSlip, & !< coefficients for twin-slip interaction for each interaction type and instance - constitutive_dislokmc_interaction_TwinTwin, & !< coefficients for twin-twin interaction for each interaction type and instance - constitutive_dislokmc_pPerSlipFamily, & !< p-exponent in glide velocity - constitutive_dislokmc_qPerSlipFamily, & !< q-exponent in glide velocity - constitutive_dislokmc_uPerSlipFamily, & !< u-exponent in glide velocity - constitutive_dislokmc_sPerSlipFamily, & !< self-hardening in glide velocity - constitutive_dislokmc_rPerTwinFamily, & !< r-exponent in twin nucleation rate - constitutive_dislokmc_nonSchmidCoeff !< non-Schmid coefficients (bcc) + plastic_dislokmc_rhoEdge0, & !< initial edge dislocation density per slip system for each family and instance + plastic_dislokmc_rhoEdgeDip0, & !< initial edge dipole density per slip system for each family and instance + plastic_dislokmc_burgersPerSlipFamily, & !< absolute length of burgers vector [m] for each slip family and instance + plastic_dislokmc_burgersPerSlipSystem, & !< absolute length of burgers vector [m] for each slip system and instance + plastic_dislokmc_burgersPerTwinFamily, & !< absolute length of burgers vector [m] for each twin family and instance + plastic_dislokmc_burgersPerTwinSystem, & !< absolute length of burgers vector [m] for each twin system and instance + plastic_dislokmc_QedgePerSlipFamily, & !< activation energy for glide [J] for each slip family and instance + plastic_dislokmc_QedgePerSlipSystem, & !< activation energy for glide [J] for each slip system and instance + plastic_dislokmc_v0PerSlipFamily, & !< dislocation velocity prefactor [m/s] for each family and instance + plastic_dislokmc_v0PerSlipSystem, & !< dislocation velocity prefactor [m/s] for each slip system and instance + plastic_dislokmc_tau_peierlsPerSlipFamily, & !< Peierls stress [Pa] for each family and instance + plastic_dislokmc_Ndot0PerTwinFamily, & !< twin nucleation rate [1/m³s] for each twin family and instance + plastic_dislokmc_Ndot0PerTwinSystem, & !< twin nucleation rate [1/m³s] for each twin system and instance + plastic_dislokmc_tau_r, & !< stress to bring partial close together for each twin system and instance + plastic_dislokmc_twinsizePerTwinFamily, & !< twin thickness [m] for each twin family and instance + plastic_dislokmc_twinsizePerTwinSystem, & !< twin thickness [m] for each twin system and instance + plastic_dislokmc_CLambdaSlipPerSlipFamily, & !< Adj. parameter for distance between 2 forest dislocations for each slip family and instance + plastic_dislokmc_CLambdaSlipPerSlipSystem, & !< Adj. parameter for distance between 2 forest dislocations for each slip system and instance + plastic_dislokmc_interaction_SlipSlip, & !< coefficients for slip-slip interaction for each interaction type and instance + plastic_dislokmc_interaction_SlipTwin, & !< coefficients for slip-twin interaction for each interaction type and instance + plastic_dislokmc_interaction_TwinSlip, & !< coefficients for twin-slip interaction for each interaction type and instance + plastic_dislokmc_interaction_TwinTwin, & !< coefficients for twin-twin interaction for each interaction type and instance + plastic_dislokmc_pPerSlipFamily, & !< p-exponent in glide velocity + plastic_dislokmc_qPerSlipFamily, & !< q-exponent in glide velocity + plastic_dislokmc_uPerSlipFamily, & !< u-exponent in glide velocity + plastic_dislokmc_sPerSlipFamily, & !< self-hardening in glide velocity + plastic_dislokmc_rPerTwinFamily, & !< r-exponent in twin nucleation rate + plastic_dislokmc_nonSchmidCoeff !< non-Schmid coefficients (bcc) real(pReal), dimension(:,:,:), allocatable, private :: & - constitutive_dislokmc_interactionMatrix_SlipSlip, & !< interaction matrix of the different slip systems for each instance - constitutive_dislokmc_interactionMatrix_SlipTwin, & !< interaction matrix of slip systems with twin systems for each instance - constitutive_dislokmc_interactionMatrix_TwinSlip, & !< interaction matrix of twin systems with slip systems for each instance - constitutive_dislokmc_interactionMatrix_TwinTwin, & !< interaction matrix of the different twin systems for each instance - constitutive_dislokmc_forestProjectionEdge !< matrix of forest projections of edge dislocations for each instance + plastic_dislokmc_interactionMatrix_SlipSlip, & !< interaction matrix of the different slip systems for each instance + plastic_dislokmc_interactionMatrix_SlipTwin, & !< interaction matrix of slip systems with twin systems for each instance + plastic_dislokmc_interactionMatrix_TwinSlip, & !< interaction matrix of twin systems with slip systems for each instance + plastic_dislokmc_interactionMatrix_TwinTwin, & !< interaction matrix of the different twin systems for each instance + plastic_dislokmc_forestProjectionEdge !< matrix of forest projections of edge dislocations for each instance enum, bind(c) enumerator :: undefined_ID, & @@ -132,21 +132,21 @@ module constitutive_dislokmc threshold_stress_twin_ID end enum integer(kind(undefined_ID)), dimension(:,:), allocatable, private :: & - constitutive_dislokmc_outputID !< ID of each post result output + plastic_dislokmc_outputID !< ID of each post result output public :: & - constitutive_dislokmc_init, & - constitutive_dislokmc_homogenizedC, & - constitutive_dislokmc_microstructure, & - constitutive_dislokmc_LpAndItsTangent, & - constitutive_dislokmc_dotState, & - constitutive_dislokmc_getAccumulatedSlip, & - constitutive_dislokmc_getSlipRate, & - constitutive_dislokmc_postResults + plastic_dislokmc_init, & + plastic_dislokmc_homogenizedC, & + plastic_dislokmc_microstructure, & + plastic_dislokmc_LpAndItsTangent, & + plastic_dislokmc_dotState, & + plastic_dislokmc_getAccumulatedSlip, & + plastic_dislokmc_getSlipRate, & + plastic_dislokmc_postResults private :: & - constitutive_dislokmc_stateInit, & - constitutive_dislokmc_aTolState + plastic_dislokmc_stateInit, & + plastic_dislokmc_aTolState contains @@ -155,7 +155,7 @@ contains !> @brief module initialization !> @details reads in material parameters, allocates arrays, and does sanity checks !-------------------------------------------------------------------------------------------------- -subroutine constitutive_dislokmc_init(fileUnit) +subroutine plastic_dislokmc_init(fileUnit) use, intrinsic :: iso_fortran_env ! to get compiler_version and compiler_options (at least for gfortran 4.6 at the moment) use debug, only: & debug_level,& @@ -224,65 +224,65 @@ subroutine constitutive_dislokmc_init(fileUnit) if (iand(debug_level(debug_constitutive),debug_levelBasic) /= 0_pInt) & write(6,'(a16,1x,i5,/)') '# instances:',maxNinstance - allocate(constitutive_dislokmc_sizePostResults(maxNinstance), source=0_pInt) - allocate(constitutive_dislokmc_sizePostResult(maxval(phase_Noutput),maxNinstance),source=0_pInt) - allocate(constitutive_dislokmc_output(maxval(phase_Noutput),maxNinstance)) - constitutive_dislokmc_output = '' - allocate(constitutive_dislokmc_outputID(maxval(phase_Noutput),maxNinstance), source=undefined_ID) - allocate(constitutive_dislokmc_Noutput(maxNinstance), source=0_pInt) - allocate(constitutive_dislokmc_Nslip(lattice_maxNslipFamily,maxNinstance), source=0_pInt) - allocate(constitutive_dislokmc_Ntwin(lattice_maxNtwinFamily,maxNinstance), source=0_pInt) - allocate(constitutive_dislokmc_totalNslip(maxNinstance), source=0_pInt) - allocate(constitutive_dislokmc_totalNtwin(maxNinstance), source=0_pInt) - allocate(constitutive_dislokmc_CAtomicVolume(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_D0(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_Qsd(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_GrainSize(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_MaxTwinFraction(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_CEdgeDipMinDistance(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_Cmfptwin(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_Cthresholdtwin(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_SolidSolutionStrength(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_L0(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_xc(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_VcrossSlip(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_aTolRho(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_aTolTwinFrac(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_SFE_0K(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_dSFE_dT(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_dipoleFormationFactor(maxNinstance), source=1.0_pReal) !should be on by default - allocate(constitutive_dislokmc_rhoEdge0(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_rhoEdgeDip0(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_burgersPerSlipFamily(lattice_maxNslipFamily,maxNinstance), & + allocate(plastic_dislokmc_sizePostResults(maxNinstance), source=0_pInt) + allocate(plastic_dislokmc_sizePostResult(maxval(phase_Noutput),maxNinstance),source=0_pInt) + allocate(plastic_dislokmc_output(maxval(phase_Noutput),maxNinstance)) + plastic_dislokmc_output = '' + allocate(plastic_dislokmc_outputID(maxval(phase_Noutput),maxNinstance), source=undefined_ID) + allocate(plastic_dislokmc_Noutput(maxNinstance), source=0_pInt) + allocate(plastic_dislokmc_Nslip(lattice_maxNslipFamily,maxNinstance), source=0_pInt) + allocate(plastic_dislokmc_Ntwin(lattice_maxNtwinFamily,maxNinstance), source=0_pInt) + allocate(plastic_dislokmc_totalNslip(maxNinstance), source=0_pInt) + allocate(plastic_dislokmc_totalNtwin(maxNinstance), source=0_pInt) + allocate(plastic_dislokmc_CAtomicVolume(maxNinstance), source=0.0_pReal) + allocate(plastic_dislokmc_D0(maxNinstance), source=0.0_pReal) + allocate(plastic_dislokmc_Qsd(maxNinstance), source=0.0_pReal) + allocate(plastic_dislokmc_GrainSize(maxNinstance), source=0.0_pReal) + allocate(plastic_dislokmc_MaxTwinFraction(maxNinstance), source=0.0_pReal) + allocate(plastic_dislokmc_CEdgeDipMinDistance(maxNinstance), source=0.0_pReal) + allocate(plastic_dislokmc_Cmfptwin(maxNinstance), source=0.0_pReal) + allocate(plastic_dislokmc_Cthresholdtwin(maxNinstance), source=0.0_pReal) + allocate(plastic_dislokmc_SolidSolutionStrength(maxNinstance), source=0.0_pReal) + allocate(plastic_dislokmc_L0(maxNinstance), source=0.0_pReal) + allocate(plastic_dislokmc_xc(maxNinstance), source=0.0_pReal) + allocate(plastic_dislokmc_VcrossSlip(maxNinstance), source=0.0_pReal) + allocate(plastic_dislokmc_aTolRho(maxNinstance), source=0.0_pReal) + allocate(plastic_dislokmc_aTolTwinFrac(maxNinstance), source=0.0_pReal) + allocate(plastic_dislokmc_SFE_0K(maxNinstance), source=0.0_pReal) + allocate(plastic_dislokmc_dSFE_dT(maxNinstance), source=0.0_pReal) + allocate(plastic_dislokmc_dipoleFormationFactor(maxNinstance), source=1.0_pReal) !should be on by default + allocate(plastic_dislokmc_rhoEdge0(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_dislokmc_rhoEdgeDip0(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_dislokmc_burgersPerSlipFamily(lattice_maxNslipFamily,maxNinstance), & source=0.0_pReal) - allocate(constitutive_dislokmc_burgersPerTwinFamily(lattice_maxNtwinFamily,maxNinstance), & + allocate(plastic_dislokmc_burgersPerTwinFamily(lattice_maxNtwinFamily,maxNinstance), & source=0.0_pReal) - allocate(constitutive_dislokmc_QedgePerSlipFamily(lattice_maxNslipFamily,maxNinstance), & + allocate(plastic_dislokmc_QedgePerSlipFamily(lattice_maxNslipFamily,maxNinstance), & source=0.0_pReal) - allocate(constitutive_dislokmc_v0PerSlipFamily(lattice_maxNslipFamily,maxNinstance), & + allocate(plastic_dislokmc_v0PerSlipFamily(lattice_maxNslipFamily,maxNinstance), & source=0.0_pReal) - allocate(constitutive_dislokmc_tau_peierlsPerSlipFamily(lattice_maxNslipFamily,maxNinstance), & + allocate(plastic_dislokmc_tau_peierlsPerSlipFamily(lattice_maxNslipFamily,maxNinstance), & source=0.0_pReal) - allocate(constitutive_dislokmc_pPerSlipFamily(lattice_maxNslipFamily,maxNinstance),source=0.0_pReal) - allocate(constitutive_dislokmc_qPerSlipFamily(lattice_maxNslipFamily,maxNinstance),source=0.0_pReal) - allocate(constitutive_dislokmc_uPerSlipFamily(lattice_maxNslipFamily,maxNinstance),source=0.0_pReal) - allocate(constitutive_dislokmc_sPerSlipFamily(lattice_maxNslipFamily,maxNinstance),source=0.0_pReal) - allocate(constitutive_dislokmc_Ndot0PerTwinFamily(lattice_maxNtwinFamily,maxNinstance), & + allocate(plastic_dislokmc_pPerSlipFamily(lattice_maxNslipFamily,maxNinstance),source=0.0_pReal) + allocate(plastic_dislokmc_qPerSlipFamily(lattice_maxNslipFamily,maxNinstance),source=0.0_pReal) + allocate(plastic_dislokmc_uPerSlipFamily(lattice_maxNslipFamily,maxNinstance),source=0.0_pReal) + allocate(plastic_dislokmc_sPerSlipFamily(lattice_maxNslipFamily,maxNinstance),source=0.0_pReal) + allocate(plastic_dislokmc_Ndot0PerTwinFamily(lattice_maxNtwinFamily,maxNinstance), & source=0.0_pReal) - allocate(constitutive_dislokmc_twinsizePerTwinFamily(lattice_maxNtwinFamily,maxNinstance), & + allocate(plastic_dislokmc_twinsizePerTwinFamily(lattice_maxNtwinFamily,maxNinstance), & source=0.0_pReal) - allocate(constitutive_dislokmc_CLambdaSlipPerSlipFamily(lattice_maxNslipFamily,maxNinstance), & + allocate(plastic_dislokmc_CLambdaSlipPerSlipFamily(lattice_maxNslipFamily,maxNinstance), & source=0.0_pReal) - allocate(constitutive_dislokmc_rPerTwinFamily(lattice_maxNtwinFamily,maxNinstance),source=0.0_pReal) - allocate(constitutive_dislokmc_interaction_SlipSlip(lattice_maxNinteraction,maxNinstance), & + allocate(plastic_dislokmc_rPerTwinFamily(lattice_maxNtwinFamily,maxNinstance),source=0.0_pReal) + allocate(plastic_dislokmc_interaction_SlipSlip(lattice_maxNinteraction,maxNinstance), & source=0.0_pReal) - allocate(constitutive_dislokmc_interaction_SlipTwin(lattice_maxNinteraction,maxNinstance), & + allocate(plastic_dislokmc_interaction_SlipTwin(lattice_maxNinteraction,maxNinstance), & source=0.0_pReal) - allocate(constitutive_dislokmc_interaction_TwinSlip(lattice_maxNinteraction,maxNinstance), & + allocate(plastic_dislokmc_interaction_TwinSlip(lattice_maxNinteraction,maxNinstance), & source=0.0_pReal) - allocate(constitutive_dislokmc_interaction_TwinTwin(lattice_maxNinteraction,maxNinstance), & + allocate(plastic_dislokmc_interaction_TwinTwin(lattice_maxNinteraction,maxNinstance), & source=0.0_pReal) - allocate(constitutive_dislokmc_nonSchmidCoeff(lattice_maxNnonSchmid,maxNinstance), & + allocate(plastic_dislokmc_nonSchmidCoeff(lattice_maxNnonSchmid,maxNinstance), & source=0.0_pReal) @@ -324,74 +324,74 @@ subroutine constitutive_dislokmc_init(fileUnit) case ('(output)') select case(IO_lc(IO_stringValue(line,positions,2_pInt))) case ('edge_density') - constitutive_dislokmc_Noutput(instance) = constitutive_dislokmc_Noutput(instance) + 1_pInt - constitutive_dislokmc_outputID(constitutive_dislokmc_Noutput(instance),instance) = edge_density_ID - constitutive_dislokmc_output(constitutive_dislokmc_Noutput(instance),instance) = & + plastic_dislokmc_Noutput(instance) = plastic_dislokmc_Noutput(instance) + 1_pInt + plastic_dislokmc_outputID(plastic_dislokmc_Noutput(instance),instance) = edge_density_ID + plastic_dislokmc_output(plastic_dislokmc_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('dipole_density') - constitutive_dislokmc_Noutput(instance) = constitutive_dislokmc_Noutput(instance) + 1_pInt - constitutive_dislokmc_outputID(constitutive_dislokmc_Noutput(instance),instance) = dipole_density_ID - constitutive_dislokmc_output(constitutive_dislokmc_Noutput(instance),instance) = & + plastic_dislokmc_Noutput(instance) = plastic_dislokmc_Noutput(instance) + 1_pInt + plastic_dislokmc_outputID(plastic_dislokmc_Noutput(instance),instance) = dipole_density_ID + plastic_dislokmc_output(plastic_dislokmc_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('shear_rate_slip') - constitutive_dislokmc_Noutput(instance) = constitutive_dislokmc_Noutput(instance) + 1_pInt - constitutive_dislokmc_outputID(constitutive_dislokmc_Noutput(instance),instance) = shear_rate_slip_ID - constitutive_dislokmc_output(constitutive_dislokmc_Noutput(instance),instance) = & + plastic_dislokmc_Noutput(instance) = plastic_dislokmc_Noutput(instance) + 1_pInt + plastic_dislokmc_outputID(plastic_dislokmc_Noutput(instance),instance) = shear_rate_slip_ID + plastic_dislokmc_output(plastic_dislokmc_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('accumulated_shear_slip') - constitutive_dislokmc_Noutput(instance) = constitutive_dislokmc_Noutput(instance) + 1_pInt - constitutive_dislokmc_outputID(constitutive_dislokmc_Noutput(instance),instance) = accumulated_shear_slip_ID - constitutive_dislokmc_output(constitutive_dislokmc_Noutput(instance),instance) = & + plastic_dislokmc_Noutput(instance) = plastic_dislokmc_Noutput(instance) + 1_pInt + plastic_dislokmc_outputID(plastic_dislokmc_Noutput(instance),instance) = accumulated_shear_slip_ID + plastic_dislokmc_output(plastic_dislokmc_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('mfp_slip') - constitutive_dislokmc_Noutput(instance) = constitutive_dislokmc_Noutput(instance) + 1_pInt - constitutive_dislokmc_outputID(constitutive_dislokmc_Noutput(instance),instance) = mfp_slip_ID - constitutive_dislokmc_output(constitutive_dislokmc_Noutput(instance),instance) = & + plastic_dislokmc_Noutput(instance) = plastic_dislokmc_Noutput(instance) + 1_pInt + plastic_dislokmc_outputID(plastic_dislokmc_Noutput(instance),instance) = mfp_slip_ID + plastic_dislokmc_output(plastic_dislokmc_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('resolved_stress_slip') - constitutive_dislokmc_Noutput(instance) = constitutive_dislokmc_Noutput(instance) + 1_pInt - constitutive_dislokmc_outputID(constitutive_dislokmc_Noutput(instance),instance) = resolved_stress_slip_ID - constitutive_dislokmc_output(constitutive_dislokmc_Noutput(instance),instance) = & + plastic_dislokmc_Noutput(instance) = plastic_dislokmc_Noutput(instance) + 1_pInt + plastic_dislokmc_outputID(plastic_dislokmc_Noutput(instance),instance) = resolved_stress_slip_ID + plastic_dislokmc_output(plastic_dislokmc_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('edge_dipole_distance') - constitutive_dislokmc_Noutput(instance) = constitutive_dislokmc_Noutput(instance) + 1_pInt - constitutive_dislokmc_outputID(constitutive_dislokmc_Noutput(instance),instance) = edge_dipole_distance_ID - constitutive_dislokmc_output(constitutive_dislokmc_Noutput(instance),instance) = & + plastic_dislokmc_Noutput(instance) = plastic_dislokmc_Noutput(instance) + 1_pInt + plastic_dislokmc_outputID(plastic_dislokmc_Noutput(instance),instance) = edge_dipole_distance_ID + plastic_dislokmc_output(plastic_dislokmc_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('stress_exponent') - constitutive_dislokmc_Noutput(instance) = constitutive_dislokmc_Noutput(instance) + 1_pInt - constitutive_dislokmc_outputID(constitutive_dislokmc_Noutput(instance),instance) = stress_exponent_ID - constitutive_dislokmc_output(constitutive_dislokmc_Noutput(instance),instance) = & + plastic_dislokmc_Noutput(instance) = plastic_dislokmc_Noutput(instance) + 1_pInt + plastic_dislokmc_outputID(plastic_dislokmc_Noutput(instance),instance) = stress_exponent_ID + plastic_dislokmc_output(plastic_dislokmc_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('twin_fraction') - constitutive_dislokmc_Noutput(instance) = constitutive_dislokmc_Noutput(instance) + 1_pInt - constitutive_dislokmc_outputID(constitutive_dislokmc_Noutput(instance),instance) = twin_fraction_ID - constitutive_dislokmc_output(constitutive_dislokmc_Noutput(instance),instance) = & + plastic_dislokmc_Noutput(instance) = plastic_dislokmc_Noutput(instance) + 1_pInt + plastic_dislokmc_outputID(plastic_dislokmc_Noutput(instance),instance) = twin_fraction_ID + plastic_dislokmc_output(plastic_dislokmc_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('shear_rate_twin') - constitutive_dislokmc_Noutput(instance) = constitutive_dislokmc_Noutput(instance) + 1_pInt - constitutive_dislokmc_outputID(constitutive_dislokmc_Noutput(instance),instance) = shear_rate_twin_ID - constitutive_dislokmc_output(constitutive_dislokmc_Noutput(instance),instance) = & + plastic_dislokmc_Noutput(instance) = plastic_dislokmc_Noutput(instance) + 1_pInt + plastic_dislokmc_outputID(plastic_dislokmc_Noutput(instance),instance) = shear_rate_twin_ID + plastic_dislokmc_output(plastic_dislokmc_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('accumulated_shear_twin') - constitutive_dislokmc_Noutput(instance) = constitutive_dislokmc_Noutput(instance) + 1_pInt - constitutive_dislokmc_outputID(constitutive_dislokmc_Noutput(instance),instance) = accumulated_shear_twin_ID - constitutive_dislokmc_output(constitutive_dislokmc_Noutput(instance),instance) = & + plastic_dislokmc_Noutput(instance) = plastic_dislokmc_Noutput(instance) + 1_pInt + plastic_dislokmc_outputID(plastic_dislokmc_Noutput(instance),instance) = accumulated_shear_twin_ID + plastic_dislokmc_output(plastic_dislokmc_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('mfp_twin') - constitutive_dislokmc_Noutput(instance) = constitutive_dislokmc_Noutput(instance) + 1_pInt - constitutive_dislokmc_outputID(constitutive_dislokmc_Noutput(instance),instance) = mfp_twin_ID - constitutive_dislokmc_output(constitutive_dislokmc_Noutput(instance),instance) = & + plastic_dislokmc_Noutput(instance) = plastic_dislokmc_Noutput(instance) + 1_pInt + plastic_dislokmc_outputID(plastic_dislokmc_Noutput(instance),instance) = mfp_twin_ID + plastic_dislokmc_output(plastic_dislokmc_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('resolved_stress_twin') - constitutive_dislokmc_Noutput(instance) = constitutive_dislokmc_Noutput(instance) + 1_pInt - constitutive_dislokmc_outputID(constitutive_dislokmc_Noutput(instance),instance) = resolved_stress_twin_ID - constitutive_dislokmc_output(constitutive_dislokmc_Noutput(instance),instance) = & + plastic_dislokmc_Noutput(instance) = plastic_dislokmc_Noutput(instance) + 1_pInt + plastic_dislokmc_outputID(plastic_dislokmc_Noutput(instance),instance) = resolved_stress_twin_ID + plastic_dislokmc_output(plastic_dislokmc_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('threshold_stress_twin') - constitutive_dislokmc_Noutput(instance) = constitutive_dislokmc_Noutput(instance) + 1_pInt - constitutive_dislokmc_outputID(constitutive_dislokmc_Noutput(instance),instance) = threshold_stress_twin_ID - constitutive_dislokmc_output(constitutive_dislokmc_Noutput(instance),instance) = & + plastic_dislokmc_Noutput(instance) = plastic_dislokmc_Noutput(instance) + 1_pInt + plastic_dislokmc_outputID(plastic_dislokmc_Noutput(instance),instance) = threshold_stress_twin_ID + plastic_dislokmc_output(plastic_dislokmc_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) end select !-------------------------------------------------------------------------------------------------- @@ -403,7 +403,7 @@ subroutine constitutive_dislokmc_init(fileUnit) call IO_error(150_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOKMC_label//')') Nchunks_SlipFamilies = positions(1) - 1_pInt do j = 1_pInt, Nchunks_SlipFamilies - constitutive_dislokmc_Nslip(j,instance) = IO_intValue(line,positions,1_pInt+j) + plastic_dislokmc_Nslip(j,instance) = IO_intValue(line,positions,1_pInt+j) enddo case ('rhoedge0','rhoedgedip0','slipburgers','qedge','v0','clambdaslip','tau_peierls','p_slip','q_slip',& 'u_slip','v_slip','s_slip') @@ -412,29 +412,29 @@ subroutine constitutive_dislokmc_init(fileUnit) enddo select case(tag) case ('rhoedge0') - constitutive_dislokmc_rhoEdge0(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) + plastic_dislokmc_rhoEdge0(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) case ('rhoedgedip0') - constitutive_dislokmc_rhoEdgeDip0(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) + plastic_dislokmc_rhoEdgeDip0(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) case ('slipburgers') - constitutive_dislokmc_burgersPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) + plastic_dislokmc_burgersPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) case ('qedge') - constitutive_dislokmc_QedgePerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) + plastic_dislokmc_QedgePerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) case ('v0') - constitutive_dislokmc_v0PerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) + plastic_dislokmc_v0PerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) case ('clambdaslip') - constitutive_dislokmc_CLambdaSlipPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) + plastic_dislokmc_CLambdaSlipPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) case ('tau_peierls') if (lattice_structure(phase) /= LATTICE_bcc_ID) & call IO_warning(42_pInt,ext_msg=trim(tag)//' for non-bcc ('//PLASTICITY_DISLOKMC_label//')') - constitutive_dislokmc_tau_peierlsPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) + plastic_dislokmc_tau_peierlsPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) case ('p_slip') - constitutive_dislokmc_pPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) + plastic_dislokmc_pPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) case ('q_slip') - constitutive_dislokmc_qPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) + plastic_dislokmc_qPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) case ('u_slip') - constitutive_dislokmc_uPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) + plastic_dislokmc_uPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) case ('s_slip') - constitutive_dislokmc_sPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) + plastic_dislokmc_sPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) end select !-------------------------------------------------------------------------------------------------- ! parameters depending on slip number of twin families @@ -445,7 +445,7 @@ subroutine constitutive_dislokmc_init(fileUnit) call IO_error(150_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOKMC_label//')') Nchunks_TwinFamilies = positions(1) - 1_pInt do j = 1_pInt, Nchunks_TwinFamilies - constitutive_dislokmc_Ntwin(j,instance) = IO_intValue(line,positions,1_pInt+j) + plastic_dislokmc_Ntwin(j,instance) = IO_intValue(line,positions,1_pInt+j) enddo case ('ndot0','twinsize','twinburgers','r_twin') do j = 1_pInt, Nchunks_TwinFamilies @@ -455,13 +455,13 @@ subroutine constitutive_dislokmc_init(fileUnit) case ('ndot0') if (lattice_structure(phase) == LATTICE_fcc_ID) & call IO_warning(42_pInt,ext_msg=trim(tag)//' for fcc ('//PLASTICITY_DISLOKMC_label//')') - constitutive_dislokmc_Ndot0PerTwinFamily(1:Nchunks_TwinFamilies,instance) = tempPerTwin(1:Nchunks_TwinFamilies) + plastic_dislokmc_Ndot0PerTwinFamily(1:Nchunks_TwinFamilies,instance) = tempPerTwin(1:Nchunks_TwinFamilies) case ('twinsize') - constitutive_dislokmc_twinsizePerTwinFamily(1:Nchunks_TwinFamilies,instance) = tempPerTwin(1:Nchunks_TwinFamilies) + plastic_dislokmc_twinsizePerTwinFamily(1:Nchunks_TwinFamilies,instance) = tempPerTwin(1:Nchunks_TwinFamilies) case ('twinburgers') - constitutive_dislokmc_burgersPerTwinFamily(1:Nchunks_TwinFamilies,instance) = tempPerTwin(1:Nchunks_TwinFamilies) + plastic_dislokmc_burgersPerTwinFamily(1:Nchunks_TwinFamilies,instance) = tempPerTwin(1:Nchunks_TwinFamilies) case ('r_twin') - constitutive_dislokmc_rPerTwinFamily(1:Nchunks_TwinFamilies,instance) = tempPerTwin(1:Nchunks_TwinFamilies) + plastic_dislokmc_rPerTwinFamily(1:Nchunks_TwinFamilies,instance) = tempPerTwin(1:Nchunks_TwinFamilies) end select !-------------------------------------------------------------------------------------------------- ! parameters depending on number of interactions @@ -469,68 +469,68 @@ subroutine constitutive_dislokmc_init(fileUnit) if (positions(1) < 1_pInt + Nchunks_SlipSlip) & call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOKMC_label//')') do j = 1_pInt, Nchunks_SlipSlip - constitutive_dislokmc_interaction_SlipSlip(j,instance) = IO_floatValue(line,positions,1_pInt+j) + plastic_dislokmc_interaction_SlipSlip(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('interaction_sliptwin','interactionsliptwin') if (positions(1) < 1_pInt + Nchunks_SlipTwin) & call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOKMC_label//')') do j = 1_pInt, Nchunks_SlipTwin - constitutive_dislokmc_interaction_SlipTwin(j,instance) = IO_floatValue(line,positions,1_pInt+j) + plastic_dislokmc_interaction_SlipTwin(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('interaction_twinslip','interactiontwinslip') if (positions(1) < 1_pInt + Nchunks_TwinSlip) & call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOKMC_label//')') do j = 1_pInt, Nchunks_TwinSlip - constitutive_dislokmc_interaction_TwinSlip(j,instance) = IO_floatValue(line,positions,1_pInt+j) + plastic_dislokmc_interaction_TwinSlip(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('interaction_twintwin','interactiontwintwin') if (positions(1) < 1_pInt + Nchunks_TwinTwin) & call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOKMC_label//')') do j = 1_pInt, Nchunks_TwinTwin - constitutive_dislokmc_interaction_TwinTwin(j,instance) = IO_floatValue(line,positions,1_pInt+j) + plastic_dislokmc_interaction_TwinTwin(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('nonschmid_coefficients') if (positions(1) < 1_pInt + Nchunks_nonSchmid) & call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOKMC_label//')') do j = 1_pInt,Nchunks_nonSchmid - constitutive_dislokmc_nonSchmidCoeff(j,instance) = IO_floatValue(line,positions,1_pInt+j) + plastic_dislokmc_nonSchmidCoeff(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo !-------------------------------------------------------------------------------------------------- ! parameters independent of number of slip/twin systems case ('grainsize') - constitutive_dislokmc_GrainSize(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislokmc_GrainSize(instance) = IO_floatValue(line,positions,2_pInt) case ('maxtwinfraction') - constitutive_dislokmc_MaxTwinFraction(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislokmc_MaxTwinFraction(instance) = IO_floatValue(line,positions,2_pInt) case ('d0') - constitutive_dislokmc_D0(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislokmc_D0(instance) = IO_floatValue(line,positions,2_pInt) case ('qsd') - constitutive_dislokmc_Qsd(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislokmc_Qsd(instance) = IO_floatValue(line,positions,2_pInt) case ('atol_rho') - constitutive_dislokmc_aTolRho(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislokmc_aTolRho(instance) = IO_floatValue(line,positions,2_pInt) case ('atol_twinfrac') - constitutive_dislokmc_aTolTwinFrac(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislokmc_aTolTwinFrac(instance) = IO_floatValue(line,positions,2_pInt) case ('cmfptwin') - constitutive_dislokmc_Cmfptwin(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislokmc_Cmfptwin(instance) = IO_floatValue(line,positions,2_pInt) case ('cthresholdtwin') - constitutive_dislokmc_Cthresholdtwin(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislokmc_Cthresholdtwin(instance) = IO_floatValue(line,positions,2_pInt) case ('solidsolutionstrength') - constitutive_dislokmc_SolidSolutionStrength(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislokmc_SolidSolutionStrength(instance) = IO_floatValue(line,positions,2_pInt) case ('l0') - constitutive_dislokmc_L0(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislokmc_L0(instance) = IO_floatValue(line,positions,2_pInt) case ('xc') - constitutive_dislokmc_xc(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislokmc_xc(instance) = IO_floatValue(line,positions,2_pInt) case ('vcrossslip') - constitutive_dislokmc_VcrossSlip(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislokmc_VcrossSlip(instance) = IO_floatValue(line,positions,2_pInt) case ('cedgedipmindistance') - constitutive_dislokmc_CEdgeDipMinDistance(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislokmc_CEdgeDipMinDistance(instance) = IO_floatValue(line,positions,2_pInt) case ('catomicvolume') - constitutive_dislokmc_CAtomicVolume(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislokmc_CAtomicVolume(instance) = IO_floatValue(line,positions,2_pInt) case ('sfe_0k') - constitutive_dislokmc_SFE_0K(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislokmc_SFE_0K(instance) = IO_floatValue(line,positions,2_pInt) case ('dsfe_dt') - constitutive_dislokmc_dSFE_dT(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislokmc_dSFE_dT(instance) = IO_floatValue(line,positions,2_pInt) case ('dipoleformationfactor') - constitutive_dislokmc_dipoleFormationFactor(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislokmc_dipoleFormationFactor(instance) = IO_floatValue(line,positions,2_pInt) end select endif; endif enddo parsingFile @@ -538,104 +538,104 @@ subroutine constitutive_dislokmc_init(fileUnit) sanityChecks: do phase = 1_pInt, size(phase_plasticity) myPhase: if (phase_plasticity(phase) == PLASTICITY_dislokmc_ID) then instance = phase_plasticityInstance(phase) - if (sum(constitutive_dislokmc_Nslip(:,instance)) < 0_pInt) & + if (sum(plastic_dislokmc_Nslip(:,instance)) < 0_pInt) & call IO_error(211_pInt,el=instance,ext_msg='Nslip ('//PLASTICITY_DISLOKMC_label//')') - if (sum(constitutive_dislokmc_Ntwin(:,instance)) < 0_pInt) & + if (sum(plastic_dislokmc_Ntwin(:,instance)) < 0_pInt) & call IO_error(211_pInt,el=instance,ext_msg='Ntwin ('//PLASTICITY_DISLOKMC_label//')') do f = 1_pInt,lattice_maxNslipFamily - if (constitutive_dislokmc_Nslip(f,instance) > 0_pInt) then - if (constitutive_dislokmc_rhoEdge0(f,instance) < 0.0_pReal) & + if (plastic_dislokmc_Nslip(f,instance) > 0_pInt) then + if (plastic_dislokmc_rhoEdge0(f,instance) < 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='rhoEdge0 ('//PLASTICITY_DISLOKMC_label//')') - if (constitutive_dislokmc_rhoEdgeDip0(f,instance) < 0.0_pReal) & + if (plastic_dislokmc_rhoEdgeDip0(f,instance) < 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='rhoEdgeDip0 ('//PLASTICITY_DISLOKMC_label//')') - if (constitutive_dislokmc_burgersPerSlipFamily(f,instance) <= 0.0_pReal) & + if (plastic_dislokmc_burgersPerSlipFamily(f,instance) <= 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='slipBurgers ('//PLASTICITY_DISLOKMC_label//')') - if (constitutive_dislokmc_v0PerSlipFamily(f,instance) <= 0.0_pReal) & + if (plastic_dislokmc_v0PerSlipFamily(f,instance) <= 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='v0 ('//PLASTICITY_DISLOKMC_label//')') - if (constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance) < 0.0_pReal) & + if (plastic_dislokmc_tau_peierlsPerSlipFamily(f,instance) < 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='tau_peierls ('//PLASTICITY_DISLOKMC_label//')') endif enddo do f = 1_pInt,lattice_maxNtwinFamily - if (constitutive_dislokmc_Ntwin(f,instance) > 0_pInt) then - if (constitutive_dislokmc_burgersPerTwinFamily(f,instance) <= 0.0_pReal) & + if (plastic_dislokmc_Ntwin(f,instance) > 0_pInt) then + if (plastic_dislokmc_burgersPerTwinFamily(f,instance) <= 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='twinburgers ('//PLASTICITY_DISLOKMC_label//')') - if (constitutive_dislokmc_Ndot0PerTwinFamily(f,instance) < 0.0_pReal) & + if (plastic_dislokmc_Ndot0PerTwinFamily(f,instance) < 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='ndot0 ('//PLASTICITY_DISLOKMC_label//')') endif enddo - if (constitutive_dislokmc_CAtomicVolume(instance) <= 0.0_pReal) & + if (plastic_dislokmc_CAtomicVolume(instance) <= 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='cAtomicVolume ('//PLASTICITY_DISLOKMC_label//')') - if (constitutive_dislokmc_D0(instance) <= 0.0_pReal) & + if (plastic_dislokmc_D0(instance) <= 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='D0 ('//PLASTICITY_DISLOKMC_label//')') - if (constitutive_dislokmc_Qsd(instance) <= 0.0_pReal) & + if (plastic_dislokmc_Qsd(instance) <= 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='Qsd ('//PLASTICITY_DISLOKMC_label//')') - if (sum(constitutive_dislokmc_Ntwin(:,instance)) > 0_pInt) then - if (constitutive_dislokmc_SFE_0K(instance) == 0.0_pReal .and. & - constitutive_dislokmc_dSFE_dT(instance) == 0.0_pReal .and. & + if (sum(plastic_dislokmc_Ntwin(:,instance)) > 0_pInt) then + if (plastic_dislokmc_SFE_0K(instance) == 0.0_pReal .and. & + plastic_dislokmc_dSFE_dT(instance) == 0.0_pReal .and. & lattice_structure(phase) == LATTICE_fcc_ID) & call IO_error(211_pInt,el=instance,ext_msg='SFE0K ('//PLASTICITY_DISLOKMC_label//')') - if (constitutive_dislokmc_aTolRho(instance) <= 0.0_pReal) & + if (plastic_dislokmc_aTolRho(instance) <= 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='aTolRho ('//PLASTICITY_DISLOKMC_label//')') - if (constitutive_dislokmc_aTolTwinFrac(instance) <= 0.0_pReal) & + if (plastic_dislokmc_aTolTwinFrac(instance) <= 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='aTolTwinFrac ('//PLASTICITY_DISLOKMC_label//')') endif - if (constitutive_dislokmc_dipoleFormationFactor(instance) /= 0.0_pReal .and. & - constitutive_dislokmc_dipoleFormationFactor(instance) /= 1.0_pReal) & + if (plastic_dislokmc_dipoleFormationFactor(instance) /= 0.0_pReal .and. & + plastic_dislokmc_dipoleFormationFactor(instance) /= 1.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='dipoleFormationFactor ('//PLASTICITY_DISLOKMC_label//')') !-------------------------------------------------------------------------------------------------- ! Determine total number of active slip or twin systems - constitutive_dislokmc_Nslip(:,instance) = min(lattice_NslipSystem(:,phase),constitutive_dislokmc_Nslip(:,instance)) - constitutive_dislokmc_Ntwin(:,instance) = min(lattice_NtwinSystem(:,phase),constitutive_dislokmc_Ntwin(:,instance)) - constitutive_dislokmc_totalNslip(instance) = sum(constitutive_dislokmc_Nslip(:,instance)) - constitutive_dislokmc_totalNtwin(instance) = sum(constitutive_dislokmc_Ntwin(:,instance)) + plastic_dislokmc_Nslip(:,instance) = min(lattice_NslipSystem(:,phase),plastic_dislokmc_Nslip(:,instance)) + plastic_dislokmc_Ntwin(:,instance) = min(lattice_NtwinSystem(:,phase),plastic_dislokmc_Ntwin(:,instance)) + plastic_dislokmc_totalNslip(instance) = sum(plastic_dislokmc_Nslip(:,instance)) + plastic_dislokmc_totalNtwin(instance) = sum(plastic_dislokmc_Ntwin(:,instance)) endif myPhase enddo sanityChecks !-------------------------------------------------------------------------------------------------- ! allocation of variables whose size depends on the total number of active slip systems - maxTotalNslip = maxval(constitutive_dislokmc_totalNslip) - maxTotalNtwin = maxval(constitutive_dislokmc_totalNtwin) + maxTotalNslip = maxval(plastic_dislokmc_totalNslip) + maxTotalNtwin = maxval(plastic_dislokmc_totalNtwin) - allocate(constitutive_dislokmc_burgersPerSlipSystem(maxTotalNslip, maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_burgersPerTwinSystem(maxTotalNtwin, maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_QedgePerSlipSystem(maxTotalNslip, maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_v0PerSlipSystem(maxTotalNslip, maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_Ndot0PerTwinSystem(maxTotalNtwin, maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_tau_r(maxTotalNtwin, maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_twinsizePerTwinSystem(maxTotalNtwin, maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_CLambdaSlipPerSlipSystem(maxTotalNslip, maxNinstance),source=0.0_pReal) + allocate(plastic_dislokmc_burgersPerSlipSystem(maxTotalNslip, maxNinstance), source=0.0_pReal) + allocate(plastic_dislokmc_burgersPerTwinSystem(maxTotalNtwin, maxNinstance), source=0.0_pReal) + allocate(plastic_dislokmc_QedgePerSlipSystem(maxTotalNslip, maxNinstance), source=0.0_pReal) + allocate(plastic_dislokmc_v0PerSlipSystem(maxTotalNslip, maxNinstance), source=0.0_pReal) + allocate(plastic_dislokmc_Ndot0PerTwinSystem(maxTotalNtwin, maxNinstance), source=0.0_pReal) + allocate(plastic_dislokmc_tau_r(maxTotalNtwin, maxNinstance), source=0.0_pReal) + allocate(plastic_dislokmc_twinsizePerTwinSystem(maxTotalNtwin, maxNinstance), source=0.0_pReal) + allocate(plastic_dislokmc_CLambdaSlipPerSlipSystem(maxTotalNslip, maxNinstance),source=0.0_pReal) - allocate(constitutive_dislokmc_interactionMatrix_SlipSlip(maxval(constitutive_dislokmc_totalNslip),& ! slip resistance from slip activity - maxval(constitutive_dislokmc_totalNslip),& + allocate(plastic_dislokmc_interactionMatrix_SlipSlip(maxval(plastic_dislokmc_totalNslip),& ! slip resistance from slip activity + maxval(plastic_dislokmc_totalNslip),& maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_interactionMatrix_SlipTwin(maxval(constitutive_dislokmc_totalNslip),& ! slip resistance from twin activity - maxval(constitutive_dislokmc_totalNtwin),& + allocate(plastic_dislokmc_interactionMatrix_SlipTwin(maxval(plastic_dislokmc_totalNslip),& ! slip resistance from twin activity + maxval(plastic_dislokmc_totalNtwin),& maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_interactionMatrix_TwinSlip(maxval(constitutive_dislokmc_totalNtwin),& ! twin resistance from slip activity - maxval(constitutive_dislokmc_totalNslip),& + allocate(plastic_dislokmc_interactionMatrix_TwinSlip(maxval(plastic_dislokmc_totalNtwin),& ! twin resistance from slip activity + maxval(plastic_dislokmc_totalNslip),& maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_interactionMatrix_TwinTwin(maxval(constitutive_dislokmc_totalNtwin),& ! twin resistance from twin activity - maxval(constitutive_dislokmc_totalNtwin),& + allocate(plastic_dislokmc_interactionMatrix_TwinTwin(maxval(plastic_dislokmc_totalNtwin),& ! twin resistance from twin activity + maxval(plastic_dislokmc_totalNtwin),& maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_forestProjectionEdge(maxTotalNslip,maxTotalNslip,maxNinstance), & + allocate(plastic_dislokmc_forestProjectionEdge(maxTotalNslip,maxTotalNslip,maxNinstance), & source=0.0_pReal) - allocate(constitutive_dislokmc_Ctwin66(6,6,maxTotalNtwin,maxNinstance), source=0.0_pReal) - allocate(constitutive_dislokmc_Ctwin3333(3,3,3,3,maxTotalNtwin,maxNinstance), source=0.0_pReal) + allocate(plastic_dislokmc_Ctwin66(6,6,maxTotalNtwin,maxNinstance), source=0.0_pReal) + allocate(plastic_dislokmc_Ctwin3333(3,3,3,3,maxTotalNtwin,maxNinstance), source=0.0_pReal) initializeInstances: do phase = 1_pInt, size(phase_plasticity) myPhase2: if (phase_plasticity(phase) == PLASTICITY_dislokmc_ID) then NofMyPhase=count(material_phase==phase) instance = phase_plasticityInstance(phase) - ns = constitutive_dislokmc_totalNslip(instance) - nt = constitutive_dislokmc_totalNtwin(instance) + ns = plastic_dislokmc_totalNslip(instance) + nt = plastic_dislokmc_totalNtwin(instance) !-------------------------------------------------------------------------------------------------- ! Determine size of postResults array - outputs: do o = 1_pInt,constitutive_dislokmc_Noutput(instance) - select case(constitutive_dislokmc_outputID(o,instance)) + outputs: do o = 1_pInt,plastic_dislokmc_Noutput(instance) + select case(plastic_dislokmc_outputID(o,instance)) case(edge_density_ID, & dipole_density_ID, & shear_rate_slip_ID, & @@ -658,18 +658,18 @@ subroutine constitutive_dislokmc_init(fileUnit) end select if (mySize > 0_pInt) then ! any meaningful output found - constitutive_dislokmc_sizePostResult(o,instance) = mySize - constitutive_dislokmc_sizePostResults(instance) = constitutive_dislokmc_sizePostResults(instance) + mySize + plastic_dislokmc_sizePostResult(o,instance) = mySize + plastic_dislokmc_sizePostResults(instance) = plastic_dislokmc_sizePostResults(instance) + mySize endif enddo outputs !-------------------------------------------------------------------------------------------------- ! allocate state arrays - sizeDotState = int(size(CONSTITUTIVE_DISLOKMC_listBasicSlipStates),pInt) * ns & - + int(size(CONSTITUTIVE_DISLOKMC_listBasicTwinStates),pInt) * nt + sizeDotState = int(size(plastic_dislokmc_listBasicSlipStates),pInt) * ns & + + int(size(plastic_dislokmc_listBasicTwinStates),pInt) * nt sizeState = sizeDotState & - + int(size(CONSTITUTIVE_DISLOKMC_listDependentSlipStates),pInt) * ns & - + int(size(CONSTITUTIVE_DISLOKMC_listDependentTwinStates),pInt) * nt + + int(size(plastic_dislokmc_listDependentSlipStates),pInt) * ns & + + int(size(plastic_dislokmc_listDependentTwinStates),pInt) * nt plasticState(phase)%sizeState = sizeState plasticState(phase)%sizeDotState = sizeDotState @@ -694,47 +694,47 @@ subroutine constitutive_dislokmc_init(fileUnit) !* Process slip related parameters ------------------------------------------------ mySlipFamilies: do f = 1_pInt,lattice_maxNslipFamily - index_myFamily = sum(constitutive_dislokmc_Nslip(1:f-1_pInt,instance)) ! index in truncated slip system list - mySlipSystems: do j = 1_pInt,constitutive_dislokmc_Nslip(f,instance) + index_myFamily = sum(plastic_dislokmc_Nslip(1:f-1_pInt,instance)) ! index in truncated slip system list + mySlipSystems: do j = 1_pInt,plastic_dislokmc_Nslip(f,instance) !* Burgers vector, ! dislocation velocity prefactor, ! mean free path prefactor, ! and minimum dipole distance - constitutive_dislokmc_burgersPerSlipSystem(index_myFamily+j,instance) = & - constitutive_dislokmc_burgersPerSlipFamily(f,instance) + plastic_dislokmc_burgersPerSlipSystem(index_myFamily+j,instance) = & + plastic_dislokmc_burgersPerSlipFamily(f,instance) - constitutive_dislokmc_QedgePerSlipSystem(index_myFamily+j,instance) = & - constitutive_dislokmc_QedgePerSlipFamily(f,instance) + plastic_dislokmc_QedgePerSlipSystem(index_myFamily+j,instance) = & + plastic_dislokmc_QedgePerSlipFamily(f,instance) - constitutive_dislokmc_v0PerSlipSystem(index_myFamily+j,instance) = & - constitutive_dislokmc_v0PerSlipFamily(f,instance) + plastic_dislokmc_v0PerSlipSystem(index_myFamily+j,instance) = & + plastic_dislokmc_v0PerSlipFamily(f,instance) - constitutive_dislokmc_CLambdaSlipPerSlipSystem(index_myFamily+j,instance) = & - constitutive_dislokmc_CLambdaSlipPerSlipFamily(f,instance) + plastic_dislokmc_CLambdaSlipPerSlipSystem(index_myFamily+j,instance) = & + plastic_dislokmc_CLambdaSlipPerSlipFamily(f,instance) !* Calculation of forest projections for edge dislocations !* Interaction matrices otherSlipFamilies: do o = 1_pInt,lattice_maxNslipFamily - index_otherFamily = sum(constitutive_dislokmc_Nslip(1:o-1_pInt,instance)) - otherSlipSystems: do k = 1_pInt,constitutive_dislokmc_Nslip(o,instance) - constitutive_dislokmc_forestProjectionEdge(index_myFamily+j,index_otherFamily+k,instance) = & + index_otherFamily = sum(plastic_dislokmc_Nslip(1:o-1_pInt,instance)) + otherSlipSystems: do k = 1_pInt,plastic_dislokmc_Nslip(o,instance) + plastic_dislokmc_forestProjectionEdge(index_myFamily+j,index_otherFamily+k,instance) = & abs(math_mul3x3(lattice_sn(:,sum(lattice_NslipSystem(1:f-1,phase))+j,phase), & lattice_st(:,sum(lattice_NslipSystem(1:o-1,phase))+k,phase))) - constitutive_dislokmc_interactionMatrix_SlipSlip(index_myFamily+j,index_otherFamily+k,instance) = & - constitutive_dislokmc_interaction_SlipSlip(lattice_interactionSlipSlip( & + plastic_dislokmc_interactionMatrix_SlipSlip(index_myFamily+j,index_otherFamily+k,instance) = & + plastic_dislokmc_interaction_SlipSlip(lattice_interactionSlipSlip( & sum(lattice_NslipSystem(1:f-1,phase))+j, & sum(lattice_NslipSystem(1:o-1,phase))+k, & phase), instance ) enddo otherSlipSystems; enddo otherSlipFamilies otherTwinFamilies: do o = 1_pInt,lattice_maxNtwinFamily - index_otherFamily = sum(constitutive_dislokmc_Ntwin(1:o-1_pInt,instance)) - otherTwinSystems: do k = 1_pInt,constitutive_dislokmc_Ntwin(o,instance) - constitutive_dislokmc_interactionMatrix_SlipTwin(index_myFamily+j,index_otherFamily+k,instance) = & - constitutive_dislokmc_interaction_SlipTwin(lattice_interactionSlipTwin( & + index_otherFamily = sum(plastic_dislokmc_Ntwin(1:o-1_pInt,instance)) + otherTwinSystems: do k = 1_pInt,plastic_dislokmc_Ntwin(o,instance) + plastic_dislokmc_interactionMatrix_SlipTwin(index_myFamily+j,index_otherFamily+k,instance) = & + plastic_dislokmc_interaction_SlipTwin(lattice_interactionSlipTwin( & sum(lattice_NslipSystem(1:f-1_pInt,phase))+j, & sum(lattice_NtwinSystem(1:o-1_pInt,phase))+k, & phase), instance ) @@ -746,29 +746,29 @@ subroutine constitutive_dislokmc_init(fileUnit) !* Process twin related parameters ------------------------------------------------ myTwinFamilies: do f = 1_pInt,lattice_maxNtwinFamily - index_myFamily = sum(constitutive_dislokmc_Ntwin(1:f-1_pInt,instance)) ! index in truncated twin system list - myTwinSystems: do j = 1_pInt,constitutive_dislokmc_Ntwin(f,instance) + index_myFamily = sum(plastic_dislokmc_Ntwin(1:f-1_pInt,instance)) ! index in truncated twin system list + myTwinSystems: do j = 1_pInt,plastic_dislokmc_Ntwin(f,instance) !* Burgers vector, ! nucleation rate prefactor, ! and twin size - constitutive_dislokmc_burgersPerTwinSystem(index_myFamily+j,instance) = & - constitutive_dislokmc_burgersPerTwinFamily(f,instance) + plastic_dislokmc_burgersPerTwinSystem(index_myFamily+j,instance) = & + plastic_dislokmc_burgersPerTwinFamily(f,instance) - constitutive_dislokmc_Ndot0PerTwinSystem(index_myFamily+j,instance) = & - constitutive_dislokmc_Ndot0PerTwinFamily(f,instance) + plastic_dislokmc_Ndot0PerTwinSystem(index_myFamily+j,instance) = & + plastic_dislokmc_Ndot0PerTwinFamily(f,instance) - constitutive_dislokmc_twinsizePerTwinSystem(index_myFamily+j,instance) = & - constitutive_dislokmc_twinsizePerTwinFamily(f,instance) + plastic_dislokmc_twinsizePerTwinSystem(index_myFamily+j,instance) = & + plastic_dislokmc_twinsizePerTwinFamily(f,instance) !* Rotate twin elasticity matrices index_otherFamily = sum(lattice_NtwinSystem(1:f-1_pInt,phase)) ! index in full lattice twin list do l = 1_pInt,3_pInt; do m = 1_pInt,3_pInt; do n = 1_pInt,3_pInt; do o = 1_pInt,3_pInt do p = 1_pInt,3_pInt; do q = 1_pInt,3_pInt; do r = 1_pInt,3_pInt; do s = 1_pInt,3_pInt - constitutive_dislokmc_Ctwin3333(l,m,n,o,index_myFamily+j,instance) = & - constitutive_dislokmc_Ctwin3333(l,m,n,o,index_myFamily+j,instance) + & + plastic_dislokmc_Ctwin3333(l,m,n,o,index_myFamily+j,instance) = & + plastic_dislokmc_Ctwin3333(l,m,n,o,index_myFamily+j,instance) + & lattice_C3333(p,q,r,s,instance) * & lattice_Qtwin(l,p,index_otherFamily+j,phase) * & lattice_Qtwin(m,q,index_otherFamily+j,phase) * & @@ -776,25 +776,25 @@ subroutine constitutive_dislokmc_init(fileUnit) lattice_Qtwin(o,s,index_otherFamily+j,phase) enddo; enddo; enddo; enddo enddo; enddo; enddo; enddo - constitutive_dislokmc_Ctwin66(1:6,1:6,index_myFamily+j,instance) = & - math_Mandel3333to66(constitutive_dislokmc_Ctwin3333(1:3,1:3,1:3,1:3,index_myFamily+j,instance)) + plastic_dislokmc_Ctwin66(1:6,1:6,index_myFamily+j,instance) = & + math_Mandel3333to66(plastic_dislokmc_Ctwin3333(1:3,1:3,1:3,1:3,index_myFamily+j,instance)) !* Interaction matrices otherSlipFamilies2: do o = 1_pInt,lattice_maxNslipFamily - index_otherFamily = sum(constitutive_dislokmc_Nslip(1:o-1_pInt,instance)) - otherSlipSystems2: do k = 1_pInt,constitutive_dislokmc_Nslip(o,instance) - constitutive_dislokmc_interactionMatrix_TwinSlip(index_myFamily+j,index_otherFamily+k,instance) = & - constitutive_dislokmc_interaction_TwinSlip(lattice_interactionTwinSlip( & + index_otherFamily = sum(plastic_dislokmc_Nslip(1:o-1_pInt,instance)) + otherSlipSystems2: do k = 1_pInt,plastic_dislokmc_Nslip(o,instance) + plastic_dislokmc_interactionMatrix_TwinSlip(index_myFamily+j,index_otherFamily+k,instance) = & + plastic_dislokmc_interaction_TwinSlip(lattice_interactionTwinSlip( & sum(lattice_NtwinSystem(1:f-1_pInt,phase))+j, & sum(lattice_NslipSystem(1:o-1_pInt,phase))+k, & phase), instance ) enddo otherSlipSystems2; enddo otherSlipFamilies2 otherTwinFamilies2: do o = 1_pInt,lattice_maxNtwinFamily - index_otherFamily = sum(constitutive_dislokmc_Ntwin(1:o-1_pInt,instance)) - otherTwinSystems2: do k = 1_pInt,constitutive_dislokmc_Ntwin(o,instance) - constitutive_dislokmc_interactionMatrix_TwinTwin(index_myFamily+j,index_otherFamily+k,instance) = & - constitutive_dislokmc_interaction_TwinTwin(lattice_interactionTwinTwin( & + index_otherFamily = sum(plastic_dislokmc_Ntwin(1:o-1_pInt,instance)) + otherTwinSystems2: do k = 1_pInt,plastic_dislokmc_Ntwin(o,instance) + plastic_dislokmc_interactionMatrix_TwinTwin(index_myFamily+j,index_otherFamily+k,instance) = & + plastic_dislokmc_interaction_TwinTwin(lattice_interactionTwinTwin( & sum(lattice_NtwinSystem(1:f-1_pInt,phase))+j, & sum(lattice_NtwinSystem(1:o-1_pInt,phase))+k, & phase), instance ) @@ -802,18 +802,18 @@ subroutine constitutive_dislokmc_init(fileUnit) enddo myTwinSystems enddo myTwinFamilies - call constitutive_dislokmc_stateInit(phase,instance) - call constitutive_dislokmc_aTolState(phase,instance) + call plastic_dislokmc_stateInit(phase,instance) + call plastic_dislokmc_aTolState(phase,instance) endif myPhase2 enddo initializeInstances -end subroutine constitutive_dislokmc_init +end subroutine plastic_dislokmc_init !-------------------------------------------------------------------------------------------------- !> @brief sets the relevant state values for a given instance of this plasticity !-------------------------------------------------------------------------------------------------- -subroutine constitutive_dislokmc_stateInit(ph,instance) +subroutine plastic_dislokmc_stateInit(ph,instance) use math, only: & pi use lattice, only: & @@ -830,28 +830,28 @@ subroutine constitutive_dislokmc_stateInit(ph,instance) real(pReal), dimension(plasticState(ph)%sizeState) :: tempState integer(pInt) :: i,j,f,ns,nt, index_myFamily - real(pReal), dimension(constitutive_dislokmc_totalNslip(instance)) :: & + real(pReal), dimension(plastic_dislokmc_totalNslip(instance)) :: & rhoEdge0, & rhoEdgeDip0, & invLambdaSlip0, & MeanFreePathSlip0, & tauSlipThreshold0 - real(pReal), dimension(constitutive_dislokmc_totalNtwin(instance)) :: & + real(pReal), dimension(plastic_dislokmc_totalNtwin(instance)) :: & MeanFreePathTwin0,TwinVolume0 tempState = 0.0_pReal - ns = constitutive_dislokmc_totalNslip(instance) - nt = constitutive_dislokmc_totalNtwin(instance) + ns = plastic_dislokmc_totalNslip(instance) + nt = plastic_dislokmc_totalNtwin(instance) !-------------------------------------------------------------------------------------------------- ! initialize basic slip state variables do f = 1_pInt,lattice_maxNslipFamily - index_myFamily = sum(constitutive_dislokmc_Nslip(1:f-1_pInt,instance)) ! index in truncated slip system list + index_myFamily = sum(plastic_dislokmc_Nslip(1:f-1_pInt,instance)) ! index in truncated slip system list rhoEdge0(index_myFamily+1_pInt: & - index_myFamily+constitutive_dislokmc_Nslip(f,instance)) = & - constitutive_dislokmc_rhoEdge0(f,instance) + index_myFamily+plastic_dislokmc_Nslip(f,instance)) = & + plastic_dislokmc_rhoEdge0(f,instance) rhoEdgeDip0(index_myFamily+1_pInt: & - index_myFamily+constitutive_dislokmc_Nslip(f,instance)) = & - constitutive_dislokmc_rhoEdgeDip0(f,instance) + index_myFamily+plastic_dislokmc_Nslip(f,instance)) = & + plastic_dislokmc_rhoEdgeDip0(f,instance) enddo tempState(1_pInt:ns) = rhoEdge0 @@ -860,19 +860,19 @@ subroutine constitutive_dislokmc_stateInit(ph,instance) !-------------------------------------------------------------------------------------------------- ! initialize dependent slip microstructural variables forall (i = 1_pInt:ns) & - invLambdaSlip0(i) = sqrt(dot_product((rhoEdge0+rhoEdgeDip0),constitutive_dislokmc_forestProjectionEdge(1:ns,i,instance)))/ & - constitutive_dislokmc_CLambdaSlipPerSlipSystem(i,instance) + invLambdaSlip0(i) = sqrt(dot_product((rhoEdge0+rhoEdgeDip0),plastic_dislokmc_forestProjectionEdge(1:ns,i,instance)))/ & + plastic_dislokmc_CLambdaSlipPerSlipSystem(i,instance) tempState(3_pInt*ns+2_pInt*nt+1:4_pInt*ns+2_pInt*nt) = invLambdaSlip0 forall (i = 1_pInt:ns) & MeanFreePathSlip0(i) = & - constitutive_dislokmc_GrainSize(instance)/(1.0_pReal+invLambdaSlip0(i)*constitutive_dislokmc_GrainSize(instance)) + plastic_dislokmc_GrainSize(instance)/(1.0_pReal+invLambdaSlip0(i)*plastic_dislokmc_GrainSize(instance)) tempState(5_pInt*ns+3_pInt*nt+1:6_pInt*ns+3_pInt*nt) = MeanFreePathSlip0 forall (i = 1_pInt:ns) & tauSlipThreshold0(i) = & - lattice_mu(ph)*constitutive_dislokmc_burgersPerSlipSystem(i,instance) * & - sqrt(dot_product((rhoEdge0+rhoEdgeDip0),constitutive_dislokmc_interactionMatrix_SlipSlip(i,1:ns,instance))) + lattice_mu(ph)*plastic_dislokmc_burgersPerSlipSystem(i,instance) * & + sqrt(dot_product((rhoEdge0+rhoEdgeDip0),plastic_dislokmc_interactionMatrix_SlipSlip(i,1:ns,instance))) tempState(6_pInt*ns+4_pInt*nt+1:7_pInt*ns+4_pInt*nt) = tauSlipThreshold0 @@ -881,22 +881,22 @@ subroutine constitutive_dislokmc_stateInit(ph,instance) !-------------------------------------------------------------------------------------------------- ! initialize dependent twin microstructural variables forall (j = 1_pInt:nt) & - MeanFreePathTwin0(j) = constitutive_dislokmc_GrainSize(instance) + MeanFreePathTwin0(j) = plastic_dislokmc_GrainSize(instance) tempState(6_pInt*ns+3_pInt*nt+1_pInt:6_pInt*ns+4_pInt*nt) = MeanFreePathTwin0 forall (j = 1_pInt:nt) & TwinVolume0(j) = & - (pi/4.0_pReal)*constitutive_dislokmc_twinsizePerTwinSystem(j,instance)*MeanFreePathTwin0(j)**(2.0_pReal) + (pi/4.0_pReal)*plastic_dislokmc_twinsizePerTwinSystem(j,instance)*MeanFreePathTwin0(j)**(2.0_pReal) tempState(7_pInt*ns+5_pInt*nt+1_pInt:7_pInt*ns+6_pInt*nt) = TwinVolume0 plasticState(ph)%state0 = spread(tempState,2,size(plasticState(ph)%state(1,:))) -end subroutine constitutive_dislokmc_stateInit +end subroutine plastic_dislokmc_stateInit !-------------------------------------------------------------------------------------------------- !> @brief sets the relevant state values for a given instance of this plasticity !-------------------------------------------------------------------------------------------------- -subroutine constitutive_dislokmc_aTolState(ph,instance) +subroutine plastic_dislokmc_aTolState(ph,instance) use material, only: & plasticState @@ -906,33 +906,33 @@ subroutine constitutive_dislokmc_aTolState(ph,instance) instance ! number specifying the current instance of the plasticity ! Tolerance state for dislocation densities - plasticState(ph)%aTolState(1_pInt:2_pInt*constitutive_dislokmc_totalNslip(instance)) = & - constitutive_dislokmc_aTolRho(instance) + plasticState(ph)%aTolState(1_pInt:2_pInt*plastic_dislokmc_totalNslip(instance)) = & + plastic_dislokmc_aTolRho(instance) ! Tolerance state for accumulated shear due to slip - plasticState(ph)%aTolState(2_pInt*constitutive_dislokmc_totalNslip(instance)+1_pInt: & - 3_pInt*constitutive_dislokmc_totalNslip(instance))=1e6_pReal + plasticState(ph)%aTolState(2_pInt*plastic_dislokmc_totalNslip(instance)+1_pInt: & + 3_pInt*plastic_dislokmc_totalNslip(instance))=1e6_pReal ! Tolerance state for twin volume fraction - plasticState(ph)%aTolState(3_pInt*constitutive_dislokmc_totalNslip(instance)+1_pInt: & - 3_pInt*constitutive_dislokmc_totalNslip(instance)+& - constitutive_dislokmc_totalNtwin(instance)) = & - constitutive_dislokmc_aTolTwinFrac(instance) + plasticState(ph)%aTolState(3_pInt*plastic_dislokmc_totalNslip(instance)+1_pInt: & + 3_pInt*plastic_dislokmc_totalNslip(instance)+& + plastic_dislokmc_totalNtwin(instance)) = & + plastic_dislokmc_aTolTwinFrac(instance) ! Tolerance state for accumulated shear due to twin - plasticState(ph)%aTolState(3_pInt*constitutive_dislokmc_totalNslip(instance)+ & - constitutive_dislokmc_totalNtwin(instance)+1_pInt: & - 3_pInt*constitutive_dislokmc_totalNslip(instance)+ & - 2_pInt*constitutive_dislokmc_totalNtwin(instance)) = 1e6_pReal + plasticState(ph)%aTolState(3_pInt*plastic_dislokmc_totalNslip(instance)+ & + plastic_dislokmc_totalNtwin(instance)+1_pInt: & + 3_pInt*plastic_dislokmc_totalNslip(instance)+ & + 2_pInt*plastic_dislokmc_totalNtwin(instance)) = 1e6_pReal -end subroutine constitutive_dislokmc_aTolState +end subroutine plastic_dislokmc_aTolState !-------------------------------------------------------------------------------------------------- !> @brief returns the homogenized elasticity matrix !-------------------------------------------------------------------------------------------------- -function constitutive_dislokmc_homogenizedC(ipc,ip,el) +function plastic_dislokmc_homogenizedC(ipc,ip,el) use material, only: & homogenization_maxNgrains, & phase_plasticityInstance, & @@ -943,7 +943,7 @@ function constitutive_dislokmc_homogenizedC(ipc,ip,el) implicit none real(pReal), dimension(6,6) :: & - constitutive_dislokmc_homogenizedC + plastic_dislokmc_homogenizedC integer(pInt), intent(in) :: & ipc, & !< component-ID of integration point ip, & !< integration point @@ -958,24 +958,24 @@ function constitutive_dislokmc_homogenizedC(ipc,ip,el) of = mappingConstitutive(1,ipc,ip,el) ph = mappingConstitutive(2,ipc,ip,el) instance = phase_plasticityInstance(ph) - ns = constitutive_dislokmc_totalNslip(instance) - nt = constitutive_dislokmc_totalNtwin(instance) + ns = plastic_dislokmc_totalNslip(instance) + nt = plastic_dislokmc_totalNtwin(instance) !* Total twin volume fraction sumf = sum(plasticState(ph)%state((3_pInt*ns+1_pInt):(3_pInt*ns+nt),of)) ! safe for nt == 0 !* Homogenized elasticity matrix - constitutive_dislokmc_homogenizedC = (1.0_pReal-sumf)*lattice_C66(1:6,1:6,ph) + plastic_dislokmc_homogenizedC = (1.0_pReal-sumf)*lattice_C66(1:6,1:6,ph) do i=1_pInt,nt - constitutive_dislokmc_homogenizedC = constitutive_dislokmc_homogenizedC & - + plasticState(ph)%state(3_pInt*ns+i, of)*constitutive_dislokmc_Ctwin66(1:6,1:6,i,instance) + plastic_dislokmc_homogenizedC = plastic_dislokmc_homogenizedC & + + plasticState(ph)%state(3_pInt*ns+i, of)*plastic_dislokmc_Ctwin66(1:6,1:6,i,instance) enddo - end function constitutive_dislokmc_homogenizedC + end function plastic_dislokmc_homogenizedC !-------------------------------------------------------------------------------------------------- !> @brief calculates derived quantities from state !-------------------------------------------------------------------------------------------------- -subroutine constitutive_dislokmc_microstructure(temperature,ipc,ip,el) +subroutine plastic_dislokmc_microstructure(temperature,ipc,ip,el) use math, only: & pi use material, only: & @@ -1002,14 +1002,14 @@ subroutine constitutive_dislokmc_microstructure(temperature,ipc,ip,el) of real(pReal) :: & sumf,sfe,x0 - real(pReal), dimension(constitutive_dislokmc_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: fOverStacksize + real(pReal), dimension(plastic_dislokmc_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: fOverStacksize !* Shortened notation of = mappingConstitutive(1,ipc,ip,el) ph = mappingConstitutive(2,ipc,ip,el) instance = phase_plasticityInstance(ph) - ns = constitutive_dislokmc_totalNslip(instance) - nt = constitutive_dislokmc_totalNtwin(instance) + ns = plastic_dislokmc_totalNslip(instance) + nt = plastic_dislokmc_totalNtwin(instance) !* State: 1 : ns rho_edge !* State: ns+1 : 2*ns rho_dipole !* State: 2*ns+1 : 3*ns accumulated shear due to slip @@ -1028,90 +1028,90 @@ subroutine constitutive_dislokmc_microstructure(temperature,ipc,ip,el) sumf = sum(plasticState(ph)%state((3*ns+1):(3*ns+nt), of)) ! safe for nt == 0 !* Stacking fault energy - sfe = constitutive_dislokmc_SFE_0K(instance) + & - constitutive_dislokmc_dSFE_dT(instance) * Temperature + sfe = plastic_dislokmc_SFE_0K(instance) + & + plastic_dislokmc_dSFE_dT(instance) * Temperature !* rescaled twin volume fraction for topology forall (t = 1_pInt:nt) & fOverStacksize(t) = & - plasticState(ph)%state(3_pInt*ns+t, of)/constitutive_dislokmc_twinsizePerTwinSystem(t,instance) + plasticState(ph)%state(3_pInt*ns+t, of)/plastic_dislokmc_twinsizePerTwinSystem(t,instance) !* 1/mean free distance between 2 forest dislocations seen by a moving dislocation forall (s = 1_pInt:ns) & plasticState(ph)%state(3_pInt*ns+2_pInt*nt+s, of) = & sqrt(dot_product((plasticState(ph)%state(1:ns,of)+plasticState(ph)%state(ns+1_pInt:2_pInt*ns,of)),& - constitutive_dislokmc_forestProjectionEdge(1:ns,s,instance)))/ & - constitutive_dislokmc_CLambdaSlipPerSlipSystem(s,instance) + plastic_dislokmc_forestProjectionEdge(1:ns,s,instance)))/ & + plastic_dislokmc_CLambdaSlipPerSlipSystem(s,instance) !* 1/mean free distance between 2 twin stacks from different systems seen by a moving dislocation !$OMP CRITICAL (evilmatmul) plasticState(ph)%state((4_pInt*ns+2_pInt*nt+1_pInt):(5_pInt*ns+2_pInt*nt), of) = 0.0_pReal if (nt > 0_pInt .and. ns > 0_pInt) & plasticState(ph)%state((4_pInt*ns+2_pInt*nt+1):(5_pInt*ns+2_pInt*nt), of) = & - matmul(constitutive_dislokmc_interactionMatrix_SlipTwin(1:ns,1:nt,instance),fOverStacksize(1:nt))/(1.0_pReal-sumf) + matmul(plastic_dislokmc_interactionMatrix_SlipTwin(1:ns,1:nt,instance),fOverStacksize(1:nt))/(1.0_pReal-sumf) !$OMP END CRITICAL (evilmatmul) !* 1/mean free distance between 2 twin stacks from different systems seen by a growing twin !$OMP CRITICAL (evilmatmul) if (nt > 0_pInt) & plasticState(ph)%state((5_pInt*ns+2_pInt*nt+1_pInt):(5_pInt*ns+3_pInt*nt), of) = & - matmul(constitutive_dislokmc_interactionMatrix_TwinTwin(1:nt,1:nt,instance),fOverStacksize(1:nt))/(1.0_pReal-sumf) + matmul(plastic_dislokmc_interactionMatrix_TwinTwin(1:nt,1:nt,instance),fOverStacksize(1:nt))/(1.0_pReal-sumf) !$OMP END CRITICAL (evilmatmul) !* mean free path between 2 obstacles seen by a moving dislocation do s = 1_pInt,ns if (nt > 0_pInt) then plasticState(ph)%state(5_pInt*ns+3_pInt*nt+s, of) = & - constitutive_dislokmc_GrainSize(instance)/(1.0_pReal+constitutive_dislokmc_GrainSize(instance)*& + plastic_dislokmc_GrainSize(instance)/(1.0_pReal+plastic_dislokmc_GrainSize(instance)*& (plasticState(ph)%state(3_pInt*ns+2_pInt*nt+s, of)+plasticState(ph)%state(4_pInt*ns+2_pInt*nt+s, of))) else plasticState(ph)%state(5_pInt*ns+s, of) = & - constitutive_dislokmc_GrainSize(instance)/& - (1.0_pReal+constitutive_dislokmc_GrainSize(instance)*(plasticState(ph)%state(3_pInt*ns+s, of))) + plastic_dislokmc_GrainSize(instance)/& + (1.0_pReal+plastic_dislokmc_GrainSize(instance)*(plasticState(ph)%state(3_pInt*ns+s, of))) endif enddo !* mean free path between 2 obstacles seen by a growing twin forall (t = 1_pInt:nt) & plasticState(ph)%state(6_pInt*ns+3_pInt*nt+t, of) = & - (constitutive_dislokmc_Cmfptwin(instance)*constitutive_dislokmc_GrainSize(instance))/& - (1.0_pReal+constitutive_dislokmc_GrainSize(instance)*plasticState(ph)%state(5_pInt*ns+2_pInt*nt+t, of)) + (plastic_dislokmc_Cmfptwin(instance)*plastic_dislokmc_GrainSize(instance))/& + (1.0_pReal+plastic_dislokmc_GrainSize(instance)*plasticState(ph)%state(5_pInt*ns+2_pInt*nt+t, of)) !* threshold stress for dislocation motion forall (s = 1_pInt:ns) & plasticState(ph)%state(6_pInt*ns+4_pInt*nt+s, of) = & - lattice_mu(ph)*constitutive_dislokmc_burgersPerSlipSystem(s,instance)*& + lattice_mu(ph)*plastic_dislokmc_burgersPerSlipSystem(s,instance)*& sqrt(dot_product((plasticState(ph)%state(1:ns, of)+plasticState(ph)%state(ns+1_pInt:2_pInt*ns, of)),& - constitutive_dislokmc_interactionMatrix_SlipSlip(s,1:ns,instance))) + plastic_dislokmc_interactionMatrix_SlipSlip(s,1:ns,instance))) !* threshold stress for growing twin forall (t = 1_pInt:nt) & plasticState(ph)%state(7_pInt*ns+4_pInt*nt+t, of) = & - constitutive_dislokmc_Cthresholdtwin(instance)*& - (sfe/(3.0_pReal*constitutive_dislokmc_burgersPerTwinSystem(t,instance))+& - 3.0_pReal*constitutive_dislokmc_burgersPerTwinSystem(t,instance)*lattice_mu(ph)/& - (constitutive_dislokmc_L0(instance)*constitutive_dislokmc_burgersPerSlipSystem(t,instance))) + plastic_dislokmc_Cthresholdtwin(instance)*& + (sfe/(3.0_pReal*plastic_dislokmc_burgersPerTwinSystem(t,instance))+& + 3.0_pReal*plastic_dislokmc_burgersPerTwinSystem(t,instance)*lattice_mu(ph)/& + (plastic_dislokmc_L0(instance)*plastic_dislokmc_burgersPerSlipSystem(t,instance))) !* final twin volume after growth forall (t = 1_pInt:nt) & plasticState(ph)%state(7_pInt*ns+5_pInt*nt+t, of) = & - (pi/4.0_pReal)*constitutive_dislokmc_twinsizePerTwinSystem(t,instance)*plasticState(ph)%state(6*ns+3*nt+t, of)**(2.0_pReal) + (pi/4.0_pReal)*plastic_dislokmc_twinsizePerTwinSystem(t,instance)*plasticState(ph)%state(6*ns+3*nt+t, of)**(2.0_pReal) !* equilibrium seperation of partial dislocations do t = 1_pInt,nt - x0 = lattice_mu(ph)*constitutive_dislokmc_burgersPerTwinSystem(t,instance)**(2.0_pReal)/& + x0 = lattice_mu(ph)*plastic_dislokmc_burgersPerTwinSystem(t,instance)**(2.0_pReal)/& (sfe*8.0_pReal*pi)*(2.0_pReal+lattice_nu(ph))/(1.0_pReal-lattice_nu(ph)) - constitutive_dislokmc_tau_r(t,instance)= & - lattice_mu(ph)*constitutive_dislokmc_burgersPerTwinSystem(t,instance)/(2.0_pReal*pi)*& - (1/(x0+constitutive_dislokmc_xc(instance))+cos(pi/3.0_pReal)/x0) !!! used where?? + plastic_dislokmc_tau_r(t,instance)= & + lattice_mu(ph)*plastic_dislokmc_burgersPerTwinSystem(t,instance)/(2.0_pReal*pi)*& + (1/(x0+plastic_dislokmc_xc(instance))+cos(pi/3.0_pReal)/x0) !!! used where?? enddo -end subroutine constitutive_dislokmc_microstructure +end subroutine plastic_dislokmc_microstructure !-------------------------------------------------------------------------------------------------- !> @brief calculates plastic velocity gradient and its tangent !-------------------------------------------------------------------------------------------------- -subroutine constitutive_dislokmc_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Temperature,slipDamage,ipc,ip,el) +subroutine plastic_dislokmc_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Temperature,slipDamage,ipc,ip,el) use prec, only: & tol_math_check use math, only: & @@ -1147,7 +1147,7 @@ subroutine constitutive_dislokmc_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Tempera real(pReal), intent(in) :: Temperature real(pReal), dimension(6), intent(in) :: Tstar_v real(pReal), & - dimension(constitutive_dislokmc_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))), & + dimension(plastic_dislokmc_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))), & intent(in) :: & slipDamage real(pReal), dimension(3,3), intent(out) :: Lp @@ -1161,15 +1161,15 @@ subroutine constitutive_dislokmc_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Tempera nonSchmid_tensor real(pReal), dimension(3,3,3,3) :: & dLp_dTstar3333 - real(pReal), dimension(constitutive_dislokmc_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & + real(pReal), dimension(plastic_dislokmc_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & gdot_slip_pos,gdot_slip_neg !* Shortened notation of = mappingConstitutive(1,ipc,ip,el) ph = mappingConstitutive(2,ipc,ip,el) instance = phase_plasticityInstance(ph) - ns = constitutive_dislokmc_totalNslip(instance) - nt = constitutive_dislokmc_totalNtwin(instance) + ns = plastic_dislokmc_totalNslip(instance) + nt = plastic_dislokmc_totalNtwin(instance) Lp = 0.0_pReal dLp_dTstar3333 = 0.0_pReal @@ -1184,14 +1184,14 @@ subroutine constitutive_dislokmc_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Tempera j = 0_pInt slipFamilies: do f = 1_pInt,lattice_maxNslipFamily index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family - slipSystems: do i = 1_pInt,constitutive_dislokmc_Nslip(f,instance) + slipSystems: do i = 1_pInt,plastic_dislokmc_Nslip(f,instance) j = j+1_pInt !* Boltzmann ratio - BoltzmannRatio = constitutive_dislokmc_QedgePerSlipSystem(j,instance)/(kB*Temperature) + BoltzmannRatio = plastic_dislokmc_QedgePerSlipSystem(j,instance)/(kB*Temperature) !* Initial shear rates DotGamma0 = & - plasticState(ph)%state(j, of)*constitutive_dislokmc_burgersPerSlipSystem(j,instance)*& - constitutive_dislokmc_v0PerSlipSystem(j,instance) + plasticState(ph)%state(j, of)*plastic_dislokmc_burgersPerSlipSystem(j,instance)*& + plastic_dislokmc_v0PerSlipSystem(j,instance) !* Resolved shear stress on slip system tau_slip_pos = dot_product(Tstar_v,lattice_Sslip_v(1:6,1,index_myFamily+i,ph)) tau_slip_neg = tau_slip_pos @@ -1199,13 +1199,13 @@ subroutine constitutive_dislokmc_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Tempera nonSchmid_tensor(1:3,1:3,2) = nonSchmid_tensor(1:3,1:3,1) nonSchmidSystems: do k = 1,lattice_NnonSchmid(ph) - tau_slip_pos = tau_slip_pos + constitutive_dislokmc_nonSchmidCoeff(k,instance)* & + tau_slip_pos = tau_slip_pos + plastic_dislokmc_nonSchmidCoeff(k,instance)* & dot_product(Tstar_v,lattice_Sslip_v(1:6,2*k,index_myFamily+i,ph)) - tau_slip_neg = tau_slip_neg + constitutive_dislokmc_nonSchmidCoeff(k,instance)* & + tau_slip_neg = tau_slip_neg + plastic_dislokmc_nonSchmidCoeff(k,instance)* & dot_product(Tstar_v,lattice_Sslip_v(1:6,2*k+1,index_myFamily+i,ph)) - nonSchmid_tensor(1:3,1:3,1) = nonSchmid_tensor(1:3,1:3,1) + constitutive_dislokmc_nonSchmidCoeff(k,instance)*& + nonSchmid_tensor(1:3,1:3,1) = nonSchmid_tensor(1:3,1:3,1) + plastic_dislokmc_nonSchmidCoeff(k,instance)*& lattice_Sslip(1:3,1:3,2*k,index_myFamily+i,ph) - nonSchmid_tensor(1:3,1:3,2) = nonSchmid_tensor(1:3,1:3,2) + constitutive_dislokmc_nonSchmidCoeff(k,instance)*& + nonSchmid_tensor(1:3,1:3,2) = nonSchmid_tensor(1:3,1:3,2) + plastic_dislokmc_nonSchmidCoeff(k,instance)*& lattice_Sslip(1:3,1:3,2*k+1,index_myFamily+i,ph) enddo nonSchmidSystems !* Applying damage to slip system @@ -1215,16 +1215,16 @@ subroutine constitutive_dislokmc_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Tempera significantPostitiveStress: if((abs(tau_slip_pos)-plasticState(ph)%state(6*ns+4*nt+j, of)) > tol_math_check) then !* Stress ratios stressRatio = ((abs(tau_slip_pos)-plasticState(ph)%state(6*ns+4*nt+j, of))/& - (constitutive_dislokmc_SolidSolutionStrength(instance)+& - constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance))) - stressRatio_p = stressRatio** constitutive_dislokmc_pPerSlipFamily(f,instance) - stressRatio_pminus1 = stressRatio**(constitutive_dislokmc_pPerSlipFamily(f,instance)-1.0_pReal) - stressRatio_u = stressRatio** constitutive_dislokmc_uPerSlipFamily(f,instance) - stressRatio_uminus1 = stressRatio**(constitutive_dislokmc_uPerSlipFamily(f,instance)-1.0_pReal) + (plastic_dislokmc_SolidSolutionStrength(instance)+& + plastic_dislokmc_tau_peierlsPerSlipFamily(f,instance))) + stressRatio_p = stressRatio** plastic_dislokmc_pPerSlipFamily(f,instance) + stressRatio_pminus1 = stressRatio**(plastic_dislokmc_pPerSlipFamily(f,instance)-1.0_pReal) + stressRatio_u = stressRatio** plastic_dislokmc_uPerSlipFamily(f,instance) + stressRatio_uminus1 = stressRatio**(plastic_dislokmc_uPerSlipFamily(f,instance)-1.0_pReal) !* Shear rates due to slip - vel_slip = exp(-BoltzmannRatio*(1-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)) & - * (1.0_pReal-constitutive_dislokmc_sPerSlipFamily(f,instance) & - * exp(-BoltzmannRatio*(1-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance))) + vel_slip = exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance)) & + * (1.0_pReal-plastic_dislokmc_sPerSlipFamily(f,instance) & + * exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance))) gdot_slip_pos(j) = DotGamma0 & * StressRatio_u * vel_slip & @@ -1232,33 +1232,33 @@ subroutine constitutive_dislokmc_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Tempera !* Derivatives of shear rates dvel_slip = & - (abs(exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)))& - *BoltzmannRatio*constitutive_dislokmc_pPerSlipFamily(f,instance)& - *constitutive_dislokmc_qPerSlipFamily(f,instance)/& - (constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance))*& - StressRatio_pminus1*(1.0_pReal-StressRatio_p)**(constitutive_dislokmc_qPerSlipFamily(f,instance)-1.0_pReal) )& - *(1.0_pReal - 2.0_pReal*constitutive_dislokmc_sPerSlipFamily(f,instance)& - *abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)))) + (abs(exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance)))& + *BoltzmannRatio*plastic_dislokmc_pPerSlipFamily(f,instance)& + *plastic_dislokmc_qPerSlipFamily(f,instance)/& + (plastic_dislokmc_SolidSolutionStrength(instance)+plastic_dislokmc_tau_peierlsPerSlipFamily(f,instance))*& + StressRatio_pminus1*(1.0_pReal-StressRatio_p)**(plastic_dislokmc_qPerSlipFamily(f,instance)-1.0_pReal) )& + *(1.0_pReal - 2.0_pReal*plastic_dislokmc_sPerSlipFamily(f,instance)& + *abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance)))) dgdot_dtauslip_pos = DotGamma0 * & - ( constitutive_dislokmc_uPerSlipFamily(f,instance)*StressRatio_uminus1 & - /(constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance))& + ( plastic_dislokmc_uPerSlipFamily(f,instance)*StressRatio_uminus1 & + /(plastic_dislokmc_SolidSolutionStrength(instance)+plastic_dislokmc_tau_peierlsPerSlipFamily(f,instance))& * vel_slip & + StressRatio_u * dvel_slip) endif significantPostitiveStress significantNegativeStress: if((abs(tau_slip_neg)-plasticState(ph)%state(6*ns+4*nt+j, of)) > tol_math_check) then !* Stress ratios stressRatio = ((abs(tau_slip_neg)-plasticState(ph)%state(6*ns+4*nt+j, of))/& - (constitutive_dislokmc_SolidSolutionStrength(instance)+& - constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance))) - stressRatio_p = stressRatio** constitutive_dislokmc_pPerSlipFamily(f,instance) - stressRatio_pminus1 = stressRatio**(constitutive_dislokmc_pPerSlipFamily(f,instance)-1.0_pReal) - stressRatio_u = stressRatio** constitutive_dislokmc_uPerSlipFamily(f,instance) - stressRatio_uminus1 = stressRatio**(constitutive_dislokmc_uPerSlipFamily(f,instance)-1.0_pReal) + (plastic_dislokmc_SolidSolutionStrength(instance)+& + plastic_dislokmc_tau_peierlsPerSlipFamily(f,instance))) + stressRatio_p = stressRatio** plastic_dislokmc_pPerSlipFamily(f,instance) + stressRatio_pminus1 = stressRatio**(plastic_dislokmc_pPerSlipFamily(f,instance)-1.0_pReal) + stressRatio_u = stressRatio** plastic_dislokmc_uPerSlipFamily(f,instance) + stressRatio_uminus1 = stressRatio**(plastic_dislokmc_uPerSlipFamily(f,instance)-1.0_pReal) !* Shear rates due to slip - vel_slip = exp(-BoltzmannRatio*(1-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)) & - * (1.0_pReal-constitutive_dislokmc_sPerSlipFamily(f,instance) & - * exp(-BoltzmannRatio*(1-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance))) + vel_slip = exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance)) & + * (1.0_pReal-plastic_dislokmc_sPerSlipFamily(f,instance) & + * exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance))) gdot_slip_neg(j) = DotGamma0 & * StressRatio_u * vel_slip & @@ -1266,17 +1266,17 @@ subroutine constitutive_dislokmc_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Tempera !* Derivatives of shear rates dvel_slip = & - (abs(exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)))& - *BoltzmannRatio*constitutive_dislokmc_pPerSlipFamily(f,instance)& - *constitutive_dislokmc_qPerSlipFamily(f,instance)/& - (constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance))*& - StressRatio_pminus1*(1.0_pReal-StressRatio_p)**(constitutive_dislokmc_qPerSlipFamily(f,instance)-1.0_pReal) )& - *(1.0_pReal - 2.0_pReal*constitutive_dislokmc_sPerSlipFamily(f,instance)& - *abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)))) + (abs(exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance)))& + *BoltzmannRatio*plastic_dislokmc_pPerSlipFamily(f,instance)& + *plastic_dislokmc_qPerSlipFamily(f,instance)/& + (plastic_dislokmc_SolidSolutionStrength(instance)+plastic_dislokmc_tau_peierlsPerSlipFamily(f,instance))*& + StressRatio_pminus1*(1.0_pReal-StressRatio_p)**(plastic_dislokmc_qPerSlipFamily(f,instance)-1.0_pReal) )& + *(1.0_pReal - 2.0_pReal*plastic_dislokmc_sPerSlipFamily(f,instance)& + *abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance)))) dgdot_dtauslip_neg = DotGamma0 * & - ( constitutive_dislokmc_uPerSlipFamily(f,instance)*StressRatio_uminus1 & - /(constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance))& + ( plastic_dislokmc_uPerSlipFamily(f,instance)*StressRatio_uminus1 & + /(plastic_dislokmc_SolidSolutionStrength(instance)+plastic_dislokmc_tau_peierlsPerSlipFamily(f,instance))& * vel_slip & + StressRatio_u * dvel_slip) endif significantNegativeStress @@ -1306,35 +1306,35 @@ subroutine constitutive_dislokmc_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Tempera j = 0_pInt twinFamilies: do f = 1_pInt,lattice_maxNtwinFamily index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,ph)) ! at which index starts my family - twinSystems: do i = 1_pInt,constitutive_dislokmc_Ntwin(f,instance) + twinSystems: do i = 1_pInt,plastic_dislokmc_Ntwin(f,instance) j = j+1_pInt !* Resolved shear stress on twin system tau_twin = dot_product(Tstar_v,lattice_Stwin_v(:,index_myFamily+i,ph)) !* Stress ratios if (tau_twin > tol_math_check) then - StressRatio_r = (plasticState(ph)%state(7*ns+4*nt+j, of)/tau_twin)**constitutive_dislokmc_rPerTwinFamily(f,instance) + StressRatio_r = (plasticState(ph)%state(7*ns+4*nt+j, of)/tau_twin)**plastic_dislokmc_rPerTwinFamily(f,instance) !* Shear rates and their derivatives due to twin select case(lattice_structure(ph)) case (LATTICE_fcc_ID) s1=lattice_fcc_twinNucleationSlipPair(1,index_myFamily+i) s2=lattice_fcc_twinNucleationSlipPair(2,index_myFamily+i) - if (tau_twin < constitutive_dislokmc_tau_r(j,instance)) then + if (tau_twin < plastic_dislokmc_tau_r(j,instance)) then Ndot0=(abs(gdot_slip_pos(s1))*(plasticState(ph)%state(s2,of)+plasticState(ph)%state(ns+s2, of))+& !no non-Schmid behavior for fcc, just take the not influenced positive gdot_slip_pos (= gdot_slip_neg) abs(gdot_slip_pos(s2))*(plasticState(ph)%state(s1,of)+plasticState(ph)%state(ns+s1, of)))/& - (constitutive_dislokmc_L0(instance)*constitutive_dislokmc_burgersPerSlipSystem(j,instance))*& - (1.0_pReal-exp(-constitutive_dislokmc_VcrossSlip(instance)/(kB*Temperature)*& - (constitutive_dislokmc_tau_r(j,instance)-tau_twin))) + (plastic_dislokmc_L0(instance)*plastic_dislokmc_burgersPerSlipSystem(j,instance))*& + (1.0_pReal-exp(-plastic_dislokmc_VcrossSlip(instance)/(kB*Temperature)*& + (plastic_dislokmc_tau_r(j,instance)-tau_twin))) else Ndot0=0.0_pReal end if case default - Ndot0=constitutive_dislokmc_Ndot0PerTwinSystem(j,instance) + Ndot0=plastic_dislokmc_Ndot0PerTwinSystem(j,instance) end select gdot_twin = & - (constitutive_dislokmc_MaxTwinFraction(instance)-sumf)*lattice_shearTwin(index_myFamily+i,ph)*& + (plastic_dislokmc_MaxTwinFraction(instance)-sumf)*lattice_shearTwin(index_myFamily+i,ph)*& plasticState(ph)%state(7*ns+5*nt+j, of)*Ndot0*exp(-StressRatio_r) - dgdot_dtautwin = ((gdot_twin*constitutive_dislokmc_rPerTwinFamily(f,instance))/tau_twin)*StressRatio_r + dgdot_dtautwin = ((gdot_twin*plastic_dislokmc_rPerTwinFamily(f,instance))/tau_twin)*StressRatio_r endif !* Plastic velocity gradient for mechanical twinning @@ -1351,13 +1351,13 @@ subroutine constitutive_dislokmc_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Tempera dLp_dTstar99 = math_Plain3333to99(dLp_dTstar3333) -end subroutine constitutive_dislokmc_LpAndItsTangent +end subroutine plastic_dislokmc_LpAndItsTangent !-------------------------------------------------------------------------------------------------- !> @brief calculates the rate of change of microstructure !-------------------------------------------------------------------------------------------------- -subroutine constitutive_dislokmc_dotState(Tstar_v,Temperature,ipc,ip,el) +subroutine plastic_dislokmc_dotState(Tstar_v,Temperature,ipc,ip,el) use prec, only: & tol_math_check use math, only: & @@ -1419,15 +1419,15 @@ subroutine constitutive_dislokmc_dotState(Tstar_v,Temperature,ipc,ip,el) tau_twin, & vel_slip, & gdot_slip - real(pReal), dimension(constitutive_dislokmc_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & + real(pReal), dimension(plastic_dislokmc_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & gdot_slip_pos, gdot_slip_neg !* Shortened notation of = mappingConstitutive(1,ipc,ip,el) ph = mappingConstitutive(2,ipc,ip,el) instance = phase_plasticityInstance(ph) - ns = constitutive_dislokmc_totalNslip(instance) - nt = constitutive_dislokmc_totalNtwin(instance) + ns = plastic_dislokmc_totalNslip(instance) + nt = plastic_dislokmc_totalNtwin(instance) !* Total twin volume fraction sumf = sum(plasticState(ph)%state((3_pInt*ns+1_pInt):(3_pInt*ns+nt), of)) ! safe for nt == 0 @@ -1438,36 +1438,36 @@ subroutine constitutive_dislokmc_dotState(Tstar_v,Temperature,ipc,ip,el) j = 0_pInt slipFamilies: do f = 1_pInt,lattice_maxNslipFamily index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family - slipSystems: do i = 1_pInt,constitutive_dislokmc_Nslip(f,instance) + slipSystems: do i = 1_pInt,plastic_dislokmc_Nslip(f,instance) j = j+1_pInt !* Boltzmann ratio - BoltzmannRatio = constitutive_dislokmc_QedgePerSlipSystem(j,instance)/(kB*Temperature) + BoltzmannRatio = plastic_dislokmc_QedgePerSlipSystem(j,instance)/(kB*Temperature) !* Initial shear rates DotGamma0 = & - plasticState(ph)%state(j, of)*constitutive_dislokmc_burgersPerSlipSystem(j,instance)*& - constitutive_dislokmc_v0PerSlipSystem(j,instance) + plasticState(ph)%state(j, of)*plastic_dislokmc_burgersPerSlipSystem(j,instance)*& + plastic_dislokmc_v0PerSlipSystem(j,instance) !* Resolved shear stress on slip system tau_slip_pos = dot_product(Tstar_v,lattice_Sslip_v(1:6,1,index_myFamily+i,ph)) tau_slip_neg = tau_slip_pos nonSchmidSystems: do k = 1,lattice_NnonSchmid(ph) - tau_slip_pos = tau_slip_pos + constitutive_dislokmc_nonSchmidCoeff(k,instance)* & + tau_slip_pos = tau_slip_pos + plastic_dislokmc_nonSchmidCoeff(k,instance)* & dot_product(Tstar_v,lattice_Sslip_v(1:6,2*k, index_myFamily+i,ph)) - tau_slip_neg = tau_slip_neg + constitutive_dislokmc_nonSchmidCoeff(k,instance)* & + tau_slip_neg = tau_slip_neg + plastic_dislokmc_nonSchmidCoeff(k,instance)* & dot_product(Tstar_v,lattice_Sslip_v(1:6,2*k+1,index_myFamily+i,ph)) enddo nonSchmidSystems significantPositiveStress: if((abs(tau_slip_pos)-plasticState(ph)%state(6*ns+4*nt+j, of)) > tol_math_check) then !* Stress ratios stressRatio = ((abs(tau_slip_pos)-plasticState(ph)%state(6*ns+4*nt+j, of))/& - (constitutive_dislokmc_SolidSolutionStrength(instance)+& - constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance))) - stressRatio_p = stressRatio** constitutive_dislokmc_pPerSlipFamily(f,instance) - stressRatio_u = stressRatio** constitutive_dislokmc_uPerSlipFamily(f,instance) + (plastic_dislokmc_SolidSolutionStrength(instance)+& + plastic_dislokmc_tau_peierlsPerSlipFamily(f,instance))) + stressRatio_p = stressRatio** plastic_dislokmc_pPerSlipFamily(f,instance) + stressRatio_u = stressRatio** plastic_dislokmc_uPerSlipFamily(f,instance) !* Shear rates due to slip - vel_slip = exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)) & - * (1.0_pReal-constitutive_dislokmc_sPerSlipFamily(f,instance) & - * exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance))) + vel_slip = exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance)) & + * (1.0_pReal-plastic_dislokmc_sPerSlipFamily(f,instance) & + * exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance))) gdot_slip_pos(j) = DotGamma0 & * StressRatio_u * vel_slip & @@ -1476,14 +1476,14 @@ subroutine constitutive_dislokmc_dotState(Tstar_v,Temperature,ipc,ip,el) significantNegativeStress: if((abs(tau_slip_neg)-plasticState(ph)%state(6*ns+4*nt+j, of)) > tol_math_check) then !* Stress ratios stressRatio = ((abs(tau_slip_neg)-plasticState(ph)%state(6*ns+4*nt+j, of))/& - (constitutive_dislokmc_SolidSolutionStrength(instance)+& - constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance))) - stressRatio_p = stressRatio** constitutive_dislokmc_pPerSlipFamily(f,instance) - stressRatio_u = stressRatio** constitutive_dislokmc_uPerSlipFamily(f,instance) + (plastic_dislokmc_SolidSolutionStrength(instance)+& + plastic_dislokmc_tau_peierlsPerSlipFamily(f,instance))) + stressRatio_p = stressRatio** plastic_dislokmc_pPerSlipFamily(f,instance) + stressRatio_u = stressRatio** plastic_dislokmc_uPerSlipFamily(f,instance) !* Shear rates due to slip - vel_slip = exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)) & - * (1.0_pReal-constitutive_dislokmc_sPerSlipFamily(f,instance) & - * exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance))) + vel_slip = exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance)) & + * (1.0_pReal-plastic_dislokmc_sPerSlipFamily(f,instance) & + * exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance))) gdot_slip_neg(j) = DotGamma0 & * StressRatio_u * vel_slip & @@ -1492,40 +1492,40 @@ subroutine constitutive_dislokmc_dotState(Tstar_v,Temperature,ipc,ip,el) gdot_slip = (gdot_slip_pos(j)+gdot_slip_neg(j))*0.5_pReal !* Multiplication DotRhoMultiplication = abs(gdot_slip)/& - (constitutive_dislokmc_burgersPerSlipSystem(j,instance)* & + (plastic_dislokmc_burgersPerSlipSystem(j,instance)* & plasticState(ph)%state(5*ns+3*nt+j, of)) !* Dipole formation EdgeDipMinDistance = & - constitutive_dislokmc_CEdgeDipMinDistance(instance)*constitutive_dislokmc_burgersPerSlipSystem(j,instance) + plastic_dislokmc_CEdgeDipMinDistance(instance)*plastic_dislokmc_burgersPerSlipSystem(j,instance) if (tau_slip_pos == 0.0_pReal) then DotRhoDipFormation = 0.0_pReal else EdgeDipDistance = & - (3.0_pReal*lattice_mu(ph)*constitutive_dislokmc_burgersPerSlipSystem(j,instance))/& + (3.0_pReal*lattice_mu(ph)*plastic_dislokmc_burgersPerSlipSystem(j,instance))/& (16.0_pReal*pi*abs(tau_slip_pos)) if (EdgeDipDistance>plasticState(ph)%state(5*ns+3*nt+j, of)) EdgeDipDistance=plasticState(ph)%state(5*ns+3*nt+j, of) if (EdgeDipDistance tol_math_check) then - StressRatio_r = (plasticState(ph)%state(7*ns+4*nt+j, of)/tau_twin)**constitutive_dislokmc_rPerTwinFamily(f,instance) + StressRatio_r = (plasticState(ph)%state(7*ns+4*nt+j, of)/tau_twin)**plastic_dislokmc_rPerTwinFamily(f,instance) !* Shear rates and their derivatives due to twin select case(lattice_structure(ph)) case (LATTICE_fcc_ID) s1=lattice_fcc_twinNucleationSlipPair(1,index_myFamily+i) s2=lattice_fcc_twinNucleationSlipPair(2,index_myFamily+i) - if (tau_twin < constitutive_dislokmc_tau_r(j,instance)) then + if (tau_twin < plastic_dislokmc_tau_r(j,instance)) then Ndot0=(abs(gdot_slip_pos(s1))*(plasticState(ph)%state(s2, of)+plasticState(ph)%state(ns+s2, of))+& !no non-Schmid behavior for fcc, just take the not influenced positive slip (gdot_slip_pos = gdot_slip_neg) abs(gdot_slip_pos(s2))*(plasticState(ph)%state(s1, of)+plasticState(ph)%state(ns+s1, of)))/& - (constitutive_dislokmc_L0(instance)*constitutive_dislokmc_burgersPerSlipSystem(j,instance))*& - (1.0_pReal-exp(-constitutive_dislokmc_VcrossSlip(instance)/(kB*Temperature)*& - (constitutive_dislokmc_tau_r(j,instance)-tau_twin))) + (plastic_dislokmc_L0(instance)*plastic_dislokmc_burgersPerSlipSystem(j,instance))*& + (1.0_pReal-exp(-plastic_dislokmc_VcrossSlip(instance)/(kB*Temperature)*& + (plastic_dislokmc_tau_r(j,instance)-tau_twin))) else Ndot0=0.0_pReal end if case default - Ndot0=constitutive_dislokmc_Ndot0PerTwinSystem(j,instance) + Ndot0=plastic_dislokmc_Ndot0PerTwinSystem(j,instance) end select plasticState(ph)%dotState(3_pInt*ns+j, of) = & - (constitutive_dislokmc_MaxTwinFraction(instance)-sumf)*& + (plastic_dislokmc_MaxTwinFraction(instance)-sumf)*& plasticState(ph)%state(7_pInt*ns+5_pInt*nt+j, of)*Ndot0*exp(-StressRatio_r) !* Dotstate for accumulated shear due to twin plasticState(ph)%dotState(3_pInt*ns+nt+j, of) = plasticState(ph)%dotState(3_pInt*ns+j, of) * & @@ -1590,13 +1590,13 @@ subroutine constitutive_dislokmc_dotState(Tstar_v,Temperature,ipc,ip,el) enddo twinSystems enddo twinFamilies -end subroutine constitutive_dislokmc_dotState +end subroutine plastic_dislokmc_dotState !-------------------------------------------------------------------------------------------------- !> @brief returns accumulated slip !-------------------------------------------------------------------------------------------------- -subroutine constitutive_dislokmc_getAccumulatedSlip(nSlip,accumulatedSlip,ipc, ip, el) +subroutine plastic_dislokmc_getAccumulatedSlip(nSlip,accumulatedSlip,ipc, ip, el) use lattice, only: & lattice_maxNslipFamily use material, only: & @@ -1623,25 +1623,25 @@ subroutine constitutive_dislokmc_getAccumulatedSlip(nSlip,accumulatedSlip,ipc, i offset = mappingConstitutive(1,ipc,ip,el) phase = mappingConstitutive(2,ipc,ip,el) instance = phase_plasticityInstance(phase) - nSlip = constitutive_dislokmc_totalNslip(instance) + nSlip = plastic_dislokmc_totalNslip(instance) allocate(accumulatedSlip(nSlip)) offset_accshear_slip = 2_pInt*nSlip j = 0_pInt slipFamilies: do f = 1_pInt,lattice_maxNslipFamily - slipSystems: do i = 1_pInt,constitutive_dislokmc_Nslip(f,instance) + slipSystems: do i = 1_pInt,plastic_dislokmc_Nslip(f,instance) j = j+1_pInt accumulatedSlip(j) = plasticState(phase)%state(offset_accshear_slip+j,offset) enddo slipSystems enddo slipFamilies -end subroutine constitutive_dislokmc_getAccumulatedSlip +end subroutine plastic_dislokmc_getAccumulatedSlip !-------------------------------------------------------------------------------------------------- !> @brief returns accumulated slip !-------------------------------------------------------------------------------------------------- -subroutine constitutive_dislokmc_getSlipRate(nSlip,slipRate,ipc, ip, el) +subroutine plastic_dislokmc_getSlipRate(nSlip,slipRate,ipc, ip, el) use lattice, only: & lattice_maxNslipFamily use material, only: & @@ -1668,25 +1668,25 @@ subroutine constitutive_dislokmc_getSlipRate(nSlip,slipRate,ipc, ip, el) offset = mappingConstitutive(1,ipc,ip,el) phase = mappingConstitutive(2,ipc,ip,el) instance = phase_plasticityInstance(phase) - nSlip = constitutive_dislokmc_totalNslip(instance) + nSlip = plastic_dislokmc_totalNslip(instance) allocate(slipRate(nSlip)) offset_accshear_slip = 2_pInt*nSlip j = 0_pInt slipFamilies: do f = 1_pInt,lattice_maxNslipFamily - slipSystems: do i = 1_pInt,constitutive_dislokmc_Nslip(f,instance) + slipSystems: do i = 1_pInt,plastic_dislokmc_Nslip(f,instance) j = j+1_pInt slipRate(j) = plasticState(phase)%dotState(offset_accshear_slip+j,offset) enddo slipSystems enddo slipFamilies -end subroutine constitutive_dislokmc_getSlipRate +end subroutine plastic_dislokmc_getSlipRate !-------------------------------------------------------------------------------------------------- !> @brief return array of constitutive results !-------------------------------------------------------------------------------------------------- -function constitutive_dislokmc_postResults(Tstar_v,Temperature,ipc,ip,el) +function plastic_dislokmc_postResults(Tstar_v,Temperature,ipc,ip,el) use prec, only: & tol_math_check use math, only: & @@ -1721,8 +1721,8 @@ function constitutive_dislokmc_postResults(Tstar_v,Temperature,ipc,ip,el) ip, & !< integration point el !< element - real(pReal), dimension(constitutive_dislokmc_sizePostResults(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & - constitutive_dislokmc_postResults + real(pReal), dimension(plastic_dislokmc_sizePostResults(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & + plastic_dislokmc_postResults integer(pInt) :: & instance,& @@ -1735,31 +1735,31 @@ function constitutive_dislokmc_postResults(Tstar_v,Temperature,ipc,ip,el) BoltzmannRatio,DotGamma0,StressRatio_r,Ndot0,stressRatio real(pReal) :: dvel_slip, vel_slip real(pReal) :: StressRatio_u,StressRatio_uminus1 - real(pReal), dimension(constitutive_dislokmc_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & + real(pReal), dimension(plastic_dislokmc_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & gdot_slip_pos,dgdot_dtauslip_pos,tau_slip_pos,gdot_slip_neg,dgdot_dtauslip_neg,tau_slip_neg !* Shortened notation of = mappingConstitutive(1,ipc,ip,el) ph = mappingConstitutive(2,ipc,ip,el) instance = phase_plasticityInstance(ph) - ns = constitutive_dislokmc_totalNslip(instance) - nt = constitutive_dislokmc_totalNtwin(instance) + ns = plastic_dislokmc_totalNslip(instance) + nt = plastic_dislokmc_totalNtwin(instance) !* Total twin volume fraction sumf = sum(plasticState(ph)%state((3_pInt*ns+1_pInt):(3_pInt*ns+nt), of)) ! safe for nt == 0 !* Required output c = 0_pInt - constitutive_dislokmc_postResults = 0.0_pReal + plastic_dislokmc_postResults = 0.0_pReal - do o = 1_pInt,constitutive_dislokmc_Noutput(instance) - select case(constitutive_dislokmc_outputID(o,instance)) + do o = 1_pInt,plastic_dislokmc_Noutput(instance) + select case(plastic_dislokmc_outputID(o,instance)) case (edge_density_ID) - constitutive_dislokmc_postResults(c+1_pInt:c+ns) = plasticState(ph)%state(1_pInt:ns, of) + plastic_dislokmc_postResults(c+1_pInt:c+ns) = plasticState(ph)%state(1_pInt:ns, of) c = c + ns case (dipole_density_ID) - constitutive_dislokmc_postResults(c+1_pInt:c+ns) = plasticState(ph)%state(ns+1_pInt:2_pInt*ns, of) + plastic_dislokmc_postResults(c+1_pInt:c+ns) = plasticState(ph)%state(ns+1_pInt:2_pInt*ns, of) c = c + ns case (shear_rate_slip_ID,shear_rate_twin_ID,stress_exponent_ID) gdot_slip_pos = 0.0_pReal @@ -1769,110 +1769,110 @@ function constitutive_dislokmc_postResults(Tstar_v,Temperature,ipc,ip,el) j = 0_pInt slipFamilies: do f = 1_pInt,lattice_maxNslipFamily index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family - slipSystems: do i = 1_pInt,constitutive_dislokmc_Nslip(f,instance) + slipSystems: do i = 1_pInt,plastic_dislokmc_Nslip(f,instance) j = j + 1_pInt !* Boltzmann ratio - BoltzmannRatio = constitutive_dislokmc_QedgePerSlipSystem(j,instance)/(kB*Temperature) + BoltzmannRatio = plastic_dislokmc_QedgePerSlipSystem(j,instance)/(kB*Temperature) !* Initial shear rates DotGamma0 = & - plasticState(ph)%state(j, of)*constitutive_dislokmc_burgersPerSlipSystem(j,instance)*& - constitutive_dislokmc_v0PerSlipSystem(j,instance) + plasticState(ph)%state(j, of)*plastic_dislokmc_burgersPerSlipSystem(j,instance)*& + plastic_dislokmc_v0PerSlipSystem(j,instance) !* Resolved shear stress on slip system tau_slip_pos(j) = dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,ph)) tau_slip_neg(j) = tau_slip_pos(j) nonSchmidSystems: do k = 1,lattice_NnonSchmid(ph) - tau_slip_pos = tau_slip_pos + constitutive_dislokmc_nonSchmidCoeff(k,instance)* & + tau_slip_pos = tau_slip_pos + plastic_dislokmc_nonSchmidCoeff(k,instance)* & dot_product(Tstar_v,lattice_Sslip_v(1:6,2*k,index_myFamily+i,ph)) - tau_slip_neg = tau_slip_neg + constitutive_dislokmc_nonSchmidCoeff(k,instance)* & + tau_slip_neg = tau_slip_neg + plastic_dislokmc_nonSchmidCoeff(k,instance)* & dot_product(Tstar_v,lattice_Sslip_v(1:6,2*k+1,index_myFamily+i,ph)) enddo nonSchmidSystems significantPostitiveStress: if((abs(tau_slip_pos(j))-plasticState(ph)%state(6*ns+4*nt+j, of)) > tol_math_check) then !* Stress ratios stressRatio = ((abs(tau_slip_pos(j))-plasticState(ph)%state(6*ns+4*nt+j, of))/& - (constitutive_dislokmc_SolidSolutionStrength(instance)+& - constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance))) - stressRatio_p = stressRatio** constitutive_dislokmc_pPerSlipFamily(f,instance) - stressRatio_pminus1 = stressRatio**(constitutive_dislokmc_pPerSlipFamily(f,instance)-1.0_pReal) - stressRatio_u = stressRatio** constitutive_dislokmc_uPerSlipFamily(f,instance) - stressRatio_uminus1 = stressRatio**(constitutive_dislokmc_uPerSlipFamily(f,instance)-1.0_pReal) + (plastic_dislokmc_SolidSolutionStrength(instance)+& + plastic_dislokmc_tau_peierlsPerSlipFamily(f,instance))) + stressRatio_p = stressRatio** plastic_dislokmc_pPerSlipFamily(f,instance) + stressRatio_pminus1 = stressRatio**(plastic_dislokmc_pPerSlipFamily(f,instance)-1.0_pReal) + stressRatio_u = stressRatio** plastic_dislokmc_uPerSlipFamily(f,instance) + stressRatio_uminus1 = stressRatio**(plastic_dislokmc_uPerSlipFamily(f,instance)-1.0_pReal) !* Shear rates due to slip - vel_slip = exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)) & - * (1.0_pReal-constitutive_dislokmc_sPerSlipFamily(f,instance) & - * exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance))) + vel_slip = exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance)) & + * (1.0_pReal-plastic_dislokmc_sPerSlipFamily(f,instance) & + * exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance))) gdot_slip_pos(j) = DotGamma0 & * StressRatio_u * vel_slip & * sign(1.0_pReal,tau_slip_pos(j)) !* Derivatives of shear rates dvel_slip = & - (abs(exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)))& - *BoltzmannRatio*constitutive_dislokmc_pPerSlipFamily(f,instance)& - *constitutive_dislokmc_qPerSlipFamily(f,instance)/& - (constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance))*& - StressRatio_pminus1*(1.0_pReal-StressRatio_p)**(constitutive_dislokmc_qPerSlipFamily(f,instance)-1.0_pReal) )& - *(1.0_pReal - 2.0_pReal*constitutive_dislokmc_sPerSlipFamily(f,instance)& - *abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)))) + (abs(exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance)))& + *BoltzmannRatio*plastic_dislokmc_pPerSlipFamily(f,instance)& + *plastic_dislokmc_qPerSlipFamily(f,instance)/& + (plastic_dislokmc_SolidSolutionStrength(instance)+plastic_dislokmc_tau_peierlsPerSlipFamily(f,instance))*& + StressRatio_pminus1*(1.0_pReal-StressRatio_p)**(plastic_dislokmc_qPerSlipFamily(f,instance)-1.0_pReal) )& + *(1.0_pReal - 2.0_pReal*plastic_dislokmc_sPerSlipFamily(f,instance)& + *abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance)))) dgdot_dtauslip_pos(j) = DotGamma0 * & - ( constitutive_dislokmc_uPerSlipFamily(f,instance)*StressRatio_uminus1 & - /(constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance))& + ( plastic_dislokmc_uPerSlipFamily(f,instance)*StressRatio_uminus1 & + /(plastic_dislokmc_SolidSolutionStrength(instance)+plastic_dislokmc_tau_peierlsPerSlipFamily(f,instance))& * vel_slip & + StressRatio_u * dvel_slip) endif significantPostitiveStress significantNegativeStress: if((abs(tau_slip_neg(j))-plasticState(ph)%state(6*ns+4*nt+j, of)) > tol_math_check) then !* Stress ratios stressRatio = ((abs(tau_slip_neg(j))-plasticState(ph)%state(6*ns+4*nt+j, of))/& - (constitutive_dislokmc_SolidSolutionStrength(instance)+& - constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance))) - stressRatio_p = stressRatio** constitutive_dislokmc_pPerSlipFamily(f,instance) - stressRatio_pminus1 = stressRatio**(constitutive_dislokmc_pPerSlipFamily(f,instance)-1.0_pReal) - stressRatio_u = stressRatio** constitutive_dislokmc_uPerSlipFamily(f,instance) - stressRatio_uminus1 = stressRatio**(constitutive_dislokmc_uPerSlipFamily(f,instance)-1.0_pReal) + (plastic_dislokmc_SolidSolutionStrength(instance)+& + plastic_dislokmc_tau_peierlsPerSlipFamily(f,instance))) + stressRatio_p = stressRatio** plastic_dislokmc_pPerSlipFamily(f,instance) + stressRatio_pminus1 = stressRatio**(plastic_dislokmc_pPerSlipFamily(f,instance)-1.0_pReal) + stressRatio_u = stressRatio** plastic_dislokmc_uPerSlipFamily(f,instance) + stressRatio_uminus1 = stressRatio**(plastic_dislokmc_uPerSlipFamily(f,instance)-1.0_pReal) !* Shear rates due to slip - vel_slip = exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)) & - * (1.0_pReal-constitutive_dislokmc_sPerSlipFamily(f,instance) & - * exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance))) + vel_slip = exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance)) & + * (1.0_pReal-plastic_dislokmc_sPerSlipFamily(f,instance) & + * exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance))) gdot_slip_neg(j) = DotGamma0 & * StressRatio_u * vel_slip & * sign(1.0_pReal,tau_slip_neg(j)) !* Derivatives of shear rates dvel_slip = & - (abs(exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)))& - *BoltzmannRatio*constitutive_dislokmc_pPerSlipFamily(f,instance)& - *constitutive_dislokmc_qPerSlipFamily(f,instance)/& - (constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance))*& - StressRatio_pminus1*(1.0_pReal-StressRatio_p)**(constitutive_dislokmc_qPerSlipFamily(f,instance)-1.0_pReal) )& - *(1.0_pReal - 2.0_pReal*constitutive_dislokmc_sPerSlipFamily(f,instance)& - *abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** constitutive_dislokmc_qPerSlipFamily(f,instance)))) + (abs(exp(-BoltzmannRatio*(1.0_pReal-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance)))& + *BoltzmannRatio*plastic_dislokmc_pPerSlipFamily(f,instance)& + *plastic_dislokmc_qPerSlipFamily(f,instance)/& + (plastic_dislokmc_SolidSolutionStrength(instance)+plastic_dislokmc_tau_peierlsPerSlipFamily(f,instance))*& + StressRatio_pminus1*(1.0_pReal-StressRatio_p)**(plastic_dislokmc_qPerSlipFamily(f,instance)-1.0_pReal) )& + *(1.0_pReal - 2.0_pReal*plastic_dislokmc_sPerSlipFamily(f,instance)& + *abs(exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_dislokmc_qPerSlipFamily(f,instance)))) dgdot_dtauslip_neg(j) = DotGamma0 * & - ( constitutive_dislokmc_uPerSlipFamily(f,instance)*StressRatio_uminus1 & - /(constitutive_dislokmc_SolidSolutionStrength(instance)+constitutive_dislokmc_tau_peierlsPerSlipFamily(f,instance))& + ( plastic_dislokmc_uPerSlipFamily(f,instance)*StressRatio_uminus1 & + /(plastic_dislokmc_SolidSolutionStrength(instance)+plastic_dislokmc_tau_peierlsPerSlipFamily(f,instance))& * vel_slip & + StressRatio_u * dvel_slip) endif significantNegativeStress enddo slipSystems enddo slipFamilies - if (constitutive_dislokmc_outputID(o,instance) == shear_rate_slip_ID) then - constitutive_dislokmc_postResults(c+1:c+ns) = (gdot_slip_pos + gdot_slip_neg)*0.5_pReal + if (plastic_dislokmc_outputID(o,instance) == shear_rate_slip_ID) then + plastic_dislokmc_postResults(c+1:c+ns) = (gdot_slip_pos + gdot_slip_neg)*0.5_pReal c = c + ns - elseif (constitutive_dislokmc_outputID(o,instance) == shear_rate_twin_ID) then + elseif (plastic_dislokmc_outputID(o,instance) == shear_rate_twin_ID) then if (nt > 0_pInt) then j = 0_pInt twinFamilies1: do f = 1_pInt,lattice_maxNtwinFamily index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,ph)) ! at which index starts my family - twinSystems1: do i = 1,constitutive_dislokmc_Ntwin(f,instance) + twinSystems1: do i = 1,plastic_dislokmc_Ntwin(f,instance) j = j + 1_pInt !* Resolved shear stress on twin system tau_twin = dot_product(Tstar_v,lattice_Stwin_v(:,index_myFamily+i,ph)) !* Stress ratios StressRatio_r = (plasticState(ph)%state(7_pInt*ns+4_pInt*nt+j, of)/ & - tau_twin)**constitutive_dislokmc_rPerTwinFamily(f,instance) + tau_twin)**plastic_dislokmc_rPerTwinFamily(f,instance) !* Shear rates due to twin if ( tau_twin > 0.0_pReal ) then @@ -1880,34 +1880,34 @@ function constitutive_dislokmc_postResults(Tstar_v,Temperature,ipc,ip,el) case (LATTICE_fcc_ID) s1=lattice_fcc_twinNucleationSlipPair(1,index_myFamily+i) s2=lattice_fcc_twinNucleationSlipPair(2,index_myFamily+i) - if (tau_twin < constitutive_dislokmc_tau_r(j,instance)) then + if (tau_twin < plastic_dislokmc_tau_r(j,instance)) then Ndot0=(abs(gdot_slip_pos(s1))*(plasticState(ph)%state(s2, of)+plasticState(ph)%state(ns+s2, of))+& !no non-Schmid behavior for fcc, just take the not influenced positive slip (gdot_slip_pos = gdot_slip_neg) abs(gdot_slip_pos(s2))*(plasticState(ph)%state(s1, of)+plasticState(ph)%state(ns+s1, of)))/& - (constitutive_dislokmc_L0(instance)*& - constitutive_dislokmc_burgersPerSlipSystem(j,instance))*& - (1.0_pReal-exp(-constitutive_dislokmc_VcrossSlip(instance)/(kB*Temperature)*& - (constitutive_dislokmc_tau_r(j,instance)-tau_twin))) + (plastic_dislokmc_L0(instance)*& + plastic_dislokmc_burgersPerSlipSystem(j,instance))*& + (1.0_pReal-exp(-plastic_dislokmc_VcrossSlip(instance)/(kB*Temperature)*& + (plastic_dislokmc_tau_r(j,instance)-tau_twin))) else Ndot0=0.0_pReal end if case default - Ndot0=constitutive_dislokmc_Ndot0PerTwinSystem(j,instance) + Ndot0=plastic_dislokmc_Ndot0PerTwinSystem(j,instance) end select - constitutive_dislokmc_postResults(c+j) = & - (constitutive_dislokmc_MaxTwinFraction(instance)-sumf)*lattice_shearTwin(index_myFamily+i,ph)*& + plastic_dislokmc_postResults(c+j) = & + (plastic_dislokmc_MaxTwinFraction(instance)-sumf)*lattice_shearTwin(index_myFamily+i,ph)*& plasticState(ph)%state(7_pInt*ns+5_pInt*nt+j, of)*Ndot0*exp(-StressRatio_r) endif enddo twinSystems1 enddo twinFamilies1 endif c = c + nt - elseif(constitutive_dislokmc_outputID(o,instance) == stress_exponent_ID) then + elseif(plastic_dislokmc_outputID(o,instance) == stress_exponent_ID) then do j = 1_pInt, ns if ((gdot_slip_pos(j)+gdot_slip_neg(j))*0.5_pReal==0.0_pReal) then - constitutive_dislokmc_postResults(c+j) = 0.0_pReal + plastic_dislokmc_postResults(c+j) = 0.0_pReal else - constitutive_dislokmc_postResults(c+j) = (tau_slip_pos(j)+tau_slip_neg(j))/& + plastic_dislokmc_postResults(c+j) = (tau_slip_pos(j)+tau_slip_neg(j))/& (gdot_slip_pos(j)+gdot_slip_neg(j))*& (dgdot_dtauslip_pos(j)+dgdot_dtauslip_neg(j))* 0.5_pReal endif @@ -1916,50 +1916,50 @@ function constitutive_dislokmc_postResults(Tstar_v,Temperature,ipc,ip,el) endif case (accumulated_shear_slip_ID) - constitutive_dislokmc_postResults(c+1_pInt:c+ns) = & + plastic_dislokmc_postResults(c+1_pInt:c+ns) = & plasticState(ph)%state((2_pInt*ns+1_pInt):(3_pInt*ns), of) c = c + ns case (mfp_slip_ID) - constitutive_dislokmc_postResults(c+1_pInt:c+ns) =& + plastic_dislokmc_postResults(c+1_pInt:c+ns) =& plasticState(ph)%state((5_pInt*ns+3_pInt*nt+1_pInt):(6_pInt*ns+3_pInt*nt), of) c = c + ns case (resolved_stress_slip_ID) j = 0_pInt slipFamilies1: do f = 1_pInt,lattice_maxNslipFamily index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family - slipSystems1: do i = 1_pInt,constitutive_dislokmc_Nslip(f,instance) + slipSystems1: do i = 1_pInt,plastic_dislokmc_Nslip(f,instance) j = j + 1_pInt - constitutive_dislokmc_postResults(c+j) =& + plastic_dislokmc_postResults(c+j) =& dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,ph)) enddo slipSystems1; enddo slipFamilies1 c = c + ns case (threshold_stress_slip_ID) - constitutive_dislokmc_postResults(c+1_pInt:c+ns) = & + plastic_dislokmc_postResults(c+1_pInt:c+ns) = & plasticState(ph)%state((6_pInt*ns+4_pInt*nt+1_pInt):(7_pInt*ns+4_pInt*nt), of) c = c + ns case (edge_dipole_distance_ID) j = 0_pInt slipFamilies2: do f = 1_pInt,lattice_maxNslipFamily index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family - slipSystems2: do i = 1_pInt,constitutive_dislokmc_Nslip(f,instance) + slipSystems2: do i = 1_pInt,plastic_dislokmc_Nslip(f,instance) j = j + 1_pInt - constitutive_dislokmc_postResults(c+j) = & - (3.0_pReal*lattice_mu(ph)*constitutive_dislokmc_burgersPerSlipSystem(j,instance))/& + plastic_dislokmc_postResults(c+j) = & + (3.0_pReal*lattice_mu(ph)*plastic_dislokmc_burgersPerSlipSystem(j,instance))/& (16.0_pReal*pi*abs(dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,ph)))) - constitutive_dislokmc_postResults(c+j)=min(constitutive_dislokmc_postResults(c+j),& + plastic_dislokmc_postResults(c+j)=min(plastic_dislokmc_postResults(c+j),& plasticState(ph)%state(5*ns+3*nt+j, of)) enddo slipSystems2; enddo slipFamilies2 c = c + ns case (twin_fraction_ID) - constitutive_dislokmc_postResults(c+1_pInt:c+nt) = plasticState(ph)%state((3_pInt*ns+1_pInt):(3_pInt*ns+nt), of) + plastic_dislokmc_postResults(c+1_pInt:c+nt) = plasticState(ph)%state((3_pInt*ns+1_pInt):(3_pInt*ns+nt), of) c = c + nt case (accumulated_shear_twin_ID) - constitutive_dislokmc_postResults(c+1_pInt:c+nt) = plasticState(ph)% & + plastic_dislokmc_postResults(c+1_pInt:c+nt) = plasticState(ph)% & state((3_pInt*ns+nt+1_pInt) :(3_pInt*ns+2_pInt*nt), of) c = c + nt case (mfp_twin_ID) - constitutive_dislokmc_postResults(c+1_pInt:c+nt) = plasticState(ph)% & + plastic_dislokmc_postResults(c+1_pInt:c+nt) = plasticState(ph)% & state((6_pInt*ns+3_pInt*nt+1_pInt):(6_pInt*ns+4_pInt*nt), of) c = c + nt case (resolved_stress_twin_ID) @@ -1967,18 +1967,18 @@ function constitutive_dislokmc_postResults(Tstar_v,Temperature,ipc,ip,el) j = 0_pInt twinFamilies2: do f = 1_pInt,lattice_maxNtwinFamily index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,ph)) ! at which index starts my family - twinSystems2: do i = 1_pInt,constitutive_dislokmc_Ntwin(f,instance) + twinSystems2: do i = 1_pInt,plastic_dislokmc_Ntwin(f,instance) j = j + 1_pInt - constitutive_dislokmc_postResults(c+j) = dot_product(Tstar_v,lattice_Stwin_v(:,index_myFamily+i,ph)) + plastic_dislokmc_postResults(c+j) = dot_product(Tstar_v,lattice_Stwin_v(:,index_myFamily+i,ph)) enddo twinSystems2; enddo twinFamilies2 endif c = c + nt case (threshold_stress_twin_ID) - constitutive_dislokmc_postResults(c+1_pInt:c+nt) = plasticState(ph)% & + plastic_dislokmc_postResults(c+1_pInt:c+nt) = plasticState(ph)% & state((7_pInt*ns+4_pInt*nt+1_pInt):(7_pInt*ns+5_pInt*nt), of) c = c + nt end select enddo -end function constitutive_dislokmc_postResults +end function plastic_dislokmc_postResults -end module constitutive_dislokmc +end module plastic_dislokmc diff --git a/code/constitutive_dislotwin.f90 b/code/plastic_dislotwin.f90 similarity index 55% rename from code/constitutive_dislotwin.f90 rename to code/plastic_dislotwin.f90 index 34f4d852f..385bb7993 100644 --- a/code/constitutive_dislotwin.f90 +++ b/code/plastic_dislotwin.f90 @@ -6,7 +6,7 @@ !> @brief material subroutine incoprorating dislocation and twinning physics !> @details to be done !-------------------------------------------------------------------------------------------------- -module constitutive_dislotwin +module plastic_dislotwin use prec, only: & pReal, & pInt @@ -14,125 +14,125 @@ module constitutive_dislotwin implicit none private integer(pInt), dimension(:), allocatable, public, protected :: & - constitutive_dislotwin_sizePostResults !< cumulative size of post results + plastic_dislotwin_sizePostResults !< cumulative size of post results integer(pInt), dimension(:,:), allocatable, target, public :: & - constitutive_dislotwin_sizePostResult !< size of each post result output + plastic_dislotwin_sizePostResult !< size of each post result output character(len=64), dimension(:,:), allocatable, target, public :: & - constitutive_dislotwin_output !< name of each post result output + plastic_dislotwin_output !< name of each post result output character(len=12), dimension(3), parameter, private :: & - CONSTITUTIVE_DISLOTWIN_listBasicSlipStates = & + plastic_dislotwin_listBasicSlipStates = & ['rhoEdge ', 'rhoEdgeDip ', 'accshearslip'] character(len=12), dimension(2), parameter, private :: & - CONSTITUTIVE_DISLOTWIN_listBasicTwinStates = & + plastic_dislotwin_listBasicTwinStates = & ['twinFraction', 'accsheartwin'] character(len=19), dimension(2), parameter, private :: & - CONSTITUTIVE_DISLOTWIN_listBasicTransStates = & + plastic_dislotwin_listBasicTransStates = & ['stressTransFraction', 'strainTransFraction'] character(len=18), dimension(5), parameter, private :: & - CONSTITUTIVE_DISLOTWIN_listDependentSlipStates = & + plastic_dislotwin_listDependentSlipStates = & ['invLambdaSlip ', 'invLambdaSlipTwin ', 'invLambdaSlipTrans','meanFreePathSlip ', 'tauSlipThreshold '] character(len=16), dimension(4), parameter, private :: & - CONSTITUTIVE_DISLOTWIN_listDependentTwinStates = & + plastic_dislotwin_listDependentTwinStates = & ['invLambdaTwin ', 'meanFreePathTwin', 'tauTwinThreshold', 'twinVolume '] real(pReal), parameter, private :: & kB = 1.38e-23_pReal !< Boltzmann constant in J/Kelvin integer(pInt), dimension(:), allocatable, target, public :: & - constitutive_dislotwin_Noutput !< number of outputs per instance of this plasticity + plastic_dislotwin_Noutput !< number of outputs per instance of this plasticity integer(pInt), dimension(:), allocatable, public, protected :: & - constitutive_dislotwin_totalNslip, & !< total number of active slip systems for each instance - constitutive_dislotwin_totalNtwin, & !< total number of active twin systems for each instance - constitutive_dislotwin_totalNtrans !< number of active transformation systems + plastic_dislotwin_totalNslip, & !< total number of active slip systems for each instance + plastic_dislotwin_totalNtwin, & !< total number of active twin systems for each instance + plastic_dislotwin_totalNtrans !< number of active transformation systems integer(pInt), dimension(:,:), allocatable, private :: & - 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 - constitutive_dislotwin_Ntrans !< number of active transformation systems for each family and instance + plastic_dislotwin_Nslip, & !< number of active slip systems for each family and instance + plastic_dislotwin_Ntwin, & !< number of active twin systems for each family and instance + plastic_dislotwin_Ntrans !< number of active transformation systems for each family and instance real(pReal), dimension(:), allocatable, private :: & - constitutive_dislotwin_CAtomicVolume, & !< atomic volume in Bugers vector unit - constitutive_dislotwin_D0, & !< prefactor for self-diffusion coefficient - constitutive_dislotwin_Qsd, & !< activation energy for dislocation climb - constitutive_dislotwin_GrainSize, & !< grain size - constitutive_dislotwin_pShearBand, & !< p-exponent in shearband velocity - constitutive_dislotwin_qShearBand, & !< q-exponent in shearband velocity - constitutive_dislotwin_MaxTwinFraction, & !< maximum allowed total twin volume fraction - constitutive_dislotwin_CEdgeDipMinDistance, & !< - constitutive_dislotwin_Cmfptwin, & !< - constitutive_dislotwin_Cthresholdtwin, & !< - constitutive_dislotwin_SolidSolutionStrength, & !< Strength due to elements in solid solution - constitutive_dislotwin_L0, & !< Length of twin nuclei in Burgers vectors - constitutive_dislotwin_xc, & !< critical distance for formation of twin nucleus - constitutive_dislotwin_VcrossSlip, & !< cross slip volume - constitutive_dislotwin_sbResistance, & !< value for shearband resistance (might become an internal state variable at some point) - constitutive_dislotwin_sbVelocity, & !< value for shearband velocity_0 - constitutive_dislotwin_sbQedge, & !< 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_dipoleFormationFactor, & !< scaling factor for dipole formation: 0: off, 1: on. other values not useful - constitutive_dislotwin_aTolRho, & !< absolute tolerance for integration of dislocation density - constitutive_dislotwin_aTolTwinFrac, & !< absolute tolerance for integration of twin volume fraction - constitutive_dislotwin_aTolTransFrac, & !< absolute tolerance for integration of trans volume fraction - constitutive_dislotwin_Cdwp, & !< Coefficient for double well potential - constitutive_dislotwin_Cnuc, & !< Coefficient for strain-induced martensite nucleation - constitutive_dislotwin_Cgro, & !< Coefficient for stress-assisted martensite growth - constitutive_dislotwin_deltaG !< Free energy difference between austensite and martensite [MPa] + plastic_dislotwin_CAtomicVolume, & !< atomic volume in Bugers vector unit + plastic_dislotwin_D0, & !< prefactor for self-diffusion coefficient + plastic_dislotwin_Qsd, & !< activation energy for dislocation climb + plastic_dislotwin_GrainSize, & !< grain size + plastic_dislotwin_pShearBand, & !< p-exponent in shearband velocity + plastic_dislotwin_qShearBand, & !< q-exponent in shearband velocity + plastic_dislotwin_MaxTwinFraction, & !< maximum allowed total twin volume fraction + plastic_dislotwin_CEdgeDipMinDistance, & !< + plastic_dislotwin_Cmfptwin, & !< + plastic_dislotwin_Cthresholdtwin, & !< + plastic_dislotwin_SolidSolutionStrength, & !< Strength due to elements in solid solution + plastic_dislotwin_L0, & !< Length of twin nuclei in Burgers vectors + plastic_dislotwin_xc, & !< critical distance for formation of twin nucleus + plastic_dislotwin_VcrossSlip, & !< cross slip volume + plastic_dislotwin_sbResistance, & !< value for shearband resistance (might become an internal state variable at some point) + plastic_dislotwin_sbVelocity, & !< value for shearband velocity_0 + plastic_dislotwin_sbQedge, & !< value for shearband systems Qedge + plastic_dislotwin_SFE_0K, & !< stacking fault energy at zero K + plastic_dislotwin_dSFE_dT, & !< temperature dependance of stacking fault energy + plastic_dislotwin_dipoleFormationFactor, & !< scaling factor for dipole formation: 0: off, 1: on. other values not useful + plastic_dislotwin_aTolRho, & !< absolute tolerance for integration of dislocation density + plastic_dislotwin_aTolTwinFrac, & !< absolute tolerance for integration of twin volume fraction + plastic_dislotwin_aTolTransFrac, & !< absolute tolerance for integration of trans volume fraction + plastic_dislotwin_Cdwp, & !< Coefficient for double well potential + plastic_dislotwin_Cnuc, & !< Coefficient for strain-induced martensite nucleation + plastic_dislotwin_Cgro, & !< Coefficient for stress-assisted martensite growth + plastic_dislotwin_deltaG !< Free energy difference between austensite and martensite [MPa] real(pReal), dimension(:,:,:,:), allocatable, private :: & - constitutive_dislotwin_Ctwin66 !< twin elasticity matrix in Mandel notation for each instance + plastic_dislotwin_Ctwin66 !< twin elasticity matrix in Mandel notation for each instance real(pReal), dimension(:,:,:,:,:,:), allocatable, private :: & - constitutive_dislotwin_Ctwin3333 !< twin elasticity matrix for each instance + plastic_dislotwin_Ctwin3333 !< twin elasticity matrix for each instance real(pReal), dimension(:,:,:,:), allocatable, private :: & - constitutive_dislotwin_Ctrans66 !< trans elasticity matrix in Mandel notation for each instance + plastic_dislotwin_Ctrans66 !< trans elasticity matrix in Mandel notation for each instance real(pReal), dimension(:,:,:,:,:,:), allocatable, private :: & - constitutive_dislotwin_Ctrans3333 !< trans elasticity matrix for each instance + plastic_dislotwin_Ctrans3333 !< trans elasticity matrix for each instance real(pReal), dimension(:,:), allocatable, private :: & - constitutive_dislotwin_rhoEdge0, & !< initial edge dislocation density per slip system for each family and instance - constitutive_dislotwin_rhoEdgeDip0, & !< initial edge dipole density per slip system for each family and instance - constitutive_dislotwin_burgersPerSlipFamily, & !< absolute length of burgers vector [m] for each slip family and instance - constitutive_dislotwin_burgersPerSlipSystem, & !< absolute length of burgers vector [m] for each slip system and instance - constitutive_dislotwin_burgersPerTwinFamily, & !< absolute length of burgers vector [m] for each twin family and instance - constitutive_dislotwin_burgersPerTwinSystem, & !< absolute length of burgers vector [m] for each twin system and instance - constitutive_dislotwin_QedgePerSlipFamily, & !< activation energy for glide [J] for each slip family and instance - constitutive_dislotwin_QedgePerSlipSystem, & !< activation energy for glide [J] for each slip system and instance - constitutive_dislotwin_v0PerSlipFamily, & !< dislocation velocity prefactor [m/s] for each family and instance - constitutive_dislotwin_v0PerSlipSystem, & !< dislocation velocity prefactor [m/s] for each slip system and instance - constitutive_dislotwin_tau_peierlsPerSlipFamily, & !< Peierls stress [Pa] for each family and instance - constitutive_dislotwin_Ndot0PerTwinFamily, & !< twin nucleation rate [1/m³s] for each twin family and instance - constitutive_dislotwin_Ndot0PerTwinSystem, & !< twin nucleation rate [1/m³s] for each twin system and instance - constitutive_dislotwin_tau_r, & !< stress to bring partial close together for each twin system and instance - constitutive_dislotwin_twinsizePerTwinFamily, & !< twin thickness [m] for each twin family and instance - constitutive_dislotwin_twinsizePerTwinSystem, & !< twin thickness [m] for each twin system and instance - constitutive_dislotwin_CLambdaSlipPerSlipFamily, & !< Adj. parameter for distance between 2 forest dislocations for each slip family and instance - constitutive_dislotwin_CLambdaSlipPerSlipSystem, & !< Adj. parameter for distance between 2 forest dislocations for each slip system and instance - constitutive_dislotwin_lamellarsizePerTransFamily, & !< martensite lamellar thickness [m] for each trans family and instance - constitutive_dislotwin_lamellarsizePerTransSystem, & !< martensite lamellar thickness [m] for each trans system and instance - constitutive_dislotwin_interaction_SlipSlip, & !< coefficients for slip-slip interaction for each interaction type and instance - constitutive_dislotwin_interaction_SlipTwin, & !< coefficients for slip-twin interaction for each interaction type and instance - constitutive_dislotwin_interaction_TwinSlip, & !< coefficients for twin-slip interaction for each interaction type and instance - constitutive_dislotwin_interaction_TwinTwin, & !< coefficients for twin-twin interaction for each interaction type and instance - constitutive_dislotwin_pPerSlipFamily, & !< p-exponent in glide velocity - constitutive_dislotwin_qPerSlipFamily, & !< q-exponent in glide velocity - constitutive_dislotwin_rPerTwinFamily !< r-exponent in twin nucleation rate + plastic_dislotwin_rhoEdge0, & !< initial edge dislocation density per slip system for each family and instance + plastic_dislotwin_rhoEdgeDip0, & !< initial edge dipole density per slip system for each family and instance + plastic_dislotwin_burgersPerSlipFamily, & !< absolute length of burgers vector [m] for each slip family and instance + plastic_dislotwin_burgersPerSlipSystem, & !< absolute length of burgers vector [m] for each slip system and instance + plastic_dislotwin_burgersPerTwinFamily, & !< absolute length of burgers vector [m] for each twin family and instance + plastic_dislotwin_burgersPerTwinSystem, & !< absolute length of burgers vector [m] for each twin system and instance + plastic_dislotwin_QedgePerSlipFamily, & !< activation energy for glide [J] for each slip family and instance + plastic_dislotwin_QedgePerSlipSystem, & !< activation energy for glide [J] for each slip system and instance + plastic_dislotwin_v0PerSlipFamily, & !< dislocation velocity prefactor [m/s] for each family and instance + plastic_dislotwin_v0PerSlipSystem, & !< dislocation velocity prefactor [m/s] for each slip system and instance + plastic_dislotwin_tau_peierlsPerSlipFamily, & !< Peierls stress [Pa] for each family and instance + plastic_dislotwin_Ndot0PerTwinFamily, & !< twin nucleation rate [1/m³s] for each twin family and instance + plastic_dislotwin_Ndot0PerTwinSystem, & !< twin nucleation rate [1/m³s] for each twin system and instance + plastic_dislotwin_tau_r, & !< stress to bring partial close together for each twin system and instance + plastic_dislotwin_twinsizePerTwinFamily, & !< twin thickness [m] for each twin family and instance + plastic_dislotwin_twinsizePerTwinSystem, & !< twin thickness [m] for each twin system and instance + plastic_dislotwin_CLambdaSlipPerSlipFamily, & !< Adj. parameter for distance between 2 forest dislocations for each slip family and instance + plastic_dislotwin_CLambdaSlipPerSlipSystem, & !< Adj. parameter for distance between 2 forest dislocations for each slip system and instance + plastic_dislotwin_lamellarsizePerTransFamily, & !< martensite lamellar thickness [m] for each trans family and instance + plastic_dislotwin_lamellarsizePerTransSystem, & !< martensite lamellar thickness [m] for each trans system and instance + plastic_dislotwin_interaction_SlipSlip, & !< coefficients for slip-slip interaction for each interaction type and instance + plastic_dislotwin_interaction_SlipTwin, & !< coefficients for slip-twin interaction for each interaction type and instance + plastic_dislotwin_interaction_TwinSlip, & !< coefficients for twin-slip interaction for each interaction type and instance + plastic_dislotwin_interaction_TwinTwin, & !< coefficients for twin-twin interaction for each interaction type and instance + plastic_dislotwin_pPerSlipFamily, & !< p-exponent in glide velocity + plastic_dislotwin_qPerSlipFamily, & !< q-exponent in glide velocity + plastic_dislotwin_rPerTwinFamily !< r-exponent in twin nucleation rate real(pReal), dimension(:,:,:), allocatable, private :: & - constitutive_dislotwin_interactionMatrix_SlipSlip, & !< interaction matrix of the different slip systems for each instance - constitutive_dislotwin_interactionMatrix_SlipTwin, & !< interaction matrix of slip systems with twin systems for each instance - constitutive_dislotwin_interactionMatrix_TwinSlip, & !< interaction matrix of twin systems with slip systems for each instance - constitutive_dislotwin_interactionMatrix_TwinTwin, & !< interaction matrix of the different twin systems for each instance - constitutive_dislotwin_forestProjectionEdge, & !< matrix of forest projections of edge dislocations for each instance - constitutive_dislotwin_projectionMatrix_Trans !< matrix for projection of slip system shear on fault band (twin) systems for each instance + plastic_dislotwin_interactionMatrix_SlipSlip, & !< interaction matrix of the different slip systems for each instance + plastic_dislotwin_interactionMatrix_SlipTwin, & !< interaction matrix of slip systems with twin systems for each instance + plastic_dislotwin_interactionMatrix_TwinSlip, & !< interaction matrix of twin systems with slip systems for each instance + plastic_dislotwin_interactionMatrix_TwinTwin, & !< interaction matrix of the different twin systems for each instance + plastic_dislotwin_forestProjectionEdge, & !< matrix of forest projections of edge dislocations for each instance + plastic_dislotwin_projectionMatrix_Trans !< matrix for projection of slip system shear on fault band (twin) systems for each instance real(pReal), dimension(:,:,:,:,:), allocatable, private :: & - constitutive_dislotwin_sbSv + plastic_dislotwin_sbSv enum, bind(c) enumerator :: undefined_ID, & @@ -160,21 +160,21 @@ module constitutive_dislotwin trans_fraction_ID end enum integer(kind(undefined_ID)), dimension(:,:), allocatable, private :: & - constitutive_dislotwin_outputID !< ID of each post result output + plastic_dislotwin_outputID !< ID of each post result output public :: & - constitutive_dislotwin_init, & - constitutive_dislotwin_homogenizedC, & - constitutive_dislotwin_microstructure, & - constitutive_dislotwin_LpAndItsTangent, & - constitutive_dislotwin_dotState, & - constitutive_dislotwin_getAccumulatedSlip, & - constitutive_dislotwin_getSlipRate, & - constitutive_dislotwin_postResults + plastic_dislotwin_init, & + plastic_dislotwin_homogenizedC, & + plastic_dislotwin_microstructure, & + plastic_dislotwin_LpAndItsTangent, & + plastic_dislotwin_dotState, & + plastic_dislotwin_getAccumulatedSlip, & + plastic_dislotwin_getSlipRate, & + plastic_dislotwin_postResults private :: & - constitutive_dislotwin_stateInit, & - constitutive_dislotwin_aTolState + plastic_dislotwin_stateInit, & + plastic_dislotwin_aTolState contains @@ -183,7 +183,7 @@ contains !> @brief module initialization !> @details reads in material parameters, allocates arrays, and does sanity checks !-------------------------------------------------------------------------------------------------- -subroutine constitutive_dislotwin_init(fileUnit) +subroutine plastic_dislotwin_init(fileUnit) use, intrinsic :: iso_fortran_env ! to get compiler_version and compiler_options (at least for gfortran 4.6 at the moment) use debug, only: & debug_level,& @@ -254,77 +254,77 @@ subroutine constitutive_dislotwin_init(fileUnit) if (iand(debug_level(debug_constitutive),debug_levelBasic) /= 0_pInt) & write(6,'(a16,1x,i5,/)') '# instances:',maxNinstance - allocate(constitutive_dislotwin_sizePostResults(maxNinstance), source=0_pInt) - allocate(constitutive_dislotwin_sizePostResult(maxval(phase_Noutput),maxNinstance),source=0_pInt) - allocate(constitutive_dislotwin_output(maxval(phase_Noutput),maxNinstance)) - constitutive_dislotwin_output = '' - allocate(constitutive_dislotwin_outputID(maxval(phase_Noutput),maxNinstance), source=undefined_ID) - allocate(constitutive_dislotwin_Noutput(maxNinstance), source=0_pInt) - allocate(constitutive_dislotwin_Nslip(lattice_maxNslipFamily,maxNinstance), source=0_pInt) - allocate(constitutive_dislotwin_Ntwin(lattice_maxNtwinFamily,maxNinstance), source=0_pInt) - allocate(constitutive_dislotwin_Ntrans(lattice_maxNtransFamily,maxNinstance), source=0_pInt) - allocate(constitutive_dislotwin_totalNslip(maxNinstance), source=0_pInt) - allocate(constitutive_dislotwin_totalNtwin(maxNinstance), source=0_pInt) - allocate(constitutive_dislotwin_totalNtrans(maxNinstance), source=0_pInt) - allocate(constitutive_dislotwin_CAtomicVolume(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_D0(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_Qsd(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_GrainSize(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_pShearBand(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_qShearBand(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_MaxTwinFraction(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_CEdgeDipMinDistance(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_Cmfptwin(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_Cthresholdtwin(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_SolidSolutionStrength(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_L0(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_xc(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_VcrossSlip(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_aTolRho(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_aTolTwinFrac(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_aTolTransFrac(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_sbResistance(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_sbVelocity(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_sbQedge(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_SFE_0K(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_dSFE_dT(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_dipoleFormationFactor(maxNinstance), source=1.0_pReal) !should be on by default - allocate(constitutive_dislotwin_Cdwp(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_Cnuc(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_Cgro(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_deltaG(maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_rhoEdge0(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_rhoEdgeDip0(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_burgersPerSlipFamily(lattice_maxNslipFamily,maxNinstance), & + allocate(plastic_dislotwin_sizePostResults(maxNinstance), source=0_pInt) + allocate(plastic_dislotwin_sizePostResult(maxval(phase_Noutput),maxNinstance),source=0_pInt) + allocate(plastic_dislotwin_output(maxval(phase_Noutput),maxNinstance)) + plastic_dislotwin_output = '' + allocate(plastic_dislotwin_outputID(maxval(phase_Noutput),maxNinstance), source=undefined_ID) + allocate(plastic_dislotwin_Noutput(maxNinstance), source=0_pInt) + allocate(plastic_dislotwin_Nslip(lattice_maxNslipFamily,maxNinstance), source=0_pInt) + allocate(plastic_dislotwin_Ntwin(lattice_maxNtwinFamily,maxNinstance), source=0_pInt) + allocate(plastic_dislotwin_Ntrans(lattice_maxNtransFamily,maxNinstance), source=0_pInt) + allocate(plastic_dislotwin_totalNslip(maxNinstance), source=0_pInt) + allocate(plastic_dislotwin_totalNtwin(maxNinstance), source=0_pInt) + allocate(plastic_dislotwin_totalNtrans(maxNinstance), source=0_pInt) + allocate(plastic_dislotwin_CAtomicVolume(maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_D0(maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_Qsd(maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_GrainSize(maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_pShearBand(maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_qShearBand(maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_MaxTwinFraction(maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_CEdgeDipMinDistance(maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_Cmfptwin(maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_Cthresholdtwin(maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_SolidSolutionStrength(maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_L0(maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_xc(maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_VcrossSlip(maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_aTolRho(maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_aTolTwinFrac(maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_aTolTransFrac(maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_sbResistance(maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_sbVelocity(maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_sbQedge(maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_SFE_0K(maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_dSFE_dT(maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_dipoleFormationFactor(maxNinstance), source=1.0_pReal) !should be on by default + allocate(plastic_dislotwin_Cdwp(maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_Cnuc(maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_Cgro(maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_deltaG(maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_rhoEdge0(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_rhoEdgeDip0(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_burgersPerSlipFamily(lattice_maxNslipFamily,maxNinstance), & source=0.0_pReal) - allocate(constitutive_dislotwin_burgersPerTwinFamily(lattice_maxNtwinFamily,maxNinstance), & + allocate(plastic_dislotwin_burgersPerTwinFamily(lattice_maxNtwinFamily,maxNinstance), & source=0.0_pReal) - allocate(constitutive_dislotwin_QedgePerSlipFamily(lattice_maxNslipFamily,maxNinstance), & + allocate(plastic_dislotwin_QedgePerSlipFamily(lattice_maxNslipFamily,maxNinstance), & source=0.0_pReal) - allocate(constitutive_dislotwin_v0PerSlipFamily(lattice_maxNslipFamily,maxNinstance), & + allocate(plastic_dislotwin_v0PerSlipFamily(lattice_maxNslipFamily,maxNinstance), & source=0.0_pReal) - allocate(constitutive_dislotwin_tau_peierlsPerSlipFamily(lattice_maxNslipFamily,maxNinstance), & + allocate(plastic_dislotwin_tau_peierlsPerSlipFamily(lattice_maxNslipFamily,maxNinstance), & source=0.0_pReal) - allocate(constitutive_dislotwin_pPerSlipFamily(lattice_maxNslipFamily,maxNinstance),source=0.0_pReal) - allocate(constitutive_dislotwin_qPerSlipFamily(lattice_maxNslipFamily,maxNinstance),source=0.0_pReal) - allocate(constitutive_dislotwin_Ndot0PerTwinFamily(lattice_maxNtwinFamily,maxNinstance), & + allocate(plastic_dislotwin_pPerSlipFamily(lattice_maxNslipFamily,maxNinstance),source=0.0_pReal) + allocate(plastic_dislotwin_qPerSlipFamily(lattice_maxNslipFamily,maxNinstance),source=0.0_pReal) + allocate(plastic_dislotwin_Ndot0PerTwinFamily(lattice_maxNtwinFamily,maxNinstance), & source=0.0_pReal) - allocate(constitutive_dislotwin_twinsizePerTwinFamily(lattice_maxNtwinFamily,maxNinstance), & + allocate(plastic_dislotwin_twinsizePerTwinFamily(lattice_maxNtwinFamily,maxNinstance), & source=0.0_pReal) - allocate(constitutive_dislotwin_CLambdaSlipPerSlipFamily(lattice_maxNslipFamily,maxNinstance), & + allocate(plastic_dislotwin_CLambdaSlipPerSlipFamily(lattice_maxNslipFamily,maxNinstance), & source=0.0_pReal) - allocate(constitutive_dislotwin_rPerTwinFamily(lattice_maxNtwinFamily,maxNinstance),source=0.0_pReal) - allocate(constitutive_dislotwin_interaction_SlipSlip(lattice_maxNinteraction,maxNinstance), & + allocate(plastic_dislotwin_rPerTwinFamily(lattice_maxNtwinFamily,maxNinstance),source=0.0_pReal) + allocate(plastic_dislotwin_interaction_SlipSlip(lattice_maxNinteraction,maxNinstance), & source=0.0_pReal) - allocate(constitutive_dislotwin_interaction_SlipTwin(lattice_maxNinteraction,maxNinstance), & + allocate(plastic_dislotwin_interaction_SlipTwin(lattice_maxNinteraction,maxNinstance), & source=0.0_pReal) - allocate(constitutive_dislotwin_interaction_TwinSlip(lattice_maxNinteraction,maxNinstance), & + allocate(plastic_dislotwin_interaction_TwinSlip(lattice_maxNinteraction,maxNinstance), & source=0.0_pReal) - allocate(constitutive_dislotwin_interaction_TwinTwin(lattice_maxNinteraction,maxNinstance), & + allocate(plastic_dislotwin_interaction_TwinTwin(lattice_maxNinteraction,maxNinstance), & source=0.0_pReal) - allocate(constitutive_dislotwin_sbSv(6,6,homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), & + allocate(plastic_dislotwin_sbSv(6,6,homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems), & source=0.0_pReal) - allocate(constitutive_dislotwin_lamellarsizePerTransFamily(lattice_maxNtransFamily,maxNinstance), & + allocate(plastic_dislotwin_lamellarsizePerTransFamily(lattice_maxNtransFamily,maxNinstance), & source=0.0_pReal) @@ -369,109 +369,109 @@ subroutine constitutive_dislotwin_init(fileUnit) case ('(output)') select case(IO_lc(IO_stringValue(line,positions,2_pInt))) case ('edge_density') - constitutive_dislotwin_Noutput(instance) = constitutive_dislotwin_Noutput(instance) + 1_pInt - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = edge_density_ID - constitutive_dislotwin_output(constitutive_dislotwin_Noutput(instance),instance) = & + plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt + plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = edge_density_ID + plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('dipole_density') - constitutive_dislotwin_Noutput(instance) = constitutive_dislotwin_Noutput(instance) + 1_pInt - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = dipole_density_ID - constitutive_dislotwin_output(constitutive_dislotwin_Noutput(instance),instance) = & + plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt + plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = dipole_density_ID + plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('shear_rate_slip') - constitutive_dislotwin_Noutput(instance) = constitutive_dislotwin_Noutput(instance) + 1_pInt - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = shear_rate_slip_ID - constitutive_dislotwin_output(constitutive_dislotwin_Noutput(instance),instance) = & + plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt + plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = shear_rate_slip_ID + plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('accumulated_shear_slip') - constitutive_dislotwin_Noutput(instance) = constitutive_dislotwin_Noutput(instance) + 1_pInt - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = accumulated_shear_slip_ID - constitutive_dislotwin_output(constitutive_dislotwin_Noutput(instance),instance) = & + plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt + plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = accumulated_shear_slip_ID + plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('mfp_slip') - constitutive_dislotwin_Noutput(instance) = constitutive_dislotwin_Noutput(instance) + 1_pInt - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = mfp_slip_ID - constitutive_dislotwin_output(constitutive_dislotwin_Noutput(instance),instance) = & + plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt + plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = mfp_slip_ID + plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('resolved_stress_slip') - constitutive_dislotwin_Noutput(instance) = constitutive_dislotwin_Noutput(instance) + 1_pInt - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = resolved_stress_slip_ID - constitutive_dislotwin_output(constitutive_dislotwin_Noutput(instance),instance) = & + plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt + plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = resolved_stress_slip_ID + plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('edge_dipole_distance') - constitutive_dislotwin_Noutput(instance) = constitutive_dislotwin_Noutput(instance) + 1_pInt - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = edge_dipole_distance_ID - constitutive_dislotwin_output(constitutive_dislotwin_Noutput(instance),instance) = & + plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt + plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = edge_dipole_distance_ID + plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('stress_exponent') - constitutive_dislotwin_Noutput(instance) = constitutive_dislotwin_Noutput(instance) + 1_pInt - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = stress_exponent_ID - constitutive_dislotwin_output(constitutive_dislotwin_Noutput(instance),instance) = & + plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt + plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = stress_exponent_ID + plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('twin_fraction') - constitutive_dislotwin_Noutput(instance) = constitutive_dislotwin_Noutput(instance) + 1_pInt - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = twin_fraction_ID - constitutive_dislotwin_output(constitutive_dislotwin_Noutput(instance),instance) = & + plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt + plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = twin_fraction_ID + plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('shear_rate_twin') - constitutive_dislotwin_Noutput(instance) = constitutive_dislotwin_Noutput(instance) + 1_pInt - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = shear_rate_twin_ID - constitutive_dislotwin_output(constitutive_dislotwin_Noutput(instance),instance) = & + plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt + plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = shear_rate_twin_ID + plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('accumulated_shear_twin') - constitutive_dislotwin_Noutput(instance) = constitutive_dislotwin_Noutput(instance) + 1_pInt - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = accumulated_shear_twin_ID - constitutive_dislotwin_output(constitutive_dislotwin_Noutput(instance),instance) = & + plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt + plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = accumulated_shear_twin_ID + plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('mfp_twin') - constitutive_dislotwin_Noutput(instance) = constitutive_dislotwin_Noutput(instance) + 1_pInt - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = mfp_twin_ID - constitutive_dislotwin_output(constitutive_dislotwin_Noutput(instance),instance) = & + plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt + plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = mfp_twin_ID + plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('resolved_stress_twin') - constitutive_dislotwin_Noutput(instance) = constitutive_dislotwin_Noutput(instance) + 1_pInt - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = resolved_stress_twin_ID - constitutive_dislotwin_output(constitutive_dislotwin_Noutput(instance),instance) = & + plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt + plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = resolved_stress_twin_ID + plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('threshold_stress_twin') - constitutive_dislotwin_Noutput(instance) = constitutive_dislotwin_Noutput(instance) + 1_pInt - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = threshold_stress_twin_ID - constitutive_dislotwin_output(constitutive_dislotwin_Noutput(instance),instance) = & + plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt + plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = threshold_stress_twin_ID + plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('resolved_stress_shearband') - constitutive_dislotwin_Noutput(instance) = constitutive_dislotwin_Noutput(instance) + 1_pInt - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = resolved_stress_shearband_ID - constitutive_dislotwin_output(constitutive_dislotwin_Noutput(instance),instance) = & + plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt + plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = resolved_stress_shearband_ID + plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('shear_rate_shearband') - constitutive_dislotwin_Noutput(instance) = constitutive_dislotwin_Noutput(instance) + 1_pInt - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = shear_rate_shearband_ID - constitutive_dislotwin_output(constitutive_dislotwin_Noutput(instance),instance) = & + plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt + plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = shear_rate_shearband_ID + plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('sb_eigenvalues') - constitutive_dislotwin_Noutput(instance) = constitutive_dislotwin_Noutput(instance) + 1_pInt - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = sb_eigenvalues_ID - constitutive_dislotwin_output(constitutive_dislotwin_Noutput(instance),instance) = & + plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt + plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = sb_eigenvalues_ID + plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('sb_eigenvectors') - constitutive_dislotwin_Noutput(instance) = constitutive_dislotwin_Noutput(instance) + 1_pInt - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = sb_eigenvectors_ID - constitutive_dislotwin_output(constitutive_dislotwin_Noutput(instance),instance) = & + plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt + plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = sb_eigenvectors_ID + plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('stress_trans_fraction') - constitutive_dislotwin_Noutput(instance) = constitutive_dislotwin_Noutput(instance) + 1_pInt - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = stress_trans_fraction_ID - constitutive_dislotwin_output(constitutive_dislotwin_Noutput(instance),instance) = & + plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt + plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = stress_trans_fraction_ID + plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('strain_trans_fraction') - constitutive_dislotwin_Noutput(instance) = constitutive_dislotwin_Noutput(instance) + 1_pInt - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = strain_trans_fraction_ID - constitutive_dislotwin_output(constitutive_dislotwin_Noutput(instance),instance) = & + plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt + plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = strain_trans_fraction_ID + plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('trans_fraction','total_trans_fraction') - constitutive_dislotwin_Noutput(instance) = constitutive_dislotwin_Noutput(instance) + 1_pInt - constitutive_dislotwin_outputID(constitutive_dislotwin_Noutput(instance),instance) = trans_fraction_ID - constitutive_dislotwin_output(constitutive_dislotwin_Noutput(instance),instance) = & + plastic_dislotwin_Noutput(instance) = plastic_dislotwin_Noutput(instance) + 1_pInt + plastic_dislotwin_outputID(plastic_dislotwin_Noutput(instance),instance) = trans_fraction_ID + plastic_dislotwin_output(plastic_dislotwin_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) end select !-------------------------------------------------------------------------------------------------- @@ -483,7 +483,7 @@ subroutine constitutive_dislotwin_init(fileUnit) call IO_error(150_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOTWIN_label//')') Nchunks_SlipFamilies = positions(1) - 1_pInt do j = 1_pInt, Nchunks_SlipFamilies - constitutive_dislotwin_Nslip(j,instance) = IO_intValue(line,positions,1_pInt+j) + plastic_dislotwin_Nslip(j,instance) = IO_intValue(line,positions,1_pInt+j) enddo case ('rhoedge0','rhoedgedip0','slipburgers','qedge','v0','clambdaslip','tau_peierls','p_slip','q_slip') do j = 1_pInt, Nchunks_SlipFamilies @@ -491,25 +491,25 @@ subroutine constitutive_dislotwin_init(fileUnit) enddo select case(tag) case ('rhoedge0') - constitutive_dislotwin_rhoEdge0(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) + plastic_dislotwin_rhoEdge0(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) case ('rhoedgedip0') - constitutive_dislotwin_rhoEdgeDip0(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) + plastic_dislotwin_rhoEdgeDip0(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) case ('slipburgers') - constitutive_dislotwin_burgersPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) + plastic_dislotwin_burgersPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) case ('qedge') - constitutive_dislotwin_QedgePerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) + plastic_dislotwin_QedgePerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) case ('v0') - constitutive_dislotwin_v0PerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) + plastic_dislotwin_v0PerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) case ('clambdaslip') - constitutive_dislotwin_CLambdaSlipPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) + plastic_dislotwin_CLambdaSlipPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) case ('tau_peierls') if (lattice_structure(phase) /= LATTICE_bcc_ID) & call IO_warning(42_pInt,ext_msg=trim(tag)//' for non-bcc ('//PLASTICITY_DISLOTWIN_label//')') - constitutive_dislotwin_tau_peierlsPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) + plastic_dislotwin_tau_peierlsPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) case ('p_slip') - constitutive_dislotwin_pPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) + plastic_dislotwin_pPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) case ('q_slip') - constitutive_dislotwin_qPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) + plastic_dislotwin_qPerSlipFamily(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) end select !-------------------------------------------------------------------------------------------------- ! parameters depending on slip number of twin families @@ -520,7 +520,7 @@ subroutine constitutive_dislotwin_init(fileUnit) call IO_error(150_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOTWIN_label//')') Nchunks_TwinFamilies = positions(1) - 1_pInt do j = 1_pInt, Nchunks_TwinFamilies - constitutive_dislotwin_Ntwin(j,instance) = IO_intValue(line,positions,1_pInt+j) + plastic_dislotwin_Ntwin(j,instance) = IO_intValue(line,positions,1_pInt+j) enddo case ('ndot0','twinsize','twinburgers','r_twin') do j = 1_pInt, Nchunks_TwinFamilies @@ -530,13 +530,13 @@ subroutine constitutive_dislotwin_init(fileUnit) case ('ndot0') if (lattice_structure(phase) == LATTICE_fcc_ID) & call IO_warning(42_pInt,ext_msg=trim(tag)//' for fcc ('//PLASTICITY_DISLOTWIN_label//')') - constitutive_dislotwin_Ndot0PerTwinFamily(1:Nchunks_TwinFamilies,instance) = tempPerTwin(1:Nchunks_TwinFamilies) + plastic_dislotwin_Ndot0PerTwinFamily(1:Nchunks_TwinFamilies,instance) = tempPerTwin(1:Nchunks_TwinFamilies) case ('twinsize') - constitutive_dislotwin_twinsizePerTwinFamily(1:Nchunks_TwinFamilies,instance) = tempPerTwin(1:Nchunks_TwinFamilies) + plastic_dislotwin_twinsizePerTwinFamily(1:Nchunks_TwinFamilies,instance) = tempPerTwin(1:Nchunks_TwinFamilies) case ('twinburgers') - constitutive_dislotwin_burgersPerTwinFamily(1:Nchunks_TwinFamilies,instance) = tempPerTwin(1:Nchunks_TwinFamilies) + plastic_dislotwin_burgersPerTwinFamily(1:Nchunks_TwinFamilies,instance) = tempPerTwin(1:Nchunks_TwinFamilies) case ('r_twin') - constitutive_dislotwin_rPerTwinFamily(1:Nchunks_TwinFamilies,instance) = tempPerTwin(1:Nchunks_TwinFamilies) + plastic_dislotwin_rPerTwinFamily(1:Nchunks_TwinFamilies,instance) = tempPerTwin(1:Nchunks_TwinFamilies) end select !-------------------------------------------------------------------------------------------------- ! parameters depending on number of transformation system families @@ -547,95 +547,95 @@ subroutine constitutive_dislotwin_init(fileUnit) call IO_error(150_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOTWIN_label//')') Nchunks_TransFamilies = positions(1) - 1_pInt do j = 1_pInt, Nchunks_TransFamilies - constitutive_dislotwin_Ntrans(j,instance) = IO_intValue(line,positions,1_pInt+j) + plastic_dislotwin_Ntrans(j,instance) = IO_intValue(line,positions,1_pInt+j) enddo case ('lamellarsize') do j = 1_pInt, Nchunks_TransFamilies tempPerTrans(j) = IO_floatValue(line,positions,1_pInt+j) enddo - constitutive_dislotwin_lamellarsizePerTransFamily(1:Nchunks_TransFamilies,instance) = tempPerTrans(1:Nchunks_TransFamilies) + plastic_dislotwin_lamellarsizePerTransFamily(1:Nchunks_TransFamilies,instance) = tempPerTrans(1:Nchunks_TransFamilies) !-------------------------------------------------------------------------------------------------- ! parameters depending on number of interactions case ('interaction_slipslip','interactionslipslip') if (positions(1) < 1_pInt + Nchunks_SlipSlip) & call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOTWIN_label//')') do j = 1_pInt, Nchunks_SlipSlip - constitutive_dislotwin_interaction_SlipSlip(j,instance) = IO_floatValue(line,positions,1_pInt+j) + plastic_dislotwin_interaction_SlipSlip(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('interaction_sliptwin','interactionsliptwin') if (positions(1) < 1_pInt + Nchunks_SlipTwin) & call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOTWIN_label//')') do j = 1_pInt, Nchunks_SlipTwin - constitutive_dislotwin_interaction_SlipTwin(j,instance) = IO_floatValue(line,positions,1_pInt+j) + plastic_dislotwin_interaction_SlipTwin(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('interaction_twinslip','interactiontwinslip') if (positions(1) < 1_pInt + Nchunks_TwinSlip) & call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOTWIN_label//')') do j = 1_pInt, Nchunks_TwinSlip - constitutive_dislotwin_interaction_TwinSlip(j,instance) = IO_floatValue(line,positions,1_pInt+j) + plastic_dislotwin_interaction_TwinSlip(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('interaction_twintwin','interactiontwintwin') if (positions(1) < 1_pInt + Nchunks_TwinTwin) & call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_DISLOTWIN_label//')') do j = 1_pInt, Nchunks_TwinTwin - constitutive_dislotwin_interaction_TwinTwin(j,instance) = IO_floatValue(line,positions,1_pInt+j) + plastic_dislotwin_interaction_TwinTwin(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo !-------------------------------------------------------------------------------------------------- ! parameters independent of number of slip/twin systems case ('grainsize') - constitutive_dislotwin_GrainSize(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislotwin_GrainSize(instance) = IO_floatValue(line,positions,2_pInt) case ('maxtwinfraction') - constitutive_dislotwin_MaxTwinFraction(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislotwin_MaxTwinFraction(instance) = IO_floatValue(line,positions,2_pInt) case ('p_shearband') - constitutive_dislotwin_pShearBand(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislotwin_pShearBand(instance) = IO_floatValue(line,positions,2_pInt) case ('q_shearband') - constitutive_dislotwin_qShearBand(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislotwin_qShearBand(instance) = IO_floatValue(line,positions,2_pInt) case ('d0') - constitutive_dislotwin_D0(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislotwin_D0(instance) = IO_floatValue(line,positions,2_pInt) case ('qsd') - constitutive_dislotwin_Qsd(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislotwin_Qsd(instance) = IO_floatValue(line,positions,2_pInt) case ('atol_rho') - constitutive_dislotwin_aTolRho(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislotwin_aTolRho(instance) = IO_floatValue(line,positions,2_pInt) case ('atol_twinfrac') - constitutive_dislotwin_aTolTwinFrac(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislotwin_aTolTwinFrac(instance) = IO_floatValue(line,positions,2_pInt) case ('atol_transfrac') - constitutive_dislotwin_aTolTransFrac(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislotwin_aTolTransFrac(instance) = IO_floatValue(line,positions,2_pInt) case ('cmfptwin') - constitutive_dislotwin_Cmfptwin(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislotwin_Cmfptwin(instance) = IO_floatValue(line,positions,2_pInt) case ('cthresholdtwin') - constitutive_dislotwin_Cthresholdtwin(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislotwin_Cthresholdtwin(instance) = IO_floatValue(line,positions,2_pInt) case ('solidsolutionstrength') - constitutive_dislotwin_SolidSolutionStrength(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislotwin_SolidSolutionStrength(instance) = IO_floatValue(line,positions,2_pInt) case ('l0') - constitutive_dislotwin_L0(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislotwin_L0(instance) = IO_floatValue(line,positions,2_pInt) case ('xc') - constitutive_dislotwin_xc(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislotwin_xc(instance) = IO_floatValue(line,positions,2_pInt) case ('vcrossslip') - constitutive_dislotwin_VcrossSlip(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislotwin_VcrossSlip(instance) = IO_floatValue(line,positions,2_pInt) case ('cedgedipmindistance') - constitutive_dislotwin_CEdgeDipMinDistance(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislotwin_CEdgeDipMinDistance(instance) = IO_floatValue(line,positions,2_pInt) case ('catomicvolume') - constitutive_dislotwin_CAtomicVolume(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislotwin_CAtomicVolume(instance) = IO_floatValue(line,positions,2_pInt) case ('sfe_0k') - constitutive_dislotwin_SFE_0K(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislotwin_SFE_0K(instance) = IO_floatValue(line,positions,2_pInt) case ('dsfe_dt') - constitutive_dislotwin_dSFE_dT(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislotwin_dSFE_dT(instance) = IO_floatValue(line,positions,2_pInt) case ('dipoleformationfactor') - constitutive_dislotwin_dipoleFormationFactor(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislotwin_dipoleFormationFactor(instance) = IO_floatValue(line,positions,2_pInt) case ('shearbandresistance') - constitutive_dislotwin_sbResistance(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislotwin_sbResistance(instance) = IO_floatValue(line,positions,2_pInt) case ('shearbandvelocity') - constitutive_dislotwin_sbVelocity(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislotwin_sbVelocity(instance) = IO_floatValue(line,positions,2_pInt) case ('qedgepersbsystem') - constitutive_dislotwin_sbQedge(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislotwin_sbQedge(instance) = IO_floatValue(line,positions,2_pInt) case ('cdwp') - constitutive_dislotwin_Cdwp(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislotwin_Cdwp(instance) = IO_floatValue(line,positions,2_pInt) case ('cnuc') - constitutive_dislotwin_Cnuc(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislotwin_Cnuc(instance) = IO_floatValue(line,positions,2_pInt) case ('cgro') - constitutive_dislotwin_Cgro(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislotwin_Cgro(instance) = IO_floatValue(line,positions,2_pInt) case ('deltag') - constitutive_dislotwin_deltaG(instance) = IO_floatValue(line,positions,2_pInt) + plastic_dislotwin_deltaG(instance) = IO_floatValue(line,positions,2_pInt) end select endif; endif enddo parsingFile @@ -644,135 +644,135 @@ subroutine constitutive_dislotwin_init(fileUnit) myPhase: if (phase_plasticity(phase) == PLASTICITY_dislotwin_ID) then instance = phase_plasticityInstance(phase) - if (sum(constitutive_dislotwin_Nslip(:,instance)) < 0_pInt) & + if (sum(plastic_dislotwin_Nslip(:,instance)) < 0_pInt) & call IO_error(211_pInt,el=instance,ext_msg='Nslip ('//PLASTICITY_DISLOTWIN_label//')') - if (sum(constitutive_dislotwin_Ntwin(:,instance)) < 0_pInt) & + if (sum(plastic_dislotwin_Ntwin(:,instance)) < 0_pInt) & call IO_error(211_pInt,el=instance,ext_msg='Ntwin ('//PLASTICITY_DISLOTWIN_label//')') - if (sum(constitutive_dislotwin_Ntrans(:,instance)) < 0_pInt) & + if (sum(plastic_dislotwin_Ntrans(:,instance)) < 0_pInt) & call IO_error(211_pInt,el=instance,ext_msg='Ntrans ('//PLASTICITY_DISLOTWIN_label//')') do f = 1_pInt,lattice_maxNslipFamily - if (constitutive_dislotwin_Nslip(f,instance) > 0_pInt) then - if (constitutive_dislotwin_rhoEdge0(f,instance) < 0.0_pReal) & + if (plastic_dislotwin_Nslip(f,instance) > 0_pInt) then + if (plastic_dislotwin_rhoEdge0(f,instance) < 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='rhoEdge0 ('//PLASTICITY_DISLOTWIN_label//')') - if (constitutive_dislotwin_rhoEdgeDip0(f,instance) < 0.0_pReal) & + if (plastic_dislotwin_rhoEdgeDip0(f,instance) < 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='rhoEdgeDip0 ('//PLASTICITY_DISLOTWIN_label//')') - if (constitutive_dislotwin_burgersPerSlipFamily(f,instance) <= 0.0_pReal) & + if (plastic_dislotwin_burgersPerSlipFamily(f,instance) <= 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='slipBurgers ('//PLASTICITY_DISLOTWIN_label//')') - if (constitutive_dislotwin_v0PerSlipFamily(f,instance) <= 0.0_pReal) & + if (plastic_dislotwin_v0PerSlipFamily(f,instance) <= 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='v0 ('//PLASTICITY_DISLOTWIN_label//')') - if (constitutive_dislotwin_tau_peierlsPerSlipFamily(f,instance) < 0.0_pReal) & + if (plastic_dislotwin_tau_peierlsPerSlipFamily(f,instance) < 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='tau_peierls ('//PLASTICITY_DISLOTWIN_label//')') endif enddo do f = 1_pInt,lattice_maxNtwinFamily - if (constitutive_dislotwin_Ntwin(f,instance) > 0_pInt) then - if (constitutive_dislotwin_burgersPerTwinFamily(f,instance) <= 0.0_pReal) & + if (plastic_dislotwin_Ntwin(f,instance) > 0_pInt) then + if (plastic_dislotwin_burgersPerTwinFamily(f,instance) <= 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='twinburgers ('//PLASTICITY_DISLOTWIN_label//')') - if (constitutive_dislotwin_Ndot0PerTwinFamily(f,instance) < 0.0_pReal) & + if (plastic_dislotwin_Ndot0PerTwinFamily(f,instance) < 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='ndot0 ('//PLASTICITY_DISLOTWIN_label//')') endif enddo - if (constitutive_dislotwin_CAtomicVolume(instance) <= 0.0_pReal) & + if (plastic_dislotwin_CAtomicVolume(instance) <= 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='cAtomicVolume ('//PLASTICITY_DISLOTWIN_label//')') - if (constitutive_dislotwin_D0(instance) <= 0.0_pReal) & + if (plastic_dislotwin_D0(instance) <= 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='D0 ('//PLASTICITY_DISLOTWIN_label//')') - if (constitutive_dislotwin_Qsd(instance) <= 0.0_pReal) & + if (plastic_dislotwin_Qsd(instance) <= 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='Qsd ('//PLASTICITY_DISLOTWIN_label//')') - if (sum(constitutive_dislotwin_Ntwin(:,instance)) > 0_pInt) then - if (constitutive_dislotwin_SFE_0K(instance) == 0.0_pReal .and. & - constitutive_dislotwin_dSFE_dT(instance) == 0.0_pReal .and. & + if (sum(plastic_dislotwin_Ntwin(:,instance)) > 0_pInt) then + if (plastic_dislotwin_SFE_0K(instance) == 0.0_pReal .and. & + plastic_dislotwin_dSFE_dT(instance) == 0.0_pReal .and. & lattice_structure(phase) == LATTICE_fcc_ID) & call IO_error(211_pInt,el=instance,ext_msg='SFE0K ('//PLASTICITY_DISLOTWIN_label//')') - if (constitutive_dislotwin_aTolRho(instance) <= 0.0_pReal) & + if (plastic_dislotwin_aTolRho(instance) <= 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='aTolRho ('//PLASTICITY_DISLOTWIN_label//')') - if (constitutive_dislotwin_aTolTwinFrac(instance) <= 0.0_pReal) & + if (plastic_dislotwin_aTolTwinFrac(instance) <= 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='aTolTwinFrac ('//PLASTICITY_DISLOTWIN_label//')') endif - if (sum(constitutive_dislotwin_Ntrans(:,instance)) > 0_pInt) then - if (constitutive_dislotwin_aTolTransFrac(instance) <= 0.0_pReal) & + if (sum(plastic_dislotwin_Ntrans(:,instance)) > 0_pInt) then + if (plastic_dislotwin_aTolTransFrac(instance) <= 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='aTolTransFrac ('//PLASTICITY_DISLOTWIN_label//')') - if (constitutive_dislotwin_Cdwp(instance) < 0.0_pReal) & + if (plastic_dislotwin_Cdwp(instance) < 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='Cdwp ('//PLASTICITY_DISLOTWIN_label//')') - if (constitutive_dislotwin_Cnuc(instance) < 0.0_pReal) & + if (plastic_dislotwin_Cnuc(instance) < 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='Cnuc ('//PLASTICITY_DISLOTWIN_label//')') - if (constitutive_dislotwin_Cgro(instance) < 0.0_pReal) & + if (plastic_dislotwin_Cgro(instance) < 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='Cgro ('//PLASTICITY_DISLOTWIN_label//')') endif - if (constitutive_dislotwin_sbResistance(instance) < 0.0_pReal) & + if (plastic_dislotwin_sbResistance(instance) < 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='sbResistance ('//PLASTICITY_DISLOTWIN_label//')') - if (constitutive_dislotwin_sbVelocity(instance) < 0.0_pReal) & + if (plastic_dislotwin_sbVelocity(instance) < 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='sbVelocity ('//PLASTICITY_DISLOTWIN_label//')') - if (constitutive_dislotwin_sbVelocity(instance) > 0.0_pReal .and. & - constitutive_dislotwin_pShearBand(instance) <= 0.0_pReal) & + if (plastic_dislotwin_sbVelocity(instance) > 0.0_pReal .and. & + plastic_dislotwin_pShearBand(instance) <= 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='pShearBand ('//PLASTICITY_DISLOTWIN_label//')') - if (constitutive_dislotwin_dipoleFormationFactor(instance) /= 0.0_pReal .and. & - constitutive_dislotwin_dipoleFormationFactor(instance) /= 1.0_pReal) & + if (plastic_dislotwin_dipoleFormationFactor(instance) /= 0.0_pReal .and. & + plastic_dislotwin_dipoleFormationFactor(instance) /= 1.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='dipoleFormationFactor ('//PLASTICITY_DISLOTWIN_label//')') - if (constitutive_dislotwin_sbVelocity(instance) > 0.0_pReal .and. & - constitutive_dislotwin_qShearBand(instance) <= 0.0_pReal) & + if (plastic_dislotwin_sbVelocity(instance) > 0.0_pReal .and. & + plastic_dislotwin_qShearBand(instance) <= 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='qShearBand ('//PLASTICITY_DISLOTWIN_label//')') !-------------------------------------------------------------------------------------------------- ! Determine total number of active slip or twin systems - constitutive_dislotwin_Nslip(:,instance) = min(lattice_NslipSystem(:,phase),constitutive_dislotwin_Nslip(:,instance)) - constitutive_dislotwin_Ntwin(:,instance) = min(lattice_NtwinSystem(:,phase),constitutive_dislotwin_Ntwin(:,instance)) - constitutive_dislotwin_Ntrans(:,instance)= min(lattice_NtransSystem(:,phase),constitutive_dislotwin_Ntrans(:,instance)) - constitutive_dislotwin_totalNslip(instance) = sum(constitutive_dislotwin_Nslip(:,instance)) - constitutive_dislotwin_totalNtwin(instance) = sum(constitutive_dislotwin_Ntwin(:,instance)) - constitutive_dislotwin_totalNtrans(instance) = sum(constitutive_dislotwin_Ntrans(:,instance)) + plastic_dislotwin_Nslip(:,instance) = min(lattice_NslipSystem(:,phase),plastic_dislotwin_Nslip(:,instance)) + plastic_dislotwin_Ntwin(:,instance) = min(lattice_NtwinSystem(:,phase),plastic_dislotwin_Ntwin(:,instance)) + plastic_dislotwin_Ntrans(:,instance)= min(lattice_NtransSystem(:,phase),plastic_dislotwin_Ntrans(:,instance)) + plastic_dislotwin_totalNslip(instance) = sum(plastic_dislotwin_Nslip(:,instance)) + plastic_dislotwin_totalNtwin(instance) = sum(plastic_dislotwin_Ntwin(:,instance)) + plastic_dislotwin_totalNtrans(instance) = sum(plastic_dislotwin_Ntrans(:,instance)) endif myPhase enddo sanityChecks !-------------------------------------------------------------------------------------------------- ! allocation of variables whose size depends on the total number of active slip systems - maxTotalNslip = maxval(constitutive_dislotwin_totalNslip) - maxTotalNtwin = maxval(constitutive_dislotwin_totalNtwin) - maxTotalNtrans = maxval(constitutive_dislotwin_totalNtrans) + maxTotalNslip = maxval(plastic_dislotwin_totalNslip) + maxTotalNtwin = maxval(plastic_dislotwin_totalNtwin) + maxTotalNtrans = maxval(plastic_dislotwin_totalNtrans) - allocate(constitutive_dislotwin_burgersPerSlipSystem(maxTotalNslip, maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_burgersPerTwinSystem(maxTotalNtwin, maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_QedgePerSlipSystem(maxTotalNslip, maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_v0PerSlipSystem(maxTotalNslip, maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_Ndot0PerTwinSystem(maxTotalNtwin, maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_tau_r(maxTotalNtwin, maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_twinsizePerTwinSystem(maxTotalNtwin, maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_CLambdaSlipPerSlipSystem(maxTotalNslip, maxNinstance),source=0.0_pReal) - allocate(constitutive_dislotwin_lamellarsizePerTransSystem(maxTotalNtrans, maxNinstance),source=0.0_pReal) + allocate(plastic_dislotwin_burgersPerSlipSystem(maxTotalNslip, maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_burgersPerTwinSystem(maxTotalNtwin, maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_QedgePerSlipSystem(maxTotalNslip, maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_v0PerSlipSystem(maxTotalNslip, maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_Ndot0PerTwinSystem(maxTotalNtwin, maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_tau_r(maxTotalNtwin, maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_twinsizePerTwinSystem(maxTotalNtwin, maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_CLambdaSlipPerSlipSystem(maxTotalNslip, maxNinstance),source=0.0_pReal) + allocate(plastic_dislotwin_lamellarsizePerTransSystem(maxTotalNtrans, maxNinstance),source=0.0_pReal) - allocate(constitutive_dislotwin_interactionMatrix_SlipSlip(maxval(constitutive_dislotwin_totalNslip),& ! slip resistance from slip activity - maxval(constitutive_dislotwin_totalNslip),& + allocate(plastic_dislotwin_interactionMatrix_SlipSlip(maxval(plastic_dislotwin_totalNslip),& ! slip resistance from slip activity + maxval(plastic_dislotwin_totalNslip),& maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_interactionMatrix_SlipTwin(maxval(constitutive_dislotwin_totalNslip),& ! slip resistance from twin activity - maxval(constitutive_dislotwin_totalNtwin),& + allocate(plastic_dislotwin_interactionMatrix_SlipTwin(maxval(plastic_dislotwin_totalNslip),& ! slip resistance from twin activity + maxval(plastic_dislotwin_totalNtwin),& maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_interactionMatrix_TwinSlip(maxval(constitutive_dislotwin_totalNtwin),& ! twin resistance from slip activity - maxval(constitutive_dislotwin_totalNslip),& + allocate(plastic_dislotwin_interactionMatrix_TwinSlip(maxval(plastic_dislotwin_totalNtwin),& ! twin resistance from slip activity + maxval(plastic_dislotwin_totalNslip),& maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_interactionMatrix_TwinTwin(maxval(constitutive_dislotwin_totalNtwin),& ! twin resistance from twin activity - maxval(constitutive_dislotwin_totalNtwin),& + allocate(plastic_dislotwin_interactionMatrix_TwinTwin(maxval(plastic_dislotwin_totalNtwin),& ! twin resistance from twin activity + maxval(plastic_dislotwin_totalNtwin),& maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_forestProjectionEdge(maxTotalNslip,maxTotalNslip,maxNinstance), & + allocate(plastic_dislotwin_forestProjectionEdge(maxTotalNslip,maxTotalNslip,maxNinstance), & source=0.0_pReal) - allocate(constitutive_dislotwin_projectionMatrix_Trans(maxTotalNtrans,maxTotalNtrans,maxNinstance), & + allocate(plastic_dislotwin_projectionMatrix_Trans(maxTotalNtrans,maxTotalNtrans,maxNinstance), & source=0.0_pReal) - allocate(constitutive_dislotwin_Ctwin66(6,6,maxTotalNtwin,maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_Ctwin3333(3,3,3,3,maxTotalNtwin,maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_Ctrans66(6,6,maxTotalNtrans,maxNinstance), source=0.0_pReal) - allocate(constitutive_dislotwin_Ctrans3333(3,3,3,3,maxTotalNtrans,maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_Ctwin66(6,6,maxTotalNtwin,maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_Ctwin3333(3,3,3,3,maxTotalNtwin,maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_Ctrans66(6,6,maxTotalNtrans,maxNinstance), source=0.0_pReal) + allocate(plastic_dislotwin_Ctrans3333(3,3,3,3,maxTotalNtrans,maxNinstance), source=0.0_pReal) initializeInstances: do phase = 1_pInt, size(phase_plasticity) myPhase2: if (phase_plasticity(phase) == PLASTICITY_dislotwin_ID) then NofMyPhase=count(material_phase==phase) instance = phase_plasticityInstance(phase) - ns = constitutive_dislotwin_totalNslip(instance) - nt = constitutive_dislotwin_totalNtwin(instance) - nr = constitutive_dislotwin_totalNtrans(instance) + ns = plastic_dislotwin_totalNslip(instance) + nt = plastic_dislotwin_totalNtwin(instance) + nr = plastic_dislotwin_totalNtrans(instance) !-------------------------------------------------------------------------------------------------- ! Determine size of postResults array - outputsLoop: do o = 1_pInt,constitutive_dislotwin_Noutput(instance) - select case(constitutive_dislotwin_outputID(o,instance)) + outputsLoop: do o = 1_pInt,plastic_dislotwin_Noutput(instance) + select case(plastic_dislotwin_outputID(o,instance)) case(edge_density_ID, & dipole_density_ID, & shear_rate_slip_ID, & @@ -808,23 +808,23 @@ subroutine constitutive_dislotwin_init(fileUnit) end select if (mySize > 0_pInt) then ! any meaningful output found - constitutive_dislotwin_sizePostResult(o,instance) = mySize - constitutive_dislotwin_sizePostResults(instance) = constitutive_dislotwin_sizePostResults(instance) + mySize + plastic_dislotwin_sizePostResult(o,instance) = mySize + plastic_dislotwin_sizePostResults(instance) = plastic_dislotwin_sizePostResults(instance) + mySize endif enddo outputsLoop !-------------------------------------------------------------------------------------------------- ! allocate state arrays - sizeDotState = int(size(CONSTITUTIVE_DISLOTWIN_listBasicSlipStates),pInt) * ns & - + int(size(CONSTITUTIVE_DISLOTWIN_listBasicTwinStates),pInt) * nt & - + int(size(CONSTITUTIVE_DISLOTWIN_listBasicTransStates),pInt) * nr + sizeDotState = int(size(plastic_dislotwin_listBasicSlipStates),pInt) * ns & + + int(size(plastic_dislotwin_listBasicTwinStates),pInt) * nt & + + int(size(plastic_dislotwin_listBasicTransStates),pInt) * nr sizeState = sizeDotState & - + int(size(CONSTITUTIVE_DISLOTWIN_listDependentSlipStates),pInt) * ns & - + int(size(CONSTITUTIVE_DISLOTWIN_listDependentTwinStates),pInt) * nt + + int(size(plastic_dislotwin_listDependentSlipStates),pInt) * ns & + + int(size(plastic_dislotwin_listDependentTwinStates),pInt) * nt plasticState(phase)%sizeState = sizeState plasticState(phase)%sizeDotState = sizeDotState - plasticState(phase)%sizePostResults = constitutive_dislotwin_sizePostResults(instance) + plasticState(phase)%sizePostResults = plastic_dislotwin_sizePostResults(instance) allocate(plasticState(phase)%aTolState (sizeState), source=0.0_pReal) allocate(plasticState(phase)%state0 (sizeState,NofMyPhase), source=0.0_pReal) allocate(plasticState(phase)%partionedState0 (sizeState,NofMyPhase), source=0.0_pReal) @@ -846,46 +846,46 @@ subroutine constitutive_dislotwin_init(fileUnit) !* Process slip related parameters ------------------------------------------------ slipFamiliesLoop: do f = 1_pInt,lattice_maxNslipFamily - index_myFamily = sum(constitutive_dislotwin_Nslip(1:f-1_pInt,instance)) ! index in truncated slip system list - slipSystemsLoop: do j = 1_pInt,constitutive_dislotwin_Nslip(f,instance) + index_myFamily = sum(plastic_dislotwin_Nslip(1:f-1_pInt,instance)) ! index in truncated slip system list + slipSystemsLoop: do j = 1_pInt,plastic_dislotwin_Nslip(f,instance) !* Burgers vector, ! dislocation velocity prefactor, ! mean free path prefactor, ! and minimum dipole distance - constitutive_dislotwin_burgersPerSlipSystem(index_myFamily+j,instance) = & - constitutive_dislotwin_burgersPerSlipFamily(f,instance) + plastic_dislotwin_burgersPerSlipSystem(index_myFamily+j,instance) = & + plastic_dislotwin_burgersPerSlipFamily(f,instance) - constitutive_dislotwin_QedgePerSlipSystem(index_myFamily+j,instance) = & - constitutive_dislotwin_QedgePerSlipFamily(f,instance) + plastic_dislotwin_QedgePerSlipSystem(index_myFamily+j,instance) = & + plastic_dislotwin_QedgePerSlipFamily(f,instance) - constitutive_dislotwin_v0PerSlipSystem(index_myFamily+j,instance) = & - constitutive_dislotwin_v0PerSlipFamily(f,instance) + plastic_dislotwin_v0PerSlipSystem(index_myFamily+j,instance) = & + plastic_dislotwin_v0PerSlipFamily(f,instance) - constitutive_dislotwin_CLambdaSlipPerSlipSystem(index_myFamily+j,instance) = & - constitutive_dislotwin_CLambdaSlipPerSlipFamily(f,instance) + plastic_dislotwin_CLambdaSlipPerSlipSystem(index_myFamily+j,instance) = & + plastic_dislotwin_CLambdaSlipPerSlipFamily(f,instance) !* Calculation of forest projections for edge dislocations !* Interaction matrices do o = 1_pInt,lattice_maxNslipFamily - index_otherFamily = sum(constitutive_dislotwin_Nslip(1:o-1_pInt,instance)) - do k = 1_pInt,constitutive_dislotwin_Nslip(o,instance) ! loop over (active) systems in other family (slip) - constitutive_dislotwin_forestProjectionEdge(index_myFamily+j,index_otherFamily+k,instance) = & + index_otherFamily = sum(plastic_dislotwin_Nslip(1:o-1_pInt,instance)) + do k = 1_pInt,plastic_dislotwin_Nslip(o,instance) ! loop over (active) systems in other family (slip) + plastic_dislotwin_forestProjectionEdge(index_myFamily+j,index_otherFamily+k,instance) = & abs(math_mul3x3(lattice_sn(:,sum(lattice_NslipSystem(1:f-1,phase))+j,phase), & lattice_st(:,sum(lattice_NslipSystem(1:o-1,phase))+k,phase))) - constitutive_dislotwin_interactionMatrix_SlipSlip(index_myFamily+j,index_otherFamily+k,instance) = & - constitutive_dislotwin_interaction_SlipSlip(lattice_interactionSlipSlip( & + plastic_dislotwin_interactionMatrix_SlipSlip(index_myFamily+j,index_otherFamily+k,instance) = & + plastic_dislotwin_interaction_SlipSlip(lattice_interactionSlipSlip( & sum(lattice_NslipSystem(1:f-1,phase))+j, & sum(lattice_NslipSystem(1:o-1,phase))+k, & phase), instance ) enddo; enddo do o = 1_pInt,lattice_maxNtwinFamily - index_otherFamily = sum(constitutive_dislotwin_Ntwin(1:o-1_pInt,instance)) - do k = 1_pInt,constitutive_dislotwin_Ntwin(o,instance) ! loop over (active) systems in other family (twin) - constitutive_dislotwin_interactionMatrix_SlipTwin(index_myFamily+j,index_otherFamily+k,instance) = & - constitutive_dislotwin_interaction_SlipTwin(lattice_interactionSlipTwin( & + index_otherFamily = sum(plastic_dislotwin_Ntwin(1:o-1_pInt,instance)) + do k = 1_pInt,plastic_dislotwin_Ntwin(o,instance) ! loop over (active) systems in other family (twin) + plastic_dislotwin_interactionMatrix_SlipTwin(index_myFamily+j,index_otherFamily+k,instance) = & + plastic_dislotwin_interaction_SlipTwin(lattice_interactionSlipTwin( & sum(lattice_NslipSystem(1:f-1_pInt,phase))+j, & sum(lattice_NtwinSystem(1:o-1_pInt,phase))+k, & phase), instance ) @@ -897,28 +897,28 @@ subroutine constitutive_dislotwin_init(fileUnit) !* Process twin related parameters ------------------------------------------------ twinFamiliesLoop: do f = 1_pInt,lattice_maxNtwinFamily - index_myFamily = sum(constitutive_dislotwin_Ntwin(1:f-1_pInt,instance)) ! index in truncated twin system list - twinSystemsLoop: do j = 1_pInt,constitutive_dislotwin_Ntwin(f,instance) + index_myFamily = sum(plastic_dislotwin_Ntwin(1:f-1_pInt,instance)) ! index in truncated twin system list + twinSystemsLoop: do j = 1_pInt,plastic_dislotwin_Ntwin(f,instance) !* Burgers vector, ! nucleation rate prefactor, ! and twin size - constitutive_dislotwin_burgersPerTwinSystem(index_myFamily+j,instance) = & - constitutive_dislotwin_burgersPerTwinFamily(f,instance) + plastic_dislotwin_burgersPerTwinSystem(index_myFamily+j,instance) = & + plastic_dislotwin_burgersPerTwinFamily(f,instance) - constitutive_dislotwin_Ndot0PerTwinSystem(index_myFamily+j,instance) = & - constitutive_dislotwin_Ndot0PerTwinFamily(f,instance) + plastic_dislotwin_Ndot0PerTwinSystem(index_myFamily+j,instance) = & + plastic_dislotwin_Ndot0PerTwinFamily(f,instance) - constitutive_dislotwin_twinsizePerTwinSystem(index_myFamily+j,instance) = & - constitutive_dislotwin_twinsizePerTwinFamily(f,instance) + plastic_dislotwin_twinsizePerTwinSystem(index_myFamily+j,instance) = & + plastic_dislotwin_twinsizePerTwinFamily(f,instance) !* Rotate twin elasticity matrices index_otherFamily = sum(lattice_NtwinSystem(1:f-1_pInt,phase)) ! index in full lattice twin list do l = 1_pInt,3_pInt; do m = 1_pInt,3_pInt; do n = 1_pInt,3_pInt; do o = 1_pInt,3_pInt do p = 1_pInt,3_pInt; do q = 1_pInt,3_pInt; do r = 1_pInt,3_pInt; do s = 1_pInt,3_pInt - constitutive_dislotwin_Ctwin3333(l,m,n,o,index_myFamily+j,instance) = & - constitutive_dislotwin_Ctwin3333(l,m,n,o,index_myFamily+j,instance) + & + plastic_dislotwin_Ctwin3333(l,m,n,o,index_myFamily+j,instance) = & + plastic_dislotwin_Ctwin3333(l,m,n,o,index_myFamily+j,instance) + & lattice_C3333(p,q,r,s,instance) * & lattice_Qtwin(l,p,index_otherFamily+j,phase) * & lattice_Qtwin(m,q,index_otherFamily+j,phase) * & @@ -926,25 +926,25 @@ subroutine constitutive_dislotwin_init(fileUnit) lattice_Qtwin(o,s,index_otherFamily+j,phase) enddo; enddo; enddo; enddo enddo; enddo; enddo; enddo - constitutive_dislotwin_Ctwin66(1:6,1:6,index_myFamily+j,instance) = & - math_Mandel3333to66(constitutive_dislotwin_Ctwin3333(1:3,1:3,1:3,1:3,index_myFamily+j,instance)) + plastic_dislotwin_Ctwin66(1:6,1:6,index_myFamily+j,instance) = & + math_Mandel3333to66(plastic_dislotwin_Ctwin3333(1:3,1:3,1:3,1:3,index_myFamily+j,instance)) !* Interaction matrices do o = 1_pInt,lattice_maxNslipFamily - index_otherFamily = sum(constitutive_dislotwin_Nslip(1:o-1_pInt,instance)) - do k = 1_pInt,constitutive_dislotwin_Nslip(o,instance) ! loop over (active) systems in other family (slip) - constitutive_dislotwin_interactionMatrix_TwinSlip(index_myFamily+j,index_otherFamily+k,instance) = & - constitutive_dislotwin_interaction_TwinSlip(lattice_interactionTwinSlip( & + index_otherFamily = sum(plastic_dislotwin_Nslip(1:o-1_pInt,instance)) + do k = 1_pInt,plastic_dislotwin_Nslip(o,instance) ! loop over (active) systems in other family (slip) + plastic_dislotwin_interactionMatrix_TwinSlip(index_myFamily+j,index_otherFamily+k,instance) = & + plastic_dislotwin_interaction_TwinSlip(lattice_interactionTwinSlip( & sum(lattice_NtwinSystem(1:f-1_pInt,phase))+j, & sum(lattice_NslipSystem(1:o-1_pInt,phase))+k, & phase), instance ) enddo; enddo do o = 1_pInt,lattice_maxNtwinFamily - index_otherFamily = sum(constitutive_dislotwin_Ntwin(1:o-1_pInt,instance)) - do k = 1_pInt,constitutive_dislotwin_Ntwin(o,instance) ! loop over (active) systems in other family (twin) - constitutive_dislotwin_interactionMatrix_TwinTwin(index_myFamily+j,index_otherFamily+k,instance) = & - constitutive_dislotwin_interaction_TwinTwin(lattice_interactionTwinTwin( & + index_otherFamily = sum(plastic_dislotwin_Ntwin(1:o-1_pInt,instance)) + do k = 1_pInt,plastic_dislotwin_Ntwin(o,instance) ! loop over (active) systems in other family (twin) + plastic_dislotwin_interactionMatrix_TwinTwin(index_myFamily+j,index_otherFamily+k,instance) = & + plastic_dislotwin_interaction_TwinTwin(lattice_interactionTwinTwin( & sum(lattice_NtwinSystem(1:f-1_pInt,phase))+j, & sum(lattice_NtwinSystem(1:o-1_pInt,phase))+k, & phase), instance ) @@ -956,19 +956,19 @@ subroutine constitutive_dislotwin_init(fileUnit) !* Process transformation related parameters ------------------------------------------------ transFamiliesLoop: do f = 1_pInt,lattice_maxNtransFamily - index_myFamily = sum(constitutive_dislotwin_Ntrans(1:f-1_pInt,instance)) ! index in truncated trans system list - transSystemsLoop: do j = 1_pInt,constitutive_dislotwin_Ntrans(f,instance) + index_myFamily = sum(plastic_dislotwin_Ntrans(1:f-1_pInt,instance)) ! index in truncated trans system list + transSystemsLoop: do j = 1_pInt,plastic_dislotwin_Ntrans(f,instance) !* Martensite lamellar size - constitutive_dislotwin_lamellarsizePerTransSystem(index_myFamily+j,instance) = & - constitutive_dislotwin_lamellarsizePerTransFamily(f,instance) + plastic_dislotwin_lamellarsizePerTransSystem(index_myFamily+j,instance) = & + plastic_dislotwin_lamellarsizePerTransFamily(f,instance) !* Rotate trans elasticity matrices index_otherFamily = sum(lattice_NtransSystem(1:f-1_pInt,phase)) ! index in full lattice trans list do l = 1_pInt,3_pInt; do m = 1_pInt,3_pInt; do n = 1_pInt,3_pInt; do o = 1_pInt,3_pInt do p = 1_pInt,3_pInt; do q = 1_pInt,3_pInt; do r = 1_pInt,3_pInt; do s = 1_pInt,3_pInt - constitutive_dislotwin_Ctrans3333(l,m,n,o,index_myFamily+j,instance) = & - constitutive_dislotwin_Ctrans3333(l,m,n,o,index_myFamily+j,instance) + & + plastic_dislotwin_Ctrans3333(l,m,n,o,index_myFamily+j,instance) = & + plastic_dislotwin_Ctrans3333(l,m,n,o,index_myFamily+j,instance) + & lattice_C3333(p,q,r,s,instance) * & lattice_Qtrans(l,p,index_otherFamily+j,phase) * & lattice_Qtrans(m,q,index_otherFamily+j,phase) * & @@ -976,14 +976,14 @@ subroutine constitutive_dislotwin_init(fileUnit) lattice_Qtrans(o,s,index_otherFamily+j,phase) enddo; enddo; enddo; enddo enddo; enddo; enddo; enddo - constitutive_dislotwin_Ctrans66(1:6,1:6,index_myFamily+j,instance) = & - math_Mandel3333to66(constitutive_dislotwin_Ctrans3333(1:3,1:3,1:3,1:3,index_myFamily+j,instance)) + plastic_dislotwin_Ctrans66(1:6,1:6,index_myFamily+j,instance) = & + math_Mandel3333to66(plastic_dislotwin_Ctrans3333(1:3,1:3,1:3,1:3,index_myFamily+j,instance)) !* Projection matrices for shear from slip systems to fault-band (twin) systems for strain-induced martensite nucleation do o = 1_pInt,lattice_maxNtransFamily - index_otherFamily = sum(constitutive_dislotwin_Ntrans(1:o-1_pInt,instance)) - do k = 1_pInt,constitutive_dislotwin_Ntrans(o,instance) ! loop over (active) systems in other family (trans) - constitutive_dislotwin_projectionMatrix_Trans(index_myFamily+j,index_otherFamily+k,instance) = & + index_otherFamily = sum(plastic_dislotwin_Ntrans(1:o-1_pInt,instance)) + do k = 1_pInt,plastic_dislotwin_Ntrans(o,instance) ! loop over (active) systems in other family (trans) + plastic_dislotwin_projectionMatrix_Trans(index_myFamily+j,index_otherFamily+k,instance) = & lattice_projectionTrans( sum(lattice_NtransSystem(1:f-1,phase))+j, & sum(lattice_NtransSystem(1:o-1,phase))+k, phase) enddo; enddo @@ -991,17 +991,17 @@ subroutine constitutive_dislotwin_init(fileUnit) enddo transSystemsLoop enddo transFamiliesLoop - call constitutive_dislotwin_stateInit(phase,instance) - call constitutive_dislotwin_aTolState(phase,instance) + call plastic_dislotwin_stateInit(phase,instance) + call plastic_dislotwin_aTolState(phase,instance) endif myPhase2 enddo initializeInstances -end subroutine constitutive_dislotwin_init +end subroutine plastic_dislotwin_init !-------------------------------------------------------------------------------------------------- !> @brief sets the relevant state values for a given instance of this plasticity !-------------------------------------------------------------------------------------------------- -subroutine constitutive_dislotwin_stateInit(ph,instance) +subroutine plastic_dislotwin_stateInit(ph,instance) use math, only: & pi use lattice, only: & @@ -1019,29 +1019,29 @@ subroutine constitutive_dislotwin_stateInit(ph,instance) real(pReal), dimension(plasticState(ph)%sizeState) :: tempState integer(pInt) :: i,j,f,ns,nt,nr, index_myFamily - real(pReal), dimension(constitutive_dislotwin_totalNslip(instance)) :: & + real(pReal), dimension(plastic_dislotwin_totalNslip(instance)) :: & rhoEdge0, & rhoEdgeDip0, & invLambdaSlip0, & MeanFreePathSlip0, & tauSlipThreshold0 - real(pReal), dimension(constitutive_dislotwin_totalNtwin(instance)) :: & + real(pReal), dimension(plastic_dislotwin_totalNtwin(instance)) :: & MeanFreePathTwin0,TwinVolume0 tempState = 0.0_pReal - ns = constitutive_dislotwin_totalNslip(instance) - nt = constitutive_dislotwin_totalNtwin(instance) - nr = constitutive_dislotwin_totalNtrans(instance) + ns = plastic_dislotwin_totalNslip(instance) + nt = plastic_dislotwin_totalNtwin(instance) + nr = plastic_dislotwin_totalNtrans(instance) !-------------------------------------------------------------------------------------------------- ! initialize basic slip state variables do f = 1_pInt,lattice_maxNslipFamily - index_myFamily = sum(constitutive_dislotwin_Nslip(1:f-1_pInt,instance)) ! index in truncated slip system list + index_myFamily = sum(plastic_dislotwin_Nslip(1:f-1_pInt,instance)) ! index in truncated slip system list rhoEdge0(index_myFamily+1_pInt: & - index_myFamily+constitutive_dislotwin_Nslip(f,instance)) = & - constitutive_dislotwin_rhoEdge0(f,instance) + index_myFamily+plastic_dislotwin_Nslip(f,instance)) = & + plastic_dislotwin_rhoEdge0(f,instance) rhoEdgeDip0(index_myFamily+1_pInt: & - index_myFamily+constitutive_dislotwin_Nslip(f,instance)) = & - constitutive_dislotwin_rhoEdgeDip0(f,instance) + index_myFamily+plastic_dislotwin_Nslip(f,instance)) = & + plastic_dislotwin_rhoEdgeDip0(f,instance) enddo tempState(1_pInt:ns) = rhoEdge0 @@ -1050,41 +1050,41 @@ subroutine constitutive_dislotwin_stateInit(ph,instance) !-------------------------------------------------------------------------------------------------- ! initialize dependent slip microstructural variables forall (i = 1_pInt:ns) & - invLambdaSlip0(i) = sqrt(dot_product((rhoEdge0+rhoEdgeDip0),constitutive_dislotwin_forestProjectionEdge(1:ns,i,instance)))/ & - constitutive_dislotwin_CLambdaSlipPerSlipSystem(i,instance) + invLambdaSlip0(i) = sqrt(dot_product((rhoEdge0+rhoEdgeDip0),plastic_dislotwin_forestProjectionEdge(1:ns,i,instance)))/ & + plastic_dislotwin_CLambdaSlipPerSlipSystem(i,instance) tempState(3_pInt*ns+2_pInt*nt+2_pInt*nr+1:4_pInt*ns+2_pInt*nt+2_pInt*nr) = invLambdaSlip0 forall (i = 1_pInt:ns) & MeanFreePathSlip0(i) = & - constitutive_dislotwin_GrainSize(instance)/(1.0_pReal+invLambdaSlip0(i)*constitutive_dislotwin_GrainSize(instance)) + plastic_dislotwin_GrainSize(instance)/(1.0_pReal+invLambdaSlip0(i)*plastic_dislotwin_GrainSize(instance)) tempState(6_pInt*ns+3_pInt*nt+2_pInt*nr+1:7_pInt*ns+3_pInt*nt+2_pInt*nr) = MeanFreePathSlip0 forall (i = 1_pInt:ns) & tauSlipThreshold0(i) = & - lattice_mu(ph)*constitutive_dislotwin_burgersPerSlipSystem(i,instance) * & - sqrt(dot_product((rhoEdge0+rhoEdgeDip0),constitutive_dislotwin_interactionMatrix_SlipSlip(i,1:ns,instance))) + lattice_mu(ph)*plastic_dislotwin_burgersPerSlipSystem(i,instance) * & + sqrt(dot_product((rhoEdge0+rhoEdgeDip0),plastic_dislotwin_interactionMatrix_SlipSlip(i,1:ns,instance))) tempState(7_pInt*ns+4_pInt*nt+2_pInt*nr+1:8_pInt*ns+4_pInt*nt+2_pInt*nr) = tauSlipThreshold0 !-------------------------------------------------------------------------------------------------- ! initialize dependent twin microstructural variables forall (j = 1_pInt:nt) & - MeanFreePathTwin0(j) = constitutive_dislotwin_GrainSize(instance) + MeanFreePathTwin0(j) = plastic_dislotwin_GrainSize(instance) tempState(7_pInt*ns+3_pInt*nt+2_pInt*nr+1_pInt:7_pInt*ns+4_pInt*nt+2_pInt*nr) = MeanFreePathTwin0 forall (j = 1_pInt:nt) & TwinVolume0(j) = & - (pi/4.0_pReal)*constitutive_dislotwin_twinsizePerTwinSystem(j,instance)*MeanFreePathTwin0(j)**(2.0_pReal) + (pi/4.0_pReal)*plastic_dislotwin_twinsizePerTwinSystem(j,instance)*MeanFreePathTwin0(j)**(2.0_pReal) tempState(8_pInt*ns+5_pInt*nt+2_pInt*nr+1_pInt:8_pInt*ns+6_pInt*nt+2_pInt*nr) = TwinVolume0 plasticState(ph)%state0 = spread(tempState,2,size(plasticState(ph)%state(1,:))) -end subroutine constitutive_dislotwin_stateInit +end subroutine plastic_dislotwin_stateInit !-------------------------------------------------------------------------------------------------- !> @brief sets the relevant state values for a given instance of this plasticity !-------------------------------------------------------------------------------------------------- -subroutine constitutive_dislotwin_aTolState(ph,instance) +subroutine plastic_dislotwin_aTolState(ph,instance) use material, only: & plasticState @@ -1095,13 +1095,13 @@ subroutine constitutive_dislotwin_aTolState(ph,instance) integer(pInt) :: ns, nt, nr - ns = constitutive_dislotwin_totalNslip(instance) - nt = constitutive_dislotwin_totalNtwin(instance) - nr = constitutive_dislotwin_totalNtrans(instance) + ns = plastic_dislotwin_totalNslip(instance) + nt = plastic_dislotwin_totalNtwin(instance) + nr = plastic_dislotwin_totalNtrans(instance) ! Tolerance state for dislocation densities plasticState(ph)%aTolState(1_pInt: & - 2_pInt*ns) = constitutive_dislotwin_aTolRho(instance) + 2_pInt*ns) = plastic_dislotwin_aTolRho(instance) ! Tolerance state for accumulated shear due to slip plasticState(ph)%aTolState(2_pInt*ns+1_pInt: & @@ -1109,7 +1109,7 @@ subroutine constitutive_dislotwin_aTolState(ph,instance) ! Tolerance state for twin volume fraction plasticState(ph)%aTolState(3_pInt*ns+1_pInt: & - 3_pInt*ns+nt) = constitutive_dislotwin_aTolTwinFrac(instance) + 3_pInt*ns+nt) = plastic_dislotwin_aTolTwinFrac(instance) ! Tolerance state for accumulated shear due to twin plasticState(ph)%aTolState(3_pInt*ns+nt+1_pInt: & @@ -1117,19 +1117,19 @@ subroutine constitutive_dislotwin_aTolState(ph,instance) ! Tolerance state for stress-assisted martensite volume fraction plasticState(ph)%aTolState(3_pInt*ns+2_pInt*nt+1_pInt: & - 3_pInt*ns+2_pInt*nt+nr) = constitutive_dislotwin_aTolTransFrac(instance) + 3_pInt*ns+2_pInt*nt+nr) = plastic_dislotwin_aTolTransFrac(instance) ! Tolerance state for strain-induced martensite volume fraction plasticState(ph)%aTolState(3_pInt*ns+2_pInt*nt+nr+1_pInt: & - 3_pInt*ns+2_pInt*nt+2_pInt*nr) = constitutive_dislotwin_aTolTransFrac(instance) + 3_pInt*ns+2_pInt*nt+2_pInt*nr) = plastic_dislotwin_aTolTransFrac(instance) -end subroutine constitutive_dislotwin_aTolState +end subroutine plastic_dislotwin_aTolState !-------------------------------------------------------------------------------------------------- !> @brief returns the homogenized elasticity matrix !-------------------------------------------------------------------------------------------------- -function constitutive_dislotwin_homogenizedC(ipc,ip,el) +function plastic_dislotwin_homogenizedC(ipc,ip,el) use material, only: & phase_plasticityInstance, & plasticState, & @@ -1139,7 +1139,7 @@ function constitutive_dislotwin_homogenizedC(ipc,ip,el) implicit none real(pReal), dimension(6,6) :: & - constitutive_dislotwin_homogenizedC + plastic_dislotwin_homogenizedC integer(pInt), intent(in) :: & ipc, & !< component-ID of integration point ip, & !< integration point @@ -1154,9 +1154,9 @@ function constitutive_dislotwin_homogenizedC(ipc,ip,el) of = mappingConstitutive(1,ipc,ip,el) ph = mappingConstitutive(2,ipc,ip,el) instance = phase_plasticityInstance(ph) - ns = constitutive_dislotwin_totalNslip(instance) - nt = constitutive_dislotwin_totalNtwin(instance) - nr = constitutive_dislotwin_totalNtrans(instance) + ns = plastic_dislotwin_totalNslip(instance) + nt = plastic_dislotwin_totalNtwin(instance) + nr = plastic_dislotwin_totalNtrans(instance) !* Total twin volume fraction sumf = sum(plasticState(ph)%state((3_pInt*ns+1_pInt):(3_pInt*ns+nt),of)) ! safe for nt == 0 @@ -1166,23 +1166,23 @@ function constitutive_dislotwin_homogenizedC(ipc,ip,el) sum(plasticState(ph)%state((3_pInt*ns+2_pInt*nt+nr+1_pInt):(3_pInt*ns+2_pInt*nt+2_pInt*nr), of)) !* Homogenized elasticity matrix - constitutive_dislotwin_homogenizedC = (1.0_pReal-sumf-sumftr)*lattice_C66(1:6,1:6,ph) + plastic_dislotwin_homogenizedC = (1.0_pReal-sumf-sumftr)*lattice_C66(1:6,1:6,ph) do i=1_pInt,nt - constitutive_dislotwin_homogenizedC = constitutive_dislotwin_homogenizedC & - + plasticState(ph)%state(3_pInt*ns+i, of)*constitutive_dislotwin_Ctwin66(1:6,1:6,i,instance) + plastic_dislotwin_homogenizedC = plastic_dislotwin_homogenizedC & + + plasticState(ph)%state(3_pInt*ns+i, of)*plastic_dislotwin_Ctwin66(1:6,1:6,i,instance) enddo do i=1_pInt,nr - constitutive_dislotwin_homogenizedC = constitutive_dislotwin_homogenizedC & + plastic_dislotwin_homogenizedC = plastic_dislotwin_homogenizedC & + (plasticState(ph)%state(3_pInt*ns+2_pInt*nt+i, of) + plasticState(ph)%state(3_pInt*ns+2_pInt*nt+nr+i, of))*& - constitutive_dislotwin_Ctrans66(1:6,1:6,i,instance) + plastic_dislotwin_Ctrans66(1:6,1:6,i,instance) enddo - end function constitutive_dislotwin_homogenizedC + end function plastic_dislotwin_homogenizedC !-------------------------------------------------------------------------------------------------- !> @brief calculates derived quantities from state !-------------------------------------------------------------------------------------------------- -subroutine constitutive_dislotwin_microstructure(temperature,ipc,ip,el) +subroutine plastic_dislotwin_microstructure(temperature,ipc,ip,el) use math, only: & pi use mesh, only: & @@ -1215,17 +1215,17 @@ subroutine constitutive_dislotwin_microstructure(temperature,ipc,ip,el) of real(pReal) :: & sumf,sfe,x0,sumftr - real(pReal), dimension(constitutive_dislotwin_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: fOverStacksize - real(pReal), dimension(constitutive_dislotwin_totalNtrans(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & + real(pReal), dimension(plastic_dislotwin_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: fOverStacksize + real(pReal), dimension(plastic_dislotwin_totalNtrans(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & ftransOverLamellarSize !* Shortened notation of = mappingConstitutive(1,ipc,ip,el) ph = mappingConstitutive(2,ipc,ip,el) instance = phase_plasticityInstance(ph) - ns = constitutive_dislotwin_totalNslip(instance) - nt = constitutive_dislotwin_totalNtwin(instance) - nr = constitutive_dislotwin_totalNtrans(instance) + ns = plastic_dislotwin_totalNslip(instance) + nt = plastic_dislotwin_totalNtwin(instance) + nr = plastic_dislotwin_totalNtrans(instance) !BASIC STATES !* State: 1 : ns rho_edge @@ -1254,40 +1254,40 @@ subroutine constitutive_dislotwin_microstructure(temperature,ipc,ip,el) sum(plasticState(ph)%state((3_pInt*ns+2_pInt*nt+nr+1_pInt):(3_pInt*ns+2_pInt*nt+2_pInt*nr), of)) !* Stacking fault energy - sfe = constitutive_dislotwin_SFE_0K(instance) + & - constitutive_dislotwin_dSFE_dT(instance) * Temperature + sfe = plastic_dislotwin_SFE_0K(instance) + & + plastic_dislotwin_dSFE_dT(instance) * Temperature !* rescaled twin volume fraction for topology forall (t = 1_pInt:nt) & fOverStacksize(t) = & - plasticState(ph)%state(3_pInt*ns+t, of)/constitutive_dislotwin_twinsizePerTwinSystem(t,instance) + plasticState(ph)%state(3_pInt*ns+t, of)/plastic_dislotwin_twinsizePerTwinSystem(t,instance) !* rescaled trans volume fraction for topology forall (r = 1_pInt:nr) & ftransOverLamellarSize(r) = & (plasticState(ph)%state(3_pInt*ns+2_pInt*nt+r, of)+plasticState(ph)%state(3_pInt*ns+2_pInt*nt+nr+r, of))/& - constitutive_dislotwin_lamellarsizePerTransSystem(r,instance) + plastic_dislotwin_lamellarsizePerTransSystem(r,instance) !* 1/mean free distance between 2 forest dislocations seen by a moving dislocation forall (s = 1_pInt:ns) & plasticState(ph)%state(3_pInt*ns+2_pInt*nt+2_pInt*nr+s, of) = & sqrt(dot_product((plasticState(ph)%state(1:ns,of)+plasticState(ph)%state(ns+1_pInt:2_pInt*ns,of)),& - constitutive_dislotwin_forestProjectionEdge(1:ns,s,instance)))/ & - constitutive_dislotwin_CLambdaSlipPerSlipSystem(s,instance) + plastic_dislotwin_forestProjectionEdge(1:ns,s,instance)))/ & + plastic_dislotwin_CLambdaSlipPerSlipSystem(s,instance) !* 1/mean free distance between 2 twin stacks from different systems seen by a moving dislocation !$OMP CRITICAL (evilmatmul) plasticState(ph)%state((4_pInt*ns+2_pInt*nt+2_pInt*nr+1_pInt):(5_pInt*ns+2_pInt*nt+2_pInt*nr), of) = 0.0_pReal if (nt > 0_pInt .and. ns > 0_pInt) & plasticState(ph)%state((4_pInt*ns+2_pInt*nt+2_pInt*nr+1):(5_pInt*ns+2_pInt*nt+2_pInt*nr), of) = & - matmul(constitutive_dislotwin_interactionMatrix_SlipTwin(1:ns,1:nt,instance),fOverStacksize(1:nt))/(1.0_pReal-sumf) + matmul(plastic_dislotwin_interactionMatrix_SlipTwin(1:ns,1:nt,instance),fOverStacksize(1:nt))/(1.0_pReal-sumf) !$OMP END CRITICAL (evilmatmul) !* 1/mean free distance between 2 twin stacks from different systems seen by a growing twin !$OMP CRITICAL (evilmatmul) if (nt > 0_pInt) & plasticState(ph)%state((5_pInt*ns+2_pInt*nt+2_pInt*nr+1_pInt):(5_pInt*ns+3_pInt*nt+2_pInt*nr), of) = & - matmul(constitutive_dislotwin_interactionMatrix_TwinTwin(1:nt,1:nt,instance),fOverStacksize(1:nt))/(1.0_pReal-sumf) + matmul(plastic_dislotwin_interactionMatrix_TwinTwin(1:nt,1:nt,instance),fOverStacksize(1:nt))/(1.0_pReal-sumf) !$OMP END CRITICAL (evilmatmul) !* 1/mean free distance between 2 martensite lamellar from different systems seen by a moving dislocation @@ -1300,60 +1300,60 @@ subroutine constitutive_dislotwin_microstructure(temperature,ipc,ip,el) do s = 1_pInt,ns if ((nt > 0_pInt) .or. (nr > 0_pInt)) then plasticState(ph)%state(6_pInt*ns+3_pInt*nt+2_pInt*nr+s, of) = & - constitutive_dislotwin_GrainSize(instance)/(1.0_pReal+constitutive_dislotwin_GrainSize(instance)*& + plastic_dislotwin_GrainSize(instance)/(1.0_pReal+plastic_dislotwin_GrainSize(instance)*& (plasticState(ph)%state(3_pInt*ns+2_pInt*nt+2_pInt*nr+s, of) + & plasticState(ph)%state(4_pInt*ns+2_pInt*nt+2_pInt*nr+s, of) + & plasticState(ph)%state(5_pInt*ns+3_pInt*nt+2_pInt*nr+s, of))) else plasticState(ph)%state(6_pInt*ns+s, of) = & - constitutive_dislotwin_GrainSize(instance)/& - (1.0_pReal+constitutive_dislotwin_GrainSize(instance)*(plasticState(ph)%state(3_pInt*ns+s, of))) + plastic_dislotwin_GrainSize(instance)/& + (1.0_pReal+plastic_dislotwin_GrainSize(instance)*(plasticState(ph)%state(3_pInt*ns+s, of))) endif enddo !* mean free path between 2 obstacles seen by a growing twin forall (t = 1_pInt:nt) & plasticState(ph)%state(7_pInt*ns+3_pInt*nt+2_pInt*nr+t, of) = & - (constitutive_dislotwin_Cmfptwin(instance)*constitutive_dislotwin_GrainSize(instance))/& - (1.0_pReal+constitutive_dislotwin_GrainSize(instance)*plasticState(ph)%state(5_pInt*ns+2_pInt*nt+2_pInt*nr+t, of)) + (plastic_dislotwin_Cmfptwin(instance)*plastic_dislotwin_GrainSize(instance))/& + (1.0_pReal+plastic_dislotwin_GrainSize(instance)*plasticState(ph)%state(5_pInt*ns+2_pInt*nt+2_pInt*nr+t, of)) !* threshold stress for dislocation motion forall (s = 1_pInt:ns) & plasticState(ph)%state(7_pInt*ns+4_pInt*nt+2_pInt*nr+s, of) = & - lattice_mu(ph)*constitutive_dislotwin_burgersPerSlipSystem(s,instance)*& + lattice_mu(ph)*plastic_dislotwin_burgersPerSlipSystem(s,instance)*& sqrt(dot_product((plasticState(ph)%state(1:ns, of)+plasticState(ph)%state(ns+1_pInt:2_pInt*ns, of)),& - constitutive_dislotwin_interactionMatrix_SlipSlip(s,1:ns,instance))) + plastic_dislotwin_interactionMatrix_SlipSlip(s,1:ns,instance))) !* threshold stress for growing twin forall (t = 1_pInt:nt) & plasticState(ph)%state(8_pInt*ns+4_pInt*nt+2_pInt*nr+t, of) = & - constitutive_dislotwin_Cthresholdtwin(instance)*& - (sfe/(3.0_pReal*constitutive_dislotwin_burgersPerTwinSystem(t,instance))+& - 3.0_pReal*constitutive_dislotwin_burgersPerTwinSystem(t,instance)*lattice_mu(ph)/& - (constitutive_dislotwin_L0(instance)*constitutive_dislotwin_burgersPerSlipSystem(t,instance))) + plastic_dislotwin_Cthresholdtwin(instance)*& + (sfe/(3.0_pReal*plastic_dislotwin_burgersPerTwinSystem(t,instance))+& + 3.0_pReal*plastic_dislotwin_burgersPerTwinSystem(t,instance)*lattice_mu(ph)/& + (plastic_dislotwin_L0(instance)*plastic_dislotwin_burgersPerSlipSystem(t,instance))) !* final twin volume after growth forall (t = 1_pInt:nt) & plasticState(ph)%state(8_pInt*ns+5_pInt*nt+2_pInt*nr+t, of) = & - (pi/4.0_pReal)*constitutive_dislotwin_twinsizePerTwinSystem(t,instance)*& + (pi/4.0_pReal)*plastic_dislotwin_twinsizePerTwinSystem(t,instance)*& plasticState(ph)%state(7_pInt*ns+3_pInt*nt+2_pInt*nr+t, of)**(2.0_pReal) !* equilibrium seperation of partial dislocations do t = 1_pInt,nt - x0 = lattice_mu(ph)*constitutive_dislotwin_burgersPerTwinSystem(t,instance)**(2.0_pReal)/& + x0 = lattice_mu(ph)*plastic_dislotwin_burgersPerTwinSystem(t,instance)**(2.0_pReal)/& (sfe*8.0_pReal*pi)*(2.0_pReal+lattice_nu(ph))/(1.0_pReal-lattice_nu(ph)) - constitutive_dislotwin_tau_r(t,instance)= & - lattice_mu(ph)*constitutive_dislotwin_burgersPerTwinSystem(t,instance)/(2.0_pReal*pi)*& - (1/(x0+constitutive_dislotwin_xc(instance))+cos(pi/3.0_pReal)/x0) !!! used where?? + plastic_dislotwin_tau_r(t,instance)= & + lattice_mu(ph)*plastic_dislotwin_burgersPerTwinSystem(t,instance)/(2.0_pReal*pi)*& + (1/(x0+plastic_dislotwin_xc(instance))+cos(pi/3.0_pReal)/x0) !!! used where?? enddo -end subroutine constitutive_dislotwin_microstructure +end subroutine plastic_dislotwin_microstructure !-------------------------------------------------------------------------------------------------- !> @brief calculates plastic velocity gradient and its tangent !-------------------------------------------------------------------------------------------------- -subroutine constitutive_dislotwin_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Temperature,slipDamage,ipc,ip,el) +subroutine plastic_dislotwin_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Temperature,slipDamage,ipc,ip,el) use prec, only: & tol_math_check use math, only: & @@ -1393,7 +1393,7 @@ subroutine constitutive_dislotwin_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Temper real(pReal), intent(in) :: Temperature real(pReal), dimension(6), intent(in) :: Tstar_v real(pReal), & - dimension(constitutive_dislotwin_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))), & + dimension(plastic_dislotwin_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))), & intent(in) :: & slipDamage real(pReal), dimension(3,3), intent(out) :: Lp @@ -1402,11 +1402,11 @@ subroutine constitutive_dislotwin_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Temper integer(pInt) :: instance,ph,of,ns,nt,nr,f,i,j,k,l,m,n,index_myFamily,s1,s2 real(pReal) :: sumf,sumftr,StressRatio_p,StressRatio_pminus1,StressRatio_r,BoltzmannRatio,DotGamma0,Ndot0,stressRatio real(pReal), dimension(3,3,3,3) :: dLp_dTstar3333 - real(pReal), dimension(constitutive_dislotwin_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & + real(pReal), dimension(plastic_dislotwin_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & gdot_slip,dgdot_dtauslip,tau_slip - real(pReal), dimension(constitutive_dislotwin_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & + real(pReal), dimension(plastic_dislotwin_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & gdot_twin,dgdot_dtautwin,tau_twin - real(pReal), dimension(constitutive_dislotwin_totalNtrans(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & + real(pReal), dimension(plastic_dislotwin_totalNtrans(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & V_trans,Vdot_trans,dVdot_dtautrans,tau_trans,fstress_trans real(pReal), dimension(6) :: gdot_sb,dgdot_dtausb,tau_sb real(pReal), dimension(3,3) :: eigVectors, sb_Smatrix @@ -1435,9 +1435,9 @@ subroutine constitutive_dislotwin_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Temper of = mappingConstitutive(1,ipc,ip,el) ph = mappingConstitutive(2,ipc,ip,el) instance = phase_plasticityInstance(ph) - ns = constitutive_dislotwin_totalNslip(instance) - nt = constitutive_dislotwin_totalNtwin(instance) - nr = constitutive_dislotwin_totalNtrans(instance) + ns = plastic_dislotwin_totalNslip(instance) + nt = plastic_dislotwin_totalNtwin(instance) + nr = plastic_dislotwin_totalNtrans(instance) Lp = 0.0_pReal dLp_dTstar3333 = 0.0_pReal @@ -1449,7 +1449,7 @@ subroutine constitutive_dislotwin_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Temper j = 0_pInt slipFamiliesLoop: do f = 1_pInt,lattice_maxNslipFamily index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family - slipSystemsLoop: do i = 1_pInt,constitutive_dislotwin_Nslip(f,instance) + slipSystemsLoop: do i = 1_pInt,plastic_dislotwin_Nslip(f,instance) j = j+1_pInt !* Calculation of Lp @@ -1459,27 +1459,27 @@ subroutine constitutive_dislotwin_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Temper if((abs(tau_slip(j))-plasticState(ph)%state(7*ns+4*nt+2*nr+j, of)) > tol_math_check) then !* Stress ratios stressRatio =((abs(tau_slip(j))- plasticState(ph)%state(7*ns+4*nt+2*nr+j, of))/& - (constitutive_dislotwin_SolidSolutionStrength(instance)+constitutive_dislotwin_tau_peierlsPerSlipFamily(f,instance))) - StressRatio_p = stressRatio** constitutive_dislotwin_pPerSlipFamily(f,instance) - StressRatio_pminus1 = stressRatio**(constitutive_dislotwin_pPerSlipFamily(f,instance)-1.0_pReal) + (plastic_dislotwin_SolidSolutionStrength(instance)+plastic_dislotwin_tau_peierlsPerSlipFamily(f,instance))) + StressRatio_p = stressRatio** plastic_dislotwin_pPerSlipFamily(f,instance) + StressRatio_pminus1 = stressRatio**(plastic_dislotwin_pPerSlipFamily(f,instance)-1.0_pReal) !* Boltzmann ratio - BoltzmannRatio = constitutive_dislotwin_QedgePerSlipSystem(j,instance)/(kB*Temperature) + BoltzmannRatio = plastic_dislotwin_QedgePerSlipSystem(j,instance)/(kB*Temperature) !* Initial shear rates DotGamma0 = & - plasticState(ph)%state(j, of)*constitutive_dislotwin_burgersPerSlipSystem(j,instance)*& - constitutive_dislotwin_v0PerSlipSystem(j,instance) + plasticState(ph)%state(j, of)*plastic_dislotwin_burgersPerSlipSystem(j,instance)*& + plastic_dislotwin_v0PerSlipSystem(j,instance) !* Shear rates due to slip gdot_slip(j) = DotGamma0 & - * exp(-BoltzmannRatio*(1-StressRatio_p) ** constitutive_dislotwin_qPerSlipFamily(f,instance)) & + * exp(-BoltzmannRatio*(1-StressRatio_p) ** plastic_dislotwin_qPerSlipFamily(f,instance)) & * sign(1.0_pReal,tau_slip(j)) !* Derivatives of shear rates dgdot_dtauslip(j) = & - abs(gdot_slip(j))*BoltzmannRatio*constitutive_dislotwin_pPerSlipFamily(f,instance)& - *constitutive_dislotwin_qPerSlipFamily(f,instance)/& - (constitutive_dislotwin_SolidSolutionStrength(instance)+constitutive_dislotwin_tau_peierlsPerSlipFamily(f,instance))*& - StressRatio_pminus1*(1-StressRatio_p)**(constitutive_dislotwin_qPerSlipFamily(f,instance)-1.0_pReal) + abs(gdot_slip(j))*BoltzmannRatio*plastic_dislotwin_pPerSlipFamily(f,instance)& + *plastic_dislotwin_qPerSlipFamily(f,instance)/& + (plastic_dislotwin_SolidSolutionStrength(instance)+plastic_dislotwin_tau_peierlsPerSlipFamily(f,instance))*& + StressRatio_pminus1*(1-StressRatio_p)**(plastic_dislotwin_qPerSlipFamily(f,instance)-1.0_pReal) endif !* Plastic velocity gradient for dislocation glide @@ -1507,8 +1507,8 @@ subroutine constitutive_dislotwin_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Temper !-------------------------------------------------------------------------------------------------- ! Shear banding (shearband) part - if(constitutive_dislotwin_sbVelocity(instance) /= 0.0_pReal .and. & - constitutive_dislotwin_sbResistance(instance) /= 0.0_pReal) then + if(plastic_dislotwin_sbVelocity(instance) /= 0.0_pReal .and. & + plastic_dislotwin_sbResistance(instance) /= 0.0_pReal) then gdot_sb = 0.0_pReal dgdot_dtausb = 0.0_pReal call math_spectralDecompositionSym33(math_Mandel6to33(Tstar_v),eigValues,eigVectors, error) @@ -1516,38 +1516,38 @@ subroutine constitutive_dislotwin_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Temper sb_s = 0.5_pReal*sqrt(2.0_pReal)*math_mul33x3(eigVectors,sb_sComposition(1:3,j)) sb_m = 0.5_pReal*sqrt(2.0_pReal)*math_mul33x3(eigVectors,sb_mComposition(1:3,j)) sb_Smatrix = math_tensorproduct(sb_s,sb_m) - constitutive_dislotwin_sbSv(1:6,j,ipc,ip,el) = math_Mandel33to6(math_symmetric33(sb_Smatrix)) + plastic_dislotwin_sbSv(1:6,j,ipc,ip,el) = math_Mandel33to6(math_symmetric33(sb_Smatrix)) !* Calculation of Lp !* Resolved shear stress on shear banding system - tau_sb(j) = dot_product(Tstar_v,constitutive_dislotwin_sbSv(1:6,j,ipc,ip,el)) + tau_sb(j) = dot_product(Tstar_v,plastic_dislotwin_sbSv(1:6,j,ipc,ip,el)) !* Stress ratios if (abs(tau_sb(j)) < tol_math_check) then StressRatio_p = 0.0_pReal StressRatio_pminus1 = 0.0_pReal else - StressRatio_p = (abs(tau_sb(j))/constitutive_dislotwin_sbResistance(instance))& - **constitutive_dislotwin_pShearBand(instance) - StressRatio_pminus1 = (abs(tau_sb(j))/constitutive_dislotwin_sbResistance(instance))& - **(constitutive_dislotwin_pShearBand(instance)-1.0_pReal) + StressRatio_p = (abs(tau_sb(j))/plastic_dislotwin_sbResistance(instance))& + **plastic_dislotwin_pShearBand(instance) + StressRatio_pminus1 = (abs(tau_sb(j))/plastic_dislotwin_sbResistance(instance))& + **(plastic_dislotwin_pShearBand(instance)-1.0_pReal) endif !* Boltzmann ratio - BoltzmannRatio = constitutive_dislotwin_sbQedge(instance)/(kB*Temperature) + BoltzmannRatio = plastic_dislotwin_sbQedge(instance)/(kB*Temperature) !* Initial shear rates - DotGamma0 = constitutive_dislotwin_sbVelocity(instance) + DotGamma0 = plastic_dislotwin_sbVelocity(instance) !* Shear rates due to shearband gdot_sb(j) = DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)**& - constitutive_dislotwin_qShearBand(instance))*sign(1.0_pReal,tau_sb(j)) + plastic_dislotwin_qShearBand(instance))*sign(1.0_pReal,tau_sb(j)) !* Derivatives of shear rates dgdot_dtausb(j) = & ((abs(gdot_sb(j))*BoltzmannRatio*& - constitutive_dislotwin_pShearBand(instance)*constitutive_dislotwin_qShearBand(instance))/& - constitutive_dislotwin_sbResistance(instance))*& - StressRatio_pminus1*(1_pInt-StressRatio_p)**(constitutive_dislotwin_qShearBand(instance)-1.0_pReal) + plastic_dislotwin_pShearBand(instance)*plastic_dislotwin_qShearBand(instance))/& + plastic_dislotwin_sbResistance(instance))*& + StressRatio_pminus1*(1_pInt-StressRatio_p)**(plastic_dislotwin_qShearBand(instance)-1.0_pReal) !* Plastic velocity gradient for shear banding Lp = Lp + gdot_sb(j)*sb_Smatrix @@ -1568,7 +1568,7 @@ subroutine constitutive_dislotwin_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Temper j = 0_pInt twinFamiliesLoop: do f = 1_pInt,lattice_maxNtwinFamily index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,ph)) ! at which index starts my family - twinSystemsLoop: do i = 1_pInt,constitutive_dislotwin_Ntwin(f,instance) + twinSystemsLoop: do i = 1_pInt,plastic_dislotwin_Ntwin(f,instance) j = j+1_pInt !* Calculation of Lp @@ -1578,28 +1578,28 @@ subroutine constitutive_dislotwin_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Temper !* Stress ratios if (tau_twin(j) > tol_math_check) then StressRatio_r = (plasticState(ph)%state(8*ns+4*nt+2*nr+j, of)/& - tau_twin(j))**constitutive_dislotwin_rPerTwinFamily(f,instance) + tau_twin(j))**plastic_dislotwin_rPerTwinFamily(f,instance) !* Shear rates and their derivatives due to twin select case(lattice_structure(ph)) case (LATTICE_fcc_ID) s1=lattice_fcc_twinNucleationSlipPair(1,index_myFamily+i) s2=lattice_fcc_twinNucleationSlipPair(2,index_myFamily+i) - if (tau_twin(j) < constitutive_dislotwin_tau_r(j,instance)) then + if (tau_twin(j) < plastic_dislotwin_tau_r(j,instance)) then Ndot0=(abs(gdot_slip(s1))*(plasticState(ph)%state(s2,of)+plasticState(ph)%state(ns+s2, of))+& abs(gdot_slip(s2))*(plasticState(ph)%state(s1, of)+plasticState(ph)%state(ns+s1, of)))/& - (constitutive_dislotwin_L0(instance)*constitutive_dislotwin_burgersPerSlipSystem(j,instance))*& - (1.0_pReal-exp(-constitutive_dislotwin_VcrossSlip(instance)/(kB*Temperature)*& - (constitutive_dislotwin_tau_r(j,instance)-tau_twin(j)))) + (plastic_dislotwin_L0(instance)*plastic_dislotwin_burgersPerSlipSystem(j,instance))*& + (1.0_pReal-exp(-plastic_dislotwin_VcrossSlip(instance)/(kB*Temperature)*& + (plastic_dislotwin_tau_r(j,instance)-tau_twin(j)))) else Ndot0=0.0_pReal end if case default - Ndot0=constitutive_dislotwin_Ndot0PerTwinSystem(j,instance) + Ndot0=plastic_dislotwin_Ndot0PerTwinSystem(j,instance) end select gdot_twin(j) = & (1.0_pReal-sumf-sumftr)*lattice_shearTwin(index_myFamily+i,ph)*& plasticState(ph)%state(8*ns+5*nt+2*nr+j, of)*Ndot0*exp(-StressRatio_r) - dgdot_dtautwin(j) = ((gdot_twin(j)*constitutive_dislotwin_rPerTwinFamily(f,instance))/tau_twin(j))*StressRatio_r + dgdot_dtautwin(j) = ((gdot_twin(j)*plastic_dislotwin_rPerTwinFamily(f,instance))/tau_twin(j))*StressRatio_r endif !* Plastic velocity gradient for mechanical twinning @@ -1620,7 +1620,7 @@ subroutine constitutive_dislotwin_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Temper j = 0_pInt transFamiliesLoop: do f = 1_pInt,lattice_maxNtransFamily index_myFamily = sum(lattice_NtransSystem(1:f-1_pInt,ph)) ! at which index starts my family - transSystemsLoop: do i = 1_pInt,constitutive_dislotwin_Ntrans(f,instance) + transSystemsLoop: do i = 1_pInt,plastic_dislotwin_Ntrans(f,instance) j = j+1_pInt !* Resolved shear stress on transformation system @@ -1631,13 +1631,13 @@ subroutine constitutive_dislotwin_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Temper !* Driving force for stress-assisted martensite growth on transformation system fstress_trans(j) = tau_trans(j) - & - constitutive_dislotwin_Cdwp(instance)*(2*V_trans(j) - 6*V_trans(j)**2 + 4*V_trans(j)**3) - & - 12*constitutive_dislotwin_deltaG(instance)*(V_trans(j)**2 - V_trans(j)**3) + plastic_dislotwin_Cdwp(instance)*(2*V_trans(j) - 6*V_trans(j)**2 + 4*V_trans(j)**3) - & + 12*plastic_dislotwin_deltaG(instance)*(V_trans(j)**2 - V_trans(j)**3) !* Transformation rate of stress-assisted martensite and its derivative if (fstress_trans(j) > tol_math_check) then - Vdot_trans(j) = constitutive_dislotwin_Cgro(instance)*(1.0_pReal - sumf - sumftr)*fstress_trans(j) - dVdot_dtautrans(j) = constitutive_dislotwin_Cgro(instance)*(1.0_pReal - sumf - sumftr) + Vdot_trans(j) = plastic_dislotwin_Cgro(instance)*(1.0_pReal - sumf - sumftr)*fstress_trans(j) + dVdot_dtautrans(j) = plastic_dislotwin_Cgro(instance)*(1.0_pReal - sumf - sumftr) endif !* Plastic velocity gradient for phase transformation @@ -1655,13 +1655,13 @@ subroutine constitutive_dislotwin_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,Temper dLp_dTstar99 = math_Plain3333to99(dLp_dTstar3333) -end subroutine constitutive_dislotwin_LpAndItsTangent +end subroutine plastic_dislotwin_LpAndItsTangent !-------------------------------------------------------------------------------------------------- !> @brief calculates the rate of change of microstructure !-------------------------------------------------------------------------------------------------- -subroutine constitutive_dislotwin_dotState(Tstar_v,Temperature,ipc,ip,el) +subroutine plastic_dislotwin_dotState(Tstar_v,Temperature,ipc,ip,el) use prec, only: & tol_math_check use math, only: & @@ -1708,21 +1708,21 @@ subroutine constitutive_dislotwin_dotState(Tstar_v,Temperature,ipc,ip,el) of real(pReal) :: sumf,sumftr,StressRatio_p,StressRatio_pminus1,BoltzmannRatio,DotGamma0,& EdgeDipMinDistance,AtomicVolume,VacancyDiffusion,StressRatio_r,Ndot0,stressRatio - real(pReal), dimension(constitutive_dislotwin_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & + real(pReal), dimension(plastic_dislotwin_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & gdot_slip,tau_slip,DotRhoMultiplication,EdgeDipDistance,DotRhoEdgeEdgeAnnihilation,DotRhoEdgeDipAnnihilation,& ClimbVelocity,DotRhoEdgeDipClimb,DotRhoDipFormation - real(pReal), dimension(constitutive_dislotwin_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & + real(pReal), dimension(plastic_dislotwin_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & tau_twin - real(pReal), dimension(constitutive_dislotwin_totalNtrans(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & + real(pReal), dimension(plastic_dislotwin_totalNtrans(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & V_trans,tau_trans,fstress_trans,shear_trans,shearrate_trans,probrate_trans !* Shortened notation of = mappingConstitutive(1,ipc,ip,el) ph = mappingConstitutive(2,ipc,ip,el) instance = phase_plasticityInstance(ph) - ns = constitutive_dislotwin_totalNslip(instance) - nt = constitutive_dislotwin_totalNtwin(instance) - nr = constitutive_dislotwin_totalNtrans(instance) + ns = plastic_dislotwin_totalNslip(instance) + nt = plastic_dislotwin_totalNtwin(instance) + nr = plastic_dislotwin_totalNtrans(instance) !* Total twin volume fraction sumf = sum(plasticState(ph)%state((3_pInt*ns+1_pInt):(3_pInt*ns+nt), of)) ! safe for nt == 0 @@ -1737,7 +1737,7 @@ subroutine constitutive_dislotwin_dotState(Tstar_v,Temperature,ipc,ip,el) j = 0_pInt do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family - do i = 1_pInt,constitutive_dislotwin_Nslip(f,instance) ! process each (active) slip system in family + do i = 1_pInt,plastic_dislotwin_Nslip(f,instance) ! process each (active) slip system in family j = j+1_pInt !* Resolved shear stress on slip system @@ -1746,56 +1746,56 @@ subroutine constitutive_dislotwin_dotState(Tstar_v,Temperature,ipc,ip,el) if((abs(tau_slip(j))-plasticState(ph)%state(7*ns+4*nt+2*nr+j, of)) > tol_math_check) then !* Stress ratios stressRatio =((abs(tau_slip(j))- plasticState(ph)%state(7*ns+4*nt+2*nr+j, of))/& - (constitutive_dislotwin_SolidSolutionStrength(instance)+constitutive_dislotwin_tau_peierlsPerSlipFamily(f,instance))) - StressRatio_p = stressRatio** constitutive_dislotwin_pPerSlipFamily(f,instance) - StressRatio_pminus1 = stressRatio**(constitutive_dislotwin_pPerSlipFamily(f,instance)-1.0_pReal) + (plastic_dislotwin_SolidSolutionStrength(instance)+plastic_dislotwin_tau_peierlsPerSlipFamily(f,instance))) + StressRatio_p = stressRatio** plastic_dislotwin_pPerSlipFamily(f,instance) + StressRatio_pminus1 = stressRatio**(plastic_dislotwin_pPerSlipFamily(f,instance)-1.0_pReal) !* Boltzmann ratio - BoltzmannRatio = constitutive_dislotwin_QedgePerSlipSystem(j,instance)/(kB*Temperature) + BoltzmannRatio = plastic_dislotwin_QedgePerSlipSystem(j,instance)/(kB*Temperature) !* Initial shear rates DotGamma0 = & - plasticState(ph)%state(j, of)*constitutive_dislotwin_burgersPerSlipSystem(j,instance)*& - constitutive_dislotwin_v0PerSlipSystem(j,instance) + plasticState(ph)%state(j, of)*plastic_dislotwin_burgersPerSlipSystem(j,instance)*& + plastic_dislotwin_v0PerSlipSystem(j,instance) !* Shear rates due to slip gdot_slip(j) = DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)** & - constitutive_dislotwin_qPerSlipFamily(f,instance))*sign(1.0_pReal,tau_slip(j)) + plastic_dislotwin_qPerSlipFamily(f,instance))*sign(1.0_pReal,tau_slip(j)) endif !* Multiplication DotRhoMultiplication(j) = abs(gdot_slip(j))/& - (constitutive_dislotwin_burgersPerSlipSystem(j,instance)* & + (plastic_dislotwin_burgersPerSlipSystem(j,instance)* & plasticState(ph)%state(6*ns+3*nt+2*nr+j, of)) !* Dipole formation EdgeDipMinDistance = & - constitutive_dislotwin_CEdgeDipMinDistance(instance)*constitutive_dislotwin_burgersPerSlipSystem(j,instance) + plastic_dislotwin_CEdgeDipMinDistance(instance)*plastic_dislotwin_burgersPerSlipSystem(j,instance) if (tau_slip(j) == 0.0_pReal) then DotRhoDipFormation(j) = 0.0_pReal else EdgeDipDistance(j) = & - (3.0_pReal*lattice_mu(ph)*constitutive_dislotwin_burgersPerSlipSystem(j,instance))/& + (3.0_pReal*lattice_mu(ph)*plastic_dislotwin_burgersPerSlipSystem(j,instance))/& (16.0_pReal*pi*abs(tau_slip(j))) if (EdgeDipDistance(j)>plasticState(ph)%state(6*ns+3*nt+2*nr+j, of)) & EdgeDipDistance(j)=plasticState(ph)%state(6*ns+3*nt+2*nr+j, of) if (EdgeDipDistance(j) tol_math_check) then StressRatio_r = (plasticState(ph)%state(8*ns+4*nt+2*nr+j, of)/& - tau_twin(j))**constitutive_dislotwin_rPerTwinFamily(f,instance) + tau_twin(j))**plastic_dislotwin_rPerTwinFamily(f,instance) !* Shear rates and their derivatives due to twin select case(lattice_structure(ph)) case (LATTICE_fcc_ID) s1=lattice_fcc_twinNucleationSlipPair(1,index_myFamily+i) s2=lattice_fcc_twinNucleationSlipPair(2,index_myFamily+i) - if (tau_twin(j) < constitutive_dislotwin_tau_r(j,instance)) then + if (tau_twin(j) < plastic_dislotwin_tau_r(j,instance)) then Ndot0=(abs(gdot_slip(s1))*(plasticState(ph)%state(s2, of)+plasticState(ph)%state(ns+s2, of))+& abs(gdot_slip(s2))*(plasticState(ph)%state(s1, of)+plasticState(ph)%state(ns+s1, of)))/& - (constitutive_dislotwin_L0(instance)*constitutive_dislotwin_burgersPerSlipSystem(j,instance))*& - (1.0_pReal-exp(-constitutive_dislotwin_VcrossSlip(instance)/(kB*Temperature)*& - (constitutive_dislotwin_tau_r(j,instance)-tau_twin(j)))) + (plastic_dislotwin_L0(instance)*plastic_dislotwin_burgersPerSlipSystem(j,instance))*& + (1.0_pReal-exp(-plastic_dislotwin_VcrossSlip(instance)/(kB*Temperature)*& + (plastic_dislotwin_tau_r(j,instance)-tau_twin(j)))) else Ndot0=0.0_pReal end if case default - Ndot0=constitutive_dislotwin_Ndot0PerTwinSystem(j,instance) + Ndot0=plastic_dislotwin_Ndot0PerTwinSystem(j,instance) end select plasticState(ph)%dotState(3_pInt*ns+j, of) = & (1.0_pReal-sumf-sumftr)*& @@ -1870,12 +1870,12 @@ subroutine constitutive_dislotwin_dotState(Tstar_v,Temperature,ipc,ip,el) index_myFamily = sum(lattice_NtransSystem(1:f-1_pInt,ph)) ! at which index starts my family !* Projection of shear and shear rate on fault band (twin) systems - shear_trans = matmul(constitutive_dislotwin_projectionMatrix_Trans(:,:,instance), & + shear_trans = matmul(plastic_dislotwin_projectionMatrix_Trans(:,:,instance), & plasticState(ph)%state(2_pInt*ns+1_pInt:3_pInt*ns, of)) - shearrate_trans = matmul(constitutive_dislotwin_projectionMatrix_Trans(:,:,instance), & + shearrate_trans = matmul(plastic_dislotwin_projectionMatrix_Trans(:,:,instance), & plasticState(ph)%dotState(2_pInt*ns+1_pInt:3_pInt*ns, of)) - do i = 1_pInt,constitutive_dislotwin_Ntrans(f,instance) ! process each (active) trans system in family + do i = 1_pInt,plastic_dislotwin_Ntrans(f,instance) ! process each (active) trans system in family j = j+1_pInt !* Resolved shear stress on transformation system @@ -1886,12 +1886,12 @@ subroutine constitutive_dislotwin_dotState(Tstar_v,Temperature,ipc,ip,el) !* Driving force for stress-assisted martensite growth fstress_trans(j) = tau_trans(j) - & - constitutive_dislotwin_Cdwp(instance)*(2*V_trans(j) - 6*V_trans(j)**2 + 4*V_trans(j)**3) - & - 12*constitutive_dislotwin_deltaG(instance)*(V_trans(j)**2 - V_trans(j)**3) + plastic_dislotwin_Cdwp(instance)*(2*V_trans(j) - 6*V_trans(j)**2 + 4*V_trans(j)**3) - & + 12*plastic_dislotwin_deltaG(instance)*(V_trans(j)**2 - V_trans(j)**3) !* Dotstate for stress-assisted martensite volume fraction if (fstress_trans(j) > tol_math_check) then - plasticState(ph)%dotState(3_pInt*ns+2_pInt*nt+j, of) = constitutive_dislotwin_Cgro(instance)*& + plasticState(ph)%dotState(3_pInt*ns+2_pInt*nt+j, of) = plastic_dislotwin_Cgro(instance)*& (1.0_pReal - sumf - sumftr)*fstress_trans(j) else plasticState(ph)%dotState(3_pInt*ns+2_pInt*nt+j, of) = 0.0_pReal @@ -1915,7 +1915,7 @@ subroutine constitutive_dislotwin_dotState(Tstar_v,Temperature,ipc,ip,el) probrate_trans(j) = probrate_trans(j)/lattice_fcc_shearCritTrans**2 !* Dotstate for strain-induced martensite volume fraction - plasticState(ph)%dotState(3_pInt*ns+2_pInt*nt+nr+j, of) = constitutive_dislotwin_Cnuc(instance)*& + plasticState(ph)%dotState(3_pInt*ns+2_pInt*nt+nr+j, of) = plastic_dislotwin_Cnuc(instance)*& (1.0_pReal - sumf - sumftr)*probrate_trans(j) case default plasticState(ph)%dotState(3_pInt*ns+2_pInt*nt+nr+j, of) = 0.0_pReal @@ -1924,13 +1924,13 @@ subroutine constitutive_dislotwin_dotState(Tstar_v,Temperature,ipc,ip,el) enddo enddo -end subroutine constitutive_dislotwin_dotState +end subroutine plastic_dislotwin_dotState !-------------------------------------------------------------------------------------------------- !> @brief returns accumulated slip !-------------------------------------------------------------------------------------------------- -subroutine constitutive_dislotwin_getAccumulatedSlip(nSlip,accumulatedSlip,ipc, ip, el) +subroutine plastic_dislotwin_getAccumulatedSlip(nSlip,accumulatedSlip,ipc, ip, el) use lattice, only: & lattice_maxNslipFamily use material, only: & @@ -1958,25 +1958,25 @@ subroutine constitutive_dislotwin_getAccumulatedSlip(nSlip,accumulatedSlip,ipc, offset = mappingConstitutive(1,ipc,ip,el) phase = mappingConstitutive(2,ipc,ip,el) instance = phase_plasticityInstance(phase) - nSlip = constitutive_dislotwin_totalNslip(instance) + nSlip = plastic_dislotwin_totalNslip(instance) allocate(accumulatedSlip(nSlip)) offset_accshear_slip = 2_pInt*nSlip j = 0_pInt do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families - do i = 1_pInt,constitutive_dislotwin_Nslip(f,instance) ! process each (active) slip system in family + do i = 1_pInt,plastic_dislotwin_Nslip(f,instance) ! process each (active) slip system in family j = j+1_pInt accumulatedSlip(j) = plasticState(phase)%state(offset_accshear_slip+j,offset) enddo enddo -end subroutine constitutive_dislotwin_getAccumulatedSlip +end subroutine plastic_dislotwin_getAccumulatedSlip !-------------------------------------------------------------------------------------------------- !> @brief returns accumulated slip rate !-------------------------------------------------------------------------------------------------- -subroutine constitutive_dislotwin_getSlipRate(nSlip,slipRate,ipc, ip, el) +subroutine plastic_dislotwin_getSlipRate(nSlip,slipRate,ipc, ip, el) use lattice, only: & lattice_maxNslipFamily use material, only: & @@ -2004,25 +2004,25 @@ subroutine constitutive_dislotwin_getSlipRate(nSlip,slipRate,ipc, ip, el) offset = mappingConstitutive(1,ipc,ip,el) phase = mappingConstitutive(2,ipc,ip,el) instance = phase_plasticityInstance(phase) - nSlip = constitutive_dislotwin_totalNslip(instance) + nSlip = plastic_dislotwin_totalNslip(instance) allocate(slipRate(nSlip)) offset_accshear_slip = 2_pInt*nSlip j = 0_pInt do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families - do i = 1_pInt,constitutive_dislotwin_Nslip(f,instance) ! process each (active) slip system in family + do i = 1_pInt,plastic_dislotwin_Nslip(f,instance) ! process each (active) slip system in family j = j+1_pInt slipRate(j) = plasticState(phase)%dotState(offset_accshear_slip+j,offset) enddo enddo -end subroutine constitutive_dislotwin_getSlipRate +end subroutine plastic_dislotwin_getSlipRate !-------------------------------------------------------------------------------------------------- !> @brief return array of constitutive results !-------------------------------------------------------------------------------------------------- -function constitutive_dislotwin_postResults(Tstar_v,Temperature,ipc,ip,el) +function plastic_dislotwin_postResults(Tstar_v,Temperature,ipc,ip,el) use prec, only: & tol_math_check use math, only: & @@ -2058,8 +2058,8 @@ function constitutive_dislotwin_postResults(Tstar_v,Temperature,ipc,ip,el) ip, & !< integration point el !< element - real(pReal), dimension(constitutive_dislotwin_sizePostResults(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & - constitutive_dislotwin_postResults + real(pReal), dimension(plastic_dislotwin_sizePostResults(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & + plastic_dislotwin_postResults integer(pInt) :: & instance,& ns,nt,nr,& @@ -2068,7 +2068,7 @@ function constitutive_dislotwin_postResults(Tstar_v,Temperature,ipc,ip,el) ph, & of real(pReal) :: sumf,tau,StressRatio_p,StressRatio_pminus1,BoltzmannRatio,DotGamma0,StressRatio_r,Ndot0,dgdot_dtauslip,stressRatio - real(preal), dimension(constitutive_dislotwin_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & + real(preal), dimension(plastic_dislotwin_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & gdot_slip real(pReal), dimension(3,3) :: eigVectors real(pReal), dimension (3) :: eigValues @@ -2079,34 +2079,34 @@ function constitutive_dislotwin_postResults(Tstar_v,Temperature,ipc,ip,el) of = mappingConstitutive(1,ipc,ip,el) ph = mappingConstitutive(2,ipc,ip,el) instance = phase_plasticityInstance(ph) - ns = constitutive_dislotwin_totalNslip(instance) - nt = constitutive_dislotwin_totalNtwin(instance) - nr = constitutive_dislotwin_totalNtrans(instance) + ns = plastic_dislotwin_totalNslip(instance) + nt = plastic_dislotwin_totalNtwin(instance) + nr = plastic_dislotwin_totalNtrans(instance) !* Total twin volume fraction sumf = sum(plasticState(ph)%state((3_pInt*ns+1_pInt):(3_pInt*ns+nt), of)) ! safe for nt == 0 !* Required output c = 0_pInt - constitutive_dislotwin_postResults = 0.0_pReal + plastic_dislotwin_postResults = 0.0_pReal !* Spectral decomposition of stress call math_spectralDecompositionSym33(math_Mandel6to33(Tstar_v),eigValues,eigVectors, error) - do o = 1_pInt,constitutive_dislotwin_Noutput(instance) - select case(constitutive_dislotwin_outputID(o,instance)) + do o = 1_pInt,plastic_dislotwin_Noutput(instance) + select case(plastic_dislotwin_outputID(o,instance)) case (edge_density_ID) - constitutive_dislotwin_postResults(c+1_pInt:c+ns) = plasticState(ph)%state(1_pInt:ns, of) + plastic_dislotwin_postResults(c+1_pInt:c+ns) = plasticState(ph)%state(1_pInt:ns, of) c = c + ns case (dipole_density_ID) - constitutive_dislotwin_postResults(c+1_pInt:c+ns) = plasticState(ph)%state(ns+1_pInt:2_pInt*ns, of) + plastic_dislotwin_postResults(c+1_pInt:c+ns) = plasticState(ph)%state(ns+1_pInt:2_pInt*ns, of) c = c + ns case (shear_rate_slip_ID) j = 0_pInt do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family - do i = 1_pInt,constitutive_dislotwin_Nslip(f,instance) ! process each (active) slip system in family + do i = 1_pInt,plastic_dislotwin_Nslip(f,instance) ! process each (active) slip system in family j = j + 1_pInt !* Resolved shear stress on slip system @@ -2115,96 +2115,96 @@ function constitutive_dislotwin_postResults(Tstar_v,Temperature,ipc,ip,el) if((abs(tau)-plasticState(ph)%state(7*ns+4*nt+2*nr+j, of)) > tol_math_check) then !* Stress ratios stressRatio = ((abs(tau)-plasticState(ph)%state(7*ns+4*nt+2*nr+j, of))/& - (constitutive_dislotwin_SolidSolutionStrength(instance)+& - constitutive_dislotwin_tau_peierlsPerSlipFamily(f,instance))) - StressRatio_p = stressRatio** constitutive_dislotwin_pPerSlipFamily(f,instance) - StressRatio_pminus1 = stressRatio**(constitutive_dislotwin_pPerSlipFamily(f,instance)-1.0_pReal) + (plastic_dislotwin_SolidSolutionStrength(instance)+& + plastic_dislotwin_tau_peierlsPerSlipFamily(f,instance))) + StressRatio_p = stressRatio** plastic_dislotwin_pPerSlipFamily(f,instance) + StressRatio_pminus1 = stressRatio**(plastic_dislotwin_pPerSlipFamily(f,instance)-1.0_pReal) !* Boltzmann ratio - BoltzmannRatio = constitutive_dislotwin_QedgePerSlipSystem(j,instance)/(kB*Temperature) + BoltzmannRatio = plastic_dislotwin_QedgePerSlipSystem(j,instance)/(kB*Temperature) !* Initial shear rates DotGamma0 = & - plasticState(ph)%state(j, of)*constitutive_dislotwin_burgersPerSlipSystem(j,instance)* & - constitutive_dislotwin_v0PerSlipSystem(j,instance) + plasticState(ph)%state(j, of)*plastic_dislotwin_burgersPerSlipSystem(j,instance)* & + plastic_dislotwin_v0PerSlipSystem(j,instance) !* Shear rates due to slip - constitutive_dislotwin_postResults(c+j) = & + plastic_dislotwin_postResults(c+j) = & DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)**& - constitutive_dislotwin_qPerSlipFamily(f,instance))*sign(1.0_pReal,tau) + plastic_dislotwin_qPerSlipFamily(f,instance))*sign(1.0_pReal,tau) else - constitutive_dislotwin_postResults(c+j) = 0.0_pReal + plastic_dislotwin_postResults(c+j) = 0.0_pReal endif enddo ; enddo c = c + ns case (accumulated_shear_slip_ID) - constitutive_dislotwin_postResults(c+1_pInt:c+ns) = & + plastic_dislotwin_postResults(c+1_pInt:c+ns) = & plasticState(ph)%state((2_pInt*ns+1_pInt):(3_pInt*ns), of) c = c + ns case (mfp_slip_ID) - constitutive_dislotwin_postResults(c+1_pInt:c+ns) =& + plastic_dislotwin_postResults(c+1_pInt:c+ns) =& plasticState(ph)%state((6_pInt*ns+3_pInt*nt+2*nr+1_pInt):(7_pInt*ns+3_pInt*nt+2*nr), of) c = c + ns case (resolved_stress_slip_ID) j = 0_pInt do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family - do i = 1_pInt,constitutive_dislotwin_Nslip(f,instance) ! process each (active) slip system in family + do i = 1_pInt,plastic_dislotwin_Nslip(f,instance) ! process each (active) slip system in family j = j + 1_pInt - constitutive_dislotwin_postResults(c+j) =& + plastic_dislotwin_postResults(c+j) =& dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,ph)) enddo; enddo c = c + ns case (threshold_stress_slip_ID) - constitutive_dislotwin_postResults(c+1_pInt:c+ns) = & + plastic_dislotwin_postResults(c+1_pInt:c+ns) = & plasticState(ph)%state((7_pInt*ns+4_pInt*nt+2*nr+1_pInt):(8_pInt*ns+4_pInt*nt+2*nr), of) c = c + ns case (edge_dipole_distance_ID) j = 0_pInt do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family - do i = 1_pInt,constitutive_dislotwin_Nslip(f,instance) ! process each (active) slip system in family + do i = 1_pInt,plastic_dislotwin_Nslip(f,instance) ! process each (active) slip system in family j = j + 1_pInt - constitutive_dislotwin_postResults(c+j) = & - (3.0_pReal*lattice_mu(ph)*constitutive_dislotwin_burgersPerSlipSystem(j,instance))/& + plastic_dislotwin_postResults(c+j) = & + (3.0_pReal*lattice_mu(ph)*plastic_dislotwin_burgersPerSlipSystem(j,instance))/& (16.0_pReal*pi*abs(dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,ph)))) - constitutive_dislotwin_postResults(c+j)=min(constitutive_dislotwin_postResults(c+j),& + plastic_dislotwin_postResults(c+j)=min(plastic_dislotwin_postResults(c+j),& plasticState(ph)%state(6*ns+3*nt+2*nr+j, of)) - ! constitutive_dislotwin_postResults(c+j)=max(constitutive_dislotwin_postResults(c+j),& + ! plastic_dislotwin_postResults(c+j)=max(plastic_dislotwin_postResults(c+j),& ! plasticState(ph)%state(4*ns+2*nt+2*nr+j, of)) enddo; enddo c = c + ns case (resolved_stress_shearband_ID) do j = 1_pInt,6_pInt ! loop over all shearband families - constitutive_dislotwin_postResults(c+j) = dot_product(Tstar_v, & - constitutive_dislotwin_sbSv(1:6,j,ipc,ip,el)) + plastic_dislotwin_postResults(c+j) = dot_product(Tstar_v, & + plastic_dislotwin_sbSv(1:6,j,ipc,ip,el)) enddo c = c + 6_pInt case (shear_rate_shearband_ID) do j = 1_pInt,6_pInt ! loop over all shearbands !* Resolved shear stress on shearband system - tau = dot_product(Tstar_v,constitutive_dislotwin_sbSv(1:6,j,ipc,ip,el)) + tau = dot_product(Tstar_v,plastic_dislotwin_sbSv(1:6,j,ipc,ip,el)) !* Stress ratios if (abs(tau) < tol_math_check) then StressRatio_p = 0.0_pReal StressRatio_pminus1 = 0.0_pReal else - StressRatio_p = (abs(tau)/constitutive_dislotwin_sbResistance(instance))**& - constitutive_dislotwin_pShearBand(instance) - StressRatio_pminus1 = (abs(tau)/constitutive_dislotwin_sbResistance(instance))**& - (constitutive_dislotwin_pShearBand(instance)-1.0_pReal) + StressRatio_p = (abs(tau)/plastic_dislotwin_sbResistance(instance))**& + plastic_dislotwin_pShearBand(instance) + StressRatio_pminus1 = (abs(tau)/plastic_dislotwin_sbResistance(instance))**& + (plastic_dislotwin_pShearBand(instance)-1.0_pReal) endif !* Boltzmann ratio - BoltzmannRatio = constitutive_dislotwin_sbQedge(instance)/(kB*Temperature) + BoltzmannRatio = plastic_dislotwin_sbQedge(instance)/(kB*Temperature) !* Initial shear rates - DotGamma0 = constitutive_dislotwin_sbVelocity(instance) + DotGamma0 = plastic_dislotwin_sbVelocity(instance) ! Shear rate due to shear band - constitutive_dislotwin_postResults(c+j) = & - DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)**constitutive_dislotwin_qShearBand(instance))*& + plastic_dislotwin_postResults(c+j) = & + DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)**plastic_dislotwin_qShearBand(instance))*& sign(1.0_pReal,tau) enddo c = c + 6_pInt case (twin_fraction_ID) - constitutive_dislotwin_postResults(c+1_pInt:c+nt) = plasticState(ph)%state((3_pInt*ns+1_pInt):(3_pInt*ns+nt), of) + plastic_dislotwin_postResults(c+1_pInt:c+nt) = plasticState(ph)%state((3_pInt*ns+1_pInt):(3_pInt*ns+nt), of) c = c + nt case (shear_rate_twin_ID) if (nt > 0_pInt) then @@ -2212,7 +2212,7 @@ function constitutive_dislotwin_postResults(Tstar_v,Temperature,ipc,ip,el) j = 0_pInt do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family - do i = 1_pInt,constitutive_dislotwin_Nslip(f,instance) ! process each (active) slip system in family + do i = 1_pInt,plastic_dislotwin_Nslip(f,instance) ! process each (active) slip system in family j = j + 1_pInt !* Resolved shear stress on slip system @@ -2221,23 +2221,23 @@ function constitutive_dislotwin_postResults(Tstar_v,Temperature,ipc,ip,el) if((abs(tau)-plasticState(ph)%state(7*ns+4*nt+2*nr+j, of)) > tol_math_check) then !* Stress ratios StressRatio_p = ((abs(tau)-plasticState(ph)%state(7*ns+4*nt+2*nr+j, of))/& - (constitutive_dislotwin_SolidSolutionStrength(instance)+& - constitutive_dislotwin_tau_peierlsPerSlipFamily(f,instance)))& - **constitutive_dislotwin_pPerSlipFamily(f,instance) + (plastic_dislotwin_SolidSolutionStrength(instance)+& + plastic_dislotwin_tau_peierlsPerSlipFamily(f,instance)))& + **plastic_dislotwin_pPerSlipFamily(f,instance) StressRatio_pminus1 = ((abs(tau)-plasticState(ph)%state(7*ns+4*nt+2*nr+j, of))/& - (constitutive_dislotwin_SolidSolutionStrength(instance)+& - constitutive_dislotwin_tau_peierlsPerSlipFamily(f,instance)))& - **(constitutive_dislotwin_pPerSlipFamily(f,instance)-1.0_pReal) + (plastic_dislotwin_SolidSolutionStrength(instance)+& + plastic_dislotwin_tau_peierlsPerSlipFamily(f,instance)))& + **(plastic_dislotwin_pPerSlipFamily(f,instance)-1.0_pReal) !* Boltzmann ratio - BoltzmannRatio = constitutive_dislotwin_QedgePerSlipSystem(j,instance)/(kB*Temperature) + BoltzmannRatio = plastic_dislotwin_QedgePerSlipSystem(j,instance)/(kB*Temperature) !* Initial shear rates DotGamma0 = & - plasticState(ph)%state(j, of)*constitutive_dislotwin_burgersPerSlipSystem(j,instance)* & - constitutive_dislotwin_v0PerSlipSystem(j,instance) + plasticState(ph)%state(j, of)*plastic_dislotwin_burgersPerSlipSystem(j,instance)* & + plastic_dislotwin_v0PerSlipSystem(j,instance) !* Shear rates due to slip gdot_slip(j) = DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)**& - constitutive_dislotwin_qPerSlipFamily(f,instance))*sign(1.0_pReal,tau) + plastic_dislotwin_qPerSlipFamily(f,instance))*sign(1.0_pReal,tau) else gdot_slip(j) = 0.0_pReal endif @@ -2246,14 +2246,14 @@ function constitutive_dislotwin_postResults(Tstar_v,Temperature,ipc,ip,el) j = 0_pInt do f = 1_pInt,lattice_maxNtwinFamily ! loop over all twin families index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,ph)) ! at which index starts my family - do i = 1,constitutive_dislotwin_Ntwin(f,instance) ! process each (active) twin system in family + do i = 1,plastic_dislotwin_Ntwin(f,instance) ! process each (active) twin system in family j = j + 1_pInt !* Resolved shear stress on twin system tau = dot_product(Tstar_v,lattice_Stwin_v(:,index_myFamily+i,ph)) !* Stress ratios StressRatio_r = (plasticState(ph)%state(8_pInt*ns+4_pInt*nt+2*nr+j, of)/ & - tau)**constitutive_dislotwin_rPerTwinFamily(f,instance) + tau)**plastic_dislotwin_rPerTwinFamily(f,instance) !* Shear rates due to twin if ( tau > 0.0_pReal ) then @@ -2261,21 +2261,21 @@ function constitutive_dislotwin_postResults(Tstar_v,Temperature,ipc,ip,el) case (LATTICE_fcc_ID) s1=lattice_fcc_twinNucleationSlipPair(1,index_myFamily+i) s2=lattice_fcc_twinNucleationSlipPair(2,index_myFamily+i) - if (tau < constitutive_dislotwin_tau_r(j,instance)) then + if (tau < plastic_dislotwin_tau_r(j,instance)) then Ndot0=(abs(gdot_slip(s1))*(plasticState(ph)%state(s2, of)+plasticState(ph)%state(ns+s2, of))+& abs(gdot_slip(s2))*(plasticState(ph)%state(s1, of)+plasticState(ph)%state(ns+s1, of)))/& - (constitutive_dislotwin_L0(instance)*& - constitutive_dislotwin_burgersPerSlipSystem(j,instance))*& - (1.0_pReal-exp(-constitutive_dislotwin_VcrossSlip(instance)/(kB*Temperature)*& - (constitutive_dislotwin_tau_r(j,instance)-tau))) + (plastic_dislotwin_L0(instance)*& + plastic_dislotwin_burgersPerSlipSystem(j,instance))*& + (1.0_pReal-exp(-plastic_dislotwin_VcrossSlip(instance)/(kB*Temperature)*& + (plastic_dislotwin_tau_r(j,instance)-tau))) else Ndot0=0.0_pReal end if case default - Ndot0=constitutive_dislotwin_Ndot0PerTwinSystem(j,instance) + Ndot0=plastic_dislotwin_Ndot0PerTwinSystem(j,instance) end select - constitutive_dislotwin_postResults(c+j) = & - (constitutive_dislotwin_MaxTwinFraction(instance)-sumf)*lattice_shearTwin(index_myFamily+i,ph)*& + plastic_dislotwin_postResults(c+j) = & + (plastic_dislotwin_MaxTwinFraction(instance)-sumf)*lattice_shearTwin(index_myFamily+i,ph)*& plasticState(ph)%state(8_pInt*ns+5_pInt*nt+2*nr+j, of)*Ndot0*exp(-StressRatio_r) endif @@ -2283,11 +2283,11 @@ function constitutive_dislotwin_postResults(Tstar_v,Temperature,ipc,ip,el) endif c = c + nt case (accumulated_shear_twin_ID) - constitutive_dislotwin_postResults(c+1_pInt:c+nt) = plasticState(ph)% & + plastic_dislotwin_postResults(c+1_pInt:c+nt) = plasticState(ph)% & state((3_pInt*ns+nt+1_pInt) :(3_pInt*ns+2_pInt*nt), of) c = c + nt case (mfp_twin_ID) - constitutive_dislotwin_postResults(c+1_pInt:c+nt) = plasticState(ph)% & + plastic_dislotwin_postResults(c+1_pInt:c+nt) = plasticState(ph)% & state((7_pInt*ns+3_pInt*nt+2_pInt*nr+1_pInt):(7_pInt*ns+4_pInt*nt+2_pInt*nr), of) c = c + nt case (resolved_stress_twin_ID) @@ -2295,21 +2295,21 @@ function constitutive_dislotwin_postResults(Tstar_v,Temperature,ipc,ip,el) j = 0_pInt do f = 1_pInt,lattice_maxNtwinFamily ! loop over all slip families index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,ph)) ! at which index starts my family - do i = 1_pInt,constitutive_dislotwin_Ntwin(f,instance) ! process each (active) slip system in family + do i = 1_pInt,plastic_dislotwin_Ntwin(f,instance) ! process each (active) slip system in family j = j + 1_pInt - constitutive_dislotwin_postResults(c+j) = dot_product(Tstar_v,lattice_Stwin_v(:,index_myFamily+i,ph)) + plastic_dislotwin_postResults(c+j) = dot_product(Tstar_v,lattice_Stwin_v(:,index_myFamily+i,ph)) enddo; enddo endif c = c + nt case (threshold_stress_twin_ID) - constitutive_dislotwin_postResults(c+1_pInt:c+nt) = plasticState(ph)% & + plastic_dislotwin_postResults(c+1_pInt:c+nt) = plasticState(ph)% & state((8_pInt*ns+4_pInt*nt+2_pInt*nr+1_pInt):(8_pInt*ns+5_pInt*nt+2_pInt*nr), of) c = c + nt case (stress_exponent_ID) j = 0_pInt do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family - do i = 1_pInt,constitutive_dislotwin_Nslip(f,instance) ! process each (active) slip system in family + do i = 1_pInt,plastic_dislotwin_Nslip(f,instance) ! process each (active) slip system in family j = j + 1_pInt !* Resolved shear stress on slip system @@ -2317,31 +2317,31 @@ function constitutive_dislotwin_postResults(Tstar_v,Temperature,ipc,ip,el) if((abs(tau)-plasticState(ph)%state(7*ns+4*nt+2*nr+j, of)) > tol_math_check) then !* Stress ratios StressRatio_p = ((abs(tau)-plasticState(ph)%state(7*ns+4*nt+2*nr+j, of))/& - (constitutive_dislotwin_SolidSolutionStrength(instance)+& - constitutive_dislotwin_tau_peierlsPerSlipFamily(f,instance)))& - **constitutive_dislotwin_pPerSlipFamily(f,instance) + (plastic_dislotwin_SolidSolutionStrength(instance)+& + plastic_dislotwin_tau_peierlsPerSlipFamily(f,instance)))& + **plastic_dislotwin_pPerSlipFamily(f,instance) StressRatio_pminus1 = ((abs(tau)-plasticState(ph)%state(7*ns+4*nt+2*nr+j, of))/& - (constitutive_dislotwin_SolidSolutionStrength(instance)+& - constitutive_dislotwin_tau_peierlsPerSlipFamily(f,instance)))& - **(constitutive_dislotwin_pPerSlipFamily(f,instance)-1.0_pReal) + (plastic_dislotwin_SolidSolutionStrength(instance)+& + plastic_dislotwin_tau_peierlsPerSlipFamily(f,instance)))& + **(plastic_dislotwin_pPerSlipFamily(f,instance)-1.0_pReal) !* Boltzmann ratio - BoltzmannRatio = constitutive_dislotwin_QedgePerSlipSystem(j,instance)/(kB*Temperature) + BoltzmannRatio = plastic_dislotwin_QedgePerSlipSystem(j,instance)/(kB*Temperature) !* Initial shear rates DotGamma0 = & - plasticState(ph)%state(j, of)*constitutive_dislotwin_burgersPerSlipSystem(j,instance)* & - constitutive_dislotwin_v0PerSlipSystem(j,instance) + plasticState(ph)%state(j, of)*plastic_dislotwin_burgersPerSlipSystem(j,instance)* & + plastic_dislotwin_v0PerSlipSystem(j,instance) !* Shear rates due to slip gdot_slip(j) = DotGamma0*exp(-BoltzmannRatio*(1_pInt-StressRatio_p)**& - constitutive_dislotwin_qPerSlipFamily(f,instance))*sign(1.0_pReal,tau) + plastic_dislotwin_qPerSlipFamily(f,instance))*sign(1.0_pReal,tau) !* Derivatives of shear rates dgdot_dtauslip = & - abs(gdot_slip(j))*BoltzmannRatio*constitutive_dislotwin_pPerSlipFamily(f,instance)& - *constitutive_dislotwin_qPerSlipFamily(f,instance)/& - (constitutive_dislotwin_SolidSolutionStrength(instance)+& - constitutive_dislotwin_tau_peierlsPerSlipFamily(f,instance))*& - StressRatio_pminus1*(1-StressRatio_p)**(constitutive_dislotwin_qPerSlipFamily(f,instance)-1.0_pReal) + abs(gdot_slip(j))*BoltzmannRatio*plastic_dislotwin_pPerSlipFamily(f,instance)& + *plastic_dislotwin_qPerSlipFamily(f,instance)/& + (plastic_dislotwin_SolidSolutionStrength(instance)+& + plastic_dislotwin_tau_peierlsPerSlipFamily(f,instance))*& + StressRatio_pminus1*(1-StressRatio_p)**(plastic_dislotwin_qPerSlipFamily(f,instance)-1.0_pReal) else gdot_slip(j) = 0.0_pReal @@ -2350,34 +2350,34 @@ function constitutive_dislotwin_postResults(Tstar_v,Temperature,ipc,ip,el) !* Stress exponent if (gdot_slip(j)==0.0_pReal) then - constitutive_dislotwin_postResults(c+j) = 0.0_pReal + plastic_dislotwin_postResults(c+j) = 0.0_pReal else - constitutive_dislotwin_postResults(c+j) = (tau/gdot_slip(j))*dgdot_dtauslip + plastic_dislotwin_postResults(c+j) = (tau/gdot_slip(j))*dgdot_dtauslip endif enddo ; enddo c = c + ns case (sb_eigenvalues_ID) forall (j = 1_pInt:3_pInt) & - constitutive_dislotwin_postResults(c+j) = eigValues(j) + plastic_dislotwin_postResults(c+j) = eigValues(j) c = c + 3_pInt case (sb_eigenvectors_ID) - constitutive_dislotwin_postResults(c+1_pInt:c+9_pInt) = reshape(eigVectors,[9]) + plastic_dislotwin_postResults(c+1_pInt:c+9_pInt) = reshape(eigVectors,[9]) c = c + 9_pInt case (stress_trans_fraction_ID) - constitutive_dislotwin_postResults(c+1_pInt:c+nr) = & + plastic_dislotwin_postResults(c+1_pInt:c+nr) = & plasticState(ph)%state((3_pInt*ns+2_pInt*nt+1_pInt):(3_pInt*ns+2_pInt*nt+nr), of) c = c + nr case (strain_trans_fraction_ID) - constitutive_dislotwin_postResults(c+1_pInt:c+nr) = & + plastic_dislotwin_postResults(c+1_pInt:c+nr) = & plasticState(ph)%state((3_pInt*ns+2_pInt*nt+nr+1_pInt):(3_pInt*ns+2_pInt*nt+2_pInt*nr), of) c = c + nr case (trans_fraction_ID) - constitutive_dislotwin_postResults(c+1_pInt:c+nr) = & + plastic_dislotwin_postResults(c+1_pInt:c+nr) = & plasticState(ph)%state((3_pInt*ns+2_pInt*nt+1_pInt):(3_pInt*ns+2_pInt*nt+nr), of) + & plasticState(ph)%state((3_pInt*ns+2_pInt*nt+nr+1_pInt):(3_pInt*ns+2_pInt*nt+2_pInt*nr), of) c = c + nr end select enddo -end function constitutive_dislotwin_postResults +end function plastic_dislotwin_postResults -end module constitutive_dislotwin +end module plastic_dislotwin diff --git a/code/constitutive_j2.f90 b/code/plastic_j2.f90 similarity index 67% rename from code/constitutive_j2.f90 rename to code/plastic_j2.f90 index 4e3633d33..bb938cff6 100644 --- a/code/constitutive_j2.f90 +++ b/code/plastic_j2.f90 @@ -8,7 +8,7 @@ !! resolving the stress on the slip systems. Will give the response of phenopowerlaw for an !! untextured polycrystal !-------------------------------------------------------------------------------------------------- -module constitutive_j2 +module plastic_j2 #ifdef HDF use hdf5, only: & HID_T @@ -21,35 +21,35 @@ module constitutive_j2 implicit none private integer(pInt), dimension(:), allocatable, public, protected :: & - constitutive_j2_sizePostResults !< cumulative size of post results + plastic_j2_sizePostResults !< cumulative size of post results integer(pInt), dimension(:,:), allocatable, target, public :: & - constitutive_j2_sizePostResult !< size of each post result output + plastic_j2_sizePostResult !< size of each post result output character(len=64), dimension(:,:), allocatable, target, public :: & - constitutive_j2_output !< name of each post result output + plastic_j2_output !< name of each post result output integer(pInt), dimension(:), allocatable, target, public :: & - constitutive_j2_Noutput !< number of outputs per instance + plastic_j2_Noutput !< number of outputs per instance real(pReal), dimension(:), allocatable, private :: & - constitutive_j2_fTaylor, & !< Taylor factor - constitutive_j2_tau0, & !< initial plastic stress - constitutive_j2_gdot0, & !< reference velocity - constitutive_j2_n, & !< Visco-plastic parameter + plastic_j2_fTaylor, & !< Taylor factor + plastic_j2_tau0, & !< initial plastic stress + plastic_j2_gdot0, & !< reference velocity + plastic_j2_n, & !< Visco-plastic parameter !-------------------------------------------------------------------------------------------------- ! h0 as function of h0 = A + B log (gammadot) - constitutive_j2_h0, & - constitutive_j2_h0_slopeLnRate, & - constitutive_j2_tausat, & !< final plastic stress - constitutive_j2_a, & - constitutive_j2_aTolResistance, & - constitutive_j2_aTolShear, & + plastic_j2_h0, & + plastic_j2_h0_slopeLnRate, & + plastic_j2_tausat, & !< final plastic stress + plastic_j2_a, & + plastic_j2_aTolResistance, & + plastic_j2_aTolShear, & !-------------------------------------------------------------------------------------------------- ! tausat += (asinh((gammadot / SinhFitA)**(1 / SinhFitD)))**(1 / SinhFitC) / (SinhFitB * (gammadot / gammadot0)**(1/n)) - constitutive_j2_tausat_SinhFitA, & !< fitting parameter for normalized strain rate vs. stress function - constitutive_j2_tausat_SinhFitB, & !< fitting parameter for normalized strain rate vs. stress function - constitutive_j2_tausat_SinhFitC, & !< fitting parameter for normalized strain rate vs. stress function - constitutive_j2_tausat_SinhFitD !< fitting parameter for normalized strain rate vs. stress function + plastic_j2_tausat_SinhFitA, & !< fitting parameter for normalized strain rate vs. stress function + plastic_j2_tausat_SinhFitB, & !< fitting parameter for normalized strain rate vs. stress function + plastic_j2_tausat_SinhFitC, & !< fitting parameter for normalized strain rate vs. stress function + plastic_j2_tausat_SinhFitD !< fitting parameter for normalized strain rate vs. stress function enum, bind(c) enumerator :: undefined_ID, & @@ -57,27 +57,27 @@ module constitutive_j2 strainrate_ID end enum integer(kind(undefined_ID)), dimension(:,:), allocatable, private :: & - constitutive_j2_outputID !< ID of each post result output + plastic_j2_outputID !< ID of each post result output #ifdef HDF - type constitutive_j2_tOutput + type plastic_j2_tOutput real(pReal), dimension(:), allocatable, private :: & flowstress, & strainrate logical :: flowstressActive = .false., strainrateActive = .false. ! if we can write the output block wise, this is not needed anymore because we can do an if(allocated(xxx)) - end type constitutive_j2_tOutput - type(constitutive_j2_tOutput), allocatable, dimension(:) :: constitutive_j2_Output2 + end type plastic_j2_tOutput + type(plastic_j2_tOutput), allocatable, dimension(:) :: plastic_j2_Output2 integer(HID_T), allocatable, dimension(:) :: outID #endif public :: & - constitutive_j2_init, & - constitutive_j2_LpAndItsTangent, & - constitutive_j2_dotState, & - constitutive_J2_getAccumulatedSlip, & - constitutive_j2_postResults + plastic_j2_init, & + plastic_j2_LpAndItsTangent, & + plastic_j2_dotState, & + plastic_j2_getAccumulatedSlip, & + plastic_j2_postResults contains @@ -86,7 +86,7 @@ contains !> @brief module initialization !> @details reads in material parameters, allocates arrays, and does sanity checks !-------------------------------------------------------------------------------------------------- -subroutine constitutive_j2_init(fileUnit) +subroutine plastic_j2_init(fileUnit) use, intrinsic :: iso_fortran_env ! to get compiler_version and compiler_options (at least for gfortran 4.6 at the moment) #ifdef HDF use hdf5 @@ -169,30 +169,30 @@ subroutine constitutive_j2_init(fileUnit) write(6,'(a16,1x,i5,/)') '# instances:',maxNinstance #ifdef HDF - allocate(constitutive_j2_Output2(maxNinstance)) + allocate(plastic_j2_Output2(maxNinstance)) allocate(outID(maxNinstance)) #endif - allocate(constitutive_j2_sizePostResults(maxNinstance), source=0_pInt) - allocate(constitutive_j2_sizePostResult(maxval(phase_Noutput), maxNinstance),source=0_pInt) - allocate(constitutive_j2_output(maxval(phase_Noutput), maxNinstance)) - constitutive_j2_output = '' - allocate(constitutive_j2_outputID(maxval(phase_Noutput),maxNinstance), source=undefined_ID) - allocate(constitutive_j2_Noutput(maxNinstance), source=0_pInt) - allocate(constitutive_j2_fTaylor(maxNinstance), source=0.0_pReal) - allocate(constitutive_j2_tau0(maxNinstance), source=0.0_pReal) - allocate(constitutive_j2_gdot0(maxNinstance), source=0.0_pReal) - allocate(constitutive_j2_n(maxNinstance), source=0.0_pReal) - allocate(constitutive_j2_h0(maxNinstance), source=0.0_pReal) - allocate(constitutive_j2_h0_slopeLnRate(maxNinstance), source=0.0_pReal) - allocate(constitutive_j2_tausat(maxNinstance), source=0.0_pReal) - allocate(constitutive_j2_a(maxNinstance), source=0.0_pReal) - allocate(constitutive_j2_aTolResistance(maxNinstance), source=0.0_pReal) - allocate(constitutive_j2_aTolShear (maxNinstance), source=0.0_pReal) - allocate(constitutive_j2_tausat_SinhFitA(maxNinstance), source=0.0_pReal) - allocate(constitutive_j2_tausat_SinhFitB(maxNinstance), source=0.0_pReal) - allocate(constitutive_j2_tausat_SinhFitC(maxNinstance), source=0.0_pReal) - allocate(constitutive_j2_tausat_SinhFitD(maxNinstance), source=0.0_pReal) + allocate(plastic_j2_sizePostResults(maxNinstance), source=0_pInt) + allocate(plastic_j2_sizePostResult(maxval(phase_Noutput), maxNinstance),source=0_pInt) + allocate(plastic_j2_output(maxval(phase_Noutput), maxNinstance)) + plastic_j2_output = '' + allocate(plastic_j2_outputID(maxval(phase_Noutput),maxNinstance), source=undefined_ID) + allocate(plastic_j2_Noutput(maxNinstance), source=0_pInt) + allocate(plastic_j2_fTaylor(maxNinstance), source=0.0_pReal) + allocate(plastic_j2_tau0(maxNinstance), source=0.0_pReal) + allocate(plastic_j2_gdot0(maxNinstance), source=0.0_pReal) + allocate(plastic_j2_n(maxNinstance), source=0.0_pReal) + allocate(plastic_j2_h0(maxNinstance), source=0.0_pReal) + allocate(plastic_j2_h0_slopeLnRate(maxNinstance), source=0.0_pReal) + allocate(plastic_j2_tausat(maxNinstance), source=0.0_pReal) + allocate(plastic_j2_a(maxNinstance), source=0.0_pReal) + allocate(plastic_j2_aTolResistance(maxNinstance), source=0.0_pReal) + allocate(plastic_j2_aTolShear (maxNinstance), source=0.0_pReal) + allocate(plastic_j2_tausat_SinhFitA(maxNinstance), source=0.0_pReal) + allocate(plastic_j2_tausat_SinhFitB(maxNinstance), source=0.0_pReal) + allocate(plastic_j2_tausat_SinhFitC(maxNinstance), source=0.0_pReal) + allocate(plastic_j2_tausat_SinhFitD(maxNinstance), source=0.0_pReal) rewind(fileUnit) phase = 0_pInt @@ -226,70 +226,70 @@ subroutine constitutive_j2_init(fileUnit) case ('(output)') select case(IO_lc(IO_stringValue(line,positions,2_pInt))) case ('flowstress') - constitutive_j2_Noutput(instance) = constitutive_j2_Noutput(instance) + 1_pInt - constitutive_j2_outputID(constitutive_j2_Noutput(instance),instance) = flowstress_ID - constitutive_j2_output(constitutive_j2_Noutput(instance),instance) = & + plastic_j2_Noutput(instance) = plastic_j2_Noutput(instance) + 1_pInt + plastic_j2_outputID(plastic_j2_Noutput(instance),instance) = flowstress_ID + plastic_j2_output(plastic_j2_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) #ifdef HDF call HDF5_addScalarDataset(outID(instance),myConstituents,'flowstress','MPa') - allocate(constitutive_j2_Output2(instance)%flowstress(myConstituents)) - constitutive_j2_Output2(instance)%flowstressActive = .true. + allocate(plastic_j2_Output2(instance)%flowstress(myConstituents)) + plastic_j2_Output2(instance)%flowstressActive = .true. #endif case ('strainrate') - constitutive_j2_Noutput(instance) = constitutive_j2_Noutput(instance) + 1_pInt - constitutive_j2_outputID(constitutive_j2_Noutput(instance),instance) = strainrate_ID - constitutive_j2_output(constitutive_j2_Noutput(instance),instance) = & + plastic_j2_Noutput(instance) = plastic_j2_Noutput(instance) + 1_pInt + plastic_j2_outputID(plastic_j2_Noutput(instance),instance) = strainrate_ID + plastic_j2_output(plastic_j2_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) #ifdef HDF call HDF5_addScalarDataset(outID(instance),myConstituents,'strainrate','1/s') - allocate(constitutive_j2_Output2(instance)%strainrate(myConstituents)) - constitutive_j2_Output2(instance)%strainrateActive = .true. + allocate(plastic_j2_Output2(instance)%strainrate(myConstituents)) + plastic_j2_Output2(instance)%strainrateActive = .true. #endif case default end select case ('tau0') - constitutive_j2_tau0(instance) = IO_floatValue(line,positions,2_pInt) - if (constitutive_j2_tau0(instance) < 0.0_pReal) & + plastic_j2_tau0(instance) = IO_floatValue(line,positions,2_pInt) + if (plastic_j2_tau0(instance) < 0.0_pReal) & call IO_error(211_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_J2_label//')') case ('gdot0') - constitutive_j2_gdot0(instance) = IO_floatValue(line,positions,2_pInt) - if (constitutive_j2_gdot0(instance) <= 0.0_pReal) & + plastic_j2_gdot0(instance) = IO_floatValue(line,positions,2_pInt) + if (plastic_j2_gdot0(instance) <= 0.0_pReal) & call IO_error(211_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_J2_label//')') case ('n') - constitutive_j2_n(instance) = IO_floatValue(line,positions,2_pInt) - if (constitutive_j2_n(instance) <= 0.0_pReal) & + plastic_j2_n(instance) = IO_floatValue(line,positions,2_pInt) + if (plastic_j2_n(instance) <= 0.0_pReal) & call IO_error(211_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_J2_label//')') case ('h0') - constitutive_j2_h0(instance) = IO_floatValue(line,positions,2_pInt) + plastic_j2_h0(instance) = IO_floatValue(line,positions,2_pInt) case ('h0_slope','slopelnrate') - constitutive_j2_h0_slopeLnRate(instance) = IO_floatValue(line,positions,2_pInt) + plastic_j2_h0_slopeLnRate(instance) = IO_floatValue(line,positions,2_pInt) case ('tausat') - constitutive_j2_tausat(instance) = IO_floatValue(line,positions,2_pInt) - if (constitutive_j2_tausat(instance) <= 0.0_pReal) & + plastic_j2_tausat(instance) = IO_floatValue(line,positions,2_pInt) + if (plastic_j2_tausat(instance) <= 0.0_pReal) & call IO_error(211_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_J2_label//')') case ('tausat_sinhfita') - constitutive_j2_tausat_SinhFitA(instance) = IO_floatValue(line,positions,2_pInt) + plastic_j2_tausat_SinhFitA(instance) = IO_floatValue(line,positions,2_pInt) case ('tausat_sinhfitb') - constitutive_j2_tausat_SinhFitB(instance) = IO_floatValue(line,positions,2_pInt) + plastic_j2_tausat_SinhFitB(instance) = IO_floatValue(line,positions,2_pInt) case ('tausat_sinhfitc') - constitutive_j2_tausat_SinhFitC(instance) = IO_floatValue(line,positions,2_pInt) + plastic_j2_tausat_SinhFitC(instance) = IO_floatValue(line,positions,2_pInt) case ('tausat_sinhfitd') - constitutive_j2_tausat_SinhFitD(instance) = IO_floatValue(line,positions,2_pInt) + plastic_j2_tausat_SinhFitD(instance) = IO_floatValue(line,positions,2_pInt) case ('a', 'w0') - constitutive_j2_a(instance) = IO_floatValue(line,positions,2_pInt) - if (constitutive_j2_a(instance) <= 0.0_pReal) & + plastic_j2_a(instance) = IO_floatValue(line,positions,2_pInt) + if (plastic_j2_a(instance) <= 0.0_pReal) & call IO_error(211_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_J2_label//')') case ('taylorfactor') - constitutive_j2_fTaylor(instance) = IO_floatValue(line,positions,2_pInt) - if (constitutive_j2_fTaylor(instance) <= 0.0_pReal) & + plastic_j2_fTaylor(instance) = IO_floatValue(line,positions,2_pInt) + if (plastic_j2_fTaylor(instance) <= 0.0_pReal) & call IO_error(211_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_J2_label//')') case ('atol_resistance') - constitutive_j2_aTolResistance(instance) = IO_floatValue(line,positions,2_pInt) - if (constitutive_j2_aTolResistance(instance) <= 0.0_pReal) & + plastic_j2_aTolResistance(instance) = IO_floatValue(line,positions,2_pInt) + if (plastic_j2_aTolResistance(instance) <= 0.0_pReal) & call IO_error(211_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_J2_label//')') case ('atol_shear') - constitutive_j2_aTolShear(instance) = IO_floatValue(line,positions,2_pInt) + plastic_j2_aTolShear(instance) = IO_floatValue(line,positions,2_pInt) case default @@ -303,22 +303,22 @@ subroutine constitutive_j2_init(fileUnit) instance = phase_plasticityInstance(phase) !-------------------------------------------------------------------------------------------------- ! sanity checks - if (constitutive_j2_aTolShear(instance) <= 0.0_pReal) & - constitutive_j2_aTolShear(instance) = 1.0e-6_pReal ! default absolute tolerance 1e-6 + if (plastic_j2_aTolShear(instance) <= 0.0_pReal) & + plastic_j2_aTolShear(instance) = 1.0e-6_pReal ! default absolute tolerance 1e-6 !-------------------------------------------------------------------------------------------------- ! Determine size of postResults array - outputsLoop: do o = 1_pInt,constitutive_j2_Noutput(instance) - select case(constitutive_j2_outputID(o,instance)) + outputsLoop: do o = 1_pInt,plastic_j2_Noutput(instance) + select case(plastic_j2_outputID(o,instance)) case(flowstress_ID,strainrate_ID) mySize = 1_pInt case default end select outputFound: if (mySize > 0_pInt) then - constitutive_j2_sizePostResult(o,instance) = mySize - constitutive_j2_sizePostResults(instance) = & - constitutive_j2_sizePostResults(instance) + mySize + plastic_j2_sizePostResult(o,instance) = mySize + plastic_j2_sizePostResults(instance) = & + plastic_j2_sizePostResults(instance) + mySize endif outputFound enddo outputsLoop @@ -328,12 +328,12 @@ subroutine constitutive_j2_init(fileUnit) sizeDotState = sizeState plasticState(phase)%sizeState = sizeState plasticState(phase)%sizeDotState = sizeDotState - plasticState(phase)%sizePostResults = constitutive_j2_sizePostResults(instance) + plasticState(phase)%sizePostResults = plastic_j2_sizePostResults(instance) allocate(plasticState(phase)%aTolState ( sizeState)) - plasticState(phase)%aTolState(1) = constitutive_j2_aTolResistance(instance) - plasticState(phase)%aTolState(2) = constitutive_j2_aTolShear(instance) + plasticState(phase)%aTolState(1) = plastic_j2_aTolResistance(instance) + plasticState(phase)%aTolState(2) = plastic_j2_aTolShear(instance) allocate(plasticState(phase)%state0 ( sizeState,NofMyPhase)) - plasticState(phase)%state0(1,1:NofMyPhase) = constitutive_j2_tau0(instance) + plasticState(phase)%state0(1,1:NofMyPhase) = plastic_j2_tau0(instance) plasticState(phase)%state0(2,1:NofMyPhase) = 0.0_pReal allocate(plasticState(phase)%partionedState0 ( sizeState,NofMyPhase),source=0.0_pReal) allocate(plasticState(phase)%subState0 ( sizeState,NofMyPhase),source=0.0_pReal) @@ -353,13 +353,13 @@ subroutine constitutive_j2_init(fileUnit) endif myPhase enddo initializeInstances -end subroutine constitutive_j2_init +end subroutine plastic_j2_init !-------------------------------------------------------------------------------------------------- !> @brief calculates plastic velocity gradient and its tangent !-------------------------------------------------------------------------------------------------- -subroutine constitutive_j2_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,slipDamage,ipc,ip,el) +subroutine plastic_j2_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,slipDamage,ipc,ip,el) use math, only: & math_mul6x6, & math_Mandel6to33, & @@ -412,32 +412,32 @@ subroutine constitutive_j2_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,slipDamage,ip Lp = 0.0_pReal dLp_dTstar99 = 0.0_pReal else - gamma_dot = constitutive_j2_gdot0(instance) & - * (sqrt(1.5_pReal) * norm_Tstar_dev / (slipDamage(1)*constitutive_j2_fTaylor(instance) * & + gamma_dot = plastic_j2_gdot0(instance) & + * (sqrt(1.5_pReal) * norm_Tstar_dev / (slipDamage(1)*plastic_j2_fTaylor(instance) * & plasticState(mappingConstitutive(2,ipc,ip,el))%state(1,mappingConstitutive(1,ipc,ip,el)))) & - **constitutive_j2_n(instance) + **plastic_j2_n(instance) - Lp = Tstar_dev_33/norm_Tstar_dev * gamma_dot/constitutive_j2_fTaylor(instance) + Lp = Tstar_dev_33/norm_Tstar_dev * gamma_dot/plastic_j2_fTaylor(instance) !-------------------------------------------------------------------------------------------------- ! Calculation of the tangent of Lp forall (k=1_pInt:3_pInt,l=1_pInt:3_pInt,m=1_pInt:3_pInt,n=1_pInt:3_pInt) & - dLp_dTstar_3333(k,l,m,n) = (constitutive_j2_n(instance)-1.0_pReal) * & + dLp_dTstar_3333(k,l,m,n) = (plastic_j2_n(instance)-1.0_pReal) * & Tstar_dev_33(k,l)*Tstar_dev_33(m,n) / squarenorm_Tstar_dev forall (k=1_pInt:3_pInt,l=1_pInt:3_pInt) & dLp_dTstar_3333(k,l,k,l) = dLp_dTstar_3333(k,l,k,l) + 1.0_pReal forall (k=1_pInt:3_pInt,m=1_pInt:3_pInt) & dLp_dTstar_3333(k,k,m,m) = dLp_dTstar_3333(k,k,m,m) - 1.0_pReal/3.0_pReal - dLp_dTstar99 = math_Plain3333to99(gamma_dot / constitutive_j2_fTaylor(instance) * & + dLp_dTstar99 = math_Plain3333to99(gamma_dot / plastic_j2_fTaylor(instance) * & dLp_dTstar_3333 / norm_Tstar_dev) end if -end subroutine constitutive_j2_LpAndItsTangent +end subroutine plastic_j2_LpAndItsTangent !-------------------------------------------------------------------------------------------------- !> @brief calculates the rate of change of microstructure !-------------------------------------------------------------------------------------------------- -subroutine constitutive_j2_dotState(Tstar_v,ipc,ip,el) +subroutine plastic_j2_dotState(Tstar_v,ipc,ip,el) use math, only: & math_mul6x6 use mesh, only: & @@ -481,31 +481,31 @@ subroutine constitutive_j2_dotState(Tstar_v,ipc,ip,el) !-------------------------------------------------------------------------------------------------- ! strain rate - gamma_dot = constitutive_j2_gdot0(instance) * ( sqrt(1.5_pReal) * norm_Tstar_dev & + gamma_dot = plastic_j2_gdot0(instance) * ( sqrt(1.5_pReal) * norm_Tstar_dev & / &!----------------------------------------------------------------------------------- - (constitutive_j2_fTaylor(instance)*plasticState(ph)%state(1,of)) )**constitutive_j2_n(instance) + (plastic_j2_fTaylor(instance)*plasticState(ph)%state(1,of)) )**plastic_j2_n(instance) !-------------------------------------------------------------------------------------------------- ! hardening coefficient if (abs(gamma_dot) > 1e-12_pReal) then - if (constitutive_j2_tausat_SinhFitA(instance) == 0.0_pReal) then - saturation = constitutive_j2_tausat(instance) + if (plastic_j2_tausat_SinhFitA(instance) == 0.0_pReal) then + saturation = plastic_j2_tausat(instance) else - saturation = ( constitutive_j2_tausat(instance) & - + ( log( ( gamma_dot / constitutive_j2_tausat_SinhFitA(instance)& - )**(1.0_pReal / constitutive_j2_tausat_SinhFitD(instance))& - + sqrt( ( gamma_dot / constitutive_j2_tausat_SinhFitA(instance) & - )**(2.0_pReal / constitutive_j2_tausat_SinhFitD(instance)) & + saturation = ( plastic_j2_tausat(instance) & + + ( log( ( gamma_dot / plastic_j2_tausat_SinhFitA(instance)& + )**(1.0_pReal / plastic_j2_tausat_SinhFitD(instance))& + + sqrt( ( gamma_dot / plastic_j2_tausat_SinhFitA(instance) & + )**(2.0_pReal / plastic_j2_tausat_SinhFitD(instance)) & + 1.0_pReal ) & ) & ! asinh(K) = ln(K + sqrt(K^2 +1)) - )**(1.0_pReal / constitutive_j2_tausat_SinhFitC(instance)) & - / ( constitutive_j2_tausat_SinhFitB(instance) & - * (gamma_dot / constitutive_j2_gdot0(instance))**(1.0_pReal / constitutive_j2_n(instance)) & + )**(1.0_pReal / plastic_j2_tausat_SinhFitC(instance)) & + / ( plastic_j2_tausat_SinhFitB(instance) & + * (gamma_dot / plastic_j2_gdot0(instance))**(1.0_pReal / plastic_j2_n(instance)) & ) & ) endif - hardening = ( constitutive_j2_h0(instance) + constitutive_j2_h0_slopeLnRate(instance) * log(gamma_dot) ) & - * abs( 1.0_pReal - plasticState(ph)%state(1,of)/saturation )**constitutive_j2_a(instance) & + hardening = ( plastic_j2_h0(instance) + plastic_j2_h0_slopeLnRate(instance) * log(gamma_dot) ) & + * abs( 1.0_pReal - plasticState(ph)%state(1,of)/saturation )**plastic_j2_a(instance) & * sign(1.0_pReal, 1.0_pReal - plasticState(ph)%state(1,of)/saturation) else hardening = 0.0_pReal @@ -514,13 +514,13 @@ subroutine constitutive_j2_dotState(Tstar_v,ipc,ip,el) plasticState(ph)%dotState(1,of) = hardening * gamma_dot plasticState(ph)%dotState(2,of) = gamma_dot -end subroutine constitutive_j2_dotState +end subroutine plastic_j2_dotState !-------------------------------------------------------------------------------------------------- !> @brief returns accumulated slip !-------------------------------------------------------------------------------------------------- -subroutine constitutive_J2_getAccumulatedSlip(nSlip,accumulatedSlip,ipc, ip, el) +subroutine plastic_j2_getAccumulatedSlip(nSlip,accumulatedSlip,ipc, ip, el) use material, only: & mappingConstitutive, & plasticState, & @@ -549,13 +549,13 @@ subroutine constitutive_J2_getAccumulatedSlip(nSlip,accumulatedSlip,ipc, ip, el) allocate(accumulatedSlip(nSlip)) accumulatedSlip(1) = plasticState(phase)%state(2,constituent) -end subroutine constitutive_J2_getAccumulatedSlip +end subroutine plastic_j2_getAccumulatedSlip !-------------------------------------------------------------------------------------------------- !> @brief return array of constitutive results !-------------------------------------------------------------------------------------------------- -function constitutive_j2_postResults(Tstar_v,ipc,ip,el) +function plastic_j2_postResults(Tstar_v,ipc,ip,el) use math, only: & math_mul6x6 use mesh, only: & @@ -576,8 +576,8 @@ function constitutive_j2_postResults(Tstar_v,ipc,ip,el) ipc, & !< component-ID of integration point ip, & !< integration point el !< element - real(pReal), dimension(constitutive_j2_sizePostResults(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & - constitutive_j2_postResults + real(pReal), dimension(plastic_j2_sizePostResults(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & + plastic_j2_postResults real(pReal), dimension(6) :: & Tstar_dev_v ! deviatoric part of the 2nd Piola Kirchhoff stress tensor in Mandel notation @@ -601,23 +601,23 @@ function constitutive_j2_postResults(Tstar_v,ipc,ip,el) norm_Tstar_dev = sqrt(math_mul6x6(Tstar_dev_v,Tstar_dev_v)) c = 0_pInt - constitutive_j2_postResults = 0.0_pReal + plastic_j2_postResults = 0.0_pReal - outputsLoop: do o = 1_pInt,constitutive_j2_Noutput(instance) - select case(constitutive_j2_outputID(o,instance)) + outputsLoop: do o = 1_pInt,plastic_j2_Noutput(instance) + select case(plastic_j2_outputID(o,instance)) case (flowstress_ID) - constitutive_j2_postResults(c+1_pInt) = plasticState(ph)%state(1,of) + plastic_j2_postResults(c+1_pInt) = plasticState(ph)%state(1,of) c = c + 1_pInt case (strainrate_ID) - constitutive_j2_postResults(c+1_pInt) = & - constitutive_j2_gdot0(instance) * ( sqrt(1.5_pReal) * norm_Tstar_dev & + plastic_j2_postResults(c+1_pInt) = & + plastic_j2_gdot0(instance) * ( sqrt(1.5_pReal) * norm_Tstar_dev & / &!---------------------------------------------------------------------------------- - (constitutive_j2_fTaylor(instance) * plasticState(ph)%state(1,of)) ) ** constitutive_j2_n(instance) + (plastic_j2_fTaylor(instance) * plasticState(ph)%state(1,of)) ) ** plastic_j2_n(instance) c = c + 1_pInt end select enddo outputsLoop -end function constitutive_j2_postResults +end function plastic_j2_postResults -end module constitutive_j2 +end module plastic_j2 diff --git a/code/constitutive_none.f90 b/code/plastic_none.f90 similarity index 90% rename from code/constitutive_none.f90 rename to code/plastic_none.f90 index 00a9be1ca..9795f8a6f 100644 --- a/code/constitutive_none.f90 +++ b/code/plastic_none.f90 @@ -5,20 +5,20 @@ !> @author Philip Eisenlohr, Max-Planck-Institut für Eisenforschung GmbH !> @brief material subroutine for purely elastic material !-------------------------------------------------------------------------------------------------- -module constitutive_none +module plastic_none use prec, only: & pInt implicit none private integer(pInt), dimension(:), allocatable, public, protected :: & - constitutive_none_sizePostResults + plastic_none_sizePostResults integer(pInt), dimension(:,:), allocatable, target, public :: & - constitutive_none_sizePostResult !< size of each post result output + plastic_none_sizePostResult !< size of each post result output public :: & - constitutive_none_init + plastic_none_init contains @@ -27,7 +27,7 @@ contains !> @brief module initialization !> @details reads in material parameters, allocates arrays, and does sanity checks !-------------------------------------------------------------------------------------------------- -subroutine constitutive_none_init +subroutine plastic_none_init use, intrinsic :: iso_fortran_env ! to get compiler_version and compiler_options (at least for gfortran 4.6 at the moment) use debug, only: & debug_level, & @@ -98,8 +98,8 @@ subroutine constitutive_none_init endif enddo initializeInstances - allocate(constitutive_none_sizePostResults(maxNinstance), source=0_pInt) + allocate(plastic_none_sizePostResults(maxNinstance), source=0_pInt) -end subroutine constitutive_none_init +end subroutine plastic_none_init -end module constitutive_none +end module plastic_none diff --git a/code/constitutive_nonlocal.f90 b/code/plastic_nonlocal.f90 similarity index 83% rename from code/constitutive_nonlocal.f90 rename to code/plastic_nonlocal.f90 index b48b48f75..bad91a8b9 100644 --- a/code/constitutive_nonlocal.f90 +++ b/code/plastic_nonlocal.f90 @@ -6,7 +6,7 @@ !> @author Philip Eisenlohr, Max-Planck-Institut für Eisenforschung GmbH !> @brief material subroutine for plasticity including dislocation flux !-------------------------------------------------------------------------------------------------- -module constitutive_nonlocal +module plastic_nonlocal use prec, only: & pReal, & pInt @@ -43,19 +43,19 @@ module constitutive_nonlocal KB = 1.38e-23_pReal !< Physical parameter, Boltzmann constant in J/Kelvin integer(pInt), dimension(:), allocatable, public, protected :: & - constitutive_nonlocal_sizeDotState, & !< number of dotStates = number of basic state variables - constitutive_nonlocal_sizeDependentState, & !< number of dependent state variables - constitutive_nonlocal_sizeState, & !< total number of state variables - constitutive_nonlocal_sizePostResults !< cumulative size of post results + plastic_nonlocal_sizeDotState, & !< number of dotStates = number of basic state variables + plastic_nonlocal_sizeDependentState, & !< number of dependent state variables + plastic_nonlocal_sizeState, & !< total number of state variables + plastic_nonlocal_sizePostResults !< cumulative size of post results integer(pInt), dimension(:,:), allocatable, target, public :: & - constitutive_nonlocal_sizePostResult !< size of each post result output + plastic_nonlocal_sizePostResult !< size of each post result output character(len=64), dimension(:,:), allocatable, target, public :: & - constitutive_nonlocal_output !< name of each post result output + plastic_nonlocal_output !< name of each post result output integer(pInt), dimension(:), allocatable, target, public :: & - constitutive_nonlocal_Noutput !< number of outputs per instance of this plasticity + plastic_nonlocal_Noutput !< number of outputs per instance of this plasticity integer(pInt), dimension(:,:), allocatable, private :: & iGamma, & !< state indices for accumulated shear @@ -238,24 +238,24 @@ module constitutive_nonlocal dislocationstress_ID end enum integer(kind(undefined_ID)), dimension(:,:), allocatable, private :: & - constitutive_nonlocal_outputID !< ID of each post result output + plastic_nonlocal_outputID !< ID of each post result output public :: & - constitutive_nonlocal_init, & - constitutive_nonlocal_stateInit, & - constitutive_nonlocal_aTolState, & - constitutive_nonlocal_microstructure, & - constitutive_nonlocal_LpAndItsTangent, & - constitutive_nonlocal_dotState, & - constitutive_nonlocal_deltaState, & - constitutive_nonlocal_updateCompatibility, & - constitutive_nonlocal_getAccumulatedSlip, & - constitutive_nonlocal_getSlipRate, & - constitutive_nonlocal_postResults + plastic_nonlocal_init, & + plastic_nonlocal_stateInit, & + plastic_nonlocal_aTolState, & + plastic_nonlocal_microstructure, & + plastic_nonlocal_LpAndItsTangent, & + plastic_nonlocal_dotState, & + plastic_nonlocal_deltaState, & + plastic_nonlocal_updateCompatibility, & + plastic_nonlocal_getAccumulatedSlip, & + plastic_nonlocal_getSlipRate, & + plastic_nonlocal_postResults private :: & - constitutive_nonlocal_kinetics, & - constitutive_nonlocal_dislocationstress + plastic_nonlocal_kinetics, & + plastic_nonlocal_dislocationstress contains @@ -264,7 +264,7 @@ contains !> @brief module initialization !> @details reads in material parameters, allocates arrays, and does sanity checks !-------------------------------------------------------------------------------------------------- -subroutine constitutive_nonlocal_init(fileUnit) +subroutine plastic_nonlocal_init(fileUnit) use, intrinsic :: iso_fortran_env ! to get compiler_version and compiler_options (at least for gfortran 4.6 at the moment) use math, only: math_Mandel3333to66, & math_Voigt66to3333, & @@ -354,15 +354,15 @@ integer(pInt) :: phase, & !*** memory allocation for global variables -allocate(constitutive_nonlocal_sizeDotState(maxNinstances), source=0_pInt) -allocate(constitutive_nonlocal_sizeDependentState(maxNinstances), source=0_pInt) -allocate(constitutive_nonlocal_sizeState(maxNinstances), source=0_pInt) -allocate(constitutive_nonlocal_sizePostResults(maxNinstances), source=0_pInt) -allocate(constitutive_nonlocal_sizePostResult(maxval(phase_Noutput), maxNinstances), source=0_pInt) -allocate(constitutive_nonlocal_Noutput(maxNinstances), source=0_pInt) -allocate(constitutive_nonlocal_output(maxval(phase_Noutput), maxNinstances)) - constitutive_nonlocal_output = '' -allocate(constitutive_nonlocal_outputID(maxval(phase_Noutput), maxNinstances), source=undefined_ID) +allocate(plastic_nonlocal_sizeDotState(maxNinstances), source=0_pInt) +allocate(plastic_nonlocal_sizeDependentState(maxNinstances), source=0_pInt) +allocate(plastic_nonlocal_sizeState(maxNinstances), source=0_pInt) +allocate(plastic_nonlocal_sizePostResults(maxNinstances), source=0_pInt) +allocate(plastic_nonlocal_sizePostResult(maxval(phase_Noutput), maxNinstances), source=0_pInt) +allocate(plastic_nonlocal_Noutput(maxNinstances), source=0_pInt) +allocate(plastic_nonlocal_output(maxval(phase_Noutput), maxNinstances)) + plastic_nonlocal_output = '' +allocate(plastic_nonlocal_outputID(maxval(phase_Noutput), maxNinstances), source=undefined_ID) allocate(Nslip(lattice_maxNslipFamily,maxNinstances), source=0_pInt) allocate(slipFamily(lattice_maxNslip,maxNinstances), source=0_pInt) allocate(slipSystemLattice(lattice_maxNslip,maxNinstances), source=0_pInt) @@ -439,424 +439,424 @@ allocate(nonSchmidCoeff(lattice_maxNnonSchmid,maxNinstances), s case ('(output)') select case(IO_lc(IO_stringValue(line,positions,2_pInt))) case('rho') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('delta') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = delta_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = delta_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_edge') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_edge_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_edge_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_screw') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_screw_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_screw_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_sgl') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_sgl_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_sgl_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('delta_sgl') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = delta_sgl_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = delta_sgl_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_sgl_edge') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_sgl_edge_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_sgl_edge_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_sgl_edge_pos') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_sgl_edge_pos_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_sgl_edge_pos_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_sgl_edge_neg') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_sgl_edge_neg_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_sgl_edge_neg_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_sgl_screw') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_sgl_screw_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_sgl_screw_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_sgl_screw_pos') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_sgl_screw_pos_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_sgl_screw_pos_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_sgl_screw_neg') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_sgl_screw_neg_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_sgl_screw_neg_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_sgl_mobile') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_sgl_mobile_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_sgl_mobile_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_sgl_edge_mobile') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_sgl_edge_mobile_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_sgl_edge_mobile_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_sgl_edge_pos_mobile') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_sgl_edge_pos_mobile_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_sgl_edge_pos_mobile_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_sgl_edge_neg_mobile') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_sgl_edge_neg_mobile_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_sgl_edge_neg_mobile_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_sgl_screw_mobile') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_sgl_screw_mobile_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_sgl_screw_mobile_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_sgl_screw_pos_mobile') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_sgl_screw_pos_mobile_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_sgl_screw_pos_mobile_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_sgl_screw_neg_mobile') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_sgl_screw_neg_mobile_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_sgl_screw_neg_mobile_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_sgl_immobile') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_sgl_immobile_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_sgl_immobile_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_sgl_edge_immobile') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_sgl_edge_immobile_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_sgl_edge_immobile_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_sgl_edge_pos_immobile') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_sgl_edge_pos_immobile_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_sgl_edge_pos_immobile_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_sgl_edge_neg_immobile') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_sgl_edge_neg_immobile_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_sgl_edge_neg_immobile_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_sgl_screw_immobile') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_sgl_screw_immobile_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_sgl_screw_immobile_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_sgl_screw_pos_immobile') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_sgl_screw_pos_immobile_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_sgl_screw_pos_immobile_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_sgl_screw_neg_immobile') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_sgl_screw_neg_immobile_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_sgl_screw_neg_immobile_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_dip') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_dip_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_dip_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('delta_dip') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = delta_dip_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = delta_dip_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_dip_edge') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_dip_edge_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_dip_edge_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_dip_screw') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_dip_screw_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_dip_screw_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('excess_rho') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = excess_rho_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = excess_rho_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('excess_rho_edge') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = excess_rho_edge_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = excess_rho_edge_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('excess_rho_screw') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = excess_rho_screw_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = excess_rho_screw_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_forest') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_forest_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_forest_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('shearrate') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = shearrate_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = shearrate_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('resolvedstress') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = resolvedstress_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = resolvedstress_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('resolvedstress_external') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = resolvedstress_external_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = resolvedstress_external_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('resolvedstress_back') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = resolvedstress_back_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = resolvedstress_back_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('resistance') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = resistance_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = resistance_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_dot') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_dot_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_dot_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_dot_sgl') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_dot_sgl_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_dot_sgl_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_dot_sgl_mobile') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_dot_sgl_mobile_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_dot_sgl_mobile_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_dot_dip') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_dot_dip_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_dot_dip_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_dot_gen') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_dot_gen_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_dot_gen_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_dot_gen_edge') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_dot_gen_edge_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_dot_gen_edge_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_dot_gen_screw') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_dot_gen_screw_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_dot_gen_screw_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_dot_sgl2dip') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_dot_sgl2dip_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_dot_sgl2dip_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_dot_sgl2dip_edge') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_dot_sgl2dip_edge_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_dot_sgl2dip_edge_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_dot_sgl2dip_screw') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_dot_sgl2dip_screw_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_dot_sgl2dip_screw_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_dot_ann_ath') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_dot_ann_ath_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_dot_ann_ath_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_dot_ann_the') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_dot_ann_the_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_dot_ann_the_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_dot_ann_the_edge') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_dot_ann_the_edge_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_dot_ann_the_edge_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_dot_ann_the_screw') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_dot_ann_the_screw_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_dot_ann_the_screw_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_dot_edgejogs') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_dot_edgejogs_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_dot_edgejogs_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_dot_flux') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_dot_flux_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_dot_flux_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_dot_flux_mobile') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_dot_flux_mobile_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_dot_flux_mobile_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_dot_flux_edge') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_dot_flux_edge_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_dot_flux_edge_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('rho_dot_flux_screw') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = rho_dot_flux_screw_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = rho_dot_flux_screw_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('velocity_edge_pos') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = velocity_edge_pos_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = velocity_edge_pos_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('velocity_edge_neg') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = velocity_edge_neg_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = velocity_edge_neg_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('velocity_screw_pos') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = velocity_screw_pos_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = velocity_screw_pos_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('velocity_screw_neg') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = velocity_screw_neg_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = velocity_screw_neg_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('slipdirection.x') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = slipdirectionx_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = slipdirectionx_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('slipdirection.y') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = slipdirectiony_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = slipdirectiony_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('slipdirection.z') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = slipdirectionz_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = slipdirectionz_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('slipnormal.x') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = slipnormalx_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = slipnormalx_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('slipnormal.y') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = slipnormaly_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = slipnormaly_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('slipnormal.z') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = slipnormalz_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = slipnormalz_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('fluxdensity_edge_pos.x') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = fluxdensity_edge_posx_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = fluxdensity_edge_posx_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('fluxdensity_edge_pos.y') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = fluxdensity_edge_posy_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = fluxdensity_edge_posy_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('fluxdensity_edge_pos.z') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = fluxdensity_edge_posz_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = fluxdensity_edge_posz_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('fluxdensity_edge_neg.x') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = fluxdensity_edge_negx_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = fluxdensity_edge_negx_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('fluxdensity_edge_neg.y') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = fluxdensity_edge_negy_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = fluxdensity_edge_negy_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('fluxdensity_edge_neg.z') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = fluxdensity_edge_negz_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = fluxdensity_edge_negz_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('fluxdensity_screw_pos.x') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = fluxdensity_screw_posx_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = fluxdensity_screw_posx_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('fluxdensity_screw_pos.y') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = fluxdensity_screw_posy_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = fluxdensity_screw_posy_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('fluxdensity_screw_pos.z') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = fluxdensity_screw_posz_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = fluxdensity_screw_posz_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('fluxdensity_screw_neg.x') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = fluxdensity_screw_negx_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = fluxdensity_screw_negx_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('fluxdensity_screw_neg.y') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = fluxdensity_screw_negy_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = fluxdensity_screw_negy_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('fluxdensity_screw_neg.z') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = fluxdensity_screw_negz_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = fluxdensity_screw_negz_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('maximumdipoleheight_edge') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = maximumdipoleheight_edge_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = maximumdipoleheight_edge_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('maximumdipoleheight_screw') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = maximumdipoleheight_screw_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = maximumdipoleheight_screw_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('accumulatedshear') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = accumulatedshear_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = accumulatedshear_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case('dislocationstress') - constitutive_nonlocal_Noutput(instance) = constitutive_nonlocal_Noutput(instance) + 1_pInt - constitutive_nonlocal_outputID(constitutive_nonlocal_Noutput(instance),instance) = dislocationstress_ID - constitutive_nonlocal_output(constitutive_nonlocal_Noutput(instance),instance) = & + plastic_nonlocal_Noutput(instance) = plastic_nonlocal_Noutput(instance) + 1_pInt + plastic_nonlocal_outputID(plastic_nonlocal_Noutput(instance),instance) = dislocationstress_ID + plastic_nonlocal_output(plastic_nonlocal_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) end select case ('nslip') @@ -990,7 +990,7 @@ allocate(nonSchmidCoeff(lattice_maxNnonSchmid,maxNinstances), s if (sum(Nslip(:,instance)) <= 0_pInt) & call IO_error(211_pInt,ext_msg='Nslip ('//PLASTICITY_NONLOCAL_label//')') do o = 1_pInt,maxval(phase_Noutput) - if(len(constitutive_nonlocal_output(o,instance)) > 64_pInt) & + if(len(plastic_nonlocal_output(o,instance)) > 64_pInt) & call IO_error(666_pInt) enddo do f = 1_pInt,lattice_maxNslipFamily @@ -1204,8 +1204,8 @@ allocate(nonSchmidProjection(3,3,4,maxTotalNslip,maxNinstances), !*** determine size of postResults array - outputsLoop: do o = 1_pInt,constitutive_nonlocal_Noutput(instance) - select case(constitutive_nonlocal_outputID(o,instance)) + outputsLoop: do o = 1_pInt,plastic_nonlocal_Noutput(instance) + select case(plastic_nonlocal_outputID(o,instance)) case( rho_ID, & delta_ID, & rho_edge_ID, & @@ -1296,14 +1296,14 @@ allocate(nonSchmidProjection(3,3,4,maxTotalNslip,maxNinstances), end select if (mySize > 0_pInt) then ! any meaningful output found - constitutive_nonlocal_sizePostResult(o,instance) = mySize - constitutive_nonlocal_sizePostResults(instance) = constitutive_nonlocal_sizePostResults(instance) + mySize + plastic_nonlocal_sizePostResult(o,instance) = mySize + plastic_nonlocal_sizePostResults(instance) = plastic_nonlocal_sizePostResults(instance) + mySize endif enddo outputsLoop plasticState(phase)%sizeState = sizeState plasticState(phase)%sizeDotState = sizeDotState - plasticState(phase)%sizePostResults = constitutive_nonlocal_sizePostResults(instance) + plasticState(phase)%sizePostResults = plastic_nonlocal_sizePostResults(instance) plasticState(phase)%nonlocal = .true. allocate(plasticState(phase)%aTolState (sizeState), source=0.0_pReal) allocate(plasticState(phase)%state0 (sizeState,NofMyPhase), source=0.0_pReal) @@ -1393,16 +1393,16 @@ allocate(nonSchmidProjection(3,3,4,maxTotalNslip,maxNinstances), + lattice_Sslip(1:3,1:3,1,slipSystemLattice(s,instance),phase) enddo endif - call constitutive_nonlocal_aTolState(phase,instance) + call plastic_nonlocal_aTolState(phase,instance) enddo initializeInstances -end subroutine constitutive_nonlocal_init +end subroutine plastic_nonlocal_init !-------------------------------------------------------------------------------------------------- !> @brief sets the initial microstructural state for a given instance of this plasticity !-------------------------------------------------------------------------------------------------- -subroutine constitutive_nonlocal_stateInit() +subroutine plastic_nonlocal_stateInit() use IO, only: IO_error use lattice, only: lattice_maxNslipFamily use math, only: math_sampleGaussVar @@ -1515,13 +1515,13 @@ do instance = 1_pInt,maxNinstances endif enddo -end subroutine constitutive_nonlocal_stateInit +end subroutine plastic_nonlocal_stateInit !-------------------------------------------------------------------------------------------------- !> @brief sets the relevant state values for a given instance of this plasticity !-------------------------------------------------------------------------------------------------- -subroutine constitutive_nonlocal_aTolState(ph,instance) +subroutine plastic_nonlocal_aTolState(ph,instance) use material, only: & plasticState @@ -1543,12 +1543,12 @@ subroutine constitutive_nonlocal_aTolState(ph,instance) plasticState(ph)%aTolState(iGamma(1:ns,instance)) = aTolShear(instance) -end subroutine constitutive_nonlocal_aTolState +end subroutine plastic_nonlocal_aTolState !-------------------------------------------------------------------------------------------------- !> @brief calculates quantities characterizing the microstructure !-------------------------------------------------------------------------------------------------- -subroutine constitutive_nonlocal_microstructure(Fe, Fp, ip, el) +subroutine plastic_nonlocal_microstructure(Fe, Fp, ip, el) use IO, only: & IO_error use math, only: & @@ -1851,13 +1851,13 @@ plasticState(ph)%state(iTauB(1:ns,instance),of) = tauBack endif #endif -end subroutine constitutive_nonlocal_microstructure +end subroutine plastic_nonlocal_microstructure !-------------------------------------------------------------------------------------------------- !> @brief calculates kinetics !-------------------------------------------------------------------------------------------------- -subroutine constitutive_nonlocal_kinetics(v, dv_dtau, dv_dtauNS, tau, tauNS, & +subroutine plastic_nonlocal_kinetics(v, dv_dtau, dv_dtauNS, tau, tauNS, & tauThreshold, c, Temperature, ip, el) use debug, only: debug_level, & @@ -2011,12 +2011,12 @@ endif endif #endif -end subroutine constitutive_nonlocal_kinetics +end subroutine plastic_nonlocal_kinetics !-------------------------------------------------------------------------------------------------- !> @brief calculates plastic velocity gradient and its tangent !-------------------------------------------------------------------------------------------------- -subroutine constitutive_nonlocal_LpAndItsTangent(Lp, dLp_dTstar99, Tstar_v, Temperature, slipDamage, ipc, ip, el) +subroutine plastic_nonlocal_LpAndItsTangent(Lp, dLp_dTstar99, Tstar_v, Temperature, slipDamage, ipc, ip, el) use math, only: math_Plain3333to99, & math_mul6x6, & @@ -2133,7 +2133,7 @@ tau = tau + tauBack !*** get dislocation velocity and its tangent and store the velocity in the state array ! edges -call constitutive_nonlocal_kinetics(v(1:ns,1), dv_dtau(1:ns,1), dv_dtauNS(1:ns,1), & +call plastic_nonlocal_kinetics(v(1:ns,1), dv_dtau(1:ns,1), dv_dtauNS(1:ns,1), & tau(1:ns), tauNS(1:ns,1), tauThreshold(1:ns), & 1_pInt, Temperature, ip, el) v(1:ns,2) = v(1:ns,1) @@ -2149,7 +2149,7 @@ if (lattice_NnonSchmid(ph) == 0_pInt) then endforall else ! take non-Schmid contributions into account do t = 3_pInt,4_pInt - call constitutive_nonlocal_kinetics(v(1:ns,t), dv_dtau(1:ns,t), dv_dtauNS(1:ns,t), & + call plastic_nonlocal_kinetics(v(1:ns,t), dv_dtau(1:ns,t), dv_dtauNS(1:ns,t), & tau(1:ns), tauNS(1:ns,t), tauThreshold(1:ns), & 2_pInt , Temperature, ip, el) enddo @@ -2210,14 +2210,14 @@ dLp_dTstar99 = math_Plain3333to99(dLp_dTstar3333) endif #endif -end subroutine constitutive_nonlocal_LpAndItsTangent +end subroutine plastic_nonlocal_LpAndItsTangent !-------------------------------------------------------------------------------------------------- !> @brief (instantaneous) incremental change of microstructure !-------------------------------------------------------------------------------------------------- -subroutine constitutive_nonlocal_deltaState(Tstar_v,ip,el) +subroutine plastic_nonlocal_deltaState(Tstar_v,ip,el) use debug, only: debug_level, & debug_constitutive, & debug_levelBasic, & @@ -2396,12 +2396,12 @@ forall (s = 1:ns, c = 1_pInt:2_pInt) & endif #endif -end subroutine constitutive_nonlocal_deltaState +end subroutine plastic_nonlocal_deltaState !--------------------------------------------------------------------------------------------------- !> @brief calculates the rate of change of microstructure !--------------------------------------------------------------------------------------------------- -subroutine constitutive_nonlocal_dotState(Tstar_v, Fe, Fp, Temperature, timestep,subfrac, ip,el) +subroutine plastic_nonlocal_dotState(Tstar_v, Fe, Fp, Temperature, timestep,subfrac, ip,el) use prec, only: DAMASK_NaN use numerics, only: numerics_integrationMode, & @@ -3021,7 +3021,7 @@ else plasticState(p)%dotState(iGamma(s,instance),o) = sum(gdot(s,1:4)) endif -end subroutine constitutive_nonlocal_dotState +end subroutine plastic_nonlocal_dotState !********************************************************************* @@ -3032,7 +3032,7 @@ end subroutine constitutive_nonlocal_dotState !* that sum up to a total of 1 are considered, all others are set to * !* zero. * !********************************************************************* -subroutine constitutive_nonlocal_updateCompatibility(orientation,i,e) +subroutine plastic_nonlocal_updateCompatibility(orientation,i,e) use math, only: math_mul3x3, & math_qRot @@ -3194,12 +3194,12 @@ enddo ! neighbor cycle compatibility(1:2,1:ns,1:ns,1:Nneighbors,i,e) = my_compatibility -end subroutine constitutive_nonlocal_updateCompatibility +end subroutine plastic_nonlocal_updateCompatibility !********************************************************************* !* calculates quantities characterizing the microstructure * !********************************************************************* -function constitutive_nonlocal_dislocationstress(Fe, ip, el) +function plastic_nonlocal_dislocationstress(Fe, ip, el) use math, only: math_mul33x33, & math_mul33x3, & math_invert33, & @@ -3232,7 +3232,7 @@ real(pReal), dimension(3,3,homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems) Fe !< elastic deformation gradient !*** output variables -real(pReal), dimension(3,3) :: constitutive_nonlocal_dislocationstress +real(pReal), dimension(3,3) :: plastic_nonlocal_dislocationstress !*** local variables integer(pInt) neighbor_el, & !< element number of neighbor material point @@ -3305,7 +3305,7 @@ endforall !*** calculate the dislocation stress of the neighboring excess dislocation densities !*** zero for material points of local plasticity -constitutive_nonlocal_dislocationstress = 0.0_pReal +plastic_nonlocal_dislocationstress = 0.0_pReal if (.not. phase_localPlasticity(ph)) then call math_invert33(Fe(1:3,1:3,1_pInt,ip,el), invFe, detFe, inversionError) @@ -3537,7 +3537,7 @@ ipLoop: do neighbor_ip = 1_pInt,FE_Nips(FE_geomtype(mesh_element(2,neighbor_el)) !* and back into my lattice configuration neighborLattice2myLattice = math_mul33x33(invFe, Fe(1:3,1:3,1,neighbor_ip,neighbor_el)) - constitutive_nonlocal_dislocationstress = constitutive_nonlocal_dislocationstress & + plastic_nonlocal_dislocationstress = plastic_nonlocal_dislocationstress & + math_mul33x33(neighborLattice2myLattice, & math_mul33x33(Tdislo_neighborLattice, & math_transpose33(neighborLattice2myLattice))) @@ -3547,12 +3547,12 @@ ipLoop: do neighbor_ip = 1_pInt,FE_Nips(FE_geomtype(mesh_element(2,neighbor_el)) endif -end function constitutive_nonlocal_dislocationstress +end function plastic_nonlocal_dislocationstress !-------------------------------------------------------------------------------------------------- !> @brief returns accumulated slip !-------------------------------------------------------------------------------------------------- -subroutine constitutive_nonlocal_getAccumulatedSlip(nSlip,accumulatedSlip,ipc, ip, el) +subroutine plastic_nonlocal_getAccumulatedSlip(nSlip,accumulatedSlip,ipc, ip, el) use lattice, only: & lattice_maxNslipFamily use material, only: & @@ -3584,13 +3584,13 @@ subroutine constitutive_nonlocal_getAccumulatedSlip(nSlip,accumulatedSlip,ipc, i forall (s = 1:nSlip) & accumulatedSlip(s) = plasticState(phase)%state(iGamma(s,instance),offset) -end subroutine constitutive_nonlocal_getAccumulatedSlip +end subroutine plastic_nonlocal_getAccumulatedSlip !-------------------------------------------------------------------------------------------------- !> @brief returns accumulated slip rate !-------------------------------------------------------------------------------------------------- -subroutine constitutive_nonlocal_getSlipRate(nSlip,slipRate,ipc, ip, el) +subroutine plastic_nonlocal_getSlipRate(nSlip,slipRate,ipc, ip, el) use lattice, only: & lattice_maxNslipFamily use material, only: & @@ -3622,13 +3622,13 @@ subroutine constitutive_nonlocal_getSlipRate(nSlip,slipRate,ipc, ip, el) forall (s = 1:nSlip) & slipRate(s) = plasticState(phase)%dotState(iGamma(s,instance),offset) -end subroutine constitutive_nonlocal_getSlipRate +end subroutine plastic_nonlocal_getSlipRate !-------------------------------------------------------------------------------------------------- !> @brief return array of constitutive results !-------------------------------------------------------------------------------------------------- -function constitutive_nonlocal_postResults(Tstar_v,Fe,ip,el) +function plastic_nonlocal_postResults(Tstar_v,Fe,ip,el) use math, only: & math_mul6x6, & math_mul33x3, & @@ -3661,9 +3661,9 @@ function constitutive_nonlocal_postResults(Tstar_v,Fe,ip,el) ip, & !< integration point el !< element - real(pReal), dimension(constitutive_nonlocal_sizePostResults(& + real(pReal), dimension(plastic_nonlocal_sizePostResults(& phase_plasticityInstance(material_phase(1_pInt,ip,el)))) :: & - constitutive_nonlocal_postResults + plastic_nonlocal_postResults integer(pInt) :: & ph, & @@ -3706,7 +3706,7 @@ instance = phase_plasticityInstance(ph) ns = totalNslip(instance) cs = 0_pInt -constitutive_nonlocal_postResults = 0.0_pReal +plastic_nonlocal_postResults = 0.0_pReal !* short hand notations for state variables @@ -3766,371 +3766,371 @@ forall (s = 1_pInt:ns) & lattice_sn(1:3,slipSystemLattice(s,instance),ph)) -outputsLoop: do o = 1_pInt,constitutive_nonlocal_Noutput(instance) - select case(constitutive_nonlocal_outputID(o,instance)) +outputsLoop: do o = 1_pInt,plastic_nonlocal_Noutput(instance) + select case(plastic_nonlocal_outputID(o,instance)) case (rho_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(abs(rhoSgl),2) + sum(rhoDip,2) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(abs(rhoSgl),2) + sum(rhoDip,2) cs = cs + ns case (rho_sgl_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(abs(rhoSgl),2) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(abs(rhoSgl),2) cs = cs + ns case (rho_sgl_mobile_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(abs(rhoSgl(1:ns,1:4)),2) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(abs(rhoSgl(1:ns,1:4)),2) cs = cs + ns case (rho_sgl_immobile_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(rhoSgl(1:ns,5:8),2) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(rhoSgl(1:ns,5:8),2) cs = cs + ns case (rho_dip_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(rhoDip,2) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(rhoDip,2) cs = cs + ns case (rho_edge_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(abs(rhoSgl(1:ns,[1,2,5,6])),2) + rhoDip(1:ns,1) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(abs(rhoSgl(1:ns,[1,2,5,6])),2) + rhoDip(1:ns,1) cs = cs + ns case (rho_sgl_edge_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(abs(rhoSgl(1:ns,[1,2,5,6])),2) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(abs(rhoSgl(1:ns,[1,2,5,6])),2) cs = cs + ns case (rho_sgl_edge_mobile_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(rhoSgl(1:ns,1:2),2) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(rhoSgl(1:ns,1:2),2) cs = cs + ns case (rho_sgl_edge_immobile_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(rhoSgl(1:ns,5:6),2) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(rhoSgl(1:ns,5:6),2) cs = cs + ns case (rho_sgl_edge_pos_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,1) + abs(rhoSgl(1:ns,5)) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,1) + abs(rhoSgl(1:ns,5)) cs = cs + ns case (rho_sgl_edge_pos_mobile_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,1) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,1) cs = cs + ns case (rho_sgl_edge_pos_immobile_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,5) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,5) cs = cs + ns case (rho_sgl_edge_neg_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,2) + abs(rhoSgl(1:ns,6)) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,2) + abs(rhoSgl(1:ns,6)) cs = cs + ns case (rho_sgl_edge_neg_mobile_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,2) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,2) cs = cs + ns case (rho_sgl_edge_neg_immobile_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,6) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,6) cs = cs + ns case (rho_dip_edge_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoDip(1:ns,1) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoDip(1:ns,1) cs = cs + ns case (rho_screw_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(abs(rhoSgl(1:ns,[3,4,7,8])),2) + rhoDip(1:ns,2) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(abs(rhoSgl(1:ns,[3,4,7,8])),2) + rhoDip(1:ns,2) cs = cs + ns case (rho_sgl_screw_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(abs(rhoSgl(1:ns,[3,4,7,8])),2) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(abs(rhoSgl(1:ns,[3,4,7,8])),2) cs = cs + ns case (rho_sgl_screw_mobile_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(rhoSgl(1:ns,3:4),2) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(rhoSgl(1:ns,3:4),2) cs = cs + ns case (rho_sgl_screw_immobile_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(rhoSgl(1:ns,7:8),2) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(rhoSgl(1:ns,7:8),2) cs = cs + ns case (rho_sgl_screw_pos_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,3) + abs(rhoSgl(1:ns,7)) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,3) + abs(rhoSgl(1:ns,7)) cs = cs + ns case (rho_sgl_screw_pos_mobile_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,3) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,3) cs = cs + ns case (rho_sgl_screw_pos_immobile_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,7) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,7) cs = cs + ns case (rho_sgl_screw_neg_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,4) + abs(rhoSgl(1:ns,8)) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,4) + abs(rhoSgl(1:ns,8)) cs = cs + ns case (rho_sgl_screw_neg_mobile_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,4) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,4) cs = cs + ns case (rho_sgl_screw_neg_immobile_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,8) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,8) cs = cs + ns case (rho_dip_screw_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoDip(1:ns,2) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoDip(1:ns,2) cs = cs + ns case (excess_rho_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = (rhoSgl(1:ns,1) + abs(rhoSgl(1:ns,5))) & + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = (rhoSgl(1:ns,1) + abs(rhoSgl(1:ns,5))) & - (rhoSgl(1:ns,2) + abs(rhoSgl(1:ns,6))) & + (rhoSgl(1:ns,3) + abs(rhoSgl(1:ns,7))) & - (rhoSgl(1:ns,4) + abs(rhoSgl(1:ns,8))) cs = cs + ns case (excess_rho_edge_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = (rhoSgl(1:ns,1) + abs(rhoSgl(1:ns,5))) & + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = (rhoSgl(1:ns,1) + abs(rhoSgl(1:ns,5))) & - (rhoSgl(1:ns,2) + abs(rhoSgl(1:ns,6))) cs = cs + ns case (excess_rho_screw_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = (rhoSgl(1:ns,3) + abs(rhoSgl(1:ns,7))) & + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = (rhoSgl(1:ns,3) + abs(rhoSgl(1:ns,7))) & - (rhoSgl(1:ns,4) + abs(rhoSgl(1:ns,8))) cs = cs + ns case (rho_forest_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoForest + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoForest cs = cs + ns case (delta_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = 1.0_pReal / sqrt(sum(abs(rhoSgl),2) + sum(rhoDip,2)) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = 1.0_pReal / sqrt(sum(abs(rhoSgl),2) + sum(rhoDip,2)) cs = cs + ns case (delta_sgl_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = 1.0_pReal / sqrt(sum(abs(rhoSgl),2)) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = 1.0_pReal / sqrt(sum(abs(rhoSgl),2)) cs = cs + ns case (delta_dip_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = 1.0_pReal / sqrt(sum(rhoDip,2)) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = 1.0_pReal / sqrt(sum(rhoDip,2)) cs = cs + ns case (shearrate_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(gdot,2) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(gdot,2) cs = cs + ns case (resolvedstress_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = tau + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = tau cs = cs + ns case (resolvedstress_back_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = tauBack + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = tauBack cs = cs + ns case (resolvedstress_external_ID) do s = 1_pInt,ns sLattice = slipSystemLattice(s,instance) - constitutive_nonlocal_postResults(cs+s) = math_mul6x6(Tstar_v, lattice_Sslip_v(1:6,1,sLattice,ph)) + plastic_nonlocal_postResults(cs+s) = math_mul6x6(Tstar_v, lattice_Sslip_v(1:6,1,sLattice,ph)) enddo cs = cs + ns case (resistance_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = tauThreshold + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = tauThreshold cs = cs + ns case (rho_dot_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(rhoDotSgl(1:ns,1:4),2) & + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(rhoDotSgl(1:ns,1:4),2) & + sum(rhoDotSgl(1:ns,5:8)*sign(1.0_pReal,rhoSgl(1:ns,5:8)),2) & + sum(rhoDotDip,2) cs = cs + ns case (rho_dot_sgl_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(rhoDotSgl(1:ns,1:4),2) & + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(rhoDotSgl(1:ns,1:4),2) & + sum(rhoDotSgl(1:ns,5:8)*sign(1.0_pReal,rhoSgl(1:ns,5:8)),2) cs = cs + ns case (rho_dot_sgl_mobile_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(rhoDotSgl(1:ns,1:4),2) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(rhoDotSgl(1:ns,1:4),2) cs = cs + ns case (rho_dot_dip_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(rhoDotDip,2) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(rhoDotDip,2) cs = cs + ns case (rho_dot_gen_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoDotMultiplicationOutput(1:ns,1,1_pInt,ip,el) & + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoDotMultiplicationOutput(1:ns,1,1_pInt,ip,el) & + rhoDotMultiplicationOutput(1:ns,2,1_pInt,ip,el) cs = cs + ns case (rho_dot_gen_edge_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoDotMultiplicationOutput(1:ns,1,1_pInt,ip,el) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoDotMultiplicationOutput(1:ns,1,1_pInt,ip,el) cs = cs + ns case (rho_dot_gen_screw_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoDotMultiplicationOutput(1:ns,2,1_pInt,ip,el) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoDotMultiplicationOutput(1:ns,2,1_pInt,ip,el) cs = cs + ns case (rho_dot_sgl2dip_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoDotSingle2DipoleGlideOutput(1:ns,1,1_pInt,ip,el) & + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoDotSingle2DipoleGlideOutput(1:ns,1,1_pInt,ip,el) & + rhoDotSingle2DipoleGlideOutput(1:ns,2,1_pInt,ip,el) cs = cs + ns case (rho_dot_sgl2dip_edge_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoDotSingle2DipoleGlideOutput(1:ns,1,1_pInt,ip,el) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoDotSingle2DipoleGlideOutput(1:ns,1,1_pInt,ip,el) cs = cs + ns case (rho_dot_sgl2dip_screw_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoDotSingle2DipoleGlideOutput(1:ns,2,1_pInt,ip,el) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoDotSingle2DipoleGlideOutput(1:ns,2,1_pInt,ip,el) cs = cs + ns case (rho_dot_ann_ath_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoDotAthermalAnnihilationOutput(1:ns,1,1_pInt,ip,el) & + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoDotAthermalAnnihilationOutput(1:ns,1,1_pInt,ip,el) & + rhoDotAthermalAnnihilationOutput(1:ns,2,1_pInt,ip,el) cs = cs + ns case (rho_dot_ann_the_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoDotThermalAnnihilationOutput(1:ns,1,1_pInt,ip,el) & + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoDotThermalAnnihilationOutput(1:ns,1,1_pInt,ip,el) & + rhoDotThermalAnnihilationOutput(1:ns,2,1_pInt,ip,el) cs = cs + ns case (rho_dot_ann_the_edge_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoDotThermalAnnihilationOutput(1:ns,1,1_pInt,ip,el) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoDotThermalAnnihilationOutput(1:ns,1,1_pInt,ip,el) cs = cs + ns case (rho_dot_ann_the_screw_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoDotThermalAnnihilationOutput(1:ns,2,1_pInt,ip,el) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoDotThermalAnnihilationOutput(1:ns,2,1_pInt,ip,el) cs = cs + ns case (rho_dot_edgejogs_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoDotEdgeJogsOutput(1:ns,1_pInt,ip,el) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoDotEdgeJogsOutput(1:ns,1_pInt,ip,el) cs = cs + ns case (rho_dot_flux_mobile_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(rhoDotFluxOutput(1:ns,1:4,1_pInt,ip,el),2) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(rhoDotFluxOutput(1:ns,1:4,1_pInt,ip,el),2) cs = cs + ns case (rho_dot_flux_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(rhoDotFluxOutput(1:ns,1:4,1_pInt,ip,el),2) & + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(rhoDotFluxOutput(1:ns,1:4,1_pInt,ip,el),2) & + sum(rhoDotFluxOutput(1:ns,5:8,1_pInt,ip,el)*sign(1.0_pReal,rhoSgl(1:ns,5:8)),2) cs = cs + ns case (rho_dot_flux_edge_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(rhoDotFluxOutput(1:ns,1:2,1_pInt,ip,el),2) & + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(rhoDotFluxOutput(1:ns,1:2,1_pInt,ip,el),2) & + sum(rhoDotFluxOutput(1:ns,5:6,1_pInt,ip,el)*sign(1.0_pReal,rhoSgl(1:ns,5:6)),2) cs = cs + ns case (rho_dot_flux_screw_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(rhoDotFluxOutput(1:ns,3:4,1_pInt,ip,el),2) & + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = sum(rhoDotFluxOutput(1:ns,3:4,1_pInt,ip,el),2) & + sum(rhoDotFluxOutput(1:ns,7:8,1_pInt,ip,el)*sign(1.0_pReal,rhoSgl(1:ns,7:8)),2) cs = cs + ns case (velocity_edge_pos_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = v(1:ns,1) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = v(1:ns,1) cs = cs + ns case (velocity_edge_neg_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = v(1:ns,2) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = v(1:ns,2) cs = cs + ns case (velocity_screw_pos_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = v(1:ns,3) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = v(1:ns,3) cs = cs + ns case (velocity_screw_neg_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = v(1:ns,4) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = v(1:ns,4) cs = cs + ns case (slipdirectionx_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = m_currentconf(1,1:ns,1) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = m_currentconf(1,1:ns,1) cs = cs + ns case (slipdirectiony_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = m_currentconf(2,1:ns,1) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = m_currentconf(2,1:ns,1) cs = cs + ns case (slipdirectionz_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = m_currentconf(3,1:ns,1) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = m_currentconf(3,1:ns,1) cs = cs + ns case (slipnormalx_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = n_currentconf(1,1:ns) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = n_currentconf(1,1:ns) cs = cs + ns case (slipnormaly_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = n_currentconf(2,1:ns) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = n_currentconf(2,1:ns) cs = cs + ns case (slipnormalz_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = n_currentconf(3,1:ns) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = n_currentconf(3,1:ns) cs = cs + ns case (fluxdensity_edge_posx_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,1) * v(1:ns,1) * m_currentconf(1,1:ns,1) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,1) * v(1:ns,1) * m_currentconf(1,1:ns,1) cs = cs + ns case (fluxdensity_edge_posy_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,1) * v(1:ns,1) * m_currentconf(2,1:ns,1) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,1) * v(1:ns,1) * m_currentconf(2,1:ns,1) cs = cs + ns case (fluxdensity_edge_posz_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,1) * v(1:ns,1) * m_currentconf(3,1:ns,1) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,1) * v(1:ns,1) * m_currentconf(3,1:ns,1) cs = cs + ns case (fluxdensity_edge_negx_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = - rhoSgl(1:ns,2) * v(1:ns,2) * m_currentconf(1,1:ns,1) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = - rhoSgl(1:ns,2) * v(1:ns,2) * m_currentconf(1,1:ns,1) cs = cs + ns case (fluxdensity_edge_negy_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = - rhoSgl(1:ns,2) * v(1:ns,2) * m_currentconf(2,1:ns,1) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = - rhoSgl(1:ns,2) * v(1:ns,2) * m_currentconf(2,1:ns,1) cs = cs + ns case (fluxdensity_edge_negz_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = - rhoSgl(1:ns,2) * v(1:ns,2) * m_currentconf(3,1:ns,1) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = - rhoSgl(1:ns,2) * v(1:ns,2) * m_currentconf(3,1:ns,1) cs = cs + ns case (fluxdensity_screw_posx_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,3) * v(1:ns,3) * m_currentconf(1,1:ns,2) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,3) * v(1:ns,3) * m_currentconf(1,1:ns,2) cs = cs + ns case (fluxdensity_screw_posy_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,3) * v(1:ns,3) * m_currentconf(2,1:ns,2) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,3) * v(1:ns,3) * m_currentconf(2,1:ns,2) cs = cs + ns case (fluxdensity_screw_posz_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,3) * v(1:ns,3) * m_currentconf(3,1:ns,2) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = rhoSgl(1:ns,3) * v(1:ns,3) * m_currentconf(3,1:ns,2) cs = cs + ns case (fluxdensity_screw_negx_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = - rhoSgl(1:ns,4) * v(1:ns,4) * m_currentconf(1,1:ns,2) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = - rhoSgl(1:ns,4) * v(1:ns,4) * m_currentconf(1,1:ns,2) cs = cs + ns case (fluxdensity_screw_negy_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = - rhoSgl(1:ns,4) * v(1:ns,4) * m_currentconf(2,1:ns,2) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = - rhoSgl(1:ns,4) * v(1:ns,4) * m_currentconf(2,1:ns,2) cs = cs + ns case (fluxdensity_screw_negz_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = - rhoSgl(1:ns,4) * v(1:ns,4) * m_currentconf(3,1:ns,2) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = - rhoSgl(1:ns,4) * v(1:ns,4) * m_currentconf(3,1:ns,2) cs = cs + ns case (maximumdipoleheight_edge_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = dUpper(1:ns,1) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = dUpper(1:ns,1) cs = cs + ns case (maximumdipoleheight_screw_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = dUpper(1:ns,2) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = dUpper(1:ns,2) cs = cs + ns case(dislocationstress_ID) - sigma = constitutive_nonlocal_dislocationstress(Fe, ip, el) - constitutive_nonlocal_postResults(cs+1_pInt) = sigma(1,1) - constitutive_nonlocal_postResults(cs+2_pInt) = sigma(2,2) - constitutive_nonlocal_postResults(cs+3_pInt) = sigma(3,3) - constitutive_nonlocal_postResults(cs+4_pInt) = sigma(1,2) - constitutive_nonlocal_postResults(cs+5_pInt) = sigma(2,3) - constitutive_nonlocal_postResults(cs+6_pInt) = sigma(3,1) + sigma = plastic_nonlocal_dislocationstress(Fe, ip, el) + plastic_nonlocal_postResults(cs+1_pInt) = sigma(1,1) + plastic_nonlocal_postResults(cs+2_pInt) = sigma(2,2) + plastic_nonlocal_postResults(cs+3_pInt) = sigma(3,3) + plastic_nonlocal_postResults(cs+4_pInt) = sigma(1,2) + plastic_nonlocal_postResults(cs+5_pInt) = sigma(2,3) + plastic_nonlocal_postResults(cs+6_pInt) = sigma(3,1) cs = cs + 6_pInt case(accumulatedshear_ID) - constitutive_nonlocal_postResults(cs+1_pInt:cs+ns) = plasticState(ph)%state(iGamma(1:ns,instance),of) + plastic_nonlocal_postResults(cs+1_pInt:cs+ns) = plasticState(ph)%state(iGamma(1:ns,instance),of) cs = cs + ns end select enddo outputsLoop -end function constitutive_nonlocal_postResults +end function plastic_nonlocal_postResults -end module constitutive_nonlocal +end module plastic_nonlocal diff --git a/code/constitutive_phenopowerlaw.f90 b/code/plastic_phenopowerlaw.f90 similarity index 57% rename from code/constitutive_phenopowerlaw.f90 rename to code/plastic_phenopowerlaw.f90 index 299a40a45..6148db3a1 100644 --- a/code/constitutive_phenopowerlaw.f90 +++ b/code/plastic_phenopowerlaw.f90 @@ -6,7 +6,7 @@ !> @brief material subroutine for phenomenological crystal plasticity formulation using a powerlaw !! fitting !-------------------------------------------------------------------------------------------------- -module constitutive_phenopowerlaw +module plastic_phenopowerlaw use prec, only: & pReal,& pInt @@ -14,67 +14,67 @@ module constitutive_phenopowerlaw implicit none private integer(pInt), dimension(:), allocatable, public, protected :: & - constitutive_phenopowerlaw_sizePostResults !< cumulative size of post results + plastic_phenopowerlaw_sizePostResults !< cumulative size of post results integer(pInt), dimension(:,:), allocatable, target, public :: & - constitutive_phenopowerlaw_sizePostResult !< size of each post result output + plastic_phenopowerlaw_sizePostResult !< size of each post result output character(len=64), dimension(:,:), allocatable, target, public :: & - constitutive_phenopowerlaw_output !< name of each post result output + plastic_phenopowerlaw_output !< name of each post result output integer(pInt), dimension(:), allocatable, target, public :: & - constitutive_phenopowerlaw_Noutput !< number of outputs per instance of this constitution + plastic_phenopowerlaw_Noutput !< number of outputs per instance of this constitution integer(pInt), dimension(:), allocatable, public, protected :: & - constitutive_phenopowerlaw_totalNslip, & !< no. of slip system used in simulation - constitutive_phenopowerlaw_totalNtwin, & !< no. of twin system used in simulation - constitutive_phenopowerlaw_totalNtrans !< no. of trans system used in simulation + plastic_phenopowerlaw_totalNslip, & !< no. of slip system used in simulation + plastic_phenopowerlaw_totalNtwin, & !< no. of twin system used in simulation + plastic_phenopowerlaw_totalNtrans !< no. of trans system used in simulation integer(pInt), dimension(:,:), allocatable, private :: & - constitutive_phenopowerlaw_Nslip, & !< active number of slip systems per family (input parameter, per family) - constitutive_phenopowerlaw_Ntwin, & !< active number of twin systems per family (input parameter, per family) - constitutive_phenopowerlaw_Ntrans !< active number of trans systems per family (input parameter, per family) + plastic_phenopowerlaw_Nslip, & !< active number of slip systems per family (input parameter, per family) + plastic_phenopowerlaw_Ntwin, & !< active number of twin systems per family (input parameter, per family) + plastic_phenopowerlaw_Ntrans !< active number of trans systems per family (input parameter, per family) real(pReal), dimension(:), allocatable, private :: & - 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) - constitutive_phenopowerlaw_n_twin, & !< stress exponent for twin (input parameter) - constitutive_phenopowerlaw_spr, & !< push-up factor for slip saturation due to twinning - constitutive_phenopowerlaw_twinB, & - constitutive_phenopowerlaw_twinC, & - constitutive_phenopowerlaw_twinD, & - constitutive_phenopowerlaw_twinE, & - constitutive_phenopowerlaw_h0_SlipSlip, & !< reference hardening slip - slip (input parameter) - constitutive_phenopowerlaw_h0_SlipTwin, & !< reference hardening slip - twin (input parameter, no effect at the moment) - constitutive_phenopowerlaw_h0_TwinSlip, & !< reference hardening twin - slip (input parameter) - constitutive_phenopowerlaw_h0_TwinTwin, & !< reference hardening twin - twin (input parameter) - constitutive_phenopowerlaw_a_slip, & - constitutive_phenopowerlaw_aTolResistance, & - constitutive_phenopowerlaw_aTolShear, & - constitutive_phenopowerlaw_aTolTwinfrac, & - constitutive_phenopowerlaw_aTolTransfrac, & - constitutive_phenopowerlaw_Cnuc, & !< coefficient for strain-induced martensite nucleation - constitutive_phenopowerlaw_Cdwp, & !< coefficient for double well potential - constitutive_phenopowerlaw_Cgro, & !< coefficient for stress-assisted martensite growth - constitutive_phenopowerlaw_deltaG !< free energy difference between austensite and martensite [MPa] + plastic_phenopowerlaw_gdot0_slip, & !< reference shear strain rate for slip (input parameter) + plastic_phenopowerlaw_gdot0_twin, & !< reference shear strain rate for twin (input parameter) + plastic_phenopowerlaw_n_slip, & !< stress exponent for slip (input parameter) + plastic_phenopowerlaw_n_twin, & !< stress exponent for twin (input parameter) + plastic_phenopowerlaw_spr, & !< push-up factor for slip saturation due to twinning + plastic_phenopowerlaw_twinB, & + plastic_phenopowerlaw_twinC, & + plastic_phenopowerlaw_twinD, & + plastic_phenopowerlaw_twinE, & + plastic_phenopowerlaw_h0_SlipSlip, & !< reference hardening slip - slip (input parameter) + plastic_phenopowerlaw_h0_SlipTwin, & !< reference hardening slip - twin (input parameter, no effect at the moment) + plastic_phenopowerlaw_h0_TwinSlip, & !< reference hardening twin - slip (input parameter) + plastic_phenopowerlaw_h0_TwinTwin, & !< reference hardening twin - twin (input parameter) + plastic_phenopowerlaw_a_slip, & + plastic_phenopowerlaw_aTolResistance, & + plastic_phenopowerlaw_aTolShear, & + plastic_phenopowerlaw_aTolTwinfrac, & + plastic_phenopowerlaw_aTolTransfrac, & + plastic_phenopowerlaw_Cnuc, & !< coefficient for strain-induced martensite nucleation + plastic_phenopowerlaw_Cdwp, & !< coefficient for double well potential + plastic_phenopowerlaw_Cgro, & !< coefficient for stress-assisted martensite growth + plastic_phenopowerlaw_deltaG !< free energy difference between austensite and martensite [MPa] real(pReal), dimension(:,:), allocatable, private :: & - constitutive_phenopowerlaw_tau0_slip, & !< initial critical shear stress for slip (input parameter, per family) - constitutive_phenopowerlaw_tau0_twin, & !< initial critical shear stress for twin (input parameter, per family) - constitutive_phenopowerlaw_tausat_slip, & !< maximum critical shear stress for slip (input parameter, per family) - constitutive_phenopowerlaw_nonSchmidCoeff, & + plastic_phenopowerlaw_tau0_slip, & !< initial critical shear stress for slip (input parameter, per family) + plastic_phenopowerlaw_tau0_twin, & !< initial critical shear stress for twin (input parameter, per family) + plastic_phenopowerlaw_tausat_slip, & !< maximum critical shear stress for slip (input parameter, per family) + plastic_phenopowerlaw_nonSchmidCoeff, & - constitutive_phenopowerlaw_interaction_SlipSlip, & !< interaction factors slip - slip (input parameter) - constitutive_phenopowerlaw_interaction_SlipTwin, & !< interaction factors slip - twin (input parameter) - constitutive_phenopowerlaw_interaction_TwinSlip, & !< interaction factors twin - slip (input parameter) - constitutive_phenopowerlaw_interaction_TwinTwin !< interaction factors twin - twin (input parameter) + plastic_phenopowerlaw_interaction_SlipSlip, & !< interaction factors slip - slip (input parameter) + plastic_phenopowerlaw_interaction_SlipTwin, & !< interaction factors slip - twin (input parameter) + plastic_phenopowerlaw_interaction_TwinSlip, & !< interaction factors twin - slip (input parameter) + plastic_phenopowerlaw_interaction_TwinTwin !< interaction factors twin - twin (input parameter) real(pReal), dimension(:,:,:), allocatable, private :: & - constitutive_phenopowerlaw_hardeningMatrix_SlipSlip, & - constitutive_phenopowerlaw_hardeningMatrix_SlipTwin, & - constitutive_phenopowerlaw_hardeningMatrix_TwinSlip, & - constitutive_phenopowerlaw_hardeningMatrix_TwinTwin + plastic_phenopowerlaw_hardeningMatrix_SlipSlip, & + plastic_phenopowerlaw_hardeningMatrix_SlipTwin, & + plastic_phenopowerlaw_hardeningMatrix_TwinSlip, & + plastic_phenopowerlaw_hardeningMatrix_TwinTwin enum, bind(c) enumerator :: undefined_ID, & @@ -90,18 +90,18 @@ module constitutive_phenopowerlaw totalvolfrac_twin_ID end enum integer(kind(undefined_ID)), dimension(:,:), allocatable, private :: & - constitutive_phenopowerlaw_outputID !< ID of each post result output + plastic_phenopowerlaw_outputID !< ID of each post result output public :: & - constitutive_phenopowerlaw_init, & - constitutive_phenopowerlaw_LpAndItsTangent, & - constitutive_phenopowerlaw_dotState, & - constitutive_phenopowerlaw_getAccumulatedSlip, & - constitutive_phenopowerlaw_getSlipRate, & - constitutive_phenopowerlaw_postResults + plastic_phenopowerlaw_init, & + plastic_phenopowerlaw_LpAndItsTangent, & + plastic_phenopowerlaw_dotState, & + plastic_phenopowerlaw_getAccumulatedSlip, & + plastic_phenopowerlaw_getSlipRate, & + plastic_phenopowerlaw_postResults private :: & - constitutive_phenopowerlaw_aTolState, & - constitutive_phenopowerlaw_stateInit + plastic_phenopowerlaw_aTolState, & + plastic_phenopowerlaw_stateInit contains @@ -111,7 +111,7 @@ contains !> @brief module initialization !> @details reads in material parameters, allocates arrays, and does sanity checks !-------------------------------------------------------------------------------------------------- -subroutine constitutive_phenopowerlaw_init(fileUnit) +subroutine plastic_phenopowerlaw_init(fileUnit) use, intrinsic :: iso_fortran_env ! to get compiler_version and compiler_options (at least for gfortran 4.6 at the moment) use debug, only: & debug_level, & @@ -178,57 +178,57 @@ subroutine constitutive_phenopowerlaw_init(fileUnit) if (iand(debug_level(debug_constitutive),debug_levelBasic) /= 0_pInt) & write(6,'(a16,1x,i5,/)') '# instances:',maxNinstance - allocate(constitutive_phenopowerlaw_sizePostResults(maxNinstance), source=0_pInt) - allocate(constitutive_phenopowerlaw_sizePostResult(maxval(phase_Noutput),maxNinstance), & + allocate(plastic_phenopowerlaw_sizePostResults(maxNinstance), source=0_pInt) + allocate(plastic_phenopowerlaw_sizePostResult(maxval(phase_Noutput),maxNinstance), & source=0_pInt) - allocate(constitutive_phenopowerlaw_output(maxval(phase_Noutput),maxNinstance)) - constitutive_phenopowerlaw_output = '' - allocate(constitutive_phenopowerlaw_outputID(maxval(phase_Noutput),maxNinstance),source=undefined_ID) - allocate(constitutive_phenopowerlaw_Noutput(maxNinstance), source=0_pInt) - allocate(constitutive_phenopowerlaw_Nslip(lattice_maxNslipFamily,maxNinstance), source=0_pInt) - allocate(constitutive_phenopowerlaw_Ntwin(lattice_maxNtwinFamily,maxNinstance), source=0_pInt) - allocate(constitutive_phenopowerlaw_Ntrans(lattice_maxNtransFamily,maxNinstance),source=0_pInt) - allocate(constitutive_phenopowerlaw_totalNslip(maxNinstance), source=0_pInt) - allocate(constitutive_phenopowerlaw_totalNtwin(maxNinstance), source=0_pInt) - allocate(constitutive_phenopowerlaw_totalNtrans(maxNinstance), source=0_pInt) - allocate(constitutive_phenopowerlaw_gdot0_slip(maxNinstance), source=0.0_pReal) - allocate(constitutive_phenopowerlaw_n_slip(maxNinstance), source=0.0_pReal) - allocate(constitutive_phenopowerlaw_tau0_slip(lattice_maxNslipFamily,maxNinstance), & + allocate(plastic_phenopowerlaw_output(maxval(phase_Noutput),maxNinstance)) + plastic_phenopowerlaw_output = '' + allocate(plastic_phenopowerlaw_outputID(maxval(phase_Noutput),maxNinstance),source=undefined_ID) + allocate(plastic_phenopowerlaw_Noutput(maxNinstance), source=0_pInt) + allocate(plastic_phenopowerlaw_Nslip(lattice_maxNslipFamily,maxNinstance), source=0_pInt) + allocate(plastic_phenopowerlaw_Ntwin(lattice_maxNtwinFamily,maxNinstance), source=0_pInt) + allocate(plastic_phenopowerlaw_Ntrans(lattice_maxNtransFamily,maxNinstance),source=0_pInt) + allocate(plastic_phenopowerlaw_totalNslip(maxNinstance), source=0_pInt) + allocate(plastic_phenopowerlaw_totalNtwin(maxNinstance), source=0_pInt) + allocate(plastic_phenopowerlaw_totalNtrans(maxNinstance), source=0_pInt) + allocate(plastic_phenopowerlaw_gdot0_slip(maxNinstance), source=0.0_pReal) + allocate(plastic_phenopowerlaw_n_slip(maxNinstance), source=0.0_pReal) + allocate(plastic_phenopowerlaw_tau0_slip(lattice_maxNslipFamily,maxNinstance), & source=0.0_pReal) - allocate(constitutive_phenopowerlaw_tausat_slip(lattice_maxNslipFamily,maxNinstance), & + allocate(plastic_phenopowerlaw_tausat_slip(lattice_maxNslipFamily,maxNinstance), & source=0.0_pReal) - allocate(constitutive_phenopowerlaw_gdot0_twin(maxNinstance), source=0.0_pReal) - allocate(constitutive_phenopowerlaw_n_twin(maxNinstance), source=0.0_pReal) - allocate(constitutive_phenopowerlaw_tau0_twin(lattice_maxNtwinFamily,maxNinstance), & + allocate(plastic_phenopowerlaw_gdot0_twin(maxNinstance), source=0.0_pReal) + allocate(plastic_phenopowerlaw_n_twin(maxNinstance), source=0.0_pReal) + allocate(plastic_phenopowerlaw_tau0_twin(lattice_maxNtwinFamily,maxNinstance), & source=0.0_pReal) - allocate(constitutive_phenopowerlaw_spr(maxNinstance), source=0.0_pReal) - allocate(constitutive_phenopowerlaw_twinB(maxNinstance), source=0.0_pReal) - allocate(constitutive_phenopowerlaw_twinC(maxNinstance), source=0.0_pReal) - allocate(constitutive_phenopowerlaw_twinD(maxNinstance), source=0.0_pReal) - allocate(constitutive_phenopowerlaw_twinE(maxNinstance), source=0.0_pReal) - allocate(constitutive_phenopowerlaw_h0_SlipSlip(maxNinstance), source=0.0_pReal) - allocate(constitutive_phenopowerlaw_h0_SlipTwin(maxNinstance), source=0.0_pReal) - allocate(constitutive_phenopowerlaw_h0_TwinSlip(maxNinstance), source=0.0_pReal) - allocate(constitutive_phenopowerlaw_h0_TwinTwin(maxNinstance), source=0.0_pReal) - allocate(constitutive_phenopowerlaw_interaction_SlipSlip(lattice_maxNinteraction,maxNinstance), & + allocate(plastic_phenopowerlaw_spr(maxNinstance), source=0.0_pReal) + allocate(plastic_phenopowerlaw_twinB(maxNinstance), source=0.0_pReal) + allocate(plastic_phenopowerlaw_twinC(maxNinstance), source=0.0_pReal) + allocate(plastic_phenopowerlaw_twinD(maxNinstance), source=0.0_pReal) + allocate(plastic_phenopowerlaw_twinE(maxNinstance), source=0.0_pReal) + allocate(plastic_phenopowerlaw_h0_SlipSlip(maxNinstance), source=0.0_pReal) + allocate(plastic_phenopowerlaw_h0_SlipTwin(maxNinstance), source=0.0_pReal) + allocate(plastic_phenopowerlaw_h0_TwinSlip(maxNinstance), source=0.0_pReal) + allocate(plastic_phenopowerlaw_h0_TwinTwin(maxNinstance), source=0.0_pReal) + allocate(plastic_phenopowerlaw_interaction_SlipSlip(lattice_maxNinteraction,maxNinstance), & source=0.0_pReal) - allocate(constitutive_phenopowerlaw_interaction_SlipTwin(lattice_maxNinteraction,maxNinstance), & + allocate(plastic_phenopowerlaw_interaction_SlipTwin(lattice_maxNinteraction,maxNinstance), & source=0.0_pReal) - allocate(constitutive_phenopowerlaw_interaction_TwinSlip(lattice_maxNinteraction,maxNinstance), & + allocate(plastic_phenopowerlaw_interaction_TwinSlip(lattice_maxNinteraction,maxNinstance), & source=0.0_pReal) - allocate(constitutive_phenopowerlaw_interaction_TwinTwin(lattice_maxNinteraction,maxNinstance), & + allocate(plastic_phenopowerlaw_interaction_TwinTwin(lattice_maxNinteraction,maxNinstance), & source=0.0_pReal) - allocate(constitutive_phenopowerlaw_a_slip(maxNinstance), source=0.0_pReal) - allocate(constitutive_phenopowerlaw_aTolResistance(maxNinstance), source=0.0_pReal) - allocate(constitutive_phenopowerlaw_aTolShear(maxNinstance), source=0.0_pReal) - allocate(constitutive_phenopowerlaw_aTolTwinfrac(maxNinstance), source=0.0_pReal) - allocate(constitutive_phenopowerlaw_aTolTransfrac(maxNinstance), source=0.0_pReal) - allocate(constitutive_phenopowerlaw_nonSchmidCoeff(lattice_maxNnonSchmid,maxNinstance), & + allocate(plastic_phenopowerlaw_a_slip(maxNinstance), source=0.0_pReal) + allocate(plastic_phenopowerlaw_aTolResistance(maxNinstance), source=0.0_pReal) + allocate(plastic_phenopowerlaw_aTolShear(maxNinstance), source=0.0_pReal) + allocate(plastic_phenopowerlaw_aTolTwinfrac(maxNinstance), source=0.0_pReal) + allocate(plastic_phenopowerlaw_aTolTransfrac(maxNinstance), source=0.0_pReal) + allocate(plastic_phenopowerlaw_nonSchmidCoeff(lattice_maxNnonSchmid,maxNinstance), & source=0.0_pReal) - allocate(constitutive_phenopowerlaw_Cnuc(maxNinstance), source=0.0_pReal) - allocate(constitutive_phenopowerlaw_Cdwp(maxNinstance), source=0.0_pReal) - allocate(constitutive_phenopowerlaw_Cgro(maxNinstance), source=0.0_pReal) - allocate(constitutive_phenopowerlaw_deltaG(maxNinstance), source=0.0_pReal) + allocate(plastic_phenopowerlaw_Cnuc(maxNinstance), source=0.0_pReal) + allocate(plastic_phenopowerlaw_Cdwp(maxNinstance), source=0.0_pReal) + allocate(plastic_phenopowerlaw_Cgro(maxNinstance), source=0.0_pReal) + allocate(plastic_phenopowerlaw_deltaG(maxNinstance), source=0.0_pReal) rewind(fileUnit) phase = 0_pInt @@ -267,54 +267,54 @@ subroutine constitutive_phenopowerlaw_init(fileUnit) case ('(output)') select case(IO_lc(IO_stringValue(line,positions,2_pInt))) case ('resistance_slip') - constitutive_phenopowerlaw_Noutput(instance) = constitutive_phenopowerlaw_Noutput(instance) + 1_pInt - constitutive_phenopowerlaw_outputID(constitutive_phenopowerlaw_Noutput(instance),instance) = resistance_slip_ID - constitutive_phenopowerlaw_output(constitutive_phenopowerlaw_Noutput(instance),instance) = & + plastic_phenopowerlaw_Noutput(instance) = plastic_phenopowerlaw_Noutput(instance) + 1_pInt + plastic_phenopowerlaw_outputID(plastic_phenopowerlaw_Noutput(instance),instance) = resistance_slip_ID + plastic_phenopowerlaw_output(plastic_phenopowerlaw_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('accumulatedshear_slip') - constitutive_phenopowerlaw_Noutput(instance) = constitutive_phenopowerlaw_Noutput(instance) + 1_pInt - constitutive_phenopowerlaw_outputID(constitutive_phenopowerlaw_Noutput(instance),instance) = accumulatedshear_slip_ID - constitutive_phenopowerlaw_output(constitutive_phenopowerlaw_Noutput(instance),instance) = & + plastic_phenopowerlaw_Noutput(instance) = plastic_phenopowerlaw_Noutput(instance) + 1_pInt + plastic_phenopowerlaw_outputID(plastic_phenopowerlaw_Noutput(instance),instance) = accumulatedshear_slip_ID + plastic_phenopowerlaw_output(plastic_phenopowerlaw_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('shearrate_slip') - constitutive_phenopowerlaw_Noutput(instance) = constitutive_phenopowerlaw_Noutput(instance) + 1_pInt - constitutive_phenopowerlaw_outputID(constitutive_phenopowerlaw_Noutput(instance),instance) = shearrate_slip_ID - constitutive_phenopowerlaw_output(constitutive_phenopowerlaw_Noutput(instance),instance) = & + plastic_phenopowerlaw_Noutput(instance) = plastic_phenopowerlaw_Noutput(instance) + 1_pInt + plastic_phenopowerlaw_outputID(plastic_phenopowerlaw_Noutput(instance),instance) = shearrate_slip_ID + plastic_phenopowerlaw_output(plastic_phenopowerlaw_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('resolvedstress_slip') - constitutive_phenopowerlaw_Noutput(instance) = constitutive_phenopowerlaw_Noutput(instance) + 1_pInt - constitutive_phenopowerlaw_outputID(constitutive_phenopowerlaw_Noutput(instance),instance) = resolvedstress_slip_ID - constitutive_phenopowerlaw_output(constitutive_phenopowerlaw_Noutput(instance),instance) = & + plastic_phenopowerlaw_Noutput(instance) = plastic_phenopowerlaw_Noutput(instance) + 1_pInt + plastic_phenopowerlaw_outputID(plastic_phenopowerlaw_Noutput(instance),instance) = resolvedstress_slip_ID + plastic_phenopowerlaw_output(plastic_phenopowerlaw_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('totalshear') - constitutive_phenopowerlaw_Noutput(instance) = constitutive_phenopowerlaw_Noutput(instance) + 1_pInt - constitutive_phenopowerlaw_outputID(constitutive_phenopowerlaw_Noutput(instance),instance) = totalshear_ID - constitutive_phenopowerlaw_output(constitutive_phenopowerlaw_Noutput(instance),instance) = & + plastic_phenopowerlaw_Noutput(instance) = plastic_phenopowerlaw_Noutput(instance) + 1_pInt + plastic_phenopowerlaw_outputID(plastic_phenopowerlaw_Noutput(instance),instance) = totalshear_ID + plastic_phenopowerlaw_output(plastic_phenopowerlaw_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('resistance_twin') - constitutive_phenopowerlaw_Noutput(instance) = constitutive_phenopowerlaw_Noutput(instance) + 1_pInt - constitutive_phenopowerlaw_outputID(constitutive_phenopowerlaw_Noutput(instance),instance) = resistance_twin_ID - constitutive_phenopowerlaw_output(constitutive_phenopowerlaw_Noutput(instance),instance) = & + plastic_phenopowerlaw_Noutput(instance) = plastic_phenopowerlaw_Noutput(instance) + 1_pInt + plastic_phenopowerlaw_outputID(plastic_phenopowerlaw_Noutput(instance),instance) = resistance_twin_ID + plastic_phenopowerlaw_output(plastic_phenopowerlaw_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('accumulatedshear_twin') - constitutive_phenopowerlaw_Noutput(instance) = constitutive_phenopowerlaw_Noutput(instance) + 1_pInt - constitutive_phenopowerlaw_outputID(constitutive_phenopowerlaw_Noutput(instance),instance) = accumulatedshear_twin_ID - constitutive_phenopowerlaw_output(constitutive_phenopowerlaw_Noutput(instance),instance) = & + plastic_phenopowerlaw_Noutput(instance) = plastic_phenopowerlaw_Noutput(instance) + 1_pInt + plastic_phenopowerlaw_outputID(plastic_phenopowerlaw_Noutput(instance),instance) = accumulatedshear_twin_ID + plastic_phenopowerlaw_output(plastic_phenopowerlaw_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('shearrate_twin') - constitutive_phenopowerlaw_Noutput(instance) = constitutive_phenopowerlaw_Noutput(instance) + 1_pInt - constitutive_phenopowerlaw_outputID(constitutive_phenopowerlaw_Noutput(instance),instance) = shearrate_twin_ID - constitutive_phenopowerlaw_output(constitutive_phenopowerlaw_Noutput(instance),instance) = & + plastic_phenopowerlaw_Noutput(instance) = plastic_phenopowerlaw_Noutput(instance) + 1_pInt + plastic_phenopowerlaw_outputID(plastic_phenopowerlaw_Noutput(instance),instance) = shearrate_twin_ID + plastic_phenopowerlaw_output(plastic_phenopowerlaw_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('resolvedstress_twin') - constitutive_phenopowerlaw_Noutput(instance) = constitutive_phenopowerlaw_Noutput(instance) + 1_pInt - constitutive_phenopowerlaw_outputID(constitutive_phenopowerlaw_Noutput(instance),instance) = resolvedstress_twin_ID - constitutive_phenopowerlaw_output(constitutive_phenopowerlaw_Noutput(instance),instance) = & + plastic_phenopowerlaw_Noutput(instance) = plastic_phenopowerlaw_Noutput(instance) + 1_pInt + plastic_phenopowerlaw_outputID(plastic_phenopowerlaw_Noutput(instance),instance) = resolvedstress_twin_ID + plastic_phenopowerlaw_output(plastic_phenopowerlaw_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case ('totalvolfrac_twin') - constitutive_phenopowerlaw_Noutput(instance) = constitutive_phenopowerlaw_Noutput(instance) + 1_pInt - constitutive_phenopowerlaw_outputID(constitutive_phenopowerlaw_Noutput(instance),instance) = totalvolfrac_twin_ID - constitutive_phenopowerlaw_output(constitutive_phenopowerlaw_Noutput(instance),instance) = & + plastic_phenopowerlaw_Noutput(instance) = plastic_phenopowerlaw_Noutput(instance) + 1_pInt + plastic_phenopowerlaw_outputID(plastic_phenopowerlaw_Noutput(instance),instance) = totalvolfrac_twin_ID + plastic_phenopowerlaw_output(plastic_phenopowerlaw_Noutput(instance),instance) = & IO_lc(IO_stringValue(line,positions,2_pInt)) case default @@ -328,19 +328,19 @@ subroutine constitutive_phenopowerlaw_init(fileUnit) call IO_error(150_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_PHENOPOWERLAW_label//')') Nchunks_SlipFamilies = positions(1) - 1_pInt ! user specified number of (possibly) active slip families (e.g. 6 0 6 --> 3) do j = 1_pInt, Nchunks_SlipFamilies - constitutive_phenopowerlaw_Nslip(j,instance) = IO_intValue(line,positions,1_pInt+j) + plastic_phenopowerlaw_Nslip(j,instance) = IO_intValue(line,positions,1_pInt+j) enddo case ('tausat_slip','tau0_slip') tempPerSlip = 0.0_pReal do j = 1_pInt, Nchunks_SlipFamilies - if (constitutive_phenopowerlaw_Nslip(j,instance) > 0_pInt) & + if (plastic_phenopowerlaw_Nslip(j,instance) > 0_pInt) & tempPerSlip(j) = IO_floatValue(line,positions,1_pInt+j) enddo select case(tag) case ('tausat_slip') - constitutive_phenopowerlaw_tausat_slip(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) + plastic_phenopowerlaw_tausat_slip(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) case ('tau0_slip') - constitutive_phenopowerlaw_tau0_slip(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) + plastic_phenopowerlaw_tau0_slip(1:Nchunks_SlipFamilies,instance) = tempPerSlip(1:Nchunks_SlipFamilies) end select !-------------------------------------------------------------------------------------------------- ! parameters depending on number of twin families @@ -351,12 +351,12 @@ subroutine constitutive_phenopowerlaw_init(fileUnit) call IO_error(150_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_PHENOPOWERLAW_label//')') Nchunks_TwinFamilies = positions(1) - 1_pInt do j = 1_pInt, Nchunks_TwinFamilies - constitutive_phenopowerlaw_Ntwin(j,instance) = IO_intValue(line,positions,1_pInt+j) + plastic_phenopowerlaw_Ntwin(j,instance) = IO_intValue(line,positions,1_pInt+j) enddo case ('tau0_twin') do j = 1_pInt, Nchunks_TwinFamilies - if (constitutive_phenopowerlaw_Ntwin(j,instance) > 0_pInt) & - constitutive_phenopowerlaw_tau0_twin(j,instance) = IO_floatValue(line,positions,1_pInt+j) + if (plastic_phenopowerlaw_Ntwin(j,instance) > 0_pInt) & + plastic_phenopowerlaw_tau0_twin(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo !-------------------------------------------------------------------------------------------------- ! parameters depending on number of transformation families @@ -367,7 +367,7 @@ subroutine constitutive_phenopowerlaw_init(fileUnit) call IO_error(150_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_PHENOPOWERLAW_label//')') Nchunks_TransFamilies = positions(1) - 1_pInt do j = 1_pInt, Nchunks_TransFamilies - constitutive_phenopowerlaw_Ntrans(j,instance) = IO_intValue(line,positions,1_pInt+j) + plastic_phenopowerlaw_Ntrans(j,instance) = IO_intValue(line,positions,1_pInt+j) enddo !-------------------------------------------------------------------------------------------------- ! parameters depending on number of interactions @@ -375,78 +375,78 @@ subroutine constitutive_phenopowerlaw_init(fileUnit) if (positions(1) < 1_pInt + Nchunks_SlipTwin) & call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_PHENOPOWERLAW_label//')') do j = 1_pInt, Nchunks_SlipTwin - constitutive_phenopowerlaw_interaction_SlipTwin(j,instance) = IO_floatValue(line,positions,1_pInt+j) + plastic_phenopowerlaw_interaction_SlipTwin(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('interaction_twinslip') if (positions(1) < 1_pInt + Nchunks_TwinSlip) & call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_PHENOPOWERLAW_label//')') do j = 1_pInt, Nchunks_TwinSlip - constitutive_phenopowerlaw_interaction_TwinSlip(j,instance) = IO_floatValue(line,positions,1_pInt+j) + plastic_phenopowerlaw_interaction_TwinSlip(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('interaction_twintwin') if (positions(1) < 1_pInt + Nchunks_TwinTwin) & call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_PHENOPOWERLAW_label//')') do j = 1_pInt, Nchunks_TwinTwin - constitutive_phenopowerlaw_interaction_TwinTwin(j,instance) = IO_floatValue(line,positions,1_pInt+j) + plastic_phenopowerlaw_interaction_TwinTwin(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case ('nonschmid_coefficients') if (positions(1) < 1_pInt + Nchunks_nonSchmid) & call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_PHENOPOWERLAW_label//')') do j = 1_pInt,Nchunks_nonSchmid - constitutive_phenopowerlaw_nonSchmidCoeff(j,instance) = IO_floatValue(line,positions,1_pInt+j) + plastic_phenopowerlaw_nonSchmidCoeff(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo !-------------------------------------------------------------------------------------------------- ! parameters independent of number of slip/twin systems case ('gdot0_slip') - constitutive_phenopowerlaw_gdot0_slip(instance) = IO_floatValue(line,positions,2_pInt) + plastic_phenopowerlaw_gdot0_slip(instance) = IO_floatValue(line,positions,2_pInt) case ('n_slip') - constitutive_phenopowerlaw_n_slip(instance) = IO_floatValue(line,positions,2_pInt) + plastic_phenopowerlaw_n_slip(instance) = IO_floatValue(line,positions,2_pInt) case ('a_slip', 'w0_slip') - constitutive_phenopowerlaw_a_slip(instance) = IO_floatValue(line,positions,2_pInt) + plastic_phenopowerlaw_a_slip(instance) = IO_floatValue(line,positions,2_pInt) case ('gdot0_twin') - constitutive_phenopowerlaw_gdot0_twin(instance) = IO_floatValue(line,positions,2_pInt) + plastic_phenopowerlaw_gdot0_twin(instance) = IO_floatValue(line,positions,2_pInt) case ('n_twin') - constitutive_phenopowerlaw_n_twin(instance) = IO_floatValue(line,positions,2_pInt) + plastic_phenopowerlaw_n_twin(instance) = IO_floatValue(line,positions,2_pInt) case ('s_pr') - constitutive_phenopowerlaw_spr(instance) = IO_floatValue(line,positions,2_pInt) + plastic_phenopowerlaw_spr(instance) = IO_floatValue(line,positions,2_pInt) case ('twin_b') - constitutive_phenopowerlaw_twinB(instance) = IO_floatValue(line,positions,2_pInt) + plastic_phenopowerlaw_twinB(instance) = IO_floatValue(line,positions,2_pInt) case ('twin_c') - constitutive_phenopowerlaw_twinC(instance) = IO_floatValue(line,positions,2_pInt) + plastic_phenopowerlaw_twinC(instance) = IO_floatValue(line,positions,2_pInt) case ('twin_d') - constitutive_phenopowerlaw_twinD(instance) = IO_floatValue(line,positions,2_pInt) + plastic_phenopowerlaw_twinD(instance) = IO_floatValue(line,positions,2_pInt) case ('twin_e') - constitutive_phenopowerlaw_twinE(instance) = IO_floatValue(line,positions,2_pInt) + plastic_phenopowerlaw_twinE(instance) = IO_floatValue(line,positions,2_pInt) case ('h0_slipslip') - constitutive_phenopowerlaw_h0_SlipSlip(instance) = IO_floatValue(line,positions,2_pInt) + plastic_phenopowerlaw_h0_SlipSlip(instance) = IO_floatValue(line,positions,2_pInt) case ('h0_sliptwin') - constitutive_phenopowerlaw_h0_SlipTwin(instance) = IO_floatValue(line,positions,2_pInt) + plastic_phenopowerlaw_h0_SlipTwin(instance) = IO_floatValue(line,positions,2_pInt) call IO_warning(42_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_PHENOPOWERLAW_label//')') case ('h0_twinslip') - constitutive_phenopowerlaw_h0_TwinSlip(instance) = IO_floatValue(line,positions,2_pInt) + plastic_phenopowerlaw_h0_TwinSlip(instance) = IO_floatValue(line,positions,2_pInt) case ('h0_twintwin') - constitutive_phenopowerlaw_h0_TwinTwin(instance) = IO_floatValue(line,positions,2_pInt) + plastic_phenopowerlaw_h0_TwinTwin(instance) = IO_floatValue(line,positions,2_pInt) case ('atol_resistance') - constitutive_phenopowerlaw_aTolResistance(instance) = IO_floatValue(line,positions,2_pInt) + plastic_phenopowerlaw_aTolResistance(instance) = IO_floatValue(line,positions,2_pInt) case ('atol_shear') - constitutive_phenopowerlaw_aTolShear(instance) = IO_floatValue(line,positions,2_pInt) + plastic_phenopowerlaw_aTolShear(instance) = IO_floatValue(line,positions,2_pInt) case ('atol_twinfrac') - constitutive_phenopowerlaw_aTolTwinfrac(instance) = IO_floatValue(line,positions,2_pInt) + plastic_phenopowerlaw_aTolTwinfrac(instance) = IO_floatValue(line,positions,2_pInt) case ('atol_transfrac') - constitutive_phenopowerlaw_aTolTransfrac(instance) = IO_floatValue(line,positions,2_pInt) + plastic_phenopowerlaw_aTolTransfrac(instance) = IO_floatValue(line,positions,2_pInt) case ('cnuc') - constitutive_phenopowerlaw_Cnuc(instance) = IO_floatValue(line,positions,2_pInt) + plastic_phenopowerlaw_Cnuc(instance) = IO_floatValue(line,positions,2_pInt) case ('cdwp') - constitutive_phenopowerlaw_Cdwp(instance) = IO_floatValue(line,positions,2_pInt) + plastic_phenopowerlaw_Cdwp(instance) = IO_floatValue(line,positions,2_pInt) case ('cgro') - constitutive_phenopowerlaw_Cgro(instance) = IO_floatValue(line,positions,2_pInt) + plastic_phenopowerlaw_Cgro(instance) = IO_floatValue(line,positions,2_pInt) case ('deltag') - constitutive_phenopowerlaw_deltaG(instance) = IO_floatValue(line,positions,2_pInt) + plastic_phenopowerlaw_deltaG(instance) = IO_floatValue(line,positions,2_pInt) case ('interaction_slipslip') if (positions(1) < 1_pInt + Nchunks_SlipSlip) & call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_PHENOPOWERLAW_label//')') do j = 1_pInt, Nchunks_SlipSlip - constitutive_phenopowerlaw_interaction_SlipSlip(j,instance) = IO_floatValue(line,positions,1_pInt+j) + plastic_phenopowerlaw_interaction_SlipSlip(j,instance) = IO_floatValue(line,positions,1_pInt+j) enddo case default @@ -457,62 +457,62 @@ subroutine constitutive_phenopowerlaw_init(fileUnit) sanityChecks: do phase = 1_pInt, size(phase_plasticity) myPhase: if (phase_plasticity(phase) == PLASTICITY_phenopowerlaw_ID) then instance = phase_plasticityInstance(phase) - constitutive_phenopowerlaw_Nslip(1:lattice_maxNslipFamily,instance) = & + plastic_phenopowerlaw_Nslip(1:lattice_maxNslipFamily,instance) = & min(lattice_NslipSystem(1:lattice_maxNslipFamily,phase),& ! limit active slip systems per family to min of available and requested - constitutive_phenopowerlaw_Nslip(1:lattice_maxNslipFamily,instance)) - constitutive_phenopowerlaw_Ntwin(1:lattice_maxNtwinFamily,instance) = & + plastic_phenopowerlaw_Nslip(1:lattice_maxNslipFamily,instance)) + plastic_phenopowerlaw_Ntwin(1:lattice_maxNtwinFamily,instance) = & min(lattice_NtwinSystem(1:lattice_maxNtwinFamily,phase),& ! limit active twin systems per family to min of available and requested - constitutive_phenopowerlaw_Ntwin(:,instance)) - constitutive_phenopowerlaw_totalNslip(instance) = sum(constitutive_phenopowerlaw_Nslip(:,instance)) ! how many slip systems altogether - constitutive_phenopowerlaw_totalNtwin(instance) = sum(constitutive_phenopowerlaw_Ntwin(:,instance)) ! how many twin systems altogether - constitutive_phenopowerlaw_totalNtrans(instance) = sum(constitutive_phenopowerlaw_Ntrans(:,instance)) ! how many trans systems altogether + plastic_phenopowerlaw_Ntwin(:,instance)) + plastic_phenopowerlaw_totalNslip(instance) = sum(plastic_phenopowerlaw_Nslip(:,instance)) ! how many slip systems altogether + plastic_phenopowerlaw_totalNtwin(instance) = sum(plastic_phenopowerlaw_Ntwin(:,instance)) ! how many twin systems altogether + plastic_phenopowerlaw_totalNtrans(instance) = sum(plastic_phenopowerlaw_Ntrans(:,instance)) ! how many trans systems altogether - if (any(constitutive_phenopowerlaw_tau0_slip(:,instance) < 0.0_pReal .and. & - constitutive_phenopowerlaw_Nslip(:,instance) > 0)) & + if (any(plastic_phenopowerlaw_tau0_slip(:,instance) < 0.0_pReal .and. & + plastic_phenopowerlaw_Nslip(:,instance) > 0)) & call IO_error(211_pInt,el=instance,ext_msg='tau0_slip ('//PLASTICITY_PHENOPOWERLAW_label//')') - if (constitutive_phenopowerlaw_gdot0_slip(instance) <= 0.0_pReal) & + if (plastic_phenopowerlaw_gdot0_slip(instance) <= 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='gdot0_slip ('//PLASTICITY_PHENOPOWERLAW_label//')') - if (constitutive_phenopowerlaw_n_slip(instance) <= 0.0_pReal) & + if (plastic_phenopowerlaw_n_slip(instance) <= 0.0_pReal) & call IO_error(211_pInt,el=instance,ext_msg='n_slip ('//PLASTICITY_PHENOPOWERLAW_label//')') - if (any(constitutive_phenopowerlaw_tausat_slip(:,instance) <= 0.0_pReal .and. & - constitutive_phenopowerlaw_Nslip(:,instance) > 0)) & + if (any(plastic_phenopowerlaw_tausat_slip(:,instance) <= 0.0_pReal .and. & + plastic_phenopowerlaw_Nslip(:,instance) > 0)) & call IO_error(211_pInt,el=instance,ext_msg='tausat_slip ('//PLASTICITY_PHENOPOWERLAW_label//')') - if (any(constitutive_phenopowerlaw_a_slip(instance) == 0.0_pReal .and. & - constitutive_phenopowerlaw_Nslip(:,instance) > 0)) & + if (any(plastic_phenopowerlaw_a_slip(instance) == 0.0_pReal .and. & + plastic_phenopowerlaw_Nslip(:,instance) > 0)) & call IO_error(211_pInt,el=instance,ext_msg='a_slip ('//PLASTICITY_PHENOPOWERLAW_label//')') - if (any(constitutive_phenopowerlaw_tau0_twin(:,instance) < 0.0_pReal .and. & - constitutive_phenopowerlaw_Ntwin(:,instance) > 0)) & + if (any(plastic_phenopowerlaw_tau0_twin(:,instance) < 0.0_pReal .and. & + plastic_phenopowerlaw_Ntwin(:,instance) > 0)) & call IO_error(211_pInt,el=instance,ext_msg='tau0_twin ('//PLASTICITY_PHENOPOWERLAW_label//')') - if ( constitutive_phenopowerlaw_gdot0_twin(instance) <= 0.0_pReal .and. & - any(constitutive_phenopowerlaw_Ntwin(:,instance) > 0)) & + if ( plastic_phenopowerlaw_gdot0_twin(instance) <= 0.0_pReal .and. & + any(plastic_phenopowerlaw_Ntwin(:,instance) > 0)) & call IO_error(211_pInt,el=instance,ext_msg='gdot0_twin ('//PLASTICITY_PHENOPOWERLAW_label//')') - if ( constitutive_phenopowerlaw_n_twin(instance) <= 0.0_pReal .and. & - any(constitutive_phenopowerlaw_Ntwin(:,instance) > 0)) & + if ( plastic_phenopowerlaw_n_twin(instance) <= 0.0_pReal .and. & + any(plastic_phenopowerlaw_Ntwin(:,instance) > 0)) & call IO_error(211_pInt,el=instance,ext_msg='n_twin ('//PLASTICITY_PHENOPOWERLAW_label//')') - if (constitutive_phenopowerlaw_aTolResistance(instance) <= 0.0_pReal) & - constitutive_phenopowerlaw_aTolResistance(instance) = 1.0_pReal ! default absolute tolerance 1 Pa - if (constitutive_phenopowerlaw_aTolShear(instance) <= 0.0_pReal) & - constitutive_phenopowerlaw_aTolShear(instance) = 1.0e-6_pReal ! default absolute tolerance 1e-6 - if (constitutive_phenopowerlaw_aTolTwinfrac(instance) <= 0.0_pReal) & - constitutive_phenopowerlaw_aTolTwinfrac(instance) = 1.0e-6_pReal ! default absolute tolerance 1e-6 - if (constitutive_phenopowerlaw_aTolTransfrac(instance) <= 0.0_pReal) & - constitutive_phenopowerlaw_aTolTransfrac(instance) = 1.0e-6_pReal ! default absolute tolerance 1e-6 + if (plastic_phenopowerlaw_aTolResistance(instance) <= 0.0_pReal) & + plastic_phenopowerlaw_aTolResistance(instance) = 1.0_pReal ! default absolute tolerance 1 Pa + if (plastic_phenopowerlaw_aTolShear(instance) <= 0.0_pReal) & + plastic_phenopowerlaw_aTolShear(instance) = 1.0e-6_pReal ! default absolute tolerance 1e-6 + if (plastic_phenopowerlaw_aTolTwinfrac(instance) <= 0.0_pReal) & + plastic_phenopowerlaw_aTolTwinfrac(instance) = 1.0e-6_pReal ! default absolute tolerance 1e-6 + if (plastic_phenopowerlaw_aTolTransfrac(instance) <= 0.0_pReal) & + plastic_phenopowerlaw_aTolTransfrac(instance) = 1.0e-6_pReal ! default absolute tolerance 1e-6 endif myPhase enddo sanityChecks !-------------------------------------------------------------------------------------------------- ! allocation of variables whose size depends on the total number of active slip systems - allocate(constitutive_phenopowerlaw_hardeningMatrix_SlipSlip(maxval(constitutive_phenopowerlaw_totalNslip),& ! slip resistance from slip activity - maxval(constitutive_phenopowerlaw_totalNslip),& + allocate(plastic_phenopowerlaw_hardeningMatrix_SlipSlip(maxval(plastic_phenopowerlaw_totalNslip),& ! slip resistance from slip activity + maxval(plastic_phenopowerlaw_totalNslip),& maxNinstance), source=0.0_pReal) - allocate(constitutive_phenopowerlaw_hardeningMatrix_SlipTwin(maxval(constitutive_phenopowerlaw_totalNslip),& ! slip resistance from twin activity - maxval(constitutive_phenopowerlaw_totalNtwin),& + allocate(plastic_phenopowerlaw_hardeningMatrix_SlipTwin(maxval(plastic_phenopowerlaw_totalNslip),& ! slip resistance from twin activity + maxval(plastic_phenopowerlaw_totalNtwin),& maxNinstance), source=0.0_pReal) - allocate(constitutive_phenopowerlaw_hardeningMatrix_TwinSlip(maxval(constitutive_phenopowerlaw_totalNtwin),& ! twin resistance from slip activity - maxval(constitutive_phenopowerlaw_totalNslip),& + allocate(plastic_phenopowerlaw_hardeningMatrix_TwinSlip(maxval(plastic_phenopowerlaw_totalNtwin),& ! twin resistance from slip activity + maxval(plastic_phenopowerlaw_totalNslip),& maxNinstance), source=0.0_pReal) - allocate(constitutive_phenopowerlaw_hardeningMatrix_TwinTwin(maxval(constitutive_phenopowerlaw_totalNtwin),& ! twin resistance from twin activity - maxval(constitutive_phenopowerlaw_totalNtwin),& + allocate(plastic_phenopowerlaw_hardeningMatrix_TwinTwin(maxval(plastic_phenopowerlaw_totalNtwin),& ! twin resistance from twin activity + maxval(plastic_phenopowerlaw_totalNtwin),& maxNinstance), source=0.0_pReal) initializeInstances: do phase = 1_pInt, size(phase_plasticity) ! loop through all phases in material.config @@ -522,20 +522,20 @@ subroutine constitutive_phenopowerlaw_init(fileUnit) !-------------------------------------------------------------------------------------------------- ! Determine size of postResults array - outputsLoop: do o = 1_pInt,constitutive_phenopowerlaw_Noutput(instance) - select case(constitutive_phenopowerlaw_outputID(o,instance)) + outputsLoop: do o = 1_pInt,plastic_phenopowerlaw_Noutput(instance) + select case(plastic_phenopowerlaw_outputID(o,instance)) case(resistance_slip_ID, & shearrate_slip_ID, & accumulatedshear_slip_ID, & resolvedstress_slip_ID & ) - mySize = constitutive_phenopowerlaw_totalNslip(instance) + mySize = plastic_phenopowerlaw_totalNslip(instance) case(resistance_twin_ID, & shearrate_twin_ID, & accumulatedshear_twin_ID, & resolvedstress_twin_ID & ) - mySize = constitutive_phenopowerlaw_totalNtwin(instance) + mySize = plastic_phenopowerlaw_totalNtwin(instance) case(totalshear_ID, & totalvolfrac_twin_ID & ) @@ -544,22 +544,22 @@ subroutine constitutive_phenopowerlaw_init(fileUnit) end select outputFound: if (mySize > 0_pInt) then - constitutive_phenopowerlaw_sizePostResult(o,instance) = mySize - constitutive_phenopowerlaw_sizePostResults(instance) = constitutive_phenopowerlaw_sizePostResults(instance) + mySize + plastic_phenopowerlaw_sizePostResult(o,instance) = mySize + plastic_phenopowerlaw_sizePostResults(instance) = plastic_phenopowerlaw_sizePostResults(instance) + mySize endif outputFound enddo outputsLoop !-------------------------------------------------------------------------------------------------- ! allocate state arrays - sizeState = constitutive_phenopowerlaw_totalNslip(instance) & ! s_slip - + constitutive_phenopowerlaw_totalNtwin(instance) & ! s_twin + sizeState = plastic_phenopowerlaw_totalNslip(instance) & ! s_slip + + plastic_phenopowerlaw_totalNtwin(instance) & ! s_twin + 2_pInt & ! sum(gamma) + sum(f) - + constitutive_phenopowerlaw_totalNslip(instance) & ! accshear_slip - + constitutive_phenopowerlaw_totalNtwin(instance) ! accshear_twin + + plastic_phenopowerlaw_totalNslip(instance) & ! accshear_slip + + plastic_phenopowerlaw_totalNtwin(instance) ! accshear_twin sizeDotState = sizeState plasticState(phase)%sizeState = sizeState plasticState(phase)%sizeDotState = sizeDotState - plasticState(phase)%sizePostResults = constitutive_phenopowerlaw_sizePostResults(instance) + plasticState(phase)%sizePostResults = plastic_phenopowerlaw_sizePostResults(instance) allocate(plasticState(phase)%aTolState ( sizeState), source=0.0_pReal) allocate(plasticState(phase)%state0 ( sizeState,NipcMyPhase), source=0.0_pReal) allocate(plasticState(phase)%partionedState0 ( sizeState,NipcMyPhase), source=0.0_pReal) @@ -578,23 +578,23 @@ subroutine constitutive_phenopowerlaw_init(fileUnit) allocate(plasticState(phase)%RKCK45dotState (6,sizeDotState,NipcMyPhase), source=0.0_pReal) do f = 1_pInt,lattice_maxNslipFamily ! >>> interaction slip -- X - index_myFamily = sum(constitutive_phenopowerlaw_Nslip(1:f-1_pInt,instance)) - do j = 1_pInt,constitutive_phenopowerlaw_Nslip(f,instance) ! loop over (active) systems in my family (slip) + index_myFamily = sum(plastic_phenopowerlaw_Nslip(1:f-1_pInt,instance)) + do j = 1_pInt,plastic_phenopowerlaw_Nslip(f,instance) ! loop over (active) systems in my family (slip) do o = 1_pInt,lattice_maxNslipFamily - index_otherFamily = sum(constitutive_phenopowerlaw_Nslip(1:o-1_pInt,instance)) - do k = 1_pInt,constitutive_phenopowerlaw_Nslip(o,instance) ! loop over (active) systems in other family (slip) - constitutive_phenopowerlaw_hardeningMatrix_SlipSlip(index_myFamily+j,index_otherFamily+k,instance) = & - constitutive_phenopowerlaw_interaction_SlipSlip(lattice_interactionSlipSlip( & + index_otherFamily = sum(plastic_phenopowerlaw_Nslip(1:o-1_pInt,instance)) + do k = 1_pInt,plastic_phenopowerlaw_Nslip(o,instance) ! loop over (active) systems in other family (slip) + plastic_phenopowerlaw_hardeningMatrix_SlipSlip(index_myFamily+j,index_otherFamily+k,instance) = & + plastic_phenopowerlaw_interaction_SlipSlip(lattice_interactionSlipSlip( & sum(lattice_NslipSystem(1:f-1,phase))+j, & sum(lattice_NslipSystem(1:o-1,phase))+k, & phase), instance ) enddo; enddo do o = 1_pInt,lattice_maxNtwinFamily - index_otherFamily = sum(constitutive_phenopowerlaw_Ntwin(1:o-1_pInt,instance)) - do k = 1_pInt,constitutive_phenopowerlaw_Ntwin(o,instance) ! loop over (active) systems in other family (twin) - constitutive_phenopowerlaw_hardeningMatrix_SlipTwin(index_myFamily+j,index_otherFamily+k,instance) = & - constitutive_phenopowerlaw_interaction_SlipTwin(lattice_interactionSlipTwin( & + index_otherFamily = sum(plastic_phenopowerlaw_Ntwin(1:o-1_pInt,instance)) + do k = 1_pInt,plastic_phenopowerlaw_Ntwin(o,instance) ! loop over (active) systems in other family (twin) + plastic_phenopowerlaw_hardeningMatrix_SlipTwin(index_myFamily+j,index_otherFamily+k,instance) = & + plastic_phenopowerlaw_interaction_SlipTwin(lattice_interactionSlipTwin( & sum(lattice_NslipSystem(1:f-1_pInt,phase))+j, & sum(lattice_NtwinSystem(1:o-1_pInt,phase))+k, & phase), instance ) @@ -603,24 +603,24 @@ subroutine constitutive_phenopowerlaw_init(fileUnit) enddo; enddo do f = 1_pInt,lattice_maxNtwinFamily ! >>> interaction twin -- X - index_myFamily = sum(constitutive_phenopowerlaw_Ntwin(1:f-1_pInt,instance)) - do j = 1_pInt,constitutive_phenopowerlaw_Ntwin(f,instance) ! loop over (active) systems in my family (twin) + index_myFamily = sum(plastic_phenopowerlaw_Ntwin(1:f-1_pInt,instance)) + do j = 1_pInt,plastic_phenopowerlaw_Ntwin(f,instance) ! loop over (active) systems in my family (twin) do o = 1_pInt,lattice_maxNslipFamily - index_otherFamily = sum(constitutive_phenopowerlaw_Nslip(1:o-1_pInt,instance)) - do k = 1_pInt,constitutive_phenopowerlaw_Nslip(o,instance) ! loop over (active) systems in other family (slip) - constitutive_phenopowerlaw_hardeningMatrix_TwinSlip(index_myFamily+j,index_otherFamily+k,instance) = & - constitutive_phenopowerlaw_interaction_TwinSlip(lattice_interactionTwinSlip( & + index_otherFamily = sum(plastic_phenopowerlaw_Nslip(1:o-1_pInt,instance)) + do k = 1_pInt,plastic_phenopowerlaw_Nslip(o,instance) ! loop over (active) systems in other family (slip) + plastic_phenopowerlaw_hardeningMatrix_TwinSlip(index_myFamily+j,index_otherFamily+k,instance) = & + plastic_phenopowerlaw_interaction_TwinSlip(lattice_interactionTwinSlip( & sum(lattice_NtwinSystem(1:f-1_pInt,phase))+j, & sum(lattice_NslipSystem(1:o-1_pInt,phase))+k, & phase), instance ) enddo; enddo do o = 1_pInt,lattice_maxNtwinFamily - index_otherFamily = sum(constitutive_phenopowerlaw_Ntwin(1:o-1_pInt,instance)) - do k = 1_pInt,constitutive_phenopowerlaw_Ntwin(o,instance) ! loop over (active) systems in other family (twin) - constitutive_phenopowerlaw_hardeningMatrix_TwinTwin(index_myFamily+j,index_otherFamily+k,instance) = & - constitutive_phenopowerlaw_interaction_TwinTwin(lattice_interactionTwinTwin( & + index_otherFamily = sum(plastic_phenopowerlaw_Ntwin(1:o-1_pInt,instance)) + do k = 1_pInt,plastic_phenopowerlaw_Ntwin(o,instance) ! loop over (active) systems in other family (twin) + plastic_phenopowerlaw_hardeningMatrix_TwinTwin(index_myFamily+j,index_otherFamily+k,instance) = & + plastic_phenopowerlaw_interaction_TwinTwin(lattice_interactionTwinTwin( & sum(lattice_NtwinSystem(1:f-1_pInt,phase))+j, & sum(lattice_NtwinSystem(1:o-1_pInt,phase))+k, & phase), instance ) @@ -628,18 +628,18 @@ subroutine constitutive_phenopowerlaw_init(fileUnit) enddo; enddo - call constitutive_phenopowerlaw_stateInit(phase,instance) - call constitutive_phenopowerlaw_aTolState(phase,instance) + call plastic_phenopowerlaw_stateInit(phase,instance) + call plastic_phenopowerlaw_aTolState(phase,instance) endif myPhase2 enddo initializeInstances -end subroutine constitutive_phenopowerlaw_init +end subroutine plastic_phenopowerlaw_init !-------------------------------------------------------------------------------------------------- !> @brief sets the initial microstructural state for a given instance of this plasticity !-------------------------------------------------------------------------------------------------- -subroutine constitutive_phenopowerlaw_stateInit(ph,instance) +subroutine plastic_phenopowerlaw_stateInit(ph,instance) use lattice, only: & lattice_maxNslipFamily, & lattice_maxNtwinFamily @@ -657,30 +657,30 @@ subroutine constitutive_phenopowerlaw_stateInit(ph,instance) tempState = 0.0_pReal do i = 1_pInt,lattice_maxNslipFamily - tempState(1+sum(constitutive_phenopowerlaw_Nslip(1:i-1,instance)) : & - sum(constitutive_phenopowerlaw_Nslip(1:i ,instance))) = & - constitutive_phenopowerlaw_tau0_slip(i,instance) + tempState(1+sum(plastic_phenopowerlaw_Nslip(1:i-1,instance)) : & + sum(plastic_phenopowerlaw_Nslip(1:i ,instance))) = & + plastic_phenopowerlaw_tau0_slip(i,instance) enddo do i = 1_pInt,lattice_maxNtwinFamily - tempState(1+sum(constitutive_phenopowerlaw_Nslip(:,instance))+& - sum(constitutive_phenopowerlaw_Ntwin(1:i-1,instance)) : & - sum(constitutive_phenopowerlaw_Nslip(:,instance))+& - sum(constitutive_phenopowerlaw_Ntwin(1:i ,instance))) = & - constitutive_phenopowerlaw_tau0_twin(i,instance) + tempState(1+sum(plastic_phenopowerlaw_Nslip(:,instance))+& + sum(plastic_phenopowerlaw_Ntwin(1:i-1,instance)) : & + sum(plastic_phenopowerlaw_Nslip(:,instance))+& + sum(plastic_phenopowerlaw_Ntwin(1:i ,instance))) = & + plastic_phenopowerlaw_tau0_twin(i,instance) enddo plasticState(ph)%state0(:,:) = spread(tempState, & ! spread single tempstate array 2, & ! along dimension 2 size(plasticState(ph)%state0(1,:))) ! number of copies (number of IPCs) -end subroutine constitutive_phenopowerlaw_stateInit +end subroutine plastic_phenopowerlaw_stateInit !-------------------------------------------------------------------------------------------------- !> @brief sets the relevant state values for a given instance of this plasticity !-------------------------------------------------------------------------------------------------- -subroutine constitutive_phenopowerlaw_aTolState(ph,instance) +subroutine plastic_phenopowerlaw_aTolState(ph,instance) use material, only: & plasticState @@ -689,28 +689,28 @@ subroutine constitutive_phenopowerlaw_aTolState(ph,instance) instance, & !< number specifying the instance of the plasticity ph - plasticState(ph)%aTolState(1:constitutive_phenopowerlaw_totalNslip(instance)+ & - constitutive_phenopowerlaw_totalNtwin(instance)) = & - constitutive_phenopowerlaw_aTolResistance(instance) - plasticState(ph)%aTolState(1+constitutive_phenopowerlaw_totalNslip(instance)+ & - constitutive_phenopowerlaw_totalNtwin(instance)) = & - constitutive_phenopowerlaw_aTolShear(instance) - plasticState(ph)%aTolState(2+constitutive_phenopowerlaw_totalNslip(instance)+ & - constitutive_phenopowerlaw_totalNtwin(instance)) = & - constitutive_phenopowerlaw_aTolTwinFrac(instance) - plasticState(ph)%aTolState(3+constitutive_phenopowerlaw_totalNslip(instance)+ & - constitutive_phenopowerlaw_totalNtwin(instance): & - 2+2*(constitutive_phenopowerlaw_totalNslip(instance)+ & - constitutive_phenopowerlaw_totalNtwin(instance))) = & - constitutive_phenopowerlaw_aTolShear(instance) + plasticState(ph)%aTolState(1:plastic_phenopowerlaw_totalNslip(instance)+ & + plastic_phenopowerlaw_totalNtwin(instance)) = & + plastic_phenopowerlaw_aTolResistance(instance) + plasticState(ph)%aTolState(1+plastic_phenopowerlaw_totalNslip(instance)+ & + plastic_phenopowerlaw_totalNtwin(instance)) = & + plastic_phenopowerlaw_aTolShear(instance) + plasticState(ph)%aTolState(2+plastic_phenopowerlaw_totalNslip(instance)+ & + plastic_phenopowerlaw_totalNtwin(instance)) = & + plastic_phenopowerlaw_aTolTwinFrac(instance) + plasticState(ph)%aTolState(3+plastic_phenopowerlaw_totalNslip(instance)+ & + plastic_phenopowerlaw_totalNtwin(instance): & + 2+2*(plastic_phenopowerlaw_totalNslip(instance)+ & + plastic_phenopowerlaw_totalNtwin(instance))) = & + plastic_phenopowerlaw_aTolShear(instance) -end subroutine constitutive_phenopowerlaw_aTolState +end subroutine plastic_phenopowerlaw_aTolState !-------------------------------------------------------------------------------------------------- !> @brief calculates plastic velocity gradient and its tangent !-------------------------------------------------------------------------------------------------- -subroutine constitutive_phenopowerlaw_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,slipDamage,ipc,ip,el) +subroutine plastic_phenopowerlaw_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,slipDamage,ipc,ip,el) use math, only: & math_Plain3333to99, & math_Mandel6to33 @@ -743,7 +743,7 @@ subroutine constitutive_phenopowerlaw_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,sl real(pReal), dimension(6), intent(in) :: & Tstar_v !< 2nd Piola Kirchhoff stress tensor in Mandel notation real(pReal), & - dimension(constitutive_phenopowerlaw_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))), & + dimension(plastic_phenopowerlaw_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))), & intent(in) :: & slipDamage @@ -767,8 +767,8 @@ subroutine constitutive_phenopowerlaw_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,sl of = mappingConstitutive(1,ipc,ip,el) ph = mappingConstitutive(2,ipc,ip,el) instance = phase_plasticityInstance(ph) - nSlip = constitutive_phenopowerlaw_totalNslip(instance) - nTwin = constitutive_phenopowerlaw_totalNtwin(instance) + nSlip = plastic_phenopowerlaw_totalNslip(instance) + nTwin = plastic_phenopowerlaw_totalNtwin(instance) index_Gamma = nSlip + nTwin + 1_pInt index_F = nSlip + nTwin + 2_pInt @@ -781,7 +781,7 @@ subroutine constitutive_phenopowerlaw_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,sl j = 0_pInt slipFamilies: do f = 1_pInt,lattice_maxNslipFamily index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family - slipSystems: do i = 1_pInt,constitutive_phenopowerlaw_Nslip(f,instance) + slipSystems: do i = 1_pInt,plastic_phenopowerlaw_Nslip(f,instance) j = j+1_pInt ! Calculation of Lp @@ -790,29 +790,29 @@ subroutine constitutive_phenopowerlaw_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,sl nonSchmid_tensor(1:3,1:3,1) = lattice_Sslip(1:3,1:3,1,index_myFamily+i,ph) nonSchmid_tensor(1:3,1:3,2) = nonSchmid_tensor(1:3,1:3,1) do k = 1,lattice_NnonSchmid(ph) - tau_slip_pos = tau_slip_pos + constitutive_phenopowerlaw_nonSchmidCoeff(k,instance)* & + tau_slip_pos = tau_slip_pos + plastic_phenopowerlaw_nonSchmidCoeff(k,instance)* & dot_product(Tstar_v,lattice_Sslip_v(1:6,2*k,index_myFamily+i,ph)) - tau_slip_neg = tau_slip_neg + constitutive_phenopowerlaw_nonSchmidCoeff(k,instance)* & + tau_slip_neg = tau_slip_neg + plastic_phenopowerlaw_nonSchmidCoeff(k,instance)* & dot_product(Tstar_v,lattice_Sslip_v(1:6,2*k+1,index_myFamily+i,ph)) - nonSchmid_tensor(1:3,1:3,1) = nonSchmid_tensor(1:3,1:3,1) + constitutive_phenopowerlaw_nonSchmidCoeff(k,instance)*& + nonSchmid_tensor(1:3,1:3,1) = nonSchmid_tensor(1:3,1:3,1) + plastic_phenopowerlaw_nonSchmidCoeff(k,instance)*& lattice_Sslip(1:3,1:3,2*k,index_myFamily+i,ph) - nonSchmid_tensor(1:3,1:3,2) = nonSchmid_tensor(1:3,1:3,2) + constitutive_phenopowerlaw_nonSchmidCoeff(k,instance)*& + nonSchmid_tensor(1:3,1:3,2) = nonSchmid_tensor(1:3,1:3,2) + plastic_phenopowerlaw_nonSchmidCoeff(k,instance)*& lattice_Sslip(1:3,1:3,2*k+1,index_myFamily+i,ph) enddo - gdot_slip_pos = 0.5_pReal*constitutive_phenopowerlaw_gdot0_slip(instance)* & + gdot_slip_pos = 0.5_pReal*plastic_phenopowerlaw_gdot0_slip(instance)* & ((abs(tau_slip_pos)/(slipDamage(j)*plasticState(ph)%state(j,of))) & - **constitutive_phenopowerlaw_n_slip(instance))*sign(1.0_pReal,tau_slip_pos) + **plastic_phenopowerlaw_n_slip(instance))*sign(1.0_pReal,tau_slip_pos) - gdot_slip_neg = 0.5_pReal*constitutive_phenopowerlaw_gdot0_slip(instance)* & + gdot_slip_neg = 0.5_pReal*plastic_phenopowerlaw_gdot0_slip(instance)* & ((abs(tau_slip_neg)/(slipDamage(j)*plasticState(ph)%state(j,of))) & - **constitutive_phenopowerlaw_n_slip(instance))*sign(1.0_pReal,tau_slip_neg) + **plastic_phenopowerlaw_n_slip(instance))*sign(1.0_pReal,tau_slip_neg) Lp = Lp + (1.0_pReal-plasticState(ph)%state(index_F,of))*& ! 1-F (gdot_slip_pos+gdot_slip_neg)*lattice_Sslip(1:3,1:3,1,index_myFamily+i,ph) ! Calculation of the tangent of Lp if (gdot_slip_pos /= 0.0_pReal) then - dgdot_dtauslip_pos = gdot_slip_pos*constitutive_phenopowerlaw_n_slip(instance)/tau_slip_pos + dgdot_dtauslip_pos = gdot_slip_pos*plastic_phenopowerlaw_n_slip(instance)/tau_slip_pos forall (k=1_pInt:3_pInt,l=1_pInt:3_pInt,m=1_pInt:3_pInt,n=1_pInt:3_pInt) & dLp_dTstar3333(k,l,m,n) = dLp_dTstar3333(k,l,m,n) + & dgdot_dtauslip_pos*lattice_Sslip(k,l,1,index_myFamily+i,ph)* & @@ -820,7 +820,7 @@ subroutine constitutive_phenopowerlaw_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,sl endif if (gdot_slip_neg /= 0.0_pReal) then - dgdot_dtauslip_neg = gdot_slip_neg*constitutive_phenopowerlaw_n_slip(instance)/tau_slip_neg + dgdot_dtauslip_neg = gdot_slip_neg*plastic_phenopowerlaw_n_slip(instance)/tau_slip_neg forall (k=1_pInt:3_pInt,l=1_pInt:3_pInt,m=1_pInt:3_pInt,n=1_pInt:3_pInt) & dLp_dTstar3333(k,l,m,n) = dLp_dTstar3333(k,l,m,n) + & dgdot_dtauslip_neg*lattice_Sslip(k,l,1,index_myFamily+i,ph)* & @@ -834,20 +834,20 @@ subroutine constitutive_phenopowerlaw_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,sl j = 0_pInt twinFamilies: do f = 1_pInt,lattice_maxNtwinFamily index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,ph)) ! at which index starts my family - twinSystems: do i = 1_pInt,constitutive_phenopowerlaw_Ntwin(f,instance) + twinSystems: do i = 1_pInt,plastic_phenopowerlaw_Ntwin(f,instance) j = j+1_pInt ! Calculation of Lp tau_twin = dot_product(Tstar_v,lattice_Stwin_v(1:6,index_myFamily+i,ph)) gdot_twin = (1.0_pReal-plasticState(ph)%state(index_F,of))*& ! 1-F - constitutive_phenopowerlaw_gdot0_twin(instance)*& + plastic_phenopowerlaw_gdot0_twin(instance)*& (abs(tau_twin)/plasticState(ph)%state(nSlip+j,of))**& - constitutive_phenopowerlaw_n_twin(instance)*max(0.0_pReal,sign(1.0_pReal,tau_twin)) + plastic_phenopowerlaw_n_twin(instance)*max(0.0_pReal,sign(1.0_pReal,tau_twin)) Lp = Lp + gdot_twin*lattice_Stwin(1:3,1:3,index_myFamily+i,ph) ! Calculation of the tangent of Lp if (gdot_twin /= 0.0_pReal) then - dgdot_dtautwin = gdot_twin*constitutive_phenopowerlaw_n_twin(instance)/tau_twin + dgdot_dtautwin = gdot_twin*plastic_phenopowerlaw_n_twin(instance)/tau_twin forall (k=1_pInt:3_pInt,l=1_pInt:3_pInt,m=1_pInt:3_pInt,n=1_pInt:3_pInt) & dLp_dTstar3333(k,l,m,n) = dLp_dTstar3333(k,l,m,n) + & dgdot_dtautwin*lattice_Stwin(k,l,index_myFamily+i,ph)* & @@ -859,12 +859,12 @@ subroutine constitutive_phenopowerlaw_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,sl dLp_dTstar99 = math_Plain3333to99(dLp_dTstar3333) -end subroutine constitutive_phenopowerlaw_LpAndItsTangent +end subroutine plastic_phenopowerlaw_LpAndItsTangent !-------------------------------------------------------------------------------------------------- !> @brief calculates the rate of change of microstructure !-------------------------------------------------------------------------------------------------- -subroutine constitutive_phenopowerlaw_dotState(Tstar_v,ipc,ip,el) +subroutine plastic_phenopowerlaw_dotState(Tstar_v,ipc,ip,el) use lattice, only: & lattice_Sslip_v, & lattice_Stwin_v, & @@ -900,17 +900,17 @@ subroutine constitutive_phenopowerlaw_dotState(Tstar_v,ipc,ip,el) ssat_offset, & tau_slip_pos,tau_slip_neg,tau_twin - real(pReal), dimension(constitutive_phenopowerlaw_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & + real(pReal), dimension(plastic_phenopowerlaw_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & gdot_slip,left_SlipSlip,left_SlipTwin,right_SlipSlip,right_TwinSlip - real(pReal), dimension(constitutive_phenopowerlaw_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & + real(pReal), dimension(plastic_phenopowerlaw_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & gdot_twin,left_TwinSlip,left_TwinTwin,right_SlipTwin,right_TwinTwin of = mappingConstitutive(1,ipc,ip,el) ph = mappingConstitutive(2,ipc,ip,el) instance = phase_plasticityInstance(ph) - nSlip = constitutive_phenopowerlaw_totalNslip(instance) - nTwin = constitutive_phenopowerlaw_totalNtwin(instance) + nSlip = plastic_phenopowerlaw_totalNslip(instance) + nTwin = plastic_phenopowerlaw_totalNtwin(instance) index_Gamma = nSlip + nTwin + 1_pInt index_F = nSlip + nTwin + 2_pInt @@ -921,30 +921,30 @@ subroutine constitutive_phenopowerlaw_dotState(Tstar_v,ipc,ip,el) !-------------------------------------------------------------------------------------------------- ! system-independent (nonlinear) prefactors to M_Xx (X influenced by x) matrices - c_SlipSlip = constitutive_phenopowerlaw_h0_SlipSlip(instance)*& - (1.0_pReal + constitutive_phenopowerlaw_twinC(instance)*plasticState(ph)%state(index_F,of)**& - constitutive_phenopowerlaw_twinB(instance)) + c_SlipSlip = plastic_phenopowerlaw_h0_SlipSlip(instance)*& + (1.0_pReal + plastic_phenopowerlaw_twinC(instance)*plasticState(ph)%state(index_F,of)**& + plastic_phenopowerlaw_twinB(instance)) c_SlipTwin = 0.0_pReal - c_TwinSlip = constitutive_phenopowerlaw_h0_TwinSlip(instance)*& - plasticState(ph)%state(index_Gamma,of)**constitutive_phenopowerlaw_twinE(instance) - c_TwinTwin = constitutive_phenopowerlaw_h0_TwinTwin(instance)*& - plasticState(ph)%state(index_F,of)**constitutive_phenopowerlaw_twinD(instance) + c_TwinSlip = plastic_phenopowerlaw_h0_TwinSlip(instance)*& + plasticState(ph)%state(index_Gamma,of)**plastic_phenopowerlaw_twinE(instance) + c_TwinTwin = plastic_phenopowerlaw_h0_TwinTwin(instance)*& + plasticState(ph)%state(index_F,of)**plastic_phenopowerlaw_twinD(instance) !-------------------------------------------------------------------------------------------------- ! calculate left and right vectors and calculate dot gammas - ssat_offset = constitutive_phenopowerlaw_spr(instance)*sqrt(plasticState(ph)%state(index_F,of)) + ssat_offset = plastic_phenopowerlaw_spr(instance)*sqrt(plasticState(ph)%state(index_F,of)) j = 0_pInt slipFamilies1: do f = 1_pInt,lattice_maxNslipFamily index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family - slipSystems1: do i = 1_pInt,constitutive_phenopowerlaw_Nslip(f,instance) + slipSystems1: do i = 1_pInt,plastic_phenopowerlaw_Nslip(f,instance) j = j+1_pInt left_SlipSlip(j) = 1.0_pReal ! no system-dependent left part left_SlipTwin(j) = 1.0_pReal ! no system-dependent left part right_SlipSlip(j) = abs(1.0_pReal-plasticState(ph)%state(j,of) / & - (constitutive_phenopowerlaw_tausat_slip(f,instance)+ssat_offset)) & - **constitutive_phenopowerlaw_a_slip(instance)& + (plastic_phenopowerlaw_tausat_slip(f,instance)+ssat_offset)) & + **plastic_phenopowerlaw_a_slip(instance)& *sign(1.0_pReal,1.0_pReal-plasticState(ph)%state(j,of) / & - (constitutive_phenopowerlaw_tausat_slip(f,instance)+ssat_offset)) + (plastic_phenopowerlaw_tausat_slip(f,instance)+ssat_offset)) right_TwinSlip(j) = 1.0_pReal ! no system-dependent part !-------------------------------------------------------------------------------------------------- @@ -952,14 +952,14 @@ subroutine constitutive_phenopowerlaw_dotState(Tstar_v,ipc,ip,el) tau_slip_pos = dot_product(Tstar_v,lattice_Sslip_v(1:6,1,index_myFamily+i,ph)) tau_slip_neg = tau_slip_pos nonSchmidSystems: do k = 1,lattice_NnonSchmid(ph) - tau_slip_pos = tau_slip_pos + constitutive_phenopowerlaw_nonSchmidCoeff(k,instance)* & + tau_slip_pos = tau_slip_pos + plastic_phenopowerlaw_nonSchmidCoeff(k,instance)* & dot_product(Tstar_v,lattice_Sslip_v(1:6,2*k, index_myFamily+i,ph)) - tau_slip_neg = tau_slip_neg + constitutive_phenopowerlaw_nonSchmidCoeff(k,instance)* & + tau_slip_neg = tau_slip_neg + plastic_phenopowerlaw_nonSchmidCoeff(k,instance)* & dot_product(Tstar_v,lattice_Sslip_v(1:6,2*k+1,index_myFamily+i,ph)) enddo nonSchmidSystems - gdot_slip(j) = constitutive_phenopowerlaw_gdot0_slip(instance)*0.5_pReal* & - ((abs(tau_slip_pos)/plasticState(ph)%state(j,of))**constitutive_phenopowerlaw_n_slip(instance) & - +(abs(tau_slip_neg)/plasticState(ph)%state(j,of))**constitutive_phenopowerlaw_n_slip(instance))& + gdot_slip(j) = plastic_phenopowerlaw_gdot0_slip(instance)*0.5_pReal* & + ((abs(tau_slip_pos)/plasticState(ph)%state(j,of))**plastic_phenopowerlaw_n_slip(instance) & + +(abs(tau_slip_neg)/plasticState(ph)%state(j,of))**plastic_phenopowerlaw_n_slip(instance))& *sign(1.0_pReal,tau_slip_pos) enddo slipSystems1 enddo slipFamilies1 @@ -968,7 +968,7 @@ subroutine constitutive_phenopowerlaw_dotState(Tstar_v,ipc,ip,el) j = 0_pInt twinFamilies1: do f = 1_pInt,lattice_maxNtwinFamily index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,ph)) ! at which index starts my family - twinSystems1: do i = 1_pInt,constitutive_phenopowerlaw_Ntwin(f,instance) + twinSystems1: do i = 1_pInt,plastic_phenopowerlaw_Ntwin(f,instance) j = j+1_pInt left_TwinSlip(j) = 1.0_pReal ! no system-dependent right part left_TwinTwin(j) = 1.0_pReal ! no system-dependent right part @@ -979,9 +979,9 @@ subroutine constitutive_phenopowerlaw_dotState(Tstar_v,ipc,ip,el) ! Calculation of dot vol frac tau_twin = dot_product(Tstar_v,lattice_Stwin_v(1:6,index_myFamily+i,ph)) gdot_twin(j) = (1.0_pReal-plasticState(ph)%state(index_F,of))*& ! 1-F - constitutive_phenopowerlaw_gdot0_twin(instance)*& + plastic_phenopowerlaw_gdot0_twin(instance)*& (abs(tau_twin)/plasticState(ph)%state(nslip+j,of))**& - constitutive_phenopowerlaw_n_twin(instance)*max(0.0_pReal,sign(1.0_pReal,tau_twin)) + plastic_phenopowerlaw_n_twin(instance)*max(0.0_pReal,sign(1.0_pReal,tau_twin)) enddo twinSystems1 enddo twinFamilies1 @@ -989,14 +989,14 @@ subroutine constitutive_phenopowerlaw_dotState(Tstar_v,ipc,ip,el) ! calculate the overall hardening based on above j = 0_pInt slipFamilies2: do f = 1_pInt,lattice_maxNslipFamily - slipSystems2: do i = 1_pInt,constitutive_phenopowerlaw_Nslip(f,instance) + slipSystems2: do i = 1_pInt,plastic_phenopowerlaw_Nslip(f,instance) j = j+1_pInt plasticState(ph)%dotState(j,of) = & ! evolution of slip resistance j c_SlipSlip * left_SlipSlip(j) * & - dot_product(constitutive_phenopowerlaw_hardeningMatrix_SlipSlip(j,1:nSlip,instance), & + dot_product(plastic_phenopowerlaw_hardeningMatrix_SlipSlip(j,1:nSlip,instance), & right_SlipSlip*abs(gdot_slip)) + & ! dot gamma_slip modulated by right-side slip factor c_SlipTwin * left_SlipTwin(j) * & - dot_product(constitutive_phenopowerlaw_hardeningMatrix_SlipTwin(j,1:nTwin,instance), & + dot_product(plastic_phenopowerlaw_hardeningMatrix_SlipTwin(j,1:nTwin,instance), & right_SlipTwin*gdot_twin) ! dot gamma_twin modulated by right-side twin factor plasticState(ph)%dotState(index_Gamma,of) = plasticState(ph)%dotState(index_Gamma,of) + & abs(gdot_slip(j)) @@ -1007,14 +1007,14 @@ subroutine constitutive_phenopowerlaw_dotState(Tstar_v,ipc,ip,el) j = 0_pInt twinFamilies2: do f = 1_pInt,lattice_maxNtwinFamily index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,ph)) ! at which index starts my family - twinSystems2: do i = 1_pInt,constitutive_phenopowerlaw_Ntwin(f,instance) + twinSystems2: do i = 1_pInt,plastic_phenopowerlaw_Ntwin(f,instance) j = j+1_pInt plasticState(ph)%dotState(j+nSlip,of) = & ! evolution of twin resistance j c_TwinSlip * left_TwinSlip(j) * & - dot_product(constitutive_phenopowerlaw_hardeningMatrix_TwinSlip(j,1:nSlip,instance), & + dot_product(plastic_phenopowerlaw_hardeningMatrix_TwinSlip(j,1:nSlip,instance), & right_TwinSlip*abs(gdot_slip)) + & ! dot gamma_slip modulated by right-side slip factor c_TwinTwin * left_TwinTwin(j) * & - dot_product(constitutive_phenopowerlaw_hardeningMatrix_TwinTwin(j,1:nTwin,instance), & + dot_product(plastic_phenopowerlaw_hardeningMatrix_TwinTwin(j,1:nTwin,instance), & right_TwinTwin*gdot_twin) ! dot gamma_twin modulated by right-side twin factor if (plasticState(ph)%state(index_F,of) < 0.98_pReal) & ! ensure twin volume fractions stays below 1.0 plasticState(ph)%dotState(index_F,of) = plasticState(ph)%dotState(index_F,of) + & @@ -1024,13 +1024,13 @@ subroutine constitutive_phenopowerlaw_dotState(Tstar_v,ipc,ip,el) enddo twinFamilies2 -end subroutine constitutive_phenopowerlaw_dotState +end subroutine plastic_phenopowerlaw_dotState !-------------------------------------------------------------------------------------------------- !> @brief returns accumulated slip !-------------------------------------------------------------------------------------------------- -subroutine constitutive_phenopowerlaw_getAccumulatedSlip(nSlip,accumulatedSlip,ipc, ip, el) ! question: make function, shape (i.e. nslip) is automatically returned +subroutine plastic_phenopowerlaw_getAccumulatedSlip(nSlip,accumulatedSlip,ipc, ip, el) ! question: make function, shape (i.e. nslip) is automatically returned use lattice, only: & lattice_maxNslipFamily use material, only: & @@ -1058,26 +1058,26 @@ subroutine constitutive_phenopowerlaw_getAccumulatedSlip(nSlip,accumulatedSlip,i offset = mappingConstitutive(1,ipc,ip,el) phase = mappingConstitutive(2,ipc,ip,el) instance = phase_plasticityInstance(phase) - nSlip = constitutive_phenopowerlaw_totalNslip(instance) - nTwin = constitutive_phenopowerlaw_totalNtwin(instance) + nSlip = plastic_phenopowerlaw_totalNslip(instance) + nTwin = plastic_phenopowerlaw_totalNtwin(instance) offset_accshear_slip = nSlip + nTwin + 2_pInt allocate(accumulatedSlip(nSlip)) j = 0_pInt slipFamiliesLoop: do f = 1_pInt,lattice_maxNslipFamily - do i = 1_pInt,constitutive_phenopowerlaw_Nslip(f,instance) ! process each (active) slip system in family + do i = 1_pInt,plastic_phenopowerlaw_Nslip(f,instance) ! process each (active) slip system in family j = j+1_pInt accumulatedSlip(j) = plasticState(phase)%state(offset_accshear_slip+j,offset) enddo enddo slipFamiliesLoop -end subroutine constitutive_phenopowerlaw_getAccumulatedSlip +end subroutine plastic_phenopowerlaw_getAccumulatedSlip !-------------------------------------------------------------------------------------------------- !> @brief returns accumulated slip rate !-------------------------------------------------------------------------------------------------- -subroutine constitutive_phenopowerlaw_getSlipRate(nSlip,slipRate,ipc, ip, el) ! question: make function, shape (i.e. nslip) is automatically returned +subroutine plastic_phenopowerlaw_getSlipRate(nSlip,slipRate,ipc, ip, el) ! question: make function, shape (i.e. nslip) is automatically returned use lattice, only: & lattice_maxNslipFamily use material, only: & @@ -1105,26 +1105,26 @@ subroutine constitutive_phenopowerlaw_getSlipRate(nSlip,slipRate,ipc, ip, el) offset = mappingConstitutive(1,ipc,ip,el) phase = mappingConstitutive(2,ipc,ip,el) instance = phase_plasticityInstance(phase) - nSlip = constitutive_phenopowerlaw_totalNslip(instance) - nTwin = constitutive_phenopowerlaw_totalNtwin(instance) + nSlip = plastic_phenopowerlaw_totalNslip(instance) + nTwin = plastic_phenopowerlaw_totalNtwin(instance) offset_accshear_slip = nSlip + nTwin + 2_pInt allocate(slipRate(nSlip)) j = 0_pInt slipFamiliesLoop: do f = 1_pInt,lattice_maxNslipFamily - do i = 1_pInt,constitutive_phenopowerlaw_Nslip(f,instance) ! process each (active) slip system in family + do i = 1_pInt,plastic_phenopowerlaw_Nslip(f,instance) ! process each (active) slip system in family j = j+1_pInt slipRate(j) = plasticState(phase)%dotState(offset_accshear_slip+j,offset) enddo enddo slipFamiliesLoop -end subroutine constitutive_phenopowerlaw_getSlipRate +end subroutine plastic_phenopowerlaw_getSlipRate !-------------------------------------------------------------------------------------------------- !> @brief return array of constitutive results !-------------------------------------------------------------------------------------------------- -function constitutive_phenopowerlaw_postResults(Tstar_v,ipc,ip,el) +function plastic_phenopowerlaw_postResults(Tstar_v,ipc,ip,el) use material, only: & material_phase, & plasticState, & @@ -1147,8 +1147,8 @@ function constitutive_phenopowerlaw_postResults(Tstar_v,ipc,ip,el) ip, & !< integration point el !< element !< microstructure state - real(pReal), dimension(constitutive_phenopowerlaw_sizePostResults(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & - constitutive_phenopowerlaw_postResults + real(pReal), dimension(plastic_phenopowerlaw_sizePostResults(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & + plastic_phenopowerlaw_postResults integer(pInt) :: & instance,ph, of, & @@ -1162,25 +1162,25 @@ function constitutive_phenopowerlaw_postResults(Tstar_v,ipc,ip,el) ph = mappingConstitutive(2,ipc,ip,el) instance = phase_plasticityInstance(ph) - nSlip = constitutive_phenopowerlaw_totalNslip(instance) - nTwin = constitutive_phenopowerlaw_totalNtwin(instance) + nSlip = plastic_phenopowerlaw_totalNslip(instance) + nTwin = plastic_phenopowerlaw_totalNtwin(instance) index_Gamma = nSlip + nTwin + 1_pInt index_F = nSlip + nTwin + 2_pInt index_accshear_slip = nSlip + nTwin + 3_pInt index_accshear_twin = nSlip + nTwin + 3_pInt + nSlip - constitutive_phenopowerlaw_postResults = 0.0_pReal + plastic_phenopowerlaw_postResults = 0.0_pReal c = 0_pInt - outputsLoop: do o = 1_pInt,constitutive_phenopowerlaw_Noutput(instance) - select case(constitutive_phenopowerlaw_outputID(o,instance)) + outputsLoop: do o = 1_pInt,plastic_phenopowerlaw_Noutput(instance) + select case(plastic_phenopowerlaw_outputID(o,instance)) case (resistance_slip_ID) - constitutive_phenopowerlaw_postResults(c+1_pInt:c+nSlip) = plasticState(ph)%state(1:nSlip,of) + plastic_phenopowerlaw_postResults(c+1_pInt:c+nSlip) = plasticState(ph)%state(1:nSlip,of) c = c + nSlip case (accumulatedshear_slip_ID) - constitutive_phenopowerlaw_postResults(c+1_pInt:c+nSlip) = plasticState(ph)%state(index_accshear_slip:& + plastic_phenopowerlaw_postResults(c+1_pInt:c+nSlip) = plasticState(ph)%state(index_accshear_slip:& index_accshear_slip+nSlip-1_pInt,of) c = c + nSlip @@ -1188,19 +1188,19 @@ function constitutive_phenopowerlaw_postResults(Tstar_v,ipc,ip,el) j = 0_pInt slipFamilies1: do f = 1_pInt,lattice_maxNslipFamily index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family - slipSystems1: do i = 1_pInt,constitutive_phenopowerlaw_Nslip(f,instance) + slipSystems1: do i = 1_pInt,plastic_phenopowerlaw_Nslip(f,instance) j = j + 1_pInt tau_slip_pos = dot_product(Tstar_v,lattice_Sslip_v(1:6,1,index_myFamily+i,ph)) tau_slip_neg = tau_slip_pos do k = 1,lattice_NnonSchmid(ph) - tau_slip_pos = tau_slip_pos + constitutive_phenopowerlaw_nonSchmidCoeff(k,instance)* & + tau_slip_pos = tau_slip_pos + plastic_phenopowerlaw_nonSchmidCoeff(k,instance)* & dot_product(Tstar_v,lattice_Sslip_v(1:6,2*k,index_myFamily+i,ph)) - tau_slip_neg = tau_slip_neg + constitutive_phenopowerlaw_nonSchmidCoeff(k,instance)* & + tau_slip_neg = tau_slip_neg + plastic_phenopowerlaw_nonSchmidCoeff(k,instance)* & dot_product(Tstar_v,lattice_Sslip_v(1:6,2*k+1,index_myFamily+i,ph)) enddo - constitutive_phenopowerlaw_postResults(c+j) = constitutive_phenopowerlaw_gdot0_slip(instance)*0.5_pReal* & - ((abs(tau_slip_pos)/plasticState(ph)%state(j,of))**constitutive_phenopowerlaw_n_slip(instance) & - +(abs(tau_slip_neg)/plasticState(ph)%state(j,of))**constitutive_phenopowerlaw_n_slip(instance))& + plastic_phenopowerlaw_postResults(c+j) = plastic_phenopowerlaw_gdot0_slip(instance)*0.5_pReal* & + ((abs(tau_slip_pos)/plasticState(ph)%state(j,of))**plastic_phenopowerlaw_n_slip(instance) & + +(abs(tau_slip_neg)/plasticState(ph)%state(j,of))**plastic_phenopowerlaw_n_slip(instance))& *sign(1.0_pReal,tau_slip_pos) enddo slipSystems1 @@ -1211,39 +1211,39 @@ function constitutive_phenopowerlaw_postResults(Tstar_v,ipc,ip,el) j = 0_pInt slipFamilies2: do f = 1_pInt,lattice_maxNslipFamily index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family - slipSystems2: do i = 1_pInt,constitutive_phenopowerlaw_Nslip(f,instance) + slipSystems2: do i = 1_pInt,plastic_phenopowerlaw_Nslip(f,instance) j = j + 1_pInt - constitutive_phenopowerlaw_postResults(c+j) = & + plastic_phenopowerlaw_postResults(c+j) = & dot_product(Tstar_v,lattice_Sslip_v(1:6,1,index_myFamily+i,ph)) enddo slipSystems2 enddo slipFamilies2 c = c + nSlip case (totalshear_ID) - constitutive_phenopowerlaw_postResults(c+1_pInt) = & + plastic_phenopowerlaw_postResults(c+1_pInt) = & plasticState(ph)%state(index_Gamma,of) c = c + 1_pInt case (resistance_twin_ID) - constitutive_phenopowerlaw_postResults(c+1_pInt:c+nTwin) = & + plastic_phenopowerlaw_postResults(c+1_pInt:c+nTwin) = & plasticState(ph)%state(1_pInt+nSlip:nTwin+nSlip-1_pInt,of) c = c + nTwin case (accumulatedshear_twin_ID) - constitutive_phenopowerlaw_postResults(c+1_pInt:c+nTwin) = & + plastic_phenopowerlaw_postResults(c+1_pInt:c+nTwin) = & plasticState(ph)%state(index_accshear_twin:index_accshear_twin+nTwin-1_pInt,of) c = c + nTwin case (shearrate_twin_ID) j = 0_pInt twinFamilies1: do f = 1_pInt,lattice_maxNtwinFamily index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,ph)) ! at which index starts my family - twinSystems1: do i = 1_pInt,constitutive_phenopowerlaw_Ntwin(f,instance) + twinSystems1: do i = 1_pInt,plastic_phenopowerlaw_Ntwin(f,instance) j = j + 1_pInt tau = dot_product(Tstar_v,lattice_Stwin_v(1:6,index_myFamily+i,ph)) - constitutive_phenopowerlaw_postResults(c+j) = (1.0_pReal-plasticState(ph)%state(index_F,of))*& ! 1-F - constitutive_phenopowerlaw_gdot0_twin(instance)*& + plastic_phenopowerlaw_postResults(c+j) = (1.0_pReal-plasticState(ph)%state(index_F,of))*& ! 1-F + plastic_phenopowerlaw_gdot0_twin(instance)*& (abs(tau)/plasticState(ph)%state(j+nSlip,of))**& - constitutive_phenopowerlaw_n_twin(instance)*max(0.0_pReal,sign(1.0_pReal,tau)) + plastic_phenopowerlaw_n_twin(instance)*max(0.0_pReal,sign(1.0_pReal,tau)) enddo twinSystems1 enddo twinFamilies1 c = c + nTwin @@ -1252,21 +1252,21 @@ function constitutive_phenopowerlaw_postResults(Tstar_v,ipc,ip,el) j = 0_pInt twinFamilies2: do f = 1_pInt,lattice_maxNtwinFamily index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,ph)) ! at which index starts my family - twinSystems2: do i = 1_pInt,constitutive_phenopowerlaw_Ntwin(f,instance) + twinSystems2: do i = 1_pInt,plastic_phenopowerlaw_Ntwin(f,instance) j = j + 1_pInt - constitutive_phenopowerlaw_postResults(c+j) = & + plastic_phenopowerlaw_postResults(c+j) = & dot_product(Tstar_v,lattice_Stwin_v(1:6,index_myFamily+i,ph)) enddo twinSystems2 enddo twinFamilies2 c = c + nTwin case (totalvolfrac_twin_ID) - constitutive_phenopowerlaw_postResults(c+1_pInt) = plasticState(ph)%state(index_F,of) + plastic_phenopowerlaw_postResults(c+1_pInt) = plasticState(ph)%state(index_F,of) c = c + 1_pInt end select enddo outputsLoop -end function constitutive_phenopowerlaw_postResults +end function plastic_phenopowerlaw_postResults -end module constitutive_phenopowerlaw +end module plastic_phenopowerlaw diff --git a/code/plastic_titanmod.f90 b/code/plastic_titanmod.f90 new file mode 100644 index 000000000..59b95b771 --- /dev/null +++ b/code/plastic_titanmod.f90 @@ -0,0 +1,2022 @@ +!-------------------------------------------------------------------------------------------------- +! $Id$ +!-------------------------------------------------------------------------------------------------- +!> @author Alankar Alankar, Max-Planck-Institut für Eisenforschung GmbH +!> @author Franz Roters, Max-Planck-Institut für Eisenforschung GmbH +!> @author Philip Eisenlohr, Max-Planck-Institut für Eisenforschung GmbH +!> @brief material subroutine for titanium +!-------------------------------------------------------------------------------------------------- +module plastic_titanmod + use prec, only: & + pReal, & + pInt + + implicit none + private + character(len=18), dimension(3), parameter, private :: & + plastic_titanmod_listBasicSlipStates = & + ['rho_edge ', 'rho_screw ', 'shear_system'] + character(len=18), dimension(1), parameter, private :: & + plastic_titanmod_listBasicTwinStates = ['gdot_twin'] + character(len=19), dimension(11), parameter, private :: & + plastic_titanmod_listDependentSlipStates = & + ['segment_edge ', 'segment_screw ', & + 'resistance_edge ', 'resistance_screw ', & + 'tau_slip ', & + 'velocity_edge ', 'velocity_screw ', & + 'gdot_slip_edge ', 'gdot_slip_screw ', & + 'stressratio_edge_p ', 'stressratio_screw_p' ] + character(len=18), dimension(2), parameter, private :: & + plastic_titanmod_listDependentTwinStates = & + ['twin_fraction', 'tau_twin '] + real(pReal), parameter, private :: & + kB = 1.38e-23_pReal !< Boltzmann constant in J/Kelvin + + + integer(pInt), dimension(:), allocatable, public, protected :: & + plastic_titanmod_sizePostResults !< cumulative size of post results + + integer(pInt), dimension(:,:), allocatable, target, public :: & + plastic_titanmod_sizePostResult !< size of each post result output + + character(len=64), dimension(:,:), allocatable, target, public :: & + plastic_titanmod_output !< name of each post result output + + integer(pInt), dimension(:), allocatable, target, public :: & + plastic_titanmod_Noutput !< number of outputs per instance of this plasticity !< ID of the lattice structure + + integer(pInt), dimension(:), allocatable, public, protected :: & + plastic_titanmod_totalNslip, & !< total number of active slip systems for each instance + plastic_titanmod_totalNtwin !< total number of active twin systems for each instance + + integer(pInt), dimension(:,:), allocatable, private :: & + plastic_titanmod_Nslip, & !< number of active slip systems for each family and instance + plastic_titanmod_Ntwin, & !< number of active twin systems for each family and instance + plastic_titanmod_slipFamily, & !< lookup table relating active slip system to slip family for each instance + plastic_titanmod_twinFamily, & !< lookup table relating active twin system to twin family for each instance + plastic_titanmod_slipSystemLattice, & !< lookup table relating active slip system index to lattice slip system index for each instance + plastic_titanmod_twinSystemLattice !< lookup table relating active twin system index to lattice twin system index for each instance + + real(pReal), dimension(:), allocatable, private :: & + plastic_titanmod_debyefrequency, & !< Debye frequency + plastic_titanmod_kinkf0, & !< + plastic_titanmod_CAtomicVolume, & !< atomic volume in Bugers vector unit + plastic_titanmod_dc, & !< prefactor for self-diffusion coefficient + plastic_titanmod_twinhpconstant, & !< activation energy for dislocation climb + plastic_titanmod_GrainSize, & !< grain size - Not being used + plastic_titanmod_MaxTwinFraction, & !< maximum allowed total twin volume fraction + plastic_titanmod_r, & !< r-exponent in twin nucleation rate + plastic_titanmod_CEdgeDipMinDistance, & !< Not being used + plastic_titanmod_Cmfptwin, & !< Not being used + plastic_titanmod_Cthresholdtwin, & !< Not being used + plastic_titanmod_aTolRho !< absolute tolerance for integration of dislocation density + + real(pReal), dimension(:,:), allocatable, private :: & + plastic_titanmod_rho_edge0, & !< initial edge dislocation density per slip system for each family and instance + plastic_titanmod_rho_screw0, & !< initial screw dislocation density per slip system for each family and instance + plastic_titanmod_shear_system0, & !< accumulated shear on each system + plastic_titanmod_burgersPerSlipFam, & !< absolute length of burgers vector [m] for each slip family and instance + plastic_titanmod_burgersPerSlipSys, & !< absolute length of burgers vector [m] for each slip system and instance + plastic_titanmod_burgersPerTwinFam, & !< absolute length of burgers vector [m] for each twin family and instance + plastic_titanmod_burgersPerTwinSys, & !< absolute length of burgers vector [m] for each twin system and instance + plastic_titanmod_f0_PerSlipFam, & !< activation energy for glide [J] for each slip family and instance + plastic_titanmod_f0_PerSlipSys, & !< activation energy for glide [J] for each slip system and instance + plastic_titanmod_twinf0_PerTwinFam, & !< activation energy for glide [J] for each twin family and instance + plastic_titanmod_twinf0_PerTwinSys, & !< activation energy for glide [J] for each twin system and instance + plastic_titanmod_twinshearconstant_PerTwinFam, & !< activation energy for glide [J] for each twin family and instance + plastic_titanmod_twinshearconstant_PerTwinSys, & !< activation energy for glide [J] for each twin system and instance + plastic_titanmod_tau0e_PerSlipFam, & !< Initial yield stress for edge dislocations per slip family + plastic_titanmod_tau0e_PerSlipSys, & !< Initial yield stress for edge dislocations per slip system + plastic_titanmod_tau0s_PerSlipFam, & !< Initial yield stress for screw dislocations per slip family + plastic_titanmod_tau0s_PerSlipSys, & !< Initial yield stress for screw dislocations per slip system + plastic_titanmod_twintau0_PerTwinFam, & !< Initial yield stress for edge dislocations per twin family + plastic_titanmod_twintau0_PerTwinSys, & !< Initial yield stress for edge dislocations per twin system + plastic_titanmod_capre_PerSlipFam, & !< Capture radii for edge dislocations per slip family + plastic_titanmod_capre_PerSlipSys, & !< Capture radii for edge dislocations per slip system + plastic_titanmod_caprs_PerSlipFam, & !< Capture radii for screw dislocations per slip family + plastic_titanmod_caprs_PerSlipSys, & !< Capture radii for screw dislocations per slip system + plastic_titanmod_pe_PerSlipFam, & !< p-exponent in glide velocity + plastic_titanmod_ps_PerSlipFam, & !< p-exponent in glide velocity + plastic_titanmod_qe_PerSlipFam, & !< q-exponent in glide velocity + plastic_titanmod_qs_PerSlipFam, & !< q-exponent in glide velocity + plastic_titanmod_pe_PerSlipSys, & !< p-exponent in glide velocity + plastic_titanmod_ps_PerSlipSys, & !< p-exponent in glide velocity + plastic_titanmod_qe_PerSlipSys, & !< q-exponent in glide velocity + plastic_titanmod_qs_PerSlipSys, & !< q-exponent in glide velocity + plastic_titanmod_twinp_PerTwinFam, & !< p-exponent in glide velocity + plastic_titanmod_twinq_PerTwinFam, & !< q-exponent in glide velocity + plastic_titanmod_twinp_PerTwinSys, & !< p-exponent in glide velocity + plastic_titanmod_twinq_PerTwinSys, & !< p-exponent in glide velocity + plastic_titanmod_v0e_PerSlipFam, & !< edge dislocation velocity prefactor [m/s] for each family and instance + plastic_titanmod_v0e_PerSlipSys, & !< screw dislocation velocity prefactor [m/s] for each slip system and instance + plastic_titanmod_v0s_PerSlipFam, & !< edge dislocation velocity prefactor [m/s] for each family and instance + plastic_titanmod_v0s_PerSlipSys, & !< screw dislocation velocity prefactor [m/s] for each slip system and instance + plastic_titanmod_twingamma0_PerTwinFam, & !< edge dislocation velocity prefactor [m/s] for each family and instance + plastic_titanmod_twingamma0_PerTwinSys, & !< screw dislocation velocity prefactor [m/s] for each slip system and instance + plastic_titanmod_kinkcriticallength_PerSlipFam, & !< screw dislocation mobility prefactor for kink-pairs per slip family + plastic_titanmod_kinkcriticallength_PerSlipSys, & !< screw dislocation mobility prefactor for kink-pairs per slip system + plastic_titanmod_twinsizePerTwinFam, & !< twin thickness [m] for each twin family and instance + plastic_titanmod_twinsizePerTwinSys, & !< twin thickness [m] for each twin system and instance + plastic_titanmod_CeLambdaSlipPerSlipFam, & !< Adj. parameter for distance between 2 forest dislocations for each slip family and instance + plastic_titanmod_CeLambdaSlipPerSlipSys, & !< Adj. parameter for distance between 2 forest dislocations for each slip system and instance + plastic_titanmod_CsLambdaSlipPerSlipFam, & !< Adj. parameter for distance between 2 forest dislocations for each slip family and instance + plastic_titanmod_CsLambdaSlipPerSlipSys, & !< Adj. parameter for distance between 2 forest dislocations for each slip system and instance + plastic_titanmod_twinLambdaSlipPerTwinFam, & !< Adj. parameter for distance between 2 forest dislocations for each slip family and instance + plastic_titanmod_twinLambdaSlipPerTwinSys, & !< Adj. parameter for distance between 2 forest dislocations for each slip system and instance + plastic_titanmod_interactionSlipSlip, & !< coefficients for slip-slip interaction for each interaction type and instance + plastic_titanmod_interaction_ee, & !< coefficients for e-e interaction for each interaction type and instance + plastic_titanmod_interaction_ss, & !< coefficients for s-s interaction for each interaction type and instance + plastic_titanmod_interaction_es, & !< coefficients for e-s-twin interaction for each interaction type and instance + plastic_titanmod_interactionSlipTwin, & !< coefficients for twin-slip interaction for each interaction type and instance + plastic_titanmod_interactionTwinSlip, & !< coefficients for twin-slip interaction for each interaction type and instance + plastic_titanmod_interactionTwinTwin !< coefficients for twin-twin interaction for each interaction type and instance + + real(pReal), dimension(:,:,:), allocatable, private :: & + plastic_titanmod_interactionMatrixSlipSlip, & !< interaction matrix of the different slip systems for each instance + plastic_titanmod_interactionMatrix_ee, & !< interaction matrix of e-e for each instance + plastic_titanmod_interactionMatrix_ss, & !< interaction matrix of s-s for each instance + plastic_titanmod_interactionMatrix_es, & !< interaction matrix of e-s for each instance + plastic_titanmod_interactionMatrixSlipTwin, & !< interaction matrix of slip systems with twin systems for each instance + plastic_titanmod_interactionMatrixTwinSlip, & !< interaction matrix of twin systems with slip systems for each instance + plastic_titanmod_interactionMatrixTwinTwin, & !< interaction matrix of the different twin systems for each instance + plastic_titanmod_forestProjectionEdge, & !< matrix of forest projections of edge dislocations for each instance + plastic_titanmod_forestProjectionScrew, & !< matrix of forest projections of screw dislocations for each instance + plastic_titanmod_TwinforestProjectionEdge, & !< matrix of forest projections of edge dislocations in twin system for each instance + plastic_titanmod_TwinforestProjectionScrew !< matrix of forest projections of screw dislocations in twin system for each instance + + real(pReal), dimension(:,:,:,:), allocatable, private :: & + plastic_titanmod_Ctwin66 !< twin elasticity matrix in Mandel notation for each instance + + real(pReal), dimension(:,:,:,:,:,:), allocatable, private :: & + plastic_titanmod_Ctwin3333 !< twin elasticity matrix for each instance + + enum, bind(c) + enumerator :: undefined_ID, & + rhoedge_ID, rhoscrew_ID, & + segment_edge_ID, segment_screw_ID, & + resistance_edge_ID, resistance_screw_ID, & + velocity_edge_ID, velocity_screw_ID, & + tau_slip_ID, & + gdot_slip_edge_ID, gdot_slip_screw_ID, & + gdot_slip_ID, & + stressratio_edge_p_ID, stressratio_screw_p_ID, & + shear_system_ID, & + twin_fraction_ID, & + shear_basal_ID, shear_prism_ID, shear_pyra_ID, shear_pyrca_ID, & + rhoedge_basal_ID, rhoedge_prism_ID, rhoedge_pyra_ID, rhoedge_pyrca_ID, & + rhoscrew_basal_ID, rhoscrew_prism_ID, rhoscrew_pyra_ID, rhoscrew_pyrca_ID, & + shear_total_ID + end enum + integer(kind(undefined_ID)), dimension(:,:), allocatable, private :: & + plastic_titanmod_outputID !< ID of each post result output + + public :: & + plastic_titanmod_microstructure, & + plastic_titanmod_stateInit, & + plastic_titanmod_init, & + plastic_titanmod_LpAndItsTangent, & + plastic_titanmod_dotState, & + plastic_titanmod_getAccumulatedSlip, & + plastic_titanmod_getSlipRate, & + plastic_titanmod_postResults, & + plastic_titanmod_homogenizedC + + contains + +!-------------------------------------------------------------------------------------------------- +!> @brief module initialization +!> @details reads in material parameters, allocates arrays, and does sanity checks +!-------------------------------------------------------------------------------------------------- +subroutine plastic_titanmod_init(fileUnit) + use, intrinsic :: iso_fortran_env ! to get compiler_version and compiler_options (at least for gfortran 4.6 at the moment) + use debug, only: & + debug_level,& + debug_constitutive,& + debug_levelBasic + use math, only: & + math_Mandel3333to66,& + math_Voigt66to3333,& + math_mul3x3 + use IO, only: & + IO_read, & + IO_lc, & + IO_getTag, & + IO_isBlank, & + IO_stringPos, & + IO_stringValue, & + IO_floatValue, & + IO_intValue, & + IO_warning, & + IO_error, & + IO_timeStamp, & + IO_EOF + use material, only: & + homogenization_maxNgrains, & + phase_plasticity, & + phase_plasticityInstance, & + phase_Noutput, & + PLASTICITY_TITANMOD_label, & + PLASTICITY_TITANMOD_ID, & + plasticState, & + MATERIAL_partPhase + use lattice + use numerics,only: & + worldrank, & + numerics_integrator + + implicit none + integer(pInt), intent(in) :: fileUnit + + integer(pInt), parameter :: MAXNCHUNKS = LATTICE_maxNinteraction + 1_pInt + integer(pInt), dimension(1_pInt+2_pInt*MAXNCHUNKS) :: positions + integer(pInt) :: & + phase, & + instance, j, k, l, m, n, p, q, r, & + f, o, & + s, s1, s2, & + t, t1, t2, & + ns, nt, & + Nchunks_SlipSlip, Nchunks_SlipTwin, Nchunks_TwinSlip, Nchunks_TwinTwin, & + Nchunks_SlipFamilies, Nchunks_TwinFamilies, & + mySize, & + maxTotalNslip,maxTotalNtwin, maxNinstance + integer(pInt) :: sizeState, sizeDotState + integer(pInt) :: NofMyPhase + character(len=65536) :: & + tag = '', & + line = '' + + mainProcess: if (worldrank == 0) then + write(6,'(/,a)') ' <<<+- constitutive_'//PLASTICITY_TITANMOD_label//' init -+>>>' + write(6,'(a)') ' $Id$' + write(6,'(a15,a)') ' Current time: ',IO_timeStamp() +#include "compilation_info.f90" + endif mainProcess + + maxNinstance = int(count(phase_plasticity == PLASTICITY_TITANMOD_ID),pInt) + if (maxNinstance == 0_pInt) return + + if (iand(debug_level(debug_constitutive),debug_levelBasic) /= 0_pInt) & + write(6,'(a16,1x,i5,/)') '# instances:',maxNinstance + + allocate(plastic_titanmod_sizePostResults(maxNinstance), source=0_pInt) + allocate(plastic_titanmod_sizePostResult(maxval(phase_Noutput),maxNinstance), source=0_pInt) + allocate(plastic_titanmod_output(maxval(phase_Noutput),maxNinstance)) + plastic_titanmod_output = '' + allocate(plastic_titanmod_outputID(maxval(phase_Noutput),maxNinstance), source=undefined_ID) + allocate(plastic_titanmod_Noutput(maxNinstance), source=0_pInt) + + allocate(plastic_titanmod_Nslip(lattice_maxNslipFamily,maxNinstance), source=0_pInt) + allocate(plastic_titanmod_Ntwin(lattice_maxNtwinFamily,maxNinstance), source=0_pInt) + allocate(plastic_titanmod_slipFamily(lattice_maxNslip,maxNinstance), source=0_pInt) + allocate(plastic_titanmod_twinFamily(lattice_maxNtwin,maxNinstance), source=0_pInt) + allocate(plastic_titanmod_slipSystemLattice(lattice_maxNslip,maxNinstance), source=0_pInt) + allocate(plastic_titanmod_twinSystemLattice(lattice_maxNtwin,maxNinstance), source=0_pInt) + allocate(plastic_titanmod_totalNslip(maxNinstance), source=0_pInt) + allocate(plastic_titanmod_totalNtwin(maxNinstance), source=0_pInt) + allocate(plastic_titanmod_debyefrequency(maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_kinkf0(maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_CAtomicVolume(maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_dc(maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_twinhpconstant(maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_GrainSize(maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_MaxTwinFraction(maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_r(maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_CEdgeDipMinDistance(maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_Cmfptwin(maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_Cthresholdtwin(maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_aTolRho(maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_rho_edge0(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_rho_screw0(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_shear_system0(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_burgersPerSlipFam(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_burgersPerTwinFam(lattice_maxNtwinFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_f0_PerSlipFam(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_tau0e_PerSlipFam(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_tau0s_PerSlipFam(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_capre_PerSlipFam(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_caprs_PerSlipFam(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_pe_PerSlipFam(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_ps_PerSlipFam(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_qe_PerSlipFam(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_qs_PerSlipFam(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_v0e_PerSlipFam(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_v0s_PerSlipFam(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_kinkcriticallength_PerSlipFam(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_twinsizePerTwinFam(lattice_maxNtwinFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_CeLambdaSlipPerSlipFam(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_CsLambdaSlipPerSlipFam(lattice_maxNslipFamily,maxNinstance), source=0.0_pReal) + + allocate(plastic_titanmod_twinf0_PerTwinFam(lattice_maxNTwinFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_twinshearconstant_PerTwinFam(lattice_maxNTwinFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_twintau0_PerTwinFam(lattice_maxNTwinFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_twinp_PerTwinFam(lattice_maxNTwinFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_twinq_PerTwinFam(lattice_maxNTwinFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_twingamma0_PerTwinFam(lattice_maxNTwinFamily,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_twinLambdaSlipPerTwinFam(lattice_maxNTwinFamily,maxNinstance), source=0.0_pReal) + + allocate(plastic_titanmod_interactionSlipSlip(lattice_maxNinteraction,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_interaction_ee(lattice_maxNinteraction,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_interaction_ss(lattice_maxNinteraction,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_interaction_es(lattice_maxNinteraction,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_interactionSlipTwin(lattice_maxNinteraction,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_interactionTwinSlip(lattice_maxNinteraction,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_interactionTwinTwin(lattice_maxNinteraction,maxNinstance), source=0.0_pReal) + + rewind(fileUnit) + phase = 0_pInt + do while (trim(line) /= IO_EOF .and. IO_lc(IO_getTag(line,'<','>')) /= material_partPhase) ! wind forward to + line = IO_read(fileUnit) + enddo + + parsingFile: do while (trim(line) /= IO_EOF) ! read through sections of phase part + line = IO_read(fileUnit) + if (IO_isBlank(line)) cycle ! skip empty lines + if (IO_getTag(line,'<','>') /= '') then ! stop at next part + line = IO_read(fileUnit, .true.) ! reset IO_read + exit + endif + if (IO_getTag(line,'[',']') /= '') then ! next section + phase = phase + 1_pInt ! advance section counter + if (phase_plasticity(phase) == PLASTICITY_TITANMOD_ID) then + Nchunks_SlipFamilies = count(lattice_NslipSystem(:,phase) > 0_pInt) + Nchunks_TwinFamilies = count(lattice_NtwinSystem(:,phase) > 0_pInt) + Nchunks_SlipSlip = maxval(lattice_interactionSlipSlip(:,:,phase)) + Nchunks_SlipTwin = maxval(lattice_interactionSlipTwin(:,:,phase)) + Nchunks_TwinSlip = maxval(lattice_interactionTwinSlip(:,:,phase)) + Nchunks_TwinTwin = maxval(lattice_interactionTwinTwin(:,:,phase)) + endif + cycle ! skip to next line + endif + if (phase > 0_pInt ) then; if (phase_plasticity(phase) == PLASTICITY_TITANMOD_ID) then ! one of my sections. Do not short-circuit here (.and. between if-statements), it's not safe in Fortran + instance = phase_plasticityInstance(phase) ! which instance of my plasticity is present phase + positions = IO_stringPos(line,MAXNCHUNKS) + tag = IO_lc(IO_stringValue(line,positions,1_pInt)) ! extract key + select case(tag) + case ('(output)') + select case(IO_lc(IO_stringValue(line,positions,2_pInt))) + case ('rhoedge') + plastic_titanmod_Noutput(instance) = plastic_titanmod_Noutput(instance) + 1_pInt + plastic_titanmod_outputID(plastic_titanmod_Noutput(instance),instance) = rhoedge_ID + plastic_titanmod_output(plastic_titanmod_Noutput(instance),instance) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) + case ('rhoscrew') + plastic_titanmod_Noutput(instance) = plastic_titanmod_Noutput(instance) + 1_pInt + plastic_titanmod_outputID(plastic_titanmod_Noutput(instance),instance) = rhoscrew_ID + plastic_titanmod_output(plastic_titanmod_Noutput(instance),instance) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) + case ('segment_edge') + plastic_titanmod_Noutput(instance) = plastic_titanmod_Noutput(instance) + 1_pInt + plastic_titanmod_outputID(plastic_titanmod_Noutput(instance),instance) = segment_edge_ID + plastic_titanmod_output(plastic_titanmod_Noutput(instance),instance) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) + case ('segment_screw') + plastic_titanmod_Noutput(instance) = plastic_titanmod_Noutput(instance) + 1_pInt + plastic_titanmod_outputID(plastic_titanmod_Noutput(instance),instance) = segment_screw_ID + plastic_titanmod_output(plastic_titanmod_Noutput(instance),instance) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) + case ('resistance_edge') + plastic_titanmod_Noutput(instance) = plastic_titanmod_Noutput(instance) + 1_pInt + plastic_titanmod_outputID(plastic_titanmod_Noutput(instance),instance) = resistance_edge_ID + plastic_titanmod_output(plastic_titanmod_Noutput(instance),instance) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) + case ('resistance_screw') + plastic_titanmod_Noutput(instance) = plastic_titanmod_Noutput(instance) + 1_pInt + plastic_titanmod_outputID(plastic_titanmod_Noutput(instance),instance) = resistance_screw_ID + plastic_titanmod_output(plastic_titanmod_Noutput(instance),instance) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) + case ('velocity_edge') + plastic_titanmod_Noutput(instance) = plastic_titanmod_Noutput(instance) + 1_pInt + plastic_titanmod_outputID(plastic_titanmod_Noutput(instance),instance) = velocity_edge_ID + plastic_titanmod_output(plastic_titanmod_Noutput(instance),instance) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) + case ('velocity_screw') + plastic_titanmod_Noutput(instance) = plastic_titanmod_Noutput(instance) + 1_pInt + plastic_titanmod_outputID(plastic_titanmod_Noutput(instance),instance) = velocity_screw_ID + plastic_titanmod_output(plastic_titanmod_Noutput(instance),instance) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) + case ('tau_slip') + plastic_titanmod_Noutput(instance) = plastic_titanmod_Noutput(instance) + 1_pInt + plastic_titanmod_outputID(plastic_titanmod_Noutput(instance),instance) = tau_slip_ID + plastic_titanmod_output(plastic_titanmod_Noutput(instance),instance) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) + case ('gdot_slip_edge') + plastic_titanmod_Noutput(instance) = plastic_titanmod_Noutput(instance) + 1_pInt + plastic_titanmod_outputID(plastic_titanmod_Noutput(instance),instance) = gdot_slip_edge_ID + plastic_titanmod_output(plastic_titanmod_Noutput(instance),instance) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) + case ('gdot_slip_screw') + plastic_titanmod_Noutput(instance) = plastic_titanmod_Noutput(instance) + 1_pInt + plastic_titanmod_outputID(plastic_titanmod_Noutput(instance),instance) = gdot_slip_screw_ID + plastic_titanmod_output(plastic_titanmod_Noutput(instance),instance) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) + case ('gdot_slip') + plastic_titanmod_Noutput(instance) = plastic_titanmod_Noutput(instance) + 1_pInt + plastic_titanmod_outputID(plastic_titanmod_Noutput(instance),instance) = gdot_slip_ID + plastic_titanmod_output(plastic_titanmod_Noutput(instance),instance) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) + case ('stressratio_edge_p') + plastic_titanmod_Noutput(instance) = plastic_titanmod_Noutput(instance) + 1_pInt + plastic_titanmod_outputID(plastic_titanmod_Noutput(instance),instance) = stressratio_edge_p_ID + plastic_titanmod_output(plastic_titanmod_Noutput(instance),instance) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) + case ('stressratio_screw_p') + plastic_titanmod_Noutput(instance) = plastic_titanmod_Noutput(instance) + 1_pInt + plastic_titanmod_outputID(plastic_titanmod_Noutput(instance),instance) = stressratio_screw_p_ID + plastic_titanmod_output(plastic_titanmod_Noutput(instance),instance) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) + case ('shear_system') + plastic_titanmod_Noutput(instance) = plastic_titanmod_Noutput(instance) + 1_pInt + plastic_titanmod_outputID(plastic_titanmod_Noutput(instance),instance) = shear_system_ID + plastic_titanmod_output(plastic_titanmod_Noutput(instance),instance) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) + case ('twin_fraction') + plastic_titanmod_Noutput(instance) = plastic_titanmod_Noutput(instance) + 1_pInt + plastic_titanmod_outputID(plastic_titanmod_Noutput(instance),instance) = twin_fraction_ID + plastic_titanmod_output(plastic_titanmod_Noutput(instance),instance) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) + case ('shear_basal') + plastic_titanmod_Noutput(instance) = plastic_titanmod_Noutput(instance) + 1_pInt + plastic_titanmod_outputID(plastic_titanmod_Noutput(instance),instance) = shear_basal_ID + plastic_titanmod_output(plastic_titanmod_Noutput(instance),instance) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) + case ('shear_prism') + plastic_titanmod_Noutput(instance) = plastic_titanmod_Noutput(instance) + 1_pInt + plastic_titanmod_outputID(plastic_titanmod_Noutput(instance),instance) = shear_prism_ID + plastic_titanmod_output(plastic_titanmod_Noutput(instance),instance) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) + case ('shear_pyra') + plastic_titanmod_Noutput(instance) = plastic_titanmod_Noutput(instance) + 1_pInt + plastic_titanmod_outputID(plastic_titanmod_Noutput(instance),instance) = shear_pyra_ID + plastic_titanmod_output(plastic_titanmod_Noutput(instance),instance) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) + case ('shear_pyrca') + plastic_titanmod_Noutput(instance) = plastic_titanmod_Noutput(instance) + 1_pInt + plastic_titanmod_outputID(plastic_titanmod_Noutput(instance),instance) = shear_pyrca_ID + plastic_titanmod_output(plastic_titanmod_Noutput(instance),instance) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) + case ('rhoedge_basal') + plastic_titanmod_Noutput(instance) = plastic_titanmod_Noutput(instance) + 1_pInt + plastic_titanmod_outputID(plastic_titanmod_Noutput(instance),instance) = rhoedge_basal_ID + plastic_titanmod_output(plastic_titanmod_Noutput(instance),instance) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) + case ('rhoedge_prism') + plastic_titanmod_Noutput(instance) = plastic_titanmod_Noutput(instance) + 1_pInt + plastic_titanmod_outputID(plastic_titanmod_Noutput(instance),instance) = rhoedge_prism_ID + plastic_titanmod_output(plastic_titanmod_Noutput(instance),instance) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) + case ('rhoedge_pyra') + plastic_titanmod_Noutput(instance) = plastic_titanmod_Noutput(instance) + 1_pInt + plastic_titanmod_outputID(plastic_titanmod_Noutput(instance),instance) = rhoedge_pyra_ID + plastic_titanmod_output(plastic_titanmod_Noutput(instance),instance) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) + case ('rhoedge_pyrca') + plastic_titanmod_Noutput(instance) = plastic_titanmod_Noutput(instance) + 1_pInt + plastic_titanmod_outputID(plastic_titanmod_Noutput(instance),instance) = rhoedge_pyrca_ID + plastic_titanmod_output(plastic_titanmod_Noutput(instance),instance) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) + case ('rhoscrew_basal') + plastic_titanmod_Noutput(instance) = plastic_titanmod_Noutput(instance) + 1_pInt + plastic_titanmod_outputID(plastic_titanmod_Noutput(instance),instance) = rhoscrew_basal_ID + plastic_titanmod_output(plastic_titanmod_Noutput(instance),instance) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) + case ('rhoscrew_prism') + plastic_titanmod_Noutput(instance) = plastic_titanmod_Noutput(instance) + 1_pInt + plastic_titanmod_outputID(plastic_titanmod_Noutput(instance),instance) = rhoscrew_prism_ID + plastic_titanmod_output(plastic_titanmod_Noutput(instance),instance) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) + case ('rhoscrew_pyra') + plastic_titanmod_Noutput(instance) = plastic_titanmod_Noutput(instance) + 1_pInt + plastic_titanmod_outputID(plastic_titanmod_Noutput(instance),instance) = rhoscrew_pyra_ID + plastic_titanmod_output(plastic_titanmod_Noutput(instance),instance) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) + case ('rhoscrew_pyrca') + plastic_titanmod_Noutput(instance) = plastic_titanmod_Noutput(instance) + 1_pInt + plastic_titanmod_outputID(plastic_titanmod_Noutput(instance),instance) = rhoscrew_pyrca_ID + plastic_titanmod_output(plastic_titanmod_Noutput(instance),instance) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) + case ('shear_total') + plastic_titanmod_Noutput(instance) = plastic_titanmod_Noutput(instance) + 1_pInt + plastic_titanmod_outputID(plastic_titanmod_Noutput(instance),instance) = shear_total_ID + plastic_titanmod_output(plastic_titanmod_Noutput(instance),instance) = & + IO_lc(IO_stringValue(line,positions,2_pInt)) + end select + case ('debyefrequency') + plastic_titanmod_debyefrequency(instance) = IO_floatValue(line,positions,2_pInt) + case ('kinkf0') + plastic_titanmod_kinkf0(instance) = IO_floatValue(line,positions,2_pInt) + case ('nslip') + if (positions(1) < 1_pInt + Nchunks_SlipFamilies) & + call IO_warning(50_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_TITANMOD_label//')') + do j = 1_pInt, Nchunks_SlipFamilies + plastic_titanmod_Nslip(j,instance) = IO_intValue(line,positions,1_pInt+j) + enddo + case ('ntwin') + if (positions(1) < 1_pInt + Nchunks_TwinFamilies) & + call IO_warning(51_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_TITANMOD_label//')') + do j = 1_pInt, Nchunks_TwinFamilies + plastic_titanmod_Ntwin(j,instance) = IO_intValue(line,positions,1_pInt+j) + enddo + case ('rho_edge0') + do j = 1_pInt, Nchunks_SlipFamilies + plastic_titanmod_rho_edge0(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo + case ('rho_screw0') + do j = 1_pInt, Nchunks_SlipFamilies + plastic_titanmod_rho_screw0(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo + case ('slipburgers') + do j = 1_pInt, Nchunks_SlipFamilies + plastic_titanmod_burgersPerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo + case ('twinburgers') + do j = 1_pInt, Nchunks_TwinFamilies + plastic_titanmod_burgersPerTwinFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo + case ('f0') + do j = 1_pInt, Nchunks_SlipFamilies + plastic_titanmod_f0_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo + case ('twinf0') + do j = 1_pInt, Nchunks_TwinFamilies + plastic_titanmod_twinf0_PerTwinFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo + case ('tau0e') + do j = 1_pInt, Nchunks_SlipFamilies + plastic_titanmod_tau0e_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo + case ('twintau0') + do j = 1_pInt, Nchunks_TwinFamilies + plastic_titanmod_twintau0_PerTwinFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo + case ('tau0s') + do j = 1_pInt, Nchunks_SlipFamilies + plastic_titanmod_tau0s_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo + case ('capre') + do j = 1_pInt, Nchunks_SlipFamilies + plastic_titanmod_capre_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo + case ('caprs') + do j = 1_pInt, Nchunks_SlipFamilies + plastic_titanmod_caprs_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo + case ('v0e') + do j = 1_pInt, Nchunks_SlipFamilies + plastic_titanmod_v0e_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo + case ('twingamma0') + do j = 1_pInt, Nchunks_TwinFamilies + plastic_titanmod_twingamma0_PerTwinFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo + case ('v0s') + do j = 1_pInt, Nchunks_SlipFamilies + plastic_titanmod_v0s_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo + case ('kinkcriticallength') + do j = 1_pInt, Nchunks_SlipFamilies + plastic_titanmod_kinkcriticallength_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo + case ('twinsize') + do j = 1_pInt, Nchunks_TwinFamilies + plastic_titanmod_twinsizePerTwinFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo + case ('celambdaslip') + do j = 1_pInt, Nchunks_SlipFamilies + plastic_titanmod_CeLambdaSlipPerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo + case ('twinlambdaslip') + do j = 1_pInt, Nchunks_TwinFamilies + plastic_titanmod_twinlambdaslipPerTwinFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo + case ('cslambdaslip') + do j = 1_pInt, Nchunks_SlipFamilies + plastic_titanmod_CsLambdaSlipPerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo + case ('grainsize') + plastic_titanmod_GrainSize(instance) = IO_floatValue(line,positions,2_pInt) + case ('maxtwinfraction') + plastic_titanmod_MaxTwinFraction(instance) = IO_floatValue(line,positions,2_pInt) + case ('pe') + do j = 1_pInt, Nchunks_SlipFamilies + plastic_titanmod_pe_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo + case ('twinp') + do j = 1_pInt, Nchunks_TwinFamilies + plastic_titanmod_twinp_PerTwinFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo + case ('ps') + do j = 1_pInt, Nchunks_SlipFamilies + plastic_titanmod_ps_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo + case ('qe') + do j = 1_pInt, Nchunks_SlipFamilies + plastic_titanmod_qe_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo + case ('twinq') + do j = 1_pInt, Nchunks_TwinFamilies + plastic_titanmod_twinq_PerTwinFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo + case ('qs') + do j = 1_pInt, Nchunks_SlipFamilies + plastic_titanmod_qs_PerSlipFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo + case ('twinshearconstant') + do j = 1_pInt, Nchunks_TwinFamilies + plastic_titanmod_twinshearconstant_PerTwinFam(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo + case ('dc') + plastic_titanmod_dc(instance) = IO_floatValue(line,positions,2_pInt) + case ('twinhpconstant') + plastic_titanmod_twinhpconstant(instance) = IO_floatValue(line,positions,2_pInt) + case ('atol_rho') + plastic_titanmod_aTolRho(instance) = IO_floatValue(line,positions,2_pInt) + case ('interactionee') + do j = 1_pInt, lattice_maxNinteraction + plastic_titanmod_interaction_ee(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo + case ('interactionss') + do j = 1_pInt, lattice_maxNinteraction + plastic_titanmod_interaction_ss(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo + case ('interactiones') + do j = 1_pInt, lattice_maxNinteraction + plastic_titanmod_interaction_es(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo + case ('interaction_slipslip','interactionslipslip') + if (positions(1) < 1_pInt + Nchunks_SlipSlip) & + call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_TITANMOD_label//')') + do j = 1_pInt, Nchunks_SlipSlip + plastic_titanmod_interactionSlipSlip(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo + case ('interaction_sliptwin','interactionsliptwin') + if (positions(1) < 1_pInt + Nchunks_SlipTwin) & + call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_TITANMOD_label//')') + do j = 1_pInt, Nchunks_SlipTwin + plastic_titanmod_interactionSlipTwin(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo + case ('interaction_twinslip','interactiontwinslip') + if (positions(1) < 1_pInt + Nchunks_TwinSlip) & + call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_TITANMOD_label//')') + do j = 1_pInt, Nchunks_TwinSlip + plastic_titanmod_interactionTwinSlip(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo + case ('interaction_twintwin','interactiontwintwin') + if (positions(1) < 1_pInt + Nchunks_TwinTwin) & + call IO_warning(52_pInt,ext_msg=trim(tag)//' ('//PLASTICITY_TITANMOD_label//')') + do j = 1_pInt, Nchunks_TwinTwin + plastic_titanmod_interactionTwinTwin(j,instance) = IO_floatValue(line,positions,1_pInt+j) + enddo + end select + endif; endif + enddo parsingFile + + sanityChecks: do phase = 1_pInt, size(phase_plasticity) + myPhase: if (phase_plasticity(phase) == PLASTICITY_TITANMOD_ID) then + instance = phase_plasticityInstance(phase) + if (sum(plastic_titanmod_Nslip(:,instance)) < 0_pInt) & + call IO_error(211_pInt,el=instance,ext_msg='nslip ('//PLASTICITY_TITANMOD_label//')') + if (sum(plastic_titanmod_Ntwin(:,instance)) < 0_pInt) & + call IO_error(211_pInt,el=instance,ext_msg='ntwin ('//PLASTICITY_TITANMOD_label//')') + do f = 1_pInt,lattice_maxNslipFamily + if (plastic_titanmod_Nslip(f,instance) > 0_pInt) then + if (plastic_titanmod_rho_edge0(f,instance) < 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='rho_edge0 ('//PLASTICITY_TITANMOD_label//')') + if (plastic_titanmod_rho_screw0(f,instance) < 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='rho_screw0 ('//PLASTICITY_TITANMOD_label//')') + if (plastic_titanmod_burgersPerSlipFam(f,instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='slipburgers ('//PLASTICITY_TITANMOD_label//')') + if (plastic_titanmod_f0_PerSlipFam(f,instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='f0 ('//PLASTICITY_TITANMOD_label//')') + if (plastic_titanmod_tau0e_PerSlipFam(f,instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='tau0e ('//PLASTICITY_TITANMOD_label//')') + if (plastic_titanmod_tau0s_PerSlipFam(f,instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='tau0s ('//PLASTICITY_TITANMOD_label//')') + if (plastic_titanmod_capre_PerSlipFam(f,instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='capre ('//PLASTICITY_TITANMOD_label//')') + if (plastic_titanmod_caprs_PerSlipFam(f,instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='caprs ('//PLASTICITY_TITANMOD_label//')') + if (plastic_titanmod_v0e_PerSlipFam(f,instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='v0e ('//PLASTICITY_TITANMOD_label//')') + if (plastic_titanmod_v0s_PerSlipFam(f,instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='v0s ('//PLASTICITY_TITANMOD_label//')') + if (plastic_titanmod_kinkcriticallength_PerSlipFam(f,instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='kinkCriticalLength ('//PLASTICITY_TITANMOD_label//')') + endif + enddo + do f = 1_pInt,lattice_maxNtwinFamily + if (plastic_titanmod_Ntwin(f,instance) > 0_pInt) then + if (plastic_titanmod_burgersPerTwinFam(f,instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='twinburgers ('//PLASTICITY_TITANMOD_label//')') + if (plastic_titanmod_twinf0_PerTwinFam(f,instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='twinf0 ('//PLASTICITY_TITANMOD_label//')') + if (plastic_titanmod_twinshearconstant_PerTwinFam(f,instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='twinshearconstant ('//PLASTICITY_TITANMOD_label//')') + if (plastic_titanmod_twintau0_PerTwinFam(f,instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='twintau0 ('//PLASTICITY_TITANMOD_label//')') + if (plastic_titanmod_twingamma0_PerTwinFam(f,instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='twingamma0 ('//PLASTICITY_TITANMOD_label//')') + endif + enddo + if (plastic_titanmod_dc(instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='dc ('//PLASTICITY_TITANMOD_label//')') + if (plastic_titanmod_twinhpconstant(instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='twinhpconstant ('//PLASTICITY_TITANMOD_label//')') + if (plastic_titanmod_aTolRho(instance) <= 0.0_pReal) & + call IO_error(211_pInt,el=instance,ext_msg='aTol_rho ('//PLASTICITY_TITANMOD_label//')') + +!-------------------------------------------------------------------------------------------------- +! determine total number of active slip or twin systems + plastic_titanmod_Nslip(:,instance) = min(lattice_NslipSystem(:,phase),plastic_titanmod_Nslip(:,instance)) + plastic_titanmod_Ntwin(:,instance) = min(lattice_NtwinSystem(:,phase),plastic_titanmod_Ntwin(:,instance)) + plastic_titanmod_totalNslip(instance) = sum(plastic_titanmod_Nslip(:,instance)) + plastic_titanmod_totalNtwin(instance) = sum(plastic_titanmod_Ntwin(:,instance)) + endif myPhase + enddo sanityChecks + +!-------------------------------------------------------------------------------------------------- +! allocation of variables whose size depends on the total number of active slip systems + maxTotalNslip = maxval(plastic_titanmod_totalNslip) + maxTotalNtwin = maxval(plastic_titanmod_totalNtwin) + + allocate(plastic_titanmod_burgersPerSlipSys(maxTotalNslip, maxNinstance), source=0.0_pReal) + + allocate(plastic_titanmod_f0_PerSlipSys(maxTotalNslip,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_tau0e_PerSlipSys(maxTotalNslip,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_tau0s_PerSlipSys(maxTotalNslip,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_capre_PerSlipSys(maxTotalNslip,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_caprs_PerSlipSys(maxTotalNslip,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_pe_PerSlipSys(maxTotalNslip,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_ps_PerSlipSys(maxTotalNslip,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_qe_PerSlipSys(maxTotalNslip,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_qs_PerSlipSys(maxTotalNslip,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_v0e_PerSlipSys(maxTotalNslip,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_v0s_PerSlipSys(maxTotalNslip,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_kinkcriticallength_PerSlipSys(maxTotalNslip,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_CeLambdaSlipPerSlipSys(maxTotalNslip, maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_CsLambdaSlipPerSlipSys(maxTotalNslip, maxNinstance), source=0.0_pReal) + + allocate(plastic_titanmod_burgersPerTwinSys(maxTotalNtwin,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_twinf0_PerTwinSys(maxTotalNTwin,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_twinshearconstant_PerTwinSys(maxTotalNTwin,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_twintau0_PerTwinSys(maxTotalNTwin,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_twinp_PerTwinSys(maxTotalNTwin,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_twinq_PerTwinSys(maxTotalNTwin,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_twingamma0_PerTwinSys(maxTotalNTwin,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_twinsizePerTwinSys(maxTotalNtwin, maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_twinLambdaSlipPerTwinSys(maxTotalNtwin, maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_Ctwin66 (6,6,maxTotalNtwin,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_Ctwin3333 (3,3,3,3,maxTotalNtwin,maxNinstance), source=0.0_pReal) + + allocate(plastic_titanmod_interactionMatrixSlipSlip(maxTotalNslip,maxTotalNslip,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_interactionMatrix_ee(maxTotalNslip,maxTotalNslip,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_interactionMatrix_ss(maxTotalNslip,maxTotalNslip,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_interactionMatrix_es(maxTotalNslip,maxTotalNslip,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_interactionMatrixSlipTwin(maxTotalNslip,maxTotalNtwin,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_interactionMatrixTwinSlip(maxTotalNtwin,maxTotalNslip,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_interactionMatrixTwinTwin(maxTotalNtwin,maxTotalNtwin,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_forestProjectionEdge(maxTotalNslip,maxTotalNslip,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_forestProjectionScrew(maxTotalNslip,maxTotalNslip,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_TwinforestProjectionEdge(maxTotalNtwin,maxTotalNtwin,maxNinstance), source=0.0_pReal) + allocate(plastic_titanmod_TwinforestProjectionScrew(maxTotalNtwin,maxTotalNtwin,maxNinstance), source=0.0_pReal) + + initializeInstances: do phase = 1_pInt, size(phase_plasticity) + if (phase_plasticity(phase) == PLASTICITY_TITANMOD_ID) then + instance = phase_plasticityInstance(phase) + +!-------------------------------------------------------------------------------------------------- +! inverse lookup of slip system family + l = 0_pInt + do f = 1_pInt,lattice_maxNslipFamily + do s = 1_pInt,plastic_titanmod_Nslip(f,instance) + l = l + 1_pInt + plastic_titanmod_slipFamily(l,instance) = f + plastic_titanmod_slipSystemLattice(l,instance) = sum(lattice_NslipSystem(1:f-1_pInt,phase)) + s + enddo; enddo + +!-------------------------------------------------------------------------------------------------- +! inverse lookup of twin system family + l = 0_pInt + do f = 1_pInt,lattice_maxNtwinFamily + do t = 1_pInt,plastic_titanmod_Ntwin(f,instance) + l = l + 1_pInt + plastic_titanmod_twinFamily(l,instance) = f + plastic_titanmod_twinSystemLattice(l,instance) = sum(lattice_NtwinSystem(1:f-1_pInt,phase)) + t + enddo; enddo + +!-------------------------------------------------------------------------------------------------- +! determine size of state array + ns = plastic_titanmod_totalNslip(instance) + nt = plastic_titanmod_totalNtwin(instance) + + sizeDotState = & + size(plastic_titanmod_listBasicSlipStates)*ns + & + size(plastic_titanmod_listBasicTwinStates)*nt + sizeState = sizeDotState+ & + size(plastic_titanmod_listDependentSlipStates)*ns + & + size(plastic_titanmod_listDependentTwinStates)*nt + +!-------------------------------------------------------------------------------------------------- +! determine size of postResults array + outputsLoop: do o = 1_pInt,plastic_titanmod_Noutput(instance) + mySize = 0_pInt + select case(plastic_titanmod_outputID(o,instance)) + case(rhoedge_ID, rhoscrew_ID, & + segment_edge_ID, segment_screw_ID, & + resistance_edge_ID, resistance_screw_ID, & + velocity_edge_ID, velocity_screw_ID, & + tau_slip_ID, & + gdot_slip_edge_ID, gdot_slip_screw_ID, & + gdot_slip_ID, & + stressratio_edge_p_ID, stressratio_screw_p_ID, & + shear_system_ID) + mySize = plastic_titanmod_totalNslip(instance) + case(twin_fraction_ID) + mySize = plastic_titanmod_totalNtwin(instance) + case(shear_basal_ID, shear_prism_ID, shear_pyra_ID, shear_pyrca_ID, & ! use only if all 4 slip families in hex are considered + rhoedge_basal_ID, rhoedge_prism_ID, rhoedge_pyra_ID, rhoedge_pyrca_ID, & + rhoscrew_basal_ID, rhoscrew_prism_ID, rhoscrew_pyra_ID, rhoscrew_pyrca_ID, & + shear_total_ID) + mySize = 1_pInt + case default + call IO_error(105_pInt,ext_msg=plastic_titanmod_output(o,instance)// & + ' ('//PLASTICITY_TITANMOD_label//')') + end select + + outputFound: if (mySize > 0_pInt) then + plastic_titanmod_sizePostResult(o,instance) = mySize + plastic_titanmod_sizePostResults(instance) = plastic_titanmod_sizePostResults(instance) + mySize + endif outputFound + enddo outputsLoop +! Determine size of state array + plasticState(phase)%sizeState = sizeState + plasticState(phase)%sizeDotState = sizeDotState + plasticState(phase)%sizePostResults = plastic_titanmod_sizePostResults(instance) + allocate(plasticState(phase)%aTolState (sizeState), source=plastic_titanmod_aTolRho(instance)) + allocate(plasticState(phase)%state0 (sizeState,NofMyPhase), source=0.0_pReal) + allocate(plasticState(phase)%partionedState0 (sizeState,NofMyPhase), source=0.0_pReal) + allocate(plasticState(phase)%subState0 (sizeState,NofMyPhase), source=0.0_pReal) + allocate(plasticState(phase)%state (sizeState,NofMyPhase), source=0.0_pReal) + allocate(plasticState(phase)%state_backup (sizeState,NofMyPhase), source=0.0_pReal) + + allocate(plasticState(phase)%dotState (sizeDotState,NofMyPhase), source=0.0_pReal) + allocate(plasticState(phase)%deltaState (sizeDotState,NofMyPhase), source=0.0_pReal) + allocate(plasticState(phase)%dotState_backup (sizeDotState,NofMyPhase), source=0.0_pReal) + if (any(numerics_integrator == 1_pInt)) then + allocate(plasticState(phase)%previousDotState (sizeDotState,NofMyPhase), source=0.0_pReal) + allocate(plasticState(phase)%previousDotState2 (sizeDotState,NofMyPhase), source=0.0_pReal) + endif + if (any(numerics_integrator == 4_pInt)) & + allocate(plasticState(phase)%RK4dotState (sizeDotState,NofMyPhase), source=0.0_pReal) + if (any(numerics_integrator == 5_pInt)) & + allocate(plasticState(phase)%RKCK45dotState (6,sizeDotState,NofMyPhase),source=0.0_pReal) +!-------------------------------------------------------------------------------------------------- +! construction of the twin elasticity matrices + do j=1_pInt,lattice_maxNtwinFamily + do k=1_pInt,plastic_titanmod_Ntwin(j,instance) + do l=1_pInt,3_pInt ; do m=1_pInt,3_pInt ; do n=1_pInt,3_pInt ; do o=1_pInt,3_pInt + do p=1_pInt,3_pInt ; do q=1_pInt,3_pInt ; do r=1_pInt,3_pInt ; do s=1_pInt,3_pInt + plastic_titanmod_Ctwin3333(l,m,n,o,sum(plastic_titanmod_Nslip(1:j-1_pInt,instance))+k,instance) = & + plastic_titanmod_Ctwin3333(l,m,n,o,sum(plastic_titanmod_Nslip(1:j-1_pInt,instance))+k,instance) + & + lattice_C3333(p,q,r,s,phase)*& + lattice_Qtwin(l,p,sum(lattice_NslipSystem(1:j-1_pInt,phase))+k,phase)* & + lattice_Qtwin(m,q,sum(lattice_NslipSystem(1:j-1_pInt,phase))+k,phase)* & + lattice_Qtwin(n,r,sum(lattice_NslipSystem(1:j-1_pInt,phase))+k,phase)* & + lattice_Qtwin(o,s,sum(lattice_NslipSystem(1:j-1_pInt,phase))+k,phase) + enddo; enddo; enddo; enddo + enddo; enddo; enddo ; enddo + plastic_titanmod_Ctwin66(1:6,1:6,k,instance) = & + math_Mandel3333to66(plastic_titanmod_Ctwin3333(1:3,1:3,1:3,1:3,k,instance)) + enddo; enddo + +!-------------------------------------------------------------------------------------------------- +! Burgers vector, dislocation velocity prefactor for each slip system + do s = 1_pInt,plastic_titanmod_totalNslip(instance) + f = plastic_titanmod_slipFamily(s,instance) + + plastic_titanmod_burgersPerSlipSys(s,instance) = & + plastic_titanmod_burgersPerSlipFam(f,instance) + + plastic_titanmod_f0_PerSlipSys(s,instance) = & + plastic_titanmod_f0_PerSlipFam(f,instance) + + plastic_titanmod_tau0e_PerSlipSys(s,instance) = & + plastic_titanmod_tau0e_PerSlipFam(f,instance) + + plastic_titanmod_tau0s_PerSlipSys(s,instance) = & + plastic_titanmod_tau0s_PerSlipFam(f,instance) + + plastic_titanmod_capre_PerSlipSys(s,instance) = & + plastic_titanmod_capre_PerSlipFam(f,instance) + + plastic_titanmod_caprs_PerSlipSys(s,instance) = & + plastic_titanmod_caprs_PerSlipFam(f,instance) + + plastic_titanmod_v0e_PerSlipSys(s,instance) = & + plastic_titanmod_v0e_PerSlipFam(f,instance) + + plastic_titanmod_v0s_PerSlipSys(s,instance) = & + plastic_titanmod_v0s_PerSlipFam(f,instance) + + plastic_titanmod_kinkcriticallength_PerSlipSys(s,instance) = & + plastic_titanmod_kinkcriticallength_PerSlipFam(f,instance) + + plastic_titanmod_pe_PerSlipSys(s,instance) = & + plastic_titanmod_pe_PerSlipFam(f,instance) + + plastic_titanmod_ps_PerSlipSys(s,instance) = & + plastic_titanmod_ps_PerSlipFam(f,instance) + + plastic_titanmod_qe_PerSlipSys(s,instance) = & + plastic_titanmod_qe_PerSlipFam(f,instance) + + plastic_titanmod_qs_PerSlipSys(s,instance) = & + plastic_titanmod_qs_PerSlipFam(f,instance) + + plastic_titanmod_CeLambdaSlipPerSlipSys(s,instance) = & + plastic_titanmod_CeLambdaSlipPerSlipFam(f,instance) + + plastic_titanmod_CsLambdaSlipPerSlipSys(s,instance) = & + plastic_titanmod_CsLambdaSlipPerSlipFam(f,instance) + enddo + +!-------------------------------------------------------------------------------------------------- +! Burgers vector, nucleation rate prefactor and twin size for each twin system + do t = 1_pInt,plastic_titanmod_totalNtwin(instance) + f = plastic_titanmod_twinFamily(t,instance) + + plastic_titanmod_burgersPerTwinSys(t,instance) = & + plastic_titanmod_burgersPerTwinFam(f,instance) + + plastic_titanmod_twinsizePerTwinSys(t,instance) = & + plastic_titanmod_twinsizePerTwinFam(f,instance) + + plastic_titanmod_twinf0_PerTwinSys(t,instance) = & + plastic_titanmod_twinf0_PerTwinFam(f,instance) + + plastic_titanmod_twinshearconstant_PerTwinSys(t,instance) = & + plastic_titanmod_twinshearconstant_PerTwinFam(f,instance) + + plastic_titanmod_twintau0_PerTwinSys(t,instance) = & + plastic_titanmod_twintau0_PerTwinFam(f,instance) + + plastic_titanmod_twingamma0_PerTwinSys(t,instance) = & + plastic_titanmod_twingamma0_PerTwinFam(f,instance) + + plastic_titanmod_twinp_PerTwinSys(t,instance) = & + plastic_titanmod_twinp_PerTwinFam(f,instance) + + plastic_titanmod_twinq_PerTwinSys(t,instance) = & + plastic_titanmod_twinq_PerTwinFam(f,instance) + + plastic_titanmod_twinLambdaSlipPerTwinSys(t,instance) = & + plastic_titanmod_twinLambdaSlipPerTwinFam(f,instance) + enddo + +!-------------------------------------------------------------------------------------------------- +! Construction of interaction matrices + do s1 = 1_pInt,plastic_titanmod_totalNslip(instance) + do s2 = 1_pInt,plastic_titanmod_totalNslip(instance) + plastic_titanmod_interactionMatrixSlipSlip(s1,s2,instance) = & + plastic_titanmod_interactionSlipSlip(lattice_interactionSlipSlip( & + plastic_titanmod_slipSystemLattice(s1,instance),& + plastic_titanmod_slipSystemLattice(s2,instance),phase),instance) + + plastic_titanmod_interactionMatrix_ee(s1,s2,instance) = & + plastic_titanmod_interaction_ee(lattice_interactionSlipSlip ( & + plastic_titanmod_slipSystemLattice(s1,instance), & + plastic_titanmod_slipSystemLattice(s2,instance), phase),instance) + + plastic_titanmod_interactionMatrix_ss(s1,s2,instance) = & + plastic_titanmod_interaction_ss(lattice_interactionSlipSlip( & + plastic_titanmod_slipSystemLattice(s1,instance), & + plastic_titanmod_slipSystemLattice(s2,instance), phase),instance) + + plastic_titanmod_interactionMatrix_es(s1,s2,instance) = & + plastic_titanmod_interaction_es(lattice_interactionSlipSlip( & + plastic_titanmod_slipSystemLattice(s1,instance), & + plastic_titanmod_slipSystemLattice(s2,instance), phase),instance) + enddo; enddo + + do s1 = 1_pInt,plastic_titanmod_totalNslip(instance) + do t2 = 1_pInt,plastic_titanmod_totalNtwin(instance) + plastic_titanmod_interactionMatrixSlipTwin(s1,t2,instance) = & + plastic_titanmod_interactionSlipTwin(lattice_interactionSlipTwin( & + plastic_titanmod_slipSystemLattice(s1,instance), & + plastic_titanmod_twinSystemLattice(t2,instance), phase),instance) + enddo; enddo + + do t1 = 1_pInt,plastic_titanmod_totalNtwin(instance) + do s2 = 1_pInt,plastic_titanmod_totalNslip(instance) + plastic_titanmod_interactionMatrixTwinSlip(t1,s2,instance) = & + plastic_titanmod_interactionTwinSlip(lattice_interactionTwinSlip( & + plastic_titanmod_twinSystemLattice(t1,instance), & + plastic_titanmod_slipSystemLattice(s2,instance), phase),instance) + enddo; enddo + + do t1 = 1_pInt,plastic_titanmod_totalNtwin(instance) + do t2 = 1_pInt,plastic_titanmod_totalNtwin(instance) + plastic_titanmod_interactionMatrixTwinTwin(t1,t2,instance) = & + plastic_titanmod_interactionTwinTwin(lattice_interactionTwinTwin( & + plastic_titanmod_twinSystemLattice(t1,instance), & + plastic_titanmod_twinSystemLattice(t2,instance), phase),instance) + enddo; enddo + + do s1 = 1_pInt,plastic_titanmod_totalNslip(instance) + do s2 = 1_pInt,plastic_titanmod_totalNslip(instance) +!-------------------------------------------------------------------------------------------------- +! calculation of forest projections for edge dislocations + plastic_titanmod_forestProjectionEdge(s1,s2,instance) = & + abs(math_mul3x3(lattice_sn(:,plastic_titanmod_slipSystemLattice(s1,instance),phase), & + lattice_st(:,plastic_titanmod_slipSystemLattice(s2,instance),phase))) + +!-------------------------------------------------------------------------------------------------- +! calculation of forest projections for screw dislocations + plastic_titanmod_forestProjectionScrew(s1,s2,instance) = & + abs(math_mul3x3(lattice_sn(:,plastic_titanmod_slipSystemLattice(s1,instance),phase), & + lattice_sd(:,plastic_titanmod_slipSystemLattice(s2,instance),phase))) + enddo; enddo + +!-------------------------------------------------------------------------------------------------- +! calculation of forest projections for edge dislocations in twin system + do t1 = 1_pInt,plastic_titanmod_totalNtwin(instance) + do t2 = 1_pInt,plastic_titanmod_totalNtwin(instance) + plastic_titanmod_TwinforestProjectionEdge(t1,t2,instance) = & + abs(math_mul3x3(lattice_tn(:,plastic_titanmod_twinSystemLattice(t1,instance),phase), & + lattice_tt(:,plastic_titanmod_twinSystemLattice(t2,instance),phase))) + +!-------------------------------------------------------------------------------------------------- +! calculation of forest projections for screw dislocations in twin system + plastic_titanmod_TwinforestProjectionScrew(t1,t2,instance) = & + abs(math_mul3x3(lattice_tn(:,plastic_titanmod_twinSystemLattice(t1,instance),phase), & + lattice_td(:,plastic_titanmod_twinSystemLattice(t2,instance),phase))) + enddo; enddo + call plastic_titanmod_stateInit(phase,instance) + endif + enddo initializeInstances + +end subroutine plastic_titanmod_init + + +!-------------------------------------------------------------------------------------------------- +!> @brief sets the initial microstructural state for a given instance of this plasticity +!-------------------------------------------------------------------------------------------------- +subroutine plastic_titanmod_stateInit(ph,instance) + use lattice, only: & + lattice_maxNslipFamily, & + lattice_maxNtwinFamily, & + lattice_mu + + use material, only: & + plasticState, & + mappingConstitutive + + implicit none + integer(pInt), intent(in) :: instance !< number specifying the instance of the plasticity + integer(pInt), intent(in) :: ph !< number specifying the phase of the plasticity + + + integer(pInt) :: & + s,s0,s1, & + t,t0,t1, & + ns,nt,f + real(pReal), dimension(plastic_titanmod_totalNslip(instance)) :: & + rho_edge0, & + rho_screw0, & + shear_system0, & + segment_edge0, & + segment_screw0, & + resistance_edge0, & + resistance_screw0 + real(pReal), dimension(plastic_titanmod_totalNtwin(instance)) :: & + twingamma_dot0, & + resistance_twin0 + real(pReal), dimension(plasticState(ph)%sizeState) :: tempState !!!!!!!!!????????? check + + ns = plastic_titanmod_totalNslip(instance) + nt = plastic_titanmod_totalNtwin(instance) + + tempState = 0.0_pReal +!-------------------------------------------------------------------------------------------------- +! initialize basic slip state variables for slip + s1 = 0_pInt + do f = 1_pInt,lattice_maxNslipFamily + s0 = s1 + 1_pInt + s1 = s0 + plastic_titanmod_Nslip(f,instance) - 1_pInt + do s = s0,s1 + rho_edge0(s) = plastic_titanmod_rho_edge0(f,instance) + rho_screw0(s) = plastic_titanmod_rho_screw0(f,instance) + shear_system0(s) = 0.0_pReal + enddo + enddo + +!-------------------------------------------------------------------------------------------------- +! initialize basic slip state variables for twin + t1 = 0_pInt + do f = 1_pInt,lattice_maxNtwinFamily + t0 = t1 + 1_pInt + t1 = t0 + plastic_titanmod_Ntwin(f,instance) - 1_pInt + do t = t0,t1 + twingamma_dot0(t)=0.0_pReal + enddo + enddo + +!-------------------------------------------------------------------------------------------------- +! initialize dependent slip microstructural variables + forall (s = 1_pInt:ns) + segment_edge0(s) = plastic_titanmod_CeLambdaSlipPerSlipSys(s,instance)/ & + sqrt(dot_product((rho_edge0),plastic_titanmod_forestProjectionEdge(1:ns,s,instance))+ & + dot_product((rho_screw0),plastic_titanmod_forestProjectionScrew(1:ns,s,instance))) + segment_screw0(s) = plastic_titanmod_CsLambdaSlipPerSlipSys(s,instance)/ & + sqrt(dot_product((rho_edge0),plastic_titanmod_forestProjectionEdge(1:ns,s,instance))+ & + dot_product((rho_screw0),plastic_titanmod_forestProjectionScrew(1:ns,s,instance))) + resistance_edge0(s) = & + lattice_mu(ph)*plastic_titanmod_burgersPerSlipSys(s,instance)* & + sqrt(dot_product((rho_edge0),plastic_titanmod_interactionMatrix_ee(1:ns,s,instance))+ & + dot_product((rho_screw0),plastic_titanmod_interactionMatrix_es(1:ns,s,instance))) + resistance_screw0(s) = & + lattice_mu(ph)*plastic_titanmod_burgersPerSlipSys(s,instance)* & + sqrt(dot_product((rho_edge0),plastic_titanmod_interactionMatrix_es(1:ns,s,instance))+ & + dot_product((rho_screw0), plastic_titanmod_interactionMatrix_ss(1:ns,s,instance))) + end forall + + forall (t = 1_pInt:nt) & + resistance_twin0(t) = 0.0_pReal + +tempState = 0.0_pReal +tempState (1:ns) = rho_edge0 +tempState (1_pInt*ns+1_pInt:2_pInt*ns) = rho_screw0 +tempState (2_pInt*ns+1_pInt:3_pInt*ns) = shear_system0 +tempState (3_pInt*ns+1_pInt:3_pInt*ns+nt) = twingamma_dot0 +tempState (3_pInt*ns+nt+1_pInt:4_pInt*ns+nt) = segment_edge0 +tempState (4_pInt*ns+nt+1_pInt:5_pInt*ns+nt) = segment_screw0 +tempState (5_pInt*ns+nt+1_pInt:6_pInt*ns+nt) = resistance_edge0 +tempState (6_pInt*ns+nt+1_pInt:7_pInt*ns+nt) = resistance_screw0 +tempState (7_pInt*ns+nt+1_pInt:7_pInt*ns+2_pInt*nt)=resistance_twin0 + +plasticState(ph)%state0 = spread(tempState,2,size(plasticState(ph)%state(1,:))) +end subroutine plastic_titanmod_stateInit + +!-------------------------------------------------------------------------------------------------- +!> @brief returns the homogenized elasticity matrix +!-------------------------------------------------------------------------------------------------- +function plastic_titanmod_homogenizedC(ipc,ip,el) + use mesh, only: & + mesh_NcpElems, & + mesh_maxNips + use material, only: & + homogenization_maxNgrains, & + material_phase, & + phase_plasticityInstance, & + plasticState, & + mappingConstitutive + use lattice, only: & + lattice_C66 + +implicit none + real(pReal), dimension(6,6) :: & + plastic_titanmod_homogenizedC + integer(pInt), intent(in) :: & + ipc, & !< component-ID of integration point + ip, & !< integration point + el !< element +real(pReal), dimension(plastic_titanmod_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & + volumefraction_PerTwinSys + integer(pInt) :: & + ph, & + of, & + instance, & + ns, nt, & + i + real(pReal) :: & + sumf + +!-------------------------------------------------------------------------------------------------- +! shortened notation +! ph = material_phase(ipc,ip,el) + of = mappingConstitutive(1,ipc,ip,el) + ph = mappingConstitutive(2,ipc,ip,el) + instance = phase_plasticityInstance(ph) + ns = plastic_titanmod_totalNslip(instance) + nt = plastic_titanmod_totalNtwin(instance) + +!-------------------------------------------------------------------------------------------------- +! total twin volume fraction + do i=1_pInt,nt + volumefraction_PerTwinSys(i)=plasticState(ph)%state(3_pInt*ns+i, of)/ & + plastic_titanmod_twinshearconstant_PerTwinSys(i,instance) + enddo + sumf = sum(abs(volumefraction_PerTwinSys(1:nt))) ! safe for nt == 0 + +!-------------------------------------------------------------------------------------------------- +! homogenized elasticity matrix + plastic_titanmod_homogenizedC = (1.0_pReal-sumf)*lattice_C66(1:6,1:6,ph) + do i=1_pInt,nt + plastic_titanmod_homogenizedC = plastic_titanmod_homogenizedC & + + volumefraction_PerTwinSys(i)*& + plastic_titanmod_Ctwin66(1:6,1:6,i,instance) + enddo + +end function plastic_titanmod_homogenizedC + + +!-------------------------------------------------------------------------------------------------- +!> @brief calculates derived quantities from state +!-------------------------------------------------------------------------------------------------- +subroutine plastic_titanmod_microstructure(temperature,ipc,ip,el) + + use mesh, only: & + mesh_NcpElems, & + mesh_maxNips + use material, only: & + homogenization_maxNgrains, & + material_phase,& + phase_plasticityInstance, & + plasticState, & + mappingConstitutive + use lattice, only: & + lattice_mu + + implicit none + integer(pInt), intent(in) :: & + ipc, & !< component-ID of integration point + ip, & !< integration point + el !< element + real(pReal), intent(in) :: & + temperature !< temperature at IP + integer(pInt) :: & + instance, & + ns, nt, s, t, & + i, & + ph, & + of + real(pReal) :: & + sumf, & + sfe ! stacking fault energy + real(pReal), dimension(plastic_titanmod_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & + volumefraction_PerTwinSys + +!-------------------------------------------------------------------------------------------------- + +!Shortened notation + + of = mappingConstitutive(1,ipc,ip,el) + ph = mappingConstitutive(2,ipc,ip,el) + instance = phase_plasticityInstance(ph) + ns = plastic_titanmod_totalNslip(instance) + nt = plastic_titanmod_totalNtwin(instance) + +!-------------------------------------------------------------------------------------------------- +! total twin volume fraction + forall (i = 1_pInt:nt) & + volumefraction_PerTwinSys(i)=plasticState(ph)%state(3_pInt*ns+i, of)/ & + plastic_titanmod_twinshearconstant_PerTwinSys(i,instance) + + sumf = sum(abs(volumefraction_PerTwinSys(1:nt))) ! safe for nt == 0 + + sfe = 0.0002_pReal*Temperature-0.0396_pReal + +!-------------------------------------------------------------------------------------------------- +! average segment length for edge dislocations in matrix + forall (s = 1_pInt:ns) & + plasticState(ph)%state(3_pInt*ns+nt+s, of) = plastic_titanmod_CeLambdaSlipPerSlipSys(s,instance)/ & + sqrt(dot_product(plasticState(ph)%state(1:ns, of), & + plastic_titanmod_forestProjectionEdge(1:ns,s,instance))+ & + dot_product(plasticState(ph)%state(ns+1_pInt:2_pInt*ns, of), & + plastic_titanmod_forestProjectionScrew(1:ns,s,instance))) +!-------------------------------------------------------------------------------------------------- +! average segment length for screw dislocations in matrix + forall (s = 1_pInt:ns) & + plasticState(ph)%state(4_pInt*ns+nt+s, of) = plastic_titanmod_CsLambdaSlipPerSlipSys(s,instance)/ & + sqrt(dot_product(plasticState(ph)%state(1:ns, of), & + plastic_titanmod_forestProjectionEdge(1:ns,s,instance))+ & + dot_product(plasticState(ph)%state(ns+1_pInt:2_pInt*ns, of), & + plastic_titanmod_forestProjectionScrew(1:ns,s,instance))) +!-------------------------------------------------------------------------------------------------- +! threshold stress or slip resistance for edge dislocation motion + forall (s = 1_pInt:ns) & + plasticState(ph)%state(5_pInt*ns+nt+s, of) = & + lattice_mu(ph)*plastic_titanmod_burgersPerSlipSys(s,instance)*& + sqrt(dot_product((plasticState(ph)%state(1:ns, of)),& + plastic_titanmod_interactionMatrix_ee(1:ns,s,instance))+ & + dot_product((plasticState(ph)%state(ns+1_pInt:2_pInt*ns, of)),& + plastic_titanmod_interactionMatrix_es(1:ns,s,instance))) +!-------------------------------------------------------------------------------------------------- +! threshold stress or slip resistance for screw dislocation motion + forall (s = 1_pInt:ns) & + plasticState(ph)%state(6_pInt*ns+nt+s, of) = & + lattice_mu(ph)*plastic_titanmod_burgersPerSlipSys(s,instance)*& + sqrt(dot_product((plasticState(ph)%state(1:ns, of)),& + plastic_titanmod_interactionMatrix_es(1:ns,s,instance))+ & + dot_product((plasticState(ph)%state(ns+1_pInt:2_pInt*ns, of)),& + plastic_titanmod_interactionMatrix_ss(1:ns,s,instance))) +!-------------------------------------------------------------------------------------------------- +! threshold stress or slip resistance for dislocation motion in twin + forall (t = 1_pInt:nt) & + plasticState(ph)%state(7_pInt*ns+nt+t, of) = & + lattice_mu(ph)*plastic_titanmod_burgersPerTwinSys(t,instance)*& + (dot_product((abs(plasticState(ph)%state(2_pInt*ns+1_pInt:2_pInt*ns+nt, of))),& + plastic_titanmod_interactionMatrixTwinTwin(1:nt,t,instance))) + +! state=tempState + +end subroutine plastic_titanmod_microstructure + + +!-------------------------------------------------------------------------------------------------- +!> @brief calculates plastic velocity gradient and its tangent +!-------------------------------------------------------------------------------------------------- +subroutine plastic_titanmod_LpAndItsTangent(Lp,dLp_dTstar99,Tstar_v,temperature,slipDamage,ipc,ip,el) + use math, only: & + math_Plain3333to99, & + math_Mandel6to33 + use lattice, only: & + lattice_Sslip, & + lattice_Sslip_v, & + lattice_Stwin, & + lattice_Stwin_v, & + lattice_maxNslipFamily, & + lattice_maxNtwinFamily, & + lattice_NslipSystem, & + lattice_NtwinSystem, & + lattice_structure, & + LATTICE_hex_ID + use mesh, only: & + mesh_NcpElems, & + mesh_maxNips + use material, only: & + homogenization_maxNgrains, & + material_phase, & + phase_plasticityInstance, & + plasticState, & + mappingConstitutive + + implicit none + real(pReal), dimension(3,3), intent(out) :: & + Lp !< plastic velocity gradient + real(pReal), dimension(9,9), intent(out) :: & + dLp_dTstar99 !< derivative of Lp with respect to 2nd Piola Kirchhoff stress + + integer(pInt), intent(in) :: & + ipc, & !< component-ID of integration point + ip, & !< integration point + el !< element + real(pReal), dimension(6), intent(in) :: & + Tstar_v !< 2nd Piola Kirchhoff stress tensor in Mandel notation + real(pReal), intent(in) :: & + temperature !< temperature at IP + real(pReal), & + dimension(plastic_titanmod_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))), & + intent(in) :: & + slipDamage + integer(pInt) :: & + index_myFamily, instance, & + ns,nt, & + f,i,j,k,l,m,n, & + ph, & + of + real(pReal) :: sumf, & + StressRatio_edge_p, minusStressRatio_edge_p, StressRatio_edge_pminus1, BoltzmannRatioedge, & + StressRatio_screw_p, minusStressRatio_screw_p, StressRatio_screw_pminus1, BoltzmannRatioscrew, & + twinStressRatio_p, twinminusStressRatio_p, twinStressRatio_pminus1, BoltzmannRatiotwin, & + twinDotGamma0, bottomstress_edge, bottomstress_screw, screwvelocity_prefactor + real(pReal), dimension(3,3,3,3) :: dLp_dTstar3333 + real(pReal), dimension(plastic_titanmod_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & + gdot_slip,dgdot_dtauslip,tau_slip, & + edge_velocity, screw_velocity, & + gdot_slip_edge, gdot_slip_screw + real(pReal), dimension(plastic_titanmod_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & + gdot_twin,dgdot_dtautwin,tau_twin, volumefraction_PerTwinSys + +! tempState=state + + + +!-------------------------------------------------------------------------------------------------- +! shortened notation + of = mappingConstitutive(1,ipc,ip,el) + ph = mappingConstitutive(2,ipc,ip,el) + instance = phase_plasticityInstance(ph) + ns = plastic_titanmod_totalNslip(instance) + nt = plastic_titanmod_totalNtwin(instance) + + do i=1_pInt,nt + volumefraction_PerTwinSys(i)=plasticState(ph)%state(3_pInt*ns+i, of)/ & + plastic_titanmod_twinshearconstant_PerTwinSys(i,instance) + + enddo + + sumf = sum(abs(volumefraction_PerTwinSys(1:nt))) ! safe for nt == 0 + + + Lp = 0.0_pReal + dLp_dTstar3333 = 0.0_pReal + dLp_dTstar99 = 0.0_pReal + + !* Dislocation glide part + gdot_slip = 0.0_pReal + gdot_slip_edge = 0.0_pReal + gdot_slip_screw = 0.0_pReal + dgdot_dtauslip = 0.0_pReal + j = 0_pInt + slipFamiliesLoop: do f = 1_pInt,lattice_maxNslipFamily + index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family + do i = 1_pInt,plastic_titanmod_Nslip(f,instance) ! process each (active) slip system in family + j = j+1_pInt + + !* Calculation of Lp + !* Resolved shear stress on slip system + tau_slip(j) = dot_product(Tstar_v,lattice_Sslip_v(:,1,index_myFamily+i,ph))/slipDamage(j) + if(lattice_structure(ph)==LATTICE_hex_ID) then ! only for prismatic and pyr systems in hex + screwvelocity_prefactor=plastic_titanmod_debyefrequency(instance)* & + plasticState(ph)%state(4_pInt*ns+nt+j, of)*(plastic_titanmod_burgersPerSlipSys(j,instance)/ & + plastic_titanmod_kinkcriticallength_PerSlipSys(j,instance))**2 + + !* Stress ratio for screw ! No slip resistance for screw dislocations, only Peierls stress + bottomstress_screw=plastic_titanmod_tau0s_PerSlipSys(j,instance) + StressRatio_screw_p = ((abs(tau_slip(j)))/ & + ( bottomstress_screw) & + )**plastic_titanmod_ps_PerSlipSys(j,instance) + + if((1.0_pReal-StressRatio_screw_p)>0.001_pReal) then + minusStressRatio_screw_p=1.0_pReal-StressRatio_screw_p + else + minusStressRatio_screw_p=0.001_pReal + endif + + bottomstress_screw=plastic_titanmod_tau0s_PerSlipSys(j,instance) + StressRatio_screw_pminus1 = ((abs(tau_slip(j)))/ & + ( bottomstress_screw) & + )**(plastic_titanmod_ps_PerSlipSys(j,instance)-1.0_pReal) + + !* Boltzmann ratio for screw + BoltzmannRatioscrew = plastic_titanmod_kinkf0(instance)/(kB*Temperature) + + else ! if the structure is not hex or the slip family is basal + screwvelocity_prefactor=plastic_titanmod_v0s_PerSlipSys(j,instance) + bottomstress_screw=plastic_titanmod_tau0s_PerSlipSys(j,instance)+ & + plasticState(ph)%state(6*ns+nt+j, of) + StressRatio_screw_p = ((abs(tau_slip(j)))/( bottomstress_screw ))**plastic_titanmod_ps_PerSlipSys(j,instance) + + if((1.0_pReal-StressRatio_screw_p)>0.001_pReal) then + minusStressRatio_screw_p=1.0_pReal-StressRatio_screw_p + else + minusStressRatio_screw_p=0.001_pReal + endif + + StressRatio_screw_pminus1 = ((abs(tau_slip(j)))/( bottomstress_screw))** & + (plastic_titanmod_ps_PerSlipSys(j,instance)-1.0_pReal) + + !* Boltzmann ratio for screw + BoltzmannRatioscrew = plastic_titanmod_f0_PerSlipSys(j,instance)/(kB*Temperature) + + endif + + !* Stress ratio for edge + bottomstress_edge=plastic_titanmod_tau0e_PerSlipSys(j,instance)+ & + plasticState(ph)%state(5*ns+nt+j, of) + StressRatio_edge_p = ((abs(tau_slip(j)))/ & + ( bottomstress_edge) & + )**plastic_titanmod_pe_PerSlipSys(j,instance) + + if((1.0_pReal-StressRatio_edge_p)>0.001_pReal) then + minusStressRatio_edge_p=1.0_pReal-StressRatio_edge_p + else + minusStressRatio_edge_p=0.001_pReal + endif + + StressRatio_edge_pminus1 = ((abs(tau_slip(j)))/( bottomstress_edge))** & + (plastic_titanmod_pe_PerSlipSys(j,instance)-1.0_pReal) + + !* Boltzmann ratio for edge. For screws it is defined above + BoltzmannRatioedge = plastic_titanmod_f0_PerSlipSys(j,instance)/(kB*Temperature) + + screw_velocity(j) =screwvelocity_prefactor * & ! there is no v0 for screw now because it is included in the prefactor + exp(-BoltzmannRatioscrew*(minusStressRatio_screw_p)** & + plastic_titanmod_qs_PerSlipSys(j,instance)) + + edge_velocity(j) =plastic_titanmod_v0e_PerSlipSys(j,instance)*exp(-BoltzmannRatioedge* & + (minusStressRatio_edge_p)** & + plastic_titanmod_qe_PerSlipSys(j,instance)) + + !* Shear rates due to edge slip + gdot_slip_edge(j) = plastic_titanmod_burgersPerSlipSys(j,instance)*(plasticState(ph)%state(j, of)* & + edge_velocity(j))* sign(1.0_pReal,tau_slip(j)) + !* Shear rates due to screw slip + gdot_slip_screw(j) = plastic_titanmod_burgersPerSlipSys(j,instance)*(plasticState(ph)%state(ns+j, of) * & + screw_velocity(j))* sign(1.0_pReal,tau_slip(j)) + !Total shear rate + + gdot_slip(j) = gdot_slip_edge(j) + gdot_slip_screw(j) + + plasticState(ph)%state( 7*ns+2*nt+j, of)= edge_velocity(j) + plasticState(ph)%state( 8*ns+2*nt+j, of)= screw_velocity(j) + plasticState(ph)%state( 9*ns+2*nt+j, of)= tau_slip(j) + plasticState(ph)%state(10*ns+2*nt+j, of)= gdot_slip_edge(j) + plasticState(ph)%state(11*ns+2*nt+j, of)= gdot_slip_screw(j) + plasticState(ph)%state(12*ns+2*nt+j, of)= StressRatio_edge_p + plasticState(ph)%state(13*ns+2*nt+j, of)= StressRatio_screw_p + + !* Derivatives of shear rates + dgdot_dtauslip(j) = plastic_titanmod_burgersPerSlipSys(j,instance)*(( & + ( & + ( & + ( & + (edge_velocity(j)*plasticState(ph)%state(j, of))) * & + BoltzmannRatioedge*& + plastic_titanmod_pe_PerSlipSys(j,instance)* & + plastic_titanmod_qe_PerSlipSys(j,instance) & + )/ & + bottomstress_edge & + )*& + StressRatio_edge_pminus1*(minusStressRatio_edge_p)** & + (plastic_titanmod_qe_PerSlipSys(j,instance)-1.0_pReal) & + ) + & + ( & + ( & + ( & + (plasticState(ph)%state(ns+j, of) * screw_velocity(j)) * & + BoltzmannRatioscrew* & + plastic_titanmod_ps_PerSlipSys(j,instance)* & + plastic_titanmod_qs_PerSlipSys(j,instance) & + )/ & + bottomstress_screw & + )*& + StressRatio_screw_pminus1*(minusStressRatio_screw_p)**(plastic_titanmod_qs_PerSlipSys(j,instance)-1.0_pReal) & + ) & + ) !* sign(1.0_pReal,tau_slip(j)) + + + +!************************************************* +!sumf=0.0_pReal + !* Plastic velocity gradient for dislocation glide + Lp = Lp + (1.0_pReal - sumf)*gdot_slip(j)*lattice_Sslip(1:3,1:3,1,index_myFamily+i,ph) + + !* Calculation of the tangent of Lp + forall (k=1_pInt:3_pInt,l=1_pInt:3_pInt,m=1_pInt:3_pInt,n=1_pInt:3_pInt) & + dLp_dTstar3333(k,l,m,n) = & + dLp_dTstar3333(k,l,m,n) + dgdot_dtauslip(j)*& + lattice_Sslip(k,l,1,index_myFamily+i,ph)*& + lattice_Sslip(m,n,1,index_myFamily+i,ph) + enddo + enddo slipFamiliesLoop + +!* Mechanical twinning part + gdot_twin = 0.0_pReal + dgdot_dtautwin = 0.0_pReal + j = 0_pInt + twinFamiliesLoop: do f = 1_pInt,lattice_maxNtwinFamily + index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,ph)) ! at which index starts my family + do i = 1_pInt,plastic_titanmod_Ntwin(f,instance) ! process each (active) slip system in family + j = j+1_pInt + + !* Calculation of Lp + !* Resolved shear stress on twin system + tau_twin(j) = dot_product(Tstar_v,lattice_Stwin_v(:,index_myFamily+i,ph)) + +!************************************************************************************** + !* Stress ratios +! StressRatio_r = (plasticState(ph)%state6*ns+3*nt+j, of)/tau_twin(j))**plastic_titanmod_r(instance) + + !* Shear rates and their derivatives due to twin +! if ( tau_twin(j) > 0.0_pReal ) !then +! gdot_twin(j) = 0.0_pReal!& +! (plastic_titanmod_MaxTwinFraction(instance)-sumf)*lattice_shearTwin(index_myFamily+i,ph)*& +! plasticState(ph)%state(6*ns+4*nt+j, of)*plastic_titanmod_Ndot0PerTwinSys(f,instance)*exp(-StressRatio_r) +! dgdot_dtautwin(j) = ((gdot_twin(j)*plastic_titanmod_r(instance))/tau_twin(j))*StressRatio_r +! endif +!************************************************************************************** + + !* Stress ratio for edge + twinStressRatio_p = ((abs(tau_twin(j)))/ & + ( plastic_titanmod_twintau0_PerTwinSys(j,instance)+plasticState(ph)%state(7*ns+nt+j, of)) & + )**plastic_titanmod_twinp_PerTwinSys(j,instance) + + if((1.0_pReal-twinStressRatio_p)>0.001_pReal) then + twinminusStressRatio_p=1.0_pReal-twinStressRatio_p + else + twinminusStressRatio_p=0.001_pReal + endif + + twinStressRatio_pminus1 = ((abs(tau_twin(j)))/ & + ( plastic_titanmod_twintau0_PerTwinSys(j,instance)+plasticState(ph)%state(7*ns+nt+j, of)) & + )**(plastic_titanmod_twinp_PerTwinSys(j,instance)-1.0_pReal) + + !* Boltzmann ratio + BoltzmannRatiotwin = plastic_titanmod_twinf0_PerTwinSys(j,instance)/(kB*Temperature) + + !* Initial twin shear rates + TwinDotGamma0 = & + plastic_titanmod_twingamma0_PerTwinSys(j,instance) + + !* Shear rates due to twin + gdot_twin(j) =sign(1.0_pReal,tau_twin(j))*plastic_titanmod_twingamma0_PerTwinSys(j,instance)* & + exp(-BoltzmannRatiotwin*(twinminusStressRatio_p)**plastic_titanmod_twinq_PerTwinSys(j,instance)) + + + !* Derivatives of shear rates in twin + dgdot_dtautwin(j) = ( & + ( & + ( & + (abs(gdot_twin(j))) * & + BoltzmannRatiotwin*& + plastic_titanmod_twinp_PerTwinSys(j,instance)* & + plastic_titanmod_twinq_PerTwinSys(j,instance) & + )/ & + plastic_titanmod_twintau0_PerTwinSys(j,instance) & + )*& + twinStressRatio_pminus1*(twinminusStressRatio_p)** & + (plastic_titanmod_twinq_PerTwinSys(j,instance)-1.0_pReal) & + ) !* sign(1.0_pReal,tau_slip(j)) + + !* Plastic velocity gradient for mechanical twinning +! Lp = Lp + sumf*gdot_twin(j)*lattice_Stwin(:,:,index_myFamily+i,ph) + Lp = Lp + gdot_twin(j)*lattice_Stwin(:,:,index_myFamily+i,ph) + + !* Calculation of the tangent of Lp + forall (k=1_pInt:3_pInt,l=1_pInt:3_pInt,m=1_pInt:3_pInt,n=1_pInt:3_pInt) & + dLp_dTstar3333(k,l,m,n) = & + dLp_dTstar3333(k,l,m,n) + dgdot_dtautwin(j)*& + lattice_Stwin(k,l,index_myFamily+i,ph)*& + lattice_Stwin(m,n,index_myFamily+i,ph) + enddo + enddo twinFamiliesLoop + +dLp_dTstar99 = math_Plain3333to99(dLp_dTstar3333) +! tempState=state + + +end subroutine plastic_titanmod_LpAndItsTangent + + +!-------------------------------------------------------------------------------------------------- +!> @brief calculates the rate of change of microstructure +!-------------------------------------------------------------------------------------------------- +subroutine plastic_titanmod_dotState(Tstar_v,temperature,ipc,ip,el) + use lattice, only: & + lattice_Stwin_v, & + lattice_maxNslipFamily, & + lattice_maxNtwinFamily, & + lattice_NslipSystem, & + lattice_NtwinSystem + use mesh, only: & + mesh_NcpElems, & + mesh_maxNips + use material, only: & + homogenization_maxNgrains, & + material_phase, & + phase_plasticityInstance, & + plasticState, & + mappingConstitutive + +implicit none + real(pReal), dimension(6), intent(in):: & + Tstar_v !< 2nd Piola Kirchhoff stress tensor in Mandel notation + real(pReal), intent(in) :: & + temperature !< temperature at integration point + integer(pInt), intent(in) :: & + ipc, & !< component-ID of integration point + ip, & !< integration point + el !< element + + integer(pInt) :: & + index_myFamily, instance, & + ns,nt,& + f,i,j, & + ph, & + of + real(pReal) :: & + sumf,BoltzmannRatio, & + twinStressRatio_p,twinminusStressRatio_p + real(pReal), dimension(plastic_titanmod_totalNslip(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & + DotRhoEdgeGeneration, & + DotRhoEdgeAnnihilation, & + DotRhoScrewGeneration, & + DotRhoScrewAnnihilation + real(pReal), dimension(plastic_titanmod_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & + gdot_twin, & + tau_twin, & + volumefraction_PerTwinSys + +!-------------------------------------------------------------------------------------------------- +! shortened notation + + of = mappingConstitutive(1,ipc,ip,el) + ph = mappingConstitutive(2,ipc,ip,el) + instance = phase_plasticityInstance(ph) + ns = plastic_titanmod_totalNslip(instance) + nt = plastic_titanmod_totalNtwin(instance) + do i=1_pInt,nt + volumefraction_PerTwinSys(i)=plasticState(ph)%state(3_pInt*ns+i, of)/ & + plastic_titanmod_twinshearconstant_PerTwinSys(i,instance) + + enddo + + sumf = sum(abs(volumefraction_PerTwinSys(1_pInt:nt))) ! safe for nt == 0 + + plasticState(ph)%dotState(:,of) = 0.0_pReal + j = 0_pInt + slipFamiliesLoop: do f = 1_pInt,lattice_maxNslipFamily + index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family + do i = 1_pInt,plastic_titanmod_Nslip(f,instance) ! process each (active) slip system in family + j = j+1_pInt + + DotRhoEdgeGeneration(j) = & ! multiplication of edge dislocations + plasticState(ph)%state(ns+j, of)*plasticState(ph)%state(8*ns+2*nt+j, of)/plasticState(ph)%state(4*ns+nt+j, of) + DotRhoScrewGeneration(j) = & ! multiplication of screw dislocations + plasticState(ph)%state(j, of)*plasticState(ph)%state(7*ns+2*nt+j, of)/plasticState(ph)%state(3*ns+nt+j, of) + DotRhoEdgeAnnihilation(j) = -((plasticState(ph)%state(j, of))**2)* & ! annihilation of edge dislocations + plastic_titanmod_capre_PerSlipSys(j,instance)*plasticState(ph)%state(7*ns+2*nt+j, of)*0.5_pReal + DotRhoScrewAnnihilation(j) = -((plasticState(ph)%state(ns+j, of))**2)* & ! annihilation of screw dislocations + plastic_titanmod_caprs_PerSlipSys(j,instance)*plasticState(ph)%state(8*ns+2*nt+j, of)*0.5_pReal + plasticState(ph)%dotState(j, of) = & ! edge dislocation density rate of change + DotRhoEdgeGeneration(j)+DotRhoEdgeAnnihilation(j) + + plasticState(ph)%dotState(ns+j, of) = & ! screw dislocation density rate of change + DotRhoScrewGeneration(j)+DotRhoScrewAnnihilation(j) + + plasticState(ph)%dotState(2*ns+j, of) = & ! sum of shear due to edge and screw + plasticState(ph)%state(10*ns+2*nt+j, of)+plasticState(ph)%state(11*ns+2*nt+j, of) + enddo + enddo slipFamiliesLoop + +!* Twin fraction evolution + j = 0_pInt + twinFamiliesLoop: do f = 1_pInt,lattice_maxNtwinFamily + index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,ph)) ! at which index starts my family + do i = 1_pInt,plastic_titanmod_Ntwin(f,instance) ! process each (active) twin system in family + j = j+1_pInt + + !* Resolved shear stress on twin system + tau_twin(j) = dot_product(Tstar_v,lattice_Stwin_v(:,index_myFamily+i,ph)) + + !* Stress ratio for edge + twinStressRatio_p = ((abs(tau_twin(j)))/ & + ( plastic_titanmod_twintau0_PerTwinSys(j,instance)+plasticState(ph)%state(7*ns+nt+j, of)) & + )**(plastic_titanmod_twinp_PerTwinSys(j,instance)) + + + if((1.0_pReal-twinStressRatio_p)>0.001_pReal) then + twinminusStressRatio_p=1.0_pReal-twinStressRatio_p + else + twinminusStressRatio_p=0.001_pReal + endif + + BoltzmannRatio = plastic_titanmod_twinf0_PerTwinSys(j,instance)/(kB*Temperature) + + gdot_twin(j) =plastic_titanmod_twingamma0_PerTwinSys(j,instance)*exp(-BoltzmannRatio* & + (twinminusStressRatio_p)** & + plastic_titanmod_twinq_PerTwinSys(j,instance))*sign(1.0_pReal,tau_twin(j)) + + plasticState(ph)%dotState(3*ns+j, of)=gdot_twin(j) + + enddo + enddo twinFamiliesLoop + +end subroutine plastic_titanmod_dotState +!-------------------------------------------------------------------------------------------------- +!> @brief returns accumulated slip +!-------------------------------------------------------------------------------------------------- +subroutine plastic_titanmod_getAccumulatedSlip(nSlip,accumulatedSlip,ipc, ip, el) + use lattice, only: & + lattice_maxNslipFamily + use material, only: & + mappingConstitutive, & + plasticState, & + phase_plasticityInstance + + implicit none + + real(pReal), dimension(:), allocatable :: & + accumulatedSlip + integer(pInt) :: & + nSlip + integer(pInt), intent(in) :: & + ipc, & !< grain number + ip, & !< integration point number + el !< element number + integer(pInt) :: & + offset, & + phase, & + instance, & + offset_accshear_slip, & + f, j, i + + offset = mappingConstitutive(1,ipc,ip,el) + phase = mappingConstitutive(2,ipc,ip,el) + instance = phase_plasticityInstance(phase) + nSlip = plastic_titanmod_totalNslip(instance) + allocate(accumulatedSlip(nSlip)) + offset_accshear_slip = 2_pInt*nSlip + + j = 0_pInt + do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families + do i = 1_pInt,plastic_titanmod_Nslip(f,instance) ! process each (active) slip system in family + j = j+1_pInt + accumulatedSlip(j) = plasticState(phase)%state(offset_accshear_slip+j,offset) + enddo + enddo + +end subroutine plastic_titanmod_getAccumulatedSlip + + +!-------------------------------------------------------------------------------------------------- +!> @brief returns accumulated slip +!-------------------------------------------------------------------------------------------------- +subroutine plastic_titanmod_getSlipRate(nSlip,slipRate,ipc, ip, el) + use lattice, only: & + lattice_maxNslipFamily + use material, only: & + mappingConstitutive, & + plasticState, & + phase_plasticityInstance + + implicit none + + real(pReal), dimension(:), allocatable :: & + slipRate + integer(pInt) :: & + nSlip + integer(pInt), intent(in) :: & + ipc, & !< grain number + ip, & !< integration point number + el !< element number + integer(pInt) :: & + offset, & + phase, & + instance, & + offset_accshear_slip, & + f, j, i + + offset = mappingConstitutive(1,ipc,ip,el) + phase = mappingConstitutive(2,ipc,ip,el) + instance = phase_plasticityInstance(phase) + nSlip = plastic_titanmod_totalNslip(instance) + allocate(slipRate(nSlip)) + offset_accshear_slip = 2_pInt*nSlip + + j = 0_pInt + do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families + do i = 1_pInt,plastic_titanmod_Nslip(f,instance) ! process each (active) slip system in family + j = j+1_pInt + slipRate(j) = plasticState(phase)%dotState(offset_accshear_slip+j,offset) + enddo + enddo + +end subroutine plastic_titanmod_getSlipRate + + +!-------------------------------------------------------------------------------------------------- +!> @brief return array of constitutive results +!-------------------------------------------------------------------------------------------------- +function plastic_titanmod_postResults(ipc,ip,el) + use mesh, only: & + mesh_NcpElems, & + mesh_maxNips + use material, only: & + homogenization_maxNgrains, & + material_phase, & + phase_plasticityInstance, & + phase_Noutput, & + plasticState, & + mappingConstitutive + + implicit none + integer(pInt), intent(in) :: & + ipc, & !< component-ID of integration point + ip, & !< integration point + el !< element + real(pReal), dimension(plastic_titanmod_sizePostResults(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & + plastic_titanmod_postResults + + integer(pInt) :: & + instance, & + ns,nt,& + o,i,c, & + ph, & + of + real(pReal) :: sumf + + real(pReal), dimension(plastic_titanmod_totalNtwin(phase_plasticityInstance(material_phase(ipc,ip,el)))) :: & + volumefraction_PerTwinSys + +!-------------------------------------------------------------------------------------------------- +! shortened notation + of = mappingConstitutive(1,ipc,ip,el) + ph = mappingConstitutive(2,ipc,ip,el) + instance = phase_plasticityInstance(ph) + ns = plastic_titanmod_totalNslip(instance) + nt = plastic_titanmod_totalNtwin(instance) + + do i=1_pInt,nt + volumefraction_PerTwinSys(i)=plasticState(ph)%state(3_pInt*ns+i, of)/ & + plastic_titanmod_twinshearconstant_PerTwinSys(i,instance) + enddo + + sumf = sum(abs(volumefraction_PerTwinSys(1:nt))) ! safe for nt == 0 + + +!-------------------------------------------------------------------------------------------------- +! required output + c = 0_pInt + plastic_titanmod_postResults = 0.0_pReal + + do o = 1_pInt,plastic_titanmod_Noutput(instance) + select case(plastic_titanmod_outputID(o,instance)) + case (rhoedge_ID) + plastic_titanmod_postResults(c+1_pInt:c+ns) = plasticState(ph)%state(1_pInt:ns, of) + c = c + ns + case (rhoscrew_ID) + plastic_titanmod_postResults(c+1_pInt:c+ns) = plasticState(ph)%state(ns+1_pInt:2_pInt*ns, of) + c = c + ns + case (segment_edge_ID) + plastic_titanmod_postResults(c+1_pInt:c+ns) = plasticState(ph)%state(3_pInt*ns+nt+1_pInt:4_pInt*ns+nt, of) + c = c + ns + case (segment_screw_ID) + plastic_titanmod_postResults(c+1_pInt:c+ns) = plasticState(ph)%state(4_pInt*ns+nt+1_pInt:5_pInt*ns+nt, of) + c = c + ns + case (resistance_edge_ID) + plastic_titanmod_postResults(c+1_pInt:c+ns) = plasticState(ph)%state(5_pInt*ns+nt+1_pInt:6_pInt*ns+nt, of) + c = c + ns + case (resistance_screw_ID) + plastic_titanmod_postResults(c+1_pInt:c+ns) = plasticState(ph)%state(6_pInt*ns+nt+1_pInt:7_pInt*ns+nt, of) + c = c + ns + case (velocity_edge_ID) + plastic_titanmod_postResults(c+1_pInt:c+ns) = plasticState(ph)%state(7*ns+2*nt+1:8*ns+2*nt, of) + c = c + ns + case (velocity_screw_ID) + plastic_titanmod_postResults(c+1_pInt:c+ns) = plasticState(ph)%state(8*ns+2*nt+1:9*ns+2*nt, of) + c = c + ns + case (tau_slip_ID) + plastic_titanmod_postResults(c+1_pInt:c+ns) = abs(plasticState(ph)%state(9*ns+2*nt+1:10*ns+2*nt, of)) + c = c + ns + case (gdot_slip_edge_ID) + plastic_titanmod_postResults(c+1_pInt:c+ns) = abs(plasticState(ph)%state(10*ns+2*nt+1:11*ns+2*nt, of)) + c = c + ns + case (gdot_slip_screw_ID) + plastic_titanmod_postResults(c+1_pInt:c+ns) = abs(plasticState(ph)%state(11*ns+2*nt+1:12*ns+2*nt, of)) + c = c + ns + case (gdot_slip_ID) + plastic_titanmod_postResults(c+1_pInt:c+ns) = abs(plasticState(ph)%state(10*ns+2*nt+1:11*ns+2*nt, of)) + & + abs(plasticState(ph)%state(11*ns+2*nt+1:12*ns+2*nt, of)) + c = c + ns + case (stressratio_edge_p_ID) + plastic_titanmod_postResults(c+1_pInt:c+ns) = abs(plasticState(ph)%state(12*ns+2*nt+1:13*ns+2*nt, of)) + c = c + ns + case (stressratio_screw_p_ID) + plastic_titanmod_postResults(c+1_pInt:c+ns) = abs(plasticState(ph)%state(13*ns+2*nt+1:14*ns+2*nt, of)) + c = c + ns + case (shear_system_ID) + plastic_titanmod_postResults(c+1_pInt:c+ns) = abs(plasticState(ph)%state(2*ns+1:3*ns, of)) + c = c + ns + case (shear_basal_ID) + plastic_titanmod_postResults(c+1_pInt:c+1_pInt) = sum(abs(plasticState(ph)%state(2*ns+1:2*ns+3, of))) + c = c + 1_pInt + case (shear_prism_ID) + plastic_titanmod_postResults(c+1_pInt:c+1_pInt) = sum(abs(plasticState(ph)%state(2*ns+4:2*ns+6, of))) + c = c + 1_pInt + case (shear_pyra_ID) + plastic_titanmod_postResults(c+1_pInt:c+1_pInt) = sum(abs(plasticState(ph)%state(2*ns+7:2*ns+12, of))) + c = c + 1_pInt + case (shear_pyrca_ID) + plastic_titanmod_postResults(c+1_pInt:c+1_pInt) = sum(abs(plasticState(ph)%state(2*ns+13:2*ns+24, of))) + c = c + 1_pInt + + case (rhoedge_basal_ID) + plastic_titanmod_postResults(c+1_pInt:c+1_pInt) = sum(plasticState(ph)%state(1:3, of)) + c = c + 1_pInt + case (rhoedge_prism_ID) + plastic_titanmod_postResults(c+1_pInt:c+1_pInt) = sum(plasticState(ph)%state(4:6, of)) + c = c + 1_pInt + case (rhoedge_pyra_ID) + plastic_titanmod_postResults(c+1_pInt:c+1_pInt) = sum(plasticState(ph)%state(7:12,of)) + c = c + 1_pInt + case (rhoedge_pyrca_ID) + plastic_titanmod_postResults(c+1_pInt:c+1_pInt) = sum(plasticState(ph)%state(13:24, of)) + c = c + 1_pInt + + case (rhoscrew_basal_ID) + plastic_titanmod_postResults(c+1_pInt:c+1_pInt) = sum(plasticState(ph)%state(ns+1:ns+3, of)) + c = c + 1_pInt + case (rhoscrew_prism_ID) + plastic_titanmod_postResults(c+1_pInt:c+1_pInt) = sum(plasticState(ph)%state(ns+4:ns+6, of)) + c = c + 1_pInt + case (rhoscrew_pyra_ID) + plastic_titanmod_postResults(c+1_pInt:c+1_pInt) = sum(plasticState(ph)%state(ns+7:ns+12, of)) + c = c + 1_pInt + case (rhoscrew_pyrca_ID) + plastic_titanmod_postResults(c+1_pInt:c+1_pInt) = sum(plasticState(ph)%state(ns+13:ns+24, of)) + c = c + 1_pInt + case (shear_total_ID) + plastic_titanmod_postResults(c+1_pInt:c+1_pInt) = sum(abs(plasticState(ph)%state(2*ns+1:3*ns, of))) + c = c + 1_pInt + case (twin_fraction_ID) + plastic_titanmod_postResults(c+1_pInt:c+nt) = abs(volumefraction_PerTwinSys(1:nt)) + c = c + nt + end select + enddo + +end function plastic_titanmod_postResults + +end module plastic_titanmod