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,033
  • V10_d01_map_restart_vs_continuous_1h.png
    V10_d01_map_restart_vs_continuous_1h.png
    73.6 KB · Views: 1,033
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?
 
Back
Top