Skip to main content

EpanetWrapper Design Documentation

Architecture Overview​

EpanetWrapper is designed as a .NET wrapper for EPANET's native functions, providing a managed interface to the EPANET simulation engine. It implements the IDisposable pattern for proper resource management and provides a type-safe interface to EPANET's functionality.

Technical Specifications​

  • Target Framework: .NET 8.0
  • Platform: x64
  • Architecture: Class Library

Component Architecture​

Core Components​

  1. Native Interface Layer

    • P/Invoke declarations
    • Memory management
    • Error handling
    • Type conversions
  2. Simulation Control

    • Hydraulic solver interface
    • Water quality solver interface
    • Network topology management
    • Results collection
  3. Resource Management

    • Memory allocation
    • Resource cleanup
    • Error recovery
    • Performance optimization

Dependencies​

Internal Project References​

  • HTLogger (Internal logging system)

Native Dependencies​

  • EPANET native libraries (epanet2.dll)

Class Structure​

Main Class: EpanetWrapper​

public partial class EpanetWrapper : IDisposable
{
// Properties
public string InputFile { get; private set; }
public string MsxFile { get; private set; }
public string ReportFile { get; private set; }
public string OutputFile { get; private set; }
public IntPtr Project { get; private set; }
public bool IsOpen { get; private set; }
public bool IsOpenH { get; private set; }
public bool IsOpenQ { get; private set; }
public HTLogger Logger { get; private set; }

// Core Methods
public bool Startup(bool doQuality, string msxFile)
public bool RunNextHQ(bool doQuality, ref long t, ref long timeToNextHydraulicEvent, ref long qt, ref long qstep)
public void Dispose()
}

Data Flow Architecture​

Initialization Flow​

Simulation Flow​

Memory Management​

  • Implements IDisposable pattern
  • Proper cleanup of native resources
  • Memory leak prevention
  • Resource state tracking

Error Handling​

  • EPANET error code translation
  • Exception management
  • Error logging
  • Recovery procedures

Performance Considerations​

  • Native call optimization
  • Memory usage optimization
  • Resource management
  • Thread safety

Integration Architecture​

  • Clean interface design
  • Type-safe method calls
  • Resource lifecycle management
  • Error propagation

Future Architecture Considerations​

  • Additional EPANET features
  • Performance optimizations
  • Memory management improvements
  • Error handling enhancements