Changeset 11180 for NEMO/branches
- Timestamp:
- 2019-06-25T18:50:27+02:00 (5 years ago)
- Location:
- NEMO/branches/UKMO/NEMO_4.0_surge
- Files:
-
- 31 added
- 18 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/UKMO/NEMO_4.0_surge/cfgs/SHARED/field_def_nemo-oce.xml
r10823 r11180 259 259 <field id="taum" long_name="wind stress module" standard_name="magnitude_of_surface_downward_stress" unit="N/m2" /> 260 260 <field id="wspd" long_name="wind speed module" standard_name="wind_speed" unit="m/s" /> 261 <field id="uwnd" long_name="u component of wind" unit="m/s" grid_ref="grid_U_2D" /> 262 <field id="vwnd" long_name="v component of wind" unit="m/s" grid_ref="grid_V_2D" /> 261 263 262 264 <!-- * variable relative to atmospheric pressure forcing : available with ln_apr_dyn --> -
NEMO/branches/UKMO/NEMO_4.0_surge/cfgs/SHARED/namelist_ref
r10888 r11180 74 74 ! 75 75 ln_crs = .false. ! Logical switch for coarsening module (T => fill namcrs) 76 ! 77 ln_2d = .false. ! (=T) run in 2D barotropic mode (no tracer processes or vertical diffusion) 76 78 ! 77 79 ln_meshmask = .false. ! =T create a mesh file -
NEMO/branches/UKMO/NEMO_4.0_surge/src/OCE/DIA/diawri.F90
r10888 r11180 185 185 CALL iom_put( "taubot", z2d ) 186 186 ENDIF 187 187 188 IF( iom_use("uwnd") ) CALL iom_put( "uwnd" , uwnd ) 189 IF( iom_use("vwnd") ) CALL iom_put( "vwnd" , vwnd ) 190 188 191 CALL iom_put( "uoce", un(:,:,:) ) ! 3D i-current 189 192 CALL iom_put( "ssu", un(:,:,1) ) ! surface i-current -
NEMO/branches/UKMO/NEMO_4.0_surge/src/OCE/DOM/dom_oce.F90
r10888 r11180 38 38 LOGICAL , PUBLIC :: ln_iscpl !: coupling with ice sheet 39 39 LOGICAL , PUBLIC :: ln_crs !: Apply grid coarsening to dynamical model output or online passive tracers 40 40 LOGICAL , PUBLIC :: ln_2d ! Default False. If True run in 2D barotropic mode (no tracer processes or vertical diffusion) 41 41 42 !! Free surface parameters 42 43 !! ======================= -
NEMO/branches/UKMO/NEMO_4.0_surge/src/OCE/DOM/domain.F90
r10888 r11180 293 293 & nn_stock, nn_write , ln_mskland , ln_clobber , nn_chunksz, nn_euler , & 294 294 & ln_cfmeta, ln_iscpl, ln_xios_read, nn_wxios 295 NAMELIST/namdom/ ln_linssh, rn_isfhmin, rn_rdt, rn_atfp, ln_crs, ln_meshmask 295 NAMELIST/namdom/ ln_linssh, rn_isfhmin, rn_rdt, rn_atfp, ln_crs, ln_meshmask, ln_2d 296 296 #if defined key_netcdf4 297 297 NAMELIST/namnc4/ nn_nchunks_i, nn_nchunks_j, nn_nchunks_k, ln_nc4zip … … 416 416 WRITE(numout,*) ' asselin time filter parameter rn_atfp = ', rn_atfp 417 417 WRITE(numout,*) ' online coarsening of dynamical fields ln_crs = ', ln_crs 418 WRITE(numout,*) ' 2D mode ln_2d = ', ln_2d 419 IF(ln_2d) WRITE(numout,*) ' 2D mode active: All tracer processes and vertical diffusion turned off' 418 420 ENDIF 419 421 ! -
NEMO/branches/UKMO/NEMO_4.0_surge/src/OCE/DOM/domzgr.F90
r10888 r11180 134 134 IF( ln_sco ) ioptio = ioptio + 1 135 135 IF( ioptio /= 1 ) CALL ctl_stop( ' none or several vertical coordinate options used' ) 136 136 IF (ln_2d .AND. .NOT.ln_sco) CALL ctl_stop( ' 2D mode must be used with ln_sco' ) 137 137 138 138 ! ! top/bottom ocean level indices for t-, u- and v-points (f-point also for top) -
NEMO/branches/UKMO/NEMO_4.0_surge/src/OCE/DOM/dtatsd.F90
r10888 r11180 87 87 WRITE(numout,*) ' ===>> T & S data not used' 88 88 ENDIF 89 IF( ln_2d ) WRITE(numout,*) ' 2D ocean - ocean will be started at rest and T&S = arbitrary constants' 89 90 ENDIF 90 91 ! -
NEMO/branches/UKMO/NEMO_4.0_surge/src/OCE/DOM/istate.F90
r10888 r11180 96 96 ! ! Initialization of ocean to zero 97 97 ! 98 IF( ln_tsd_init ) THEN 98 IF (ln_2d) THEN 99 IF(lwp) WRITE(numout,*) 'istate_init : 2D case, setting tracers to contants and ocean at rest' 100 tsb(:,:,:,:)= 15._wp ! No tracers, but can't set salinity to 0 otherwise it triggers crash message 101 sshb(:,:) = 0._wp ! set the ocean at rest 102 ub (:,:,:) = 0._wp 103 vb (:,:,:) = 0._wp 104 ELSE IF( ln_tsd_init ) THEN 99 105 CALL dta_tsd( nit000, tsb ) ! read 3D T and S data at nit000 100 106 ! -
NEMO/branches/UKMO/NEMO_4.0_surge/src/OCE/DYN/dynhpg.F90
r10888 r11180 493 493 END IF 494 494 495 IF (ln_2d) THEN 496 ! Surface value 497 DO jj = 2, jpjm1 498 DO ji = fs_2, fs_jpim1 ! vector opt. 499 ! hydrostatic pressure gradient along s-surfaces 500 zhpi(ji,jj,1) = zcoef0 * ( e3w_n(ji+1,jj ,1) * znad & 501 & - e3w_n(ji ,jj ,1) * znad ) * r1_e1u(ji,jj) 502 zhpj(ji,jj,1) = zcoef0 * ( e3w_n(ji ,jj+1,1) * znad & 503 & - e3w_n(ji ,jj ,1) * znad ) * r1_e2v(ji,jj) 504 ! s-coordinate pressure gradient correction 505 zuap = -zcoef0 * ( 2._wp * znad ) & 506 & * ( gde3w_n(ji+1,jj,1) - gde3w_n(ji,jj,1) ) * r1_e1u(ji,jj) 507 zvap = -zcoef0 * ( 2._wp * znad ) & 508 & * ( gde3w_n(ji,jj+1,1) - gde3w_n(ji,jj,1) ) * r1_e2v(ji,jj) 509 510 511 IF( ln_wd_il ) THEN 512 513 zhpi(ji,jj,1) = zhpi(ji,jj,1) * zcpx(ji,jj) 514 zhpj(ji,jj,1) = zhpj(ji,jj,1) * zcpy(ji,jj) 515 zuap = zuap * zcpx(ji,jj) 516 zvap = zvap * zcpy(ji,jj) 517 ENDIF 518 519 ! add to the general momentum trend 520 ua(ji,jj,1) = ua(ji,jj,1) + zhpi(ji,jj,1) + zuap * umask(ji,jj,1) 521 va(ji,jj,1) = va(ji,jj,1) + zhpj(ji,jj,1) + zvap * vmask(ji,jj,1) 522 END DO 523 END DO 524 525 ! interior value (2=<jk=<jpkm1) 526 DO jk = 2, jpkm1 527 DO jj = 2, jpjm1 528 DO ji = fs_2, fs_jpim1 ! vector opt. 529 ! hydrostatic pressure gradient along s-surfaces 530 zhpi(ji,jj,jk) = zhpi(ji,jj,jk-1) + zcoef0 * r1_e1u(ji,jj) & 531 & * ( e3w_n(ji+1,jj,jk) * ( 2*znad ) & 532 & - e3w_n(ji ,jj,jk) * ( 2*znad ) ) 533 zhpj(ji,jj,jk) = zhpj(ji,jj,jk-1) + zcoef0 * r1_e2v(ji,jj) & 534 & * ( e3w_n(ji,jj+1,jk) * ( 2*znad ) & 535 & - e3w_n(ji,jj ,jk) * ( 2*znad ) ) 536 ! s-coordinate pressure gradient correction 537 zuap = -zcoef0 * ( 2._wp * znad ) & 538 & * ( gde3w_n(ji+1,jj ,jk) - gde3w_n(ji,jj,jk) ) * r1_e1u(ji,jj) 539 zvap = -zcoef0 * ( 2._wp * znad ) & 540 & * ( gde3w_n(ji ,jj+1,jk) - gde3w_n(ji,jj,jk) ) * r1_e2v(ji,jj) 541 542 IF( ln_wd_il ) THEN 543 zhpi(ji,jj,jk) = zhpi(ji,jj,jk) * zcpx(ji,jj) 544 zhpj(ji,jj,jk) = zhpj(ji,jj,jk) * zcpy(ji,jj) 545 zuap = zuap * zcpx(ji,jj) 546 zvap = zvap * zcpy(ji,jj) 547 ENDIF 548 549 ! add to the general momentum trend 550 ua(ji,jj,jk) = ua(ji,jj,jk) + zhpi(ji,jj,jk) + zuap * umask(ji,jj,1) 551 va(ji,jj,jk) = va(ji,jj,jk) + zhpj(ji,jj,jk) + zvap * vmask(ji,jj,1) 552 END DO 553 END DO 554 END DO 555 556 ELSE 557 495 558 ! Surface value 496 559 DO jj = 2, jpjm1 … … 550 613 END DO 551 614 END DO 615 616 ENDIF !ln_2d 552 617 ! 553 618 IF( ln_wd_il ) DEALLOCATE( zcpx , zcpy ) -
NEMO/branches/UKMO/NEMO_4.0_surge/src/OCE/DYN/dynkeg.F90
r11081 r11180 191 191 DO jj = 2, jpjm1 192 192 DO ji = fs_2, fs_jpim1 ! vector opt. 193 ua(ji,jj,jk) = ua(ji,jj,jk) - ( zhke(ji+1,jj ,jk) - zhke(ji,jj,jk) ) / e1u(ji,jj) 194 va(ji,jj,jk) = va(ji,jj,jk) - ( zhke(ji ,jj+1,jk) - zhke(ji,jj,jk) ) / e2v(ji,jj) 193 ua(ji,jj,jk) = ua(ji,jj,jk) - ( zhke(ji+1,jj ,jk) - zhke(ji,jj,jk) ) / e1u(ji,jj)* umask(ji,jj,jk) 194 va(ji,jj,jk) = va(ji,jj,jk) - ( zhke(ji ,jj+1,jk) - zhke(ji,jj,jk) ) / e2v(ji,jj)* vmask(ji,jj,jk) 195 195 END DO 196 196 END DO -
NEMO/branches/UKMO/NEMO_4.0_surge/src/OCE/DYN/dynspg.F90
r10888 r11180 150 150 DO jj = 2, jpjm1 151 151 DO ji = fs_2, fs_jpim1 ! vector opt. 152 ua(ji,jj,jk) = ua(ji,jj,jk) + spgu(ji,jj) 153 va(ji,jj,jk) = va(ji,jj,jk) + spgv(ji,jj) 152 ua(ji,jj,jk) = ua(ji,jj,jk) + spgu(ji,jj)* umask(ji,jj,jk) 153 va(ji,jj,jk) = va(ji,jj,jk) + spgv(ji,jj)* vmask(ji,jj,jk) 154 154 END DO 155 155 END DO -
NEMO/branches/UKMO/NEMO_4.0_surge/src/OCE/SBC/sbc_oce.F90
r10888 r11180 112 112 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: vtau , vtau_b !: sea surface j-stress (ocean referential) [N/m2] 113 113 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: taum !: module of sea surface stress (at T-point) [N/m2] 114 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: uwnd !: wind speed i-component [m/s] 115 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: vwnd !: wind speed j-component [m/s] 114 116 !! wndm is used onmpute surface gases exchanges in ice-free ocean or leads 115 117 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: wndm !: wind speed module at T-point (=|U10m-Uoce|) [m/s] … … 167 169 ! 168 170 ALLOCATE( utau(jpi,jpj) , utau_b(jpi,jpj) , taum(jpi,jpj) , & 169 & vtau(jpi,jpj) , vtau_b(jpi,jpj) , wndm(jpi,jpj) , STAT=ierr(1) ) 170 ! 171 & vtau(jpi,jpj) , vtau_b(jpi,jpj) , wndm(jpi,jpj) , & 172 & uwnd(jpi,jpj) , vwnd(jpi,jpj) , STAT=ierr(1) ) 173 ! 171 174 ALLOCATE( qns_tot(jpi,jpj) , qns (jpi,jpj) , qns_b(jpi,jpj), & 172 175 & qsr_tot(jpi,jpj) , qsr (jpi,jpj) , & -
NEMO/branches/UKMO/NEMO_4.0_surge/src/OCE/SBC/tide.h90
r10888 r11180 1 1 !!---------------------------------------------------------------------- 2 2 !! History : 3.2 ! 2007 (O. Le Galloudec) Original code 3 !! ! 2019 (C O'Neill) Added components 20-31 3 4 !!---------------------------------------------------------------------- 4 5 … … 28 29 Wave(18) = tide( 'L2' , 0.006694 , 2 , 2 , -1 , 2 , -1 , 0 , +180 , 2 , -2 , 0 , 0 , 0 , 215 ) 29 30 Wave(19) = tide( 'T2' , 0.006614 , 2 , 2 , 0 , -1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) 31 ! 32 Wave(20) = tide( 'MNS2' , 0.000000 , 2 , 2 , -5 , 4 , 1 , 0 , 0 , 4 , -4 , 0 , 0 , 0 , 6 ) 33 Wave(21) = tide( 'Lam2' , 0.001760 , 2 , 2 , -1 , 0 , 1 , 0 , +180 , 2 , -2 , 0 , 0 , 0 , 78 ) 34 Wave(22) = tide( 'MSN2' , 0.000000 , 2 , 2 , 1 , 0 , 1 , 0 , 0 , 2 , -2 , 0 , 2 , 0 , 6 ) 35 Wave(23) = tide( '2SM2' , 0.000000 , 2 , 2 , 2 , -2 , 0 , 0 , 0 , -2 , 2 , 0 , 0 , 0 , 16 ) 36 Wave(24) = tide( 'MO3' , 0.000000 , 3 , 3 , -4 , 1 , 0 , 0 , +90 , 2 , -2 , 0 , 0 , 0 , 13 ) 37 Wave(25) = tide( 'MK3' , 0.000000 , 3 , 3 , -2 , 3 , 0 , 0 , -90 , 2 , -2 , -1 , 0 , 0 , 10 ) 38 Wave(26) = tide( 'MN4' , 0.000000 , 4 , 4 , -5 , 4 , 1 , 0 , 0 , 4 , -4 , 0 , 0 , 0 , 1 ) 39 Wave(27) = tide( 'MS4' , 0.000000 , 4 , 4 , -2 , 2 , 0 , 0 , 0 , 2 , -2 , 0 , 0 , 0 , 2 ) 40 Wave(28) = tide( 'M6' , 0.000000 , 6 , 6 , -6 , 6 , 0 , 0 , 0 , 6 , -6 , 0 , 0 , 0 , 4 ) 41 Wave(29) = tide( '2MS6' , 0.000000 , 6 , 6 , -4 , 4 , 0 , 0 , 0 , 4 , -4 , 0 , 0 , 0 , 6 ) 42 Wave(30) = tide( '2MK6' , 0.000000 , 6 , 6 , -4 , 6 , 0 , 0 , 0 , 4 , -4 , 0 , -2 , 0 , 5 ) 43 Wave(31) = tide( '3M2S2' , 0.000000 , 2 , 2 , -6 , 6 , 0 , 0 , 0 , 6 , -6 , 0 , 0 , 0 , 12 ) -
NEMO/branches/UKMO/NEMO_4.0_surge/src/OCE/SBC/tide_mod.F90
r10888 r11180 16 16 PUBLIC tide_init_Wave ! called by tideini and diaharm modules 17 17 18 INTEGER, PUBLIC, PARAMETER :: jpmax_harmo = 19!: maximum number of harmonic18 INTEGER, PUBLIC, PARAMETER :: jpmax_harmo = 31 !: maximum number of harmonic 19 19 20 20 TYPE, PUBLIC :: tide 21 CHARACTER(LEN= 4) :: cname_tide21 CHARACTER(LEN=5) :: cname_tide 22 22 REAL(wp) :: equitide 23 23 INTEGER :: nutide -
NEMO/branches/UKMO/NEMO_4.0_surge/src/OCE/SBC/tideini.F90
r10888 r11180 50 50 !!---------------------------------------------------------------------- 51 51 INTEGER :: ji, jk 52 CHARACTER(LEN= 4), DIMENSION(jpmax_harmo) :: clname52 CHARACTER(LEN=5), DIMENSION(jpmax_harmo) :: clname 53 53 INTEGER :: ios ! Local integer output status for namelist read 54 54 ! -
NEMO/branches/UKMO/NEMO_4.0_surge/src/OCE/ZDF/zdfphy.F90
r11081 r11180 84 84 !!---------------------------------------------------------------------- 85 85 ! 86 IF( .NOT. ln_2d ) THEN 87 86 88 IF(lwp) THEN 87 89 WRITE(numout,*) … … 209 211 IF( ln_zdfswm ) CALL zdf_swm_init ! surface wave-driven mixing 210 212 213 ENDIF ! .NOT. ln_2d 214 211 215 ! !== top/bottom friction ==! 212 216 CALL zdf_drg_init … … 251 255 ENDIF 252 256 ENDIF 257 258 IF( .NOT. ln_2d ) THEN ! 2D case only uses bottom friction from this routine 253 259 ! 254 260 ! !== Kz from chosen turbulent closure ==! (avm_k, avt_k) … … 321 327 ! NB. OSMOSIS restart (osm_rst) will be called in step.F90 after wn has been updated 322 328 ENDIF 329 330 ENDIF ! .NOT. ln_2d 323 331 ! 324 332 IF( ln_timing ) CALL timing_stop('zdf_phy') -
NEMO/branches/UKMO/NEMO_4.0_surge/src/OCE/nemogcm.F90
r10888 r11180 75 75 USE sbc_oce , ONLY : lk_oasis 76 76 USE wet_dry ! Wetting and drying setting (wad_init routine) 77 USE dom_oce , ONLY : ln_2d 77 78 #if defined key_top 78 79 USE trcini ! passive tracer initialisation … … 446 447 447 448 ! ! Lateral physics 448 449 IF (.NOT. ln_2d) CALL ldf_tra_init ! Lateral ocean tracer physics 449 450 CALL ldf_eiv_init ! eddy induced velocity param. 450 451 CALL ldf_dyn_init ! Lateral ocean momentum physics 451 452 452 453 ! ! Active tracers 453 IF( ln_traqsr ) CALL tra_qsr_init ! penetrative solar radiation qsr 454 CALL tra_bbc_init ! bottom heat flux 455 CALL tra_bbl_init ! advective (and/or diffusive) bottom boundary layer scheme 456 CALL tra_dmp_init ! internal tracer damping 457 CALL tra_adv_init ! horizontal & vertical advection 458 CALL tra_ldf_init ! lateral mixing 454 IF (.NOT. ln_2d) THEN ! No tracers in 2D mode 455 IF( ln_traqsr ) CALL tra_qsr_init ! penetrative solar radiation qsr 456 CALL tra_bbc_init ! bottom heat flux 457 CALL tra_bbl_init ! advective (and/or diffusive) bottom boundary layer scheme 458 CALL tra_dmp_init ! internal tracer damping 459 CALL tra_adv_init ! horizontal & vertical advection 460 CALL tra_ldf_init ! lateral mixing 461 ENDIF 459 462 460 463 ! ! Dynamics -
NEMO/branches/UKMO/NEMO_4.0_surge/src/OCE/step.F90
r10888 r11180 125 125 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 126 126 ! THERMODYNAMICS 127 IF ( .NOT. ln_2d ) THEN 127 128 CALL eos_rab( tsb, rab_b ) ! before local thermal/haline expension ratio at T-points 128 129 CALL eos_rab( tsn, rab_n ) ! now local thermal/haline expension ratio at T-points 129 130 CALL bn2 ( tsb, rab_b, rn2b ) ! before Brunt-Vaisala frequency 130 131 CALL bn2 ( tsn, rab_n, rn2 ) ! now Brunt-Vaisala frequency 131 132 ENDIF 133 132 134 ! VERTICAL PHYSICS 133 135 CALL zdf_phy( kstp ) ! vertical physics update (top/bot drag, avt, avs, avm + MLD) … … 163 165 CALL wzv ( kstp ) ! now cross-level velocity 164 166 IF( ln_zad_Aimp ) CALL wAimp ( kstp ) ! Adaptive-implicit vertical advection partitioning 165 167 IF( .NOT. ln_2d ) CALL eos ( tsn, rhd, rhop, gdept_n(:,:,:) ) ! now in situ density for hpg computation 166 168 167 169 !!jc: fs simplification … … 202 204 ENDIF 203 205 204 206 IF( .NOT. ln_2d ) CALL dyn_zdf ( kstp ) ! vertical diffusion 205 207 206 208 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> … … 232 234 ! Active tracers 233 235 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 236 IF (.NOT. ln_2d) THEN ! No tracers in 2D mode 234 237 tsa(:,:,:,:) = 0._wp ! set tracer trends to zero 235 238 … … 257 260 CALL tra_zdf ( kstp ) ! vertical mixing and after tracer fields 258 261 IF( ln_zdfnpc ) CALL tra_npc ( kstp ) ! update after fields by non-penetrative convection 259 262 ENDIF ! not ln_2d 263 260 264 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 261 265 ! Set boundary conditions and Swap … … 275 279 !! 276 280 !!jc2: dynnxt must be the latest call. e3t_b are indeed updated in that routine 277 281 IF (.NOT. ln_2d) CALL tra_nxt ( kstp ) ! finalize (bcs) tracer fields at next time step and swap 278 282 CALL dyn_nxt ( kstp ) ! finalize (bcs) velocities at next time step and swap (always called after tra_nxt) 279 283 CALL ssh_swp ( kstp ) ! swap of sea surface height
Note: See TracChangeset
for help on using the changeset viewer.