Support Request about Calibration

74 views
Skip to first unread message

kingstn

unread,
Oct 27, 2025, 5:50:00 AM10/27/25
to wrf-hydro_users

Dear WRF-Hydro Community,


I'm currently working on my first WRF-Hydro simulation and have begun exploring the calibration process. I've encountered a few challenges and would be grateful for your guidance.

Specifically,

  1. I noticed that the simulated outputs (e.g., *CHANOBS_DOMAIN2, *CHRTOUT_DOMAIN2, and Route_Link.nc) do not reflect the exact gauge locations I specified.
  2. I want to calibrate the model at a single observed gauge station. Is this feasible within the WRF-Hydro framework? If so, is there a recommended approach (manual or otherwise) to achieve this?
  3. Additionally, If there are any critical preprocessing steps or setup considerations I should be aware of before starting the calibration, I would appreciate any advice or resources you can share.

For context, I've included plots comparing the observed data with the WRF-Hydro outputs mentioned above.


Thank you very much for your time, and I truly appreciate the valuable support.

obs_vs_model_NSE_excl_spinup.png

Arezoo RafieeiNasab

unread,
Oct 28, 2025, 4:07:48 PM10/28/25
to wrf-hyd...@ucar.edu
Hello, 

May I ask what you mean by the simulated outputs not reflecting the exact gauge location? Do you mean the location of the gauges is not specified right in the Route_link.nc file when you did the pre-processing, or do you mean the simulated flows are not close to the observation. I thought you mean the latter, but wanted to confirm that is the case? 

I assume you are using the reach based routing given you are referring to to the Routelink, correct? I usually look at the CHANOBS files for verification against the gauge, the feature_id in the CHANOBS file should match the one in the Routelink. And yes, you could calibrate the model at a single gauge location. Here is the github repo for calibration: https://github.com/NCAR/PyWrfHydroCalib . There is documentation for it available here: https://github.com/NCAR/PyWrfHydroCalib/tree/master/docs that you could review and find out more about how it is actually done. 

Let me know if you have any follow up question. Thanks!
Arezoo

--
You received this message because you are subscribed to the Google Groups "wrf-hydro_users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to wrf-hydro_use...@ucar.edu.
To view this discussion visit https://groups.google.com/a/ucar.edu/d/msgid/wrf-hydro_users/c51de8ab-b90f-4034-98b0-62bc96ce7e09n%40ucar.edu.


--
-------------------------------------------------------------------------------------------------
My working day may not be your working day. Please do not feel obliged to reply to this email outside of your normal working hours.
-------------------------------------------------------------------------------------------------
Arezoo Rafieei Nasab, Ph.D.
Project Scientist II
NCAR Research Applications Laboratory

Negusu Tarekegn

unread,
Nov 1, 2025, 3:48:21 AM11/1/25
to wrf-hyd...@ucar.edu
Hi Arezoo,
Thank you for your assistance; I truly appreciate your guidance!
To clarify what I meant: the gauge points don’t fall exactly on features in RouteLink.nc. I matched each gauge to the nearest feature_id in RouteLink and used those nearest links for comparison. 
With that approach, the simulated flows at several sites do not match the observations.
Yes, I’m using reach-based routing. So, matching gauges to the nearest RouteLink feature_id is the right approach?

If you notice anything incorrect in my setup, I have attached the RouteLink and gauge stations file.

Thanks.

Route_Link.nc
frxst_pts.csv

Kevin Sampson

unread,
Nov 1, 2025, 12:49:04 PM11/1/25
to wrf-hyd...@ucar.edu
Negusu,

Choosing the nearest route_link feature to your gage is not always the correct approach. Care must be taken to ensure that the location of the gage on your WRF-Hydro reach network represents the hydrologic location of the gage in reality. Gages are often placed above or below confluences, which do not always correspond to the confluences in the modeled network. The modeler must review each gauge placement in the context of the hydrologic network represented in the model and make adjustments as necessary.

Kevin

Negusu Tarekegn

unread,
Nov 3, 2025, 5:19:25 AM11/3/25
to wrf-hyd...@ucar.edu
Hi Kevin,
Thank you for the clear guidance.

