arts

The Atmospheric Radiative Transfer Simulator

https://github.com/atmtools/arts

Science Score: 36.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Committers with academic emails
    7 of 57 committers (12.3%) from academic institutions
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (15.9%) to scientific vocabulary

Keywords

atmospheric-science cpp radiative-transfer
Last synced: 6 months ago · JSON representation

Repository

The Atmospheric Radiative Transfer Simulator

Basic Info
Statistics
  • Stars: 82
  • Watchers: 10
  • Forks: 32
  • Open Issues: 19
  • Releases: 18
Topics
atmospheric-science cpp radiative-transfer
Created over 13 years ago · Last pushed 6 months ago
Metadata Files
Readme Changelog Contributing License Authors

README.md

Build

[!CAUTION] This branch is under heavy development. Many features are missing or not fully implemented. If you are not an ARTS developer, you might want to stay away.

Welcome to ARTS

ARTS is free software. Please see the file COPYING for details.

If you use data generated by ARTS in a scientific publication, then please mention this and cite the most appropriate of the ARTS publications that are summarized on http://www.radiativetransfer.org/docs/

CONTRIBUTING.md provides information on contributing to ARTS on GitHub.

For documentation, please see the files in the doc subdirectory.

For building and installation instructions please read below.

Dependencies

Build Prerequisites (provided by Miniforge3):

See the platform-dependent environment-dev-{linux,mac,win}.yml file for all requirements.

Building ARTS

The following instructions assume that you are using Miniforge3 as a build environment. The installer is available at the project's Github page.

Use the provided environment-dev-{linux,mac,win}.yml files to install all required dependencies into your current conda environment.

Optionally, a separate environment for development can be created, if you want to keep your current environment clean:

mamba create -n pyarts-dev mamba activate pyarts-dev

Install dependencies on Linux: mamba env update -f environment-dev-linux.yml

Install dependencies on macOS: mamba env update -f environment-dev-mac.yml

Install dependencies on Windows: mamba env update -f environment-dev-win.yml

Next, follow these steps to use cmake to build ARTS: cd arts cmake --preset=default-gcc-conda # On macOS use default-clang-conda, on windows use default-msvc-conda cmake --build build -jX

X is the number of parallel build processes. X=Number of Cores gives you usually the fastest compilation time.

WARNING: The compilation is very memory intensive. If you have 16GB of RAM, don't use more than 6-8 cores. With 8GB, don't use more than 2-3 cores.

Development install of the PyARTS Python package:

python3 -m pip install --user -e build/python

You only have to do the python package install once. If the ARTS source has changed, update the PyARTS package by running:

cmake --build build -jX --target pyarts

Build configurations

By default, ARTS is built in release mode with optimizations enabled and assertions and debugging symbols turned off.

Whenever you change the configuration, remove your build directory first:

rm -rf build

To build with assertions and debugging symbols use:

cmake --preset=default-gcc-conda -DCMAKE_BUILD_TYPE=RelWithDebInfo

This configuration offers a good balance between performance and debugging capabilities. Since this still optimizes out many variables, it can be necessary for some debugging cases to turn off all optimizations. For those cases, the full debug configuration can be enabled. Note that ARTS runs a lot slower in this configuration:

cmake --preset=default-gcc-conda -DCMAKE_BUILD_TYPE=Debug

Installing PyARTS

To install the PyARTS Python package, you need to build it and install it with pip. Create your build directory and configure ARTS with cmake as described in the previous sections. Then, run the following commands inside your build directory:

cmake --build build --target pyarts python3 -m pip install --user -e build/python

This will not mess with your system's Python installation. A link to the pyarts package is created in your home directory, usually $HOME/.local/lib/python3.X/site-packages/pyarts.egg-link.

You don't need to reinstall the package with pip after updating ARTS. You only need to run cmake --build build --target pyarts again.

Tests

'cmake --build build --target check' will run several test cases to ensure that ARTS is working properly. Use 'check-all' to run all available controlfiles, including computation time-intensive ones.

Some tests depend on the arts-xml-data package. cmake automatically looks if it is available in the same location as ARTS itself. If necessary, a custom path can be specified.

cmake --preset=default-gcc-conda -DARTS_XML_DATA_PATH=/home/myname/arts-xml-data

If arts-xml-data cannot be found, those tests are ignored.

By default, 4 tests are executed in parallel. If you change the number of concurrently run test, you can add this option to your cmake --preset=.... call:

-DTEST_JOBS=X

X is the number of tests that should be started in parallel.

You can also use the ctest command directly to run the tests:

First, change to the build directory: cd build

This runs all test with 4 jobs concurrently: ctest -j4

To run specific tests, use the -R option and specify part of the test case name you want to run. The following command will run all tests that have 'ppath' in their name, e.g. arts.ctlfile.fast.ppath1d ...:

ctest -R ppath

To see the output of ARTS, use the -V option:

ctest -V -R fast.doit

By default, ctest will not print any output from ARTS to the screen. The option --output-on-failure can be passed to ctest to see output in the case an error occurs. If you want to always enable this, you can set the environment variable CTESTOUTPUTON_FAILURE:

export CTEST_OUTPUT_ON_FAILURE=1

Native build

To squeeze out every last drop of performance, you can also build a version specifically optimized for your machine's processor:

-DCMAKE_BUILD_TYPE=Native

This option should make the executable slightly faster, more so on better systems, but not portable. Note that since this build-mode is meant for fast-but-accurate computations, some IEEE rules will be ignored. For now only complex computations are IEEE incompatible running this mode of build.

Optional features

Precompiled headers: PCH can speed up builds significantly. However, it hampers the ability for ccache to properly skip unnecessary compilations, potentially increasing rebuild times. Tests have shown that it only speeds up the build considerably for Clang, but not for GCC.

cmake --preset=default-clang-conda -DENABLE_PCH=1 ..

If you enable PCH and also use ccache, you need to set the CCACHE_SLOPPINESS environment variable properly:

export CCACHE_SLOPPINESS=pch_defines,time_macros

Disabling features

Disable assertions: -DNO_ASSERT=1

Disable OpenMP: -DNO_OPENMP=1

Disable the built-in documentation server: -DNO_DOCSERVER=1

ccache support

The build utilizes ccache automatically when available, it can be turned off with the option -DENABLE_CCACHE=0

For details see https://ccache.samba.org/

Valgrind profiling

The callgrind plugin included in valgrind is the recommended profiling method for ARTS.

Certain things should be taken into account when calling ARTS with valgrind. Since recursion (cycles) will lead to wrong profiling results it is important to use the following settings to obtain profile data for ARTS:

valgrind --tool=callgrind --separate-callers=10 --separate-recs=3 arts -n1 ...

For detail on these options consult the valgrind manual:

http://valgrind.org/docs/manual/cl-manual.html#cl-manual.cycles

-n1 should be passed to ARTS because parallelisation can further scew the results. Since executing a program in valgrind can lead to 50x slower execution, it is recommended to create a dedicated, minimal controlfile for profiling.

After execution with valgrind, the resulting callgrind.out.* file can be opened in kcachegrind[1] for visualization. It is available as a package for most Linux distributions.

Note that you don't have to do a full ARTS run. You can cancel the program after some time when you think you have gathered enough statistics.

[1] https://kcachegrind.github.io/

Linux perf profiling

The Performance Counters for Linux offer a convenient way to profile any program with basically no runtime overhead. Profiling works for all configurations (Debug, RelWithDebInfo and Release). To ensure that the calltree can be analyzed correctly, compile ARTS with frame pointers. This has minimal impact on performance. Use the following preset to enable this setting:

cmake --preset=perf-gcc-conda

Prepend the perf command to your arts call to record callgraph information:

perf record -g src/arts MYCONTROLFILE.arts

This can also be applied to any test case:

perf record -g ctest -R TestDOIT$

After recording, use the report command to display an interactive view of the profiling information:

perf report -g graph,0.5,callees

This will show a reverse call tree with the percentage of time spent in each function. The function tree can be expanded to expose the calling functions.

Owner

  • Name: atmtools
  • Login: atmtools
  • Kind: organization

GitHub Events

Total
  • Create event: 4
  • Issues event: 22
  • Release event: 4
  • Watch event: 14
  • Issue comment event: 90
  • Push event: 94
  • Pull request review event: 41
  • Pull request review comment event: 33
  • Pull request event: 214
  • Fork event: 4
Last Year
  • Create event: 4
  • Issues event: 22
  • Release event: 4
  • Watch event: 14
  • Issue comment event: 90
  • Push event: 94
  • Pull request review event: 41
  • Pull request review comment event: 33
  • Pull request event: 214
  • Fork event: 4

Committers

Last synced: 7 months ago

All Time
  • Total Commits: 9,966
  • Total Committers: 57
  • Avg Commits per committer: 174.842
  • Development Distribution Score (DDS): 0.771
Past Year
  • Commits: 677
  • Committers: 5
  • Avg Commits per committer: 135.4
  • Development Distribution Score (DDS): 0.313
