DAMASK_EICMD/src/homogenization_thermal.f90

97 lines
3.2 KiB
Fortran
Raw Normal View History

2020-12-30 16:30:47 +05:30
!--------------------------------------------------------------------------------------------------
!> @author Martin Diehl, KU Leuven
!--------------------------------------------------------------------------------------------------
submodule(homogenization) homogenization_thermal
type :: tDataContainer
real(pReal), dimension(:), allocatable :: T, dot_T
end type tDataContainer
type(tDataContainer), dimension(:), allocatable :: current
type :: tParameters
character(len=pStringLen), allocatable, dimension(:) :: &
output
end type tParameters
type(tparameters), dimension(:), allocatable :: &
param
2020-12-30 16:30:47 +05:30
contains
!--------------------------------------------------------------------------------------------------
!> @brief Allocate variables and set parameters.
!--------------------------------------------------------------------------------------------------
module subroutine thermal_init()
class(tNode), pointer :: &
configHomogenizations, &
configHomogenization, &
configHomogenizationThermal
integer :: ho
2021-01-08 02:45:18 +05:30
2020-12-30 16:30:47 +05:30
print'(/,a)', ' <<<+- homogenization_thermal init -+>>>'
2021-01-08 02:45:18 +05:30
allocate(homogenization_T(discretization_nIPs*discretization_Nelems))
2021-01-17 17:50:17 +05:30
allocate(homogenization_dot_T(discretization_nIPs*discretization_Nelems))
2020-12-30 16:30:47 +05:30
configHomogenizations => config_material%get('homogenization')
allocate(param(configHomogenizations%length))
allocate(current(configHomogenizations%length))
do ho = 1, configHomogenizations%length
allocate(current(ho)%T(count(material_homogenizationAt2==ho)), source=thermal_initialT(ho))
allocate(current(ho)%dot_T(count(material_homogenizationAt2==ho)), source=0.0_pReal)
configHomogenization => configHomogenizations%get(ho)
associate(prm => param(ho))
if (configHomogenization%contains('thermal')) then
configHomogenizationThermal => configHomogenization%get('thermal')
#if defined (__GFORTRAN__)
prm%output = output_asStrings(configHomogenizationThermal)
#else
prm%output = configHomogenizationThermal%get_asStrings('output',defaultVal=emptyStringArray)
#endif
else
prm%output = emptyStringArray
endif
end associate
enddo
2020-12-30 16:30:47 +05:30
end subroutine thermal_init
!--------------------------------------------------------------------------------------------------
!> @brief Partition temperature onto the individual constituents.
2020-12-30 16:30:47 +05:30
!--------------------------------------------------------------------------------------------------
module subroutine thermal_partition(T,ce)
2020-12-30 16:30:47 +05:30
real(pReal), intent(in) :: T
integer, intent(in) :: ce
2020-12-30 16:30:47 +05:30
integer :: co
2020-12-30 16:30:47 +05:30
do co = 1, homogenization_Nconstituents(material_homogenizationAt2(ce))
call constitutive_thermal_setT(T,co,ce)
enddo
2020-12-30 16:30:47 +05:30
end subroutine thermal_partition
!--------------------------------------------------------------------------------------------------
!> @brief Homogenize temperature rates
!--------------------------------------------------------------------------------------------------
module subroutine thermal_homogenize(ip,el)
integer, intent(in) :: ip,el
call constitutive_thermal_getRate(homogenization_dot_T((el-1)*discretization_nIPs+ip), ip,el)
end subroutine thermal_homogenize
2020-12-30 16:30:47 +05:30
end submodule homogenization_thermal