<html dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style id="owaParaStyle" type="text/css">
<!--
p
        {margin-top:0;
        margin-bottom:0}
-->
P {margin-top:0;margin-bottom:0;}</style>
</head>
<body ocsi="0" fpstyle="1">
<div style="direction: ltr;font-family: Tahoma;color: #000000;font-size: 10pt;">If you wanted to do a more standard type method (e.g.<br>
first compute y then x) this might work.<br>
<br>
You already have:<br>
OperatorA<br>
OperatorB<br>
OperatorC<br>
<br>
Define:<br>
OperatorAinv using for example the ISTL binding<br>
(e.g., Dune::ISTLCGOp< DiscreteFunctionType, LinearOperatorType >)<br>
Then define a SchurOperator evaluating to<br>
<font color="black" face="Tahoma" size="2"><span dir="ltr" style="font-size: 10pt;">    -BA^{inv}B^T+C</span></font><br>
e.g.<br>
SchurOperator::evaluate(u,v) <br>
{<br>
  OperatorC(u,v);<br>
  OperatorB(u,bu);<br>
  OperatorAinv(bu,abu);<br>
  OperatorB(abu,babu);<br>
  v += babu;<br>
}<br>
Then you can use one of the matrix free inverse operator<br>
implementation found in dune-fem:<br>
Dune::CGInverseOperator< DiscreteFunctionType ><br>
   solver( SchurOperator, solverEps, solverEps );<br>
then solver(g,y);<br>
should give the right value for y using AInv and B<br>
you should get x<br>
<br>
DiscreteFunctionType is in this case the type for y.<br>
<br>
I almost think that doing the full system in one go might<br>
be almost more complicated....<br>
<br>
Best<br>
Andreas<br>
<br>
------------------------------------------------------------------------------------------<br>
<b>From:</b> dune-fem-bounces+a.s.dedner=warwick.ac.uk@dune-project.org [dune-fem-bounces+a.s.dedner=warwick.ac.uk@dune-project.org] on behalf of Sacconi, Andrea [a.sacconi11@imperial.ac.uk]<br>
<div style="font-family: Times New Roman; color: rgb(0, 0, 0); font-size: 16px;">
<div style="direction: ltr;" id="divRpF93803"><font color="#000000" face="Tahoma" size="2"><b>Sent:</b> Tuesday, April 24, 2012 5:44 PM<br>
<b>To:</b> dune-fem@dune-project.org<br>
<b>Subject:</b> [dune-fem] Solution of a linear system, where blocks have different size<br>
</font><br>
</div>
<div></div>
<div>
<div style="direction: ltr; font-family: Tahoma; color: rgb(0, 0, 0); font-size: 10pt;">
Hi everyone,<br>
<br>
suppose I need to solve the following linear systems:<br>
<br>
<font color="black" face="Tahoma" size="2"><span dir="ltr" style="font-size: 10pt;">| A    - B^T| | x | = 0<br>
| B      C    | | y | = g<br>
<br>
x = -A^{inv}B^Ty<br>
<br>
(-BA^{inv}B^Ty+C)y = g<br>
<br>
I have already implemented the three operators A, B and C.<br>
</span></font>
<div>I would like to use a direct / iterative solver in order to solve the entire system, i.e. without any formal elimination of one of the two variables.<br>
<br>
Pay attention that x and y are, in practice, a scalar-valued and a vector-valued function, so their algebraic counterparts have different sizes, i.e. the four blocks don't have identical dimensions.<br>
Is it possible to implement such a solver in DUNE-FEM, maybe interfacing with DUNE-ISTL, "gluing" the four blocks to get the solution after the "black-box" solver has been used?<br>
<br>
Cheers,<br>
<br>
Andrea<br>
<div style="font-family: Tahoma; font-size: 13px;"><br>
__________________________________________________________<br>
<br>
Andrea Sacconi<br>
PhD student, Applied Mathematics<br>
AMMP Section, Department of Mathematics, Imperial College London,<br>
London SW7 2AZ, UK<br>
a.sacconi11@imperial.ac.uk<br>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>