48using std::stringstream;
58#include <cpl_string.h>
73 CPLSetConfigOption(
"GDAL_NUM_THREADS",
"ALL_CPUS");
75 CPLSetConfigOption(
"GDAL_NUM_THREADS",
"2");
79 CPLSetConfigOption(
"GDAL_CACHEMAX",
"1024");
80 CPLSetConfigOption(
"GDAL_DISABLE_READDIR_ON_OPEN",
"TRUE");
81 CPLSetConfigOption(
"VSI_CACHE",
"TRUE");
82 CPLSetConfigOption(
"VSI_CACHE_SIZE",
"256000000");
85 CPLSetConfigOption(
"GDAL_GRID_MAX_POINTS_PER_QUADTREE_LEAF",
"512");
90 LogStream <<
"GDAL performance optimizations enabled" << endl;
99 static bool bGDALInitialized =
false;
101 if (! bGDALInitialized)
104 bGDALInitialized =
true;
110 if (NULL == pGDALDataset)
127 if ((strTmp.find(
"meter") == string::npos) && (strTmp.find(
"metre") == string::npos))
175 if (!
bFPIsEqual(dCellSideX, dCellSideY, 1e-2))
201 GDALRasterBand *pGDALBand = pGDALDataset->GetRasterBand(1);
202 int nBlockXSize = 0, nBlockYSize = 0;
203 pGDALBand->GetBlockSize(&nBlockXSize, &nBlockYSize);
207 string const strUnits = pGDALBand->GetUnitType();
209 if ((!strUnits.empty()) && (strUnits.find(
'm') == string::npos))
217 CPLPushErrorHandler(CPLQuietErrorHandler);
218 double const dMissingValue = pGDALBand->GetNoDataValue();
219 CPLPopErrorHandler();
236 if (NULL == pdScanline)
239 cerr <<
ERR <<
"cannot allocate memory for " <<
m_nXGridSize <<
" x 1D array" << endl;
247 if (CE_Failure == pGDALBand->RasterIO(GF_Read, 0, j,
m_nXGridSize, 1, pdScanline,
m_nXGridSize, 1, GDT_Float64, 0, 0, NULL))
257 double dTmp = pdScanline[i];
267 GDALClose(pGDALDataset);
281 vector<CGeom2DIPoint> VPtiBoundingBoxCorner;
293 if (!
m_pRasterGrid->m_Cell[nX][nY].bBasementElevIsMissingValue())
296 VPtiBoundingBoxCorner.push_back(PtiTmp);
321 if (!
m_pRasterGrid->m_Cell[nX][nY].bBasementElevIsMissingValue())
324 VPtiBoundingBoxCorner.push_back(PtiTmp);
334 LogStream <<
m_ulIter <<
": east (right) edge of bounding box not found" << endl;
349 if (!
m_pRasterGrid->m_Cell[nX][nY].bBasementElevIsMissingValue())
352 VPtiBoundingBoxCorner.push_back(PtiTmp);
362 LogStream <<
m_ulIter <<
": south (bottom) edge of bounding box not found" << endl;
377 if (!
m_pRasterGrid->m_Cell[nX][nY].bBasementElevIsMissingValue())
380 VPtiBoundingBoxCorner.push_back(PtiTmp);
396 for (
int nX = VPtiBoundingBoxCorner[0].nGetX(); nX <= VPtiBoundingBoxCorner[1].nGetX(); nX++)
400 for (
int nY = VPtiBoundingBoxCorner[0].nGetY(); nY <
m_nYGridSize; nY++)
402 if (
m_pRasterGrid->m_Cell[nX][nY].bBasementElevIsMissingValue())
421 LogStream <<
m_ulIter <<
": could not find a bounding box edge cell for grid column " << nX << endl;
428 for (
int nY = VPtiBoundingBoxCorner[1].nGetY(); nY <= VPtiBoundingBoxCorner[2].nGetY(); nY++)
432 for (
int nX = VPtiBoundingBoxCorner[1].nGetX(); nX >= 0; nX--)
434 if (
m_pRasterGrid->m_Cell[nX][nY].bBasementElevIsMissingValue())
453 LogStream <<
m_ulIter <<
": could not find a bounding box edge cell for grid row " << nY << endl;
460 for (
int nX = VPtiBoundingBoxCorner[2].nGetX(); nX >= VPtiBoundingBoxCorner[3].nGetX(); nX--)
464 for (
int nY = VPtiBoundingBoxCorner[2].nGetY(); nY >= 0; nY--)
466 if (
m_pRasterGrid->m_Cell[nX][nY].bBasementElevIsMissingValue())
485 LogStream <<
m_ulIter <<
": could not find a bounding box edge cell for grid column " << nX << endl;
492 for (
int nY = VPtiBoundingBoxCorner[3].nGetY(); nY >= VPtiBoundingBoxCorner[0].nGetY(); nY--)
494 for (
int nX = VPtiBoundingBoxCorner[3].nGetX(); nX <
m_nXGridSize - 1; nX++)
497 if (
m_pRasterGrid->m_Cell[nX][nY].bBasementElevIsMissingValue())
516 LogStream <<
m_ulIter <<
": could not find a bounding box edge cell for grid row " << nY << endl;
591 if (!strGISFile.empty())
594 GDALDataset *pGDALDataset =
static_cast<GDALDataset*
>(GDALOpen(strGISFile.c_str(), GA_ReadOnly));
596 if (NULL == pGDALDataset)
599 cerr <<
ERR <<
"cannot open " << strGISFile <<
" for input: " << CPLGetLastErrorMsg() << endl;
604 strDriverCode = pGDALDataset->GetDriver()->GetDescription();
605 strDriverDesc = pGDALDataset->GetDriver()->GetMetadataItem(GDAL_DMD_LONGNAME);
606 strProjection = pGDALDataset->GetProjectionRef();
609 double dGeoTransform[6];
611 if (CE_Failure == pGDALDataset->GetGeoTransform(dGeoTransform))
614 cerr <<
ERR << CPLGetLastErrorMsg() <<
" in " << strGISFile << endl;
619 int const nTmpXSize = pGDALDataset->GetRasterXSize();
628 int const nTmpYSize = pGDALDataset->GetRasterYSize();
655 double const dTmpResX =
tAbs(dGeoTransform[1]);
660 cerr <<
ERR <<
"cell size in X direction (" << dTmpResX <<
") in " << strGISFile <<
" differs from cell size in of basement DEM (" <<
m_dCellSide <<
")" << endl;
664 double const dTmpResY =
tAbs(dGeoTransform[5]);
669 cerr <<
ERR <<
"cell size in Y direction (" << dTmpResY <<
") in " << strGISFile <<
" differs from cell size of basement DEM (" <<
m_dCellSide <<
")" << endl;
674 GDALRasterBand *pGDALBand = pGDALDataset->GetRasterBand(1);
675 int nBlockXSize = 0, nBlockYSize = 0;
676 pGDALBand->GetBlockSize(&nBlockXSize, &nBlockYSize);
677 strDataType = GDALGetDataTypeName(pGDALBand->GetRasterDataType());
763 string const strTmp =
strToLower(&strDataType);
765 if (strTmp.find(
"int") != string::npos)
768 CPLPushErrorHandler(CPLQuietErrorHandler);
770 CPLPopErrorHandler();
781 CPLPushErrorHandler(CPLQuietErrorHandler);
783 CPLPopErrorHandler();
787 cerr <<
" " <<
NOTE <<
"NODATA value in " << strGISFile <<
" is " <<
m_dGISMissingValue <<
"\n instead using CoastalME's default floating-point NODATA value " <<
m_dMissingValue << endl;
794 if (NULL == pdScanline)
797 cerr <<
ERR <<
"cannot allocate memory for " <<
m_nXGridSize <<
" x 1D array" << endl;
807 if (CE_Failure == pGDALBand->RasterIO(GF_Read, 0, nY,
m_nXGridSize, 1, pdScanline,
m_nXGridSize, 1, GDT_Float64, 0, 0, NULL))
810 cerr <<
ERR << CPLGetLastErrorMsg() <<
" in " << strGISFile << endl;
823 nTmp =
static_cast<int>(pdScanline[nX]);
831 m_pRasterGrid->m_Cell[nX][nY].pGetLandform()->SetLFCategory(nTmp);
836 nTmp =
static_cast<int>(pdScanline[nX]);
849 dTmp = pdScanline[nX];
862 dTmp = pdScanline[nX];
875 dTmp = pdScanline[nX];
883 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetUnconsolidatedSediment()->SetFineDepth(dTmp);
888 dTmp = pdScanline[nX];
896 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetUnconsolidatedSediment()->SetSandDepth(dTmp);
901 dTmp = pdScanline[nX];
909 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetUnconsolidatedSediment()->SetCoarseDepth(dTmp);
914 dTmp = pdScanline[nX];
922 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetConsolidatedSediment()->SetFineDepth(dTmp);
927 dTmp = pdScanline[nX];
935 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetConsolidatedSediment()->SetSandDepth(dTmp);
940 dTmp = pdScanline[nX];
948 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetConsolidatedSediment()->SetCoarseDepth(dTmp);
955 GDALClose(pGDALDataset);
962 cerr <<
WARN << nMissing <<
" missing values in " << strGISFile << endl;
963 LogStream <<
WARN << nMissing <<
" missing values in " << strGISFile << endl;
975 bool bIsInteger =
false;
980 strLayer =
"_layer_";
982 stringstream ststrTmp;
984 strLayer.append(to_string(nLayer + 1));
1090 strFilePathName.append(strLayer);
1095 strFilePathName.append(strLayer);
1100 strFilePathName.append(strLayer);
1105 strFilePathName.append(strLayer);
1110 strFilePathName.append(strLayer);
1115 strFilePathName.append(strLayer);
1204 ststrTmp <<
"_" << dElev <<
"_";
1205 strFilePathName.append(ststrTmp.str());
1273 strFilePathName.append(
"_");
1287 strFilePathName.append(ststrTmp.str());
1292 strFilePathName.append(
".");
1300 GDALDriver *pDriver;
1301 GDALDataset *pDataSet;
1324 if (NULL == pDataSet)
1328 << CPLGetLastErrorMsg() << endl;
1336 pDriver = GetGDALDriverManager()->GetDriverByName(
"MEM");
1339 if (NULL == pDataSet)
1343 << CPLGetLastErrorMsg() << endl;
1349 CPLPushErrorHandler(CPLQuietErrorHandler);
1351 CPLPopErrorHandler();
1356 << CPLGetLastErrorMsg() << endl;
1361 if (NULL == pdRaster)
1368 bool bScaleOutput =
false;
1369 double dRangeScale = 0;
1370 double dDataMin = 0;
1374 double dDataMax = 0;
1379 double const dDataRange = dDataMax - dDataMin;
1383 dRangeScale = dWriteRange / dDataRange;
1387 bScaleOutput =
true;
1412 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetSedimentPlusInterventionTopElev();
1424 dTmp =
static_cast<double>(
m_pRasterGrid->m_Cell[nX][nY].bIsCliff());
1472 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetBeachProtectionFactor();
1483 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetPotentialPlatformErosion();
1487 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetActualPlatformErosion();
1491 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotPotentialPlatformErosion();
1495 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotActualPlatformErosion();
1499 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetPotentialBeachErosion();
1503 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetActualBeachErosion();
1507 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotPotentialBeachErosion();
1511 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotActualBeachErosion();
1519 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotBeachDeposition();
1523 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetSuspendedSediment();
1531 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetUnconsolidatedSediment()->dGetFineDepth();
1535 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetUnconsolidatedSediment()->dGetSandDepth();
1539 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetUnconsolidatedSediment()->dGetCoarseDepth();
1543 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetConsolidatedSediment()->dGetFineDepth();
1547 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetConsolidatedSediment()->dGetSandDepth();
1551 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetConsolidatedSediment()->dGetCoarseDepth();
1555 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetThisIterCliffCollapseErosionFine();
1559 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetThisIterCliffCollapseErosionSand();
1563 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetThisIterCliffCollapseErosionCoarse();
1567 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotCliffCollapseFine();
1571 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotCliffCollapseSand();
1575 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotCliffCollapseCoarse();
1579 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetThisIterCliffCollapseSandTalusDeposition();
1583 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetThisIterCliffCollapseCoarseTalusDeposition();
1587 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotSandTalusDeposition();
1591 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotCoarseTalusDeposition();
1595 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetInterventionHeight();
1600 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetCellDeepWaterWaveAngle();
1609 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetCellDeepWaterWaveHeight();
1618 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetCellDeepWaterWavePeriod();
1644 dTmp =
m_pRasterGrid->m_Cell[nX][nY].bPotentialPlatformErosion();
1654 nTopLayer =
m_pRasterGrid->m_Cell[nX][nY].nGetTopNonZeroLayerAboveBasement();
1665 dTmp =
m_pRasterGrid->m_Cell[nX][nY].nGetLayerAtElev(dElev);
1669 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLandform()->nGetLFCategory();
1672 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLandform()->nGetLFSubCategory();
1677 dTmp =
m_pRasterGrid->m_Cell[nX][nY].nGetInterventionClass();
1681 dTmp = (
m_pRasterGrid->m_Cell[nX][nY].bIsCoastline() ? 1 : 0);
1690 dTmp = (
m_pRasterGrid->m_Cell[nX][nY].bIsInActiveZone() ? 1 : 0);
1698 dTmp =
m_pRasterGrid->m_Cell[nX][nY].nGetShadowZoneNumber();
1702 dTmp =
m_pRasterGrid->m_Cell[nX][nY].nGetDownDriftZoneNumber();
1723 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nTopLayer)->pGetUnconsolidatedSediment()->dGetTotAllSedimentInputDepth();
1727 dTmp = (
m_pRasterGrid->m_Cell[nX][nY].bIsFloodBySetupSurge() ? 1 : 0);
1731 dTmp = (
m_pRasterGrid->m_Cell[nX][nY].bIsFloodBySetupSurgeRunup() ? 1 : 0);
1735 dTmp = (
m_pRasterGrid->m_Cell[nX][nY].bIsFloodline() ? 1 : 0);
1750 pdRaster[n++] = dTmp;
1755 GDALRasterBand *pBand = pDataSet->GetRasterBand(1);
1816 strUnits =
"degrees";
1820 strUnits =
"cumecs";
1847 CPLPushErrorHandler(CPLQuietErrorHandler);
1848 pBand->SetUnitType(strUnits.c_str());
1849 CPLPopErrorHandler();
1852 CPLPushErrorHandler(CPLQuietErrorHandler);
1860 CPLPopErrorHandler();
1863 string strDesc(*strPlotTitle);
1868 ststrTmp << dElev <<
"m, ";
1869 strDesc.append(ststrTmp.str());
1872 strDesc.append(
" at ");
1876 pBand->SetDescription(strDesc.c_str());
1879 char **papszCategoryNames = NULL;
1884 papszCategoryNames = CSLAddString(papszCategoryNames,
"Basement");
1885 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 0");
1886 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 1");
1887 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 2");
1888 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 3");
1889 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 4");
1890 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 5");
1891 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 6");
1892 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 7");
1893 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 8");
1894 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 9");
1898 papszCategoryNames = CSLAddString(papszCategoryNames,
"None");
1899 papszCategoryNames = CSLAddString(papszCategoryNames,
"Hinterland");
1900 papszCategoryNames = CSLAddString(papszCategoryNames,
"Sea");
1901 papszCategoryNames = CSLAddString(papszCategoryNames,
"Cliff");
1902 papszCategoryNames = CSLAddString(papszCategoryNames,
"Drift");
1903 papszCategoryNames = CSLAddString(papszCategoryNames,
"Intervention");
1905 papszCategoryNames = CSLAddString(papszCategoryNames,
"Cliff on Coastline");
1906 papszCategoryNames = CSLAddString(papszCategoryNames,
"Inland Cliff");
1908 papszCategoryNames = CSLAddString(papszCategoryNames,
"Mixed Drift");
1909 papszCategoryNames = CSLAddString(papszCategoryNames,
"Talus");
1910 papszCategoryNames = CSLAddString(papszCategoryNames,
"Beach");
1911 papszCategoryNames = CSLAddString(papszCategoryNames,
"Dunes");
1915 papszCategoryNames = CSLAddString(papszCategoryNames,
"None");
1916 papszCategoryNames = CSLAddString(papszCategoryNames,
"Structural");
1917 papszCategoryNames = CSLAddString(papszCategoryNames,
"Non-Structural");
1921 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not coastline");
1922 papszCategoryNames = CSLAddString(papszCategoryNames,
"Coastline");
1926 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not coastline-normal profile");
1927 papszCategoryNames = CSLAddString(papszCategoryNames,
"Coastline-normal profile");
1931 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not in active zone");
1932 papszCategoryNames = CSLAddString(papszCategoryNames,
"In active zone");
1936 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not polygon");
1937 papszCategoryNames = CSLAddString(papszCategoryNames,
"In polygon");
1941 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not in shadow zone");
1942 papszCategoryNames = CSLAddString(papszCategoryNames,
"In shadow zone");
1946 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not in shadow downdrift zone");
1947 papszCategoryNames = CSLAddString(papszCategoryNames,
"In shadow downdrift zone");
1951 papszCategoryNames = CSLAddString(papszCategoryNames,
"Updrift movement of unconsolidated sediment ");
1952 papszCategoryNames = CSLAddString(papszCategoryNames,
"Downdrift movement of unconsolidated sediment");
1956 papszCategoryNames = CSLAddString(papszCategoryNames,
"Inundated by swl setup and surge ");
1957 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not inundated by swl setup and surge");
1961 papszCategoryNames = CSLAddString(papszCategoryNames,
"Inundated by swl setup, surge and runup ");
1962 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not inundated by swl setup, surge and runup");
1966 papszCategoryNames = CSLAddString(papszCategoryNames,
"Intersection line of inundation ");
1967 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not inundated by swl waves and runup");
1971 CPLPushErrorHandler(CPLQuietErrorHandler);
1972 pBand->SetCategoryNames(papszCategoryNames);
1973 CPLPopErrorHandler();
1977 CPLSetThreadLocalConfigOption(
"GDAL_NUM_THREADS",
"ALL_CPUS");
1979 if (CE_Failure == pBand->RasterIO(GF_Write, 0, 0,
m_nXGridSize,
m_nYGridSize, pdRaster,
m_nXGridSize,
m_nYGridSize, GDT_Float64, 0, 0, NULL))
1983 << CPLGetLastErrorMsg() << endl;
1989 double dMin, dMax, dMean, dStdDev;
1990 CPLPushErrorHandler(CPLQuietErrorHandler);
1991 pBand->ComputeStatistics(
false, &dMin, &dMax, &dMean, &dStdDev, NULL, NULL);
1992 CPLPopErrorHandler();
1995 CPLPushErrorHandler(CPLQuietErrorHandler);
1996 pBand->SetStatistics(dMin, dMax, dMean, dStdDev);
1997 CPLPopErrorHandler();
2003 GDALDataset *pOutDataSet = pOutDriver->CreateCopy(strFilePathName.c_str(), pDataSet,
false,
m_papszGDALRasterOptions, NULL, NULL);
2005 if (NULL == pOutDataSet)
2009 << CPLGetLastErrorMsg() << endl;
2014 GDALClose(pOutDataSet);
2018 GDALClose(pDataSet);
2039 int const nGridSize = nXSize * nYSize;
2041 unsigned int const nPoints =
static_cast<unsigned int>(pVdX->size());
2055 vector<double> VdOutX(nGridSize, 0);
2056 vector<double> VdOutY(nGridSize, 0);
2059 for (
int nDirection = 0; nDirection < 2; nDirection++)
2064 GDALGridLinearOptions *pOptions =
new GDALGridLinearOptions();
2066 pOptions->dfRadius = -1;
2067 pOptions->nSizeOfStructure =
sizeof(GDALGridLinearOptions);
2070 CPLSetThreadLocalConfigOption(
"GDAL_NUM_THREADS",
"ALL_CPUS");
2081 if (nDirection == 0)
2083 nRet = GDALGridCreate(GGA_Linear, pOptions, nPoints, pVdX->data(), pVdY->data(), pVdHeightX->data(),
m_nXMinBoundingBox,
m_nXMaxBoundingBox,
m_nYMinBoundingBox,
m_nYMaxBoundingBox, nXSize, nYSize, GDT_Float64, VdOutX.data(), NULL, NULL);
2088 nRet = GDALGridCreate(GGA_Linear, pOptions, nPoints, pVdX->data(), pVdY->data(), pVdHeightY->data(),
m_nXMinBoundingBox,
m_nXMaxBoundingBox,
m_nYMinBoundingBox,
m_nYMaxBoundingBox, nXSize, nYSize, GDT_Float64, VdOutY.data(), NULL, NULL);
2103 if (nRet == CE_Failure)
2105 cerr << CPLGetLastErrorMsg() << endl;
2109 if (nDirection == 0)
2114 for (
unsigned int n = 0; n < VdOutX.size(); n++)
2116 if (isnan(VdOutX[n]))
2119 else if (
tAbs(VdOutX[n]) > 1e10)
2137 for (
unsigned int n = 0; n < VdOutY.size(); n++)
2139 if (isnan(VdOutY[n]))
2142 else if (
tAbs(VdOutY[n]) > 1e10)
2282 for (
int nY = 0; nY < nYSize; nY++)
2284 for (
int nX = 0; nX < nXSize; nX++)
2289 if (
m_pRasterGrid->m_Cell[nActualX][nActualY].bIsInContiguousSea())
2295 double const dDeepWaterWaveHeight =
m_pRasterGrid->m_Cell[nActualX][nActualY].dGetCellDeepWaterWaveHeight();
2296 m_pRasterGrid->m_Cell[nActualX][nActualY].SetWaveHeight(dDeepWaterWaveHeight);
2298 double const dDeepWaterWaveAngle =
m_pRasterGrid->m_Cell[nActualX][nActualY].dGetCellDeepWaterWaveAngle();
2299 m_pRasterGrid->m_Cell[nActualX][nActualY].SetWaveAngle(dDeepWaterWaveAngle);
2305 double dWaveHeightX;
2306 double dWaveHeightY;
2310 dWaveHeightX = dXAvg;
2313 dWaveHeightX = VdOutX[n];
2316 dWaveHeightY = dYAvg;
2319 dWaveHeightY = VdOutY[n];
2322 double const dWaveHeight = sqrt((dWaveHeightX * dWaveHeightX) + (dWaveHeightY * dWaveHeightY));
2323 double const dWaveDir = atan2(dWaveHeightX, dWaveHeightY) * (180 /
PI);
2329 m_pRasterGrid->m_Cell[nActualX][nActualY].SetWaveHeight(dWaveHeight);
2333 double const dSeaDepth =
m_pRasterGrid->m_Cell[nActualX][nActualY].dGetSeaDepth();
2336 m_pRasterGrid->m_Cell[nActualX][nActualY].SetInActiveZone(
true);
2344 n =
tMin(n,
static_cast<int>(VdOutX.size() - 1));
2424 CPLSetThreadLocalConfigOption(
"GDAL_NUM_THREADS",
"ALL_CPUS");
2427 GDALGridInverseDistanceToAPowerOptions *pOptions =
new GDALGridInverseDistanceToAPowerOptions();
2428 pOptions->dfAngle = 0;
2429 pOptions->dfAnisotropyAngle = 0;
2430 pOptions->dfAnisotropyRatio = 0;
2431 pOptions->dfPower = 2;
2432 pOptions->dfSmoothing = 50;
2433 pOptions->dfRadius1 = 0;
2434 pOptions->dfRadius2 = 0;
2435 pOptions->nMaxPoints = 12;
2436 pOptions->nMinPoints = 3;
2446 if (pContext == NULL)
2454 int nRet = GDALGridContextProcess(pContext, 0,
m_nXGridSize - 1, 0,
m_nYGridSize - 1,
m_nXGridSize,
m_nYGridSize, GDT_Float64, dHeightOut, NULL, NULL);
2456 if (nRet == CE_Failure)
2458 delete[] dHeightOut;
2464 GDALGridContextFree(pContext);
2470 if (pContext == NULL)
2472 delete[] dHeightOut;
2479 nRet = GDALGridContextProcess(pContext, 0,
m_nXGridSize - 1, 0,
m_nYGridSize - 1,
m_nXGridSize,
m_nYGridSize, GDT_Float64, dAngleOut, NULL, NULL);
2481 if (nRet == CE_Failure)
2483 delete[] dHeightOut;
2490 GDALGridContextFree(pContext);
2496 if (pContext == NULL)
2504 nRet = GDALGridContextProcess(pContext, 0,
m_nXGridSize - 1, 0,
m_nYGridSize - 1,
m_nXGridSize,
m_nYGridSize, GDT_Float64, dPeriopdOut, NULL, NULL);
2506 if (nRet == CE_Failure)
2508 delete[] dPeriopdOut;
2514 GDALGridContextFree(pContext);
2517 vector<double> VdHeight;
2518 vector<double> VdAngle;
2519 vector<double> VdPeriod;
2522 int nValidHeight = 0;
2523 int nValidAngle = 0;
2524 int nValidPeriod = 0;
2526 double dAvgHeight = 0;
2527 double dAvgAngle = 0;
2528 double dAvgPeriod = 0;
2534 if (isfinite(dHeightOut[n]))
2536 VdHeight.push_back(dHeightOut[n]);
2538 dAvgHeight += dHeightOut[n];
2547 if (isfinite(dAngleOut[n]))
2549 VdAngle.push_back(dAngleOut[n]);
2551 dAvgAngle += dAngleOut[n];
2560 if (isfinite(dPeriopdOut[n]))
2562 VdPeriod.push_back(dPeriopdOut[n]);
2564 dAvgPeriod += dPeriopdOut[n];
2579 dAvgHeight /= nValidHeight;
2580 dAvgAngle /= nValidAngle;
2581 dAvgPeriod /= nValidPeriod;
2585 delete[] dHeightOut;
2587 delete[] dPeriopdOut;
2597 m_pRasterGrid->m_Cell[nX][nY].SetCellDeepWaterWaveHeight(dAvgHeight);
2600 m_pRasterGrid->m_Cell[nX][nY].SetCellDeepWaterWaveHeight(VdHeight[n]);
2603 m_pRasterGrid->m_Cell[nX][nY].SetCellDeepWaterWaveAngle(dAvgAngle);
2606 m_pRasterGrid->m_Cell[nX][nY].SetCellDeepWaterWaveAngle(VdAngle[n]);
2609 m_pRasterGrid->m_Cell[nX][nY].SetCellDeepWaterWavePeriod(dAvgPeriod);
2612 m_pRasterGrid->m_Cell[nX][nY].SetCellDeepWaterWavePeriod(VdPeriod[n]);
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)
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 all other raster GIS datafiles into the RasterGrid array.
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
Base name for CME raster GIS output files.
int m_nXMaxBoundingBox
The maximum x value of the bounding box.
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.
int nInterpolateWavesToPolygonCells(vector< double > const *, vector< double > const *, vector< double > const *, vector< double > const *)
Interpolates wave properties from all profiles to all within-polygon sea cells, using GDALGridCreate(...
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.
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)
If the user supplies multiple deep water wave height and angle values, this routine interplates these...
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
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
vector< string > m_VstrGDALIUFDriverDesc
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 time step) 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
int nMarkBoundingBoxEdgeCells(void)
Mark cells which are at the edge of a bounding box which represents the valid part of the grid,...
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.
vector< CGeomCoastPolygon * > m_pVCoastPolygon
Pointers to coast polygon objects, in down-coast sequence TODO 044 Will need to use global polygon ID...
This file contains global definitions for CoastalME.
int const NO_NONZERO_THICKNESS_LAYERS
int const RASTER_PLOT_POLYGON
string const RASTER_SEA_DEPTH_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_LOCAL_SLOPE_OF_CONSOLIDATED_SEDIMENT
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_SLICE_NAME
int const RTN_ERR_DEMFILE
int const RASTER_PLOT_FINE_UNCONSOLIDATED_SEDIMENT
string const RASTER_TOP_NAME
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
int const RASTER_PLOT_SEDIMENT_TOP_ELEVATION_ELEV
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_SEDIMENT_TOP_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
string const RASTER_CLIFF_COLLAPSE_DEPOSITION_SAND_NAME
int const RASTER_PLOT_ACTIVE_ZONE
string const RASTER_ACTIVE_ZONE_NAME
string const RASTER_CLIFF_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_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_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
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
int const RASTER_PLOT_SLOPE
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
string const RASTER_LOCAL_SLOPE_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
int const RASTER_PLOT_TOTAL_POTENTIAL_PLATFORM_EROSION
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_CLIFF
int const RASTER_PLOT_BEACH_PROTECTION
int const RASTER_PLOT_AVG_SEA_DEPTH
int const RASTER_PLOT_OVERALL_TOP_ELEVATION
int const RASTER_PLOT_TOTAL_BEACH_DEPOSITION
string const RASTER_SETUP_SURGE_FLOOD_MASK_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
string const RASTER_POTENTIAL_PLATFORM_EROSION_MASK_NAME
int const RASTER_PLOT_CLIFF_COLLAPSE_EROSION_FINE
int const RASTER_PLOT_ACTUAL_PLATFORM_EROSION
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_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_SLOPE_NAME
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
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.