Add a new feature of Lagrangian points tracking
Issue/feature addressed
A new filter feature of tracking many Lagrangian points in parallel is implemented. The points are distributed among different threads. MPI communication is used when the Lagrangian point is not found in the local mesh partition.
This feature can be developed into a particle-laden force. So not sure whether this feature should be placed in the filter or the forcing folder.
Proposed solution
Points are stored twice. One copy is the stationary points, which are fixed in the thread. Another copy is the mobile points, which can move based on the mesh partition.
When evaluating the physics values on the mobile points, we first search the local mesh partition. For the points that are not found in the local partition, do a global search. Once the thread whose mesh partition contains some unfound mobile points, move these points to the corresponding thread.
After evaluation the physics values on the mobile points, send the data back to thread which contains the corresponding stationary points.
Implementation
Tests
2-D, 3DH1D and 3D tests have been added.
A 2-D example (plunging airfoil with 256 X 128 points) is as follows
A 3DH1D example (plunging airfoil with 32 X 32 X 64 points) is as follows
The trajectories of sample points are
Suggested reviewers
Please suggest any people who would be appropriate to review your code.
Notes
Please add any other information that could be useful for reviewers.
Checklist
-
Functions and classes, or changes to them, are documented. -
User guide/documentation is updated. -
Changelog is updated. -
Suitable tests added for new functionality. -
Contributed code is correctly formatted. (See the contributing guidelines). -
License added to any new files. -
No extraneous files have been added (e.g. compiler output or test data files).