[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Orekit Users] CPython interface question



piyush@gps.caltech.edu a écrit :

Hi everyone,

Hi Piyush,

I stumbled across orekit when looking for software for orbit propagation.
I'm trying to propagate given state vectors (position + velocity) for SAR
satellites in the forward and backward directions by a few minutes. I'm a heavy Python user and chose to try the CPython interface. The interface works pretty
well and allows me to transform data easily between inertial and itrf frames.
However, everytime I try to propagate the orbit (tried a couple of methods) -
the program crashes with the following message. I'm not really familiar with
JCC and have trouble interpreting this error.

# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007f44841f7c5a, pid=16722, tid=139932295845632
#
# JRE version: 6.0_24-b24
# Java VM: OpenJDK 64-Bit Server VM (20.0-b12 mixed mode linux-amd64 compressed
oops)
# Derivative: IcedTea6 1.11.5
# Distribution: Ubuntu 12.04 LTS, package 6b24-1.11.5-0ubuntu1~12.04.1
# Problematic frame:
# C  [_orekit.so+0x358c5a]  _parseArgs(_object**, unsigned int, char*,
...)+0x218a
#


Here is my code segment. Any suggestions would be helpful.

Thanks
Piyush

	setup_orekit_curdir()	   #Reads data and includes initVM

	#####Setup the ECEF frame
	ecefframe = orekit.FramesFactory.getITRF2005()
	ae = orekit.Constants.WGS84_EARTH_EQUATORIAL_RADIUS
	flt = orekit.Constants.WGS84_EARTH_FLATTENING
	mu = orekit.Constants.WGS84_EARTH_MU
	earth = orekit.OneAxisEllipsoid(ae, flt, ecefframe)

	######Setup the ECI Frame
	eciframe = orekit.FramesFactory.getEME2000()

	######Setup time frame
	utc = orekit.TimeScalesFactory.getUTC()

	#####Read in data from ROI_PAC state vector file
	hdrdata = np.loadtxt('hdr_pts.rsc')

	ihr, imin, isec = secs_2_hhmmss(hdrdata[0,0])
	ipos = orekit.Vector3D(float(hdrdata[0,1]), float(hdrdata[0,2]),
float(hdrdata[0,3]))
	ivel = orekit.Vector3D(float(hdrdata[0,4]), float(hdrdata[0,5]),
float(hdrdata[0,6]))
	iVect = orekit.PVCoordinates(ipos, ivel)
	itime = hdrdata[0,0]
	iDate = orekit.AbsoluteDate(2012, 4, 30, ihr, imin, isec, utc)


	#######Create transforms using this
	eci2ecef = eciframe.getTransformTo(ecefframe, iDate)
	ecef2eci = eci2ecef.getInverse()

	eVect = ecef2eci.transformPVCoordinates(iVect)
	initOrbit = orekit.KeplerianOrbit(eVect, eciframe,iDate, mu)
	orb_prop = orekit.KeplerianPropagator(initOrbit)
	orb_prop.setSlaveMode()

	startDate = orekit.AbsoluteDate(iDate,float(hdrdata[1,0]-hdrdata[0,0]),
utc)
	finState = orb_prop.propagate(startDate)

Are you sure about the float type used to build the vectors? In Orekit, we use only double for floating point, not single precision floats. I'm not sure the problem is there, but misalignment of 4 bytes data with respect to 8 bytes data may raise problems in cross-language interfaces.

Luc






----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.