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