Sediment management in a reservoir in Burkina Faso

Cory Whitney, Denis Lanzanova and Eike Luedeling, University of Bonn, Germany

2018-06-11

1 Decision model for reservoir sedimentation management

Decision Analysis (DA) can be used to support practical decisions in the face of risk and uncertainty (Hubbard 2014; Howard & Abbas 2016). DA can generate robust and science-based decision support by integrating data and expert knowledge on decisions and the systems they strive to influence. We demonstrate DA model development techniques to support the difficult task of deciding which interventions to choose, if any, given a collection of possible interventions to implement. The approach embraces complexity, makes recommendations that account for the imperfect state of available knowledge and identifies critical uncertainties that decision-supporting research should address. Such decision analysis is highly applicable in data-scarce environments, such as the Upper Volta River Basin, where science has traditionally struggled to provide actionable information to policy-makers, development practitioners, NGOs and rural communities (Katic & Morris 2016).

The decisionSupport() function is part of the package decisionSupport (Luedeling and Göhring, 2017) in the R programming environment (R Core Team 2017). This package was used for a Monte-Carlo-based selection of a sedimentation management strategy for a reservoir in Burkina Faso. These reservoirs have multiple benefits for rural communities (Cecchi et al. 2008; Bharati et al. 2008; Venot & Cecchi 2011; Boelee et al. 2013) and are important for food security and livelihoods (Palmieri et al. 2001; Wisser et al. 2010; Poussin et al. 2015). Sedimentation is a major impediment for the functioning of these reservoirs (Kondolf et al. 2014; Schmengler 2011; Chitata et al. 2014). The design of an efficient sedimentation management intervention for the reservoir of Lagdwenda required assessment of multiple uncertain quantities and risks. The reservoir is a good prototype for testing the strategies of sedimentation management in the Volta basin. Most of the reservoirs in the Upper Volta present similar conditions and context (climatic environment, type of crops cultivated, cultural practices and the sedimentation issue) (Birner et al 2010).

A number of specialized participatory approaches and modeling techniques helped us to construct and parameterize a model based on the knowledge of local expert stakeholders. These approaches are outlined, in part, by Allan et al (2010), David et al. (2014), Fred et al (2017), Morgan (2014), Martin et al (2012) and Samantha et al (2009).

1.1 Description of co-designed interventions

In preparation for the participatory analysis, we drafted a proposal of several intervention alternatives, based on preliminary fieldwork. These were discussed with the stakeholders in workshop plenary sessions:

  1. An intervention that would exclude agriculture (including no deforestation or livestock grazing) on land within 100 meters of the reservoir and the immediate up-slope stream network. In this intervention the vegetation would also be restored to a mixed system (50% grass and 50% tree cover).

  2. An intervention that would exclude agriculture and follow the same outline as the intervention described above, but with livestock grazing allowed.

  3. An intervention that would permit selective agriculture on land within 100 meters of the reservoir and up-slope stream network. The agriculture would be designed to minimize erosion, including measures such as: no livestock grazing, no-till agricultural production with crop rotations, mulch applications, at least 50% perennial including trees, and wild grasses would be allowed to grow.

  4. An intervention that would seek to manually dredge part of the reservoir bed and inlet river area with arbitrary disposal of sediment elsewhere.

  5. An intervention that would seek to manually dredge part of the reservoir bed and inlet river area, as the intervention above, but with targeted disposal of sand and clay layers onto nearby farmland that lacks sand or lacks clay.

  6. An intervention that would seek to construct small rock check dams (these are referred to as rock dams in the main text) upstream in the channel.

  7. An intervention that would promote a type of locally preferred terracing known as fanya juu on sloping agricultural land upstream the reservoir.

  8. An intervention that would promote bench terracing upstream of the reservoir

  9. An intervention that would promote no-till, or minimum tillage agriculture close to riparian zones upstream of the reservoir.

  10. An intervention that would seek to manage livestock densities in riparian areas upstream of the reservoir.

1.2 Description of intervention options designed by the group of experts

During a special workshop described in the main text, experts chose three interventions from the list above: (1) dredging along the main stream inlet; (2) building rock dams along the streams upstream; (3) implementation of a buffer protection scheme.

Dredging as one intervention for dealing with the problem of sedimentation in the Northern Volta Basin of Burkina Faso a. Stream dry-up during the dry season b. Area of dredging c. An attempt to clear the culvert (January 2016) d. indication of the height of sediment at the culvert entrance (now 3 meters above the original state).

Dredging as one intervention for dealing with the problem of sedimentation in the Northern Volta Basin of Burkina Faso a. Stream dry-up during the dry season b. Area of dredging c. An attempt to clear the culvert (January 2016) d. indication of the height of sediment at the culvert entrance (now 3 meters above the original state).

Permeable rock check dams as one intervention for dealing with the problem of sedimentation in the Lagdwenda reservoir of Northern Volta Basin of Burkina Faso. a. Main stream upstream. Water flows occur only in case of heavy rain. b. Areas to build permeable rock dams every 5 km along the stream network upstream of the reservoir (not drawn true to scale). Red lines indicate areas affected by building permeable rock dams. Red check-boxes indicate major rock check dam locations. c. Example of a permeable rock dam in construction (photo provided by the Nakambé water agency).

Permeable rock check dams as one intervention for dealing with the problem of sedimentation in the Lagdwenda reservoir of Northern Volta Basin of Burkina Faso. a. Main stream upstream. Water flows occur only in case of heavy rain. b. Areas to build permeable rock dams every 5 km along the stream network upstream of the reservoir (not drawn true to scale). Red lines indicate areas affected by building permeable rock dams. Red check-boxes indicate major rock check dam locations. c. Example of a permeable rock dam in construction (photo provided by the Nakambé water agency).

The third intervention proposed by the group of experts was to implement a buffer protection scheme for land around the reservoir and stream inlets. The objective of the intervention is to prevent sedimentation due to agricultural practices around the reservoir, and to reduce deposits of sediments coming from upstream.

The protection is composed of 3 buffer strips (except for land along the stream network upstream, which requires only the first buffer). The first buffer (75-100 meters) is made of stone barriers/contour bounding with stabilizing plants (grasses). The vegetation consists of grass (100% cover), delineated by stone barriers. Relevant grass species are: Andropogon gayanus, Andropogon ascinodis, Cymbopogon ascinodis, Vetiveria zizanioïdes, and Vetiveria nigritana.

Buffer strip as one intervention for dealing with the problem of sedimentation in the Lagdwenda reservoir of Northern Volta Basin of Burkina-Faso. The first buffer strip planted with stabilizing plants (list with more stabalizing species to be used is available).

Buffer strip as one intervention for dealing with the problem of sedimentation in the Lagdwenda reservoir of Northern Volta Basin of Burkina-Faso. The first buffer strip planted with stabilizing plants (list with more stabalizing species to be used is available).

The second buffer (75-100 meters; Figure 12b) consists of vegetables mixed with shrubs for firewood. The buffer consists of 20% shrub and 80 vegetables (shrubs in linear strips or scattered on the field). Possible crops are Solanum melongena (eggplant), Hibiscus sabdariffa (Roselle), Daucus carota (carrot), Brassica oleracea var capitata (cabbage), Cucumis sativus (cucumber), Cucurbita pepo (pumpkin), Fragaria ananassa (strawberry), Hibiscus esculentus (okra), Phaseolus vulgaris (common bean), Lycopersicum esculentum (tomato), Lactuca sativa (Lettuce), Manihot esculenta (Cassava), Cucumis melo (Melon), Allium cepa (onion), Citrullus vulgaris (watermelon), lpomoea batatas (sweet potato), Capsicum frutescens (chili pepper), Capsicum annuum (bell pepper), Solanum tuberosum (potato). Possible species of shrubs include: Acacia nilotica, Ziziphus mauritiana, Bauhinia rufescens, Piliostigma reticulatum, Mimosa pigra, Dichrostachys cinerea and Dichrostachys glomerata.

A second buffer strip with vegetables mixed with shrubs.

A second buffer strip with vegetables mixed with shrubs.

The third zone (75-100 meters) is a mix of crops with fruit trees. The buffer consists of 20 % fruit trees and 80% crops. Species of fruit trees include Mangifera indica (mango), Psidium guajava (guava), Citrus limon (lime), Citrus tangelo (tangerine), and Carica papaya (papaya). Regarding the crops, many common cereals such as Zea maize maize are included.

A third buffer zone with mixed fruit trees (list of other fruit tree species available).

A third buffer zone with mixed fruit trees (list of other fruit tree species available).

To be successful, the implementation of the buffer strips intervention should be combined with techniques to reduce surface runoff (half-moon micro-catchments, application of organic rather than synthetic fertilizers), alternative strategies to access water far from the reservoir (dug wells), education action (e.g. signs to be put up around the area to raise awareness of sediment management activities) and delineation of livestock access routes to the reservoir (exact location and number of these needs to be agreed with a local experts).

1.3 Model structure

By coding a participatory conceptual model as a Monte Carlo simulation using the decisionSupport() function in the R package decisionSupport we were able to offer decision makers probable outcomes in terms of Net Present Value (NPV) and cash flow for the intervention decisions (including combined interventions) and to identify variables that most affected the overall outcome of the different decisions.

Diagram of the overall model structure of interventions to reduce sediment deposition in the Lagdwenda reservoir in Burkina Faso. Net Present Value (NPV) for all interventions. D/S = downstream formal irrigation area (scheme 1); U/S = upstream informal cropping area (scheme 2).

Diagram of the overall model structure of interventions to reduce sediment deposition in the Lagdwenda reservoir in Burkina Faso. Net Present Value (NPV) for all interventions. D/S = downstream formal irrigation area (scheme 1); U/S = upstream informal cropping area (scheme 2).

1.4 Input table

The input table Sediment_input_table.csv contains the variables used in the model with distributions described by a 90% confidence interval, as well as the shape of the distribution.

