Loading...
Searching...
No Matches
stencil_solver.tpp
54DiscretizationStencilProxyBaseStorage<stencil_t, stencil_container_t>::DiscretizationStencilProxyBaseStorage(const stencil_container_t *stencils, int stride)
66DiscretizationStencilProxyStorage<stencil_t, stencil_container_t>::DiscretizationStencilProxyStorage(const stencil_container_t *stencils)
78{
89const stencil_t & DiscretizationStencilProxyStorage<stencil_t, stencil_container_t>::at(long rowIndex) const
101const stencil_t & DiscretizationStencilProxyStorage<stencil_t, stencil_container_t>::rawAt(std::size_t rowRawIndex) const
114const stencil_t & DiscretizationStencilProxyStorage<stencil_t, stencil_container_t>::at(long blockIndex, int componentIdx) const
127const stencil_t & DiscretizationStencilProxyStorage<stencil_t, stencil_container_t>::rawAt(std::size_t blockRawIndex, int componentIdx) const
130}
138DiscretizationStencilProxyStorage<stencil_t, PiercedStorage<stencil_t>>::DiscretizationStencilProxyStorage(const PiercedStorage<stencil_t> *stencils)
139 : DiscretizationStencilProxyBaseStorage<stencil_t, PiercedStorage<stencil_t>>(stencils, stencils->getFieldCount())
140{
149std::size_t DiscretizationStencilProxyStorage<stencil_t, PiercedStorage<stencil_t>>::size() const
150{
152}
161const stencil_t & DiscretizationStencilProxyStorage<stencil_t, PiercedStorage<stencil_t>>::at(long rowIndex) const
173const stencil_t & DiscretizationStencilProxyStorage<stencil_t, PiercedStorage<stencil_t>>::rawAt(std::size_t rowRawIndex) const
186const stencil_t & DiscretizationStencilProxyStorage<stencil_t, PiercedStorage<stencil_t>>::at(long blockIndex, int componentIdx) const
199const stencil_t & DiscretizationStencilProxyStorage<stencil_t, PiercedStorage<stencil_t>>::rawAt(std::size_t blockRawIndex, int componentIdx) const
200{
202}
222DiscretizationStencilSolverAssembler<stencil_t, solver_kernel_t>::DiscretizationStencilSolverAssembler(const stencil_container_t *stencils,
224 : DiscretizationStencilSolverAssembler(MPI_COMM_SELF, false, stencils, std::forward<AssemblerKernelArgs>(assemblerKernelArgs)...)
239DiscretizationStencilSolverAssembler<stencil_t, solver_kernel_t>::DiscretizationStencilSolverAssembler(MPI_Comm communicator, bool partitioned,
243 std::unique_ptr<DiscretizationStencilStorageInterface<stencil_t>>(new DiscretizationStencilProxyStorage<stencil_t, stencil_container_t>(stencils)),
245{
257DiscretizationStencilSolverAssembler<stencil_t, solver_kernel_t>::DiscretizationStencilSolverAssembler(const stencil_container_t *stencils,
258 AssemblerKernelArgs&&... assemblerKernelArgs)
259 : DiscretizationStencilSolverAssembler(std::unique_ptr<DiscretizationStencilStorageInterface<stencil_t>>(new DiscretizationStencilProxyStorage<stencil_t, stencil_container_t>(stencils)),
260 std::forward<AssemblerKernelArgs>(assemblerKernelArgs)...)
262}
275DiscretizationStencilSolverAssembler<stencil_t, solver_kernel_t>::DiscretizationStencilSolverAssembler(std::unique_ptr<DiscretizationStencilStorageInterface<stencil_t>> &&stencils,
277 : DiscretizationStencilSolverAssembler(MPI_COMM_SELF, false, std::move(stencils), std::forward<AssemblerKernelArgs>(assemblerKernelArgs)...)
292DiscretizationStencilSolverAssembler<stencil_t, solver_kernel_t>::DiscretizationStencilSolverAssembler(MPI_Comm communicator, bool partitioned,
295 : DiscretizationStencilSolverAssembler(communicator, partitioned, std::forward<AssemblerKernelArgs>(assemblerKernelArgs)...)
306DiscretizationStencilSolverAssembler<stencil_t, solver_kernel_t>::DiscretizationStencilSolverAssembler(std::unique_ptr<DiscretizationStencilStorageInterface<stencil_t>> &&stencils,
308 : DiscretizationStencilSolverAssembler(std::forward<AssemblerKernelArgs>(assemblerKernelArgs)...)
326DiscretizationStencilSolverAssembler<stencil_t, solver_kernel_t>::DiscretizationStencilSolverAssembler(AssemblerKernelArgs&&... assemblerKernelArgs)
327 : DiscretizationStencilSolverAssembler(MPI_COMM_SELF, false, std::forward<AssemblerKernelArgs>(assemblerKernelArgs)...)
341DiscretizationStencilSolverAssembler<stencil_t, solver_kernel_t>::DiscretizationStencilSolverAssembler(MPI_Comm communicator, bool partitioned,
356DiscretizationStencilSolverAssembler<stencil_t, solver_kernel_t>::DiscretizationStencilSolverAssembler(AssemblerKernelArgs&&... assemblerKernelArgs)
380const MPI_Comm & DiscretizationStencilSolverAssembler<stencil_t, solver_kernel_t>::getCommunicator() const
392typename DiscretizationStencilSolverAssembler<stencil_t, solver_kernel_t>::assembly_options_type DiscretizationStencilSolverAssembler<stencil_t, solver_kernel_t>::getOptions() const
415template<typename W, typename V, std::size_t D, typename std::enable_if<std::is_same<std::array<V, D>, W>::value>::type *>
418 setBlockSize(sizeof(typename StencilVector::weight_type) / sizeof(typename StencilVector::weight_type::value_type));
433template<typename W, typename V, typename std::enable_if<std::is_same<std::vector<V>, W>::value>::type *>
470 throw std::runtime_error("The stencils constant should have the same size of the stencil weights.");
493void DiscretizationStencilSolverAssembler<stencil_t, solver_kernel_t>::setStencils(std::unique_ptr<DiscretizationStencilStorageInterface<stencil_t>> &&stencils)
514void DiscretizationStencilSolverAssembler<stencil_t, solver_kernel_t>::setMatrixSizes(long nRows, long nCols)
775long DiscretizationStencilSolverAssembler<stencil_t, solver_kernel_t>::getRowNZCount(long rowIndex) const
806void DiscretizationStencilSolverAssembler<stencil_t, solver_kernel_t>::getRowPattern(long rowIndex, ConstProxyVector<long> *pattern) const
822void DiscretizationStencilSolverAssembler<stencil_t, solver_kernel_t>::getPattern(const stencil_t &stencil, ConstProxyVector<long> *pattern) const
844void DiscretizationStencilSolverAssembler<stencil_t, solver_kernel_t>::getRowValues(long rowIndex, ConstProxyVector<double> *values) const
863void DiscretizationStencilSolverAssembler<stencil_t, solver_kernel_t>::getValues(const stencil_t &stencil, ConstProxyVector<double> *values) const
878void DiscretizationStencilSolverAssembler<stencil_t, solver_kernel_t>::getValues(const stencil_t &stencil, ConstProxyVector<double> *values) const
894 int valuesOffset = linearalgebra::linearIndexRowMajor(i, m_blockSize * k, m_blockSize, nRowValues);
911void DiscretizationStencilSolverAssembler<stencil_t, solver_kernel_t>::getRowData(long rowIndex, ConstProxyVector<long> *pattern, ConstProxyVector<double> *values) const
932void DiscretizationStencilSolverAssembler<stencil_t, solver_kernel_t>::getRowConstant(long rowIndex, bitpit::ConstProxyVector<double> *constant) const
951void DiscretizationStencilSolverAssembler<stencil_t, solver_kernel_t>::getConstant(const stencil_t &stencil, bitpit::ConstProxyVector<double> *constant) const
970void DiscretizationStencilSolverAssembler<stencil_t, solver_kernel_t>::getConstant(const stencil_t &stencil, bitpit::ConstProxyVector<double> *constant) const
993const stencil_t & DiscretizationStencilSolverAssembler<stencil_t, solver_kernel_t>::getRowStencil(long rowIndex) const
1027void DiscretizationStencilSolver<stencil_t, solver_kernel_t>::assembly(const stencil_container_t &stencils)
1041void DiscretizationStencilSolver<stencil_t, solver_kernel_t>::assembly(MPI_Comm communicator, bool partitioned, const stencil_container_t &stencils)
1050void DiscretizationStencilSolver<stencil_t, solver_kernel_t>::assembly(const stencil_container_t &stencils)
1055 DiscretizationStencilSolverAssembler<stencil_t, solver_kernel_t> assembler(communicator, partitioned, &stencils);
1061 solver_kernel_t::template assembly<DiscretizationStencilSolver<stencil_t, solver_kernel_t>>(assembler, NaturalSystemMatrixOrdering());
1073void DiscretizationStencilSolver<stencil_t, solver_kernel_t>::assembly(const Assembler &assembler)
1075 solver_kernel_t::template assembly<DiscretizationStencilSolver<stencil_t, solver_kernel_t>>(assembler, NaturalSystemMatrixOrdering());
1084void DiscretizationStencilSolver<stencil_t, solver_kernel_t>::matrixAssembly(const Assembler &assembler)
1110void DiscretizationStencilSolver<stencil_t, solver_kernel_t>::matrixUpdate(long nRows, const long *rows, const Assembler &assembler)
1129void DiscretizationStencilSolver<stencil_t, solver_kernel_t>::update(const stencil_container_t &stencils)
1145void DiscretizationStencilSolver<stencil_t, solver_kernel_t>::update(const std::vector<long> &rows, const stencil_container_t &stencils)
1164void DiscretizationStencilSolver<stencil_t, solver_kernel_t>::update(std::size_t nRows, const long *rows, const stencil_container_t &stencils)
1167 DiscretizationStencilSolverAssembler<stencil_t, solver_kernel_t> assembler(this->getCommunicator(), this->isPartitioned(), &stencils);
1173 solver_kernel_t::template update<DiscretizationStencilSolver<stencil_t, solver_kernel_t>>(nRows, rows, assembler);
1188void DiscretizationStencilSolver<stencil_t, solver_kernel_t>::update(long nRows, const long *rows, const Assembler &assembler)
1190 solver_kernel_t::template update<DiscretizationStencilSolver<stencil_t, solver_kernel_t>>(nRows, rows, assembler);
1199void DiscretizationStencilSolver<stencil_t, solver_kernel_t>::assembleConstants(const Assembler &assembler)
1221void DiscretizationStencilSolver<stencil_t, solver_kernel_t>::updateConstants(std::size_t nRows, const long *rows,
The DiscretizationStencilProxyBaseStorage class defines a proxy for stencil storage.
Definition stencil_solver.hpp:60
DiscretizationStencilProxyBaseStorage(const stencil_container_t *stencils, int stride)
Definition stencil_solver.tpp:54
const stencil_t & rawAt(std::size_t rowRawIndex) const override
Definition stencil_solver.tpp:173
const stencil_t & at(long rowIndex) const override
Definition stencil_solver.tpp:161
DiscretizationStencilProxyStorage(const PiercedStorage< stencil_t > *stencils)
Definition stencil_solver.tpp:138
const stencil_t & rawAt(std::size_t rowRawIndex) const override
Definition stencil_solver.tpp:101
const stencil_t & at(long rowIndex) const override
Definition stencil_solver.tpp:89
std::size_t size() const override
Definition stencil_solver.tpp:77
DiscretizationStencilProxyStorage(const stencil_container_t *stencils)
Definition stencil_solver.tpp:66
The DiscretizationStencilSolverAssembler class defines an assembler for building the stencil solver.
Definition stencil_solver.hpp:103
long getRowNZCount(long rowIndex) const override
Definition stencil_solver.tpp:775
virtual void getRowConstant(long rowIndex, bitpit::ConstProxyVector< double > *constant) const
Definition stencil_solver.tpp:932
void getRowValues(long rowIndex, ConstProxyVector< double > *values) const override
Definition stencil_solver.tpp:844
void getRowPattern(long rowIndex, ConstProxyVector< long > *pattern) const override
Definition stencil_solver.tpp:806
long getRowGlobalCount() const override
Definition stencil_solver.tpp:661
void setStencils(std::unique_ptr< DiscretizationStencilStorageInterface< stencil_t > > &&stencils)
Definition stencil_solver.tpp:493
long getColElementCount() const override
Definition stencil_solver.tpp:643
long getColGlobalElementOffset() const override
Definition stencil_solver.tpp:760
int getBlockSize() const override
Definition stencil_solver.tpp:583
long getMaxRowNZCount() const override
Definition stencil_solver.tpp:789
DiscretizationStencilSolverAssembler(const stencil_container_t *stencils, AssemblerKernelArgs &&... assemblerKernelArgs)
Definition stencil_solver.tpp:222
long getRowGlobalElementCount() const override
Definition stencil_solver.tpp:690
long getRowElementCount() const override
Definition stencil_solver.tpp:627
void getValues(const stencil_t &stencil, ConstProxyVector< double > *values) const
Definition stencil_solver.tpp:863
long getColCount() const override
Definition stencil_solver.tpp:613
void setMatrixSizes()
Definition stencil_solver.tpp:502
void getRowData(long rowIndex, ConstProxyVector< long > *pattern, ConstProxyVector< double > *values) const override
Definition stencil_solver.tpp:911
long getRowGlobalOffset() const override
Definition stencil_solver.tpp:719
long getRowGlobalElementOffset() const override
Definition stencil_solver.tpp:744
long getColGlobalOffset() const override
Definition stencil_solver.tpp:730
long getRowCount() const override
Definition stencil_solver.tpp:598
const MPI_Comm & getCommunicator() const override
Definition stencil_solver.tpp:380
long getColGlobalElementCount() const override
Definition stencil_solver.tpp:706
void getPattern(const stencil_t &stencil, ConstProxyVector< long > *pattern) const
Definition stencil_solver.tpp:822
assembly_options_type getOptions() const override
Definition stencil_solver.tpp:392
virtual const stencil_t & getRowStencil(long rowIndex) const
Definition stencil_solver.tpp:993
bool isPartitioned() const override
Definition stencil_solver.tpp:369
void getConstant(const stencil_t &stencil, bitpit::ConstProxyVector< double > *constant) const
Definition stencil_solver.tpp:951
void setMaximumRowNZ()
Definition stencil_solver.tpp:556
void setBlockSize()
Definition stencil_solver.tpp:406
long getColGlobalCount() const override
Definition stencil_solver.tpp:676
void matrixAssembly(const Assembler &assembler)
Definition stencil_solver.tpp:1084
void assembleConstants(const Assembler &assembler)
Definition stencil_solver.tpp:1199
void matrixUpdate(long nRows, const long *rows, const Assembler &assembler)
Definition stencil_solver.tpp:1110
void assembly(const stencil_container_t &stencils)
Definition stencil_solver.tpp:1027
void update(const stencil_container_t &stencils)
Definition stencil_solver.tpp:1129
void updateConstants(std::size_t nRows, const long *rows, const Assembler &assembler)
Definition stencil_solver.tpp:1221
The DiscretizationStencilStorageInterface class defines the interface for stencil storage.
Definition stencil_solver.hpp:41
The NaturalSystemMatrixOrdering class defines allows to use a matrix natural ordering.
Definition system_solvers_large.hpp:105
Metafunction for generating a pierced storage.
Definition piercedStorage.hpp:146
static constexpr __PXV_POINTER__ INTERNAL_STORAGE
Definition proxyVector.hpp:359
container_type::pointer storage_pointer
Definition proxyVector.hpp:335
__PXV_STORAGE_POINTER__ storedData() noexcept
Definition proxyVector.tpp:814
void set(__PXV_POINTER__ data, std::size_t size)
Definition proxyVector.tpp:732
bool isPartitioned() const
Definition system_solvers_large.cpp:1210
virtual int getBlockSize() const
Definition system_solvers_large.cpp:1022
void restoreRHSRawPtr(double *raw_rhs)
Definition system_solvers_large.cpp:1887
const MPI_Comm & getCommunicator() const
Definition system_solvers_large.cpp:3515
int linearIndexRowMajor(int row, int col, int nRows, int nCols)
Definition matrix_utilities.cpp:65
