29 bool x_matches=
false, f_matches=
false, dxdt_matches=
false;
32 RCP<const VectorSpaceBase<ScalarT> > range = get_A()->range();
33 RCP<const VectorSpaceBase<ScalarT> > domain = get_A()->domain();
36 x_matches = range->isCompatible(*get_x()->space());
41 dxdt_matches = range->isCompatible(*get_dxdt()->space());
46 f_matches = range->isCompatible(*get_f()->space());
50 else if(get_x()!=null && get_dxdt()!=null) {
52 x_matches = get_x()->space()->isCompatible(*get_dxdt()->space());
53 dxdt_matches = x_matches;
56 f_matches = x_matches = dxdt_matches =
true;
59 return x_matches && dxdt_matches && f_matches;
67 using Thyra::PhysicallyBlockedLinearOpBase;
68 using Thyra::ProductVectorSpaceBase;
70 using Teuchos::rcp_dynamic_cast;
72 if(get_x()!=Teuchos::null) Thyra::assign<ScalarT>(x.ptr(),0.0);
73 if(get_dxdt()!=Teuchos::null) Thyra::assign<ScalarT>(get_dxdt().ptr(),0.0);
74 if(get_f()!=Teuchos::null) Thyra::assign<ScalarT>(get_f().ptr(),0.0);
75 if(get_A()!=Teuchos::null) {
76 RCP<PhysicallyBlockedLinearOpBase<ScalarT> > Amat
77 = rcp_dynamic_cast<PhysicallyBlockedLinearOpBase<ScalarT> >(get_A(),
true);
78 RCP<const ProductVectorSpaceBase<ScalarT> > range = Amat->productRange();
79 RCP<const ProductVectorSpaceBase<ScalarT> > domain = Amat->productDomain();
82 for(
int i=0;i<range->numBlocks();i++) {
83 for(
int j=0;j<domain->numBlocks();j++) {
84 RCP<LinearOpBase<ScalarT> > block = Amat->getNonconstBlock(i,j);
85 if(block!=Teuchos::null) {
86 RCP<Tpetra::Operator<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> > t_block =
87 rcp_dynamic_cast<Thyra::TpetraLinearOp<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >(block,
true)->getTpetraOperator();
89 RCP<const MapType> map_i = t_block->getRangeMap();
90 RCP<const MapType> map_j = t_block->getDomainMap();
92 RCP<Tpetra::CrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> > mat =
93 rcp_dynamic_cast<Tpetra::CrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >(t_block,
true);
100 const bool isFE = Teuchos::nonnull(
101 rcp_dynamic_cast<Tpetra::FECrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >(mat));
103 if(!isFE) mat->resumeFill();
104 mat->setAllToScalar(0.0);
105 if(!isFE) mat->fillComplete(map_j,map_i);
117 using Thyra::PhysicallyBlockedLinearOpBase;
118 using Thyra::ProductVectorSpaceBase;
120 using Teuchos::rcp_dynamic_cast;
122 if(get_A()!=Teuchos::null) {
123 RCP<PhysicallyBlockedLinearOpBase<ScalarT> > Amat
124 = rcp_dynamic_cast<PhysicallyBlockedLinearOpBase<ScalarT> >(get_A(),
true);
125 RCP<const ProductVectorSpaceBase<ScalarT> > range = Amat->productRange();
126 RCP<const ProductVectorSpaceBase<ScalarT> > domain = Amat->productDomain();
129 for(
int i=0;i<range->numBlocks();i++) {
130 for(
int j=0;j<domain->numBlocks();j++) {
131 RCP<LinearOpBase<ScalarT> > block = Amat->getNonconstBlock(i,j);
132 if(block!=Teuchos::null) {
133 RCP<Tpetra::Operator<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> > t_block =
134 rcp_dynamic_cast<Thyra::TpetraLinearOp<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >(block,
true)->getTpetraOperator();
137 RCP<const MapType> map_i = t_block->getRangeMap();
138 RCP<const MapType> map_j = t_block->getDomainMap();
140 RCP<Tpetra::CrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> > mat =
141 rcp_dynamic_cast<Tpetra::CrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >(t_block,
true);
144 const bool isFE = Teuchos::nonnull(
145 rcp_dynamic_cast<Tpetra::FECrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >(mat));
147 if(!isFE) mat->resumeFill();
148 mat->setAllToScalar(value);
149 if(!isFE) mat->fillComplete(map_j,map_i);
171 using Thyra::PhysicallyBlockedLinearOpBase;
172 using Thyra::ProductVectorSpaceBase;
174 using Teuchos::rcp_dynamic_cast;
176 if(get_A()!=Teuchos::null) {
177 RCP<PhysicallyBlockedLinearOpBase<ScalarT> > Amat
178 = rcp_dynamic_cast<PhysicallyBlockedLinearOpBase<ScalarT> >(get_A(),
true);
179 RCP<const ProductVectorSpaceBase<ScalarT> > range = Amat->productRange();
180 RCP<const ProductVectorSpaceBase<ScalarT> > domain = Amat->productDomain();
183 for(
int i=0;i<range->numBlocks();i++) {
184 for(
int j=0;j<domain->numBlocks();j++) {
185 RCP<LinearOpBase<ScalarT> > block = Amat->getNonconstBlock(i,j);
186 if(block!=Teuchos::null) {
187 RCP<Tpetra::Operator<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> > t_block =
188 rcp_dynamic_cast<Thyra::TpetraLinearOp<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >(block,
true)->getTpetraOperator();
190 RCP<Tpetra::CrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> > mat =
191 rcp_dynamic_cast<Tpetra::CrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >(t_block,
true);
195 if(Teuchos::nonnull(rcp_dynamic_cast<Tpetra::FECrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >(mat)))
210 using Thyra::PhysicallyBlockedLinearOpBase;
211 using Thyra::ProductVectorSpaceBase;
213 using Teuchos::rcp_dynamic_cast;
215 if(get_A()!=Teuchos::null) {
216 RCP<PhysicallyBlockedLinearOpBase<ScalarT> > Amat
217 = rcp_dynamic_cast<PhysicallyBlockedLinearOpBase<ScalarT> >(get_A(),
true);
218 RCP<const ProductVectorSpaceBase<ScalarT> > range = Amat->productRange();
219 RCP<const ProductVectorSpaceBase<ScalarT> > domain = Amat->productDomain();
222 for(
int i=0;i<range->numBlocks();i++) {
223 for(
int j=0;j<domain->numBlocks();j++) {
224 RCP<LinearOpBase<ScalarT> > block = Amat->getNonconstBlock(i,j);
225 if(block!=Teuchos::null) {
226 RCP<Tpetra::Operator<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> > t_block =
227 rcp_dynamic_cast<Thyra::TpetraLinearOp<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >(block,
true)->getTpetraOperator();
229 RCP<const MapType> map_i = t_block->getRangeMap();
230 RCP<const MapType> map_j = t_block->getDomainMap();
232 RCP<Tpetra::CrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> > mat =
233 rcp_dynamic_cast<Tpetra::CrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >(t_block,
true);
236 if(Teuchos::nonnull(rcp_dynamic_cast<Tpetra::FECrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >(mat)))
239 mat->fillComplete(map_j,map_i);