Table of expert estimates for all model variables. The column ‘distribution’ lists the distribution shapes used, including constant (const), 0-1 truncated normal (tnorm_0_1), positive normal (posnorm) and normal (norm)
Description label variable distribution lower median upper
GENERAL
Years from the start of the implementation of the intervention to the end. Project time horizon n_years const 30.00 30.00
Coefficient of variation, ratio of the standard deviation to the mean (a measure of relative variability). coeff. Variation var_CV posnorm 5.00 20.00
Percentage discounting as a measurement of time preference for benefits and costs. discount rate discount_rate posnorm 1.00 5.00
GENERAL RISKS
Percentage risk that a natural hazard may occur. Risk of natural hazard NaturHazard tnorm_0_1 0.10 0.30
Percentage risk that a chosen intervention will be poorly managed. Risk of bad maintenance BadMaintenance tnorm_0_1 0.20 0.50
Percentage risk that a chosen intervention will be poorly designed. Risk of bad design BadDesign tnorm_0_1 0.20 0.50
Percentage risk that the communities surrounding the reservoir will not comply with requirements for intervention effectiveness. Risk of non compliance NonCompliance tnorm_0_1 0.20 0.50
Percentage risk that the communities surrounding the reservoir will not help with the implementation of the dredging intervention. Risk pop non involv (dredg.) dredge_NonPopInvolv tnorm_0_1 0.05 0.15
Percentage risk that the necessary donors (local and national governments, local NGOs) will not help with the implementation of the dredging intervention. Risk donors non involv (dredg.) dredge_NonDonorsInvolv tnorm_0_1 0.04 0.10
Percentage risk that the communities surrounding the reservoir will not help with the implementation of the check dam intervention. Risk pop non involv (check d.) check_NonPopInvolv tnorm_0_1 0.05 0.15
Percentage risk that the necessary institutions (local and national governments, local NGOs) will not help with the implementation of the check dam intervention. Risk instit. non involv (check d.) check_NonInstInvolv tnorm_0_1 0.02 0.10
Percentage risk that the necessary donors (local and national governments, local NGOs) will not help with the implementation of the check dam intervention. Risk donors non involv (check d.) check_NonDonorsInvolv tnorm_0_1 0.04 0.10
Percentage risk that the communities surrounding the reservoir will not help with the implementation of the buffer strip intervention. Risk pop non involv (buffer s.) buffer_NonPopInvolv tnorm_0_1 0.10 0.30
Percentage risk that the necessary institutions (local and national governments, local NGOs) will not help with the of the buffer strip intervention. Risk instit. non involv (buffer s.) buffer_NonInstInvolv tnorm_0_1 0.05 0.15
Percentage risk that the necessary donors (local and national governments, local NGOs) will not help with the implementation of the buffer strip intervention. Risk donors non involv (buffer s.) buffer_NonDonorsInvolv tnorm_0_1 0.04 0.10
IRRGATION AREA
The total current area (ha) of irigation downstream formal irrigation area (scheme 1) current irrigated area D/S current_irrig_area posnorm 9.00 10.00
LIVESTOCK
Tropical Livestock Units that are kept in the reservoir area and, at least partly, dependent on reservoir water TLU (baseline) TLU_no_buffer posnorm 8700.00 13000.00
Percentage change (reduction or growth of population) in Tropical Livestock Units that are kept in the reservoir area if the buffer strips are implemented TLU change if buffer s. change_TLU_buffer_perc norm -0.10 0.10
Livestock keepers profit (USD) per Tropical Livestock Unit. profit per TLU profit_per_TLU posnorm 40.00 120.00
IRRIGATION AREA
The total area (ha) of irigation downstream formal irrigation area (scheme 1) that would be lost if the pipes that provide water from the reservoir were clogged. Irrigated area D/S lost if pipes clogged pipe_blocked_area_lost_perc posnorm 10.00 50.00
DREDGING COSTS
The costs (USD) of a necessary study to plan the dredging intervention. Study cost (dredg.) dredging_study_cost posnorm 7200.00 8000.00
The costs (USD) of necessary supervision to implement the dredging intervention. Supervision costs (dredg.) dredging_supervision_cost posnorm 1600.00 4800.00
The costs (USD) of necessary administrative costs for implementing the dredging intervention. Admin. costs (dredg.) dredging_admin_cost posnorm 720.00 880.00
The costs (USD) of necessary transportation when implementing the dredging intervention. Transport costs (dredg.) dredging_transport_cost posnorm 1450.00 1930.00
The costs (USD) of necessary communications (phones etc.) when implementing the dredging intervention. Communication costs (dredg.) dredging_communication_cost posnorm 720.00 880.00
The costs (USD) of a feasibility assessment for building culverts as part of the dredging intervention. Culvert-feasibility costs (dredg.) dredging_culvert_feasibility_cost posnorm 1300.00 1600.00
The costs (USD) of necessary supervision for culvert construction when implementing the dredging intervention. Culvert-supervision costs (dredg.) dredging_culvert_supervision_cost posnorm 640.00 800.00
CHECK DAM COSTS
The costs (USD) of a feasibility assessment for building culverts as part of the check dam intervention. Localization cost (check d.) check_location_cost posnorm 1600.00 4800.00
The costs (USD) of a feasibility assessment for the check dam intervention. Feasibility cost (check d.) check_feasibility_cost posnorm 9600.00 14500.00
The costs (USD) of topobathymetry mapping and assessment for the check dam intervention. Topobathymetry cost (check d.) check_topobatymetry_cost posnorm 1000.00 1600.00
The costs (USD) of necessary supervision to implement the check dam intervention. Supervision cost (check d.) check_supervision_cost posnorm 960.00 3200.00
The costs (USD) of training workers to implement the check dam intervention. Training cost (check d.) check_training_cost posnorm 960.00 3200.00
The costs (USD) of necessary communications (phones etc.) when implementing the check dam intervention. Communication cost (check d.) check_communication_cost posnorm 1600.00 4800.00
The costs (USD) of necessary technical devices (gps etc.) when implementing the check dam intervention. Cost tech devices (check d.) check_tech_devices_cost posnorm 640.00 1300.00
The costs (USD) of necessary materials (wire, posts etc.) when implementing the check dam intervention. Material cost (check d.) check_material_cost posnorm 5600.00 10500.00
The costs (USD) of rocks when implementing the check dam intervention. Cost of rocks (check d.) check_rocks_cost posnorm 4800.00 8000.00
The costs (USD) of transportation when implementing the check dam intervention. Transport costs (check d.) check_transport_cost posnorm 3200.00 6400.00
BUFFER STRIP COSTS
The costs (USD) of necessary communications (phones etc.) when implementing the buffer strip intervention. Communication cost (buffer s.) buffer_communication_cost posnorm 5000.00 20000.00
The costs (USD) of zoning areas when implementing the buffer strip intervention. Zoning cost (buffer s.) buffer_zoning_cost posnorm 3000.00 29000.00
The costs (USD) of planting materials and labor when implementing the buffer strip intervention. Plantation cost (buffer s.) buffer_adaptation_cost posnorm 20000.00 130000.00
The costs (USD) of necessary technical devices when implementing the buffer strip intervention. Cost tech devices (buffer s.) buffer_tech_devices_cost posnorm 1000.00 4800.00
The costs (USD) of building and maintaining a tree and shrub nursery when implementing the buffer strip intervention. Cost of the nursery (buffer s.) buffer_nursery_cost posnorm 2000.00 18000.00
The costs (USD) of digging wells when implementing the buffer strip intervention. Cost of digging wells (buffer s.) buffer_wells_cost posnorm 20000.00 80000.00
The costs (USD) of training workers to implement the buffer strip intervention. Training cost (buffer s.) buffer_training_cost posnorm 8000.00 46000.00
The costs (USD) of necessary equipment (shovels, hoes etc.) when implementing the buffer strip intervention. Equipment cost (buffer s.) buffer_mngmt_oprt_cost const 0.00 0.00
The costs (USD) of follow up work and monitoring of the buffer strip intervention. Monitoring cost (buffer s.) buffer_mngmt_follow_cost const 0.00 0.00
The costs (USD) of an audit of the buffer strip intervention. Audit cost (buffer s.) buffer_mngmt_audit_cost const 0.00 0.00
DOWNSTREAM LOSSES
The percentage of the area of the downstream formal irrigation area (scheme 1) that would be lost in the case of a natural hazard. Irrigated area D/S lost if hazard Hazard_reduction_irrigated_area posnorm 10.00 30.00
The percentage of the area of the downstream formal irrigation area (scheme 1) that would be lost in the case of bad maintenance of an intervention. Irrigated area D/S lost if bad maint. BadMaint_reduction_irrigated_area posnorm 10.00 30.00
The percentage of the area of the downstream formal irrigation area (scheme 1) that would be lost in the case of a bad design of an intervention. Irrigated area D/S lost if bad design BadDesign_reduction_irrigated_area posnorm 10.00 30.00
MAINTENANCE COSTS
The costs (USD) of maintaining the check dam intervention. maintenance cost (check d.) maintenance_check_dams posnorm 160.00 400.00
The costs (USD) of maintaining the buffer strip intervention. maintenance cost (buffer s.) maintenance_buffer_strips posnorm 800.00 7000.00
UPSTREAM IRRIGATION AREA
The current area (ha) of the upstream informal cropping area (scheme 2). current irrigated area U/S scheme2_area_no_dredging_ha posnorm 0.50 3.00
The percentage increase in area of the upstream informal cropping area (scheme 2) if the dredging intervention is implemented. increase in irrigated area U/S if dredg. dredging_bump_scheme2_area_perc posnorm 10.00 30.00
Number of years that the dredging intervention would delay the reduction in area of the upstream informal cropping area (scheme 2). Delay in irrigated area decline U/S (dredg.) scheme2_time_until_dredging_benefits_gone_baseline posnorm 2.00 4.00
Number of years that the check dam intervention would delay the reduction in area of the upstream informal cropping area (scheme 2). Delay in irrigated area decline U/S (check d.) check_dams_added_scheme2_area_benefit_time posnorm 2.00 4.00
Vegetable yields (ton per ha) in the upstream informal cropping area (scheme 2). Yields per ha-vegetable U/S scheme2_vegetable_yield_t_ha posnorm 5.00 10.00
Profits (USD per ton) from vegetables grown in the upstream informal cropping area (scheme 2). Profit per ton-vegetable U/S scheme2_vegetable_profit_USD_t posnorm 50.00 150.00
Yields (ton per ha) in the upstream informal cropping area (scheme 2). Yields per ha-rice U/S scheme2_rice_yield_t_ha posnorm 1.50 2.00
Profits (USD per ton) from rice grown in the upstream informal cropping area (scheme 2). Profit per ton-rice U/S scheme2_rice_profit_USD_t norm 100.00 500.00
BUFFER STRIP CROPS
Area (ha) where vegetables would be grown in the buffer strip. Vegetable area in ha (buffer s.) buffer_vegetable_area_ha posnorm 5.00 7.00
Area (ha) where fruits would be grown in the buffer strip. Fruit area in ha (buffer s.) buffer_fruit_area_ha posnorm 1.00 2.00
Area (ha) where rainfed crops would be grown in the buffer strip. Rainfed crop area in ha (buffer s.) buffer_rainfed_crop_area_ha posnorm 6.00 8.00
Vegetable yields (ton per ha) in the buffer strip. Yields per ha-vegetable (buffer s.) buffer_vegetable_yield_t_ha posnorm 5.00 10.00
Fruit yields (ton per ha) in the buffer strip. Yields per ha-fruit (buffer s.) buffer_fruit_yield_t_ha posnorm 10.00 30.00
Yields (ton per ha) of rainfed crops in the buffer strip. Yields per ha-rainfed crops (buffer s.) buffer_rainfed_crop_yield_t_ha posnorm 1.00 3.00
Profits (USD per ton) from vegetables grown in the buffer strip. Profit per ton-vegetable (buffer s.) buffer_vegetable_profit_USD_t posnorm 100.00 200.00
Profits (USD per ton) from fruits grown in the buffer strip. Profit per ton-fruit (buffer s.) buffer_fruit_profit_USD_t posnorm 100.00 200.00
Profits (USD per ton) from rainfed crops grown in the buffer strip. Profit per ton-rainfed crops (buffer s.) buffer_rainfed_crop_profit_USD_t posnorm 50.00 200.00
DOWNSTREAM CROPS
The percentage of the area of the downstream formal irrigation area (scheme 1) planted with rice. Rice area’s share D/S in rainy season proportion_irrigation_scheme_rice tnorm_0_1 0.30 0.60
Yields (ton per ha) of rice in the downstream formal irrigation area (scheme 1) Yields per ha-rice D/S irrigation_scheme_rice_yield_t_ha posnorm 1.50 2.50
Profits (USD per ton) of rice in the downstream formal irrigation area (scheme 1) Profit per ton-rice D/S irrigation_scheme_rice_profit_USD_t posnorm 100.00 500.00
Yields (ton per ha) of vegetables in the downstream formal irrigation area (scheme 1) Yields per ha-vegetable D/S irrigation_scheme_vegetable_yield_t_ha posnorm 8.00 15.00
Profits (USD per ton) of vegetables in the downstream formal irrigation area (scheme 1) Profit per ton-vegetable D/S irrigation_scheme_vegetable_profit_USD_t posnorm 100.00 300.00
RESERVOIR IRRIGATION PIPES
Baseline percentage risk that irrigation pipes from the reservoir are blocked with sediment. Risk of pipe blockage (at present) current_risk_of_pipe_blockage tnorm_0_1 0.20 0.40
Baseline time (years) before irrigation pipes from the reservoir are blocked with sediment every second year. Years bef. blockage every 2nd year (basel.) baseline_time_until_pipes_blocked_every_second_year posnorm 3.00 5.00
Number of years that the dredging intervention would delay irrigation pipes from the reservoir being blocked with sediment every second year. Delay in blockage every 2nd year (dredg.) dredging_delay_of_pipes_blocked_every_second_year posnorm 1.00 3.00
Number of years that the check dam intervention would delay irrigation pipes from the reservoir being blocked with sediment every second year. Delay in blockage every 2nd year (check d.) check_dam_delay_of_pipes_blocked_every_second_year posnorm 2.00 4.00
Number of years that the buffer strip intervention would delay irrigation pipes from the reservoir being blocked with sediment every second year. Delay in blockage every 2nd year (buffer s.) buffer_strip_delay_of_pipes_blocked_every_second_year posnorm 4.00 7.00
Baseline percentage chance that irrigation pipes from the reservoir are cleared when blocked with sediment. Chance of blocked pipe cleared (at present) current_chance_of_blocked_pipe_cleared tnorm_0_1 0.70 0.90
Years until the chance of clearing irrigation pipes is half of the baseline rate. Years bef. P(blockage cleared)=0.5 (basel.) baseline_time_until_chance_cleared_50percent posnorm 7.00 10.00
Years until the chance of clearing irrigation pipes is half of the baseline rate. Delay bef. P(blockage cleared)=0.5 (dredg.) dredging_delay_of_time_until_chance_cleared_50percent posnorm 1.00 2.00
Years until the chance of clearing irrigation pipes is half of the baseline rate if the check dam intervention is implemented. Delay bef. P(blockage cleared)=0.5 (check d.) check_dam_delay_of_time_until_chance_cleared_50percent posnorm 2.00 4.00
Years until the chance of clearing irrigation pipes is half of the baseline rate if the buffer strip intervention is implemented. Delay bef. P(blockage cleared)=0.5 (buffer s.) buffer_strip_delay_of_time_until_chance_cleared_50percent posnorm 4.00 6.00
DECLINE DOWNSTREAM
Baseline time (years) until the irrigable area in the downstream formal irrigation area (scheme 1) begins to decline. Years bef. decline irrigable area D/S (basel.) baseline_time_until_irrig_area_declines posnorm 1.00 4.00
Number of years that the dredging intervention would delay the reduction in area of the downstream formal irrigation area (scheme 1). Delay in irrigable area decline D/S (dredg.) dredging_delay_of_irrig_area_decline posnorm 2.00 5.00
Number of years that the check dam intervention would delay the reduction in area of the downstream formal irrigation area (scheme 1). Delay in irrigable area decline D/S (check d.) check_dam_delay_of_irrig_area_decline posnorm 4.00 7.00
Number of years that the buffer strip intervention would delay the reduction in area of the downstream formal irrigation area (scheme 1). Delay in irrigable area decline D/S (buffer s.) buffer_strip_delay_of_irrig_area_decline posnorm 4.00 15.00
Baseline time (years) until the irrigable area in the downstream formal irrigation area (scheme 1) is half of the current area. Years bef. irrigable area halved D/S (basel.) baseline_start_losses_to_half_irrig_area_lost posnorm 8.00 15.00
Number of years that the dredging intervention would delay the reduction in area of the downstream formal irrigation area (scheme 1) to half of the current size. Delay in irrigable area halved D/S (dredg.) dredging_delay_of_irrig_area_halved posnorm 1.00 2.00
Number of years that the check dam intervention would delay the reduction in area of the downstream formal irrigation area (scheme 1) to half of the current size. Delay in irrigable area halved D/S (check d.) check_dam_delay_of_irrig_area_halved posnorm 3.00 5.00
Number of years that the buffer strip intervention would delay the reduction in area of the downstream formal irrigation area (scheme 1) to half of the current size. Delay in irrigable area halved D/S (buffer s.) buffer_strip_delay_of_irrig_area_halved posnorm 8.00 20.00
DECLINE UPSTREAM
Baseline time (years) until the irrigable area in the upstream informal cropping area (scheme 2) begins to decline. Years bef. decline irrigable area U/S (basel.) baseline_time_until_irrig_area2_declines posnorm 3.00 6.00
Number of years that the dredging intervention would delay the reduction in area of the upstream informal cropping area (scheme 2). Delay in irrigable area decline U/S (dredg.) dredging_delay_of_irrig_area2_decline posnorm 3.00 5.00
Number of years that the check dam intervention would delay the reduction in area of the upstream informal cropping area (scheme 2). Delay in irrigable area decline U/S (check d.) check_dam_delay_of_irrig_area2_decline posnorm 2.00 6.00
Baseline time (years) until the irrigable area in the upstream informal cropping area (scheme 2) is half of the current area. Years bef. irrigable area halved U/S (basel.) baseline_start_losses_to_half_irrig_area2_lost posnorm 10.00 17.00
Number of years that the dredging intervention would delay the reduction in area of the upstream informal cropping area (scheme 2) to half of the current size. Delay in irrigable area halved U/S (dredg.) dredging_delay_of_irrig_area2_halved posnorm 1.00 2.00
Number of years that the check dam intervention would delay the reduction in area of the upstream informal cropping area (scheme 2) to half of the current size. Delay in irrigable area halved U/S (check d.) check_dam_delay_of_irrig_area2_halved posnorm 3.00 5.00
FISH
The baseline annual value (USD) of fish in the reservoir. Annual fish value (baseline) current_annual_fish_value_USD posnorm 500.00 2000.00
The percentage of fish in the reservoir that would be lost in the case of a natural hazard. Fish reduction if hazard Hazard_reduction_fish_perc posnorm 5.00 15.00
Baseline time (years) until the current fish population in the reservoir begins to decline. Years bef. decline in fish (basel.) time_to_start_fish_decline_baseline posnorm 1.00 3.00
Number of years that the dredging intervention would delay the reduction in the fish population in the reservoir. Delay in fish decline (dredg.) dredging_delay_start_fish_decline posnorm 1.00 2.00
Number of years that the check dam intervention would delay the reduction in the fish population in the reservoir. Delay in fish decline (check d.) check_dams_delay_start_fish_decline posnorm 2.00 4.00
Number of years that the buffer strip intervention would delay the reduction in the fish population in the reservoir. Delay in fish decline (buffer s.) buffer_strips_delay_start_fish_decline posnorm 3.00 6.00
Baseline time (years) until the fish population in the reservoir is half of the current size. Years bef. fish pop. halved D/S (basel.) time_to_halve_fish_population_baseline posnorm 14.00 20.00
Number of years that the dredging intervention would delay the reduction of the fish population to half of the current size. Delay in fish pop. halved (dredg.) dredging_delay_in_time_to_halve_fish_population posnorm 1.00 2.00
Number of years that the check dam intervention would delay the reduction of the fish population to half of the current size. Delay in fish pop. halved (check d.) check_dams_delay_in_time_to_halve_fish_population posnorm 2.00 4.00
Number of years that the buffer strip intervention would delay the reduction of the fish population to half of the current size. Delay in fish pop. halved (buffer s.) buffer_strips_delay_in_time_to_halve_fish_population posnorm 5.00 8.00

