/* modified from Toh's code rec_3D_4.c read A3 model and output ascii model in grid (grid_A3d.out) new format A3d base file, allowing different level of knots gung 02/2004 * discontinuity to be added */ #include #include #include #include #include #include #define PARAM 5 #define NVKNOT 30 #define NSTRING 100 #define NHKNOT 1500 #define MXCOEF NVKNOT*NHKNOT*PARAM extern float spl(/*ord,nknots,knot,xi*/); extern float *farray1(); float spbsp(float hdel, float ahdel); int loadknots(float *knot); float getdel(float a0, float o0, float a, float o); main(ac, av) int ac; char **av; { FILE *knotfp,*fcoefp2,*recfp; char knotfname[100],string[NSTRING]; float oknot[NHKNOT],aknot[NHKNOT],*kntrad; int nknotA2[PARAM],nknotA1[PARAM]; char block[PARAM],par; float rr[100]; int i,ii,j,jd,kk,k,nn,J,ind,jump,index[NHKNOT]; int io,ia,level[NHKNOT]; int nhknot,nvknot,ndata,nhknot1,ndisc,nanpar; float dv,del,tmp; float bh[NHKNOT],bv,b; float x[MXCOEF],r,a,o,rec,step; float adel[6]={0, 63.4, 31.7, 15.8, 7.9, 3.95}; char outf[80]; if (ac != 2) stop("Usage: %s [spacing of grid]\n", av[0]); /* adel[0]=adel[atoi(av[1])];*/ step=atof(av[1]); if ((knotfp=fopen("lu_hknots","r"))==NULL) /* base file of model */ stop("grid_mA3d_anis: Cannot open knotfp\n"); fgets(string,NSTRING,knotfp); sscanf(string,"%d",&nhknot); i=0; while (fgets(string,NSTRING,knotfp)!=NULL) { sscanf(string,"%f%f%d",&oknot[i],&aknot[i],&level[i]); i++; } if (i!=nhknot) stop("grid_mA3d_anis: inconsistent in nhknot - 1"); printf("Number of spherical splines %d\n",nhknot); fclose(knotfp); if ((fcoefp2=fopen("lu_coef","r"))==0) /* new model */ stop("grid_mA3d_anis: Cannot open new model file"); fscanf(fcoefp2,"%d",&nanpar); if (nanpar>PARAM) stop("grid_mA3d_anis: Too many parametes"); for (k=0;k(6371.0-kntrad[0]) || r<(6371.0-kntrad[nknotA1[0]-1])) { printf("\nr %f rad[0] %f rad[last] %f\n",r,kntrad[0],kntrad[nknotA1[0]-1]); printf("\nDepth out of range!! \n\n "); } else { rr[kk++]=6371.0-r; fprintf(recfp," %10.2f ",r); } } while(r>0); fprintf(recfp,"\n"); } for (io=-45;io<=85;io=io+step) { for (ia=5;ia<=60;ia=ia+step) { a=ia*1.0; o=io*1.0; J=0; for (j=0;j 1.) arg= 1.; if(arg < -1.) arg=-1.; del=r2d*acos(arg); return del; }