From: Bertrand <bco...@us...> - 2017-06-04 21:06:12
|
Update of /cvsroot/jsbsim/JSBSim/tests In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv31273/tests Modified Files: TestExternalReactions.py Log Message: New feature: external moments can now be specified in addition to external forces. Index: TestExternalReactions.py =================================================================== RCS file: /cvsroot/jsbsim/JSBSim/tests/TestExternalReactions.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** TestExternalReactions.py 26 May 2017 09:44:47 -0000 1.1 --- TestExternalReactions.py 4 Jun 2017 21:06:08 -0000 1.2 *************** *** 21,25 **** import os, math import numpy as np ! from JSBSim_utils import JSBSimTestCase, CreateFDM, RunTest class TestExternalReactions(JSBSimTestCase): --- 21,27 ---- import os, math import numpy as np ! import xml.etree.ElementTree as et ! ! from JSBSim_utils import JSBSimTestCase, CreateFDM, RunTest, CopyAircraftDef class TestExternalReactions(JSBSimTestCase): *************** *** 198,202 **** self.assertAlmostEqual(fdm['moments/m-external-lbsft'], m[1]) self.assertAlmostEqual(fdm['moments/n-external-lbsft'], m[2]) ! RunTest(TestExternalReactions) --- 200,251 ---- self.assertAlmostEqual(fdm['moments/m-external-lbsft'], m[1]) self.assertAlmostEqual(fdm['moments/n-external-lbsft'], m[2]) ! ! def test_moment(self): ! script_path = self.sandbox.path_to_jsbsim_file('scripts', ! 'ball_chute.xml') ! tree, aircraft_name, aircraft_path = CopyAircraftDef(script_path, ! self.sandbox) ! extReact_element = tree.getroot().find('external_reactions') ! moment_element = et.SubElement(extReact_element, 'moment') ! moment_element.attrib['name'] = 'parachute' ! moment_element.attrib['frame'] = 'WIND' ! direction_element = et.SubElement(moment_element, 'direction') ! x_element = et.SubElement(direction_element, 'x') ! x_element.text = '0.2' ! y_element = et.SubElement(direction_element, 'y') ! y_element.text = '0.0' ! z_element = et.SubElement(direction_element, 'z') ! z_element.text = '-1.5' ! ! tree.write(self.sandbox('aircraft', aircraft_name, ! aircraft_name+'.xml')) ! ! fdm = CreateFDM(self.sandbox) ! fdm.set_aircraft_path('aircraft') ! fdm.load_script(script_path) ! fdm.run_ic() ! ! mDir = np.array([0.2, 0.0, -1.5]) ! mDir /= np.linalg.norm(mDir) ! self.assertAlmostEqual(fdm['external_reactions/parachute/l'], mDir[0]) ! self.assertAlmostEqual(fdm['external_reactions/parachute/m'], mDir[1]) ! self.assertAlmostEqual(fdm['external_reactions/parachute/n'], mDir[2]) ! ! fdm['external_reactions/parachute/magnitude-lbsft'] = -3.5 ! ! while fdm.run(): ! Tw2b = fdm.get_auxiliary().get_Tw2b() ! mag = fdm['aero/qbar-psf'] * fdm['fcs/parachute_reef_pos_norm']*20.0 ! f = Tw2b * np.mat([-1.0, 0.0, 0.0]).T * mag ! self.assertAlmostEqual(fdm['forces/fbx-external-lbs'], f[0, 0]) ! self.assertAlmostEqual(fdm['forces/fby-external-lbs'], f[1, 0]) ! self.assertAlmostEqual(fdm['forces/fbz-external-lbs'], f[2, 0]) ! ! m = -3.5 * Tw2b * np.mat(mDir).T ! fm = np.cross(self.getLeverArm(fdm,'parachute'), ! np.array([f[0,0], f[1,0], f[2, 0]])) ! self.assertAlmostEqual(fdm['moments/l-external-lbsft'], m[0, 0] + fm[0]) ! self.assertAlmostEqual(fdm['moments/m-external-lbsft'], m[1, 0] + fm[1]) ! self.assertAlmostEqual(fdm['moments/n-external-lbsft'], m[2, 0] + fm[2]) RunTest(TestExternalReactions) |