Transcript Document

Dynamics and Thermodynamics
Demonstration Model
(DTDM)
Robert Fovell
University of California, Los Angeles
[email protected]
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
&environ section
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
&environ section
&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
&streamfunction section
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
Streamfunction 
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 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…
'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'
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 source
input_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 waves
above convective rolls
Reference: Fovell (2004, Mon. Wea. Rev.)
input_strfcn_rolls.txt
&environ section
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
&experiment
casename = 'hsrc.2mode.no.oscil',
$
&grid_run
nx = 101,
nz = 84,
dx = 1000.,
dz = 250.,
dt = 2.0,
timend = 6000.,
plot = 60.,
$
&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.,
$
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
Results
(hsrc.gs)
Animations
(hsrc_movie.gs)
Phase speed…
Animation
h_freq = 0.005 [~ 21 min]
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
Mean flow effect on seabreeze
(sbf_noroll.gs)
3 m/s offshore
No mean flow
3 m/s onshore
Perturbation u
(contoured)
and w (shaded);
Aspect ratio not 1:1
Sea-breeze with “rolls”
• irand = 1 superimposes random
perturbations on surface heat flux
– Encourages 2D pseudo-roll circulations
– In reality, rolls are 3D organized by alongroll shear
– Two-dimensionality provides an
(overpowering) organization mechanism
• input_sbf_with_rolls.txt
Vertical velocity
(sbfhcr.gs)
set t 20
sbfhcr.gs
Added horizontal velocity
set ccolor 1
set cthick 6
d up
Added airflow vectors
set ccolor 1
d u;w
Animation
(sbfhcr_movie.gs)
Effect of Coriolis on the seabreeze circulation
Reference: Rotunno (1983, J. Atmos. Sci.)
Long-term sea-breeze
strategy
• Add a lower tropospheric heat source
(Rotunno 1983), mimicking effect of
surface heating + vertical mixing
• Reduce vertical diffusion
• Simulations start at sunrise
• One use: to investigate effect of latitude
and/or linearity on onshore flow, timing
and circulation strength
input_seabreeze.txt
&rotunno_seabreeze section
c===================================================================
c
c The rotunno_seabreeze namelist implements a lower tropospheric
c heat source following Rotunno (1983), useful for long-term
c integrations of the sea-land-breeze circulation
c
c iseabreeze (1 = turn Rotunno heat source on; default is 0)
c sb_ampl - amplitude of heat source (K$s; default = 0.000175)
c sb_x0 - controls heat source shape at coastline (m; default = 1000.)
c sb_z0 - controls heat source shape at coastline (m; default = 1000.)
c sb_period - period of heating, in days (default = 1.0)
c sb_latitude - latitude for experiment (degrees; default = 60.)
c sb_linear (1 = linearize model; default = 1)
c
c===================================================================
input_seabreeze.txt
&rotunno_seabreeze section
&rotunno_seabreeze
iseabreeze = 1,
sb_ampl = 0.000175,
sb_x0 = 1000.,
sb_z0 = 1000.,
sb_period = 1.0,
sb_latitude = 30.,
sb_linear = 1,
$
sb_latitude ≠ 0 activates Coriolis
sb_linear = 1 linearizes the model
Other settings include:
dx = 2000 m, dz = 250 m, dt = 1 sec
dkx = dkz = 5 m2/s (since linear)
Cross-shore near-surface
wind at coastline (linear model)
Time series using GrADS
> open seabreeze.rotunno.00deg
> set t 1 289
> set z 1
> set x 100
> set vrange -25 25
> set xaxis 0 24 3
>du
> open seabreeze.rotunno.60deg
> d u.2
> open seabreeze.rotunno.30deg
> d u.3
Cross-shore flow and vertical
motion at noon
Shaded: vertical velocity; contoured: cross-shore velocity
(seabreeze.gs)
Cross-shore flow and vertical
motion at sunset
Cross-shore flow and vertical
motion at midnight
Hovmoller diagrams
(seabreeze_hov.gs)
Note lack of propagation
Further exploration
•
•
•
•
Make model nonlinear
Add mean flow and wind shear
Explain latitudinal dependence
Compare to actual data
Fun with cold pools
Reference: Fovell and Tan (2000, QJRMS)
Droegemeier and Wilhelmson (1987, J. Atmos. Sci.)
Cold pool options
• ICOOLZONE has two options
– ICOOLZONE = 1 for “storm-adaptive” cold pool…
maintained and stays aligned with gust front
– ICOOLZONE = 2 gives model impulsive block of
cold air
• Lower resolution - look at lifting
• Higher resolution - Kelvin-Helmholtz instability
• Either - compare buoyancy and dynamic components of
pressure field
Kelvin-Helmholtz Instability
(KHI)
• input_coldpool_hires.txt
– nx=501, nz=101, dx=dz=50 m, dt=0.125
sec, plotting interval 20 sec
• GrADS ctl file will misreport plot interval as 1
min
– ICOOLZONE=2, cz_width=4000 m,
cz_depth=2000 m
• coldpool.hires.ctl, coldpool.hires.dat
– Simulation takes a very long time
Animation
(khi_movie.gs)
Perturbation potential
temperature
(khi.gs)
Vertical velocity
Horizontal velocity
Airflow vectors
Perturbation pressure (p’)
Perturbation buoyancy
pressure (p’byc)
ipressure = 1
Enables calculation of buoyancy and dynamic pressure
components of perturbation pressure
Perturbation dynamic
pressure (p’dyn)
Pressure decomposition
equations
operation
Pressure decomposition
yields (if density constant)
where
and because pressure perturbation is separable
Solve for buoyancy and dynamic pressure perturbations;
dimensionalize to millibars
Comparing ppmb and ptot
ptot=
pbyc+pdyn
ppmb
ICOOLZONE = 1
(input_coolzone.txt &
coolzone_movie.gs)
Contact info:
help, bug reports, suggestions
Robert Fovell
Atmospheric and Oceanic Sciences
University of California, Los Angeles
405 Hilgard Ave
Los Angeles, CA 90095-1565
[email protected]
(310) 206-9956