#include #include struct cgd_read { scalar * var; FILE *fid; unsigned int it; double *dt; }; // Reads in an opened .cgd file that is specified by p.fid (renamed fid in the function) and interpolates it onto p.var void basilisk_cgd_read ( struct cgd_read p) { scalar var_out = p.var[0]; unsigned int dimnum,tdimlen,xdimlen,ydimlen; char cc1[2], cc2[2], cc3[2]; dimnum=0; fscanf(p.fid,"%u",&dimnum); fprintf(stdout,"%% dimnum = %d\n",dimnum); // If 3d reads in timeslice 'it' if (dimnum == 3){ fscanf(p.fid,"%s %s %s",cc1,cc2,cc3); fprintf(stdout,"%% Dimensions are: %s %s %s\n",cc1,cc2,cc3); if (!strcmp(cc1,"t") && !strcmp(cc2,"y") && !strcmp(cc3,"x")) { fscanf(p.fid,"%u %u %u",&tdimlen,&ydimlen,&xdimlen); } else if (!strcmp(cc1,"t") && !strcmp(cc2,"x") && !strcmp(cc3,"y")) { fscanf(p.fid,"%u %u %u",&tdimlen,&xdimlen,&ydimlen); } double t0[tdimlen]; for (unsigned int it=0 ; it= tdimlen-1) *p.dt=1.e37; else *p.dt=t0[p.it+1]-t0[p.it]; } else if(dimnum == 2) { fscanf(p.fid,"%s %s",cc1,cc2); fprintf(stdout,"%% Dimensions are %s %s\n",cc1,cc2); if (!strcmp(cc1,"y") && !strcmp(cc2,"x")) { fscanf(p.fid,"%u %u",&ydimlen,&xdimlen); fprintf(stdout,"%% %s dim length %d, %s dim length %d\n",cc1,ydimlen,cc2,xdimlen); } else if (!strcmp(cc1,"x") && !strcmp(cc2,"y")) { fscanf(p.fid,"%u %u",&xdimlen,&ydimlen); fprintf(stdout,"%% %s dim length %d, %s dim length %d\n",cc1,xdimlen,cc2,ydimlen); } } double y0[ydimlen],x0[xdimlen]; double var[ydimlen][xdimlen]; if (!strcmp(cc1,"t")) { if (!strcmp(cc2,"y") && !strcmp(cc3,"x")) { for (unsigned int iy=0 ; iy= 0 && ix < xdimlen-1 && iy >= 0 && iy < ydimlen-1 ) ) { out=var[iy][ix] * ( 1. - dx ) * ( 1. - dy ) + var[iy][ix+1] * dx * ( 1. - dy ) + var[iy+1][ix] * ( 1. - dx ) * dy + var[iy+1][ix+1] * dx * dy; } else { out = 0.; } var_out[] = out; }; } struct Deformation_cgd_read { scalar d; double x, y; unsigned int xdimlen,ydimlen; double *x0,*y0,*var; FILE *fid; int (* iterate) (void); }; void cgd_interpolate (struct Deformation_cgd_read p) { double dx0 = *(p.x0+1) - *(p.x0); double dy0 = *(p.y0+1) - *(p.y0); double outval; /*for (unsigned int ix=0 ; ix= 0 && ix < p.xdimlen-1 && iy >= 0 && iy < p.ydimlen-1 ) ) { outval=*(p.var+ix*p.ydimlen+iy) * ( 1. - dx ) * ( 1. - dy ) + *(p.var+(ix+1)*p.ydimlen+iy) * dx * ( 1. - dy ) + *(p.var+ix*p.ydimlen+iy+1) * ( 1. - dx ) * dy + *(p.var+(ix+1)*p.ydimlen+iy+1) * dx * dy; } else { outval = 0.; } val(p.d,0,0)=outval; } } // Reads in an opened .cgd file that is specified by p.fid (renamed fid in the function) and interpolates it onto p.var void deformation_cgd_read (struct Deformation_cgd_read p) { unsigned int dimnum; char cc1[2], cc2[2]; dimnum=0; fscanf(p.fid,"%u",&dimnum); fprintf(stdout,"%% dimnum = %d\n",dimnum); fscanf(p.fid,"%s %s",cc1,cc2); fprintf(stdout,"%% Dimensions are %s %s\n",cc1,cc2); if (!strcmp(cc1,"y") && !strcmp(cc2,"x")) { fscanf(p.fid,"%u %u",&p.ydimlen,&p.xdimlen); fprintf(stdout,"%% %s dim length %d, %s dim length %d\n",cc1,p.ydimlen,cc2,p.xdimlen); } else if (!strcmp(cc1,"x") && !strcmp(cc2,"y")) { fscanf(p.fid,"%u %u",&p.xdimlen,&p.ydimlen); fprintf(stdout,"%% %s dim length %d, %s dim length %d\n",cc1,p.xdimlen,cc2,p.ydimlen); } p.x0=(double*)malloc(p.xdimlen*sizeof(double)); p.y0=(double*)malloc(p.ydimlen*sizeof(double)); p.var=(double*)malloc((p.ydimlen*p.xdimlen)*sizeof(double));; if (!strcmp(cc1,"y") && !strcmp(cc2,"x")) { for (unsigned int iy=0 ; iy dry ? max (0., hold[] + h[]) : hold[]; eta[] = zb[] + h[]; } foreach(){ l[]=level; } printf ("%% file: B-%d\n", 20-nitermax); output_field ({eta, h, zb, def, l}, stdout, n = 1 << 8, linear = false); } while (p.iterate && p.iterate() && nitermax--); }