// @(#)root/quadp:$Id$
// Author: Eddy Offermann   May 2004

/*************************************************************************
 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

/*************************************************************************
 * Parts of this file are copied from the OOQP distribution and          *
 * are subject to the following license:                                 *
 *                                                                       *
 * COPYRIGHT 2001 UNIVERSITY OF CHICAGO                                  *
 *                                                                       *
 * The copyright holder hereby grants you royalty-free rights to use,    *
 * reproduce, prepare derivative works, and to redistribute this software*
 * to others, provided that any changes are clearly documented. This     *
 * software was authored by:                                             *
 *                                                                       *
 *   E. MICHAEL GERTZ      gertz@mcs.anl.gov                             *
 *   Mathematics and Computer Science Division                           *
 *   Argonne National Laboratory                                         *
 *   9700 S. Cass Avenue                                                 *
 *   Argonne, IL 60439-4844                                              *
 *                                                                       *
 *   STEPHEN J. WRIGHT     swright@cs.wisc.edu                           *
 *   Computer Sciences Department                                        *
 *   University of Wisconsin                                             *
 *   1210 West Dayton Street                                             *
 *   Madison, WI 53706   FAX: (608)262-9777                              *
 *                                                                       *
 * Any questions or comments may be directed to one of the authors.      *
 *                                                                       *
 * ARGONNE NATIONAL LABORATORY (ANL), WITH FACILITIES IN THE STATES OF   *
 * ILLINOIS AND IDAHO, IS OWNED BY THE UNITED STATES GOVERNMENT, AND     *
 * OPERATED BY THE UNIVERSITY OF CHICAGO UNDER PROVISION OF A CONTRACT   *
 * WITH THE DEPARTMENT OF ENERGY.                                        *
 *************************************************************************/

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TQpLinSolverBase                                                     //
//                                                                      //
// Implementation of main solver for linear systems                     //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "Riostream.h"
#include "TQpLinSolverBase.h"
#include "TMatrixD.h"

ClassImp(TQpLinSolverBase)

//______________________________________________________________________________
TQpLinSolverBase::TQpLinSolverBase()
{
// Default constructor

   fNx   = 0;
   fMy   = 0;
   fMz   = 0;
   fNxup = 0;
   fNxlo = 0;
   fMcup = 0;
   fMclo = 0;
   fFactory = 0;
}


//______________________________________________________________________________
TQpLinSolverBase::TQpLinSolverBase(TQpProbBase *factory,TQpDataBase *data)
{
// Constructor

   fFactory = factory;

   fNx = data->fNx;
   fMy = data->fMy;
   fMz = data->fMz;

   fXloIndex.ResizeTo(data->fXloIndex); fXloIndex = data->fXloIndex;
   fXupIndex.ResizeTo(data->fXupIndex); fXupIndex = data->fXupIndex;
   fCloIndex.ResizeTo(data->fCloIndex); fCloIndex = data->fCloIndex;
   fCupIndex.ResizeTo(data->fCupIndex); fCupIndex = data->fCupIndex;

   fNxlo = fXloIndex.NonZeros();
   fNxup = fXupIndex.NonZeros();
   fMclo = fCloIndex.NonZeros();
   fMcup = fCupIndex.NonZeros();

   if (fNxup+fNxlo > 0) {
      fDd.ResizeTo(fNx);
      fDq.ResizeTo(fNx);
      data->GetDiagonalOfQ(fDq);
   }
   fNomegaInv.ResizeTo(fMz);
   fRhs      .ResizeTo(fNx+fMy+fMz);
}


//______________________________________________________________________________
TQpLinSolverBase::TQpLinSolverBase(const TQpLinSolverBase &another) : TObject(another),
                                                                      fFactory(another.fFactory)
{
// Copy constructor

   *this = another;
}


