49using std::random_device;
83 InStream.open(strFilePathName.c_str(), ios::in);
86 if (!InStream.is_open())
89 cerr <<
ERR <<
"cannot open " << strFilePathName <<
" for input" << endl;
95 string strRec, strErr;
97 while (getline(InStream, strRec))
105 if ((!strRec.empty()) && (strRec[0] !=
QUOTE1) && (strRec[0] !=
QUOTE2))
111 size_t nPos = strRec.find(
COLON);
113 if (nPos == string::npos)
116 cerr <<
ERR <<
"on line " << nLine <<
": badly formatted (no ':') in " << strFilePathName << endl
117 <<
"'" << strRec <<
"'" << endl;
121 if (nPos == strRec.size() - 1)
124 cerr <<
ERR <<
"on line " << nLine <<
": badly formatted (nothing following ':') in " << strFilePathName << endl
125 <<
"'" << strRec <<
"'" << endl;
130 string strRH = strRec.erase(0, nPos + 1);
136 nPos = strRH.rfind(
QUOTE1);
138 if (nPos != string::npos)
141 nPos = strRH.rfind(
QUOTE2);
143 if (nPos != string::npos)
154 strErr =
"line " + to_string(nLine) +
": path and name of main datafile";
180 strErr =
"line " + to_string(nLine) +
": path for CoastalME output";
208 if (strRH.find(
'@') == string::npos)
209 strErr =
"line " + to_string(nLine) +
": email address for messages";
222 cerr <<
ERR <<
"reading " << strErr <<
" in " << strFilePathName << endl
223 <<
"'" << strRec <<
"'" << endl;
248 if (!InStream.is_open())
258 string strRec, strErr;
260 while (getline(InStream, strRec))
268 if ((!strRec.empty()) && (strRec[0] !=
QUOTE1) && (strRec[0] !=
QUOTE2))
274 nPos = strRec.find(
COLON);
276 if (nPos == string::npos)
279 cerr <<
ERR <<
"on line " << to_string(nLine) <<
"badly formatted (no ':') in " <<
m_strDataPathName << endl
285 string strRH = strRec.erase(0, nPos + 1);
297 nPos = strRH.rfind(
QUOTE1);
299 if (nPos != string::npos)
305 nPos = strRH.rfind(
QUOTE2);
307 if (nPos != string::npos)
331 vector<string> VstrTmp;
339 strErr =
"line " + to_string(nLine) +
": output file names";
360 strErr =
"line " + to_string(nLine) +
": invalid integer for log file detail level '" + strRH +
"' in " +
m_strDataPathName;
367 strErr =
"line " + to_string(nLine) +
": log file detail level";
377 if (strRH.find(
'y') != string::npos)
387 if (VstrTmp.size() < 2)
389 strErr =
"line " + to_string(nLine) +
": must have both date and time for simulation start in '" +
m_strDataPathName +
"'";
394 if (!
bParseTime(&VstrTmp[0], nHour, nMin, nSec))
396 strErr =
"line " + to_string(nLine) +
": could not understand simulation start time in '" +
m_strDataPathName +
"'";
401 if (!
bParseDate(&VstrTmp[1], nDay, nMonth, nYear))
403 strErr =
"line " + to_string(nLine) +
": could not understand simulation start date in '" +
m_strDataPathName +
"'";
425 strErr =
"line " + to_string(nLine) +
": units for duration of simulation";
430 nPos = strRH.rfind(
SPACE);
432 if (nPos == string::npos)
434 strErr =
"line " + to_string(nLine) +
": format of duration simulation line";
448 strErr =
"line " + to_string(nLine) +
": duration of simulation must be > 0";
460 strErr =
"line " + to_string(nLine) +
": units for simulation timestep";
465 nPos = strRH.rfind(
SPACE);
467 if (nPos == string::npos)
469 strErr =
"line " + to_string(nLine) +
": format of simulation timestep";
482 strErr =
"line " + to_string(nLine) +
": invalid floating point number for timestep '" + strRH +
"' in " +
m_strDataPathName;
489 strErr =
"line " + to_string(nLine) +
": timestep of simulation must be > 0";
492 strErr =
"line " + to_string(nLine) +
": timestep of simulation must be < the duration of the simulation";
502 string const strOriginal = strRH;
503 size_t nCommaPos = 0;
510 size_t const nNextComma = strOriginal.find(
',', nCommaPos);
512 if (nNextComma != string::npos)
514 strGroup = strOriginal.substr(nCommaPos, nNextComma - nCommaPos);
515 nCommaPos = nNextComma + 1;
520 strGroup = strOriginal.substr(nCommaPos);
521 nCommaPos = string::npos;
528 if (strGroup.empty())
536 strErr =
"line " + to_string(nLine) +
": units for save intervals in group '" + strGroup +
"'";
541 size_t const nLastSpace = strGroup.rfind(
SPACE);
543 if (nLastSpace == string::npos)
545 strErr =
"line " + to_string(nLine) +
": format of save times/intervals in group '" + strGroup +
"'";
549 string strNumbers = strGroup.substr(0, nLastSpace);
553 size_t nSpacePos = 0;
558 size_t const nNextSpace = strNumbers.find(
SPACE, nSpacePos);
560 if (nNextSpace == string::npos)
563 string const strNumber = strNumbers.substr(nSpacePos, nNextSpace - nSpacePos);
565 if (!strNumber.empty())
569 strErr =
"line " + to_string(nLine) +
": too many save intervals";
573 double const dValue = strtod(strNumber.c_str(), NULL) * dMult;
577 nSpacePos = nNextSpace + 1;
578 }
while (nSpacePos < strNumbers.length());
582 }
while (nCommaPos != string::npos);
594 strErr =
"line " + to_string(nLine) +
": save interval cannot be less than timestep";
607 strErr =
"line " + to_string(nLine) +
": first save time cannot be less than timestep";
617 strErr =
"line " + to_string(nLine) +
": no save times specified";
638 nPos = strRH.find(
SPACE);
640 if (nPos == string::npos)
658 strTmp = strRH.substr(0, nPos);
666 strRH = strRH.substr(nPos, strRH.size() - nPos);
669 if (strRH.size() == 0)
689 strErr =
"line " + to_string(nLine) +
": invalid integer for max save digits for GIS output file names '" + strRH +
"' in " +
m_strDataPathName;
696 strErr =
"line " + to_string(nLine) +
": max save digits for GIS output file names must be > 1";
703 strErr =
"line " + to_string(nLine) +
": must specify save digits for GIS output as sequential or as iteration number";
710 if (strRH.find(
's') != string::npos)
716 else if (strRH.find(
'i') != string::npos)
725 strErr += to_string(nLine);
726 strErr +=
": invalid code for save digits for GIS output save number (must be s or i)";
739 strErr += to_string(nLine);
740 strErr +=
": must contain '";
744 strErr +=
"', or at least one raster GIS output code";
1231 strErr =
"line " + to_string(nLine) +
": unknown code '" + strRH +
"' in list of codes for raster GIS output";
1242 if (strRH.find(
"gpkg") != string::npos)
1243 strErr =
"GDAL gpkg raster create() is not yet working correctly. Please choose another output format.";
1253 if (strRH.find(
'y') != string::npos)
1264 if (strRH.find(
'y') != string::npos)
1276 nPos = strRH.find(
SPACE);
1278 if (nPos != string::npos)
1284 strTmp = strRH.substr(0, nPos);
1288 strRH = strRH.substr(nPos, strRH.size() - nPos);
1292 nPos = strRH.find(
SPACE);
1293 }
while (nPos != string::npos);
1307 strErr += to_string(nLine);
1308 strErr +=
": must contain '";
1310 strErr +=
"', or '";
1312 strErr +=
"', or at least one vector GIS output code";
1488 strErr =
"line " + to_string(nLine) +
": unknown code '" + strRH +
"' in list of vector GIS output codes";
1499 strErr =
"line " + to_string(nLine) +
": vector GIS output format";
1602 strErr =
"line " + to_string(nLine) +
": unknown code '" + strRH +
"' in list of time series output files";
1612 strErr =
"line " + to_string(nLine) +
": invalid integer for coastline smoothing algorithm '" + strRH +
"' in " +
m_strDataPathName;
1619 strErr =
"line " + to_string(nLine) +
": coastline vector smoothing algorithm";
1627 strErr =
"line " + to_string(nLine) +
": invalid integer for coastline smoothing window '" + strRH +
"' in " +
m_strDataPathName;
1634 strErr =
"line " + to_string(nLine) +
": size of coastline vector smoothing window (must be > 0 and odd)";
1642 strErr =
"line " + to_string(nLine) +
": invalid integer for Savitzky-Golay polynomial for coastline smoothing '" + strRH +
"' in " +
m_strDataPathName;
1649 strErr =
"line " + to_string(nLine) +
": value of Savitzky-Golay polynomial for coastline smoothing (must be <= 6)";
1657 if (strRH.find(
'n') != string::npos)
1662 if (strRH.find(
's') != string::npos)
1667 if (strRH.find(
'w') != string::npos)
1672 if (strRH.find(
'e') != string::npos)
1683 strErr =
"line " + to_string(nLine) +
": invalid integer for size of coastline smoothing window '" + strRH +
"' in " +
m_strDataPathName;
1690 strErr =
"line " + to_string(nLine) +
": size of profile vector smoothing window (must be >= 0, if > 0 must be odd)";
1698 strErr =
"line " + to_string(nLine) +
": invalid floating point number for max local slope '" + strRH +
"' in " +
m_strDataPathName;
1705 strErr =
"line " + to_string(nLine) +
": max local slope must be > 0";
1713 strErr =
"line " + to_string(nLine) +
": invalid floating point number for maximum elevation of beach above SWL '" + strRH +
"' in " +
m_strDataPathName;
1720 strErr =
"line " + to_string(nLine) +
": maximum elevation of beach above SWL must be >= 0";
1729 strErr =
"line " + to_string(nLine) +
": invalid integer for number of sediment layers '" + strRH +
"' in " +
m_strDataPathName;
1737 strErr =
"line " + to_string(nLine) +
": must be at least one sediment layer";
1804 for (
int nLayer = 0; nLayer <
m_nLayers; nLayer++)
1806 for (
int j = 1; j <= 6; j++)
1812 if (!getline(InStream, strRec))
1825 while (strRec.empty() || (strRec[0] ==
QUOTE1) || (strRec[0] ==
QUOTE2));
1828 nPos = strRec.find(
COLON);
1830 if (nPos == string::npos)
1833 cerr <<
ERR <<
"on line " << to_string(nLine) <<
": badly formatted (no ':') in " <<
m_strDataPathName << endl
1839 strRH = strRec.substr(nPos + 1);
1846 nPos = strRH.rfind(
QUOTE1);
1848 if (nPos != string::npos)
1851 nPos = strRH.rfind(
QUOTE2);
1853 if (nPos != string::npos)
2043 if (!strErr.empty())
2047 <<
"'" << strRec <<
"'" << endl;
2145 strErr =
"line " + to_string(nLine) +
": must specify both intervention class and intervention height files";
2154 strErr =
"line " + to_string(nLine) +
": must specify both intervention class and intervention height files";
2185 strErr =
"line " + to_string(nLine) +
": invalid integer for wave propagation model '" + strRH +
"' in " +
m_strDataPathName;
2192 strErr =
"line " + to_string(nLine) +
": wave propagation model must be 0 or 1";
2200 strErr =
"line " + to_string(nLine) +
": invalid floating point number for sea water density '" + strRH +
"' in " +
m_strDataPathName;
2207 strErr =
"line " + to_string(nLine) +
": sea water density must be > 0";
2215 strErr =
"line " + to_string(nLine) +
": invalid floating point number for initial SWL '" + strRH +
"' in " +
m_strDataPathName;
2232 strErr =
"line " + to_string(nLine) +
": invalid floating point number for final SWL '" + strRH +
"' in " +
m_strDataPathName;
2244 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)";
2248 if (isdigit(strRH.at(0)))
2253 strErr =
"line " + to_string(nLine) +
": invalid floating point number for deep water wave height '" + strRH +
"' in " +
m_strDataPathName;
2263 strErr =
"line " + to_string(nLine) +
": deep water wave height must be > 0";
2299 strErr =
"line " + to_string(nLine) +
": filename missing for deep water wave height input";
2332 strErr =
"line " + to_string(nLine) +
": invalid floating point number for deep water wave orientation '" + strRH +
"' in " +
m_strDataPathName;
2339 strErr =
"line " + to_string(nLine) +
": deep water wave orientation must be zero degrees or more";
2342 strErr =
"line " + to_string(nLine) +
": deep water wave orientation must be less than 360 degrees";
2354 strErr =
"line " + to_string(nLine) +
": invalid floating point number for wave period '" + strRH +
"' in " +
m_strDataPathName;
2361 strErr =
"line " + to_string(nLine) +
": wave period must be > 0";
2394 strErr =
"line " + to_string(nLine) +
": invalid floating point number for breaking wave height to depth ratio '" + strRH +
"' in " +
m_strDataPathName;
2401 strErr =
"line " + to_string(nLine) +
": breaking wave height to depth ratio must be > 0";
2410 if (strRH.find(
'y') != string::npos)
2422 strErr =
"line " + to_string(nLine) +
": invalid floating point number for R (coast platform resistance to erosion) '" + strRH +
"' in " +
m_strDataPathName;
2426 m_dR = strtod(strRH.c_str(), NULL);
2429 strErr =
"line " + to_string(nLine) +
": R (coast platform resistance to erosion) value must be > 0";
2440 if (strRH.find(
'y') != string::npos)
2451 strErr =
"line " + to_string(nLine) +
": invalid integer for beach sediment transport at grid edges '" + strRH +
"' in " +
m_strDataPathName;
2458 strErr =
"line " + to_string(nLine) +
": switch for handling of beach sediment at grid edges must be 0, 1, or 2";
2469 strErr =
"line " + to_string(nLine) +
": invalid integer for beach erosion/deposition equation '" + strRH +
"' in " +
m_strDataPathName;
2476 strErr =
"line " + to_string(nLine) +
": switch for beach erosion/deposition equation must be 0 or 1";
2485 strErr =
"line " + to_string(nLine) +
": invalid floating point number for median particle size of fine sediment '" + strRH +
"' in " +
m_strDataPathName;
2492 strErr =
"line " + to_string(nLine) +
": median particle size of fine sediment must be > 0";
2504 strErr =
"line " + to_string(nLine) +
": invalid floating point number for median particle size of sand sediment '" + strRH +
"' in " +
m_strDataPathName;
2511 strErr =
"line " + to_string(nLine) +
": median particle size of sand sediment must be > 0";
2523 strErr =
"line " + to_string(nLine) +
": invalid floating point number for median particle size of coarse sediment '" + strRH +
"' in " +
m_strDataPathName;
2530 strErr =
"line " + to_string(nLine) +
": median particle size of coarse sediment must be > 0";
2545 strErr =
"line " + to_string(nLine) +
": invalid floating point number for density of beach sediment '" + strRH +
"' in " +
m_strDataPathName;
2552 strErr =
"line " + to_string(nLine) +
": density of beach sediment must be > 0";
2564 strErr =
"line " + to_string(nLine) +
": invalid floating point number for porosity of beach sediment '" + strRH +
"' in " +
m_strDataPathName;
2571 strErr =
"line " + to_string(nLine) +
": porosity of beach sediment must be > 0";
2580 strErr =
"line " + to_string(nLine) +
": invalid floating point number for erodibility of fine-sized sediment '" + strRH +
"' in " +
m_strDataPathName;
2587 strErr =
"line " + to_string(nLine) +
": relative erodibility of fine-sized sediment must be between 0 and 1";
2595 strErr =
"line " + to_string(nLine) +
": invalid floating point number for erodibility of sand-sized sediment '" + strRH +
"' in " +
m_strDataPathName;
2602 strErr =
"line " + to_string(nLine) +
": relative erodibility of sand-sized sediment must be between 0 and 1";
2610 strErr =
"line " + to_string(nLine) +
": invalid floating point number for erodibility of coarse-sized sediment '" + strRH +
"' in " +
m_strDataPathName;
2618 strErr =
"line " + to_string(nLine) +
": relative erodibility of coarse-sized sediment must be between 0 and 1";
2623 strErr =
"line " + to_string(nLine) +
": must have at least one non-zero erodibility value";
2634 strErr =
"line " + to_string(nLine) +
": invalid floating point number for transport parameter KLS of CERC equation '" + strRH +
"' in " +
m_strDataPathName;
2638 m_dKLS = strtod(strRH.c_str(), NULL);
2645 strErr =
"line " + to_string(nLine) +
": transport parameter KLS of CERC equation must be > 0";
2657 strErr =
"line " + to_string(nLine) +
": invalid floating point number for transport parameter of Kamphuis equation '" + strRH +
"' in " +
m_strDataPathName;
2664 strErr =
"line " + to_string(nLine) +
": transport parameter of Kamphuis equation must be > 0";
2676 strErr =
"line " + to_string(nLine) +
": invalid floating point number for Dean profile start height above SWL '" + strRH +
"' in " +
m_strDataPathName;
2683 strErr =
"line " + to_string(nLine) +
": Berm height (Dean profile start height above SWL) must be >= 0";
2696 if (strRH.find(
'y') != string::npos)
2709 strErr =
"line " + to_string(nLine) +
": invalid floating point number for cliff resistance to erosion '" + strRH +
"' in " +
m_strDataPathName;
2716 strErr =
"line " + to_string(nLine) +
": cliff resistance to erosion must be > 0";
2728 strErr =
"line " + to_string(nLine) +
": invalid floating point number for cliff notch overhang at collapse '" + strRH +
"' in " +
m_strDataPathName;
2735 strErr =
"line " + to_string(nLine) +
": cliff notch overhang at collapse must be > 0";
2747 strErr =
"line " + to_string(nLine) +
": cliff notch base below still water level must be > 0";
2759 strErr =
"line " + to_string(nLine) +
": invalid floating point number for scale parameter A for cliff deposition '" + strRH +
"' in " +
m_strDataPathName;
2766 strErr =
"line " + to_string(nLine) +
": scale parameter A for cliff deposition must be 0 [= auto] or greater";
2778 strErr =
"line " + to_string(nLine) +
": invalid floating point number for width of cliff collapse talus '" + strRH +
"' in " +
m_strDataPathName;
2785 strErr =
"line " + to_string(nLine) +
": planview width of cliff deposition must be > 0";
2797 strErr =
"line " + to_string(nLine) +
": invalid floating point number for planview length of cliff deposition '" + strRH +
"' in " +
m_strDataPathName;
2804 strErr =
"line " + to_string(nLine) +
": planview length of cliff deposition must be > 0";
2816 strErr =
"line " + to_string(nLine) +
": invalid floating point number for height of cliff collapse (as a fraction of cliff elevation) '" + strRH +
"' in " +
m_strDataPathName;
2823 strErr =
"line " + to_string(nLine) +
": minimum height of cliff collapse (as a fraction of cliff elevation) must be >= 0";
2833 if (strRH.find(
'y') != string::npos)
2883 strErr =
"line " + to_string(nLine) +
": unknown code '" + strRH +
"' in list of riverine flooding output codes";
2888 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";
2903 strErr =
"line " + to_string(nLine) +
": invalid code for run-up equation used in simulating floods";
2916 if (strRH.find(
'y') != string::npos)
2952 strErr =
"line " + to_string(nLine) +
": path of location points file must not be empty if simulating floods";
2961 if (strRH.find(
'y') != string::npos)
3002 if (strRH.find(
'p') != string::npos)
3005 else if (strRH.find(
'c') != string::npos)
3008 else if (strRH.find(
'l') != string::npos)
3012 strErr =
"line " + to_string(nLine) +
": Sediment input type must be P, C, or L";
3023 strErr =
"line " + to_string(nLine) +
": filename missing for sediment input";
3054 strErr =
"line " + to_string(nLine) +
": invalid floating point number for gravitational acceleration '" + strRH +
"' in " +
m_strDataPathName;
3058 m_dG = strtod(strRH.c_str(), NULL);
3061 strErr =
"line " + to_string(nLine) +
": gravitational acceleration must be > 0";
3073 strErr =
"line " + to_string(nLine) +
": spacing of coastline normals must be > 0";
3081 strErr =
"line " + to_string(nLine) +
": invalid floating point number for random factor for spacing of coastline normals '" + strRH +
"' in " +
m_strDataPathName;
3088 strErr =
"line " + to_string(nLine) +
": random factor for spacing of coastline normals must be >= 0";
3091 strErr =
"line " + to_string(nLine) +
": random factor for spacing of coastline normals must be < 1";
3099 strErr =
"line " + to_string(nLine) +
": invalid floating point number for length of coastline normals '" + strRH +
"' in " +
m_strDataPathName;
3106 strErr =
"line " + to_string(nLine) +
": length of coastline normals must be > 0";
3114 strErr =
"line " + to_string(nLine) +
": invalid floating point number for start depth for wave calcs '" + strRH +
"' in " +
m_strDataPathName;
3121 strErr =
"line " + to_string(nLine) +
": start depth for wave calcs must be > 0";
3132 if (strRH.find(
'y') != string::npos)
3138 strErr =
"line " + to_string(nLine) +
": cannot save profiile data if not simulating shore platform erosion";
3153 for (
unsigned int j = 0; j < VstrTmp.size(); j++)
3155 VstrTmp[j] =
strTrim(&VstrTmp[j]);
3159 strErr =
"line " + to_string(nLine) +
": invalid integer for profile to be saved '" + VstrTmp[j] +
"' in " +
m_strDataPathName;
3163 int const nTmp = stoi(VstrTmp[j]);
3167 strErr =
"line " + to_string(nLine) +
": Profile number for saving must be >= 0";
3183 for (
unsigned int j = 0; j < VstrTmp.size(); j++)
3185 VstrTmp[j] =
strTrim(&VstrTmp[j]);
3186 unsigned long const ulTmp = atol(VstrTmp[j].c_str());
3190 strErr =
"line " + to_string(nLine) +
": Timestep for profile saves must >= 1";
3206 if (strRH.find(
'y') != string::npos)
3217 if (strRH.find(
'y') != string::npos)
3227 strErr += to_string(nLine);
3228 strErr +=
": invalid integer for size of moving window for coastline curvature calculation '";
3241 strErr += to_string(nLine);
3242 strErr +=
": size of moving window for coastline curvature calculation (must be > 0 and odd)";
3252 strErr += to_string(nLine);
3253 strErr +=
": invalid integer for cliff edge smoothing algorithm '";
3264 strErr =
"line " + to_string(nLine) +
3265 ": cliff edge smoothing algorithm";
3273 strErr =
"line " + to_string(nLine) +
3274 ": invalid integer for cliff edge smoothing window '" +
3282 strErr =
"line " + to_string(nLine) +
3283 ": size of cliff edge smoothing window (must be > 0 and odd)";
3291 strErr =
"line " + to_string(nLine) +
3292 ": invalid integer for Savitzky-Golay polynomial for cliff edge smoothing '" +
3301 strErr =
"line " + to_string(nLine) +
": order of Savitzky-Golay polynomial for cliff edge smoothing (must be 2, 4 or 6)";
3309 strErr =
"line " + to_string(nLine) +
": invalid number for cliff slope limit '" + strRH +
"' in " +
m_strDataPathName;
3316 strErr =
"line " + to_string(nLine) +
3317 ": cliff slope limit must be > 0";
3323 if (! strErr.empty())
3326 cerr << endl <<
ERR << strErr <<
".\nPlease edit " <<
m_strDataPathName <<
" and change this line:" << endl;
3327 cerr <<
"'" << strRec <<
"'" << endl << endl;
3338 bool bNoRasterFiles =
true;
3341 bNoRasterFiles =
false;
3346 bNoRasterFiles =
false;
3352 cerr <<
ERR <<
"at least one raster GIS file is needed" << endl;
3371 if (! InStream.is_open())
3383 while (getline(InStream, strRec))
3391 if ((strRec.empty()) || (strRec[0] ==
QUOTE1) || (strRec[0] ==
QUOTE2))
3397 cerr <<
ERR <<
"invalid floating point number for tide data '" << strRec <<
"' on line " << nLine <<
" of " <<
m_strTideDataFile << endl;
3428 if (! InStream.is_open())
3437 int nExpected = 0, nRead = 0;
3441 InStream >> nExpected;
3444 vector<double> VdDepthOverDB;
3445 vector<double> VdErosionPotential;
3446 vector<double> VdErosionPotentialFirstDeriv;
3449 while (getline(InStream, strRec))
3457 if ((strRec.empty()) || (strRec[0] ==
QUOTE1) || (strRec[0] ==
QUOTE2))
3466 for (
unsigned int i = 0; i < strTmp.size(); i++)
3469 strTmp[i] =
strTrim(&strTmp[i]);
3474 cerr <<
ERR <<
"on line " + to_string(nLine) +
" invalid floating point number for Erosion Potential Shape data '" << strTmp[i] <<
"' in " <<
m_strSCAPEShapeFunctionFile << endl;
3480 VdDepthOverDB.push_back(strtod(strTmp[0].c_str(), NULL));
3481 VdErosionPotential.push_back(strtod(strTmp[1].c_str(), NULL));
3482 VdErosionPotentialFirstDeriv.push_back(strtod(strTmp[2].c_str(), NULL));
3494 if (nExpected != nRead)
3513 cout <<
ERR <<
"line " + to_string(nLine) +
" in " <<
m_strSCAPEShapeFunctionFile <<
": erosion potential function is unbounded for high values of depth over DB" << endl;
3532 if (!InStream.is_open())
3541 int nExpectedStations = 0;
3543 int nTimeStepsRead = 0;
3544 string strRec, strErr;
3547 while (getline(InStream, strRec))
3555 if ((!strRec.empty()) && (strRec[0] !=
QUOTE1) && (strRec[0] !=
QUOTE2))
3564 size_t nPos = strRec.find(
COLON);
3566 if (nPos == string::npos)
3570 <<
"'" << strRec <<
"'" << endl;
3574 if (nPos == strRec.size() - 1)
3578 <<
"'" << strRec <<
"'" << endl;
3583 string strRH = strRec.substr(nPos + 1);
3589 nPos = strRH.rfind(
QUOTE1);
3591 if (nPos != string::npos)
3594 nPos = strRH.rfind(
QUOTE2);
3596 if (nPos != string::npos)
3610 vector<string> VstrTmp;
3619 if (VstrTmp.size() < 2)
3621 strErr =
"line " + to_string(nLine) +
": must have both date and time for start of data in";
3626 if (!
bParseTime(&VstrTmp[0], nHour, nMin, nSec))
3628 strErr =
"line " + to_string(nLine) +
": could not understand start time for data";
3633 if (!
bParseDate(&VstrTmp[1], nDay, nMonth, nYear))
3635 strErr =
"line " + to_string(nLine) +
": could not understand start date for data";
3647 strErr =
"line " + to_string(nLine) +
": start time and date for wave time series data differs from simulation start time and date,";
3661 strErr =
"line " + to_string(nLine) +
": unknown units for timestep";
3666 nPos = strRH.rfind(
SPACE);
3668 if (nPos == string::npos)
3670 strErr =
"line " + to_string(nLine) +
": format of timestep line";
3683 strErr =
"line " + to_string(nLine) +
": invalid floating point number for timestep";
3687 dThisIter = strtod(strRH.c_str(), NULL) * dMult;
3690 strErr =
"line " + to_string(nLine) +
": timestep must be > 0";
3693 strErr =
"line " + to_string(nLine) +
": timestep must be the same as the simulation timestep";
3702 strErr =
"line " + to_string(nLine) +
": invalid integer for number of wave stations '" + strRH +
"' in " +
m_strDeepWaterWavesInputFile;
3706 nExpectedStations = stoi(strRH);
3709 if (nExpectedStations != nWaveStations)
3712 strErr =
"line " + to_string(nLine) +
": number of wave stations in " +
m_strDeepWaterWaveStationsShapefile +
" is " + to_string(nWaveStations) +
" but we have " + to_string(nExpectedStations) +
" stations";
3733 strErr =
"line " + to_string(nLine) +
": must have values for at least one timestep";
3749 for (
unsigned int i = 0; i < VstrTmp.size(); i++)
3752 VstrTmp[i] =
strTrim(&VstrTmp[i]);
3757 strErr =
"line " + to_string(nLine) +
": invalid floating point number for deep water wave value '" + VstrTmp[i] +
"' in " +
m_strDeepWaterWavesInputFile;
3765 for (
int i = 0; i < nExpectedStations; i++)
3784 if (!strErr.empty())
3788 <<
"'" << strRec <<
"'" << endl;
3831 for (
int j = 0; j < nExpectedStations; j++)
3846 cout <<
NOTE << strTmp;
3864 if (!InStream.is_open())
3874 string strRec, strErr;
3877 while (getline(InStream, strRec))
3885 if ((!strRec.empty()) && (strRec[0] !=
QUOTE1) && (strRec[0] !=
QUOTE2))
3894 unsigned int nTarget = 7;
3899 if (VstrTmp.size() < nTarget)
3901 strErr =
"line " + to_string(nLine) +
": too few data items on data line '" + to_string(nRead) +
"' in " +
m_strSedimentInputEventFile;
3908 strErr =
"line " + to_string(nLine) +
": invalid integer for Location ID of sediment input event '" + VstrTmp[0] +
"' in " +
m_strSedimentInputEventFile;
3912 int const nID = stoi(
strTrim(&VstrTmp[0]));
3919 strErr =
"line " + to_string(nLine) +
": invalid Location ID '" + to_string(nID) +
"' for sediment input event location event in " +
m_strSedimentInputEventFile;
3928 strErr =
"line " + to_string(nLine) +
": invalid time and/or date '" + VstrTmp[1] +
"' for sediment input event in " +
m_strSedimentInputEventFile;
3935 strErr =
"line " + to_string(nLine) +
": invalid floating point number '" + VstrTmp[2] +
"' for fine sediment volume for sediment input event in " +
m_strSedimentInputEventFile;
3939 double const dFineSedVol = stod(
strTrim(&VstrTmp[2]));
3941 if (dFineSedVol < 0)
3943 strErr =
"line " + to_string(nLine) +
": negative number '" + to_string(dFineSedVol) +
"' for fine sediment volume for sediment input event in " +
m_strSedimentInputEventFile;
3947 if (dFineSedVol > 0)
3953 strErr =
"line " + to_string(nLine) +
": invalid floating point number '" + VstrTmp[3] +
"' for sand-sized sediment volume for sediment input event in " +
m_strSedimentInputEventFile;
3957 double const dSandSedVol = stod(
strTrim(&VstrTmp[3]));
3959 if (dSandSedVol < 0)
3961 strErr =
"line " + to_string(nLine) +
": negative number '" + to_string(dSandSedVol) +
"' for sand-sized sediment volume for sediment input event in " +
m_strSedimentInputEventFile;
3965 if (dSandSedVol > 0)
3971 strErr =
"line " + to_string(nLine) +
": invalid floating point number '" + VstrTmp[4] +
"' for coarse sediment volume for sediment input event in " +
m_strSedimentInputEventFile;
3975 double const dCoarseSedVol = stod(
strTrim(&VstrTmp[4]));
3977 if (dCoarseSedVol < 0)
3979 strErr =
"line " + to_string(nLine) +
": negative number '" + to_string(dCoarseSedVol) +
"' for coarse sediment volume of sediment input event in " +
m_strSedimentInputEventFile;
3983 if (dCoarseSedVol > 0)
3996 strErr =
"line " + to_string(nLine) +
": invalid floating point number '" + VstrTmp[5] +
"' for coast-normal length of sediment input event in " +
m_strSedimentInputEventFile;
4000 dLen = stod(
strTrim(&VstrTmp[5]));
4004 strErr =
"line " + to_string(nLine) +
": coast-normal length of the sediment block '" + to_string(dLen) +
"' must be > 0 in " +
m_strSedimentInputEventFile;
4011 strErr =
"line " + to_string(nLine) +
": invalid floating point number '" + VstrTmp[6] +
"' for along-coast width of sediment input event in " +
m_strSedimentInputEventFile;
4015 dWidth = stod(
strTrim(&VstrTmp[6]));
4019 strErr =
"line " + to_string(nLine) +
": along-coast width (m) of the sediment block '" + to_string(dWidth) +
"' must be > 0 in " +
m_strSedimentInputEventFile;
4047 if (!strErr.empty())
4051 <<
"'" << 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.
vector< CSedInputEvent * > m_pVSedInputEvent
Sediment input events.
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?
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....