Hvad enten vi drikker vand fra hanen eller fra købeflasker, vil vi aldrig få helt rent vand; det vil altid indeholde et mylder af forskellige stoffer, og flere og flere af dem kommer fra fx lægemidler og pesticider.
- I dag er det sådan, at vi drikker pesticidrester, når vi drikker vand. De er under grænseværdierne, men de er der. Vi finder også stadig flere og flere medicinrester, og vi kan formentlig i snarlig fremtid også finde medicinrester i alt det vand, vi drikker, siger SDU-professor Frants Roager Lauritsen, der er ekspert i analyse og dannelse af de biprodukter, som opstår i forbindelse med rensning af vand.
Det gælder både det danske postevand, der pumpes op fra undergrunden og det rensede overfladevand, som næsten alle andre lande forsyner sig med.
Ned i den store suppe
Det store spørgsmål er så, om det gør noget – når bare stofferne holder sig under grænseværdierne?
- Det er der ingen, der ved. Men vi ved, at de aktive stoffer i fx pesticid- og medicinrester kan interagere med hinanden, og de kan ved rensning blive nedbrudt til andre kemiske forbindelser, som kan være mere bekymrende end det oprindelige lægemiddel eller pesticid, siger Frants Roager Lauritsen.
Kombinationsmulighederne for nye forbindelser og biprodukter, der kan optræde i drikkevandet, er altså tæt på uendeligt mange.
- System.Web.HttpUnhandledException (0x80004005): An unhandled exception occurred. ---> System.Web.HttpCompileException (0x80004005): c:\home\site\wwwroot\Views\Article\ArticleQuote.cshtml(17): error CS1061: 'Cabana.SDU.Feature.Article.ArticleQuote' does not contain a definition for 'Text' and no extension method 'Text' accepting a first argument of type 'Cabana.SDU.Feature.Article.ArticleQuote' could be found (are you missing a using directive or an assembly reference?)
- at System.Web.Compilation.BuildManager.PostProcessFoundBuildResult(BuildResult result, Boolean keyFromVPP, VirtualPath virtualPath)
- at System.Web.Compilation.BuildManager.GetBuildResultFromCacheInternal(String cacheKey, Boolean keyFromVPP, VirtualPath virtualPath, Int64 hashCode, Boolean ensureIsUpToDate)
- at System.Web.Compilation.BuildManager.GetVPathBuildResultFromCacheInternal(VirtualPath virtualPath, Boolean ensureIsUpToDate)
- at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate)
- at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate)
- at System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean throwIfNotFound)
- at System.Web.Compilation.BuildManager.GetCompiledType(VirtualPath virtualPath)
- at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer)
- at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
- at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult)
- at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult)
- at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult)
- at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult)
- at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
- at Sitecore.Mvc.Pipelines.MvcEvents.Exception.ShowAspNetErrorMessage.ShowErrorMessage(ExceptionContext exceptionContext, ExceptionArgs args)
- at Sitecore.Mvc.Pipelines.MvcEvents.Exception.ShowAspNetErrorMessage.Process(ExceptionArgs args)
- at (Object , Object )
- at Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args)
- at Sitecore.Pipelines.DefaultCorePipelineManager.Run(String pipelineName, PipelineArgs args, String pipelineDomain, Boolean failIfNotExists)
- at Sitecore.Pipelines.DefaultCorePipelineManager.Run(String pipelineName, PipelineArgs args, String pipelineDomain)
- at Sitecore.Mvc.Pipelines.PipelineService.RunPipeline[TArgs](String pipelineName, TArgs args)
- at Sitecore.Mvc.Filters.PipelineBasedRequestFilter.OnException(ExceptionContext exceptionContext)
- at System.Web.Mvc.ControllerActionInvoker.InvokeExceptionFilters(ControllerContext controllerContext, IList`1 filters, Exception exception)
- at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
- at System.Web.Mvc.Controller.ExecuteCore()
- at System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext)
- at Sitecore.Mvc.Controllers.ControllerRunner.ExecuteController(Controller controller)
- at Sitecore.Mvc.Controllers.ControllerRunner.Execute(TextWriter writer)
- at Sitecore.Mvc.Pipelines.Response.RenderRendering.ExecuteRenderer.Render(Renderer renderer, TextWriter writer, RenderRenderingArgs args)
- at Sitecore.Mvc.Pipelines.Response.RenderRendering.ExecuteRenderer.Process(RenderRenderingArgs args)
- at Helpfulcore.RenderingExceptions.Pipelines.RenderRendering.ExecuteRenderer.Process(RenderRenderingArgs args)
På den baggrund mener Frants Roager Lauritsen, at det er nødvendigt at effektivisere de metoder, vi i dag bruger til at karakterisere et vandrensningsanlægs effektivitet.
- Der sker så meget og så hurtigt med vores drikkevand, at vi har brug for at kunne få hurtige svar på, om vandet er toksisk - og om vores rensningsmetoder virker, siger han og fortsætter:
- Med den traditionelle tilgang, hvor en vandforsyning kvalitetssikrer drikkevandet ud fra analyser og screeninger for kendte forurenere, kan der let gå flere år, før tilstedeværelsen af et nyt forurenende stof opdages. Herefter kan der igen gå år, før det nye stofs toksikologiske effekt og rensningsanlæggets evne til at fjerne stoffet er klarlagt.
Vi skal se på helheder og ikke enkeltstoffer
Der er altså - understreger Frants Roager Lauritsen - brug for nye tilgange til kvalitetssikring af forbrugernes vand:
- Vi skal over til at bruge nogle metoder, som hurtigt og bredt kan vurdere, om en given drikkevandsressource – det kan være en sø - udgør en toksikologisk fare, siger han og uddyber:
- Hvis det er tilfældet, skal vi kunne afgøre, om en forhåndenværende renseteknologi kan fjerne gift-faren, og vi skal også kunne afgøre, om rensningen skaber uønskede biprodukter; om ét farligt stof bare bliver transformeret til nogle andre. siger han
Selv arbejder han på at udvikle en bærbar reaktor, der kan monitorere kemiske og biologiske processer, mens de sker. Reaktoren kan i løbet af kort tid fortælle, om det kan lykkes at omdanne de skadelige stoffer til uskadeligt vand og kuldioxid, når vandet desinficeres, eller om desinficeringen i stedet fører til dannelsen af skadelige biprodukter.
- System.Web.HttpUnhandledException (0x80004005): An unhandled exception occurred. ---> System.Web.HttpCompileException (0x80004005): c:\home\site\wwwroot\Views\Article\ArticleQuote.cshtml(17): error CS1061: 'Cabana.SDU.Feature.Article.ArticleQuote' does not contain a definition for 'Text' and no extension method 'Text' accepting a first argument of type 'Cabana.SDU.Feature.Article.ArticleQuote' could be found (are you missing a using directive or an assembly reference?)
- at System.Web.Compilation.BuildManager.PostProcessFoundBuildResult(BuildResult result, Boolean keyFromVPP, VirtualPath virtualPath)
- at System.Web.Compilation.BuildManager.GetBuildResultFromCacheInternal(String cacheKey, Boolean keyFromVPP, VirtualPath virtualPath, Int64 hashCode, Boolean ensureIsUpToDate)
- at System.Web.Compilation.BuildManager.GetVPathBuildResultFromCacheInternal(VirtualPath virtualPath, Boolean ensureIsUpToDate)
- at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate)
- at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate)
- at System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean throwIfNotFound)
- at System.Web.Compilation.BuildManager.GetCompiledType(VirtualPath virtualPath)
- at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer)
- at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
- at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult)
- at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult)
- at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult)
- at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult)
- at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
- at Sitecore.Mvc.Pipelines.MvcEvents.Exception.ShowAspNetErrorMessage.ShowErrorMessage(ExceptionContext exceptionContext, ExceptionArgs args)
- at Sitecore.Mvc.Pipelines.MvcEvents.Exception.ShowAspNetErrorMessage.Process(ExceptionArgs args)
- at (Object , Object )
- at Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args)
- at Sitecore.Pipelines.DefaultCorePipelineManager.Run(String pipelineName, PipelineArgs args, String pipelineDomain, Boolean failIfNotExists)
- at Sitecore.Pipelines.DefaultCorePipelineManager.Run(String pipelineName, PipelineArgs args, String pipelineDomain)
- at Sitecore.Mvc.Pipelines.PipelineService.RunPipeline[TArgs](String pipelineName, TArgs args)
- at Sitecore.Mvc.Filters.PipelineBasedRequestFilter.OnException(ExceptionContext exceptionContext)
- at System.Web.Mvc.ControllerActionInvoker.InvokeExceptionFilters(ControllerContext controllerContext, IList`1 filters, Exception exception)
- at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
- at System.Web.Mvc.Controller.ExecuteCore()
- at System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext)
- at Sitecore.Mvc.Controllers.ControllerRunner.ExecuteController(Controller controller)
- at Sitecore.Mvc.Controllers.ControllerRunner.Execute(TextWriter writer)
- at Sitecore.Mvc.Pipelines.Response.RenderRendering.ExecuteRenderer.Render(Renderer renderer, TextWriter writer, RenderRenderingArgs args)
- at Sitecore.Mvc.Pipelines.Response.RenderRendering.ExecuteRenderer.Process(RenderRenderingArgs args)
- at Helpfulcore.RenderingExceptions.Pipelines.RenderRendering.ExecuteRenderer.Process(RenderRenderingArgs args)
Med en sådan reaktor kan man både overvåge et vandrensningsanlæg og rent forskningsmæssigt bruge reaktoren til at teste og optimere helt nye, avancerede rensningsteknologier. Mens Frants Roager Lauritsen arbejder på at udvikle reaktoren til kemisk karakterisering af vandrensningsprocesser, arbejder andre forskere på at udvikle metoder til bredspektret karakterisering af vands toksikologiske fare.
Kunstig intelligens skal holde øje
Til sammen kan de to metoder levere tilstrækkelig information til kvalitetssikring af drikkevand, også når der opstår nye forureningsfarer. Og hvis man kobler kunstig intelligens og machine learning på de store mængder data, som indsamles ved overvågning, kan fremtiden komme til at byde på effektiv overvågning af vores drikkevand.
- En computer kan så hurtigt og præcist fortælle os, om vandet er sikkert at drikke eller ej – og hvad der skal til for at rense det, siger Frants Roager Lauritsen.
Hvor kommer medicinresterne fra?
Langt størstedelen bliver skyllet ud med urinen i toilettet af mennesker, der tager medicin. Iflg. en rapport fra DANVA er der i Danmark især tale om medicinrester fra antibiotika, antidepressiva, hormonstoffer, antiinflammatoriske midler og medicin mod hjerte/kar-sygdomme.
Læs mere om medicinrester i spildevand på danva.dk.