geomag/geomag.h
changeset 5 033a169071de
equal deleted inserted replaced
4:9d589d06e35e 5:033a169071de
       
     1 #include <stdio.h>
       
     2 #include <stdlib.h>
       
     3 #include <string.h>
       
     4 #include <ctype.h>
       
     5 
       
     6 /* The following include file must define a function 'isnan' */
       
     7 /* This function, which returns '1' if the number is NaN and 0*/
       
     8 /* otherwise, could be hand-written if not available. */
       
     9 /* Comment out one of the two following lines, as applicable */
       
    10 #include <math.h>               /* for gcc */
       
    11 /* #include <mathimf.h>            /\* for Intel icc *\/ */
       
    12 
       
    13 #define NaN log(-1.0)
       
    14 
       
    15 #define IEXT 0
       
    16 #define FALSE 0
       
    17 #define TRUE 1                  /* constants */
       
    18 #define RECL 81
       
    19 
       
    20 #define MAXINBUFF RECL+14
       
    21 
       
    22 /** Max size of in buffer **/
       
    23 
       
    24 #define MAXREAD MAXINBUFF-2
       
    25 /** Max to read 2 less than total size (just to be safe) **/
       
    26 
       
    27 #define MAXMOD 30
       
    28 /** Max number of models in a file **/
       
    29 
       
    30 #define PATH MAXREAD
       
    31 /** Max path and filename length **/
       
    32 
       
    33 #define EXT_COEFF1 (double)0
       
    34 #define EXT_COEFF2 (double)0
       
    35 #define EXT_COEFF3 (double)0
       
    36 
       
    37 #define MAXDEG 13
       
    38 #define MAXCOEFF (MAXDEG*(MAXDEG+2)+1)
       
    39                 /* index starts with 1!, (from old Fortran) */
       
    40 
       
    41 #define RECLEN 80 /* characters excluding line ending(s) */
       
    42 #define MAXMODNAMELENGTH 8
       
    43                 /* e.g. IGRF2005 */
       
    44 
       
    45 struct model_t{
       
    46     char name[MAXMODNAMELENGTH + 1];
       
    47     double epoch;
       
    48     int max1;
       
    49     int max2;
       
    50     int max3;
       
    51     double yrmin;
       
    52     double yrmax;
       
    53     double altmin;
       
    54     double altmax;
       
    55     double gh[MAXCOEFF];  /* first pair of coeffients */
       
    56     double ghr[MAXCOEFF]; /* second pair; usually 0; rates of change */
       
    57     struct model_t *next;
       
    58 };
       
    59 
       
    60 
       
    61 /*  Subroutines used  */
       
    62 
       
    63 void print_dashed_line();
       
    64 void print_long_dashed_line(void);
       
    65 void print_header();
       
    66 void print_result(double date, double d, double i, double h, double x, double y, double z, double f);
       
    67 void print_header_sv();
       
    68 void print_result_sv(double date, double ddot, double idot, double hdot, double xdot, double ydot, double zdot, double fdot);
       
    69 void print_result_file(FILE *outf, double d, double i, double h, double x, double y, double z, double f,
       
    70                        double ddot, double idot, double hdot, double xdot, double ydot, double zdot, double fdot);
       
    71 double degrees_to_decimal(int degrees,int minutes,int seconds);
       
    72 double julday(int i_month, int i_day, int i_year);
       
    73 int interpsh(double date, double dte1, int nmax1, double dte2, double nmax2,
       
    74                 double *gh_Schmidt1, double *gh_Schmidt2, double *gh_model);
       
    75 int extrapsh(double date, double dte1, int nmax1, int nmax2,
       
    76                 double *gh_Schmidt1, double *gh_Schmidt2, double *gh_model);
       
    77 void shval3(int igdgc, double flat, double flon, double elev,
       
    78                 int nmax, double *gh, int iext,
       
    79                 double ext1, double ext2, double ext3,
       
    80                 double *x_ptr, double *y_ptr, double *z_ptr);
       
    81 int   safegets(char *buffer,int n);
       
    82 int getshc(char *file, int iflag, long strec, int nmax_of_gh,
       
    83                     double *gh_Schmidt);
       
    84 
       
    85 void dihf(double x, double y, double z,
       
    86                  double *d_ptr, double *i_ptr, double *h_ptr, double *f_ptr);
       
    87 
       
    88 int models_from_lines(struct model_t ***model_array);
       
    89 int models_from_file(char *filename, struct model_t ***model_array);
       
    90 void free_models(struct model_t **model_array, int nmodels);
       
    91 int dihf_from_models(struct model_t **model_array, int nmodels,
       
    92                         double yr, double lon, double lat,
       
    93                         double *d_ptr, double *i_ptr, double *h_ptr,
       
    94                         double *f_ptr);
       
    95 
       
    96