competing damage models are not implemented

while there might be the chance that we need this, we better focus on
today's capabilities and don't make the material.yaml syntax more
complicated in anticipation of potential changes
This commit is contained in:
Martin Diehl 2022-12-17 06:58:01 +01:00
parent 902f9d2e97
commit 4f69c7630d
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