Attention une mise à jour du service Gitlab va être effectuée le mardi 30 novembre entre 17h30 et 18h00. Cette mise à jour va générer une interruption du service dont nous ne maîtrisons pas complètement la durée mais qui ne devrait pas excéder quelques minutes. Cette mise à jour intermédiaire en version 14.0.12 nous permettra de rapidement pouvoir mettre à votre disposition une version plus récente.

GlobalMatrix.cpp 2.18 KB
Newer Older
1 2
//! \file 
//
3 4 5 6 7 8 9 10
//
//  GlobalMatrix.cpp
//  HappyHeart
//
//  Created by Sebastien Gilles on 27/04/15.
//  Copyright (c) 2015 Inria. All rights reserved.
//

11 12
#include <algorithm>

13 14 15 16 17
#ifndef NDEBUG
# include <iostream>
#endif // NDEBUG


18 19 20
#include "HappyHeart/Utilities/Containers/Print.hpp" //\todo #820 DEV
#include "HappyHeart/Utilities/Exceptions/Exception.hpp"
#include "HappyHeart/Utilities/Exceptions/PrintAndAbort.hpp"
21

22
#include "HappyHeart/ThirdParty/Wrappers/Petsc/Matrix/MatrixPattern.hpp"
23

24 25
#include "HappyHeart/Core/LinearAlgebra/GlobalMatrix.hpp"
#include "HappyHeart/Core/NumberingSubset/NumberingSubset.hpp"
26 27 28 29 30 31


namespace HappyHeart
{
    
    
32 33
    GlobalMatrix::GlobalMatrix(const NumberingSubset& row_numbering_subset,
                               const NumberingSubset& col_numbering_subset)
34
    : Crtp::NumberingSubsetForMatrix<GlobalMatrix>(row_numbering_subset, col_numbering_subset)
35 36 37
    { }
    
    
38
    GlobalMatrix::GlobalMatrix(const GlobalMatrix& rhs)
39 40
    : petsc_parent(rhs),
    numbering_subset_parent(rhs)
41 42 43 44 45
    { }
    
    
    void Swap(GlobalMatrix& A, GlobalMatrix& B)
    {
46
        // We swap the content of two matrices that share the same numbering subsets.
47 48
        assert(A.GetColNumberingSubset() == B.GetColNumberingSubset());
        assert(A.GetRowNumberingSubset() == B.GetRowNumberingSubset());
49
        
50
        using parent = GlobalMatrix::petsc_parent;
51
        
52
        Swap(static_cast<parent&>(A), static_cast<parent&>(B));
53
    }
54 55
    
    
56
    # ifndef NDEBUG
57 58 59 60 61 62
    void AssertSameNumberingSubset(const GlobalMatrix& matrix1,
                                   const GlobalMatrix& matrix2)
    {
        assert(matrix1.GetRowNumberingSubset() == matrix2.GetRowNumberingSubset());
        assert(matrix1.GetColNumberingSubset() == matrix2.GetColNumberingSubset());
    }
63 64 65 66 67 68 69 70 71
    
    
    void PrintNumberingSubset(std::string&& matrix_name,
                              const GlobalMatrix& matrix)
    {
        std::cout << "Numbering subsets for matrix '" << matrix_name << "': row -> "
        << matrix.GetRowNumberingSubset().GetUniqueId() << " and col -> "
        << matrix.GetColNumberingSubset().GetUniqueId() << std::endl;
    }
72
    # endif // NDEBUG
73

74
    
75
} // namespace HappyHeart