PdeAndBoundaryConditions.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #include "PdeAndBoundaryConditions.hpp"
00030
00031 template<unsigned DIM>
00032 PdeAndBoundaryConditions<DIM>::PdeAndBoundaryConditions(AbstractLinearEllipticPde<DIM,DIM>* pPde,
00033 AbstractBoundaryCondition<DIM>* pBoundaryCondition,
00034 bool isNeumannBoundaryCondition,
00035 Vec solution,
00036 bool deleteMemberPointersInDestructor)
00037 : mpPde(pPde),
00038 mpBoundaryCondition(pBoundaryCondition),
00039 mIsNeumannBoundaryCondition(isNeumannBoundaryCondition),
00040 mSolution(NULL),
00041 mDeleteMemberPointersInDestructor(deleteMemberPointersInDestructor)
00042 {
00043 if (solution)
00044 {
00045 mSolution = solution;
00046 }
00047 }
00048
00049 template<unsigned DIM>
00050 PdeAndBoundaryConditions<DIM>::~PdeAndBoundaryConditions()
00051 {
00052
00053 if (mDeleteMemberPointersInDestructor)
00054 {
00055 delete mpPde;
00056 delete mpBoundaryCondition;
00057 }
00058
00059 DestroySolution();
00060 }
00061
00062 template<unsigned DIM>
00063 AbstractLinearEllipticPde<DIM,DIM>* PdeAndBoundaryConditions<DIM>::GetPde()
00064 {
00065 return mpPde;
00066 }
00067
00068 template<unsigned DIM>
00069 AbstractBoundaryCondition<DIM>* PdeAndBoundaryConditions<DIM>::GetBoundaryCondition() const
00070 {
00071 return mpBoundaryCondition;
00072 }
00073
00074 template<unsigned DIM>
00075 Vec PdeAndBoundaryConditions<DIM>::GetSolution()
00076 {
00077 return mSolution;
00078 }
00079
00080 template<unsigned DIM>
00081 Vec PdeAndBoundaryConditions<DIM>::GetSolution() const
00082 {
00083 return mSolution;
00084 }
00085
00086 template<unsigned DIM>
00087 void PdeAndBoundaryConditions<DIM>::SetSolution(Vec solution)
00088 {
00089 mSolution = solution;
00090 }
00091
00092 template<unsigned DIM>
00093 bool PdeAndBoundaryConditions<DIM>::IsNeumannBoundaryCondition()
00094 {
00095 return mIsNeumannBoundaryCondition;
00096 }
00097
00098 template<unsigned DIM>
00099 bool PdeAndBoundaryConditions<DIM>::HasAveragedSourcePde()
00100 {
00101 return (dynamic_cast<AveragedSourcePde<DIM>*>(mpPde) != NULL);
00102 }
00103
00104 template<unsigned DIM>
00105 void PdeAndBoundaryConditions<DIM>::DestroySolution()
00106 {
00107 if (mSolution)
00108 {
00109 VecDestroy(mSolution);
00110 }
00111 }
00112
00113 template<unsigned DIM>
00114 void PdeAndBoundaryConditions<DIM>::SetUpSourceTermsForAveragedSourcePde(TetrahedralMesh<DIM,DIM>* pMesh, std::map< CellPtr, unsigned >* pCellPdeElementMap)
00115 {
00116 assert(HasAveragedSourcePde());
00117 static_cast<AveragedSourcePde<DIM>*>(mpPde)->SetupSourceTerms(*pMesh, pCellPdeElementMap);
00118 }
00119
00121
00123
00124 template class PdeAndBoundaryConditions<1>;
00125 template class PdeAndBoundaryConditions<2>;
00126 template class PdeAndBoundaryConditions<3>;
00127
00128
00129 #include "SerializationExportWrapperForCpp.hpp"
00130 EXPORT_TEMPLATE_CLASS_SAME_DIMS(PdeAndBoundaryConditions)