2578 DEBUGCOUT(
"Entering ReadRotor()" << std::endl);
2581 pedantic_cout(
"WARNING: the syntax changed; use a comma ',' "
2582 "instead of a colon ':' after the keyword "
2583 "\"induced velocity\"" << std::endl);
2585 const char* sKeyWords[] = {
2586 "induced" "velocity",
2589 "uniform" "sectional",
2625 silent_cerr(
"InducedVelocity(" << uLabel <<
"): deprecated keyword \"hinge\"; use \"orientation\" instead at line " << HP.
GetLineData() << std::endl);
2642 switch (InducedType) {
2644 DEBUGCOUT(
"No induced velocity is considered" << std::endl);
2650 silent_cerr(
"Rotor(" << uLabel <<
"): "
2651 "invalid radius " << dR
2664 NoRotor(uLabel, pDO, pCraft, rrot, pRotor,
2669 case UNIFORM_SECTIONAL:
2672 case DYNAMICINFLOW: {
2674 if (InducedType == GLAUERT && HP.
IsKeyWord(
"type")) {
2687 }
else if (HP.
IsKeyWord(
"white" "and" "blake")) {
2690 }
else if (HP.
IsKeyWord(
"pitt" "and" "peters")) {
2697 silent_cerr(
"warning, \"drees 2\" deprecated at line " << HP.
GetLineData() <<
"; use \"drees\" instead" << std::endl);
2701 silent_cerr(
"Rotor(" << uLabel <<
"): "
2702 "unknown variant of Glauert's induced velocity at line "
2709 DEBUGCOUT(
"Reference rotation speed: " << dOR << std::endl);
2711 silent_cerr(
"Rotor(" << uLabel <<
"): "
2712 "invalid reference speed " << dOR
2719 DEBUGCOUT(
"Radius: " << dR << std::endl);
2721 silent_cerr(
"Rotor(" << uLabel <<
"): "
2722 "invalid radius " << dR
2729 bool bGotInitialValues(
false);
2735 unsigned iMaxIter = unsigned(-1);
2736 doublereal dTolerance = std::numeric_limits<double>::max();
2741 while (HP.
IsArg()) {
2747 silent_cerr(
"Rotor(" << uLabel <<
"): "
2748 "providing another \"ground\" node "
2757 }
else if (HP.
IsKeyWord(
"initial" "value")) {
2758 if (InducedType != DYNAMICINFLOW) {
2759 silent_cerr(
"Rotor(" << uLabel <<
"): "
2760 "invalid parameter \"initial value\" "
2766 if (bGotInitialValues) {
2767 silent_cerr(
"Rotor(" << uLabel <<
"): "
2768 "providing \"initial value\" another time "
2778 bGotInitialValues =
true;
2781 if (InducedType == DYNAMICINFLOW) {
2782 silent_cerr(
"Rotor(" << uLabel <<
"): "
2783 "invalid parameter \"delay\" "
2790 silent_cerr(
"Rotor(" << uLabel <<
"): "
2791 "providing another \"delay\" driver "
2816 }
else if (HP.
IsKeyWord(
"max" "iterations")) {
2817 if (iMaxIter !=
unsigned(-1)) {
2818 silent_cerr(
"Rotor(" << uLabel <<
"): "
2819 "providing another \"max iterations\" value "
2831 silent_cerr(
"illegal max iterations "
2832 << i <<
" for Rotor(" << uLabel <<
")");
2838 if (dTolerance != std::numeric_limits<double>::max()) {
2839 silent_cerr(
"Rotor(" << uLabel <<
"): "
2840 "providing another \"tolerance\" value "
2852 if (dTolerance <= 0.) {
2853 silent_cerr(
"illegal tolerance "
2854 << dTolerance <<
" for Rotor(" << uLabel <<
")");
2860 silent_cerr(
"Rotor(" << uLabel <<
"): "
2861 "providing another \"eta\" relaxation factor "
2873 silent_cerr(
"illegal eta "
2874 << dEta <<
" for Rotor(" << uLabel <<
")");
2878 }
else if (HP.
IsKeyWord(
"correction")) {
2880 silent_cerr(
"Rotor(" << uLabel <<
"): "
2881 "providing another \"correction\" factor "
2889 DEBUGCOUT(
"Hover correction: " << dCH << std::endl);
2891 silent_cerr(
"Rotor(" << uLabel <<
"): "
2892 "illegal null or negative hover inflow correction "
2899 DEBUGCOUT(
"Forward-flight correction: " << dCFF << std::endl);
2901 silent_cerr(
"Rotor(" << uLabel <<
"): "
2902 "illegal null or negative forward-flight inflow correction "
2918 if (InducedType != DYNAMICINFLOW && pdW == 0) {
2922 if (iMaxIter ==
unsigned(-1)) {
2926 if (dTolerance == std::numeric_limits<double>::max()) {
2927 silent_cerr(
"Rotor(" << uLabel <<
"): "
2928 "warning, \"max iterations\" is meaningless with default tolerance"
2943 switch (InducedType) {
2945 DEBUGCOUT(
"Uniform induced velocity" << std::endl);
2950 ppres, dOR, dR, pdW,
2951 iMaxIter, dTolerance, dEta,
2956 case UNIFORM_SECTIONAL:
2957 DEBUGCOUT(
"Uniform induced velocity" << std::endl);
2962 ppres, dOR, dR, pdW,
2963 iMaxIter, dTolerance, dEta,
2969 DEBUGCOUT(
"Glauert induced velocity" << std::endl);
2974 ppres, dOR, dR, pdW,
2975 iMaxIter, dTolerance, dEta,
2981 DEBUGCOUT(
"Mangler induced velocity" << std::endl);
2987 ppres, dOR, dR, pdW,
2988 iMaxIter, dTolerance, dEta,
2994 DEBUGCOUT(
"Dynamic inflow" << std::endl);
2999 pCraft, rrot, pRotor,
3002 iMaxIter, dTolerance, dEta,
3004 dVConst, dVSine, dVCosine,
3009 ASSERTMSG(0,
"You shouldn't have reached this point");
3017 DEBUGCOUT(
"Reference rotation speed: " << dOR << std::endl);
3019 silent_cerr(
"Rotor(" << uLabel <<
"): "
3020 "invalid reference speed " << dOR
3027 DEBUGCOUT(
"Radius: " << dR << std::endl);
3029 silent_cerr(
"Rotor(" << uLabel <<
"): "
3030 "invalid radius " << dR
3037 bool bGotInitialValues(
false);
3042 unsigned iMaxIter = unsigned(-1);
3043 doublereal dTolerance = std::numeric_limits<double>::max();
3048 while (HP.
IsArg()) {
3054 silent_cerr(
"Rotor(" << uLabel <<
"): "
3055 "providing another \"ground\" node "
3064 }
else if (HP.
IsKeyWord(
"initial" "value")) {
3065 if (bGotInitialValues) {
3066 silent_cerr(
"Rotor(" << uLabel <<
"): "
3067 "providing \"initial value\" another time "
3077 bGotInitialValues =
true;
3079 }
else if (HP.
IsKeyWord(
"max" "iterations")) {
3080 if (iMaxIter !=
unsigned(-1)) {
3081 silent_cerr(
"Rotor(" << uLabel <<
"): "
3082 "providing another \"max iterations\" value "
3094 silent_cerr(
"illegal max iterations "
3095 << i <<
" for Rotor(" << uLabel <<
")");
3101 if (dTolerance != std::numeric_limits<double>::max()) {
3102 silent_cerr(
"Rotor(" << uLabel <<
"): "
3103 "providing another \"tolerance\" value "
3115 if (dTolerance <= 0.) {
3116 silent_cerr(
"illegal tolerance "
3117 << dTolerance <<
" for Rotor(" << uLabel <<
")");
3123 silent_cerr(
"Rotor(" << uLabel <<
"): "
3124 "providing another \"eta\" relaxation factor "
3136 silent_cerr(
"illegal eta "
3137 << dEta <<
" for Rotor(" << uLabel <<
")");
3141 }
else if (HP.
IsKeyWord(
"correction")) {
3143 silent_cerr(
"Rotor(" << uLabel <<
"): "
3144 "providing another \"correction\" factor "
3152 DEBUGCOUT(
"Hover correction: " << dCH << std::endl);
3154 silent_cerr(
"Rotor(" << uLabel <<
"): "
3155 "illegal null or negative hover inflow correction "
3162 DEBUGCOUT(
"Forward-flight correction: " << dCFF << std::endl);
3164 silent_cerr(
"Rotor(" << uLabel <<
"): "
3165 "illegal null or negative forward-flight inflow correction "
3180 if (iMaxIter ==
unsigned(-1)) {
3184 if (dTolerance == std::numeric_limits<double>::max()) {
3185 silent_cerr(
"Rotor(" << uLabel <<
"): "
3186 "warning, \"max iterations\" is meaningless with default tolerance"
3201 DEBUGCOUT(
"Dynamic inflow" << std::endl);
3206 pCraft, rrot, pRotor,
3209 iMaxIter, dTolerance, dEta,
3211 dVConst, dVSine, dVCosine,
3217 silent_cerr(
"Rotor(" << uLabel <<
"): "
3218 "unknown induced velocity type at line "
3225 silent_cerr(
"Rotor(" << uLabel <<
"): "
3226 "semicolon expected at line "
flag fReadOutput(MBDynParser &HP, const T &t) const
Mat3x3 GetRotRel(const ReferenceFrame &rf)
#define MBDYN_EXCEPT_ARGS
virtual integer GetInt(integer iDefval=0)
#define ASSERTMSG(expr, msg)
const Mat3x3 Eye3(1., 0., 0., 0., 1., 0., 0., 0., 1.)
#define SAFENEW(pnt, item)
virtual bool IsKeyWord(const char *sKeyWord)
#define ASSERT(expression)
#define SAFENEWWITHCONSTRUCTOR(pnt, item, constructor)
ResForceSet ** ReadResSets(DataManager *pDM, MBDynParser &HP)
virtual int GetWord(void)
DriveCaller * GetDriveCaller(bool bDeferred=false)
virtual HighParser::ErrOut GetLineData(void) const
Node * ReadNode(MBDynParser &HP, Node::Type type) const
virtual doublereal GetReal(const doublereal &dDefval=0.0)