From: Jon S. B. <jb...@us...> - 2008-03-12 13:26:18
|
Update of /cvsroot/jsbsim/JSBSim/src/initialization In directory sc8-pr-cvs17.sourceforge.net:/tmp/cvs-serv32317/src/initialization Modified Files: FGInitialCondition.cpp FGTrimAnalysis.cpp FGTrimAnalysis.h FGTrimAnalysisControl.cpp Log Message: Tweaks to trimming and examples Index: FGInitialCondition.cpp =================================================================== RCS file: /cvsroot/jsbsim/JSBSim/src/initialization/FGInitialCondition.cpp,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -r1.18 -r1.19 *** FGInitialCondition.cpp 9 Mar 2008 08:15:58 -0000 1.18 --- FGInitialCondition.cpp 12 Mar 2008 13:26:13 -0000 1.19 *************** *** 814,817 **** --- 814,819 ---- if (document->FindElement("vc")) SetVcalibratedKtsIC(document->FindElementValueAsNumberConvertTo("vc", "KTS")); + if (document->FindElement("vt")) + SetVtrueKtsIC(document->FindElementValueAsNumberConvertTo("vt", "KTS")); if (document->FindElement("mach")) SetMachIC(document->FindElementValueAsNumber("mach")); Index: FGTrimAnalysis.cpp =================================================================== RCS file: /cvsroot/jsbsim/JSBSim/src/initialization/FGTrimAnalysis.cpp,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -r1.9 -r1.10 *** FGTrimAnalysis.cpp 9 Mar 2008 17:43:33 -0000 1.9 --- FGTrimAnalysis.cpp 12 Mar 2008 13:26:13 -0000 1.10 *************** *** 318,323 **** //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ! FGTrimAnalysis::FGTrimAnalysis(FGFDMExec *FDMExec,TrimAnalysisMode tt) { ! SetDebug(2); --- 318,323 ---- //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ! FGTrimAnalysis::FGTrimAnalysis(FGFDMExec *FDMExec,TrimAnalysisMode tt) ! { SetDebug(2); *************** *** 326,330 **** trim_failed = true; ! max_iterations=200; stop_criterion="Stop-On-Delta"; --- 326,330 ---- trim_failed = true; ! max_iterations=2500; stop_criterion="Stop-On-Delta"; *************** *** 340,363 **** mode=tt; _targetNlf=1.0; ! _targetNlf=fdmex->GetIC()->GetTargetNlfIC(); ! _vtIC = fdmex->GetIC()->GetVtrueFpsIC(); ! _hIC = fdmex->GetIC()->GetAltitudeFtIC(); ! _gamma = fdmex->GetIC()->GetFlightPathAngleRadIC(); _rocIC = _vtIC*cos(_gamma); _vdownIC = _rocIC; // state variables ! _u = fdmex->GetIC()->GetUBodyFpsIC(); ! _v = fdmex->GetIC()->GetVBodyFpsIC(); ! _w = fdmex->GetIC()->GetWBodyFpsIC(); ! _p = fdmex->GetIC()->GetPRadpsIC(); ! _q = fdmex->GetIC()->GetQRadpsIC(); ! _r = fdmex->GetIC()->GetRRadpsIC(); ! _alpha = fdmex->GetIC()->GetAlphaRadIC(); ! _beta = fdmex->GetIC()->GetBetaRadIC(); ! _theta = fdmex->GetIC()->GetThetaRadIC(); ! _phi = fdmex->GetIC()->GetPhiRadIC(); ! _psiIC = fdmex->GetIC()->GetPsiRadIC(); _psi = _psiIC; _psigtIC = _psi; --- 340,363 ---- mode=tt; _targetNlf=1.0; ! _targetNlf=fgic->GetTargetNlfIC(); ! _vtIC = fgic->GetVtrueFpsIC(); ! _hIC = fgic->GetAltitudeFtIC(); ! _gamma = fgic->GetFlightPathAngleRadIC(); _rocIC = _vtIC*cos(_gamma); _vdownIC = _rocIC; // state variables ! _u = fgic->GetUBodyFpsIC(); ! _v = fgic->GetVBodyFpsIC(); ! _w = fgic->GetWBodyFpsIC(); ! _p = fgic->GetPRadpsIC(); ! _q = fgic->GetQRadpsIC(); ! _r = fgic->GetRRadpsIC(); ! _alpha = fgic->GetAlphaRadIC(); ! _beta = fgic->GetBetaRadIC(); ! _theta = fgic->GetThetaRadIC(); ! _phi = fgic->GetPhiRadIC(); ! _psiIC = fgic->GetPsiRadIC(); _psi = _psiIC; _psigtIC = _psi; *************** *** 379,383 **** _sphi = sin(_phi); - SetMode(tt); // creates vTrimAnalysisControls fdmex->SetTrimMode( (int)tt ); --- 379,382 ---- *************** *** 389,393 **** sigma_nm = 0.5; alpha_nm = 1.0; beta_nm = 0.5; gamma_nm = 2.0; initial_step = 0.01; ! tolerance = 1.0E-9; cost_function_value = 9999.0; --- 388,392 ---- sigma_nm = 0.5; alpha_nm = 1.0; beta_nm = 0.5; gamma_nm = 2.0; initial_step = 0.01; ! tolerance = 1.0E-10; // 0.0000000001 cost_function_value = 9999.0; *************** *** 395,400 **** if (rf.is_open()) rf.close(); - fgic = fdmex->GetIC(); - Auxiliary = fdmex->GetAuxiliary(); Aerodynamics = fdmex->GetAerodynamics(); --- 394,397 ---- *************** *** 588,592 **** string name = el->GetName(); double iv = 0.0; ! double step = 0.1; // default step value iv = default_value; --- 585,589 ---- string name = el->GetName(); double iv = 0.0; ! double step = 0.0; // default step value iv = default_value; *************** *** 631,635 **** << "\talpha, beta (deg): " << _alpha*57.3 <<", "<< _beta*57.3 << endl << "\tphi, theta, psi (deg): " << _phi*57.3 <<", "<< _theta*57.3 << ", " << _psi*57.3 << endl ! << endl; cout << "\tTrim variables adjusted:" << endl; --- 628,633 ---- << "\talpha, beta (deg): " << _alpha*57.3 <<", "<< _beta*57.3 << endl << "\tphi, theta, psi (deg): " << _phi*57.3 <<", "<< _theta*57.3 << ", " << _psi*57.3 << endl ! << "\tCost function value : " << cost_function_value << endl ! << "\tCycles executed : " << total_its << endl << endl; cout << "\tTrim variables adjusted:" << endl; *************** *** 656,660 **** cout << "\t Final: " << fdmex->GetPropagate()->GetEuler(3)*57.3 << " Degrees" << endl; cout << endl; ! cout << "--------------------------------------------------------------------- \n\n"; fdmex->EnableOutput(); --- 654,658 ---- cout << "\t Final: " << fdmex->GetPropagate()->GetEuler(3)*57.3 << " Degrees" << endl; cout << endl; ! cout << "--------------------------------------------------------------------- \n\n"; fdmex->EnableOutput(); *************** *** 1123,1131 **** { if (!Propulsion->GetEngine(i)->GetRunning() ) { - // cout << "Engine " << i << " is not running ! "; //<< endl; Propulsion->GetEngine(i)->SetStarter( true ); if ( Propulsion->GetEngine(i)->GetType() == JSBSim::FGEngine::etPiston ) { - // cout << "It's a Piston type." << endl; FGPiston * Piston = (FGPiston*)Propulsion->GetEngine(i); Piston->SetMagnetos(3); --- 1121,1127 ---- *************** *** 1133,1137 **** else if ( Propulsion->GetEngine(i)->GetType() == FGEngine::etTurbine ) { - // cout << "It's a Turbine type. Calculating ..." << endl; FGTurbine * Turbine = (FGTurbine*)Propulsion->GetEngine(i); Turbine->SetCutoff(false); --- 1129,1132 ---- *************** *** 1143,1147 **** } else { success = true; // at least one engine is found in a running state - // cout << "Now running." << endl; Propulsion->SetActiveEngine(i); } --- 1138,1141 ---- *************** *** 1160,1168 **** { if (!Propulsion->GetEngine(i)->GetRunning() ) { - // cout << "Engine " << i << " is not running ! "; //<< endl; Propulsion->GetEngine(i)->SetStarter( true ); if ( Propulsion->GetEngine(i)->GetType() == JSBSim::FGEngine::etPiston ) { - // cout << "It's a Piston type." << endl; FGPiston * Piston = (FGPiston*)Propulsion->GetEngine(i); Piston->SetMagnetos(3); --- 1154,1160 ---- *************** *** 1170,1174 **** else if ( Propulsion->GetEngine(i)->GetType() == FGEngine::etTurbine ) { - // cout << "It's a Turbine type. Calculating ..." << endl; FGTurbine * Turbine = (FGTurbine*)Propulsion->GetEngine(i); Turbine->SetCutoff(false); --- 1162,1165 ---- *************** *** 1181,1185 **** } else { success = true; // at least one engine is found in a running state - // cout << "Now running." << endl; Propulsion->SetActiveEngine(i); } --- 1172,1175 ---- *************** *** 1300,1305 **** Objective* obj_ptr = new Objective(this->fdmex, this, 999.0); - // cout << "Objective instantiated: "<< obj_ptr->Get_x_val() << endl; - // cout << endl; fdmex->SetTrimStatus( true ); --- 1290,1293 ---- *************** *** 1309,1315 **** //################################### - // cout << "Sim time:" << fdmex->GetState()->Getsim_time() << ", dt: " << fdmex->GetState()->Getdt() << endl; - // cout << "..." << endl; - double tMin,tMax; double throttle = 1.0; --- 1297,1300 ---- *************** *** 1334,1338 **** //-------------------------------------------------------- - // cout << "Trying to ensure active engine(s) ..." << endl; for(unsigned i=0;i<Propulsion->GetNumEngines();i++) --- 1319,1322 ---- *************** *** 1347,1364 **** while ( !engine_started && (engineStartCount < n_attempts) ) { - // cout << "\t\t\t\tattempt: " << engineStartCount << endl; engine_started = ensureRunning(i); fdmex->Run(); engineStartCount++; } ! // do not continue without engines ! if ( Propulsion->GetActiveEngine()<0 ) { ! // cout << "Active engine:" << Propulsion->GetActiveEngine() << endl; ! // cout << "Failed to ensure a running engine after " << engineStartCount << " attempts" << endl << endl; ! return false; ! } ! // cout << "Active engine: n. " << i << endl; ! // cout << "Got running engine after " << engineStartCount << " attempts" << endl << endl; } //-------------------------------------------------------- --- 1331,1341 ---- while ( !engine_started && (engineStartCount < n_attempts) ) { engine_started = ensureRunning(i); fdmex->Run(); engineStartCount++; } ! } + //-------------------------------------------------------- *************** *** 1367,1375 **** fdmex->SetDebugLevel(0); // 4 ! // cout << "Sim time:" << fdmex->GetState()->Getsim_time() << endl << endl; ! ! fdmex->SetDebugLevel(0); ! ! //##################################################################################### trim_failed=false; --- 1344,1348 ---- fdmex->SetDebugLevel(0); // 4 ! //######################################################################### trim_failed=false; *************** *** 1386,1399 **** if(mode == taPullup ) { - // cout << "Setting pitch rate and nlf... " << endl; setupPullup(); // also calls updateRates() - // cout << "pitch rate done ... " << endl; - // cout << "nlf done" << endl; } else if (mode == taTurn) { setupTurn(); // also calls updateRates() } else if (mode == taTurnFull) { setupTurn(); // also calls updateRates() ! } ! else { fgic->SetPRadpsIC(0.0); fgic->SetQRadpsIC(0.0); --- 1359,1368 ---- if(mode == taPullup ) { setupPullup(); // also calls updateRates() } else if (mode == taTurn) { setupTurn(); // also calls updateRates() } else if (mode == taTurnFull) { setupTurn(); // also calls updateRates() ! } else { fgic->SetPRadpsIC(0.0); fgic->SetQRadpsIC(0.0); *************** *** 1404,1408 **** // ** DO HERE THE TRIM ** // ! //----------------------------------------------------------------------------------------------------------------- // REMINDER: // n. of control variables for full trim (taFull): 7 --- 1373,1377 ---- // ** DO HERE THE TRIM ** // ! //--------------------------------------------------------------------------- // REMINDER: // n. of control variables for full trim (taFull): 7 *************** *** 1412,1417 **** //----------------------------------------------------------------------------------------------------------------- - int iter = 0; - // re-run ICs fdmex->RunIC(); --- 1381,1384 ---- *************** *** 1420,1425 **** if ( rf.is_open() ) rf << - //"# iteration, dT, dE, dR, dA, f(), Delta_E_pos (deg), Delta_R_pos (deg), Delta_A_pos (deg), theta (deg), alpha (deg), beta (deg)" - //"# iteration, CostFunc, size, dT, dE, dA, dR, Psi (rad), Theta (rad), Phi (rad)" "# iteration, costf, dT, dE, dA, dR, Phi (rad), Theta (rad), Psi (rad), uDot (fps2), vDot (fps2), wDot (fps2), pDot (rad/s2), qDot (rad/s2), rDot (rad/s2), u (fps), v (fps), w (fps), p (rad/s), q (rad/s), r (rad/s), alpha (rad), beta (rad), alphaDot (rad/s), betaDot (rad/s), Thrust" << endl; --- 1387,1390 ---- *************** *** 1460,1490 **** if ( GetMode()==taLongitudinal ) { NMS.SetFcnName(find_CostFunctionLongitudinal); - // cout << "\n\n>>>> LONGITUDINAL TRIM <<<<\n"; } if ( GetMode()==taFull ) { NMS.SetFcnName(find_CostFunctionFull); - // cout << "\n\n>>>> FULL TRIM <<<<\n"; } if ( GetMode()==taFullWingsLevel ) { NMS.SetFcnName(find_CostFunctionFullWingsLevel); - // cout << "\n\n>>>> FULL TRIM WINGS-LEVEL <<<<\n"; } if ( GetMode()==taTurn ) { NMS.SetFcnName(find_CostFunctionFullCoordinatedTurn); - // cout << "\n\n>>>> FULL TRIM COORDINATED TURN <<<<\n"; } if ( GetMode()==taTurnFull ) { NMS.SetFcnName(find_CostFunctionFullTurn); - // cout << "\n\n>>>> FULL TRIM TURN <<<<\n"; } if ( GetMode()==taPullup ) { NMS.SetFcnName(find_CostFunctionPullUp); - // cout << "\n\n>>>> TRIM PULLUP <<<<\n"; } - // cout.setf(ios::scientific); - // cout << "Tolerance: " << tolerance << endl; - // cout.setf(ios::fixed); - //----------------------------------------- // initialize simplex (n+1 conditions) --- 1425,1445 ---- *************** *** 1518,1527 **** }// this completes the (N+1) n-ples - // cout << "... Initial simplex :"<< endl << ss.str() << endl; - NMS.ReadInFile(ss); // assign the initial combinations of parameters - // cout << ".......................................................\n"; - /* If Stop_on_std is set to false in an NMSearch, the standard-deviation test is used until that test is met. --- 1473,1478 ---- *************** *** 1556,1563 **** Scalls = NMS.GetFunctionCalls(); - // cout << "\nMinimum point found: \n" << *Sminimum; - // cout << "\nValue: \n" << SMinVal << " in "; - // cout << Scalls << " function calls." << endl << endl; - // Apply the set of controls found by the minimization procedure --- 1507,1510 ---- *************** *** 1582,1587 **** quat.Normalize(); - // cout << "IC reset ..." << endl; - fdmex->GetIC()->ResetIC(_u, _v, _w, _p, _q, _r, _alpha, _beta, _phi, _theta, _psi, _gamma); --- 1529,1532 ---- *************** *** 1618,1623 **** // enforce the current state to IC object - // cout << "IC reset ..." << endl; - fdmex->GetIC()->ResetIC(_u, _v, _w, _p, _q, _r, _alpha, _beta, _phi, _theta, _psi, _gamma); --- 1563,1566 ---- *************** *** 1659,1663 **** // enforce the current state to IC object - // cout << "IC reset ..." << endl; fdmex->GetIC()->ResetIC(_u, _v, _w, _p, _q, _r, _alpha, _beta, _phi, _theta, _psi, _gamma); --- 1602,1605 ---- *************** *** 1698,1702 **** // enforce the current state to IC object - // cout << "IC reset ..." << endl; fdmex->GetIC()->ResetIC(_u, _v, _w, _p, _q, _r, _alpha, _beta, _phi, _theta, _psi, _gamma); --- 1640,1643 ---- *************** *** 1738,1742 **** // enforce the current state to IC object - // cout << "IC reset ..." << endl; fdmex->GetIC()->ResetIC(_u, _v, _w, _p, _q, _r, _alpha, _beta, _phi, _theta, _psi, _gamma); --- 1679,1682 ---- *************** *** 1760,1769 **** //----------------------------------------------------------------------------------------------------------------- if( !trim_failed ) { ! total_its=N; ! if (debug_lvl > 0) ! cout << endl << " Trim successful" << endl; } else { - total_its=N; if (debug_lvl > 0) cout << endl << " Trim failed" << endl; --- 1700,1710 ---- //----------------------------------------------------------------------------------------------------------------- + total_its = NMS.GetFunctionCalls(); + if( !trim_failed ) { ! if (debug_lvl > 0) { ! cout << endl << " Trim successful. (Cost function value: " << cost_function_value << ")" << endl; ! } } else { if (debug_lvl > 0) cout << endl << " Trim failed" << endl; Index: FGTrimAnalysis.h =================================================================== RCS file: /cvsroot/jsbsim/JSBSim/src/initialization/FGTrimAnalysis.h,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** FGTrimAnalysis.h 9 Mar 2008 08:15:58 -0000 1.6 --- FGTrimAnalysis.h 12 Mar 2008 13:26:13 -0000 1.7 *************** *** 350,355 **** FGAuxiliary * Auxiliary; FGAerodynamics * Aerodynamics; - FGAtmosphere * Atmosphere; - FGAircraft * Aircraft; FGPropulsion * Propulsion; FGFCS * FCS; --- 350,353 ---- Index: FGTrimAnalysisControl.cpp =================================================================== RCS file: /cvsroot/jsbsim/JSBSim/src/initialization/FGTrimAnalysisControl.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** FGTrimAnalysisControl.cpp 3 Sep 2007 03:48:08 -0000 1.2 --- FGTrimAnalysisControl.cpp 12 Mar 2008 13:26:13 -0000 1.3 *************** *** 204,209 **** case taVdot: state_value=fdmex->GetPropagate()->GetUVWdot(2)-state_target; break; case taWdot: state_value=fdmex->GetPropagate()->GetUVWdot(3)-state_target; break; - case taQdot: state_value=fdmex->GetPropagate()->GetPQRdot(2)-state_target;break; case taPdot: state_value=fdmex->GetPropagate()->GetPQRdot(1)-state_target; break; case taRdot: state_value=fdmex->GetPropagate()->GetPQRdot(3)-state_target; break; case taHmgt: state_value=computeHmgt()-state_target; break; --- 204,209 ---- case taVdot: state_value=fdmex->GetPropagate()->GetUVWdot(2)-state_target; break; case taWdot: state_value=fdmex->GetPropagate()->GetUVWdot(3)-state_target; break; case taPdot: state_value=fdmex->GetPropagate()->GetPQRdot(1)-state_target; break; + case taQdot: state_value=fdmex->GetPropagate()->GetPQRdot(2)-state_target;break; case taRdot: state_value=fdmex->GetPropagate()->GetPQRdot(3)-state_target; break; case taHmgt: state_value=computeHmgt()-state_target; break; |