53using std::random_device;
87 InStream.open(strFilePathName.c_str(), ios::in);
90 if (!InStream.is_open())
93 cerr <<
ERR <<
"cannot open " << strFilePathName <<
" for input" << endl;
99 string strRec, strErr;
101 while (getline(InStream, strRec))
109 if ((!strRec.empty()) && (strRec[0] !=
QUOTE1) && (strRec[0] !=
QUOTE2))
115 size_t nPos = strRec.find(
COLON);
117 if (nPos == string::npos)
120 cerr <<
ERR <<
"on line " << nLine <<
": badly formatted (no ':') in " << strFilePathName << endl
121 <<
"'" << strRec <<
"'" << endl;
125 if (nPos == strRec.size() - 1)
128 cerr <<
ERR <<
"on line " << nLine <<
": badly formatted (nothing following ':') in " << strFilePathName << endl
129 <<
"'" << strRec <<
"'" << endl;
134 string strRH = strRec.erase(0, nPos + 1);
140 nPos = strRH.rfind(
QUOTE1);
142 if (nPos != string::npos)
145 nPos = strRH.rfind(
QUOTE2);
147 if (nPos != string::npos)
158 strErr =
"line " + to_string(nLine) +
": path and name of main datafile";
184 strErr =
"line " + to_string(nLine) +
": path for CoastalME output";
212 if (strRH.find(
'@') == string::npos)
213 strErr =
"line " + to_string(nLine) +
": email address for messages";
226 cerr <<
ERR <<
"reading " << strErr <<
" in " << strFilePathName << endl
227 <<
"'" << strRec <<
"'" << endl;
252 if (!InStream.is_open())
262 string strRec, strErr;
264 while (getline(InStream, strRec))
272 if ((!strRec.empty()) && (strRec[0] !=
QUOTE1) && (strRec[0] !=
QUOTE2))
278 nPos = strRec.find(
COLON);
280 if (nPos == string::npos)
283 cerr <<
ERR <<
"on line " << to_string(nLine) <<
"badly formatted (no ':') in " <<
m_strDataPathName << endl
289 string strRH = strRec.erase(0, nPos + 1);
301 nPos = strRH.rfind(
QUOTE1);
303 if (nPos != string::npos)
309 nPos = strRH.rfind(
QUOTE2);
311 if (nPos != string::npos)
335 vector<string> VstrTmp;
343 strErr =
"line " + to_string(nLine) +
": output file names";
364 strErr =
"line " + to_string(nLine) +
": invalid integer for log file detail level '" + strRH +
"' in " +
m_strDataPathName;
371 strErr =
"line " + to_string(nLine) +
": log file detail level";
381 if (strRH.find(
'y') != string::npos)
391 if (VstrTmp.size() < 2)
393 strErr =
"line " + to_string(nLine) +
": must have both date and time for simulation start in '" +
m_strDataPathName +
"'";
398 if (!
bParseTime(&VstrTmp[0], nHour, nMin, nSec))
400 strErr =
"line " + to_string(nLine) +
": could not understand simulation start time in '" +
m_strDataPathName +
"'";
405 if (!
bParseDate(&VstrTmp[1], nDay, nMonth, nYear))
407 strErr =
"line " + to_string(nLine) +
": could not understand simulation start date in '" +
m_strDataPathName +
"'";
429 strErr =
"line " + to_string(nLine) +
": units for duration of simulation";
434 nPos = strRH.rfind(
SPACE);
436 if (nPos == string::npos)
438 strErr =
"line " + to_string(nLine) +
": format of duration simulation line";
452 strErr =
"line " + to_string(nLine) +
": duration of simulation must be > 0";
464 strErr =
"line " + to_string(nLine) +
": units for simulation timestep";
469 nPos = strRH.rfind(
SPACE);
471 if (nPos == string::npos)
473 strErr =
"line " + to_string(nLine) +
": format of simulation timestep";
486 strErr =
"line " + to_string(nLine) +
": invalid floating point number for timestep '" + strRH +
"' in " +
m_strDataPathName;
493 strErr =
"line " + to_string(nLine) +
": timestep of simulation must be > 0";
496 strErr =
"line " + to_string(nLine) +
": timestep of simulation must be < the duration of the simulation";
506 string const strOriginal = strRH;
507 size_t nCommaPos = 0;
514 size_t const nNextComma = strOriginal.find(
',', nCommaPos);
516 if (nNextComma != string::npos)
518 strGroup = strOriginal.substr(nCommaPos, nNextComma - nCommaPos);
519 nCommaPos = nNextComma + 1;
524 strGroup = strOriginal.substr(nCommaPos);
525 nCommaPos = string::npos;
532 if (strGroup.empty())
540 strErr =
"line " + to_string(nLine) +
": units for save intervals in group '" + strGroup +
"'";
545 size_t const nLastSpace = strGroup.rfind(
SPACE);
547 if (nLastSpace == string::npos)
549 strErr =
"line " + to_string(nLine) +
": format of save times/intervals in group '" + strGroup +
"'";
553 string strNumbers = strGroup.substr(0, nLastSpace);
557 size_t nSpacePos = 0;
562 size_t const nNextSpace = strNumbers.find(
SPACE, nSpacePos);
564 if (nNextSpace == string::npos)
567 string const strNumber = strNumbers.substr(nSpacePos, nNextSpace - nSpacePos);
569 if (!strNumber.empty())
573 strErr =
"line " + to_string(nLine) +
": too many save intervals";
577 double const dValue = strtod(strNumber.c_str(), NULL) * dMult;
581 nSpacePos = nNextSpace + 1;
582 }
while (nSpacePos < strNumbers.length());
586 }
while (nCommaPos != string::npos);
598 strErr =
"line " + to_string(nLine) +
": save interval cannot be less than timestep";
611 strErr =
"line " + to_string(nLine) +
": first save time cannot be less than timestep";
621 strErr =
"line " + to_string(nLine) +
": no save times specified";
642 nPos = strRH.find(
SPACE);
644 if (nPos == string::npos)
662 strTmp = strRH.substr(0, nPos);
670 strRH = strRH.substr(nPos, strRH.size() - nPos);
673 if (strRH.size() == 0)
693 strErr =
"line " + to_string(nLine) +
": invalid integer for max save digits for GIS output file names '" + strRH +
"' in " +
m_strDataPathName;
700 strErr =
"line " + to_string(nLine) +
": max save digits for GIS output file names must be > 1";
707 strErr =
"line " + to_string(nLine) +
": must specify save digits for GIS output as sequential or as iteration number";
714 if (strRH.find(
's') != string::npos)
720 else if (strRH.find(
'i') != string::npos)
729 strErr += to_string(nLine);
730 strErr +=
": invalid code for save digits for GIS output save number (must be s or i)";
743 strErr += to_string(nLine);
744 strErr +=
": must contain '";
748 strErr +=
"', or at least one raster GIS output code";
1232 strErr =
"line " + to_string(nLine) +
": unknown code '" + strRH +
"' in list of codes for raster GIS output";
1243 if (strRH.find(
"gpkg") != string::npos)
1244 strErr =
"GDAL gpkg raster create() is not yet working correctly. Please choose another output format.";
1254 if (strRH.find(
'y') != string::npos)
1265 if (strRH.find(
'y') != string::npos)
1277 nPos = strRH.find(
SPACE);
1279 if (nPos != string::npos)
1285 strTmp = strRH.substr(0, nPos);
1289 strRH = strRH.substr(nPos, strRH.size() - nPos);
1293 nPos = strRH.find(
SPACE);
1294 }
while (nPos != string::npos);
1308 strErr += to_string(nLine);
1309 strErr +=
": must contain '";
1311 strErr +=
"', or '";
1313 strErr +=
"', or at least one vector GIS output code";
1489 strErr =
"line " + to_string(nLine) +
": unknown code '" + strRH +
"' in list of vector GIS output codes";
1500 strErr =
"line " + to_string(nLine) +
": vector GIS output format";
1603 strErr =
"line " + to_string(nLine) +
": unknown code '" + strRH +
"' in list of time series output files";
1613 strErr =
"line " + to_string(nLine) +
": invalid integer for coastline smoothing algorithm '" + strRH +
"' in " +
m_strDataPathName;
1620 strErr =
"line " + to_string(nLine) +
": coastline vector smoothing algorithm";
1628 strErr =
"line " + to_string(nLine) +
": invalid integer for coastline smoothing window '" + strRH +
"' in " +
m_strDataPathName;
1635 strErr =
"line " + to_string(nLine) +
": size of coastline vector smoothing window (must be > 0 and odd)";
1643 strErr =
"line " + to_string(nLine) +
": invalid integer for Savitzky-Golay polynomial for coastline smoothing '" + strRH +
"' in " +
m_strDataPathName;
1650 strErr =
"line " + to_string(nLine) +
": value of Savitzky-Golay polynomial for coastline smoothing (must be <= 6)";
1658 if (strRH.find(
'n') != string::npos)
1663 if (strRH.find(
's') != string::npos)
1668 if (strRH.find(
'w') != string::npos)
1673 if (strRH.find(
'e') != string::npos)
1684 strErr =
"line " + to_string(nLine) +
": invalid integer for size of coastline smoothing window '" + strRH +
"' in " +
m_strDataPathName;
1691 strErr =
"line " + to_string(nLine) +
": size of profile vector smoothing window (must be >= 0, if > 0 must be odd)";
1699 strErr =
"line " + to_string(nLine) +
": invalid floating point number for max local slope '" + strRH +
"' in " +
m_strDataPathName;
1706 strErr =
"line " + to_string(nLine) +
": max local slope must be > 0";
1714 strErr =
"line " + to_string(nLine) +
": invalid floating point number for maximum elevation of beach above SWL '" + strRH +
"' in " +
m_strDataPathName;
1721 strErr =
"line " + to_string(nLine) +
": maximum elevation of beach above SWL must be >= 0";
1730 strErr =
"line " + to_string(nLine) +
": invalid integer for number of sediment layers '" + strRH +
"' in " +
m_strDataPathName;
1738 strErr =
"line " + to_string(nLine) +
": must be at least one sediment layer";
1805 for (
int nLayer = 0; nLayer <
m_nLayers; nLayer++)
1807 for (
int j = 1; j <= 6; j++)
1813 if (!getline(InStream, strRec))
1826 while (strRec.empty() || (strRec[0] ==
QUOTE1) || (strRec[0] ==
QUOTE2));
1829 nPos = strRec.find(
COLON);
1831 if (nPos == string::npos)
1834 cerr <<
ERR <<
"on line " << to_string(nLine) <<
": badly formatted (no ':') in " <<
m_strDataPathName << endl
1840 strRH = strRec.substr(nPos + 1);
1847 nPos = strRH.rfind(
QUOTE1);
1849 if (nPos != string::npos)
1852 nPos = strRH.rfind(
QUOTE2);
1854 if (nPos != string::npos)
2044 if (!strErr.empty())
2048 <<
"'" << strRec <<
"'" << endl;
2146 strErr =
"line " + to_string(nLine) +
": must specify both intervention class and intervention height files";
2155 strErr =
"line " + to_string(nLine) +
": must specify both intervention class and intervention height files";
2186 strErr =
"line " + to_string(nLine) +
": invalid integer for wave propagation model '" + strRH +
"' in " +
m_strDataPathName;
2193 strErr =
"line " + to_string(nLine) +
": wave propagation model must be 0 or 1";
2201 strErr =
"line " + to_string(nLine) +
": invalid floating point number for sea water density '" + strRH +
"' in " +
m_strDataPathName;
2208 strErr =
"line " + to_string(nLine) +
": sea water density must be > 0";
2216 strErr =
"line " + to_string(nLine) +
": invalid floating point number for initial SWL '" + strRH +
"' in " +
m_strDataPathName;
2233 strErr =
"line " + to_string(nLine) +
": invalid floating point number for final SWL '" + strRH +
"' in " +
m_strDataPathName;
2245 strErr =
"line " + to_string(nLine) +
": deep water wave height in " +
m_strDataPathName +
" must be either a number or a filename (filename must not start with a number)";
2249 if (isdigit(strRH.at(0)))
2254 strErr =
"line " + to_string(nLine) +
": invalid floating point number for deep water wave height '" + strRH +
"' in " +
m_strDataPathName;
2264 strErr =
"line " + to_string(nLine) +
": deep water wave height must be > 0";
2300 strErr =
"line " + to_string(nLine) +
": filename missing for deep water wave height input";
2333 strErr =
"line " + to_string(nLine) +
": invalid floating point number for deep water wave orientation '" + strRH +
"' in " +
m_strDataPathName;
2340 strErr =
"line " + to_string(nLine) +
": deep water wave orientation must be zero degrees or more";
2343 strErr =
"line " + to_string(nLine) +
": deep water wave orientation must be less than 360 degrees";
2355 strErr =
"line " + to_string(nLine) +
": invalid floating point number for wave period '" + strRH +
"' in " +
m_strDataPathName;
2362 strErr =
"line " + to_string(nLine) +
": wave period must be > 0";
2395 strErr =
"line " + to_string(nLine) +
": invalid floating point number for breaking wave height to depth ratio '" + strRH +
"' in " +
m_strDataPathName;
2402 strErr =
"line " + to_string(nLine) +
": breaking wave height to depth ratio must be > 0";
2411 if (strRH.find(
'y') != string::npos)
2423 strErr =
"line " + to_string(nLine) +
": invalid floating point number for R (coast platform resistance to erosion) '" + strRH +
"' in " +
m_strDataPathName;
2427 m_dR = strtod(strRH.c_str(), NULL);
2430 strErr =
"line " + to_string(nLine) +
": R (coast platform resistance to erosion) value must be > 0";
2441 if (strRH.find(
'y') != string::npos)
2452 strErr =
"line " + to_string(nLine) +
": invalid integer for beach sediment transport at grid edges '" + strRH +
"' in " +
m_strDataPathName;
2459 strErr =
"line " + to_string(nLine) +
": switch for handling of beach sediment at grid edges must be 0, 1, or 2";
2470 strErr =
"line " + to_string(nLine) +
": invalid integer for beach erosion/deposition equation '" + strRH +
"' in " +
m_strDataPathName;
2477 strErr =
"line " + to_string(nLine) +
": switch for beach erosion/deposition equation must be 0 or 1";
2486 strErr =
"line " + to_string(nLine) +
": invalid floating point number for median particle size of fine sediment '" + strRH +
"' in " +
m_strDataPathName;
2493 strErr =
"line " + to_string(nLine) +
": median particle size of fine sediment must be > 0";
2505 strErr =
"line " + to_string(nLine) +
": invalid floating point number for median particle size of sand sediment '" + strRH +
"' in " +
m_strDataPathName;
2512 strErr =
"line " + to_string(nLine) +
": median particle size of sand sediment must be > 0";
2524 strErr =
"line " + to_string(nLine) +
": invalid floating point number for median particle size of coarse sediment '" + strRH +
"' in " +
m_strDataPathName;
2531 strErr =
"line " + to_string(nLine) +
": median particle size of coarse sediment must be > 0";
2546 strErr =
"line " + to_string(nLine) +
": invalid floating point number for density of beach sediment '" + strRH +
"' in " +
m_strDataPathName;
2553 strErr =
"line " + to_string(nLine) +
": density of beach sediment must be > 0";
2565 strErr =
"line " + to_string(nLine) +
": invalid floating point number for porosity of beach sediment '" + strRH +
"' in " +
m_strDataPathName;
2572 strErr =
"line " + to_string(nLine) +
": porosity of beach sediment must be > 0";
2581 strErr =
"line " + to_string(nLine) +
": invalid floating point number for erodibility of fine-sized sediment '" + strRH +
"' in " +
m_strDataPathName;
2588 strErr =
"line " + to_string(nLine) +
": relative erodibility of fine-sized sediment must be between 0 and 1";
2596 strErr =
"line " + to_string(nLine) +
": invalid floating point number for erodibility of sand-sized sediment '" + strRH +
"' in " +
m_strDataPathName;
2603 strErr =
"line " + to_string(nLine) +
": relative erodibility of sand-sized sediment must be between 0 and 1";
2611 strErr =
"line " + to_string(nLine) +
": invalid floating point number for erodibility of coarse-sized sediment '" + strRH +
"' in " +
m_strDataPathName;
2619 strErr =
"line " + to_string(nLine) +
": relative erodibility of coarse-sized sediment must be between 0 and 1";
2624 strErr =
"line " + to_string(nLine) +
": must have at least one non-zero erodibility value";
2635 strErr =
"line " + to_string(nLine) +
": invalid floating point number for transport parameter KLS of CERC equation '" + strRH +
"' in " +
m_strDataPathName;
2639 m_dKLS = strtod(strRH.c_str(), NULL);
2646 strErr =
"line " + to_string(nLine) +
": transport parameter KLS of CERC equation must be > 0";
2658 strErr =
"line " + to_string(nLine) +
": invalid floating point number for transport parameter of Kamphuis equation '" + strRH +
"' in " +
m_strDataPathName;
2665 strErr =
"line " + to_string(nLine) +
": transport parameter of Kamphuis equation must be > 0";
2677 strErr =
"line " + to_string(nLine) +
": invalid floating point number for Dean profile start height above SWL '" + strRH +
"' in " +
m_strDataPathName;
2684 strErr =
"line " + to_string(nLine) +
": Berm height (Dean profile start height above SWL) must be >= 0";
2697 if (strRH.find(
'y') != string::npos)
2710 strErr =
"line " + to_string(nLine) +
": invalid floating point number for cliff resistance to erosion '" + strRH +
"' in " +
m_strDataPathName;
2717 strErr =
"line " + to_string(nLine) +
": cliff resistance to erosion must be > 0";
2729 strErr =
"line " + to_string(nLine) +
": invalid floating point number for cliff notch overhang at collapse '" + strRH +
"' in " +
m_strDataPathName;
2736 strErr =
"line " + to_string(nLine) +
": cliff notch overhang at collapse must be > 0";
2748 strErr =
"line " + to_string(nLine) +
": cliff notch base below still water level must be > 0";
2760 strErr =
"line " + to_string(nLine) +
": invalid floating point number for scale parameter A for cliff deposition '" + strRH +
"' in " +
m_strDataPathName;
2767 strErr =
"line " + to_string(nLine) +
": scale parameter A for cliff deposition must be 0 [= auto] or greater";
2779 strErr =
"line " + to_string(nLine) +
": invalid floating point number for width of cliff collapse talus '" + strRH +
"' in " +
m_strDataPathName;
2786 strErr =
"line " + to_string(nLine) +
": planview width of cliff deposition must be > 0";
2798 strErr =
"line " + to_string(nLine) +
": invalid floating point number for planview length of cliff deposition '" + strRH +
"' in " +
m_strDataPathName;
2805 strErr =
"line " + to_string(nLine) +
": planview length of cliff deposition must be > 0";
2817 strErr =
"line " + to_string(nLine) +
": invalid floating point number for height of cliff collapse (as a fraction of cliff elevation) '" + strRH +
"' in " +
m_strDataPathName;
2824 strErr =
"line " + to_string(nLine) +
": minimum height of cliff collapse (as a fraction of cliff elevation) must be >= 0";
2834 if (strRH.find(
'y') != string::npos)
2884 strErr =
"line " + to_string(nLine) +
": unknown code '" + strRH +
"' in list of riverine flooding output codes";
2889 strErr =
"line " + to_string(nLine) +
": if simulating riverine flooding, must contain '" +
VECTOR_ALL_RIVER_FLOOD_OUTPUT_CODE +
"' or at least one vector GIS output code for riverine flooding";
2904 strErr =
"line " + to_string(nLine) +
": invalid code for run-up equation used in simulating floods";
2917 if (strRH.find(
'y') != string::npos)
2953 strErr =
"line " + to_string(nLine) +
": path of location points file must not be empty if simulating floods";
2962 if (strRH.find(
'y') != string::npos)
3003 if (strRH.find(
'p') != string::npos)
3006 else if (strRH.find(
'c') != string::npos)
3009 else if (strRH.find(
'l') != string::npos)
3013 strErr =
"line " + to_string(nLine) +
": Sediment input type must be P, C, or L";
3024 strErr =
"line " + to_string(nLine) +
": filename missing for sediment input";
3055 strErr =
"line " + to_string(nLine) +
": invalid floating point number for gravitational acceleration '" + strRH +
"' in " +
m_strDataPathName;
3059 m_dG = strtod(strRH.c_str(), NULL);
3062 strErr =
"line " + to_string(nLine) +
": gravitational acceleration must be > 0";
3074 strErr =
"line " + to_string(nLine) +
": spacing of coastline normals must be > 0";
3082 strErr =
"line " + to_string(nLine) +
": invalid floating point number for random factor for spacing of coastline normals '" + strRH +
"' in " +
m_strDataPathName;
3089 strErr =
"line " + to_string(nLine) +
": random factor for spacing of coastline normals must be >= 0";
3092 strErr =
"line " + to_string(nLine) +
": random factor for spacing of coastline normals must be < 1";
3100 strErr =
"line " + to_string(nLine) +
": invalid floating point number for length of coastline normals '" + strRH +
"' in " +
m_strDataPathName;
3107 strErr =
"line " + to_string(nLine) +
": length of coastline normals must be > 0";
3115 strErr =
"line " + to_string(nLine) +
": invalid floating point number for start depth for wave calcs '" + strRH +
"' in " +
m_strDataPathName;
3122 strErr =
"line " + to_string(nLine) +
": start depth for wave calcs must be > 0";
3133 if (strRH.find(
'y') != string::npos)
3139 strErr =
"line " + to_string(nLine) +
": cannot save profiile data if not simulating shore platform erosion";
3154 for (
unsigned int j = 0; j < VstrTmp.size(); j++)
3156 VstrTmp[j] =
strTrim(&VstrTmp[j]);
3160 strErr =
"line " + to_string(nLine) +
": invalid integer for profile to be saved '" + VstrTmp[j] +
"' in " +
m_strDataPathName;
3164 int const nTmp = stoi(VstrTmp[j]);
3168 strErr =
"line " + to_string(nLine) +
": Profile number for saving must be >= 0";
3184 for (
unsigned int j = 0; j < VstrTmp.size(); j++)
3186 VstrTmp[j] =
strTrim(&VstrTmp[j]);
3187 unsigned long const ulTmp = atol(VstrTmp[j].c_str());
3191 strErr =
"line " + to_string(nLine) +
": Timestep for profile saves must >= 1";
3207 if (strRH.find(
'y') != string::npos)
3218 if (strRH.find(
'y') != string::npos)
3228 strErr += to_string(nLine);
3229 strErr +=
": invalid integer for size of moving window for coastline curvature calculation '";
3242 strErr += to_string(nLine);
3243 strErr +=
": size of moving window for coastline curvature calculation (must be > 0 and odd)";
3253 strErr += to_string(nLine);
3254 strErr +=
": invalid integer for cliff edge smoothing algorithm '";
3265 strErr =
"line " + to_string(nLine) +
3266 ": cliff edge smoothing algorithm";
3274 strErr =
"line " + to_string(nLine) +
3275 ": invalid integer for cliff edge smoothing window '" +
3283 strErr =
"line " + to_string(nLine) +
3284 ": size of cliff edge smoothing window (must be > 0 and odd)";
3292 strErr =
"line " + to_string(nLine) +
3293 ": invalid integer for Savitzky-Golay polynomial for cliff edge smoothing '" +
3302 strErr =
"line " + to_string(nLine) +
": order of Savitzky-Golay polynomial for cliff edge smoothing (must be 2, 4 or 6)";
3310 strErr =
"line " + to_string(nLine) +
": invalid number for cliff slope limit '" + strRH +
"' in " +
m_strDataPathName;
3317 strErr =
"line " + to_string(nLine) +
3318 ": cliff slope limit must be > 0";
3324 if (! strErr.empty())
3327 cerr << endl <<
ERR << strErr <<
".\nPlease edit " <<
m_strDataPathName <<
" and change this line:" << endl;
3328 cerr <<
"'" << strRec <<
"'" << endl << endl;
3339 bool bNoRasterFiles =
true;
3342 bNoRasterFiles =
false;
3347 bNoRasterFiles =
false;
3353 cerr <<
ERR <<
"at least one raster GIS file is needed" << endl;
3372 if (! InStream.is_open())
3384 while (getline(InStream, strRec))
3392 if ((strRec.empty()) || (strRec[0] ==
QUOTE1) || (strRec[0] ==
QUOTE2))
3398 cerr <<
ERR <<
"invalid floating point number for tide data '" << strRec <<
"' on line " << nLine <<
" of " <<
m_strTideDataFile << endl;
3429 if (! InStream.is_open())
3438 int nExpected = 0, nRead = 0;
3442 InStream >> nExpected;
3445 vector<double> VdDepthOverDB;
3446 vector<double> VdErosionPotential;
3447 vector<double> VdErosionPotentialFirstDeriv;
3450 while (getline(InStream, strRec))
3458 if ((strRec.empty()) || (strRec[0] ==
QUOTE1) || (strRec[0] ==
QUOTE2))
3467 for (
unsigned int i = 0; i < strTmp.size(); i++)
3470 strTmp[i] =
strTrim(&strTmp[i]);
3475 cerr <<
ERR <<
"on line " + to_string(nLine) +
" invalid floating point number for Erosion Potential Shape data '" << strTmp[i] <<
"' in " <<
m_strSCAPEShapeFunctionFile << endl;
3481 VdDepthOverDB.push_back(strtod(strTmp[0].c_str(), NULL));
3482 VdErosionPotential.push_back(strtod(strTmp[1].c_str(), NULL));
3483 VdErosionPotentialFirstDeriv.push_back(strtod(strTmp[2].c_str(), NULL));
3495 if (nExpected != nRead)
3514 cout <<
ERR <<
"line " + to_string(nLine) +
" in " <<
m_strSCAPEShapeFunctionFile <<
": erosion potential function is unbounded for high values of depth over DB" << endl;
3533 if (!InStream.is_open())
3542 int nExpectedStations = 0;
3544 int nTimeStepsRead = 0;
3545 string strRec, strErr;
3548 while (getline(InStream, strRec))
3556 if ((!strRec.empty()) && (strRec[0] !=
QUOTE1) && (strRec[0] !=
QUOTE2))
3565 size_t nPos = strRec.find(
COLON);
3567 if (nPos == string::npos)
3571 <<
"'" << strRec <<
"'" << endl;
3575 if (nPos == strRec.size() - 1)
3579 <<
"'" << strRec <<
"'" << endl;
3584 string strRH = strRec.substr(nPos + 1);
3590 nPos = strRH.rfind(
QUOTE1);
3592 if (nPos != string::npos)
3595 nPos = strRH.rfind(
QUOTE2);
3597 if (nPos != string::npos)
3611 vector<string> VstrTmp;
3620 if (VstrTmp.size() < 2)
3622 strErr =
"line " + to_string(nLine) +
": must have both date and time for start of data in";
3627 if (!
bParseTime(&VstrTmp[0], nHour, nMin, nSec))
3629 strErr =
"line " + to_string(nLine) +
": could not understand start time for data";
3634 if (!
bParseDate(&VstrTmp[1], nDay, nMonth, nYear))
3636 strErr =
"line " + to_string(nLine) +
": could not understand start date for data";
3648 strErr =
"line " + to_string(nLine) +
": start time and date for wave time series data differs from simulation start time and date,";
3662 strErr =
"line " + to_string(nLine) +
": unknown units for timestep";
3667 nPos = strRH.rfind(
SPACE);
3669 if (nPos == string::npos)
3671 strErr =
"line " + to_string(nLine) +
": format of timestep line";
3684 strErr =
"line " + to_string(nLine) +
": invalid floating point number for timestep";
3688 dThisIter = strtod(strRH.c_str(), NULL) * dMult;
3691 strErr =
"line " + to_string(nLine) +
": timestep must be > 0";
3694 strErr =
"line " + to_string(nLine) +
": timestep must be the same as the simulation timestep";
3703 strErr =
"line " + to_string(nLine) +
": invalid integer for number of wave stations '" + strRH +
"' in " +
m_strDeepWaterWavesInputFile;
3707 nExpectedStations = stoi(strRH);
3710 if (nExpectedStations != nWaveStations)
3713 strErr =
"line " + to_string(nLine) +
": number of wave stations in " +
m_strDeepWaterWaveStationsShapefile +
" is " + to_string(nWaveStations) +
" but we have " + to_string(nExpectedStations) +
" stations";
3734 strErr =
"line " + to_string(nLine) +
": must have values for at least one timestep";
3750 for (
unsigned int i = 0; i < VstrTmp.size(); i++)
3753 VstrTmp[i] =
strTrim(&VstrTmp[i]);
3758 strErr =
"line " + to_string(nLine) +
": invalid floating point number for deep water wave value '" + VstrTmp[i] +
"' in " +
m_strDeepWaterWavesInputFile;
3766 for (
int i = 0; i < nExpectedStations; i++)
3785 if (!strErr.empty())
3789 <<
"'" << strRec <<
"'" << endl;
3832 for (
int j = 0; j < nExpectedStations; j++)
3847 cout <<
NOTE << strTmp;
3865 if (!InStream.is_open())
3875 string strRec, strErr;
3878 while (getline(InStream, strRec))
3886 if ((!strRec.empty()) && (strRec[0] !=
QUOTE1) && (strRec[0] !=
QUOTE2))
3895 unsigned int nTarget = 7;
3900 if (VstrTmp.size() < nTarget)
3902 strErr =
"line " + to_string(nLine) +
": too few data items on data line '" + to_string(nRead) +
"' in " +
m_strSedimentInputEventFile;
3909 strErr =
"line " + to_string(nLine) +
": invalid integer for Location ID of sediment input event '" + VstrTmp[0] +
"' in " +
m_strSedimentInputEventFile;
3913 int const nID = stoi(
strTrim(&VstrTmp[0]));
3920 strErr =
"line " + to_string(nLine) +
": invalid Location ID '" + to_string(nID) +
"' for sediment input event location event in " +
m_strSedimentInputEventFile;
3929 strErr =
"line " + to_string(nLine) +
": invalid time and/or date '" + VstrTmp[1] +
"' for sediment input event in " +
m_strSedimentInputEventFile;
3936 strErr =
"line " + to_string(nLine) +
": invalid floating point number '" + VstrTmp[2] +
"' for fine sediment volume for sediment input event in " +
m_strSedimentInputEventFile;
3940 double const dFineSedVol = stod(
strTrim(&VstrTmp[2]));
3942 if (dFineSedVol < 0)
3944 strErr =
"line " + to_string(nLine) +
": negative number '" + to_string(dFineSedVol) +
"' for fine sediment volume for sediment input event in " +
m_strSedimentInputEventFile;
3948 if (dFineSedVol > 0)
3954 strErr =
"line " + to_string(nLine) +
": invalid floating point number '" + VstrTmp[3] +
"' for sand-sized sediment volume for sediment input event in " +
m_strSedimentInputEventFile;
3958 double const dSandSedVol = stod(
strTrim(&VstrTmp[3]));
3960 if (dSandSedVol < 0)
3962 strErr =
"line " + to_string(nLine) +
": negative number '" + to_string(dSandSedVol) +
"' for sand-sized sediment volume for sediment input event in " +
m_strSedimentInputEventFile;
3966 if (dSandSedVol > 0)
3972 strErr =
"line " + to_string(nLine) +
": invalid floating point number '" + VstrTmp[4] +
"' for coarse sediment volume for sediment input event in " +
m_strSedimentInputEventFile;
3976 double const dCoarseSedVol = stod(
strTrim(&VstrTmp[4]));
3978 if (dCoarseSedVol < 0)
3980 strErr =
"line " + to_string(nLine) +
": negative number '" + to_string(dCoarseSedVol) +
"' for coarse sediment volume of sediment input event in " +
m_strSedimentInputEventFile;
3984 if (dCoarseSedVol > 0)
3997 strErr =
"line " + to_string(nLine) +
": invalid floating point number '" + VstrTmp[5] +
"' for coast-normal length of sediment input event in " +
m_strSedimentInputEventFile;
4001 dLen = stod(
strTrim(&VstrTmp[5]));
4005 strErr =
"line " + to_string(nLine) +
": coast-normal length of the sediment block '" + to_string(dLen) +
"' must be > 0 in " +
m_strSedimentInputEventFile;
4012 strErr =
"line " + to_string(nLine) +
": invalid floating point number '" + VstrTmp[6] +
"' for along-coast width of sediment input event in " +
m_strSedimentInputEventFile;
4016 dWidth = stod(
strTrim(&VstrTmp[6]));
4020 strErr =
"line " + to_string(nLine) +
": along-coast width (m) of the sediment block '" + to_string(dWidth) +
"' must be > 0 in " +
m_strSedimentInputEventFile;
4048 if (!strErr.empty())
4052 <<
"'" << strRec <<
"'" << endl;
double m_dCliffDepositionPlanviewWidth
Planview width of cliff collapse talus (m)
bool m_bCliffCollapseSave
Save cliff collapse raster GIS files?
int m_nLogFileDetail
The level of detail in the log file output. Can be LOG_FILE_LOW_DETAIL, LOG_FILE_MIDDLE_DETAIL,...
bool m_bAvgSeaDepthSave
Save average sea depth raster GIS files?
vector< string > m_VstrInitialSandConsSedimentFile
The name of the initial sand-sized consolidated sediment GIS file.
double m_dAllCellsDeepWaterWaveHeight
Deep water wave height (m) for all sea cells.
bool m_bDeepWaterWaveAngleSave
Save deep water wave angle raster GIS files?
int m_nGISMaxSaveDigits
The maximum number of digits in GIS filenames. These can be sequential, or the iteration number.
bool m_bTopSurfSave
Save fop surface (sediment and sea) raster DEMs?
string m_strInitialSuspSedimentFile
Name of initial suspended sediment file.
vector< double > m_VdTSDeepWaterWaveStationPeriod
Time series of wave period at deep water wave station.
bool m_bSedimentTopSurfSave
Save sediment top surface raster DEMs?
bool m_bFineUnconsSedSave
Save fine unconsolidated sediment raster GIS files?
string m_strSedimentInputEventFile
The name of the sediment input events time series file.
bool m_bHaveConsolidatedSediment
Does this simulation consider consolidated sediment, or is it an unconsolidated sediment only simulat...
double m_dNotchDepthAtCollapse
Notch overhang (i.e. length of horizontal incision) to initiate collapse (m)
bool m_bFloodSWLSetupSurgeLine
Are we saving the flood still water level setup surge line? TODO 007.
string m_strCMEIni
Folder for the CME .ini file.
bool m_bSedimentInputAtPoint
Do we have sediment inputat a point?
double m_dG
Gravitational acceleration (m**2/sec)
vector< string > m_VstrInitialCoarseUnconsSedimentFile
The name of the initial coarse-sized unconsolidated sediment GIS file.
int m_nBeachErosionDepositionEquation
Which beach erosion-deposition equation is used. Possible values are UNCONS_SEDIMENT_EQUATION_CERC an...
bool m_bBeachDepositionTSSave
Save the beach (unconsolidated sediment) deposition time series file?
static string strRemoveSubstr(string *, string const *)
Returns a string with a substring removed, and with whitespace trimmed.
vector< string > m_VstrGDALICCDataType
GDAL data type for the initial consolidated coarse sediment GIS data.
static bool bParseTime(string const *, int &, int &, int &)
Parses a time string into hours, minutes, and seconds, and checks each of them.
double m_dWaveDataWrapHours
Number of hours after which deep water wave data wraps.
vector< string > m_VstrGDALICFDataType
GDAL data type for the initial consolidated fine sediment GIS data.
double m_dMaxUserInputWavePeriod
Used to constrain depth of closure.
bool m_bFloodSetupSurgeRunupTSSave
Save the flood setup surge runup time series file? TODO 007 Does this work correctly?
vector< string > m_VstrGDALICCDriverCode
GDAL driver code for the initial consolidated coarse sediment GIS data.
double m_dCoastNormalLength
Length of the coastline-normal profiles, in m.
vector< string > m_VstrGDALIUFDataType
GDAL data type for the initial unconsolidated fine sediment GIS data.
bool m_bSingleDeepWaterWaveValues
Do we have just a point source for (i.e. only a single measurement of) deep water wave values.
string m_strRunName
The name of this simulation.
bool m_bAvgWaveAngleAndHeightSave
Save average wave angle and average wave height raster GIS files?
string m_strSCAPEShapeFunctionFile
Name of SCAPE shape function file.
bool m_bAvgWaveAngleSave
Save average wave angle raster GIS files?
int nReadWaveStationInputFile(int const)
Reads the deep water wave station input data. Each point in m_strDeepWaterWavesInputFile is a triad o...
bool m_bCliffEdgeSave
Save cliff edge vector GIS files?
bool m_bInvalidNormalsSave
Save invalid coastline-normal vector GIS files?
bool m_bShadowBoundarySave
Save wave shadow boundary vector GIS files?
int nDoSimulationTimeMultiplier(string const *)
Given a string containing time units, this sets up the appropriate multiplier and display units for t...
int nReadSedimentInputEventFile(void)
Reads the sediment input event file.
vector< int > m_VnSedimentInputLocationID
ID for sediment input location, this corresponds with the ID in the sediment input time series file.
bool m_bActualBeachErosionSave
Save actual (supply-limited) beach (unconsolidated sediment) erosion raster GIS files?
vector< double > m_VdErosionPotential
For erosion potential lookup.
vector< double > m_VdTideData
Tide data: one record per timestep, is the change (m) from still water level for that timestep.
vector< string > m_VstrGDALIUFProjection
GDAL projection for the initial unconsolidated fine sediment GIS data.
bool m_bStillWaterLevelTSSave
Save the still water level time series file?
bool m_bRunUpSave
Are we saving runup? TODO 007.
bool m_bCliffCollapseDepositionSave
Save cliff collapse deposition raster GIS files?
string m_strSedimentInputEventShapefile
The name of the sediment input events shape file.
bool m_bTotalActualPlatformErosionSave
Save total actual (supply-limited) shore platform erosion raster GIS files?
static string strTrimLeft(string const *)
Trims whitespace from the left side of a string, does not change the original string.
bool m_bPolygonUnconsSedUpOrDownDriftSave
Save polygon unconsolidated sediment up- or down-drift raster GIS files?
double m_dCoarseErodibility
The relative erodibility (0- 1) of coarse unconsolidated beach sediment.
double m_dCliffTalusMinDepositionLength
Planview length of cliff deposition talus (m)
string m_strVectorGISOutFormat
Base name for CME vector GIS output files.
vector< string > m_VstrGDALICFDriverCode
GDAL driver code for the initial consolidated fine sediment GIS data.
vector< string > m_VstrInitialFineConsSedimentFile
The name of the initial fine-sized consolidated sediment GIS file.
int m_nUnconsSedimentHandlingAtGridEdges
How sediment which moves off an edge of the grid is handled. Possible values are GRID_EDGE_CLOSED,...
double m_dSandErodibility
The relative erodibility (0- 1) of sand unconsolidated beach sediment.
bool m_bBasementElevSave
Save basement raster DEMs?
int m_nSimStartHour
Start time of the simulation (hours)
bool m_bCoarseUnconsSedSave
Save coarse unconsolidated sediment raster GIS files?
bool m_bSuspSedTSSave
Save the suspended sediment time series file?
string m_strDeepWaterWaveStationsShapefile
The name of the deep water wave stations shape file.
vector< double > m_VdDepthOverDB
For erosion potential lookup.
bool m_bCliffCollapseNetTSSave
Save the cliff collapse net change time series file?
bool m_bPotentialPlatformErosionMaskSave
Save potential platform erosion mask raster GIS files?
vector< string > m_VstrGDALICSDriverCode
GDAL driver code for the initial consolidated sand sediment GIS data.
double m_dWaveDepthRatioForWaveCalcs
Start depth for wave calculations.
bool m_bWaveHeightSave
Save wave height raster GIS files?
bool m_bFloodLocation
Are we saving the flood location? TODO 007.
vector< string > m_VstrGDALIUCProjection
GDAL projection for the initial unconsolidated coarse sediment GIS data.
bool m_bLandformSave
Save coast landform raster GIS files?
static string strTrim(string const *)
Trims whitespace from both sides of a string, does not change the original string.
string m_strRasterGISOutFormat
Base name for CME raster GIS output files.
bool m_bTotalBeachDepositionSave
Save total beach (unconsolidated sediment) deposition raster GIS files?
double m_dBeachSedimentPorosity
The porosity of unconsolidated beach sediment (0 - 1)
int m_nSimStartSec
Start time of the simulation (seconds)
int m_nSimStartDay
Start date of the simulation (day)
bool m_bSandUnconsSedSave
Save sand unconsolidated sediment raster GIS files?
bool m_bActualPlatformErosionTSSave
Save the actual (supply-limited) shore platform erosion time series file?
unsigned long ulConvertToTimestep(string const *) const
For sediment input events, parses a string that may be relative (a number of hours or days after the ...
int m_nCoastNormalSpacing
Average spacing between coastline normals, measured in cells.
bool m_bTotCliffCollapseSave
Save total cliff collapse raster GIS files?
int nReadShapeFunctionFile(void)
Reads the shape of the erosion potential distribution (see shape function in Walkden & Hall,...
bool m_bCliffSave
Save cliff region raster grids?
bool m_bDoShorePlatformErosion
Simulate shore platform erosion?
bool m_bSliceSave
Save slices?
bool m_bRasterPolygonSave
Save raster polygon raster GIS files?
double m_dInitialMeanSWL
The start-of-simulation still water level (m)
bool m_bBeachDepositionSave
Save beach (unconsolidated sediment) deposition raster GIS files?
vector< string > m_VstrGDALICSDriverDesc
GDAL driver description for the initial consolidated sand sediment GIS data.
bool m_bSaveRegular
Save GIS files at regular intervals?
int m_nLayers
The number of sediment layers.
int m_nCoastSmoothingWindowSize
The size of the window used for coast smoothing. Must be an odd number.
bool m_bSedimentInputAlongLine
Do we have sediment input along a line?
bool m_bSedimentInput
Do we have sediment input events?
bool m_bNormalsSave
Save coastline-normal vector GIS files?
bool m_bAvgWaveHeightSave
Save wave height raster GIS files?
static string strToLower(string const *)
Returns the lower case version of an string, leaving the original unchanged.
vector< double > m_VdThisIterDeepWaterWaveStationHeight
This-iteration wave height at deep water wave station.
vector< string > m_VstrGDALIUFDriverCode
GDAL driver code for the initial unconsolidated fine sediment GIS data.
bool m_bHaveSandSediment
Does this simulation consider sand-sized sediment?
bool bReadRunDataFile(void)
Reads the run details input file and does some initialization.
int m_nUSave
If user-defined GIS save intervals, the number of these.
double m_dDeanProfileStartAboveSWL
Berm height i.e. height above SWL of start of depositional Dean profile.
int m_nSavGolCoastPoly
The order of the coastline profile smoothing polynomial if Savitzky-Golay smoothing is used (usually ...
bool m_bSeaDepthSave
Save sea depth raster GIS files?
bool m_bWaveAngleAndHeightSave
Save wave angle and wave height raster GIS files?
double m_dNotchBaseBelowSWL
Notch base below SWL (m)
string m_strInitialBasementDEMFile
Name of initial basement DEM file.
int m_nRunUpEquation
The run-up equation used TODO 007.
bool m_bWorldFile
Write a GIS World file?
static string strTrimRight(string const *)
Trims whitespace from the right side of a string, does not change the original string.
string m_strLogFile
Name of output log file.
double m_dDepthOverDBMax
Maximum value of deoth over DB, is used in erosion potential look-up function.
double m_dFineErodibility
The relative erodibility (0- 1) of fine unconsolidated beach sediment.
double m_dBreakingWaveHeightDepthRatio
Breaking wave height-to-depth ratio.
double m_dCoastNormalSpacing
Average spacing of the coastline-normal profiles, in m.
bool m_bHaveWaveStationData
Do we have wave station data?
double m_dSeaWaterDensity
Density of sea water in kg/m**3.
int m_nSavGolCliffEdgePoly
The order of the cliff edge smoothing polynomial if Savitzky-Golay smoothing is used (usually 2 or 4,...
double m_dR
Coast platform resistance to erosion R, see Walkden & Hall, 2011.
bool m_bRasterNormalProfileSave
Save rasterized coastline-normal profiles GIS files?
bool m_bActiveZoneSave
Save active zone raster GIS files?
vector< string > m_VstrInitialSandUnconsSedimentFile
The name of the initial sand-sized unconsolidated sediment GIS file.
bool m_bOmitSearchWestEdge
Omit the west edge of the grid from coast-end searches?
bool m_bSedimentInputAtCoast
Do we have sediment input at the coast?
int m_nCliffEdgeSmooth
Which method to use for cliff edge smoothing.
double m_dCliffErosionResistance
Resistance of cliff to notch erosion.
vector< string > m_VstrGDALIUSProjection
GDAL projection for the initial unconsolidated sand sediment GIS data.
vector< double > m_VdThisIterDeepWaterWaveStationPeriod
This-iteration wave period at deep water wave station.
double m_dD50Sand
The D50 for sand sediment.
string m_strCMEDir
The CME folder.
vector< int > m_VnProfileToSave
The numbers of the profiles which are to be saved.
bool m_bDeepWaterWaveHeightSave
Save deep water wave height raster GIS files?
bool m_bMeanWaveEnergySave
Save mean wave energy raster GIS files?
double m_dKLS
Transport parameter KLS in the CERC equation.
int m_nWavePropagationModel
The wave propagation model used. Possible values are WAVE_MODEL_CSHORE and WAVE_MODEL_COVE.
double m_dAllCellsDeepWaterWaveAngle
Deep water wave angle for all sea cells.
vector< string > m_VstrGDALICFProjection
GDAL projection for the initial consolidated fine sediment GIS data.
vector< string > m_VstrGDALICCProjection
GDAL projection for the initial consolidated coarse sediment GIS data.
static double dGetTimeMultiplier(string const *)
Given a string containing time units, this returns the appropriate multiplier.
bool m_bCoastCurvatureSave
Save coastline-curvature vector GIS files?
int m_nCliffEdgeSmoothWindow
The size of the window used for cliff edge smoothing. Must be an odd number.
int m_nDeepWaterWaveDataNumTimeSteps
The duration of data for deep water waves, expressed as a number of timesteps.
double m_dFinalMeanSWL
The end-of-simulation still water (m), is same as m_dInitialMeanSWL unless SWL changes.
bool m_bRasterWaveFloodLineSave
Are we saving the raster wave flood line? TODO 007.
bool m_bBreakingWaveHeightSave
Save breaking wave height raster GIS files?
string m_strMailAddress
An email addresx to which to send end-of-simulation messages.
double m_dRegularSaveTime
The time of the next save, in hours from the start of the simulation, if we are saving regularly.
bool m_bPolygonNodeSave
Save polygon node vector GIS files?
bool m_bOmitSearchNorthEdge
Omit the north edge of the grid from coast-end searches?
bool m_bFloodSetupSurgeTSSave
Save the flood setup surge time series file? TODO 007 Does this work correctly?
bool m_bTotalPotentialPlatformErosionSave
Save total potential shore platform erosion raster GIS files?
bool m_bSetupSurgeFloodMaskSave
Are we saving the setup surge flood mask? TODO 007.
bool m_bWaveEnergySinceCollapseSave
Save wave energy since cliff collapse raster GIS files?
double m_dD50Coarse
The D50 for coarse sediment.
vector< unsigned long > m_VulProfileTimestep
Timesteps at which to save profiles.
bool m_bPotentialBeachErosionSave
Save potential beach (unconsolidated sediment) erosion raster GIS files?
static bool bParseDate(string const *, int &, int &, int &)
Parses a date string into days, months, and years, and checks each of them.
string m_strFloodLocationShapefile
The name of the flood loction events shape file.
bool m_bGISSaveDigitsSequential
Are the GIS save digits (which are part of each GIS file name) sequential, or are they the iteration ...
int m_nSimStartMonth
Start date of the simulation (month)
bool m_bSuspSedSave
Save suspended sediment raster GIS files?
double m_dMinCliffTalusHeightFrac
Minimum height of the landward end of cliff collapse talus, as a fraction of cliff elevation.
vector< string > m_VstrGDALIUSDriverDesc
bool m_bPolygonBoundarySave
Save polygon boundary vector GIS files?
bool m_bStormSurgeSave
Are we saving the storm surge? TODO 007.
vector< string > m_VstrInitialFineUnconsSedimentFile
The name of the initial fine-sized unconsolidated sediment GIS file.
bool m_bActualPlatformErosionSave
Save actual (supply-limited) shore platform erosion raster GIS files?
vector< CSedInputEvent * > m_pVSedInputEvent
Sediment input events.
int m_nSimStartMin
Start time of the simulation (minutes)
bool bReadIniFile(void)
The bReadIniFile member function reads the initialization file.
bool m_bHaveFineSediment
Does this simulation consider fine-sized sediment?
double m_dCliffDepositionA
Scale parameter A for cliff deposition (m^(1/3)), may be zero for auto-calculation.
string m_strDataPathName
Folder in which the CME data file is found.
string m_strOutPath
Path for all output files.
bool m_bBeachErosionTSSave
Save the beach (unconsolidated sediment) erosion time series file?
vector< string > m_VstrGDALICFDriverDesc
string m_strTideDataFile
Name of tide data file.
vector< string > m_VstrGDALIUFDriverDesc
bool m_bTotalPotentialBeachErosionSave
Save total potential beach (unconsolidated sediment) erosion raster GIS files?
vector< string > m_VstrGDALIUSDataType
GDAL data type for the initial unconsolidated sand sediment GIS data.
string m_strInterventionClassFile
Name of intervention class file.
bool m_bFloodSWLSetupLine
Are we saving the flood still water level setup line? TODO 007.
bool m_bSeaMaskSave
Save sea mask raster GIS files?
bool m_bInterventionClassSave
Save intervention class raster GIS files?
int m_nSimStartYear
Start date of the simulation (year)
bool m_bTotalActualBeachErosionSave
Save total actual (supply-limited) beach (unconsolidated sediment) erosion raster GIS files?
bool m_bRasterCoastlineSave
Save rasterized coastline GIS files?
string m_strDeepWaterWavesInputFile
The name of the deep water wave stations time series file.
static string pstrChangeToBackslash(string const *)
Changes all forward slashes in the input string to backslashes, leaving the original unchanged.
bool m_bInterventionHeightSave
Save intervention height raster GIS files?
int m_nCoastCurvatureMovingWindowSize
WHAT IS THOS FOR?
bool m_bRiverineFlooding
Are we doing flooding? TODO 007.
bool m_bSandConsSedSave
Save sand consolidated sediment raster GIS files?
bool m_bSedimentInputEventSave
Save sediment inut data?
bool m_bHaveCoarseSediment
Does this simulation consider coarse-sized sediment?
double m_dRegularSaveInterval
The interval between regular saves, in hours.
bool m_bPolygonUnconsSedGainOrLossSave
Save polygon unconsolidated sediment gain or loss raster GIS files?
double m_dTimeStep
The length of an iteration (a time step) in hours.
bool m_bCliffCollapseDepositionTSSave
Save the cliff collapse deposition time series file?
vector< string > m_VstrGDALIUCDriverCode
GDAL driver code for the initial unconsolidated coarse sediment GIS data.
bool m_bDeepWaterWaveAngleAndHeightSave
Save deep water wave angle and wave height raster GIS files?
double m_dCoastNormalRandSpacingFactor
Random factor for spacing of along-coast normals.
double m_dMaxUserInputWaveHeight
Maximum deep water wave height.
vector< double > m_VdSliceElev
Elevations for raster slice output.
bool m_bBeachProtectionSave
Save beach protection raster GIS files>
bool m_bDoBeachSedimentTransport
Simulate unconsolidated sediment (beach) transport?
bool m_bFineConsSedSave
Save fine consolidated sediment raster GIS files?
bool m_bShadowDowndriftBoundarySave
Save wave shadow downdrift boundary vector GIS files?
int m_nCoastSmooth
Which method to use for coast smoothing.
bool m_bDeepWaterWavePeriodSave
Save deep water wave period raster GIS files?
string m_strInitialLandformFile
Name of initial landform file.
string m_strInterventionHeightFile
Name of intervention height file.
bool m_bBeachSedimentChangeNetTSSave
Save the beach (unconsolidated sediment) net change time series file?
vector< string > m_VstrGDALICSDataType
GDAL data type for the initial consolidated sand sediment GIS data.
int nReadTideDataFile(void)
Reads the tide time series data.
bool m_bCoarseConsSedSave
Save coarse consolidated sediment raster GIS files?
bool m_bSeaAreaTSSave
Save the sea area time series file?
bool m_bScaleRasterOutput
Scale raster output?
vector< string > m_VstrGDALICSProjection
GDAL dprojection for the initial consolidated sand sediment GIS data.
double m_dD50Fine
The D50 for fine sediment.
unsigned long m_ulRandSeed[NUMBER_OF_RNGS]
A seed for each of the random number generators.
bool m_bOmitSearchSouthEdge
Omit the south edge of the grid from coast-end searches?
bool m_bBeachMaskSave
Save beach mask raster GIS files?
bool m_bSlopeSave
Save slope raster grids?
bool m_bAvgSuspSedSave
Save average suspended sediment raster GIS files?
double m_dBeachSedimentDensity
The density of unconsolidated beach sediment (kg/m**3)
vector< string > m_VstrInitialCoarseConsSedimentFile
The name of the initial coarse-sized consolidated sediment GIS file.
double m_dSimDuration
Duration of simulation, in hours.
bool m_bCSVPerTimestepResults
Output per-timestep results in CSV format instead of fixed-width?
double m_dCliffSlopeLimit
Slope limit for cliff toe detection.
vector< double > m_VdThisIterDeepWaterWaveStationAngle
This-iteration wave orientation at deep water wave station.
bool m_bOutputProfileData
Output profile data?
vector< string > m_VstrGDALIUCDriverDesc
double m_dMaxBeachElevAboveSWL
Maximum elevation of beach above SWL (m)
bool m_bTotCliffCollapseDepositionSave
Save total cliff collapse deposition raster GIS files?
double m_dAllCellsDeepWaterWavePeriod
Deep water wave period for all sea cells.
bool bCreateErosionPotentialLookUp(vector< double > *, vector< double > *, vector< double > *)
Creates a look-up table for erosion potential, given depth over DB.
double m_dUSaveTime[SAVEMAX]
Save time, in hours from the start of the simukation, if we are not saving regularly.
double m_dProfileMaxSlope
Maximum slope on coastline-normal profiles.
int m_nProfileSmoothWindow
The size of the window used for running-mean coast-normal profile smoothing (must be odd)
bool m_bDoCliffCollapse
Simulate cliff collapse?
vector< string > m_VstrGDALICCDriverDesc
GDAL driver decription for the initial consolidated coarse sediment GIS data.
string m_strOutFile
Name of main output file.
bool m_bSetupSurgeRunupFloodMaskSave
Are we saving the setup surge runup flood mask? TODO 007.
bool m_bWaveSetupSave
Are we saving the wave setup? TODO 007.
vector< double > m_VdTSDeepWaterWaveStationHeight
Time series of wave heights at deep water wave station.
bool m_bShadowZoneCodesSave
Save wave shadow zones raster GIS files?
vector< string > m_VstrGDALIUCDataType
GDAL data type for the initial unconsolidated coarse sediment GIS data.
bool m_bCliffCollapseErosionTSSave
Save the cliff collapse erosion time series file?
bool m_bPotentialPlatformErosionSave
Save potential shore platform erosion raster GIS files?
double m_dDurationUnitsMult
Multiplier for duration units, to convert to hours.
bool m_bFloodSWLSetupSurgeRunupLine
Are we saving the flood still water level setup surge runup line? TODO 007.
bool m_bOutputParallelProfileData
Output parallel profile data?
double m_dKamphuis
Transport parameter for the Kamphuis equation.
vector< double > m_VdTSDeepWaterWaveStationAngle
Time series of wave orientation at deep water wave station.
static vector< string > * VstrSplit(string const *, char const, vector< string > *)
From http://stackoverflow.com/questions/236129/split-a-string-in-c They implement (approximately) Pyt...
bool m_bOutputErosionPotentialData
Output erosion potential data?
bool m_bCliffNotchSave
Save cliff notch incision depth vector GIS files?
bool m_bVectorWaveFloodLineSave
Are we saving the vector wave flood line? TODO 007.
vector< string > m_VstrGDALIUSDriverCode
GDAL driver code for the initial unconsolidated sand sediment GIS data.
bool m_bWaveAngleSave
Save wave angle raster GIS files?
bool m_bOmitSearchEastEdge
Omit the east edge of the grid from coast-end searches?
bool m_bLocalSlopeSave
Save local slope raster GIS files?
This file contains global definitions for CoastalME.
string const VECTOR_FLOOD_SWL_SETUP_SURGE_LINE_CODE
string const TIME_SERIES_CLIFF_COLLAPSE_DEPOSITION_CODE
string const TIME_SERIES_SUSPENDED_SEDIMENT_CODE
string const RASTER_POTENTIAL_PLATFORM_EROSION_MASK_CODE
int const WAVE_MODEL_COVE
int const RTN_ERR_READING_SEDIMENT_INPUT_EVENT
string const RASTER_CLIFF_COLLAPSE_EROSION_FINE_CODE
string const TIME_SERIES_PLATFORM_EROSION_CODE
string const RASTER_COARSE_CONS_CODE
string const VECTOR_POLYGON_NODE_CODE
string const RASTER_USUAL_OUTPUT_CODE
string const RASTER_DEEP_WATER_WAVE_ORIENTATION_CODE
string const RASTER_DEEP_WATER_WAVE_HEIGHT_CODE
string const TIME_SERIES_FLOOD_SETUP_SURGE_RUNUP_CODE
string const RASTER_SLOPE_CODE
string const VECTOR_ALL_OUTPUT_CODE
string const VECTOR_FLOOD_SWL_SETUP_SURGE_RUNUP_LINE_CODE
string const RASTER_TOTAL_CLIFF_COLLAPSE_DEPOSITION_SAND_CODE
string const RASTER_ACTIVE_ZONE_CODE
string const RASTER_CLIFF_COLLAPSE_EROSION_COARSE_CODE
string const RASTER_SAND_CONS_CODE
string const TIME_SERIES_FLOOD_SETUP_SURGE_CODE
int const RTN_ERR_SCAPE_SHAPE_FUNCTION_FILE
int const UNCONS_SEDIMENT_EQUATION_KAMPHUIS
string const RASTER_COAST_NORMAL_CODE
int const DEFAULT_PROFILE_SPACING
string const VECTOR_CLIFF_EDGE_CODE
string const RASTER_AVG_SUSP_SED_CODE
string const RASTER_COAST_CODE
string const RASTER_SEDIMENT_INPUT_EVENT_CODE
string const VECTOR_WAVE_ENERGY_SINCE_COLLAPSE_CODE
string const RASTER_WAVE_ORIENTATION_CODE
string const VECTOR_RUN_UP_CODE
string const RASTER_ALL_OUTPUT_CODE
string const RASTER_CLIFF_COLLAPSE_EROSION_SAND_CODE
string const RASTER_POLYGON_UPDRIFT_OR_DOWNDRIFT_CODE
string const RASTER_WAVE_FLOOD_LINE_CODE
int const WAVE_MODEL_CSHORE
string const RASTER_COARSE_UNCONS_CODE
char const PATH_SEPARATOR
string const VECTOR_INVALID_NORMALS_CODE
string const RASTER_BASEMENT_ELEVATION_CODE
string const RASTER_WAVE_HEIGHT_CODE
string const RASTER_CLIFF_COLLAPSE_DEPOSITION_COARSE_CODE
string const RASTER_INTERVENTION_CLASS_CODE
string const RASTER_POTENTIAL_PLATFORM_EROSION_CODE
string const RASTER_POTENTIAL_BEACH_EROSION_CODE
string const VECTOR_MEAN_WAVE_ENERGY_CODE
string const VECTOR_STORM_SURGE_CODE
double const D50_SAND_DEFAULT
string const RASTER_TOTAL_CLIFF_COLLAPSE_EROSION_COARSE_CODE
bool bFPIsEqual(const T d1, const T d2, const T dEpsilon)
string const VECTOR_USUAL_OUTPUT_CODE
string const RASTER_WAVE_PERIOD_CODE
int const GRID_EDGE_CLOSED
string const TIME_SERIES_CLIFF_COLLAPSE_NET_CODE
int const GRID_EDGE_RECIRCULATE
int const RTN_ERR_OPEN_DEEP_WATER_WAVE_DATA
string const RASTER_TOTAL_ACTUAL_BEACH_EROSION_CODE
string const VECTOR_NORMALS_CODE
string const RASTER_BEACH_DEPOSITION_CODE
string const RASTER_SHADOW_ZONE_CODE
string const RASTER_TOTAL_BEACH_DEPOSITION_CODE
string const VECTOR_DEEP_WATER_WAVE_ANGLE_AND_HEIGHT_CODE
double const D50_COARSE_DEFAULT
string const RASTER_BEACH_PROTECTION_CODE
string const RASTER_TOTAL_POTENTIAL_PLATFORM_EROSION_CODE
string const TIME_SERIES_CLIFF_COLLAPSE_EROSION_CODE
string const RASTER_BEACH_MASK_CODE
string const RASTER_AVG_WAVE_HEIGHT_CODE
string const RASTER_SETUP_SURGE_FLOOD_MASK_CODE
string const TIME_SERIES_BEACH_EROSION_CODE
string const RASTER_TOTAL_POTENTIAL_BEACH_EROSION_CODE
int const SMOOTH_SAVITZKY_GOLAY
string const RASTER_AVG_SEA_DEPTH_CODE
string const RASTER_SAND_UNCONS_CODE
string const RASTER_CLIFF_CODE
string const READING_FILE_LOCATIONS
string const VECTOR_CLIFF_NOTCH_SIZE_CODE
string const RASTER_SETUP_SURGE_RUNUP_FLOOD_MASK_CODE
string const RASTER_LANDFORM_CODE
string const RASTER_TOTAL_ACTUAL_PLATFORM_EROSION_CODE
int const RTN_ERR_READING_DEEP_WATER_WAVE_DATA
string const RASTER_ACTUAL_PLATFORM_EROSION_CODE
string const VECTOR_BREAKING_WAVE_HEIGHT_CODE
unsigned long const SEDIMENT_INPUT_EVENT_ERROR
int const RTN_ERR_TIDEDATAFILE
string const RASTER_SUSP_SED_CODE
string const VECTOR_SHADOW_BOUNDARY_CODE
string const VECTOR_COAST_CURVATURE_CODE
double const D50_FINE_DEFAULT
string const VECTOR_ALL_RIVER_FLOOD_OUTPUT_CODE
string const RASTER_CLIFF_COLLAPSE_DEPOSITION_SAND_CODE
string const RASTER_SEA_DEPTH_CODE
string const RASTER_LOCAL_SLOPE_CODE
string const RASTER_FINE_CONS_CODE
string const VECTOR_POLYGON_BOUNDARY_CODE
string const RASTER_FINE_UNCONS_CODE
string const TIME_SERIES_STILL_WATER_LEVEL_CODE
string const RASTER_SEDIMENT_TOP_CODE
int const UNCONS_SEDIMENT_EQUATION_CERC
string const RASTER_POLYGON_GAIN_OR_LOSS_CODE
string const RASTER_TOTAL_CLIFF_COLLAPSE_EROSION_SAND_CODE
string const VECTOR_AVG_WAVE_ANGLE_AND_HEIGHT_CODE
string const TIME_SERIES_BEACH_CHANGE_NET_CODE
string const RASTER_INTERVENTION_HEIGHT_CODE
string const VECTOR_FLOOD_LINE_CODE
string const TIME_SERIES_BEACH_DEPOSITION_CODE
string const VECTOR_FLOOD_SWL_SETUP_LINE_CODE
string const VECTOR_WAVE_SETUP_CODE
string const RASTER_POLYGON_CODE
string const RASTER_ACTUAL_BEACH_EROSION_CODE
string const RASTER_INUNDATION_MASK_CODE
string const VECTOR_COAST_CODE
string const RASTER_TOTAL_CLIFF_COLLAPSE_EROSION_FINE_CODE
string const RASTER_AVG_WAVE_ORIENTATION_CODE
string const SCAPE_SHAPE_FUNCTION_FILE
string const TIME_SERIES_SEA_AREA_CODE
string const RASTER_DEEP_WATER_WAVE_PERIOD_CODE
string const RASTER_TOTAL_CLIFF_COLLAPSE_DEPOSITION_COARSE_CODE
string const RASTER_TOP_CODE
string const VECTOR_DOWNDRIFT_BOUNDARY_CODE
Contains CSimulation definitions.
bool bIsStringValidInt(string &str)
Checks to see if a string can be read as a valid integer, from https://stackoverflow....
bool bIsStringValidDouble(string &str)
Checks to see if a string can be read as a valid double number. Does not find trailing (i....