Reference

Common

void akantu::initialize(const std::string &input_file, int &argc, char **&argv)

initialize the static part of akantu and read the global input_file

void akantu::initialize(int &argc, char **&argv)

initialize the static part of akantu

using akantu::UInt = unsigned int
using akantu::Int = int
using akantu::Real = double
enum akantu::ElementType

type of elements

Values:

enumerator _not_defined
enumerator _cohesive_1d_2
enumerator _cohesive_2d_4
enumerator _cohesive_2d_6
enumerator _cohesive_3d_12
enumerator _cohesive_3d_16
enumerator _cohesive_3d_6
enumerator _cohesive_3d_8
enumerator _point_1
enumerator _segment_2
enumerator _segment_3
enumerator _triangle_3
enumerator _triangle_6
enumerator _quadrangle_4
enumerator _quadrangle_8
enumerator _tetrahedron_4
enumerator _tetrahedron_10
enumerator _pentahedron_6
enumerator _pentahedron_15
enumerator _hexahedron_8
enumerator _hexahedron_20
enumerator _bernoulli_beam_2
enumerator _bernoulli_beam_3
enumerator _discrete_kirchhoff_triangle_18
enumerator _max_element_type
enum akantu::ModelType

Values:

enumerator model
enumerator solid_mechanics_model
enumerator solid_mechanics_model_cohesive
enumerator heat_transfer_model
enumerator structural_mechanics_model
enumerator embedded_model
enum akantu::AnalysisMethod

enum AnalysisMethod type of solving method used to solve the equation of motion

Values:

enumerator _static = 0
enumerator _implicit_dynamic = 1
enumerator _explicit_lumped_mass = 2
enumerator _explicit_lumped_capacity = 2
enumerator _explicit_consistent_mass = 3
enum akantu::SolveConvergenceCriteria

enum SolveConvergenceCriteria different convergence criteria

Values:

enumerator _residual

Use residual to test the convergence.

enumerator _solution

Use solution to test the convergence.

enumerator _residual_mass_wgh

Use residual weighted by inv. nodal mass to testb

class akantu::ArrayBase

class that afford to store vectors in static memory

Subclassed by akantu::ArrayDataLayer< T, allocation_trait >, akantu::ArrayDataLayer< akantu::Element >, akantu::ArrayDataLayer< bool >, akantu::ArrayDataLayer< char >, akantu::ArrayDataLayer< Element >, akantu::ArrayDataLayer< Entity >, akantu::ArrayDataLayer< Int >, akantu::ArrayDataLayer< NodeFlag >, akantu::ArrayDataLayer< Real >, akantu::ArrayDataLayer< T >, akantu::ArrayDataLayer< UInt >

Public Functions

ArrayBase(const ID &id = "")
ArrayBase(const ArrayBase &other, const ID &id = "")
ArrayBase(ArrayBase &&other) = default
ArrayBase &operator=(const ArrayBase &other) = default
ArrayBase &operator=(ArrayBase &&other) noexcept = default
~ArrayBase() = default
UInt getMemorySize() const = 0

get the amount of space allocated in bytes

bool empty() const __attribute__((warn_unused_result))
void printself(std::ostream &stream, int indent = 0) const = 0

function to print the containt of the class

UInt size() const

Get the Size of the Array.

UInt getNbComponent() const

Get the number of components.

const ID &getID() const

Get the name of th array.

void setID(const ID &id)

Set the name of th array.

template<typename T, ArrayAllocationType allocation_trait = ArrayAllocationTrait<T>::value>
class akantu::ArrayDataLayer : public akantu::ArrayBase

Public Types

using value_type = T
using reference = value_type&
using pointer_type = value_type*
using const_reference = const value_type&

Public Functions

~ArrayDataLayer() override = default
ArrayDataLayer(UInt size = 0, UInt nb_component = 1, const ID &id = "")

Allocation of a new vector.

ArrayDataLayer(UInt size, UInt nb_component, const_reference value, const ID &id = "")

Allocation of a new vector with a default value.

ArrayDataLayer(const ArrayDataLayer &vect, const ID &id = "")

Copy constructor (deep copy)

ArrayDataLayer(const std::vector<value_type> &vect)

Copy constructor (deep copy)

ArrayDataLayer &operator=(const ArrayDataLayer &other)
ArrayDataLayer(ArrayDataLayer &&other) noexcept = default
ArrayDataLayer &operator=(ArrayDataLayer &&other) noexcept = default
void push_back(const_reference value)

append a tuple of size nb_component containing value

template<template<typename> class C, typename = std::enable_if_t<aka::is_tensor<C<T>>::value or aka::is_tensor_proxy<C<T>>::value>>
void push_back(const C<T> &new_elem)

append a vector

append a Vector or a Matrix

void reserve(UInt size, UInt new_size = UInt(-1))

changes the allocated size but not the size, if new_size = 0, the size is set to min(current_size and reserve size)

void resize(UInt size)

change the size of the Array

void resize(UInt size, const T &val)

change the size of the Array and initialize the values

UInt getMemorySize() const override

get the amount of space allocated in bytes

UInt getAllocatedSize() const

Get the real size allocated in memory.

T *storage() const

give the address of the memory allocated for this vector

template<typename T, bool is_scal>
class akantu::Array : public akantu::ArrayDataLayer<T>

Public Types

using value_type = typename parent::value_type
using reference = typename parent::reference
using pointer_type = typename parent::pointer_type
using const_reference = typename parent::const_reference
using scalar_iterator = iterator<T>

iterator for Array of nb_component = 1

using const_scalar_iterator = const_iterator<T>

const_iterator for Array of nb_component = 1

using vector_iterator = iterator<Vector<T>>

iterator returning Vectors of size n on entries of Array with nb_component = n

using const_vector_iterator = const_iterator<Vector<T>>

const_iterator returning Vectors of n size on entries of Array with nb_component = n

using matrix_iterator = iterator<Matrix<T>>

iterator returning Matrices of size (m, n) on entries of Array with nb_component = m*n

using const_matrix_iterator = const_iterator<Matrix<T>>

const iterator returning Matrices of size (m, n) on entries of Array with nb_component = m*n

using tensor3_iterator = iterator<Tensor3<T>>

iterator returning Tensor3 of size (m, n, k) on entries of Array with nb_component = m*n*k

using const_tensor3_iterator = const_iterator<Tensor3<T>>

const iterator returning Tensor3 of size (m, n, k) on entries of Array with nb_component = m*n*k

Public Functions

~Array() override
Array()
Array(UInt size, UInt nb_component = 1, const ID &id = "")

Allocation of a new vector.

Array(UInt size, UInt nb_component, const_reference value, const ID &id = "")

Allocation of a new vector with a default value.

Array(const Array &vect, const ID &id = "")

Copy constructor.

Array(const std::vector<T> &vect)

Copy constructor (deep copy)

Array &operator=(const Array &other)
Array(Array &&other) noexcept = default
Array &operator=(Array &&other) noexcept = default
template<typename ...Ns>
decltype(auto) begin(Ns&&... n)
template<typename ...Ns>
decltype(auto) end(Ns&&... n)
template<typename ...Ns>
decltype(auto) begin(Ns&&... n) const
template<typename ...Ns>
decltype(auto) end(Ns&&... n) const
template<typename ...Ns>
decltype(auto) begin_reinterpret(Ns&&... n)
template<typename ...Ns>
decltype(auto) end_reinterpret(Ns&&... n)
template<typename ...Ns>
decltype(auto) begin_reinterpret(Ns&&... n) const
template<typename ...Ns>
decltype(auto) end_reinterpret(Ns&&... n) const
UInt find(const_reference elem) const

search elem in the vector, return the position of the first occurrence or -1 if not found

void push_back(const_reference value)

append a value to the end of the Array

See

Array::find(const_reference elem) const

template<template<typename> class C, typename = std::enable_if_t<aka::is_tensor<C<T>>::value or aka::is_tensor_proxy<C<T>>::value>>
void push_back(const C<T> &new_elem)

append a Vector or a Matrix

template<typename Ret>
void push_back(const iterator<Ret> &it)

append the content of the iterator at the end of the Array

void erase(UInt i)

erase the value at position i

template<typename R>
iterator<R> erase(const iterator<R> &it)

ask Nico, clarify

template<template<typename> class C, typename = std::enable_if_t<aka::is_tensor<C<T>>::value or aka::is_tensor_proxy<C<T>>::value>>
UInt find(const C<T> &elem)

See

Array::find(const_reference elem) const

void set(T t)

set all entries of the array to the value t

Parameters
  • t: value to fill the array with

void zero()

set the array to T{}

void clear()

resize the array to 0

template<template<typename> class C, typename = std::enable_if_t<aka::is_tensor<C<T>>::value or aka::is_tensor_proxy<C<T>>::value>>
void set(const C<T> &vm)

set all tuples of the array to a given vector or matrix

Parameters

void append(const Array<T> &other)

Append the content of the other array to the current one.

void copy(const Array<T, is_scal> &other, bool no_sanity_check = false)

copy another Array in the current Array, the no_sanity_check allows you to force the copy in cases where you know what you do with two non matching Arrays in terms of n

void printself(std::ostream &stream, int indent = 0) const override

function to print the containt of the class

Array<T, is_scal> &operator-=(const Array<T, is_scal> &other)

substraction entry-wise

Array<T, is_scal> &operator+=(const Array<T, is_scal> &other)

addition entry-wise

Array<T, is_scal> &operator*=(const T &alpha)

multiply evry entry by alpha

bool operator==(const Array<T, is_scal> &other) const

check if the array are identical entry-wise

bool operator!=(const Array<T, is_scal> &other) const

See

Array::operator==(const Array<T, is_scal> & other) const

reference operator()(UInt i, UInt j = 0)

return a reference to the j-th entry of the i-th tuple

const_reference operator()(UInt i, UInt j = 0) const

return a const reference to the j-th entry of the i-th tuple

reference operator[](UInt i)

return a reference to the ith component of the 1D array

const_reference operator[](UInt i) const

return a const reference to the ith component of the 1D array

UInt find(const Real &elem) const
Array<ElementType> &operator*=(const ElementType&)
Array<ElementType> &operator-=(const Array<ElementType>&)
Array<ElementType> &operator+=(const Array<ElementType>&)
Array<char> &operator*=(const char&)
Array<char> &operator-=(const Array<char>&)
Array<char> &operator+=(const Array<char>&)
template<typename R = T>
class const_iterator
template<typename R = T>
class iterator
template<class R, class it, class IR = R, bool is_tensor_ = aka::is_tensor<std::decay_t<R>>::value>
class iterator_internal

Todo:

protected: does not compile with intel check why

template<typename T, typename SupportType>
class akantu::ElementTypeMapArray

