{"id":13419350,"url":"https://github.com/mfem/mfem","last_synced_at":"2025-12-12T00:32:27.684Z","repository":{"id":33635336,"uuid":"37287688","full_name":"mfem/mfem","owner":"mfem","description":"Lightweight, general, scalable C++ library for finite element methods","archived":false,"fork":false,"pushed_at":"2025-04-09T23:20:43.000Z","size":248385,"stargazers_count":1860,"open_issues_count":259,"forks_count":522,"subscribers_count":129,"default_branch":"master","last_synced_at":"2025-04-09T23:22:34.312Z","etag":null,"topics":["amr","computational-science","fem","finite-elements","high-order","high-performance-computing","hpc","math-physics","parallel-computing","radiuss","scientific-computing"],"latest_commit_sha":null,"homepage":"http://mfem.org","language":"C++","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/mfem.png","metadata":{"files":{"readme":".gitlab/README.md","changelog":"CHANGELOG","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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}},"created_at":"2015-06-11T21:42:21.000Z","updated_at":"2025-04-09T23:16:54.000Z","dependencies_parsed_at":"2024-01-18T01:13:30.271Z","dependency_job_id":"30609612-4415-486b-bb10-4f218374e8a2","html_url":"https://github.com/mfem/mfem","commit_stats":{"total_commits":15424,"total_committers":230,"mean_commits":67.06086956521739,"dds":0.8942557053941909,"last_synced_commit":"2458a623617c43806c38ff80e56a23de680a9db4"},"previous_names":[],"tags_count":30,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mfem%2Fmfem","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mfem%2Fmfem/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mfem%2Fmfem/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mfem%2Fmfem/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mfem","download_url":"https://codeload.github.com/mfem/mfem/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248243497,"owners_count":21071054,"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":["amr","computational-science","fem","finite-elements","high-order","high-performance-computing","hpc","math-physics","parallel-computing","radiuss","scientific-computing"],"created_at":"2024-07-30T22:01:14.740Z","updated_at":"2025-12-12T00:32:27.671Z","avatar_url":"https://github.com/mfem.png","language":"C++","funding_links":[],"categories":["TODO scan for Android support in followings","C++","Finite Elements","FEA — Finite Element Analysis"],"sub_categories":["Verified vs declared"],"readme":"                    Finite Element Discretization Library\n                                   __\n                       _ __ ___   / _|  ___  _ __ ___\n                      | '_ ` _ \\ | |_  / _ \\| '_ ` _ \\\n                      | | | | | ||  _||  __/| | | | | |\n                      |_| |_| |_||_|   \\___||_| |_| |_|\n\n                               https://mfem.org\n\n\nThis directory contains most of the GitLab CI configuration. MFEM runs both PR\nand nightly testing on GitLab.\n\n# Structure\n\n## Top level\n\nThe root configuration file is `.gitlab-ci.yml` at the root of MFEM repo. This\nfile only defines three stages, a prerequisites one, and two main stages in\nwhich we trigger several sub-pipelines.\n\nWe use sub-pipelines to isolate the test for one combination of `machine`\nand `test type`.\n\nMachines typically include:\n\n* Dane: Intel Sapphire Rapids\n* Matrix: Intel Sapphire Rapids + Nvidia H100 GPU\n* Tioga: AMD MI250X GPU\n\nTest types include:\n\n* Build and test: Spack driven build of dependencies, mfem build, mfem\n  test\n* Baseline: Script driven build of dependencies, thorough testing\n\n⚠️ The sub-pipeline design allows to add a new machine or a new test type without\naltering the scheduling, execution and displaying of the others.\n\n## Sub-pipelines\n\n### build-and-test\n\nThe build-and-test sub-pipelines leverage RADIUSS Shared CI to share most of\nthe CI implementation. RADIUSS Shared CI provides a shared CI infrastructure\nvetted on most LC systems of interest and efficiently leveraging each machine\nscheduler to increase CI throughput. The maintenance of RADIUSS Shared CI is\nshared among several RADIUSS projects.\n\nJobs for the build-and-test sub-pipelines are defined in the jobs directory.\nBecause build-and-test jobs leverage Uberenv and Spack to build the\ndependencies automatically, the jobs essentially consists in a `spack spec`\ndefined in the jobs files, and some scheduling parameters defined in the\n`.gitlab/custom-jobs-and-variables.yml` file.\n\nBuild-and-test jobs all run the `tests/gitlab/build_and_test` script.\n\nThe build-and-test pipelines are controlled by the\n`.gitlab/subscribed-pipelines.yml` which defines which machines to run on and\nimplements additional features like machine availability check, and job list\ngeneration.\n\n### baseline\n\nBaseline sub-pipelines are described by files with names reflecting the\nmachine it runs on, e.g. `dane-baseline`.\n\nThose files define the *stages* and the *jobs* for the sub-pipeline. They\nalso contain any configuration that cannot be shared. For the most part\nthough, the configuration is shared and is placed in `.gitlab/configs`.\n\nWe try to keep scripts out of the CI config and share them among similar\njobs. They are gathered in `.gitlab/scripts`.\n\n## Scripts\n\nScripts specific to the CI only are in `.gitlab/scripts`. It is best practice\nto keep scripts outside the CI configuration (no bash scripts embedded in a\nyaml file) because it helps with readability, maintenance and also with\ntransition to another CI system.\n\n⚠️ Most of the scripts there are driven by environment variables and do not have a\nusage function. This should be improved.\n\n\n# More testing\n\n## Adding a new target to a build-and-test pipeline\n\n`build-and-test` pipelines rely on Spack to install dependencies. Spack is\ndriven by Uberenv which helps freezing Spack configuration: the goal being to\npoint to a specific commit in Spack and isolate its configuration so that it is\nnot influenced by the user environment. More documentation about this can be\nfound in `tests/gitlab`.\n\nIn the end, the MFEM target for which to build the dependencies is expressed\nwith a spack spec of MFEM, within the limits permitted by the MFEM spack\npackage.\n\nIn any build-and-test sub-pipeline a job basically consists in defining the\nspack spec to use. Adding a job on Dane for example resumes to:\n\n```yaml\n\u003cjob_name\u003e:\n  variables:\n    SPEC: \"\u003cspack_spec\u003e\"\n  extends: .job_on_dane\n```\n\nThe remaining and non trivial work is to make sure this spec is working. To\ntest a spec before adding it, or reproduce a CI configuration, please refer to\n`tests/gitlab/reproduce-ci-jobs-interactively.md`.\n\n⚠️ It is assumed that the spack spec applies to `mfem@develop`. That's why in the\nCI all the specs start with the compiler or the variants to apply to mfem. The\nmechanism still works with a full spec.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmfem%2Fmfem","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmfem%2Fmfem","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmfem%2Fmfem/lists"}