Class AnaerobicDigester

All Implemented Interfaces:
Serializable, Runnable, ProcessEquipmentInterface, TwoPortInterface, ProcessElementInterface, SimulationInterface, NamedInterface

public class AnaerobicDigester extends Fermenter
Anaerobic digester for biogas production from organic substrates.

Models single-stage continuous stirred-tank reactor (CSTR) anaerobic digestion using stoichiometric conversion of a defined organic substrate to biogas (CH4 + CO2). The digester extends Fermenter to reuse its reactor vessel, mixing, and stream management infrastructure, adding biogas-specific calculations.

Key Parameters

  • Organic loading rate (OLR) — kg VS / (m3 * day)
  • Hydraulic retention time (HRT) — days
  • Volatile solids (VS) destruction — fraction of VS converted
  • Specific methane yield — Nm3 CH4 / kg VS destroyed

Substrate Types

Typical substrate methane yields
Substrate Specific CH4 Yield (Nm3/kg VS) Default VS Destruction
SEWAGE_SLUDGE 0.30 55%
FOOD_WASTE 0.45 80%
MANURE 0.20 45%
CROP_RESIDUE 0.28 50%
ENERGY_CROP 0.35 65%
CUSTOM user-defined user-defined

Usage example:

AnaerobicDigester digester = new AnaerobicDigester("AD-1");
digester.setSubstrateType(AnaerobicDigester.SubstrateType.FOOD_WASTE);
digester.setFeedRate(10000.0, 0.25); // 10 t/hr at 25% total solids
digester.setVesselVolume(5000.0);
digester.setDigesterTemperature(37.0, "C");
digester.run();

