A Rust interface for chemical thermodynamics calculations using ChemApp, providing safe and ergonomic access to native thermochemical equilibrium routines.
chemapp-rs is a Rust library that wraps and interfaces with ChemApp, a widely used thermochemical calculation engine (provided by GTT Technologies).
This crate provides:
- Safe Rust abstractions over native ChemApp bindings
- Structured error handling
- High-level calculation utilities
- Modular design for extensibility
It is designed for:
- Thermodynamic equilibrium calculations
- Chemical process simulations
- Scientific computing workflows
- ๐ฌ Interface to ChemApp native library
- ๐งฎ Thermodynamic calculation utilities
- โ๏ธ Safe wrapper around unsafe FFI calls
- ๐งฑ Modular architecture
- โ Robust error handling
- ๐ Interaction modeling support
- Language: Rust
- FFI: Native bindings (ChemApp)
- Architecture: Modular Rust crate
src/
โโโ lib.rs # Library entry point
โโโ main.rs # Example / CLI entry
โโโ calculator.rs # Core calculation logic
โโโ interactions.rs # Interaction modeling
โโโ native.rs # FFI bindings to ChemApp
โโโ defs.rs # Constants and definitions
โโโ error.rs # Error handling
git clone https://github.com/evnekdev/chemapp-rs.git
cd chemapp-rscargo buildcargo runThis crate depends on ChemApp, which is:
- Proprietary software
- Must be installed separately
- Requires proper licensing
Ensure:
- ChemApp libraries are installed
- Environment variables / linker paths are configured correctly
Example (conceptual):
use chemapp_rs::calculator::Calculator;
fn main() {
let mut calculator = Calculator::from_library(r"ca_vc_e_local.dll", r"c:\_WORK\Continuous\diagrams\007_Al2O3-SiO2\BETA_Al-Si-O.dat").unwrap();
calculator.set_transform(&["SiO2","Al2O3"]);
calculator.calculate_isothermal_d(&dvector![0.1, 0.9], 2200.0);
for idx in (0..100).components_valid(&calculator).components_names(&calculator) {
println!("idx = {:?}", &idx);
}
for idx in (0..100).phases_valid(&calculator).phases_status_eliminated(&calculator).phases_names(&calculator) {
println!("idx = {:?}", &idx);
}
for idx in (0..100).phases_valid(&calculator).phases_constituents(&calculator).constituents_hm(&calculator){
println!("idx = {:?}", &idx);
}
}- Low-level FFI bindings
- Unsafe interface to ChemApp
- High-level API
- Encapsulates computation workflows
- Models interactions between components
- Custom error types
- Safe error propagation
- Constants and shared definitions
cargo test- Requires external ChemApp installation
- Limited by ChemApp API capabilities
- Platform-specific linking considerations
- Improve documentation
- Add more high-level APIs
- Expand examples
- Improve error reporting
- Cross-platform support enhancements
Contributions are welcome!
- Fork the repository
- Create a branch
- Commit changes
- Open a Pull Request
Report bugs or request features:
https://github.com/evnekdev/chemapp-rs/issues
MIT
Evgenii Nekhoroshev
https://github.com/evnekdev