/[MITgcm]/MITgcm/eesupp/src/bar_check.F
ViewVC logotype

Contents of /MITgcm/eesupp/src/bar_check.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1 - (show annotations) (download)
Sat Jul 29 20:57:53 2006 UTC (17 years, 10 months ago) by jmc
Branch: MAIN
add new S/R to check multi-threaded barrier synchronization

1 C $Header: /u/gcmpack/MITgcm/eesupp/src/bar2.F,v 1.6 2005/11/07 18:16:08 cnh Exp $
2 C $Name: $
3 #include "CPP_EEOPTIONS.h"
4
5 CBOP
6 C !ROUTINE: BAR_CHECK
7
8 C !INTERFACE:
9 SUBROUTINE BAR_CHECK( barrierId, myThid )
10
11 C !DESCRIPTION:
12 C *=====================================================================*
13 C | SUBROUTINE BAR\_CHECK
14 C | o Check threads synchronization in the barrier calling sequence
15 C *=====================================================================*
16 C | o Apply double BARRIER and check that all threads get the same
17 C | barrierId.
18 C *=====================================================================*
19
20 C !USES:
21 IMPLICIT NONE
22 C == Global variables ==
23 #include "SIZE.h"
24 #include "EEPARAMS.h"
25 C == Local common block ==
26 INTEGER barStatus(nSx,nSy)
27 COMMON / BAR_CHECH_SYNCHRO / barStatus
28
29 C !INPUT/OUTPUT PARAMETERS:
30 C == Routine arguments ==
31 C barrierId :: barrier identificator of this instance of BAR_CHECK
32 C myThid :: Thread number of this instance of BAR_CHECK
33 INTEGER barrierId
34 INTEGER myThid
35
36 C !LOCAL VARIABLES:
37 C == Local variables ==
38 C bi,bj :: tile indices
39 C msgBuf :: Informational/error meesage buffer
40 INTEGER bi,bj
41 CHARACTER*(MAX_LEN_MBUF) msgBuf
42 LOGICAL flag
43 CEOP
44
45 IF ( barrierId .NE. 0 ) THEN
46 C- Only do checking when barrierId is non-zero
47
48 C- Set barStatus to barrierId :
49 DO bj = myByLo(myThid), myByHi(myThid)
50 DO bi = myBxLo(myThid), myBxHi(myThid)
51 barStatus(bi,bj) = barrierId
52 ENDDO
53 ENDDO
54 C- Synchro
55 _BARRIER
56 C- Check that all threads have the same barStatus
57 flag = .FALSE.
58 DO bj = 1,nSy
59 DO bi = 1,nSx
60 flag = flag .OR. (barStatus(bi,bj).NE.barrierId)
61 ENDDO
62 ENDDO
63 IF ( flag ) THEN
64 WRITE(msgBuf,'(A,I4,A,I8)') 'BAR_CHECK: thread', myThid,
65 & ' out of Sync when reaching barrierId=', barrierId
66 CALL PRINT_ERROR( msgBuf, 1 )
67 WRITE(0,*) myThid, barrierId, 'barStatus=', barStatus
68 STOP ' BAR_CHECK: OUT OF SYNC'
69 ENDIF
70
71 ENDIF
72
73 C- Synchro
74 _BARRIER
75
76 RETURN
77 END

  ViewVC Help
Powered by ViewVC 1.1.22