int IGRFCall(double date, double flat, double flon, double elev, double *x, double *y, double *z) { int i; char *envstr; char file1[256]; char file2[256]; double ext[3]={0.0,0.0,0.0}; double a2 = 40680925.0; double b2 = 40408588.0; if (igrf_date !=date) { for (i=0;(dtemod[i] !=0) && (dtemod[i]<date);i++); if (i==0) return -1; i--; igrf_date=date; envstr=getenv("IGRF_PATH"); sprintf(file1,"%s/%s",envstr,filmod[i]); getshc(file1, &nmax1, &erad, gh1); sprintf(file2,"%s/%s",envstr,filmod[i+1]); getshc(file2, &nmax2, &erad, gh2); if (i < 12) { interpshc(date, dtemod[i], nmax1, gh1, dtemod[i+1], nmax2, gh2, &nmax, gha); interpshc(date+1,dtemod[i], nmax1, gh1, dtemod[i+1], nmax2, gh2, &nmax, ghb); } else { extrapshc(date, dtemod[i], nmax1, gh1, nmax2, gh2, &nmax, gha); extrapshc(date+1,dtemod[i], nmax1, gh1, nmax2, gh2, &nmax, ghb); } } shval3(1, flat, flon, elev, erad, a2, b2, nmax, gha, 0, ext, x, y, z); return 0; }
int IGRFCall(double date, double flat, double flon, double elev, double *x, double *y, double *z) { int i; char *envstr; char file1[256]; char file2[256]; char line[256]; FILE *fp; double ext[3]={0.0,0.0,0.0}; double a2 = 40680925.0; double b2 = 40408588.0; if (dtemax==0) { envstr=getenv("IGRF_PATH"); sprintf(file1,"%s/%s",envstr,"coef.dat"); fp=fopen(file1,"r"); if (fp==NULL) return -1; int i=0; while (fgets(line,255,fp) !=NULL) { sscanf(line,"%s %lf",filmod[i],&dtemod[i]); i++; } dtemod[i]=0; dtemax=i-2; fclose(fp); } if (igrf_date !=date) { for (i=0;(dtemod[i] !=0) && (dtemod[i]<date);i++); if (i==0) return -1; i--; igrf_date=date; envstr=getenv("IGRF_PATH"); sprintf(file1,"%s/%s",envstr,filmod[i]); getshc(file1, &nmax1, &erad, gh1); sprintf(file2,"%s/%s",envstr,filmod[i+1]); getshc(file2, &nmax2, &erad, gh2); if (i < dtemax) { interpshc(date, dtemod[i], nmax1, gh1, dtemod[i+1], nmax2, gh2, &nmax, gha); interpshc(date+1,dtemod[i], nmax1, gh1, dtemod[i+1], nmax2, gh2, &nmax, ghb); } else { extrapshc(date, dtemod[i], nmax1, gh1, nmax2, gh2, &nmax, gha); extrapshc(date+1,dtemod[i], nmax1, gh1, nmax2, gh2, &nmax, ghb); } } shval3(2, flat, flon, elev, erad, a2, b2, nmax, gha, 0, ext, x, y, z); return 0; }