ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/branches/new_design/OOPSE-2.0/src/primitives/DirectionalAtom.hpp
(Generate patch)

Comparing branches/new_design/OOPSE-2.0/src/primitives/DirectionalAtom.hpp (file contents):
Revision 1691, Thu Oct 28 22:34:02 2004 UTC vs.
Revision 1692 by tim, Mon Nov 1 20:15:58 2004 UTC

# Line 1 | Line 1
1 < #ifndef _DIRECTIONALATOM_H_
2 < #define _DIRECTIONALATOM_H_
1 > /*
2 > * Copyright (C) 2000-2004  Object Oriented Parallel Simulation Engine (OOPSE) project
3 > *
4 > * Contact: oopse@oopse.org
5 > *
6 > * This program is free software; you can redistribute it and/or
7 > * modify it under the terms of the GNU Lesser General Public License
8 > * as published by the Free Software Foundation; either version 2.1
9 > * of the License, or (at your option) any later version.
10 > * All we ask is that proper credit is given for our work, which includes
11 > * - but is not limited to - adding the above copyright notice to the beginning
12 > * of your source code files, and to any copyright notice that you may distribute
13 > * with programs based on this work.
14 > *
15 > * This program is distributed in the hope that it will be useful,
16 > * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 > * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 > * GNU Lesser General Public License for more details.
19 > *
20 > * You should have received a copy of the GNU Lesser General Public License
21 > * along with this program; if not, write to the Free Software
22 > * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
23 > *
24 > */
25  
26 < #include <string.h>
27 < #include <stdlib.h>
28 < #include <iostream>
26 > /**
27 > * @file DirectionalAtom.hpp
28 > * @author    tlin
29 > * @date  10/23/2004
30 > * @version 1.0
31 > */
32  
33 < #include "primitives/StuntDouble.hpp"
33 > #ifndef PRIMITIVES_DIRECTIONALATOM_HPP
34 > #define PRIMITIVES_DIRECTIONALATOM_HPP
35 >
36   #include "primitives/Atom.hpp"
37 + #include "types/DirectionalAtomType.hpp"
38 + namespace oopse{
39 +    class DirectionalAtom : public Atom {
40 +        public:
41 +            DirectionalAtom(DirectionalAtomType* dAtomType);
42 +            /**
43 +             * Returns the inertia tensor of this stuntdouble
44 +             * @return the inertia tensor of this stuntdouble
45 +             */
46 +            virtual Mat3x3d getI();
47  
11 class DirectionalAtom : public Atom {
12  
13 public:
14  DirectionalAtom(int theIndex, SimState* theConfig) : Atom(theIndex,
15                                                            theConfig)
16  {
17    objType = OT_DATOM;
48  
49 <    for (int i=0; i < 3; i++)
50 <      for (int j=0; j < 3; j++)
51 <        sU[i][j] = 0.0;
49 >           /**
50 >             * Sets  the previous rotation matrix of this stuntdouble
51 >             * @param a  new rotation matrix
52 >             */        
53 >           virtual void setPrevA(const RotMat3x3d& a);
54 >          
55 >           /**
56 >             * Sets  the current rotation matrix of this stuntdouble
57 >             * @param a  new rotation matrix
58 >             */        
59 >            virtual void setA(const RotMat3x3d& a);
60  
61 <  }
62 <  virtual ~DirectionalAtom() {}
61 >           /**
62 >             * Sets  the rotation matrix of this stuntdouble in specified snapshot
63 >             * @param a rotation matrix to be set
64 >             * @param snapshotNo
65 >             * @see #getA
66 >             */        
67 >            virtual void setA(const RotMat3x3d& a, int snapshotNo);
68  
69 <  virtual void setCoords(void);
69 >            /**
70 >             * Left multiple rotation matrix by another rotation matrix
71 >             * @param m a rotation matrix
72 >             */
73 >            void rotateBy(const RotMat3x3d& m);
74 >            
75 >            /** Sets the internal unit frame of this stuntdouble by three euler angles */
76 >            void setUnitFrameFromEuler(double phi, double theta, double psi);
77  
78 <  void printAmatIndex( void );
79 <  
80 <  void setUnitFrameFromEuler(double phi, double theta, double psi);
81 <  void setEuler( double phi, double theta, double psi );
78 >            /**
79 >             * Returns the gradient of this stuntdouble
80 >             * @return the gradient of this stuntdouble
81 >             */
82 >            virtual std::vector<double> getGrad();
83  
84 <  void zeroForces();
84 >            virtual void accept(BaseVisitor* v);
85  
86 <  void getA( double the_A[3][3] ); // get the full rotation matrix
87 <  void setA( double the_A[3][3] );
88 <  void rotateBy( double by_A[3][3] );  // rotate your frame using this matrix
86 >        protected:
87 >            Mat3x3d inertiaTensor_;   /**< inertial tensor */    
88 >            RotMat3x3d sU_;               /**< body fixed standard unit vector */
89 >    };
90  
91 <  void getU( double the_u[3] ); // get the unit vetor
40 <  void updateU( void );
91 > }//namepace oopse
92  
93 <  void getQ( double the_q[4] ); // get the quanternions
43 <  void setQ( double the_q[4] );
44 <
45 <  void getJ( double theJ[3] );
46 <  void setJ( double theJ[3] );
47 <
48 <  void getTrq( double theT[3] );
49 <  void addTrq( double theT[3] );
50 <
51 <  void setI( double the_I[3][3] );
52 <  void getI( double the_I[3][3] );
53 <  
54 <  void lab2Body( double r[3] );
55 <  void body2Lab( double r[3] );
56 <
57 <  double getZangle( );
58 <  void setZangle( double zAng );
59 <  void addZangle( double zAng );
60 <
61 <  // Four functions added for derivatives with respect to Euler Angles:
62 <  // (Needed for minimization routines):
63 <
64 <  void getGrad(double gradient[6] );
65 <  void getEulerAngles( double myEuler[3] );
66 <
67 <  double max(double x, double y);
68 <  double min(double x, double y);
69 <
70 <  virtual void accept(BaseVisitor* v) {v->visit(this);}
71 <  
72 < private:
73 <  int dIndex;
74 <
75 <  double sU[3][3];       // the standard unit vectors    ( body fixed )
76 <  
77 <  double jx, jy, jz;    // the angular momentum vector ( body fixed )
78 <  
79 <  double Ixx, Ixy, Ixz; // the inertial tensor matrix  ( body fixed )
80 <  double Iyx, Iyy, Iyz;
81 <  double Izx, Izy, Izz;
82 <
83 < };
84 <
85 < #endif
93 > #endif //PRIMITIVES_DIRECTIONALATOM_HPP

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines