Implementation of new mesh intersection functionality and Nitsche's method for overlapping meshes.

Registered by Andre Massing

The goal is to provide all the functionality that is required to realize Nitsche's method for overlapping meshes within the FEniCS framework. We first aim at a rather low level implementation (no integration in UFL), meaning that we have at least to provide all necessary information for adding a new or modifying assembling routine.
Basically the task consists of:
-Implement intersection detection for cells and boundaries
-Implement routines for computation of the intersected volumes/areas.
-Provide reasonable quadrature formulas for integration on polyhedrons and parts of its surface.
-Modify or add assembling routine for incorporating the additional interface, jump and penalty terms appearing in Nitsche's method

Blueprint information

Status:
Complete
Approver:
Anders Logg
Priority:
Undefined
Drafter:
Andre Massing
Direction:
Needs approval
Assignee:
Andre Massing
Definition:
Obsolete
Series goal:
None
Implementation:
Started
Milestone target:
None
Started by
Andre Massing
Completed by
Andre Massing

Related branches

Sprints

Whiteboard

As suggested this blueprint will be split up into smaller feasible pieces.

This looks more like a project plan than a blueprint - it should be broken up in to small pieces.

First step is to provide better intersection detection functionality for fast intersection test of different kind of geomtric objects, for instance tetrahedrons with tetrahedrons, triangles and so on. The old interface was only capable of detecting intersection of cells with points and 2D cells with lines.
The CGAL is used to replace the old interface based on GTS. Intersect test have been supplied to the existing in CGAL.
All important intersection detection cases have been implemented (except segment -segment and segement-tretrahedron) and is in the testing/debugging phase.

Main interface will be IntersectionOperator class:
Public member function:

    ///Compute all id of all cells which are intersects by Point point.
    ///The ids of the intersected entities are saved in a set for efficienty reasons, to avoid to sort out duplicates.
    void all_intersected_entities(const Point & point, unordered_set & ids_result);

    ///Compute all id of all cells which are intersects by any Point contained in points
    ///The ids of the intersected entities are saved in a set for efficienty reasons, to avoid to sort out duplicates.
    void all_intersected_entities(const std::vector<Point> & points, unordered_set & ids_result);

    ///Compute all id of all cells which are intersected by the given mesh.
    void all_intersected_entities(const Mesh & another_mesh, unordered_set & ids_result);

    ///Computes the first id of the entity, which contains the point. Returns -1 if no cell is intersected. For fast function evalutation.
    int any_intersected_entity(const Point & point);

    ///Rebuilds the underlying search structure from scratch.
    void rebuild_tree();

(?)

Work Items

This blueprint contains Public information 
Everyone can see this information.

Subscribers

No subscribers.