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

How to Implement Irrigation in WRF model?

ahmedbably

New member
Hi everyone!

I'm currently working on a research to study how irrigation can influence some climate parameters in Egypt.
I've already conducted a control, basic run using WRF v4.1.3.

Now, I would like to introduce irrigation into the model. What my mentor is saying we could modify the Noah LSM in the code itself before compiling the WRF model but I've heard there are easier ways now with the newer version of WRF.

My questions are;
- how can I let WRF know a specific area in my domain is undergoing irrigation throughout the run time?
-Which file options should this modification be made, is it in the namelist.input or namelist.wps?
-Is it possibe to modify certain area to have irrigation or will it be the whole domain?
-Does it actually work and show irrigation and does it actually influence the outputs of the model?
-Also, if these options are not available for WRF v4.1.3, will it "hurt" to use a different version and compare the results to the older version?

Overall, I'd really love a guide or quick tips on how to implement this and whether or not this option through Noah LSM works or should we revert back to modifying the code which is cumbersome for someone who's not well rounded in fortran or Noah phys files in general.
Appreciate the help in advance! Thank you!!!
 
Hi,
Take a look at this chapter of the WRF Users' Guide and search for "Surface irrigation parameterizations." Some options were added in V4.2 and the details are described in the guide, as well as in the literature linked in the guide.
Hi!
Thank you for your answer.
I checked it and all clear except this part
''which is then multiplied by the irrigation percentage within the grid-cell (given by the IRRIGATION field processed in WPS).''
I read on the GitHub link for code changes this line that can be related to this; ''The parameterizations can be activated via the namelist switch `sf_surf_irr_scheme` (respectively option 1,2,3) and have explicit timing and water amount (in mm/day) setting from the namelist. The irrigation water amount is spatially modulated by the `IRRIGATION` mask derived from FAO dataset and given to geogrid. Both GEOGRID.TBL and METGRID.TBL need to be modified in WPS to interpolate the new irrigation mask field.''
So what is this and how is it done so I can get a fully integrated irrigation scheme by not just modifying the namelist with these parameters? Because I thought this was all needed..



Also another question please (one in the original post); Does it actually work and show irrigation and does it actually influence the outputs of the model?
I mean does it get picked up the climate and influence the water cycle somehow or is it going to be null to minor changes based on your experience???
Thanks!
 
Hi,
Take a look at this chapter of the WRF Users' Guide and search for "Surface irrigation parameterizations." Some options were added in V4.2 and the details are described in the guide, as well as in the literature linked in the guide.
Is it the one here Static Data Downloads
If so, how is this processed along with the other static data? Is it an additional download or what exactly and how should I go forward after downloading it?
 
Also one final question please, how is these options different from NOAH MP LSM options? Which is better and do both options work for Egypt or only the first option (surface irrigation option)??
 
Is it the one here Static Data Downloads
If so, how is this processed along with the other static data? Is it an additional download or what exactly and how should I go forward after downloading it?
Yes, you can use the additional static downloads for the irrigation data. To do this, unpack those files into the same directory with all your other static directories. If you have that directory in there, then the geogrid program will automatically use it as long as you have "geog_data_res" set to default.

If you take a look at the WPS/geogrid/GEOGRID.TBL, you can see the following section:

Code:
===============================
name=IRRIGATION
        priority=1
        optional=yes
        dest_type=continuous
        interp_option=default:average_gcell(0.0)+average_4pt+nearest_neighbor
        masked = water
        fill_missing = 0.
        rel_path=default:irrigation/fao/
===============================

Because the relative path (rel_path) sets the 'default' to "irrigation/fao," geogrid will look into that path for the static data files.

Regarding your other question, I'm going to reach out to our physics specialist to see if they have the answers you're looking for. I'll get back with you about that. Thank you for your patience.
 
Okay I spoke to a colleague about this. We actually have two irrigation options now: opt_irr is used with NoahMP, and sf_surf_irr_scheme is used with Noah. I'll provide their answers to your questions below.

Does it actually work and show irrigation and does it actually influence the outputs of the model?
I mean does it get picked up the climate and influence the water cycle somehow or is it going to be null to minor changes based on your experience?

With the irrigation option activated, soil moisture, soil temperature, and surface fluxes will definitely change. We don't have experience in long-term runs with this option, but theoretically irrigation over a long period in a specific region will affect climate - at least in the local to regional scale.

how is these options different from NOAH MP LSM options? Which is better and do both options work for Egypt or only the first option (surface irrigation option)?

It is hard to say which option is better because the model performance is always case-dependent. We didn't compare the performance of the two options, but both should work in the Egypt region. You should probably run a few quick tests to figure out what you should choose. Unfortunately there is no shortcut for this and our knowledge about these options is limited. Please refer to the literature for additional information.
 
Thanks a lot for your reply. I tried to test two small runs one with and without the irrigation options by NOAH, the below is the namelist.input for the irrigation run, I want to make sure I implemented this correclty. I of course pre-processed the statics data with the Irrigation statics data as well.

Namelist.input:
&time_control
run_days = 5,
run_hours = 0,
run_minutes = 0,
run_seconds = 0,
start_year = 2006, 2006, 2006,
start_month = 10, 10, 10,
start_day = 01, 01, 01,
start_hour = 0, 0, 0,
start_minute = 00, 00, 00,
start_second = 00, 00, 00,
end_year = 2006, 2006, 2006,
end_month = 10, 10, 10,
end_day = 06, 06, 06,
end_hour = 00, 00, 00,
end_minute = 00, 00, 00,
end_second = 00, 00, 00,
interval_seconds = 21600,
input_from_file = .true., .true., .true.,
history_interval = 1440, 1440, 1440,
frames_per_outfile = 1000, 1000, 1000,
restart = .false.,
restart_interval = 18720,
io_form_history = 2,
io_form_restart = 2,
io_form_input = 2,
io_form_boundary = 2,
debug_level = 0,
/

&domains
time_step = 180,
time_step_fract_num = 0,
time_step_fract_den = 1,
max_dom = 3,
s_we = 1, 1, 1,
e_we = 29, 56, 161,
s_sn = 1, 1, 1,
e_sn = 25, 56, 136,
s_vert = 1, 1, 1,
e_vert = 50, 50, 50,
num_metgrid_levels = 27,
dx = 111110, 22222, 4444.4,
dy = 111110, 22222, 4444.4,
grid_id = 1, 2, 3,
parent_id = 1, 1, 2,
i_parent_start = 1, 9, 14,
j_parent_start = 1, 9, 24,
parent_grid_ratio = 1, 5, 5,
parent_time_step_ratio = 1, 5, 5,
feedback = 1,
smooth_option = 0,
sfcp_to_sfcp = .true.,

/

&physics
mp_physics = 3, 3, 3,
ra_lw_physics = 4, 4, 4,
ra_sw_physics = 4, 4, 4,
radt = 100, 100, 100,
sf_sfclay_physics = 1, 1, 1,
sf_surface_physics = 2, 2, 2,
bl_pbl_physics = 1, 1, 1,
bldt = 0, 0, 0,
cu_physics = 1, 1, 1,
cudt = 5, 5, 5,
isfflx = 1,
ifsnow = 0,
icloud = 1,
surface_input_source = 1,
num_soil_layers = 5,
maxiens = 1,
maxens = 3,
maxens2 = 3,
maxens3 = 16,
ensdim = 144,
sf_surf_irr_scheme = 0, 0, 1,
irr_daily_amount = 0, 0, 8,
irr_start_hour = 0, 0, 14,
irr_num_hours = 0, 0, 2,
irr_start_julianday = 0, 0, 244,
irr_end_julianday = 0, 0, 335,
irr_ph = 0, 0, 0,
irr_freq = 0, 0, 3,
/

&fdda
/

&dynamics
dyn_opt = 2,
rk_ord = 3,
w_damping = 0,
diff_opt = 1, 1, 1,
km_opt = 4, 4, 4,
damp_opt = 0,
base_temp = 290.,
zdamp = 5000., 5000., 5000.,
dampcoef = 0.01, 0.01, 0.01,
khdif = 0, 0, 0,
kvdif = 0, 0, 0,
smdiv = 0.1, 0.1, 0.1,
emdiv = 0.01, 0.01, 0.01,
epssm = 0.1, 0.1, 0.1,
non_hydrostatic = .true., .true., .true.,
time_step_sound = 4, 4, 4,
h_mom_adv_order = 5, 5, 5,
v_mom_adv_order = 3, 3, 3,
h_sca_adv_order = 3, 5, 5,
v_sca_adv_order = 3, 3, 3,
/

&bdy_control
spec_bdy_width = 5,
spec_zone = 1,
relax_zone = 4,
specified = .true., .false., .false.,
periodic_x = .false., .false., .false.,
symmetric_xs = .false., .false., .false.,
symmetric_xe = .false., .false., .false.,
open_xs = .false., .false., .false.,
open_xe = .false., .false., .false.,
periodic_y = .false., .false., .false.,
symmetric_ys = .false., .false., .false.,
symmetric_ye = .false., .false., .false.,
open_ys = .false., .false., .false.,
open_ye = .false., .false., .false.,
nested = .false., .true., .true.,
/

