diff --git a/simpeg_drivers/components/models.py b/simpeg_drivers/components/models.py index 0650807e..d10df22b 100644 --- a/simpeg_drivers/components/models.py +++ b/simpeg_drivers/components/models.py @@ -637,10 +637,9 @@ def _get_value(self, model: float | NumericData) -> np.ndarray: if isinstance(model, NumericData): model = self.obj_2_mesh(model, self.driver.inversion_mesh.entity) model = (self.driver.inversion_mesh.permutation @ model).astype(model.dtype) - else: + elif isinstance(model, int | float): nc = self.driver.inversion_mesh.mesh.n_cells - if isinstance(model, int | float): - model *= np.ones(nc) + model *= np.ones(nc) return model diff --git a/simpeg_drivers/options.py b/simpeg_drivers/options.py index 0f796517..81fcbc96 100644 --- a/simpeg_drivers/options.py +++ b/simpeg_drivers/options.py @@ -17,6 +17,7 @@ import numpy as np from geoapps_utils.base import Options +from geoapps_utils.utils.numerical import weighted_average from geoh5py.data import ( BooleanData, DataAssociationEnum, @@ -29,7 +30,6 @@ from geoh5py.objects import DrapeModel, Grid2D, Octree, Points from geoh5py.objects.surveys.electromagnetics.base import BaseEMSurvey from geoh5py.ui_json import InputFile -from geoh5py.ui_json.utils import fetch_active_workspace from pydantic import ( AliasChoices, BaseModel, @@ -285,6 +285,8 @@ class ModelOptions(BaseModel): y_norm: float | FloatData | None = 2.0 z_norm: float | FloatData = 2.0 + _gradient_orientations: np.ndarray | None = None + @property def gradient_direction(self) -> np.ndarray: if self.gradient_orientations is None: @@ -306,12 +308,20 @@ def gradient_orientations(self) -> tuple(float, float): and clockwise from horizontal for dip. """ - if self.gradient_rotation is not None: + if self._gradient_orientations is None and self.gradient_rotation is not None: orientations = direction_and_dip(self.gradient_rotation) - return np.deg2rad(orientations) + angles = np.deg2rad(orientations) + # Deal with aircells here + orientations = weighted_average( + self.gradient_rotation.parent.centroids, + self.gradient_rotation.parent.centroids, + [angles[:, 0], angles[:, 1]], + ) + + self._gradient_orientations = np.vstack(orientations).T - return None + return self._gradient_orientations class ConductivityModelOptions(ModelOptions):