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; } }
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; } }
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; } } }
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; } } }
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); }