840 likes | 864 Views
DTDM is a 2D compressible model that demonstrates various phenomena like gravity waves, convective rolls, and sea-breeze circulations. It is free and portable, showcasing simple simulations for educational purposes. The model allows for input script-driven customization and explores thermodynamical phenomena through hands-on package. While not a sophisticated model, DTDM offers a valuable tool for learning basic dynamics and thermodynamics principles.
E N D
Dynamics and Thermodynamics Demonstration Model(DTDM) Robert Fovell University of California, Los Angeles rfovell@ucla.edu
DTDM home page http://www.atmos.ucla.edu/~fovell/DTDM/ or http://tinyurl.com/nhoj6 Files: DTDM_package.tar [< 1 MB] DTDM_examples.tar.gz [600 MB, expands to 1 GB] Extract: tar -xvf DTDM_package.tar tar -zxvf DTDM_examples.tar.gz
DTDM is… • A very simple, 2D compressible model • Free, portable: Fortran 77 (g77) and GrADS • Demonstrates gravity waves, sea-breeze circulations, convective rolls, KHI, etc. • Options for including heat and momentum sources, surface fluxes, cold pools, etc. • Input script driven… may not need to modify code
What DTDM is not… • Not a sophisticated model • Second-order numerics, primitive physics • Crude boundary conditions • Not guaranteed bug-free • Not always physically accurate or realistic • Some parameters, processes may be exaggerated for demonstration purposes and/or computational efficiency • Not complete or research-quality
DTDM features • Model prognostic variables: • Wind components: u, w, v (when Coriolis active) • Potential temperature: • Nondimensional pressure: • Environmental settings • Brunt-Vaisala frequency of boundary layer, free troposphere and stratosphere • Up to 3 layers for vertical shear • Latitude (for Coriolis parameter) • Numerical settings • Horizontal and vertical diffusion • Temporal diffusion • Wave speed for open lateral boundaries • Speed of sound
DTDM features • Source terms • Momentum source, configurable as single or repeated, steady or oscillatory • Heat source, steady or oscillatory • Surface heat flux • Sea-breeze-specific heat source • Lower tropospheric cooling zone and/or impulsive cold block • Impulsive thermal • Creates GrADS output
DTDM rationale and use • Demonstrate physical and thermodynamical phenomena with simple simulations • Stills, animations, decomposing forcing fields, etc. • Provide a hands-on package suitable for homeworks, labs • Easily runs on Unix and Unix-like systems (Linux, Mac OS X, Suns, etc.) • Next generation • Java or C++? • Web-based? • Implement using WRF? • Namelist input (done as of July 2006 version)
DTDM package DTDM_package.tar • DTDM_model.f ~ program • storage.txt ~ defines arrays • Makefile • If storage.txt modifed, touch DTDM_model.f and make again • Model input scripts (input_*.txt) • GrADS plotting scripts (*.gs)
storage.txt c max array dimensions parameter(nxm=503,nzm=122,ny=1) ! requires nx <= nxm, nz <= nzm nxm, nzm are max values of horizontal dimensions nx and nz
Makefile # Mac OS X (PPC) with IBM xlf #FC = xlf #FCFLAGS = -O3 -C -Wl,-stack_size,10000000,-stack_addr,0xc0000000 # Linux with Intel compiler #FC = ifort #FCFLAGS = -O3 -convert big_endian # Linux with Portland Group compiler FC = pgf77 FCFLAGS = -O3 -byteswapio SOURCES=src/DTDM_model.f src/blktri.f OBJS= $(SOURCES:.f=.o) dtdm: $(OBJS) $(FC) $(FCFLAGS) -o $@ $(OBJS)
How to run • Edit Makefile - make sure correct lines are uncommented • Execute ./make (executable is dtdm) • Edit input.txt file (many examples included) • First line specifies name of GrADS output • ./dtdm < input.txt • Output are GrADS control (.ctl) and data (.dat) files • Do NOT use “>” symbol by accident!
New for July, 2006, version • Namelist input replaces previous input scripts • Anelastic model option installed • Warning: not all combinations of model physics switches and parameters have been tried; bugs may remain • Many input scripts set up with sound speed csnd = 50 m/s, which is far, far too small • In many cases, this permits much faster integration without fundamentally altering results
Statospheric gravity waves produced by obstacles (convective cells)Reference: Fovell, Durran and Holton (1992, J. Atmos. Sci.)** **references to my papers illustrate my interest in these phenomena
input_strfcn_isolated_nowind.txt c=================================================================== c c The experiment namelist sets the casename for naming the c GrADS output. Max 72 characters and avoid using underscores. c Enter filename within single quotes (e.g., 'test.number.1') c c=================================================================== &experiment casename = 'strfcn.isolated.1200sec.nowind', $ First namelist section sets experiment name (casename) Names used for GrADS files limited to 76 characters; avoid underscores with GrADS
input_strfcn_isolated_nowind.txt c=================================================================== c c The grid_run namelist specifies model dimensions, integration c length, and plotting output interval c c nx - number of horizontal grid points - max NXM in storage.txt c default is 101 c nz - number of vertical grid points - max NZM in storage.txt c default is 84 c dx - horizontal grid spacing (m; default = 1000.) c dz - vertical grid spacing (m; default = 250.) c dt - time step (s; default = 1.0) c timend - integration stop time (s; default = 7200.) c plot - plotting interval (s; default = 300.) c * if interval < 60 sec, GrADS will report time incorrectly c=================================================================== &grid_run nx = 101, nz = 122, dx = 1000., dz = 250., dt = 1.0, timend = 7200., plot = 60., $
input_strfcn_isolated_nowind.txt&environsection c=================================================================== c c The environ namelist sets up the model initial state c c bvpbl - PBL tropospheric BV freq (1$s; default = 0.01) c pbld - PBL depth (m; default = 2000.) c bvtropo - free tropospheric BV freq (1$s; default = 0.01) c tropo - tropopause height (m; default = 12000.) c bvstrat - stratospheric BV freq (1$s; default = 0.02) c psurf - surface pressure (mb; default = 965.) c usurf - surface wind speed (m$s; default = 0.) c shear1 - vertical shear for first layer (1$s; default = 0.) c depth1 - thickness of first layer (m; default = 3000.) c shear2 - vertical shear for second layer (1$s; default = 0.) c depth2 - thickness of second layer (m; default = 1500.) c shear3 - vertical shear above second layer (1$s; default = 0.) c * this layer extends to model top c c===================================================================
input_strfcn_isolated_nowind.txt&environsection &environ bvpbl = 0.002, pbld = 2000., bvtropo = 0.01, tropo = 12000., bvstrat = 0.02, psurf = 965., usurf = 0., shear1 = 0., sdepth1 = 3000., shear2 = 0., sdepth2 = 1500., shear3 = 0., $
input_strfcn_isolated_nowind.txt&streamfunctionsection c=================================================================== c c The streamfunction namelist sets up a momentum source used c to excite gravity waves. The source may be isolated or repeated, c oscillatory or steady c c istrfcn (1 = turn streamfunction forcing on; default is 0) c s_repeat(1 for repeated source, 0 for single source; default 0) c s_ampl - amplitude of momentum source (kg$m/s/s; default = 40.) c s_naught - height of source center (m; default = 6000.) c s_hwavel - horizontal wavelength of source (m; default = 40000.) c s_vwavel - vertical wavelength of source (m; default = 18000.) c s_period - oscillation period (s; default = 1200.) c c=================================================================== &streamfunction istrfcn = 1, s_repeat = 0, s_ampl = 40., s_znaught = 6000., s_hwavel = 10000., s_vwavel = 18000., s_period = 1200., $ dtdm < input_strfcn_isolated_nowind.txt
Initial conditions Note: aspect ratio not 1:1
Animation (strfcn_isolated_movie.gs) s_period = 1200 sec For this run: bvpbl = .01 (only part of model depth shown) Note: aspect ratio not 1:1
Invoking GrADS • gradsnc -l • “-l” requests landscape-oriented window • Opens a GrADS graphics window • GrADS prompt is “ga->” • ga-> open strfcn.isolated.1200sec.nowind • Tab completion works! • ga-> strfcn_isolated_movie.gs • Executes a GrADS script (gs)
Varying oscillation period(strfcn_isolated.gs) Only part of domain is shown Note: aspect ratio not 1:1
Inside a GrADS script(strfcn_isolated.gs) 'set gxout shaded' 'set xaxis 34 64 4' 'set yaxis 10 16 2' 'set clevs -2.5 -2.0 -1.5 -1.0 -0.5 0 0.5 1.0 1.5 2.0 2.5' 'set ccols 49 47 45 43 41 0 61 62 63 65 67 69' 'd thp' 'cbarn 1.0 0 6.0' 'set gxout contour' 'set cmax 2.4' 'set cmin -2.4' 'set cint 0.4' 'd w' 'set mproj off' 'set display color white' * changes aspect ratio of plot 'set vpage 0.5 11.0 0.5 5' 'clear' 'set grads off' 'set lev 10 16' 'set lon 24 74 ' 'run rgbset.gs’ Continues…
Executing this GrADS script gradsnc -l ga-> open strfcn.isolated.1200sec.nowind ga-> q file File 1 : DTDM demo simulation Descriptor: strfcn.isolated.1200sec.nowind.ctl Binary: strfcn.isolated.1200sec.nowind.dat Type = Gridded Xsize = 99 Ysize = 1 Zsize = 120 Tsize = 121 Number of Variables = 9 u 120 0 horizontal velocity up 120 0 pert horizontal velocity w 120 0 vertical velocity th 120 0 potential temperature thp 120 0 pert potential temperature pi 120 0 ndim pressure pip 120 0 pert ndim pressure ppmb 120 0 pert pressure in millibars str 120 0 streamfunction ga-> set t 115 ga-> strfcn_isolated
Gravity waves Period and frequency Intrinsic frequency & mean flow Wavelength and wavenumber Dispersion relation
Gravity waves Dispersion relation Tilt angle from vertical
Adding flow relative to momentum sourceinput_strfcn_isolated_up4.txt &environ bvpbl = 0.01, pbld = 2000., bvtropo = 0.01, tropo = 12000., bvstrat = 0.02, psurf = 965., usurf = 0., shear1 = 0., sdepth1 = 8000., shear2 = 0.002, sdepth2 = 2000., shear3 = 0., $ Shear = 0.002 over 2000 m = ∆U = 4 m/s Shear = 0.004 yields ∆U = 8 m/s dtdm < input_strfcn_isolated_up4.txt
Flow relative to obstacle Height z Wind U
Flow relative to obstacle(period = 1200 sec) U = 0 U = 4 m/s U = 8 m/s Note: aspect ratio not 1:1
Further exploration • Measure phase angles, compare to theory • Perhaps alter plot aspect ratio to 1:1 • Vary source frequency, amplitude, width • Vary environmental stability, wind and wind shear
Obstacle-effect gravity wavesabove convective rolls Reference: Fovell (2004, Mon. Wea. Rev.)
input_strfcn_rolls.txt&environsection usurf = 0., shear1 = 0., sdepth1 = 1800., shear2 = -0.0036, sdepth2 = 2500., shear3 = 0., Zero shear below 1.8 km -9 m/s of wind speed difference between 1.8 and 4.3 km
input_strfcn_rolls.txt &streamfunction istrfcn = 1, s_repeat = 1, s_ampl = .40, s_znaught = 1000., s_hwavel = 10000., s_vwavel = 6000., s_period = 0., $ s_repeat= 1 for repeated source s_period=0 for steady momentum source
Initial conditions dtdm < input_strfcn_rolls.txt
Varying flow above obstacle(strfcn_rolls.gs) u = -3 m/s u = -6 m/s u = -9 m/s Note: aspect ratio not 1:1
Gravity waves excited by heat sources References: Fovell (2002, QJRMS), Fovell, Mullendore and Kim (2006, Mon. Wea. Rev.) Nicholls et al. (1991, J. Atmos. Sci.) Mapes (1993, J. Atmos. Sci.)
input_hsrc.txt &environ bvpbl = 0.00, pbld = 1500., bvtropo = 0.01, tropo = 12000., bvstrat = 0.02, psurf = 965., usurf = 0., shear1 = 0., sdepth1 = 1800., shear2 = 0., sdepth2 = 2500., shear3 = 0., $ &experiment casename = 'hsrc.2mode.no.oscil', $ &grid_run nx = 101, nz = 84, dx = 1000., dz = 250., dt = 2.0, timend = 6000., plot = 60., $
input_hsrc.txt c=================================================================== c c The atmos_heat_source namelist sets up a free tropospheric heat source c used to excite gravity waves. The source may be oscillatory or steady c c ihsrc (1 = turn tropospheric heat source on; default is 0) c h_ampl - amplitude of heat source (K$s; default = 0.075) c h_radius_x - horizontal radius of heat source (m; default = 3000.) c h_radius_z - vertical radius of heat source (m; default = 3000.) c h_center_z - height of heat source center (m; default = 3000.) c h_freq - frequency for heat source oscillation (1$s; default = 0.005) c h_modes - number of vertical modes (ndim, max 2; default = 2) c c=================================================================== &atmos_heat_source ihsrc = 1, h_ampl = 0.025, h_radius_x = 3000., h_radius_z = 3000., h_center_z = 3000., h_freq = 0.000, h_modes = 2, $
Heating profiles For heat source depth H 1st mode H = 6000 m (2 x h_radius_z) 2nd mode H = 3000 m
A simple sea-breeze circulation Reference: Dailey and Fovell (1999, Mon. Wea. Rev.)
Simple sea-breeze strategy • Add a surface heat flux for part of domain (“land”) • Large vertical diffusion as proxy for boundary layer mixing • One use: to investigate effect of offshore or onshore wind on lifting and propagation of sea-breeze front
input_sbf_no_rolls.txt &experiment casename = 'sbf.noroll.nowind', $ &grid_run nx = 301, nz = 26, dx = 1000., dz = 400., dt = 1.0, timend = 18000., plot = 300., $ &framework csnd = 50., $ &numerics cstar = 100., dkx = 1500., dkz = 100., $ Coarse resolution large diffusion suppresses noise and mixes surface heating vertically
input_sbf_no_rolls.txt c=================================================================== c c The surface_flux namelist sets up at least part of a domain c to represent a heated surface, to heat atmosphere from below c c ishflux (1 = turn surface heat flux on; default is 0) c tdelt - initial ground-air T difference (K; default = 12) c icoast - gridpt location of coastline (0 for all land; default = 30) c cdh - effective heat flux coefficient (ndim; default = 7.2e-3) c irand - (1 = impose randomness on surface heat flux; default is 0) c c=================================================================== &surface_flux ishflux = 1, tdelt = 12., icoast = 90, cdh = 7.2e-3, irand = 0, $ Coastline 90 grid points from left side (of 301 total) Large cdh reflects unstable conditions; No imposed random perturbations (irand=0)
Cases Surface wind speed = -3, 0 and +3 m/s
Offshore case animation(sbf_movie.gs) Colored: vertical velocity Contoured: perturbation horizontal velocity