From e8ee5d6723572c9534f493e2d181f4137fae938b Mon Sep 17 00:00:00 2001 From: Pratheek Shanthraj Date: Thu, 11 Jun 2015 09:01:37 +0000 Subject: [PATCH] moved some phase field parameters to lattice --- code/hydrogenflux_cahnhilliard.f90 | 66 ++++++---------------- code/lattice.f90 | 16 ++++++ code/porosity_phasefield.f90 | 53 +++--------------- code/vacancyflux_cahnhilliard.f90 | 90 ++++++++++-------------------- 4 files changed, 72 insertions(+), 153 deletions(-) diff --git a/code/hydrogenflux_cahnhilliard.f90 b/code/hydrogenflux_cahnhilliard.f90 index b2b4d8734..5f97eaf2b 100644 --- a/code/hydrogenflux_cahnhilliard.f90 +++ b/code/hydrogenflux_cahnhilliard.f90 @@ -24,10 +24,6 @@ module hydrogenflux_cahnhilliard integer(pInt), dimension(:), allocatable, target, public :: & hydrogenflux_cahnhilliard_Noutput !< number of outputs per instance of this damage - real(pReal), dimension(:), allocatable, private :: & - hydrogenflux_cahnhilliard_formationEnergyCoeff, & - hydrogenflux_cahnhilliard_kBCoeff - real(pReal), parameter, private :: & kB = 1.3806488e-23_pReal !< Boltzmann constant in J/Kelvin @@ -71,8 +67,6 @@ subroutine hydrogenflux_cahnhilliard_init(fileUnit) IO_error, & IO_timeStamp, & IO_EOF - use lattice, only: & - lattice_hydrogenVol use material, only: & hydrogenflux_type, & hydrogenflux_typeInstance, & @@ -80,7 +74,6 @@ subroutine hydrogenflux_cahnhilliard_init(fileUnit) HYDROGENFLUX_cahnhilliard_label, & HYDROGENFLUX_cahnhilliard_ID, & material_homog, & - material_Nphase, & mappingHomogenization, & hydrogenfluxState, & hydrogenfluxMapping, & @@ -120,9 +113,6 @@ subroutine hydrogenflux_cahnhilliard_init(fileUnit) allocate(hydrogenflux_cahnhilliard_outputID (maxval(homogenization_Noutput),maxNinstance),source=undefined_ID) allocate(hydrogenflux_cahnhilliard_Noutput (maxNinstance), source=0_pInt) - allocate(hydrogenflux_cahnhilliard_kBCoeff (material_Nphase), source=0.0_pReal) - allocate(hydrogenflux_cahnhilliard_formationEnergyCoeff(material_Nphase), source=0.0_pReal) - rewind(fileUnit) section = 0_pInt do while (trim(line) /= IO_EOF .and. IO_lc(IO_getTag(line,'<','>')) /= material_partHomogenization)! wind forward to @@ -166,30 +156,6 @@ subroutine hydrogenflux_cahnhilliard_init(fileUnit) line = IO_read(fileUnit) enddo - parsingPhase: do while (trim(line) /= IO_EOF) ! read through sections of homog part - line = IO_read(fileUnit) - if (IO_isBlank(line)) cycle ! skip empty lines - if (IO_getTag(line,'<','>') /= '') then ! stop at next part - line = IO_read(fileUnit, .true.) ! reset IO_read - exit - endif - if (IO_getTag(line,'[',']') /= '') then ! next homog section - section = section + 1_pInt ! advance homog section counter - cycle ! skip to next line - endif - - if (section > 0_pInt ) then; if (hydrogenflux_type(section) == HYDROGENFLUX_cahnhilliard_ID) then ! do not short-circuit here (.and. with next if statemen). It's not safe in Fortran - - positions = IO_stringPos(line,MAXNCHUNKS) - tag = IO_lc(IO_stringValue(line,positions,1_pInt)) ! extract key - select case(tag) - case ('hydrogenformationenergy') - hydrogenflux_cahnhilliard_formationEnergyCoeff(section) = IO_floatValue(line,positions,2_pInt) - - end select - endif; endif - enddo parsingPhase - initializeInstances: do section = 1_pInt, size(hydrogenflux_type) if (hydrogenflux_type(section) == HYDROGENFLUX_cahnhilliard_ID) then NofMyHomog=count(material_homog==section) @@ -228,15 +194,6 @@ subroutine hydrogenflux_cahnhilliard_init(fileUnit) enddo initializeInstances - initializeParams: do section = 1_pInt, material_Nphase - hydrogenflux_cahnhilliard_kBCoeff(section) = & - kB/ & - hydrogenflux_cahnhilliard_formationEnergyCoeff(section) - hydrogenflux_cahnhilliard_formationEnergyCoeff(section) = & - hydrogenflux_cahnhilliard_formationEnergyCoeff(section)/ & - lattice_hydrogenVol(section) - enddo initializeParams - end subroutine hydrogenflux_cahnhilliard_init !-------------------------------------------------------------------------------------------------- @@ -313,6 +270,10 @@ end function hydrogenflux_cahnhilliard_getDiffusion33 !> @brief returns homogenized solution energy !-------------------------------------------------------------------------------------------------- function hydrogenflux_cahnhilliard_getFormationEnergy(ip,el) + use lattice, only: & + lattice_hydrogenFormationEnergy, & + lattice_hydrogenVol, & + lattice_hydrogenSurfaceEnergy use material, only: & homogenization_Ngrains, & material_phase @@ -331,7 +292,9 @@ function hydrogenflux_cahnhilliard_getFormationEnergy(ip,el) hydrogenflux_cahnhilliard_getFormationEnergy = 0.0_pReal do grain = 1, homogenization_Ngrains(mesh_element(3,el)) hydrogenflux_cahnhilliard_getFormationEnergy = hydrogenflux_cahnhilliard_getFormationEnergy + & - hydrogenflux_cahnhilliard_formationEnergyCoeff(material_phase(grain,ip,el)) + lattice_hydrogenFormationEnergy(material_phase(grain,ip,el))/ & + lattice_hydrogenVol(material_phase(grain,ip,el))/ & + lattice_hydrogenSurfaceEnergy(material_phase(grain,ip,el)) enddo hydrogenflux_cahnhilliard_getFormationEnergy = & @@ -344,6 +307,9 @@ end function hydrogenflux_cahnhilliard_getFormationEnergy !> @brief returns homogenized hydrogen entropy coefficient !-------------------------------------------------------------------------------------------------- function hydrogenflux_cahnhilliard_getEntropicCoeff(ip,el) + use lattice, only: & + lattice_hydrogenVol, & + lattice_hydrogenSurfaceEnergy use material, only: & homogenization_Ngrains, & material_homog, & @@ -363,7 +329,9 @@ function hydrogenflux_cahnhilliard_getEntropicCoeff(ip,el) hydrogenflux_cahnhilliard_getEntropicCoeff = 0.0_pReal do grain = 1, homogenization_Ngrains(material_homog(ip,el)) hydrogenflux_cahnhilliard_getEntropicCoeff = hydrogenflux_cahnhilliard_getEntropicCoeff + & - hydrogenflux_cahnhilliard_kBCoeff(material_phase(grain,ip,el)) + kB/ & + lattice_hydrogenVol(material_phase(grain,ip,el))/ & + lattice_hydrogenSurfaceEnergy(material_phase(grain,ip,el)) enddo hydrogenflux_cahnhilliard_getEntropicCoeff = & @@ -377,6 +345,8 @@ end function hydrogenflux_cahnhilliard_getEntropicCoeff !> @brief returns homogenized kinematic contribution to chemical potential !-------------------------------------------------------------------------------------------------- subroutine hydrogenflux_cahnhilliard_KinematicChemPotAndItsTangent(KPot, dKPot_dCh, Ch, ip, el) + use lattice, only: & + lattice_hydrogenSurfaceEnergy use material, only: & homogenization_Ngrains, & material_homog, & @@ -421,8 +391,8 @@ subroutine hydrogenflux_cahnhilliard_KinematicChemPotAndItsTangent(KPot, dKPot_d my_dKPot_dCh = 0.0_pReal end select - KPot = KPot + my_KPot/hydrogenflux_cahnhilliard_formationEnergyCoeff(material_phase(grain,ip,el)) - dKPot_dCh = dKPot_dCh + my_dKPot_dCh/hydrogenflux_cahnhilliard_formationEnergyCoeff(material_phase(grain,ip,el)) + KPot = KPot + my_KPot/lattice_hydrogenSurfaceEnergy(material_phase(grain,ip,el)) + dKPot_dCh = dKPot_dCh + my_dKPot_dCh/lattice_hydrogenSurfaceEnergy(material_phase(grain,ip,el)) enddo enddo @@ -453,7 +423,7 @@ subroutine hydrogenflux_cahnhilliard_getChemPotAndItsTangent(ChemPot,dChemPot_dC integer(pInt) :: & o - ChemPot = 1.0_pReal + ChemPot = hydrogenflux_cahnhilliard_getFormationEnergy(ip,el) dChemPot_dCh = 0.0_pReal kBT = hydrogenflux_cahnhilliard_getEntropicCoeff(ip,el) do o = 1_pInt, hydrogenPolyOrder diff --git a/code/lattice.f90 b/code/lattice.f90 index 579d348dd..22ddd8c2a 100644 --- a/code/lattice.f90 +++ b/code/lattice.f90 @@ -840,7 +840,11 @@ module lattice lattice_porosityMobility, & lattice_massDensity, & lattice_specificHeat, & + lattice_vacancyFormationEnergy, & + lattice_vacancySurfaceEnergy, & lattice_vacancyVol, & + lattice_hydrogenFormationEnergy, & + lattice_hydrogenSurfaceEnergy, & lattice_hydrogenVol, & lattice_referenceTemperature, & lattice_equilibriumVacancyConcentration @@ -1116,7 +1120,11 @@ subroutine lattice_init allocate(lattice_PorosityMobility ( Nphases), source=0.0_pReal) allocate(lattice_massDensity ( Nphases), source=0.0_pReal) allocate(lattice_specificHeat ( Nphases), source=0.0_pReal) + allocate(lattice_vacancyFormationEnergy ( Nphases), source=0.0_pReal) + allocate(lattice_vacancySurfaceEnergy ( Nphases), source=0.0_pReal) allocate(lattice_vacancyVol ( Nphases), source=0.0_pReal) + allocate(lattice_hydrogenFormationEnergy( Nphases), source=0.0_pReal) + allocate(lattice_hydrogenSurfaceEnergy ( Nphases), source=0.0_pReal) allocate(lattice_hydrogenVol ( Nphases), source=0.0_pReal) allocate(lattice_referenceTemperature ( Nphases), source=0.0_pReal) allocate(lattice_equilibriumVacancyConcentration(Nphases), source=0.0_pReal) @@ -1244,8 +1252,16 @@ subroutine lattice_init lattice_thermalExpansion33(3,3,section) = IO_floatValue(line,positions,2_pInt) case ('specific_heat') lattice_specificHeat(section) = IO_floatValue(line,positions,2_pInt) + case ('vacancyformationenergy') + lattice_vacancyFormationEnergy(section) = IO_floatValue(line,positions,2_pInt) + case ('vacancysurfaceenergy') + lattice_vacancySurfaceEnergy(section) = IO_floatValue(line,positions,2_pInt) case ('vacancyvolume') lattice_vacancyVol(section) = IO_floatValue(line,positions,2_pInt) + case ('hydrogenformationenergy') + lattice_hydrogenFormationEnergy(section) = IO_floatValue(line,positions,2_pInt) + case ('hydrogensurfaceenergy') + lattice_hydrogenSurfaceEnergy(section) = IO_floatValue(line,positions,2_pInt) case ('hydrogenvolume') lattice_hydrogenVol(section) = IO_floatValue(line,positions,2_pInt) case ('mass_density') diff --git a/code/porosity_phasefield.f90 b/code/porosity_phasefield.f90 index 3cf832319..01c868355 100644 --- a/code/porosity_phasefield.f90 +++ b/code/porosity_phasefield.f90 @@ -24,10 +24,6 @@ module porosity_phasefield integer(pInt), dimension(:), allocatable, target, public :: & porosity_phasefield_Noutput !< number of outputs per instance of this porosity - real(pReal), dimension(:), allocatable, private :: & - porosity_phasefield_specificFormationEnergy, & - porosity_phasefield_surfaceEnergy - enum, bind(c) enumerator :: undefined_ID, & porosity_ID @@ -68,8 +64,6 @@ subroutine porosity_phasefield_init(fileUnit) IO_error, & IO_timeStamp, & IO_EOF - use lattice, only: & - lattice_vacancyVol use material, only: & porosity_type, & porosity_typeInstance, & @@ -77,7 +71,6 @@ subroutine porosity_phasefield_init(fileUnit) POROSITY_phasefield_label, & POROSITY_phasefield_ID, & material_homog, & - material_Nphase, & mappingHomogenization, & porosityState, & porosityMapping, & @@ -115,8 +108,6 @@ subroutine porosity_phasefield_init(fileUnit) porosity_phasefield_output = '' allocate(porosity_phasefield_outputID (maxval(homogenization_Noutput),maxNinstance),source=undefined_ID) allocate(porosity_phasefield_Noutput (maxNinstance), source=0_pInt) - allocate(porosity_phasefield_specificFormationEnergy(material_Nphase), source=0.0_pReal) - allocate(porosity_phasefield_surfaceEnergy (material_Nphase), source=0.0_pReal) rewind(fileUnit) section = 0_pInt @@ -155,40 +146,6 @@ subroutine porosity_phasefield_init(fileUnit) endif; endif enddo parsingHomog - rewind(fileUnit) - section = 0_pInt - do while (trim(line) /= IO_EOF .and. IO_lc(IO_getTag(line,'<','>')) /= material_partPhase) ! wind forward to - line = IO_read(fileUnit) - enddo - - parsingPhase: do while (trim(line) /= IO_EOF) ! read through sections of homog part - line = IO_read(fileUnit) - if (IO_isBlank(line)) cycle ! skip empty lines - if (IO_getTag(line,'<','>') /= '') then ! stop at next part - line = IO_read(fileUnit, .true.) ! reset IO_read - exit - endif - if (IO_getTag(line,'[',']') /= '') then ! next homog section - section = section + 1_pInt ! advance homog section counter - cycle ! skip to next line - endif - - if (section > 0_pInt ) then; if (porosity_type(section) == POROSITY_phasefield_ID) then ! do not short-circuit here (.and. with next if statemen). It's not safe in Fortran - - positions = IO_stringPos(line,MAXNCHUNKS) - tag = IO_lc(IO_stringValue(line,positions,1_pInt)) ! extract key - select case(tag) - case ('vacancyformationenergy') - porosity_phasefield_specificFormationEnergy(section) = IO_floatValue(line,positions,2_pInt)/& - lattice_vacancyVol(section) - - case ('voidsurfaceenergy') - porosity_phasefield_surfaceEnergy(section) = IO_floatValue(line,positions,2_pInt) - - end select - endif; endif - enddo parsingPhase - initializeInstances: do section = 1_pInt, size(porosity_type) if (porosity_type(section) == POROSITY_phasefield_ID) then NofMyHomog=count(material_homog==section) @@ -230,6 +187,9 @@ end subroutine porosity_phasefield_init !> @brief returns homogenized vacancy formation energy !-------------------------------------------------------------------------------------------------- function porosity_phasefield_getFormationEnergy(ip,el) + use lattice, only: & + lattice_vacancyFormationEnergy, & + lattice_vacancyVol use material, only: & homogenization_Ngrains, & material_phase @@ -248,7 +208,8 @@ function porosity_phasefield_getFormationEnergy(ip,el) porosity_phasefield_getFormationEnergy = 0.0_pReal do grain = 1, homogenization_Ngrains(mesh_element(3,el)) porosity_phasefield_getFormationEnergy = porosity_phasefield_getFormationEnergy + & - porosity_phasefield_specificFormationEnergy(material_phase(grain,ip,el)) + lattice_vacancyFormationEnergy(material_phase(grain,ip,el))/ & + lattice_vacancyVol(material_phase(grain,ip,el)) enddo porosity_phasefield_getFormationEnergy = & @@ -261,6 +222,8 @@ end function porosity_phasefield_getFormationEnergy !> @brief returns homogenized pore surface energy (normalized by characteristic length) !-------------------------------------------------------------------------------------------------- function porosity_phasefield_getSurfaceEnergy(ip,el) + use lattice, only: & + lattice_vacancySurfaceEnergy use material, only: & homogenization_Ngrains, & material_phase @@ -279,7 +242,7 @@ function porosity_phasefield_getSurfaceEnergy(ip,el) porosity_phasefield_getSurfaceEnergy = 0.0_pReal do grain = 1, homogenization_Ngrains(mesh_element(3,el)) porosity_phasefield_getSurfaceEnergy = porosity_phasefield_getSurfaceEnergy + & - porosity_phasefield_surfaceEnergy(material_phase(grain,ip,el)) + lattice_vacancySurfaceEnergy(material_phase(grain,ip,el)) enddo porosity_phasefield_getSurfaceEnergy = & diff --git a/code/vacancyflux_cahnhilliard.f90 b/code/vacancyflux_cahnhilliard.f90 index c20a4ad97..dacc255d3 100644 --- a/code/vacancyflux_cahnhilliard.f90 +++ b/code/vacancyflux_cahnhilliard.f90 @@ -26,9 +26,7 @@ module vacancyflux_cahnhilliard vacancyflux_cahnhilliard_Noutput !< number of outputs per instance of this damage real(pReal), dimension(:), allocatable, private :: & - vacancyflux_cahnhilliard_formationEnergyCoeff, & - vacancyflux_cahnhilliard_surfaceEnergy, & - vacancyflux_cahnhilliard_kBCoeff + vacancyflux_cahnhilliard_flucAmplitude type(p_vec), dimension(:), allocatable, private :: & vacancyflux_cahnhilliard_thermalFluc @@ -79,8 +77,6 @@ subroutine vacancyflux_cahnhilliard_init(fileUnit) IO_error, & IO_timeStamp, & IO_EOF - use lattice, only: & - lattice_vacancyVol use material, only: & vacancyflux_type, & vacancyflux_typeInstance, & @@ -88,7 +84,6 @@ subroutine vacancyflux_cahnhilliard_init(fileUnit) VACANCYFLUX_cahnhilliard_label, & VACANCYFLUX_cahnhilliard_ID, & material_homog, & - material_Nphase, & mappingHomogenization, & vacancyfluxState, & vacancyfluxMapping, & @@ -128,11 +123,8 @@ subroutine vacancyflux_cahnhilliard_init(fileUnit) allocate(vacancyflux_cahnhilliard_outputID (maxval(homogenization_Noutput),maxNinstance),source=undefined_ID) allocate(vacancyflux_cahnhilliard_Noutput (maxNinstance), source=0_pInt) - allocate(vacancyflux_cahnhilliard_formationEnergyCoeff(material_Nphase), source=0.0_pReal) - allocate(vacancyflux_cahnhilliard_kBCoeff (material_Nphase), source=0.0_pReal) - allocate(vacancyflux_cahnhilliard_surfaceEnergy (material_Nphase), source=0.0_pReal) - - allocate(vacancyflux_cahnhilliard_thermalFluc(maxNinstance)) + allocate(vacancyflux_cahnhilliard_flucAmplitude (maxNinstance)) + allocate(vacancyflux_cahnhilliard_thermalFluc (maxNinstance)) rewind(fileUnit) section = 0_pInt @@ -167,43 +159,13 @@ subroutine vacancyflux_cahnhilliard_init(fileUnit) IO_lc(IO_stringValue(line,positions,2_pInt)) end select + case ('vacancyflux_flucamplitude') + vacancyflux_cahnhilliard_flucAmplitude(instance) = IO_floatValue(line,positions,2_pInt) + end select endif; endif enddo parsingHomog - rewind(fileUnit) - section = 0_pInt - do while (trim(line) /= IO_EOF .and. IO_lc(IO_getTag(line,'<','>')) /= material_partPhase) ! wind forward to - line = IO_read(fileUnit) - enddo - - parsingPhase: do while (trim(line) /= IO_EOF) ! read through sections of homog part - line = IO_read(fileUnit) - if (IO_isBlank(line)) cycle ! skip empty lines - if (IO_getTag(line,'<','>') /= '') then ! stop at next part - line = IO_read(fileUnit, .true.) ! reset IO_read - exit - endif - if (IO_getTag(line,'[',']') /= '') then ! next homog section - section = section + 1_pInt ! advance homog section counter - cycle ! skip to next line - endif - - if (section > 0_pInt ) then; if (vacancyflux_type(section) == VACANCYFLUX_cahnhilliard_ID) then ! do not short-circuit here (.and. with next if statemen). It's not safe in Fortran - - positions = IO_stringPos(line,MAXNCHUNKS) - tag = IO_lc(IO_stringValue(line,positions,1_pInt)) ! extract key - select case(tag) - case ('vacancyformationenergy') - vacancyflux_cahnhilliard_formationEnergyCoeff(section) = IO_floatValue(line,positions,2_pInt) - - case ('voidsurfaceenergy') - vacancyflux_cahnhilliard_surfaceEnergy(section) = IO_floatValue(line,positions,2_pInt) - - end select - endif; endif - enddo parsingPhase - initializeInstances: do section = 1_pInt, size(vacancyflux_type) if (vacancyflux_type(section) == VACANCYFLUX_cahnhilliard_ID) then NofMyHomog=count(material_homog==section) @@ -234,6 +196,10 @@ subroutine vacancyflux_cahnhilliard_init(fileUnit) allocate(vacancyflux_cahnhilliard_thermalFluc(instance)%p(NofMyHomog)) do offset = 1_pInt, NofMyHomog call random_number(vacancyflux_cahnhilliard_thermalFluc(instance)%p(offset)) + vacancyflux_cahnhilliard_thermalFluc(instance)%p(offset) = & + 1.0_pReal - & + vacancyflux_cahnhilliard_flucAmplitude(instance)* & + (vacancyflux_cahnhilliard_thermalFluc(instance)%p(offset) - 0.5_pReal) enddo nullify(vacancyfluxMapping(section)%p) @@ -247,17 +213,6 @@ subroutine vacancyflux_cahnhilliard_init(fileUnit) enddo initializeInstances - initializeParams: do section = 1_pInt, material_Nphase - vacancyflux_cahnhilliard_formationEnergyCoeff(section) = & - vacancyflux_cahnhilliard_formationEnergyCoeff(section)/ & - lattice_vacancyVol(section)/ & - vacancyflux_cahnhilliard_surfaceEnergy(section) - vacancyflux_cahnhilliard_kBCoeff(section) = & - kB/ & - lattice_vacancyVol(section)/ & - vacancyflux_cahnhilliard_surfaceEnergy(section) - enddo initializeParams - end subroutine vacancyflux_cahnhilliard_init !-------------------------------------------------------------------------------------------------- @@ -393,6 +348,10 @@ end function vacancyflux_cahnhilliard_getDiffusion33 !> @brief returns homogenized vacancy formation energy !-------------------------------------------------------------------------------------------------- function vacancyflux_cahnhilliard_getFormationEnergy(ip,el) + use lattice, only: & + lattice_vacancyFormationEnergy, & + lattice_vacancyVol, & + lattice_vacancySurfaceEnergy use material, only: & homogenization_Ngrains, & material_phase @@ -411,7 +370,9 @@ function vacancyflux_cahnhilliard_getFormationEnergy(ip,el) vacancyflux_cahnhilliard_getFormationEnergy = 0.0_pReal do grain = 1, homogenization_Ngrains(mesh_element(3,el)) vacancyflux_cahnhilliard_getFormationEnergy = vacancyflux_cahnhilliard_getFormationEnergy + & - vacancyflux_cahnhilliard_formationEnergyCoeff(material_phase(grain,ip,el)) + lattice_vacancyFormationEnergy(material_phase(grain,ip,el))/ & + lattice_vacancyVol(material_phase(grain,ip,el))/ & + lattice_vacancySurfaceEnergy(material_phase(grain,ip,el)) enddo vacancyflux_cahnhilliard_getFormationEnergy = & @@ -424,6 +385,9 @@ end function vacancyflux_cahnhilliard_getFormationEnergy !> @brief returns homogenized vacancy entropy coefficient !-------------------------------------------------------------------------------------------------- function vacancyflux_cahnhilliard_getEntropicCoeff(ip,el) + use lattice, only: & + lattice_vacancyVol, & + lattice_vacancySurfaceEnergy use material, only: & homogenization_Ngrains, & material_homog, & @@ -443,7 +407,9 @@ function vacancyflux_cahnhilliard_getEntropicCoeff(ip,el) vacancyflux_cahnhilliard_getEntropicCoeff = 0.0_pReal do grain = 1, homogenization_Ngrains(material_homog(ip,el)) vacancyflux_cahnhilliard_getEntropicCoeff = vacancyflux_cahnhilliard_getEntropicCoeff + & - vacancyflux_cahnhilliard_kBCoeff(material_phase(grain,ip,el)) + kB/ & + lattice_vacancyVol(material_phase(grain,ip,el))/ & + lattice_vacancySurfaceEnergy(material_phase(grain,ip,el)) enddo vacancyflux_cahnhilliard_getEntropicCoeff = & @@ -457,6 +423,8 @@ end function vacancyflux_cahnhilliard_getEntropicCoeff !> @brief returns homogenized kinematic contribution to chemical potential !-------------------------------------------------------------------------------------------------- subroutine vacancyflux_cahnhilliard_KinematicChemPotAndItsTangent(KPot, dKPot_dCv, Cv, ip, el) + use lattice, only: & + lattice_vacancySurfaceEnergy use material, only: & homogenization_Ngrains, & material_homog, & @@ -501,8 +469,8 @@ subroutine vacancyflux_cahnhilliard_KinematicChemPotAndItsTangent(KPot, dKPot_dC my_dKPot_dCv = 0.0_pReal end select - KPot = KPot + my_KPot/vacancyflux_cahnhilliard_surfaceEnergy(material_phase(grain,ip,el)) - dKPot_dCv = dKPot_dCv + my_dKPot_dCv/vacancyflux_cahnhilliard_surfaceEnergy(material_phase(grain,ip,el)) + KPot = KPot + my_KPot/lattice_vacancySurfaceEnergy(material_phase(grain,ip,el)) + dKPot_dCv = dKPot_dCv + my_dKPot_dCv/lattice_vacancySurfaceEnergy(material_phase(grain,ip,el)) enddo enddo @@ -520,6 +488,7 @@ subroutine vacancyflux_cahnhilliard_getChemPotAndItsTangent(ChemPot,dChemPot_dCv vacancyPolyOrder use material, only: & mappingHomogenization, & + vacancyflux_typeInstance, & porosity, & porosityMapping @@ -541,7 +510,8 @@ subroutine vacancyflux_cahnhilliard_getChemPotAndItsTangent(ChemPot,dChemPot_dCv VoidPhaseFrac = porosity(homog)%p(porosityMapping(homog)%p(ip,el)) kBT = vacancyflux_cahnhilliard_getEntropicCoeff(ip,el) - ChemPot = vacancyflux_cahnhilliard_getFormationEnergy(ip,el) + ChemPot = vacancyflux_cahnhilliard_getFormationEnergy(ip,el)* & + vacancyflux_cahnhilliard_thermalFluc(vacancyflux_typeInstance(homog))%p(mappingHomogenization(1,ip,el)) dChemPot_dCv = 0.0_pReal do o = 1_pInt, vacancyPolyOrder ChemPot = ChemPot + kBT*((2.0_pReal*Cv - 1.0_pReal)**real(2_pInt*o-1_pInt,pReal))/ &