Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision

Target

Select target project
  • dc-oman1/swiftsim
  • swift/swiftsim
  • pdraper/swiftsim
  • tkchan/swiftsim
  • dc-turn5/swiftsim
5 results
Select Git revision
Show changes
Commits on Source (4118)
...@@ -3,4 +3,17 @@ Language: Cpp ...@@ -3,4 +3,17 @@ Language: Cpp
BasedOnStyle: Google BasedOnStyle: Google
KeepEmptyLinesAtTheStartOfBlocks: true KeepEmptyLinesAtTheStartOfBlocks: true
PenaltyBreakAssignment: 2 PenaltyBreakAssignment: 2
IncludeCategories:
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
Priority: 3
SortPriority: 3
- Regex: '^(<|"(gtest|gmock|isl|json)/)'
Priority: 4
- Regex: '<[[:alnum:].]+>'
Priority: 5
- Regex: '.*'
Priority: 2
SortPriority: 0
- Regex: config.h
Priority: 1
... ...
...@@ -13,6 +13,10 @@ config.sub ...@@ -13,6 +13,10 @@ config.sub
ltmain.sh ltmain.sh
libtool libtool
build build
swift
swift_mpi
fof
fof_mpi
src/version_string.h src/version_string.h
swift*.tar.gz swift*.tar.gz
...@@ -22,40 +26,66 @@ doc/html/ ...@@ -22,40 +26,66 @@ doc/html/
doc/latex/ doc/latex/
doc/man/ doc/man/
doc/Doxyfile doc/Doxyfile
doc/RTD/source/SubgridModels/*/*.png
doc/RTD/source/RadiativeTransfer/full_dependency_graph_RT.png
examples/swift
examples/swift_mpi
examples/fof
examples/fof_mpi
examples/*/*/*.xmf examples/*/*/*.xmf
examples/*/*/*.dat examples/*/*/*.dat
examples/*/*/*.png examples/*/*/*.png
examples/*/*/*.pdf
examples/*/*/*.mp4 examples/*/*/*.mp4
examples/*/*/*.txt examples/*/*/*.txt
examples/*/*/*.rst examples/*/*/*.rst
examples/*/*/*.hdf5 examples/*/*/*.hdf5
examples/*/*/*.csv examples/*/*/*.csv
examples/*/*/*.dot examples/*/*/*.dot
examples/*/*/partition_fixed_costs.h examples/**/cell_hierarchy.html
examples/*/*/energy.txt
examples/**/task_level.txt
examples/*/*/timesteps_*.txt
examples/**/timesteps.txt
examples/**/SFR.txt
examples/**/statistics.txt
examples/**/partition_fixed_costs.h
examples/*/*/memuse_report-step*.dat examples/*/*/memuse_report-step*.dat
examples/*/*/memuse_report-step*.log examples/*/*/memuse_report-step*.log
examples/*/*/restart/* examples/*/*/restart/*
examples/*/*/used_parameters.yml
examples/*/stf_output* examples/*/stf_output*
examples/*/stf.* examples/*/stf.*
examples/*/fof_output* examples/*/fof_output*
examples/*/log* examples/*/log*
examples/*/*/used_parameters.yml
examples/*/*/unused_parameters.yml examples/*/*/unused_parameters.yml
examples/*/*/fof_used_parameters.yml
examples/*/*/fof_unused_parameters.yml
examples/*/*.mpg examples/*/*.mpg
examples/*/*/gravity_checks_*.dat examples/*/*/gravity_checks_*.dat
examples/*/*/coolingtables.tar.gz examples/*/*/coolingtables.tar.gz
examples/*/*/coolingtables examples/*/*/coolingtables
examples/*/*/yieldtables.tar.gz examples/*/*/yieldtables.tar.gz
examples/*/*/yieldtables examples/*/*/yieldtables
examples/*/*/photometry.tar.gz
examples/*/*/photometry
examples/*/*/plots
examples/*/*/snapshots
examples/*/*/restart
examples/Cooling/CoolingRates/cooling_rates examples/Cooling/CoolingRates/cooling_rates
examples/Cooling/CoolingRates/cooling_element_*.dat examples/Cooling/CoolingRates/cooling_element_*.dat
examples/Cooling/CoolingRates/cooling_output.dat examples/Cooling/CoolingRates/cooling_output.dat
examples/SubgridTests/StellarEvolution/StellarEvolutionSolution* examples/SubgridTests/StellarEvolution/StellarEvolutionSolution*
examples/SubgridTests/CosmologicalStellarEvolution/StellarEvolutionSolution*
examples/SmallCosmoVolume/SmallCosmoVolume_DM/power_spectra
examples/SmallCosmoVolume/SmallCosmoVolume_cooling/snapshots/
examples/SmallCosmoVolume/SmallCosmoVolume_hydro/snapshots/
examples/**/CloudyData_UVB=HM2012.h5
examples/**/CloudyData_UVB=HM2012_shielded.h5
examples/**/CloudyData_UVB=HM2012_high_density.h5
examples/**/chemistry-AGB+OMgSFeZnSrYBaEu-16072013.h5
examples/**/POPIIsw.h5
examples/**/GRACKLE_INFO
examples/**/snap/
examples/SinkParticles/HomogeneousBox/snapshot_0003restart.hdf5
tests/testActivePair tests/testActivePair
tests/testActivePair.sh tests/testActivePair.sh
...@@ -104,14 +134,23 @@ tests/testReading ...@@ -104,14 +134,23 @@ tests/testReading
tests/testSingle tests/testSingle
tests/testTimeIntegration tests/testTimeIntegration
tests/testSPHStep tests/testSPHStep
tests/testExp
tests/testErfc
tests/testKernel tests/testKernel
tests/testKernelGrav tests/testKernelGrav
tests/testKernelLongGrav
tests/testFFT tests/testFFT
tests/testInteractions tests/testInteractions
tests/testInteractions.sh tests/testInteractions.sh
tests/testSymmetry tests/testSymmetry
tests/testDistance
tests/testHydroMPIrules
tests/testMaths tests/testMaths
tests/testAtomic
tests/testRandom tests/testRandom
tests/testRandomSpacing
tests/testRandomPoisson
tests/testRandomCone
tests/testThreadpool tests/testThreadpool
tests/testParser tests/testParser
tests/testFeedback tests/testFeedback
...@@ -126,9 +165,11 @@ tests/test125cells.sh ...@@ -126,9 +165,11 @@ tests/test125cells.sh
tests/test125cellsPerturbed.sh tests/test125cellsPerturbed.sh
tests/testParser.sh tests/testParser.sh
tests/testReading.sh tests/testReading.sh
tests/testNeutrinoCosmology.sh
tests/testSelectOutput.sh tests/testSelectOutput.sh
tests/unused_parser_output.yml tests/unused_parser_output.yml
tests/used_parser_output.yml tests/used_parser_output.yml
tests/output_list_params.yml
tests/testAdiabaticIndex tests/testAdiabaticIndex
tests/testRiemannExact tests/testRiemannExact
tests/testRiemannTRRS tests/testRiemannTRRS
...@@ -138,9 +179,10 @@ tests/testVoronoi1D ...@@ -138,9 +179,10 @@ tests/testVoronoi1D
tests/testVoronoi2D tests/testVoronoi2D
tests/testVoronoi3D tests/testVoronoi3D
tests/testDump tests/testDump
tests/testLogger tests/testCSDS
tests/benchmarkInteractions tests/benchmarkInteractions
tests/testGravityDerivatives tests/testGravityDerivatives
tests/testGravitySpeed
tests/testPotentialSelf tests/testPotentialSelf
tests/testPotentialPair tests/testPotentialPair
tests/testEOS tests/testEOS
...@@ -152,7 +194,12 @@ tests/testOutputList ...@@ -152,7 +194,12 @@ tests/testOutputList
tests/testCbrt tests/testCbrt
tests/testFormat.sh tests/testFormat.sh
tests/testCooling tests/testCooling
tests/testComovingCooling
tests/testHashmap tests/testHashmap
tests/testNeutrinoCosmology
tests/testNeutrinoFermiDirac
tests/testLog
tests/testTimeline
tests/*.png tests/*.png
tests/*.txt tests/*.txt
...@@ -164,14 +211,21 @@ theory/SPH/Flavours/sph_flavours.pdf ...@@ -164,14 +211,21 @@ theory/SPH/Flavours/sph_flavours.pdf
theory/SPH/EoS/eos.pdf theory/SPH/EoS/eos.pdf
theory/SPH/*.pdf theory/SPH/*.pdf
theory/paper_pasc/pasc_paper.pdf theory/paper_pasc/pasc_paper.pdf
theory/Multipoles/alpha_derivatives.pdf
theory/Multipoles/alpha_powers.pdf
theory/Multipoles/chi_derivatives.pdf
theory/Multipoles/sigma_derivatives.pdf
theory/Multipoles/fmm.pdf theory/Multipoles/fmm.pdf
theory/Multipoles/fmm_standalone.pdf theory/Multipoles/fmm_standalone.pdf
theory/Multipoles/potential.pdf theory/Multipoles/potential.pdf
theory/Multipoles/potential_long.pdf theory/Multipoles/potential_long.pdf
theory/Multipoles/potential_short.pdf theory/Multipoles/potential_short.pdf
theory/Multipoles/force_short.pdf theory/Multipoles/force_short.pdf
theory/Multipoles/mac_potential.pdf
theory/Cosmology/cosmology.pdf theory/Cosmology/cosmology.pdf
theory/Cooling/eagle_cooling.pdf theory/Cooling/eagle_cooling.pdf
theory/Gizmo/gizmo-implementation-details/gizmo-implementation-details.pdf
theory/RadiativeTransfer/GEARRT/GEARRT.pdf
m4/libtool.m4 m4/libtool.m4
m4/ltoptions.m4 m4/ltoptions.m4
...@@ -193,6 +247,7 @@ src/equation_of_state/planetary/*.txt ...@@ -193,6 +247,7 @@ src/equation_of_state/planetary/*.txt
# Intel compiler optimization reports # Intel compiler optimization reports
*.optrpt *.optrpt
*.opt.yaml
# Object files # Object files
.deps/ .deps/
...@@ -238,6 +293,9 @@ src/equation_of_state/planetary/*.txt ...@@ -238,6 +293,9 @@ src/equation_of_state/planetary/*.txt
*.out *.out
*.toc *.toc
## Figures
*.svg
## Intermediate documents: ## Intermediate documents:
*.dvi *.dvi
*-converted-to.* *-converted-to.*
...@@ -345,3 +403,9 @@ sympy-plots-for-*.tex/ ...@@ -345,3 +403,9 @@ sympy-plots-for-*.tex/
# vim # vim
*.swp *.swp
# black formatting
black_formatting_env
# vscode
*.json
[submodule "csds"]
path = csds
url = https://gitlab.cosma.dur.ac.uk/lhausammann/csds-reader.git
Matthieu Schaller schaller@strw.leidenuniv.nl
Pedro Gonnet gonnet@google.com Pedro Gonnet gonnet@google.com
Matthieu Schaller matthieu.schaller@durham.ac.uk
Aidan Chalk aidan.chalk@durham.ac.uk Aidan Chalk aidan.chalk@durham.ac.uk
Peter W. Draper p.w.draper@durham.ac.uk Peter W. Draper p.w.draper@durham.ac.uk
Bert Vandenbroucke bert.vandenbroucke@gmail.com Bert Vandenbroucke bert.vandenbroucke@gmail.com
...@@ -13,3 +13,22 @@ Josh Borrow joshua.borrow@durham.ac.uk ...@@ -13,3 +13,22 @@ Josh Borrow joshua.borrow@durham.ac.uk
Loic Hausammann loic.hausammann@epfl.ch Loic Hausammann loic.hausammann@epfl.ch
Yves Revaz yves.revaz@epfl.ch Yves Revaz yves.revaz@epfl.ch
Jacob Kegerreis jacob.kegerreis@durham.ac.uk Jacob Kegerreis jacob.kegerreis@durham.ac.uk
Mladen Ivkovic mladen.ivkovic@durham.ac.uk
Stuart McAlpine stuart.mcalpine@helsinki.fi
Folkert Nobels nobels@strw.leidenuniv.nl
John Helly j.c.helly@durham.ac.uk
Alexei Borissov alexei.borissov@ed.ac.uk
Yannick Bahe bahe@strw.leidenuniv.nl
Roi Kugel kugel@strw.leidenuniv.nl
Evgenii Chaikin chaikin@strw.leidenuniv.nl
Sylvia Ploeckinger ploeckinger@lorentz.leidenuniv.nl
Willem Elbers willem.h.elbers@durham.ac.uk
TK Chan chantsangkeung@gmail.com
Marcel van Daalen daalen@strw.leidenuniv.nl
Filip Husko filip.husko@durham.ac.uk
Orestis Karapiperis karapiperis@lorentz.leidenuniv.nl
Stan Verhoeve s06verhoeve@gmail.com
Nikyta Shchutskyi shchutskyi@lorentz.leidenuniv.nl
Will Roper w.roper@sussex.ac.uk
Darwin Roduit darwin.roduit@alumni.epfl.ch
Jonathan Davies j.j.davies@ljmu.ac.uk
cff-version: 1.2.0
title: >-
SWIFT: SPH With Inter-dependent Fine-grained
Tasking
message: 'If you use this software, please cite it as below'
type: software
authors:
- given-names: Matthieu
family-names: Schaller
email: schaller@strw.leidenuniv.nl
affiliation: Leiden University
orcid: 'https://orcid.org/0000-0002-2395-4902'
- given-names: Gonnet
family-names: Pedro
- given-names: Peter
family-names: Draper
- given-names: Aidan
family-names: Chalk
- given-names: Bert
family-names: Vandenbroucke
- given-names: James
family-names: Willis
- given-names: Richard
family-names: Bower
- given-names: Josh
family-names: Borrow
- given-names: Loic
family-names: Hausammann
- given-names: Yves
family-names: Revaz
- given-names: Jacob
family-names: Kegerreis
- given-names: Mladen
family-names: Ivkovic
- given-names: Stuart
family-names: McAlpine
- given-names: Folkert
family-names: Nobels
- given-names: John
family-names: Helly
- given-names: Yannick
family-names: Bahé
- given-names: Willem
family-names: Elbers
- given-names: Filip
family-names: Husko
The SWIFT source code is using a variation of the 'Google' formatting style. The SWIFT source code is using a variation of the 'Google' formatting style.
The script 'format.sh' in the root directory applies the clang-format-5.0 The script 'format.sh' in the root directory applies the clang-format-18
tool with our style choices to all the SWIFT C source file. Please apply tool with our style choices to all the SWIFT C source file. Please apply
the formatting script to the files before submitting a merge request. the formatting script to the files before submitting a merge request.
The Python scripts in the repository use default formatting enforced by
'black'. Since 'black' formatting still strongly depends on the version,
we currently enforce use of 'black==19.3b0' using a virtual environment.
The setup of the virtual environment and formatting of all PYthon
scripts is done automatically by the Python formatting script
'format_python.sh'. Please apply this script before submitting a merge
request containing new or updated Python scripts.
The SWIFT code comes with a series of unit tests that are run automatically The SWIFT code comes with a series of unit tests that are run automatically
when a push to the master branch occurs. The suite can be run by doing a `make when a push to the master branch occurs. The suite can be run by doing a `make
check` in the root directory. Please check that the test suite still check` in the root directory. Please check that the test suite still
......
### GNU LESSER GENERAL PUBLIC LICENSE GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Copyright (C) 2007 Free Software Foundation, Inc.
<https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies of this This version of the GNU Lesser General Public License incorporates
license document, but changing it is not allowed. the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.
This version of the GNU Lesser General Public License incorporates the 0. Additional Definitions.
terms and conditions of version 3 of the GNU General Public License,
supplemented by the additional permissions listed below.
#### 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.
As used herein, "this License" refers to version 3 of the GNU Lesser "The Library" refers to a covered work governed by this License,
General Public License, and the "GNU GPL" refers to version 3 of the other than an Application or a Combined Work as defined below.
GNU General Public License.
"The Library" refers to a covered work governed by this License, other An "Application" is any work that makes use of an interface provided
than an Application or a Combined Work as defined below.
An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library. by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library. of using an interface provided by the Library.
A "Combined Work" is a work produced by combining or linking an A "Combined Work" is a work produced by combining or linking an
Application with the Library. The particular version of the Library Application with the Library. The particular version of the Library
with which the Combined Work was made is also called the "Linked with which the Combined Work was made is also called the "Linked
Version". Version".
The "Minimal Corresponding Source" for a Combined Work means the The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version. based on the Application, and not on the Linked Version.
The "Corresponding Application Code" for a Combined Work means the The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work. Application, but excluding the System Libraries of the Combined Work.
#### 1. Exception to Section 3 of the GNU GPL. 1. Exception to Section 3 of the GNU GPL.
You may convey a covered work under sections 3 and 4 of this License You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL. without being bound by section 3 of the GNU GPL.
#### 2. Conveying Modified Versions. 2. Conveying Modified Versions.
If you modify a copy of the Library, and, in your modifications, a If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified facility is invoked), then you may convey a copy of the modified
version: version:
- a) under this License, provided that you make a good faith effort a) under this License, provided that you make a good faith effort to
to ensure that, in the event an Application does not supply the ensure that, in the event an Application does not supply the
function or data, the facility still operates, and performs function or data, the facility still operates, and performs
whatever part of its purpose remains meaningful, or whatever part of its purpose remains meaningful, or
- b) under the GNU GPL, with none of the additional permissions of
this License applicable to that copy. b) under the GNU GPL, with none of the additional permissions of
this License applicable to that copy.
#### 3. Object Code Incorporating Material from Library Header Files. 3. Object Code Incorporating Material from Library Header Files.
The object code form of an Application may incorporate material from a The object code form of an Application may incorporate material from
header file that is part of the Library. You may convey such object a header file that is part of the Library. You may convey such object
code under terms of your choice, provided that, if the incorporated code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following: (ten or fewer lines in length), you do both of the following:
- a) Give prominent notice with each copy of the object code that a) Give prominent notice with each copy of the object code that the
the Library is used in it and that the Library and its use are Library is used in it and that the Library and its use are
covered by this License. covered by this License.
- b) Accompany the object code with a copy of the GNU GPL and this
license document. b) Accompany the object code with a copy of the GNU GPL and this license
document.
#### 4. Combined Works.
4. Combined Works.
You may convey a Combined Work under terms of your choice that, taken
together, effectively do not restrict modification of the portions of You may convey a Combined Work under terms of your choice that,
the Library contained in the Combined Work and reverse engineering for taken together, effectively do not restrict modification of the
debugging such modifications, if you also do each of the following: portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
- a) Give prominent notice with each copy of the Combined Work that the following:
the Library is used in it and that the Library and its use are
covered by this License. a) Give prominent notice with each copy of the Combined Work that
- b) Accompany the Combined Work with a copy of the GNU GPL and this the Library is used in it and that the Library and its use are
license document. covered by this License.
- c) For a Combined Work that displays copyright notices during
execution, include the copyright notice for the Library among b) Accompany the Combined Work with a copy of the GNU GPL and this license
these notices, as well as a reference directing the user to the document.
copies of the GNU GPL and this license document.
- d) Do one of the following: c) For a Combined Work that displays copyright notices during
- 0) Convey the Minimal Corresponding Source under the terms of execution, include the copyright notice for the Library among
this License, and the Corresponding Application Code in a form these notices, as well as a reference directing the user to the
suitable for, and under terms that permit, the user to copies of the GNU GPL and this license document.
recombine or relink the Application with a modified version of
the Linked Version to produce a modified Combined Work, in the d) Do one of the following:
manner specified by section 6 of the GNU GPL for conveying
Corresponding Source. 0) Convey the Minimal Corresponding Source under the terms of this
- 1) Use a suitable shared library mechanism for linking with License, and the Corresponding Application Code in a form
the Library. A suitable mechanism is one that (a) uses at run suitable for, and under terms that permit, the user to
time a copy of the Library already present on the user's recombine or relink the Application with a modified version of
computer system, and (b) will operate properly with a modified the Linked Version to produce a modified Combined Work, in the
version of the Library that is interface-compatible with the manner specified by section 6 of the GNU GPL for conveying
Linked Version. Corresponding Source.
- e) Provide Installation Information, but only if you would
otherwise be required to provide such information under section 6 1) Use a suitable shared library mechanism for linking with the
of the GNU GPL, and only to the extent that such information is Library. A suitable mechanism is one that (a) uses at run time
necessary to install and execute a modified version of the a copy of the Library already present on the user's computer
Combined Work produced by recombining or relinking the Application system, and (b) will operate properly with a modified version
with a modified version of the Linked Version. (If you use option of the Library that is interface-compatible with the Linked
4d0, the Installation Information must accompany the Minimal Version.
Corresponding Source and Corresponding Application Code. If you
use option 4d1, you must provide the Installation Information in e) Provide Installation Information, but only if you would otherwise
the manner specified by section 6 of the GNU GPL for conveying be required to provide such information under section 6 of the
Corresponding Source.) GNU GPL, and only to the extent that such information is
necessary to install and execute a modified version of the
#### 5. Combined Libraries. Combined Work produced by recombining or relinking the
Application with a modified version of the Linked Version. (If
You may place library facilities that are a work based on the Library you use option 4d0, the Installation Information must accompany
side by side in a single library together with other library the Minimal Corresponding Source and Corresponding Application
Code. If you use option 4d1, you must provide the Installation
Information in the manner specified by section 6 of the GNU GPL
for conveying Corresponding Source.)
5. Combined Libraries.
You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your License, and convey such a combined library under terms of your
choice, if you do both of the following: choice, if you do both of the following:
- a) Accompany the combined library with a copy of the same work a) Accompany the combined library with a copy of the same work based
based on the Library, uncombined with any other library on the Library, uncombined with any other library facilities,
facilities, conveyed under the terms of this License. conveyed under the terms of this License.
- b) Give prominent notice with the combined library that part of it
is a work based on the Library, and explaining where to find the b) Give prominent notice with the combined library that part of it
accompanying uncombined form of the same work. is a work based on the Library, and explaining where to find the
accompanying uncombined form of the same work.
#### 6. Revised Versions of the GNU Lesser General Public License. 6. Revised Versions of the GNU Lesser General Public License.
The Free Software Foundation may publish revised and/or new versions The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns. differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Library Each version is given a distinguishing version number. If the
as you received it specifies that a certain numbered version of the Library as you received it specifies that a certain numbered version
GNU Lesser General Public License "or any later version" applies to of the GNU Lesser General Public License "or any later version"
it, you have the option of following the terms and conditions either applies to it, you have the option of following the terms and
of that published version or of any later version published by the conditions either of that published version or of any later version
Free Software Foundation. If the Library as you received it does not published by the Free Software Foundation. If the Library as you
specify a version number of the GNU Lesser General Public License, you received it does not specify a version number of the GNU Lesser
may choose any version of the GNU Lesser General Public License ever General Public License, you may choose any version of the GNU Lesser
published by the Free Software Foundation. General Public License ever published by the Free Software Foundation.
If the Library as you received it specifies that a proxy can decide If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the permanent authorization for you to choose that version for the
......
...@@ -37,6 +37,8 @@ SWIFT has been successfully built and tested with the following compilers: ...@@ -37,6 +37,8 @@ SWIFT has been successfully built and tested with the following compilers:
- GCC 4.8.x - GCC 4.8.x
- Intel ICC 15.0.x - Intel ICC 15.0.x
- clang 3.4.x - clang 3.4.x
- aocc 3.x
- icx (oneAPI) 2022.x
More recent versions and slightly older ones should also be able to More recent versions and slightly older ones should also be able to
build the software. build the software.
...@@ -97,7 +99,7 @@ before you can build it. ...@@ -97,7 +99,7 @@ before you can build it.
- HDF5: - HDF5:
A HDF5 library (v. 1.8.x or higher) is required to read and A HDF5 library (v. 1.10.x or higher) is required to read and
write particle data. One of the commands "h5cc" or "h5pcc" write particle data. One of the commands "h5cc" or "h5pcc"
should be available. If "h5pcc" is located then a parallel should be available. If "h5pcc" is located then a parallel
HDF5 built for the version of MPI located should be HDF5 built for the version of MPI located should be
...@@ -180,7 +182,7 @@ before you can build it. ...@@ -180,7 +182,7 @@ before you can build it.
documentation. documentation.
- python: - python:
Examples and solution script use python and rely on the numpy Examples and solution script use python 3 and rely on the numpy
library version 1.8.2 or higher. library version 1.8.2 or higher.
...@@ -189,6 +191,14 @@ before you can build it. ...@@ -189,6 +191,14 @@ before you can build it.
================== ==================
The SWIFT source code uses a variation of 'Google' style. The script The SWIFT source code uses a variation of 'Google' style. The script
'format.sh' in the root directory applies the clang-format-5.0 tool with our 'format.sh' in the root directory applies the clang-format-18 tool with our
style choices to all the SWIFT C source file. Please apply the formatting style choices to all the SWIFT C source file. Please apply the formatting
script to the files before submitting a merge request. script to the files before submitting a merge request.
The Python scripts in the repository use default formatting enforced by
'black'. Since 'black' formatting still strongly depends on the version,
we currently enforce use of 'black==19.3b0' using a virtual environment.
The setup of the virtual environment and formatting of all PYthon
scripts is done automatically by the Python formatting script
'format_python.sh'. Please apply this script before submitting a merge
request containing new or updated Python scripts.
# This file is part of SWIFT. # This file is part of SWIFT.
# Copyright (c) 2012 pedro.gonnet@durham.ac.uk # Copyright (c) 2012 pedro.gonnet@durham.ac.uk
# 2015 matthieu.schaller@durham.ac.uk # 2015 schaller@strw.leidenuniv.nl
# #
# This program is free software: you can redistribute it and/or modify # This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
...@@ -19,10 +19,87 @@ ...@@ -19,10 +19,87 @@
ACLOCAL_AMFLAGS = -I m4 ACLOCAL_AMFLAGS = -I m4
# Show the way... # Show the way...
SUBDIRS = src argparse examples doc tests tools if HAVECSDS
SUBDIRS = csds
else
SUBDIRS =
endif
SUBDIRS += src argparse examples doc tests tools
if HAVEEAGLECOOLING if HAVEEAGLECOOLING
SUBDIRS += examples/Cooling/CoolingRates SUBDIRS += examples/Cooling/CoolingRates
DIST_SUBDIRS = $(SUBDIRS)
else
DIST_SUBDIRS = $(SUBDIRS) examples/Cooling/CoolingRates
endif
# Common flags
MYFLAGS =
# Add the source directory and the non-standard paths to the included library headers to CFLAGS
AM_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/argparse $(HDF5_CPPFLAGS) \
$(GSL_INCS) $(FFTW_INCS) $(NUMA_INCS) $(GRACKLE_INCS) \
$(CHEALPIX_CFLAGS) $(LUSTREAPI_CFLAGS)
AM_LDFLAGS = $(HDF5_LDFLAGS)
# Extra libraries.
EXTRA_LIBS = $(GSL_LIBS) $(HDF5_LIBS) $(FFTW_LIBS) $(NUMA_LIBS) $(PROFILER_LIBS) \
$(TCMALLOC_LIBS) $(JEMALLOC_LIBS) $(TBBMALLOC_LIBS) $(GRACKLE_LIBS) \
$(CHEALPIX_LIBS) $(LUSTREAPI_LIBS)
# MPI libraries.
MPI_LIBS = $(PARMETIS_LIBS) $(METIS_LIBS) $(MPI_THREAD_LIBS) $(FFTW_MPI_LIBS)
MPI_FLAGS = -DWITH_MPI $(PARMETIS_INCS) $(METIS_INCS) $(FFTW_MPI_INCS)
# Programs.
bin_PROGRAMS = swift
# Also build the FOF tool?
if HAVESTANDALONEFOF
bin_PROGRAMS += fof
endif
# Do we have the CSDS?
if HAVECSDS
LD_CSDS = csds/src/.libs/libcsds_writer.a
else
LD_CSDS =
endif
# Build MPI versions as well?
if HAVEMPI
bin_PROGRAMS += swift_mpi
if HAVESTANDALONEFOF
bin_PROGRAMS += fof_mpi
endif
endif
# engine_policy_setaffinity is available?
if HAVESETAFFINITY
ENGINE_POLICY_SETAFFINITY=| engine_policy_setaffinity
else
ENGINE_POLICY_SETAFFINITY=
endif endif
# Sources for swift
swift_SOURCES = swift.c
swift_CFLAGS = $(MYFLAGS) $(AM_CFLAGS) -DENGINE_POLICY="engine_policy_keep $(ENGINE_POLICY_SETAFFINITY)"
swift_LDADD = src/libswiftsim.la argparse/libargparse.la $(VELOCIRAPTOR_LIBS) $(EXTRA_LIBS) $(LD_CSDS)
# Sources for swift_mpi, do we need an affinity policy for MPI?
swift_mpi_SOURCES = swift.c
swift_mpi_CFLAGS = $(MYFLAGS) $(AM_CFLAGS) $(MPI_FLAGS) -DENGINE_POLICY="engine_policy_keep $(ENGINE_POLICY_SETAFFINITY)"
swift_mpi_LDADD = src/libswiftsim_mpi.la argparse/libargparse.la $(MPI_LIBS) $(VELOCIRAPTOR_MPI_LIBS) $(EXTRA_LIBS) $(LD_CSDS)
# Sources for fof
fof_SOURCES = swift_fof.c
fof_CFLAGS = $(MYFLAGS) $(AM_CFLAGS) -DENGINE_POLICY="engine_policy_keep $(ENGINE_POLICY_SETAFFINITY)"
fof_LDADD = src/.libs/libswiftsim.a argparse/.libs/libargparse.a $(VELOCIRAPTOR_LIBS) $(EXTRA_LIBS) $(LD_CSDS)
# Sources for fof_mpi, do we need an affinity policy for MPI?
fof_mpi_SOURCES = swift_fof.c
fof_mpi_CFLAGS = $(MYFLAGS) $(AM_CFLAGS) $(MPI_FLAGS) -DENGINE_POLICY="engine_policy_keep $(ENGINE_POLICY_SETAFFINITY)"
fof_mpi_LDADD = src/.libs/libswiftsim_mpi.a argparse/.libs/libargparse.a $(MPI_LIBS) $(VELOCIRAPTOR_MPI_LIBS) $(EXTRA_LIBS) $(LD_CSDS)
# Non-standard files that should be part of the distribution. # Non-standard files that should be part of the distribution.
EXTRA_DIST = INSTALL.swift .clang-format format.sh EXTRA_DIST = INSTALL.swift .clang-format format.sh
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
/____/ |__/|__/___/_/ /_/ /____/ |__/|__/___/_/ /_/
SPH With Inter-dependent Fine-grained Tasking SPH With Inter-dependent Fine-grained Tasking
Version : 0.8.3 Version : 2025.04
Website: www.swiftsim.com Website: www.swiftsim.com
Twitter: @SwiftSimulation Twitter: @SwiftSimulation
...@@ -22,7 +22,7 @@ Parameters: ...@@ -22,7 +22,7 @@ Parameters:
-h, --help show this help message and exit -h, --help show this help message and exit
Simulation options: Simulation options:
-b, --feedback Run with stars feedback. -b, --feedback Run with stars feedback.
-c, --cosmology Run with cosmological time integration. -c, --cosmology Run with cosmological time integration.
--temperature Run with temperature calculation. --temperature Run with temperature calculation.
...@@ -30,21 +30,52 @@ Parameters: ...@@ -30,21 +30,52 @@ Parameters:
-D, --drift-all Always drift all particles even the ones -D, --drift-all Always drift all particles even the ones
far from active particles. This emulates far from active particles. This emulates
Gadget-[23] and GIZMO's default behaviours. Gadget-[23] and GIZMO's default behaviours.
-F, --star-formation Run with star formation. -F, --star-formation Run with star formation.
-g, --external-gravity Run with an external gravitational potential. -g, --external-gravity Run with an external gravitational potential.
-G, --self-gravity Run with self-gravity. -G, --self-gravity Run with self-gravity.
-M, --multipole-reconstruction Reconstruct the multipoles every time-step. -M, --multipole-reconstruction Reconstruct the multipoles every time-step.
-s, --hydro Run with hydrodynamics. -s, --hydro Run with hydrodynamics.
-S, --stars Run with stars. -S, --stars Run with stars.
-B, --black-holes Run with black holes. -B, --black-holes Run with black holes.
-u, --fof Run Friends-of-Friends algorithm and -k, --sinks Run with sink particles.
black holes seeding. -u, --fof Run Friends-of-Friends algorithm to
perform black hole seeding.
--lightcone Generate lightcone outputs.
-x, --velociraptor Run with structure finding. -x, --velociraptor Run with structure finding.
--line-of-sight Run with line-of-sight outputs.
--limiter Run with time-step limiter. --limiter Run with time-step limiter.
--sync Run with time-step synchronization
of particles hit by feedback events.
--csds Run with the Continuous Simulation Data
Stream (CSDS).
-R, --radiation Run with radiative transfer.
--power Run with power spectrum outputs.
Simulation meta-options:
--quick-lyman-alpha Run with all the options needed for the
quick Lyman-alpha model. This is equivalent
to --hydro --self-gravity --stars --star-formation
--cooling.
--eagle Run with all the options needed for the
EAGLE model. This is equivalent to --hydro
--limiter --sync --self-gravity --stars
--star-formation --cooling --feedback
--black-holes --fof.
--gear Run with all the options needed for the
GEAR model. This is equivalent to --hydro
--limiter --sync --self-gravity --stars
--star-formation --cooling --feedback.
--agora Run with all the options needed for the
AGORA model. This is equivalent to --hydro
--limiter --sync --self-gravity --stars
--star-formation --cooling --feedback.
Control options: Control options:
-a, --pin Pin runners using processor affinity. -a, --pin Pin runners using processor affinity.
--nointerleave Do not interleave memory allocations across
NUMA regions.
-d, --dry-run Dry run. Read the parameter file, allocates -d, --dry-run Dry run. Read the parameter file, allocates
memory but does not read the particles memory but does not read the particles
from ICs. Exits before the start of time from ICs. Exits before the start of time
...@@ -64,14 +95,24 @@ Parameters: ...@@ -64,14 +95,24 @@ Parameters:
read from the parameter file. Can be used read from the parameter file. Can be used
more than once {sec:par:value}. more than once {sec:par:value}.
-r, --restart Continue using restart files. -r, --restart Continue using restart files.
-t, --threads=<int> The number of threads to use on each MPI -t, --threads=<int> The number of task threads to use on each
rank. Defaults to 1 if not specified. MPI rank. Defaults to 1 if not specified.
--pool-threads=<int> The number of threads to use on each MPI
rank for the threadpool operations.
Defaults to the numbers of task threads
if not specified.
-T, --timers=<int> Print timers every time-step. -T, --timers=<int> Print timers every time-step.
-v, --verbose=<int> Run in verbose mode, in MPI mode 2 outputs -v, --verbose=<int> Run in verbose mode, in MPI mode 2 outputs
from all ranks. from all ranks.
-y, --task-dumps=<int> Time-step frequency at which task analysis -y, --task-dumps=<int> Time-step frequency at which task graphs
files and/or tasks are dumped. are dumped.
--cell-dumps=<int> Time-step frequency at which cell graphs
are dumped.
-Y, --threadpool-dumps=<int> Time-step frequency at which threadpool -Y, --threadpool-dumps=<int> Time-step frequency at which threadpool
tasks are dumped. tasks are dumped.
--dump-tasks-threshold=<flt> Fraction of the total step's time spent
in a task to trigger a dump of the task plot
on this step
See the file examples/parameter_example.yml for an example of parameter file. See the file examples/parameter_example.yml for an example of parameter file.
Various hints on settings needed to get various MPIs running with SWIFT.
Last update 5th May 2020.
## Intel MPI
_Intel MPI 2018_ usually runs without any needs for special settings.
_Intel MPI 2019 and 2020_ can run for small tests, but without flags will
generally deadlock in the MPI exchanges of the engine, or worse. In that case
try the following settings.
```
FI_OFI_RXM_RX_SIZE=4096
FI_OFI_RXM_TX_SIZE=4096
FI_UNIVERSE_SIZE=2048
```
If you want use the `release_mt` library, then you also need to use:
```
source $I_MPI_ROOT/intel64/bin/mpivars.sh release_mt
```
when initializing the library environment. Some success has also been seen
using the asynchronous progression settings:
```
I_MPI_ASYNC_PROGRESS=1
I_MPI_ASYNC_PROGRESS_THREADS=1
```
(note these are tested with `2019 update-4` and `2020 update-1` on Mellanox).
## OpenMPI
_Open MPI_ comes in many flavours with many combinations of underlying
transport libraries and running on many different fabrics. A complete
description of all combinations is beyond the scope of this guide.
On Mellanox hardware, we have had success running version 4.0 with the
UCX layer version 1.6 and using the following settings:
```
-mca coll_hcoll_enable 0
UCX_TLS=ud_x,shm,self
UCX_RC_MLX5_TM_ENABLE=n
UCX_DC_MLX5_TM_ENABLE=n
```
These environment variables (set on the Mellanox-base cosma system in Durham)
for version 4.0.5 with the UCX backend can also be useful:
```
OMPI_MCA_btl ^openib
OMPI_MCA_btl_openib_flags 1
OMPI_MCA_plm_rsh_num_concurrent 768
OMPI_MCA_mpool_rdma_rcache_size_limit 209715200
```
\ No newline at end of file
<a name="logo"/>
<div align="center">
<a href="https://www.swiftsim.com/" target="_blank">
<img src="https://swift.strw.leidenuniv.nl/SWIFT_banner.jpg" alt="SWIFT banner" width="1016" height="242"></img>
</a>
</div>
SWIFT: SPH WIth Fine-grained inter-dependent Tasking SWIFT: SPH WIth Fine-grained inter-dependent Tasking
==================================================== ====================================================
...@@ -11,7 +18,7 @@ More general information about SWIFT is available on the project ...@@ -11,7 +18,7 @@ More general information about SWIFT is available on the project
[webpages](http://www.swiftsim.com). [webpages](http://www.swiftsim.com).
For information on how to _run_ SWIFT, please consult the onboarding guide For information on how to _run_ SWIFT, please consult the onboarding guide
available [here](http://www.swiftsim.com/onboarding.pdf). This includes available [here](https://swift.strw.leidenuniv.nl/onboarding.pdf). This includes
dependencies, and a few examples to get you going. dependencies, and a few examples to get you going.
We suggest that you use the latest release branch of SWIFT, rather than the We suggest that you use the latest release branch of SWIFT, rather than the
...@@ -28,11 +35,53 @@ Please feel free to submit issues to this repository, or even pull ...@@ -28,11 +35,53 @@ Please feel free to submit issues to this repository, or even pull
requests. We will try to deal with them as soon as possible, but as the requests. We will try to deal with them as soon as possible, but as the
core development team is quite small this could take some time. core development team is quite small this could take some time.
Disclaimer
----------
We would like to emphasise that SWIFT comes without any warranty of accuracy,
correctness or efficiency. As mentioned in the license, the software comes
`as-is` and the onus is on the user to get meaningful results. Whilst the
authors will endeavour to answer questions related to using the code, we
recommend users build and maintain their own copies. This documentation contains
the most basic information to get started. Reading it and possibly also the
source code is the best way to start running simulations.
The users are responsible to understand what the code is doing and for the
results of their simulation runs.
Note also that the values of the parameters given in the examples are only
indicative. We recommend users experiment by themselves and a campaign of
experimentation with various values is highly encouraged. Each problem will
likely require different values and the sensitivity to the details of the
physical model is something left to the users to explore.
Acknowledgement & Citation
-------------------------
The SWIFT code was last described in this paper:
https://ui.adsabs.harvard.edu/abs/2023arXiv230513380S. The core solver, the
numerical methods as well as many extensions where described there. We ask users
running SWIFT for their research to please cite this paper when they present
their results.
In order to keep track of usage and measure the impact of the software, we
kindly ask users publishing scientific results using SWIFT to add the following
sentence to the acknowledgement section of their papers:
"The research in this paper made use of the SWIFT open-source
simulation code (http://www.swiftsim.com, Schaller et al. 2018)
version X.Y.Z."
with the version number set to the version used for the simulations and the
reference pointing to the ASCL entry of the code: https://ascl.net/1805.020.
Contribution Guidelines Contribution Guidelines
----------------------- -----------------------
The SWIFT source code uses a variation of the 'Google' formatting style. The SWIFT source code uses a variation of the 'Google' formatting style.
The script 'format.sh' in the root directory applies the clang-format-5.0 The script 'format.sh' in the root directory applies the clang-format-18
tool with our style choices to all the SWIFT C source file. Please apply tool with our style choices to all the SWIFT C source file. Please apply
the formatting script to the files before submitting a pull request. the formatting script to the files before submitting a pull request.
...@@ -57,7 +106,7 @@ Runtime parameters ...@@ -57,7 +106,7 @@ Runtime parameters
/____/ |__/|__/___/_/ /_/ /____/ |__/|__/___/_/ /_/
SPH With Inter-dependent Fine-grained Tasking SPH With Inter-dependent Fine-grained Tasking
Version : 0.8.3 Version : 2025.04
Website: www.swiftsim.com Website: www.swiftsim.com
Twitter: @SwiftSimulation Twitter: @SwiftSimulation
...@@ -73,7 +122,7 @@ Parameters: ...@@ -73,7 +122,7 @@ Parameters:
-h, --help show this help message and exit -h, --help show this help message and exit
Simulation options: Simulation options:
-b, --feedback Run with stars feedback. -b, --feedback Run with stars feedback.
-c, --cosmology Run with cosmological time integration. -c, --cosmology Run with cosmological time integration.
--temperature Run with temperature calculation. --temperature Run with temperature calculation.
...@@ -81,21 +130,52 @@ Parameters: ...@@ -81,21 +130,52 @@ Parameters:
-D, --drift-all Always drift all particles even the ones -D, --drift-all Always drift all particles even the ones
far from active particles. This emulates far from active particles. This emulates
Gadget-[23] and GIZMO's default behaviours. Gadget-[23] and GIZMO's default behaviours.
-F, --star-formation Run with star formation. -F, --star-formation Run with star formation.
-g, --external-gravity Run with an external gravitational potential. -g, --external-gravity Run with an external gravitational potential.
-G, --self-gravity Run with self-gravity. -G, --self-gravity Run with self-gravity.
-M, --multipole-reconstruction Reconstruct the multipoles every time-step. -M, --multipole-reconstruction Reconstruct the multipoles every time-step.
-s, --hydro Run with hydrodynamics. -s, --hydro Run with hydrodynamics.
-S, --stars Run with stars. -S, --stars Run with stars.
-B, --black-holes Run with black holes. -B, --black-holes Run with black holes.
-k, --sinks Run with sink particles.
-u, --fof Run Friends-of-Friends algorithm to -u, --fof Run Friends-of-Friends algorithm to
perform black hole seeding. perform black hole seeding.
--lightcone Generate lightcone outputs.
-x, --velociraptor Run with structure finding. -x, --velociraptor Run with structure finding.
--line-of-sight Run with line-of-sight outputs.
--limiter Run with time-step limiter. --limiter Run with time-step limiter.
--sync Run with time-step synchronization
of particles hit by feedback events.
--csds Run with the Continuous Simulation Data
Stream (CSDS).
-R, --radiation Run with radiative transfer.
--power Run with power spectrum outputs.
Simulation meta-options:
--quick-lyman-alpha Run with all the options needed for the
quick Lyman-alpha model. This is equivalent
to --hydro --self-gravity --stars --star-formation
--cooling.
--eagle Run with all the options needed for the
EAGLE model. This is equivalent to --hydro
--limiter --sync --self-gravity --stars
--star-formation --cooling --feedback
--black-holes --fof.
--gear Run with all the options needed for the
GEAR model. This is equivalent to --hydro
--limiter --sync --self-gravity --stars
--star-formation --cooling --feedback.
--agora Run with all the options needed for the
GEAR model. This is equivalent to --hydro
--limiter --sync --self-gravity --stars
--star-formation --cooling --feedback.
Control options: Control options:
-a, --pin Pin runners using processor affinity. -a, --pin Pin runners using processor affinity.
--nointerleave Do not interleave memory allocations across
NUMA regions.
-d, --dry-run Dry run. Read the parameter file, allocates -d, --dry-run Dry run. Read the parameter file, allocates
memory but does not read the particles memory but does not read the particles
from ICs. Exits before the start of time from ICs. Exits before the start of time
...@@ -115,14 +195,24 @@ Parameters: ...@@ -115,14 +195,24 @@ Parameters:
read from the parameter file. Can be used read from the parameter file. Can be used
more than once {sec:par:value}. more than once {sec:par:value}.
-r, --restart Continue using restart files. -r, --restart Continue using restart files.
-t, --threads=<int> The number of threads to use on each MPI -t, --threads=<int> The number of task threads to use on each
rank. Defaults to 1 if not specified. MPI rank. Defaults to 1 if not specified.
--pool-threads=<int> The number of threads to use on each MPI
rank for the threadpool operations.
Defaults to the numbers of task threads
if not specified.
-T, --timers=<int> Print timers every time-step. -T, --timers=<int> Print timers every time-step.
-v, --verbose=<int> Run in verbose mode, in MPI mode 2 outputs -v, --verbose=<int> Run in verbose mode, in MPI mode 2 outputs
from all ranks. from all ranks.
-y, --task-dumps=<int> Time-step frequency at which task analysis -y, --task-dumps=<int> Time-step frequency at which task graphs
files and/or tasks are dumped. are dumped.
--cell-dumps=<int> Time-step frequency at which cell graphs
are dumped.
-Y, --threadpool-dumps=<int> Time-step frequency at which threadpool -Y, --threadpool-dumps=<int> Time-step frequency at which threadpool
tasks are dumped. tasks are dumped.
--dump-tasks-threshold=<flt> Fraction of the total step's time spent
in a task to trigger a dump of the task plot
on this step
See the file examples/parameter_example.yml for an example of parameter file. See the file examples/parameter_example.yml for an example of parameter file.
```
...@@ -5,10 +5,11 @@ ...@@ -5,10 +5,11 @@
* Use of this source code is governed by a MIT-style license that can be found * Use of this source code is governed by a MIT-style license that can be found
* in the LICENSE file. * in the LICENSE file.
*/ */
#include "../config.h"
#include "argparse.h" #include "argparse.h"
#include <config.h>
/* System includes */
#include <assert.h> #include <assert.h>
#include <errno.h> #include <errno.h>
#include <stdio.h> #include <stdio.h>
......
...@@ -105,20 +105,13 @@ int argparse_help_cb(struct argparse *self, ...@@ -105,20 +105,13 @@ int argparse_help_cb(struct argparse *self,
const struct argparse_option *option); const struct argparse_option *option);
// built-in option macros // built-in option macros
#define OPT_END() \ #define OPT_END() {ARGPARSE_OPT_END, 0, NULL, NULL, 0, NULL, 0, 0}
{ ARGPARSE_OPT_END, 0, NULL, NULL, 0, NULL, 0, 0 } #define OPT_BOOLEAN(...) {ARGPARSE_OPT_BOOLEAN, __VA_ARGS__}
#define OPT_BOOLEAN(...) \ #define OPT_BIT(...) {ARGPARSE_OPT_BIT, __VA_ARGS__}
{ ARGPARSE_OPT_BOOLEAN, __VA_ARGS__ } #define OPT_INTEGER(...) {ARGPARSE_OPT_INTEGER, __VA_ARGS__}
#define OPT_BIT(...) \ #define OPT_FLOAT(...) {ARGPARSE_OPT_FLOAT, __VA_ARGS__}
{ ARGPARSE_OPT_BIT, __VA_ARGS__ } #define OPT_STRING(...) {ARGPARSE_OPT_STRING, __VA_ARGS__}
#define OPT_INTEGER(...) \ #define OPT_GROUP(h) {ARGPARSE_OPT_GROUP, 0, NULL, NULL, h, NULL, 0, 0}
{ ARGPARSE_OPT_INTEGER, __VA_ARGS__ }
#define OPT_FLOAT(...) \
{ ARGPARSE_OPT_FLOAT, __VA_ARGS__ }
#define OPT_STRING(...) \
{ ARGPARSE_OPT_STRING, __VA_ARGS__ }
#define OPT_GROUP(h) \
{ ARGPARSE_OPT_GROUP, 0, NULL, NULL, h, NULL, 0, 0 }
#define OPT_HELP() \ #define OPT_HELP() \
OPT_BOOLEAN('h', "help", NULL, "show this help message and exit", \ OPT_BOOLEAN('h', "help", NULL, "show this help message and exit", \
argparse_help_cb, 0, 0) argparse_help_cb, 0, 0)
......
#include "argparse.h"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include "argparse.h"
static const char *const usages[] = { static const char *const usages[] = {
"test_argparse [options] [[--] args]", "test_argparse [options] [[--] args]",
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
# Update generated configuration files, i.e. do work so that a # Update generated configuration files, i.e. do work so that a
# developer checkout can be configured. # developer checkout can be configured.
autoreconf --install --symlink autoreconf --install --symlink
exit exit
...@@ -16,25 +16,9 @@ ...@@ -16,25 +16,9 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# Init the project. # Init the project.
AC_INIT([SWIFT],[0.8.3],[https://gitlab.cosma.dur.ac.uk/swift/swiftsim]) AC_INIT([SWIFT],[2025.04],[https://gitlab.cosma.dur.ac.uk/swift/swiftsim])
swift_config_flags="$*" swift_config_flags="$*"
# We want to stop when given unrecognised options. No subdirs so this is safe.
enable_option_checking=${enable_option_checking:-fatal}
if test -n "$ac_unrecognized_opts"; then
case $enable_option_checking in
no)
;;
fatal)
{ $as_echo "$as_me: error: unrecognized options: $ac_unrecognized_opts" >&2
{ (exit 1); exit 1; }; }
;;
*)
$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2
;;
esac
fi
AC_COPYRIGHT AC_COPYRIGHT
AC_CONFIG_SRCDIR([src/space.c]) AC_CONFIG_SRCDIR([src/space.c])
AC_CONFIG_AUX_DIR([.]) AC_CONFIG_AUX_DIR([.])
...@@ -47,13 +31,19 @@ AC_CONFIG_MACRO_DIR([m4]) ...@@ -47,13 +31,19 @@ AC_CONFIG_MACRO_DIR([m4])
: ${CFLAGS=""} : ${CFLAGS=""}
# Generate header file. # Generate header file.
AM_CONFIG_HEADER(config.h) AC_CONFIG_HEADERS([config.h])
# Find and test the compiler. # Find and test the compiler.
AX_CHECK_ENABLE_DEBUG AX_CHECK_ENABLE_DEBUG
# Enable POSIX and platform extension preprocessor macros.
AC_USE_SYSTEM_EXTENSIONS
AC_PROG_CC AC_PROG_CC
AM_PROG_CC_C_O AM_PROG_CC_C_O
# We need this for compilation hints and possibly FFTW.
AX_OPENMP
# If debug is selected then we also define SWIFT_DEVELOP_MODE to control # If debug is selected then we also define SWIFT_DEVELOP_MODE to control
# any developer code options. # any developer code options.
if test "x$ax_enable_debug" != "xno"; then if test "x$ax_enable_debug" != "xno"; then
...@@ -67,59 +57,102 @@ AC_DEFINE([_GLIBCXX_INCLUDE_NEXT_C_HEADERS],1,[Hack for min() and max() using g+ ...@@ -67,59 +57,102 @@ AC_DEFINE([_GLIBCXX_INCLUDE_NEXT_C_HEADERS],1,[Hack for min() and max() using g+
# Enable POSIX and platform extension preprocessor macros. # Enable POSIX and platform extension preprocessor macros.
AC_USE_SYSTEM_EXTENSIONS AC_USE_SYSTEM_EXTENSIONS
# Check for compiler version and vendor. # Check for C compiler version and vendor.
AX_COMPILER_VENDOR AX_COMPILER_VENDOR
AX_COMPILER_VERSION AX_COMPILER_VERSION
# Check whether we have a recent enough GCC
if test "$ax_cv_c_compiler_vendor" = "gnu"; then
AX_COMPARE_VERSION([$ax_cv_c_compiler_version], [ge], [8.1.0],
[gcc_handles_avx512="yes"],
[gcc_handles_avx512="no"])
fi
# Restrict support. # Restrict support.
AC_C_RESTRICT AC_C_RESTRICT
# logger # CSDS
AC_ARG_ENABLE([logger], AC_ARG_ENABLE([csds],
[AS_HELP_STRING([--enable-logger], [AS_HELP_STRING([--enable-csds],
[enable the particle logger] [enable the Continuous Simulation Data Stream]
)], )],
[with_logger="${enableval}"], [with_csds="${enableval}"],
[with_logger="no"] [with_csds="no"]
) )
if test "$with_logger" = "yes"; then if test "$with_csds" = "yes"; then
AC_DEFINE([WITH_LOGGER], 1, [logger enabled]) AC_DEFINE([WITH_CSDS], 1, [csds enabled])
# Ensure that the submodule is initialized
${srcdir}/tools/update-modules csds
# The csds requires that long long is a 64bit type, let's
# check that.
AC_CHECK_SIZEOF([long long int])
if test "$ac_cv_sizeof_long_long_int" != "8"; then
AC_MSG_ERROR([The CSDS requires that 'long long int' has size 8 bytes])
fi
AC_CONFIG_SUBDIRS([csds])
CFLAGS="$CFLAGS $OPENMP_CFLAGS"
fi fi
AM_CONDITIONAL([HAVECSDS],[test $with_csds = "yes"])
# Interprocedural optimization support. Needs special handling for linking and
# archiving as well as compilation with Intels, needs to be done before # Use best known optimization for the current architecture. Actual optimization
# libtool is configured (to use correct LD). # happens later so we can avoid any issues it introduces with the compiler,
# but we need to know if that will happen now.
AC_ARG_ENABLE([optimization],
[AS_HELP_STRING([--enable-optimization],
[Enable compile time optimization flags for host @<:@yes/no@:>@]
)],
[enable_opt="$enableval"],
[enable_opt="yes"]
)
# Interprocedural optimization support. Can need special handling for linking
# and archiving as well as compilation. Needs to be done before libtool is
# configured so we use the correct LD. It can give good improvements for
# clang based compilers, so the default is enabled, but we make that
# disabled when not optimizing or debugging support is enabled.
enable_ipo_default="yes";
if test "x$ax_enable_debug" = "xyes" -o "x$enable_opt" != "xyes"; then
enable_ipo_default="no";
AC_MSG_WARN([Interprocedural optimization support default is changed to false])
fi
AC_ARG_ENABLE([ipo], AC_ARG_ENABLE([ipo],
[AS_HELP_STRING([--enable-ipo], [AS_HELP_STRING([--enable-ipo],
[Enable interprocedural optimization @<:@no/yes@:>@] [Enable interprocedural optimization [default=yes unless debugging]]
)], )],
[enable_ipo="$enableval"], [enable_ipo="$enableval"],
[enable_ipo="no"] [enable_ipo="$enable_ipo_default"]
) )
if test "$enable_ipo" = "yes"; then if test "$enable_ipo" = "yes"; then
if test "$ax_cv_c_compiler_vendor" = "intel"; then if test "$ax_cv_c_compiler_vendor" = "intel"; then
CFLAGS="$CFLAGS -ip -ipo" CFLAGS="$CFLAGS -ip -ipo"
LDFLAGS="$LDFLAGS -ipo" LDFLAGS="$LDFLAGS -ipo"
: ${AR="xiar"} AC_CHECK_PROGS([AR], [xiar])
: ${LD="xild"} AC_CHECK_PROGS([LD], [xild])
AC_MSG_RESULT([added Intel interprocedural optimization support]) AC_MSG_RESULT([added Intel interprocedural optimization support])
elif test "$ax_cv_c_compiler_vendor" = "oneapi"; then
CFLAGS="$CFLAGS -ipo"
LDFLAGS="$LDFLAGS -ipo"
AC_CHECK_PROGS([AR], [xiar])
AC_CHECK_PROGS([RANLIB], [llvm-ranlib])
AC_MSG_RESULT([added oneapi interprocedural optimization support])
elif test "$ax_cv_c_compiler_vendor" = "gnu"; then elif test "$ax_cv_c_compiler_vendor" = "gnu"; then
CFLAGS="$CFLAGS -flto" CFLAGS="$CFLAGS -flto"
LDFLAGS="$LDFLAGS -flto" LDFLAGS="$LDFLAGS -flto"
AX_COMPARE_VERSION($ax_cv_c_compiler_version, [ge], [5.0.0], AX_COMPARE_VERSION($ax_cv_c_compiler_version, [ge], [5.0.0],
[ [
: ${AR="gcc-ar"} AC_CHECK_PROGS([AR], [gcc-ar])
: ${RANLIB="gcc-ranlib"} AC_CHECK_PROGS([RANLIB], [gcc-ranlib])
], [:] ) ], [:] )
AC_MSG_RESULT([added GCC interprocedural optimization support]) AC_MSG_RESULT([added GCC interprocedural optimization support])
elif test "$ax_cv_c_compiler_vendor" = "clang"; then elif test "$ax_cv_c_compiler_vendor" = "clang"; then
CFLAGS="$CFLAGS -flto -fuse-ld=gold" CFLAGS="$CFLAGS -flto"
LDFLAGS="$LDFLAGS -XCClinker -fuse-ld=gold" LDFLAGS="$LDFLAGS -flto"
: ${AR="llvm-ar"} AC_CHECK_PROGS([RANLIB], [llvm-ranlib])
: ${LD="ld.gold"}
: ${RANLIB="llvm-ranlib"}
AC_MSG_RESULT([added LLVM interprocedural optimization support]) AC_MSG_RESULT([added LLVM interprocedural optimization support])
else else
AC_MSG_WARN([Compiler does not support interprocedural optimization]) AC_MSG_WARN([Compiler does not support interprocedural optimization])
...@@ -139,9 +172,11 @@ AC_ARG_ENABLE([mpi], ...@@ -139,9 +172,11 @@ AC_ARG_ENABLE([mpi],
[enable_mpi="$enableval"], [enable_mpi="$enableval"],
[enable_mpi="yes"] [enable_mpi="yes"]
) )
# Use extra flags set by AC_PROG_CC as part of $CC. Currently undocumented as ac_cv_prog_cc_stdc,
# so could change.
good_mpi="yes" good_mpi="yes"
if test "$enable_mpi" = "yes"; then if test "$enable_mpi" = "yes"; then
AX_MPI([CC="$MPICC" AC_DEFINE(HAVE_MPI, 1, [Define if you have the MPI library.]) ]) AX_MPI([CC="$MPICC $ac_cv_prog_cc_stdc" AC_DEFINE(HAVE_MPI, 1, [Define if you have the MPI library.]) ], [enable_mpi="no"])
MPI_LIBRARY="Unknown MPI" MPI_LIBRARY="Unknown MPI"
# Various MPI implementations require additional libraries when also using # Various MPI implementations require additional libraries when also using
...@@ -203,15 +238,18 @@ AM_CONDITIONAL([HAVEMPI],[test $enable_mpi = "yes"]) ...@@ -203,15 +238,18 @@ AM_CONDITIONAL([HAVEMPI],[test $enable_mpi = "yes"])
# Indicate that MPIRUN can be modified by an environment variable # Indicate that MPIRUN can be modified by an environment variable
AC_ARG_VAR(MPIRUN, Path to the mpirun command if non-standard) AC_ARG_VAR(MPIRUN, Path to the mpirun command if non-standard)
# Add libtool support (now that CC is defined). # Add libtool support (now that CC is defined). Disable shared libraries by default.
LT_INIT LT_INIT([disable-shared])
# Need C99 and inline support. Only for autoconfs to version 2.69.
m4_version_prereq([2.71], [], [AC_PROG_CC_C99])
# Need C99 and inline support. # Need inline support.
AC_PROG_CC_C99
AC_C_INLINE AC_C_INLINE
# If debugging try to show inlined functions. # If debugging try to show inlined functions.
if test "x$enable_debug" = "xyes"; then if test "x$ax_enable_debug" = "xyes"; then
# Show inlined functions. # Show inlined functions.
if test "$ax_cv_c_compiler_vendor" = "gnu"; then if test "$ax_cv_c_compiler_vendor" = "gnu"; then
# Would like to use -gdwarf and let the compiler pick a good version # Would like to use -gdwarf and let the compiler pick a good version
...@@ -222,18 +260,27 @@ if test "x$enable_debug" = "xyes"; then ...@@ -222,18 +260,27 @@ if test "x$enable_debug" = "xyes"; then
CFLAGS="$CFLAGS $inline_EXTRA_FLAGS" CFLAGS="$CFLAGS $inline_EXTRA_FLAGS"
elif test "$ax_cv_c_compiler_vendor" = "intel"; then elif test "$ax_cv_c_compiler_vendor" = "intel"; then
CFLAGS="$CFLAGS -debug inline-debug-info" CFLAGS="$CFLAGS -debug inline-debug-info"
elif test "$ax_cv_c_compiler_vendor" = "oneapi"; then
CFLAGS="$CFLAGS -debug inline-debug-info"
fi fi
fi fi
# Check if stand-alone FoF is on. # Are we using the regular tasks (with atomics and no task conflicts) or
AC_ARG_ENABLE([stand-alone-fof], # are we using the atomic-free task-conflicting (slower) version?
[AS_HELP_STRING([--enable-stand-alone-fof], AC_ARG_ENABLE([atomics-within-tasks],
[Activate the compilation of the stand-alone friends-of-friends post-processing tool.], [AS_HELP_STRING([--disable-atomics-within-tasks],
[Disable the use of atomic operations within tasks. This creates more task conflicts
but allows for atomic-free and lock-free code within the tasks. This likely slows down
the code @<:@yes/no@:>@]
)], )],
[enable_standalone_fof="$enableval"], [enable_atomics_within_tasks="$enableval"],
[enable_standalone_fof="no"] [enable_atomics_within_tasks="yes"]
) )
AM_CONDITIONAL([HAVEFOF],[test $enable_standalone_fof = "yes"]) AS_IF([test "x$enable_atomics_within_tasks" != "xno"],
, # Note: atomics are allowed by default, we define the macro if we don't want them.
[AC_DEFINE([SWIFT_TASKS_WITHOUT_ATOMICS],1,[Makes SWIFT use atomic-free and lock-free tasks.])
])
# Check if task debugging is on. # Check if task debugging is on.
AC_ARG_ENABLE([task-debugging], AC_ARG_ENABLE([task-debugging],
...@@ -257,7 +304,7 @@ AC_ARG_ENABLE([threadpool-debugging], ...@@ -257,7 +304,7 @@ AC_ARG_ENABLE([threadpool-debugging],
) )
if test "$enable_threadpool_debugging" = "yes"; then if test "$enable_threadpool_debugging" = "yes"; then
AC_DEFINE([SWIFT_DEBUG_THREADPOOL],1,[Enable threadpool debugging]) AC_DEFINE([SWIFT_DEBUG_THREADPOOL],1,[Enable threadpool debugging])
LDFLAGS="$LDFLAGS -rdynamic" LDFLAGS="$LDFLAGS -rdynamic -ldl"
fi fi
# Check if the general timers are switched on. # Check if the general timers are switched on.
...@@ -296,7 +343,7 @@ if test "$enable_cell_graph" = "yes"; then ...@@ -296,7 +343,7 @@ if test "$enable_cell_graph" = "yes"; then
AC_DEFINE([SWIFT_CELL_GRAPH],1,[Enable cell graph]) AC_DEFINE([SWIFT_CELL_GRAPH],1,[Enable cell graph])
fi fi
# Check if using our custom icbrtf is enalbled. # Check if using our custom icbrtf is enabled.
AC_ARG_ENABLE([custom-icbrtf], AC_ARG_ENABLE([custom-icbrtf],
[AS_HELP_STRING([--enable-custom-icbrtf], [AS_HELP_STRING([--enable-custom-icbrtf],
[Use SWIFT's custom icbrtf function instead of the system cbrtf @<:@yes/no@:>@] [Use SWIFT's custom icbrtf function instead of the system cbrtf @<:@yes/no@:>@]
...@@ -332,20 +379,88 @@ if test "$enable_naive_interactions_stars" = "yes"; then ...@@ -332,20 +379,88 @@ if test "$enable_naive_interactions_stars" = "yes"; then
AC_DEFINE([SWIFT_USE_NAIVE_INTERACTIONS_STARS],1,[Enable use of naive cell interaction functions for stars]) AC_DEFINE([SWIFT_USE_NAIVE_INTERACTIONS_STARS],1,[Enable use of naive cell interaction functions for stars])
fi fi
# Check whether we want to default to naive cell interactions (stars)
AC_ARG_ENABLE([naive-interactions-rt],
[AS_HELP_STRING([--enable-naive-interactions-rt],
[Activate use of naive cell interaction functions for stars in RT tasks@<:@yes/no@:>@]
)],
[enable_naive_interactions_rt="$enableval"],
[enable_naive_interactions_rt="no"]
)
if test "$enable_naive_interactions_rt" = "yes"; then
AC_DEFINE([SWIFT_USE_NAIVE_INTERACTIONS_RT],1,[Enable use of naive cell interaction functions for stars in RT tasks])
fi
# Check if gravity force checks are on for some particles. # Check if gravity force checks are on for some particles.
AC_ARG_ENABLE([gravity-force-checks], AC_ARG_ENABLE([gravity-force-checks],
[AS_HELP_STRING([--enable-gravity-force-checks], [AS_HELP_STRING([--enable-gravity-force-checks=<N>],
[Activate expensive brute-force gravity checks for a fraction 1/N of all particles @<:@N@:>@] [Activate expensive brute-force gravity checks for a fraction 1/N of all particles @<:@N@:>@]
)], )],
[gravity_force_checks="$enableval"], [gravity_force_checks="$enableval"],
[gravity_force_checks="no"] [gravity_force_checks="no"]
) )
if test "$gravity_force_checks" == "yes"; then if test "$gravity_force_checks" = "yes"; then
AC_MSG_ERROR(Need to specify the fraction of particles to check when using --enable-gravity-force-checks!) AC_MSG_ERROR(Need to specify the fraction of particles to check when using --enable-gravity-force-checks!)
elif test "$gravity_force_checks" != "no"; then elif test "$gravity_force_checks" != "no"; then
AC_DEFINE_UNQUOTED([SWIFT_GRAVITY_FORCE_CHECKS], [$enableval] ,[Enable gravity brute-force checks]) AC_DEFINE_UNQUOTED([SWIFT_GRAVITY_FORCE_CHECKS], [$enableval] ,[Enable gravity brute-force checks])
fi fi
# Check if hydro density checks are on for some particles.
AC_ARG_ENABLE([hydro-density-checks],
[AS_HELP_STRING([--enable-hydro-density-checks],
[Activate expensive brute-force hydro density checks for a fraction 1/N of all particles @<:@N@:>@]
)],
[hydro_density_checks="$enableval"],
[hydro_density_checks="no"]
)
if test "$hydro_density_checks" = "yes"; then
AC_MSG_ERROR(Need to specify the fraction of particles to check when using --enable-hydro-density-checks!)
elif test "$hydro_density_checks" != "no"; then
AC_DEFINE_UNQUOTED([SWIFT_HYDRO_DENSITY_CHECKS], [$enableval] ,[Enable hydro density brute-force checks])
fi
# Check if stars density checks are on for some particles.
AC_ARG_ENABLE([stars-density-checks],
[AS_HELP_STRING([--enable-stars-density-checks],
[Activate expensive brute-force stars density checks for a fraction 1/N of all particles @<:@N@:>@]
)],
[stars_density_checks="$enableval"],
[stars_density_checks="no"]
)
if test "$stars_density_checks" = "yes"; then
AC_MSG_ERROR(Need to specify the fraction of particles to check when using --enable-stars-density-checks!)
elif test "$stars_density_checks" != "no"; then
AC_DEFINE_UNQUOTED([SWIFT_STARS_DENSITY_CHECKS], [$enableval] ,[Enable stars density brute-force checks])
fi
# Check if sink density checks are on for some particles.
AC_ARG_ENABLE([sink-density-checks],
[AS_HELP_STRING([--enable-sink-density-checks],
[Activate expensive brute-force sink density checks for a fraction 1/N of all particles @<:@N@:>@]
)],
[sink_density_checks="$enableval"],
[sink_density_checks="no"]
)
if test "$sink_density_checks" = "yes"; then
AC_MSG_ERROR(Need to specify the fraction of particles to check when using --enable-sink-density-checks!)
elif test "$sink_density_checks" != "no"; then
AC_DEFINE_UNQUOTED([SWIFT_SINK_DENSITY_CHECKS], [$enableval] ,[Enable sink density brute-force checks])
fi
# Check if ghost statistics are enabled
AC_ARG_ENABLE([ghost-statistics],
[AS_HELP_STRING([--enable-ghost-statistics],
[Gather statistics about the ghost iterations for hydro, stars and black holes in N bins @<:@N@:>@]
)],
[ghost_stats="$enableval"],
[ghost_stats="no"]
)
if test "$ghost_stats" == "yes"; then
AC_MSG_ERROR(Need to specify the number of bins when using --enable-ghost-statistics!)
elif test "$ghost_stats" != "no"; then
AC_DEFINE_UNQUOTED([SWIFT_GHOST_STATS], [$enableval] ,[Enable ghost statistics for hydro, stars and black holes])
fi
# Check whether we want to switch on glass making # Check whether we want to switch on glass making
AC_ARG_ENABLE([glass-making], AC_ARG_ENABLE([glass-making],
[AS_HELP_STRING([--enable-glass-making], [AS_HELP_STRING([--enable-glass-making],
...@@ -354,27 +469,71 @@ AC_ARG_ENABLE([glass-making], ...@@ -354,27 +469,71 @@ AC_ARG_ENABLE([glass-making],
[gravity_glass_making="$enableval"], [gravity_glass_making="$enableval"],
[gravity_glass_making="no"] [gravity_glass_making="no"]
) )
if test "$gravity_glass_making" == "yes"; then if test "$gravity_glass_making" = "yes"; then
AC_DEFINE([SWIFT_MAKE_GRAVITY_GLASS], 1, [Make the code run in a way to produce a glass file for gravity/cosmology]) AC_DEFINE([SWIFT_MAKE_GRAVITY_GLASS], 1, [Make the code run in a way to produce a glass file for gravity/cosmology])
fi fi
# Check if we want to zero the gravity forces for all particles below some ID. # Check if we want to zero the gravity forces for all particles below some ID.
AC_ARG_ENABLE([no-gravity-below-id], AC_ARG_ENABLE([no-gravity-below-id],
[AS_HELP_STRING([--enable-no-gravity-below-id], [AS_HELP_STRING([--enable-no-gravity-below-id=<N>],
[Zeros the gravitational acceleration of all particles with an ID smaller than @<:@N@:>@] [Zeros the gravitational acceleration of all particles with an ID smaller than @<:@N@:>@]
)], )],
[no_gravity_below_id="$enableval"], [no_gravity_below_id="$enableval"],
[no_gravity_below_id="no"] [no_gravity_below_id="no"]
) )
if test "$no_gravity_below_id" == "yes"; then if test "$no_gravity_below_id" = "yes"; then
AC_MSG_ERROR(Need to specify the ID below which particles get zero forces when using --enable-no-gravity-below-id!) AC_MSG_ERROR(Need to specify the ID below which particles get zero forces when using --enable-no-gravity-below-id!)
elif test "$no_gravity_below_id" != "no"; then elif test "$no_gravity_below_id" != "no"; then
AC_DEFINE_UNQUOTED([SWIFT_NO_GRAVITY_BELOW_ID], [$enableval] ,[Particles with smaller ID than this will have zero gravity forces]) AC_DEFINE_UNQUOTED([SWIFT_NO_GRAVITY_BELOW_ID], [$enableval] ,[Particles with smaller ID than this will have zero gravity forces])
fi fi
# Check if we want to use boundary particles.
AC_ARG_ENABLE([boundary-particles],
[AS_HELP_STRING([--enable-boundary-particles=<N>],
[Set all particles with an ID smaller than @<:@N@:>@ as boundary particles (i.e. receive zero gravity + hydro forces).]
)],
[boundary_particles="$enableval"],
[boundary_particles="no"]
)
if test "$boundary_particles" = "yes"; then
AC_MSG_ERROR(Need to specify the ID below which particles get zero forces when using --enable-boundary-particles!)
elif test "$boundary_particles" != "no"; then
AC_DEFINE_UNQUOTED([SWIFT_NO_GRAVITY_BELOW_ID], [$enableval] ,[Particles with smaller ID than this will have zero gravity forces])
AC_DEFINE_UNQUOTED([SWIFT_BOUNDARY_PARTICLES], [$enableval] ,[Particles with smaller ID than this will be considered as boundaries.])
fi
# Check if we want to use fixed boundary particles.
AC_ARG_ENABLE([fixed-boundary-particles],
[AS_HELP_STRING([--enable-fixed-boundary-particles=<N>],
[Set all particles with an ID smaller than @<:@N@:>@ as fixed boundary particles (i.e. receive zero gravity + hydro forces + zero velocity), this mode enables also --enable-boundary-particles and --enable-no-gravity-below-id.]
)],
[fixed_boundary_particles="$enableval"],
[fixed_boundary_particles="no"]
)
if test "$fixed_boundary_particles" = "yes"; then
AC_MSG_ERROR(Need to specify the ID below which particles get zero forces when using --enable-boundary-particles!)
elif test "$fixed_boundary_particles" != "no"; then
AC_DEFINE_UNQUOTED([SWIFT_NO_GRAVITY_BELOW_ID], [$enableval] ,[Particles with smaller ID than this will have zero gravity forces])
AC_DEFINE_UNQUOTED([SWIFT_BOUNDARY_PARTICLES], [$enableval] ,[Particles with smaller ID than this will be considered as boundaries.])
AC_DEFINE_UNQUOTED([SWIFT_FIXED_BOUNDARY_PARTICLES], [$enableval] ,[Particles with smaller ID than this will be considered as boundaries.])
fi
# Check if fixed entropy is on for settling planetary initial conditions
AC_ARG_ENABLE([planetary-fixed-entropy],
[AS_HELP_STRING([--enable-planetary-fixed-entropy],
[Force entropies to stay fixed for settling planetary initial conditions @<:@yes/no@:>@]
)],
[planetary_fixed_entropy="$enableval"],
[planetary_fixed_entropy="no"]
)
if test "$planetary_fixed_entropy" = "yes"; then
AC_DEFINE([PLANETARY_FIXED_ENTROPY],1,[Enable planetary fixed entropy])
fi
# Check whether we have any of the ARM v8.1 tick timers # Check whether we have any of the ARM v8.1 tick timers
AX_ASM_ARM_PMCCNTR AX_ASM_ARM_PMCCNTR
AX_ASM_ARM_CNTVCT AX_ASM_ARM_CNTVCT
# See if we want memuse reporting. # See if we want memuse reporting.
AC_ARG_ENABLE([memuse-reports], AC_ARG_ENABLE([memuse-reports],
[AS_HELP_STRING([--enable-memuse-reports], [AS_HELP_STRING([--enable-memuse-reports],
...@@ -387,19 +546,39 @@ if test "$enable_memuse_reports" = "yes"; then ...@@ -387,19 +546,39 @@ if test "$enable_memuse_reports" = "yes"; then
AC_DEFINE([SWIFT_MEMUSE_REPORTS],1,[Enable memory usage reports]) AC_DEFINE([SWIFT_MEMUSE_REPORTS],1,[Enable memory usage reports])
fi fi
# The system memory report depends on the presence of /proc/self/statm, i.e.
# a linux OS, check for that.
if test -f "/proc/self/statm"; then
AC_DEFINE([SWIFT_MEMUSE_STATM],1,[Have /proc/self/statm capability])
fi
# Define HAVE_POSIX_MEMALIGN if it works. # Check if we want to make the dumper thread active.
AX_FUNC_POSIX_MEMALIGN AC_ARG_ENABLE([dumper],
[AS_HELP_STRING([--enable-dumper],
[Dump active tasks and memory use (if configured)@<:@yes/no@:>@]
)],
[enable_dumper="$enableval"],
[enable_dumper="no"]
)
if test "$enable_dumper" = "yes"; then
AC_DEFINE([SWIFT_DUMPER_THREAD],1,[Enable dumper thread])
fi
# Only optimize if allowed, otherwise assume user will set CFLAGS as # See if we want mpi reporting.
# appropriate. AC_ARG_ENABLE([mpiuse-reports],
AC_ARG_ENABLE([optimization], [AS_HELP_STRING([--enable-mpiuse-reports],
[AS_HELP_STRING([--enable-optimization], [Output reports about MPI tasks requests@<:@yes/no@:>@]
[Enable compile time optimization flags for host @<:@yes/no@:>@]
)], )],
[enable_opt="$enableval"], [enable_mpiuse_reports="$enableval"],
[enable_opt="yes"] [enable_mpiuse_reports="no"]
) )
if test "$enable_mpiuse_reports" = "yes"; then
AC_DEFINE([SWIFT_MPIUSE_REPORTS],1,[Enable MPI task reports])
fi
# Define HAVE_POSIX_MEMALIGN if it works.
AX_FUNC_POSIX_MEMALIGN
# Disable vectorisation for known compilers. This switches off optimizations # Disable vectorisation for known compilers. This switches off optimizations
# that could be enabled above, so in general should be appended. Slightly odd # that could be enabled above, so in general should be appended. Slightly odd
...@@ -425,16 +604,70 @@ AC_ARG_ENABLE([hand-vec], ...@@ -425,16 +604,70 @@ AC_ARG_ENABLE([hand-vec],
HAVEVECTORIZATION=0 HAVEVECTORIZATION=0
# Only optimize if allowed, otherwise assume user will set CFLAGS as
# appropriate. Note argument check is done earlier so we can configure
# other options related to optimization.
if test "$enable_opt" = "yes" ; then if test "$enable_opt" = "yes" ; then
# Add code optimisation flags and tuning to host. This is a funny macro # Choose the best flags for this compiler and architecture
# that does not like CFLAGS being already set. Work around that as we have
# at least set it to "", so it is set.
ac_test_CFLAGS="no" ac_test_CFLAGS="no"
old_CFLAGS="$CFLAGS"
AX_CC_MAXOPT AX_CC_MAXOPT
ac_test_CFLAGS="yes" ac_test_CFLAGS="yes"
CFLAGS="$old_CFLAGS $CFLAGS"
# Choose the best flags for the gravity sub-library on this compiler and
# architecture. Note we use OpenMP as a compiler hints for loop vectorization.
GRAVITY_CFLAGS="$GRAVITY_CFLAGS $OPENMP_CFLAGS"
if test "$ax_cv_c_compiler_vendor" = "intel"; then
case "$icc_flags" in
*CORE-AVX512*)
GRAVITY_CFLAGS="$GRAVITY_CFLAGS -qopt-zmm-usage=high"
;;
*)
AC_MSG_NOTICE([No additional flags needed for gravity on this platform])
;;
esac
elif test "$ax_cv_c_compiler_vendor" = "oneapi"; then
case "$icc_flags" in
*CORE-AVX512*)
GRAVITY_CFLAGS="$GRAVITY_CFLAGS -qopt-zmm-usage=high"
;;
*)
AC_MSG_NOTICE([No additional flags needed for gravity on this platform])
;;
esac
elif test "$ax_cv_c_compiler_vendor" = "gnu"; then
if test "$gcc_handles_avx512" = "yes"; then
case "$ax_cv_gcc_archflag" in
*skylake-avx512*)
GRAVITY_CFLAGS="$GRAVITY_CFLAGS -mprefer-vector-width=512"
;;
*)
AC_MSG_NOTICE([No additional flags needed for gravity on this platform])
;;
esac
else
AC_MSG_NOTICE([No additional flags needed for gravity on this platform])
fi
elif test "$ax_cv_c_compiler_vendor" = "clang"; then
# Could be a number of compilers. Check for aocc specific flags we want
# to use.
AX_CHECK_COMPILE_FLAG("-zopt", [GRAVITY_CFLAGS="$GRAVITY_CFLAGS -fvectorize -zopt"])
case "$ax_cv_gcc_archflag" in
*skylake-avx512*)
GRAVITY_CFLAGS="$GRAVITY_CFLAGS -mprefer-vector-width=512"
;;
*znver[[4-9]])
GRAVITY_CFLAGS="$GRAVITY_CFLAGS -mprefer-vector-width=512"
;;
*)
:
;;
esac
else
AC_MSG_WARN([Do not know what best gravity vectorization flags to choose for this compiler])
fi
AC_ARG_VAR([GRAVITY_CFLAGS], [C compiler flags added to the basic CFLAGS to compile
the gravity-related files.])
# Check SSE & AVX support (some overlap with AX_CC_MAXOPT). # Check SSE & AVX support (some overlap with AX_CC_MAXOPT).
# Don't use the SIMD_FLAGS result with Intel compilers. The -x<code> # Don't use the SIMD_FLAGS result with Intel compilers. The -x<code>
...@@ -450,6 +683,9 @@ if test "$enable_opt" = "yes" ; then ...@@ -450,6 +683,9 @@ if test "$enable_opt" = "yes" ; then
if test "$ax_cv_c_compiler_vendor" = "intel"; then if test "$ax_cv_c_compiler_vendor" = "intel"; then
CFLAGS="$CFLAGS -no-vec -no-simd" CFLAGS="$CFLAGS -no-vec -no-simd"
AC_MSG_RESULT([disabled Intel vectorization]) AC_MSG_RESULT([disabled Intel vectorization])
elif test "$ax_cv_c_compiler_vendor" = "oneapi"; then
CFLAGS="$CFLAGS -no-vec"
AC_MSG_RESULT([disabled oneAPI vectorization])
elif test "$ax_cv_c_compiler_vendor" = "gnu"; then elif test "$ax_cv_c_compiler_vendor" = "gnu"; then
CFLAGS="$CFLAGS -fno-tree-vectorize" CFLAGS="$CFLAGS -fno-tree-vectorize"
AC_MSG_RESULT([disabled GCC vectorization]) AC_MSG_RESULT([disabled GCC vectorization])
...@@ -466,7 +702,6 @@ if test "$enable_opt" = "yes" ; then ...@@ -466,7 +702,6 @@ if test "$enable_opt" = "yes" ; then
fi fi
AM_CONDITIONAL([HAVEVECTORIZATION],[test -n "$HAVEVECTORIZATION"]) AM_CONDITIONAL([HAVEVECTORIZATION],[test -n "$HAVEVECTORIZATION"])
# Add address sanitizer options to flags, if requested. Only useful for GCC # Add address sanitizer options to flags, if requested. Only useful for GCC
# version 4.8 and later and clang. # version 4.8 and later and clang.
AC_ARG_ENABLE([sanitizer], AC_ARG_ENABLE([sanitizer],
...@@ -487,7 +722,20 @@ if test "$enable_san" = "yes"; then ...@@ -487,7 +722,20 @@ if test "$enable_san" = "yes"; then
fi fi
if test "$enable_san" = "yes"; then if test "$enable_san" = "yes"; then
CFLAGS="$CFLAGS -fsanitize=address -fno-omit-frame-pointer" CFLAGS="$CFLAGS -fsanitize=address -fno-omit-frame-pointer"
AC_MSG_RESULT([added address sanitizer support]) AC_MSG_RESULT([Adding address sanitizer support... yes])
# Check if we have access to the __lsan_ignore_object() call for
# marking memory allocations as deliberately leaked.
AC_LINK_IFELSE([AC_LANG_SOURCE([[
#include <stdlib.h>
#include <sanitizer/lsan_interface.h>
int main(int argc, char *argv[]) {
void *p = malloc(1);
__lsan_ignore_object(p);
return 0;
}]])],
[AC_DEFINE(HAVE_LSAN_IGNORE_OBJECT, 1, [Have __lsan_ignore_object() call])],
[AC_MSG_WARN([Sanitizer enabled but no __lsan_ignore_object()])])
else else
AC_MSG_WARN([Compiler does not support address sanitizer option]) AC_MSG_WARN([Compiler does not support address sanitizer option])
fi fi
...@@ -520,10 +768,20 @@ if test "$enable_ubsan" = "yes"; then ...@@ -520,10 +768,20 @@ if test "$enable_ubsan" = "yes"; then
fi fi
fi fi
# MPI mesh gravity
AC_ARG_ENABLE([mpi-mesh-gravity],
[AS_HELP_STRING([--enable-mpi-mesh-gravity],
[enable parallel mesh gravity (requires FFTW MPI library) @<:@no/yes@:>@]
)],
[with_mpi_mesh_gravity="${enableval}"],
[with_mpi_mesh_gravity="no"]
)
# Autoconf stuff. # Autoconf stuff.
AC_PROG_INSTALL AC_PROG_INSTALL
AC_PROG_MAKE_SET AC_PROG_MAKE_SET
AC_HEADER_STDC AC_PROG_EGREP
# Check for the libraries we will need. # Check for the libraries we will need.
AC_CHECK_LIB(m,sqrt,,AC_MSG_ERROR(something is wrong with the math library!)) AC_CHECK_LIB(m,sqrt,,AC_MSG_ERROR(something is wrong with the math library!))
...@@ -574,6 +832,42 @@ AC_SUBST([GSL_LIBS]) ...@@ -574,6 +832,42 @@ AC_SUBST([GSL_LIBS])
AC_SUBST([GSL_INCS]) AC_SUBST([GSL_INCS])
AM_CONDITIONAL([HAVEGSL],[test -n "$GSL_LIBS"]) AM_CONDITIONAL([HAVEGSL],[test -n "$GSL_LIBS"])
# Check for GMP. We test for this in the standard directories by default,
# and only disable if using --with-gmp=no or --without-gmp. When a value
# is given GMP must be found.
have_gmp="no"
AC_ARG_WITH([gmp],
[AS_HELP_STRING([--with-gmp=PATH],
[root directory where GMP is installed @<:@yes/no@:>@]
)],
[with_gmp="$withval"],
[with_gmp="test"]
)
if test "x$with_gmp" != "xno"; then
if test "x$with_gmp" != "xyes" -a "x$with_gmp" != "xtest" -a "x$with_gmp" != "x"; then
GMP_LIBS="-L$with_gmp/lib -lgmp"
else
GMP_LIBS="-lgmp"
fi
# GMP is not specified, so just check if we have it.
if test "x$with_gmp" = "xtest"; then
AC_CHECK_LIB([gmp],[__gmpz_inits],[have_gmp="yes"],[have_gmp="no"],$GMP_LIBS)
if test "x$have_gmp" != "xno"; then
AC_DEFINE([HAVE_LIBGMP],1,[The GMP library appears to be present.])
fi
else
AC_CHECK_LIB([gmp],[__gmpz_inits],
AC_DEFINE([HAVE_LIBGMP],1,[The GMP library appears to be present.]),
AC_MSG_ERROR(something is wrong with the GMP library!), $GMP_LIBS)
have_gmp="yes"
fi
if test "$have_gmp" = "no"; then
GMP_LIBS=""
fi
fi
AC_SUBST([GMP_LIBS])
AM_CONDITIONAL([HAVEGMP],[test -n "$GMP_LIBS"])
# Check for pthreads. # Check for pthreads.
AX_PTHREAD([LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" AX_PTHREAD([LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
CC="$PTHREAD_CC" LDFLAGS="$LDFLAGS $PTHREAD_LIBS $LIBS"], CC="$PTHREAD_CC" LDFLAGS="$LDFLAGS $PTHREAD_LIBS $LIBS"],
...@@ -587,7 +881,7 @@ have_pthread_barrier="no" ...@@ -587,7 +881,7 @@ have_pthread_barrier="no"
AC_CHECK_LIB(pthread, pthread_barrier_init, AC_CHECK_LIB(pthread, pthread_barrier_init,
have_pthread_barrier="yes", have_pthread_barrier="yes",
AC_MSG_WARN(POSIX implementation does not have barriers. SWIFT will use home-made ones.)) AC_MSG_WARN(POSIX implementation does not have barriers. SWIFT will use home-made ones.))
if test "x$have_pthread_barrier" == "xyes"; then if test "x$have_pthread_barrier" = "xyes"; then
AC_DEFINE([HAVE_PTHREAD_BARRIERS], [1], [The posix library implements barriers]) AC_DEFINE([HAVE_PTHREAD_BARRIERS], [1], [The posix library implements barriers])
fi fi
...@@ -619,7 +913,22 @@ if test "x$with_metis" != "xno"; then ...@@ -619,7 +913,22 @@ if test "x$with_metis" != "xno"; then
fi fi
AC_CHECK_LIB([metis],[METIS_PartGraphKway], [have_metis="yes"], AC_CHECK_LIB([metis],[METIS_PartGraphKway], [have_metis="yes"],
[have_metis="no"], $METIS_LIBS) [have_metis="no"], $METIS_LIBS)
if test "$have_metis" == "yes"; then
# Recent METIS releases have an external GKlib, test for that before
# giving up. Assume sane and in the same directories.
if test "x$have_metis" = "xno"; then
if test "x$with_metis" != "xyes" -a "x$with_metis" != "x"; then
METIS_LIBS="-L$with_metis/lib -lmetis -lGKlib"
METIS_INCS="-I$with_metis/include"
else
METIS_LIBS="-lmetis -lGKlib"
METIS_INCS=""
fi
AC_CHECK_LIB([metis],[METIS_PartGraphRecursive], [have_metis="yes"],
[have_metis="no"], $METIS_LIBS)
fi
if test "$have_metis" = "yes"; then
AC_DEFINE([HAVE_METIS],1,[The METIS library is present.]) AC_DEFINE([HAVE_METIS],1,[The METIS library is present.])
else else
AC_MSG_ERROR("Failed to find a METIS library") AC_MSG_ERROR("Failed to find a METIS library")
...@@ -652,10 +961,9 @@ if test "x$with_parmetis" != "xno"; then ...@@ -652,10 +961,9 @@ if test "x$with_parmetis" != "xno"; then
fi fi
AC_CHECK_LIB([parmetis],[ParMETIS_V3_RefineKway], [have_parmetis="yes"], AC_CHECK_LIB([parmetis],[ParMETIS_V3_RefineKway], [have_parmetis="yes"],
[have_parmetis="no"], $PARMETIS_LIBS) [have_parmetis="no"], $PARMETIS_LIBS)
if test "$have_parmetis" == "no"; then
# A build may use an external METIS library, check for that. # A build may use an external METIS library, check for that.
if test "$have_parmetis" = "no"; then
if test "x$with_parmetis" != "xyes" -a "x$with_parmetis" != "x"; then if test "x$with_parmetis" != "xyes" -a "x$with_parmetis" != "x"; then
PARMETIS_LIBS="-L$with_parmetis/lib -lparmetis -lmetis" PARMETIS_LIBS="-L$with_parmetis/lib -lparmetis -lmetis"
PARMETIS_INCS="-I$with_parmetis/include" PARMETIS_INCS="-I$with_parmetis/include"
...@@ -663,11 +971,26 @@ if test "x$with_parmetis" != "xno"; then ...@@ -663,11 +971,26 @@ if test "x$with_parmetis" != "xno"; then
PARMETIS_LIBS="-lparmetis -lmetis" PARMETIS_LIBS="-lparmetis -lmetis"
PARMETIS_INCS="" PARMETIS_INCS=""
fi fi
AC_CHECK_LIB([parmetis],[ParMETIS_V3_RefineKway], [have_parmetis="yes"], # Note use different function to avoid caching of first check.
AC_CHECK_LIB([parmetis],[ParMETIS_V3_PartKway], [have_parmetis="yes"],
[have_parmetis="no"], [$METIS_LIBS $PARMETIS_LIBS])
fi
# A build may use an external GKlib in later releases...
if test "$have_parmetis" = "no"; then
if test "x$with_parmetis" != "xyes" -a "x$with_parmetis" != "x"; then
PARMETIS_LIBS="-L$with_parmetis/lib -lparmetis -lGKlib"
PARMETIS_INCS="-I$with_parmetis/include"
else
PARMETIS_LIBS="-lparmetis -lGKlib"
PARMETIS_INCS=""
fi
# Note use different function to avoid caching of first check.
AC_CHECK_LIB([parmetis],[ParMETIS_V3_PartGeom], [have_parmetis="yes"],
[have_parmetis="no"], [$METIS_LIBS $PARMETIS_LIBS]) [have_parmetis="no"], [$METIS_LIBS $PARMETIS_LIBS])
fi fi
if test "$have_parmetis" == "yes"; then if test "$have_parmetis" = "yes"; then
AC_DEFINE([HAVE_PARMETIS],1,[The ParMETIS library is present.]) AC_DEFINE([HAVE_PARMETIS],1,[The ParMETIS library is present.])
else else
AC_MSG_ERROR("Failed to find a ParMETIS library") AC_MSG_ERROR("Failed to find a ParMETIS library")
...@@ -689,8 +1012,11 @@ AH_VERBATIM([__STDC_FORMAT_MACROS], ...@@ -689,8 +1012,11 @@ AH_VERBATIM([__STDC_FORMAT_MACROS],
# Check for FFTW. We test for this in the standard directories by default, # Check for FFTW. We test for this in the standard directories by default,
# and only disable if using --with-fftw=no or --without-fftw. When a value # and only disable if using --with-fftw=no or --without-fftw. When a value
# is given FFTW must be found. # is given FFTW must be found.
# If FFTW is found, we check whether this is the threaded version. # If FFTW is found, we check whether this is the threaded or openmp version.
have_fftw="no" have_fftw="no"
have_mpi_fftw="no"
have_threaded_fftw="no"
have_openmp_fftw="no"
AC_ARG_WITH([fftw], AC_ARG_WITH([fftw],
[AS_HELP_STRING([--with-fftw=PATH], [AS_HELP_STRING([--with-fftw=PATH],
[root directory where fftw is installed @<:@yes/no@:>@] [root directory where fftw is installed @<:@yes/no@:>@]
...@@ -743,14 +1069,69 @@ if test "x$with_fftw" != "xno"; then ...@@ -743,14 +1069,69 @@ if test "x$with_fftw" != "xno"; then
# Verify that the library is threaded # Verify that the library is threaded
AC_CHECK_LIB([fftw3],[fftw_init_threads],[have_threaded_fftw="yes"], AC_CHECK_LIB([fftw3],[fftw_init_threads],[have_threaded_fftw="yes"],
[have_threaded_fftw="no"], $FFTW_THREADED_LIBS) [have_threaded_fftw="no"], $FFTW_THREADED_LIBS)
# If found, update things # If found, update things
if test "x$have_threaded_fftw" = "xyes"; then if test "x$have_threaded_fftw" = "xyes"; then
AC_DEFINE([HAVE_THREADED_FFTW],1,[The threaded FFTW library appears to be present.]) AC_DEFINE([HAVE_THREADED_FFTW],1,[The threaded FFTW library appears to be present.])
FFTW_LIBS=$FFTW_THREADED_LIBS FFTW_LIBS=$FFTW_THREADED_LIBS
FFTW_INCS=$FFTW_THREADED_INCS FFTW_INCS=$FFTW_THREADED_INCS
have_fftw="yes - threaded"
else
# Same checks for OpenMP if preferred threaded failed.
if test "x$with_fftw" != "xyes" -a "x$with_fftw" != "xtest" -a "x$with_fftw" != "x"; then
FFTW_OPENMP_LIBS="-L$with_fftw/lib -lfftw3_omp -lfftw3"
FFTW_OPENMP_INCS="-I$with_fftw/include"
else
FFTW_OPENMP_LIBS="-lfftw3_omp -lfftw3"
FFTW_OPENMP_INCS=""
fi
# Verify that the library works. Note requires AX_OPENMP called above.
old_CFLAGS=$CFLAGS
CFLAGS="$CFLAGS $OPENMP_CFLAGS"
AC_CHECK_LIB([fftw3],[fftw_init_threads],[have_openmp_fftw="yes"],
[have_openmp_fftw="no"], $FFTW_OPENMP_LIBS)
# If found, update things
if test "x$have_openmp_fftw" = "xyes"; then
# Note OpenMP and pthreads use mostly the same calls, so define both.
AC_DEFINE([HAVE_THREADED_FFTW],1,[The threaded OpenMP FFTW library appears to be present.])
AC_DEFINE([HAVE_OPENMP_FFTW],1,[The OpenMP FFTW library appears to be present.])
FFTW_LIBS=$FFTW_OPENMP_LIBS
FFTW_INCS=$FFTW_OPENMP_INCS
else
# Put CFLAGS back.
CFLAGS=$old_CFLAGS
fi
fi
fi
# If MPI mesh gravity is not disabled, check whether we have the MPI version of FFTW
if test "x$enable_mpi" = "xyes" -a "x$with_mpi_mesh_gravity" != "xno"; then
# Was FFTW's location specifically given?
if test "x$with_fftw" != "xyes" -a "x$with_fftw" != "xtest" -a "x$with_fftw" != "x"; then
FFTW_MPI_LIBS="-L$with_fftw/lib -lfftw3_mpi -lfftw3"
FFTW_MPI_INCS="-I$with_fftw/include"
else
FFTW_MPI_LIBS="-lfftw3_mpi -lfftw3"
FFTW_MPI_INCS=""
fi
# Verify that the library has MPI support
AC_CHECK_LIB([fftw3],[fftw_mpi_init],[have_mpi_fftw="yes"],
[have_mpi_fftw="no"], $FFTW_MPI_LIBS)
# If found, update things. Don't add MPI flags to FFTW_*_LIBS etc because
# we don't want to link the MPI library into the non-MPI swift executable.
if test "x$have_mpi_fftw" = "xyes"; then
AC_DEFINE([HAVE_MPI_FFTW],1,[The MPI FFTW library appears to be present.])
else
if test "x$with_mpi_mesh_gravity" = "xyes" ; then
AC_MSG_ERROR("Unable to find FFTW MPI library for MPI mesh gravity")
fi
fi fi
fi fi
fi fi
...@@ -762,6 +1143,7 @@ AC_ARG_WITH([arm-fftw], ...@@ -762,6 +1143,7 @@ AC_ARG_WITH([arm-fftw],
[with_arm_fftw="$withval"], [with_arm_fftw="$withval"],
[with_arm_fftw=no] [with_arm_fftw=no]
) )
have_arm_fftw="no"
if test "x$with_arm_fftw" != "xno"; then if test "x$with_arm_fftw" != "xno"; then
# Was FFTW's location specifically given? # Was FFTW's location specifically given?
...@@ -778,14 +1160,12 @@ if test "x$with_arm_fftw" != "xno"; then ...@@ -778,14 +1160,12 @@ if test "x$with_arm_fftw" != "xno"; then
AC_CHECK_LIB([armpl_lp64],[fftw_malloc],[have_fftw="yes"],[have_fftw="no"],$FFTW_LIBS) AC_CHECK_LIB([armpl_lp64],[fftw_malloc],[have_fftw="yes"],[have_fftw="no"],$FFTW_LIBS)
if test "x$have_arm_fftw" != "xno"; then if test "x$have_arm_fftw" != "xno"; then
AC_DEFINE([HAVE_FFTW],1,[The FFTW library appears to be present.]) AC_DEFINE([HAVE_FFTW],1,[The FFTW library appears to be present.])
have_fftw="yes - ARM"
fi fi
# FFTW was specified, check that it was a valid location. # FFTW was specified, check that it was a valid location.
else else
AC_CHECK_LIB([armpl_lp64],[fftw_malloc], AC_CHECK_LIB([armpl_lp64],[fftw_malloc],
AC_DEFINE([HAVE_FFTW],1,[The FFTW library appears to be present.]), AC_DEFINE([HAVE_FFTW],1,[The FFTW library appears to be present.]),
AC_MSG_ERROR(something is wrong with the FFTW library!), $FFTW_LIBS) AC_MSG_ERROR(something is wrong with the FFTW library!), $FFTW_LIBS)
have_fftw="yes - ARM"
fi fi
# FFTW was requested not to be used. # FFTW was requested not to be used.
...@@ -823,6 +1203,10 @@ AC_SUBST([FFTW_LIBS]) ...@@ -823,6 +1203,10 @@ AC_SUBST([FFTW_LIBS])
AC_SUBST([FFTW_INCS]) AC_SUBST([FFTW_INCS])
AM_CONDITIONAL([HAVEFFTW],[test -n "$FFTW_LIBS"]) AM_CONDITIONAL([HAVEFFTW],[test -n "$FFTW_LIBS"])
AC_SUBST([FFTW_MPI_LIBS])
AC_SUBST([FFTW_MPI_INCS])
AM_CONDITIONAL([HAVEMPIFFTW],[test -n "$FFTW_MPI_LIBS"])
# Check for -lprofiler usually part of the gperftools along with tcmalloc. # Check for -lprofiler usually part of the gperftools along with tcmalloc.
have_profiler="no" have_profiler="no"
AC_ARG_WITH([profiler], AC_ARG_WITH([profiler],
...@@ -897,7 +1281,7 @@ if test "x$with_tcmalloc" != "xno"; then ...@@ -897,7 +1281,7 @@ if test "x$with_tcmalloc" != "xno"; then
# Prevent compilers that replace the calls with built-ins (GNU 99) from doing so. # Prevent compilers that replace the calls with built-ins (GNU 99) from doing so.
case "$ax_cv_c_compiler_vendor" in case "$ax_cv_c_compiler_vendor" in
intel | gnu | clang) intel | gnu | clang | oneapi)
CFLAGS="$CFLAGS -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free" CFLAGS="$CFLAGS -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free"
;; ;;
esac esac
...@@ -940,7 +1324,7 @@ if test "x$with_jemalloc" != "xno"; then ...@@ -940,7 +1324,7 @@ if test "x$with_jemalloc" != "xno"; then
# Prevent compilers that replace the regular calls with built-ins (GNU 99) from doing so. # Prevent compilers that replace the regular calls with built-ins (GNU 99) from doing so.
case "$ax_cv_c_compiler_vendor" in case "$ax_cv_c_compiler_vendor" in
intel | gnu | clang) intel | gnu | clang | oneapi)
CFLAGS="$CFLAGS -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free" CFLAGS="$CFLAGS -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free"
;; ;;
esac esac
...@@ -983,7 +1367,7 @@ if test "x$with_tbbmalloc" != "xno"; then ...@@ -983,7 +1367,7 @@ if test "x$with_tbbmalloc" != "xno"; then
# Prevent compilers that replace the calls with built-ins (GNU 99) from doing so. # Prevent compilers that replace the calls with built-ins (GNU 99) from doing so.
case "$ax_cv_c_compiler_vendor" in case "$ax_cv_c_compiler_vendor" in
intel | gnu | clang) intel | gnu | clang | oneapi)
CFLAGS="$CFLAGS -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free" CFLAGS="$CFLAGS -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free"
;; ;;
esac esac
...@@ -995,6 +1379,17 @@ fi ...@@ -995,6 +1379,17 @@ fi
AC_SUBST([TBBMALLOC_LIBS]) AC_SUBST([TBBMALLOC_LIBS])
AM_CONDITIONAL([HAVETBBMALLOC],[test -n "$TBBMALLOC_LIBS"]) AM_CONDITIONAL([HAVETBBMALLOC],[test -n "$TBBMALLOC_LIBS"])
# check for a random seed
AC_ARG_WITH([random-seed],
[AS_HELP_STRING([--with-random-seed=SHORT INT],
[Set the random seed.]
)],
[with_random_seed="$withval"],
[with_random_seed="0"]
)
AC_DEFINE_UNQUOTED([SWIFT_RANDOM_SEED_XOR], [$with_random_seed],[Value of the random seed.])
# Check for HDF5. This is required. # Check for HDF5. This is required.
AX_LIB_HDF5 AX_LIB_HDF5
if test "$with_hdf5" != "yes"; then if test "$with_hdf5" != "yes"; then
...@@ -1036,6 +1431,38 @@ if test "$with_hdf5" = "yes"; then ...@@ -1036,6 +1431,38 @@ if test "$with_hdf5" = "yes"; then
fi fi
AM_CONDITIONAL([HAVEPARALLELHDF5],[test "$have_parallel_hdf5" = "yes"]) AM_CONDITIONAL([HAVEPARALLELHDF5],[test "$have_parallel_hdf5" = "yes"])
# Check for lustre support. Attempted by default.
have_lustreapi="no"
AC_ARG_WITH([lustreapi],
[AS_HELP_STRING([--with-lustreapi=PATH],
[use the lustre api library for some striping control @<:@yes/no@:>@]
)],
[with_lustreapi="$withval"],
[with_lustreapi="yes"]
)
if test "x$with_lustreapi" != "xno"; then
if test "x$with_lustreapi" != "xyes" -a "x$with_lustreapi" != "x"; then
LUSTREAPI_LIBS="-L$with_lustreapi -llustreapi"
LUSTREAPI_INCS="-I$with_lustreapi/include"
else
LUSTREAPI_LIBS="-llustreapi"
LUSTREAPI_INCS=""
fi
AC_CHECK_LIB([lustreapi], [llapi_obd_statfs], [have_lustreapi="yes"],
[have_lustreapi="no"],[$LUSTREAPI_LIBS])
if test "$have_lustreapi" = "yes"; then
AC_DEFINE([HAVE_LUSTREAPI],1,[The lustre API library appears to be present.])
else
LUSTREAPI_LIBS=""
fi
fi
AC_SUBST([LUSTREAPI_LIBS])
AC_SUBST([LUSTREAPI_INCS])
AM_CONDITIONAL([HAVELUSTREAPI],[test -n "$LUSTREAPI_LIBS"])
# Check for grackle. # Check for grackle.
have_grackle="no" have_grackle="no"
AC_ARG_WITH([grackle], AC_ARG_WITH([grackle],
...@@ -1058,7 +1485,7 @@ if test "x$with_grackle" != "xno"; then ...@@ -1058,7 +1485,7 @@ if test "x$with_grackle" != "xno"; then
have_grackle="yes" have_grackle="yes"
echo $GRACKLE_LIBS AS_VAR_APPEND([GRACKLE_LIBS], ["$FCLIBS"])
AC_CHECK_LIB( AC_CHECK_LIB(
[grackle], [grackle],
...@@ -1066,14 +1493,30 @@ if test "x$with_grackle" != "xno"; then ...@@ -1066,14 +1493,30 @@ if test "x$with_grackle" != "xno"; then
[AC_DEFINE([HAVE_GRACKLE],1,[The GRACKLE library appears to be present.]) [AC_DEFINE([HAVE_GRACKLE],1,[The GRACKLE library appears to be present.])
AC_DEFINE([CONFIG_BFLOAT_8],1,[Use doubles in grackle]) AC_DEFINE([CONFIG_BFLOAT_8],1,[Use doubles in grackle])
], ],
[AC_MSG_ERROR(Cannot find grackle library!)], [AC_MSG_ERROR(Cannot find grackle library! Please consult the documentation for specific version required.)],
[$GRACKLE_LIBS])
AC_CHECK_LIB(
[grackle],
[set_velocity_units],
[ : ], # : means do nothing. Leaving this argument empty triggers AC default behaviour, which breaks stuff down the line.
[AC_MSG_ERROR(Wrong grackle library version. Please consult the documentation for specifics.)],
[$GRACKLE_LIBS])
AC_CHECK_LIB(
[grackle],
[get_grackle_version],
[ : ], # : means do nothing
[AC_MSG_ERROR(Wrong grackle library version. Please consult the documentation for specifics.)],
[$GRACKLE_LIBS]) [$GRACKLE_LIBS])
fi fi
AC_SUBST([GRACKLE_LIBS]) AC_SUBST([GRACKLE_LIBS])
AC_SUBST([GRACKLE_INCS]) AC_SUBST([GRACKLE_INCS])
AM_CONDITIONAL([HAVEGRACKLE],[test -n "$GRACKLE_LIBS"]) AM_CONDITIONAL([HAVEGRACKLE],[test -n "$GRACKLE_LIBS"])
# Check for VELOCIraptor. # Check for VELOCIraptor, non-MPI.
have_velociraptor="no" have_velociraptor="no"
AC_ARG_WITH([velociraptor], AC_ARG_WITH([velociraptor],
[AS_HELP_STRING([--with-velociraptor=PATH], [AS_HELP_STRING([--with-velociraptor=PATH],
...@@ -1083,28 +1526,89 @@ AC_ARG_WITH([velociraptor], ...@@ -1083,28 +1526,89 @@ AC_ARG_WITH([velociraptor],
[with_velociraptor="no"] [with_velociraptor="no"]
) )
if test "x$with_velociraptor" != "xno"; then if test "x$with_velociraptor" != "xno"; then
AC_PROG_FC
AC_FC_LIBRARY_LDFLAGS
if test "x$with_velociraptor" != "xyes" -a "x$with_velociraptor" != "x"; then if test "x$with_velociraptor" != "xyes" -a "x$with_velociraptor" != "x"; then
VELOCIRAPTOR_LIBS="-L$with_velociraptor -lvelociraptor -lmpi -lstdc++ -lhdf5_cpp" VELOCIRAPTOR_LIBS="-L$with_velociraptor -lvelociraptor -lstdc++ -lhdf5"
CFLAGS="$CFLAGS -fopenmp" CFLAGS="$CFLAGS $OPENMP_CFLAGS"
else else
VELOCIRAPTOR_LIBS="" VELOCIRAPTOR_LIBS=""
fi fi
have_velociraptor="yes" have_velociraptor="yes"
AS_VAR_APPEND([VELOCIRAPTOR_LIBS], ["$FCLIBS"])
AC_CHECK_LIB( AC_CHECK_LIB(
[velociraptor], [velociraptor],
[InitVelociraptor], [InitVelociraptor],
[AC_DEFINE([HAVE_VELOCIRAPTOR],1,[The VELOCIraptor library appears to be present.])], [AC_DEFINE([HAVE_VELOCIRAPTOR],1,[The non-MPI VELOCIraptor library appears to be present.])],
[AC_MSG_ERROR(Cannot find VELOCIraptor library at $with_velociraptor or incompatible HDF5 library loaded.)], [AC_MSG_ERROR(Cannot find non-MPI VELOCIraptor library at $with_velociraptor or incompatible HDF5 library loaded.)],
[$VELOCIRAPTOR_LIBS $HDF5_LDFLAGS $HDF5_LIBS $GSL_LIBS] [$VELOCIRAPTOR_LIBS $HDF5_LDFLAGS $HDF5_LIBS $GSL_LIBS]
) )
fi fi
AC_SUBST([VELOCIRAPTOR_LIBS]) AC_SUBST([VELOCIRAPTOR_LIBS])
AM_CONDITIONAL([HAVEVELOCIRAPTOR],[test -n "$VELOCIRAPTOR_LIBS"]) AM_CONDITIONAL([HAVEVELOCIRAPTOR],[test -n "$VELOCIRAPTOR_LIBS"])
# Now that we found VELOCIraptor, let's check how it was compiled.
if test "$have_velociraptor" = "yes"; then
AC_CHECK_LIB(
[velociraptor],
[VR_NOMASS],
[AC_DEFINE([HAVE_VELOCIRAPTOR_WITH_NOMASS],1,[The VELOCIraptor library has been compiled with the NOMASS option. Only useful if running a uniform box.])],
[AC_MSG_RESULT(VELOCIraptor not compiled to so as to *not* store masses per particle.)],
[$VELOCIRAPTOR_LIBS $HDF5_LDFLAGS $HDF5_LIBS $GSL_LIBS]
)
fi
# Check for MPI VELOCIraptor, same as above.
have_mpi_velociraptor="no"
AC_ARG_WITH([velociraptor-mpi],
[AS_HELP_STRING([--with-velociraptor-mpi=PATH],
[Directory where MPI version of velociraptor library exists @<:@yes/no@:>@]
)],
[with_mpi_velociraptor="$withval"],
[with_mpi_velociraptor="no"]
)
if test "x$with_mpi_velociraptor" != "xno"; then
if test "x$with_mpi_velociraptor" != "xyes" -a "x$with_mpi_velociraptor" != "x"; then
VELOCIRAPTOR_MPI_LIBS="-L$with_mpi_velociraptor -lvelociraptor -lmpi -lstdc++ -lhdf5"
CFLAGS="$CFLAGS -fopenmp"
else
VELOCIRAPTOR_MPI_LIBS=""
fi
have_mpi_velociraptor="yes"
AS_VAR_APPEND([VELOCIRAPTOR_MPI_LIBS], ["$FCLIBS"])
AC_CHECK_LIB(
[velociraptor],
[InitVelociraptor],
[AC_DEFINE([HAVE_MPI_VELOCIRAPTOR],1,[The MPI VELOCIraptor library appears to be present.])],
[AC_MSG_ERROR(Cannot find MPI VELOCIraptor library at $with_mpi_velociraptor or incompatible HDF5 library loaded.)],
[$VELOCIRAPTOR_MPI_LIBS $HDF5_LDFLAGS $HDF5_LIBS $GSL_LIBS]
)
fi
AC_SUBST([VELOCIRAPTOR_MPI_LIBS])
AM_CONDITIONAL([HAVEVELOCIRAPTOR],[test -n "$VELOCIRAPTOR_MPI_LIBS"])
# Let's check how this one was compiled.
if test "$have_mpi_velociraptor" = "yes"; then
AC_CHECK_LIB(
[velociraptor],
[VR_NOMASS],
[AC_DEFINE([HAVE_VELOCIRAPTOR_WITH_NOMASS],1,[The MPI VELOCIraptor library has been compiled with the NOMASS option. Only useful if running a uniform box.])],
[AC_MSG_RESULT(VELOCIraptor not compiled to so as to *not* store masses per particle.)],
[$VELOCIRAPTOR_MPI_LIBS $HDF5_LDFLAGS $HDF5_LIBS $GSL_LIBS]
)
fi
# If we have one library, but not the other then use that for both.
if test "$have_mpi_velociraptor" = "yes" -a "$have_velociraptor" != "yes"; then
VELOCIRAPTOR_LIBS="$VELOCIRAPTOR_MPI_LIBS"
AC_SUBST([VELOCIRAPTOR_LIBS])
elif test "$have_velociraptor" = "yes" -a "$have_mpi_velociraptor" != "yes"; then
VELOCIRAPTOR_MPI_LIBS="$VELOCIRAPTOR_LIBS"
AC_SUBST([VELOCIRAPTOR_MPI_LIBS])
fi
# Check for dummy VELOCIraptor. # Check for dummy VELOCIraptor.
AC_ARG_ENABLE([dummy-velociraptor], AC_ARG_ENABLE([dummy-velociraptor],
[AS_HELP_STRING([--enable-dummy-velociraptor], [AS_HELP_STRING([--enable-dummy-velociraptor],
...@@ -1121,9 +1625,69 @@ if test "$enable_dummy_velociraptor" = "yes"; then ...@@ -1121,9 +1625,69 @@ if test "$enable_dummy_velociraptor" = "yes"; then
AC_DEFINE(HAVE_DUMMY_VELOCIRAPTOR,1,[The dummy VELOCIraptor library is present.]) AC_DEFINE(HAVE_DUMMY_VELOCIRAPTOR,1,[The dummy VELOCIraptor library is present.])
fi fi
# Check for floating-point execeptions # Check if we should be writing out most bound "orphan" particles from Velociraptor
AC_CHECK_FUNC(feenableexcept, AC_DEFINE([HAVE_FE_ENABLE_EXCEPT],[1], AC_ARG_ENABLE([velociraptor-orphans],
[Defined if the floating-point exception can be enabled using non-standard GNU functions.])) [AS_HELP_STRING([--enable-velociraptor-orphans],
[Enable output of orphan particles @<:@yes/no@:>@]
)],
[enable_velociraptor_orphans="$enableval"],
[enable_velociraptor_orphans="no"]
)
if test "$enable_velociraptor_orphans" = "yes"; then
AC_DEFINE([HAVE_VELOCIRAPTOR_ORPHANS], 1, [Orphan particles should be written out])
fi
# Check if lightcone output is on.
AC_ARG_ENABLE([lightcone],
[AS_HELP_STRING([--enable-lightcone],
[Activate lightcone outputs.],
)],
[enable_lightcone="$enableval"],
[enable_lightcone="no"]
)
if test "$enable_lightcone" = "yes"; then
# Check for healpix for lightcone maps. May require cfitsio
# This sets CHEALPIX_LIBS and CHEALPIX_CFLAGS and #defines HAVE_CHEALPIX.
# It also adds a --with-cfitsio flag in case cfitsio is installed in a
# different location from healpix.
GV_FIND_LIBRARY([cfitsio], [CFITSIO], [cfitsio], [cfitsio], [ffclos])
TMP_LIBS=${LIBS}
LIBS="${CFITSIO_LIBS} ${LIBS}"
GV_FIND_LIBRARY([chealpix], [CHEALPIX], [chealpix], [chealpix], [ang2vec])
LIBS=${TMP_LIBS}
have_chealpix=${USE_CHEALPIX}
CHEALPIX_LIBS="${CHEALPIX_LIBS} ${CFITSIO_LIBS}"
AC_DEFINE([WITH_LIGHTCONE], 1, [Enable lightcone outputs])
if test "$have_chealpix" != "yes"; then
AC_MSG_ERROR([Lightcone output requires the HEALPix C API. Please configure with --with-chealpix.])
fi
# Also need to make sure we have GSL if we're making lightcones
if test "$have_gsl" != "yes"; then
AC_MSG_ERROR([Lightcone output requires GSL. Please configure with --with-gsl.])
fi
else
have_chealpix="no"
fi
# Check for floating-point exception trapping support.
#
# We do not allow this to be enabled when optimizing as compilers do operations
# which are unsafe for speed. This can result in FPEs on valid vector
# operations when additional padding is used. This has been seen on clang and
# GCC based compilers.
if test "$enable_opt" != "yes"; then
if test "$ax_cv_c_compiler_vendor" != "oneapi"; then
AC_CHECK_FUNC(feenableexcept, AC_DEFINE([HAVE_FE_ENABLE_EXCEPT],[1],
[Defined if floating-point exceptions can be trapped.]))
else
# Default optimization for Intel is too high , -O2, so we also need
# to have debugging enabled which uses -O0 as well.
if test "$ax_enable_debug" != "no"; then
AC_CHECK_FUNC(feenableexcept, AC_DEFINE([HAVE_FE_ENABLE_EXCEPT],[1],
[Defined if floating-point exceptions can be trapped.]))
fi
fi
fi
# Check for setaffinity. # Check for setaffinity.
AC_CHECK_FUNC(pthread_setaffinity_np, AC_DEFINE([HAVE_SETAFFINITY],[1], AC_CHECK_FUNC(pthread_setaffinity_np, AC_DEFINE([HAVE_SETAFFINITY],[1],
...@@ -1181,6 +1745,64 @@ if test "$ac_cv_func_pthread_setaffinity_np" = "yes" -a "x$with_numa" != "xno"; ...@@ -1181,6 +1745,64 @@ if test "$ac_cv_func_pthread_setaffinity_np" = "yes" -a "x$with_numa" != "xno";
fi fi
AC_SUBST([NUMA_LIBS]) AC_SUBST([NUMA_LIBS])
# Check for Sundials (required for the SPHM1RT library).
# There is a problems with the headers of this library
# as they do not pass the strict prototypes check when
# installed outside of the system directories. So we
# need to do this check in two phases.
have_sundials="no"
SUNDIALS_LIBS=""
SUNDIALS_INCS=""
AC_ARG_WITH([sundials],
[AS_HELP_STRING([--with-sundials=PATH],
[root directory where sundials is installed @<:@yes/no@:>@]
)],
[with_sundials="$withval"],
[with_sundials="no"]
)
if test "x$with_sundials" != "xno"; then
AC_PROG_FC
AC_FC_LIBRARY_LDFLAGS
if test "x$with_sundials" != "xyes" -a "x$with_sundials" != "x"; then
SUNDIALS_LIBS="-L$with_sundials/lib -lsundials_cvode -lsundials_nvecserial -lsundials_sunlinsoldense -lsundials_sunmatrixdense"
SUNDIALS_INCS="-I$with_sundials/include"
else
SUNDIALS_LIBS="-lsundials_cvode -lsundials_nvecserial -lsundials_sunlinsoldense -lsundials_sunmatrixdense"
SUNDIALS_INCS=""
fi
AC_CHECK_LIB([sundials_cvode], [CVode], [have_sundials="yes"],
[have_sundials="no"], $SUNDIALS_LIBS)
if test "$have_sundials" == "yes"; then
AC_DEFINE([HAVE_SUNDIALS],1,[The SUNDIALS library is present.])
else
if test "x$with_sundials" != "xyes" -a "x$with_sundials" != "x"; then
# It might be that the libraries are in
# /lib64 rather than /lib
SUNDIALS_LIBS="-L$with_sundials/lib64 -lsundials_cvode -lsundials_nvecserial -lsundials_sunlinsoldense -lsundials_sunmatrixdense"
# unset cached result of previous AC_CHECK_LIB
unset ac_cv_lib_sundials_cvode_CVode
AC_CHECK_LIB([sundials_cvode], [CVode], [have_sundials="yes"], [have_sundials="no"], $SUNDIALS_LIBS)
if test "$have_sundials" == "yes"; then
AC_DEFINE([HAVE_SUNDIALS],1,[The SUNDIALS library is present.])
else
AC_MSG_ERROR("Failed to find a SUNDIALS library")
fi
else
AC_MSG_ERROR("Failed to find a SUNDIALS library")
fi
fi
fi
AC_SUBST([SUNDIALS_LIBS])
# Check for Intel and PowerPC intrinsics header optionally used by vector.h. # Check for Intel and PowerPC intrinsics header optionally used by vector.h.
AC_CHECK_HEADERS([immintrin.h], [], [], AC_CHECK_HEADERS([immintrin.h], [], [],
[#ifdef HAVE_IMMINTRIN_H [#ifdef HAVE_IMMINTRIN_H
...@@ -1194,8 +1816,33 @@ AC_CHECK_HEADERS([altivec.h], [], [], ...@@ -1194,8 +1816,33 @@ AC_CHECK_HEADERS([altivec.h], [], [],
]) ])
# Check for timing functions needed by cycle.h. # Check for timing functions needed by cycle.h.
AC_HEADER_TIME AC_CHECK_HEADERS_ONCE([sys/time.h])
AC_CHECK_HEADERS([sys/time.h c_asm.h intrinsics.h mach/mach_time.h]) if test $ac_cv_header_sys_time_h = yes; then
AC_DEFINE([TIME_WITH_SYS_TIME],[1],[Define to 1 if you can safely include both <sys/time.h>
and <time.h>. This macro is obsolete.])
fi
AC_CHECK_HEADERS([sys/time.h], [], [],
[#ifdef HAVE_SYS_TIME_H
# include <sys/time.h>
#endif
])
AC_CHECK_HEADERS([c_asm.h], [], [],
[#ifdef HAVE_C_ASM_H
# include <c_asm.h>
#endif
])
AC_CHECK_HEADERS([intrinsics.h], [], [],
[#ifdef HAVE_INTRINSICS_H
# include <intrinsics.h>
#endif
])
AC_CHECK_HEADERS([mach/mach_time.h], [], [],
[#ifdef HAVE_MACH_MACH_TIME_H
# include <mach/mach_time.h>
#endif
])
AC_CHECK_TYPE([hrtime_t],[AC_DEFINE(HAVE_HRTIME_T, 1, [Define to 1 if hrtime_t AC_CHECK_TYPE([hrtime_t],[AC_DEFINE(HAVE_HRTIME_T, 1, [Define to 1 if hrtime_t
is defined in <sys/time.h>])],, is defined in <sys/time.h>])],,
[#if HAVE_SYS_TIME_H [#if HAVE_SYS_TIME_H
...@@ -1213,26 +1860,58 @@ AC_LINK_IFELSE([AC_LANG_PROGRAM( ...@@ -1213,26 +1860,58 @@ AC_LINK_IFELSE([AC_LANG_PROGRAM(
AC_MSG_RESULT($rtc_ok) AC_MSG_RESULT($rtc_ok)
# Special timers for the ARM v7 platforms (taken from FFTW-3 to match their cycle.h) # Special timers for the ARM v7 platforms (taken from FFTW-3 to match their cycle.h)
AC_ARG_ENABLE(armv7a-cntvct, [AC_HELP_STRING([--enable-armv7a-cntvct],[enable the cycle counter on Armv7a via the CNTVCT register])], have_armv7acntvct=$enableval) AC_ARG_ENABLE(armv7a-cntvct, [AS_HELP_STRING([--enable-armv7a-cntvct],[enable the cycle counter on Armv7a via the CNTVCT register])], have_armv7acntvct=$enableval)
if test "$have_armv7acntvct"x = "yes"x; then if test "$have_armv7acntvct"x = "yes"x; then
AC_DEFINE(HAVE_ARMV7A_CNTVCT,1,[Define if you have enabled the CNTVCT cycle counter on ARMv7a]) AC_DEFINE(HAVE_ARMV7A_CNTVCT,1,[Define if you have enabled the CNTVCT cycle counter on ARMv7a])
fi fi
AC_ARG_ENABLE(armv7a-pmccntr, [AC_HELP_STRING([--enable-armv7a-pmccntr],[enable the cycle counter on Armv7a via the PMCCNTR register])], have_armv7apmccntr=$enableval) AC_ARG_ENABLE(armv7a-pmccntr, [AS_HELP_STRING([--enable-armv7a-pmccntr],[enable the cycle counter on Armv7a via the PMCCNTR register])], have_armv7apmccntr=$enableval)
if test "$have_armv7apmccntr"x = "yes"x; then if test "$have_armv7apmccntr"x = "yes"x; then
AC_DEFINE(HAVE_ARMV7A_PMCCNTR,1,[Define if you have enabled the PMCCNTR cycle counter on ARMv7a]) AC_DEFINE(HAVE_ARMV7A_PMCCNTR,1,[Define if you have enabled the PMCCNTR cycle counter on ARMv7a])
fi fi
# Check if we have native exp10 and exp10f functions. If not failback to our # Check if we have native exp10 and exp10f functions. If not fallback to our
# implementations. On Apple/CLANG we have __exp10, so also check for that # implementations. On Apple/CLANG/Homebrew gcc we have __exp10, so also check for that
# if the compiler is clang. # if the compiler is clang.
AC_CHECK_LIB([m],[exp10], [AC_DEFINE([HAVE_EXP10],1,[The exp10 function is present.])]) AC_CHECK_LIB([m],[exp10], [AC_DEFINE([HAVE_EXP10],1,[The exp10 function is present.])])
AC_CHECK_LIB([m],[exp10f], [AC_DEFINE([HAVE_EXP10F],1,[The exp10f function is present.])]) AC_CHECK_LIB([m],[exp10f], [AC_DEFINE([HAVE_EXP10F],1,[The exp10f function is present.])])
AC_CHECK_LIB([m],[__exp10], [AC_DEFINE([HAVE___EXP10],1,[The __exp10 function is present.])])
AC_CHECK_LIB([m],[__exp10f], [AC_DEFINE([HAVE___EXP10F],1,[The __exp10f function is present.])])
# Check if we have native sincos and sincosf functions. If not fallback to our
# implementations. On Apple/CLANG we have __sincos, so also check for that
# if the compiler is clang.
AC_CHECK_LIB([m],[sincos], [AC_DEFINE([HAVE_SINCOS],1,[The sincos function is present.])])
AC_CHECK_LIB([m],[sincosf], [AC_DEFINE([HAVE_SINCOSF],1,[The sincosf function is present.])])
if test "$ax_cv_c_compiler_vendor" = "clang"; then if test "$ax_cv_c_compiler_vendor" = "clang"; then
AC_CHECK_LIB([m],[__exp10], [AC_DEFINE([HAVE___EXP10],1,[The __exp10 function is present.])]) AC_CHECK_LIB([m],[__sincos], [AC_DEFINE([HAVE___SINCOS],1,[The __sincos function is present.])])
AC_CHECK_LIB([m],[__exp10f], [AC_DEFINE([HAVE___EXP10F],1,[The __exp10f function is present.])]) AC_CHECK_LIB([m],[__sincosf], [AC_DEFINE([HAVE___SINCOSF],1,[The __sincosf function is present.])])
fi
# On Apple (CLANG or Homebrew gcc), check for __sincos and __sincosf inline functions in the headers.
AC_CHECK_HEADERS([math.h], [
AC_CHECK_DECLS([__sincos, __sincosf], [
AC_DEFINE([HAVE___SINCOS], 1, [The __sincos function is present.])
AC_DEFINE([HAVE___SINCOSF], 1, [The __sincosf function is present.])
], [], [#include <math.h>])
])
# The aocc compiler has optimized maths libraries that we should use. Check
# any clang for this support. Note do this after the basic check for maths
# as we need to make sure -lm follows. Also note needs -Ofast or -ffast-math
# so only when optimizing.
if test "$enable_opt" = "yes" -a "$ax_cv_c_compiler_vendor" = "clang"; then
have_almfast="yes"
AC_CHECK_LIB([almfast],[amd_fastexp],[LIBS="-fveclib=AMDLIBM -fsclrlib=AMDLIBM -lalmfast -lamdlibm $LIBS"],[have_almfast="no"],[-lamdlibm -lm])
if test "$have_almfast" = "no"; then
# Less optimized version.
AC_CHECK_LIB([amdlibm],[sqrt],,,[-lm])
fi
fi fi
# Check for glibc extension backtrace().
AC_CHECK_FUNCS([backtrace backtrace_symbols])
# Add warning flags by default, if these can be used. Option =error adds # Add warning flags by default, if these can be used. Option =error adds
# -Werror to GCC, clang and Intel. Note do this last as compiler tests may # -Werror to GCC, clang and Intel. Note do this last as compiler tests may
# become errors, if that's an issue don't use CFLAGS for these, use an AC_SUBST(). # become errors, if that's an issue don't use CFLAGS for these, use an AC_SUBST().
...@@ -1248,12 +1927,13 @@ if test "$enable_warn" != "no"; then ...@@ -1248,12 +1927,13 @@ if test "$enable_warn" != "no"; then
# AX_CFLAGS_WARN_ALL does not give good warning flags for the Intel compiler # AX_CFLAGS_WARN_ALL does not give good warning flags for the Intel compiler
# We will do this by hand instead and only default to the macro for unknown compilers # We will do this by hand instead and only default to the macro for unknown compilers
case "$ax_cv_c_compiler_vendor" in case "$ax_cv_c_compiler_vendor" in
gnu | clang) gnu | clang | oneapi)
CFLAGS="$CFLAGS -Wall -Wextra -Wno-unused-parameter -Wshadow" CFLAGS="$CFLAGS -Wall -Wextra -Wno-unused-parameter -Wshadow"
;; ;;
intel) intel)
CFLAGS="$CFLAGS -w2 -Wunused-variable -Wshadow" CFLAGS="$CFLAGS -w2 -Wunused-variable -Wshadow"
;; ;;
*) *)
AX_CFLAGS_WARN_ALL AX_CFLAGS_WARN_ALL
;; ;;
...@@ -1262,8 +1942,12 @@ if test "$enable_warn" != "no"; then ...@@ -1262,8 +1942,12 @@ if test "$enable_warn" != "no"; then
# Add a "choke on warning" flag if it exists # Add a "choke on warning" flag if it exists
if test "$enable_warn" = "error"; then if test "$enable_warn" = "error"; then
case "$ax_cv_c_compiler_vendor" in case "$ax_cv_c_compiler_vendor" in
intel | gnu | clang) intel | clang | oneapi)
CFLAGS="$CFLAGS -Werror" CFLAGS="$CFLAGS -Werror"
;;
gnu)
# Fix for issue with IPO and GCC 14
CFLAGS="$CFLAGS -Werror -Wno-alloc-size-larger-than"
;; ;;
esac esac
fi fi
...@@ -1303,6 +1987,26 @@ if test "$have_numa" != "no"; then ...@@ -1303,6 +1987,26 @@ if test "$have_numa" != "no"; then
fi fi
AC_SUBST([NUMA_INCS]) AC_SUBST([NUMA_INCS])
# Second part of the Sundials library checks.
# We now decide if we need to use -isystem to
# get around the strict-prototypes problem. Assumes
# isystem is available when strict-prototypes is.
if test "x$with_sundials" != "xno"; then
if test "x$with_sundials" != "xyes" -a "x$with_sundials" != "x"; then
case "$CFLAGS" in
*strict-prototypes*)
SUNDIALS_INCS="-isystem$with_sundials/include"
;;
*)
SUNDIALS_INCS="-I$with_sundials/include"
;;
esac
fi
fi
AC_SUBST([SUNDIALS_INCS])
# Various package configuration options. # Various package configuration options.
# Master subgrid options # Master subgrid options
...@@ -1311,7 +2015,8 @@ AC_SUBST([NUMA_INCS]) ...@@ -1311,7 +2015,8 @@ AC_SUBST([NUMA_INCS])
# As an example for this, see the call to AC_ARG_WITH for cooling. # As an example for this, see the call to AC_ARG_WITH for cooling.
AC_ARG_WITH([subgrid], AC_ARG_WITH([subgrid],
[AS_HELP_STRING([--with-subgrid=<subgrid>], [AS_HELP_STRING([--with-subgrid=<subgrid>],
[Master switch for subgrid methods. Inexperienced user should start from here @<:@none, GEAR, EAGLE default: none@:>@] [Master switch for subgrid methods. Inexperienced user should
start here. Options are: @<:@none, GEAR, GEAR-G3, AGORA, QLA, QLA-EAGLE, EAGLE, EAGLE-XL, SPIN_JET_EAGLE default: none@:>@]
)], )],
[with_subgrid="$withval"], [with_subgrid="$withval"],
[with_subgrid=none] [with_subgrid=none]
...@@ -1322,9 +2027,12 @@ with_subgrid_cooling=none ...@@ -1322,9 +2027,12 @@ with_subgrid_cooling=none
with_subgrid_chemistry=none with_subgrid_chemistry=none
with_subgrid_tracers=none with_subgrid_tracers=none
with_subgrid_entropy_floor=none with_subgrid_entropy_floor=none
with_subgrid_pressure_floor=none
with_subgrid_stars=none with_subgrid_stars=none
with_subgrid_star_formation=none with_subgrid_star_formation=none
with_subgrid_feedback=none with_subgrid_feedback=none
with_subgrid_sink=none
with_subgrid_extra_io=none
case "$with_subgrid" in case "$with_subgrid" in
yes) yes)
...@@ -1333,14 +2041,65 @@ case "$with_subgrid" in ...@@ -1333,14 +2041,65 @@ case "$with_subgrid" in
none) none)
;; ;;
GEAR) GEAR)
with_subgrid_cooling=grackle with_subgrid_cooling=grackle_0
with_subgrid_chemistry=GEAR with_subgrid_chemistry=GEAR_10
with_subgrid_tracers=none with_subgrid_pressure_floor=GEAR
with_subgrid_entropy_floor=none with_subgrid_stars=GEAR
with_subgrid_star_formation=GEAR
with_subgrid_feedback=GEAR
with_subgrid_black_holes=none
with_subgrid_sink=GEAR
with_subgrid_extra_io=none
enable_fof=no
;;
GEAR-G3)
with_subgrid_cooling=grackle_3
with_subgrid_chemistry=GEAR_10
with_subgrid_pressure_floor=none
with_subgrid_stars=GEAR with_subgrid_stars=GEAR
with_subgrid_star_formation=GEAR with_subgrid_star_formation=GEAR
with_subgrid_feedback=GEAR
with_subgrid_black_holes=none
with_subgrid_sink=GEAR
with_subgrid_extra_io=none
enable_fof=no
;;
AGORA)
with_subgrid_cooling=grackle_0
with_subgrid_chemistry=AGORA
with_subgrid_pressure_floor=GEAR
with_subgrid_stars=GEAR
with_subgrid_star_formation=GEAR
with_subgrid_feedback=AGORA
with_subgrid_black_holes=none
with_subgrid_sink=none
with_subgrid_extra_io=none
enable_fof=no
;;
QLA)
with_subgrid_cooling=QLA
with_subgrid_chemistry=QLA
with_subgrid_tracers=none
with_subgrid_entropy_floor=QLA
with_subgrid_stars=basic
with_subgrid_star_formation=QLA
with_subgrid_feedback=none
with_subgrid_black_holes=none
with_subgrid_sink=none
with_subgrid_extra_io=none
enable_fof=no
;;
QLA-EAGLE)
with_subgrid_cooling=QLA-EAGLE
with_subgrid_chemistry=QLA
with_subgrid_tracers=none
with_subgrid_entropy_floor=QLA
with_subgrid_stars=basic
with_subgrid_star_formation=QLA
with_subgrid_feedback=none with_subgrid_feedback=none
with_subgrid_black_holes=none with_subgrid_black_holes=none
with_subgrid_sink=none
enable_fof=no
;; ;;
EAGLE) EAGLE)
with_subgrid_cooling=EAGLE with_subgrid_cooling=EAGLE
...@@ -1351,43 +2110,129 @@ case "$with_subgrid" in ...@@ -1351,43 +2110,129 @@ case "$with_subgrid" in
with_subgrid_star_formation=EAGLE with_subgrid_star_formation=EAGLE
with_subgrid_feedback=EAGLE with_subgrid_feedback=EAGLE
with_subgrid_black_holes=EAGLE with_subgrid_black_holes=EAGLE
with_subgrid_sink=none
with_subgrid_extra_io=none
enable_fof=yes
;;
EAGLE-XL)
with_subgrid_cooling=PS2020
with_subgrid_chemistry=EAGLE
with_subgrid_tracers=EAGLE
with_subgrid_entropy_floor=EAGLE
with_subgrid_stars=EAGLE
with_subgrid_star_formation=EAGLE
with_subgrid_feedback=EAGLE
with_subgrid_black_holes=EAGLE
with_subgrid_sink=none
with_subgrid_extra_io=none
enable_fof=yes
;;
SPIN_JET_EAGLE)
with_subgrid_cooling=EAGLE
with_subgrid_chemistry=EAGLE
with_subgrid_tracers=EAGLE
with_subgrid_entropy_floor=EAGLE
with_subgrid_stars=EAGLE
with_subgrid_star_formation=EAGLE
with_subgrid_feedback=EAGLE
with_subgrid_black_holes=SPIN_JET
with_subgrid_sink=none
with_subgrid_extra_io=none
enable_fof=yes
;;
SPIN_JET_EAGLE-XL)
with_subgrid_cooling=PS2020
with_subgrid_chemistry=EAGLE
with_subgrid_tracers=EAGLE
with_subgrid_entropy_floor=EAGLE
with_subgrid_stars=EAGLE
with_subgrid_star_formation=EAGLE
with_subgrid_feedback=EAGLE
with_subgrid_black_holes=SPIN_JET
with_subgrid_sink=none
with_subgrid_extra_io=none
enable_fof=yes
;; ;;
*) *)
AC_MSG_ERROR([Unknown subgrid choice: $with_subgrid]) AC_MSG_ERROR([Unknown subgrid choice: $with_subgrid])
;; ;;
esac esac
# Check if FoF is on.
AC_ARG_ENABLE([fof],
[AS_HELP_STRING([--enable-fof],
[Activate the friends-of-friends (FoF) code.],
)],
[enable_fof="$enableval"],
[enable_fof="no"]
)
if test "$enable_fof" = "yes"; then
AC_DEFINE([WITH_FOF], 1, [Enable FoF])
fi
# Check if stand-alone FoF is on.
AC_ARG_ENABLE([stand-alone-fof],
[AS_HELP_STRING([--enable-stand-alone-fof],
[Activate the compilation of the stand-alone friends-of-friends (FoF) post-processing tool.],
)],
[enable_standalone_fof="$enableval"],
[enable_standalone_fof="no"]
)
if test "$enable_standalone_fof" = "yes"; then
enable_fof="yes + stand-alone tool"
AC_DEFINE([WITH_FOF], 1, [Enable FoF])
AC_DEFINE([WITH_STAND_ALONE_FOF], 1, [Enable stand-alone FoF])
fi
AM_CONDITIONAL([HAVESTANDALONEFOF],[test $enable_standalone_fof = "yes"])
# Gravity scheme. # Gravity scheme.
AC_ARG_WITH([gravity], AC_ARG_WITH([gravity],
[AS_HELP_STRING([--with-gravity=<scheme>], [AS_HELP_STRING([--with-gravity=<scheme>],
[Gravity scheme to use @<:@default, with-potential, default: default@:>@] [Gravity scheme to use @<:@basic, with-multi-softening default: with-multi-softening@:>@]
)], )],
[with_gravity="$withval"], [with_gravity="$withval"],
[with_gravity="default"] [with_gravity="with-multi-softening"]
) )
case "$with_gravity" in case "$with_gravity" in
with-potential) with-potential)
AC_DEFINE([POTENTIAL_GRAVITY], [1], [Gravity scheme with potential calculation]) AC_MSG_ERROR([The gravity 'with-potential' scheme does not exist anymore. Please use the basic scheme which now contains potentials.])
;;
with-multi-softening)
AC_DEFINE([MULTI_SOFTENING_GRAVITY], [1], [Gravity scheme with per-particle type softening value and background particles])
;; ;;
default) basic)
AC_DEFINE([DEFAULT_GRAVITY], [1], [Default gravity scheme]) AC_DEFINE([DEFAULT_GRAVITY], [1], [Basic gravity scheme])
;; ;;
*) *)
AC_MSG_ERROR([Unknown gravity scheme: $with_gravity]) AC_MSG_ERROR([Unknown gravity scheme: $with_gravity])
;; ;;
esac esac
AC_ARG_ENABLE([gravitational-potential],
[AS_HELP_STRING([--disable-gravitational-potential],
[Disable calculation of the gravitational potential.]
)],
[enable_gravitational_potential="$enableval"],
[enable_gravitational_potential="yes"]
)
if test "$enable_gravitational_potential" = "no"; then
AC_DEFINE([SWIFT_GRAVITY_NO_POTENTIAL],1,[Disable calculation of the gravitational potential])
fi
# Hydro scheme. # Hydro scheme.
AC_ARG_WITH([hydro], AC_ARG_WITH([hydro],
[AS_HELP_STRING([--with-hydro=<scheme>], [AS_HELP_STRING([--with-hydro=<scheme>],
[Hydro dynamics to use @<:@gadget2, minimal, pressure-entropy, pressure-energy, pressure-energy-monaghan, default, gizmo-mfv, gizmo-mfm, shadowfax, planetary, anarchy-du, anarchy-pu default: gadget2@:>@] [Hydro dynamics to use @<:@gadget2, minimal, pressure-entropy, pressure-energy, pressure-energy-monaghan, phantom, gizmo-mfv, gizmo-mfm, shadowswift, planetary, remix, sphenix, gasoline, anarchy-pu default: sphenix@:>@]
)], )],
[with_hydro="$withval"], [with_hydro="$withval"],
[with_hydro="gadget2"] [with_hydro="sphenix"]
) )
case "$with_hydro" in case "$with_hydro" in
none)
AC_DEFINE([NONE_SPH], [1], [No hydro])
;;
gadget2) gadget2)
AC_DEFINE([GADGET2_SPH], [1], [Gadget-2 SPH]) AC_DEFINE([GADGET2_SPH], [1], [Gadget-2 SPH])
;; ;;
...@@ -1403,34 +2248,77 @@ case "$with_hydro" in ...@@ -1403,34 +2248,77 @@ case "$with_hydro" in
pressure-energy-monaghan) pressure-energy-monaghan)
AC_DEFINE([HOPKINS_PU_SPH_MONAGHAN], [1], [Pressure-Energy SPH with M&M Variable A.V.]) AC_DEFINE([HOPKINS_PU_SPH_MONAGHAN], [1], [Pressure-Energy SPH with M&M Variable A.V.])
;; ;;
default) phantom)
AC_DEFINE([DEFAULT_SPH], [1], [Default SPH]) AC_DEFINE([PHANTOM_SPH], [1], [Phantom SPH])
;; ;;
gizmo-mfv) gizmo-mfv)
AC_DEFINE([GIZMO_MFV_SPH], [1], [GIZMO MFV SPH]) AC_DEFINE([GIZMO_MFV_SPH], [1], [GIZMO MFV SPH])
need_riemann_solver=yes
hydro_does_mass_flux=yes
;; ;;
gizmo-mfm) gizmo-mfm)
AC_DEFINE([GIZMO_MFM_SPH], [1], [GIZMO MFM SPH]) AC_DEFINE([GIZMO_MFM_SPH], [1], [GIZMO MFM SPH])
need_riemann_solver=yes
;; ;;
shadowfax) shadowswift)
AC_DEFINE([SHADOWFAX_SPH], [1], [Shadowfax SPH]) AC_DEFINE([SHADOWSWIFT], [1], [ShadowSWIFT hydrodynamics])
AC_DEFINE([MOVING_MESH_HYDRO], [1], [Moving mesh hydrodynamics])
need_moving_mesh=yes
need_riemann_solver=yes
hydro_does_mass_flux=yes
;; ;;
planetary) planetary)
AC_DEFINE([PLANETARY_SPH], [1], [Planetary SPH]) AC_DEFINE([PLANETARY_SPH], [1], [Planetary SPH])
;; ;;
remix)
AC_DEFINE([REMIX_SPH], [1], [REMIX SPH])
;;
sphenix)
AC_DEFINE([SPHENIX_SPH], [1], [SPHENIX SPH])
;;
gasoline)
AC_DEFINE([GASOLINE_SPH], [1], [Gasoline SPH])
;;
anarchy-du) anarchy-du)
AC_DEFINE([ANARCHY_DU_SPH], [1], [ANARCHY (DU) SPH]) AC_DEFINE([SPHENIX_SPH], [1], [SPHENIX SPH])
;; ;;
anarchy-pu) anarchy-pu)
AC_DEFINE([ANARCHY_PU_SPH], [1], [ANARCHY (PU) SPH]) AC_DEFINE([ANARCHY_PU_SPH], [1], [ANARCHY (PU) SPH])
;; ;;
*) *)
AC_MSG_ERROR([Unknown hydrodynamics scheme: $with_hydro]) AC_MSG_ERROR([Unknown hydrodynamics scheme: $with_hydro])
;; ;;
esac esac
# SPMHD scheme.
AC_ARG_WITH([spmhd],
[AS_HELP_STRING([--with-spmhd=<scheme>],
[Magneto Hydro Dynamics SPH scheme to use @<:@none, direct-induction, direct-induction-fede, vector-potential default:none@:>@]
)],
[with_spmhd="$withval"],
[with_spmhd="none"]
)
case "$with_spmhd" in
none)
AC_DEFINE([NONE_MHD], [1], [No mhd])
;;
*)
AC_MSG_ERROR([Unknown magneto-hydrodynamics scheme: $with_spmhd])
;;
esac
if test "$with_hydro" = "gizmo-mfm" -a "$with_spmhd" != "none"; then
AC_MSG_ERROR([Cannot use an SPMHD scheme alongside a gizmo hydro solver!"])
fi
if test "$with_hydro" = "gizmo-mfv" -a "$with_spmhd" != "none"; then
AC_MSG_ERROR([Cannot use an SPMHD scheme alongside a gizmo hydro solver!"])
fi
if test "$with_hydro" = "shadowswift" -a "$with_spmhd" != "none"; then
AC_MSG_ERROR([Cannot use an SPMHD scheme alongside a moving mesh hydro solver!"])
fi
# Check if debugging interactions stars is switched on. # Check if debugging interactions stars is switched on.
AC_ARG_ENABLE([debug-interactions-stars], AC_ARG_ENABLE([debug-interactions-stars],
[AS_HELP_STRING([--enable-debug-interactions-stars], [AS_HELP_STRING([--enable-debug-interactions-stars],
...@@ -1441,7 +2329,7 @@ AC_ARG_ENABLE([debug-interactions-stars], ...@@ -1441,7 +2329,7 @@ AC_ARG_ENABLE([debug-interactions-stars],
) )
if test "$enable_debug_interactions_stars" != "no"; then if test "$enable_debug_interactions_stars" != "no"; then
AC_DEFINE([DEBUG_INTERACTIONS_STARS],1,[Enable interaction debugging for stars]) AC_DEFINE([DEBUG_INTERACTIONS_STARS],1,[Enable interaction debugging for stars])
if test "$enable_debug_interactions_stars" == "yes"; then if test "$enable_debug_interactions_stars" = "yes"; then
AC_DEFINE([MAX_NUM_OF_NEIGHBOURS_STARS],256,[The maximum number of particle neighbours to be logged for stars]) AC_DEFINE([MAX_NUM_OF_NEIGHBOURS_STARS],256,[The maximum number of particle neighbours to be logged for stars])
[enable_debug_interactions_stars="yes (Logging up to 256 neighbours)"] [enable_debug_interactions_stars="yes (Logging up to 256 neighbours)"]
else else
...@@ -1461,7 +2349,7 @@ AC_ARG_ENABLE([debug-interactions], ...@@ -1461,7 +2349,7 @@ AC_ARG_ENABLE([debug-interactions],
if test "$enable_debug_interactions" != "no"; then if test "$enable_debug_interactions" != "no"; then
if test "$with_hydro" = "gadget2"; then if test "$with_hydro" = "gadget2"; then
AC_DEFINE([DEBUG_INTERACTIONS_SPH],1,[Enable interaction debugging]) AC_DEFINE([DEBUG_INTERACTIONS_SPH],1,[Enable interaction debugging])
if test "$enable_debug_interactions" == "yes"; then if test "$enable_debug_interactions" = "yes"; then
AC_DEFINE([MAX_NUM_OF_NEIGHBOURS],256,[The maximum number of particle neighbours to be logged]) AC_DEFINE([MAX_NUM_OF_NEIGHBOURS],256,[The maximum number of particle neighbours to be logged])
[enable_debug_interactions="yes (Logging up to 256 neighbours)"] [enable_debug_interactions="yes (Logging up to 256 neighbours)"]
else else
...@@ -1473,6 +2361,24 @@ if test "$enable_debug_interactions" != "no"; then ...@@ -1473,6 +2361,24 @@ if test "$enable_debug_interactions" != "no"; then
fi fi
fi fi
# Check if debugging interactions sinks is switched on.
AC_ARG_ENABLE([debug-interactions-sinks],
[AS_HELP_STRING([--enable-debug-interactions-sinks],
[Activate interaction debugging for sinks, logging a maximum of @<:@N@:>@ neighbours. Defaults to 256 if no value set.]
)],
[enable_debug_interactions_sinks="$enableval"],
[enable_debug_interactions_sinks="no"]
)
if test "$enable_debug_interactions_sinks" != "no"; then
AC_DEFINE([DEBUG_INTERACTIONS_SINKS],1,[Enable interaction debugging for sinks])
if test "$enable_debug_interactions_sinks" = "yes"; then
AC_DEFINE([MAX_NUM_OF_NEIGHBOURS_SINKS],256,[The maximum number of particle neighbours to be logged for sinks])
[enable_debug_interactions_sinks="yes (Logging up to 256 neighbours)"]
else
AC_DEFINE_UNQUOTED([MAX_NUM_OF_NEIGHBOURS_SINKS], [$enableval] ,[The maximum number of particle neighbours to be logged for sinks])
[enable_debug_interactions_sinks="yes (Logging up to $enableval neighbours)"]
fi
fi
# SPH Kernel function # SPH Kernel function
AC_ARG_WITH([kernel], AC_ARG_WITH([kernel],
...@@ -1532,7 +2438,7 @@ esac ...@@ -1532,7 +2438,7 @@ esac
# Equation of state # Equation of state
AC_ARG_WITH([equation-of-state], AC_ARG_WITH([equation-of-state],
[AS_HELP_STRING([--with-equation-of-state=<EoS>], [AS_HELP_STRING([--with-equation-of-state=<EoS>],
[equation of state @<:@ideal-gas, isothermal-gas, planetary default: ideal-gas@:>@] [equation of state @<:@ideal-gas, isothermal-gas, barotropic-gas, planetary default: ideal-gas@:>@]
)], )],
[with_eos="$withval"], [with_eos="$withval"],
[with_eos="ideal-gas"] [with_eos="ideal-gas"]
...@@ -1543,6 +2449,9 @@ case "$with_eos" in ...@@ -1543,6 +2449,9 @@ case "$with_eos" in
;; ;;
isothermal-gas) isothermal-gas)
AC_DEFINE([EOS_ISOTHERMAL_GAS], [1], [Isothermal gas equation of state]) AC_DEFINE([EOS_ISOTHERMAL_GAS], [1], [Isothermal gas equation of state])
;;
barotropic-gas)
AC_DEFINE([EOS_BAROTROPIC_GAS], [1], [Barotropic gas equation of state])
;; ;;
planetary) planetary)
AC_DEFINE([EOS_PLANETARY], [1], [All planetary equations of state]) AC_DEFINE([EOS_PLANETARY], [1], [All planetary equations of state])
...@@ -1578,6 +2487,34 @@ case "$with_gamma" in ...@@ -1578,6 +2487,34 @@ case "$with_gamma" in
;; ;;
esac esac
# Adaptive softening
AC_ARG_WITH([adaptive-softening],
[AS_HELP_STRING([--with-adaptive-softening=<yes/no>],
[Adaptive softening @<:@no, yes, default: no@:>@]
)],
[with_adaptive_softening="$withval"],
[with_adaptive_softening="no"]
)
case "$with_adaptive_softening" in
no)
AC_DEFINE([FIXED_SOFTENING], [1], [No adaptive softening])
;;
yes)
AC_DEFINE([ADAPTIVE_SOFTENING], [1], [Adaptive softening])
;;
*)
AC_MSG_ERROR([Unknown adaptive softening: $with_adaptive_softening])
;;
esac
# Verify that the configuration is allowed
if test "x$with_adaptive_softening" = "xyes" -a "$with_kernel" != "wendland-C2"; then
AC_MSG_ERROR([Adaptive softening scheme requires the usage of the Wendland-C2 kernel!])
fi
if test "x$with_adaptive_softening" = "xyes" -a "$with_gravity" != "with-multi-softening"; then
AC_MSG_ERROR([Adaptive softening scheme requires the usage of the multi-softening gravity scheme!])
fi
# Riemann solver # Riemann solver
AC_ARG_WITH([riemann-solver], AC_ARG_WITH([riemann-solver],
[AS_HELP_STRING([--with-riemann-solver=<solver>], [AS_HELP_STRING([--with-riemann-solver=<solver>],
...@@ -1603,10 +2540,99 @@ case "$with_riemann" in ...@@ -1603,10 +2540,99 @@ case "$with_riemann" in
AC_MSG_ERROR([Unknown Riemann solver: $with_riemann]) AC_MSG_ERROR([Unknown Riemann solver: $with_riemann])
;; ;;
esac esac
if test "x$need_riemann_solver" = "xyes" -a "$with_riemann" = "none"; then
AC_MSG_ERROR([Hydro scheme $with_hydro requires selection of a Riemann solver!])
fi
# Moving mesh
AC_ARG_ENABLE([moving-mesh],
[AS_HELP_STRING([--enable-moving-mesh],
[enable the moving mesh computation]
)],
[enable_moving_mesh="${enableval}"],
[enable_moving_mesh="no"]
)
if test "x$need_moving_mesh" = "xyes"; then
enable_moving_mesh="yes"
fi
if test "$enable_moving_mesh" = "yes"; then
if test "$have_gmp" = "no"; then
AC_MSG_ERROR([GMP is required when using moving mesh!])
fi
if test "$have_gsl" = "no"; then
AC_MSG_ERROR([GSL is required when using moving mesh!])
fi
AC_DEFINE([MOVING_MESH], [1], [Unstructured Voronoi mesh])
fi
# Hydro does mass flux?
if test "x$hydro_does_mass_flux" = "xyes"; then
AC_DEFINE([HYDRO_DOES_MASS_FLUX], [1], [Hydro scheme with mass fluxes])
fi
# chemistry function
AC_ARG_WITH([chemistry],
[AS_HELP_STRING([--with-chemistry=<function>],
[chemistry function @<:@none, GEAR_*, AGORA, QLA, EAGLE default: none@:>@
For GEAR, you need to provide the number of elements (e.g. GEAR_10)]
)],
[with_chemistry="$withval"],
[with_chemistry="none"]
)
if test "$with_subgrid" != "none"; then
if test "$with_chemistry" != "none"; then
AC_MSG_ERROR([Cannot provide with-subgrid and with-chemistry together])
else
with_chemistry="$with_subgrid_chemistry"
fi
fi
with_chemistry_name="none"
case "$with_chemistry" in
none)
AC_DEFINE([CHEMISTRY_NONE], [1], [No chemistry function])
;;
GEAR_*)
AC_DEFINE([CHEMISTRY_GEAR], [1], [Chemistry taken from the GEAR model])
number_element=${with_chemistry#*_}
AC_DEFINE_UNQUOTED([GEAR_CHEMISTRY_ELEMENT_COUNT], [$number_element], [Number of element to follow])
with_chemistry_name="GEAR (with $number_element elements)"
with_chemistry="GEAR"
;;
AGORA)
AC_DEFINE([CHEMISTRY_AGORA], [1], [Chemistry taken from the AGORA model])
with_chemistry_name="AGORA"
;;
QLA)
AC_DEFINE([CHEMISTRY_QLA], [1], [Chemistry taken from the Quick-Lyman-alpha model])
with_chemistry_name="QLA"
;;
EAGLE)
AC_DEFINE([CHEMISTRY_EAGLE], [1], [Chemistry taken from the EAGLE model])
with_chemistry_name="EAGLE (9 elements + smoothing)"
;;
*)
AC_MSG_ERROR([Unknown chemistry function: $with_chemistry])
;;
esac
if test "$with_chemistry" != "none"; then
if test "$enable_hand_vec" = "yes"; then
if test "$enable_vec" = "yes"; then
if test "$with_hydro" = "gadget2"; then
AC_MSG_ERROR([Cannot run with hand vectorisation and chemistry yet. Please use --disable-hand-vec])
fi
fi
fi
fi
# Cooling function # Cooling function
AC_ARG_WITH([cooling], AC_ARG_WITH([cooling],
[AS_HELP_STRING([--with-cooling=<function>], [AS_HELP_STRING([--with-cooling=<model>],
[cooling function @<:@none, const-du, const-lambda, EAGLE, grackle, grackle1, grackle2, grackle3 default: none@:>@] [cooling function @<:@none, const-du, const-lambda, QLA, EAGLE, PS2020, Wiersma, grackle_* default: none@:>@.
For Grackle, you need to provide the primordial chemistry parameter (e.g. grackle_0)]
)], )],
[with_cooling="$withval"], [with_cooling="$withval"],
[with_cooling="none"] [with_cooling="none"]
...@@ -1620,75 +2646,65 @@ if test "$with_subgrid" != "none"; then ...@@ -1620,75 +2646,65 @@ if test "$with_subgrid" != "none"; then
fi fi
fi fi
with_cooling_name="none"
case "$with_cooling" in case "$with_cooling" in
none) none)
AC_DEFINE([COOLING_NONE], [1], [No cooling function]) AC_DEFINE([COOLING_NONE], [1], [No cooling function])
;; ;;
const-du) const-du)
AC_DEFINE([COOLING_CONST_DU], [1], [Const du/dt cooling function]) AC_DEFINE([COOLING_CONST_DU], [1], [Const du/dt cooling function])
with_cooling_name=$with_cooling
;; ;;
const-lambda) const-lambda)
AC_DEFINE([COOLING_CONST_LAMBDA], [1], [Const Lambda cooling function]) AC_DEFINE([COOLING_CONST_LAMBDA], [1], [Const Lambda cooling function])
with_cooling_name=$with_cooling
;; ;;
compton) grackle_*)
AC_DEFINE([COOLING_COMPTON], [1], [Compton cooling off the CMB])
;; if test "$have_grackle" != "yes"; then
grackle) AC_MSG_ERROR([Grackle cooling: You need the grackle library for Grackle cooling. (--with-grackle=PATH)])
AC_DEFINE([COOLING_GRACKLE], [1], [Cooling via the grackle library]) fi
AC_DEFINE([COOLING_GRACKLE_MODE], [0], [Grackle chemistry network, mode 0])
;;
grackle1)
AC_DEFINE([COOLING_GRACKLE], [1], [Cooling via the grackle library]) AC_DEFINE([COOLING_GRACKLE], [1], [Cooling via the grackle library])
AC_DEFINE([COOLING_GRACKLE_MODE], [1], [Grackle chemistry network, mode 1]) primordial_chemistry=${with_cooling#*_}
AC_DEFINE_UNQUOTED([COOLING_GRACKLE_MODE], [$primordial_chemistry], [Grackle chemistry network])
with_cooling_name="Grackle $primordial_chemistry"
with_cooling="grackle"
;; ;;
grackle2) QLA)
AC_DEFINE([COOLING_GRACKLE], [1], [Cooling via the grackle library]) AC_DEFINE([COOLING_QLA], [1], [Cooling following the Quick-Lyman-alpha model])
AC_DEFINE([COOLING_GRACKLE_MODE], [2], [Grackle chemistry network, mode 2]) with_cooling_name="QLA (Ploeckinger+20 tables) with constant primordial Z"
;; ;;
grackle3) QLA-EAGLE)
AC_DEFINE([COOLING_GRACKLE], [1], [Cooling via the grackle library]) AC_DEFINE([COOLING_QLA_EAGLE], [1], [Cooling following the Quick-Lyman-alpha model])
AC_DEFINE([COOLING_GRACKLE_MODE], [3], [Grackle chemistry network, mode 3]) with_cooling_name="QLA (Wiersma+09 tables) with constant primordial Z"
;; ;;
EAGLE) EAGLE)
AC_DEFINE([COOLING_EAGLE], [1], [Cooling following the EAGLE model]) AC_DEFINE([COOLING_EAGLE], [1], [Cooling following the EAGLE model (Wiersma+09 tables)])
with_cooling_name="EAGLE (Wiersma+09 tables)"
;;
Wiersma)
AC_DEFINE([COOLING_EAGLE], [1], [Cooling following the EAGLE model (Wiersma+09 tables)])
with_cooling_name="EAGLE (Wiersma+09 tables)"
;;
PS2020)
AC_DEFINE([COOLING_PS2020], [1], [Cooling following the PS2020 model (Ploeckinger+20 tables)])
with_cooling_name="PS2020 (Ploeckinger+20 tables)"
;;
COLIBRE)
AC_MSG_ERROR([This cooling model changed name. Please use 'PS2020'.])
;; ;;
*) *)
AC_MSG_ERROR([Unknown cooling function: $with_cooling]) AC_MSG_ERROR([Unknown cooling function: $with_cooling])
;; ;;
esac esac
# chemistry function if test "$with_cooling" = "EAGLE" || test "$with_cooling" = "PS2020"; then
AC_ARG_WITH([chemistry], if test "$with_chemistry" = "none"; then
[AS_HELP_STRING([--with-chemistry=<function>], AC_MSG_ERROR([Cannot run with EAGLE or PS2020 cooling without chemistry. Please pick a chemistry model])
[chemistry function @<:@none, GEAR, EAGLE default: none@:>@]
)],
[with_chemistry="$withval"],
[with_chemistry="none"]
)
if test "$with_subgrid" != "none"; then
if test "$with_chemistry" != "none"; then
AC_MSG_ERROR([Cannot provide with-subgrid and with-chemistry together])
else
with_chemistry="$with_subgrid_chemistry"
fi fi
fi fi
case "$with_chemistry" in
none)
AC_DEFINE([CHEMISTRY_NONE], [1], [No chemistry function])
;;
GEAR)
AC_DEFINE([CHEMISTRY_GEAR], [1], [Chemistry taken from the GEAR model])
;;
EAGLE)
AC_DEFINE([CHEMISTRY_EAGLE], [1], [Chemistry taken from the EAGLE model])
;;
*)
AC_MSG_ERROR([Unknown chemistry function: $with_chemistry])
;;
esac
# Particle tracers # Particle tracers
AC_ARG_WITH([tracers], AC_ARG_WITH([tracers],
[AS_HELP_STRING([--with-tracers=<function>], [AS_HELP_STRING([--with-tracers=<function>],
...@@ -1718,17 +2734,46 @@ case "$with_tracers" in ...@@ -1718,17 +2734,46 @@ case "$with_tracers" in
;; ;;
esac esac
# Extra fields added to snapshots at i/o time
AC_ARG_WITH([extra_io],
[AS_HELP_STRING([--with-extra-io=<function>],
[Extra i/o field: @<:@none, EAGLE default: none@:>@]
)],
[with_extra_io="$withval"],
[with_extra_io="none"]
)
if test "$with_subgrid" != "none"; then
if test "$with_extra_io" != "none"; then
AC_MSG_ERROR([Cannot provide with-subgrid and with-extra_io together])
else
with_extra_io="$with_subgrid_extra_io"
fi
fi
case "$with_extra_io" in
none)
AC_DEFINE([EXTRA_IO_NONE], [1], [No extra_io function])
;;
EAGLE)
AC_DEFINE([EXTRA_IO_EAGLE], [1], [Extra i/o fields taken from the EAGLE model])
;;
*)
AC_MSG_ERROR([Unknown extra-io choice: $with_extra_io])
;;
esac
# Stellar model. # Stellar model.
AC_ARG_WITH([stars], AC_ARG_WITH([stars],
[AS_HELP_STRING([--with-stars=<model>], [AS_HELP_STRING([--with-stars=<model>],
[Stellar model to use @<:@none, EAGLE, GEAR, debug default: none@:>@] [Stellar model to use @<:@none, basic, EAGLE, GEAR, default: basic@:>@]
)], )],
[with_stars="$withval"], [with_stars="$withval"],
[with_stars="none"] [with_stars="basic"]
) )
if test "$with_subgrid" != "none"; then if test "$with_subgrid" != "none"; then
if test "$with_stars" != "none"; then if test "$with_stars" != "basic"; then
AC_MSG_ERROR([Cannot provide with-subgrid and with-stars together]) AC_MSG_ERROR([Cannot provide with-subgrid and with-stars together])
else else
with_stars="$with_subgrid_stars" with_stars="$with_subgrid_stars"
...@@ -1742,10 +2787,12 @@ case "$with_stars" in ...@@ -1742,10 +2787,12 @@ case "$with_stars" in
GEAR) GEAR)
AC_DEFINE([STARS_GEAR], [1], [GEAR stellar model]) AC_DEFINE([STARS_GEAR], [1], [GEAR stellar model])
;; ;;
basic)
AC_DEFINE([STARS_BASIC], [1], [Basic stellar model])
;;
none) none)
AC_DEFINE([STARS_NONE], [1], [Basic stellar model]) AC_DEFINE([STARS_NONE], [1], [No stellar model])
;; ;;
*) *)
AC_MSG_ERROR([Unknown stellar model: $with_stars]) AC_MSG_ERROR([Unknown stellar model: $with_stars])
;; ;;
...@@ -1754,7 +2801,7 @@ esac ...@@ -1754,7 +2801,7 @@ esac
# Feedback model # Feedback model
AC_ARG_WITH([feedback], AC_ARG_WITH([feedback],
[AS_HELP_STRING([--with-feedback=<model>], [AS_HELP_STRING([--with-feedback=<model>],
[Feedback model to use @<:@none, EAGLE, debug default: none@:>@] [Feedback model to use @<:@none, EAGLE, EAGLE-thermal, EAGLE-kinetic, GEAR, AGORA default: none@:>@]
)], )],
[with_feedback="$withval"], [with_feedback="$withval"],
[with_feedback="none"] [with_feedback="none"]
...@@ -1768,9 +2815,27 @@ if test "$with_subgrid" != "none"; then ...@@ -1768,9 +2815,27 @@ if test "$with_subgrid" != "none"; then
fi fi
fi fi
with_feedback_name="none"
case "$with_feedback" in case "$with_feedback" in
EAGLE-kinetic)
AC_DEFINE([FEEDBACK_EAGLE_KINETIC], [1], [EAGLE kinetic stellar feedback and evolution model])
with_feedback_name="EAGLE kinetic stellar feedback and evolution model"
;;
EAGLE-thermal)
AC_DEFINE([FEEDBACK_EAGLE_THERMAL], [1], [EAGLE thermal stellar feedback and evolution model])
with_feedback_name="EAGLE thermal stellar feedback and evolution model"
;;
EAGLE) EAGLE)
AC_DEFINE([FEEDBACK_EAGLE], [1], [EAGLE stellar feedback and evolution model]) AC_DEFINE([FEEDBACK_EAGLE_THERMAL], [1], [EAGLE thermal stellar feedback and evolution model])
with_feedback_name="EAGLE thermal stellar feedback and evolution model"
;;
GEAR)
AC_DEFINE([FEEDBACK_GEAR], [1], [GEAR stellar feedback and evolution model])
with_feedback_name="GEAR"
;;
AGORA)
AC_DEFINE([FEEDBACK_AGORA], [1], [AGORA stellar feedback and evolution model])
with_feedback_name="AGORA"
;; ;;
none) none)
AC_DEFINE([FEEDBACK_NONE], [1], [No feedback]) AC_DEFINE([FEEDBACK_NONE], [1], [No feedback])
...@@ -1781,10 +2846,30 @@ case "$with_feedback" in ...@@ -1781,10 +2846,30 @@ case "$with_feedback" in
;; ;;
esac esac
# For models using ray-based feedback, let the users set different numbers of rays
AC_ARG_WITH([number-of-SNII-rays],
[AS_HELP_STRING([--with-number-of-SNII-rays], [Number of rays to use for the SNII feedback (default: 1)])],
[with_number_of_SNII_rays="$withval"],
[with_number_of_SNII_rays="1"])
AC_DEFINE_UNQUOTED([FEEDBACK_NR_RAYS_SNII], [$with_number_of_SNII_rays], [Number of rays to use for the SNII feedback])
AC_ARG_WITH([number-of-SNIa-rays],
[AS_HELP_STRING([--with-number-of-SNIa-rays], [Number of rays to use for the SNIa feedback (default: 1)])],
[with_number_of_SNIa_rays="$withval"],
[with_number_of_SNIa_rays="1"])
AC_DEFINE_UNQUOTED([FEEDBACK_NR_RAYS_SNIa], [$with_number_of_SNIa_rays], [Number of rays to use for the SNIa feedback])
AC_ARG_WITH([number-of-AGN-rays],
[AS_HELP_STRING([--with-number-of-AGN-rays], [Number of rays to use for the AGN feedback (default: 50)])],
[with_number_of_AGN_rays="$withval"],
[with_number_of_AGN_rays="50"])
AC_DEFINE_UNQUOTED([FEEDBACK_NR_RAYS_AGN], [$with_number_of_AGN_rays], [Number of rays to use for the AGN feedback])
# Black hole model. # Black hole model.
AC_ARG_WITH([black-holes], AC_ARG_WITH([black-holes],
[AS_HELP_STRING([--with-black-holes=<model>], [AS_HELP_STRING([--with-black-holes=<model>],
[Black holes model to use @<:@none, default: none@:>@] [Black holes model to use @<:@none, EAGLE, SPIN_JET default: none@:>@]
)], )],
[with_black_holes="$withval"], [with_black_holes="$withval"],
[with_black_holes="none"] [with_black_holes="none"]
...@@ -1805,15 +2890,78 @@ case "$with_black_holes" in ...@@ -1805,15 +2890,78 @@ case "$with_black_holes" in
EAGLE) EAGLE)
AC_DEFINE([BLACK_HOLES_EAGLE], [1], [EAGLE black hole model]) AC_DEFINE([BLACK_HOLES_EAGLE], [1], [EAGLE black hole model])
;; ;;
SPIN_JET)
AC_DEFINE([BLACK_HOLES_SPIN_JET], [1], [Spin and jet black hole model])
with_black_holes="SPIN_JETS (Husko+22)"
;;
*) *)
AC_MSG_ERROR([Unknown black-hole model: $with_black_holes]) AC_MSG_ERROR([Unknown black-hole model: $with_black_holes])
;; ;;
esac esac
# Sink model.
AC_ARG_WITH([sink],
[AS_HELP_STRING([--with-sink=<model>],
[Sink particle model to use @<:@none, GEAR, default: none@:>@]
)],
[with_sink="$withval"],
[with_sink="none"]
)
if test "$with_subgrid" != "none"; then
if test "$with_sink" != "none"; then
AC_MSG_ERROR([Cannot provide with-subgrid and with-sink together])
else
with_sink="$with_subgrid_sink"
fi
fi
case "$with_sink" in
none)
AC_DEFINE([SINK_NONE], [1], [No sink particle model])
;;
Basic)
AC_DEFINE([SINK_BASIC], [1], [Simple, self-contained sink model with only Bondi-Hoyle accretion and no SF.])
;;
GEAR)
AC_DEFINE([SINK_GEAR], [1], [GEAR sink particle model])
;;
*)
AC_MSG_ERROR([Unknown sink particle model model: $with_sink])
;;
esac
# Forcing terms
AC_ARG_WITH([forcing],
[AS_HELP_STRING([--with-forcing=<term>],
[Hydrodynamics forcing terms @<:@none, roberts-flow, roberts-flow-acceleration , abc-flowdefault: none@:>@]
)],
[with_forcing="$withval"],
[with_forcing="none"]
)
case "$with_forcing" in
none)
AC_DEFINE([FORCING_NONE], [1], [No external forcing terms])
;;
roberts-flow)
AC_DEFINE([FORCING_ROBERTS_FLOW], [1], [Roberts' flow external forcing terms])
;;
roberts-flow-acceleration)
AC_DEFINE([FORCING_ROBERTS_FLOW_ACCELERATION], [1], [Roberts' flow external forcing terms entering the equations as an acceleration term])
;;
abc-flow)
AC_DEFINE([FORCING_ABC_FLOW], [1], [ABC flow external forcing terms])
;;
*)
AC_MSG_ERROR([Unknown external forcing term: $with_forcing])
;;
esac
# External potential # External potential
AC_ARG_WITH([ext-potential], AC_ARG_WITH([ext-potential],
[AS_HELP_STRING([--with-ext-potential=<pot>], [AS_HELP_STRING([--with-ext-potential=<pot>],
[external potential @<:@none, point-mass, point-mass-ring, point-mass-softened, isothermal, nfw, hernquist, disc-patch, sine-wave, default: none@:>@] [external potential @<:@none, point-mass, point-mass-softened, isothermal, nfw, nfw-mn, hernquist, hernquist-sdmh05, disc-patch, sine-wave, MWPotential2014, constant, default: none@:>@]
)], )],
[with_potential="$withval"], [with_potential="$withval"],
[with_potential="none"] [with_potential="none"]
...@@ -1831,30 +2979,39 @@ case "$with_potential" in ...@@ -1831,30 +2979,39 @@ case "$with_potential" in
hernquist) hernquist)
AC_DEFINE([EXTERNAL_POTENTIAL_HERNQUIST], [1], [Hernquist external potential]) AC_DEFINE([EXTERNAL_POTENTIAL_HERNQUIST], [1], [Hernquist external potential])
;; ;;
hernquist-sdmh05)
AC_DEFINE([EXTERNAL_POTENTIAL_HERNQUIST_SDMH05], [1], [Hernquist external potential following Springel, Di Matteo & Hernquist 2005])
;;
nfw) nfw)
AC_DEFINE([EXTERNAL_POTENTIAL_NFW], [1], [Navarro-Frenk-White external potential]) AC_DEFINE([EXTERNAL_POTENTIAL_NFW], [1], [Navarro-Frenk-White external potential])
;; ;;
nfw-mn)
AC_DEFINE([EXTERNAL_POTENTIAL_NFW_MN], [1], [Navarro-Frenk-White + Miyamoto-Nagai disk external potential])
;;
disc-patch) disc-patch)
AC_DEFINE([EXTERNAL_POTENTIAL_DISC_PATCH], [1], [Disc-patch external potential]) AC_DEFINE([EXTERNAL_POTENTIAL_DISC_PATCH], [1], [Disc-patch external potential])
;; ;;
sine-wave) sine-wave)
AC_DEFINE([EXTERNAL_POTENTIAL_SINE_WAVE], [1], [Sine wave external potential in 1D]) AC_DEFINE([EXTERNAL_POTENTIAL_SINE_WAVE], [1], [Sine wave external potential in 1D])
;; ;;
point-mass-ring)
AC_DEFINE([EXTERNAL_POTENTIAL_POINTMASS_RING], [1], [Point mass potential for Keplerian Ring (Hopkins 2015).])
;;
point-mass-softened) point-mass-softened)
AC_DEFINE([EXTERNAL_POTENTIAL_POINTMASS_SOFT], [1], [Softened point-mass potential with form 1/(r^2 + softening^2).]) AC_DEFINE([EXTERNAL_POTENTIAL_POINTMASS_SOFT], [1], [Softened point-mass potential with form 1/(r^2 + softening^2).])
;; ;;
MWPotential2014)
AC_DEFINE([EXTERNAL_POTENTIAL_MWPotential2014], [1], [Milky-Way like potential composed of a Navarro-Frenk-White + Miyamoto-Nagai disk + Power spherical cuttoff external potential.])
;;
constant)
AC_DEFINE([EXTERNAL_POTENTIAL_CONSTANT], [1], [Constant gravitational acceleration.])
;;
*) *)
AC_MSG_ERROR([Unknown external potential: $with_potential]) AC_MSG_ERROR([Unknown external potential: $with_potential])
;; ;;
esac esac
# Entropy floor # Entropy floor
AC_ARG_WITH([entropy-floor], AC_ARG_WITH([entropy-floor],
[AS_HELP_STRING([--with-entropy-floor=<floor>], [AS_HELP_STRING([--with-entropy-floor=<floor>],
[entropy floor @<:@none, EAGLE, default: none@:>@] [entropy floor @<:@none, QLA, EAGLE, default: none@:>@]
)], )],
[with_entropy_floor="$withval"], [with_entropy_floor="$withval"],
[with_entropy_floor="none"] [with_entropy_floor="none"]
...@@ -1871,18 +3028,50 @@ case "$with_entropy_floor" in ...@@ -1871,18 +3028,50 @@ case "$with_entropy_floor" in
none) none)
AC_DEFINE([ENTROPY_FLOOR_NONE], [1], [No entropy floor]) AC_DEFINE([ENTROPY_FLOOR_NONE], [1], [No entropy floor])
;; ;;
QLA)
AC_DEFINE([ENTROPY_FLOOR_QLA], [1], [Quick Lyman-alpha entropy floor])
;;
EAGLE) EAGLE)
AC_DEFINE([ENTROPY_FLOOR_EAGLE], [1], [EAGLE entropy floor]) AC_DEFINE([ENTROPY_FLOOR_EAGLE], [1], [EAGLE entropy floor])
;; ;;
*) *)
AC_MSG_ERROR([Unknown entropy floor model]) AC_MSG_ERROR([Unknown entropy floor model])
;; ;;
esac esac
# Pressure floor
AC_ARG_WITH([pressure-floor],
[AS_HELP_STRING([--with-pressure-floor=<floor>],
[pressure floor @<:@none, GEAR, default: none@:>@
The hydro model needs to be compatible.]
)],
[with_pressure_floor="$withval"],
[with_pressure_floor="none"]
)
if test "$with_subgrid" != "none"; then
if test "$with_pressure_floor" != "none"; then
AC_MSG_ERROR([Cannot provide with-subgrid and with-pressure-floor together])
else
with_pressure_floor="$with_subgrid_pressure_floor"
fi
fi
case "$with_pressure_floor" in
none)
AC_DEFINE([PRESSURE_FLOOR_NONE], [1], [No pressure floor])
;;
GEAR)
AC_DEFINE([PRESSURE_FLOOR_GEAR], [1], [GEAR pressure floor])
;;
*)
AC_MSG_ERROR([Unknown pressure floor model])
;;
esac
# Star formation # Star formation
AC_ARG_WITH([star-formation], AC_ARG_WITH([star-formation],
[AS_HELP_STRING([--with-star-formation=<sfm>], [AS_HELP_STRING([--with-star-formation=<sfm>],
[star formation @<:@none, EAGLE, GEAR, default: none@:>@] [star formation @<:@none, QLA, EAGLE, GEAR, default: none@:>@]
)], )],
[with_star_formation="$withval"], [with_star_formation="$withval"],
[with_star_formation="none"] [with_star_formation="none"]
...@@ -1899,6 +3088,9 @@ case "$with_star_formation" in ...@@ -1899,6 +3088,9 @@ case "$with_star_formation" in
none) none)
AC_DEFINE([STAR_FORMATION_NONE], [1], [No star formation]) AC_DEFINE([STAR_FORMATION_NONE], [1], [No star formation])
;; ;;
QLA)
AC_DEFINE([STAR_FORMATION_QLA], [1], [Quick Lyman-alpha star formation model)])
;;
EAGLE) EAGLE)
AC_DEFINE([STAR_FORMATION_EAGLE], [1], [EAGLE star formation model (Schaye and Dalla Vecchia (2008))]) AC_DEFINE([STAR_FORMATION_EAGLE], [1], [EAGLE star formation model (Schaye and Dalla Vecchia (2008))])
;; ;;
...@@ -1908,7 +3100,18 @@ case "$with_star_formation" in ...@@ -1908,7 +3100,18 @@ case "$with_star_formation" in
*) *)
AC_MSG_ERROR([Unknown star formation model]) AC_MSG_ERROR([Unknown star formation model])
;; ;;
esac esac
AC_ARG_WITH([gadget2-physical-constants],
[AS_HELP_STRING([--with-gadget2-physical-constants],
[Use the same physical constants (G, Msun, Mpc) as the Gadget-2 code rather than more up-to-date values.]
)],
[with_gadget2_physical_constants="$withval"],
[with_gadget2_physical_constants="no"]
)
if test "$with_gadget2_physical_constants" = "yes"; then
AC_DEFINE([SWIFT_USE_GADGET2_PHYSICAL_CONSTANTS],1,[Use the same physical constants as Gadget-2])
fi
# Gravity multipole order # Gravity multipole order
AC_ARG_WITH([multipole-order], AC_ARG_WITH([multipole-order],
...@@ -1920,19 +3123,193 @@ AC_ARG_WITH([multipole-order], ...@@ -1920,19 +3123,193 @@ AC_ARG_WITH([multipole-order],
) )
AC_DEFINE_UNQUOTED([SELF_GRAVITY_MULTIPOLE_ORDER], [$with_multipole_order], [Multipole order]) AC_DEFINE_UNQUOTED([SELF_GRAVITY_MULTIPOLE_ORDER], [$with_multipole_order], [Multipole order])
# Radiative transfer scheme
AC_ARG_WITH([rt],
[AS_HELP_STRING([--with-rt=<scheme>],
[Radiative transfer scheme to use @<:@none, GEAR_*, SPHM1RT_*, debug default: none@:>@.
For GEAR and SPHM1RT, the number of photon groups (e.g. GEAR_4) needs to be provided.]
)],
[with_rt="$withval"],
[with_rt="none"]
)
# For GEAR-RT scheme: Select a RT Riemann solver
AC_ARG_WITH([rt-riemann-solver],
[AS_HELP_STRING([--with-rt-riemann-solver=<scheme>],
[Riemann solver for the moments of the ratiadiative transfer equation with the M1 closure to use @<:@none, HLL, GLF, default: none@:>@.
For the GEAR RT scheme, you need to select one Riemann solver.]
)],
[with_rt_riemann_solver="$withval"],
[with_rt_riemann_solver="none"]
)
case "$with_rt_riemann_solver" in
none)
AC_DEFINE([RT_RIEMANN_SOLVER_NONE], [1], [No RT riemann solver])
;;
HLL)
AC_DEFINE([RT_RIEMANN_SOLVER_HLL], [1], [HLL RT riemann solver])
;;
GLF)
AC_DEFINE([RT_RIEMANN_SOLVER_GLF], [1], [GLF RT riemann solver])
;;
*)
AC_MSG_ERROR("Unknown RT Riemann solver: $with_rt_riemann_solver")
;;
esac
case "$with_rt" in
none)
AC_DEFINE([RT_NONE], [1], [No radiative transfer scheme])
;;
GEAR_*)
AC_DEFINE([RT_GEAR], [1], [GEAR M1 closure scheme])
number_group=${with_rt#*_}
AC_DEFINE_UNQUOTED([RT_NGROUPS], [$number_group], [Number of photon groups to follow])
AC_DEFINE([MPI_SYMMETRIC_FORCE_INTERACTION_RT], [1], [Do symmetric MPI interactions])
if test "$number_group" = "0"; then
AC_MSG_ERROR([GEAR-RT: Cannot work with zero photon groups])
fi
if ! test $number_group -eq $number_group; then
# abuse -eq to check whether $number_group is an integer. -eq
# only works with those.
AC_MSG_ERROR([GEAR-RT: Cannot work with non-integer photon groups])
fi
if test "$enable_debugging_checks" = "yes"; then
AC_DEFINE([SWIFT_RT_DEBUG_CHECKS], [1], [additional debugging checks for RT])
fi
case "$with_hydro" in
"gizmo-mfv" | "sphenix")
# allowed.
;;
*)
AC_MSG_ERROR([GEAR-RT: Cannot work without gizmo-mfv or sphenix hydro. Compile using --with-hydro=gizmo-mfv or --with-hydro=sphenix])
;;
esac
if test "$with_rt_riemann_solver" = "none"; then
AC_MSG_ERROR([GEAR-RT: You need to select an RT Riemann solver (--with-rt-riemann-solver=...)])
fi
if test "$have_grackle" != "yes"; then
AC_MSG_ERROR([GEAR-RT: You need the grackle library for GEAR-RT. (--with-grackle=PATH)])
fi
;;
debug)
AC_DEFINE([RT_DEBUG], [1], [debugging scheme])
AC_DEFINE([SWIFT_RT_DEBUG_CHECKS], [1], [additional debugging checks for RT])
;;
SPHM1RT_*)
AC_DEFINE([RT_SPHM1RT], [1], [SPHM1RT radiative transfer scheme (Chan+21: 2102.08404)])
number_group=${with_rt#*_}
AC_DEFINE_UNQUOTED([RT_NGROUPS], [$number_group], [Number of photon groups to follow])
if test "$number_group" -eq "0"; then
AC_MSG_ERROR([SPHM1RT: Cannot work with zero photon groups])
fi
if test $number_group -lt 4; then
AC_MSG_ERROR([SPHM1RT: Cannot work with < four photon groups for now])
fi
if ! test $number_group -eq $number_group; then
# abuse -eq to check whether $number_group is an integer. -eq
# only works with those.
AC_MSG_ERROR([SPHM1RT: Cannot work with non-integer photon groups])
fi
AC_MSG_CHECKING([for Sundials libraries])
AC_MSG_RESULT($have_sundials)
if test "$have_sundials" != "yes"; then
AC_MSG_ERROR([The Sundials library is not present. Sundials is required for the SPHM1RT module.])
fi
;;
*)
AC_MSG_ERROR([Unknown radiative transfer scheme: $with_rt])
;;
esac
# Check for git, needed for revision stamps. # Check for git, needed for revision stamps.
AC_PATH_PROG([GIT_CMD], [git]) AC_PATH_PROG([GIT_CMD], [git])
AC_SUBST([GIT_CMD]) AC_SUBST([GIT_CMD])
# Make the documentation. Add conditional to handle disable option. # Make the documentation. Add conditional to handle disable option.
DX_INIT_DOXYGEN(libswift,doc/Doxyfile,doc/) DX_DOXYGEN_FEATURE(OFF)
DX_INIT_DOXYGEN(SWIFT, doc/Doxyfile, doc/)
AM_CONDITIONAL([HAVE_DOXYGEN], [test "$ac_cv_path_ac_pt_DX_DOXYGEN" != ""]) AM_CONDITIONAL([HAVE_DOXYGEN], [test "$ac_cv_path_ac_pt_DX_DOXYGEN" != ""])
# Check if using EAGLE extra I/O
AM_CONDITIONAL([HAVEEAGLEEXTRAIO], [test "${with_extra_io}" = "EAGLE"])
# Check if using QLA cooling
AM_CONDITIONAL([HAVEQLACOOLING], [test "$with_cooling" = "QLA"])
AM_CONDITIONAL([HAVEQLAEAGLECOOLING], [test "$with_cooling" = "QLA-EAGLE"])
# Check if using EAGLE cooling # Check if using EAGLE cooling
AM_CONDITIONAL([HAVEEAGLECOOLING], [test $with_cooling = "EAGLE"]) AM_CONDITIONAL([HAVEEAGLECOOLING], [test "$with_cooling" = "EAGLE"])
# Check if using PS2020 cooling
AM_CONDITIONAL([HAVEPS2020COOLING], [test "$with_cooling" = "PS2020"])
# Check if using EAGLE feedback # Check if using EAGLE feedback
AM_CONDITIONAL([HAVEEAGLEFEEDBACK], [test $with_feedback = "EAGLE"]) AM_CONDITIONAL([HAVEEAGLETHERMALFEEDBACK], [test "${with_feedback%-thermal}" = "EAGLE"])
AM_CONDITIONAL([HAVEEAGLEKINETICFEEDBACK], [test "$with_feedback" = "EAGLE-kinetic"])
# check if using grackle cooling
AM_CONDITIONAL([HAVEGRACKLECOOLING], [test "$with_cooling" = "grackle"])
# check if using EAGLE floor
AM_CONDITIONAL([HAVEEAGLEFLOOR], [test "$with_entropy_floor" = "EAGLE"])
# check if using gear feedback
AM_CONDITIONAL([HAVEGEARFEEDBACK], [test "$with_feedback" = "GEAR"])
# check if using gear feedback
AM_CONDITIONAL([HAVEAGORAFEEDBACK], [test "$with_feedback" = "AGORA"])
# check if using SPHENIX
AM_CONDITIONAL([HAVE_SPHENIX], [test "$with_hydro" = "sphenix"])
# check if using GADGET2 SPH
AM_CONDITIONAL([HAVE_GADGET2], [test "$with_hydro" = "gadget2"])
# check if using none chemistry
AM_CONDITIONAL([HAVE_CHEMISTRY_NONE], [test "$with_chemistry" = "none"])
# check if using GEAR chemistry
AM_CONDITIONAL([HAVE_CHEMISTRY_GEAR], [test "$with_chemistry" = "GEAR" || test "$with_chemistry" = "GEAR_DIFFUSION"])
# check if using AGORA chemistry
AM_CONDITIONAL([HAVE_CHEMISTRY_AGORA], [test "$with_chemistry" = "AGORA" || test "$with_chemistry" = "GEAR_DIFFUSION"])
# check if using default stars
AM_CONDITIONAL([HAVE_STARS_BASIC], [test "$with_stars" = "basic"])
# check if using GEAR stars
AM_CONDITIONAL([HAVE_STARS_GEAR], [test "$with_stars" = "GEAR"])
# check if using default star formation
AM_CONDITIONAL([HAVE_STAR_FORMATION_DEFAULT], [test "$with_star_formation" = "none"])
# check if using GEAR star formation
AM_CONDITIONAL([HAVE_STAR_FORMATION_GEAR], [test "$with_star_formation" = "GEAR"])
# check if using multi softening gravity
AM_CONDITIONAL([HAVE_GRAVITY_MULTISOFTENING], [test "$with_gravity" = "with-multi-softening"])
# Check if using SPHM1RT radiative transfer
AM_CONDITIONAL([HAVESPHM1RTRT], [test "${with_rt:0:7}" = "SPHM1RT"])
# Check if using GEAR-RT radiative transfer
AM_CONDITIONAL([HAVEGEARRT], [test "${with_rt:0:4}" = "GEAR"])
# Check if using Moving mesh
AM_CONDITIONAL([HAVE_MOVING_MESH], [test "$enable_moving_mesh" = "yes"])
# Handle .in files. # Handle .in files.
AC_CONFIG_FILES([Makefile src/Makefile examples/Makefile examples/Cooling/CoolingRates/Makefile doc/Makefile doc/Doxyfile tests/Makefile]) AC_CONFIG_FILES([Makefile src/Makefile examples/Makefile examples/Cooling/CoolingRates/Makefile doc/Makefile doc/Doxyfile tests/Makefile])
...@@ -1951,6 +3328,8 @@ AC_CONFIG_FILES([tests/testInteractions.sh], [chmod +x tests/testInteractions.sh ...@@ -1951,6 +3328,8 @@ AC_CONFIG_FILES([tests/testInteractions.sh], [chmod +x tests/testInteractions.sh
AC_CONFIG_FILES([tests/testParser.sh], [chmod +x tests/testParser.sh]) AC_CONFIG_FILES([tests/testParser.sh], [chmod +x tests/testParser.sh])
AC_CONFIG_FILES([tests/testSelectOutput.sh], [chmod +x tests/testSelectOutput.sh]) AC_CONFIG_FILES([tests/testSelectOutput.sh], [chmod +x tests/testSelectOutput.sh])
AC_CONFIG_FILES([tests/testFormat.sh], [chmod +x tests/testFormat.sh]) AC_CONFIG_FILES([tests/testFormat.sh], [chmod +x tests/testFormat.sh])
AC_CONFIG_FILES([tests/testNeutrinoCosmology.sh], [chmod +x tests/testNeutrinoCosmology.sh])
AC_CONFIG_FILES([tests/output_list_params.yml])
# Save the compilation options # Save the compilation options
AC_DEFINE_UNQUOTED([SWIFT_CONFIG_FLAGS],["$swift_config_flags"],[Flags passed to configure]) AC_DEFINE_UNQUOTED([SWIFT_CONFIG_FLAGS],["$swift_config_flags"],[Flags passed to configure])
...@@ -1980,16 +3359,25 @@ AC_MSG_RESULT([ ...@@ -1980,16 +3359,25 @@ AC_MSG_RESULT([
MPI enabled : $enable_mpi MPI enabled : $enable_mpi
HDF5 enabled : $with_hdf5 HDF5 enabled : $with_hdf5
- parallel : $have_parallel_hdf5 - parallel : $have_parallel_hdf5
LUSTRE API enabled : $have_lustreapi
METIS/ParMETIS : $have_metis / $have_parmetis METIS/ParMETIS : $have_metis / $have_parmetis
FFTW3 enabled : $have_fftw FFTW3 enabled : $have_fftw
- threaded/openmp : $have_threaded_fftw / $have_openmp_fftw
- MPI : $have_mpi_fftw
- ARM : $have_arm_fftw
GSL enabled : $have_gsl GSL enabled : $have_gsl
GMP enabled : $have_gmp
HEALPix C enabled : $have_chealpix
libNUMA enabled : $have_numa libNUMA enabled : $have_numa
GRACKLE enabled : $have_grackle GRACKLE enabled : $have_grackle
Sundials enabled : $have_sundials
Special allocators : $have_special_allocator Special allocators : $have_special_allocator
CPU profiler : $have_profiler CPU profiler : $have_profiler
Pthread barriers : $have_pthread_barrier Pthread barriers : $have_pthread_barrier
VELOCIraptor enabled : $have_velociraptor VELOCIraptor enabled : $have_velociraptor
Particle Logger : $with_logger FoF activated: : $enable_fof
Lightcones enabled : $enable_lightcone
Moving-mesh enabled : $enable_moving_mesh
Hydro scheme : $with_hydro Hydro scheme : $with_hydro
Dimensionality : $with_dimension Dimensionality : $with_dimension
...@@ -1997,23 +3385,31 @@ AC_MSG_RESULT([ ...@@ -1997,23 +3385,31 @@ AC_MSG_RESULT([
Equation of state : $with_eos Equation of state : $with_eos
Adiabatic index : $with_gamma Adiabatic index : $with_gamma
Riemann solver : $with_riemann Riemann solver : $with_riemann
SPMHD scheme : $with_spmhd
Adaptive softening : $with_adaptive_softening
Gravity scheme : $with_gravity Gravity scheme : $with_gravity
Multipole order : $with_multipole_order Multipole order : $with_multipole_order
Compute potential : $enable_gravitational_potential
No gravity below ID : $no_gravity_below_id No gravity below ID : $no_gravity_below_id
Make gravity glass : $gravity_glass_making Make gravity glass : $gravity_glass_making
External potential : $with_potential External potential : $with_potential
Forcing terms : $with_forcing
Pressure floor : $with_pressure_floor
Entropy floor : $with_entropy_floor Entropy floor : $with_entropy_floor
Cooling function : $with_cooling Cooling function : $with_cooling_name
Chemistry : $with_chemistry Chemistry : $with_chemistry_name
Tracers : $with_tracers Tracers : $with_tracers
Stellar model : $with_stars Stellar model : $with_stars
Star formation model : $with_star_formation Star formation model : $with_star_formation
Star feedback model : $with_feedback Star feedback model : $with_feedback_name
Sink particle model : $with_sink
Black holes model : $with_black_holes Black holes model : $with_black_holes
Radiative transfer : $with_rt
Extra i/o : $with_extra_io
Stand-alone FoF tool: : $enable_standalone_fof Atomic operations in tasks : $enable_atomics_within_tasks
Individual timers : $enable_timers Individual timers : $enable_timers
Task debugging : $enable_task_debugging Task debugging : $enable_task_debugging
Threadpool debugging : $enable_threadpool_debugging Threadpool debugging : $enable_threadpool_debugging
...@@ -2024,5 +3420,19 @@ AC_MSG_RESULT([ ...@@ -2024,5 +3420,19 @@ AC_MSG_RESULT([
Naive stars interactions : $enable_naive_interactions_stars Naive stars interactions : $enable_naive_interactions_stars
Gravity checks : $gravity_force_checks Gravity checks : $gravity_force_checks
Custom icbrtf : $enable_custom_icbrtf Custom icbrtf : $enable_custom_icbrtf
Boundary particles : $boundary_particles
Fixed boundary particles : $fixed_boundary_particles
Planetary fixed entropy : $planetary_fixed_entropy
Ghost statistics : $ghost_stats
Continuous Sim. Data Stream : $with_csds
------------------------]) ------------------------]
)
# Report any unrecognised options loudly.
if test "$ac_unrecognized_opts" != ""; then
AC_MSG_RESULT([
*** WARNING: unrecognized options: $ac_unrecognized_opts ***
])
fi
Subproject commit 0523433a7880e58e22b2215afd0104ea58786962
# Doxyfile 1.8.9.1 # Doxyfile 1.9.8
# This file describes the settings to be used by the documentation system # This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for a project. # doxygen (www.doxygen.org) for a project.
...@@ -12,16 +12,26 @@ ...@@ -12,16 +12,26 @@
# For lists, items can also be appended using: # For lists, items can also be appended using:
# TAG += value [value, ...] # TAG += value [value, ...]
# Values that contain spaces should be placed between quotes (\" \"). # Values that contain spaces should be placed between quotes (\" \").
#
# Note:
#
# Use doxygen to compare the used configuration file with the template
# configuration file:
# doxygen -x [configFile]
# Use doxygen to compare the used configuration file with the template
# configuration file without replacing the environment variables or CMake type
# replacement variables:
# doxygen -x_noenv [configFile]
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Project related configuration options # Project related configuration options
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# This tag specifies the encoding used for all characters in the config file # This tag specifies the encoding used for all characters in the configuration
# that follow. The default is UTF-8 which is also the encoding used for all text # file that follow. The default is UTF-8 which is also the encoding used for all
# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv # text before the first occurrence of this tag. Doxygen uses libiconv (or the
# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv # iconv built into libc) for the transcoding. See
# for the list of possible encodings. # https://www.gnu.org/software/libiconv/ for the list of possible encodings.
# The default value is: UTF-8. # The default value is: UTF-8.
DOXYFILE_ENCODING = UTF-8 DOXYFILE_ENCODING = UTF-8
...@@ -44,8 +54,7 @@ PROJECT_NUMBER = @PACKAGE_VERSION@ ...@@ -44,8 +54,7 @@ PROJECT_NUMBER = @PACKAGE_VERSION@
# for a project that appears at the top of each page and should give viewer a # for a project that appears at the top of each page and should give viewer a
# quick idea about the purpose of the project. Keep the description short. # quick idea about the purpose of the project. Keep the description short.
PROJECT_BRIEF = "SPH With Inter-dependent Fine-grained Tasking - \ PROJECT_BRIEF = "SPH With Inter-dependent Fine-grained Tasking - Cosmological hydrodynamical code"
Cosmological hydrodynamical code"
# With the PROJECT_LOGO tag one can specify a logo or an icon that is included # With the PROJECT_LOGO tag one can specify a logo or an icon that is included
# in the documentation. The maximum height of the logo should not exceed 55 # in the documentation. The maximum height of the logo should not exceed 55
...@@ -61,16 +70,28 @@ PROJECT_LOGO = ...@@ -61,16 +70,28 @@ PROJECT_LOGO =
OUTPUT_DIRECTORY = . OUTPUT_DIRECTORY = .
# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- # If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096
# directories (in 2 levels) under the output directory of each output format and # sub-directories (in 2 levels) under the output directory of each output format
# will distribute the generated files over these directories. Enabling this # and will distribute the generated files over these directories. Enabling this
# option can be useful when feeding doxygen a huge amount of source files, where # option can be useful when feeding doxygen a huge amount of source files, where
# putting all generated files in the same directory would otherwise causes # putting all generated files in the same directory would otherwise causes
# performance problems for the file system. # performance problems for the file system. Adapt CREATE_SUBDIRS_LEVEL to
# control the number of sub-directories.
# The default value is: NO. # The default value is: NO.
CREATE_SUBDIRS = NO CREATE_SUBDIRS = NO
# Controls the number of sub-directories that will be created when
# CREATE_SUBDIRS tag is set to YES. Level 0 represents 16 directories, and every
# level increment doubles the number of directories, resulting in 4096
# directories at level 8 which is the default and also the maximum value. The
# sub-directories are organized in 2 levels, the first level always has a fixed
# number of 16 directories.
# Minimum value: 0, maximum value: 8, default value: 8.
# This tag requires that the tag CREATE_SUBDIRS is set to YES.
CREATE_SUBDIRS_LEVEL = 8
# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII # If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
# characters to appear in the names of generated files. If set to NO, non-ASCII # characters to appear in the names of generated files. If set to NO, non-ASCII
# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode # characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
...@@ -82,14 +103,14 @@ ALLOW_UNICODE_NAMES = NO ...@@ -82,14 +103,14 @@ ALLOW_UNICODE_NAMES = NO
# The OUTPUT_LANGUAGE tag is used to specify the language in which all # The OUTPUT_LANGUAGE tag is used to specify the language in which all
# documentation generated by doxygen is written. Doxygen will use this # documentation generated by doxygen is written. Doxygen will use this
# information to generate all constant output in the proper language. # information to generate all constant output in the proper language.
# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, # Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Bulgarian,
# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), # Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, English
# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, # (United States), Esperanto, Farsi (Persian), Finnish, French, German, Greek,
# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), # Hindi, Hungarian, Indonesian, Italian, Japanese, Japanese-en (Japanese with
# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, # English messages), Korean, Korean-en (Korean with English messages), Latvian,
# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, # Lithuanian, Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese,
# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, # Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish,
# Ukrainian and Vietnamese. # Swedish, Turkish, Ukrainian and Vietnamese.
# The default value is: English. # The default value is: English.
OUTPUT_LANGUAGE = English OUTPUT_LANGUAGE = English
...@@ -180,6 +201,16 @@ SHORT_NAMES = NO ...@@ -180,6 +201,16 @@ SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = NO JAVADOC_AUTOBRIEF = NO
# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line
# such as
# /***************
# as being the beginning of a Javadoc-style comment "banner". If set to NO, the
# Javadoc-style will behave just like regular comments and it will not be
# interpreted by doxygen.
# The default value is: NO.
JAVADOC_BANNER = NO
# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
# line (until the first dot) of a Qt-style comment as the brief description. If # line (until the first dot) of a Qt-style comment as the brief description. If
# set to NO, the Qt-style will behave just like regular Qt-style comments (thus # set to NO, the Qt-style will behave just like regular Qt-style comments (thus
...@@ -200,6 +231,14 @@ QT_AUTOBRIEF = NO ...@@ -200,6 +231,14 @@ QT_AUTOBRIEF = NO
MULTILINE_CPP_IS_BRIEF = NO MULTILINE_CPP_IS_BRIEF = NO
# By default Python docstrings are displayed as preformatted text and doxygen's
# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the
# doxygen's special commands can be used and the contents of the docstring
# documentation blocks is shown as doxygen documentation.
# The default value is: YES.
PYTHON_DOCSTRING = YES
# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
# documentation from any documented member that it re-implements. # documentation from any documented member that it re-implements.
# The default value is: YES. # The default value is: YES.
...@@ -223,20 +262,19 @@ TAB_SIZE = 8 ...@@ -223,20 +262,19 @@ TAB_SIZE = 8
# the documentation. An alias has the form: # the documentation. An alias has the form:
# name=value # name=value
# For example adding # For example adding
# "sideeffect=@par Side Effects:\n" # "sideeffect=@par Side Effects:^^"
# will allow you to put the command \sideeffect (or @sideeffect) in the # will allow you to put the command \sideeffect (or @sideeffect) in the
# documentation, which will result in a user-defined paragraph with heading # documentation, which will result in a user-defined paragraph with heading
# "Side Effects:". You can put \n's in the value part of an alias to insert # "Side Effects:". Note that you cannot put \n's in the value part of an alias
# newlines. # to insert newlines (in the resulting output). You can put ^^ in the value part
# of an alias to insert a newline as if a physical newline was in the original
# file. When you need a literal { or } or , in the value part of an alias you
# have to escape them by means of a backslash (\), this can lead to conflicts
# with the commands \{ and \} for these it is advised to use the version @{ and
# @} or use a double escape (\\{ and \\})
ALIASES = ALIASES =
# This tag can be used to specify a number of word-keyword mappings (TCL only).
# A mapping has the form "name=value". For example adding "class=itcl::class"
# will allow you to use the command class in the itcl::class meaning.
TCL_SUBST =
# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
# only. Doxygen will then generate output that is more tailored for C. For # only. Doxygen will then generate output that is more tailored for C. For
# instance, some of the names that are used will be different. The list of all # instance, some of the names that are used will be different. The list of all
...@@ -265,28 +303,40 @@ OPTIMIZE_FOR_FORTRAN = NO ...@@ -265,28 +303,40 @@ OPTIMIZE_FOR_FORTRAN = NO
OPTIMIZE_OUTPUT_VHDL = NO OPTIMIZE_OUTPUT_VHDL = NO
# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice
# sources only. Doxygen will then generate output that is more tailored for that
# language. For instance, namespaces will be presented as modules, types will be
# separated into more groups, etc.
# The default value is: NO.
OPTIMIZE_OUTPUT_SLICE = NO
# Doxygen selects the parser to use depending on the extension of the files it # Doxygen selects the parser to use depending on the extension of the files it
# parses. With this tag you can assign which parser to use for a given # parses. With this tag you can assign which parser to use for a given
# extension. Doxygen has a built-in mapping, but you can override or extend it # extension. Doxygen has a built-in mapping, but you can override or extend it
# using this tag. The format is ext=language, where ext is a file extension, and # using this tag. The format is ext=language, where ext is a file extension, and
# language is one of the parsers supported by doxygen: IDL, Java, Javascript, # language is one of the parsers supported by doxygen: IDL, Java, JavaScript,
# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: # Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice,
# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: # VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran:
# Fortran. In the later case the parser tries to guess whether the code is fixed # FortranFree, unknown formatted Fortran: Fortran. In the later case the parser
# or free formatted code, this is the default for Fortran type files), VHDL. For # tries to guess whether the code is fixed or free formatted code, this is the
# instance to make doxygen treat .inc files as Fortran files (default is PHP), # default for Fortran type files). For instance to make doxygen treat .inc files
# and .f files as C (default is Fortran), use: inc=Fortran f=C. # as Fortran files (default is PHP), and .f files as C (default is Fortran),
# use: inc=Fortran f=C.
# #
# Note: For files without extension you can use no_extension as a placeholder. # Note: For files without extension you can use no_extension as a placeholder.
# #
# Note that for custom extensions you also need to set FILE_PATTERNS otherwise # Note that for custom extensions you also need to set FILE_PATTERNS otherwise
# the files are not read by doxygen. # the files are not read by doxygen. When specifying no_extension you should add
# * to the FILE_PATTERNS.
#
# Note see also the list of default file extension mappings.
EXTENSION_MAPPING = EXTENSION_MAPPING =
# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
# according to the Markdown format, which allows for more readable # according to the Markdown format, which allows for more readable
# documentation. See http://daringfireball.net/projects/markdown/ for details. # documentation. See https://daringfireball.net/projects/markdown/ for details.
# The output of markdown processing is further processed by doxygen, so you can # The output of markdown processing is further processed by doxygen, so you can
# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
# case of backward compatibilities issues. # case of backward compatibilities issues.
...@@ -294,6 +344,26 @@ EXTENSION_MAPPING = ...@@ -294,6 +344,26 @@ EXTENSION_MAPPING =
MARKDOWN_SUPPORT = YES MARKDOWN_SUPPORT = YES
# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
# to that level are automatically included in the table of contents, even if
# they do not have an id attribute.
# Note: This feature currently applies only to Markdown headings.
# Minimum value: 0, maximum value: 99, default value: 5.
# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
TOC_INCLUDE_HEADINGS = 5
# The MARKDOWN_ID_STYLE tag can be used to specify the algorithm used to
# generate identifiers for the Markdown headings. Note: Every identifier is
# unique.
# Possible values are: DOXYGEN use a fixed 'autotoc_md' string followed by a
# sequence number starting at 0 and GITHUB use the lower case version of title
# with any whitespace replaced by '-' and punctuation characters removed.
# The default value is: DOXYGEN.
# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
MARKDOWN_ID_STYLE = DOXYGEN
# When enabled doxygen tries to link words that correspond to documented # When enabled doxygen tries to link words that correspond to documented
# classes, or namespaces to their corresponding documentation. Such a link can # classes, or namespaces to their corresponding documentation. Such a link can
# be prevented in individual cases by putting a % sign in front of the word or # be prevented in individual cases by putting a % sign in front of the word or
...@@ -319,7 +389,7 @@ BUILTIN_STL_SUPPORT = NO ...@@ -319,7 +389,7 @@ BUILTIN_STL_SUPPORT = NO
CPP_CLI_SUPPORT = NO CPP_CLI_SUPPORT = NO
# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: # Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen # https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen
# will parse them like normal C++ but will assume all classes use public instead # will parse them like normal C++ but will assume all classes use public instead
# of private inheritance when no explicit protection keyword is present. # of private inheritance when no explicit protection keyword is present.
# The default value is: NO. # The default value is: NO.
...@@ -344,6 +414,13 @@ IDL_PROPERTY_SUPPORT = YES ...@@ -344,6 +414,13 @@ IDL_PROPERTY_SUPPORT = YES
DISTRIBUTE_GROUP_DOC = NO DISTRIBUTE_GROUP_DOC = NO
# If one adds a struct or class to a group and this option is enabled, then also
# any nested class or struct is added to the same group. By default this option
# is disabled and one has to add nested compounds explicitly via \ingroup.
# The default value is: NO.
GROUP_NESTED_COMPOUNDS = NO
# Set the SUBGROUPING tag to YES to allow class member groups of the same type # Set the SUBGROUPING tag to YES to allow class member groups of the same type
# (for instance a group of public functions) to be put as a subgroup of that # (for instance a group of public functions) to be put as a subgroup of that
# type (e.g. under the Public Functions section). Set it to NO to prevent # type (e.g. under the Public Functions section). Set it to NO to prevent
...@@ -398,6 +475,27 @@ TYPEDEF_HIDES_STRUCT = NO ...@@ -398,6 +475,27 @@ TYPEDEF_HIDES_STRUCT = NO
LOOKUP_CACHE_SIZE = 0 LOOKUP_CACHE_SIZE = 0
# The NUM_PROC_THREADS specifies the number of threads doxygen is allowed to use
# during processing. When set to 0 doxygen will based this on the number of
# cores available in the system. You can set it explicitly to a value larger
# than 0 to get more control over the balance between CPU load and processing
# speed. At this moment only the input processing can be done using multiple
# threads. Since this is still an experimental feature the default is set to 1,
# which effectively disables parallel processing. Please report any issues you
# encounter. Generating dot graphs in parallel is controlled by the
# DOT_NUM_THREADS setting.
# Minimum value: 0, maximum value: 32, default value: 1.
NUM_PROC_THREADS = 1
# If the TIMESTAMP tag is set different from NO then each generated page will
# contain the date or date and time when the page was generated. Setting this to
# NO can help when comparing the output of multiple runs.
# Possible values are: YES, NO, DATETIME and DATE.
# The default value is: NO.
TIMESTAMP = YES
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Build related configuration options # Build related configuration options
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
...@@ -418,6 +516,12 @@ EXTRACT_ALL = YES ...@@ -418,6 +516,12 @@ EXTRACT_ALL = YES
EXTRACT_PRIVATE = NO EXTRACT_PRIVATE = NO
# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual
# methods of a class will be included in the documentation.
# The default value is: NO.
EXTRACT_PRIV_VIRTUAL = NO
# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal # If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
# scope will be included in the documentation. # scope will be included in the documentation.
# The default value is: NO. # The default value is: NO.
...@@ -455,6 +559,13 @@ EXTRACT_LOCAL_METHODS = NO ...@@ -455,6 +559,13 @@ EXTRACT_LOCAL_METHODS = NO
EXTRACT_ANON_NSPACES = NO EXTRACT_ANON_NSPACES = NO
# If this flag is set to YES, the name of an unnamed parameter in a declaration
# will be determined by the corresponding definition. By default unnamed
# parameters remain unnamed in the output.
# The default value is: YES.
RESOLVE_UNNAMED_PARAMS = YES
# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
# undocumented members inside documented classes or files. If set to NO these # undocumented members inside documented classes or files. If set to NO these
# members will be included in the various overviews, but no documentation # members will be included in the various overviews, but no documentation
...@@ -466,14 +577,15 @@ HIDE_UNDOC_MEMBERS = NO ...@@ -466,14 +577,15 @@ HIDE_UNDOC_MEMBERS = NO
# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
# undocumented classes that are normally visible in the class hierarchy. If set # undocumented classes that are normally visible in the class hierarchy. If set
# to NO, these classes will be included in the various overviews. This option # to NO, these classes will be included in the various overviews. This option
# has no effect if EXTRACT_ALL is enabled. # will also hide undocumented C++ concepts if enabled. This option has no effect
# if EXTRACT_ALL is enabled.
# The default value is: NO. # The default value is: NO.
HIDE_UNDOC_CLASSES = NO HIDE_UNDOC_CLASSES = NO
# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
# (class|struct|union) declarations. If set to NO, these declarations will be # declarations. If set to NO, these declarations will be included in the
# included in the documentation. # documentation.
# The default value is: NO. # The default value is: NO.
HIDE_FRIEND_COMPOUNDS = NO HIDE_FRIEND_COMPOUNDS = NO
...@@ -492,12 +604,20 @@ HIDE_IN_BODY_DOCS = NO ...@@ -492,12 +604,20 @@ HIDE_IN_BODY_DOCS = NO
INTERNAL_DOCS = NO INTERNAL_DOCS = NO
# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file # With the correct setting of option CASE_SENSE_NAMES doxygen will better be
# names in lower-case letters. If set to YES, upper-case letters are also # able to match the capabilities of the underlying filesystem. In case the
# allowed. This is useful if you have classes or files whose names only differ # filesystem is case sensitive (i.e. it supports files in the same directory
# in case and if your file system supports case sensitive file names. Windows # whose names only differ in casing), the option must be set to YES to properly
# and Mac users are advised to set this option to NO. # deal with such files in case they appear in the input. For filesystems that
# The default value is: system dependent. # are not case sensitive the option should be set to NO to properly deal with
# output files written for symbols that only differ in casing, such as for two
# classes, one named CLASS and the other named Class, and to also support
# references to files without having to specify the exact matching casing. On
# Windows (including Cygwin) and MacOS, users should typically set this option
# to NO, whereas on Linux or other Unix flavors it should typically be set to
# YES.
# Possible values are: SYSTEM, NO and YES.
# The default value is: SYSTEM.
CASE_SENSE_NAMES = YES CASE_SENSE_NAMES = YES
...@@ -515,6 +635,12 @@ HIDE_SCOPE_NAMES = YES ...@@ -515,6 +635,12 @@ HIDE_SCOPE_NAMES = YES
HIDE_COMPOUND_REFERENCE= NO HIDE_COMPOUND_REFERENCE= NO
# If the SHOW_HEADERFILE tag is set to YES then the documentation for a class
# will show which file needs to be included to use the class.
# The default value is: YES.
SHOW_HEADERFILE = YES
# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
# the files that are included by a file in the documentation of that file. # the files that are included by a file in the documentation of that file.
# The default value is: YES. # The default value is: YES.
...@@ -672,7 +798,8 @@ FILE_VERSION_FILTER = ...@@ -672,7 +798,8 @@ FILE_VERSION_FILTER =
# output files in an output format independent way. To create the layout file # output files in an output format independent way. To create the layout file
# that represents doxygen's defaults, run doxygen with the -l option. You can # that represents doxygen's defaults, run doxygen with the -l option. You can
# optionally specify a file name after the option, if omitted DoxygenLayout.xml # optionally specify a file name after the option, if omitted DoxygenLayout.xml
# will be used as the name of the layout file. # will be used as the name of the layout file. See also section "Changing the
# layout of pages" for information.
# #
# Note that if you run doxygen from a directory containing a file called # Note that if you run doxygen from a directory containing a file called
# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
...@@ -683,7 +810,7 @@ LAYOUT_FILE = ...@@ -683,7 +810,7 @@ LAYOUT_FILE =
# The CITE_BIB_FILES tag can be used to specify one or more bib files containing # The CITE_BIB_FILES tag can be used to specify one or more bib files containing
# the reference definitions. This must be a list of .bib files. The .bib # the reference definitions. This must be a list of .bib files. The .bib
# extension is automatically appended if omitted. This requires the bibtex tool # extension is automatically appended if omitted. This requires the bibtex tool
# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. # to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info.
# For LaTeX the style of the bibliography can be controlled using # For LaTeX the style of the bibliography can be controlled using
# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
# search path. See also \cite for info how to create references. # search path. See also \cite for info how to create references.
...@@ -718,34 +845,81 @@ WARNINGS = YES ...@@ -718,34 +845,81 @@ WARNINGS = YES
WARN_IF_UNDOCUMENTED = YES WARN_IF_UNDOCUMENTED = YES
# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
# potential errors in the documentation, such as not documenting some parameters # potential errors in the documentation, such as documenting some parameters in
# in a documented function, or documenting parameters that don't exist or using # a documented function twice, or documenting parameters that don't exist or
# markup commands wrongly. # using markup commands wrongly.
# The default value is: YES. # The default value is: YES.
WARN_IF_DOC_ERROR = YES WARN_IF_DOC_ERROR = YES
# If WARN_IF_INCOMPLETE_DOC is set to YES, doxygen will warn about incomplete
# function parameter documentation. If set to NO, doxygen will accept that some
# parameters have no documentation without warning.
# The default value is: YES.
WARN_IF_INCOMPLETE_DOC = YES
# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
# are documented, but have no documentation for their parameters or return # are documented, but have no documentation for their parameters or return
# value. If set to NO, doxygen will only warn about wrong or incomplete # value. If set to NO, doxygen will only warn about wrong parameter
# parameter documentation, but not about the absence of documentation. # documentation, but not about the absence of documentation. If EXTRACT_ALL is
# set to YES then this flag will automatically be disabled. See also
# WARN_IF_INCOMPLETE_DOC
# The default value is: NO. # The default value is: NO.
WARN_NO_PARAMDOC = NO WARN_NO_PARAMDOC = NO
# If WARN_IF_UNDOC_ENUM_VAL option is set to YES, doxygen will warn about
# undocumented enumeration values. If set to NO, doxygen will accept
# undocumented enumeration values. If EXTRACT_ALL is set to YES then this flag
# will automatically be disabled.
# The default value is: NO.
WARN_IF_UNDOC_ENUM_VAL = NO
# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
# a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS
# then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but
# at the end of the doxygen process doxygen will return with a non-zero status.
# If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS_PRINT then doxygen behaves
# like FAIL_ON_WARNINGS but in case no WARN_LOGFILE is defined doxygen will not
# write the warning messages in between other messages but write them at the end
# of a run, in case a WARN_LOGFILE is defined the warning messages will be
# besides being in the defined file also be shown at the end of a run, unless
# the WARN_LOGFILE is defined as - i.e. standard output (stdout) in that case
# the behavior will remain as with the setting FAIL_ON_WARNINGS.
# Possible values are: NO, YES, FAIL_ON_WARNINGS and FAIL_ON_WARNINGS_PRINT.
# The default value is: NO.
WARN_AS_ERROR = NO
# The WARN_FORMAT tag determines the format of the warning messages that doxygen # The WARN_FORMAT tag determines the format of the warning messages that doxygen
# can produce. The string should contain the $file, $line, and $text tags, which # can produce. The string should contain the $file, $line, and $text tags, which
# will be replaced by the file and line number from which the warning originated # will be replaced by the file and line number from which the warning originated
# and the warning text. Optionally the format may contain $version, which will # and the warning text. Optionally the format may contain $version, which will
# be replaced by the version of the file (if it could be obtained via # be replaced by the version of the file (if it could be obtained via
# FILE_VERSION_FILTER) # FILE_VERSION_FILTER)
# See also: WARN_LINE_FORMAT
# The default value is: $file:$line: $text. # The default value is: $file:$line: $text.
WARN_FORMAT = "$file:$line: $text" WARN_FORMAT = "$file:$line: $text"
# In the $text part of the WARN_FORMAT command it is possible that a reference
# to a more specific place is given. To make it easier to jump to this place
# (outside of doxygen) the user can define a custom "cut" / "paste" string.
# Example:
# WARN_LINE_FORMAT = "'vi $file +$line'"
# See also: WARN_FORMAT
# The default value is: at line $line of file $file.
WARN_LINE_FORMAT = "at line $line of file $file"
# The WARN_LOGFILE tag can be used to specify a file to which warning and error # The WARN_LOGFILE tag can be used to specify a file to which warning and error
# messages should be written. If left blank the output is written to standard # messages should be written. If left blank the output is written to standard
# error (stderr). # error (stderr). In case the file specified cannot be opened for writing the
# warning and error messages are written to standard error. When as file - is
# specified the warning and error messages are written to standard output
# (stdout).
WARN_LOGFILE = WARN_LOGFILE =
...@@ -756,45 +930,100 @@ WARN_LOGFILE = ...@@ -756,45 +930,100 @@ WARN_LOGFILE =
# The INPUT tag is used to specify the files and/or directories that contain # The INPUT tag is used to specify the files and/or directories that contain
# documented source files. You may enter file names like myfile.cpp or # documented source files. You may enter file names like myfile.cpp or
# directories like /usr/src/myproject. Separate the files or directories with # directories like /usr/src/myproject. Separate the files or directories with
# spaces. # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
# Note: If this tag is empty the current directory is searched. # Note: If this tag is empty the current directory is searched.
INPUT = @top_srcdir@ @top_srcdir@/src @top_srcdir@/tests @top_srcdir@/examples INPUT = @top_srcdir@ \
INPUT += @top_srcdir@/src/hydro/Minimal @top_srcdir@/src \
INPUT += @top_srcdir@/src/hydro/Gadget2 @top_srcdir@/tests \
INPUT += @top_srcdir@/src/gravity/Default @top_srcdir@/examples \
INPUT += @top_srcdir@/src/riemann @top_srcdir@/src/hydro/Minimal \
INPUT += @top_srcdir@/src/potential/point_mass @top_srcdir@/src/hydro/Gadget2 \
INPUT += @top_srcdir@/src/equation_of_state/ideal_gas @top_srcdir@/src/hydro/SPHENIX \
INPUT += @top_srcdir@/src/cooling/const_du @top_srcdir@/src/gravity/Default \
INPUT += @top_srcdir@/src/cooling/const_lambda @top_srcdir@/src/gravity/MultiSoftening \
INPUT += @top_srcdir@/src/cooling/Compton @top_srcdir@/src/riemann \
INPUT += @top_srcdir@/src/cooling/EAGLE @top_srcdir@/src/potential/point_mass \
INPUT += @top_srcdir@/src/chemistry/EAGLE @top_srcdir@/src/equation_of_state/ideal_gas \
INPUT += @top_srcdir@/src/entropy_floor/EAGLE @top_srcdir@/src/equation_of_state/isothermal \
INPUT += @top_srcdir@/src/star_formation/EAGLE @top_srcdir@/src/equation_of_state/barotropic \
INPUT += @top_srcdir@/src/tracers/EAGLE @top_srcdir@/src/cooling/const_du \
INPUT += @top_srcdir@/src/stars/EAGLE @top_srcdir@/src/cooling/const_lambda \
INPUT += @top_srcdir@/src/feedback/EAGLE @top_srcdir@/src/cooling/EAGLE \
INPUT += @top_srcdir@/src/black_holes/EAGLE @top_srcdir@/src/cooling/PS2020 \
@top_srcdir@/src/cooling/grackle \
@top_srcdir@/src/chemistry/AGORA \
@top_srcdir@/src/chemistry/EAGLE \
@top_srcdir@/src/chemistry/GEAR \
@top_srcdir@/src/chemistry/QLA \
@top_srcdir@/src/chemistry/none \
@top_srcdir@/src/entropy_floor/EAGLE \
@top_srcdir@/src/pressure_floor/GEAR \
@top_srcdir@/src/star_formation/EAGLE \
@top_srcdir@/src/star_formation/GEAR \
@top_srcdir@/src/star_formation/QLA \
@top_srcdir@/src/star_formation/none \
@top_srcdir@/src/tracers/EAGLE \
@top_srcdir@/src/stars/EAGLE \
@top_srcdir@/src/stars/GEAR \
@top_srcdir@/src/stars/Basic \
@top_srcdir@/src/stars/None \
@top_srcdir@/src/feedback/none \
@top_srcdir@/src/feedback/AGORA \
@top_srcdir@/src/feedback/EAGLE \
@top_srcdir@/src/feedback/EAGLE_thermal \
@top_srcdir@/src/feedback/EAGLE_kinetic \
@top_srcdir@/src/feedback/GEAR \
@top_srcdir@/src/black_holes/Default \
@top_srcdir@/src/black_holes/EAGLE \
@top_srcdir@/src/black_holes/SPIN_JET \
@top_srcdir@/src/sink/Basic \
@top_srcdir@/src/sink/Default \
@top_srcdir@/src/sink/GEAR \
@top_srcdir@/src/forcing \
@top_srcdir@/src/fvpm_geometry \
@top_srcdir@/src/rt \
@top_srcdir@/src/extra_io \
@top_srcdir@/src/neutrino \
@top_srcdir@/csds
# This tag can be used to specify the character encoding of the source files # This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
# libiconv (or the iconv built into libc) for the transcoding. See the libiconv # libiconv (or the iconv built into libc) for the transcoding. See the libiconv
# documentation (see: http://www.gnu.org/software/libiconv) for the list of # documentation (see:
# possible encodings. # https://www.gnu.org/software/libiconv/) for the list of possible encodings.
# See also: INPUT_FILE_ENCODING
# The default value is: UTF-8. # The default value is: UTF-8.
INPUT_ENCODING = UTF-8 INPUT_ENCODING = UTF-8
# This tag can be used to specify the character encoding of the source files
# that doxygen parses The INPUT_FILE_ENCODING tag can be used to specify
# character encoding on a per file pattern basis. Doxygen will compare the file
# name with each pattern and apply the encoding instead of the default
# INPUT_ENCODING) if there is a match. The character encodings are a list of the
# form: pattern=encoding (like *.php=ISO-8859-1). See cfg_input_encoding
# "INPUT_ENCODING" for further information on supported encodings.
INPUT_FILE_ENCODING =
# If the value of the INPUT tag contains directories, you can use the # If the value of the INPUT tag contains directories, you can use the
# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
# *.h) to filter out the source-files in the directories. If left blank the # *.h) to filter out the source-files in the directories.
# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii, #
# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, # Note that for custom extensions or not directly supported extensions you also
# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, # need to set EXTENSION_MAPPING for the extension otherwise the files are not
# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, # read by doxygen.
# *.qsf, *.as and *.js. #
# Note the list of default checked file patterns might differ from the list of
# default file extension mappings.
#
# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cxxm,
# *.cpp, *.cppm, *.c++, *.c++m, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl,
# *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, *.h++, *.ixx, *.l, *.cs, *.d, *.php,
# *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be
# provided as doxygen C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08,
# *.f18, *.f, *.for, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice.
FILE_PATTERNS = FILE_PATTERNS =
...@@ -833,10 +1062,7 @@ EXCLUDE_PATTERNS = *.md ...@@ -833,10 +1062,7 @@ EXCLUDE_PATTERNS = *.md
# (namespaces, classes, functions, etc.) that should be excluded from the # (namespaces, classes, functions, etc.) that should be excluded from the
# output. The symbol name can be a fully qualified name, a word, or if the # output. The symbol name can be a fully qualified name, a word, or if the
# wildcard * is used, a substring. Examples: ANamespace, AClass, # wildcard * is used, a substring. Examples: ANamespace, AClass,
# AClass::ANamespace, ANamespace::*Test # ANamespace::AClass, ANamespace::*Test
#
# Note that the wildcards are matched against the file with absolute path, so to
# exclude all test directories use the pattern */test/*
EXCLUDE_SYMBOLS = EXCLUDE_SYMBOLS =
...@@ -880,6 +1106,15 @@ IMAGE_PATH = ...@@ -880,6 +1106,15 @@ IMAGE_PATH =
# Note that the filter must not add or remove lines; it is applied before the # Note that the filter must not add or remove lines; it is applied before the
# code is scanned, but not when the output code is generated. If lines are added # code is scanned, but not when the output code is generated. If lines are added
# or removed, the anchors will not be placed correctly. # or removed, the anchors will not be placed correctly.
#
# Note that doxygen will use the data processed and written to standard output
# for further processing, therefore nothing else, like debug statements or used
# commands (so in case of a Windows batch file always use @echo OFF), should be
# written to standard output.
#
# Note that for custom extensions or not directly supported extensions you also
# need to set EXTENSION_MAPPING for the extension otherwise the files are not
# properly processed by doxygen.
INPUT_FILTER = INPUT_FILTER =
...@@ -889,6 +1124,10 @@ INPUT_FILTER = ...@@ -889,6 +1124,10 @@ INPUT_FILTER =
# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
# filters are used. If the FILTER_PATTERNS tag is empty or if none of the # filters are used. If the FILTER_PATTERNS tag is empty or if none of the
# patterns match the file name, INPUT_FILTER is applied. # patterns match the file name, INPUT_FILTER is applied.
#
# Note that for custom extensions or not directly supported extensions you also
# need to set EXTENSION_MAPPING for the extension otherwise the files are not
# properly processed by doxygen.
FILTER_PATTERNS = FILTER_PATTERNS =
...@@ -914,6 +1153,15 @@ FILTER_SOURCE_PATTERNS = ...@@ -914,6 +1153,15 @@ FILTER_SOURCE_PATTERNS =
USE_MDFILE_AS_MAINPAGE = USE_MDFILE_AS_MAINPAGE =
# The Fortran standard specifies that for fixed formatted Fortran code all
# characters from position 72 are to be considered as comment. A common
# extension is to allow longer lines before the automatic comment starts. The
# setting FORTRAN_COMMENT_AFTER will also make it possible that longer lines can
# be processed before the automatic comment starts.
# Minimum value: 7, maximum value: 10000, default value: 72.
FORTRAN_COMMENT_AFTER = 72
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to source browsing # Configuration options related to source browsing
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
...@@ -941,7 +1189,7 @@ INLINE_SOURCES = NO ...@@ -941,7 +1189,7 @@ INLINE_SOURCES = NO
STRIP_CODE_COMMENTS = YES STRIP_CODE_COMMENTS = YES
# If the REFERENCED_BY_RELATION tag is set to YES then for each documented # If the REFERENCED_BY_RELATION tag is set to YES then for each documented
# function all documented functions referencing it will be listed. # entity all documented functions referencing it will be listed.
# The default value is: NO. # The default value is: NO.
REFERENCED_BY_RELATION = NO REFERENCED_BY_RELATION = NO
...@@ -973,12 +1221,12 @@ SOURCE_TOOLTIPS = YES ...@@ -973,12 +1221,12 @@ SOURCE_TOOLTIPS = YES
# If the USE_HTAGS tag is set to YES then the references to source code will # If the USE_HTAGS tag is set to YES then the references to source code will
# point to the HTML generated by the htags(1) tool instead of doxygen built-in # point to the HTML generated by the htags(1) tool instead of doxygen built-in
# source browser. The htags tool is part of GNU's global source tagging system # source browser. The htags tool is part of GNU's global source tagging system
# (see http://www.gnu.org/software/global/global.html). You will need version # (see https://www.gnu.org/software/global/global.html). You will need version
# 4.8.6 or higher. # 4.8.6 or higher.
# #
# To use it do the following: # To use it do the following:
# - Install the latest version of global # - Install the latest version of global
# - Enable SOURCE_BROWSER and USE_HTAGS in the config file # - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file
# - Make sure the INPUT points to the root of the source tree # - Make sure the INPUT points to the root of the source tree
# - Run doxygen as normal # - Run doxygen as normal
# #
...@@ -1000,6 +1248,46 @@ USE_HTAGS = NO ...@@ -1000,6 +1248,46 @@ USE_HTAGS = NO
VERBATIM_HEADERS = YES VERBATIM_HEADERS = YES
# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
# clang parser (see:
# http://clang.llvm.org/) for more accurate parsing at the cost of reduced
# performance. This can be particularly helpful with template rich C++ code for
# which doxygen's built-in parser lacks the necessary type information.
# Note: The availability of this option depends on whether or not doxygen was
# generated with the -Duse_libclang=ON option for CMake.
# The default value is: NO.
CLANG_ASSISTED_PARSING = NO
# If the CLANG_ASSISTED_PARSING tag is set to YES and the CLANG_ADD_INC_PATHS
# tag is set to YES then doxygen will add the directory of each input to the
# include path.
# The default value is: YES.
# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
CLANG_ADD_INC_PATHS = YES
# If clang assisted parsing is enabled you can provide the compiler with command
# line options that you would normally use when invoking the compiler. Note that
# the include paths will already be set by doxygen for the files and directories
# specified with INPUT and INCLUDE_PATH.
# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
CLANG_OPTIONS =
# If clang assisted parsing is enabled you can provide the clang parser with the
# path to the directory containing a file called compile_commands.json. This
# file is the compilation database (see:
# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) containing the
# options used when the source files were built. This is equivalent to
# specifying the -p option to a clang tool, such as clang-check. These options
# will then be passed to the parser. Any options specified with CLANG_OPTIONS
# will be added as well.
# Note: The availability of this option depends on whether or not doxygen was
# generated with the -Duse_libclang=ON option for CMake.
CLANG_DATABASE_PATH =
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to the alphabetical class index # Configuration options related to the alphabetical class index
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
...@@ -1011,17 +1299,11 @@ VERBATIM_HEADERS = YES ...@@ -1011,17 +1299,11 @@ VERBATIM_HEADERS = YES
ALPHABETICAL_INDEX = YES ALPHABETICAL_INDEX = YES
# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in # The IGNORE_PREFIX tag can be used to specify a prefix (or a list of prefixes)
# which the alphabetical index list will be split. # that should be ignored while generating the index headers. The IGNORE_PREFIX
# Minimum value: 1, maximum value: 20, default value: 5. # tag works for classes, function and member names. The entity will be placed in
# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. # the alphabetical list under the first letter of the entity name that remains
# after removing the prefix.
COLS_IN_ALPHA_INDEX = 5
# In case all classes in a project start with a common prefix, all classes will
# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
# can be used to specify a prefix (or a list of prefixes) that should be ignored
# while generating the index headers.
# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
IGNORE_PREFIX = IGNORE_PREFIX =
...@@ -1100,7 +1382,12 @@ HTML_STYLESHEET = ...@@ -1100,7 +1382,12 @@ HTML_STYLESHEET =
# Doxygen will copy the style sheet files to the output directory. # Doxygen will copy the style sheet files to the output directory.
# Note: The order of the extra style sheet files is of importance (e.g. the last # Note: The order of the extra style sheet files is of importance (e.g. the last
# style sheet in the list overrules the setting of the previous ones in the # style sheet in the list overrules the setting of the previous ones in the
# list). For an example see the documentation. # list).
# Note: Since the styling of scrollbars can currently not be overruled in
# Webkit/Chromium, the styling will be left out of the default doxygen.css if
# one or more extra stylesheets have been specified. So if scrollbar
# customization is desired it has to be added explicitly. For an example see the
# documentation.
# This tag requires that the tag GENERATE_HTML is set to YES. # This tag requires that the tag GENERATE_HTML is set to YES.
HTML_EXTRA_STYLESHEET = HTML_EXTRA_STYLESHEET =
...@@ -1115,10 +1402,23 @@ HTML_EXTRA_STYLESHEET = ...@@ -1115,10 +1402,23 @@ HTML_EXTRA_STYLESHEET =
HTML_EXTRA_FILES = HTML_EXTRA_FILES =
# The HTML_COLORSTYLE tag can be used to specify if the generated HTML output
# should be rendered with a dark or light theme.
# Possible values are: LIGHT always generate light mode output, DARK always
# generate dark mode output, AUTO_LIGHT automatically set the mode according to
# the user preference, use light mode if no preference is set (the default),
# AUTO_DARK automatically set the mode according to the user preference, use
# dark mode if no preference is set and TOGGLE allow to user to switch between
# light and dark mode via a button.
# The default value is: AUTO_LIGHT.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_COLORSTYLE = AUTO_LIGHT
# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
# will adjust the colors in the style sheet and background images according to # will adjust the colors in the style sheet and background images according to
# this color. Hue is specified as an angle on a colorwheel, see # this color. Hue is specified as an angle on a color-wheel, see
# http://en.wikipedia.org/wiki/Hue for more information. For instance the value # https://en.wikipedia.org/wiki/Hue for more information. For instance the value
# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
# purple, and 360 is red again. # purple, and 360 is red again.
# Minimum value: 0, maximum value: 359, default value: 220. # Minimum value: 0, maximum value: 359, default value: 220.
...@@ -1127,7 +1427,7 @@ HTML_EXTRA_FILES = ...@@ -1127,7 +1427,7 @@ HTML_EXTRA_FILES =
HTML_COLORSTYLE_HUE = 220 HTML_COLORSTYLE_HUE = 220
# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
# in the HTML output. For a value of 0 the output will use grayscales only. A # in the HTML output. For a value of 0 the output will use gray-scales only. A
# value of 255 will produce the most vivid colors. # value of 255 will produce the most vivid colors.
# Minimum value: 0, maximum value: 255, default value: 100. # Minimum value: 0, maximum value: 255, default value: 100.
# This tag requires that the tag GENERATE_HTML is set to YES. # This tag requires that the tag GENERATE_HTML is set to YES.
...@@ -1145,13 +1445,16 @@ HTML_COLORSTYLE_SAT = 100 ...@@ -1145,13 +1445,16 @@ HTML_COLORSTYLE_SAT = 100
HTML_COLORSTYLE_GAMMA = 80 HTML_COLORSTYLE_GAMMA = 80
# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML
# page will contain the date and time when the page was generated. Setting this # documentation will contain a main index with vertical navigation menus that
# to NO can help when comparing the output of multiple runs. # are dynamically created via JavaScript. If disabled, the navigation index will
# consists of multiple levels of tabs that are statically embedded in every HTML
# page. Disable this option to support browsers that do not have JavaScript,
# like the Qt help browser.
# The default value is: YES. # The default value is: YES.
# This tag requires that the tag GENERATE_HTML is set to YES. # This tag requires that the tag GENERATE_HTML is set to YES.
HTML_TIMESTAMP = YES HTML_DYNAMIC_MENUS = YES
# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
# documentation will contain sections that can be hidden and shown after the # documentation will contain sections that can be hidden and shown after the
...@@ -1161,6 +1464,13 @@ HTML_TIMESTAMP = YES ...@@ -1161,6 +1464,13 @@ HTML_TIMESTAMP = YES
HTML_DYNAMIC_SECTIONS = NO HTML_DYNAMIC_SECTIONS = NO
# If the HTML_CODE_FOLDING tag is set to YES then classes and functions can be
# dynamically folded and expanded in the generated HTML source code.
# The default value is: YES.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_CODE_FOLDING = YES
# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
# shown in the various tree structured indices initially; the user can expand # shown in the various tree structured indices initially; the user can expand
# and collapse entries dynamically later on. Doxygen will expand the tree to # and collapse entries dynamically later on. Doxygen will expand the tree to
...@@ -1176,13 +1486,14 @@ HTML_INDEX_NUM_ENTRIES = 100 ...@@ -1176,13 +1486,14 @@ HTML_INDEX_NUM_ENTRIES = 100
# If the GENERATE_DOCSET tag is set to YES, additional index files will be # If the GENERATE_DOCSET tag is set to YES, additional index files will be
# generated that can be used as input for Apple's Xcode 3 integrated development # generated that can be used as input for Apple's Xcode 3 integrated development
# environment (see: http://developer.apple.com/tools/xcode/), introduced with # environment (see:
# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a # https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To
# Makefile in the HTML output directory. Running make will produce the docset in # create a documentation set, doxygen will generate a Makefile in the HTML
# that directory and running make install will install the docset in # output directory. Running make will produce the docset in that directory and
# running make install will install the docset in
# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html # startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy
# for more information. # genXcode/_index.html for more information.
# The default value is: NO. # The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES. # This tag requires that the tag GENERATE_HTML is set to YES.
...@@ -1196,6 +1507,13 @@ GENERATE_DOCSET = NO ...@@ -1196,6 +1507,13 @@ GENERATE_DOCSET = NO
DOCSET_FEEDNAME = "Doxygen generated docs" DOCSET_FEEDNAME = "Doxygen generated docs"
# This tag determines the URL of the docset feed. A documentation feed provides
# an umbrella under which multiple documentation sets from a single provider
# (such as a company or product suite) can be grouped.
# This tag requires that the tag GENERATE_DOCSET is set to YES.
DOCSET_FEEDURL =
# This tag specifies a string that should uniquely identify the documentation # This tag specifies a string that should uniquely identify the documentation
# set bundle. This should be a reverse domain-name style string, e.g. # set bundle. This should be a reverse domain-name style string, e.g.
# com.mycompany.MyDocSet. Doxygen will append .docset to the name. # com.mycompany.MyDocSet. Doxygen will append .docset to the name.
...@@ -1221,8 +1539,12 @@ DOCSET_PUBLISHER_NAME = Publisher ...@@ -1221,8 +1539,12 @@ DOCSET_PUBLISHER_NAME = Publisher
# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
# additional HTML index files: index.hhp, index.hhc, and index.hhk. The # additional HTML index files: index.hhp, index.hhc, and index.hhk. The
# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on # on Windows. In the beginning of 2021 Microsoft took the original page, with
# Windows. # a.o. the download links, offline the HTML help workshop was already many years
# in maintenance mode). You can download the HTML help workshop from the web
# archives at Installation executable (see:
# http://web.archive.org/web/20160201063255/http://download.microsoft.com/downlo
# ad/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe).
# #
# The HTML Help Workshop contains a compiler that can convert all HTML output # The HTML Help Workshop contains a compiler that can convert all HTML output
# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
...@@ -1252,7 +1574,7 @@ CHM_FILE = ...@@ -1252,7 +1574,7 @@ CHM_FILE =
HHC_LOCATION = HHC_LOCATION =
# The GENERATE_CHI flag controls if a separate .chi index file is generated # The GENERATE_CHI flag controls if a separate .chi index file is generated
# (YES) or that it should be included in the master .chm file (NO). # (YES) or that it should be included in the main .chm file (NO).
# The default value is: NO. # The default value is: NO.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES. # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
...@@ -1279,6 +1601,16 @@ BINARY_TOC = NO ...@@ -1279,6 +1601,16 @@ BINARY_TOC = NO
TOC_EXPAND = NO TOC_EXPAND = NO
# The SITEMAP_URL tag is used to specify the full URL of the place where the
# generated documentation will be placed on the server by the user during the
# deployment of the documentation. The generated sitemap is called sitemap.xml
# and placed on the directory specified by HTML_OUTPUT. In case no SITEMAP_URL
# is specified no sitemap is generated. For information about the sitemap
# protocol see https://www.sitemaps.org
# This tag requires that the tag GENERATE_HTML is set to YES.
SITEMAP_URL =
# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
...@@ -1297,7 +1629,8 @@ QCH_FILE = ...@@ -1297,7 +1629,8 @@ QCH_FILE =
# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
# Project output. For more information please see Qt Help Project / Namespace # Project output. For more information please see Qt Help Project / Namespace
# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). # (see:
# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace).
# The default value is: org.doxygen.Project. # The default value is: org.doxygen.Project.
# This tag requires that the tag GENERATE_QHP is set to YES. # This tag requires that the tag GENERATE_QHP is set to YES.
...@@ -1305,8 +1638,8 @@ QHP_NAMESPACE = org.doxygen.Project ...@@ -1305,8 +1638,8 @@ QHP_NAMESPACE = org.doxygen.Project
# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
# Help Project output. For more information please see Qt Help Project / Virtual # Help Project output. For more information please see Qt Help Project / Virtual
# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- # Folders (see:
# folders). # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders).
# The default value is: doc. # The default value is: doc.
# This tag requires that the tag GENERATE_QHP is set to YES. # This tag requires that the tag GENERATE_QHP is set to YES.
...@@ -1314,30 +1647,30 @@ QHP_VIRTUAL_FOLDER = doc ...@@ -1314,30 +1647,30 @@ QHP_VIRTUAL_FOLDER = doc
# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
# filter to add. For more information please see Qt Help Project / Custom # filter to add. For more information please see Qt Help Project / Custom
# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- # Filters (see:
# filters). # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters).
# This tag requires that the tag GENERATE_QHP is set to YES. # This tag requires that the tag GENERATE_QHP is set to YES.
QHP_CUST_FILTER_NAME = QHP_CUST_FILTER_NAME =
# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
# custom filter to add. For more information please see Qt Help Project / Custom # custom filter to add. For more information please see Qt Help Project / Custom
# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- # Filters (see:
# filters). # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters).
# This tag requires that the tag GENERATE_QHP is set to YES. # This tag requires that the tag GENERATE_QHP is set to YES.
QHP_CUST_FILTER_ATTRS = QHP_CUST_FILTER_ATTRS =
# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
# project's filter section matches. Qt Help Project / Filter Attributes (see: # project's filter section matches. Qt Help Project / Filter Attributes (see:
# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). # https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes).
# This tag requires that the tag GENERATE_QHP is set to YES. # This tag requires that the tag GENERATE_QHP is set to YES.
QHP_SECT_FILTER_ATTRS = QHP_SECT_FILTER_ATTRS =
# The QHG_LOCATION tag can be used to specify the location of Qt's # The QHG_LOCATION tag can be used to specify the location (absolute path
# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the # including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to
# generated .qhp file. # run qhelpgenerator on the generated .qhp file.
# This tag requires that the tag GENERATE_QHP is set to YES. # This tag requires that the tag GENERATE_QHP is set to YES.
QHG_LOCATION = QHG_LOCATION =
...@@ -1380,16 +1713,28 @@ DISABLE_INDEX = NO ...@@ -1380,16 +1713,28 @@ DISABLE_INDEX = NO
# to work a browser that supports JavaScript, DHTML, CSS and frames is required # to work a browser that supports JavaScript, DHTML, CSS and frames is required
# (i.e. any modern browser). Windows users are probably better off using the # (i.e. any modern browser). Windows users are probably better off using the
# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can # HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
# further fine-tune the look of the index. As an example, the default style # further fine tune the look of the index (see "Fine-tuning the output"). As an
# sheet generated by doxygen has an example that shows how to put an image at # example, the default style sheet generated by doxygen has an example that
# the root of the tree instead of the PROJECT_NAME. Since the tree basically has # shows how to put an image at the root of the tree instead of the PROJECT_NAME.
# the same information as the tab index, you could consider setting # Since the tree basically has the same information as the tab index, you could
# DISABLE_INDEX to YES when enabling this option. # consider setting DISABLE_INDEX to YES when enabling this option.
# The default value is: NO. # The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES. # This tag requires that the tag GENERATE_HTML is set to YES.
GENERATE_TREEVIEW = NO GENERATE_TREEVIEW = NO
# When both GENERATE_TREEVIEW and DISABLE_INDEX are set to YES, then the
# FULL_SIDEBAR option determines if the side bar is limited to only the treeview
# area (value NO) or if it should extend to the full height of the window (value
# YES). Setting this to YES gives a layout similar to
# https://docs.readthedocs.io with more room for contents, but less room for the
# project logo, title, and description. If either GENERATE_TREEVIEW or
# DISABLE_INDEX is set to NO, this option has no effect.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
FULL_SIDEBAR = NO
# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
# doxygen will group on one line in the generated HTML documentation. # doxygen will group on one line in the generated HTML documentation.
# #
...@@ -1414,6 +1759,24 @@ TREEVIEW_WIDTH = 250 ...@@ -1414,6 +1759,24 @@ TREEVIEW_WIDTH = 250
EXT_LINKS_IN_WINDOW = NO EXT_LINKS_IN_WINDOW = NO
# If the OBFUSCATE_EMAILS tag is set to YES, doxygen will obfuscate email
# addresses.
# The default value is: YES.
# This tag requires that the tag GENERATE_HTML is set to YES.
OBFUSCATE_EMAILS = YES
# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg
# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see
# https://inkscape.org) to generate formulas as SVG images instead of PNGs for
# the HTML output. These images will generally look nicer at scaled resolutions.
# Possible values are: png (the default) and svg (looks nicer but requires the
# pdf2svg or inkscape tool).
# The default value is: png.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_FORMULA_FORMAT = png
# Use this tag to change the font size of LaTeX formulas included as images in # Use this tag to change the font size of LaTeX formulas included as images in
# the HTML documentation. When you change the font size after a successful # the HTML documentation. When you change the font size after a successful
# doxygen run you need to manually remove any form_*.png images from the HTML # doxygen run you need to manually remove any form_*.png images from the HTML
...@@ -1423,19 +1786,14 @@ EXT_LINKS_IN_WINDOW = NO ...@@ -1423,19 +1786,14 @@ EXT_LINKS_IN_WINDOW = NO
FORMULA_FONTSIZE = 10 FORMULA_FONTSIZE = 10
# Use the FORMULA_TRANPARENT tag to determine whether or not the images # The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands
# generated for formulas are transparent PNGs. Transparent PNGs are not # to create new LaTeX commands to be used in formulas as building blocks. See
# supported properly for IE 6.0, but are supported on all modern browsers. # the section "Including formulas" for details.
#
# Note that when changing this option you need to delete any form_*.png files in
# the HTML output directory before the changes have effect.
# The default value is: YES.
# This tag requires that the tag GENERATE_HTML is set to YES.
FORMULA_TRANSPARENT = YES FORMULA_MACROFILE =
# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
# http://www.mathjax.org) which uses client side Javascript for the rendering # https://www.mathjax.org) which uses client side JavaScript for the rendering
# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX # instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
# installed or if you want to formulas look prettier in the HTML output. When # installed or if you want to formulas look prettier in the HTML output. When
# enabled you may also need to install MathJax separately and configure the path # enabled you may also need to install MathJax separately and configure the path
...@@ -1445,11 +1803,29 @@ FORMULA_TRANSPARENT = YES ...@@ -1445,11 +1803,29 @@ FORMULA_TRANSPARENT = YES
USE_MATHJAX = YES USE_MATHJAX = YES
# With MATHJAX_VERSION it is possible to specify the MathJax version to be used.
# Note that the different versions of MathJax have different requirements with
# regards to the different settings, so it is possible that also other MathJax
# settings have to be changed when switching between the different MathJax
# versions.
# Possible values are: MathJax_2 and MathJax_3.
# The default value is: MathJax_2.
# This tag requires that the tag USE_MATHJAX is set to YES.
MATHJAX_VERSION = MathJax_2
# When MathJax is enabled you can set the default output format to be used for # When MathJax is enabled you can set the default output format to be used for
# the MathJax output. See the MathJax site (see: # the MathJax output. For more details about the output format see MathJax
# http://docs.mathjax.org/en/latest/output.html) for more details. # version 2 (see:
# http://docs.mathjax.org/en/v2.7-latest/output.html) and MathJax version 3
# (see:
# http://docs.mathjax.org/en/latest/web/components/output.html).
# Possible values are: HTML-CSS (which is slower, but has the best # Possible values are: HTML-CSS (which is slower, but has the best
# compatibility), NativeMML (i.e. MathML) and SVG. # compatibility. This is the name for Mathjax version 2, for MathJax version 3
# this will be translated into chtml), NativeMML (i.e. MathML. Only supported
# for NathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This
# is the name for Mathjax version 3, for MathJax version 2 this will be
# translated into HTML-CSS) and SVG.
# The default value is: HTML-CSS. # The default value is: HTML-CSS.
# This tag requires that the tag USE_MATHJAX is set to YES. # This tag requires that the tag USE_MATHJAX is set to YES.
...@@ -1462,22 +1838,29 @@ MATHJAX_FORMAT = HTML-CSS ...@@ -1462,22 +1838,29 @@ MATHJAX_FORMAT = HTML-CSS
# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
# Content Delivery Network so you can quickly see the result without installing # Content Delivery Network so you can quickly see the result without installing
# MathJax. However, it is strongly recommended to install a local copy of # MathJax. However, it is strongly recommended to install a local copy of
# MathJax from http://www.mathjax.org before deployment. # MathJax from https://www.mathjax.org before deployment. The default value is:
# The default value is: http://cdn.mathjax.org/mathjax/latest. # - in case of MathJax version 2: https://cdn.jsdelivr.net/npm/mathjax@2
# - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3
# This tag requires that the tag USE_MATHJAX is set to YES. # This tag requires that the tag USE_MATHJAX is set to YES.
MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
# extension names that should be enabled during MathJax rendering. For example # extension names that should be enabled during MathJax rendering. For example
# for MathJax version 2 (see
# https://docs.mathjax.org/en/v2.7-latest/tex.html#tex-and-latex-extensions):
# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
# For example for MathJax version 3 (see
# http://docs.mathjax.org/en/latest/input/tex/extensions/index.html):
# MATHJAX_EXTENSIONS = ams
# This tag requires that the tag USE_MATHJAX is set to YES. # This tag requires that the tag USE_MATHJAX is set to YES.
MATHJAX_EXTENSIONS = MATHJAX_EXTENSIONS =
# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
# of code that will be used on startup of the MathJax code. See the MathJax site # of code that will be used on startup of the MathJax code. See the MathJax site
# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an # (see:
# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an
# example see the documentation. # example see the documentation.
# This tag requires that the tag USE_MATHJAX is set to YES. # This tag requires that the tag USE_MATHJAX is set to YES.
...@@ -1505,7 +1888,7 @@ MATHJAX_CODEFILE = ...@@ -1505,7 +1888,7 @@ MATHJAX_CODEFILE =
SEARCHENGINE = YES SEARCHENGINE = YES
# When the SERVER_BASED_SEARCH tag is enabled the search engine will be # When the SERVER_BASED_SEARCH tag is enabled the search engine will be
# implemented using a web server instead of a web client using Javascript. There # implemented using a web server instead of a web client using JavaScript. There
# are two flavors of web server based searching depending on the EXTERNAL_SEARCH # are two flavors of web server based searching depending on the EXTERNAL_SEARCH
# setting. When disabled, doxygen will generate a PHP script for searching and # setting. When disabled, doxygen will generate a PHP script for searching and
# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing # an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
...@@ -1524,7 +1907,8 @@ SERVER_BASED_SEARCH = NO ...@@ -1524,7 +1907,8 @@ SERVER_BASED_SEARCH = NO
# #
# Doxygen ships with an example indexer (doxyindexer) and search engine # Doxygen ships with an example indexer (doxyindexer) and search engine
# (doxysearch.cgi) which are based on the open source search engine library # (doxysearch.cgi) which are based on the open source search engine library
# Xapian (see: http://xapian.org/). # Xapian (see:
# https://xapian.org/).
# #
# See the section "External Indexing and Searching" for details. # See the section "External Indexing and Searching" for details.
# The default value is: NO. # The default value is: NO.
...@@ -1537,8 +1921,9 @@ EXTERNAL_SEARCH = NO ...@@ -1537,8 +1921,9 @@ EXTERNAL_SEARCH = NO
# #
# Doxygen ships with an example indexer (doxyindexer) and search engine # Doxygen ships with an example indexer (doxyindexer) and search engine
# (doxysearch.cgi) which are based on the open source search engine library # (doxysearch.cgi) which are based on the open source search engine library
# Xapian (see: http://xapian.org/). See the section "External Indexing and # Xapian (see:
# Searching" for details. # https://xapian.org/). See the section "External Indexing and Searching" for
# details.
# This tag requires that the tag SEARCHENGINE is set to YES. # This tag requires that the tag SEARCHENGINE is set to YES.
SEARCHENGINE_URL = SEARCHENGINE_URL =
...@@ -1589,21 +1974,35 @@ LATEX_OUTPUT = latex ...@@ -1589,21 +1974,35 @@ LATEX_OUTPUT = latex
# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
# invoked. # invoked.
# #
# Note that when enabling USE_PDFLATEX this option is only used for generating # Note that when not enabling USE_PDFLATEX the default is latex when enabling
# bitmaps for formulas in the HTML output, but not in the Makefile that is # USE_PDFLATEX the default is pdflatex and when in the later case latex is
# written to the output directory. # chosen this is overwritten by pdflatex. For specific output languages the
# The default file is: latex. # default can have been set differently, this depends on the implementation of
# the output language.
# This tag requires that the tag GENERATE_LATEX is set to YES. # This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_CMD_NAME = latex LATEX_CMD_NAME = latex
# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
# index for LaTeX. # index for LaTeX.
# Note: This tag is used in the Makefile / make.bat.
# See also: LATEX_MAKEINDEX_CMD for the part in the generated output file
# (.tex).
# The default file is: makeindex. # The default file is: makeindex.
# This tag requires that the tag GENERATE_LATEX is set to YES. # This tag requires that the tag GENERATE_LATEX is set to YES.
MAKEINDEX_CMD_NAME = makeindex MAKEINDEX_CMD_NAME = makeindex
# The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to
# generate index for LaTeX. In case there is no backslash (\) as first character
# it will be automatically added in the LaTeX code.
# Note: This tag is used in the generated output file (.tex).
# See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat.
# The default value is: makeindex.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_MAKEINDEX_CMD = makeindex
# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX # If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
# documents. This may be useful for small projects and may help to save some # documents. This may be useful for small projects and may help to save some
# trees in general. # trees in general.
...@@ -1619,40 +2018,45 @@ COMPACT_LATEX = NO ...@@ -1619,40 +2018,45 @@ COMPACT_LATEX = NO
# The default value is: a4. # The default value is: a4.
# This tag requires that the tag GENERATE_LATEX is set to YES. # This tag requires that the tag GENERATE_LATEX is set to YES.
PAPER_TYPE = a4wide PAPER_TYPE = a4
# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names # The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
# that should be included in the LaTeX output. To get the times font for # that should be included in the LaTeX output. The package can be specified just
# instance you can specify # by its name or with the correct syntax as to be used with the LaTeX
# EXTRA_PACKAGES=times # \usepackage command. To get the times font for instance you can specify :
# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
# To use the option intlimits with the amsmath package you can specify:
# EXTRA_PACKAGES=[intlimits]{amsmath}
# If left blank no extra packages will be included. # If left blank no extra packages will be included.
# This tag requires that the tag GENERATE_LATEX is set to YES. # This tag requires that the tag GENERATE_LATEX is set to YES.
EXTRA_PACKAGES = EXTRA_PACKAGES =
# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the # The LATEX_HEADER tag can be used to specify a user-defined LaTeX header for
# generated LaTeX document. The header should contain everything until the first # the generated LaTeX document. The header should contain everything until the
# chapter. If it is left blank doxygen will generate a standard header. See # first chapter. If it is left blank doxygen will generate a standard header. It
# section "Doxygen usage" for information on how to let doxygen write the # is highly recommended to start with a default header using
# default header to a separate file. # doxygen -w latex new_header.tex new_footer.tex new_stylesheet.sty
# and then modify the file new_header.tex. See also section "Doxygen usage" for
# information on how to generate the default header that doxygen normally uses.
# #
# Note: Only use a user-defined header if you know what you are doing! The # Note: Only use a user-defined header if you know what you are doing!
# following commands have a special meaning inside the header: $title, # Note: The header is subject to change so you typically have to regenerate the
# $datetime, $date, $doxygenversion, $projectname, $projectnumber, # default header when upgrading to a newer version of doxygen. The following
# $projectbrief, $projectlogo. Doxygen will replace $title with the empty # commands have a special meaning inside the header (and footer): For a
# string, for the replacement values of the other commands the user is referred # description of the possible markers and block names see the documentation.
# to HTML_HEADER.
# This tag requires that the tag GENERATE_LATEX is set to YES. # This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_HEADER = LATEX_HEADER =
# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the # The LATEX_FOOTER tag can be used to specify a user-defined LaTeX footer for
# generated LaTeX document. The footer should contain everything after the last # the generated LaTeX document. The footer should contain everything after the
# chapter. If it is left blank doxygen will generate a standard footer. See # last chapter. If it is left blank doxygen will generate a standard footer. See
# LATEX_HEADER for more information on how to generate a default footer and what # LATEX_HEADER for more information on how to generate a default footer and what
# special commands can be used inside the footer. # special commands can be used inside the footer. See also section "Doxygen
# # usage" for information on how to generate the default footer that doxygen
# Note: Only use a user-defined footer if you know what you are doing! # normally uses. Note: Only use a user-defined footer if you know what you are
# doing!
# This tag requires that the tag GENERATE_LATEX is set to YES. # This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_FOOTER = LATEX_FOOTER =
...@@ -1685,18 +2089,26 @@ LATEX_EXTRA_FILES = ...@@ -1685,18 +2089,26 @@ LATEX_EXTRA_FILES =
PDF_HYPERLINKS = YES PDF_HYPERLINKS = YES
# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate # If the USE_PDFLATEX tag is set to YES, doxygen will use the engine as
# the PDF file directly from the LaTeX files. Set this option to YES, to get a # specified with LATEX_CMD_NAME to generate the PDF file directly from the LaTeX
# higher quality PDF documentation. # files. Set this option to YES, to get a higher quality PDF documentation.
#
# See also section LATEX_CMD_NAME for selecting the engine.
# The default value is: YES. # The default value is: YES.
# This tag requires that the tag GENERATE_LATEX is set to YES. # This tag requires that the tag GENERATE_LATEX is set to YES.
USE_PDFLATEX = YES USE_PDFLATEX = YES
# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode # The LATEX_BATCHMODE tag signals the behavior of LaTeX in case of an error.
# command to the generated LaTeX files. This will instruct LaTeX to keep running # Possible values are: NO same as ERROR_STOP, YES same as BATCH, BATCH In batch
# if errors occur, instead of asking the user for help. This option is also used # mode nothing is printed on the terminal, errors are scrolled as if <return> is
# when generating formulas in HTML. # hit at every error; missing files that TeX tries to input or request from
# keyboard input (\read on a not open input stream) cause the job to abort,
# NON_STOP In nonstop mode the diagnostic message will appear on the terminal,
# but there is no possibility of user interaction just like in batch mode,
# SCROLL In scroll mode, TeX will stop only for missing files to input or if
# keyboard input is necessary and ERROR_STOP In errorstop mode, TeX will stop at
# each error, asking for user intervention.
# The default value is: NO. # The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES. # This tag requires that the tag GENERATE_LATEX is set to YES.
...@@ -1709,24 +2121,22 @@ LATEX_BATCHMODE = NO ...@@ -1709,24 +2121,22 @@ LATEX_BATCHMODE = NO
LATEX_HIDE_INDICES = NO LATEX_HIDE_INDICES = NO
# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
# code with syntax highlighting in the LaTeX output.
#
# Note that which sources are shown also depends on other settings such as
# SOURCE_BROWSER.
# The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_SOURCE_CODE = NO
# The LATEX_BIB_STYLE tag can be used to specify the style to use for the # The LATEX_BIB_STYLE tag can be used to specify the style to use for the
# bibliography, e.g. plainnat, or ieeetr. See # bibliography, e.g. plainnat, or ieeetr. See
# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. # https://en.wikipedia.org/wiki/BibTeX and \cite for more info.
# The default value is: plain. # The default value is: plain.
# This tag requires that the tag GENERATE_LATEX is set to YES. # This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_BIB_STYLE = plain LATEX_BIB_STYLE = plain
# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute)
# path from which the emoji images will be read. If a relative path is entered,
# it will be relative to the LATEX_OUTPUT directory. If left blank the
# LATEX_OUTPUT directory will be used.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_EMOJI_DIRECTORY =
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to the RTF output # Configuration options related to the RTF output
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
...@@ -1766,9 +2176,9 @@ COMPACT_RTF = NO ...@@ -1766,9 +2176,9 @@ COMPACT_RTF = NO
RTF_HYPERLINKS = NO RTF_HYPERLINKS = NO
# Load stylesheet definitions from file. Syntax is similar to doxygen's config # Load stylesheet definitions from file. Syntax is similar to doxygen's
# file, i.e. a series of assignments. You only have to provide replacements, # configuration file, i.e. a series of assignments. You only have to provide
# missing definitions are set to their default value. # replacements, missing definitions are set to their default value.
# #
# See also section "Doxygen usage" for information on how to generate the # See also section "Doxygen usage" for information on how to generate the
# default style sheet that doxygen normally uses. # default style sheet that doxygen normally uses.
...@@ -1777,22 +2187,12 @@ RTF_HYPERLINKS = NO ...@@ -1777,22 +2187,12 @@ RTF_HYPERLINKS = NO
RTF_STYLESHEET_FILE = RTF_STYLESHEET_FILE =
# Set optional variables used in the generation of an RTF document. Syntax is # Set optional variables used in the generation of an RTF document. Syntax is
# similar to doxygen's config file. A template extensions file can be generated # similar to doxygen's configuration file. A template extensions file can be
# using doxygen -e rtf extensionFile. # generated using doxygen -e rtf extensionFile.
# This tag requires that the tag GENERATE_RTF is set to YES. # This tag requires that the tag GENERATE_RTF is set to YES.
RTF_EXTENSIONS_FILE = RTF_EXTENSIONS_FILE =
# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
# with syntax highlighting in the RTF output.
#
# Note that which sources are shown also depends on other settings such as
# SOURCE_BROWSER.
# The default value is: NO.
# This tag requires that the tag GENERATE_RTF is set to YES.
RTF_SOURCE_CODE = NO
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to the man page output # Configuration options related to the man page output
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
...@@ -1864,6 +2264,13 @@ XML_OUTPUT = xml ...@@ -1864,6 +2264,13 @@ XML_OUTPUT = xml
XML_PROGRAMLISTING = YES XML_PROGRAMLISTING = YES
# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include
# namespace members in file scope as well, matching the HTML output.
# The default value is: NO.
# This tag requires that the tag GENERATE_XML is set to YES.
XML_NS_MEMB_FILE_SCOPE = NO
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to the DOCBOOK output # Configuration options related to the DOCBOOK output
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
...@@ -1882,27 +2289,44 @@ GENERATE_DOCBOOK = NO ...@@ -1882,27 +2289,44 @@ GENERATE_DOCBOOK = NO
DOCBOOK_OUTPUT = docbook DOCBOOK_OUTPUT = docbook
# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
# program listings (including syntax highlighting and cross-referencing
# information) to the DOCBOOK output. Note that enabling this will significantly
# increase the size of the DOCBOOK output.
# The default value is: NO.
# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
DOCBOOK_PROGRAMLISTING = NO
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options for the AutoGen Definitions output # Configuration options for the AutoGen Definitions output
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an # If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
# AutoGen Definitions (see http://autogen.sf.net) file that captures the # AutoGen Definitions (see https://autogen.sourceforge.net/) file that captures
# structure of the code including all documentation. Note that this feature is # the structure of the code including all documentation. Note that this feature
# still experimental and incomplete at the moment. # is still experimental and incomplete at the moment.
# The default value is: NO. # The default value is: NO.
GENERATE_AUTOGEN_DEF = NO GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
# Configuration options related to Sqlite3 output
#---------------------------------------------------------------------------
# If the GENERATE_SQLITE3 tag is set to YES doxygen will generate a Sqlite3
# database with symbols found by doxygen stored in tables.
# The default value is: NO.
GENERATE_SQLITE3 = NO
# The SQLITE3_OUTPUT tag is used to specify where the Sqlite3 database will be
# put. If a relative path is entered the value of OUTPUT_DIRECTORY will be put
# in front of it.
# The default directory is: sqlite3.
# This tag requires that the tag GENERATE_SQLITE3 is set to YES.
SQLITE3_OUTPUT = sqlite3
# The SQLITE3_OVERWRITE_DB tag is set to YES, the existing doxygen_sqlite3.db
# database file will be recreated with each doxygen run. If set to NO, doxygen
# will warn if an a database file is already found and not modify it.
# The default value is: YES.
# This tag requires that the tag GENERATE_SQLITE3 is set to YES.
SQLITE3_RECREATE_DB = YES
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to the Perl module output # Configuration options related to the Perl module output
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
...@@ -1977,7 +2401,8 @@ SEARCH_INCLUDES = YES ...@@ -1977,7 +2401,8 @@ SEARCH_INCLUDES = YES
# The INCLUDE_PATH tag can be used to specify one or more directories that # The INCLUDE_PATH tag can be used to specify one or more directories that
# contain include files that are not input files but should be processed by the # contain include files that are not input files but should be processed by the
# preprocessor. # preprocessor. Note that the INCLUDE_PATH is not recursive, so the setting of
# RECURSIVE has no effect here.
# This tag requires that the tag SEARCH_INCLUDES is set to YES. # This tag requires that the tag SEARCH_INCLUDES is set to YES.
INCLUDE_PATH = @top_srcdir@/src INCLUDE_PATH = @top_srcdir@/src
...@@ -1998,12 +2423,12 @@ INCLUDE_FILE_PATTERNS = ...@@ -1998,12 +2423,12 @@ INCLUDE_FILE_PATTERNS =
# recursively expanded use the := operator instead of the = operator. # recursively expanded use the := operator instead of the = operator.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
PREDEFINED = "__attribute__(x)= " PREDEFINED = "__attribute__(x)=" \
PREDEFINED += HAVE_HDF5 HAVE_HDF5 \
PREDEFINED += HAVE_FFTW HAVE_FFTW \
PREDEFINED += WITH_MPI WITH_MPI \
PREDEFINED += WITH_VECTORIZATION WITH_VECTORIZATION \
PREDEFINED += __GNUC__ __GNUC__
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
# tag can be used to specify a list of macro names that should be expanded. The # tag can be used to specify a list of macro names that should be expanded. The
...@@ -2049,15 +2474,15 @@ TAGFILES = ...@@ -2049,15 +2474,15 @@ TAGFILES =
GENERATE_TAGFILE = GENERATE_TAGFILE =
# If the ALLEXTERNALS tag is set to YES, all external class will be listed in # If the ALLEXTERNALS tag is set to YES, all external classes and namespaces
# the class index. If set to NO, only the inherited external classes will be # will be listed in the class and namespace index. If set to NO, only the
# listed. # inherited external classes will be listed.
# The default value is: NO. # The default value is: NO.
ALLEXTERNALS = NO ALLEXTERNALS = NO
# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed # If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
# in the modules index. If set to NO, only the current project's groups will be # in the topic index. If set to NO, only the current project's groups will be
# listed. # listed.
# The default value is: YES. # The default value is: YES.
...@@ -2070,34 +2495,10 @@ EXTERNAL_GROUPS = YES ...@@ -2070,34 +2495,10 @@ EXTERNAL_GROUPS = YES
EXTERNAL_PAGES = YES EXTERNAL_PAGES = YES
# The PERL_PATH should be the absolute path and name of the perl script
# interpreter (i.e. the result of 'which perl').
# The default file (with absolute path) is: /usr/bin/perl.
PERL_PATH = /usr/bin/perl
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to the dot tool # Configuration options related to diagram generator tools
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
# NO turns the diagrams off. Note that this option also works with HAVE_DOT
# disabled, but it is recommended to install and use dot, since it yields more
# powerful graphs.
# The default value is: YES.
CLASS_DIAGRAMS = NO
# You can define message sequence charts within doxygen comments using the \msc
# command. Doxygen will then run the mscgen tool (see:
# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
# documentation. The MSCGEN_PATH tag allows you to specify the directory where
# the mscgen tool resides. If left empty the tool is assumed to be found in the
# default search path.
MSCGEN_PATH =
# You can include diagrams made with dia in doxygen documentation. Doxygen will # You can include diagrams made with dia in doxygen documentation. Doxygen will
# then run dia to produce the diagram and insert it in the documentation. The # then run dia to produce the diagram and insert it in the documentation. The
# DIA_PATH tag allows you to specify the directory where the dia binary resides. # DIA_PATH tag allows you to specify the directory where the dia binary resides.
...@@ -2113,10 +2514,10 @@ HIDE_UNDOC_RELATIONS = YES ...@@ -2113,10 +2514,10 @@ HIDE_UNDOC_RELATIONS = YES
# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
# available from the path. This tool is part of Graphviz (see: # available from the path. This tool is part of Graphviz (see:
# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent # https://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
# Bell Labs. The other options in this section have no effect if this option is # Bell Labs. The other options in this section have no effect if this option is
# set to NO # set to NO
# The default value is: NO. # The default value is: YES.
HAVE_DOT = NO HAVE_DOT = NO
...@@ -2130,49 +2531,73 @@ HAVE_DOT = NO ...@@ -2130,49 +2531,73 @@ HAVE_DOT = NO
DOT_NUM_THREADS = 0 DOT_NUM_THREADS = 0
# When you want a differently looking font in the dot files that doxygen # DOT_COMMON_ATTR is common attributes for nodes, edges and labels of
# generates you can specify the font name using DOT_FONTNAME. You need to make # subgraphs. When you want a differently looking font in the dot files that
# sure dot is able to find the font, which can be done by putting it in a # doxygen generates you can specify fontname, fontcolor and fontsize attributes.
# standard location or by setting the DOTFONTPATH environment variable or by # For details please see <a href=https://graphviz.org/doc/info/attrs.html>Node,
# setting DOT_FONTPATH to the directory containing the font. # Edge and Graph Attributes specification</a> You need to make sure dot is able
# The default value is: Helvetica. # to find the font, which can be done by putting it in a standard location or by
# setting the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
# directory containing the font. Default graphviz fontsize is 14.
# The default value is: fontname=Helvetica,fontsize=10.
# This tag requires that the tag HAVE_DOT is set to YES. # This tag requires that the tag HAVE_DOT is set to YES.
DOT_FONTNAME = DOT_COMMON_ATTR = "fontname=Helvetica,fontsize=10"
# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of # DOT_EDGE_ATTR is concatenated with DOT_COMMON_ATTR. For elegant style you can
# dot graphs. # add 'arrowhead=open, arrowtail=open, arrowsize=0.5'. <a
# Minimum value: 4, maximum value: 24, default value: 10. # href=https://graphviz.org/doc/info/arrows.html>Complete documentation about
# arrows shapes.</a>
# The default value is: labelfontname=Helvetica,labelfontsize=10.
# This tag requires that the tag HAVE_DOT is set to YES. # This tag requires that the tag HAVE_DOT is set to YES.
DOT_FONTSIZE = 10 DOT_EDGE_ATTR = "labelfontname=Helvetica,labelfontsize=10"
# By default doxygen will tell dot to use the default font as specified with # DOT_NODE_ATTR is concatenated with DOT_COMMON_ATTR. For view without boxes
# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set # around nodes set 'shape=plain' or 'shape=plaintext' <a
# the path where dot can find it using this tag. # href=https://www.graphviz.org/doc/info/shapes.html>Shapes specification</a>
# The default value is: shape=box,height=0.2,width=0.4.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_NODE_ATTR = "shape=box,height=0.2,width=0.4"
# You can set the path where dot can find font specified with fontname in
# DOT_COMMON_ATTR and others dot attributes.
# This tag requires that the tag HAVE_DOT is set to YES. # This tag requires that the tag HAVE_DOT is set to YES.
DOT_FONTPATH = DOT_FONTPATH =
# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for # If the CLASS_GRAPH tag is set to YES or GRAPH or BUILTIN then doxygen will
# each documented class showing the direct and indirect inheritance relations. # generate a graph for each documented class showing the direct and indirect
# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO. # inheritance relations. In case the CLASS_GRAPH tag is set to YES or GRAPH and
# HAVE_DOT is enabled as well, then dot will be used to draw the graph. In case
# the CLASS_GRAPH tag is set to YES and HAVE_DOT is disabled or if the
# CLASS_GRAPH tag is set to BUILTIN, then the built-in generator will be used.
# If the CLASS_GRAPH tag is set to TEXT the direct and indirect inheritance
# relations will be shown as texts / links.
# Possible values are: NO, YES, TEXT, GRAPH and BUILTIN.
# The default value is: YES. # The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
CLASS_GRAPH = YES CLASS_GRAPH = TEXT
# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a # If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
# graph for each documented class showing the direct and indirect implementation # graph for each documented class showing the direct and indirect implementation
# dependencies (inheritance, containment, and class references variables) of the # dependencies (inheritance, containment, and class references variables) of the
# class with other documented classes. # class with other documented classes. Explicit enabling a collaboration graph,
# when COLLABORATION_GRAPH is set to NO, can be accomplished by means of the
# command \collaborationgraph. Disabling a collaboration graph can be
# accomplished by means of the command \hidecollaborationgraph.
# The default value is: YES. # The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES. # This tag requires that the tag HAVE_DOT is set to YES.
COLLABORATION_GRAPH = YES COLLABORATION_GRAPH = YES
# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for # If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
# groups, showing the direct groups dependencies. # groups, showing the direct groups dependencies. Explicit enabling a group
# dependency graph, when GROUP_GRAPHS is set to NO, can be accomplished by means
# of the command \groupgraph. Disabling a directory graph can be accomplished by
# means of the command \hidegroupgraph. See also the chapter Grouping in the
# manual.
# The default value is: YES. # The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES. # This tag requires that the tag HAVE_DOT is set to YES.
...@@ -2195,10 +2620,32 @@ UML_LOOK = NO ...@@ -2195,10 +2620,32 @@ UML_LOOK = NO
# but if the number exceeds 15, the total amount of fields shown is limited to # but if the number exceeds 15, the total amount of fields shown is limited to
# 10. # 10.
# Minimum value: 0, maximum value: 100, default value: 10. # Minimum value: 0, maximum value: 100, default value: 10.
# This tag requires that the tag HAVE_DOT is set to YES. # This tag requires that the tag UML_LOOK is set to YES.
UML_LIMIT_NUM_FIELDS = 10 UML_LIMIT_NUM_FIELDS = 10
# If the DOT_UML_DETAILS tag is set to NO, doxygen will show attributes and
# methods without types and arguments in the UML graphs. If the DOT_UML_DETAILS
# tag is set to YES, doxygen will add type and arguments for attributes and
# methods in the UML graphs. If the DOT_UML_DETAILS tag is set to NONE, doxygen
# will not generate fields with class member information in the UML graphs. The
# class diagrams will look similar to the default class diagrams but using UML
# notation for the relationships.
# Possible values are: NO, YES and NONE.
# The default value is: NO.
# This tag requires that the tag UML_LOOK is set to YES.
DOT_UML_DETAILS = NO
# The DOT_WRAP_THRESHOLD tag can be used to set the maximum number of characters
# to display on a single line. If the actual line length exceeds this threshold
# significantly it will wrapped across multiple lines. Some heuristics are apply
# to avoid ugly line breaks.
# Minimum value: 0, maximum value: 1000, default value: 17.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_WRAP_THRESHOLD = 17
# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and # If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
# collaboration graphs will show the relations between templates and their # collaboration graphs will show the relations between templates and their
# instances. # instances.
...@@ -2210,7 +2657,9 @@ TEMPLATE_RELATIONS = NO ...@@ -2210,7 +2657,9 @@ TEMPLATE_RELATIONS = NO
# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to # If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
# YES then doxygen will generate a graph for each documented file showing the # YES then doxygen will generate a graph for each documented file showing the
# direct and indirect include dependencies of the file with other documented # direct and indirect include dependencies of the file with other documented
# files. # files. Explicit enabling an include graph, when INCLUDE_GRAPH is is set to NO,
# can be accomplished by means of the command \includegraph. Disabling an
# include graph can be accomplished by means of the command \hideincludegraph.
# The default value is: YES. # The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES. # This tag requires that the tag HAVE_DOT is set to YES.
...@@ -2219,7 +2668,10 @@ INCLUDE_GRAPH = YES ...@@ -2219,7 +2668,10 @@ INCLUDE_GRAPH = YES
# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are # If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
# set to YES then doxygen will generate a graph for each documented file showing # set to YES then doxygen will generate a graph for each documented file showing
# the direct and indirect include dependencies of the file with other documented # the direct and indirect include dependencies of the file with other documented
# files. # files. Explicit enabling an included by graph, when INCLUDED_BY_GRAPH is set
# to NO, can be accomplished by means of the command \includedbygraph. Disabling
# an included by graph can be accomplished by means of the command
# \hideincludedbygraph.
# The default value is: YES. # The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES. # This tag requires that the tag HAVE_DOT is set to YES.
...@@ -2230,7 +2682,8 @@ INCLUDED_BY_GRAPH = YES ...@@ -2230,7 +2682,8 @@ INCLUDED_BY_GRAPH = YES
# #
# Note that enabling this option will significantly increase the time of a run. # Note that enabling this option will significantly increase the time of a run.
# So in most cases it will be better to enable call graphs for selected # So in most cases it will be better to enable call graphs for selected
# functions only using the \callgraph command. # functions only using the \callgraph command. Disabling a call graph can be
# accomplished by means of the command \hidecallgraph.
# The default value is: NO. # The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES. # This tag requires that the tag HAVE_DOT is set to YES.
...@@ -2241,7 +2694,8 @@ CALL_GRAPH = NO ...@@ -2241,7 +2694,8 @@ CALL_GRAPH = NO
# #
# Note that enabling this option will significantly increase the time of a run. # Note that enabling this option will significantly increase the time of a run.
# So in most cases it will be better to enable caller graphs for selected # So in most cases it will be better to enable caller graphs for selected
# functions only using the \callergraph command. # functions only using the \callergraph command. Disabling a caller graph can be
# accomplished by means of the command \hidecallergraph.
# The default value is: NO. # The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES. # This tag requires that the tag HAVE_DOT is set to YES.
...@@ -2257,18 +2711,33 @@ GRAPHICAL_HIERARCHY = YES ...@@ -2257,18 +2711,33 @@ GRAPHICAL_HIERARCHY = YES
# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the # If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
# dependencies a directory has on other directories in a graphical way. The # dependencies a directory has on other directories in a graphical way. The
# dependency relations are determined by the #include relations between the # dependency relations are determined by the #include relations between the
# files in the directories. # files in the directories. Explicit enabling a directory graph, when
# DIRECTORY_GRAPH is set to NO, can be accomplished by means of the command
# \directorygraph. Disabling a directory graph can be accomplished by means of
# the command \hidedirectorygraph.
# The default value is: YES. # The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES. # This tag requires that the tag HAVE_DOT is set to YES.
DIRECTORY_GRAPH = YES DIRECTORY_GRAPH = YES
# The DIR_GRAPH_MAX_DEPTH tag can be used to limit the maximum number of levels
# of child directories generated in directory dependency graphs by dot.
# Minimum value: 1, maximum value: 25, default value: 1.
# This tag requires that the tag DIRECTORY_GRAPH is set to YES.
DIR_GRAPH_MAX_DEPTH = 1
# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
# generated by dot. # generated by dot. For an explanation of the image formats see the section
# output formats in the documentation of the dot tool (Graphviz (see:
# https://www.graphviz.org/)).
# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order # Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
# to make the SVG files visible in IE 9+ (other browsers do not have this # to make the SVG files visible in IE 9+ (other browsers do not have this
# requirement). # requirement).
# Possible values are: png, jpg, gif and svg. # Possible values are: png, jpg, jpg:cairo, jpg:cairo:gd, jpg:gd, jpg:gd:gd,
# gif, gif:cairo, gif:cairo:gd, gif:gd, gif:gd:gd, svg, png:gd, png:gd:gd,
# png:cairo, png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
# png:gdiplus:gdiplus.
# The default value is: png. # The default value is: png.
# This tag requires that the tag HAVE_DOT is set to YES. # This tag requires that the tag HAVE_DOT is set to YES.
...@@ -2299,11 +2768,12 @@ DOT_PATH = ...@@ -2299,11 +2768,12 @@ DOT_PATH =
DOTFILE_DIRS = DOTFILE_DIRS =
# The MSCFILE_DIRS tag can be used to specify one or more directories that # You can include diagrams made with dia in doxygen documentation. Doxygen will
# contain msc files that are included in the documentation (see the \mscfile # then run dia to produce the diagram and insert it in the documentation. The
# command). # DIA_PATH tag allows you to specify the directory where the dia binary resides.
# If left empty dia is assumed to be found in the default search path.
MSCFILE_DIRS = DIA_PATH =
# The DIAFILE_DIRS tag can be used to specify one or more directories that # The DIAFILE_DIRS tag can be used to specify one or more directories that
# contain dia files that are included in the documentation (see the \diafile # contain dia files that are included in the documentation (see the \diafile
...@@ -2312,13 +2782,18 @@ MSCFILE_DIRS = ...@@ -2312,13 +2782,18 @@ MSCFILE_DIRS =
DIAFILE_DIRS = DIAFILE_DIRS =
# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the # When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
# path where java can find the plantuml.jar file. If left blank, it is assumed # path where java can find the plantuml.jar file or to the filename of jar file
# PlantUML is not used or called during a preprocessing step. Doxygen will # to be used. If left blank, it is assumed PlantUML is not used or called during
# generate a warning when it encounters a \startuml command in this case and # a preprocessing step. Doxygen will generate a warning when it encounters a
# will not generate output for the diagram. # \startuml command in this case and will not generate output for the diagram.
PLANTUML_JAR_PATH = PLANTUML_JAR_PATH =
# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a
# configuration file for plantuml.
PLANTUML_CFG_FILE =
# When using plantuml, the specified paths are searched for files specified by # When using plantuml, the specified paths are searched for files specified by
# the !include statement in a plantuml block. # the !include statement in a plantuml block.
...@@ -2348,18 +2823,6 @@ DOT_GRAPH_MAX_NODES = 50 ...@@ -2348,18 +2823,6 @@ DOT_GRAPH_MAX_NODES = 50
MAX_DOT_GRAPH_DEPTH = 0 MAX_DOT_GRAPH_DEPTH = 0
# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
# background. This is disabled by default, because dot on Windows does not seem
# to support this out of the box.
#
# Warning: Depending on the platform used, enabling this option may lead to
# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
# read).
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_TRANSPARENT = NO
# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output # Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
# files in one run (i.e. multiple -o and -T options on the command line). This # files in one run (i.e. multiple -o and -T options on the command line). This
# makes dot run faster, but since only newer versions of dot (>1.8.10) support # makes dot run faster, but since only newer versions of dot (>1.8.10) support
...@@ -2372,14 +2835,34 @@ DOT_MULTI_TARGETS = YES ...@@ -2372,14 +2835,34 @@ DOT_MULTI_TARGETS = YES
# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page # If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
# explaining the meaning of the various boxes and arrows in the dot generated # explaining the meaning of the various boxes and arrows in the dot generated
# graphs. # graphs.
# Note: This tag requires that UML_LOOK isn't set, i.e. the doxygen internal
# graphical representation for inheritance and collaboration diagrams is used.
# The default value is: YES. # The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES. # This tag requires that the tag HAVE_DOT is set to YES.
GENERATE_LEGEND = YES GENERATE_LEGEND = YES
# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot # If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate
# files that are used to generate the various graphs. # files that are used to generate the various graphs.
#
# Note: This setting is not only used for dot files but also for msc temporary
# files.
# The default value is: YES. # The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_CLEANUP = YES DOT_CLEANUP = YES
# You can define message sequence charts within doxygen comments using the \msc
# command. If the MSCGEN_TOOL tag is left empty (the default), then doxygen will
# use a built-in version of mscgen tool to produce the charts. Alternatively,
# the MSCGEN_TOOL tag can also specify the name an external tool. For instance,
# specifying prog as the value, doxygen will call the tool as prog -T
# <outfile_format> -o <outputfile> <inputfile>. The external tool should support
# output file formats "png", "eps", "svg", and "ismap".
MSCGEN_TOOL =
# The MSCFILE_DIRS tag can be used to specify one or more directories that
# contain msc files that are included in the documentation (see the \mscfile
# command).
MSCFILE_DIRS =
# This file is part of SWIFT. # This file is part of SWIFT.
# Copyright (c) 2012 Pedro Gonnet (pedro.gonnet@durham.ac.uk), # Copyright (c) 2012 Pedro Gonnet (pedro.gonnet@durham.ac.uk),
# Matthieu Schaller (matthieu.schaller@durham.ac.uk). # Matthieu Schaller (schaller@strw.leidenuniv.nl).
# #
# This program is free software: you can redistribute it and/or modify # This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
......