1 /* $Header: /var/cvs/mbdyn/mbdyn/mbdyn-1.0/mbdyn/aero/aerodata_impl.h,v 1.18 2017/01/12 14:45:58 masarati Exp $ */ 2 /* 3 * MBDyn (C) is a multibody analysis code. 4 * http://www.mbdyn.org 5 * 6 * Copyright (C) 1996-2017 7 * 8 * Pierangelo Masarati <masarati@aero.polimi.it> 9 * Paolo Mantegazza <mantegazza@aero.polimi.it> 10 * 11 * Dipartimento di Ingegneria Aerospaziale - Politecnico di Milano 12 * via La Masa, 34 - 20156 Milano, Italy 13 * http://www.aero.polimi.it 14 * 15 * Changing this copyright notice is forbidden. 16 * 17 * This program is free software; you can redistribute it and/or modify 18 * it under the terms of the GNU General Public License as published by 19 * the Free Software Foundation (version 2 of the License). 20 * 21 * 22 * This program is distributed in the hope that it will be useful, 23 * but WITHOUT ANY WARRANTY; without even the implied warranty of 24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 25 * GNU General Public License for more details. 26 * 27 * You should have received a copy of the GNU General Public License 28 * along with this program; if not, write to the Free Software 29 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 30 */ 31 32 #ifndef AERODATA_IMPL_H 33 #define AERODATA_IMPL_H 34 35 #include "aerodata.h" 36 37 /* STAHRAeroData - begin */ 38 39 class STAHRAeroData : public AeroData { 40 protected: 41 integer profile; 42 43 public: 44 STAHRAeroData( 45 int i_p, int i_dim, 46 AeroData::UnsteadyModel u, integer p, 47 DriveCaller *ptime = 0); 48 virtual ~STAHRAeroData(void); 49 50 std::ostream& Restart(std::ostream& out) const; 51 int GetForces(int i, const doublereal* W, doublereal* TNG, outa_t& OUTA); 52 int GetForcesJac(int i, const doublereal* W, doublereal* TNG, Mat6x6& J, outa_t& OUTA); 53 }; 54 55 /* STAHRAeroData - end */ 56 57 58 /* C81AeroData - begin */ 59 60 class C81AeroData : public AeroData { 61 protected: 62 integer profile; 63 const c81_data* data; 64 65 public: 66 C81AeroData( 67 int i_p, int i_dim, 68 AeroData::UnsteadyModel u, integer p, const c81_data* d, 69 DriveCaller *ptime = 0); 70 virtual ~C81AeroData(void); 71 72 virtual std::ostream& Restart(std::ostream& out) const; 73 virtual int GetForces(int i, const doublereal* W, doublereal* TNG, outa_t& OUTA); 74 virtual int GetForcesJac(int i, const doublereal* W, doublereal* TNG, Mat6x6& J, outa_t& OUTA); 75 }; 76 77 /* C81AeroData - end */ 78 79 80 /* C81MultipleAeroData - begin */ 81 82 struct C81AirfoilStation { 83 integer profile; 84 const c81_data *data; 85 doublereal upper_bound; 86 }; 87 88 class C81MultipleAeroData : public AeroData { 89 protected: 90 std::vector<unsigned> profiles; 91 std::vector<doublereal> upper_bounds; 92 std::vector<const c81_data *> data; 93 integer curr_data; 94 95 public: 96 C81MultipleAeroData( 97 int i_p, int i_dim, 98 AeroData::UnsteadyModel u, 99 std::vector<unsigned>& p, 100 std::vector<doublereal>& ub, 101 std::vector<const c81_data*>& d, 102 DriveCaller *ptime = 0); 103 ~C81MultipleAeroData(void); 104 105 std::ostream& Restart(std::ostream& out) const; 106 void SetSectionData(const doublereal& abscissa, 107 const doublereal& chord, 108 const doublereal& forcepoint, 109 const doublereal& velocitypoint, 110 const doublereal& twist, 111 const doublereal& omega = 0.); 112 113 int GetForces(int i, const doublereal* W, doublereal* TNG, outa_t& OUTA); 114 int GetForcesJac(int i, const doublereal* W, doublereal* TNG, Mat6x6& J, outa_t& OUTA); 115 }; 116 117 /* C81MultipleAeroData - end */ 118 119 /* C81InterpolatedAeroData - begin */ 120 121 class C81InterpolatedAeroData : public AeroData { 122 protected: 123 std::vector<unsigned> profiles; 124 std::vector<doublereal> upper_bounds; 125 std::vector<const c81_data *> data; 126 127 std::vector<c81_data> i_data; 128 129 public: 130 C81InterpolatedAeroData( 131 int i_p, int i_dim, 132 AeroData::UnsteadyModel u, 133 std::vector<unsigned>& p, 134 std::vector<doublereal>& ub, 135 std::vector<const c81_data *>& d, 136 doublereal dcltol, 137 DriveCaller *ptime = 0); 138 ~C81InterpolatedAeroData(void); 139 140 std::ostream& Restart(std::ostream& out) const; 141 void SetSectionData(const doublereal& abscissa, 142 const doublereal& chord, 143 const doublereal& forcepoint, 144 const doublereal& velocitypoint, 145 const doublereal& twist, 146 const doublereal& omega = 0.); 147 148 int GetForces(int i, const doublereal* W, doublereal* TNG, outa_t& OUTA); 149 int GetForcesJac(int i, const doublereal* W, doublereal* TNG, Mat6x6& J, outa_t& OUTA); 150 }; 151 152 /* C81InterpolatedAeroData - end */ 153 154 /* TheodorsenAeroData - begin */ 155 156 class TheodorsenAeroData : public AeroData { 157 protected: 158 integer iParam; 159 doublereal d14, d34; 160 doublereal chord; 161 doublereal a; 162 doublereal A1, A2, b1, b2; 163 doublereal *alpha_pivot, *dot_alpha_pivot, *dot_alpha, *ddot_alpha; 164 doublereal *cfx_0, *cfy_0, *cmz_0; 165 doublereal *clalpha; 166 doublereal *prev_alpha_pivot, *prev_dot_alpha; 167 doublereal prev_time; 168 169 AeroData *pAeroData; 170 171 public: 172 TheodorsenAeroData( 173 int i_p, int i_dim, 174 AeroData *pa, DriveCaller *ptime = 0); 175 virtual ~TheodorsenAeroData(void); 176 177 virtual std::ostream& Restart(std::ostream& out) const; 178 virtual void SetAirData(const doublereal& rho, const doublereal& c); 179 180 virtual void SetSectionData(const doublereal& abscissa, 181 const doublereal& chord, 182 const doublereal& forcepoint, 183 const doublereal& velocitypoint, 184 const doublereal& twist, 185 const doublereal& omega = 0.); 186 187 188 // aerodynamic models with internal states 189 virtual unsigned int iGetNumDof(void) const; 190 virtual DofOrder::Order GetDofType(unsigned int i) const; 191 virtual void 192 AssRes(SubVectorHandler& WorkVec, 193 doublereal dCoef, 194 const VectorHandler& XCurr, 195 const VectorHandler& XPrimeCurr, 196 integer iFirstIndex, integer iFirstSubIndex, 197 int i, const doublereal* W, doublereal* TNG, outa_t& OUTA); 198 virtual void 199 AssJac(FullSubMatrixHandler& WorkMat, 200 doublereal dCoef, 201 const VectorHandler& XCurr, 202 const VectorHandler& XPrimeCurr, 203 integer iFirstIndex, integer iFirstSubIndex, 204 const Mat3xN& vx, const Mat3xN& wx, Mat3xN& fq, Mat3xN& cq, 205 int i, const doublereal* W, doublereal* TNG, Mat6x6& J, outa_t& OUTA); 206 virtual void 207 AfterConvergence( int i, const VectorHandler& X, const VectorHandler& XP ); 208 }; 209 210 /* TheodorsenAeroData - end */ 211 212 #endif // AERODATA_IMPL_H 213 214