I corrected the gauge mismatch as per your advice.

One more thing, for calibration, I did a four-month run: one month for spinup, two months for calibration, and one month for validation. 
Is that window adequate, and would 'PyWrfHydroCalib' be suitable for a calibration period of this length? If not, may I apply manual calibration?

Thanks again for pointing me in the right direction.

Best regards,
Negusu

Kevin Sampson

unread,
Nov 3, 2025, 11:36:44 AM11/3/25
to wrf-hyd...@ucar.edu
Negusu,

It does not sound to me as though you have allowed enough time for spinup, calibration, or validation. This will depend greatly on the hydroclimatology of your region of interest, but it is common to use multiple years for spinup and for calibration. This can sometimes be a single year of forcings run multiple times if you do not have sufficient forcings to support a long spinup. Remember that the model is starting from a 'cold start' with default parameters and states. You will need to give the simulation enough time to 'warm up' and reach a kind of equilibrium. Surface water might spin up quickly while subsurface and deep groundwater takes much longer.

Thanks,

Kevin

Negusu Tarekegn

unread,
Nov 3, 2025, 12:10:05 PM11/3/25
to wrf-hyd...@ucar.edu
Thank you, Kevin, for the guidance.

You’re right. I likely haven’t allowed enough time for spin-up and calibration. 

My primary constraint is computational resources, since I’m using WRF output as forcings. I’m currently running WRF-Hydro with 3-hourly forcings. 
To extend the period, would it be reasonable to switch to 6-hourly forcings (or repeat a single forcing year several times) for spin-up and then return to 3-hourly for calibration/validation? 
In your experience, does WRF-Hydro behave reliably with 6-hourly forcings?

Thanks again for your help.

Best regards,
Negusu

Kevin Sampson

unread,
Nov 4, 2025, 1:04:28 PM11/4/25
to wrf-hyd...@ucar.edu
Negusu,

I am not in a good position to comment, as I mostly run simulations with hourly data. I am not sure what potential issues may be introduced by performing spinup and calibration/validation using different time-stepping. Perhaps others may comment on their experiences.

Kevin

aubrey

unread,
Dec 31, 2025, 4:11:13 PM12/31/25
to wrf-hydro_users, Kevin Sampson
Hi Negusu:
Are you limited by the availability of met forcings (e.g., because you are running WRF and can only afford to run it for short durations) or limited because of the compute expense of running WRF-Hydro?

Some strategies we have used:
1) Use different met forcings to spinup and calibrate the model. For example, we might use observation-based met products (e.g., ERA5, NLDAS, etc.) to spinup the model, but then switch over to another product (e.g., regional WRF simulation) for the actual event simulation. Just note that since different met products have different error structures, you may get different hydro model performance when you switch forcings.
2) Use a staged spinup approach, where you spinup WRF-Hydro running a simplified physics (e.g., no terrain routing and/or no channel routing, so less computationally expensive), then switch over to a more complex physics configuration for the last year or last few months to get proper high-res soil moisture and channel states.

As Kevin mentioned, you can certainly also repeat the same year (or multiple years) of forcings during spinup, but you generally want to make sure you are using the correct time period forcings for the preceding weeks to months (depending on your study area) before your event of interest so your hydrology has the correct antecedent conditions.

We do run simulations with 3-4 hourly met forcings. Whether this is OK for your application really depends on the event scales you are interested in (e.g., if you are simulating over a snowy winter vs. simulating an extreme precipitation flood event). I have not used 6-hourly forcings, but maybe others have. 

Let us know how it goes.

Thanks!
Aubrey


On Tuesday, November 4, 2025 at 11:04:28 AM UTC-7 Kevin Sampson wrote:
Negusu,

I am not in a good position to comment, as I mostly run simulations with hourly data. I am not sure what potential issues may be introduced by performing spinup and calibration/validation using different time-stepping. Perhaps others may comment on their experiences.

Kevin

On Mon, Nov 3, 2025 at 10:10 AM Negusu Tarekegn <negus...@gmail.com> wrote:
Thank you, Kevin, for the guidance.

You’re right. I likely haven’t allowed enough time for spin-up and calibration. 

