mirror of
https://git.gfz-potsdam.de/naaice/poet.git
synced 2025-12-15 20:38:23 +01:00
5.3 KiB
5.3 KiB
POET Class Diagram
classDiagram
class RuntimeParameters {
+bool print_progress
+uint32_t work_package_size
+bool use_dht
+uint32_t dht_size
+uint32_t dht_snaps
+bool use_interp
+uint32_t interp_size
+uint32_t interp_min_entries
+uint32_t interp_bucket_entries
+bool use_ai_surrogate
+bool as_rds
+bool as_qs
+string out_ext
+string out_dir
+vector~double~ timesteps
+uint32_t checkpoint_interval
+uint32_t stab_interval
+double zero_abs
+vector~double~ mape_threshold
+vector~uint32_t~ ctrl_cell_ids
+Rcpp::List init_params
}
class Field {
+GetProps() vector~string~
+AsVector() vector~double~
+GetRequestedVecSize() size_t
+update(Field) void
+asSEXP() SEXP
+operator[](string) vector~double~
}
class InitialList {
-RInside& R
+InitialList(RInside&)
+importList(Rcpp::List, bool) void
+getChemistryInit() ChemistryInit
+getDiffusionInit() DiffusionInit
+getInitialGrid() Field
}
class ChemistryModule {
+ChemistryModule(uint32_t, ChemistryInit, MPI_Comm)
+simulate(double) void
+getField() Field&
+WorkerLoop() void
+masterSetField(Field) void
+masterEnableSurrogates(SurrogateSetup) void
+SetControlCellIds(vector~uint32_t~) void
+SetControlModule(ControlModule*) void
+setProgressBarPrintout(bool) void
+set_ai_surrogate_validity_vector(SEXP) void
+MasterLoopBreak() void
+GetChemistryTime() double
+GetMasterLoopTime() double
+GetWorkerIdleTimings() vector~double~
+GetWorkerPhreeqcTimings() vector~double~
+GetWorkerDHTHits() vector~uint64_t~
+GetWorkerDHTEvictions() vector~uint64_t~
-Field field
-uint32_t work_package_size
-MPI_Comm comm
}
class DiffusionModule {
+DiffusionModule(DiffusionInit, Field)
+simulate(double) void
+getField() Field&
+getTransportTime() double
-Field field
}
class RInsidePOET {
+getInstance()$ RInsidePOET&
+parseEval(string) SEXP
+parseEvalQ(string) void
+operator[](string) Proxy
}
class ChemistryInit {
+dht_species SpeciesList
+ai_surrogate_input_script string
}
class DiffusionInit {
}
class SurrogateSetup {
+vector~string~ species_names
+array~double,2~ base_totals
+bool has_id
+bool use_dht
+uint32_t dht_size
+uint32_t dht_snaps
+string out_dir
+bool use_interp
+uint32_t interp_bucket_entries
+uint32_t interp_size
+uint32_t interp_min_entries
+bool use_ai_surrogate
}
class Main {
+main(int, char**) int
-parseInitValues(int, char**, RuntimeParameters&) int
-init_global_functions(RInside&) void
-call_master_iter_end(RInside&, Field&, Field&) void
-RunMasterLoop(RInsidePOET&, RuntimeParameters&, DiffusionModule&, ChemistryModule&, ControlModule&) Rcpp::List
-getControlCellIds(vector~uint32_t~&, int, MPI_Comm) void
-getSpeciesNames(Field&&, int, MPI_Comm) vector~string~
-getBaseTotals(Field&&, int, MPI_Comm) array~double,2~
-getHasID(Field&&, int, MPI_Comm) bool
}
Main --> RuntimeParameters : uses
Main --> InitialList : creates
Main --> ChemistryModule : creates
Main --> DiffusionModule : creates
Main --> RInsidePOET : uses
Main --> Field : exchanges
InitialList --> RInsidePOET : uses
InitialList --> Field : creates
InitialList --> ChemistryInit : provides
InitialList --> DiffusionInit : provides
ChemistryModule --> Field : manages
ChemistryModule --> ChemistryInit : initialized with
ChemistryModule --> SurrogateSetup : configured with
DiffusionModule --> Field : manages
DiffusionModule --> DiffusionInit : initialized with
ChemistryModule ..> DiffusionModule : exchanges Field data
DiffusionModule ..> ChemistryModule : exchanges Field data
RuntimeParameters --> ChemistryInit : contains
Key Relationships
- Main orchestrates the entire simulation, coordinating between modules
- InitialList parses R configuration and initializes all modules
- ChemistryModule and DiffusionModule exchange data via Field objects
- Field is the core data structure representing the simulation grid
- RInsidePOET provides the R runtime interface (singleton pattern)
- RuntimeParameters holds all command-line and configuration parameters
- SurrogateSetup configures advanced features (DHT, interpolation, AI surrogate)
Module Communication Flow
- Main reads configuration via
parseInitValues() InitialListimports R scripts and creates initialFieldChemistryModuleandDiffusionModuleare initialized with their respective configurations- In simulation loop:
DiffusionModule.simulate()updates transport fieldChemistryModulereceives updated field viaupdate()ChemistryModule.simulate()computes chemistryDiffusionModulereceives updated field back
- MPI communication handled internally by modules