This commit is contained in:
Martin Diehl 2020-12-22 19:24:00 +01:00
parent b452cce2f6
commit f28fe0812e
2 changed files with 34 additions and 39 deletions

View File

@ -351,22 +351,6 @@ module constitutive
integer, intent(in) :: e, i, g integer, intent(in) :: e, i, g
end subroutine integrateStateFPI end subroutine integrateStateFPI
module subroutine integrateStateEuler(g,i,e)
integer, intent(in) :: e, i, g
end subroutine integrateStateEuler
module subroutine integrateStateAdaptiveEuler(g,i,e)
integer, intent(in) :: e, i, g
end subroutine integrateStateAdaptiveEuler
module subroutine integrateStateRK4(g,i,e)
integer, intent(in) :: e, i, g
end subroutine integrateStateRK4
module subroutine integrateStateRKCK45(g,i,e)
integer, intent(in) :: e, i, g
end subroutine integrateStateRKCK45
end interface end interface
@ -696,7 +680,7 @@ end function constitutive_thermal_collectDotState
!> @brief for constitutive models having an instantaneous change of state !> @brief for constitutive models having an instantaneous change of state
!> will return false if delta state is not needed/supported by the constitutive model !> will return false if delta state is not needed/supported by the constitutive model
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
function constitutive_deltaState_source(Fe, ipc, ip, el, phase, of) result(broken) function constitutive_damage_deltaState(Fe, ipc, ip, el, phase, of) result(broken)
integer, intent(in) :: & integer, intent(in) :: &
ipc, & !< component-ID of integration point ipc, & !< component-ID of integration point
@ -735,7 +719,7 @@ function constitutive_deltaState_source(Fe, ipc, ip, el, phase, of) result(broke
enddo SourceLoop enddo SourceLoop
end function constitutive_deltaState_source end function constitutive_damage_deltaState
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
@ -918,20 +902,6 @@ subroutine crystallite_init
if(num%nState < 1) call IO_error(301,ext_msg='nState') if(num%nState < 1) call IO_error(301,ext_msg='nState')
if(num%nStress< 1) call IO_error(301,ext_msg='nStress') if(num%nStress< 1) call IO_error(301,ext_msg='nStress')
select case(num_crystallite%get_asString('integrator',defaultVal='FPI'))
case('FPI')
integrateState => integrateStateFPI
case('Euler')
integrateState => integrateStateEuler
case('AdaptiveEuler')
integrateState => integrateStateAdaptiveEuler
case('RK4')
integrateState => integrateStateRK4
case('RKCK45')
integrateState => integrateStateRKCK45
case default
call IO_error(301,ext_msg='integrator')
end select
phases => config_material%get('phase') phases => config_material%get('phase')
@ -1505,7 +1475,7 @@ subroutine integrateSourceState(g,i,e)
enddo enddo
if(crystallite_converged(g,i,e)) then if(crystallite_converged(g,i,e)) then
broken = constitutive_deltaState_source(crystallite_Fe(1:3,1:3,g,i,e),g,i,e,p,c) broken = constitutive_damage_deltaState(crystallite_Fe(1:3,1:3,g,i,e),g,i,e,p,c)
exit iteration exit iteration
endif endif

View File

@ -289,6 +289,7 @@ module subroutine mech_init
p, & p, &
stiffDegradationCtr stiffDegradationCtr
class(tNode), pointer :: & class(tNode), pointer :: &
num_crystallite, &
phases, & phases, &
phase, & phase, &
mech, & mech, &
@ -358,6 +359,30 @@ module subroutine mech_init
phase_plasticityInstance(p) = count(phase_plasticity(1:p) == phase_plasticity(p)) phase_plasticityInstance(p) = count(phase_plasticity(1:p) == phase_plasticity(p))
enddo enddo
num_crystallite => config_numerics%get('crystallite',defaultVal=emptyDict)
select case(num_crystallite%get_asString('integrator',defaultVal='FPI'))
case('FPI')
integrateState => integrateStateFPI
case('Euler')
integrateState => integrateStateEuler
case('AdaptiveEuler')
integrateState => integrateStateAdaptiveEuler
case('RK4')
integrateState => integrateStateRK4
case('RKCK45')
integrateState => integrateStateRKCK45
case default
call IO_error(301,ext_msg='integrator')
end select
end subroutine mech_init end subroutine mech_init
@ -1024,7 +1049,7 @@ end subroutine integrateStateFPI
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief integrate state with 1st order explicit Euler method !> @brief integrate state with 1st order explicit Euler method
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
module subroutine integrateStateEuler(g,i,e) subroutine integrateStateEuler(g,i,e)
integer, intent(in) :: & integer, intent(in) :: &
e, & !< element index in element loop e, & !< element index in element loop
@ -1062,7 +1087,7 @@ end subroutine integrateStateEuler
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
!> @brief integrate stress, state with 1st order Euler method with adaptive step size !> @brief integrate stress, state with 1st order Euler method with adaptive step size
!-------------------------------------------------------------------------------------------------- !--------------------------------------------------------------------------------------------------
module subroutine integrateStateAdaptiveEuler(g,i,e) subroutine integrateStateAdaptiveEuler(g,i,e)
integer, intent(in) :: & integer, intent(in) :: &
e, & !< element index in element loop e, & !< element index in element loop
@ -1115,7 +1140,7 @@ end subroutine integrateStateAdaptiveEuler
!--------------------------------------------------------------------------------------------------- !---------------------------------------------------------------------------------------------------
!> @brief Integrate state (including stress integration) with the classic Runge Kutta method !> @brief Integrate state (including stress integration) with the classic Runge Kutta method
!--------------------------------------------------------------------------------------------------- !---------------------------------------------------------------------------------------------------
module subroutine integrateStateRK4(g,i,e) subroutine integrateStateRK4(g,i,e)
integer, intent(in) :: g,i,e integer, intent(in) :: g,i,e
@ -1138,7 +1163,7 @@ end subroutine integrateStateRK4
!--------------------------------------------------------------------------------------------------- !---------------------------------------------------------------------------------------------------
!> @brief Integrate state (including stress integration) with the Cash-Carp method !> @brief Integrate state (including stress integration) with the Cash-Carp method
!--------------------------------------------------------------------------------------------------- !---------------------------------------------------------------------------------------------------
module subroutine integrateStateRKCK45(g,i,e) subroutine integrateStateRKCK45(g,i,e)
integer, intent(in) :: g,i,e integer, intent(in) :: g,i,e