wrf-model / WRF

The official repository for the Weather Research and Forecasting (WRF) model
Other
1.2k stars 665 forks source link

spurious waves when dz = constant in upper domain #1186

Open MicroTed opened 4 years ago

MicroTed commented 4 years ago

I posted in the forum back in February, so I'll try bumping it here:

https://forum.mmm.ucar.edu/phpBB3/viewtopic.php?f=58&t=8894

Basically, when I set up a vertical grid where dz becomes constant, waves with about 2km wavelength appear above about 10km. They show up best when the number of small steps is larger than needed for stability. (Equivalently, a smaller dt than needed also does the trick.) The waves (w) can grow large enough to cause model instability. Changing dz to a continuous stretch makes the waves disappear. Curious.

I generated the initial condition by having ideal.exe read in a sounding with set levels and use those exact levels (well, pretty close).

I have a couple ideal wrf inputs here:

https://www.nssl.noaa.gov/users/mansell/public_html/wrf/n67waves.tgz

https://www.nssl.noaa.gov/users/mansell/public_html/wrf/n67nowaves.tgz

(Our ftp site is not responding at the moment.) The same phenomenon shows up in both 3.9.1.1 and 4.1.3 (the two that we've tested).

Any ideas? I'm guessing few people have set up WRF this way.

weiwangncar commented 4 years ago

@MicroTed You mentioned in your Forum posting that when you set up the experiment,dz > dx. I assume that you've also done experiment where your constant dz is less than dx. If you did, what happens there?

MicroTed commented 4 years ago

I don't recall off-hand. I'll need to rerun that. (The files are on a storage that is currently offline.)

On May 2, 2020, at 4:00 PM, weiwangncar notifications@github.com wrote:

@MicroTed You mentioned in your Forum posting that when you set up the experiment,dz > dx. I assume that you've also done experiment where your constant dz is less than dx. If you did, what happens there?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or unsubscribe.

MicroTed commented 4 years ago

@weiwangncar I've done a couple dx=1km tests, and the problem does not seem to appear with maximum dz=700m. The examples in the links used dx=500m.

For otherwise the same settings, a test with dx=700 makes the waves. Still there with dx=750m, but slightly slower growth and w_max at +/-18m/s. At dx=850, w_max is around 12 m/s (wavelength about 3dx). At dx = 950, w is down to 1 cm/s background noise and no obvious wave structure.

weiwangncar commented 4 years ago

@MicroTed Thanks for the testing. This is very interesting to know. There may be an explanation for this. We will see what we can find out.

weiwangncar commented 4 years ago

@MicroTed Do you have terrain in your set up?

MicroTed commented 4 years ago

No terrain. Just a flat domain using em_quarter_ss.

On May 3, 2020, at 11:01 PM, weiwangncar notifications@github.com wrote:

@MicroTed Do you have terrain in your set up?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or unsubscribe.

MicroTed commented 4 years ago

By the way, here is my custom ideal init:

https://www.nssl.noaa.gov/users/mansell/public_html/wrf/module_initialize_ideal.F

weiwangncar commented 4 years ago

@MicroTed Do you use damp_opt = 2 in these runs?

MicroTed commented 4 years ago

Yes: damp_opt = 2,

But I think we tested changing that and it didn't matter. (Namelist.input files are also in the tgz files)

weiwangncar commented 4 years ago

@MicroTed Ever tried damp_opt = 3?

MicroTed commented 4 years ago

@weiwangncar OK, I just tested that, and the behavior doesn't change. Maybe slows the initial growth a bit, but still reaches w up top 30 m/s.

Increasing dt from 1 to 3 eliminates the waves. Perhaps a time constant is involved?

weiwangncar commented 4 years ago

@MicroTed When there is no large waves in W, where does the max vertical motion occur? And when there is large wave in W, where does max W occur?

MicroTed commented 4 years ago

@weiwangncar Without the spurious waves, there are mainly just vertical plane waves of tiny amplitude. If I compile with -fp-model precise and use doubly-periodic boundary conditions, there is no noise generated, and with no other perturbation then nothing happens. I think there has to be at least a little noise for the waves grow from.

MicroTed commented 4 years ago

@weiwangncar Also, the links above include netcdf wrfout files if you'd like to have a look.

weiwangncar commented 4 years ago

@MicroTed I was asking the questions because it was noted that between the two setups, there are differences of model layer thickness near where the wave started. See the attached image which shows the layer thickness between the no-wave case (right) and wave case (left) . So let's assume one can keep the levels between level 45 to 53 the same as the no-wave case, and then makes levels above that as constant dz, would that make a difference?

dz

MicroTed commented 4 years ago

@weiwangncar I recall making a few tests with different heights where constant dz started, but I think it didn't matter. A colleague went back and looked at some simulations that had just a couple layers where the dz values were very close, and there were hints there of similar waves. (I didn't look at them myself, however). I suppose I could try to reproduce that.

weiwangncar commented 4 years ago

@MicroTed We would appreciate that if you could reproduce that. Thanks.

MicroTed commented 4 years ago

