# Geophysical Computational Tools & Library (GCTL)

GCTL is a package of computational tools and C++ library for geophysical studies. The complete package is composed of a core library and additional libraries and command line tools. A full list of GCTL's libraries are listed as:

1. **gctl**: the core library (stored at this repository);
2. **gctl_potential**: library of the algorithms for working with the potential field data (i.e., gravitational and magnetic data);
3. **gctl_seismic**: library of the algorithms for working with the seismic/earthquake data;
4. **gctl_elecmag**: library of the algorithms for working with the elecmagnetic/magnetotelluric data;
5. **gctl_optimization**: library of the optimization algorithms;
6. **gctl_ai**: library of the artificial intelligence algorithms;
6. **gctl_graphic**: library for data visualization;
7. **gctl_examples**: executable examples;
8. **gctl_toolkits**: command line tools.

## Dependences

There are several third-party libraries that could be employed by the GCTL during the compilation to enable extral functionalities. The inclusion of the exterior libraries are controlled using the CMake compile options as `-D<option>=ON|OFF`. And the availiable options are:

1. **GCTL_OPENMP**: Enable OpenMP support. The default is ON;
2. **GCTL_NETCDF**: Use the netCDF libraries for reading and writing .nc files. This option requires the netCDF and netCDF_CXX libraries. The default is ON;
3. **GCTL_WAVELIB**: Use the WaveLIB for preforming the wavelet processes. The default is ON;
4. **GCTL_FFTW3**: Use the FFTW library for preforming the Fourier transformations. The default is ON;
5. **GCTL_OPENBLAS**: Use the openblas library for linear algebras. The default is OFF;
6. **GCTL_EIGEN**: Use the Eigen3 library. This is not a compiling option but could be used in applications to enable Eigen3 support.
7. **GCTL\_CHECK_BOUNDER**: Check indexing validities in all array-like operations. This may affect the computational efficiency. The default is OFF;
8. **GCTL\_CHECK_SIZE**: Check sizes in all array-like operations. This may affect the computational efficiency. The default is OFF.

## Installation

You can use the enclosed shell script 'installer' to install.

```
./installer configure && ./installer build && ./installer install
```

For more information of the 'installer', use:

```
./installer help
```


