void predefinedLIMEGrid(inputPars *par, struct grid *g){ FILE *fp; int i; double x,y,z,scale,abun; fp=fopen(par->pregridLIME,"r"); par->ncell=par->pIntensity+par->sinkPoints; /* read in the grid file, which includes all the sink points so we don't need to generate them */ for(i=0;i<par->ncell;i++){ fscanf(fp,"%lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %d\n", &g[i].x[0], &g[i].x[1], &g[i].x[2], &g[i].dens[0], &g[i].t[0], &g[i].t[1], &g[i].abun[0], &g[i].vel[0], &g[i].vel[1], &g[i].vel[2], &g[i].dopb, &g[i].sink); g[i].id=i; g[i].nmol[0]=g[i].abun[0]*g[i].dens[0]; // This next step needs to be done, even though it looks stupid g[i].dir=malloc(sizeof(point)*1); g[i].ds =malloc(sizeof(double)*1); g[i].neigh =malloc(sizeof(int)*1); if(!silent) progressbar((double) i/((double)par->ncell-1), 4); } fclose(fp); qhull(par,g); distCalc(par,g); // getArea(par,g, ran); // getMass(par,g, ran); getVelosplines_lin(par,g); if(par->gridfile) write_VTK_unstructured_Points(par, g); }
ConvexPolyhedronID createConvexPolyhedron( BodyStorage& globalStorage, BlockStorage& blocks, BlockDataID storageID, id_t uid, const Vec3& gpos, const std::vector< Vec3 > & pointCloud, MaterialID material, bool global, bool communicating, bool infiniteMass ) { WALBERLA_ASSERT_UNEQUAL( ConvexPolyhedron::getStaticTypeID(), std::numeric_limits<id_t>::max(), "ConvexPolyhedron TypeID not initalized!"); // Checking the side lengths if( pointCloud.size() < size_t(4) ) WALBERLA_ABORT( "Polyhedron needs at leat 4 points!" ); shared_ptr< TriangleMesh > mesh = make_shared<TriangleMesh>(); mesh::QHull<TriangleMesh> qhull( pointCloud, mesh ); qhull.run(); return createConvexPolyhedron( globalStorage, blocks, storageID, uid, gpos, *mesh, material, global, communicating, infiniteMass ); }
void predefinedGrid(inputPars *par, struct grid *g){ FILE *fp; int i; double x,y,z,scale; gsl_rng *ran = gsl_rng_alloc(gsl_rng_ranlxs2); #ifdef TEST gsl_rng_set(ran,6611304); #else gsl_rng_set(ran,time(0)); #endif fp=fopen(par->pregrid,"r"); par->ncell=par->pIntensity+par->sinkPoints; for(i=0;i<par->pIntensity;i++){ // fscanf(fp,"%d %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf\n", &g[i].id, &g[i].x[0], &g[i].x[1], &g[i].x[2], &g[i].dens[0], &g[i].t[0], &abun, &g[i].dopb, &g[i].vel[0], &g[i].vel[1], &g[i].vel[2]); // fscanf(fp,"%d %lf %lf %lf %lf %lf %lf %lf\n", &g[i].id, &g[i].x[0], &g[i].x[1], &g[i].x[2], &g[i].dens[0], &g[i].t[0], &abun, &g[i].dopb); int nRead = fscanf(fp,"%d %lf %lf %lf %lf %lf %lf %lf %lf\n", &g[i].id, &g[i].x[0], &g[i].x[1], &g[i].x[2], &g[i].dens[0], &g[i].t[0], &g[i].vel[0], &g[i].vel[1], &g[i].vel[2]); if( nRead != 9 || g[i].id < 0 || g[i].id > par->ncell) { if(!silent) bail_out("Reading Grid File error"); exit(0); } g[i].dopb=200; g[i].abun[0]=1e-9; g[i].sink=0; g[i].t[1]=g[i].t[0]; g[i].nmol[0]=g[i].abun[0]*g[i].dens[0]; /* This next step needs to be done, even though it looks stupid */ g[i].dir=malloc(sizeof(point)*1); g[i].ds =malloc(sizeof(double)*1); g[i].neigh =malloc(sizeof(struct grid *)*1); if(!silent) progressbar((double) i/((double)par->pIntensity-1), 4); } for(i=par->pIntensity;i<par->ncell;i++){ x=2*gsl_rng_uniform(ran)-1.; y=2*gsl_rng_uniform(ran)-1.; z=2*gsl_rng_uniform(ran)-1.; if(x*x+y*y+z*z<1){ scale=par->radius*sqrt(1/(x*x+y*y+z*z)); g[i].id=i; g[i].x[0]=scale*x; g[i].x[1]=scale*y; g[i].x[2]=scale*z; g[i].sink=1; g[i].abun[0]=0; g[i].dens[0]=1e-30; g[i].t[0]=par->tcmb; g[i].t[1]=par->tcmb; g[i].dopb=0.; } else i--; } fclose(fp); qhull(par,g); distCalc(par,g); // getArea(par,g, ran); // getMass(par,g, ran); getVelosplines_lin(par,g); if(par->gridfile) write_VTK_unstructured_Points(par, g); gsl_rng_free(ran); }
void popsin(inputPars *par, struct grid **g, molData **m, int *popsdone){ FILE *fp; int i,j,k; double dummy; if((fp=fopen(par->restart, "rb"))==NULL){ if(!silent) bail_out("Error reading binary output populations file!"); exit(1); } par->collPart=1; fread(&par->radius, sizeof(double), 1, fp); fread(&par->ncell, sizeof(int), 1, fp); fread(&par->nSpecies, sizeof(int), 1, fp); if( par->nSpecies < 0 || par->nSpecies > MAX_NSPECIES ) { if(!silent) bail_out("Error reading binary output populations file : is this really a binary output file generated by lime ?"); exit(1); } *m=realloc(*m, sizeof(molData)*par->nSpecies); for(i=0;i<par->nSpecies;i++){ (*m)[i].lcl = NULL; (*m)[i].lcu = NULL; (*m)[i].up = NULL; (*m)[i].down = NULL; (*m)[i].eterm = NULL; (*m)[i].gstat = NULL; (*m)[i].cmb = NULL; fread(&(*m)[i].nlev, sizeof(int), 1,fp); fread(&(*m)[i].nline, sizeof(int), 1,fp); fread(&(*m)[i].npart, sizeof(int), 1,fp); (*m)[i].ntrans=malloc(sizeof(int)*(*m)[i].npart); for(j=0;j<(*m)[i].npart;j++) fread(&(*m)[i].ntrans[j], sizeof(int), 1,fp); (*m)[i].lal=malloc(sizeof(int)*(*m)[i].nline); for(j=0;j<(*m)[i].nline;j++) fread(&(*m)[i].lal[j], sizeof(int), 1,fp); (*m)[i].lau=malloc(sizeof(int)*(*m)[i].nline); for(j=0;j<(*m)[i].nline;j++) fread(&(*m)[i].lau[j], sizeof(int), 1,fp); (*m)[i].aeinst=malloc(sizeof(double)*(*m)[i].nline); for(j=0;j<(*m)[i].nline;j++) fread(&(*m)[i].aeinst[j], sizeof(double), 1,fp); (*m)[i].freq=malloc(sizeof(double)*(*m)[i].nline); for(j=0;j<(*m)[i].nline;j++) fread(&(*m)[i].freq[j], sizeof(double), 1,fp); (*m)[i].beinstl=malloc(sizeof(double)*(*m)[i].nline); for(j=0;j<(*m)[i].nline;j++) fread(&(*m)[i].beinstl[j],sizeof(double), 1,fp); (*m)[i].beinstu=malloc(sizeof(double)*(*m)[i].nline); for(j=0;j<(*m)[i].nline;j++) fread(&(*m)[i].beinstu[j],sizeof(double), 1,fp); (*m)[i].local_cmb = malloc(sizeof(double)*(*m)[i].nline); for(j=0;j<(*m)[i].nline;j++) fread(&(*m)[i].local_cmb[j],sizeof(double), 1,fp); fread(&(*m)[i].norm, sizeof(double), 1,fp); fread(&(*m)[i].norminv, sizeof(double), 1,fp); } *g=malloc(sizeof(struct grid)*par->ncell); for(i=0;i<par->ncell;i++){ (*g)[i].a0 = NULL; (*g)[i].a1 = NULL; (*g)[i].a2 = NULL; (*g)[i].a3 = NULL; (*g)[i].a4 = NULL; (*g)[i].dens = NULL; (*g)[i].abun = NULL; (*g)[i].nmol = NULL; (*g)[i].dir = NULL; (*g)[i].neigh = NULL; (*g)[i].w = NULL; (*g)[i].ds = NULL; fread(&(*g)[i].id, sizeof (*g)[i].id, 1, fp); fread(&(*g)[i].x, sizeof (*g)[i].x, 1, fp); fread(&(*g)[i].vel, sizeof (*g)[i].vel, 1, fp); fread(&(*g)[i].sink, sizeof (*g)[i].sink, 1, fp); (*g)[i].nmol=malloc(par->nSpecies*sizeof(double)); for(j=0;j<par->nSpecies;j++) fread(&(*g)[i].nmol[j], sizeof(double), 1, fp); fread(&(*g)[i].dopb, sizeof (*g)[i].dopb, 1, fp); (*g)[i].mol=malloc(par->nSpecies*sizeof(struct populations)); for(j=0;j<par->nSpecies;j++){ (*g)[i].mol[j].pops=malloc(sizeof(double)*(*m)[j].nlev); for(k=0;k<(*m)[j].nlev;k++) fread(&(*g)[i].mol[j].pops[k], sizeof(double), 1, fp); (*g)[i].mol[j].knu=malloc(sizeof(double)*(*m)[j].nline); for(k=0;k<(*m)[j].nline;k++) fread(&(*g)[i].mol[j].knu[k], sizeof(double), 1, fp); (*g)[i].mol[j].dust=malloc(sizeof(double)*(*m)[j].nline); for(k=0;k<(*m)[j].nline;k++) fread(&(*g)[i].mol[j].dust[k],sizeof(double), 1, fp); fread(&(*g)[i].mol[j].dopb,sizeof(double), 1, fp); fread(&(*g)[i].mol[j].binv,sizeof(double), 1, fp); (*g)[i].mol[j].partner=NULL; } fread(&dummy, sizeof(double), 1, fp); fread(&dummy, sizeof(double), 1, fp); fread(&dummy, sizeof(double), 1, fp); } fclose(fp); qhull(par, *g); distCalc(par, *g); getVelosplines(par,*g); *popsdone=1; }