{"id":20364983,"url":"https://github.com/jonasbreuling/pynonsmooth","last_synced_at":"2026-05-26T23:31:49.424Z","repository":{"id":170915972,"uuid":"436878460","full_name":"JonasBreuling/PyNonsmooth","owner":"JonasBreuling","description":null,"archived":false,"fork":false,"pushed_at":"2021-12-10T06:44:54.000Z","size":18,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-04T18:46:42.140Z","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/JonasBreuling.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}},"created_at":"2021-12-10T06:44:44.000Z","updated_at":"2021-12-10T06:44:57.000Z","dependencies_parsed_at":"2023-06-29T22:15:52.475Z","dependency_job_id":null,"html_url":"https://github.com/JonasBreuling/PyNonsmooth","commit_stats":null,"previous_names":["jonasharsch/pynonsmooth","jonasbreuling/pynonsmooth"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/JonasBreuling/PyNonsmooth","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JonasBreuling%2FPyNonsmooth","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JonasBreuling%2FPyNonsmooth/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JonasBreuling%2FPyNonsmooth/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JonasBreuling%2FPyNonsmooth/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JonasBreuling","download_url":"https://codeload.github.com/JonasBreuling/PyNonsmooth/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JonasBreuling%2FPyNonsmooth/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33543973,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"ssl_error","status_checked_at":"2026-05-26T15:22:15.568Z","response_time":63,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":"2024-11-15T00:14:38.242Z","updated_at":"2026-05-26T23:31:49.406Z","avatar_url":"https://github.com/JonasBreuling.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# nonsmooth_mech_benckmarks\n\n## Table of Contents\n\n- [nonsmooth_mech_benckmarks](#nonsmooth_mech_benckmarks)\n  - [Table of Contents](#table-of-contents)\n  - [Requirements](#requirements)\n  - [Simulate a benchmark](#simulate-a-benchmark)\n  - [Mechanics](#mechanics)\n\n## Requirements\n* Python 3.x (Tested on Python 3.9.9 for macOX)\n* Python packages:\n    * numpy\n    * matplotlib\n    * tqdm (used to include progress bar)\n\n## Simulate a benchmark\nThis benchmark collection is organized as follows: \nThe folder `solvers` contains a collection of solvers, which can be used to simulate the benchmarks. The folder `benchmarks` contains a folder for each benchmark examples, e.g. the folder `benchmarks/bouncingball` for the rotating bouncing ball example. Each benchmark folder contains the file defining the benchmark system, e.g. `bouncing_ball_system.py`. The 'system' file defines the class containing all system properties and providing the mass matrix, forces, contact kinematics, etc. as methods.\nFinally the acutal simulation is done by running the 'scenario' files, e.g. `bouncing_ball_scenario1.py`, which sets the initial conditions, calls the solver and plots the results. For instance, a simulation of the bouncing ball can be performed by calling\n```bash\npython benchmarks/bouncing_ball/bouncing_ball_scenario1.py\n```\n\n## Mechanics\n\nThe most general structure of governing equations, which is able to describe any of our benchmarks is given by the following. This is also the nomenclature used in the code.\n\n*Kinematic variables*: time $`t`$, gen. coordinates $`q`$, gen. velocitites $`u`$, gen. accelerations $`a`$.\n\n*Kinetic equation*\n```math\nM(t,q)\\ du = h(t, q, u)\\ dt + W_g(t, q)\\ dP_g + W_\\gamma(t, q)\\ dP_\\gamma + W_N(t, q)\\ dP_N + W_F(t, q)\\ dP_F\n```\n*Kinematic equation*\n```math\n\\dot{q}(t, q, u) = B(t, q)\\ u + \\beta(t, q)\n```\n*Bilateral constraints*\n```math\ng(t, q) = 0\n```\n```math\n\\gamma(t, q, u) = 0\n```\n*Contact laws*: Normal cone inclusions linking gaps $`g_N(t, q)`$ and friction velcities $`\\gamma_F(t, q, u)`$ to percussion measures $`dP_N`$ and $`dP_F`$, respectively.\n\nThis nomenclature is based on \n\u003e**A nonsmooth generalized-alpha method for mechanical systems with frictional contact**\n\u003e\n\u003eGiuseppe Capobianco, Jonas Harsch, Simon R. Eugster and Remco I. Leine\n\u003e\n\u003e*Int J Numer Methods Eng. 2021; 122: 6497– 6526. https://doi.org/10.1002/nme.6801*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjonasbreuling%2Fpynonsmooth","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjonasbreuling%2Fpynonsmooth","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjonasbreuling%2Fpynonsmooth/lists"}