From 7554647c8ea540df390f2b5c88a4a8528633ce61 Mon Sep 17 00:00:00 2001 From: Pratheek Shanthraj Date: Fri, 24 Jul 2015 14:53:50 +0000 Subject: [PATCH] more control over initialisation of field values. specify initial field value in the homogenisation part of the material config file using the appropriate tags --- code/damage_local.f90 | 7 ++-- code/damage_none.f90 | 8 ++--- code/damage_nonlocal.f90 | 3 +- code/homogenization.f90 | 6 ++-- code/hydrogenflux_cahnhilliard.f90 | 3 +- code/hydrogenflux_isoconc.f90 | 2 +- code/material.f90 | 51 ++++++++++++++++++++++++------ code/porosity_none.f90 | 2 +- code/porosity_phasefield.f90 | 3 +- code/thermal_adiabatic.f90 | 10 +++--- code/thermal_conduction.f90 | 6 ++-- code/thermal_isothermal.f90 | 5 ++- code/vacancyflux_cahnhilliard.f90 | 13 +++++--- code/vacancyflux_isochempot.f90 | 7 ++-- code/vacancyflux_isoconc.f90 | 8 ++--- 15 files changed, 87 insertions(+), 47 deletions(-) diff --git a/code/damage_local.f90 b/code/damage_local.f90 index 7875bdfe7..0126c33b3 100644 --- a/code/damage_local.f90 +++ b/code/damage_local.f90 @@ -68,6 +68,7 @@ subroutine damage_local_init(fileUnit) damageState, & damageMapping, & damage, & + damage_initialPhi, & material_partHomogenization use numerics,only: & worldrank @@ -162,9 +163,9 @@ subroutine damage_local_init(fileUnit) sizeState = 1_pInt damageState(homog)%sizeState = sizeState damageState(homog)%sizePostResults = damage_local_sizePostResults(instance) - allocate(damageState(homog)%state0 (sizeState,NofMyHomog)) - allocate(damageState(homog)%subState0(sizeState,NofMyHomog)) - allocate(damageState(homog)%state (sizeState,NofMyHomog)) + allocate(damageState(homog)%state0 (sizeState,NofMyHomog), source=damage_initialPhi(homog)) + allocate(damageState(homog)%subState0(sizeState,NofMyHomog), source=damage_initialPhi(homog)) + allocate(damageState(homog)%state (sizeState,NofMyHomog), source=damage_initialPhi(homog)) nullify(damageMapping(homog)%p) damageMapping(homog)%p => mappingHomogenization(1,:,:) diff --git a/code/damage_none.f90 b/code/damage_none.f90 index 9bf0f95af..97a0e1600 100644 --- a/code/damage_none.f90 +++ b/code/damage_none.f90 @@ -46,12 +46,12 @@ subroutine damage_none_init() NofMyHomog = count(material_homog == homog) damageState(homog)%sizeState = 0_pInt damageState(homog)%sizePostResults = 0_pInt - allocate(damageState(homog)%state0 (0_pInt,NofMyHomog), source=0.0_pReal) - allocate(damageState(homog)%subState0(0_pInt,NofMyHomog), source=0.0_pReal) - allocate(damageState(homog)%state (0_pInt,NofMyHomog), source=0.0_pReal) + allocate(damageState(homog)%state0 (0_pInt,NofMyHomog)) + allocate(damageState(homog)%subState0(0_pInt,NofMyHomog)) + allocate(damageState(homog)%state (0_pInt,NofMyHomog)) deallocate(damage(homog)%p) - allocate (damage(homog)%p(1), source=1.0_pReal) + allocate (damage(homog)%p(1), source=damage_initialPhi(homog)) endif myhomog enddo initializeInstances diff --git a/code/damage_nonlocal.f90 b/code/damage_nonlocal.f90 index 23828f654..9e3032f52 100644 --- a/code/damage_nonlocal.f90 +++ b/code/damage_nonlocal.f90 @@ -73,6 +73,7 @@ subroutine damage_nonlocal_init(fileUnit) damageState, & damageMapping, & damage, & + damage_initialPhi, & material_partHomogenization use numerics,only: & worldrank @@ -173,7 +174,7 @@ subroutine damage_nonlocal_init(fileUnit) nullify(damageMapping(section)%p) damageMapping(section)%p => mappingHomogenization(1,:,:) deallocate(damage(section)%p) - allocate(damage(section)%p(NofMyHomog), source=1.0_pReal) + allocate(damage(section)%p(NofMyHomog), source=damage_initialPhi(section)) endif diff --git a/code/homogenization.f90 b/code/homogenization.f90 index 29c5745c3..10bdd85fb 100644 --- a/code/homogenization.f90 +++ b/code/homogenization.f90 @@ -158,11 +158,11 @@ subroutine homogenization_init(temperature_init) if (.not. IO_open_jobFile_stat(FILEUNIT,material_localFileExt)) & ! no local material configuration present... call IO_open_file(FILEUNIT,material_configFile) ! ... open material.config file if (any(thermal_type == THERMAL_isothermal_ID)) & - call thermal_isothermal_init(temperature_init) + call thermal_isothermal_init() if (any(thermal_type == THERMAL_adiabatic_ID)) & - call thermal_adiabatic_init(FILEUNIT,temperature_init) + call thermal_adiabatic_init(FILEUNIT) if (any(thermal_type == THERMAL_conduction_ID)) & - call thermal_conduction_init(FILEUNIT,temperature_init) + call thermal_conduction_init(FILEUNIT) close(FILEUNIT) !-------------------------------------------------------------------------------------------------- diff --git a/code/hydrogenflux_cahnhilliard.f90 b/code/hydrogenflux_cahnhilliard.f90 index 5f97eaf2b..757bac45d 100644 --- a/code/hydrogenflux_cahnhilliard.f90 +++ b/code/hydrogenflux_cahnhilliard.f90 @@ -79,6 +79,7 @@ subroutine hydrogenflux_cahnhilliard_init(fileUnit) hydrogenfluxMapping, & hydrogenConc, & hydrogenConcRate, & + hydrogenflux_initialCh, & material_partHomogenization, & material_partPhase use numerics,only: & @@ -187,7 +188,7 @@ subroutine hydrogenflux_cahnhilliard_init(fileUnit) hydrogenfluxMapping(section)%p => mappingHomogenization(1,:,:) deallocate(hydrogenConc (section)%p) deallocate(hydrogenConcRate(section)%p) - allocate (hydrogenConc (section)%p(NofMyHomog), source=0.0_pReal) + allocate (hydrogenConc (section)%p(NofMyHomog), source=hydrogenflux_initialCh(section)) allocate (hydrogenConcRate(section)%p(NofMyHomog), source=0.0_pReal) endif diff --git a/code/hydrogenflux_isoconc.f90 b/code/hydrogenflux_isoconc.f90 index e5defd029..3e0ae50ed 100644 --- a/code/hydrogenflux_isoconc.f90 +++ b/code/hydrogenflux_isoconc.f90 @@ -52,7 +52,7 @@ subroutine hydrogenflux_isoconc_init() deallocate(hydrogenConc (homog)%p) deallocate(hydrogenConcRate(homog)%p) - allocate (hydrogenConc (homog)%p(1), source=0.0_pReal) + allocate (hydrogenConc (homog)%p(1), source=hydrogenflux_initialCh(homog)) allocate (hydrogenConcRate(homog)%p(1), source=0.0_pReal) endif myhomog diff --git a/code/material.f90 b/code/material.f90 index c1e38872a..8a117ed65 100644 --- a/code/material.f90 +++ b/code/material.f90 @@ -190,15 +190,17 @@ module material integer(pInt), dimension(:), allocatable, public, protected :: & phase_Nsources, & !< number of source mechanisms active in each phase phase_Nkinematics, & !< number of kinematic mechanisms active in each phase - phase_NstiffnessDegradations !< number of stiffness degradation mechanisms active in each phase + phase_NstiffnessDegradations, & !< number of stiffness degradation mechanisms active in each phase + phase_Noutput, & !< number of '(output)' items per phase + phase_elasticityInstance, & !< instance of particular elasticity of each phase + phase_plasticityInstance !< instance of particular plasticity of each phase + + integer(pInt), dimension(:), allocatable, public, protected :: & + crystallite_Noutput !< number of '(output)' items per crystallite setting integer(pInt), dimension(:), allocatable, public, protected :: & homogenization_Ngrains, & !< number of grains in each homogenization homogenization_Noutput, & !< number of '(output)' items per homogenization - phase_Noutput, & !< number of '(output)' items per phase - phase_elasticityInstance, & !< instance of particular elasticity of each phase - phase_plasticityInstance, & !< instance of particular plasticity of each phase - crystallite_Noutput, & !< number of '(output)' items per crystallite setting homogenization_typeInstance, & !< instance of particular type of each homogenization thermal_typeInstance, & !< instance of particular type of each thermal transport damage_typeInstance, & !< instance of particular type of each nonlocal damage @@ -207,6 +209,13 @@ module material hydrogenflux_typeInstance, & !< instance of particular type of each hydrogen flux microstructure_crystallite !< crystallite setting ID of each microstructure + real(pReal), dimension(:), allocatable, public, protected :: & + thermal_initialT, & !< initial temperature per each homogenization + damage_initialPhi, & !< initial damage per each homogenization + vacancyflux_initialCv, & !< initial vacancy concentration per each homogenization + porosity_initialPhi, & !< initial posority per each homogenization + hydrogenflux_initialCh !< initial hydrogen concentration per each homogenization + integer(pInt), dimension(:,:,:), allocatable, public :: & material_phase !< phase (index) of each grain,IP,element integer(pInt), dimension(:,:), allocatable, public :: & @@ -511,11 +520,11 @@ subroutine material_init() vacancyfluxMapping (myHomog)%p => mappingHomogenizationConst porosityMapping (myHomog)%p => mappingHomogenizationConst hydrogenfluxMapping(myHomog)%p => mappingHomogenizationConst - allocate(temperature (myHomog)%p(1), source=300.0_pReal) - allocate(damage (myHomog)%p(1), source=1.0_pReal) - allocate(vacancyConc (myHomog)%p(1), source=0.0_pReal) - allocate(porosity (myHomog)%p(1), source=1.0_pReal) - allocate(hydrogenConc (myHomog)%p(1), source=0.0_pReal) + allocate(temperature (myHomog)%p(1), source=thermal_initialT(myHomog)) + allocate(damage (myHomog)%p(1), source=damage_initialPhi(myHomog)) + allocate(vacancyConc (myHomog)%p(1), source=vacancyflux_initialCv(myHomog)) + allocate(porosity (myHomog)%p(1), source=porosity_initialPhi(myHomog)) + allocate(hydrogenConc (myHomog)%p(1), source=hydrogenflux_initialCh(myHomog)) allocate(temperatureRate (myHomog)%p(1), source=0.0_pReal) allocate(vacancyConcRate (myHomog)%p(1), source=0.0_pReal) allocate(hydrogenConcRate(myHomog)%p(1), source=0.0_pReal) @@ -539,6 +548,7 @@ subroutine material_parseHomogenization(fileUnit,myPart) IO_isBlank, & IO_stringValue, & IO_intValue, & + IO_floatValue, & IO_stringPos, & IO_EOF use mesh, only: & @@ -577,6 +587,11 @@ subroutine material_parseHomogenization(fileUnit,myPart) allocate(homogenization_Ngrains(Nsections), source=0_pInt) allocate(homogenization_Noutput(Nsections), source=0_pInt) allocate(homogenization_active(Nsections), source=.false.) !!!!!!!!!!!!!!! + allocate(thermal_initialT(Nsections), source=300.0_pReal) + allocate(damage_initialPhi(Nsections), source=1.0_pReal) + allocate(vacancyflux_initialCv(Nsections), source=0.0_pReal) + allocate(porosity_initialPhi(Nsections), source=1.0_pReal) + allocate(hydrogenflux_initialCh(Nsections), source=0.0_pReal) forall (s = 1_pInt:Nsections) homogenization_active(s) = any(mesh_element(3,:) == s) ! current homogenization used in model? Homogenization view, maximum operations depend on maximum number of homog schemes homogenization_Noutput = IO_countTagInPart(fileUnit,myPart,'(output)',Nsections) @@ -677,6 +692,22 @@ subroutine material_parseHomogenization(fileUnit,myPart) case ('nconstituents','ngrains') homogenization_Ngrains(section) = IO_intValue(line,positions,2_pInt) + + case ('initialtemperature','initialt') + thermal_initialT(section) = IO_floatValue(line,positions,2_pInt) + + case ('initialdamage') + damage_initialPhi(section) = IO_floatValue(line,positions,2_pInt) + + case ('initialvacancyconc','initialcv') + vacancyflux_initialCv(section) = IO_floatValue(line,positions,2_pInt) + + case ('initialporosity') + porosity_initialPhi(section) = IO_floatValue(line,positions,2_pInt) + + case ('initialhydrogenconc','initialch') + hydrogenflux_initialCh(section) = IO_floatValue(line,positions,2_pInt) + end select endif enddo diff --git a/code/porosity_none.f90 b/code/porosity_none.f90 index 738104545..1c7474fdf 100644 --- a/code/porosity_none.f90 +++ b/code/porosity_none.f90 @@ -51,7 +51,7 @@ subroutine porosity_none_init() allocate(porosityState(homog)%state (0_pInt,NofMyHomog), source=0.0_pReal) deallocate(porosity(homog)%p) - allocate (porosity(homog)%p(1), source=1.0_pReal) + allocate (porosity(homog)%p(1), source=porosity_initialPhi(homog)) endif myhomog enddo initializeInstances diff --git a/code/porosity_phasefield.f90 b/code/porosity_phasefield.f90 index 01c868355..c9ae02ef7 100644 --- a/code/porosity_phasefield.f90 +++ b/code/porosity_phasefield.f90 @@ -75,6 +75,7 @@ subroutine porosity_phasefield_init(fileUnit) porosityState, & porosityMapping, & porosity, & + porosity_initialPhi, & material_partHomogenization, & material_partPhase use numerics,only: & @@ -176,7 +177,7 @@ subroutine porosity_phasefield_init(fileUnit) nullify(porosityMapping(section)%p) porosityMapping(section)%p => mappingHomogenization(1,:,:) deallocate(porosity(section)%p) - allocate(porosity(section)%p(NofMyHomog), source=1.0_pReal) + allocate(porosity(section)%p(NofMyHomog), source=porosity_initialPhi(section)) endif diff --git a/code/thermal_adiabatic.f90 b/code/thermal_adiabatic.f90 index 3c7888331..62e0d58af 100644 --- a/code/thermal_adiabatic.f90 +++ b/code/thermal_adiabatic.f90 @@ -47,7 +47,7 @@ contains !> @brief module initialization !> @details reads in material parameters, allocates arrays, and does sanity checks !-------------------------------------------------------------------------------------------------- -subroutine thermal_adiabatic_init(fileUnit,temperature_init) +subroutine thermal_adiabatic_init(fileUnit) use, intrinsic :: iso_fortran_env ! to get compiler_version and compiler_options (at least for gfortran 4.6 at the moment) use IO, only: & IO_read, & @@ -72,6 +72,7 @@ subroutine thermal_adiabatic_init(fileUnit,temperature_init) mappingHomogenization, & thermalState, & thermalMapping, & + thermal_initialT, & temperature, & temperatureRate, & material_partHomogenization @@ -79,7 +80,6 @@ subroutine thermal_adiabatic_init(fileUnit,temperature_init) worldrank implicit none - real(pReal), intent(in) :: temperature_init !< initial temperature integer(pInt), intent(in) :: fileUnit integer(pInt), parameter :: MAXNCHUNKS = 7_pInt @@ -168,9 +168,9 @@ subroutine thermal_adiabatic_init(fileUnit,temperature_init) sizeState = 1_pInt thermalState(section)%sizeState = sizeState thermalState(section)%sizePostResults = thermal_adiabatic_sizePostResults(instance) - allocate(thermalState(section)%state0 (sizeState,NofMyHomog), source=temperature_init) - allocate(thermalState(section)%subState0(sizeState,NofMyHomog), source=temperature_init) - allocate(thermalState(section)%state (sizeState,NofMyHomog), source=temperature_init) + allocate(thermalState(section)%state0 (sizeState,NofMyHomog), source=thermal_initialT(section)) + allocate(thermalState(section)%subState0(sizeState,NofMyHomog), source=thermal_initialT(section)) + allocate(thermalState(section)%state (sizeState,NofMyHomog), source=thermal_initialT(section)) nullify(thermalMapping(section)%p) thermalMapping(section)%p => mappingHomogenization(1,:,:) diff --git a/code/thermal_conduction.f90 b/code/thermal_conduction.f90 index 570abe8ae..2bbfb7b35 100644 --- a/code/thermal_conduction.f90 +++ b/code/thermal_conduction.f90 @@ -48,7 +48,7 @@ contains !> @brief module initialization !> @details reads in material parameters, allocates arrays, and does sanity checks !-------------------------------------------------------------------------------------------------- -subroutine thermal_conduction_init(fileUnit,temperature_init) +subroutine thermal_conduction_init(fileUnit) use, intrinsic :: iso_fortran_env ! to get compiler_version and compiler_options (at least for gfortran 4.6 at the moment) use IO, only: & IO_read, & @@ -73,6 +73,7 @@ subroutine thermal_conduction_init(fileUnit,temperature_init) mappingHomogenization, & thermalState, & thermalMapping, & + thermal_initialT, & temperature, & temperatureRate, & material_partHomogenization @@ -80,7 +81,6 @@ subroutine thermal_conduction_init(fileUnit,temperature_init) worldrank implicit none - real(pReal), intent(in) :: temperature_init !< initial temperature integer(pInt), intent(in) :: fileUnit integer(pInt), parameter :: MAXNCHUNKS = 7_pInt @@ -176,7 +176,7 @@ subroutine thermal_conduction_init(fileUnit,temperature_init) nullify(thermalMapping(section)%p) thermalMapping(section)%p => mappingHomogenization(1,:,:) deallocate(temperature (section)%p) - allocate (temperature (section)%p(NofMyHomog), source=temperature_init) + allocate (temperature (section)%p(NofMyHomog), source=thermal_initialT(section)) deallocate(temperatureRate(section)%p) allocate (temperatureRate(section)%p(NofMyHomog), source=0.0_pReal) diff --git a/code/thermal_isothermal.f90 b/code/thermal_isothermal.f90 index d3d033c17..5c8600d25 100644 --- a/code/thermal_isothermal.f90 +++ b/code/thermal_isothermal.f90 @@ -17,7 +17,7 @@ contains !-------------------------------------------------------------------------------------------------- !> @brief allocates all neccessary fields, reads information from material configuration file !-------------------------------------------------------------------------------------------------- -subroutine thermal_isothermal_init(temperature_init) +subroutine thermal_isothermal_init() use, intrinsic :: iso_fortran_env ! to get compiler_version and compiler_options (at least for gfortran 4.6 at the moment) use prec, only: & pReal, & @@ -29,7 +29,6 @@ subroutine thermal_isothermal_init(temperature_init) worldrank implicit none - real(pReal), intent(in) :: temperature_init !< initial temperature integer(pInt) :: & homog, & NofMyHomog, & @@ -54,7 +53,7 @@ subroutine thermal_isothermal_init(temperature_init) allocate(thermalState(homog)%state (sizeState,NofMyHomog), source=0.0_pReal) deallocate(temperature (homog)%p) - allocate (temperature (homog)%p(1), source=temperature_init) + allocate (temperature (homog)%p(1), source=thermal_initialT(homog)) deallocate(temperatureRate(homog)%p) allocate (temperatureRate(homog)%p(1), source=0.0_pReal) diff --git a/code/vacancyflux_cahnhilliard.f90 b/code/vacancyflux_cahnhilliard.f90 index dacc255d3..25b9d8b3a 100644 --- a/code/vacancyflux_cahnhilliard.f90 +++ b/code/vacancyflux_cahnhilliard.f90 @@ -89,6 +89,7 @@ subroutine vacancyflux_cahnhilliard_init(fileUnit) vacancyfluxMapping, & vacancyConc, & vacancyConcRate, & + vacancyflux_initialCv, & material_partHomogenization, & material_partPhase use numerics,only: & @@ -205,7 +206,7 @@ subroutine vacancyflux_cahnhilliard_init(fileUnit) nullify(vacancyfluxMapping(section)%p) vacancyfluxMapping(section)%p => mappingHomogenization(1,:,:) deallocate(vacancyConc (section)%p) - allocate (vacancyConc (section)%p(NofMyHomog), source=0.0_pReal) + allocate (vacancyConc (section)%p(NofMyHomog), source=vacancyflux_initialCv(section)) deallocate(vacancyConcRate(section)%p) allocate (vacancyConcRate(section)%p(NofMyHomog), source=0.0_pReal) @@ -510,8 +511,7 @@ 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)* & - vacancyflux_cahnhilliard_thermalFluc(vacancyflux_typeInstance(homog))%p(mappingHomogenization(1,ip,el)) + ChemPot = vacancyflux_cahnhilliard_getFormationEnergy(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))/ & @@ -535,7 +535,12 @@ subroutine vacancyflux_cahnhilliard_getChemPotAndItsTangent(ChemPot,dChemPot_dCv elseif (Cv > 1.0_pReal) then ChemPot = ChemPot + 3.0_pReal*vacancyBoundPenalty*(1.0_pReal - Cv)*(1.0_pReal - Cv) dChemPot_dCv = dChemPot_dCv - 6.0_pReal*vacancyBoundPenalty*(1.0_pReal - Cv) - endif + endif + + ChemPot = ChemPot* & + vacancyflux_cahnhilliard_thermalFluc(vacancyflux_typeInstance(homog))%p(mappingHomogenization(1,ip,el)) + dChemPot_dCv = dChemPot_dCv* & + vacancyflux_cahnhilliard_thermalFluc(vacancyflux_typeInstance(homog))%p(mappingHomogenization(1,ip,el)) end subroutine vacancyflux_cahnhilliard_getChemPotAndItsTangent diff --git a/code/vacancyflux_isochempot.f90 b/code/vacancyflux_isochempot.f90 index 44ccb13e6..756a992fd 100644 --- a/code/vacancyflux_isochempot.f90 +++ b/code/vacancyflux_isochempot.f90 @@ -72,6 +72,7 @@ subroutine vacancyflux_isochempot_init(fileUnit) vacancyfluxMapping, & vacancyConc, & vacancyConcRate, & + vacancyflux_initialCv, & material_partHomogenization use numerics,only: & worldrank @@ -165,9 +166,9 @@ subroutine vacancyflux_isochempot_init(fileUnit) sizeState = 1_pInt vacancyfluxState(section)%sizeState = sizeState vacancyfluxState(section)%sizePostResults = vacancyflux_isochempot_sizePostResults(instance) - allocate(vacancyfluxState(section)%state0 (sizeState,NofMyHomog), source=0.0_pReal) - allocate(vacancyfluxState(section)%subState0(sizeState,NofMyHomog), source=0.0_pReal) - allocate(vacancyfluxState(section)%state (sizeState,NofMyHomog), source=0.0_pReal) + allocate(vacancyfluxState(section)%state0 (sizeState,NofMyHomog), source=vacancyflux_initialCv(section)) + allocate(vacancyfluxState(section)%subState0(sizeState,NofMyHomog), source=vacancyflux_initialCv(section)) + allocate(vacancyfluxState(section)%state (sizeState,NofMyHomog), source=vacancyflux_initialCv(section)) nullify(vacancyfluxMapping(section)%p) vacancyfluxMapping(section)%p => mappingHomogenization(1,:,:) diff --git a/code/vacancyflux_isoconc.f90 b/code/vacancyflux_isoconc.f90 index c66a8f55f..c0f300fb4 100644 --- a/code/vacancyflux_isoconc.f90 +++ b/code/vacancyflux_isoconc.f90 @@ -46,12 +46,12 @@ subroutine vacancyflux_isoconc_init() NofMyHomog = count(material_homog == homog) vacancyfluxState(homog)%sizeState = 0_pInt vacancyfluxState(homog)%sizePostResults = 0_pInt - allocate(vacancyfluxState(homog)%state0 (0_pInt,NofMyHomog), source=0.0_pReal) - allocate(vacancyfluxState(homog)%subState0(0_pInt,NofMyHomog), source=0.0_pReal) - allocate(vacancyfluxState(homog)%state (0_pInt,NofMyHomog), source=0.0_pReal) + allocate(vacancyfluxState(homog)%state0 (0_pInt,NofMyHomog)) + allocate(vacancyfluxState(homog)%subState0(0_pInt,NofMyHomog)) + allocate(vacancyfluxState(homog)%state (0_pInt,NofMyHomog)) deallocate(vacancyConc (homog)%p) - allocate (vacancyConc (homog)%p(1), source=0.0_pReal) + allocate (vacancyConc (homog)%p(1), source=vacancyflux_initialCv(homog)) deallocate(vacancyConcRate(homog)%p) allocate (vacancyConcRate(homog)%p(1), source=0.0_pReal)