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

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

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


Revision 1.2 - (hide 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 cnh 1.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 adcroft 1.2 & MPI_COMM_MODEL,mpiRC)
102 cnh 1.1 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