From 61a3b33e71c457a467acda1341824f74dd11b749 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Sun, 25 Jul 2021 11:54:41 +0200 Subject: [PATCH] output info about used slip/twin systems --- src/lattice.f90 | 7 +- src/phase_mechanical_plastic_dislotwin.f90 | 76 ++++++++++++---------- 2 files changed, 47 insertions(+), 36 deletions(-) diff --git a/src/lattice.f90 b/src/lattice.f90 index bf48fe019..65950774e 100644 --- a/src/lattice.f90 +++ b/src/lattice.f90 @@ -1930,7 +1930,8 @@ subroutine buildTransformationSystem(Q,S,Ntrans,cOverA,a_fcc,a_bcc) -1,-2,-1, -1, 1,-1, & -1, 1, 2, -1, 1,-1 & ],pReal),shape(FCCTOHEX_SYSTEMTRANS)) - real(pReal), dimension(4,fcc_Ntrans), parameter :: & + + real(pReal), dimension(4,fcc_Ntrans), parameter :: & FCCTOBCC_SYSTEMTRANS = reshape([& 0.0, 1.0, 0.0, 10.26, & ! Pitsch OR (Ma & Hartmaier 2014, Table 3) 0.0,-1.0, 0.0, 10.26, & @@ -1978,7 +1979,7 @@ subroutine buildTransformationSystem(Q,S,Ntrans,cOverA,a_fcc,a_bcc) 0.0, 0.0, 1.0, 45.0 & ],shape(FCCTOBCC_BAINROT)) - if (a_bcc > 0.0_pReal .and. a_fcc > 0.0_pReal .and. dEq0(cOverA)) then ! fcc -> bcc transformation + if (a_bcc > 0.0_pReal .and. a_fcc > 0.0_pReal .and. dEq0(cOverA)) then ! fcc -> bcc do i = 1,sum(Ntrans) call R%fromAxisAngle(FCCTOBCC_SYSTEMTRANS(:,i),degrees=.true.,P=1) call B%fromAxisAngle(FCCTOBCC_BAINROT(:,i), degrees=.true.,P=1) @@ -1992,7 +1993,7 @@ subroutine buildTransformationSystem(Q,S,Ntrans,cOverA,a_fcc,a_bcc) Q(1:3,1:3,i) = matmul(R%asMatrix(),B%asMatrix()) S(1:3,1:3,i) = matmul(R%asMatrix(),U) - MATH_I3 enddo - elseif (cOverA > 0.0_pReal .and. dEq0(a_bcc)) then ! fcc -> hex transformation + elseif (cOverA > 0.0_pReal .and. dEq0(a_bcc)) then ! fcc -> hex ss = MATH_I3 sd = MATH_I3 ss(1,3) = sqrt(2.0_pReal)/4.0_pReal diff --git a/src/phase_mechanical_plastic_dislotwin.f90 b/src/phase_mechanical_plastic_dislotwin.f90 index 6ecf9ee7a..75f55fa7a 100644 --- a/src/phase_mechanical_plastic_dislotwin.f90 +++ b/src/phase_mechanical_plastic_dislotwin.f90 @@ -83,6 +83,9 @@ submodule(phase:plastic) dislotwin ExtendedDislocations, & !< consider split into partials for climb calculation fccTwinTransNucleation, & !< twinning and transformation models are for fcc omitDipoles !< flag controlling consideration of dipole formation + character(len=:), allocatable, dimension(:) :: & + systems_sl, & + systems_tw end type !< container type for internal constitutive parameters type :: tDislotwinState @@ -193,6 +196,7 @@ module function plastic_dislotwin_init() result(myPlasticity) N_sl = pl%get_as1dInt('N_sl',defaultVal=emptyIntArray) prm%sum_N_sl = sum(abs(N_sl)) slipActive: if (prm%sum_N_sl > 0) then + prm%systems_sl = lattice_labels_slip(N_sl,phase_lattice(ph)) prm%P_sl = lattice_SchmidMatrix_slip(N_sl,phase_lattice(ph),phase_cOverA(ph)) prm%h_sl_sl = lattice_interaction_SlipBySlip(N_sl,pl%get_as1dFloat('h_sl-sl'),phase_lattice(ph)) prm%forestProjection = lattice_forestProjection_edge(N_sl,phase_lattice(ph),phase_cOverA(ph)) @@ -261,6 +265,7 @@ module function plastic_dislotwin_init() result(myPlasticity) N_tw = pl%get_as1dInt('N_tw', defaultVal=emptyIntArray) prm%sum_N_tw = sum(abs(N_tw)) twinActive: if (prm%sum_N_tw > 0) then + prm%systems_tw = lattice_labels_twin(N_tw,phase_lattice(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)) @@ -794,44 +799,49 @@ module subroutine plastic_dislotwin_results(ph,group) integer, intent(in) :: ph character(len=*), intent(in) :: group - integer :: o + integer :: ou - associate(prm => param(ph), stt => state(ph), dst => dependentState(ph)) - outputsLoop: do o = 1,size(prm%output) - select case(trim(prm%output(o))) - case('rho_mob') - if(prm%sum_N_sl>0) call results_writeDataset(stt%rho_mob,group,trim(prm%output(o)), & - 'mobile dislocation density','1/m²') - case('rho_dip') - if(prm%sum_N_sl>0) call results_writeDataset(stt%rho_dip,group,trim(prm%output(o)), & - 'dislocation dipole density','1/m²') - case('gamma_sl') - if(prm%sum_N_sl>0) call results_writeDataset(stt%gamma_sl,group,trim(prm%output(o)), & - 'plastic shear','1') - case('Lambda_sl') - if(prm%sum_N_sl>0) call results_writeDataset(dst%Lambda_sl,group,trim(prm%output(o)), & - 'mean free path for slip','m') - case('tau_pass') - if(prm%sum_N_sl>0) call results_writeDataset(dst%tau_pass,group,trim(prm%output(o)), & - 'passing stress for slip','Pa') + associate(prm => param(ph), stt => state(ph), dst => dependentState(ph)) - case('f_tw') - if(prm%sum_N_tw>0) call results_writeDataset(stt%f_tw,group,trim(prm%output(o)), & - 'twinned volume fraction','m³/m³') - case('Lambda_tw') - if(prm%sum_N_tw>0) call results_writeDataset(dst%Lambda_tw,group,trim(prm%output(o)), & - 'mean free path for twinning','m') - case('tau_hat_tw') - if(prm%sum_N_tw>0) call results_writeDataset(dst%tau_hat_tw,group,trim(prm%output(o)), & - 'threshold stress for twinning','Pa') + do ou = 1,size(prm%output) - case('f_tr') - if(prm%sum_N_tr>0) call results_writeDataset(stt%f_tr,group,trim(prm%output(o)), & - 'martensite volume fraction','m³/m³') + select case(trim(prm%output(ou))) + + case('rho_mob') + call results_writePhaseState(stt%rho_mob,group,trim(prm%output(ou)),prm%systems_sl, & + 'mobile dislocation density','1/m²') + case('rho_dip') + call results_writePhaseState(stt%rho_dip,group,trim(prm%output(ou)),prm%systems_sl, & + 'dislocation dipole density','1/m²') + case('gamma_sl') + call results_writePhaseState(stt%gamma_sl,group,trim(prm%output(ou)),prm%systems_sl, & + 'plastic shear','1') + case('Lambda_sl') + call results_writePhaseState(dst%Lambda_sl,group,trim(prm%output(ou)),prm%systems_sl, & + 'mean free path for slip','m') + case('tau_pass') + call results_writePhaseState(dst%tau_pass,group,trim(prm%output(ou)),prm%systems_sl, & + 'passing stress for slip','Pa') + + case('f_tw') + call results_writePhaseState(stt%f_tw,group,trim(prm%output(ou)),prm%systems_tw, & + 'twinned volume fraction','m³/m³') + case('Lambda_tw') + call results_writePhaseState(dst%Lambda_tw,group,trim(prm%output(ou)),prm%systems_tw, & + 'mean free path for twinning','m') + case('tau_hat_tw') + call results_writePhaseState(dst%tau_hat_tw,group,trim(prm%output(ou)),prm%systems_tw, & + 'threshold stress for twinning','Pa') + + case('f_tr') + if(prm%sum_N_tr>0) call results_writeDataset(stt%f_tr,group,trim(prm%output(ou)), & + 'martensite volume fraction','m³/m³') + + end select + + enddo - end select - enddo outputsLoop end associate end subroutine plastic_dislotwin_results