Scheduled Downtime
On Friday 21 April 2023 @ 5pm MT, this website will be down for maintenance and expected to return online the morning of 24 April 2023 at the latest

Restart run inconsistent with continuous run

This post was from a previous version of the WRF&MPAS-A Support Forum. New replies have been disabled and if you have follow up questions related to this post, then please start a new thread from the forum home page.

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*:

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
 

Attachments

  • V_d01_profile_restart_vs_continuous_1h.png
    V_d01_profile_restart_vs_continuous_1h.png
    29.3 KB · Views: 1,032
  • V10_d01_map_restart_vs_continuous_1h.png
    V10_d01_map_restart_vs_continuous_1h.png
    73.6 KB · Views: 1,032
Hi,
1) Can you let me know which version of the model you are running?
2) It seems like you are, but I just want to verify that you are starting your restarts from available boundary times.

Thanks!
 
Hi!
Thanks for the reply!

kwerner said:
1) Can you let me know which version of the model you are running?
This is with WRF 4.1.1.

kwerner said:
2) It seems like you are, but I just want to verify that you are starting your restarts from available boundary times.
Yes.

Best regards,
Friedemann
 
Based on your namelist, it looks like you may be running a WRF-chem simulation. If this is the case, if you run WRF without chemistry - just a standard build of WRF, do you still get the differences?
 
Top