|
16 | 16 | import warnings
|
17 | 17 | import numpy as np
|
18 | 18 |
|
| 19 | + |
19 | 20 | import matplotlib.pyplot as plt
|
20 | 21 | from matplotlib.colors import LogNorm
|
21 | 22 |
|
|
29 | 30 | data_misfit,
|
30 | 31 | regularization,
|
31 | 32 | )
|
32 |
| -from pymatsolver import Pardiso |
| 33 | + |
| 34 | +try: |
| 35 | + from pymatsolver import Pardiso |
| 36 | + |
| 37 | + pardiso_imported = True |
| 38 | +except ImportError: |
| 39 | + warnings.warn( |
| 40 | + "Pardiso not installed see https://github.com/simpeg/pydiso/blob/main/README.md." |
| 41 | + ) |
| 42 | + pardiso_imported = False |
33 | 43 |
|
34 | 44 | # from dask.distributed import Client, LocalCluster
|
35 | 45 | from mtpy.modeling.simpeg.data_2d import Simpeg2DData
|
@@ -58,9 +68,13 @@ def __init__(self, dataframe, data_kwargs={}, mesh_kwargs={}, **kwargs):
|
58 | 68 | self.ax = self.make_mesh()
|
59 | 69 | self.air_conductivity = 1e-8
|
60 | 70 | self.initial_conductivity = 1e-2
|
61 |
| - self.solver = "pardiso" |
| 71 | + if pardiso_imported: |
| 72 | + self.solver = "pardiso" |
| 73 | + self._solvers_dict = {"pardiso": Pardiso} |
62 | 74 |
|
63 |
| - self._solvers_dict = {"pardiso": Pardiso} |
| 75 | + else: |
| 76 | + self.solver = None |
| 77 | + self._solvers_dict = {} |
64 | 78 |
|
65 | 79 | # regularization parameters
|
66 | 80 | self.alpha_s = 1e-5
|
@@ -175,31 +189,54 @@ def conductivity_map(self):
|
175 | 189 | """
|
176 | 190 | return self.exponent_map * self.active_map
|
177 | 191 |
|
| 192 | + def _get_solver(self): |
| 193 | + """ |
| 194 | + get solver |
| 195 | + """ |
| 196 | + try: |
| 197 | + return self._solvers_dict[self.solver] |
| 198 | + except KeyError: |
| 199 | + return None |
| 200 | + |
178 | 201 | @property
|
179 | 202 | def tm_simulation(self):
|
180 | 203 | """
|
181 | 204 | Simulation for TE Mode
|
182 | 205 | """
|
183 |
| - |
184 |
| - return nsem.simulation.Simulation2DElectricField( |
185 |
| - self.quad_tree.mesh, |
186 |
| - survey=self.data.tm_survey, |
187 |
| - sigmaMap=self.conductivity_map, |
188 |
| - solver=self._solvers_dict[self.solver], |
189 |
| - ) |
| 206 | + solver = self._get_solver() |
| 207 | + if solver is not None: |
| 208 | + return nsem.simulation.Simulation2DElectricField( |
| 209 | + self.quad_tree.mesh, |
| 210 | + survey=self.data.tm_survey, |
| 211 | + sigmaMap=self.conductivity_map, |
| 212 | + solver=solver, |
| 213 | + ) |
| 214 | + else: |
| 215 | + return nsem.simulation.Simulation2DElectricField( |
| 216 | + self.quad_tree.mesh, |
| 217 | + survey=self.data.tm_survey, |
| 218 | + sigmaMap=self.conductivity_map, |
| 219 | + ) |
190 | 220 |
|
191 | 221 | @property
|
192 | 222 | def te_simulation(self):
|
193 | 223 | """
|
194 | 224 | Simulation for TE Mode
|
195 | 225 | """
|
196 |
| - |
197 |
| - return nsem.simulation.Simulation2DMagneticField( |
198 |
| - self.quad_tree.mesh, |
199 |
| - survey=self.data.te_survey, |
200 |
| - sigmaMap=self.conductivity_map, |
201 |
| - solver=self._solvers_dict[self.solver], |
202 |
| - ) |
| 226 | + solver = self._get_solver() |
| 227 | + if solver is not None: |
| 228 | + return nsem.simulation.Simulation2DMagneticField( |
| 229 | + self.quad_tree.mesh, |
| 230 | + survey=self.data.te_survey, |
| 231 | + sigmaMap=self.conductivity_map, |
| 232 | + solver=solver, |
| 233 | + ) |
| 234 | + else: |
| 235 | + nsem.simulation.Simulation2DMagneticField( |
| 236 | + self.quad_tree.mesh, |
| 237 | + survey=self.data.te_survey, |
| 238 | + sigmaMap=self.conductivity_map, |
| 239 | + ) |
203 | 240 |
|
204 | 241 | @property
|
205 | 242 | def te_data_misfit(self):
|
|
0 commit comments