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 9019 for branches/2017/dev_merge_2017/NEMOGCM/CONFIG/TEST_CASES/SAS_BIPER/MY_SRC/usrdef_sbc.F90 – NEMO

Ignore:
Timestamp:
2017-12-13T15:58:53+01:00 (6 years ago)
Author:
timgraham
Message:

Merge of dev_CNRS_2017 into branch

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_merge_2017/NEMOGCM/CONFIG/TEST_CASES/SAS_BIPER/MY_SRC/usrdef_sbc.F90

    r7377 r9019  
    1818   USE sbc_ice         ! Surface boundary condition: ice fields 
    1919   USE phycst          ! physical constants 
    20    USE ice, ONLY       : pfrld, a_i_b 
    21    USE limthd_dh       ! for CALL lim_thd_snwblow 
     20   USE ice, ONLY       : at_i_b, a_i_b 
     21   USE icethd_dh       ! for CALL ice_thd_snwblow 
    2222   ! 
    2323   USE in_out_manager  ! I/O manager 
     
    2525   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    2626   USE lib_fortran     ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined)  
    27    USE wrk_nemo 
    2827 
    2928   IMPLICIT NONE 
     
    8685      INTEGER, INTENT(in) ::   kt   ! ocean time step 
    8786      !!--------------------------------------------------------------------- 
    88       IF( kt==nit000 .AND. lwp)   WRITE(numout,*)' usrdef_sbc_ice : SAS_BIPER case: NO stress forcing' 
     87      IF( kt==nit000 .AND. lwp)   WRITE(numout,*)' usrdef_sbc_ice : SAS_BIPER case: constant stress forcing' 
    8988      ! 
    90       utau_ice(:,:) = 0._wp 
     89      utau_ice(:,:) = 1.3_wp   ! <=> 0.5 m/s 
    9190      vtau_ice(:,:) = 0._wp 
    9291      ! 
    9392   END SUBROUTINE usrdef_sbc_ice_tau 
    9493 
    95    SUBROUTINE usrdef_sbc_ice_flx( kt ) 
     94   SUBROUTINE usrdef_sbc_ice_flx( kt, phs, phi ) 
    9695      !!--------------------------------------------------------------------- 
    9796      !!                     ***  ROUTINE usrdef_sbc_ice_flx  *** 
     
    9998      !! ** Purpose :   provide the surface boundary (flux) condition over sea-ice 
    10099      !!--------------------------------------------------------------------- 
    101       REAL(wp), DIMENSION(:,:), POINTER ::   zsnw       ! snw distribution after wind blowing 
    102100      INTEGER, INTENT(in) ::   kt   ! ocean time step 
     101      REAL(wp), DIMENSION(:,:,:), INTENT(in)  ::   phs    ! snow thickness 
     102      REAL(wp), DIMENSION(:,:,:), INTENT(in)  ::   phi    ! ice thickness 
     103      !! 
     104      REAL(wp) ::   zfr1, zfr2                 ! local variables 
     105      REAL(wp), DIMENSION(jpi,jpj) ::   zsnw   ! snw distribution after wind blowing 
    103106      !!--------------------------------------------------------------------- 
    104       CALL wrk_alloc( jpi,jpj, zsnw ) 
    105107      ! 
    106108      IF( kt==nit000 .AND. lwp)   WRITE(numout,*)' usrdef_sbc_ice : SAS_BIPER case: NO flux forcing' 
     
    120122      ! ice fields deduced from above 
    121123      zsnw(:,:) = 1._wp 
    122       !!CALL lim_thd_snwblow( pfrld, zsnw )  ! snow distribution over ice after wind blowing  
     124      !!CALL lim_thd_snwblow( at_i_b, zsnw )  ! snow distribution over ice after wind blowing  
    123125      emp_ice  (:,:)   = SUM( a_i_b(:,:,:) * evap_ice(:,:,:), dim=3 ) - sprecip(:,:) * zsnw(:,:) 
    124126      emp_oce  (:,:)   = emp_oce(:,:) - sprecip(:,:) * (1._wp - zsnw(:,:) ) 
     
    130132      ! total fluxes 
    131133      emp_tot (:,:) = emp_ice  + emp_oce 
    132       qns_tot (:,:) = pfrld(:,:) * qns_oce(:,:) + SUM( a_i_b(:,:,:) * qns_ice(:,:,:), dim=3 ) + qemp_ice(:,:) + qemp_oce(:,:) 
    133       qsr_tot (:,:) = pfrld(:,:) * qsr_oce(:,:) + SUM( a_i_b(:,:,:) * qsr_ice(:,:,:), dim=3 ) 
     134      qns_tot (:,:) = at_i_b(:,:) * qns_oce(:,:) + SUM( a_i_b(:,:,:) * qns_ice(:,:,:), dim=3 ) + qemp_ice(:,:) + qemp_oce(:,:) 
     135      qsr_tot (:,:) = at_i_b(:,:) * qsr_oce(:,:) + SUM( a_i_b(:,:,:) * qsr_ice(:,:,:), dim=3 ) 
    134136 
    135       !-------------------------------------------------------------------- 
    136       ! FRACTIONs of net shortwave radiation which is not absorbed in the 
    137       ! thin surface layer and penetrates inside the ice cover 
    138       ! ( Maykut and Untersteiner, 1971 ; Ebert and Curry, 1993 ) 
    139       fr1_i0(:,:) = ( 0.18 * ( 1.0 - cldf_ice ) + 0.35 * cldf_ice ) 
    140       fr2_i0(:,:) = ( 0.82 * ( 1.0 - cldf_ice ) + 0.65 * cldf_ice ) 
    141  
    142       CALL wrk_dealloc( jpi,jpj, zsnw ) 
    143  
     137      ! --- shortwave radiation transmitted below the surface (W/m2, see Grenfell Maykut 77) --- ! 
     138      zfr1 = ( 0.18 * ( 1.0 - cldf_ice ) + 0.35 * cldf_ice )            ! transmission when hi>10cm 
     139      zfr2 = ( 0.82 * ( 1.0 - cldf_ice ) + 0.65 * cldf_ice )            ! zfr2 such that zfr1 + zfr2 to equal 1 
     140      ! 
     141      WHERE    ( phs(:,:,:) <= 0._wp .AND. phi(:,:,:) <  0.1_wp )       ! linear decrease from hi=0 to 10cm   
     142         qsr_ice_tr(:,:,:) = qsr_ice(:,:,:) * ( zfr1 + zfr2 * ( 1._wp - phi(:,:,:) * 10._wp ) ) 
     143      ELSEWHERE( phs(:,:,:) <= 0._wp .AND. phi(:,:,:) >= 0.1_wp )       ! constant (zfr1) when hi>10cm 
     144         qsr_ice_tr(:,:,:) = qsr_ice(:,:,:) * zfr1 
     145      ELSEWHERE                                                         ! zero when hs>0 
     146         qsr_ice_tr(:,:,:) = 0._wp  
     147      END WHERE 
     148           
    144149   END SUBROUTINE usrdef_sbc_ice_flx 
    145150 
Note: See TracChangeset for help on using the changeset viewer.