This commit is contained in:
Achal H P 2024-01-19 11:38:14 +05:30
parent c2f81254d0
commit b6a049d80e
2 changed files with 48 additions and 31 deletions

View File

@ -204,12 +204,24 @@ submodule(phase:mechanical) plastic
en en
end subroutine plastic_nonlocal_deltaState end subroutine plastic_nonlocal_deltaState
!module subroutine plastic_kinematic_deltaFp(Mp,ph,en,twinJump) module subroutine plastic_phenopowerlaw_deltaState(ph,en) !< Achal
! implicit none integer, intent(in)::&
! ph, &
!contains en
end subroutine plastic_phenopowerlaw_deltaState
!end module subroutine module subroutine plastic_kinematic_deltaFp(Mp,ph,en,twinJump,deltaFp) !< Achal
real(pReal), dimension(3,3), intent(in) :: &
Mp
integer, intent(in) :: &
ph, &
en
logical , intent(out) :: &
twinJump
real(pReal), dimension(3,3), intent(out) :: &
deltaFp
end subroutine plastic_kinematic_deltaFp
end interface end interface
@ -238,7 +250,7 @@ end subroutine plastic_init
! Mp in, dLp_dMp out ! Mp in, dLp_dMp out
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
module subroutine plastic_LpAndItsTangents(Lp, dLp_dS, dLp_dFi, & module subroutine plastic_LpAndItsTangents(Lp, dLp_dS, dLp_dFi, &
S, Fi, ph,en) S, Fi, ph, en)
integer, intent(in) :: & integer, intent(in) :: &
ph,en ph,en
real(pReal), intent(in), dimension(3,3) :: & real(pReal), intent(in), dimension(3,3) :: &
@ -392,7 +404,7 @@ module function plastic_deltaState(ph, en) result(broken)
broken = .false. broken = .false.
select case (phase_plasticity(ph)) select case (phase_plasticity(ph))
case (PLASTIC_NONLOCAL_ID,PLASTIC_KINEHARDENING_ID) case (PLASTIC_NONLOCAL_ID,PLASTIC_KINEHARDENING_ID, PLASTIC_PHENOPOWERLAW_ID) !> Achal
Mp = matmul(matmul(transpose(phase_mechanical_Fi(ph)%data(1:3,1:3,en)),& Mp = matmul(matmul(transpose(phase_mechanical_Fi(ph)%data(1:3,1:3,en)),&
phase_mechanical_Fi(ph)%data(1:3,1:3,en)),& phase_mechanical_Fi(ph)%data(1:3,1:3,en)),&
@ -406,6 +418,9 @@ module function plastic_deltaState(ph, en) result(broken)
case (PLASTIC_NONLOCAL_ID) plasticType case (PLASTIC_NONLOCAL_ID) plasticType
call plastic_nonlocal_deltaState(Mp,ph,en) call plastic_nonlocal_deltaState(Mp,ph,en)
case (PLASTIC_PHENOPOWERLAW_ID) plasticType !> Achal
call plastic_phenopowerlaw_deltaState(ph,en) !> Achal
end select plasticType end select plasticType
broken = any(IEEE_is_NaN(plasticState(ph)%deltaState(:,en))) broken = any(IEEE_is_NaN(plasticState(ph)%deltaState(:,en)))

View File

@ -36,7 +36,7 @@ type :: tParameters
P_tw, & P_tw, &
P_nS_pos, & P_nS_pos, &
P_nS_neg, & P_nS_neg, &
CorrespondanceMatrix CorrespondanceMatrix !< Achal
integer :: & integer :: &
sum_N_sl, & !< total number of active slip system sum_N_sl, & !< total number of active slip system
sum_N_tw !< total number of active twin systems sum_N_tw !< total number of active twin systems
@ -55,7 +55,7 @@ type :: tIndexDotState
xi_tw, & xi_tw, &
gamma_sl, & gamma_sl, &
gamma_tw, & gamma_tw, &
f_twin f_twin !< Achal
end type tIndexDotState end type tIndexDotState
type :: tPhenopowerlawState type :: tPhenopowerlawState
@ -64,14 +64,14 @@ type :: tPhenopowerlawState
xi_tw, & xi_tw, &
gamma_sl, & gamma_sl, &
gamma_tw, & gamma_tw, &
f_twin f_twin !< Achal
end type tPhenopowerlawState end type tPhenopowerlawState
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
! containers for parameters, dot state index, and state ! containers for parameters, dot state index, and state
type(tParameters), allocatable, dimension(:) :: param type(tParameters), allocatable, dimension(:) :: param
type(tIndexDotState), allocatable, dimension(:) :: indexDotState type(tIndexDotState), allocatable, dimension(:) :: indexDotState
type(tPhenopowerlawState), allocatable, dimension(:) :: state, dot_state, deltastate type(tPhenopowerlawState), allocatable, dimension(:) :: state, dot_state, deltastate !< Achal. added deltastate
contains contains
@ -84,7 +84,7 @@ module function plastic_phenopowerlaw_init() result(myPlasticity)
logical, dimension(:), allocatable :: myPlasticity logical, dimension(:), allocatable :: myPlasticity
integer :: & integer :: &
ph, i, & ph, i, o, &
Nmembers, & Nmembers, &
sizeState, sizeDotState, & sizeState, sizeDotState, &
startIndex, endIndex startIndex, endIndex
@ -114,6 +114,7 @@ phases => config_material%get('phase')
allocate(param(phases%length)) allocate(param(phases%length))
allocate(indexDotState(phases%length)) allocate(indexDotState(phases%length))
allocate(state(phases%length)) allocate(state(phases%length))
allocate(deltastate(phases%length)) !< Achal
do ph = 1, phases%length do ph = 1, phases%length
if (.not. myPlasticity(ph)) cycle if (.not. myPlasticity(ph)) cycle
@ -181,7 +182,7 @@ do ph = 1, phases%length
prm%P_tw = lattice_SchmidMatrix_twin(N_tw,phase_lattice(ph),phase_cOverA(ph)) prm%P_tw = lattice_SchmidMatrix_twin(N_tw,phase_lattice(ph),phase_cOverA(ph))
prm%h_tw_tw = lattice_interaction_TwinByTwin(N_tw,pl%get_as1dFloat('h_tw-tw'),phase_lattice(ph)) prm%h_tw_tw = lattice_interaction_TwinByTwin(N_tw,pl%get_as1dFloat('h_tw-tw'),phase_lattice(ph))
prm%gamma_char = lattice_characteristicShear_twin(N_tw,phase_lattice(ph),phase_cOverA(ph)) prm%gamma_char = lattice_characteristicShear_twin(N_tw,phase_lattice(ph),phase_cOverA(ph))
prm%CorrespondanceMatrix = lattice_CorrespondanceMatrix_twin(N_tw,phase_lattice(ph),phase_cOverA(ph)) prm%CorrespondanceMatrix = lattice_CorrespondanceMatrix_twin(N_tw,phase_lattice(ph),phase_cOverA(ph)) !< Achal
xi_0_tw = pl%get_as1dFloat('xi_0_tw',requiredSize=size(N_tw)) xi_0_tw = pl%get_as1dFloat('xi_0_tw',requiredSize=size(N_tw))
@ -210,7 +211,7 @@ do ph = 1, phases%length
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
! slip-twin related parameters ! slip-twin related parameters
slipAndTwinActive: if (prm%sum_N_sl > 0 .and. prm%sum_N_tw > 0) then slipAndTwinActive: if (prm%sum_N_sl > 0 .and. prm%sum_N_tw > 0) then
prm%h_0_tw_sl = pl%get_asFloat('h_0_tw-sl') prm%h_0_tw_sl = pl%get_asFloat('h_0_tw-sl') ! sanity checks
prm%h_sl_tw = lattice_interaction_SlipByTwin(N_sl,N_tw,pl%get_as1dFloat('h_sl-tw'), & prm%h_sl_tw = lattice_interaction_SlipByTwin(N_sl,N_tw,pl%get_as1dFloat('h_sl-tw'), &
phase_lattice(ph)) phase_lattice(ph))
prm%h_tw_sl = lattice_interaction_TwinBySlip(N_tw,N_sl,pl%get_as1dFloat('h_tw-sl'), & prm%h_tw_sl = lattice_interaction_TwinBySlip(N_tw,N_sl,pl%get_as1dFloat('h_tw-sl'), &
@ -234,10 +235,12 @@ do ph = 1, phases%length
! allocate state arrays ! allocate state arrays
Nmembers = count(material_phaseID == ph) Nmembers = count(material_phaseID == ph)
sizeDotState = size(['xi_sl ','gamma_sl']) * prm%sum_N_sl & sizeDotState = size(['xi_sl ','gamma_sl']) * prm%sum_N_sl &
+ size(['xi_tw ','gamma_tw']) * prm%sum_N_tw & + size(['xi_tw ','gamma_tw']) * prm%sum_N_tw !&
+ size(['xi_tw ','f_twin ']) * prm%sum_N_tw !+ size(['xi_tw ','f_twin ']) * prm%sum_N_tw !Achal
sizeState = sizeDotState sizeState = sizeDotState
!write(6,*)"size fn", size(['xi_sl ','gamma_sl']) ! Achal Delete
call phase_allocateState(plasticState(ph),Nmembers,sizeState,sizeDotState,0) call phase_allocateState(plasticState(ph),Nmembers,sizeState,sizeDotState,0)
deallocate(plasticState(ph)%dotState) ! ToDo: remove dotState completely deallocate(plasticState(ph)%dotState) ! ToDo: remove dotState completely
@ -271,12 +274,14 @@ do ph = 1, phases%length
stt%gamma_tw => plasticState(ph)%state(startIndex:endIndex,:) stt%gamma_tw => plasticState(ph)%state(startIndex:endIndex,:)
plasticState(ph)%atol(startIndex:endIndex) = pl%get_asFloat('atol_gamma',defaultVal=1.0e-6_pReal) plasticState(ph)%atol(startIndex:endIndex) = pl%get_asFloat('atol_gamma',defaultVal=1.0e-6_pReal)
startIndex = endIndex + 1 o = plasticState(ph)%offsetDeltaState
endIndex = endIndex + prm%sum_N_tw startIndex = endIndex + 1 ! Achal
idx_dot%f_twin = [startIndex,endIndex] endIndex = endIndex + prm%sum_N_tw ! Achal
deltastate(ph)%f_twin => plasticState(ph)%state(startIndex:endIndex,:) idx_dot%f_twin = [startIndex,endIndex] ! Achal
deltastate(ph)%f_twin = spread(xi_0_tw, 2, Nmembers) stt%f_twin => plasticState(ph)%state(startIndex:endIndex,:) ! Achal
deltastate(ph)%f_twin => plasticState(ph)%state(startIndex-o:endIndex-o,:) ! Achal
!write(6,*)"delta state", deltastate(ph)%f_twin ! Achal Delete
end associate end associate
@ -401,6 +406,7 @@ end function phenopowerlaw_dotState
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief calculates instantaneous incremental change of kinematics and associated jump state !> @brief calculates instantaneous incremental change of kinematics and associated jump state
!> Satya, Achal
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
module subroutine plastic_kinematic_deltaFp(Mp,ph,en,twinJump,deltaFp) module subroutine plastic_kinematic_deltaFp(Mp,ph,en,twinJump,deltaFp)
use math, only: & use math, only: &
@ -433,20 +439,16 @@ fdot_twin = (0.05_pReal*(abs(tau_tw)/state(ph)%xi_tw(:,en))**param(ph)%n_tw)/par
!write(6,*) 'twin_var', twin_var !delete this !write(6,*) 'twin_var', twin_var !delete this
if (en==1) write(6,*)'correspondanceMatrix1', param(ph)%CorrespondanceMatrix(:,:,1) !delete this !if (en==1) write(6,*)'correspondanceMatrix1', param(ph)%CorrespondanceMatrix(:,:,1) !delete this !delete this
if (en==1) write(6,*)'correspondanceMatrix2', param(ph)%CorrespondanceMatrix(:,:,2) !delete this
if (en==1) write(6,*)'correspondanceMatrix3', param(ph)%CorrespondanceMatrix(:,:,3) !delete this
if (en==1) write(6,*)'correspondanceMatrix4', param(ph)%CorrespondanceMatrix(:,:,4) !delete this
if (en==1) write(6,*)'correspondanceMatrix5', param(ph)%CorrespondanceMatrix(:,:,5) !delete this
if (en==1) write(6,*)'correspondanceMatrix6', param(ph)%CorrespondanceMatrix(:,:,6) !delete this
call RANDOM_NUMBER(random) call RANDOM_NUMBER(random)
!write(6,*)'random',random !delete this !write(6,*)'random',random !delete this
Success_Growth: if (random*0.0000000000000000000000001_pReal <= sum(state(ph)%gamma_tw(:,en)/param(ph)%gamma_char)) then Success_Growth: if (random*0.0000000000000000000000001_pReal <= sum(state(ph)%gamma_tw(:,en)/param(ph)%gamma_char)) then ! Instead of sum take max
twinJump = .true. twinJump = .true.
deltaFp = param(ph)%CorrespondanceMatrix(:,:,twin_var) deltaFp = param(ph)%CorrespondanceMatrix(:,:,twin_var)
deltastate(ph)%f_twin(:,en) = 0.0_pReal - state(ph)%f_twin(:,en)
end if Success_Growth end if Success_Growth
@ -458,14 +460,14 @@ end subroutine plastic_kinematic_deltaFp
!> @brief calculates (instantaneous) incremental change of microstructure !> @brief calculates (instantaneous) incremental change of microstructure
!> Satya, Achal !> Satya, Achal
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
subroutine plastic_phenopowerlaw_deltaState(ph,en) module subroutine plastic_phenopowerlaw_deltaState(ph,en)
implicit none implicit none
integer, intent(in)::& integer, intent(in)::&
ph, & ph, &
en en
deltastate(ph)%gamma_sl=0.0_pReal deltastate(ph)%f_twin=0.0_pReal
end subroutine plastic_phenopowerlaw_deltaState end subroutine plastic_phenopowerlaw_deltaState