Example #1
0
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;
}
Example #2
0
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;
}