Source code for rsqsim_api.io.multiprocessing_utils

"""Worker functions for constructing fault patches in parallel multiprocessing pools."""
import numpy as np
from rsqsim_api.fault.patch import RsqSimTriangularPatch


[docs] def array_to_patch(arg_ls: list): """ Construct an RsqSimTriangularPatch from a flat argument list. Intended for use as a worker function in a multiprocessing pool, where arguments must be passed as a single iterable. Parameters ---------- arg_ls : List of five elements: ``[patch_num, triangle, fault, strike_slip, dip_slip]``. - *patch_num* : int — patch index. - *triangle* : array-like of length 9 — flattened (3×3) vertex array. - *fault* : fault segment owning this patch. - *strike_slip* : float — strike-slip component in metres. - *dip_slip* : float — dip-slip component in metres. Returns ------- patch_num : int The patch index (passed through for result ordering). patch : RsqSimTriangularPatch Constructed patch object. """ patch_num, triangle, fault, strike_slip, dip_slip = arg_ls triangle3 = triangle.reshape(3, 3) patch = RsqSimTriangularPatch(fault, vertices=triangle3, patch_number=patch_num, strike_slip=strike_slip, dip_slip=dip_slip) return patch_num, patch
[docs] def array_to_patch_rake(arg_ls: list): """ Construct an RsqSimTriangularPatch from a rake-based argument list. Decomposes a total slip magnitude and rake angle into strike-slip and dip-slip components before constructing the patch. Intended for use as a worker function in a multiprocessing pool. Parameters ---------- arg_ls : List of five elements: ``[patch_num, triangle, fault, rake, normalize_slip]``. - *patch_num* : int — patch index. - *triangle* : array-like of length 9 — flattened (3×3) vertex array. - *fault* : fault segment owning this patch. - *rake* : float — rake angle in degrees. - *normalize_slip* : float — total slip magnitude in metres. Returns ------- patch_num : int The patch index (passed through for result ordering). patch : RsqSimTriangularPatch Constructed patch object with strike-slip and dip-slip set. """ patch_num, triangle, fault, rake, normalize_slip = arg_ls triangle3 = triangle.reshape(3, 3) strike_slip = np.cos(np.radians(rake)) * normalize_slip dip_slip = np.sin(np.radians(rake)) * normalize_slip patch = RsqSimTriangularPatch(fault, vertices=triangle3, patch_number=patch_num, strike_slip=strike_slip, dip_slip=dip_slip) return patch_num, patch