51using std::stringstream;
58#include <cpl_string.h>
76 CPLSetConfigOption(
"GDAL_NUM_THREADS",
"ALL_CPUS");
78 CPLSetConfigOption(
"GDAL_NUM_THREADS",
"4");
82 CPLSetConfigOption(
"GDAL_CACHEMAX",
84 CPLSetConfigOption(
"GDAL_DISABLE_READDIR_ON_OPEN",
86 CPLSetConfigOption(
"VSI_CACHE",
"TRUE");
87 CPLSetConfigOption(
"VSI_CACHE_SIZE",
"512MB");
90 CPLSetConfigOption(
"GDAL_TIFF_INTERNAL_MASK_TO_8BIT",
"YES");
91 CPLSetConfigOption(
"GDAL_RASTERIO_RESAMPLING",
95 CPLSetConfigOption(
"GDAL_GRID_MAX_POINTS_PER_QUADTREE_LEAF",
"1024");
97 CPLSetConfigOption(
"GDAL_GRID_POINT_COUNT_THRESHOLD",
101 CPLSetConfigOption(
"GDAL_DATASET_CACHE_SIZE",
"64");
104 CPLSetConfigOption(
"GDAL_TIFF_OVR_BLOCKSIZE",
108 CPLSetConfigOption(
"CPL_VSIL_USE_TEMP_FILE_FOR_RANDOM_WRITE",
"YES");
125 static bool bGDALInitialized =
false;
127 if (! bGDALInitialized)
130 bGDALInitialized =
true;
136 if (NULL == pGDALDataset)
171 if ((strTmp.find(
"meter") == string::npos) && (strTmp.find(
"metre") == string::npos))
220 if (!
bFPIsEqual(dCellSideX, dCellSideY, 1e-2))
246 GDALRasterBand *pGDALBand = pGDALDataset->GetRasterBand(1);
247 int nBlockXSize = 0, nBlockYSize = 0;
248 pGDALBand->GetBlockSize(&nBlockXSize, &nBlockYSize);
252 string const strUnits = pGDALBand->GetUnitType();
254 if ((!strUnits.empty()) && (strUnits.find(
'm') == string::npos))
262 CPLPushErrorHandler(CPLQuietErrorHandler);
263 double const dMissingValue = pGDALBand->GetNoDataValue();
264 CPLPopErrorHandler();
281 if (NULL == pdScanline)
284 cerr <<
ERR <<
"cannot allocate memory for " <<
m_nXGridSize <<
" x 1D array" << endl;
292 if (CE_Failure == pGDALBand->RasterIO(GF_Read, 0, j,
m_nXGridSize, 1, pdScanline,
m_nXGridSize, 1, GDT_Float64, 0, 0, NULL))
302 double dTmp = pdScanline[i];
312 GDALClose(pGDALDataset);
331 vector<CGeom2DIPoint> VPtiBoundingBoxCorner;
341 if (!
m_pRasterGrid->m_Cell[nX][nY].bBasementElevIsMissingValue()) {
343 VPtiBoundingBoxCorner.push_back(PtiTmp);
366 if (!
m_pRasterGrid->m_Cell[nX][nY].bBasementElevIsMissingValue()) {
368 VPtiBoundingBoxCorner.push_back(PtiTmp);
391 if (!
m_pRasterGrid->m_Cell[nX][nY].bBasementElevIsMissingValue()) {
393 VPtiBoundingBoxCorner.push_back(PtiTmp);
416 if (!
m_pRasterGrid->m_Cell[nX][nY].bBasementElevIsMissingValue()) {
418 VPtiBoundingBoxCorner.push_back(PtiTmp);
436 for (
int nX = VPtiBoundingBoxCorner[0].nGetX();
437 nX <= VPtiBoundingBoxCorner[1].nGetX(); nX++) {
440 for (
int nY = VPtiBoundingBoxCorner[0].nGetY(); nY <
m_nYGridSize; nY++) {
441 if (
m_pRasterGrid->m_Cell[nX][nY].bBasementElevIsMissingValue()) {
460 <<
": could not find a bounding box edge cell for grid column "
468 for (
int nY = VPtiBoundingBoxCorner[1].nGetY();
469 nY <= VPtiBoundingBoxCorner[2].nGetY(); nY++) {
472 for (
int nX = VPtiBoundingBoxCorner[1].nGetX(); nX >= 0; nX--) {
473 if (
m_pRasterGrid->m_Cell[nX][nY].bBasementElevIsMissingValue()) {
491 <<
": could not find a bounding box edge cell for grid row "
499 for (
int nX = VPtiBoundingBoxCorner[2].nGetX();
500 nX >= VPtiBoundingBoxCorner[3].nGetX(); nX--) {
503 for (
int nY = VPtiBoundingBoxCorner[2].nGetY(); nY >= 0; nY--) {
504 if (
m_pRasterGrid->m_Cell[nX][nY].bBasementElevIsMissingValue()) {
523 <<
": could not find a bounding box edge cell for grid column "
531 for (
int nY = VPtiBoundingBoxCorner[3].nGetY();
532 nY >= VPtiBoundingBoxCorner[0].nGetY(); nY--) {
533 for (
int nX = VPtiBoundingBoxCorner[3].nGetX(); nX <
m_nXGridSize - 1; nX++)
537 if (
m_pRasterGrid->m_Cell[nX][nY].bBasementElevIsMissingValue()) {
555 <<
": could not find a bounding box edge cell for grid row "
570 string strDriverCode;
571 string strDriverDesc;
572 string strProjection;
628 GDALDataset *pGDALDataset =
629 static_cast<GDALDataset *
>(GDALOpen(strGISFile.c_str(), GA_ReadOnly));
631 if (NULL == pGDALDataset) {
634 cerr <<
ERR <<
"cannot open " << strGISFile
635 <<
" for input: " << CPLGetLastErrorMsg() << endl;
640 strDriverCode = pGDALDataset->GetDriver()->GetDescription();
641 strDriverDesc = pGDALDataset->GetDriver()->GetMetadataItem(GDAL_DMD_LONGNAME);
642 strProjection = pGDALDataset->GetProjectionRef();
645 double dGeoTransform[6];
646 if (CE_Failure == pGDALDataset->GetGeoTransform(dGeoTransform)) {
649 cerr <<
ERR << CPLGetLastErrorMsg() <<
" in " << strGISFile << endl;
654 int const nTmpXSize = pGDALDataset->GetRasterXSize();
657 cerr <<
ERR <<
"different number of columns in " << strGISFile <<
" ("
663 int const nTmpYSize = pGDALDataset->GetRasterYSize();
666 cerr <<
ERR <<
"different number of rows in " << strGISFile <<
" ("
675 cerr <<
ERR <<
"different min x values in " << strGISFile <<
" (" << dTmp
684 cerr <<
ERR <<
"different min y values in " << strGISFile <<
" (" << dTmp
690 double const dTmpResX =
tAbs(dGeoTransform[1]);
694 cerr <<
ERR <<
"cell size in X direction (" << dTmpResX <<
") in "
695 << strGISFile <<
" differs from cell size in of basement DEM ("
700 double const dTmpResY =
tAbs(dGeoTransform[5]);
704 cerr <<
ERR <<
"cell size in Y direction (" << dTmpResY <<
") in "
705 << strGISFile <<
" differs from cell size of basement DEM ("
711 GDALRasterBand *pGDALBand = pGDALDataset->GetRasterBand(
713 int nBlockXSize = 0, nBlockYSize = 0;
714 pGDALBand->GetBlockSize(&nBlockXSize, &nBlockYSize);
715 strDataType = GDALGetDataTypeName(pGDALBand->GetRasterDataType());
800 string const strTmp =
strToLower(&strDataType);
801 if (strTmp.find(
"int") != string::npos) {
803 CPLPushErrorHandler(CPLQuietErrorHandler);
806 pGDALBand->GetNoDataValue());
807 CPLPopErrorHandler();
811 <<
" " <<
NOTE <<
"NODATA value in " << strGISFile <<
" is "
813 <<
"\n instead using CoatalME's default integer NODATA value "
818 CPLPushErrorHandler(CPLQuietErrorHandler);
821 pGDALBand->GetNoDataValue();
822 CPLPopErrorHandler();
825 cerr <<
" " <<
NOTE <<
"NODATA value in " << strGISFile <<
" is "
827 <<
"\n instead using CoastalME's default floating-point "
835 if (NULL == pdScanline) {
838 <<
" x 1D array" << endl;
847 if (CE_Failure == pGDALBand->RasterIO(GF_Read, 0, nY,
m_nXGridSize, 1,
849 GDT_Float64, 0, 0, NULL)) {
851 cerr <<
ERR << CPLGetLastErrorMsg() <<
" in " << strGISFile << endl;
863 nTmp =
static_cast<int>(pdScanline[nX]);
870 m_pRasterGrid->m_Cell[nX][nY].pGetLandform()->SetLFCategory(nTmp);
875 nTmp =
static_cast<int>(pdScanline[nX]);
883 m_pRasterGrid->m_Cell[nX][nY].pGetLandform()->SetLFCategory(nTmp);
888 dTmp = pdScanline[nX];
901 dTmp = pdScanline[nX];
914 dTmp = pdScanline[nX];
923 .pGetLayerAboveBasement(nLayer)
924 ->pGetUnconsolidatedSediment()
925 ->SetFineDepth(dTmp);
930 dTmp = pdScanline[nX];
939 .pGetLayerAboveBasement(nLayer)
940 ->pGetUnconsolidatedSediment()
941 ->SetSandDepth(dTmp);
946 dTmp = pdScanline[nX];
955 .pGetLayerAboveBasement(nLayer)
956 ->pGetUnconsolidatedSediment()
957 ->SetCoarseDepth(dTmp);
962 dTmp = pdScanline[nX];
971 .pGetLayerAboveBasement(nLayer)
972 ->pGetConsolidatedSediment()
973 ->SetFineDepth(dTmp);
978 dTmp = pdScanline[nX];
987 .pGetLayerAboveBasement(nLayer)
988 ->pGetConsolidatedSediment()
989 ->SetSandDepth(dTmp);
994 dTmp = pdScanline[nX];
1003 .pGetLayerAboveBasement(nLayer)
1004 ->pGetConsolidatedSediment()
1005 ->SetCoarseDepth(dTmp);
1012 GDALClose(pGDALDataset);
1015 delete[] pdScanline;
1018 cerr <<
WARN << nMissing <<
" missing values in " << strGISFile << endl;
1019 LogStream <<
WARN << nMissing <<
" missing values in " << strGISFile
1030 string const *strPlotTitle,
1031 int const nLayer,
double const dElev) {
1032 bool bIsInteger =
false;
1033 bool bIsUnsignedLong =
false;
1037 string strLayer =
"_layer_";
1039 stringstream ststrTmp;
1041 strLayer.append(to_string(nLayer + 1));
1043 switch (nDataItem) {
1150 strFilePathName.append(strLayer);
1155 strFilePathName.append(strLayer);
1160 strFilePathName.append(strLayer);
1165 strFilePathName.append(strLayer);
1170 strFilePathName.append(strLayer);
1175 strFilePathName.append(strLayer);
1218 case (RASTER_PLOT_CLIFF_COLLAPSE_TIMESTEP):
1272 ststrTmp <<
"_" << dElev <<
"_";
1273 strFilePathName.append(ststrTmp.str());
1342 strFilePathName.append(
"_");
1352 strFilePathName.append(ststrTmp.str());
1356 strFilePathName.append(
".");
1364 GDALDriver *pDriver;
1365 GDALDataset *pDataSet;
1369 pDriver = GetGDALDriverManager()->GetDriverByName(
1376 }
else if (bIsUnsignedLong) {
1387 pDataSet = pDriver->Create(strFilePathName.c_str(),
m_nXGridSize,
1392 if (NULL == pDataSet) {
1395 <<
" file named " << strFilePathName << endl;
1402 pDriver = GetGDALDriverManager()->GetDriverByName(
"MEM");
1405 if (NULL == pDataSet)
1409 << CPLGetLastErrorMsg() << endl;
1415 CPLPushErrorHandler(CPLQuietErrorHandler);
1417 CPLPopErrorHandler();
1425 if (NULL == pdRaster)
1432 bool bScaleOutput =
false;
1433 double dRangeScale = 0;
1434 double dDataMin = 0;
1438 double dDataMax = 0;
1443 double const dDataRange = dDataMax - dDataMin;
1447 dRangeScale = dWriteRange / dDataRange;
1451 bScaleOutput =
true;
1472 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetAllSedTopElevIncTalus();
1488 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetSlopeForCliffToe();
1492 dTmp =
static_cast<double>(
m_pRasterGrid->m_Cell[nX][nY].bIsCliffToe());
1532 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetBeachProtectionFactor();
1541 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetPotentialPlatformErosion();
1545 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetActualPlatformErosion();
1549 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotPotentialPlatformErosion();
1553 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotActualPlatformErosion();
1557 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetPotentialBeachErosion();
1561 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetActualBeachErosion();
1565 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotPotentialBeachErosion();
1569 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotActualBeachErosion();
1577 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotBeachDeposition();
1581 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetSuspendedSediment();
1589 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetUnconsolidatedSediment()->dGetFineDepth();
1593 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetUnconsolidatedSediment()->dGetSandDepth();
1597 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetUnconsolidatedSediment()->dGetCoarseDepth();
1601 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetConsolidatedSediment()->dGetFineDepth();
1605 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetConsolidatedSediment()->dGetSandDepth();
1609 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetConsolidatedSediment()->dGetCoarseDepth();
1613 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetThisIterCliffCollapseErosionFine();
1617 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetThisIterCliffCollapseErosionSand();
1621 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetThisIterCliffCollapseErosionCoarse();
1625 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotCliffCollapseFine();
1629 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotCliffCollapseSand();
1633 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotCliffCollapseCoarse();
1637 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetThisIterCliffCollapseSandTalusDeposition();
1641 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetThisIterCliffCollapseCoarseTalusDeposition();
1645 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotSandTalusDeposition();
1649 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotCoarseTalusDeposition();
1653 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLandform()->dGetCliffNotchIncisionDepth();
1657 case (RASTER_PLOT_CLIFF_COLLAPSE_TIMESTEP):
1658 dTmp =
static_cast<double>(
m_pRasterGrid->m_Cell[nX][nY].pGetLandform()->ulGetCliffCollapseTimestep());
1659 bIsUnsignedLong =
true;
1664 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetInterventionHeight();
1669 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetCellDeepWaterWaveAngle();
1676 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetCellDeepWaterWaveHeight();
1683 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetCellDeepWaterWavePeriod();
1690 nPolyCoast =
m_pRasterGrid->m_Cell[nX][nY].nGetPolygonCoastID();
1697 dTmp =
m_VCoast[nPolyCoast].pGetPolygon(nPoly)->dGetBeachDepositionAndSuspensionAllUncons() *
m_dCellArea;
1706 dTmp =
m_pRasterGrid->m_Cell[nX][nY].bPotentialPlatformErosion();
1716 nTopLayer =
m_pRasterGrid->m_Cell[nX][nY].nGetTopNonZeroLayerAboveBasement();
1727 dTmp =
m_pRasterGrid->m_Cell[nX][nY].nGetLayerAtElev(dElev);
1731 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLandform()->nGetLFCategory();
1736 dTmp =
m_pRasterGrid->m_Cell[nX][nY].nGetInterventionClass();
1741 dTmp = (
m_pRasterGrid->m_Cell[nX][nY].bIsCoastline() ? 1 : 0);
1751 dTmp = (
m_pRasterGrid->m_Cell[nX][nY].bIsInActiveZone() ? 1 : 0);
1760 dTmp =
m_pRasterGrid->m_Cell[nX][nY].nGetShadowZoneNumber();
1765 dTmp =
m_pRasterGrid->m_Cell[nX][nY].nGetDownDriftZoneNumber();
1771 nPolyCoast =
m_pRasterGrid->m_Cell[nX][nY].nGetPolygonCoastID();
1778 if (
m_VCoast[nPolyCoast].pGetPolygon(nPoly)->bDownCoastThisIter())
1786 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nTopLayer)->pGetUnconsolidatedSediment()->dGetTotAllSedimentInputDepth();
1790 dTmp = (
m_pRasterGrid->m_Cell[nX][nY].bIsFloodBySetupSurge() ? 1 : 0);
1794 dTmp = (
m_pRasterGrid->m_Cell[nX][nY].bIsFloodBySetupSurgeRunup() ? 1 : 0);
1798 dTmp = (
m_pRasterGrid->m_Cell[nX][nY].bIsFloodline() ? 1 : 0);
1812 pdRaster[n++] = dTmp;
1817 GDALRasterBand *pBand = pDataSet->GetRasterBand(1);
1822 else if (bIsUnsignedLong)
1879 strUnits =
"degrees";
1885 strUnits =
"cumecs";
1896 case (RASTER_PLOT_CLIFF_COLLAPSE_TIMESTEP):
1915 CPLPushErrorHandler(CPLQuietErrorHandler);
1916 pBand->SetUnitType(strUnits.c_str());
1917 CPLPopErrorHandler();
1920 CPLPushErrorHandler(CPLQuietErrorHandler);
1924 if (bIsUnsignedLong)
1929 CPLPopErrorHandler();
1932 string strDesc(*strPlotTitle);
1937 ststrTmp << dElev <<
"m, ";
1938 strDesc.append(ststrTmp.str());
1941 strDesc.append(
" at ");
1945 pBand->SetDescription(strDesc.c_str());
1948 char **papszCategoryNames = NULL;
1953 papszCategoryNames = CSLAddString(papszCategoryNames,
"Basement");
1954 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 0");
1955 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 1");
1956 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 2");
1957 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 3");
1958 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 4");
1959 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 5");
1960 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 6");
1961 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 7");
1962 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 8");
1963 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 9");
1967 papszCategoryNames = CSLAddString(papszCategoryNames,
"None");
1968 papszCategoryNames = CSLAddString(papszCategoryNames,
"Hinterland");
1969 papszCategoryNames = CSLAddString(papszCategoryNames,
"Sea");
1970 papszCategoryNames = CSLAddString(papszCategoryNames,
"Cliff");
1971 papszCategoryNames = CSLAddString(papszCategoryNames,
"Drift");
1972 papszCategoryNames = CSLAddString(papszCategoryNames,
"Intervention");
1974 papszCategoryNames = CSLAddString(papszCategoryNames,
"Cliff on Coastline");
1975 papszCategoryNames = CSLAddString(papszCategoryNames,
"Inland Cliff");
1977 papszCategoryNames = CSLAddString(papszCategoryNames,
"Mixed Drift");
1978 papszCategoryNames = CSLAddString(papszCategoryNames,
"Talus");
1979 papszCategoryNames = CSLAddString(papszCategoryNames,
"Beach");
1980 papszCategoryNames = CSLAddString(papszCategoryNames,
"Dunes");
1984 papszCategoryNames = CSLAddString(papszCategoryNames,
"None");
1985 papszCategoryNames = CSLAddString(papszCategoryNames,
"Structural");
1986 papszCategoryNames = CSLAddString(papszCategoryNames,
"Non-Structural");
1990 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not coastline");
1991 papszCategoryNames = CSLAddString(papszCategoryNames,
"Coastline");
1995 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not coastline-normal profile");
1996 papszCategoryNames = CSLAddString(papszCategoryNames,
"Coastline-normal profile");
2000 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not in active zone");
2001 papszCategoryNames = CSLAddString(papszCategoryNames,
"In active zone");
2005 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not polygon");
2006 papszCategoryNames = CSLAddString(papszCategoryNames,
"In polygon");
2010 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not in shadow zone");
2011 papszCategoryNames = CSLAddString(papszCategoryNames,
"In shadow zone");
2015 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not in shadow downdrift zone");
2016 papszCategoryNames = CSLAddString(papszCategoryNames,
"In shadow downdrift zone");
2020 papszCategoryNames = CSLAddString(papszCategoryNames,
"Updrift movement of unconsolidated sediment ");
2021 papszCategoryNames = CSLAddString(papszCategoryNames,
"Downdrift movement of unconsolidated sediment");
2025 papszCategoryNames = CSLAddString(papszCategoryNames,
"Inundated by swl setup and surge ");
2026 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not inundated by swl setup and surge");
2030 papszCategoryNames = CSLAddString(papszCategoryNames,
"Inundated by swl setup, surge and runup ");
2031 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not inundated by swl setup, surge and runup");
2035 papszCategoryNames = CSLAddString(papszCategoryNames,
"Intersection line of inundation ");
2036 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not inundated by swl waves and runup");
2040 CPLPushErrorHandler(CPLQuietErrorHandler);
2041 pBand->SetCategoryNames(papszCategoryNames);
2042 CPLPopErrorHandler();
2046 CPLSetThreadLocalConfigOption(
"GDAL_NUM_THREADS",
"ALL_CPUS");
2048 if (CE_Failure == pBand->RasterIO(GF_Write, 0, 0,
m_nXGridSize,
m_nYGridSize, pdRaster,
m_nXGridSize,
m_nYGridSize, GDT_Float64, 0, 0, NULL))
2052 << CPLGetLastErrorMsg() << endl;
2058 double dMin, dMax, dMean, dStdDev;
2059 CPLPushErrorHandler(CPLQuietErrorHandler);
2061 pBand->ComputeStatistics(
false, &dMin, &dMax, &dMean, &dStdDev, NULL, NULL);
2062 CPLPopErrorHandler();
2065 CPLPushErrorHandler(CPLQuietErrorHandler);
2067 pBand->SetStatistics(dMin, dMax, dMean, dStdDev);
2068 CPLPopErrorHandler();
2075 GDALDriver *pOutDriver = GetGDALDriverManager()->GetDriverByName(
2077 GDALDataset *pOutDataSet =
2078 pOutDriver->CreateCopy(strFilePathName.c_str(), pDataSet,
false,
2081 if (NULL == pOutDataSet) {
2084 <<
" file named " << strFilePathName << endl
2085 << CPLGetLastErrorMsg() << endl;
2090 GDALClose(pOutDataSet);
2094 GDALClose(pDataSet);
2148 vector<TransectWaveData>
const *pVTransects,
2149 vector<double>
const *pVdDeepWaterX,
2150 vector<double>
const *pVdDeepWaterY,
2151 vector<double>
const *pVdDeepWaterHeightX,
2152 vector<double>
const *pVdDeepWaterHeightY) {
2168 int const nGridSize = nXSize * nYSize;
2171 unsigned int nPoints = 0;
2172 for (
const auto& transect : *pVTransects) {
2173 nPoints +=
static_cast<unsigned int>(transect.VdX.size());
2175 nPoints +=
static_cast<unsigned int>(pVdDeepWaterX->size());
2178 vector<double> VdOutX(nGridSize, 0);
2179 vector<double> VdOutY(nGridSize, 0);
2186 std::vector<Point2D> points;
2187 std::vector<double> VdHeightX;
2188 std::vector<double> VdHeightY;
2190 points.reserve(nPoints);
2191 VdHeightX.reserve(nPoints);
2192 VdHeightY.reserve(nPoints);
2195 for (
const auto& transect : *pVTransects) {
2196 for (
size_t i = 0; i < transect.VdX.size(); i++) {
2197 points.emplace_back(transect.VdX[i], transect.VdY[i]);
2198 VdHeightX.push_back(transect.VdHeightX[i]);
2199 VdHeightY.push_back(transect.VdHeightY[i]);
2204 for (
size_t i = 0; i < pVdDeepWaterX->size(); i++) {
2205 points.emplace_back((*pVdDeepWaterX)[i], (*pVdDeepWaterY)[i]);
2206 VdHeightX.push_back((*pVdDeepWaterHeightX)[i]);
2207 VdHeightY.push_back((*pVdDeepWaterHeightY)[i]);
2230 std::vector<Point2D> query_points;
2231 query_points.reserve(nGridSize);
2234 query_points.emplace_back(
static_cast<double>(nX),
2235 static_cast<double>(nY));
2259 for (
unsigned int n = 0; n < VdOutX.size(); n++) {
2260 if (isnan(VdOutX[n]))
2262 else if (
tAbs(VdOutX[n]) > 1e10)
2271 for (
unsigned int n = 0; n < VdOutY.size(); n++) {
2272 if (isnan(VdOutY[n]))
2274 else if (
tAbs(VdOutY[n]) > 1e10)
2297 for (
int nY = 0; nY < nYSize; nY++) {
2298 for (
int nX = 0; nX < nXSize; nX++) {
2303 .bIsInContiguousSea()) {
2306 if (
m_pRasterGrid->m_Cell[nActualX][nActualY].nGetPolygonID() ==
2314 double const dDeepWaterWaveHeight =
2316 .dGetCellDeepWaterWaveHeight();
2318 dDeepWaterWaveHeight);
2320 double const dDeepWaterWaveAngle =
2322 .dGetCellDeepWaterWaveAngle();
2324 dDeepWaterWaveAngle);
2331 double dWaveHeightX;
2332 double dWaveHeightY;
2335 if ((isnan(VdOutX[n])) ||
2337 dWaveHeightX = dXAvg;
2339 dWaveHeightX = VdOutX[n];
2342 if ((isnan(VdOutY[n])) ||
2344 dWaveHeightY = dYAvg;
2346 dWaveHeightY = VdOutY[n];
2349 double const dWaveHeight = sqrt((dWaveHeightX * dWaveHeightX) +
2350 (dWaveHeightY * dWaveHeightY));
2351 double const dWaveDir =
2352 atan2(dWaveHeightX, dWaveHeightY) * (180 /
PI);
2362 double const dSeaDepth =
2365 if ((dWaveHeight / dSeaDepth) >=
2380 n =
tMin(n,
static_cast<int>(VdOutX.size() - 1));
2394 unsigned int const nUserPoints =
2398 CPLSetThreadLocalConfigOption(
"GDAL_NUM_THREADS",
"ALL_CPUS");
2409 GDALGridInverseDistanceToAPowerOptions *pOptions =
2410 new GDALGridInverseDistanceToAPowerOptions();
2411 pOptions->dfAngle = 0;
2412 pOptions->dfAnisotropyAngle = 0;
2413 pOptions->dfAnisotropyRatio = 0;
2414 pOptions->dfPower = 2;
2415 pOptions->dfSmoothing =
2417 pOptions->dfRadius1 = 0;
2418 pOptions->dfRadius2 = 0;
2419 pOptions->nMaxPoints =
2421 pOptions->nMinPoints = 3;
2433 GDALGridContext *pContext = GDALGridContextCreate(
2434 GGA_InverseDistanceToAPower, pOptions, nUserPoints,
2438 if (pContext == NULL) {
2445 int nRet = GDALGridContextProcess(
2449 if (nRet == CE_Failure) {
2450 delete[] dHeightOut;
2456 GDALGridContextFree(pContext);
2464 pContext = GDALGridContextCreate(
2465 GGA_InverseDistanceToAPower, pOptions, nUserPoints,
2469 if (pContext == NULL) {
2470 delete[] dHeightOut;
2477 nRet = GDALGridContextProcess(
2481 if (nRet == CE_Failure) {
2482 delete[] dHeightOut;
2489 GDALGridContextFree(pContext);
2497 pContext = GDALGridContextCreate(
2498 GGA_InverseDistanceToAPower, pOptions, nUserPoints,
2502 if (pContext == NULL) {
2509 nRet = GDALGridContextProcess(
2513 if (nRet == CE_Failure) {
2514 delete[] dPeriopdOut;
2520 GDALGridContextFree(pContext);
2524 vector<double> VdHeight;
2525 vector<double> VdAngle;
2526 vector<double> VdPeriod;
2529 int nValidHeight = 0;
2530 int nValidAngle = 0;
2531 int nValidPeriod = 0;
2533 double dAvgHeight = 0;
2534 double dAvgAngle = 0;
2535 double dAvgPeriod = 0;
2539 if (isfinite(dHeightOut[n])) {
2540 VdHeight.push_back(dHeightOut[n]);
2542 dAvgHeight += dHeightOut[n];
2550 if (isfinite(dAngleOut[n])) {
2551 VdAngle.push_back(dAngleOut[n]);
2553 dAvgAngle += dAngleOut[n];
2561 if (isfinite(dPeriopdOut[n])) {
2562 VdPeriod.push_back(dPeriopdOut[n]);
2564 dAvgPeriod += dPeriopdOut[n];
2580 dAvgHeight /= nValidHeight;
2581 dAvgAngle /= nValidAngle;
2582 dAvgPeriod /= nValidPeriod;
2586 delete[] dHeightOut;
2588 delete[] dPeriopdOut;
Contains CGeom2DIPoint definitions.
Geometry class used to represent 2D point objects with integer coordinates.
int m_nLogFileDetail
The level of detail in the log file output. Can be LOG_FILE_LOW_DETAIL, LOG_FILE_MIDDLE_DETAIL,...
string m_strGDALISSDriverCode
GDAL code for the initial suspended sediment raster file.
vector< string > m_VstrInitialSandConsSedimentFile
The name of the initial sand-sized consolidated sediment GIS file.
bool bWriteRasterGISFile(int const, string const *, int const =0, double const =0)
Writes GIS raster files using GDAL, using data from the RasterGrid array.
int m_nGISMaxSaveDigits
The maximum number of digits in GIS filenames. These can be sequential, or the iteration number.
int m_nYMinBoundingBox
The minimum y value of the bounding box.
string m_strGDALISSProjection
GDAL projection string for the initial suspended sediment raster file.
string m_strInitialSuspSedimentFile
Name of initial suspended sediment file.
void GetRasterOutputMinMax(int const, double &, double &, int const, double const)
Finds the max and min values in order to scale raster output if we cannot write doubles.
vector< string > m_VstrInitialCoarseUnconsSedimentFile
The name of the initial coarse-sized unconsolidated sediment GIS file.
double m_dThisIterSWL
The still water level for this timestep (this includes tidal changes and any long-term SWL change)
string m_strGDALICDataType
GDAL data type of the initial intervention class raster file.
CGeomRasterGrid * m_pRasterGrid
Pointer to the raster grid object.
vector< string > m_VstrGDALICCDataType
GDAL data type for the initial consolidated coarse sediment GIS data.
int m_nXGridSize
The size of the grid in the x direction.
vector< double > m_VdDeepWaterWaveStationY
Y coordinate (grid CRS) for deep water wave station.
vector< string > m_VstrGDALICFDataType
GDAL data type for the initial consolidated fine sediment GIS data.
vector< string > m_VstrGDALICCDriverCode
GDAL driver code for the initial consolidated coarse sediment GIS data.
int m_nGISMissingValue
The value for integer missing values, as read from GIS input files.
int nReadRasterGISFile(int const, int const)
Reads raster GIS datafiles into the RasterGrid array.
vector< CRWCoast > m_VCoast
The coastline objects.
vector< string > m_VstrGDALIUFDataType
GDAL data type for the initial unconsolidated fine sediment GIS data.
double m_dGISMissingValue
The value for floating-point missing values, as read from GIS input files.
long m_lGDALMaxCanWrite
The maximum integer value which GDAL can write, can be UINT8_MAX, INT16_MAX, UINT16_MAX,...
double m_dSouthEastXExtCRS
The south-east x coordinate, in the external coordinate reference system (CRS)
int m_nMissingValue
Used by CoastalME for integer missing values.
int m_nYGridSize
The size of the grid in the y direction.
void InitializeGDALPerformance(void)
Initialize GDAL with performance optimizations.
vector< string > m_VstrGDALIUFProjection
GDAL projection for the initial unconsolidated fine sediment GIS data.
double m_dGeoTransform[6]
GDAL geotransformation info (see http://www.gdal.org/classGDALDataset.html)
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.
double m_dMissingValue
Used by CoastalME for floating-point missing values.
double m_dInvCellDiagonal
Inverse of m_dCellDiagonal.
string m_strGDALLDriverCode
GDAL code for the for the initial landform class raster file.
static double dKeepWithin360(double const)
Constrains the supplied angle to be within 0 and 360 degrees.
vector< string > m_VstrGDALICSDriverCode
GDAL driver code for the initial consolidated sand sediment GIS data.
unsigned long m_ulNumCells
The number of cells in the grid.
string m_strGDALISSDataType
GDAL data type for the initial suspended sediment raster file.
vector< string > m_VstrGDALIUCProjection
GDAL projection for the initial unconsolidated coarse sediment GIS data.
bool m_bGDALCanCreate
Is the selected GDAL output file format capable of writing files?
string m_strGDALLDataType
GDAL data type for the initial landform class raster file.
string m_strRasterGISOutFormat
Raster GIS output format.
bool m_bGDALOptimisations
GDAL optimisations enabled?
int m_nXMaxBoundingBox
The maximum x value of the bounding box.
unsigned long m_ulMissingValue
Used by CoastalME for unsigned long integer missing values.
double m_dNorthWestYExtCRS
The north-west y coordinate, in the external coordinate reference system (CRS)
vector< string > m_VstrGDALICSDriverDesc
GDAL driver description for the initial consolidated sand sediment GIS data.
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.
string m_strGDALBasementDEMDriverCode
GDAL code for the basement DEM raster file type.
vector< string > m_VstrGDALIUFDriverCode
GDAL driver code for the initial unconsolidated fine sediment GIS data.
unsigned long m_ulMissingValueBasementCells
The number of basement cells marked with as missing value.
string m_strInitialBasementDEMFile
Name of initial basement DEM file.
vector< double > m_VdDeepWaterWaveStationX
X coordinate (grid CRS) for deep water wave station.
double m_dBreakingWaveHeightDepthRatio
Breaking wave height-to-depth ratio.
string m_strGDALLProjection
GDAL projection string for the initial landform class raster file.
vector< string > m_VstrInitialSandUnconsSedimentFile
The name of the initial sand-sized unconsolidated sediment GIS file.
string m_strGDALIHProjection
GDAL projection string for the initial intervention height raster file.
string m_strGDALICDriverDesc
GDAL description of the initial intervention class raster file.
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_dCellDiagonal
Length of a cell's diagonal (in external CRS units)
double m_dInvCellSide
Inverse of m_dCellSide.
vector< string > m_VstrGDALICFProjection
GDAL projection for the initial consolidated fine sediment GIS data.
double m_dSimElapsed
Time simulated so far, in hours.
vector< string > m_VstrGDALICCProjection
GDAL projection for the initial consolidated coarse sediment GIS data.
int nInterpolateWavesToPolygonCells(vector< TransectWaveData > const *, vector< double > const *, vector< double > const *, vector< double > const *, vector< double > const *)
string m_strGDALLDriverDesc
GDAL description of the initial landform class raster file.
double m_dNorthWestXExtCRS
The north-west x coordinate, in the external coordinate reference system (CRS)
vector< CGeom2DIPoint > m_VEdgeCell
Edge cells.
int nInterpolateAllDeepWaterWaveValues(void)
double m_dSouthEastYExtCRS
The south-east y coordinate, in the external coordinate reference system (CRS)
bool m_bGISSaveDigitsSequential
Are the GIS save digits (which are part of each GIS file name) sequential, or are they the iteration ...
vector< string > m_VstrGDALIUSDriverDesc
GDAL driver description for the initial unconsolidated sand sediment GIS data.
vector< string > m_VstrInitialFineUnconsSedimentFile
The name of the initial fine-sized unconsolidated sediment GIS file.
string m_strOutPath
Path for all output files.
int m_nYMaxBoundingBox
The maximum y value of the bounding box.
vector< string > m_VstrGDALICFDriverDesc
GDAL driver description for the initial consolidated fine sediment GIS data.
vector< string > m_VstrGDALIUFDriverDesc
GDAL driver description for the initial unconsolidated fine sediment GIS data.
vector< string > m_VstrGDALIUSDataType
GDAL data type for the initial unconsolidated sand sediment GIS data.
int m_nGISSave
The save number for GIS files (can be sequential, or the iteration number)
string m_strInterventionClassFile
Name of intervention class file.
string m_strGDALBasementDEMDataType
GDAL data type for the basement DEM raster file.
string m_strGDALICProjection
GDAL projection string for the initial intervention class raster file.
long m_lGDALMinCanWrite
The minimum integer value which GDAL can write, can be zero, INT16_MIN, INT32_MIN.
string m_strGDALISSDriverDesc
GDAL description for the initial suspended sediment raster file.
double m_dTimeStep
The length of an iteration (a timestep) in hours.
static void AnnounceAllocateMemory(void)
Tells the user that we are now allocating memory.
int m_nXMinBoundingBox
The minimum x value of the bounding box.
vector< string > m_VstrGDALIUCDriverCode
GDAL driver code for the initial unconsolidated coarse sediment GIS data.
double m_dCellArea
Area of a cell (in external CRS units)
static string strDispTime(double const, bool const, bool const)
strDispTime returns a string formatted as h:mm:ss, given a parameter in seconds, with rounding and fr...
string m_strGDALBasementDEMDriverDesc
GDAL description of the basement DEM raster file type.
string m_strInitialLandformFile
Name of initial landform file.
string m_strInterventionHeightFile
Name of intervention height file.
vector< string > m_VstrGDALICSDataType
GDAL data type for the initial consolidated sand sediment GIS data.
bool m_bScaleRasterOutput
Scale raster output?
vector< string > m_VstrGDALICSProjection
GDAL dprojection for the initial consolidated sand sediment GIS data.
string m_strGDALRasterOutputDriverExtension
GDAL raster output driver file extension.
string m_strGDALBasementDEMProjection
GDAL projection string for the basement DEM raster file.
unsigned long m_ulIter
The number of the current iteration (time step)
vector< string > m_VstrInitialCoarseConsSedimentFile
The name of the initial coarse-sized consolidated sediment GIS file.
int nReadRasterBasementDEM(void)
Reads a raster DEM of basement elevation data to the Cell array.
string m_strGDALIHDriverCode
GDAL code for the initial intervention height raster file.
string m_strGDALICDriverCode
GDAL code for the initial intervention class raster file.
double m_dExtCRSGridArea
The area of the grid (in external CRS units)
vector< double > m_VdThisIterDeepWaterWaveStationAngle
This-iteration wave orientation at deep water wave station.
double m_dCellSide
Length of a cell side (in external CRS units)
vector< string > m_VstrGDALIUCDriverDesc
GDAL driver description for the initial unconsolidated coarse sediment GIS data.
int nMarkBoundingBoxEdgeCells(void)
string m_strGDALIHDriverDesc
GDAL description for the initial intervention height raster file.
vector< string > m_VstrGDALICCDriverDesc
GDAL driver decription for the initial consolidated coarse sediment GIS data.
string m_strGDALIHDataType
GDAL data type for the initial intervention height raster file.
vector< string > m_VstrGDALIUCDataType
GDAL data type for the initial unconsolidated coarse sediment GIS data.
GDALDataType m_GDALWriteFloatDataType
Thw data type used by GDAL for floating point operations, can be GDT_Byte, GDT_Int16,...
bool m_bGDALCanWriteFloat
Is the selected GDAL output file format capable of writing floating-point values to files?
char ** m_papszGDALRasterOptions
Options for GDAL when handling raster files.
vector< string > m_VstrGDALIUSDriverCode
GDAL driver code for the initial unconsolidated sand sediment GIS data.
vector< int > m_VEdgeCellEdge
The grid edge that each edge cell belongs to.
void Interpolate(std::vector< Point2D > const &query_points, std::vector< double > &results_x, std::vector< double > &results_y) const
This file contains global definitions for CoastalME.
int const NO_NONZERO_THICKNESS_LAYERS
int const RASTER_PLOT_POLYGON
int const RASTER_PLOT_CONS_SED_SLOPE
string const RASTER_SEA_DEPTH_NAME
string const RASTER_CLIFF_COLLAPSE_TIMESTEP_NAME
string const RASTER_SHADOW_DOWNDRIFT_ZONE_NAME
string const RASTER_POTENTIAL_BEACH_EROSION_NAME
string const RASTER_BEACH_MASK_NAME
string const RASTER_TOTAL_CLIFF_COLLAPSE_DEPOSITION_SAND_NAME
string const RASTER_POLYGON_UPDRIFT_OR_DOWNDRIFT_NAME
int const RASTER_PLOT_TOTAL_ACTUAL_BEACH_EROSION
int const RASTER_PLOT_CLIFF_COLLAPSE_DEPOSITION_SAND
int const RASTER_PLOT_BEACH_DEPOSITION
int const RASTER_PLOT_SUSPENDED_SEDIMENT
string const RASTER_FINE_CONS_NAME
string const RASTER_SLOPE_FOR_CLIFF_TOE_NAME
string const RASTER_SLICE_NAME
int const RTN_ERR_DEMFILE
int const RASTER_PLOT_FINE_UNCONSOLIDATED_SEDIMENT
string const RASTER_BEACH_DEPOSITION_NAME
int const SAND_CONS_RASTER
string const RASTER_BEACH_PROTECTION_NAME
int const RTN_ERR_MEMALLOC
int const RASTER_PLOT_INUNDATION_MASK
string const RASTER_SAND_UNCONS_NAME
int const RASTER_PLOT_ACTUAL_BEACH_EROSION
string const RASTER_INUNDATION_MASK_NAME
string const RASTER_WAVE_PERIOD_NAME
int const RASTER_PLOT_POTENTIAL_PLATFORM_EROSION_MASK
int const RTN_ERR_GRIDCREATE
int const RASTER_PLOT_SAND_CONSOLIDATED_SEDIMENT
int const RASTER_PLOT_AVG_WAVE_HEIGHT
string const RASTER_CLIFF_COLLAPSE_EROSION_SAND_NAME
string const RASTER_FINE_UNCONS_NAME
string const RASTER_COAST_NAME
int const RASTER_PLOT_FINE_CONSOLIDATED_SEDIMENT
string const RASTER_CLIFF_COLLAPSE_EROSION_FINE_NAME
string const RASTER_SEDIMENT_INPUT_EVENT_NAME
int const RASTER_PLOT_TOP_ELEV_INC_SEA
string const RASTER_CLIFF_COLLAPSE_DEPOSITION_SAND_NAME
int const RASTER_PLOT_ACTIVE_ZONE
string const RASTER_ACTIVE_ZONE_NAME
int const LOG_FILE_MIDDLE_DETAIL
string const RASTER_INTERVENTION_HEIGHT_NAME
string const RASTER_SHADOW_ZONE_NAME
int const RASTER_PLOT_DEEP_WATER_WAVE_PERIOD
int const RTN_ERR_RASTER_FILE_READ
string const RASTER_COARSE_CONS_NAME
int const RASTER_PLOT_TALUS
int const RASTER_PLOT_TOTAL_CLIFF_COLLAPSE_DEPOSITION_SAND
string const RASTER_TOTAL_CLIFF_COLLAPSE_EROSION_SAND_NAME
int const RASTER_PLOT_COAST
string const RASTER_ACTUAL_BEACH_EROSION_NAME
string const RASTER_SETUP_SURGE_RUNUP_FLOOD_MASK_NAME
bool bFPIsEqual(const T d1, const T d2, const T dEpsilon)
string const RASTER_CLIFF_TOE_NAME
string const RASTER_AVG_WAVE_ORIENTATION_NAME
string const RASTER_TOTAL_BEACH_DEPOSITION_NAME
int const RASTER_PLOT_POLYGON_UPDRIFT_OR_DOWNDRIFT
string const RASTER_TOTAL_CLIFF_COLLAPSE_DEPOSITION_COARSE_NAME
string const RASTER_CLIFF_NOTCH_ALL_NAME
int const RASTER_PLOT_POLYGON_GAIN_OR_LOSS
int const RASTER_PLOT_DEEP_WATER_WAVE_ORIENTATION
int const RASTER_PLOT_TOTAL_CLIFF_COLLAPSE_EROSION_COARSE
int const RTN_ERR_BOUNDING_BOX
string const RASTER_SLOPE_OF_CONSOLIDATED_SEDIMENT_NAME
int const RASTER_PLOT_COARSE_UNCONSOLIDATED_SEDIMENT
int const RASTER_PLOT_AVG_WAVE_ORIENTATION
int const RASTER_PLOT_WAVE_ORIENTATION
string const RASTER_SUSP_SED_NAME
int const RASTER_PLOT_BEACH_MASK
string const RASTER_AVG_SEA_DEPTH_NAME
int const RASTER_PLOT_WAVE_FLOOD_LINE
int const RASTER_PLOT_SEDIMENT_INPUT
int const RASTER_PLOT_POTENTIAL_BEACH_EROSION
int const RASTER_PLOT_AVG_SUSPENDED_SEDIMENT
string const RASTER_AVG_WAVE_HEIGHT_NAME
string const RASTER_SEDIMENT_TOP_ELEVATION_NAME
int const RASTER_PLOT_TOTAL_POTENTIAL_PLATFORM_EROSION
int const RASTER_PLOT_SLOPE_FOR_CLIFF_TOE
string const RASTER_WAVE_FLOOD_LINE_NAME
string const RASTER_POTENTIAL_PLATFORM_EROSION_NAME
int const INTERVENTION_CLASS_RASTER
string const RASTER_ACTUAL_PLATFORM_EROSION_NAME
string const RASTER_COARSE_UNCONS_NAME
int const RASTER_PLOT_INTERVENTION_CLASS
int const RASTER_PLOT_BEACH_PROTECTION
int const RASTER_PLOT_AVG_SEA_DEPTH
int const RASTER_PLOT_TOTAL_BEACH_DEPOSITION
string const RASTER_SETUP_SURGE_FLOOD_MASK_NAME
string const RASTER_TOP_ELEVATION_INC_SEA_NAME
string const RASTER_INTERVENTION_CLASS_NAME
int const RASTER_PLOT_TOTAL_CLIFF_COLLAPSE_EROSION_FINE
string const RASTER_WAVE_ORIENTATION_NAME
int const RASTER_PLOT_TOTAL_CLIFF_COLLAPSE_EROSION_SAND
string const RASTER_DEEP_WATER_WAVE_ORIENTATION_NAME
int const RASTER_PLOT_CLIFF_TOE
string const RASTER_POTENTIAL_PLATFORM_EROSION_MASK_NAME
int const RASTER_PLOT_CLIFF_COLLAPSE_EROSION_FINE
int const RASTER_PLOT_ACTUAL_PLATFORM_EROSION
int const RASTER_PLOT_SED_TOP_INC_TALUS_ELEV
string const RASTER_WAVE_HEIGHT_NAME
int const RASTER_PLOT_INTERVENTION_HEIGHT
int const SAND_UNCONS_RASTER
int const RASTER_PLOT_TOTAL_POTENTIAL_BEACH_EROSION
string const RASTER_TOTAL_POTENTIAL_BEACH_EROSION_NAME
int const RASTER_PLOT_SAND_UNCONSOLIDATED_SEDIMENT
string const RASTER_SAND_CONS_NAME
int const RASTER_PLOT_POTENTIAL_PLATFORM_EROSION
string const RASTER_BASEMENT_ELEVATION_NAME
int const FINE_UNCONS_RASTER
int const COARSE_UNCONS_RASTER
int const RASTER_PLOT_NORMAL_PROFILE
int const RASTER_PLOT_CLIFF_NOTCH_ALL
int const RASTER_PLOT_CLIFF_COLLAPSE_DEPOSITION_COARSE
int const RASTER_PLOT_WAVE_HEIGHT
int const RASTER_PLOT_SHADOW_ZONE
int const RASTER_PLOT_DEEP_WATER_WAVE_HEIGHT
string const RASTER_COAST_NORMAL_NAME
string const RASTER_CLIFF_COLLAPSE_EROSION_COARSE_NAME
int const RASTER_PLOT_COARSE_CONSOLIDATED_SEDIMENT
string const RASTER_LANDFORM_NAME
int const RASTER_PLOT_TOTAL_ACTUAL_PLATFORM_EROSION
int const SUSP_SED_RASTER
int const FINE_CONS_RASTER
int const COARSE_CONS_RASTER
int const RASTER_PLOT_SETUP_SURGE_RUNUP_FLOOD_MASK
int const RASTER_PLOT_BASEMENT_ELEVATION
int const RASTER_PLOT_LANDFORM
string const RASTER_TOTAL_ACTUAL_PLATFORM_EROSION_NAME
string const RASTER_POLYGON_NAME
int const RASTER_PLOT_CLIFF_COLLAPSE_EROSION_COARSE
string const RASTER_TOTAL_CLIFF_COLLAPSE_EROSION_FINE_NAME
int const LANDFORM_RASTER
int const RASTER_PLOT_SHADOW_DOWNDRIFT_ZONE
string const RASTER_TALUS_NAME
int const RASTER_PLOT_SLICE
string const RASTER_TOTAL_POTENTIAL_PLATFORM_EROSION_NAME
string const RASTER_AVG_SUSP_SED_NAME
string const RASTER_DEEP_WATER_WAVE_HEIGHT_NAME
int const INTERVENTION_HEIGHT_RASTER
string const RASTER_TOTAL_CLIFF_COLLAPSE_EROSION_COARSE_NAME
string const RASTER_POLYGON_GAIN_OR_LOSS_NAME
int const RASTER_PLOT_TOTAL_CLIFF_COLLAPSE_DEPOSITION_COARSE
string const RASTER_TOTAL_ACTUAL_BEACH_EROSION_NAME
int const RASTER_PLOT_CLIFF_COLLAPSE_EROSION_SAND
int const RASTER_PLOT_SEA_DEPTH
string const RASTER_CLIFF_COLLAPSE_DEPOSITION_COARSE_NAME
int const RASTER_PLOT_SETUP_SURGE_FLOOD_MASK
Contains CRWCoast definitions.
Contains CSimulation definitions.
double dRound(double const d)
Correctly rounds doubles.