reading in interaction parameters, looping only over existing families

This commit is contained in:
Martin Diehl 2018-07-05 12:45:50 +02:00
parent 9d993de256
commit 580a0bbedd
2 changed files with 113 additions and 93 deletions

@ -1 +1 @@
Subproject commit aead92902b3a0cf3404be9c552bfec918d7aaffb Subproject commit 704e2fc50dff343b085ea3d469f30bb3e2acae5a

View File

@ -310,6 +310,7 @@ subroutine plastic_dislotwin_init(fileUnit)
prm%v0 = config_phase(p)%getFloats('v0') prm%v0 = config_phase(p)%getFloats('v0')
prm%v0 = math_expand(prm%v0,prm%Nslip) prm%v0 = math_expand(prm%v0,prm%Nslip)
prm%interaction_SlipSlip = spread(config_phase(p)%getFloats('interaction_slipslip'),2,1)
prm%CEdgeDipMinDistance = config_phase(p)%getFloat('cedgedipmindistance') prm%CEdgeDipMinDistance = config_phase(p)%getFloat('cedgedipmindistance')
@ -335,6 +336,7 @@ subroutine plastic_dislotwin_init(fileUnit)
prm%xc_twin = config_phase(p)%getFloat('xc_twin') prm%xc_twin = config_phase(p)%getFloat('xc_twin')
prm%interaction_TwinTwin = spread(config_phase(p)%getFloats('interaction_twintwin'),2,1)
if (lattice_structure(p) /= LATTICE_fcc_ID) then if (lattice_structure(p) /= LATTICE_fcc_ID) then
prm%Ndot0_twin = config_phase(p)%getFloats('ndot0_twin') prm%Ndot0_twin = config_phase(p)%getFloats('ndot0_twin')
prm%Ndot0_twin = math_expand(prm%Ndot0_twin,prm%Ntwin) prm%Ndot0_twin = math_expand(prm%Ndot0_twin,prm%Ntwin)
@ -352,8 +354,9 @@ subroutine plastic_dislotwin_init(fileUnit)
endif endif
prm%Ntrans = config_phase(p)%getInts('ntrans', defaultVal=emptyInt) prm%Ntrans = config_phase(p)%getInts('ntrans', defaultVal=emptyInt)
prm%totalNtrans = sum(prm%Ntrans)
!if (size > Nchunks_SlipFamilies + 1_pInt) call IO_error(150_pInt,ext_msg=extmsg) !if (size > Nchunks_SlipFamilies + 1_pInt) call IO_error(150_pInt,ext_msg=extmsg)
if (sum(prm%Ntrans) > 0_pInt) then if (prm%totalNtrans > 0_pInt) then
prm%burgers_trans = config_phase(p)%getFloats('transburgers') prm%burgers_trans = config_phase(p)%getFloats('transburgers')
prm%burgers_trans = math_expand(prm%burgers_trans,prm%Ntrans) prm%burgers_trans = math_expand(prm%burgers_trans,prm%Ntrans)
@ -364,6 +367,7 @@ subroutine plastic_dislotwin_init(fileUnit)
prm%xc_trans = config_phase(p)%getFloat('xc_trans', defaultVal=0.0_pReal) ! ToDo: How to handle that??? prm%xc_trans = config_phase(p)%getFloat('xc_trans', defaultVal=0.0_pReal) ! ToDo: How to handle that???
prm%L0_trans = config_phase(p)%getFloat('l0_trans') prm%L0_trans = config_phase(p)%getFloat('l0_trans')
prm%interaction_TransTrans = spread(config_phase(p)%getFloats('interaction_transtrans'),2,1)
if (lattice_structure(p) /= LATTICE_fcc_ID) then if (lattice_structure(p) /= LATTICE_fcc_ID) then
prm%Ndot0_trans = config_phase(p)%getFloats('ndot0_trans') prm%Ndot0_trans = config_phase(p)%getFloats('ndot0_trans')
prm%Ndot0_trans = math_expand(prm%Ndot0_trans,prm%Ntrans) prm%Ndot0_trans = math_expand(prm%Ndot0_trans,prm%Ntrans)
@ -379,6 +383,16 @@ subroutine plastic_dislotwin_init(fileUnit)
prm%VcrossSlip = config_phase(p)%getFloat('vcrossslip') prm%VcrossSlip = config_phase(p)%getFloat('vcrossslip')
endif endif
if (prm%totalNslip > 0_pInt .and. prm%totalNtwin > 0_pInt) then
prm%interaction_SlipTwin = spread(config_phase(p)%getFloats('interaction_sliptwin'),2,1)
prm%interaction_TwinSlip = spread(config_phase(p)%getFloats('interaction_twinslip'),2,1)
endif
if (prm%totalNslip > 0_pInt .and. prm%totalNtrans > 0_pInt) then
prm%interaction_TransSlip = spread(config_phase(p)%getFloats('interaction_transslip'),2,1)
prm%interaction_SlipTrans = spread(config_phase(p)%getFloats('interaction_sliptrans'),2,1)
endif
prm%aTolRho = config_phase(p)%getFloat('atol_rho') prm%aTolRho = config_phase(p)%getFloat('atol_rho')
prm%aTolTwinFrac = config_phase(p)%getFloat('atol_twinfrac') prm%aTolTwinFrac = config_phase(p)%getFloat('atol_twinfrac')
@ -637,20 +651,15 @@ subroutine plastic_dislotwin_init(fileUnit)
plasticState(p)%accumulatedSlip => & plasticState(p)%accumulatedSlip => &
plasticState(p)%state (offset_slip+1:offset_slip+plasticState(p)%nslip,1:NofMyPhase) plasticState(p)%state (offset_slip+1:offset_slip+plasticState(p)%nslip,1:NofMyPhase)
allocate(temp1(prm%totalNslip,prm%totalNslip), source =0.0_pReal)
allocate(temp2(prm%totalNslip,prm%totalNtwin), source =0.0_pReal)
allocate(temp3(prm%totalNslip,prm%totalNtrans),source =0.0_pReal)
mySlipFamilies: do f = 1_pInt,size(prm%Nslip,1)
index_myFamily = sum(prm%Nslip(1:f-1_pInt))
!* Process slip related parameters ------------------------------------------------
slipFamiliesLoop: do f = 1_pInt,lattice_maxNslipFamily
index_myFamily = sum(prm%Nslip(1:f-1_pInt)) ! index in truncated slip system list
slipSystemsLoop: do j = 1_pInt,prm%Nslip(f) slipSystemsLoop: do j = 1_pInt,prm%Nslip(f)
do o = 1_pInt, size(prm%Nslip,1)
!* Burgers vector,
! dislocation velocity prefactor,
! mean free path prefactor,
! and minimum dipole distance
!* Calculation of forest projections for edge dislocations
!* Interaction matrices
do o = 1_pInt,lattice_maxNslipFamily
index_otherFamily = sum(prm%Nslip(1:o-1_pInt)) index_otherFamily = sum(prm%Nslip(1:o-1_pInt))
do k = 1_pInt,prm%Nslip(o) ! loop over (active) systems in other family (slip) do k = 1_pInt,prm%Nslip(o) ! loop over (active) systems in other family (slip)
forestProjectionEdge(index_myFamily+j,index_otherFamily+k,instance) = & forestProjectionEdge(index_myFamily+j,index_otherFamily+k,instance) = &
@ -663,7 +672,7 @@ subroutine plastic_dislotwin_init(fileUnit)
p),1 ) p),1 )
enddo; enddo enddo; enddo
do o = 1_pInt,lattice_maxNtwinFamily do o = 1_pInt,size(prm%Ntwin,1)
index_otherFamily = sum(prm%Ntwin(1:o-1_pInt)) index_otherFamily = sum(prm%Ntwin(1:o-1_pInt))
do k = 1_pInt,prm%Ntwin(o) ! loop over (active) systems in other family (twin) do k = 1_pInt,prm%Ntwin(o) ! loop over (active) systems in other family (twin)
temp2(index_myFamily+j,index_otherFamily+k) = & temp2(index_myFamily+j,index_otherFamily+k) = &
@ -673,7 +682,7 @@ subroutine plastic_dislotwin_init(fileUnit)
p),1 ) p),1 )
enddo; enddo enddo; enddo
do o = 1_pInt,lattice_maxNtransFamily do o = 1_pInt,size(prm%Ntrans,1)
index_otherFamily = sum(prm%Ntrans(1:o-1_pInt)) index_otherFamily = sum(prm%Ntrans(1:o-1_pInt))
do k = 1_pInt,prm%Ntrans(o) ! loop over (active) systems in other family (trans) do k = 1_pInt,prm%Ntrans(o) ! loop over (active) systems in other family (trans)
temp3(index_myFamily+j,index_otherFamily+k) = & temp3(index_myFamily+j,index_otherFamily+k) = &
@ -684,11 +693,18 @@ subroutine plastic_dislotwin_init(fileUnit)
enddo; enddo enddo; enddo
enddo slipSystemsLoop enddo slipSystemsLoop
enddo slipFamiliesLoop enddo mySlipFamilies
prm%interaction_SlipSlip = temp1; deallocate(temp1)
prm%interaction_SlipTwin = temp2; deallocate(temp2)
prm%interaction_SlipTrans = temp3; deallocate(temp3)
allocate(temp1(prm%totalNtwin,prm%totalNslip), source =0.0_pReal)
allocate(temp2(prm%totalNtwin,prm%totalNtwin), source =0.0_pReal)
Ctwin3333 = 0.0_pReal Ctwin3333 = 0.0_pReal
!* Process twin related parameters ------------------------------------------------
twinFamiliesLoop: do f = 1_pInt,lattice_maxNtwinFamily twinFamiliesLoop: do f = 1_pInt, size(prm%Ntwin,1)
index_myFamily = sum(prm%Ntwin(1:f-1_pInt)) ! index in truncated twin system list index_myFamily = sum(prm%Ntwin(1:f-1_pInt)) ! index in truncated twin system list
twinSystemsLoop: do j = 1_pInt,prm%Ntwin(f) twinSystemsLoop: do j = 1_pInt,prm%Ntwin(f)
@ -711,7 +727,7 @@ subroutine plastic_dislotwin_init(fileUnit)
math_Mandel3333to66(Ctwin3333(1:3,1:3,1:3,1:3,index_myFamily+j)) math_Mandel3333to66(Ctwin3333(1:3,1:3,1:3,1:3,index_myFamily+j))
!* Interaction matrices !* Interaction matrices
do o = 1_pInt,lattice_maxNslipFamily do o = 1_pInt,size(prm%Nslip,1)
index_otherFamily = sum(prm%Nslip(1:o-1_pInt)) index_otherFamily = sum(prm%Nslip(1:o-1_pInt))
do k = 1_pInt,prm%Nslip(o) ! loop over (active) systems in other family (slip) do k = 1_pInt,prm%Nslip(o) ! loop over (active) systems in other family (slip)
temp1(index_myFamily+j,index_otherFamily+k) = & temp1(index_myFamily+j,index_otherFamily+k) = &
@ -721,7 +737,7 @@ subroutine plastic_dislotwin_init(fileUnit)
p),1 ) p),1 )
enddo; enddo enddo; enddo
do o = 1_pInt,lattice_maxNtwinFamily do o = 1_pInt,size(prm%Ntwin,1)
index_otherFamily = sum(prm%Ntwin(1:o-1_pInt)) index_otherFamily = sum(prm%Ntwin(1:o-1_pInt))
do k = 1_pInt,prm%Ntwin(o) ! loop over (active) systems in other family (twin) do k = 1_pInt,prm%Ntwin(o) ! loop over (active) systems in other family (twin)
temp2(index_myFamily+j,index_otherFamily+k) = & temp2(index_myFamily+j,index_otherFamily+k) = &
@ -733,16 +749,18 @@ subroutine plastic_dislotwin_init(fileUnit)
enddo twinSystemsLoop enddo twinSystemsLoop
enddo twinFamiliesLoop enddo twinFamiliesLoop
prm%interaction_TwinSlip = temp1; deallocate(temp1)
prm%interaction_TwinTwin = temp2; deallocate(temp2)
!* Process transformation related parameters ------------------------------------------------
transFamiliesLoop: do f = 1_pInt,lattice_maxNtransFamily allocate(temp1(prm%totalNtrans,prm%totalNslip), source =0.0_pReal)
allocate(temp2(prm%totalNtrans,prm%totalNtrans), source =0.0_pReal)
transFamiliesLoop: do f = 1_pInt,size(prm%Ntrans,1)
index_myFamily = sum(prm%Ntrans(1:f-1_pInt)) ! index in truncated trans system list index_myFamily = sum(prm%Ntrans(1:f-1_pInt)) ! index in truncated trans system list
transSystemsLoop: do j = 1_pInt,prm%Ntrans(f) transSystemsLoop: do j = 1_pInt,prm%Ntrans(f)
!* Burgers vector,
! nucleation rate prefactor,
! and martensite size
!* Rotate trans elasticity matrices
Ctrans3333 = 0.0_pReal Ctrans3333 = 0.0_pReal
index_otherFamily = sum(lattice_NtransSystem(1:f-1_pInt,p)) ! index in full lattice trans list index_otherFamily = sum(lattice_NtransSystem(1:f-1_pInt,p)) ! 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 l = 1_pInt,3_pInt; do m = 1_pInt,3_pInt; do n = 1_pInt,3_pInt; do o = 1_pInt,3_pInt
@ -760,7 +778,7 @@ subroutine plastic_dislotwin_init(fileUnit)
math_Mandel3333to66(Ctrans3333(1:3,1:3,1:3,1:3,index_myFamily+j)) math_Mandel3333to66(Ctrans3333(1:3,1:3,1:3,1:3,index_myFamily+j))
!* Interaction matrices !* Interaction matrices
do o = 1_pInt,lattice_maxNslipFamily do o = 1_pInt,size(prm%Nslip,1)
index_otherFamily = sum(prm%Nslip(1:o-1_pInt)) index_otherFamily = sum(prm%Nslip(1:o-1_pInt))
do k = 1_pInt,prm%Nslip(o) ! loop over (active) systems in other family (slip) do k = 1_pInt,prm%Nslip(o) ! loop over (active) systems in other family (slip)
temp1(index_myFamily+j,index_otherFamily+k) = & temp1(index_myFamily+j,index_otherFamily+k) = &
@ -770,7 +788,7 @@ subroutine plastic_dislotwin_init(fileUnit)
p) ,1 ) p) ,1 )
enddo; enddo enddo; enddo
do o = 1_pInt,lattice_maxNtransFamily do o = 1_pInt,size(prm%Ntrans,1)
index_otherFamily = sum(prm%Ntrans(1:o-1_pInt)) index_otherFamily = sum(prm%Ntrans(1:o-1_pInt))
do k = 1_pInt,prm%Ntrans(o) ! loop over (active) systems in other family (trans) do k = 1_pInt,prm%Ntrans(o) ! loop over (active) systems in other family (trans)
temp2(index_myFamily+j,index_otherFamily+k) = & temp2(index_myFamily+j,index_otherFamily+k) = &
@ -781,20 +799,24 @@ subroutine plastic_dislotwin_init(fileUnit)
enddo; enddo enddo; enddo
!* Projection matrices for shear from slip systems to fault-band (twin) systems for strain-induced martensite nucleation !* Projection matrices for shear from slip systems to fault-band (twin) systems for strain-induced martensite nucleation
select case(trans_lattice_structure(p)) ! select case(trans_lattice_structure(p))
case (LATTICE_bcc_ID) ! case (LATTICE_bcc_ID)
do o = 1_pInt,lattice_maxNtransFamily ! do o = 1_pInt,sum(prm%Ntrans,1)
index_otherFamily = sum(prm%Nslip(1:o-1_pInt)) ! index_otherFamily = sum(prm%Nslip(1:o-1_pInt))
do k = 1_pInt,prm%Nslip(o) ! loop over (active) systems in other family (trans) ! do k = 1_pInt,prm%Nslip(o) ! loop over (active) systems in other family (trans)
temp3(index_myFamily+j,index_otherFamily+k) = & ! temp3(index_myFamily+j,index_otherFamily+k) = &
lattice_projectionTrans( sum(lattice_NtransSystem(1:f-1,p))+j, & ! lattice_projectionTrans( sum(lattice_NtransSystem(1:f-1,p))+j, &
sum(lattice_NslipSystem(1:o-1,p))+k, p) ! sum(lattice_NslipSystem(1:o-1,p))+k, p)
enddo; enddo ! enddo; enddo
end select ! end select
enddo transSystemsLoop enddo transSystemsLoop
enddo transFamiliesLoop enddo transFamiliesLoop
prm%interaction_TransSlip = temp1; deallocate(temp1)
prm%interaction_TransTrans = temp2; deallocate(temp2)
startIndex=1_pInt startIndex=1_pInt
endIndex=prm%totalNslip endIndex=prm%totalNslip
state(instance)%rhoEdge=>plasticState(p)%state(startIndex:endIndex,:) state(instance)%rhoEdge=>plasticState(p)%state(startIndex:endIndex,:)
@ -1750,8 +1772,6 @@ function plastic_dislotwin_postResults(Tstar_v,Temperature,ipc,ip,el)
use lattice, only: & use lattice, only: &
lattice_Sslip_v, & lattice_Sslip_v, &
lattice_Stwin_v, & lattice_Stwin_v, &
lattice_maxNslipFamily, &
lattice_maxNtwinFamily, &
lattice_NslipSystem, & lattice_NslipSystem, &
lattice_NtwinSystem, & lattice_NtwinSystem, &
lattice_shearTwin, & lattice_shearTwin, &
@ -1917,7 +1937,7 @@ function plastic_dislotwin_postResults(Tstar_v,Temperature,ipc,ip,el)
if (prm%totalNtwin > 0_pInt) then if (prm%totalNtwin > 0_pInt) then
j = 0_pInt j = 0_pInt
do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families do f = 1_pInt,size(prm%Nslip,1)
index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family
do i = 1_pInt,prm%Nslip(f) ! process each (active) slip system in family do i = 1_pInt,prm%Nslip(f) ! process each (active) slip system in family
j = j + 1_pInt j = j + 1_pInt
@ -1951,7 +1971,7 @@ function plastic_dislotwin_postResults(Tstar_v,Temperature,ipc,ip,el)
enddo;enddo enddo;enddo
j = 0_pInt j = 0_pInt
do f = 1_pInt,lattice_maxNtwinFamily ! loop over all twin families do f = 1_pInt,size(prm%Ntwin,1)
index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,ph)) ! at which index starts my family index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,ph)) ! at which index starts my family
do i = 1,prm%Ntwin(f) ! process each (active) twin system in family do i = 1,prm%Ntwin(f) ! process each (active) twin system in family
j = j + 1_pInt j = j + 1_pInt
@ -1997,7 +2017,7 @@ function plastic_dislotwin_postResults(Tstar_v,Temperature,ipc,ip,el)
case (resolved_stress_twin_ID) case (resolved_stress_twin_ID)
if (prm%totalNtwin > 0_pInt) then if (prm%totalNtwin > 0_pInt) then
j = 0_pInt j = 0_pInt
do f = 1_pInt,lattice_maxNtwinFamily ! loop over all slip families do f = 1_pInt,size(prm%Ntwin,1)
index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,ph)) ! at which index starts my family index_myFamily = sum(lattice_NtwinSystem(1:f-1_pInt,ph)) ! at which index starts my family
do i = 1_pInt,prm%Ntwin(f) ! process each (active) slip system in family do i = 1_pInt,prm%Ntwin(f) ! process each (active) slip system in family
j = j + 1_pInt j = j + 1_pInt
@ -2010,7 +2030,7 @@ function plastic_dislotwin_postResults(Tstar_v,Temperature,ipc,ip,el)
c = c + prm%totalNtwin c = c + prm%totalNtwin
case (stress_exponent_ID) case (stress_exponent_ID)
j = 0_pInt j = 0_pInt
do f = 1_pInt,lattice_maxNslipFamily ! loop over all slip families do f = 1_pInt,size(prm%Nslip,1)
index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family index_myFamily = sum(lattice_NslipSystem(1:f-1_pInt,ph)) ! at which index starts my family
do i = 1_pInt,prm%Nslip(f) ! process each (active) slip system in family do i = 1_pInt,prm%Nslip(f) ! process each (active) slip system in family
j = j + 1_pInt j = j + 1_pInt