friedemann
New member
Hi!
I observed a case where restarting WRF produces output that is slightly different compared to a continuous run.
Setup
- 3 domains with resolutions 36 km, 12 km, 4 km
- Two-way nesting (feedback=1)
- Identical physics and dynamics options in all domains
- Driving meteorology: ERA5
- Continuous run: 48h (minimum, I ran several cases)
- Restart run: restart after 24h, ran for 2h (minimum, I ran several cases)
- Simplified namelist*:
*In the original namelist, I had a fourth domain at 1.333 km resolution with no cumulus parameterization, and I used spectral nudging in d01 and d02. But the inconsistencies occur without the fourth domain and without nudging, so I removed these parts from the namelist to simplify it. The chem section is for passive tracers, the namelist above just doesn't have fluxes yet.
Observed inconsistencies
- I can see differences starting at the first output time (1 hour) after the restart time, all over d01 (V10_d01_map_restart_vs_continuous_1h.png)
- I checked winds more closely, and differences seem to originate from the surface (V_d01_profile_restart_vs_continuous_1h.png) and eventually propagate throughout the atmosphere.
- diffwrf tells me that all variables in my wrfout files seem to be affected (I don't know if it's really all variables because excluded a number of variables from wrfout (not wrfrst) with the 'iofields_filename' mechanism. Not doing that didn't change the wind inconsistencies).
Mitigation attempts and status
I researched the WRF forum and considered several mitigation ideas, especially from this post: https://forum.mmm.ucar.edu/phpBB3/viewtopic.php?f=40&t=5238&p=10409
One of them I couldn't run, the others are not suitable for my case and I didn't try them:
- Change damp_opt
→ Couldn’t run, got segmentation faults
→ Should affect model top, not surface
- Increase time step
→ Didn't try because I’m already running close to max recommended timestep
- Oversimplify physics
→ Didn't try because I want realistic simulations
However, I managed to find modifications that produced restart runs that were consistent with continuous runs:
- Only run d01 or d01 and d02
Or:
- Run in one-way nesting mode (feedback=0)
However, I need the high resolution, and believe that two-way nesting is more accurate than one-way nesting in my case. The latter may be debatable, but since the inconsistecies shouldn't occur either way, I decided to make this post.
Some observations and additonal thoughts:
- It's odd that feedback=0 restores consistency, because the inconsistencies occur throughout d01, not only in the area of the nest(s)
- It also don't understand how the simulation that excludes d03 isn't affected, because the only difference between the domains is resolution and timestep.
At this point, I managed to work without restart runs, so I didn't pursue the issue further. It would still be nice if there was a solution.
Cheers,
Friedemann
I observed a case where restarting WRF produces output that is slightly different compared to a continuous run.
Setup
- 3 domains with resolutions 36 km, 12 km, 4 km
- Two-way nesting (feedback=1)
- Identical physics and dynamics options in all domains
- Driving meteorology: ERA5
- Continuous run: 48h (minimum, I ran several cases)
- Restart run: restart after 24h, ran for 2h (minimum, I ran several cases)
- Simplified namelist*:
Code:
&time_control
run_days = 0
run_hours = 0
run_minutes = 0
run_seconds = 0
start_year = 2015, 2015, 2015
start_month = 2, 2, 2
start_day = 2, 2, 2 ! continuous run: 1, 1, 1
start_hour = 0, 0, 0
start_minute = 0, 0, 0
start_second = 0, 0, 0
end_year = 2015, 2015, 2015
end_month = 2, 2, 2
end_day = 2, 2, 2 ! continuous run: 3, 3, 3
end_hour = 2, 2, 2 ! continuous run: 0, 0, 0
end_minute = 0, 0, 0
end_second = 0, 0, 0
interval_seconds = 10800
input_from_file = .true., .true., .true.
history_interval = 60, 60, 60
frames_per_outfile = 24, 24, 24
adjust_output_times = .true.
restart = .true.
restart_interval = 1440
write_hist_at_0h_rst = .true.
io_form_history = 2
io_form_restart = 2
io_form_input = 2
io_form_boundary = 2
ignore_iofields_warning = .false.
debug_level = 0
/
&domains
time_step = 200
time_step_fract_num = 0
time_step_fract_den = 1
max_dom = 3
e_we = 99, 103, 103
e_sn = 92, 94, 121
e_vert = 40, 40, 40
grid_id = 1, 2, 3
parent_id = 1, 1, 2
parent_grid_ratio = 1, 3, 3
parent_time_step_ratio = 1, 3, 3
i_parent_start = 1, 38, 48
j_parent_start = 1, 32, 33
dx = 36000, 12000, 4000
dy = 36000, 12000, 4000
p_top_requested = 5000
num_metgrid_levels = 92
num_metgrid_soil_levels = 4
feedback = 1
smooth_option = 0
/
&physics
mp_physics = 4, 4, 4
progn = 0, 0, 0
naer = 1000000000.0
ra_lw_physics = 4, 4, 4
ra_sw_physics = 4, 4, 4
radt = 30, 30, 30
sf_sfclay_physics = 1, 1, 1
sf_surface_physics = 2, 2, 2
bl_pbl_physics = 1, 1, 1
bldt = 0, 0, 0
cu_physics = 3, 3, 3
cudt = 0, 0, 0
isfflx = 1
icloud = 1
surface_input_source = 1
num_soil_layers = 4
num_land_cat = 21
sf_urban_physics = 1, 1, 1
maxiens = 1
maxens = 3
maxens2 = 3
maxens3 = 16
ensdim = 144
mp_zero_out = 2
mp_zero_out_thresh = 1e-08
cu_rad_feedback = .true., .true., .true.
cu_diag = 1, 1, 1
/
&dynamics
w_damping = 1
diff_opt = 1, 1, 1
km_opt = 4, 4, 4
diff_6th_opt = 2, 2, 2
diff_6th_factor = 0.12, 0.12, 0.12
base_temp = 290.0
damp_opt = 3
zdamp = 5000.0, 5000.0, 5000.0
dampcoef = 0.2, 0.2, 0.2
khdif = 0, 0, 0
kvdif = 0, 0, 0
non_hydrostatic = .true., .true., .true.
moist_adv_opt = 2, 2, 2
scalar_adv_opt = 2, 2, 2
chem_adv_opt = 2, 2, 2
tke_adv_opt = 2, 2, 2
/
&bdy_control
spec_bdy_width = 5
spec_zone = 1
relax_zone = 4
specified = .true., .false., .false.
nested = .false., .true., .true.
/
&chem
kemit = 9
chem_opt = 17, 17, 17
photdt = 30, 30, 30
chemdt = 2.0, 2.0, 2.0
io_style_emissions = 2
emiss_inpt_opt = 16, 16, 16
emiss_opt = 17, 17, 17
chem_in_opt = 0, 0, 0
phot_opt = 1, 1, 1
gas_drydep_opt = 0, 0, 0
aer_drydep_opt = 0, 0, 0
bio_emiss_opt = 0, 0, 0
dust_opt = 0
dmsemis_opt = 0
seas_opt = 0
gas_bc_opt = 0, 0, 0
gas_ic_opt = 0, 0, 0
aer_bc_opt = 0, 0, 0
aer_ic_opt = 0, 0, 0
gaschem_onoff = 0, 0, 0
aerchem_onoff = 0, 0, 0
wetscav_onoff = 0, 0, 0
cldchem_onoff = 0, 0, 0
vertmix_onoff = 1, 1, 1
chem_conv_tr = 1, 1, 1
biomass_burn_opt = 0, 0, 0
plumerisefire_frq = 0, 0, 0
aer_ra_feedback = 0, 0, 0
have_bcs_chem = .true., .true., .true.
have_bcs_tracer = .true., .true., .true.
vprm_opt = 'VPRM_table_EUROPE', 'VPRM_table_EUROPE', 'VPRM_table_EUROPE'
/
&namelist_quilt
/
*In the original namelist, I had a fourth domain at 1.333 km resolution with no cumulus parameterization, and I used spectral nudging in d01 and d02. But the inconsistencies occur without the fourth domain and without nudging, so I removed these parts from the namelist to simplify it. The chem section is for passive tracers, the namelist above just doesn't have fluxes yet.
Observed inconsistencies
- I can see differences starting at the first output time (1 hour) after the restart time, all over d01 (V10_d01_map_restart_vs_continuous_1h.png)
- I checked winds more closely, and differences seem to originate from the surface (V_d01_profile_restart_vs_continuous_1h.png) and eventually propagate throughout the atmosphere.
- diffwrf tells me that all variables in my wrfout files seem to be affected (I don't know if it's really all variables because excluded a number of variables from wrfout (not wrfrst) with the 'iofields_filename' mechanism. Not doing that didn't change the wind inconsistencies).
Mitigation attempts and status
I researched the WRF forum and considered several mitigation ideas, especially from this post: https://forum.mmm.ucar.edu/phpBB3/viewtopic.php?f=40&t=5238&p=10409
One of them I couldn't run, the others are not suitable for my case and I didn't try them:
- Change damp_opt
→ Couldn’t run, got segmentation faults
→ Should affect model top, not surface
- Increase time step
→ Didn't try because I’m already running close to max recommended timestep
- Oversimplify physics
→ Didn't try because I want realistic simulations
However, I managed to find modifications that produced restart runs that were consistent with continuous runs:
- Only run d01 or d01 and d02
Or:
- Run in one-way nesting mode (feedback=0)
However, I need the high resolution, and believe that two-way nesting is more accurate than one-way nesting in my case. The latter may be debatable, but since the inconsistecies shouldn't occur either way, I decided to make this post.
Some observations and additonal thoughts:
- It's odd that feedback=0 restores consistency, because the inconsistencies occur throughout d01, not only in the area of the nest(s)
- It also don't understand how the simulation that excludes d03 isn't affected, because the only difference between the domains is resolution and timestep.
At this point, I managed to work without restart runs, so I didn't pursue the issue further. It would still be nice if there was a solution.
Cheers,
Friedemann