1 #ifndef _LinSysCoreFilter_hpp_
2 #define _LinSysCoreFilter_hpp_
20 class DirichletBCManager;
57 const int* offsetsIntoField,
58 const double* prescribedValues);
63 const double *
const *alpha,
64 const double *
const *beta,
65 const double *
const *gamma);
70 const double*
const* elemStiffness,
71 const double* elemLoad,
77 const double*
const* elemStiffness,
83 const double* elemLoad);
89 const double* CRWeights,
96 const double* CRWeights,
104 const double* rhsEntries);
110 const double* rhsEntries);
115 virtual int parameters(
int numParams,
const char *
const* paramStrings);
119 int* fieldIDs,
double* norms,
double& residTime);
122 virtual int solve(
int& status,
double& sTime);
152 int& numElemDOFPerElement,
155 virtual int getCRMultipliers(
int numCRs,
const int* CRIDs,
double* multipliers);
172 const double *estimates);
179 const double *estimates);
186 const double *estimates);
190 const double *multEstimates);
205 const double* nodeData);
210 const double* nodeData);
223 std::vector<double>& essAlpha,
224 std::vector<double>& essGamma);
229 const double* gamma,
int numEqns);
232 const int*
const* colIndices,
const int* colIndLens,
233 const double*
const* coefs);
251 const double* CRWeights,
258 const double* CRWeights,
263 int fieldID,
int fieldSize,
267 int fieldID,
int fieldSize,
268 double* coefs,
int eqn);
272 const double*
const* elemStiffness,
273 const double* elemLoad,
279 const double*
const* elemStiffness,
280 const double* elemLoad,
290 int iField,
int iFieldSize,
293 int jField,
int jFieldSize,
295 double penValue,
double CRValue);
298 int iField,
int iFieldSize,
301 int jField,
int jFieldSize,
303 double penValue,
double CRValue);
310 const int* ptRowNumbers,
311 const double*
const* coefs,
315 int numBlkRows,
const int* blkRowNumbers,
316 const int* blkRowSizes,
317 const double*
const* coefs,
321 int numPtCols,
const int* ptCols,
322 const double*
const* values,
326 int numPtCols,
const int* ptCols,
327 const double*
const* values,
331 const int* rowColOffsets,
const int* ptCols,
332 int numColsPerRow,
double** values);
340 int giveToRHS(
int num,
const double* values,
341 const int* indices,
int mode);
344 const int* indices,
int mode);
346 int getFromRHS(
int num,
double* values,
const int* indices);
356 int formResidual(
double* residValues,
int numLocalEqns);
366 const int* rowNumbers,
367 const int* colIndices,
368 const double*
const* coefs,
369 bool structurallySymmetric,
370 int numBlkEqns,
int* blkEqns,
int* blkSizes,
371 bool useBlkEqns,
int mode);
375 int assembleRHS(
int numValues,
const int* indices,
const double* coefs,
int mode);
int storePenNodeData(const NodeDescriptor &iNode, int iField, int iFieldSize, double *iCoefs, const NodeDescriptor &jNode, int jField, int jFieldSize, double *jCoefs, double penValue, double CRValue)
int giveToLocalReducedMatrix(int numPtRows, const int *ptRows, int numPtCols, const int *ptCols, const double *const *values, int mode)
virtual int loadNodeBCs(int numNodes, const GlobalID *nodeIDs, int fieldID, const int *offsetsIntoField, const double *prescribedValues)
int giveToRHS(int num, const double *values, const int *indices, int mode)
int numLocallyOwnedNodes_
std::vector< int > colIndices_
std::vector< int > iworkSpace_
int assembleEqns(int numPtRows, int numPtCols, const int *rowNumbers, const int *colIndices, const double *const *coefs, bool structurallySymmetric, int numBlkEqns, int *blkEqns, int *blkSizes, bool useBlkEqns, int mode)
bool connectivitiesInitialized_
int giveToLocalReducedRHS(int num, const double *values, const int *indices, int mode)
virtual int resetMatrix(double s)
int giveToBlkMatrix_symm_noSlaves(int numPtRows, const int *ptRows, int numBlkRows, const int *blkRowNumbers, const int *blkRowSizes, const double *const *coefs, int mode)
int localReducedBlkOffset_
virtual int getBlockFieldNodeSolution(GlobalID elemBlockID, int fieldID, int numNodes, const GlobalID *nodeIDs, double *results)
int assembleReducedEqns()
virtual int sumInElemMatrix(GlobalID elemBlockID, GlobalID elemID, const GlobalID *elemConn, const double *const *elemStiffness, int elemFormat)
virtual int getBlockElemSolution(GlobalID elemBlockID, int numElems, const GlobalID *elemIDs, int &numElemDOFPerElement, double *results)
int getEqnsFromMatrix(ProcEqns &procEqns, EqnBuffer &eqnData)
virtual int resetSystem(double s)
virtual int sumIntoRHS(int IDType, int fieldID, int numIDs, const GlobalID *IDs, const double *rhsEntries)
virtual int putBlockElemSolution(GlobalID elemBlockID, int numElems, const GlobalID *elemIDs, int dofPerElem, const double *estimates)
int giveToMatrix(int numPtRows, const int *ptRows, int numPtCols, const int *ptCols, const double *const *values, int mode)
EqnCommMgr * getEqnCommMgr()
int firstLocalNodeNumber_
int getRemoteSharedEqns(int numPtRows, const int *ptRows, ProcEqns &remoteProcEqns)
bool resolveConflictRequested_
std::vector< int > rowColOffsets_
int unpackRemoteContributions(EqnCommMgr &eqnCommMgr, int assemblyMode)
virtual int putNodalFieldData(int fieldID, int numNodes, const GlobalID *nodeIDs, const double *nodeData)
int resolveConflictingCRs(EqnBuffer &bcEqns)
virtual int implementAllBCs()
virtual int loadCRPen(int CRPenID, int numCRNodes, const GlobalID *CRNodes, const int *CRFields, const double *CRWeights, double CRValue, double penValue)
virtual int putBlockFieldNodeSolution(GlobalID elemBlockID, int fieldID, int numNodes, const GlobalID *nodeIDs, const double *estimates)
virtual int loadCRMult(int CRMultID, int numCRNodes, const GlobalID *CRNodes, const int *CRFields, const double *CRWeights, double CRValue)
virtual int residualNorm(int whichNorm, int numFields, int *fieldIDs, double *norms, double &residTime)
virtual int parameters(int numParams, const char *const *paramStrings)
virtual int unpackSolution()
void setLinSysCoreCREqns()
std::vector< const double * > dworkSpace2_
std::vector< double > dworkSpace_
std::vector< int > blkScatterIndices_
void storeNodalSendIndices(const NodeDescriptor &iNode, int iField, const NodeDescriptor &jNode, int jField)
virtual int solve(int &status, double &sTime)
SNL_FEI_Structure * problemStructure_
virtual int putBlockNodeSolution(GlobalID elemBlockID, int numNodes, const GlobalID *nodeIDs, const int *offsets, const double *estimates)
virtual int resetRHSVector(double s)
fei::DirichletBCManager * bcManager_
int createEqnCommMgr_put()
virtual int getNodalSolution(int numNodes, const GlobalID *nodeIDs, int *offsets, double *results)
int getFromMatrix(int numPtRows, const int *ptRows, const int *rowColOffsets, const int *ptCols, int numColsPerRow, double **values)
LinSysCoreFilter(FEI_Implementation *owner, MPI_Comm comm, SNL_FEI_Structure *probStruct, LinearSystemCore *lsc, int masterRank=0)
virtual int resetInitialGuess(double s)
bool needToCallMatrixLoadComplete_
void storePenNodeSendData(const NodeDescriptor &iNode, int iField, int iFieldSize, double *iCoefs, const NodeDescriptor &jNode, int jField, int jFieldSize, double *jCoefs, double penValue, double CRValue)
int assembleRHS(int numValues, const int *indices, const double *coefs, int mode)
int sumIntoMatrix(fei::CSRMat &mat)
int storeNodalColumnCoefs(int eqn, const NodeDescriptor &node, int fieldID, int fieldSize, double *coefs)
std::vector< int > cSlave_
virtual int loadElemBCs(int numElems, const GlobalID *elemIDs, int fieldID, const double *const *alpha, const double *const *beta, const double *const *gamma)
void setEqnCommMgr(EqnCommMgr *eqnCommMgr)
int getEqnSolnEntry(int eqnNumber, double &solnValue)
int getReducedSolnEntry(int eqnNumber, double &solnValue)
virtual int setNumRHSVectors(int numRHSs, int *rhsIDs)
virtual int loadComplete()
int numLocalReducedEqnBlks_
int getFromRHS(int num, double *values, const int *indices)
int resetTheMatrix(double s)
virtual int setCurrentRHS(int rhsID)
virtual int putNodalFieldSolution(int fieldID, int numNodes, const GlobalID *nodeIDs, const double *nodeData)
int storeNodalRowCoefs(const NodeDescriptor &node, int fieldID, int fieldSize, double *coefs, int eqn)
void storeNodalSendEqn(const NodeDescriptor &node, int fieldID, int col, double *coefs)
std::vector< int > rhsIDs_
std::vector< int > rSlave_
virtual int iterations() const
int resetTheRHSVector(double s)
int timesInitializeCalled_
virtual int getNodalFieldSolution(int fieldID, int numNodes, const GlobalID *nodeIDs, double *results)
int getSharedRemoteSolnEntry(int eqnNumber, double &solnValue)
virtual ~LinSysCoreFilter()
int generalElemInput(GlobalID elemBlockID, GlobalID elemID, const double *const *elemStiffness, const double *elemLoad, int elemFormat)
int loadFEDataMultCR(int CRID, int numCRNodes, const GlobalID *CRNodes, const int *CRFields, const double *CRWeights, double CRValue)
void debugOutput(const char *mesg)
virtual int sumInElem(GlobalID elemBlockID, GlobalID elemID, const GlobalID *elemConn, const double *const *elemStiffness, const double *elemLoad, int elemFormat)
int getEqnsFromRHS(ProcEqns &procEqns, EqnBuffer &eqnData)
std::vector< int > rowIndices_
virtual int enforceRemoteEssBCs(int numEqns, const int *eqns, const int *const *colIndices, const int *colIndLens, const double *const *coefs)
virtual int getCRMultipliers(int numCRs, const int *CRIDs, double *multipliers)
virtual int deleteMultCRs()
std::vector< int > scatterIndices_
virtual int exchangeRemoteEquations()
int formResidual(double *residValues, int numLocalEqns)
void storeNodalSendIndex(const NodeDescriptor &node, int fieldID, int col)
bool firstRemEqnExchange_
int giveToMatrix_symm_noSlaves(int numPtRows, const int *ptRowNumbers, const double *const *coefs, int mode)
std::vector< int > iworkSpace2_
bool tooLateToChooseBlock_
virtual int getBlockNodeSolution(GlobalID elemBlockID, int numNodes, const GlobalID *nodeIDs, int *offsets, double *results)
int loadFEDataPenCR(int CRID, int numCRNodes, const GlobalID *CRNodes, const int *CRFields, const double *CRWeights, double CRValue, double penValue)
EqnCommMgr * eqnCommMgr_put_
virtual int enforceEssentialBCs(const int *eqns, const double *alpha, const double *gamma, int numEqns)
virtual int putIntoRHS(int IDType, int fieldID, int numIDs, const GlobalID *IDs, const double *rhsEntries)
virtual int putCRMultipliers(int numMultCRs, const int *CRIDs, const double *multEstimates)
virtual int sumInElemRHS(GlobalID elemBlockID, GlobalID elemID, const GlobalID *elemConn, const double *elemLoad)
virtual int exchangeRemoteBCs(std::vector< int > &essEqns, std::vector< double > &essAlpha, std::vector< double > &essGamma)