Salty and getting fresh
The world cradle of desalination know-how wants to start using it
<?xml version="1.0" encoding="UTF-8"?>
<!--Xholon Workbook http://www.primordion.com/Xholon/wb/ (C) Ken Webb Wed Apr 04 2012 09:42:54 GMT-0400 (EDT)-->
<XholonWorkbook>
<Notes><![CDATA[
Xholon
------
Title: Salty and getting fresh
Description: The world cradle of desalination know-how wants to start using it
Url: http://www.economist.com/node/21551514
InternalName:
YoutubeId:
Keywords:
My Notes
--------
According to an article in The Economist (March 31, 2012), there are 13,000 reverse osmosis (RO) plants in the world. They produce fresh water from sea water or waste water. Many of the companies that build and service these desalination and treatment plants are located in the San Diego area, in southern California, in the U.S.
Southern California has its own water problems and is starting to use more of this technology locally. Poseidon Resources is building a large desalination plant in Carlsbad near San Diego.
How to see the simulation::
Click the Run button above.
Look at the structure in the overlay.
Click the Step button in the overlay.
]]></Notes>
<script implName="lang:python:inline:"><![CDATA[
#print "height = 12.34 m"
]]></script>
<script implName="lang:javascript:inline:"><![CDATA[
//print("height = 56.78 meters\n");
]]></script>
<_-.XholonClass>
<!-- types of domain objects -->
<PhysicalSystem/>
<Water>
<SeaWater/>
<FreshWater/> <!-- drinkable -->
<CoolingWater/> <!-- water at the power plant -->
<Brine/>
</Water>
<Problem>
<WaterProblem/> <!-- not enough water -->
<EnvironmentalProblem/> <!-- environmentalists are suing re the desalination plant -->
</Problem>
<Answer>
<Conservation/>
<Reuse/>
<Desalination/> <!-- use of sea water -->
</Answer>
<Aqueduct/> <!-- the current technology for moving water to southern California -->
<DesalinationPlant/>
<ReverseOsmosis/> <!-- RO, a general approach -->
<ReverseOsmosisSpiralModule/> <!-- a specific patented technology -->
<OsmoticMembrane/> <!-- a sheet with tiny holes -->
<MicroscopicHoles/>
<WaterIntake/>
<Discharge/>
<MarineLife>
<Fish>
<Gobi/>
<Garibaldi/>
</Fish>
<OtherMarineLife/>
</MarineLife>
<Energy/>
<Location>
<PacificOcean/>
<UnitedStates/>
<California/>
<Carlsbad/> <!-- a town north of San Diego, California -->
</Location>
<MicroscopicObject>
<WaterMolecule/>
<SaltMolecule/>
<Virus/>
<Bacteria/>
</MicroscopicObject>
<!-- these visible objects are used in the article to visualize relative sizes of the microscopic objects -->
<MacroscopicObject>
<TennisBall/>
<Softball/>
<Truck/>
<PowerPlant/>
</MacroscopicObject>
</_-.XholonClass>
<xholonClassDetails>
<WaterIntake>
<port name="seaWater" connector="#xpointer(ancestor::PhysicalSystem/PacificOcean/SeaWater)"/>
<port name="coolingWater" connector="#xpointer(../CoolingWater)"/>
</WaterIntake>
<DesalinationPlant>
<port name="coolingWater" connector="#xpointer(../CoolingWater)"/>
<port name="freshWater" connector="#xpointer(FreshWater)"/>
<port name="brine" connector="#xpointer(Brine)"/>
</DesalinationPlant>
<Discharge>
<port name="seaWater" connector="#xpointer(ancestor::PhysicalSystem/PacificOcean/SeaWater)"/>
<port name="coolingWater" connector="#xpointer(../CoolingWater)"/>
<port name="brine" connector="#xpointer(../DesalinationPlant/Brine)"/>
</Discharge>
</xholonClassDetails>
<PhysicalSystem>
<PacificOcean>
<SeaWater>304000000 gal</SeaWater> <!-- the amount used every day by the power plant for cooling -->
<Fish/>
<OtherMarineLife/>
</PacificOcean>
<UnitedStates>
<California>
<Carlsbad>
<PowerPlant>
<WaterIntake/>
<CoolingWater>0 gal</CoolingWater>
<DesalinationPlant>
<OsmoticMembrane>
<MicroscopicHoles/>
</OsmoticMembrane>
<FreshWater>0 gal</FreshWater>
<Brine>0 gal</Brine>
</DesalinationPlant>
<Discharge/>
</PowerPlant>
</Carlsbad>
</California>
</UnitedStates>
</PhysicalSystem>
<Blockbehavior implName="lang:python:inline:"><![CDATA[
# This works if pasted in as a last child of Block.
#height.incVal(0.02)
#print("Python wants something to do. Height:" + str(height))
]]></Blockbehavior>
<Blockbehavior implName="lang:javascript:inline:"><![CDATA[
// This works if pasted in as a last child of Block.
//height.incVal(0.02);
//print("JavaScript wants something to do. Height:" + height + "\n");
]]></Blockbehavior>
<WaterIntakebehavior implName="lang:webEditionjs:inline:"><![CDATA[
this.bindPorts(this.parent());
var dailyIntake = this.seaWater.attr('val');
this.coolingWater.incVal(dailyIntake);
print("\n\nEvery day, the power plant takes in "
+ dailyIntake + " " + this.seaWater.attr('unit')
+ " of sea water for cooling.");
]]></WaterIntakebehavior>
<DesalinationPlantbehavior implName="lang:webEditionjs:inline:"><![CDATA[
this.bindPorts(this.parent());
var seaWater = 104000000;
this.coolingWater.decVal(seaWater);
print("\nThe desalination plant will reuse "
+ seaWater + " " + this.coolingWater.attr('unit')
+ " of this sea water,");
var freshWater = 50000000; // daily production of fresh water
var brine = seaWater - freshWater;
this.freshWater.incVal(freshWater);
this.brine.incVal(brine);
print("\n producing "
+ freshWater + " " + this.freshWater.attr('unit')
+ " of fresh water,");
print("\n and "
+ brine + " " + this.brine.attr('unit')
+ " of brine.");
print("\n It will use some energy and kill some fish.");
]]></DesalinationPlantbehavior>
<Dischargebehavior implName="lang:webEditionjs:inline:"><![CDATA[
this.bindPorts(this.parent());
print("\nThe power plant discharges "
+ this.coolingWater.attr('val') + " " + this.coolingWater.attr('unit')
+ " of cooling water back to the ocean.");
print("\n It will also discharge "
+ this.brine.attr('val') + " " + this.brine.attr('unit')
+ " of brine to the ocean.");
this.coolingWater.attr('val', 0);
this.brine.attr('val', 0);
]]></Dischargebehavior>
<Blockbehavior implName="lang:bsh:inline:"><![CDATA[
// This works if pasted in as a last child of Block.
//height.incVal(0.02);
//System.out.print("Java/Beanshell wants something to do. Height:" + height + "\n");
]]></Blockbehavior>
<Blockbehavior implName="lang:jruby:inline:"><![CDATA[
#require 'java'
# This works if pasted in as a last child of Block.
#$height.incVal(0.02)
#puts "Ruby wants something to do. Height: #{$height}"
]]></Blockbehavior>
<Blockbehavior implName="lang:groovy:inline:"><![CDATA[
// This works if pasted in as a last child of Block.
//height.incVal(0.02);
//System.out.print("Groovy wants something to do. Height:" + height + "\n");
]]></Blockbehavior>
<SvgClient><Attribute_String roleName="svgUri"><![CDATA[data:image/svg+xml,
<svg width="1" height="1" xmlns="http://www.w3.org/2000/svg">
</svg>
]]></Attribute_String><Attribute_String roleName="setup">${MODELNAME_DEFAULT},${SVGURI_DEFAULT}</Attribute_String></SvgClient>
</XholonWorkbook>