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.
Changeset 14072 for NEMO/trunk/src/ICE/icesbc.F90 – NEMO

Ignore:
Timestamp:
2020-12-04T08:48:38+01:00 (4 years ago)
Author:
laurent
Message:

Merging branch "2020/dev_r13648_ASINTER-04_laurent_bulk_ice", ticket #2369

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/trunk/src/ICE/icesbc.F90

    r14005 r14072  
    5959      !! 
    6060      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 
    6262      !!------------------------------------------------------------------- 
    6363      ! 
     
    7272      SELECT CASE( ksbc ) 
    7373         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... 
    7677            &                                      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 
    7879 !        CASE( jp_abl     )    utau_ice & vtau_ice are computed in ablmod 
    7980         CASE( jp_purecpl )   ;    CALL sbc_cpl_ice_tau( utau_ice , vtau_ice )   ! Coupled      formulation 
     
    9394   END SUBROUTINE ice_sbc_tau 
    9495 
    95     
     96 
    9697   SUBROUTINE ice_sbc_flx( kt, ksbc ) 
    9798      !!------------------------------------------------------------------- 
     
    108109      !!                dqns_ice                                 = non solar  heat sensistivity                  [W/m2] 
    109110      !!                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: 
    111112      !!                qla_ice                                  = latent heat flux over ice                     [W/m2] 
    112113      !!                dqla_ice                                 = latent heat sensistivity                      [W/m2] 
     
    118119      ! 
    119120      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 
    121122      REAL(wp), DIMENSION(:,:), ALLOCATABLE ::   zalb, zmsk00      ! 2D workspace 
    122123      !!-------------------------------------------------------------------- 
     
    142143                                  CALL usrdef_sbc_ice_flx( kt, h_s, h_i ) 
    143144      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) ) 
    146149         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 ) 
    147150         IF( nn_flxdist /= -1 )   CALL ice_flx_dist   ( t_su, alb_ice, qns_ice, qsr_ice, dqns_ice, evap_ice, devap_ice, nn_flxdist ) 
     
    163166            zalb  (:,:) = rn_alb_oce 
    164167         ELSEWHERE 
    165             zmsk00(:,:) = 1._wp             
     168            zmsk00(:,:) = 1._wp 
    166169            zalb  (:,:) = SUM( alb_ice * a_i_b, dim=3 ) / at_i_b 
    167170         END WHERE 
     
    185188      !!                  ***  ROUTINE ice_flx_dist  *** 
    186189      !! 
    187       !! ** Purpose :   update the ice surface boundary condition by averaging  
     190      !! ** Purpose :   update the ice surface boundary condition by averaging 
    188191      !!              and/or redistributing fluxes on ice categories 
    189192      !! 
     
    192195      !! ** Action  :   depends on k_flxdist 
    193196      !!                = -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 
    195198      !!                =  1  Average N(cat) fluxes then redistribute over the N(cat) ice 
    196199      !!                                                 using T-ice and albedo sensitivity 
     
    222225      ELSEWHERE                      ; z1_at_i(:,:) = 0._wp 
    223226      END WHERE 
    224        
     227 
    225228      SELECT CASE( k_flxdist )       !==  averaged on all ice categories  ==! 
    226229      ! 
    227230      CASE( 0 , 1 ) 
    228231         ! 
    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) ) 
    230233         ! 
    231234         z_qns_m  (:,:) = SUM( a_i(:,:,:) * pqns_ice  (:,:,:) , dim=3 ) * z1_at_i(:,:) 
     
    242245         END DO 
    243246         ! 
    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 ) 
    245248         ! 
    246249      END SELECT 
     
    250253      CASE( 1 , 2 ) 
    251254         ! 
    252          ALLOCATE( zalb_m(jpi,jpj), ztem_m(jpi,jpj) )   
     255         ALLOCATE( zalb_m(jpi,jpj), ztem_m(jpi,jpj) ) 
    253256         ! 
    254257         zalb_m(:,:) = SUM( a_i(:,:,:) * palb_ice(:,:,:) , dim=3 ) * z1_at_i(:,:) 
     
    260263         END DO 
    261264         ! 
    262          DEALLOCATE( zalb_m, ztem_m )   
     265         DEALLOCATE( zalb_m, ztem_m ) 
    263266         ! 
    264267      END SELECT 
     
    272275      !! 
    273276      !! ** Purpose :   Physical constants and parameters linked to the ice dynamics 
    274       !!       
     277      !! 
    275278      !! ** Method  :   Read the namsbc namelist and check the ice-dynamic 
    276279      !!              parameter values called at the first timestep (nit000) 
Note: See TracChangeset for help on using the changeset viewer.