Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions simpeg_drivers/components/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
18 changes: 14 additions & 4 deletions simpeg_drivers/options.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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,
Expand Down Expand Up @@ -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:
Expand All @@ -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):
Expand Down