/[MITgcm]/MITgcm/model/src/main_do_loop.F
ViewVC logotype

Contents of /MITgcm/model/src/main_do_loop.F

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


Revision 1.1 - (show annotations) (download)
Wed Feb 20 00:50:24 2013 UTC (11 years, 3 months ago) by heimbach
Branch: MAIN
Reorganize S/R call for overall time-stepping loop to facilitate
OpenAD revolve loop replacement
(new S/R main_do_loop.F)

1 C $Header: $
2 C $Name: $
3
4 #include "PACKAGES_CONFIG.h"
5 #include "CPP_OPTIONS.h"
6 #ifdef ALLOW_OBCS
7 # include "OBCS_OPTIONS.h"
8 #endif
9 #ifdef ALLOW_SEAICE
10 # include "SEAICE_OPTIONS.h"
11 #endif
12 #ifdef ALLOW_GENERIC_ADVDIFF
13 # include "GAD_OPTIONS.h"
14 #endif
15 #ifdef ALLOW_GMREDI
16 # include "GMREDI_OPTIONS.h"
17 #endif
18 #ifdef ALLOW_STREAMICE
19 # include "STREAMICE_OPTIONS.h"
20 #endif
21 #ifdef ALLOW_GGL90
22 # include "GGL90_OPTIONS.h"
23 #endif
24 #ifdef ALLOW_EXF
25 # include "EXF_OPTIONS.h"
26 #endif
27 #ifdef ALLOW_CTRL
28 # include "CTRL_OPTIONS.h"
29 #endif
30
31 CBOP
32 C !ROUTINE: MAIN_DO_LOOP
33 C !INTERFACE:
34 SUBROUTINE MAIN_DO_LOOP( myThid )
35
36 C !DESCRIPTION: \bv
37 C *================================================================*
38 C | SUBROUTINE the_loop_body
39 C | o Run the ocean model and evaluate the specified cost function.
40 C *================================================================*
41 C |
42 C | MAIN_DO_LOOP is the toplevel routine for the Tangent Linear and
43 C | Adjoint Model Compiler (TAMC).
44 C | For this purpose the initialization
45 C | of the model was split into two parts. Those parameters that do
46 C | not depend on a specific model run are set in INITIALISE_FIXED,
47 C | whereas those that do depend on the specific realization are
48 C | initialized in INITIALISE_VARIA.
49 C | This routine is to be used in conjuction with the MITgcmuv
50 C | checkpoint 37.
51 C *================================================================*
52 C \ev
53
54 C !USES:
55 IMPLICIT NONE
56 C == Global variables ==
57 #include "SIZE.h"
58 #include "EEPARAMS.h"
59 #include "PARAMS.h"
60
61 c**************************************
62 #ifdef ALLOW_AUTODIFF
63 # ifndef ALLOW_AUTODIFF_OPENAD
64
65 c These includes are needed for
66 c AD-checkpointing.
67 c They provide the fields to be stored.
68
69 # include "AUTODIFF_MYFIELDS.h"
70 # include "GRID.h"
71 # include "DYNVARS.h"
72 # include "SURFACE.h"
73 # include "FFIELDS.h"
74 # include "EOS.h"
75 # include "AUTODIFF.h"
76
77 # ifdef ALLOW_GENERIC_ADVDIFF
78 # include "GAD.h"
79 # include "GAD_SOM_VARS.h"
80 # endif
81 # ifdef ALLOW_MOM_FLUXFORM
82 # include "MOM_FLUXFORM.h"
83 # endif
84 # ifdef ALLOW_CD_CODE
85 # include "CD_CODE_VARS.h"
86 # endif
87 # ifdef ALLOW_PTRACERS
88 # include "PTRACERS_SIZE.h"
89 # include "PTRACERS_FIELDS.h"
90 # include "PTRACERS_START.h"
91 # endif
92 # ifdef ALLOW_GCHEM
93 # include "GCHEM_FIELDS.h"
94 # endif
95 # ifdef ALLOW_CFC
96 # include "CFC.h"
97 # endif
98 # ifdef ALLOW_DIC
99 # include "DIC_VARS.h"
100 # include "DIC_LOAD.h"
101 # include "DIC_ATMOS.h"
102 # include "DIC_CTRL.h"
103 # include "DIC_COST.h"
104 # endif
105 # ifdef ALLOW_OBCS
106 # include "OBCS_PARAMS.h"
107 # include "OBCS_FIELDS.h"
108 # include "OBCS_SEAICE.h"
109 # ifdef ALLOW_PTRACERS
110 # include "OBCS_PTRACERS.h"
111 # endif
112 # endif
113 # ifdef ALLOW_EXF
114 # include "EXF_FIELDS.h"
115 # ifdef ALLOW_BULKFORMULAE
116 # include "EXF_CONSTANTS.h"
117 # endif
118 # endif /* ALLOW_EXF */
119 # ifdef ALLOW_SEAICE
120 # include "SEAICE_SIZE.h"
121 # include "SEAICE.h"
122 # include "SEAICE_PARAMS.h"
123 # include "SEAICE_COST.h"
124 # include "SEAICE_TRACER.h"
125 # endif
126 # ifdef ALLOW_SALT_PLUME
127 # include "SALT_PLUME.h"
128 # endif
129 # ifdef ALLOW_THSICE
130 # include "THSICE_SIZE.h"
131 # include "THSICE_VARS.h"
132 # endif
133 # ifdef ALLOW_SHELFICE
134 # include "SHELFICE.h"
135 # include "SHELFICE_COST.h"
136 # endif
137 # ifdef ALLOW_STREAMICE
138 # include "STREAMICE.h"
139 # include "STREAMICE_ADV.h"
140 # include "STREAMICE_BDRY.h"
141 # include "STREAMICE_CG.h"
142 # endif
143 # ifdef ALLOW_EBM
144 # include "EBM.h"
145 # endif
146 # ifdef ALLOW_RBCS
147 # include "RBCS_SIZE.h"
148 # include "RBCS_FIELDS.h"
149 # endif
150 # ifdef ALLOW_OFFLINE
151 # include "OFFLINE.h"
152 # endif
153 # ifdef ALLOW_CG2D_NSA
154 # include "CG2D.h"
155 # endif
156 # ifdef ALLOW_DIVIDED_ADJOINT_MPI
157 # include "mpif.h"
158 # endif
159
160 # include "tamc.h"
161
162 # ifdef ALLOW_GGL90
163 # include "GGL90.h"
164 # endif
165 # ifdef ALLOW_PROFILES
166 # include "profiles.h"
167 # endif
168
169 # ifdef ALLOW_ECCO_EVOLUTION
170 # ifdef ALLOW_ECCO
171 # include "ecco_cost.h"
172 # endif
173 # endif
174
175 # endif /* undef ALLOW_AUTODIFF_OPENAD */
176
177 # ifdef ALLOW_CTRL
178 # include "CTRL_SIZE.h"
179 # include "ctrl.h"
180 # include "ctrl_dummy.h"
181 # include "CTRL_GENARR.h"
182 # endif
183 # ifdef ALLOW_COST
184 # include "cost.h"
185 # endif
186
187 #endif /* ALLOW_AUTODIFF */
188 c**************************************
189
190 C !INPUT/OUTPUT PARAMETERS:
191 C == Routine arguments ==
192 C note: under the multi-threaded model myiter and
193 C mytime are local variables passed around as routine
194 C arguments. Although this is fiddly it saves the need to
195 C impose additional synchronisation points when they are
196 C updated.
197 C myTime :: time counter for this thread
198 C myIter :: iteration counter for this thread
199 C myThid :: thread number for this instance of the routine.
200 _RL myTime
201 INTEGER myIter
202 INTEGER myThid
203
204 C !FUNCTIONS:
205 C == Functions ==
206
207 C !LOCAL VARIABLES:
208 C == Local variables ==
209 integer iloop
210 #ifdef ALLOW_AUTODIFF_TAMC
211 # ifdef ALLOW_AUTODIFF_OPENAD
212 integer uCheckLev1, uCheckLev2, uCheckLev3,uCheckLev4
213 integer ilev_4
214 integer theCurrentStep
215 # endif
216 #ifdef STORE_LOADEDREC_TEST
217 integer bi,bj
218 #endif /* STORE_LOADEDREC_TEST */
219 #endif
220
221 CEOP
222
223 #ifdef ALLOW_DEBUG
224 IF (debugMode) CALL DEBUG_ENTER('MAIN_DO_LOOP',myThid)
225 #endif
226
227 c >>>>>>>>>>>>>>>>>>>>>>>>>>> LOOP <<<<<<<<<<<<<<<<<<<<<<<<<<<<
228 c >>>>>>>>>>>>>>>>>>>>>>>>>>> STARTS <<<<<<<<<<<<<<<<<<<<<<<<<<<<
229
230 c++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
231 #ifndef ALLOW_AUTODIFF_OPENAD
232 c++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
233 # ifdef ALLOW_AUTODIFF
234 # ifdef ALLOW_TAMC_CHECKPOINTING
235
236 max_lev4=nTimeSteps/(nchklev_1*nchklev_2*nchklev_3)+1
237 max_lev3=nTimeSteps/(nchklev_1*nchklev_2)+1
238 max_lev2=nTimeSteps/nchklev_1+1
239
240 c**************************************
241 # ifdef ALLOW_DIVIDED_ADJOINT
242 CADJ loop = divided
243 # endif
244 c**************************************
245
246 # ifdef AUTODIFF_4_LEVEL_CHECKPOINT
247 do ilev_4 = 1,nchklev_4
248 if(ilev_4.le.max_lev4) then
249 c**************************************
250 #ifdef ALLOW_AUTODIFF_WHTAPEIO
251 CALL AUTODIFF_WHTAPEIO_SYNC( 4 , 0, mythid )
252 #endif
253 CALL AUTODIFF_STORE( myThid )
254 #include "checkpoint_lev4_directives.h"
255 CALL AUTODIFF_RESTORE( myThid )
256 #ifdef ALLOW_AUTODIFF_WHTAPEIO
257 CALL AUTODIFF_WHTAPEIO_SYNC( 4 , 1, mythid )
258 #endif
259 c**************************************
260 c-- Initialise storage for the middle loop.
261 CADJ INIT tapelev3 = USER
262 # endif /* AUTODIFF_4_LEVEL_CHECKPOINT */
263
264 # ifndef AUTODIFF_2_LEVEL_CHECKPOINT
265 do ilev_3 = 1,nchklev_3
266 if(ilev_3.le.max_lev3) then
267 c**************************************
268 #ifdef ALLOW_AUTODIFF_WHTAPEIO
269 CALL AUTODIFF_WHTAPEIO_SYNC( 3 , 0, mythid )
270 #endif
271 CALL AUTODIFF_STORE( myThid )
272 #include "checkpoint_lev3_directives.h"
273 CALL AUTODIFF_RESTORE( myThid )
274 #ifdef ALLOW_AUTODIFF_WHTAPEIO
275 CALL AUTODIFF_WHTAPEIO_SYNC( 3 , 1, mythid )
276 #endif
277 c**************************************
278 c-- Initialise storage for the middle loop.
279 CADJ INIT tapelev2 = USER
280 # endif /* AUTODIFF_2_LEVEL_CHECKPOINT */
281
282 do ilev_2 = 1,nchklev_2
283 if(ilev_2.le.max_lev2) then
284 c**************************************
285 #ifdef ALLOW_AUTODIFF_WHTAPEIO
286 CALL AUTODIFF_WHTAPEIO_SYNC( 2 , 0, mythid )
287 #endif
288 CALL AUTODIFF_STORE( myThid )
289 #include "checkpoint_lev2_directives.h"
290 CALL AUTODIFF_RESTORE( myThid )
291 #ifdef ALLOW_AUTODIFF_WHTAPEIO
292 CALL AUTODIFF_WHTAPEIO_SYNC( 2 , 1, mythid )
293 #endif
294 c**************************************
295
296 # endif /* ALLOW_TAMC_CHECKPOINTING */
297
298 c**************************************
299 c--
300 c-- Initialize storage for the innermost loop.
301 c-- Always check common block sizes for the checkpointing!
302 c--
303 CADJ INIT comlev1 = COMMON,nchklev_1
304 CADJ INIT comlev1_bibj = COMMON,nchklev_1*nsx*nsy*nthreads_chkpt
305 CADJ INIT comlev1_bibj_k = COMMON,nchklev_1*nsx*nsy*nr*nthreads_chkpt
306 c--
307 # ifdef ALLOW_KPP
308 CADJ INIT comlev1_kpp = COMMON,nchklev_1*nsx*nsy
309 CADJ INIT comlev1_kpp_k = COMMON,nchklev_1*nsx*nsy*nr
310 # endif /* ALLOW_KPP */
311 c--
312 # ifdef ALLOW_GMREDI
313 CADJ INIT comlev1_gmredi_k_gad
314 CADJ & = COMMON,nchklev_1*nsx*nsy*nr*nthreads_chkpt*maxpass
315 # endif /* ALLOW_GMREDI */
316 c--
317 # ifdef ALLOW_PTRACERS
318 CADJ INIT comlev1_bibj_ptracers = COMMON,
319 CADJ & nchklev_1*nsx*nsy*nthreads_chkpt*PTRACERS_num
320 CADJ INIT comlev1_bibj_k_ptracers = COMMON,
321 CADJ & nchklev_1*nsx*nsy*nthreads_chkpt*PTRACERS_num*nr
322 # endif /* ALLOW_PTRACERS */
323 c--
324 # ifndef DISABLE_MULTIDIM_ADVECTION
325 CADJ INIT comlev1_bibj_gad = COMMON,
326 CADJ & nchklev_1*nsx*nsy*nthreads_chkpt*maxpass
327 CADJ INIT comlev1_bibj_k_gad = COMMON,
328 CADJ & nchklev_1*nsx*nsy*nr*nthreads_chkpt*maxpass
329 CADJ INIT comlev1_bibj_k_gad_pass = COMMON,
330 CADJ & nchklev_1*nsx*nsy*nr*nthreads_chkpt*maxpass*maxpass
331 # endif /* DISABLE_MULTIDIM_ADVECTION */
332 c--
333 # ifdef ALLOW_MOM_COMMON
334 # ifndef AUTODIFF_DISABLE_LEITH
335 CADJ INIT comlev1_mom_ijk_loop
336 CADJ & = COMMON,nchklev_1*
337 CADJ & (snx+2*olx)*nsx*(sny+2*oly)*nsy*nr*nthreads_chkpt
338 # endif /* AUTODIFF_DISABLE_LEITH */
339 # endif /* ALLOW_MOM_COMMON */
340 c--
341 # if (defined (ALLOW_EXF) && defined (ALLOW_BULKFORMULAE))
342 CADJ INIT comlev1_exf_1
343 CADJ & = COMMON,nchklev_1*snx*nsx*sny*nsy*nthreads_chkpt
344 CADJ INIT comlev1_exf_2
345 CADJ & = COMMON,niter_bulk*nchklev_1*snx*nsx*sny*nsy*nthreads_chkpt
346 # endif /* ALLOW_BULKFORMULAE */
347 c--
348 # ifdef ALLOW_SEAICE
349 # ifdef SEAICE_ALLOW_DYNAMICS
350 CADJ INIT comlev1_dynsol = COMMON,nchklev_1*MPSEUDOTIMESTEPS
351 # ifdef SEAICE_LSR_ADJOINT_ITER
352 CADJ INIT comlev1_dyniter =
353 CADJ & COMMON,nchklev_1*MPSEUDOTIMESTEPS*SOLV_MAX_FIXED
354 # endif
355 # endif
356 # ifdef SEAICE_ALLOW_EVP
357 CADJ INIT comlev1_evp = COMMON,nEVPstepMax*nchklev_1
358 # endif
359 # ifdef SEAICE_MULTICATEGORY
360 CADJ INIT comlev1_multdim
361 CADJ & = COMMON,nchklev_1*nsx*nsy*nthreads_chkpt*multdim
362 # endif
363 # ifndef DISABLE_MULTIDIM_ADVECTION
364 CADJ INIT comlev1_bibj_k_gadice = COMMON,
365 CADJ & nchklev_1*nsx*nsy*nthreads_chkpt*maxpass
366 CADJ INIT comlev1_bibj_k_gadice_pass = COMMON,
367 CADJ & nchklev_1*nsx*nsy*nthreads_chkpt*maxpass*maxpass
368 # endif /* DISABLE_MULTIDIM_ADVECTION */
369 # endif /* ALLOW_SEAICE */
370 c--
371 # ifdef ALLOW_THSICE
372 CADJ INIT comlev1_thsice_1
373 CADJ & = COMMON,nchklev_1*snx*nsx*sny*nsy*nthreads_chkpt
374 CADJ INIT comlev1_thsice_2
375 CADJ & = COMMON,nchklev_1*snx*nsx*sny*nsy*nlyr*nthreads_chkpt
376 CADJ INIT comlev1_thsice_3
377 CADJ & = COMMON,nchklev_1*snx*nsx*sny*nsy*MaxTsf*nthreads_chkpt
378 CADJ INIT comlev1_thsice_4
379 CADJ & = COMMON,nchklev_1*nsx*nsy*maxpass*nthreads_chkpt
380 # endif /* ALLOW_THSICE */
381 c--
382 # ifdef ALLOW_STREAMICE
383 CADJ INIT comlev1_stream_nl = COMMON,nchklev_1*streamice_max_nl
384 CADJ INIT comlev1_stream_front = COMMON,nchklev_1*4
385 CADJ INIT comlev1_stream_ij
386 CADJ & = COMMON,nchklev_1*4*(snx+2)*nsx*(sny+2)*nsy
387 CADJ INIT comlev1_stream_hybrid
388 CADJ & = COMMON,nchklev_1*snx*nsx*sny*nsy*nr*nthreads_chkpt
389 # endif
390 c--
391 # ifdef ALLOW_CG2D_NSA
392 CADJ INIT comlev1_cg2d
393 CADJ & = COMMON,nchklev_1*nthreads_chkpt
394 CADJ INIT comlev1_cg2d_iter
395 CADJ & = COMMON,nchklev_1*nthreads_chkpt*numItersMax
396 # endif
397 c--
398 c**************************************
399
400 #ifdef STORE_LOADEDREC_TEST
401 DO bj = myByLo(myThid), myByHi(myThid)
402 DO bi = myBxLo(myThid), myBxHi(myThid)
403 loadedRec(bi,bj) = 0
404 ENDDO
405 ENDDO
406 #endif /* STORE_LOADEDREC_TEST */
407
408 #ifdef ALLOW_TAMC_CHECKPOINTING
409
410 do ilev_1 = 1,nchklev_1
411
412 c-- The if-statement below introduces a some flexibility in the
413 c-- choice of the 3-tupel ( nchklev_1, nchklev_2, nchklev_3 ).
414
415 iloop = (ilev_2 - 1)*nchklev_1 + ilev_1
416 # ifndef AUTODIFF_2_LEVEL_CHECKPOINT
417 & + (ilev_3 - 1)*nchklev_2*nchklev_1
418 # endif
419 # ifdef AUTODIFF_4_LEVEL_CHECKPOINT
420 & + (ilev_4 - 1)*nchklev_3*nchklev_2*nchklev_1
421 # endif
422
423 if ( iloop .le. nTimeSteps ) then
424
425 # else /* ALLOW_TAMC_CHECKPOINTING undefined */
426
427 DO iloop = 1, nTimeSteps
428
429 # endif /* ALLOW_TAMC_CHECKPOINTING */
430 # endif /* ALLOW_AUTODIFF */
431
432 #endif /* undef ALLOW_AUTODIFF_OPENAD */
433
434 #ifdef ALLOW_AUTODIFF_OPENAD
435 call openad_checkpointinit(uCheckLev1,
436 + uCheckLev2,
437 + uCheckLev3,
438 + uCheckLev4 )
439
440 theCurrentStep=0
441
442 if (uCheckLev4 .gt. 0 ) then
443 do ilev_4 = 1, uCheckLev4
444
445 #endif
446
447 #ifndef ALLOW_AUTODIFF
448
449 c-- Start the main loop of adjoint_Objfunc. Automatic differentiation
450 c-- NOT enabled.
451 DO iloop = 1, nTimeSteps
452
453 #endif /* ALLOW_AUTODIFF */
454
455 c-- >>> Loop body start <<<
456
457 #ifdef ALLOW_AUTODIFF_TAMC
458 nIter0 = NINT( (startTime-baseTime)/deltaTClock )
459 ikey_dynamics = ilev_1
460 #endif
461
462 #ifdef ALLOW_ECCO
463 #ifdef ALLOW_ECCO_EVOLUTION
464 #ifdef ALLOW_DEBUG
465 IF (debugMode) CALL DEBUG_CALL('cost_averagesfields',myThid)
466 #endif
467 c-- Accumulate time averages of temperature, salinity
468 #ifdef ALLOW_AUTODIFF
469 C-- Reset the model iteration counter and the model time.
470 myIter = nIter0 + (iloop-1)
471 myTime = startTime + float(iloop-1)*deltaTclock
472 #endif
473 CALL TIMER_START('COST_AVERAGESFIELDS [MAIN_DO_LOOP]',mythid)
474 CALL COST_AVERAGESFIELDS( mytime, mythid )
475 CALL TIMER_STOP ('COST_AVERAGESFIELDS [MAIN_DO_LOOP]',mythid)
476 #endif /* ALLOW_ECCO_EVOLUTION */
477 #endif /* ALLOW_ECCO */
478
479 #ifdef ALLOW_PROFILES
480 IF (usePROFILES) THEN
481 #ifdef ALLOW_DEBUG
482 IF (debugMode) CALL DEBUG_CALL('profiles_inloop',myThid)
483 #endif
484 c-- Accumulate in-situ time averages of theta, salt, and SSH.
485 #ifdef ALLOW_AUTODIFF
486 C-- Reset the model iteration counter and the model time.
487 myIter = nIter0 + (iloop-1)
488 myTime = startTime + float(iloop-1)*deltaTclock
489 #endif
490 CALL TIMER_START('PROFILES_INLOOP [MAIN_DO_LOOP]', mythid)
491 CALL PROFILES_INLOOP( mytime, mythid )
492 CALL TIMER_STOP ('PROFILES_INLOOP [MAIN_DO_LOOP]', mythid)
493 ENDIF
494 #endif
495
496 #ifdef ALLOW_DEBUG
497 IF (debugMode) CALL DEBUG_CALL('FORWARD_STEP',myThid)
498 #endif
499
500 #ifdef ALLOW_ATM2D
501 CALL TIMER_START('FORWARD_STEP_ATM2D [MAIN_DO_LOOP]',mythid)
502 CALL FORWARD_STEP_ATM2D( iloop, mytime, myiter, mythid )
503 CALL TIMER_STOP ('FORWARD_STEP_ATM2D [MAIN_DO_LOOP]',mythid)
504 #else
505 CALL TIMER_START('FORWARD_STEP [MAIN_DO_LOOP]',mythid)
506 # ifdef ALLOW_AUTODIFF_OPENAD
507 CALL THE_FOURTH_LEVEL_LOOP( ilev_4,
508 +uCheckLev1, uCheckLev2, uCheckLev3,uCheckLev4,
509 +theCurrentStep,
510 +myTime, myIter, myThid )
511 # else
512 CALL FORWARD_STEP( iloop, mytime, myiter, mythid )
513 # endif
514 CALL TIMER_STOP ('FORWARD_STEP [MAIN_DO_LOOP]',mythid)
515 #endif
516
517 c-- >>> Loop body end <<<
518 #ifdef ALLOW_AUTODIFF
519 # ifndef ALLOW_AUTODIFF_OPENAD
520
521 # ifdef ALLOW_TAMC_CHECKPOINTING
522 endif
523 enddo
524 endif
525 enddo
526 # ifndef AUTODIFF_2_LEVEL_CHECKPOINT
527 endif
528 enddo
529 # endif
530 # ifdef AUTODIFF_4_LEVEL_CHECKPOINT
531 endif
532 enddo
533 # endif
534 # else /* ndef ALLOW_TAMC_CHECKPOINTING */
535 enddo
536 # endif /* ALLOW_TAMC_CHECKPOINTING */
537 # else /* ALLOW_AUTODIFF_OPENAD */
538 end do
539 else
540 CALL THE_FOURTH_LEVEL_PLAIN(
541 +uCheckLev1, uCheckLev2, uCheckLev3,uCheckLev4,
542 +theCurrentStep,
543 +myTime, myIter, myThid )
544 end if
545 # endif /* ALLOW_AUTODIFF_OPENAD */
546 #else /* ALLOW_AUTODIFF */
547 enddo
548 #endif /* ALLOW_AUTODIFF */
549
550 #ifdef ALLOW_DEBUG
551 IF (debugMode) CALL DEBUG_LEAVE('MAIN_DO_LOOP',myThid)
552 #endif
553
554 RETURN
555 END

  ViewVC Help
Powered by ViewVC 1.1.22