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 8752 for branches/UKMO/dev_r8183_ICEMODEL_svn_removed/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90 – NEMO

Ignore:
Timestamp:
2017-11-20T13:54:32+01:00 (6 years ago)
Author:
dancopsey
Message:

Merged in main ICEMODEL branch (branches/2017/dev_r8183_ICEMODEL) from revision 8587 to 8726.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r8183_ICEMODEL_svn_removed/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90

    r8751 r8752  
    3232   USE geo2ocean      !  
    3333   USE oce   , ONLY : tsn, un, vn, sshn, ub, vb, sshb, fraqsr_1lev 
    34    USE albedooce      !  
     34   USE ocealb         !  
    3535   USE eosbn2         !  
    3636   USE sbcrnf, ONLY : l_rnfcpl 
     
    178178   TYPE( DYNARR ), SAVE, DIMENSION(jprcv) ::   frcv                     ! all fields recieved from the atmosphere 
    179179 
    180    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   albedo_oce_mix    ! ocean albedo sent to atmosphere (mix clear/overcast sky) 
     180   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   alb_oce_mix    ! ocean albedo sent to atmosphere (mix clear/overcast sky) 
    181181 
    182182   REAL(wp) ::   rpref = 101000._wp   ! reference atmospheric pressure[N/m2]  
     
    202202      ierr(:) = 0 
    203203      ! 
    204       ALLOCATE( albedo_oce_mix(jpi,jpj), nrcvinfo(jprcv),  STAT=ierr(1) ) 
     204      ALLOCATE( alb_oce_mix(jpi,jpj), nrcvinfo(jprcv),  STAT=ierr(1) ) 
    205205       
    206206#if ! defined key_lim3 && ! defined key_cice 
     
    737737      !     2. receiving mixed oce-ice solar radiation  
    738738      IF ( TRIM ( sn_snd_alb%cldes ) == 'mixed oce-ice' .OR. TRIM ( sn_rcv_qsr%cldes ) == 'mixed oce-ice' ) THEN 
    739          CALL albedo_oce( zaos, zacs ) 
     739         CALL oce_alb( zaos, zacs ) 
    740740         ! Due to lack of information on nebulosity : mean clear/overcast sky 
    741          albedo_oce_mix(:,:) = ( zacs(:,:) + zaos(:,:) ) * 0.5 
     741         alb_oce_mix(:,:) = ( zacs(:,:) + zaos(:,:) ) * 0.5 
    742742      ENDIF 
    743743 
     
    15301530    
    15311531 
    1532    SUBROUTINE sbc_cpl_ice_flx( picefr, palbi, psst, pist ) 
     1532   SUBROUTINE sbc_cpl_ice_flx( picefr, palbi, psst, pist, phs, phi ) 
    15331533      !!---------------------------------------------------------------------- 
    15341534      !!             ***  ROUTINE sbc_cpl_ice_flx  *** 
     
    15851585      REAL(wp), INTENT(in), DIMENSION(:,:  ), OPTIONAL ::   psst       ! sea surface temperature     [Celsius] 
    15861586      REAL(wp), INTENT(in), DIMENSION(:,:,:), OPTIONAL ::   pist       ! ice surface temperature     [Kelvin] 
    1587       ! 
    1588       INTEGER ::   jl         ! dummy loop index 
     1587      REAL(wp), INTENT(in), DIMENSION(:,:,:), OPTIONAL ::   phs        ! snow depth                  [m] 
     1588      REAL(wp), INTENT(in), DIMENSION(:,:,:), OPTIONAL ::   phi        ! ice thickness               [m] 
     1589      ! 
     1590      INTEGER ::   ji,jj,jl         ! dummy loop index 
    15891591      REAL(wp), POINTER, DIMENSION(:,:  ) ::   zcptn, zcptrain, zcptsnw, ziceld, zmsk, zsnw 
    15901592      REAL(wp), POINTER, DIMENSION(:,:  ) ::   zemp_tot, zemp_ice, zemp_oce, ztprecip, zsprecip, zevap_oce, zevap_ice, zdevap_ice 
    15911593      REAL(wp), POINTER, DIMENSION(:,:  ) ::   zqns_tot, zqns_oce, zqsr_tot, zqsr_oce, zqprec_ice, zqemp_oce, zqemp_ice 
    1592       REAL(wp), POINTER, DIMENSION(:,:,:) ::   zqns_ice, zqsr_ice, zdqns_ice, zqevap_ice 
     1594      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zqns_ice, zqsr_ice, zdqns_ice, zqevap_ice, zfrqsr_tr_i 
    15931595      !!---------------------------------------------------------------------- 
    15941596      ! 
     
    15981600      CALL wrk_alloc( jpi,jpj,     zemp_tot, zemp_ice, zemp_oce, ztprecip, zsprecip, zevap_oce, zevap_ice, zdevap_ice ) 
    15991601      CALL wrk_alloc( jpi,jpj,     zqns_tot, zqns_oce, zqsr_tot, zqsr_oce, zqprec_ice, zqemp_oce, zqemp_ice ) 
    1600       CALL wrk_alloc( jpi,jpj,jpl, zqns_ice, zqsr_ice, zdqns_ice, zqevap_ice ) 
     1602      CALL wrk_alloc( jpi,jpj,jpl, zqns_ice, zqsr_ice, zdqns_ice, zqevap_ice, zfrqsr_tr_i ) 
    16011603 
    16021604      IF( ln_mixcpl )   zmsk(:,:) = 1. - xcplmask(:,:,0) 
     
    18901892!       ( see OASIS3 user guide, 5th edition, p39 ) 
    18911893         zqsr_ice(:,:,1) = frcv(jpr_qsrmix)%z3(:,:,1) * ( 1.- palbi(:,:,1) )   & 
    1892             &            / (  1.- ( albedo_oce_mix(:,:  ) * ziceld(:,:)       & 
     1894            &            / (  1.- ( alb_oce_mix(:,:  ) * ziceld(:,:)       & 
    18931895            &                     + palbi         (:,:,1) * picefr(:,:) ) ) 
    18941896      END SELECT 
     
    19511953      END SELECT 
    19521954 
    1953       ! Surface transimission parameter io (Maykut Untersteiner , 1971 ; Ebert and Curry, 1993 ) 
    1954       ! Used for LIM3 
    1955       ! Coupled case: since cloud cover is not received from atmosphere  
    1956       !               ===> used prescribed cloud fraction representative for polar oceans in summer (0.81) 
    1957       fr1_i0(:,:) = ( 0.18 * ( 1.0 - cldf_ice ) + 0.35 * cldf_ice ) 
    1958       fr2_i0(:,:) = ( 0.82 * ( 1.0 - cldf_ice ) + 0.65 * cldf_ice ) 
     1955      ! --- Transmitted shortwave radiation (W/m2) --- ! 
     1956       
     1957      IF ( nice_jules == 0 ) THEN 
     1958                
     1959         zfrqsr_tr_i(:,:,:) = 0._wp   !   surface transmission parameter 
     1960      
     1961         ! former coding was     
     1962         ! Coupled case: since cloud cover is not received from atmosphere  
     1963         !               ===> used prescribed cloud fraction representative for polar oceans in summer (0.81) 
     1964         !     fr1_i0(:,:) = ( 0.18 * ( 1.0 - cldf_ice ) + 0.35 * cldf_ice ) 
     1965         !     fr2_i0(:,:) = ( 0.82 * ( 1.0 - cldf_ice ) + 0.65 * cldf_ice ) 
     1966          
     1967         ! to retrieve that coding, we needed to access h_i & h_s from here 
     1968         ! we could even retrieve cloud fraction from the coupler 
     1969                
     1970         DO jl = 1, jpl 
     1971            DO jj = 1 , jpj 
     1972               DO ji = 1, jpi 
     1973             
     1974                  !--- surface transmission parameter (Grenfell Maykut 77) --- ! 
     1975                  zfrqsr_tr_i(ji,jj,jl) = 0.18 * ( 1.0 - cldf_ice ) + 0.35 * cldf_ice  
     1976                
     1977                  ! --- influence of snow and thin ice --- ! 
     1978                  IF ( phs(ji,jj,jl) >= 0.0_wp ) zfrqsr_tr_i(ji,jj,jl) = 0._wp   !   snow fully opaque 
     1979                  IF ( phi(ji,jj,jl) <= 0.1_wp ) zfrqsr_tr_i(ji,jj,jl) = 1._wp   !   thin ice transmits all solar radiation 
     1980               END DO 
     1981            END DO 
     1982         END DO 
     1983          
     1984         qsr_ice_tr(:,:,:) =   zfrqsr_tr_i(:,:,:) * qsr_ice(:,:,:)               !   transmitted solar radiation  
     1985                
     1986      ENDIF 
     1987       
     1988      IF ( nice_jules == 2 ) THEN 
     1989       
     1990         ! here we must receive the qsr_ice_tr array from the coupler 
     1991         ! for now just assume zero 
     1992          
     1993         qsr_ice_tr(:,:,:) = 0.0_wp 
     1994       
     1995      ENDIF 
     1996 
     1997 
    19591998 
    19601999      CALL wrk_dealloc( jpi,jpj,     zcptn, zcptrain, zcptsnw, ziceld, zmsk, zsnw ) 
    19612000      CALL wrk_dealloc( jpi,jpj,     zemp_tot, zemp_ice, zemp_oce, ztprecip, zsprecip, zevap_oce, zevap_ice, zdevap_ice ) 
    19622001      CALL wrk_dealloc( jpi,jpj,     zqns_tot, zqns_oce, zqsr_tot, zqsr_oce, zqprec_ice, zqemp_oce, zqemp_ice ) 
    1963       CALL wrk_dealloc( jpi,jpj,jpl, zqns_ice, zqsr_ice, zdqns_ice, zqevap_ice ) 
     2002      CALL wrk_dealloc( jpi,jpj,jpl, zqns_ice, zqsr_ice, zdqns_ice, zqevap_ice, zfrqsr_tr_i ) 
    19642003      ! 
    19652004      IF( nn_timing == 1 )   CALL timing_stop('sbc_cpl_ice_flx') 
     
    20572096                   ztmp1(:,:) = SUM( alb_ice (:,:,1:jpl) * a_i(:,:,1:jpl), dim=3 ) / SUM( a_i(:,:,1:jpl), dim=3 ) 
    20582097                ELSEWHERE 
    2059                    ztmp1(:,:) = albedo_oce_mix(:,:) 
     2098                   ztmp1(:,:) = alb_oce_mix(:,:) 
    20602099                END WHERE 
    20612100             CASE default   ;   CALL ctl_stop( 'sbc_cpl_snd: wrong definition of sn_snd_alb%clcat' ) 
     
    20852124 
    20862125      IF( ssnd(jps_albmix)%laction ) THEN                         ! mixed ice-ocean 
    2087          ztmp1(:,:) = albedo_oce_mix(:,:) * zfr_l(:,:) 
     2126         ztmp1(:,:) = alb_oce_mix(:,:) * zfr_l(:,:) 
    20882127         DO jl=1,jpl 
    20892128            ztmp1(:,:) = ztmp1(:,:) + alb_ice(:,:,jl) * a_i(:,:,jl) 
Note: See TracChangeset for help on using the changeset viewer.