{"id":13948801,"url":"https://github.com/atmtools/arts","last_synced_at":"2025-04-04T22:03:11.483Z","repository":{"id":5262079,"uuid":"6440438","full_name":"atmtools/arts","owner":"atmtools","description":"The Atmospheric Radiative Transfer Simulator","archived":false,"fork":false,"pushed_at":"2024-10-28T08:44:35.000Z","size":266202,"stargazers_count":65,"open_issues_count":17,"forks_count":29,"subscribers_count":11,"default_branch":"main","last_synced_at":"2024-10-29T22:32:35.723Z","etag":null,"topics":["atmospheric-science","cpp","radiative-transfer"],"latest_commit_sha":null,"homepage":"https://www.radiativetransfer.org/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"alindeman/atldevs","license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/atmtools.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES-2.2","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2012-10-29T12:51:17.000Z","updated_at":"2024-10-28T08:44:41.000Z","dependencies_parsed_at":"2024-06-13T04:54:46.261Z","dependency_job_id":"85476062-b4f8-4114-b7fb-a9b4b94805c5","html_url":"https://github.com/atmtools/arts","commit_stats":{"total_commits":9484,"total_committers":58,"mean_commits":"163.51724137931035","dds":0.75970054829186,"last_synced_commit":"5fbc4773283961b1284b7d11f03040e95fa5a18e"},"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atmtools%2Farts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atmtools%2Farts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atmtools%2Farts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/atmtools%2Farts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/atmtools","download_url":"https://codeload.github.com/atmtools/arts/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247256104,"owners_count":20909240,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["atmospheric-science","cpp","radiative-transfer"],"created_at":"2024-08-08T05:01:31.316Z","updated_at":"2025-04-04T22:03:11.466Z","avatar_url":"https://github.com/atmtools.png","language":"C++","readme":"[![Build](https://github.com/atmtools/arts/workflows/Build/badge.svg?branch=arts3-dev)](https://github.com/atmtools/arts/commits/arts3-dev)\n\n\n\u003e [!CAUTION]\n\u003e This branch is under heavy development. Many features are missing or not fully implemented.\n\u003e If you are not an ARTS developer, you might want to stay away.\n\nWelcome to ARTS\n===============\n\nARTS is free software. Please see the file COPYING for details.\n\nIf you use data generated by ARTS in a scientific publication, then please\nmention this and cite the most appropriate of the ARTS publications that are\nsummarized on http://www.radiativetransfer.org/docs/\n\n[CONTRIBUTING.md](CONTRIBUTING.md) provides information on contributing\nto ARTS on GitHub.\n \nFor documentation, please see the files in the doc subdirectory.\n\nFor building and installation instructions please read below.\n\n\nDependencies\n------------\n\nBuild Prerequisites (provided by Miniforge3):\n\nSee the platform-dependent `environment-dev-{linux,mac,win}.yml` file for all requirements.\n\n\nBuilding ARTS\n-------------\n\nThe following instructions assume that you are using Miniforge3 as a build environment.  The installer is available at\n[the project's Github page](https://github.com/conda-forge/miniforge#miniforge).\n\nUse the provided `environment-dev-{linux,mac,win}.yml` files to install\nall required dependencies into your current conda environment.\n\nOptionally, a separate environment for development can be created, if you want to keep your current environment clean:\n\n```\nmamba create -n pyarts-dev\nmamba activate pyarts-dev\n```\n\nInstall dependencies on Linux:\n```\nmamba env update -f environment-dev-linux.yml\n```\n\nInstall dependencies on macOS:\n```\nmamba env update -f environment-dev-mac.yml\n```\n\nInstall dependencies on Windows:\n```\nmamba env update -f environment-dev-win.yml\n```\n\nNext, follow these steps to use `cmake` to build ARTS:\n```\ncd arts\ncmake --preset=default-gcc-conda  # On macOS use default-clang-conda, on windows use default-msvc-conda\ncmake --build build -jX\n```\n\nX is the number of parallel build processes.\n**X=Number of Cores** gives you usually the fastest compilation time.\n\nWARNING: The compilation is very memory intensive. If you have 16GB of RAM,\ndon't use more than 6-8 cores. With 8GB, don't use more than 2-3 cores.\n\nDevelopment install of the PyARTS Python package:\n\n```\npython3 -m pip install --user -e build/python\n```\n\nYou only have to do the python package install once.\nIf the ARTS source has changed, update the PyARTS package by running:\n\n```\ncmake --build build -jX --target pyarts\n```\n\n\nBuild configurations\n--------------------\n\nBy default, ARTS is built in release mode with optimizations enabled and\nassertions and debugging symbols turned off.\n\nWhenever you change the configuration, remove your build directory first:\n\n```\nrm -rf build\n```\n\nTo build with assertions and debugging symbols use:\n\n```\ncmake --preset=default-gcc-conda -DCMAKE_BUILD_TYPE=RelWithDebInfo\n```\n\nThis configuration offers a good balance between performance and debugging\ncapabilities. Since this still optimizes out many variables, it can be\nnecessary for some debugging cases to turn off all optimizations. For those\ncases, the full debug configuration can be enabled. Note that ARTS runs a lot\nslower in this configuration:\n\n```\ncmake --preset=default-gcc-conda -DCMAKE_BUILD_TYPE=Debug\n```\n\n\nInstalling PyARTS\n-----------------\n\nTo install the PyARTS Python package, you need to build it and install it with\npip. Create your build directory and configure ARTS with cmake as described in\nthe previous sections. Then, run the following commands inside your build\ndirectory:\n\n```\ncmake --build build --target pyarts\npython3 -m pip install --user -e build/python\n```\n\nThis will not mess with your system's Python installation.\nA link to the pyarts package is created in your home directory, usually\n`$HOME/.local/lib/python3.X/site-packages/pyarts.egg-link`.\n\nYou don't need to reinstall the package with pip after updating ARTS.\nYou only need to run `cmake --build build --target pyarts` again.\n\n\nTests\n-----\n\n'cmake --build build --target check' will run several test cases to ensure that\nARTS is working properly. Use 'check-all' to run all available controlfiles,\nincluding computation time-intensive ones.\n\nSome tests depend on the arts-xml-data package. cmake automatically looks if it\nis available in the same location as ARTS itself. If necessary, a custom path\ncan be specified.\n\n```\ncmake --preset=default-gcc-conda -DARTS_XML_DATA_PATH=/home/myname/arts-xml-data\n```\n\nIf arts-xml-data cannot be found, those tests are ignored.\n\nBy default, 4 tests are executed in parallel.\nIf you change the number of concurrently run test, you can add this option to your `cmake --preset=....` call:\n\n```\n-DTEST_JOBS=X\n```\n\nX is the number of tests that should be started in parallel.\n\nYou can also use the ctest command directly to run the tests:\n\nFirst, change to the `build` directory:\n```\ncd build\n```\n\nThis runs all test with 4 jobs concurrently:\n```\nctest -j4\n```\n\nTo run specific tests, use the -R option and specify part of the test case name\nyou want to run. The following command will run all tests that have 'ppath' in\ntheir name, e.g. arts.ctlfile.fast.ppath1d ...:\n\n```\nctest -R ppath\n```\n\nTo see the output of ARTS, use the -V option:\n\n```\nctest -V -R fast.doit\n```\n\nBy default, ctest will not print any output from ARTS to the screen. The option\n--output-on-failure can be passed to ctest to see output in the case an error\noccurs. If you want to always enable this, you can set the environment variable\nCTEST_OUTPUT_ON_FAILURE:\n\n```\nexport CTEST_OUTPUT_ON_FAILURE=1\n```\n\n\nNative build\n------------\n\nTo squeeze out every last drop of performance, you can also build a version\nspecifically optimized for your machine's processor:\n\n```\n-DCMAKE_BUILD_TYPE=Native\n```\n\nThis option should make the executable slightly faster, more so on better\nsystems, but not portable. Note that since this build-mode is meant for\nfast-but-accurate computations, some IEEE rules will be ignored. For now only\ncomplex computations are IEEE incompatible running this mode of build.\n\n\nOptional features\n-----------------\n\nEnable NetCDF: The basic matpack types can be read from NetCDF files, if NetCDF\nsupport is enabled:\n\n```\ncmake --preset=default-gcc-conda -DENABLE_NETCDF=1\n```\n\nPrecompiled headers: PCH can speed up builds significantly. However, it hampers\nthe ability for ccache to properly skip unnecessary compilations, potentially\nincreasing rebuild times. Tests have shown that it only speeds up the build\nconsiderably for Clang, but not for GCC.\n\n```\ncmake --preset=default-clang-conda -DENABLE_PCH=1 ..\n```\n\nIf you enable PCH and also use ccache, you need to set the `CCACHE_SLOPPINESS`\nenvironment variable properly:\n\n```\nexport CCACHE_SLOPPINESS=pch_defines,time_macros\n```\n\n\nDisabling features\n------------------\n\nDisable assertions: `-DNO_ASSERT=1`\n\nDisable OpenMP: `-DNO_OPENMP=1`\n\nDisable the built-in documentation server: `-DNO_DOCSERVER=1`\n\n\nccache support\n--------------\n\nThe build utilizes ccache automatically when available, it can be\nturned off with the option `-DENABLE_CCACHE=0`\n\nFor details see https://ccache.samba.org/\n\n\nValgrind profiling\n------------------\n\nThe callgrind plugin included in valgrind is the recommended profiling method\nfor ARTS.\n\nCertain things should be taken into account when calling ARTS with valgrind.\nSince recursion (cycles) will lead to wrong profiling results it is\nimportant to use the following settings to obtain profile data for ARTS:\n\n```\nvalgrind --tool=callgrind --separate-callers=10 --separate-recs=3 arts -n1 ...\n```\n\nFor detail on these options consult the valgrind manual:\n\nhttp://valgrind.org/docs/manual/cl-manual.html#cl-manual.cycles\n\n-n1 should be passed to ARTS because parallelisation can further scew the\nresults. Since executing a program in valgrind can lead to 50x slower\nexecution, it is recommended to create a dedicated, minimal controlfile for\nprofiling.\n\nAfter execution with valgrind, the resulting callgrind.out.* file can be\nopened in kcachegrind[1] for visualization. It is available as a package for\nmost Linux distributions.\n\nNote that you don't have to do a full ARTS run. You can cancel the program\nafter some time when you think you have gathered enough statistics.\n\n[1] https://kcachegrind.github.io/\n\n\nLinux perf profiling\n--------------------\n\nThe [Performance Counters for Linux](https://perf.wiki.kernel.org/) offer a\nconvenient way to profile any program with basically no runtime overhead.\nProfiling works for all configurations (Debug, RelWithDebInfo and Release). To\nensure that the calltree can be analyzed correctly, compile ARTS with frame\npointers. This has minimal impact on performance. Use the following preset to\nenable this setting:\n\n```\ncmake --preset=perf-gcc-conda\n```\n\nPrepend the perf command to your arts call to record callgraph information:\n\n```\nperf record -g src/arts MYCONTROLFILE.arts\n```\n\nThis can also be applied to any test case:\n\n```\nperf record -g ctest -R TestDOIT$\n```\n\nAfter recording, use the report command to display an interactive view of the\nprofiling information:\n\n```\nperf report -g graph,0.5,callees\n```\n\nThis will show a reverse call tree with the percentage of time spent in each\nfunction. The function tree can be expanded to expose the calling functions.\n\n","funding_links":[],"categories":["Atmosphere"],"sub_categories":["Radiative Transfer"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fatmtools%2Farts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fatmtools%2Farts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fatmtools%2Farts/lists"}