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

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

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

revision 1.7 by cnh, Sun Feb 4 14:38:43 2001 UTC revision 1.9 by cnh, Fri Sep 21 03:54:35 2001 UTC
# Line 8  C      o global_max_r4 Line 8  C      o global_max_r4
8  C      o global_max_r8  C      o global_max_r8
9  #include "CPP_EEOPTIONS.h"  #include "CPP_EEOPTIONS.h"
10    
11  CStartOfInterface  CBOP
12    
13    C     !ROUTINE: GLOBAL_MAX_R4
14    
15    C     !INTERFACE:
16        SUBROUTINE GLOBAL_MAX_R4(        SUBROUTINE GLOBAL_MAX_R4(
17       U                       maxPhi,       U                       maxPhi,
18       I                       myThid )       I                       myThid )
 C     /==========================================================\  
 C     | SUBROUTINE GLOBAL_MAX_R4                                 |  
 C     | o Handle max for real*4 data.                            |  
 C     |==========================================================|  
 C     | Perform max on array of one value per thread and then    |  
 C     | max result of all the processes.                         |  
 C     | Notes                                                    |  
 C     | =====                                                    |  
 C     | Within a process only one thread does the max, each      |  
 C     | thread is assumed to have already maxed  its local data. |  
 C     | The same thread also does the inter-process max for      |  
 C     | example with MPI and then writes the result into a shared|  
 C     | location. All threads wait until the max is avaiailable. |  
 C     \==========================================================/  
19        IMPLICIT NONE        IMPLICIT NONE
20    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    
36    C     !USES:
37  C     == Global data ==  C     == Global data ==
38  #include "SIZE.h"  #include "SIZE.h"
39  #include "EEPARAMS.h"  #include "EEPARAMS.h"
40  #include "EESUPPORT.h"  #include "EESUPPORT.h"
41    #include "GLOBAL_MAX.h"
42    
43    C     !INPUT/OUTPUT PARAMETERS:
44  C     == Routine arguments ==  C     == Routine arguments ==
45  C     maxPhi - Result of max.  C     maxPhi :: Result of max.
46  C     myThid - My thread id.  C     myThid :: My thread id.
47        Real*4 maxPhi        Real*4 maxPhi
48        INTEGER myThid        INTEGER myThid
 CEndOfInterface  
49    
50    C     !LOCAL VARIABLES:
51  C     == Local variables ==  C     == Local variables ==
52  C     phi    - Array to be maxed.  C     I      :: Loop counters
53  C     I      - Loop counters  C     mpiRC  :: MPI return code
 C     mpiRC  - MPI return code  
       Real*4 phi(lShare4,MAX_NO_THREADS)  
54        INTEGER I        INTEGER I
55        Real*4  tmp        Real*4  tmp
56  #ifdef   ALLOW_USE_MPI  #ifdef   ALLOW_USE_MPI
57        INTEGER mpiRC        INTEGER mpiRC
58  #endif /* ALLOW_USE_MPI */  #endif /* ALLOW_USE_MPI */
59    CEOP
60    
61          CALL BAR2( myThid )
62  C--   write local max into array  C--   write local max into array
63        phi(1,myThid) = maxPhi        phiGMRS(1,myThid) = maxPhi
64    
65  C--   Can not start until everyone is ready  C--   Can not start until everyone is ready
66        _BARRIER        CALL BAR2( myThid )
67    
68  C--   Max within the process first  C--   Max within the process first
69        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
70         tmp = phi(1,1)         tmp = phiGMRS(1,1)
71         DO I=2,nThreads         DO I=2,nThreads
72          tmp = MAX(tmp,phi(1,I))          tmp = MAX(tmp,phiGMRS(1,I))
73         ENDDO         ENDDO
74         maxPhi = tmp         maxPhi = tmp
75  #ifdef  ALLOW_USE_MPI  #ifdef  ALLOW_USE_MPI
# Line 74  C--   Max within the process first Line 82  C--   Max within the process first
82         ENDIF         ENDIF
83  #endif  #endif
84  #endif /*  ALLOW_USE_MPI */  #endif /*  ALLOW_USE_MPI */
85         phi(1,1) = maxPhi         phiGMRS(1,1) = maxPhi
86        _END_MASTER( myThid )        _END_MASTER( myThid )
87  C--  C--
88        _BARRIER        CALL BAR2( myThid )
89    
90  C--   set result for every process  C--   set result for every process
91        maxPhi = phi(1,1)        maxPhi = phiGMRS(1,1)
92          CALL BAR2( myThid )
93    
94        RETURN        RETURN
95        END        END
96                
97    CBOP
98    
99    C     !ROUTINE: GLOBAL_MAX_R8
100    
101  CStartOfInterface  C     !INTERFACE:
102        SUBROUTINE GLOBAL_MAX_R8(        SUBROUTINE GLOBAL_MAX_R8(
103       O                       maxPhi,       O                       maxPhi,
104       I                       myThid )       I                       myThid )
 C     /==========================================================\  
 C     | SUBROUTINE GLOBAL_MAX_R8                                 |  
 C     | o Handle max for real*8 data.                            |  
 C     |==========================================================|  
 C     | Perform max on array of one value per thread and then    |  
 C     | max result of all the processes.                         |  
 C     | Notes                                                    |  
 C     | =====                                                    |  
 C     | Within a process only one thread does the max, each      |  
 C     | thread is assumed to have already maxed  its local data. |  
 C     | The same thread also does the inter-process max for      |  
 C     | example with MPI and then writes the result into a shared|  
 C     | location. All threads wait until the max is avaiailable. |  
 C     \==========================================================/  
