limsbc.F90 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391
  1. MODULE limsbc
  2. !!======================================================================
  3. !! *** MODULE limsbc ***
  4. !! computation of the flux at the sea ice/ocean interface
  5. !!======================================================================
  6. !! History : - ! 2006-07 (M. Vancoppelle) LIM3 original code
  7. !! 3.0 ! 2008-03 (C. Tallandier) surface module
  8. !! - ! 2008-04 (C. Tallandier) split in 2 + new ice-ocean coupling
  9. !! 3.3 ! 2010-05 (G. Madec) decrease ocean & ice reference salinities in the Baltic sea
  10. !! ! + simplification of the ice-ocean stress calculation
  11. !! 3.4 ! 2011-02 (G. Madec) dynamical allocation
  12. !! - ! 2012 (D. Iovino) salt flux change
  13. !! - ! 2012-05 (C. Rousset) add penetration solar flux
  14. !! 3.5 ! 2012-10 (A. Coward, G. Madec) salt fluxes ; ice+snow mass
  15. !!----------------------------------------------------------------------
  16. #if defined key_lim3
  17. !!----------------------------------------------------------------------
  18. !! 'key_lim3' LIM 3.0 sea-ice model
  19. !!----------------------------------------------------------------------
  20. !! lim_sbc_alloc : allocate the limsbc arrays
  21. !! lim_sbc_init : initialisation
  22. !! lim_sbc_flx : updates mass, heat and salt fluxes at the ocean surface
  23. !! lim_sbc_tau : update i- and j-stresses, and its modulus at the ocean surface
  24. !!----------------------------------------------------------------------
  25. USE par_oce ! ocean parameters
  26. USE phycst ! physical constants
  27. USE dom_oce ! ocean domain
  28. USE ice ! LIM sea-ice variables
  29. USE sbc_ice ! Surface boundary condition: sea-ice fields
  30. USE sbc_oce ! Surface boundary condition: ocean fields
  31. USE sbccpl
  32. USE oce , ONLY : sshn, sshb, snwice_mass, snwice_mass_b, snwice_fmass
  33. USE albedo ! albedo parameters
  34. USE lbclnk ! ocean lateral boundary condition - MPP exchanges
  35. USE lib_mpp ! MPP library
  36. USE wrk_nemo ! work arrays
  37. USE in_out_manager ! I/O manager
  38. USE prtctl ! Print control
  39. USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined)
  40. USE traqsr ! add penetration of solar flux in the calculation of heat budget
  41. USE iom
  42. USE domvvl ! Variable volume
  43. USE limctl
  44. USE limcons
  45. IMPLICIT NONE
  46. PRIVATE
  47. PUBLIC lim_sbc_init ! called by sbc_lim_init
  48. PUBLIC lim_sbc_flx ! called by sbc_ice_lim
  49. PUBLIC lim_sbc_tau ! called by sbc_ice_lim
  50. REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: utau_oce, vtau_oce ! air-ocean surface i- & j-stress [N/m2]
  51. REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: tmod_io ! modulus of the ice-ocean velocity [m/s]
  52. REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: soce_0 , sice_0 ! cst SSS and ice salinity (levitating sea-ice)
  53. !! * Substitutions
  54. # include "vectopt_loop_substitute.h90"
  55. # include "domzgr_substitute.h90"
  56. !!----------------------------------------------------------------------
  57. !! NEMO/LIM3 4.0 , UCL - NEMO Consortium (2011)
  58. !! $Id: limsbc.F90 4990 2014-12-15 16:42:49Z timgraham $
  59. !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
  60. !!----------------------------------------------------------------------
  61. CONTAINS
  62. INTEGER FUNCTION lim_sbc_alloc()
  63. !!-------------------------------------------------------------------
  64. !! *** ROUTINE lim_sbc_alloc ***
  65. !!-------------------------------------------------------------------
  66. ALLOCATE( soce_0(jpi,jpj) , utau_oce(jpi,jpj) , &
  67. & sice_0(jpi,jpj) , vtau_oce(jpi,jpj) , tmod_io(jpi,jpj), STAT=lim_sbc_alloc)
  68. !
  69. IF( lk_mpp ) CALL mpp_sum( lim_sbc_alloc )
  70. IF( lim_sbc_alloc /= 0 ) CALL ctl_warn('lim_sbc_alloc: failed to allocate arrays')
  71. END FUNCTION lim_sbc_alloc
  72. SUBROUTINE lim_sbc_flx( kt )
  73. !!-------------------------------------------------------------------
  74. !! *** ROUTINE lim_sbc_flx ***
  75. !!
  76. !! ** Purpose : Update the surface ocean boundary condition for heat
  77. !! salt and mass over areas where sea-ice is non-zero
  78. !!
  79. !! ** Action : - computes the heat and freshwater/salt fluxes
  80. !! at the ice-ocean interface.
  81. !! - Update the ocean sbc
  82. !!
  83. !! ** Outputs : - qsr : sea heat flux: solar
  84. !! - qns : sea heat flux: non solar
  85. !! - emp : freshwater budget: volume flux
  86. !! - sfx : salt flux
  87. !! - fr_i : ice fraction
  88. !! - tn_ice : sea-ice surface temperature
  89. !! - alb_ice : sea-ice albedo (recomputed only for coupled mode)
  90. !!
  91. !! References : Goosse, H. et al. 1996, Bul. Soc. Roy. Sc. Liege, 65, 87-90.
  92. !! Tartinville et al. 2001 Ocean Modelling, 3, 95-108.
  93. !! These refs are now obsolete since everything has been revised
  94. !! The ref should be Rousset et al., 2015
  95. !!---------------------------------------------------------------------
  96. INTEGER, INTENT(in) :: kt ! number of iteration
  97. INTEGER :: ji, jj, jl, jk ! dummy loop indices
  98. REAL(wp) :: zqmass ! Heat flux associated with mass exchange ice->ocean (W.m-2)
  99. REAL(wp) :: zqsr ! New solar flux received by the ocean
  100. !
  101. REAL(wp), POINTER, DIMENSION(:,:,:) :: zalb_cs, zalb_os ! 3D workspace
  102. REAL(wp), POINTER, DIMENSION(:,:) :: zalb ! 2D workspace
  103. !!---------------------------------------------------------------------
  104. ! make call for albedo output before it is modified
  105. CALL wrk_alloc( jpi,jpj, zalb )
  106. zalb(:,:) = 0._wp
  107. WHERE ( SUM( a_i_b, dim=3 ) <= epsi06 ) ; zalb(:,:) = 0.066_wp
  108. ELSEWHERE ; zalb(:,:) = SUM( alb_ice * a_i_b, dim=3 ) / SUM( a_i_b, dim=3 )
  109. END WHERE
  110. IF( iom_use('alb_ice' ) ) CALL iom_put( "alb_ice" , zalb(:,:) ) ! ice albedo output
  111. zalb(:,:) = SUM( alb_ice * a_i_b, dim=3 ) + 0.066_wp * ( 1._wp - SUM( a_i_b, dim=3 ) )
  112. IF( iom_use('albedo' ) ) CALL iom_put( "albedo" , zalb(:,:) ) ! ice albedo output
  113. CALL wrk_dealloc( jpi,jpj, zalb )
  114. !
  115. DO jj = 1, jpj
  116. DO ji = 1, jpi
  117. !------------------------------------------!
  118. ! heat flux at the ocean surface !
  119. !------------------------------------------!
  120. ! Solar heat flux reaching the ocean = zqsr (W.m-2)
  121. !---------------------------------------------------
  122. zqsr = qsr_tot(ji,jj)
  123. DO jl = 1, jpl
  124. zqsr = zqsr - a_i_b(ji,jj,jl) * ( qsr_ice(ji,jj,jl) - ftr_ice(ji,jj,jl) )
  125. END DO
  126. ! Total heat flux reaching the ocean = hfx_out (W.m-2)
  127. !---------------------------------------------------
  128. zqmass = hfx_thd(ji,jj) + hfx_dyn(ji,jj) + hfx_res(ji,jj) ! heat flux from snow is 0 (T=0 degC)
  129. hfx_out(ji,jj) = hfx_out(ji,jj) + zqmass + zqsr
  130. ! Add the residual from heat diffusion equation and sublimation (W.m-2)
  131. !----------------------------------------------------------------------
  132. hfx_out(ji,jj) = hfx_out(ji,jj) + hfx_err_dif(ji,jj) + &
  133. & ( hfx_sub(ji,jj) - SUM( qevap_ice(ji,jj,:) * a_i_b(ji,jj,:) ) )
  134. ! New qsr and qns used to compute the oceanic heat flux at the next time step
  135. !----------------------------------------------------------------------------
  136. qsr(ji,jj) = zqsr
  137. qns(ji,jj) = hfx_out(ji,jj) - zqsr
  138. !------------------------------------------!
  139. ! mass flux at the ocean surface !
  140. !------------------------------------------!
  141. ! case of realistic freshwater flux (Tartinville et al., 2001) (presently ACTIVATED)
  142. ! -------------------------------------------------------------------------------------
  143. ! The idea of this approach is that the system that we consider is the ICE-OCEAN system
  144. ! Thus FW flux = External ( E-P+snow melt)
  145. ! Salt flux = Exchanges in the ice-ocean system then converted into FW
  146. ! Associated to Ice formation AND Ice melting
  147. ! Even if i see Ice melting as a FW and SALT flux
  148. !
  149. ! mass flux from ice/ocean
  150. wfx_ice(ji,jj) = wfx_bog(ji,jj) + wfx_bom(ji,jj) + wfx_sum(ji,jj) + wfx_sni(ji,jj) &
  151. + wfx_opw(ji,jj) + wfx_dyn(ji,jj) + wfx_res(ji,jj)
  152. ! mass flux at the ocean/ice interface
  153. fmmflx(ji,jj) = - ( wfx_ice(ji,jj) + wfx_snw(ji,jj) + wfx_err_sub(ji,jj) ) ! F/M mass flux save at least for biogeochemical model
  154. emp(ji,jj) = emp_oce(ji,jj) - wfx_ice(ji,jj) - wfx_snw(ji,jj) - wfx_err_sub(ji,jj) ! mass flux + F/M mass flux (always ice/ocean mass exchange)
  155. END DO
  156. END DO
  157. !------------------------------------------!
  158. ! salt flux at the ocean surface !
  159. !------------------------------------------!
  160. sfx(:,:) = sfx_bog(:,:) + sfx_bom(:,:) + sfx_sum(:,:) + sfx_sni(:,:) + sfx_opw(:,:) &
  161. & + sfx_res(:,:) + sfx_dyn(:,:) + sfx_bri(:,:) + sfx_sub(:,:)
  162. !-------------------------------------------------------------!
  163. ! mass of snow and ice per unit area for embedded sea-ice !
  164. !-------------------------------------------------------------!
  165. IF( nn_ice_embd /= 0 ) THEN
  166. ! save mass from the previous ice time step
  167. snwice_mass_b(:,:) = snwice_mass(:,:)
  168. ! new mass per unit area
  169. snwice_mass (:,:) = tmask(:,:,1) * ( rhosn * vt_s(:,:) + rhoic * vt_i(:,:) )
  170. ! time evolution of snow+ice mass
  171. snwice_fmass (:,:) = ( snwice_mass(:,:) - snwice_mass_b(:,:) ) * r1_rdtice
  172. ENDIF
  173. !-----------------------------------------------!
  174. ! Storing the transmitted variables !
  175. !-----------------------------------------------!
  176. fr_i (:,:) = at_i(:,:) ! Sea-ice fraction
  177. tn_ice(:,:,:) = t_su(:,:,:) ! Ice surface temperature
  178. !------------------------------------------------------------------------!
  179. ! Snow/ice albedo (only if sent to coupler, useless in forced mode) !
  180. !------------------------------------------------------------------------!
  181. CALL wrk_alloc( jpi, jpj, jpl, zalb_cs, zalb_os )
  182. CALL albedo_ice( t_su, ht_i, ht_s, zalb_cs, zalb_os ) ! cloud-sky and overcast-sky ice albedos
  183. alb_ice(:,:,:) = ( 1. - cldf_ice ) * zalb_cs(:,:,:) + cldf_ice * zalb_os(:,:,:)
  184. CALL wrk_dealloc( jpi, jpj, jpl, zalb_cs, zalb_os )
  185. ! conservation test
  186. IF( ln_limdiahsb ) CALL lim_cons_final( 'limsbc' )
  187. ! control prints
  188. IF( ln_icectl ) CALL lim_prt( kt, iiceprt, jiceprt, 3, ' - Final state lim_sbc - ' )
  189. IF(ln_ctl) THEN
  190. CALL prt_ctl( tab2d_1=qsr , clinfo1=' lim_sbc: qsr : ', tab2d_2=qns , clinfo2=' qns : ' )
  191. CALL prt_ctl( tab2d_1=emp , clinfo1=' lim_sbc: emp : ', tab2d_2=sfx , clinfo2=' sfx : ' )
  192. CALL prt_ctl( tab2d_1=fr_i , clinfo1=' lim_sbc: fr_i : ' )
  193. CALL prt_ctl( tab3d_1=tn_ice, clinfo1=' lim_sbc: tn_ice : ', kdim=jpl )
  194. ENDIF
  195. END SUBROUTINE lim_sbc_flx
  196. SUBROUTINE lim_sbc_tau( kt , pu_oce, pv_oce )
  197. !!-------------------------------------------------------------------
  198. !! *** ROUTINE lim_sbc_tau ***
  199. !!
  200. !! ** Purpose : Update the ocean surface stresses due to the ice
  201. !!
  202. !! ** Action : * at each ice time step (every nn_fsbc time step):
  203. !! - compute the modulus of ice-ocean relative velocity
  204. !! (*rho*Cd) at T-point (C-grid) or I-point (B-grid)
  205. !! tmod_io = rhoco * | U_ice-U_oce |
  206. !! - update the modulus of stress at ocean surface
  207. !! taum = frld * taum + (1-frld) * tmod_io * | U_ice-U_oce |
  208. !! * at each ocean time step (every kt):
  209. !! compute linearized ice-ocean stresses as
  210. !! Utau = tmod_io * | U_ice - pU_oce |
  211. !! using instantaneous current ocean velocity (usually before)
  212. !!
  213. !! NB: - ice-ocean rotation angle no more allowed
  214. !! - here we make an approximation: taum is only computed every ice time step
  215. !! This avoids mutiple average to pass from T -> U,V grids and next from U,V grids
  216. !! to T grid. taum is used in TKE and GLS, which should not be too sensitive to this approximaton...
  217. !!
  218. !! ** Outputs : - utau, vtau : surface ocean i- and j-stress (u- & v-pts) updated with ice-ocean fluxes
  219. !! - taum : modulus of the surface ocean stress (T-point) updated with ice-ocean fluxes
  220. !!---------------------------------------------------------------------
  221. INTEGER , INTENT(in) :: kt ! ocean time-step index
  222. REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: pu_oce, pv_oce ! surface ocean currents
  223. !!
  224. INTEGER :: ji, jj ! dummy loop indices
  225. REAL(wp) :: zat_u, zutau_ice, zu_t, zmodt ! local scalar
  226. REAL(wp) :: zat_v, zvtau_ice, zv_t ! - -
  227. !!---------------------------------------------------------------------
  228. !
  229. IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN !== Ice time-step only ==! (i.e. surface module time-step)
  230. DO jj = 2, jpjm1 !* update the modulus of stress at ocean surface (T-point)
  231. DO ji = fs_2, fs_jpim1
  232. ! ! 2*(U_ice-U_oce) at T-point
  233. zu_t = u_ice(ji,jj) + u_ice(ji-1,jj) - u_oce(ji,jj) - u_oce(ji-1,jj)
  234. zv_t = v_ice(ji,jj) + v_ice(ji,jj-1) - v_oce(ji,jj) - v_oce(ji,jj-1)
  235. ! ! |U_ice-U_oce|^2
  236. zmodt = 0.25_wp * ( zu_t * zu_t + zv_t * zv_t )
  237. ! ! update the ocean stress modulus
  238. taum(ji,jj) = ( 1._wp - at_i(ji,jj) ) * taum(ji,jj) + at_i(ji,jj) * rhoco * zmodt
  239. tmod_io(ji,jj) = rhoco * SQRT( zmodt ) ! rhoco * |U_ice-U_oce| at T-point
  240. END DO
  241. END DO
  242. CALL lbc_lnk( taum, 'T', 1. ) ; CALL lbc_lnk( tmod_io, 'T', 1. )
  243. !
  244. utau_oce(:,:) = utau(:,:) !* save the air-ocean stresses at ice time-step
  245. vtau_oce(:,:) = vtau(:,:)
  246. !
  247. ENDIF
  248. !
  249. ! !== every ocean time-step ==!
  250. !
  251. DO jj = 2, jpjm1 !* update the stress WITHOUT a ice-ocean rotation angle
  252. DO ji = fs_2, fs_jpim1 ! Vect. Opt.
  253. zat_u = ( at_i(ji,jj) + at_i(ji+1,jj) ) * 0.5_wp ! ice area at u and V-points
  254. zat_v = ( at_i(ji,jj) + at_i(ji,jj+1) ) * 0.5_wp
  255. ! ! linearized quadratic drag formulation
  256. zutau_ice = 0.5_wp * ( tmod_io(ji,jj) + tmod_io(ji+1,jj) ) * ( u_ice(ji,jj) - pu_oce(ji,jj) )
  257. zvtau_ice = 0.5_wp * ( tmod_io(ji,jj) + tmod_io(ji,jj+1) ) * ( v_ice(ji,jj) - pv_oce(ji,jj) )
  258. ! ! stresses at the ocean surface
  259. utau(ji,jj) = ( 1._wp - zat_u ) * utau_oce(ji,jj) + zat_u * zutau_ice
  260. vtau(ji,jj) = ( 1._wp - zat_v ) * vtau_oce(ji,jj) + zat_v * zvtau_ice
  261. END DO
  262. END DO
  263. CALL lbc_lnk( utau, 'U', -1. ) ; CALL lbc_lnk( vtau, 'V', -1. ) ! lateral boundary condition
  264. !
  265. IF(ln_ctl) CALL prt_ctl( tab2d_1=utau, clinfo1=' lim_sbc: utau : ', mask1=umask, &
  266. & tab2d_2=vtau, clinfo2=' vtau : ' , mask2=vmask )
  267. !
  268. END SUBROUTINE lim_sbc_tau
  269. SUBROUTINE lim_sbc_init
  270. !!-------------------------------------------------------------------
  271. !! *** ROUTINE lim_sbc_init ***
  272. !!
  273. !! ** Purpose : Preparation of the file ice_evolu for the output of
  274. !! the temporal evolution of key variables
  275. !!
  276. !! ** input : Namelist namicedia
  277. !!-------------------------------------------------------------------
  278. INTEGER :: ji, jj, jk ! dummy loop indices
  279. REAL(wp) :: zcoefu, zcoefv, zcoeff ! local scalar
  280. IF(lwp) WRITE(numout,*)
  281. IF(lwp) WRITE(numout,*) 'lim_sbc_init : LIM-3 sea-ice - surface boundary condition'
  282. IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~ '
  283. ! ! allocate lim_sbc array
  284. IF( lim_sbc_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'lim_sbc_init : unable to allocate standard arrays' )
  285. !
  286. soce_0(:,:) = soce ! constant SSS and ice salinity used in levitating sea-ice case
  287. sice_0(:,:) = sice
  288. !
  289. IF( cp_cfg == "orca" ) THEN ! decrease ocean & ice reference salinities in the Baltic sea
  290. WHERE( 14._wp <= glamt(:,:) .AND. glamt(:,:) <= 32._wp .AND. &
  291. & 54._wp <= gphit(:,:) .AND. gphit(:,:) <= 66._wp )
  292. soce_0(:,:) = 4._wp
  293. sice_0(:,:) = 2._wp
  294. END WHERE
  295. ENDIF
  296. !
  297. IF( .NOT. ln_rstart ) THEN
  298. ! ! embedded sea ice
  299. IF( nn_ice_embd /= 0 ) THEN ! mass exchanges between ice and ocean (case 1 or 2) set the snow+ice mass
  300. snwice_mass (:,:) = tmask(:,:,1) * ( rhosn * vt_s(:,:) + rhoic * vt_i(:,:) )
  301. snwice_mass_b(:,:) = snwice_mass(:,:)
  302. ELSE
  303. snwice_mass (:,:) = 0.0_wp ! no mass exchanges
  304. snwice_mass_b(:,:) = 0.0_wp ! no mass exchanges
  305. ENDIF
  306. IF( nn_ice_embd == 2 ) THEN ! full embedment (case 2) deplete the initial ssh below sea-ice area
  307. sshn(:,:) = sshn(:,:) - snwice_mass(:,:) * r1_rau0
  308. sshb(:,:) = sshb(:,:) - snwice_mass(:,:) * r1_rau0
  309. #if defined key_vvl
  310. ! key_vvl necessary? clem: yes for compilation purpose
  311. DO jk = 1,jpkm1 ! adjust initial vertical scale factors
  312. fse3t_n(:,:,jk) = e3t_0(:,:,jk)*( 1._wp + sshn(:,:)*tmask(:,:,1)/(ht_0(:,:) + 1.0 - tmask(:,:,1)) )
  313. fse3t_b(:,:,jk) = e3t_0(:,:,jk)*( 1._wp + sshb(:,:)*tmask(:,:,1)/(ht_0(:,:) + 1.0 - tmask(:,:,1)) )
  314. ENDDO
  315. fse3t_a(:,:,:) = fse3t_b(:,:,:)
  316. ! Reconstruction of all vertical scale factors at now and before time
  317. ! steps
  318. ! =============================================================================
  319. ! Horizontal scale factor interpolations
  320. ! --------------------------------------
  321. CALL dom_vvl_interpol( fse3t_b(:,:,:), fse3u_b(:,:,:), 'U' )
  322. CALL dom_vvl_interpol( fse3t_b(:,:,:), fse3v_b(:,:,:), 'V' )
  323. CALL dom_vvl_interpol( fse3t_n(:,:,:), fse3u_n(:,:,:), 'U' )
  324. CALL dom_vvl_interpol( fse3t_n(:,:,:), fse3v_n(:,:,:), 'V' )
  325. CALL dom_vvl_interpol( fse3u_n(:,:,:), fse3f_n(:,:,:), 'F' )
  326. ! Vertical scale factor interpolations
  327. ! ------------------------------------
  328. CALL dom_vvl_interpol( fse3t_n(:,:,:), fse3w_n (:,:,:), 'W' )
  329. CALL dom_vvl_interpol( fse3u_n(:,:,:), fse3uw_n(:,:,:), 'UW' )
  330. CALL dom_vvl_interpol( fse3v_n(:,:,:), fse3vw_n(:,:,:), 'VW' )
  331. CALL dom_vvl_interpol( fse3u_b(:,:,:), fse3uw_b(:,:,:), 'UW' )
  332. CALL dom_vvl_interpol( fse3v_b(:,:,:), fse3vw_b(:,:,:), 'VW' )
  333. ! t- and w- points depth
  334. ! ----------------------
  335. fsdept_n(:,:,1) = 0.5_wp * fse3w_n(:,:,1)
  336. fsdepw_n(:,:,1) = 0.0_wp
  337. fsde3w_n(:,:,1) = fsdept_n(:,:,1) - sshn(:,:)
  338. DO jk = 2, jpk
  339. fsdept_n(:,:,jk) = fsdept_n(:,:,jk-1) + fse3w_n(:,:,jk)
  340. fsdepw_n(:,:,jk) = fsdepw_n(:,:,jk-1) + fse3t_n(:,:,jk-1)
  341. fsde3w_n(:,:,jk) = fsdept_n(:,:,jk ) - sshn (:,:)
  342. END DO
  343. #endif
  344. ENDIF
  345. ENDIF ! .NOT. ln_rstart
  346. !
  347. END SUBROUTINE lim_sbc_init
  348. #else
  349. !!----------------------------------------------------------------------
  350. !! Default option : Dummy module NO LIM 3.0 sea-ice model
  351. !!----------------------------------------------------------------------
  352. CONTAINS
  353. SUBROUTINE lim_sbc ! Dummy routine
  354. END SUBROUTINE lim_sbc
  355. #endif
  356. !!======================================================================
  357. END MODULE limsbc