INMOST
Mathematical Modelling Toolkit
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Todo List
Member INMOST::Cell::CheckEdgeOrder () const
  1. Implement.
  2. Use in topology check algorithms.
  3. Use in Element::Connect.
Member INMOST::Cell::FixEdgeOrder () const
  1. Implement.
  2. Use in topology check algorithms.
  3. Use in Element::Connect.
Member INMOST::Cell::getEdges () const
One should thoroughly check three scenarios of function execution in shared parallel environment for different types of cells (simple tet/hex cells as well as complex polyhedral cells) and draw a conclusion on the best scenario for each condition. One of the development versions contains all the algorithms, ask for the files.
  1. Use of markers (current wariant).
  2. Put all elements into array with duplications, then run std::sort and std::unique.
  3. Put all elements into array, check for duplication by running through array.
Member INMOST::Cell::Inside (const real *point) const
  1. Should be checked or extended for 2d cells. (done, testing)
Member INMOST::Cell::SplitCell (Cell cell, const ElementArray< Face > &faces, MarkerType del_protect)
  1. The algorithm inside is minimizing the size of the adjacency graph for each new cell. The correct behavior is to calculate volume of the cell for each adjacency graph and choose the graph with minimal volume. This requires calculation of volume for non-convex cells. For correct calculation of volume on non-convex cells one should find one face for which normal orientation can be clearly determined and then orient all edges of the cell with respect to the orientation of edges of this face and establish normals for all faces. Once the algorithm is implemented here it should be implemented in geometrical services or vice verse.
  2. Probably the algorithm should minimize the volume and adjacency graph size altogether. Between the cells with smallest volume within some tolerance select those that have smallest adjacency graph.
Member INMOST::Cell::Volume () const
  1. Geometric services should correctly resolve volume for non-convex cells.
Member INMOST::Element::Connect (const HandleType *adjacent, INMOST_DATA_ENUM_TYPE num) const
  1. Asserts in this function should be replaced by Topography checks.
  2. This function should be used for construction of elements instead of current implementation.
  3. Should correctly account for order of edges (may be implemented through CheckEdgeOrder, FixEdgeOrder).
Member INMOST::ElementSet::AddElements (const HandleType *handles, enumerator num) const
Recheck usage of markers.
Member INMOST::ElementSet::SortSet (ComparatorType comp) const
!TODO 52 - check radix sort on big endian computer
Member INMOST::ElementSet::Subtract (const ElementSet &other) const
If other and current sets are sorted in same way, may perform narrowing traversal by retriving mutual lower_bound/higher_bound O(log(n)) operations for detecting common subsets in sorted sets. May work good when deleting handles by small chunks, ApplyModification may greatly benefit.
Member INMOST::Mesh::ApplyModification ()
  1. maybe instead of forming set of deleted elements and subtracting set from other sets it is better to remove each modified element (done, check and compare)
  2. parent/child elements in set would not be replaced or reconnected, this may lead to wrong behavior (done, check and compare)
Member INMOST::Mesh::AssignGlobalID (ElementType mask)
  1. invoking function before loading mesh will not renew global identificators after load but would not unset have_global_id either. There are probably too many places when global ids may become invalid but no flag will be set. It may be benefitial to set such flags along with updating geometrical data which seems to be maintained fairly well during mesh modification
Member INMOST::Mesh::BeginTopologyCheck (ElementType etype, const HandleType *adj, enumerator num)
list checks performed inside in description
Member INMOST::Mesh::EndTopologyCheck (HandleType e)
list checks performed inside in description.
Member INMOST::Mesh::ExchangeData (const Tag &tag, ElementType mask, MarkerType select)
see TODO in Mesh::ReduceData
Member INMOST::Mesh::ExchangeMarked (enum Action action=AGhost)
  1. test halo exchange algorithm (if used then change collective point-2-point to collective)
  2. see TODO 2 in Mesh::Redistribute
Member INMOST::Mesh::Load (std::string File)
  1. When loading mesh with the same tag name but different type or size, load will fail.
  2. When loading tags in internal format should remember definition and sparsity masks for subsequent data loading. This will cure the case when tags were already priviously defined on mesh with different masks and data will be red incorrectly.
Member INMOST::Mesh::Redistribute ()
  1. introduce "TEMPORARY_KEEP_GHOSTED" tag that will store processors on which copy of element should be kept, internally just merge it with "TEMPORARY_NEW_PROCESSORS" tag this will allow user to control ghosting of certain elements and not to invoke ExchangeMarked every time after Redistribute. This is probably already done using Mesh::SendtoTag, because function fills it without clearing and ExchangeMarked performs initial action based on SendtoTag, it is due to check that SendtoTag is properly merged with "TEMPORARY_NEW_PROCESSORS" before call to ExchangeMarked and received elements are not deleted by accident.
  2. let user provide any integer tag as input without involving RedistributeTag
Member INMOST::Mesh::ReduceData (const Tag &tag, ElementType mask, MarkerType select, ReduceOperation op)
  1. Exchanging DATA_REFERENCE,DATA_REMOTE_REFERENCE tags not implemented, this is due to the absence of any conclusion
  • on how it should behave: either only search within elements owned by the other processor and establish references and set InvalidHandle() to elements that are not found (fairly easy, will involve search operations to check against owned elements for similar entry, efficient implementation will require bounding search trees (see TODO 49);
  • or: send all the referenced elements through PackElementsData and establish all the links within elements reproduced by UnpackElementsData (UnpackElementsData calls UnpackTagData with set of unpacked elements using which it will be very comfortable to establish references on remote processor). Drawback is that exchanging laplacian operator in such a manner should result in the whole grid being shared among all the processors.
Member INMOST::Mesh::RemoveGhostElements (const HandleType *ghost, enumerator num)
  1. Currently request for deletion of elements of lower level then cell will be simply ignored, ensure in future that algorithm will properly rise deletion data from lower to upper adjacencies to delete all the upper adjacencies that depend on deleted lower adjacencies
Member INMOST::Mesh::Save (std::string File)
  1. Markers are not saved in internal format due to possible conflict during load.
Member INMOST::Mesh::SetFileOption (std::string, std::string)
introduce "SET_TAGS_LOAD", "SET_TAGS_SAVE" to explicitly provide set of tags to write or "SKIP_TAGS_LOAD", "SKIP_TAGS_SAVE" tags to skip
Member INMOST::Mesh::SortByGlobalID (HandleType *h, enumerator num)
TODO 53 check that putting global ids to array will be faster
Class INMOST::Sparse::RowMerger
  1. (testing!) Add iterators over entries.
  2. Implement multiple intervals for distributed computation, then in parallel the user may specify additional range of indexes for elements that lay on the borders between each pair of processors.