limsbc.F90 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393
  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 8265 2017-06-30 14:43:13Z vancop $
  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('icealb' ) ) CALL iom_put( "icealb" , 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. wfx_snw(ji,jj) = wfx_snw(ji,jj) + wfx_snw_sum(ji,jj)
  153. ! mass flux at the ocean/ice interface
  154. 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
  155. 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)
  156. END DO
  157. END DO
  158. !------------------------------------------!
  159. ! salt flux at the ocean surface !
  160. !------------------------------------------!
  161. sfx(:,:) = sfx_bog(:,:) + sfx_bom(:,:) + sfx_sum(:,:) + sfx_sni(:,:) + sfx_opw(:,:) &
  162. & + sfx_res(:,:) + sfx_dyn(:,:) + sfx_bri(:,:) + sfx_sub(:,:)
  163. !-------------------------------------------------------------!
  164. ! mass of snow and ice per unit area for embedded sea-ice !
  165. !-------------------------------------------------------------!
  166. IF( nn_ice_embd /= 0 ) THEN
  167. ! save mass from the previous ice time step
  168. snwice_mass_b(:,:) = snwice_mass(:,:)
  169. ! new mass per unit area
  170. snwice_mass (:,:) = tmask(:,:,1) * ( rhosn * vt_s(:,:) + rhoic * vt_i(:,:) )
  171. ! time evolution of snow+ice mass
  172. snwice_fmass (:,:) = ( snwice_mass(:,:) - snwice_mass_b(:,:) ) * r1_rdtice
  173. ENDIF
  174. !-----------------------------------------------!
  175. ! Storing the transmitted variables !
  176. !-----------------------------------------------!
  177. fr_i (:,:) = at_i(:,:) ! Sea-ice fraction
  178. tn_ice(:,:,:) = t_su(:,:,:) ! Ice surface temperature
  179. !------------------------------------------------------------------------!
  180. ! Snow/ice albedo (only if sent to coupler, useless in forced mode) !
  181. !------------------------------------------------------------------------!
  182. CALL wrk_alloc( jpi, jpj, jpl, zalb_cs, zalb_os )
  183. CALL albedo_ice( t_su, ht_i, ht_s, zalb_cs, zalb_os ) ! cloud-sky and overcast-sky ice albedos
  184. alb_ice(:,:,:) = ( 1. - cldf_ice ) * zalb_cs(:,:,:) + cldf_ice * zalb_os(:,:,:)
  185. CALL wrk_dealloc( jpi, jpj, jpl, zalb_cs, zalb_os )
  186. ! conservation test
  187. IF( ln_limdiahsb ) CALL lim_cons_final( 'limsbc' )
  188. ! control prints
  189. IF( ln_icectl ) CALL lim_prt( kt, iiceprt, jiceprt, 3, ' - Final state lim_sbc - ' )
  190. IF(ln_ctl) THEN
  191. CALL prt_ctl( tab2d_1=qsr , clinfo1=' lim_sbc: qsr : ', tab2d_2=qns , clinfo2=' qns : ' )
  192. CALL prt_ctl( tab2d_1=emp , clinfo1=' lim_sbc: emp : ', tab2d_2=sfx , clinfo2=' sfx : ' )
  193. CALL prt_ctl( tab2d_1=fr_i , clinfo1=' lim_sbc: fr_i : ' )
  194. CALL prt_ctl( tab3d_1=tn_ice, clinfo1=' lim_sbc: tn_ice : ', kdim=jpl )
  195. ENDIF
  196. END SUBROUTINE lim_sbc_flx
  197. SUBROUTINE lim_sbc_tau( kt , pu_oce, pv_oce )
  198. !!-------------------------------------------------------------------
  199. !! *** ROUTINE lim_sbc_tau ***
  200. !!
  201. !! ** Purpose : Update the ocean surface stresses due to the ice
  202. !!
  203. !! ** Action : * at each ice time step (every nn_fsbc time step):
  204. !! - compute the modulus of ice-ocean relative velocity
  205. !! (*rho*Cd) at T-point (C-grid) or I-point (B-grid)
  206. !! tmod_io = rhoco * | U_ice-U_oce |
  207. !! - update the modulus of stress at ocean surface
  208. !! taum = frld * taum + (1-frld) * tmod_io * | U_ice-U_oce |
  209. !! * at each ocean time step (every kt):
  210. !! compute linearized ice-ocean stresses as
  211. !! Utau = tmod_io * | U_ice - pU_oce |
  212. !! using instantaneous current ocean velocity (usually before)
  213. !!
  214. !! NB: - ice-ocean rotation angle no more allowed
  215. !! - here we make an approximation: taum is only computed every ice time step
  216. !! This avoids mutiple average to pass from T -> U,V grids and next from U,V grids
  217. !! to T grid. taum is used in TKE and GLS, which should not be too sensitive to this approximaton...
  218. !!
  219. !! ** Outputs : - utau, vtau : surface ocean i- and j-stress (u- & v-pts) updated with ice-ocean fluxes
  220. !! - taum : modulus of the surface ocean stress (T-point) updated with ice-ocean fluxes
  221. !!---------------------------------------------------------------------
  222. INTEGER , INTENT(in) :: kt ! ocean time-step index
  223. REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: pu_oce, pv_oce ! surface ocean currents
  224. !!
  225. INTEGER :: ji, jj ! dummy loop indices
  226. REAL(wp) :: zat_u, zutau_ice, zu_t, zmodt ! local scalar
  227. REAL(wp) :: zat_v, zvtau_ice, zv_t ! - -
  228. !!---------------------------------------------------------------------
  229. !
  230. IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN !== Ice time-step only ==! (i.e. surface module time-step)
  231. DO jj = 2, jpjm1 !* update the modulus of stress at ocean surface (T-point)
  232. DO ji = fs_2, fs_jpim1
  233. ! ! 2*(U_ice-U_oce) at T-point
  234. zu_t = u_ice(ji,jj) + u_ice(ji-1,jj) - u_oce(ji,jj) - u_oce(ji-1,jj)
  235. zv_t = v_ice(ji,jj) + v_ice(ji,jj-1) - v_oce(ji,jj) - v_oce(ji,jj-1)
  236. ! ! |U_ice-U_oce|^2
  237. zmodt = 0.25_wp * ( zu_t * zu_t + zv_t * zv_t )
  238. ! ! update the ocean stress modulus
  239. taum(ji,jj) = ( 1._wp - at_i(ji,jj) ) * taum(ji,jj) + at_i(ji,jj) * rhoco * zmodt
  240. tmod_io(ji,jj) = rhoco * SQRT( zmodt ) ! rhoco * |U_ice-U_oce| at T-point
  241. END DO
  242. END DO
  243. CALL lbc_lnk( taum, 'T', 1. ) ; CALL lbc_lnk( tmod_io, 'T', 1. )
  244. !
  245. utau_oce(:,:) = utau(:,:) !* save the air-ocean stresses at ice time-step
  246. vtau_oce(:,:) = vtau(:,:)
  247. !
  248. ENDIF
  249. !
  250. ! !== every ocean time-step ==!
  251. !
  252. DO jj = 2, jpjm1 !* update the stress WITHOUT a ice-ocean rotation angle
  253. DO ji = fs_2, fs_jpim1 ! Vect. Opt.
  254. zat_u = ( at_i(ji,jj) + at_i(ji+1,jj) ) * 0.5_wp ! ice area at u and V-points
  255. zat_v = ( at_i(ji,jj) + at_i(ji,jj+1) ) * 0.5_wp
  256. ! ! linearized quadratic drag formulation
  257. zutau_ice = 0.5_wp * ( tmod_io(ji,jj) + tmod_io(ji+1,jj) ) * ( u_ice(ji,jj) - pu_oce(ji,jj) )
  258. zvtau_ice = 0.5_wp * ( tmod_io(ji,jj) + tmod_io(ji,jj+1) ) * ( v_ice(ji,jj) - pv_oce(ji,jj) )
  259. ! ! stresses at the ocean surface
  260. utau(ji,jj) = ( 1._wp - zat_u ) * utau_oce(ji,jj) + zat_u * zutau_ice
  261. vtau(ji,jj) = ( 1._wp - zat_v ) * vtau_oce(ji,jj) + zat_v * zvtau_ice
  262. END DO
  263. END DO
  264. CALL lbc_lnk( utau, 'U', -1. ) ; CALL lbc_lnk( vtau, 'V', -1. ) ! lateral boundary condition
  265. !
  266. IF(ln_ctl) CALL prt_ctl( tab2d_1=utau, clinfo1=' lim_sbc: utau : ', mask1=umask, &
  267. & tab2d_2=vtau, clinfo2=' vtau : ' , mask2=vmask )
  268. !
  269. END SUBROUTINE lim_sbc_tau
  270. SUBROUTINE lim_sbc_init
  271. !!-------------------------------------------------------------------
  272. !! *** ROUTINE lim_sbc_init ***
  273. !!
  274. !! ** Purpose : Preparation of the file ice_evolu for the output of
  275. !! the temporal evolution of key variables
  276. !!
  277. !! ** input : Namelist namicedia
  278. !!-------------------------------------------------------------------
  279. INTEGER :: ji, jj, jk ! dummy loop indices
  280. REAL(wp) :: zcoefu, zcoefv, zcoeff ! local scalar
  281. IF(lwp) WRITE(numout,*)
  282. IF(lwp) WRITE(numout,*) 'lim_sbc_init : LIM-3 sea-ice - surface boundary condition'
  283. IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~ '
  284. ! ! allocate lim_sbc array
  285. IF( lim_sbc_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'lim_sbc_init : unable to allocate standard arrays' )
  286. !
  287. soce_0(:,:) = soce ! constant SSS and ice salinity used in levitating sea-ice case
  288. sice_0(:,:) = sice
  289. !
  290. IF( cp_cfg == "orca" ) THEN ! decrease ocean & ice reference salinities in the Baltic sea
  291. WHERE( 14._wp <= glamt(:,:) .AND. glamt(:,:) <= 32._wp .AND. &
  292. & 54._wp <= gphit(:,:) .AND. gphit(:,:) <= 66._wp )
  293. soce_0(:,:) = 4._wp
  294. sice_0(:,:) = 2._wp
  295. END WHERE
  296. ENDIF
  297. !
  298. IF( .NOT. ln_rstart ) THEN
  299. ! ! embedded sea ice
  300. IF( nn_ice_embd /= 0 ) THEN ! mass exchanges between ice and ocean (case 1 or 2) set the snow+ice mass
  301. snwice_mass (:,:) = tmask(:,:,1) * ( rhosn * vt_s(:,:) + rhoic * vt_i(:,:) )
  302. snwice_mass_b(:,:) = snwice_mass(:,:)
  303. ELSE
  304. snwice_mass (:,:) = 0.0_wp ! no mass exchanges
  305. snwice_mass_b(:,:) = 0.0_wp ! no mass exchanges
  306. ENDIF
  307. IF( nn_ice_embd == 2 ) THEN ! full embedment (case 2) deplete the initial ssh below sea-ice area
  308. sshn(:,:) = sshn(:,:) - snwice_mass(:,:) * r1_rau0
  309. sshb(:,:) = sshb(:,:) - snwice_mass(:,:) * r1_rau0
  310. #if defined key_vvl
  311. ! key_vvl necessary? clem: yes for compilation purpose
  312. DO jk = 1,jpkm1 ! adjust initial vertical scale factors
  313. fse3t_n(:,:,jk) = e3t_0(:,:,jk)*( 1._wp + sshn(:,:)*tmask(:,:,1)/(ht_0(:,:) + 1.0 - tmask(:,:,1)) )
  314. fse3t_b(:,:,jk) = e3t_0(:,:,jk)*( 1._wp + sshb(:,:)*tmask(:,:,1)/(ht_0(:,:) + 1.0 - tmask(:,:,1)) )
  315. ENDDO
  316. fse3t_a(:,:,:) = fse3t_b(:,:,:)
  317. ! Reconstruction of all vertical scale factors at now and before time
  318. ! steps
  319. ! =============================================================================
  320. ! Horizontal scale factor interpolations
  321. ! --------------------------------------
  322. CALL dom_vvl_interpol( fse3t_b(:,:,:), fse3u_b(:,:,:), 'U' )
  323. CALL dom_vvl_interpol( fse3t_b(:,:,:), fse3v_b(:,:,:), 'V' )
  324. CALL dom_vvl_interpol( fse3t_n(:,:,:), fse3u_n(:,:,:), 'U' )
  325. CALL dom_vvl_interpol( fse3t_n(:,:,:), fse3v_n(:,:,:), 'V' )
  326. CALL dom_vvl_interpol( fse3u_n(:,:,:), fse3f_n(:,:,:), 'F' )
  327. ! Vertical scale factor interpolations
  328. ! ------------------------------------
  329. CALL dom_vvl_interpol( fse3t_n(:,:,:), fse3w_n (:,:,:), 'W' )
  330. CALL dom_vvl_interpol( fse3u_n(:,:,:), fse3uw_n(:,:,:), 'UW' )
  331. CALL dom_vvl_interpol( fse3v_n(:,:,:), fse3vw_n(:,:,:), 'VW' )
  332. CALL dom_vvl_interpol( fse3u_b(:,:,:), fse3uw_b(:,:,:), 'UW' )
  333. CALL dom_vvl_interpol( fse3v_b(:,:,:), fse3vw_b(:,:,:), 'VW' )
  334. ! t- and w- points depth
  335. ! ----------------------
  336. fsdept_n(:,:,1) = 0.5_wp * fse3w_n(:,:,1)
  337. fsdepw_n(:,:,1) = 0.0_wp
  338. fsde3w_n(:,:,1) = fsdept_n(:,:,1) - sshn(:,:)
  339. DO jk = 2, jpk
  340. fsdept_n(:,:,jk) = fsdept_n(:,:,jk-1) + fse3w_n(:,:,jk)
  341. fsdepw_n(:,:,jk) = fsdepw_n(:,:,jk-1) + fse3t_n(:,:,jk-1)
  342. fsde3w_n(:,:,jk) = fsdept_n(:,:,jk ) - sshn (:,:)
  343. END DO
  344. #endif
  345. ENDIF
  346. ENDIF ! .NOT. ln_rstart
  347. !
  348. END SUBROUTINE lim_sbc_init
  349. #else
  350. !!----------------------------------------------------------------------
  351. !! Default option : Dummy module NO LIM 3.0 sea-ice model
  352. !!----------------------------------------------------------------------
  353. CONTAINS
  354. SUBROUTINE lim_sbc ! Dummy routine
  355. END SUBROUTINE lim_sbc
  356. #endif
  357. !!======================================================================
  358. END MODULE limsbc