clearerer names
This commit is contained in:
parent
88be08ae31
commit
65bd880fdf
|
@ -83,7 +83,7 @@ module constitutive
|
||||||
type(tPlasticState), allocatable, dimension(:), public :: &
|
type(tPlasticState), allocatable, dimension(:), public :: &
|
||||||
plasticState
|
plasticState
|
||||||
type(tSourceState), allocatable, dimension(:), public :: &
|
type(tSourceState), allocatable, dimension(:), public :: &
|
||||||
sourceState, thermalState
|
damageState, thermalState
|
||||||
|
|
||||||
|
|
||||||
integer, public, protected :: &
|
integer, public, protected :: &
|
||||||
|
@ -454,12 +454,12 @@ subroutine constitutive_init
|
||||||
plasticState(ph)%partitionedState0 = plasticState(ph)%state0
|
plasticState(ph)%partitionedState0 = plasticState(ph)%state0
|
||||||
plasticState(ph)%state = plasticState(ph)%partitionedState0
|
plasticState(ph)%state = plasticState(ph)%partitionedState0
|
||||||
forall(so = 1:phase_Nsources(ph))
|
forall(so = 1:phase_Nsources(ph))
|
||||||
sourceState(ph)%p(so)%partitionedState0 = sourceState(ph)%p(so)%state0
|
damageState(ph)%p(so)%partitionedState0 = damageState(ph)%p(so)%state0
|
||||||
sourceState(ph)%p(so)%state = sourceState(ph)%p(so)%partitionedState0
|
damageState(ph)%p(so)%state = damageState(ph)%p(so)%partitionedState0
|
||||||
end forall
|
end forall
|
||||||
|
|
||||||
constitutive_source_maxSizeDotState = max(constitutive_source_maxSizeDotState, &
|
constitutive_source_maxSizeDotState = max(constitutive_source_maxSizeDotState, &
|
||||||
maxval(sourceState(ph)%p%sizeDotState))
|
maxval(damageState(ph)%p%sizeDotState))
|
||||||
enddo PhaseLoop2
|
enddo PhaseLoop2
|
||||||
constitutive_plasticity_maxSizeDotState = maxval(plasticState%sizeDotState)
|
constitutive_plasticity_maxSizeDotState = maxval(plasticState%sizeDotState)
|
||||||
|
|
||||||
|
@ -578,8 +578,8 @@ subroutine constitutive_restore(ip,el,includeL)
|
||||||
|
|
||||||
do co = 1,homogenization_Nconstituents(material_homogenizationAt(el))
|
do co = 1,homogenization_Nconstituents(material_homogenizationAt(el))
|
||||||
do so = 1, phase_Nsources(material_phaseAt(co,el))
|
do so = 1, phase_Nsources(material_phaseAt(co,el))
|
||||||
sourceState(material_phaseAt(co,el))%p(so)%state( :,material_phasememberAt(co,ip,el)) = &
|
damageState(material_phaseAt(co,el))%p(so)%state( :,material_phasememberAt(co,ip,el)) = &
|
||||||
sourceState(material_phaseAt(co,el))%p(so)%partitionedState0(:,material_phasememberAt(co,ip,el))
|
damageState(material_phaseAt(co,el))%p(so)%partitionedState0(:,material_phasememberAt(co,ip,el))
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
|
@ -601,9 +601,9 @@ subroutine constitutive_forward()
|
||||||
call mech_forward()
|
call mech_forward()
|
||||||
call thermal_forward()
|
call thermal_forward()
|
||||||
|
|
||||||
do ph = 1, size(sourceState)
|
do ph = 1, size(damageState)
|
||||||
do so = 1,phase_Nsources(ph)
|
do so = 1,phase_Nsources(ph)
|
||||||
sourceState(ph)%p(so)%state0 = sourceState(ph)%p(so)%state
|
damageState(ph)%p(so)%state0 = damageState(ph)%p(so)%state
|
||||||
enddo; enddo
|
enddo; enddo
|
||||||
|
|
||||||
end subroutine constitutive_forward
|
end subroutine constitutive_forward
|
||||||
|
@ -704,7 +704,7 @@ subroutine crystallite_init()
|
||||||
|
|
||||||
do ph = 1, phases%length
|
do ph = 1, phases%length
|
||||||
do so = 1, phase_Nsources(ph)
|
do so = 1, phase_Nsources(ph)
|
||||||
allocate(sourceState(ph)%p(so)%subState0,source=sourceState(ph)%p(so)%state0) ! ToDo: hack
|
allocate(damageState(ph)%p(so)%subState0,source=damageState(ph)%p(so)%state0) ! ToDo: hack
|
||||||
enddo
|
enddo
|
||||||
do so = 1, thermal_Nsources(ph)
|
do so = 1, thermal_Nsources(ph)
|
||||||
allocate(thermalState(ph)%p(so)%subState0,source=thermalState(ph)%p(so)%state0) ! ToDo: hack
|
allocate(thermalState(ph)%p(so)%subState0,source=thermalState(ph)%p(so)%state0) ! ToDo: hack
|
||||||
|
@ -753,8 +753,8 @@ subroutine constitutive_initializeRestorationPoints(ip,el)
|
||||||
call mech_initializeRestorationPoints(ph,me)
|
call mech_initializeRestorationPoints(ph,me)
|
||||||
call thermal_initializeRestorationPoints(ph,me)
|
call thermal_initializeRestorationPoints(ph,me)
|
||||||
|
|
||||||
do so = 1, size(sourceState(ph)%p)
|
do so = 1, size(damageState(ph)%p)
|
||||||
sourceState(ph)%p(so)%partitionedState0(:,me) = sourceState(ph)%p(so)%state0(:,me)
|
damageState(ph)%p(so)%partitionedState0(:,me) = damageState(ph)%p(so)%state0(:,me)
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
enddo
|
enddo
|
||||||
|
@ -784,7 +784,7 @@ subroutine constitutive_windForward(ip,el)
|
||||||
call thermal_windForward(ph,me)
|
call thermal_windForward(ph,me)
|
||||||
|
|
||||||
do so = 1, phase_Nsources(material_phaseAt(co,el))
|
do so = 1, phase_Nsources(material_phaseAt(co,el))
|
||||||
sourceState(ph)%p(so)%partitionedState0(:,me) = sourceState(ph)%p(so)%state(:,me)
|
damageState(ph)%p(so)%partitionedState0(:,me) = damageState(ph)%p(so)%state(:,me)
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
enddo
|
enddo
|
||||||
|
|
|
@ -129,14 +129,14 @@ module subroutine damage_init
|
||||||
|
|
||||||
phases => config_material%get('phase')
|
phases => config_material%get('phase')
|
||||||
|
|
||||||
allocate(sourceState (phases%length))
|
allocate(damageState (phases%length))
|
||||||
allocate(phase_Nsources(phases%length),source = 0) ! same for kinematics
|
allocate(phase_Nsources(phases%length),source = 0) ! same for kinematics
|
||||||
|
|
||||||
do ph = 1,phases%length
|
do ph = 1,phases%length
|
||||||
phase => phases%get(ph)
|
phase => phases%get(ph)
|
||||||
sources => phase%get('source',defaultVal=emptyList)
|
sources => phase%get('source',defaultVal=emptyList)
|
||||||
phase_Nsources(ph) = sources%length
|
phase_Nsources(ph) = sources%length
|
||||||
allocate(sourceState(ph)%p(phase_Nsources(ph)))
|
allocate(damageState(ph)%p(phase_Nsources(ph)))
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
allocate(phase_source(maxval(phase_Nsources),phases%length), source = DAMAGE_UNDEFINED_ID)
|
allocate(phase_source(maxval(phase_Nsources),phases%length), source = DAMAGE_UNDEFINED_ID)
|
||||||
|
@ -262,9 +262,9 @@ module function integrateDamageState(dt,co,ip,el) result(broken)
|
||||||
if(broken) return
|
if(broken) return
|
||||||
|
|
||||||
do so = 1, phase_Nsources(ph)
|
do so = 1, phase_Nsources(ph)
|
||||||
size_so(so) = sourceState(ph)%p(so)%sizeDotState
|
size_so(so) = damageState(ph)%p(so)%sizeDotState
|
||||||
sourceState(ph)%p(so)%state(1:size_so(so),me) = sourceState(ph)%p(so)%subState0(1:size_so(so),me) &
|
damageState(ph)%p(so)%state(1:size_so(so),me) = damageState(ph)%p(so)%subState0(1:size_so(so),me) &
|
||||||
+ sourceState(ph)%p(so)%dotState (1:size_so(so),me) * dt
|
+ damageState(ph)%p(so)%dotState (1:size_so(so),me) * dt
|
||||||
source_dotState(1:size_so(so),2,so) = 0.0_pReal
|
source_dotState(1:size_so(so),2,so) = 0.0_pReal
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
|
@ -272,26 +272,26 @@ module function integrateDamageState(dt,co,ip,el) result(broken)
|
||||||
|
|
||||||
do so = 1, phase_Nsources(ph)
|
do so = 1, phase_Nsources(ph)
|
||||||
if(nIterationState > 1) source_dotState(1:size_so(so),2,so) = source_dotState(1:size_so(so),1,so)
|
if(nIterationState > 1) source_dotState(1:size_so(so),2,so) = source_dotState(1:size_so(so),1,so)
|
||||||
source_dotState(1:size_so(so),1,so) = sourceState(ph)%p(so)%dotState(:,me)
|
source_dotState(1:size_so(so),1,so) = damageState(ph)%p(so)%dotState(:,me)
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
broken = constitutive_damage_collectDotState(co,ip,el,ph,me)
|
broken = constitutive_damage_collectDotState(co,ip,el,ph,me)
|
||||||
if(broken) exit iteration
|
if(broken) exit iteration
|
||||||
|
|
||||||
do so = 1, phase_Nsources(ph)
|
do so = 1, phase_Nsources(ph)
|
||||||
zeta = damper(sourceState(ph)%p(so)%dotState(:,me), &
|
zeta = damper(damageState(ph)%p(so)%dotState(:,me), &
|
||||||
source_dotState(1:size_so(so),1,so),&
|
source_dotState(1:size_so(so),1,so),&
|
||||||
source_dotState(1:size_so(so),2,so))
|
source_dotState(1:size_so(so),2,so))
|
||||||
sourceState(ph)%p(so)%dotState(:,me) = sourceState(ph)%p(so)%dotState(:,me) * zeta &
|
damageState(ph)%p(so)%dotState(:,me) = damageState(ph)%p(so)%dotState(:,me) * zeta &
|
||||||
+ source_dotState(1:size_so(so),1,so)* (1.0_pReal - zeta)
|
+ source_dotState(1:size_so(so),1,so)* (1.0_pReal - zeta)
|
||||||
r(1:size_so(so)) = sourceState(ph)%p(so)%state (1:size_so(so),me) &
|
r(1:size_so(so)) = damageState(ph)%p(so)%state (1:size_so(so),me) &
|
||||||
- sourceState(ph)%p(so)%subState0(1:size_so(so),me) &
|
- damageState(ph)%p(so)%subState0(1:size_so(so),me) &
|
||||||
- sourceState(ph)%p(so)%dotState (1:size_so(so),me) * dt
|
- damageState(ph)%p(so)%dotState (1:size_so(so),me) * dt
|
||||||
sourceState(ph)%p(so)%state(1:size_so(so),me) = sourceState(ph)%p(so)%state(1:size_so(so),me) &
|
damageState(ph)%p(so)%state(1:size_so(so),me) = damageState(ph)%p(so)%state(1:size_so(so),me) &
|
||||||
- r(1:size_so(so))
|
- r(1:size_so(so))
|
||||||
converged_ = converged_ .and. converged(r(1:size_so(so)), &
|
converged_ = converged_ .and. converged(r(1:size_so(so)), &
|
||||||
sourceState(ph)%p(so)%state(1:size_so(so),me), &
|
damageState(ph)%p(so)%state(1:size_so(so),me), &
|
||||||
sourceState(ph)%p(so)%atol(1:size_so(so)))
|
damageState(ph)%p(so)%atol(1:size_so(so)))
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
if(converged_) then
|
if(converged_) then
|
||||||
|
@ -399,7 +399,7 @@ function constitutive_damage_collectDotState(co,ip,el,ph,of) result(broken)
|
||||||
|
|
||||||
end select sourceType
|
end select sourceType
|
||||||
|
|
||||||
broken = broken .or. any(IEEE_is_NaN(sourceState(ph)%p(so)%dotState(:,of)))
|
broken = broken .or. any(IEEE_is_NaN(damageState(ph)%p(so)%dotState(:,of)))
|
||||||
|
|
||||||
enddo SourceLoop
|
enddo SourceLoop
|
||||||
|
|
||||||
|
@ -438,12 +438,12 @@ function constitutive_damage_deltaState(Fe, co, ip, el, ph, of) result(broken)
|
||||||
case (DAMAGE_ISOBRITTLE_ID) sourceType
|
case (DAMAGE_ISOBRITTLE_ID) sourceType
|
||||||
call source_damage_isoBrittle_deltaState (constitutive_homogenizedC(co,ip,el), Fe, &
|
call source_damage_isoBrittle_deltaState (constitutive_homogenizedC(co,ip,el), Fe, &
|
||||||
co, ip, el)
|
co, ip, el)
|
||||||
broken = any(IEEE_is_NaN(sourceState(ph)%p(so)%deltaState(:,of)))
|
broken = any(IEEE_is_NaN(damageState(ph)%p(so)%deltaState(:,of)))
|
||||||
if(.not. broken) then
|
if(.not. broken) then
|
||||||
myOffset = sourceState(ph)%p(so)%offsetDeltaState
|
myOffset = damageState(ph)%p(so)%offsetDeltaState
|
||||||
mySize = sourceState(ph)%p(so)%sizeDeltaState
|
mySize = damageState(ph)%p(so)%sizeDeltaState
|
||||||
sourceState(ph)%p(so)%state(myOffset + 1: myOffset + mySize,of) = &
|
damageState(ph)%p(so)%state(myOffset + 1: myOffset + mySize,of) = &
|
||||||
sourceState(ph)%p(so)%state(myOffset + 1: myOffset + mySize,of) + sourceState(ph)%p(so)%deltaState(1:mySize,of)
|
damageState(ph)%p(so)%state(myOffset + 1: myOffset + mySize,of) + damageState(ph)%p(so)%deltaState(1:mySize,of)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
end select sourceType
|
end select sourceType
|
||||||
|
|
|
@ -1600,7 +1600,7 @@ module function crystallite_stress(dt,co,ip,el) result(converged_)
|
||||||
|
|
||||||
|
|
||||||
do so = 1, phase_Nsources(ph)
|
do so = 1, phase_Nsources(ph)
|
||||||
sourceState(ph)%p(so)%subState0(:,me) = sourceState(ph)%p(so)%partitionedState0(:,me)
|
damageState(ph)%p(so)%subState0(:,me) = damageState(ph)%p(so)%partitionedState0(:,me)
|
||||||
enddo
|
enddo
|
||||||
do so = 1, thermal_Nsources(ph)
|
do so = 1, thermal_Nsources(ph)
|
||||||
thermalState(ph)%p(so)%subState0(:,me) = thermalState(ph)%p(so)%partitionedState0(:,me)
|
thermalState(ph)%p(so)%subState0(:,me) = thermalState(ph)%p(so)%partitionedState0(:,me)
|
||||||
|
@ -1631,7 +1631,7 @@ module function crystallite_stress(dt,co,ip,el) result(converged_)
|
||||||
subFi0 = constitutive_mech_Fi(ph)%data(1:3,1:3,me)
|
subFi0 = constitutive_mech_Fi(ph)%data(1:3,1:3,me)
|
||||||
subState0 = plasticState(ph)%state(:,me)
|
subState0 = plasticState(ph)%state(:,me)
|
||||||
do so = 1, phase_Nsources(ph)
|
do so = 1, phase_Nsources(ph)
|
||||||
sourceState(ph)%p(so)%subState0(:,me) = sourceState(ph)%p(so)%state(:,me)
|
damageState(ph)%p(so)%subState0(:,me) = damageState(ph)%p(so)%state(:,me)
|
||||||
enddo
|
enddo
|
||||||
do so = 1, thermal_Nsources(ph)
|
do so = 1, thermal_Nsources(ph)
|
||||||
thermalState(ph)%p(so)%subState0(:,me) = thermalState(ph)%p(so)%state(:,me)
|
thermalState(ph)%p(so)%subState0(:,me) = thermalState(ph)%p(so)%state(:,me)
|
||||||
|
@ -1650,7 +1650,7 @@ module function crystallite_stress(dt,co,ip,el) result(converged_)
|
||||||
endif
|
endif
|
||||||
plasticState(ph)%state(:,me) = subState0
|
plasticState(ph)%state(:,me) = subState0
|
||||||
do so = 1, phase_Nsources(ph)
|
do so = 1, phase_Nsources(ph)
|
||||||
sourceState(ph)%p(so)%state(:,me) = sourceState(ph)%p(so)%subState0(:,me)
|
damageState(ph)%p(so)%state(:,me) = damageState(ph)%p(so)%subState0(:,me)
|
||||||
enddo
|
enddo
|
||||||
do so = 1, thermal_Nsources(ph)
|
do so = 1, thermal_Nsources(ph)
|
||||||
thermalState(ph)%p(so)%state(:,me) = thermalState(ph)%p(so)%subState0(:,me)
|
thermalState(ph)%p(so)%state(:,me) = thermalState(ph)%p(so)%subState0(:,me)
|
||||||
|
|
|
@ -25,10 +25,10 @@ subroutine damage_none_init
|
||||||
if (damage_type(h) /= DAMAGE_NONE_ID) cycle
|
if (damage_type(h) /= DAMAGE_NONE_ID) cycle
|
||||||
|
|
||||||
Nmaterialpoints = count(material_homogenizationAt == h)
|
Nmaterialpoints = count(material_homogenizationAt == h)
|
||||||
damageState(h)%sizeState = 0
|
damageState_h(h)%sizeState = 0
|
||||||
allocate(damageState(h)%state0 (0,Nmaterialpoints))
|
allocate(damageState_h(h)%state0 (0,Nmaterialpoints))
|
||||||
allocate(damageState(h)%subState0(0,Nmaterialpoints))
|
allocate(damageState_h(h)%subState0(0,Nmaterialpoints))
|
||||||
allocate(damageState(h)%state (0,Nmaterialpoints))
|
allocate(damageState_h(h)%state (0,Nmaterialpoints))
|
||||||
|
|
||||||
allocate (damage(h)%p(Nmaterialpoints), source=1.0_pReal)
|
allocate (damage(h)%p(Nmaterialpoints), source=1.0_pReal)
|
||||||
|
|
||||||
|
|
|
@ -76,12 +76,12 @@ subroutine damage_nonlocal_init
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
Nmaterialpoints = count(material_homogenizationAt == h)
|
Nmaterialpoints = count(material_homogenizationAt == h)
|
||||||
damageState(h)%sizeState = 1
|
damageState_h(h)%sizeState = 1
|
||||||
allocate(damageState(h)%state0 (1,Nmaterialpoints), source=1.0_pReal)
|
allocate(damageState_h(h)%state0 (1,Nmaterialpoints), source=1.0_pReal)
|
||||||
allocate(damageState(h)%subState0(1,Nmaterialpoints), source=1.0_pReal)
|
allocate(damageState_h(h)%subState0(1,Nmaterialpoints), source=1.0_pReal)
|
||||||
allocate(damageState(h)%state (1,Nmaterialpoints), source=1.0_pReal)
|
allocate(damageState_h(h)%state (1,Nmaterialpoints), source=1.0_pReal)
|
||||||
|
|
||||||
damage(h)%p => damageState(h)%state(1,:)
|
damage(h)%p => damageState_h(h)%state(1,:)
|
||||||
|
|
||||||
end associate
|
end associate
|
||||||
enddo
|
enddo
|
||||||
|
|
|
@ -186,7 +186,7 @@ subroutine materialpoint_stressAndItsTangent(dt,FEsolving_execIP,FEsolving_execE
|
||||||
subStep = 1.0_pReal/num%subStepSizeHomog ! ... larger then the requested calculation
|
subStep = 1.0_pReal/num%subStepSizeHomog ! ... larger then the requested calculation
|
||||||
|
|
||||||
if (homogState(ho)%sizeState > 0) homogState(ho)%subState0(:,me) = homogState(ho)%State0(:,me)
|
if (homogState(ho)%sizeState > 0) homogState(ho)%subState0(:,me) = homogState(ho)%State0(:,me)
|
||||||
if (damageState(ho)%sizeState > 0) damageState(ho)%subState0(:,me) = damageState(ho)%State0(:,me)
|
if (damageState_h(ho)%sizeState > 0) damageState_h(ho)%subState0(:,me) = damageState_h(ho)%State0(:,me)
|
||||||
|
|
||||||
cutBackLooping: do while (.not. terminallyIll .and. subStep > num%subStepMinHomog)
|
cutBackLooping: do while (.not. terminallyIll .and. subStep > num%subStepMinHomog)
|
||||||
|
|
||||||
|
@ -200,7 +200,7 @@ subroutine materialpoint_stressAndItsTangent(dt,FEsolving_execIP,FEsolving_execE
|
||||||
call constitutive_windForward(ip,el)
|
call constitutive_windForward(ip,el)
|
||||||
|
|
||||||
if(homogState(ho)%sizeState > 0) homogState(ho)%subState0(:,me) = homogState(ho)%State(:,me)
|
if(homogState(ho)%sizeState > 0) homogState(ho)%subState0(:,me) = homogState(ho)%State(:,me)
|
||||||
if(damageState(ho)%sizeState > 0) damageState(ho)%subState0(:,me) = damageState(ho)%State(:,me)
|
if(damageState_h(ho)%sizeState > 0) damageState_h(ho)%subState0(:,me) = damageState_h(ho)%State(:,me)
|
||||||
|
|
||||||
endif steppingNeeded
|
endif steppingNeeded
|
||||||
elseif ( (myNgrains == 1 .and. subStep <= 1.0 ) .or. & ! single grain already tried internal subStepping in crystallite
|
elseif ( (myNgrains == 1 .and. subStep <= 1.0 ) .or. & ! single grain already tried internal subStepping in crystallite
|
||||||
|
@ -215,7 +215,7 @@ subroutine materialpoint_stressAndItsTangent(dt,FEsolving_execIP,FEsolving_execE
|
||||||
call constitutive_restore(ip,el,subStep < 1.0_pReal)
|
call constitutive_restore(ip,el,subStep < 1.0_pReal)
|
||||||
|
|
||||||
if(homogState(ho)%sizeState > 0) homogState(ho)%State(:,me) = homogState(ho)%subState0(:,me)
|
if(homogState(ho)%sizeState > 0) homogState(ho)%State(:,me) = homogState(ho)%subState0(:,me)
|
||||||
if(damageState(ho)%sizeState > 0) damageState(ho)%State(:,me) = damageState(ho)%subState0(:,me)
|
if(damageState_h(ho)%sizeState > 0) damageState_h(ho)%State(:,me) = damageState_h(ho)%subState0(:,me)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if (subStep > num%subStepMinHomog) doneAndHappy = [.false.,.true.]
|
if (subStep > num%subStepMinHomog) doneAndHappy = [.false.,.true.]
|
||||||
|
@ -326,7 +326,7 @@ subroutine homogenization_forward
|
||||||
|
|
||||||
do ho = 1, size(material_name_homogenization)
|
do ho = 1, size(material_name_homogenization)
|
||||||
homogState (ho)%state0 = homogState (ho)%state
|
homogState (ho)%state0 = homogState (ho)%state
|
||||||
damageState(ho)%state0 = damageState(ho)%state
|
damageState_h(ho)%state0 = damageState_h(ho)%state
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
end subroutine homogenization_forward
|
end subroutine homogenization_forward
|
||||||
|
|
|
@ -61,7 +61,7 @@ module material
|
||||||
|
|
||||||
type(tState), allocatable, dimension(:), public :: &
|
type(tState), allocatable, dimension(:), public :: &
|
||||||
homogState, &
|
homogState, &
|
||||||
damageState
|
damageState_h
|
||||||
|
|
||||||
type(Rotation), dimension(:,:,:), allocatable, public, protected :: &
|
type(Rotation), dimension(:,:,:), allocatable, public, protected :: &
|
||||||
material_orientation0 !< initial orientation of each grain,IP,element
|
material_orientation0 !< initial orientation of each grain,IP,element
|
||||||
|
@ -101,7 +101,7 @@ subroutine material_init(restart)
|
||||||
|
|
||||||
|
|
||||||
allocate(homogState (size(material_name_homogenization)))
|
allocate(homogState (size(material_name_homogenization)))
|
||||||
allocate(damageState (size(material_name_homogenization)))
|
allocate(damageState_h (size(material_name_homogenization)))
|
||||||
|
|
||||||
allocate(temperature (size(material_name_homogenization)))
|
allocate(temperature (size(material_name_homogenization)))
|
||||||
allocate(damage (size(material_name_homogenization)))
|
allocate(damage (size(material_name_homogenization)))
|
||||||
|
|
|
@ -101,9 +101,9 @@ module function source_damage_anisoBrittle_init(source_length) result(mySources)
|
||||||
if (any(prm%s_crit < 0.0_pReal)) extmsg = trim(extmsg)//' s_crit'
|
if (any(prm%s_crit < 0.0_pReal)) extmsg = trim(extmsg)//' s_crit'
|
||||||
|
|
||||||
Nconstituents = count(material_phaseAt==p) * discretization_nIPs
|
Nconstituents = count(material_phaseAt==p) * discretization_nIPs
|
||||||
call constitutive_allocateState(sourceState(p)%p(sourceOffset),Nconstituents,1,1,0)
|
call constitutive_allocateState(damageState(p)%p(sourceOffset),Nconstituents,1,1,0)
|
||||||
sourceState(p)%p(sourceOffset)%atol = src%get_asFloat('anisobrittle_atol',defaultVal=1.0e-3_pReal)
|
damageState(p)%p(sourceOffset)%atol = src%get_asFloat('anisobrittle_atol',defaultVal=1.0e-3_pReal)
|
||||||
if(any(sourceState(p)%p(sourceOffset)%atol < 0.0_pReal)) extmsg = trim(extmsg)//' anisobrittle_atol'
|
if(any(damageState(p)%p(sourceOffset)%atol < 0.0_pReal)) extmsg = trim(extmsg)//' anisobrittle_atol'
|
||||||
|
|
||||||
end associate
|
end associate
|
||||||
|
|
||||||
|
@ -146,7 +146,7 @@ module subroutine source_damage_anisoBrittle_dotState(S, co, ip, el)
|
||||||
damageOffset = material_homogenizationMemberAt(ip,el)
|
damageOffset = material_homogenizationMemberAt(ip,el)
|
||||||
|
|
||||||
associate(prm => param(source_damage_anisoBrittle_instance(phase)))
|
associate(prm => param(source_damage_anisoBrittle_instance(phase)))
|
||||||
sourceState(phase)%p(sourceOffset)%dotState(1,constituent) = 0.0_pReal
|
damageState(phase)%p(sourceOffset)%dotState(1,constituent) = 0.0_pReal
|
||||||
do i = 1, prm%sum_N_cl
|
do i = 1, prm%sum_N_cl
|
||||||
traction_d = math_tensordot(S,prm%cleavage_systems(1:3,1:3,1,i))
|
traction_d = math_tensordot(S,prm%cleavage_systems(1:3,1:3,1,i))
|
||||||
traction_t = math_tensordot(S,prm%cleavage_systems(1:3,1:3,2,i))
|
traction_t = math_tensordot(S,prm%cleavage_systems(1:3,1:3,2,i))
|
||||||
|
@ -154,8 +154,8 @@ module subroutine source_damage_anisoBrittle_dotState(S, co, ip, el)
|
||||||
|
|
||||||
traction_crit = prm%g_crit(i)*damage(homog)%p(damageOffset)**2.0_pReal
|
traction_crit = prm%g_crit(i)*damage(homog)%p(damageOffset)**2.0_pReal
|
||||||
|
|
||||||
sourceState(phase)%p(sourceOffset)%dotState(1,constituent) &
|
damageState(phase)%p(sourceOffset)%dotState(1,constituent) &
|
||||||
= sourceState(phase)%p(sourceOffset)%dotState(1,constituent) &
|
= damageState(phase)%p(sourceOffset)%dotState(1,constituent) &
|
||||||
+ prm%dot_o / prm%s_crit(i) &
|
+ prm%dot_o / prm%s_crit(i) &
|
||||||
* ((max(0.0_pReal, abs(traction_d) - traction_crit)/traction_crit)**prm%q + &
|
* ((max(0.0_pReal, abs(traction_d) - traction_crit)/traction_crit)**prm%q + &
|
||||||
(max(0.0_pReal, abs(traction_t) - traction_crit)/traction_crit)**prm%q + &
|
(max(0.0_pReal, abs(traction_t) - traction_crit)/traction_crit)**prm%q + &
|
||||||
|
@ -185,7 +185,7 @@ module subroutine source_damage_anisobrittle_getRateAndItsTangent(localphiDot, d
|
||||||
|
|
||||||
sourceOffset = source_damage_anisoBrittle_offset(phase)
|
sourceOffset = source_damage_anisoBrittle_offset(phase)
|
||||||
|
|
||||||
dLocalphiDot_dPhi = -sourceState(phase)%p(sourceOffset)%state(1,constituent)
|
dLocalphiDot_dPhi = -damageState(phase)%p(sourceOffset)%state(1,constituent)
|
||||||
|
|
||||||
localphiDot = 1.0_pReal &
|
localphiDot = 1.0_pReal &
|
||||||
+ dLocalphiDot_dPhi*phi
|
+ dLocalphiDot_dPhi*phi
|
||||||
|
@ -204,7 +204,7 @@ module subroutine source_damage_anisoBrittle_results(phase,group)
|
||||||
integer :: o
|
integer :: o
|
||||||
|
|
||||||
associate(prm => param(source_damage_anisoBrittle_instance(phase)), &
|
associate(prm => param(source_damage_anisoBrittle_instance(phase)), &
|
||||||
stt => sourceState(phase)%p(source_damage_anisoBrittle_offset(phase))%state)
|
stt => damageState(phase)%p(source_damage_anisoBrittle_offset(phase))%state)
|
||||||
outputsLoop: do o = 1,size(prm%output)
|
outputsLoop: do o = 1,size(prm%output)
|
||||||
select case(trim(prm%output(o)))
|
select case(trim(prm%output(o)))
|
||||||
case ('f_phi')
|
case ('f_phi')
|
||||||
|
|
|
@ -87,9 +87,9 @@ module function source_damage_anisoDuctile_init(source_length) result(mySources)
|
||||||
if (any(prm%gamma_crit < 0.0_pReal)) extmsg = trim(extmsg)//' gamma_crit'
|
if (any(prm%gamma_crit < 0.0_pReal)) extmsg = trim(extmsg)//' gamma_crit'
|
||||||
|
|
||||||
Nconstituents=count(material_phaseAt==p) * discretization_nIPs
|
Nconstituents=count(material_phaseAt==p) * discretization_nIPs
|
||||||
call constitutive_allocateState(sourceState(p)%p(sourceOffset),Nconstituents,1,1,0)
|
call constitutive_allocateState(damageState(p)%p(sourceOffset),Nconstituents,1,1,0)
|
||||||
sourceState(p)%p(sourceOffset)%atol = src%get_asFloat('anisoDuctile_atol',defaultVal=1.0e-3_pReal)
|
damageState(p)%p(sourceOffset)%atol = src%get_asFloat('anisoDuctile_atol',defaultVal=1.0e-3_pReal)
|
||||||
if(any(sourceState(p)%p(sourceOffset)%atol < 0.0_pReal)) extmsg = trim(extmsg)//' anisoductile_atol'
|
if(any(damageState(p)%p(sourceOffset)%atol < 0.0_pReal)) extmsg = trim(extmsg)//' anisoductile_atol'
|
||||||
|
|
||||||
end associate
|
end associate
|
||||||
|
|
||||||
|
@ -128,7 +128,7 @@ module subroutine source_damage_anisoDuctile_dotState(co, ip, el)
|
||||||
damageOffset = material_homogenizationMemberAt(ip,el)
|
damageOffset = material_homogenizationMemberAt(ip,el)
|
||||||
|
|
||||||
associate(prm => param(source_damage_anisoDuctile_instance(phase)))
|
associate(prm => param(source_damage_anisoDuctile_instance(phase)))
|
||||||
sourceState(phase)%p(sourceOffset)%dotState(1,constituent) &
|
damageState(phase)%p(sourceOffset)%dotState(1,constituent) &
|
||||||
= sum(plasticState(phase)%slipRate(:,constituent)/(damage(homog)%p(damageOffset)**prm%q)/prm%gamma_crit)
|
= sum(plasticState(phase)%slipRate(:,constituent)/(damage(homog)%p(damageOffset)**prm%q)/prm%gamma_crit)
|
||||||
end associate
|
end associate
|
||||||
|
|
||||||
|
@ -154,7 +154,7 @@ module subroutine source_damage_anisoDuctile_getRateAndItsTangent(localphiDot, d
|
||||||
|
|
||||||
sourceOffset = source_damage_anisoDuctile_offset(phase)
|
sourceOffset = source_damage_anisoDuctile_offset(phase)
|
||||||
|
|
||||||
dLocalphiDot_dPhi = -sourceState(phase)%p(sourceOffset)%state(1,constituent)
|
dLocalphiDot_dPhi = -damageState(phase)%p(sourceOffset)%state(1,constituent)
|
||||||
|
|
||||||
localphiDot = 1.0_pReal &
|
localphiDot = 1.0_pReal &
|
||||||
+ dLocalphiDot_dPhi*phi
|
+ dLocalphiDot_dPhi*phi
|
||||||
|
@ -173,7 +173,7 @@ module subroutine source_damage_anisoDuctile_results(phase,group)
|
||||||
integer :: o
|
integer :: o
|
||||||
|
|
||||||
associate(prm => param(source_damage_anisoDuctile_instance(phase)), &
|
associate(prm => param(source_damage_anisoDuctile_instance(phase)), &
|
||||||
stt => sourceState(phase)%p(source_damage_anisoDuctile_offset(phase))%state)
|
stt => damageState(phase)%p(source_damage_anisoDuctile_offset(phase))%state)
|
||||||
outputsLoop: do o = 1,size(prm%output)
|
outputsLoop: do o = 1,size(prm%output)
|
||||||
select case(trim(prm%output(o)))
|
select case(trim(prm%output(o)))
|
||||||
case ('f_phi')
|
case ('f_phi')
|
||||||
|
|
|
@ -74,9 +74,9 @@ module function source_damage_isoBrittle_init(source_length) result(mySources)
|
||||||
if (prm%W_crit <= 0.0_pReal) extmsg = trim(extmsg)//' W_crit'
|
if (prm%W_crit <= 0.0_pReal) extmsg = trim(extmsg)//' W_crit'
|
||||||
|
|
||||||
Nconstituents = count(material_phaseAt==p) * discretization_nIPs
|
Nconstituents = count(material_phaseAt==p) * discretization_nIPs
|
||||||
call constitutive_allocateState(sourceState(p)%p(sourceOffset),Nconstituents,1,1,1)
|
call constitutive_allocateState(damageState(p)%p(sourceOffset),Nconstituents,1,1,1)
|
||||||
sourceState(p)%p(sourceOffset)%atol = src%get_asFloat('isoBrittle_atol',defaultVal=1.0e-3_pReal)
|
damageState(p)%p(sourceOffset)%atol = src%get_asFloat('isoBrittle_atol',defaultVal=1.0e-3_pReal)
|
||||||
if(any(sourceState(p)%p(sourceOffset)%atol < 0.0_pReal)) extmsg = trim(extmsg)//' isobrittle_atol'
|
if(any(damageState(p)%p(sourceOffset)%atol < 0.0_pReal)) extmsg = trim(extmsg)//' isobrittle_atol'
|
||||||
|
|
||||||
end associate
|
end associate
|
||||||
|
|
||||||
|
@ -124,13 +124,13 @@ module subroutine source_damage_isoBrittle_deltaState(C, Fe, co, ip, el)
|
||||||
strainenergy = 2.0_pReal*sum(strain*matmul(C,strain))/prm%W_crit
|
strainenergy = 2.0_pReal*sum(strain*matmul(C,strain))/prm%W_crit
|
||||||
! ToDo: check strainenergy = 2.0_pReal*dot_product(strain,matmul(C,strain))/prm%W_crit
|
! ToDo: check strainenergy = 2.0_pReal*dot_product(strain,matmul(C,strain))/prm%W_crit
|
||||||
|
|
||||||
if (strainenergy > sourceState(phase)%p(sourceOffset)%subState0(1,constituent)) then
|
if (strainenergy > damageState(phase)%p(sourceOffset)%subState0(1,constituent)) then
|
||||||
sourceState(phase)%p(sourceOffset)%deltaState(1,constituent) = &
|
damageState(phase)%p(sourceOffset)%deltaState(1,constituent) = &
|
||||||
strainenergy - sourceState(phase)%p(sourceOffset)%state(1,constituent)
|
strainenergy - damageState(phase)%p(sourceOffset)%state(1,constituent)
|
||||||
else
|
else
|
||||||
sourceState(phase)%p(sourceOffset)%deltaState(1,constituent) = &
|
damageState(phase)%p(sourceOffset)%deltaState(1,constituent) = &
|
||||||
sourceState(phase)%p(sourceOffset)%subState0(1,constituent) - &
|
damageState(phase)%p(sourceOffset)%subState0(1,constituent) - &
|
||||||
sourceState(phase)%p(sourceOffset)%state(1,constituent)
|
damageState(phase)%p(sourceOffset)%state(1,constituent)
|
||||||
endif
|
endif
|
||||||
end associate
|
end associate
|
||||||
|
|
||||||
|
@ -158,8 +158,8 @@ module subroutine source_damage_isoBrittle_getRateAndItsTangent(localphiDot, dLo
|
||||||
|
|
||||||
associate(prm => param(source_damage_isoBrittle_instance(phase)))
|
associate(prm => param(source_damage_isoBrittle_instance(phase)))
|
||||||
localphiDot = 1.0_pReal &
|
localphiDot = 1.0_pReal &
|
||||||
- phi*sourceState(phase)%p(sourceOffset)%state(1,constituent)
|
- phi*damageState(phase)%p(sourceOffset)%state(1,constituent)
|
||||||
dLocalphiDot_dPhi = - sourceState(phase)%p(sourceOffset)%state(1,constituent)
|
dLocalphiDot_dPhi = - damageState(phase)%p(sourceOffset)%state(1,constituent)
|
||||||
end associate
|
end associate
|
||||||
|
|
||||||
end subroutine source_damage_isoBrittle_getRateAndItsTangent
|
end subroutine source_damage_isoBrittle_getRateAndItsTangent
|
||||||
|
@ -176,7 +176,7 @@ module subroutine source_damage_isoBrittle_results(phase,group)
|
||||||
integer :: o
|
integer :: o
|
||||||
|
|
||||||
associate(prm => param(source_damage_isoBrittle_instance(phase)), &
|
associate(prm => param(source_damage_isoBrittle_instance(phase)), &
|
||||||
stt => sourceState(phase)%p(source_damage_isoBrittle_offset(phase))%state)
|
stt => damageState(phase)%p(source_damage_isoBrittle_offset(phase))%state)
|
||||||
outputsLoop: do o = 1,size(prm%output)
|
outputsLoop: do o = 1,size(prm%output)
|
||||||
select case(trim(prm%output(o)))
|
select case(trim(prm%output(o)))
|
||||||
case ('f_phi')
|
case ('f_phi')
|
||||||
|
|
|
@ -78,9 +78,9 @@ module function source_damage_isoDuctile_init(source_length) result(mySources)
|
||||||
if (prm%gamma_crit <= 0.0_pReal) extmsg = trim(extmsg)//' gamma_crit'
|
if (prm%gamma_crit <= 0.0_pReal) extmsg = trim(extmsg)//' gamma_crit'
|
||||||
|
|
||||||
Nconstituents=count(material_phaseAt==p) * discretization_nIPs
|
Nconstituents=count(material_phaseAt==p) * discretization_nIPs
|
||||||
call constitutive_allocateState(sourceState(p)%p(sourceOffset),Nconstituents,1,1,0)
|
call constitutive_allocateState(damageState(p)%p(sourceOffset),Nconstituents,1,1,0)
|
||||||
sourceState(p)%p(sourceOffset)%atol = src%get_asFloat('isoDuctile_atol',defaultVal=1.0e-3_pReal)
|
damageState(p)%p(sourceOffset)%atol = src%get_asFloat('isoDuctile_atol',defaultVal=1.0e-3_pReal)
|
||||||
if(any(sourceState(p)%p(sourceOffset)%atol < 0.0_pReal)) extmsg = trim(extmsg)//' isoductile_atol'
|
if(any(damageState(p)%p(sourceOffset)%atol < 0.0_pReal)) extmsg = trim(extmsg)//' isoductile_atol'
|
||||||
|
|
||||||
end associate
|
end associate
|
||||||
|
|
||||||
|
@ -119,7 +119,7 @@ module subroutine source_damage_isoDuctile_dotState(co, ip, el)
|
||||||
damageOffset = material_homogenizationMemberAt(ip,el)
|
damageOffset = material_homogenizationMemberAt(ip,el)
|
||||||
|
|
||||||
associate(prm => param(source_damage_isoDuctile_instance(phase)))
|
associate(prm => param(source_damage_isoDuctile_instance(phase)))
|
||||||
sourceState(phase)%p(sourceOffset)%dotState(1,constituent) = &
|
damageState(phase)%p(sourceOffset)%dotState(1,constituent) = &
|
||||||
sum(plasticState(phase)%slipRate(:,constituent))/(damage(homog)%p(damageOffset)**prm%q)/prm%gamma_crit
|
sum(plasticState(phase)%slipRate(:,constituent))/(damage(homog)%p(damageOffset)**prm%q)/prm%gamma_crit
|
||||||
end associate
|
end associate
|
||||||
|
|
||||||
|
@ -145,7 +145,7 @@ module subroutine source_damage_isoDuctile_getRateAndItsTangent(localphiDot, dLo
|
||||||
|
|
||||||
sourceOffset = source_damage_isoDuctile_offset(phase)
|
sourceOffset = source_damage_isoDuctile_offset(phase)
|
||||||
|
|
||||||
dLocalphiDot_dPhi = -sourceState(phase)%p(sourceOffset)%state(1,constituent)
|
dLocalphiDot_dPhi = -damageState(phase)%p(sourceOffset)%state(1,constituent)
|
||||||
|
|
||||||
localphiDot = 1.0_pReal &
|
localphiDot = 1.0_pReal &
|
||||||
+ dLocalphiDot_dPhi*phi
|
+ dLocalphiDot_dPhi*phi
|
||||||
|
@ -164,7 +164,7 @@ module subroutine source_damage_isoDuctile_results(phase,group)
|
||||||
integer :: o
|
integer :: o
|
||||||
|
|
||||||
associate(prm => param(source_damage_isoDuctile_instance(phase)), &
|
associate(prm => param(source_damage_isoDuctile_instance(phase)), &
|
||||||
stt => sourceState(phase)%p(source_damage_isoDuctile_offset(phase))%state)
|
stt => damageState(phase)%p(source_damage_isoDuctile_offset(phase))%state)
|
||||||
outputsLoop: do o = 1,size(prm%output)
|
outputsLoop: do o = 1,size(prm%output)
|
||||||
select case(trim(prm%output(o)))
|
select case(trim(prm%output(o)))
|
||||||
case ('f_phi')
|
case ('f_phi')
|
||||||
|
|
Loading…
Reference in New Issue