2 Implementing the model in R

To set up the analysis we first define the variable n_years to indicate the 30 year timeline for assessing the impacts of the intervention decision.

We define the probabilities of four ex-post risks (natural hazards, bad maintenance, and bad design) as possible impacts on the benefits probability, and three ex-ante risks (non-involvement of the local population, the institutions, and the donors) as possible impacts on the implementation of interventions.

2.1 Chance events

Certain events can either occur or not, and values for dependent variables can depend on which of the cases occurs. The chance_event() function randomly simulates whether events occur and returns output values accordingly. The outputs can be single values or a series of values, with the option of introducing artificial variation into this dataset.

The identified ex-post and ex-ante risks were all assigned probability ranges from 0 to 1 and the chance_event() function was used to simulate a time series of their occurrence. The following lines of R code produce a series for the chance of the identified ex-ante or ex-post risk occurrences over 30 years (n_years). It simulates a random chance of the occurrence (value_if = 1) or not (value_if_not = 0) of the event.

2.1.1 Chance events and ex-ante risks

We used the chance_event() function for simulation of ex-ante risks as impacts on the implementation of the three interventions.

Probability distributions for the chance variables dredge_NonPopInvolv, dredge_NonDonorsInvolv are defined in the input table Sediment_input_table.csv.

2.1.1.1 Chance event of two ex-ante risks on the dredging intervention

  dredge_NonPopInvolvEvent<-chance_event(dredge_NonPopInvolv,value_if = 1,value_if_not =0,n=1)
  dredge_NonDonorsInvolvEvent<-chance_event(dredge_NonDonorsInvolv,1,value_if_not =0,n=1)

The ex-ante risk of lack of donor involvement was not considered valid for the dredging. This is because the main investment for the dredging intervention would be labor that, in principle, would be donated by the local communities.

2.1.1.2 Chance event of three ex-ante risks on the rock check dams intervention

  check_NonPopInvolvEvent<-chance_event(check_NonPopInvolv,value_if = 1,value_if_not =0,n=1)
  check_NonInstInvolvEvent<-chance_event(check_NonInstInvolv,value_if = 1,value_if_not =0,n=1)
  check_NonDonorsInvolvEvent<-chance_event(check_NonDonorsInvolv,value_if = 1,value_if_not = 0,n=1)

2.1.1.3 Chance event of three ex-ante risks on the buffer strips intervention

  buffer_NonPopInvolvEvent<-chance_event(buffer_NonPopInvolv,value_if = 1,value_if_not =0,n=1)
  buffer_NonInstInvolvEvent<-chance_event(buffer_NonInstInvolv,value_if = 1,value_if_not = 0,n=1)
  buffer_NonDonorsInvolvEvent<-chance_event(buffer_NonDonorsInvolv,value_if = 1,value_if_not = 0,n=1)

2.1.2 Chance events and ex-post risks

We used the chance_event() function for simulation of the four ex-post risks as impacts on the benefits. Probability distributions for the chance variables NaturHazard, BadMaintenance and BadDesign included in the code below, are all defined in the input table Sediment_input_table.csv.

  HazardEvent<-chance_event(NaturHazard,value_if = 1,value_if_not =0,n=n_years)
  BadMaintEvent<-chance_event(BadMaintenance,value_if = 1,value_if_not =0,n=n_years)

In the case of the ex-post risk of design problems (BadDesign) of the reservoir we used the option one_draw within the chance_event() function. one_draw is a boolean coefficient. By indicating that one_draw=TRUE the event occurrence BadDesign is determined only once with results applying to all elements of the results vector BadDesignEvent.

  BadDesignEvent<-chance_event(BadDesign,value_if = 1,value_if_not =0,n=n_years, one_draw = TRUE)

2.2 Variability in estimates

Many of the variables included in the model were considered to vary considerably over time and we chose to include this variation in the time series analyses. To do this we used the value varier function vv() to produce a time series that contains variation from a specified mean and coefficient of variation.

The probability distributions for the mean of the variable to be varied (the first argument in the vv() function) and the coefficient of variation (var_CV) are listed among the variables in Sediment_input_table.csv. var_CV is assigned an upper and lower bound (5% and 20%).

The value varier function vv() was applied to the identified ex-ante risks on the irrigation area.

  Hazard_scaling_irrig_area<-1-HazardEvent*vv(Hazard_reduction_irrigated_area,var_CV,n=n_years)/100
  BadMaint_scaling_irrig_area<-1-BadMaintEvent*vv(BadMaint_reduction_irrigated_area,var_CV,n=n_years)/100
  BadDesign_scaling_irrig_area<-1-BadDesignEvent*vv(BadDesign_reduction_irrigated_area,var_CV,n=n_years)/100

2.2.1 Simulation of common random draws

We also used vv() for simulation of common random draws for all intervention model runs.

2.2.1.1 Livestock

Livestock were calculated as Tropical Livestock Units (TLU), with the exclusion of the possibility of TLU inside the buffer zone if the buffer zone intervention was implemented. We used the vv() function to simulate expected variation in TLU and profits from TLU.

  TLU<-vv(TLU_no_buffer,var_CV,n_years)
  TLU_profit<-vv(profit_per_TLU,var_CV,n_years)

2.2.1.2 Crops

Crops were grown in two different areas, one formal irrigation scheme downstream of the dam and one informal cropping area upstream of the dam.

Map of the Lagdwenda reservoir in the Northern Volta Basin of Burkina Faso. The formal downstream irrigated cropping area (scheme 1) is outlined by the blue polygon at the bottom center. The informal upstream cropping area (scheme 2) is outlined by the blue polygon at the top.

Map of the Lagdwenda reservoir in the Northern Volta Basin of Burkina Faso. The formal downstream irrigated cropping area (scheme 1) is outlined by the blue polygon at the bottom center. The informal upstream cropping area (scheme 2) is outlined by the blue polygon at the top.

We used the vv() function to simulate expected variation crop benefits. Crop benefits were expected to vary with total cropping area (hectare) yields (ton per hectare) and profits (USD).

2.2.1.3 Crops in the buffer zone

Fruits

  precalc_buffer_fruit_benefits<-vv(buffer_fruit_area_ha,var_CV,n_years)*
    vv(buffer_fruit_yield_t_ha,var_CV,n_years)*
    vv(buffer_fruit_profit_USD_t,var_CV,n_years)

Vegetables

  precalc_buffer_vegetable_benefits<-vv(buffer_vegetable_area_ha,var_CV,n_years)*
    vv(buffer_vegetable_yield_t_ha,var_CV,n_years)*
    vv(buffer_vegetable_profit_USD_t,var_CV,n_years)

