Changeset 15813
- Timestamp:
- 2023-04-05T13:59:14+02:00 (21 months ago)
- Location:
- NEMO/releases/r4.0/r4.0-HEAD/src
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/releases/r4.0/r4.0-HEAD/src/ICE/icethd.F90
r14885 r15813 183 183 ! If warming (zqld >= 0), then the energy in the leads is used to melt ice (bottom melting) => fhld (W/m2) 184 184 ! If cooling (zqld < 0), then the energy in the leads is used to grow ice in open water => qlead (J.m-2) 185 IF( zqld >= 0._wp .AND. at_i(ji,jj) > 0._wp ) THEN 186 ! upper bound for fhld: fhld should be equal to zqld 187 ! but we have to make sure that this heat will not make the sst drop below the freezing point 188 ! so the max heat that can be pulled out of the ocean is zqld - qsb - zqfr_pos 189 ! The following formulation is ok for both normal conditions and supercooling 190 fhld (ji,jj) = rswitch * MAX( 0._wp, ( zqld - zqfr_pos ) * r1_rdtice / MAX( at_i(ji,jj), epsi10 ) & ! divided by at_i since this is (re)multiplied by a_i in icethd_dh.F90 191 & - qsb_ice_bot(ji,jj) ) 192 qlead(ji,jj) = 0._wp 193 ELSE 185 IF( ( zqld - zqfr ) < 0._wp .OR. at_i(ji,jj) < epsi10 ) THEN 194 186 fhld (ji,jj) = 0._wp 195 187 ! upper bound for qlead: qlead should be equal to zqld 196 188 ! but before using this heat for ice formation, we suppose that the ocean cools down till the freezing point. 197 ! The energy for this cooling down is zqfr. Also some heat will be removed from the ocean from turbulent fluxes (qsb) 198 ! and freezing point is reached if zqfr = zqld - qsb*a/dt 199 ! so the max heat that can be pulled out of the ocean is zqld - qsb - zqfr 189 ! The energy for this cooling down is zqfr and freezing point is reached if zqfr = zqld 190 ! so the max heat that can be pulled out of the ocean is zqld - zqfr 191 ! The following formulation is ok for both normal conditions and supercooling 192 qlead(ji,jj) = MIN( 0._wp , zqld - zqfr ) 193 ELSE 194 ! upper bound for fhld: fhld should be equal to zqld 195 ! but we have to make sure that this heat will not make the sst drop below the freezing point 196 ! so the max heat that can be pulled out of the ocean is zqld - zqfr_pos 200 197 ! The following formulation is ok for both normal conditions and supercooling 201 qlead(ji,jj) = MIN( 0._wp , zqld - ( qsb_ice_bot(ji,jj) * at_i(ji,jj) * rdt_ice ) - zqfr ) 198 fhld (ji,jj) = rswitch * MAX( 0._wp, ( zqld - zqfr_pos ) * r1_rdtice / MAX( at_i(ji,jj), epsi10 ) ) ! divided by at_i since this is (re)multiplied by a_i in icethd_dh.F90 199 qlead(ji,jj) = 0._wp 202 200 ENDIF 203 201 ! -
NEMO/releases/r4.0/r4.0-HEAD/src/OCE/DYN/dynnxt.F90
r13284 r15813 356 356 ENDIF 357 357 ! 358 !!clem 359 !!CALL lbc_lnk_multi( 'dynnxt' , ub, 'U', -1., vn, 'V', -1.) 360 361 ! 358 362 IF ( iom_use("utau") ) THEN 359 363 IF ( ln_drgice_imp.OR.ln_isfcav ) THEN -
NEMO/releases/r4.0/r4.0-HEAD/src/OCE/SBC/sbcblk.F90
r15613 r15813 422 422 END DO 423 423 #endif 424 ! mask the wind in case it is not masked in the input file otherwise we end up with twice the stress at the coast 425 ! (see calculation of utau/vtau below) 424 426 DO jj = 2, jpjm1 425 427 DO ji = fs_2, fs_jpim1 ! vect. opt. 426 zwnd_i(ji,jj) = ( sf(jp_wndi)%fnow(ji,jj,1) - rn_vfac * 0.5 * ( pu(ji-1,jj ) + pu(ji,jj) ) ) 427 zwnd_j(ji,jj) = ( sf(jp_wndj)%fnow(ji,jj,1) - rn_vfac * 0.5 * ( pv(ji ,jj-1) + pv(ji,jj) ) ) 428 zwnd_i(ji,jj) = ( sf(jp_wndi)%fnow(ji,jj,1) - rn_vfac * 0.5 * ( pu(ji-1,jj ) + pu(ji,jj) ) ) * tmask(ji,jj,1) 429 zwnd_j(ji,jj) = ( sf(jp_wndj)%fnow(ji,jj,1) - rn_vfac * 0.5 * ( pv(ji ,jj-1) + pv(ji,jj) ) ) * tmask(ji,jj,1) 428 430 END DO 429 431 END DO … … 431 433 ! ... scalar wind ( = | U10m - U_oce | ) at T-point (masked) 432 434 wndm(:,:) = SQRT( zwnd_i(:,:) * zwnd_i(:,:) & 433 & + zwnd_j(:,:) * zwnd_j(:,:) ) * tmask(:,:,1)435 & + zwnd_j(:,:) * zwnd_j(:,:) ) 434 436 435 437 ! ----------------------------------------------------------------------------- ! -
NEMO/releases/r4.0/r4.0-HEAD/src/OCE/SBC/sbcflx.F90
r15681 r15813 35 35 INTEGER , PARAMETER :: jp_qsr = 4 ! index of solar heat file 36 36 INTEGER , PARAMETER :: jp_emp = 5 ! index of evaporation-precipation file 37 !!INTEGER , PARAMETER :: jp_sfx = 6 ! index of salt flux flux 38 INTEGER , PARAMETER :: jpfld = 5 !! 6 ! maximum number of files to read 37 !!$ INTEGER , PARAMETER :: jp_sfx = 6 ! index of salt flux 38 !!$ INTEGER , PARAMETER :: jp_sithic = 7 ! index of sea ice thickness 39 !!$ INTEGER , PARAMETER :: jp_siconc = 8 ! index of sea ice fraction 40 !!$ INTEGER , PARAMETER :: jp_hfrnf = 9 ! index of rnf heat flux 41 !!$ INTEGER , PARAMETER :: jp_hfisf = 10 ! index of iceshelf heat flux 42 !!$ INTEGER , PARAMETER :: jp_fwisf = 11 ! index of iceshelf freshwater flux 43 !!$ INTEGER , PARAMETER :: jp_fwrnf = 12 ! index of runoff freshwater flux 44 INTEGER , PARAMETER :: jpfld = 5 ! maximum number of files to read 39 45 40 46 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf ! structure of input fields (file informations, fields read) … … 74 80 !! - qsr solar heat flux 75 81 !! - emp upward mass flux (evap. - precip.) 76 !! - sfx salt flux; set to zero at nit000 but possibly non-zero 77 !! if ice 82 !! - sfx salt flux; set to zero at nit000 but possibly non-zero if ice 78 83 !!---------------------------------------------------------------------- 79 84 INTEGER, INTENT(in) :: kt ! ocean time step … … 89 94 CHARACTER(len=100) :: cn_dir ! Root directory for location of flx files 90 95 TYPE(FLD_N), DIMENSION(jpfld) :: slf_i ! array of namelist information structures 91 TYPE(FLD_N) :: sn_utau, sn_vtau, sn_qtot, sn_qsr, sn_emp !!, sn_sfx ! informations about the fields to be read 92 NAMELIST/namsbc_flx/ cn_dir, sn_utau, sn_vtau, sn_qtot, sn_qsr, sn_emp !!, sn_sfx 96 TYPE(FLD_N) :: sn_utau, sn_vtau, sn_qtot, sn_qsr, sn_emp !!, & ! informations about the fields to be read 97 !!$ & sn_sfx, sn_sithic, sn_siconc, sn_hfisf, sn_hfrnf, sn_fwisf, sn_fwrnf 98 NAMELIST/namsbc_flx/ cn_dir, sn_utau, sn_vtau, sn_qtot, sn_qsr, sn_emp !!, & 99 !!$ & sn_sfx, sn_sithic, sn_siconc, sn_hfisf, sn_hfrnf, sn_fwisf, sn_fwrnf 93 100 !!--------------------------------------------------------------------- 94 101 ! … … 111 118 slf_i(jp_utau) = sn_utau ; slf_i(jp_vtau) = sn_vtau 112 119 slf_i(jp_qtot) = sn_qtot ; slf_i(jp_qsr ) = sn_qsr 113 slf_i(jp_emp ) = sn_emp !! ; slf_i(jp_sfx ) = sn_sfx 120 slf_i(jp_emp ) = sn_emp 121 !!$ slf_i(jp_sfx ) = sn_sfx 122 !!$ slf_i(jp_sithic) = sn_sithic 123 !!$ slf_i(jp_siconc) = sn_siconc 124 !!$ slf_i(jp_hfisf) = sn_hfisf ; slf_i(jp_hfrnf) = sn_hfrnf 125 !!$ slf_i(jp_fwisf) = sn_fwisf ; slf_i(jp_fwrnf) = sn_fwrnf 114 126 ! 115 127 ALLOCATE( sf(jpfld), STAT=ierror ) ! set sf structure … … 146 158 qns (ji,jj) = ( sf(jp_qtot)%fnow(ji,jj,1) - sf(jp_qsr)%fnow(ji,jj,1) ) * tmask(ji,jj,1) 147 159 emp (ji,jj) = sf(jp_emp )%fnow(ji,jj,1) * tmask(ji,jj,1) 148 !!sfx (ji,jj) = sf(jp_sfx )%fnow(ji,jj,1) * tmask(ji,jj,1) 160 !!$ sfx (ji,jj) = sf(jp_sfx )%fnow(ji,jj,1) * tmask(ji,jj,1) 161 !!$ !! => if the following is used, then one needs to change tke routine + allocate hm_i in sbc_oce 162 !!$ hm_i(ji,jj) = sf(jp_sithic)%fnow(ji,jj,1) * tmask(ji,jj,1) 163 !!$ fr_i(ji,jj) = sf(jp_siconc)%fnow(ji,jj,1) * tmask(ji,jj,1) 164 !!$ !! => if the following is used, then one needs to change rnf and isf routines + allocate the arrays 165 !!$ hfisf(ji,jj) = sf(jp_hfisf)%fnow(ji,jj,1) * ssmask(ji,jj) 166 !!$ fwisf(ji,jj) = sf(jp_fwisf)%fnow(ji,jj,1) * ssmask(ji,jj) 167 !!$ hfrnf(ji,jj) = sf(jp_hfrnf)%fnow(ji,jj,1) * tmask(ji,jj,1) 168 !!$ fwrnf(ji,jj) = sf(jp_fwrnf)%fnow(ji,jj,1) * tmask(ji,jj,1) 149 169 END DO 150 170 END DO 151 ! ! add to qns the heat due to e-p152 !clem: I do not think it is needed153 !!qns(:,:) = qns(:,:) - emp(:,:) * sst_m(:,:) * rcp ! mass flux is at SST154 171 ! 155 172 ! clem: without these lbc calls, it seems that the northfold is not ok (true in 3.6, not sure in 4.x) 156 173 CALL lbc_lnk_multi( 'sbcflx', utau, 'U', -1._wp, vtau, 'V', -1._wp, & 157 & qns, 'T', 1._wp, emp , 'T', 1._wp, qsr, 'T', 1._wp ) !! sfx, 'T', 1._wp ) 174 & qns, 'T', 1._wp, emp , 'T', 1._wp, qsr, 'T', 1._wp ) !! & 175 !!$ & sfx, 'T', 1._wp, hm_i,'T', 1._wp, fr_i,'T', 1._wp, & 176 !!$ & hfisf, 'T', 1._wp, fwisf, 'T', 1._wp, hfrnf, 'T', 1._wp, fwrnf, 'T', 1._wp ) 158 177 ! 159 178 IF( nitend-nit000 <= 100 .AND. lwp ) THEN ! control print (if less than 100 time-step asked)
Note: See TracChangeset
for help on using the changeset viewer.