parallelization now works properly (not yet tested extensively though):
* had to add some BARRIER constructs * only the master thread is allowed to increase the state counter yet parallelization seems not to give a significant decrease in calculation time with nonlocal model (because of too many CRITICAL statements?)
This commit is contained in:
parent
14594dc9e2
commit
4f267f4375
|
@ -1181,6 +1181,7 @@ endif
|
||||||
constitutive_dotState(g,i,e)%p = 0.0_pReal ! reset dotState to zero
|
constitutive_dotState(g,i,e)%p = 0.0_pReal ! reset dotState to zero
|
||||||
enddo; enddo; enddo
|
enddo; enddo; enddo
|
||||||
!$OMP ENDDO
|
!$OMP ENDDO
|
||||||
|
!$OMP BARRIER
|
||||||
|
|
||||||
|
|
||||||
! --- FIRST RUNGE KUTTA STEP ---
|
! --- FIRST RUNGE KUTTA STEP ---
|
||||||
|
@ -1212,6 +1213,7 @@ endif
|
||||||
endif
|
endif
|
||||||
enddo; enddo; enddo
|
enddo; enddo; enddo
|
||||||
!$OMP ENDDO
|
!$OMP ENDDO
|
||||||
|
!$OMP BARRIER
|
||||||
|
|
||||||
|
|
||||||
! --- SECOND TO SIXTH RUNGE KUTTA STEP ---
|
! --- SECOND TO SIXTH RUNGE KUTTA STEP ---
|
||||||
|
@ -1239,6 +1241,7 @@ do n = 1,5
|
||||||
endif
|
endif
|
||||||
enddo; enddo; enddo
|
enddo; enddo; enddo
|
||||||
!$OMP ENDDO
|
!$OMP ENDDO
|
||||||
|
!$OMP BARRIER
|
||||||
|
|
||||||
|
|
||||||
! --- update dependent states ---
|
! --- update dependent states ---
|
||||||
|
@ -1252,6 +1255,7 @@ do n = 1,5
|
||||||
constitutive_dotState(g,i,e)%p = 0.0_pReal ! reset dotState to zero
|
constitutive_dotState(g,i,e)%p = 0.0_pReal ! reset dotState to zero
|
||||||
enddo; enddo; enddo
|
enddo; enddo; enddo
|
||||||
!$OMP ENDDO
|
!$OMP ENDDO
|
||||||
|
!$OMP BARRIER
|
||||||
|
|
||||||
|
|
||||||
! --- stress integration ---
|
! --- stress integration ---
|
||||||
|
@ -1271,6 +1275,7 @@ do n = 1,5
|
||||||
endif
|
endif
|
||||||
enddo; enddo; enddo
|
enddo; enddo; enddo
|
||||||
!$OMP ENDDO
|
!$OMP ENDDO
|
||||||
|
!$OMP BARRIER
|
||||||
|
|
||||||
|
|
||||||
! --- dot state and RK dot state---
|
! --- dot state and RK dot state---
|
||||||
|
@ -1303,6 +1308,7 @@ do n = 1,5
|
||||||
endif
|
endif
|
||||||
enddo; enddo; enddo
|
enddo; enddo; enddo
|
||||||
!$OMP ENDDO
|
!$OMP ENDDO
|
||||||
|
!$OMP BARRIER
|
||||||
|
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
|
@ -1383,6 +1389,7 @@ relTemperatureResiduum = 0.0_pReal
|
||||||
endif
|
endif
|
||||||
enddo; enddo; enddo
|
enddo; enddo; enddo
|
||||||
!$OMP ENDDO
|
!$OMP ENDDO
|
||||||
|
!$OMP BARRIER
|
||||||
|
|
||||||
|
|
||||||
! --- UPDATE DEPENDENT STATES IF RESIDUUM BELOW TOLERANCE ---
|
! --- UPDATE DEPENDENT STATES IF RESIDUUM BELOW TOLERANCE ---
|
||||||
|
@ -1395,6 +1402,7 @@ relTemperatureResiduum = 0.0_pReal
|
||||||
endif
|
endif
|
||||||
enddo; enddo; enddo
|
enddo; enddo; enddo
|
||||||
!$OMP ENDDO
|
!$OMP ENDDO
|
||||||
|
!$OMP BARRIER
|
||||||
|
|
||||||
|
|
||||||
! --- FINAL STRESS INTEGRATION STEP IF RESIDUUM BELOW TOLERANCE ---
|
! --- FINAL STRESS INTEGRATION STEP IF RESIDUUM BELOW TOLERANCE ---
|
||||||
|
@ -1980,6 +1988,7 @@ endif
|
||||||
constitutive_previousDotState2(g,i,e)%p = 0.0_pReal
|
constitutive_previousDotState2(g,i,e)%p = 0.0_pReal
|
||||||
enddo; enddo; enddo
|
enddo; enddo; enddo
|
||||||
!$OMP ENDDO
|
!$OMP ENDDO
|
||||||
|
!$OMP BARRIER
|
||||||
|
|
||||||
|
|
||||||
! --- DOT STATES ---
|
! --- DOT STATES ---
|
||||||
|
@ -1993,11 +2002,14 @@ endif
|
||||||
endif
|
endif
|
||||||
enddo; enddo; enddo
|
enddo; enddo; enddo
|
||||||
!$OMP ENDDO
|
!$OMP ENDDO
|
||||||
|
!$OMP BARRIER
|
||||||
|
|
||||||
|
|
||||||
! --- STATE & TEMPERATURE UPDATE ---
|
! --- STATE & TEMPERATURE UPDATE ---
|
||||||
|
|
||||||
|
!$OMP MASTER
|
||||||
crystallite_statedamper = 1.0_pReal
|
crystallite_statedamper = 1.0_pReal
|
||||||
|
!$OMP END MASTER
|
||||||
!$OMP DO
|
!$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
|
||||||
if (crystallite_todo(g,i,e)) then
|
if (crystallite_todo(g,i,e)) then
|
||||||
|
@ -2011,6 +2023,7 @@ crystallite_statedamper = 1.0_pReal
|
||||||
endif
|
endif
|
||||||
enddo; enddo; enddo
|
enddo; enddo; enddo
|
||||||
!$OMP ENDDO
|
!$OMP ENDDO
|
||||||
|
!$OMP BARRIER
|
||||||
|
|
||||||
|
|
||||||
! --- UPDATE DEPENDENT STATES ---
|
! --- UPDATE DEPENDENT STATES ---
|
||||||
|
@ -2026,15 +2039,20 @@ crystallite_statedamper = 1.0_pReal
|
||||||
constitutive_previousDotState2(g,i,e)%p = constitutive_previousDotState(g,i,e)%p
|
constitutive_previousDotState2(g,i,e)%p = constitutive_previousDotState(g,i,e)%p
|
||||||
enddo; enddo; enddo
|
enddo; enddo; enddo
|
||||||
!$OMP ENDDO
|
!$OMP ENDDO
|
||||||
|
!$OMP BARRIER
|
||||||
|
|
||||||
|
|
||||||
! --+>> STATE LOOP <<+--
|
! --+>> STATE LOOP <<+--
|
||||||
|
|
||||||
|
!$OMP MASTER
|
||||||
NiterationState = 0_pInt
|
NiterationState = 0_pInt
|
||||||
|
!$OMP END MASTER
|
||||||
|
|
||||||
do while (any(crystallite_todo) .and. NiterationState < nState ) ! convergence loop for crystallite
|
do while (any(crystallite_todo) .and. NiterationState < nState ) ! convergence loop for crystallite
|
||||||
|
|
||||||
|
!$OMP MASTER
|
||||||
NiterationState = NiterationState + 1_pInt
|
NiterationState = NiterationState + 1_pInt
|
||||||
|
!$OMP END MASTER
|
||||||
|
|
||||||
|
|
||||||
! --- STRESS INTEGRATION ---
|
! --- STRESS INTEGRATION ---
|
||||||
|
@ -2051,6 +2069,7 @@ do while (any(crystallite_todo) .and. NiterationState < nState )
|
||||||
endif
|
endif
|
||||||
enddo; enddo; enddo
|
enddo; enddo; enddo
|
||||||
!$OMP ENDDO
|
!$OMP ENDDO
|
||||||
|
!$OMP BARRIER
|
||||||
|
|
||||||
if (verboseDebugger .and. mode == 1) then
|
if (verboseDebugger .and. mode == 1) then
|
||||||
!$OMP MASTER
|
!$OMP MASTER
|
||||||
|
@ -2072,6 +2091,7 @@ do while (any(crystallite_todo) .and. NiterationState < nState )
|
||||||
endif
|
endif
|
||||||
enddo; enddo; enddo
|
enddo; enddo; enddo
|
||||||
!$OMP ENDDO
|
!$OMP ENDDO
|
||||||
|
!$OMP BARRIER
|
||||||
|
|
||||||
|
|
||||||
! --- STATE & TEMPERATURE UPDATE ---
|
! --- STATE & TEMPERATURE UPDATE ---
|
||||||
|
@ -2109,6 +2129,7 @@ do while (any(crystallite_todo) .and. NiterationState < nState )
|
||||||
endif
|
endif
|
||||||
enddo; enddo; enddo
|
enddo; enddo; enddo
|
||||||
!$OMP ENDDO
|
!$OMP ENDDO
|
||||||
|
!$OMP BARRIER
|
||||||
|
|
||||||
|
|
||||||
! --- UPDATE DEPENDENT STATES ---
|
! --- UPDATE DEPENDENT STATES ---
|
||||||
|
@ -2124,6 +2145,7 @@ do while (any(crystallite_todo) .and. NiterationState < nState )
|
||||||
constitutive_previousDotState2(g,i,e)%p = constitutive_previousDotState(g,i,e)%p
|
constitutive_previousDotState2(g,i,e)%p = constitutive_previousDotState(g,i,e)%p
|
||||||
enddo; enddo; enddo
|
enddo; enddo; enddo
|
||||||
!$OMP ENDDO
|
!$OMP ENDDO
|
||||||
|
!$OMP BARRIER
|
||||||
|
|
||||||
|
|
||||||
if (verboseDebugger .and. mode == 1) then
|
if (verboseDebugger .and. mode == 1) then
|
||||||
|
@ -2733,7 +2755,7 @@ logical error
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
!$OMP ENDDO
|
!$OMP ENDDO
|
||||||
|
!$OMP BARRIER
|
||||||
|
|
||||||
! --- UPDATE SOME ADDITIONAL VARIABLES THAT ARE NEEDED FOR NONLOCAL MATERIAL ---
|
! --- UPDATE SOME ADDITIONAL VARIABLES THAT ARE NEEDED FOR NONLOCAL MATERIAL ---
|
||||||
! --- we use crystallite_orientation from above, so need a seperate loop
|
! --- we use crystallite_orientation from above, so need a seperate loop
|
||||||
|
|
Loading…
Reference in New Issue