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

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

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


Revision 1.2 - (show annotations) (download)
Mon Mar 22 17:37:43 1999 UTC (25 years, 2 months ago) by adcroft
Branch: MAIN
CVS Tags: checkpoint20, checkpoint21
Changes since 1.1: +1 -1 lines
Modified MPI calls to allow use in "coupled" context.
 o created COMMON block to contain MPI communicator MPI_COMM_MODEL
 o globally replaced MPI_COMM_World with MPI_COMM_MODEL
 o set MPI_COMM_MODEL equal to MPI_COMM_World in eeboot_minimal.F

1 #include "CPP_EEOPTIONS.h"
2
3 SUBROUTINE GSUM_R8_INIT( myThid )
4 C
5 #include "SIZE.h"
6 #include "EEPARAMS.h"
7 #include "EESUPPORT.h"
8 C
9 COMMON /GS_R8_BUFFER_R/
10 & GSR8_value
11 Real*8 GSR8_value(lShare8,MAX_NO_THREADS)
12 #define _NOT_SET_ 1.23456D12
13 COMMON /GS_R8_BUFFER_I/
14 & GSR8_level
15 INTEGER GSR8_level
16 C
17 INTEGER myThid
18 INTEGER I
19 C
20 GSR8_level = 1
21 DO I = 1, lShare8
22 GSR8_value(I,myThid) = _NOT_SET_
23 ENDDO
24 C
25 RETURN
26 END
27 SUBROUTINE GSUM_R8( myPhi, answer, myThid )
28 C
29 #include "SIZE.h"
30 #include "EEPARAMS.h"
31 #include "EESUPPORT.h"
32 C
33 Real*8 myPhi
34 Real*8 answer
35 INTEGER myThid
36 #ifdef ALLOW_USE_MPI
37 Real*8 tmp, sumPhi
38 INTEGER mpiRc
39 #endif
40 C
41 INTEGER myCount
42 INTEGER nDone
43 INTEGER I
44 INTEGER curLev, prevLev
45 C
46 COMMON /GS_R8_BUFFER_R/
47 & GSR8_value
48 Real*8 GSR8_value(lShare8,MAX_NO_THREADS)
49 #define _NOT_SET_ 1.23456D12
50 COMMON /GS_R8_BUFFER_I/
51 & GSR8_level
52 INTEGER GSR8_level
53
54 C answer = 1.
55 C CALL BAR2(myThid)
56 C CALL BAR2(myThid)
57 C CALL BAR2(myThid)
58 C RETURN
59 C
60 IF ( myThid .NE. 1 ) THEN
61
62 curLev = GSR8_level
63 GSR8_value(curLev,myThid) = myPhi
64 10 CONTINUE
65 IF ( GSR8_value(curLev,1) .NE. _NOT_SET_ ) GOTO 11
66 CALL FOOL_THE_COMPILER( GSR8_value )
67 GOTO 10
68 11 CONTINUE
69 GSR8_value(curLev,myThid) = _NOT_SET_
70 answer = GSR8_value(curLev,1)
71
72 ELSE
73
74 curLev = GSR8_level
75 prevLev = curLev+1
76 IF ( prevLev .GT. 2 ) prevLev = 1
77
78 12 CONTINUE
79 CALL FOOL_THE_COMPILER( GSR8_value )
80 nDone = 1
81 DO I = 2, nThreads
82 IF ( GSR8_value(curLev,I) .NE. _NOT_SET_ ) nDone = nDone+1
83 ENDDO
84 IF ( nDone .LT. nThreads ) GOTO 12
85
86 GSR8_level = prevLev
87 CALL FOOL_THE_COMPILER( GSR8_value )
88 GSR8_value(prevLev,1) = _NOT_SET_
89
90 answer = myPhi
91 DO I = 2,nThreads
92 answer = answer+GSR8_value(curLev,I)
93 ENDDO
94
95 #ifdef ALLOW_USE_MPI
96 #ifndef ALWAYS_USE_MPI
97 IF ( usingMPI ) THEN
98 #endif
99 tmp = answer
100 CALL MPI_Allreduce(tmp,sumPhi,1,MPI_DOUBLE_PRECISION,MPI_SUM,
101 & MPI_COMM_MODEL,mpiRC)
102 answer = sumPhi
103 #ifndef ALWAYS_USE_MPI
104 ENDIF
105 #endif
106 #endif /* ALLOW_USE_MPI */
107
108 GSR8_value(curLev,1) = answer
109
110 ENDIF
111 C
112 RETURN
113 END

  ViewVC Help
Powered by ViewVC 1.1.22