43 #include "EpetraExt_BlockMultiVector.h"
54 label(
"Stokhos Block Diagonal Operator"),
56 num_mp_blocks(num_mp_blocks_),
57 domain_base_map(domain_base_map_),
58 range_base_map(range_base_map_),
59 domain_mp_map(domain_mp_map_),
60 range_mp_map(range_mp_map_),
97 useTranspose = UseTheTranspose;
98 for (
int i=0; i<num_mp_blocks; i++)
99 (*block_ops)[i].SetUseTranspose(useTranspose);
110 input_base_map = range_base_map;
111 result_base_map = domain_base_map;
114 input_base_map = domain_base_map;
115 result_base_map = range_base_map;
117 EpetraExt::BlockMultiVector mp_input(
View, *input_base_map, Input);
118 EpetraExt::BlockMultiVector mp_result(
View, *result_base_map, Result);
119 for (
int i=0; i<num_mp_blocks; i++) {
120 (*block_ops)[i].Apply(*(mp_input.GetBlock(i)), *(mp_result.GetBlock(i)));
132 input_base_map = domain_base_map;
133 result_base_map = range_base_map;
136 input_base_map = range_base_map;
137 result_base_map = domain_base_map;
139 EpetraExt::BlockMultiVector mp_input(
View, *input_base_map, Input);
140 EpetraExt::BlockMultiVector mp_result(
View, *range_base_map, Result);
141 for (
int i=0; i<num_mp_blocks; i++) {
142 (*block_ops)[i].ApplyInverse(*(mp_input.GetBlock(i)),
143 *(mp_result.GetBlock(i)));
152 double product_nrm = 0.0;
153 for (
int i=0; i<num_mp_blocks; i++) {
154 double nrm = (*block_ops)[i].NormInf();
155 if (nrm > product_nrm)
166 return const_cast<char*>(label.c_str());
178 if (num_mp_blocks == 0)
180 return (*block_ops)[0].HasNormInf();
192 return *range_mp_map;
193 return *domain_mp_map;
200 return *domain_mp_map;
201 return *range_mp_map;