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
!--------------------------------------------------------------------------------------------------