class Ilm::Chemical::Reactors::Reactor

This is the base class for the diff kinds of reactors

Attributes

input[R]
output[R]
reaction[R]
system[R]
volume[R]

Public Class Methods

new(args = {}) click to toggle source

ATTRS = [:system, :volume, :input, :output, :rate_equation]

# File lib/ilm/chemical/reactors/reactor.rb, line 10
def initialize(args = {})
  self.system = args[:system]
  self.volume = args[:volume] if args[:volume]
  self.input = args[:input] if args[:input]
  self.output = args[:output] if args[:output]
  self.reaction = args[:reaction] if args[:reaction]
end

Public Instance Methods

input=(inp) click to toggle source
# File lib/ilm/chemical/reactors/reactor.rb, line 26
def input=(inp)
  @input = feed_if_valid inp
end
output=(out) click to toggle source
# File lib/ilm/chemical/reactors/reactor.rb, line 30
def output=(out)
  @output = feed_if_valid out
end
reaction=(rxn) click to toggle source
# File lib/ilm/chemical/reactors/reactor.rb, line 34
def reaction=(rxn)
  @reaction = reaction_if_valid rxn
end
system=(sys) click to toggle source
# File lib/ilm/chemical/reactors/reactor.rb, line 18
def system=(sys)
  @system = sys || :open
end
volume=(vol) click to toggle source
# File lib/ilm/chemical/reactors/reactor.rb, line 22
def volume=(vol)
  @volume = volume_if_valid vol
end

Private Instance Methods

feed_if_valid(f) click to toggle source
# File lib/ilm/chemical/reactors/reactor.rb, line 51
def feed_if_valid(f)
  raise ArgumentError, 'Invalid substance' if f[:substance].class != Ilm::Chemistry::Substance

  begin
    f[:quantity] = Unitwise f[:quantity]
  rescue
    raise ArgumentError, 'Invalid quantity'
  end
  dim = f[:quantity].composition.to_h
  return f if valid_feed_quantity_dimensions.include? dim

  raise ArgumentError, 'Invalid quantity unit'
end
reaction_if_valid(r) click to toggle source
# File lib/ilm/chemical/reactors/reactor.rb, line 69
def reaction_if_valid(r)
  # raise ArgumentError, 'Substance not in reaction' if
  #   @input && (
  #     r.species[:reactants].keys &
  #     @input[:substance].species.keys
  #   ).empty?
  return r if r.class == Ilm::Chemistry::Reaction && r.is_valid
  raise ArgumentError, 'Invalid reaction argument'
end
valid_feed_quantity_dimensions() click to toggle source
# File lib/ilm/chemical/reactors/reactor.rb, line 65
def valid_feed_quantity_dimensions
  [{ 'M' => 1 }, { 'M' => 1, 'T' => -1 }]
end
volume_if_valid(vol) click to toggle source
# File lib/ilm/chemical/reactors/reactor.rb, line 40
def volume_if_valid(vol)
  begin
    vol = Unitwise vol
  rescue
    raise ArgumentError, 'Invalid volume'
  end
  return vol if vol.composition.to_h == { 'L' => 3 }

  raise ArgumentError, 'Invalid volume unit'
end