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);