Other rainfed crops

    precalc_buffer_rainfed_crop_benefits<-vv(buffer_rainfed_crop_area_ha,var_CV,n_years)*
    vv(buffer_rainfed_crop_yield_t_ha,var_CV,n_years)*
    vv(buffer_rainfed_crop_profit_USD_t,var_CV,n_years)  

2.2.1.4 Crops in the informal cropping area (upstream)

  precalc_scheme2_vegetable_yield_t_ha<-vv(scheme2_vegetable_yield_t_ha,var_CV,n_years)
  precalc_scheme2_vegetable_profit_USD_t<-vv(scheme2_vegetable_profit_USD_t,var_CV,n_years)
  
  precalc_scheme2_rice_yield_t_ha<-vv(scheme2_rice_yield_t_ha,var_CV,n_years)
  precalc_scheme2_rice_profit_USD_t<-vv(scheme2_rice_profit_USD_t,var_CV,n_years)

2.2.1.5 Crops in the irrigation scheme (downstream)

Vegetables

  precalc_irrigation_scheme_vegetable_yield_t_ha<-vv(irrigation_scheme_vegetable_yield_t_ha,var_CV,n_years)
  precalc_irrigation_scheme_vegetable_profit_USD_t<-vv(irrigation_scheme_vegetable_profit_USD_t,var_CV,n_years)

Rice

  precalc_irrigation_scheme_rice_yield_t_ha<-vv(irrigation_scheme_rice_yield_t_ha,var_CV,n_years)
  precalc_irrigation_scheme_rice_profit_USD_t<-vv(irrigation_scheme_rice_profit_USD_t,var_CV,n_years)
  
  precalc_proportion_irrigation_scheme_rice<-vv(proportion_irrigation_scheme_rice,var_CV,n_years)  

2.2.1.6 Fish

We used the vv() function to simulate expected variation in benefits from fishing. The benefits from fishing were considered to vary according to var_CV. Fish benefits were also expected to vary according to the possibility of natural hazards.

  precalc_fish_hazards<-HazardEvent*vv(Hazard_reduction_fish_perc/100,var_CV,n=n_years)
  precalc_current_fish_value<-vv(current_annual_fish_value_USD,var_CV,n_years)

2.3 Intervention loop

We defined an intervention loop centered around the three interventions (dredging, rock check dams, and buffer strips) and their various combinations.

 for (decision_dredging in c(FALSE,TRUE))
    for (decision_check_dams in c(FALSE,TRUE))
      for (decision_buffer_strips in c(FALSE,TRUE))

2.3.1 Dredging

The model was programmed so that the implementation of dredging intervention would incur the costs of planning and doing the work, if it is not implemented then there would be no related costs.

        if(decision_dredging)
        {dredging<-TRUE
        dredging_PlanningCost<-TRUE
        dredging_Cost<-TRUE} else
        {dredging<-FALSE
        dredging_PlanningCost<-FALSE
        dredging_Cost<-FALSE}

If the dredging intervention was chosen but the local populations did not get involved, the costs of planning the dredging would still be incurred, but the costs of dredging the channels would not, since the intervention would not go ahead. In the case of the dredging intervention the lack of institutional involvement was assumed to have no effect.

        if (dredge_NonPopInvolvEvent){ dredging<-FALSE ; dredging_Cost<-FALSE}
        if (dredge_NonDonorsInvolvEvent){ 
          dredging<-FALSE ; dredging_Cost<-FALSE ; dredging_PlanningCost<-FALSE}

2.3.2 Rock check dams

The model was programmed so that the implementation of the rock check dam intervention incurs the costs of planning and doing the work, if it is not implemented then there would be no related costs.

        if(decision_check_dams)
        {check_dams<-TRUE
        check_dams_PlanningCost<-TRUE
        check_dams_Cost<-TRUE} else
        {check_dams<-FALSE
        check_dams_PlanningCost<-FALSE
        check_dams_Cost<-FALSE}

If the rock check dam intervention was chosen but either the local populations, institutions, or donors did not get involved, the costs of planning the rock check dams would still be incurred, but the costs of building the rock check dams would not as the intervention would not go ahead.

        if (check_NonPopInvolvEvent){check_dams<-FALSE ; check_dams_Cost<-FALSE}
        if (check_NonInstInvolvEvent){check_dams<-FALSE ; check_dams_Cost<-FALSE}
        if (check_NonDonorsInvolvEvent){check_dams<-FALSE ; dredging_Cost<-FALSE ; check_dams_PlanningCost<-FALSE}

2.3.3 Buffer strips

The model was programmed so that the implementation of the buffer strips incur the costs of planning and doing the work, if it is not implemented then there would be no related costs.

        if(decision_buffer_strips)
        {buffer_strips<-TRUE
        buffer_strips_PlanningCost<-TRUE
        buffer_strips_Cost<-TRUE} else
        {buffer_strips<-FALSE
        buffer_strips_PlanningCost<-FALSE
        buffer_strips_Cost<-FALSE}

If the buffer strip intervention was chosen but either the local populations, institutions, or donors did not get involved, the costs of planning the buffer strips would still be incurred, but the costs of planting the buffer strips would not, since the intervention would not go ahead.

        if (buffer_NonPopInvolvEvent){buffer_strips<-FALSE ; buffer_strips_Cost<-FALSE}
        if (buffer_NonInstInvolvEvent){buffer_strips<-FALSE ; buffer_strips_Cost<-FALSE}
        if (buffer_NonDonorsInvolvEvent){buffer_strips<-FALSE ; buffer_strips_Cost<-FALSE ; buffer_strips_PlanningCost<-FALSE}

2.3.4 Costs of the interventions

All interventions had a number of costs that were identified by the local experts. The probability distributions for these are listed among the variables in Sediment_input_table.csv.

2.3.4.1 Costs of dredging

        if(dredging_Cost) {cost_dredging<-dredging_supervision_cost+dredging_admin_cost+dredging_transport_cost+
          dredging_culvert_supervision_cost
        } else cost_dredging<-0 

2.3.4.2 Costs of rock check dams

        if(check_dams_Cost) {cost_check_dams<-check_supervision_cost+check_training_cost+check_tech_devices_cost+check_material_cost+
          check_rocks_cost+check_transport_cost
        } else cost_check_dams<-0 

2.3.4.3 Costs of buffer strips

        if(buffer_strips_Cost) {cost_buffer_strips<-buffer_adaptation_cost+buffer_tech_devices_cost+buffer_nursery_cost+buffer_wells_cost+
          buffer_training_cost+buffer_mngmt_oprt_cost+buffer_mngmt_follow_cost+buffer_mngmt_audit_cost
        } else cost_buffer_strips<-0 

2.3.4.4 Costs of planning

        if(dredging_PlanningCost) {plan_cost_dredging<-dredging_study_cost+dredging_communication_cost+dredging_culvert_feasibility_cost
        } else plan_cost_dredging<-0 
        if(check_dams_PlanningCost) {plan_cost_check_dams<-check_location_cost+check_feasibility_cost+check_topobatymetry_cost+check_communication_cost
        } else plan_cost_check_dams<-0
        if(buffer_strips_PlanningCost) {plan_cost_buffer_strips<-buffer_communication_cost+buffer_zoning_cost
        } else plan_cost_buffer_strips<-0 

2.3.4.5 Costs of maintenance

        maintenance_cost<-rep(0,n_years)

The vv() function was used to simulate the expected variation in the cost of maintenance for the rock check dams and buffer strip interventions.

        if(check_dams) maintenance_cost<-maintenance_cost+vv(maintenance_check_dams,var_CV,n_years)
        
        if(buffer_strips) maintenance_cost<-maintenance_cost+vv(maintenance_buffer_strips,var_CV,n_years)

2.3.4.6 Costs of interventions

        intervention_cost<-maintenance_cost
        intervention_cost[1]<-intervention_cost[1]+cost_dredging+cost_check_dams+cost_buffer_strips+
          plan_cost_dredging+plan_cost_check_dams+plan_cost_buffer_strips

2.3.5 Decline in irrigable area over time

Because sediments accumulate in the reservoir, the dam gradually loses its capacity to store water, which may become a binding constraint for irrigation in the foreseeable future. Because of this, in the irrigation scheme downstream, the total irrigable area (area that can be irrigated given the water stock in the reservoir) was expected to decline over time. This decline in irrigable area would, however, be delayed by the various interventions. This was modeled as a sigmoid using the gompertz_yield function to simulate these delays in loss of irrigable area over time.

The Gompertz equation is written as: f(t)=a • e^(-b • e^(-c • t)). In this formula “a” is the maximum asymptotic ‘yield’ value (provided as an input, in our case “max-harvest=1”) and “b” and “c” are two parameters that can be identified from a set of two equations with two unknowns. Concretely, rather than estimating them directly, we define the equation for two points in time, with user-estimated inputs, and then solve the equations for “b” and “c”. This means, we say that f(t1)=e^(-b • e^(-c • t1))=f1 and f(t2)=e^(-b • e^(-c • t2))=f2 t1, t2, f1 and f2 are inputs (“a” is missing here, because we specify f1 and f2 as percentage of “a”, so that it drops out). These two equations with two unknowns can be solved mathematically to obtain “b” and “c”. That is what the Gompertz function does.

gompertz_time1_time_until_irrigated_area_declines<-
  sum(c(baseline_time_until_irrig_area_declines,
          dredging*dredging_delay_of_irrig_area_decline,
          check_dams*check_dam_delay_of_irrig_area_decline,
          buffer_strips*buffer_strip_delay_of_irrig_area_decline))

gompertz_time2_time_until_irrigated_area_halved<-
  sum(c(gompertz_time1_time_until_irrigated_area_declines,
        baseline_start_losses_to_half_irrig_area_lost,
        dredging*dredging_delay_of_irrig_area_halved,
        check_dams*check_dam_delay_of_irrig_area_halved,
        buffer_strips*buffer_strip_delay_of_irrig_area_halved))

The Gompertz function for loss of irrigable area in the downstream irrigation area was applied using the variables defined above. The irrigable area was likely to be highest in the first few years, thus we called for the highest value in the first year max-harvest=1. Following this, irrigation area would gradually decrease, starting from gompertz_time1_time_until_irrigated_area_declines until the irrigation area was lost by half gompertz_time1_time_until_irrigated_area_declines.

irrig_scheme1_area_share<-
  1-gompertz_yield(max_harvest=1,
  time_to_first_yield_estimate=gompertz_time1_time_until_irrigated_area_declines,
  time_to_second_yield_estimate=gompertz_time2_time_until_irrigated_area_halved,
  first_yield_estimate_percent=10,
  second_yield_estimate_percent=50, 
  n_years=n_years, var_CV = 0,
  no_yield_before_first_estimate = TRUE)

We define a vector of the irrigation area over time from the output of the gompertz_yield function.

        irrig_scheme1_area_share<-irrig_scheme1_area_share[1:30]
        
        irrig_scheme1_area<-current_irrig_area*irrig_scheme1_area_share

2.3.6 Irrigation pipe blockage and clearing

Downstream the reservoir, water supply is achieved through a system of pipes underneath the dam’s barrier that allow the irrigation scheme to be watered. Sediments regularly disrupt this system, blocking the pipes and preventing water from flowing into the agricultural area. Therefore, interventions that reduce sedimentation prevent the obstruction of pipes and generate benefits by securing irrigation use in the scheme. We used the gompertz_yield function to represent the decline in the irrigated area over time. The blockage was likely to be low for a few years after starting the irrigation, following which blockages would gradually increase until the irrigation pipes were no longer operational.

gompertz_time2_time_until_pipe_blockage_occurs_every_second_year<-
  sum(c(baseline_time_until_pipes_blocked_every_second_year,
       dredging*dredging_delay_of_pipes_blocked_every_second_year,
       check_dams*check_dam_delay_of_pipes_blocked_every_second_year,
       buffer_strips*buffer_strip_delay_of_pipes_blocked_every_second_year))

We used the gompertz_yield function to define the risk of pipe blockage.

risk_blockage<-gompertz_yield(max_harvest=1,
                                      time_to_first_yield_estimate=0,
                                      time_to_second_yield_estimate=gompertz_time2_time_until_pipe_blockage_occurs_every_second_year,
                                      first_yield_estimate_percent=100*current_risk_of_pipe_blockage,
                                      second_yield_estimate_percent=50,
                                      n_years=n_years, var_CV = 0,
                                      no_yield_before_first_estimate = TRUE)
        risk_blockage[which(risk_blockage>1)]<-1
        risk_blockage[which(risk_blockage<0)]<-0

