') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); GitHub - OpenWECD/OpenMOOR: 开源的系泊线计算程序 · GitHub
Skip to content

Repository files navigation

Openmoor is an open source cross-platform simulation program for numerical simulation of statics and dynamics of mooring systems of offshore floating wind turbines and wave energy devices. In particular, it can consider the current of arbitrary profile.

How to use

Openmoor has been compiled as dynamic linking libraries (DLL) for use in Matlab environment. Check them in the lib folder:

.
+-- lab
| +-- MoorApiwin32.dll (DLL for win32 system, tested on windows 7)
| +-- MoorApiwin64.dll (DLL for win64 system, tested on windows 7)
| +-- libMoorApi.dylib (DLL for MacOS system, tested on Sierra)
| +-- moorapi.h (Head file)
| +-- CaseOC3.xml (Input file describing mooring system)
| +-- current.dat (Input file describing current profile)
| +-- openmoor_driver.m (Example Matlab code using openmoor DLL)

Set lab as your work folder and then run openmoor_driver.m. For details on using openmoor and compiling openmoor on your own computer, please check the tutorial in pdf format in the manual folder.

The most updated information can be found on openmoor official website.

A validation example

The scaled cable model described in this paper is simulated. The unstretched length of the cable is 33 m. The computed upper end tensions agree well with the experimental data provided by the paper for these two cases.

  • Case 1: forced upper end circular motion with radius 0.2 m and period 3.5 s
  • Case 2: forced upper end circular motion with radius 0.2 m and period 1.25 s

Check reference [2] for the comparison of simulated responses and experimentally measured responses at the cable top end. The animations of the simulated cable motions in these two cases are shown below.

Case 1Case 2

Dependencies

The following open source libraries or third party functions are used by openmoor:

Check them and corresponding license in the _include_folder.

Citation

Please cite [1,2] if you use openmoor in your own work. Other works relevant to openmoor is also listed below for your interest.

References

[1] Chen, L., Basu, B. & Nielsen, S.R.K. (2018). A coupled finite difference mooring dynamics model for floating offshore wind turbine analysis. Ocean Engineering,162, 304-315.

[2] Chen, L. & Basu, B. (2018). Development of an open-source simulation tool for mooring systems. In Proceedings of the 2018 Civil Engineering Research in Ireland conference (CERI2018), Dublin, Ireland, pp. 823-828.

[3] Chen, L. & Basu, B. (2019). Wave-current interaction effects on structural responses of floating offshore wind turbines. Wind Energy, 22(2), 327-339.

[4] Chen, L., Basu, B. & Nielsen, S.R.K. (2019). Nonlinear periodic response analysis of mooring cables using harmonic balance method. Journal of Sound and Vibration, 438, 402-418.

[5] Chen, L. & Basu, B. (2018). Fatigue load estimation of a spar-type floating offshore wind turbine considering wave-current interactions. International Journal of Fatigue, 116, 421-428.

License

Openmoor is licensed under the Apache License 2.0.

Authors

About

开源的系泊线计算程序

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages