// -*- Mode: C++; -*- // File: raving2.cc // Author: Dino Bellugi (dino@geomorph.berkeley.edu) // Copyright Dino Bellugi, BlueG SoftWear, U.C. Berkeley, 1999 (C) // *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // * FUNCTION: Computes a watershed ravel hazard index // * // * RELATED PACKAGES: grid.cc stabfun.cc // * // * HISTORY: // * Created: Thu Mar 27 1997 (dino) // * Modified: Mon May 10 1999 (dino) // *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // the following include file (notice.h) contains important copyright // information, as well as other legal statements. it must be present // in all files and in any distribution. removal or modification is // strictly forbidden and violates u.s. and international copyright law. #include "notice.h" char *copyright_notice = "(C) 1999 Dino Bellugi, BlueG SoftWear, U.C. Berkeley"; // #include #include #include #include #include "grid.h" #include "macros.h" #define RAVEL 0 #define WATERSHED 1 #define STREAMS 2 main(int argc, char **argv) { Grid rgrd, wgrd, sgrd; int i, j, rav_cells = 0; double rav_ind, rav_tot = 0.0, rav_cha = 0.0, rav_con; if (argc != 5) { // invalid arguments, print usage cerr << "usage:\n"; cerr << "\t" << appName(argv) << " \n"; cerr << "example:\n"; cerr << "\t" << appName(argv) << " ravel.grd watershed.grd streams.grd > index.txt\n"; exit(1); } cerr << "Reading ravel grid ...\n"; if (!rgrd.readGrid(argv[1])) { cerr << "can't read ravel grid " << argv[1] << " ...\n"; exit(1); } cerr << "Reading watershed grid ...\n"; if (!wgrd.readGrid(argv[2])) { cerr << "can't read watershed grid " << argv[2] << " ...\n"; exit(1); } cerr << "Reading streams grid ...\n"; if (!sgrd.readGrid(argv[3])) { cerr << "can't read streams grid " << argv[3] << " ...\n"; exit(1); } rav_con = atof(argv[4]); for (i = 0; i < rgrd.xdim; ++i) { for (j = 0; j < rgrd.ydim; ++j) { if (wgrd.isValue(i, j)) { ++rav_cells; if (sgrd.isValue(i, j) && rgrd.isValue(i, j)) { rav_cha += rgrd.at(i, j); } } } } rav_tot = rav_cells * rgrd.spacing * rgrd.spacing * rav_con; if (rav_tot == 0) rav_ind = 0; else rav_ind = rav_cha / rav_tot; cerr << "Total ravel: " << rav_tot << "\n"; cerr << "Channel ravel: " << rav_cha << "\n"; cerr << "Ravel hazard index: " << rav_ind << "\n"; cerr << "Writing output file ...\n"; cout << argv[2] << ": " << rav_ind << "\n"; exit(0); }