- Timestamp:
- 2009-10-30T17:42:38+01:00 (15 years ago)
- Location:
- trunk/NEMO
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/LIM_SRC_2/limsbc_2.F90
r1694 r1695 90 90 REAL(wp), DIMENSION(jpi,jpj,1) :: zalb ! albedo of ice under overcast sky 91 91 REAL(wp), DIMENSION(jpi,jpj,1) :: zalbp ! albedo of ice under clear sky 92 REAL(wp) :: zsang, zmod, zfm 93 REAL(wp), DIMENSION(jpi,jpj) :: ztio_u, ztio_v ! ocean stress below sea-ice 92 REAL(wp) :: zsang, zmod, zztmp, zfm 93 REAL(wp), DIMENSION(jpi,jpj) :: ztio_u, ztio_v ! component of ocean stress below sea-ice at I-point 94 REAL(wp), DIMENSION(jpi,jpj) :: ztiomi ! module of ocean stress below sea-ice at I-point 94 95 REAL(wp), DIMENSION(jpi,jpj) :: zqnsoce ! save qns before its modification by ice model 95 96 … … 249 250 zu_io = u_ice(ji,jj) - u_oce(ji,jj) 250 251 zv_io = v_ice(ji,jj) - v_oce(ji,jj) 251 zmod = rhoco * SQRT( zu_io * zu_io + zv_io * zv_io ) 252 ! ... ice stress over ocean with a ice-ocean rotation angle (at I-point) 253 ztio_u(ji,jj) = zmod * ( cangvg * zu_io - zsang * zv_io ) 254 ztio_v(ji,jj) = zmod * ( cangvg * zv_io + zsang * zu_io ) 252 zmod = SQRT( zu_io * zu_io + zv_io * zv_io ) 253 zztmp = rhoco * zmod 254 ! ... components of ice stress over ocean with a ice-ocean rotation angle (at I-point) 255 ztio_u(ji,jj) = zztmp * ( cangvg * zu_io - zsang * zv_io ) 256 ztio_v(ji,jj) = zztmp * ( cangvg * zv_io + zsang * zu_io ) 257 ! ... module of ice stress over ocean (at I-point) 258 ztiomi(ji,jj) = zztmp * zmod 255 259 ! 256 260 END DO … … 259 263 DO jj = 2, jpjm1 260 264 DO ji = 2, jpim1 ! NO vector opt. 261 ! ... ice-cover wheightedice-ocean stress at U and V-points (from I-point values)265 ! ... components of ice-ocean stress at U and V-points (from I-point values) 262 266 zutau = 0.5 * ( ztio_u(ji+1,jj) + ztio_u(ji+1,jj+1) ) 263 267 zvtau = 0.5 * ( ztio_v(ji,jj+1) + ztio_v(ji+1,jj+1) ) 264 268 ! ... open-ocean (lead) fraction at U- & V-points (from T-point values) 265 zfrldu = 0.5 * ( frld (ji,jj) + frld(ji+1,jj ) )266 zfrldv = 0.5 * ( frld (ji,jj) + frld(ji ,jj+1) )267 ! update surface ocean stress269 zfrldu = 0.5 * ( frld(ji,jj) + frld(ji+1,jj ) ) 270 zfrldv = 0.5 * ( frld(ji,jj) + frld(ji ,jj+1) ) 271 ! ... update components of surface ocean stress (ice-cover wheighted) 268 272 utau(ji,jj) = zfrldu * utau(ji,jj) + ( 1. - zfrldu ) * zutau 269 273 vtau(ji,jj) = zfrldv * vtau(ji,jj) + ( 1. - zfrldv ) * zvtau 274 ! ... module of ice-ocean stress at T-points (from I-point values) 275 zztmp = 0.25 * ( ztiomi(ji,jj) + ztiomi(ji+1,jj) + ztiomi(ji,jj+1) + ztiomi(ji+1,jj+1) ) 276 ! ... update module of surface ocean stress (ice-cover wheighted) 277 taum(ji,jj) = frld(ji,jj) * taum(ji,jj) + ( 1. - frld(ji,jj) ) * zztmp 270 278 ! 271 279 END DO 272 280 END DO 273 281 274 ! boundary condition on the stress (utau,vtau )282 ! boundary condition on the stress (utau,vtau,taum) 275 283 CALL lbc_lnk( utau, 'U', -1. ) 276 284 CALL lbc_lnk( vtau, 'V', -1. ) 285 CALL lbc_lnk( taum, 'T', 1. ) 277 286 278 287 ENDIF -
trunk/NEMO/LIM_SRC_3/limsbc.F90
r1684 r1695 80 80 REAL(wp) :: zfrldu, zat_u, zu_ico, zutaui, zu_u, zu_ij, zu_im1j ! temporary scalar 81 81 REAL(wp) :: zfrldv, zat_v, zv_ico, zvtaui, zv_v, zv_ij, zv_ijm1 ! - - 82 REAL(wp) :: zsang 82 REAL(wp) :: zsang, zztmp ! - - 83 83 REAL(wp), DIMENSION(jpi,jpj) :: ztio_u, ztio_v ! ocean stress below sea-ice 84 84 #if defined key_coupled … … 94 94 ENDIF 95 95 96 SELECT CASE( kcpl ) 97 ! !--------------------------------! 98 CASE( 0 ) ! LIM 3 old stress computation ! (at ice timestep only) 99 ! !--------------------------------! 100 DO jj = 2, jpjm1 !* modulus of the ice-ocean velocity 96 IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN 97 !CDIR NOVERRCHK 98 DO jj = 2, jpjm1 !* modulus of the ice-ocean velocity 99 !CDIR NOVERRCHK 101 100 DO ji = fs_2, fs_jpim1 102 101 zu_ij = u_ice(ji ,jj) - ssu_m(ji ,jj) ! (i ,j) … … 104 103 zv_ij = v_ice(ji,jj ) - ssv_m(ji,jj ) ! (i,j ) 105 104 zv_ijm1 = v_ice(ji,jj-1) - ssv_m(ji,jj-1) ! (i,j-1) 106 tmod_io(ji,jj) = SQRT( 0.5 * ( zu_ij * zu_ij + zu_im1j * zu_im1j & 107 & + zv_ij * zv_ij + zv_ijm1 * zv_ijm1 ) ) 105 zztmp = 0.5 * ( zu_ij * zu_ij + zu_im1j * zu_im1j & ! mean of the square values instead 106 & + zv_ij * zv_ij + zv_ijm1 * zv_ijm1 ) ! of the square of the mean values... 107 ! WARNING, here we make an approximation for case 1 and 2: taum is not computed at each time 108 ! step but only every nn_fsbc time step. This avoid mutiple avarage to pass from T -> U,V grids 109 ! and next from U,V grids to T grid. Taum is used in tke, which should not be too sensitive to 110 ! this approximaton... 111 taum(ji,jj) = ( 1. - at_i(ji,jj) ) * taum(ji,jj) + at_i(ji,jj) * rhoco * zztmp 112 tmod_io(ji,jj) = SQRT( zztmp ) 108 113 END DO 109 114 END DO 110 CALL lbc_lnk( tmod_io, 'T', 1. ) ! lateral boundary condition 111 ! 115 CALL lbc_lnk( taum, 'T', 1. ) ; CALL lbc_lnk( tmod_io, 'T', 1. ) 116 ENDIF 117 118 SELECT CASE( kcpl ) 119 ! !--------------------------------! 120 CASE( 0 ) ! LIM 3 old stress computation ! (at ice timestep only) 121 ! !--------------------------------! 112 122 ! !* ice stress over ocean with a ice-ocean rotation angle 113 123 DO jj = 1, jpjm1 … … 145 155 utau_oce(:,:) = utau(:,:) !* save the air-ocean stresses at ice time-step 146 156 vtau_oce(:,:) = vtau(:,:) 147 DO jj = 2, jpjm1 !* modulus of the ice-ocean velocity148 DO ji = fs_2, fs_jpim1149 zu_ij = u_ice(ji ,jj) - ssu_m(ji ,jj) ! (i ,j)150 zu_im1j = u_ice(ji-1,jj) - ssu_m(ji-1,jj) ! (i-1,j)151 zv_ij = v_ice(ji,jj ) - ssv_m(ji,jj ) ! (i,j )152 zv_ijm1 = v_ice(ji,jj-1) - ssv_m(ji,jj-1) ! (i,j-1)153 tmod_io(ji,jj) = SQRT( 0.5 * ( zu_ij * zu_ij + zu_im1j * zu_im1j &154 & + zv_ij * zv_ij + zv_ijm1 * zv_ijm1 ) )155 END DO156 END DO157 CALL lbc_lnk( tmod_io, 'T', 1. ) ! lateral boundary condition158 157 ENDIF 159 158 ! … … 186 185 ssu_mb (:,:) = ssu_m(:,:) !* save the ice-ocean velocity at ice time-step 187 186 ssv_mb (:,:) = ssv_m(:,:) 188 DO jj = 2, jpjm1 !* modulus of the ice-ocean velocity189 DO ji = fs_2, fs_jpim1190 zu_ij = u_ice(ji ,jj) - ssu_m(ji ,jj) ! (i ,j)191 zu_im1j = u_ice(ji-1,jj) - ssu_m(ji-1,jj) ! (i-1,j)192 zv_ij = v_ice(ji,jj ) - ssv_m(ji,jj ) ! (i,j )193 zv_ijm1 = v_ice(ji,jj-1) - ssv_m(ji,jj-1) ! (i,j-1)194 tmod_io(ji,jj) = SQRT( 0.5 * ( zu_ij * zu_ij + zu_im1j * zu_im1j &195 & + zv_ij * zv_ij + zv_ijm1 * zv_ijm1 ) )196 END DO197 END DO198 CALL lbc_lnk( tmod_io, 'T', 1. )199 187 ENDIF 200 188 DO jj = 2, jpjm1 !* ice stress over ocean with a ice-ocean rotation angle -
trunk/NEMO/OPA_SRC/SBC/sbc_oce.F90
r1534 r1695 11 11 IMPLICIT NONE 12 12 PRIVATE 13 14 PUBLIC sbc_tau2wnd ! compute wind speed based on the wind stress15 13 16 14 !!---------------------------------------------------------------------- … … 41 39 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: utau !: sea surface i-stress (ocean referential) [N/m2] 42 40 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: vtau !: sea surface j-stress (ocean referential) [N/m2] 43 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: wndm !: wind speed module at T-point (=|U10m-Uoce|) [m/s] 41 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: taum !: module of sea surface stress (at T-point) [N/m2] 42 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: wndm !: wind speed module at T-point (=|U10m-Uoce|) [m/s] Used only in PISCES 44 43 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: qsr !: sea heat flux: solar [W/m2] 45 44 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: qns !: sea heat flux: non solar [W/m2] … … 73 72 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 74 73 !!====================================================================== 75 CONTAINS76 77 SUBROUTINE sbc_tau2wnd78 !!---------------------------------------------------------------------79 !! *** ROUTINE sbc_tau2wnd ***80 !!81 !! ** Purpose : Estimation of wind speed as a function of wind stress82 !!83 !! ** Method : |tau|=rhoa*Cd*|U|^284 !!---------------------------------------------------------------------85 USE dom_oce ! ocean space and time domain86 USE lbclnk ! ocean lateral boundary conditions (or mpp link)87 REAL(wp) :: zrhoa = 1.22 ! Air density kg/m388 REAL(wp) :: zcdrag = 1.5e-3 ! drag coefficient89 REAL(wp) :: ztx, zty, ztau, zcoef ! temporary variables90 INTEGER :: ji, jj ! dummy indices91 !! * Substitutions92 # include "vectopt_loop_substitute.h90"93 !!---------------------------------------------------------------------94 zcoef = 0.5 / ( zrhoa * zcdrag )95 !CDIR NOVERRCHK96 DO jj = 2, jpjm197 !CDIR NOVERRCHK98 DO ji = fs_2, fs_jpim1 ! vect. opt.99 ztx = utau(ji-1,jj ) + utau(ji,jj)100 zty = vtau(ji ,jj-1) + vtau(ji,jj)101 ztau = SQRT( ztx * ztx + zty * zty )102 wndm(ji,jj) = SQRT ( ztau * zcoef ) * tmask(ji,jj,1)103 END DO104 END DO105 CALL lbc_lnk( wndm(:,:) , 'T', 1. )106 107 END SUBROUTINE sbc_tau2wnd108 74 109 75 END MODULE sbc_oce -
trunk/NEMO/OPA_SRC/SBC/sbcana.F90
r1559 r1695 61 61 !! 62 62 !! ** Action : - set the ocean surface boundary condition, i.e. 63 !! utau, vtau, qns, qsr, emp, emps63 !! utau, vtau, taum, wndm, qns, qsr, emp, emps 64 64 !!---------------------------------------------------------------------- 65 65 INTEGER, INTENT(in) :: kt ! ocean time step 66 66 !! 67 REAL(wp) :: zfacto ! local scalar 67 REAL(wp) :: zfacto ! local scalar 68 REAL(wp) :: zrhoa = 1.22 ! Air density kg/m3 69 REAL(wp) :: zcdrag = 1.5e-3 ! drag coefficient 70 REAL(wp) :: ztx, zty, zmod, zcoef ! temporary variables 68 71 !! 69 72 NAMELIST/namsbc_ana/ nn_tau000, rn_utau0, rn_vtau0, rn_qns0, rn_qsr0, rn_emp0 … … 96 99 IF( kt <= nn_tau000 ) THEN 97 100 zfacto = 0.5 * ( 1. - COS( rpi * FLOAT( kt ) / FLOAT( nn_tau000 ) ) ) 98 utau(:,:) = zfacto * rn_utau0 99 vtau(:,:) = zfacto * rn_vtau0 101 zcoef = 1. / ( zrhoa * zcdrag ) 102 ztx = zfacto * rn_utau0 103 zty = zfacto * rn_vtau0 104 zmod = SQRT( ztx * ztx + zty * zty ) 105 utau(:,:) = ztx 106 vtau(:,:) = zty 107 taum(:,:) = zmod 108 zmod = SQRT( zmod * zcoef ) 109 wndm(:,:) = zmod 100 110 ENDIF 101 102 CALL sbc_tau2wnd ! Estimation of wind speed as a function of wind stress ( |tau|=rhoa*Cd*|U|^2 )103 111 ! 104 112 END SUBROUTINE sbc_ana … … 116 124 !! 117 125 !! ** Action : - set the ocean surface boundary condition, i.e. 118 !! utau, vtau, qns, qsr, emp, emps126 !! utau, vtau, taum, wndm, qns, qsr, emp, emps 119 127 !! 120 128 !! Reference : Hazeleger, W., and S. Drijfhout, JPO, 30, 677-695, 2000. … … 136 144 REAL(wp) :: zcos_sais1, zcos_sais2, ztrp, zconv, t_star 137 145 REAL(wp) :: zsumemp, zsurf 146 REAL(wp) :: zrhoa = 1.22 ! Air density kg/m3 147 REAL(wp) :: zcdrag = 1.5e-3 ! drag coefficient 148 REAL(wp) :: ztx, zty, zmod, zcoef ! temporary variables 138 149 !!--------------------------------------------------------------------- 139 150 … … 252 263 END DO 253 264 254 ! Estimation of wind speed as a function of wind stress ( |tau|=rhoa*Cd*|U|^2 ) 255 CALL sbc_tau2wnd 265 ! module of wind stress and wind speed at T-point 266 zcoef = 1. / ( zrhoa * zcdrag ) 267 !CDIR NOVERRCHK 268 DO jj = 2, jpjm1 269 !CDIR NOVERRCHK 270 DO ji = fs_2, fs_jpim1 ! vect. opt. 271 ztx = utau(ji-1,jj ) + utau(ji,jj) 272 zty = vtau(ji ,jj-1) + vtau(ji,jj) 273 zmod = 0.5 * SQRT( ztx * ztx + zty * zty ) 274 taum(ji,jj) = zmod 275 wndm(ji,jj) = SQRT( zmod * zcoef ) 276 END DO 277 END DO 278 CALL lbc_lnk( taum(:,:), 'T', 1. ) ; CALL lbc_lnk( wndm(:,:), 'T', 1. ) 256 279 257 280 ! ---------------------------------- ! -
trunk/NEMO/OPA_SRC/SBC/sbcblk_clio.F90
r1482 r1695 48 48 INTEGER , PARAMETER :: jp_vtau = 2 ! index of wind stress (j-component) (N/m2) at V-point 49 49 INTEGER , PARAMETER :: jp_wndm = 3 ! index of 10m wind module (m/s) at T-point 50 INTEGER , PARAMETER :: jp_humi = 4 ! index of specific humidity ( %)51 INTEGER , PARAMETER :: jp_ccov = 5 ! index of cloud cover ( %)50 INTEGER , PARAMETER :: jp_humi = 4 ! index of specific humidity ( - ) 51 INTEGER , PARAMETER :: jp_ccov = 5 ! index of cloud cover ( - ) 52 52 INTEGER , PARAMETER :: jp_tair = 6 ! index of 10m air temperature (Kelvin) 53 53 INTEGER , PARAMETER :: jp_prec = 7 ! index of total precipitation (rain+snow) (Kg/m2/s) … … 97 97 !! (momentum, heat, freshwater and runoff) 98 98 !! 99 !! ** Method : READ each fluxes in NetCDF files 100 !! The i-component of the stress utau (N/m2) 101 !! The j-component of the stress vtau (N/m2) 102 !! the net downward heat flux qtot (watt/m2) 103 !! the net downward radiative flux qsr (watt/m2) 104 !! the net upward water (evapo - precip) emp (kg/m2/s) 105 !! Assumptions made: 106 !! - each file content an entire year (read record, not the time axis) 107 !! - first and last record are part of the previous and next year 108 !! (useful for time interpolation) 109 !! - the number of records is 2 + 365*24 / freqh(jf) 110 !! or 366 in leap year case 99 !! ** Method : (1) READ each fluxes in NetCDF files: 100 !! the i-component of the stress (N/m2) 101 !! the j-component of the stress (N/m2) 102 !! the 10m wind pseed module (m/s) 103 !! the 10m air temperature (Kelvin) 104 !! the 10m specific humidity (-) 105 !! the cloud cover (-) 106 !! the total precipitation (rain+snow) (Kg/m2/s) 107 !! (2) CALL blk_oce_clio 111 108 !! 112 109 !! C A U T I O N : never mask the surface stress fields … … 115 112 !! 116 113 !! ** Action : defined at each time-step at the air-sea interface 117 !! - utau & vtau : stress components in geographical ref. 118 !! - qns & qsr : non solar and solar heat fluxes 119 !! - emp : evap - precip (volume flux) 120 !! - emps : evap - precip (concentration/dillution) 114 !! - utau, vtau i- and j-component of the wind stress 115 !! - taum wind stress module at T-point 116 !! - wndm 10m wind module at T-point 117 !! - qns, qsr non-slor and solar heat flux 118 !! - emp, emps evaporation minus precipitation 121 119 !!---------------------------------------------------------------------- 122 120 INTEGER, INTENT( in ) :: kt ! ocean time step … … 241 239 !! ** Action : Fluxes over the ocean: 242 240 !! - utau, vtau i- and j-component of the wind stress 241 !! - taum wind stress module at T-point 242 !! - wndm 10m wind module at T-point 243 243 !! - qns, qsr non-slor and solar heat flux 244 244 !! - emp, emps evaporation minus precipitation … … 259 259 REAL(wp) :: zsst, ztatm, zcco1, zpatm, zcmax, zrmax ! - - 260 260 REAL(wp) :: zrhoa, zev, zes, zeso, zqatm, zevsqr ! - - 261 REAL(wp) :: ztx2, zty2 ! - - 261 262 !! 262 263 REAL(wp), DIMENSION(jpi,jpj) :: zqlw ! long-wave heat flux over ocean … … 277 278 END DO 278 279 END DO 280 281 !------------------------------------! 282 ! wind stress module (taum ) ! 283 !------------------------------------! 284 !CDIR NOVERRCHK 285 DO jj = 2, jpjm1 286 !CDIR NOVERRCHK 287 DO ji = fs_2, fs_jpim1 ! vector opt. 288 ztx2 = utau(ji-1,jj ) + utau(ji,jj) 289 zty2 = vtau(ji ,jj-1) + vtau(ji,jj) 290 taum(ji,jj) = 0.5 * SQRT( ztx2 * ztx2 + zty2 * zty2 ) 291 END DO 292 END DO 293 CALL lbc_lnk( taum, 'T', 1. ) 279 294 280 295 !------------------------------------! -
trunk/NEMO/OPA_SRC/SBC/sbcblk_core.F90
r1601 r1695 46 46 INTEGER , PARAMETER :: jp_wndi = 1 ! index of 10m wind velocity (i-component) (m/s) at T-point 47 47 INTEGER , PARAMETER :: jp_wndj = 2 ! index of 10m wind velocity (j-component) (m/s) at T-point 48 INTEGER , PARAMETER :: jp_humi = 3 ! index of specific humidity ( %)48 INTEGER , PARAMETER :: jp_humi = 3 ! index of specific humidity ( - ) 49 49 INTEGER , PARAMETER :: jp_qsr = 4 ! index of solar heat (W/m2) 50 50 INTEGER , PARAMETER :: jp_qlw = 5 ! index of Long wave (W/m2) … … 84 84 !! (momentum, heat, freshwater and runoff) 85 85 !! 86 !! ** Method : READ each fluxes in NetCDF files 87 !! The i-component of the stress utau (N/m2) 88 !! The j-component of the stress vtau (N/m2) 89 !! the net downward heat flux qtot (watt/m2) 90 !! the net downward radiative flux qsr (watt/m2) 91 !! the net upward water (evapo - precip) emp (kg/m2/s) 92 !! Assumptions made: 93 !! - each file content an entire year (read record, not the time axis) 94 !! - first and last record are part of the previous and next year 95 !! (useful for time interpolation) 96 !! - the number of records is 2 + 365*24 / freqh(jf) 97 !! or 366 in leap year case 86 !! ** Method : (1) READ each fluxes in NetCDF files: 87 !! the 10m wind velocity (i-component) (m/s) at T-point 88 !! the 10m wind velocity (j-component) (m/s) at T-point 89 !! the specific humidity ( - ) 90 !! the solar heat (W/m2) 91 !! the Long wave (W/m2) 92 !! the 10m air temperature (Kelvin) 93 !! the total precipitation (rain+snow) (Kg/m2/s) 94 !! the snow (solid prcipitation) (kg/m2/s) 95 !! (2) CALL blk_oce_core 98 96 !! 99 97 !! C A U T I O N : never mask the surface stress fields … … 102 100 !! 103 101 !! ** Action : defined at each time-step at the air-sea interface 104 !! - utau & vtau : stress components in geographical ref. 105 !! - qns & qsr : non solar and solar heat fluxes 106 !! - emp : evap - precip (volume flux) 107 !! - emps : evap - precip (concentration/dillution) 102 !! - utau, vtau i- and j-component of the wind stress 103 !! - taum wind stress module at T-point 104 !! - wndm 10m wind module at T-point 105 !! - qns, qsr non-slor and solar heat flux 106 !! - emp, emps evaporation minus precipitation 108 107 !!---------------------------------------------------------------------- 109 108 INTEGER, INTENT( in ) :: kt ! ocean time step … … 187 186 !! ** Outputs : - utau : i-component of the stress at U-point (N/m2) 188 187 !! - vtau : j-component of the stress at V-point (N/m2) 188 !! - taum : Wind stress module at T-point (N/m2) 189 !! - wndm : Wind speed module at T-point (m/s) 189 190 !! - qsr : Solar heat flux over the ocean (W/m2) 190 191 !! - qns : Non Solar heat flux over the ocean (W/m2) … … 201 202 INTEGER :: ji, jj ! dummy loop indices 202 203 REAL(wp) :: zcoef_qsatw 204 REAL(wp) :: zztmp ! temporary variable 203 205 REAL(wp), DIMENSION(jpi,jpj) :: zwnd_i, zwnd_j ! wind speed components at T-point 204 206 REAL(wp), DIMENSION(jpi,jpj) :: zqsatw ! specific humidity at pst … … 280 282 ENDIF 281 283 284 ! ... tau module, i and j component 285 DO jj = 1, jpj 286 DO ji = 1, jpi 287 zztmp = rhoa * wndm(ji,jj) * Cd(ji,jj) 288 taum (ji,jj) = zztmp * wndm (ji,jj) 289 zwnd_i(ji,jj) = zztmp * zwnd_i(ji,jj) 290 zwnd_j(ji,jj) = zztmp * zwnd_j(ji,jj) 291 END DO 292 END DO 282 293 ! ... utau, vtau at U- and V_points, resp. 283 294 ! Note the use of 0.5*(2-umask) in order to unmask the stress along coastlines 284 zwnd_i(:,:) = rhoa * wndm(:,:) * Cd(:,:) * zwnd_i(:,:)285 zwnd_j(:,:) = rhoa * wndm(:,:) * Cd(:,:) * zwnd_j(:,:)286 295 DO jj = 1, jpjm1 287 296 DO ji = 1, fs_jpim1 -
trunk/NEMO/OPA_SRC/SBC/sbccpl.F90
r1694 r1695 545 545 !! 546 546 !! ** Action : update utau, vtau ocean stress at U,V grid 547 !! taum, wndm wind stres and wind speed module at T-point 547 548 !! qns , qsr non solar and solar ocean heat fluxes ('ocean only case) 548 549 !! emp = emps evap. - precip. (- runoffs) (- calving) ('ocean only case) … … 557 558 REAL(wp) :: zcumulneg, zcumulpos ! temporary scalars 558 559 REAL(wp) :: zcoef ! temporary scalar 560 REAL(wp) :: zrhoa = 1.22 ! Air density kg/m3 561 REAL(wp) :: zcdrag = 1.5e-3 ! drag coefficient 562 REAL(wp) :: zzx, zzy ! temporary variables 559 563 REAL(wp), DIMENSION(jpi,jpj) :: ztx, zty ! 2D workspace 560 564 !!---------------------------------------------------------------------- … … 625 629 ! u(v)tau will be modified by ice model -> need to be reset before each call of the ice/fsbc 626 630 IF( MOD( kt-1, k_fsbc ) == 0 ) THEN 631 ! 627 632 utau(:,:) = frcv(:,:,jpr_otx1) 628 633 vtau(:,:) = frcv(:,:,jpr_oty1) 629 IF( .NOT. srcv(jpr_w10m)%laction ) CALL sbc_tau2wnd 634 ! 635 ! wind stress module at T-point 636 !CDIR NOVERRCHK 637 DO jj = 2, jpjm1 638 !CDIR NOVERRCHK 639 DO ji = fs_2, fs_jpim1 ! vect. opt. 640 zzx = utau(ji-1,jj ) + utau(ji,jj) 641 zzy = vtau(ji ,jj-1) + vtau(ji,jj) 642 taum(ji,jj) = 0.5 * SQRT( zzx * zzx + zzy * zzy ) 643 END DO 644 END DO 645 CALL lbc_lnk( taum(:,:), 'T', 1. ) 646 ! 647 ! wind speed module at T-point 648 IF( .NOT. srcv(jpr_w10m)%laction ) THEN 649 zcoef = 1. / ( zrhoa * zcdrag ) 650 !CDIR NOVERRCHK 651 DO jj = 1, jpj 652 !CDIR NOVERRCHK 653 DO ji = 1, jpi 654 wndm(ji,jj) = SQRT( taum(ji,jj) * zcoef ) 655 END DO 656 END DO 657 ENDIF 658 ! 630 659 ENDIF 631 660 ! ! ========================= ! … … 678 707 ! ! 10 m wind speed 679 708 IF( srcv(jpr_w10m)%laction ) wndm(:,:) = frcv(:,:,jpr_w10m) 680 ! it not, we call sbc_tau2wnd in sbc_cpl_rcv (or later, after the ice???)681 709 ! 682 710 #if defined key_cpl_carbon_cycle -
trunk/NEMO/OPA_SRC/SBC/sbcflx.F90
r1275 r1695 73 73 !! net downward radiative flux qsr (watt/m2) 74 74 !! net upward freshwater (evapo - precip) emp (kg/m2/s) 75 !! Assumptions made:76 !! - each file content an entire year (read record, not the time axis)77 !! - first and last record are part of the previous and next year78 !! (useful for time interpolation)79 !! - the number of records is 2 + 365*24 / freqh(jf)80 !! or 366 in leap year case81 75 !! 82 76 !! CAUTION : - never mask the surface stress fields … … 85 79 !! 86 80 !! ** Action : update at each time-step 87 !! - utau & vtau : stress components in (i,j) referential88 !! - qns : non solar heat flux89 !! - qsr : solar heat flux90 !! - emp : evap - precip (volume flux)91 !! - emp s : evap - precip (concentration/dillution)81 !! - utau, vtau i- and j-component of the wind stress 82 !! - taum wind stress module at T-point 83 !! - wndm 10m wind module at T-point 84 !! - qns, qsr non-slor and solar heat flux 85 !! - emp, emps evaporation minus precipitation 92 86 !!---------------------------------------------------------------------- 93 87 INTEGER, INTENT(in) :: kt ! ocean time step 94 88 !! 95 INTEGER :: ji, jj, jf ! dummy indices 96 INTEGER :: ierror ! return error code 97 REAL(wp) :: zfact ! temporary scalar 89 INTEGER :: ji, jj, jf ! dummy indices 90 INTEGER :: ierror ! return error code 91 REAL(wp) :: zfact ! temporary scalar 92 REAL(wp) :: zrhoa = 1.22 ! Air density kg/m3 93 REAL(wp) :: zcdrag = 1.5e-3 ! drag coefficient 94 REAL(wp) :: ztx, zty, zmod, zcoef ! temporary variables 98 95 !! 99 96 CHARACTER(len=100) :: cn_dir ! Root directory for location of flx files … … 157 154 END DO 158 155 156 ! module of wind stress and wind speed at T-point 157 zcoef = 1. / ( zrhoa * zcdrag ) 158 !CDIR NOVERRCHK 159 DO jj = 2, jpjm1 160 !CDIR NOVERRCHK 161 DO ji = fs_2, fs_jpim1 ! vect. opt. 162 ztx = utau(ji-1,jj ) + utau(ji,jj) 163 zty = vtau(ji ,jj-1) + vtau(ji,jj) 164 zmod = 0.5 * SQRT( ztx * ztx + zty * zty ) 165 taum(ji,jj) = zmod 166 wndm(ji,jj) = SQRT( zmod * zcoef ) 167 END DO 168 END DO 169 CALL lbc_lnk( taum(:,:), 'T', 1. ) ; CALL lbc_lnk( wndm(:,:), 'T', 1. ) 170 159 171 ! Initialization of emps (when no ice model) 160 172 emps(:,:) = emp (:,:) 161 162 ! Estimation of wind speed as a function of wind stress ( |tau|=rhoa*Cd*|U|^2 ) 163 CALL sbc_tau2wnd 164 173 165 174 ! control print (if less than 100 time-step asked) 166 175 IF( nitend-nit000 <= 100 .AND. lwp ) THEN -
trunk/NEMO/OPA_SRC/SBC/sbcice_if.F90
r1275 r1695 48 48 !! 49 49 !! ** Action : utau, vtau : remain unchanged 50 !! taum, wndm : remain unchanged 50 51 !! qns, qsr : update heat flux below sea-ice 51 52 !! emp, emps : update freshwater flux below sea-ice -
trunk/NEMO/OPA_SRC/SBC/sbcice_lim.F90
r1481 r1695 89 89 !! ** Action : - time evolution of the LIM sea-ice model 90 90 !! - update all sbc variables below sea-ice: 91 !! utau, vtau, qns , qsr, emp , emps91 !! utau, vtau, taum, wndm, qns , qsr, emp , emps 92 92 !!--------------------------------------------------------------------- 93 93 INTEGER, INTENT(in) :: kt ! ocean time step -
trunk/NEMO/OPA_SRC/SBC/sbcice_lim_2.F90
r1482 r1695 85 85 !! ** Action : - time evolution of the LIM sea-ice model 86 86 !! - update all sbc variables below sea-ice: 87 !! utau, vtau, qns , qsr, emp , emps87 !! utau, vtau, taum, wndm, qns , qsr, emp , emps 88 88 !!--------------------------------------------------------------------- 89 89 INTEGER, INTENT(in) :: kt ! ocean time step -
trunk/NEMO/OPA_SRC/ZDF/zdfkpp.F90
r1601 r1695 200 200 ! 201 201 REAL(wp) :: & ! 202 ztx, zty, z tau, zflageos,& !202 ztx, zty, zflageos, & ! 203 203 zstabl, zbuofdep,zucube, & ! 204 204 zrhos, zalbet, zbeta, & ! … … 469 469 zrhos = rhop(ji,jj,1) + zflageos * rau0 * ( 1. - tmask(ji,jj,1) ) 470 470 ! Friction velocity (zustar), at T-point : LMD94 eq. 2 471 ztx = 0.5 * ( utau(ji,jj) + utau(ji - 1, jj ) ) 472 zty = 0.5 * ( vtau(ji,jj) + vtau(ji , jj - 1) ) 473 ztau = SQRT( ztx * ztx + zty * zty ) 474 zustar(ji,jj) = SQRT( ztau / ( zrhos + epsln ) ) 471 zustar(ji,jj) = SQRT( taum(ji,jj) / ( zrhos + epsln ) ) 475 472 ENDDO 476 473 ENDDO -
trunk/NEMO/OPA_SRC/ZDF/zdftke.F90
r1662 r1695 113 113 !! - rn_ediss / emxl en**(2/3) ! Kolmogoroff dissipation 114 114 !! with the boundary conditions: 115 !! surface: en = max( rn_emin0, rn_ebb sqrt(utau^2 + vtau^2))115 !! surface: en = max( rn_emin0, rn_ebb * taum ) 116 116 !! bottom : en = rn_emin 117 117 !! The associated critical Richardson number is: ri_cri = 2/(2+rn_ediss/rn_ediff) … … 178 178 !! 179 179 INTEGER :: ji, jj, jk ! dummy loop arguments 180 REAL(wp) :: zbbrau, zes urf, zesh2! temporary scalars180 REAL(wp) :: zbbrau, zesh2 ! temporary scalars 181 181 REAL(wp) :: zfact1, zfact2, zfact3 ! - - 182 182 REAL(wp) :: ztx2 , zty2 , zcof ! - - … … 191 191 !!-------------------------------------------------------------------- 192 192 ! 193 zbbrau = .5 *rn_ebb / rau0 ! Local constant initialisation193 zbbrau = rn_ebb / rau0 ! Local constant initialisation 194 194 zfact1 = -.5 * rdt 195 195 zfact2 = 1.5 * rdt * rn_ediss … … 199 199 ! ! Surface boundary condition on tke 200 200 ! !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 201 !CDIR NOVERRCHK 202 DO jj = 2, jpjm1 ! en(1) = rn_ebb sqrt(utau^2+vtau^2) / rau0 (min value rn_emin0) 203 !CDIR NOVERRCHK 201 DO jj = 2, jpjm1 ! en(1) = rn_ebb taum / rau0 (min value rn_emin0) 204 202 DO ji = fs_2, fs_jpim1 ! vector opt. 205 ztx2 = utau(ji-1,jj ) + utau(ji,jj) 206 zty2 = vtau(ji ,jj-1) + vtau(ji,jj) 207 zesurf = zbbrau * SQRT( ztx2 * ztx2 + zty2 * zty2 ) 208 en(ji,jj,1) = MAX( zesurf, rn_emin0 ) * tmask(ji,jj,1) 203 en(ji,jj,1) = MAX( rn_emin0, zbbrau * taum(ji,jj) ) * tmask(ji,jj,1) 209 204 END DO 210 205 END DO … … 441 436 INTEGER :: ji, jj, jk ! dummy loop arguments 442 437 REAL(wp) :: zrn2, zraug ! temporary scalars 443 REAL(wp) :: z tx2, zdku! - -444 REAL(wp) :: z ty2, zdkv! - -438 REAL(wp) :: zdku ! - - 439 REAL(wp) :: zdkv ! - - 445 440 REAL(wp) :: zcoef, zav ! - - 446 441 REAL(wp) :: zpdlr, zri, zsqen ! - - … … 454 449 ! !* Buoyancy length scale: l=sqrt(2*e/n**2) 455 450 ! 456 IF( ln_mxl0 ) THEN ! surface mixing length = F(stress) : l=vkarmn*2.e5* sqrt(utau^2 + vtau^2)/(rau0*g)451 IF( ln_mxl0 ) THEN ! surface mixing length = F(stress) : l=vkarmn*2.e5*taum/(rau0*g) 457 452 !!gm this should be useless 458 453 zmxlm(:,:,1) = 0.e0 459 454 !!gm end 460 zraug = 0.5 * vkarmn * 2.e5 / ( rau0 * grav ) 461 DO jj = 2, jpjm1 462 !CDIR NOVERRCHK 455 zraug = vkarmn * 2.e5 / ( rau0 * grav ) 456 DO jj = 2, jpjm1 463 457 DO ji = fs_2, fs_jpim1 ! vector opt. 464 ztx2 = utau(ji-1,jj ) + utau(ji,jj) 465 zty2 = vtau(ji ,jj-1) + vtau(ji,jj) 466 zmxlm(ji,jj,1) = MAX( rn_lmin0, zraug * SQRT( ztx2 * ztx2 + zty2 * zty2 ) ) 458 zmxlm(ji,jj,1) = MAX( rn_lmin0, zraug * taum(ji,jj) ) 467 459 END DO 468 460 END DO
Note: See TracChangeset
for help on using the changeset viewer.