Forcings .bc file¶
The forcings .bc files contain forcing data for point locations, for example time series input for a boundary condition. Various quantities and function types are supported.
The forcings file is represented by the classes below.
Model¶
Representation of a .bc file in various classes.
Most relevant classes are:
- ForcingModel: toplevel class containing the whole .bc file contents.
- ForcingBase subclasses: containing the actual data columns, for example: TimeSeries, HarmonicComponent, AstronomicComponent, HarmonicCorrection, AstronomicCorrection, Constant, T3D.
Astronomic (ForcingBase)
pydantic-model
¶
Subclass for a .bc file [Forcing] block with astronomic components data.
AstronomicCorrection (ForcingBase)
pydantic-model
¶
Subclass for a .bc file [Forcing] block with astronomic components correction data.
Constant (ForcingBase)
pydantic-model
¶
Subclass for a .bc file [Forcing] block with constant value data.
ForcingBase (DataBlockINIBasedModel)
pydantic-model
¶
The base class of a single [Forcing] block in a .bc forcings file.
Typically subclassed, for the specific types of forcing data, e.g, TimeSeries.
This model is for example referenced under a
ForcingModel.forcing[..].
Attributes:
| Name | Type | Description |
|---|---|---|
name |
str |
Unique identifier that identifies the location for this forcing data. |
function |
str |
Function type of the data in the actual datablock. |
quantityunitpair |
List[QuantityUnitPair] |
list of header line tuples for one or more quantities + their unit. Describes the columns in the actual datablock. |
validate(v)
classmethod
¶
Try to initialize subclass based on the function field.
This field is compared to each function field of the derived models of ForcingBase.
The derived model with an equal function type will be initialized.
Exceptions:
| Type | Description |
|---|---|
ValueError |
When the given type is not a known structure type. |
Source code in hydrolib/core/io/bc/models.py
@classmethod
def validate(cls, v):
"""Try to initialize subclass based on the `function` field.
This field is compared to each `function` field of the derived models of `ForcingBase`.
The derived model with an equal function type will be initialized.
Raises:
ValueError: When the given type is not a known structure type.
"""
# should be replaced by discriminated unions once merged
# https://github.com/samuelcolvin/pydantic/pull/2336
if isinstance(v, dict):
for c in cls.__subclasses__():
if (
c.__fields__.get("function").default.lower()
== v.get("function", "").lower()
):
v = c(**v)
break
else:
raise ValueError(
f"Function of {cls.__name__} with name={v.get('name', '')} and function={v.get('function', '')} is not recognized."
)
return v
ForcingData
¶
Data type that selects from three different types of forcing data: * a scalar float constant * "realtime" keyword, indicating externally controlled. * A ForcingModel coming from a .bc file.
ForcingGeneral (INIGeneral)
pydantic-model
¶
[General] section with .bc file metadata.
ForcingModel (INIModel)
pydantic-model
¶
The overall model that contains the contents of one .bc forcings file.
This model is for example referenced under a
ExtModel.boundary[..].forcingfile[..].
Attributes:
| Name | Type | Description |
|---|---|---|
general |
ForcingGeneral |
|
forcing |
List[ForcingBase] |
List of |
Harmonic (ForcingBase)
pydantic-model
¶
Subclass for a .bc file [Forcing] block with harmonic components data.
HarmonicCorrection (ForcingBase)
pydantic-model
¶
Subclass for a .bc file [Forcing] block with harmonic components correction data.
QHTable (ForcingBase)
pydantic-model
¶
Subclass for a .bc file [Forcing] block with Q-h table data.
QuantityUnitPair (tuple)
¶
A .bc file header lines tuple containing a quantity name and its unit.
__getnewargs__(self)
special
¶
Return self as a plain tuple. Used by copy and pickle.
Source code in hydrolib/core/io/bc/models.py
def __getnewargs__(self):
'Return self as a plain tuple. Used by copy and pickle.'
return _tuple(self)
__new__(_cls, quantity: str, unit: str)
special
staticmethod
¶
Create new instance of QuantityUnitPair(quantity, unit)
__repr__(self)
special
¶
Return a nicely formatted representation string
Source code in hydrolib/core/io/bc/models.py
def __repr__(self):
'Return a nicely formatted representation string'
return self.__class__.__name__ + repr_fmt % self
RealTime (str, Enum)
¶
Enum class containing the valid value for the "realtime" reserved keyword for real-time controlled forcing data, e.g., for hydraulic structures.
This class is used inside the ForcingData Union, to force detection of the realtime keyword, prior to considering it a filename.
realtime
¶
str: Realtime data source, externally provided
T3D (ForcingBase)
pydantic-model
¶
Subclass for a .bc file [Forcing] block with 3D timeseries data.
TimeInterpolation (str, Enum)
¶
An enumeration.
TimeSeries (ForcingBase)
pydantic-model
¶
Subclass for a .bc file [Forcing] block with timeseries data.
VerticalInterpolation (str, Enum)
¶
An enumeration.
VerticalPositionType (str, Enum)
¶
An enumeration.