double biogasFlow = digester.getBiogasFlowRateNm3PerDay();
double methaneContent = digester.getMethaneContentPercent();
Version:
1.0
Author:
Even Solbraa
See Also:
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      Serialization version UID.
      See Also:
    • logger

      private static final org.apache.logging.log4j.Logger logger
      Logger instance.
    • substrateType

      private AnaerobicDigester.SubstrateType substrateType
      Substrate type.
    • feedRateKgPerHr

      private double feedRateKgPerHr
      Feed rate in kg/hr (total wet mass).
    • totalSolidsFraction

      private double totalSolidsFraction
      Total solids fraction of the feed (0-1).
    • vstsFraction

      private double vstsFraction
      VS/TS ratio (volatile solids as fraction of total solids).
    • digesterTemperature

      private double digesterTemperature
      Digester temperature in Kelvin.
    • temperatureRegime

      private AnaerobicDigester.TemperatureRegime temperatureRegime
      Temperature regime.
    • specificMethaneYield

      private double specificMethaneYield
      Specific methane yield override (Nm3 CH4 / kg VS destroyed).
    • vsDestruction

      private double vsDestruction
      VS destruction fraction override.
    • methaneFraction

      private double methaneFraction
      Methane content in biogas (volume fraction, default 0.60).
    • biogasOutStream

      private StreamInterface biogasOutStream
      Biogas product stream.
    • digestateOutStream

      private StreamInterface digestateOutStream
      Digestate (effluent) outlet stream.
    • biogasFlowRateNm3PerDay

      private double biogasFlowRateNm3PerDay
      Biogas flow rate in Nm3/day.
    • methaneProductionNm3PerDay

      private double methaneProductionNm3PerDay
      Methane production rate in Nm3/day.
    • organicLoadingRate

      private double organicLoadingRate
      Organic loading rate in kg VS / (m3 * day).
    • hydraulicRetentionTimeDays

      private double hydraulicRetentionTimeDays
      Hydraulic retention time in days.
    • actualVsDestruction

      private double actualVsDestruction
      VS destruction achieved.
    • actualSpecificMethaneYield

      private double actualSpecificMethaneYield
      Actual specific methane yield used.
    • digesterHasRun

      private boolean digesterHasRun
      Whether the digester has been run.
  • Constructor Details

    • AnaerobicDigester

      public AnaerobicDigester(String name)
      Creates an anaerobic digester with the given name.
      Parameters:
      name - equipment name
    • AnaerobicDigester

      public AnaerobicDigester(String name, StreamInterface inletStream)
      Creates an anaerobic digester with the given name and inlet stream.
      Parameters:
      name - equipment name
      inletStream - the sludge/substrate inlet stream
  • Method Details

    • setSubstrateType

      public void setSubstrateType(AnaerobicDigester.SubstrateType type)
      Sets the substrate type. This sets default values for specific methane yield, VS destruction, and VS/TS ratio.
      Parameters:
      type - the substrate type
    • getSubstrateType

      public AnaerobicDigester.SubstrateType getSubstrateType()
      Gets the substrate type.
      Returns:
      substrate type
    • setFeedRate

      public void setFeedRate(double feedRateKgPerHr, double totalSolidsFrac)
      Sets the feed rate and total solids content.
      Parameters:
      feedRateKgPerHr - total wet feed rate in kg/hr
      totalSolidsFrac - total solids fraction (0-1)
    • getFeedRateKgPerHr

      public double getFeedRateKgPerHr()
      Gets the feed rate in kg/hr.
      Returns:
      feed rate in kg/hr
    • getTotalSolidsFraction

      public double getTotalSolidsFraction()
      Gets the total solids fraction.
      Returns:
      total solids fraction (0-1)
    • setVSTSRatio

      public void setVSTSRatio(double ratio)
      Sets the VS/TS ratio (overrides the substrate type default).
      Parameters:
      ratio - VS/TS ratio (0-1)
    • setDigesterTemperature

      public void setDigesterTemperature(double temperatureK)
      Sets the digester temperature in Kelvin.
      Parameters:
      temperatureK - temperature in Kelvin
    • setDigesterTemperature

      public void setDigesterTemperature(double temperature, String unit)
      Sets the digester temperature with unit specification.
      Parameters:
      temperature - temperature value
      unit - unit string ("K", "C", "F")
    • getDigesterTemperature

      public double getDigesterTemperature()
      Gets the digester temperature in Kelvin.
      Returns:
      digester temperature in K
    • getTemperatureRegime

      public AnaerobicDigester.TemperatureRegime getTemperatureRegime()
      Gets the temperature regime.
      Returns:
      temperature regime
    • setSpecificMethaneYield

      public void setSpecificMethaneYield(double yieldNm3PerKgVS)
      Sets the specific methane yield override.
      Parameters:
      yieldNm3PerKgVS - specific methane yield in Nm3 CH4 / kg VS destroyed
    • setVSDestruction

      public void setVSDestruction(double fraction)
      Sets the VS destruction override.
      Parameters:
      fraction - VS destruction fraction (0-1)
    • setMethaneFraction

      public void setMethaneFraction(double fraction)
      Sets the methane fraction in biogas.
      Parameters:
      fraction - methane volume fraction (0-1)
    • getBiogasOutStream

      public StreamInterface getBiogasOutStream()
      Returns the biogas outlet stream.
      Returns:
      biogas outlet stream, or null if not yet run
    • getDigestateOutStream

      public StreamInterface getDigestateOutStream()
      Returns the digestate outlet stream.
      Returns:
      digestate outlet stream, or null if not yet run
    • getBiogasFlowRateNm3PerDay

      public double getBiogasFlowRateNm3PerDay()
      Returns the biogas flow rate in Nm3/day.
      Returns:
      biogas flow rate
    • getMethaneProductionNm3PerDay

      public double getMethaneProductionNm3PerDay()
      Returns the methane production rate in Nm3/day.
      Returns:
      methane production rate
    • getMethaneContentPercent

      public double getMethaneContentPercent()
      Returns the methane content as a volume percent.
      Returns:
      methane volume percent
    • getOrganicLoadingRate

      public double getOrganicLoadingRate()
      Returns the organic loading rate in kg VS / (m3 * day).
      Returns:
      organic loading rate
    • getHydraulicRetentionTimeDays

      public double getHydraulicRetentionTimeDays()
      Returns the hydraulic retention time in days.
      Returns:
      HRT in days
    • getActualVsDestruction

      public double getActualVsDestruction()
      Returns the actual VS destruction achieved.
      Returns:
      VS destruction (0-1)
    • getOutletStreams

      public List<StreamInterface> getOutletStreams()
      Returns all outlet streams produced by this equipment. Subclasses override to report their specific outlets. Used by graph builders, DEXPI export, and auto-instrumentation to discover topology without instanceof checks.
      Specified by:
      getOutletStreams in interface ProcessEquipmentInterface
      Overrides:
      getOutletStreams in class TwoPortEquipment
      Returns:
      unmodifiable list of outlet streams (empty by default)
    • run

      public void run(UUID id)
      Runs the anaerobic digester simulation.
      Specified by:
      run in interface SimulationInterface
      Overrides:
      run in class Fermenter
      Parameters:
      id - UUID for this run
    • updateTemperatureRegime

      private void updateTemperatureRegime()
      Updates the temperature regime classification based on digester temperature.
    • getResults

      public Map<String,Object> getResults()
      Returns a map of key results from the digester simulation.
      Returns:
      map of result name to value
    • toJson

      public String toJson()
      Returns a JSON string with the digester results.
      Specified by:
      toJson in interface ProcessEquipmentInterface
      Overrides:
      toJson in class StirredTankReactor
      Returns:
      JSON results string
    • toString

      public String toString()
      Overrides:
      toString in class Object