Changeset 9019 for branches/2017/dev_merge_2017/NEMOGCM/CONFIG/TEST_CASES/SAS_BIPER/MY_SRC/usrdef_sbc.F90
- Timestamp:
- 2017-12-13T15:58:53+01:00 (6 years ago)
- 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 18 18 USE sbc_ice ! Surface boundary condition: ice fields 19 19 USE phycst ! physical constants 20 USE ice, ONLY : pfrld, a_i_b21 USE limthd_dh ! for CALL lim_thd_snwblow20 USE ice, ONLY : at_i_b, a_i_b 21 USE icethd_dh ! for CALL ice_thd_snwblow 22 22 ! 23 23 USE in_out_manager ! I/O manager … … 25 25 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 26 26 USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 27 USE wrk_nemo28 27 29 28 IMPLICIT NONE … … 86 85 INTEGER, INTENT(in) :: kt ! ocean time step 87 86 !!--------------------------------------------------------------------- 88 IF( kt==nit000 .AND. lwp) WRITE(numout,*)' usrdef_sbc_ice : SAS_BIPER case: NOstress forcing'87 IF( kt==nit000 .AND. lwp) WRITE(numout,*)' usrdef_sbc_ice : SAS_BIPER case: constant stress forcing' 89 88 ! 90 utau_ice(:,:) = 0._wp89 utau_ice(:,:) = 1.3_wp ! <=> 0.5 m/s 91 90 vtau_ice(:,:) = 0._wp 92 91 ! 93 92 END SUBROUTINE usrdef_sbc_ice_tau 94 93 95 SUBROUTINE usrdef_sbc_ice_flx( kt )94 SUBROUTINE usrdef_sbc_ice_flx( kt, phs, phi ) 96 95 !!--------------------------------------------------------------------- 97 96 !! *** ROUTINE usrdef_sbc_ice_flx *** … … 99 98 !! ** Purpose : provide the surface boundary (flux) condition over sea-ice 100 99 !!--------------------------------------------------------------------- 101 REAL(wp), DIMENSION(:,:), POINTER :: zsnw ! snw distribution after wind blowing102 100 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 103 106 !!--------------------------------------------------------------------- 104 CALL wrk_alloc( jpi,jpj, zsnw )105 107 ! 106 108 IF( kt==nit000 .AND. lwp) WRITE(numout,*)' usrdef_sbc_ice : SAS_BIPER case: NO flux forcing' … … 120 122 ! ice fields deduced from above 121 123 zsnw(:,:) = 1._wp 122 !!CALL lim_thd_snwblow( pfrld, zsnw ) ! snow distribution over ice after wind blowing124 !!CALL lim_thd_snwblow( at_i_b, zsnw ) ! snow distribution over ice after wind blowing 123 125 emp_ice (:,:) = SUM( a_i_b(:,:,:) * evap_ice(:,:,:), dim=3 ) - sprecip(:,:) * zsnw(:,:) 124 126 emp_oce (:,:) = emp_oce(:,:) - sprecip(:,:) * (1._wp - zsnw(:,:) ) … … 130 132 ! total fluxes 131 133 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 ) 134 136 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 144 149 END SUBROUTINE usrdef_sbc_ice_flx 145 150
Note: See TracChangeset
for help on using the changeset viewer.