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

Diff of /MITgcm/model/src/forward_step.F

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

revision 1.153 by jmc, Mon Nov 5 18:52:21 2007 UTC revision 1.165 by heimbach, Fri Feb 13 21:56:48 2009 UTC
# Line 45  C     == Global variables == Line 45  C     == Global variables ==
45    
46  #ifdef ALLOW_MNC  #ifdef ALLOW_MNC
47  #include "MNC_PARAMS.h"  #include "MNC_PARAMS.h"
       EXTERNAL DIFFERENT_MULTIPLE  
       LOGICAL  DIFFERENT_MULTIPLE  
48  #endif  #endif
49    
50  #ifdef HAVE_SIGREG  #ifdef HAVE_SIGREG
# Line 85  C     == Global variables == Line 83  C     == Global variables ==
83  #  include "PTRACERS_SIZE.h"  #  include "PTRACERS_SIZE.h"
84  #  include "PTRACERS_FIELDS.h"  #  include "PTRACERS_FIELDS.h"
85  # endif  # endif
86    # ifdef ALLOW_GCHEM
87    #  include "GCHEM_FIELDS.h"
88    # endif
89    # ifdef ALLOW_CFC
90    #  include "CFC.h"
91    # endif
92    # ifdef ALLOW_DIC
93    #  include "DIC_VARS.h"
94    #  include "DIC_LOAD.h"
95    #  include "DIC_ATMOS.h"
96    # endif
97  # ifdef ALLOW_OBCS  # ifdef ALLOW_OBCS
98  #  include "OBCS.h"  #  include "OBCS.h"
99  #  ifdef ALLOW_PTRACERS  #  ifdef ALLOW_PTRACERS
# Line 100  C     == Global variables == Line 109  C     == Global variables ==
109  # ifdef ALLOW_SEAICE  # ifdef ALLOW_SEAICE
110  #  include "SEAICE.h"  #  include "SEAICE.h"
111  # endif  # endif
112    # ifdef ALLOW_SALT_PLUME
113    #  include "SALT_PLUME.h"
114    # endif
115  # ifdef ALLOW_EBM  # ifdef ALLOW_EBM
116  #  include "EBM.h"  #  include "EBM.h"
117  # endif  # endif
# Line 114  C     == Global variables == Line 126  C     == Global variables ==
126  # endif  # endif
127  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
128    
129  C     !LOCAL VARIABLES:  #ifdef ALLOW_MNC
130          EXTERNAL DIFFERENT_MULTIPLE
131          LOGICAL  DIFFERENT_MULTIPLE
132    #endif
133    
134    
135    C     !INPUT/OUTPUT PARAMETERS:
136  C     == Routine arguments ==  C     == Routine arguments ==
137  C     note: under the multi-threaded model myIter and  C     note: under the multi-threaded model myIter and
138  C           myTime are local variables passed around as routine  C           myTime are local variables passed around as routine
139  C           arguments. Although this is fiddly it saves the need to  C           arguments. Although this is fiddly it saves the need to
140  C           impose additional synchronisation points when they are  C           impose additional synchronisation points when they are
141  C           updated.  C           updated.
142  C     myIter - iteration counter for this thread  C     myTime :: time counter for this thread
143  C     myTime - time counter for this thread  C     myIter :: iteration counter for this thread
144  C     myThid - thread number for this instance of the routine.  C     myThid :: thread number for this instance of the routine.
145        INTEGER iloop        INTEGER iloop
       INTEGER myThid  
       INTEGER myIter  
