Changeset 13826 for NEMO/branches
- Timestamp:
- 2020-11-19T10:26:41+01:00 (4 years ago)
- Location:
- NEMO/branches/2020/dev_r2052_ENHANCE-09_rbourdal_massfluxconvection
- Files:
-
- 1 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/dev_r2052_ENHANCE-09_rbourdal_massfluxconvection/cfgs/SHARED/field_def_nemo-oce.xml
r13476 r13826 234 234 <field id="cfl_cw" long_name="w-courant number" unit="#" /> 235 235 236 <!-- variables available with ln_zdfmfc=.true. --> 237 <field id="mf_Tp" long_name="plume_temperature" standard_name="plume_temperature" unit="degC" grid_ref="grid_T_3D" /> 238 <field id="mf_Sp" long_name="plume_salinity" standard_name="plume_salinity" unit="1e-3" grid_ref="grid_T_3D" /> 239 <field id="mf_mf" long_name="mass flux" standard_name="mf_mass_flux" unit="m" grid_ref="grid_T_3D" /> 240 236 241 </field_group> <!-- grid_T --> 237 242 … … 649 654 <field id="avm_evd" long_name="convective enhancement of vertical viscosity" standard_name="ocean_vertical_momentum_diffusivity_due_to_convection" unit="m2/s" /> 650 655 656 <!-- mf_app and mf_wp: available with ln_zdfmfc --> 657 <field id="mf_app" long_name="convective area" standard_name="mf_convective_area" unit="%" grid_ref="grid_W_3D" /> 658 <field id="mf_wp" long_name="convective velocity" standard_name="mf_convective_velo" unit="m/s" grid_ref="grid_W_3D" /> 659 660 651 661 <!-- avt_tide: available with ln_zdfiwm=T --> 652 662 <field id="av_ratio" long_name="S over T diffusivity ratio" standard_name="salinity_over_temperature_diffusivity_ratio" unit="1" /> -
NEMO/branches/2020/dev_r2052_ENHANCE-09_rbourdal_massfluxconvection/cfgs/SHARED/namelist_ref
r13731 r13826 1104 1104 nn_npc = 1 ! frequency of application of npc 1105 1105 nn_npcp = 365 ! npc control print frequency 1106 ln_zdfmfc = .false. ! Mass Flux Convection 1106 1107 ! 1107 1108 ln_zdfddm = .false. ! double diffusive mixing … … 1213 1214 ! ! = 1: Pierson Moskowitz wave spectrum 1214 1215 ! ! = 0: Constant La# = 0.3 1216 / 1217 !----------------------------------------------------------------------- 1218 &namzdf_mfc ! Mass Flux Convection 1219 !----------------------------------------------------------------------- 1220 ln_edmfuv = .false. ! Activate on velocity fields (Not available yet) 1221 rn_cemf = 1. ! entrain/detrain coef. (<0 => cte; >0 % depending on dW/dz 1222 rn_cwmf = -0. ! entrain/detrain coef. (<0 => cte; >0 % depending on dW/dz 1223 rn_cent = 2.e-5 ! entrain of convective area 1224 rn_cdet = 3.e-5 ! detrain of convective area 1225 rn_cap = 0.9 ! Coef. for CAP estimation 1226 App_max = 0.1 ! Maximum convection area (% of the cell) 1215 1227 / 1216 1228 !----------------------------------------------------------------------- -
NEMO/branches/2020/dev_r2052_ENHANCE-09_rbourdal_massfluxconvection/src/OCE/C1D/step_c1d.F90
r13802 r13826 104 104 IF( ln_tradmp ) CALL tra_dmp( kstp, Nbb, Nnn, ts, Nrhs ) ! internal damping trends- tracers 105 105 IF(.NOT.ln_linssh)CALL tra_adv( kstp, Nbb, Nnn, ts, Nrhs ) ! horizontal & vertical advection 106 IF( ln_zdfmfc ) CALL tra_mfc( kstp, Nbb , ts, Nrhs ) ! Mass Flux Convection 106 107 IF( ln_zdfosm ) CALL tra_osm( kstp, Nnn , ts, Nrhs ) ! OSMOSIS non-local tracer fluxes 107 108 CALL tra_zdf( kstp, Nbb, Nnn, Nrhs, ts, Naa ) ! vertical mixing … … 122 123 CALL dyn_atf ( kstp, Nbb, Nnn, Naa , uu, vv, e3t, e3u, e3v ) ! time filtering of "now" fields 123 124 IF(.NOT.ln_linssh)CALL ssh_atf ( kstp, Nbb, Nnn, Naa , ssh ) ! time filtering of "now" sea surface height 124 IF( kstp == nit000 .AND. ln_linssh) THEN125 ssh(:,:,Naa) = ssh(:,:,Nnn) ! init ssh after in ln_linssh case126 ENDIF127 125 ! 128 126 ! Swap time levels -
NEMO/branches/2020/dev_r2052_ENHANCE-09_rbourdal_massfluxconvection/src/OCE/TRA/eosbn2.F90
r13497 r13826 55 55 ! !! * Interface 56 56 INTERFACE eos 57 MODULE PROCEDURE eos_insitu, eos_insitu_pot, eos_insitu_2d 57 MODULE PROCEDURE eos_insitu, eos_insitu_pot, eos_insitu_2d, eos_insitu_pot_2d 58 58 END INTERFACE 59 59 ! … … 538 538 539 539 540 SUBROUTINE eos_insitu_pot_2d( pts, prhop ) 541 !!---------------------------------------------------------------------- 542 !! *** ROUTINE eos_insitu_pot *** 543 !! 544 !! ** Purpose : Compute the in situ density (ratio rho/rho0) and the 545 !! potential volumic mass (Kg/m3) from potential temperature and 546 !! salinity fields using an equation of state selected in the 547 !! namelist. 548 !! 549 !! ** Action : 550 !! - prhop, the potential volumic mass (Kg/m3) 551 !! 552 !!---------------------------------------------------------------------- 553 REAL(wp), DIMENSION(jpi,jpj,jpts), INTENT(in ) :: pts ! 1 : potential temperature [Celsius] 554 ! ! 2 : salinity [psu] 555 REAL(wp), DIMENSION(jpi,jpj ), INTENT( out) :: prhop ! potential density (surface referenced) 556 ! 557 INTEGER :: ji, jj, jk, jsmp ! dummy loop indices 558 INTEGER :: jdof 559 REAL(wp) :: zt , zh , zstemp, zs , ztm ! local scalars 560 REAL(wp) :: zn , zn0, zn1, zn2, zn3 ! - - 561 REAL(wp), DIMENSION(:), ALLOCATABLE :: zn0_sto, zn_sto, zsign ! local vectors 562 !!---------------------------------------------------------------------- 563 ! 564 IF( ln_timing ) CALL timing_start('eos-pot') 565 ! 566 SELECT CASE ( neos ) 567 ! 568 CASE( np_teos10, np_eos80 ) !== polynomial TEOS-10 / EOS-80 ==! 569 ! 570 DO_2D( 1, 1, 1, 1 ) 571 ! 572 zt = pts (ji,jj,jp_tem) * r1_T0 ! temperature 573 zs = SQRT( ABS( pts(ji,jj,jp_sal) + rdeltaS ) * r1_S0 ) ! square root salinity 574 ztm = tmask(ji,jj,1) ! tmask 575 ! 576 zn0 = (((((EOS060*zt & 577 & + EOS150*zs+EOS050)*zt & 578 & + (EOS240*zs+EOS140)*zs+EOS040)*zt & 579 & + ((EOS330*zs+EOS230)*zs+EOS130)*zs+EOS030)*zt & 580 & + (((EOS420*zs+EOS320)*zs+EOS220)*zs+EOS120)*zs+EOS020)*zt & 581 & + ((((EOS510*zs+EOS410)*zs+EOS310)*zs+EOS210)*zs+EOS110)*zs+EOS010)*zt & 582 & + (((((EOS600*zs+EOS500)*zs+EOS400)*zs+EOS300)*zs+EOS200)*zs+EOS100)*zs+EOS000 583 ! 584 ! 585 prhop(ji,jj) = zn0 * ztm ! potential density referenced at the surface 586 ! 587 END_2D 588 589 CASE( np_seos ) !== simplified EOS ==! 590 ! 591 DO_2D( 1, 1, 1, 1 ) 592 zt = pts (ji,jj,jp_tem) - 10._wp 593 zs = pts (ji,jj,jp_sal) - 35._wp 594 ztm = tmask(ji,jj,1) 595 ! ! potential density referenced at the surface 596 zn = - rn_a0 * ( 1._wp + 0.5_wp*rn_lambda1*zt ) * zt & 597 & + rn_b0 * ( 1._wp - 0.5_wp*rn_lambda2*zs ) * zs & 598 & - rn_nu * zt * zs 599 prhop(ji,jj) = ( rho0 + zn ) * ztm 600 ! 601 END_2D 602 ! 603 END SELECT 604 !RBB IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab2d_1=prd, clinfo1=' eos-pot: ', tab2d_2=prhop, clinfo2=' pot : ', kdim=1 ) 605 ! 606 IF( ln_timing ) CALL timing_stop('eos-pot') 607 ! 608 END SUBROUTINE eos_insitu_pot_2d 609 610 540 611 SUBROUTINE rab_3d( pts, pab, Kmm ) 541 612 !!---------------------------------------------------------------------- -
NEMO/branches/2020/dev_r2052_ENHANCE-09_rbourdal_massfluxconvection/src/OCE/TRA/trazdf.F90
r13497 r13826 17 17 USE phycst ! physical constant 18 18 USE zdf_oce ! ocean vertical physics variables 19 USE zdfmfc ! Mass FLux Convection 19 20 USE sbc_oce ! surface boundary condition: ocean 20 21 USE ldftra ! lateral diffusion: eddy diffusivity … … 189 190 ENDIF 190 191 ! 192 ! Modification of diagonal to add MF scheme 193 IF ( ln_zdfmfc ) THEN 194 CALL diag_mfc( zwi, zwd, zws, p2dt, Kaa ) 195 END IF 196 ! 191 197 !! Matrix inversion from the first level 192 198 !!---------------------------------------------------------------------- … … 217 223 ENDIF 218 224 ! 225 ! Modification of rhs to add MF scheme 226 IF ( ln_zdfmfc ) THEN 227 CALL rhs_mfc( pt(:,:,:,jn,Krhs), jn ) 228 END IF 229 ! 219 230 DO_2D( 0, 0, 0, 0 ) !* 2nd recurrence: Zk = Yk - Ik / Tk-1 Zk-1 220 231 pt(ji,jj,1,jn,Kaa) = e3t(ji,jj,1,Kbb) * pt(ji,jj,1,jn,Kbb) & 221 & + p2dt * e3t(ji,jj,1,Kmm) * pt(ji,jj,1,jn,Krhs) 232 & + p2dt * e3t(ji,jj,1,Kmm) * pt(ji,jj,1,jn,Krhs) 222 233 END_2D 223 234 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) -
NEMO/branches/2020/dev_r2052_ENHANCE-09_rbourdal_massfluxconvection/src/OCE/ZDF/zdf_oce.F90
r10425 r13826 40 40 LOGICAL , PUBLIC :: ln_zdfswm !: surface wave-induced mixing flag 41 41 LOGICAL , PUBLIC :: ln_zdfiwm !: internal wave-induced mixing flag 42 LOGICAL , PUBLIC :: ln_zdfmfc !: convection: eddy diffusivity Mass Flux Convection 42 43 ! ! coefficients 43 44 REAL(wp), PUBLIC :: rn_avm0 !: vertical eddy viscosity (m2/s) -
NEMO/branches/2020/dev_r2052_ENHANCE-09_rbourdal_massfluxconvection/src/OCE/ZDF/zdfphy.F90
r13558 r13826 21 21 USE zdfddm ! vertical physics: double diffusion mixing 22 22 USE zdfevd ! vertical physics: convection via enhanced vertical diffusion 23 USE zdfmfc ! vertical physics: Mass Flux Convection 23 24 USE zdfiwm ! vertical physics: internal wave-induced mixing 24 25 USE zdfswm ! vertical physics: surface wave-induced mixing … … 78 79 NAMELIST/namzdf/ ln_zdfcst, ln_zdfric, ln_zdftke, ln_zdfgls, & ! type of closure scheme 79 80 & ln_zdfosm, & ! type of closure scheme 81 & ln_zdfmfc, & ! convection : mass flux 80 82 & ln_zdfevd, nn_evdm, rn_evd , & ! convection : evd 81 83 & ln_zdfnpc, nn_npc , nn_npcp, & ! convection : npc … … 112 114 WRITE(numout,*) ' OSMOSIS-OBL closure (OSM) ln_zdfosm = ', ln_zdfosm 113 115 WRITE(numout,*) ' convection: ' 116 WRITE(numout,*) ' convection mass flux (mfc) ln_zdfmfc = ', ln_zdfmfc 114 117 WRITE(numout,*) ' enhanced vertical diffusion ln_zdfevd = ', ln_zdfevd 115 118 WRITE(numout,*) ' applied on momentum (=1/0) nn_evdm = ', nn_evdm … … 172 175 IF( ln_zdfnpc .AND. ln_zdfevd ) CALL ctl_stop( 'zdf_phy_init: chose between ln_zdfnpc and ln_zdfevd' ) 173 176 IF( ln_zdfosm .AND. ln_zdfevd ) CALL ctl_stop( 'zdf_phy_init: chose between ln_zdfosm and ln_zdfevd' ) 177 IF( ln_zdfmfc .AND. ln_zdfevd ) CALL ctl_stop( 'zdf_phy_init: chose between ln_zdfmfc and ln_zdfevd' ) 178 IF( ln_zdfmfc .AND. ln_zdfnpc ) CALL ctl_stop( 'zdf_phy_init: chose between ln_zdfmfc and ln_zdfnpc' ) 179 IF( ln_zdfmfc .AND. ln_zdfosm ) CALL ctl_stop( 'zdf_phy_init: chose between ln_zdfmfc and ln_zdfosm' ) 174 180 IF( lk_top .AND. ln_zdfnpc ) CALL ctl_stop( 'zdf_phy_init: npc scheme is not working with key_top' ) 175 181 IF( lk_top .AND. ln_zdfosm ) CALL ctl_stop( 'zdf_phy_init: osmosis scheme is not working with key_top' ) … … 178 184 IF ( ln_zdfnpc ) THEN ; WRITE(numout,*) ' ==>>> convection: use non penetrative convective scheme' 179 185 ELSEIF( ln_zdfevd ) THEN ; WRITE(numout,*) ' ==>>> convection: use enhanced vertical diffusion scheme' 186 ELSEIF( ln_zdfmfc ) THEN ; WRITE(numout,*) ' ==>>> convection: use Mass Flux scheme' 180 187 ELSE ; WRITE(numout,*) ' ==>>> convection: no specific scheme used' 181 188 ENDIF … … 205 212 ELSE ; l_zdfsh2 = .TRUE. 206 213 ENDIF 207 214 ! !== Mass Flux Convectiive algorithm ==! 215 IF( ln_zdfmfc ) CALL zdf_mfc_init ! Convection computed with eddy diffusivity mass flux 216 ! 208 217 ! !== gravity wave-driven mixing ==! 209 218 IF( ln_zdfiwm ) CALL zdf_iwm_init ! internal wave-driven mixing -
NEMO/branches/2020/dev_r2052_ENHANCE-09_rbourdal_massfluxconvection/src/OCE/step.F90
r13237 r13826 262 262 #endif 263 263 CALL tra_adv ( kstp, Nbb, Nnn, ts, Nrhs ) ! hor. + vert. advection ==> RHS 264 IF( ln_zdfmfc ) CALL tra_mfc ( kstp, Nbb, ts, Nrhs ) ! Mass Flux Convection 264 265 IF( ln_zdfosm ) CALL tra_osm ( kstp, Nnn, ts, Nrhs ) ! OSMOSIS non-local tracer fluxes ==> RHS 265 266 IF( lrst_oce .AND. ln_zdfosm ) & -
NEMO/branches/2020/dev_r2052_ENHANCE-09_rbourdal_massfluxconvection/src/OCE/step_oce.F90
r12377 r13826 69 69 USE zdfphy ! vertical physics manager (zdf_phy_init routine) 70 70 USE zdfosm , ONLY : osm_rst, dyn_osm, tra_osm ! OSMOSIS routines used in step.F90 71 USE zdfmfc ! Mass FLux Convection routine used in step.F90 71 72 72 73 USE diu_layers ! diurnal SST bulk and coolskin routines
Note: See TracChangeset
for help on using the changeset viewer.