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.
sbcice_lim.F90 in branches/dev_001_SBC/NEMO/OPA_SRC/SBC – NEMO

source: branches/dev_001_SBC/NEMO/OPA_SRC/SBC/sbcice_lim.F90 @ 751

Last change on this file since 751 was 751, checked in by ctlod, 17 years ago

move the CALL ice_init line into sbcice_lim.F90 module and remove it from opa.F90, see ticket:#31

  • Property svn:executable set to *
File size: 8.1 KB
Line 
1MODULE sbcice_lim
2   !!======================================================================
3   !!                       ***  MODULE  sbcice  ***
4   !! Surface module :  update surface ocean boundary condition over ice
5   !!                   covered area using LIM sea-ice model
6   !! Sea-Ice model  :  LIM Sea ice model time-stepping
7   !!======================================================================
8   !! History :  9.0   !  06-06  (G. Madec)  from icestp.F90
9   !!----------------------------------------------------------------------
10#if defined key_ice_lim
11   !!----------------------------------------------------------------------
12   !!   'key_ice_lim' :                                   Lim sea-ice model
13   !!----------------------------------------------------------------------
14   !!----------------------------------------------------------------------
15   !!   sbc_ice_lim    : sea-ice model time-stepping and
16   !!                    update ocean sbc over ice-covered area
17   !!----------------------------------------------------------------------
18   USE oce             ! ocean dynamics and tracers
19   USE dom_oce         ! ocean space and time domain
20   USE ice
21   USE iceini
22   USE ice_oce         ! ice variables
23   USE dom_ice
24   USE cpl_oce
25
26   USE sbc_oce         ! Surface boundary condition: ocean fields
27   USE sbc_ice         ! Surface boundary condition: ice   fields
28   USE sbcblk_core     ! Surface boundary condition: CORE bulk
29   USE sbcblk_clio     ! Surface boundary condition: CLIO bulk
30   USE albedo
31
32   USE daymod          ! day calendar
33   USE phycst          ! Define parameters for the routines
34   USE eosbn2          ! equation of state
35   USE limdyn
36   USE limtrp
37   USE limdmp
38   USE limthd
39   USE limsbc          ! sea surface boundary condition
40   USE limdia
41   USE limwri
42   USE limrst
43
44   USE lbclnk
45   USE iom             ! I/O manager library
46   USE in_out_manager  ! I/O manager
47   USE prtctl          ! Print control
48
49   IMPLICIT NONE
50   PRIVATE
51
52   PUBLIC sbc_ice_lim ! routine called by step.F90
53   
54   !! * Substitutions
55#  include "domzgr_substitute.h90"
56#  include "vectopt_loop_substitute.h90"
57   !!----------------------------------------------------------------------
58   !!   OPA 9.0 , LOCEAN-IPSL (2006)
59   !! $Header: /
60   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)
61   !!----------------------------------------------------------------------
62
63CONTAINS
64
65   SUBROUTINE sbc_ice_lim( kt, kblk )
66      !!---------------------------------------------------------------------
67      !!                  ***  ROUTINE ice_stp  ***
68      !!                   
69      !! ** Purpose :   update the ocean surface boundary condition via the
70      !!                Louvain la Neuve Sea Ice Model time stepping
71      !!
72      !! ** Method  :   ice model time stepping
73      !!              - call the ice dynamics routine
74      !!              - call the ice advection/diffusion routine
75      !!              - call the ice thermodynamics routine
76      !!              - call the routine that computes mass and
77      !!                heat fluxes at the ice/ocean interface
78      !!              - save the outputs
79      !!              - save the outputs for restart when necessary
80      !!
81      !! ** Action  : - time evolution of the LIM sea-ice model
82      !!              - update all sbc variables below sea-ice:
83      !!                utau, vtau, qns , qsr, emp , emps
84      !!---------------------------------------------------------------------
85      INTEGER, INTENT(in) ::   kt      ! ocean time step
86      INTEGER, INTENT(in) ::   kblk    ! type of bulk (=3 CLIO, =4 CORE)
87      !!
88      INTEGER  ::   ji, jj   ! dummy loop indices
89      REAL(wp), DIMENSION(jpi,jpj) ::   alb_oce_os   ! albedo of the ocean under overcast sky
90      REAL(wp), DIMENSION(jpi,jpj) ::   alb_oce_cs   ! albedo of the ocean under clear sky
91      REAL(wp), DIMENSION(jpi,jpj) ::   alb_ice_os   ! albedo of the ice under overcast sky
92      REAL(wp), DIMENSION(jpi,jpj) ::   alb_ice_cs   ! albedo of ice under clear sky
93      !!----------------------------------------------------------------------
94
95      IF( kt == nit000 ) THEN
96         IF(lwp) WRITE(numout,*)
97         IF(lwp) WRITE(numout,*) 'sbc_ice_lim : update ocean surface boudary condition' 
98         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~   via Louvain la Neuve Ice Model (LIM) time stepping'
99
100         CALL ice_init
101
102      ENDIF
103
104      IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN
105         !
106         ! ... mean surface ocean current at I-point (F-point with sea-ice indexation)
107         DO jj = 2, jpj
108            DO ji = fs_2, jpi   ! vector opt.
109               ui_oce(ji,jj) = 0.5 * ( ssu_m(ji-1,jj  ) + ssu_m(ji-1,jj-1) )
110               vi_oce(ji,jj) = 0.5 * ( ssv_m(ji  ,jj-1) + ssv_m(ji-1,jj-1) )
111            END DO
112         END DO
113         CALL lbc_lnk( ui_oce, 'I', -1. )   ! I-point (i.e. F-point with ice indices)
114         CALL lbc_lnk( vi_oce, 'I', -1. )   ! I-point (i.e. F-point with ice indices)
115
116         ! ... masked sea surface freezing temperature [Kelvin] (set to rt0 over land)
117         tfu(:,:) = tfreez( sss_m ) +  rt0 
118
119         ! ... ice and ocean albedo
120         CALL blk_albedo( alb_ice_os , alb_oce_os , alb_ice_cs , alb_oce_cs )
121
122
123         ! ... surface ice boundary condition (stress at I-point, latente, sensible, etc....
124         !!gm preciser la list exacte
125         SELECT CASE( kblk )
126         CASE( 3 )           ! CLIO bulk formulation
127            CALL blk_ice_clio()
128         CASE( 4 )           ! CORE bulk formulation
129            CALL blk_ice_core( sist     , ui_ice   , vi_ice   , alb_ice_cs,                      &
130               &                                     utaui_ice, vtaui_ice , qns_ice , qsr_ice,   &
131               &                                     qla_ice  , dqns_ice  , dqla_ice,            &
132               &                                     tprecip  , sprecip   ,                      &
133               &                                     fr1_i0   , fr2_i0  )
134         END SELECT
135
136         IF(ln_ctl) THEN         ! print mean trends (used for debugging)
137            CALL prt_ctl_info( 'Ice Forcings ' )
138            CALL prt_ctl( tab2d_1=tprecip  ,clinfo1=' precip   : ', tab2d_2=sprecip  , clinfo2=' Snow     : ' )
139            CALL prt_ctl( tab2d_1=utaui_ice,clinfo1=' utaui_ice: ', tab2d_2=vtaui_ice, clinfo2=' vtaui_ice: ' )
140            CALL prt_ctl( tab2d_1=hsnif    ,clinfo1=' hsnif  1 : ', tab2d_2=hicif    , clinfo2=' hicif    : ' )
141            CALL prt_ctl( tab2d_1=frld     ,clinfo1=' frld   1 : ', tab2d_2=sist     , clinfo2=' sist     : ' )
142         ENDIF
143
144         ! ---------------- !
145         !  Ice model step  !
146         ! ---------------- !
147         ;                              CALL lim_rst_opn  ( kt )      ! Open Ice restart file
148         ;                              CALL lim_dyn      ( kt )      ! Ice dynamics    ( rheology/dynamics )
149         ;                              CALL lim_trp      ( kt )      ! Ice transport   ( Advection/diffusion )
150         IF( ln_limdmp )                CALL lim_dmp      ( kt )      ! Ice damping
151         ;                              CALL lim_thd      ( kt )      ! Ice thermodynamics
152         ;                              CALL lim_sbc      ( kt )      ! Ice/Ocean Mass & Heat fluxes
153         IF( MOD( kt+nn_fsbc-1, ninfo ) == 0 .OR.   &
154            &  ntmoy == 1 )             CALL lim_dia      ( kt )      ! Ice Diagnostics
155         ;                              CALL lim_wri      ( kt )      ! Ice outputs
156         IF( lrst_ice )                 CALL lim_rst_write( kt )      ! Ice restart file
157         !
158      ENDIF
159      !
160   END SUBROUTINE sbc_ice_lim
161
162#else
163   !!----------------------------------------------------------------------
164   !!   Default option           Dummy module          NO LIM sea-ice model
165   !!----------------------------------------------------------------------
166CONTAINS
167   SUBROUTINE sbc_ice_lim ( kt, kblk )     ! Dummy routine
168      WRITE(*,*) 'sbc_ice_lim: You should not have seen this print! error?', kt, kblk
169   END SUBROUTINE sbc_ice_lim
170#endif
171
172   !!======================================================================
173END MODULE sbcice_lim
Note: See TracBrowser for help on using the repository browser.