105        IMPLICIT NONE        IMPLICIT NONE
106    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    
122    C     !USES:
123  C     === Global data ===  C     === Global data ===
124  #include "SIZE.h"  #include "SIZE.h"
125  #include "EEPARAMS.h"  #include "EEPARAMS.h"
126  #include "EESUPPORT.h"  #include "EESUPPORT.h"
127    #include "GLOBAL_MAX.h"
128    
129    C     !INPUT/OUTPUT PARAMETERS:
130  C     === Routine arguments ===  C     === Routine arguments ===
131  C     maxPhi - Result of max.  C     maxPhi :: Result of max.
132  C     myThid - My thread id.  C     myThid :: My thread id.
133        Real*8 maxPhi        Real*8 maxPhi
134        INTEGER myThid        INTEGER myThid
 CEndOfInterface  
135    
136    C     !LOCAL VARIABLES:
137  C     === Local variables ===  C     === Local variables ===
138  C     phi    - Array to be maxed.  C     I      :: Loop counters
139  C     I      - Loop counters  C     mpiRC  :: MPI return code
 C     mpiRC  - MPI return code  
       Real*8 phi(lShare8,MAX_NO_THREADS)  
140        INTEGER I        INTEGER I
141        Real*8  tmp        Real*8  tmp
142  #ifdef   ALLOW_USE_MPI  #ifdef   ALLOW_USE_MPI
143        INTEGER mpiRC        INTEGER mpiRC
144  #endif   /* ALLOW_USE_MPI */  #endif   /* ALLOW_USE_MPI */
145    CEOP
146    
147          CALL BAR2( myThid )
148  C--   write local max into array  C--   write local max into array
149        phi(1,myThid) = maxPhi        phiGMRL(1,myThid) = maxPhi
150    
151  C--   Can not start until everyone is ready  C--   Can not start until everyone is ready
152        _BARRIER        CALL BAR2( myThid )
153    
154  C--   Max within the process first  C--   Max within the process first
155        _BEGIN_MASTER( myThid )        _BEGIN_MASTER( myThid )
156         tmp = phi(1,1)         tmp = phiGMRL(1,1)
157         DO I=2,nThreads         DO I=2,nThreads
158          tmp = MAX(tmp,phi(1,I))          tmp = MAX(tmp,phiGMRL(1,I))
159         ENDDO         ENDDO
160         maxPhi = tmp         maxPhi = tmp
161  #ifdef  ALLOW_USE_MPI  #ifdef  ALLOW_USE_MPI
# Line 153  C--   Max within the process first Line 169  C--   Max within the process first
169  #endif  #endif
170  #endif /*  ALLOW_USE_MPI */  #endif /*  ALLOW_USE_MPI */
171  C--     Write solution to place where all threads can see it  C--     Write solution to place where all threads can see it
172          phi(1,1) = maxPhi          phiGMRL(1,1) = maxPhi
173        _END_MASTER( myThid )        _END_MASTER( myThid )
174    
175  C--   Do not leave until we are sure that the max is done  C--   Do not leave until we are sure that the max is done
176        _BARRIER        CALL BAR2( myThid )
177    
178  C--   set result for every process  C--   set result for every process
179        maxPhi = phi(1,1)        maxPhi = phiGMRL(1,1)
180          CALL BAR2( myThid )
181    
182        RETURN        RETURN
183        END        END

Legend:
Removed from v.1.7  
changed lines
  Added in v.1.9

  ViewVC Help
Powered by ViewVC 1.1.22