//______________________________________________________________________________
void TQpLinSolverBase::Factor(TQpDataBase * /* prob */,TQpVar *vars)
{
// Sets up the matrix for the main linear system in "augmented system" form. The
// actual factorization is performed by a routine specific to either the sparse
// or dense case

   R__ASSERT(vars->ValidNonZeroPattern());

   if (fNxlo+fNxup > 0) {
      fDd.ResizeTo(fDq);
      fDd = fDq;
   }
   this->ComputeDiagonals(fDd,fNomegaInv,
      vars->fT,vars->fLambda,vars->fU,vars->fPi,
      vars->fV,vars->fGamma,vars->fW,vars->fPhi);
   if (fNxlo+fNxup > 0) this->PutXDiagonal(fDd);

   fNomegaInv.Invert();
   fNomegaInv *= -1.;

   if (fMclo+fMcup > 0) this->PutZDiagonal(fNomegaInv);
}


//______________________________________________________________________________
void TQpLinSolverBase::ComputeDiagonals(TVectorD &dd,TVectorD &omega,
                                        TVectorD &t, TVectorD &lambda,
                                        TVectorD &u, TVectorD &pi,
                                        TVectorD &v, TVectorD &gamma,
                                        TVectorD &w, TVectorD &phi)
{
// Computes the diagonal matrices in the augmented system from the current set of variables

   if (fNxup+fNxlo > 0) {
      if (fNxlo > 0) AddElemDiv(dd,1.0,gamma,v,fXloIndex);
      if (fNxup > 0) AddElemDiv(dd,1.0,phi  ,w,fXupIndex);
   }
   omega.Zero();
   if (fMclo > 0) AddElemDiv(omega,1.0,lambda,t,fCloIndex);
   if (fMcup > 0) AddElemDiv(omega,1.0,pi,    u,fCupIndex);
}


//______________________________________________________________________________
void TQpLinSolverBase::Solve(TQpDataBase *prob,TQpVar *vars,TQpResidual *res,TQpVar *step)
{
// Solves the system for a given set of residuals. Assembles the right-hand side appropriate
// to the matrix factored in factor, solves the system using the factorization produced there,
// partitions the solution vector into step components, then recovers the step components
// eliminated during the block elimination that produced the augmented system form .

   R__ASSERT(vars->ValidNonZeroPattern());
   R__ASSERT(res ->ValidNonZeroPattern());

   (step->fX).ResizeTo(res->fRQ); step->fX = res->fRQ;
   if (fNxlo > 0) {
      TVectorD &vInvGamma = step->fV;
      vInvGamma.ResizeTo(vars->fGamma); vInvGamma = vars->fGamma;
      ElementDiv(vInvGamma,vars->fV,fXloIndex);

      AddElemMult(step->fX,1.0,vInvGamma,res->fRv);
      AddElemDiv (step->fX,1.0,res->fRgamma,vars->fV,fXloIndex);
   }

   if (fNxup > 0) {
      TVectorD &wInvPhi = step->fW;
      wInvPhi.ResizeTo(vars->fPhi); wInvPhi = vars->fPhi;
      ElementDiv(wInvPhi,vars->fW,fXupIndex);

      AddElemMult(step->fX,1.0,wInvPhi,res->fRw);
      AddElemDiv (step->fX,-1.0,res->fRphi,vars->fW,fXupIndex);
   }

   // start by partially computing step->fS
   (step->fS).ResizeTo(res->fRz); step->fS = res->fRz;
   if (fMclo > 0) {
      TVectorD &tInvLambda = step->fT;
      tInvLambda.ResizeTo(vars->fLambda); tInvLambda = vars->fLambda;
      ElementDiv(tInvLambda,vars->fT,fCloIndex);

      AddElemMult(step->fS,1.0,tInvLambda,res->fRt);
      AddElemDiv (step->fS,1.0,res->fRlambda,vars->fT,fCloIndex);
   }

   if (fMcup > 0) {
      TVectorD &uInvPi = step->fU;

      uInvPi.ResizeTo(vars->fPi); uInvPi = vars->fPi;
      ElementDiv(uInvPi,vars->fU,fCupIndex);

      AddElemMult(step->fS,1.0,uInvPi,res->fRu);
      AddElemDiv (step->fS,-1.0,res->fRpi,vars->fU,fCupIndex);
   }

   (step->fY).ResizeTo(res->fRA); step->fY = res->fRA;
   (step->fZ).ResizeTo(res->fRC); step->fZ = res->fRC;

   if (fMclo > 0)
      this->SolveXYZS(step->fX,step->fY,step->fZ,step->fS,step->fLambda,prob);
   else
      this->SolveXYZS(step->fX,step->fY,step->fZ,step->fS,step->fPi,prob);

   if (fMclo > 0) {
      (step->fT).ResizeTo(step->fS); step->fT = step->fS;
      Add(step->fT,-1.0,res->fRt);
      (step->fT).SelectNonZeros(fCloIndex);

      (step->fLambda).ResizeTo(res->fRlambda); step->fLambda = res->fRlambda;
      AddElemMult(step->fLambda,-1.0,vars->fLambda,step->fT);
      ElementDiv(step->fLambda,vars->fT,fCloIndex);
   }

   if (fMcup > 0) {
      (step->fU).ResizeTo(res->fRu); step->fU = res->fRu;
      Add(step->fU,-1.0,step->fS);
      (step->fU).SelectNonZeros(fCupIndex);

      (step->fPi).ResizeTo(res->fRpi); step->fPi = res->fRpi;
      AddElemMult(step->fPi,-1.0,vars->fPi,step->fU);
      ElementDiv(step->fPi,vars->fU,fCupIndex);
   }

   if (fNxlo > 0) {
      (step->fV).ResizeTo(step->fX); step->fV = step->fX;
      Add(step->fV,-1.0,res->fRv);
      (step->fV).SelectNonZeros(fXloIndex);

      (step->fGamma).ResizeTo(res->fRgamma); step->fGamma = res->fRgamma;
      AddElemMult(step->fGamma,-1.0,vars->fGamma,step->fV);
      ElementDiv(step->fGamma,vars->fV,fXloIndex);
   }

   if (fNxup > 0) {
      (step->fW).ResizeTo(res->fRw); step->fW = res->fRw;
      Add(step->fW,-1.0,step->fX);
      (step->fW).SelectNonZeros(fXupIndex);

      (step->fPhi).ResizeTo(res->fRphi); step->fPhi = res->fRphi;
      AddElemMult(step->fPhi,-1.0,vars->fPhi,step->fW);
      ElementDiv(step->fPhi,vars->fW,fXupIndex);
   }
   R__ASSERT(step->ValidNonZeroPattern());
}


