00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <BoundaryConditionListExpression.hpp>
00021 #include <BoundaryConditionSet.hpp>
00022
00023 #include <BoundaryList.hpp>
00024
00025 BoundaryConditionListExpression::
00026 BoundaryConditionListExpression(const BoundaryConditionListExpression& e)
00027 : Expression(Expression::boundaryConditionList),
00028 __boundaryConditionListType(e.__boundaryConditionListType),
00029 __boundaryConditionSet(e.__boundaryConditionSet)
00030 {
00031 ;
00032 }
00033
00034 BoundaryConditionListExpression::
00035 BoundaryConditionListExpression(const BoundaryConditionListExpression::
00036 BoundaryConditionListType& t)
00037 : Expression(Expression::boundaryConditionList),
00038 __boundaryConditionListType(t)
00039 {
00040 ;
00041 }
00042
00043 BoundaryConditionListExpression::
00044 ~BoundaryConditionListExpression()
00045 {
00046 ;
00047 }
00048
00049 ReferenceCounting<BoundaryConditionSet>
00050 BoundaryConditionListExpression::boundaryConditionSet()
00051 {
00052 return __boundaryConditionSet;
00053 }
00054
00055 void
00056 BoundaryConditionListExpressionSet::
00057 __splitBoundaryList(BoundaryConditionSet& bcSet,
00058 ConstReferenceCounting<PDECondition> pde,
00059 ConstReferenceCounting<Boundary> b)
00060 {
00061 const BoundaryList& boundaryList = dynamic_cast<const BoundaryList&>(*b);
00062
00063 for (BoundaryList::List::const_iterator i = boundaryList.list().begin();
00064 i != boundaryList.list().end(); ++i) {
00065 ConstReferenceCounting<Boundary> boundary = *i;
00066 if (boundary->type() == Boundary::list) {
00067 this->__splitBoundaryList(bcSet, pde, boundary);
00068 } else {
00069 bcSet.addBoundaryCondition(new BoundaryCondition(pde, boundary));
00070 }
00071 }
00072 }
00073
00074 bool BoundaryConditionListExpressionSet::
00075 hasPOVBoundary() const
00076 {
00077 for (BoundaryConditionExpressionList::const_iterator
00078 i = __boundaryConditionExpressionList.begin();
00079 i != __boundaryConditionExpressionList.end(); ++i) {
00080 if ((*i)->hasPOVBoundary()) {
00081 return true;
00082 }
00083 }
00084 return false;
00085 }
00086
00087 bool BoundaryConditionListExpressionSet::
00088 hasPredefinedBoundary() const
00089 {
00090 for (BoundaryConditionExpressionList::const_iterator
00091 i = __boundaryConditionExpressionList.begin();
00092 i != __boundaryConditionExpressionList.end(); ++i) {
00093 if ((*i)->hasPredefinedBoundary()) {
00094 return true;
00095 }
00096 }
00097 return false;
00098 }
00099
00100 void BoundaryConditionListExpressionSet::execute()
00101 {
00102 __boundaryConditionSet = new BoundaryConditionSet();
00103 BoundaryConditionSet& bcSet = (*__boundaryConditionSet);
00104
00105 for (BoundaryConditionExpressionList::iterator
00106 i = __boundaryConditionExpressionList.begin();
00107 i != __boundaryConditionExpressionList.end(); ++i) {
00108 (*i)->execute();
00109 ConstReferenceCounting<BoundaryCondition> b = (*i)->boundaryCondition();
00110 if (b->boundary()->type() == Boundary::list) {
00111 ConstReferenceCounting<Boundary> bc = b->boundary();
00112 ConstReferenceCounting<PDECondition> pde = b->condition();
00113
00114 this->__splitBoundaryList(bcSet, pde, bc);
00115 } else {
00116 bcSet.addBoundaryCondition((*i)->boundaryCondition());
00117 }
00118 }
00119 }
00120
00121 BoundaryConditionListExpressionSet::
00122 BoundaryConditionListExpressionSet(const BoundaryConditionListExpressionSet& e)
00123 : BoundaryConditionListExpression(e),
00124 __boundaryConditionExpressionList(e.__boundaryConditionExpressionList)
00125 {
00126 ;
00127 }
00128
00129 BoundaryConditionListExpressionSet::BoundaryConditionListExpressionSet()
00130 : BoundaryConditionListExpression(BoundaryConditionListExpression::set)
00131 {
00132 ;
00133 }
00134
00135 BoundaryConditionListExpressionSet::~BoundaryConditionListExpressionSet()
00136 {
00137 ;
00138 }
00139