/* Howell's version of moon.c */ /* Derived from rhrate.c and other code in newplanet. 1999_07_31 */ #include #include #include #include "/usr/local/wiro/tracking/wirotypes.h" #include "/usr/local/wiro/tracking/track.h" #include "/usr/local/wiro/tracking/wiro.h" #include struct wiro_memory *tinfo; double getdate(), gethms(); main( argc, argv ) int argc; char *argv[ ]; { struct timeb timeonobj; double ra, dec, vra, vdec; char s1[ 98 ]; double jd,ut; int yr, mn, dy; int th, tm, rah, ram, decd, decm; /* time, ra, dec hours, minutes */ double ts, ras, decs; /* time, ra, dec seconds */ double jd0, jd1, ra0, ra1, dec0, dec1; /* attach shared memory */ if ( NULL == ( tinfo = (struct wiro_memory *) smem_get("WIRO_MEMORY",sizeof(*tinfo), SM_READ | SM_WRITE ) ) ) { printf("Unable to open shared memory \n"); exit(-1); } if ( !strcmp("help", argv[1])) { printf("Usage of moon. Expects two times and two apparent topocentric positions in equinox of date:\n" ); printf(" First time: hh mm ss RA hh mm ss.ss DEC dd mm ss.s"); printf(" Second time: hh mm ss RA hh mm ss.ss DEC dd mm ss.s"); exit(-1); } printf(" Enter UT year, month, day for input lunar positions"); scanf("%d %d %d", &yr, &mn, &dy); printf(" Enter first time and RA, DEC as hh mm ss hh mm ss.ss dd mm ss.s"); scanf("%d %d %lf %d %d %lf %d %d %lf", &th, &tm, &ts, &rah, &ram, &ras, &decd, &decm, &decs); printf("\n%d %d %lf %d %d %lf %d %d %lf", th, tm, ts, rah, ram, ras, decd, decm, decs); ut = (double) th + ((double) tm) / 60. + ts /3600.; ra0 = (double) rah + ((double) ram ) / 60. + ras /3600.; if (decd >= 0) { dec0 = (double) decd + ((double) decm) / 60. + decs/3600.; } { dec0 = (double) decd - ((double) decm) / 60. - decs/3600.; } jd0 = julian(yr, mn, dy, ut); printf(" Enter second date and first RA, DEC as hh mm ss hh mm ss.ss dd mm ss.s"); scanf("%d %d %lf %d %d %lf %d %d %lf", &th, &tm, &ts, &rah, &ram, &ras, &decd, &decm, &decs); printf("\n%d %d %lf %d %d %lf %d %d %lf", th, tm, ts, rah, ram, ras, decd, decm, decs); ut = (double) th + ((double) tm) / 60. + ts /3600.; ra1 = (double) rah + ((double) ram ) / 60. + ras /3600.; if (decd > 0) { dec1 = (double) decd + ((double) decm) / 60. + decs/3600.; } { dec1 = (double) decd - ((double) decm) / 60. - decs/3600.; } ut = (double) th + ((double) tm) / 60. + ts/3600.; jd1 = julian(yr, mn, dy, ut); printf("\n UT0, UT1 = %15.5f", ut); printf("\n JD0, JD1 = %15.5f %15.5f", jd0, jd1); printf("\n RA0, RA1 = %15.5f %15.5f", ra0, ra1); printf("\n DE0, DE1 = %15.5f %15.5f", dec0, dec1); /* Get current julian date */ jd = getdate(); jd += gethms(); /* Comput rates. Units are degrees per hour of RA and DEC */ vra = (ra1 - ra0 )/(24.*(jd1-jd0)); /* units are s per s or 1/15 hr per hr. */ vdec = (dec1- dec0)/(24.*(jd1-jd0)); /* units are arcsec per sec */ /* Interpolate to find current position */ ra = ra0 + (ra1 -ra0 ) * (jd-jd0)/(jd1-jd0); dec = dec0 + (dec1-dec0) * (jd-jd0)/(jd1-jd0); printf("\nRA DEC = %15.5f %15.5f", ra, dec); printf("\nRates: %15.5f %15.5f", vra*15., vdec); V_RA = vra; V_DEC = vdec; ORIG_RA = ra; ORIG_DEC = dec; HP = 0.0; /* Input should be topocentric so includes horizontal parallax */ timecopy(CURRENT,&TONOBJ); tinfo->motion_type = SOLAR; sprintf( s1, "moon"); logf( s1 ); }