====================================================== Documentation Guidelines ====================================================== GPUmonty is a public, open-source project. To ensure the codebase remains accessible and maintainable for the scientific community, we provide this centralized documentation as a guide for both users and contributors. The documentation and this site is built using a hybrid pipeline: `Doxygen `_ is used to parse the source code and extract structural metadata into XML format, while `Sphinx `_ serves as the primary engine to render this information into a web interface. Using the `Breathe `_ extension, we ensure that the API reference is always in sync with the latest version of the code. Prerequisites File-Based Organization and Commenting ======================================= To maintain a clear structure, the documentation is organized by source file. Each header file (``.h``) in the repository corresponds to a tab of the documentation. This allows users to browse functionality based on the specific file they are investigating. Function Documentation ---------------------- All function-level documentation must be associated directly with the **function declaration in the header files**. By keeping the documentation in the headers rather than the source (``.cu``) files, we hope to keep the function definition cleaner. When adding or updating functions, use the Javadoc-style comment block immediately above the declaration: .. code-block:: cpp /** * @brief A concise one-line description of the function. * * Detailed explanation of the physical model or numerical method used. * * @param parameter_name Description of the input. * @return Description of the return value. */ __host__ __device__ double example_function(double parameter_name); Guidelines: ----------- * **Consistency**: Ensure the ``@brief`` tag is present; it is used to generate the summary tables in the sidebar. * **Math**: Use LaTeX syntax (``\f$ ... \f$``) for physical variables (e.g., ``\f$ \Theta_e \f$``) to ensure they render correctly on the site. * **Scope**: Documentation should live in the header files. Update Workflow and Repository Structure ======================================== The GPUmonty documentation synchronizes with the latest updates from the `GitHub repository `_. When changes are pushed to the main branch, the documentation pipeline processes the source code to ensure the web portal reflects the current state of the project. Documentation Directories Organization -------------------------------------- The documentation environment is organized into three primary folders: .. list-table:: :widths: 20 80 :header-rows: 1 * - Directory - Purpose * - ``/`` - **Doxyfile**: Contains the Doxyfile configuration used by Doxygen to parse the source code. * - ``docs/`` - **Source Directory**: Contains the Sphinx configuration (``conf.py``), and all ``.rst`` source files. * - ``html/`` - **Web Output**: Stores the generated HTML files, CSS, and JavaScript that constitute the public website. * - ``latex/`` - **Print Output**: Contains the LaTeX source files used to generate the PDF version of the manual. Website Navigation and Tabs --------------------------- The structure of the website is determined by the organization of ``.rst`` files within the ``docs/`` folder: * **Primary Tabs**: Every ``.rst`` file located directly in the root of the ``docs/`` directory (such as ``quickstart.rst`` or ``guidelines.rst``) corresponds to a main navigation tab or section visible from the homepage. * **API Pages**: The technical documentation for each code module is organized within the ``docs/api/`` subdirectory. For example, the documentation for weight calculations is defined in ``docs/api/weights.rst``. How it Works ------------ **Extraction**: Doxygen scans the header files and generates XML metadata representing the code structure. **Translation**: The **Breathe** extension acts as a bridge, allowing Sphinx to read that XML and insert it into the ``.rst`` files found in ``docs/api/``. **Rendering**: Sphinx converts the ``.rst`` files into the final HTML layout. Because the documentation is built directly from the source code, any update to a comment block in a header file (``.h``) will automatically update the corresponding page in the API section upon the next site build. Local Testing and Building ========================== Since any changes to the documentation affect the live website, we encourage local testing before committing and pushing to the repository. Prerequisites ------------- You must have **Doxygen** and **Sphinx** installed on your system. **1. Install Doxygen** (Ubuntu/Debian): .. code-block:: bash sudo apt update sudo apt install doxygen **2. Install Sphinx and Extensions**: .. code-block:: bash pip install sphinx sphinx-autobuild breathe exhale sphinx_rtd_theme Testing Workflow ---------------- Follow these steps to preview your changes locally: 1. **Update Doxyfile/XML**: If you have modified the ``Doxyfile`` or changed comments in the code headers, run Doxygen to update the XML metadata: .. code-block:: bash doxygen Doxyfile 2. **Launch Auto-build**: Open a second terminal and run the following command to keep the site updated automatically as you edit ``.rst`` files: .. code-block:: bash sphinx-autobuild docs docs/_build/html 3. **Preview Changes**: Open your browser and navigate to: ``http://127.0.0.1:8000`` 4. **Clean Build**: Sphinx caches files to speed up building. If you want to force a total rebuild to ensure everything is fresh, delete the build directory: .. code-block:: bash rm -rf docs/_build Because the documentation is built directly from the source code, any update to a comment block in a header file (``.h``) will automatically update the corresponding page in the API section upon the next build.