Changeset 14010
- Timestamp:
- 2020-12-02T15:45:22+01:00 (4 years ago)
- Location:
- NEMO/trunk
- Files:
-
- 11 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk/cfgs/SHARED/field_def_nemo-oce.xml
r13476 r14010 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/trunk/cfgs/SHARED/namelist_ref
r14007 r14010 1115 1115 nn_npc = 1 ! frequency of application of npc 1116 1116 nn_npcp = 365 ! npc control print frequency 1117 ln_zdfmfc = .false. ! Mass Flux Convection 1117 1118 ! 1118 1119 ln_zdfddm = .false. ! double diffusive mixing … … 1227 1228 ! ! = 1: Pierson Moskowitz wave spectrum 1228 1229 ! ! = 0: Constant La# = 0.3 1230 / 1231 !----------------------------------------------------------------------- 1232 &namzdf_mfc ! Mass Flux Convection 1233 !----------------------------------------------------------------------- 1234 ln_edmfuv = .false. ! Activate on velocity fields (Not available yet) 1235 rn_cemf = 1. ! entrain/detrain coef. (<0 => cte; >0 % depending on dW/dz 1236 rn_cwmf = -0. ! entrain/detrain coef. (<0 => cte; >0 % depending on dW/dz 1237 rn_cent = 2.e-5 ! entrain of convective area 1238 rn_cdet = 3.e-5 ! detrain of convective area 1239 rn_cap = 0.9 ! Coef. for CAP estimation 1240 App_max = 0.1 ! Maximum convection area (% of the cell) 1229 1241 / 1230 1242 !----------------------------------------------------------------------- -
NEMO/trunk/src/OCE/C1D/step_c1d.F90
r13802 r14010 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) THEN 125 ssh(:,:,Naa) = ssh(:,:,Nnn) ! init ssh after in ln_linssh case 125 IF( kstp == nit000 .AND. ln_linssh) THEN 126 ssh(:,:,Naa) = ssh(:,:,Nnn) ! init ssh after in ln_linssh case 126 127 ENDIF 127 128 ! -
NEMO/trunk/src/OCE/TRA/eosbn2.F90
r13982 r14010 56 56 ! !! * Interface 57 57 INTERFACE eos 58 MODULE PROCEDURE eos_insitu, eos_insitu_pot, eos_insitu_2d 58 MODULE PROCEDURE eos_insitu, eos_insitu_pot, eos_insitu_2d, eos_insitu_pot_2d 59 59 END INTERFACE 60 60 ! … … 576 576 577 577 578 SUBROUTINE eos_insitu_pot_2d( pts, prhop ) 579 !!---------------------------------------------------------------------- 580 !! *** ROUTINE eos_insitu_pot *** 581 !! 582 !! ** Purpose : Compute the in situ density (ratio rho/rho0) and the 583 !! potential volumic mass (Kg/m3) from potential temperature and 584 !! salinity fields using an equation of state selected in the 585 !! namelist. 586 !! 587 !! ** Action : 588 !! - prhop, the potential volumic mass (Kg/m3) 589 !! 590 !!---------------------------------------------------------------------- 591 REAL(wp), DIMENSION(jpi,jpj,jpts), INTENT(in ) :: pts ! 1 : potential temperature [Celsius] 592 ! ! 2 : salinity [psu] 593 REAL(wp), DIMENSION(jpi,jpj ), INTENT( out) :: prhop ! potential density (surface referenced) 594 ! 595 INTEGER :: ji, jj, jk, jsmp ! dummy loop indices 596 INTEGER :: jdof 597 REAL(wp) :: zt , zh , zstemp, zs , ztm ! local scalars 598 REAL(wp) :: zn , zn0, zn1, zn2, zn3 ! - - 599 REAL(wp), DIMENSION(:), ALLOCATABLE :: zn0_sto, zn_sto, zsign ! local vectors 600 !!---------------------------------------------------------------------- 601 ! 602 IF( ln_timing ) CALL timing_start('eos-pot') 603 ! 604 SELECT CASE ( neos ) 605 ! 606 CASE( np_teos10, np_eos80 ) !== polynomial TEOS-10 / EOS-80 ==! 607 ! 608 DO_2D( 1, 1, 1, 1 ) 609 ! 610 zt = pts (ji,jj,jp_tem) * r1_T0 ! temperature 611 zs = SQRT( ABS( pts(ji,jj,jp_sal) + rdeltaS ) * r1_S0 ) ! square root salinity 612 ztm = tmask(ji,jj,1) ! tmask 613 ! 614 zn0 = (((((EOS060*zt & 615 & + EOS150*zs+EOS050)*zt & 616 & + (EOS240*zs+EOS140)*zs+EOS040)*zt & 617 & + ((EOS330*zs+EOS230)*zs+EOS130)*zs+EOS030)*zt & 618 & + (((EOS420*zs+EOS320)*zs+EOS220)*zs+EOS120)*zs+EOS020)*zt & 619 & + ((((EOS510*zs+EOS410)*zs+EOS310)*zs+EOS210)*zs+EOS110)*zs+EOS010)*zt & 620 & + (((((EOS600*zs+EOS500)*zs+EOS400)*zs+EOS300)*zs+EOS200)*zs+EOS100)*zs+EOS000 621 ! 622 ! 623 prhop(ji,jj) = zn0 * ztm ! potential density referenced at the surface 624 ! 625 END_2D 626 627 CASE( np_seos ) !== simplified EOS ==! 628 ! 629 DO_2D( 1, 1, 1, 1 ) 630 zt = pts (ji,jj,jp_tem) - 10._wp 631 zs = pts (ji,jj,jp_sal) - 35._wp 632 ztm = tmask(ji,jj,1) 633 ! ! potential density referenced at the surface 634 zn = - rn_a0 * ( 1._wp + 0.5_wp*rn_lambda1*zt ) * zt & 635 & + rn_b0 * ( 1._wp - 0.5_wp*rn_lambda2*zs ) * zs & 636 & - rn_nu * zt * zs 637 prhop(ji,jj) = ( rho0 + zn ) * ztm 638 ! 639 END_2D 640 ! 641 END SELECT 642 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab2d_1=prhop, clinfo1=' pot: ', kdim=1 ) 643 ! 644 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab2d_1=prhop, clinfo1=' eos-pot: ' ) 645 ! 646 IF( ln_timing ) CALL timing_stop('eos-pot') 647 ! 648 END SUBROUTINE eos_insitu_pot_2d 649 650 578 651 SUBROUTINE rab_3d( pts, pab, Kmm ) 579 652 !! -
NEMO/trunk/src/OCE/TRA/trazdf.F90
r13982 r14010 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 … … 198 199 ENDIF 199 200 ! 201 ! Modification of diagonal to add MF scheme 202 IF ( ln_zdfmfc ) THEN 203 CALL diag_mfc( zwi, zwd, zws, p2dt, Kaa ) 204 END IF 205 ! 200 206 !! Matrix inversion from the first level 201 207 !!---------------------------------------------------------------------- … … 226 232 ENDIF 227 233 ! 234 ! Modification of rhs to add MF scheme 235 IF ( ln_zdfmfc ) THEN 236 CALL rhs_mfc( pt(:,:,:,jn,Krhs), jn ) 237 END IF 238 ! 228 239 DO_2D( 0, 0, 0, 0 ) !* 2nd recurrence: Zk = Yk - Ik / Tk-1 Zk-1 229 240 pt(ji,jj,1,jn,Kaa) = e3t(ji,jj,1,Kbb) * pt(ji,jj,1,jn,Kbb) & 230 & + p2dt * e3t(ji,jj,1,Kmm) * pt(ji,jj,1,jn,Krhs) 241 & + p2dt * e3t(ji,jj,1,Kmm) * pt(ji,jj,1,jn,Krhs) 231 242 END_2D 232 243 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) -
NEMO/trunk/src/OCE/ZDF/zdf_oce.F90
r10425 r14010 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/trunk/src/OCE/ZDF/zdfphy.F90
r13558 r14010 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' ) 182 IF( lk_top .AND. ln_zdfmfc ) CALL ctl_stop( 'zdf_phy_init: Mass Flux scheme is not working with key_top' ) 176 183 IF(lwp) THEN 177 184 WRITE(numout,*) 178 185 IF ( ln_zdfnpc ) THEN ; WRITE(numout,*) ' ==>>> convection: use non penetrative convective scheme' 179 186 ELSEIF( ln_zdfevd ) THEN ; WRITE(numout,*) ' ==>>> convection: use enhanced vertical diffusion scheme' 187 ELSEIF( ln_zdfmfc ) THEN ; WRITE(numout,*) ' ==>>> convection: use Mass Flux scheme' 180 188 ELSE ; WRITE(numout,*) ' ==>>> convection: no specific scheme used' 181 189 ENDIF … … 205 213 ELSE ; l_zdfsh2 = .TRUE. 206 214 ENDIF 207 215 ! !== Mass Flux Convectiive algorithm ==! 216 IF( ln_zdfmfc ) CALL zdf_mfc_init ! Convection computed with eddy diffusivity mass flux 217 ! 208 218 ! !== gravity wave-driven mixing ==! 209 219 IF( ln_zdfiwm ) CALL zdf_iwm_init ! internal wave-driven mixing -
NEMO/trunk/src/OCE/step.F90
r13982 r14010 296 296 297 297 CALL tra_adv ( kstp, Nbb, Nnn, ts, Nrhs ) ! hor. + vert. advection ==> RHS 298 IF( ln_zdfmfc ) CALL tra_mfc ( kstp, Nbb, ts, Nrhs ) ! Mass Flux Convection 298 299 IF( ln_zdfosm ) CALL tra_osm ( kstp, Nnn, ts, Nrhs ) ! OSMOSIS non-local tracer fluxes ==> RHS 299 300 IF( lrst_oce .AND. ln_zdfosm ) & -
NEMO/trunk/src/OCE/step_oce.F90
r13982 r14010 70 70 USE zdfphy ! vertical physics manager (zdf_phy_init routine) 71 71 USE zdfosm , ONLY : osm_rst, dyn_osm, tra_osm ! OSMOSIS routines used in step.F90 72 USE zdfmfc ! Mass FLux Convection routine used in step.F90 72 73 73 74 USE diu_layers ! diurnal SST bulk and coolskin routines -
NEMO/trunk/tests/ISOMIP+/MY_SRC/eosbn2.F90
r13982 r14010 56 56 ! !! * Interface 57 57 INTERFACE eos 58 MODULE PROCEDURE eos_insitu, eos_insitu_pot, eos_insitu_2d 58 MODULE PROCEDURE eos_insitu, eos_insitu_pot, eos_insitu_2d, eos_insitu_pot_2d 59 59 END INTERFACE 60 60 ! … … 624 624 625 625 626 SUBROUTINE eos_insitu_pot_2d( pts, prhop ) 627 !!---------------------------------------------------------------------- 628 !! *** ROUTINE eos_insitu_pot *** 629 !! 630 !! ** Purpose : Compute the in situ density (ratio rho/rho0) and the 631 !! potential volumic mass (Kg/m3) from potential temperature and 632 !! salinity fields using an equation of state selected in the 633 !! namelist. 634 !! 635 !! ** Action : 636 !! - prhop, the potential volumic mass (Kg/m3) 637 !! 638 !!---------------------------------------------------------------------- 639 REAL(wp), DIMENSION(jpi,jpj,jpts), INTENT(in ) :: pts ! 1 : potential temperature [Celsius] 640 ! ! 2 : salinity [psu] 641 REAL(wp), DIMENSION(jpi,jpj ), INTENT( out) :: prhop ! potential density (surface referenced) 642 ! 643 INTEGER :: ji, jj, jk, jsmp ! dummy loop indices 644 INTEGER :: jdof 645 REAL(wp) :: zt , zh , zstemp, zs , ztm ! local scalars 646 REAL(wp) :: zn , zn0, zn1, zn2, zn3 ! - - 647 REAL(wp), DIMENSION(:), ALLOCATABLE :: zn0_sto, zn_sto, zsign ! local vectors 648 !!---------------------------------------------------------------------- 649 ! 650 IF( ln_timing ) CALL timing_start('eos-pot') 651 ! 652 SELECT CASE ( neos ) 653 ! 654 CASE( np_teos10, np_eos80 ) !== polynomial TEOS-10 / EOS-80 ==! 655 ! 656 DO_2D( 1, 1, 1, 1 ) 657 ! 658 zt = pts (ji,jj,jp_tem) * r1_T0 ! temperature 659 zs = SQRT( ABS( pts(ji,jj,jp_sal) + rdeltaS ) * r1_S0 ) ! square root salinity 660 ztm = tmask(ji,jj,1) ! tmask 661 ! 662 zn0 = (((((EOS060*zt & 663 & + EOS150*zs+EOS050)*zt & 664 & + (EOS240*zs+EOS140)*zs+EOS040)*zt & 665 & + ((EOS330*zs+EOS230)*zs+EOS130)*zs+EOS030)*zt & 666 & + (((EOS420*zs+EOS320)*zs+EOS220)*zs+EOS120)*zs+EOS020)*zt & 667 & + ((((EOS510*zs+EOS410)*zs+EOS310)*zs+EOS210)*zs+EOS110)*zs+EOS010)*zt & 668 & + (((((EOS600*zs+EOS500)*zs+EOS400)*zs+EOS300)*zs+EOS200)*zs+EOS100)*zs+EOS000 669 ! 670 ! 671 prhop(ji,jj) = zn0 * ztm ! potential density referenced at the surface 672 ! 673 END_2D 674 675 CASE( np_seos ) !== simplified EOS ==! 676 ! 677 DO_2D( 1, 1, 1, 1 ) 678 zt = pts (ji,jj,jp_tem) - 10._wp 679 zs = pts (ji,jj,jp_sal) - 35._wp 680 ztm = tmask(ji,jj,1) 681 ! ! potential density referenced at the surface 682 zn = - rn_a0 * ( 1._wp + 0.5_wp*rn_lambda1*zt ) * zt & 683 & + rn_b0 * ( 1._wp - 0.5_wp*rn_lambda2*zs ) * zs & 684 & - rn_nu * zt * zs 685 prhop(ji,jj) = ( rho0 + zn ) * ztm 686 ! 687 END_2D 688 ! 689 CASE( np_leos ) !== ISOMIP EOS ==! 690 ! 691 DO_2D( 1, 1, 1, 1 ) 692 ! 693 zt = pts (ji,jj,jp_tem) - (-1._wp) 694 zs = pts (ji,jj,jp_sal) - 34.2_wp 695 !zh = pdep (ji,jj) ! depth at the partial step level 696 ! 697 zn = rho0 * ( - rn_a0 * zt + rn_b0 * zs ) 698 ! 699 prhop(ji,jj) = zn * r1_rho0 ! unmasked in situ density anomaly 700 ! 701 END_2D 702 ! 703 END SELECT 704 ! 705 IF(sn_cfctl%l_prtctl) CALL prt_ctl( tab2d_1=prhop, clinfo1=' eos-pot: ' ) 706 ! 707 IF( ln_timing ) CALL timing_stop('eos-pot') 708 ! 709 END SUBROUTINE eos_insitu_pot_2d 710 711 626 712 SUBROUTINE rab_3d( pts, pab, Kmm ) 627 713 !! -
NEMO/trunk/tests/demo_cfgs.txt
r13999 r14010 12 12 STATION_ASF OCE 13 13 CPL_OASIS OCE TOP ICE NST 14 C1D_ASICS OCE 14 15 ICE_RHEO OCE SAS ICE
Note: See TracChangeset
for help on using the changeset viewer.