more cleaning up. added pure attribute to some functions. differentiating between ‘local’ and ‘nonlocal’ temperature.

This commit is contained in:
Pratheek Shanthraj 2015-04-21 16:11:30 +00:00
parent 1330dae432
commit d7df5f1934
6 changed files with 272 additions and 288 deletions

View File

@ -125,25 +125,26 @@ subroutine CPFEM_init
IO_timeStamp, &
IO_error
use numerics, only: &
worldrank, &
DAMASK_NumThreadsInt
worldrank
use debug, only: &
debug_level, &
debug_CPFEM, &
debug_levelBasic, &
debug_levelExtensive
use FEsolving, only: &
#if defined(Marc4DAMASK) || defined(Abaqus)
symmetricSolver, &
#endif
restartRead, &
modelName
#if defined(Marc4DAMASK) || defined(Abaqus)
use mesh, only: &
mesh_NcpElems, &
mesh_maxNips
#endif
use material, only: &
homogenization_maxNgrains, &
material_phase, &
homogState, &
mappingHomogenization, &
phase_plasticity, &
plasticState, &
material_Nhomogenization
@ -154,8 +155,7 @@ subroutine CPFEM_init
crystallite_Fi0, &
crystallite_Li0, &
crystallite_dPdF0, &
crystallite_Tstar0_v, &
crystallite_localPlasticity
crystallite_Tstar0_v
implicit none
integer(pInt) :: k,l,m,ph,homog
@ -276,8 +276,7 @@ subroutine CPFEM_general(mode, ffn, ffn1, temperature, dt, elFE, ip)
debug_levelBasic, &
debug_levelExtensive, &
debug_levelSelective, &
debug_e, &
debug_i, &
#if defined(Marc4DAMASK) || defined(Abaqus)
debug_stressMaxLocation, &
debug_stressMinLocation, &
debug_jacobianMaxLocation, &
@ -285,7 +284,10 @@ subroutine CPFEM_general(mode, ffn, ffn1, temperature, dt, elFE, ip)
debug_stressMax, &
debug_stressMin, &
debug_jacobianMax, &
debug_jacobianMin
debug_jacobianMin, &
#endif
debug_e, &
debug_i
use FEsolving, only: &
outdatedFFN1, &
terminallyIll, &
@ -312,7 +314,6 @@ subroutine CPFEM_general(mode, ffn, ffn1, temperature, dt, elFE, ip)
mesh_maxNips, &
mesh_element
use material, only: &
homogenization_maxNgrains, &
microstructure_elemhomo, &
plasticState, &
damageState, &
@ -341,12 +342,12 @@ subroutine CPFEM_general(mode, ffn, ffn1, temperature, dt, elFE, ip)
use homogenization, only: &
materialpoint_F, &
materialpoint_F0, &
#if defined(Marc4DAMASK) || defined(Abaqus)
materialpoint_P, &
materialpoint_dPdF, &
#if defined(Marc4DAMASK) || defined(Abaqus)
materialpoint_results, &
#endif
materialpoint_sizeResults, &
#endif
materialpoint_stressAndItsTangent, &
materialpoint_postResults, &
field_putFieldTemperature

View File

