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 14590 for NEMO/releases/r4.0/r4.0-HEAD/src/ICE – NEMO

Ignore:
Timestamp:
2021-03-05T14:21:05+01:00 (3 years ago)
Author:
clem
Message:

4.0-HEAD: solve ticket #2627 to allow simulations with conductive fluxes instead of normal fluxes on top of sea ice (MetO requirement). I do not think I tackled all the issues but this is the best I can do without having a proper configuration to test it.

Location:
NEMO/releases/r4.0/r4.0-HEAD/src/ICE
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • NEMO/releases/r4.0/r4.0-HEAD/src/ICE/icectl.F90

    r14026 r14590  
    801801      !!   DO jj = 1, jpj 
    802802      !!      DO ji = 1, jpi 
    803       !!         zdiag_mass2D(ji,jj) =   wfx_ice(ji,jj)   + wfx_snw(ji,jj)   + wfx_spr(ji,jj) + wfx_sub(ji,jj) & 
    804       !!            &                  + diag_vice(ji,jj) + diag_vsnw(ji,jj) - diag_adv_mass(ji,jj) 
     803      !!         zdiag_mass2D(ji,jj) =   wfx_ice(ji,jj)   + wfx_snw(ji,jj)   + wfx_spr(ji,jj)   + wfx_sub(ji,jj) + wfx_pnd(ji,jj) & 
     804      !!            &                  + diag_vice(ji,jj) + diag_vsnw(ji,jj) + diag_vpnd(ji,jj) - diag_adv_mass(ji,jj) 
    805805      !!         zdiag_salt2D(ji,jj) = sfx(ji,jj) + diag_sice(ji,jj) - diag_adv_salt(ji,jj) 
    806806      !!         zdiag_heat2D(ji,jj) = qt_oce_ai(ji,jj) - qt_atm_oi(ji,jj) + diag_heat(ji,jj) - diag_adv_heat(ji,jj) 
     
    815815 
    816816      ! -- mass diag -- ! 
    817       zdiag_mass     = glob_sum( 'icectl', (  wfx_ice   + wfx_snw   + wfx_spr + wfx_sub & 
    818          &                                  + diag_vice + diag_vsnw - diag_adv_mass ) * e1e2t ) * rdt_ice 
     817      zdiag_mass     = glob_sum( 'icectl', (  wfx_ice   + wfx_snw   + wfx_spr + wfx_sub + wfx_pnd & 
     818         &                                  + diag_vice + diag_vsnw + diag_vpnd - diag_adv_mass ) * e1e2t ) * rdt_ice 
    819819      zdiag_adv_mass = glob_sum( 'icectl', diag_adv_mass * e1e2t ) * rdt_ice 
    820820 
  • NEMO/releases/r4.0/r4.0-HEAD/src/ICE/icesbc.F90

    r14026 r14590  
    140140      CASE( jp_blk )              !--- bulk formulation 
    141141                                  CALL blk_ice_flx    ( t_su, h_s, h_i, alb_ice )    !  
    142          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 ) 
     142         IF( ln_mixcpl        )   CALL sbc_cpl_ice_flx( kt, picefr=at_i_b, palbi=alb_ice, psst=sst_m, pist=t_su, phs=h_s, phi=h_i ) 
    143143         IF( nn_flxdist /= -1 )   CALL ice_flx_dist   ( t_su, alb_ice, qns_ice, qsr_ice, dqns_ice, evap_ice, devap_ice, nn_flxdist ) 
    144144         !                        !    compute conduction flux and surface temperature (as in Jules surface module) 
     
    146146            &                     CALL blk_ice_qcn    ( ln_virtual_itd, t_su, t_bo, h_s, h_i ) 
    147147      CASE ( jp_purecpl )         !--- coupled formulation 
    148                                   CALL sbc_cpl_ice_flx( picefr=at_i_b, palbi=alb_ice, psst=sst_m, pist=t_su, phs=h_s, phi=h_i ) 
     148                                  CALL sbc_cpl_ice_flx( kt, picefr=at_i_b, palbi=alb_ice, psst=sst_m, pist=t_su, phs=h_s, phi=h_i ) 
    149149         IF( nn_flxdist /= -1 )   CALL ice_flx_dist   ( t_su, alb_ice, qns_ice, qsr_ice, dqns_ice, evap_ice, devap_ice, nn_flxdist ) 
    150150      END SELECT 
  • NEMO/releases/r4.0/r4.0-HEAD/src/ICE/iceupdate.F90

    r14582 r14590  
    105105      ! Net heat flux on top of the ice-ocean (W.m-2) 
    106106      !---------------------------------------------- 
    107       qt_atm_oi(:,:) = qns_tot(:,:) + qsr_tot(:,:)  
     107      IF( ln_cndflx ) THEN   ! ice-atm interface = conduction (and melting) fluxes 
     108         qt_atm_oi(:,:) = ( 1._wp - at_i_b(:,:) ) * ( qns_oce(:,:) + qsr_oce(:,:) ) + qemp_oce(:,:) + & 
     109            &             SUM( a_i_b * ( qcn_ice + qml_ice + qtr_ice_top ), dim=3 ) + qemp_ice(:,:) 
     110      ELSE                   ! ice-atm interface = solar and non-solar fluxes 
     111         qt_atm_oi(:,:) = qns_tot(:,:) + qsr_tot(:,:)  
     112      ENDIF 
    108113 
    109114      ! --- case we bypass ice thermodynamics --- ! 
     
    121126            ! Solar heat flux reaching the ocean (max) = zqsr (W.m-2)  
    122127            !--------------------------------------------------- 
    123             zqsr = qsr_tot(ji,jj) - SUM( a_i_b(ji,jj,:) * ( qsr_ice(ji,jj,:) - qtr_ice_bot(ji,jj,:) ) ) 
    124  
     128            IF( ln_cndflx ) THEN   ! ice-atm interface = conduction (and melting) fluxes 
     129               zqsr = ( 1._wp - at_i_b(ji,jj) ) * qsr_oce(ji,jj) + SUM( a_i_b (ji,jj,:) * qtr_ice_bot(ji,jj,:) ) 
     130            ELSE                   ! ice-atm interface = solar and non-solar fluxes 
     131               zqsr = qsr_tot(ji,jj) - SUM( a_i_b(ji,jj,:) * ( qsr_ice(ji,jj,:) - qtr_ice_bot(ji,jj,:) ) ) 
     132            ENDIF 
     133          
    125134            ! Total heat flux reaching the ocean = qt_oce_ai (W.m-2)  
    126135            !--------------------------------------------------- 
    127             qt_oce_ai(ji,jj) = qt_atm_oi(ji,jj) - hfx_sum(ji,jj) - hfx_bom(ji,jj) - hfx_bog(ji,jj) & 
    128                &                                - hfx_dif(ji,jj) - hfx_opw(ji,jj) - hfx_snw(ji,jj) & 
    129                &                                + hfx_thd(ji,jj) + hfx_dyn(ji,jj) + hfx_res(ji,jj) & 
    130                &                                + hfx_sub(ji,jj) - SUM( qevap_ice(ji,jj,:) * a_i_b(ji,jj,:) ) + hfx_spr(ji,jj)                  
    131              
     136            IF( ln_icethd ) THEN 
     137               qt_oce_ai(ji,jj) = qt_atm_oi(ji,jj) - hfx_sum(ji,jj) - hfx_bom(ji,jj) - hfx_bog(ji,jj) & 
     138                  &                                - hfx_dif(ji,jj) - hfx_opw(ji,jj) - hfx_snw(ji,jj) & 
     139                  &                                + hfx_thd(ji,jj) + hfx_dyn(ji,jj) + hfx_res(ji,jj) & 
     140                  &                                + hfx_sub(ji,jj) - SUM( qevap_ice(ji,jj,:) * a_i_b(ji,jj,:) ) + hfx_spr(ji,jj) 
     141            ENDIF 
     142          
    132143            ! New qsr and qns used to compute the oceanic heat flux at the next time step 
    133144            !---------------------------------------------------------------------------- 
     
    282293      IF( iom_use('hfxcndtop'  ) )   CALL iom_put( 'hfxcndtop'  , SUM( qcn_ice_top * a_i_b, dim=3 ) )   ! Surface conduction flux 
    283294!!    IF( iom_use('hfxmelt'    ) )   CALL iom_put( 'hfxmelt'    , SUM( qml_ice     * a_i_b, dim=3 ) )   ! Surface melt flux 
    284 !!    IF( iom_use('hfxldmelt'  ) )   CALL iom_put( 'hfxldmelt'  ,      fhld        * at_i_b         )   ! Heat in lead for ice melting 
     295!!    IF( iom_use('hfxldmelt'  ) )   CALL iom_put( 'hfxldmelt'  ,      fhld        * at_i_b         )   ! Heat in lead for ice melting  
    285296!!    IF( iom_use('hfxldgrow'  ) )   CALL iom_put( 'hfxldgrow'  ,      qlead       * r1_rdtice      )   ! Heat in lead for ice growth 
    286        
     297 
    287298      ! controls 
    288299      !--------- 
Note: See TracChangeset for help on using the changeset viewer.