multi physics output now working for all solvers
This commit is contained in:
parent
8b09d78ed1
commit
37a7364a3e
|
@ -242,164 +242,164 @@ subroutine constitutive_init(temperature_init)
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! write description file for constitutive phase output
|
! write description file for constitutive phase output
|
||||||
call IO_write_jobFile(FILEUNIT,'outputConstitutive')
|
if (worldrank == 0_pInt) then
|
||||||
do phase = 1_pInt,material_Nphase
|
call IO_write_jobFile(FILEUNIT,'outputConstitutive')
|
||||||
instance = phase_plasticityInstance(phase) ! which instance of a plasticity is present phase
|
do phase = 1_pInt,material_Nphase
|
||||||
knownPlasticity = .true. ! assume valid
|
instance = phase_plasticityInstance(phase) ! which instance of a plasticity is present phase
|
||||||
select case(phase_plasticity(phase)) ! split per constititution
|
knownPlasticity = .true. ! assume valid
|
||||||
case (PLASTICITY_NONE_ID)
|
select case(phase_plasticity(phase)) ! split per constititution
|
||||||
outputName = PLASTICITY_NONE_label
|
case (PLASTICITY_NONE_ID)
|
||||||
thisNoutput => null()
|
outputName = PLASTICITY_NONE_label
|
||||||
thisOutput => null() ! plastic_none_output
|
thisNoutput => null()
|
||||||
thisSize => null() ! plastic_none_sizePostResult
|
thisOutput => null() ! plastic_none_output
|
||||||
case (PLASTICITY_J2_ID)
|
thisSize => null() ! plastic_none_sizePostResult
|
||||||
outputName = PLASTICITY_J2_label
|
case (PLASTICITY_J2_ID)
|
||||||
thisNoutput => plastic_j2_Noutput
|
outputName = PLASTICITY_J2_label
|
||||||
thisOutput => plastic_j2_output
|
thisNoutput => plastic_j2_Noutput
|
||||||
thisSize => plastic_j2_sizePostResult
|
thisOutput => plastic_j2_output
|
||||||
case (PLASTICITY_PHENOPOWERLAW_ID)
|
thisSize => plastic_j2_sizePostResult
|
||||||
outputName = PLASTICITY_PHENOPOWERLAW_label
|
case (PLASTICITY_PHENOPOWERLAW_ID)
|
||||||
thisNoutput => plastic_phenopowerlaw_Noutput
|
outputName = PLASTICITY_PHENOPOWERLAW_label
|
||||||
thisOutput => plastic_phenopowerlaw_output
|
thisNoutput => plastic_phenopowerlaw_Noutput
|
||||||
thisSize => plastic_phenopowerlaw_sizePostResult
|
thisOutput => plastic_phenopowerlaw_output
|
||||||
case (PLASTICITY_DISLOTWIN_ID)
|
thisSize => plastic_phenopowerlaw_sizePostResult
|
||||||
outputName = PLASTICITY_DISLOTWIN_label
|
case (PLASTICITY_DISLOTWIN_ID)
|
||||||
thisNoutput => plastic_dislotwin_Noutput
|
outputName = PLASTICITY_DISLOTWIN_label
|
||||||
thisOutput => plastic_dislotwin_output
|
thisNoutput => plastic_dislotwin_Noutput
|
||||||
thisSize => plastic_dislotwin_sizePostResult
|
thisOutput => plastic_dislotwin_output
|
||||||
case (PLASTICITY_DISLOKMC_ID)
|
thisSize => plastic_dislotwin_sizePostResult
|
||||||
outputName = PLASTICITY_DISLOKMC_label
|
case (PLASTICITY_DISLOKMC_ID)
|
||||||
thisNoutput => plastic_dislokmc_Noutput
|
outputName = PLASTICITY_DISLOKMC_label
|
||||||
thisOutput => plastic_dislokmc_output
|
thisNoutput => plastic_dislokmc_Noutput
|
||||||
thisSize => plastic_dislokmc_sizePostResult
|
thisOutput => plastic_dislokmc_output
|
||||||
case (PLASTICITY_DISLOUCLA_ID)
|
thisSize => plastic_dislokmc_sizePostResult
|
||||||
outputName = PLASTICITY_DISLOUCLA_label
|
case (PLASTICITY_DISLOUCLA_ID)
|
||||||
thisNoutput => plastic_disloucla_Noutput
|
outputName = PLASTICITY_DISLOUCLA_label
|
||||||
thisOutput => plastic_disloucla_output
|
thisNoutput => plastic_disloucla_Noutput
|
||||||
thisSize => plastic_disloucla_sizePostResult
|
thisOutput => plastic_disloucla_output
|
||||||
case (PLASTICITY_TITANMOD_ID)
|
thisSize => plastic_disloucla_sizePostResult
|
||||||
outputName = PLASTICITY_TITANMOD_label
|
case (PLASTICITY_TITANMOD_ID)
|
||||||
thisNoutput => plastic_titanmod_Noutput
|
outputName = PLASTICITY_TITANMOD_label
|
||||||
thisOutput => plastic_titanmod_output
|
thisNoutput => plastic_titanmod_Noutput
|
||||||
thisSize => plastic_titanmod_sizePostResult
|
thisOutput => plastic_titanmod_output
|
||||||
case (PLASTICITY_NONLOCAL_ID)
|
thisSize => plastic_titanmod_sizePostResult
|
||||||
outputName = PLASTICITY_NONLOCAL_label
|
case (PLASTICITY_NONLOCAL_ID)
|
||||||
thisNoutput => plastic_nonlocal_Noutput
|
outputName = PLASTICITY_NONLOCAL_label
|
||||||
thisOutput => plastic_nonlocal_output
|
thisNoutput => plastic_nonlocal_Noutput
|
||||||
thisSize => plastic_nonlocal_sizePostResult
|
thisOutput => plastic_nonlocal_output
|
||||||
case default
|
thisSize => plastic_nonlocal_sizePostResult
|
||||||
knownPlasticity = .false.
|
case default
|
||||||
end select
|
knownPlasticity = .false.
|
||||||
write(FILEUNIT,'(/,a,/)') '['//trim(phase_name(phase))//']'
|
end select
|
||||||
if (knownPlasticity) then
|
write(FILEUNIT,'(/,a,/)') '['//trim(phase_name(phase))//']'
|
||||||
write(FILEUNIT,'(a)') '(plasticity)'//char(9)//trim(outputName)
|
if (knownPlasticity) then
|
||||||
if (phase_plasticity(phase) /= PLASTICITY_NONE_ID) then
|
write(FILEUNIT,'(a)') '(plasticity)'//char(9)//trim(outputName)
|
||||||
do e = 1_pInt,thisNoutput(instance)
|
if (phase_plasticity(phase) /= PLASTICITY_NONE_ID) then
|
||||||
write(FILEUNIT,'(a,i4)') trim(thisOutput(e,instance))//char(9),thisSize(e,instance)
|
do e = 1_pInt,thisNoutput(instance)
|
||||||
enddo
|
write(FILEUNIT,'(a,i4)') trim(thisOutput(e,instance))//char(9),thisSize(e,instance)
|
||||||
|
enddo
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
endif
|
instance = phase_damageInstance(phase) ! which instance of a plasticity is present phase
|
||||||
#ifdef multiphysicsOut
|
knownDamage = .true.
|
||||||
instance = phase_damageInstance(phase) ! which instance of a plasticity is present phase
|
select case(phase_damage(phase)) ! split per constititution
|
||||||
knownDamage = .true.
|
case (LOCAL_DAMAGE_none_ID)
|
||||||
select case(phase_damage(phase)) ! split per constititution
|
outputName = LOCAL_DAMAGE_NONE_label
|
||||||
case (LOCAL_DAMAGE_none_ID)
|
thisNoutput => null()
|
||||||
outputName = LOCAL_DAMAGE_NONE_label
|
thisOutput => null()
|
||||||
thisNoutput => null()
|
thisSize => null()
|
||||||
thisOutput => null()
|
case (LOCAL_DAMAGE_isoBrittle_ID)
|
||||||
thisSize => null()
|
outputName = LOCAL_DAMAGE_isoBrittle_LABEL
|
||||||
case (LOCAL_DAMAGE_isoBrittle_ID)
|
thisNoutput => damage_isoBrittle_Noutput
|
||||||
outputName = LOCAL_DAMAGE_isoBrittle_LABEL
|
thisOutput => damage_isoBrittle_output
|
||||||
thisNoutput => damage_isoBrittle_Noutput
|
thisSize => damage_isoBrittle_sizePostResult
|
||||||
thisOutput => damage_isoBrittle_output
|
case (LOCAL_DAMAGE_isoDuctile_ID)
|
||||||
thisSize => damage_isoBrittle_sizePostResult
|
outputName = LOCAL_DAMAGE_isoDuctile_LABEL
|
||||||
case (LOCAL_DAMAGE_isoDuctile_ID)
|
thisNoutput => damage_isoDuctile_Noutput
|
||||||
outputName = LOCAL_DAMAGE_isoDuctile_LABEL
|
thisOutput => damage_isoDuctile_output
|
||||||
thisNoutput => damage_isoDuctile_Noutput
|
thisSize => damage_isoDuctile_sizePostResult
|
||||||
thisOutput => damage_isoDuctile_output
|
case (LOCAL_DAMAGE_anisoBrittle_ID)
|
||||||
thisSize => damage_isoDuctile_sizePostResult
|
outputName = LOCAL_DAMAGE_anisoBrittle_label
|
||||||
case (LOCAL_DAMAGE_anisoBrittle_ID)
|
thisNoutput => damage_anisoBrittle_Noutput
|
||||||
outputName = LOCAL_DAMAGE_anisoBrittle_label
|
thisOutput => damage_anisoBrittle_output
|
||||||
thisNoutput => damage_anisoBrittle_Noutput
|
thisSize => damage_anisoBrittle_sizePostResult
|
||||||
thisOutput => damage_anisoBrittle_output
|
case (LOCAL_DAMAGE_anisoDuctile_ID)
|
||||||
thisSize => damage_anisoBrittle_sizePostResult
|
outputName = LOCAL_DAMAGE_anisoDuctile_LABEL
|
||||||
case (LOCAL_DAMAGE_anisoDuctile_ID)
|
thisNoutput => damage_anisoDuctile_Noutput
|
||||||
outputName = LOCAL_DAMAGE_anisoDuctile_LABEL
|
thisOutput => damage_anisoDuctile_output
|
||||||
thisNoutput => damage_anisoDuctile_Noutput
|
thisSize => damage_anisoDuctile_sizePostResult
|
||||||
thisOutput => damage_anisoDuctile_output
|
case (LOCAL_DAMAGE_gurson_ID)
|
||||||
thisSize => damage_anisoDuctile_sizePostResult
|
outputName = LOCAL_DAMAGE_gurson_label
|
||||||
case (LOCAL_DAMAGE_gurson_ID)
|
thisNoutput => damage_gurson_Noutput
|
||||||
outputName = LOCAL_DAMAGE_gurson_label
|
thisOutput => damage_gurson_output
|
||||||
thisNoutput => damage_gurson_Noutput
|
thisSize => damage_gurson_sizePostResult
|
||||||
thisOutput => damage_gurson_output
|
case (LOCAL_DAMAGE_phaseField_ID)
|
||||||
thisSize => damage_gurson_sizePostResult
|
outputName = LOCAL_DAMAGE_phaseField_label
|
||||||
case (LOCAL_DAMAGE_phaseField_ID)
|
thisNoutput => damage_phaseField_Noutput
|
||||||
outputName = LOCAL_DAMAGE_phaseField_label
|
thisOutput => damage_phaseField_output
|
||||||
thisNoutput => damage_phaseField_Noutput
|
thisSize => damage_phaseField_sizePostResult
|
||||||
thisOutput => damage_phaseField_output
|
case default
|
||||||
thisSize => damage_phaseField_sizePostResult
|
knownDamage = .false.
|
||||||
case default
|
end select
|
||||||
knownDamage = .false.
|
if (knownDamage) then
|
||||||
end select
|
write(FILEUNIT,'(a)') '(damage)'//char(9)//trim(outputName)
|
||||||
if (knownDamage) then
|
if (phase_damage(phase) /= LOCAL_DAMAGE_none_ID) then
|
||||||
write(FILEUNIT,'(a)') '(damage)'//char(9)//trim(outputName)
|
do e = 1_pInt,thisNoutput(instance)
|
||||||
if (phase_damage(phase) /= LOCAL_DAMAGE_none_ID) then
|
write(FILEUNIT,'(a,i4)') trim(thisOutput(e,instance))//char(9),thisSize(e,instance)
|
||||||
do e = 1_pInt,thisNoutput(instance)
|
enddo
|
||||||
write(FILEUNIT,'(a,i4)') trim(thisOutput(e,instance))//char(9),thisSize(e,instance)
|
endif
|
||||||
enddo
|
|
||||||
endif
|
endif
|
||||||
endif
|
instance = phase_thermalInstance(phase) ! which instance is present phase
|
||||||
instance = phase_thermalInstance(phase) ! which instance is present phase
|
knownThermal = .true.
|
||||||
knownThermal = .true.
|
select case(phase_thermal(phase)) ! split per constititution
|
||||||
select case(phase_thermal(phase)) ! split per constititution
|
case (LOCAL_THERMAL_isothermal_ID)
|
||||||
case (LOCAL_THERMAL_isothermal_ID)
|
outputName = LOCAL_THERMAL_ISOTHERMAL_label
|
||||||
outputName = LOCAL_THERMAL_ISOTHERMAL_label
|
thisNoutput => null()
|
||||||
thisNoutput => null()
|
thisOutput => null()
|
||||||
thisOutput => null()
|
thisSize => null()
|
||||||
thisSize => null()
|
case (LOCAL_THERMAL_adiabatic_ID)
|
||||||
case (LOCAL_THERMAL_adiabatic_ID)
|
outputName = LOCAL_THERMAL_ADIABATIC_label
|
||||||
outputName = LOCAL_THERMAL_ADIABATIC_label
|
thisNoutput => thermal_adiabatic_Noutput
|
||||||
thisNoutput => thermal_adiabatic_Noutput
|
thisOutput => thermal_adiabatic_output
|
||||||
thisOutput => thermal_adiabatic_output
|
thisSize => thermal_adiabatic_sizePostResult
|
||||||
thisSize => thermal_adiabatic_sizePostResult
|
case default
|
||||||
case default
|
knownThermal = .false.
|
||||||
knownThermal = .false.
|
end select
|
||||||
end select
|
if (knownThermal) then
|
||||||
if (knownThermal) then
|
write(FILEUNIT,'(a)') '(thermal)'//char(9)//trim(outputName)
|
||||||
write(FILEUNIT,'(a)') '(thermal)'//char(9)//trim(outputName)
|
if (phase_thermal(phase) /= LOCAL_THERMAL_isothermal_ID) then
|
||||||
if (phase_thermal(phase) /= LOCAL_THERMAL_isothermal_ID) then
|
do e = 1_pInt,thisNoutput(instance)
|
||||||
do e = 1_pInt,thisNoutput(instance)
|
write(FILEUNIT,'(a,i4)') trim(thisOutput(e,instance))//char(9),thisSize(e,instance)
|
||||||
write(FILEUNIT,'(a,i4)') trim(thisOutput(e,instance))//char(9),thisSize(e,instance)
|
enddo
|
||||||
enddo
|
endif
|
||||||
endif
|
endif
|
||||||
endif
|
instance = phase_vacancyInstance(phase) ! which instance is present phase
|
||||||
instance = phase_vacancyInstance(phase) ! which instance is present phase
|
knownVacancy = .true.
|
||||||
knownVacancy = .true.
|
select case(phase_vacancy(phase)) ! split per constititution
|
||||||
select case(phase_vacancy(phase)) ! split per constititution
|
case (LOCAL_VACANCY_constant_ID)
|
||||||
case (LOCAL_VACANCY_constant_ID)
|
outputName = LOCAL_VACANCY_constant_label
|
||||||
outputName = LOCAL_VACANCY_constant_label
|
thisNoutput => null()
|
||||||
thisNoutput => null()
|
thisOutput => null()
|
||||||
thisOutput => null()
|
thisSize => null()
|
||||||
thisSize => null()
|
case (LOCAL_VACANCY_generation_ID)
|
||||||
case (LOCAL_VACANCY_generation_ID)
|
outputName = LOCAL_VACANCY_generation_label
|
||||||
outputName = LOCAL_VACANCY_generation_label
|
thisNoutput => vacancy_generation_Noutput
|
||||||
thisNoutput => vacancy_generation_Noutput
|
thisOutput => vacancy_generation_output
|
||||||
thisOutput => vacancy_generation_output
|
thisSize => vacancy_generation_sizePostResult
|
||||||
thisSize => vacancy_generation_sizePostResult
|
case default
|
||||||
case default
|
knownVacancy = .false.
|
||||||
knownVacancy = .false.
|
end select
|
||||||
end select
|
if (knownVacancy) then
|
||||||
if (knownVacancy) then
|
write(FILEUNIT,'(a)') '(vacancy)'//char(9)//trim(outputName)
|
||||||
write(FILEUNIT,'(a)') '(vacancy)'//char(9)//trim(outputName)
|
if (phase_vacancy(phase) /= LOCAL_VACANCY_constant_ID) then
|
||||||
if (phase_vacancy(phase) /= LOCAL_VACANCY_constant_ID) then
|
do e = 1_pInt,thisNoutput(instance)
|
||||||
do e = 1_pInt,thisNoutput(instance)
|
write(FILEUNIT,'(a,i4)') trim(thisOutput(e,instance))//char(9),thisSize(e,instance)
|
||||||
write(FILEUNIT,'(a,i4)') trim(thisOutput(e,instance))//char(9),thisSize(e,instance)
|
enddo
|
||||||
enddo
|
endif
|
||||||
endif
|
endif
|
||||||
endif
|
enddo
|
||||||
#endif
|
close(FILEUNIT)
|
||||||
enddo
|
endif
|
||||||
close(FILEUNIT)
|
|
||||||
|
|
||||||
constitutive_maxSizeDotState = 0_pInt
|
constitutive_maxSizeDotState = 0_pInt
|
||||||
constitutive_maxSizePostResults = 0_pInt
|
constitutive_maxSizePostResults = 0_pInt
|
||||||
|
@ -1739,7 +1739,6 @@ function constitutive_postResults(Tstar_v, FeArray, ipc, ip, el)
|
||||||
plastic_titanmod_postResults
|
plastic_titanmod_postResults
|
||||||
use plastic_nonlocal, only: &
|
use plastic_nonlocal, only: &
|
||||||
plastic_nonlocal_postResults
|
plastic_nonlocal_postResults
|
||||||
#ifdef multiphysicsOut
|
|
||||||
use damage_isoBrittle, only: &
|
use damage_isoBrittle, only: &
|
||||||
damage_isoBrittle_postResults
|
damage_isoBrittle_postResults
|
||||||
use damage_isoDuctile, only: &
|
use damage_isoDuctile, only: &
|
||||||
|
@ -1756,23 +1755,17 @@ function constitutive_postResults(Tstar_v, FeArray, ipc, ip, el)
|
||||||
thermal_adiabatic_postResults
|
thermal_adiabatic_postResults
|
||||||
use vacancy_generation, only: &
|
use vacancy_generation, only: &
|
||||||
vacancy_generation_postResults
|
vacancy_generation_postResults
|
||||||
#endif
|
|
||||||
|
|
||||||
implicit none
|
implicit none
|
||||||
integer(pInt), intent(in) :: &
|
integer(pInt), intent(in) :: &
|
||||||
ipc, & !< grain number
|
ipc, & !< grain number
|
||||||
ip, & !< integration point number
|
ip, & !< integration point number
|
||||||
el !< element number
|
el !< element number
|
||||||
#ifdef multiphysicsOut
|
|
||||||
real(pReal), dimension(plasticState(material_phase(ipc,ip,el))%sizePostResults + &
|
real(pReal), dimension(plasticState(material_phase(ipc,ip,el))%sizePostResults + &
|
||||||
damageState( material_phase(ipc,ip,el))%sizePostResults + &
|
damageState( material_phase(ipc,ip,el))%sizePostResults + &
|
||||||
thermalState(material_phase(ipc,ip,el))%sizePostResults + &
|
thermalState(material_phase(ipc,ip,el))%sizePostResults + &
|
||||||
vacancyState(material_phase(ipc,ip,el))%sizePostResults) :: &
|
vacancyState(material_phase(ipc,ip,el))%sizePostResults) :: &
|
||||||
constitutive_postResults
|
constitutive_postResults
|
||||||
#else
|
|
||||||
real(pReal), dimension(plasticState(material_phase(ipc,ip,el))%sizePostResults) :: &
|
|
||||||
constitutive_postResults
|
|
||||||
#endif
|
|
||||||
real(pReal), intent(in), dimension(3,3,homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems) :: &
|
real(pReal), intent(in), dimension(3,3,homogenization_maxNgrains,mesh_maxNips,mesh_NcpElems) :: &
|
||||||
FeArray !< elastic deformation gradient
|
FeArray !< elastic deformation gradient
|
||||||
real(pReal), intent(in), dimension(6) :: &
|
real(pReal), intent(in), dimension(6) :: &
|
||||||
|
@ -1806,7 +1799,6 @@ function constitutive_postResults(Tstar_v, FeArray, ipc, ip, el)
|
||||||
plastic_nonlocal_postResults (Tstar_v,FeArray,ip,el)
|
plastic_nonlocal_postResults (Tstar_v,FeArray,ip,el)
|
||||||
end select
|
end select
|
||||||
|
|
||||||
#ifdef multiphysicsOut
|
|
||||||
startPos = endPos + 1_pInt
|
startPos = endPos + 1_pInt
|
||||||
endPos = endPos + damageState(material_phase(ipc,ip,el))%sizePostResults
|
endPos = endPos + damageState(material_phase(ipc,ip,el))%sizePostResults
|
||||||
select case (phase_damage(material_phase(ipc,ip,el)))
|
select case (phase_damage(material_phase(ipc,ip,el)))
|
||||||
|
@ -1837,7 +1829,6 @@ function constitutive_postResults(Tstar_v, FeArray, ipc, ip, el)
|
||||||
case (LOCAL_VACANCY_generation_ID)
|
case (LOCAL_VACANCY_generation_ID)
|
||||||
constitutive_postResults(startPos:endPos) = vacancy_generation_postResults(ipc, ip, el)
|
constitutive_postResults(startPos:endPos) = vacancy_generation_postResults(ipc, ip, el)
|
||||||
end select
|
end select
|
||||||
#endif
|
|
||||||
|
|
||||||
end function constitutive_postResults
|
end function constitutive_postResults
|
||||||
|
|
||||||
|
|
|
@ -395,16 +395,18 @@ subroutine crystallite_init
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! write description file for crystallite output
|
! write description file for crystallite output
|
||||||
call IO_write_jobFile(FILEUNIT,'outputCrystallite')
|
if (worldrank == 0_pInt) then
|
||||||
|
call IO_write_jobFile(FILEUNIT,'outputCrystallite')
|
||||||
|
|
||||||
do p = 1_pInt,material_Ncrystallite
|
do p = 1_pInt,material_Ncrystallite
|
||||||
write(FILEUNIT,'(/,a,/)') '['//trim(crystallite_name(p))//']'
|
write(FILEUNIT,'(/,a,/)') '['//trim(crystallite_name(p))//']'
|
||||||
do e = 1_pInt,crystallite_Noutput(p)
|
do e = 1_pInt,crystallite_Noutput(p)
|
||||||
write(FILEUNIT,'(a,i4)') trim(crystallite_output(e,p))//char(9),crystallite_sizePostResult(e,p)
|
write(FILEUNIT,'(a,i4)') trim(crystallite_output(e,p))//char(9),crystallite_sizePostResult(e,p)
|
||||||
|
enddo
|
||||||
enddo
|
enddo
|
||||||
enddo
|
|
||||||
|
|
||||||
close(FILEUNIT)
|
close(FILEUNIT)
|
||||||
|
endif
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! initialize
|
! initialize
|
||||||
|
@ -4229,18 +4231,12 @@ function crystallite_postResults(ipc, ip, el)
|
||||||
ip, & !< integration point index
|
ip, & !< integration point index
|
||||||
ipc !< grain index
|
ipc !< grain index
|
||||||
|
|
||||||
#ifdef multiphysicsOut
|
|
||||||
real(pReal), dimension(1+crystallite_sizePostResults(microstructure_crystallite(mesh_element(4,el))) + &
|
real(pReal), dimension(1+crystallite_sizePostResults(microstructure_crystallite(mesh_element(4,el))) + &
|
||||||
1+plasticState(material_phase(ipc,ip,el))%sizePostResults + &
|
1+plasticState(material_phase(ipc,ip,el))%sizePostResults + &
|
||||||
damageState( material_phase(ipc,ip,el))%sizePostResults + &
|
damageState( material_phase(ipc,ip,el))%sizePostResults + &
|
||||||
thermalState(material_phase(ipc,ip,el))%sizePostResults + &
|
thermalState(material_phase(ipc,ip,el))%sizePostResults + &
|
||||||
vacancyState(material_phase(ipc,ip,el))%sizePostResults) :: &
|
vacancyState(material_phase(ipc,ip,el))%sizePostResults) :: &
|
||||||
crystallite_postResults
|
crystallite_postResults
|
||||||
#else
|
|
||||||
real(pReal), dimension(1+crystallite_sizePostResults(microstructure_crystallite(mesh_element(4,el)))+ &
|
|
||||||
1+plasticState(material_phase(ipc,ip,el))%sizePostResults) :: &
|
|
||||||
crystallite_postResults
|
|
||||||
#endif
|
|
||||||
real(pReal), dimension(3,3) :: &
|
real(pReal), dimension(3,3) :: &
|
||||||
Ee
|
Ee
|
||||||
real(pReal), dimension(4) :: &
|
real(pReal), dimension(4) :: &
|
||||||
|
|
|
@ -228,47 +228,46 @@ subroutine homogenization_init()
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! write description file for homogenization output
|
! write description file for homogenization output
|
||||||
call IO_write_jobFile(FILEUNIT,'outputHomogenization')
|
if (worldrank == 0_pInt) then
|
||||||
do p = 1,material_Nhomogenization
|
call IO_write_jobFile(FILEUNIT,'outputHomogenization')
|
||||||
i = homogenization_typeInstance(p) ! which instance of this homogenization type
|
do p = 1,material_Nhomogenization
|
||||||
knownHomogenization = .true. ! assume valid
|
i = homogenization_typeInstance(p) ! which instance of this homogenization type
|
||||||
select case(homogenization_type(p)) ! split per homogenization type
|
knownHomogenization = .true. ! assume valid
|
||||||
case (HOMOGENIZATION_NONE_ID)
|
select case(homogenization_type(p)) ! split per homogenization type
|
||||||
outputName = HOMOGENIZATION_NONE_label
|
case (HOMOGENIZATION_NONE_ID)
|
||||||
thisNoutput => null()
|
outputName = HOMOGENIZATION_NONE_label
|
||||||
thisOutput => null()
|
thisNoutput => null()
|
||||||
thisSize => null()
|
thisOutput => null()
|
||||||
case (HOMOGENIZATION_ISOSTRAIN_ID)
|
thisSize => null()
|
||||||
outputName = HOMOGENIZATION_ISOSTRAIN_label
|
case (HOMOGENIZATION_ISOSTRAIN_ID)
|
||||||
thisNoutput => homogenization_isostrain_Noutput
|
outputName = HOMOGENIZATION_ISOSTRAIN_label
|
||||||
thisOutput => homogenization_isostrain_output
|
thisNoutput => homogenization_isostrain_Noutput
|
||||||
thisSize => homogenization_isostrain_sizePostResult
|
thisOutput => homogenization_isostrain_output
|
||||||
case (HOMOGENIZATION_RGC_ID)
|
thisSize => homogenization_isostrain_sizePostResult
|
||||||
outputName = HOMOGENIZATION_RGC_label
|
case (HOMOGENIZATION_RGC_ID)
|
||||||
thisNoutput => homogenization_RGC_Noutput
|
outputName = HOMOGENIZATION_RGC_label
|
||||||
thisOutput => homogenization_RGC_output
|
thisNoutput => homogenization_RGC_Noutput
|
||||||
thisSize => homogenization_RGC_sizePostResult
|
thisOutput => homogenization_RGC_output
|
||||||
case default
|
thisSize => homogenization_RGC_sizePostResult
|
||||||
knownHomogenization = .false.
|
case default
|
||||||
end select
|
knownHomogenization = .false.
|
||||||
write(FILEUNIT,'(/,a,/)') '['//trim(homogenization_name(p))//']'
|
end select
|
||||||
if (knownHomogenization) then
|
write(FILEUNIT,'(/,a,/)') '['//trim(homogenization_name(p))//']'
|
||||||
write(FILEUNIT,'(a)') '(type)'//char(9)//trim(outputName)
|
if (knownHomogenization) then
|
||||||
write(FILEUNIT,'(a,i4)') '(ngrains)'//char(9),homogenization_Ngrains(p)
|
write(FILEUNIT,'(a)') '(type)'//char(9)//trim(outputName)
|
||||||
if (homogenization_type(p) /= HOMOGENIZATION_NONE_ID) then
|
write(FILEUNIT,'(a,i4)') '(ngrains)'//char(9),homogenization_Ngrains(p)
|
||||||
do e = 1,thisNoutput(i)
|
if (homogenization_type(p) /= HOMOGENIZATION_NONE_ID) then
|
||||||
write(FILEUNIT,'(a,i4)') trim(thisOutput(e,i))//char(9),thisSize(e,i)
|
do e = 1,thisNoutput(i)
|
||||||
enddo
|
write(FILEUNIT,'(a,i4)') trim(thisOutput(e,i))//char(9),thisSize(e,i)
|
||||||
|
enddo
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
endif
|
do e = 1_pInt,field_Noutput(p)
|
||||||
#ifdef multiphysicsOut
|
write(FILEUNIT,'(a,i4)') trim(field_output(e,p))//char(9),field_sizePostResult(e,p)
|
||||||
write(FILEUNIT,'(a)') '(field)'
|
enddo
|
||||||
do e = 1_pInt,field_Noutput(p)
|
|
||||||
write(FILEUNIT,'(a,i4)') trim(field_output(e,p))//char(9),field_sizePostResult(e,p)
|
|
||||||
enddo
|
enddo
|
||||||
#endif
|
close(FILEUNIT)
|
||||||
enddo
|
endif
|
||||||
close(FILEUNIT)
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! allocate and initialize global variables
|
! allocate and initialize global variables
|
||||||
|
@ -310,16 +309,12 @@ subroutine homogenization_init()
|
||||||
enddo
|
enddo
|
||||||
materialpoint_sizeResults = 1 & ! grain count
|
materialpoint_sizeResults = 1 & ! grain count
|
||||||
+ 1 + homogenization_maxSizePostResults & ! homogSize & homogResult
|
+ 1 + homogenization_maxSizePostResults & ! homogSize & homogResult
|
||||||
#ifdef multiphysicsOut
|
|
||||||
+ field_maxSizePostResults & ! field size & field result
|
+ field_maxSizePostResults & ! field size & field result
|
||||||
#endif
|
|
||||||
+ homogenization_maxNgrains * (1 + crystallite_maxSizePostResults & ! crystallite size & crystallite results
|
+ homogenization_maxNgrains * (1 + crystallite_maxSizePostResults & ! crystallite size & crystallite results
|
||||||
#ifdef multiphysicsOut
|
+ 1 + constitutive_maxSizePostResults & ! constitutive size & constitutive results
|
||||||
+ constitutive_damage_maxSizePostResults &
|
+ constitutive_damage_maxSizePostResults &
|
||||||
+ constitutive_thermal_maxSizePostResults &
|
+ constitutive_thermal_maxSizePostResults &
|
||||||
+ constitutive_vacancy_maxSizePostResults &
|
+ constitutive_vacancy_maxSizePostResults)
|
||||||
#endif
|
|
||||||
+ 1 + constitutive_maxSizePostResults) ! constitutive size & constitutive results
|
|
||||||
allocate(materialpoint_results(materialpoint_sizeResults,mesh_maxNips,mesh_NcpElems))
|
allocate(materialpoint_results(materialpoint_sizeResults,mesh_maxNips,mesh_NcpElems))
|
||||||
|
|
||||||
mainProcess: if (worldrank == 0) then
|
mainProcess: if (worldrank == 0) then
|
||||||
|
@ -751,28 +746,21 @@ subroutine materialpoint_postResults
|
||||||
thePos = thePos + theSize
|
thePos = thePos + theSize
|
||||||
endif
|
endif
|
||||||
|
|
||||||
#ifdef multiphysicsOut
|
|
||||||
theSize = field_sizePostResults(mappingHomogenization(2,i,e))
|
theSize = field_sizePostResults(mappingHomogenization(2,i,e))
|
||||||
if (theSize > 0_pInt) then ! any homogenization results to mention?
|
if (theSize > 0_pInt) then ! any homogenization results to mention?
|
||||||
materialpoint_results(thePos+1:thePos+theSize,i,e) = field_postResults(i,e) ! tell field results
|
materialpoint_results(thePos+1:thePos+theSize,i,e) = field_postResults(i,e) ! tell field results
|
||||||
thePos = thePos + theSize
|
thePos = thePos + theSize
|
||||||
endif
|
endif
|
||||||
#endif
|
|
||||||
|
|
||||||
materialpoint_results(thePos+1,i,e) = real(myNgrains,pReal) ! tell number of grains at materialpoint
|
materialpoint_results(thePos+1,i,e) = real(myNgrains,pReal) ! tell number of grains at materialpoint
|
||||||
thePos = thePos + 1_pInt
|
thePos = thePos + 1_pInt
|
||||||
|
|
||||||
grainLooping :do g = 1,myNgrains
|
grainLooping :do g = 1,myNgrains
|
||||||
#ifdef multiphysicsOut
|
|
||||||
theSize = 1 + crystallite_sizePostResults(myCrystallite) + &
|
theSize = 1 + crystallite_sizePostResults(myCrystallite) + &
|
||||||
1 + plasticState(material_phase(g,i,e))%sizePostResults + & !ToDo
|
1 + plasticState(material_phase(g,i,e))%sizePostResults + & !ToDo
|
||||||
damageState(material_phase(g,i,e))%sizePostResults + &
|
damageState(material_phase(g,i,e))%sizePostResults + &
|
||||||
thermalState(material_phase(g,i,e))%sizePostResults + &
|
thermalState(material_phase(g,i,e))%sizePostResults + &
|
||||||
vacancyState(material_phase(g,i,e))%sizePostResults
|
vacancyState(material_phase(g,i,e))%sizePostResults
|
||||||
#else
|
|
||||||
theSize = (1 + crystallite_sizePostResults(myCrystallite)) + &
|
|
||||||
(1 + plasticState(material_phase(g,i,e))%sizePostResults)
|
|
||||||
#endif
|
|
||||||
materialpoint_results(thePos+1:thePos+theSize,i,e) = crystallite_postResults(g,i,e) ! tell crystallite results
|
materialpoint_results(thePos+1:thePos+theSize,i,e) = crystallite_postResults(g,i,e) ! tell crystallite results
|
||||||
thePos = thePos + theSize
|
thePos = thePos + theSize
|
||||||
enddo grainLooping
|
enddo grainLooping
|
||||||
|
|
Loading…
Reference in New Issue