/[MITgcm]/MITgcm/verification/adjustment.cs-32x32x1/code_min/main.F
ViewVC logotype

Contents of /MITgcm/verification/adjustment.cs-32x32x1/code_min/main.F

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


Revision 1.1 - (show annotations) (download)
Tue May 25 20:51:37 2010 UTC (13 years, 11 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64q, checkpoint64p, checkpoint64i, checkpoint64h, checkpoint64k, checkpoint64j, checkpoint64m, checkpoint64l, checkpoint64o, checkpoint64n, checkpoint64a, checkpoint64c, checkpoint64b, checkpoint64e, checkpoint64d, checkpoint64g, checkpoint64f, checkpoint63p, checkpoint63q, checkpoint63r, checkpoint63s, checkpoint63l, checkpoint63m, checkpoint63n, checkpoint63o, checkpoint63h, checkpoint63i, checkpoint63j, checkpoint63k, checkpoint63d, checkpoint63e, checkpoint63f, checkpoint63g, checkpoint63a, checkpoint63b, checkpoint63c, checkpoint64, checkpoint63, checkpoint62k, checkpoint62j, checkpoint62i, checkpoint62h, checkpoint62o, checkpoint62n, checkpoint62m, checkpoint62l, checkpoint62s, checkpoint62r, checkpoint62q, checkpoint62p, checkpoint62w, checkpoint62v, checkpoint62u, checkpoint62t, checkpoint62z, checkpoint62y, checkpoint62x
add "minimal" set-up: just compile eesupp and the 2 pkgs (exch2 & debug)
 which don't need model/src & inc.

1 C $Header: /u/gcmpack/MITgcm/eesupp/src/main.F,v 1.23 2007/12/06 16:30:05 cnh Exp $
2 C $Name: $
3
4 CBOI
5 C
6 C !TITLE: WRAPPER CODE SYNOPSIS
7 C !AUTHORS: mitgcm developers ( support@mitgcm.org )
8 C !AFFILIATION: Massachussetts Institute of Technology
9 C !DATE:
10 C !INTRODUCTION:
11 C Wrapper synopsis and code Routines in the subdirectories under
12 C eesupp/ ( src/ and inc/ ) provide the core framework within which
13 C numerical and ancilliary software of MITgcm operates. The eesupp/
14 C directories provide a collection of software we call {\bf WRAPPER}
15 C ( ({\bf W}rappable {\bf A}pplication {\bf P}aralell {\bf
16 C P}rogramming {\bf E}nvironment {\bf R}esource). The {bf WRAPPER}
17 C provides a generic bootstrapping capability to start applications
18 C in a manner that allows them to exploit single and
19 C multi-processing environments on all present day hardware
20 C platforms (spanning vector SMP systems to distributed memory and
21 C processing cluster systems). Numerical applications must be coded
22 C to fit within the {\bf WRAPPER}. This entails applications
23 C adopting a particular style for declaring data structures
24 C representing grids and values on grids. The {\bf WRAPPER}
25 C currently provides support for grid point models using a single
26 C global indexing system. This is sufficient for latitude-logitude,
27 C cylindrical, and cartesian coordinate configurations. There is
28 C also limited support for composing grids in which no single,
29 C sructured global index can be defined. At present, this support is
30 C limited to specific configurations of projections of a cube onto
31 C the sphere.
32 C
33 C The main functions supported by the current {\bf WRAPPER} code are
34 C \begin{itemize}
35 C \item program startup and termination including
36 C creation/management of multiple threads and/or processes
37 C \item communication and synchronisatioin operations between
38 C multiple processes and/or threads
39 C \item multi-process input and output operations to disk and to
40 C other applications
41 C \end{itemize}
42 C
43 C Multi-process execution assumes the existence of MPI for process
44 C startup and termination. However, MPI does not have to be used for
45 C performance critical operations. Instead, {\bf WRAPPER}
46 C performance critical parallel primitives are implemented to allow
47 C them to bind to different low-level system software
48 C layers. Bindings exist for using {\bf WRAPPER} with portable
49 C systems such as MPI and UNIX System V IPC memory mapping, as well
50 C bindings for high-performance propreitary systems such as Myrinet
51 C GM software and Compaq IMC memory channel technology.
52 C
53 C
54 CEOI
55
56 C-- Get C preprocessor options
57 #include "PACKAGES_CONFIG.h"
58 #include "CPP_EEOPTIONS.h"
59
60 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
61 CBOP
62 C !ROUTINE: MAIN
63
64 C !INTERFACE:
65 PROGRAM MAIN
66 IMPLICIT NONE
67
68 C !DESCRIPTION:
69 C *==========================================================*
70 C | PROGRAM MAIN
71 C | o MAIN wrapper for MITgcm UV implementation.
72 C *==========================================================*
73 C | MAIN controls the "execution environment".
74 C | Its main functions are
75 C | 1. call procedure EEBOOT to perform execution environment
76 C | initialisation.
77 C | 2. call procedure THE\_MODEL\_MAIN once for each concurrent
78 C | thread. THE\_MODEL\_MAIN is the user supplied top-level
79 C | routine.
80 C | 3. call procedure EEDIE to perform execution environment
81 C | shutdown.
82 C *==========================================================*
83
84 C !CALLING SEQUENCE:
85 C
86 C main()
87 C |
88 C |--eeboot() :: WRAPPER initilization
89 C |
90 C |--check_threads() :: Validate multiple thread start up.
91 C |
92 C |--the_model_main() :: Numerical code top-level driver routine
93 C |
94 C |--eedie() :: WRAPPER termination
95
96 C !USES:
97 C == Global variables ==
98 C Include all the "shared" data here. That means all common
99 C blocks used in the model. On many implementations this is not
100 C necessary but doing this is the safest method.
101 #include "SIZE.h"
102 #include "EEPARAMS.h"
103 #include "EESUPPORT.h"
104 #ifdef HAVE_SIGREG
105 #include "SIGREG.h"
106 #endif
107
108 C !LOCAL VARIABLES:
109 C-- Local variables
110 INTEGER myThid
111 INTEGER I
112
113 #ifdef USE_OMP_THREADING
114 INTEGER OMP_GET_THREAD_NUM
115 EXTERNAL OMP_GET_THREAD_NUM
116 #endif
117
118 CEOP
119
120 #ifdef USE_GSL_IEEE
121 call fgsl_ieee_env_setup ()
122 #endif
123
124 C-- Set up the execution environment
125 C EEBOOT loads a execution environment parameter file
126 C ( called "eedata" by default ) and sets variables
127 C accordingly.
128 CALL EEBOOT
129
130 C-- Trap errors
131 IF ( eeBootError ) THEN
132 fatalError = .TRUE.
133 GOTO 999
134 ENDIF
135
136 #ifdef HAVE_SETRLSTK
137 IF (useSETRLSTK) THEN
138 CALL setrlstk
139 ENDIF
140 #endif
141
142 #ifdef HAVE_SIGREG
143 IF (useSIGREG) THEN
144 i_got_signal = 0
145 CALL sigreg( i_got_signal )
146 ENDIF
147 #endif
148
149 #ifdef HAVE_PTHREADS
150 C IF (usePTHREADS) THEN
151 CALL PTINIT(nThreads)
152 C ELSE
153 #else
154
155 C-- Start nThreads concurrent threads.
156 C Note: We do a fiddly check here. The check is performed
157 C by CHECK_THREADS. CHECK_THREADS does a count
158 C of all the threads. If after ten seconds it has not
159 C found nThreads threads are running it flags an
160 C error. This traps the case in which the input
161 C parameter nThreads is different from the actual
162 C number of concurrent threads the OS gives us. This
163 C case causes a deadlock if we do not trap it here.
164 #include "MAIN_PDIRECTIVES1.h"
165 DO I=1,nThreads
166 #ifdef USE_OMP_THREADING
167 IF ( OMP_GET_THREAD_NUM() .EQ. I-1 ) THEN
168 #endif
169 myThid = I
170
171 C-- Do check to see if there are nThreads threads running
172 IF ( .NOT. eeBootError ) THEN
173 CALL CHECK_THREADS( myThid )
174 ENDIF
175
176 C-- Invoke nThreads instances of the numerical model
177 IF ( .NOT. eeBootError ) THEN
178 #ifdef ALLOW_ADMTLM
179 CALL ADMTLM_DSVD(myThid)
180 #else
181 WRITE(0,'(3(A,I4))') '-- PId=', myProcId, ' , TId=', myThid,
182 & ' : ===> Skip THE_MODEL_MAIN call <==='
183 c CALL THE_MODEL_MAIN(myThid)
184 #endif
185 ENDIF
186
187 C-- Each threads sets flag indicating it is done
188 threadIsComplete(myThid) = .TRUE.
189 IF ( .NOT. eeBootError ) THEN
190 _BARRIER
191 ENDIF
192 #ifdef USE_OMP_THREADING
193 ENDIF
194 #endif
195 ENDDO
196 #include "MAIN_PDIRECTIVES2.h"
197
198 #endif /* HAVE_PTHREADS */
199
200 999 CONTINUE
201 C-- Shut down execution environment
202 CALL EEDIE
203
204 C-- Write closedown status
205 IF ( fatalError ) THEN
206 STOP 'ABNORMAL END: PROGRAM MAIN'
207 ELSE
208 STOP 'NORMAL END'
209 ENDIF
210 C
211 END
212
213
214 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
215
216 CBOP 0
217 C !ROUTINE: PTREENTRY
218
219 C !INTERFACE:
220 SUBROUTINE PTREENTRY(
221 I myThid )
222
223 C !DESCRIPTION:
224 C Re-entry point for a pthreads-based threading mechanism. The
225 C intent is to produce a threading hack that will work with gcc/g77.
226
227 C !USES:
228 implicit none
229 #include "SIZE.h"
230 #include "EEPARAMS.h"
231 #include "EESUPPORT.h"
232
233 C !INPUT PARAMETERS:
234 integer myThid
235 CEOP
236
237 write(*,*) 'myThid = ', myThid
238 CALL CHECK_THREADS( myThid )
239
240 C CALL THE_MODEL_MAIN(myThid)
241
242 threadIsComplete(myThid) = .TRUE.
243
244 RETURN
245 END
246
247 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|

  ViewVC Help
Powered by ViewVC 1.1.22