Files
MeanField_SERiF/docs/latex/todo.tex
Emily Boudreaux 6b57738330 docs(docs): built docs
Note for now much of the docs is LLM written. This was done to save time and focus on code development. The docs have been LOOSLEY reviewed. However, the code itself has been either fully written by hand or fully reviewed. Therefore, the docs should at the moment be seen as a loose resource rather than authoratiative (and this is on top of the general ability for docs to drift)
2026-11-09 14:09:44 -05:00

161 lines
17 KiB
TeX

\chapter{Todo List}
\hypertarget{todo}{}\label{todo}\index{Todo List@{Todo List}}
\begin{DoxyRefList}
\item[File \doxylink{context_8hpp}{context.hpp} ]\hfill \\
\label{todo__todo000007}%
\Hypertarget{todo__todo000007}%
Like a lot of the parts of the mapping module written before I started factoring mfem stuff into backend modules, a good amount of this might be movable to some mfem backend
\item[File \doxylink{data_8hpp}{data.hpp} ]\hfill \\
\label{todo__todo000013}%
\Hypertarget{todo__todo000013}%
As said above there is some refactoring to make this cleaner which could happen.
\item[File \doxylink{forms_8hpp}{forms.hpp} ]\hfill \\
\label{todo__todo000028}%
\Hypertarget{todo__todo000028}%
Come back and fill in more information about elsewhere. If you are the developer from above and you are reading this todo, then I am, and I mean this truly, very sorry....
\item[Struct \doxylink{structserif_1_1discretization_1_1backend_1_1mfem_1_1_tensor_basis_cache_1_1_entry}{serif\+::discretization\+::backend\+::mfem\+::Tensor\+Basis\+Cache\+::Entry} ]\hfill \\
\label{todo__todo000003}%
\Hypertarget{todo__todo000003}%
Consider if we can remove the shared pointer from here, shared pointers introduce overhead with reference counting and that may slow down the cache.
\item[Member \doxylink{classserif_1_1discretization_1_1blocks_1_1_block_vector_view_a33dc11460a096a75aa726c97f23a2d64}{serif\+::discretization\+::blocks\+::Block\+Vector\+View\texorpdfstring{$<$}{<} Kind, Layout, Scalar \texorpdfstring{$>$}{>}\+::Block\+Vector\+View} (const \doxylink{classserif_1_1discretization_1_1blocks_1_1_block_vector_view_a7cd2f4e8ddc18a6a5593f39bc07339fa}{Layout\+Type} \&layout, std\+::span$<$ Scalar $>$ values)]\hfill \\
\label{todo__todo000019}%
\Hypertarget{todo__todo000019}%
Really this could go in many places; however, I think we should move away from throwing std exceptions and introduce our own exception hierarchy.
\item[Member \doxylink{namespaceserif_1_1discretization_1_1blocks_a946d6244b79cf4fad47d07fb97db32e1}{serif\+::discretization\+::blocks\+::checked\+\_\+block\+\_\+size} (std\+::span$<$ const std\+::size\+\_\+t $>$ sizes)]\hfill \\
\label{todo__todo000015}%
\Hypertarget{todo__todo000015}%
Really this does not need to be specific to this module, this might more generally be named something like "{}safe sum"{} and moved to a more general location.
\item[Member \doxylink{namespaceserif_1_1discretization_1_1blocks_a8b16d088f59cff9d40cd84eebd53d3b1}{serif\+::discretization\+::blocks\+::Functional\+Space\+Of} ]\hfill \\
\label{todo__todo000016}%
\Hypertarget{todo__todo000016}%
For consistency with other types consider renaming Term\+T\+::\+Functional\+Space to Term\+T\+::functional\+\_\+space. This would require updating all term definitions to use the new naming convention. CLion or some other IDE should be able to handle this refactor easily.
\item[Member \doxylink{namespaceserif_1_1discretization_1_1blocks_aef1a0354784f797bfa87d2369652b5cb}{serif\+::discretization\+::blocks\+::Quantity\+Of} ]\hfill \\
\label{todo__todo000018}%
\Hypertarget{todo__todo000018}%
For consistency with other types consider renaming Term\+T\+::\+Quantity to Term\+T\+::quantity. This would require updating all term definitions to use the new naming convention. CLion or some other IDE should be able to handle this refactor easily.
\item[Member \doxylink{namespaceserif_1_1discretization_1_1blocks_aba18df102a90506f2263dc6395e3f975}{serif\+::discretization\+::blocks\+::Support\+Of} ]\hfill \\
\label{todo__todo000017}%
\Hypertarget{todo__todo000017}%
For consistency with other types consider renaming Term\+T\+::\+Support to Term\+T\+::support. This would require updating all term definitions to use the new naming convention. CLion or some other IDE should be able to handle this refactor easily.
\item[Member \doxylink{namespaceserif_1_1discretization_1_1domain_1_1ids_1_1validation_aa32cf1b94829069aacbae4c24d24ea50}{serif\+::discretization\+::domain\+::ids\+::validation\+::all\+\_\+unique\+\_\+values} (Ts... values) noexcept]\hfill \\
\label{todo__todo000022}%
\Hypertarget{todo__todo000022}%
Really this should probably be refactored into the utils module since this is not super specific to domain\+IDs.
\item[Struct \doxylink{structserif_1_1discretization_1_1domain_1_1mesh_1_1_mesh_topology_data}{serif\+::discretization\+::domain\+::mesh\+::Mesh\+Topology\+Data} ]\hfill \\
\label{todo__todo000023}%
\Hypertarget{todo__todo000023}%
Implemented this with std\+::vector when I moved all the mfem code into backend/mfem; however, std\+::vector has all sorts of limitations and problems. We may want to consider using the types.\+hpp vector alias here instead? Or some other vector implementation.
\item[Member \doxylink{structserif_1_1discretization_1_1domain_1_1schema_1_1validation_1_1_domain_boundary_acd6f3036bc6d36e93ea1cdba556a25e1}{serif\+::discretization\+::domain\+::schema\+::validation\+::Domain\+Boundary\texorpdfstring{$<$}{<} BoundaryT, Domain\+Ts \texorpdfstring{$>$}{>}\+::name} ]\hfill \\
\label{todo__todo000026}%
\Hypertarget{todo__todo000026}%
we should replace this with our meta library.
\item[Member \doxylink{structserif_1_1discretization_1_1domain_1_1schema_1_1validation_1_1_fully_connected_ad996a186a7ae8839a3d21f0be7b41fad}{serif\+::discretization\+::domain\+::schema\+::validation\+::Fully\+Connected\texorpdfstring{$<$}{<} A \texorpdfstring{$>$}{>}\+::name} ]\hfill \\
\label{todo__todo000025}%
\Hypertarget{todo__todo000025}%
we should replace this with our meta library.
\item[Member \doxylink{structserif_1_1discretization_1_1domain_1_1schema_1_1validation_1_1_inscribed_a31cfdcacefd6b4fc515fdef5bc81117d}{serif\+::discretization\+::domain\+::schema\+::validation\+::Inscribed\texorpdfstring{$<$}{<} A, B \texorpdfstring{$>$}{>}\+::name} ]\hfill \\
\label{todo__todo000024}%
\Hypertarget{todo__todo000024}%
we should replace this with our meta library.
\item[Member \doxylink{namespaceserif_1_1discretization_1_1forms_a259c1476be2e462d8cd07c803434af69}{serif\+::discretization\+::forms\+::Partial\+Derivative} ]\hfill \\
\label{todo__todo000033}%
\Hypertarget{todo__todo000033}%
Should probably be consolidated with the other \doxylink{namespaceserif_1_1discretization_1_1forms_a259c1476be2e462d8cd07c803434af69}{Partial\+Derivative} system... No, should {\itshape definitely} be consolidated...
\item[Struct \doxylink{structserif_1_1discretization_1_1forms_1_1_value_components}{serif\+::discretization\+::forms\+::Value\+Components\texorpdfstring{$<$}{<} ValueT \texorpdfstring{$>$}{>}} ]\hfill \\
\label{todo__todo000032}%
\Hypertarget{todo__todo000032}%
This introduces an assumption of three-\/dimensionality, we say "{}this is either a scalar or a tensor of dimension 3"{}. We should probably relax this assumption.
\item[Member \doxylink{namespaceserif_1_1discretization_1_1forms_a19001a41347e243892d7bfef18abd174}{serif\+::discretization\+::forms\+::Vector\+Value} ]\hfill \\
\label{todo__todo000031}%
\Hypertarget{todo__todo000031}%
This file was a mistake, the information it is is helpful yes, however, it has lost generality, lost good type information, and does not need to be separate Really we should refactor this to be part of \doxylink{structserif_1_1discretization_1_1forms_1_1_operation}{Operation}, remove the assumption of 3 dimensionality, and probably fall back to something like a span rather than an array.
\item[Member \doxylink{namespaceserif_1_1discretization_1_1functional__space_a4a023144b19edc1f9083dbfc4634fdd2}{serif\+::discretization\+::functional\+\_\+space\+::Continuity} ]\hfill \\
\label{todo__todo000034}%
\Hypertarget{todo__todo000034}%
There may be a better way to store these relations that forces them to be parallel rather than just relying on the programmer to keep them in sync.
\item[Member \doxylink{namespaceserif_1_1discretization_1_1quadrature_1_1backend_1_1mfem_a57b84979ef93418360b7d207fa87858b}{serif\+::discretization\+::quadrature\+::backend\+::mfem\+::resolve\+\_\+operand\+\_\+order} () noexcept]\hfill \\
\label{todo__todo000002}%
\Hypertarget{todo__todo000002}%
We already have some of this information in the form\+\_\+traits file, we should probably extract the order boost from there.
\item[Class \doxylink{classserif_1_1eos_1_1_e_o_s_evaluation_error}{serif\+::eos\+::EOSEvaluation\+Error} ]\hfill \\
\label{todo__todo000035}%
\Hypertarget{todo__todo000035}%
We have moved away from custom error types, this may warrant removal.
\item[Struct \doxylink{structserif_1_1equations_1_1_contributions_3_01_t_00_01std_1_1void__t_3_01decltype_07std_1_1decl671b42e5568b3715d07217eb0f34ce32}{serif\+::equations\+::Contributions\texorpdfstring{$<$}{<} T, std\+::void\+\_\+t\texorpdfstring{$<$}{<} decltype(std\+::declval\texorpdfstring{$<$}{<} const T \& \texorpdfstring{$>$}{>}().contributions())\texorpdfstring{$>$}{>} \texorpdfstring{$>$}{>}} ]\hfill \\
\label{todo__todo000039}%
\Hypertarget{todo__todo000039}%
Replace SFINAE with requires or concepts if possible. This would make the code more readable and easier to understand.
\item[Struct \doxylink{structserif_1_1equations_1_1_contribution_tuple_3_01std_1_1tuple_3_01_ts_8_8_8_01_4_00_01std_1_1e282a2c4b2ce56d3b5a3d2dda19385da}{serif\+::equations\+::Contribution\+Tuple\texorpdfstring{$<$}{<} std\+::tuple\texorpdfstring{$<$}{<} Ts... \texorpdfstring{$>$}{>}, std\+::void\+\_\+t\texorpdfstring{$<$}{<} decltype(std\+::tuple\+\_\+cat(std\+::declval\texorpdfstring{$<$}{<} typename Contributions\texorpdfstring{$<$}{<} std\+::remove\+\_\+cvref\+\_\+t\texorpdfstring{$<$}{<} Ts \texorpdfstring{$>$}{>} \texorpdfstring{$>$}{>}\+::type \texorpdfstring{$>$}{>}()...))\texorpdfstring{$>$}{>} \texorpdfstring{$>$}{>}} ]\hfill \\
\label{todo__todo000038}%
\Hypertarget{todo__todo000038}%
Replace SFINAE with requires or concepts if possible. This would make the code more readable and easier to understand.
\item[Class \doxylink{classserif_1_1equations_1_1_rigid_rotation}{serif\+::equations\+::Rigid\+Rotation} ]\hfill \\
\label{todo__todo000040}%
\Hypertarget{todo__todo000040}%
This should probably be refactored into its own submodule to clean up equations a bit
\item[Member \doxylink{classserif_1_1equations_1_1_rigid_rotation_a7e704e49442ae57319c415c0d7f25fe0}{serif\+::equations\+::Rigid\+Rotation\+::centrifugal\+\_\+potential} (const \doxylink{classserif_1_1equations_1_1_rigid_rotation_a1e11c2a12ffc17fd826e02ec5ac19311}{Vector} \&position) const]\hfill \\
\label{todo__todo000043}%
\Hypertarget{todo__todo000043}%
We should add some validation for position into this
\item[Member \doxylink{classserif_1_1equations_1_1_rigid_rotation_a8f188b248fc9cea40a5916fee0ff933f}{serif\+::equations\+::Rigid\+Rotation\+::centrifugal\+\_\+potential\+\_\+gradient} (const \doxylink{classserif_1_1equations_1_1_rigid_rotation_a1e11c2a12ffc17fd826e02ec5ac19311}{Vector} \&position) const]\hfill \\
\label{todo__todo000044}%
\Hypertarget{todo__todo000044}%
We should add some validation for position into this
\item[Member \doxylink{classserif_1_1equations_1_1_rigid_rotation_a46be2ab431592a732b137543f1b9531e}{serif\+::equations\+::Rigid\+Rotation\+::Rigid\+Rotation} (const \doxylink{classserif_1_1equations_1_1_rigid_rotation_a1e11c2a12ffc17fd826e02ec5ac19311}{Vector} \&angular\+\_\+velocity\+\_\+vector, const \doxylink{classserif_1_1equations_1_1_rigid_rotation_a1e11c2a12ffc17fd826e02ec5ac19311}{Vector} \&axis\+\_\+origin=\{\})]\hfill \\
\label{todo__todo000041}%
\Hypertarget{todo__todo000041}%
We make an assumption here about the dimensionality of the space (e.\+g that the hessian is a 3x3 matrix). This is likely fine; however, if we ever want to be able to model 1D or 2D systems we will need to refactor this to be more general.
\item[Member \doxylink{classserif_1_1equations_1_1_rigid_rotation_a3aace3f5fe0ec7d0714b21862b7ca199}{serif\+::equations\+::Rigid\+Rotation\+::unit\+\_\+rotation} (\doxylink{classserif_1_1equations_1_1_rigid_rotation_a1e11c2a12ffc17fd826e02ec5ac19311}{Vector} rotation\+\_\+axis=\{0.\+0, 0.\+0, 1.\+0\}, const \doxylink{classserif_1_1equations_1_1_rigid_rotation_a1e11c2a12ffc17fd826e02ec5ac19311}{Vector} \&axis\+\_\+origin=\{\})]\hfill \\
\label{todo__todo000042}%
\Hypertarget{todo__todo000042}%
This may make sense to turn into a free-\/function rather than a class method.
\item[Struct \doxylink{structserif_1_1equations_1_1_test_operand_traits}{serif\+::equations\+::Test\+Operand\+Traits\texorpdfstring{$<$}{<} T, typename \texorpdfstring{$>$}{>}} ]\hfill \\
\label{todo__todo000037}%
\Hypertarget{todo__todo000037}%
Can we replace SFINAE here with requires or concepts?
\item[Member \doxylink{namespaceserif_1_1geometry_1_1deformation_1_1backend_1_1mfem_1_1detail_a6d9608b34a2b5cc2fc9290e472c5da2c}{serif\+::geometry\+::deformation\+::backend\+::mfem\+::detail\+::compile\+\_\+radial\+\_\+reference} (const \doxylink{structserif_1_1geometry_1_1deformation_1_1backend_1_1mfem_1_1_reference_discretization}{Reference\+Discretization} \&input, const std\+::vector$<$ int $>$ \&selected)]\hfill \\
\label{todo__todo000006}%
\Hypertarget{todo__todo000006}%
This is a holdover from the original Mean\+Field code and its bespoke reference tracking system. It is likely that this can be removed in favor of SERiF\textquotesingle{}s more robust dependencies graph system.
\item[Member \doxylink{namespaceserif_1_1geometry_1_1deformation_1_1backend_1_1mfem_1_1detail_a05b352de13c1c09e3358f7990397f317}{serif\+::geometry\+::deformation\+::backend\+::mfem\+::detail\+::share\+\_\+reference\+\_\+result} (std\+::expected$<$ Value, Deformation\+Failure $>$ result)]\hfill \\
\label{todo__todo000005}%
\Hypertarget{todo__todo000005}%
A shared pointer was the easiest way to implement this; however, this introduces some non-\/zero overhead related to reference counting. Generally, shared pointers should only be used when absolutely necessary and I have not given deep thought to if that is the case here (and more generally across the graph system).
\item[Struct \doxylink{structserif_1_1mapping_1_1_face_mapping_context}{serif\+::mapping\+::Face\+Mapping\+Context} ]\hfill \\
\label{todo__todo000012}%
\Hypertarget{todo__todo000012}%
Add a worked example here
\item[Struct \doxylink{structserif_1_1mapping_1_1_face_quadrature_context}{serif\+::mapping\+::Face\+Quadrature\+Context} ]\hfill \\
\label{todo__todo000009}%
\Hypertarget{todo__todo000009}%
Add a worked example here
\item[Struct \doxylink{structserif_1_1mapping_1_1_mapping_point_context}{serif\+::mapping\+::Mapping\+Point\+Context} ]\hfill \\
\label{todo__todo000010}%
\Hypertarget{todo__todo000010}%
Add a worked example here
\item[Struct \doxylink{structserif_1_1mapping_1_1_volume_mapping_context}{serif\+::mapping\+::Volume\+Mapping\+Context} ]\hfill \\
\label{todo__todo000011}%
\Hypertarget{todo__todo000011}%
Add a worked example here
\item[Struct \doxylink{structserif_1_1mapping_1_1_volume_quadrature_context}{serif\+::mapping\+::Volume\+Quadrature\+Context} ]\hfill \\
\label{todo__todo000008}%
\Hypertarget{todo__todo000008}%
Add a worked example here
\item[Member \doxylink{classserif_1_1operators_1_1backend_1_1mfem_1_1_tensor_basis_cache_ab188f20a72adcd9a938a3062355d66e1}{serif\+::operators\+::backend\+::mfem\+::Tensor\+Basis\+Cache\+::get} (const \+::mfem\+::\+Finite\+Element \&element, const \+::mfem\+::\+Integration\+Rule \&rule, \doxylink{namespaceserif_1_1discretization_1_1backend_1_1mfem_af75f98db90618153ea4ca169945733f7}{Reference\+Operation} operation, const int copies, const \doxylink{structserif_1_1discretization_1_1backend_1_1mfem_1_1_element_reconstruction}{Element\+Reconstruction} \texorpdfstring{$\ast$}{*}reconstruction=nullptr)]\hfill \\
\label{todo__todo000004}%
\Hypertarget{todo__todo000004}%
I think it would make sense, at some point, to switch this to an std\+::optional return
\item[Member \doxylink{structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_options_ab7b060d26541126b069ab6827de75723}{serif\+::operators\+::backend\+::mfem\+::Volume\+Options\+::quadrature\+\_\+policy} ]\hfill \\
\label{todo__todo000014}%
\Hypertarget{todo__todo000014}%
Change this default. The automatic rule (operators/backend/mfem/quadrature.\+hpp\+: equation\+\_\+rule) adds Order\+W() of the geometry (17 for geometry order 6) plus 3 (p\+\_\+disp -\/ 1) to every form, giving \texorpdfstring{$\sim$}{\string~}order 35 (5,832 points per hexahedron) on the stellar meshes. A fixed discretization order of 11 (216 points) gave the same ESTER/\+TOP agreement for the n=2, J=0.\+05 benchmark at 0.\+96 GiB instead of 13.\+6 GB (profiling/results/\+FINDINGS.\+md, sections 14-\/15); complete\+\_\+sandbox already passes it explicitly. Changing the library default changes every solve, so test expectations (tolerances, iteration counts, stored reference values) may need updating, and a fixed order should be checked against higher field orders.
\item[Namespace \doxylink{namespaceserif_1_1utils_1_1dependencies}{serif\+::utils\+::dependencies} ]\hfill \\
\label{todo__todo000045}%
\Hypertarget{todo__todo000045}%
We may want to remove the ability to have implicit casting between types, this is a bit of a footgun and may lead to subtle bugs.
\item[File \doxylink{value_8hpp}{value.hpp} ]\hfill \\
\label{todo__todo000030}%
\Hypertarget{todo__todo000030}%
This should be consolidated and removed. This information could be injected into the Operation itself.
\end{DoxyRefList}