Het model hier is het 'viskweekvijver'-model van de Universiteit Wageningen. Hier hebben we - om te beginnen - als casus de 'algenvijver'. Oorspronkelijk komt dit wiskundig model van wetenschappers uit de Sovjet Unie [Svirezhev et al., 1984] [P. van Schaik Zillesen, proefschrift] [Hartsuijker, Hondebrink en Labordus, 'Een vijver in de computer', Stichting Leerplanontwikkeling, 1989].
Met deze simulatie kunnen leerlingen van middelbare scholen - thuis of tijdens speciale biologielessen - leren hoe mineralen uitwerken in een 'algenvijver'. Dus zonder vissen.
In het water kunnen verschillende stoffen opgelost zijn: zuurstof (O), fosfaat (P) en nitraat (N). Dat zijn meststoffen. Algen en wieren zijn hele kleine groene plantjes, waterplantjes (phytoplankton) (F). Dan heb je nog dierlijk afval, Detritus (D): Schimmels en bacterien. Algen groeien door licht. Overdag. En maken uit water en kooldioxide hun eigen voedsel. Daarbij komt zuurstof vrij. Dat heet photosynthese. 's Nachts verbruiken algen hun voedsel en nemen ze zuurstof op. Afval wordt gebruikt voor micro-organismen, zoals bacterien en schimmels. Je zult zien dat begin april de temperatuur stijgt. Bodemdieren eten graag watervlooien en watervlooien eten graag algen. De hoeveelheid bodemdieren neemt dan af. Maar als de bodemdieren dan weg zijn nemen de watervlooien toe en de hoeveelheid algen ook weer af. Want de watervlooien eten algen. Als de bodemdieren later weer toenemen worden de rollen weer omgekeerd. Zie je dat?
Ook kun je gewoon doorgaan met de ingestelde waardes. De vier interventies zijn: |
Als je xxx toevoeg nemen de algen toe. Als je xxx toevoeg nememt xxx toe. Als je xxx toevoeg neemt xx toe.
Laat de tijd eens lopen en dan zie je in de zomer dat er algengroei is. Maar die neemt ook weer af. Noteer de belangrijke waardes. Herstart de algenvijver dan opnieuw.
In begin april kun je bijvoorbeeld twee mineralen toevoegen: Geef Nitraat (NU) bijvoorbeeld 1.0 kg/dag en Fosfaat (PU) 0.5 kg/dag bijvoorbeeld gedurende 3 maanden. Je ziet de uitwerking van de interventie in de grafieken zomer. Er is wel sprake van naar de bodem zakkend afval. Het fosfaat slaat neer en er ontstaat een zuurstofarm milieu. De algengroei neemt wel vanzelf af. Hoe kan dat?
Het rode blokje geeft de algengroei in de vijver aan. Het blauwe blokje het dag-nacht-ritme en dientengevolge de instraling (L). Het groene blokje is een indicatie voor de bodemdieren en het gele blokje detritus (het afval)
TIP 1: Je moet vooral kijken naar de periode april, mei, juni en juli. Want in de koude winter en lente maanden gebeurt er niet zo veel. Let vooral op Nitraat, Zuurstof, Fosfaat en de algengroei. Hun concentraties gaan omhoog. De zuurstof concentratie neemt af. Waardoor de algengroei in de zomer toeneemt. De vervuiling (D) ook. TIP 2: Kijk eens wat er gebeurt als je Nitraat (NU=3), Fosfaat (PU=1) en Zuurstof (OU=1) toevoegd. TIP 3: Kijk eens, als je in deze algenvijver, zonder vissen, wat er gebeurt als je geen nitraat en geen forsfaat toevoegd, maar alleen visvoer (AU=1) in de vijver gooit. Het aantal bodembieren neemt heel erg toe (groen) en de zuurstof en de hoeveelheid watervlooien gaan naar beneden. P en N blijven constant. Snap je dit?
Aan de simulatie en de animatie wordt nog verder gewerkt. Het geheel moet een meer functionele vorm krijgen. De uitleg en de instructieteksten ook. De instructie en de opdrachten (die nog niet overeen stemmen met deze applicatie) kunnen wel (als voorbeeld) door jou al vast een beetje geraadpleegd worden.
Tijd (t): (0 --> 365 dagen). (De tijdschaal zelf loop tot 400 dagen.)
Output:
Interventies:
14. PU mbt. P: (fixed)
16. NU mbt. N: (fixed)
18. OU mbt. O: (fixed)
20. AU mbt. A: (fixed)
Visvoer:
19. A: (voorlopig in deze casus heel weinig!)
De externe invloeden: 77. L Instraling: 75. REA: 76. TEMP:
Flows (Q van naar): |
Watervlooien (Z): 30. F mbt. Z: 31. D mbt. Z: 32. O mbt. Z: --> Z Watervlooien (op t=0: 0 of 10?)
Bodemdieren (B): Karpers: Zilverkarpers: |
REFERENTIES:
NAWOORD: De afgelopen jaren werd java en mijn java-applets als virussen beschouwd. Ik kon er niet meer met goed fatsoen mensen mee laten werken. In maart 2025 had ik ook nog eens een paar slechte (politieke) weken. De geo-politiek stond mij totaal niet aan. Om mij af te reageren ben ik een paar uur per dag aan het programmeren geslagen. Nu met HTML5 en alleen met JavaScript, zonder Java en zonder mijn oude library's als SimLib en WebLib. (Zie elders.)
Ik ben een groot voorstander van evolutionair ontwikkelen van systemen [R.J.H. Tolido, 'Het evolutionair ontwikkelen van informatiesystemen', CAP Volmac, Academic Services, 1996]]. Ook dit keer heb ik met deze stap voor stap werkmethode (en daardoor voortschrijdend inzicht) veel met JavaScript kunnen ontdekken. Ik ging van versie 0.0x, het eerste concept, naar versie 1.0 en 2.0. En op een gegeven moment besluit je dan tot publicatie. Maar dan hebben een groot aantal mensen, collega's, studenten, vrienden en familie (als testpersonen) er dan al kennis mee gemaakt. Dat is de leukste manier van werken. Ik ben hen vanaf deze plaats heel dankbaar .
Met dank speciaal aan Piet v. Schaick Zillesen, bioloog (ISM/TO/UT) & Jan de Goeijen (ICT-specialist). Model: Universiteit Wageningen. Studenten: Saskia Meulman, JS, AH, CW en AS. Eerste internet versie rond 2002: Daarna geupdated: 2004, 2010, 2019 en 2020. Weer latere versies: Start 27 maart 2025. Afgerond: 30 april 2025.
In de zomer ga ik verder met deze systeemvariant om de vloeistoffen huishouding in het menselijk lichaam te simuleren en het cardiovasculaire systeem van Coleman (University of Mississippi), maar ook met het Japanse model 'FLUIDS' plus het grote Amerikaanse model van Guyton ('HUMAN') over de bloeddrukregulatie. Mijn oude versies gebruikten java. De nieuwe versie dus alleen JavaScript en HTML5.
Rik Min, Enschede 30 april 2025.
All starting values KPF = 0.1; KNF = 0.1; KFZ = 15.0; KDZ = 60.0; KFB = 15.0; KZB = 1.0; KDB = 60.0; KZC = 1.0; KBC = 5.0; KAC = 0.2; KFS = 20.0; KDS = 60.0; MUFMAX = 4.5; MUFZMAX = 1.4; MUDZMAX = 0.5; MUFBMAX = 0.2; MUZBMAX = 0.4; MUDBMAX = 0.2; MUZCMAX = 0.02; MUBCMAX = 0.06; MUACMAX = 0.03; MUFSMAX = 0.1; MUDSMAX = 0.07; hier ontbrak bij ergens MUxxxMAX, MBF = 0.3; MBZ = 0.3; MBB = 0.3; MBC = 0.3; MBS = 0.3; MBBC = 0.4; MBBS = 0.4; RCMAX = 13.0; RSMAX = 10.0; MBOF = 0.001; MBOZ = 0.001; MBOB = 0.001; MBOC = 0.001; MBOS = 0.001; MF = 0.025; MZ = 0.005; MB = 0.05; RESPF = 0.001; RESPZ = 0.01; RESPB = 0.01; RESPC = 0.01; RESPS = 0.01; UDP = 0.00004; UDN = 0.002; PHOT = 1.0; ALPHA = 0.2; RE = 0.4; OKT = 0.085; SED = 0.05; SEDP = 0.1; LOPT = 3000.0; KW = 0.2; KF = 0.05; KD = 0.8; KPD = 0.5; HK = 0.1; BKR = 20.0; ZCR = 5.0; FCR = 30.0; MB2 = 10.0; MZ2 = 3.0; MF2 = 15.0; LABDAB = 1.0; LABDAZ = 1.0; LABDAF = 1.0; KA = 2.0; MK = 5.0; COP = 2.0; MG = 1.0; COD = 2.0; HLP1 = MBBC / RCMAX; HLP2 = MBBS / RSMAX; HLP3 = XKWAD (KPF); HLP4 = XKWAD (KNF); HLP5 = XKWAD (KFZ); HLP6 = XKWAD (KFB); HLP7 = XKWAD (KFS); HLP8 = XKWAD (KDZ); HLP9 = XKWAD (KZB); HLP10 = XKWAD (KBC); HLP11 = W(MUBCMAX, HLP10, BKR); HLP12 = XKWAD (KZC); HLP13 = XKWAD (KDB); HLP14 = XKWAD (KAC); HLP15 = XKWAD (KDS); Topt[1]=24.0; Topt[2]=24.0; Topt[3]=24.0; Topt[4]=26.0; Topt[5]=26.0; Topt[6]=26.0; Q1[1]=15.0;//=24-9 Q1[2]=15.0; Q1[3]=15.0; Q1[4]=14.0; Q1[5]=12.5; Q1[6]=11.0; Q2[1]=10.0;//=34-24 Q2[2]=10.0; Q2[3]=10.0; Q2[4]=11.0; Q2[5]=11.0; Q2[6]=11.0; M[1]=3.0;//dummy M[2]=3.0;//zuurstofhalfwaarde voor onderhoud Z M[3]=3.0;//dummy M[4]=3.0;//zuurstof ... C M[5]=3.0;//zuurstof ... S M[6]=3.0;//zuurstof ... H LABDA[1]=1.0;//dummy LABDA[2]=1.0;//helling zuurstofcurve Z LABDA[3]=1.0;//dummy LABDA[4]=1.0;//helling zuurstofcurve C LABDA[5]=1.0;//helling zuurstofcurve S LABDA[6]=1.0;//helling zuurstofcurve H F = 20.0; Z = 0.0; B = 0.0; C = 0.0; S = 0.0; P = 0.03; N = 0.15; O = 9.8; A = 0.0; D = 7.2; L = 0.0; F0 = 2.0; L_JAARMAX = 3000.0; TEMP_JAARMAX = 20.0; REA = 20.0; // ?? TEMP = 20.0 // ??; NU = 0.0; PU = 0.0; OU = 0.0; AU = 0.0; DPU = 0.01; DNU = 0.03; PTOEG = 0.0; NTOEG = 0.0; OTOEG = 0.0; VTOEG = 0.0; Tmin = 0.0; T = 0.0; dt = 0.04; Tmax = 30.1;
Blijkbaar is dit alleeen de output voor de vijver zonder vissen:
Graph1.newValue(N);
Graph2.newValue(TEMP);
Graph3.newValue(QDP);
Graph4.newValue(E1(TEMP));
Graph5.newValue(O);
Graph6.newValue(F);
Graph7.newValue(P);
Graph8.newValue(E2(O));
until (T < Tmax);