We defined the time_to_second_yield_estimate for the gompertz_yield function by adding together the amount of time that the different interventions delay the pipe blockage given their occurrence.

gompertz_time2_time_until_chance_cleared_50percent<-
  sum(c(baseline_time_until_chance_cleared_50percent,
    dredging*dredging_delay_of_time_until_chance_cleared_50percent,
    check_dams*check_dam_delay_of_time_until_chance_cleared_50percent,
    buffer_strips*buffer_strip_delay_of_time_until_chance_cleared_50percent))

We used the gompertz_yield function to define the chance of pipes being cleared.

chance_cleared<-gompertz_yield(max_harvest=1,
       time_to_first_yield_estimate=0,
       time_to_second_yield_estimate=gompertz_time2_time_until_chance_cleared_50percent,
       first_yield_estimate_percent=100*current_chance_of_blocked_pipe_cleared,
       second_yield_estimate_percent=50,
       n_years=n_years, var_CV = 10,
       no_yield_before_first_estimate = TRUE)

We then bound the chance of being cleared to between ‘0’ and ‘1’.

        chance_cleared[which(chance_cleared>1)]<-1
        chance_cleared[which(chance_cleared<0)]<-0

2.3.6.1 Creation of intermediate variables

We then created intermediate variables to calculate the area potentially irrigated, in the formal irrigation scheme, given the risk that pipes are blocked and/or cleared.

        pipe_clogging<-sapply(1:n_years,function(x) rbinom(1,1,risk_blockage[x]))
        pipe_cleared<-sapply(1:n_years,function(x) rbinom(1,1,chance_cleared[x]))
        
        pipe_blocked <- pipe_clogging
        for (i in 2:length(pipe_blocked))
          if (pipe_clogging[i] == 0) 
            if (pipe_blocked[i - 1] == 1) 
              if (!pipe_cleared[i] == 1) pipe_blocked[i] <- 1

We used the vv() function to simulate the ex-ante risks of formal irrigation area lost to pipe blockage.

        irrig_scheme1_irrigated_area_ex_ante<-irrig_scheme1_area*(1-pipe_blocked*vv(pipe_blocked_area_lost_perc/100,var_CV,n_years))
  
        irrigated_area_scheme1<-irrig_scheme1_irrigated_area_ex_ante*
          Hazard_scaling_irrig_area*BadMaint_scaling_irrig_area*
          BadDesign_scaling_irrig_area 

We then calculated the benefits from rice cultivation on the shore of the reservoir. These were set to ‘0’ if buffer strips were implemented.

        if (buffer_strips)
          buffer_strip_cultivation<-TRUE else buffer_strip_cultivation<-FALSE

We then defined the time until the benefits from rice cultivation on the shore of the reservoir were gone by adding the baseline case to the benefits from rock check dams.

scheme2_time_until_benefits_gone<-
  scheme2_time_until_dredging_benefits_gone_baseline+
        check_dams*check_dams_added_scheme2_area_benefit_time

We then used the gompertz_yield function to calculate the benefits from rice cultivation on the shore of the reservoir. These were set to ‘0’ if buffer strips were implemented.

scheme2_area_scaler<-gompertz_yield(max_harvest=1,
                   time_to_first_yield_estimate=1,
                   time_to_second_yield_estimate=scheme2_time_until_benefits_gone,
                   first_yield_estimate_percent=100,
                   second_yield_estimate_percent=0,
                   n_years=n_years, var_CV = 0,
                   no_yield_before_first_estimate = TRUE)

We used the output of the gompertz_yield function to calculate the area of the informal cropping area.

scheme2_area_ha<-scheme2_area_no_dredging_ha*(1+
    dredging*scheme2_area_scaler*dredging_bump_scheme2_area_perc/100)

With the exception of a small bump in yields from the dredging intervention, the total area of rice cultivation in the informal cropping scheme was expected to remain unchanged. This is because the water needed for rice cultivation is easily accessible in the rainy season.

The vv() function was used to simulate the variability in the rice benefits from the informal cropping area. In the case that the buffer strip intervention was implemented we expected no informal cropping area, as this would be within the buffer zone.

        scheme2_rice_benefits<-as.numeric(!buffer_strips)*
          vv(scheme2_area_ha,var_CV,n_years)*
          precalc_scheme2_rice_yield_t_ha*
          precalc_scheme2_rice_profit_USD_t

The time until irrigation areas begin to decline in the informal cropping area as well as the time at which they have declined by half were defined for use in the gompertz_yield function.

gompertz_time1_time_until_irrigated_area2_declines<-sum(c(baseline_time_until_irrig_area2_declines,
                      dredging*dredging_delay_of_irrig_area2_decline,
                      check_dams*check_dam_delay_of_irrig_area2_decline))

gompertz_time2_time_until_irrigated_area2_halved<-
                       sum(c(gompertz_time1_time_until_irrigated_area2_declines,
                       baseline_start_losses_to_half_irrig_area2_lost,
                       dredging*dredging_delay_of_irrig_area2_halved,
                       check_dams*check_dam_delay_of_irrig_area2_halved))

The gompertz_yield function was used to simulate the decline of the informal cropping area overtime.

irrig_scheme2_area_share<-
    1-gompertz_yield(max_harvest=1,
    time_to_first_yield_estimate=gompertz_time1_time_until_irrigated_area2_declines,
    time_to_second_yield_estimate=gompertz_time2_time_until_irrigated_area2_halved,
    first_yield_estimate_percent=0,
    second_yield_estimate_percent=50, n_years=n_years, var_CV = 0,
    no_yield_before_first_estimate = TRUE)

The outputs (declines in cropping area) from the gompertz_yield function were used to calculate the informal cropping area by multiplying by the original estimated informal cropping area scheme2_area_ha defined in the input table Sediment_input_table.csv.

        scheme2_vegetable_area_ha<-scheme2_area_ha*irrig_scheme2_area_share

These were then used to calculate the benefits of crop production in the informal cropping area.

scheme2_vegetable_benefits<-as.numeric(!buffer_strips)*
          vv(scheme2_vegetable_area_ha,var_CV,n_years)*
          precalc_scheme2_vegetable_yield_t_ha*
          precalc_scheme2_vegetable_profit_USD_t
        
buffer_fruit_benefits<-as.numeric(buffer_strips)*precalc_buffer_fruit_benefits
buffer_vegetable_benefits<-as.numeric(buffer_strips)*precalc_buffer_vegetable_benefits
buffer_rainfed_crop_benefits<-as.numeric(buffer_strips)*precalc_buffer_rainfed_crop_benefits
        
rainy_season_rice_area_scheme1<-
        irrigated_area_scheme1*precalc_proportion_irrigation_scheme_rice
        rainy_season_vegetable_area_scheme1<-irrigated_area_scheme1-rainy_season_rice_area_scheme1
        
irrigation_season_rainy_season_benefits_scheme1<-rainy_season_rice_area_scheme1*
          precalc_irrigation_scheme_rice_yield_t_ha*
          precalc_irrigation_scheme_rice_profit_USD_t+
          rainy_season_vegetable_area_scheme1*
          precalc_irrigation_scheme_vegetable_yield_t_ha*
          precalc_irrigation_scheme_vegetable_profit_USD_t
        
irrigation_season_dry_season_benefits_scheme1<-irrigated_area_scheme1*
          precalc_irrigation_scheme_vegetable_yield_t_ha*
          precalc_irrigation_scheme_vegetable_profit_USD_t

The total benefits of crop production were defined by adding all the benefits of agricultural production in the formal and informal cropping area and in the buffer zone.

crop_production<-scheme2_rice_benefits+
          scheme2_vegetable_benefits+
          buffer_fruit_benefits+
          buffer_vegetable_benefits+
          buffer_rainfed_crop_benefits+
          irrigation_season_rainy_season_benefits_scheme1+
          irrigation_season_dry_season_benefits_scheme1

The amount of time to the fish population beginning to decline and the time it takes for the fish population to decline by half were defined for use in the gompertz_yield function.

time_to_start_fish_decline<-sum(c(time_to_start_fish_decline_baseline,
                        dredging_delay_start_fish_decline,
                        check_dams_delay_start_fish_decline,
                        buffer_strips_delay_start_fish_decline))
        
time_to_fish_population_halved<-sum(c(time_to_start_fish_decline,
                       time_to_halve_fish_population_baseline,
                       dredging_delay_in_time_to_halve_fish_population,
                       check_dams_delay_in_time_to_halve_fish_population,
                       buffer_strips_delay_in_time_to_halve_fish_population))

The gompertz_yield function was used to simulate the decline in benefits from fishing overtime.

fish_benefit_scaler<-
    1-gompertz_yield(max_harvest=1,
    time_to_first_yield_estimate=time_to_start_fish_decline,
    time_to_second_yield_estimate=time_to_fish_population_halved,
    first_yield_estimate_percent=0,
    second_yield_estimate_percent=50, n_years=n_years, var_CV = 10,
    no_yield_before_first_estimate = TRUE)

The outputs from the gompertz_yield function were used to calculate the risk adjusted benefits from fishing in the reservoir.

        risk_adjusted_fish_benefits<-fish_benefit_scaler*(1-precalc_fish_hazards)

The risk adjusted benefits from fishing were then used to calculate the benefits from fishing in the reservoir.

        Fish_benefits<-precalc_current_fish_value*risk_adjusted_fish_benefits

Benefits from additional livestock rearing through access to the reservoir were calculated by subtracting the TLU change if the buffer strip intervention is implemented. Buffer strips were expected to restrict access to the reservoir for livestock and thus reduce TLU.

if(buffer_strips)  TLU_intervention<-
  TLU*(1+change_TLU_buffer_perc/100) 
  else TLU_intervention<-TLU

Benefits from additional livestock rearing through access to the reservoir were calculated as total TLU multiplied by profit per unit.

        livestock_benefits<-TLU_intervention*TLU_profit

Total benefits were then calculated as the benefits of crop production plus benefits of fishing and benefits of keeping livestock.

        total_benefits<-crop_production+Fish_benefits+livestock_benefits

Finally the net benefits were calculated by subtracting the intervention costs from the total benefits.

        net_benefits<-total_benefits-intervention_cost
        
        if(decision_dredging & decision_check_dams & decision_buffer_strips) result_dredge_check_buff<-net_benefits
        if(decision_dredging & decision_check_dams & !decision_buffer_strips) result_dredge_check_nbuff<-net_benefits
        if(decision_dredging & !decision_check_dams & decision_buffer_strips) result_dredge_ncheck_buff<-net_benefits
        if(decision_dredging & !decision_check_dams & !decision_buffer_strips) result_dredge_ncheck_nbuff<-net_benefits
        if(!decision_dredging & decision_check_dams & decision_buffer_strips) result_ndredge_check_buff<-net_benefits
        if(!decision_dredging & decision_check_dams & !decision_buffer_strips) result_ndredge_check_nbuff<-net_benefits
        if(!decision_dredging & !decision_check_dams & decision_buffer_strips) result_ndredge_ncheck_buff<-net_benefits
        if(!decision_dredging & !decision_check_dams & !decision_buffer_strips) result_ndredge_ncheck_nbuff<-net_benefits

The discount function was used to adjust the net benefits for time preference. With the attribute calculate_NPV(), the function automatically calculates the Net Present Value (the sum of discounted values)

 NPV_dredge_check_buff<-discount(result_dredge_check_buff,discount_rate,calculate_NPV = TRUE)
  NPV_dredge_check_nbuff<-discount(result_dredge_check_nbuff,discount_rate,calculate_NPV = TRUE)
  NPV_dredge_ncheck_buff<-discount(result_dredge_ncheck_buff,discount_rate,calculate_NPV = TRUE)
  NPV_dredge_ncheck_nbuff<-discount(result_dredge_ncheck_nbuff,discount_rate,calculate_NPV = TRUE)
  NPV_ndredge_check_buff<-discount(result_ndredge_check_buff,discount_rate,calculate_NPV = TRUE)
  NPV_ndredge_check_nbuff<-discount(result_ndredge_check_nbuff,discount_rate,calculate_NPV = TRUE)
  NPV_ndredge_ncheck_buff<-discount(result_ndredge_ncheck_buff,discount_rate,calculate_NPV = TRUE)
  NPV_ndredge_ncheck_nbuff<-discount(result_ndredge_ncheck_nbuff,discount_rate,calculate_NPV = TRUE)

