|
OOFEM 3.0
|
#include <fetisolver.h>
Public Types | |
| enum | { FETISolverZeroTag , NumberOfRBMMsg , RBMMessage , QQMessage , SolutionMessage , ResidualMessage , DirectionVectorMessage , PPVectorMessage , GammasMessage , FETISolverIterationContinue , FETISolverIterationBreak } |
Private Attributes | |
| int | nse |
| int | ni |
| Max number of iterations. | |
| double | err |
| Max allowed error. | |
| double | limit |
| Linear dep./indep. trigger. | |
| FloatMatrix | rbm |
| Rigid body motions. | |
| FloatMatrix | l |
| Rigid body motions of all partitions. On master only. | |
| IntArray | se |
| Indices of singular equations. | |
| IntArray | rbmAddr |
| Addresses of initial partition contribution to rbm matrix. | |
| FloatArray | w |
| Primary unknowns. | |
| FloatArray | |
| FloatArray | q |
| FloatArray | dd |
| FloatArray | g |
| FloatArray | d |
| FloatArray | p |
| FloatArray | pp |
| FloatArray | gamma |
| FloatArray | localGammas |
| IntArray | nsem |
| ProcessCommunicatorBuff | pcbuff |
| ProcessCommunicator | processCommunicator |
| CommunicatorBuff * | commBuff |
| Common Communicator buffer. | |
| FETICommunicator * | masterCommunicator |
| IntArray | masterCommMap |
| List of local nodes (at master) participating in communication (list of boundary dof managers). | |
| int | energyNorm_comput_flag |
| Flag indicating computation of energy norm. | |
Additional Inherited Members | |
| Protected Attributes inherited from oofem::NumericalMethod | |
| Domain * | domain |
| Pointer to domain. | |
| EngngModel * | engngModel |
| Pointer to engineering model. | |
This class implements the class NumericalMethod instance FETI linear algebraic equation parallel solver.
Definition at line 68 of file fetisolver.h.
| anonymous enum |
Definition at line 152 of file fetisolver.h.
| oofem::FETISolver::FETISolver | ( | Domain * | d, |
| EngngModel * | m ) |
Definition at line 49 of file fetisolver.C.
References oofem::CBT_static, d, energyNorm_comput_flag, err, ni, pcbuff, processCommunicator, and oofem::SparseLinearSystemNM::SparseLinearSystemNM().
|
virtual |
Definition at line 59 of file fetisolver.C.
References commBuff, oofem::NumericalMethod::engngModel, and masterCommunicator.
| int oofem::FETISolver::estimateMaxPackSize | ( | IntArray & | map, |
| DataStream & | buff, | ||
| int & | packUnpackType ) |
Definition at line 69 of file fetisolver.C.
References oofem::NumericalMethod::domain, FETISOLVER_MAX_RBM, oofem::DataStream::givePackSizeOfDouble(), and masterCommunicator.
|
inlineoverridevirtual |
Implements oofem::SparseLinearSystemNM.
Definition at line 124 of file fetisolver.h.
|
inlineoverridevirtual |
Implements oofem::SparseLinearSystemNM.
Definition at line 125 of file fetisolver.h.
References oofem::ST_Feti.
|
inlinevirtual |
Returns the recommended sparse matrix type for this solver.
Implements oofem::SparseLinearSystemNM.
Definition at line 153 of file fetisolver.h.
References oofem::SMT_Skyline, and oofem::SMT_SkylineU.
|
overridevirtual |
Reimplemented from oofem::NumericalMethod.
Definition at line 95 of file fetisolver.C.
References _IFT_FETISolver_energynormflag, _IFT_FETISolver_limit, _IFT_FETISolver_maxerr, _IFT_FETISolver_maxiter, energyNorm_comput_flag, err, IR_GIVE_FIELD, IR_GIVE_OPTIONAL_FIELD, limit, and ni.
| int oofem::FETISolver::masterMapDirectionVector | ( | ) |
Definition at line 774 of file fetisolver.C.
References oofem::IntArray::at(), d, dd, oofem::NumericalMethod::domain, oofem::IntArray::giveSize(), masterCommMap, masterCommunicator, and OOFEM_ERROR.
Referenced by solve().
| int oofem::FETISolver::masterMapGammas | ( | ) |
Definition at line 995 of file fetisolver.C.
References gamma, localGammas, nse, and rbmAddr.
Referenced by solve().
| int oofem::FETISolver::masterMapPPVector | ( | ) |
Definition at line 903 of file fetisolver.C.
References oofem::IntArray::at(), oofem::NumericalMethod::domain, oofem::IntArray::giveSize(), masterCommMap, masterCommunicator, OOFEM_ERROR, p, and pp.
Referenced by solve().
| int oofem::FETISolver::masterMapQQProduct | ( | ) |
| int oofem::FETISolver::masterMapRBM | ( | ) |
Definition at line 322 of file fetisolver.C.
References oofem::IntArray::at(), oofem::NumericalMethod::domain, oofem::IntArray::giveSize(), l, masterCommMap, masterCommunicator, nsem, OOFEM_ERROR, rbm, and rbmAddr.
Referenced by solve().
| int oofem::FETISolver::masterMapResiduals | ( | ) |
Definition at line 641 of file fetisolver.C.
References oofem::IntArray::at(), oofem::NumericalMethod::domain, g, oofem::IntArray::giveSize(), masterCommMap, masterCommunicator, OOFEM_ERROR, and pp.
Referenced by solve().
| int oofem::FETISolver::masterMapSolution | ( | ) |
Definition at line 511 of file fetisolver.C.
References oofem::IntArray::at(), dd, oofem::NumericalMethod::domain, oofem::IntArray::giveSize(), masterCommMap, masterCommunicator, OOFEM_ERROR, and w.
Referenced by solve().
| int oofem::FETISolver::masterUnpackQQProduct | ( | ProcessCommunicator & | processComm | ) |
Definition at line 401 of file fetisolver.C.
References oofem::ProcessCommunicator::giveProcessCommunicatorBuff(), oofem::ProcessCommunicator::giveRank(), oofem::ProcessCommunicatorBuff::giveRecvBuff(), nsem, q, rbmAddr, and oofem::CommunicationBuffer::read().
| int oofem::FETISolver::masterUnpackRBM | ( | ProcessCommunicator & | processComm | ) |
Definition at line 277 of file fetisolver.C.
References oofem::ProcessCommunicator::giveProcessCommunicatorBuff(), oofem::ProcessCommunicator::giveRank(), oofem::ProcessCommunicatorBuff::giveRecvBuff(), oofem::ProcessCommunicator::giveToRecvMap(), l, masterCommunicator, nsem, rbmAddr, and oofem::CommunicationBuffer::read().
| int oofem::FETISolver::packDirectionVector | ( | ProcessCommunicator & | processComm | ) |
Definition at line 703 of file fetisolver.C.
References oofem::IntArray::at(), d, oofem::ProcessCommunicator::giveProcessCommunicatorBuff(), oofem::ProcessCommunicator::giveRank(), oofem::ProcessCommunicatorBuff::giveSendBuff(), oofem::ProcessCommunicator::giveToSendMap(), masterCommunicator, and oofem::CommunicationBuffer::write().
| int oofem::FETISolver::packGammas | ( | ProcessCommunicator & | processComm | ) |
Definition at line 963 of file fetisolver.C.
References gamma, oofem::ProcessCommunicator::giveProcessCommunicatorBuff(), oofem::ProcessCommunicator::giveRank(), oofem::ProcessCommunicatorBuff::giveSendBuff(), nsem, rbmAddr, and oofem::CommunicationBuffer::write().
| int oofem::FETISolver::packPPVector | ( | ProcessCommunicator & | processComm | ) |
Definition at line 832 of file fetisolver.C.
References oofem::IntArray::at(), oofem::NumericalMethod::domain, oofem::ProcessCommunicator::giveProcessCommunicatorBuff(), oofem::ProcessCommunicatorBuff::giveSendBuff(), oofem::IntArray::giveSize(), oofem::ProcessCommunicator::giveToSendMap(), pp, and oofem::CommunicationBuffer::write().
| int oofem::FETISolver::packQQProducts | ( | ProcessCommunicator & | processComm | ) |
Definition at line 386 of file fetisolver.C.
References oofem::ProcessCommunicator::giveProcessCommunicatorBuff(), oofem::ProcessCommunicatorBuff::giveSendBuff(), nse, qq, and oofem::CommunicationBuffer::write().
| int oofem::FETISolver::packRBM | ( | ProcessCommunicator & | processComm | ) |
Definition at line 247 of file fetisolver.C.
References oofem::IntArray::at(), oofem::NumericalMethod::domain, oofem::ProcessCommunicator::giveProcessCommunicatorBuff(), oofem::ProcessCommunicatorBuff::giveSendBuff(), oofem::IntArray::giveSize(), oofem::ProcessCommunicator::giveToSendMap(), nse, rbm, and oofem::CommunicationBuffer::write().
| int oofem::FETISolver::packResiduals | ( | ProcessCommunicator & | processComm | ) |
Definition at line 570 of file fetisolver.C.
References oofem::IntArray::at(), oofem::NumericalMethod::domain, oofem::ProcessCommunicator::giveProcessCommunicatorBuff(), oofem::ProcessCommunicatorBuff::giveSendBuff(), oofem::IntArray::giveSize(), oofem::ProcessCommunicator::giveToSendMap(), pp, and oofem::CommunicationBuffer::write().
| int oofem::FETISolver::packSolution | ( | ProcessCommunicator & | processComm | ) |
Definition at line 436 of file fetisolver.C.
References oofem::IntArray::at(), oofem::ProcessCommunicator::giveProcessCommunicatorBuff(), oofem::ProcessCommunicator::giveRank(), oofem::ProcessCommunicatorBuff::giveSendBuff(), oofem::ProcessCommunicator::giveToSendMap(), masterCommunicator, w, and oofem::CommunicationBuffer::write().
| void oofem::FETISolver::projection | ( | FloatArray & | v, |
| FloatMatrix & | l, | ||
| FloatMatrix & | l1 ) |
Definition at line 219 of file fetisolver.C.
References oofem::FloatArray::beProductOf(), oofem::FloatArray::beTProductOf(), l, and oofem::FloatArray::subtract().
Referenced by solve().
| void oofem::FETISolver::setUpCommunicationMaps | ( | ) |
Sets up the communication maps.
Definition at line 116 of file fetisolver.C.
References oofem::IntArray::at(), commBuff, oofem::DofManager_shared, oofem::NumericalMethod::domain, oofem::NumericalMethod::giveEngngModel(), oofem::IntArray::giveSize(), masterCommMap, OOFEM_LOG_DEBUG, processCommunicator, and oofem::IntArray::resize().
Referenced by solve().
|
overridevirtual |
Solves the given linear system by LDL^T factorization. Implementation rely on factorization support provided by mapped sparse matrix. It calls Lhs->factorized()->backSubstitutionWith(*solutionArray). Sets solved flag to 1 if o.k.
| A | Coefficient matrix |
| b | Right hand side |
| x | Solution array |
Implements oofem::SparseLinearSystemNM.
Definition at line 1010 of file fetisolver.C.
References oofem::FloatArray::add(), oofem::FloatMatrix::beInverseOf(), oofem::FloatArray::beProductOf(), oofem::FloatArray::beTProductOf(), oofem::FloatMatrix::beTProductOf(), commBuff, oofem::CR_CONVERGED, d, dd, oofem::NumericalMethod::domain, energyNorm_comput_flag, oofem::NumericalMethod::engngModel, err, FETISOLVER_ZERONUM, FETISolverIterationBreak, FETISolverIterationContinue, g, gamma, oofem::NumericalMethod::giveEngngModel(), oofem::SparseMtrx::giveNumberOfRows(), oofem::FloatArray::giveSize(), l, oofem::Skyline::ldl_feti_sky(), limit, localGammas, masterCommunicator, masterMapDirectionVector(), masterMapGammas(), masterMapPPVector(), masterMapQQProduct(), masterMapRBM(), masterMapResiduals(), masterMapSolution(), ni, nse, nsem, OOFEM_ERROR, OOFEM_LOG_DEBUG, OOFEM_LOG_INFO, OOFEM_LOG_RELEVANT, p, pp, processCommunicator, projection(), q, qq, rbm, rbmAddr, oofem::Skyline::rbmodes(), se, setUpCommunicationMaps(), oofem::FloatArray::subtract(), and w.
| int oofem::FETISolver::unpackDirectionVector | ( | ProcessCommunicator & | processComm | ) |
Definition at line 747 of file fetisolver.C.
References oofem::IntArray::at(), dd, oofem::NumericalMethod::domain, oofem::ProcessCommunicator::giveProcessCommunicatorBuff(), oofem::ProcessCommunicatorBuff::giveRecvBuff(), oofem::IntArray::giveSize(), oofem::ProcessCommunicator::giveToRecvMap(), and oofem::CommunicationBuffer::read().
| int oofem::FETISolver::unpackGammas | ( | ProcessCommunicator & | processComm | ) |
Definition at line 980 of file fetisolver.C.
References oofem::ProcessCommunicator::giveProcessCommunicatorBuff(), oofem::ProcessCommunicatorBuff::giveRecvBuff(), localGammas, nse, and oofem::CommunicationBuffer::read().
| int oofem::FETISolver::unpackPPVector | ( | ProcessCommunicator & | processComm | ) |
Definition at line 858 of file fetisolver.C.
References oofem::ProcessCommunicator::giveProcessCommunicatorBuff(), oofem::ProcessCommunicator::giveRank(), oofem::ProcessCommunicatorBuff::giveRecvBuff(), oofem::ProcessCommunicator::giveToRecvMap(), masterCommunicator, p, and oofem::CommunicationBuffer::read().
| int oofem::FETISolver::unpackResiduals | ( | ProcessCommunicator & | processComm | ) |
Definition at line 596 of file fetisolver.C.
References g, oofem::ProcessCommunicator::giveProcessCommunicatorBuff(), oofem::ProcessCommunicator::giveRank(), oofem::ProcessCommunicatorBuff::giveRecvBuff(), oofem::ProcessCommunicator::giveToRecvMap(), masterCommunicator, and oofem::CommunicationBuffer::read().
| int oofem::FETISolver::unpackSolution | ( | ProcessCommunicator & | processComm | ) |
Definition at line 480 of file fetisolver.C.
References oofem::IntArray::at(), dd, oofem::NumericalMethod::domain, oofem::NumericalMethod::giveEngngModel(), oofem::ProcessCommunicator::giveProcessCommunicatorBuff(), oofem::ProcessCommunicatorBuff::giveRecvBuff(), oofem::IntArray::giveSize(), oofem::ProcessCommunicator::giveToRecvMap(), OOFEM_LOG_DEBUG, and oofem::CommunicationBuffer::read().
|
private |
Common Communicator buffer.
Definition at line 96 of file fetisolver.h.
Referenced by setUpCommunicationMaps(), solve(), and ~FETISolver().
|
private |
Definition at line 89 of file fetisolver.h.
Referenced by FETISolver(), masterMapDirectionVector(), packDirectionVector(), and solve().
|
private |
Definition at line 89 of file fetisolver.h.
Referenced by masterMapDirectionVector(), masterMapSolution(), solve(), unpackDirectionVector(), and unpackSolution().
|
private |
Flag indicating computation of energy norm.
Definition at line 101 of file fetisolver.h.
Referenced by FETISolver(), initializeFrom(), and solve().
|
private |
Max allowed error.
Definition at line 75 of file fetisolver.h.
Referenced by FETISolver(), initializeFrom(), and solve().
|
private |
Definition at line 89 of file fetisolver.h.
Referenced by masterMapResiduals(), solve(), and unpackResiduals().
|
private |
Definition at line 89 of file fetisolver.h.
Referenced by masterMapGammas(), packGammas(), and solve().
|
private |
Rigid body motions of all partitions. On master only.
Definition at line 81 of file fetisolver.h.
Referenced by masterMapRBM(), masterUnpackRBM(), projection(), and solve().
|
private |
Linear dep./indep. trigger.
Definition at line 77 of file fetisolver.h.
Referenced by initializeFrom(), and solve().
|
private |
Definition at line 89 of file fetisolver.h.
Referenced by masterMapGammas(), solve(), and unpackGammas().
|
private |
List of local nodes (at master) participating in communication (list of boundary dof managers).
Definition at line 99 of file fetisolver.h.
Referenced by masterMapDirectionVector(), masterMapPPVector(), masterMapRBM(), masterMapResiduals(), masterMapSolution(), and setUpCommunicationMaps().
|
private |
Definition at line 97 of file fetisolver.h.
Referenced by estimateMaxPackSize(), masterMapDirectionVector(), masterMapPPVector(), masterMapRBM(), masterMapResiduals(), masterMapSolution(), masterUnpackRBM(), packDirectionVector(), packSolution(), solve(), unpackPPVector(), unpackResiduals(), and ~FETISolver().
|
private |
Max number of iterations.
Definition at line 73 of file fetisolver.h.
Referenced by FETISolver(), initializeFrom(), and solve().
|
private |
Definition at line 71 of file fetisolver.h.
Referenced by masterMapGammas(), packQQProducts(), packRBM(), solve(), and unpackGammas().
|
private |
Definition at line 91 of file fetisolver.h.
Referenced by masterMapQQProduct(), masterMapRBM(), masterUnpackQQProduct(), masterUnpackRBM(), packGammas(), and solve().
|
private |
Definition at line 89 of file fetisolver.h.
Referenced by masterMapPPVector(), solve(), and unpackPPVector().
|
private |
Definition at line 93 of file fetisolver.h.
Referenced by FETISolver().
|
private |
Definition at line 89 of file fetisolver.h.
Referenced by masterMapPPVector(), masterMapResiduals(), packPPVector(), packResiduals(), and solve().
|
private |
Definition at line 94 of file fetisolver.h.
Referenced by FETISolver(), setUpCommunicationMaps(), and solve().
|
private |
Definition at line 89 of file fetisolver.h.
Referenced by masterMapQQProduct(), masterUnpackQQProduct(), and solve().
|
private |
Definition at line 89 of file fetisolver.h.
Referenced by masterMapQQProduct(), packQQProducts(), and solve().
|
private |
Rigid body motions.
Definition at line 79 of file fetisolver.h.
Referenced by masterMapRBM(), packRBM(), and solve().
|
private |
Addresses of initial partition contribution to rbm matrix.
Definition at line 85 of file fetisolver.h.
Referenced by masterMapGammas(), masterMapQQProduct(), masterMapRBM(), masterUnpackQQProduct(), masterUnpackRBM(), packGammas(), and solve().
|
private |
|
private |
Primary unknowns.
Definition at line 87 of file fetisolver.h.
Referenced by masterMapSolution(), packSolution(), and solve().