{"action":"opened","issue":{"url":"https://api.github.com/repos/dealii/dealii/issues/4753","repository_url":"https://api.github.com/repos/dealii/dealii","labels_url":"https://api.github.com/repos/dealii/dealii/issues/4753/labels{/name}","comments_url":"https://api.github.com/repos/dealii/dealii/issues/4753/comments","events_url":"https://api.github.com/repos/dealii/dealii/issues/4753/events","html_url":"https://github.com/dealii/dealii/issues/4753","id":249117592,"number":4753,"title":"Proposal for MeshLoop","user":{"login":"tjhei","id":1531285,"avatar_url":"https://avatars0.githubusercontent.com/u/1531285?v=4","gravatar_id":"","url":"https://api.github.com/users/tjhei","html_url":"https://github.com/tjhei","followers_url":"https://api.github.com/users/tjhei/followers","following_url":"https://api.github.com/users/tjhei/following{/other_user}","gists_url":"https://api.github.com/users/tjhei/gists{/gist_id}","starred_url":"https://api.github.com/users/tjhei/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tjhei/subscriptions","organizations_url":"https://api.github.com/users/tjhei/orgs","repos_url":"https://api.github.com/users/tjhei/repos","events_url":"https://api.github.com/users/tjhei/events{/privacy}","received_events_url":"https://api.github.com/users/tjhei/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2017-08-09T18:17:48Z","updated_at":"2017-08-09T18:17:48Z","closed_at":null,"body":"After a long developer discussion about assembly today, we decided that we want a simpler and more low-level option to do \"work\" on mesh entities compared to MeshWorker without requiring the DoFInfo/DoFInfoBox/AnyData classes. The new MeshLoop would draw the line below working on FE related things (not containing FEValues, etc.).\r\n\r\nNote: we are not replacing or changing MeshWorker, just offering a more low-level option to work on cells and faces of a mesh based on WorkStream that handles the logic to do:\r\n- configurable logic for one/two-sided adaptive face actions\r\n- configurable logic for own/ghost cells and own/ghost faces\r\n- work on level or active cells/faces\r\n\r\nWe do NOT:\r\n- require a specific copy/scratchdata object\r\n- provide FE*Values\r\n\r\nCases where this should work and be useful:\r\n- CG assembly\r\n- error estimators\r\n- DG assembly\r\n- GMG\r\n- hp?\r\n\r\nExamples to write/adapt using the new MeshLoop:\r\n- CG Laplace + Neumann Bdry\r\n- replace WorkStream loop in existing tutorials (step-32 etc) by MeshLoop\r\n- introduce step-12 variant using MeshLoop (or some other \"manual\" DG example)\r\n- new error estimator example\r\n- step-50 or other GMG example?\r\n\r\nProposed interface:\r\n```\r\ntemplate <typename MeshType, typename Iterator, typename ScratchData, typename CopyData>\r\nvoid\r\nMeshLoop::run(\r\niterator begin,\r\niterator end,\r\nstd::function<void(const Iterator, ScratchData&, CopyData&)> cell_worker,\r\nstd::function<void(const Iterator, int face_no, ...?, ScratchData&, CopyData&)> face_worker,\r\nstd::function<void(const Iterator, int face_no, ...?, ScratchData&, CopyData&)> boundary_worker,\r\nstd::function<void(CopyData&)> copier,\r\nconst ScratchData & sample_scratch_data,\r\nconst CopyData & sample_copy_data,\r\nLoopFlags flags = gooddefault?,\r\nconst unsigned int \tqueue_length = 2*MultithreadInfo::n_threads(),\r\nconst unsigned int \tchunk_size = 8 );\r\n\r\nenum LoopFlags:\r\ndo_own_cells?\r\ndo_ghost_cells\r\ncells_first\r\nown_faces: never?, one, both\r\nfaces_to_ghost: never, one, both\r\nghost_boundaries?\r\n```\r\n\r\nThoughts:\r\n- provide BaseScratchData and BaseCopyData to derive from (optionally)\r\n- ScratchData/CopyData that contains functions/members that help for FE assembly"}}
{"actor":{"display_login":"tjhei"}}