Alien  1.3.0
Developer documentation
Loading...
Searching...
No Matches
DoKDirectMatrixBuilder.h
1/*
2 * Copyright 2021 IFPEN-CEA
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *
16 * SPDX-License-Identifier: Apache-2.0
17 */
18
19#ifndef ALIEN_DOKDIRECTMATRIXBUILDER_H
20#define ALIEN_DOKDIRECTMATRIXBUILDER_H
21
22#include <optional>
23
24#include <alien/move/AlienMoveSemanticExport.h>
25#include <alien/utils/Precomp.h>
26
27#include <alien/move/data/MatrixData.h>
28
29#include <alien/kernels/dok/BaseDoKDirectMatrixBuilder.h>
30
31namespace Alien::Move
32{
33class ALIEN_MOVESEMANTIC_EXPORT DoKDirectMatrixBuilder
34{
35 public:
36 explicit DoKDirectMatrixBuilder(MatrixData&& self)
37 : m_data(std::move(self))
38 {
39 m_builder = std::make_unique<Alien::Common::BaseDoKDirectMatrixBuilder>(Alien::Common::BaseDoKDirectMatrixBuilder(m_data));
40 }
41 virtual ~DoKDirectMatrixBuilder() = default;
42
43 DoKDirectMatrixBuilder(const DoKDirectMatrixBuilder&) = delete;
44 DoKDirectMatrixBuilder& operator=(const DoKDirectMatrixBuilder&) = delete;
45 DoKDirectMatrixBuilder(DoKDirectMatrixBuilder&&) = delete;
46 DoKDirectMatrixBuilder& operator=(DoKDirectMatrixBuilder&&) = delete;
47
48 std::optional<Arccore::Real> contribute(Arccore::Integer row, Arccore::Integer col, Arccore::Real value)
49 {
50 if (!m_builder) {
51 return std::nullopt;
52 }
53
54 return m_builder->contribute(row, col, value);
55 }
56
57 MatrixData&& release()
58 {
59 m_builder->assemble();
60 m_builder.reset(nullptr);
61 return std::move(m_data);
62 }
63
64 private:
65 MatrixData m_data;
66 std::unique_ptr<Alien::Common::BaseDoKDirectMatrixBuilder> m_builder;
67};
68} // namespace Alien::Move
69#endif //ALIEN_DOKDIRECTMATRIXBUILDER_H
Algebraic Matrix with internal multi-representation object.
Definition MatrixData.h:40