198 |
# include "STREAMICE_OPTIONS.h" |
# include "STREAMICE_OPTIONS.h" |
199 |
#endif |
#endif |
200 |
|
|
|
|
|
201 |
CBOP |
CBOP |
202 |
C !ROUTINE: THE_MODEL_MAIN |
C !ROUTINE: THE_MODEL_MAIN |
203 |
|
|
282 |
C myIter :: Iteration counter for this thread |
C myIter :: Iteration counter for this thread |
283 |
INTEGER myIter |
INTEGER myIter |
284 |
_RL myTime |
_RL myTime |
285 |
LOGICAL exst |
LOGICAL exst |
286 |
LOGICAL lastdiva |
LOGICAL lastdiva |
|
|
|
|
|
|
287 |
CEOP |
CEOP |
288 |
c-- set default: |
|
289 |
|
C-- set default: |
290 |
exst = .TRUE. |
exst = .TRUE. |
291 |
lastdiva = .TRUE. |
lastdiva = .TRUE. |
292 |
|
|
293 |
#ifdef ALLOW_PETSC |
#ifdef ALLOW_PETSC |
294 |
call streamice_initialize_petsc |
call streamice_initialize_petsc |
295 |
#endif |
#endif |
296 |
|
|
297 |
#ifdef ALLOW_DEBUG |
#ifdef ALLOW_DEBUG |
316 |
myIter = nIter0 |
myIter = nIter0 |
317 |
|
|
318 |
#if ( defined (ALLOW_ADMTLM) ) |
#if ( defined (ALLOW_ADMTLM) ) |
319 |
c |
|
320 |
STOP 'should never get here; ADMTLM_DSVD calls ADMTLM_DRIVER' |
STOP 'should never get here; ADMTLM_DSVD calls ADMTLM_DRIVER' |
321 |
c |
|
322 |
#elif ( defined (ALLOW_AUTODIFF)) |
#elif ( defined (ALLOW_AUTODIFF)) |
323 |
|
|
324 |
# ifndef EXCLUDE_CTRL_PACK |
# ifndef EXCLUDE_CTRL_PACK |
335 |
|
|
336 |
# ifdef ALLOW_COST |
# ifdef ALLOW_COST |
337 |
CALL COST_DEPENDENT_INIT ( myThid ) |
CALL COST_DEPENDENT_INIT ( myThid ) |
|
_BARRIER |
|
338 |
# endif |
# endif |
339 |
|
|
340 |
# if ( defined (ALLOW_TANGENTLINEAR_RUN) ) |
# if ( defined (ALLOW_TANGENTLINEAR_RUN) ) |
341 |
c |
|
342 |
# ifdef ALLOW_DEBUG |
# ifdef ALLOW_DEBUG |
343 |
IF (debugMode) CALL DEBUG_CALL('G_THE_MAIN_LOOP',myThid) |
IF (debugMode) CALL DEBUG_CALL('G_THE_MAIN_LOOP',myThid) |
344 |
# endif |
# endif |
345 |
CALL TIMER_START('G_THE_MAIN_LOOP [TANGENT RUN]',myThid) |
CALL TIMER_START('G_THE_MAIN_LOOP [TANGENT RUN]',myThid) |
346 |
CALL G_THE_MAIN_LOOP ( myTime, myIter, myThid ) |
CALL G_THE_MAIN_LOOP ( myTime, myIter, myThid ) |
347 |
CALL TIMER_STOP ('G_THE_MAIN_LOOP [TANGENT RUN]',myThid) |
CALL TIMER_STOP ('G_THE_MAIN_LOOP [TANGENT RUN]',myThid) |
348 |
c |
|
349 |
# elif ( defined (ALLOW_ADJOINT_RUN) || \ |
# elif ( defined (ALLOW_ADJOINT_RUN) || \ |
350 |
defined (ALLOW_ECCO_OPTIMIZATION) ) |
defined (ALLOW_ECCO_OPTIMIZATION) ) |
351 |
c |
|
352 |
# ifdef ALLOW_DIVIDED_ADJOINT |
# ifdef ALLOW_DIVIDED_ADJOINT |
353 |
c-- The following assumes the TAF option '-pure' |
C-- The following assumes the TAF option '-pure' |
354 |
inquire( file='costfinal', exist=exst ) |
inquire( file='costfinal', exist=exst ) |
355 |
IF ( .NOT. exst) THEN |
IF ( .NOT. exst) THEN |
356 |
# ifdef ALLOW_DEBUG |
# ifdef ALLOW_DEBUG |
369 |
CALL TIMER_STOP ('ADTHE_MAIN_LOOP [ADJOINT RUN]', myThid) |
CALL TIMER_STOP ('ADTHE_MAIN_LOOP [ADJOINT RUN]', myThid) |
370 |
CALL COST_FINAL_RESTORE ( myThid, lastdiva ) |
CALL COST_FINAL_RESTORE ( myThid, lastdiva ) |
371 |
ENDIF |
ENDIF |
372 |
c-- |
|
373 |
# else /* ALLOW_DIVIDED_ADJOINT undef */ |
# else /* ALLOW_DIVIDED_ADJOINT undef */ |
374 |
# ifdef ALLOW_DEBUG |
# ifdef ALLOW_DEBUG |
375 |
IF (debugMode) CALL DEBUG_CALL('ADTHE_MAIN_LOOP',myThid) |
IF (debugMode) CALL DEBUG_CALL('ADTHE_MAIN_LOOP',myThid) |
378 |
CALL ADTHE_MAIN_LOOP ( myThid ) |
CALL ADTHE_MAIN_LOOP ( myThid ) |
379 |
CALL TIMER_STOP ('ADTHE_MAIN_LOOP [ADJOINT RUN]', myThid) |
CALL TIMER_STOP ('ADTHE_MAIN_LOOP [ADJOINT RUN]', myThid) |
380 |
# endif /* ALLOW_DIVIDED_ADJOINT */ |
# endif /* ALLOW_DIVIDED_ADJOINT */ |
381 |
c |
|
382 |
# else /* forward run only within AD setting */ |
# else /* forward run only within AD setting */ |
383 |
|
|
384 |
# ifdef ALLOW_DEBUG |
# ifdef ALLOW_DEBUG |
385 |
IF (debugMode) CALL DEBUG_CALL('THE_MAIN_LOOP',myThid) |
IF (debugMode) CALL DEBUG_CALL('THE_MAIN_LOOP',myThid) |
386 |
# endif |
# endif |
387 |
C-- Call time stepping loop of full model |
C-- Call time stepping loop of full model |
|
# ifdef ALLOW_DEBUG |
|
|
IF (debugMode) CALL DEBUG_CALL('THE_MAIN_LOOP',myThid) |
|
|
# endif |
|
388 |
CALL TIMER_START('THE_MAIN_LOOP [THE_MODEL_MAIN]',myThid) |
CALL TIMER_START('THE_MAIN_LOOP [THE_MODEL_MAIN]',myThid) |
389 |
CALL THE_MAIN_LOOP( myTime, myIter, myThid ) |
CALL THE_MAIN_LOOP( myTime, myIter, myThid ) |
390 |
CALL TIMER_STOP ('THE_MAIN_LOOP [THE_MODEL_MAIN]',myThid) |
CALL TIMER_STOP ('THE_MAIN_LOOP [THE_MODEL_MAIN]',myThid) |
410 |
CALL TIMER_START('GRDCHK_MAIN [THE_MODEL_MAIN]',myThid) |
CALL TIMER_START('GRDCHK_MAIN [THE_MODEL_MAIN]',myThid) |
411 |
CALL GRDCHK_MAIN( myThid ) |
CALL GRDCHK_MAIN( myThid ) |
412 |
CALL TIMER_STOP ('GRDCHK_MAIN [THE_MODEL_MAIN]',myThid) |
CALL TIMER_STOP ('GRDCHK_MAIN [THE_MODEL_MAIN]',myThid) |
|
_BARRIER |
|
413 |
ENDIF |
ENDIF |
414 |
# endif |
# endif |
415 |
|
|
426 |
#endif /* ALLOW_TANGENTLINEAR_RUN ALLOW_ADJOINT_RUN ALLOW_ADMTLM */ |
#endif /* ALLOW_TANGENTLINEAR_RUN ALLOW_ADJOINT_RUN ALLOW_ADMTLM */ |
427 |
|
|
428 |
#ifdef ALLOW_PETSC |
#ifdef ALLOW_PETSC |
429 |
call streamice_finalize_petsc |
call streamice_finalize_petsc |
430 |
#endif |
#endif |
431 |
|
|
432 |
#ifdef ALLOW_MNC |
#ifdef ALLOW_MNC |