From 3d0d5b770eb6ea9b87dfd3770d637fc3dc90c8bd Mon Sep 17 00:00:00 2001
From: "Mads M. Pedersen" <mmpe@dtu.dk>
Date: Tue, 14 Jan 2025 10:34:39 +0100
Subject: [PATCH] Load GaussianOverlapAvgModel table on first request

---
 .../rotor_avg_models/gaussian_overlap_model.py   | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/py_wake/rotor_avg_models/gaussian_overlap_model.py b/py_wake/rotor_avg_models/gaussian_overlap_model.py
index 1c0d574ae..f35443904 100644
--- a/py_wake/rotor_avg_models/gaussian_overlap_model.py
+++ b/py_wake/rotor_avg_models/gaussian_overlap_model.py
@@ -9,11 +9,17 @@ from py_wake.utils.grid_interpolator import GridInterpolator
 
 class GaussianOverlapAvgModel(RotorAvgModel):
     def __init__(self, filename=os.path.dirname(__file__) + f'/gaussian_overlap_.02_.02_128_512.nc'):
-        table = xr.load_dataarray(filename, engine='h5netcdf')
-        R_sigma = np.arange(0, 20.001, 0.01)
-        CW_sigma = np.arange(0, 10.01, 0.01)
-        dat = table.interp(R_sigma=R_sigma, CW_sigma=CW_sigma, method='cubic')
-        self.overlap_interpolator = GridInterpolator([R_sigma, CW_sigma], dat, bounds='limit')
+        self.filename = filename
+
+    @property
+    def overlap_interpolator(self):
+        if not hasattr(self, '_overlap_interpolator'):
+            table = xr.load_dataarray(self.filename, engine='h5netcdf')
+            R_sigma = np.arange(0, 20.001, 0.01)
+            CW_sigma = np.arange(0, 10.01, 0.01)
+            dat = table.interp(R_sigma=R_sigma, CW_sigma=CW_sigma, method='cubic')
+            self._overlap_interpolator = GridInterpolator([R_sigma, CW_sigma], dat, bounds='limit')
+        return self._overlap_interpolator
 
     def _calc_layout_terms(self, func, cw_ijlk, **kwargs):
         func(cw_ijlk=cw_ijlk * 0, **kwargs)
-- 
GitLab