The final lines of the function call for a list of NPV and cash flow for all interventions and combinations of interventions.

  return(list(NPV_dredge_check_buff=NPV_dredge_check_buff-NPV_ndredge_ncheck_nbuff,
              NPV_dredge_check_nbuff=NPV_dredge_check_nbuff-NPV_ndredge_ncheck_nbuff,
              NPV_dredge_ncheck_buff=NPV_dredge_ncheck_buff-NPV_ndredge_ncheck_nbuff,
              NPV_dredge_ncheck_nbuff=NPV_dredge_ncheck_nbuff-NPV_ndredge_ncheck_nbuff,
              NPV_ndredge_check_buff=NPV_ndredge_check_buff-NPV_ndredge_ncheck_nbuff,
              NPV_ndredge_check_nbuff=NPV_ndredge_check_nbuff-NPV_ndredge_ncheck_nbuff,
              NPV_ndredge_ncheck_buff=NPV_ndredge_ncheck_buff-NPV_ndredge_ncheck_nbuff))

3 R function (decision model)

The full R function (decision model) for the sediment intervention decision is given below. It calculates the Net Present Value (NPV) and cash flow for the implementation of the three identified sediment management options. The decision model function is named sediment_calc. This function receives values for all the variables specified in the input table Sediment_input_table.csv.

sediment_calc<-function(x, varnames)
{
  
  ### 4 ex-post risks, impacts on the benefits
  HazardEvent<-chance_event(NaturHazard,1,0,n=n_years)
  BadMaintEvent<-chance_event(BadMaintenance,1,0,n=n_years)
  BadDesignEvent<-chance_event(BadDesign,1,0,n=n_years, one_draw = TRUE)
  
  Hazard_scaling_irrig_area<-
    1-HazardEvent*vv(Hazard_reduction_irrigated_area,var_CV,n=n_years)/100
  BadMaint_scaling_irrig_area<-
    1-BadMaintEvent*vv(BadMaint_reduction_irrigated_area,var_CV,n=n_years)/100
  BadDesign_scaling_irrig_area<-
    1-BadDesignEvent*vv(BadDesign_reduction_irrigated_area,var_CV,n=n_years)/100
  
  ### 3 ex-ante risks, impacts on the implementation of interventions
  dredge_NonPopInvolvEvent<-chance_event(dredge_NonPopInvolv,1,0,n=1)
  dredge_NonDonorsInvolvEvent<-chance_event(dredge_NonDonorsInvolv,1,0,n=1)
  
  check_NonPopInvolvEvent<-chance_event(check_NonPopInvolv,1,0,n=1)
  check_NonInstInvolvEvent<-chance_event(check_NonInstInvolv,1,0,n=1)
  check_NonDonorsInvolvEvent<-chance_event(check_NonDonorsInvolv,1,0,n=1)
  
  buffer_NonPopInvolvEvent<-chance_event(buffer_NonPopInvolv,1,0,n=1)
  buffer_NonInstInvolvEvent<-chance_event(buffer_NonInstInvolv,1,0,n=1)
  buffer_NonDonorsInvolvEvent<-chance_event(buffer_NonDonorsInvolv,1,0,n=1)
  
  ##calculation of common random draws for all intervention model runs
  
  TLU<-vv(TLU_no_buffer,var_CV,n_years)
  TLU_profit<-vv(profit_per_TLU,var_CV,n_years)
  
  precalc_buffer_fruit_benefits<-vv(buffer_fruit_area_ha,var_CV,n_years)*
    vv(buffer_fruit_yield_t_ha,var_CV,n_years)*
    vv(buffer_fruit_profit_USD_t,var_CV,n_years)
  precalc_buffer_vegetable_benefits<-vv(buffer_vegetable_area_ha,var_CV,n_years)*
    vv(buffer_vegetable_yield_t_ha,var_CV,n_years)*
    vv(buffer_vegetable_profit_USD_t,var_CV,n_years)
  precalc_buffer_rainfed_crop_benefits<-vv(buffer_rainfed_crop_area_ha,var_CV,n_years)*
    vv(buffer_rainfed_crop_yield_t_ha,var_CV,n_years)*
    vv(buffer_rainfed_crop_profit_USD_t,var_CV,n_years)                                 
  precalc_scheme2_vegetable_yield_t_ha<-vv(scheme2_vegetable_yield_t_ha,var_CV,n_years)
  precalc_scheme2_vegetable_profit_USD_t<-vv(scheme2_vegetable_profit_USD_t,var_CV,n_years)
  
  precalc_scheme2_rice_yield_t_ha<-vv(scheme2_rice_yield_t_ha,var_CV,n_years)
  precalc_scheme2_rice_profit_USD_t<-vv(scheme2_rice_profit_USD_t,var_CV,n_years)
  
  precalc_irrigation_scheme_vegetable_yield_t_ha<-
    vv(irrigation_scheme_vegetable_yield_t_ha,var_CV,n_years)
  precalc_irrigation_scheme_vegetable_profit_USD_t<-
    vv(irrigation_scheme_vegetable_profit_USD_t,var_CV,n_years)
  
  precalc_irrigation_scheme_rice_yield_t_ha<-
    vv(irrigation_scheme_rice_yield_t_ha,var_CV,n_years)
  precalc_irrigation_scheme_rice_profit_USD_t<-
    vv(irrigation_scheme_rice_profit_USD_t,var_CV,n_years)
  
  precalc_proportion_irrigation_scheme_rice<-
    vv(proportion_irrigation_scheme_rice,var_CV,n_years)  
  
  precalc_fish_hazards<-HazardEvent*vv(Hazard_reduction_fish_perc/100,var_CV,n=n_years)
  precalc_current_fish_value<-vv(current_annual_fish_value_USD,var_CV,n_years)
  
  for (decision_dredging in c(FALSE,TRUE))
    for (decision_check_dams in c(FALSE,TRUE))
      for (decision_buffer_strips in c(FALSE,TRUE))
      {
        ###  Intervention 1: dredging
        if(decision_dredging)
        {dredging<-TRUE
        dredging_PlanningCost<-TRUE
        dredging_Cost<-TRUE} else
        {dredging<-FALSE
        dredging_PlanningCost<-FALSE
        dredging_Cost<-FALSE}
        
        if (dredge_NonPopInvolvEvent){ dredging<-FALSE ; dredging_Cost<-FALSE}
        # Non institutional involvement is assumed to have no  effect  #
        if (dredge_NonDonorsInvolvEvent){ dredging<-FALSE ; dredging_Cost<-FALSE ; dredging_PlanningCost<-FALSE}
        
        ###  Intervention 2: check_dams
        if(decision_check_dams)
        {check_dams<-TRUE
        check_dams_PlanningCost<-TRUE
        check_dams_Cost<-TRUE} else
        {check_dams<-FALSE
        check_dams_PlanningCost<-FALSE
        check_dams_Cost<-FALSE}
        
        if (check_NonPopInvolvEvent){check_dams<-FALSE ; check_dams_Cost<-FALSE}
        if (check_NonInstInvolvEvent){check_dams<-FALSE ; check_dams_Cost<-FALSE}
        if (check_NonDonorsInvolvEvent){check_dams<-FALSE ; dredging_Cost<-FALSE ; check_dams_PlanningCost<-FALSE}
        
        ###  Intervention 3: buffer_strips
        if(decision_buffer_strips)
        {buffer_strips<-TRUE
        buffer_strips_PlanningCost<-TRUE
        buffer_strips_Cost<-TRUE} else
        {buffer_strips<-FALSE
        buffer_strips_PlanningCost<-FALSE
        buffer_strips_Cost<-FALSE}
        
        if (buffer_NonPopInvolvEvent){buffer_strips<-FALSE ; buffer_strips_Cost<-FALSE}
        if (buffer_NonInstInvolvEvent){buffer_strips<-FALSE ; buffer_strips_Cost<-FALSE}
        if (buffer_NonDonorsInvolvEvent){buffer_strips<-FALSE ; buffer_strips_Cost<-FALSE ; buffer_strips_PlanningCost<-FALSE}
        
        ###Costs
        if(dredging_Cost) {cost_dredging<-
          dredging_supervision_cost+dredging_admin_cost+dredging_transport_cost+
          dredging_culvert_supervision_cost
        } else cost_dredging<-0 
        if(check_dams_Cost) {cost_check_dams<-
          check_supervision_cost+check_training_cost+check_tech_devices_cost+
          check_material_cost+
          check_rocks_cost+check_transport_cost
        } else cost_check_dams<-0 
        if(buffer_strips_Cost) {cost_buffer_strips<-
          buffer_adaptation_cost+buffer_tech_devices_cost+buffer_nursery_cost+
          buffer_wells_cost+
          buffer_training_cost+buffer_mngmt_oprt_cost+buffer_mngmt_follow_cost+
          buffer_mngmt_audit_cost
        } else cost_buffer_strips<-0 
        
        if(dredging_PlanningCost) {plan_cost_dredging<-
          dredging_study_cost+dredging_communication_cost+
          dredging_culvert_feasibility_cost
        } else plan_cost_dredging<-0 
        if(check_dams_PlanningCost) {plan_cost_check_dams<-
          check_location_cost+check_feasibility_cost+check_topobatymetry_cost+
          check_communication_cost
        } else plan_cost_check_dams<-0
        if(buffer_strips_PlanningCost) {plan_cost_buffer_strips<-buffer_communication_cost+buffer_zoning_cost
        } else plan_cost_buffer_strips<-0 
        
        maintenance_cost<-rep(0,n_years)
        
        if(check_dams) maintenance_cost<-maintenance_cost+vv(maintenance_check_dams,var_CV,n_years)
        
        if(buffer_strips) maintenance_cost<-maintenance_cost+vv(maintenance_buffer_strips,var_CV,n_years)
        
        intervention_cost<-maintenance_cost
        intervention_cost[1]<-intervention_cost[1]+cost_dredging+cost_check_dams+cost_buffer_strips+
          plan_cost_dredging+plan_cost_check_dams+plan_cost_buffer_strips
        
###irrigation scheme 1 - area decline and delay by interventions

gompertz_time1_time_until_irrigated_area_declines<-
            sum(c(baseline_time_until_irrig_area_declines,
            dredging*dredging_delay_of_irrig_area_decline,
            check_dams*check_dam_delay_of_irrig_area_decline,
            buffer_strips*buffer_strip_delay_of_irrig_area_decline))
        
gompertz_time2_time_until_irrigated_area_halved<-
          sum(c(gompertz_time1_time_until_irrigated_area_declines,
          baseline_start_losses_to_half_irrig_area_lost,
          dredging*dredging_delay_of_irrig_area_halved,
          check_dams*check_dam_delay_of_irrig_area_halved,
          buffer_strips*buffer_strip_delay_of_irrig_area_halved))
        
irrig_scheme1_area_share<-1-gompertz_yield(max_harvest=1,
        time_to_first_yield_estimate=gompertz_time1_time_until_irrigated_area_declines,
        time_to_second_yield_estimate=gompertz_time2_time_until_irrigated_area_halved,
        first_yield_estimate_percent=10,
        second_yield_estimate_percent=50, n_years=n_years, var_CV = 0,
        no_yield_before_first_estimate = TRUE)
        
irrig_scheme1_area_share<-irrig_scheme1_area_share[1:30]
        irrig_scheme1_area<-current_irrig_area*irrig_scheme1_area_share
        
###irrigation scheme 1 - risk of blockage and pipe clearing
        
gompertz_time2_time_until_pipe_blockage_occurs_every_second_year<-
    sum(c(baseline_time_until_pipes_blocked_every_second_year,
    dredging*dredging_delay_of_pipes_blocked_every_second_year,
    check_dams*check_dam_delay_of_pipes_blocked_every_second_year,
    buffer_strips*buffer_strip_delay_of_pipes_blocked_every_second_year))
    risk_blockage<-gompertz_yield(max_harvest=1,
    time_to_first_yield_estimate=0,
    time_to_second_yield_estimate=gompertz_time2_time_until_pipe_blockage_occurs_every_second_year,
    first_yield_estimate_percent=100*current_risk_of_pipe_blockage,
    second_yield_estimate_percent=50,
    n_years=n_years, var_CV = 0,
    no_yield_before_first_estimate = TRUE)
        
    risk_blockage[which(risk_blockage>1)]<-1
        risk_blockage[which(risk_blockage<0)]<-0
        
gompertz_time2_time_until_chance_cleared_50percent<-
          sum(c(baseline_time_until_chance_cleared_50percent,
          dredging*dredging_delay_of_time_until_chance_cleared_50percent,
          check_dams*check_dam_delay_of_time_until_chance_cleared_50percent,
          buffer_strips*buffer_strip_delay_of_time_until_chance_cleared_50percent))
        
chance_cleared<-gompertz_yield(max_harvest=1,
            time_to_first_yield_estimate=0,
             time_to_second_yield_estimate=gompertz_time2_time_until_chance_cleared_50percent,
            first_yield_estimate_percent=100*current_chance_of_blocked_pipe_cleared,
            second_yield_estimate_percent=50,
            n_years=n_years, var_CV = 10,
            no_yield_before_first_estimate = TRUE)

        chance_cleared[which(chance_cleared>1)]<-1
        chance_cleared[which(chance_cleared<0)]<-0
        
### Creation of intermediate variables
        
        pipe_clogging<-sapply(1:n_years,function(x) rbinom(1,1,risk_blockage[x]))
        pipe_cleared<-sapply(1:n_years,function(x) rbinom(1,1,chance_cleared[x]))
        
        pipe_blocked <- pipe_clogging
        for (i in 2:length(pipe_blocked))
          if (pipe_clogging[i] == 0) 
            if (pipe_blocked[i - 1] == 1) 
              if (!pipe_cleared[i] == 1) pipe_blocked[i] <- 1
        
        irrig_scheme1_irrigated_area_ex_ante<-
          irrig_scheme1_area*(1-pipe_blocked*vv(pipe_blocked_area_lost_perc/100,var_CV,n_years))
        
### Impact of ex-post risks on irrigated area
        irrigated_area_scheme1<-irrig_scheme1_irrigated_area_ex_ante*
          Hazard_scaling_irrig_area*BadMaint_scaling_irrig_area*
          BadDesign_scaling_irrig_area 
        
### Benefits from rice cultivation on the shore of the reservoir (==0 if buffer strips implemented)
        if (buffer_strips)
          buffer_strip_cultivation<-TRUE else buffer_strip_cultivation<-FALSE
        
        scheme2_time_until_benefits_gone<-scheme2_time_until_dredging_benefits_gone_baseline+
          check_dams*check_dams_added_scheme2_area_benefit_time
        
        scheme2_area_scaler<-gompertz_yield(max_harvest=1,
             time_to_first_yield_estimate=1,
              time_to_second_yield_estimate=scheme2_time_until_benefits_gone,
              first_yield_estimate_percent=100,
              second_yield_estimate_percent=0,
              n_years=n_years, var_CV = 0,
              no_yield_before_first_estimate = TRUE)
        
        scheme2_area_ha<-scheme2_area_no_dredging_ha*(1+
              dredging*scheme2_area_scaler*dredging_bump_scheme2_area_perc/100)
        
#rice area remains unchanged (except dredging bump)
        scheme2_rice_benefits<-as.numeric(!buffer_strips)*
          vv(scheme2_area_ha,var_CV,n_years)*
          precalc_scheme2_rice_yield_t_ha*
          precalc_scheme2_rice_profit_USD_t
        
gompertz_time1_time_until_irrigated_area2_declines<-
  sum(c(baseline_time_until_irrig_area2_declines,
        dredging * dredging_delay_of_irrig_area2_decline,
        check_dams * check_dam_delay_of_irrig_area2_decline))

gompertz_time2_time_until_irrigated_area2_halved<-
  sum(c(gompertz_time1_time_until_irrigated_area2_declines,
  baseline_start_losses_to_half_irrig_area2_lost,
  dredging * dredging_delay_of_irrig_area2_halved,
  check_dams *check_dam_delay_of_irrig_area2_halved))
        
irrig_scheme2_area_share<-1-gompertz_yield(max_harvest = 1,
                                           time_to_first_yield_estimate =
                                           gompertz_time1_time_until_irrigated_area2_declines,
                                           time_to_second_yield_estimate =
                                           gompertz_time2_time_until_irrigated_area2_halved,
                                           first_yield_estimate_percent = 0,
                                           second_yield_estimate_percent = 50, 
                                           n_years = n_years, var_CV = 0,
                                           no_yield_before_first_estimate = TRUE)
        
scheme2_vegetable_area_ha<-scheme2_area_ha*irrig_scheme2_area_share
        
scheme2_vegetable_benefits<-as.numeric(!buffer_strips)*
          vv(scheme2_vegetable_area_ha,var_CV,n_years)*
          precalc_scheme2_vegetable_yield_t_ha*
          precalc_scheme2_vegetable_profit_USD_t
        
buffer_fruit_benefits<-as.numeric(buffer_strips)*precalc_buffer_fruit_benefits
buffer_vegetable_benefits<-as.numeric(buffer_strips)*precalc_buffer_vegetable_benefits
buffer_rainfed_crop_benefits<-as.numeric(buffer_strips)*precalc_buffer_rainfed_crop_benefits
        
        
rainy_season_rice_area_scheme1<-
        irrigated_area_scheme1*precalc_proportion_irrigation_scheme_rice
        rainy_season_vegetable_area_scheme1<-irrigated_area_scheme1-rainy_season_rice_area_scheme1
        
irrigation_season_rainy_season_benefits_scheme1<-rainy_season_rice_area_scheme1*
          precalc_irrigation_scheme_rice_yield_t_ha*
          precalc_irrigation_scheme_rice_profit_USD_t+
          rainy_season_vegetable_area_scheme1*
          precalc_irrigation_scheme_vegetable_yield_t_ha*
          precalc_irrigation_scheme_vegetable_profit_USD_t
        
irrigation_season_dry_season_benefits_scheme1<-irrigated_area_scheme1*
          precalc_irrigation_scheme_vegetable_yield_t_ha*
          precalc_irrigation_scheme_vegetable_profit_USD_t
        
### Total benefits from crop production (agricultural development and riparian zone)     
crop_production<-scheme2_rice_benefits+
          scheme2_vegetable_benefits+
          buffer_fruit_benefits+
          buffer_vegetable_benefits+
          buffer_rainfed_crop_benefits+
          irrigation_season_rainy_season_benefits_scheme1+
          irrigation_season_dry_season_benefits_scheme1
        
### Benefits from fishing      
time_to_start_fish_decline<-sum(c(time_to_start_fish_decline_baseline,
                                          dredging_delay_start_fish_decline,
                                          check_dams_delay_start_fish_decline,
                                          buffer_strips_delay_start_fish_decline))
        
time_to_fish_population_halved<-sum(c(time_to_start_fish_decline,
                                              time_to_halve_fish_population_baseline,
                                              dredging_delay_in_time_to_halve_fish_population,
                                              check_dams_delay_in_time_to_halve_fish_population,
                                              buffer_strips_delay_in_time_to_halve_fish_population))
        
fish_benefit_scaler<-1-gompertz_yield(max_harvest=1,
        time_to_first_yield_estimate=time_to_start_fish_decline,
       time_to_second_yield_estimate=time_to_fish_population_halved,
         first_yield_estimate_percent=0,
         second_yield_estimate_percent=50, 
       n_years=n_years, var_CV = 10,
         no_yield_before_first_estimate = TRUE)
        
risk_adjusted_fish_benefits<-fish_benefit_scaler*(1-precalc_fish_hazards)
        
### Fish benefits
Fish_benefits<-precalc_current_fish_value*risk_adjusted_fish_benefits
        
### Benefits from livestock   
if(buffer_strips)  TLU_intervention<-
  TLU*(1+change_TLU_buffer_perc/100) else TLU_intervention<-TLU
        
        livestock_benefits<-TLU_intervention*TLU_profit

### Total benefits        
total_benefits<-crop_production+Fish_benefits+livestock_benefits

net_benefits<-total_benefits-intervention_cost
        
        if(decision_dredging & decision_check_dams & decision_buffer_strips) 
            result_dredge_check_buff<-net_benefits
        if(decision_dredging & decision_check_dams & !decision_buffer_strips) 
          result_dredge_check_nbuff<-net_benefits
        if(decision_dredging & !decision_check_dams & decision_buffer_strips) 
          result_dredge_ncheck_buff<-net_benefits
        if(decision_dredging & !decision_check_dams & !decision_buffer_strips) 
          result_dredge_ncheck_nbuff<-net_benefits
        if(!decision_dredging & decision_check_dams & decision_buffer_strips) 
          result_ndredge_check_buff<-net_benefits
        if(!decision_dredging & decision_check_dams & !decision_buffer_strips) 
          result_ndredge_check_nbuff<-net_benefits
        if(!decision_dredging & !decision_check_dams & decision_buffer_strips) 
          result_ndredge_ncheck_buff<-net_benefits
        if(!decision_dredging & !decision_check_dams & !decision_buffer_strips) 
          result_ndredge_ncheck_nbuff<-net_benefits
        
      } #close intervention loop bracket
  
  NPV_dredge_check_buff<-discount(result_dredge_check_buff,discount_rate,calculate_NPV = TRUE)
  NPV_dredge_check_nbuff<-discount(result_dredge_check_nbuff,discount_rate,calculate_NPV = TRUE)
  NPV_dredge_ncheck_buff<-discount(result_dredge_ncheck_buff,discount_rate,calculate_NPV = TRUE)
  NPV_dredge_ncheck_nbuff<-discount(result_dredge_ncheck_nbuff,discount_rate,calculate_NPV = TRUE)
  NPV_ndredge_check_buff<-discount(result_ndredge_check_buff,discount_rate,calculate_NPV = TRUE)
  NPV_ndredge_check_nbuff<-discount(result_ndredge_check_nbuff,discount_rate,calculate_NPV = TRUE)
  NPV_ndredge_ncheck_buff<-discount(result_ndredge_ncheck_buff,discount_rate,calculate_NPV = TRUE)
  NPV_ndredge_ncheck_nbuff<-discount(result_ndredge_ncheck_nbuff,discount_rate,calculate_NPV = TRUE)
  
  
  return(list(NPV_dredge_check_buff=NPV_dredge_check_buff-NPV_ndredge_ncheck_nbuff,
              NPV_dredge_check_nbuff=NPV_dredge_check_nbuff-NPV_ndredge_ncheck_nbuff,
              NPV_dredge_ncheck_buff=NPV_dredge_ncheck_buff-NPV_ndredge_ncheck_nbuff,
              NPV_dredge_ncheck_nbuff=NPV_dredge_ncheck_nbuff-NPV_ndredge_ncheck_nbuff,
              NPV_ndredge_check_buff=NPV_ndredge_check_buff-NPV_ndredge_ncheck_nbuff,
              NPV_ndredge_check_nbuff=NPV_ndredge_check_nbuff-NPV_ndredge_ncheck_nbuff,
              NPV_ndredge_ncheck_buff=NPV_ndredge_ncheck_buff-NPV_ndredge_ncheck_nbuff))
}  