Public Types

using type = T
using array_type = Array<T>
using type_iterator = typename parent::type_iterator

Public Functions

void operator=(const ElementTypeMapArray&) = delete

standard assigment (copy) operator

ElementTypeMapArray(const ElementTypeMapArray&)
void copy(const ElementTypeMapArray &other)

explicit copy

ElementTypeMapArray(const ID &id = "by_element_type_array", const ID &parent_id = "no_parent", const MemoryID &memory_id = 0)

Constructor

Parameters
  • id: optional: identifier (string)

  • parent_id: optional: parent identifier. for organizational purposes only

  • memory_id: optional: choose a specific memory, defaults to memory 0

Array<T> &alloc(UInt size, UInt nb_component, const SupportType &type, GhostType ghost_type, const T &default_value = T())

allocate memory for a new array

Return

a reference to the allocated array

Parameters
  • size: number of tuples of the new array

  • nb_component: tuple size

  • type: the type under which the array is indexed in the map

  • ghost_type: whether to add the field to the data map or the ghost_data map

  • default_value: the default value to use to fill the array

void alloc(UInt size, UInt nb_component, const SupportType &type, const T &default_value = T())

allocate memory for a new array in both the data and the ghost_data map

Parameters
  • size: number of tuples of the new array

  • nb_component: tuple size

  • type: the type under which the array is indexed in the map

  • default_value: the default value to use to fill the array

const Array<T> &operator()(const SupportType &type, GhostType ghost_type = _not_ghost) const
const T &operator()(const Element &element, UInt component = 0) const

access the data of an element, this combine the map and array accessor

T &operator()(const Element &element, UInt component = 0)

access the data of an element, this combine the map and array accessor

decltype(auto) get(const Element &element)

access the data of an element, this combine the map and array accessor

decltype(auto) get(const Element &element) const
Array<T> &operator()(const SupportType &type, GhostType ghost_type = _not_ghost)
void setArray(const SupportType &type, GhostType ghost_type, const Array<T> &vect)

insert data of a new type (not yet present) into the map.

Return

stored data corresponding to type.

Parameters
  • type: type of data (if this type is already present in the map, an exception is thrown).

  • ghost_type: optional: by default, the data map for non-ghost elements is searched

  • vect: the vector to include into the map

void free()

frees all memory related to the data

void clear()
bool empty() const __attribute__((warn_unused_result))
void zero()

set all values in the ElementTypeMap to zero

template<typename ST>
void set(const ST &value)

set all values in the ElementTypeMap to value

void onElementsRemoved(const ElementTypeMapArray<UInt> &new_numbering)

deletes and reorders entries in the stored arrays

Parameters

void printself(std::ostream &stream, int indent = 0) const override

text output helper

void setID(const ID &id)

set the id

Parameters
  • id: the new name

ElementTypeMap<UInt> getNbComponents(UInt dim = _all_dimensions, GhostType requested_ghost_type = _not_ghost, ElementKind kind = _ek_not_defined) const
template<class Func>
void initialize(const Func &f, const T &default_value, bool do_not_default)

initialize the arrays in accordance to a functor

template<typename ...pack>
void initialize(const Mesh &mesh, pack&&... _pack)

initialize with sizes and number of components in accordance of a mesh content

template<typename ...pack>
void initialize(const FEEngine &fe_engine, pack&&... _pack)

initialize with sizes and number of components in accordance of a fe engine content (aka integration points)

ID getName() const

get the name of the internal field

template<typename ...pack>
UInt size(pack&&... _pack) const

get the size of the ElementTypeMapArray<T>

Parameters
  • [in] _pack:

bool isNodal() const
void isNodal(bool is_nodal)
template<typename T>
class akantu::Vector

Public Types

using value_type = typename parent::value_type
using proxy = VectorProxy<T>
using iterator = types::details::vector_iterator<T&>
using const_iterator = types::details::vector_iterator<const T&>

Public Functions

Vector()
Vector(UInt n, const T &def = T())
Vector(T *data, UInt n)
Vector(const Vector &src, bool deep_copy = true)
Vector(const TensorProxy<T, 1, Vector> &src)
Vector(std::initializer_list<T> list)
iterator begin()
iterator end()
const_iterator begin() const
const_iterator end() const
~Vector() override = default
Vector &operator=(const Vector &src)
Vector &operator=(Vector &&src) noexcept = default
T &operator()(UInt i)
const T &operator()(UInt i) const
T &operator[](UInt i)
const T &operator[](UInt i) const
Vector<T> &operator*=(Real x)
Vector<T> &operator/=(Real x)
Vector<T> &operator*=(const Vector<T> &vect)
Real dot(const Vector<T> &vect) const
Real mean() const
Vector &crossProduct(const Vector<T> &v1, const Vector<T> &v2)
Vector crossProduct(const Vector<T> &v)
void solve(const Matrix<T> &A, const Vector<T> &b)
template<bool tr_A>
void mul(const Matrix<T> &A, const Vector<T> &x, T alpha = T(1))
Real norm() const
template<NormType nt>
Real norm() const
Vector<Real> &normalize()
Real distance(const Vector<T> &y) const

norm of (*this - x)

bool equal(const Vector<T> &v, Real tolerance = Math::getTolerance()) const
short compare(const Vector<T> &v, Real tolerance = Math::getTolerance()) const
bool operator==(const Vector<T> &v) const
bool operator!=(const Vector<T> &v) const
bool operator<(const Vector<T> &v) const
bool operator>(const Vector<T> &v) const
template<typename Func, typename Acc>
decltype(auto) accumulate(const Vector<T> &v, Acc &&accumulator, Func &&func) const
bool operator<=(const Vector<T> &v) const
bool operator>=(const Vector<T> &v) const
void printself(std::ostream &stream, int indent = 0) const

function to print the containt of the class

bool equal(const Vector<UInt> &v, __attribute__((unused)) Real tolerance) const

Public Static Functions

Vector<T> zeros(UInt n)
template<typename T>
class akantu::Matrix

Public Types

using value_type = typename parent::value_type
using proxy = MatrixProxy<T>

Public Functions

Matrix()
Matrix(UInt m, UInt n, const T &def = T())
Matrix(T *data, UInt m, UInt n)
Matrix(const Matrix &src, bool deep_copy = true)
Matrix(const MatrixProxy<T> &src)
Matrix(std::initializer_list<std::initializer_list<T>> list)
~Matrix() override = default
Matrix &operator=(const Matrix &src)
Matrix &operator=(Matrix &&src) noexcept = default
UInt rows() const
UInt cols() const
T &at(UInt i, UInt j)
const T &at(UInt i, UInt j) const
T &operator()(UInt i, UInt j)
const T &operator()(UInt i, UInt j) const
VectorProxy<T> operator()(UInt j)

give a line vector wrapped on the column i

VectorProxy<T> operator()(UInt j) const
decltype(auto) begin()
decltype(auto) begin() const
decltype(auto) end()
decltype(auto) end() const
void block(const Matrix &block, UInt pos_i, UInt pos_j)
Matrix block(UInt pos_i, UInt pos_j, UInt block_rows, UInt block_cols) const
T &operator[](UInt idx)
const T &operator[](UInt idx) const
Matrix operator*(const Matrix &B) const
Matrix &operator*=(const T &x)
Matrix &operator*=(const Matrix &B)
template<bool tr_A, bool tr_B>
void mul(const Matrix &A, const Matrix &B, T alpha = 1.0)
void outerProduct(const Vector<T> &A, const Vector<T> &B)
void eig(Vector<T> &eigenvalues, Matrix<T> &eigenvectors, bool sort = true) const
void eig(Vector<T> &eigenvalues) const
void eye(T alpha = 1.)
T trace() const
Matrix transpose() const
void inverse(const Matrix &A)
Matrix inverse()
T det() const
T doubleDot(const Matrix<T> &other) const
void printself(std::ostream &stream, int indent = 0) const

function to print the containt of the class

Public Static Functions

Matrix<T> eye(UInt m, T alpha = 1.)

Mesh

class akantu::Mesh : protected akantu::Memory, public akantu::EventHandlerManager<MeshEventHandler>, public akantu::GroupManager, public akantu::MeshData, public akantu::Dumpable

This class contaisn the coordinates of the nodes in the Mesh.nodes akant::Array, and the connectivity. The connectivity are stored in by element types.

In order to loop on all element you have to loop on all types like this :

for(auto & type : mesh.elementTypes()) {
  UInt nb_element  = mesh.getNbElement(type);
  const Array<UInt> & conn = mesh.getConnectivity(type);
  for(UInt e = 0; e < nb_element; ++e) {
    ...
  }
}

or

for_each_element(mesh, [](Element & element) {
   std::cout << element << std::endl
 });

Public Types

using type_iterator = ElementTypeMapArray<UInt, ElementType>::type_iterator
using ElementTypesIteratorHelper = ElementTypeMapArray<UInt, ElementType>::ElementTypesIteratorHelper

Public Functions

Mesh(UInt spatial_dimension, const ID &id = "mesh", const MemoryID &memory_id = 0)

constructor that create nodes coordinates array

Mesh(UInt spatial_dimension, Communicator &communicator, const ID &id = "mesh", const MemoryID &memory_id = 0)

mesh not distributed and not using the default communicator

Mesh(UInt spatial_dimension, const std::shared_ptr<Array<Real>> &nodes, const ID &id = "mesh", const MemoryID &memory_id = 0)

constructor that use an existing nodes coordinates array, by getting the vector of coordinates

~Mesh() override
void read(const std::string &filename, const MeshIOType &mesh_io_type = _miot_auto)

read the mesh from a file

void write(const std::string &filename, const MeshIOType &mesh_io_type = _miot_auto)

write the mesh to a file

template<typename ...pack>
std::enable_if_t<are_named_argument<pack...>::value> distribute(pack&&... _pack)

with the arguments to pass to the partitionner

bool isDistributed() const

defines is the mesh is distributed or not

void makePeriodic(const SpatialDirection &direction)

set the periodicity in a given direction

void makePeriodic(const SpatialDirection &direction, const ID &list_1, const ID &list_2)
bool isPeriodic() const

defines if the mesh is periodic or not

bool isPeriodic(const SpatialDirection&) const
UInt getPeriodicMaster(UInt slave) const

get the master node for a given slave nodes, except if node not a slave

decltype(auto) getPeriodicSlaves(UInt master) const

get an iterable list of slaves for a given master node

void printself(std::ostream &stream, int indent = 0) const override

function to print the containt of the class

template<typename T>
void extractNodalValuesFromElement(const Array<T> &nodal_values, T *local_coord, const UInt *connectivity, UInt n_nodes, UInt nb_degree_of_freedom) const

