La gestion des eaux usées est particulièrement compliquée en Arctique du fait du sol rocheux ou du pergélisol qui empêche la mise en place de systèmes communs dans les régions du sud. Le gel, les inondations printanière, les quantité limité d’eau, des coût important de l’électricité, de l’essence et du transport, et l’accessibilité limité à ces communautés contribue à en faire un défi de taille qui n’est toujours pas réglé à l’heure actuelle (Gunnarsdóttir et al. 2013; Johnson et Inuit Tapiriit Kanatami 2008). Par conséquent, nombre de ces systèmes ne répondent pas aux normes appliquées dans les autres régions du Canada (Daley et al. 2015).
Malgré l’amélioration constante de la situation, et malgré la mise en place de plan de gestions considérant les réalités des populations Inuits (Johnson et Inuit Tapiriit Kanatami 2008), cet enjeu demeure préoccupant pour ces communautés (Daley et al. 2015). Parmi les préoccupations figure la contamination possible des animaux sauvages, qui constituent une part importante de l’alimentation de ces communautés. Il est ainsi pertinent de se pencher sur les conséquences des eaux usées sur les écosystèmes côtiers dans lesquelles se déversent éventuellement les eaux plus ou moins traités (Daley et al. 2015).
Selon la pente du terrain et la nature du sol, des systèmes de canalisation ont été mis en place dans différentes communautés. À Iqaluit, la capitale du Nunavut, est la seule ville ayant un système de canalisation acheminant directement une partie des eaux usées au site de traitement, combiné avec un système de traitement par camion. Dans la majorité des communautés, les systèmes de canalisation des habitations aboutissent dans un réservoir d’eaux usée, régulièrement vidée par des camions. Ces camions acheminent les eaux usées à une décharges ou une zone de traitement d’eaux usées désignées, soit généralement des étangs de stabilisation des déchets. (Daley et al. 2015; Gunnarsdóttir et al. 2013; Johnson et Inuit Tapiriit Kanatami 2008).
Dans les étangs de stabilisation, les eaux usées gèlent en hiver, et au printemps se déversent dans les zones humides avoisinantes et finissent dans la mer (Daley et al. 2015). Ainsi, toutes les eaux usées accumulées durant l’hiver se mobilisent et se déversent en peu de temps dans l’écosystème environnant. Ce système entre dans la catégorie des systèmes de traitements passifs.Malheureusement, ce type de système comporte des failles importantes.
Les eaux usées issues des zones humides atteignant la mer contiennent de nombreuses substance potentiellement nocives pour l’environnement et la santé humaine (Gunnarsdóttir et al. 2013). Une grande partie de ces composés sont des produits pharmaceutiques et de soins personnels (PPCS), dont les eaux usée des villes constituent la plus grande source (Gunnarsdóttir et al. 2013; Kallenborn et al. 2018). De faits, les composés pharmaceutiques administrés aux humains et aux animaux sont en grande partie excrété sans avoir été transformés. Ils se retrouvent ainsi dans les eaux usées des maisons et des hôpitaux. Biens qu’ils soient généralement éventuellement dégradé, le peu de traitements des eaux usées en Arctique contribue à rejeter des quantité notable de ces produits et des produits de dégradation dans l’environnement (Gunnarsdóttir et al. 2013; Kallenborn et al. 2018). Entre autres, des antibiotiques, des agents antimicrobiens, des stimulants et des antidépresseurs sont retrouvés jusque dans les écosystèmes marins (Kallenborn et al. 2018).
Ce phénomène est exacerbé en Arctique du fait des conditions environnementale. La température de l’eau étant basse toute l’année, le taux de dégradation de ces composés pharmaceutique est faible. Dans un même ordre d’idée, leur dégradation par des phénomène chimique et microbiologique est atténuée par la faible température et l’absence de lumière et de processus photosynthétique en hiver (Gunnarsdóttir et al. 2013; Kallenborn et al. 2018). Cela mène à des concentrations de composés supérieures à ce que l’on retrouve à proximité de ville du Sud, ce qui indique que l’émission incontrôlée de ces composés, associée à des conditions environnementales favorisant la pérennité de ces composés dans l’environnement prédomine sur la densité des populations humaines (Kallenborn et al. 2018). Ainsi, malgré la faible population en Arctique, la libération de PPCP et l’accumulation d’en l’environnement est importante.
Or, ces composés peuvent avoir des conséquences variées sur l’environnement. Les effets des drogues, stimulants et médicaments aboutissant dans l’océan demeure en grande partie méconnue et probablement très variés (Gunnarsdóttir et al. 2013). À titre d’exemple, certains composés pharmaceutique ont été associés à des perturbations endocrines chez des poissons, nuisant par exemple à la production d’œufs par des poissons (Rodgers-Gray et al. 2000). Il a aussi été démontré que l’exposition à des produits chimiques variés retrouvés dans l’environnement pouvait moduler la relation entre hôte et microbiome (Chiu et al. 2020; Jin et al. 2017). De fait, une exposition à des polluants chimiques dans l’eau modifierait la composition du microbiome et pourrait ainsi contribuer à la toxicité de ces composés (Claus, Guillou, et Ellero-Simatos 2016) constituant une menace pour ces organismes (Jin et al. 2017).
Ainsi, l’objectif de ce projet est de modéliser la concentration d’un de ces composés pharmaceutique courant en fonction du temps au sein de étang de stabilisation et par conséquent dans les effluents atteingnant les écosystèmes côtier. Le composés choisi est le Diclofenac, aussi connu sous le nom de Voltaren au Canada. Cette modélisation de la variation saisonnière de la concentration de ce composé permettera notamment d’évaluer l’importance relative de la population par rapport aux conditions environnementales quant à l’accumulation de ce produit dans les effluents atteingnants écosystèmes côtiers à proximité des villes, permettant de vérifier l’importance de considérer ce phénomène en Arctique.
Pour ce modèle, on considère donc 3 variables d’état, et 6 flux
Variables d’états
DFC : Concentration de Diclofenac dans le bassin de rétention
TPphoto : Concentration des produits de phototransformation, principalement du 8-chlorocarbazole-1-acetic acid
TPbio : Concentration des produits de biotransformation, principalement du 5-hydroxydiclofenac
Flux
f0 = apport de DFC par les eaux usées ()
f1 = Photodégradation du DFC
f2 = Biodégradation du DFC
f3 = photodégradation secondaire : dégradation des produits de phototransformation (8-chlorocarbazole-1-acetic acid)
f4 = Adsorption par sédiments : dégradation des produits de biotransformation (5-hydroxydiclofenac)
f5 = Dilution des produits de photodégradation par les eaux usées
f6 = Dilution des produits de biodégradation par les eaux usées
Taux de changement
\(\frac{dDFC}{dt}\) = f0 - f1 - f2 \(\frac{dTPphoto}{dt}\) = f1 - f3 + f5 \(\frac{dTPbio}{dt}\) = f2 - f4 + f6
L’apport total de composés par les eaux usées dépends de trois choses, soit de la cocentration moyenne de ces composés dans les eaux usées non traités (Cinfluent), du volume d’eaux usées généré par personne (Vinfluent) et du nombre de personne (POP).
Afin de le traduire en augmentation de la concentration de DFC par les bassins de rétention, il faut considérer le volume du bassin de rétention (Vbassin)
On peut décrire le changement de concentration de ces composé dans le bassin de rétention par l’équation C1V1=C2V2,
où :
C1 = variation de concentration = Cinfluent - DFC
V1 = Vinfluent * POP
C2 = f0 (Augmentation de Concentration de DFC dans le bassin de rétention)
V2 = Vbassin + Vinfluent * pop * t
Ainsi,
f0 = \(\frac{(Cinfluent - DFC) * Vinfluent * POP}{Vbassin + Vinfluent*POP*t}\)
f0 = (Cinfluent* Vinfluent * POP) / (Vbassin +VinfluentPOPt)
Pour F5 et F6, on considère qu’il n’y a pas de produits de dégradation dans les eaux usées et donc que Cinfluent = 0. Ainsi,:
f5 = \(\frac{-TPphoto * Vinfluent * POP}{Vbassin + Vinfluent*POP*t}\)
f6 = \(\frac{-TPbio * Vinfluent * POP}{Vbassin + Vinfluent*POP*t}\) où :
Paramètres :
Cinfluent : la cocentration moyenne de DFC dans les eaux usées non traités = 340 ng/L
Vinfluent : volume d’eaux usées généré par personne par heure = 140 L/p*d
POP : nombre de personne dans la communautés = 1000 p
Vbassin : Volume du bassin = 75 000 000 L = superficie en ha * 10 000 * profondeur du bassin
Tous ces éléments sont pour l’instant considérés comme des paramètres. Il aurait été possible de faire de Vinfluent un forçage si l’on considère le dégèle au printemps et les variation de débit. POP pourrait aussi devenir un forçage si on considère une variation de population pendant l’année
Afin de pourvoir comparé appliquer ce modéle à des communautés de tailles différente, il serait nécessaire de faire de Vbassin un paramètre dépendant la taille de la population, puisque les villes ont souvent un plus grand bassin de stabilisation. Toutefois, afin d’étudier l’importance des différents paramètres sur ce modèle basé sur un bassin en particulier, il est plus utile de considérer la taille du bassin comme fixe, puisque dans la réalité il ne s’agrandit pas avec le nombre de personne. Voir page 441 de Smith 1996 pour équation linéaire de taille de bassin en fonction de la population et des émissions. Cependant, selon Ragush et al (2015), la taille des bassins en place en Arctique sont plusieurs fois plus petite que la taille surggérée. J’utiliserai ainsi une taille de bassin théorique idéalisée.
Pour le volume du bassin, étant donné que la plupart des bassins de rétentions sont de type facultatif, on prend une profondeur moyenne de 1.5 m. Selon Smith 1996, pour une population de 1000 personnes et un temps de rétention de 12 mois, les bassins couvrent environ 5 ha. Cela fait 5 * 10 000 m^2 x 1,5 m de profondeur, soit 75 000 m^3, soit 75 000 000 Litre
Le volume totale est pour sa part calculé en additionnant au volume du bassin le volume d’eau arrivée depuis t(0), ce qui donne Vtotal <- Vbassin + VinfluentPOPt
Cela mène à un volume toujours croissant. Ceci est voulu étant donnnée que les eaux usées des bassins de l’arctique sont généralement vidée une fois par année durant l’été, en générale début septembre. Cela permet donc déterminer la concentration dans des effluents qui atteingnent les écosystèmes, soit la variable qui nous intéresse véritablement.
La photodégradation dépend de la concentration de DFC, d’un coefficient de photodégradation lui-même déterminé par l’éclairement incident, et limité par la pénétration de la lumière et par la température.
f1 = kphoto * [DFC] * limitation de la température * limitation par pénétration de la lumière
Le taux de photodégradation selon la lumière est déterminé par le rendement quantique (Quantum Yield), qui détermine le taux de dégradation par mol de photon (en Einstein). Selon Andreozzi, = 0.0375 mol Einstein-1 par la lumière du soleil à un PH de 5.5.
Le coefficient de photodégradation de basse est donnée par l’équation suivante (1- exp(-QYI04.57 * 3600)). Le I0 qui représente l’éclairement incident en W m-2. Pour convertir l’éclairement incident en photons afin de l’utiliser par le rendement quantique, il faut, selon http://www.egc.com/useful_info_lighting.php, multiplier l’élcairement par 4,57 pour obtenir des uEinstein, puis par 3600 pour trouver l’éclairement par heure.
Paramètres :
QY : Quantum Yield, ou rendement quantique, en µMol/µEinstein.
Forçage :
I0: est l’incidence lumineuse, en Watt/ m -2, convertie en µEinstein
Il faut également considérer que lorsqu’il y a une couvert de glace lorsque le bassin est gelé, et qu’alors il n’y a plus de lumière. On peut alors considérer que I0 est = 0. Pour ce faire, j’utiliserai la température de l’eau de la mer déterminée dans la baie de Frobisher, à proximité d’Iqaluit.
Donc : I0 = 0 lorsque temp < 273 kelvin
L’effet de la température se fait au niveau du coefficient. Lorsque la température augemente, le coefficient de vitesse de la réaction augmente. Le coefficient se trouve donc en fonction de la température, en suivant la loi d’Arrhenius, selon des paramètres de E et de A trouvés expérimentalement. Afin de combiner cette limitation à celle de la lumière, le A est remplacé par le coefficient de vitesse trouver en fonction de la lumière, en h-1.
Selon la loi d’Arrhenius:
- e^\(\frac{-E}{RTemp}\))
Où
Paramètres :
A :facteur de fréquence, remplacé par la constante de vitesse de photodégradation déterminé en fonction de la lumière, en heure -1
E : énergie d’activation d’Arrhenius donnée en J·mol-1 = 5302 J mol−1
R : la constante des gaz parfait = 8.314462 J mol−1 K−1
Forcings :
Temp est la température de l’eau en Kelvin
ce qui donne une équation de flux de
L’effet de la profondeur pourrait être calculé selon un coeffficent d’atténuation et une intrégrale selon la profondeur.
Toutefois, une étude de Nurmi (2019) suggère de considérer un taux de 100 % pour une profondeur de 0 - 0.1 m, un taux de 10 % de 0.1 à 1m, et un taux de 1 % entre 1 et 5 m. La profondeur standards des bassins étant d’environ de 1.5 m, et considérant que la couche d’eau est entièrement mélangé, il est possible de faire une moyenne pondérée de cette atténuation par la pénétration de la lumière, soit (1 * 0.10 + 0.1 * 0.90 + 0.01 * 0.5 ) / 1.5 = 0.13.
Pour pouvoir faire de la profondeur un paramètre testable, dans on peut utiliser dans l’équation le terme (1 * 0.10 + 0.1 * 0.90 + 0.01 * (1 - prof_bas)), en considérant que la profondeur du bassin est d’au moins 1 mètres, comme le suggère la littérature. Je suis conscient que la profondeur s’accentue probablement avec l’augmentation du niveau total de l’eau, mais je toruvais qu’il n’était pas nécessaire d’ajouter cette modulation au modèle étant donnée une complexité inutile.
On peu donc considérer que la photodégradation n’a lieux qu’à 13 % de son taux maximale en moyenne L’équation devient alors :
f1 = [DFC] * (1- e^\(\-QY*I0*4.57\)) - e^\(\frac{-E}{RTemp}\)) * (1 * 0.10 + 0.1 * 0.90 + 0.01 * (1 - prof_bas))
f1 = DFC * (1- exp(-QYI04.57)) * exp((- E/(R * Temp))) (1 0.10 + 0.1 * 0.90 + 0.01 * (1 - prof_bas))
La biodégradation ne représente qu’une faible partie de la dégradation du DFC. Elle a lieux dans les sédiements, et elle dépend surtout de la température.
Je n’ai pas trouvé d’étude décrivant l’effet de la température en terme assez claire pour avoir des valeurs précises de constante d’Arrhenius. J’utiliserai donc un terme de limitation de q10 et une valeur de q10 standard de 2, qui pourrait idéalement être préciser par la suite.
f2 = Kbio * [DFC] * e^(\(\frac{Temp-Tref}{10}\)*ln(q10))
f2 = Kbio * DFC * exp(((Temp-Tref)/10)*log(q10)
où :
Paramètres :
q10 = Facteur d’augmentation pour chaque augmentation de 10°C = 2 (valeur standard à modifier éventuellement)
Kbio= constante de vitesse de biodégradation = Entre 0.064 et 0.18 d-1 selon groning ou Nurmi
Tref = température de référence à laquelle a été calculé les taux de biodégradation : 298 selon groning
Forcings :
Temp = Température de l’eau en kelvin
La biodégradation est inhibé lorsque l’étang de stabilisation est gelée. Or, Smith (1996) montre que dans une bonne partie du Nunavut, incluant coral harbour, l’épaisseur de la glace atteint environ 1.5 m d’épaisseur. Il est alors possible de considérer que l’hiver, il n’y a pas de biodégradation.
Idéalement, il serait possible d’utiliser l’épaisseur de la glace comme forcing, en considérant que la biodégradation à lieu uniqumement dans la portion qui n’est pas encore gelée et donc multipliant la biodégradtion par la proportion qui n’est pas gelée. Toutefois, déterminer l’épaisseur de la glace demande bien souvent une étude sur le terrain puisque le processus de congélation est complexe et fait intervenir trop de paramètre pour aisément le paramétriser.
Ainsi, je considère que dès que la température de l’eau atteind 0°C (Temp<273), kbio et kadsorp = 0
Les produits de dégradations primaires issue de la photodégradation sont presque entièrement composée de 8-chlorocarbazole-1-acetic acid (Poiger, 2001) Le taux de dégradation est donc celui de ce composés.
Cette photodégratation dépend de la température et de la lumière comme pour DFC. Cependant, selon Poiger (2001), le taux de dégradation de ce composés se situe entre 4.55 et 4.75 fois supérieur à celui du DFC, variant avec lui selon la lumière et la température,
Ainsi, il est possible pour l’instant de le décrire comme
f3 = kphoto2 * TPphoto
f3 = f1/DFC * 4.6 * TPphoto
Pour ce qui est de la biodégradation, le principal produit de décomposition par les bactéries retrouvé dans les sédiments est le 5-hydroxydiclofenac (5HDQI). Celui-ci semble être décomposé à un taux constant, dépendant peu de l’activité microbienne subséquente, probablement par adsorption des sédiments. L’effet de la température est mitigié. Normalement, l’adsorption est augmenté lorsque la température diminue, mais la baisse de température augmente la viscosité de l’eau, ce qui compense pour ce processus (Smith, 1996). Il serait possible d’ajouter un terme éventuellement pour déterminer effet de la température et ajouter un forcings.
f4= kadsorp * TPbio
où :
Paramètres :
Kadsorp = constante de réaction d’adsorption du 5-hydroxydiclofenac = 0.051 d-1 selon groning
Kadsorp de log(2)/(13/24)= 1.279656 d-1 selon Nurmi
f0 <- ((Cinfluent-DFC)* Vinfluent * POP)/Vtotal
f1 <- (1- exp(-QY*I0*4.57*3600)) * exp((- E/(R * Temp))) * DFC *(1 * 0.10 + 0.1 * 0.90 + 0.01 * (1 - prof_bas))
f2 <- Kbio * DFC * exp((Temp-Tref)/10)*log(q10)
f3 <- f1 /DFC * 4.6 * TPphoto
f4 <- kadsorp * TPbio
f5 <- ((0 -TPphoto)* Vinfluent * POP)/Vtotal
f6 <- ((0 -TPbio)* Vinfluent * POP)/Vtotal
| Paramètre | Valeur | Unité |
|---|---|---|
| Cinfluent | 340 | ng/L |
| Vinfluent | 140 | L/p*d |
| Vbassin | 75 000 000 | L |
| POP | 1000 | p |
| A | 1.707 | min−1 |
| E | 5302 | J mol−1 |
| R | 8.314462 | J mol−1 K−1 |
| Iref | 450 | Watt m-2 |
| q10 | 2 | |
| Kbio | 0.064 et 0.18 | d-1 |
| Tref | 298 | K (kelvin) |
| kadsorp | 0.051 | d-1 |
| Variable | unités | Source | Pas de temps |
|---|---|---|---|
| Temp | Kelvin | NOAA | |
| I0 | Watt m-2 | CWEC | Heure |
f0 = \(\frac{ng L-1 * L * p-1 * h-1 * p}{ L + L}\) = ng L-1 h-1
f1 = (1-e^(Eintein * EInstein−1) * \(\frac{J mol−1}{J mol−1 K−1 * K}\) * 60 * ng L-1 * 0.13 = ng L-1 h-1
f2 = h-1 * ng L-1 * e^(\(\frac{K-K}{10}\) * K-1) = ng L-1 h-1
f3 = e^(ln(min−1) - \(\frac{J mol−1}{J mol−1 K−1 * K}\) * 60 * ng L-1 * Watt m-2/Watt m-2 * 4. 6 * 0.13 = ng L-1 h-1
f4= h-1 * ng L-1 = ng L-1 h-1
Dans ce modèle, il y a une source, soit les eaux usées (f0, f5 et f6 ) et deux puits, soit la dégradation des sous produits de photodégradation et de biodégradation, f3 et f4. Ainsi, le taux de changement en concentrationdans le système, considérant une stoechiométrie de 1:1 pour les produits de dégradation, doit être égale à f0 - f3 - f4 + f5 + f6 et 2)
Somme des flux = f0 - f1 - f2 + f1 -f3 + f2 - f4 + f5 + f6 = f0 - f3 - f4 + f5 + f6
# load package with the integration routine:
library(deSolve)
library(insol)
#----------------------#
# the model equations: #
#----------------------#
setwd("/Users/jeremieboucher-fontaine/Desktop/Maitrise/Cours /modelisation/Projet Session//")
dataDFC<-read.csv2("Données/NU_CWEC/Coral_harbour_lumière_heure.csv", dec = ".")
dataTemp <- read.csv2("Données/NU_CWEC/Coral_harbour_temperature de l'eau.csv", dec = ".")
data_suisse <- read.csv2("Données/données_lumière_lac_suisse.csv", dec = ".")
data_temp_suisse <- read.csv2("Données/donnees_température_suisse.csv",dec = ".")
#vient de https://en.climate-data.org/north-america/canada/nunavut/iqaluit-1251/
Diclofenac <- function( t, state, parameters ) {
with( as.list( c( state, parameters ) ), { # unpack the state variables & parameters
##### Forcing #####
#TEMPÉRATURE
#pour cycle annuel avec glace
#Temp = Température
#Temp<-approx(dataTemp$Mois,dataTemp$Temp.kelvin, xout = t/731)$y
#Kbio est inclu dans les forcings pour spécifier qu'il n'y a pas de biodégradation lorsque le bassin est gelé.
#if(Temp<273){Kbio<-0}
#else {Kbio<-(0.064/24)}
#if(Temp<273){kadsorp<-0}
#else {kadsorp<-(0.051/24)}
#Pour cycle annuel sans glace
Temp<-approx(dataTemp$Mois,dataTemp$Temp.kelvin, xout = t/731)$y
#Pour cycle suisse
#Temp<-approx(data_temp_suisse$Mois,(data_temp_suisse$Température+273), xout = t/731)$y
#LUMIÈRE
# POur cycle annuel sans glace
I0<-approx(dataDFC$X,dataDFC$X.Global.Horizontal.Radiation..Wh.m2., xout = t)$y
#I0p<-I0*1.10
#Pour cycle avec glace
#if(Temp<273){I0<-0}
#else {I0<-approx(dataDFC$X,dataDFC$X.Global.Horizontal.Radiation..Wh.m2., xout = t)$y}
#pour test avec lac suisse. https://re.jrc.ec.europa.eu/pvg_tools/en/tools.html
#I0<-approx(data_suisse$heure,data_suisse$global.irradiance, xout = t)$y
#Vbassin
Vbassin = sup_ha * 10000 * prof_bas *1000
#Vtotal
Vtotal <- Vbassin + Vinfluent*POP*t
# Flux
f0 <- ((Cinfluent-DFC)* Vinfluent * POP)/Vtotal
f1 <- (1- exp(-QY*I0*4.57*3600)) * exp((- E/(R * Temp))) * DFC *(1 * 0.10 + 0.1 * 0.90 + 0.01 * (1 - prof_bas))
f2 <- Kbio * DFC * exp((Temp-Tref)/10)*log(q10)
f3 <- f1 /DFC * 4.6 * TPphoto
f4 <- kadsorp * TPbio
f5 <- ((0 -TPphoto)* Vinfluent * POP)/Vtotal
f6 <- ((0 -TPbio)* Vinfluent * POP)/Vtotal
# Differential (balance) equations
dDFC <- f0 - f1 - f2
dTPphoto <- f1 - f3 + f5
dTPbio <- f2 - f4 + f6
# Output, packed as a list
list( c( dDFC,
dTPphoto,
dTPbio
),
c( DFC = DFC, # the output variables
TPphoto = TPphoto,
TPbio = TPbio,
I0 = I0,
f0 = f0,
f1 = f1,
f2 = f2,
f3 = f3,
f4 = f4,
f5 = f5,
Vtotal=Vtotal,
Temp = Temp,
Vbassin = Vbassin
)
)
})
} # end of model
#-----------------------#
# Paramètre du modèle: #
#-----------------------#
parameters <- c( Cinfluent = 340, #µg/L
Vinfluent = 140/24, #L/p*d
POP = 1000, #p
E = 5302, #J mol−1
R = 8.314462, #J mol−1 K−1
q10 = 2, #aucune
Kbio = 0.064/24, #d-1
Tref = 298, #K (kelvin)
kadsorp = 0.051/24, #d-1
QY = 0.0375, # mol E-1
sup_ha = 5, #ha
prof_bas = 1.5 #m
)
#-------------------------#
# Conditions initales: #
#-------------------------#
state <- c( DFC = 7, #
TPphoto = 1,
TPbio = 3
)
#----------------------#
# RUNNING the model: #
#----------------------#
times <-seq(0:8760)
out <-as.data.frame( ode( state, times, Diclofenac, parameters ) )
#------------------------#
# PLOTTING model output: #
#------------------------#
out$DFC[times = 6500]
## [1] 1.748803
plot (times,out$DFC,type="l",lwd=2,main="Diclofenac" ,xlab="Mois", ylab="ng/L", xaxt = "n", las = 1)
axis (1,
at = c(0,744,1416,2160,2880,3624,4344,5088,5832,6552,7296,8016,8760),
labels = c("J", "F", "M", "A", "M","J","J","A","S","O","N","D","J"))
plot (times,out$TPphoto,type="l",lwd=2,main="TPphoto",xlab="Mois", ylab="ng/L", xaxt = "n")
axis (1,
at = c(0,744,1416,2160,2880,3624,4344,5088,5832,6552,7296,8016,8760),
labels = c("J", "F", "M", "A", "M","J","J","A","S","O","N","D","J"))
plot (times,out$TPbio,type="l",lwd=2,main="TPbio",xlab="Mois", ylab="ng/L", xaxt = "n")
axis (1,
at = c(0,744,1416,2160,2880,3624,4344,5088,5832,6552,7296,8016,8760),
labels = c("J", "F", "M", "A", "M","J","J","A","S","O","N","D","J"))
plot (times,out$I0,type="l",lwd=2,main="I0 " ,xlab="Mois", ylab="W m-2", xaxt = "n")
axis (1,
at = c(0,744,1416,2160,2880,3624,4344,5088,5832,6552,7296,8016,8760),
labels = c("J", "F", "M", "A", "M","J","J","A","S","O","N","D","J"))
plot (times,out$Temp,type="l",lwd=2,main="Température " ,xlab="Mois", ylab="Kelvin", xaxt = "n")
axis (1,
at = c(0,744,1416,2160,2880,3624,4344,5088,5832,6552,7296,8016,8760),
labels = c("J", "F", "M", "A", "M","J","J","A","S","O","N","D","J"))
abline(h=273)
par( mfrow=c(2,2))
plot (times,out$Vtotal,type="l",lwd=2,main="Vtotal " ,xlab="time, days",ylab="mmolN/m3", ylim = c(0,1.3e+08))
plot (times,out$Vbassin,type="l",lwd=2,main="Vbassin " ,xlab="time, days",ylab="mmolN/m3", )
plot (times,out$f0 ,type="l",lwd=2,main="f0 " ,xlab="time, days",ylab="ng/l")
plot (times,out$f1 ,type="l",lwd=2,main="f1 " ,xlab="time, days",ylab="ng/l")
plot (times,out$f2 ,type="l",lwd=2,main="f2 " ,xlab="time, days",ylab="ng/l")
plot (times,out$f3 ,type="l",lwd=2,main="f3 " ,xlab="time, days",ylab="ng/l")
plot (times,out$f4 ,type="l",lwd=2,main="f4 " ,xlab="time, days",ylab="ng/l")
plot (times,out$f5 ,type="l",lwd=2,main="f5 " ,xlab="time, days",y2lab="ng/l")
## Warning in plot.window(...): "y2lab" is not a graphical parameter
## Warning in plot.xy(xy, type, ...): "y2lab" is not a graphical parameter
## Warning in axis(side = side, at = at, labels = labels, ...): "y2lab" is not a
## graphical parameter
## Warning in axis(side = side, at = at, labels = labels, ...): "y2lab" is not a
## graphical parameter
## Warning in box(...): "y2lab" is not a graphical parameter
## Warning in title(...): "y2lab" is not a graphical parameter
plot (times,out$f6 ,type="l",lwd=2,main="f6 " ,xlab="time, days",ylab="ng/l")
#Validation
#Validation
data_valid<-read.csv2("Données/NU_CWEC/Donnees_validation.csv", dec = ".")
#Diclofenac
plot (times,out$DFC,type="l",lwd=2,main="Diclofenac" ,xlab="Mois", ylab="ng/L", xaxt = "n",
ylim = c(0,13), )
axis (1,
at = c(0,744,1416,2160,2880,3624,4344,5088,5832,6552,7296,8016,8760),
labels = c("J", "F", "M", "A", "M","J","J","A","S","O","N","D","J"))
points(data_valid$Heure,data_valid$concentration, col = "forestgreen", cex = 1.2, pch = 16)
lines(data_valid$Jours,data_valid$Pt_Riley, col="firebrick", lwd=2)
lines(data_valid$Jours,data_valid$Pt_A.G, col="blue",lwd=2)
legend( "topright",
c("Mon modèle","Données Poiger et al."),
lwd = 2,
lty = c(1,NA),
pch = c(NA,16),
col = c("black","forestgreen"),
bty = "n" )
#Température et I0
library(scales)
plot (times,out$I0,type="l",lwd=2, axes = F, xlab = "", ylab = "", col = alpha("blue", 0.4))
axis (1,
at = c(0,744,1416,2160,2880,3624,4344,5088,5832,6552,7296,8016,8760),
labels = c("J", "F", "M", "A", "M","J","J","A","S","O","N","D","J"))
par(new=TRUE)
plot (times,out$Temp,type="l",lwd=2, axes = F, xlab = "", ylab = "", xaxt = "n", col="firebrick")
axis (1,
at = c(0,744,1416,2160,2880,3624,4344,5088,5832,6552,7296,8016,8760),
labels = c("J", "F", "M", "A", "M","J","J","A","S","O","N","D","J"))
par(new=TRUE)
plot (times,out$DFC,type="l",lwd=2,main="Diclofenac" ,xlab="Mois", ylab="ng/L", xaxt = "n",
ylim = c(0,10), las = 1)
axis (1,
at = c(0,744,1416,2160,2880,3624,4344,5088,5832,6552,7296,8016,8760),
labels = c("J", "F", "M", "A", "M","J","J","A","S","O","N","D","J"))
legend( "topright",
c("Diclofenac prédit","Éclairement", "Température"),
lwd = 2,
lty = c(1,1,1),
col = c("black",alpha("blue", 0.4),"firebrick"),
bty = "n" )
## Analyses de sensitivité
Cinfluent = 340 #µg/L
Vinfluent = 140/24 #L/p*d
E = 5302
POP = 1000 #p
q10 = 2 #aucune
Kbio = 0.064/24 #d-1
kadsorp = 0.051/24 #d-1
Tref = 298 #K (kelvin)
QY = 0.0375 # mol E-1
sup_ha = 5 #ha
prof_bas = 1.5 #m
#--- Vary parameters one-at-a-time (OAT) by 10%
ss <- 0.3
Cinfluentp <- Cinfluent * (1+ss) # taux de produxction primaire
Vinfluentp <- Vinfluent * (1+ss) # taux de broutage
POPp <- POP * (1+ss) # taux de respiration
q10p <- q10 * (1+ss) #Producteurs primaires initiale
Kbiop <- Kbio * (1+ss)
kadsorpp <- kadsorp * (1+ss)
QYp <- QY * (1+ss)
sup_hap <- sup_ha * (1+ss)
prof_basp <- prof_bas * (1+ss)
Ep <- E * (1+ss)
#--- Run simulations
# référence
parametersref <- c( Cinfluent = 340, #µg/L
Vinfluent = 140/24, #L/p*d
POP = 1000, #p
E = 5302, #J mol−1
R = 8.314462, #J mol−1 K−1
q10 = 2, #aucune
Tref = 298, #K (kelvin)
Kbio = 0.064/24, #d-1
kadsorp = 0.051/24, #d-1
QY = 0.0375, # mol E-1
sup_ha = 5, #ha
prof_bas = 1.5 #m
)
state <- c( DFC = 7, TPphoto = 1,TPbio = 6)
times <-seq(0:8760)
outref <-as.data.frame( ode( state, times, Diclofenac, parametersref ) )
outref <- outref$DFC
# Cinfluent
parametersCinfluent <- c( Cinfluent = Cinfluentp, #g C (g C)-1 d-1 (g cal cm-2 min-1)-1 , # day^-1
Vinfluent = 140/24, #L/p*d
POP = 1000, #p
E = 5302, #J mol−1
R = 8.314462, #J mol−1 K−1
q10 = 2, #aucune
Kbio = 0.064/24, #d-1
kadsorp = 0.051/24, #d-1
Tref = 298, #K (kelvin)
QY = 0.0375, # mol E-1
sup_ha = 5, #ha
prof_bas = 1.5 #m
)
state <- c( DFC = 7, TPphoto = 1,TPbio = 6)
times <-seq(0:8760)
outCinfluent <-as.data.frame( ode( state, times, Diclofenac, parametersCinfluent) )
outCinfluent <- outCinfluent$DFC
# Vinfluent
parametersVinfluent <- c( Cinfluent = 340, #g C (g C)-1 d-1 (g cal cm-2 min-1)-1 , # day^-1
Vinfluent = Vinfluentp, #L/p*d
POP = 1000, #p
E = 5302, #J mol−1
R = 8.314462, #J mol−1 K−1
q10 = 2, #aucune
Tref = 298, #K (kelvin)
Kbio = 0.064/24, #d-1
kadsorp = 0.051/24, #d-1
QY = 0.0375, # mol E-1
sup_ha = 5, #ha
prof_bas = 1.5 #m
)
state <- c( DFC = 7, TPphoto = 1,TPbio = 6)
times <-seq(0:8760)
outVinfluent <-as.data.frame( ode( state, times, Diclofenac, parametersVinfluent) )
outVinfluent <- outVinfluent$DFC
# POP
parametersPOP <- c( Cinfluent = 340, #g C (g C)-1 d-1 (g cal cm-2 min-1)-1 , # day^-1
Vinfluent = 140/24, #L/p*d
POP = POPp, #p
E = 5302, #J mol−1
R = 8.314462, #J mol−1 K−1
q10 = 2, #aucune
Tref = 298, #K (kelvin)
Kbio = 0.064/24, #d-1
kadsorp = 0.051/24, #d-1
QY = 0.0375, # mol E-1
sup_ha = 5, #ha
prof_bas = 1.5 #m
)
state <- c( DFC = 7, TPphoto = 1,TPbio = 6)
times <-seq(0:8760)
outPOP <-as.data.frame( ode( state, times, Diclofenac, parametersPOP) )
outPOP <- outPOP$DFC
# q10
parametersq10 <- c( Cinfluent = 340, #g C (g C)-1 d-1 (g cal cm-2 min-1)-1 , # day^-1
Vinfluent = 140/24, #L/p*d
POP = 1000, #p
E = 5302, #J mol−1
R = 8.314462, #J mol−1 K−1
q10 = q10p, #aucune
Tref = 298, #K (kelvin)
Kbio = 0.064/24, #d-1
kadsorp = 0.051/24, #d-1
QY = 0.0375, # mol E-1
sup_ha = 5, #ha
prof_bas = 1.5 #m
)
state <- c( DFC = 7, TPphoto = 1,TPbio = 6)
times <-seq(0:8760)
outq10 <-as.data.frame( ode( state, times, Diclofenac, parametersq10) )
outq10 <- outq10$DFC
# Kbio
parametersKbio <- c( Cinfluent = 340, #g C (g C)-1 d-1 (g cal cm-2 min-1)-1 , # day^-1
Vinfluent = 140/24, #L/p*d
POP = 1000, #p
E = 5302, #J mol−1
R = 8.314462, #J mol−1 K−1
q10 = 2, #aucune
Tref = 298, #K (kelvin)
Kbio = Kbiop, #d-1
kadsorp = 0.051/24, #d-1
QY = 0.0375, # mol E-1
sup_ha = 5, #ha
prof_bas = 1.5 #m
)
state <- c( DFC = 7, TPphoto = 1,TPbio = 6)
times <-seq(0:8760)
outKbio <-as.data.frame( ode( state, times, Diclofenac, parametersKbio) )
outKbio <- outKbio$DFC
# kadsorp
parameterskadsorp <- c( Cinfluent = 340, #g C (g C)-1 d-1 (g cal cm-2 min-1)-1 , # day^-1
Vinfluent = 140/24, #L/p*d
POP = 1000, #p
E = 5302, #J mol−1
R = 8.314462, #J mol−1 K−1
q10 = 2, #aucune
Tref = 298, #K (kelvin)
Kbio = 0.064/24, #d-1
kadsorp = kadsorpp, #d-1
QY = 0.0375, # mol E-1
sup_ha = 5, #ha
prof_bas = 1.5 #m
)
state <- c( DFC = 7, TPphoto = 1,TPbio = 6)
times <-seq(0:8760)
outkadsorp <-as.data.frame( ode( state, times, Diclofenac, parameterskadsorp) )
outkadsorp <- outkadsorp$DFC
#QY
parametersQY <- c( Cinfluent = 340, #g C (g C)-1 d-1 (g cal cm-2 min-1)-1 , # day^-1
Vinfluent = 140/24, #L/p*d
POP = 1000, #p
E = 5302, #J mol−1
R = 8.314462, #J mol−1 K−1
q10 = 2, #aucune
Tref = 298, #K (kelvin)
Kbio = 0.064/24, #d-1
kadsorp = 0.051/24, #d-1
QY = QYp, # mol E-1
sup_ha = 5, #ha
prof_bas = 1.5 #m
)
state <- c( DFC = 7, TPphoto = 1,TPbio = 6)
times <-seq(0:8760)
outQY <-as.data.frame( ode( state, times, Diclofenac, parametersQY) )
outQY <- outQY$DFC
#E
parametersE <- c( Cinfluent = 340, #g C (g C)-1 d-1 (g cal cm-2 min-1)-1 , # day^-1
Vinfluent = 140/24, #L/p*d
POP = 1000, #p
E = Ep, #J mol−1
R = 8.314462, #J mol−1 K−1
q10 = 2, #aucune
Tref = 298, #K (kelvin)
Kbio = 0.064/24, #d-1
kadsorp = 0.051/24, #d-1
QY = 0.0375, # mol E-1
sup_ha = 5, #ha
prof_bas = 1.5 #m
)
state <- c( DFC = 7, TPphoto = 1,TPbio = 6)
times <-seq(0:8760)
outE <-as.data.frame( ode( state, times, Diclofenac, parametersE) )
outE <- outE$DFC
#sup_ha
parameterssup_ha <- c( Cinfluent = 340, #g C (g C)-1 d-1 (g cal cm-2 min-1)-1 , # day^-1
Vinfluent = 140/24, #L/p*d
POP = 1000, #p
E = 5302, #J mol−1
R = 8.314462, #J mol−1 K−1
q10 = 2, #aucune
Tref = 298, #K (kelvin)
Kbio = 0.064/24, #d-1
kadsorp = 0.051/24, #d-1
QY = 0.0375, # mol E-1
sup_ha = sup_hap, #ha
prof_bas = 1.5 #m
)
state <- c( DFC = 7, TPphoto = 1,TPbio = 6)
times <-seq(0:8760)
outsup_ha <-as.data.frame( ode( state, times, Diclofenac, parameterssup_ha) )
outsup_ha <- outsup_ha$DFC
#prof_bas
parametersprof_bas <- c( Cinfluent = 340, #g C (g C)-1 d-1 (g cal cm-2 min-1)-1 , # day^-1
Vinfluent = 140/24, #L/p*d
POP = 1000, #p
E = 5302, #J mol−1
R = 8.314462, #J mol−1 K−1
q10 = 2, #aucune
Tref = 298, #K (kelvin)
Kbio = 0.064/24, #d-1
kadsorp = 0.051/24, #d-1
QY = 0.0375, # mol E-1
sup_ha = 5, #ha
prof_bas = prof_basp #m
)
state <- c( DFC = 7, TPphoto = 1,TPbio = 6)
times <-seq(0:8760)
outprof_bas <-as.data.frame( ode( state, times, Diclofenac, parametersprof_bas) )
outprof_bas <- outprof_bas$DFC
#Variation d'arrivée de DFC
plot( times,
outref,
type = "l",
lwd = 1,
ylim = c(0,10),
xlab = "Temps (Mois)",
ylab = "Concentration de diclofenac, ng/l",
main = "Sensibilité locale\nVariation de l'apport de DFC",
xaxt = "n")
axis (1,
at = c(0,744,1416,2160,2880,3624,4344,5088,5832,6552,7296,8016,8760),
labels = c("J", "F", "M", "A", "M","J","J","A","S","O","N","D","J"))
lines( times,
outVinfluent,
ylim = c(0,10),
lwd = 2,
lty = 2,
col="red")
lines( times,
outCinfluent,
ylim = c(0,10),
lwd = 1,
lty = 2,
col="blue")
lines( times,
outPOP,
ylim = c(0,10),
lwd = 1,
lty = 2,
col="green")
legend( "topright",
c("Référence","Vinfluent + 30%", "Cinfluent + 30%", "POP + 30%"),
lwd = 2,
lty = c(1,1,1),
col = c("black","red","blue","green"),
bty = "n" )
# Variation de la photodégradation
plot( times,
outref,
type = "l",
lwd = 1,
ylim = c(0,10),
xlab = "Temps (Mois)",
ylab = "Concentration de diclofenac, ng/l",
main = "Sensibilité locale\nVariation de la photodégradation",
xaxt = "n")
axis (1,
at = c(0,744,1416,2160,2880,3624,4344,5088,5832,6552,7296,8016,8760),
labels = c("J", "F", "M", "A", "M","J","J","A","S","O","N","D","J"))
lines( times,
outQY,
ylim = c(0,10),
lwd = 1,
lty = 2,
col="red")
lines( times,
outE,
ylim = c(0,10),
lwd = 1,
lty = 2,
col="blue")
legend( "topright",
c("Référence","Quantum yield + 30%", "Énergie d'Activation (E) + 30%"),
lwd = 2,
lty = c(1,1,1),
col = c("black","red","blue"),
bty = "n" )
# Variation de la Biodégradation
plot( times,
outref,
type = "l",
lwd = 1,
ylim = c(0,10),
xlab = "Temps (Mois)",
ylab = "Concentration de diclofenac, ng/l",
main = "Sensibilité locale\nVariation de la biodégradation ",
xaxt = "n")
axis (1,
at = c(0,744,1416,2160,2880,3624,4344,5088,5832,6552,7296,8016,8760),
labels = c("J", "F", "M", "A", "M","J","J","A","S","O","N","D","J"))
lines( times,
outKbio,
ylim = c(0,10),
lwd = 2,
lty = 2,
col="#FF9900")
lines( times,
outq10,
ylim = c(0,10),
lwd = 1,
lty = 2,
col="#33FFFF")
legend( "topright",
c("Référence","kbio + 30%", "q10 + 30%"),
lwd = 2,
lty = c(1,1,1),
col = c("black","#FF9900","#33FFFF"),
bty = "n" )
# Variation de la taille du bassin
plot( times,
outref,
type = "l",
lwd = 1,
ylim = c(0,10),
xlab = "Temps (Mois)",
ylab = "Concentration de diclofenac, ng/l",
main = "Sensibilité locale\nVariation de la taille du bassin ",
xaxt = "n")
axis (1,
at = c(0,744,1416,2160,2880,3624,4344,5088,5832,6552,7296,8016,8760),
labels = c("J", "F", "M", "A", "M","J","J","A","S","O","N","D","J"))
lines( times,
outsup_ha,
ylim = c(0,10),
lwd = 1,
lty = 2,
col="#336666")
lines( times,
outprof_bas,
ylim = c(0,10),
lwd = 1,
lty = 2,
col="#CC0033")
legend( "topright",
c("Référence","Sup_ha + 30%", "prof_ha + 30%"),
lwd = 2,
lty = c(1,1,1),
col = c("black","#336666","#CC0033"),
bty = "n" )
################# Effet de la lumière #################
DiclofenacI0add <- function( t, state, parameters ) {
with( as.list( c( state, parameters ) ), { # unpack the state variables & parameters
Temp<-approx(dataTemp$Mois,dataTemp$Temp.kelvin, xout = t/731)$y
I0add<-approx(dataDFC$X,dataDFC$X.Global.Horizontal.Radiation..Wh.m2., xout = t)$y
I0addp<-I0add+10
Vbassin = sup_ha * 10000 * prof_bas *1000
Vtotal <- Vbassin + Vinfluent*POP*t
# Flux
f0 <- ((Cinfluent-DFC)* Vinfluent * POP)/Vtotal
f1 <- (1- exp(-QY*I0addp*4.57*3600)) * exp((- E/(R * Temp))) * DFC *(1 * 0.10 + 0.1 * 0.90 + 0.01 * (1 - prof_bas))
f2 <- Kbio * DFC * exp((Temp-Tref)/10)*log(q10)
f3 <- f1 /DFC * 4.6 * TPphoto
f4 <- kadsorp * TPbio
f5 <- ((0 -TPphoto)* Vinfluent * POP)/Vtotal
f6 <- ((0 -TPbio)* Vinfluent * POP)/Vtotal
dDFC <- f0 - f1 - f2
dTPphoto <- f1 - f3 + f5
dTPbio <- f2 - f4 + f6
list( c( dDFC,
dTPphoto,
dTPbio
),
c( DFCI0add = DFC # the output variables
)
)
})
}
parameters <- c( Cinfluent = 340, #µg/L
Vinfluent = 140/24, #L/p*d
POP = 1000, #p
E = 5302, #J mol−1
R = 8.314462, #J mol−1 K−1
q10 = 2, #aucune
Kbio = 0.064/24, #d-1
Tref = 298, #K (kelvin)
kadsorp = 0.051/24, #d-1
QY = 0.0375, # mol E-1
sup_ha = 5, #ha
prof_bas = 1.5 #m
)
state <- c( DFC = 7, TPphoto = 1, TPbio = 6 )
times <-seq(0:8760)
outI0add <-as.data.frame( ode( state, times, DiclofenacI0add, parameters ) )# end of model
outI0add <- outI0add$DFCI0add
DiclofenacI0 <- function( t, state, parameters ) {
with( as.list( c( state, parameters ) ), { # unpack the state variables & parameters
Temp<-approx(dataTemp$Mois,dataTemp$Temp.kelvin, xout = t/731)$y
I0<-approx(dataDFC$X,dataDFC$X.Global.Horizontal.Radiation..Wh.m2., xout = t)$y
I0p<-I0*10
Vbassin = sup_ha * 10000 * prof_bas *1000
Vtotal <- Vbassin + Vinfluent*POP*t
# Flux
f0 <- ((Cinfluent-DFC)* Vinfluent * POP)/Vtotal
f1 <- (1- exp(-QY*I0p*4.57*3600)) * exp((- E/(R * Temp))) * DFC *(1 * 0.10 + 0.1 * 0.90 + 0.01 * (1 - prof_bas))
f2 <- Kbio * DFC * exp((Temp-Tref)/10)*log(q10)
f3 <- f1 /DFC * 4.6 * TPphoto
f4 <- kadsorp * TPbio
f5 <- ((0 -TPphoto)* Vinfluent * POP)/Vtotal
f6 <- ((0 -TPbio)* Vinfluent * POP)/Vtotal
dDFC <- f0 - f1 - f2
dTPphoto <- f1 - f3 + f5
dTPbio <- f2 - f4 + f6
list( c( dDFC,
dTPphoto,
dTPbio
),
c( DFCI0 = DFC # the output variables
)
)
})
}
parameters <- c( Cinfluent = 340, #µg/L
Vinfluent = 140/24, #L/p*d
POP = 1000, #p
E = 5302, #J mol−1
R = 8.314462, #J mol−1 K−1
q10 = 2, #aucune
Kbio = 0.064/24, #d-1
Tref = 298, #K (kelvin)
kadsorp = 0.051/24, #d-1
QY = 0.0375, # mol E-1
sup_ha = 5, #ha
prof_bas = 1.5 #m
)
state <- c( DFC = 7, TPphoto = 1, TPbio = 6 )
times <-seq(0:8760)
outI0 <- as.data.frame( ode( state, times, DiclofenacI0, parameters ) )# end of model
outI0 <- outI0$DFCI0
########## Effet de la température ############33
DiclofenacTemp <- function( t, state, parameters ) {
with( as.list( c( state, parameters ) ), { # unpack the state variables & parameters
Temp<-approx(dataTemp$Mois,dataTemp$Temp.kelvin, xout = t/731)$y
Tempp<- Temp * 1.10
I0<-approx(dataDFC$X,dataDFC$X.Global.Horizontal.Radiation..Wh.m2., xout = t)$y
Vbassin = sup_ha * 10000 * prof_bas *1000
Vtotal <- Vbassin + Vinfluent*POP*t
# Flux
f0 <- ((Cinfluent-DFC)* Vinfluent * POP)/Vtotal
f1 <- (1- exp(-QY*I0*4.57*3600)) * exp((- E/(R * Tempp))) * DFC *(1 * 0.10 + 0.1 * 0.90 + 0.01 * (1 - prof_bas))
f2 <- Kbio * DFC * exp((Tempp-Tref)/10)*log(q10)
f3 <- f1 /DFC * 4.6 * TPphoto
f4 <- kadsorp * TPbio
f5 <- ((0 -TPphoto)* Vinfluent * POP)/Vtotal
f6 <- ((0 -TPbio)* Vinfluent * POP)/Vtotal
dDFC <- f0 - f1 - f2
dTPphoto <- f1 - f3 + f5
dTPbio <- f2 - f4 + f6
list( c( dDFC,
dTPphoto,
dTPbio
),
c( DFCTemp = DFC # the output variables
)
)
})
}
parameters <- c( Cinfluent = 340, #µg/L
Vinfluent = 140/24, #L/p*d
POP = 1000, #p
E = 5302, #J mol−1
R = 8.314462, #J mol−1 K−1
q10 = 2, #aucune
Kbio = 0.064/24, #d-1
Tref = 298, #K (kelvin)
kadsorp = 0.051/24, #d-1
QY = 0.0375, # mol E-1
sup_ha = 5, #ha
prof_bas = 1.5 #m
)
state <- c( DFC = 7, TPphoto = 1, TPbio = 6 )
times <-seq(0:8760)
outTemp <-as.data.frame( ode( state, times, DiclofenacTemp, parameters ) )# end of model
outTemp <-outTemp$DFCTemp
DiclofenacTempmoins <- function( t, state, parameters ) {
with( as.list( c( state, parameters ) ), { # unpack the state variables & parameters
Tempmoins<-approx(dataTemp$Mois,dataTemp$Temp.kelvin, xout = t/731)$y
Tempmoinsp<- Tempmoins * 0.90
I0<-approx(dataDFC$X,dataDFC$X.Global.Horizontal.Radiation..Wh.m2., xout = t)$y
Vbassin = sup_ha * 10000 * prof_bas *1000
Vtotal <- Vbassin + Vinfluent*POP*t
# Flux
f0 <- ((Cinfluent-DFC)* Vinfluent * POP)/Vtotal
f1 <- (1- exp(-QY*I0*4.57*3600)) * exp((- E/(R * Tempmoinsp))) * DFC *(1 * 0.10 + 0.1 * 0.90 + 0.01 * (1 - prof_bas))
f2 <- Kbio * DFC * exp((Tempmoinsp-Tref)/10)*log(q10)
f3 <- f1 /DFC * 4.6 * TPphoto
f4 <- kadsorp * TPbio
f5 <- ((0 -TPphoto)* Vinfluent * POP)/Vtotal
f6 <- ((0 -TPbio)* Vinfluent * POP)/Vtotal
dDFC <- f0 - f1 - f2
dTPphoto <- f1 - f3 + f5
dTPbio <- f2 - f4 + f6
list( c( dDFC,
dTPphoto,
dTPbio
),
c( DFCTempmoins = DFC # the output variables
)
)
})
}
parameters <- c( Cinfluent = 340, #µg/L
Vinfluent = 140/24, #L/p*d
POP = 1000, #p
E = 5302, #J mol−1
R = 8.314462, #J mol−1 K−1
q10 = 2, #aucune
Kbio = 0.064/24, #d-1
Tref = 298, #K (kelvin)
kadsorp = 0.051/24, #d-1
QY = 0.0375, # mol E-1
sup_ha = 5, #ha
prof_bas = 1.5 #m
)
state <- c( DFC = 7, TPphoto = 1, TPbio = 6 )
times <-seq(0:8760)
outTempmoins <-as.data.frame( ode( state, times, DiclofenacTempmoins, parameters ) )# end of model
outTempmoins <- outTempmoins$DFCTempmoins
#Variation de la lumière
plot (times,outref,type="l",lwd=2,main="Analyses de sensibilité\nVariation de l'éclairement" ,xlab="Mois", ylab="ng/L", xaxt = "n",
ylim = c(0,10), )
axis (1,
at = c(0,744,1416,2160,2880,3624,4344,5088,5832,6552,7296,8016,8760),
labels = c("J", "F", "M", "A", "M","J","J","A","S","O","N","D","J"))
lines( times,
outI0,
ylim = c(0,10),
lwd = 1,
col = "firebrick",
lty = 2
)
lines( times,
outI0add,
ylim = c(0,10),
lwd = 1,
col = "forestgreen",
lty = 3,
)
legend( "topright",
c("Référence","Éclairement + 10%","Éclairement + 10 watt/m2 "),
lwd = 2,
lty = c(1,2,3),
col = c("black","firebrick","forestgreen"),
bty = "n" )
#Variation de la température
plot (times,outref,type="l",lwd=2,main="Analyses de sensibilité\nVariation de la température" ,xlab="Mois", ylab="ng/L", xaxt = "n",
ylim = c(0,10), )
axis (1,
at = c(0,744,1416,2160,2880,3624,4344,5088,5832,6552,7296,8016,8760),
labels = c("J", "F", "M", "A", "M","J","J","A","S","O","N","D","J"))
lines( times,
outTemp,
ylim = c(0,10),
lwd = 1,
lty = 2,
col="red")
lines( times,
outTempmoins,
ylim = c(0,10),
lwd = 1,
lty = 2,
col="blue")
legend( "topright",
c("Référence","Température + 10%", "Température - 10%"),
lwd = 2,
lty = c(1,1,1),
col = c("black","red","blue"),
bty = "n" )
# Average response from reference simulation
outm <- mean(outref, na.rm = TRUE)
str(outref)
## num [1:8761] 7 7.02 7.05 7.07 7.1 ...
Cinfluent = 340 #µg/L
Vinfluent = 140/24 #L/p*d
E = 5302
POP = 1000 #p
q10 = 2 #aucune
Kbio = 0.064/24 #d-1
kadsorp = 0.051/24 #d-1
Tref = 298 #K (kelvin)
QY = 0.0375 # mol E-1
sup_ha = 5 #ha
prof_bas = 1.5 #m
# Local sensitivity S.oat (array) & Sij (scalar)
S.oat <- cbind( Vinfluent = (outVinfluent-outref)/outm/ss,
POP = (outPOP-outref)/outm/ss,
Cinfluent = (outCinfluent-outref)/outm/ss,
q10 = (outq10-outref)/outm/ss,
Kbio = (outKbio-outref)/outm/ss,
kadsorp = (outkadsorp-outref)/outm/ss,
QY = (outQY-outref)/outm/ss,
E = (outE-outref)/outm/ss,
sup_ha = (outsup_ha-outref)/outm/ss,
prof_bas = (outprof_bas-outref)/outm/ss,
Temperature = (outTemp-outref)/outm/ss,
Lumiere = (outI0-outref)/outm/ss
)
colnames(S.oat) <- c( "Volume d'influent/personne", "Population", "Concentration dans influent","q10","k de biodégradation","k d'adsorption","Quantum Yield","E","superficie du bassin (ha)" ,"Profondeur du bassin","Température", "Éclairement")
n <- length(times)
Sij <- ( apply( S.oat^2, 2, sum, na.rm = TRUE )/n )^0.5
write.csv2(Sij, file = "sensibilite.csv" , dec = ".")
## Warning in write.csv2(Sij, file = "sensibilite.csv", dec = "."): attempt to set
## 'dec' ignored
#--- Figures
# Taux de production primaire (photosynthèse)
Section pour le modèle du lac Greifensee (suisse)
# load package with the integration routine:
library(deSolve)
library(insol)
#----------------------#
# the model equations: #
#----------------------#
setwd("/Users/jeremieboucher-fontaine/Desktop/Maitrise/Cours /modelisation/Projet Session//")
data_suisse <- read.csv2("Données/données_lumière_lac_suisse.csv", dec = ".")
data_temp_suisse <- read.csv2("Données/donnees_température_suisse.csv",dec = ".")
#vient de https://en.climate-data.org/north-america/canada/nunavut/iqaluit-1251/
Diclofenac <- function( t, state, parameters ) {
with( as.list( c( state, parameters ) ), { # unpack the state variables & parameters
##### Forcing #####
#TEMPÉRATURE
Temp<-approx(data_temp_suisse$Mois,(data_temp_suisse$Température+273), xout = t/731)$y
#LUMIÈRE
#https://re.jrc.ec.europa.eu/pvg_tools/en/tools.html
I0<-approx(data_suisse$heure,data_suisse$global.irradiance, xout = t)$y
#Vbassin du lac
Q = Vbassin/t_res
Ain = (Intrant)/Q
#arruvé de DFC p
#2.5e+10 /24 = 1041666667 h-1
#ATTÉNUATION PAR LA PROFONDEUR
# profondeur du lac de 17.8 m
#(1 * 0.10 + 0.1 * 0.90 + 0.01 * 16.8 ) / 17.8 = 0.02011236
#si prof de 33 m (max)
# (1 * 0.10 + 0.1 * 0.90 + 0.01 * 32 ) / 33= 0.01545455
# Flux
f0 <- 1/(t_res)*(Ain-DFC)
f1 <- (1- exp(-QY*I0*4.57*3600)) * exp((- E/(R * Temp))) * DFC * 0.02011236
f2 <- Kbio * DFC * exp((Temp-Tref)/10)*log(q10)
f3 <- f1 /DFC * 4.6 * TPphoto
f4 <- kadsorp * TPbio
# Differential (balance) equations
dDFC <- f0 - f1 - f2
dTPphoto <- f1 - f3
dTPbio <- f2 - f4
# Output, packed as a list
list( c( dDFC,
dTPphoto,
dTPbio
),
c( DFC = DFC, # the output variables
TPphoto = TPphoto,
TPbio = TPbio,
I0 = I0,
f0 = f0,
f1 = f1,
f2 = f2,
f3 = f3,
f4 = f4,
Temp = Temp,
Vbassin = Vbassin
)
)
})
} # end of model
#-----------------------#
# Paramètre du modèle: #
#-----------------------#
parameters <- c( Intrant = 3.5e+10 /24, #ng/h
t_res = 408*24, #L/p*h
Vbassin = 1.51e+11, #L
E = 5302, #J mol−1
R = 8.314462, #J mol−1 K−1
Iref = 450, #Watt m-2
q10 = 2, #aucune
Kbio = 0, #d-1
#Kbio = 0.064/24, #d-1
Tref = 298, #K (kelvin)
kadsorp = 0.051/24, #d-1
kphoto1 = 2.6, #h-1, test selon poiger
QY = 0.0375, # mol E-1
sup_ha = 5 #ha
)
#-------------------------#
# Conditions initales: #
#-------------------------#
state <- c( DFC = 11, #
TPphoto = 2,
TPbio = 6
)
#----------------------#
# RUNNING the model: #
#----------------------#
times <-seq(0:8760)
out <-as.data.frame( ode( state, times, Diclofenac, parameters ) )
#------------------------#
# PLOTTING model output: #
#------------------------#
out$DFC[times = 6500]
## [1] 6.757797
plot (times,out$DFC,type="l",lwd=2,main="Diclofenac" ,xlab="Mois", ylab="ng/L", xaxt = "n",
)
axis (1,
at = c(0,744,1416,2160,2880,3624,4344,5088,5832,6552,7296,8016,8760),
labels = c("J", "F", "M", "A", "M","J","J","A","S","O","N","D","J"))
plot (times,out$TPphoto,type="l",lwd=2,main="8-chlorocarbazole-1-acetic acid",xlab="Mois", ylab="ng/L", xaxt = "n", ylim = c(0,4), col="forestgreen")
axis (1,
at = c(0,744,1416,2160,2880,3624,4344,5088,5832,6552,7296,8016,8760),
labels = c("J", "F", "M", "A", "M","J","J","A","S","O","N","D","J"))
legend( "topright",
c("Mon modèle","Poiger et al. (épi)","Poiger et al. (hypo)"),
lwd = 2,
lty = c(1,1,2),
col = c("forestgreen","black","black"),
bty = "n" )
plot (times,out$TPbio,type="l",lwd=2,main="TPbio",xlab="Mois", ylab="ng/L", xaxt = "n")
axis (1,
at = c(0,744,1416,2160,2880,3624,4344,5088,5832,6552,7296,8016,8760),
labels = c("J", "F", "M", "A", "M","J","J","A","S","O","N","D","J"))
plot (times,out$I0,type="l",lwd=2,main="I0 " ,xlab="Mois", ylab="W m-2", xaxt = "n")
axis (1,
at = c(0,744,1416,2160,2880,3624,4344,5088,5832,6552,7296,8016,8760),
labels = c("J", "F", "M", "A", "M","J","J","A","S","O","N","D","J"))
plot (times,out$Temp,type="l",lwd=2,main="Température " ,xlab="Mois", ylab="Kelvin", xaxt = "n")
axis (1,
at = c(0,744,1416,2160,2880,3624,4344,5088,5832,6552,7296,8016,8760),
labels = c("J", "F", "M", "A", "M","J","J","A","S","O","N","D","J"))
abline(h=273)
par( mfrow=c(2,2))
plot (times,out$Vtotal,type="l",lwd=2,main="Vtotal " ,xlab="time, days",ylab="mmolN/m3")
plot (times,out$Vbassin,type="l",lwd=2,main="Vbassin " ,xlab="time, days",ylab="mmolN/m3")
plot (times,out$f0 ,type="l",lwd=2,main="f0 " ,xlab="time, days",ylab="ng/l")
plot (times,out$f1 ,type="l",lwd=2,main="f1 " ,xlab="time, days",ylab="ng/l")
plot (times,out$f2 ,type="l",lwd=2,main="f2 " ,xlab="time, days",ylab="ng/l")
plot (times,out$f3 ,type="l",lwd=2,main="f3 " ,xlab="time, days",ylab="ng/l")
plot (times,out$f4 ,type="l",lwd=2,main="f4 " ,xlab="time, days",ylab="ng/l")
plot (times,out$f5 ,type="l",lwd=2,main="f5 " ,xlab="time, days",y2lab="ng/l")
## Warning in plot.window(...): "y2lab" is not a graphical parameter
## Warning in plot.xy(xy, type, ...): "y2lab" is not a graphical parameter
## Warning in axis(side = side, at = at, labels = labels, ...): "y2lab" is not a
## graphical parameter
## Warning in axis(side = side, at = at, labels = labels, ...): "y2lab" is not a
## graphical parameter
## Warning in box(...): "y2lab" is not a graphical parameter
## Warning in title(...): "y2lab" is not a graphical parameter
plot (times,out$f6 ,type="l",lwd=2,main="f6 " ,xlab="time, days",ylab="ng/l")
#Validation
#Validation
data_valid<-read.csv2("Données/NU_CWEC/Donnees_validation.csv", dec = ".")
#Diclofenac
plot (times,out$DFC,type="l",lwd=2,main="Validation" ,xlab="Mois", ylab="Concentration de diclofenac (ng/L)", xaxt = "n",
ylim = c(0,14), las = 1, col = "forestgreen" )
axis (1,
at = c(0,744,1416,2160,2880,3624,4344,5088,5832,6552,7296,8016,8760),
labels = c("J", "F", "M", "A", "M","J","J","A","S","O","N","D","J"))
points(data_valid$Heure,data_valid$concentration, col = "black", cex = 1.2, pch = 1)
legend( "topright",
c("Mon modèle","Modèle de Poiger et al.","Données de Poiger et al."),
lwd = 2,
lty = c(1,1,NA),
pch = c(NA,NA,1),
col = c("forestgreen","black","black"),
bty = "n" )