My primary constraint is computational resources, since I’m using WRF output as forcings. I’m currently running WRF-Hydro with 3-hourly forcings. 
To extend the period, would it be reasonable to switch to 6-hourly forcings (or repeat a single forcing year several times) for spin-up and then return to 3-hourly for calibration/validation? 
In your experience, does WRF-Hydro behave reliably with 6-hourly forcings?

Thanks again for your help.

Best regards,
Negusu

To unsubscribe from this group and stop receiving emails from it, send an email to wrf-hydro_users+unsubscribe@ucar.edu.


--
-------------------------------------------------------------------------------------------------
My working day may not be your working day. Please do not feel obliged to reply to this email outside of your normal working hours.
-------------------------------------------------------------------------------------------------
Arezoo Rafieei Nasab, Ph.D.
Project Scientist II
NCAR Research Applications Laboratory

--
You received this message because you are subscribed to the Google Groups "wrf-hydro_users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to wrf-hydro_users+unsubscribe@ucar.edu.

--
You received this message because you are subscribed to the Google Groups "wrf-hydro_users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to wrf-hydro_users+unsubscribe@ucar.edu.

--
You received this message because you are subscribed to the Google Groups "wrf-hydro_users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to wrf-hydro_users+unsubscribe@ucar.edu.

--
You received this message because you are subscribed to the Google Groups "wrf-hydro_users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to wrf-hydro_users+unsubscribe@ucar.edu.

--
You received this message because you are subscribed to the Google Groups "wrf-hydro_users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to wrf-hydro_users+unsubscribe@ucar.edu.

--
You received this message because you are subscribed to the Google Groups "wrf-hydro_users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to wrf-hydro_users+unsubscribe@ucar.edu.

Negusu Tarekegn

unread,
Jan 1, 2026, 7:30:42 AMJan 1
to wrf-hyd...@ucar.edu
Hi Aubrey,
Thank you for the helpful suggestions.
Yes, my main limitation is meteorological forcings. Right now, I’m running about three years of forcing data.
Your idea of using different products for spinup/calibration versus the event simulation seems interesting for an extended simulation that yields more realistic land–surface/hydrology states. Thanks again for that.

I did have one follow-up question about calibration runtime. When I run spinup/calibration with PyWrfHydroCalib, the spinup often takes more than a day. On our HPC, the job frequently hits the wall time limit and is killed before it finishes. 
I also tried running calibration on my local desktop, but it has been running for more than four days without completing.
Is this runtime typical for PyWrfHydroCalib/WRF-Hydro calibration, or does it suggest something might be wrong?  Any guidance on what to check first would be greatly appreciated.
Thanks a lot,
Negusu


On Thu, Jan 1, 2026 at 6:11 AM aubrey <adu...@ucar.edu> wrote:
Hi Negusu:
Are you limited by the availability of met forcings (e.g., because you are running WRF and can only afford to run it for short durations) or limited because of the compute expense of running WRF-Hydro?

Some strategies we have used:
1) Use different met forcings to spinup and calibrate the model. For example, we might use observation-based met products (e.g., ERA5, NLDAS, etc.) to spinup the model, but then switch over to another product (e.g., regional WRF simulation) for the actual event simulation. Just note that since different met products have different error structures, you may get different hydro model performance when you switch forcings.
2) Use a staged spinup approach, where you spinup WRF-Hydro running a simplified physics (e.g., no terrain routing and/or no channel routing, so less computationally expensive), then switch over to a more complex physics configuration for the last year or last few months to get proper high-res soil moisture and channel states.

As Kevin mentioned, you can certainly also repeat the same year (or multiple years) of forcings during spinup, but you generally want to make sure you are using the correct time period forcings for the preceding weeks to months (depending on your study area) before your event of interest so your hydrology has the correct antecedent conditions.

We do run simulations with 3-4 hourly met forcings. Whether this is OK for your application really depends on the event scales you are interested in (e.g., if you are simulating over a snowy winter vs. simulating an extreme precipitation flood event). I have not used 6-hourly forcings, but maybe others have. 

Let us know how it goes.

Thanks!
Aubrey


