Source code for landlab.graph.ugrid

import numpy as np
import xarray as xr

from ..utils.jaggedarray import flatten_jagged_array

_MESH_ATTRS = {
    "cf_role": "mesh_topology",
    "long_name": "Topology data of 2D unstructured mesh",
    "topology_dimension": 2,
    "node_coordinates": "x_of_node y_of_node",
    "face_node_connectivity": "nodes_at_patch",
    "face_dimension": "patch",
    "face_edge_connectivity": "links_at_patch",
    "edge_node_connectivity": "nodes_at_link",
    "edge_dimension": "link",
}


[docs] def ugrid_from_unstructured(node_y_and_x, links=None, patches=None): ugrid = xr.Dataset({"mesh": xr.DataArray(data="a", attrs=_MESH_ATTRS)}) _update_node_coords(ugrid, node_y_and_x) if links is not None: _update_nodes_at_link(ugrid, links) if patches is not None and "nodes_at_link" in ugrid: _update_links_at_patch(ugrid, patches) return ugrid
def _update_node_coords(ugrid, node_y_and_x): node_y, node_x = ( np.asarray(node_y_and_x[0], dtype=float), np.asarray(node_y_and_x[1], dtype=float), ) y_of_node = xr.DataArray( data=node_y.reshape((-1,)), coords={"node": np.arange(node_y.size)}, dims=("node",), attrs={"long_name": "y", "units": "m"}, ) x_of_node = xr.DataArray( data=node_x.reshape((-1,)), coords={"node": np.arange(node_x.size)}, dims=("node",), attrs={"long_name": "x", "units": "m"}, ) ugrid.update({"y_of_node": y_of_node, "x_of_node": x_of_node}) return ugrid def _update_nodes_at_link(ugrid, node_links): node_links = np.asarray(node_links, dtype=int).reshape((-1, 2)) nodes_at_link = xr.DataArray( data=node_links, dims=("link", "Two"), attrs={ "cf_role": "edge_node_connectivity", "long_name": "nodes a link tail and head", "start_index": 0, }, ) ugrid.update({"nodes_at_link": nodes_at_link}) def _update_links_at_patch(ugrid, patches): from .matrix.at_patch import links_at_patch if len(patches) > 0: patches = flatten_jagged_array(patches, dtype=int) patch_links = links_at_patch(patches) links_at_patch = xr.DataArray( data=patch_links, dims=("patch", "max_patch_links"), attrs={ "cf_role": "face_edge_connectivity", "long_name": "Maps every face to its edges", "start_index": 0, }, ) ugrid.update({"links_at_patch": links_at_patch})