Future Infrastructure API Reference
Quick reference for the future infrastructure APIs added to NeqSim.
ProcessSystem Convenience Methods
New methods added directly to ProcessSystem for easy access:
State Management
// Export current state
ProcessSystemState state = process.exportState();
// Save state to file
process.exportStateToFile("checkpoint.json");
// Load and apply state from file
process.loadStateFromFile("checkpoint.json");
Emissions Tracking
// Calculate emissions with default grid factor (0.4 kg CO2/kWh)
EmissionsReport report = process.getEmissions();
// Calculate emissions with custom grid factor
EmissionsReport norwayReport = process.getEmissions(0.05);
// Get total CO2 emissions directly (kg/hr)
double totalCO2 = process.getTotalCO2Emissions();
Safety Scenarios
// Generate single-failure scenarios
List<ProcessSafetyScenario> scenarios = process.generateSafetyScenarios();
// Generate combination scenarios (up to n simultaneous failures)
List<ProcessSafetyScenario> combinations = process.generateCombinationScenarios(2);
Batch Studies
// Create batch study builder
BatchStudy.Builder builder = process.createBatchStudy();
ProcessSystemState
State snapshot for checkpointing and version control.
Factory Method
ProcessSystemState state = ProcessSystemState.fromProcessSystem(process);
Configuration
state.setVersion("1.2.3");
state.setDescription("Post-tuning checkpoint");
state.setCreatedBy("engineer@company.com");
Persistence
// Save to file
state.saveToFile("model_v1.2.3.json");
// Load from file
ProcessSystemState loaded = ProcessSystemState.loadFromFile("model_v1.2.3.json");
// Validate integrity
boolean valid = loaded.validateIntegrity();
Accessors
String version = state.getVersion();
String name = state.getProcessName();
Instant timestamp = state.getTimestamp();
String json = state.toJson();
Application
// Create new ProcessSystem from state
ProcessSystem restored = state.toProcessSystem();
// Apply state to existing ProcessSystem
state.applyTo(existingProcess);
ModelMetadata
Lifecycle and calibration tracking.
Lifecycle Phases
public enum LifecyclePhase {
CONCEPT, // Early screening
DESIGN, // Detailed engineering
COMMISSIONING, // Construction/startup
OPERATION, // Live digital twin
LATE_LIFE, // Decommissioning
ARCHIVED // No longer active
}
Calibration Status
public enum CalibrationStatus {
UNCALIBRATED,
CALIBRATED,
IN_PROGRESS,
FRESHLY_CALIBRATED,
NEEDS_RECALIBRATION
}
Usage
ModelMetadata metadata = new ModelMetadata();
metadata.setAssetId("PLATFORM-A");
metadata.setAssetName("Gas Processing Platform A");
metadata.setLifecyclePhase(LifecyclePhase.OPERATION);
metadata.setResponsibleEngineer("jane.doe@company.com");
// Record validation
metadata.recordValidation("Matched well test", "TEST-001");
// Record modification
metadata.recordModification("Updated compressor curves");
// Update calibration
metadata.updateCalibration(CalibrationStatus.FRESHLY_CALIBRATED, 0.02);
// Check revalidation need
boolean needsRevalidation = metadata.needsRevalidation(90); // days
EmissionsTracker
CO2 equivalent emissions tracking.
Constructor
EmissionsTracker tracker = new EmissionsTracker(process);
Configuration
tracker.setGridEmissionFactor(0.05); // kg CO2/kWh (Norway)
Calculation
EmissionsReport report = tracker.calculateEmissions();
Emission Categories
| Category | Description |
|---|---|
COMPRESSION |
Power consumed by compressors |
EXPANSION |
Power generated by expanders (negative) |
PUMPING |
Power consumed by pumps |
HEATING |
Power consumed by electric heaters |
COOLING |
Power consumed by coolers |
FLARING |
Direct CO2 from flaring |
VENTING |
Direct methane/CO2 emissions |
EmissionsReport Methods
// Total emissions
double kgPerHr = report.getTotalCO2e("kg/hr");
double tonPerYr = report.getTotalCO2e("ton/yr");
// Power consumption
double kW = report.getTotalPower("kW");
double MW = report.getTotalPower("MW");
// Export
report.exportToCSV("emissions.csv");
report.exportToJSON("emissions.json");
String json = report.toJson(); // Get as JSON string
String summary = report.getSummary();
PredictionResult
Look-ahead prediction output.
Constructor
PredictionResult result = new PredictionResult(
Duration.ofHours(2), // horizon
"Base Case" // scenario name
);
Adding Predictions
result.addPredictedValue(
"separator.pressure",
new PredictedValue(52.5, 2.1, "bara") // mean, stddev, unit
);
PredictedValue Constructors
// With standard deviation
PredictedValue value = new PredictedValue(50.0, 2.5, "bara");
// With explicit bounds
PredictedValue value = new PredictedValue(50.0, 45.0, 55.0, "bara", 0.95);
// Deterministic
PredictedValue value = PredictedValue.deterministic(50.0, "bara");
Violation Handling
// Add violation
result.addViolation(new ConstraintViolation(...));
// Check for violations
if (result.hasViolations()) {
String summary = result.getViolationSummary();
String advice = result.getAdvisoryRecommendation();
}
Status
public enum PredictionStatus {
SUCCESS,
WARNING,
FAILED,
DATA_QUALITY_ISSUE
}
result.setStatus(PredictionStatus.SUCCESS);
SurrogateModelRegistry
ML model management.
Singleton Access
SurrogateModelRegistry registry = SurrogateModelRegistry.getInstance();
Registration
registry.register("flash-model", surrogateModel);
registry.register("flash-model", surrogateModel, metadata);
Prediction
// Direct prediction
double[] result = registry.get("flash-model").orElseThrow().predict(input);
// With automatic fallback
double[] result = registry.predictWithFallback(
"flash-model",
input,
this::physicsCalculation
);
Management
registry.saveModel("flash-model", "models/flash.ser");
registry.loadModel("flash-model", "models/flash.ser");
Optional<SurrogateMetadata> meta = registry.getMetadata("flash-model");
PhysicsConstraintValidator
AI action validation.
Constructor
PhysicsConstraintValidator validator = new PhysicsConstraintValidator(process);
Adding Limits
validator.addPressureLimit("separator", 10.0, 80.0, "bara");
validator.addTemperatureLimit("heater-outlet", 0.0, 300.0, "C");
validator.addFlowLimit("feed", 0.0, 1000.0, "kg/hr");
Configuration
validator.setMassBalanceTolerance(0.01); // 1%
validator.setEnergyBalanceTolerance(0.05); // 5%
validator.setEnforceMassBalance(true);
validator.setEnforceEnergyBalance(true);
Validation
Map<String, Double> proposedAction = new HashMap<>();
proposedAction.put("heater.duty", 5000000.0);
ValidationResult result = validator.validate(proposedAction);
if (result.isValid()) {
// Safe to apply
} else {
String reason = result.getRejectionReason();
List<ConstraintViolation> violations = result.getViolations();
}
// Validate current state
ValidationResult currentState = validator.validateCurrentState();
AutomaticScenarioGenerator
Safety scenario generation and execution.
Constructor
AutomaticScenarioGenerator generator = new AutomaticScenarioGenerator(process);
Failure Mode Configuration
// Add specific modes
generator.addFailureModes(
FailureMode.COOLING_LOSS,
FailureMode.VALVE_STUCK_CLOSED
);
// Or enable all
generator.enableAllFailureModes();
Generation
// Single failures
List<ProcessSafetyScenario> single = generator.generateSingleFailures();
// Combinations
List<ProcessSafetyScenario> combos = generator.generateCombinations(2);
Scenario Execution
// Run all single-failure scenarios
List<ScenarioRunResult> results = generator.runAllSingleFailures();
// Run specific scenarios
List<ScenarioRunResult> results = generator.runScenarios(scenarios);
// Get execution summary
String summary = generator.summarizeResults(results);
ScenarioRunResult
ScenarioRunResult result = results.get(0);
boolean success = result.isSuccessful();
String error = result.getErrorMessage();
Map<String, Double> values = result.getResultValues();
long timeMs = result.getExecutionTimeMs();
Analysis
List<EquipmentFailure> failures = generator.getIdentifiedFailures();
String summary = generator.getFailureModeSummary();
BatchStudy
Parallel parameter studies.
Builder Pattern
BatchStudy study = BatchStudy.builder(baseCase)
.name("ParameterStudy")
.vary("pressure", 20.0, 80.0, 7)
.vary("temperature", 50.0, 100.0, 5)
.addObjective("power", Objective.MINIMIZE, p -> getPower(p))
.addObjective("emissions", Objective.MINIMIZE, p -> getEmissions(p))
.parallelism(8)
.stopOnFailure(false)
.build();
Supported Parameter Paths
| Property | Equipment Types |
|---|---|
duty |
Heater, Cooler |
outletPressure |
Valve, Compressor, Pump |
outletTemperature |
Heater, Cooler |
percentValveOpening, cv |
Valve |
polytropicEfficiency, isentropicEfficiency |
Compressor |
temperature, flowRate |
Stream |
internalDiameter |
Separator |
Execution
BatchStudyResult result = study.run();
Result Analysis
int total = result.getTotalCases();
int completed = result.getCompletedCases();
int failed = result.getFailedCases();
Duration runtime = result.getTotalRuntime();
CaseResult best = result.getBestCase("power");
List<CaseResult> successful = result.getSuccessfulCases();
// Export results
result.exportToCSV("results.csv");
result.exportToJSON("results.json");
String json = result.toJson();
// Pareto front analysis
List<CaseResult> pareto = result.getParetoFront("power", "emissions");
Package Summary
| Package | Classes | Purpose |
|---|---|---|
lifecycle |
ProcessSystemState, ModelMetadata | State management, versioning |
sustainability |
EmissionsTracker, EmissionsReport | CO2e tracking |
advisory |
PredictionResult, PredictedValue | Look-ahead predictions |
ml.surrogate |
SurrogateModelRegistry, PhysicsConstraintValidator | ML integration |
safety.scenario |
AutomaticScenarioGenerator | Safety scenario generation |
util.optimization |
BatchStudy, BatchStudyResult | Parallel studies |