On Tuesday, November 4, 2025 at 11:04:28 AM UTC-7 Kevin Sampson wrote:
Negusu,

I am not in a good position to comment, as I mostly run simulations with hourly data. I am not sure what potential issues may be introduced by performing spinup and calibration/validation using different time-stepping. Perhaps others may comment on their experiences.

Kevin

On Mon, Nov 3, 2025 at 10:10 AM Negusu Tarekegn <negus...@gmail.com> wrote:
Thank you, Kevin, for the guidance.

You’re right. I likely haven’t allowed enough time for spin-up and calibration. 

My primary constraint is computational resources, since I’m using WRF output as forcings. I’m currently running WRF-Hydro with 3-hourly forcings. 
To extend the period, would it be reasonable to switch to 6-hourly forcings (or repeat a single forcing year several times) for spin-up and then return to 3-hourly for calibration/validation? 
In your experience, does WRF-Hydro behave reliably with 6-hourly forcings?

Thanks again for your help.

Best regards,
Negusu

To unsubscribe from this group and stop receiving emails from it, send an email to wrf-hydro_use...@ucar.edu.


--
-------------------------------------------------------------------------------------------------
My working day may not be your working day. Please do not feel obliged to reply to this email outside of your normal working hours.
-------------------------------------------------------------------------------------------------
Arezoo Rafieei Nasab, Ph.D.
Project Scientist II
NCAR Research Applications Laboratory

--
You received this message because you are subscribed to the Google Groups "wrf-hydro_users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to wrf-hydro_use...@ucar.edu.

--
You received this message because you are subscribed to the Google Groups "wrf-hydro_users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to wrf-hydro_use...@ucar.edu.

--
You received this message because you are subscribed to the Google Groups "wrf-hydro_users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to wrf-hydro_use...@ucar.edu.

--
You received this message because you are subscribed to the Google Groups "wrf-hydro_users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to wrf-hydro_use...@ucar.edu.

--
You received this message because you are subscribed to the Google Groups "wrf-hydro_users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to wrf-hydro_use...@ucar.edu.

--
You received this message because you are subscribed to the Google Groups "wrf-hydro_users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to wrf-hydro_use...@ucar.edu.

--
You received this message because you are subscribed to the Google Groups "wrf-hydro_users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to wrf-hydro_use...@ucar.edu.
To view this discussion visit https://groups.google.com/a/ucar.edu/d/msgid/wrf-hydro_users/7817671e-16e0-4ed3-8cfd-70cf4a81facen%40ucar.edu.

Arezoo RafieeiNasab

unread,
Jan 1, 2026, 11:20:19 PMJan 1
to wrf-hyd...@ucar.edu
Hi Negusu, 

PyWrfHydroCalib does not add a lot to the run time of the model in particular. I would suggest benchmarking running the model outside the calibration workflow and if it is taking significantly more time, then there might be a problem with how things are setup. The run time of the model is very dependent on the model physics and how large the domain is. would you be able to let us know how long (with how many cores) the model takes to run a year outside the calibration workflow, versus in the PyWrfHydroCalib?

Thanks!
Arezoo







--
-------------------------------------------------------------------------------------------------
My working day may not be your working day. Please do not feel obliged to reply to this email outside of your normal working hours.
-------------------------------------------------------------------------------------------------
Arezoo Rafieei Nasab, Ph.D.
Scientist V
NSF NCAR Research Applications Laboratory

Negusu Tarekegn

