Source code for anuga.extras


from anuga.shallow_water.shallow_water_domain import Domain
from anuga.abstract_2d_finite_volumes.mesh_factory import rectangular_cross, \
                                                        rectangular

from anuga.abstract_2d_finite_volumes.pmesh2domain import pmesh_to_domain_instance



#-----------------------------
# rectangular domains
#-----------------------------
def rectangular_cross_domain(*args, **kwargs):
    """
    Create a rectangular domain with triangulation made
    up of m+1 by n+1 uniform rectangular cells divided
    into 4 triangles in a cross pattern

    Arguments
    m:      number of cells in x direction
    n:      number of cells in y direction
    len1:   length of domain in x direction (left to right)
            (default 1.0)
    len2:   length of domain in y direction (bottom to top)
            (default 1.0)
    origin: tuple (x,y) specifying location of lower left corner
            of domain (default (0,0))
    """

    try:
        verbose = kwargs.pop('verbose')
    except:
        verbose = False


    points, vertices, boundary = rectangular_cross(*args, **kwargs)
    return Domain(points, vertices, boundary, verbose= verbose)

#----------------------------
# Create domain from file
#----------------------------
def create_domain_from_file(filename, DomainClass=Domain):
    """
    Create a domain from a file
    """
    return pmesh_to_domain_instance(filename,DomainClass=DomainClass)

#---------------------------
# Create domain from regions
#---------------------------

[docs]def create_domain_from_regions(bounding_polygon, boundary_tags, maximum_triangle_area=None, mesh_filename=None, interior_regions=None, interior_holes=None, hole_tags=None, poly_geo_reference=None, mesh_geo_reference=None, breaklines=None, regionPtArea=None, minimum_triangle_angle=28.0, fail_if_polygons_outside=True, use_cache=False, verbose=False): """Create domain from bounding polygons and resolutions. :param bounding_polygon: list of points in Eastings and Northings, relative to the zone stated in poly_geo_reference if specified. Otherwise points are just x, y coordinates with no particular association to any location. :param boundary_tags: dictionary of symbolic tags. For every tag there is a list of indices referring to segments associated with that tag. If a segment is omitted it will be assigned the default tag ''. :param maximum_triangle_area: maximal area per triangle for the bounding polygon, excluding the interior regions. :param Interior_regions: list of tuples consisting of (polygon, resolution) for each region to be separately refined. Do not have polygon lines cross or be on-top of each other. Also do not have polygon close to each other. NOTE: If a interior_region is outside the bounding_polygon it should throw an error :param interior_holes: list of polygons for each hole. These polygons do not need to be closed, but their points must be specified in a counter-clockwise order. :param hole_tags: list of tag segment dictionaries. This function does not allow segments to share points - use underlying pmesh functionality for that :param poly_geo_reference: geo_reference of the bounding polygon and the interior polygons. If none, assume absolute. Please pass one though, since absolute references have a zone. :param mesh_geo_reference: geo_reference of the mesh to be created. If none is given one will be automatically generated. It was use the lower left hand corner of bounding_polygon (absolute) as the x and y values for the geo_ref. :param breaklines: list of polygons. These lines will be preserved by the triangulation algorithm - useful for coastlines, walls, etc. The polygons are not closed. :param regionPtArea: list of 3-tuples specifing a point with max area for region containing point :param fail_if_polygons_outside: If True (the default) Exception in thrown where interior polygons fall outside bounding polygon. If False, these will be ignored and execution continued. :return: shallow water domain instance .. note:: Interior regions should be fully nested, as overlaps may cause unintended resolutions. """ # Build arguments and keyword arguments for use with caching or apply. args = (bounding_polygon, boundary_tags) if mesh_filename is None: import tempfile import time mesh_filename = 'mesh_%d.msh'%int(time.time()) kwargs = {'maximum_triangle_area': maximum_triangle_area, 'mesh_filename': mesh_filename, 'interior_regions': interior_regions, 'interior_holes': interior_holes, 'hole_tags': hole_tags, 'poly_geo_reference': poly_geo_reference, 'mesh_geo_reference': mesh_geo_reference, 'breaklines' : breaklines, 'regionPtArea' : regionPtArea, 'minimum_triangle_angle': minimum_triangle_angle, 'fail_if_polygons_outside': fail_if_polygons_outside, 'verbose': verbose} #FIXME (Ole): See ticket:14 # Call underlying engine with or without caching if use_cache is True: try: from anuga.caching import cache except: msg = 'Caching was requested, but caching module'+\ 'could not be imported' raise (msg) domain = cache(_create_domain_from_regions, args, kwargs, verbose=verbose, compression=False) else: domain = _create_domain_from_regions(*args, **kwargs) return domain
def _create_domain_from_regions(bounding_polygon, boundary_tags, maximum_triangle_area=None, mesh_filename=None, interior_regions=None, interior_holes=None, hole_tags=None, poly_geo_reference=None, mesh_geo_reference=None, breaklines=None, regionPtArea=None, minimum_triangle_angle=28.0, fail_if_polygons_outside=True, verbose=True): """_create_domain_from_regions - internal function. See create_domain_from_regions for documentation. """ #from anuga.shallow_water.shallow_water_domain import Domain from anuga.pmesh.mesh_interface import create_mesh_from_regions create_mesh_from_regions(bounding_polygon, boundary_tags, maximum_triangle_area=maximum_triangle_area, interior_regions=interior_regions, filename=mesh_filename, interior_holes=interior_holes, hole_tags=hole_tags, poly_geo_reference=poly_geo_reference, mesh_geo_reference=mesh_geo_reference, breaklines=breaklines, regionPtArea=regionPtArea, minimum_triangle_angle=minimum_triangle_angle, fail_if_polygons_outside=fail_if_polygons_outside, use_cache=False, verbose=verbose) domain = Domain(mesh_filename, use_cache=False, verbose=verbose) return domain