HG-MD  1
Classes | Public Member Functions | Friends
CTangentialSprings Class Reference

Member variable of Particle storing all tangential springs $\vec{\delta}_{ij}^t$ of particle PI with contacting particles PJ. More...

#include <CTangentialSpring.h>

List of all members.

Classes

struct  check_spring_time
 Construction required for the erase/remove_if stuff. More...

Public Member Functions

vector< int > to_be_erased (Mdouble time)
 Function selects the tangential spring vector for particle-particle interations (also removed not used springs}.
void to_erase (Mdouble time)
 Function selects the tangential spring vector for particle-particle interations (also removed not used springs}.
CTangentialSpringselect_particle_spring (int P, Mdouble time_, Mdouble dt)
 Function selects the tangential spring vector for particle-particle interations (also removed not used springs}.
CTangentialSpringselect_wall_spring (int W, Mdouble time_, Mdouble dt)
 Function selects the tangential spring vector for particle-particle interations (also removed not used springs}.
void reset ()
 Resets the tangential springs.
void print (std::ostream &os, Mdouble time_)
 outputs all current active tangential springs

Friends

std::ostream & operator<< (std::ostream &os, const CTangentialSprings &p)
 writes all springs
std::istream & operator>> (std::istream &is, CTangentialSprings &p)
 reads all springs

Detailed Description

Member variable of Particle storing all tangential springs $\vec{\delta}_{ij}^t$ of particle PI with contacting particles PJ.

A tangential spring between PI and PJ can be stored in either particle depending on which particle is the first particle in MD::compute_internal_forces.

Geometrically, there can be no more than 13 possible contacts in 3D, so the vector size is limited.


Member Function Documentation

void CTangentialSprings::print ( std::ostream &  os,
Mdouble  time_ 
) [inline]

outputs all current active tangential springs

                                                  {
                os << "Tangential Springs: N=" << size() << endl;
                for (CTangentialSprings::iterator it=begin(); it!=end(); it++)
                        if (it->time>=time_) {
                                        it->print(os); os << endl; 
                        }
        }
void CTangentialSprings::reset ( ) [inline]

Resets the tangential springs.

Referenced by Chute::initialize_inflow_particle().

                     {
                clear();
                reserve(13);
        }

Function selects the tangential spring vector for particle-particle interations (also removed not used springs}.

Referenced by MD::compute_internal_forces(), and MD::compute_plastic_internal_forces().

                                                                                    {
                //Remove_if reconstructs the vector with only elements passing the check_spring_time function
                //Erase removes the end of the vector
                erase(remove_if(begin(),end(),bind2nd(check_spring_time(),time_)),end());       
                
                //Loops over all Springs ant returns the correct one (if it exists)
                for (CTangentialSprings::iterator it=begin(); it!=end();it++){
                        if (it->pParticle==P)
                        {
                                it->time=time_+dt; 
                                return &(*it);
                        }
                }
                
                //if not, create it
                push_back(CTangentialSpring(P,-1,time_+dt));
                return &(back());
        }

Function selects the tangential spring vector for particle-particle interations (also removed not used springs}.

Referenced by MD::compute_walls().

                                                                                {
                //Remove_if reconstructs the vector with only elements passing the check_spring_time function
                //Erase removes the end of the vector
                erase(remove_if(begin(),end(),bind2nd(check_spring_time(),time_)),end());       
                
                //Loops over all Springs ant returns the correct one (if it exists)
                for (CTangentialSprings::iterator it=begin(); it!=end();it++){
                        if (it->pWall==W)
                        {
                                it->time=time_+dt; 
                                return &(*it);
                        }
                }
                
                //if not, create it
                //~ cout << "created pw " << time_ << " " << W << endl;
                push_back(CTangentialSpring(-1,W,time_+dt));
                return &(back());
        }
vector<int> CTangentialSprings::to_be_erased ( Mdouble  time) [inline]

Function selects the tangential spring vector for particle-particle interations (also removed not used springs}.

                                               {
                vector<int> retval;
                for (unsigned int i=0; i<size(); i++)
                        if (operator[](i).time<time) {
                                retval.push_back(i);
                                //cout << "to be erased " << time << " " << operator[](i).pParticle << " " << operator[](i).pWall << " " << size() << endl;
                        }
                return retval;
        }
void CTangentialSprings::to_erase ( Mdouble  time) [inline]

Function selects the tangential spring vector for particle-particle interations (also removed not used springs}.

                                    {
                erase(remove_if(begin(),end(),bind2nd(check_spring_time(),time)),end());        
        }

Friends And Related Function Documentation

std::ostream& operator<< ( std::ostream &  os,
const CTangentialSprings p 
) [friend]

writes all springs

        {
                os << p.size() << " ";
                for (unsigned int i=0; i<p.size(); i++) os << p[i] << " ";
                return os;
        }       
std::istream& operator>> ( std::istream &  is,
CTangentialSprings p 
) [friend]

reads all springs

        {
                //should return empty spring if read from is failed
                int n; is >> n; 
                if (is.fail()) {
                        p.resize(0);
                } else {
                        p.resize(n);
                        for (unsigned int i=0; i<p.size(); i++) is >> p[i];
                }
                return is;
        }

The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines