{"id":13719951,"url":"https://github.com/keurfonluu/disba","last_synced_at":"2026-01-16T13:56:16.606Z","repository":{"id":46042987,"uuid":"273145262","full_name":"keurfonluu/disba","owner":"keurfonluu","description":"Numba-accelerated computation of surface wave dispersion","archived":false,"fork":false,"pushed_at":"2024-12-19T19:24:29.000Z","size":4797,"stargazers_count":168,"open_issues_count":2,"forks_count":36,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-11-27T17:47:16.442Z","etag":null,"topics":["dispersion","geosciences","python","seismology","surf96","surface-wave"],"latest_commit_sha":null,"homepage":"https://github.com/keurfonluu/disba","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/keurfonluu.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":"CONTRIBUTING.rst","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.rst","threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-06-18T04:57:57.000Z","updated_at":"2025-10-15T12:03:34.000Z","dependencies_parsed_at":"2025-04-13T03:40:11.401Z","dependency_job_id":"273c2425-061f-463c-86e4-1380894b7b87","html_url":"https://github.com/keurfonluu/disba","commit_stats":null,"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/keurfonluu/disba","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keurfonluu%2Fdisba","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keurfonluu%2Fdisba/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keurfonluu%2Fdisba/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keurfonluu%2Fdisba/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/keurfonluu","download_url":"https://codeload.github.com/keurfonluu/disba/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keurfonluu%2Fdisba/sbom","scorecard":{"id":556663,"data":{"date":"2025-08-11","repo":{"name":"github.com/keurfonluu/disba","commit":"1a9e26d49dbaadead84cdf427d6f51b3f5c3707b"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.3,"checks":[{"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":"Code-Review","score":0,"reason":"Found 0/11 approved changesets -- score normalized to 0","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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.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":"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":"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.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/keurfonluu/disba/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/keurfonluu/disba/ci.yml/master?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:23","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:24","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:27","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:28","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:33","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   5 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":"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":"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":"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":"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":"Vulnerabilities","score":9,"reason":"1 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2024-48 / GHSA-fj7x-q9j7-g6q6"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 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-20T12:33:17.140Z","repository_id":46042987,"created_at":"2025-08-20T12:33:17.140Z","updated_at":"2025-08-20T12:33:17.140Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28479039,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T11:59:17.896Z","status":"ssl_error","status_checked_at":"2026-01-16T11:55:55.838Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["dispersion","geosciences","python","seismology","surf96","surface-wave"],"created_at":"2024-08-03T01:00:58.118Z","updated_at":"2026-01-16T13:56:16.590Z","avatar_url":"https://github.com/keurfonluu.png","language":"Python","funding_links":[],"categories":["Software","Software and Tools","Synthetic seismograms"],"sub_categories":["Simulation and Modelling"],"readme":"disba\n=====\n\n|License| |Stars| |Pyversions| |Version| |Downloads| |Code style: black| |Codacy Badge| |Codecov| |Build| |Travis| |Awesome| |DOI|\n\n**disba** is a computationally efficient Python library for the modeling of surface wave dispersion that implements a subset of codes from `Computer Programs in Seismology (CPS) \u003chttp://www.eas.slu.edu/eqc/eqccps.html\u003e`__ in Python compiled `just-in-time \u003chttps://en.wikipedia.org/wiki/Just-in-time_compilation\u003e`__ with `numba \u003chttps://numba.pydata.org/\u003e`__. Such implementation alleviates the usual prerequisite for a Fortran compiler needed by other libraries also based on CPS (e.g., `pysurf96 \u003chttps://github.com/miili/pysurf96\u003e`__, `srfpython \u003chttps://github.com/obsmax/srfpython\u003e`__ and `PyLayeredModel \u003chttps://github.com/harrymd/PyLayeredModel\u003e`__) which often leads to further installation troubleshooting, especially on Windows platform.\n\n**disba** aims to be lightweight and portable without compromising on the performance. For both Rayleigh-wave and Love-wave, it is significantly faster than CPS's *surf96* program compiled with `f2py \u003chttps://np.org/devdocs/f2py/index.html\u003e`__, noticeably for large number of layers.\n\n.. list-table::\n\n   *  - |Perf Rayleigh|\n      - |Perf Love|\n\nFeatures\n--------\n\nForward modeling:\n\n-  Compute Rayleigh-wave phase or group dispersion curves using *Dunkin's matrix* or *fast delta matrix* algorithms,\n-  Compute Love-wave phase or group dispersion curves using *Thomson-Haskell* method,\n-  Compute Rayleigh-wave ellipticity.\n\nEigenfunctions and sensitivity kernels:\n\n-  Compute Rayleigh- and Love- wave eigenfunctions,\n-  Compute Rayleigh- and Love- wave phase or group velocity, and Rayleigh-wave ellipticity sensitivity kernels with respect to layer thickness, P- and S- wave velocities, and density.\n\nInstallation\n------------\n\nThe recommended way to install **disba** and all its dependencies is through the Python Package Index:\n\n.. code:: bash\n\n   pip install disba[full] --user\n\nOtherwise, clone and extract the package, then run from the package location:\n\n.. code:: bash\n\n   pip install .[full] --user\n\nTo test the integrity of the installed package, check out this repository and run:\n\n.. code:: bash\n\n   pytest\n\nDocumentation\n-------------\n\nRefer to the online `documentation \u003chttps://keurfonluu.github.io/disba/\u003e`__ for detailed description of the API and examples.\n\nAlternatively, the documentation can be built using `Sphinx \u003chttps://www.sphinx-doc.org/en/master/\u003e`__:\n\n.. code:: bash\n\n   pip install -r doc/requirements.txt\n   sphinx-build -b html doc/source doc/build\n\nUsage\n-----\n\nThe following example computes the Rayleigh- and Love- wave phase velocity dispersion curves for the 3 first modes.\n\n.. code:: python\n\n   import numpy as np\n   from disba import PhaseDispersion\n\n   # Velocity model\n   # thickness, Vp, Vs, density\n   # km, km/s, km/s, g/cm3\n   velocity_model = np.array([\n      [10.0, 7.00, 3.50, 2.00],\n      [10.0, 6.80, 3.40, 2.00],\n      [10.0, 7.00, 3.50, 2.00],\n      [10.0, 7.60, 3.80, 2.00],\n      [10.0, 8.40, 4.20, 2.00],\n      [10.0, 9.00, 4.50, 2.00],\n      [10.0, 9.40, 4.70, 2.00],\n      [10.0, 9.60, 4.80, 2.00],\n      [10.0, 9.50, 4.75, 2.00],\n   ])\n\n   # Periods must be sorted starting with low periods\n   t = np.logspace(0.0, 3.0, 100)\n\n   # Compute the 3 first Rayleigh- and Love- wave modal dispersion curves\n   # Fundamental mode corresponds to mode 0\n   pd = PhaseDispersion(*velocity_model.T)\n   cpr = [pd(t, mode=i, wave=\"rayleigh\") for i in range(3)]\n   cpl = [pd(t, mode=i, wave=\"love\") for i in range(3)]\n\n   # pd returns a namedtuple (period, velocity, mode, wave, type)\n\n.. list-table::\n\n   *  - |Sample Rayleigh|\n      - |Sample Love|\n\nLikewise, ``GroupDispersion`` can be used for group velocity.\n\n**disba**'s API is consistent across all its classes which are initialized and called in the same fashion. Thus, eigenfunctions are calculated as follow:\n\n.. code:: python\n\n   from disba import EigenFunction\n\n   eigf = EigenFunction(*velocity_model.T)\n   eigr = eigf(20.0, mode=0, wave=\"rayleigh\")\n   eigl = eigf(20.0, mode=0, wave=\"love\")\n\n   # eigf returns a namedtuple\n   #  - (depth, ur, uz, tz, tr, period, mode) for Rayleigh-wave\n   #  - (depth, uu, tt, period, mode) for Love-wave\n\n.. list-table::\n\n   *  - |Eigen Rayleigh|\n      - |Eigen Love|\n\nPhase velocity sensitivity kernels (``GroupSensitivity`` for group velocity):\n\n.. code:: python\n\n   from disba import PhaseSensitivity\n\n   ps = PhaseSensitivity(*velocity_model.T)\n   parameters = [\"thickness\", \"velocity_p\", \"velocity_s\", \"density\"]\n   skr = [ps(20.0, mode=0, wave=\"rayleigh\", parameter=parameter) for parameter in parameters]\n   skl = [ps(20.0, mode=0, wave=\"love\", parameter=parameter) for parameter in parameters]\n\n   # ps returns a namedtuple (depth, kernel, period, velocity, mode,wave, type, parameter)\n\n.. list-table::\n\n   *  - |Kernel Rayleigh|\n      - |Kernel Love|\n\nEllipticity and ellipticity sensitivity kernels:\n\n.. code:: python\n\n   from disba import Ellipticity, EllipticitySensitivity\n\n   ell = Ellipticity(*velocity_model.T)\n   rel = ell(t, mode=0)\n\n   # ell returns a namedtuple (period, ellipticity, mode)\n\n   es = EllipticitySensitivity(*velocity_model.T)\n   ek = [es(20.0, mode=0, parameter=parameter) for parameter in parameters]\n\n   # es returns a namedtuple (depth, kernel, period, velocity, mode, wave, type, parameter)\n\n.. list-table::\n\n   *  - |Sample Ellipticity|\n      - |Kernel Ellipticity|\n\nContributing\n------------\n\nPlease refer to the `Contributing\nGuidelines \u003chttps://github.com/keurfonluu/disba/blob/master/CONTRIBUTING.rst\u003e`__ to see how you can help. This project is released with a `Code of Conduct \u003chttps://github.com/keurfonluu/disba/blob/master/CODE_OF_CONDUCT.rst\u003e`__ which you agree to abide by when contributing.\n\n.. |License| image:: https://img.shields.io/github/license/keurfonluu/disba\n   :target: https://github.com/keurfonluu/disba/blob/master/LICENSE\n\n.. |Stars| image:: https://img.shields.io/github/stars/keurfonluu/disba?logo=github\n   :target: https://github.com/keurfonluu/disba\n\n.. |Pyversions| image:: https://img.shields.io/pypi/pyversions/disba.svg?style=flat\n   :target: https://pypi.org/pypi/disba/\n\n.. |Version| image:: https://img.shields.io/pypi/v/disba.svg?style=flat\n   :target: https://pypi.org/project/disba\n\n.. |Downloads| image:: https://pepy.tech/badge/disba\n   :target: https://pepy.tech/project/disba\n\n.. |Code style: black| image:: https://img.shields.io/badge/code%20style-black-000000.svg?style=flat\n   :target: https://github.com/psf/black\n\n.. |Codacy Badge| image:: https://img.shields.io/codacy/grade/1d2218bb7d0e4e0fb2dec26fa32fe92e.svg?style=flat\n   :target: https://www.codacy.com/manual/keurfonluu/disba?utm_source=github.com\u0026utm_medium=referral\u0026utm_content=keurfonluu/disba\u0026utm_campaign=Badge_Grade\n\n.. |Codecov| image:: https://img.shields.io/codecov/c/github/keurfonluu/disba.svg?style=flat\n   :target: https://codecov.io/gh/keurfonluu/disba\n\n.. |DOI| image:: https://zenodo.org/badge/DOI/10.5281/zenodo.3987395.svg?style=flat\n   :target: https://doi.org/10.5281/zenodo.3987395\n\n.. |Build| image:: https://img.shields.io/github/workflow/status/keurfonluu/disba/Python%20package\n   :target: https://github.com/keurfonluu/disba\n\n.. |Travis| image:: https://img.shields.io/travis/com/keurfonluu/disba/master?label=docs\n   :target: https://keurfonluu.github.io/disba/\n\n.. |Awesome| image:: https://img.shields.io/badge/awesome-yes-C6A4BF\n   :target: https://github.com/softwareunderground/awesome-open-geoscience\n\n.. |Perf Rayleigh| image:: https://raw.githubusercontent.com/keurfonluu/disba/e29865fb0b385b295bc55b733a138a741787879d/.github/perf_rayleigh.svg\n   :alt: perf-rayleigh\n\n.. |Perf Love| image:: https://raw.githubusercontent.com/keurfonluu/disba/5d23a8bb3967fd59c1a38b59ce1bf800749c7eb2/.github/perf_love.svg\n   :alt: perf-love\n\n.. |Sample Rayleigh| image:: https://raw.githubusercontent.com/keurfonluu/disba/5d23a8bb3967fd59c1a38b59ce1bf800749c7eb2/.github/sample_rayleigh.svg\n   :alt: sample-rayleigh\n\n.. |Sample Love| image:: https://raw.githubusercontent.com/keurfonluu/disba/5d23a8bb3967fd59c1a38b59ce1bf800749c7eb2/.github/sample_love.svg\n   :alt: sample-love\n\n.. |Sample Ellipticity| image:: https://raw.githubusercontent.com/keurfonluu/disba/5f9b95a144e3751ffa98b5860663af874c02ae1c/.github/sample_ellipticity.svg\n   :alt: sample-ellipticity\n\n.. |Eigen Rayleigh| image:: https://raw.githubusercontent.com/keurfonluu/disba/5f9b95a144e3751ffa98b5860663af874c02ae1c/.github/eigen_rayleigh.svg\n   :alt: eigen-rayleigh\n\n.. |Eigen Love| image:: https://raw.githubusercontent.com/keurfonluu/disba/5f9b95a144e3751ffa98b5860663af874c02ae1c/.github/eigen_love.svg\n   :alt: eigen-love\n\n.. |Kernel Rayleigh| image:: https://raw.githubusercontent.com/keurfonluu/disba/5f9b95a144e3751ffa98b5860663af874c02ae1c/.github/kernel_rayleigh.svg\n   :alt: kernel-rayleigh\n\n.. |Kernel Love| image:: https://raw.githubusercontent.com/keurfonluu/disba/5f9b95a144e3751ffa98b5860663af874c02ae1c/.github/kernel_love.svg\n   :alt: kernel-love\n\n.. |Kernel Ellipticity| image:: https://raw.githubusercontent.com/keurfonluu/disba/5f9b95a144e3751ffa98b5860663af874c02ae1c/.github/kernel_ellipticity.svg\n   :alt: kernel-ellipticity\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkeurfonluu%2Fdisba","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkeurfonluu%2Fdisba","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkeurfonluu%2Fdisba/lists"}