Changeset 14072 for NEMO/trunk/src/ICE/icesbc.F90
- Timestamp:
- 2020-12-04T08:48:38+01:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk/src/ICE/icesbc.F90
r14005 r14072 59 59 !! 60 60 INTEGER :: ji, jj ! dummy loop index 61 REAL(wp), DIMENSION(jpi,jpj) :: zutau_ice, zvtau_ice 61 REAL(wp), DIMENSION(jpi,jpj) :: zutau_ice, zvtau_ice 62 62 !!------------------------------------------------------------------- 63 63 ! … … 72 72 SELECT CASE( ksbc ) 73 73 CASE( jp_usr ) ; CALL usrdef_sbc_ice_tau( kt ) ! user defined formulation 74 CASE( jp_blk ) ; CALL blk_ice_1( sf(jp_wndi)%fnow(:,:,1), sf(jp_wndj)%fnow(:,:,1), & 75 & sf(jp_tair)%fnow(:,:,1), sf(jp_humi)%fnow(:,:,1), & 74 CASE( jp_blk ) 75 CALL blk_ice_1( sf(jp_wndi)%fnow(:,:,1), sf(jp_wndj)%fnow(:,:,1), & 76 & theta_air_zt(:,:), q_air_zt(:,:), & ! #LB: known from "sbc_oce" module... 76 77 & sf(jp_slp )%fnow(:,:,1), u_ice, v_ice, tm_su , & ! inputs 77 & putaui = utau_ice, pvtaui = vtau_ice ) ! outputs 78 & putaui = utau_ice, pvtaui = vtau_ice ) ! outputs 78 79 ! CASE( jp_abl ) utau_ice & vtau_ice are computed in ablmod 79 80 CASE( jp_purecpl ) ; CALL sbc_cpl_ice_tau( utau_ice , vtau_ice ) ! Coupled formulation … … 93 94 END SUBROUTINE ice_sbc_tau 94 95 95 96 96 97 SUBROUTINE ice_sbc_flx( kt, ksbc ) 97 98 !!------------------------------------------------------------------- … … 108 109 !! dqns_ice = non solar heat sensistivity [W/m2] 109 110 !! qemp_oce, qemp_ice, qprec_ice, qevap_ice = sensible heat (associated with evap & precip) [W/m2] 110 !! + some fields that are not used outside this module: 111 !! + some fields that are not used outside this module: 111 112 !! qla_ice = latent heat flux over ice [W/m2] 112 113 !! dqla_ice = latent heat sensistivity [W/m2] … … 118 119 ! 119 120 INTEGER :: ji, jj, jl ! dummy loop index 120 REAL(wp) :: zmiss_val ! missing value retrieved from xios 121 REAL(wp) :: zmiss_val ! missing value retrieved from xios 121 122 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: zalb, zmsk00 ! 2D workspace 122 123 !!-------------------------------------------------------------------- … … 142 143 CALL usrdef_sbc_ice_flx( kt, h_s, h_i ) 143 144 CASE( jp_blk, jp_abl ) !--- bulk formulation & ABL formulation 144 CALL blk_ice_2 ( t_su, h_s, h_i, alb_ice, sf(jp_tair)%fnow(:,:,1), sf(jp_humi)%fnow(:,:,1), & 145 & sf(jp_slp)%fnow(:,:,1), sf(jp_qlw)%fnow(:,:,1), sf(jp_prec)%fnow(:,:,1), sf(jp_snow)%fnow(:,:,1) ) ! 145 CALL blk_ice_2 ( t_su, h_s, h_i, alb_ice, & 146 & theta_air_zt(:,:), q_air_zt(:,:), & ! #LB: known from "sbc_oce" module... 147 & sf(jp_slp)%fnow(:,:,1), sf(jp_qlw)%fnow(:,:,1), & 148 & sf(jp_prec)%fnow(:,:,1), sf(jp_snow)%fnow(:,:,1) ) 146 149 IF( ln_mixcpl ) CALL sbc_cpl_ice_flx( picefr=at_i_b, palbi=alb_ice, psst=sst_m, pist=t_su, phs=h_s, phi=h_i ) 147 150 IF( nn_flxdist /= -1 ) CALL ice_flx_dist ( t_su, alb_ice, qns_ice, qsr_ice, dqns_ice, evap_ice, devap_ice, nn_flxdist ) … … 163 166 zalb (:,:) = rn_alb_oce 164 167 ELSEWHERE 165 zmsk00(:,:) = 1._wp 168 zmsk00(:,:) = 1._wp 166 169 zalb (:,:) = SUM( alb_ice * a_i_b, dim=3 ) / at_i_b 167 170 END WHERE … … 185 188 !! *** ROUTINE ice_flx_dist *** 186 189 !! 187 !! ** Purpose : update the ice surface boundary condition by averaging 190 !! ** Purpose : update the ice surface boundary condition by averaging 188 191 !! and/or redistributing fluxes on ice categories 189 192 !! … … 192 195 !! ** Action : depends on k_flxdist 193 196 !! = -1 Do nothing (needs N(cat) fluxes) 194 !! = 0 Average N(cat) fluxes then apply the average over the N(cat) ice 197 !! = 0 Average N(cat) fluxes then apply the average over the N(cat) ice 195 198 !! = 1 Average N(cat) fluxes then redistribute over the N(cat) ice 196 199 !! using T-ice and albedo sensitivity … … 222 225 ELSEWHERE ; z1_at_i(:,:) = 0._wp 223 226 END WHERE 224 227 225 228 SELECT CASE( k_flxdist ) !== averaged on all ice categories ==! 226 229 ! 227 230 CASE( 0 , 1 ) 228 231 ! 229 ALLOCATE( z_qns_m(jpi,jpj), z_qsr_m(jpi,jpj), z_dqn_m(jpi,jpj), z_evap_m(jpi,jpj), z_devap_m(jpi,jpj) ) 232 ALLOCATE( z_qns_m(jpi,jpj), z_qsr_m(jpi,jpj), z_dqn_m(jpi,jpj), z_evap_m(jpi,jpj), z_devap_m(jpi,jpj) ) 230 233 ! 231 234 z_qns_m (:,:) = SUM( a_i(:,:,:) * pqns_ice (:,:,:) , dim=3 ) * z1_at_i(:,:) … … 242 245 END DO 243 246 ! 244 DEALLOCATE( z_qns_m, z_qsr_m, z_dqn_m, z_evap_m, z_devap_m ) 247 DEALLOCATE( z_qns_m, z_qsr_m, z_dqn_m, z_evap_m, z_devap_m ) 245 248 ! 246 249 END SELECT … … 250 253 CASE( 1 , 2 ) 251 254 ! 252 ALLOCATE( zalb_m(jpi,jpj), ztem_m(jpi,jpj) ) 255 ALLOCATE( zalb_m(jpi,jpj), ztem_m(jpi,jpj) ) 253 256 ! 254 257 zalb_m(:,:) = SUM( a_i(:,:,:) * palb_ice(:,:,:) , dim=3 ) * z1_at_i(:,:) … … 260 263 END DO 261 264 ! 262 DEALLOCATE( zalb_m, ztem_m ) 265 DEALLOCATE( zalb_m, ztem_m ) 263 266 ! 264 267 END SELECT … … 272 275 !! 273 276 !! ** Purpose : Physical constants and parameters linked to the ice dynamics 274 !! 277 !! 275 278 !! ** Method : Read the namsbc namelist and check the ice-dynamic 276 279 !! parameter values called at the first timestep (nit000)
Note: See TracChangeset
for help on using the changeset viewer.