Line data Source code
1 0 : \cond NEVER 2 : Distributed under the MIT License. 3 : See LICENSE.txt for details. 4 : \endcond 5 : # Developer Guides {#dev_guide} 6 : 7 : ### Charm++ Interface 8 : - \subpage load_balancing_notes "Load Balancing Notes and Recommendations" 9 : 10 : ### Continuous Integration 11 : Explanations on our automated tests and deployments can be found here. 12 : - \subpage dev_guide_automatic_versioning 13 : 14 : ### CoordinateMap Guide 15 : Methods for creating custom coordinate maps are discussed here. 16 : - \subpage redistributing_gridpoints "Methods for redistributing gridpoints" 17 : 18 : ### Developing and Improving Executables 19 : - \subpage spectre_build_system "Build system" and how to add dependencies, unit 20 : tests, and executables. 21 : - \subpage dev_guide_creating_executables "Executables and how to add them" 22 : - \subpage tutorials_parallel - A series of tutorials demonstrating how to write 23 : a parallel executable, and explaining some of the metaprogramming that turns 24 : user-provided code into a SpECTRE parallel executable 25 : - \subpage dev_guide_option_parsing "Option parsing" to get options from input 26 : files 27 : - \subpage dev_guide_importing "Importing" data from files 28 : - \subpage profiling "Profiling" SpECTRE with a variety of different tools 29 : - \subpage spectre_writing_python_bindings "Writing Python Bindings" to use 30 : SpECTRE C++ classes and functions from within python. 31 : - \subpage implementing_vectors "Implementing SpECTRE vectors" a quick how-to 32 : for making new generalizations of DataVectors 33 : - \subpage compiler_and_linker_errors "How to parse linker and compiler errors" 34 : - \subpage static_analysis_tools "Static analysis tools" 35 : - \subpage build_profiling_and_optimization - Getting started with improving 36 : compilation time and memory use 37 : - \subpage runtime_errors "Tips for debugging an executable" 38 : 39 : ### Foundational Concepts in SpECTRE 40 : Designed to give the reader an introduction to SpECTRE's most recurring concepts 41 : and patterns. 42 : - \subpage databox_foundations "Towards SpECTRE's DataBox" 43 : - \subpage protocols "Protocols: metaprogramming interfaces" 44 : - \subpage variables_foundations "Using the Variables class" to improve 45 : efficiency 46 : 47 : ### General SpECTRE Terminology 48 : Terms with SpECTRE-specific meanings are defined here. 49 : - \subpage domain_concepts "Domain Concepts" used throughout the code are 50 : defined here for reference. 51 : 52 : ### Having your Contributions Merged into SpECTRE 53 : - \subpage writing_good_dox "Writing good documentation" is key for long term 54 : maintainability of the project. 55 : - \subpage writing_unit_tests "Writing Unit Tests" to catch bugs and to make 56 : sure future changes don't cause your code to regress. 57 : - \subpage github_actions_guide "GitHub Actions" is used to test every pull 58 : request. 59 : - \subpage code_review_guide "Code review guidelines." All code merged into 60 : develop must follow these requirements. 61 : 62 : ### Performance and Optimization 63 : - \subpage general_perf_guide "General performance guidelines" 64 : 65 : ### Technical Documentation for Fluent Developers 66 : Assumes a thorough familiarity and fluency in SpECTRE's usage of TMP. 67 : - \subpage DataBoxGroup "DataBox" 68 : - \subpage observers_infrastructure_dev_guide "Observers infrastructure" 69 : - \subpage dev_guide_parallelization_foundations - Parallelization 70 : infrastructure components and usage 71 : 72 : ### Template Metaprogramming (TMP) 73 : Explanations for TMP concepts and patterns known to the greater C++ community 74 : can be found here. 75 : - \subpage sfinae "SFINAE" 76 : - \subpage brigand "The Brigand TMP library"