source: branches/UKMO/r6232_tracer_advection/NEMOGCM/NEMO/OPA_SRC/C1D/step_c1d.F90 @ 9295

Last change on this file since 9295 was 9295, checked in by jcastill, 3 years ago

Remove svn keywords

File size: 9.5 KB
RevLine 
[2409]1MODULE step_c1d
2   !!======================================================================
3   !!                       ***  MODULE step_c1d  ***
4   !! Time-stepping    : manager of the ocean, tracer and ice time stepping - c1d case
5   !!======================================================================
6   !! History :   2.0  !  2004-04  (C. Ethe)  adapted from step.F90 for C1D
7   !!             3.0  !  2008-04  (G. Madec)  redo the adaptation to include SBC
8   !!----------------------------------------------------------------------
9#if defined key_c1d
10   !!----------------------------------------------------------------------
11   !!   'key_c1d'                                       1D Configuration
12   !!---------------------------------------------------------------------- 
13   !!   stp_c1d        : NEMO system time-stepping in c1d case
14   !!----------------------------------------------------------------------
[4245]15   USE step_oce        ! time stepping definition modules
[2409]16#if defined key_top
[4245]17   USE trcstp          ! passive tracer time-stepping      (trc_stp routine)
[2409]18#endif
19   USE dyncor_c1d      ! Coriolis term (c1d case)         (dyn_cor_1d     )
20   USE dynnxt_c1d      ! time-stepping                    (dyn_nxt routine)
[4245]21   USE dyndmp          ! U & V momentum damping           (dyn_dmp routine)
[3680]22   USE restart         ! restart
[2409]23
24   IMPLICIT NONE
25   PRIVATE
26
27   PUBLIC stp_c1d      ! called by opa.F90
28
29   !! * Substitutions
30#  include "domzgr_substitute.h90"
31#  include "zdfddm_substitute.h90"
32   !!----------------------------------------------------------------------
33   !! NEMO/C1D 3.3 , NEMO Consortium (2010)
[5215]34   !! $Id$
[2409]35   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
36   !!----------------------------------------------------------------------
37CONTAINS
38
39   SUBROUTINE stp_c1d( kstp )
40      !!----------------------------------------------------------------------
41      !!                     ***  ROUTINE stp_c1d  ***
42      !!                     
43      !! ** Purpose :  - Time stepping of SBC including LIM (dynamic and thermodynamic eqs.)
44      !!               - Time stepping of OPA (momentum and active tracer eqs.)
45      !!               - Time stepping of TOP (passive tracer eqs.)
46      !!
47      !! ** Method  : -1- Update forcings and data 
48      !!              -2- Update vertical ocean physics
49      !!              -3- Compute the t and s trends
50      !!              -4- Update t and s
51      !!              -5- Compute the momentum trends
52      !!              -6- Update the horizontal velocity
53      !!              -7- Compute the diagnostics variables (rd,N2, div,cur,w)
54      !!              -8- Outputs and diagnostics
55      !!----------------------------------------------------------------------
56      INTEGER, INTENT(in) ::   kstp   ! ocean time-step index
57      INTEGER ::   jk       ! dummy loop indice
58      INTEGER ::   indic    ! error indicator if < 0
59      !! ---------------------------------------------------------------------
60
61                             indic = 0                ! reset to no error condition
[4247]62      IF( kstp == nit000 )   CALL iom_init( "nemo")   ! iom_put initialization (must be done after nemo_init for AGRIF+XIOS+OASIS)
[2409]63      IF( kstp /= nit000 )   CALL day( kstp )         ! Calendar (day was already called at nit000 in day_init)
[4247]64                             CALL iom_setkt( kstp - nit000 + 1, "nemo" )   ! say to iom that we are at time step kstp
[2409]65
66      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
67      ! Update data, open boundaries, surface boundary condition (including sea-ice)
68      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
69                         CALL sbc    ( kstp )         ! Sea Boundary Condition (including sea-ice)
70
71      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
72      ! Ocean physics update                (ua, va, ta, sa used as workspace)
73      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
[5108]74                         CALL eos_rab( tsb, rab_b )   ! before local thermal/haline expension ratio at T-points
75                         CALL eos_rab( tsn, rab_n )   ! now    local thermal/haline expension ratio at T-points
[4990]76                         CALL bn2( tsb, rab_b, rn2b ) ! before Brunt-Vaisala frequency
77                         CALL bn2( tsn, rab_n, rn2  ) ! now    Brunt-Vaisala frequency
[2409]78      !  VERTICAL PHYSICS   
79                         CALL zdf_bfr( kstp )         ! bottom friction
80      !                                               ! Vertical eddy viscosity and diffusivity coefficients
81      IF( lk_zdfric  )   CALL zdf_ric( kstp )            ! Richardson number dependent Kz
82      IF( lk_zdftke  )   CALL zdf_tke( kstp )            ! TKE closure scheme for Kz
83      IF( lk_zdfgls  )   CALL zdf_gls( kstp )            ! GLS closure scheme for Kz
84      IF( lk_zdfkpp  )   CALL zdf_kpp( kstp )            ! KPP closure scheme for Kz
85      IF( lk_zdfcst  )   THEN                            ! Constant Kz (reset avt, avm[uv] to the background value)
86         avt (:,:,:) = rn_avt0 * tmask(:,:,:)
87         avmu(:,:,:) = rn_avm0 * umask(:,:,:)
88         avmv(:,:,:) = rn_avm0 * vmask(:,:,:)
89      ENDIF
90
91      IF( ln_rnf_mouth ) THEN                         ! increase diffusivity at rivers mouths
92         DO jk = 2, nkrnf   ;   avt(:,:,jk) = avt(:,:,jk) + 2.e0 * rn_avt_rnf * rnfmsk(:,:)   ;   END DO
93      ENDIF
94      IF( ln_zdfevd  )   CALL zdf_evd( kstp )         ! enhanced vertical eddy diffusivity
95
96      IF( lk_zdftmx  )   CALL zdf_tmx( kstp )         ! tidal vertical mixing
97
98      IF( lk_zdfddm .AND. .NOT. lk_zdfkpp )   &
99         &               CALL zdf_ddm( kstp )         ! double diffusive mixing
100         
101                         CALL zdf_mxl( kstp )         ! mixed layer depth
102
103                                                      ! write tke information in the restart file
104      IF( lrst_oce .AND. lk_zdftke )   CALL tke_rst( kstp, 'WRITE' )
105                                                      ! write gls information in the restart file
106      IF( lrst_oce .AND. lk_zdfgls )   CALL gls_rst( kstp, 'WRITE' )
107
108      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
109      ! diagnostics and outputs             (ua, va, ta, sa used as workspace)
110      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
111                         CALL dia_wri( kstp )       ! ocean model: outputs
[4153]112      IF( lk_diahth  )   CALL dia_hth( kstp )       ! Thermocline depth (20°C)
[2409]113
[4153]114
[2409]115#if defined key_top
116      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
117      ! Passive Tracer Model
118      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
[4990]119                        CALL trc_stp( kstp )       ! time-stepping
[2409]120#endif
121
122      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
123      ! Active tracers                              (ua, va used as workspace)
124      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
[4990]125                        tsa(:,:,:,:) = 0._wp       ! set tracer trends to zero
[2409]126
[4990]127                        CALL tra_sbc( kstp )       ! surface boundary condition
128      IF( ln_traqsr )   CALL tra_qsr( kstp )       ! penetrative solar radiation qsr
129      IF( ln_tradmp )   CALL tra_dmp( kstp )       ! internal damping trends- tracers
130      IF( lk_zdfkpp )   CALL tra_kpp( kstp )       ! KPP non-local tracer fluxes
131                        CALL tra_zdf( kstp )       ! vertical mixing
132                        CALL eos( tsn, rhd, rhop, gdept_0(:,:,:) )   ! now potential density for zdfmxl
133      IF( ln_zdfnpc )   CALL tra_npc( kstp )       ! applied non penetrative convective adjustment on (t,s)
134                        CALL tra_nxt( kstp )       ! tracer fields at next time step
[2409]135
[5108]136
137
[2409]138      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
139      ! Dynamics                                    (ta, sa used as workspace)
140      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
[4990]141                        ua(:,:,:) = 0._wp          ! set dynamics trends to zero
142                        va(:,:,:) = 0._wp
[2409]143
[4990]144      IF( ln_dyndmp )   CALL dyn_dmp    ( kstp )   ! internal damping trends- momentum
145                        CALL dyn_cor_c1d( kstp )   ! vorticity term including Coriolis
146                        CALL dyn_zdf    ( kstp )   ! vertical diffusion
147                        CALL dyn_nxt_c1d( kstp )   ! lateral velocity at next time step
[2409]148
149      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
150      ! Control and restarts
151      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
[4990]152                             CALL stp_ctl( kstp, indic )
153      IF( kstp == nit000 )   CALL iom_close( numror )      ! close input  ocean restart file
154      IF( lrst_oce       )   CALL rst_write( kstp )        ! write output ocean restart file
[2409]155      !
[5412]156#if defined key_iomput
157      IF( kstp == nitend .OR. indic < 0 )   CALL xios_context_finalize()   ! needed for XIOS
158      !
159#endif
[2409]160   END SUBROUTINE stp_c1d
161
162#else
163   !!----------------------------------------------------------------------
164   !!   Default key                                            NO 1D Config
165   !!----------------------------------------------------------------------
166CONTAINS
167   SUBROUTINE stp_c1d ( kt )      ! dummy routine
168      WRITE(*,*) 'stp_c1d: You should not have seen this print! error?', kt
169   END SUBROUTINE stp_c1d
170#endif
171
172   !!======================================================================
173END MODULE step_c1d
Note: See TracBrowser for help on using the repository browser.