Changeset 6389 for branches/UKMO/dev_r5518_Surge_Modelling/NEMOGCM/NEMO
- Timestamp:
- 2016-03-15T11:31:28+01:00 (8 years ago)
- Location:
- branches/UKMO/dev_r5518_Surge_Modelling/NEMOGCM/NEMO/OPA_SRC/SBC
- Files:
-
- 1 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/dev_r5518_Surge_Modelling/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_oce.F90
r5407 r6389 35 35 LOGICAL , PUBLIC :: ln_blk_core !: CORE bulk formulation 36 36 LOGICAL , PUBLIC :: ln_blk_mfs !: MFS bulk formulation 37 LOGICAL , PUBLIC :: ln_sbcsurge !: Surge model formulation 37 38 #if defined key_oasis3 38 39 LOGICAL , PUBLIC :: lk_oasis = .TRUE. !: OASIS used … … 80 81 INTEGER , PUBLIC, PARAMETER :: jp_mfs = 6 !: MFS bulk formulation 81 82 INTEGER , PUBLIC, PARAMETER :: jp_none = 7 !: for OPA when doing coupling via SAS module 83 INTEGER , PUBLIC, PARAMETER :: jp_sbcsurge= 8 !: for OPA when doing coupling via SAS module 82 84 INTEGER , PUBLIC, PARAMETER :: jp_esopa = -1 !: esopa test, ALL formulations 83 85 -
branches/UKMO/dev_r5518_Surge_Modelling/NEMOGCM/NEMO/OPA_SRC/SBC/sbcblk_core.F90
r5954 r6389 91 91 REAL(wp) :: rn_zqt ! z(q,t) : height of humidity and temperature measurements 92 92 REAL(wp) :: rn_zu ! z(u) : height of wind measurements 93 LOGICAL :: ln_charnock ! logical flag for charnock wind stress in surge model(true) or not(false)94 93 95 94 !! * Substitutions … … 152 151 & sn_wndi, sn_wndj, sn_humi , sn_qsr , & 153 152 & sn_qlw , sn_tair, sn_prec , sn_snow, & 154 & sn_tdif, rn_zqt , rn_zu , ln_charnock153 & sn_tdif, rn_zqt , rn_zu 155 154 !!--------------------------------------------------------------------- 156 155 ! … … 248 247 INTEGER :: ji, jj ! dummy loop indices 249 248 REAL(wp) :: zcoef_qsatw, zztmp ! local variable 250 REAL(wp) :: z_z0, z_Cd1 ! local variable251 REAL(wp) :: i ! local variable252 REAL(wp) :: charn_const=0.0275 ! local variable253 249 REAL(wp), DIMENSION(:,:), POINTER :: zwnd_i, zwnd_j ! wind speed components at T-point 254 250 REAL(wp), DIMENSION(:,:), POINTER :: zqsatw ! specific humidity at pst … … 307 303 ! ocean albedo assumed to be constant + modify now Qsr to include the diurnal cycle ! Short Wave 308 304 zztmp = 1. - albo 309 #if defined key_surge310 qsr(:,:)=0._wp311 zqlw(:,:) = 0._wp312 #else313 305 IF( ln_dm2dc ) THEN ; qsr(:,:) = zztmp * sbc_dcy( sf(jp_qsr)%fnow(:,:,1) ) * tmask(:,:,1) 314 306 ELSE ; qsr(:,:) = zztmp * sf(jp_qsr)%fnow(:,:,1) * tmask(:,:,1) … … 316 308 317 309 zqlw(:,:) = ( sf(jp_qlw)%fnow(:,:,1) - Stef * zst(:,:)*zst(:,:)*zst(:,:)*zst(:,:) ) * tmask(:,:,1) ! Long Wave 318 #endif319 310 ! ----------------------------------------------------------------------------- ! 320 311 ! II Turbulent FLUXES ! 321 312 ! ----------------------------------------------------------------------------- ! 322 IF (ln_charnock) THEN 323 Cd(:,:)=0.0001_wp 324 DO jj = 1,jpj 325 DO ji = 1,jpi 326 z_Cd1=0._wp 327 i=1 328 !Iterate 329 DO WHILE((abs(Cd(ji,jj)-z_Cd1))>1E-6) 330 z_Cd1=Cd(ji,jj) 331 z_z0=charn_const*z_Cd1*wndm(ji,jj)**2/grav 332 Cd(ji,jj)=(0.41_wp/log(10._wp/z_z0))**2 333 i=i+1 334 ENDDO 335 ENDDO 336 ENDDO 337 ELSE 338 339 ! ... specific humidity at SST and IST 340 zqsatw(:,:) = zcoef_qsatw * EXP( -5107.4 / zst(:,:) ) 341 342 ! ... NCAR Bulk formulae, computation of Cd, Ch, Ce at T-point : 343 CALL turb_core_2z( rn_zqt, rn_zu, zst, sf(jp_tair)%fnow, zqsatw, sf(jp_humi)%fnow, wndm, & 344 & Cd, Ch, Ce, zt_zu, zq_zu ) 345 346 ENDIF 313 314 ! ... specific humidity at SST and IST 315 zqsatw(:,:) = zcoef_qsatw * EXP( -5107.4 / zst(:,:) ) 316 317 ! ... NCAR Bulk formulae, computation of Cd, Ch, Ce at T-point : 318 CALL turb_core_2z( rn_zqt, rn_zu, zst, sf(jp_tair)%fnow, zqsatw, sf(jp_humi)%fnow, wndm, & 319 & Cd, Ch, Ce, zt_zu, zq_zu ) 347 320 348 321 ! ... tau module, i and j component … … 379 352 ! Turbulent fluxes over ocean 380 353 ! ----------------------------- 381 #if ! defined key_surge382 354 IF( ABS( rn_zu - rn_zqt) < 0.01_wp ) THEN 383 355 !! q_air and t_air are (or "are almost") given at 10m (wind reference height) … … 391 363 ENDIF 392 364 zqla (:,:) = Lv * zevap(:,:) ! Latent Heat 393 #endif394 365 395 366 IF(ln_ctl) THEN … … 408 379 ! ----------------------------------------------------------------------------- ! 409 380 ! 410 #if defined key_surge411 emp (:,:) = 0._wp412 qns(:,:) = 0._wp413 #else414 381 emp (:,:) = ( zevap(:,:) & ! mass flux (evap. - precip.) 415 382 & - sf(jp_prec)%fnow(:,:,1) * rn_pfac ) * tmask(:,:,1) … … 422 389 & + sf(jp_snow)%fnow(:,:,1) * rn_pfac & ! add solid precip heat content at min(Tair,Tsnow) 423 390 & * ( MIN( sf(jp_tair)%fnow(:,:,1), rt0_snow ) - rt0 ) * cpic * tmask(:,:,1) 424 #endif425 391 ! 426 392 #if defined key_lim3 -
branches/UKMO/dev_r5518_Surge_Modelling/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90
r5954 r6389 34 34 USE sbcblk_core ! surface boundary condition: bulk formulation : CORE 35 35 USE sbcblk_mfs ! surface boundary condition: bulk formulation : MFS 36 USE sbcsurge ! surface boundary condition: charnock forumaltion for surge model 36 37 USE sbcice_if ! surface boundary condition: ice-if sea-ice model 37 38 USE sbcice_lim ! surface boundary condition: LIM 3.0 sea-ice model … … 86 87 INTEGER :: icpt ! local integer 87 88 !! 88 NAMELIST/namsbc/ nn_fsbc , ln_ana , ln_flx, ln_blk_clio, ln_blk_core, ln_ mixcpl, &89 NAMELIST/namsbc/ nn_fsbc , ln_ana , ln_flx, ln_blk_clio, ln_blk_core, ln_sbcsurge, ln_mixcpl, & 89 90 & ln_blk_mfs, ln_apr_dyn, nn_ice, nn_ice_embd, ln_dm2dc , ln_rnf , & 90 91 & ln_ssr , nn_isf , nn_fwb, ln_cdgw , ln_wave , ln_sdw , & … … 130 131 WRITE(numout,*) ' CORE bulk formulation ln_blk_core = ', ln_blk_core 131 132 WRITE(numout,*) ' MFS bulk formulation ln_blk_mfs = ', ln_blk_mfs 133 WRITE(numout,*) ' surge formulation ln_sbcsurge = ', ln_sbcsurge 132 134 WRITE(numout,*) ' ocean-atmosphere coupled formulation ln_cpl = ', ln_cpl 133 135 WRITE(numout,*) ' forced-coupled mixed formulation ln_mixcpl = ', ln_mixcpl … … 174 176 IF( ln_mixcpl .AND. nn_components /= jp_iam_nemo ) & 175 177 & CALL ctl_stop( 'the forced-coupled mixed mode (ln_mixcpl) is not yet working with sas-opa coupling via oasis' ) 178 IF ( lk_surge .and. .not. ( ln_sbcsurge .or. ln_ana ) ) & 179 & CALL ctl_stop( ' surge model only compatible with analytical fluxes or surge formulae' ) 176 180 177 181 ! ! allocate sbc arrays … … 237 241 IF( ln_blk_core ) THEN ; nsbc = jp_core ; icpt = icpt + 1 ; ENDIF ! CORE bulk formulation 238 242 IF( ln_blk_mfs ) THEN ; nsbc = jp_mfs ; icpt = icpt + 1 ; ENDIF ! MFS bulk formulation 243 IF( ln_sbcsurge ) THEN ; nsbc = jp_sbcsurge; icpt = icpt + 1 ; ENDIF ! MFS bulk formulation 239 244 IF( ll_purecpl ) THEN ; nsbc = jp_purecpl ; icpt = icpt + 1 ; ENDIF ! Pure Coupled formulation 240 245 IF( cp_cfg == 'gyre') THEN ; nsbc = jp_gyre ; ENDIF ! GYRE analytical formulation … … 250 255 nstop = nstop + 1 251 256 ENDIF 252 IF ( lk_surge .and. .not. ( ln_blk_core .or. ln_ana ) ) &253 & CALL ctl_stop( ' surge model only compatible with analytical fluxes or core formulae' )254 257 IF(lwp) THEN 255 258 WRITE(numout,*) … … 262 265 IF( nsbc == jp_purecpl ) WRITE(numout,*) ' pure coupled formulation' 263 266 IF( nsbc == jp_mfs ) WRITE(numout,*) ' MFS Bulk formulation' 267 IF( nsbc == jp_sbcsurge) WRITE(numout,*) ' Surge formulation' 264 268 IF( nsbc == jp_none ) WRITE(numout,*) ' OPA coupled to SAS via oasis' 265 269 IF( ln_mixcpl ) WRITE(numout,*) ' + forced-coupled mixed formulation' … … 372 376 ! 373 377 CASE( jp_mfs ) ; CALL sbc_blk_mfs ( kt ) ! bulk formulation : MFS for the ocean 378 CASE( jp_sbcsurge ); CALL sbc_surge ( kt ) ! surge formulation 374 379 CASE( jp_none ) 375 380 IF( nn_components == jp_iam_opa ) &
Note: See TracChangeset
for help on using the changeset viewer.