|
51 | 51 | "quantile",
|
52 | 52 | "scale",
|
53 | 53 | "sum",
|
| 54 | + "change_datatype", |
54 | 55 | ]
|
55 | 56 |
|
56 | 57 |
|
@@ -94,14 +95,19 @@ def _clone(
|
94 | 95 | start_time: datetime | None = None,
|
95 | 96 | timestep: float | None = None,
|
96 | 97 | items: Sequence[int | DfsDynamicItemInfo] | None = None,
|
| 98 | + datatype: int | None = None, |
97 | 99 | ) -> DfsFile:
|
98 | 100 | source = DfsFileFactory.DfsGenericOpen(str(infilename))
|
99 | 101 | fi = source.FileInfo
|
100 | 102 |
|
101 | 103 | builder = DfsBuilder.Create(fi.FileTitle, "mikeio", __dfs_version__)
|
102 | 104 |
|
103 | 105 | # Set up the header
|
104 |
| - builder.SetDataType(fi.DataType) |
| 106 | + if datatype is None: |
| 107 | + builder.SetDataType(fi.DataType) |
| 108 | + else: |
| 109 | + builder.SetDataType(datatype) |
| 110 | + |
105 | 111 | builder.SetGeographicalProjection(fi.Projection)
|
106 | 112 |
|
107 | 113 | # Copy time axis
|
@@ -959,3 +965,49 @@ def _get_repeated_items(
|
959 | 965 | new_items.append(item)
|
960 | 966 |
|
961 | 967 | return new_items
|
| 968 | + |
| 969 | + |
| 970 | +def change_datatype( |
| 971 | + infilename: str | pathlib.Path, |
| 972 | + outfilename: str | pathlib.Path, |
| 973 | + datatype: int, |
| 974 | +) -> None: |
| 975 | + """Change datatype of a DFS file. |
| 976 | +
|
| 977 | + The data type tag is used to classify the file within a specific modeling context, |
| 978 | + such as MIKE 21. There is no global standard for these tags—they are interpreted |
| 979 | + locally within a model setup. |
| 980 | +
|
| 981 | + Application developers can use these tags to classify files such as |
| 982 | + bathymetries, input data, or result files according to their own conventions. |
| 983 | +
|
| 984 | + Default data type values assigned by MikeIO when creating new files are: |
| 985 | + - dfs0: datatype=1 |
| 986 | + - dfs1-3: datatype=0 |
| 987 | + - dfsu: datatype=2001 |
| 988 | +
|
| 989 | + Parameters |
| 990 | + ---------- |
| 991 | + infilename : str | pathlib.Path |
| 992 | + input filename |
| 993 | + outfilename : str | pathlib.Path |
| 994 | + output filename |
| 995 | + datatype: int |
| 996 | + DataType to be used for the output file |
| 997 | +
|
| 998 | + Examples |
| 999 | + -------- |
| 1000 | + >>> change_datatype("in.dfsu", "out.dfsu", datatype=107) |
| 1001 | +
|
| 1002 | + """ |
| 1003 | + dfs_out = _clone(infilename, outfilename, datatype=datatype) |
| 1004 | + dfs_in = DfsFileFactory.DfsGenericOpen(infilename) |
| 1005 | + |
| 1006 | + # Copy dynamic item data |
| 1007 | + sourceData = dfs_in.ReadItemTimeStepNext() |
| 1008 | + while sourceData: |
| 1009 | + dfs_out.WriteItemTimeStepNext(sourceData.Time, sourceData.Data) |
| 1010 | + sourceData = dfs_in.ReadItemTimeStepNext() |
| 1011 | + |
| 1012 | + dfs_out.Close() |
| 1013 | + dfs_in.Close() |
0 commit comments