void scaling() { int nglaciercells=0; float volumechange=0,glacarea=0,glacareanew=0,areachange=0,areachange2=0; int areachange_numbercells; /*number of grid cells to be added or removed*/ float minimum; int min_i,min_j,ii; FILE *outnewDEMglac=NULL; char namenewDEMglac[PFNAME_LEN]; /* --- DETERMINE GLACIER AREA, count number of glacier gridcells -----------*/ /*Note that variable nglac refers to all drainage basin grid cells*/ nglaciercells = 0; for (i=1; i<=nrows; i++) for (j=1; j<=ncols; j++) { if ((griddgmglac[i][j]) != nodata) /*grid of glacier*/ nglaciercells += 1; } /* --- DETERMINE GLACIER AREA, count number of glacier gridcells -----------*/ glacarea = nglaciercells * gridsize * gridsize; /*in m2*/ /* --- CONVERT ANNUAL SPECIFIC MASS BALANCE INTO VOLUME -----------*/ volumechange = x[11]/100/0.9*glacarea; /*assuming 900 kg/m3; x[11] is mean, comes from statist, writeout.c*/ /*divide by 100 to convert cm into meter*/ /* -----------------------------------------------*/ /* --- SCALING ---Arendt JGR 2006 and just simple V-A scaling assumin delta V is prop to delta A--------*/ /* -----------------------------------------------*/ areachange = (volumechange/ (c_coefficient*gammaVA*(pow(glacarea,(gammaVA-1))) )); /*m2, negative in case of retreat*/ areachange2 = pow( (fabs(volumechange)/c_coefficient),(1/gammaVA) ); /*in m2*/ /*fabs=absolute value; has to be positive, otherwise NaN*/ if(volumechange < 0) areachange2 = -areachange2; /* --- DETERMINE NUMBER OF GRID CELLS TO ADD OR REMOVE--------*/ areachange_numbercells = (int)(areachange/(gridsize*gridsize)); /*negative in case of retreat, gridsize in m*/ glacarea = glacarea/1000000; /*convert m2 to km2*/ areachange = areachange/1000000; areachange2 = areachange2/1000000; glacareanew = glacarea + areachange; /*areachange is negative in case of retreat, in km2*/ if(glacareanew < 0) glacareanew = 0; /* --- PRINT AREA AND AREA CHANGE TO MASS BALANCE FILE--------*/ fprintf(outspecificmassbal," %.4f %.4f %.3f %d %.3f\n",glacarea,glacareanew,areachange,areachange_numbercells,areachange2); /* -----------------------------------------------*/ /* --- REMOVE GRID CELLES FROM GLACIER DEM--------*/ /* -----------------------------------------------*/ if((areachange < 0) && (glacareanew > 0))/*;*/ /*only for retreat, no advance*/ { for (ii=1; ii<= -areachange_numbercells; ii++) { /*ueber alle Reihen*/ minimum = 10000.0; /*minimum, must be initialized high*/ for (i=1; i<=nrows; i++) { for (j=1; j<=ncols; j++) { if (griddgmglac[i][j] != nodata) { /*only area to be calcualated*/ if (griddgmglac[i][j] < minimum) { minimum = griddgmglac[i][j]; /*minimum*/ min_i = i; /*store row, col of cell with minimum value*/ min_j = j; } } /*endif*/ } /*for col*/ } /*for row*/ griddgmglac[min_i][min_j] = nodata; } /*for each grid cell to be removed*/ } /*endif retreat*/ /* -----------------------------------------------*/ /* --- WRITE NEW GLACIER DEM TO FILE--------*/ /* -----------------------------------------------*/ sprintf(namenewDEMglac,"DEMglac%04d.bin",(int)year); openoutfile(&outnewDEMglac,outpath,namenewDEMglac); statist(griddgmglac,x); fwrite(&(x[1]),sizeof(float),12,outnewDEMglac); /*FIRST 12 ROWS*/ for (i=1; i<=nrows; i++) /* for all rows (and columns in fwrite command) */ fwrite(&(griddgmglac[i][1]),sizeof(float),ncols,outnewDEMglac); if(outnewDEMglac) closefile(&outnewDEMglac,namenewDEMglac); return; }
int main(int argc, char **argv) { if (argc != 3) { printUsage(argv[0]); return 0; } if (strcmp(argv[1], "--crawl") == 0) { Logger::setOutputFile("log-crawl_test.txt"); WebCrawler crawler(120000); crawler.setDownloadInterval(5); crawler.setPagesDir("data/pages_test"); if (!crawler.startCrawl(argv[2])) return 0; crawler.saveToDisk("data/pagesData_total.txt"); } else if (strcmp(argv[1], "--resume-crawl") == 0) { Logger::setOutputFile("log-crawl.txt"); WebCrawler crawler(120000); crawler.setDownloadInterval(5); crawler.setPagesDir("pages"); if (!crawler.resumeCrawl(argv[2])) return 0; crawler.saveToDisk("data/pagesData_total.txt"); } else if (strcmp(argv[1], "--stat") == 0) { Logger::setOutputFile("log-stat.txt"); PagesStatist statist(argv[2]); const std::vector<PR>& pageRank = statist.getPageRank(); TMK_LOG_ALL("Saving PR to file \n"); tmk::saveToDisk(pageRank, "data/PR.txt"); std::vector<std::pair<Url, PR> > top20; statist.getTopPages(20, top20); TMK_LOG_ALL("Top 20 pages by PR:\n"); for (int i = 0; i < top20.size(); ++i) { TMK_LOG_ALL("PR: %f\t%s\n", top20[i].second, top20[i].first.c_str()); } const std::vector<size_t>& pagesSize = statist.getPageSizesInBytes(); TMK_LOG_ALL("Saving pages Sizes to file \n"); tmk::saveToDisk(pagesSize, "data/pageSize.txt"); const std::vector<size_t>& pagesOutgoingLinksCount = statist.getPagesOutgoingLinksCount(); TMK_LOG_ALL("Saving pages outgoing links count to file\n"); tmk::saveToDisk(pagesOutgoingLinksCount, "data/pageOutLinks.txt"); const std::vector<size_t>& pagesIncomingLinksCount = statist.getPagesIncomingLinksCount(); TMK_LOG_ALL("Saving pages incoming links count to file\n"); tmk::saveToDisk(pagesIncomingLinksCount, "data/pageInLinks.txt"); const std::vector<size_t>& pageDistancesFromMain = statist.getPageDistancesFromMain(); TMK_LOG_ALL("Saving pages distances from main page to file\n"); tmk::saveToDisk(pageDistancesFromMain, "data/pageDistances.txt"); size_t maxPageDist = 0; for (auto it = pageDistancesFromMain.begin(); it != pageDistancesFromMain.end(); ++it) { maxPageDist = std::max(maxPageDist, *it); } TMK_LOG_ALL("Maximal distance from main page: %zu\n", maxPageDist); } else { printUsage(argv[0]); } return 0; }