-
Notifications
You must be signed in to change notification settings - Fork 7
api
Ondrej Meca edited this page Apr 22, 2021
·
3 revisions
The library contains a simple C API that allows to utilize FETI based solvers in third party softwares. The interface is available via the feti4i.h
header in the include directory and the libfeti4i
library. An example of calling the library can be found in src/api/apitester.cpp
. The tester uses the espreso physical module to assemble matrices and call the FETI solver through API.
Usage of the library is scratched by the following code. The methods documentation can be found in the library header file.
#include "feti4i.h"
int main(int argc, char **argv)
{
/* -----------------------*/
// initialize the library //
/* -----------------------*/
MPI_Init(&argc, &argv);
FETI4IInit(MPI_COMM_WORLD, 0); // VERBOSE_LEVEL = 0
/* ---------------------------------------------------------------------------------------------------------*/
// set options (see 'src/config/ecf/linearsolver/feti.h' for all available options of the given parameters) //
/* ---------------------------------------------------------------------------------------------------------*/
FETI4IInt iopts[FETI4I_INTEGER_OPTIONS_SIZE];
FETI4IReal ropts[FETI4I_REAL_OPTIONS_SIZE];
FETI4ISetDefaultIntegerOptions(iopts);
FETI4ISetDefaultRealOptions(ropts);
iopts[FETI4I_SUBDOMAINS] = 8;
iopts[FETI4I_MAX_ITERATIONS] = 1000;
iopts[FETI4I_FETI_METHOD] = 0; // 0: TOTAL FETI; 1: HYBRID FETI
iopts[FETI4I_PRECONDITIONER] = 3; // 0: NONE; 1: LUMPED; 2: WEIGHT; 3: DIRICHLET
iopts[FETI4I_CGSOLVER] = 0; // 0: PCG; 1: Pipelined PCG; 2: orthogonal PCG; 3: GMRES; 4: BICGSTAB
ropts[FETI4I_PRECISION] = 1e-8;
/* ---------------------------------------------------------------------*/
// create stiffness matrix and provide local-to-global mapping of nodes //
/* ---------------------------------------------------------------------*/
FETI4IMatrix matrix;
FETI4ICreateStiffnessMatrix(&matrix, nnodes, l2g, indexing, matrix_type, dofs_per_node, FETI4I_ORDER_GROUPED_DOFS);
for (int e = 0; e < elements; ++e) {
FETI4IAddElement(matrix, FETI4I_ETYPE_VOLUME, 8, nodes, stiffness);
}
/* ------------------------------------------------------------------------*/
// create instance of the system (it also call FETI solver pre-processing) //
/* ------------------------------------------------------------------------*/
FETI4IInstance instance;
FETI4ICreateInstance(&instance, matrix, neighbors_size, neighbors, dirichlet_size, dirichlet_indices dirichlet_values, iopts, ropts);
/* ---------------------------------*/
// compute RHS and solve the system //
/* ---------------------------------*/
FETI4ISolve(instance, rhs, solution);
FETI4IDestroy(matrix);
FETI4IDestroy(instance);
FETI4IFinalize();
MPI_Finalize();
return 0;
}