YAML is a horrid format with far too many edge cases. We have switched to TOML. Further, we have completly reworked the framework so that 1. There is no longer any global config state. Config objects now must be passed between scopes by the caller. This will introduce some more friction but whill also make order of initialization clear 2. Config objects are now strongly typed and there is a single sourth of truth for any given config object baked in using the some struct.
30 lines
601 B
C++
30 lines
601 B
C++
#pragma once
|
|
#include <string>
|
|
|
|
struct PhysicsConfigOptions {
|
|
bool diffusion;
|
|
bool convection;
|
|
bool radiation;
|
|
std::array<int, 3> flags;
|
|
};
|
|
|
|
struct SimulationConfigOptions {
|
|
double time_step = 1;
|
|
double total_time = 10;
|
|
int output_frequency = 1;
|
|
};
|
|
|
|
struct OutputConfigOptions {
|
|
std::string directory = "./output";
|
|
std::string format = "hdf5";
|
|
bool save_plots = false;
|
|
};
|
|
|
|
struct TestConfigSchema {
|
|
std::string description;
|
|
std::string author;
|
|
|
|
PhysicsConfigOptions physics;
|
|
SimulationConfigOptions simulation;
|
|
OutputConfigOptions output;
|
|
}; |