36using std::stringstream;
41#include <cpl_config.h>
57 CPLSetConfigOption(
"GDAL_NUM_THREADS",
"ALL_CPUS");
59 CPLSetConfigOption(
"GDAL_NUM_THREADS",
"2");
63 CPLSetConfigOption(
"GDAL_CACHEMAX",
"1024");
64 CPLSetConfigOption(
"GDAL_DISABLE_READDIR_ON_OPEN",
"TRUE");
65 CPLSetConfigOption(
"VSI_CACHE",
"TRUE");
66 CPLSetConfigOption(
"VSI_CACHE_SIZE",
"256000000");
69 CPLSetConfigOption(
"GDAL_GRID_MAX_POINTS_PER_QUADTREE_LEAF",
"512");
74 LogStream <<
"GDAL performance optimizations enabled" << endl;
82 static bool bGDALInitialized =
false;
84 if (!bGDALInitialized) {
86 bGDALInitialized =
true;
92 if (NULL == pGDALDataset) {
107 if ((strTmp.find(
"meter") == string::npos) && (strTmp.find(
"metre") == string::npos)) {
150 if (!
bFPIsEqual(dCellSideX, dCellSideY, 1e-2)) {
175 GDALRasterBand *pGDALBand = pGDALDataset->GetRasterBand(1);
176 int nBlockXSize = 0, nBlockYSize = 0;
177 pGDALBand->GetBlockSize(&nBlockXSize, &nBlockYSize);
181 string strUnits = pGDALBand->GetUnitType();
183 if ((!strUnits.empty()) && (strUnits.find(
"m") == string::npos)) {
190 CPLPushErrorHandler(CPLQuietErrorHandler);
191 double dMissingValue = pGDALBand->GetNoDataValue();
192 CPLPopErrorHandler();
208 if (NULL == pdScanline) {
210 cerr <<
ERR <<
"cannot allocate memory for " <<
m_nXGridSize <<
" x 1D array" << endl;
217 if (CE_Failure == pGDALBand->RasterIO(GF_Read, 0, j,
m_nXGridSize, 1, pdScanline,
m_nXGridSize, 1, GDT_Float64, 0, 0, NULL)) {
225 double dTmp = pdScanline[i];
235 GDALClose(pGDALDataset);
248 vector<CGeom2DIPoint> VPtiBoundingBoxCorner;
258 if (!
m_pRasterGrid->m_Cell[nX][nY].bBasementElevIsMissingValue()) {
260 VPtiBoundingBoxCorner.push_back(PtiTmp);
282 if (!
m_pRasterGrid->m_Cell[nX][nY].bBasementElevIsMissingValue()) {
284 VPtiBoundingBoxCorner.push_back(PtiTmp);
293 LogStream <<
m_ulIter <<
": east (right) edge of bounding box not found" << endl;
306 if (!
m_pRasterGrid->m_Cell[nX][nY].bBasementElevIsMissingValue()) {
308 VPtiBoundingBoxCorner.push_back(PtiTmp);
317 LogStream <<
m_ulIter <<
": south (bottom) edge of bounding box not found" << endl;
330 if (!
m_pRasterGrid->m_Cell[nX][nY].bBasementElevIsMissingValue()) {
332 VPtiBoundingBoxCorner.push_back(PtiTmp);
347 for (
int nX = VPtiBoundingBoxCorner[0].nGetX(); nX <= VPtiBoundingBoxCorner[1].nGetX(); nX++) {
350 for (
int nY = VPtiBoundingBoxCorner[0].nGetY(); nY <
m_nYGridSize; nY++) {
351 if (
m_pRasterGrid->m_Cell[nX][nY].bBasementElevIsMissingValue()) {
368 LogStream <<
m_ulIter <<
": could not find a bounding box edge cell for grid column " << nX << endl;
375 for (
int nY = VPtiBoundingBoxCorner[1].nGetY(); nY <= VPtiBoundingBoxCorner[2].nGetY(); nY++) {
378 for (
int nX = VPtiBoundingBoxCorner[1].nGetX(); nX >= 0; nX--) {
379 if (
m_pRasterGrid->m_Cell[nX][nY].bBasementElevIsMissingValue()) {
396 LogStream <<
m_ulIter <<
": could not find a bounding box edge cell for grid row " << nY << endl;
403 for (
int nX = VPtiBoundingBoxCorner[2].nGetX(); nX >= VPtiBoundingBoxCorner[3].nGetX(); nX--) {
406 for (
int nY = VPtiBoundingBoxCorner[2].nGetY(); nY >= 0; nY--) {
407 if (
m_pRasterGrid->m_Cell[nX][nY].bBasementElevIsMissingValue()) {
424 LogStream <<
m_ulIter <<
": could not find a bounding box edge cell for grid column " << nX << endl;
431 for (
int nY = VPtiBoundingBoxCorner[3].nGetY(); nY >= VPtiBoundingBoxCorner[0].nGetY(); nY--) {
432 for (
int nX = VPtiBoundingBoxCorner[3].nGetX(); nX <
m_nXGridSize - 1; nX++)
435 if (
m_pRasterGrid->m_Cell[nX][nY].bBasementElevIsMissingValue()) {
452 LogStream <<
m_ulIter <<
": could not find a bounding box edge cell for grid row " << nY << endl;
525 if (!strGISFile.empty()) {
527 GDALDataset *pGDALDataset =
static_cast<GDALDataset *
>(GDALOpen(strGISFile.c_str(), GA_ReadOnly));
529 if (NULL == pGDALDataset) {
531 cerr <<
ERR <<
"cannot open " << strGISFile <<
" for input: " << CPLGetLastErrorMsg() << endl;
536 strDriverCode = pGDALDataset->GetDriver()->GetDescription();
537 strDriverDesc = pGDALDataset->GetDriver()->GetMetadataItem(GDAL_DMD_LONGNAME);
538 strProjection = pGDALDataset->GetProjectionRef();
541 double dGeoTransform[6];
543 if (CE_Failure == pGDALDataset->GetGeoTransform(dGeoTransform)) {
545 cerr <<
ERR << CPLGetLastErrorMsg() <<
" in " << strGISFile << endl;
550 int nTmpXSize = pGDALDataset->GetRasterXSize();
558 int nTmpYSize = pGDALDataset->GetRasterYSize();
582 double dTmpResX =
tAbs(dGeoTransform[1]);
586 cerr <<
ERR <<
"cell size in X direction (" << dTmpResX <<
") in " << strGISFile <<
" differs from cell size in of basement DEM (" <<
m_dCellSide <<
")" << endl;
590 double dTmpResY =
tAbs(dGeoTransform[5]);
594 cerr <<
ERR <<
"cell size in Y direction (" << dTmpResY <<
") in " << strGISFile <<
" differs from cell size of basement DEM (" <<
m_dCellSide <<
")" << endl;
599 GDALRasterBand *pGDALBand = pGDALDataset->GetRasterBand(1);
600 int nBlockXSize = 0, nBlockYSize = 0;
601 pGDALBand->GetBlockSize(&nBlockXSize, &nBlockYSize);
602 strDataType = GDALGetDataTypeName(pGDALBand->GetRasterDataType());
689 if (strTmp.find(
"int") != string::npos) {
691 CPLPushErrorHandler(CPLQuietErrorHandler);
693 CPLPopErrorHandler();
702 CPLPushErrorHandler(CPLQuietErrorHandler);
704 CPLPopErrorHandler();
707 cerr <<
" " <<
NOTE <<
"NODATA value in " << strGISFile <<
" is " <<
m_dGISMissingValue <<
"\n instead using CoastalME's default floating-point NODATA value " <<
m_dMissingValue << endl;
714 if (NULL == pdScanline) {
716 cerr <<
ERR <<
"cannot allocate memory for " <<
m_nXGridSize <<
" x 1D array" << endl;
725 if (CE_Failure == pGDALBand->RasterIO(GF_Read, 0, nY,
m_nXGridSize, 1, pdScanline,
m_nXGridSize, 1, GDT_Float64, 0, 0, NULL)) {
727 cerr <<
ERR << CPLGetLastErrorMsg() <<
" in " << strGISFile << endl;
738 nTmp =
static_cast<int>(pdScanline[nX]);
745 m_pRasterGrid->m_Cell[nX][nY].pGetLandform()->SetLFCategory(nTmp);
750 nTmp =
static_cast<int>(pdScanline[nX]);
762 dTmp = pdScanline[nX];
774 dTmp = pdScanline[nX];
786 dTmp = pdScanline[nX];
793 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetUnconsolidatedSediment()->SetFineDepth(dTmp);
798 dTmp = pdScanline[nX];
805 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetUnconsolidatedSediment()->SetSandDepth(dTmp);
810 dTmp = pdScanline[nX];
817 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetUnconsolidatedSediment()->SetCoarseDepth(dTmp);
822 dTmp = pdScanline[nX];
829 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetConsolidatedSediment()->SetFineDepth(dTmp);
834 dTmp = pdScanline[nX];
841 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetConsolidatedSediment()->SetSandDepth(dTmp);
846 dTmp = pdScanline[nX];
853 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetConsolidatedSediment()->SetCoarseDepth(dTmp);
860 GDALClose(pGDALDataset);
866 cerr <<
WARN << nMissing <<
" missing values in " << strGISFile << endl;
867 LogStream <<
WARN << nMissing <<
" missing values in " << strGISFile << endl;
878 bool bIsInteger =
false;
883 strLayer =
"_layer_";
885 stringstream ststrTmp;
887 strLayer.append(to_string(nLayer + 1));
992 strFilePathName.append(strLayer);
997 strFilePathName.append(strLayer);
1002 strFilePathName.append(strLayer);
1007 strFilePathName.append(strLayer);
1012 strFilePathName.append(strLayer);
1017 strFilePathName.append(strLayer);
1106 ststrTmp <<
"_" << dElev <<
"_";
1107 strFilePathName.append(ststrTmp.str());
1175 strFilePathName.append(
"_");
1187 strFilePathName.append(ststrTmp.str());
1191 strFilePathName.append(
".");
1199 GDALDriver *pDriver;
1200 GDALDataset *pDataSet;
1219 if (NULL == pDataSet) {
1222 << CPLGetLastErrorMsg() << endl;
1229 pDriver = GetGDALDriverManager()->GetDriverByName(
"MEM");
1232 if (NULL == pDataSet) {
1235 << CPLGetLastErrorMsg() << endl;
1241 CPLPushErrorHandler(CPLQuietErrorHandler);
1243 CPLPopErrorHandler();
1248 << CPLGetLastErrorMsg() << endl;
1253 if (NULL == pdRaster) {
1259 bool bScaleOutput =
false;
1260 double dRangeScale = 0;
1261 double dDataMin = 0;
1264 double dDataMax = 0;
1270 dDataRange = dDataMax - dDataMin,
1274 dRangeScale = dWriteRange / dDataRange;
1278 bScaleOutput =
true;
1290 switch (nDataItem) {
1300 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetSedimentPlusInterventionTopElev();
1360 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetBeachProtectionFactor();
1371 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetPotentialPlatformErosion();
1375 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetActualPlatformErosion();
1379 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotPotentialPlatformErosion();
1383 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotActualPlatformErosion();
1387 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetPotentialBeachErosion();
1391 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetActualBeachErosion();
1395 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotPotentialBeachErosion();
1399 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotActualBeachErosion();
1407 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotBeachDeposition();
1411 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetSuspendedSediment();
1419 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetUnconsolidatedSediment()->dGetFineDepth();
1423 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetUnconsolidatedSediment()->dGetSandDepth();
1427 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetUnconsolidatedSediment()->dGetCoarseDepth();
1431 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetConsolidatedSediment()->dGetFineDepth();
1435 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetConsolidatedSediment()->dGetSandDepth();
1439 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetConsolidatedSediment()->dGetCoarseDepth();
1443 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetThisIterCliffCollapseErosionFine();
1447 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetThisIterCliffCollapseErosionSand();
1451 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetThisIterCliffCollapseErosionCoarse();
1455 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotCliffCollapseFine();
1459 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotCliffCollapseSand();
1463 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotCliffCollapseCoarse();
1467 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetThisIterCliffCollapseSandTalusDeposition();
1471 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetThisIterCliffCollapseCoarseTalusDeposition();
1475 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotSandTalusDeposition();
1479 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotCoarseTalusDeposition();
1483 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetInterventionHeight();
1488 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetCellDeepWaterWaveAngle();
1497 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetCellDeepWaterWaveHeight();
1506 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetCellDeepWaterWavePeriod();
1531 dTmp =
m_pRasterGrid->m_Cell[nX][nY].bPotentialPlatformErosion();
1541 nTopLayer =
m_pRasterGrid->m_Cell[nX][nY].nGetTopNonZeroLayerAboveBasement();
1552 dTmp =
m_pRasterGrid->m_Cell[nX][nY].nGetLayerAtElev(dElev);
1556 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLandform()->nGetLFCategory();
1559 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLandform()->nGetLFSubCategory();
1564 dTmp =
m_pRasterGrid->m_Cell[nX][nY].nGetInterventionClass();
1568 dTmp = (
m_pRasterGrid->m_Cell[nX][nY].bIsCoastline() ? 1 : 0);
1577 dTmp = (
m_pRasterGrid->m_Cell[nX][nY].bIsInActiveZone() ? 1 : 0);
1585 dTmp =
m_pRasterGrid->m_Cell[nX][nY].nGetShadowZoneNumber();
1589 dTmp =
m_pRasterGrid->m_Cell[nX][nY].nGetDownDriftZoneNumber();
1609 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nTopLayer)->pGetUnconsolidatedSediment()->dGetTotAllSedimentInputDepth();
1613 dTmp = (
m_pRasterGrid->m_Cell[nX][nY].bIsFloodBySetupSurge() ? 1 : 0);
1617 dTmp = (
m_pRasterGrid->m_Cell[nX][nY].bIsFloodBySetupSurgeRunup() ? 1 : 0);
1621 dTmp = (
m_pRasterGrid->m_Cell[nX][nY].bIsFloodLine() ? 1 : 0);
1635 pdRaster[n++] = dTmp;
1640 GDALRasterBand *pBand = pDataSet->GetRasterBand(1);
1652 switch (nDataItem) {
1700 strUnits =
"degrees";
1704 strUnits =
"cumecs";
1731 CPLPushErrorHandler(CPLQuietErrorHandler);
1732 pBand->SetUnitType(strUnits.c_str());
1733 CPLPopErrorHandler();
1736 CPLPushErrorHandler(CPLQuietErrorHandler);
1744 CPLPopErrorHandler();
1747 string strDesc(*strPlotTitle);
1751 ststrTmp << dElev <<
"m, ";
1752 strDesc.append(ststrTmp.str());
1755 strDesc.append(
" at ");
1759 pBand->SetDescription(strDesc.c_str());
1762 char **papszCategoryNames = NULL;
1764 switch (nDataItem) {
1766 papszCategoryNames = CSLAddString(papszCategoryNames,
"Basement");
1767 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 0");
1768 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 1");
1769 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 2");
1770 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 3");
1771 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 4");
1772 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 5");
1773 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 6");
1774 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 7");
1775 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 8");
1776 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 9");
1780 papszCategoryNames = CSLAddString(papszCategoryNames,
"None");
1781 papszCategoryNames = CSLAddString(papszCategoryNames,
"Hinterland");
1782 papszCategoryNames = CSLAddString(papszCategoryNames,
"Sea");
1783 papszCategoryNames = CSLAddString(papszCategoryNames,
"Cliff");
1784 papszCategoryNames = CSLAddString(papszCategoryNames,
"Drift");
1785 papszCategoryNames = CSLAddString(papszCategoryNames,
"Intervention");
1787 papszCategoryNames = CSLAddString(papszCategoryNames,
"Cliff on Coastline");
1788 papszCategoryNames = CSLAddString(papszCategoryNames,
"Inland Cliff");
1790 papszCategoryNames = CSLAddString(papszCategoryNames,
"Mixed Drift");
1791 papszCategoryNames = CSLAddString(papszCategoryNames,
"Talus");
1792 papszCategoryNames = CSLAddString(papszCategoryNames,
"Beach");
1793 papszCategoryNames = CSLAddString(papszCategoryNames,
"Dunes");
1797 papszCategoryNames = CSLAddString(papszCategoryNames,
"None");
1798 papszCategoryNames = CSLAddString(papszCategoryNames,
"Structural");
1799 papszCategoryNames = CSLAddString(papszCategoryNames,
"Non-Structural");
1803 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not coastline");
1804 papszCategoryNames = CSLAddString(papszCategoryNames,
"Coastline");
1808 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not coastline-normal profile");
1809 papszCategoryNames = CSLAddString(papszCategoryNames,
"Coastline-normal profile");
1813 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not in active zone");
1814 papszCategoryNames = CSLAddString(papszCategoryNames,
"In active zone");
1818 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not polygon");
1819 papszCategoryNames = CSLAddString(papszCategoryNames,
"In polygon");
1823 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not in shadow zone");
1824 papszCategoryNames = CSLAddString(papszCategoryNames,
"In shadow zone");
1828 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not in shadow downdrift zone");
1829 papszCategoryNames = CSLAddString(papszCategoryNames,
"In shadow downdrift zone");
1833 papszCategoryNames = CSLAddString(papszCategoryNames,
"Updrift movement of unconsolidated sediment ");
1834 papszCategoryNames = CSLAddString(papszCategoryNames,
"Downdrift movement of unconsolidated sediment");
1838 papszCategoryNames = CSLAddString(papszCategoryNames,
"Inundated by swl setup and surge ");
1839 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not inundated by swl setup and surge");
1843 papszCategoryNames = CSLAddString(papszCategoryNames,
"Inundated by swl setup, surge and runup ");
1844 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not inundated by swl setup, surge and runup");
1848 papszCategoryNames = CSLAddString(papszCategoryNames,
"Intersection line of inundation ");
1849 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not inundated by swl waves and runup");
1853 CPLPushErrorHandler(CPLQuietErrorHandler);
1854 pBand->SetCategoryNames(papszCategoryNames);
1855 CPLPopErrorHandler();
1859 CPLSetThreadLocalConfigOption(
"GDAL_NUM_THREADS",
"ALL_CPUS");
1861 if (CE_Failure == pBand->RasterIO(GF_Write, 0, 0,
m_nXGridSize,
m_nYGridSize, pdRaster,
m_nXGridSize,
m_nYGridSize, GDT_Float64, 0, 0, NULL)) {
1864 << CPLGetLastErrorMsg() << endl;
1870 double dMin, dMax, dMean, dStdDev;
1871 CPLPushErrorHandler(CPLQuietErrorHandler);
1872 pBand->ComputeStatistics(
false, &dMin, &dMax, &dMean, &dStdDev, NULL, NULL);
1873 CPLPopErrorHandler();
1876 CPLPushErrorHandler(CPLQuietErrorHandler);
1877 pBand->SetStatistics(dMin, dMax, dMean, dStdDev);
1878 CPLPopErrorHandler();
1883 GDALDataset *pOutDataSet = pOutDriver->CreateCopy(strFilePathName.c_str(), pDataSet, FALSE,
m_papszGDALRasterOptions, NULL, NULL);
1885 if (NULL == pOutDataSet) {
1888 << CPLGetLastErrorMsg() << endl;
1893 GDALClose(pOutDataSet);
1897 GDALClose(pDataSet);
1917 int nGridSize = nXSize * nYSize;
1919 unsigned int nPoints =
static_cast<unsigned int>(pVdX->size());
1933 vector<double> VdOutX(nGridSize, 0);
1934 vector<double> VdOutY(nGridSize, 0);
1937 for (
int nDirection = 0; nDirection < 2; nDirection++) {
1941 GDALGridLinearOptions *pOptions =
new GDALGridLinearOptions();
1943 pOptions->dfRadius = -1;
1944 pOptions->nSizeOfStructure =
sizeof(GDALGridLinearOptions);
1947 CPLSetThreadLocalConfigOption(
"GDAL_NUM_THREADS",
"ALL_CPUS");
1958 if (nDirection == 0) {
1959 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);
1963 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);
1978 if (nRet == CE_Failure) {
1979 cerr << CPLGetLastErrorMsg() << endl;
1983 if (nDirection == 0) {
1987 for (
unsigned int n = 0; n < VdOutX.size(); n++) {
1988 if (isnan(VdOutX[n]))
1991 else if (
tAbs(VdOutX[n]) > 1e10)
2007 for (
unsigned int n = 0; n < VdOutY.size(); n++) {
2008 if (isnan(VdOutY[n]))
2011 else if (
tAbs(VdOutY[n]) > 1e10)
2150 for (
int nY = 0; nY < nYSize; nY++) {
2151 for (
int nX = 0; nX < nXSize; nX++) {
2155 if (
m_pRasterGrid->m_Cell[nActualX][nActualY].bIsInContiguousSea()) {
2159 double dDeepWaterWaveHeight =
m_pRasterGrid->m_Cell[nActualX][nActualY].dGetCellDeepWaterWaveHeight();
2160 m_pRasterGrid->m_Cell[nActualX][nActualY].SetWaveHeight(dDeepWaterWaveHeight);
2162 double dDeepWaterWaveAngle =
m_pRasterGrid->m_Cell[nActualX][nActualY].dGetCellDeepWaterWaveAngle();
2163 m_pRasterGrid->m_Cell[nActualX][nActualY].SetWaveAngle(dDeepWaterWaveAngle);
2168 double dWaveHeightX;
2169 double dWaveHeightY;
2173 dWaveHeightX = dXAvg;
2176 dWaveHeightX = VdOutX[n];
2179 dWaveHeightY = dYAvg;
2182 dWaveHeightY = VdOutY[n];
2185 double dWaveHeight = sqrt((dWaveHeightX * dWaveHeightX) + (dWaveHeightY * dWaveHeightY));
2186 double dWaveDir = atan2(dWaveHeightX, dWaveHeightY) * (180 /
PI);
2192 m_pRasterGrid->m_Cell[nActualX][nActualY].SetWaveHeight(dWaveHeight);
2196 double dSeaDepth =
m_pRasterGrid->m_Cell[nActualX][nActualY].dGetSeaDepth();
2199 m_pRasterGrid->m_Cell[nActualX][nActualY].SetInActiveZone(
true);
2207 n =
tMin(n,
static_cast<int>(VdOutX.size() - 1));
2286 CPLSetThreadLocalConfigOption(
"GDAL_NUM_THREADS",
"ALL_CPUS");
2289 GDALGridInverseDistanceToAPowerOptions *pOptions =
new GDALGridInverseDistanceToAPowerOptions();
2290 pOptions->dfAngle = 0;
2291 pOptions->dfAnisotropyAngle = 0;
2292 pOptions->dfAnisotropyRatio = 0;
2293 pOptions->dfPower = 2;
2294 pOptions->dfSmoothing = 50;
2295 pOptions->dfRadius1 = 0;
2296 pOptions->dfRadius2 = 0;
2297 pOptions->nMaxPoints = 12;
2298 pOptions->nMinPoints = 3;
2308 if (pContext == NULL) {
2315 int nRet = GDALGridContextProcess(pContext, 0,
m_nXGridSize - 1, 0,
m_nYGridSize - 1,
m_nXGridSize,
m_nYGridSize, GDT_Float64, dHeightOut, NULL, NULL);
2317 if (nRet == CE_Failure) {
2318 delete[] dHeightOut;
2324 GDALGridContextFree(pContext);
2330 if (pContext == NULL) {
2331 delete[] dHeightOut;
2338 nRet = GDALGridContextProcess(pContext, 0,
m_nXGridSize - 1, 0,
m_nYGridSize - 1,
m_nXGridSize,
m_nYGridSize, GDT_Float64, dAngleOut, NULL, NULL);
2340 if (nRet == CE_Failure) {
2341 delete[] dHeightOut;
2348 GDALGridContextFree(pContext);
2354 if (pContext == NULL) {
2361 nRet = GDALGridContextProcess(pContext, 0,
m_nXGridSize - 1, 0,
m_nYGridSize - 1,
m_nXGridSize,
m_nYGridSize, GDT_Float64, dPeriopdOut, NULL, NULL);
2363 if (nRet == CE_Failure) {
2364 delete[] dPeriopdOut;
2370 GDALGridContextFree(pContext);
2391 if (isfinite(dHeightOut[n])) {
2392 VdHeight.push_back(dHeightOut[n]);
2394 dAvgHeight += dHeightOut[n];
2402 if (isfinite(dAngleOut[n])) {
2403 VdAngle.push_back(dAngleOut[n]);
2405 dAvgAngle += dAngleOut[n];
2413 if (isfinite(dPeriopdOut[n])) {
2414 VdPeriod.push_back(dPeriopdOut[n]);
2416 dAvgPeriod += dPeriopdOut[n];
2430 dAvgHeight /= nValidHeight;
2431 dAvgAngle /= nValidAngle;
2432 dAvgPeriod /= nValidPeriod;
2436 delete[] dHeightOut;
2438 delete[] dPeriopdOut;
2446 m_pRasterGrid->m_Cell[nX][nY].SetCellDeepWaterWaveHeight(dAvgHeight);
2449 m_pRasterGrid->m_Cell[nX][nY].SetCellDeepWaterWaveHeight(VdHeight[n]);
2452 m_pRasterGrid->m_Cell[nX][nY].SetCellDeepWaterWaveAngle(dAvgAngle);
2455 m_pRasterGrid->m_Cell[nX][nY].SetCellDeepWaterWaveAngle(VdAngle[n]);
2458 m_pRasterGrid->m_Cell[nX][nY].SetCellDeepWaterWavePeriod(dAvgPeriod);
2461 m_pRasterGrid->m_Cell[nX][nY].SetCellDeepWaterWavePeriod(VdPeriod[n]);
Geometry class used to represent 2D point objects with integer coordinates.
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_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.
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.
double m_dSouthEastXExtCRS
int m_nMissingValue
Used by CoastalME for integer missing values.
vector< CGeomCoastPolygon * > m_pVCoastPolygon
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]
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
vector< string > m_VstrGDALICSDriverDesc
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
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
bool m_bGISSaveDigitsSequential
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.
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
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
bool m_bGDALCanWriteFloat
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.
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 CGeomRasterGrid definitions.
Contains CSimulation definitions.
double dRound(double const d)
Correctly rounds doubles.