Merge branch '46-simplification-of-crystallite-f90-NEW5' into development
This commit is contained in:
commit
7f6408966b
|
@ -1654,29 +1654,7 @@ subroutine integrateStateFPI()
|
||||||
!$OMP END PARALLEL DO
|
!$OMP END PARALLEL DO
|
||||||
|
|
||||||
call update_dependentState
|
call update_dependentState
|
||||||
!$OMP PARALLEL
|
call update_stress(1.0_pReal)
|
||||||
|
|
||||||
! --- STRESS INTEGRATION ---
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
if (iand(debug_level(debug_crystallite), debug_levelExtensive) /= 0_pInt) &
|
|
||||||
write(6,'(a,i8,a)') '<< CRYST >> ', count(crystallite_todo(:,:,:)),' grains todo before stress integration'
|
|
||||||
#endif
|
|
||||||
!$OMP DO
|
|
||||||
do e = eIter(1),eIter(2); do i = iIter(1,e),iIter(2,e); do g = gIter(1,e),gIter(2,e) ! iterate over elements, ips and grains
|
|
||||||
!$OMP FLUSH(crystallite_todo)
|
|
||||||
if (crystallite_todo(g,i,e) .and. .not. crystallite_converged(g,i,e)) then
|
|
||||||
crystallite_todo(g,i,e) = integrateStress(g,i,e)
|
|
||||||
!$OMP FLUSH(crystallite_todo)
|
|
||||||
if (.not. crystallite_todo(g,i,e) .and. .not. crystallite_localPlasticity(g,i,e)) then ! broken non-local...
|
|
||||||
!$OMP CRITICAL (checkTodo)
|
|
||||||
crystallite_todo = crystallite_todo .and. crystallite_localPlasticity ! ... then all non-locals skipped
|
|
||||||
!$OMP END CRITICAL (checkTodo)
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
enddo; enddo; enddo
|
|
||||||
!$OMP ENDDO
|
|
||||||
!$OMP END PARALLEL
|
|
||||||
call update_dotState(1.0_pReal)
|
call update_dotState(1.0_pReal)
|
||||||
!$OMP PARALLEL
|
!$OMP PARALLEL
|
||||||
! --- UPDATE STATE ---
|
! --- UPDATE STATE ---
|
||||||
|
@ -1921,62 +1899,16 @@ eIter = FEsolving_execElem(1:2)
|
||||||
|
|
||||||
call update_dotState(1.0_pReal)
|
call update_dotState(1.0_pReal)
|
||||||
call update_State(1.0_pReal)
|
call update_State(1.0_pReal)
|
||||||
|
call update_deltaState
|
||||||
!$OMP PARALLEL
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
! --- STATE JUMP ---
|
|
||||||
|
|
||||||
!$OMP DO
|
|
||||||
do e = eIter(1),eIter(2); do i = iIter(1,e),iIter(2,e); do g = gIter(1,e),gIter(2,e) ! iterate over elements, ips and grains
|
|
||||||
!$OMP FLUSH(crystallite_todo)
|
|
||||||
if (crystallite_todo(g,i,e) .and. .not. crystallite_converged(g,i,e)) then
|
|
||||||
crystallite_todo(g,i,e) = stateJump(g,i,e)
|
|
||||||
!$OMP FLUSH(crystallite_todo)
|
|
||||||
if (.not. crystallite_todo(g,i,e) .and. .not. crystallite_localPlasticity(g,i,e)) then ! if broken non-local...
|
|
||||||
!$OMP CRITICAL (checkTodo)
|
|
||||||
crystallite_todo = crystallite_todo .and. crystallite_localPlasticity ! ...all non-locals skipped
|
|
||||||
!$OMP END CRITICAL (checkTodo)
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
enddo; enddo; enddo
|
|
||||||
!$OMP ENDDO
|
|
||||||
|
|
||||||
!$OMP END PARALLEL
|
|
||||||
|
|
||||||
call update_dependentState
|
call update_dependentState
|
||||||
|
call update_stress(1.0_pReal)
|
||||||
|
|
||||||
|
|
||||||
!$OMP PARALLEL
|
!$OMP PARALLEL DO
|
||||||
! --- STRESS INTEGRATION ---
|
|
||||||
|
|
||||||
!$OMP DO
|
|
||||||
do e = eIter(1),eIter(2); do i = iIter(1,e),iIter(2,e); do g = gIter(1,e),gIter(2,e) ! iterate over elements, ips and grains
|
|
||||||
!$OMP FLUSH(crystallite_todo)
|
|
||||||
if (crystallite_todo(g,i,e) .and. .not. crystallite_converged(g,i,e)) then
|
|
||||||
crystallite_todo(g,i,e) = integrateStress(g,i,e)
|
|
||||||
!$OMP FLUSH(crystallite_todo)
|
|
||||||
if (.not. crystallite_todo(g,i,e) .and. .not. crystallite_localPlasticity(g,i,e)) then ! if broken non-local...
|
|
||||||
!$OMP CRITICAL (checkTodo)
|
|
||||||
crystallite_todo = crystallite_todo .and. crystallite_localPlasticity ! ...all non-locals skipped
|
|
||||||
!$OMP END CRITICAL (checkTodo)
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
enddo; enddo; enddo
|
|
||||||
!$OMP ENDDO
|
|
||||||
|
|
||||||
|
|
||||||
! --- SET CONVERGENCE FLAG ---
|
|
||||||
|
|
||||||
!$OMP DO
|
|
||||||
do e = eIter(1),eIter(2); do i = iIter(1,e),iIter(2,e); do g = gIter(1,e),gIter(2,e) ! iterate over elements, ips and grains
|
do e = eIter(1),eIter(2); do i = iIter(1,e),iIter(2,e); do g = gIter(1,e),gIter(2,e) ! iterate over elements, ips and grains
|
||||||
crystallite_converged(g,i,e) = crystallite_todo(g,i,e) .or. crystallite_converged(g,i,e) ! if still "to do" then converged per definitionem
|
crystallite_converged(g,i,e) = crystallite_todo(g,i,e) .or. crystallite_converged(g,i,e) ! if still "to do" then converged per definitionem
|
||||||
enddo; enddo; enddo
|
enddo; enddo; enddo
|
||||||
!$OMP ENDDO
|
!$OMP END PARALLEL DO
|
||||||
|
|
||||||
!$OMP END PARALLEL
|
|
||||||
|
|
||||||
|
|
||||||
! --- CHECK NON-LOCAL CONVERGENCE ---
|
! --- CHECK NON-LOCAL CONVERGENCE ---
|
||||||
|
@ -2109,47 +2041,10 @@ subroutine integrateStateAdaptiveEuler()
|
||||||
endif
|
endif
|
||||||
enddo; enddo; enddo
|
enddo; enddo; enddo
|
||||||
!$OMP ENDDO
|
!$OMP ENDDO
|
||||||
|
|
||||||
|
|
||||||
! --- STATE JUMP ---
|
|
||||||
|
|
||||||
!$OMP DO
|
|
||||||
do e = eIter(1),eIter(2); do i = iIter(1,e),iIter(2,e); do g = gIter(1,e),gIter(2,e) ! iterate over elements, ips and grains
|
|
||||||
!$OMP FLUSH(crystallite_todo)
|
|
||||||
if (crystallite_todo(g,i,e)) then
|
|
||||||
crystallite_todo(g,i,e) = stateJump(g,i,e)
|
|
||||||
!$OMP FLUSH(crystallite_todo)
|
|
||||||
if (.not. crystallite_todo(g,i,e) .and. .not. crystallite_localPlasticity(g,i,e)) then ! if broken non-local...
|
|
||||||
!$OMP CRITICAL (checkTodo)
|
|
||||||
crystallite_todo = crystallite_todo .and. crystallite_localPlasticity ! ...all non-locals skipped
|
|
||||||
!$OMP END CRITICAL (checkTodo)
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
enddo; enddo; enddo
|
|
||||||
!$OMP ENDDO
|
|
||||||
!$OMP END PARALLEL
|
!$OMP END PARALLEL
|
||||||
|
call update_deltaState
|
||||||
call update_dependentState
|
call update_dependentState
|
||||||
|
call update_stress(1.0_pReal)
|
||||||
|
|
||||||
! --- STRESS INTEGRATION (EULER INTEGRATION) ---
|
|
||||||
|
|
||||||
!$OMP PARALLEL DO
|
|
||||||
do e = eIter(1),eIter(2); do i = iIter(1,e),iIter(2,e); do g = gIter(1,e),gIter(2,e) ! iterate over elements, ips and grains
|
|
||||||
!$OMP FLUSH(crystallite_todo)
|
|
||||||
if (crystallite_todo(g,i,e)) then
|
|
||||||
crystallite_todo(g,i,e) = integrateStress(g,i,e)
|
|
||||||
!$OMP FLUSH(crystallite_todo)
|
|
||||||
if (.not. crystallite_todo(g,i,e) .and. .not. crystallite_localPlasticity(g,i,e)) then ! if broken non-local...
|
|
||||||
!$OMP CRITICAL (checkTodo)
|
|
||||||
crystallite_todo = crystallite_todo .and. crystallite_localPlasticity ! ...all non-locals skipped
|
|
||||||
!$OMP END CRITICAL (checkTodo)
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
enddo; enddo; enddo
|
|
||||||
!$OMP END PARALLEL DO
|
|
||||||
|
|
||||||
|
|
||||||
call update_dotState(1.0_pReal)
|
call update_dotState(1.0_pReal)
|
||||||
|
|
||||||
!$OMP PARALLEL
|
!$OMP PARALLEL
|
||||||
|
@ -2365,46 +2260,9 @@ subroutine integrateStateRK4()
|
||||||
!$OMP END PARALLEL
|
!$OMP END PARALLEL
|
||||||
|
|
||||||
call update_state(TIMESTEPFRACTION(n))
|
call update_state(TIMESTEPFRACTION(n))
|
||||||
|
call update_deltaState
|
||||||
!$OMP PARALLEL
|
|
||||||
! --- state jump ---
|
|
||||||
|
|
||||||
!$OMP DO
|
|
||||||
do e = eIter(1),eIter(2); do i = iIter(1,e),iIter(2,e); do g = gIter(1,e),gIter(2,e) ! iterate over elements, ips and grains
|
|
||||||
!$OMP FLUSH(crystallite_todo)
|
|
||||||
if (crystallite_todo(g,i,e)) then
|
|
||||||
crystallite_todo(g,i,e) = stateJump(g,i,e)
|
|
||||||
!$OMP FLUSH(crystallite_todo)
|
|
||||||
if (.not. crystallite_todo(g,i,e) .and. .not. crystallite_localPlasticity(g,i,e)) then ! if broken non-local...
|
|
||||||
!$OMP CRITICAL (checkTodo)
|
|
||||||
crystallite_todo = crystallite_todo .and. crystallite_localPlasticity ! ...all non-locals skipped
|
|
||||||
!$OMP END CRITICAL (checkTodo)
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
enddo; enddo; enddo
|
|
||||||
!$OMP ENDDO
|
|
||||||
!$OMP END PARALLEL
|
|
||||||
call update_dependentState
|
call update_dependentState
|
||||||
!$OMP PARALLEL
|
call update_stress(TIMESTEPFRACTION(n))
|
||||||
|
|
||||||
|
|
||||||
! --- stress integration ---
|
|
||||||
|
|
||||||
!$OMP DO
|
|
||||||
do e = eIter(1),eIter(2); do i = iIter(1,e),iIter(2,e); do g = gIter(1,e),gIter(2,e) ! iterate over elements, ips and grains
|
|
||||||
!$OMP FLUSH(crystallite_todo)
|
|
||||||
if (crystallite_todo(g,i,e)) then
|
|
||||||
crystallite_todo(g,i,e) = integrateStress(g,i,e,timeStepFraction(n)) ! fraction of original times step
|
|
||||||
!$OMP FLUSH(crystallite_todo)
|
|
||||||
if (.not. crystallite_todo(g,i,e) .and. .not. crystallite_localPlasticity(g,i,e)) then ! if broken non-local...
|
|
||||||
!$OMP CRITICAL (checkTodo)
|
|
||||||
crystallite_todo = crystallite_todo .and. crystallite_localPlasticity ! ...all non-locals skipped
|
|
||||||
!$OMP END CRITICAL (checkTodo)
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
enddo; enddo; enddo
|
|
||||||
!$OMP ENDDO
|
|
||||||
!$OMP END PARALLEL
|
|
||||||
|
|
||||||
! --- dot state and RK dot state---
|
! --- dot state and RK dot state---
|
||||||
|
|
||||||
|
@ -2584,50 +2442,9 @@ subroutine integrateStateRKCK45()
|
||||||
!$OMP END PARALLEL
|
!$OMP END PARALLEL
|
||||||
|
|
||||||
call update_state(1.0_pReal) !MD: 1.0 correct?
|
call update_state(1.0_pReal) !MD: 1.0 correct?
|
||||||
|
call update_deltaState
|
||||||
!$OMP PARALLEL
|
|
||||||
|
|
||||||
|
|
||||||
! --- state jump ---
|
|
||||||
|
|
||||||
!$OMP DO
|
|
||||||
do e = eIter(1),eIter(2); do i = iIter(1,e),iIter(2,e); do g = gIter(1,e),gIter(2,e) ! iterate over elements, ips and grains
|
|
||||||
!$OMP FLUSH(crystallite_todo)
|
|
||||||
if (crystallite_todo(g,i,e)) then
|
|
||||||
crystallite_todo(g,i,e) = stateJump(g,i,e)
|
|
||||||
!$OMP FLUSH(crystallite_todo)
|
|
||||||
if (.not. crystallite_todo(g,i,e) .and. .not. crystallite_localPlasticity(g,i,e)) then ! if broken non-local...
|
|
||||||
!$OMP CRITICAL (checkTodo)
|
|
||||||
crystallite_todo = crystallite_todo .and. crystallite_localPlasticity ! ...all non-locals skipped
|
|
||||||
!$OMP END CRITICAL (checkTodo)
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
enddo; enddo; enddo
|
|
||||||
!$OMP ENDDO
|
|
||||||
!$OMP END PARALLEL
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
call update_dependentState
|
call update_dependentState
|
||||||
!$OMP PARALLEL
|
call update_stress(C(stage))
|
||||||
|
|
||||||
! --- stress integration ---
|
|
||||||
|
|
||||||
!$OMP DO
|
|
||||||
do e = eIter(1),eIter(2); do i = iIter(1,e),iIter(2,e); do g = gIter(1,e),gIter(2,e) ! iterate over elements, ips and grains
|
|
||||||
!$OMP FLUSH(crystallite_todo)
|
|
||||||
if (crystallite_todo(g,i,e)) then
|
|
||||||
crystallite_todo(g,i,e) = integrateStress(g,i,e,C(stage)) ! fraction of original time step
|
|
||||||
!$OMP FLUSH(crystallite_todo)
|
|
||||||
if (.not. crystallite_todo(g,i,e) .and. .not. crystallite_localPlasticity(g,i,e)) then ! if broken non-local...
|
|
||||||
!$OMP CRITICAL (checkTodo)
|
|
||||||
crystallite_todo = crystallite_todo .and. crystallite_localPlasticity ! ...all non-locals skipped
|
|
||||||
!$OMP END CRITICAL (checkTodo)
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
enddo; enddo; enddo
|
|
||||||
!$OMP ENDDO
|
|
||||||
!$OMP END PARALLEL
|
|
||||||
call update_dotState(C(stage))
|
call update_dotState(C(stage))
|
||||||
|
|
||||||
enddo
|
enddo
|
||||||
|
@ -2735,47 +2552,13 @@ subroutine integrateStateRKCK45()
|
||||||
endif
|
endif
|
||||||
enddo; enddo; enddo
|
enddo; enddo; enddo
|
||||||
!$OMP ENDDO
|
!$OMP ENDDO
|
||||||
|
|
||||||
|
|
||||||
! --- STATE JUMP ---
|
|
||||||
|
|
||||||
!$OMP DO
|
|
||||||
do e = eIter(1),eIter(2); do i = iIter(1,e),iIter(2,e); do g = gIter(1,e),gIter(2,e) ! iterate over elements, ips and grains
|
|
||||||
!$OMP FLUSH(crystallite_todo)
|
|
||||||
if (crystallite_todo(g,i,e)) then
|
|
||||||
crystallite_todo(g,i,e) = stateJump(g,i,e)
|
|
||||||
!$OMP FLUSH(crystallite_todo)
|
|
||||||
if (.not. crystallite_todo(g,i,e) .and. .not. crystallite_localPlasticity(g,i,e)) then ! if broken non-local...
|
|
||||||
!$OMP CRITICAL (checkTodo)
|
|
||||||
crystallite_todo = crystallite_todo .and. crystallite_localPlasticity ! ...all non-locals skipped
|
|
||||||
!$OMP END CRITICAL (checkTodo)
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
enddo; enddo; enddo
|
|
||||||
!$OMP ENDDO
|
|
||||||
!$OMP END PARALLEL
|
!$OMP END PARALLEL
|
||||||
|
|
||||||
|
call update_deltaState
|
||||||
call update_dependentState
|
call update_dependentState
|
||||||
|
call update_stress(1.0_pReal)
|
||||||
|
|
||||||
!$OMP PARALLEL
|
!$OMP PARALLEL
|
||||||
!--------------------------------------------------------------------------------------------------
|
|
||||||
! --- FINAL STRESS INTEGRATION STEP IF RESIDUUM BELOW TOLERANCE ---
|
|
||||||
!$OMP DO
|
|
||||||
do e = eIter(1),eIter(2); do i = iIter(1,e),iIter(2,e); do g = gIter(1,e),gIter(2,e) ! iterate over elements, ips and grains
|
|
||||||
!$OMP FLUSH(crystallite_todo)
|
|
||||||
if (crystallite_todo(g,i,e)) then
|
|
||||||
crystallite_todo(g,i,e) = integrateStress(g,i,e)
|
|
||||||
!$OMP FLUSH(crystallite_todo)
|
|
||||||
if (.not. crystallite_todo(g,i,e) .and. .not. crystallite_localPlasticity(g,i,e)) then ! if broken non-local...
|
|
||||||
!$OMP CRITICAL (checkTodo)
|
|
||||||
crystallite_todo = crystallite_todo .and. crystallite_localPlasticity ! ...all non-locals skipped
|
|
||||||
!$OMP END CRITICAL (checkTodo)
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
enddo; enddo; enddo
|
|
||||||
!$OMP ENDDO
|
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
! --- SET CONVERGENCE FLAG ---
|
! --- SET CONVERGENCE FLAG ---
|
||||||
!$OMP DO
|
!$OMP DO
|
||||||
|
@ -2798,6 +2581,43 @@ subroutine integrateStateRKCK45()
|
||||||
end subroutine integrateStateRKCK45
|
end subroutine integrateStateRKCK45
|
||||||
|
|
||||||
|
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
!> @brief Standard forwarding of state as state = state0 + dotState * (delta t)
|
||||||
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
subroutine update_stress(timeFraction)
|
||||||
|
use material, only: &
|
||||||
|
plasticState, &
|
||||||
|
sourceState, &
|
||||||
|
phase_Nsources, &
|
||||||
|
phaseAt, phasememberAt
|
||||||
|
|
||||||
|
implicit none
|
||||||
|
real(pReal), intent(in) :: &
|
||||||
|
timeFraction
|
||||||
|
integer(pInt) :: &
|
||||||
|
e, & !< element index in element loop
|
||||||
|
i, & !< integration point index in ip loop
|
||||||
|
g
|
||||||
|
|
||||||
|
!$OMP PARALLEL DO
|
||||||
|
do e = FEsolving_execElem(1),FEsolving_execElem(2)
|
||||||
|
do i = FEsolving_execIP(1,e),FEsolving_execIP(2,e)
|
||||||
|
do g = 1,homogenization_Ngrains(mesh_element(3,e))
|
||||||
|
!$OMP FLUSH(crystallite_todo)
|
||||||
|
if (crystallite_todo(g,i,e) .and. .not. crystallite_converged(g,i,e)) then
|
||||||
|
crystallite_todo(g,i,e) = integrateStress(g,i,e,timeFraction)
|
||||||
|
!$OMP FLUSH(crystallite_todo)
|
||||||
|
if (.not. crystallite_todo(g,i,e) .and. .not. crystallite_localPlasticity(g,i,e)) then ! if broken non-local...
|
||||||
|
!$OMP CRITICAL (checkTodo)
|
||||||
|
crystallite_todo = crystallite_todo .and. crystallite_localPlasticity ! ...all non-locals skipped
|
||||||
|
!$OMP END CRITICAL (checkTodo)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
enddo; enddo; enddo
|
||||||
|
!$OMP END PARALLEL DO
|
||||||
|
|
||||||
|
end subroutine update_stress
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief tbd
|
!> @brief tbd
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
@ -2824,6 +2644,7 @@ subroutine update_dependentState()
|
||||||
|
|
||||||
end subroutine update_dependentState
|
end subroutine update_dependentState
|
||||||
|
|
||||||
|
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
!> @brief Standard forwarding of state as state = state0 + dotState * (delta t)
|
!> @brief Standard forwarding of state as state = state0 + dotState * (delta t)
|
||||||
!--------------------------------------------------------------------------------------------------
|
!--------------------------------------------------------------------------------------------------
|
||||||
|
@ -2897,15 +2718,17 @@ subroutine update_dotState(timeFraction)
|
||||||
c, &
|
c, &
|
||||||
s
|
s
|
||||||
logical :: &
|
logical :: &
|
||||||
NaN
|
NaN, &
|
||||||
|
nonlocalStop
|
||||||
|
|
||||||
!$OMP PARALLEL
|
nonlocalStop = .false.
|
||||||
!$OMP DO PRIVATE (p,c,NaN)
|
|
||||||
|
!$OMP PARALLEL DO PRIVATE (p,c,NaN)
|
||||||
do e = FEsolving_execElem(1),FEsolving_execElem(2)
|
do e = FEsolving_execElem(1),FEsolving_execElem(2)
|
||||||
do i = FEsolving_execIP(1,e),FEsolving_execIP(2,e)
|
do i = FEsolving_execIP(1,e),FEsolving_execIP(2,e)
|
||||||
do g = 1,homogenization_Ngrains(mesh_element(3,e))
|
do g = 1,homogenization_Ngrains(mesh_element(3,e))
|
||||||
!$OMP FLUSH(crystallite_todo)
|
!$OMP FLUSH(nonlocalStop)
|
||||||
if (crystallite_todo(g,i,e) .and. .not. crystallite_converged(g,i,e)) then
|
if (nonlocalStop .or. (crystallite_todo(g,i,e) .and. .not. crystallite_converged(g,i,e))) then
|
||||||
call constitutive_collectDotState(crystallite_Tstar_v(1:6,g,i,e), &
|
call constitutive_collectDotState(crystallite_Tstar_v(1:6,g,i,e), &
|
||||||
crystallite_Fe, &
|
crystallite_Fe, &
|
||||||
crystallite_Fi(1:3,1:3,g,i,e), &
|
crystallite_Fi(1:3,1:3,g,i,e), &
|
||||||
|
@ -2918,16 +2741,13 @@ subroutine update_dotState(timeFraction)
|
||||||
enddo
|
enddo
|
||||||
if (NaN) then
|
if (NaN) then
|
||||||
crystallite_todo(g,i,e) = .false. ! this one done (and broken)
|
crystallite_todo(g,i,e) = .false. ! this one done (and broken)
|
||||||
if (.not. crystallite_localPlasticity(g,i,e)) then ! if broken is a local...
|
if (.not. crystallite_localPlasticity(g,i,e)) nonlocalStop = .True.
|
||||||
!$OMP CRITICAL (checkTodo)
|
|
||||||
crystallite_todo = crystallite_todo .and. crystallite_localPlasticity ! ...all non-locals done (and broken)
|
|
||||||
!$OMP END CRITICAL (checkTodo)
|
|
||||||
endif
|
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
enddo; enddo; enddo
|
enddo; enddo; enddo
|
||||||
!$OMP ENDDO
|
!$OMP END PARALLEL DO
|
||||||
!$OMP END PARALLEL
|
|
||||||
|
if (nonlocalStop) crystallite_todo = crystallite_todo .and. crystallite_localPlasticity
|
||||||
|
|
||||||
end subroutine update_DotState
|
end subroutine update_DotState
|
||||||
|
|
||||||
|
@ -2964,16 +2784,21 @@ subroutine update_deltaState
|
||||||
p, &
|
p, &
|
||||||
mySize, &
|
mySize, &
|
||||||
myOffset, &
|
myOffset, &
|
||||||
|
mySource, &
|
||||||
c, &
|
c, &
|
||||||
s
|
s
|
||||||
logical :: NaN
|
logical :: &
|
||||||
|
NaN, &
|
||||||
|
nonlocalStop
|
||||||
|
|
||||||
!$OMP PARALLEL DO PRIVATE(p,c,myOffset,mySize)
|
nonlocalStop = .false.
|
||||||
|
|
||||||
|
!$OMP PARALLEL DO PRIVATE(p,c,myOffset,mySize,mySource,NaN)
|
||||||
do e = FEsolving_execElem(1),FEsolving_execElem(2)
|
do e = FEsolving_execElem(1),FEsolving_execElem(2)
|
||||||
do i = FEsolving_execIP(1,e),FEsolving_execIP(2,e)
|
do i = FEsolving_execIP(1,e),FEsolving_execIP(2,e)
|
||||||
do g = 1,homogenization_Ngrains(mesh_element(3,e))
|
do g = 1,homogenization_Ngrains(mesh_element(3,e))
|
||||||
!$OMP FLUSH(crystallite_todo)
|
!$OMP FLUSH(nonlocalStop)
|
||||||
if (crystallite_todo(g,i,e) .and. .not. crystallite_converged(g,i,e)) then ! converged and still alive...
|
if (nonlocalStop .or. (crystallite_todo(g,i,e) .and. .not. crystallite_converged(g,i,e))) then
|
||||||
call constitutive_collectDeltaState(math_6toSym33(crystallite_Tstar_v(1:6,g,i,e)), &
|
call constitutive_collectDeltaState(math_6toSym33(crystallite_Tstar_v(1:6,g,i,e)), &
|
||||||
crystallite_Fe(1:3,1:3,g,i,e), &
|
crystallite_Fe(1:3,1:3,g,i,e), &
|
||||||
crystallite_Fi(1:3,1:3,g,i,e), &
|
crystallite_Fi(1:3,1:3,g,i,e), &
|
||||||
|
@ -2988,22 +2813,28 @@ subroutine update_deltaState
|
||||||
plasticState(p)%state(myOffset + 1_pInt: myOffset + mySize,c) = &
|
plasticState(p)%state(myOffset + 1_pInt: myOffset + mySize,c) = &
|
||||||
plasticState(p)%state(myOffset + 1_pInt: myOffset + mySize,c) + &
|
plasticState(p)%state(myOffset + 1_pInt: myOffset + mySize,c) + &
|
||||||
plasticState(p)%deltaState(1:mySize,c)
|
plasticState(p)%deltaState(1:mySize,c)
|
||||||
|
do mySource = 1_pInt, phase_Nsources(p)
|
||||||
|
myOffset = sourceState(p)%p(mySource)%offsetDeltaState
|
||||||
|
mySize = sourceState(p)%p(mySource)%sizeDeltaState
|
||||||
|
NaN = NaN .or. any(IEEE_is_NaN(sourceState(p)%p(mySource)%deltaState(1:mySize,c)))
|
||||||
|
|
||||||
|
if (.not. NaN) then
|
||||||
|
sourceState(p)%p(mySource)%state(myOffset + 1_pInt:myOffset +mySize,c) = &
|
||||||
|
sourceState(p)%p(mySource)%state(myOffset + 1_pInt:myOffset +mySize,c) + &
|
||||||
|
sourceState(p)%p(mySource)%deltaState(1:mySize,c)
|
||||||
|
endif
|
||||||
|
enddo
|
||||||
endif
|
endif
|
||||||
|
|
||||||
crystallite_todo(g,i,e) = stateJump(g,i,e)
|
crystallite_todo(g,i,e) = .not. NaN
|
||||||
!$OMP FLUSH(crystallite_todo)
|
|
||||||
if (.not. crystallite_todo(g,i,e)) then ! if state jump fails, then convergence is broken
|
if (.not. crystallite_todo(g,i,e)) then ! if state jump fails, then convergence is broken
|
||||||
crystallite_converged(g,i,e) = .false.
|
crystallite_converged(g,i,e) = .false.
|
||||||
if (.not. crystallite_localPlasticity(g,i,e)) then ! if broken non-local...
|
if (.not. crystallite_localPlasticity(g,i,e)) nonlocalStop = .true.
|
||||||
!$OMP CRITICAL (checkTodo)
|
|
||||||
crystallite_todo = crystallite_todo .and. crystallite_localPlasticity ! ...all non-locals skipped
|
|
||||||
!$OMP END CRITICAL (checkTodo)
|
|
||||||
endif
|
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
enddo; enddo; enddo
|
enddo; enddo; enddo
|
||||||
!$OMP END PARALLEL DO
|
!$OMP END PARALLEL DO
|
||||||
|
if (nonlocalStop) crystallite_todo = crystallite_todo .and. crystallite_localPlasticity
|
||||||
|
|
||||||
end subroutine update_deltaState
|
end subroutine update_deltaState
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue