Sammendrag

Det er ingen vannføringsstasjon i vassdraget. Vi vil ha middelflom og flommer med gjentaksintervall til og med 200 år. Flomberegningene er derfor basert på:

  • formelverk for små nedbørfelt (Glad mfl., 2015)
  • flomfrekvensanalyser fra sammenligningsstasjoner i regionen.

En viktig ting å ta hensyn til er usikkerheten rundt feltgrensen i den østlige delen av feltet. Det er mulig at vannføring fra Glestadelva bidrar. I så fall er flomestimatene mest sannsynlig undervurdert.

Sammenligningsstasjoner

Vurdering av stasjoner

Siden vi vil kjøre flomfrekvenseanalyse, må vi kvalitetskontroll hydrologiske data for stasjonene. Da hadde jeg sett på Hysopp og Seriekart for å vurdere datakvaliteten, og deretter sett på dataene selv.

Helst hadde jeg plottet stasjonene på et kart.

Noen sammenligningsstasjoner er litt mer egnet til sammenligning av frekvensanalyser (for eksempel Kuggerud og Fura), mens andre er kanskje mer egnet til sammenligning av middelvannføring (for eksempel Kvisla Bruk og Flagstadelv).

Notater for stasjoner:

2.1 Hådammen

Hådammen ligger nordøst for analysefeltet. Den har data fra 1990 og findata fra 1996. Vannføringskurven på flom er vurdert som god. Dette er det minste feltet i areal sammenlignet med de andre feltene.

2.213 Kvisla Bruk

Kvisla Bruk ligger nordvest for analysefeltet. Den har en lang tidsserie med data fra 1928 og finndata fra 1986, men er påvirket av regulering. Den stasjonen finnes ikke i utvalgt data for flomanalyse (rapport 2016-85). Relativt stor i forhold til analysefeltet, men har middelavrenning som er ganske lik middelavrenningen for analysefeltet.

Kan hende at dette feltet er egnet til frekvensanalyse av lav gjentaksintervaller, men må være forskitig med høyere gjentaksintervaller.

2.323 Fura

Fura ligger øst for analysefeltet. Den har en lang serie med findata fra 1970. Noen år er utelatt ifølge rapport 2016-85: 1982:1984 og 2007. Ingen data i seriekart for vannføringskurven, hadde kanskje spurt en felthydrolog om kvalitet til flom. Noen usikkerhet i feltareal.

2.439 Kvarstadsæter

Kvarstadsæter ligger nord for analysefeltet. Den har data fra 1979 og findata fra 1987. Noen år er utelatt ifølge rapport 2016-85: 1986,1987,1994:1997. Vannføringskurven på flom er vurdert som god/middels. Relativt stor i forhold til analysefeltet.

2.463 Vismunda

Vismunda ligger nordvest for analysefeltet, på andre siden av Mjøsa. Den har finndata fra 1987, men noen år er utelatt ifølge rapport 2016-85: 1992, 1988, 2013. Vannføringskurven ved flom har stor variasjon i vurdering, fra dårlig til meget bra.

2.465 Flagstadelv

Flagstadelv ligger sørøst for analysefeltet. Den har data fra 1986 og findata fra 1995 til 2015. Vannføringskurven på flom er vurdert som dårlig. Middelavrenning er ganske lik middelavrenningen for analysefeltet.

2.616 Kuggerud

Kuggerud ligger enda lenger sørøst for analysefeltet. Den har en lang serie med finndata fra 1977 (stasjonen ble opprettet i 1968, men data før 1977 er ikke gode). Det er noen hull i dataene fra 2003, men for øvrig er datakvaliteten ok. Noen år er utelatt ifølge rapport 2016-85: 1988, 1993, 2003. Det finnes ingen informasjon om vannføringskurven i seriekartet. Middelavrenningen er ganske lik middelavrenningen for analysefeltet.

2.634 Lena

Lena ligger sørvest for analysefeltet, på andre siden av Mjøsa. Den har data fra 1991 og findata fra 2001. Middelavrenningen er ganske lik middelavrenningen for analysefeltet. Det finnes ingen informasjon om vannføringskurven i seriekartet.

Flomberegninger

NIFS verdier:

nb: hadde beregnet disse med NEVINA, men fikk ikke generert automatisk nedbørfelt.

NIFS verdier med klimapåslag:

Analysefeltet er et lite felt med liten dempning (ingen innsjøer). Jeg antar rask respons og regndominerte flommer. Legger til 40% klimapåslag.

Hvordan vet vi at kan stole på verdiene?

Formelverk for NIFS

Alle veridene for anlaysefelt er innen gyldighetsintervaller for formelverk i NIFS.

NIFS har følgende formel for middelflommen:

\[\begin{equation} Q_M = 18.97*Q_N^{0.864}\text{e}^{-0.251 \sqrt{A_{SE}}} \end{equation}\]

hvor \(Q_N\) er middelvannføring i perioden 1961-90 i m\(^3\)/s og \(A_{SE}\) er effektiv sjøprosent.

Formel for forholdstallet mellom Q(T) (flom med gjentaksintervall \(T\)) og middelflom, \(Q_M\), er

\[\begin{equation} \frac{Q(T)}{Q_M} = 1 + 0.308 \cdot q_N^{-0.137}\left[\Gamma(1+k)\Gamma(1-k) - (T-1)^{-k} \right] / k \end{equation}\]

hvor \(q_N\) er middelavrenningen i perioden 1961-90 (l/s/km\(^2\)) og \(k\) er en konstant (se Glad mfl 2015).

Usikkerheten er størst i middelavrenning – hentet fra avrenningskart, usikkerheten er stor i umålte felt. Verdt å sjekke avvik mellom observert årsmiddelavrenningen og avrenningsskartet.

Flomfrekvenseanalyser

Sammenligningsstasjonene har stort sett 25+ år med findata. Dette betyr at vi kan kjøre lokal analyser med GEV/Gumbel (eller blanding). Dette kan vi gjøre med Ekstremverdianalyseprogrammet under Finut i Hydra II.

Vi kan ikke direkt sammenligne estimater med analysefelt, men kan sammenligne vekstkurver og kulminajsonsmiddel.

Programmet

Notater

Vær oppmerksom på kalendardøgn i systemet (hvis flommen kulminerer rundt midnatt, kan vi får unaturlig verdier).

Hvis vi har problemer med frekvensanalysen eller er usikre på datakvaliteten, kan vi utføre en frekvensanalyse på samme måte som ECCO-prosjektet for urbanstasjoner (Hamiltonian Monte Carlo-algoritme + posterior predictive checks)

PQRUT, 200 år gjentaksintervall

PQRUT kunne være en referanseverdi for 200-års gjentaksintervallet. Den er ikke direkte sammenlignbar med 200-års gjentaksintervallet, men kunne være nyttig å se allikevel.

  • Nedbørfeltets størrelse er innenfor gyldighetsintervallet.
  • Den effektive sjøprosenten er lav.

Vi antar at flommen er regndominert (9.-10. september)

PQRUT verdier

Konstruering av nedbørforløp

Det anbefales i rapport 01/2022 (4.3.2.1) at for en 24-timers hendelse, fordeles IVF-verdien på 1440 minutter (24 timer) på timesverdier over 24 timer, og timen med mest nedbør tilsvarer IVF-verdien på 60 minutter.

Det er flere måter å fordele nedbøren på. Vi bruker en av de enkleste metodene, “alternating block method” (se for eksempel HEC-HMS Manual )

Det anbefales å fordele nedbøren symmetrisk rundt timen med mest nedbør.

Vi bruker en 24-timers hendelse fordelt over 1-times tidsoppløsning for å passe PQRUTs tidsoppløsning på 1 time.

IVF stasjoner Hamar II og Gjøvik er vurderte.

Hamar II - kvalitet: god

Gjøvik - kvalitet: svært usikker

Skripten for å konstruere nedbørforløp

##
## author: daba@nve.no
##
## Skriptet konstruerer et nedbørforløp basert på IVF-verdier.
##
## Vi bruker en 24-timers hendelse fordelt over 1-times tidsoppløsning 
## for å passe PQRUTs tidsoppløsning på 1 time.
##
## Det anbefales å fordele nedbøren symmetrisk rundt timen med mest nedbør, 
## men dette skriptet har funksjonalitet til å plassere timen med mest nedbør 
## hvor som helst i hendelsen (starten, midten, slutten).
##
## Input til skriptet:
##
##  "IVFdata.rda" - IVF-kurver for Gjøvik og Hamar.
##                  Data er lastet ned fra MET (data er lagret som .rda-fil; 
##                  skriptet for å laste ned data og gjøre det klart for bruk
##                  i R heter "make_ivf_to_Rgdata.R").
## Output:
##  
##  - .csv-fil som inneholder nedbørmengder (mm) over 24 timer. 
##    Kan kopieres og limes inn i PQRUT.
##
##  - Hendelsen er også plottet
##
## -----------------------------------------------------------------------------

library(data.table)

dataPath <- paste0("C:/Users/daba/",
                   "OneDrive - Norges vassdrags- og energidirektorat/",
                   "Dokumenter/","Postdoc/HV/")