146        _RL     myTime        _RL     myTime
147          INTEGER myIter
148          INTEGER myThid
149    
150    C     !LOCAL VARIABLES:
151  C     == Local variables ==  C     == Local variables ==
152    C     modelEnd  :: true if reaching the end of the run
153          LOGICAL modelEnd
154  #ifdef COMPONENT_MODULE  #ifdef COMPONENT_MODULE
155        INTEGER myItP1        INTEGER myItP1
156  #endif  #endif
# Line 141  CEOP Line 162  CEOP
162  #endif  #endif
163    
164  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
165          CALL AUTODIFF_INADMODE_UNSET( myThid )
166    #endif
167    
168    #ifdef ALLOW_AUTODIFF_TAMC
169  C--   Reset the model iteration counter and the model time.  C--   Reset the model iteration counter and the model time.
170        myIter = nIter0 + (iloop-1)        myIter = nIter0 + (iloop-1)
171        myTime = startTime + float(iloop-1)*deltaTclock        myTime = startTime + float(iloop-1)*deltaTclock
# Line 179  C--   Call driver to load external forci Line 204  C--   Call driver to load external forci
204        IF ( debugLevel .GE. debLevB )        IF ( debugLevel .GE. debLevB )
205       & CALL DEBUG_CALL('LOAD_FIELDS_DRIVER',myThid)       & CALL DEBUG_CALL('LOAD_FIELDS_DRIVER',myThid)
206  #endif  #endif
207    #ifdef ALLOW_AUTODIFF_TAMC
208    cph Important STORE that avoids hidden recomp. of load_fields_driver
209    CADJ STORE theta      = comlev1, key = ikey_dynamics,
210    CADJ &     kind = isbyte
211    CADJ STORE uvel, vvel = comlev1, key = ikey_dynamics,
212    CADJ &     kind = isbyte
213    #endif
214        CALL TIMER_START('LOAD_FIELDS_DRIVER  [FORWARD_STEP]',myThid)        CALL TIMER_START('LOAD_FIELDS_DRIVER  [FORWARD_STEP]',myThid)
215        CALL LOAD_FIELDS_DRIVER( myTime, myIter, myThid )        CALL LOAD_FIELDS_DRIVER( myTime, myIter, myThid )
216        CALL TIMER_STOP ('LOAD_FIELDS_DRIVER  [FORWARD_STEP]',myThid)        CALL TIMER_STOP ('LOAD_FIELDS_DRIVER  [FORWARD_STEP]',myThid)
# Line 197  C-    calculate qnet and empmr (and wind Line 229  C-    calculate qnet and empmr (and wind
229        ENDIF        ENDIF
230  #endif /* ALLOW_BULK_FORCE */  #endif /* ALLOW_BULK_FORCE */
231    
232    C--   Call external chepaml forcing package
233    #ifdef ALLOW_CHEAPAML
234          IF ( useCheapAML  ) THEN
235    #ifdef ALLOW_DEBUG
236           IF ( debugLevel .GE. debLevB )
237         &    CALL DEBUG_CALL('CHEAPAML_FIELDS_LOAD',myThid)
238    #endif
239           CALL TIMER_START('CHEAPAML      [FORWARD_STEP]',mythid)
240    C-    calculate qnet (and wind stress)
241           CALL CHEAPAML( myTime, myIter,myThid )
242           CALL TIMER_STOP ('CHEAPAML      [FORWARD_STEP]',mythid)
243          ENDIF
244    #endif /*ALLOW_CHEAPAML */
245    
246    
247  #ifdef ALLOW_AUTODIFF  #ifdef ALLOW_AUTODIFF
248  c--   Add control vector for forcing and parameter fields  c--   Add control vector for forcing and parameter fields
249        IF ( myIter .EQ. nIter0 )        IF ( myIter .EQ. nIter0 )
# Line 241  C--     Step forward fields and calculat Line 288  C--     Step forward fields and calculat
288        CALL TIMER_STOP ('DO_ATMOSPHERIC_PHYS [FORWARD_STEP]',myThid)        CALL TIMER_STOP ('DO_ATMOSPHERIC_PHYS [FORWARD_STEP]',myThid)
289    
290  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
291  CADJ STORE surfaceforcingtice    = comlev1, key = ikey_dynamics  CADJ STORE surfaceforcingtice    = comlev1, key = ikey_dynamics,
292    CADJ &     kind = isbyte
293  # ifdef ALLOW_KPP  # ifdef ALLOW_KPP
294  CADJ STORE uvel               = comlev1, key = ikey_dynamics  CADJ STORE uvel               = comlev1, key = ikey_dynamics,
295  CADJ STORE vvel               = comlev1, key = ikey_dynamics  CADJ &     kind = isbyte
296    CADJ STORE vvel               = comlev1, key = ikey_dynamics,
297    CADJ &     kind = isbyte
298  # endif  # endif
299  # ifdef EXACT_CONSERV  # ifdef EXACT_CONSERV
300  cphCADJ STORE empmr              = comlev1, key = ikey_dynamics  cphCADJ STORE empmr              = comlev1, key = ikey_dynamics
301  cphCADJ STORE pmepr              = comlev1, key = ikey_dynamics  cphCADJ STORE pmepr              = comlev1, key = ikey_dynamics
302  # endif  # endif
303  # ifdef ALLOW_PTRACERS  # ifdef ALLOW_PTRACERS
304  CADJ STORE ptracer               = comlev1, key = ikey_dynamics  CADJ STORE ptracer               = comlev1, key = ikey_dynamics,
305    CADJ &     kind = isbyte
306  # endif  # endif
307  # if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)  # if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)
308  cph-test  cph-test
309  CADJ STORE hFacC                 = comlev1, key = ikey_dynamics  CADJ STORE hFacC                 = comlev1, key = ikey_dynamics,
310    CADJ &     kind = isbyte
311  #  ifndef DISABLE_RSTAR_CODE  #  ifndef DISABLE_RSTAR_CODE
312  CADJ STORE rstarexpc             = comlev1, key = ikey_dynamics  CADJ STORE rstarexpc             = comlev1, key = ikey_dynamics,
313    CADJ &     kind = isbyte
314  #  endif  #  endif
315  # endif  # endif
316  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
# Line 273  CADJ STORE rstarexpc             = comle Line 326  CADJ STORE rstarexpc             = comle
326         CALL DO_OCEANIC_PHYS( myTime, myIter, myThid )         CALL DO_OCEANIC_PHYS( myTime, myIter, myThid )
327         CALL TIMER_STOP ('DO_OCEANIC_PHYS     [FORWARD_STEP]',myThid)         CALL TIMER_STOP ('DO_OCEANIC_PHYS     [FORWARD_STEP]',myThid)
328  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
329  CADJ STORE EmPmR    = comlev1, key = ikey_dynamics  CADJ STORE EmPmR    = comlev1, key = ikey_dynamics,
330    CADJ &     kind = isbyte
331  # ifdef EXACT_CONSERV  # ifdef EXACT_CONSERV
332  CADJ STORE pmepr    = comlev1, key = ikey_dynamics  CADJ STORE pmepr    = comlev1, key = ikey_dynamics,
333    CADJ &     kind = isbyte
334  # endif  # endif
335  #else  #else
336        ENDIF        ENDIF
# Line 284  CADJ STORE pmepr    = comlev1, key = ike Line 339  CADJ STORE pmepr    = comlev1, key = ike
339  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
340  # ifdef NONLIN_FRSURF  # ifdef NONLIN_FRSURF
341  cph-test  cph-test
342  CADJ STORE hFac_surfC         = comlev1, key = ikey_dynamics  CADJ STORE hFac_surfC         = comlev1, key = ikey_dynamics,
343  CADJ STORE hfac_surfs         = comlev1, key = ikey_dynamics  CADJ &     kind = isbyte
344  CADJ STORE hfac_surfw         = comlev1, key = ikey_dynamics  CADJ STORE hfac_surfs         = comlev1, key = ikey_dynamics,
345    CADJ &     kind = isbyte
346    CADJ STORE hfac_surfw         = comlev1, key = ikey_dynamics,
347    CADJ &     kind = isbyte
348  # endif  # endif
349  # if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)  # if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)
350  CADJ STORE hFacC, hFacS, hFacW  CADJ STORE hFacC, hFacS, hFacW
351  CADJ &     = comlev1, key = ikey_dynamics  CADJ &     = comlev1, key = ikey_dynamics,
352    CADJ &     kind = isbyte
353  CADJ STORE recip_hFacC, recip_hFacS, recip_hFacW  CADJ STORE recip_hFacC, recip_hFacS, recip_hFacW
354  CADJ &     = comlev1, key = ikey_dynamics  CADJ &     = comlev1, key = ikey_dynamics,
355    CADJ &     kind = isbyte
356  c  c
357  CADJ STORE surfaceforcingu = comlev1, key = ikey_dynamics  CADJ STORE surfaceforcingu = comlev1, key = ikey_dynamics,
358  CADJ STORE surfaceforcingv = comlev1, key = ikey_dynamics  CADJ &     kind = isbyte
359    CADJ STORE surfaceforcingv = comlev1, key = ikey_dynamics,
360    CADJ &     kind = isbyte
361  # endif  # endif
362  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
363    
364  #ifdef ALLOW_GCHEM  #ifdef ALLOW_GCHEM
365  C     GCHEM package is an interface for any bio-geochemical or  #ifdef ALLOW_AUTODIFF_TAMC
366  C     ecosystem model you would like to include.  CADJ STORE ptracer  = comlev1, key = ikey_dynamics,
367  C     If GCHEM_SEPARATE_FORCING is not defined, you are  CADJ &     kind = isbyte
368  C     responsible for computing tendency terms for passive  CADJ STORE theta  = comlev1, key = ikey_dynamics,
369  C     tracers and storing them on a 3DxNumPtracers-array called  CADJ &     kind = isbyte
370  C     gchemTendency in GCHEM_CALC_TENDENCY. This tendency is then added  CADJ STORE salt  = comlev1, key = ikey_dynamics,
371  C     to gPtr in ptracers_forcing later-on.  CADJ &     kind = isbyte
372  C     If GCHEM_SEPARATE_FORCING is defined, you are reponsible for  #endif
 C     UPDATING ptracers directly in GCHEM_FORCING_SEP. This amounts  
 C     to a completely separate time step that you have to implement  
 C     yourself (Eulerian seems to be fine in most cases).  
 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC  
 C     CAVEAT: Up to now, when GCHEM is turned on the field ptracerForcingSurf,  
 C     which is needed for KPP is not set properly. ptracerForcingSurf must  
 C     be treated differently depending on whether GCHEM_SEPARATE_FORCING  
 C     is define or not. TBD.  
 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC  
