Demonstration of Water Deistribution Network Model Class WNmodel

This script demosntrates the use of WNmodel class for modeling and model management of Water Distribution Networks (WN). The demonstration is based on Barcelona water network.

WNmodel modle is child class of general LSmodel class.

Contents

Load water distribution network model from file

Water network is defined by two files [filename].net and [filename].mat, where '.net' defines network structure and '.net' defines variables limits, prices, etc.

Structure definition file is a simple text file describing individual tanks and their interconnections by specifying signal names and directions.

The first line of each tank definition block specifies tank number and its name:

 Tank##,<tank name>

or it can specify node with it number

 Node##

Following lines are same for tanks and nodes:

 d,<demand name>
 s,<source name>
 +,<outlet pump/valve name>,<destination tank name>
 -,<inlet pump/valve name>,<source tank name>

Tank/node definition blocks can be separated by empty line(s). Empty lines and Matlab type comments are ignored.

Variable definition file is standard Matlab MAT file with struct for every signal defining limits by fields

.min  ... min value
.max  ... max value
.dmin ... min slope value
.dmax ... max slope value
.smin ... soft limit min value
.smax ... soft limit max value
.type ... signal type ('MV','MD','UD','MO','MV','X')

Example (part of definition file):

Tank01,d450BEG
d,c450BEG
-,iBegues4,d369BEG
Tank02,d369BEG
d,c369BEG
+,iBegues4,d450BEG
-,iBegues3,d255BEG
Node1
s,AportA
d,c82PAL
+,vPalleja70,Node2
+,vPapiolATLL,d110PAP
+,iPapiol2AGBAR,d110PAP
+,vFontSanta,d54REL
Node2
d,c70PAL
+,iPalleja4,d125PAL
-,vPalleja70,Node1
<End of example>
mod = WNmodel('BCN_network')
No data for signal v70FLL70LLO
No data for signal v70LLO70FLL
Water network model (80 subsystem(s), 0 summator(s)):
  --- Tanks & Nodes ----------------
    M01: Tank "d450BEG"   , 2 inputs
    M02: Tank "d369BEG"   , 3 inputs
    M03: Tank "d175LOR"   , 2 inputs
    M04: Tank "d185VIL"   , 2 inputs
    M05: Tank "d190SCL"   , 2 inputs
    M06: Tank "d255BEG"   , 3 inputs
    M07: Tank "d150SBO"   , 3 inputs
    M08: Tank "d135VIL"   , 3 inputs
    M09: Tank "d114SCL"   , 3 inputs
    M10: Tank "d184BEG"   , 3 inputs
    M11: Tank "d263CES"   , 2 inputs
    M12: Tank "d205CES"   , 3 inputs
    M13: Tank "d147SCC"   , 3 inputs
    M14: Tank "d361CGY"   , 2 inputs
    M15: Tank "d268CGY"   , 3 inputs
    M16: Tank "d374CGL"   , 2 inputs
    M17: Tank "d313CGL"   , 2 inputs
    M18: Tank "d200CGY"   , 3 inputs
    M19: Tank "d246CGY"   , 2 inputs
    M20: Tank "d252CGL"   , 4 inputs
    M21: Tank "d195TOR"   , 5 inputs
    M22: Tank "d125PAL"   , 4 inputs
    M23: Tank "d205FON"   , 3 inputs
    M24: Tank "d320FON"   , 3 inputs
    M25: Tank "d175PAP"   , 2 inputs
    M26: Tank "d400MGB"   , 3 inputs
    M27: Tank "d110PAP"   , 4 inputs
    M28: Tank "d320MGB"   , 3 inputs
    M29: Tank "d437VVI"   , 3 inputs
    M30: Tank "d300BAR"   , 4 inputs
    M31: Tank "d176BARsud", 4 inputs
    M32: Tank "d200BLL"   , 5 inputs
    M33: Tank "d200BSO"   , 2 inputs
    M34: Tank "d328SGE"   , 2 inputs
    M35: Tank "d260SGE"   , 3 inputs
    M36: Tank "d255CAR"   , 2 inputs
    M37: Tank "d200ALT"   , 5 inputs
    M38: Tank "d130BAR"   , 9 inputs
    M39: Tank "d197BET"   , 3 inputs
    M40: Tank "d200FDM"   , 2 inputs
    M41: Tank "d132CMF"   , 3 inputs
    M42: Tank "d215VALL"  , 4 inputs
    M43: Tank "d184SMM"   , 2 inputs
    M44: Tank "d101MIR"   , 9 inputs
    M45: Tank "d169CME"   , 2 inputs
    M46: Tank "d202CRU"   , 2 inputs
    M47: Tank "d225GUI"   , 2 inputs
    M48: Tank "d197GUI"   , 3 inputs
    M49: Tank "d151BON"   , 2 inputs
    M50: Tank "d117MTG"   , 2 inputs
    M51: Tank "d190TCA"   , 2 inputs
    M52: Tank "d171SAM"   , 3 inputs
    M53: Tank "d144TPI"   , 2 inputs
    M54: Tank "d120POM"   , 3 inputs
    M55: Tank "d70BBE"    , 8 inputs
    M56: Tank "d100CFE"   , 10 inputs
    M57: Tank "d54REL"    , 4 inputs
    M58: Tank "d10COR"    , 6 inputs
    M59: Tank "dPLANTA"   , 4 inputs
    M60: Tank "d80GAVi80CAS85", 9 inputs
    M61: Tank "d115CAST"  , 6 inputs
    M62: Tank "d130LSE"   , 2 inputs
    M63: Tank "d145MMA"   , 3 inputs
    M64: Node1            , 6 inputs
    M65: Node2            , 3 inputs
    M66: Node3            , 4 inputs
    M67: Node4            , 7 inputs
    M68: Node5            , 3 inputs
    M69: Node6            , 9 inputs
    M70: Node7            , 7 inputs
    M71: Node8            , 2 inputs
    M72: Node9            , 6 inputs
    M73: Node10           , 4 inputs
    M74: Node11           , 8 inputs
    M75: Node13           , 6 inputs
    M76: Node14           , 3 inputs
    M77: Node15           , 3 inputs
    M78: Node16           , 6 inputs
    M79: NodeA            , 5 inputs
    M80: NodeB            , 7 inputs
  --- External Inputs -----------
    IN01: c450BEG         MD 
    IN02: iBegues4        MV  (min=0,max=0.09)
    IN03: c369BEG         MD 
    IN04: iBegues3        MV  (min=0,max=0.09)
    IN05: c175LOR         MD 
    IN06: iOrioles        MV  (min=0,max=0.008)
    IN07: c185VIL         MD 
    IN08: iViladecans2    MV  (min=0,max=0.015)
    IN09: c190SCL         MD 
    IN10: iStCliment2     MV  (min=0,max=0.06)
    IN11: c255BEG         MD 
    IN12: iBegues2        MV  (min=0,max=0.1)
    IN13: c150SBO         MD 
    IN14: iStBoi          MV  (min=0,max=0.08)
    IN15: c135VIL         MD 
    IN16: iViladecans1    MV  (min=0,max=0.08)
    IN17: c114SCL         MD 
    IN18: iStCliment1     MV  (min=0,max=0.03)
    IN19: c184ESP         MD 
    IN20: iBegues1        MV  (min=0,max=0.1)
    IN21: c263CES         MD 
    IN22: iCesalpina2     MV  (min=0,max=0.025)
    IN23: c205CES         MD 
    IN24: iCesalpina1     MV  (min=0,max=0.035)
    IN25: c147SCC         MD 
    IN26: iStaClmCervello MV  (min=0,max=0.04)
    IN27: c361CGY         MD 
    IN28: iCanGuey3       MV  (min=0,max=0.009)
    IN29: c268CGY         MD 
    IN30: iCanGuey2       MV  (min=0,max=0.01)
    IN31: c374CGL         MD 
    IN32: iCanGuell2d5    MV  (min=0,max=0.01)
    IN33: c313CGL         MD 
    IN34: iCanGuell2d3    MV  (min=0,max=0.009)
    IN35: c200CGY         MD 
    IN36: iCanGuey1d2     MV  (min=0,max=0.015)
    IN37: c246CGY         MD 
    IN38: iCanGuey1d5     MV  (min=0,max=0.01)
    IN39: c252CGL         MD 
    IN40: iCanGuell1      MV  (min=0,max=0.02)
    IN41: c195TOR         MD 
    IN42: iCanRoig        MV  (min=0,max=0.027)
    IN43: aMS             MV 
    IN44: c125PAL         MD 
    IN45: iPalleja4       MV  (min=0,max=0.035)
    IN46: iPalleja1       MV  (min=0,max=0.03)
    IN47: c205FON         MD 
    IN48: iPalleja2       MV  (min=0,max=0.03)
    IN49: c320FON         MD 
    IN50: c356FON         MD 
    IN51: c175PAP135PAP   MD 
    IN52: iPapiol1        MV  (min=0,max=0.02)
    IN53: c400MGB         MD 
    IN54: c475MGB         MD 
    IN55: iMasGuimbau2    MV  (min=0,max=0.005)
    IN56: c110PAP         MD 
    IN57: vPapiolATLL     MV  (min=0,max=0.075)
    IN58: iPapiol2AGBAR   MV  (min=0,max=0.025)
    IN59: c320MGB         MD 
    IN60: iMasGuimbau1    MV  (min=0,max=0.008)
    IN61: c437VVI         MD 
    IN62: c541TIB         MD 
    IN63: iTibidabo       MV  (min=0,max=0.066)
    IN64: c300BAR         MD 
    IN65: iFinestrelles300 MV  (min=0,max=0.5)
    IN66: c176BARsud      MD 
    IN67: vFinestrllEsplg MV  (min=0,max=0.2)
    IN68: iFinestrelles176 MV  (min=0,max=0.23)
    IN69: vBonanova       MV  (min=0,max=0.4)
    IN70: c200BLL         MD 
    IN71: iBellsoleig     MV  (min=0,max=0.006)
    IN72: iCornella130    MV  (min=0,max=0.2)
    IN73: iFinestrelles200 MV  (min=0,max=0.6)
    IN74: vFinestrelles   MV  (min=0,max=0.8)
    IN75: c200BSO         MD 
    IN76: c328SGE         MD 
    IN77: iStGenis2       MV  (min=0,max=0.03)
    IN78: c260SGE         MD 
    IN79: iStGenis1       MV  (min=0,max=0.25)
    IN80: c255CAR         MD 
    IN81: iCarmel         MV  (min=0,max=0.1)
    IN82: c200ALT         MD 
    IN83: c150ALT         MD 
    IN84: iAltures        MV  (min=0,max=0.425)
    IN85: vBaroStLluis    MV  (min=0,max=0.15)
    IN86: c130BAR         MD 
    IN87: vMix1           MV  (min=0,max=3.2)
    IN88: iCollblanc      MV  (min=0,max=0.9)
    IN89: vCollblanc      MV  (min=0,max=0.8)
    IN90: vEsplugues      MV  (min=0,max=0.5)
    IN91: c197BET         MD 
    IN92: c238UAB         MD 
    IN93: iCerdUAB        MV  (min=0,max=0.2)
    IN94: c200FDM         MD 
    IN95: iFlorMaig       MV  (min=0,max=0.01)
    IN96: c132CMF         MD 
    IN97: iCerdMontflorit MV  (min=0,max=0.3)
    IN98: c260VALL        MD 
    IN99: c275BEV         MD 
    IN100: c215VALL        MD 
    IN101: iVallensana1    MV  (min=0,max=0.01)
    IN102: c184SMM         MD 
    IN103: iStaMaMontcada  MV  (min=0,max=0.008)
    IN104: c101MIR         MD 
    IN105: c250VASAB       MD 
    IN106: iTorreBaro1     MV  (min=0,max=0.2)
    IN107: vTerMontcada    MV  (min=0,max=0.35)
    IN108: vBesosMontcCerd MV  (min=0,max=0.8)
    IN109: c169CME         MD 
    IN110: c202CRU         MD 
    IN111: iCanRuti        MV  (min=0,max=0.04)
    IN112: c225GUI         MD 
    IN113: iGuinardera2    MV  (min=0,max=0.008)
    IN114: c197GUI         MD 
    IN115: iGuinardera1    MV  (min=0,max=0.04)
    IN116: c151BON         MD 
    IN117: iBonavista      MV  (min=0,max=0.01)
    IN118: c117MTG         MD 
    IN119: vMontigala      MV  (min=0,max=0.1)
    IN120: c190TCA         MD 
    IN121: iTorreoCastell  MV  (min=0,max=0.04)
    IN122: c171SAM         MD 
    IN123: iMntjcStaAmalia MV  (min=0,max=0.18)
    IN124: c144TPI         MD 
    IN125: iMntjcTresPins  MV  (min=0,max=0.2)
    IN126: c120POM         MD 
    IN127: iMorera         MV  (min=0,max=0.06)
    IN128: vConflent       MV  (min=0,max=0.1)
    IN129: c70BBE          MD 
    IN130: c55BAR          MD 
    IN131: vPsgStJoan      MV  (min=0,max=1)
    IN132: vTrinitat70     MV  (min=0,max=2)
    IN133: vCerdaTraja     MV  (min=0,max=1.8)
    IN134: c100CFE         MD 
    IN135: vSJD            MV  (min=0,max=1)
    IN136: iEsplugues      MV  (min=0,max=0.65)
    IN137: vRossichMaq     MV  (min=0,max=3.61)
    IN138: vZonaFranca     MV  (min=0,max=3)
    IN139: iCornella100    MV  (min=0,max=3.5)
    IN140: iRelleu         MV  (min=0,max=3.5)
    IN141: vPousEstrella   MV  (min=0,max=0.23)
    IN142: vFontSanta      MV  (min=0,max=1.2)
    IN143: iCornella50     MV  (min=0,max=0.6)
    IN144: iSJD50          MV  (min=0,max=1.8)
    IN145: cRECARREGA      MD 
    IN146: iCornella70     MV  (min=0,max=0.5)
    IN147: iSJD10          MV  (min=0,max=2.9)
    IN148: iSJD70          MV  (min=0,max=0.4)
    IN149: vSJDTot         MV  (min=0,max=5.3)
    IN150: c80GAVi80CAS85  MD 
    IN151: aPousCAST       MV 
    IN152: vGava100a80     MV  (min=0,max=0.4)
    IN153: iGava4          MV  (min=0,max=0.06)
    IN154: vCanyars        MV  (min=0,max=0.15)
    IN155: iLaSentiu       MV  (min=0,max=0.008)
    IN156: iBellamar       MV  (min=0,max=0.06)
    IN157: iCastelldefels  MV  (min=0,max=0.15)
    IN158: vCanRoca        MV  (min=0,max=0.05)
    IN159: c115CAST        MD 
    IN160: aCAST8          MV 
    IN161: iMasJove        MV  (min=0,max=0.025)
    IN162: c130LSE         MD 
    IN163: c145MMA         MD 
    IN164: c175BVI         MD 
    IN165: AportA          MV 
    IN166: c82PAL          MD 
    IN167: vPalleja70      MV  (min=0,max=0.06)
    IN168: c70PAL          MD 
    IN169: c140LLO         MD 
    IN170: c200BARsc       MD 
    IN171: c176BARnord     MD 
    IN172: vMinaCiutat     MV  (min=0,max=2)
    IN173: vPortola        MV  (min=0,max=0.15)
    IN174: c176BARcentre   MD 
    IN175: c135MGA         MD 
    IN176: AportT          MV 
    IN177: vTrinitat200    MV  (min=0,max=0.8)
    IN178: vTerStaColoma   MV  (min=0,max=0.28)
    IN179: vMix2           MV  (min=0,max=3.4)
    IN180: c100LLO         MD 
    IN181: c100BES         MD 
    IN182: vBesosStaColoma MV  (min=0,max=0.5)
    IN183: c100BLLsud      MD 
    IN184: vMix3           MV  (min=-5.9,max=5)
    IN185: vTorrassa       MV  (min=0,max=2)
    IN186: c100BLLcentre   MD 
    IN187: vCncpcioArenal  MV  (min=0,max=1.5)
    IN188: c70FLL          MD 
    IN189: c70CFE          MD 
    IN190: v70FLL70LLO     MV  (min=0,max=0.159)
    IN191: v70LLO70FLL     MV  (min=0,max=0.104)
    IN192: c135SCG         MD 
    IN193: AportLL1        MV 
    IN194: AportLL2        MV 
    IN195: aPousE1         MV 
    IN196: aPousE2         MV 
    IN197: c70LLO          MD 
    IN198: c250TBA         MD 
    IN199: c200BARnord     MD 
    IN200: iRoquetes       MV  (min=0,max=0.25)
    IN201: c100BLLnord     MD 
    IN202: aPousB          MV 
  --- External Outputs ----------
    OUT01: d450BEG         MO  (min=100,max=2900)
    OUT02: d369BEG         MO  (min=400,max=2900)
    OUT03: d175LOR         MO  (min=10,max=80)
    OUT04: d185VIL         MO  (min=20,max=205)
    OUT05: d190SCL         MO  (min=150,max=1000)
    OUT06: d255BEG         MO  (min=400,max=2900)
    OUT07: d150SBO         MO  (min=340,max=2750)
    OUT08: d135VIL         MO  (min=300,max=920)
    OUT09: d114SCL         MO  (min=113,max=480)
    OUT10: d184BEG         MO  (min=400,max=2900)
    OUT11: d263CES         MO  (min=200,max=1600)
    OUT12: d205CES         MO  (min=50,max=300)
    OUT13: d147SCC         MO  (min=32,max=801)
    OUT14: d361CGY         MO  (min=20,max=92)
    OUT15: d268CGY         MO  (min=18,max=82)
    OUT16: d374CGL         MO  (min=100,max=500)
    OUT17: d313CGL         MO  (min=40,max=200)
    OUT18: d200CGY         MO  (min=12,max=100)
    OUT19: d246CGY         MO  (min=7,max=100)
    OUT20: d252CGL         MO  (min=50,max=270)
    OUT21: d195TOR         MO  (min=70,max=1900)
    OUT22: d125PAL         MO  (min=15,max=445)
    OUT23: d205FON         MO  (min=100,max=480)
    OUT24: d320FON         MO  (min=600,max=2000)
    OUT25: d175PAP         MO  (min=600,max=2100)
    OUT26: d400MGB         MO  (min=55,max=450)
    OUT27: d110PAP         MO  (min=375,max=960)
    OUT28: d320MGB         MO  (min=25,max=78)
    OUT29: d437VVI         MO  (min=1003,max=2985)
    OUT30: d300BAR         MO  (min=1050,max=5800)
    OUT31: d176BARsud      MO  (min=200,max=1035)
    OUT32: d200BLL         MO  (min=700,max=7300)
    OUT33: d200BSO         MO  (min=35,max=240)
    OUT34: d328SGE         MO  (min=82,max=1907)
    OUT35: d260SGE         MO  (min=350,max=3072)
    OUT36: d255CAR         MO  (min=34,max=465)
    OUT37: d200ALT         MO  (min=50,max=4240)
    OUT38: d130BAR         MO  (min=3840,max=16000)
    OUT39: d197BET         MO  (min=520,max=2800)
    OUT40: d200FDM         MO  (min=300,max=1000)
    OUT41: d132CMF         MO  (min=500,max=2985)
    OUT42: d215VALL        MO  (min=50,max=300)
    OUT43: d184SMM         MO  (min=50,max=205)
    OUT44: d101MIR         MO  (min=1403,max=4912)
    OUT45: d169CME         MO  (min=50,max=3002)
    OUT46: d202CRU         MO  (min=40,max=275)
    OUT47: d225GUI         MO  (min=40,max=190)
    OUT48: d197GUI         MO  (min=100,max=3000)
    OUT49: d151BON         MO  (min=10,max=43)
    OUT50: d117MTG         MO  (min=1000,max=4500)
    OUT51: d190TCA         MO  (min=2,max=32)
    OUT52: d171SAM         MO  (min=99,max=1750)
    OUT53: d144TPI         MO  (min=447,max=4770)
    OUT54: d120POM         MO  (min=150,max=1785)
    OUT55: d70BBE          MO  (min=0,max=62750)
    OUT56: d100CFE         MO  (min=16500,max=65200)
    OUT57: d54REL          MO  (min=800,max=3100)
    OUT58: d10COR          MO  (min=0,max=11745)
    OUT59: dPLANTA         MO  (min=0,max=14450)
    OUT60: d80GAVi80CAS85  MO  (min=480,max=3250)
    OUT61: d115CAST        MO  (min=198,max=3870)
    OUT62: d130LSE         MO  (min=21,max=130)
    OUT63: d145MMA         MO  (min=100,max=480)
    OUT64: Node1           X 
    OUT65: Node2           X 
    OUT66: Node3           X 
    OUT67: Node4           X 
    OUT68: Node5           X 
    OUT69: Node6           X 
    OUT70: Node7           X 
    OUT71: Node8           X 
    OUT72: Node9           X 
    OUT73: Node10          X 
    OUT74: Node11          X 
    OUT75: Node13          X 
    OUT76: Node14          X 
    OUT77: Node15          X 
    OUT78: Node16          X 
    OUT79: NodeA           X 
    OUT80: NodeB           X 
 

Plot Water Network Structure

figure(1);clf;subfigure(1,1,1,1); %maximize figure
mod = plot(mod);
Computing vertex positions... Done.

Network Decomposition for Control

Decomposition of water network to a set of tanks for distributed control. EPS can be used to find given number of sets by applying graph algorithms of leaf condensation and \epsilon decomposition.

Decomposition to 6 groups

mod6 = mod.eps(6);
mod6 = plot(mod6);

Decomposition to 12 groups

mod12 = mod.eps(12);
mod12 = plot(mod12);

Networks separation

LS model of any group can be obtained by command GROUP.

for i=1:6,
  subplot(2,3,i);
  plot( mod6.group(i) );
  title(['\bfGroup ' num2str(i)]);
end
Computing vertex positions... Done.
Computing vertex positions... Done.
Computing vertex positions... Done.
Computing vertex positions... Done.
Computing vertex positions... Done.
Computing vertex positions... Done.

Compress model

Model modifications using GROUPS, REM_MOD, SELECT, ... keeps unused inputs/outputs and submodels in LS model. SQUEEZE can be used to remove them.

mod6_gr6 = mod6.group(6);
mod6_gr6 = mod6_gr6.squeeze;

clf;
step(mod6_gr6);