Skip to content

Spatial Hierarchy

The model is spatially explicit at the level of individual agricultural fields and organizes them into a nested hierarchy for routing N and P reductions to their respective environmental targets.


The sets and their roles

i — Agricultural fields

The core decision unit. Every measure decision x(i,j) is made at field level. Fields carry all the biophysical characteristics needed to compute costs, effects, and potentials. There are hundreds of thousands of fields across Denmark.

Key field attributes: see Model Overview — Key field-level parameters.

ret — ID15 sub-catchments (retention areas)

ID15 catchments are sub-catchments defined by the Danish national hydrological framework. They group fields into intermediate drainage units for: - Applying N retention before reductions reach the coast - Indexing mini-wetland (MW) locations - Computing mini-wetland potential (weighted average over fields in the ret)

Linkage sets: - Reti(ret, i) — which fields belong to which ID15 catchment - kret(k, ret) — which ID15 catchments belong to which coastal catchment

k — Coastal catchments (kystopland)

The top-level N spatial unit. N reduction targets (N_Targets(k), in tons N/yr) are defined here. This is where the model must demonstrate it has reduced N loads sufficiently. All N reductions from fields and mini-wetlands in the ret units within k are summed.

Linkage sets: - setki(k, i) — which fields belong to coastal catchment k (used for cost summing) - kp(k, p) — WWT plants belonging to catchment k - kpp(k, pp) — overflow points in catchment k - kw(k, w) — watercourses in catchment k - kero(k, ero_stretch) — erosion stretches in catchment k

up_lakecatch — Upstream lake catchments

The intermediate P spatial unit. P reductions from field measures, stream measures, WWT, and overflow are computed here before being transported downstream through the lake chain. Each up_lakecatch drains toward one or more downstream lake catchments.

Linkage sets: - up_lake_i(up_lakecatch, i) — fields draining to this upstream lake catchment - up_lakew(up_lakecatch, w) — watercourses in this upstream catchment - up_lake_ero(up_lakecatch, ero_stretch) — erosion stretches - up_LakeRet(up_lakecatch, ret) — ID15 retention areas (for MW P effects) - WWT_up_lake(up_lakecatch, p) — WWT plants - up_lakepp(up_lakecatch, pp) — overflow points

lakecatch — Lake catchments (downstream, with P targets)

Where P targets (P_targets(lakecatch), in kg P/yr) are defined. P reductions from all upstream lake catchments are transported here via the lake-chain transport matrix (p_transp_matrix).

The key equation:

P_Red_aft_ret(lakecatch) = Σ_up_lakecatch [ P_Red_bf_ret_up(up_lakecatch) × p_transp_matrix(lakecatch, up_lakecatch) ]

Linkage sets: - lakechain(lakecatch, up_lakecatch) — which upstream catchments contribute to each lake catchment (the chain) - lake_i(lakecatch, i) — fields in the lake catchment (for reporting) - set_WWT_lake(lakecatch, p), set_lakepp(lakecatch, pp) — WWT and overflow points per lake

w — Watercourses / stream segments

Individual streams. Stream engineering measures (ochre traps, sand traps, re-meandering, raising) are decided at watercourse level. Each watercourse has: - w_class(w) — class 1, 2, or 3 (determines costs and effects) - w_length_km(w) — length (km), used for length-based costs - wgeo(w, geo) — geographic zone (affects P effects for sand traps) - Potential indicators: w_okker(w), w_sand(w), w_meandering(w), w_raising(w)

Linkage: up_lakew(up_lakecatch, w) assigns streams to upstream lake catchments.

ero_stretch — Erosion-prone stream stretches

Specific reaches of streams with significant erosion potential. The only measure is tree planting (v_str(ero_stretch, "trees")). Effect = tree_eff(ero_stretch) kg P/yr per stretch. Cost = 290.8 DKK/yr per stretch.

p — Wastewater treatment plants

Individual WWT plants. Each plant can be upgraded to 4 levels: MBN, MBNDK, MBNDKF, MBNDKFe (increasing treatment intensity). Plant-specific N and P effects and costs loaded from .inc files.

mw1 / mw2 / mw3 — Mini-wetland locations

Three size categories (catchment area: 20 / 50 / 100 ha). Each location is associated with an ID15 retention area (mw1ret/mw2ret/mw3ret). N and P effects scale with size; costs are fixed scalars (mw1cost=27,270, mw2cost=36,983, mw3cost=53,171 DKK) plus opportunity cost of the wetland area.

pp — Combined sewer overflow points

Overflow treatment locations. Binary decision OFx(pp). N and P effects loaded from OFNeff.inc and OFPeff.inc; costs from OFCost.inc.


Visual schematic

N PATHWAY:
fields (i) → [Reti] → ID15 sub-catchments (ret) → [kret] → Coastal catchments (k)
                              ↑ MW located here                    ↑ N targets here

P PATHWAY:
fields (i) → [up_lake_i] → Upstream lake catchments (up_lakecatch)
                                        ↓ [lakechain × p_transp_matrix]
                              Lake catchments (lakecatch) ← P targets here
                                        ↓ [lakechain_k × p_transp_matrix_k]
                              Coastal catchments (k) ← P aggregated here too

Important design notes

  • A field i simultaneously belongs to an ID15 (for N routing), an upstream lake catchment (for P routing), and a coastal catchment (for cost attribution). These three geographies are not necessarily nested — a field's N and P reductions may go toward different target units.
  • The P lake chain allows for multiple hops: P from one upstream catchment passes through intermediate lakes before reaching a lake with a target. The p_transp_matrix captures this in one step.
  • Coastal catchments k are the spatial unit for both the N target constraint and the cost attribution (Total_cost_k). P targets are at lakecatch level, but P costs are attributed to up_lakecatch level (Total_cost_up_lakecatch).