From bc9cf40371ee0d0d6c548a3d4058d4d5c134cd48 Mon Sep 17 00:00:00 2001 From: Pratheek Shanthraj Date: Sat, 11 Oct 2014 10:39:44 +0000 Subject: [PATCH] vacancy diffusion proportional to accumulated slip (pipe diffusion along dislocations) --- code/constitutive.f90 | 41 +++++++++++++++++++++++++++++++++++++ code/homogenization.f90 | 9 +++++--- code/vacancy_generation.f90 | 38 ++++++++++++++++++++++++++++++++++ 3 files changed, 85 insertions(+), 3 deletions(-) diff --git a/code/constitutive.f90 b/code/constitutive.f90 index ca115d111..4b7b780f1 100644 --- a/code/constitutive.f90 +++ b/code/constitutive.f90 @@ -39,6 +39,7 @@ module constitutive constitutive_getLocalVacancyConcentration, & constitutive_putLocalVacancyConcentration, & constitutive_getVacancyConcentration, & + constitutive_getVacancyDiffusion33, & constitutive_postResults private :: & @@ -1252,6 +1253,46 @@ function constitutive_getVacancyConcentration(ipc, ip, el) end function constitutive_getVacancyConcentration +!-------------------------------------------------------------------------------------------------- +!> @brief returns vacancy diffusion tensor +!-------------------------------------------------------------------------------------------------- +function constitutive_getVacancyDiffusion33(Fp, ipc, ip, el) + use prec, only: & + pReal + use lattice, only: & + lattice_VacancyDiffusion33 + use material, only: & + material_phase, & + LOCAL_VACANCY_generation_ID, & + phase_vacancy + use vacancy_generation, only: & + vacancy_generation_getVacancyDiffusion33 + + implicit none + integer(pInt), intent(in) :: & + ipc, & !< grain number + ip, & !< integration point number + el !< element number + real(pReal), dimension(3,3) :: & + Fp, & + constitutive_getVacancyDiffusion33 + real(pReal), dimension(:), allocatable :: & + accumulatedSlip + integer(pInt) :: & + nSlip + + constitutive_getVacancyDiffusion33 = lattice_VacancyDiffusion33(1:3,1:3,material_phase(ipc,ip,el)) + select case(phase_vacancy(material_phase(ipc,ip,el))) + case (LOCAL_VACANCY_generation_ID) + call constitutive_getAccumulatedSlip(nSlip,accumulatedSlip,Fp,ipc,ip,el) + constitutive_getVacancyDiffusion33 = & + vacancy_generation_getVacancyDiffusion33(nSlip,accumulatedSlip,constitutive_getTemperature(ipc,ip,el), & + ipc,ip,el) + + end select + +end function constitutive_getVacancyDiffusion33 + !-------------------------------------------------------------------------------------------------- !> @brief returns accumulated slip on each system defined !-------------------------------------------------------------------------------------------------- diff --git a/code/homogenization.f90 b/code/homogenization.f90 index 10b7020e5..957b6c9fa 100644 --- a/code/homogenization.f90 +++ b/code/homogenization.f90 @@ -1107,13 +1107,15 @@ function field_getVacancyDiffusion33(ip,el) use lattice, only: & lattice_vacancyDiffusion33 use material, only: & - material_phase, & material_homog, & field_vacancy_type, & FIELD_VACANCY_NONLOCAL_ID, & homogenization_Ngrains use crystallite, only: & - crystallite_push33ToRef + crystallite_push33ToRef, & + crystallite_Fp + use constitutive, only: & + constitutive_getVacancyDiffusion33 implicit none real(pReal), dimension(3,3) :: field_getVacancyDiffusion33 @@ -1129,7 +1131,8 @@ function field_getVacancyDiffusion33(ip,el) case (FIELD_VACANCY_NONLOCAL_ID) do ipc = 1, homogenization_Ngrains(mesh_element(3,el)) field_getVacancyDiffusion33 = field_getVacancyDiffusion33 + & - crystallite_push33ToRef(ipc,ip,el,lattice_vacancyDiffusion33(:,:,material_phase(ipc,ip,el))) + crystallite_push33ToRef(ipc,ip,el, & + constitutive_getVacancyDiffusion33(crystallite_Fp(1:3,1:3,ipc,ip,el),ipc,ip,el)) enddo end select diff --git a/code/vacancy_generation.f90 b/code/vacancy_generation.f90 index 4277aed9a..945da160b 100644 --- a/code/vacancy_generation.f90 +++ b/code/vacancy_generation.f90 @@ -49,6 +49,7 @@ module vacancy_generation vacancy_generation_dotState, & vacancy_generation_getConcentration, & vacancy_generation_putConcentration, & + vacancy_generation_getVacancyDiffusion33, & vacancy_generation_postResults contains @@ -356,6 +357,43 @@ subroutine vacancy_generation_putConcentration(ipc, ip, el, localVacancyConcentr end subroutine vacancy_generation_putConcentration +!-------------------------------------------------------------------------------------------------- +!> @brief returns generation vacancy diffusion tensor +!-------------------------------------------------------------------------------------------------- +function vacancy_generation_getVacancyDiffusion33(nSlip,accumulatedSlip,temperature,ipc,ip,el) + use lattice, only: & + lattice_VacancyDiffusion33 + use material, only: & + mappingConstitutive, & + phase_vacancyInstance, & + vacancyState + + implicit none + integer(pInt), intent(in) :: & + nSlip, & + ipc, & !< grain number + ip, & !< integration point number + el !< element number + real(pReal), dimension(3,3) :: & + vacancy_generation_getVacancyDiffusion33 + real(pReal), dimension(nSlip) :: & + accumulatedSlip + real(pReal) :: & + temperature + integer(pInt) :: & + phase, constituent, instance + + phase = mappingConstitutive(2,ipc,ip,el) + constituent = mappingConstitutive(1,ipc,ip,el) + instance = phase_vacancyInstance(phase) + + vacancy_generation_getVacancyDiffusion33 = & + lattice_VacancyDiffusion33(1:3,1:3,phase)* & + (1.0_pReal + vacancy_generation_C2(instance)*sum(accumulatedSlip))* & + exp(-vacancy_generation_energy(instance)/(kB*temperature)) + +end function vacancy_generation_getVacancyDiffusion33 + !-------------------------------------------------------------------------------------------------- !> @brief return array of constitutive results !--------------------------------------------------------------------------------------------------