// generated by Fast Light User Interface Designer (fluid) version 1.00 #include #include #include #include #include #include "IEEEIO.hh" #include "AmrFileReader.hh" #include "AMRwriterPlus.h" #include "AMRgridPlus.h" int main(int argc, char** argv) { IObase *ifile, *ofile; AMRwriterPlus *writer; AmrGridReader *reader; AmrFileReader *freader; int maxlev; if (argc!=2){ cerr<<"Usage: addscalars "<isValid()){ cerr<nLevels(); reader=new AmrGridReader(*ifile); if (reader==NULL){ cerr<isValid()){ cerr<<"Cannot create "<getNumGrids(); unsigned long datasz; //prime things: reader->getGridInfo(grid, 0); grid.data=malloc(grid.nbytes); datasz=grid.nbytes; FlexArray< AmrGrid> gridlist; int tmin, tmax; int numlev = freader->getNumLevels(); FlexArray levmask; int lcnt=numlev, tflag=2, tstep=0; double t1, t2, tdiff=0, finetimeref=1.0; int ts1,ii; levmask.setSize(numlev); for(ii=0;iigetGridInfo(grid, idx))!=NULL && (lcnt || tflag)){ IObase::DataType atype; int length; int attrnum; if ((grid.level==0) && tflag){ //Getll the time of root grid... double tm; attrnum=ifile->readAttributeInfo("time",atype,length); if(attrnum>=0) ifile->readAttribute(attrnum,&tm); if (tflag==2){ t1=tm; ts1=grid.timestep; tflag=1; } else { //tflag==1; t2=tm; tdiff=(t2-t1)/(grid.timestep-(float)ts1); tstep=grid.timestep; if (tdiff!=0) tflag=0; } } //If this is a level we havent already seen... if (levmask[grid.level]==0){ //Get all the refinement info... attrnum=ifile->readAttributeInfo("time_refinement",atype,length); if(attrnum>=0){ ifile->readAttribute(attrnum,&(grid.timeref)); } attrnum=ifile->readAttributeInfo("spatial_refinement",atype,length); if(attrnum>=0){ ifile->readAttribute(attrnum,&(grid.spaceref)); } attrnum=ifile->readAttributeInfo("grid_placement_refinement",atype,length); if(attrnum>=0){ ifile->readAttribute(attrnum,&(grid.placeref)); } //feed the refinement info to the writer... writer->setLevelRefinement(grid.level, grid.timeref, grid.spaceref, grid.placeref); //and mark the level as done. if (grid.level==numlev-1)finetimeref=grid.timeref; levmask[grid.level]=1; lcnt--; } idx++; } tdiff/=finetimeref; //Coarse steps should be composed of if (finetimeref!=tstep &&(tstep!=0)){ cout<<"Mismatch between max time refinement and timesteps"<getTimeRange(tmin, tmax); ii=0; tgrid=reader->getGridInfo(grid, 0); writer->setType((IObase::DataType)grid.datatype); writer->setTopLevelParameters(grid.rank, grid.origin, grid.delta, tdiff, maxlev); while (tgrid!=NULL){ if (grid.nbytes>datasz) { datasz=grid.nbytes; grid.data=realloc(grid.data, datasz); } reader->getGridData(grid, ii); if (fixtime) grid.timestep/=fixtimeval; writer->write(&grid, 1); //calc scalars & write ii++; tgrid=reader->getGridInfo(grid, ii); } delete ifile; delete ofile; }