```
     GGGGGGGGG      GGGG      GGGGGGGGG  GGGGGG   GGGGGG  GGGGGGGGGG
    GGGG            GGGG     GGGG        GGGGGG  GGGGGG  GGGG   GGGG
   GGGG         GGGGGGGGGGGG GGGGGGGGG   G GGGG  G GGGG GGGG    GGGG
   GGGG GGGGGG GGGGGGGGGGGGG GGGGGGGGGG GG GGGG GG GGGG GGGG   GGGGG
  GGGGG  GGGGG GGGGGGGGGGGG  GGGGGGGGG  GG GGGGGG GGGG  GGGG   GGGG
  GGGG   GGGG      GGGG           GGGG  GG  GGGG  GGGG  GGGG   GGGG
   GGGGGGGGGG      GGGG     GGGGGGGGG  GG   GGG   GGGG  GGGGGGGGGG

======================================================================
=====             Geometry plus Simulation modules               =====
=====                   https://github.com/gismo                 =====
======================================================================
```

# Continuous Integration status
| **System** | **Status** | **More information** |
|------------|------------|----------------------|
| [CDash](https://cdash-ci.inria.fr/index.php?project=Gismo) | [![cdash](https://img.shields.io/website?down_color=lightgrey&down_message=offline&label=CDash&up_color=green&up_message=up&url=https%3A%2F%2Fcdash-ci.inria.fr%2Findex.php%3Fproject%3DGismo)](https://cdash-ci.inria.fr/index.php?project=Gismo) | Report results from all builds |
| [Appveyor](https://ci.appveyor.com/project/gismo/gismo)  | [![Appveyor status](https://ci.appveyor.com/api/projects/status/abps59xbt1gjwci1/branch/stable?svg=true)](https://cdash-ci.inria.fr/index.php?project=Gismo&filtercount=1&field1=site&compare1=63&value1=[appVeyor]) | Windows MSVC 14.0 |
| [Circle CI](https://circleci.com/gh/gismo/gismo) | [![Circle CI](https://circleci.com/gh/gismo/gismo.svg?style=svg)](https://cdash-ci.inria.fr/index.php?project=Gismo&filtercount=1&field1=site&compare1=63&value1=[cci]) | MacOS XCode9-12 |
| [Codeship](https://app.codeship.com/projects/123289)  | [![Codeship Status](https://app.codeship.com/projects/2aa19360-8998-0133-39fd-66416d65b267/status?branch=stable)](https://cdash-ci.inria.fr/index.php?project=Gismo&filtercount=1&field1=site&compare1=63&value1=[codeship]) | |
| [GitLab](https://gitlab.com/gismo-ci/gismo/-/pipelines)    | [![pipeline status](https://gitlab.com/gismo-ci/gismo/badges/gitlab_ci/pipeline.svg)](https://cdash-ci.inria.fr/index.php?project=Gismo&filtercount=1&field1=site&compare1=63&value1=[gitlab-ci]) | Linux non-default configurations |
| [GitHub Actions](https://github.com/gismo/gismo/actions) | [![Build Status](https://github.com/gismo/gismo/workflows/gismo/badge.svg?branch=stable)](https://cdash-ci.inria.fr/index.php?project=Gismo&filtercount=1&field1=site&compare1=63&value1=[actions]) | Latest Linux/MacOS/Windows |
| [Jenkins](https://ci.inria.fr/gismo/job/gismo/job/gismo/job/stable) | [![Build Status](https://ci.inria.fr/gismo/buildStatus/icon?job=gismo%2Fgismo%2Fstable)](https://cdash-ci.inria.fr/index.php?project=Gismo&filtercount=1&field1=site&compare1=63&value1=[jenkins]) |VMs for Linux/MacOS/Windows |
| GCC Farm | [Status](https://cdash-ci.inria.fr/index.php?project=Gismo&filtercount=1&field1=site&compare1=63&value1=[gccfarm]) | Builders from the GCC Farm   |
| [OBS](https://build.opensuse.org/package/show/home:filiatra/gismo) | [binaries](https://software.opensuse.org/download/package?project=home:filiatra&package=gismo)  | Upstream package builds for many Linux distributions |
| [Launchpad](https://code.launchpad.net/~g+smo/+recipe/g+smo-daily) |[binaries](https://launchpad.net/~g+smo/+archive/ubuntu/upstream/+packages)  | Upstream package builds for Ubuntu distributions |

This README file contains brief information. More details are found in
the [Wiki pages](https://github.com/gismo/gismo/wiki).

The latest revision of the code can be obtained using git (via https):

```git clone https://github.com/gismo/gismo.git```

or using subversion:

```svn co https://github.com/gismo/gismo/trunk gismo```

or as a tar.gz or zip file:

* https://github.com/gismo/gismo/archive/stable.tar.gz
* https://github.com/gismo/gismo/archive/stable.zip

# Prerequisites

* Operating systems:
  - MS Windows
  - Linux
  - macOS
  - FreeBSD

* Configuration: [CMake 2.8.12](https://cmake.org) or newer.

* Compilers tested include recent versions of
  - [AMD Optimizing C/C++ Compiler](https://developer.amd.com/amd-aocc/)
  - [AppleClang](https://developer.apple.com/documentation/xcode/) see [here](https://mac.r-project.org/openmp/) for OpenMP support
  - [Clang](https://clang.llvm.org)
  - [GNU GCC](https://gcc.gnu.org)
  - [Intel C++ compiler](https://software.intel.com/content/www/us/en/develop/tools/compilers/c-compilers.html)
  - [Mingw64](http://mingw-w64.org/)
  - [MS Visual Studio C++](https://visualstudio.microsoft.com)
  - [PGI C/C++](https://www.pgroup.com/index.htm) only with `GISMO_WITH_OPENMP=OFF`
  
* Compilers known to not work
  - [Oracle Developer Studio](https://www.oracle.com/application-development/technologies/developerstudio.html) fails to compile Eigen
  - [IBM XLC C/C++](https://www.ibm.com/products/xl-cpp-linux-compiler-power) fails to compile Eigen

* Recommended:
   - [Doxygen](https://www.doxygen.org) for generating documentation.
   - [Paraview](https://www.paraview.org) for visualization.

# Compilation

The compilation requires configuration using [CMake](https://cmake.org)
at a new, empty folder (in-source builds are disabled).

* On **Linux/macOS**: A Unix makefile exists in the root source
  folder. Running `make` creates a sub folder named `build` and
  executes CMake and compilation inside that folder. Alternatively,
  choose your own build folder and execute CMake pointing to the
  sources.

* On **MS Windows**: 
     * To compile G+Smo natively, you can use MS Visual Studio which has [built-in CMake
       support](https://docs.microsoft.com/en-us/cpp/build/cmake-projects-in-visual-studio)
       since version 2015. Alternatively, you can run the `cmake-gui` tool
       (from an environment that is configured with your compiler) to
       generate makefiles (or Visual Studio project files). Then execute
       the make tool to launch compilation. Alternatively, use the
       QtCreator GUI and open the CMakeLists.txt file on the root folder to
       create a QtCreator project.
     * Another option is to install [Windows Subsystem for Linux](https://learn.microsoft.com/en-us/windows/wsl/install)
       which:
       > lets developers install a Linux distribution [...] and use Linux applications, utilities, 
       > and Bash command-line tools directly on Windows, unmodified, without the overhead of 
       > a traditional virtual machine or dualboot setup.
     
       Then you can download, compile and use G+Smo as if your were using a native Linux machine.

After successful compilation a dynamic library is created in `./lib` and
executable example programs are output at the `./bin` subdirectory of
the build folder.

Additionally, if [Doxygen](https://www.doxygen.org) is available on
the system one can execute (eg. on Linux):

```make doc```

to obtain the Doxygen documentation in HTML format. The main doxygen
page is at `./doc/html/index.html`.

More information at https://github.com/gismo/gismo/wiki

# Optional modules

There is a number of optional modules that may be enabled.

| **Name** | **Description** |
|----------|-----------------|
|[gsOpenCascade](https://github.com/gismo/gismo/tree/stable/extensions/gsOpenCascade#readme)| Extends functionality using OpenCascade|
|[gsElasticity](https://github.com/gismo/gsElasticity#readme)|  |
|[gsKLShell](https://github.com/gismo/gsKLShell#readme)|  |
|[gsStructuralAnalysis](https://github.com/gismo/gsStructuralAnalysis#readme)|  |

To enable e.g. gsSpectra and gsOpenCascade set the following option in CMake:

 ``` -D GISMO_OPTIONAL="gsSpectra;gsOpenCascade" ```

# Configuration Options

The available options are displayed at CMake configuration.  Short
description and default setting follows:

* CMAKE_BUILD_TYPE        *Release*

  Available values are the standard CMake build configurations: Debug,
Release, RelWithDebInfo, MinSizeRel.

* GISMO_COEFF_TYPE        *double*

  The arithmetic type to be used for all computations. Available options
include double, long double, float.

* GISMO_EXTRA_INSTANCE    *not set*

  If set to one or more of the options available for GISMO_COEFF_TYPE
  the G+Smo library is compiled with extra arithmetic types enabled.

* GISMO_WITH_XDEBUG       *OFF*

  If set to ON additional debugging tools are enabled during
compilation. These include checked iterators for GCC and MSVC
compilers and call stack back-trace printout when a runtime exception
occurs.

* GISMO_BUILD_LIB         *ON*

  If enabled a dynamic library is created using GISMO_COEFF_TYPE
arithmetic. A target for a static library named gismo_static is also
created but not compiled by default.

* GISMO_BUILD_EXAMPLES    *ON*

  If enabled the programs in the examples folder are compiled, and
executables are created in build-folder/bin.

* GISMO_BUILD_UNITTESTS   *OFF*

  If enabled the tests in the unittests folder are compiled, and an
executable is created in build-folder/bin.

* GISMO_PLUGIN_AXL         *OFF*

  If enabled the plugin for Axel modeler is compiled (requires Axel).

* GISMO_WITH_PSOLID       *OFF*

  If enabled the extensions using functionalities of Parasolid geometric
kernel are compiled (requires Parasolid).

* gsOpennurbs

  Extension for reading and writing of Rhinoceros' 3DM.

* CMAKE_INSTALL_PREFIX   (system dependent)

  The location for installation of the library, e.g. /usr/local on some
Linux systems.


# Directory structure


The source tree consists of the following sub-folders:

* **src**

Contains all source files. Code is partitioned into modules. Currently
eleven modules are present as sub-folders:

   - **gsCore**
   - **gsMatrix**
   - **gsNurbs**
   - **gsHSplines**
   - **gsModeling**
   - **gsAssembler**
   - **gsSolver**
   - **gsPde**
   - **gsTensor**
   - **gsIO**
   - **gsUtils**

* **examples**

  Examples of usage, small programs and tutorials.

* **unittests**

  Unittests for some parts of the codebase.

* **filedata**

  Data files in the XML format the G+Smo can read and write.

* **extensions**

  Optional additional features that can be compiled along G+Smo.

* **plugins**

   The plugins for:

   - Axel modeler
   - Rhinoceros' 3DM

* **cmake**

  Cmake configuration files.

* **doc**

  Files related to doxygen documentation.

# Third-party repository distribution

- openSUSE Science Project: https://en.opensuse.org/openSUSE:Science_Math
- FreeBSD port: https://www.freshports.org/math/gismo/
- Ubuntu upstream packages: https://launchpad.net/~g+smo/+archive/ubuntu/upstream

# Contact and support

* Wiki pages:

  https://github.com/gismo/gismo/wiki

* Bug reports:

  https://github.com/gismo/gismo/issues

* Questions (Q&A):

  https://github.com/gismo/gismo/discussions/categories/q-a

# People

Coordinator and maintainer: Angelos Mantzaflaris

See full list in [our wiki pages](https://github.com/gismo/gismo/wiki/About--G-Smo)

# OS-license

The G+Smo library is distributed under the Mozilla Public License v2.0.  (see [LICENSE.txt](https://github.com/gismo/gismo/blob/stable/LICENSE.txt)).