unread,
Jan 4, 2026, 9:09:51 AMJan 4
to wrf-hyd...@ucar.edu
Hi Arezoo,
Thank you for the quick response.
To keep the test short while I verify the workflow, I’m currently running calibration using only the most recent 4 months of forcing data. 
When I run WRF-Hydro outside PyWrfHydroCalib for these 4 months, the simulation typically finishes in under 2 hours using 48 MPI cores and around 8 hours on the desktop.
However, when I run the same 4-month setup with PyWrfHydroCalib, the runtime is much longer and exceeds our wall-time limit, so the job is terminated before completing. It generates the following errors when I finally check:
"PROCESSING ITERATION: 1
PROCESSING ITERATION: 2
PROCESSING BASIN: 0
PROCESSING ITERATION: 0
NO MODEL SIMULATIONS FOUND
NO CALIB JOBS FOUND
FIRST CALIB CODE LOCKED
PROCESSING ITERATION: 1
PROCESSING ITERATION: 2
PROCESSING BASIN: 0
PROCESSING ITERATION: 0
NO MODEL SIMULATIONS FOUND
NO CALIB JOBS FOUND
FIRST CALIB CODE LOCKED"
In the case of the local machine, the following happens:
"WORKING ON GROUP: 0
GROUP JOBS FOUND
GROUP STATUS = True
WORKING ON GROUP: 0
GROUP JOBS FOUND
GROUP STATUS = True
WORKING ON GROUP: 0
GROUP JOBS FOUND
GROUP STATUS = True"

Also, to improve spinup, may I rerun the entire WRF-Hydro simulation multiple times?

Thanks again,
Negusu








Arezoo RafieeiNasab

unread,
Jan 4, 2026, 12:34:14 PMJan 4
to wrf-hyd...@ucar.edu
Negusu, 

Hi Negusu, 

This is suggesting there is a problem with how things are set up, and running. Could you share the submission script or command you are using to run outside the PyWrfHydroCalib, and the calibration setup.parm that you are using for calibration? Also, under the calibration output directory, there is a file named something like run_group_0.sh, could you share that also with me? I will take a look at all of them to see whether I could find the problem. 

As for the spinup, the workflow currently does not support multiple execution. If you would like to do so, you need to either run it outside the workflow, or run the entire workflow (setup of the database, and running spinup) multiple times. If you want to go with the later, I could add more description in the next email. Let's first find the run time problem. 

Thanks!
Arezoo

Negusu Tarekegn

unread,
Jan 7, 2026, 11:28:34 AMJan 7
to wrf-hyd...@ucar.edu
Hi Arezoo,
Sorry for the delayed reply.
As requested, I’m sharing the files below:
  • The submission script/command I use to run outside PyWrfHydroCalib
  • The calibration setup.parm file
  • The run_group_0.sh file from the calibration output directory
As I mentioned before, I’ve been trying to run the calibration on both my desktop and HPC resources, so I’m attaching the corresponding files here.
I am happy to share if you need anything else from my side.
Thanks,
Negusu


desktop_submission.tar.xz
HPC_submission.tar.xz

Arezoo RafieeiNasab

unread,
Jan 11, 2026, 12:53:19 PM (10 days ago) Jan 11
to wrf-hyd...@ucar.edu
Hi Negusu, 

I just took a look at the submission jobs for the HPC. The ones that you have sent me do not match, the standalone script is using 1 node, and 48 cores. The calibration workflow is using 1 node and 4 cores. 
Could you please run both with 1 node, and 4 cores (or 1 node, and 48 cores) for 1 month (as an example) and then compare the model run time between the two? What I would like to do is to keep everything the same (model run specification) and just once run it through the calibration workflow and once outside. You could do the following, set up the spin up to run for 1 month and when it finishes, re-run the same (in RUN.SPINUP/OUTPUT) using your usual submission script and compare the run time. They should not be different drastically. If you decide to run with 1 node and 48 core, please edit the setup as follows: 

nCoresModel = 48
nNodesModel = 1
nCoresPerNode = 48

Also, I see there are several export commands in the standalone submission, in the most recent version of the PyWrfHydroCalib, you could specify those as arguments so it will be written in the run_groupX.sh file, however, I noticed you are using the older PyWrfHydroCalib. If the above test did not give you close run time. Please do another test as follows. 

First, set up the calibration workflow, and submit the spinOrchestrator.py, however, kill it when it creates the run_group0.sh file (if it has already submitted the job to the queue, kill that too). Add all the export commands you have in your original submission script to the run_group0.sh file, and submit it manually using the command "qsub run_group0.sh", this will run the spinup.py and will call the model run. Then compare the runs times together. If they match closely, means the exports are essential and then we could move to the new version of the calibration workflow which allows you to do this. 

Please keep me posted!
Arezoo





Reply all
Reply to author
Forward
0 new messages