From ce2c823a7785a7c80dcd723d172b7e5510c16da8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Eide?= Date: Tue, 5 Sep 2023 17:22:15 +0200 Subject: [PATCH] Save fields as 32 bit float --- src/ert/_c_wrappers/enkf/config/field_config.py | 4 ++-- src/ert/storage/field_utils/field_utils.py | 10 ++++++---- src/ert/storage/field_utils/grdecl_io.py | 10 ++++++---- src/ert/storage/field_utils/roff_io.py | 2 +- 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/ert/_c_wrappers/enkf/config/field_config.py b/src/ert/_c_wrappers/enkf/config/field_config.py index f8a57a3bc43..fd144716cf5 100644 --- a/src/ert/_c_wrappers/enkf/config/field_config.py +++ b/src/ert/_c_wrappers/enkf/config/field_config.py @@ -104,8 +104,8 @@ def mask(self): def field_transform( - data: npt.NDArray[np.double], transform_name: Optional[str] -) -> npt.NDArray[np.double]: + data: npt.NDArray[np.float32], transform_name: Optional[str] +) -> npt.NDArray[np.float32]: if transform_name is None: return data return TRANSFORM_FUNCTIONS[transform_name](data) diff --git a/src/ert/storage/field_utils/field_utils.py b/src/ert/storage/field_utils/field_utils.py index e56babe5a50..fe9b9ed3bf4 100644 --- a/src/ert/storage/field_utils/field_utils.py +++ b/src/ert/storage/field_utils/field_utils.py @@ -113,7 +113,7 @@ def read_field( field_name: str, mask: npt.NDArray[np.bool_], shape: Shape, -) -> np.ma.MaskedArray[Any, np.dtype[np.double]]: +) -> np.ma.MaskedArray[Any, np.dtype[np.float32]]: path = Path(field_path) ext = path.suffix if ext == ".roff": @@ -125,17 +125,19 @@ class _Path: results = import_roff(_Path(str(field_path)), field_name) values = results["values"] elif ext == ".grdecl": - values = read_grdecl_3d_property(path, field_name, shape, dtype=np.double) + values = read_grdecl_3d_property(path, field_name, shape, dtype=np.float32) elif ext == ".bgrdecl": values = import_bgrdecl(field_path, field_name, shape) else: raise ValueError(f'Could not read {field_path}. Unrecognized suffix "{ext}"') - + if np.issubdtype(values.dtype, np.floating) and values.dtype == np.float64: + # RMS can only work with 32 bit roff files + values = values.astype(np.float32) return np.ma.MaskedArray(data=values, mask=mask, fill_value=np.nan) # type: ignore def save_field( - field: np.ma.MaskedArray[Any, np.dtype[np.double]], + field: np.ma.MaskedArray[Any, np.dtype[np.float32]], field_name: str, output_path: _PathLike, file_format: str, diff --git a/src/ert/storage/field_utils/grdecl_io.py b/src/ert/storage/field_utils/grdecl_io.py index d7bcbe2ee86..c1a3e3bc381 100644 --- a/src/ert/storage/field_utils/grdecl_io.py +++ b/src/ert/storage/field_utils/grdecl_io.py @@ -158,7 +158,7 @@ def read_grdecl_3d_property( keyword: str, dimensions: Tuple[int, int, int], dtype: npt.DTypeLike = float, -) -> npt.NDArray[np.double]: +) -> npt.NDArray[np.float32]: """ Read a 3d grid property from a grdecl file, see open_grdecl for description of format. @@ -195,7 +195,7 @@ def import_bgrdecl( file_path: Union[str, os.PathLike[str]], field_name: str, dimensions: Tuple[int, int, int], -) -> Optional[npt.NDArray[np.double]]: +) -> Optional[npt.NDArray[np.float32]]: field_name = field_name.strip() with open(file_path, "rb") as f: for entry in ecl_data_io.lazy_read(f): @@ -205,14 +205,16 @@ def import_bgrdecl( if np.issubdtype(values.dtype, np.integer): values = values.astype(np.int32) else: - values = values.astype(np.float64) + values = values.astype(np.float32) return values.reshape(dimensions, order="F") # type: ignore return None # pylint: disable=too-many-arguments def export_grdecl( - values: Union[np.ma.MaskedArray[Any, np.dtype[np.double]], npt.NDArray[np.double]], + values: Union[ + np.ma.MaskedArray[Any, np.dtype[np.float32]], npt.NDArray[np.float32] + ], file_path: Union[str, os.PathLike[str]], param_name: str, binary: bool = False, diff --git a/src/ert/storage/field_utils/roff_io.py b/src/ert/storage/field_utils/roff_io.py index 8a926e672ab..294cf1c5712 100644 --- a/src/ert/storage/field_utils/roff_io.py +++ b/src/ert/storage/field_utils/roff_io.py @@ -14,7 +14,7 @@ def export_roff( - data: np.ma.MaskedArray[Any, np.dtype[np.double]], + data: np.ma.MaskedArray[Any, np.dtype[np.float32]], filelike: Union[TextIO, BinaryIO, _PathLike], parameter_name: str, binary: bool = True,