Exemple #1
0
void BrooksCorey2p::setVFraction(const Vec& thetaW_vec)
{
    for(int i=0; i<thetaW_vec.ldim(); i++)
    {
        setVFraction(thetaW_vec[i],i);
        (*psiC_p)[i] = psiC;
        (*krW_p)[i] = krW;
        if (DthetaW_DpC_p)
            (*DthetaW_DpC_p)[i]=DthetaW_DpC;
        if (krN_p)
            (*krN_p)[i]=krN;
    }
}
Exemple #2
0
void BrooksCorey2p::setHeads(const Vec& psiW_vec, const Vec& psiN_vec)
{
    for(int i=0; i<psiW_vec.ldim(); i++)
    {
        setHeads(i,psiW_vec[i],psiN_vec[i]);
        (*thetaW_p)[i] = thetaW;
        (*krW_p)[i] = krW;
        if (DthetaW_DpC_p)
            (*DthetaW_DpC_p)[i]=DthetaW_DpC;
        if (krN_p)
            (*krN_p)[i]=krN;
    }
}
Exemple #3
0
void BrooksCorey2p::calculateDerivativesVFraction(const Vec& thetaW_vec)
{
    for(int i=0; i<thetaW_vec.ldim(); i++)
    {
        setVFraction(thetaW_vec[i],i);
        calculateDerivativesVFraction();
        (*psiC_p)[i] = psiC;
        (*DthetaW_DpC_p)[i] = DthetaW_DpC;
        (*krW_p)[i] = krW;
        (*DkrW_DpC_p)[i] = DkrW_DpC;

        if (DDthetaW_DDpC_p)
            (*DDthetaW_DDpC_p)[i]=DDthetaW_DDpC;

        if (krN_p)
        {
            (*krN_p)[i]=krN;
            (*DkrN_DpC_p)[i]=DkrN_DpC;
        }
    }
}
Exemple #4
0
void BrooksCorey2p::calculateDerivativesHead(const Vec& psiW_vec, const Vec& psiN_vec)
{
    for(int i=0; i<psiW_vec.ldim(); i++)
    {
        setHeads(i,psiW_vec[i],psiN_vec[i]);
        calculateDerivatives();
        (*thetaW_p)[i] = thetaW;
        (*DthetaW_DpC_p)[i] = DthetaW_DpC;
        (*krW_p)[i] = krW;
        (*DkrW_DpC_p)[i] = DkrW_DpC;

        if (DDthetaW_DDpC_p)
            (*DDthetaW_DDpC_p)[i]=DDthetaW_DDpC;

        if (krN_p)
        {
            (*krN_p)[i]=krN;
            (*DkrN_DpC_p)[i]=DkrN_DpC;
        }
    }
}
Exemple #5
0
void Mat::newsizeSequential(int nGlobalRows, int nDiagonals, int nOffDiagonals, 
                    bool isSymmetric,int blockSize)
{
  LinearOperator::newsize(nGlobalRows,nGlobalRows);
  referenceVec.newsizeSerial(nGlobalRows);
  dimDomain_=dimRange_=nGlobalRows;
  isSymmetric_=isSymmetric; 
  firstAssembly_=true;
  nGlobalRows_=nGlobalRows;
  nGlobalColumns_=nGlobalRows;
  nLocalRows_=0;
  nLocalColumns_=0;
  globalLow_=0;
  globalHigh_=0;
  blockSize_=blockSize;
  cacheSize=0;
  mat=0;
  
  Vec testVec;testVec.newsizeSerial(nGlobalRows);
  //default format
  format=Mat::aij_format;   

  int nNonzero=nDiagonals+nOffDiagonals;
  if (blockSize==1)
    {
      //mwf gcc 3.3 has a problem with resolving cc:: and macros
      using namespace cc;
      //ierr = cc::MatCreateSeqAIJ(PETSC_COMM_SELF,nGlobalRows,nGlobalRows,nNonzero,PETSC_NULL,&mat); 
      format=Mat::aij_format;
      ierr =  cc::MatCreate(cc::PETSC_COMM_WORLD,&mat);
      ierr =  cc::MatSetSizes(mat,
			     testVec.ldim(),testVec.ldim(),
			     nGlobalRows,nGlobalRows);
      ierr =  cc::MatSetType(mat,MATMPIAIJ);
      ierr =  cc::MatSetUp(mat);      
      rowValueCache = new real[nDiagonals + nOffDiagonals];
      colIndexCache = new int[nDiagonals + nOffDiagonals];
    }
  else
    {
      //mwf gcc 3.3 has a problem with resolving cc:: and macros
      using namespace cc;
      // ierr =  cc::MatCreateSeqBAIJ(PETSC_COMM_SELF,blockSize,
      //                          nGlobalRows,nGlobalRows,
      //                          nDiagonals+nOffDiagonals,
      //                          PETSC_NULL, &mat);
      format=Mat::block_aij_format;
      ierr =  cc::MatCreate(cc::PETSC_COMM_WORLD,&mat);
      ierr =  cc::MatSetSizes(mat,
			     testVec.ldim(),testVec.ldim(),
			     nGlobalRows,nGlobalRows);
      ierr =  cc::MatSetType(mat,MATMPIBAIJ);
      ierr =  cc::MatSetUp(mat);      
      sqr_blockSize_=blockSize_*blockSize_;
      blockColumns  = new int[blockSize_*(nDiagonals + nOffDiagonals)];
      rowValueCache = new real[sqr_blockSize_*blockSize*(nDiagonals + nOffDiagonals)];
      colIndexCache = new int[sqr_blockSize_*blockSize*(nDiagonals + nOffDiagonals)];

//        ierr = cc::MatCreateSeqAIJ(cc::PETSC_COMM_SELF,nGlobalRows,nGlobalRows,blockSize*nNonzero,PETSC_NULL,&mat); 
//        format=Mat::aij_format;
//        rowValueCache = new real[nDiagonals + nOffDiagonals];
//        colIndexCache = new int[nDiagonals + nOffDiagonals];
//        ierr = cc::MatCreateSeqBAIJ(cc::PETSC_COMM_SELF,blockSize_,nGlobalRows,nGlobalRows,nNonzero,PETSC_NULL,&mat);
//        format=Mat::block_aij_format;
//        sqr_blockSize_ = blockSize_*blockSize_;
//        rowValueCache = new real[sqr_blockSize_*(nDiagonals + nOffDiagonals)];
//        colIndexCache = new int[sqr_blockSize_*(nDiagonals + nOffDiagonals)];
//        bockColumns = new int[blockSize_*(nDiagonals + nOffDiagonals)];
    }
  getStorageInfo();
  using namespace cc;
  ierr = MatSetOption(mat,MAT_ROW_ORIENTED,PETSC_FALSE);
  //    ierr = MatSetOption(mat,MAT_COLUMNS_SORTED);
}