28 bool x_matches=
false, f_matches=
false, dxdt_matches=
false;
31 RCP<const VectorSpaceBase<ScalarT> > range = get_A()->range();
32 RCP<const VectorSpaceBase<ScalarT> > domain = get_A()->domain();
35 x_matches = range->isCompatible(*get_x()->space());
40 dxdt_matches = range->isCompatible(*get_dxdt()->space());
45 f_matches = range->isCompatible(*get_f()->space());
49 else if(get_x()!=null && get_dxdt()!=null) {
51 x_matches = get_x()->space()->isCompatible(*get_dxdt()->space());
52 dxdt_matches = x_matches;
55 f_matches = x_matches = dxdt_matches =
true;
58 return x_matches && dxdt_matches && f_matches;
66 using Thyra::PhysicallyBlockedLinearOpBase;
67 using Thyra::ProductVectorSpaceBase;
69 using Teuchos::rcp_dynamic_cast;
71 if(get_x()!=Teuchos::null) Thyra::assign<ScalarT>(x.ptr(),0.0);
72 if(get_dxdt()!=Teuchos::null) Thyra::assign<ScalarT>(get_dxdt().ptr(),0.0);
73 if(get_f()!=Teuchos::null) Thyra::assign<ScalarT>(get_f().ptr(),0.0);
74 if(get_A()!=Teuchos::null) {
75 RCP<PhysicallyBlockedLinearOpBase<ScalarT> > Amat
76 = rcp_dynamic_cast<PhysicallyBlockedLinearOpBase<ScalarT> >(get_A(),
true);
77 RCP<const ProductVectorSpaceBase<ScalarT> > range = Amat->productRange();
78 RCP<const ProductVectorSpaceBase<ScalarT> > domain = Amat->productDomain();
81 for(
int i=0;i<range->numBlocks();i++) {
82 for(
int j=0;j<domain->numBlocks();j++) {
83 RCP<LinearOpBase<ScalarT> > block = Amat->getNonconstBlock(i,j);
84 if(block!=Teuchos::null) {
85 RCP<Tpetra::Operator<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> > t_block =
86 rcp_dynamic_cast<Thyra::TpetraLinearOp<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >(block,
true)->getTpetraOperator();
88 RCP<const MapType> map_i = t_block->getRangeMap();
89 RCP<const MapType> map_j = t_block->getDomainMap();
91 RCP<Tpetra::CrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> > mat =
92 rcp_dynamic_cast<Tpetra::CrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >(t_block,
true);
95 mat->setAllToScalar(0.0);
96 mat->fillComplete(map_j,map_i);
108 using Thyra::PhysicallyBlockedLinearOpBase;
109 using Thyra::ProductVectorSpaceBase;
111 using Teuchos::rcp_dynamic_cast;
113 if(get_A()!=Teuchos::null) {
114 RCP<PhysicallyBlockedLinearOpBase<ScalarT> > Amat
115 = rcp_dynamic_cast<PhysicallyBlockedLinearOpBase<ScalarT> >(get_A(),
true);
116 RCP<const ProductVectorSpaceBase<ScalarT> > range = Amat->productRange();
117 RCP<const ProductVectorSpaceBase<ScalarT> > domain = Amat->productDomain();
120 for(
int i=0;i<range->numBlocks();i++) {
121 for(
int j=0;j<domain->numBlocks();j++) {
122 RCP<LinearOpBase<ScalarT> > block = Amat->getNonconstBlock(i,j);
123 if(block!=Teuchos::null) {
124 RCP<Tpetra::Operator<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> > t_block =
125 rcp_dynamic_cast<Thyra::TpetraLinearOp<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >(block,
true)->getTpetraOperator();
128 RCP<const MapType> map_i = t_block->getRangeMap();
129 RCP<const MapType> map_j = t_block->getDomainMap();
131 RCP<Tpetra::CrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> > mat =
132 rcp_dynamic_cast<Tpetra::CrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >(t_block,
true);
135 mat->setAllToScalar(value);
136 mat->fillComplete(map_j,map_i);
158 using Thyra::PhysicallyBlockedLinearOpBase;
159 using Thyra::ProductVectorSpaceBase;
161 using Teuchos::rcp_dynamic_cast;
163 if(get_A()!=Teuchos::null) {
164 RCP<PhysicallyBlockedLinearOpBase<ScalarT> > Amat
165 = rcp_dynamic_cast<PhysicallyBlockedLinearOpBase<ScalarT> >(get_A(),
true);
166 RCP<const ProductVectorSpaceBase<ScalarT> > range = Amat->productRange();
167 RCP<const ProductVectorSpaceBase<ScalarT> > domain = Amat->productDomain();
170 for(
int i=0;i<range->numBlocks();i++) {
171 for(
int j=0;j<domain->numBlocks();j++) {
172 RCP<LinearOpBase<ScalarT> > block = Amat->getNonconstBlock(i,j);
173 if(block!=Teuchos::null) {
174 RCP<Tpetra::Operator<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> > t_block =
175 rcp_dynamic_cast<Thyra::TpetraLinearOp<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >(block,
true)->getTpetraOperator();
177 RCP<Tpetra::CrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> > mat =
178 rcp_dynamic_cast<Tpetra::CrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >(t_block,
true);
192 using Thyra::PhysicallyBlockedLinearOpBase;
193 using Thyra::ProductVectorSpaceBase;
195 using Teuchos::rcp_dynamic_cast;
197 if(get_A()!=Teuchos::null) {
198 RCP<PhysicallyBlockedLinearOpBase<ScalarT> > Amat
199 = rcp_dynamic_cast<PhysicallyBlockedLinearOpBase<ScalarT> >(get_A(),
true);
200 RCP<const ProductVectorSpaceBase<ScalarT> > range = Amat->productRange();
201 RCP<const ProductVectorSpaceBase<ScalarT> > domain = Amat->productDomain();
204 for(
int i=0;i<range->numBlocks();i++) {
205 for(
int j=0;j<domain->numBlocks();j++) {
206 RCP<LinearOpBase<ScalarT> > block = Amat->getNonconstBlock(i,j);
207 if(block!=Teuchos::null) {
208 RCP<Tpetra::Operator<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> > t_block =
209 rcp_dynamic_cast<Thyra::TpetraLinearOp<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >(block,
true)->getTpetraOperator();
211 RCP<const MapType> map_i = t_block->getRangeMap();
212 RCP<const MapType> map_j = t_block->getDomainMap();
214 RCP<Tpetra::CrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> > mat =
215 rcp_dynamic_cast<Tpetra::CrsMatrix<ScalarT,LocalOrdinalT,GlobalOrdinalT,NodeT> >(t_block,
true);
217 mat->fillComplete(map_j,map_i);