00001 #include "fixedvaluecondition.h" 00002 00003 00004 void FixedValueCondition::applyConditions(VecDouble &v) 00005 { 00006 00007 for (unsigned i=0;i<data.size();i++) 00008 { 00009 v(data[i].index)=data[i].values(0); 00010 } 00011 } 00012 00013 void FixedValueCondition::applyConditions(ArrayOfVecDouble &v) 00014 { 00015 for (unsigned i=0;i<data.size();i++) 00016 { 00017 assert(v.vecs_size() == data[i].values.size()); 00018 for (unsigned j=0;j<v.vecs_size();j++) 00019 { 00020 v(data[i].index,j)=data[i].values(j); 00021 } 00022 } 00023 00024 } 00025 00026 00027 00028 00029 void FixedValueCondition::addFixedCondition(OrthoMesh &mesh, Point3D &p,double value) 00030 { 00031 OrthoMesh::Cell_It cell = mesh.getCellAt(p); 00032 Node node; 00033 node.index = cell->index(); 00034 node.values.reinit(1); 00035 node.values(0)= value; 00036 data.push_back(node); 00037 00038 } 00039 00040 00041 void FixedValueCondition::addFixedCondition(unsigned index, double value) 00042 { 00043 Node node; 00044 node.index = index; 00045 node.values.reinit(1); 00046 node.values(0)= value; 00047 data.push_back(node); 00048 } 00049 00050 00051 FixedValueCondition::FixedValueCondition() 00052 { 00053 00054 } 00055 00056 00057 void FixedValueCondition::addTransportFixedCondition(OrthoMesh &mesh,const VecWellInfo &wells) 00058 { 00059 OrthoMesh::Cell_It cell = mesh.begin_cell(); 00060 OrthoMesh::Cell_It endc = mesh.end_cell(); 00061 Node node; 00062 for(;cell!=endc;cell++) 00063 { 00064 Point3D p; 00065 cell->barycenter(p); 00066 for (unsigned i=0;i<wells.size();i++) 00067 { 00068 if (wells[i].isPointInWell(p)) 00069 { 00070 node.index=cell->index(); 00071 node.values=wells[i].getTransportBC(); 00072 } 00073 } 00074 } 00075 } 00076 00077