@weiwangncar OK, I'll work on that. In the meantime, I set up a grid with constant dz throughout the domain. The waves remain mostly in the top part of the domain, above the tropopause in the stable layer. There are some ripples below that, but low amplitude (1m/s or less). Netcdf output file here:

https://www.nssl.noaa.gov/users/mansell/public_html/wrf/wrfout_waves_dzconst

weiwangncar commented 4 years ago

@MicroTed Wonder if you can zip the file. What is the dz value?

MicroTed commented 4 years ago

@weiwangncar dz=700 and it is netcdf4, so it is already mostly compressed, but I can make a tgz

weiwangncar commented 4 years ago

@MicroTed What about setting dz = 500 m or less?

MicroTed commented 4 years ago

@weiwangncar This archive for dz=700 (constant) includes the input sounding (from which the z-levels are taken), namelist.input, wrfinput, and wrfout:

https://www.nssl.noaa.gov/users/mansell/public_html/wrf/wrfout_waves_dzconst.tgz

weiwangncar commented 4 years ago

@MicroTed Thanks.

MicroTed commented 4 years ago

@weiwangncar Here is the test you asked for earlier, where there is a layer of constant dz and then a second stretch above. The constant layer has dz=850, and the waves are loosely confined to this layer (which is also in the isothermal layer in the upper domain). The levels and dz values are given below (they will differ very slightly in wrf z_base)

https://www.nssl.noaa.gov/users/mansell/public_html/wrf/wrfout_2ndstretch.tgz

z1d: level, z-scalar, dz 1 5.00000E+01 1.00000E+02 2 1.50000E+02 1.00000E+02 3 2.50000E+02 1.00000E+02 4 3.50000E+02 1.00000E+02 5 4.50000E+02 1.00000E+02 6 5.50000E+02 1.00000E+02 7 6.50000E+02 1.00000E+02 8 7.50000E+02 1.00000E+02 9 8.50000E+02 1.00000E+02 10 9.50000E+02 1.00000E+02 11 1.05000E+03 1.00000E+02 12 1.15345E+03 1.06891E+02 13 1.26402E+03 1.14256E+02 14 1.38221E+03 1.22129E+02 15 1.50855E+03 1.30545E+02 16 1.64359E+03 1.39541E+02 17 1.78794E+03 1.49156E+02 18 1.94223E+03 1.59434E+02 19 2.10716E+03 1.70420E+02 20 2.28345E+03 1.82163E+02 21 2.47189E+03 1.94716E+02 22 2.67332E+03 2.08133E+02 23 2.88862E+03 2.22475E+02 24 3.11876E+03 2.37805E+02 25 3.36476E+03 2.54191E+02 26 3.62771E+03 2.71707E+02 27 3.90878E+03 2.90430E+02 28 4.20921E+03 3.10443E+02 29 4.53035E+03 3.31834E+02 30 4.87362E+03 3.54700E+02 31 5.24054E+03 3.79142E+02 32 5.63274E+03 4.05267E+02 33 6.05197E+03 4.33193E+02 34 6.50009E+03 4.63043E+02 35 6.97909E+03 4.94950E+02 36 7.49109E+03 5.29056E+02 37 8.03837E+03 5.65511E+02 38 8.62337E+03 6.04480E+02 39 9.24868E+03 6.46133E+02 40 9.91707E+03 6.90655E+02 41 1.06315E+04 7.38248E+02 42 1.13952E+04 7.89118E+02 43 1.22115E+04 8.43494E+02 44 1.30583E+04 8.50000E+02 45 1.39083E+04 8.50000E+02 46 1.47583E+04 8.50000E+02 47 1.56083E+04 8.50000E+02 48 1.64583E+04 8.49999E+02 49 1.73083E+04 8.50000E+02 50 1.81795E+04 8.92500E+02 51 1.90943E+04 9.37125E+02 52 2.00549E+04 9.83982E+02 53 2.10635E+04 1.03318E+03 54 2.21225E+04 1.08484E+03 55 2.32344E+04 1.13908E+03 56 2.44020E+04 1.19604E+03 57 2.55695E+04 1.19604E+03

MicroTed commented 4 years ago

@weiwangncar To answer the question about dz=500 (with dx=dy=500): With otherwise identical settings (time step, etc.), I do not get the waves with constant dz=500. I also tried dz=500 with dx=400, and that seemed to be OK, too, but I have not tried a smaller dt yet.

weiwangncar commented 4 years ago

@MicroTed Another suggestion is to see if increasing values either epssm or emdiv helps.

MicroTed commented 4 years ago

@weiwangncar Those parameters seem to have no effect for the following tests: epssm = 0.2 / emdiv=0.01 : no difference epssm = 0.3 / emdiv=0.01 : no difference epssm = 0.1 / emdiv = 0.1 : no difference

MicroTed commented 4 years ago

A pseudo-2D test with clean WK sounding also sets off the waves. Here's the netcdf output:

https://www.nssl.noaa.gov/users/mansell/public_html/wrf/wrfout_d01_2018-05-01_20

I just set V = 0 and N-S periodic, with 11 points N-S, 101 E-W.

No problem with Ri numbers: smallest value is 2.7.