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 8920 – NEMO

Changeset 8920


Ignore:
Timestamp:
2017-12-06T15:33:57+01:00 (6 years ago)
Author:
clem
Message:

debug ice option in which conductivity is calculated from bulk formulae and used in ice thermodynamics (np_jules_active in forced mode)

Location:
branches/2017/dev_CNRS_2017/NEMOGCM/NEMO
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_CNRS_2017/NEMOGCM/NEMO/LIM_SRC_3/iceforcing.F90

    r8906 r8920  
    7272      SELECT CASE( ksbc ) 
    7373         CASE( jp_usr     )   ;    CALL usrdef_sbc_ice_tau( kt )                 ! user defined formulation 
    74          CASE( jp_blk     )   ;    CALL blk_ice_tau                              ! Bulk formulation 
    75          CASE( jp_purecpl )   ;    CALL sbc_cpl_ice_tau( utau_ice , vtau_ice )   ! Coupled   formulation 
     74         CASE( jp_blk     )   ;    CALL blk_ice_tau                              ! Bulk         formulation 
     75         CASE( jp_purecpl )   ;    CALL sbc_cpl_ice_tau( utau_ice , vtau_ice )   ! Coupled      formulation 
    7676      END SELECT 
    7777 
     
    134134!!gm cldf_ice is a real, DOCTOR naming rule: start with cd means CHARACTER passed in argument ! 
    135135      alb_ice(:,:,:) = ( 1. - cldf_ice ) * zalb_cs(:,:,:) + cldf_ice * zalb_os(:,:,:) 
    136        
    137       SELECT CASE( ksbc )      !==  fluxes over sea ice  ==! 
    138       ! 
    139       CASE( jp_usr )                !--- user defined formulation 
     136      ! 
     137      ! 
     138      SELECT CASE( ksbc )   !== fluxes over sea ice ==! 
     139      ! 
     140      CASE( jp_usr )              !--- user defined formulation 
    140141                                  CALL usrdef_sbc_ice_flx( kt ) 
    141          ! 
    142       CASE( jp_blk )                !--- bulk formulation 
    143                                   CALL blk_ice_flx( t_su, h_s, h_i, alb_ice )    !  
     142      CASE( jp_blk )              !--- bulk formulation 
     143                                  CALL blk_ice_flx    ( t_su, h_s, h_i, alb_ice )    !  
    144144         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 ) 
    145          IF( nn_flxdist /= -1 )   CALL ice_flx_dist( t_su, alb_ice, qns_ice, qsr_ice, dqns_ice, evap_ice, devap_ice, nn_flxdist ) 
    146          ! 
    147       CASE ( jp_purecpl )           !--- coupled formulation 
     145         IF( nn_flxdist /= -1 )   CALL ice_flx_dist   ( t_su, alb_ice, qns_ice, qsr_ice, dqns_ice, evap_ice, devap_ice, nn_flxdist ) 
     146         SELECT CASE( nice_jules ) 
     147         CASE( np_jules_ACTIVE )  !    compute conduction flux and surface temperature (as in Jules surface module) 
     148                                  CALL blk_ice_qcn    ( nn_monocat, t_su, t_bo, h_s, h_i ) 
     149         END SELECT 
     150      CASE ( jp_purecpl )         !--- coupled formulation 
    148151                                  CALL sbc_cpl_ice_flx( picefr=at_i_b, palbi=alb_ice, psst=sst_m, pist=t_su, phs=h_s, phi=h_i ) 
    149          IF( nn_flxdist /= -1 )   CALL ice_flx_dist( t_su, alb_ice, qns_ice, qsr_ice, dqns_ice, evap_ice, devap_ice, nn_flxdist ) 
    150          ! 
    151       END SELECT 
    152  
    153       IF( iom_use('icealb') ) THEN    !--- output ice albedo 
     152         IF( nn_flxdist /= -1 )   CALL ice_flx_dist   ( t_su, alb_ice, qns_ice, qsr_ice, dqns_ice, evap_ice, devap_ice, nn_flxdist ) 
     153      END SELECT 
     154 
     155      !--- output ice albedo and surface albedo ---! 
     156      IF( iom_use('icealb') ) THEN 
    154157         WHERE( at_i_b <= epsi06 )   ;   zalb(:,:) = rn_alb_oce 
    155158         ELSEWHERE                   ;   zalb(:,:) = SUM( alb_ice * a_i_b, dim=3 ) / at_i_b 
     
    157160         CALL iom_put( "icealb" , zalb(:,:) ) 
    158161      ENDIF 
    159  
    160       IF( iom_use('albedo') ) THEN    !--- output surface albedo 
     162      IF( iom_use('albedo') ) THEN 
    161163         zalb(:,:) = SUM( alb_ice * a_i_b, dim=3 ) + rn_alb_oce * ( 1._wp - at_i_b ) 
    162164         CALL iom_put( "albedo" , zalb(:,:) ) 
  • branches/2017/dev_CNRS_2017/NEMOGCM/NEMO/OPA_SRC/SBC/sbcblk.F90

    r8885 r8920  
    6868   PUBLIC   sbc_blk       ! called in sbcmod 
    6969#if defined key_lim3 
    70    PUBLIC   blk_ice_tau   ! routine called in icestp module 
    71    PUBLIC   blk_ice_flx   ! routine called in icestp module 
    72    PUBLIC   blk_ice_qcn   ! routine called in icestp module 
     70   PUBLIC   blk_ice_tau   ! routine called in iceforcing 
     71   PUBLIC   blk_ice_flx   ! routine called in iceforcing 
     72   PUBLIC   blk_ice_qcn   ! routine called in iceforcing 
    7373#endif  
    7474 
     
    10411041      CASE ( 1 , 3 ) 
    10421042         ! 
    1043          zfac    =  1._wp /  ( rn_cnd_s + rcdic ) 
    1044          zfac2   =  EXP(1._wp) * 0.5_wp * zepsilon 
    1045          zfac3   =  2._wp / zepsilon 
     1043         zfac  = 1._wp /  ( rn_cnd_s + rcdic ) 
     1044         zfac2 = EXP(1._wp) * 0.5_wp * zepsilon 
     1045         zfac3 = 2._wp / zepsilon 
    10461046         !    
    10471047         DO jl = 1, jpl                 
    10481048            DO jj = 1 , jpj 
    10491049               DO ji = 1, jpi 
    1050                   !                                ! Effective thickness 
    1051                   zhe               =   ( rn_cnd_s * phi(ji,jj,jl) + rcdic * phs(ji,jj,jl) ) * zfac 
    1052                   !                                ! Enhanced conduction factor 
    1053                   IF( zhe >=  zfac2 )  & 
    1054                      zgfac(ji,jj,jl)   =   MIN( 2._wp, ( 0.5_wp + 0.5 * LOG( zhe * zfac3 ) ) ) 
     1050                  zhe = ( rn_cnd_s * phi(ji,jj,jl) + rcdic * phs(ji,jj,jl) ) * zfac                             ! Effective thickness 
     1051                  IF( zhe >=  zfac2 )   zgfac(ji,jj,jl) = MIN( 2._wp, 0.5_wp * ( 1._wp + LOG( zhe * zfac3 ) ) ) ! Enhanced conduction factor 
    10551052               END DO 
    10561053            END DO 
     
    10631060      ! -------------------------------------------------------------! 
    10641061      ! 
    1065       zfac   =   rcdic * rn_cnd_s  
    1066       !                             ! ========================== ! 
    1067       DO jl = 1, jpl                !  Loop over ice categories  ! 
    1068          !                          ! ========================== ! 
     1062      zfac = rcdic * rn_cnd_s 
     1063      ! 
     1064      DO jl = 1, jpl 
    10691065         DO jj = 1 , jpj 
    10701066            DO ji = 1, jpi 
    1071                !                    ! Effective conductivity of the snow-ice system divided by thickness 
    1072                zkeff_h =   zfac * zgfac(ji,jj,jl) / ( rcdic * phs(ji,jj,jl) + rn_cnd_s * phi(ji,jj,jl) ) 
    1073                !                    ! Store initial surface temperature 
    1074                ztsu    =   ptsu(ji,jj,jl) 
    1075                !                    ! Net initial atmospheric heat flux 
    1076                zqa0    =   qsr_ice(ji,jj,jl) - qsr_ice_tr(ji,jj,jl) + qns_ice(ji,jj,jl) 
     1067               !                     
     1068               zkeff_h = zfac * zgfac(ji,jj,jl) / &                                    ! Effective conductivity of the snow-ice system divided by thickness 
     1069                  &      ( rcdic * phs(ji,jj,jl) + rn_cnd_s * MAX( 0.01, phi(ji,jj,jl) ) ) 
     1070               ztsu    = ptsu(ji,jj,jl)                                                ! Store initial surface temperature 
     1071               zqa0    = qsr_ice(ji,jj,jl) - qsr_ice_tr(ji,jj,jl) + qns_ice(ji,jj,jl)  ! Net initial atmospheric heat flux 
    10771072               ! 
    1078                DO iter = 1, nit     ! --- Iteration loop 
    1079                    !                      ! Conduction heat flux through snow-ice system (>0 downwards) 
    1080                    zqc   =   zkeff_h * ( ztsu - ptb(ji,jj) ) 
    1081                    !                      ! Surface energy budget 
    1082                    zqnet =   zqa0 + dqns_ice(ji,jj,jl) * ( ztsu - ptsu(ji,jj,jl) ) - zqc 
    1083                    !                      ! Temperature update 
    1084                    ztsu  =   ztsu - zqnet / ( dqns_ice(ji,jj,jl) - zkeff_h ) 
     1073               DO iter = 1, nit     ! --- Iterative loop 
     1074                  zqc   = zkeff_h * ( ztsu - ptb(ji,jj) )                              ! Conduction heat flux through snow-ice system (>0 downwards) 
     1075                  zqnet = zqa0 + dqns_ice(ji,jj,jl) * ( ztsu - ptsu(ji,jj,jl) ) - zqc  ! Surface energy budget 
     1076                  ztsu  = ztsu - zqnet / ( dqns_ice(ji,jj,jl) - zkeff_h )              ! Temperature update 
    10851077               END DO 
    10861078               ! 
Note: See TracChangeset for help on using the changeset viewer.