{"id":22985088,"url":"https://github.com/leehyeonbeen/recurdynpython","last_synced_at":"2025-04-02T11:09:14.824Z","repository":{"id":65666805,"uuid":"525407612","full_name":"leehyeonbeen/RecurDynPython","owner":"leehyeonbeen","description":"RecurDyn automation with Python and ProcessNet","archived":false,"fork":false,"pushed_at":"2023-09-15T17:26:04.000Z","size":590,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-08T02:11:12.211Z","etag":null,"topics":["multibody-dynamics","multibody-simulation","python","recurdyn"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/leehyeonbeen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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}},"created_at":"2022-08-16T14:08:26.000Z","updated_at":"2024-01-09T14:48:24.000Z","dependencies_parsed_at":"2024-12-04T05:51:52.604Z","dependency_job_id":"b303c829-3970-431d-998e-2e157ef94c0a","html_url":"https://github.com/leehyeonbeen/RecurDynPython","commit_stats":null,"previous_names":["hyeonbeenlee/recurdynpython","leehyeonbeen/recurdynpython"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leehyeonbeen%2FRecurDynPython","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leehyeonbeen%2FRecurDynPython/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leehyeonbeen%2FRecurDynPython/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leehyeonbeen%2FRecurDynPython/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/leehyeonbeen","download_url":"https://codeload.github.com/leehyeonbeen/RecurDynPython/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246802623,"owners_count":20836373,"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":["multibody-dynamics","multibody-simulation","python","recurdyn"],"created_at":"2024-12-15T03:20:12.733Z","updated_at":"2025-04-02T11:09:14.793Z","avatar_url":"https://github.com/leehyeonbeen.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RecurDyn ProcessNet with Python\n\u003e Automates RecurDyn operations with ProcessNet and Python.  \nFor initial setups, please follow this [link](http://www.safetyman.kr/processnet-python-%ec%82%ac%ec%9a%a9%eb%b2%95/) (Korean).    \nFor official tutorials provided by FunctionBay Inc., refer to this [link](https://www.youtube.com/watch?v=QjCFDidGmHo) (Korean).\n\n\n### Detailed instructions are provided in [Tutorial.ipynb](https://github.com/hyeonbeenlee/RecurDynPython/blob/main/Tutorial.ipynb)\n### For useful tips, check out [Tips.md](https://github.com/hyeonbeenlee/RecurDynPython/blob/main/Tips.md) (Korean)\n# Setup\nSet `rdSolverDir` to `\"\u003cYOUR_RECURDYN_INSTALL_DIR\u003e\\Bin\\Solver\\RDSolverRun.exe\"` in [GlobalVariables.py](https://github.com/hyeonbeenlee/RecurDynPython/blob/main/GlobalVariables.py).\n\n# Simulate using GUI solver\n![gui_demo](https://github.com/hyeonbeenlee/RecurDynPython/assets/78078652/fc98aef7-bc89-43e6-9415-4245846be155)\n\nCall `analysis.doe_gui.RunDOE_GUI` with arguments.  \n**You can modify DOE scenario by editing line 56~65 in [analysis/doe_gui.py](https://github.com/hyeonbeenlee/RecurDynPython/blob/main/analysis/doe_gui.py)`**  \nThis method is **_not parallelizable_**.\n\n#### Arguments\n\n- `ModelFileDir: str` Absolute path of model file (\\*.rdyn).\n- `TopFolderName: str` Folder name to create at `ModelFileDir`.\n  - Each of simulation results will be saved in this folder.\n- `NumCPUCores: int` Number of CPU threads to use per simulation.\n  - Must be one of `[0(Auto),1,2,4,8,16]`.\n- `EndTime: float` Simulation end time.\n- `NumSteps: int` Number of time steps.\n\n```\nRunDOE_GUI(\n    ModelFileDir=f\"{os.getcwd()}/SampleModel.rdyn\",\n    TopFolderName=\"TestDOE_GUI\",\n    NumCPUCores=8,\n    EndTime=1,\n    NumSteps=100,\n)\n```\n\n# Simulate using batch solver\n\u003e This method is far more stable and parallelizable compared to GUI solvers.  \n\u003e It is highly recommended to run DOEs using batch solvers, especially you're handling large, complex model.\n\n![batch_demo](https://github.com/hyeonbeenlee/RecurDynPython/assets/78078652/62b8ddea-f3a2-438a-a322-77b9e1c2b7ec)\n\nCall `analysis.doe_batch.RunDOE_Batch` with arguments.  \n**You can control DOE scenario by editing line 59~67 in [analysis/doe_batch.py](https://github.com/hyeonbeenlee/RecurDynPython/blob/main/analysis/doe_batch.py)**  \nThis method is **_parallelizable_**, but consumes **corresponding number of RecurDyn licenses**.\n\n#### Arguments\n\n- `ModelFileDir: str` Absolute path of model file (\\*.rdyn).\n- `TopFolderName: str` Folder name to create at `ModelFileDir`.\n  - Each of simulation results will be saved in this folder.\n- `NumCPUCores: int` Number of CPU threads to use per simulation.\n  - Must be one of `[0(Auto),1,2,4,8,16]`.\n- `EndTime: float` Simulation end time.\n- `NumSteps: int` Number of time steps.\n- `NumParallelBatches: int` Number of parallelized DOE runners (\\*.bat) to create. \n  - The total number of simulations of your DOE will be splited by ```NumParallelBatches```. For example, if you define DOE with 100 simulations and set this argument to `4`, `RunDOE_Batch` will configure `4` parallelized DOE runners with each of them containing 25 simulations.\n- `NumBatRunsOnThisPC: int` Number of runners to immediately execute on your current machine. Defaults to `NumParallelBatches`. Value should be within range of [`0`, `NumParallelBatches`].\n  - This argument is configured to run DOE on multiple machines. Comprehensively, if you set `NumParallelBatches` to 10 and set `NumBatRunsOnThisPC` to 3, only the first 3 runners (\\*.bat) are executed immediately on current machine. You can transfer rest of the `7` runners with corresponding subfolders (which contains `*.rmd` and `*.rss` + $\\alpha$ files) in `ModelFileDir` to other machines and execute them by hand. In this case, you need additional processing to modify RecurDyn solver path defined in runner files.\n```\nRunDOE_Batch(\n    ModelFileDir=f\"{os.getcwd()}/SampleModel.rdyn\",\n    TopFolderName=\"TestDOE_Batch\",\n    NumCPUCores=8,\n    EndTime=1,\n    NumSteps=100,\n    NumParallelBatches=5,\n)\n```\n\n#### Export data from results using `analysis.export_data.rplt2csv`\n\nNumeric simulation results are stored in `*.rplt` format.  \nExported variables are defined in `GlobalVariables.GlobVar.DataExportTargets`.  \nVariable names should be exactly the same to the ones in the `*.rplt`.  \nTo explicitly check variable names, simply import `*.rplt` file on RecurDyn GUI.\n\n```\nrplt2csv(f\"{os.getcwd()}/TestDOE_Batch\")\n```\n\nThe function will recursively scan for all `*.rplt` files in the argument directory, and export variables in `DataExportTargets` in `*.csv` format.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleehyeonbeen%2Frecurdynpython","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fleehyeonbeen%2Frecurdynpython","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleehyeonbeen%2Frecurdynpython/lists"}