ESyS-Particle  4.0.1
SimpleParticleData.hpp
00001 
00002 //                                                         //
00003 // Copyright (c) 2003-2011 by The University of Queensland //
00004 // Earth Systems Science Computational Centre (ESSCC)      //
00005 // http://www.uq.edu.au/esscc                              //
00006 //                                                         //
00007 // Primary Business: Brisbane, Queensland, Australia       //
00008 // Licensed under the Open Software License version 3.0    //
00009 // http://www.opensource.org/licenses/osl-3.0.php          //
00010 //                                                         //
00012 
00013 namespace esys
00014 {
00015   namespace lsm
00016   {
00017 //===============================================================================
00018     SimpleParticleData::SimpleParticleData()
00019       : m_id(-1),
00020         m_tag(-1),
00021         m_position(),
00022         m_radius(0.0),
00023         m_mass(0.0)
00024     {
00025       setMass(get3dMass());
00026     }
00027 
00028     SimpleParticleData::SimpleParticleData(
00029       Id id,
00030       Tag tag,
00031       const Vec3 &position,
00032       double radius
00033     )
00034       : m_id(id),
00035         m_tag(tag),
00036         m_position(position),
00037         m_radius(radius),
00038         m_mass(0.0)
00039     {
00040       setMass(get3dMass());
00041     }
00042 
00043     SimpleParticleData::SimpleParticleData(
00044       const Vec3 &position,
00045       double radius,
00046       Id id,
00047       Tag tag
00048     )
00049       : m_id(id),
00050         m_tag(tag),
00051         m_position(position),
00052         m_radius(radius),
00053         m_mass(0.0)
00054     {
00055       setMass(get3dMass());
00056     }
00057 
00058     SimpleParticleData::SimpleParticleData(const SimpleParticleData &p)
00059       : m_id(p.m_id),
00060         m_tag(p.m_tag),
00061         m_position(p.m_position),
00062         m_radius(p.m_radius),
00063         m_mass(p.m_mass)
00064     {
00065     }
00066 
00067     SimpleParticleData &SimpleParticleData::operator=(const SimpleParticleData &p)
00068     {
00069       m_id =       p.m_id;
00070       m_tag =      p.m_tag;
00071       m_position = p.m_position;
00072       m_radius =   p.m_radius;
00073       m_mass =     p.m_mass;
00074 
00075       return *this;
00076     }
00077 
00078     bool SimpleParticleData::operator==(
00079       const SimpleParticleData &particleData
00080     ) const
00081     {
00082       return
00083         (
00084           (getId()       == particleData.getId())
00085           &&
00086           (getPosition() == particleData.getPosition())
00087           &&
00088           (getRadius()   == particleData.getRadius())
00089           &&
00090           (getTag()      == particleData.getTag())
00091         );
00092     }
00093 
00094     SimpleParticleData::Id SimpleParticleData::getId() const
00095     {
00096       return m_id;
00097     }
00098 
00099     void SimpleParticleData::setId(const Id &id)
00100     {
00101       m_id = id;
00102     }
00103 
00104     void SimpleParticleData::setID(const Id &id)
00105     {
00106       setId(id);
00107     }
00108 
00109     SimpleParticleData::Id SimpleParticleData::getID() const
00110     {
00111       return getId();
00112     }
00113     
00114     const Vec3 &SimpleParticleData::getPosition() const
00115     {
00116       return m_position;
00117     }
00118 
00119     void SimpleParticleData::setPosition(const Vec3 &pos)
00120     {
00121       m_position = pos;
00122     }
00123 
00124     SimpleParticleData::Tag SimpleParticleData::getTag() const
00125     {
00126       return m_tag;
00127     }
00128 
00129     void SimpleParticleData::setTag(const SimpleParticleData::Tag &tag)
00130     {
00131       m_tag = tag;
00132     }
00133 
00134     double SimpleParticleData::getRadius() const
00135     {
00136       return m_radius;
00137     }
00138 
00139     void SimpleParticleData::setRadius(const double &r)
00140     {
00141       m_radius = r;
00142     }
00143 
00144     void SimpleParticleData::setMass(double mass)
00145     {
00146       m_mass = mass;
00147     }
00148     
00149     double SimpleParticleData::getMass() const
00150     {
00151       return m_mass;
00152     }
00153 
00154     double SimpleParticleData::get2dMass() const
00155     {
00156       return m_radius*m_radius;
00157     }
00158 
00159     double SimpleParticleData::get3dMass() const
00160     {
00161       return m_radius*m_radius*m_radius;
00162     }
00163 
00164     void SimpleParticleData::read(std::istream &istream)
00165     {
00166       istream
00167         >> m_position
00168         >> m_radius
00169         >> m_id
00170         >> m_tag;
00171     }
00172 
00173     void SimpleParticleData::write(std::ostream &oStream) const
00174     {
00175       const char delim = ' ';
00176       oStream
00177         << getPosition() << delim
00178         << getRadius()   << delim
00179         << getId()       << delim
00180         << getTag();
00181     }
00182 
00183     std::istream &operator>>(std::istream &iStream, SimpleParticleData &particleData)
00184     {
00185       particleData.read(iStream);
00186       return iStream;
00187     }
00188 
00189     std::ostream &operator<<(std::ostream &oStream, const SimpleParticleData &particleData)
00190     {
00191       particleData.write(oStream);
00192       return oStream;
00193     }
00194   };
00195 };