3.1 The decisionSupport function

The model function, along with the data table input, are fed into the Monte Carlo simulation function, decisionSupport() to conduct the full decision analysis.

Below is the code to perform the Monte Carlo simulation with 10,000 model runs:

#setwd([folder, where the input table ‘Sediment_input_table.csv’ file is saved])
decisionSupport(inputFilePath = "Sediment_input_table.csv", #input file with estimates
                outputPath = file.path(getwd(),"MCResults"), #output folder
                write_table = TRUE,
                welfareFunction = sediment_calc,
                numberOfModelRuns = 10000,
                functionSyntax = "plainNames")

The decisionSupport() arguments are:

  1. inputFilePath – the data table that contains the inputs to the decision model. This is a .csv file containing columns for the variable names (variable), the distribution type (distribution) and the lower (lower) and upper (upper) bounds of the 90% confidence interval to be used for defining the probability distributions, from which values for the model runs will be drawn.
  2. outputPath – the folder that will store all results.
  3. write_table – Boolean variable (FALSE or TRUE) indicating whether the full table with all inputs and outputs for all model runs should be saved to disk. If TRUE, this information is stored in a file called mcSimulationResults.csv.
  4. welfareFunction – the decision model function, in this case sediment_calc.
  5. numberOfModelRuns – integer indicating the number of model runs for the Monte Carlo simulation.
  6. functionSyntax – parameter indicating how the random numbers are passed to the decision model. We used the plainNames option, to call all input variables simply by the names we provided in the input table.

