diff --git a/code/mpie_cpfem_marc.f90 b/code/mpie_cpfem_marc.f90 index 7d2330a5c..0d8f53558 100644 --- a/code/mpie_cpfem_marc.f90 +++ b/code/mpie_cpfem_marc.f90 @@ -229,7 +229,12 @@ subroutine hypela2(& 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) - 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 !$ integer(pInt) defaultNumThreadsInt ! default value set by Marc @@ -297,6 +302,10 @@ subroutine hypela2(& call debug_reset() ! resets debugging outdatedFFN1 = .false. 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 if ( outdatedByNewInc ) then outdatedByNewInc = .false. ! reset flag @@ -306,7 +315,18 @@ subroutine hypela2(& endif else ! now --- COLLECT --- if ( lastMode /= calcMode(nn,cp_en) .and. & - .not. terminallyIll ) call debug_info() ! first after ping pong reports (meaningful) debugging + .not. terminallyIll ) then + call debug_info() ! first after ping pong reports (meaningful) debugging + write(6,*) + write(6,*) 'REPORT EXTREME VALUES OF RETURNED VARIABLES' + 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,*) + endif if ( lastIncConverged ) then lastIncConverged = .false. ! reset flag computationMode = 4 ! collect and backup Jacobian after convergence @@ -330,6 +350,29 @@ subroutine hypela2(& forall(i=1:ngens) d(1:ngens,i) = invnrmMandel(i)*ddsdde(1:ngens,i)*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 (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