Merge branch '245-no-need-for-multiple-damage-mechanisms' into 'development'

competing damage models are not implemented

Closes #245

See merge request damask/DAMASK!689
This commit is contained in:
Yi Hu 2023-01-02 15:43:53 +00:00
commit 12c0919566
5 changed files with 16 additions and 27 deletions

@ -1 +1 @@
Subproject commit e9254133c1e9ea3855a4fd17078d4c6f7d8728b1 Subproject commit 75460bbb55d8c8f48c43b0843c1cbc80a95f37e1

View File

@ -55,6 +55,7 @@ submodule(phase) damage
S S
end subroutine anisobrittle_dotState end subroutine anisobrittle_dotState
module subroutine anisobrittle_results(phase,group) module subroutine anisobrittle_results(phase,group)
integer, intent(in) :: phase integer, intent(in) :: phase
character(len=*), intent(in) :: group character(len=*), intent(in) :: group
@ -70,9 +71,9 @@ submodule(phase) damage
contains contains
!---------------------------------------------------------------------------------------------- !----------------------------------------------------------------------------------------------
!< @brief initialize damage sources and kinematics mechanism !< @brief Initialize damage mechanisms.
!---------------------------------------------------------------------------------------------- !----------------------------------------------------------------------------------------------
module subroutine damage_init module subroutine damage_init()
integer :: & integer :: &
ph, & ph, &
@ -81,8 +82,6 @@ module subroutine damage_init
phases, & phases, &
phase, & phase, &
source source
type(tList), pointer :: &
sources
logical:: damage_active logical:: damage_active
print'(/,1x,a)', '<<<+- phase:damage init -+>>>' print'(/,1x,a)', '<<<+- phase:damage init -+>>>'
@ -101,11 +100,9 @@ module subroutine damage_init
allocate(current(ph)%phi(Nmembers),source=1.0_pReal) allocate(current(ph)%phi(Nmembers),source=1.0_pReal)
phase => phases%get_dict(ph) phase => phases%get_dict(ph)
sources => phase%get_list('damage',defaultVal=emptyList) source => phase%get_dict('damage',defaultVal=emptyDict)
if (sources%length > 1) error stop if (source%length > 0) then
if (sources%length == 1) then
damage_active = .true. damage_active = .true.
source => sources%get_dict(1)
param(ph)%mu = source%get_asFloat('mu') param(ph)%mu = source%get_asFloat('mu')
param(ph)%l_c = source%get_asFloat('l_c') param(ph)%l_c = source%get_asFloat('l_c')
end if end if
@ -287,7 +284,7 @@ function integrateDamageState(Delta_t,ph,en) result(broken)
contains contains
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief calculate the damping for correction of state and dot state !> @brief Calculate the damping for correction of state and dot state.
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
real(pReal) pure function damper(omega_0,omega_1,omega_2) real(pReal) pure function damper(omega_0,omega_1,omega_2)
@ -463,7 +460,7 @@ end function phase_damage_deltaState
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief checks if a source mechanism is active or not !> @brief Check if a source mechanism is active or not.
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
function source_active(source_label) result(active_source) function source_active(source_label) result(active_source)
@ -478,12 +475,12 @@ function source_active(source_label) result(active_source)
sources sources
integer :: ph integer :: ph
phases => config_material%get_dict('phase') phases => config_material%get_dict('phase')
allocate(active_source(phases%length)) allocate(active_source(phases%length))
do ph = 1, phases%length do ph = 1, phases%length
phase => phases%get_dict(ph) phase => phases%get_dict(ph)
sources => phase%get_list('damage',defaultVal=emptyList) src => phase%get_dict('damage',defaultVal=emptyDict)
src => sources%get_dict(1)
active_source(ph) = src%get_asString('type',defaultVal = 'x') == source_label active_source(ph) = src%get_asString('type',defaultVal = 'x') == source_label
end do end do

View File

@ -39,8 +39,6 @@ module function anisobrittle_init() result(mySources)
phases, & phases, &
phase, & phase, &
src src
type(tList), pointer :: &
sources
integer :: Nmembers,ph integer :: Nmembers,ph
integer, dimension(:), allocatable :: N_cl integer, dimension(:), allocatable :: N_cl
character(len=pStringLen) :: extmsg = '' character(len=pStringLen) :: extmsg = ''
@ -60,10 +58,9 @@ module function anisobrittle_init() result(mySources)
do ph = 1, phases%length do ph = 1, phases%length
if (mySources(ph)) then if (mySources(ph)) then
phase => phases%get_dict(ph) phase => phases%get_dict(ph)
sources => phase%get_list('damage') src => phase%get_dict('damage')
associate(prm => param(ph)) associate(prm => param(ph))
src => sources%get_dict(1)
N_cl = src%get_as1dInt('N_cl',defaultVal=emptyIntArray) N_cl = src%get_as1dInt('N_cl',defaultVal=emptyIntArray)
prm%sum_N_cl = sum(abs(N_cl)) prm%sum_N_cl = sum(abs(N_cl))

View File

@ -38,8 +38,6 @@ module function isobrittle_init() result(mySources)
phases, & phases, &
phase, & phase, &
src src
type(tList), pointer :: &
sources
integer :: Nmembers,ph integer :: Nmembers,ph
character(len=pStringLen) :: extmsg = '' character(len=pStringLen) :: extmsg = ''
@ -59,10 +57,9 @@ module function isobrittle_init() result(mySources)
do ph = 1, phases%length do ph = 1, phases%length
if (mySources(ph)) then if (mySources(ph)) then
phase => phases%get_dict(ph) phase => phases%get_dict(ph)
sources => phase%get_list('damage') src => phase%get_dict('damage')
associate(prm => param(ph), dlt => deltaState(ph), stt => state(ph)) associate(prm => param(ph), dlt => deltaState(ph), stt => state(ph))
src => sources%get_dict(1)
prm%W_crit = src%get_asFloat('G_crit')/src%get_asFloat('l_c') prm%W_crit = src%get_asFloat('G_crit')/src%get_asFloat('l_c')

View File

@ -73,7 +73,7 @@ end subroutine eigen_init
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief checks if a kinematic mechanism is active or not !> @brief Check if an eigen kinematic mechanism is active.
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
function kinematics_active(kinematics_label,kinematics_length) result(active_kinematics) function kinematics_active(kinematics_label,kinematics_length) result(active_kinematics)
@ -108,7 +108,7 @@ end function kinematics_active
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief checks if a kinematic mechanism is active or not !> @brief Checks if a damage kinematic mechanism is active.
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
function kinematics_active2(kinematics_label) result(active_kinematics) function kinematics_active2(kinematics_label) result(active_kinematics)
@ -123,14 +123,12 @@ function kinematics_active2(kinematics_label) result(active_kinematics)
kinematics kinematics
integer :: ph integer :: ph
phases => config_material%get_dict('phase') phases => config_material%get_dict('phase')
allocate(active_kinematics(phases%length), source = .false.) allocate(active_kinematics(phases%length), source = .false.)
do ph = 1, phases%length do ph = 1, phases%length
phase => phases%get_dict(ph) phase => phases%get_dict(ph)
kinematics => phase%get_list('damage',defaultVal=emptyList) kinematics_type => phase%get_dict('damage',defaultVal=emptyDict)
if (kinematics%length < 1) return
kinematics_type => kinematics%get_dict(1)
if (.not. kinematics_type%contains('type')) continue
active_kinematics(ph) = kinematics_type%get_asString('type',defaultVal='n/a') == kinematics_label active_kinematics(ph) = kinematics_type%get_asString('type',defaultVal='n/a') == kinematics_label
end do end do