@ -68,12 +68,10 @@ subroutine constitutive_init(temperature_init)
use prec, only: &
pReal
use debug, only: &
debug_level, &
debug_constitutive, &
debug_levelBasic
use numerics, only: &
worldrank, &
numerics_integrator
worldrank
use IO, only: &
IO_error, &
IO_open_file, &
@ -82,10 +80,6 @@ subroutine constitutive_init(temperature_init)
IO_write_jobIntFile, &
IO_timeStamp
use mesh, only: &
mesh_maxNips, &
mesh_NcpElems, &
mesh_element, &
FE_Nips, &
FE_geomtype
use material, only: &
material_phase, &
@ -93,7 +87,6 @@ subroutine constitutive_init(temperature_init)
material_localFileExt, &
material_configFile, &
phase_name, &
phase_elasticity, &
phase_plasticity, &
phase_plasticityInstance, &
phase_damage, &
@ -102,9 +95,6 @@ subroutine constitutive_init(temperature_init)
phase_thermalInstance, &
phase_vacancy, &
phase_vacancyInstance, &
phase_Noutput, &
homogenization_Ngrains, &
homogenization_maxNgrains, &
ELASTICITY_hooke_ID, &
PLASTICITY_none_ID, &
PLASTICITY_j2_ID, &
@ -148,9 +138,7 @@ subroutine constitutive_init(temperature_init)
plasticState, &
damageState, &
thermalState, &
vacancyState, &
mappingConstitutive
vacancyState
use plastic_none
use plastic_j2
@ -245,156 +233,158 @@ subroutine constitutive_init(temperature_init)
if (worldrank == 0_pInt) then
call IO_write_jobFile(FILEUNIT,'outputConstitutive')
do phase = 1_pInt,material_Nphase
instance = phase_plasticityInstance(phase) ! which instance of a plasticity is present phase
knownPlasticity = .true. ! assume valid
select case(phase_plasticity(phase)) ! split per constititution
case (PLASTICITY_NONE_ID)
outputName = PLASTICITY_NONE_label
thisNoutput => null()
thisOutput => null() ! plastic_none_output
thisSize => null() ! plastic_none_sizePostResult
case (PLASTICITY_J2_ID)
outputName = PLASTICITY_J2_label
thisNoutput => plastic_j2_Noutput
thisOutput => plastic_j2_output
thisSize => plastic_j2_sizePostResult
case (PLASTICITY_PHENOPOWERLAW_ID)
outputName = PLASTICITY_PHENOPOWERLAW_label
thisNoutput => plastic_phenopowerlaw_Noutput
thisOutput => plastic_phenopowerlaw_output
thisSize => plastic_phenopowerlaw_sizePostResult
case (PLASTICITY_DISLOTWIN_ID)
outputName = PLASTICITY_DISLOTWIN_label
thisNoutput => plastic_dislotwin_Noutput
thisOutput => plastic_dislotwin_output
thisSize => plastic_dislotwin_sizePostResult
case (PLASTICITY_DISLOKMC_ID)
outputName = PLASTICITY_DISLOKMC_label
thisNoutput => plastic_dislokmc_Noutput
thisOutput => plastic_dislokmc_output
thisSize => plastic_dislokmc_sizePostResult
case (PLASTICITY_DISLOUCLA_ID)
outputName = PLASTICITY_DISLOUCLA_label
thisNoutput => plastic_disloucla_Noutput
thisOutput => plastic_disloucla_output
thisSize => plastic_disloucla_sizePostResult
case (PLASTICITY_TITANMOD_ID)
outputName = PLASTICITY_TITANMOD_label
thisNoutput => plastic_titanmod_Noutput
thisOutput => plastic_titanmod_output
thisSize => plastic_titanmod_sizePostResult
case (PLASTICITY_NONLOCAL_ID)
outputName = PLASTICITY_NONLOCAL_label
thisNoutput => plastic_nonlocal_Noutput
thisOutput => plastic_nonlocal_output
thisSize => plastic_nonlocal_sizePostResult
case default
knownPlasticity = .false.
end select
write(FILEUNIT,'(/,a,/)') '['//trim(phase_name(phase))//']'
if (knownPlasticity) then
write(FILEUNIT,'(a)') '(plasticity)'//char(9)//trim(outputName)
if (phase_plasticity(phase) /= PLASTICITY_NONE_ID) then
do e = 1_pInt,thisNoutput(instance)
write(FILEUNIT,'(a,i4)') trim(thisOutput(e,instance))//char(9),thisSize(e,instance)
enddo
if (any(material_phase == phase)) then ! is this phase active?
instance = phase_plasticityInstance(phase) ! which instance of a plasticity is present phase
knownPlasticity = .true. ! assume valid
select case(phase_plasticity(phase)) ! split per constititution
case (PLASTICITY_NONE_ID)
outputName = PLASTICITY_NONE_label
thisNoutput => null()
thisOutput => null() ! plastic_none_output
thisSize => null() ! plastic_none_sizePostResult
case (PLASTICITY_J2_ID)
outputName = PLASTICITY_J2_label
thisNoutput => plastic_j2_Noutput
thisOutput => plastic_j2_output
thisSize => plastic_j2_sizePostResult
case (PLASTICITY_PHENOPOWERLAW_ID)
outputName = PLASTICITY_PHENOPOWERLAW_label
thisNoutput => plastic_phenopowerlaw_Noutput
thisOutput => plastic_phenopowerlaw_output
thisSize => plastic_phenopowerlaw_sizePostResult
case (PLASTICITY_DISLOTWIN_ID)
outputName = PLASTICITY_DISLOTWIN_label
thisNoutput => plastic_dislotwin_Noutput
thisOutput => plastic_dislotwin_output
thisSize => plastic_dislotwin_sizePostResult
case (PLASTICITY_DISLOKMC_ID)
outputName = PLASTICITY_DISLOKMC_label
thisNoutput => plastic_dislokmc_Noutput
thisOutput => plastic_dislokmc_output
thisSize => plastic_dislokmc_sizePostResult
case (PLASTICITY_DISLOUCLA_ID)
outputName = PLASTICITY_DISLOUCLA_label
thisNoutput => plastic_disloucla_Noutput
thisOutput => plastic_disloucla_output
thisSize => plastic_disloucla_sizePostResult
case (PLASTICITY_TITANMOD_ID)
outputName = PLASTICITY_TITANMOD_label
thisNoutput => plastic_titanmod_Noutput
thisOutput => plastic_titanmod_output
thisSize => plastic_titanmod_sizePostResult
case (PLASTICITY_NONLOCAL_ID)
outputName = PLASTICITY_NONLOCAL_label
thisNoutput => plastic_nonlocal_Noutput
thisOutput => plastic_nonlocal_output
thisSize => plastic_nonlocal_sizePostResult
case default
knownPlasticity = .false.
end select
write(FILEUNIT,'(/,a,/)') '['//trim(phase_name(phase))//']'
if (knownPlasticity) then
write(FILEUNIT,'(a)') '(plasticity)'//char(9)//trim(outputName)
if (phase_plasticity(phase) /= PLASTICITY_NONE_ID) then
do e = 1_pInt,thisNoutput(instance)
write(FILEUNIT,'(a,i4)') trim(thisOutput(e,instance))//char(9),thisSize(e,instance)
enddo
endif
endif
endif
instance = phase_damageInstance(phase) ! which instance of a plasticity is present phase
knownDamage = .true.
select case(phase_damage(phase)) ! split per constititution
case (LOCAL_DAMAGE_none_ID)
outputName = LOCAL_DAMAGE_NONE_label
thisNoutput => null()
thisOutput => null()
thisSize => null()
case (LOCAL_DAMAGE_isoBrittle_ID)
outputName = LOCAL_DAMAGE_isoBrittle_LABEL
thisNoutput => damage_isoBrittle_Noutput
thisOutput => damage_isoBrittle_output
thisSize => damage_isoBrittle_sizePostResult
case (LOCAL_DAMAGE_isoDuctile_ID)
outputName = LOCAL_DAMAGE_isoDuctile_LABEL
thisNoutput => damage_isoDuctile_Noutput
thisOutput => damage_isoDuctile_output
thisSize => damage_isoDuctile_sizePostResult
case (LOCAL_DAMAGE_anisoBrittle_ID)
outputName = LOCAL_DAMAGE_anisoBrittle_label
thisNoutput => damage_anisoBrittle_Noutput
thisOutput => damage_anisoBrittle_output
thisSize => damage_anisoBrittle_sizePostResult
case (LOCAL_DAMAGE_anisoDuctile_ID)
outputName = LOCAL_DAMAGE_anisoDuctile_LABEL
thisNoutput => damage_anisoDuctile_Noutput
thisOutput => damage_anisoDuctile_output
thisSize => damage_anisoDuctile_sizePostResult
case (LOCAL_DAMAGE_gurson_ID)
outputName = LOCAL_DAMAGE_gurson_label
thisNoutput => damage_gurson_Noutput
thisOutput => damage_gurson_output
thisSize => damage_gurson_sizePostResult
case (LOCAL_DAMAGE_phaseField_ID)
outputName = LOCAL_DAMAGE_phaseField_label
thisNoutput => damage_phaseField_Noutput
thisOutput => damage_phaseField_output
thisSize => damage_phaseField_sizePostResult
case default
knownDamage = .false.
end select
if (knownDamage) then
write(FILEUNIT,'(a)') '(damage)'//char(9)//trim(outputName)
if (phase_damage(phase) /= LOCAL_DAMAGE_none_ID) then
do e = 1_pInt,thisNoutput(instance)
write(FILEUNIT,'(a,i4)') trim(thisOutput(e,instance))//char(9),thisSize(e,instance)
enddo
instance = phase_damageInstance(phase) ! which instance of a plasticity is present phase
knownDamage = .true.
select case(phase_damage(phase)) ! split per constititution
case (LOCAL_DAMAGE_none_ID)
outputName = LOCAL_DAMAGE_NONE_label
thisNoutput => null()
thisOutput => null()
thisSize => null()
case (LOCAL_DAMAGE_isoBrittle_ID)
outputName = LOCAL_DAMAGE_isoBrittle_LABEL
thisNoutput => damage_isoBrittle_Noutput
thisOutput => damage_isoBrittle_output
thisSize => damage_isoBrittle_sizePostResult
case (LOCAL_DAMAGE_isoDuctile_ID)
outputName = LOCAL_DAMAGE_isoDuctile_LABEL
thisNoutput => damage_isoDuctile_Noutput
thisOutput => damage_isoDuctile_output
thisSize => damage_isoDuctile_sizePostResult
case (LOCAL_DAMAGE_anisoBrittle_ID)
outputName = LOCAL_DAMAGE_anisoBrittle_label
thisNoutput => damage_anisoBrittle_Noutput
thisOutput => damage_anisoBrittle_output
thisSize => damage_anisoBrittle_sizePostResult
case (LOCAL_DAMAGE_anisoDuctile_ID)
outputName = LOCAL_DAMAGE_anisoDuctile_LABEL
thisNoutput => damage_anisoDuctile_Noutput
thisOutput => damage_anisoDuctile_output
thisSize => damage_anisoDuctile_sizePostResult
case (LOCAL_DAMAGE_gurson_ID)
outputName = LOCAL_DAMAGE_gurson_label
thisNoutput => damage_gurson_Noutput
thisOutput => damage_gurson_output
thisSize => damage_gurson_sizePostResult
case (LOCAL_DAMAGE_phaseField_ID)
outputName = LOCAL_DAMAGE_phaseField_label
thisNoutput => damage_phaseField_Noutput
thisOutput => damage_phaseField_output
thisSize => damage_phaseField_sizePostResult
case default
knownDamage = .false.
end select
if (knownDamage) then
write(FILEUNIT,'(a)') '(damage)'//char(9)//trim(outputName)
if (phase_damage(phase) /= LOCAL_DAMAGE_none_ID) then
do e = 1_pInt,thisNoutput(instance)
write(FILEUNIT,'(a,i4)') trim(thisOutput(e,instance))//char(9),thisSize(e,instance)
enddo
endif
endif
endif
instance = phase_thermalInstance(phase) ! which instance is present phase
knownThermal = .true.
select case(phase_thermal(phase)) ! split per constititution
case (LOCAL_THERMAL_isothermal_ID)
outputName = LOCAL_THERMAL_ISOTHERMAL_label
thisNoutput => null()
thisOutput => null()
thisSize => null()
case (LOCAL_THERMAL_adiabatic_ID)
outputName = LOCAL_THERMAL_ADIABATIC_label
thisNoutput => thermal_adiabatic_Noutput
thisOutput => thermal_adiabatic_output
thisSize => thermal_adiabatic_sizePostResult
case default
knownThermal = .false.
end select
if (knownThermal) then
write(FILEUNIT,'(a)') '(thermal)'//char(9)//trim(outputName)
if (phase_thermal(phase) /= LOCAL_THERMAL_isothermal_ID) then
do e = 1_pInt,thisNoutput(instance)
write(FILEUNIT,'(a,i4)') trim(thisOutput(e,instance))//char(9),thisSize(e,instance)
enddo
instance = phase_thermalInstance(phase) ! which instance is present phase
knownThermal = .true.
select case(phase_thermal(phase)) ! split per constititution
case (LOCAL_THERMAL_isothermal_ID)
outputName = LOCAL_THERMAL_ISOTHERMAL_label
thisNoutput => null()
thisOutput => null()
thisSize => null()
case (LOCAL_THERMAL_adiabatic_ID)
outputName = LOCAL_THERMAL_ADIABATIC_label
thisNoutput => thermal_adiabatic_Noutput
thisOutput => thermal_adiabatic_output
thisSize => thermal_adiabatic_sizePostResult
case default
knownThermal = .false.
end select
if (knownThermal) then
write(FILEUNIT,'(a)') '(thermal)'//char(9)//trim(outputName)
if (phase_thermal(phase) /= LOCAL_THERMAL_isothermal_ID) then
do e = 1_pInt,thisNoutput(instance)
write(FILEUNIT,'(a,i4)') trim(thisOutput(e,instance))//char(9),thisSize(e,instance)
enddo
endif
endif
endif
instance = phase_vacancyInstance(phase) ! which instance is present phase
knownVacancy = .true.
select case(phase_vacancy(phase)) ! split per constititution
case (LOCAL_VACANCY_constant_ID)
outputName = LOCAL_VACANCY_constant_label
thisNoutput => null()
thisOutput => null()
thisSize => null()
case (LOCAL_VACANCY_generation_ID)
outputName = LOCAL_VACANCY_generation_label
thisNoutput => vacancy_generation_Noutput
thisOutput => vacancy_generation_output
thisSize => vacancy_generation_sizePostResult
case default
knownVacancy = .false.
end select
if (knownVacancy) then
write(FILEUNIT,'(a)') '(vacancy)'//char(9)//trim(outputName)
if (phase_vacancy(phase) /= LOCAL_VACANCY_constant_ID) then
do e = 1_pInt,thisNoutput(instance)
write(FILEUNIT,'(a,i4)') trim(thisOutput(e,instance))//char(9),thisSize(e,instance)
enddo
instance = phase_vacancyInstance(phase) ! which instance is present phase
knownVacancy = .true.
select case(phase_vacancy(phase)) ! split per constititution
case (LOCAL_VACANCY_constant_ID)
outputName = LOCAL_VACANCY_constant_label
thisNoutput => null()
thisOutput => null()
thisSize => null()
case (LOCAL_VACANCY_generation_ID)
outputName = LOCAL_VACANCY_generation_label
thisNoutput => vacancy_generation_Noutput
thisOutput => vacancy_generation_output
thisSize => vacancy_generation_sizePostResult
case default
knownVacancy = .false.
end select
if (knownVacancy) then
write(FILEUNIT,'(a)') '(vacancy)'//char(9)//trim(outputName)
if (phase_vacancy(phase) /= LOCAL_VACANCY_constant_ID) then
do e = 1_pInt,thisNoutput(instance)
write(FILEUNIT,'(a,i4)') trim(thisOutput(e,instance))//char(9),thisSize(e,instance)
enddo
endif
endif
endif
enddo
@ -480,10 +470,7 @@ function constitutive_homogenizedC(ipc,ip,el)
PLASTICITY_TITANMOD_ID, &
PLASTICITY_DISLOTWIN_ID, &
PLASTICITY_DISLOKMC_ID, &
PLASTICITY_DISLOUCLA_ID, &
plasticState,&
mappingConstitutive
PLASTICITY_DISLOUCLA_ID
use plastic_titanmod, only: &
plastic_titanmod_homogenizedC
use plastic_dislotwin, only: &
@ -696,10 +683,7 @@ subroutine constitutive_LpAndItsTangent(Lp, dLp_dTstar3333, dLp_dFi3333, Tstar_v
math_Plain99to3333
use material, only: &
phase_plasticity, &
phase_plasticityInstance, &
material_phase, &
plasticState,&
mappingConstitutive, &
PLASTICITY_NONE_ID, &
PLASTICITY_J2_ID, &
PLASTICITY_PHENOPOWERLAW_ID, &
@ -928,11 +912,6 @@ subroutine constitutive_hooke_TandItsTangent(T, dT_dFe, dT_dFi, Fe, Fi, ipc, ip,
math_transpose33, &
math_trace33, &
math_I3
use material, only: &
mappingConstitutive
use lattice, only: &
lattice_referenceTemperature, &
lattice_thermalExpansion33
implicit none
integer(pInt), intent(in) :: &
@ -985,9 +964,7 @@ subroutine constitutive_collectDotState(Tstar_v, Lp, FeArray, FpArray, subdt, su
mesh_maxNips
use material, only: &
phase_plasticity, &
phase_plasticityInstance, &
phase_damage, &
phase_vacancy, &
material_phase, &
homogenization_maxNgrains, &
PLASTICITY_none_ID, &
@ -1095,8 +1072,6 @@ logical function constitutive_collectDeltaState(Tstar_v, ipc, ip, el)
use material, only: &
phase_plasticity, &
material_phase, &
plasticState, &
mappingConstitutive, &
PLASTICITY_NONLOCAL_ID
use plastic_nonlocal, only: &
plastic_nonlocal_deltaState
@ -1142,17 +1117,15 @@ end function constitutive_collectDeltaState
!--------------------------------------------------------------------------------------------------
!> @brief Returns the local(regularised) damage
!--------------------------------------------------------------------------------------------------
function constitutive_getLocalDamage(ipc, ip, el)
pure function constitutive_getLocalDamage(ipc, ip, el)
use prec, only: &
pReal
use material, only: &
material_phase, &
LOCAL_DAMAGE_none_ID, &
LOCAL_DAMAGE_isoBrittle_ID, &
LOCAL_DAMAGE_isoDuctile_ID, &
LOCAL_DAMAGE_anisoBrittle_ID, &
LOCAL_DAMAGE_anisoDuctile_ID, &
LOCAL_DAMAGE_gurson_ID, &
LOCAL_DAMAGE_phaseField_ID, &
phase_damage
use damage_isoBrittle, only: &
@ -1163,8 +1136,6 @@ function constitutive_getLocalDamage(ipc, ip, el)
damage_anisoBrittle_getLocalDamage
use damage_anisoDuctile, only: &
damage_anisoDuctile_getLocalDamage
use damage_gurson, only: &
damage_gurson_getLocalDamage
use damage_phaseField, only: &
damage_phaseField_getLocalDamage
@ -1176,7 +1147,7 @@ function constitutive_getLocalDamage(ipc, ip, el)
real(pReal) :: constitutive_getLocalDamage
select case (phase_damage(material_phase(ipc,ip,el)))
case (LOCAL_DAMAGE_none_ID)
case default
constitutive_getLocalDamage = 1.0_pReal
case (LOCAL_DAMAGE_isoBrittle_ID)
@ -1191,9 +1162,6 @@ function constitutive_getLocalDamage(ipc, ip, el)
case (LOCAL_DAMAGE_anisoDuctile_ID)
constitutive_getLocalDamage = damage_anisoDuctile_getLocalDamage(ipc, ip, el)
case (LOCAL_DAMAGE_gurson_ID)
constitutive_getLocalDamage = damage_gurson_getLocalDamage(ipc, ip, el)
case (LOCAL_DAMAGE_phaseField_ID)
constitutive_getLocalDamage = damage_phaseField_getLocalDamage(ipc, ip, el)
@ -1263,17 +1231,15 @@ end subroutine constitutive_putLocalDamage
!--------------------------------------------------------------------------------------------------
!> @brief returns nonlocal (regularised) damage
!--------------------------------------------------------------------------------------------------
function constitutive_getDamage(ipc, ip, el)
pure function constitutive_getDamage(ipc, ip, el)
use prec, only: &
pReal
use material, only: &
material_phase, &
LOCAL_DAMAGE_none_ID, &
LOCAL_DAMAGE_isoBrittle_ID, &
LOCAL_DAMAGE_isoDuctile_ID, &
LOCAL_DAMAGE_anisoBrittle_ID, &
LOCAL_DAMAGE_anisoDuctile_ID, &
LOCAL_DAMAGE_gurson_ID, &
LOCAL_DAMAGE_phaseField_ID, &
phase_damage
use damage_isoBrittle, only: &
@ -1284,8 +1250,6 @@ function constitutive_getDamage(ipc, ip, el)
damage_anisoBrittle_getDamage
use damage_anisoDuctile, only: &
damage_anisoDuctile_getDamage
use damage_gurson, only: &
damage_gurson_getDamage
use damage_phaseField, only: &
damage_phaseField_getDamage
@ -1297,7 +1261,7 @@ function constitutive_getDamage(ipc, ip, el)
real(pReal) :: constitutive_getDamage
select case (phase_damage(material_phase(ipc,ip,el)))
case (LOCAL_DAMAGE_none_ID)
case default
constitutive_getDamage = 1.0_pReal
case (LOCAL_DAMAGE_isoBrittle_ID)
@ -1312,9 +1276,6 @@ function constitutive_getDamage(ipc, ip, el)
case (LOCAL_DAMAGE_anisoDuctile_ID)
constitutive_getDamage = damage_anisoDuctile_getDamage(ipc, ip, el)
case (LOCAL_DAMAGE_gurson_ID)
constitutive_getDamage = damage_gurson_getDamage(ipc, ip, el)
case (LOCAL_DAMAGE_phaseField_ID)
constitutive_getDamage = damage_phaseField_getDamage(ipc, ip, el)
@ -1325,7 +1286,7 @@ end function constitutive_getDamage
!--------------------------------------------------------------------------------------------------
!> @brief returns damage diffusion tensor
!--------------------------------------------------------------------------------------------------
function constitutive_getDamageDiffusion33(ipc, ip, el)
pure function constitutive_getDamageDiffusion33(ipc, ip, el)
use prec, only: &
pReal
use lattice, only: &
@ -1368,19 +1329,18 @@ end function constitutive_getDamageDiffusion33
!--------------------------------------------------------------------------------------------------
!> @brief returns local (unregularised) temperature
!--------------------------------------------------------------------------------------------------
function constitutive_getAdiabaticTemperature(ipc, ip, el)
pure function constitutive_getAdiabaticTemperature(ipc, ip, el)
use prec, only: &
pReal
use material, only: &
material_phase, &
LOCAL_THERMAL_isothermal_ID, &
LOCAL_THERMAL_adiabatic_ID, &
phase_thermal, &
phase_thermalInstance
use thermal_isothermal, only: &
thermal_isothermal_temperature
use thermal_adiabatic, only: &
thermal_adiabatic_getTemperature
thermal_adiabatic_getLocalTemperature
implicit none
integer(pInt), intent(in) :: &
@ -1390,12 +1350,13 @@ function constitutive_getAdiabaticTemperature(ipc, ip, el)
real(pReal) :: constitutive_getAdiabaticTemperature
select case (phase_thermal(material_phase(ipc,ip,el)))
case (LOCAL_THERMAL_isothermal_ID)
case (LOCAL_THERMAL_adiabatic_ID)
constitutive_getAdiabaticTemperature = thermal_adiabatic_getLocalTemperature(ipc, ip, el)
case default
constitutive_getAdiabaticTemperature = &
thermal_isothermal_temperature(phase_thermalInstance(material_phase(ipc,ip,el)))
case (LOCAL_THERMAL_adiabatic_ID)
constitutive_getAdiabaticTemperature = thermal_adiabatic_getTemperature(ipc, ip, el)
end select
end function constitutive_getAdiabaticTemperature
@ -1411,7 +1372,7 @@ subroutine constitutive_putAdiabaticTemperature(ipc, ip, el, localTemperature)
LOCAL_THERMAL_adiabatic_ID, &
phase_thermal
use thermal_adiabatic, only: &
thermal_adiabatic_putTemperature
thermal_adiabatic_putLocalTemperature
implicit none
integer(pInt), intent(in) :: &
@ -1423,7 +1384,7 @@ subroutine constitutive_putAdiabaticTemperature(ipc, ip, el, localTemperature)
select case (phase_thermal(material_phase(ipc,ip,el)))
case (LOCAL_THERMAL_adiabatic_ID)
call thermal_adiabatic_putTemperature(ipc, ip, el, localTemperature)
call thermal_adiabatic_putLocalTemperature(ipc, ip, el, localTemperature)
end select
@ -1432,17 +1393,18 @@ end subroutine constitutive_putAdiabaticTemperature
!--------------------------------------------------------------------------------------------------
!> @brief returns nonlocal (regularised) temperature
!--------------------------------------------------------------------------------------------------
function constitutive_getTemperature(ipc, ip, el)
pure function constitutive_getTemperature(ipc, ip, el)
use prec, only: &
pReal
use material, only: &
mappingHomogenization, &
material_phase, &
fieldThermal, &
field_thermal_type, &
FIELD_THERMAL_local_ID, &
FIELD_THERMAL_nonlocal_ID, &
material_homog
LOCAL_THERMAL_adiabatic_ID, &
phase_thermal
use thermal_adiabatic, only: &
thermal_adiabatic_getTemperature
use thermal_isothermal, only: &
thermal_isothermal_temperature
implicit none
integer(pInt), intent(in) :: &
ipc, & !< grain number
@ -1450,14 +1412,13 @@ function constitutive_getTemperature(ipc, ip, el)
el !< element number
real(pReal) :: constitutive_getTemperature
select case(field_thermal_type(material_homog(ip,el)))
case (FIELD_THERMAL_local_ID)
constitutive_getTemperature = constitutive_getAdiabaticTemperature(ipc, ip, el)
case (FIELD_THERMAL_nonlocal_ID)
constitutive_getTemperature = fieldThermal(material_homog(ip,el))% &
field(1,mappingHomogenization(1,ip,el)) ! Taylor type
select case (phase_thermal(material_phase(ipc,ip,el)))
case (LOCAL_THERMAL_adiabatic_ID)
constitutive_getTemperature = thermal_adiabatic_getTemperature(ipc, ip, el)
case default
constitutive_getTemperature = thermal_isothermal_temperature(material_phase(ipc,ip,el))
end select
end function constitutive_getTemperature
@ -1465,12 +1426,11 @@ end function constitutive_getTemperature
!--------------------------------------------------------------------------------------------------
!> @brief returns heat generation rate
!--------------------------------------------------------------------------------------------------
function constitutive_getHeatGeneration(Tstar_v, Lp, ipc, ip, el)
pure function constitutive_getHeatGeneration(Tstar_v, Lp, ipc, ip, el)
use prec, only: &
pReal
use material, only: &
material_phase, &
LOCAL_THERMAL_isothermal_ID, &
LOCAL_THERMAL_adiabatic_ID, &
phase_thermal
use thermal_adiabatic, only: &
@ -1488,11 +1448,12 @@ function constitutive_getHeatGeneration(Tstar_v, Lp, ipc, ip, el)
real(pReal) :: constitutive_getHeatGeneration
select case (phase_thermal(material_phase(ipc,ip,el)))
case (LOCAL_THERMAL_isothermal_ID)
constitutive_getHeatGeneration = 0.0_pReal
case (LOCAL_THERMAL_adiabatic_ID)
constitutive_getHeatGeneration = thermal_adiabatic_getHeatGeneration(Tstar_v, Lp)
case default
constitutive_getHeatGeneration = 0.0_pReal
end select
end function constitutive_getHeatGeneration
@ -1500,12 +1461,11 @@ end function constitutive_getHeatGeneration
!--------------------------------------------------------------------------------------------------
!> @brief returns local vacancy concentration
!--------------------------------------------------------------------------------------------------
function constitutive_getLocalVacancyConcentration(ipc, ip, el)
pure function constitutive_getLocalVacancyConcentration(ipc, ip, el)
use prec, only: &
pReal
use material, only: &
material_phase, &
LOCAL_VACANCY_constant_ID, &
LOCAL_VACANCY_generation_ID, &
phase_vacancy
use vacancy_generation, only: &
@ -1521,12 +1481,13 @@ function constitutive_getLocalVacancyConcentration(ipc, ip, el)
real(pReal) :: constitutive_getLocalVacancyConcentration
select case (phase_vacancy(material_phase(ipc,ip,el)))
case (LOCAL_VACANCY_constant_ID)
case (LOCAL_VACANCY_generation_ID)
constitutive_getLocalVacancyConcentration = vacancy_generation_getLocalConcentration(ipc, ip, el)
case default
constitutive_getLocalVacancyConcentration = &
lattice_equilibriumVacancyConcentration(material_phase(ipc,ip,el))
case (LOCAL_VACANCY_generation_ID)
constitutive_getLocalVacancyConcentration = vacancy_generation_getLocalConcentration(ipc, ip, el)
end select
end function constitutive_getLocalVacancyConcentration
@ -1563,12 +1524,11 @@ end subroutine constitutive_putLocalVacancyConcentration
!--------------------------------------------------------------------------------------------------
!> @brief returns nonlocal vacancy concentration
!--------------------------------------------------------------------------------------------------
function constitutive_getVacancyConcentration(ipc, ip, el)
pure function constitutive_getVacancyConcentration(ipc, ip, el)
use prec, only: &
pReal
use material, only: &
material_phase, &
LOCAL_VACANCY_constant_ID, &
LOCAL_VACANCY_generation_ID, &
phase_vacancy
use vacancy_generation, only: &
@ -1584,12 +1544,13 @@ function constitutive_getVacancyConcentration(ipc, ip, el)
real(pReal) :: constitutive_getVacancyConcentration
select case (phase_vacancy(material_phase(ipc,ip,el)))
case (LOCAL_VACANCY_constant_ID)
constitutive_getVacancyConcentration = &
lattice_equilibriumVacancyConcentration(material_phase(ipc,ip,el))
case (LOCAL_VACANCY_generation_ID)
constitutive_getVacancyConcentration = vacancy_generation_getConcentration(ipc, ip, el)
case default
constitutive_getVacancyConcentration = &
lattice_equilibriumVacancyConcentration(material_phase(ipc,ip,el))
end select
end function constitutive_getVacancyConcentration
@ -1597,11 +1558,9 @@ end function constitutive_getVacancyConcentration
!--------------------------------------------------------------------------------------------------
!> @brief returns vacancy diffusion tensor
!--------------------------------------------------------------------------------------------------
function constitutive_getVacancyDiffusion33(ipc, ip, el)
pure function constitutive_getVacancyDiffusion33(ipc, ip, el)
use prec, only: &
pReal
use lattice, only: &
lattice_VacancyDiffusion33
use material, only: &
material_phase, &
LOCAL_VACANCY_generation_ID, &
@ -1629,7 +1588,7 @@ end function constitutive_getVacancyDiffusion33
!--------------------------------------------------------------------------------------------------
!> @brief returns vacancy diffusion tensor
!--------------------------------------------------------------------------------------------------
function constitutive_getVacancyMobility33(ipc, ip, el)
pure function constitutive_getVacancyMobility33(ipc, ip, el)
use prec, only: &
pReal
use material, only: &
@ -1660,7 +1619,7 @@ end function constitutive_getVacancyMobility33
!--------------------------------------------------------------------------------------------------
!> @brief returns vacancy chemical potential driving force
!--------------------------------------------------------------------------------------------------
real(pReal) function constitutive_getVacancyEnergy(ipc, ip, el)
pure real(pReal) function constitutive_getVacancyEnergy(ipc, ip, el)
use prec, only: &
pReal
use material, only: &
@ -1680,6 +1639,9 @@ real(pReal) function constitutive_getVacancyEnergy(ipc, ip, el)
case (LOCAL_VACANCY_generation_ID)
constitutive_getVacancyEnergy = &
vacancy_generation_getVacancyEnergy(ipc,ip,el)
case default
constitutive_getVacancyEnergy = 0.0_pReal
end select

View File

@ -343,7 +343,7 @@ end subroutine damage_phaseField_microstructure
!--------------------------------------------------------------------------------------------------
!> @brief returns damage
!--------------------------------------------------------------------------------------------------
function damage_phaseField_getDamage(ipc, ip, el)
pure function damage_phaseField_getDamage(ipc, ip, el)
use material, only: &
material_homog, &
mappingHomogenization, &
@ -362,7 +362,7 @@ function damage_phaseField_getDamage(ipc, ip, el)
real(pReal) :: damage_phaseField_getDamage
select case(field_damage_type(material_homog(ip,el)))
case (FIELD_DAMAGE_LOCAL_ID)
case default
damage_phaseField_getDamage = damageState(mappingConstitutive(2,ipc,ip,el))% &
state0(1,mappingConstitutive(1,ipc,ip,el))
@ -397,7 +397,7 @@ end subroutine damage_phaseField_putLocalDamage
!--------------------------------------------------------------------------------------------------
!> @brief returns local damage
!--------------------------------------------------------------------------------------------------
function damage_phaseField_getLocalDamage(ipc, ip, el)
pure function damage_phaseField_getLocalDamage(ipc, ip, el)
use material, only: &
mappingConstitutive, &
damageState
@ -417,12 +417,11 @@ end function damage_phaseField_getLocalDamage
!--------------------------------------------------------------------------------------------------
!> @brief returns brittle damage diffusion tensor
!--------------------------------------------------------------------------------------------------
function damage_phaseField_getDamageDiffusion33(ipc, ip, el)
pure function damage_phaseField_getDamageDiffusion33(ipc, ip, el)
use lattice, only: &
lattice_DamageDiffusion33
use material, only: &
mappingConstitutive, &
damageState
mappingConstitutive
implicit none
integer(pInt), intent(in) :: &
@ -444,7 +443,7 @@ end function damage_phaseField_getDamageDiffusion33
!--------------------------------------------------------------------------------------------------
!> @brief returns brittle damaged stiffness tensor
!--------------------------------------------------------------------------------------------------
function damage_phaseField_getDamagedC66(C, ipc, ip, el)
pure function damage_phaseField_getDamagedC66(C, ipc, ip, el)
use material, only: &
mappingConstitutive

View File

@ -1040,8 +1040,6 @@ subroutine homogenization_RGC_stressPenalty(rPen,nMis,avgF,fDef,ip,el,homID)
math_civita
use material, only: &
homogenization_maxNgrains,&
homogState, &
mappingHomogenization, &
homogenization_Ngrains
use numerics, only: &
xSmoo_RGC
@ -1339,11 +1337,8 @@ end function homogenization_RGC_relaxationVector
!--------------------------------------------------------------------------------------------------
function homogenization_RGC_interfaceNormal(intFace,ip,el)
use debug, only: &
debug_level, &
debug_homogenization,&
debug_levelExtensive, &
debug_e, &
debug_i
debug_levelExtensive
use math, only: &
math_mul33x3

View File

@ -42,7 +42,8 @@ module thermal_adiabatic
thermal_adiabatic_microstructure, &
thermal_adiabatic_LTAndItsTangent, &
thermal_adiabatic_getTemperature, &
thermal_adiabatic_putTemperature, &
thermal_adiabatic_getLocalTemperature, &
thermal_adiabatic_putLocalTemperature, &
thermal_adiabatic_getHeatGeneration, &
thermal_adiabatic_postResults
@ -59,9 +60,6 @@ subroutine thermal_adiabatic_init(fileUnit,temperature_init)
debug_level,&
debug_constitutive,&
debug_levelBasic
use mesh, only: &
mesh_maxNips, &
mesh_NcpElems
use IO, only: &
IO_read, &
IO_lc, &
@ -76,7 +74,6 @@ subroutine thermal_adiabatic_init(fileUnit,temperature_init)
IO_timeStamp, &
IO_EOF
use material, only: &
homogenization_maxNgrains, &
phase_thermal, &
phase_thermalInstance, &
phase_Noutput, &
@ -254,11 +251,9 @@ end subroutine thermal_adiabatic_aTolState
subroutine thermal_adiabatic_microstructure(Tstar_v, Lp, subdt, ipc, ip, el)
use lattice, only: &
lattice_massDensity, &
lattice_specificHeat, &
lattice_thermalExpansion33
lattice_specificHeat
use material, only: &
mappingConstitutive, &
phase_thermalInstance, &
thermalState
use math, only: &
math_Mandel6to33
@ -298,9 +293,7 @@ subroutine thermal_adiabatic_LTAndItsTangent(LT, dLT_dTstar3333, Tstar_v, Lp, ip
lattice_specificHeat, &
lattice_thermalExpansion33
use material, only: &
mappingConstitutive, &
phase_thermalInstance, &
thermalState
mappingConstitutive
use math, only: &
math_Plain3333to99, &
math_Mandel6to33
@ -344,7 +337,40 @@ end subroutine thermal_adiabatic_LTAndItsTangent
!--------------------------------------------------------------------------------------------------
!> @brief returns temperature based on local damage model state layout
!--------------------------------------------------------------------------------------------------
function thermal_adiabatic_getTemperature(ipc, ip, el)
pure function thermal_adiabatic_getTemperature(ipc, ip, el)
use material, only: &
mappingHomogenization, &
fieldThermal, &
field_thermal_type, &
FIELD_THERMAL_nonlocal_ID, &
material_homog, &
mappingConstitutive, &
thermalState
implicit none
integer(pInt), intent(in) :: &
ipc, & !< grain number
ip, & !< integration point number
el !< element number
real(pReal) :: thermal_adiabatic_getTemperature
select case(field_thermal_type(material_homog(ip,el)))
case (FIELD_THERMAL_nonlocal_ID)
thermal_adiabatic_getTemperature = fieldThermal(material_homog(ip,el))% &
field(1,mappingHomogenization(1,ip,el)) ! Taylor type
case default
thermal_adiabatic_getTemperature = thermalState(mappingConstitutive(2,ipc,ip,el))% &
state(1,mappingConstitutive(1,ipc,ip,el))
end select
end function thermal_adiabatic_getTemperature
!--------------------------------------------------------------------------------------------------
!> @brief returns temperature based on local damage model state layout
!--------------------------------------------------------------------------------------------------
pure function thermal_adiabatic_getLocalTemperature(ipc, ip, el)
use material, only: &
mappingConstitutive, &
ThermalState
@ -354,17 +380,18 @@ function thermal_adiabatic_getTemperature(ipc, ip, el)
ipc, & !< grain number
ip, & !< integration point number
el !< element number
real(pReal) :: thermal_adiabatic_getTemperature
real(pReal) :: &
thermal_adiabatic_getLocalTemperature
thermal_adiabatic_getTemperature = &
thermal_adiabatic_getLocalTemperature = &
thermalState(mappingConstitutive(2,ipc,ip,el))%state(1,mappingConstitutive(1,ipc,ip,el))
end function thermal_adiabatic_getTemperature
end function thermal_adiabatic_getLocalTemperature
!--------------------------------------------------------------------------------------------------
!> @brief returns temperature based on local damage model state layout
!--------------------------------------------------------------------------------------------------
subroutine thermal_adiabatic_putTemperature(ipc, ip, el, localTemperature)
subroutine thermal_adiabatic_putLocalTemperature(ipc, ip, el, localTemperature)
use material, only: &
mappingConstitutive, &
ThermalState
@ -380,12 +407,12 @@ subroutine thermal_adiabatic_putTemperature(ipc, ip, el, localTemperature)
thermalState(mappingConstitutive(2,ipc,ip,el))%state(1,mappingConstitutive(1,ipc,ip,el))= &
localTemperature
end subroutine thermal_adiabatic_putTemperature
end subroutine thermal_adiabatic_putLocalTemperature
!--------------------------------------------------------------------------------------------------
!> @brief returns heat generation rate
!--------------------------------------------------------------------------------------------------
function thermal_adiabatic_getHeatGeneration(Tstar_v, Lp)
pure function thermal_adiabatic_getHeatGeneration(Tstar_v, Lp)
use math, only: &
math_Mandel6to33

View File

@ -349,7 +349,7 @@ end subroutine vacancy_generation_microstructure
!--------------------------------------------------------------------------------------------------
!> @brief returns vacancy concentration based on state layout
!--------------------------------------------------------------------------------------------------
function vacancy_generation_getLocalConcentration(ipc, ip, el)
pure function vacancy_generation_getLocalConcentration(ipc, ip, el)
use material, only: &
mappingConstitutive, &
vacancyState
@ -390,7 +390,7 @@ end subroutine vacancy_generation_putLocalConcentration
!--------------------------------------------------------------------------------------------------
!> @brief returns vacancy concentration based on state layout
!--------------------------------------------------------------------------------------------------
function vacancy_generation_getConcentration(ipc, ip, el)
pure function vacancy_generation_getConcentration(ipc, ip, el)
use material, only: &
mappingHomogenization, &
material_phase, &
@ -421,7 +421,7 @@ end function vacancy_generation_getConcentration
!--------------------------------------------------------------------------------------------------
!> @brief returns generation vacancy diffusion tensor
!--------------------------------------------------------------------------------------------------
function vacancy_generation_getVacancyDiffusion33(ipc,ip,el)
pure function vacancy_generation_getVacancyDiffusion33(ipc,ip,el)
use lattice, only: &
lattice_VacancyDiffusion33
use material, only: &
@ -443,7 +443,7 @@ end function vacancy_generation_getVacancyDiffusion33
!--------------------------------------------------------------------------------------------------
!> @brief returns generation vacancy mobility tensor
!--------------------------------------------------------------------------------------------------
function vacancy_generation_getVacancyMobility33(temperature,ipc,ip,el)
pure function vacancy_generation_getVacancyMobility33(temperature,ipc,ip,el)
use math, only: &
math_I3
use material, only: &
@ -458,7 +458,7 @@ function vacancy_generation_getVacancyMobility33(temperature,ipc,ip,el)
el !< element number
real(pReal), dimension(3,3) :: &
vacancy_generation_getVacancyMobility33
real(pReal) :: &
real(pReal), intent(in) :: &
temperature
integer(pInt) :: &
phase, constituent, instance
@ -475,7 +475,7 @@ end function vacancy_generation_getVacancyMobility33
!--------------------------------------------------------------------------------------------------
!> @brief returns generation vacancy mobility tensor
!--------------------------------------------------------------------------------------------------
real(pReal) function vacancy_generation_getVacancyEnergy(ipc,ip,el)
pure real(pReal) function vacancy_generation_getVacancyEnergy(ipc,ip,el)
use material, only: &
mappingConstitutive, &
phase_vacancyInstance