From 89e03be69942ee582358422129bf46e16c35fed4 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Wed, 3 Oct 2018 07:51:11 +0200 Subject: [PATCH] also building interactions for slip-twin and twin-slip --- src/lattice.f90 | 90 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) diff --git a/src/lattice.f90 b/src/lattice.f90 index 8e4e79d93..09476ae4d 100644 --- a/src/lattice.f90 +++ b/src/lattice.f90 @@ -2328,6 +2328,96 @@ function lattice_interactionTwinTwin2(Ntwin,interactionValues,structure) end function lattice_interactionTwinTwin2 +!-------------------------------------------------------------------------------------------------- +!> @brief Populates reduced slip-twin interaction matrix +!> ToDo: prefix "2" needed as long as deprecated array lattice_interactionTwinTwin exists +!-------------------------------------------------------------------------------------------------- +function lattice_interactionSlipTwin2(Nslip,Ntwin,interactionValues,structure) + use IO, only: & + IO_error + + implicit none + integer(pInt), dimension(:), intent(in) :: Nslip !< number of active slip systems per family + integer(pInt), dimension(:), intent(in) :: Ntwin !< number of active twin systems per family + real(pReal), dimension(:), intent(in) :: interactionValues !< interaction values twin-twin + character(len=*), intent(in) :: structure !< lattice structure + real(pReal), dimension(sum(Nslip),sum(Ntwin)) :: lattice_interactionSlipTwin2 + + integer(pInt), dimension(:), allocatable :: NslipMax + integer(pInt), dimension(:), allocatable :: NtwinMax + integer(pInt), dimension(:,:), allocatable :: interactionSlipTwin + + select case(structure) + case('fcc') + interactionSlipTwin = LATTICE_FCC_INTERACTIONSLIPTWIN + NslipMax = LATTICE_FCC_NSLIPSYSTEM + NtwinMax = LATTICE_FCC_NTWINSYSTEM + case('bcc') + interactionSlipTwin = LATTICE_BCC_INTERACTIONSLIPTWIN + NslipMax = LATTICE_BCC_NSLIPSYSTEM + NtwinMax = LATTICE_BCC_NTWINSYSTEM + case('hex','hexagonal') !ToDo: "No alias policy": long or short? + interactionSlipTwin = LATTICE_HEX_INTERACTIONSLIPTWIN + NslipMax = LATTICE_HEX_NSLIPSYSTEM + NtwinMax = LATTICE_HEX_NTWINSYSTEM + case default + call IO_error(132_pInt,ext_msg=trim(structure)//' (slip twin interaction)') + end select + + if (any(Ntwin(1:size(Ntwin)) - Ntwin < 0_pInt)) & + call IO_error(145_pInt,ext_msg='Ntrans '//trim(structure)) + + lattice_interactionSlipTwin2 = & + buildInteraction(Nslip,Ntwin,NslipMax,NtwinMax,interactionValues,interactionSlipTwin) + +end function lattice_interactionSlipTwin2 + + +!-------------------------------------------------------------------------------------------------- +!> @brief Populates reduced slip-twin interaction matrix +!> ToDo: prefix "2" needed as long as deprecated array lattice_interactionTwinTwin exists +!-------------------------------------------------------------------------------------------------- +function lattice_interactionTwinSlip2(Ntwin,Nslip,interactionValues,structure) + use IO, only: & + IO_error + + implicit none + integer(pInt), dimension(:), intent(in) :: Nslip !< number of active slip systems per family + integer(pInt), dimension(:), intent(in) :: Ntwin !< number of active twin systems per family + real(pReal), dimension(:), intent(in) :: interactionValues !< interaction values twin-twin + character(len=*), intent(in) :: structure !< lattice structure + real(pReal), dimension(sum(Ntwin),sum(Nslip)) :: lattice_interactionTwinSlip2 + + integer(pInt), dimension(:), allocatable :: NslipMax + integer(pInt), dimension(:), allocatable :: NtwinMax + integer(pInt), dimension(:,:), allocatable :: interactionTwinSlip + + select case(structure) + case('fcc') + interactionTwinSlip = LATTICE_FCC_INTERACTIONTWINSLIP + NtwinMax = LATTICE_FCC_NTWINSYSTEM + NslipMax = LATTICE_FCC_NSLIPSYSTEM + case('bcc') + interactionTwinSlip = LATTICE_BCC_INTERACTIONTWINSLIP + NtwinMax = LATTICE_BCC_NTWINSYSTEM + NslipMax = LATTICE_BCC_NSLIPSYSTEM + case('hex','hexagonal') !ToDo: "No alias policy": long or short? + interactionTwinSlip = LATTICE_HEX_INTERACTIONTWINSLIP + NtwinMax = LATTICE_HEX_NTWINSYSTEM + NslipMax = LATTICE_HEX_NSLIPSYSTEM + case default + call IO_error(132_pInt,ext_msg=trim(structure)//' (slip twin interaction)') + end select + + if (any(Ntwin(1:size(Ntwin)) - Ntwin < 0_pInt)) & + call IO_error(145_pInt,ext_msg='Ntrans '//trim(structure)) + + lattice_interactionTwinSlip2 = & + buildInteraction(Ntwin,Nslip,NtwinMax,NslipMax,interactionValues,interactionTwinSlip) + +end function lattice_interactionTwinSlip2 + + !-------------------------------------------------------------------------------------------------- !> @brief Populates reduced trans-trans interaction matrix !> ToDo: prefix "2" needed as long as deprecated array lattice_interactionTransTrans exists