Stokhos Package Browser (Single Doxygen Collection)
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
src
epetra
Stokhos_ParallelData.cpp
Go to the documentation of this file.
1
// @HEADER
2
// ***********************************************************************
3
//
4
// Stokhos Package
5
// Copyright (2009) 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 Eric T. Phipps (etphipp@sandia.gov).
38
//
39
// ***********************************************************************
40
// @HEADER
41
42
#include "
Stokhos_ConfigDefs.h
"
43
#include "
Stokhos_ParallelData.hpp
"
44
#ifdef HAVE_MPI
45
#include "EpetraExt_MultiMpiComm.h"
46
#else
47
#include "EpetraExt_MultiSerialComm.h"
48
#endif
49
50
Stokhos::ParallelData::
51
ParallelData
(
52
const
Teuchos::RCP<
const
Stokhos::OrthogPolyBasis<int,double>
>& basis,
53
const
Teuchos::RCP<
const
Stokhos::Sparse3Tensor<int,double>
>& Cijk,
54
const
Teuchos::RCP<const Epetra_Comm>& globalComm,
55
Teuchos::ParameterList& params)
56
{
57
int
num_global_stoch_blocks = basis->size();
58
59
int
num_spatial_procs = params.get(
"Number of Spatial Processors"
, -1);
60
61
// Build multi-comm
62
globalMultiComm
=
63
Stokhos::buildMultiComm
(*globalComm, num_global_stoch_blocks,
64
num_spatial_procs);
65
66
// Get stochastic and spatial comm's
67
stoch_comm
=
Stokhos::getStochasticComm
(
globalMultiComm
);
68
spatial_comm
=
Stokhos::getSpatialComm
(
globalMultiComm
);
69
70
if
(Cijk != Teuchos::null) {
71
// Build Epetra Cijk
72
epetraCijk
=
73
Teuchos::rcp(
new
Stokhos::EpetraSparse3Tensor
(basis, Cijk,
74
globalMultiComm
));
75
76
// Rebalance graphs
77
bool
use_isorropia = params.get(
"Rebalance Stochastic Graph"
,
false
);
78
if
(use_isorropia)
79
epetraCijk
->rebalance(params.sublist(
"Isorropia"
));
80
81
// Transform to local indices
82
epetraCijk
->transformToLocal();
83
}
84
}
85
86
Stokhos::ParallelData::
87
ParallelData
(
88
const
Teuchos::RCP<
const
Stokhos::OrthogPolyBasis<int,double>
>& basis,
89
const
Teuchos::RCP<
const
Stokhos::Sparse3Tensor<int,double>
>& Cijk,
90
const
Teuchos::RCP<const EpetraExt::MultiComm>& globalMultiComm_,
91
Teuchos::ParameterList& params) :
92
globalMultiComm
(globalMultiComm_)
93
{
94
// Get stochastic and spatial comm's
95
stoch_comm
=
Stokhos::getStochasticComm
(
globalMultiComm
);
96
spatial_comm
=
Stokhos::getSpatialComm
(
globalMultiComm
);
97
98
if
(Cijk != Teuchos::null) {
99
// Build Epetra Cijk
100
epetraCijk
=
101
Teuchos::rcp(
new
Stokhos::EpetraSparse3Tensor
(basis, Cijk,
102
globalMultiComm
));
103
104
// Rebalance graphs
105
bool
use_isorropia = params.get(
"Rebalance Stochastic Graph"
,
false
);
106
if
(use_isorropia)
107
epetraCijk
->rebalance(params.sublist(
"Isorropia"
));
108
109
// Transform to local indices
110
epetraCijk
->transformToLocal();
111
}
112
}
113
114
Teuchos::RCP<const EpetraExt::MultiComm>
115
Stokhos::buildMultiComm
(
const
Epetra_Comm
& globalComm,
116
int
num_global_stochastic_blocks,
117
int
num_spatial_procs)
118
{
119
Teuchos::RCP<const EpetraExt::MultiComm> globalMultiComm;
120
121
#ifdef HAVE_MPI
122
if
(num_spatial_procs == -1) {
123
// By default, use all procs for spatial parallelism
124
//MPI_Comm_size(MPI_COMM_WORLD, &num_spatial_procs);
125
num_spatial_procs = globalComm.
NumProc
();
126
}
127
const
Epetra_MpiComm
& globalMpiComm =
128
dynamic_cast<
const
Epetra_MpiComm
&
>
(globalComm);
129
globalMultiComm =
130
Teuchos::rcp(
new
EpetraExt::MultiMpiComm(globalMpiComm.
Comm
(),
131
num_spatial_procs,
132
num_global_stochastic_blocks,
133
Teuchos::VERB_NONE));
134
#else
135
globalMultiComm =
136
Teuchos::rcp(
new
EpetraExt::MultiSerialComm(num_global_stochastic_blocks));
137
#endif
138
139
return
globalMultiComm;
140
}
141
142
Teuchos::RCP<const Epetra_Comm>
143
Stokhos::getSpatialComm
(
144
const
Teuchos::RCP<const EpetraExt::MultiComm>& globalMultiComm)
145
{
146
return
Teuchos::rcp(&(globalMultiComm->SubDomainComm()),
false
);
147
}
148
149
Teuchos::RCP<const Epetra_Comm>
150
Stokhos::getStochasticComm
(
151
const
Teuchos::RCP<const EpetraExt::MultiComm>& globalMultiComm)
152
{
153
return
Teuchos::rcp(&(globalMultiComm->TimeDomainComm()),
false
);
154
}
Stokhos_ConfigDefs.h
Stokhos_ParallelData.hpp
Epetra_Comm
Epetra_Comm::NumProc
virtual int NumProc() const=0
Epetra_MpiComm
Epetra_MpiComm::Comm
MPI_Comm Comm() const
Stokhos::EpetraSparse3Tensor
Definition
Stokhos_EpetraSparse3Tensor.hpp:55
Stokhos::OrthogPolyBasis
Abstract base class for multivariate orthogonal polynomials.
Definition
Stokhos_OrthogPolyBasis.hpp:74
Stokhos::ParallelData::epetraCijk
Teuchos::RCP< Stokhos::EpetraSparse3Tensor > epetraCijk
Epetra Cijk.
Definition
Stokhos_ParallelData.hpp:102
Stokhos::ParallelData::ParallelData
ParallelData(const Teuchos::RCP< const Stokhos::OrthogPolyBasis< int, double > > &basis, const Teuchos::RCP< const Stokhos::Sparse3Tensor< int, double > > &Cijk, const Teuchos::RCP< const Epetra_Comm > &globalComm, Teuchos::ParameterList ¶ms)
Constructor.
Definition
Stokhos_ParallelData.cpp:51
Stokhos::ParallelData::stoch_comm
Teuchos::RCP< const Epetra_Comm > stoch_comm
Stochastic comm.
Definition
Stokhos_ParallelData.hpp:96
Stokhos::ParallelData::globalMultiComm
Teuchos::RCP< const EpetraExt::MultiComm > globalMultiComm
Multi-comm.
Definition
Stokhos_ParallelData.hpp:93
Stokhos::ParallelData::spatial_comm
Teuchos::RCP< const Epetra_Comm > spatial_comm
Spatial comm.
Definition
Stokhos_ParallelData.hpp:99
Stokhos::Sparse3Tensor
Data structure storing a sparse 3-tensor C(i,j,k) in a a compressed format.
Definition
Stokhos_Sparse3Tensor.hpp:56
Stokhos::getStochasticComm
Teuchos::RCP< const Epetra_Comm > getStochasticComm(const Teuchos::RCP< const EpetraExt::MultiComm > &globalMultiComm)
Definition
Stokhos_ParallelData.cpp:150
Stokhos::getSpatialComm
Teuchos::RCP< const Epetra_Comm > getSpatialComm(const Teuchos::RCP< const EpetraExt::MultiComm > &globalMultiComm)
Definition
Stokhos_ParallelData.cpp:143
Stokhos::buildMultiComm
Teuchos::RCP< const EpetraExt::MultiComm > buildMultiComm(const Epetra_Comm &globalComm, int num_global_stochastic_blocks, int num_spatial_procs=-1)
Definition
Stokhos_ParallelData.cpp:115
Generated by
1.17.0