#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