From 0f2013e78a06c36ce7d3cf1504dcae85430d03fc Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Sun, 24 Mar 2019 11:01:27 +0100 Subject: [PATCH] modernized - no pInt - consistent 2-blank indentation - use of parameter structure --- src/source_thermal_dissipation.f90 | 194 ++++++++++++++--------------- 1 file changed, 94 insertions(+), 100 deletions(-) diff --git a/src/source_thermal_dissipation.f90 b/src/source_thermal_dissipation.f90 index bdee3f4f3..23d6e8b58 100644 --- a/src/source_thermal_dissipation.f90 +++ b/src/source_thermal_dissipation.f90 @@ -5,38 +5,33 @@ !> @details to be done !-------------------------------------------------------------------------------------------------- module source_thermal_dissipation - use prec, only: & - pReal, & - pInt - - implicit none - private - integer(pInt), dimension(:), allocatable, public, protected :: & - source_thermal_dissipation_offset, & !< which source is my current thermal dissipation mechanism? - source_thermal_dissipation_instance !< instance of thermal dissipation source mechanism - - integer(pInt), dimension(:,:), allocatable, target, public :: & - source_thermal_dissipation_sizePostResult !< size of each post result output - - character(len=64), dimension(:,:), allocatable, target, public :: & - source_thermal_dissipation_output !< name of each post result output - - real(pReal), dimension(:), allocatable, private :: & - source_thermal_dissipation_coldworkCoeff - - - type, private :: tParameters !< container type for internal constitutive parameters - real(pReal) :: & - coldworkCoeff - end type tParameters - - type(tParameters), dimension(:), allocatable, private :: param !< containers of constitutive parameters (len Ninstance) - - - public :: & - source_thermal_dissipation_init, & - source_thermal_dissipation_getRateAndItsTangent - + use prec, only: & + pReal + + implicit none + private + integer, dimension(:), allocatable, public, protected :: & + source_thermal_dissipation_offset, & !< which source is my current thermal dissipation mechanism? + source_thermal_dissipation_instance !< instance of thermal dissipation source mechanism + + integer, dimension(:,:), allocatable, target, public :: & + source_thermal_dissipation_sizePostResult !< size of each post result output + + character(len=64), dimension(:,:), allocatable, target, public :: & + source_thermal_dissipation_output !< name of each post result output + + type, private :: tParameters !< container type for internal constitutive parameters + real(pReal) :: & + kappa + end type tParameters + + type(tParameters), dimension(:), allocatable, private :: param !< containers of constitutive parameters (len Ninstance) + + + public :: & + source_thermal_dissipation_init, & + source_thermal_dissipation_getRateAndItsTangent + contains @@ -45,61 +40,60 @@ contains !> @details reads in material parameters, allocates arrays, and does sanity checks !-------------------------------------------------------------------------------------------------- subroutine source_thermal_dissipation_init - use debug, only: & - debug_level,& - debug_constitutive,& - debug_levelBasic - use material, only: & - material_allocateSourceState, & - phase_source, & - phase_Nsources, & - phase_Noutput, & - SOURCE_thermal_dissipation_label, & - SOURCE_thermal_dissipation_ID, & - material_phase, & - sourceState - use config, only: & - config_phase, & - material_Nphase - - implicit none - integer(pInt) :: Ninstance,instance,source,sourceOffset - integer(pInt) :: NofMyPhase,p - - write(6,'(/,a)') ' <<<+- source_'//SOURCE_thermal_dissipation_label//' init -+>>>' - + use debug, only: & + debug_level,& + debug_constitutive,& + debug_levelBasic + use material, only: & + material_allocateSourceState, & + phase_source, & + phase_Nsources, & + phase_Noutput, & + SOURCE_thermal_dissipation_label, & + SOURCE_thermal_dissipation_ID, & + material_phase + use config, only: & + config_phase, & + material_Nphase - Ninstance = int(count(phase_source == SOURCE_thermal_dissipation_ID),pInt) - if (Ninstance == 0_pInt) return - if (iand(debug_level(debug_constitutive),debug_levelBasic) /= 0_pInt) & - write(6,'(a16,1x,i5,/)') '# instances:',Ninstance + implicit none + integer :: Ninstance,instance,source,sourceOffset + integer :: NofMyPhase,p - allocate(source_thermal_dissipation_offset(material_Nphase), source=0_pInt) - allocate(source_thermal_dissipation_instance(material_Nphase), source=0_pInt) - do p = 1, material_Nphase - source_thermal_dissipation_instance(p) = count(phase_source(:,1:p) == SOURCE_thermal_dissipation_ID) - do source = 1, phase_Nsources(p) - if (phase_source(source,p) == SOURCE_thermal_dissipation_ID) & - source_thermal_dissipation_offset(p) = source - enddo - enddo - - allocate(source_thermal_dissipation_sizePostResult(maxval(phase_Noutput),Ninstance),source=0_pInt) - allocate(source_thermal_dissipation_output (maxval(phase_Noutput),Ninstance)) - source_thermal_dissipation_output = '' - - allocate(source_thermal_dissipation_coldworkCoeff(Ninstance), source=0.0_pReal) - - do p=1, size(config_phase) - if (all(phase_source(:,p) /= SOURCE_THERMAL_DISSIPATION_ID)) cycle - instance = source_thermal_dissipation_instance(p) - source_thermal_dissipation_coldworkCoeff(instance) = config_phase(p)%getFloat('dissipation_coldworkcoeff') - NofMyPhase=count(material_phase==p) - sourceOffset = source_thermal_dissipation_offset(p) - - call material_allocateSourceState(p,sourceOffset,NofMyPhase,0_pInt,0_pInt,0_pInt) + write(6,'(/,a)') ' <<<+- source_'//SOURCE_thermal_dissipation_label//' init -+>>>' - enddo + + Ninstance = count(phase_source == SOURCE_thermal_dissipation_ID) + if (Ninstance == 0) return + if (iand(debug_level(debug_constitutive),debug_levelBasic) /= 0) & + write(6,'(a16,1x,i5,/)') '# instances:',Ninstance + + allocate(source_thermal_dissipation_offset(material_Nphase), source=0) + allocate(source_thermal_dissipation_instance(material_Nphase), source=0) + allocate(param(Ninstance)) + + do p = 1, material_Nphase + source_thermal_dissipation_instance(p) = count(phase_source(:,1:p) == SOURCE_thermal_dissipation_ID) + do source = 1, phase_Nsources(p) + if (phase_source(source,p) == SOURCE_thermal_dissipation_ID) & + source_thermal_dissipation_offset(p) = source + enddo + enddo + + allocate(source_thermal_dissipation_sizePostResult(maxval(phase_Noutput),Ninstance),source=0) + allocate(source_thermal_dissipation_output (maxval(phase_Noutput),Ninstance)) + source_thermal_dissipation_output = '' + + do p=1, size(config_phase) + if (all(phase_source(:,p) /= SOURCE_THERMAL_DISSIPATION_ID)) cycle + instance = source_thermal_dissipation_instance(p) + param(instance)%kappa = config_phase(p)%getFloat('dissipation_coldworkcoeff') + NofMyPhase=count(material_phase==p) + sourceOffset = source_thermal_dissipation_offset(p) + + call material_allocateSourceState(p,sourceOffset,NofMyPhase,0,0,0) + + enddo end subroutine source_thermal_dissipation_init @@ -109,23 +103,23 @@ end subroutine source_thermal_dissipation_init !-------------------------------------------------------------------------------------------------- subroutine source_thermal_dissipation_getRateAndItsTangent(TDot, dTDOT_dT, Tstar, Lp, phase) - implicit none - integer(pInt), intent(in) :: & - phase - real(pReal), intent(in), dimension(3,3) :: & - Tstar - real(pReal), intent(in), dimension(3,3) :: & - Lp - real(pReal), intent(out) :: & - TDot, & - dTDOT_dT - integer(pInt) :: & - instance - - instance = source_thermal_dissipation_instance(phase) + implicit none + integer, intent(in) :: & + phase + real(pReal), intent(in), dimension(3,3) :: & + Tstar + real(pReal), intent(in), dimension(3,3) :: & + Lp + real(pReal), intent(out) :: & + TDot, & + dTDOT_dT + integer :: & + instance - TDot = source_thermal_dissipation_coldworkCoeff(instance)*sum(abs(Tstar*Lp)) - dTDOT_dT = 0.0_pReal + instance = source_thermal_dissipation_instance(phase) + + TDot = param(instance)%kappa*sum(abs(Tstar*Lp)) + dTDOT_dT = 0.0_pReal end subroutine source_thermal_dissipation_getRateAndItsTangent