Top Committers
Name Email Commits
Richard Larsson r****n@g****m 2,284
olemke o****e@a****9 2,279
patrick p****k@a****9 1,238
Oliver Lemke o****e@g****m 1,070
sbuehler s****r@a****9 414
mendrok m****k@a****9 377
richard r****d@a****9 332
claudia c****a@a****9 297
Manfred Brath m****h@u****e 242
Patrick Eriksson p****n@c****e 202
simonpf s****f@a****9 157
Richard Larsson l****n@m****e 153
rekha r****a@a****9 102
cory c****y@a****9 98
Simon Pfreundschuh s****h@c****e 97
ekstrom e****m@a****9 87
nkoulev n****v@a****9 79
Simon Pfreundschuh s****h@g****m 56
Stuart Fox s****x@m****k 34
gerrit g****t@a****9 34
axel a****l@a****9 33
Jon j****n@w****e 31
Richard Larsson r****b@g****m 27
tkuhn t****n@a****9 26
cmels c****s@a****9 24
carlos c****s@a****9 24
daniel d****l@a****9 14
Stefan Buehler s****r@u****e 13
viju v****u@a****9 12
claas c****s@a****9 12
and 27 more...
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 117
  • Total pull requests: 1,061
  • Average time to close issues: 6 months
  • Average time to close pull requests: 8 days
  • Total issue authors: 23
  • Total pull request authors: 16
  • Average comments per issue: 2.42
  • Average comments per pull request: 0.91
  • Merged pull requests: 968
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 21
  • Pull requests: 272
  • Average time to close issues: 1 day
  • Average time to close pull requests: 2 days
  • Issue authors: 13
  • Pull request authors: 6
  • Average comments per issue: 0.48
  • Average comments per pull request: 0.33
  • Merged pull requests: 221
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • erikssonpatrick (27)
  • riclarsson (25)
  • olemke (21)
  • simonpf (7)
  • stefanbuehler (7)
  • zursoe (6)
  • nuitlejour (5)
  • Shaofei-Wang224 (2)
  • m-brath (2)
  • j-petersen (2)
  • StegmannJCSDA (1)
  • carolinecox (1)
  • miikama (1)
  • mignonph75 (1)
  • TobyFIenderson (1)
Pull Request Authors
  • olemke (510)
  • riclarsson (415)
  • m-brath (40)
  • erikssonpatrick (30)
  • simonpf (26)
  • stefanbuehler (11)
  • j-petersen (6)
  • stuartfox (4)
  • Smpljack (4)
  • obobryshev (3)
  • gongxunhlj (3)
  • JakobDeutloff (2)
  • lkluft (2)
  • Shaofei-Wang224 (2)
  • vbarl (2)
Top Labels
Issue Labels
bug (41) enhancement (20) documentation (15) feature (6) discussion (4) question (3) API changes (2) help wanted (2)
Pull Request Labels
bug (5) examples (4) enhancement (3) in progress (2) documentation (2) 2.6 (2)

Packages

  • Total packages: 2
  • Total downloads:
    • pypi 28 last-month
  • Total dependent packages: 1
    (may contain duplicates)
  • Total dependent repositories: 1
    (may contain duplicates)
  • Total versions: 29
  • Total maintainers: 2
proxy.golang.org: github.com/atmtools/arts
  • Versions: 15
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Dependent packages count: 7.0%
Average: 8.2%
Dependent repos count: 9.3%
Last synced: 6 months ago
pypi.org: pyarts

PyARTS, the Python interface for ARTS

  • Versions: 14
  • Dependent Packages: 1
  • Dependent Repositories: 1
  • Downloads: 28 Last month
Rankings
Dependent packages count: 3.2%
Forks count: 7.3%
Stargazers count: 9.1%
Average: 14.1%
Dependent repos count: 22.1%
Downloads: 28.9%
Maintainers (2)
Last synced: 6 months ago

Dependencies

3rdparty/wigner/wigxjpf/setup.py pypi
  • numpy *
.github/workflows/build-test.yml actions
  • actions/checkout v1 composite
  • actions/setup-python v4 composite
.github/workflows/deploy.yml actions
  • ./actions/pypi * composite
  • actions/checkout v2 composite
actions/pypi/action.yml actions
  • Dockerfile * docker
actions/pypi/Dockerfile docker
  • quay.io/pypa/manylinux2014_x86_64 latest build
tools/arts-control-lang/package.json npm
python/setup.py pypi
  • docutils *
  • matplotlib >=1.4
  • netCDF4 >=1.1.1
  • numpy >=1.13
  • scipy >=0.15.1
  • setuptools >=0.7.2