PlaneBoundaryCondition.hpp
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
00030
00031
00032
00033
00034
00035
00036 #ifndef PLANEBOUNDARYCONDITION_HPP_
00037 #define PLANEBOUNDARYCONDITION_HPP_
00038
00039 #include "AbstractCellPopulationBoundaryCondition.hpp"
00040
00041 #include "ChasteSerialization.hpp"
00042 #include <boost/serialization/base_object.hpp>
00043 #include <boost/serialization/vector.hpp>
00044
00051 template<unsigned DIM>
00052 class PlaneBoundaryCondition : public AbstractCellPopulationBoundaryCondition<DIM>
00053 {
00054 private:
00055
00059 c_vector<double, DIM> mPointOnPlane;
00060
00064 c_vector<double, DIM> mNormalToPlane;
00065
00070 bool mUseJiggledNodesOnPlane;
00071
00073 friend class boost::serialization::access;
00080 template<class Archive>
00081 void serialize(Archive & archive, const unsigned int version)
00082 {
00083 archive & boost::serialization::base_object<AbstractCellPopulationBoundaryCondition<DIM> >(*this);
00084 archive & mUseJiggledNodesOnPlane;
00085 }
00086
00087 public:
00088
00096 PlaneBoundaryCondition(AbstractCellPopulation<DIM>* pCellPopulation,
00097 c_vector<double, DIM> point,
00098 c_vector<double, DIM> normal);
00099
00103 const c_vector<double, DIM>& rGetPointOnPlane() const;
00104
00108 const c_vector<double, DIM>& rGetNormalToPlane() const;
00109
00115 void SetUseJiggledNodesOnPlane(bool useJiggledNodesOnPlane);
00116
00118 bool GetUseJiggledNodesOnPlane();
00119
00127 void ImposeBoundaryCondition(const std::map<Node<DIM>*, c_vector<double, DIM> >& rOldLocations);
00128
00136 bool VerifyBoundaryCondition();
00137
00144 void OutputCellPopulationBoundaryConditionParameters(out_stream& rParamsFile);
00145 };
00146
00147 #include "SerializationExportWrapper.hpp"
00148 EXPORT_TEMPLATE_CLASS_SAME_DIMS(PlaneBoundaryCondition)
00149
00150 namespace boost
00151 {
00152 namespace serialization
00153 {
00157 template<class Archive, unsigned DIM>
00158 inline void save_construct_data(
00159 Archive & ar, const PlaneBoundaryCondition<DIM>* t, const BOOST_PFTO unsigned int file_version)
00160 {
00161
00162 const AbstractCellPopulation<DIM>* const p_cell_population = t->GetCellPopulation();
00163 ar << p_cell_population;
00164
00165
00166 c_vector<double, DIM> point = t->rGetPointOnPlane();
00167 for (unsigned i=0; i<DIM; i++)
00168 {
00169 ar << point[i];
00170 }
00171 c_vector<double, DIM> normal = t->rGetNormalToPlane();
00172 for (unsigned i=0; i<DIM; i++)
00173 {
00174 ar << normal[i];
00175 }
00176 }
00177
00181 template<class Archive, unsigned DIM>
00182 inline void load_construct_data(
00183 Archive & ar, PlaneBoundaryCondition<DIM>* t, const unsigned int file_version)
00184 {
00185
00186 AbstractCellPopulation<DIM>* p_cell_population;
00187 ar >> p_cell_population;
00188
00189
00190 c_vector<double, DIM> point;
00191 for (unsigned i=0; i<DIM; i++)
00192 {
00193 ar >> point[i];
00194 }
00195 c_vector<double, DIM> normal;
00196 for (unsigned i=0; i<DIM; i++)
00197 {
00198 ar >> normal[i];
00199 }
00200
00201
00202 ::new(t)PlaneBoundaryCondition<DIM>(p_cell_population, point, normal);
00203 }
00204 }
00205 }
00206
00207 #endif