373        IF ( useGCHEM ) THEN        IF ( useGCHEM ) THEN
374  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
375          IF ( debugLevel .GE. debLevB )          IF ( debugLevel .GE. debLevB )
# Line 332  CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC Line 385  CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
385  cph needed to be moved here from do_oceanic_physics  cph needed to be moved here from do_oceanic_physics
386  cph to be visible down the road  cph to be visible down the road
387  c  c
388  CADJ STORE surfaceForcingS    = comlev1, key = ikey_dynamics  CADJ STORE rhoInSitu          = comlev1, key = ikey_dynamics,
389  CADJ STORE surfaceForcingT    = comlev1, key = ikey_dynamics  CADJ &     kind = isbyte
390  CADJ STORE surfaceForcingTice = comlev1, key = ikey_dynamics  CADJ STORE surfaceForcingS    = comlev1, key = ikey_dynamics,
391  ctest(  CADJ &     kind = isbyte
392  CADJ STORE IVDConvCount       = comlev1, key = ikey_dynamics  CADJ STORE surfaceForcingT    = comlev1, key = ikey_dynamics,
393  ctest)  CADJ &     kind = isbyte
394    CADJ STORE surfaceForcingTice = comlev1, key = ikey_dynamics,
395    CADJ &     kind = isbyte
396    CADJ STORE IVDConvCount       = comlev1, key = ikey_dynamics,
397    CADJ &     kind = isbyte
398  # ifdef ALLOW_PTRACERS  # ifdef ALLOW_PTRACERS
399  CADJ STORE surfaceForcingPTr  = comlev1, key = ikey_dynamics  CADJ STORE surfaceForcingPTr  = comlev1, key = ikey_dynamics,
400    CADJ &     kind = isbyte
401  # endif  # endif
402  c  c
403  # ifdef ALLOW_GMREDI  # ifdef ALLOW_GMREDI
404  CADJ STORE Kwx                = comlev1, key = ikey_dynamics  CADJ STORE Kwx                = comlev1, key = ikey_dynamics,
405  CADJ STORE Kwy                = comlev1, key = ikey_dynamics  CADJ &     kind = isbyte
406  CADJ STORE Kwz                = comlev1, key = ikey_dynamics  CADJ STORE Kwy                = comlev1, key = ikey_dynamics,
407    CADJ &     kind = isbyte
408    CADJ STORE Kwz                = comlev1, key = ikey_dynamics,
409    CADJ &     kind = isbyte
410  #  ifdef GM_BOLUS_ADVEC  #  ifdef GM_BOLUS_ADVEC
411  CADJ STORE GM_PsiX            = comlev1, key = ikey_dynamics  CADJ STORE GM_PsiX            = comlev1, key = ikey_dynamics,
412  CADJ STORE GM_PsiY            = comlev1, key = ikey_dynamics  CADJ &     kind = isbyte
413    CADJ STORE GM_PsiY            = comlev1, key = ikey_dynamics,
414    CADJ &     kind = isbyte
415  #  endif  #  endif
416  # endif  # endif
417  c  c
418  # ifdef ALLOW_KPP  # ifdef ALLOW_KPP
419  CADJ STORE KPPghat            = comlev1, key = ikey_dynamics  CADJ STORE KPPghat            = comlev1, key = ikey_dynamics,
420  CADJ STORE KPPfrac            = comlev1, key = ikey_dynamics  CADJ &     kind = isbyte
421  CADJ STORE KPPdiffKzS         = comlev1, key = ikey_dynamics  CADJ STORE KPPfrac            = comlev1, key = ikey_dynamics,
422  CADJ STORE KPPdiffKzT         = comlev1, key = ikey_dynamics  CADJ &     kind = isbyte
423    CADJ STORE KPPdiffKzS         = comlev1, key = ikey_dynamics,
424    CADJ &     kind = isbyte
425    CADJ STORE KPPdiffKzT         = comlev1, key = ikey_dynamics,
426    CADJ &     kind = isbyte
427  # endif  # endif
428  c  c
429  # if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)  # if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)
430  CADJ STORE etaH               = comlev1, key = ikey_dynamics  CADJ STORE theta,salt,wvel          = comlev1, key = ikey_dynamics,
431    CADJ &     kind = isbyte
432    CADJ STORE etaH               = comlev1, key = ikey_dynamics,
433    CADJ &     kind = isbyte
434  #  ifdef ALLOW_CD_CODE  #  ifdef ALLOW_CD_CODE
435  CADJ STORE etanm1             = comlev1, key = ikey_dynamics  CADJ STORE etanm1             = comlev1, key = ikey_dynamics,
436    CADJ &     kind = isbyte
437  #  endif  #  endif
438  #  ifndef DISABLE_RSTAR_CODE  #  ifndef DISABLE_RSTAR_CODE
439  cph-test  cph-test
440  CADJ STORE rstarexpc = comlev1, key = ikey_dynamics  CADJ STORE rstarexpc = comlev1, key = ikey_dynamics,
441    CADJ &     kind = isbyte
442  #  endif  #  endif
443  # endif  # endif
444  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
# Line 376  CADJ STORE rstarexpc = comlev1, key = ik Line 448  CADJ STORE rstarexpc = comlev1, key = ik
448          IF ( debugLevel .GE. debLevB )          IF ( debugLevel .GE. debLevB )
449       &    CALL DEBUG_CALL('THERMODYNAMICS',myThid)       &    CALL DEBUG_CALL('THERMODYNAMICS',myThid)
450  #endif  #endif
451    CADJ STORE salt               = comlev1, key = ikey_dynamics,
452    CADJ &     kind = isbyte
453          CALL TIMER_START('THERMODYNAMICS      [FORWARD_STEP]',myThid)          CALL TIMER_START('THERMODYNAMICS      [FORWARD_STEP]',myThid)
454          CALL THERMODYNAMICS( myTime, myIter, myThid )          CALL THERMODYNAMICS( myTime, myIter, myThid )
455          CALL TIMER_STOP ('THERMODYNAMICS      [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('THERMODYNAMICS      [FORWARD_STEP]',myThid)
# Line 408  C      Read in coupling data that I impo Line 482  C      Read in coupling data that I impo
482    
483  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
484  # if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)  # if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)
485  CADJ STORE hFacC          = comlev1, key = ikey_dynamics  CADJ STORE hFacC          = comlev1, key = ikey_dynamics,
486  CADJ STORE hFacS          = comlev1, key = ikey_dynamics  CADJ &     kind = isbyte
487  CADJ STORE hFacW          = comlev1, key = ikey_dynamics  CADJ STORE hFacS          = comlev1, key = ikey_dynamics,
488  CADJ STORE recip_hFacC    = comlev1, key = ikey_dynamics  CADJ &     kind = isbyte
489  CADJ STORE recip_hFacS    = comlev1, key = ikey_dynamics  CADJ STORE hFacW          = comlev1, key = ikey_dynamics,
490  CADJ STORE recip_hFacW    = comlev1, key = ikey_dynamics  CADJ &     kind = isbyte
491  CADJ STORE etaN           = comlev1, key = ikey_dynamics  CADJ STORE recip_hFacC    = comlev1, key = ikey_dynamics,
492    CADJ &     kind = isbyte
493    CADJ STORE recip_hFacS    = comlev1, key = ikey_dynamics,
494    CADJ &     kind = isbyte
495    CADJ STORE recip_hFacW    = comlev1, key = ikey_dynamics,
496    CADJ &     kind = isbyte
497    CADJ STORE etaN           = comlev1, key = ikey_dynamics,
498    CADJ &     kind = isbyte
499  c  c
500  #  ifndef DISABLE_RSTAR_CODE  #  ifndef DISABLE_RSTAR_CODE
501  CADJ STORE rstarFacC    = comlev1, key = ikey_dynamics  CADJ STORE rstarFacC    = comlev1, key = ikey_dynamics,
502  CADJ STORE rstarFacS    = comlev1, key = ikey_dynamics  CADJ &     kind = isbyte
503  CADJ STORE rstarFacW    = comlev1, key = ikey_dynamics  CADJ STORE rstarFacS    = comlev1, key = ikey_dynamics,
504    CADJ &     kind = isbyte
505    CADJ STORE rstarFacW    = comlev1, key = ikey_dynamics,
506    CADJ &     kind = isbyte
507  c  c
508  CADJ STORE h0facc,h0facs,h0facw    CADJ STORE h0facc,h0facs,h0facw  
509  CADJ &     = comlev1, key = ikey_dynamics  CADJ &     = comlev1, key = ikey_dynamics,
510    CADJ &     kind = isbyte
511  CADJ STORE rstardhcdt,rstardhsdt,rstardhwdt  CADJ STORE rstardhcdt,rstardhsdt,rstardhwdt
512  CADJ &     = comlev1, key = ikey_dynamics  CADJ &     = comlev1, key = ikey_dynamics,
513    CADJ &     kind = isbyte
514  CADJ STORE rstarexpc,rstarexps,rstarexpw  CADJ STORE rstarexpc,rstarexps,rstarexpw
515  CADJ &     = comlev1, key = ikey_dynamics  CADJ &     = comlev1, key = ikey_dynamics,
516    CADJ &     kind = isbyte
517  #  endif  #  endif
518  # endif  # endif
519  #endif  #endif
# Line 447  C--   Step forward fields and calculate Line 534  C--   Step forward fields and calculate
534    
535  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
536  # if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)  # if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)
537  cph-test  CADJ STORE gU, gV  = comlev1, key = ikey_dynamics,
538  CADJ STORE gU, gV  = comlev1, key = ikey_dynamics  CADJ &     kind = isbyte
539  # endif  # endif
540  #endif  #endif
541    
# Line 484  C-    update hfacC,W,S and recip_hFac ac Line 571  C-    update hfacC,W,S and recip_hFac ac
571         IF ( select_rStar.GT.0 ) THEN         IF ( select_rStar.GT.0 ) THEN
572  # ifndef DISABLE_RSTAR_CODE  # ifndef DISABLE_RSTAR_CODE
573  # ifdef ALLOW_AUTODIFF_TAMC  # ifdef ALLOW_AUTODIFF_TAMC
574  cph-test  CADJ STORE hFacC    = comlev1, key = ikey_dynamics,
575  CADJ STORE hFacC    = comlev1, key = ikey_dynamics  CADJ &     kind = isbyte
576  CADJ STORE hFacS    = comlev1, key = ikey_dynamics  CADJ STORE hFacS    = comlev1, key = ikey_dynamics,
577  CADJ STORE hFacW    = comlev1, key = ikey_dynamics  CADJ &     kind = isbyte
578  CADJ STORE recip_hFacC    = comlev1, key = ikey_dynamics  CADJ STORE hFacW    = comlev1, key = ikey_dynamics,
579  CADJ STORE recip_hFacS    = comlev1, key = ikey_dynamics  CADJ &     kind = isbyte
580  CADJ STORE recip_hFacW    = comlev1, key = ikey_dynamics  CADJ STORE recip_hFacC    = comlev1, key = ikey_dynamics,
581    CADJ &     kind = isbyte
582    CADJ STORE recip_hFacS    = comlev1, key = ikey_dynamics,
583    CADJ &     kind = isbyte
584    CADJ STORE recip_hFacW    = comlev1, key = ikey_dynamics,
585    CADJ &     kind = isbyte
586  c  c
587  CADJ STORE rstarFacC    = comlev1, key = ikey_dynamics  CADJ STORE rstarFacC    = comlev1, key = ikey_dynamics,
588  CADJ STORE rstarFacS    = comlev1, key = ikey_dynamics  CADJ &     kind = isbyte
589  CADJ STORE rstarFacW    = comlev1, key = ikey_dynamics  CADJ STORE rstarFacS    = comlev1, key = ikey_dynamics,
590    CADJ &     kind = isbyte
591    CADJ STORE rstarFacW    = comlev1, key = ikey_dynamics,
592    CADJ &     kind = isbyte
593  c  c
594  CADJ STORE h0facc,h0facs,h0facw  = comlev1, key = ikey_dynamics  CADJ STORE h0facc,h0facs,h0facw  = comlev1, key = ikey_dynamics,
595    CADJ &     kind = isbyte
596  # endif  # endif
597          CALL TIMER_START('UPDATE_R_STAR       [FORWARD_STEP]',myThid)          CALL TIMER_START('UPDATE_R_STAR       [FORWARD_STEP]',myThid)
598          CALL UPDATE_R_STAR( myTime, myIter, myThid )          CALL UPDATE_R_STAR( myTime, myIter, myThid )
599          CALL TIMER_STOP ('UPDATE_R_STAR       [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('UPDATE_R_STAR       [FORWARD_STEP]',myThid)
600  # ifdef ALLOW_AUTODIFF_TAMC  # ifdef ALLOW_AUTODIFF_TAMC
601  cph-test  CADJ STORE hFacC    = comlev1, key = ikey_dynamics,
602  CADJ STORE hFacC    = comlev1, key = ikey_dynamics  CADJ &     kind = isbyte
603  CADJ STORE hFacS    = comlev1, key = ikey_dynamics  CADJ STORE hFacS    = comlev1, key = ikey_dynamics,
604  CADJ STORE hFacW    = comlev1, key = ikey_dynamics  CADJ &     kind = isbyte
605  CADJ STORE recip_hFacC    = comlev1, key = ikey_dynamics  CADJ STORE hFacW    = comlev1, key = ikey_dynamics,
606  CADJ STORE recip_hFacS    = comlev1, key = ikey_dynamics  CADJ &     kind = isbyte
607  CADJ STORE recip_hFacW    = comlev1, key = ikey_dynamics  CADJ STORE recip_hFacC    = comlev1, key = ikey_dynamics,
608    CADJ &     kind = isbyte
609    CADJ STORE recip_hFacS    = comlev1, key = ikey_dynamics,
610    CADJ &     kind = isbyte
611    CADJ STORE recip_hFacW    = comlev1, key = ikey_dynamics,
612    CADJ &     kind = isbyte
613  # endif  # endif
614  # endif /* DISABLE_RSTAR_CODE */  # endif /* DISABLE_RSTAR_CODE */
615         ELSE         ELSE
616  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
617  CADJ STORE hFac_surfC, hFac_surfS, hFac_surfW  CADJ STORE hFac_surfC, hFac_surfS, hFac_surfW
618  CADJ &     = comlev1, key = ikey_dynamics  CADJ &     = comlev1, key = ikey_dynamics,
619    CADJ &     kind = isbyte
620  #endif  #endif
621          CALL TIMER_START('UPDATE_SURF_DR      [FORWARD_STEP]',myThid)          CALL TIMER_START('UPDATE_SURF_DR      [FORWARD_STEP]',myThid)
622          CALL UPDATE_SURF_DR( myTime, myIter, myThid )          CALL UPDATE_SURF_DR( myTime, myIter, myThid )
# Line 522  CADJ &     = comlev1, key = ikey_dynamic Line 624  CADJ &     = comlev1, key = ikey_dynamic
624         ENDIF         ENDIF
625        ENDIF        ENDIF
626  # ifdef ALLOW_AUTODIFF_TAMC  # ifdef ALLOW_AUTODIFF_TAMC
627  cph-test  CADJ STORE hFacC    = comlev1, key = ikey_dynamics,
628  CADJ STORE hFacC    = comlev1, key = ikey_dynamics  CADJ &     kind = isbyte
629  CADJ STORE hFacS    = comlev1, key = ikey_dynamics  CADJ STORE hFacS    = comlev1, key = ikey_dynamics,
630  CADJ STORE hFacW    = comlev1, key = ikey_dynamics  CADJ &     kind = isbyte
631  CADJ STORE recip_hFacC    = comlev1, key = ikey_dynamics  CADJ STORE hFacW    = comlev1, key = ikey_dynamics,
632  CADJ STORE recip_hFacS    = comlev1, key = ikey_dynamics  CADJ &     kind = isbyte
633  CADJ STORE recip_hFacW    = comlev1, key = ikey_dynamics  CADJ STORE recip_hFacC    = comlev1, key = ikey_dynamics,
634    CADJ &     kind = isbyte
635    CADJ STORE recip_hFacS    = comlev1, key = ikey_dynamics,
636    CADJ &     kind = isbyte
637    CADJ STORE recip_hFacW    = comlev1, key = ikey_dynamics,
638    CADJ &     kind = isbyte
639  # endif  # endif
640  C-    update also CG2D matrix (and preconditioner)  C-    update also CG2D matrix (and preconditioner)
641        IF ( momStepping .AND. nonlinFreeSurf.GT.2 ) THEN        IF ( momStepping .AND. nonlinFreeSurf.GT.2 ) THEN
# Line 572  C     three-dimensional for non-hydrosta Line 679  C     three-dimensional for non-hydrosta
679  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
680  # if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)  # if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)
681  CADJ STORE uvel, vvel  CADJ STORE uvel, vvel
682  CADJ &     = comlev1, key = ikey_dynamics  CADJ &     = comlev1, key = ikey_dynamics,
683    CADJ &     kind = isbyte
684  CADJ STORE empmr,hfacs,hfacw  CADJ STORE empmr,hfacs,hfacw
685  CADJ &     = comlev1, key = ikey_dynamics  CADJ &     = comlev1, key = ikey_dynamics,
686    CADJ &     kind = isbyte
687  # endif  # endif
688  #endif  #endif
689          CALL TIMER_START('SOLVE_FOR_PRESSURE  [FORWARD_STEP]',myThid)          CALL TIMER_START('SOLVE_FOR_PRESSURE  [FORWARD_STEP]',myThid)
# Line 591  C--   Correct divergence in flow field a Line 700  C--   Correct divergence in flow field a
700  #  ifndef DISABLE_RSTAR_CODE  #  ifndef DISABLE_RSTAR_CODE
701  cph-test  cph-test
702  cph not clear, why this one  cph not clear, why this one
703  CADJ STORE h0facc = comlev1, key = ikey_dynamics  CADJ STORE h0facc = comlev1, key = ikey_dynamics,
704    CADJ &     kind = isbyte
705  #  endif  #  endif
706  # endif  # endif
707  # ifdef ALLOW_DEPTH_CONTROL  # ifdef ALLOW_DEPTH_CONTROL
# Line 620  C--   Update etaH(n+1) : Line 730  C--   Update etaH(n+1) :
730  # ifndef DISABLE_RSTAR_CODE  # ifndef DISABLE_RSTAR_CODE
731  #  ifdef ALLOW_AUTODIFF_TAMC  #  ifdef ALLOW_AUTODIFF_TAMC
732  cph-test  cph-test
733  CADJ STORE rstarfacc,rstarfacs,rstarfacw = comlev1, key = ikey_dynamics  CADJ STORE rstarfacc,rstarfacs,rstarfacw = comlev1, key = ikey_dynamics,
734    CADJ &     kind = isbyte
735  #  endif  #  endif
736  C--   r* : compute the future level thickness according to etaH(n+1)  C--   r* : compute the future level thickness according to etaH(n+1)
737          CALL TIMER_START('CALC_R_STAR         [FORWARD_STEP]',myThid)          CALL TIMER_START('CALC_R_STAR         [FORWARD_STEP]',myThid)
# Line 630  C--   r* : compute the future level thic Line 741  C--   r* : compute the future level thic
741        ELSEIF ( nonlinFreeSurf.GT.0) THEN        ELSEIF ( nonlinFreeSurf.GT.0) THEN
742  C--   compute the future surface level thickness according to etaH(n+1)  C--   compute the future surface level thickness according to etaH(n+1)
743  # ifdef ALLOW_AUTODIFF_TAMC  # ifdef ALLOW_AUTODIFF_TAMC
744  CADJ STORE etaH          = comlev1, key = ikey_dynamics  CADJ STORE etaH          = comlev1, key = ikey_dynamics,
745    CADJ &     kind = isbyte
746  # endif  # endif
747          CALL TIMER_START('CALC_SURF_DR      [FORWARD_STEP]',myThid)          CALL TIMER_START('CALC_SURF_DR      [FORWARD_STEP]',myThid)
748          CALL CALC_SURF_DR(etaH, myTime, myIter, myThid )          CALL CALC_SURF_DR(etaH, myTime, myIter, myThid )
749          CALL TIMER_STOP ('CALC_SURF_DR      [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('CALC_SURF_DR      [FORWARD_STEP]',myThid)
750        ENDIF        ENDIF
751  # ifdef ALLOW_AUTODIFF_TAMC  # ifdef ALLOW_AUTODIFF_TAMC
752  cph-test  CADJ STORE hFac_surfC       = comlev1, key = ikey_dynamics,
753  CADJ STORE hFac_surfC    = comlev1, key = ikey_dynamics  CADJ &     kind = isbyte
754    CADJ STORE salt,theta,vvel  = comlev1, key = ikey_dynamics,
755    CADJ &     kind = isbyte
756  # endif  # endif
757  #endif /* NONLIN_FRSURF */  #endif /* NONLIN_FRSURF */
758    
# Line 677  C---+--------+----2----+----3----+----4- Line 791  C---+--------+----2----+----3----+----4-
791  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
792  cph This is needed because convective_adjustment calls  cph This is needed because convective_adjustment calls
793  cph find_rho which may use pressure()  cph find_rho which may use pressure()
794  CADJ STORE totphihyd  = comlev1, key = ikey_dynamics  CADJ STORE totphihyd  = comlev1, key = ikey_dynamics,
795    CADJ &     kind = isbyte
796  #endif  #endif
797  C--   Cycle time-stepping Tracers arrays (T,S,+pTracers)  C--   Cycle time-stepping Tracers arrays (T,S,+pTracers)
798        CALL TIMER_START('TRC_CORRECTION_STEP [FORWARD_STEP]',myThid)        CALL TIMER_START('TRC_CORRECTION_STEP [FORWARD_STEP]',myThid)
# Line 687  C--   Cycle time-stepping Tracers arrays Line 802  C--   Cycle time-stepping Tracers arrays
802  #ifdef ALLOW_GCHEM  #ifdef ALLOW_GCHEM
803  C     Add separate timestepping of chemical/biological/forcing  C     Add separate timestepping of chemical/biological/forcing
804  C     of ptracers here in GCHEM_FORCING_SEP  C     of ptracers here in GCHEM_FORCING_SEP
805    #ifdef ALLOW_AUTODIFF_TAMC
806    CADJ STORE ptracer  = comlev1, key = ikey_dynamics,
807    CADJ &     kind = isbyte
808    CADJ STORE theta  = comlev1, key = ikey_dynamics,
809    CADJ &     kind = isbyte
810    CADJ STORE salt  = comlev1, key = ikey_dynamics,
811    CADJ &     kind = isbyte
812    #endif
813        IF ( useGCHEM ) THEN        IF ( useGCHEM ) THEN
814  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
815           IF ( debugLevel .GE. debLevB )           IF ( debugLevel .GE. debLevB )
# Line 734  C--   Do "blocking" sends and receives f Line 857  C--   Do "blocking" sends and receives f
857  C--   Calculate float trajectories  C--   Calculate float trajectories
858        IF (useFLT) THEN        IF (useFLT) THEN
859          CALL TIMER_START('FLOATS            [FORWARD_STEP]',myThid)          CALL TIMER_START('FLOATS            [FORWARD_STEP]',myThid)
860          CALL FLT_MAIN(myIter,myTime, myThid)          CALL FLT_MAIN( myTime, myIter, myThid )
861          CALL TIMER_STOP ('FLOATS            [FORWARD_STEP]',myThid)          CALL TIMER_STOP ('FLOATS            [FORWARD_STEP]',myThid)
862        ENDIF        ENDIF
863  #endif  #endif
# Line 768  C--   Do IO if needed. Line 891  C--   Do IO if needed.
891        CALL DO_THE_MODEL_IO( myTime, myIter, myThid )        CALL DO_THE_MODEL_IO( myTime, myIter, myThid )
892        CALL TIMER_STOP ('DO_THE_MODEL_IO     [FORWARD_STEP]',myThid)        CALL TIMER_STOP ('DO_THE_MODEL_IO     [FORWARD_STEP]',myThid)
893    
894          modelEnd = myTime.EQ.endTime .OR. myIter.EQ.nEndIter
895  #ifdef HAVE_SIGREG  #ifdef HAVE_SIGREG
896        IF ( useSIGREG ) THEN        IF ( useSIGREG ) THEN
897          IF ( i_got_signal .GT. 0 ) THEN          modelEnd = modelEnd .OR. ( i_got_signal.GT.0 )
           CALL PACKAGES_WRITE_PICKUP(  
      I         .TRUE., myTime, myIter, myThid )  
           CALL WRITE_PICKUP(  
      I         .TRUE., myTime, myIter, myThid )  
           STOP 'Checkpoint completed -- killed by signal handler'  
         ENDIF  
898        ENDIF        ENDIF
899  #endif /* HAVE_SIGREG */  #endif /* HAVE_SIGREG */
900    
901  C--   Save state for restarts  C--   Save state for restarts
902        CALL TIMER_START('DO_WRITE_PICKUP     [FORWARD_STEP]',myThid)        CALL TIMER_START('DO_WRITE_PICKUP     [FORWARD_STEP]',myThid)
903        CALL DO_WRITE_PICKUP(        CALL DO_WRITE_PICKUP(
904       I               .FALSE., myTime, myIter, myThid )       I                      modelEnd, myTime, myIter, myThid )
905        CALL TIMER_STOP ('DO_WRITE_PICKUP     [FORWARD_STEP]',myThid)        CALL TIMER_STOP ('DO_WRITE_PICKUP     [FORWARD_STEP]',myThid)
906    
907    #ifdef HAVE_SIGREG
908          IF ( useSIGREG ) THEN
909            IF ( modelEnd .AND. i_got_signal.GT.0 ) THEN
910              STOP 'Checkpoint completed -- killed by signal handler'
911            ENDIF
912          ENDIF
913    #endif /* HAVE_SIGREG */
914    
915    #ifdef ALLOW_AUTODIFF_TAMC
916          CALL AUTODIFF_INADMODE_SET( myThid )
917    #endif
918    
919    #ifdef ALLOW_SHOWFLOPS
920          CALL TIMER_START('SHOWFLOPS_INLOOP   [THE_MAIN_LOOP]', mythid)
921          CALL SHOWFLOPS_INLOOP( iloop, mythid )
922          CALL TIMER_STOP ('SHOWFLOPS_INLOOP   [THE_MAIN_LOOP]', mythid)
923    #endif
924    
925  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
926        IF ( debugLevel .GE. debLevB )        IF ( debugLevel .GE. debLevB )
927       &    CALL DEBUG_LEAVE('FORWARD_STEP',myThid)       &    CALL DEBUG_LEAVE('FORWARD_STEP',myThid)

Legend:
Removed from v.1.153  
changed lines
  Added in v.1.165

  ViewVC Help
Powered by ViewVC 1.1.22