def convert_complexFaultSource(self, node): """ Convert the given node into a complex fault object. :param node: a node with tag areaGeometry :returns: a :class:`openquake.hazardlib.source.ComplexFaultSource` instance """ geom = node.complexFaultGeometry edges = self.geo_lines(geom) mfd = self.convert_mfdist(node) msr = valid.SCALEREL[~node.magScaleRel]() with context(self.fname, node): cmplx = source.ComplexFaultSource( source_id=node['id'], name=node['name'], tectonic_region_type=node.attrib.get('tectonicRegion'), mfd=mfd, rupture_mesh_spacing=self.complex_fault_mesh_spacing, magnitude_scaling_relationship=msr, rupture_aspect_ratio=~node.ruptAspectRatio, edges=edges, rake=~node.rake, temporal_occurrence_model=self.tom) return cmplx
def _complex_to_hazardlib(src, mesh_spacing, bin_width): """Convert a NRML complex fault source to the HazardLib equivalent. See :mod:`openquake.nrmllib.models` and :mod:`openquake.hazardlib.source`. :param src: :class:`openquake.nrmllib.models.ComplexFaultRuptureModel` instance. :param float mesh_spacing: Rupture mesh spacing, in km. :param float bin_width: Truncated Gutenberg-Richter MFD (Magnitude Frequency Distribution) bin width. :returns: The HazardLib representation of the input source. """ edges_wkt = [] edges_wkt.append(src.geometry.top_edge_wkt) edges_wkt.extend(src.geometry.int_edges) edges_wkt.append(src.geometry.bottom_edge_wkt) edges = [] for edge in edges_wkt: shapely_line = wkt.loads(edge) line = geo.Line([geo.Point(*x) for x in shapely_line.coords]) edges.append(line) mf_dist = _mfd_to_hazardlib(src.mfd, bin_width) msr = scalerel.get_available_magnitude_scalerel()[src.mag_scale_rel]() cmplx = source.ComplexFaultSource( source_id=src.id, name=src.name, tectonic_region_type=src.trt, mfd=mf_dist, rupture_mesh_spacing=mesh_spacing, magnitude_scaling_relationship=msr, rupture_aspect_ratio=src.rupt_aspect_ratio, edges=edges, rake=src.rake, ) return cmplx
def _expected_complex(self): tgr_mfd = mfd.TruncatedGRMFD(a_val=-3.5, b_val=1.0, min_mag=5.0, max_mag=6.5, bin_width=1.0) edges = [ geo.Line([ geo.Point(-124.704, 40.363, 0.5493260E+01), geo.Point(-124.977, 41.214, 0.4988560E+01), geo.Point(-125.140, 42.096, 0.4897340E+01), ]), geo.Line([ geo.Point(-124.704, 40.363, 0.5593260E+01), geo.Point(-124.977, 41.214, 0.5088560E+01), geo.Point(-125.140, 42.096, 0.4997340E+01), ]), geo.Line([ geo.Point(-124.704, 40.363, 0.5693260E+01), geo.Point(-124.977, 41.214, 0.5188560E+01), geo.Point(-125.140, 42.096, 0.5097340E+01), ]), geo.Line([ geo.Point(-123.829, 40.347, 0.2038490E+02), geo.Point(-124.137, 41.218, 0.1741390E+02), geo.Point(-124.252, 42.115, 0.1752740E+02), ]), ] cmplx = source.ComplexFaultSource( source_id="4", name="Cascadia Megathrust", tectonic_region_type="Subduction Interface", mfd=tgr_mfd, rupture_mesh_spacing=self.complex_fault_mesh_spacing, magnitude_scaling_relationship=scalerel.WC1994(), rupture_aspect_ratio=2.0, edges=edges, rake=30.0, temporal_occurrence_model=PoissonTOM(50.), ) return cmplx
def _complex_to_hazardlib(self, src): """Convert a NRML complex fault source to the HazardLib equivalent. See :mod:`openquake.nrmllib.models` and :mod:`openquake.hazardlib.source`. :param src: :class:`openquake.nrmllib.models.ComplexFaultRuptureModel` instance :returns: The HazardLib representation of the input source. """ edges_wkt = [] edges_wkt.append(src.geometry.top_edge_wkt) edges_wkt.extend(src.geometry.int_edges) edges_wkt.append(src.geometry.bottom_edge_wkt) edges = [] for edge in edges_wkt: shapely_line = wkt.loads(edge) line = geo.Line([geo.Point(*x) for x in shapely_line.coords]) edges.append(line) mf_dist = self._mfd_to_hazardlib(src.mfd) msr = scalerel.get_available_magnitude_scalerel()[src.mag_scale_rel]() cmplx = source.ComplexFaultSource( source_id=src.id, name=src.name, tectonic_region_type=src.trt, mfd=mf_dist, rupture_mesh_spacing=self.rupture_mesh_spacing, magnitude_scaling_relationship=msr, rupture_aspect_ratio=src.rupt_aspect_ratio, edges=edges, rake=src.rake, temporal_occurrence_model=self.default_tom, ) return cmplx