Zebra mussel ============ Description ----------- This example presents a first application of the platform provided by the software MeCoSim for the design of a plan for the management of the reservoir of Ribarroja in the area of Ebro River basin, managed by Endesa S.A., regarding the presence of an exotic invasive species: **Zebra Mussel**. Model ----- The corresponding P-Lingua file is the following:: @model def main() { @mu = []'p; @mu(p) += [[]'0]'{k},{k} : 101<= k <= 118; @mu(0,{k}) += []'{m}: 1<=m<=39, 101<= k <= 118; @ms({0},{k+100}) += X{s}*(q{k}) : 2<= s <= 6, 1<= k<= 18; @ms({0},{k+100}) += Q{13}*(q{k}), Q{39}*(q{k}) : 1<= k<= 18; @ms({36+m}) += alpha : 1<=m<=3; @ms({k+100}) += T{0},I1 : 1<=k<=18; /*** ***/ /*re1*/ [I1]'{k+100} --> [I*LE{k,1},Ip]'{k+100} :: 1: 1<=k<=18; /*re2*/ [I2]'{k+100} --> [I*LE{k,2}]'{k+100} :: 1: 1<=k<=18; /*r1*/ I[]'0 --> [I]'0 :: 1; /*r2*/ Ip[]'0 --> [Ip]'0 :: 1; /*** ***/ /*** ***/ /*re3*/ [T{d}]'{k+100} --> [gamma{d+1},T{d+1}]'{k+100} :: p{d+1,k} : 0<= d <=34,1<=k<=18,d<>19 ; /*re4*/ [T{d}]'{k+100} --> [T{d+1}]'{k+100} :: 1-p{d+1,k} : 0<= d <=34, 1<=k<=18,d<>19; /*r3*/ gamma{m}[]'0 --> [gamma{m}]'0 :: 1 : 1<=m<=36; /*r4*/ gamma{m}[]'{m} --> -[gamma]'{m} :: 1 : 1<=m<=36; /*r5*/ -[gamma]'{m} --> []'{m} :: 1 : 1<=m<=36; /*** ***/ /*** ***/ /*r6*/ I -[]'{m} --> [I]'{m} :: 1 : 1<=m<=36; /*r7*/ X{1} -[]'{m} --> [#]'{m} :: 1 : 1<=m<=36; /*r8*/ X{s} -[]'{m} --> VR[X{s}]'{m} :: 1 : 2<=s<=6,1<=m<=36; /*r9*/ Q{d} -[]'{m} --> VR[Q{d+m}]'{m} :: 1 : 20-m<=d<=52-m, 1<=m<=20; /*r10*/ Q{d} -[]'{m} --> VR[Q{d+m-20}]'{m} :: 1 : 20-m+20<=d<=52-m+20, 21<=m<=36; /*r11*/ Q{d} -[]'{m} --> VR[X{1}]'{m} :: 1 : 53-m<=d<=72-m, 1<=m<=20; /*r12*/ Q{d} -[]'{m} --> VR[X{1}]'{m} :: 1 : 53-m+20<=d<=72-m+20, 21<=m<=36; /*** ***/ /*** ***/ /*r13*/ [I]'{m}-->O{m} []'{m}:: 1 : 1<=m<=36; /*r14*/[Q{d}]'{m} --> Qp{d,m},O{m}*(g{1}*(12.15*d*d+117.81*d-3392))[]'{m} :: 0.5 : 20<= d <= 52, 1<= m <= 20; /*r15*/[Q{d}]'{m} --> Qp{d,m}[]'{m} :: 0.5 : 20<= d =< 52, 1<= m <= 20; /*r16*/[Q{d}]'{m} --> Qp{d,m},O{m}*((12.15*d*d+117.81*d-3392)*(1-g{1}))[]'{m} :: 0.5 : 20<= d<= 52, 21<= m <= 36; /*r17*/[Q{d}]'{m} --> Qp{d,m}[]'{m} :: 0.5 : 20<= d <= 52, 21<= m <= 36; /*r18*/ [X{s}]'{m} --> Y{s},O{m}*((1920.5*(52/4+52/2*s)-79065)*g{1}) []'{m} :: 0.5 : 2<=s<=6, 1<=m<=20; /*r19*/ [X{s}]'{m} --> Y{s},O{m}*((1920.5*(52/4+52/2*s)-79065)*(1-g{1})) []'{m} :: 0.5 : 2<=s<=6, 21<=m<=36; /*r20*/ [X{s}]'{m} --> Y{s} []'{m} :: 0.5 : 2<=s<=6, 1<=m<=36; /*r21*/ [X{1}]'{m} --> Y{1},O{m}*((1920.5*(52)-79065)*g{1}) []'{m} :: 0.5 : 1<=m<=20; /*r22*/ [X{1}]'{m} --> Y{1},O{m}*((1920.5*(52)-79065)*(1-g{1})) []'{m} :: 0.5 : 21<=m<=36; /*r23*/ [X{1}]'{m} --> Y{1} []'{m} :: 0.5 : 1<=m<=36; /*r24*/ [Y{s} --> #]'0 :: m{s} : 1<=s<=6; /*r25*/ [Y{s}]'0 -->V{s}[]'0 :: 1-m{s} : 1<=s<=6; /*** ***/ /**** ***/ /*re5*/ [[V{s}]'{k+100} []'{r+100}]'p -->[[]'{k+100} [Vp{s}]'{r+100}]'p:: PA{k,r}: 1<=s<=6, 1<=k<=18, 1 <=r<=18,k<>r; /*re6*/ [[V{s}]'{k+100} ]'p -->[ [Vp{s}]'{k+100}]'p:: PA{k,k}: 1<=s<=6, 1<=k<=18; /*r26*/ Vp{s}[]'0 --> [V{s}]'0 :: 1: 1<=s<=6; /**** ***/ /*** ***/ /*r27*/ [O{m} --> #]'{0} ::g{2}:1<=m<=36; /*** ***/ /*r28*/ [O{m} --> L1{m}]'{0} ::(1-g{2})*(1-mo{1}):1<=m<=20; /*r29*/ [O{m} --> #]'{0} ::(1-g{2})*mo{1}:1<=m<=20; /*r30*/ [O{m} --> L1{m}]'{0} ::(1-g{2})*(1-mo{2}):21<=m<=36; /*r31*/ [O{m} --> #]'{0} ::(1-g{2})*mo{2}:21<=m<=36; /*** ***/ /*r32*/ [L1{m} --> L2{m}]'0:: (1-g{3}): 1<=m<=36; /*r33*/ [L1{m} --> #]'0:: g{3} : 1<=m<=36; /*** ***/ /*r34*/ [L2{m}]'0 --> L3{m+j-1}[]'0:: PI{j,1}: 1<=m<=20, 1<=j<=11; /*r35*/ [L2{m}]'0 --> L3{m+j-1}[]'0:: PI{j,2}: 21<=m<=36, 1<=j<=3; /*** ***/ /* This 39 comes from the (36 +3) weeks lasting the reproduction in the second cycle. */ /*re7*/ [L3{m} --> L{m,0,k,k+7}]'{k+100}:: 0.2*CV{m}: 1<=m<=39, 1<=k<=7; /*re8*/ [L3{m} --> L{m,0,k,k}]'{k+100} :: 1-0.2*CV{m}: 1<=m<=39, 1<=k<=7; /*re9*/ [L3{m} --> L{m,0,k,k-7}]'{k+100}:: 0.001: 1<=m<=39, 8<=k<=14; /*re10*/ [L3{m} --> L{m,0,k,k}]'{k+100} :: 1-0.001: 1<=m<=39, 8<=k<=14; /*re11*/ [L3{m} --> L{m,0,k,k-2}]'{k+100}:: 0.001: 1<=m<=39, 17<=k<=18; /*re12*/ [L3{m} --> L{m,0,k,k}]'{k+100} :: 1-0.001: 1<=m<=39, 17<=k<=18; /*** ***/ /*** ***/ /*** ***/ /*re13*/ [L{m,i,k,s}--> L{m+1,i+1,k,r}]'{k+100} :: PR{m,s,r} : 1<=m<=42, 0<=i<=3, 1<=k<=18,1<=s<=7,1<=r<=7; /*re14*/ [L{m,i,k,s}--> #]'{k+100} :: PR{m,s,8} : 1<=m<=42, 0<=i<=3, 1<=k<=18,1<=s<=7; /*** ***/ /*re15*/ [L{m,i,k,s}--> L{m+1,i+1,k,r}]'{k+100} :: PR{m,s,r} : 1<=m<=42, 0<=i<=3, 1<=k<=18,8<=s<=14, 8<=r<=14; /*re16*/ [L{m,i,k,s}--> #]'{k+100} :: PR{m,s,15} : 1<=m<=42, 0<=i<=3, 1<=k<=18,8<=s<=14; /*** ***/ /*re17*/ [L{m,i,15,15}--> L{m+1,i+1,15,15}]'{115} :: 0.5 : 1<=m<=42, 0<=i<=3; /*re18*/ [L{m,i,15,15}--> L{m+1,i+1,15,1}]'{115} :: 0.5 : 1<=m<=42, 0<=i<=3; /*re19*/ [L{m,i,17,17}--> L{m+1,i+1,17,17}]'{117} :: 0.5 : 1<=m<=42, 0<=i<=3; /*re20*/ [L{m,i,17,17}--> L{m+1,i+1,17,8}]'{117} :: 0.5 : 1<=m<=42, 0<=i<=3; /*re21*/ [L{m,i,17,15}--> L{m+1,i+1,17,15}]'{117} :: 0.5 : 1<=m<=42, 0<=i<=3; /*re22*/ [L{m,i,17,15}--> L{m+1,i+1,17,1}]'{117} :: 0.5 : 1<=m<=42, 0<=i<=3; /*re23*/ [L{m,i,16,16}--> L{m+1,i+1,16,16}]'{116} :: 0.5 : 1<=m<=42, 0<=i<=3; /*re24*/ [L{m,i,16,16}--> L{m+1,i+1,16,6}]'{116} :: 0.5 : 1<=m<=42, 0<=i<=3; /*re25*/ [L{m,i,18,18}--> L{m+1,i+1,18,18}]'{118} :: 0.5 : 1<=m<=42, 0<=i<=3; /*re26*/ [L{m,i,18,18}--> L{m+1,i+1,18,13}]'{118} :: 0.5 : 1<=m<=42, 0<=i<=3; /*re27*/ [L{m,i,18,16}--> L{m+1,i+1,18,16}]'{118} :: 0.5 : 1<=m<=42, 0<=i<=3; /*re28*/ [L{m,i,18,16}--> L{m+1,i+1,18,6}]'{118} :: 0.5 : 1<=m<=42, 0<=i<=3; /*re29*/ [[L{m,4,k,r}]'{k+100}[]'{r+100}]'p-->[[]'{k+100}[Lp{m}]'{r+100}]'p::1: 5<=m<=43, 1<=k<=18, 1<=r<=18, r<>k; /*re30*/ [L{m,4,k,k}-->Lp{m}]'{k+100}::1: 5<=m<=43, 1<=k<=18; /*r36*/ Lp{m} []'0-->[Qp{0,m-1}]'0::1: 5<=m<=43; /*** ***/ /*** ***/ /*re31*/ [T{19}]'{k+100} --> [gamma{20},ro{1},ro{0}]'{k+100} :: p{20,k} : 1<=k<=18; /*re32*/ [T{19}]'{k+100} --> [delta{20},ro{1},ro{0}]'{k+100} :: 1-p{20,k} : 1<=k<=18; /*re33*/ [T{35}]'{k+100} --> [delta{36},ro{2},omega{0}]'{k+100} :: 1 : 1<=k<=18; /*** ***/ /*** ***/ /*r37*/ delta{20}[]'0-->[delta{20}]'0::1; /*r38*/ delta{20}[]'20-->+[delta]'20::1; /*r39*/ +[delta]'20-->[]'20::1; /*r40*/ X{s}+[]'20-->VR[Xp{s}]'20::1: 2<=s<=6; /*r41*/ X{1}+[]'20-->[#]'20::1; /*r42*/ Q{d}+[]'20-->VR[Qpp{d+20}]'20::1: 1<=d<=32; /*r43*/ Q{d}+[]'20-->VR[Xp{1}]'20::1: 33<=d<=52; /*r44*/ [Xp{s}]'20--> Y{s}[]'20::1: 1<=s<=6; /*r45*/ [Qpp{d}]'20--> Qp{d,20}[]'20::1: 20<=d<=52; /*** ***/ /*r46*/ delta{36}[]'0-->[delta{36}]'0::1; /*r47*/ delta{36}[]'36-->+[delta]'36::1; /*r48*/ +[delta]'36-->[]'36::1; /*r49*/ X{s}+[]'36-->VR[Xp{s}]'36::1: 2<=s<=6; /*r50*/ X{1}+[]'36-->[#]'36::1; /*r51*/ Q{d}+[]'36-->[Qpp{d+16}]'36::1: 1<=d<=36; /*r52*/ Q{d}+[]'36-->VR[Xp{1}]'36::1: 37<=d<=52; /*r53*/ [Xp{s}]'36--> Y{s}[]'36::1: 1<=s<=6; /*r54*/ [Qpp{d}]'36--> Qp{d,36}[]'36::1: 16<=d<=52; /*** ***/ /* Rules related with ro and omega */ /*r55*/ ro{0}[]'0-->[ro{0}]'0::1; /*r56*/ ro{0}[]'37-->[ro{0}]'37::1; /*r57*/ [ro{i}-->ro{i+1}]'37::1: 0<=i<=10; /*r58*/ [ro{11}]'37-->-[ro]'37::1; /*r59*/ omega{0}[]'0-->[omega{0}]'0::1; /*r60*/ omega{0}[]'38-->[omega{0}]'38::1; /*r61*/ [omega{i}-->omega{i+1}]'38::1: 0<=i<=14; /*r62*/ [omega{15}]'38-->-[ro]'38::1; /*** ***/ /*re34*/ [ro{i}]'{j+100} --> [A{i}*Fi{j},AR*2500]'{j+100}::1: 1<=i<=2,1<=j<=18; /*r63*/ A{i}[]'0 --> [A{i}]'0::1: 1<=i<=2; /*r64*/ A{i}[]'{36+i} --> [A]'{36+i}::1: 1<=i<=2 ; /*r65*/ AR[]'0 --> [AR{1}]'0::1; /*r66*/ [AR{i}]'0 --> [AR{i+1}]'0::1:1<=i<=4; /*r67*/ AR{5}[]'39 --> +[AR]'39::1; /*r68*/ +[alpha]'39 --> +[alpha{1},DP{0}]'39::1; /*r69*/ VR+[]'39 --> +[VR]'39::1; /*r70*/ +[alpha{1}]'39 --> -[alpha{1}]'39::1; /*r71*/ +[AR, VR]'39 --> -[]'39::1; /*r72*/ -[alpha{i} --> alpha{i+1}]'39::1: 1<=i<=6; /*r73*/ -[AR*125 --> DP{1}]'39::1; /*r74*/ -[DP{i},DP{k} --> DP{i+k}]'39::1:0<=i<=20,1<=k<=9; /*r75*/ -[alpha{7}]'39 --> [beta{1}]'39::1; /*r76*/ [AR]'39 --> []'39::1; /*r77*/ [VR]'39 --> []'39::1; /*r78*/ [DP{i}]'39 --> DP{i}*(1250*250000)[]'39::1: 0<=i<=20; /*r79*/ [beta{i} --> beta{i+1}]'39::1: 1<=i<=7; /*r80*/ [beta{8}]'39 --> -[beta{9}]'39::1; /*r81*/ -[beta{9}]'39 --> [alpha]'39::1; /*** ***/ /*r82*/ -[ro]'{k}-->[lambda]'{k}::1: 37<=k<=38; /*r83*/ -[alpha]'{k} -->[beta{0}]'{k}::1: 37<=k<=38; /*r84*/ V{s} -[]'{k} --> [V{s}]'{k}::1: 1<=s<=6, 37<=k<=38; /*r85*/ Qp{d,m} -[]'37 -->[Q{20-m+d}]'37::1: -20+m<=d<=52-20+m,1<=m<=20; /*r86*/ Qp{d,m} -[]'37 -->[V{1}]'37::1: 53-20+m<=d<=71-20+m,1<=m<=20; /*r87*/ Qp{d,m}-[]'38 -->[Q{52-m+d}]'38::1: 0<=d<=m, 21<=m<=40; /*r88*/ Qp{d,m} -[]'38 -->[V{1}]'38::1: 1+m<=d<=83-52+m, 21<=m<=40; /*** ***/ /*r89*/ [V{s}, A]'{k} -->X{s+1} +[]'{k}:: 0.5*0.2*(s+1) : 2<=s<=5,37<=k<=38; /*r90*/ [V{s}, A]'{k} --> +[V{s},A]'{k}:: 1-0.5*0.2*(s+1) : 2<=s<=5,37<=k<=38; /*r91*/ +[A]'{k}--> [A{0}]'{k}::1: 37<=k<=38; /*r92*/ +[A{s}]'{k} -->[A{s+1}]'{k}::1:0<=s<=4,37<=k<=38; /*r93*/ [beta{0}]'{k} -->+[beta{1}]'{k}::1: 37<=k<=38; /*r94*/ +[beta{1}]'{k} -->[beta{1}]'{k}::1: 37<=k<=38; /*r95*/ [beta{i}]'{k} -->+[alpha{i+1}]'{k}::1: 1<=i<=6,37<=k<=38; /*r96*/ +[alpha{i}]'{k} -->[beta{i}]'{k}::1: 2<=i<=6,37<=k<=38; /*r97*/ +[alpha{7}]'{k} -->-[]'{k}::1:37<=k<=38; /*r98*/ [Q{d}, A{0}]'37 -->QQ{d,37}+[]'37 :: 1:1<=d<=52; /*r98*/ [Q{d}, A{0}]'38 -->QQ{d,38}+[]'38 :: 1: 1<=d<= 52; /*r99*/ [V{1},A{1}]'{k}--> XX{2,k} +[]'{k}::1:37<=k<=38; /*r100*/ [V{s},A{s}]'{k}--> X{s+1} +[]'{k}::1:2<=s<=5,37<=k<=38; /*r101*/ QQ{d,k}, DP{i} +[]'{k} -->Q{d},X{1}[]'{k} :: 0.1*i-1: 1<=d<=52, 10<=i<=20,37<=k<=38; /*r102*/ QQ{d,k}, DP{i} +[]'{k}--> [A{1}]'{k} :: 1-(0.1*i-1): 1<=d<=52,10<=i<=20,37<=k<=38; /*r103*/ XX{2,k}, DP{i} +[]'{k}-->X{2}[]'{k} :: 0.1*i-1: 10<=i<=20,37<=k<=38; /*r104*/ XX{2,k}, DP{i} +[]'{k} --> [A{2}]'{k} :: 1-(0.1*i-1): 10<=i<=20,37<=k<=38; /*r105*/ QQ{d,k}, DP{i} +[]'{k}--> [A{1}]'{k} :: 1: 1<=d<=52, 0<=i<=9,37<=k<=38; /*r106*/ XX{2,k}, DP{i} +[]'{k} --> [A{2}]'{k} :: 1: 0<=i<=9,37<=k<=38; /*r107*/ -[lambda]'37 -->T{20},Tp{20}[alpha]'37::1; /*r108*/ -[lambda]'38 -->T{0}[alpha]'38::1; /*r109*/ [Tp{20},Ip]'0--> I2[]'0::1; /*r110*/ [T{20}]'0-->T{20}[]'0::1; /*r111*/ [T{0}]'0-->T{0}[]'0::1; /*r112*/ Tp{20}+[]'36--> []'36::1; /***********Update**********/ /*r113*/ -[V{s}]'{k} -->D[]'{k}::1: 2<=s<=6,37<=k<=38; /*r114*/ -[Q{d}]'{k} -->D []'{k}::1:1<=d<=87,37<=k<=38; /*r115*/ -[A{5}]'{k}-->[]'{k}::1:37<=k<=38; /*r116*/ DP{i}-[]'39-->[]'39::1: 0<=i<=20; } Files ----- .. container:: boldlink * `Custom application `_. * `Model file `_. * `Scenario file `_. Results ------- The custom application config file defines an app ready to be loaded in MeCoSim. Then, we can run it and set the model given (zebra_mussel.pli). Then the desired scenario data can finally be entered for each virtual experiment we are interested in, as the specific one also provided above (zebra_mussel.ec2). Once the scenario has been introduced by the user, the simulation can run for the number of years set in MeCoSim custom app window. The system evolves then from the initial population given as part of the scenario, until the end of the simulation, when the output results are shown in the form of tables and charts. .. .. image:: images/ZebraMusselOutputTable.png :align: center :width: 50% .. .. image:: images/ZebraMusselOutputChart.png :align: center :width: 50% .. container:: custom .. image:: images/ZebraMusselOutputTable.png :width: 40% .. image:: images/ZebraMusselOutputChart.png :width: 45% References ---------- .. container:: boldlink * `Application of a computational model for complex fluvial ecosystems: The population dynamics of zebra mussel Dreissena polymorpha as a case study `_, Ecological Complexity (detailed `here `_).