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_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
|
||||
!--------------------------------------------------------------------------------------------------
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
!--------------------------------------------------------------------------------------------------
|
||||
|
|
Loading…
Reference in New Issue