Carbon Bathtub BeanShell

Ken Webb 2010-06-06T18:47:48Z

This page describes the Java (BeanShell) version of the Carbon Bathtub Xholon model.

<CarbonBathtub implName="lang:beanshell:inline:"><![CDATA[
package org.primordion.user.app.Chameleon.CarbonBathtub;
import org.primordion.xholon.app.Application;
import org.primordion.xholon.base.IMessage;
import org.primordion.xholon.base.Xholon;
public class CarbonBathtub extends Xholon {

 private boolean acting = false;
  
 private int startYear = 2008;
 private int endYear   = 2070;
 private int currentYear = 0;
  
 public void act() {
   if (acting) {
     currentYear++;
     if (currentYear == endYear) {
       ((Application)getApp()).invokeDataPlotter();
       ((Application)getApp()).setUseDataPlotter("none");
       acting = false;
     }
     super.act();
   }
 }
  
 private static final String start = "Start";
  
 private String[] actions = {start};
  
 public String[] getActionList() {
   return actions;
 }
  
 public void setActionList(String[] actionList) {
   actions = actionList;
 }
  
 public void doAction(String action) {
   if (start.equals(action)) {
     start();
   }
 }
  
 public void processReceivedMessage(IMessage msg) {
   doAction((String)msg.getData());
 }
  
 protected void start() {
   if (!acting) {
     if (currentYear == endYear) {
       // this is a restart
       getFirstChild().reconfigure();
     }
     currentYear = startYear;
     getApp().setTimeStep(startYear);
     generateDataPlotter();
     acting = true;
   }
 }

 protected void generateDataPlotter() {
   Application app = (Application)getApp();
   app.setUseDataPlotter("JFreeChart"); // or "google"
   app.setDataPlotterParams("CO2 in the Atmosphere,Year,MTons CO2,./statistics/,stats,1,WRITE_AS_LONG");
   app.createChart();
 }
  
 public boolean isActing() {
   return acting;
 }

 public void setActing(boolean acting) {
   this.acting = acting;
 }

 public int getStartYear() {
   return startYear;
 }

 public void setStartYear(int startYear) {
   this.startYear = startYear;
 }

 public int getEndYear() {
   return endYear;
 }

 public void setEndYear(int endYear) {
   this.endYear = endYear;
 }

 public int getCurrentYear() {
   return currentYear;
 }

 public void setCurrentYear(int currentYear) {
   this.currentYear = currentYear;
 }

}
new CarbonBathtub();
]]></CarbonBathtub>

<_-.carbonbathtub>
<Atmosphere implName="lang:beanshell:inline:"><![CDATA[
import org.primordion.xholon.base.Xholon;
import org.primordion.xholon.base.IXholonClass;
public class Atmosphere extends Xholon
{

 private static final double INITIAL_CARBON_MTONS = 820000000000.0;
 private double carbonMTons = INITIAL_CARBON_MTONS; // 2008 average
  
 public void reconfigure() {
   carbonMTons = INITIAL_CARBON_MTONS;
   super.reconfigure();
 }
  
 public double getVal() {
   return carbonMTons;
 }
  
 public void setVal(Double val) {
   this.carbonMTons = val;
 }
  
 public int getXhType() {
   return IXholonClass.XhtypePurePassiveObject;
 }

}
new Atmosphere();
]]></Atmosphere>
<InAllHumanMadeCo2 implName="lang:beanshell:inline:"><![CDATA[
import org.primordion.xholon.base.IXholon;
import org.primordion.xholon.base.Xholon;
public class InAllHumanMadeCo2 extends Xholon { 

 private static final double INITIAL_CARBON_PERYEAR = 9100000000.0;
 private double carbonPerYear = INITIAL_CARBON_PERYEAR; // rate
 private double rateChange    = 1.02; // 1.01 is +1%, 1.00 is steady, 0.99 is -1%
 private IXholon atmosphere = null;
  
 public void reconfigure() {
   carbonPerYear = INITIAL_CARBON_PERYEAR;
   rateChange -= 0.01;
   super.reconfigure();
 }
  
 public void act() {
   if (atmosphere == null) {
     atmosphere = getXPath().evaluate("../Atmosphere", this);
   }
   double newVal = atmosphere.getVal() + carbonPerYear;
   carbonPerYear *= rateChange;
   atmosphere.setVal(new Double(newVal));
   super.act();
 }
  
 public IXholon getAtmosphere() {return atmosphere;}
 public void setAtmosphere(IXholon atmosphere) {this.atmosphere = atmosphere;}
  
 public double getRateChange() {return rateChange;}
 public void setRateChange(double rateChange) {this.rateChange = rateChange;}

}
new InAllHumanMadeCo2();
]]></InAllHumanMadeCo2>
<OutAbsorbedByPlantsAndSoils implName="lang:beanshell:inline:"><![CDATA[
import org.primordion.xholon.base.IXholon;
import org.primordion.xholon.base.Xholon;
public class OutAbsorbedByPlantsAndSoils extends Xholon {

 private double carbonPerYear = 9100000000.0 * 0.3;
 private IXholon atmosphere = null;
  
 public void act() {
   if (atmosphere == null) {
     atmosphere = getXPath().evaluate("../Atmosphere", this);
   }
   double newVal = atmosphere.getVal() - carbonPerYear;
   atmosphere.setVal(new Double(newVal));
   super.act();
 }
  
 public IXholon getAtmosphere() {return atmosphere;}
 public void setAtmosphere(IXholon atmosphere) {this.atmosphere = atmosphere;}

}
new OutAbsorbedByPlantsAndSoils();
]]></OutAbsorbedByPlantsAndSoils>
<OutAbsorbedByOceans implName="lang:beanshell:inline:"><![CDATA[
import org.primordion.xholon.base.IXholon;
import org.primordion.xholon.base.Xholon;
public class OutAbsorbedByOceans extends Xholon {

 private double carbonPerYear = 9100000000.0 * 0.25;
 private IXholon atmosphere = null;
  
 public void act() {
   if (atmosphere == null) {
     atmosphere = getXPath().evaluate("../Atmosphere", this);
   }
   double newVal = atmosphere.getVal() - carbonPerYear;
   atmosphere.setVal(new Double(newVal));
   super.act();
 }
  
 public IXholon getAtmosphere() {return atmosphere;}
 public void setAtmosphere(IXholon atmosphere) {this.atmosphere = atmosphere;}

}
new OutAbsorbedByOceans();
]]></OutAbsorbedByOceans>
<OutAbsorbedBySedimentsAndRocks implName="lang:beanshell:inline:"><![CDATA[
import org.primordion.xholon.base.IXholon;
import org.primordion.xholon.base.Xholon;
public class OutAbsorbedBySedimentsAndRocks extends Xholon {

 private double carbonPerYear = 9100000000.0 * 0.009;
 private IXholon atmosphere = null;
  
 public void act() {
   if (atmosphere == null) {
     atmosphere = getXPath().evaluate("../Atmosphere", this);
   }
   double newVal = atmosphere.getVal() - carbonPerYear;
   atmosphere.setVal(new Double(newVal));
   super.act();
 }
  
 public IXholon getAtmosphere() {return atmosphere;}
 public void setAtmosphere(IXholon atmosphere) {this.atmosphere = atmosphere;}

}
new OutAbsorbedBySedimentsAndRocks();
]]></OutAbsorbedBySedimentsAndRocks>
</pre>
<pre>
</_-.carbonbathtub>

return to main page