Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Het genereren van de linkjes met D-HyDAMO gaat met de functies links1d2d_add_links_1d_to_2d, links1d2d_add_links_2d_to_1d_embedded en links1d2d_add_links_2d_to_1d_lateral. De eerste functie probeert links te leggen vanuit de 1D rekenpunten naar de 2D cellen; de tweede en derde functie doen dat omgekeerd. Deze functies zijn in principe in combinatie te gebruiken. Voor ‘Embedded’ en “Lateral” links zou dat wel logisch zijn. Deze combinaties zijn echter nog niet grondig getest.

Hieronder geven we meer infomatie over de mogelijkheden van elk van de drie functies, en geven we fictieve voorbeelden van het gebruik ervan.

De voorbeelden hieronder gaan uit van Meshkernel als bibliotheek om 1d2d-links te genereren. De syntax voor gridgeom (GG) is iets anders; we geven hieronder per optie de equivalente syntax voor GG.

De functie links1d2d_add_links_1d_to_2dbiedt de mogelijkheid om linkjes te genereren met een maximale lengte, en op specifieke takken. De codedocumentatie licht toe hoe de functie te gebruiken.

...

Het volgende voorbeeld licht de toepassing toe. Eerst wordt een 1d branch (rode lijn) en een 2d raster (blauw raster) gemaakt. Vervolgens worden via het optionele ‘within’ polygon (het groene gebied) 1d2d linkjes gemaakt vanaf de rekenpunten naar de dichtstbijzijnde 2d-cellen. Dat gebeurt dus alleen voor rekenpunten die binnen het groene gebied vallen. Als geen 'within' argument wordt opgegeven worden links gegenereeerd vanaf alle rekenpunten langs de rode lijn.

Code Block
# generate 1d
branch = LineString([[-9, -3], [0, 4]])
branchids = mesh.mesh1d_add_branch_from_linestring(network, branch, node_distance=1)
# Generate 2d
areas = MultiPolygon([box(-8, -10, 8, -2), box(-8, 2, 8, 10)])
hole = box(-6, -6, 6, -4)
mesh.mesh2d_add_rectilinear(network, areas, dx=0.5, dy=0.5)
mesh.mesh2d_clip(network, hole)
within = box(-10, -10, 12, 10).difference(
     LineString([[-2, -10], [2, 10]]).buffer(2)
)
mesh.links1d2d_add_links_1d_to_2d(network, within=within)

Image Modified

Voor GG is de betreffende functie: links1d2d.generate_1d_to_2d(max_distance=50)

De functie links1d2d_add_links_2d_to_1d_embedded biedt de mogelijkheid om van 2D naar 1D te genereren. In dit geval worden links gelegd naar cellen die het 1D-netwerk kruisen (de watergangen zijn niet uitgeknipt). Dit is vaak in het geval bij kleine watergangen. Per 2d cel wordt een link gelegd naar de 1d cel(len) die het kruist.

...

Hetzelfde voorbeeld als bij de links van 1d naar 2d wordt hieronder gegeven voor de variant van 2d naar 1d met overlappende cellen.

Code Block
# generate 1d
branch = LineString([[-9, -3], [0, 4]])
branchids = mesh.mesh1d_add_branch_from_linestring(network, branch, node_distance=1)
# Generate 2d
areas = MultiPolygon([box(-8, -10, 8, -2), box(-8, 2, 8, 10)])
hole = box(-6, -6, 6, -4)
mesh.mesh2d_add_rectilinear(network, areas, dx=0.5, dy=0.5)
mesh.mesh2d_clip(network, hole)
within = box(-10, -10, 12, 10).difference(
     LineString([[-2, -10], [2, 10]]).buffer(2)
)
mesh.links1d2d_add_links_2d_to_1d_embedded(network, within=within)
Image Modified

Voor GG is de betreffende functie:  links1d2d.generate_2d_to_1d(max_distance=50, intersecting=True)

...

Hieronder staat hetzelfde voorbeeld als hierboven, maar nu voor 2d-naar-1d links zonder overlap. Omdat de links vanuit 2d worden gegenereerd zijn er meerdere 2d cellen verbonden met één 1d rekenpunt.

Code Block
# generate 1d
branch = LineString([[-9, -3], [0, 4]])
branchids = mesh.mesh1d_add_branch_from_linestring(network, branch, node_distance=1)
# Generate 2d
areas = MultiPolygon([box(-8, -10, 8, -2), box(-8, 2, 8, 10)])
hole = box(-6, -6, 6, -4)
mesh.mesh2d_add_rectilinear(network, areas, dx=0.5, dy=0.5)
mesh.mesh2d_clip(network, hole)
within = box(-10, -10, 12, 10).difference(
     LineString([[-2, -10], [2, 10]]).buffer(2)
)
mesh.links1d2d_add_links_2d_to_1d_lateral(network, within=within)
Image Modified

Voor GG is de betreffende functie:  links1d2d.generate_2d_to_1d(max_distance=50, intersecting=False)

Via onderstaande functie kunnen links die zijn aangemaakt binnen een bepaald polygon weer worden verwijderd.

Code Block
def links1d2d_remove_within(
    network: Network, within: Union[Polygon, MultiPolygon]
) -> None:
    """Remove 1d2d links within a given polygon or multipolygon

    Args:
        network (Network): The network from which the links are removed
        within (Union[Polygon, MultiPolygon]): The polygon that indicates which to remove
    """

1d2d links die zijn aangemaakt op een uiteinde van het netwerk moeten ook worden verwijderd omdat anders randvoorwaarden op die punten niet goed werken,. Gebruik darvoor onderstaande functie.

Code Block
def links1d2d_remove_1d_endpoints(network: Network) -> None:
    """Method to remove 1d2d links from end points of the 1d mesh. The GUI
    will interpret every endpoint as a boundary conditions, which does not
    allow a 1d 2d link at the same node. To avoid problems with this, use
    this metho

Voor GG is de betreffende functie:   links1d2d.remove_1d_endpoints()