extract coordinates of nodes from an element

void addConnectivityType(ElementType type, GhostType ghost_type = _not_ghost)

add a Array of connectivity for the given ElementType and GhostType .

template<class Event>
void sendEvent(Event &event)
void eraseElements(const Array<Element> &elements)

prepare the event to remove the elements listed

template<typename T>
void removeNodesFromArray(Array<T> &vect, const Array<UInt> &new_numbering)
void initNormals()

initialize normals

Mesh &initMeshFacets(const ID &id = "mesh_facets")

init facets’ mesh

void defineMeshParent(const Mesh &mesh)

define parent mesh

void getGlobalConnectivity(ElementTypeMapArray<UInt> &global_connectivity)

get global connectivity array

void getAssociatedElements(const Array<UInt> &node_list, Array<Element> &elements)
const ID &getID() const

get the id of the mesh

const MemoryID &getMemoryID() const

get the id of the mesh

UInt getSpatialDimension() const

get the spatial dimension of the mesh = number of component of the coordinates

const Array<Real> &getNodes() const

get the nodes Array aka coordinates

Array<Real> &getNodes()
Array<Real> &getNormals(const ElementType &el_type, GhostType ghost_type = _not_ghost)

get the normals for the elements

UInt getNbNodes() const

get the number of nodes

const Array<UInt> &getGlobalNodesIds() const

get the Array of global ids of the nodes (only used in parallel)

UInt getNodeGlobalId(UInt local_id) const

get the global id of a node

UInt getNodeLocalId(UInt global_id) const

get the global id of a node

UInt getNbGlobalNodes() const

get the global number of nodes

const Array<NodeFlag> &getNodesFlags() const

get the nodes type Array

NodeFlag getNodeFlag(UInt local_id) const
Int getNodePrank(UInt local_id) const
bool isPureGhostNode(UInt n) const

say if a node is a pure ghost node

bool isLocalOrMasterNode(UInt n) const

say if a node is pur local or master node

bool isLocalNode(UInt n) const
bool isMasterNode(UInt n) const
bool isSlaveNode(UInt n) const
bool isPeriodicSlave(UInt n) const
bool isPeriodicMaster(UInt n) const
const Vector<Real> &getLowerBounds() const
const Vector<Real> &getUpperBounds() const
const BBox &getBBox() const
const Vector<Real> &getLocalLowerBounds() const
const Vector<Real> &getLocalUpperBounds() const
const BBox &getLocalBBox() const
const Array<UInt> &getConnectivity(const ElementType &el_type, GhostType ghost_type = _not_ghost) const

get the connectivity Array for a given type

Array<UInt> &getConnectivity(const ElementType &el_type, GhostType ghost_type = _not_ghost)
const ElementTypeMapArray<UInt> &getConnectivities() const
UInt getNbElement(ElementType type, GhostType ghost_type = _not_ghost) const

get the number of element of a type in the mesh

UInt getNbElement(UInt spatial_dimension = _all_dimensions, GhostType ghost_type = _not_ghost, ElementKind kind = _ek_not_defined) const

get the number of element for a given ghost_type and a given dimension

void getBarycenter(const Element &element, Vector<Real> &barycenter) const

compute the barycenter of a given element

void getBarycenters(Array<Real> &barycenter, ElementType type, GhostType ghost_type) const
const auto &getElementToSubelement() const

get the element connected to a subelement (element of lower dimension)

const auto &getElementToSubelement(ElementType el_type, GhostType ghost_type = _not_ghost) const

get the element connected to a subelement

const auto &getElementToSubelement(const Element &element) const

get the elements connected to a subelement

const auto &getSubelementToElement() const

get the subelement (element of lower dimension) connected to a element

const auto &getSubelementToElement(ElementType el_type, GhostType ghost_type = _not_ghost) const

get the subelement connected to an element

VectorProxy<Element> getSubelementToElement(const Element &element) const

get the subelement (element of lower dimension) connected to a element

VectorProxy<UInt> getConnectivity(const Element &element) const

get connectivity of a given element

Vector<UInt> getConnectivityWithPeriodicity(const Element &element) const
template<typename T>
const Array<T> &getData(const ID &data_name, ElementType el_type, GhostType ghost_type = _not_ghost) const

get a name field associated to the mesh

template<typename T>
Array<T> &getData(const ID &data_name, ElementType el_type, GhostType ghost_type = _not_ghost)

get a name field associated to the mesh

template<typename T>
const ElementTypeMapArray<T> &getData(const ID &data_name) const

get a name field associated to the mesh

template<typename T>
ElementTypeMapArray<T> &getData(const ID &data_name)

get a name field associated to the mesh

template<typename T>
ElementTypeMap<UInt> getNbDataPerElem(ElementTypeMapArray<T> &array)
template<typename T>
std::shared_ptr<dumpers::Field> createFieldFromAttachedData(const std::string &field_id, const std::string &group_name, ElementKind element_kind)
template<typename T>
Array<T> &getDataPointer(const std::string &data_name, ElementType el_type, GhostType ghost_type = _not_ghost, UInt nb_component = 1, bool size_to_nb_element = true, bool resize_with_parent = false)

templated getter returning the pointer to data in MeshData (modifiable)

template<typename T>
Array<T> &getDataPointer(const ID &data_name, ElementType el_type, GhostType ghost_type, UInt nb_component, bool size_to_nb_element, bool resize_with_parent, const T &defaul_)
const Mesh &getMeshFacets() const

Facets mesh accessor.

Mesh &getMeshFacets()
auto hasMeshFacets() const
const Mesh &getMeshParent() const

Parent mesh accessor.

bool isMeshFacets() const
DumperIOHelper &getGroupDumper(const std::string &dumper_name, const std::string &group_name)

return the dumper from a group and and a dumper name

auto getFacetConnectivity(const Element &element, UInt t = 0) const

get connectivity of facets for a given element

template<typename ...pack>
ElementTypesIteratorHelper elementTypes(pack&&... _pack) const
decltype(auto) firstType(UInt dim = _all_dimensions, GhostType ghost_type = _not_ghost, ElementKind kind = _ek_regular) const
decltype(auto) lastType(UInt dim = _all_dimensions, GhostType ghost_type = _not_ghost, ElementKind kind = _ek_regular) const
const ElementSynchronizer &getElementSynchronizer() const
ElementSynchronizer &getElementSynchronizer()
const NodeSynchronizer &getNodeSynchronizer() const
NodeSynchronizer &getNodeSynchronizer()
const PeriodicNodeSynchronizer &getPeriodicNodeSynchronizer() const
PeriodicNodeSynchronizer &getPeriodicNodeSynchronizer()
const auto &getCommunicator() const
auto &getCommunicator()
const auto &getPeriodicMasterSlaves() const
template<>
void sendEvent(NewElementsEvent &event)
template<>
void sendEvent(NewNodesEvent &event)
template<>
void sendEvent(RemovedElementsEvent &event)
template<>
void sendEvent(RemovedNodesEvent &event)

Public Static Functions

UInt getNbNodesPerElement(ElementType type)

get the number of nodes per element for a given element type

ElementType getP1ElementType(ElementType type)

get the number of nodes per element for a given element type considered as a first order element

ElementKind getKind(ElementType type)

get the kind of the element type

UInt getSpatialDimension(ElementType type)

get spatial dimension of a type of element

UInt getNbFacetsPerElement(ElementType type)

get number of facets of a given element type

UInt getNbFacetsPerElement(ElementType type, UInt t)

get number of facets of a given element type

auto getFacetLocalConnectivity(ElementType type, UInt t = 0)

get local connectivity of a facet for a given facet type

UInt getNbFacetTypes(ElementType type, UInt t = 0)

get the number of type of the surface element associated to a given element type

constexpr auto getFacetType(ElementType type, UInt t = 0)

get the type of the surface element associated to a given element

constexpr auto getAllFacetTypes(ElementType type)

get all the type of the surface element associated to a given element

UInt getNbNodesPerElementList(const Array<Element> &elements)

get the number of nodes in the given element list

class PeriodicSlaves

Public Functions

PeriodicSlaves(const Mesh &mesh, UInt master)
PeriodicSlaves(const PeriodicSlaves &other) = default
PeriodicSlaves(PeriodicSlaves &&other) = default
PeriodicSlaves &operator=(const PeriodicSlaves &other) = default
auto begin() const
auto end() const
class const_iterator

Public Functions

const_iterator(internal_iterator it)
const_iterator operator++()
bool operator!=(const const_iterator &other)
auto operator*()
class akantu::FEEngine : protected akantu::Memory, public akantu::MeshEventHandler

The generic FEEngine class derived in a FEEngineTemplate class containing the shape functions and the integration method

Public Types

using ElementTypesIteratorHelper = ElementTypeMapArray<Real, ElementType>::ElementTypesIteratorHelper

Public Functions

FEEngine(Mesh &mesh, UInt element_dimension = _all_dimensions, const ID &id = "fem", MemoryID memory_id = 0)
~FEEngine() override
void initShapeFunctions(GhostType ghost_type = _not_ghost) = 0

pre-compute all the shape functions, their derivatives and the jacobians

void integrate(const Array<Real> &f, Array<Real> &intf, UInt nb_degree_of_freedom, ElementType type, GhostType ghost_type = _not_ghost, const Array<UInt> &filter_elements = empty_filter) const = 0

integrate f for all elements of type “type”

Real integrate(const Array<Real> &f, ElementType type, GhostType ghost_type = _not_ghost, const Array<UInt> &filter_elements = empty_filter) const = 0

integrate a scalar value f on all elements of type “type”

void integrateOnIntegrationPoints(const Array<Real> &f, Array<Real> &intf, UInt nb_degree_of_freedom, ElementType type, GhostType ghost_type = _not_ghost, const Array<UInt> &filter_elements = empty_filter) const = 0

integrate f for all integration points of type “type” but don’t sum over all integration points

Real integrate(const Vector<Real> &f, ElementType type, UInt index, GhostType ghost_type = _not_ghost) const = 0

integrate one element scalar value on all elements of type “type”

UInt getNbIntegrationPoints(ElementType type, GhostType ghost_type = _not_ghost) const = 0

get the number of integration points

const Array<Real> &getShapes(ElementType type, GhostType ghost_type = _not_ghost, UInt id = 0) const = 0

get the precomputed shapes

const Array<Real> &getShapesDerivatives(ElementType type, GhostType ghost_type = _not_ghost, UInt id = 0) const = 0

get the derivatives of shapes

const Matrix<Real> &getIntegrationPoints(ElementType type, GhostType ghost_type = _not_ghost) const = 0

get integration points

void gradientOnIntegrationPoints(const Array<Real> &u, Array<Real> &nablauq, UInt nb_degree_of_freedom, ElementType type, GhostType ghost_type = _not_ghost, const Array<UInt> &filter_elements = empty_filter) const = 0

Compute the gradient nablauq on the integration points of an element type from nodal values u

void interpolateOnIntegrationPoints(const Array<Real> &u, Array<Real> &uq, UInt nb_degree_of_freedom, ElementType type, GhostType ghost_type = _not_ghost, const Array<UInt> &filter_elements = empty_filter) const = 0

Interpolate a nodal field u at the integration points of an element type -> uq

void interpolateOnIntegrationPoints(const Array<Real> &u, ElementTypeMapArray<Real> &uq, const ElementTypeMapArray<UInt> *filter_elements = nullptr) const = 0

Interpolate a nodal field u at the integration points of many element types -> uq

void computeBtD(const Array<Real> &Ds, Array<Real> &BtDs, ElementType type, GhostType ghost_type = _not_ghost, const Array<UInt> &filter_elements = empty_filter) const = 0

pre multiplies a tensor by the shapes derivaties

void computeBtDB(const Array<Real> &Ds, Array<Real> &BtDBs, UInt order_d, ElementType type, GhostType ghost_type = _not_ghost, const Array<UInt> &filter_elements = empty_filter) const = 0

left and right multiplies a tensor by the shapes derivaties

void computeNtb(const Array<Real> &bs, Array<Real> &Ntbs, ElementType type, GhostType ghost_type = _not_ghost, const Array<UInt> &filter_elements = empty_filter) const = 0

left multiples a vector by the shape functions

void computeIntegrationPointsCoordinates(ElementTypeMapArray<Real> &integration_points_coordinates, const ElementTypeMapArray<UInt> *filter_elements = nullptr) const = 0

Compute the interpolation point position in the global coordinates for many element types

void computeIntegrationPointsCoordinates(Array<Real> &integration_points_coordinates, ElementType type, GhostType ghost_type = _not_ghost, const Array<UInt> &filter_elements = empty_filter) const = 0

Compute the interpolation point position in the global coordinates for an element type

void initElementalFieldInterpolationFromIntegrationPoints(const ElementTypeMapArray<Real> &interpolation_points_coordinates, ElementTypeMapArray<Real> &interpolation_points_coordinates_matrices, ElementTypeMapArray<Real> &integration_points_coordinates_inv_matrices, const ElementTypeMapArray<UInt> *element_filter) const = 0

Build pre-computed matrices for interpolation of field form integration points at other given positions (interpolation_points)

void interpolateElementalFieldFromIntegrationPoints(const ElementTypeMapArray<Real> &field, const ElementTypeMapArray<Real> &interpolation_points_coordinates, ElementTypeMapArray<Real> &result, GhostType ghost_type, const ElementTypeMapArray<UInt> *element_filter) const = 0

interpolate field at given position (interpolation_points) from given values of this field at integration points (field)

void interpolateElementalFieldFromIntegrationPoints(const ElementTypeMapArray<Real> &field, const ElementTypeMapArray<Real> &interpolation_points_coordinates_matrices, const ElementTypeMapArray<Real> &integration_points_coordinates_inv_matrices, ElementTypeMapArray<Real> &result, GhostType ghost_type, const ElementTypeMapArray<UInt> *element_filter) const = 0

Interpolate field at given position from given values of this field at integration points (field) using matrices precomputed with initElementalFieldInterplationFromIntegrationPoints

void interpolate(const Vector<Real> &real_coords, const Matrix<Real> &nodal_values, Vector<Real> &interpolated, const Element &element) const = 0

interpolate on a phyiscal point inside an element

void computeShapes(const Vector<Real> &real_coords, UInt elem, ElementType type, Vector<Real> &shapes, GhostType ghost_type = _not_ghost) const = 0

compute the shape on a provided point

void computeShapeDerivatives(const Vector<Real> &real_coords, UInt element, ElementType type, Matrix<Real> &shape_derivatives, GhostType ghost_type = _not_ghost) const = 0

compute the shape derivatives on a provided point

void assembleFieldLumped(const std::function<void(Matrix<Real>&, const Element&)> &field_funct, const ID &matrix_id, const ID &dof_id, DOFManager &dof_manager, ElementType type, GhostType ghost_type = _not_ghost, ) const = 0

assembles the lumped version of

\[ \int N^t rho N \]

void assembleFieldMatrix(const std::function<void(Matrix<Real>&, const Element&)> &field_funct, const ID &matrix_id, const ID &dof_id, DOFManager &dof_manager, ElementType type, GhostType ghost_type = _not_ghost, ) const = 0

assembles the matrix

\[ \int N^t rho N \]

void computeNormalsOnIntegrationPoints(GhostType ghost_type = _not_ghost) = 0

pre-compute normals on integration points

void computeNormalsOnIntegrationPoints(const Array<Real>&, GhostType = _not_ghost)

pre-compute normals on integration points

void computeNormalsOnIntegrationPoints(const Array<Real>&, Array<Real>&, ElementType, GhostType = _not_ghost) const

pre-compute normals on integration points

void printself(std::ostream &stream, int indent = 0) const

function to print the containt of the class

ElementTypesIteratorHelper elementTypes(UInt dim = _all_dimensions, GhostType ghost_type = _not_ghost, ElementKind kind = _ek_regular) const
UInt getElementDimension() const

get the dimension of the element handeled by this fe_engine object

const Mesh &getMesh() const

get the mesh contained in the fem object

Mesh &getMesh()

get the mesh contained in the fem object

const Array<Real> &getNormalsOnIntegrationPoints(const ElementType &el_type, GhostType ghost_type = _not_ghost) const

get the normals on integration points

const ShapeFunctions &getShapeFunctionsInterface() const = 0

get the shape function class (probably useless: see getShapeFunction in fe_engine_template.hh)

const Integrator &getIntegratorInterface() const = 0

get the integrator class (probably useless: see getIntegrator in fe_engine_template.hh)

Public Static Functions

template<typename T>
void extractNodalToElementField(const Mesh &mesh, const Array<T> &nodal_f, Array<T> &elemental_f, ElementType type, GhostType ghost_type = _not_ghost, const Array<UInt> &filter_elements = empty_filter)

extract the nodal values and store them per element

template<typename T>
void filterElementalData(const Mesh &mesh, const Array<T> &elem_f, Array<T> &filtered_f, ElementType type, GhostType ghost_type = _not_ghost, const Array<UInt> &filter_elements = empty_filter)

filter a field

Real getElementInradius(const Matrix<Real> &coord, ElementType type)

get the in-radius of an element

ElementType getCohesiveElementType(ElementType type_facet)

get cohesive element type for a given facet type

Vector<ElementType> getIGFEMElementTypes(ElementType type)

get igfem element type for a given regular type

InterpolationType getInterpolationType(ElementType el_type)

get the interpolation element associated to an element type

Models

Common

class akantu::BC::Dirichlet::FixedValue : public akantu::BC::Dirichlet::DirichletFunctor

Public Functions

FixedValue(Real val, Axis ax = _x)
void operator()(UInt node, Vector<bool> &flags, Vector<Real> &primal, const Vector<Real> &coord) const override
class akantu::BC::Dirichlet::FlagOnly : public akantu::BC::Dirichlet::DirichletFunctor

Public Functions

FlagOnly(Axis ax = _x)
void operator()(UInt node, Vector<bool> &flags, Vector<Real> &primal, const Vector<Real> &coord) const override
class akantu::BC::Dirichlet::IncrementValue : public akantu::BC::Dirichlet::DirichletFunctor

Public Functions

IncrementValue(Real val, Axis ax = _x)
void operator()(UInt node, Vector<bool> &flags, Vector<Real> &primal, const Vector<Real> &coord) const override
void setIncrement(Real val)

Warning

doxygenclass: Cannot find class “akantu::BC::Neumann::FromStress” in doxygen xml output for project “Akantu” from directory: /builds/akantu/akantu/build/doc/dev-doc/xml

Warning

doxygenclass: Cannot find class “akantu::BC::Neumann::FromTraction” in doxygen xml output for project “Akantu” from directory: /builds/akantu/akantu/build/doc/dev-doc/xml

template<class ModelType>
class akantu::BoundaryCondition

Public Functions

BoundaryCondition()
void initBC(ModelType &model, Array<Real> &primal, Array<Real> &dual)

Initialize the boundary conditions.

void initBC(ModelType &model, Array<Real> &primal, Array<Real> &primal_increment, Array<Real> &dual)
template<typename FunctorType>
void applyBC(const FunctorType &func)

Apply the boundary conditions.

template<class FunctorType>
void applyBC(const FunctorType &func, const std::string &group_name)
template<class FunctorType>
void applyBC(const FunctorType &func, const ElementGroup &element_group)
ModelType &getModel()
Array<Real> &getPrimal()
Array<Real> &getDual()
template<class FunctorType, BC::Functor::Type type = FunctorType::type>
struct TemplateFunctionWrapper
template<typename FunctorType> _dirichlet >

Public Static Functions

void applyBC(const FunctorType &func, const ElementGroup &group, BoundaryCondition<ModelType> &bc_instance)
template<typename FunctorType> _neumann >

Public Static Functions

void applyBC(const FunctorType &func, const ElementGroup &group, BoundaryCondition<ModelType> &bc_instance)
void applyBC(const FunctorType &func, const ElementGroup &group, BoundaryCondition<ModelType> &bc_instance, GhostType ghost_type)

Warning

doxygenclass: Cannot find class “akantu::BoundaryConditionFunctor” in doxygen xml output for project “Akantu” from directory: /builds/akantu/akantu/build/doc/dev-doc/xml

template<class EventHandler>
class akantu::EventHandlerManager

Public Functions

~EventHandlerManager()
void registerEventHandler(EventHandler &event_handler, EventHandlerPriority priority = _ehp_highest)

register a new EventHandler to the Manager. The register object will then be informed about the events the manager observes.

void unregisterEventHandler(EventHandler &event_handler)

unregister a EventHandler object. This object will not be notified anymore about the events this manager observes.

template<class Event>
void sendEvent(const Event &event)

Notify all the registered EventHandlers about the event that just occured.

class akantu::Model : public akantu::Memory, public akantu::ModelSolver, public akantu::MeshEventHandler

Subclassed by akantu::HeatTransferModel, akantu::SolidMechanicsModel, akantu::StructuralMechanicsModel

Public Types

using FEEngineMap = std::map<std::string, std::unique_ptr<FEEngine>>

Public Functions

Model(Mesh &mesh, const ModelType &type, UInt dim = _all_dimensions, const ID &id = "model", const MemoryID &memory_id = 0)
~Model() override
template<typename ...pack>
std::enable_if_t<are_named_argument<pack...>::value> initFull(pack&&... _pack)
template<typename ...pack>
std::enable_if_t<not are_named_argument<pack...>::value> initFull(pack&&... _pack)
void initNewSolver(const AnalysisMethod &method)

initialize a new solver if needed

void dumpGroup(const std::string &group_name)

Dump the data for a given group.

void dumpGroup(const std::string &group_name, const std::string &dumper_name)
void dumpGroup()

Dump the data for all boundaries.

void setGroupDirectory(const std::string &directory, const std::string &group_name)

Set the directory for a given group.

void setGroupDirectory(const std::string &directory)

Set the directory for all boundaries.

void setGroupBaseName(const std::string &basename, const std::string &group_name)

Set the base name for a given group.

DumperIOHelper &getGroupDumper(const std::string &group_name)

Get the internal dumper of a given group.

void updateDataForNonLocalCriterion(__attribute__((unused)) ElementTypeMapReal &criterion)
const ID &getID() const

get id of model

Mesh &getMesh() const

get the number of surfaces

void synchronizeBoundaries()

synchronize the boundary in case of parallel run

FEEngine &getFEEngine(const ID &name = "") const

return the fem object associated with a provided name

FEEngine &getFEEngineBoundary(const ID &name = "")

return the fem boundary object associated with a provided name

template<typename FEEngineClass>
void registerFEEngineObject(const std::string &name, Mesh &mesh, UInt spatial_dimension)

register a fem object associated with name

void unRegisterFEEngineObject(const std::string &name)

unregister a fem object associated with name

SynchronizerRegistry &getSynchronizerRegistry()

return the synchronizer registry

template<typename FEEngineClass>
FEEngineClass &getFEEngineClass(std::string name = "") const

return the fem object associated with a provided name

template<typename FEEngineClass>
FEEngineClass &getFEEngineClassBoundary(std::string name = "")

return the fem boundary object associated with a provided name

AnalysisMethod getAnalysisMethod() const

Get the type of analysis method used.

UInt getNbIntegrationPoints(const Array<Element> &elements, const ID &fem_id = ID()) const
void setTextModeToDumper()
void addDumpGroupFieldToDumper(const std::string &field_id, std::shared_ptr<dumpers::Field> field, DumperIOHelper &dumper)
void addDumpField(const std::string &field_id)
void addDumpFieldVector(const std::string &field_id)
void addDumpFieldToDumper(const std::string &dumper_name, const std::string &field_id)
void addDumpFieldVectorToDumper(const std::string &dumper_name, const std::string &field_id)
void addDumpFieldTensorToDumper(const std::string &dumper_name, const std::string &field_id)
void addDumpFieldTensor(const std::string &field_id)
void setBaseName(const std::string &field_id)
void setBaseNameToDumper(const std::string &dumper_name, const std::string &basename)
void addDumpGroupField(const std::string &field_id, const std::string &group_name)
void addDumpGroupFieldToDumper(const std::string &dumper_name, const std::string &field_id, const std::string &group_name, ElementKind element_kind, bool padding_flag)
void addDumpGroupFieldToDumper(const std::string &dumper_name, const std::string &field_id, const std::string &group_name, UInt spatial_dimension, ElementKind element_kind, bool padding_flag)
void removeDumpGroupField(const std::string &field_id, const std::string &group_name)
void removeDumpGroupFieldFromDumper(const std::string &dumper_name, const std::string &field_id, const std::string &group_name)
void addDumpGroupFieldVector(const std::string &field_id, const std::string &group_name)
void addDumpGroupFieldVectorToDumper(const std::string &dumper_name, const std::string &field_id, const std::string &group_name)
std::shared_ptr<dumpers::Field> createNodalFieldReal(const std::string&, const std::string&, bool)
std::shared_ptr<dumpers::Field> createNodalFieldUInt(const std::string&, const std::string&, bool)
std::shared_ptr<dumpers::Field> createNodalFieldBool(const std::string&, const std::string&, bool)
std::shared_ptr<dumpers::Field> createElementalField(const std::string&, const std::string&, bool, UInt, ElementKind)
void setDirectory(const std::string &directory)
void setDirectoryToDumper(const std::string &dumper_name, const std::string &directory)
void dump()
class akantu::NonLocalManagerCallback

Subclassed by akantu::SolidMechanicsModel

Public Functions

void initializeNonLocal()
void insertIntegrationPointsInNeighborhoods(GhostType ghost_type) = 0
void computeNonLocalStresses(GhostType ghost_type) = 0
void updateLocalInternal(ElementTypeMapReal &internal_flat, GhostType ghost_type, ElementKind kind) = 0

update the values of the non local internal

void updateNonLocalInternal(ElementTypeMapReal &internal_flat, GhostType ghost_type, ElementKind kind) = 0

copy the results of the averaging in the materials

Solvers

class akantu::ModelSolver : public akantu::Parsable, public akantu::SolverCallback, public akantu::SynchronizerRegistry

Subclassed by akantu::Model

Public Functions

ModelSolver(Mesh &mesh, const ModelType &type, const ID &id, UInt memory_id)
~ModelSolver() override
void initDOFManager()

initialize the dof manager based on solver type passed in the input file

void initDOFManager(const ID &solver_type)

initialize the dof manager based on the used chosen solver type

void solveStep(const ID &solver_id = "")

solve a step using a given pre instantiated time step solver and nondynamic linear solver

void solveStep(SolverCallback &callback, const ID &solver_id = "")

solve a step using a given pre instantiated time step solver and non linear solver with a user defined callback instead of the model itself /!\ This can mess up everything

void getNewSolver(const ID &solver_id, TimeStepSolverType time_step_solver_type, NonLinearSolverType non_linear_solver_type = NonLinearSolverType::_auto)

Initialize a time solver that can be used afterwards with its id.

void setIntegrationScheme(const ID &solver_id, const ID &dof_id, const IntegrationSchemeType &integration_scheme_type, IntegrationScheme::SolutionType solution_type = IntegrationScheme::_not_defined)

set an integration scheme for a given dof and a given solver

void setIntegrationScheme(const ID &solver_id, const ID &dof_id, IntegrationScheme &integration_scheme, IntegrationScheme::SolutionType solution_type = IntegrationScheme::_not_defined)

set an externally instantiated integration scheme

void predictor() override

Predictor interface for the callback.

void corrector() override

Corrector interface for the callback.

TimeStepSolverType getDefaultSolverType() const

Default time step solver to instantiate for this model.

ModelSolverOptions getDefaultSolverOptions(const TimeStepSolverType &type) const

Default configurations for a given time step solver.

DOFManager &getDOFManager()

get access to the internal dof manager

Real getTimeStep(const ID &solver_id = "") const

get the time step of a given solver

void setTimeStep(Real time_step, const ID &solver_id = "")

set the time step of a given solver

bool hasSolver(const ID &solver_id) const

set the parameter ‘param’ of the solver ‘solver_id’

get the parameter ‘param’ of the solver ‘solver_id’ answer to the question “does the solver exists ?”

void setDefaultSolver(const ID &solver_id)

changes the current default solver

bool hasDefaultSolver() const

is a default solver defined

bool hasIntegrationScheme(const ID &solver_id, const ID &dof_id) const

is an integration scheme set for a given solver and a given dof

TimeStepSolver &getTimeStepSolver(const ID &solver_id = "")
NonLinearSolver &getNonLinearSolver(const ID &solver_id = "")
const TimeStepSolver &getTimeStepSolver(const ID &solver_id = "") const
const NonLinearSolver &getNonLinearSolver(const ID &solver_id = "") const
class akantu::DOFManager : protected akantu::Memory, protected akantu::MeshEventHandler

Subclassed by akantu::DOFManagerDefault

Public Functions

DOFManager(const ID &id = "dof_manager", const MemoryID &memory_id = 0)
DOFManager(Mesh &mesh, const ID &id = "dof_manager", const MemoryID &memory_id = 0)
~DOFManager() override
void registerDOFs(const ID &dof_id, Array<Real> &dofs_array, const DOFSupportType &support_type)

register an array of degree of freedom

void registerDOFs(const ID &dof_id, Array<Real> &dofs_array, const ID &support_group)

the dof as an implied type of _dst_nodal and is defined only on a subset of nodes

void registerDOFsPrevious(const ID &dof_id, Array<Real> &dofs_array)

register an array of previous values of the degree of freedom

void registerDOFsIncrement(const ID &dof_id, Array<Real> &dofs_array)

register an array of increment of degree of freedom

void registerDOFsDerivative(const ID &dof_id, UInt order, Array<Real> &dofs_derivative)

register an array of derivatives for a particular dof array

void registerBlockedDOFs(const ID &dof_id, Array<bool> &blocked_dofs)

register array representing the blocked degree of freedoms

void assembleToResidual(const ID &dof_id, Array<Real> &array_to_assemble, Real scale_factor = 1.)

Assemble an array to the global residual array.

void assembleToLumpedMatrix(const ID &dof_id, Array<Real> &array_to_assemble, const ID &lumped_mtx, Real scale_factor = 1.)

Assemble an array to the global lumped matrix array.

void assembleElementalArrayLocalArray(const Array<Real> &elementary_vect, Array<Real> &array_assembeled, ElementType type, GhostType ghost_type, Real scale_factor = 1., const Array<UInt> &filter_elements = empty_filter)

Assemble elementary values to a local array of the size nb_nodes * nb_dof_per_node. The dof number is implicitly considered as conn(el, n) * nb_nodes_per_element + d. With 0 < n < nb_nodes_per_element and 0 < d < nb_dof_per_node

void assembleElementalArrayToResidual(const ID &dof_id, const Array<Real> &elementary_vect, ElementType type, GhostType ghost_type, Real scale_factor = 1., const Array<UInt> &filter_elements = empty_filter)

Assemble elementary values to the global residual array. The dof number is implicitly considered as conn(el, n) * nb_nodes_per_element + d. With 0 < n < nb_nodes_per_element and 0 < d < nb_dof_per_node

void assembleElementalArrayToLumpedMatrix(const ID &dof_id, const Array<Real> &elementary_vect, const ID &lumped_mtx, ElementType type, GhostType ghost_type, Real scale_factor = 1., const Array<UInt> &filter_elements = empty_filter)

Assemble elementary values to a global array corresponding to a lumped matrix

void assembleElementalMatricesToMatrix(const ID &matrix_id, const ID &dof_id, const Array<Real> &elementary_mat, ElementType type, GhostType ghost_type = _not_ghost, const MatrixType &elemental_matrix_type = _symmetric, const Array<UInt> &filter_elements = empty_filter) = 0

Assemble elementary values to the global residual array. The dof number is implicitly considered as conn(el, n) * nb_nodes_per_element + d. With 0 < n < nb_nodes_per_element and 0 < d < nb_dof_per_node

void assembleMatMulVectToArray(const ID &dof_id, const ID &A_id, const Array<Real> &x, Array<Real> &array, Real scale_factor = 1) = 0

multiply a vector by a matrix and assemble the result to the residual

void assembleLumpedMatMulVectToResidual(const ID &dof_id, const ID &A_id, const Array<Real> &x, Real scale_factor = 1) = 0

multiply a vector by a lumped matrix and assemble the result to the residual

void assemblePreassembledMatrix(const ID &dof_id_m, const ID &dof_id_n, const ID &matrix_id, const TermsToAssemble &terms) = 0

assemble coupling terms between to dofs

void assembleMatMulVectToResidual(const ID &dof_id, const ID &A_id, const Array<Real> &x, Real scale_factor = 1)

multiply a vector by a matrix and assemble the result to the residual

void assembleMatMulDOFsToResidual(const ID &A_id, Real scale_factor = 1)

multiply the dofs by a matrix and assemble the result to the residual

void updateGlobalBlockedDofs()

updates the global blocked_dofs array

void zeroResidual()

sets the residual to 0

void zeroMatrix(const ID &mtx)

sets the matrix to 0

void zeroLumpedMatrix(const ID &mtx)

sets the lumped matrix to 0

void applyBoundary(const ID &matrix_id = "J")
void getLumpedMatrixPerDOFs(const ID &dof_id, const ID &lumped_mtx, Array<Real> &lumped)

extract a lumped matrix part corresponding to a given dof

void splitSolutionPerDOFs()

splits the solution storage from a global view to the per dof storages

bool isLocalOrMasterDOF(UInt local_dof_num)

Get the location type of a given dof.

bool isSlaveDOF(UInt local_dof_num)

Answer to the question is a dof a slave dof ?

bool isPureGhostDOF(UInt local_dof_num)

Answer to the question is a dof a slave dof ?

bool hasGlobalEquationNumber(Int global) const

tells if the dof manager knows about a global dof

Int globalToLocalEquationNumber(Int global) const

return the local index of the global equation number

Int localToGlobalEquationNumber(Int local) const

converts local equation numbers to global equation numbers;

NodeFlag getDOFFlag(Int local_id) const

get the array of dof types (use only if you know what you do…)

UInt getSystemSize() const

Global number of dofs.

UInt getLocalSystemSize() const

Local number of dofs.

UInt getPureLocalSystemSize() const

Pure local number of dofs.

std::vector<ID> getDOFIDs() const

Retrieve all the registered DOFs.

Array<Real> &getDOFs(const ID &dofs_id)

Get a reference to the registered dof array for a given id.

DOFSupportType getSupportType(const ID &dofs_id) const

Get the support type of a given dof.

bool hasDOFs(const ID &dof_id) const

are the dofs registered

Array<Real> &getDOFsDerivatives(const ID &dofs_id, UInt order)

Get a reference to the registered dof derivatives array for a given id.

bool hasDOFsDerivatives(const ID &dofs_id, UInt order) const

Does the dof has derivatives.

const Array<bool> &getBlockedDOFs(const ID &dofs_id) const

Get a reference to the blocked dofs array registered for the given id.

bool hasBlockedDOFs(const ID &dofs_id) const

Does the dof has a blocked array.

Array<Real> &getDOFsIncrement(const ID &dofs_id)

Get a reference to the registered dof increment array for a given id.

bool hasDOFsIncrement(const ID &dofs_id) const

Does the dof has a increment array.

Array<Real> &getPreviousDOFs(const ID &dofs_id)

Does the dof has a previous array.

bool hasPreviousDOFs(const ID &dofs_id) const

Get a reference to the registered dof array for previous step values a given id

void savePreviousDOFs(const ID &dofs_id)

saves the values from dofs to previous dofs

const Array<Real> &getSolution(const ID &dofs_id) const

Get a reference to the solution array registered for the given id.

Array<Real> &getSolution(const ID &dofs_id)

Get a reference to the solution array registered for the given id.

const Array<Int> &getGlobalBlockedDOFs() const

Get the blocked dofs array.

const Array<Int> &getPreviousGlobalBlockedDOFs() const

Get the blocked dofs array.

SparseMatrix &getNewMatrix(const ID &matrix_id, const MatrixType &matrix_type) = 0

Get an instance of a new SparseMatrix.

SparseMatrix &getNewMatrix(const ID &matrix_id, const ID &matrix_to_copy_id) = 0

Get an instance of a new SparseMatrix as a copy of the SparseMatrix matrix_to_copy_id

const Array<Int> &getLocalEquationsNumbers(const ID &dof_id) const

Get the equation numbers corresponding to a dof_id. This might be used to access the matrix.

void getArrayPerDOFs(const ID &dof_id, const SolverVector &global, Array<Real> &local) = 0

extract degrees of freedom (identified by ID) from a global solver array

SparseMatrix &getMatrix(const ID &matrix_id)

Get the reference of an existing matrix.

bool hasMatrix(const ID &matrix_id) const

check if the given matrix exists

SolverVector &getNewLumpedMatrix(const ID &matrix_id) = 0

Get an instance of a new lumped matrix.

const SolverVector &getLumpedMatrix(const ID &matrix_id) const

Get the lumped version of a given matrix.

SolverVector &getLumpedMatrix(const ID &matrix_id)

Get the lumped version of a given matrix.

bool hasLumpedMatrix(const ID &matrix_id) const

check if the given matrix exists

NonLinearSolver &getNewNonLinearSolver(const ID &nls_solver_id, const NonLinearSolverType &_non_linear_solver_type) = 0

Get instance of a non linear solver.

NonLinearSolver &getNonLinearSolver(const ID &nls_solver_id)

get instance of a non linear solver

bool hasNonLinearSolver(const ID &solver_id) const

check if the given solver exists

TimeStepSolver &getNewTimeStepSolver(const ID &time_step_solver_id, const TimeStepSolverType &type, NonLinearSolver &non_linear_solver, SolverCallback &solver_callback) = 0

Get instance of a time step solver.

TimeStepSolver &getTimeStepSolver(const ID &time_step_solver_id)

get instance of a time step solver

bool hasTimeStepSolver(const ID &solver_id) const

check if the given solver exists

const Mesh &getMesh()
const auto &getCommunicator() const
auto &getCommunicator()
const auto &getSolution() const
auto &getSolution()
const auto &getResidual() const
auto &getResidual()
void onNodesAdded(const Array<UInt> &nodes_list, const NewNodesEvent &event) override

function to implement to react on akantu::NewNodesEvent

void onNodesRemoved(const Array<UInt> &nodes_list, const Array<UInt> &new_numbering, const RemovedNodesEvent &event) override

function to implement to react on akantu::RemovedNodesEvent

void onElementsAdded(const Array<Element> &elements_list, const NewElementsEvent &event) override

function to implement to react on akantu::NewElementsEvent

void onElementsRemoved(const Array<Element> &elements_list, const ElementTypeMapArray<UInt> &new_numbering, const RemovedElementsEvent &event) override

function to implement to react on akantu::RemovedElementsEvent

void onElementsChanged(const Array<Element> &old_elements_list, const Array<Element> &new_elements_list, const ElementTypeMapArray<UInt> &new_numbering, const ChangedElementsEvent &event) override

function to implement to react on akantu::ChangedElementsEvent

class akantu::NonLinearSolver : private akantu::Memory, public akantu::Parsable

Subclassed by akantu::NonLinearSolverLinear, akantu::NonLinearSolverLumped, akantu::NonLinearSolverNewtonRaphson

Public Functions

NonLinearSolver(DOFManager &dof_manager, const NonLinearSolverType &non_linear_solver_type, const ID &id = "non_linear_solver", UInt memory_id = 0)
~NonLinearSolver() override
void solve(SolverCallback &callback) = 0

solve the system described by the jacobian matrix, and rhs contained in the dof manager

template<typename T>
void set(const ID &param, T &&t)

intercept the call to set for options

class akantu::NonLinearSolverNewtonRaphson : public akantu::NonLinearSolver

Public Functions

NonLinearSolverNewtonRaphson(DOFManagerDefault &dof_manager, const NonLinearSolverType &non_linear_solver_type, const ID &id = "non_linear_solver_newton_raphson", UInt memory_id = 0)
~NonLinearSolverNewtonRaphson() override
void solve(SolverCallback &solver_callback) override

Function that solve the non linear system described by the dof manager and the solver callback functions

SparseSolverMumps &getSolver()
const SparseSolverMumps &getSolver() const

Solid Mechanics Model

class akantu::SolidMechanicsModel : public akantu::Model, public akantu::DataAccessor<Element>, public akantu::DataAccessor<UInt>, public akantu::BoundaryCondition<SolidMechanicsModel>, public akantu::NonLocalManagerCallback, public akantu::EventHandlerManager<SolidMechanicsModelEventHandler>

Subclassed by akantu::SolidMechanicsModelCohesive

Public Types

using MyFEEngineType = FEEngineTemplate<IntegratorGauss, ShapeLagrange>

Public Functions

SolidMechanicsModel(Mesh &mesh, UInt dim = _all_dimensions, const ID &id = "solid_mechanics_model", const MemoryID &memory_id = 0, ModelType model_type = ModelType::_solid_mechanics_model)

A solid mechanics model need a mesh and a dimension to be created. the model by it self can not do a lot, the good init functions should be called in order to configure the model depending on what we want to do.

Parameters
  • mesh: mesh representing the model we want to simulate

  • dim: spatial dimension of the problem, if dim = 0 (default value) the dimension of the problem is assumed to be the on of the mesh

  • id: an id to identify the model

  • memory_id: the id of the memory

  • model_type: this is an internal parameter for inheritance purposes

~SolidMechanicsModel() override
void initMaterials()

initialize all internal arrays for materials

void assembleStiffnessMatrix()

assembles the stiffness matrix,

void assembleInternalForces()

assembles the internal forces in the array internal_forces

This function computes the internal forces as \(F_{int} = \int_{\Omega} N \sigma d\Omega@\)

bool isDefaultSolverExplicit()
Material &registerNewMaterial(const ID &mat_name, const ID &mat_type, const ID &opt_param)

register an empty material of a given type

void reassignMaterial()

reassigns materials depending on the material selector

void applyEigenGradU(const Matrix<Real> &prescribed_eigen_grad_u, const ID &material_name, GhostType ghost_type = _not_ghost)

apply a constant eigen_grad_u on all quadrature points of a given material

void assembleMassLumped()

assemble the lumped mass matrix

void assembleMass()

assemble the mass matrix for consistent mass resolutions

UInt getNbData(const Array<Element> &elements, const SynchronizationTag &tag) const override
void packData(CommunicationBuffer &buffer, const Array<Element> &elements, const SynchronizationTag &tag) const override
void unpackData(CommunicationBuffer &buffer, const Array<Element> &elements, const SynchronizationTag &tag) override
UInt getNbData(const Array<UInt> &dofs, const SynchronizationTag &tag) const override
void packData(CommunicationBuffer &buffer, const Array<UInt> &dofs, const SynchronizationTag &tag) const override
void unpackData(CommunicationBuffer &buffer, const Array<UInt> &dofs, const SynchronizationTag &tag) override
void onDump()
bool isInternal(const std::string &field_name, ElementKind element_kind)

decide wether a field is a material internal or not

ElementTypeMap<UInt> getInternalDataPerElem(const std::string &field_name, ElementKind kind)

give the amount of data per element

ElementTypeMapArray<Real> &flattenInternal(const std::string &field_name, ElementKind kind, GhostType ghost_type = _not_ghost)

flatten a given material internal field

void flattenAllRegisteredInternals(ElementKind kind)

flatten all the registered material internals

std::shared_ptr<dumpers::Field> createNodalFieldReal(const std::string &field_name, const std::string &group_name, bool padding_flag) override
std::shared_ptr<dumpers::Field> createNodalFieldBool(const std::string &field_name, const std::string &group_name, bool padding_flag) override
std::shared_ptr<dumpers::Field> createElementalField(const std::string &field_name, const std::string &group_name, bool padding_flag, UInt spatial_dimension, ElementKind kind) override
void dump(const std::string &dumper_name)
void dump(const std::string &dumper_name, UInt step)
void dump(const std::string &dumper_name, Real time, UInt step)
void dump() override
void dump(UInt step)
void dump(Real time, UInt step)
UInt getSpatialDimension() const

return the dimension of the system space

void setTimeStep(Real time_step, const ID &solver_id = "") override

set the value of the time step

Real getF_M2A() const

get the value of the conversion from forces/ mass to acceleration

void setF_M2A(Real f_m2a)

set the value of the conversion from forces/ mass to acceleration

auto &getDisplacement()

get the SolidMechanicsModel::displacement array

const auto &getDisplacement() const

get the SolidMechanicsModel::displacement array

const auto &getPreviousDisplacement() const

get the SolidMechanicsModel::previous_displacement array

const Array<Real> &getCurrentPosition()

get the SolidMechanicsModel::current_position array

const auto &getIncrement() const

get the SolidMechanicsModel::displacement_increment array

auto &getIncrement()

get the SolidMechanicsModel::displacement_increment array

const auto &getMass() const

get the lumped SolidMechanicsModel::mass array

auto &getVelocity()

get the SolidMechanicsModel::velocity array

const auto &getVelocity() const

get the SolidMechanicsModel::velocity array

auto &getAcceleration()

get the SolidMechanicsModel::acceleration array

const auto &getAcceleration() const

get the SolidMechanicsModel::acceleration array

auto &getExternalForce()

get the SolidMechanicsModel::external_force array

const auto &getExternalForce() const

get the SolidMechanicsModel::external_force array

Array<Real> &getForce()

get the SolidMechanicsModel::force array (external forces)

auto &getInternalForce()

get the SolidMechanicsModel::internal_force array (internal forces)

const auto &getInternalForce() const

get the SolidMechanicsModel::internal_force array (internal forces)

auto &getBlockedDOFs()

get the SolidMechanicsModel::blocked_dofs array

const auto &getBlockedDOFs() const

get the SolidMechanicsModel::blocked_dofs array

decltype(auto) getMaterials()

get an iterable on the materials

decltype(auto) getMaterials() const

get an iterable on the materials

Material &getMaterial(UInt mat_index)

get a particular material (by numerical material index)

const Material &getMaterial(UInt mat_index) const

get a particular material (by numerical material index)

Material &getMaterial(const std::string &name)

get a particular material (by material name)

const Material &getMaterial(const std::string &name) const

get a particular material (by material name)

UInt getMaterialIndex(const std::string &name) const

get a particular material id from is name

UInt getNbMaterials() const

give the number of materials

Int getInternalIndexFromID(const ID &id) const

give the material internal index from its id

Real getStableTimeStep()

compute the stable time step

Real getEnergy(const std::string &energy_id)

get the energies

Real getEnergy(const std::string &energy_id, ElementType type, UInt index)

compute the energy for energy

const ElementTypeMapArray<UInt> &getMaterialByElement() const
const ElementTypeMapArray<UInt> &getMaterialLocalNumbering() const
const Array<UInt> &getMaterialByElement(const ElementType &el_type, GhostType ghost_type = _not_ghost) const

vectors containing local material element index for each global element index

Array<UInt> &getMaterialByElement(const ElementType &el_type, GhostType ghost_type = _not_ghost)
const Array<UInt> &getMaterialLocalNumbering(const ElementType &el_type, GhostType ghost_type = _not_ghost) const
Array<UInt> &getMaterialLocalNumbering(const ElementType &el_type, GhostType ghost_type = _not_ghost)
MaterialSelector &getMaterialSelector()
void setMaterialSelector(std::shared_ptr<MaterialSelector> material_selector)
NonLocalManager &getNonLocalManager() const

Access the non_local_manager interface.

FEEngine &getFEEngineBoundary(const ID &name = "") override

get the FEEngine object to integrate or interpolate on the boundary

class NewMaterialElementsEvent : public akantu::NewElementsEvent

Public Functions

Array<UInt> &getMaterialList()
const Array<UInt> &getMaterialList() const

Warning

doxygenclass: Cannot find class “akantu::SolidMechanicsModelOptions” in doxygen xml output for project “Akantu” from directory: /builds/akantu/akantu/build/doc/dev-doc/xml

class akantu::MaterialSelector : public std::enable_shared_from_this<MaterialSelector>

main class to assign same or different materials for different elements

Subclassed by akantu::DefaultMaterialCohesiveSelector, akantu::DefaultMaterialSelector, akantu::ElementDataMaterialSelector< T >, akantu::MaterialCohesiveRulesSelector, akantu::MeshDataMaterialCohesiveSelector

Public Functions

MaterialSelector() = default
~MaterialSelector() = default
UInt operator()(const Element &element)
void setFallback(UInt f)
void setFallback(const std::shared_ptr<MaterialSelector> &fallback_selector)
void setFallback(MaterialSelector &fallback_selector)
std::shared_ptr<MaterialSelector> &getFallbackSelector()
UInt getFallbackValue() const
template<typename T>
class akantu::MeshDataMaterialSelector : public akantu::ElementDataMaterialSelector<T>

class to use mesh data information to assign different materials where name is the tag value: tag_0, tag_1

Public Functions

MeshDataMaterialSelector(const std::string &name, const SolidMechanicsModel &model, UInt first_index = 1)
class akantu::Material : public akantu::Memory, public akantu::DataAccessor<Element>, public akantu::Parsable, public akantu::MeshEventHandler, protected akantu::SolidMechanicsModelEventHandler

Interface of all materials Prerequisites for a new material

  • inherit from this class

  • implement the following methods:

     virtual Real getStableTimeStep(Real h, const Element & element =
    ElementNull);
    
     virtual void computeStress(ElementType el_type,
                                GhostType ghost_type = _not_ghost);
    
     virtual void computeTangentStiffness(ElementType el_type,
                                          Array<Real> & tangent_matrix,
                                          GhostType ghost_type = _not_ghost);
    

Subclassed by akantu::MaterialCohesive, akantu::MaterialElasticLinearAnisotropic< Dim >, akantu::MaterialThermal< spatial_dimension >, akantu::PlaneStressToolbox< dim, ParentMaterial >, akantu::PlaneStressToolbox< spatial_dimension >

Public Functions

Material(const Material &mat) = delete
Material &operator=(const Material &mat) = delete
Material(SolidMechanicsModel &model, const ID &id = "")

Initialize material with defaults.

Material(SolidMechanicsModel &model, UInt dim, const Mesh &mesh, FEEngine &fe_engine, const ID &id = "")

Initialize material with custom mesh & fe_engine.

~Material() override

Destructor.

void extrapolateInternal(const ID &id, const Element &element, const Matrix<Real> &points, Matrix<Real> &extrapolated)

extrapolate internal values

Real getPushWaveSpeed(const Element&) const

compute the p-wave speed in the material

Real getShearWaveSpeed(const Element&) const

compute the s-wave speed in the material

Real getCelerity(const Element &element) const

get a material celerity to compute the stable time step (default: is the push wave speed)

template<typename T>
void registerInternal(InternalField<T>&)
template<typename T>
void unregisterInternal(InternalField<T>&)
void initMaterial()

initialize the material computed parameter

void assembleInternalForces(GhostType ghost_type)

compute the residual for this material

assemble the residual for this material

Compute the internal forces by assembling \(\int_{e} \sigma_e \frac{\partial \varphi}{\partial X} dX \)

Parameters
  • [in] ghost_type: compute the internal forces for _ghost or _not_ghost element

void savePreviousState()

save the stress in the previous_stress if needed

void restorePreviousState()

restore the stress from previous_stress if needed

void computeAllStresses(GhostType ghost_type = _not_ghost)

compute the stresses for this material

Compute the stress from the gradu

Parameters
  • [in] ghost_type: compute the residual for _ghost or _not_ghost element

void computeAllCauchyStresses(GhostType ghost_type = _not_ghost)
void setToSteadyState(GhostType ghost_type = _not_ghost)

set material to steady state

void assembleStiffnessMatrix(GhostType ghost_type)

compute the stiffness matrix

Compute the stiffness matrix by assembling \(\int_{\omega} B^t \times D \times B d\omega \)

Parameters
  • [in] ghost_type: compute the residual for _ghost or _not_ghost element

UInt addElement(ElementType type, UInt element, GhostType ghost_type)

add an element to the local mesh filter

UInt addElement(const Element &element)
void addElements(const Array<Element> &elements_to_add)

add many elements at once

void removeElements(const Array<Element> &elements_to_remove)

remove many element at once

void printself(std::ostream &stream, int indent = 0) const override

function to print the contain of the class

void interpolateStress(ElementTypeMapArray<Real> &result, GhostType ghost_type = _not_ghost)

interpolate stress on given positions for each element by means of a geometrical interpolation on quadrature points

void interpolateStressOnFacets(ElementTypeMapArray<Real> &result, ElementTypeMapArray<Real> &by_elem_result, GhostType ghost_type = _not_ghost)

interpolate stress on given positions for each element by means of a geometrical interpolation on quadrature points and store the results per facet

void initElementalFieldInterpolation(const ElementTypeMapArray<Real> &interpolation_points_coordinates)

function to initialize the elemental field interpolation function by inverting the quadrature points’ coordinates

template<UInt dim>
void StoCauchy(ElementType el_type, GhostType ghost_type = _not_ghost)

Computation of Cauchy stress tensor in the case of finite deformation from the 2nd Piola-Kirchhoff for a given element type

template<UInt dim>
void StoCauchy(const Matrix<Real> &F, const Matrix<Real> &S, Matrix<Real> &sigma, const Real &C33 = 1.0) const

Computation the Cauchy stress the 2nd Piola-Kirchhoff and the deformation gradient

UInt getNbData(const Array<Element> &elements, const SynchronizationTag &tag) const override
void packData(CommunicationBuffer &buffer, const Array<Element> &elements, const SynchronizationTag &tag) const override
void unpackData(CommunicationBuffer &buffer, const Array<Element> &elements, const SynchronizationTag &tag) override
template<typename T>
void packElementDataHelper(const ElementTypeMapArray<T> &data_to_pack, CommunicationBuffer &buffer, const Array<Element> &elements, const ID &fem_id = ID()) const
template<typename T>
void unpackElementDataHelper(ElementTypeMapArray<T> &data_to_unpack, CommunicationBuffer &buffer, const Array<Element> &elements, const ID &fem_id = ID())
void onNodesAdded(const Array<UInt>&, const NewNodesEvent&) override

function to implement to react on akantu::NewNodesEvent

void onNodesRemoved(const Array<UInt>&, const Array<UInt>&, const RemovedNodesEvent&) override

function to implement to react on akantu::RemovedNodesEvent

void onElementsAdded(const Array<Element> &element_list, const NewElementsEvent &event) override

function to implement to react on akantu::NewElementsEvent

void onElementsRemoved(const Array<Element> &element_list, const ElementTypeMapArray<UInt> &new_numbering, const RemovedElementsEvent &event) override

function to implement to react on akantu::RemovedElementsEvent

void onElementsChanged(const Array<Element>&, const Array<Element>&, const ElementTypeMapArray<UInt>&, const ChangedElementsEvent&) override

function to implement to react on akantu::ChangedElementsEvent

void beforeSolveStep()
void afterSolveStep(bool converged = true)
void onDamageIteration() override

function to implement to react on akantu::BeginningOfDamageIterationEvent

void onDamageUpdate() override

function to implement to react on akantu::AfterDamageEvent

void onDump() override

function to implement to react on akantu::BeforeDumpEvent

const std::string &getName() const
const SolidMechanicsModel &getModel() const
const ID &getID() const
Real getRho() const
void setRho(Real rho)
UInt getSpatialDimension() const
Real getPotentialEnergy()

return the potential energy for the subset of elements contained by the material

Real getPotentialEnergy(ElementType &type, UInt index)

return the potential energy for the provided element

Real getEnergy(const std::string &type)

return the energy (identified by id) for the subset of elements contained by the material

Real getEnergy(const std::string &energy_id, ElementType type, UInt index)

return the energy (identified by id) for the provided element

const Array<UInt> &getElementFilter(const ElementType &el_type, GhostType ghost_type = _not_ghost) const
const Array<Real> &getGradU(const ElementType &el_type, GhostType ghost_type = _not_ghost) const
const Array<Real> &getStress(const ElementType &el_type, GhostType ghost_type = _not_ghost) const
const Array<Real> &getPotentialEnergy(const ElementType &el_type, GhostType ghost_type = _not_ghost) const
const ElementTypeMapArray<Real> &getGradU() const
const ElementTypeMapArray<Real> &getStress() const
const ElementTypeMapArray<UInt> &getElementFilter() const
FEEngine &getFEEngine() const
bool isNonLocal() const
template<typename T>
const Array<T> &getArray(const ID &id, ElementType type, GhostType ghost_type = _not_ghost) const
template<typename T>
Array<T> &getArray(const ID &id, ElementType type, GhostType ghost_type = _not_ghost)
template<typename T>
const InternalField<T> &getInternal(const ID &id) const
template<typename T>
InternalField<T> &getInternal(const ID &id)
template<typename T>
bool isInternal(const ID &id, ElementKind element_kind) const
template<typename T>
ElementTypeMap<UInt> getInternalDataPerElem(const ID &id, ElementKind element_kind) const
bool isFiniteDeformation() const
bool isInelasticDeformation() const
template<typename T>
void setParam(const ID &param, T value)
const Parameter &getParam(const ID &param) const
template<typename T>
void flattenInternal(const std::string &field_id, ElementTypeMapArray<T> &internal_flat, GhostType ghost_type = _not_ghost, ElementKind element_kind = _ek_not_defined) const
void applyEigenGradU(const Matrix<Real> &prescribed_eigen_grad_u, GhostType = _not_ghost)

apply a constant eigengrad_u everywhere in the material

bool hasMatrixChanged(const ID &id)
MatrixType getMatrixType(const ID &id)
bool hasStiffnessMatrixChanged()

specify if the matrix need to be recomputed for this material

MatrixType getTangentType()

specify the type of matrix, if not overloaded the material is not valid for static or implicit computations

template<>
const Array<Real> &getArray(const ID &vect_id, ElementType type, GhostType ghost_type) const
template<>
Array<Real> &getArray(const ID &vect_id, ElementType type, GhostType ghost_type)
template<typename T>
const InternalField<T> &getInternal([[gnu::unused]] const ID &int_id) const
template<typename T>
InternalField<T> &getInternal([[gnu::unused]] const ID &int_id)
template<>
const InternalField<Real> &getInternal(const ID &int_id) const
template<>
InternalField<Real> &getInternal(const ID &int_id)

Public Static Functions

UInt getCauchyStressMatrixSize(UInt dim)

Size of the Stress matrix for the case of finite deformation see: Bathe et al, IJNME, Vol 9, 353-386, 1975

template<UInt dim>
void setCauchyStressMatrix(const Matrix<Real> &S_t, Matrix<Real> &sigma)

Sets the stress matrix according to Bathe et al, IJNME, Vol 9, 353-386, 1975

template<UInt dim>
decltype(auto) stressToVoigt(const Matrix<Real> &stress)

write the stress tensor in the Voigt notation.

template<UInt dim>
decltype(auto) strainToVoigt(const Matrix<Real> &strain)

write the strain tensor in the Voigt notation.

template<UInt dim>
void voigtToStress(const Vector<Real> &voigt, Matrix<Real> &stress)

write a voigt vector to stress

template<UInt dim>
void gradUToF(const Matrix<Real> &grad_u, Matrix<Real> &F)
template<UInt dim>
decltype(auto) gradUToF(const Matrix<Real> &grad_u)
void rightCauchy(const Matrix<Real> &F, Matrix<Real> &C)
void leftCauchy(const Matrix<Real> &F, Matrix<Real> &B)
template<UInt dim>
void gradUToEpsilon(const Matrix<Real> &grad_u, Matrix<Real> &epsilon)
template<UInt dim>
decltype(auto) gradUToEpsilon(const Matrix<Real> &grad_u)
template<UInt dim>
void gradUToE(const Matrix<Real> &grad_u, Matrix<Real> &epsilon)
template<UInt dim>
decltype(auto) gradUToE(const Matrix<Real> &grad_u)
Real stressToVonMises(const Matrix<Real> &stress)
MaterialFactory &getFactory()

static method to reteive the material factory

template<typename T>
class akantu::InternalField : public akantu::ElementTypeMapArray<T>

class for the internal fields of materials to store values for each quadrature

Subclassed by akantu::CohesiveInternalField< T >, akantu::FacetInternalField< T >, akantu::RandomInternalField< T, BaseField, Generator >

Public Functions

InternalField(const ID &id, Material &material)
~InternalField() override
InternalField(const ID &id, Material &material, FEEngine &fem, const ElementTypeMapArray<UInt> &element_filter)

This constructor is only here to let cohesive elements compile.

InternalField(const ID &id, Material &material, UInt dim, FEEngine &fem, const ElementTypeMapArray<UInt> &element_filter)

More general constructor.

InternalField(const ID &id, const InternalField<T> &other)
InternalField operator=(const InternalField&) = delete
void setFEEngine(FEEngine &fe_engine)

function to reset the FEEngine for the internal field

void setElementKind(ElementKind element_kind)

function to reset the element kind for the internal

void initialize(UInt nb_component)

initialize the field to a given number of component

void initializeHistory()

activate the history of this field

void resize()

resize the arrays and set the new element to 0

void setDefaultValue(const T &v)

set the field to a given value v

void reset()

reset all the fields to the default value

void saveCurrentValues()

save the current values in the history

void restorePreviousValues()

restore the previous values from the history

void removeIntegrationPoints(const ElementTypeMapArray<UInt> &new_numbering)

remove the quadrature points corresponding to suppressed elements

void printself(std::ostream &stream, int = 0) const override

print the content

operator T() const

get the default value

FEEngine &getFEEngine()
const FEEngine &getFEEngine() const
decltype(auto) elementTypes(GhostType ghost_type = _not_ghost) const

get filter types for range loop

decltype(auto) filterTypes(GhostType ghost_type = _not_ghost) const

get filter types for range loop

const Array<UInt> &getFilter(ElementType type, GhostType ghost_type = _not_ghost) const

get the array for a given type of the element_filter

Array<T> &operator()(ElementType type, GhostType ghost_type = _not_ghost)

get the Array corresponding to the type en ghost_type specified

const Array<T> &operator()(ElementType type, GhostType ghost_type = _not_ghost) const
Array<T> &previous(ElementType type, GhostType ghost_type = _not_ghost)
const Array<T> &previous(ElementType type, GhostType ghost_type = _not_ghost) const
InternalField<T> &previous()
const InternalField<T> &previous() const
bool hasHistory() const

check if the history is used or not

ElementKind getElementKind() const

get the kind treated by the internal

UInt getNbComponent() const

return the number of components

UInt getSpatialDimension() const

return the spatial dimension corresponding to the internal element type loop filter

Synchronizers

template<class T>
class akantu::DataAccessor : public virtual akantu::DataAccessorBase

Public Functions

DataAccessor() = default
~DataAccessor() override = default
UInt getNbData(const Array<T> &elements, const SynchronizationTag &tag) const = 0

get the number of data to exchange for a given array of T (elements or dofs) and a given akantu::SynchronizationTag

void packData(CommunicationBuffer &buffer, const Array<T> &element, const SynchronizationTag &tag) const = 0

pack the data for a given array of T (elements or dofs) and a given akantu::SynchronizationTag

void unpackData(CommunicationBuffer &buffer, const Array<T> &element, const SynchronizationTag &tag) = 0

unpack the data for a given array of T (elements or dofs) and a given akantu::SynchronizationTag