def M(self): """ M: ndarray Magnetization matrix """ if getattr(self, "_M", None) is None: if self.modelType == "vector": self._M = sp.identity(self.nC) * self.survey.source_field.parameters[0] else: mag = mat_utils.dip_azimuth2cartesian( np.ones(self.nC) * self.survey.source_field.parameters[1], np.ones(self.nC) * self.survey.source_field.parameters[2], ) self._M = sp.vstack( ( sdiag(mag[:, 0] * self.survey.source_field.parameters[0]), sdiag(mag[:, 1] * self.survey.source_field.parameters[0]), sdiag(mag[:, 2] * self.survey.source_field.parameters[0]), ) ) return self._M
def tmi_projection(self): if getattr(self, "_tmi_projection", None) is None: # Convert from north to cartesian self._tmi_projection = mat_utils.dip_azimuth2cartesian( self.survey.source_field.parameters[1], self.survey.source_field.parameters[2], ) return self._tmi_projection
# Find cells active in the forward modeling (cells below surface) ind_active = surface2ind_topo(mesh, xyz_topo) # Define mapping from model to active cells nC = int(ind_active.sum()) model_map = maps.IdentityMap(nP=3 * nC) # model has 3 parameters for each cell # Define susceptibility for each cell susceptibility_model = background_susceptibility * np.ones(ind_active.sum()) ind_sphere = model_builder.getIndicesSphere(np.r_[0.0, 0.0, -45.0], 15.0, mesh.gridCC) ind_sphere = ind_sphere[ind_active] susceptibility_model[ind_sphere] = sphere_susceptibility # Compute the unit direction of the inducing field in Cartesian coordinates field_direction = mat_utils.dip_azimuth2cartesian(field_inclination, field_declination) # Multiply susceptibility model to obtain the x, y, z components of the # effective susceptibility contribution from induced magnetization. susceptibility_model = np.outer(susceptibility_model, field_direction) # Define the effective susceptibility contribution for remanent magnetization to have a # magnitude of 0.006 SI, with inclination -45 and declination 90 remanence_inclination = -45.0 remanence_declination = 90.0 remanence_susceptibility = 0.01 remanence_model = np.zeros(np.shape(susceptibility_model)) effective_susceptibility_sphere = ( remanence_susceptibility * mat_utils.dip_azimuth2cartesian( remanence_inclination, remanence_declination))
# Find cells active in the forward modeling (cells below surface) ind_active = surface2ind_topo(mesh, xyz_topo) # Define mapping from model to active cells nC = int(ind_active.sum()) model_map = maps.IdentityMap(nP=3 * nC) # model has 3 parameters for each cell # Define susceptibility for each cell susceptibility_model = background_susceptibility * np.ones(ind_active.sum()) ind_sphere = model_builder.getIndicesSphere(np.r_[0.0, 0.0, -45.0], 15.0, mesh.gridCC) ind_sphere = ind_sphere[ind_active] susceptibility_model[ind_sphere] = sphere_susceptibility # Compute the unit direction of the inducing field in Cartesian coordinates field_direction = mat_utils.dip_azimuth2cartesian(field_inclination, field_declination) # Multiply susceptibility model to obtain the x, y, z components of the # effective susceptibility contribution from induced magnetization. susceptibility_model = np.outer(susceptibility_model, field_direction) # Define the effective susceptibility contribution for remanent magnetization to have a # magnitude of 0.006 SI, with inclination -45 and declination 90 remanence_inclination = -45.0 remanence_declination = 90.0 remanence_susceptibility = 0.01 remanence_model = np.zeros(np.shape(susceptibility_model)) effective_susceptibility_sphere = ( remanence_susceptibility * mat_utils.dip_azimuth2cartesian(remanence_inclination, remanence_declination)