{"id":22197074,"url":"https://github.com/openscm/openscm-twolayermodel","last_synced_at":"2025-09-05T03:37:52.577Z","repository":{"id":49540962,"uuid":"255859771","full_name":"openscm/openscm-twolayermodel","owner":"openscm","description":"Implementations of two-layer models by Held et al. and Geoffroy et al.","archived":false,"fork":false,"pushed_at":"2024-02-27T10:47:03.000Z","size":5917,"stargazers_count":10,"open_issues_count":5,"forks_count":4,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-08-28T00:10:12.409Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://openscm-two-layer-model.readthedocs.io","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/openscm.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGELOG.rst","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-04-15T08:56:21.000Z","updated_at":"2025-05-24T14:42:18.000Z","dependencies_parsed_at":"2025-04-14T16:01:19.632Z","dependency_job_id":null,"html_url":"https://github.com/openscm/openscm-twolayermodel","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/openscm/openscm-twolayermodel","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openscm%2Fopenscm-twolayermodel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openscm%2Fopenscm-twolayermodel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openscm%2Fopenscm-twolayermodel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openscm%2Fopenscm-twolayermodel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/openscm","download_url":"https://codeload.github.com/openscm/openscm-twolayermodel/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openscm%2Fopenscm-twolayermodel/sbom","scorecard":{"id":710044,"data":{"date":"2025-08-11","repo":{"name":"github.com/openscm/openscm-twolayermodel","commit":"ec212a28d733d459765f8dcf9cfb2f96ccbb8c36"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.6,"checks":[{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Code-Review","score":2,"reason":"Found 2/10 approved changesets -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci-cd-workflow.yml:1","Warn: no topLevel permission defined: .github/workflows/test-conda-install.yml:1","Warn: no topLevel permission defined: .github/workflows/test-pypi-install.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: BSD 3-Clause \"New\" or \"Revised\" License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci-cd-workflow.yml:117: update your workflow using https://app.stepsecurity.io/secureworkflow/openscm/openscm-twolayermodel/ci-cd-workflow.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci-cd-workflow.yml:119: update your workflow using https://app.stepsecurity.io/secureworkflow/openscm/openscm-twolayermodel/ci-cd-workflow.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci-cd-workflow.yml:137: update your workflow using https://app.stepsecurity.io/secureworkflow/openscm/openscm-twolayermodel/ci-cd-workflow.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci-cd-workflow.yml:139: update your workflow using https://app.stepsecurity.io/secureworkflow/openscm/openscm-twolayermodel/ci-cd-workflow.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci-cd-workflow.yml:149: update your workflow using https://app.stepsecurity.io/secureworkflow/openscm/openscm-twolayermodel/ci-cd-workflow.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci-cd-workflow.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/openscm/openscm-twolayermodel/ci-cd-workflow.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci-cd-workflow.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/openscm/openscm-twolayermodel/ci-cd-workflow.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci-cd-workflow.yml:32: update your workflow using https://app.stepsecurity.io/secureworkflow/openscm/openscm-twolayermodel/ci-cd-workflow.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci-cd-workflow.yml:58: update your workflow using https://app.stepsecurity.io/secureworkflow/openscm/openscm-twolayermodel/ci-cd-workflow.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci-cd-workflow.yml:60: update your workflow using https://app.stepsecurity.io/secureworkflow/openscm/openscm-twolayermodel/ci-cd-workflow.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci-cd-workflow.yml:80: update your workflow using https://app.stepsecurity.io/secureworkflow/openscm/openscm-twolayermodel/ci-cd-workflow.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci-cd-workflow.yml:92: update your workflow using https://app.stepsecurity.io/secureworkflow/openscm/openscm-twolayermodel/ci-cd-workflow.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci-cd-workflow.yml:94: update your workflow using https://app.stepsecurity.io/secureworkflow/openscm/openscm-twolayermodel/ci-cd-workflow.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test-conda-install.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/openscm/openscm-twolayermodel/test-conda-install.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-conda-install.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/openscm/openscm-twolayermodel/test-conda-install.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-pypi-install.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/openscm/openscm-twolayermodel/test-pypi-install.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-pypi-install.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/openscm/openscm-twolayermodel/test-pypi-install.yml/master?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/ci-cd-workflow.yml:65","Warn: pipCommand not pinned by hash: .github/workflows/ci-cd-workflow.yml:66","Warn: pipCommand not pinned by hash: .github/workflows/ci-cd-workflow.yml:99","Warn: pipCommand not pinned by hash: .github/workflows/ci-cd-workflow.yml:100","Warn: pipCommand not pinned by hash: .github/workflows/ci-cd-workflow.yml:144","Warn: pipCommand not pinned by hash: .github/workflows/ci-cd-workflow.yml:145","Warn: pipCommand not pinned by hash: .github/workflows/ci-cd-workflow.yml:21","Warn: pipCommand not pinned by hash: .github/workflows/ci-cd-workflow.yml:22","Warn: pipCommand not pinned by hash: .github/workflows/test-pypi-install.yml:25","Warn: pipCommand not pinned by hash: .github/workflows/test-pypi-install.yml:26","Warn: pipCommand not pinned by hash: .github/workflows/test-pypi-install.yml:27","Info:   0 out of  13 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   4 third-party GitHubAction dependencies pinned","Info:   0 out of  11 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 26 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-22T07:52:27.178Z","repository_id":49540962,"created_at":"2025-08-22T07:52:27.178Z","updated_at":"2025-08-22T07:52:27.178Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273341439,"owners_count":25088347,"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","status":"online","status_checked_at":"2025-09-02T02:00:09.530Z","response_time":77,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":[],"created_at":"2024-12-02T14:18:18.341Z","updated_at":"2025-09-05T03:37:52.537Z","avatar_url":"https://github.com/openscm.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"OpenSCM Two Layer Model\n=======================\n\n+-------------------+----------------+--------------+\n| Repository health |    |CI CD|     |  |Coverage|  |\n+-------------------+----------------+--------------+\n\n+---------------+--------+--------+\n| Documentation | |Docs| | |JOSS| |\n+---------------+--------+--------+\n\n+------+------------------+----------------+------------------+\n| PyPI |  |PyPI Install|  |     |PyPI|     |  |PyPI Version|  |\n+------+------------------+----------------+------------------+\n\n+-------+-----------------+-------------------+-----------------+\n| Conda | |conda install| | |conda platforms| | |conda version| |\n+-------+-----------------+-------------------+-----------------+\n\n+-----------------+----------------+---------------+-----------+\n|   Other info    | |Contributors| | |Last Commit| | |License| |\n+-----------------+----------------+---------------+-----------+\n\n\nBrief summary\n+++++++++++++\n\n.. sec-begin-long-description\n.. sec-begin-index\n\nOpenSCM two layer model contains implementations of the two layer radiative forcing driven models by `Held et al. \u003chttps://journals.ametsoc.org/doi/full/10.1175/2009JCLI3466.1\u003e`_, `Geoffroy et al. \u003chttps://journals.ametsoc.org/doi/pdf/10.1175/JCLI-D-12-00195.1\u003e`_ and `Bloch-Johnson et al. \u003chttps://agupubs.onlinelibrary.wiley.com/doi/abs/10.1002/2015GL064240\u003e`_\n\nOpenSCM Two Layer Model was designed to provide a clean, modularised, extensible interface for one of the most commonly used simple climate models.\nIt was used in `Phase 1 of the Reduced Complexity Model Intercomparison Project \u003chttps://doi.org/10.5194/gmd-13-5175-2020\u003e`_ as a point of comparison for the other participating models.\n\nThe `FaIR model \u003chttps://github.com/OMS-NetZero/FAIR\u003e`_ implements a mathematically equivalent model (under certain assumptions) but does not provide as clear a conversion between the two-layer model and the two-timescale response as is provided here.\nWe hope that this implementation could interface with other simple climate models like FaIR to allow simpler exploration of the combined behaviour of interacting climate components with minimal coupling headaches.\n\nAs implemented here, the \"OpenSCM Two Layer Model\" interface is target at researchers and as an education tool.\nUsers from other fields are of course encouraged to use it if they find it helpful.\n\n.. sec-end-index\n\nLicense\n-------\n\n.. sec-begin-license\n\nOpenSCM two layer model is free software under a BSD 3-Clause License, see\n`LICENSE \u003chttps://github.com/openscm/openscm-twolayermodel/blob/master/LICENSE\u003e`_.\n\n.. sec-end-license\n.. sec-end-long-description\n\n.. sec-begin-installation\n\nInstallation\n------------\n\nOpenSCM two layer model has only two dependencies:\n\n.. begin-dependencies\n\n- scmdata\u003e=0.9\n- tqdm\n\n.. end-dependencies\n\nOpenSCM two layer model can be installed with pip\n\n.. code:: bash\n\n    pip install openscm-twolayermodel\n\nIf you also want to run the example notebooks install additional\ndependencies using\n\n.. code:: bash\n\n    pip install \"openscm-twolayermodel[notebooks]\"\n\n**Coming soon** OpenSCM two layer model can also be installed with conda\n\n.. code:: bash\n\n    conda install -c conda-forge openscm-twolayermodel\n\nWe do not ship our tests with the packages.\nIf you wish to run the tests, you must install from source (or download the tests separately and run them on your installation).\n\nInstalling from source\n~~~~~~~~~~~~~~~~~~~~~~\n\nTo install from source, simply clone the repository and then install it using pip e.g. ``pip install \".[dev]\"``.\nHaving done this, the tests can be run with ``pytest tests`` or using the ``Makefile`` (``make test`` will run only the code tests, ``make checks`` will run the code tests and all other tests e.g. linting, notebooks, documentation).\n\n.. sec-end-installation\n\nFor more details, see the `development section of the docs \u003chttps://openscm-two-layer-model.readthedocs.io/en/latest/development.html\u003e`_.\n\nDocumentation\n-------------\n\nDocumentation can be found at our `documentation pages \u003chttps://openscm-two-layer-model.readthedocs.io/en/latest/\u003e`_\n(we are thankful to `Read the Docs \u003chttps://readthedocs.org/\u003e`_ for hosting us).\n\nGetting help\n------------\n\n.. sec-begin-getting-help\n\nIf you have any issues or would like to discuss a feature request, please raise them in the `OpenSCM Two Layer Model issue tracker \u003chttps://github.com/openscm/openscm-twolayermodel/issues\u003e`_.\nIf your issue is a feature request or a bug, please use the templates available, otherwise, simply open a normal issue.\n\n.. sec-end-getting-help\n\nContributing\n------------\n\nPlease see the `Development section of the docs \u003chttps://openscm-two-layer-model.readthedocs.io/en/latest/development.html\u003e`_.\n\n.. sec-begin-links\n\n.. |CI CD| image:: https://github.com/openscm/openscm-twolayermodel/workflows/OpenSCM%20Two%20Layer%20Model%20CI-CD/badge.svg\n    :target: https://github.com/openscm/openscm-twolayermodel/actions?query=workflow%3A%22OpenSCM+Two+Layer+Model+CI-CD%22\n.. |Coverage| image:: https://codecov.io/gh/openscm/openscm-twolayermodel/branch/master/graph/badge.svg\n    :target: https://codecov.io/gh/openscm/openscm-twolayermodel\n.. |Docs| image:: https://readthedocs.org/projects/openscm-two-layer-model/badge/?version=latest\n    :target: https://openscm-two-layer-model.readthedocs.io/en/latest/?badge=latest\n.. |JOSS| image:: https://joss.theoj.org/papers/94a3759c9ea117499b90c56421ef4857/status.svg\n    :target: https://joss.theoj.org/papers/94a3759c9ea117499b90c56421ef4857\n.. |PyPI Install| image:: https://github.com/openscm/openscm-twolayermodel/workflows/Test%20PyPI%20install/badge.svg\n    :target: https://github.com/openscm/openscm-twolayermodel/actions?query=workflow%3A%22Test+PyPI+install%22\n.. |PyPI| image:: https://img.shields.io/pypi/pyversions/openscm-twolayermodel.svg\n    :target: https://pypi.org/project/openscm-twolayermodel/\n.. |PyPI Version| image:: https://img.shields.io/pypi/v/openscm-twolayermodel.svg\n    :target: https://pypi.org/project/openscm-twolayermodel/\n.. |conda install| image:: https://github.com/openscm/openscm-twolayermodel/workflows/Test%20conda%20install/badge.svg\n    :target: https://github.com/openscm/openscm-twolayermodel/actions?query=workflow%3A%22Test+conda+install%22\n.. |conda platforms| image:: https://img.shields.io/conda/pn/conda-forge/openscm-twolayermodel.svg\n    :target: https://anaconda.org/conda-forge/openscm-twolayermodel\n.. |conda version| image:: https://img.shields.io/conda/vn/conda-forge/openscm-twolayermodel.svg\n    :target: https://anaconda.org/conda-forge/openscm-twolayermodel\n.. |Contributors| image:: https://img.shields.io/github/contributors/openscm/openscm-twolayermodel.svg\n    :target: https://github.com/openscm/openscm-twolayermodel/graphs/contributors\n.. |Last Commit| image:: https://img.shields.io/github/last-commit/openscm/openscm-twolayermodel.svg\n    :target: https://github.com/openscm/openscm-twolayermodel/commits/master\n.. |License| image:: https://img.shields.io/github/license/openscm/openscm-twolayermodel.svg\n    :target: https://github.com/openscm/openscm-twolayermodel/blob/master/LICENSE\n\n.. sec-end-links\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenscm%2Fopenscm-twolayermodel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenscm%2Fopenscm-twolayermodel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenscm%2Fopenscm-twolayermodel/lists"}