1.0.9 โ€ข Published 1 year ago

@sctg/aga8-js v1.0.9

Weekly downloads
-
License
AGPL-3.0-only
Repository
github
Last release
1 year ago

AGA8 GERG-2008, GROSS and DETAIL Gas Properties Calculator

npm version Build Status License Documentation

High-performance WebAssembly implementation of the GERG-2008 equation of state and AGA8 methods for natural gas properties calculations. This package provides JavaScript/TypeScript bindings to the industry-standard algorithms for precise gas property calculations.

Star the project

If you appreciate my work, please consider giving it a star! ๐Ÿคฉ

๐ŸŒŸ Features

  • Three Calculation Methods:

    • ๐Ÿ“Š GERG-2008 (Reference equations for high-accuracy calculations)
    • ๐Ÿ” Detail (AGA8 Part 1 method for precise gas mixtures)
    • ๐Ÿ“ˆ Gross (AGA8 Part 2 method for simplified calculations)
  • Complete Gas Support:

    • ๐Ÿงช Full support for all 21 gas components defined by AGA8
    • ๐ŸŽฏ High-precision calculations for natural gas mixtures
    • ๐ŸŒก๏ธ Wide range of temperature and pressure conditions
  • Technical Excellence:

    • โšก WebAssembly-powered for near-native performance
    • ๐Ÿ“ฆ Tree-shakeable npm package
    • ๐Ÿ’ช TypeScript type definitions included
    • ๐Ÿ“š Comprehensive API documentation

๐Ÿš€ Live AGA8 Demo

Try it now at Lasersmart AGA8!

View the demo source code in our Vue.js implementation.

๐Ÿš€ Live sonic nozzle Demo

Try it now at Lasersmart Sonic Nozzle!

๐Ÿ“ฆ Installation

npm install @sctg/aga8-js

๐Ÿ’ป Quick Start

import { AGA8wasm, type GasMixture } from '@sctg/aga8-js';

// Initialize AGA8 module
const AGA8 = await AGA8wasm();
AGA8.SetupGERG();

// Define gas mixture (94% methane, 5% CO2, 1% helium)
const mixture: GasMixture = {
    methane: 0.94,
    nitrogen: 0,
    carbon_dioxide: 0.05,
    ethane: 0,
    propane: 0,
    isobutane: 0,
    n_butane: 0,
    isopentane: 0,
    n_pentane: 0,
    n_hexane: 0,
    n_heptane: 0,
    n_octane: 0,
    n_nonane: 0,
    n_decane: 0,
    hydrogen: 0,
    oxygen: 0,
    carbon_monoxide: 0,
    water: 0,
    hydrogen_sulfide: 0,
    helium: 0.01,
    argon: 0
}

// Calculate properties
const molarMass = AGA8.MolarMassGERG(mixture);
const { D: density } = AGA8.DensityGERG(0, 400, 50000, mixture);
const properties = AGA8.PropertiesGERG(400, density, mixture);

console.log('Results:', {
  molarMass: `${molarMass.toFixed(4)} g/mol`,
  density: `${density.toFixed(4)} mol/L`,
  compressibility: properties.Z.toFixed(6),
  soundSpeed: `${properties.W.toFixed(2)} m/s`
});

Samples

๐Ÿ“š Documentation

๐Ÿ› ๏ธ Development

Prerequisites

  • Node.js โ‰ฅ 22.0.0
  • Emscripten SDK โ‰ฅ 4.0.0
  • CMake โ‰ฅ 3.10

Building from Source

# Emscripten SDK installation
# Clone repository
git clone https://github.com/emscripten-core/emsdk.git
cd emsdk
# Download and install the 4.0.1 SDK
./emsdk install 4.0.1
./emsdk activate 4.0.1
source ./emsdk_env.sh
# WebAssembly module build
# Clone repository
git clone https://github.com/sctg-development/aga8-js.git
cd aga8-js

# Install dependencies
npm install

# Build WebAssembly module
npm run build

# Run tests
npm test

๐Ÿค Contributing

We welcome contributions!

๐Ÿ“„ License

  • AGA8-JS: GNU Affero General Public License v3.0
  • Original AGA8 Implementation: Public Domain (NIST)

๐Ÿ™ Acknowledgments

  • Original AGA8 implementation by the National Institute of Standards and Technology (NIST)
  • WebAssembly port, AGA8 modifications and maintenance by Ronan LE MEILLAT

๐Ÿ“ง Support

1.0.9

1 year ago

1.0.8

1 year ago

1.0.7

1 year ago

1.0.6

1 year ago

1.0.5

1 year ago

1.0.4

1 year ago

1.0.3

1 year ago

1.0.2

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago