gcs1.c
0000/*********************************************
0001
0002 Miscellaneous Functions
0003
0004********************************************/
0005
0006#include <math.h>
0007
0008double Jn(int i,double x)
0009{
0010 switch (i){
0011 case 0:
0012 return j0(x);
0013 break;
0014 case 1:
0015 return j1(x);
0016 break;
0017 default:
0018 return jn(i,x);
0019 break;
0020 }
0021}
0022
0023
0024double Yn(int i,double x)
0025{
0026 switch (i){
0027 case 0:
0028 return y0(x);
0029 break;
0030 case 1:
0031 return y1(x);
0032 break;
0033 default:
0034 return yn(i,x);
0035 break;
0036 }
0037}
0038
0039double refday(double mdy,double hms)
0040{
0041 double dmo,ddy,dyr,dhr,dmn,dsc,d;
0042
0043 dmo=floor(mdy);
0044 dyr=100.*(mdy-dmo);
0045 if(dyr>40.){
0046 dmo=dmo+1;
0047 dyr=dyr-100.;
0048 }
0049 ddy=floor(dyr);
0050 dyr=10000.*(dyr-ddy);
0051 if(dyr>8000.){
0052 ddy=ddy+1;
0053 dyr=dyr-10000.;
0054 }
0055 dhr=floor(hms);
0056 dsc=100.*(hms-dhr);
0057 if(dsc>80.){
0058 dhr=dhr+1;
0059 dsc=dsc-100.;
0060 }
0061 dmn=floor(dsc);
0062 dsc=100.*(dsc-dmn);
0063 if(dsc>80.){
0064 dmn=dmn+1;
0065 dsc=dsc-100.;
0066 }
0067
0068 if(dmo<2.1){
0069 dyr=dyr-1.;
0070 dmo=dmo+13.;
0071 }
0072 else dmo=dmo+1.;
0073 d=floor(365.25*dyr)+floor(30.6001*dmo)+ddy+1720982.-2433283.;
0074 d=d+dhr/24.+dmn/1440.+dsc/86400.;
0075 return d;
0076}
0077
0078/****************************************************
0079 ref Julian day -2433283 with fraction of a day
0080 ret mm.ddyyyy
0081****************************************************/
0082double mdyday(double ref)
0083{
0084 double day3,dmo,ddy,dyr;
0085
0086 day3=floor(ref);
0087 day3=day3+2433283.-1720982;
0088 dyr=floor((day3-122.1)/365.25);
0089 dmo=floor((day3-floor(365.25*dyr))/30.6001);
0090 ddy=day3-floor(365.25*dyr)-floor(30.6001*dmo);
0091 dmo=dmo-1.;
0092 if(dmo>12.5) dmo=dmo-12.;
0093 if(dmo<2.5) dyr=dyr+1.;
0094 dmo=dmo+0.01*ddy+0.000001*dyr;
0095 return dmo;
0096}
0097
0098
0099/****************************************************
0100 ref Julian day -2433283 with fraction of a day
0101 ret hh.mmss
0102****************************************************/
0103double hmsday(double ref)
0104{
0105 double day3,h,dmn;
0106
0107 day3=floor(ref);
0108 h=ref-day3;
0109 day3=h*24.;
0110 h=floor(day3);
0111 day3=(day3-h)*60.;
0112 dmn=floor(day3);
0113 day3=(day3-dmn)*60.;
0114 h=h+0.01*dmn+0.0001*day3;
0115 return h;
0116}
0117
0118