//______________________________________________________________________________
void TQpLinSolverBase::SolveXYZS(TVectorD &stepx,TVectorD &stepy,
                                 TVectorD &stepz,TVectorD &steps,
                                 TVectorD & /* ztemp */, TQpDataBase * /* prob */ )
{
// Assemble right-hand side of augmented system and call SolveCompressed to solve it

   AddElemMult(stepz,-1.0,fNomegaInv,steps);
   this->JoinRHS(fRhs,stepx,stepy,stepz);

   this->SolveCompressed(fRhs);

   this->SeparateVars(stepx,stepy,stepz,fRhs);

   stepy *= -1.;
   stepz *= -1.;

   Add(steps,-1.0,stepz);
   ElementMult(steps,fNomegaInv);
   steps *= -1.;
}


//______________________________________________________________________________
void TQpLinSolverBase::JoinRHS(TVectorD &rhs_out, TVectorD &rhs1_in,
                               TVectorD &rhs2_in,TVectorD &rhs3_in)
{
// Assembles a single vector object from three given vectors .
//     rhs_out (output) final joined vector
//     rhs1_in (input) first part of rhs
//     rhs2_in (input) middle part of rhs
//     rhs3_in (input) last part of rhs .

   fFactory->JoinRHS(rhs_out,rhs1_in,rhs2_in,rhs3_in);
}


//______________________________________________________________________________
void TQpLinSolverBase::SeparateVars(TVectorD &x_in,TVectorD &y_in,
                                    TVectorD &z_in,TVectorD &vars_in)
{
// Extracts three component vectors from a given aggregated vector.
//     vars_in  (input) aggregated vector
//     x_in (output) first part of vars
//     y_in (output) middle part of vars
//     z_in (output) last part of vars

   fFactory->SeparateVars(x_in,y_in,z_in,vars_in);
}


