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

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

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


Revision 1.9 - (hide annotations) (download)
Fri Sep 21 03:54:35 2001 UTC (22 years, 8 months ago) by cnh
Branch: MAIN
CVS Tags: checkpoint46n_post, checkpoint51k_post, checkpoint47e_post, checkpoint44e_post, checkpoint46l_post, checkpoint46g_pre, checkpoint47c_post, release1_p13_pre, checkpoint50c_post, checkpoint46f_post, checkpoint52d_pre, checkpoint48e_post, checkpoint50c_pre, checkpoint44f_post, checkpoint46b_post, checkpoint43a-release1mods, checkpoint51o_pre, ecco_c50_e32, ecco_c50_e33, ecco_c50_e30, ecco_c50_e31, release1_p13, checkpoint51l_post, checkpoint48i_post, checkpoint46l_pre, 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, 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, checkpoint51s_post, checkpoint47a_post, checkpoint48d_pre, checkpoint51j_post, checkpoint47i_post, release1_p11, 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, 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, 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, checkpoint50e_pre, checkpoint50i_post, ecco_c44_e25, checkpoint51i_pre, 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.8: +56 -41 lines
Starting to bring comments up to date and format comments
for document extraction of "prototypes".

1 cnh 1.9 C $Header: /u/gcmpack/models/MITgcmUV/eesupp/src/global_max.F,v 1.8 2001/05/29 14:01:36 adcroft Exp $
2 adcroft 1.8 C $Name: $
3 cnh 1.1
4     C-- File global_max.F: Routines that perform global max reduction on an array
5     C of thread values.
6     C Contents
7     C o global_max_r4
8     C o global_max_r8
9     #include "CPP_EEOPTIONS.h"
10    
11 cnh 1.9 CBOP
12    
13     C !ROUTINE: GLOBAL_MAX_R4
14    
15     C !INTERFACE:
16 cnh 1.1 SUBROUTINE GLOBAL_MAX_R4(
17 adcroft 1.6 U maxPhi,
18 cnh 1.1 I myThid )
19 adcroft 1.6 IMPLICIT NONE
20 cnh 1.9 C !DESCRIPTION:
21     C *==========================================================*
22     C | SUBROUTINE GLOBAL_MAX_R4
23     C | o Handle max for real*4 data.
24     C *==========================================================*
25     C | Perform max on array of one value per thread and then
26     C | max result of all the processes.
27     C | Notes
28     C | =====
29     C | Within a process only one thread does the max, each
30     C | thread is assumed to have already maxed its local data.
31     C | The same thread also does the inter-process max for
32     C | example with MPI and then writes the result into a shared
33     C | location. All threads wait until the max is avaiailable.
34     C *==========================================================*
35 cnh 1.1
36 cnh 1.9 C !USES:
37 cnh 1.1 C == Global data ==
38     #include "SIZE.h"
39     #include "EEPARAMS.h"
40     #include "EESUPPORT.h"
41 adcroft 1.8 #include "GLOBAL_MAX.h"
42 cnh 1.1
43 cnh 1.9 C !INPUT/OUTPUT PARAMETERS:
44 cnh 1.1 C == Routine arguments ==
45 cnh 1.9 C maxPhi :: Result of max.
46     C myThid :: My thread id.
47 cnh 1.1 Real*4 maxPhi
48     INTEGER myThid
49    
50 cnh 1.9 C !LOCAL VARIABLES:
51 cnh 1.1 C == Local variables ==
52 cnh 1.9 C I :: Loop counters
53     C mpiRC :: MPI return code
54 cnh 1.1 INTEGER I
55     Real*4 tmp
56     #ifdef ALLOW_USE_MPI
57     INTEGER mpiRC
58     #endif /* ALLOW_USE_MPI */
59 cnh 1.9 CEOP
60 cnh 1.1
61 adcroft 1.8 CALL BAR2( myThid )
62 adcroft 1.6 C-- write local max into array
63 adcroft 1.8 phiGMRS(1,myThid) = maxPhi
64 adcroft 1.6
65 cnh 1.4 C-- Can not start until everyone is ready
66 adcroft 1.8 CALL BAR2( myThid )
67 cnh 1.1
68     C-- Max within the process first
69     _BEGIN_MASTER( myThid )
70 adcroft 1.8 tmp = phiGMRS(1,1)
71 cnh 1.1 DO I=2,nThreads
72 adcroft 1.8 tmp = MAX(tmp,phiGMRS(1,I))
73 cnh 1.1 ENDDO
74     maxPhi = tmp
75     #ifdef ALLOW_USE_MPI
76     #ifndef ALWAYS_USE_MPI
77     IF ( usingMPI ) THEN
78     #endif
79     CALL MPI_Allreduce(tmp,maxPhi,1,MPI_REAL,MPI_MAX,
80 adcroft 1.6 & MPI_COMM_WORLD,mpiRC)
81 cnh 1.1 #ifndef ALWAYS_USE_MPI
82     ENDIF
83     #endif
84     #endif /* ALLOW_USE_MPI */
85 adcroft 1.8 phiGMRS(1,1) = maxPhi
86 cnh 1.1 _END_MASTER( myThid )
87     C--
88 adcroft 1.8 CALL BAR2( myThid )
89 adcroft 1.6
90     C-- set result for every process
91 adcroft 1.8 maxPhi = phiGMRS(1,1)
92     CALL BAR2( myThid )
93 adcroft 1.6
94 cnh 1.1 RETURN
95     END
96    
97 cnh 1.9 CBOP
98    
99     C !ROUTINE: GLOBAL_MAX_R8
100 cnh 1.1
101 cnh 1.9 C !INTERFACE:
102 cnh 1.1 SUBROUTINE GLOBAL_MAX_R8(
103     O maxPhi,
104     I myThid )
105 adcroft 1.6 IMPLICIT NONE
106 cnh 1.9 C !DESCRIPTION:
107     C *==========================================================*
108     C | SUBROUTINE GLOBAL_MAX_R8
109     C | o Handle max for real*8 data.
110     C *==========================================================*
111     C | Perform max on array of one value per thread and then
112     C | max result of all the processes.
113     C | Notes
114     C | =====
115     C | Within a process only one thread does the max, each
116     C | thread is assumed to have already maxed its local data.
117     C | The same thread also does the inter-process max for
118     C | example with MPI and then writes the result into a shared
119     C | location. All threads wait until the max is avaiailable.
120     C *==========================================================*
121 cnh 1.1
122 cnh 1.9 C !USES:
123 cnh 1.1 C === Global data ===
124     #include "SIZE.h"
125     #include "EEPARAMS.h"
126     #include "EESUPPORT.h"
127 adcroft 1.8 #include "GLOBAL_MAX.h"
128 cnh 1.1
129 cnh 1.9 C !INPUT/OUTPUT PARAMETERS:
130 cnh 1.1 C === Routine arguments ===
131 cnh 1.9 C maxPhi :: Result of max.
132     C myThid :: My thread id.
133 cnh 1.1 Real*8 maxPhi
134     INTEGER myThid
135    
136 cnh 1.9 C !LOCAL VARIABLES:
137 cnh 1.1 C === Local variables ===
138 cnh 1.9 C I :: Loop counters
139     C mpiRC :: MPI return code
140 cnh 1.1 INTEGER I
141     Real*8 tmp
142     #ifdef ALLOW_USE_MPI
143     INTEGER mpiRC
144     #endif /* ALLOW_USE_MPI */
145 cnh 1.9 CEOP
146 cnh 1.1
147 adcroft 1.8 CALL BAR2( myThid )
148 adcroft 1.6 C-- write local max into array
149 adcroft 1.8 phiGMRL(1,myThid) = maxPhi
150 adcroft 1.6
151 cnh 1.4 C-- Can not start until everyone is ready
152 adcroft 1.8 CALL BAR2( myThid )
153 cnh 1.1
154     C-- Max within the process first
155     _BEGIN_MASTER( myThid )
156 adcroft 1.8 tmp = phiGMRL(1,1)
157 cnh 1.1 DO I=2,nThreads
158 adcroft 1.8 tmp = MAX(tmp,phiGMRL(1,I))
159 cnh 1.1 ENDDO
160     maxPhi = tmp
161     #ifdef ALLOW_USE_MPI
162     #ifndef ALWAYS_USE_MPI
163     IF ( usingMPI ) THEN
164     #endif
165     CALL MPI_Allreduce(tmp,maxPhi,1,MPI_DOUBLE_PRECISION,MPI_MAX,
166 adcroft 1.6 & MPI_COMM_WORLD,mpiRC)
167 cnh 1.1 #ifndef ALWAYS_USE_MPI
168     ENDIF
169     #endif
170     #endif /* ALLOW_USE_MPI */
171     C-- Write solution to place where all threads can see it
172 adcroft 1.8 phiGMRL(1,1) = maxPhi
173 cnh 1.1 _END_MASTER( myThid )
174    
175 cnh 1.4 C-- Do not leave until we are sure that the max is done
176 adcroft 1.8 CALL BAR2( myThid )
177 adcroft 1.6
178     C-- set result for every process
179 adcroft 1.8 maxPhi = phiGMRL(1,1)
180     CALL BAR2( myThid )
181 adcroft 1.6
182 cnh 1.1 RETURN
183     END

  ViewVC Help
Powered by ViewVC 1.1.22