Thyra
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
core
src
support
operator_vector
adapter_support
Thyra_SpmdLocalDataAccess_def.hpp
1
// @HEADER
2
// ***********************************************************************
3
//
4
// Thyra: Interfaces and Support for Abstract Numerical Algorithms
5
// Copyright (2004) Sandia Corporation
6
//
7
// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8
// license for use of this work by or on behalf of the U.S. Government.
9
//
10
// Redistribution and use in source and binary forms, with or without
11
// modification, are permitted provided that the following conditions are
12
// met:
13
//
14
// 1. Redistributions of source code must retain the above copyright
15
// notice, this list of conditions and the following disclaimer.
16
//
17
// 2. Redistributions in binary form must reproduce the above copyright
18
// notice, this list of conditions and the following disclaimer in the
19
// documentation and/or other materials provided with the distribution.
20
//
21
// 3. Neither the name of the Corporation nor the names of the
22
// contributors may be used to endorse or promote products derived from
23
// this software without specific prior written permission.
24
//
25
// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
//
37
// Questions? Contact Roscoe A. Bartlett (bartlettra@ornl.gov)
38
//
39
// ***********************************************************************
40
// @HEADER
41
42
#ifndef THYRA_SPMD_LOCAL_DATA_ACCESS_DEF_HPP
43
#define THYRA_SPMD_LOCAL_DATA_ACCESS_DEF_HPP
44
45
46
#include "Thyra_SpmdLocalDataAccess_decl.hpp"
47
#include "Thyra_ProductVectorBase.hpp"
48
#include "Thyra_ProductVectorSpaceBase.hpp"
49
#include "Thyra_SpmdVectorBase.hpp"
50
#include "Thyra_SpmdMultiVectorBase.hpp"
51
52
53
template
<
class
Scalar>
54
RTOpPack::SubVectorView<Scalar>
55
Thyra::getNonconstLocalSubVectorView
(
56
const
RCP
<
VectorBase<Scalar>
> &vec)
57
{
58
const
RCP<SpmdVectorBase<Scalar>
> spmd_v =
59
Teuchos::rcp_dynamic_cast<SpmdVectorBase<Scalar> >(vec);
60
if
(nonnull(spmd_v)) {
61
return
spmd_v->getNonconstLocalSubVector();
62
}
63
const
RCP<ProductVectorBase<Scalar>
> p_v =
64
Teuchos::rcp_dynamic_cast<ProductVectorBase<Scalar> >(vec,
true
);
65
TEUCHOS_TEST_FOR_EXCEPTION
(
66
!(p_v->productSpace()->numBlocks() == 1),
67
std::logic_error,
68
"Error, the function getNonconstLocalSubVectorView() can only return"
69
" a contiguous view of local SPMD data from a product vector with a single"
70
" block (which also must be able to give up a product view."
);
71
return
getNonconstLocalSubVectorView<Scalar>
(p_v->getNonconstVectorBlock(0));
72
}
73
74
75
template
<
class
Scalar>
76
RTOpPack::ConstSubVectorView<Scalar>
77
Thyra::getLocalSubVectorView
(
78
const
RCP
<
const
VectorBase<Scalar>
> &vec)
79
{
80
const
RCP<const SpmdVectorBase<Scalar>
> spmd_v =
81
Teuchos::rcp_dynamic_cast<const SpmdVectorBase<Scalar> >(vec);
82
if
(nonnull(spmd_v)) {
83
return
spmd_v->getLocalSubVector();
84
}
85
const
RCP<const ProductVectorBase<Scalar>
> p_v =
86
Teuchos::rcp_dynamic_cast<const ProductVectorBase<Scalar> >(vec,
true
);
87
TEUCHOS_TEST_FOR_EXCEPTION
(
88
!(p_v->productSpace()->numBlocks() == 1),
89
std::logic_error,
90
"Error, the function getLocalSubVectorView() can only return"
91
" a contiguous view of local SPMD data from a product vector with a single"
92
" block (which also must be able to give up a product view."
);
93
return
getLocalSubVectorView<Scalar>
(p_v->getVectorBlock(0));
94
}
95
96
97
template
<
class
Scalar>
98
RTOpPack::SubMultiVectorView<Scalar>
99
Thyra::getNonconstLocalSubMultiVectorView
(
100
const
RCP
<
MultiVectorBase<Scalar>
> &multivec)
101
{
102
const
RCP<SpmdMultiVectorBase<Scalar>
> spmd_mv =
103
Teuchos::rcp_dynamic_cast<SpmdMultiVectorBase<Scalar> >(multivec);
104
if
(nonnull(spmd_mv)) {
105
return
spmd_mv->getNonconstLocalSubMultiVector();
106
}
107
const
RCP<ProductMultiVectorBase<Scalar>
> p_mv =
108
Teuchos::rcp_dynamic_cast<ProductMultiVectorBase<Scalar> >(multivec,
true
);
109
TEUCHOS_TEST_FOR_EXCEPTION
(
110
!(p_mv->productSpace()->numBlocks() == 1),
111
std::logic_error,
112
"Error, the function getNonconstLocalSubVectorView() can only return"
113
" a contiguous view of local SPMD data from a product vector with a single"
114
" block (which also must be able to give up a product view."
);
115
return
getNonconstLocalSubMultiVectorView<Scalar>
(p_mv->getNonconstMultiVectorBlock(0));
116
}
117
118
119
template
<
class
Scalar>
120
RTOpPack::ConstSubMultiVectorView<Scalar>
121
Thyra::getLocalSubMultiVectorView
(
122
const
RCP
<
const
MultiVectorBase<Scalar>
> &multivec)
123
{
124
const
RCP<const SpmdMultiVectorBase<Scalar>
> spmd_mv =
125
Teuchos::rcp_dynamic_cast<const SpmdMultiVectorBase<Scalar> >(multivec);
126
if
(nonnull(spmd_mv)) {
127
return
spmd_mv->getLocalSubMultiVector();
128
}
129
const
RCP<const ProductMultiVectorBase<Scalar>
> p_mv =
130
Teuchos::rcp_dynamic_cast<const ProductMultiVectorBase<Scalar> >(multivec,
true
);
131
TEUCHOS_TEST_FOR_EXCEPTION
(
132
!(p_mv->productSpace()->numBlocks() == 1),
133
std::logic_error,
134
"Error, the function getLocalSubVectorView() can only return"
135
" a contiguous view of local SPMD data from a product vector with a single"
136
" block (which also must be able to give up a product view."
);
137
return
getLocalSubMultiVectorView<Scalar>
(p_mv->getMultiVectorBlock(0));
138
}
139
140
141
//
142
// Explicit instantiation macro
143
//
144
145
146
#define THYRA_SPMD_LOCAL_DATA_ACCESS_INSTANT(SCALAR) \
147
\
148
template RTOpPack::SubVectorView<SCALAR> \
149
getNonconstLocalSubVectorView(const RCP<VectorBase<SCALAR> > &vec); \
150
\
151
template RTOpPack::ConstSubVectorView<SCALAR> \
152
getLocalSubVectorView(const RCP<const VectorBase<SCALAR> > &vec); \
153
\
154
template RTOpPack::SubMultiVectorView<SCALAR> \
155
getNonconstLocalSubMultiVectorView(const RCP<MultiVectorBase<SCALAR> > &vec); \
156
\
157
template RTOpPack::ConstSubMultiVectorView<SCALAR> \
158
getLocalSubMultiVectorView(const RCP<const MultiVectorBase<SCALAR> > &vec); \
159
160
161
#endif
// THYRA_SPMD_LOCAL_DATA_ACCESS_DEF_HPP
RTOpPack::ConstSubMultiVectorView
RTOpPack::ConstSubVectorView
RTOpPack::SubMultiVectorView
RTOpPack::SubVectorView
Teuchos::RCP
Thyra::MultiVectorBase
Interface for a collection of column vectors called a multi-vector.
Definition
Thyra_MultiVectorBase_decl.hpp:496
Thyra::VectorBase
Abstract interface for finite-dimensional dense vectors.
Definition
Thyra_VectorBase.hpp:147
TEUCHOS_TEST_FOR_EXCEPTION
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Thyra::getLocalSubMultiVectorView
RTOpPack::ConstSubMultiVectorView< Scalar > getLocalSubMultiVectorView(const RCP< const MultiVectorBase< Scalar > > &multivec)
Return a contiguous const semi-persisting view of the local process data of a MultiVectorBase object.
Definition
Thyra_SpmdLocalDataAccess_def.hpp:121
Thyra::getNonconstLocalSubVectorView
RTOpPack::SubVectorView< Scalar > getNonconstLocalSubVectorView(const RCP< VectorBase< Scalar > > &vec)
Return a contiguous non-const semi-persisting view of the local process data of a VectorBase object.
Definition
Thyra_SpmdLocalDataAccess_def.hpp:55
Thyra::getNonconstLocalSubMultiVectorView
RTOpPack::SubMultiVectorView< Scalar > getNonconstLocalSubMultiVectorView(const RCP< MultiVectorBase< Scalar > > &multivec)
Return a contiguous non-const semi-persisting view of the local process data of a MultiVectorBase obj...
Definition
Thyra_SpmdLocalDataAccess_def.hpp:99
Thyra::getLocalSubVectorView
RTOpPack::ConstSubVectorView< Scalar > getLocalSubVectorView(const RCP< const VectorBase< Scalar > > &vec)
Return a contiguous const semi-persisting view of the local process data of a VectorBase object.
Definition
Thyra_SpmdLocalDataAccess_def.hpp:77
Generated by
1.17.0