//______________________________________________________________________________
TQpLinSolverBase &TQpLinSolverBase::operator=(const TQpLinSolverBase &source)
{
// Assignment opeartor

   if (this != &source) {
      TObject::operator=(source);

      fNx   = source.fNx;
      fMy   = source.fMy;
      fMz   = source.fMz;
      fNxup = source.fNxup;
      fNxlo = source.fNxlo;
      fMcup = source.fMcup;
      fMclo = source.fMclo;

      fNomegaInv.ResizeTo(source.fNomegaInv); fNomegaInv = source.fNomegaInv;
      fRhs      .ResizeTo(source.fRhs);       fRhs       = source.fRhs;

      fDd       .ResizeTo(source.fDd);        fDd        = source.fDd;
      fDq       .ResizeTo(source.fDq);        fDq        = source.fDq;

      fXupIndex .ResizeTo(source.fXupIndex);  fXupIndex  = source.fXupIndex;
      fCupIndex .ResizeTo(source.fCupIndex);  fCupIndex  = source.fCupIndex;
      fXloIndex .ResizeTo(source.fXloIndex);  fXloIndex  = source.fXloIndex;
      fCloIndex .ResizeTo(source.fCloIndex);  fCloIndex  = source.fCloIndex;

      // LM : copy also pointer data member
      fFactory = source.fFactory;
   }
   return *this;
}
 TQpLinSolverBase.cxx:1
 TQpLinSolverBase.cxx:2
 TQpLinSolverBase.cxx:3
 TQpLinSolverBase.cxx:4
 TQpLinSolverBase.cxx:5
 TQpLinSolverBase.cxx:6
 TQpLinSolverBase.cxx:7
 TQpLinSolverBase.cxx:8
 TQpLinSolverBase.cxx:9
 TQpLinSolverBase.cxx:10
 TQpLinSolverBase.cxx:11
 TQpLinSolverBase.cxx:12
 TQpLinSolverBase.cxx:13
 TQpLinSolverBase.cxx:14
 TQpLinSolverBase.cxx:15
 TQpLinSolverBase.cxx:16
 TQpLinSolverBase.cxx:17
 TQpLinSolverBase.cxx:18
 TQpLinSolverBase.cxx:19
 TQpLinSolverBase.cxx:20
 TQpLinSolverBase.cxx:21
 TQpLinSolverBase.cxx:22
 TQpLinSolverBase.cxx:23
 TQpLinSolverBase.cxx:24
 TQpLinSolverBase.cxx:25
 TQpLinSolverBase.cxx:26
 TQpLinSolverBase.cxx:27
 TQpLinSolverBase.cxx:28
 TQpLinSolverBase.cxx:29
 TQpLinSolverBase.cxx:30
 TQpLinSolverBase.cxx:31
 TQpLinSolverBase.cxx:32
 TQpLinSolverBase.cxx:33
 TQpLinSolverBase.cxx:34
 TQpLinSolverBase.cxx:35
 TQpLinSolverBase.cxx:36
 TQpLinSolverBase.cxx:37
 TQpLinSolverBase.cxx:38
 TQpLinSolverBase.cxx:39
 TQpLinSolverBase.cxx:40
 TQpLinSolverBase.cxx:41
 TQpLinSolverBase.cxx:42
 TQpLinSolverBase.cxx:43
 TQpLinSolverBase.cxx:44
 TQpLinSolverBase.cxx:45
 TQpLinSolverBase.cxx:46
 TQpLinSolverBase.cxx:47
 TQpLinSolverBase.cxx:48
 TQpLinSolverBase.cxx:49
 TQpLinSolverBase.cxx:50
 TQpLinSolverBase.cxx:51
 TQpLinSolverBase.cxx:52
 TQpLinSolverBase.cxx:53
 TQpLinSolverBase.cxx:54
 TQpLinSolverBase.cxx:55
 TQpLinSolverBase.cxx:56
 TQpLinSolverBase.cxx:57
 TQpLinSolverBase.cxx:58
 TQpLinSolverBase.cxx:59
 TQpLinSolverBase.cxx:60
 TQpLinSolverBase.cxx:61
 TQpLinSolverBase.cxx:62
 TQpLinSolverBase.cxx:63
 TQpLinSolverBase.cxx:64
 TQpLinSolverBase.cxx:65
 TQpLinSolverBase.cxx:66
 TQpLinSolverBase.cxx:67
 TQpLinSolverBase.cxx:68
 TQpLinSolverBase.cxx:69
 TQpLinSolverBase.cxx:70
 TQpLinSolverBase.cxx:71
 TQpLinSolverBase.cxx:72
 TQpLinSolverBase.cxx:73
 TQpLinSolverBase.cxx:74
 TQpLinSolverBase.cxx:75
 TQpLinSolverBase.cxx:76
 TQpLinSolverBase.cxx:77
 TQpLinSolverBase.cxx:78
 TQpLinSolverBase.cxx:79
 TQpLinSolverBase.cxx:80
 TQpLinSolverBase.cxx:81
 TQpLinSolverBase.cxx:82
 TQpLinSolverBase.cxx:83
 TQpLinSolverBase.cxx:84
 TQpLinSolverBase.cxx:85
 TQpLinSolverBase.cxx:86
 TQpLinSolverBase.cxx:87
 TQpLinSolverBase.cxx:88
 TQpLinSolverBase.cxx:89
 TQpLinSolverBase.cxx:90
 TQpLinSolverBase.cxx:91
 TQpLinSolverBase.cxx:92
 TQpLinSolverBase.cxx:93
 TQpLinSolverBase.cxx:94
 TQpLinSolverBase.cxx:95
 TQpLinSolverBase.cxx:96
 TQpLinSolverBase.cxx:97
 TQpLinSolverBase.cxx:98
 TQpLinSolverBase.cxx:99
 TQpLinSolverBase.cxx:100
 TQpLinSolverBase.cxx:101
 TQpLinSolverBase.cxx:102
 TQpLinSolverBase.cxx:103
 TQpLinSolverBase.cxx:104
 TQpLinSolverBase.cxx:105
 TQpLinSolverBase.cxx:106
 TQpLinSolverBase.cxx:107
 TQpLinSolverBase.cxx:108
 TQpLinSolverBase.cxx:109
 TQpLinSolverBase.cxx:110
 TQpLinSolverBase.cxx:111
 TQpLinSolverBase.cxx:112
 TQpLinSolverBase.cxx:113
 TQpLinSolverBase.cxx:114
 TQpLinSolverBase.cxx:115
 TQpLinSolverBase.cxx:116
 TQpLinSolverBase.cxx:117
 TQpLinSolverBase.cxx:118
 TQpLinSolverBase.cxx:119
 TQpLinSolverBase.cxx:120
 TQpLinSolverBase.cxx:121
 TQpLinSolverBase.cxx:122
 TQpLinSolverBase.cxx:123
 TQpLinSolverBase.cxx:124
 TQpLinSolverBase.cxx:125
 TQpLinSolverBase.cxx:126
 TQpLinSolverBase.cxx:127
 TQpLinSolverBase.cxx:128
 TQpLinSolverBase.cxx:129
 TQpLinSolverBase.cxx:130
 TQpLinSolverBase.cxx:131
 TQpLinSolverBase.cxx:132
 TQpLinSolverBase.cxx:133
 TQpLinSolverBase.cxx:134
 TQpLinSolverBase.cxx:135
 TQpLinSolverBase.cxx:136
 TQpLinSolverBase.cxx:137
 TQpLinSolverBase.cxx:138
 TQpLinSolverBase.cxx:139
 TQpLinSolverBase.cxx:140
 TQpLinSolverBase.cxx:141
 TQpLinSolverBase.cxx:142
 TQpLinSolverBase.cxx:143
 TQpLinSolverBase.cxx:144
 TQpLinSolverBase.cxx:145
 TQpLinSolverBase.cxx:146
 TQpLinSolverBase.cxx:147
 TQpLinSolverBase.cxx:148
 TQpLinSolverBase.cxx:149
 TQpLinSolverBase.cxx:150
 TQpLinSolverBase.cxx:151
 TQpLinSolverBase.cxx:152
 TQpLinSolverBase.cxx:153
 TQpLinSolverBase.cxx:154
 TQpLinSolverBase.cxx:155
 TQpLinSolverBase.cxx:156
 TQpLinSolverBase.cxx:157
 TQpLinSolverBase.cxx:158
 TQpLinSolverBase.cxx:159
 TQpLinSolverBase.cxx:160
 TQpLinSolverBase.cxx:161
 TQpLinSolverBase.cxx:162
 TQpLinSolverBase.cxx:163
 TQpLinSolverBase.cxx:164
 TQpLinSolverBase.cxx:165
 TQpLinSolverBase.cxx:166
 TQpLinSolverBase.cxx:167
 TQpLinSolverBase.cxx:168
 TQpLinSolverBase.cxx:169
 TQpLinSolverBase.cxx:170
 TQpLinSolverBase.cxx:171
 TQpLinSolverBase.cxx:172
 TQpLinSolverBase.cxx:173
 TQpLinSolverBase.cxx:174
 TQpLinSolverBase.cxx:175
 TQpLinSolverBase.cxx:176
 TQpLinSolverBase.cxx:177
 TQpLinSolverBase.cxx:178
 TQpLinSolverBase.cxx:179
 TQpLinSolverBase.cxx:180
 TQpLinSolverBase.cxx:181
 TQpLinSolverBase.cxx:182
 TQpLinSolverBase.cxx:183
 TQpLinSolverBase.cxx:184
 TQpLinSolverBase.cxx:185
 TQpLinSolverBase.cxx:186
 TQpLinSolverBase.cxx:187
 TQpLinSolverBase.cxx:188
 TQpLinSolverBase.cxx:189
 TQpLinSolverBase.cxx:190
 TQpLinSolverBase.cxx:191
 TQpLinSolverBase.cxx:192
 TQpLinSolverBase.cxx:193
 TQpLinSolverBase.cxx:194
 TQpLinSolverBase.cxx:195
 TQpLinSolverBase.cxx:196
 TQpLinSolverBase.cxx:197
 TQpLinSolverBase.cxx:198
 TQpLinSolverBase.cxx:199
 TQpLinSolverBase.cxx:200
 TQpLinSolverBase.cxx:201
 TQpLinSolverBase.cxx:202
 TQpLinSolverBase.cxx:203
 TQpLinSolverBase.cxx:204
 TQpLinSolverBase.cxx:205
 TQpLinSolverBase.cxx:206
 TQpLinSolverBase.cxx:207
 TQpLinSolverBase.cxx:208
 TQpLinSolverBase.cxx:209
 TQpLinSolverBase.cxx:210
 TQpLinSolverBase.cxx:211
 TQpLinSolverBase.cxx:212
 TQpLinSolverBase.cxx:213
 TQpLinSolverBase.cxx:214
 TQpLinSolverBase.cxx:215
 TQpLinSolverBase.cxx:216
 TQpLinSolverBase.cxx:217
 TQpLinSolverBase.cxx:218
 TQpLinSolverBase.cxx:219
 TQpLinSolverBase.cxx:220
 TQpLinSolverBase.cxx:221
 TQpLinSolverBase.cxx:222
 TQpLinSolverBase.cxx:223
 TQpLinSolverBase.cxx:224
 TQpLinSolverBase.cxx:225
 TQpLinSolverBase.cxx:226
 TQpLinSolverBase.cxx:227
 TQpLinSolverBase.cxx:228
 TQpLinSolverBase.cxx:229
 TQpLinSolverBase.cxx:230
 TQpLinSolverBase.cxx:231
 TQpLinSolverBase.cxx:232
 TQpLinSolverBase.cxx:233
 TQpLinSolverBase.cxx:234
 TQpLinSolverBase.cxx:235
 TQpLinSolverBase.cxx:236
 TQpLinSolverBase.cxx:237
 TQpLinSolverBase.cxx:238
 TQpLinSolverBase.cxx:239
 TQpLinSolverBase.cxx:240
 TQpLinSolverBase.cxx:241
 TQpLinSolverBase.cxx:242
 TQpLinSolverBase.cxx:243
 TQpLinSolverBase.cxx:244
 TQpLinSolverBase.cxx:245
 TQpLinSolverBase.cxx:246
 TQpLinSolverBase.cxx:247
 TQpLinSolverBase.cxx:248
 TQpLinSolverBase.cxx:249
 TQpLinSolverBase.cxx:250
 TQpLinSolverBase.cxx:251
 TQpLinSolverBase.cxx:252
 TQpLinSolverBase.cxx:253
 TQpLinSolverBase.cxx:254
 TQpLinSolverBase.cxx:255
 TQpLinSolverBase.cxx:256
 TQpLinSolverBase.cxx:257
 TQpLinSolverBase.cxx:258
 TQpLinSolverBase.cxx:259
 TQpLinSolverBase.cxx:260
 TQpLinSolverBase.cxx:261
 TQpLinSolverBase.cxx:262
 TQpLinSolverBase.cxx:263
 TQpLinSolverBase.cxx:264
 TQpLinSolverBase.cxx:265
 TQpLinSolverBase.cxx:266
 TQpLinSolverBase.cxx:267
 TQpLinSolverBase.cxx:268
 TQpLinSolverBase.cxx:269
 TQpLinSolverBase.cxx:270
 TQpLinSolverBase.cxx:271
 TQpLinSolverBase.cxx:272
 TQpLinSolverBase.cxx:273
 TQpLinSolverBase.cxx:274
 TQpLinSolverBase.cxx:275
 TQpLinSolverBase.cxx:276
 TQpLinSolverBase.cxx:277
 TQpLinSolverBase.cxx:278
 TQpLinSolverBase.cxx:279
 TQpLinSolverBase.cxx:280
 TQpLinSolverBase.cxx:281
 TQpLinSolverBase.cxx:282
 TQpLinSolverBase.cxx:283
 TQpLinSolverBase.cxx:284
 TQpLinSolverBase.cxx:285
 TQpLinSolverBase.cxx:286
 TQpLinSolverBase.cxx:287
 TQpLinSolverBase.cxx:288
 TQpLinSolverBase.cxx:289
 TQpLinSolverBase.cxx:290
 TQpLinSolverBase.cxx:291
 TQpLinSolverBase.cxx:292
 TQpLinSolverBase.cxx:293
 TQpLinSolverBase.cxx:294
 TQpLinSolverBase.cxx:295
 TQpLinSolverBase.cxx:296
 TQpLinSolverBase.cxx:297
 TQpLinSolverBase.cxx:298
 TQpLinSolverBase.cxx:299
 TQpLinSolverBase.cxx:300
 TQpLinSolverBase.cxx:301
 TQpLinSolverBase.cxx:302
 TQpLinSolverBase.cxx:303
 TQpLinSolverBase.cxx:304
 TQpLinSolverBase.cxx:305
 TQpLinSolverBase.cxx:306
 TQpLinSolverBase.cxx:307
 TQpLinSolverBase.cxx:308
 TQpLinSolverBase.cxx:309
 TQpLinSolverBase.cxx:310
 TQpLinSolverBase.cxx:311
 TQpLinSolverBase.cxx:312
 TQpLinSolverBase.cxx:313
 TQpLinSolverBase.cxx:314
 TQpLinSolverBase.cxx:315
 TQpLinSolverBase.cxx:316
 TQpLinSolverBase.cxx:317
 TQpLinSolverBase.cxx:318
 TQpLinSolverBase.cxx:319
 TQpLinSolverBase.cxx:320
 TQpLinSolverBase.cxx:321
 TQpLinSolverBase.cxx:322
 TQpLinSolverBase.cxx:323
 TQpLinSolverBase.cxx:324
 TQpLinSolverBase.cxx:325
 TQpLinSolverBase.cxx:326
 TQpLinSolverBase.cxx:327
 TQpLinSolverBase.cxx:328
 TQpLinSolverBase.cxx:329
 TQpLinSolverBase.cxx:330
 TQpLinSolverBase.cxx:331
 TQpLinSolverBase.cxx:332
 TQpLinSolverBase.cxx:333
 TQpLinSolverBase.cxx:334
 TQpLinSolverBase.cxx:335
 TQpLinSolverBase.cxx:336
 TQpLinSolverBase.cxx:337
 TQpLinSolverBase.cxx:338
 TQpLinSolverBase.cxx:339
 TQpLinSolverBase.cxx:340
 TQpLinSolverBase.cxx:341
 TQpLinSolverBase.cxx:342