226 |
C/\ | | | | |
C/\ | | | | |
227 |
C/\ | | | |-EXCH :: Sync forcing. in overlap regions. |
C/\ | | | |-EXCH :: Sync forcing. in overlap regions. |
228 |
C/\ | | |-SEAICE_MODEL :: Compute sea-ice terms. ( pkg/seaice ) |
C/\ | | |-SEAICE_MODEL :: Compute sea-ice terms. ( pkg/seaice ) |
229 |
|
C/\ | | |-FREEZE :: Limit surface temperature. |
230 |
C/\ | | |-GCHEM_FIELD_LOAD :: load tracer forcing fields (pkg/gchem) |
C/\ | | |-GCHEM_FIELD_LOAD :: load tracer forcing fields (pkg/gchem) |
231 |
C/\ | | | |
C/\ | | | |
232 |
C/\ | | |-THERMODYNAMICS :: theta, salt + tracer equations driver. |
C/\ | | |-THERMODYNAMICS :: theta, salt + tracer equations driver. |
304 |
C/\ | | | | |-TIMESTEP_TRACER :: Step tracer field forward in time |
C/\ | | | | |-TIMESTEP_TRACER :: Step tracer field forward in time |
305 |
C/\ | | | | |
C/\ | | | | |
306 |
C/\ | | | |-OBCS_APPLY_TS :: Open bndy. package (see pkg/obcs ). |
C/\ | | | |-OBCS_APPLY_TS :: Open bndy. package (see pkg/obcs ). |
|
C/\ | | | |-FREEZE :: Limit range of temperature. |
|
307 |
C/\ | | | | |
C/\ | | | | |
308 |
C/\ | | | |-IMPLDIFF :: Solve vertical implicit diffusion equation. |
C/\ | | | |-IMPLDIFF :: Solve vertical implicit diffusion equation. |
309 |
C/\ | | | |-OBCS_APPLY_TS :: Open bndy. package (see pkg/obcs ). |
C/\ | | | |-OBCS_APPLY_TS :: Open bndy. package (see pkg/obcs ). |
402 |
CEOI |
CEOI |
403 |
|
|
404 |
|
|
405 |
|
#include "AD_CONFIG.h" |
406 |
|
#include "PACKAGES_CONFIG.h" |
407 |
#include "CPP_OPTIONS.h" |
#include "CPP_OPTIONS.h" |
408 |
|
|
409 |
CBOP |
CBOP |
469 |
#include "PARAMS.h" |
#include "PARAMS.h" |
470 |
#include "DYNVARS.h" |
#include "DYNVARS.h" |
471 |
#ifdef ALLOW_NONHYDROSTATIC |
#ifdef ALLOW_NONHYDROSTATIC |
472 |
#include "CG3D.h" |
# include "CG3D.h" |
473 |
#endif |
#endif |
474 |
|
|
475 |
|
#ifdef ALLOW_ECCO_OPTIMIZATION |
476 |
|
# include "optim.h" |
477 |
|
#endif |
478 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
479 |
#include "tamc.h" |
# include "tamc.h" |
480 |
#endif |
#endif |
481 |
|
|
482 |
C !INPUT/OUTPUT PARAMETERS: |
C !INPUT/OUTPUT PARAMETERS: |
497 |
_RL myCurrentTime |
_RL myCurrentTime |
498 |
logical exst |
logical exst |
499 |
logical lastdiva |
logical lastdiva |
500 |
|
#ifndef ALLOW_ECCO_OPTIMIZATION |
501 |
|
integer optimcycle |
502 |
|
#endif |
503 |
CEOP |
CEOP |
504 |
c-- set default: |
c-- set default: |
505 |
|
#ifndef ALLOW_ECCO_OPTIMIZATION |
506 |
|
optimcycle = 0 |
507 |
|
#endif |
508 |
lastdiva = .TRUE. |
lastdiva = .TRUE. |
509 |
|
|
510 |
#ifndef DISABLE_DEBUGMODE |
#ifdef ALLOW_DEBUG |
511 |
IF (debugMode) CALL DEBUG_ENTER('THE_MODEL_MAIN',myThid) |
IF (debugMode) CALL DEBUG_ENTER('THE_MODEL_MAIN',myThid) |
512 |
#endif |
#endif |
513 |
|
|
514 |
C-- This timer encompasses the whole code |
C-- This timer encompasses the whole code |
515 |
CALL TIMER_START('ALL [THE_MODEL_MAIN]',myThid) |
CALL TIMER_START('ALL [THE_MODEL_MAIN]',myThid) |
516 |
|
|
517 |
#ifndef DISABLE_DEBUGMODE |
#ifdef ALLOW_DEBUG |
518 |
IF (debugMode) CALL DEBUG_CALL('INITIALISE_FIXED',myThid) |
IF (debugMode) CALL DEBUG_CALL('INITIALISE_FIXED',myThid) |
519 |
#endif |
#endif |
520 |
|
|
526 |
myCurrentTime = startTime |
myCurrentTime = startTime |
527 |
myCurrentIter = nIter0 |
myCurrentIter = nIter0 |
528 |
|
|
529 |
#if ( defined (ALLOW_ADMTLM_RUN) ) |
#if ( defined (ALLOW_ADMTLM) ) |
530 |
c |
c |
531 |
CALL TIMER_START('ADMTLM_DRIVER [THE_MODEL_MAIN]',mythid) |
CALL TIMER_START('ADMTLM_DRIVER [THE_MODEL_MAIN]',mythid) |
532 |
CALL ADMTLM_DRIVER ( myThid ) |
CALL ADMTLM_DRIVER ( myThid ) |
533 |
CALL TIMER_STOP ('ADMTLM_DRIVER [THE_MODEL_MAIN]',mythid) |
CALL TIMER_STOP ('ADMTLM_DRIVER [THE_MODEL_MAIN]',mythid) |
534 |
c |
c |
535 |
#elif ( defined (ALLOW_ADJOINT_RUN) || \ |
#elif ( defined (ALLOW_AUTODIFF)) |
|
defined (ALLOW_TANGENTLINEAR_RUN) || \ |
|
|
defined (ALLOW_GRADIENT_CHECK) || \ |
|
|
defined (ALLOW_ECCO_OPTIMIZATION) ) |
|
536 |
|
|
537 |
|
# ifndef EXCLUDE_CTRL_PACK |
538 |
_BEGIN_MASTER( mythid ) |
_BEGIN_MASTER( mythid ) |
539 |
IF (myProcId .eq. 0) THEN |
IF (myProcId .eq. 0) THEN |
540 |
inquire( file='costfinal', exist=exst ) |
inquire( file='costfinal', exist=exst ) |
541 |
IF ( .NOT. exst) THEN |
IF ( .NOT. exst .AND. niter0 .EQ. 0 ) THEN |
542 |
CALL TIMER_START('CTRL_UNPACK [THE_MODEL_MAIN]',mythid) |
CALL TIMER_START('CTRL_UNPACK [THE_MODEL_MAIN]',mythid) |
543 |
CALL CTRL_UNPACK( mycurrentiter, mycurrenttime, mythid ) |
CALL CTRL_UNPACK( .TRUE. , mythid ) |
544 |
CALL TIMER_STOP ('CTRL_UNPACK [THE_MODEL_MAIN]',mythid) |
CALL TIMER_STOP ('CTRL_UNPACK [THE_MODEL_MAIN]',mythid) |
545 |
|
IF ( optimcycle.EQ.0 .AND. mycurrentiter.EQ.niter0 ) THEN |
546 |
|
CALL TIMER_START('CTRL_PACK [THE_MODEL_MAIN]',mythid) |
547 |
|
CALL CTRL_PACK( .TRUE. , mythid ) |
548 |
|
CALL TIMER_STOP ('CTRL_PACK [THE_MODEL_MAIN]',mythid) |
549 |
|
ENDIF |
550 |
ENDIF |
ENDIF |
551 |
ENDIF |
ENDIF |
552 |
_END_MASTER( mythid ) |
_END_MASTER( mythid ) |
553 |
_BARRIER |
_BARRIER |
554 |
|
# endif /* EXCLUDE_CTRL_PACK */ |
555 |
|
|
556 |
CALL COST_DEPENDENT_INIT ( mythid ) |
CALL COST_DEPENDENT_INIT ( mythid ) |
557 |
_BARRIER |
_BARRIER |
588 |
c |
c |
589 |
# endif |
# endif |
590 |
|
|
591 |
|
# ifndef EXCLUDE_CTRL_PACK |
592 |
_BEGIN_MASTER( mythid ) |
_BEGIN_MASTER( mythid ) |
593 |
IF ( myProcId .eq. 0 .AND. lastdiva ) THEN |
IF ( myProcId .eq. 0 .AND. lastdiva ) THEN |
594 |
CALL TIMER_START('CTRL_PACK [THE_MODEL_MAIN]',mythid) |
CALL TIMER_START('CTRL_PACK [THE_MODEL_MAIN]',mythid) |
595 |
call CTRL_PACK( mycurrentiter, mycurrenttime, mythid ) |
call CTRL_PACK( .FALSE. , mythid ) |
596 |
CALL TIMER_STOP ('CTRL_PACK [THE_MODEL_MAIN]',mythid) |
CALL TIMER_STOP ('CTRL_PACK [THE_MODEL_MAIN]',mythid) |
597 |
ENDIF |
ENDIF |
598 |
_END_MASTER( mythid ) |
_END_MASTER( mythid ) |
599 |
_BARRIER |
_BARRIER |
600 |
c |
# endif /* EXCLUDE_CTRL_PACK */ |
601 |
|
|
602 |
# ifdef ALLOW_GRADIENT_CHECK |
|
603 |
|
# ifdef ALLOW_GRDCHK |
604 |
IF ( useGrdchk .AND. lastdiva ) THEN |
IF ( useGrdchk .AND. lastdiva ) THEN |
605 |
CALL TIMER_START('GRDCHK_MAIN [THE_MODEL_MAIN]',mythid) |
CALL TIMER_START('GRDCHK_MAIN [THE_MODEL_MAIN]',mythid) |
606 |
CALL GRDCHK_MAIN( mythid ) |
CALL GRDCHK_MAIN( mythid ) |
611 |
|
|
612 |
#else /* ALL AD-related undef */ |
#else /* ALL AD-related undef */ |
613 |
|
|
614 |
#ifndef DISABLE_DEBUGMODE |
#ifdef ALLOW_DEBUG |
615 |
IF (debugMode) CALL DEBUG_CALL('THE_MAIN_LOOP',myThid) |
IF (debugMode) CALL DEBUG_CALL('THE_MAIN_LOOP',myThid) |
616 |
#endif |
#endif |
617 |
|
|
622 |
|
|
623 |
#endif /* ALLOW_TANGENTLINEAR_RUN ALLOW_ADJOINT_RUN ALLOW_ADMTLM_RUN */ |
#endif /* ALLOW_TANGENTLINEAR_RUN ALLOW_ADJOINT_RUN ALLOW_ADMTLM_RUN */ |
624 |
|
|
|
C-- Sea-ice checkpoint (in case the in-loop checkpoint was missed) |
|
|
#ifdef ALLOW_SEAICE |
|
|
IF ( useSEAICE ) |
|
|
& CALL SEAICE_WRITE_PICKUP( |
|
|
& .TRUE., myCurrentTime, myCurrentIter, myThid ) |
|
|
#endif |
|
|
|
|
625 |
C-- Final checkpoint (in case the in-loop checkpoint was missed) |
C-- Final checkpoint (in case the in-loop checkpoint was missed) |
626 |
CALL TIMER_START('WRITE_CHECKPOINT [THE_MODEL_MAIN]',myThid) |
CALL TIMER_START('WRITE_CHECKPOINT [THE_MODEL_MAIN]',myThid) |
627 |
|
CALL PACKAGES_WRITE_PICKUP( |
628 |
|
I .TRUE., myCurrentTime, myCurrentIter, myThid ) |
629 |
CALL WRITE_CHECKPOINT( |
CALL WRITE_CHECKPOINT( |
630 |
& .TRUE., myCurrentTime, myCurrentIter, myThid ) |
I .TRUE., myCurrentTime, myCurrentIter, myThid ) |
631 |
CALL TIMER_STOP ('WRITE_CHECKPOINT [THE_MODEL_MAIN]',myThid) |
CALL TIMER_STOP ('WRITE_CHECKPOINT [THE_MODEL_MAIN]',myThid) |
632 |
|
|
633 |
CALL TIMER_STOP ('ALL [THE_MODEL_MAIN]',myThid) |
CALL TIMER_STOP ('ALL [THE_MODEL_MAIN]',myThid) |
638 |
CALL COMM_STATS |
CALL COMM_STATS |
639 |
ENDIF |
ENDIF |
640 |
|
|
641 |
#ifndef DISABLE_DEBUGMODE |
#ifdef ALLOW_DEBUG |
642 |
IF (debugMode) CALL DEBUG_LEAVE('THE_MODEL_MAIN',myThid) |
IF (debugMode) CALL DEBUG_LEAVE('THE_MODEL_MAIN',myThid) |
643 |
#endif |
#endif |
644 |
|
|