ftp.nice.ch/pub/next/science/astronomy/usat-NeXT.N.bs.tar.gz#/usat/bdriver.c

This is bdriver.c in view mode; [Download] [Up]

/****************************************/
/* bdriver.c				*/
/*					*/
/* batch satellite epherimus driver	*/
/****************************************/

/***** description
 *
 *	$Id: bdriver.c,v 1.2 1993/05/12 18:58:00 craig Exp $
 *
 */

/***** modification history
 *
 *	$Log: bdriver.c,v $
 * Revision 1.2  1993/05/12  18:58:00  craig
 * Changed the orbit calculation section to use the new satreduce
 * subroutine and the new do_orbit routine.
 *
 * Revision 1.1  1993/04/30  18:29:57  craig
 * Initial revision
 *
 *
 */

/***** include files *****/

#include <string.h>
#include <math.h>
#include "satellite.h"
#include "satproto.h"
#include "aaproto.h"

/***** global variables *****/

FILE  *elefile;

struct star fstar;
struct ELEMENT element;

/* from cnstinit.c */

extern int prtflg;

extern FILE *outfile;

extern double JD;
extern double UT;

extern struct PCONSTANTS pcnsts;
extern struct MCONSTANTS mcnsts;


/***********/
/* bdriver */
/***********/

int    main (void)
{
    /***** Local variables *****/

    int    iept, iflag;

    char   fname[32];

    double delo, delt, del1, temp;
    double a1, xnodp, ao;

    double oalt, oaz, ora, odec;
    double nalt, naz, nra, ndec;
    double N, D, x;

    double JDTIME, JDSTOP, JDSTART;


    /***** initialize constants *****/

    prtflg = 0;
    cnstinit ();

    if (kinit () == -1)
    {
	fprintf (stderr, "Unable to find a ./.site.ini or a ");
	fprintf (stderr, "~/.site.ini site initialization file.\n");
	exit (-1);
    }

    /***** initialize inputs *****/

    strcpy (fname, "ntest.tle");
    delt = 5.;
    outfile = stdout;

    /***** select files and output times *****/

    getstring ("Element file name: ", fname, 32);

    /*** open the element file ***/

    elefile = fopen (fname, "r");

    if (elefile == NULL)
    {
	fprintf (stderr, "Error in opening element file: %s\n", fname);
	return (-1);
    }

    printf ("Output file name: ( stdout ) ? ");

    if (strlen (gets (fname)))
    {
	/*** open the output file ***/

	outfile = fopen (fname, "w");

	if (outfile == NULL)
	{
	    fprintf (stderr, "Error in opening output file: %s\n",
		fname);
	    exit (-1);
	}
    }

    printf ("\nEnter start time: \n\n");
    JDSTART = getdate ();
    JDSTART += gethms ();
    JD = JDSTART;
    update (stdout);

    /* printf ("\n Julian day %.7f\n\n", JD); */

    printf ("\nEnter end time: \n\n");
    JDSTOP = getdate ();
    JDSTOP += gethms ();

    getdouble ("\nTime increment: (minutes) ", &delt);

    /* read the element file */

    while (rdelement () == 0)
    {
	/***** INPUT CHECK FOR PERIOD VS EPHEMERIS SELECTED *****/
	/***** PERIOD GE 225 MINUTES  IS DEEP SPACE *****/

	a1 = pow (pcnsts.xke / element.xno, mcnsts.tothrd);
	temp = pcnsts.ck2 * 1.5 *
	    (cos (element.xincl) * cos (element.xincl) * 3. - 1.) /
	    pow (1. - element.eo * element.eo, 1.5);

	del1 = temp / (a1 * a1);
	ao = a1 * (1. - del1 * (mcnsts.tothrd * .5 + del1 *
		(del1 * 134. / 81. + 1.)));
	delo = temp / (ao * ao);
	xnodp = element.xno / (delo + 1.);

	if (mcnsts.twopi / xnodp / pcnsts.xmnpda >= .15625)
	{
	    iept = 3;
	}
	else
	{
	    iept = 2;
	}

	iflag = 1;

	/***** do the ephemeris *****/

        JDTIME = JDSTART;

	while (JDTIME <= JDSTOP)
	{
	    /* update the time */

	    JD = JDTIME;

	    do_orbit (iflag, iept);

            satreduce (&oalt, &oaz, &ora, &odec);

	    if (oalt > 0.)
	    {
	        /* find the rate at which ra and dec are changing */

	        JD = JDTIME + delt / pcnsts.xmnpda;
    
	        do_orbit (iflag, iept);

	        satreduce (&nalt, &naz, &nra, &ndec);

	        JD = JDTIME;

	        update (outfile);

	        x = mcnsts.ra2de / delt;

	        N = nra - ora;

	        if (N > mcnsts.pi)
	        {
		    N -= mcnsts.twopi;
	        }
	        else if ( N < -mcnsts.pi)
	        {
		    N += mcnsts.twopi;
	        }
    
	        N = x * N;
	        D = x * (ndec - odec);

	        fprintf (outfile, "\n");
	        jtocal (outfile, UT);
	        fprintf (outfile, "\t%s Position: \n", element.name);
	        fprintf (outfile, 
		    "\t\tAltitude %.3f deg Azimuth %.3f deg\n", oalt, oaz);
	        fprintf (outfile, "\t\tR.A.");
	        hms (outfile, ora);
	        fprintf (outfile, " Dec.");
	        dms (outfile, odec);
	        fprintf (outfile, "\n");
                fprintf (outfile, 
	            "\t\tdRA/dt %.2f deg/min, dDec/dt %.2f deg/min\n", N, D );
                fprintf (outfile, "\n");
	    }
        
	    JDTIME += delt / pcnsts.xmnpda;
        }

    }

    if (strlen (fname))
    {
	/*** close the output file ***/

	fclose (outfile);
    }

    /*** close the element file ***/

    fclose (elefile);

    exit (0);
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.