Comments (2)
For example if we have 'topmodel' and 'cfe' variables names of
- cfe-infiltration-excess
- topmodel-infiltration-excess
could be generated. This names would be checked to see if there was a known conversion for the output that would allow the name to be changed to 'infiltration-excess' when variable names match expected units.
from ngen.
So, as I see things:
- The framework needs a source for globally unique variable identifiers for what is going into the ngen netcdf output
- BMI module themselves cannot fulfill this (implicitly or explicitly), because of the nature of BMI; problematic examples include:
- hypothetically, two independent TOPMODEL implementations get written and someone wants to use them both in ngen
- someone wants to use two different versions/variants/compilations of a module in different places within a run (I want to say this is already a practical possibility with CFE)
- that basically leaves the runtime configuration to be this source
- the framework must create a scope for such identifiers and the entities for managing it, with these being responsible for either:
- all relevant BMI module variables, or
- all relevant BMI modules themselves (which can then also handle the variables)
In either case, something dedicated to explicitly defining things within this scope will have to be added to the realization config, either centrally or in each formulation.
We might could leverage the variable names mapping capabilities, but additional restrictions would need to be enforced, on a different scope than those currently in place for it. It'd probably be better to just add something similar strictly for aliasing variables within the netcdf output scope.
We could also leverage model_type_name
from realization configs, but we'd need to add a way to ensure two modules with the same values for this really are the same thing, and also perhaps that two of the same module usages receive the same model_type_name
.
Along those lines, while this risks being premature optimization, it might be wise to:
- Centralize the definitions of all loaded BMI modules within the realization config
- Include things like a globally-unique name/identifier and package/library file here
- Do not move things like variable name mapping or init config path here
- Potentially add support for other things at this level (now or later), like equivalences and associations between output variables from different modules, automatic conversions to desired units, etc.
- Use reference to the BMI module definitions within formulations, alongside formulation specific details like init config paths
from ngen.
Related Issues (20)
- Gridded Data Selectors HOT 3
- Refactor DataProvider::get_values interface and implementations to avoid excess allocation and copying
- Build System not finding system versions of pybind installed by conda HOT 1
- Xarray version conflict between t-route and LSTM
- Update internal use of old macros HOT 2
- Update ACTIVATE_PYTHON macro to NGEN_WITH_PYTHON (or NGEN_WITH_ROUTING, as appropriate) HOT 1
- Ngen shows a NetCDF file closing error after finishing the run when using NetCDF forcing file HOT 2
- Control flow issue in subdivide_hydrofabric HOT 1
- Update all C++ BMI modules to reference virtual destructor HOT 1
- Rebuild ngen and all BMI modules after ngen#832
- Update submodules for ABI compatability HOT 1
- Update `pybind11` submodule to include support for `numpy>=2.0`
- No output written if `output_root` is specified in realization config and does not exist or is a file HOT 1
- Support catchment `{{id}}` substitution in `init_config` field of global single module formulations
- Print python interpreter path (if applicable) during startup when quiet mode is enabled HOT 1
- Need for an output_root directory HOT 2
- Implement a simulation clock type
- Output realization file from each MPI processor
- Using different SMP initial configurations for Topmodel and LASAM hydrological model
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from ngen.