blob: 892dd2b767c020564a25c6a074c1053df78ae817 [file] [log] [blame]
Jim Cownie18d84732014-05-10 17:02:09 +00001<ompts:test>
2<ompts:testdescription>Test which checks the omp critical directive by counting up a variable in a parallelized region within a critical section.
3
4</ompts:testdescription>
5<ompts:ompversion>2.0</ompts:ompversion>
6<ompts:directive>omp critical</ompts:directive>
7<ompts:testcode>
8 INTEGER FUNCTION <ompts:testcode:functionname>omp_critical</ompts:testcode:functionname>()
9 IMPLICIT NONE
10 INTEGER known_sum
11 <ompts:orphan:vars>
12 INTEGER i,j,myi,myj, sum
13 COMMON /orphvars/ sum, myi, myj
14 </ompts:orphan:vars>
15 sum = 0
16 myi = 0
17 myj = 500
18!$omp parallel
19!$omp sections
20
21!$omp section
22 DO i = 0 , 499
23 <ompts:orphan>
24 <ompts:check>
25!$omp critical
26 </ompts:check>
27 sum = sum + myi
28 myi = myi + 1
29 <ompts:check>
30!$omp end critical
31 </ompts:check>
32 </ompts:orphan>
33 END DO
34
35!$omp section
36 DO j = 500 , 999
37 <ompts:orphan>
38 <ompts:check>
39!$omp critical
40 </ompts:check>
41 sum = sum + myj
42 myj = myj + 1
43 <ompts:check>
44!$omp end critical
45 </ompts:check>
46 </ompts:orphan>
47 END DO
48!$omp end sections
49!$omp end parallel
50 known_sum = 999*1000/2
51 IF ( known_sum .EQ. sum ) THEN
52 <testfunctionname></testfunctionname> = 1
53 ELSE
54 WRITE (1,*) "Found sum was", sum, "instead", known_sum
55 <testfunctionname></testfunctionname> = 0
56 END IF
57 END
58</ompts:testcode>
59</ompts:test>