&grib2
/

&namelist_quilt
nio_tasks_per_group = 0,
nio_groups = 1
/
&ideal
ideal_case = 3
/


Also another question, this is the first option, do you have documentation for how to apply this using the other method (NOAH-MP) method like the one you referred to me above for the first option? Thank you
 
Hi,
I believe your namelist (above) looks okay. If your results are reasonable and as expected, it's probably okay.

As for the Noah-MP option, take a look at the code commit in which this was put into the code. Read the description, which also points you to the run/README.namelist file for additional information. Scroll down to the see the namelist options added.
 
Hi,
I believe your namelist (above) looks okay. If your results are reasonable and as expected, it's probably okay.

As for the Noah-MP option, take a look at the code commit in which this was put into the code. Read the description, which also points you to the run/README.namelist file for additional information. Scroll down to the see the namelist options added.
Hi!
Thank you for your answer.
Once I have implemented irrigation and run to get the wrfout file, I need to check which variable to confirm that irrigation was indeed performed during the model run?

Looking forward to your reply
 
According to the WRF/Registry/registry.noahmp file, I believe these are the variables you will be looking for:

Code:
#Noah-MP Irrigation
state    real   IRFRACT    ij      -       1      -     i012rd=(interp_mask_field:lu_index,iswater)u=(copy_fcnm)    "IRFRACT"     "Irrigation fraction"            ""
state    real   SIFRACT    ij      -       1      -     i012rd=(interp_mask_field:lu_index,iswater)u=(copy_fcnm)    "SIFRACT"     "Sprinkler Irrigation fraction"            ""
state    real   MIFRACT    ij      -       1      -     i012rd=(interp_mask_field:lu_index,iswater)u=(copy_fcnm)    "MIFRACT"     "Micro Irrigation fraction"            ""
state    real   FIFRACT    ij      -       1      -     i012rd=(interp_mask_field:lu_index,iswater)u=(copy_fcnm)    "FIFRACT"     "Flood Irrigation fraction"            ""
state  integer  IRNUMSI    ij      -       1      -     i02rhd=(interp_mask_field:lu_index,iswater)u=(copy_fcnm)    "IRNUMSI"     "Sprinkler Irrigation Event Count" ""
state  integer  IRNUMMI    ij      -       1      -     i02rhd=(interp_mask_field:lu_index,iswater)u=(copy_fcnm)    "IRNUMMI"     "Micro Irrigation Event Count" ""
state  integer  IRNUMFI    ij      -       1      -     i02rhd=(interp_mask_field:lu_index,iswater)u=(copy_fcnm)    "IRNUMFI"     "Flood Irrigation Event Count" ""
state    real   IRWATSI    ij      -       1      -     r                                                           "IRWATSI"     "Sprinkler Irrigation Amount for the Event"     "m"
state    real   IRWATMI    ij      -       1      -     r                                                           "IRWATMI"     "Micro Irrigation Amount for the Event"     "m"
state    real   IRWATFI    ij      -       1      -     r                                                           "IRWATFI"     "Flood Irrigation Amount for the Event"     "m"
state    real   IRSIVOL    ij      -       1      -     i02rhd=(interp_mask_field:lu_index,iswater)u=(copy_fcnm)    "IRSIVOL"     "Sprinkler Irrigation Water Accumulated"     "mm"
state    real   IRMIVOL    ij      -       1      -     i02rhd=(interp_mask_field:lu_index,iswater)u=(copy_fcnm)    "IRMIVOL"     "Micro Irrigation Water Accumulated"     "mm"
state    real   IRFIVOL    ij      -       1      -     i02rhd=(interp_mask_field:lu_index,iswater)u=(copy_fcnm)    "IRFIVOL"     "Flood Irrigation Water Accumulated"     "mm"
state    real   IRELOSS    ij      -       1      -     i02rhd=(interp_mask_field:lu_index,iswater)u=(copy_fcnm)    "IRELOSS"     "Sprinkler Evaporation Loss Accumulated"     "mm"
state    real   IRRSPLH    ij      -       1      -     i02rhd=(interp_mask_field:lu_index,iswater)u=(copy_fcnm)    "IRRSPLH"     "Sprinkler Evaporation Loss Accumulated"     "Joules m^-2"
 
Top