diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..b8282d3 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,4 @@ +*.html linguist-detectable=false +*.js linguist-detectable=false +*.md linguist-detectable=false +*.xml linguist-detectable=false \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..3126711 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,129 @@ + CFDTool Changelog +=================== + + +2022-06-06 version 1.8.5 +------------------------ + +- Fix for STEP geometry import with >= 2 objects +- Improved and faster expression evaluation in assembly + + +2022-05-09 version 1.8.4 +------------------------- + +- Added 2D geometry tool for Bezier and spline curves +- Updated OpenCASCADE geometry kernel to v7.6.2 +- Support for binary brep (.bin) geometry format +- Updated SU2 Code CFD solver to v7.3.1 +- Added k-Omega wall function support for SU2 solver + + +2021-12-01 version 1.8.1 +------------------------- +- Geometry import option from bitmap image (bmp, jpeg, png) +- Support for structured meshing of geometry primitives +- Updated plotly library to version 2.6.2 +- Updated ParaView Glance library to version 4.17.1, + and added support for slice and isosurface plot options +- Linux support for HiDPI screens +- Mouse controls for 3D zoom, pan, and rotate + + +2021-11-01 version 1.8 +---------------------- + +- Improved graphics performance for 3D plots +- Changed 3D plots to fill the whole viewport with + CAD style orbit, pan, and zoom controls +- Added flip/reverse view option by double clicking + on the 3D xy, xz, and yz quickview buttons + + +2021-08-30 version 1.7.3 +------------------------ + +- Added view boundaries/subdomains menu option + (for specifying mesh sizes on individual geometric entities) +- Various performance improvements + + +2021-05-24 version 1.7.1 +------------------------ + +- Preliminary support for built-in and robust 3D mesh generators +- GUI menu option to manually renumber/reassign 3D boundaries +- Heated pipe with cooling fins validation tutorial + + +2020-04-19 version 1.7 +---------------------- + +- Minor update to sync with FEATool v1.14 + + +2020-03-26 version 1.6 +---------------------- + +- Updated OpenFOAM and SU2 interfaces to support parallel computations +- Added OpenFOAM binary GUI option to support user defined FOAM solvers +- Added support for ESI-OpenCFD native Windows OpenFOAM distribution + + +2020-11-01 version 1.5 +---------------------- + +- Support 3D geometry and CAD modeling +- SU2 external CFD solver integration + + +2019-09-01 version 1.4 +---------------------- + +- Support for .fes script file format +- Added built in CFD tutorials + + +2018-11-20 version 1.3 +---------------------- + +- Support for supersonic and inviscid compressible flows + (compressible Euler equations) +- OpenFOAM support for inviscid compressible flows +- Monitoring of OpenFOAM convergence curves +- NACA 4-series pre-defined wing geometry object + + +2018-10-22 version 1.2 +---------------------- + +- OpenFOAM external CFD solver integration +- Support for k-epsilon/omega turbulence models (with OpenFOAM) +- Potential flow velocity field initialization +- Improved resolution of curved geometry boundaries + + +2018-09-24 version 1.1 +---------------------- + +- Support for 2D Axisymmetry/Cylindrical coordinates + and flows with swirl (non-zero azimuthal velocity) +- Support for heat transfer modeling in 1D +- Support for importing 2D planar STL CAD geometry files +- Built-in interface to the external mesh generator + Gridgen2D with support for meshing boundary layers +- Support for importing Gmsh, GiD, Triangle, and FEniCS + grid and mesh formats +- Improved parametrization and meshing of curved boundaries +- Added automatic shock capturing and stabilization for + convection dominated flow regimes +- Improved and more efficient flow discretization +- Added advanced postprocessing functionality such as boundary + integration for computation of drag and lift coefficients +- Extended backwards compatibility to MATLAB 2009b + + +2018-08-05 version 1.0 +---------------------- + +- Initial release diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..10fb224 --- /dev/null +++ b/LICENSE @@ -0,0 +1,212 @@ +Precise Simulation Limited Software License Agreement + +CAREFULLY READ THE FOLLOWING TERMS AND CONDITIONS ("TERMS") BEFORE +INSTALLING OR USING THE PROGRAMS OR DOCUMENTATION. INSTALLING OR USING +THE PROGRAMS MEANS YOU HAVE ACCEPTED AND AGREE TO BE BOUND BY THE +TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT ACCEPT THEM, +UNINSTALL, REMOVE AND COMPLETELY DELETE THE PROGRAMS AND +DOCUMENTATION. + +1. Preamble: This Agreement governs the relationship between the +Licensee ("you", "your") and Licensor Precise Simulation Limited +("we", "us", "ours"), a duly registered company whose registered place +of business is Suite 1703, 17/F, Tai Tung Building, 8 Fleming Road, Wan +Chai, Hong Kong. This Agreement sets the terms, rights, restrictions +and obligations on using FEATool ("Software", "Program(s)") and +documentation ("Documentation") created and owned by Licensor, as +detailed herein. + +2. License Grant: Licensor hereby grants Licensee a Non-assignable & +Non-transferable, Non-exclusive license to run and use the Program, +without the rights to create derivative works, all with accordance +with the terms set forth and other legal restrictions set forth in 3rd +party software used while running Software. + +2.1 Programs: You may license a specified single installation license +("SUL"), multi-user/floating network license ("MUL"), or ("CKL") class +kit license under this Agreement, and your license rights are for the +number of installations and users set forth on the purchase order, +agreement, or issued invoice. A free limited and restricted license +("FREE/TRIAL") is granted for personal, non-commercial use for +evaluation purposes. + +a. the FREE/TRIAL license option is restricted to personal, trial, and +non-commercial use allowing for a single installation and concurrent +use of the Program. You may NOT use the Program with a FREE/TRIAL +license for any commercial, or production use, i.e., you may only use +the Program for experimental, personal, and trial use (to test the +Program). Specifically, the restrictions of the FREE/TRIAL license +Program and Software may not be circumvented in any way without +Payment for an upgraded license. + +b. the specified single installation license SUL must be installed on +a specified computer system and its use is limited to a single +concurrent instance. To change system a system transfer fee may be +required. + +c. the multi-use license option MUL may be installed on a single +networked system or server, or several systems and run concurrently +the number of instances specified in the purchase order, agreement, or +issued invoice. + +d. academic granting institutions with the class kit license CKL +option may install and use the Software in a computer lab/systems +belonging to the institute/institution and run concurrently the number +of instances specified in the purchase order, agreement, or issued +invoice. + +e. regardless of which license you have, you shall use the Programs +only for your internal operations. For the purposes of this Agreement, +"internal operations" means use of the Programs by your employees or +those of your subsidiaries or parent company and for the performance +of consulting or research for third parties who engage you as an +employee or independent contractor. You also shall not disclose any +characteristics or technical capabilities of the Programs to any third +party without our prior written authorization. + +2.2 Delivery: We may deliver the Programs and Documentation to you in +archival form over the Internet with a passcode or license key which +specifies the licensed Programs. You shall be responsible for all use +of your passcode, authorized or not, and you shall not disclose the +archive passcode or allow it to be used except for installation of the +Programs. + +2.3 Ownership: All right, title and interest in and to the licensed +Program(s), including without limitation, trade secrets and +copyrights, are, and shall at all times remain, the exclusive property +of us and you shall have no right, therein, except the expressly +limited license rights granted herein. + +2.4. Non Assignable & Non-Transferable: Licensee may not assign or +transfer his rights and duties under this license. + +2.5. The Software and Documentation are for your personal use and/or +internal business operations and are not for resale or other transfer +or disposition to any other person or entity. In addition, you +specifically agree not to: + +a. reverse engineer, decompile, disassemble, translate, modify, alter +or otherwise change the Licensor's Software or any part thereof; + +b. attempt to derive the source code, design or structure of the +Licensor's Software; + +c. sell, rent, lease, distribute, assign, sub-license, convey, +transfer, pledge as security or otherwise encumber or transfer +(including by loan or gift) the rights and licenses granted hereunder; + +d. copy, distribute (fork), or reproduce any part of the Software or +Documentation other than as allowed under this Agreement; + +e. use the Software or Documentation in any manner that violates any +statute, law, rule, regulation, directive, guideline, bylaw whether +presently in force or may be implemented by state or local +authorities. + +3. Term & Termination: The Term of this license shall be until +terminated, or until specified by issued purchase order, agreement, or +issued invoice. Licensor may terminate this Agreement, including +Licensee's license in the case where Licensee: + +a. became insolvent or otherwise entered into any liquidation process; or + +b. Licensee was in breach of any of this license's terms and +conditions and such breach was not cured, immediately upon +notification; or + +c. Licensee otherwise entered into any arrangement which caused +Licensor to be unable to enforce his rights under this License. + +4. Payment: In consideration of the License granted under clause 2, +Licensee shall pay Licensor a fee which Licensor may deem +adequate. Failure to perform payment shall construe as material breach +of this Agreement. You shall be liable for any taxes (except those on +our net income) due in connection with this Agreement. + +4.1 No purchase order or any other standardized business form issued +by you, and even if such purchase order or other standardized business +form provides that it takes precedence over any other agreement +between the parties, shall be effective to contradict, modify, add to +or delete from the terms of this Agreement in any manner +whatsoever. Any acknowledgment, in any form, of any such purchase +order or standardized business form is not recognized as a subsequent +writing and will not act as acceptance of such terms. + +5. Upgrades, Updates and Fixes: Licensor may provide Licensee, from +time to time, with Upgrades, Updates or Fixes, as detailed herein and +according to his sole discretion. Licensee hereby warrants to keep The +Software up-to-date and install all relevant updates and fixes, and +may, at his sole discretion, purchase upgrades, according to the rates +set by Licensor. Licensor shall provide any update or Fix free of +charge; however, nothing in this Agreement shall require Licensor to +provide Updates or Fixes. + +6. Support: The Software is provided under an AS-IS basis and without +any support, updates or maintenance. Nothing in this Agreement shall +require Licensor to provide Licensee with support or fixes to any bug, +failure, mis-performance or other defect in The Software. + +7. Liability: To the extent permitted under Law, The Software is +provided under an AS-IS basis. Licensor shall never, and without any +limit, be liable for any damage, cost, expense or any other payment +incurred by Licensee as a result of Software's actions, failure, bugs +and/or any other interaction between The Software and Licensee's +end-equipment, computers, other software or any 3rd party, +end-equipment, computer or services. Moreover, Licensor shall never +be liable for any defect in source code written by Licensee when +relying on The Software or using The Software's source code. + +8. Warranty: The Software is provided without any warranty; Licensor +hereby disclaims any warranty that The Software shall be error free, +without defects or code which may cause damage to Licensee's computers +or to Licensee, and that Software shall be functional. Licensee shall +be solely liable to any damage, defect or loss incurred as a result of +operating software and undertake the risks contained in running The +Software on License's Computer System(s) and Server(s). + +8.1 Prior Inspection: Licensee hereby states that he inspected The +Software thoroughly and found it satisfactory and adequate to his +needs, that it does not interfere with his regular operation and that +it does meet the standards and scope of his computer systems and +architecture. Licensee found that The Software interacts with his +development, website and server environment and that it does not +infringe any of End User License Agreement of any software Licensee +may use in performing his services. Licensee hereby waives any claims +regarding The Software's incompatibility, performance, results and +features, and warrants that he inspected the The Software. + +9. No Refunds: Licensee warrants that he inspected The Software +according to clause 8.1 and that it is adequate to his +needs. Accordingly in the case of NON-FREE licenses, as The Software +is intangible goods, Licensee shall not be, ever, entitled to any +refund, rebate, compensation or restitution for any reason whatsoever, +even if The Software contains material flaws. + +10. Technical Information. You agree that We may collect or process +technical and related information arising from Your use of the +Software which may include but may not be limited to internet protocol +address, hardware identification, operating system, application +software, peripheral hardware, debugging information, and +non-personally identifiable software usage statistics to facilitate +the provisioning of Updates, Support, invoicing or online services, +identify trends and bugs, collect activation information, usage +statistics and track other data related to Your use of the Software. + +11. Indemnification: Licensee hereby warrants to hold Licensor +harmless and indemnify Licensor for any lawsuit brought against it in +regards to Licensee's use of The Software in means that violate, +breach or otherwise circumvent this license, Licensor's intellectual +property rights or Licensor's title in The Software. Licensor shall +promptly notify Licensee in case of such legal action and request +Licensee's consent prior to any settlement in relation to such lawsuit +or claim. + +12. Governing Law, Jurisdiction: Licensee hereby agrees not to +initiate class-action lawsuits against Licensor in relation to this +license and to compensate Licensor for any legal fees, cost or +attorney fees should any claim brought by Licensee against Licensor be +denied, in part or in full. + +13. Revised Terms of Use: We may revise the terms of use of the +Programs from time to time. Revisions are effective upon receipt of +notice from us. diff --git a/README.md b/README.md new file mode 100644 index 0000000..c2e7ca1 --- /dev/null +++ b/README.md @@ -0,0 +1,207 @@ +CFDTool - _CFD Simulation Made Easy_ +==================================== + +![CFDTool Screenshot](screenshot.jpg) + +About +----- + +[**CFDTool**](https://www.cfdtool.com) is a +[Computational Fluid Dynamics (CFD)](https://en.wikipedia.org/wiki/Computational_fluid_dynamics) +Toolbox for modeling and simulation of fluid flows with coupled +heat transfer. + +Based on the [FEATool Multiphysics](https://www.featool.com) +simulation platform, _CFDTool_ is specifically designed to make fluid +dynamics and heat transfer simulations easy and fun. + + +Features +-------- + +The _CFDTool_ toolbox includes the following features: + +- Completely stand-alone and self-contained toolbox +- Fully integrated and easy to use Graphical User Interface (GUI) +- Modeling and simulation in 1D, 2D, 3D, and axisymmetric coordinate systems +- Seamless OpenFOAM® and SU2 CFD solver integrations +- Built-in geometry and CAD tools +- Automatic mesh and grid generation +- Pre-defined equations and boundary conditions: + + Incompressible viscous fluid flows (Navier-Stokes equations) + + Compressible inviscid flows (Euler equations) + + Heat transfer (Convection and Conduction) +- Multiphysics support for fluid flow and thermal analysis +- Simulation of laminar and turbulent flows (Spalart-Allmaras, + k-epsilon, and k-omega turbulence models available with OpenFOAM/SU2) +- Stationary and time-dependent analysis types +- Postprocessing and visualization + + +[System Requirements](https://www.featool.com/doc/quickstart.html#prereq) +------------------- + +_CFDTool_ is a fully integrated simulation environment, which has been +tested and verified to work with 64-bit Windows, Linux, and MacOS +operating systems with a minimum of 4 GB RAM memory. + + +[Installation](https://www.featool.com/doc/quickstart.html#install) +------------ + +In order to use _CFDTool_, the software must first be installed on the +intended computer system. It is recommended to first uninstall +previous versions before installing/upgrading to a newer version. + +Please follow the steps below to install _CFDTool_ as a stand-alone +app, or as a MATLAB® toolbox. The installers can be downloaded +directly from the +[CFDTool releases](https://github.com/precise-simulation/cfdtool/releases/latest) +and installed manually, or installed from the MATLAB® APPS and Add-On +Toolbar as a toolbox. + +

+ CFDTool Download +

+ + +### Stand-Alone App Installation + +Use the steps below to install the app in stand-alone mode + +1) First download the installer for your operating system + + + [**CFDTool Windows Installer**](https://github.com/precise-simulation/cfdtool/releases/latest/download/CFDTool_install.exe) + + + [**CFDTool Linux Installer**](https://github.com/precise-simulation/cfdtool/releases/latest/download/CFDTool.install) + +2) Save it to a directory and run the installer. This will first +download and/or install the application runtime if required (which may +require up to 10 GB space to install), and then the program file will +be extracted. + +3) When everything has been installed, run the program file to start +_CFDTool_. Please be patient as the application runtime can take some +time to start. + + +### MATLAB® Toolbox Installation + +Follow the steps below to install _FEATool_ as a MATLAB® toolbox, and +to enable running MATLAB® simulation m-scripts + +1) Download the + [CFDTool.mlappinstall](https://github.com/precise-simulation/cfdtool/releases/latest/download/CFDTool.mlappinstall) + toolbox installation file. + +2) Then start MATLAB®, press the **APPS** toolbar button, + and select the **Install App** button. + +3) When prompted to choose a toolbox file to install, select the + **CFDTool.mlappinstall** file and press **OK**. + +4) Press the **Install** button if prompted to _"Install to My Apps"_. + +![CFDTool MATLAB® Toolbox Installation](https://www.featool.com/doc/featool-multiphysics-toolbox-installation_50.jpg) + +Once the toolbox has been installed, an app icon will be available in +the _APPS_ toolbar to start the _CFDTool_ GUI. (Note that MATLAB® may +not show or give any indication of the toolbox installation progress +or completion.) + + +[OpenFOAM® CFD Solver](https://featool.com/doc/openfoam.html) +-------------------- + +The optional OpenFOAM CFD solver integration makes it easy to perform +both laminar and turbulent high performance CFD simulations. OpenFOAM +CFD simulations often results in a magnitude or more speedup for +instationary simulations compared to the built-in flow +solvers. Additionally, with the multi-simulation solver integration in +_CFDTool_ it is possible to compare and better validate simulation +results obtained using both the built-in and OpenFOAM CFD solvers. + +The OpenFOAM solver binaries are currently not included with _CFDTool_ +and must be installed separately. The OpenFOAM solver integration has +been verified with OpenFOAM versions 2021 and 9. For Microsoft Windows +systems it is recommended to install and use the pre-compiled +Native-windows/mingw binaries available from +[OpenCFD ESI](https://develop.openfoam.com/Development/openfoam/-/wikis/precompiled/windows), +or the distribution from the +[OpenFOAM Foundation](https://openfoam.org/download) +for Linux and MacOS systems. + + +Basic Use +--------- + +_CFDTool_ and its GUI has been specifically designed to be as easy to +use as possible, and making learning CFD simulation by experimentation +easy. + +The modeling process is divided into six different steps or modes + +- **Geometry** - Definition of the geometry to be modeled +- **Grid** - Subdivision of the geometry into smaller cells suitable + for computation +- **Equation** - Specification of material parameters and coefficients +- **Boundary** - Boundary conditions specify how the model interacts + with the surrounding environment (outside the geometry) +- **Solve** - Solution and simulation of the defined model problem +- **Post** - Visualization and postprocessing + +These modes can be accessed by clicking on the corresponding buttons +in left hand side _Mode_ toolbar. The different modes may have +specialized and different _Tools_ available in the corresponding +toolbar. Advanced mode options may also be available in the +corresponding menus. + +A number of pre-defined fluid flow and heat transfer tutorial examples +are available under the **File** > **Model Examples and Tutorials...** +menu option. + +Basic use and how to set up and model turbulent flow past a +backwards facing step with OpenFOAM is explained in the +[linked video tutorial](https://youtu.be/gHGttc31xj0) +(click on the image below to start the tutorial). + +

+ + CFDTool & OpenFOAM GUI Video Tutorial + +

+ + +Documentation +------------- + +The _FEATool_ +[documentation](https://www.featool.com/doc), +which shares most functionality with _CFDTool_, is available online, +and also by selecting the corresponding option in the _Help_ menu of +the _CFDTool_ GUI. + + +License +------- + +(C) Copyright 2013-2022 by Precise Simulation Limited. +All Rights Reserved. + +CFDToolâ„¢ and FEATool Multiphysicsâ„¢ are trademarks of Precise +Simulation Limited. MATLAB® is a registered trademark of The +MathWorks, Inc. OPENFOAM® is a registered trade mark of OpenCFD +Limited. All other trademarks are the property of their respective +owners. Precise Simulation Ltd and its products are not affiliated +with, endorsed by, sponsored by these trademark owners. + +The license agreement for using CFDToolâ„¢ is included with the +distribution and can also be accessed from the _Help_ menu in the +application. + +Carefully read the license terms and conditions before installing or +using the programs or documentation. Installing or using the programs +means you have accepted and agree to be bound by the terms and +conditions of this agreement. if you do not accept them, uninstall, +remove and completely delete the programs and documentation. diff --git a/THIRDPARTY b/THIRDPARTY new file mode 100644 index 0000000..6e8ae20 --- /dev/null +++ b/THIRDPARTY @@ -0,0 +1,2682 @@ +Third Party Software Components +------------------------------- + +The FEATool Multiphysics software distribution may include, contain, +or be distributed with the following third-party software components: + +- fsparse, Copyright (c) 2017, Stefan Engblom. + +You may download all of **stenglib** and +use, modify and redistribute it in any way you like. A +redistributor must fully attribute the authorship and make a good +effort to cite the original location of the software. A researcher +making *critical* use of the software in research is requested to +acknowledge this in publications related to the +research. A company may use the code in software products provided +that the original location and the author is clearly cited. + +All code provided here comes with absolutely **no warranty** +and **no support** whatsoever is given. + +There are a lot of freeware available on the net. Do **not** +download unless you agree to the above license. + + +- ILU(k) Preconditioner, Copyright (c) 2015, Killian Miller All rights + reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +- Lapack, Copyright (c) 1992-2017 The University of Tennessee and The + University of Tennessee Research Foundation. All rights reserved. + Copyright (c) 2000-2017 The University of California Berkeley. All + rights reserved. Copyright (c) 2006-2017 The University of Colorado + Denver. All rights reserved. + +$COPYRIGHT$ + +Additional copyrights may follow + +$HEADER$ + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +- Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +- Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer listed + in this license in the documentation and/or other materials + provided with the distribution. + +- Neither the name of the copyright holders nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +The copyright holders provide no reassurances that the source code +provided does not infringe any patent, copyright, or any other +intellectual property rights of third parties. The copyright holders +disclaim any liability to any recipient for claims brought against +recipient by any third party for infringement of that parties +intellectual property rights. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +- METIS/ParMETIS, Copyright 1995-2013, Regents of the University of Minnesota + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +implied. See the License for the specific language governing +permissions and limitations under the License. + + +- MUMPS, Copyright 1991-2019 CERFACS, CNRS, ENS Lyon, INP Toulouse, + Inria, Mumps Technologies, University of Bordeaux. + + This version of MUMPS is provided to you free of charge. It is + released under the CeCILL-C license, + http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.html, + except for the external and optional ordering PORD, + in separate directory PORD, which is public domain (see PORD/README). + + You can acknowledge (using references [1] and [2]) the contribution of + this package in any scientific publication dependent upon the use of + the package. Please use reasonable endeavours to notify the authors + of the package of this publication. + + [1] P. R. Amestoy, I. S. Duff, J. Koster and J.-Y. L'Excellent, + A fully asynchronous multifrontal solver using distributed dynamic + scheduling, SIAM Journal on Matrix Analysis and Applications, + Vol 23, No 1, pp 15-41 (2001). + + [2] P. R. Amestoy, A. Buttari, J.-Y. L'Excellent and T. Mary, + Performance and scalability of the block low-rank multifrontal + factorization on multicore architectures, + ACM Transactions on Mathematical Software, + Vol 45, Issue 1, pp 2:1-2:26 (2019) + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited + liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + + The fact that you are presently reading this means that you have had + knowledge of the CeCILL-C license and that you accept its terms. + + +- OpenCASCADE + +Open CASCADE exception (version 1.0) to GNU LGPL version 2.1. + +The object code (i.e. not a source) form of a "work that uses the Library" +can incorporate material from a header file that is part of the Library. +As a special exception to the GNU Lesser General Public License version 2.1, +you may distribute such object code incorporating material from header files +provided with the Open CASCADE Technology libraries (including code of CDL +generic classes) under terms of your choice, provided that you give +prominent notice in supporting documentation to this code that it makes use +of or is based on facilities provided by the Open CASCADE Technology software. + + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + +- OpenBLAS, Copyright (c) 2011-2014, The OpenBLAS Project All rights + reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + 3. Neither the name of the OpenBLAS project nor the names of + its contributors may be used to endorse or promote products + derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +- OpenFOAM is distributed by the OpenFOAM Foundation and is freely + available and open source, licensed under the GNU General Public + License. + +FEATool Multiphysics is not approved or endorsed by OpenCFD Limited, +producer and distributor of the OpenFOAM software via +www.openfoam.com, and owner of the OPENFOAM and OpenCFD trade +marks. OPENFOAM is a registered trade mark of OpenCFD Limited, +producer and distributor of the OpenFOAM software via +www.openfoam.com. + + +- RedbKIT, Copyright (c) 2015-2016, Ecole Polytechnique Fédérale de + Lausanne (EPFL) All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +- Scotch, CeCILL-C FREE SOFTWARE LICENSE AGREEMENT + + + Notice + +This Agreement is a Free Software license agreement that is the result +of discussions between its authors in order to ensure compliance with +the two main principles guiding its drafting: + + * firstly, compliance with the principles governing the distribution + of Free Software: access to source code, broad rights granted to + users, + * secondly, the election of a governing law, French law, with which + it is conformant, both as regards the law of torts and + intellectual property law, and the protection that it offers to + both authors and holders of the economic rights over software. + +The authors of the CeCILL-C (for Ce[a] C[nrs] I[nria] L[ogiciel] L[ibre]) +license are: + +Commissariat à l'Energie Atomique - CEA, a public scientific, technical +and industrial research establishment, having its principal place of +business at 25 rue Leblanc, immeuble Le Ponant D, 75015 Paris, France. + +Centre National de la Recherche Scientifique - CNRS, a public scientific +and technological establishment, having its principal place of business +at 3 rue Michel-Ange, 75794 Paris cedex 16, France. + +Institut National de Recherche en Informatique et en Automatique - +INRIA, a public scientific and technological establishment, having its +principal place of business at Domaine de Voluceau, Rocquencourt, BP +105, 78153 Le Chesnay cedex, France. + + + Preamble + +The purpose of this Free Software license agreement is to grant users +the right to modify and re-use the software governed by this license. + +The exercising of this right is conditional upon the obligation to make +available to the community the modifications made to the source code of +the software so as to contribute to its evolution. + +In consideration of access to the source code and the rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors only have limited liability. + +In this respect, the risks associated with loading, using, modifying +and/or developing or reproducing the software by the user are brought to +the user's attention, given its Free Software status, which may make it +complicated to use, with the result that its use is reserved for +developers and experienced professionals having in-depth computer +knowledge. Users are therefore encouraged to load and test the +suitability of the software as regards their requirements in conditions +enabling the security of their systems and/or data to be ensured and, +more generally, to use and operate it in the same conditions of +security. This Agreement may be freely reproduced and published, +provided it is not altered, and that no provisions are either added or +removed herefrom. + +This Agreement may apply to any or all software for which the holder of +the economic rights decides to submit the use thereof to its provisions. + + + Article 1 - DEFINITIONS + +For the purpose of this Agreement, when the following expressions +commence with a capital letter, they shall have the following meaning: + +Agreement: means this license agreement, and its possible subsequent +versions and annexes. + +Software: means the software in its Object Code and/or Source Code form +and, where applicable, its documentation, "as is" when the Licensee +accepts the Agreement. + +Initial Software: means the Software in its Source Code and possibly its +Object Code form and, where applicable, its documentation, "as is" when +it is first distributed under the terms and conditions of the Agreement. + +Modified Software: means the Software modified by at least one +Integrated Contribution. + +Source Code: means all the Software's instructions and program lines to +which access is required so as to modify the Software. + +Object Code: means the binary files originating from the compilation of +the Source Code. + +Holder: means the holder(s) of the economic rights over the Initial +Software. + +Licensee: means the Software user(s) having accepted the Agreement. + +Contributor: means a Licensee having made at least one Integrated +Contribution. + +Licensor: means the Holder, or any other individual or legal entity, who +distributes the Software under the Agreement. + +Integrated Contribution: means any or all modifications, corrections, +translations, adaptations and/or new functions integrated into the +Source Code by any or all Contributors. + +Related Module: means a set of sources files including their +documentation that, without modification to the Source Code, enables +supplementary functions or services in addition to those offered by the +Software. + +Derivative Software: means any combination of the Software, modified or +not, and of a Related Module. + +Parties: mean both the Licensee and the Licensor. + +These expressions may be used both in singular and plural form. + + + Article 2 - PURPOSE + +The purpose of the Agreement is the grant by the Licensor to the +Licensee of a non-exclusive, transferable and worldwide license for the +Software as set forth in Article 5 hereinafter for the whole term of the +protection granted by the rights over said Software. + + + Article 3 - ACCEPTANCE + +3.1 The Licensee shall be deemed as having accepted the terms and +conditions of this Agreement upon the occurrence of the first of the +following events: + + * (i) loading the Software by any or all means, notably, by + downloading from a remote server, or by loading from a physical + medium; + * (ii) the first time the Licensee exercises any of the rights + granted hereunder. + +3.2 One copy of the Agreement, containing a notice relating to the +characteristics of the Software, to the limited warranty, and to the +fact that its use is restricted to experienced users has been provided +to the Licensee prior to its acceptance as set forth in Article 3.1 +hereinabove, and the Licensee hereby acknowledges that it has read and +understood it. + + + Article 4 - EFFECTIVE DATE AND TERM + + + 4.1 EFFECTIVE DATE + +The Agreement shall become effective on the date when it is accepted by +the Licensee as set forth in Article 3.1. + + + 4.2 TERM + +The Agreement shall remain in force for the entire legal term of +protection of the economic rights over the Software. + + + Article 5 - SCOPE OF RIGHTS GRANTED + +The Licensor hereby grants to the Licensee, who accepts, the following +rights over the Software for any or all use, and for the term of the +Agreement, on the basis of the terms and conditions set forth hereinafter. + +Besides, if the Licensor owns or comes to own one or more patents +protecting all or part of the functions of the Software or of its +components, the Licensor undertakes not to enforce the rights granted by +these patents against successive Licensees using, exploiting or +modifying the Software. If these patents are transferred, the Licensor +undertakes to have the transferees subscribe to the obligations set +forth in this paragraph. + + + 5.1 RIGHT OF USE + +The Licensee is authorized to use the Software, without any limitation +as to its fields of application, with it being hereinafter specified +that this comprises: + + 1. permanent or temporary reproduction of all or part of the Software + by any or all means and in any or all form. + + 2. loading, displaying, running, or storing the Software on any or + all medium. + + 3. entitlement to observe, study or test its operation so as to + determine the ideas and principles behind any or all constituent + elements of said Software. This shall apply when the Licensee + carries out any or all loading, displaying, running, transmission + or storage operation as regards the Software, that it is entitled + to carry out hereunder. + + + 5.2 RIGHT OF MODIFICATION + +The right of modification includes the right to translate, adapt, +arrange, or make any or all modifications to the Software, and the right +to reproduce the resulting software. It includes, in particular, the +right to create a Derivative Software. + +The Licensee is authorized to make any or all modification to the +Software provided that it includes an explicit notice that it is the +author of said modification and indicates the date of the creation thereof. + + + 5.3 RIGHT OF DISTRIBUTION + +In particular, the right of distribution includes the right to publish, +transmit and communicate the Software to the general public on any or +all medium, and by any or all means, and the right to market, either in +consideration of a fee, or free of charge, one or more copies of the +Software by any means. + +The Licensee is further authorized to distribute copies of the modified +or unmodified Software to third parties according to the terms and +conditions set forth hereinafter. + + + 5.3.1 DISTRIBUTION OF SOFTWARE WITHOUT MODIFICATION + +The Licensee is authorized to distribute true copies of the Software in +Source Code or Object Code form, provided that said distribution +complies with all the provisions of the Agreement and is accompanied by: + + 1. a copy of the Agreement, + + 2. a notice relating to the limitation of both the Licensor's + warranty and liability as set forth in Articles 8 and 9, + +and that, in the event that only the Object Code of the Software is +redistributed, the Licensee allows effective access to the full Source +Code of the Software at a minimum during the entire period of its +distribution of the Software, it being understood that the additional +cost of acquiring the Source Code shall not exceed the cost of +transferring the data. + + + 5.3.2 DISTRIBUTION OF MODIFIED SOFTWARE + +When the Licensee makes an Integrated Contribution to the Software, the +terms and conditions for the distribution of the resulting Modified +Software become subject to all the provisions of this Agreement. + +The Licensee is authorized to distribute the Modified Software, in +source code or object code form, provided that said distribution +complies with all the provisions of the Agreement and is accompanied by: + + 1. a copy of the Agreement, + + 2. a notice relating to the limitation of both the Licensor's + warranty and liability as set forth in Articles 8 and 9, + +and that, in the event that only the object code of the Modified +Software is redistributed, the Licensee allows effective access to the +full source code of the Modified Software at a minimum during the entire +period of its distribution of the Modified Software, it being understood +that the additional cost of acquiring the source code shall not exceed +the cost of transferring the data. + + + 5.3.3 DISTRIBUTION OF DERIVATIVE SOFTWARE + +When the Licensee creates Derivative Software, this Derivative Software +may be distributed under a license agreement other than this Agreement, +subject to compliance with the requirement to include a notice +concerning the rights over the Software as defined in Article 6.4. +In the event the creation of the Derivative Software required modification +of the Source Code, the Licensee undertakes that: + + 1. the resulting Modified Software will be governed by this Agreement, + 2. the Integrated Contributions in the resulting Modified Software + will be clearly identified and documented, + 3. the Licensee will allow effective access to the source code of the + Modified Software, at a minimum during the entire period of + distribution of the Derivative Software, such that such + modifications may be carried over in a subsequent version of the + Software; it being understood that the additional cost of + purchasing the source code of the Modified Software shall not + exceed the cost of transferring the data. + + + 5.3.4 COMPATIBILITY WITH THE CeCILL LICENSE + +When a Modified Software contains an Integrated Contribution subject to +the CeCILL license agreement, or when a Derivative Software contains a +Related Module subject to the CeCILL license agreement, the provisions +set forth in the third item of Article 6.4 are optional. + + + Article 6 - INTELLECTUAL PROPERTY + + + 6.1 OVER THE INITIAL SOFTWARE + +The Holder owns the economic rights over the Initial Software. Any or +all use of the Initial Software is subject to compliance with the terms +and conditions under which the Holder has elected to distribute its work +and no one shall be entitled to modify the terms and conditions for the +distribution of said Initial Software. + +The Holder undertakes that the Initial Software will remain ruled at +least by this Agreement, for the duration set forth in Article 4.2. + + + 6.2 OVER THE INTEGRATED CONTRIBUTIONS + +The Licensee who develops an Integrated Contribution is the owner of the +intellectual property rights over this Contribution as defined by +applicable law. + + + 6.3 OVER THE RELATED MODULES + +The Licensee who develops a Related Module is the owner of the +intellectual property rights over this Related Module as defined by +applicable law and is free to choose the type of agreement that shall +govern its distribution under the conditions defined in Article 5.3.3. + + + 6.4 NOTICE OF RIGHTS + +The Licensee expressly undertakes: + + 1. not to remove, or modify, in any manner, the intellectual property + notices attached to the Software; + + 2. to reproduce said notices, in an identical manner, in the copies + of the Software modified or not; + + 3. to ensure that use of the Software, its intellectual property + notices and the fact that it is governed by the Agreement is + indicated in a text that is easily accessible, specifically from + the interface of any Derivative Software. + +The Licensee undertakes not to directly or indirectly infringe the +intellectual property rights of the Holder and/or Contributors on the +Software and to take, where applicable, vis-à-vis its staff, any and all +measures required to ensure respect of said intellectual property rights +of the Holder and/or Contributors. + + + Article 7 - RELATED SERVICES + +7.1 Under no circumstances shall the Agreement oblige the Licensor to +provide technical assistance or maintenance services for the Software. + +However, the Licensor is entitled to offer this type of services. The +terms and conditions of such technical assistance, and/or such +maintenance, shall be set forth in a separate instrument. Only the +Licensor offering said maintenance and/or technical assistance services +shall incur liability therefor. + +7.2 Similarly, any Licensor is entitled to offer to its licensees, under +its sole responsibility, a warranty, that shall only be binding upon +itself, for the redistribution of the Software and/or the Modified +Software, under terms and conditions that it is free to decide. Said +warranty, and the financial terms and conditions of its application, +shall be subject of a separate instrument executed between the Licensor +and the Licensee. + + + Article 8 - LIABILITY + +8.1 Subject to the provisions of Article 8.2, the Licensee shall be +entitled to claim compensation for any direct loss it may have suffered +from the Software as a result of a fault on the part of the relevant +Licensor, subject to providing evidence thereof. + +8.2 The Licensor's liability is limited to the commitments made under +this Agreement and shall not be incurred as a result of in particular: +(i) loss due the Licensee's total or partial failure to fulfill its +obligations, (ii) direct or consequential loss that is suffered by the +Licensee due to the use or performance of the Software, and (iii) more +generally, any consequential loss. In particular the Parties expressly +agree that any or all pecuniary or business loss (i.e. loss of data, +loss of profits, operating loss, loss of customers or orders, +opportunity cost, any disturbance to business activities) or any or all +legal proceedings instituted against the Licensee by a third party, +shall constitute consequential loss and shall not provide entitlement to +any or all compensation from the Licensor. + + + Article 9 - WARRANTY + +9.1 The Licensee acknowledges that the scientific and technical +state-of-the-art when the Software was distributed did not enable all +possible uses to be tested and verified, nor for the presence of +possible defects to be detected. In this respect, the Licensee's +attention has been drawn to the risks associated with loading, using, +modifying and/or developing and reproducing the Software which are +reserved for experienced users. + +The Licensee shall be responsible for verifying, by any or all means, +the suitability of the product for its requirements, its good working +order, and for ensuring that it shall not cause damage to either persons +or properties. + +9.2 The Licensor hereby represents, in good faith, that it is entitled +to grant all the rights over the Software (including in particular the +rights set forth in Article 5). + +9.3 The Licensee acknowledges that the Software is supplied "as is" by +the Licensor without any other express or tacit warranty, other than +that provided for in Article 9.2 and, in particular, without any warranty +as to its commercial value, its secured, safe, innovative or relevant +nature. + +Specifically, the Licensor does not warrant that the Software is free +from any error, that it will operate without interruption, that it will +be compatible with the Licensee's own equipment and software +configuration, nor that it will meet the Licensee's requirements. + +9.4 The Licensor does not either expressly or tacitly warrant that the +Software does not infringe any third party intellectual property right +relating to a patent, software or any other property right. Therefore, +the Licensor disclaims any and all liability towards the Licensee +arising out of any or all proceedings for infringement that may be +instituted in respect of the use, modification and redistribution of the +Software. Nevertheless, should such proceedings be instituted against +the Licensee, the Licensor shall provide it with technical and legal +assistance for its defense. Such technical and legal assistance shall be +decided on a case-by-case basis between the relevant Licensor and the +Licensee pursuant to a memorandum of understanding. The Licensor +disclaims any and all liability as regards the Licensee's use of the +name of the Software. No warranty is given as regards the existence of +prior rights over the name of the Software or as regards the existence +of a trademark. + + + Article 10 - TERMINATION + +10.1 In the event of a breach by the Licensee of its obligations +hereunder, the Licensor may automatically terminate this Agreement +thirty (30) days after notice has been sent to the Licensee and has +remained ineffective. + +10.2 A Licensee whose Agreement is terminated shall no longer be +authorized to use, modify or distribute the Software. However, any +licenses that it may have granted prior to termination of the Agreement +shall remain valid subject to their having been granted in compliance +with the terms and conditions hereof. + + + Article 11 - MISCELLANEOUS + + + 11.1 EXCUSABLE EVENTS + +Neither Party shall be liable for any or all delay, or failure to +perform the Agreement, that may be attributable to an event of force +majeure, an act of God or an outside cause, such as defective +functioning or interruptions of the electricity or telecommunications +networks, network paralysis following a virus attack, intervention by +government authorities, natural disasters, water damage, earthquakes, +fire, explosions, strikes and labor unrest, war, etc. + +11.2 Any failure by either Party, on one or more occasions, to invoke +one or more of the provisions hereof, shall under no circumstances be +interpreted as being a waiver by the interested Party of its right to +invoke said provision(s) subsequently. + +11.3 The Agreement cancels and replaces any or all previous agreements, +whether written or oral, between the Parties and having the same +purpose, and constitutes the entirety of the agreement between said +Parties concerning said purpose. No supplement or modification to the +terms and conditions hereof shall be effective as between the Parties +unless it is made in writing and signed by their duly authorized +representatives. + +11.4 In the event that one or more of the provisions hereof were to +conflict with a current or future applicable act or legislative text, +said act or legislative text shall prevail, and the Parties shall make +the necessary amendments so as to comply with said act or legislative +text. All other provisions shall remain effective. Similarly, invalidity +of a provision of the Agreement, for any reason whatsoever, shall not +cause the Agreement as a whole to be invalid. + + + 11.5 LANGUAGE + +The Agreement is drafted in both French and English and both versions +are deemed authentic. + + + Article 12 - NEW VERSIONS OF THE AGREEMENT + +12.1 Any person is authorized to duplicate and distribute copies of this +Agreement. + +12.2 So as to ensure coherence, the wording of this Agreement is +protected and may only be modified by the authors of the License, who +reserve the right to periodically publish updates or new versions of the +Agreement, each with a separate number. These subsequent versions may +address new issues encountered by Free Software. + +12.3 Any Software distributed under a given version of the Agreement may +only be subsequently distributed under the same version of the Agreement +or a subsequent version. + + + Article 13 - GOVERNING LAW AND JURISDICTION + +13.1 The Agreement is governed by French law. The Parties agree to +endeavor to seek an amicable solution to any disagreements or disputes +that may arise during the performance of the Agreement. + +13.2 Failing an amicable solution within two (2) months as from their +occurrence, and unless emergency proceedings are necessary, the +disagreements or disputes shall be referred to the Paris Courts having +jurisdiction, by the more diligent Party. + + +Version 1.0 dated 2006-09-05. + +- SU2 + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + +- PlotlyJS + +The MIT License (MIT) + +Copyright (c) 2017 Plotly, Inc + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +- ParaView Glance + +BSD 3-Clause License + +Copyright (c) 2017, Kitware, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +- AMGCL + +MIT License + +Copyright (c) 2012-2020 Denis Demidov + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +- Netgen, Copyright (c) Joachim Schoeberl 2009-2021. + + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + +- TetWild, Copyright (c) Yixin Hu 2018-2020 + +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. diff --git a/cfdtool.m b/cfdtool.m new file mode 100644 index 0000000..7308074 --- /dev/null +++ b/cfdtool.m @@ -0,0 +1,24 @@ +%Start CFDTool. +% +% This command starts the main application GUI. The toolbox can +% +% +% cfdtool test % Run all test suites +% cfdtool testt % Run tests for GUI tutorials +% +% +% and optionally with a vector specifying which tests to run +% +% cfdtool test/testt [#] % Run selected tests for test suite +% +% To automatically load a model file or (.fes) script on startup use +% +% cfdtool filename % Start GUI and load model +% +% Furthermore, the following maintenance tasks can also be performed +% +% cfdtool activate % Activate product license +% cfdtool deactivate % Release/free activated license +% cfdtool sysinfo % Print system information + +% Copyright 2013-2022 Precise Simulation, Ltd. \ No newline at end of file diff --git a/download.png b/download.png new file mode 100644 index 0000000..a3cb547 Binary files /dev/null and b/download.png differ diff --git a/screenshot.jpg b/screenshot.jpg new file mode 100644 index 0000000..238dda3 Binary files /dev/null and b/screenshot.jpg differ diff --git a/tutorials/01_Quickstart/02_heat_exchanger1.fes b/tutorials/01_Quickstart/02_heat_exchanger1.fes new file mode 100644 index 0000000..75444b4 --- /dev/null +++ b/tutorials/01_Quickstart/02_heat_exchanger1.fes @@ -0,0 +1,121 @@ +{"meta":{"app":"CFDTool","author":"Precise Simulation","build":"1.4","date":"02-Sep-2019","descr":["This heat exchanger example illustrates the multiphysics modeling capabilities of CFDTool. The model consists of a series of heated pipes surrounded by a fluid at a lower temperature, and features effects of both free and forced convection. Two types of physical phenomena are considered, fluid flow which is modeled by the Navier-Stokes equations, and heat transfer modeled by a convection and conduction transport equation for the temperature. This system features a two-way multiphysics coupling, the fluid is coupled to and transports the temperature field, and the temperature is also coupled back to the fluid via the Boussinesq approximation accounting for buoyancy effects.","","Due to symmetry one can simplify the full geometry and only study a two dimensional slice between the heated pipes. The geometry will therefore consist of a _0.0075_ by _0.05 m_ rectangle from which a half circle with radius _0.003 m_ centered at _(0, 0.02)_ is removed. The mechanism for heating the pipes is not taken in consideration and are thus assumed to be at a fixed temperature of _Th = 330 K_. A cooling fluid flows from the bottom to the top and has an inlet temperature of _Tc = 300 K_. The other fluid and material parameters can be found in the model tutorial."],"dim":2,"image":"heat_exchanger1.jpg","keyw":["quickstart","heat_exchanger"],"mlver":"R2019a","name":"heat_exchanger1","phys":["Heat Transfer","Navier-Stokes Equations"],"system":"","time":737442,"title":"Heat Exchanger","type":"Multiphysics","user":"precsim","ver":[1,4,0]}, +"fields":["type","id","ui_arg","fcn_type","fcn_oarg"], +"data":[ +["uipushtool","Standard.NewFigure",[],"ClickedCallback",[]], +["uicontrol","radio_2d",0,"Callback",[]], +["imgcap"], +["uicontrol","button_dlgnew_ok",[],"Callback",[]], +["uitext*",[],"The geometry of the heat exchanger cross section can be created by first making a square and a circle, and then subtracting the circle from the square."], +["uicontrol","button_rectangle",[],"Callback",[0,1,0,1,"R1"]], +["uitext",[],"The geometry object properties must now be edited to set the correct size and position of the rectangle. To do this, click on the rectangle **R1** to select it which highlights it in red. Then click on the **Inspect/edit selected geometry object** _Toolbar_ button, and change the _min_ and _max_ coordinates of the rectangle so they span between `0` and `0.0075` in the x-direction, and `0` and `0.05` in the y-direction."], +["uicontrol*","list_select_gobj",["R1"],"Callback",[]], +["imgcap"], +["uicontrol*","button_edit_gobj",[],"Callback",[]], +["uicontrol*","edit_x_min","0","Callback",[]], +["uicontrol*","edit_x_max","0.0075","Callback",[]], +["uicontrol*","edit_y_min","0","Callback",[]], +["uicontrol*","edit_y_max","0.05","Callback",[]], +["imgcap"], +["uicontrol*","button_dlggobj_ok",[],"Callback",[]], +["uitext",[],"Create an ellipse/circle and set its radius and center to `0.003` and `(0, 0.02)`, respectively."], +["uimenu",["Geometry","Create Object...","Circle"],[],"Callback",[]], +["uicontrol*","edit_center","0 0.02","Callback",[]], +["uicontrol","edit_radius","0.003","Callback",[]], +["imgcap"], +["uicontrol","button_dlggobj_ok",{},"Callback",{}], +["uitext",[],"To subtract the circle from the rectangle first select both geometry objects by clicking on them so both are highlighted in red, and then click on the **- / Subtract geometry objects** button. (Alternatively, if the circle is obscured by the rectangle they can be selected by holding the _Ctrl_ key while clicking on the labels **R1** and **C1** in the Selection list box, or in this case simply pressing _Ctrl + a_ to select all objects)."], +["uicontrol*","list_select_gobj",["R1","C1"],"Callback",[]], +["uicontrol*","button_subtract_gobj",[],"Callback",[]], +["imgcap"], +["uicontrol","button_grid_mode",1,"Callback",[]], +["uitext*",[],"The default grid may be too coarse ensure an accurate solution. Decreasing the grid size and generating a finer grid can resolve curved boundaries better."], +["uicontrol","grid_hmax","0.0005"], +["uitext",[],"Press the **Generate** button to call the automatic grid generation algorithm."], +["uicontrol*","grid_generate",[],"Callback",[]], +["imgcap"], +["uicontrol","button_equation_mode",1,"Callback",[]], +["uitext",[],"Equation and material coefficients are specified in _Equation/Subdomain_ mode. In the Equation Settings dialog box enter the following coefficients, `rho` for the density, `mu` for the viscosity, and `alpha*g*rho*(T-Tc)` for the volume force in the y-direction."], +["uicontrol*","edit_density","rho","Callback",[]], +["uicontrol*","edit_viscosity","mu","Callback",[]], +["uicontrol*","edit_fy","alpha*g*rho*(T-Tc)","Callback",[]], +["imgcap"], +["uitext",[],"A heat transfer physics must also be added."], +["uicontrol","toggle_temp",1,"Callback",{}], +["uicontrol","edit_heatcap","cp","Callback",[]], +["uicontrol","edit_heatcond","k","Callback",[]], +["imgcap"], +["uicontrol*","button_dlgeqn_ok",[],"Callback",[]], +["uitext*",[],"The _Model Constants and Expressions_ functionality can be used to define and store convenient expressions which then are available in the point, equation, boundary coefficients, and as postprocessing expressions. Here it is used to define the load force."], +["uitext",[],["Press the **Constants** _Toolbar_ button, or select the corresponding entry from the _Equation_ menu, and enter the following variables in the _Model Constants and Expressions_ dialog box. Press _Enter_ after the last expression or use the **Add Row** button to expand the expression list.","| Name | Expression |","|---------|------------|","| rho | 22 |","| mu | 2.8e-3 |","| alpha | 0.26e-3 |","| g | 9.81 |","| Tc | 300 |","| vin | 40e-2 |","| k | 0.55 |","| cp | 3.1e3 |","| Th | 330 |"]], +["uicontrol*","button_const_expr",[],"Callback",[]], +["uicontrol*","edit_dlgexpr_11","rho","Callback",[]], +["uicontrol*","edit_dlgexpr_12","22","Callback",[]], +["uicontrol*","edit_dlgexpr_21","mu","Callback",[]], +["uicontrol*","edit_dlgexpr_22","2.8e-3","Callback",[]], +["uicontrol*","edit_dlgexpr_31","alpha","Callback",[]], +["uicontrol*","edit_dlgexpr_32","0.26e-3","Callback",[]], +["uicontrol*","edit_dlgexpr_41","g","Callback",[]], +["uicontrol*","edit_dlgexpr_42","9.81","Callback",[]], +["uicontrol*","edit_dlgexpr_51","Tc","Callback",[]], +["uicontrol*","edit_dlgexpr_52","300","Callback",[]], +["uicontrol*","edit_dlgexpr_61","vin","Callback",[]], +["uicontrol*","edit_dlgexpr_62","40e-2","Callback",[]], +["uicontrol*","edit_dlgexpr_71","k","Callback",[]], +["uicontrol*","edit_dlgexpr_72","0.55","Callback",[]], +["uicontrol*","edit_dlgexpr_81","cp","Callback",[]], +["uicontrol*","edit_dlgexpr_82","3.1e3","Callback",[]], +["uicontrol*","edit_dlgexpr_91","Th","Callback",[]], +["uicontrol*","edit_dlgexpr_92","330","Callback",[]], +["imgcap"], +["uicontrol*","button_dlgexpr_ok",[],"Callback",[]], +["uicontrol","button_boundary_mode",1,"Callback",[]], +["uitext*",[],"Boundary conditions are defined in _Boundary Mode_ and describes how the model interacts with the external environment."], +["uitext",[],"First select the **Flow** tab, which allows for specifying boundary conditions for the Navier-Stokes equations physics mode. Then select all vertical boundaries (here **2**, **4**, and **7**), and choose **Symmetry/slip** from the drop down box. Switch to the heat transfer physics mode by selecting the **Temp** tab and choose the **Thermal insulation/symmetry** boundary condition."], +["uicontrol*","list_seldom",["2","4","7"],"Callback",[]], +["uitext*",[],"The selected boundaries will be highlighted in red."], +["uicontrol*","popup_selbc_ns",["Symmetry/slip"],"Callback",[]], +["imgcap"], +["uicontrol*","tab_Temp",0,"Callback",[]], +["uicontrol*","popup_selbc_ht",["Thermal insulation/symmetry"],"Callback",[]], +["uitext",[],"Continue with the top boundary (number **3**) which is the outflow. Select **Outflow/pressure** for the Navier-Stokes physics mode and **Convective flux/outflow** for the heat transfer mode."], +["uicontrol*","list_seldom",["3"],"Callback",[]], +["uicontrol*","tab_Flow",0,"Callback",[]], +["uicontrol*","popup_selbc_ns",["Outflow/pressure"],"Callback",[]], +["uitext",[],"The bottom boundary (number **1**) is the inflow and should be prescribed with the constant velocity `vin` in the y-direction by using the **Inlet/velocity** condition. The **Temperature** should here be fixed to the low temperature `Tc`."], +["uicontrol*","list_seldom",["1"],"Callback",[]], +["uicontrol*","popup_selbc_ns",["Inlet/velocity"],"Callback",[]], +["uicontrol*","edit_bccoef2_ns","vin","Callback",[]], +["uicontrol*","tab_Temp",0,"Callback",[]], +["uicontrol*","popup_selbc_ht",["Temperature"],"Callback",[]], +["uicontrol*","edit_bccoef1_ht","Tc","Callback",[]], +["uitext",[],"Lastly, the boundaries on the cylinder (**5** and **6**) are walls and should be prescribed with **Wall/no-slip** boundary conditions for the velocity. For the **Temperature** the constant high temperature `Th` should be prescribed."], +["uicontrol*","list_seldom",["5","6"],"Callback",[]], +["uicontrol*","popup_selbc_ht",["Temperature"],"Callback",[]], +["uicontrol*","edit_bccoef1_ht","Th","Callback",[]], +["uicontrol*","tab_Flow",0,"Callback",[]], +["uicontrol*","popup_selbc_ns",["Wall/no-slip"],"Callback",[]], +["imgcap"], +["uicontrol*","button_dlgbdr_ok",[],"Callback",[]], +["uitext",[],"Now that the problem is fully specified, press the **Solve** _Mode Toolbar_ button to switch to solve mode. Then press the **=** _Tool_ button to call the solver with the default solver settings."], +["uicontrol*","button_solve_mode",1,"Callback",[]], +["uicontrol*","button_solve",[],"Callback",[]], +["uitext*",[],"From the resulting flow field one can see that fluid is accelerated when it passes between the cylinders. To visualize the temperature field, open the **Plot Options** and postprocessing settings dialog box and select to plot and visualize the **Temperature, T** as both _surface_ and _contour_ plots."], +["imgcap"], +["uicontrol*","button_post_settings",[],"Callback",[]], +["uicontrol*","post_surf",["Temperature, T"],"Callback",[]], +["uicontrol*","ffiso",1,"Callback",[]], +["uicontrol*","post_iso",["Temperature, T"],"Callback",[]], +["imgcap"], +["uicontrol*","button_dlgpost_ok",[],"Callback",[]], +["uitext*",[],"The temperature plot show that the fluid is heated around the hot cylinder and follows the flow upwards."], +["uitext*",[],"CFDTool also allows for advanced postprocessing such as boundary integration. Integrate the expression _(T-Tc)/w_ over the outflow boundary (where _w = 0.0075_ is the width of the domain) to find the change in the mean temperature."], +["uimenu","Boundary Integration...",[],"Callback",[]], +["uicontrol","list_seldom",["3"],"Callback",[]], +["uicontrol","edit_intexpr","(T-Tc)/0.0075","Callback",[]], +["imgcap"], +["uitext",[],"Press **OK** or _Apply_ to calculate and show the result of the boundary integration."], +["uicontrol*","button_dlginteval_ok",[],"Callback",[]], +["uitext*",[],"From the result one can see that the mean temperature has risen by about _8.5_ degrees."], +["imgcap"], +["uivalidate",[],"pass=0;try,pass=abs(intbdr('T-Tc',fea,3)/0.0075-8.5)/8.5<0.1;catch,end"] +]} diff --git a/tutorials/01_Quickstart/03_axisymmetric_flow1.fes b/tutorials/01_Quickstart/03_axisymmetric_flow1.fes new file mode 100644 index 0000000..c4dcb47 --- /dev/null +++ b/tutorials/01_Quickstart/03_axisymmetric_flow1.fes @@ -0,0 +1,91 @@ +{"meta":{"app":"CFDTool","author":"Precise Simulation","build":"1.4","date":"02-Sep-2019","descr":["This example models fluid flow in a narrowing pipe section. The constriction of the pipe will accelerate the flow according to the venturi effect. As the fluid is assumed to be both incompressible and isothermal the problem is governed by the Navier-Stokes equations.","","An appropriate boundary condition for the symmetry boundary must be chosen. A homogeneous Neumann insulation/symmetry condition is typically employed for scalar equations, but in the case of fluid flow a slip condition preventing any radial velocity while allowing flow in the axial direction is appropriate.","","The geometry of the problem considers a 2:1 constriction with an initial pipe diameter of _d = 2 m_. The inlet velocity is assumed to be uniform _vin = v(z=0) = 1 m/s_ and the fluid has a density of _rho = 1 kg/m^3_ and viscosity _mu = 0.05 kg/ms_. This gives a Reynolds number of _Re = rho*v*d/mu = 40_, which should result in laminar flow with a parabolic outflow profile."],"dim":2.5,"image":"axisymmetric_flow1.jpg","keyw":["quickstart","axisymmetry","fluid_flow","customization","equation_editing","validation"],"mlver":"R2019a","name":"axisymmetric_flow1","phys":["Navier-Stokes Equations"],"system":"","time":737443,"title":"Axisymmetric Fluid Flow","type":"Fluid Dynamics","user":"precsim","ver":[1,4,0]}, +"fields":["type","id","ui_arg","fcn_type","fcn_oarg"], +"data":[ +["uipushtool","Standard.NewFigure",[],"ClickedCallback",[]], +["uitext",[],"Click on the **Axisymmetry** _Space Dimension_ selection button in the _New Model_ dialog box and close the dialog box by clicking on the **OK** button."], +["uicontrol*","radio_axi",1,"Callback",[]], +["imgcap"], +["uicontrol*","button_dlgnew_ok",[],"Callback",[]], +["uitext*",[],"The geometry of the pipe cross section can be created by making _1 x 2_ and _0.5 x 1_ rectangles aligned with the (_r = 0_) symmetry axis, a circle with radius _0.5_ centered at (_1, 2_), and then joining the rectangles while subtracting the circle from the merged rectangles."], +["uicontrol","button_rectangle",[],"Callback",[0,1,0,1,"R1"]], +["uitext",[],"The geometry object properties must now be edited to set the correct size and position of the rectangle. To do this, click on the rectangle **R1** to select it which highlights it in red. Then click on the **Inspect/edit selected geometry object** _Toolbar_ button, and change the _min_ and _max_ coordinates of the rectangle so they span between `0` and `1` in the x-direction, and `0` and `2` in the y-direction."], +["uicontrol*","list_select_gobj",["R1"],"Callback",[]], +["uicontrol*","button_edit_gobj",[],"Callback",[]], +["uicontrol*","edit_x_min","0","Callback",[]], +["uicontrol*","edit_x_max","1","Callback",[]], +["uicontrol*","edit_y_min","0","Callback",[]], +["uicontrol*","edit_y_max","2","Callback",[]], +["imgcap"], +["uicontrol*","button_dlggobj_ok",[],"Callback",[]], +["uicontrol*","button_rectangle",[],"Callback",[-0.5,0.5,0.5,1.5,"R2"]], +["uitext",[],"Similarly, change the _x_min_ and _x_max_ properties of the second rectangle **R2** to `0` and `0.5`, _y_min_ and _y_max_ `2` and `3`."], +["uicontrol*","list_select_gobj",["R2"],"Callback",[]], +["uicontrol*","button_edit_gobj",[],"Callback",[]], +["uicontrol*","edit_x_min","0","Callback",[]], +["uicontrol*","edit_x_max","0.5","Callback",[]], +["uicontrol*","edit_y_min","2","Callback",[]], +["uicontrol*","edit_y_max","3","Callback",[]], +["imgcap"], +["uicontrol*","button_dlggobj_ok",[],"Callback",[]], +["uimenu*",["Geometry","Create Object...","Circle"],{},"Callback",{}], +["uicontrol*","edit_center","1 2","Callback",[]], +["uicontrol*","edit_radius","0.5","Callback",{}], +["imgcap"], +["uicontrol*","button_dlggobj_ok",[],"Callback",[]], +["imgcap"], +["uitext",[],"To create the combined geometry, select **Combine Objects...** from the _Geometry_ menu. Enter the formula `R1 + R2 - C1` in the edit field of the _Combine Geometry Objects_ dialog box and press **OK**."], +["uimenu*","Combine Objects...",[],"Callback",[]], +["uicontrol*","edit_dlgedit","R1 + R2 - C1","Callback",[]], +["imgcap"], +["uicontrol*","button_dlgedit_ok",[],"Callback",[]], +["imgcap"], +["uicontrol","button_grid_mode",1,"Callback",[]], +["uitext*",[],"The default grid may be too coarse ensure an accurate solution. Decreasing the grid size and generating a finer grid can resolve curved boundaries better."], +["uicontrol","grid_hmax","0.1"], +["uitext",[],"Press the **Generate** button to call the automatic grid generation algorithm."], +["uicontrol*","grid_generate",[],"Callback",[]], +["imgcap"], +["uicontrol","button_equation_mode",1,"Callback",[]], +["uitext",[],"Equation and material coefficients are specified in _Equation/Subdomain_ mode. In the Equation Settings dialog box enter `1` for the density and `5e-2` for the viscosity."], +["uitext*",[],"Note that CFDTool can work with any unit system, 4 it 02 Sep to the user to use consistent units for geometry dimensions, material, equation, and boundary coefficients."], +["uicontrol*","edit_density","1","Callback",[]], +["uicontrol*","edit_viscosity","5e-2","Callback",[]], +["uitext",[],"Press **OK** to finish with the equation editing and coefficient specifications."], +["uicontrol*","button_dlgeqn_ok",[],"Callback",[]], +["uitext",[],"Switch to boundary condition specification mode by clicking on **Boundary** the _Mode Toolbar_ button. In the _Boundary Settings_ dialog box, first choose all boundaries in the left hand side _Boundaries_ list box and select the **Wall/no-slip** boundary condition from the drop-down menu. Now select the lower inflow boundary (number **1**) in the left hand side Boundaries list box and select the **Inlet/velocity** boundary condition. Enter `1` in the edit field for the velocity _v0_ in the z-direction."], +["uicontrol*","button_boundary_mode",1,"Callback",[]], +["uitext*",[],"Boundary conditions are defined in _Boundary Mode_ and describes how the model interacts with the external environment."], +["uicontrol*","list_seldom",["1"],"Callback",[]], +["uicontrol*","popup_selbc_ns",["Inlet/velocity"],"Callback",[]], +["uicontrol*","edit_bccoef2_ns","1","Callback",[]], +["imgcap"], +["uitext",[],"Select the top outflow boundary (number **5**) and the **Neutral outflow/stress boundary** condition from the drop-down menu (alternatively, it is also possible prescribe a pressure at the outflow with the _Outflow/pressure_ condition)."], +["uicontrol*","list_seldom",["5"],"Callback",[]], +["uicontrol*","popup_selbc_ns",["Neutral outflow/stress boundary"],"Callback",[]], +["uitext",[],"Lastly, select the left side boundaries on the symmetry axis (number **3** and **6**) and select the **Symmetry/slip** boundary condition from the drop-down menu. This will prevent flow in the radial direction while allowing it in the axial direction. Finish the boundary condition specification by clicking the **OK** button."], +["uicontrol*","list_seldom",["6","7"],"Callback",[]], +["uicontrol*","popup_selbc_ns",["Symmetry/slip"],"Callback",[]], +["imgcap"], +["uicontrol*","button_dlgbdr_ok",[],"Callback",[]], +["uitext",[],"Now that the problem has been defined, press the **Solve** _Mode Toolbar_ button to switch to solve mode, and press the **Settings** button to open the _Solver Settings_ dialog box."], +["uicontrol*","button_solve_mode",1,"Callback",[]], +["uicontrol*","button_solver_settings",[],"Callback",[]], +["uitext",[],"In the Solver Settings dialog box increase the _Maximum non-linear iterations_ to `100` and set the _Non-linear relaxation parameter_ to `0.8` in the _Non-Linear Solver Settings_ section to relax the convergence of the solver."], +["uicontrol*","maxnit","100","Callback",[]], +["uicontrol*","nlrlx","0.8","Callback",[]], +["imgcap"], +["uitext",[],"To start the solver with the chosen settings press the **Solve** button, or press **OK** and then the **=** _Toolbar_ button."], +["uicontrol*","button_dlgsolversettings_solve",[],"Callback",[]], +["imgcap"], +["uitext*",[],"After the problem has been solved CFDTool will automatically switch to postprocessing mode 4 display t02 Sep velocity field. It is evident that the velocity field is significantly accelerated by the pipe constriction."], +["uitext*",[],"One can study a section of the velocity profile by using the **Point/Line Evaluation...** feature from the _Post_ menu. By entering a series of evaluation coordinates, both the evaluated expression and a corresponding cross section plot can be generated."], +["uimenu","Point/Line Evaluation...",[],"Callback",[]], +["uicontrol","edit_rcoord","0:0.05:0.5","Callback",[]], +["uicontrol","edit_zcoord","2.8","Callback",[]], +["imgcap"], +["uicontrol","buttons_dlgpntline_ok",[],"Callback",[]], +["uitext*",[],"From the cross section plot one can see that the velocity profile close to the outlet at _z = 2.8_ is starting to shift from parabolic to a more square profile indicating a higher velocity flow. This also indicates that one might need to study a longer outflow section to allow for a fully developed parabolic laminar flow profile."], +["imgcap"], +["figure*","Line Evaluation",{},"closeRequestFcn",{}], +["uivalidate",[],"pass=0;try,r=linspace(0,1/2,20);z=0.9*3*ones(1,20);U=evalexpr('sqrt(u^2+w^2)',[r;z],fea).';U_ref=8*(1-4*r.^2);pass=sqrt(sum((U-U_ref).^2)/sum(U_ref.^2))<0.25;catch,end"] +]} diff --git a/tutorials/01_Quickstart/04_natural_convection1.fes b/tutorials/01_Quickstart/04_natural_convection1.fes new file mode 100644 index 0000000..a972975 --- /dev/null +++ b/tutorials/01_Quickstart/04_natural_convection1.fes @@ -0,0 +1,89 @@ +{"meta":{"app":"CFDTool","author":"Precise Simulation","build":"1.4","date":"02-Sep-2019","descr":["This multiphysics model illustrates natural convection effects in a unit square domain using the Boussinesq approximation. The model involves a Navier-Stokes equations physics mode, representing the fluid flow with solid wall or no-slip boundary conditions everywhere. In addition a heat transfer physics mode is added to model the temperature field . The top and bottom boundaries are perfectly insulated while the left boundary is prescribed a unit temperature and the right zero.","","The physics modes are two way coupled through the vertical source term in the Navier-Stokes equations, _Pr*Ra*T_, and the velocities transporting the temperature coming directly from the fluid flow. First, the Prandtl and Rayleigh numbers are set to _Pr = 0.71_ and _Ra = 1e3_, respectively, after which the _Ra_ number will be increased to _1e4_. The references contain benchmark reference and comparison results for a number of quantities such as maximum velocities and the Nusselt number [9,10].","","References:","","[9] D. de Vahl Davis, Natural Convection of Air in a Square Cavity - A Benchmark Solution, Int. J. Numer. Meth. Fluids, vol. 3, pp. 249-264, 1983.","","[10] D. de Vahl Davis and I. P. Jones, Natural Convection of Air in a Square Cavity - A Comparison Exercise, Int. J. Numer. Meth. Fluids, vol. 3, pp. 227-248, 1983."],"dim":2,"image":"natural_convection1.jpg","keyw":["natural_convection","validation"],"mlver":"R2018b","name":"natural_convection1","phys":["Heat Transfer","Navier-Stokes Equations"],"system":"","time":737501,"title":"Natural Convection in a Square Cavity","type":"Multiphysics","user":"precsim","ver":[1,4,0]}, +"fields":["type","id","ui_arg","fcn_type","fcn_oarg"], +"data":[ +["uipushtool","Standard.NewFigure",{},"ClickedCallback",{}], +["imgcap"], +["uicontrol","button_dlgnew_ok",{},"Callback",{}], +["uimenu",["Geometry","Create Object...","Rectangle"],{},"Callback",{}], +["uicontrol","button_dlggobj_ok",{},"Callback",{}], +["uicontrol","button_grid_mode",1,"Callback",{}], +["uicontrol","grid_hmax","0.03"], +["uicontrol","grid_generate",{},"Callback",{}], +["imgcap"], +["uicontrol","button_equation_mode",1,"Callback",{}], +["uitext*",[],"The non-dimensionalized form of the Boussinesq source term _Pr*Ra*T_ couples the temperature to the y-direction source term of the Navier-Stokes equations."], +["uicontrol","edit_fy","Pr*Ra*T","Callback",{}], +["imgcap"], +["uitext*",[],"Add the heat transfer physics mode which automatically couples the velocities _u_ and _v_ to the convective transport terms."], +["uicontrol","toggle_temp",1,"Callback",{}], +["imgcap"], +["uicontrol","button_dlgeqn_ok",{},"Callback",{}], +["uitext",[],["Press the **Constants** _Toolbar_ button, or select the corresponding entry from the _Equation_ menu, and enter the following values for the Prandtl and Rayleigh numbers in the _Model Constants and Expressions_ dialog box.","| Name | Expression |","|------|------------|","| Pr | 0.71 |","| Ra | 1e3 |"]], +["uicontrol*","button_const_expr",{},"Callback",{}], +["uicontrol*","edit_dlgexpr_11","Pr","Callback",{}], +["uicontrol*","edit_dlgexpr_12","0.71","Callback",{}], +["uicontrol*","edit_dlgexpr_21","Ra","Callback",{}], +["uicontrol*","edit_dlgexpr_22","1e3","Callback",{}], +["imgcap"], +["uicontrol*","button_dlgexpr_ok",{},"Callback",{}], +["uicontrol","button_boundary_mode",1,"Callback",{}], +["uitext*",[],"Switch to the **Flow** tab, which corresponds to the boundary conditions for the Navier-Stokes equations physics mode. Then select the **Wall/no-slip** for all four boundaries."], +["uitext*",[],"Click on the **Temp** tab to change to specifying boundary conditions for the heat transfer physics mode. Select **Thermal insulation/symmetry** conditions for the top and bottom boundaries."], +["uicontrol","tab_Temp",0,"Callback",{}], +["uicontrol","list_seldom",["1","3"],"Callback",{}], +["uitext*",[],"Select a **Temperature** boundary conditions for the left and right boundaries, and set a fixed temperature equal to _1_ at the left side."], +["uicontrol","popup_selbc_ht",["Thermal insulation/symmetry"],"Callback",{}], +["imgcap"], +["uicontrol","list_seldom",["4"],"Callback",{}], +["uicontrol","popup_selbc_ht",["Temperature"],"Callback",{}], +["uicontrol","edit_bccoef1_ht","1","Callback",{}], +["imgcap"], +["uicontrol","list_seldom",["2"],"Callback",{}], +["uicontrol","popup_selbc_ht",["Temperature"],"Callback",{}], +["imgcap"], +["uicontrol","button_dlgbdr_ok",{},"Callback",{}], +["uicontrol","button_solve_mode",1,"Callback",{}], +["uicontrol","button_solve",{},"Callback",{}], +["uitext*",[],"One can see how the temperature difference is causing a vortex in the flow field, which in turn causes an offset in the temperature field."], +["imgcap"], +["uitext*",[],"Change the plot to visualize the temperature field as surface and contour plots, and the velocity field as an arrow plot."], +["uicontrol","button_post_settings",{},"Callback",{}], +["uicontrol","ffarrow",1,"Callback",{}], +["uicontrol","post_surf",["Temperature, T"],"Callback",{}], +["uicontrol","ffiso",1,"Callback",{}], +["uicontrol","post_iso",["Temperature, T"],"Callback",{}], +["imgcap"], +["uicontrol","button_dlgpost_ok",{},"Callback",{}], +["imgcap"], +["uitext*",[],"Use the boundary integration postprocessing tool to calculate the average Nusselt number for the vertical boundaries, and compare it to the reference value of _1.118_."], +["uimenu",["Post","Boundary Integration..."],{},"Callback",{}], +["uicontrol","list_seldom",["2","4"],"Callback",{}], +["uicontrol","edit_intexpr","abs(Tx)/2","Callback",{}], +["uicontrol","button_dlginteval_apply",{},"Callback",{}], +["imgcap"], +["uicontrol","button_dlginteval_ok",{},"Callback",{}], +["uivalidate",[],"pass=0;try,Nu_mean=abs(intbdr('Tx/2',fea,[2,4],2));pass=abs(Nu_mean-1.118)/1.118<0.06;catch,end"], +["uitext*",[],"The simulation will now be repeated but with an increased Rayleigh number _Ra = 1e4_. Instead of starting over from the beginning the existing solution will be used as a starting guess which helps with non-linear convergence."], +["uimenu",["Equation","Model Constants and Expressions..."],{},"Callback",{}], +["uicontrol","edit_dlgexpr_22","1e4","Callback",{}], +["imgcap"], +["uicontrol","button_dlgexpr_ok",{},"Callback",{}], +["uicontrol","button_solve_mode",1,"Callback",{}], +["uitext*",[],"To assist with convergence, as well as selecting the old solution as initial value, also increase the non-linear relaxation and the maximum number of non-linear iterations."], +["uicontrol","button_solver_settings",{},"Callback",{}], +["uicontrol","init1",1,"Callback",{}], +["uicontrol","maxnit","100","Callback",{}], +["uicontrol","nlrlx","0.8","Callback",{}], +["imgcap"], +["uicontrol","button_dlgsolversettings_solve",{},"Callback",{}], +["uitext*",[],"It is evident that the increase in Rayleigh number causes a significantly stronger rotation and stretching of the temperature field."], +["imgcap"], +["uitext*",[],"Use boundary integration tool again to calculate the mean Nusselt number for the vertical boundaries, and compare it to the corresponding reference value of _2.243_ for _Ra = 1e4_."], +["uimenu",["Post","Boundary Integration..."],{},"Callback",{}], +["uicontrol","list_seldom",["2","4"],"Callback",{}], +["uicontrol","edit_intexpr","abs(Tx)/2","Callback",{}], +["uicontrol","button_dlginteval_apply",{},"Callback",{}], +["imgcap"], +["uicontrol","button_dlginteval_ok",{},"Callback",{}], +["uivalidate",[],"pass=0;try,Nu_mean=abs(intbdr('Tx/2',fea,[2,4],2));pass=abs(Nu_mean-2.243)/2.243<0.13;catch,end"] +]} diff --git a/tutorials/01_Quickstart/axisymmetric_flow1.jpg b/tutorials/01_Quickstart/axisymmetric_flow1.jpg new file mode 100644 index 0000000..9752a47 Binary files /dev/null and b/tutorials/01_Quickstart/axisymmetric_flow1.jpg differ diff --git a/tutorials/01_Quickstart/heat_exchanger1.jpg b/tutorials/01_Quickstart/heat_exchanger1.jpg new file mode 100644 index 0000000..097fc31 Binary files /dev/null and b/tutorials/01_Quickstart/heat_exchanger1.jpg differ diff --git a/tutorials/01_Quickstart/natural_convection1.jpg b/tutorials/01_Quickstart/natural_convection1.jpg new file mode 100644 index 0000000..ec26933 Binary files /dev/null and b/tutorials/01_Quickstart/natural_convection1.jpg differ diff --git a/tutorials/02_Heat_Transfer/01_heat_transfer1.fes b/tutorials/02_Heat_Transfer/01_heat_transfer1.fes new file mode 100644 index 0000000..74ff64d --- /dev/null +++ b/tutorials/02_Heat_Transfer/01_heat_transfer1.fes @@ -0,0 +1,60 @@ +{"meta":{"app":"CFDTool","author":"Precise Simulation","build":"1.4","date":"02-Sep-2019","descr":["Transient heat diffusion problem where a unit length rod is kept at fixed temperature _T = 25_ at the right end and losing heat from a constant outward heat flux _q_n=1_ at the other end. The computed results are compared with the analytic solution",""," Tref = (24+x) + sum(n=1,inf) 8/(1-2*n)^2/pi^2*cos((n-1/2)*pi*x)*exp(-((n-1/2)^2*pi^2)*t)"],"dim":1,"image":"heat_transfer1.jpg","keyw":["heat_diffusion","validation"],"mlver":"R2019a","name":"heat_transfer1","phys":["Heat Transfer"],"system":"","time":737468,"title":"Transient Heat Diffusion in a Rod","type":"Heat Transfer","user":"precsim","ver":[1,4,0]}, +"fields":["type","id","ui_arg","fcn_type","fcn_oarg"], +"data":[ +["uipushtool","Standard.NewFigure",[],"ClickedCallback",[]], +["uicontrol","radio_1d",1,"Callback",[]], +["imgcap"], +["uicontrol","button_dlgnew_ok",[],"Callback",[]], +["uicontrol","button_line",[],"Callback",[]], +["uicontrol","button_linegeom_ok",[],"Callback",[]], +["imgcap"], +["uicontrol","button_grid_mode",1,"Callback",[]], +["uicontrol","grid_generate",[],"Callback",[]], +["imgcap"], +["uicontrol","button_equation_mode",1,"Callback",[]], +["uicontrol","button_dlgeqn_ok",[],"Callback",[]], +["uitext*",[],"A convenient way to to define and store coefficients, variables, and expressions is using the _Model Constants and Expressions_ functionality. The defined expressions can then be used in point, equation, boundary coefficients, as well as postprocessing expressions, and can easily be changed and updated in a single place. Enter an the expression for the reference temperature _Tref_ with two terms _n = 2_."], +["uicontrol","button_const_expr",[],"Callback",[]], +["uicontrol","edit_dlgexpr_11","Tref","Callback",[]], +["uicontrol","edit_dlgexpr_12","(24+x) + 8/pi^2*cos(pi/2*x)*exp(-pi^2/4*t) + 8/9/pi^2*cos(3*pi/2*x)*exp(-(9/4*pi^2)*t) ","Callback",[]], +["imgcap"], +["uicontrol","button_dlgexpr_ok",[],"Callback",[]], +["uicontrol","button_boundary_mode",1,"Callback",[]], +["uicontrol","list_seldom",["1"],"Callback",[]], +["uicontrol","popup_selbc_ht",["Heat flux"],"Callback",[]], +["uicontrol","edit_bccoef1_ht","-1","Callback",[]], +["imgcap"], +["uicontrol","list_seldom",["2"],"Callback",[]], +["uicontrol","popup_selbc_ht",["Temperature"],"Callback",[]], +["uicontrol","edit_bccoef1_ht","25","Callback",[]], +["imgcap"], +["uicontrol","button_dlgbdr_ok",[],"Callback",[]], +["uicontrol","button_solve_mode",1,"Callback",[]], +["uicontrol","button_solver_settings",[],"Callback",[]], +["uicontrol","solver",[" Time-Dependent"],"Callback",[]], +["uicontrol","tstep","0.01","Callback",[]], +["uicontrol","tmax","0.2","Callback",[]], +["uicontrol","initb",{},"Callback",{}], +["uicontrol","edit_init_T_1","25","Callback",{}], +["uicontrol","button_dlginit_ok",{},"Callback",{}], +["imgcap"], +["uicontrol","button_dlgsolversettings_solve",[],"Callback",[]], +["imgcap"], +["uicontrol","button_post_settings",[],"Callback",[]], +["uitext*",[],"The temperature at the final time is shown where one can see that the temperature is a constant 25 degrees at the right end and is losing heat towards the left."], +["uitext*",[],"Plot and visualize the difference between the computed and reference temperature fields."], +["uicontrol","ssurfexpr","T-Tref","Callback",[]], +["imgcap"], +["uicontrol","button_dlgpost_ok",[],"Callback",[]], +["uimenu",["Options","Axis/Grid Settings..."],[],"Callback",[]], +["uicontrol*","opt_dlgax_faxeq",1,"Callback",[]], +["uicontrol*","opt_dlgax_fbbox",0,"Callback",[]], +["uicontrol","opt_dlgax_faxis",1,"Callback",[]], +["uitext",[],"Enter `0 1 -1e-3 1e-3`zero, 1, minus 1 e minus 3, 1 e minus 3 into the edit field for the _Axis limits_ (for the _xmin_, _xmax_, _ymin_, and _ymax_ limits)."], +["uicontrol*","opt_dlgax_axis","0 1 -1e-3 1e-3","Callback",[]], +["imgcap"], +["uicontrol","button_dlgax_ok",[],"Callback",[]], +["uitext*",[],"The error already has a small magnitude of _1e-3_ but could be improved with a smaller grid size, higher element order, and smaller time step size."], +["imgcap"], +["uivalidate",[],"pass=0;try,pass=norm(evalexprp('abs(T-Tref)/abs(Tref)',fea))<1e-3;catch,end"] +]} diff --git a/tutorials/02_Heat_Transfer/02_heat_transfer2.fes b/tutorials/02_Heat_Transfer/02_heat_transfer2.fes new file mode 100644 index 0000000..14d1c94 --- /dev/null +++ b/tutorials/02_Heat_Transfer/02_heat_transfer2.fes @@ -0,0 +1,46 @@ +{"meta":{"app":"CFDTool","author":"Precise Simulation","build":"1.5","date":"12-Feb-2019","descr":["Two dimensional heat transfer of a ceramic strip with both radiation and convection on the top boundary. The ceramic has a thermal conductivity of _3 W/mK_ and the sides are fixed at a temperature of _900 C_ while the bottom boundary is insulated. The surrounding temperature is _50 C_. The top boundary is exposed to both natural convection (with a film coefficient _h = 50 W/m^2K_) and radiation (with emissivity epsilon = 0.7 and the Stefan-Boltzmann _5.669e-8 W/m^2K^4_). The solution is sought at three points along the vertical symmetry line.","","Reference:","","[1] Holman, J. P., Heat Transfer, Fifth Edition, New York: McGraw-Hill, 1981, page 96, Example 3-8."],"dim":2,"image":"heat_transfer2.jpg","keyw":["heat_diffusion","radiation","convection"],"mlver":"R2019a","name":"heat_transfer2","phys":["Heat Transfer"],"system":"","time":737468,"title":"Heat Transfer in a Ceramic Strip","type":"Heat Transfer","user":"precsim","ver":[1,5,0]}, +"fields":["type","id","ui_arg","fcn_type","fcn_oarg"], +"data":[ +["uipushtool","Standard.NewFigure",[],"ClickedCallback",[]], +["uicontrol","popup_physsel",["Heat Transfer"],"Callback",[]], +["uicontrol","button_dlgnew_ok",[],"Callback",[]], +["uicontrol","button_rectangle",[],"Callback",[0,1,0,1,"R1"]], +["uicontrol","list_select_gobj",["R1"],"Callback",[]], +["uicontrol","button_edit_gobj",[],"Callback",[]], +["uicontrol","edit_x_min","0","Callback",[]], +["uicontrol","edit_x_max","0.02","Callback",[]], +["uicontrol","edit_y_min","0","Callback",[]], +["uicontrol","edit_y_max","0.01","Callback",[]], +["uicontrol","button_dlggobj_ok",[],"Callback",[]], +["uicontrol","button_grid_mode",1,"Callback",[]], +["uicontrol","grid_hmax","0.001"], +["uicontrol","grid_generate",[],"Callback",[]], +["uicontrol","button_equation_mode",1,"Callback",[]], +["uicontrol","toggle_flow",0,"Callback",{}], +["uicontrol","toggle_temp",1,"Callback",{}], +["uicontrol","edit_heatcond","3","Callback",[]], +["uicontrol","button_dlgeqn_ok",[],"Callback",[]], +["uicontrol","button_boundary_mode",1,"Callback",[]], +["uicontrol","list_seldom",["1"],"Callback",[]], +["uicontrol","popup_selbc_ht",["Thermal insulation/symmetry"],"Callback",[]], +["uicontrol","list_seldom",["2","4"],"Callback",[]], +["uicontrol","popup_selbc_ht",["Temperature"],"Callback",[]], +["uicontrol","edit_bccoef1_ht","900+273","Callback",[]], +["uicontrol","list_seldom",["3"],"Callback",[]], +["uicontrol","popup_selbc_ht",["Heat flux"],"Callback",[]], +["uicontrol","edit_bccoef1_ht","50*((50+273)-T) + (0.7*5.669e-8)*((50+273)^4-T^4)","Callback",[]], +["uicontrol","button_dlgbdr_ok",[],"Callback",[]], +["uicontrol","button_solve_mode",1,"Callback",[]], +["uicontrol","button_solve",[],"Callback",[]], +["uitext*",[],"Evaluate the temperature in the points _(0.01, 0.01)_, _(0.01, 0.005)_, and _(0.01, 0)_ and compare with the reference values _Tref = 984_, _1064_, and _1088_."], +["uimenu",["Post","Point/Line Evaluation..."],[],"Callback",[]], +["uicontrol","edit_xcoord","0.01","Callback",[]], +["uicontrol","edit_ycoord","0.01","Callback",[]], +["uicontrol","buttons_dlgpntline_apply",[],"Callback",[]], +["uicontrol","edit_ycoord","0.005","Callback",[]], +["uicontrol","buttons_dlgpntline_apply",[],"Callback",[]], +["uicontrol","edit_ycoord","0","Callback",[]], +["uicontrol","buttons_dlgpntline_apply",[],"Callback",[]], +["uicontrol","buttons_dlgpntline_ok",[],"Callback",[]], +["uivalidate",[],"pass=0;try,T=evalexpr('T',[0.01,0.01,0.01;0.01,0.005,0],fea);Tref=[984,1064,1088]';err=norm(abs(T-Tref)./Tref);pass=err<0.01;catch,end"] +]} diff --git a/tutorials/02_Heat_Transfer/03_heat_transfer3.fes b/tutorials/02_Heat_Transfer/03_heat_transfer3.fes new file mode 100644 index 0000000..3a27f43 --- /dev/null +++ b/tutorials/02_Heat_Transfer/03_heat_transfer3.fes @@ -0,0 +1,147 @@ +{"meta":{"app":"CFDTool","author":"Precise Simulation","build":"1.4","date":"12-Feb-2019","descr":"This example models heat conduction in the form of transient cooling for shrink fitting of a two part assembly. A tungsten rod heated to _84 C_ is inserted into a chilled steel frame part at _-10 C_. The time when the maximum temperature has cooled to _70 C_ should be determined. The assembly is cooled due to convection through a surrounding medium kept at _Tinf = 17 C_ and a heat transfer coefficient of _h = 750 W/m2 K_. The surrounding cooling medium is not modeled directly, and the convective term is therefore omitted, but the effects are incorporated into the model by the use of natural convection boundary conditions.","dim":2,"image":"heat_transfer3.jpg","keyw":["shrink_fitting","assembly","cooling"],"mlver":"R2019a","name":"heat_transfer3","phys":["Heat Transfer"],"system":"","time":737468,"title":"Shrink Fitting of an Assembly","type":"Heat Transfer","user":"precsim","ver":[1,4,0]}, +"fields":["type","id","ui_arg","fcn_type","fcn_oarg"], +"data":[ +["uipushtool","Standard.NewFigure",[],"ClickedCallback",[]], +["uicontrol","popup_physsel",["Heat Transfer"],"Callback",[]], +["imgcap"], +["uicontrol","button_dlgnew_ok",[],"Callback",[]], +["uicontrol","button_rectangle",[],"Callback",[0,1,0,1,"R1"]], +["uicontrol","list_select_gobj",["R1"],"Callback",[]], +["uicontrol","button_edit_gobj",[],"Callback",[]], +["uicontrol","edit_x_min","0","Callback",[]], +["uicontrol","edit_x_max","0.11","Callback",[]], +["uicontrol","edit_y_min","0","Callback",[]], +["uicontrol","edit_y_max","0.12","Callback",[]], +["imgcap"], +["uicontrol","button_dlggobj_ok",[],"Callback",[]], +["uicontrol","button_circle_ellipse",[],"Callback",[[0.055,0],0.02,0.03,"E1"]], +["uicontrol","list_select_gobj",["E1"],"Callback",[]], +["uicontrol","button_edit_gobj",[],"Callback",[]], +["uicontrol","edit_center","0.065 0","Callback",[]], +["uicontrol","edit_x_radius","0.015","Callback",[]], +["uicontrol","edit_y_radius","0.015","Callback",[]], +["imgcap"], +["uicontrol","button_dlggobj_ok",[],"Callback",[]], +["uicontrol","button_circle_ellipse",[],"Callback",[[0.1,0.08],0.03,0.02,"E2"]], +["uicontrol","list_select_gobj",["E2"],"Callback",[]], +["uicontrol","button_edit_gobj",[],"Callback",[]], +["uicontrol","edit_center","0.11 0.12","Callback",[]], +["uicontrol","edit_x_radius","0.035","Callback",[]], +["uicontrol","edit_y_radius","0.035","Callback",[]], +["imgcap"], +["uicontrol","button_dlggobj_ok",[],"Callback",[]], +["uicontrol","button_circle_ellipse",[],"Callback",[[0.01,0.08],0.025,0.02,"E3"]], +["uicontrol","list_select_gobj",["E3"],"Callback",[]], +["uicontrol","button_edit_gobj",[],"Callback",[]], +["uicontrol","edit_center","0 0.06","Callback",[]], +["uicontrol","edit_x_radius","0.025","Callback",[]], +["uicontrol","edit_y_radius","0.025","Callback",[]], +["imgcap"], +["uicontrol","button_dlggobj_ok",[],"Callback",[]], +["imgcap"], +["uimenu",["Geometry","Combine Objects..."],[],"Callback",[]], +["uicontrol","edit_dlgedit","R1 - E1 - E2 - E3","Callback",[]], +["imgcap"], +["uicontrol","button_dlgedit_ok",[],"Callback",[]], +["imgcap"], +["uicontrol","button_rectangle",[],"Callback",[0.1,0.15,0.04,0.06,"R1"]], +["uicontrol","list_select_gobj",["R2"],"Callback",[]], +["uicontrol","button_edit_gobj",[],"Callback",[]], +["uicontrol","edit_x_min","0.065","Callback",[]], +["uicontrol","edit_x_max","0.16","Callback",[]], +["uicontrol","edit_y_min","0.05","Callback",[]], +["uicontrol","edit_y_max","0.07","Callback",[]], +["imgcap"], +["uicontrol","button_dlggobj_ok",[],"Callback",[]], +["uicontrol","button_circle_ellipse",[],"Callback",[[0.06,0.06],0.02,0.015,"E4"]], +["uicontrol","list_select_gobj",["E4"],"Callback",[]], +["uicontrol","button_edit_gobj",[],"Callback",[]], +["uicontrol","edit_center","0.065 0.06","Callback",[]], +["uicontrol","edit_x_radius","0.01","Callback",[]], +["uicontrol","edit_y_radius","0.01","Callback",[]], +["imgcap"], +["uicontrol","button_dlggobj_ok",[],"Callback",[]], +["uicontrol","list_select_gobj",["R2","E4"],"Callback",[]], +["imgcap"], +["uicontrol","button_join_gobj",[],"Callback",[]], +["uicontrol","list_select_gobj",["CJ1"],"Callback",[]], +["uicontrol","button_copy_transform_gobj",[],"Callback",[]], +["uicontrol","edit_copyobj","1","Callback",[]], +["imgcap"], +["uicontrol","button_dlgcopytransf_ok",[],"Callback",[]], +["uicontrol","list_select_gobj",["CS1","CJ1"],"Callback",[]], +["imgcap"], +["uicontrol","button_subtract_gobj",[],"Callback",[]], +["imgcap"], +["uicontrol","button_grid_mode",1,"Callback",[]], +["uitext*",[],"The default grid may be too coarse ensure an accurate solution. Decreasing the grid size and generating a finer grid can resolve curved boundaries better."], +["uicontrol","grid_hmax","0.0025"], +["uicontrol","grid_generate",[],"Callback",[]], +["imgcap"], +["uicontrol","button_equation_mode",1,"Callback",[]], +["uitext*",[],"Equation and material coefficients are specified in _Equation/Subdomain_ mode. In the Equation Settings dialog box enter the coefficients for density, heat capacity, thermal conductivity, and initial temperature for each material."], +["uicontrol","list_seldom",["1"],"Callback",[]], +["uicontrol","toggle_flow",0,"Callback",{}], +["uicontrol","toggle_temp",1,"Callback",{}], +["uicontrol","edit_density","rho_tungsten","Callback",[]], +["uicontrol","edit_heatcap","cp_tungsten","Callback",[]], +["uicontrol","edit_heatcond","k_tungsten","Callback",[]], +["imgcap"], +["uicontrol","list_seldom",["2"],"Callback",[]], +["uicontrol","toggle_flow",0,"Callback",{}], +["uicontrol","toggle_temp",1,"Callback",{}], +["uicontrol","edit_density","rho_steel","Callback",[]], +["uicontrol","edit_heatcap","cp_steel","Callback",[]], +["uicontrol","edit_heatcond","k_steel","Callback",[]], +["imgcap"], +["uicontrol","button_dlgeqn_ok",[],"Callback",[]], +["uitext*",[],"The _Model Constants and Expressions_ functionality can be used to define and store convenient expressions which then are available in the point, equation, boundary coefficients, and as postprocessing expressions. Here it is used to define the material parameters."], +["uitext",[],["Press the **Constants** _Toolbar_ button, or select the corresponding entry from the _Equation_ menu, and enter the following variables in the _Model Constants and Expressions_ dialog box. Press _Enter_ after the last expression or use the **Add Row** button to expand the expression list.","| Name | Expression |","|----------------|------------|","| rho_tungsten | 19000 |","| cp_tungsten | 134 |","| k_tungsten | 163 |","| rho_steel | 7500 |","| cp_steel | 470 |","| k_steel | 44 |","| h_coef | 50 |"]], +["uicontrol*","button_const_expr",[],"Callback",[]], +["uicontrol*","edit_dlgexpr_11","rho_tungsten","Callback",[]], +["uicontrol*","edit_dlgexpr_12","7500","Callback",[]], +["uicontrol*","edit_dlgexpr_21","cp_tungsten","Callback",[]], +["uicontrol*","edit_dlgexpr_22","470","Callback",[]], +["uicontrol*","edit_dlgexpr_31","k_tungsten","Callback",[]], +["uicontrol*","edit_dlgexpr_32","163","Callback",[]], +["uicontrol*","edit_dlgexpr_41","rho_steel","Callback",[]], +["uicontrol*","edit_dlgexpr_42","19000","Callback",[]], +["uicontrol*","edit_dlgexpr_51","cp_steel","Callback",[]], +["uicontrol*","edit_dlgexpr_52","470","Callback",[]], +["uicontrol*","edit_dlgexpr_61","k_steel","Callback",[]], +["uicontrol*","edit_dlgexpr_62","44","Callback",[]], +["uicontrol*","edit_dlgexpr_71","h_coef","Callback",[]], +["uicontrol*","edit_dlgexpr_72","50","Callback",[]], +["imgcap"], +["uicontrol*","button_dlgexpr_ok",[],"Callback",[]], +["uicontrol","button_boundary_mode",1,"Callback",[]], +["uitext",[],"In the _Boundary Settings_ dialog box, select the **Heat flux** boundary condition for all the boundaries. Enter `h_coef` in the edit field for the convective transfer coefficient _h_, and also enter `17` for the surrounding reference temperature _Tinf_."], +["uicontrol*","list_seldom",["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15"],"Callback",[]], +["uicontrol*","popup_selbc_ht",["Heat flux"],"Callback",[]], +["uicontrol*","edit_bccoef1_ht","h_coef*(17-T)","Callback",[]], +["imgcap"], +["uicontrol*","button_dlgbdr_ok",[],"Callback",[]], +["uitext",[],"Now that the problem is specified, press the **Solve** mode button to switch to solve mode. Since this is a time dependent study, open the solver settings and select the **Time-Dependent** solver. Set the _Time step_ to `0.25`, _Simulation time_ to `16`, _Time stopping criteria_ to `0`, then press **Solve** to start the solution process."], +["uicontrol*","button_solve_mode",1,"Callback",[]], +["uicontrol*","button_solver_settings",[],"Callback",[]], +["uicontrol*","solver",[" Time-Dependent"],"Callback",[]], +["uicontrol*","tstep","0.25","Callback",[]], +["uicontrol*","tmax","16","Callback",[]], +["uicontrol*","tstop","0","Callback",[]], +["uicontrol","initb",{},"Callback",{}], +["uicontrol","edit_init_T_1","84","Callback",{}], +["uicontrol","edit_init_T_2","-10","Callback",{}], +["uicontrol","button_dlginit_ok",{},"Callback",{}], +["imgcap"], +["uicontrol*","button_dlgsolversettings_solve",[],"Callback",[]], +["uicontrol","button_post_settings",[],"Callback",[]], +["uicontrol","ffiso",1,"Callback",[]], +["uicontrol","sisolev","20","Callback",[]], +["imgcap"], +["uicontrol","button_dlgpost_apply",[],"Callback",[]], +["uitext*",[],"Look back through the solutions and verify that the assembly has cooled to a temperature of 70 degrees around _t = 13 s_. Note that both the colorbar and Limits field will show the minimum and maximum surface plot value."], +["uicontrol","fsolnum",["12.75"],"Callback",[]], +["uicontrol","button_dlgpost_ok",[],"Callback",[]], +["imgcap"], +["uivalidate",[],"pass=0;try,for i=1:length(fea.sol.t),T_min(i)=min(fea.sol.u(:,i));T_max(i)=max(fea.sol.u(:,i));end,ix=find(T_max<70);i1= ix(1);i2=i1-1;s=(T_max(i2)-70)/(T_max(i2)-T_max(i1));t_70=fea.sol.t(i2)+s*(fea.sol.t(i1)-fea.sol.t(i2));pass=abs(t_70-13)<3.5;catch,end"] +]} diff --git a/tutorials/02_Heat_Transfer/05_thermal_bridge1.fes b/tutorials/02_Heat_Transfer/05_thermal_bridge1.fes new file mode 100644 index 0000000..5a89415 --- /dev/null +++ b/tutorials/02_Heat_Transfer/05_thermal_bridge1.fes @@ -0,0 +1,91 @@ +{"meta":{"app":"CFDTool","author":"Precise Simulation","build":"1.5","date":"20-Feb-2020","descr":["This is a benchmark test case for modeling the steady-state temperature distribution in a thermal bridge in building construction [1]. The model consists of a 6 mm concrete slab subjected to an outside temperature of 0 degrees and heat loss due to convection. The inside features a 4 cm layer of air enclosed within a 1.5 mm metal frame, which is attached to the slab with an insulating layer. The inside temperature is assumed a constant 20 degrees. The model can both be considered to be planar, and also symmetric at the ends so that only a 2D 0.5 m section needs to be modeled. The heat flux and temperature at various points is compared to given reference values [1].","","Reference:","","[1] ISO 10211:2007(en), Thermal bridges in building construction - Heat flows and surface temperatures, Test Case A.2."],"dim":2,"image":"thermal_bridge1.jpg","keyw":["heat_conduction","thermal_bridge","validation"],"mlver":"R2019a","name":"thermal_bridge1","phys":["Heat Transfer"],"system":"","time":737841,"title":"Thermal Bridge","type":"Heat Transfer","user":"precsim","ver":[1,5,0]}, +"fields":["type","id","ui_arg","fcn_type","fcn_oarg"], +"data":[ +["uipushtool","Standard.NewFigure",[],"ClickedCallback",[]], +["uicontrol","popup_physsel",["Heat Transfer"],"Callback",[]], +["uicontrol","button_dlgnew_ok",[],"Callback",[]], +["uitext*",[],"First create a _0.5_ by _0.0475 m_ background rectangle for the domain."], +["uimenu",["Geometry","Create Object...","Rectangle"],[],"Callback",[]], +["uicontrol","edit_x_min","0","Callback",[]], +["uicontrol","edit_x_max","0.5","Callback",[]], +["uicontrol","edit_y_min","0","Callback",[]], +["uicontrol","edit_y_max","0.0475","Callback",[]], +["uicontrol","button_dlggobj_ok",[],"Callback",[]], +["uitext*",[],"Then create rectangles for the top concrete slab and a smaller one for the insulating layer."], +["uimenu",["Geometry","Create Object...","Rectangle"],[],"Callback",[]], +["uicontrol","edit_x_min","0","Callback",[]], +["uicontrol","edit_x_max","0.5","Callback",[]], +["uicontrol","edit_y_min","0.0415","Callback",[]], +["uicontrol","edit_y_max","0.0475","Callback",[]], +["uicontrol","button_dlggobj_ok",[],"Callback",[]], +["uimenu",["Geometry","Create Object...","Rectangle"],[],"Callback",[]], +["uicontrol","edit_x_min","0","Callback",[]], +["uicontrol","edit_x_max","0.0135","Callback",[]], +["uicontrol","edit_y_min","0.0365","Callback",[]], +["uicontrol","edit_y_max","0.0415","Callback",[]], +["uicontrol","button_dlggobj_ok",[],"Callback",[]], +["uitext*",[],"Finally the polygon tool is used to define the shape of the metal frame."], +["uimenu",["Geometry","Create Object...","Polygon"],[],"Callback",[]], +["uitable","table_pntpoly",[[0,0],[0.5,0],[0.5,0.0015],[0.0015,0.0015],[0.0015,0.035],[0.0135,0.035],[0.0135,0.0365],[0,0.0365]],[],[]], +["uicontrol","button_dlggobj_ok",[],"Callback",[]], +["uitext*",[],"Although some geometry objects overlap, decomposed minimal regions will automatically be generated in the grid generation step."], +["uitext",[],"Switch to **Grid** mode by clicking on the corresponding _Mode Toolbar_ button which automatically generates a default grid for 2D problems."], +["uicontrol*","button_grid_mode",1,"Callback",[]], +["uicontrol","grid_hmax","0.001","Callback",[]], +["uicontrol","button_equation_mode",1,"Callback",[]], +["uitext*",[],"Equation and material coefficients are be specified in _Equation/Subdomain_ mode. In the _Equation Settings_ dialog box that automatically opens select the four subdomains and change the heat coefficient for the thermal conductivity _k_ correspondingly. As the simulation is stationary the density, heat capacity, and other coefficients don't come in to play and can be left to their default values."], +["uicontrol","toggle_flow",0,"Callback",{}], +["uicontrol","toggle_temp",1,"Callback",{}], +["uitext",[],"First select the subdomain for the slab, **4** in the _Subdomains_ list box."], +["uicontrol*","list_seldom",["4"],"Callback",[]], +["uicontrol","edit_heatcond","1.15","Callback",[]], +["uitext",[],"Select subdomain **2**, the insulation layer, in the _Subdomains_ list box."], +["uicontrol*","list_seldom",["2"],"Callback",[]], +["uicontrol","edit_heatcond","0.12","Callback",[]], +["uitext",[],"Then select subdomain **1** the metal frame."], +["uicontrol*","list_seldom",["1"],"Callback",[]], +["uicontrol","edit_heatcond","230","Callback",[]], +["uitext",[],"Finally select subdomain **3**, the domain with air."], +["uicontrol*","list_seldom",["3"],"Callback",[]], +["uicontrol","edit_heatcond","0.029","Callback",[]], +["uitext*",[],"Note that CFDTool works with any unit system, and it is up to the user to use consistent units for geometry dimensions, material, equation, and boundary coefficients."], +["uicontrol","button_dlgeqn_ok",[],"Callback",[]], +["uicontrol","button_boundary_mode",1,"Callback",[]], +["uitext*",[],"In boundary mode, first select the **Thermal insulation/symmetry** condition for all left and right boundaries."], +["uicontrol","list_seldom",["2","3","4","5","6","8"],"Callback",[]], +["uicontrol","popup_selbc_ht",["Thermal insulation/symmetry"],"Callback",[]], +["uitext*",[],"Then select the convective heat flux condition for the top and bottom boundaries."], +["uicontrol","list_seldom",["7"],"Callback",[]], +["uicontrol","popup_selbc_ht",["Heat flux"],"Callback",[]], +["uicontrol","edit_bccoef1_ht","-1/0.06*T","Callback",[]], +["uicontrol","list_seldom",["1"],"Callback",[]], +["uicontrol","popup_selbc_ht",["Heat flux"],"Callback",[]], +["uicontrol","edit_bccoef1_ht","1/0.11*(20-T)","Callback",[]], +["uicontrol","button_dlgbdr_ok",[],"Callback",[]], +["uitext",[],"Now that the problem is fully specified, press the **Solve** _Mode Toolbar_ button to switch to solve mode. Then press the **=** _Tool_ button to call the solver with the default solver settings."], +["uicontrol*","button_solve_mode",1,"Callback",[]], +["uicontrol*","button_solve",[],"Callback",[]], +["uitext*",[],"After the problem has been solved CFDTool will automatically switch to postprocessing mode and display the Temperature. Open the postprocessing settings dialog box by clicking on the **Plot Options** _Toolbar_ button and enable contour plot, as well as zoom in left side to see temperature in the joint section more clearly."], +["uicontrol","button_post_settings",[],"Callback",[]], +["uicontrol","ffiso",1,"Callback",[]], +["uicontrol","sisolev","20","Callback",[]], +["uicontrol","button_dlgpost_ok",[],"Callback",[]], +["uitext*",[],"Use the _boundary integration_ menu option to calculate the inward and outward normal heat flux."], +["uimenu",["Post","Boundary Integration..."],[],"Callback",[]], +["uicontrol","popup_intexpr",["Normal total heat flux, T"],"Callback",[]], +["uicontrol","list_seldom",["1"],"Callback",[]], +["uicontrol","button_dlginteval_apply",[],"Callback",[]], +["uicontrol","list_seldom",["7"],"Callback",[]], +["uicontrol","button_dlginteval_apply",[],"Callback",[]], +["uitext*",[],"We can see that a negative inward flux from the bottom boundary and corresponding outward from the top (with the convention that normal vectors point outwards). The computed heat flux magnitude of _9.3_ compares well with the reference flux value of _9.5 W_ [1]."], +["uitext*",[],["Lastly, we can use the _point evalution_ menu option to compute the temperature and compare with the reference values","| x | y | T |","|--------|--------|------|","| 0 | 0.0475 | 7.1 |","| 0.5 | 0.0475 | 0.8 |","| 0 | 0.0415 | 7.9 |","| 0.0135 | 0.0415 | 6.3 |","| 0.5 | 0.0415 | 0.8 |","| 0 | 0.0365 | 16.4 |","| 0.0015 | 0.0365 | 16.3 |","| 0 | 0 | 16.8 |","| 0.5 | 0 | 18.3 |"]], +["uicontrol","button_dlginteval_ok",[],"Callback",[]], +["uimenu",["Post","Point/Line Evaluation..."],[],"Callback",[]], +["uicontrol","popup_evalexpr",["Temperature, T"],"Callback",[]], +["uicontrol","edit_xcoord","0 0.5 0 0.0135 0.5 0 0.0015 0 0.5","Callback",[]], +["uicontrol","edit_ycoord","0.0475 0.0475 0.0415 0.0415 0.0415 0.0365 0.0365 0 0","Callback",[]], +["uicontrol","buttons_dlgpntline_apply",[],"Callback",[]], +["figure","Line Evaluation",[],"closeRequestFcn",[]], +["uicontrol","buttons_dlgpntline_cancel",[],"Callback",[]], +["uivalidate",[],"pass=0;try,pass=all(abs([7.1 0.8 7.9 6.3 0.8 16.4 16.3 16.8 18.3]'-evalexpr('T',[0 0.5 0 0.0135 0.5 0 0.0015 0 0.5;0.0475 0.0475 0.0415 0.0415 0.0415 0.0365 0.0365 0 0],fea))<0.25)&all(abs([9.5,9.5]-[intbdr(fea.phys.ht.bdr.vars{3,end},fea,7),-intbdr(fea.phys.ht.bdr.vars{3,end},fea,1)])<0.32);catch,end"] +]} diff --git a/tutorials/02_Heat_Transfer/07_heat_transfer5.fes b/tutorials/02_Heat_Transfer/07_heat_transfer5.fes new file mode 100644 index 0000000..327a685 --- /dev/null +++ b/tutorials/02_Heat_Transfer/07_heat_transfer5.fes @@ -0,0 +1,128 @@ +{"meta":{"app":"CFDTool","author":"Precise Simulation","build":"1.9.1","date":"20-May-2021","descr":["This example models heated steam at a constant temperature of _120 C_ flowing through a aluminium pipe with 3 cm diameter. Heat loss to the surrounding cool air (at _25 C_ and heat transfer coefficient of _h = 60 W/m2 C_) is computed for a plain pipe, and also a pipe where 200 cooling fins per meter has been added. The simulation results are also compared with theoretical solutions.","","Reference:","","[1] Cengel, Yunus A., Heat Transfer: A Practical Approach, WCB/McGraw-Hill, 1998."],"dim":3,"image":"heat_transfer5.jpg","keyw":["heat_conduction","heat_exchanger","validation"],"mlver":"R2019a","name":"heat_transfer5","phys":["Heat Transfer"],"system":"","time":737910,"title":"Cooling Effect of Adding Fins","type":"Heat Transfer","user":"precsim","ver":[1,9,1]}, +"fields":["type","id","ui_arg","fcn_type","fcn_oarg"], +"data":[ +["uipushtool","Standard.NewFigure",[],"ClickedCallback",[]], +["uicontrol","radio_3d",1,"Callback",[]], +["uicontrol","button_dlgnew_ok",[],"Callback",[]], +["uitext*",[],"Due to symmetry it is sufficient to model a small section, here taken as quarter section of length _5 mm_ (this model would also be possible to reduce to 2D axisymmetry)."], +["uicontrol","button_cone_cylinder",[],"Callback",[]], +["uicontrol","edit_radius_1","0.015","Callback",[]], +["uicontrol","edit_radius_2","0.015","Callback",[]], +["uicontrol","edit_length","1/200","Callback",[]], +["uicontrol","edit_axis","0 0 1","Callback",[]], +["uicontrol","button_dlggobj_ok",[],"Callback",[]], +["uicontrol","button_cone_cylinder",[],"Callback",[]], +["uicontrol","edit_radius_1","0.0145","Callback",[]], +["uicontrol","edit_radius_2","0.0145","Callback",[]], +["uicontrol","edit_length","1/200","Callback",[]], +["uicontrol","edit_axis","0 0 1","Callback",[]], +["uicontrol","button_dlggobj_ok",[],"Callback",[]], +["uicontrol","list_select_gobj",["+ C1","+ C2"],"Callback",[]], +["uicontrol","button_subtract_gobj",[],"Callback",[]], +["uitext*",[],"Then create a block overlapping a quarter and intersect it with the resulting cylindrical pipe shell."], +["uicontrol","button_block",[],"Callback",[]], +["uicontrol","edit_x_max","0.015","Callback",[]], +["uicontrol","edit_y_max","-0.015","Callback",[]], +["uicontrol","edit_z_max","1/200","Callback",[]], +["uicontrol","button_dlggobj_ok",[],"Callback",[]], +["uicontrol","list_select_gobj",["+ CS1","+ B1"],"Callback",[]], +["uicontrol","button_intersect_gobj",[],"Callback",[]], +["imgcap"], +["uicontrol","button_grid_mode",1,"Callback",[]], +["uicontrol","grid_hmax","0.0005"], +["uicontrol","grid_generate",[],"Callback",[]], +["imgcap"], +["uicontrol","button_equation_mode",1,"Callback",[]], +["uitext",[],"In the _Equation Settings_ dialog box, set the thermal conductivity to _180 W/m C_, the other coefficients will not be used, they can be left to their default values. Note that it is up to the user to define and use a consistent system of units for coefficients and parameters, here SI units is chosen."], +["uicontrol","toggle_flow",0,"Callback",[]], +["uicontrol","toggle_temp",1,"Callback",[]], +["uicontrol","edit_heatcond","180","Callback",[]], +["imgcap"], +["uicontrol","button_dlgeqn_ok",[],"Callback",[]], +["uicontrol","button_boundary_mode",1,"Callback",[]], +["uitext",[],"Set the temperature to _120 C_ for the inner boundary."], +["uicontrol*","list_seldom",["6"],"Callback",[]], +["uicontrol*","popup_selbc_ht",["Temperature"],"Callback",[]], +["uicontrol*","edit_bccoef1_ht","120","Callback",[]], +["uitext",[],"The _Heat flux_ condition should be selected for the outer boundary, with a heat transfer coefficient _60 W/m C_ and surrounding bulk temperature of _25 C_. This condition prescribes the rate at which heat is lost to the surrounding air (which is not modeled here)."], +["uicontrol*","list_seldom",["1"],"Callback",[]], +["uicontrol*","popup_selbc_ht",["Heat flux"],"Callback",[]], +["uicontrol","edit_bccoef1_ht","60*(25-T)","Callback",[]], +["imgcap"], +["uitext",[],"Select _Thermal insulation/symmetry_ for the rest of the boundaries. This condition is appropriate for boundaries that in reality are extended symmetrically as here."], +["uicontrol*","list_seldom",["2","3","4","5"],"Callback",[]], +["uicontrol*","popup_selbc_ht",["Thermal insulation/symmetry"],"Callback",[]], +["uicontrol","button_dlgbdr_ok",[],"Callback",[]], +["uicontrol","button_solve_mode",1,"Callback",[]], +["uicontrol","button_solve",[],"Callback",[]], +["uitext*",[],"After the problem has been solved FEATool will automatically switch to postprocessing mode and show the computed Temperature where we can see that the outside of the pipe has been somewhat cooled due to heat loss."], +["uitext*",[],"We also can calculate the computed heat loss by integrating the heat flux on the outer boundary and compare it with the theoretical solution."], +["uimenu",["Post","Boundary Integration..."],[],"Callback",[]], +["uicontrol","list_seldom",["1"],"Callback",[]], +["uitext*",[],"Multiply the expression for the outward heat flux with _4*200_ (accounting for simulation of a _5 mm_ quarter section) to get the total heat loss in _W/m_."], +["uicontrol","edit_intexpr","4*200*(-k_ht*(nx*Tx+ny*Ty+nz*Tz))","Callback",[]], +["uitext*",[],"The computed value should be close to the theoretical reference value of _537 W/m_. The small discrepancies are mainly due to a linear representation of the curved pipe boundary and can be improved by refining the mesh."], +["imgcap"], +["uicontrol","button_dlginteval_ok",[],"Callback",[]], +["uivalidate",[],"pass=0;try,i=intbdr('-4*200*k_ht*(nx*Tx+ny*Ty+nz*Tz)',fea,1);pass=abs(i-537)/537<0.025;catch,end"], +["imgcap"], +["uitext*",[],"To compare the heat loss with the modified geometry, first go back to _Geometry mode_ to add the fins."], +["uicontrol","button_geometry_mode",1,"Callback",""], +["uitext*",[],"Use the _undo geometry objects_ button to recover the original input shapes."], +["uicontrol","list_select_gobj",["+ CI1"],"Callback",""], +["uicontrol","button_undo_gobj","","Callback",""], +["uicontrol","list_select_gobj",["+ CS1"],"Callback",""], +["uicontrol","button_undo_gobj","","Callback",""], +["uitext*",[],"Add two cylinders for the fins."], +["uicontrol","button_cone_cylinder","","Callback",""], +["uicontrol","edit_radius_1","0.03","Callback",""], +["uicontrol","edit_radius_2","0.03","Callback",""], +["uicontrol","edit_length","1e-3","Callback",""], +["uicontrol","edit_axis","0 0 1","Callback",""], +["uicontrol","button_dlggobj_ok","","Callback",""], +["uicontrol","button_cone_cylinder","","Callback",""], +["uicontrol","edit_center","0 0 ","Callback",""], +["uicontrol","edit_center","0 0 1/200-1e-3","Callback",""], +["uicontrol","edit_radius_1","0.03","Callback",""], +["uicontrol","edit_radius_2","0.03","Callback",""], +["uicontrol","edit_length","1e-3","Callback",""], +["uicontrol","edit_axis","0 0 1","Callback",""], +["uicontrol","button_dlggobj_ok","","Callback",""], +["uitext*",[],"Extend the block to also cover the fins."], +["uicontrol","list_select_gobj",["+ B1"],"Callback",""], +["uicontrol","button_edit_gobj","","Callback",""], +["uicontrol","edit_x_max","0.03","Callback",""], +["uicontrol","edit_y_min","-0.03","Callback",""], +["uicontrol","button_dlggobj_ok","","Callback",""], +["imgcap"], +["uitext*",[],"Finally join the outer cylinder and fins, subtract the inner cylinder, and intersect with the block to generate the final shape."], +["uimenu",["Geometry","Combine Objects..."],"","Callback",""], +["uicontrol","edit_dlgedit","C1 + C3 + C4 - C2 & B1","Callback",""], +["imgcap"], +["uicontrol","button_dlgedit_ok","","Callback",""], +["uicontrol","button_grid_mode",1,"Callback",""], +["uicontrol","grid_hmax","0.0005"], +["uicontrol","grid_generate",[],"Callback",[]], +["imgcap"], +["uitext*",[],"Set the boundary conditions similar to the first simulation with the original shape (with the difference that there now are more boundary segments due to the added fins)."], +["uicontrol","button_boundary_mode",1,"Callback",[]], +["uicontrol","list_seldom",["3"],"Callback",[]], +["uicontrol","popup_selbc_ht",["Temperature"],"Callback",[]], +["uicontrol","edit_bccoef1_ht","120","Callback",[]], +["uicontrol","list_seldom",["1","2","4","5","6","7"],"Callback",[]], +["uicontrol","popup_selbc_ht",["Thermal insulation/symmetry"],"Callback",[]], +["uicontrol","list_seldom",["8","9","10","11","12"],"Callback",[]], +["uicontrol","popup_selbc_ht",["Heat flux"],"Callback",[]], +["uicontrol","edit_bccoef1_ht","60*(25-T)","Callback",[]], +["uicontrol","button_dlgbdr_ok",[],"Callback",[]], +["uicontrol","button_solve_mode",1,"Callback",[]], +["uicontrol","button_solve",[],"Callback",[]], +["uitext*",[],"After solving we can clearly see how the fins help to cool the outer temperature."], +["uitext*",[],"Perform boundary integration of the heat flux as before and compare with the theoretical result _5320 W/m_, and note that with the added fins we now get almost 10 times more effective cooling due to the increased added surface area."], +["uimenu",["Post","Boundary Integration..."],"","Callback",""], +["uicontrol","list_seldom",["8","9","10","11","12"],"Callback",""], +["uicontrol","edit_intexpr","4*200*(-k_ht*(nx*Tx+ny*Ty+nz*Tz))","Callback",""], +["uicontrol","button_dlginteval_ok","","Callback",""], +["imgcap"], +["uivalidate",[],"pass=0;try,i=intbdr('-4*200*k_ht*(nx*Tx+ny*Ty+nz*Tz)',fea,8:12);pass=abs(i-5320)/5320<0.1;catch,end"] +]} diff --git a/tutorials/02_Heat_Transfer/heat_transfer1.jpg b/tutorials/02_Heat_Transfer/heat_transfer1.jpg new file mode 100644 index 0000000..128a287 Binary files /dev/null and b/tutorials/02_Heat_Transfer/heat_transfer1.jpg differ diff --git a/tutorials/02_Heat_Transfer/heat_transfer2.jpg b/tutorials/02_Heat_Transfer/heat_transfer2.jpg new file mode 100644 index 0000000..cd49a5e Binary files /dev/null and b/tutorials/02_Heat_Transfer/heat_transfer2.jpg differ diff --git a/tutorials/02_Heat_Transfer/heat_transfer3.jpg b/tutorials/02_Heat_Transfer/heat_transfer3.jpg new file mode 100644 index 0000000..2338097 Binary files /dev/null and b/tutorials/02_Heat_Transfer/heat_transfer3.jpg differ diff --git a/tutorials/02_Heat_Transfer/heat_transfer5.jpg b/tutorials/02_Heat_Transfer/heat_transfer5.jpg new file mode 100644 index 0000000..ed77569 Binary files /dev/null and b/tutorials/02_Heat_Transfer/heat_transfer5.jpg differ diff --git a/tutorials/02_Heat_Transfer/thermal_bridge1.jpg b/tutorials/02_Heat_Transfer/thermal_bridge1.jpg new file mode 100644 index 0000000..bca1387 Binary files /dev/null and b/tutorials/02_Heat_Transfer/thermal_bridge1.jpg differ diff --git a/tutorials/03_Fluid_Dynamics/01_channel_flow1.fes b/tutorials/03_Fluid_Dynamics/01_channel_flow1.fes new file mode 100644 index 0000000..59c2ca3 --- /dev/null +++ b/tutorials/03_Fluid_Dynamics/01_channel_flow1.fes @@ -0,0 +1,65 @@ +{"meta":{"app":"CFDTool","author":"Precise Simulation","build":"1.4","date":"01-Sep-2019","descr":"Stationary and incompressible laminar Poiseuille flow in a two- dimensional rectangular channel. With a constant inflow profile _u(y) = U_max_ and fixed no-slip walls, a fully developed laminar parabolic profile, _u(y) = U_max*4/h^2*y*(h-y)_ is expected to develop at the outflow.","dim":2,"image":"channel_flow1.jpg","keyw":["channel_flow","validation"],"mlver":"R2019a","name":"channel_flow1","phys":["Navier-Stokes Equations"],"system":"","time":737451,"title":"Laminar Channel Flow","type":"Fluid Dynamics","user":"precsim","ver":[1,4,0]}, +"fields":["type","id","ui_arg","fcn_type","fcn_oarg"], +"data":[ +["uipushtool","Standard.NewFigure",{},"ClickedCallback",{}], +["uicontrol","radio_2d",0,"Callback",{}], +["uicontrol","button_dlgnew_ok",{},"Callback",{}], +["uicontrol","button_rectangle",{},"Callback",[0,1,0,1,"R1"]], +["uicontrol","list_select_gobj",["R1"],"Callback",{}], +["uicontrol","button_edit_gobj",{},"Callback",{}], +["uicontrol","edit_x_min","0","Callback",{}], +["uicontrol","edit_x_max","2.5","Callback",{}], +["uicontrol","edit_y_min","0","Callback",{}], +["uicontrol","edit_y_max","0.5","Callback",{}], +["uicontrol","button_dlggobj_ok",{},"Callback",{}], +["imgcap"], +["uicontrol","button_grid_mode",1,"Callback",{}], +["uitext*",[],"The default grid may be too coarse ensure an accurate solution. Decrease the grid size to generate a finer grid that better can resolve the curved boundary."], +["uicontrol","grid_hmax","0.04"], +["uitext",[],"Press the **Generate** button to call the automatic grid generation algorithm."], +["uicontrol*","grid_generate",[],"Callback",[]], +["imgcap"], +["uicontrol","button_equation_mode",1,"Callback",{}], +["uitext",[], "Equation and material coefficients are be specified in _Equation/Subdomain_ mode. In the _Equation Settings_ dialog box that automatically opens, enter `1` for the fluid _Density_ and `0.001` for the _Viscosity_. The other coefficients can be left to their default values. Press **OK** to finish the equation and subdomain settings specification."], +["uitext*",[],"Note that CFDTool works with any unit system, and it is up to the user to use consistent units for geometry dimensions, material, equation, and boundary coefficients."], +["uicontrol*","edit_density","1","Callback",{}], +["uicontrol*","edit_viscosity","0.001","Callback",{}], +["imgcap"], +["uicontrol*","button_dlgeqn_ok",{},"Callback",{}], +["uitext*",[],"A convenient way to to define and store coefficients, variables, and expressions is using the _Model Constants and Expressions_ functionality. The defined expressions can then be used in point, equation, boundary coefficients, as well as postprocessing expressions, and can easily be changed and updated in a single place."], +["uitext",[],["In order to define an expression for the reference velocity profile at the outflow, press the **Constants** _Toolbar_ button, or select the corresponding entry from the _Equation_ menu, and enter the following variables in the _Model Constants and Expressions_ dialog box.","| Name | Expression |","|--------|------------------------|","| h | 0.5 |","| l | 2.5 |","| umax | 0.3 |","| uref | 4*umax*(y*(h-y))/h^2 |"]], +["uicontrol*","button_const_expr",{},"Callback",{}], +["uicontrol*","edit_dlgexpr_11","h","Callback",{}], +["uicontrol*","edit_dlgexpr_12","0.5","Callback",{}], +["uicontrol*","edit_dlgexpr_21","l","Callback",{}], +["uicontrol*","edit_dlgexpr_22","2.5","Callback",{}], +["uicontrol*","edit_dlgexpr_31","umax","Callback",{}], +["uicontrol*","edit_dlgexpr_32","0.3","Callback",{}], +["uicontrol*","edit_dlgexpr_41","uref","Callback",{}], +["uicontrol*","edit_dlgexpr_42","4*umax*(y*(h-y))/h^2","Callback",{}], +["imgcap"], +["uicontrol*","button_dlgexpr_ok",[],"Callback",[]], +["uicontrol","button_boundary_mode",1,"Callback",{}], +["uitext*",[],"Boundary conditions are defined in _Boundary Mode_ and describes how the model interacts with the external environment."], +["uicontrol","list_seldom",["1","3"],"Callback",{}], +["uicontrol","popup_selbc_ns",["Wall/no-slip"],"Callback",{}], +["uicontrol","list_seldom",["4"],"Callback",{}], +["uicontrol","popup_selbc_ns",["Inlet/velocity"],"Callback",{}], +["uicontrol","edit_bccoef1_ns","2/3*umax","Callback",{}], +["imgcap"], +["uicontrol","list_seldom",["2"],"Callback",{}], +["uicontrol","popup_selbc_ns",["Outflow/pressure"],"Callback",{}], +["uicontrol","button_dlgbdr_ok",{},"Callback",{}], +["uitext",[],"Now that the problem is fully specified, press the **Solve** _Mode Toolbar_ button to switch to solve mode. Then press the **=** _Tool_ button to call the solver with the default solver settings."], +["uicontrol*","button_solve_mode",1,"Callback",[]], +["uicontrol*","button_solve",[],"Callback",[]], +["uitext*",[],"After the problem has been solved CFDTool will automatically switch to postprocessing mode and here display the magnitude of the computed velocity field. One can clearly see the the maximum velocity is about _0.3_ along the center line as is expected. Clicking anywhere in a surface plot also directly evaluates the surface expression at the location."], +["imgcap"], +["uitext",[],"One can also visualize the error between the analytical solution and the computed one. To do this, open the postprocessing settings dialog box by clicking on the **Plot Options** _Toolbar_ button, and enter the expression `abs(sqrt((uref)^2)-sqrt(u^2+v^2))*(x>3/4*l)` in the _Surface Plot_ expression edit field. Press **OK** or _Apply_."], +["uicontrol*","button_post_settings",{},"Callback",{}], +["uicontrol*","ssurfexpr","abs(sqrt((uref)^2)-sqrt(u^2+v^2))*(x>3/4*l)","Callback",{}], +["uicontrol*","button_dlgpost_ok",[],"Callback",[]], +["imgcap"], +["uitext*",[],"The visualization shows the error towards the outlet, and has an acceptable magnitude around _5e-3_."], +["uivalidate",[],"pass=0;try,c_ind=find(evalexpr0('x>2/4*l',[1;1;1]/3,1,1:size(fea.grid.c,2),[],fea)).';err=evalexpr0('abs(sqrt(uref^2)-sqrt(u^2+v^2))',[1;1;1]/3,1,c_ind,[],fea);ref=evalexpr0(['sqrt((uref)^2)'],[1;1;1]/3,1,c_ind,[],fea);err=sqrt(sum(err.^2)/sum(ref.^2));pass=err<0.05;catch,end"] +]} diff --git a/tutorials/03_Fluid_Dynamics/02_driven_cavity1.fes b/tutorials/03_Fluid_Dynamics/02_driven_cavity1.fes new file mode 100644 index 0000000..8bb16fc --- /dev/null +++ b/tutorials/03_Fluid_Dynamics/02_driven_cavity1.fes @@ -0,0 +1,69 @@ +{"meta":{"app":"CFDTool","author":"Precise Simulation","build":"1.4","date":"01-Sep-2019","descr":["Stationary and laminar incompressible flow in a square cavity (Reynolds number, _Re = 1000_). The top of the cavity is prescribed a tangential velocity while the sides and bottom are defined as no-slip zero velocity walls.","","References:","","[1] Botella O, Peyret R. Benchmark spectral results on the lid-driven cavity flow. Computers and Fluids 27(4):421-433, 1998.","","[2] Erturk E, Corke TC, Gokcol C. Numerical solutions of 2-D steady incompressible driven cavity flow at high Reynolds numbers. Int- ernational Journal for Numerical Methods in Fluids 37(6):633-655, 2005.","","[3] Nishida H, Satofuka N. Higher-order solutions of square driven cavity flow using a variable-order multi-grid method. International Journal for Numerical Methods in Engineering 34(2):637-653, 1992.","","[4] Schreiber R, Keller HB. Driven cavity flows by efficient numerical techniques. Journal of Computational Physics 49(2):310-333, 1983."],"dim":2,"image":"driven_cavity1.jpg","keyw":["driven_cavity","validation"],"mlver":"R2019a","name":"driven_cavity1","phys":["Navier-Stokes Equations"],"system":"","time":737451,"title":"Flow in Driven Cavity","type":"Fluid Dynamics","user":"precsim","ver":[1,4,0]}, +"fields":["type","id","ui_arg","fcn_type","fcn_oarg"], +"data":[ +["uipushtool","Standard.NewFigure",{},"ClickedCallback",{}], +["uicontrol","radio_2d",0,"Callback",{}], +["uicontrol","button_dlgnew_ok",{},"Callback",{}], +["uitext*",[],"First create a unit square for the geometry."], +["uicontrol","button_rectangle",{},"Callback",[0.3,0.5,0.3,0.8,"R1"]], +["uicontrol","list_select_gobj",["R1"],"Callback",{}], +["uicontrol","button_edit_gobj",{},"Callback",{}], +["uicontrol","edit_x_min","0","Callback",{}], +["uicontrol","edit_x_max","1","Callback",{}], +["uicontrol","edit_y_min","0","Callback",{}], +["uicontrol","edit_y_max","1","Callback",{}], +["uicontrol","button_dlggobj_ok",{},"Callback",{}], +["uicontrol","button_grid_mode",1,"Callback",{}], +["uicontrol","grid_hmax","0.02"], +["uicontrol","grid_generate",{},"Callback",{}], +["imgcap"], +["uicontrol","button_equation_mode",1,"Callback",{}], +["uitext",[], "Equation and material coefficients are be specified in _Equation/Subdomain_ mode. In the _Equation Settings_ dialog box that automatically opens, enter `1` for the fluid _Density_ and `umax/l/R` for the _Viscosity_. The other coefficients can be left to their default values. Press **OK** to finish the equation and subdomain settings specification."], +["uitext*",[],"Note that CFDTool works with any unit system, and that the units here are non-dimensionalized."], +["uicontrol*","edit_density","1","Callback",{}], +["uicontrol*","edit_viscosity","umax/l/Re","Callback",{}], +["imgcap"], +["uicontrol*","button_dlgeqn_ok",{},"Callback",{}], +["uitext",[],["Press the **Constants** _Toolbar_ button, or select the corresponding entry from the _Equation_ menu, and enter the variables for the velocity _umax_, length _l_, and Reynolds number _Re_ in the _Model Constants and Expressions_ dialog box.","| Name | Expression |","|--------|-------------|","| umax | 1 |","| l | 1 |","| Re | 1000 |"]], +["uicontrol*","button_const_expr",{},"Callback",{}], +["uicontrol*","edit_dlgexpr_11","umax","Callback",{}], +["uicontrol*","edit_dlgexpr_12","1","Callback",{}], +["uicontrol*","edit_dlgexpr_21","l","Callback",{}], +["uicontrol*","edit_dlgexpr_22","1","Callback",{}], +["uicontrol*","edit_dlgexpr_31","Re","Callback",{}], +["uicontrol*","edit_dlgexpr_32","1000","Callback",{}], +["imgcap"], +["uicontrol*","button_dlgexpr_ok",{},"Callback",{}], +["uitext*",[],"Boundary conditions consist of no-slip zero velocity conditions on all walls except for the top on which a constant x-velocity _umax_ is prescribed."], +["uicontrol","button_boundary_mode",1,"Callback",{}], +["uicontrol","list_seldom",["4"],"Callback",{}], +["uicontrol","list_seldom",["1","2","3","4"],"Callback",{}], +["uicontrol","popup_selbc_ns",["Wall/no-slip"],"Callback",{}], +["uicontrol","list_seldom",["3"],"Callback",{}], +["uicontrol","popup_selbc_ns",["Inlet/velocity"],"Callback",{}], +["uicontrol","edit_bccoef1_ns","umax","Callback",{}], +["imgcap"], +["uicontrol","button_dlgbdr_ok",{},"Callback",{}], +["uitext",[],"Now that the problem is fully specified, press the **Solve** _Mode Toolbar_ button to switch to solve mode. Then press the **=** _Tool_ button to call the solver with the default solver settings."], +["uicontrol*","button_solve_mode",1,"Callback",{}], +["uicontrol*","button_solve",{},"Callback",{}], +["uitext*",[],"After the problem has been solved CFDTool will automatically switch to postprocessing mode and here display the magnitude of the computed velocity field."], +["imgcap"], +["uicontrol","button_post_settings",{},"Callback",{}], +["uicontrol","post_surf",["Vorticity"],"Callback",{}], +["uicontrol","ffiso",1,"Callback",{}], +["uicontrol","sisolev","30","Callback",{}], +["uicontrol","ffarrow",1,"Callback",{}], +["uicontrol","button_dlgpost_ok",{},"Callback",{}], +["imgcap"], +["uitext*",[],"To evaluate the accuracy of the solution the vorticity at _(0.53, 0.56)_ is evaluated. Either click directly at this point or use the _Point/Line Evaluation_ functionality."], +["uimenu","Point/Line Evaluation...",{},"Callback",{}], +["uicontrol","popup_evalexpr",["Vorticity"],"Callback",{}], +["uicontrol","edit_xcoord","0.53","Callback",{}], +["uicontrol","edit_ycoord","0.564","Callback",{}], +["imgcap"], +["uicontrol","buttons_dlgpntline_ok",{},"Callback",{}], +["uitext*",[],"The computed vorticity at the evaluated point is _-1.73_ which is quite close to the reference value of _-2.068_, to achieve a better approximation a finer grid and higher order discretization would be necessary."], +["imgcap"], +["uivalidate",[],"pass=0;try,vort=evalexpr('vx-uy',[0.53;0.564],fea);err=abs(-2.068-vort)/2.068;pass=err<0.35;catch,end"] +]} diff --git a/tutorials/03_Fluid_Dynamics/03_flow_around_cylinder1.fes b/tutorials/03_Fluid_Dynamics/03_flow_around_cylinder1.fes new file mode 100644 index 0000000..39dec5b --- /dev/null +++ b/tutorials/03_Fluid_Dynamics/03_flow_around_cylinder1.fes @@ -0,0 +1,99 @@ +{"meta":{"app":"CFDTool","author":"Precise Simulation","build":"1.4","date":"01-Sep-2019","descr":["Benchmark problem for stationary, laminar, and incompressible flow around a cylinder. Although it is not possible to derive an analytical solution to this test case, very accurate numerical solutions to benchmark reference quantities have been established for the pressure difference, drag, and lift coefficient [1],[2].","","The test configuration considers a solid cylinder centered at _(0.2, 0.2)_ with diameter _d = 0.1_ in a _l = 2.2_ by _h = 0.41_ rectangular channel. The fluid is assumed to have a constant density equal to _1_ and viscosity _0.001_. A fully developed parabolic velocity profile is prescribed at the inlet, _u(0,y) = (4*umax*y(h-y)/h^2, 0)_, with a maximum velocity of _umax = 0.3_. This results in the mean velocity _umean = 2/3*umax = 0.2_ and laminar flow with Reynolds number _Re = rho*umean*d/miu = 20_.","","References:","","[1] John V, Matthies G. Higher-order finite element discretizations in a benchmark problem for incompressible flows. International Journal for Numerical Methods in Fluids 2001.","","[2] Nabh G. On higher order methods for the stationary incompressible Navier-Stokes equations. PhD Thesis, Universitaet Heidelberg, 1998."],"dim":2,"image":"flow_around_cylinder1.jpg","keyw":["cylinder_flow","validation"],"mlver":"R2018b","name":"flow_around_cylinder1","phys":["Navier-Stokes Equations"],"system":"","time":737451,"title":"Flow Around a Cylinder","type":"Fluid Dynamics","user":"precsim","ver":[1,4,0]}, +"fields":["type","id","ui_arg","fcn_type","fcn_oarg"], +"data":[ +["uipushtool","Standard.NewFigure",[],"ClickedCallback",[]], +["uicontrol","radio_2d",0,"Callback",[]], +["imgcap"], +["uicontrol","button_dlgnew_ok",[],"Callback",[]], +["uicontrol","button_rectangle",[],"Callback",[0,1,0,1,"R1"]], +["uicontrol","list_select_gobj",["R1"],"Callback",[]], +["uicontrol","button_edit_gobj",[],"Callback",[]], +["uitext",[],"In the _Edit Geometry Object_ dialog box, edit the minimum and maximum coordinates to define a rectangle with length `2.2` and height `0.41`. Finish editing the geometry object and close the dialog box by clicking **OK**."], +["uicontrol*","edit_x_min","0","Callback",[]], +["uicontrol*","edit_x_max","2.2","Callback",[]], +["uicontrol*","edit_y_min","0","Callback",[]], +["uicontrol*","edit_y_max","0.41","Callback",[]], +["imgcap"], +["uicontrol*","button_dlggobj_ok",[],"Callback",[]], +["imgcap"], +["uicontrol","button_circle_ellipse",[],"Callback",[[0.4,0.2],0.2,0.1,"E1"]], +["uicontrol","list_select_gobj",["E1"],"Callback",[]], +["uicontrol","button_edit_gobj",[],"Callback",[]], +["uitext",[],"In the _Edit Geometry Object_ dialog box change the center coordinates to `0.2 0.2`, and the _x_ and _y_ radius `0.05` in the corresponding edit fields. Finish editing _E1_ and close the dialog box by clicking **OK**."], +["uicontrol*","edit_center","0.2 0.2","Callback",[]], +["uicontrol*","edit_x_radius","0.05","Callback",[]], +["uicontrol*","edit_y_radius","0.05","Callback",[]], +["imgcap"], +["uicontrol*","button_dlggobj_ok",[],"Callback",[]], +["uitext*",[],"To subtract the circle from the rectangle first select both geometry objects by clicking on them so both are highlighted in red, and then click on the **- / Subtract geometry objects** button. (Alternatively, if the circle is obscured by the rectangle they can be selected by holding the _Ctrl_ key while clicking on the labels **R1** and **E1** in the Selection list box, or in this case simply pressing _Ctrl + a_ to select all objects)."], +["uicontrol*","list_select_gobj",["R1","E1"],"Callback",[]], +["imgcap"], +["uicontrol*","button_subtract_gobj",[],"Callback",[]], +["uicontrol","button_grid_mode",1,"Callback",[]], +["uitext*",[],"The default grid may be too coarse ensure an accurate solution. Decrease the grid size to generate a finer grid that better can resolve the curved boundary."], +["uicontrol","grid_hmax","0.02"], +["uicontrol","grid_generate",[],"Callback",[]], +["imgcap"], +["uicontrol","button_equation_mode",1,"Callback",[]], +["uitext",[],"In the _Equation Settings_ dialog box that automatically opens, set the density to `1` and viscosity to `0.001` in the corresponding edit fields. The other coefficients can be left to their zero default values. Press **OK** to finish and close the dialog box."], +["uicontrol*","edit_density","rho","Callback",[]], +["uicontrol*","edit_viscosity","miu","Callback",[]], +["imgcap"], +["uitext",[],["Press the **Constants** _Toolbar_ button, or select the corresponding entry from the _Equation_ menu, to open the _Model Constants and Expressions_ dialog box. Enter the following expressions for the fluid parameters, inlet velocity, force, and drag coefficient. Press _Enter_ after the last expression or use the **Add Row** button to expand the expression list.","| Name | Expression |","|---------|----------------------------------|","| h | 0.41 |","| diam | 0.1 |","| rho | 1 |","| miu | 0.001 |","| umax | 0.3 |","| umean | 2/3*umax |","| fx | nx*p+miu*(-2*nx*ux-ny*(uy+vx)) |","| cd | 2*fx/(rho*umean^2*diam) |"]], +["uicontrol*","button_dlgeqn_ok",[],"Callback",[]], +["uicontrol*","button_const_expr",[],"Callback",[]], +["uicontrol*","edit_dlgexpr_11","h","Callback",[]], +["uicontrol*","edit_dlgexpr_12","0.41","Callback",[]], +["uicontrol*","edit_dlgexpr_21","diam","Callback",[]], +["uicontrol*","edit_dlgexpr_22","0.1","Callback",[]], +["uicontrol*","edit_dlgexpr_31","rho","Callback",[]], +["uicontrol*","edit_dlgexpr_32","1","Callback",[]], +["uicontrol*","edit_dlgexpr_41","miu","Callback",[]], +["uicontrol*","edit_dlgexpr_42","0.001","Callback",[]], +["uicontrol*","edit_dlgexpr_51","umax","Callback",[]], +["uicontrol*","edit_dlgexpr_52","0.3","Callback",[]], +["uicontrol*","edit_dlgexpr_61","umean","Callback",[]], +["uicontrol*","edit_dlgexpr_62","2/3*umax","Callback",[]], +["uicontrol*","edit_dlgexpr_71","fx","Callback",[]], +["uicontrol*","edit_dlgexpr_72","nx*p+miu*(-2*nx*ux-ny*(uy+vx))","Callback",[]], +["uicontrol*","edit_dlgexpr_81","cd","Callback",[]], +["uicontrol*","edit_dlgexpr_82","2*fx/(rho*umean^2*diam)","Callback",[]], +["imgcap"], +["uicontrol*","button_dlgexpr_ok",[],"Callback",[]], +["uicontrol","button_boundary_mode",1,"Callback",[]], +["uitext",[],"In the _Boundary Settings_ dialog box, first select all boundaries except for the right outflow and left inflow (numbers **1**, **3**, and **5-8**) in the left hand side _Boundaries_ selection list box, and select the **Wall/no-slip** boundary condition from the drop-down menu."], +["uicontrol*","list_seldom",["1","3","5","6","7","8"],"Callback",[]], +["uicontrol*","popup_selbc_ns",["Wall/no-slip"],"Callback",[]], +["imgcap"], +["uitext",[],"Select the right outflow boundary (number **2**) and select the **Outflow/pressure** boundary condition from the drop-down menu (alternatively one can prescribe the **Neutral outflow/stress boundary** condition)."], +["uicontrol*","list_seldom",["2"],"Callback",[]], +["uicontrol*","popup_selbc_ns",["Outflow/pressure"],"Callback",[]], +["imgcap"], +["uitext",[],"Lastly select the left inflow boundary (number **4**) and select the **Inlet/velocity** boundary condition from the drop-down menu. To specify a parabolic velocity profile enter the expression `4*umax*y*(h-y)/h^2` in the edit field for the velocity coefficient in the x-direction, _u0_. Finish by clicking the **OK** button."], +["uicontrol*","list_seldom",["4"],"Callback",[]], +["uicontrol*","popup_selbc_ns",["Inlet/velocity"],"Callback",[]], +["uicontrol*","edit_bccoef1_ns","4*umax*y*(h-y)/h^2","Callback",[]], +["imgcap"], +["uicontrol","button_dlgbdr_ok",[],"Callback",[]], +["uitext",[],"Now that the problem is fully specified, press the **Solve** _Mode Toolbar_ button to switch to solve mode. Then press the **=** _Tool_ button to call the solver with the default solver settings."], +["uicontrol*","button_solve_mode",1,"Callback",[]], +["uicontrol*","button_solve",[],"Callback",[]], +["uitext*",[],"After the problem has been solved CFDTool will automatically switch to postprocessing mode and display the computed velocity field."], +["uicontrol","button_post_settings",[],"Callback",[]], +["uicontrol","ffiso",1,"Callback",[]], +["uicontrol","post_iso",["Pressure"],"Callback",[]], +["uicontrol","ffarrow",1,"Callback",[]], +["imgcap"], +["uicontrol","button_dlgpost_ok",[],"Callback",[]], +["imgcap"], +["uitext",[],"To calculate the drag coefficient. Select **Boundary Integration...** from the _Post_ menu. In the _Boundary Integration_ dialog box, select the boundaries which make up the circle (numbers **5-8**) in the left hand side _Boundaries_ selection list box. Then enter the name for the previously defined expression for the drag coefficient, `cd`, in to the _Integration Expression_ edit field. Press the **OK** or _Apply_ button to show the result in the lower _Integration Result_ frame as well as in the _Command Log_ message window."], +["uimenu*","Boundary Integration...",[],"Callback",[]], +["uicontrol*","list_seldom",["5","6","7","8"],"Callback",[]], +["uicontrol*","edit_intexpr","cd","Callback",[]], +["uicontrol*","button_dlginteval_apply",[],"Callback",[]], +["imgcap"], +["uitext*",[],"The computed drag coefficient is _5.3_ which is close to the reference value of _5.5795_. To get a closer result one could use a finer grid along the cylinder boundary, as well as higher order elements which yield higher accuracy for quantities involving derivatives (as the force terms here do)."], +["uicontrol*","button_dlginteval_cancel",[],"Callback",[]], +["uitext*",[],"Similar to the drag one can compute the lift coefficient defining _fy_ as `ny*p+miu*(-nx*(uy+vx)-2*ny*vy)`, and _cl_ = `2*fy/(rho*umean^2*diam)`. And the pressure difference can be computed by directly evaluating the pressure at the front and back of the cylinder with the _Point/Line Evaluation_ functionality, and computing the difference."], +["uivalidate",[],"pass=0;try,c_d=intbdr('cd',fea,5:8,2);err=abs(c_d-5.579535)/5.579535;pass=err<0.05;catch,end"] +]} diff --git a/tutorials/03_Fluid_Dynamics/04_backwards_facing_step1.fes b/tutorials/03_Fluid_Dynamics/04_backwards_facing_step1.fes new file mode 100644 index 0000000..2410edf --- /dev/null +++ b/tutorials/03_Fluid_Dynamics/04_backwards_facing_step1.fes @@ -0,0 +1,97 @@ +{"meta":{"app":"CFDTool","author":"Precise_Simulation","build":"1.4","date":"01-Sep-2019","descr":["Flow over a backwards facing step is a classic computational fluid dynamics test problem which is used extensively for validation of simulation codes. The test problem essentially consists of studying how a fully developed flow profile reacts to a sudden expansion in a channel. The expansion will cause a break in the flow and a recirculation or separation zone will form. To measure and compare results the resulting length of the recirculation or separation zone is used.","","The stationary incompressible Navier-Stokes equations are applied with simulation parameters corresponding to a Reynolds number, _Re = 389_. The inlet velocity is given as _uinlet = 4 * umax*(y-hstep)*(1-y)/hinlet^2_ where _hinlet_ is the channel height, _hstep_ the expansion step height, and _u_max = 1_ the maximum velocity. No-slip zero velocity conditions are applied to all solid walls, and a suitable outflow condition must also be applied. The reference recirculation zone length found in the references [1], [2] is estimated to be _7.93_ length units (fraction of the step height).","","References:","","[1] P.M. Gresho and R.L. Sani, Incompressible Flow and the Finite Element Method, Volume 1 & 2, John Wiley & Sons, New York, 2000.","","[2] A. Rose and B. Simpson: Laminar, Constant-Temperature Flow Over a Backward Facing Step, 1st NAFEMS Workbook of CFD Examples, Glasgow, UK, 2000."],"dim":2,"image":"backwards_facing_step1.jpg","keyw":["validation"],"mlver":"R2019a","name":"backwards_facing_step1","phys":["Navier-Stokes Equations"],"system":"","time":737453,"title":"Flow Over a Backwards Facing Step","type":"Fluid Dynamics","user":"precsim","ver":[1,4,0]}, +"fields":["type","id","ui_arg","fcn_type","fcn_oarg"], +"data":[ +["uipushtool","Standard.NewFigure",{},"ClickedCallback",{}], +["uicontrol","radio_2d",0,"Callback",{}], +["imgcap"], +["uicontrol","button_dlgnew_ok",{},"Callback",{}], +["uicontrol","button_rectangle",{},"Callback",[0,1,0,1,"R1"]], +["uitext*",[],"The backwards facing step geometry is generated by creating a larger rectangle for the channel from which a smaller section is removed to create the expansion step. Alternatively, the geometry could also be created by joining two rectangle slices, or directly using the _Polygon_ tool."], +["uitext*",[],"First create the outer rectangle with the scaled dimensions _1 / 0.0101_ by _1_, with the expansion step located at _x = 0_."], +["uicontrol","list_select_gobj",["R1"],"Callback",{}], +["uicontrol","button_edit_gobj",{},"Callback",{}], +["uicontrol","edit_x_min","-0.02/0.0101","Callback",{}], +["uicontrol","edit_x_max","0.08/0.0101","Callback",{}], +["uicontrol","edit_y_min","0","Callback",{}], +["uicontrol","edit_y_max","1","Callback",{}], +["imgcap"], +["uicontrol","button_dlggobj_ok",{},"Callback",{}], +["imgcap"], +["uitext*",[],"Then create and subtract a second smaller rectangle with dimensions _1.9802_ by _0.0049/0.0101_ to create the step."], +["uicontrol","button_rectangle",{},"Callback",[0.3,0.7,0.3,0.7,"R2"]], +["uicontrol","list_select_gobj",["R2"],"Callback",{}], +["uicontrol","button_edit_gobj",{},"Callback",{}], +["uicontrol","edit_x_min","-0.02/0.0101","Callback",{}], +["uicontrol","edit_x_max","0","Callback",{}], +["uicontrol","edit_y_min","0","Callback",{}], +["uicontrol","edit_y_max","0.0049/0.0101","Callback",{}], +["imgcap"], +["uicontrol","button_dlggobj_ok",{},"Callback",{}], +["imgcap"], +["uicontrol","list_select_gobj",["R1","R2"],"Callback",{}], +["uicontrol","button_subtract_gobj",{},"Callback",{}], +["imgcap"], +["uicontrol","button_grid_mode",1,"Callback",{}], +["uitext*",[],"The default grid may be too coarse ensure an accurate solution. Decreasing the grid size and generating a finer grid gives a more accurate approximation."], +["uicontrol","grid_hmax","0.1"], +["uicontrol","grid_generate",{},"Callback",{}], +["imgcap"], +["uicontrol","button_equation_mode",1,"Callback",{}], +["uitext",[],"In the _Equation Settings_ dialog box that automatically opens, set the density to `1` and viscosity to `u_max*2/3*h_channel/Re` in the corresponding edit fields. In order to start with a better initial guess, set the initial condition for the x-velocity _u0_ to `u_inlet*(y>h_inlet)`. The other coefficients can be left to their default values. Press **OK** to finish and close the dialog box."], +["uicontrol*","edit_density","1","Callback",{}], +["uicontrol*","edit_viscosity","u_max*2/3*h_channel/Re","Callback",{}], +["%uicontrol*","eqn_init1_ns","u_inlet*(y>h_inlet)","Callback",{}], +["imgcap"], +["uitext",[],["Press the **Constants** _Toolbar_ button, or select the corresponding entry from the _Equation_ menu, to open the _Model Constants and Expressions_ dialog box. Enter the following expressions for the channel, fluid parameters, and inlet velocity expression. Press _Enter_ after the last expression or use the **Add Row** button to expand the expression list.","| Name | Expression |","|-------------|--------------------------------------|","| h_step | 0.0049/0.0101 |","| h_channel | 1 |","| h_inlet | h_channel-h_step |","| u_max | 1 |","| Re | 389 |","| u_inlet | 4*u_max*(y-h_step)*(1-y)/h_inlet^2 |"]], +["uicontrol*","button_dlgeqn_ok",{},"Callback",{}], +["uicontrol*","button_const_expr",{},"Callback",{}], +["uicontrol*","edit_dlgexpr_11","h_channel","Callback",{}], +["uicontrol*","edit_dlgexpr_12","1","Callback",{}], +["uicontrol*","edit_dlgexpr_21","h_step","Callback",{}], +["uicontrol*","edit_dlgexpr_22","0.0049/0.0101","Callback",{}], +["uicontrol*","edit_dlgexpr_31","h_inlet","Callback",{}], +["uicontrol*","edit_dlgexpr_32","h_channel-h_step","Callback",{}], +["uicontrol*","edit_dlgexpr_41","Re","Callback",{}], +["uicontrol*","edit_dlgexpr_42","389","Callback",{}], +["uicontrol*","edit_dlgexpr_51","u_max","Callback",{}], +["uicontrol*","edit_dlgexpr_52","1","Callback",{}], +["uicontrol*","edit_dlgexpr_61","u_inlet","Callback",{}], +["uicontrol*","edit_dlgexpr_62","4 * u_max * (y-h_step) * (1-y)/h_inlet^2","Callback",{}], +["imgcap"], +["uicontrol*","button_dlgexpr_ok",{},"Callback",{}], +["uicontrol","button_boundary_mode",1,"Callback",{}], +["uitext",[],"In the _Boundary Settings_ dialog box, first select all boundaries except for the right outflow and left inflow (numbers **1**, **3**, and **5-8**) in the left hand side _Boundaries_ selection list box, and select the **Wall/no-slip** boundary condition from the drop-down menu."], +["uicontrol*","list_seldom",["1","2","3","5"],"Callback",{}], +["uicontrol*","popup_selbc_ns",["Wall/no-slip"],"Callback",{}], +["imgcap"], +["uitext",[],"Select the leftmost boundary (number **4**) and choose the **Inlet/velocity** boundary condition from the drop-down menu. When using the default built-in solver enter the previously defined `u_inlet` expression in the edit field for the x-velocity coefficient _u0_."], +["uicontrol*","list_seldom",["6"],"Callback",{}], +["uicontrol*","popup_selbc_ns",["Inlet/velocity"],"Callback",{}], +["uicontrol*","edit_bccoef1_ns","u_inlet","Callback",{}], +["imgcap"], +["uitext",[],"Finally, select the right outflow boundary (number **2**) and select the **Outflow/pressure** boundary condition from the drop-down menu (alternatively one can prescribe the **Neutral outflow/stress boundary** condition). Finish by clicking the **OK** button."], +["uicontrol*","list_seldom",["4"],"Callback",{}], +["uicontrol*","popup_selbc_ns",["Outflow/pressure"],"Callback",{}], +["imgcap"], +["uicontrol*","button_dlgbdr_ok",{},"Callback",{}], +["uitext",[],"Now that the problem has been defined, press the **Solve** _Mode Toolbar_ button to switch to solve mode, and press the **Settings** button to open the _Solver Settings_ dialog box."], +["uicontrol*","button_solve_mode",1,"Callback",[]], +["uicontrol*","button_solver_settings",[],"Callback",[]], +["uitext",[],"In the Solver Settings dialog box increase the _Maximum non-linear iterations_ to `75` in the _Non-Linear Solver Settings_ section to allow for the non-linear problem to converge."], +["uicontrol*","maxnit","75","Callback",[]], +["uicontrol","initb",{},"Callback",{}], +["uicontrol","edit_init_u_1","u_inlet*(y>h_inlet)","Callback",{}], +["uicontrol","button_dlginit_ok",{},"Callback",{}], +["imgcap"], +["uitext",[],"To start the solver with the chosen settings press the **Solve** button, or press **OK** and then the **=** _Toolbar_ button."], +["uicontrol*","button_dlgsolversettings_solve",{},"Callback",{}], +["uitext*",[],"After the problem has been solved CFDTool will automatically switch to postprocessing mode and display the computed velocity field."], +["imgcap"], +["uitext*",[],"To see the recirculation zone clearer, open the _Postprocessing_ settings dialog box and enter the expression for the normalized recirculation zone length `x/h_step*(u<0)*(y0_ positive half plane)."], +["uimenu",["Geometry","Create Object...","Rectangle"],{},"Callback",{}], +["uicontrol","edit_x_min","1","Callback",{}], +["uicontrol","edit_x_max","1.5","Callback",{}], +["uicontrol","edit_y_min","-1.5","Callback",{}], +["uicontrol","edit_y_max","1.5","Callback",{}], +["uicontrol","button_dlggobj_ok",{},"Callback",{}], +["uicontrol","button_grid_mode",1,"Callback",{}], +["uitext*",[],"The default grid may be too coarse ensure an accurate solution. Decreasing the grid size and generating a finer grid can resolve the expected vortices better."], +["uicontrol","grid_settings",[],"Callback",[]], +["uicontrol","grid_settings_algo",[" Gridgen2D"],"Callback",[]], +["uicontrol","grid_settings_hmax","0.05","Callback",[]], +["uicontrol","button_dlggrid_ok",[],"Callback",[]], +["uitext",[],"Press the **Generate** button to call the automatic grid generation algorithm."], +["uicontrol*","grid_generate",[],"Callback",[]], +["uicontrol","button_equation_mode",1,"Callback",{}], +["uitext",[],"Equation and material coefficients are specified in _Equation/Subdomain_ mode. In the Equation Settings dialog box enter `rho` for the density and `miu` for the viscosity. Then press **OK** to finish with specifications the equation coefficients."], +["uicontrol*","edit_density","rho","Callback",[]], +["uicontrol*","edit_viscosity","miu","Callback",[]], +["uitext",[],"Activate the swirl flow mode by marking the corresponding check-box."], +["uicontrol*","toggle_swirl",1,"Callback",[]], +["uicontrol*","button_dlgeqn_ok",{},"Callback",{}], +["uitext*",[],"The _Model Constants and Expressions_ functionality can be used to define and store convenient expressions which then are available in the point, equation, boundary coefficients, and as postprocessing expressions. Here it is used to define the fluid coefficients, angular velocity, inner and outer radius, and reference solution."], +["uitext",[],["Press the **Constants** _Toolbar_ button, or select the corresponding entry from the _Equation_ menu, and enter the following variables in the _Model Constants and Expressions_ dialog box. Press _Enter_ after the last expression or use the **Add Row** button to expand the expression list.","| Name | Expression |","|---------|------------|","| rho | 1 |","| miu | 1 |","| omega | 50 |","| ri | 1 |","| ro | 1.5 |","| v_ref | -omega*ri^2/(ro^2-ri^2)*r+omega*ro^2/(ro^2-ri^2)/r |"]], +["uicontrol*","button_const_expr",{},"Callback",{}], +["uicontrol*","edit_dlgexpr_11","rho","Callback",{}], +["uicontrol*","edit_dlgexpr_12","1","Callback",{}], +["uicontrol*","edit_dlgexpr_21","miu","Callback",{}], +["uicontrol*","edit_dlgexpr_22","1","Callback",{}], +["uicontrol*","edit_dlgexpr_31","omega","Callback",{}], +["uicontrol*","edit_dlgexpr_32","50","Callback",{}], +["uicontrol*","edit_dlgexpr_41","ri","Callback",{}], +["uicontrol*","edit_dlgexpr_42","1","Callback",{}], +["uicontrol*","edit_dlgexpr_51","ro","Callback",{}], +["uicontrol*","edit_dlgexpr_52","1.5","Callback",{}], +["uicontrol*","edit_dlgexpr_61","v_ref","Callback",{}], +["uicontrol*","edit_dlgexpr_62","-omega*ri^2/(ro^2-ri^2)*r+omega*ro^2/(ro^2-ri^2)/r","Callback",{}], +["uicontrol*","button_dlgexpr_ok",{},"Callback",{}], +["uitext*",[],"Note that CFDTool can work with any unit system, and it is up to the user to use consistent units for geometry dimensions, material, equation, and boundary coefficients."], +["uitext",[],"Switch to boundary condition specification mode by clicking on **Boundary** the _Mode Toolbar_ button."], +["uicontrol*","button_boundary_mode",1,"Callback",{}], +["uitext*",[],"Boundary conditions are defined in _Boundary Mode_ and describes how the model interacts with the external environment."], +["uitext",[],"In the _Boundary Settings_ dialog box, first choose boundaries **1-3** in the left hand side _Boundaries_ list box and select the **Wall/no-slip** boundary condition from the drop-down menu."], +["uicontrol*","list_seldom",["1","2","3"],"Callback",{}], +["uicontrol*","popup_selbc_sw",["Wall/no-slip"],"Callback",{}], +["uitext",[],"Then select the inner rotating boundary (number **4**) in the left hand side _Boundaries_ list box and select the **Inlet/velocity** boundary condition. Enter `omega*ri` in the edit field to specify the velocity _v0_ in the tangential-direction."], +["uicontrol*","list_seldom",["4"],"Callback",{}], +["uicontrol*","popup_selbc_sw",["Inlet/velocity"],"Callback",{}], +["uicontrol*","edit_bccoef2_sw","omega*ri","Callback",{}], +["uicontrol","button_dlgbdr_ok",{},"Callback",{}], +["uitext",[],"Now that the problem is fully specified, press the **Solve** _Mode Toolbar_ button to switch to solve mode. Then press the **=** _Tool_ button to call the solver with the default solver settings."], +["uicontrol*","button_solve_mode",1,"Callback",{}], +["uicontrol*","button_solve",{},"Callback",{}], +["uitext*",[],"After the problem has been solved CFDTool will automatically switch to postprocessing mode and display the computed velocity field."], +["uitext",[],"To visualize the azimuthal velocity, open the **Plot Options** and postprocessing settings dialog box and select to plot and visualize the **th-velocity** as both _surface_ and _contour_ plots, and also activate the arrow plot."], +["uicontrol*","button_post_settings",{},"Callback",{}], +["uicontrol*","post_surf",["th-velocity"],"Callback",{}], +["uicontrol*","ffiso",1,"Callback",{}], +["uicontrol*","post_iso",["th-velocity"],"Callback",{}], +["uicontrol*","ffarrow",1,"Callback",{}], +["uicontrol*","button_dlgpost_ok",{},"Callback",{}], +["uitext*",[],"One can study a section of the velocity profile by using the **Point/Line Evaluation...** feature from the _Post_ menu. By entering a series of evaluation coordinates, both the evaluated expression and a corresponding cross section plot can be generated."], +["uitext*",[],"Create line plots of both the computed azimuthal velocity and the analytic expression previously defined as `v_ref`."], +["uimenu",["Post","Point/Line Evaluation..."],{},"Callback",{}], +["uicontrol","edit_rcoord","1:0.01:1.5","Callback",{}], +["uicontrol","edit_zcoord","0","Callback",{}], +["uicontrol","popup_evalexpr",["th-velocity"],"Callback",{}], +["uicontrol","buttons_dlgpntline_apply",{},"Callback",{}], +["uicontrol","edit_evalexpr","v_ref","Callback",{}], +["uicontrol","buttons_dlgpntline_ok",{},"Callback",{}], +["uitext*",[],"From comparing the curves it should be clear that the simulation produces the expected results."], +["uivalidate",[],"pass=0;try,p=[linspace(1+0.01,1.5-0.01,50);zeros(1,50)];pass=mean(evalexpr('abs(v-v_ref)/v_ref',p,fea))<0.05;catch,end"], +["figure","Line Evaluation",{},"closeRequestFcn",{}], +["figure","Line Evaluation",{},"closeRequestFcn",{}], +["uitext*",[],"If the rotational velocity is increased beyond the critical Taylor number periodic in-plane vortices will appear."], +["uitext*",[],"Open the the **Model Constants and Expressions...** dialog box again and increase **omega** to `175`."], +["uimenu*",["Equation","Model Constants and Expressions..."],{},"Callback",{}], +["uicontrol*","edit_dlgexpr_32","175","Callback",{}], +["uicontrol*","button_dlgexpr_ok",{},"Callback",{}], +["uitext",[],"Return to **Solve** mode again, open the **Solver Settings** dialog box."], +["uicontrol*","button_solve_mode",1,"Callback",{}], +["uicontrol*","button_solver_settings",{},"Callback",{}], +["uicontrol","toldef","1e-4","Callback",{}], +["uicontrol","maxnit","275","Callback",{}], +["%uicontrol","nlrlx","0.9","Callback",{}], +["uicontrol","button_dlgsolversettings_ok",{},"Callback",{}], +["uitext",[],"This time use the **Restart** button to start the solver with the previous solution as initial guess. This can help with convergence for highly non-linear problems. Alternatively, using a time-dependent solver is another option."], +["uicontrol*","button_restart",{},"Callback",{}], +["uitext",[],"Once the solver has finished and converged, plot and visualize the in-plane velocity `sqrt(u^2+w^2)` to clearly see the Taylor vortices."], +["uicontrol*","button_post_settings",{},"Callback",{}], +["uicontrol*","ssurfexpr","sqrt(u^2+w^2)","Callback",{}], +["uicontrol*","sisoexpr","sqrt(u^2+w^2)","Callback",{}], +["uicontrol*","button_dlgpost_ok",{},"Callback",{}], +["imgcap"] +]} diff --git a/tutorials/03_Fluid_Dynamics/backwards_facing_step1.jpg b/tutorials/03_Fluid_Dynamics/backwards_facing_step1.jpg new file mode 100644 index 0000000..f0e50de Binary files /dev/null and b/tutorials/03_Fluid_Dynamics/backwards_facing_step1.jpg differ diff --git a/tutorials/03_Fluid_Dynamics/channel_flow1.jpg b/tutorials/03_Fluid_Dynamics/channel_flow1.jpg new file mode 100644 index 0000000..c918424 Binary files /dev/null and b/tutorials/03_Fluid_Dynamics/channel_flow1.jpg differ diff --git a/tutorials/03_Fluid_Dynamics/compressible_euler1.jpg b/tutorials/03_Fluid_Dynamics/compressible_euler1.jpg new file mode 100644 index 0000000..87693ba Binary files /dev/null and b/tutorials/03_Fluid_Dynamics/compressible_euler1.jpg differ diff --git a/tutorials/03_Fluid_Dynamics/driven_cavity1.jpg b/tutorials/03_Fluid_Dynamics/driven_cavity1.jpg new file mode 100644 index 0000000..5ce9383 Binary files /dev/null and b/tutorials/03_Fluid_Dynamics/driven_cavity1.jpg differ diff --git a/tutorials/03_Fluid_Dynamics/flow_around_cylinder1.jpg b/tutorials/03_Fluid_Dynamics/flow_around_cylinder1.jpg new file mode 100644 index 0000000..41d546a Binary files /dev/null and b/tutorials/03_Fluid_Dynamics/flow_around_cylinder1.jpg differ diff --git a/tutorials/03_Fluid_Dynamics/taylor_couette1.jpg b/tutorials/03_Fluid_Dynamics/taylor_couette1.jpg new file mode 100644 index 0000000..6b4bbac Binary files /dev/null and b/tutorials/03_Fluid_Dynamics/taylor_couette1.jpg differ diff --git a/tutorials/03_Fluid_Dynamics/turbulent_flow1.jpg b/tutorials/03_Fluid_Dynamics/turbulent_flow1.jpg new file mode 100644 index 0000000..8911e2a Binary files /dev/null and b/tutorials/03_Fluid_Dynamics/turbulent_flow1.jpg differ diff --git a/tutorials/webtutlist b/tutorials/webtutlist new file mode 100644 index 0000000..406fa04 --- /dev/null +++ b/tutorials/webtutlist @@ -0,0 +1,65 @@ +Heat_Transfer_01_heat_transfer1.html +Heat_Transfer_02_heat_transfer2.html +Heat_Transfer_03_heat_transfer3.html +Heat_Transfer_04_orthotropic_heat_conduction1.html +Heat_Transfer_05_thermal_bridge1.html +Heat_Transfer_06_heat_transfer4.html +Heat_Transfer_07_heat_transfer5.html +Multiphysics_00_heat_exchanger1.html +Multiphysics_04_natural_convection1.html +Multiphysics_01_resistive_heating1.html +Multiphysics_03_brake_disc1.html +Multiphysics_06_thermo_mechanical1.html +Fluid_Dynamics_01_channel_flow1.html +Fluid_Dynamics_02_driven_cavity1.html +Fluid_Dynamics_03_axisymmetric_flow1.html +Fluid_Dynamics_04_flow_around_cylinder1.html +Fluid_Dynamics_05_backwards_facing_step1.html +Fluid_Dynamics_06_vortex_flow1.html +Fluid_Dynamics_07_airfoil1.html +Fluid_Dynamics_08_compressible_euler1.html +Fluid_Dynamics_09a_turbulent_channel_flow1.html +Fluid_Dynamics_09_turbulent_flow1.html +Fluid_Dynamics_10_taylor_couette1.html +Multiphysics_02_porous_flow1.html +Multiphysics_04_natural_convection1.html +Classic_PDE_05_shallow_water1.html +Multiphysics_07_fluid_structure1.html +Structural_Mechanics_00_hole_in_plate1.html +Structural_Mechanics_01_euler_beam1.html +Structural_Mechanics_02_bracket_deflection1.html +Structural_Mechanics_03_pressure_vessel1.html +Structural_Mechanics_04_hollow_cylinder1.html +Structural_Mechanics_05_thick_plate1.html +Structural_Mechanics_06_spanner1.html +Multiphysics_03_brake_disc1.html +Multiphysics_05_piezo_electric1.html +Multiphysics_08_solenoid_stress1.html +Multiphysics_06_thermo_mechanical1.html +Multiphysics_07_fluid_structure1.html +Electromagnetics_01_spherical_capacitor1.html +Electromagnetics_02_permanent_magnet1.html +Electromagnetics_03_wave_guide1.html +Electromagnetics_04_conducting_sphere1.html +Electromagnetics_05_parallel_wires1.html +Electromagnetics_06_microstrip_capacitance1.html +Multiphysics_05_piezo_electric1.html +Multiphysics_08_solenoid_stress1.html +Multiphysics_00_heat_exchanger1.html +Multiphysics_01_resistive_heating1.html +Multiphysics_02_porous_flow1.html +Multiphysics_03_brake_disc1.html +Multiphysics_04_natural_convection1.html +Multiphysics_05_piezo_electric1.html +Multiphysics_06_thermo_mechanical1.html +Multiphysics_07_fluid_structure1.html +Multiphysics_08_solenoid_stress1.html +Multiphysics_09_multi_simulation1.html +Classic_PDE_01a_poisson1.html +Classic_PDE_01b_poisson_point1.html +Classic_PDE_01c_wave_equation1.html +Classic_PDE_02_circular_drum1.html +Classic_PDE_03_resonance1.html +Classic_PDE_04_black-scholes1.html +Classic_PDE_05_shallow_water1.html +Classic_PDE_06_interference_diffraction1.html