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.
sbcmod.F90 in branches/2012/dev_r3389_INGV4_stokes/NEMOGCM/NEMO/OPA_SRC/SBC – NEMO

source: branches/2012/dev_r3389_INGV4_stokes/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90 @ 3529

Last change on this file since 3529 was 3529, checked in by adani, 11 years ago

Read 2d Stokes Drift (U,V) and wavenumber, compute the 3D fields and the vertical component of the Stokes Drift.

  • Property svn:keywords set to Id
File size: 23.6 KB
Line 
1MODULE sbcmod
2   !!======================================================================
3   !!                       ***  MODULE  sbcmod  ***
4   !! Surface module :  provide to the ocean its surface boundary condition
5   !!======================================================================
6   !! History :  3.0  ! 2006-07  (G. Madec)  Original code
7   !!            3.1  ! 2008-08  (S. Masson, A. Caubel, E. Maisonnave, G. Madec) coupled interface
8   !!            3.3  ! 2010-04  (M. Leclair, G. Madec)  Forcing averaged over 2 time steps
9   !!            3.3  ! 2010-10  (S. Masson)  add diurnal cycle
10   !!            3.3  ! 2010-09  (D. Storkey) add ice boundary conditions (BDY)
11   !!             -   ! 2010-11  (G. Madec) ice-ocean stress always computed at each ocean time-step
12   !!             -   ! 2010-10  (J. Chanut, C. Bricaud, G. Madec)  add the surface pressure forcing
13   !!            3.4  ! 2011-11  (C. Harris) CICE added as an option
14   !!----------------------------------------------------------------------
15
16   !!----------------------------------------------------------------------
17   !!   sbc_init       : read namsbc namelist
18   !!   sbc            : surface ocean momentum, heat and freshwater boundary conditions
19   !!----------------------------------------------------------------------
20   USE oce              ! ocean dynamics and tracers
21   USE dom_oce          ! ocean space and time domain
22   USE phycst           ! physical constants
23   USE sbc_oce          ! Surface boundary condition: ocean fields
24   USE sbc_ice          ! Surface boundary condition: ice fields
25   USE sbcdcy           ! surface boundary condition: diurnal cycle
26   USE sbcssm           ! surface boundary condition: sea-surface mean variables
27   USE sbcapr           ! surface boundary condition: atmospheric pressure
28   USE sbcana           ! surface boundary condition: analytical formulation
29   USE sbcflx           ! surface boundary condition: flux formulation
30   USE sbcblk_clio      ! surface boundary condition: bulk formulation : CLIO
31   USE sbcblk_core      ! surface boundary condition: bulk formulation : CORE
32   USE sbcblk_mfs       ! surface boundary condition: bulk formulation : MFS
33   USE sbcice_if        ! surface boundary condition: ice-if sea-ice model
34   USE sbcice_lim       ! surface boundary condition: LIM 3.0 sea-ice model
35   USE sbcice_lim_2     ! surface boundary condition: LIM 2.0 sea-ice model
36   USE sbcice_cice      ! surface boundary condition: CICE    sea-ice model
37   USE sbccpl           ! surface boundary condition: coupled florulation
38   USE cpl_oasis3, ONLY:lk_cpl      ! are we in coupled mode?
39   USE sbcssr           ! surface boundary condition: sea surface restoring
40   USE sbcrnf           ! surface boundary condition: runoffs
41   USE sbcfwb           ! surface boundary condition: freshwater budget
42   USE closea           ! closed sea
43   USE bdy_par          ! for lk_bdy
44   USE bdyice_lim2      ! unstructured open boundary data  (bdy_ice_lim_2 routine)
45
46   USE prtctl           ! Print control                    (prt_ctl routine)
47   USE restart          ! ocean restart
48   USE iom              ! IOM library
49   USE in_out_manager   ! I/O manager
50   USE lib_mpp          ! MPP library
51   USE timing           ! Timing
52   USE sbcwave          ! Wave module
53
54   IMPLICIT NONE
55   PRIVATE
56
57   PUBLIC   sbc        ! routine called by step.F90
58   PUBLIC   sbc_init   ! routine called by opa.F90
59   
60   INTEGER ::   nsbc   ! type of surface boundary condition (deduced from namsbc informations)
61     
62   !! * Substitutions
63#  include "domzgr_substitute.h90"
64   !!----------------------------------------------------------------------
65   !! NEMO/OPA 4.0 , NEMO-consortium (2011)
66   !! $Id$
67   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
68   !!----------------------------------------------------------------------
69CONTAINS
70
71   SUBROUTINE sbc_init
72      !!---------------------------------------------------------------------
73      !!                    ***  ROUTINE sbc_init ***
74      !!
75      !! ** Purpose :   Initialisation of the ocean surface boundary computation
76      !!
77      !! ** Method  :   Read the namsbc namelist and set derived parameters
78      !!
79      !! ** Action  : - read namsbc parameters
80      !!              - nsbc: type of sbc
81      !!----------------------------------------------------------------------
82      INTEGER ::   icpt   ! local integer
83      !!
84      NAMELIST/namsbc/ nn_fsbc   , ln_ana , ln_flx  , ln_blk_clio, ln_blk_core, ln_cpl,   &
85         &             ln_blk_mfs, ln_apr_dyn, nn_ice , ln_dm2dc, ln_rnf, ln_ssr, nn_fwb, &
86         &             ln_wave, ln_cdgw, ln_sdw
87      !!----------------------------------------------------------------------
88
89      IF(lwp) THEN
90         WRITE(numout,*)
91         WRITE(numout,*) 'sbc_init : surface boundary condition setting'
92         WRITE(numout,*) '~~~~~~~~ '
93      ENDIF
94
95      call flush(numout)
96      REWIND( numnam )           ! Read Namelist namsbc
97      READ  ( numnam, namsbc )
98      call flush(numout)
99
100      !                          ! overwrite namelist parameter using CPP key information
101      IF( Agrif_Root() ) THEN                ! AGRIF zoom
102        IF( lk_lim2 )   nn_ice      = 2
103        IF( lk_lim3 )   nn_ice      = 3
104        IF( lk_cice )   nn_ice      = 4
105      ENDIF
106      IF( cp_cfg == 'gyre' ) THEN            ! GYRE configuration
107          ln_ana      = .TRUE.   
108          nn_ice      =   0
109      ENDIF
110     
111      IF(lwp) THEN               ! Control print
112         WRITE(numout,*) '        Namelist namsbc (partly overwritten with CPP key setting)'
113         WRITE(numout,*) '           frequency update of sbc (and ice)             nn_fsbc     = ', nn_fsbc
114         WRITE(numout,*) '           Type of sbc : '
115         WRITE(numout,*) '              analytical formulation                     ln_ana      = ', ln_ana
116         WRITE(numout,*) '              flux       formulation                     ln_flx      = ', ln_flx
117         WRITE(numout,*) '              CLIO bulk  formulation                     ln_blk_clio = ', ln_blk_clio
118         WRITE(numout,*) '              CORE bulk  formulation                     ln_blk_core = ', ln_blk_core
119         WRITE(numout,*) '              MFS  bulk  formulation                     ln_blk_mfs  = ', ln_blk_mfs
120         WRITE(numout,*) '              coupled    formulation (T if key_sbc_cpl)  ln_cpl      = ', ln_cpl
121         WRITE(numout,*) '           Misc. options of sbc : '
122         WRITE(numout,*) '              Patm gradient added in ocean & ice Eqs.    ln_apr_dyn  = ', ln_apr_dyn
123         WRITE(numout,*) '              ice management in the sbc (=0/1/2/3)       nn_ice      = ', nn_ice 
124         WRITE(numout,*) '              daily mean to diurnal cycle qsr            ln_dm2dc    = ', ln_dm2dc 
125         WRITE(numout,*) '              runoff / runoff mouths                     ln_rnf      = ', ln_rnf
126         WRITE(numout,*) '              Sea Surface Restoring on SST and/or SSS    ln_ssr      = ', ln_ssr
127         WRITE(numout,*) '              FreshWater Budget control  (=0/1/2)        nn_fwb      = ', nn_fwb
128         WRITE(numout,*) '              closed sea (=0/1) (set in namdom)          nn_closea   = ', nn_closea
129      ENDIF
130
131      !                              ! allocate sbc arrays
132      IF( sbc_oce_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'sbc_init : unable to allocate sbc_oce arrays' )
133
134      !                          ! Checks:
135      IF( .NOT. ln_rnf ) THEN                      ! no specific treatment in vicinity of river mouths
136         ln_rnf_mouth  = .false.                     
137         IF( sbc_rnf_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'sbc_init : unable to allocate sbc_rnf arrays' )
138         nkrnf         = 0
139         rnf     (:,:) = 0.e0
140         rnfmsk  (:,:) = 0.e0
141         rnfmsk_z(:)   = 0.e0
142      ENDIF
143      IF( nn_ice == 0  )   fr_i(:,:) = 0.e0        ! no ice in the domain, ice fraction is always zero
144
145      !                                            ! restartability   
146      IF( MOD( nitend - nit000 + 1, nn_fsbc) /= 0 .OR.   &
147          MOD( nstock             , nn_fsbc) /= 0 ) THEN
148         WRITE(ctmp1,*) 'experiment length (', nitend - nit000 + 1, ') or nstock (', nstock,   &
149            &           ' is NOT a multiple of nn_fsbc (', nn_fsbc, ')'
150         CALL ctl_stop( ctmp1, 'Impossible to properly do model restart' )
151      ENDIF
152      !
153      IF( MOD( rday, REAL(nn_fsbc, wp) * rdt ) /= 0 )   &
154         &  CALL ctl_warn( 'nn_fsbc is NOT a multiple of the number of time steps in a day' )
155      !
156      IF( ( nn_ice == 2 .OR. nn_ice ==3 ) .AND. .NOT.( ln_blk_clio .OR. ln_blk_core .OR. lk_cpl ) )   &
157         &   CALL ctl_stop( 'LIM sea-ice model requires a bulk formulation or coupled configuration' )
158      IF( nn_ice == 4 .AND. .NOT.( ln_blk_core .OR. lk_cpl ) )   &
159         &   CALL ctl_stop( 'CICE sea-ice model requires ln_blk_core or lk_cpl' )
160      IF( nn_ice == 4 .AND. ( .NOT. ( cp_cfg == 'orca' ) .OR. lk_agrif ) )   &
161         &   CALL ctl_stop( 'CICE sea-ice model currently only available in a global ORCA configuration without AGRIF' )
162     
163      IF( ln_dm2dc )   nday_qsr = -1   ! initialisation flag
164
165      IF( ln_dm2dc .AND. .NOT.( ln_flx .OR. ln_blk_core ) )   &
166         &   CALL ctl_stop( 'diurnal cycle into qsr field from daily values requires a flux or core-bulk formulation' )
167     
168      IF( ln_dm2dc .AND. ( ( NINT(rday) / ( nn_fsbc * NINT(rdt) ) )  < 8 ) )   &
169         &   CALL ctl_warn( 'diurnal cycle for qsr: the sampling of the diurnal cycle is too small...' )
170
171      IF ( ln_wave ) THEN
172      !Activated wave module but neither drag nor stokes drift activated
173         IF ( .NOT.(ln_cdgw .OR. ln_sdw) )   THEN
174            CALL ctl_warn( 'Ask for wave coupling but nor drag coefficient (ln_cdgw=F) neither stokes drift activated (ln_sdw=F)' )
175      !drag coefficient read from wave model definable only with mfs bulk formulae and core
176         ELSEIF (ln_cdgw .AND. .NOT.(ln_blk_mfs .OR. ln_blk_core) )       THEN       
177             CALL ctl_stop( 'drag coefficient read from wave model definable only with mfs bulk formulae and core')
178         ENDIF
179      ELSE
180      IF ( ln_cdgw .OR. ln_sdw  )                                         & 
181         &   CALL ctl_stop( 'Not Activated Wave Module (ln_wave=F) but asked coupling with drag coefficient (ln_cdgw =T) or Stokes drift (ln_sdw=T) ')
182      ENDIF 
183     
184      !                          ! Choice of the Surface Boudary Condition (set nsbc)
185      icpt = 0
186      IF( ln_ana          ) THEN   ;   nsbc =  1   ; icpt = icpt + 1   ;   ENDIF       ! analytical      formulation
187      IF( ln_flx          ) THEN   ;   nsbc =  2   ; icpt = icpt + 1   ;   ENDIF       ! flux            formulation
188      IF( ln_blk_clio     ) THEN   ;   nsbc =  3   ; icpt = icpt + 1   ;   ENDIF       ! CLIO bulk       formulation
189      IF( ln_blk_core     ) THEN   ;   nsbc =  4   ; icpt = icpt + 1   ;   ENDIF       ! CORE bulk       formulation
190      IF( ln_blk_mfs      ) THEN   ;   nsbc =  6   ; icpt = icpt + 1   ;   ENDIF       ! MFS  bulk       formulation
191      IF( ln_cpl          ) THEN   ;   nsbc =  5   ; icpt = icpt + 1   ;   ENDIF       ! Coupled         formulation
192      IF( cp_cfg == 'gyre') THEN   ;   nsbc =  0                       ;   ENDIF       ! GYRE analytical formulation
193      IF( lk_esopa        )            nsbc = -1                                       ! esopa test, ALL formulations
194      !
195      IF( icpt /= 1 .AND. .NOT.lk_esopa ) THEN
196         WRITE(numout,*)
197         WRITE(numout,*) '           E R R O R in setting the sbc, one and only one namelist/CPP key option '
198         WRITE(numout,*) '                     must be choosen. You choose ', icpt, ' option(s)'
199         WRITE(numout,*) '                     We stop'
200         nstop = nstop + 1
201      ENDIF
202      IF(lwp) THEN
203         WRITE(numout,*)
204         IF( nsbc == -1 )   WRITE(numout,*) '              ESOPA test All surface boundary conditions'
205         IF( nsbc ==  0 )   WRITE(numout,*) '              GYRE analytical formulation'
206         IF( nsbc ==  1 )   WRITE(numout,*) '              analytical formulation'
207         IF( nsbc ==  2 )   WRITE(numout,*) '              flux formulation'
208         IF( nsbc ==  3 )   WRITE(numout,*) '              CLIO bulk formulation'
209         IF( nsbc ==  4 )   WRITE(numout,*) '              CORE bulk formulation'
210         IF( nsbc ==  5 )   WRITE(numout,*) '              coupled formulation'
211         IF( nsbc ==  6 )   WRITE(numout,*) '              MFS Bulk formulation'
212      ENDIF
213
214      IF( nn_ice == 4 )   CALL cice_sbc_init (nsbc)
215      !
216   END SUBROUTINE sbc_init
217
218
219   SUBROUTINE sbc( kt )
220      !!---------------------------------------------------------------------
221      !!                    ***  ROUTINE sbc  ***
222      !!             
223      !! ** Purpose :   provide at each time-step the ocean surface boundary
224      !!                condition (momentum, heat and freshwater fluxes)
225      !!
226      !! ** Method  :   blah blah  to be written ?????????
227      !!                CAUTION : never mask the surface stress field (tke sbc)
228      !!
229      !! ** Action  : - set the ocean surface boundary condition at before and now
230      !!                time step, i.e. 
231      !!                utau_b, vtau_b, qns_b, qsr_b, emp_n, emps_b, qrp_b, erp_b
232      !!                utau  , vtau  , qns  , qsr  , emp  , emps  , qrp  , erp
233      !!              - updte the ice fraction : fr_i
234      !!----------------------------------------------------------------------
235      INTEGER, INTENT(in) ::   kt       ! ocean time step
236      !!---------------------------------------------------------------------
237      !
238      IF( nn_timing == 1 )  CALL timing_start('sbc')
239      !
240      !                                            ! ---------------------------------------- !
241      IF( kt /= nit000 ) THEN                      !          Swap of forcing fields          !
242         !                                         ! ---------------------------------------- !
243         utau_b(:,:) = utau(:,:)                         ! Swap the ocean forcing fields
244         vtau_b(:,:) = vtau(:,:)                         ! (except at nit000 where before fields
245         qns_b (:,:) = qns (:,:)                         !  are set at the end of the routine)
246         ! The 3D heat content due to qsr forcing is treated in traqsr
247         ! qsr_b (:,:) = qsr (:,:)
248         emp_b (:,:) = emp (:,:)
249         emps_b(:,:) = emps(:,:)
250      ENDIF
251      !                                            ! ---------------------------------------- !
252      !                                            !        forcing field computation         !
253      !                                            ! ---------------------------------------- !
254
255      CALL iom_setkt( kt + nn_fsbc - 1 )                 ! in sbc, iom_put is called every nn_fsbc time step
256      !
257      IF( ln_apr_dyn ) CALL sbc_apr( kt )                ! atmospheric pressure provided at kt+0.5*nn_fsbc
258                                                         ! (caution called before sbc_ssm)
259      !
260      CALL sbc_ssm( kt )                                 ! ocean sea surface variables (sst_m, sss_m, ssu_m, ssv_m)
261      !                                                  ! averaged over nf_sbc time-step
262
263      IF (ln_wave) CALL sbc_wave( kt )
264                                                   !==  sbc formulation  ==!
265                                                           
266      SELECT CASE( nsbc )                                ! Compute ocean surface boundary condition
267      !                                                  ! (i.e. utau,vtau, qns, qsr, emp, emps)
268      CASE(  0 )   ;   CALL sbc_gyre    ( kt )                    ! analytical formulation : GYRE configuration
269      CASE(  1 )   ;   CALL sbc_ana     ( kt )                    ! analytical formulation : uniform sbc
270      CASE(  2 )   ;   CALL sbc_flx     ( kt )                    ! flux formulation
271      CASE(  3 )   ;   CALL sbc_blk_clio( kt )                    ! bulk formulation : CLIO for the ocean
272      CASE(  4 )   ;   CALL sbc_blk_core( kt )                    ! bulk formulation : CORE for the ocean
273      CASE(  5 )   ;   CALL sbc_cpl_rcv ( kt, nn_fsbc, nn_ice )   ! coupled formulation
274      CASE(  6 )   ;   CALL sbc_blk_mfs ( kt )                    ! bulk formulation : MFS for the ocean
275      CASE( -1 )                               
276                       CALL sbc_ana     ( kt )                    ! ESOPA, test ALL the formulations
277                       CALL sbc_gyre    ( kt )                    !
278                       CALL sbc_flx     ( kt )                    !
279                       CALL sbc_blk_clio( kt )                    !
280                       CALL sbc_blk_core( kt )                    !
281                       CALL sbc_cpl_rcv ( kt, nn_fsbc, nn_ice )   !
282      END SELECT
283
284      !                                            !==  Misc. Options  ==!
285     
286      SELECT CASE( nn_ice )                                     ! Update heat and freshwater fluxes over sea-ice areas
287      CASE(  1 )   ;       CALL sbc_ice_if   ( kt )                  ! Ice-cover climatology ("Ice-if" model)
288         !                                                     
289      CASE(  2 )   ;       CALL sbc_ice_lim_2( kt, nsbc )            ! LIM-2 ice model
290         IF( lk_bdy )      CALL bdy_ice_lim_2( kt )                  ! BDY boundary condition
291         !                                                     
292      CASE(  3 )   ;       CALL sbc_ice_lim  ( kt, nsbc )            ! LIM-3 ice model
293         !
294      CASE(  4 )   ;       CALL sbc_ice_cice ( kt, nsbc )            ! CICE ice model
295      END SELECT                                             
296
297      IF( ln_rnf       )   CALL sbc_rnf( kt )                   ! add runoffs to fresh water fluxes
298 
299      IF( ln_ssr       )   CALL sbc_ssr( kt )                   ! add SST/SSS damping term
300
301      IF( nn_fwb  /= 0 )   CALL sbc_fwb( kt, nn_fwb, nn_fsbc )  ! control the freshwater budget
302
303      IF( nclosea == 1 )   CALL sbc_clo( kt )                   ! treatment of closed sea in the model domain
304      !                                                         ! (update freshwater fluxes)
305!RBbug do not understand why see ticket 667
306      CALL lbc_lnk( emp, 'T', 1. )
307      !
308      IF( kt == nit000 ) THEN                          !   set the forcing field at nit000 - 1    !
309         !                                             ! ---------------------------------------- !
310         IF( ln_rstart .AND.    &                               !* Restart: read in restart file
311            & iom_varid( numror, 'utau_b', ldstop = .FALSE. ) > 0 ) THEN
312            IF(lwp) WRITE(numout,*) '          nit000-1 surface forcing fields red in the restart file'
313            CALL iom_get( numror, jpdom_autoglo, 'utau_b', utau_b )   ! before i-stress  (U-point)
314            CALL iom_get( numror, jpdom_autoglo, 'vtau_b', vtau_b )   ! before j-stress  (V-point)
315            CALL iom_get( numror, jpdom_autoglo, 'qns_b' , qns_b  )   ! before non solar heat flux (T-point)
316            ! The 3D heat content due to qsr forcing is treated in traqsr
317            ! CALL iom_get( numror, jpdom_autoglo, 'qsr_b' , qsr_b  )   ! before     solar heat flux (T-point)
318            CALL iom_get( numror, jpdom_autoglo, 'emp_b' , emp_b  )   ! before     freshwater flux (T-point)
319            CALL iom_get( numror, jpdom_autoglo, 'emps_b', emps_b )   ! before C/D freshwater flux (T-point)
320         ELSE                                                   !* no restart: set from nit000 values
321            IF(lwp) WRITE(numout,*) '          nit000-1 surface forcing fields set to nit000'
322            utau_b(:,:) = utau(:,:) 
323            vtau_b(:,:) = vtau(:,:)
324            qns_b (:,:) = qns (:,:)
325            ! qsr_b (:,:) = qsr (:,:)
326            emp_b (:,:) = emp (:,:)
327            emps_b(:,:) = emps(:,:)
328         ENDIF
329      ENDIF
330      !                                                ! ---------------------------------------- !
331      IF( lrst_oce ) THEN                              !      Write in the ocean restart file     !
332         !                                             ! ---------------------------------------- !
333         IF(lwp) WRITE(numout,*)
334         IF(lwp) WRITE(numout,*) 'sbc : ocean surface forcing fields written in ocean restart file ',   &
335            &                    'at it= ', kt,' date= ', ndastp
336         IF(lwp) WRITE(numout,*) '~~~~'
337         CALL iom_rstput( kt, nitrst, numrow, 'utau_b' , utau )
338         CALL iom_rstput( kt, nitrst, numrow, 'vtau_b' , vtau )
339         CALL iom_rstput( kt, nitrst, numrow, 'qns_b'  , qns  )
340         ! The 3D heat content due to qsr forcing is treated in traqsr
341         ! CALL iom_rstput( kt, nitrst, numrow, 'qsr_b'  , qsr  )
342         CALL iom_rstput( kt, nitrst, numrow, 'emp_b'  , emp  )
343         CALL iom_rstput( kt, nitrst, numrow, 'emps_b' , emps )
344      ENDIF
345
346      !                                                ! ---------------------------------------- !
347      !                                                !        Outputs and control print         !
348      !                                                ! ---------------------------------------- !
349      IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN
350         CALL iom_put( "empmr" , emp  - rnf )                   ! upward water flux
351         CALL iom_put( "empsmr", emps - rnf )                   ! c/d water flux
352         CALL iom_put( "qt"    , qns  + qsr )                   ! total heat flux
353         CALL iom_put( "qns"   , qns        )                   ! solar heat flux
354         CALL iom_put( "qsr"   ,       qsr  )                   ! solar heat flux
355         IF( nn_ice > 0 )   CALL iom_put( "ice_cover", fr_i )   ! ice fraction
356      ENDIF
357      !
358      CALL iom_setkt( kt )           ! iom_put outside of sbc is called at every time step
359      !
360      CALL iom_put( "utau", utau )   ! i-wind stress   (stress can be updated at
361      CALL iom_put( "vtau", vtau )   ! j-wind stress    each time step in sea-ice)
362      CALL iom_put( "taum", taum )   ! wind stress module
363      CALL iom_put( "wspd", wndm )   ! wind speed  module
364      !
365      IF(ln_ctl) THEN         ! print mean trends (used for debugging)
366         CALL prt_ctl(tab2d_1=fr_i             , clinfo1=' fr_i     - : ', mask1=tmask, ovlap=1 )
367         CALL prt_ctl(tab2d_1=(emp-rnf)        , clinfo1=' emp-rnf  - : ', mask1=tmask, ovlap=1 )
368         CALL prt_ctl(tab2d_1=(emps-rnf)       , clinfo1=' emps-rnf - : ', mask1=tmask, ovlap=1 )
369         CALL prt_ctl(tab2d_1=qns              , clinfo1=' qns      - : ', mask1=tmask, ovlap=1 )
370         CALL prt_ctl(tab2d_1=qsr              , clinfo1=' qsr      - : ', mask1=tmask, ovlap=1 )
371         CALL prt_ctl(tab3d_1=tmask            , clinfo1=' tmask    - : ', mask1=tmask, ovlap=1, kdim=jpk )
372         CALL prt_ctl(tab3d_1=tsn(:,:,:,jp_tem), clinfo1=' sst      - : ', mask1=tmask, ovlap=1, kdim=1   )
373         CALL prt_ctl(tab3d_1=tsn(:,:,:,jp_sal), clinfo1=' sss      - : ', mask1=tmask, ovlap=1, kdim=1   )
374         CALL prt_ctl(tab2d_1=utau             , clinfo1=' utau     - : ', mask1=umask,                      &
375            &         tab2d_2=vtau             , clinfo2=' vtau     - : ', mask2=vmask, ovlap=1 )
376      ENDIF
377
378      IF( kt == nitend )   CALL sbc_final         ! Close down surface module if necessary
379      !
380      IF( nn_timing == 1 )  CALL timing_stop('sbc')
381      !
382   END SUBROUTINE sbc
383
384   SUBROUTINE sbc_final
385      !!---------------------------------------------------------------------
386      !!                    ***  ROUTINE sbc_final  ***
387      !!---------------------------------------------------------------------
388
389      !-----------------------------------------------------------------
390      ! Finalize CICE (if used)
391      !-----------------------------------------------------------------
392
393      IF( nn_ice == 4 )   CALL cice_sbc_final
394      !
395   END SUBROUTINE sbc_final
396
397   !!======================================================================
398END MODULE sbcmod
Note: See TracBrowser for help on using the repository browser.