vacancy diffusion proportional to accumulated slip (pipe diffusion along dislocations)
This commit is contained in:
parent
c0584b47e1
commit
bc9cf40371
|
@ -39,6 +39,7 @@ module constitutive
|
||||||
constitutive_getLocalVacancyConcentration, &
|
constitutive_getLocalVacancyConcentration, &
|
||||||
constitutive_putLocalVacancyConcentration, &
|
constitutive_putLocalVacancyConcentration, &
|
||||||
constitutive_getVacancyConcentration, &
|
constitutive_getVacancyConcentration, &
|
||||||
|
constitutive_getVacancyDiffusion33, &
|
||||||
constitutive_postResults
|
constitutive_postResults
|
||||||
|
|
||||||
private :: &
|
private :: &
|
||||||
|
@ -1252,6 +1253,46 @@ function constitutive_getVacancyConcentration(ipc, ip, el)
|
||||||
|
|
||||||
end function constitutive_getVacancyConcentration
|
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
|
!> @brief returns accumulated slip on each system defined
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
|
|
@ -1107,13 +1107,15 @@ function field_getVacancyDiffusion33(ip,el)
|
||||||
use lattice, only: &
|
use lattice, only: &
|
||||||
lattice_vacancyDiffusion33
|
lattice_vacancyDiffusion33
|
||||||
use material, only: &
|
use material, only: &
|
||||||
material_phase, &
|
|
||||||
material_homog, &
|
material_homog, &
|
||||||
field_vacancy_type, &
|
field_vacancy_type, &
|
||||||
FIELD_VACANCY_NONLOCAL_ID, &
|
FIELD_VACANCY_NONLOCAL_ID, &
|
||||||
homogenization_Ngrains
|
homogenization_Ngrains
|
||||||
use crystallite, only: &
|
use crystallite, only: &
|
||||||
crystallite_push33ToRef
|
crystallite_push33ToRef, &
|
||||||
|
crystallite_Fp
|
||||||
|
use constitutive, only: &
|
||||||
|
constitutive_getVacancyDiffusion33
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
real(pReal), dimension(3,3) :: field_getVacancyDiffusion33
|
real(pReal), dimension(3,3) :: field_getVacancyDiffusion33
|
||||||
|
@ -1129,7 +1131,8 @@ function field_getVacancyDiffusion33(ip,el)
|
||||||
case (FIELD_VACANCY_NONLOCAL_ID)
|
case (FIELD_VACANCY_NONLOCAL_ID)
|
||||||
do ipc = 1, homogenization_Ngrains(mesh_element(3,el))
|
do ipc = 1, homogenization_Ngrains(mesh_element(3,el))
|
||||||
field_getVacancyDiffusion33 = field_getVacancyDiffusion33 + &
|
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
|
enddo
|
||||||
|
|
||||||
end select
|
end select
|
||||||
|
|
|
@ -49,6 +49,7 @@ module vacancy_generation
|
||||||
vacancy_generation_dotState, &
|
vacancy_generation_dotState, &
|
||||||
vacancy_generation_getConcentration, &
|
vacancy_generation_getConcentration, &
|
||||||
vacancy_generation_putConcentration, &
|
vacancy_generation_putConcentration, &
|
||||||
|
vacancy_generation_getVacancyDiffusion33, &
|
||||||
vacancy_generation_postResults
|
vacancy_generation_postResults
|
||||||
|
|
||||||
contains
|
contains
|
||||||
|
@ -356,6 +357,43 @@ subroutine vacancy_generation_putConcentration(ipc, ip, el, localVacancyConcentr
|
||||||
|
|
||||||
end subroutine vacancy_generation_putConcentration
|
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
|
!> @brief return array of constitutive results
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
|
Loading…
Reference in New Issue