Carbon Bathtub JRuby

Ken Webb 2010-06-14T20:34:44Z

This page describes the Ruby (JRuby) version of the Carbon Bathtub Xholon model.

<CarbonBathtub implName="lang:jruby:inline:"><![CDATA[
require 'java'
import org.primordion.xholon.app.Application
import org.primordion.xholon.base.IMessage
import org.primordion.xholon.base.Xholon

class CarbonBathtub < Xholon

  def initialize()
    super()
    @acting = false
    @startYear = 2008
    @endYear   = 2070
    @currentYear = 0
    @actionList = ['Start']
  end

  def act
    if @acting == true
      @currentYear += 1
      if @currentYear.equal?(@endYear)
        getApp.invokeDataPlotter
        getApp.setUseDataPlotter('none')
        @acting = false
      end
      super
    end
  end

  def getActionList
    @actionList.to_java :String
  end
  
  def setActionList(actionList)
    @actionList = actionList
  end
  
  def doAction(action)
    if action == 'Start'
      start
    end
  end
  
  def processReceivedMessage(msg)
    doAction(msg.getData)
  end
  
  def start
    if @acting == false
      if @currentYear == @endYear
        # this is a restart
        getFirstChild.reconfigure
      end
      @currentYear = @startYear
      getApp.setTimeStep(@startYear)
      generateDataPlotter
      @acting = true
    end
  end
  
  def generateDataPlotter
    app = getApp
    app.setUseDataPlotter('JFreeChart') # or "google"
    app.setDataPlotterParams("CO2 in the Atmosphere,Year,MTons CO2,./statistics/,stats,1,WRITE_AS_LONG")
    app.createChart
  end
  
  def isActing
    @acting
  end

  def setActing(acting)
    @acting = acting
  end

  def getStartYear
    @startYear
  end

  def setStartYear(startYear)
    @startYear = startYear
  end

  def getEndYear
    @endYear
  end

  def setEndYear(endYear)
    @endYear = endYear
  end

  def getCurrentYear
    @currentYear
  end

  def setCurrentYear(currentYear)
    @currentYear = currentYear
  end
  
end
CarbonBathtub.new
]]></CarbonBathtub>
<_-.carbonbathtub>
<Atmosphere implName="lang:jruby:inline:"><![CDATA[
require 'java'
import org.primordion.xholon.base.Xholon
import org.primordion.xholon.base.IXholonClass

class Atmosphere < Xholon

  def initialize
    super()
    #puts "initialize"
    @carbonMTons = 820000000000.0
    #puts @carbonMTons
  end
  
  def reconfigure
    @carbonMTons = 820000000000.0
    super
  end
  
  def getVal
    @carbonMTons
  end
  
  def setVal(val)
    @carbonMTons = val
  end
  
  def getXhType
    IXholonClass.XhtypePurePassiveObject
  end
  
end
Atmosphere.new
]]></Atmosphere>
<InAllHumanMadeCo2 implName="lang:jruby:inline:"><![CDATA[
require 'java'
import org.primordion.xholon.base.IXholon
import org.primordion.xholon.base.Xholon

class InAllHumanMadeCo2 < Xholon
  
  def initialize
    super()
    @carbonPerYear = 9100000000.0
    @rateChange = 1.02 # 1.01 is +1%, 1.00 is steady, 0.99 is -1%
    @atmosphere = nil
  end
  
  def reconfigure
    @carbonPerYear = 9100000000.0
    @rateChange -= 0.01
    super
  end
  
  def act
    if @atmosphere.equal?(nil)
      @atmosphere = getParentNode.getFirstChild
    end
    newVal = @atmosphere.getVal + @carbonPerYear
    @carbonPerYear *= @rateChange
    @atmosphere.setVal(newVal)
    super
  end
  
  def getAtmosphere
    @atmosphere
  end
  def setAtmosphere(atmosphere)
    @atmosphere = atmosphere
  end
  
  def getRateChange
    @rateChange
  end
  def setRateChange(rateChange)
    @rateChange = rateChange
  end
  
end
InAllHumanMadeCo2.new
]]></InAllHumanMadeCo2>
<OutAbsorbedByPlantsAndSoils implName="lang:jruby:inline:"><![CDATA[
require 'java'
import org.primordion.xholon.base.IXholon
import org.primordion.xholon.base.Xholon

class OutAbsorbedByPlantsAndSoils < Xholon
  
  def initialize
    super()
    @carbonPerYear = 9100000000.0 * 0.3
    @atmosphere = nil
  end
  
  def act
    if @atmosphere.equal?(nil)
      @atmosphere = getParentNode.getFirstChild
    end
    newVal = @atmosphere.getVal - @carbonPerYear
    @atmosphere.setVal(newVal)
    super
  end
  
  def getAtmosphere
    @atmosphere
  end
  def setAtmosphere(atmosphere)
    @atmosphere = atmosphere
  end
  
end
OutAbsorbedByPlantsAndSoils.new
]]></OutAbsorbedByPlantsAndSoils>
<OutAbsorbedByOceans implName="lang:jruby:inline:"><![CDATA[
require 'java'
import org.primordion.xholon.base.IXholon
import org.primordion.xholon.base.Xholon

class OutAbsorbedByOceans < Xholon

  def initialize
    super()
    @carbonPerYear = 9100000000.0 * 0.25
    @atmosphere = nil
  end
  
  def act
    if @atmosphere.equal?(nil)
      @atmosphere = getParentNode.getFirstChild
    end
    newVal = @atmosphere.getVal - @carbonPerYear
    @atmosphere.setVal(newVal)
    super
  end
  
  def getAtmosphere
    @atmosphere
  end
  def setAtmosphere(atmosphere)
    @atmosphere = atmosphere
  end
  
end
OutAbsorbedByOceans.new
]]></OutAbsorbedByOceans>
<OutAbsorbedBySedimentsAndRocks implName="lang:jruby:inline:"><![CDATA[
require 'java'
import org.primordion.xholon.base.IXholon
import org.primordion.xholon.base.Xholon

class OutAbsorbedBySedimentsAndRocks < Xholon

  def initialize
    super()
    @carbonPerYear = 9100000000.0 * 0.009
    @atmosphere = nil
  end
  
  def act
    if @atmosphere.equal?(nil)
      @atmosphere = getParentNode.getFirstChild
    end
    newVal = @atmosphere.getVal - @carbonPerYear
    @atmosphere.setVal(newVal)
    super
  end
  
  def getAtmosphere
    @atmosphere
  end
  def setAtmosphere(atmosphere)
    @atmosphere = atmosphere
  end
  
end
OutAbsorbedBySedimentsAndRocks.new
]]></OutAbsorbedBySedimentsAndRocks>
</_-.carbonbathtub>

return to main page