fixed bug in timesyncing procedure: if any ip that synchronizes its time step did not converge, all nonlocals become terminally ill; before, this led to an infinite loop in crystallite

This commit is contained in:
Christoph Kords 2012-12-11 13:42:22 +00:00
parent 03a88d4798
commit 6a9b19e4c0
1 changed files with 21 additions and 7 deletions

View File

@ -622,8 +622,21 @@ do while (any(crystallite_todo(:,:,FEsolving_execELem(1):FEsolving_execElem(2)))
if (any(crystallite_syncSubFrac)) then if (any(crystallite_syncSubFrac)) then
! Just did a time synchronization. ! Just did a time synchronization.
! Dont do anything else than winding the synchronizers forward. ! If all synchrnizers converged, then do nothing else than winding them forward.
! If any of the cynchronizers did not converge, something went completely wrong
! and its not clear how to fix this, so all nonlocals become terminally ill.
if (any(crystallite_syncSubFrac .and. .not. crystallite_converged(1,:,:))) then
where(.not. crystallite_localPlasticity)
crystallite_substep = 0.0_pReal
crystallite_todo = .false.
endwhere
if (iand(debug_level(debug_crystallite),debug_levelExtensive) /= 0_pInt) then
!$OMP CRITICAL (write2out)
write(6,'(a,i6)') '<< CRYST >> time synchronization: failed'
!$OMP END CRITICAL (write2out)
endif
else
crystallite_clearToWindForward = crystallite_localPlasticity(1,:,:) .or. crystallite_syncSubFrac crystallite_clearToWindForward = crystallite_localPlasticity(1,:,:) .or. crystallite_syncSubFrac
crystallite_clearToCutback = crystallite_localPlasticity(1,:,:) crystallite_clearToCutback = crystallite_localPlasticity(1,:,:)
if (iand(debug_level(debug_crystallite),debug_levelExtensive) /= 0_pInt) then if (iand(debug_level(debug_crystallite),debug_levelExtensive) /= 0_pInt) then
@ -631,6 +644,7 @@ do while (any(crystallite_todo(:,:,FEsolving_execELem(1):FEsolving_execElem(2)))
write(6,'(a,i6)') '<< CRYST >> time synchronization: wind forward' write(6,'(a,i6)') '<< CRYST >> time synchronization: wind forward'
!$OMP END CRITICAL (write2out) !$OMP END CRITICAL (write2out)
endif endif
endif
elseif (any(crystallite_syncSubFracCompleted)) then elseif (any(crystallite_syncSubFracCompleted)) then