More realistic calculation of vortices at the blades and therefore real airfoil parameters can be used now (not to be mixed up with the vortex ring state which is still not simulated), ground effect is now continuous e. g. at buildings, calculating of the rotor in more than 4 directions, better documentation of the airfoil parameters.
125 lines
4.4 KiB
C++
125 lines
4.4 KiB
C++
#ifndef _ROTORPART_HPP
|
|
#define _ROTORPART_HPP
|
|
#include <sstream>
|
|
#include <iostream>
|
|
namespace yasim {
|
|
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 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(char *parametername, float value);
|
|
void setRotor(Rotor *rotor);
|
|
void setTorqueOfInertia(float toi);
|
|
void writeInfo(std::ostringstream &buffer);
|
|
|
|
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 _directionofzentipetalforce[3];
|
|
float _directionofrotorpart[3];
|
|
float _zentipetalforce;
|
|
float _maxpitch;
|
|
float _minpitch;
|
|
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,_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;
|
|
};
|
|
std::ostream & operator<<(std::ostream & out, const Rotorpart& rp);
|
|
}; // namespace yasim
|
|
#endif // _ROTORPART_HPP
|