From 5b57ea7d167708ce3f47185046609f783756f8d8 Mon Sep 17 00:00:00 2001
From: Pratheek Shanthraj
Date: Mon, 3 Aug 2015 11:08:59 +0000
Subject: [PATCH] fluctuations proportional to thermal equilibrium
concentration
---
code/source_vacancy_thermalfluc.f90 | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/code/source_vacancy_thermalfluc.f90 b/code/source_vacancy_thermalfluc.f90
index 41a99b12a..42678b755 100644
--- a/code/source_vacancy_thermalfluc.f90
+++ b/code/source_vacancy_thermalfluc.f90
@@ -27,7 +27,8 @@ module source_vacancy_thermalfluc
source_vacancy_thermalfluc_Noutput !< number of outputs per instance of this damage
real(pReal), dimension(:), allocatable, private :: &
- source_vacancy_thermalfluc_amplitude
+ source_vacancy_thermalfluc_amplitude, &
+ source_vacancy_thermalfluc_normVacancyEnergy
public :: &
source_vacancy_thermalfluc_init, &
@@ -60,6 +61,8 @@ subroutine source_vacancy_thermalfluc_init(fileUnit)
IO_error, &
IO_timeStamp, &
IO_EOF
+ use lattice, only: &
+ lattice_vacancyFormationEnergy
use material, only: &
phase_source, &
phase_Nsources, &
@@ -114,6 +117,7 @@ subroutine source_vacancy_thermalfluc_init(fileUnit)
source_vacancy_thermalfluc_output = ''
allocate(source_vacancy_thermalfluc_Noutput(maxNinstance), source=0_pInt)
allocate(source_vacancy_thermalfluc_amplitude(maxNinstance), source=0.0_pReal)
+ allocate(source_vacancy_thermalfluc_normVacancyEnergy(maxNinstance), source=0.0_pReal)
rewind(fileUnit)
phase = 0_pInt
@@ -150,6 +154,8 @@ subroutine source_vacancy_thermalfluc_init(fileUnit)
if (any(phase_source(:,phase) == SOURCE_vacancy_thermalfluc_ID)) then
NofMyPhase=count(material_phase==phase)
instance = source_vacancy_thermalfluc_instance(phase)
+ source_vacancy_thermalfluc_normVacancyEnergy(instance) = &
+ lattice_vacancyFormationEnergy(phase)/1.3806488e-23_pReal
sourceOffset = source_vacancy_thermalfluc_offset(phase)
sizeDotState = 1_pInt
@@ -207,7 +213,7 @@ subroutine source_vacancy_thermalfluc_deltaState(ipc, ip, el)
call random_number(randNo)
sourceState(phase)%p(sourceOffset)%deltaState(1,constituent) = &
- randNo - sourceState(phase)%p(sourceOffset)%state(1,constituent)
+ randNo - 0.5_pReal - sourceState(phase)%p(sourceOffset)%state(1,constituent)
end subroutine source_vacancy_thermalfluc_deltaState
@@ -217,6 +223,9 @@ end subroutine source_vacancy_thermalfluc_deltaState
subroutine source_vacancy_thermalfluc_getRateAndItsTangent(CvDot, dCvDot_dCv, ipc, ip, el)
use material, only: &
mappingConstitutive, &
+ material_homog, &
+ temperature, &
+ thermalMapping, &
sourceState
implicit none
@@ -234,7 +243,10 @@ subroutine source_vacancy_thermalfluc_getRateAndItsTangent(CvDot, dCvDot_dCv, ip
instance = source_vacancy_thermalfluc_instance(phase)
sourceOffset = source_vacancy_thermalfluc_offset(phase)
- CvDot = source_vacancy_thermalfluc_amplitude(instance)*(sourceState(phase)%p(sourceOffset)%state0(2,constituent) - 0.5_pReal)
+ CvDot = source_vacancy_thermalfluc_amplitude(instance)* &
+ sourceState(phase)%p(sourceOffset)%state0(2,constituent)* &
+ exp(-source_vacancy_thermalfluc_normVacancyEnergy(instance)/ &
+ temperature(material_homog(ip,el))%p(thermalMapping(material_homog(ip,el))%p(ip,el)))
dCvDot_dCv = 0.0_pReal
end subroutine source_vacancy_thermalfluc_getRateAndItsTangent