]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/YASim/Rotorpart.hpp
latest updates from JSBSim
[flightgear.git] / src / FDM / YASim / Rotorpart.hpp
index 0eaa6798fd82e176a32c4680e6d4a9ae2dfc0b96..8d68fa98fbe4969f339096d7cd86af7bb66fa2fc 100644 (file)
 #ifndef _ROTORPART_HPP
 #define _ROTORPART_HPP
+#include <iosfwd>
 
 namespace yasim {
-
-class Rotorpart
-{
-public:
-    Rotorpart();
-
-    // Position of this surface in local coords
-    void setPosition(float* p);
-    void getPosition(float* out);
-
-
-    void setPositionForceAttac(float* p);
-    void getPositionForceAttac(float* out);
-
-    void setNormal(float* p);
-    void getNormal(float* out);
-
-    void setMaxPitchForce(float force);
-
-    void setCollective(float pos);
-
-    void setCyclic(float pos);
-
-    void setSpeed(float* p);
-    void setDirectionofZentipetalforce(float* p);
-    void setZentipetalForce(float f);
-    void setMaxpitch(float f);
-    void setMinpitch(float f);
-    void setMaxcyclic(float f);
-    void setMincyclic(float f);
-    void setDelta3(float f);
-    void setDynamic(float f);
-    void setTranslift(float f);
-    void setC2(float f);
-    void setZentForce(float f);
-    void setRelLenHinge(float f);
-    void setRelamp(float f);
-
-    float getAlpha(int i);
-    float getrealAlpha(void);
-    char* getAlphaoutput(int i);
-    void setAlphaoutput(char *text,int i);
-
-    void inititeration(float dt,float *rot);
-    
-    float getWeight(void);
-    void setWeight(float value);
-
-
-
-
-
-
-    void calcForce(float* v, float rho, float* forceOut, float* torqueOut);
-    void setlastnextrp(Rotorpart*lastrp,Rotorpart*nextrp,Rotorpart *oppositerp);
-    void setTorque(float torque_max_force,float torque_no_force);
-    void setOmega(float value);
-    void setOmegaN(float value);
-    float getIncidence();
-    float getPhi();
-    void setAlphamin(float f);
-    void setAlphamax(float f);
-    void setAlpha0(float f);
-    void setAlpha0factor(float f);
-    void setLen(float value);
-
-
-private:
-    void strncpy(char *dest,const char *src,int maxlen);
-    Rotorpart *_lastrp,*_nextrp,*_oppositerp;
-
-    float _dt;
-    float _pos[3];    // position in local coords
-    float _posforceattac[3];    // position in local coords
-    float _normal[3]; //direcetion of the rotation axis
-    float _torque_max_force;
-    float _torque_no_force;
-    float _speed[3];
-    float _directionofzentipetalforce[3];
-    float _zentipetalforce;
-    float _maxpitch;
-    float _minpitch;
-    float _maxpitchforce;
-    float _maxcyclic;
-    float _mincyclic;
-    float _cyclic;
-    float _collective;
-    float _delta3;
-    float _dynamic;
-    float _translift;
-    float _c2;
-    float _mass;
-    float _alpha;
-    float _alphaalt;
-    float _alphamin,_alphamax,_alpha0,_alpha0factor;
-    float _rellenhinge;
-    float _relamp;
-    float _omega,_omegan;
-    float _phi;
-    float _len;
-    float _incidence;
-
-
-
-          
-    char _alphaoutputbuf[2][256];
-    int _alpha2type;
-
-};
-
+    class Rotor;
+    class Rotorpart
+    {
+        friend std::ostream &  operator<<(std::ostream & out, const Rotorpart& rp);
+    private:
+        float _dt;
+        float _last_torque[3];
+        int _compiled;
+    public:
+        Rotorpart();
+
+        // Position of this surface in local coords
+        void setPosition(float* p);
+        void getPosition(float* out);
+        void setCompiled() {_compiled=1;}
+        float getDt() {return _dt;}
+        void setPositionForceAttac(float* p);
+        void getPositionForceAttac(float* out);
+        void setNormal(float* p);
+        void getNormal(float* out);
+        void setCollective(float pos);
+        void setCyclic(float pos);
+        void getLastTorque(float *t)
+            {for (int i=0;i<3;i++) t[i]=_last_torque[i];}
+        void getAccelTorque(float relaccel,float *t);
+        void setSpeed(float* p);
+        void setDirectionofZentipetalforce(float* p);
+        void setDirectionofRotorPart(float* p);
+        void setZentipetalForce(float f);
+        void setMaxpitch(float f);
+        void setMinpitch(float f);
+        void setMaxcyclic(float f);
+        void setMincyclic(float f);
+        void setDelta3(float f);
+        void setDynamic(float f);
+        void setTranslift(float f);
+        void setC2(float f);
+        void setZentForce(float f);
+        void setRelLenHinge(float f);
+        void setRelamp(float f);
+        void setDiameter(float f);
+        float getAlpha(int i);
+        float getrealAlpha(void);
+        char* getAlphaoutput(int i);
+        void setAlphaoutput(char *text,int i);
+        void inititeration(float dt,float *rot);
+        float getWeight(void);
+        void setWeight(float value);
+        void calcForce(float* v, float rho, float* forceOut, float* torqueOut,
+            float* torque_scalar);
+        float calculateAlpha(float* v, float rho, float incidence, float cyc,
+            float alphaalt, float *torque,float *returnlift=0);
+        void setlastnextrp(Rotorpart*lastrp,Rotorpart*nextrp,
+            Rotorpart *oppositerp,Rotorpart*last90rp,Rotorpart*next90rp);
+        void setTorque(float torque_max_force,float torque_no_force);
+        void setOmega(float value);
+        void setOmegaN(float value);
+        void setPhi(float value);
+        void setDdtOmega(float value);
+        float getIncidence();
+        float getPhi();
+        void setAlphamin(float f);
+        void setAlphamax(float f);
+        void setAlpha0(float f);
+        void setAlpha0factor(float f);
+        void setLen(float value);
+        void setParameter(const char *parametername, float value);
+        void setRotor(Rotor *rotor);
+        void setTorqueOfInertia(float toi);
+        void writeInfo(std::ostringstream &buffer);
+        void setSharedFlapHinge(bool s);
+        void setDirection(float direction);
+        float getAlphaAlt() {return _alphaalt;}
+
+    private:
+        void strncpy(char *dest,const char *src,int maxlen);
+        Rotorpart *_lastrp,*_nextrp,*_oppositerp,*_last90rp,*_next90rp;
+        Rotor *_rotor;
+
+        float _pos[3];    // position in local coords
+        float _posforceattac[3];    // position in local coords
+        float _normal[3]; //direcetion of the rotation axis
+        float _torque_max_force;
+        float _torque_no_force;
+        float _speed[3];
+        float _direction_of_movement[3];
+        float _directionofcentripetalforce[3];
+        float _directionofrotorpart[3];
+        float _centripetalforce;
+        float _cyclic;
+        float _collective;
+        float _delta3;
+        float _dynamic;
+        float _translift;
+        float _c2;
+        float _mass;
+        float _alpha;
+        float _alphaalt;
+        float _alphamin,_alphamax,_alpha0,_alpha0factor;
+        float _rellenhinge;
+        float _relamp;
+        float _omega,_omegan,_ddt_omega;
+        float _phi;
+        float _len;
+        float _incidence;
+        float _twist; //outer incidence = inner inner incidence + _twist
+        int _number_of_segments;
+        float _rel_len_where_incidence_is_measured;
+        float _rel_len_blade_start;
+        float _diameter;
+        float _torque_of_inertia;
+        float _torque; 
+        // total torque of rotor (scalar) for calculating new rotor rpm
+        char _alphaoutputbuf[2][256];
+        int _alpha2type;
+        float _rotor_correction_factor;
+        bool _shared_flap_hinge;
+        float _direction;
+        float _balance;
+    };
+    std::ostream &  operator<<(std::ostream & out, const Rotorpart& rp);
 }; // namespace yasim
 #endif // _ROTORPART_HPP