{"id":35847353,"url":"https://github.com/symbiotic-engineering/mdocean","last_synced_at":"2026-04-20T07:03:32.226Z","repository":{"id":37937756,"uuid":"410160635","full_name":"symbiotic-engineering/MDOcean","owner":"symbiotic-engineering","description":"Multidisciplinary Design Optimization (MDO) to optimize an ocean wave energy converter","archived":false,"fork":false,"pushed_at":"2026-04-12T21:21:57.000Z","size":95669,"stargazers_count":8,"open_issues_count":28,"forks_count":4,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-04-12T21:25:41.697Z","etag":null,"topics":["multidisciplinary-optimization","optimization","simulation","wave-energy"],"latest_commit_sha":null,"homepage":"https://sea.mae.cornell.edu/MDOcean/","language":"MATLAB","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/symbiotic-engineering.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-09-25T03:02:03.000Z","updated_at":"2026-04-11T06:25:31.000Z","dependencies_parsed_at":"2024-01-10T06:12:01.645Z","dependency_job_id":"1d26add3-918d-4682-88e7-fe839a4e1834","html_url":"https://github.com/symbiotic-engineering/MDOcean","commit_stats":{"total_commits":271,"total_committers":7,"mean_commits":"38.714285714285715","dds":"0.46125461254612543","last_synced_commit":"3828aaefb91b53d44c09a8466d6ca1f632cdb9a7"},"previous_names":["rebeccamccabe/mdocean"],"tags_count":30,"template":false,"template_full_name":null,"purl":"pkg:github/symbiotic-engineering/MDOcean","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/symbiotic-engineering%2FMDOcean","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/symbiotic-engineering%2FMDOcean/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/symbiotic-engineering%2FMDOcean/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/symbiotic-engineering%2FMDOcean/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/symbiotic-engineering","download_url":"https://codeload.github.com/symbiotic-engineering/MDOcean/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/symbiotic-engineering%2FMDOcean/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31777348,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T00:11:49.126Z","status":"ssl_error","status_checked_at":"2026-04-14T00:10:29.837Z","response_time":93,"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":["multidisciplinary-optimization","optimization","simulation","wave-energy"],"created_at":"2026-01-08T06:18:54.670Z","updated_at":"2026-04-14T01:00:46.054Z","avatar_url":"https://github.com/symbiotic-engineering.png","language":"MATLAB","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Project Status: WIP – Initial development is in progress, but there has not yet been a stable, usable release suitable for the public.](https://www.repostatus.org/badges/latest/wip.svg)](https://www.repostatus.org/#wip)\n[![Unit Tests](https://github.com/symbiotic-engineering/MDOcean/actions/workflows/tests.yml/badge.svg)](https://github.com/symbiotic-engineering/MDOcean/actions/workflows/tests.yml)\n[![codecov](https://codecov.io/gh/symbiotic-engineering/MDOcean/graph/badge.svg?token=PQNFQ72IC8)](https://codecov.io/gh/symbiotic-engineering/MDOcean)\n[![GitHub](https://img.shields.io/github/license/symbiotic-engineering/MDOcean)](https://github.com/symbiotic-engineering/MDOcean/blob/main/LICENSE.md)\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.13997243.svg)](https://doi.org/10.5281/zenodo.13997243)\n[![Open in MATLAB Online](https://www.mathworks.com/images/responsive/global/open-in-matlab-online.svg)](https://matlab.mathworks.com/open/github/v1?repo=symbiotic-engineering/MDOcean)\n[![View on File Exchange](https://www.mathworks.com/matlabcentral/images/matlab-file-exchange.svg)](https://www.mathworks.com/matlabcentral/fileexchange/180694-mdocean)\n\n# MDOcean\nThis is an open source codebase that uses Multidisciplinary Design Optimization (**MDO**) to optimize an **ocean** wave energy converter (WEC). \n\nMore specifically, it is both a multidisciplinary model and a design optimization framework for two-body point absorber WECs.\n\nMDOcean uses the SQP and pattern search algorithms to find the geometry, PTO, and structural design which optimizes the levelized cost of energy, capital cost, and average power of the Reference Model 3 (RM3) WEC, using a fast simplified frequency domain WEC model.\n\n## Features\n\n### Model features:\n- semi-analytical hydrodynamic model, using the matched eigenfunction expansion method to model linear potential flow\n- semi-analytical frequency-domain dynamic model, using describing functions to model drag and saturation nonlinearities\n- analytical structural model, using tabulated solutions and the equivalent-thickness method to model stiffened plate ultimate and fatigue limits\n- algebraic cost model, with costs scaling with PTO force and power and structural material volume\n- algebraic geometry model, calculating common areas and volumes\n- (in development) algebraic eco-cost model, with eco-costs scaling with structural material volume, hull area, and maintenance frequency\n- (in development) integration with grid model, capturing energy market prices and grid-wide emissions\n\nFor 210 sea states, the model takes 39 ms to run, which is around a 5 order of magnitude improvement compared to the equivalent ~1 hour set of parallel WEC-Sim MCR simulations.\n\n### Optimization features:\n-  SQP (gradient-based) single-objective optimization\n-  pattern search (gradient-free) and epsilon constraint SQP (gradient-based) multi-objective optimization\n-  multi-start to see how starting point affects the optimal result\n-  derivative-based local sensitivity analysis to see how parameter values affect the optimal result with very little additional computation\n-  re-optimization-based local sensitivity analysis to see how parameter values affect the optimal result with higher accuracy\n\nRunning the single-objective optimization with typical parameters reduces LCOE by 57% compared to the standard RM3 design.\n\n### Benchmarking and Validation features:\n- Validation of power production and device amplitude against WEC-Sim\n- Validation of hydrodynamic coefficents against WAMIT (for RM3 geometry) and existing matched eigenfunction expansion method results (for a benchmark geometry from Chau and Yeung 2012)\n- Validation of structural model against FEA results for RM3 geometry from Reference Model report (Neary et. al 2012)\n- Validation of economic and geometric outputs against results for RM3 geometry from Reference Model report (Neary et. al 2012)\n- Validation that power production does not violate the theoretical radiation limit\n- Unit tests, code coverage, and automatic report generation to monitor status of above checks on demand\n- Continuous integration with GitHub Actions to monitor status of above checks on every push to GitHub\n\n## Academic Context\n\nThe project is part of research in the [Symbiotic Engineering Analysis (SEA) Lab](https://sea.mae.cornell.edu/).\n\nModel journal paper citation (in prep): R. McCabe, M. Dietrich, and M. N. Haji, “Development, Validation, and Benchmarking of a Multidisciplinary Semi-Analytical Model for Wave Energy Converters,” in preparation, 2025. [Link to draft paper manuscript](https://calkit.io/symbiotic-engineering/mdocean/publications#pubs/applied-ocean-research-model/main.pdf).\n\nOptimization journal paper citation (in prep): R. McCabe, M. Dietrich, and M. N. Haji, “Leveraging Multidisciplinary Design Optimization to Advance Wave Energy Converter Viability,” in preparation, 2026. [Link to draft paper manuscript](https://calkit.io/symbiotic-engineering/mdocean/publications#pubs/renewable-energy-mdo/mdocean.pdf).\n\nConference paper citation: R. McCabe, O. Murphy, and M. N. Haji, “Multidisciplinary Optimization \nto Reduce Cost and Power Variation of a Wave Energy Converter,” \n*International Design Engineering Technical Conferences \u0026 Computers and \nInformation in Engineering Conference*, St. Louis, MO, August 14-17, 2022.\n[https://doi.org/10.1115/DETC2022-90227](https://doi.org/10.1115/DETC2022-90227).\n\nA video recording of the conference presentation is available [here](https://www.youtube.com/watch?v=LjpfXvujUGY).\n\n## Code Documentation\n\nDocumentation for the function API for this code is in progress at [this Sphinx site](https://symbiotic-engineering.github.io/MDOcean/).\n\n\n## Installation\n\nClone the repository via Git. Use the `--recursive` flag to include submodules.\n```\ngit clone --recursive https://github.com/symbiotic-engineering/MDOcean.git\n```\n\nIf you are unfamiliar with Git and want to download the code another way, click \"Code \u003e Download ZIP\" to get a .zip file, or try the \"Open in MATLAB Online\" button above to use the MATLAB Online IDE instead.\n\n## How to Use\n\nPlease see the documentation [here](https://symbiotic-engineering.github.io/MDOcean/usage.html) for instructions on how to run the simulation, optimization, or entire paper-reproduction pipeline.\nThe package [`calkit`](https://docs.calkit.org/) is used for single-button reproducibility.\nOnce the installation steps are complete, the command `calkit run --pull` will reproduce all artifacts (figures, tables, papers).\nAdditionally, [this page](https://symbiotic-engineering.github.io/MDOcean/modification.html) has guidance on how to modify the code to be used for other problems.\n\n\n## Software Authors\n\n- Rebecca McCabe, rgm222@cornell.edu (Project lead and point of contact, 2021-present) [@rebeccamccabe](https://github.com/rebeccamccabe)\n- Madison Dietrich, mjd429@cornell.edu (Project contributor, 2023-present) [@MadisonDietrich](https://github.com/MadisonDietrich)\n- Anthony Long, anl58@cornell.edu (Project contributor, 2025) [@anthnlong](https://github.com/anthnlong)\n- Olivia Murphy, om66@cornell.edu (Project contributor, 2021-22) [@ommurphy](https://github.com/ommurphy)\n- Iris Ren, zr92@cornell.edu (Project contributor, 2024) [@irin0012](https://github.com/irin0012)\n- Maha Haji, maha@cornell.edu (Advisor, 2021-present) [@maha-haji](https://github.com/maha-haji)\n\n## License\n\nThis project is released open-source under the MIT License. The validation folder contains code taken from NREL's WEC-Sim. \nThe Apache 2.0 license for this open source WEC-Sim code is included.\n\n## Dependencies\n\nThe following packages are used in this code:\n| Package | Required? |\n| ---    | ---      |\n| MATLAB | Required for simulation |\n| Statistics and Machine Learning Toolbox | Required for simulation |\n| [OpenFLASH](https://github.com/symbiotic-engineering/OpenFLASH) | Required for simulation |\n| Optimization Toolbox | Required for optimization |\n| Global Optimization Toolbox | Required for optimization |\n| Symbolic Math Toolbox | Optional for simulation code generation |\n| Parallel Computing Toolbox | Optional for speedup |\n| MATLAB Report Generator | Optional for WEC-Sim validation |\n| Simulink | Optional for WEC-Sim validation | \n| Simscape | Optional for WEC-Sim validation | \n| Simscape Multibody | Optional for WEC-Sim validation |\n| [WEC-Sim](https://github.com/WEC-Sim/WEC-Sim/) | Optional for WEC-Sim validation |\n| [SAFE](https://github.com/rebeccamccabe/SAFE-matlab) | Optional for sensitivity analysis |\n\nThe external codes (OpenFLASH, WEC-Sim, and SAFE) are included as submodules for ease of use.\nThe code has been tested on MATLAB R2022a (Windows) and R2024b (Linux), and likely works on other versions and operating systems.\n\n## Contributing\n\nSuggestions, questions, bug reports, and contributions are welcome. Open an issue or pull request. To discuss the possibility of broader collaborations, please email rgm222@cornell.edu.\n\n## Funding Acknowledgement\n\nThis material is based upon work supported by the \nNational Science Foundation Graduate Research Fellowship under \nGrant No. DGE–2139899, and the Cornell Engineering Fellowship.\nAny opinion, findings, and conclusions or recommendations \nexpressed in this material are those of the authors(s) and do not \nnecessarily reflect the views of the National Science Foundation.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsymbiotic-engineering%2Fmdocean","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsymbiotic-engineering%2Fmdocean","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsymbiotic-engineering%2Fmdocean/lists"}