New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
step_c1d.F90 in branches/2015/dev_r5803_NOC_WAD/NEMOGCM/NEMO/OPA_SRC/C1D – NEMO

source: branches/2015/dev_r5803_NOC_WAD/NEMOGCM/NEMO/OPA_SRC/C1D/step_c1d.F90 @ 5870

Last change on this file since 5870 was 5870, checked in by acc, 8 years ago

Branch 2015/dev_r5803_NOC_WAD. Merge in trunk changes from 5803 to 5869 in preparation for merge. Also tidied and reorganised some wetting and drying code. Renamed wadlmt.F90 to wetdry.F90. Wetting drying code changes restricted to domzgr.F90, domvvl.F90 nemogcm.F90 sshwzv.F90, dynspg_ts.F90, wetdry.F90 and dynhpg.F90. Code passes full SETTE tests with ln_wd=.false.. Still awaiting test case for checking with ln_wd=.false.

  • Property svn:keywords set to Id
File size: 9.2 KB
Line 
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   !!----------------------------------------------------------------------
15   USE step_oce        ! time stepping definition modules
16#if defined key_top
17   USE trcstp          ! passive tracer time-stepping      (trc_stp routine)
18#endif
19   USE dyncor_c1d      ! Coriolis term (c1d case)         (dyn_cor_1d     )
20   USE dynnxt_c1d      ! time-stepping                    (dyn_nxt routine)
21   USE dyndmp          ! U & V momentum damping           (dyn_dmp routine)
22   USE restart         ! restart
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)
34   !! $Id$
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
62      IF( kstp == nit000 )   CALL iom_init( "nemo")   ! iom_put initialization (must be done after nemo_init for AGRIF+XIOS+OASIS)
63      IF( kstp /= nit000 )   CALL day( kstp )         ! Calendar (day was already called at nit000 in day_init)
64                             CALL iom_setkt( kstp - nit000 + 1, "nemo" )   ! say to iom that we are at time step kstp
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      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
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
76                         CALL bn2( tsb, rab_b, rn2b ) ! before Brunt-Vaisala frequency
77                         CALL bn2( tsn, rab_n, rn2  ) ! now    Brunt-Vaisala frequency
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_zdfcst  )   THEN                            ! Constant Kz (reset avt, avm[uv] to the background value)
85         avt (:,:,:) = rn_avt0 * tmask(:,:,:)
86         avmu(:,:,:) = rn_avm0 * umask(:,:,:)
87         avmv(:,:,:) = rn_avm0 * vmask(:,:,:)
88      ENDIF
89
90      IF( ln_rnf_mouth ) THEN                         ! increase diffusivity at rivers mouths
91         DO jk = 2, nkrnf   ;   avt(:,:,jk) = avt(:,:,jk) + 2.e0 * rn_avt_rnf * rnfmsk(:,:)   ;   END DO
92      ENDIF
93      IF( ln_zdfevd  )   CALL zdf_evd( kstp )         ! enhanced vertical eddy diffusivity
94      IF( lk_zdftmx  )   CALL zdf_tmx( kstp )         ! tidal vertical mixing
95      IF( lk_zdfddm  )   CALL zdf_ddm( kstp )         ! double diffusive mixing
96                         CALL zdf_mxl( kstp )         ! mixed layer depth
97
98                                                      ! write tke information in the restart file
99      IF( lrst_oce .AND. lk_zdftke )   CALL tke_rst( kstp, 'WRITE' )
100                                                      ! write gls information in the restart file
101      IF( lrst_oce .AND. lk_zdfgls )   CALL gls_rst( kstp, 'WRITE' )
102
103      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
104      ! diagnostics and outputs             (ua, va, ta, sa used as workspace)
105      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
106                         CALL dia_wri( kstp )       ! ocean model: outputs
107      IF( lk_diahth  )   CALL dia_hth( kstp )       ! Thermocline depth (20°C)
108
109
110#if defined key_top
111      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
112      ! Passive Tracer Model
113      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
114                        CALL trc_stp( kstp )       ! time-stepping
115#endif
116
117      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
118      ! Active tracers                              (ua, va used as workspace)
119      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
120                        tsa(:,:,:,:) = 0._wp       ! set tracer trends to zero
121
122                        CALL tra_sbc( kstp )       ! surface boundary condition
123      IF( ln_traqsr )   CALL tra_qsr( kstp )       ! penetrative solar radiation qsr
124      IF( ln_tradmp )   CALL tra_dmp( kstp )       ! internal damping trends- tracers
125                        CALL tra_zdf( kstp )       ! vertical mixing
126                        CALL eos( tsn, rhd, rhop, gdept_0(:,:,:) )   ! now potential density for zdfmxl
127      IF( ln_zdfnpc )   CALL tra_npc( kstp )       ! applied non penetrative convective adjustment on (t,s)
128                        CALL tra_nxt( kstp )       ! tracer fields at next time step
129
130
131
132      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
133      ! Dynamics                                    (ta, sa used as workspace)
134      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
135                        ua(:,:,:) = 0._wp          ! set dynamics trends to zero
136                        va(:,:,:) = 0._wp
137
138      IF( ln_dyndmp )   CALL dyn_dmp    ( kstp )   ! internal damping trends- momentum
139                        CALL dyn_cor_c1d( kstp )   ! vorticity term including Coriolis
140                        CALL dyn_zdf    ( kstp )   ! vertical diffusion
141                        CALL dyn_nxt_c1d( kstp )   ! lateral velocity at next time step
142
143      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
144      ! Control and restarts
145      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
146                             CALL stp_ctl( kstp, indic )
147      IF( kstp == nit000 )   CALL iom_close( numror )      ! close input  ocean restart file
148      IF( lrst_oce       )   CALL rst_write( kstp )        ! write output ocean restart file
149      !
150#if defined key_iomput
151      IF( kstp == nitend .OR. indic < 0 )   CALL xios_context_finalize()   ! needed for XIOS
152      !
153#endif
154   END SUBROUTINE stp_c1d
155
156#else
157   !!----------------------------------------------------------------------
158   !!   Default key                                            NO 1D Config
159   !!----------------------------------------------------------------------
160CONTAINS
161   SUBROUTINE stp_c1d ( kt )      ! dummy routine
162      WRITE(*,*) 'stp_c1d: You should not have seen this print! error?', kt
163   END SUBROUTINE stp_c1d
164#endif
165
166   !!======================================================================
167END MODULE step_c1d
Note: See TracBrowser for help on using the repository browser.