diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b3120b0..8a44925b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/). ## [Unreleased] +### Fixed + +- [PR#593](https://github.com/SciTools/iris-esmf-regrid/pull/593) + Freed up memory that was being held onto by esmpy when initialising + regridders. + [@stephenworsley](https://github.com/stephenworsley) + ### Added - [PR#506](https://github.com/SciTools/iris-esmf-regrid/pull/506) diff --git a/src/esmf_regrid/esmf_regridder.py b/src/esmf_regrid/esmf_regridder.py index 8e4b891d..800fdbd3 100644 --- a/src/esmf_regrid/esmf_regridder.py +++ b/src/esmf_regrid/esmf_regridder.py @@ -113,12 +113,22 @@ def __init__( self.esmf_regrid_version = esmf_regrid.__version__ if precomputed_weights is None: self.esmf_version = esmpy.__version__ - weights_dict = _get_regrid_weights_dict( - src.make_esmf_field(), - tgt.make_esmf_field(), - regrid_method=method.value, - esmf_args=esmf_args, - ) + src_field = src.make_esmf_field() + src_sdo = src_field.grid + tgt_field = tgt.make_esmf_field() + tgt_sdo = tgt_field.grid + try: + weights_dict = _get_regrid_weights_dict( + src_field, + tgt_field, + regrid_method=method.value, + esmf_args=esmf_args, + ) + finally: + src_field.destroy() + src_sdo.destroy() + tgt_field.destroy() + tgt_sdo.destroy() self.weight_matrix = _weights_dict_to_sparse_array( weights_dict, (self.tgt._refined_size, self.src._refined_size),