I'm building a program that converts orbital elements into cartesian coordinates.
I want to create a function that does this, converts orbital elements into cartisian coordinates, but I can't get it to work. This is my first time using fortran so I'm still getting used to it.
program conversion
implicit none
real*8 :: EC, A, IC, OM, W, TA, X, Y, Z
real*8, external :: XCARTISIAN, YCARTISIAN, ZCARTISIAN, r
print *, "Insert Oribtal Elements (EC, A, IC, OM, W, TA): "
read *, EC, A, IC, OM, W, TA, X, Y, Z
X = XCARTISIAN(EC, A, IC, OM, W, TA)
Y = YCARTISIAN(EC, A, IC, OM, W, TA)
Z = ZCARTISIAN(EC, A, IC, OM, W, TA)
print *, "X : ", X, "Y : ", Y, "Z : ", Z
end program conversion
real*8 function XCARTISIAN(EC, A, IC, OM, W, TA)
implicit none
real*8, intent(in) :: EC, A, IC, OM, W, TA
real*8 :: XCARTISIAN, r
r = A(1-EC**2)/(1+EC*COS(TA))
XCARTISIAN = r(COS(OM)*COS(W+TA)-SIN(OM)*SIN(W+TA)*COS(IC))
return
end function XCARTISIAN
real*8 function YCARTISIAN(EC, A, IC, OM, W, TA)
implicit none
real*8, intent(in) :: EC, A, IC, OM, W, TA
real*8 :: YCARTISIAN
r = A(1-EC**2)/(1+EC*COS(TA))
YCARTISIAN = r(SIN(OM)*COS(W+TA)+COS(OM)*SIN(W+TA)*COS(IC))
return
end function YCARTISIAN
real*8 function ZCARTISIAN(EC, A, IC, OM, W, TA)
implicit none
real*8, intent(in) :: EC, A, IC, OM, W, TA
real*8 :: ZCARTISIAN
r = A(1-EC**2)/(1+EC*COS(TA))
ZCARTISIAN = r(SIN(W+F)*SIN(IC)
return
end function ZCARTISIAN
How can I get this to work and make a single function that does this instead of three separate ones for X, Y and Z individually?
The conversion formulas are as follows:
X = r(COS(OM)*COS(W+TA)-SIN(OM)*SIN(W+TA)*COS(IC))
Y = r(SIN(OM)*COS(W+TA)+COS(OM)*SIN(W+TA)*COS(IC))
Z = r(SIN(W+F)*SIN(IC)
where,
r = A(1-EC**2)/(1+EC*COS(TA))