/* $ Procedure TIMECN (Convert and round times) */ /* Subroutine */ int timecn_(doublereal *tconv, integer *ids, char *tout, char *linet, ftnlen tout_len, ftnlen linet_len) { /* Builtin functions */ /* Subroutine */ int s_copy(char *, char *, ftnlen, ftnlen); integer s_cmp(char *, char *, ftnlen, ftnlen); /* Local variables */ extern /* Subroutine */ int sct2e_(integer *, doublereal *, doublereal *), dpfmt_(doublereal *, char *, char *, ftnlen, ftnlen), reset_( void); extern logical failed_(void); extern /* Subroutine */ int scdecd_(integer *, doublereal *, char *, ftnlen); integer sc; logical ok; extern /* Subroutine */ int ckmeta_(integer *, char *, integer *, ftnlen), erract_(char *, char *, ftnlen, ftnlen); doublereal ettime; extern /* Subroutine */ int fixuni_(void), errprt_(char *, char *, ftnlen, ftnlen), timout_(doublereal *, char *, char *, ftnlen, ftnlen); /* $ Abstract */ /* This is internal subroutine for CKBRIEF program. It converts */ /* time between encoded SCLK, SCLK string, ET, UTC or UTC/DOY. */ /* $ Disclaimer */ /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ /* $ Keywords */ /* SUMMARY */ /* C KERNEL */ /* $ Declarations */ /* $ Disclaimer */ /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ /* $ Author_and_Institution */ /* Y.K. Zaiko (BERC) */ /* B.V. Semenov (NAIF) */ /* $ Version */ /* - Toolkit Version 6.1.0, 27-JUN-2014 (BVS) */ /* BUG FIX: changed logic to make a combination of -a and an ID */ /* specified on the command line work in all cases. */ /* - CKBRIEF Version 6.0.0, 2014-04-28 (BVS) (NJB) */ /* Modified to treat all files as a single file (-a). */ /* Changed SCLKD display format to include 6 decimal */ /* places. */ /* Increased MAXBOD to 1,000,000 (from 100,000) and CMDSIZ to */ /* 50,000 (from 25,000). */ /* Added support for CK type 6. */ /* - CKBRIEF Version 5.0.0, 2009-02-11 (BVS) */ /* Updated version. */ /* - CKBRIEF Version 4.0.0, 2008-01-13 (BVS) */ /* Increased MAXBOD to 100,000 (from 10,000). */ /* Increased CMDSIZ to 25,000 (from 4,000). */ /* Updated version string and changed its format to */ /* '#.#.#, Month DD, YYYY' (from '#.#.#, YYYY-MM-DD'). */ /* - CKBRIEF Version 3.2.0, 2006-11-02 (BVS) */ /* Updated version string. */ /* - CKBRIEF Version 3.1.0, 2005-11-08 (BVS) */ /* Updated version string. */ /* - CKBRIEF Version 2.0.0, 2001-05-16 (BVS) */ /* Increased MAXBOD to 10000 (from 4000). Set LRGWIN to be */ /* MAXBOD*2 (was MAXBOD). Changed version string. */ /* - CKBRIEF Version 1.1.2, 2001-04-09 (BVS) */ /* Changed version parameter. */ /* - CKBRIEF Version 1.0.0 beta, 1999-02-17 (YKZ)(BVS) */ /* Initial release. */ /* -& */ /* The Version is stored as a string. */ /* The maximum number of segments or interpolation intervals */ /* that can be summarized is stored in the parameter MAXBOD. */ /* This is THE LIMIT that should be increased if window */ /* routines called by CKBRIEF fail. */ /* The largest expected window -- must be twice the size of */ /* MAXBOD for consistency. */ /* The longest command line that can be accommodated is */ /* given by CMDSIZ. */ /* MAXUSE is the maximum number of objects that can be explicitly */ /* specified on the command line for ckbrief summaries. */ /* Generic line size for all modules. */ /* Time type keys. */ /* Output time format pictures. */ /* $ Brief_I/O */ /* Variable I/O Description */ /* -------- --- -------------------------------------------------- */ /* TCONV I Encoded SCLK time */ /* IDS I NAIF ID code of object */ /* TOUT I Form of time representation on output */ /* LINET O Text presentation of time */ /* $ Detailed Input */ /* TCONV Encoded SCLK time to be converted, rounded */ /* and decoded to character string */ /* IDS Integer NAIF ID code found in summary from which */ /* TCONV was obtained. */ /* TOUT Key specifying time presentation on output: */ /* SCLK string, encoded SCLK, ET, UTC or DOY UTC. */ /* $ Detailed Output */ /* LINET Character string which contains time converted */ /* to requested representation or NOTIME flag if */ /* conversion was not possible. */ /* $ Parameters */ /* None. */ /* $ Files */ /* None. */ /* $ Exceptions */ /* Error free. */ /* $ Particulars */ /* None. */ /* $ Examples */ /* None. */ /* $ Restrictions */ /* None. */ /* $ Author_and_Institution */ /* Y.K. Zaiko (BERC) */ /* B.V. Semenov (NAIF) */ /* $ Literature_References */ /* None. */ /* $ Version */ /* - CKBRIEF Beta Version 1.0.0, 17-FEB-1999 (YKZ)(BVS) */ /* -& */ /* SPICELIB functions */ /* Local variables */ /* Reset output time string. */ s_copy(linet, " ", linet_len, (ftnlen)1); /* It is necessary to use real spacecraft ID in SCLK<->ET */ /* conversion routines. CKMETA is providing it. */ ckmeta_(ids, "SCLK", &sc, (ftnlen)4); /* TIMECN is the special routine to be used in CKBRIEF */ /* utility to convert times in accordance to user request. If user */ /* haven't provided ancillary files to perform this conversion, the */ /* program shouldn't stop. To achieve this we'll forbid TIMECN to */ /* be aborted by SPICELIB standard error processing if it can't */ /* convert times. On the exit from TIMECN, SPICE error handling */ /* is restored to its original state. */ erract_("SET", "RETURN", (ftnlen)3, (ftnlen)6); errprt_("SET", "NONE", (ftnlen)3, (ftnlen)4); /* We do appropriate conversion depending on the requested output */ /* time representation. If SCLK for the s/c of interest and(!) */ /* LSK file weren't loaded, conversions to string SCLK, ET, UTC */ /* and UTC/DOY are not possible. The output time set to NOTIME */ /* flag. */ if (s_cmp(tout, "TICKS", tout_len, (ftnlen)5) == 0) { /* DP SLCKs should be simply converted to string. */ dpfmt_(tconv, "xxxxxxxxxxxxxx.xxxxxx", linet, (ftnlen)21, linet_len); } else if (s_cmp(tout, "SCLK", tout_len, (ftnlen)4) == 0) { /* SCLK string is computed from DP SCLK if it's possible. */ scdecd_(&sc, tconv, linet, linet_len); if (failed_()) { s_copy(linet, "NEED LSK AND SCLK FILES", linet_len, (ftnlen)23); } } else if (s_cmp(tout, "ET", tout_len, (ftnlen)2) == 0) { /* Calendar ET is computed by converting DP SCLK to ET seconds */ /* and converting them further to ET calendar string */ sct2e_(&sc, tconv, &ettime); if (! failed_()) { timout_(&ettime, "YYYY-MON-DD HR:MN:SC.### ::TDB", linet, (ftnlen) 30, linet_len); if (failed_()) { s_copy(linet, "NEED LSK AND SCLK FILES", linet_len, (ftnlen) 23); } } else { s_copy(linet, "NEED LSK AND SCLK FILES", linet_len, (ftnlen)23); } } else if (s_cmp(tout, "UTC", tout_len, (ftnlen)3) == 0) { /* UTC time is computed by converting DP SCLK to ET seconds, */ /* which after that converted to UTC string. */ sct2e_(&sc, tconv, &ettime); if (! failed_()) { timout_(&ettime, "YYYY-MON-DD HR:MN:SC.###", linet, (ftnlen)24, linet_len); if (failed_()) { s_copy(linet, "NEED LSK AND SCLK FILES", linet_len, (ftnlen) 23); } } else { s_copy(linet, "NEED LSK AND SCLK FILES", linet_len, (ftnlen)23); } } else if (s_cmp(tout, "UTC/DOY", tout_len, (ftnlen)7) == 0) { /* UTCDOY time is computed by converting DP SCLK to ET seconds, */ /* which after that converted to UTC string. */ sct2e_(&sc, tconv, &ettime); if (! failed_()) { timout_(&ettime, "YYYY-DOY // HR:MN:SC.###", linet, (ftnlen)24, linet_len); if (failed_()) { s_copy(linet, "NEED LSK AND SCLK FILES", linet_len, (ftnlen) 23); } } else { s_copy(linet, "NEED LSK AND SCLK FILES", linet_len, (ftnlen)23); } } ok = ! failed_(); /* Now we can reset SPICE error handling mechanism back to its */ /* original state. */ reset_(); erract_("SET", "ABORT", (ftnlen)3, (ftnlen)5); errprt_("SET", "DEFAULT", (ftnlen)3, (ftnlen)7); /* There is a bug in UNITIM (trace: SCT2E --> SCTE01 --> UNITIM) */ /* that has to be temporarily fixed before UNITIM officially fixed */ /* in N0049 delivery. Call to a specially written routine FIXUNI */ /* does that. */ if (! ok) { fixuni_(); } return 0; } /* timecn_ */
/* $Procedure ET2LST ( ET to Local Solar Time ) */ /* Subroutine */ int et2lst_(doublereal *et, integer *body, doublereal * long__, char *type__, integer *hr, integer *mn, integer *sc, char * time, char *ampm, ftnlen type_len, ftnlen time_len, ftnlen ampm_len) { /* System generated locals */ address a__1[5], a__2[7]; integer i__1[5], i__2[7]; doublereal d__1; /* Builtin functions */ integer s_cmp(char *, char *, ftnlen, ftnlen); /* Subroutine */ int s_copy(char *, char *, ftnlen, ftnlen), s_cat(char *, char **, integer *, integer *, ftnlen); /* Local variables */ doublereal rate, slat, mins; char h__[2], m[2]; integer n; doublereal q; char s[2]; doublereal angle; char frame[32]; doublereal range; extern /* Subroutine */ int chkin_(char *, ftnlen), ucase_(char *, char *, ftnlen, ftnlen), errch_(char *, char *, ftnlen, ftnlen), dpfmt_( doublereal *, char *, char *, ftnlen, ftnlen); logical found; extern /* Subroutine */ int repmi_(char *, char *, integer *, char *, ftnlen, ftnlen, ftnlen); doublereal state[6], slong; extern /* Subroutine */ int spkez_(integer *, doublereal *, char *, char * , integer *, doublereal *, doublereal *, ftnlen, ftnlen); doublereal hours; extern /* Subroutine */ int ljust_(char *, char *, ftnlen, ftnlen); extern doublereal twopi_(void); extern /* Subroutine */ int bodc2n_(integer *, char *, logical *, ftnlen); extern doublereal pi_(void); char bodnam[36]; doublereal lt; integer frcode; extern /* Subroutine */ int cidfrm_(integer *, integer *, char *, logical *, ftnlen); extern doublereal brcktd_(doublereal *, doublereal *, doublereal *); extern /* Subroutine */ int reclat_(doublereal *, doublereal *, doublereal *, doublereal *), rmaind_(doublereal *, doublereal *, doublereal *, doublereal *); doublereal secnds; extern /* Subroutine */ int pgrrec_(char *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, doublereal *, ftnlen); char bpmkwd[32]; integer hrampm; doublereal tmpang; extern /* Subroutine */ int gdpool_(char *, integer *, integer *, integer *, doublereal *, logical *, ftnlen); char amorpm[4]; doublereal tmpsec; extern /* Subroutine */ int sigerr_(char *, ftnlen), chkout_(char *, ftnlen), dtpool_(char *, logical *, integer *, char *, ftnlen, ftnlen), setmsg_(char *, ftnlen), errint_(char *, integer *, ftnlen); doublereal mylong, spoint[3]; extern logical return_(void); char kwtype[1]; extern /* Subroutine */ int intstr_(integer *, char *, ftnlen); char mytype[32]; doublereal lat; /* $ Abstract */ /* Given an ephemeris epoch ET, compute the local solar time for */ /* an object on the surface of a body at a specified longitude. */ /* $ Disclaimer */ /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ /* $ Required_Reading */ /* TIME */ /* $ Keywords */ /* TIME */ /* $ Declarations */ /* $ Brief_I/O */ /* VARIABLE I/O DESCRIPTION */ /* -------- --- -------------------------------------------------- */ /* ET I Epoch in seconds past J2000 epoch */ /* BODY I ID-code of the body of interest */ /* LONG I Longitude of surface point (RADIANS) */ /* TYPE I Type of longitude 'PLANETOCENTRIC', etc. */ /* HR O Local hour on a "24 hour" clock */ /* MN O Minutes past the hour */ /* SC O Seconds past the minute */ /* TIME O String giving local time on 24 hour clock */ /* AMPM O String giving time on A.M./ P.M. scale */ /* $ Detailed_Input */ /* ET is the epoch expressed in TDB seconds past */ /* the J2000 epoch at which a local time is desired. */ /* BODY is the NAIF ID-code of a body on which local */ /* time is to be measured. */ /* LONG is the longitude (either planetocentric or */ /* planetographic) in radians of the site on the */ /* surface of body for which local time should be */ /* computed. */ /* TYPE is the form of longitude supplied by the variable */ /* LONG. Allowed values are 'PLANETOCENTRIC' and */ /* 'PLANETOGRAPHIC'. Note the case of the letters */ /* in TYPE is insignificant. Both 'PLANETOCENTRIC' */ /* and 'planetocentric' are recognized. */ /* $ Detailed_Output */ /* HR is the local "hour" of the site specified at the */ /* epoch ET. Note that an "hour" of local time does not */ /* have the same duration as an hour measured by */ /* conventional clocks. It is simply a representation */ /* of an angle. See the "Particulars" section for a more */ /* complete discussion of the meaning of local time. */ /* MN is the number of "minutes" past the hour of the */ /* local time of the site at the epoch ET. Again note */ /* that a "local minute" is not the same as a minute */ /* you would measure with conventional clocks. */ /* SC is the number of "seconds" past the minute of the */ /* local time of the site at the epoch ET. Again note */ /* that a "local second" is not the same as a second */ /* you would measure with conventional clocks. */ /* TIME is a string expressing the local time */ /* on a "24 hour" local clock. */ /* AMPM is a string expressing the local time on a "12 hour" */ /* local clock together with the traditional AM/PM */ /* label to indicate whether the sun has crossed */ /* the local zenith meridian. */ /* $ Parameters */ /* None. */ /* $ Exceptions */ /* 1) This routine defines local solar time for any point on the */ /* surface of the Sun to be 12:00:00 noon. */ /* 2) If the TYPE of the coordinates is not recognized, the */ /* error 'SPICE(UNKNOWNSYSTEM)' will be signaled. */ /* 3) If the body-fixed frame to associate with BODY cannot be */ /* determined, the error 'SPICE(CANTFINDFRAME)' is signaled. */ /* 4) If insufficient data is available to compute the */ /* location of the sun in body-fixed coordinates, the */ /* error will be diagnosed by a routine called by this one. */ /* 5) If the BODY#_PM keyword required to determine the body */ /* rotation sense is not found in the POOL or if it is found but */ /* is not a numeric keyword with at least two elements, the error */ /* 'SPICE(CANTGETROTATIONTYPE)' is signaled. */ /* $ Files */ /* Suitable SPK and PCK files must be loaded prior to calling this */ /* routine so that the body-fixed position of the sun relative to */ /* BODY can be computed. The PCK files must contain the standard */ /* BODY#_PM keyword need by this routine to determine the body */ /* rotation sense. */ /* When the input longitude is planetographic, the default */ /* interpretation of this value can be overridden using the optional */ /* kernel variable */ /* BODY<body ID>_PGR_POSITIVE_LON */ /* which is normally defined via loading a text kernel. */ /* $ Particulars */ /* This routine returns the local solar time at a user */ /* specified location on a user specified body. */ /* Let SUNLNG be the planetocentric longitude (in degrees) of */ /* the sun as viewed from the center of the body of interest. */ /* Let SITLNG be the planetocentric longitude (in degrees) of */ /* the site for which local time is desired. */ /* We define local time to be 12 + (SITLNG - SUNLNG)/15 */ /* (where appropriate care is taken to map ( SITLNG - SUNLNG ) */ /* into the range from -180 to 180). */ /* Using this definition, we see that from the point of view */ /* of this routine, local solar time is simply a measure of angles */ /* between meridians on the surface of a body. Consequently, */ /* this routine is not appropriate for computing "local times" */ /* in the sense of Pacific Standard Time. For computing times */ /* relative to standard time zones on earth, see the routines */ /* TIMOUT and STR2ET. */ /* Regarding planetographic longitude */ /* ---------------------------------- */ /* In the planetographic coordinate system, longitude is defined */ /* using the spin sense of the body. Longitude is positive to the */ /* west if the spin is prograde and positive to the east if the spin */ /* is retrograde. The spin sense is given by the sign of the first */ /* degree term of the time-dependent polynomial for the body's prime */ /* meridian Euler angle "W": the spin is retrograde if this term is */ /* negative and prograde otherwise. For the sun, planets, most */ /* natural satellites, and selected asteroids, the polynomial */ /* expression for W may be found in a SPICE PCK kernel. */ /* The earth, moon, and sun are exceptions: planetographic longitude */ /* is measured positive east for these bodies. */ /* If you wish to override the default sense of positive */ /* planetographic longitude for a particular body, you can do so by */ /* defining the kernel variable */ /* BODY<body ID>_PGR_POSITIVE_LON */ /* where <body ID> represents the NAIF ID code of the body. This */ /* variable may be assigned either of the values */ /* 'WEST' */ /* 'EAST' */ /* For example, you can have this routine treat the longitude */ /* of the earth as increasing to the west using the kernel */ /* variable assignment */ /* BODY399_PGR_POSITIVE_LON = 'WEST' */ /* Normally such assignments are made by placing them in a text */ /* kernel and loading that kernel via FURNSH. */ /* $ Examples */ /* The following code fragment illustrates how you */ /* could print the local time at a site on Mars with */ /* planetographic longitude 326.17 deg E at epoch ET. */ /* (This example assumes all required SPK and PCK files have */ /* been loaded). */ /* Convert the longitude to radians, set the type of the longitude */ /* and make up a mnemonic for Mars' ID-code. */ /* LONG = 326.17 * RPD() */ /* TYPE = 'PLANETOGRAPHIC' */ /* MARS = 499 */ /* CALL ET2LST ( ET, MARS, LONG, TYPE, HR, MN, SC, TIME, AMPM ) */ /* WRITE (*,*) 'The local time at Mars 326.17 degrees E ' */ /* WRITE (*,*) 'planetographic longitude is: ', AMPM */ /* $ Restrictions */ /* This routine relies on being able to determine the name */ /* of the body-fixed frame associated with BODY through the */ /* frames subsystem. If the BODY specified is NOT one of the */ /* nine planets or their satellites, you will need to load */ /* an appropriate frame definition kernel that contains */ /* the relationship between the body id and the body-fixed frame */ /* name. See the FRAMES required reading for more details */ /* on specifying this relationship. */ /* The routine determines the body rotation sense using the PCK */ /* keyword BODY#_PM. Therefore, you will need to a text PCK file */ /* defining the complete set of the standard PCK body rotation */ /* keywords for the body of interest. The text PCK file must be */ /* loaded independently of whether a binary PCK file providing */ /* rotation data for the same body is loaded or not. */ /* Although it is not currently the case for any of the Solar System */ /* bodies, it is possible that the retrograde rotation rate of a */ /* body would be slower than the orbital rate of the body rotation */ /* around the Sun. The routine does not account for such cases; for */ /* them it will compute incorrect the local time progressing */ /* backwards. */ /* $ Literature_References */ /* None. */ /* $ Author_and_Institution */ /* W.L. Taber (JPL) */ /* $ Version */ /* - SPICELIB Version 3.0.2, 18-APR-2014 (BVS) */ /* Minor edits to long error messages. */ /* - SPICELIB Version 3.0.1, 09-SEP-2009 (EDW) */ /* Header edits: deleted a spurious C$ marker from the */ /* "Detailed_Output" section. The existence of the marker */ /* caused a failure in the HTML documentation creation script. */ /* Deleted the "Revisions" section as it contained several */ /* identical entries from the "Version" section. */ /* Corrected order of header sections. */ /* - SPICELIB Version 3.0.0, 28-OCT-2006 (BVS) */ /* Bug fix: incorrect computation of the local time for the */ /* bodies with the retrograde rotation causing the local time to */ /* flow backwards has been fixed. The local time for all types of */ /* bodies now progresses as expected -- midnight, increasing AM */ /* hours, noon, increasing PM hours, next midnight, and so on. */ /* - SPICELIB Version 2.0.0, 03-NOV-2005 (NJB) */ /* Bug fix: treatment of planetographic longitude has been */ /* updated to be consistent with the SPICE planetographic/ */ /* rectangular coordinate conversion routines. The effect of */ /* this change is that the default sense of positive longitude */ /* for the moon is now east; also, the default sense of positive */ /* planetographic longitude now may be overridden for any body */ /* (see Particulars above). */ /* Updated to remove non-standard use of duplicate arguments */ /* in RMAIND calls. */ /* - SPICELIB Version 1.1.0, 24-MAR-1998 (WLT) */ /* The integer variable SUN was never initialized in the */ /* previous version of the routine. Now it is set to */ /* the proper value of 10. */ /* - SPICELIB Version 1.0.0, 9-JUL-1997 (WLT) */ /* -& */ /* $ Index_Entries */ /* Compute the local time for a point on a body. */ /* -& */ /* SPICELIB Functions */ /* Local parameters */ /* Local Variables */ /* Standard SPICE error handling. */ if (return_()) { return 0; } chkin_("ET2LST", (ftnlen)6); ljust_(type__, mytype, type_len, (ftnlen)32); ucase_(mytype, mytype, (ftnlen)32, (ftnlen)32); if (s_cmp(mytype, "PLANETOGRAPHIC", (ftnlen)32, (ftnlen)14) == 0) { /* Find planetocentric longitude corresponding to the input */ /* longitude. We first represent in rectangular coordinates */ /* a surface point having zero latitude, zero altitude, and */ /* the input planetographic longitude. We then find the */ /* planetocentric longitude of this point. */ /* Since PGRREC accepts a body name, map the input code to */ /* a name, if possible. Otherwise, just convert the input code */ /* to a string. */ bodc2n_(body, bodnam, &found, (ftnlen)36); if (! found) { intstr_(body, bodnam, (ftnlen)36); } /* Convert planetographic coordinates to rectangular coordinates. */ /* All we care about here is longitude. Set the other inputs */ /* as follows: */ /* Latitude = 0 */ /* Altitude = 0 */ /* Equatorial radius = 1 */ /* Flattening factor = 0 */ pgrrec_(bodnam, long__, &c_b4, &c_b4, &c_b6, &c_b4, spoint, (ftnlen) 36); /* The output MYLONG is planetocentric longitude. The other */ /* outputs are not used. Note that the variable RANGE appears */ /* later in another RECLAT call; it's not used after that. */ reclat_(spoint, &range, &mylong, &lat); } else if (s_cmp(mytype, "PLANETOCENTRIC", (ftnlen)32, (ftnlen)14) == 0) { mylong = *long__; } else { setmsg_("The coordinate system '#' is not a recognized system of lon" "gitude. The recognized systems are 'PLANETOCENTRIC' and 'PL" "ANETOGRAPHIC'. ", (ftnlen)134); errch_("#", type__, (ftnlen)1, type_len); sigerr_("SPICE(UNKNOWNSYSTEM)", (ftnlen)20); chkout_("ET2LST", (ftnlen)6); return 0; } /* It's always noon on the surface of the sun. */ if (*body == 10) { *hr = 12; *mn = 0; *sc = 0; s_copy(time, "12:00:00", time_len, (ftnlen)8); s_copy(ampm, "12:00:00 P.M.", ampm_len, (ftnlen)13); chkout_("ET2LST", (ftnlen)6); return 0; } /* Get the body-fixed position of the sun. */ cidfrm_(body, &frcode, frame, &found, (ftnlen)32); if (! found) { setmsg_("The body-fixed frame associated with body # could not be de" "termined. This information needs to be \"loaded\" via a fra" "mes definition kernel. See frames.req for more details. ", ( ftnlen)174); errint_("#", body, (ftnlen)1); sigerr_("SPICE(CANTFINDFRAME)", (ftnlen)20); chkout_("ET2LST", (ftnlen)6); return 0; } spkez_(&c__10, et, frame, "LT+S", body, state, <, (ftnlen)32, (ftnlen)4) ; reclat_(state, &range, &slong, &slat); angle = mylong - slong; /* Force the angle into the region from -PI to PI */ d__1 = twopi_(); rmaind_(&angle, &d__1, &q, &tmpang); angle = tmpang; if (angle > pi_()) { angle -= twopi_(); } /* Get the rotation sense of the body and invert the angle if the */ /* rotation sense is retrograde. Use the BODY#_PM PCK keyword to */ /* determine the sense of the body rotation. */ s_copy(bpmkwd, "BODY#_PM", (ftnlen)32, (ftnlen)8); repmi_(bpmkwd, "#", body, bpmkwd, (ftnlen)32, (ftnlen)1, (ftnlen)32); dtpool_(bpmkwd, &found, &n, kwtype, (ftnlen)32, (ftnlen)1); if (! found || *(unsigned char *)kwtype != 'N' || n < 2) { setmsg_("The rotation type for the body # could not be determined be" "cause the # keyword was either not found in the POOL or or i" "t was not of the expected type and/or dimension. This keywor" "d is usually provided via a planetary constants kernel. See " "pck.req for more details. ", (ftnlen)265); errint_("#", body, (ftnlen)1); errch_("#", bpmkwd, (ftnlen)1, (ftnlen)32); sigerr_("SPICE(CANTGETROTATIONTYPE)", (ftnlen)26); chkout_("ET2LST", (ftnlen)6); return 0; } else { /* If the rotation rate is negative, invert the angle. */ gdpool_(bpmkwd, &c__2, &c__1, &n, &rate, &found, (ftnlen)32); if (rate < 0.) { angle = -angle; } } /* Convert the angle to "angle seconds" before or after local noon. */ secnds = angle * 86400. / twopi_(); secnds = brcktd_(&secnds, &c_b32, &c_b33); /* Get the hour, and minutes components of the local time. */ rmaind_(&secnds, &c_b34, &hours, &tmpsec); rmaind_(&tmpsec, &c_b35, &mins, &secnds); /* Construct the integer components of the local time. */ *hr = (integer) hours + 12; *mn = (integer) mins; *sc = (integer) secnds; /* Set the A.M./P.M. components of local time. */ if (*hr == 24) { *hr = 0; hrampm = 12; s_copy(amorpm, "A.M.", (ftnlen)4, (ftnlen)4); } else if (*hr > 12) { hrampm = *hr - 12; s_copy(amorpm, "P.M.", (ftnlen)4, (ftnlen)4); } else if (*hr == 12) { hrampm = 12; s_copy(amorpm, "P.M.", (ftnlen)4, (ftnlen)4); } else if (*hr == 0) { hrampm = 12; s_copy(amorpm, "A.M.", (ftnlen)4, (ftnlen)4); } else { hrampm = *hr; s_copy(amorpm, "A.M.", (ftnlen)4, (ftnlen)4); } /* Now construct the two strings we need. */ hours = (doublereal) (*hr); mins = (doublereal) (*mn); secnds = (doublereal) (*sc); dpfmt_(&hours, "0x", h__, (ftnlen)2, (ftnlen)2); dpfmt_(&mins, "0x", m, (ftnlen)2, (ftnlen)2); dpfmt_(&secnds, "0x", s, (ftnlen)2, (ftnlen)2); /* Writing concatenation */ i__1[0] = 2, a__1[0] = h__; i__1[1] = 1, a__1[1] = ":"; i__1[2] = 2, a__1[2] = m; i__1[3] = 1, a__1[3] = ":"; i__1[4] = 2, a__1[4] = s; s_cat(time, a__1, i__1, &c__5, time_len); hours = (doublereal) hrampm; dpfmt_(&hours, "0x", h__, (ftnlen)2, (ftnlen)2); /* Writing concatenation */ i__2[0] = 2, a__2[0] = h__; i__2[1] = 1, a__2[1] = ":"; i__2[2] = 2, a__2[2] = m; i__2[3] = 1, a__2[3] = ":"; i__2[4] = 2, a__2[4] = s; i__2[5] = 1, a__2[5] = " "; i__2[6] = 4, a__2[6] = amorpm; s_cat(ampm, a__2, i__2, &c__7, ampm_len); chkout_("ET2LST", (ftnlen)6); return 0; } /* et2lst_ */
/* $Procedure DISTIM ( Format Time for Displaying by BRIEF ) */ /* Subroutine */ int distim_(char *timtyp, doublereal *et, char *timlbl, char *timstr, ftnlen timtyp_len, ftnlen timlbl_len, ftnlen timstr_len) { /* Builtin functions */ integer s_cmp(char *, char *, ftnlen, ftnlen); /* Subroutine */ int s_copy(char *, char *, ftnlen, ftnlen); /* Local variables */ extern /* Subroutine */ int etcal_(doublereal *, char *, ftnlen), chkin_( char *, ftnlen), errch_(char *, char *, ftnlen, ftnlen), dpfmt_( doublereal *, char *, char *, ftnlen, ftnlen), sigerr_(char *, ftnlen), chkout_(char *, ftnlen), setmsg_(char *, ftnlen); extern logical return_(void); extern /* Subroutine */ int timout_(doublereal *, char *, char *, ftnlen, ftnlen); /* $ Abstract */ /* Format time for displaying by BRIEF. */ /* $ Disclaimer */ /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ /* $ Required_Reading */ /* None. */ /* $ Keywords */ /* KERNEL */ /* UTILITY */ /* $ Declarations */ /* $ Brief_I/O */ /* VARIABLE I/O DESCRIPTION */ /* -------- --- -------------------------------------------------- */ /* TIMTYP I Desired output format */ /* ET I ET to be formatted */ /* TIMLBL O Label for BRIEF table heading. */ /* TIMSTR O Output time string. */ /* $ Detailed_Input */ /* TIMTYP is the desired output format type: ETCAL, UTCCAL, */ /* UTCDOY, or ETSEC. */ /* ET is the input ET seconds past J2000 to be formatted. */ /* $ Detailed_Output */ /* TIMLBL is the label for BRIEF table heading. */ /* TIMSTR is the output time string. */ /* $ Parameters */ /* The output format pictures for TIMOUT and DPFMT are provided */ /* using parameters UCLPIC, UDYPIC, and ESCPIC. */ /* $ Exceptions */ /* 1) If the desired output time type is not recognized, then the */ /* error SPICE(BADTIMEFORMAT) is signaled. */ /* 2) If required LSK data are not loaded an error will be signaled */ /* by routines in the calling tree of this routine. */ /* $ Files */ /* An LSK file must be loaded prior to calling this routine. */ /* $ Particulars */ /* The following label and time string will be returned for each */ /* of the allowed time formats: */ /* ETCAL: */ /* TIMLBL = 'ET' */ /* TIMSTR returned by ETCAL */ /* UTCCAL: */ /* TIMLBL = 'UTC' */ /* TIMSTR returned by TIMOUT in */ /* 'YYYY-MON-DD HR:MN:SC.###' format */ /* UTCDOY: */ /* TIMLBL = 'UTC' */ /* TIMSTR returned by TIMOUT in */ /* 'YYYY-DOY // HR:MN:SC.###' format */ /* ETSEC: */ /* TIMLBL = 'ET' */ /* TIMSTR returned by DPFMT in */ /* 'xxxxxxxxxxxxxxxxx.xxxxxx' format */ /* $ Examples */ /* None. */ /* $ Restrictions */ /* This routine must not be called by any routines except BRIEF's */ /* DISPLY routine. */ /* $ Literature_References */ /* None. */ /* $ Author_and_Institution */ /* B.V. Semenov (JPL) */ /* $ Version */ /* - BRIEF Version 1.0.0, 22-OCT-2007 (BVS) */ /* -& */ /* $ Index_Entries */ /* format time for display by BRIEF */ /* -& */ /* SPICELIB functions */ /* Local parameters. */ /* Output format pictures. */ /* Standard SPICE error handling. */ if (return_()) { return 0; } else { chkin_("DISTIM", (ftnlen)6); } /* Set outputs. */ if (s_cmp(timtyp, "ETCAL", timtyp_len, (ftnlen)5) == 0) { s_copy(timlbl, "ET", timlbl_len, (ftnlen)2); etcal_(et, timstr, timstr_len); } else if (s_cmp(timtyp, "UTCCAL", timtyp_len, (ftnlen)6) == 0) { s_copy(timlbl, "UTC", timlbl_len, (ftnlen)3); timout_(et, "YYYY-MON-DD HR:MN:SC.###", timstr, (ftnlen)24, timstr_len); } else if (s_cmp(timtyp, "UTCDOY", timtyp_len, (ftnlen)6) == 0) { s_copy(timlbl, "UTC", timlbl_len, (ftnlen)3); timout_(et, "YYYY-DOY // HR:MN:SC.###", timstr, (ftnlen)24, timstr_len); } else if (s_cmp(timtyp, "ETSEC", timtyp_len, (ftnlen)5) == 0) { s_copy(timlbl, "ET", timlbl_len, (ftnlen)2); dpfmt_(et, "xxxxxxxxxxxxxxxxx.xxxxxx", timstr, (ftnlen)24, timstr_len) ; } else { setmsg_("Time type '#' is not recognized.", (ftnlen)32); errch_("#", timtyp, (ftnlen)1, timtyp_len); sigerr_("SPICE(BADTIMEFORMAT)", (ftnlen)20); chkout_("DISTIM", (ftnlen)6); return 0; } /* All done. */ chkout_("DISTIM", (ftnlen)6); return 0; } /* distim_ */
/* $Procedure ZZGFRPWK ( Geometry finder report work done on a task ) */ /* Subroutine */ int zzgfrpwk_0_(int n__, integer *unit, doublereal *total, doublereal *freq, integer *tcheck, char *begin, char *end, doublereal *incr, ftnlen begin_len, ftnlen end_len) { /* Initialized data */ static integer calls = 0; static integer stdout = 6; static doublereal step = 0.; static doublereal svincr = 0.; static integer svunit = 6; static integer check = 1; static doublereal done = 0.; static doublereal entire = 0.; static char finish[13] = " "; static logical first = TRUE_; static integer ls = 1; static doublereal lstsec = 0.; static char start[55] = " " " "; /* System generated locals */ address a__1[5]; integer i__1[5]; doublereal d__1, d__2; /* Builtin functions */ /* Subroutine */ int s_copy(char *, char *, ftnlen, ftnlen), s_cat(char *, char **, integer *, integer *, ftnlen); /* Local variables */ doublereal tvec[6]; extern /* Subroutine */ int zzgfdsps_(integer *, char *, char *, integer * , ftnlen, ftnlen), zzcputim_(doublereal *), chkin_(char *, ftnlen) , dpfmt_(doublereal *, char *, char *, ftnlen, ftnlen), stdio_( char *, integer *, ftnlen); extern integer rtrim_(char *, ftnlen); extern doublereal brcktd_(doublereal *, doublereal *, doublereal *); doublereal fractn; char messge[78]; doublereal cursec; char prcent[10]; extern /* Subroutine */ int sigerr_(char *, ftnlen), chkout_(char *, ftnlen); extern logical return_(void); extern /* Subroutine */ int writln_(char *, integer *, ftnlen); /* $ Abstract */ /* The entry points under this routine allows one to easily monitor */ /* the status of job in progress. */ /* $ Disclaimer */ /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ /* $ Required_Reading */ /* GF */ /* $ Keywords */ /* UTILITY */ /* REPORT */ /* WORK */ /* $ Declarations */ /* $ Abstract */ /* SPICE private include file intended solely for the support of */ /* SPICE routines. Users should not include this routine in their */ /* source code due to the volatile nature of this file. */ /* This file contains private, global parameter declarations */ /* for the SPICELIB Geometry Finder (GF) subsystem. */ /* $ Disclaimer */ /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ /* $ Required_Reading */ /* GF */ /* $ Keywords */ /* GEOMETRY */ /* ROOT */ /* $ Restrictions */ /* None. */ /* $ Author_and_Institution */ /* N.J. Bachman (JPL) */ /* E.D. Wright (JPL) */ /* $ Literature_References */ /* None. */ /* $ Version */ /* - SPICELIB Version 1.0.0, 17-FEB-2009 (NJB) (EDW) */ /* -& */ /* The set of supported coordinate systems */ /* System Coordinates */ /* ---------- ----------- */ /* Rectangular X, Y, Z */ /* Latitudinal Radius, Longitude, Latitude */ /* Spherical Radius, Colatitude, Longitude */ /* RA/Dec Range, Right Ascension, Declination */ /* Cylindrical Radius, Longitude, Z */ /* Geodetic Longitude, Latitude, Altitude */ /* Planetographic Longitude, Latitude, Altitude */ /* Below we declare parameters for naming coordinate systems. */ /* User inputs naming coordinate systems must match these */ /* when compared using EQSTR. That is, user inputs must */ /* match after being left justified, converted to upper case, */ /* and having all embedded blanks removed. */ /* Below we declare names for coordinates. Again, user */ /* inputs naming coordinates must match these when */ /* compared using EQSTR. */ /* Note that the RA parameter value below matches */ /* 'RIGHT ASCENSION' */ /* when extra blanks are compressed out of the above value. */ /* Parameters specifying types of vector definitions */ /* used for GF coordinate searches: */ /* All string parameter values are left justified, upper */ /* case, with extra blanks compressed out. */ /* POSDEF indicates the vector is defined by the */ /* position of a target relative to an observer. */ /* SOBDEF indicates the vector points from the center */ /* of a target body to the sub-observer point on */ /* that body, for a given observer and target. */ /* SOBDEF indicates the vector points from the center */ /* of a target body to the surface intercept point on */ /* that body, for a given observer, ray, and target. */ /* Number of workspace windows used by ZZGFREL: */ /* Number of additional workspace windows used by ZZGFLONG: */ /* Index of "existence window" used by ZZGFCSLV: */ /* Progress report parameters: */ /* MXBEGM, */ /* MXENDM are, respectively, the maximum lengths of the progress */ /* report message prefix and suffix. */ /* Note: the sum of these lengths, plus the length of the */ /* "percent complete" substring, should not be long enough */ /* to cause wrap-around on any platform's terminal window. */ /* Total progress report message length upper bound: */ /* End of file zzgf.inc. */ /* $ Brief_I/O */ /* VARIABLE I/O Entry points */ /* -------- --- -------------------------------------------------- */ /* UNIT I-O ZZGFWKUN, ZZGFWKMO */ /* TOTAL I-O ZZGFTSWK, ZZGFWKAD, ZZGFWKMO */ /* FREQ I-O ZZGFTSWK, ZZGFWKAD, ZZGFWKMO */ /* TCHECK I-O ZZGFTSWK, ZZGFWKAD, ZZGFWKMO */ /* BEGIN I-O ZZGFTSWK, ZZGFWKAD, ZZGFWKMO */ /* END I-O ZZGFTSWK, ZZGFWKAD, ZZGFWKMO */ /* INCR I-O ZZGFWKIN, ZZGFWKMO */ /* $ Detailed_Input */ /* See the headers of the entry points. */ /* $ Detailed_Output */ /* None. */ /* $ Parameters */ /* MXBEGM, */ /* MXENDM, */ /* MXMSG are, respectively, the maximum lengths of the progress */ /* message prefix, progress message suffix, and the */ /* complete message. */ /* $ Exceptions */ /* If this routine is called directly, the error SPICE(BOGUSENTRY) */ /* is signaled. */ /* See the entry points for descriptions of exceptions they detect. */ /* $ Files */ /* None. */ /* $ Particulars */ /* The entry points under this routine are designed to allow one to */ /* easily build into his/her application a monitoring facility */ /* that reports how work on a particular task is proceeding. */ /* There are five entry points: ZZGFTSWK, ZZGFWKIN, ZZGFWKAD, */ /* ZZGFWKUN, and ZZGFWKMO. */ /* The first entry point ZZGFTSWK is used to initialize the reporter. */ /* It is used to tell the reporter "I have some work to do. This is */ /* how much, and this is how often I want you to report on the */ /* progress of the task." */ /* The second entry point ZZGFWKIN is used to tell the reporter "I've */ /* just finished some of the task I told you about with ZZGFTSWK. */ /* This is how much I've just done." (As in real life, the amount */ /* of work you've just done can be negative.) The reporter uses */ /* this information together with the information input in ZZGFTSWK */ /* to decide whether and how much work to report as finished. The */ /* reports will be sent to the current output device. */ /* The third entry point, ZZGFWKAD, adjusts the frequency with which */ /* work progress is reported. */ /* The fourth entry point ZZGFWKUN also is used for testing. It is */ /* used to send the output to the file connected to a specified */ /* logical unit. */ /* The fifth entry point ZZGFWKMO is used for testing. It returns */ /* the saved search parameters. */ /* A more detailed description of each entry point is provided in its */ /* associated header. */ /* $ Examples */ /* A typical use of ZZGFRPWK might be as follows. */ /* C */ /* C Compute how much work is to be done and put it in TOTAL */ /* C */ /* code */ /* computing */ /* how */ /* much */ /* work */ /* to */ /* do */ /* . */ /* . */ /* . */ /* TOTAL = <the amount of work to do> */ /* C */ /* C Tell the work reporter to report work completed every */ /* C 3 seconds. (The third argument in ZZGFTSWK is explained */ /* C in the header for ZZGFTSWK.) */ /* C */ /* FREQUENCY = 3.0D0 */ /* BEGIN = 'Current work status: ' */ /* END = 'completed. ' */ /* CALL ZZGFTSWK ( TOTAL, FREQUENCY, 1, BEGIN, END ) */ /* DO WHILE ( THERE_IS_MORE_WORK_TO_DO ) */ /* code that */ /* performs */ /* the work to */ /* be done */ /* AMOUNT = amount of work done in this loop pass */ /* CALL ZZGFWKIN ( AMOUNT ) */ /* END DO */ /* $ Restrictions */ /* You can use this routine to report progress on only one task at */ /* a time. The work reporter must be initialized using ZZGFTSWK */ /* before calling ZZGFWKIN. Failure to do this may lead to */ /* unexpected results. */ /* $ Literature_References */ /* None. */ /* $ Author_and_Institution */ /* N.J. Bachman (JPL) */ /* L.S. Elson (JPL) */ /* W.L. Taber (JPL) */ /* I.M. Underwood (JPL) */ /* $ Version */ /* - SPICELIB Version 1.0.0 17-FEB-2009 (NJB) (LSE) (WLT) (IMU) */ /* -& */ /* $ Index_Entries */ /* GF low-level progress report umbrella */ /* -& */ /* SPICELIB Functions */ /* Local variables */ /* Saved variables */ /* Initial values */ switch(n__) { case 1: goto L_zzgftswk; case 2: goto L_zzgfwkin; case 3: goto L_zzgfwkad; case 4: goto L_zzgfwkun; case 5: goto L_zzgfwkmo; } chkin_("ZZGFRPWK", (ftnlen)8); sigerr_("SPICE(BOGUSENTRY)", (ftnlen)17); chkout_("ZZGFRPWK", (ftnlen)8); return 0; /* $Procedure ZZGFTSWK ( Geometry finder total sum of work to be done. ) */ L_zzgftswk: /* $ Abstract */ /* Initialize the work progress utility. This is required prior to */ /* use of the routine that performs the actual reporting. */ /* $ Disclaimer */ /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ /* $ Required_Reading */ /* GF */ /* $ Keywords */ /* UTILITY */ /* REPORT */ /* WORK */ /* $ Declarations */ /* DOUBLE PRECISION TOTAL */ /* DOUBLE PRECISION FREQ */ /* INTEGER TCHECK */ /* CHARACTER*(*) BEGIN */ /* CHARACTER*(*) END */ /* $ Brief_I/O */ /* VARIABLE I/O DESCRIPTION */ /* -------- --- -------------------------------------------------- */ /* TOTAL I A measure of the total amount of work to be done. */ /* FREQ I How often the work progress should be reported. */ /* TCHECK I How often to sample the system clock. */ /* BEGIN I First part of the output message. */ /* END I Last part of the output message. */ /* $ Detailed_Input */ /* UNIT is a logical unit connected to the output stream */ /* to which the progress report should be sent. */ /* Normally UNIT is set to the standard output unit, */ /* which can be obtained by calling the SPICELIB */ /* routine STDIO. Unit can be a logical unit connected */ /* to a file; this feature supports testing. */ /* TOTAL is a measure of the total amount of work to be done */ /* by the routine(s) that will be using this facility. */ /* It is expected (but not required) that TOTAL is a */ /* positive number. */ /* FREQ is the how often the work progress should be reported */ /* in seconds. If FREQ = 5 then a work progress report */ /* will be sent to the output device approximately every */ /* 5 seconds. Since writing to the output device takes */ /* time, the smaller FREQ is set, the greater the overhead */ /* taken up by the work reporter will be. ( A value of 2 */ /* or greater should not burden your application */ /* appreciably ) */ /* TCHECK is an integer used to the tell the reporter how often */ /* to sample the system clock. If TCHECK = 7, then on */ /* every seventh call to ZZGFWKIN, the system clock will */ /* be sampled to determine if FREQ seconds have elapsed */ /* since the last report time. Sampling the system clock */ /* takes time. Not a lot of time, but it does take time. */ /* If ZZGFWKIN is being called from a loop that does not */ /* take a lot of time for each pass, the sampling of */ /* the system clock can become a significant overhead */ /* cost in itself. On the VAX the sampling of the */ /* system clock used here takes about 37 double precision */ /* multiplies. If thousands of multiplies take place */ /* between calls to ZZGFWKIN, the sampling time is */ /* insignificant. On the other hand, if only a hundred or */ /* so multiplies occur between calls to ZZGFWKIN, the */ /* sampling of the system clock can become a significant */ /* fraction of your overhead. TCHECK allows you to */ /* tailor the work reporter to your application. */ /* If a non-positive value for TCHECK is entered, a value */ /* of 1 will be used instead of the input value. */ /* BEGIN Is the first part of the output message that will be */ /* constructed for shipment to the output device. This */ /* message will have the form: */ /* BEGIN // xx.x% // END */ /* where xx.x is the percentage of the job completed when */ /* the output message is sent to the output device. */ /* END is the second part of the output message that will be */ /* constructed and sent to the output device (see above). */ /* $ Detailed_Output */ /* None. */ /* $ Parameters */ /* None. */ /* $ Exceptions */ /* Standard SPICE error handling. */ /* $ Files */ /* None. */ /* $ Particulars */ /* This entry point is used to initialize parameters that will */ /* be used by ZZGFWKIN. */ /* $ Examples */ /* None. */ /* $ Restrictions */ /* See the header for this module */ /* $ Literature_References */ /* None. */ /* $ Author_and_Institution */ /* N.J. Bachman (JPL) */ /* L.S. Elson (JPL) */ /* W.L. Taber (JPL) */ /* I.M. Underwood (JPL) */ /* $ Version */ /* - SPICELIB Version 1.0.0 17-FEB-2009 (NJB) (LSE) (WLT) (IMU) */ /* -& */ /* $ Index_Entries */ /* GF low-level initialize progress report */ /* -& */ if (return_()) { return 0; } chkin_("ZZGFTSWK", (ftnlen)8); /* On the first pass, obtain the logical unit for */ /* standard output. */ if (first) { stdio_("STDOUT", &stdout, (ftnlen)6); /* The output unit is STDOUT unless the caller */ /* sets it to something else. */ svunit = stdout; first = FALSE_; } /* Save the inputs and set the amount of work done to 0 */ entire = *total; /* Computing MIN */ d__1 = 3600., d__2 = max(0.,*freq); step = min(d__1,d__2); check = max(1,*tcheck); s_copy(start, begin, (ftnlen)55, begin_len); s_copy(finish, end, (ftnlen)13, end_len); done = 0.; /* Set the timer. */ zzcputim_(tvec); lstsec = tvec[3] * 3600. + tvec[4] * 60. + tvec[5]; /* Set the increment counter */ calls = 0; /* Compose the output message. */ ls = rtrim_(start, (ftnlen)55); /* Writing concatenation */ i__1[0] = ls, a__1[0] = start; i__1[1] = 1, a__1[1] = " "; i__1[2] = 7, a__1[2] = " 0.00%"; i__1[3] = 1, a__1[3] = " "; i__1[4] = 13, a__1[4] = finish; s_cat(messge, a__1, i__1, &c__5, (ftnlen)78); /* Display a blank line, make sure we don't overwrite anything */ /* at the bottom of the screen. The display the message. */ if (svunit == stdout) { zzgfdsps_(&c__1, messge, "A", &c__0, (ftnlen)78, (ftnlen)1); } else { /* Write the message without special carriage control. */ writln_(" ", &svunit, (ftnlen)1); writln_(" ", &svunit, (ftnlen)1); writln_(messge, &svunit, (ftnlen)78); } chkout_("ZZGFTSWK", (ftnlen)8); return 0; /* $Procedure ZZGFWKIN ( Geometry finder work finished increment ) */ L_zzgfwkin: /* $ Abstract */ /* Let the work reporter know that an increment of work has just */ /* been completed. */ /* $ Disclaimer */ /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ /* $ Required_Reading */ /* GF */ /* $ Keywords */ /* UTILITY */ /* REPORT */ /* WORK */ /* $ Declarations */ /* DOUBLE PRECISION INCR */ /* $ Brief_I/O */ /* VARIABLE I/O DESCRIPTION */ /* -------- --- -------------------------------------------------- */ /* INCR I An amount of work just completed. */ /* $ Detailed_Input */ /* INCR is some amount of work that has been completed since */ /* the last call to ZZGFWKIN. */ /* $ Detailed_Output */ /* None. */ /* $ Parameters */ /* None. */ /* $ Exceptions */ /* Standard SPICE error handling. */ /* $ Files */ /* None. */ /* $ Particulars */ /* This entry point is used to report work that has been done since */ /* initialization was performed using ZZGFTSWK or since the last */ /* call to ZZGFWKIN. The work reporter uses this information */ /* together with samples of the system clock to report how much of */ /* the total job has been completed. */ /* $ Examples */ /* None. */ /* $ Restrictions */ /* See the header for this module */ /* $ Literature_References */ /* None. */ /* $ Author_and_Institution */ /* N.J. Bachman (JPL) */ /* L.S. Elson (JPL) */ /* W.L. Taber (JPL) */ /* I.M. Underwood (JPL) */ /* $ Version */ /* - SPICELIB Version 1.0.0 17-FEB-2009 (NJB) (LSE) (WLT) (IMU) */ /* -& */ /* $ Index_Entries */ /* ZZGF low-level progress report increment */ /* -& */ if (return_()) { return 0; } chkin_("ZZGFWKIN", (ftnlen)8); svincr = *incr; done += *incr; ++calls; if (entire == 0.) { chkout_("ZZGFWKIN", (ftnlen)8); return 0; } if (calls >= check) { calls = 0; zzcputim_(tvec); cursec = tvec[3] * 3600. + tvec[4] * 60. + tvec[5]; if ((d__1 = cursec - lstsec, abs(d__1)) >= step) { lstsec = cursec; /* Report how much work has been done. */ d__1 = done / entire * 100.; fractn = brcktd_(&d__1, &c_b19, &c_b20); dpfmt_(&fractn, "xxx.xx", prcent, (ftnlen)6, (ftnlen)10); *(unsigned char *)&prcent[6] = '%'; /* Writing concatenation */ i__1[0] = ls, a__1[0] = start; i__1[1] = 1, a__1[1] = " "; i__1[2] = 7, a__1[2] = prcent; i__1[3] = 1, a__1[3] = " "; i__1[4] = rtrim_(finish, (ftnlen)13), a__1[4] = finish; s_cat(messge, a__1, i__1, &c__5, (ftnlen)78); if (svunit == stdout) { zzgfdsps_(&c__0, messge, "A", &c__0, (ftnlen)78, (ftnlen)1); } else { /* Write the message without special carriage control. */ writln_(messge, &svunit, (ftnlen)78); } } } chkout_("ZZGFWKIN", (ftnlen)8); return 0; /* $Procedure ZZGFWKAD ( Geometry finder work reporting adjustment ) */ L_zzgfwkad: /* $ Abstract */ /* Adjust the frequency with which work progress is reported. */ /* $ Disclaimer */ /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ /* $ Required_Reading */ /* GF */ /* $ Keywords */ /* UTILITY */ /* REPORT */ /* WORK */ /* $ Declarations */ /* DOUBLE PRECISION FREQ */ /* INTEGER TCHECK */ /* CHARACTER*(*) BEGIN */ /* CHARACTER*(*) END */ /* $ Brief_I/O */ /* VARIABLE I/O DESCRIPTION */ /* -------- --- -------------------------------------------------- */ /* TOTAL I A measure of the total amount of work to be done. */ /* FREQ I How often the work progress should be reported. */ /* BEGIN I First part of the output message. */ /* END I Last part of the output message. */ /* $ Detailed_Input */ /* FREQ is the how often the work progress should be reported */ /* in seconds. If FREQ = 5 then a work progress report */ /* will be sent to the output device approximately every */ /* 5 seconds. Since writing to the output device takes */ /* time, the smaller FREQ is set, the greater the overhead */ /* taken up by the work reporter will be. ( A value of 2 */ /* or greater should not burden your application */ /* appreciably ) */ /* TCHECK is an integer used to the tell the reporter how often */ /* to sample the system clock. If TCHECK = 7, then on */ /* every seventh call to ZZGFWKIN, the system clock will */ /* be sampled to determine if FREQ seconds have elapsed */ /* since the last report time. Sampling the system clock */ /* takes time. Not a lot of time, but it does take time. */ /* If ZZGFWKIN is being called from a loop that does not */ /* take a lot of time for each pass, the sampling of */ /* the system clock can become a significant overhead */ /* cost in itself. On the VAX the sampling of the */ /* system clock used here takes about 37 double precision */ /* multiplies. If thousands of multiplies take place */ /* between calls to ZZGFWKIN, the sampling time is */ /* insignificant. On the other hand, if only a hundred or */ /* so multiplies occur between calls to ZZGFWKIN, the */ /* sampling of the system clock can become a significant */ /* fraction of your overhead. TCHECK allows you to */ /* tailor the work reporter to your application. */ /* If a non-positive value for TCHECK is entered, a value */ /* of 1 will be used instead of the input value. */ /* BEGIN Is the first part of the output message that will be */ /* constructed for shipment to the output device. This */ /* message will have the form: */ /* BEGIN // xx.x% // END */ /* where xx.x is the percentage of the job completed when */ /* the output message is sent to the output device. */ /* END is the second part of the output message that will be */ /* constructed and sent to the output device (see above). */ /* $ Detailed_Output */ /* None. */ /* $ Parameters */ /* None. */ /* $ Exceptions */ /* Error free. */ /* 1) If TCHECK is less than 1, the value 1 is stored. */ /* 2) If FREQ is less than 0.1, the value 0.1 is stored. */ /* If FREQ is greater than 3600, the value 3600 is stored. */ /* $ Files */ /* None. */ /* $ Particulars */ /* This entry point exists to modify the reporting frequency set */ /* up by an initial call to ZZGFTSWK. In this way one can override */ /* how often reporting of work increments is performed, without */ /* causing the screen to be modified (which happens if a new */ /* call to ZZGFTSWK is made.) */ /* It exists primarily as a back door to existing code */ /* that calls ZZGFTSWK in a rigid way. */ /* $ Examples */ /* None. */ /* $ Restrictions */ /* See the header for this module. */ /* $ Literature_References */ /* None. */ /* $ Author_and_Institution */ /* N.J. Bachman (JPL) */ /* W.L. Taber (JPL) */ /* I.M. Underwood (JPL) */ /* L.S. Elson (JPL) */ /* $ Version */ /* - SPICELIB Version 1.0.0 17-FEB-2009 (NJB) (LSE) (WLT) (IMU) */ /* -& */ /* $ Index_Entries */ /* GF low-level progress report adjust frequency */ /* -& */ /* Computing MIN */ d__1 = 3600., d__2 = max(0.,*freq); step = min(d__1,d__2); check = max(1,*tcheck); s_copy(start, begin, (ftnlen)55, begin_len); s_copy(finish, end, (ftnlen)13, end_len); return 0; /* $Procedure ZZGFWUN ( Geometry finder set work report output unit ) */ L_zzgfwkun: /* $ Abstract */ /* Set the output unit for the progress report. */ /* $ Disclaimer */ /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ /* $ Required_Reading */ /* GF */ /* $ Keywords */ /* UTILITY */ /* REPORT */ /* WORK */ /* $ Declarations */ /* INTEGER UNIT */ /* $ Brief_I/O */ /* VARIABLE I/O DESCRIPTION */ /* -------- --- -------------------------------------------------- */ /* UNIT I Output logical unit. */ /* $ Detailed_Input */ /* UNIT Logical unit of a text file open for write access. */ /* $ Detailed_Output */ /* None. */ /* $ Parameters */ /* None. */ /* $ Exceptions */ /* Error free. */ /* $ Files */ /* The file designated by UNIT should be a text file opened by the */ /* calling application. */ /* $ Particulars */ /* This routine can be called before ZZGFTSWK to set the output */ /* logical unit to that of a text file. */ /* This entry point exists to support testing of the higher-level */ /* GF progress reporting routines */ /* GFREPI */ /* GFREPU */ /* GFREPF */ /* This routine enables TSPICE to send the output report to */ /* a specified file. */ /* $ Examples */ /* None. */ /* $ Restrictions */ /* None. */ /* $ Literature_References */ /* None. */ /* $ Author_and_Institution */ /* N.J. Bachman (JPL) */ /* $ Version */ /* - SPICELIB Version 1.0.0 17-FEB-2009 (NJB) */ /* -& */ /* $ Index_Entries */ /* GF low-level progress report output select unit */ /* -& */ /* On the first pass, obtain the logical unit for */ /* standard output. */ if (first) { stdio_("STDOUT", &stdout, (ftnlen)6); first = FALSE_; } svunit = *unit; return 0; /* $Procedure ZZGFWKMO ( Geometry finder work reporting monitor ) */ L_zzgfwkmo: /* $ Abstract */ /* Return saved progress report parameters. */ /* $ Disclaimer */ /* THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE */ /* CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S. */ /* GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE */ /* ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE */ /* PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS" */ /* TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY */ /* WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A */ /* PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC */ /* SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE */ /* SOFTWARE AND RELATED MATERIALS, HOWEVER USED. */ /* IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA */ /* BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT */ /* LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND, */ /* INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS, */ /* REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE */ /* REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY. */ /* RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF */ /* THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY */ /* CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE */ /* ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE. */ /* $ Required_Reading */ /* GF */ /* $ Keywords */ /* UTILITY */ /* REPORT */ /* WORK */ /* $ Declarations */ /* INTEGER UNIT */ /* DOUBLE PRECISION TOTAL */ /* DOUBLE PRECISION FREQ */ /* INTEGER TCHECK */ /* CHARACTER*(*) BEGIN */ /* CHARACTER*(*) END */ /* DOUBLE PRECISION INCR */ /* $ Brief_I/O */ /* VARIABLE I/O DESCRIPTION */ /* -------- --- -------------------------------------------------- */ /* UNIT O Output logical unit. */ /* TOTAL O A measure of the total amount of work to be done. */ /* FREQ O How often the work progress should be reported. */ /* TCHECK O Number of calls between system time check. */ /* BEGIN O First part of the output message. */ /* END O Last part of the output message. */ /* INCR O Last progress increment. */ /* $ Detailed_Input */ /* None. */ /* $ Detailed_Output */ /* UNIT, */ /* TOTAL, */ /* FREQ, */ /* TCHECK, */ /* BEGIN, */ /* END, */ /* INCR are the most recent values of these */ /* variables passed in via calls to ZZGFTSWK, */ /* ZZGFWKIN, or ZZGFWKAD. */ /* $ Parameters */ /* None. */ /* $ Exceptions */ /* Error free. */ /* $ Files */ /* None. */ /* $ Particulars */ /* This entry point exists to support testing of the higher-level */ /* GF progress reporting routines */ /* GFREPI */ /* GFREPU */ /* GFREPF */ /* This routine enables TSPICE to determine the values passed */ /* in to entry points of this package by those routines. */ /* $ Examples */ /* None. */ /* $ Restrictions */ /* None. */ /* $ Literature_References */ /* None. */ /* $ Author_and_Institution */ /* N.J. Bachman (JPL) */ /* $ Version */ /* - SPICELIB Version 1.0.0 17-FEB-2009 (NJB) */ /* -& */ /* $ Index_Entries */ /* GF low-level progress report monitor */ /* -& */ *unit = svunit; *total = entire; *freq = step; *tcheck = check; s_copy(begin, start, begin_len, (ftnlen)55); s_copy(end, finish, end_len, (ftnlen)13); *incr = svincr; return 0; } /* zzgfrpwk_ */