The decisionSupport() function produces a table of all inputs and outputs of all model runs (mcSimulationResults.csv; if write_table=TRUE), as well as two outputs for each model output variable:

The first figure is a histogram showing simulated NPV for sedimentation management interventions, based on 10,000 model runs. It shows the number of times that the model produced values in a certain interval (bin). The green bars show the interval between the 45th and 55th percentile, i.e. the distribution’s median ± 5% of output values. The orange area (plus the green bars) represent the the interquartile range, i.e. the range between the 25th and 75th percentile. Yellow bars (plus the orange and green ones) show the 90% confidence interval, i.e. the range between the 5th and 95th percentiles. As an example we include the histograms of the NPV results for all sedimentation interventions and combinations of interventions.

NPV outputs of a Monte Carlo simulation for ex-ante analysis of the decision to implement an intervention consisting of dredging, rock check dams and a buffer scheme.

NPV outputs of a Monte Carlo simulation for ex-ante analysis of the decision to implement an intervention consisting of dredging, rock check dams and a buffer scheme.

NPV outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement an intervention consisting of dredging and rock check dams.

NPV outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement an intervention consisting of dredging and rock check dams.

NPV outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement an intervention consisting of dredging and buffer strips.)

NPV outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement an intervention consisting of dredging and buffer strips.)

NPV outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement dredging.

NPV outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement dredging.

NPV outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement an intervention consisting of rock check dams and buffer strips.

NPV outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement an intervention consisting of rock check dams and buffer strips.

NPV outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement rock check dams.

NPV outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement rock check dams.

NPV outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement buffer strips.

NPV outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement buffer strips.

The second figure is a diagram showing the Variable Importance in the Projection (VIP) metric to evaluate the significance of individual variables in a Projection-to-Latent-Structures (PLS) regression model. The data for the plot is derived by statistically relating outputs to inputs using PLS regression; results are also saved in a table. The colored bars indicate that variables have an important influence on the simulated outcome, with red bars indicating a negative impact, green bars a positive impacts.

The VIP plot illustrates the sensitivity of model outputs to variation in each input variable. This figure indicates, which input variables had the strongest influence on the model outputs. It also contains a vertical line at VIP=0.8, which is commonly used as a threshold for considering variables as important for explaining variation in the response variable. In this plot, bars shown in green indicate that there is a positive relationship between values of the input variable and values of the output variable, while red bars imply a negative relationship. Variables that were not found to be important (according to the VIP=0.8 threshold) are shown in gray.

VIP outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement buffer strips.

VIP outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement buffer strips.

VIP outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement an intervention consisting of dredging and rock check dams.

VIP outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement an intervention consisting of dredging and rock check dams.

NPV outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement an intervention consisting of dredging and buffer strips.)

NPV outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement an intervention consisting of dredging and buffer strips.)

VIP outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement dredging.

VIP outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement dredging.

VIP outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement an intervention consisting of rock check dams and buffer strips.

VIP outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement an intervention consisting of rock check dams and buffer strips.

VIP outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement rock check dams.

VIP outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement rock check dams.

NPV outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement buffer strips.

NPV outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement buffer strips.

Additional clarity on the expected net benefits of sedimentation interventions could be gained by collecting information on these important variables.

All results are stored in the folder specified by outputPath. The two summary tables mcSummary.csv and welfareDecisionSummary.csv provide summaries of the results shown in the histogram. In the case of this model the output files are produced for each combination of interventions for each month.

Some descriptive statistics for these figures are contained in the mcSummary.csv file, which can be accessed by typing read.csv(‘MCResults/mcSummary.csv’). This table has information on various percentiles, as well as the mean and chances of negative and positive values, as well as the chance that the outcome is zero.

Finally, the ‘welfareDecisionSummary.csv’ table contains information pertaining to the decision problem. The table shows the median and 90% confidence interval of the output distribution and contains information on the optimal choice (either PA for project approval, or SQ for maintaining the status quo).

Table of model outcomes regarding Net Present Value of intervention decisions
X X5. X50. X95. enbPa elPa elSq eol optimalChoice
NPV_dredge_check_buff -62601 80098 345263 102162 9108 111270 9108 PA
NPV_dredge_check_nbuff -15354 64701 209451 76908 1875 78784 1875 PA
NPV_dredge_ncheck_buff -44415 73503 349865 105109 6547 111656 6547 PA
NPV_dredge_ncheck_nbuff -13727 42555 122133 46436 1859 48295 1859 PA
NPV_ndredge_check_buff -64916 67474 334459 91669 10727 102397 10727 PA
NPV_ndredge_check_nbuff -30815 41861 155139 47478 5199 52677 5199 PA
NPV_ndredge_ncheck_buff -56157 46556 335053 85083 12168 97251 12168 PA

Further outputs in the ‘welfareDecisionSummary.csv’ table are:

More information on all these outputs are contained in the decisionSupport manual, especially under welfareDecisionAnalysis.

3.2 Simulation results for single and combined interventions

The following figures show the outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement interventions consisting of dredging, rock check dams and a buffer scheme to reduce sediment deposition in the Lagdwenda reservoir in Burkina Faso. Each shows a histogram of projected distribution of net present value (NPV) for the intervention (with 100%, 90%, 50% and 10% confidence intervals shown by shades of purple) (upper left); the Expected Value of Perfect Information (EVPI) for all variables with non-zero EVPI (upper right), cash flow over the 30 years of the intervention model (lower left); The Variable importance indicating the sensitivity of projected outcomes to uncertain input variables, quantified by the VIP statistic of PLS regression (colors indicate positive (green) and negative (red) input/output relationship (lower right). All Values in these figures are in USD.

NPV, EVPI, cash flow, and VIP outputs of a Monte Carlo simulation for ex-ante analysis of the decision to implement an intervention consisting of dredging, rock check dams and a buffer scheme.

NPV, EVPI, cash flow, and VIP outputs of a Monte Carlo simulation for ex-ante analysis of the decision to implement an intervention consisting of dredging, rock check dams and a buffer scheme.

NPV, EVPI, cash flow, and VIP outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement an intervention consisting of dredging and rock check dams.

NPV, EVPI, cash flow, and VIP outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement an intervention consisting of dredging and rock check dams.

NPV, EVPI, cash flow, and VIP outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement an intervention consisting of dredging and buffer strips.)

NPV, EVPI, cash flow, and VIP outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement an intervention consisting of dredging and buffer strips.)

NPV, EVPI, cash flow, and VIP outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement dredging.

NPV, EVPI, cash flow, and VIP outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement dredging.

NPV, EVPI, cash flow, and VIP outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement an intervention consisting of rock check dams and buffer strips.

NPV, EVPI, cash flow, and VIP outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement an intervention consisting of rock check dams and buffer strips.

NPV, EVPI, cash flow, and VIP outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement rock check dams.

NPV, EVPI, cash flow, and VIP outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement rock check dams.

NPV, EVPI, cash flow, and VIP outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement buffer strips.

NPV, EVPI, cash flow, and VIP outputs of a Monte Carlo simulation (with 10,000 model runs) for ex-ante analysis of the decision to implement buffer strips.

Taken together, all these outputs allow an evaluation of the plausible range of net benefits that can be expected to arise from the intervention decisions. They provide a recommendation on which decision option should be preferred, and an appraisal of which input variables are responsible for most of the variation in the output distribution.

In this example, and with the set of input values provided with it, the combination of dredging, rock check dams, and buffer strips emerges as the preferable management strategy, compared to a scenario where no action is taken.

4 Acknowledgments

This research was supported by the CGIAR Water, Land and Ecosystems research project on Targeting Agricultural Innovations and Ecosystem Services in the Northern Volta river basin (TAI). The authors are grateful to the members of the panel of experts: Daouda Sorgho (Lagdwenda farmers’ association), Sorgho Salif (local water committee of Lagdwenda), Ismaël Paré (Provincial department of agriculture and hydraulic infrastructures), Modi Diallo (Provincial department of environment, green economy and climate change), Sambyamba Séraphin Zongo (Nakambé water agency), Barnabé Romuald Konseiga (ECR construction company), Mohamed Wendegoudi Ouédraogo (voluntary association for the promotion of leadership, health and development AJVLS), Mansour Boundaogo (SNV World). Thanks also to Lutz Göhring, who programmed most of decisionSupport, and to the World Agroforestry Centre, which supported its development.

5 References

Bharati, L., Rodgers, C., Erdenberger, T., Plotnikova, M., Shumilov, S., Vlek, P. et al., 2008. Integration of economic and hydrologic models: Exploring conjunctive irrigation water use strategies in the Volta basin. Agricultural Water Management 95, 925–936.

Boelee, E., Yohannes, M., Poda, J.-N., McCartney, M., Cecchi, P., Kibret, S. et al., 2013. Options for water storage and rainwater harvesting to improve health and resilience against climate change in Africa. Regional Environmental Change 13, 509–519.

Cecchi, P., Meunier-Nikiema, A., Moiroux, N., 2008. Towards an atlas of lakes and reservoirs in Burkina Faso. Q13 IRD.

Chitata, T., Mugabe, F.T., Kashaigili, J.J., 2014. Estimation of small reservoir sedimentation in semi-arid southern Zimbabwe. Journal of Water Resource and Protection 6, 1017–1028.

David, E.M., Jeremy, E.O., John, A.C., 2014. A web-based tool for eliciting probability distributions from experts. Environmental Modelling & Software 52, 1–4.

Fred, A.J., Brian, J.S., Mathieu, B., Julien, M., Christina, R., Frank, M. et al., 2017. Expert elicitation, uncertainty, and the value of information in controlling invasive species. Ecological Economics 137, 83–90.

Howard, R.A., Abbas, A.E., 2016. Foundations of decision analysis. Prentice Hall, NY.

Hubbard, D.W., 2014. How to measure anything: Finding the value of intangibles in business. Hoboken, New Jersey.

Katic, P., Morris, J., 2016. Targeting investments in small-scale groundwater irrigation using Bayesian networks for a data-scarce river basin in Sub-Saharan Africa. Environmental Modelling & Software 82, 44-72.

Kondolf, G.M., Gao, Y., Annandale, G.W., Morris, G.L., Jiang, E., Zhang, J. et al., 2014. Sustainable sediment management in reservoirs and regulated rivers: Experiences from five continents. Earth’s Future 2, 256–280.

Luedeling, E., Goehring, L., 2017. DecisionSupport – quantitative support of decision making under uncertainty. Contributed package to the r programming language. Version 1.103.2.

Morgan, M. G., 2014. Use (and abuse) of expert elicitation in support of decision making for public policy. Proceedings of the National Academy of Sciences of the United States of America 111 (20), 7176–7184.

Martin, T.G., Burgman, M.A., Fidler, F., Kuhnert, P.M., Low-Choy, S., McBride, M. et al., 2012. Eliciting expert knowledge in conservation science. Blackwell Publishing Inc.

Palmieri, A., Shah, F., Dinar, A., 2001. Economics of reservoir sedimentation and sustainable management of dams. Journal of Environnmental Management 61, 149–163.

Poussin, J.-C., Renaudin, L., Adogoba, D., Sanon, A., Tazen, F., Dogbe, W. et al., 2015. Performance of small reservoir irrigated schemes in the Upper Volta basin: Case studies in Burkina-Faso and Ghana. Water Resources and Rural Development 6, 50–65.

R Development Core Team, 2017. R: A language and Environment for Statistical Computing. R Foundation for Statistical Computing, Vienna.

Samantha, L.C., Rebecca, O., Kerrie, M., 2009. Elicitation by design in ecology: Using expert opinion to inform priors for bayesian statistical models. Ecology 90, 265–277.

Schmengler, A.C., 2011. Modeling soil erosion and reservoir sedimentation at hillslope and catchment scale in semi-arid Burkina Faso. PhD thesis. University of Bonn, Bonn, Germany.

Venot, J.-P., Cecchi, P., 2011. Valeurs d’usage ou performances techniques : Comment apprécier le rôle des petits barrages en Afrique subsaharienne ? Cah Agric 20, 112–117.

Wisser, D., Frolking, S., Douglas, E.M., Fekete, B.M., Schumann, A.H., Vörösmarty, C.J., 2010. The significance of local water resources captured in small reservoirs for crop production – a global-scale analysis. Journal of Hydrology 384, 264–275.