CEPS  24.01
Cardiac ElectroPhysiology Simulator
NodeCoupling.cpp
Go to the documentation of this file.
1 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2  This file is part of CEPS.
3 
4  CEPS is free software: you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation, either version 3 of the License, or
7  (at your option) any later version.
8 
9  CEPS is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  GNU General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with CEPS (see file LICENSE at root of project).
16  If not, see <https://www.gnu.org/licenses/>.
17 
18 
19  Copyright 2019-2024 Inria, Universite de Bordeaux
20 
21  Authors, in alphabetical order:
22 
23  Pierre-Elliott BECUE, Florian CARO, Yves COUDIERE(*), Andjela DAVIDOVIC,
24  Charlie DOUANLA-LONTSI, Marc FUENTES, Mehdi JUHOOR, Michael LEGUEBE(*),
25  Pauline MIGERDITICHAN, Valentin PANNETIER(*), Nejib ZEMZEMI.
26  * : currently active authors
27 
28 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
32 
35 {
36 }
37 
40 {
41 }
42 
43 const std::array<CepsString,2>& NodeCoupling::
44 getMeshes() const
45 {
46  return m_meshes;
47 }
48 
50 getMesh(CepsUInt id) const
51 {
52  CEPS_ABORT_IF(id>1,"A node coupling has only two meshes, but getMesh(i) was called with i="<< id);
53  return m_meshes[id];
54 }
55 
57 getNodeCouples() const
58 {
59  return m_couples;
60 }
61 
63 isValidIn(const CepsVector<CepsString>& meshes)
64 {
65 
66  if (m_meshes[1].empty())
67  {
68  CEPS_WARNS("Node coupling must have exactly two meshes registered to be valid");
69  return false;
70  }
71 
72  return ceps::contains(meshes,m_meshes[0]) and ceps::contains(meshes,m_meshes[1]);
73 }
74 
76 addMesh(const CepsString& mesh)
77 {
78  if (m_meshes[0].empty())
79  m_meshes[0] = mesh;
80  else if (m_meshes[1].empty())
81  m_meshes[1] = mesh;
82  else
83  CEPS_ABORT("Cannot register more than two meshes in node coupling");
84  return;
85 }
86 
89 {
90  std::pair<CepsNodeGlobalIndex,CepsNodeGlobalIndex> p(id1,id2);
91  m_couples.insert(p);
92 }
#define CEPS_ABORT(message)
Stops the execution with a message. If testing is enabled, only throws a runtime_error.
#define CEPS_ABORT_IF(condition, message)
Stops the execution with a message if condition is true. If testing is enabled, only throws a runtime...
#define CEPS_WARNS(message)
Writes a warning in the debug log and in the terminal (stderr).
std::basic_string< CepsChar > CepsString
C++ format string.
Definition: CepsTypes.hpp:128
std::set< _Type, _Compare, _Alloc > CepsSet
C++ set.
Definition: CepsTypes.hpp:209
std::vector< _Type, _Alloc > CepsVector
C++ vector.
Definition: CepsTypes.hpp:155
bool CepsBool
Booleans.
Definition: CepsTypes.hpp:124
std::make_unsigned_t< CepsInt > CepsUInt
Unsigned version on CepsInt.
Definition: CepsTypes.hpp:109
CepsGlobalIndex CepsNodeGlobalIndex
Indices of nodes.
Definition: CepsTypes.hpp:224
void addCouple(const CepsNodeGlobalIndex &, const CepsNodeGlobalIndex &)
Adds an attribute.
const CepsSet< std::pair< CepsNodeGlobalIndex, CepsNodeGlobalIndex > > & getNodeCouples() const
Connection attributes.
virtual ~NodeCoupling()
Destructor.
std::array< CepsString, 2 > m_meshes
Connected meshes.
void addMesh(const CepsString &mesh)
Adds a mesh.
const CepsString & getMesh(CepsUInt id) const
Connected meshes.
const std::array< CepsString, 2 > & getMeshes() const
Connected meshes.
CepsSet< std::pair< CepsNodeGlobalIndex, CepsNodeGlobalIndex > > m_couples
couples of node indices
CepsBool isValidIn(const CepsVector< CepsString > &meshes)
Determines if coupling can be used within the provided.
NodeCoupling()
Default constructor.
CepsBool contains(const CepsVector< _Type, _Alloc > &vec, const _Type &item)
Tells if vectors contains a given item.
Definition: CepsVector.hpp:56