Exemple #1
0
  inline int LinSolve(int N, int NRHS, _F *A, int LDA, _F *B, 
    int LDB) {

    std::vector<int> iPIV(N,0);
    return LinSolve(N,NRHS,A,LDA,B,LDB,&iPIV[0]);

  };
Exemple #2
0
  inline CB_INT LinSolve(const CB_INT N, const CB_INT NRHS, _F *A, 
    const CB_INT IA, const CB_INT JA, const CXXBLACS::ScaLAPACK_Desc_t DESCA, 
    _F *B, const CB_INT IB, const CB_INT JB,
    const CXXBLACS::ScaLAPACK_Desc_t DESCB) {

    std::vector<CB_INT> iPIV(DESCA[8] + DESCA[4],0); // LLD + MB
    return LinSolve(N,NRHS,A,IA,JA,DESCA,B,IB,JB,DESCB,&iPIV[0]);

  }
Exemple #3
0
  inline int LinSolve(int N, int NRHS, _F *A, int LDA, _F *B, 
    int LDB, CQMemManager &mem) {

    int* iPIV = mem.malloc<int>(N);

    int INFO = LinSolve(N,NRHS,A,LDA,B,LDB,iPIV);

    mem.free(iPIV);

    return INFO;

  };
Exemple #4
0
  inline CB_INT LinSolve(const CB_INT N, const CB_INT NRHS, _F *A, 
    const CB_INT IA, const CB_INT JA, const CXXBLACS::ScaLAPACK_Desc_t DESCA, 
    _F *B, const CB_INT IB, const CB_INT JB,
    const CXXBLACS::ScaLAPACK_Desc_t DESCB, CQMemManager &mem) {

    CB_INT* iPIV = mem.malloc<CB_INT>(DESCA[8] + DESCA[4]); // LLD + MB

    CB_INT INFO = LinSolve(N,NRHS,A,IA,JA,DESCA,B,IB,JB,DESCB,iPIV);

    mem.free(iPIV);

    return INFO;
  }
Exemple #5
0
  // Simple rather than efficient (esp. the call to eval)
  std::vector<RingElem> BM_generic(const SparsePolyRing& P, const ConstMatrixView& pts)
  {
    if (CoeffRing(P) != RingOf(pts)) CoCoA_ERROR(ERR::MixedRings, "Buchberger-Moeller");
    if (NumIndets(P) < NumCols(pts)) CoCoA_ERROR(ERR::IncompatDims, "Buchberger-Moeller");

    const long NumPts = NumRows(pts);
    const long dim = NumCols(pts);
    const ring k = CoeffRing(P);

    vector<RingElem> GB;
    const PPMonoid TT = PPM(P);
    QBGenerator QBG(TT);
    QBG.myCornerPPIntoQB(one(TT));
    matrix M = NewDenseMat(k, 1, NumPts);
    // Fill first row with 1:
    for (int i=0; i<NumPts; ++i) SetEntry(M,0,i, 1);

    // The next loop removes the last indets from consideration.
    for (int i=dim; i < NumIndets(TT); ++i)
      QBG.myCornerPPIntoAvoidSet(indet(TT,i));

    while (!QBG.myCorners().empty())
    {
      const PPMonoidElem t = QBG.myCorners().front();
      const vector<RingElem> v = eval(t, pts);
      ConstMatrixView NewRow = RowMat(v);
      const matrix a = LinSolve(transpose(M), transpose(NewRow));
      if (IsValidSolution(a))
      {
        QBG.myCornerPPIntoAvoidSet(t);
        RingElem NewGBElem = monomial(P, one(k), t);
        const vector<PPMonoidElem>& QB =  QBG.myQB();
        for (int i=0; i < NumRows(M); ++i)
          NewGBElem -= monomial(P, a(i,0), QB[i]);
        GB.push_back(NewGBElem);
      }
      else
      {
        QBG.myCornerPPIntoQB(t);
        M = NewDenseMat(ConcatVer(M, NewRow));
      }
    }
    return GB;
  }