Test which checks the omp critical directive by counting up a variable in a parallelized region within a critical section.
2.0
omp critical
INTEGER FUNCTION omp_critical()
IMPLICIT NONE
INTEGER known_sum
INTEGER i,j,myi,myj, sum
COMMON /orphvars/ sum, myi, myj
sum = 0
myi = 0
myj = 500
!$omp parallel
!$omp sections
!$omp section
DO i = 0 , 499
!$omp critical
sum = sum + myi
myi = myi + 1
!$omp end critical
END DO
!$omp section
DO j = 500 , 999
!$omp critical
sum = sum + myj
myj = myj + 1
!$omp end critical
END DO
!$omp end sections
!$omp end parallel
known_sum = 999*1000/2
IF ( known_sum .EQ. sum ) THEN
= 1
ELSE
WRITE (1,*) "Found sum was", sum, "instead", known_sum
= 0
END IF
END