## load in the data
load(paste0(dataPath,"regnhendelse/",
            "ivfdata.rda"))


# Change these quantities -------------------------------------------------

## choose a station. Options are: hamar, gjxvik
station = "hamar"

## choose a return period
rp = 200

## choose the percentile of the ivf curve we want to use. MET provides
## the lower (2.5%), median (50%), and upper (97.5%) uncertainty bounds,
## so options are p = 2.5, p = 50, or p = 97.5
p = 50

## choose where we want the peak of the rain event.
## for example, if we want the peak in the first 25% of the time measured from 
## the beginning of the event to the total event duration, l = 0.25. 
l = 0.5

# -------------------------------------------------------------------------



# Get depth (mm) from the IVF curve for the chosen station, percentile
# and gjentaksintervall (return period):
ivf_curve <- unlist(ivf[gjentaksintervall == rp & 
                          Persentiler == p &
                          navn == station,  -c(1,2,19)])

## We need to create a 24-hour rain event (storm) in 60-minute increments.
## To achieve this, we interpolate the IVF curve
## to get depth values at evenly spaced 60-minute intervals over 24 hours.

# Define the time points (in minutes) at which we want depth measurements:
storm_minutes <- seq(60,1440,60) # 60 to 1440 minutes in 60-minute increments

# Interpolate the IVF curve to get depth values at the specified time points
storm_depths <- exp(stats::approx(x = log(durations), y = log(ivf_curve), 
                                  xout = log(storm_minutes))$y)

# Create a data table for easier manipulation and analysis
storm <- data.table(minutes = storm_minutes, depths = storm_depths)

## Find the incremental precipitation depths. These are the depths that
## define our constructed storm. The first value corresponds to the 
## depth for the 60-minute value from the IVF curve. This is the maximum rain 
## depth we want to see in our constructed storm.
peakrain <- storm[minutes == 60, get("depths")]
storm[,incremental_depths := c(peakrain,diff(storm_depths))]

# Now we have defined a storm where the maximum depth = 60 minute IVF value:
max(storm[,get("incremental_depths")])
ivf_curve["60"]
# and the sum of the precipitation depths = 1440 minute IVF value:
sum(storm[,get("incremental_depths")])
ivf_curve["1440"]

ivf_curve["720"]

## We now need to arrange the storm depths in a reasonable way.
## Place the maximum incremental precipitation at the l-quantile defined on 
## line 63. Arrange the remaining increments in descending order, 
## alternating between right and left ("alternating block method").

# function to do this:
alternating.block.indices <- function(i, n) {
  # defines indices to arrange incremental 
  # precipitation depths according to 
  # alternating block method.
  # --------
  # outputs a 1 x n vector of indices
  # -------------
  # n = number of increments in the storm
  # i = index of maximum incremental precipitation
  # -----------------------------------------
  if (i == n) return(seq(n, 1, -1))
  if (i == 1) return(seq(1, n, 1))
  
  if (i == n / 2) {
    idx <- c(n / 2, 
             sapply(1:(n / 2 - 1), function(k) c(n / 2 + k, n / 2 - k)), n)
  } else if (i < n / 2) {
    idx <- c(i, 
             sapply(1:(i - 1), function(k) c(i + k, i - k)), 
             ((i - 1) * 2 + 2):n)
  } else {
    idx <- c(i, 
             sapply(1:(n - i), function(k) c(i + k, i - k)), 
             seq(i - (n - i) - 1, 1, -1))
  }
  return(idx)
}

# Order the rows from biggest to smallest incremental_depth:
storm <- storm[order(-incremental_depths)]

# Define n and i:
n <- nrow(storm)
i <- floor(l*n)

# Call function alternating.block.indices to compute the 
# indices and add them to the data table:
storm[,idx:=alternating.block.indices(i,n)]

# reorder according to index value (for easy plotting and copy-pasting)
storm <- storm[order(idx)]

# plot the constructed storm:
namevec <- paste0(seq(0,1380,60),"-",seq(60,1440,60))
barplot(height = storm[,get("incremental_depths")],
        names = storm[,get("idx")],
        xlab = "Interval (min.)",
        ylab = "Precipitation (mm)",
        main = paste0("Regnhendelse\n IVF-kurve fra: ",station,", ",
                      p,"% quantile"),
        names.arg = namevec, las = 1)


# output the data to a csv file so can be copy-pasted into PQRUT
outdata <- round(storm[,get("incremental_depths")],4)

write.table(outdata,
            file=paste0(dataPath,"regnhendelse/", "regnhendelse_",station,".csv"),
            row.names = F, col.names = F) 
# the file is written to the directory defined in the dataPath