/[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.6 - (hide annotations) (download)
Fri Sep 21 03:54:35 2001 UTC (22 years, 7 months ago) by cnh
Branch: MAIN
CVS Tags: checkpoint46n_post, checkpoint51k_post, checkpoint47e_post, checkpoint52l_pre, checkpoint44e_post, hrcube4, hrcube5, checkpoint46l_post, checkpoint46g_pre, checkpoint47c_post, release1_p13_pre, checkpoint50c_post, checkpoint46f_post, checkpoint52d_pre, checkpoint48e_post, checkpoint50c_pre, checkpoint44f_post, checkpoint46b_post, checkpoint52j_pre, checkpoint43a-release1mods, checkpoint51o_pre, ecco_c50_e32, ecco_c50_e33, ecco_c50_e30, ecco_c50_e31, release1_p13, checkpoint51l_post, checkpoint48i_post, checkpoint46l_pre, checkpoint52l_post, checkpoint52k_post, chkpt44d_post, checkpoint51, checkpoint50, checkpoint52, release1_p8, release1_p9, checkpoint50d_post, release1_p1, release1_p2, release1_p3, release1_p4, release1_p5, release1_p6, release1_p7, checkpoint52f_post, checkpoint50b_pre, checkpoint44e_pre, checkpoint51f_post, release1_b1, ecco_c51_e34d, ecco_c51_e34e, ecco_c51_e34f, ecco_c51_e34g, ecco_c51_e34a, ecco_c51_e34b, ecco_c51_e34c, checkpoint48b_post, checkpoint43, checkpoint51d_post, checkpoint48c_pre, checkpoint47d_pre, checkpoint51t_post, checkpoint51n_post, release1_chkpt44d_post, checkpoint52i_pre, hrcube_1, hrcube_2, hrcube_3, checkpoint51s_post, checkpoint47a_post, checkpoint48d_pre, checkpoint51j_post, checkpoint47i_post, checkpoint52e_pre, release1_p11, checkpoint52e_post, checkpoint51n_pre, checkpoint47d_post, icebear5, icebear4, icebear3, icebear2, checkpoint46d_pre, checkpoint48d_post, release1-branch_tutorials, checkpoint48f_post, checkpoint45d_post, checkpoint52b_pre, checkpoint46j_pre, checkpoint51l_pre, chkpt44a_post, checkpoint44h_pre, checkpoint48h_post, checkpoint51q_post, ecco_c50_e29, checkpoint51b_pre, checkpoint46a_post, checkpoint47g_post, checkpoint52b_post, checkpoint52c_post, checkpoint46j_post, checkpoint51h_pre, checkpoint46k_post, ecco_c50_e28, chkpt44c_pre, checkpoint48a_post, checkpoint45a_post, checkpoint50f_post, checkpoint50a_post, checkpoint50f_pre, checkpoint52f_pre, ecco_c44_e19, ecco_c44_e18, ecco_c44_e17, ecco_c44_e16, release1_p12, release1_p10, release1_p16, release1_p17, release1_p14, release1_p15, checkpoint47j_post, ecco_c50_e33a, branch-exfmods-tag, checkpoint44g_post, branchpoint-genmake2, checkpoint46e_pre, checkpoint51r_post, checkpoint48c_post, checkpoint45b_post, checkpoint46b_pre, checkpoint51i_post, release1-branch-end, release1_final_v1, checkpoint51b_post, checkpoint51c_post, checkpoint46c_pre, checkpoint46, checkpoint47b_post, checkpoint44b_post, ecco_c51_e34, checkpoint46h_pre, checkpoint52d_post, checkpoint46m_post, checkpoint46a_pre, checkpoint50g_post, checkpoint45c_post, ecco_ice2, ecco_ice1, checkpoint44h_post, checkpoint46g_post, release1_p12_pre, checkpoint52a_pre, ecco_c44_e22, checkpoint50h_post, checkpoint52i_post, checkpoint50e_pre, checkpoint50i_post, ecco_c44_e25, checkpoint51i_pre, checkpoint52h_pre, checkpoint52j_post, checkpoint47f_post, checkpoint50e_post, chkpt44a_pre, checkpoint46i_post, ecco_c44_e23, ecco_c44_e20, ecco_c44_e21, ecco_c44_e26, ecco_c44_e27, ecco_c44_e24, checkpoint46c_post, ecco-branch-mod1, ecco-branch-mod2, ecco-branch-mod3, ecco-branch-mod4, ecco-branch-mod5, branch-netcdf, checkpoint50d_pre, checkpoint46e_post, release1_beta1, checkpoint51e_post, checkpoint44b_pre, checkpoint42, checkpoint41, checkpoint47, checkpoint44, checkpoint45, checkpoint48, checkpoint49, checkpoint46h_post, checkpoint51o_post, checkpoint51f_pre, chkpt44c_post, checkpoint48g_post, checkpoint47h_post, checkpoint52a_post, checkpoint44f_pre, checkpoint51g_post, ecco_c52_e35, checkpoint46d_post, checkpoint50b_post, release1-branch_branchpoint, checkpoint51m_post, checkpoint51a_post, checkpoint51p_post, checkpoint51u_post
Branch point for: c24_e25_ice, branch-exfmods-curt, release1_final, release1-branch, branch-genmake2, release1, branch-nonh, tg2-branch, ecco-branch, release1_50yr, netcdf-sm0, icebear, checkpoint51n_branch, release1_coupled
Changes since 1.5: +59 -12 lines
Starting to bring comments up to date and format comments
for document extraction of "prototypes".

1 cnh 1.6 C $Header: /home/ubuntu/mnt/e9_copy/MITgcm/eesupp/src/gsum.F,v 1.6 2001/09/21 03:54:35 cnh Exp $
2     C $Name: $
3 cnh 1.1 #include "CPP_EEOPTIONS.h"
4    
5 cnh 1.6 CBOP
6    
7     C !ROUTINE: GSUM_R8_INIT
8    
9     C !INTERFACE:
10 cnh 1.1 SUBROUTINE GSUM_R8_INIT( myThid )
11 adcroft 1.3 IMPLICIT NONE
12 cnh 1.6
13     C !DESCRIPTION:
14     C *=============================================================================*
15     C | SUBROUTINE GSUM_R8_INIT
16     C | o Setup data structures for global sum.
17     C *=============================================================================*
18     C | Fast true shared memory form for global sum operation.
19     C *=============================================================================*
20    
21     C !USES:
22 cnh 1.1 #include "SIZE.h"
23     #include "EEPARAMS.h"
24     #include "EESUPPORT.h"
25 cnh 1.6 C GSR8_value :: Global data for accumulating sum elements.
26     C GSR8_level :: Cyclic buffer index into global data sum elements.
27 cnh 1.1 COMMON /GS_R8_BUFFER_R/
28     & GSR8_value
29     Real*8 GSR8_value(lShare8,MAX_NO_THREADS)
30     #define _NOT_SET_ 1.23456D12
31     COMMON /GS_R8_BUFFER_I/
32     & GSR8_level
33     INTEGER GSR8_level
34 cnh 1.6
35     C !INPUT PARAMETERS:
36     C myThid :: Thread number of this instance.
37 cnh 1.1 INTEGER myThid
38 cnh 1.6
39     C !LOCAL VARIABLES:
40     C I :: Loop counter.
41 cnh 1.1 INTEGER I
42 cnh 1.6 CEOP
43 cnh 1.1 GSR8_level = 1
44     DO I = 1, lShare8
45     GSR8_value(I,myThid) = _NOT_SET_
46     ENDDO
47     C
48     RETURN
49     END
50 cnh 1.6
51     CBOP
52     C !ROUTINE: GSUM_R8
53    
54     C !INTERFACE:
55 cnh 1.1 SUBROUTINE GSUM_R8( myPhi, answer, myThid )
56 adcroft 1.3 IMPLICIT NONE
57 cnh 1.6 C !DESCRIPTION:
58     C *=============================================================================*
59     C | SUBROUTINE GSUM_R8
60     C | o Perform global sum.
61     C *=============================================================================*
62     C | Fast true shared memory form for global sum operation.
63     C *=============================================================================*
64     C !USES:
65 cnh 1.1 #include "SIZE.h"
66     #include "EEPARAMS.h"
67     #include "EESUPPORT.h"
68 cnh 1.6 C GSR8_value :: Global data for accumulating sum elements.
69     C GSR8_level :: Cyclic buffer index into global data sum elements.
70     COMMON /GS_R8_BUFFER_R/
71     & GSR8_value
72     Real*8 GSR8_value(lShare8,MAX_NO_THREADS)
73     #define _NOT_SET_ 1.23456D12
74     COMMON /GS_R8_BUFFER_I/
75     & GSR8_level
76     INTEGER GSR8_level
77 cnh 1.1 C
78 cnh 1.6
79     C !INPUT/OUTPUT PARAMETERS:
80     C myPhi :: This threads contribution
81     C answer :: Result of sum over all threads
82     C myThid :: This threads id number
83 cnh 1.1 Real*8 myPhi
84     Real*8 answer
85     INTEGER myThid
86     #ifdef ALLOW_USE_MPI
87     Real*8 tmp, sumPhi
88     INTEGER mpiRc
89     #endif
90     C
91 cnh 1.6 C !LOCAL VARIABLES:
92     C nDone :: Counter for number of threads completed.
93     C I :: Loop counter.
94     C curLev :: Cyclic global sum buffer levels.
95     C prevLev
96 cnh 1.1 INTEGER nDone
97     INTEGER I
98     INTEGER curLev, prevLev
99     C
100 cnh 1.6 CEOP
101 cnh 1.1
102     C answer = 1.
103     C CALL BAR2(myThid)
104     C CALL BAR2(myThid)
105     C CALL BAR2(myThid)
106     C RETURN
107     C
108     IF ( myThid .NE. 1 ) THEN
109    
110     curLev = GSR8_level
111     GSR8_value(curLev,myThid) = myPhi
112     10 CONTINUE
113     IF ( GSR8_value(curLev,1) .NE. _NOT_SET_ ) GOTO 11
114     CALL FOOL_THE_COMPILER( GSR8_value )
115     GOTO 10
116     11 CONTINUE
117     GSR8_value(curLev,myThid) = _NOT_SET_
118     answer = GSR8_value(curLev,1)
119    
120     ELSE
121    
122     curLev = GSR8_level
123     prevLev = curLev+1
124     IF ( prevLev .GT. 2 ) prevLev = 1
125    
126     12 CONTINUE
127     CALL FOOL_THE_COMPILER( GSR8_value )
128     nDone = 1
129     DO I = 2, nThreads
130     IF ( GSR8_value(curLev,I) .NE. _NOT_SET_ ) nDone = nDone+1
131     ENDDO
132     IF ( nDone .LT. nThreads ) GOTO 12
133    
134     GSR8_level = prevLev
135     CALL FOOL_THE_COMPILER( GSR8_value )
136     GSR8_value(prevLev,1) = _NOT_SET_
137    
138     answer = myPhi
139     DO I = 2,nThreads
140     answer = answer+GSR8_value(curLev,I)
141     ENDDO
142    
143     #ifdef ALLOW_USE_MPI
144     #ifndef ALWAYS_USE_MPI
145     IF ( usingMPI ) THEN
146     #endif
147     tmp = answer
148     CALL MPI_Allreduce(tmp,sumPhi,1,MPI_DOUBLE_PRECISION,MPI_SUM,
149 adcroft 1.2 & MPI_COMM_MODEL,mpiRC)
150 cnh 1.1 answer = sumPhi
151     #ifndef ALWAYS_USE_MPI
152     ENDIF
153     #endif
154     #endif /* ALLOW_USE_MPI */
155    
156     GSR8_value(curLev,1) = answer
157    
158     ENDIF
159     C
160     RETURN
161     END

  ViewVC Help
Powered by ViewVC 1.1.22