extreme values of stress and jacobian now recorded in CPFEM_general. variable declaration and generation of output moved to debug module.
This commit is contained in:
parent
235266b169
commit
9d7ede7e03
|
@ -218,8 +218,15 @@ subroutine CPFEM_general(mode, ffn, ffn1, Temperature, dt, element, IP, cauchySt
|
||||||
debug_i, &
|
debug_i, &
|
||||||
debug_e, &
|
debug_e, &
|
||||||
debugger, &
|
debugger, &
|
||||||
selectiveDebugger, &
|
verboseDebugger, &
|
||||||
verboseDebugger
|
debug_stressMaxLocation, &
|
||||||
|
debug_stressMinLocation, &
|
||||||
|
debug_jacobianMaxLocation, &
|
||||||
|
debug_jacobianMinLocation, &
|
||||||
|
debug_stressMax, &
|
||||||
|
debug_stressMin, &
|
||||||
|
debug_jacobianMax, &
|
||||||
|
debug_jacobianMin
|
||||||
use FEsolving, only: parallelExecution, &
|
use FEsolving, only: parallelExecution, &
|
||||||
outdatedFFN1, &
|
outdatedFFN1, &
|
||||||
terminallyIll, &
|
terminallyIll, &
|
||||||
|
@ -236,7 +243,9 @@ subroutine CPFEM_general(mode, ffn, ffn1, Temperature, dt, element, IP, cauchySt
|
||||||
math_transpose3x3, &
|
math_transpose3x3, &
|
||||||
math_I3, &
|
math_I3, &
|
||||||
math_Mandel3333to66, &
|
math_Mandel3333to66, &
|
||||||
math_Mandel33to6
|
math_Mandel66to3333, &
|
||||||
|
math_Mandel33to6, &
|
||||||
|
math_Mandel6to33
|
||||||
use mesh, only: mesh_FEasCP, &
|
use mesh, only: mesh_FEasCP, &
|
||||||
mesh_NcpElems, &
|
mesh_NcpElems, &
|
||||||
mesh_maxNips, &
|
mesh_maxNips, &
|
||||||
|
@ -297,9 +306,11 @@ subroutine CPFEM_general(mode, ffn, ffn1, Temperature, dt, element, IP, cauchySt
|
||||||
!*** local variables ***!
|
!*** local variables ***!
|
||||||
real(pReal) J_inverse, & ! inverse of Jacobian
|
real(pReal) J_inverse, & ! inverse of Jacobian
|
||||||
rnd
|
rnd
|
||||||
real(pReal), dimension (3,3) :: Kirchhoff ! Piola-Kirchhoff stress in Matrix notation
|
real(pReal), dimension (3,3) :: Kirchhoff, & ! Piola-Kirchhoff stress in Matrix notation
|
||||||
|
cauchyStress33 ! stress vector in Matrix notation
|
||||||
real(pReal), dimension (3,3,3,3) :: H_sym, &
|
real(pReal), dimension (3,3,3,3) :: H_sym, &
|
||||||
H
|
H, &
|
||||||
|
jacobian3333 ! jacobian in Matrix notation
|
||||||
integer(pInt) cp_en, & ! crystal plasticity element number
|
integer(pInt) cp_en, & ! crystal plasticity element number
|
||||||
i, &
|
i, &
|
||||||
j, &
|
j, &
|
||||||
|
@ -553,6 +564,28 @@ subroutine CPFEM_general(mode, ffn, ffn1, Temperature, dt, element, IP, cauchySt
|
||||||
!$OMP END CRITICAL (write2out)
|
!$OMP END CRITICAL (write2out)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
! remember extreme values of stress and jacobian
|
||||||
|
if (mode < 3) then
|
||||||
|
cauchyStress33 = math_Mandel6to33(cauchyStress)
|
||||||
|
if (maxval(cauchyStress33) > debug_stressMax) then
|
||||||
|
debug_stressMaxLocation = (/cp_en, IP/)
|
||||||
|
debug_stressMax = maxval(cauchyStress33)
|
||||||
|
endif
|
||||||
|
if (minval(cauchyStress33) < debug_stressMin) then
|
||||||
|
debug_stressMinLocation = (/cp_en, IP/)
|
||||||
|
debug_stressMin = minval(cauchyStress33)
|
||||||
|
endif
|
||||||
|
jacobian3333 = math_Mandel66to3333(jacobian)
|
||||||
|
if (maxval(jacobian3333) > debug_jacobianMax) then
|
||||||
|
debug_jacobianMaxLocation = (/cp_en, IP/)
|
||||||
|
debug_jacobianMax = maxval(jacobian3333)
|
||||||
|
endif
|
||||||
|
if (minval(jacobian3333) < debug_jacobianMin) then
|
||||||
|
debug_jacobianMinLocation = (/cp_en, IP/)
|
||||||
|
debug_jacobianMin = minval(jacobian3333)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
! return temperature
|
! return temperature
|
||||||
if (theTime > 0.0_pReal) Temperature = materialpoint_Temperature(IP,cp_en) ! homogenized result except for potentially non-isothermal starting condition.
|
if (theTime > 0.0_pReal) Temperature = materialpoint_Temperature(IP,cp_en) ! homogenized result except for potentially non-isothermal starting condition.
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,14 @@
|
||||||
integer(pInt) :: debug_e = 1_pInt
|
integer(pInt) :: debug_e = 1_pInt
|
||||||
integer(pInt) :: debug_i = 1_pInt
|
integer(pInt) :: debug_i = 1_pInt
|
||||||
integer(pInt) :: debug_g = 1_pInt
|
integer(pInt) :: debug_g = 1_pInt
|
||||||
|
integer(pInt), dimension(2) :: debug_stressMaxLocation = 0_pInt
|
||||||
|
integer(pInt), dimension(2) :: debug_stressMinLocation = 0_pInt
|
||||||
|
integer(pInt), dimension(2) :: debug_jacobianMaxLocation = 0_pInt
|
||||||
|
integer(pInt), dimension(2) :: debug_jacobianMinLocation = 0_pInt
|
||||||
|
real(pReal) :: debug_stressMax
|
||||||
|
real(pReal) :: debug_stressMin
|
||||||
|
real(pReal) :: debug_jacobianMax
|
||||||
|
real(pReal) :: debug_jacobianMin
|
||||||
logical :: selectiveDebugger = .true.
|
logical :: selectiveDebugger = .true.
|
||||||
logical :: verboseDebugger = .false.
|
logical :: verboseDebugger = .false.
|
||||||
logical :: debugger = .true.
|
logical :: debugger = .true.
|
||||||
|
@ -159,6 +167,15 @@ subroutine debug_reset()
|
||||||
debug_cumLpCalls = 0_pInt
|
debug_cumLpCalls = 0_pInt
|
||||||
debug_cumDotStateCalls = 0_pInt
|
debug_cumDotStateCalls = 0_pInt
|
||||||
debug_cumDotTemperatureCalls = 0_pInt
|
debug_cumDotTemperatureCalls = 0_pInt
|
||||||
|
debug_stressMaxLocation = 0_pInt
|
||||||
|
debug_stressMinLocation = 0_pInt
|
||||||
|
debug_jacobianMaxLocation = 0_pInt
|
||||||
|
debug_jacobianMinLocation = 0_pInt
|
||||||
|
debug_stressMax = - 1.0_pReal / 0.0_pReal
|
||||||
|
debug_stressMin = + 1.0_pReal / 0.0_pReal
|
||||||
|
debug_jacobianMax = - 1.0_pReal / 0.0_pReal
|
||||||
|
debug_jacobianMin = + 1.0_pReal / 0.0_pReal
|
||||||
|
|
||||||
|
|
||||||
endsubroutine
|
endsubroutine
|
||||||
|
|
||||||
|
@ -181,8 +198,9 @@ endsubroutine
|
||||||
call system_clock(count_rate=tickrate)
|
call system_clock(count_rate=tickrate)
|
||||||
|
|
||||||
!$OMP CRITICAL (write2out)
|
!$OMP CRITICAL (write2out)
|
||||||
|
|
||||||
write(6,*)
|
write(6,*)
|
||||||
write(6,*) 'DEBUG Info'
|
write(6,*) 'DEBUG Info (from previous cycle)'
|
||||||
write(6,*)
|
write(6,*)
|
||||||
write(6,'(a33,x,i12)') 'total calls to LpAndItsTangent :',debug_cumLpCalls
|
write(6,'(a33,x,i12)') 'total calls to LpAndItsTangent :',debug_cumLpCalls
|
||||||
if (debug_cumLpCalls > 0_pInt) then
|
if (debug_cumLpCalls > 0_pInt) then
|
||||||
|
@ -207,6 +225,7 @@ endsubroutine
|
||||||
|
|
||||||
integral = 0_pInt
|
integral = 0_pInt
|
||||||
write(6,*)
|
write(6,*)
|
||||||
|
write(6,*)
|
||||||
write(6,*) 'distribution_StressLoop : stress frogbreak stiffness frogbreak'
|
write(6,*) 'distribution_StressLoop : stress frogbreak stiffness frogbreak'
|
||||||
do i=1,nStress
|
do i=1,nStress
|
||||||
if (any(debug_StressLoopDistribution(i,:) /= 0_pInt ) .or. &
|
if (any(debug_StressLoopDistribution(i,:) /= 0_pInt ) .or. &
|
||||||
|
@ -250,7 +269,6 @@ endsubroutine
|
||||||
|
|
||||||
integral = 0_pInt
|
integral = 0_pInt
|
||||||
write(6,*)
|
write(6,*)
|
||||||
write(6,*)
|
|
||||||
write(6,*) 'distribution_MaterialpointStateLoop :'
|
write(6,*) 'distribution_MaterialpointStateLoop :'
|
||||||
do i=1,nMPstate
|
do i=1,nMPstate
|
||||||
if (debug_MaterialpointStateLoopDistribution(i) /= 0) then
|
if (debug_MaterialpointStateLoopDistribution(i) /= 0) then
|
||||||
|
@ -276,6 +294,17 @@ endsubroutine
|
||||||
write(6,'(a15,i10,x,i10)') ' total',integral,sum(debug_MaterialpointLoopDistribution)
|
write(6,'(a15,i10,x,i10)') ' total',integral,sum(debug_MaterialpointLoopDistribution)
|
||||||
|
|
||||||
write(6,*)
|
write(6,*)
|
||||||
|
write(6,*)
|
||||||
|
write(6,*) 'Extreme values of returned stress and jacobian'
|
||||||
|
write(6,*)
|
||||||
|
write(6,'(a39)') ' value el ip'
|
||||||
|
write(6,'(a14,x,e12.3,x,i6,x,i4)') 'stress min :', debug_stressMin, debug_stressMinLocation
|
||||||
|
write(6,'(a14,x,e12.3,x,i6,x,i4)') ' max :', debug_stressMax, debug_stressMaxLocation
|
||||||
|
write(6,'(a14,x,e12.3,x,i6,x,i4)') 'jacobian min :', debug_jacobianMin, debug_jacobianMinLocation
|
||||||
|
write(6,'(a14,x,e12.3,x,i6,x,i4)') ' max :', debug_jacobianMax, debug_jacobianMaxLocation
|
||||||
|
|
||||||
|
write(6,*)
|
||||||
|
|
||||||
!$OMP END CRITICAL (write2out)
|
!$OMP END CRITICAL (write2out)
|
||||||
|
|
||||||
endsubroutine
|
endsubroutine
|
||||||
|
|
|
@ -240,11 +240,7 @@ subroutine hypela2(&
|
||||||
real(pReal), dimension (3,3) :: pstress ! dummy argument for call of cpfem_general (used by mpie_spectral)
|
real(pReal), dimension (3,3) :: pstress ! dummy argument for call of cpfem_general (used by mpie_spectral)
|
||||||
real(pReal), dimension (3,3,3,3) :: dPdF ! dummy argument for call of cpfem_general (used by mpie_spectral)
|
real(pReal), dimension (3,3,3,3) :: dPdF ! dummy argument for call of cpfem_general (used by mpie_spectral)
|
||||||
|
|
||||||
integer(pInt) computationMode, i, cp_en, &
|
integer(pInt) computationMode, i, cp_en
|
||||||
s_max_e, s_max_i, s_min_e, s_min_i, &
|
|
||||||
d_max_e, d_max_i, d_min_e, d_min_i
|
|
||||||
real(pReal) s_max, s_min, &
|
|
||||||
d_max, d_min
|
|
||||||
|
|
||||||
! OpenMP variable
|
! OpenMP variable
|
||||||
!$ integer(pInt) defaultNumThreadsInt ! default value set by Marc
|
!$ integer(pInt) defaultNumThreadsInt ! default value set by Marc
|
||||||
|
@ -253,7 +249,6 @@ subroutine hypela2(&
|
||||||
!$ defaultNumThreadsInt = omp_get_num_threads() ! remember number of threads set by Marc
|
!$ defaultNumThreadsInt = omp_get_num_threads() ! remember number of threads set by Marc
|
||||||
|
|
||||||
if (.not. CPFEM_init_done) call CPFEM_initAll(t(1),n(1),nn)
|
if (.not. CPFEM_init_done) call CPFEM_initAll(t(1),n(1),nn)
|
||||||
cp_en = mesh_FEasCP('elem',n(1))
|
|
||||||
|
|
||||||
!$ call omp_set_num_threads(mpieNumThreadsInt) ! set number of threads for parallel execution set by MPIE_NUM_THREADS
|
!$ call omp_set_num_threads(mpieNumThreadsInt) ! set number of threads for parallel execution set by MPIE_NUM_THREADS
|
||||||
|
|
||||||
|
@ -264,6 +259,7 @@ subroutine hypela2(&
|
||||||
computationMode = 6 ! --> just return known tangent
|
computationMode = 6 ! --> just return known tangent
|
||||||
endif
|
endif
|
||||||
else ! stress requested (lovl == 6)
|
else ! stress requested (lovl == 6)
|
||||||
|
cp_en = mesh_FEasCP('elem',n(1))
|
||||||
if (cptim > theTime .or. inc /= theInc) then ! reached "convergence"
|
if (cptim > theTime .or. inc /= theInc) then ! reached "convergence"
|
||||||
terminallyIll = .false.
|
terminallyIll = .false.
|
||||||
cycleCounter = -1 ! first calc step increments this to cycle = 0
|
cycleCounter = -1 ! first calc step increments this to cycle = 0
|
||||||
|
@ -308,10 +304,6 @@ subroutine hypela2(&
|
||||||
call debug_reset() ! resets debugging
|
call debug_reset() ! resets debugging
|
||||||
outdatedFFN1 = .false.
|
outdatedFFN1 = .false.
|
||||||
cycleCounter = cycleCounter + 1_pInt
|
cycleCounter = cycleCounter + 1_pInt
|
||||||
s_max = - 1.0_pReal / 0.0_pReal ! reset stored max/min values
|
|
||||||
s_min = + 1.0_pReal / 0.0_pReal
|
|
||||||
d_max = - 1.0_pReal / 0.0_pReal
|
|
||||||
d_min = + 1.0_pReal / 0.0_pReal
|
|
||||||
endif
|
endif
|
||||||
if ( outdatedByNewInc ) then
|
if ( outdatedByNewInc ) then
|
||||||
outdatedByNewInc = .false. ! reset flag
|
outdatedByNewInc = .false. ! reset flag
|
||||||
|
@ -323,17 +315,6 @@ subroutine hypela2(&
|
||||||
if ( lastMode /= calcMode(nn,cp_en) .and. &
|
if ( lastMode /= calcMode(nn,cp_en) .and. &
|
||||||
.not. terminallyIll ) then
|
.not. terminallyIll ) then
|
||||||
call debug_info() ! first after ping pong reports (meaningful) debugging
|
call debug_info() ! first after ping pong reports (meaningful) debugging
|
||||||
!$OMP CRITICAL (write2out)
|
|
||||||
write(6,*)
|
|
||||||
write(6,*) 'EXTREME VALUES OF RETURNED VARIABLES (from previous cycle)'
|
|
||||||
write(6,*)
|
|
||||||
write(6,'(a39)') ' value el ip'
|
|
||||||
write(6,'(a14,x,e12.3,x,i6,x,i4)') 'stress min :', s_min, s_min_e, s_min_i
|
|
||||||
write(6,'(a14,x,e12.3,x,i6,x,i4)') ' max :', s_max, s_max_e, s_max_i
|
|
||||||
write(6,'(a14,x,e12.3,x,i6,x,i4)') 'jacobian min :', d_min, d_min_e, d_min_i
|
|
||||||
write(6,'(a14,x,e12.3,x,i6,x,i4)') ' max :', d_max, d_max_e, d_max_i
|
|
||||||
write(6,*)
|
|
||||||
!$OMP END CRITICAL (write2out)
|
|
||||||
endif
|
endif
|
||||||
if ( lastIncConverged ) then
|
if ( lastIncConverged ) then
|
||||||
lastIncConverged = .false. ! reset flag
|
lastIncConverged = .false. ! reset flag
|
||||||
|
@ -359,33 +340,8 @@ subroutine hypela2(&
|
||||||
s(1:ngens) = stress(1:ngens)*invnrmMandel(1:ngens)
|
s(1:ngens) = stress(1:ngens)*invnrmMandel(1:ngens)
|
||||||
if(symmetricSolver) d(1:ngens,1:ngens) = 0.5_pReal*(d(1:ngens,1:ngens)+transpose(d(1:ngens,1:ngens)))
|
if(symmetricSolver) d(1:ngens,1:ngens) = 0.5_pReal*(d(1:ngens,1:ngens)+transpose(d(1:ngens,1:ngens)))
|
||||||
|
|
||||||
if (calcMode(nn,cp_en)) then
|
|
||||||
if (maxval(s(1:ngens)) > s_max) then ! remember extreme values of stress and jacobian
|
|
||||||
s_max_e = cp_en
|
|
||||||
s_max_i = nn
|
|
||||||
s_max = maxval(s(1:ngens))
|
|
||||||
endif
|
|
||||||
if (minval(s(1:ngens)) < s_min) then
|
|
||||||
s_min_e = cp_en
|
|
||||||
s_min_i = nn
|
|
||||||
s_min = minval(s(1:ngens))
|
|
||||||
endif
|
|
||||||
if (maxval(d(1:ngens,1:ngens)) > d_max) then
|
|
||||||
d_max_e = cp_en
|
|
||||||
d_max_i = nn
|
|
||||||
d_max = maxval(d(1:ngens,1:ngens))
|
|
||||||
endif
|
|
||||||
if (minval(d(1:ngens,1:ngens)) < d_min) then
|
|
||||||
d_min_e = cp_en
|
|
||||||
d_min_i = nn
|
|
||||||
d_min = minval(d(1:ngens,1:ngens))
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
!$ call omp_set_num_threads(defaultNumThreadsInt) ! reset number of threads to stored default value
|
!$ call omp_set_num_threads(defaultNumThreadsInt) ! reset number of threads to stored default value
|
||||||
|
|
||||||
return
|
|
||||||
|
|
||||||
end subroutine
|
end subroutine
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue