22#ifndef BELFEM_CL_SIMPLICIALCOMPLEX_HPP
23#define BELFEM_CL_SIMPLICIALCOMPLEX_HPP
47 uint mNumLoopsReduce = 0;
48 uint mNumLoopsCoreduce = 0;
261 return * mOriginalEdges ;
267 return mChainsMap( 0 ).size();
275 return mChainsMap( 1 ).size();
283 return mChainsMap( 2 ).size();
297 return mChainsMap( k ).size();
312 return mCochainsMap( k ).size();
324 auto & tMap = mCochainsMap( k ).map_data();
325 auto it = tMap.find( aID );
326 if ( it != tMap.end() )
345#ifdef PERFORMANCE_CHECK
347 tFile.open (
"Coreduce.txt",std::ios_base::app);
348 tFile << mNumLoopsCoreduce <<
" " << mCochainsMap(0).size()+mCochainsMap(1).size()+mCochainsMap(2).size()+mCochainsMap(3).size() <<
" \n";
350 bool tRemoved =
true;
354 mNumLoopsCoreduce+=1;
359 for (
auto it = tMap1.
begin(), next_it = it; it != tMap1.
end(); it = next_it)
364 if (it->second->get_boundary()->get_simplices_map().size() == 1)
367 index_t b = it->second->get_boundary()->get_simplices_map().begin()->first;
371 for(
const auto [tID2, tCoeff2]: tSimpMap0 )
373 if (tID2 != it->first )
375 tMap1(tID2)->get_boundary()->set_coefficient(b,0);
381 for(
const auto [tID2, tCoeff2]: tSimpMap1 )
383 mCochainsMap(p+2)(tID2)->get_boundary()->set_coefficient(a,0);
393#ifdef PERFORMANCE_CHECK
394 tFile << mNumLoopsCoreduce <<
" " << mCochainsMap(0).size()+mCochainsMap(1).size()+mCochainsMap(2).size()+mCochainsMap(3).size() <<
" \n";
397#ifdef PERFORMANCE_CHECK
A bounds-checked wrapper around std::vector.
Definition cl_Cell.hpp:45
Runtime-sized bitset; one bit per flag, packed into 64-bit words.
Definition cl_DynamicBitset.hpp:33
Hash map (unordered key-value).
Definition cl_Map.hpp:75
typename std::unordered_map< Key, Value >::const_iterator const_iterator
Definition cl_Map.hpp:83
auto end() const -> decltype(mMap.end())
Definition cl_Map.hpp:175
auto begin() const -> decltype(mMap.begin())
Definition cl_Map.hpp:169
Top-level container for all mesh entities.
Definition cl_Mesh.hpp:60
Formal sum of k-simplices (homology).
Definition cl_Chain.hpp:36
Cochain: a functional on chains (cohomology).
Definition cl_Cochain.hpp:37
void reduce_complexCCR()
Definition cl_SimplicialComplex.cpp:481
void pReduce(const uint p)
Definition cl_SimplicialComplex.cpp:696
Chain * get_kchain(const uint k, const index_t aID)
Definition cl_SimplicialComplex.cpp:1330
void pCoreduce(const uint p)
Definition cl_SimplicialComplex.hpp:338
void coreduce_complexPellikka()
Definition cl_SimplicialComplex.cpp:1264
Cell< Matrix< int > > createMatrixFromCoboundaryMap()
Definition cl_SimplicialComplex.cpp:1411
Cell< Matrix< int > > createMatrixFromBoundaryMap()
Definition cl_SimplicialComplex.cpp:1383
void pCocombine(const uint p)
Definition cl_SimplicialComplex.cpp:1024
Chain * boundary_of_kchain(const uint k, const index_t aID)
void coreduceOmit()
Definition cl_SimplicialComplex.cpp:1237
index_t number_of_ksimplices(const uint k) const
Definition cl_SimplicialComplex.hpp:289
void reduceOmit()
Definition cl_SimplicialComplex.cpp:940
void remove_kcochainFromMap(const uint k, const index_t aID)
Definition cl_SimplicialComplex.hpp:320
void reduce_complexPellikka()
Definition cl_SimplicialComplex.cpp:968
index_t number_of_0simplices() const
Definition cl_SimplicialComplex.hpp:265
Map< index_t, Chain * > get_kchainMap(const uint k)
Definition cl_SimplicialComplex.cpp:1352
void reduce_pair(const uint k, const index_t a, Map< index_t, Chain * >::const_iterator &bit, const int aCoeff)
Definition cl_SimplicialComplex.cpp:640
void reset()
Definition cl_SimplicialComplex.cpp:42
void create_complex(Mesh *aMesh, bool aPeriodicity)
Definition cl_SimplicialComplex.cpp:110
void coreduce_complexCCR()
Definition cl_SimplicialComplex.cpp:508
void remove_kchainFromMap(const uint k, const index_t aID)
Definition cl_SimplicialComplex.cpp:1320
Map< index_t, Cochain * > get_kcochainMap(const uint k)
Definition cl_SimplicialComplex.cpp:1359
Cochain * get_kcochain(const uint k, const index_t aID)
Definition cl_SimplicialComplex.cpp:1341
index_t number_of_2simplices() const
Definition cl_SimplicialComplex.hpp:281
index_t number_of_1simplices() const
Definition cl_SimplicialComplex.hpp:273
index_t number_of_kcosimplices(const uint k) const
Definition cl_SimplicialComplex.hpp:304
SimplicialComplex(Mesh *aMesh, bool aPeriodicity=false)
Definition cl_SimplicialComplex.cpp:24
void coreduce_complexCCR_old()
Definition cl_SimplicialComplex.cpp:587
void pCombine(const uint p)
Definition cl_SimplicialComplex.cpp:762
void print_kchains(const uint k)
Definition cl_SimplicialComplex.cpp:1442
void cocreate_kComplexField(const uint k, Mesh *aMesh, string aFieldName)
Definition cl_SimplicialComplex.cpp:1469
void pGeneralizedCocombine(const uint p)
Definition cl_SimplicialComplex.cpp:1120
void create_kComplexField(const uint k, Mesh *aMesh, string aFieldName)
Definition cl_SimplicialComplex.cpp:1452
void reduce_complexCCR_old()
Definition cl_SimplicialComplex.cpp:536
void reduce_complexPellikkaGeneralized()
Definition cl_SimplicialComplex.cpp:995
void pGeneralizedCombine(const uint p)
Definition cl_SimplicialComplex.cpp:859
void coreduce_complexPellikkaGeneralized()
Definition cl_SimplicialComplex.cpp:1292
void coreduce_pair(const uint k, const index_t a, Map< index_t, Cochain * >::const_iterator &bit, const int aCoeff)
Definition cl_SimplicialComplex.cpp:668
const DynamicBitset & original_edges() const
Definition cl_SimplicialComplex.hpp:259
Definition cl_EF_EdgeFunction.hpp:24
USER GUIDES:
Definition cl_Capacitor.cpp:16
unsigned int uint
Definition typedefs.hpp:30
uint32_t index_t
Definition typedefs.hpp:52