{"id":47771148,"url":"https://github.com/ergodicio/spscml","last_synced_at":"2026-04-03T09:40:34.358Z","repository":{"id":299477274,"uuid":"1003171256","full_name":"ergodicio/spscml","owner":"ergodicio","description":"Repository for the structure-preserving scientific machine learning hackathon","archived":false,"fork":false,"pushed_at":"2025-06-23T20:56:40.000Z","size":193,"stargazers_count":1,"open_issues_count":1,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-23T21:41:58.557Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ergodicio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2025-06-16T18:26:51.000Z","updated_at":"2025-06-23T20:56:44.000Z","dependencies_parsed_at":"2025-06-16T19:50:37.913Z","dependency_job_id":"fd2426f5-4e67-41cc-8948-afefa8982e32","html_url":"https://github.com/ergodicio/spscml","commit_stats":null,"previous_names":["ergodicio/spscml"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ergodicio/spscml","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ergodicio%2Fspscml","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ergodicio%2Fspscml/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ergodicio%2Fspscml/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ergodicio%2Fspscml/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ergodicio","download_url":"https://codeload.github.com/ergodicio/spscml/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ergodicio%2Fspscml/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31344873,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T08:03:20.796Z","status":"ssl_error","status_checked_at":"2026-04-03T08:00:37.834Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":[],"created_at":"2026-04-03T09:40:32.503Z","updated_at":"2026-04-03T09:40:34.350Z","avatar_url":"https://github.com/ergodicio.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Dynamical Low-Rank Project for the Structure-Preserving Scientific Computing and Machine Learning summer school\n\n**People**:\n- Jingwei Hu, project organizer (hujw@uw.edu)\n- Jack Coughlin, project lead ([johnbcoughlin.com], jack.coughlin@simulation.science)\n- Howard Cheng, subject matter expert (yhcheng8@uw.edu)\n\n## Getting set up\n\nThis repository uses `uv` to manage python dependencies. Install it from here: https://github.com/astral-sh/uv\n\nRun `uv sync` to synchronize dependencies.\n\nWe'll run commands in this repository with `uv run`. This command wrapper avoids the need for managing virtualenvs.\nUse it like this:\n```\nuv run python\n```\n\n## Hackathon task list\n\n- [ ] Implement one of both of the Vlasov solvers for the sheath problem\n    - [ ] Full-tensor Vlasov\n    - [ ] Projector-splitting DLR\n        - [ ] Works for the weak Landau damping test case\n- [ ] Check that your solver gives correct gradients for the (voltage -\u003e current density) \n      mapping by comparing to finite difference estimates\n- [ ] Build the `tanh_sheath` tesseract:\n    ```\n    uv run tesseract build tesseracts/sheaths/tanh_sheath\n    ```\n    and test it out\n    ```\n    uv run tesseract run tanh_sheath apply @tesseracts/sheaths/example_inputs/apply.json\n    ```\n- [ ] Build the Tesseract that wraps your Vlasov solver\n    ```\n    uv run tesseract build tesseracts/sheaths/...\n    ```\n    and test it out:\n    ```\n    uv run tesseract run vlasov_sheath apply @tesseracts/sheaths/example_inputs/apply.json\n    ```\n- [ ] Implement the whole-device model ODE solver's implicit Euler step function\n- [ ] Test out the whole-device model forward pass:\n    ```\n    uv run scripts/run_wdm.py\n    uv run scripts/run_wdm.py --image vlasov_sheath\n    ```\n- [ ] Deploy your Vlasov and WDM tesseracts to the cloud by pushing to a github branch\n\n### Vlasov sheath solvers\n\nThe repository contains partial code for two Vlasov solvers that can be applied to the plasma sheath problem:\n- `fulltensor_vlasov/solver.py`: A full-f Vlasov solver based on a slope-limited finite volume scheme. You'll have to add\n    - The E*df/dv term and a Poisson solve call for the electric field\n    - The BGK collision term\n- `straightforward_dlra/solver.py`: A projector-splitting dynamical low-rank solver. You'll have to add\n    - The E*df/dv term and Poisson solve calls for the electric field at each substep\n    - The BGK collision term and flux source term\n    - The absorbing wall boundary condition handling.\nBoth files contain `# HACKATHON` comments indicating work to be done to complete the solver.\n\nThe scripts `sheath_fulltensor_vlasov.py` and `sheath_dlr_vlasov.py` contain harness code to set up and solve\nthe sheath problem using the respective solver. For the DLR code, it's suggested to make sure you're on the \nright track by checking against the `weak_landau_damping.py` script.\n\n\n## Glossary\n\n- **Adiabat**: In fluid dynamics, smooth solutions of the ideal fluid equations satisfy a constant entropy relation: `d/dt(T/n^gamma) = 0`, where `gamma = 5/3` is most commonly used in three-dimensional simulations of plasma. An **adiabat** refers to a path through density/temperature space which respects this constant entropy relation. A change is **adiabatic** if it follows an adiabat. State changes can fail to be adiabatic if they are accompanied by non-ideal terms like resistivity or radiative cooling.\n- **Adjoint**: In an automatic differentiation setting, refers to the method used to differentiate through a time-dependent simulation.\n- **Bremsstrahlung radiation**: A phenomenon occurring in hot plasmas where electrons release radiation as they collide with other particles. This is a primary energy loss mechanism in hot plasmas.\n- **Current and current density**: The total current is denoted by `I`. The current _density_ is denoted by `j`. Our plasma simulations produce `j`, and we have to multiply by the cross-sectional area of the pinch to obtain `I`.\n- **Debye length**: A fundamental distance in plasmas. This is the distance that a particle travels during one period of the **plasma frequency**. In the \"unit normalization\", the Debye length is 1.\n- **Density**: The number density of particles. Denoted in units of particles per cubic meter.\n- **Electron-volt**: The most common measure of **temperature** in plasma physics. One electron-volt is equal to the energy gained by an electron as it falls through a potential difference of one volt. \n- **Inductance**: The tendency of a circuit to resist changes in the current flow. The phenomenon of inductance is related to the magnetic field produced by a current flow: current \"wants\" to flow through a wire surrounded by a magnetic field. Inductance is a property of the wire geometry.\n- **JVP**: \"Jacobian-vector product\". Computes `J(f, x0) @ w`, where `J(f, x0)` represents the Jacobian of `f` at the point `x0`, and `w` is an arbitrary vector of tangent values. JVPs are fast in forward-mode automatic differentiation.\n- **Mean free path**: The average distance that a particle will travel before being turned 90 degrees due to collisions. In our 1D simulations, it's equal to the **thermal velocity** divided by the collision frequency: `lambda_mfp = v_t / nu`.\n- **omega_p**: The symbol for the **plasma frequency**.\n- **Plasma frequency**: A fundamental frequency in plasmas. This is the frequency of the electrostatic oscillations of particles. The electrons oscillate extremely fast; the ions slightly less so. In a \"unit normalization\" Vlasov simulation where the charge, temperature and density are all 1, the plasma frequency is also 1.\n- **Resistance**: The tendency of a current-carrying medium to resist current flow. Appears in either the total-current form of Ohm's law, `V = IR`, or the volumetric version, `E = eta*j`.\n- **Sheath**: The phenomenon of a persistent electrostatic potential at plasma-wall boundaries. The sheath is caused by high electron mobility relative to the ions.\n- **Spitzer resistivity**: A well-known estimate of the resistivity of a plasma at a given temperature.\n- **Temperature**: The average energy of particles in a plasma.\n- **Thermal velocity**: The average speed of particles in a population with a given temperature. Equal to `sqrt(T / m)`, where `m` is the mass. Electrons are much faster than ions: `v_te \u003e\u003e v_ti`.\n- **VJP**: A \"vector-Jacobian product\". Computes `w.T @ J(f, x0)`, where `J(f, x0)` represents the Jacobian of `f` at the point `x0`, and `w` is an arbitrary vector of cotangent values. VJPs are fast in reverse-mode automatic differentiation (backpropagation).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fergodicio%2Fspscml","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fergodicio%2Fspscml","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fergodicio%2Fspscml/lists"}