36using std::stringstream;
56 if (NULL == pGDALDataset)
72 if (strTmp.find(
"meter") == string::npos)
118 if (!
bFPIsEqual(dCellSideX, dCellSideY, 1e-2))
144 GDALRasterBand* pGDALBand = pGDALDataset->GetRasterBand(1);
145 int nBlockXSize = 0, nBlockYSize = 0;
146 pGDALBand->GetBlockSize(&nBlockXSize, &nBlockYSize);
150 string strUnits = pGDALBand->GetUnitType();
151 if ((! strUnits.empty()) && (strUnits.find(
"m") == string::npos))
159 CPLPushErrorHandler(CPLQuietErrorHandler);
160 double dMissingValue = pGDALBand->GetNoDataValue();
161 CPLPopErrorHandler();
176 if (NULL == pdScanline)
179 cerr <<
ERR <<
"cannot allocate memory for " <<
m_nXGridSize <<
" x 1D array" << endl;
187 if (CE_Failure == pGDALBand->RasterIO(GF_Read, 0, j,
m_nXGridSize, 1, pdScanline,
m_nXGridSize, 1, GDT_Float64, 0, 0, NULL))
197 double dTmp = pdScanline[i];
207 GDALClose(pGDALDataset);
221 vector<CGeom2DIPoint> VPtiBoundingBoxCorner;
232 if (!
m_pRasterGrid->m_Cell[nX][nY].bBasementElevIsMissingValue())
235 VPtiBoundingBoxCorner.push_back(PtiTmp);
258 if (!
m_pRasterGrid->m_Cell[nX][nY].bBasementElevIsMissingValue())
261 VPtiBoundingBoxCorner.push_back(PtiTmp);
271 LogStream <<
m_ulIter <<
": east (right) edge of bounding box not found" << endl;
284 if (!
m_pRasterGrid->m_Cell[nX][nY].bBasementElevIsMissingValue())
287 VPtiBoundingBoxCorner.push_back(PtiTmp);
297 LogStream <<
m_ulIter <<
": south (bottom) edge of bounding box not found" << endl;
310 if (!
m_pRasterGrid->m_Cell[nX][nY].bBasementElevIsMissingValue())
313 VPtiBoundingBoxCorner.push_back(PtiTmp);
328 for (
int nX = VPtiBoundingBoxCorner[0].nGetX(); nX <= VPtiBoundingBoxCorner[1].nGetX(); nX++)
331 for (
int nY = VPtiBoundingBoxCorner[0].nGetY(); nY <
m_nYGridSize; nY++)
333 if (
m_pRasterGrid->m_Cell[nX][nY].bBasementElevIsMissingValue())
352 LogStream <<
m_ulIter <<
": could not find a bounding box edge cell for grid column " << nX << endl;
358 for (
int nY = VPtiBoundingBoxCorner[1].nGetY(); nY <= VPtiBoundingBoxCorner[2].nGetY(); nY++)
361 for (
int nX = VPtiBoundingBoxCorner[1].nGetX(); nX >= 0; nX--)
363 if (
m_pRasterGrid->m_Cell[nX][nY].bBasementElevIsMissingValue())
382 LogStream <<
m_ulIter <<
": could not find a bounding box edge cell for grid row " << nY << endl;
388 for (
int nX = VPtiBoundingBoxCorner[2].nGetX(); nX >= VPtiBoundingBoxCorner[3].nGetX(); nX--)
391 for (
int nY = VPtiBoundingBoxCorner[2].nGetY(); nY >= 0; nY--)
393 if (
m_pRasterGrid->m_Cell[nX][nY].bBasementElevIsMissingValue())
412 LogStream <<
m_ulIter <<
": could not find a bounding box edge cell for grid column " << nX << endl;
418 for (
int nY = VPtiBoundingBoxCorner[3].nGetY(); nY >= VPtiBoundingBoxCorner[0].nGetY(); nY--)
420 for (
int nX = VPtiBoundingBoxCorner[3].nGetX(); nX <
m_nXGridSize - 1; nX++)
423 if (
m_pRasterGrid->m_Cell[nX][nY].bBasementElevIsMissingValue())
442 LogStream <<
m_ulIter <<
": could not find a bounding box edge cell for grid row " << nY << endl;
516 if (! strGISFile.empty())
519 GDALDataset* pGDALDataset =
static_cast<GDALDataset*
>(GDALOpen(strGISFile.c_str(), GA_ReadOnly));
520 if (NULL == pGDALDataset)
523 cerr <<
ERR <<
"cannot open " << strGISFile <<
" for input: " << CPLGetLastErrorMsg() << endl;
528 strDriverCode = pGDALDataset->GetDriver()->GetDescription();
529 strDriverDesc = pGDALDataset->GetDriver()->GetMetadataItem(GDAL_DMD_LONGNAME);
530 strProjection = pGDALDataset->GetProjectionRef();
533 double dGeoTransform[6];
534 if (CE_Failure == pGDALDataset->GetGeoTransform(dGeoTransform))
537 cerr <<
ERR << CPLGetLastErrorMsg() <<
" in " << strGISFile << endl;
542 int nTmpXSize = pGDALDataset->GetRasterXSize();
550 int nTmpYSize = pGDALDataset->GetRasterYSize();
574 double dTmpResX =
tAbs(dGeoTransform[1]);
578 cerr <<
ERR <<
"cell size in X direction (" << dTmpResX <<
") in " << strGISFile <<
" differs from cell size in of basement DEM (" <<
m_dCellSide <<
")" << endl;
582 double dTmpResY =
tAbs(dGeoTransform[5]);
586 cerr <<
ERR <<
"cell size in Y direction (" << dTmpResY <<
") in " << strGISFile <<
" differs from cell size of basement DEM (" <<
m_dCellSide <<
")" << endl;
591 GDALRasterBand* pGDALBand = pGDALDataset->GetRasterBand(1);
592 int nBlockXSize = 0, nBlockYSize = 0;
593 pGDALBand->GetBlockSize(&nBlockXSize, &nBlockYSize);
594 strDataType = GDALGetDataTypeName(pGDALBand->GetRasterDataType());
681 if (strTmp.find(
"int") != string::npos)
684 CPLPushErrorHandler(CPLQuietErrorHandler);
685 int nMissingValue =
static_cast<int>(pGDALBand->GetNoDataValue());
686 CPLPopErrorHandler();
690 cerr <<
" " <<
NOTE <<
"NODATA value in " << strGISFile <<
" is " << nMissingValue <<
"\n instead using CoatalME's default integer NODATA value " <<
m_nMissingValue << endl;
696 CPLPushErrorHandler(CPLQuietErrorHandler);
697 double dMissingValue = pGDALBand->GetNoDataValue();
698 CPLPopErrorHandler();
702 cerr <<
" " <<
NOTE <<
"NODATA value in " << strGISFile <<
" is " << dMissingValue <<
"\n instead using CoastalME's default floating-point NODATA value " <<
m_dMissingValue << endl;
708 if (NULL == pdScanline)
711 cerr <<
ERR <<
"cannot allocate memory for " <<
m_nXGridSize <<
" x 1D array" << endl;
720 if (CE_Failure == pGDALBand->RasterIO(GF_Read, 0, nY,
m_nXGridSize, 1, pdScanline,
m_nXGridSize, 1, GDT_Float64, 0, 0, NULL))
723 cerr <<
ERR << CPLGetLastErrorMsg() <<
" in " << strGISFile << endl;
735 nTmp =
static_cast<int>(pdScanline[nX]);
743 m_pRasterGrid->m_Cell[nX][nY].pGetLandform()->SetLFCategory(nTmp);
748 nTmp =
static_cast<int>(pdScanline[nX]);
761 dTmp = pdScanline[nX];
774 dTmp = pdScanline[nX];
787 dTmp = pdScanline[nX];
795 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetUnconsolidatedSediment()->SetFineDepth(dTmp);
800 dTmp = pdScanline[nX];
808 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetUnconsolidatedSediment()->SetSandDepth(dTmp);
813 dTmp = pdScanline[nX];
821 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetUnconsolidatedSediment()->SetCoarseDepth(dTmp);
826 dTmp = pdScanline[nX];
834 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetConsolidatedSediment()->SetFineDepth(dTmp);
839 dTmp = pdScanline[nX];
847 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetConsolidatedSediment()->SetSandDepth(dTmp);
852 dTmp = pdScanline[nX];
860 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetConsolidatedSediment()->SetCoarseDepth(dTmp);
867 GDALClose(pGDALDataset);
874 cerr <<
WARN << nMissing <<
" missing values in " << strGISFile << endl;
875 LogStream <<
WARN << nMissing <<
" missing values in " << strGISFile << endl;
887 bool bIsInteger =
false;
892 strLayer =
"_layer_";
894 stringstream ststrTmp;
896 strLayer.append(to_string(nLayer + 1));
994 strFilePathName.append(strLayer);
999 strFilePathName.append(strLayer);
1004 strFilePathName.append(strLayer);
1009 strFilePathName.append(strLayer);
1014 strFilePathName.append(strLayer);
1019 strFilePathName.append(strLayer);
1108 ststrTmp <<
"_" << dElev <<
"_";
1109 strFilePathName.append(ststrTmp.str());
1177 strFilePathName.append(
"_");
1188 strFilePathName.append(ststrTmp.str());
1193 strFilePathName.append(
".");
1201 GDALDriver* pDriver;
1202 GDALDataset* pDataSet;
1222 if (NULL == pDataSet)
1226 << CPLGetLastErrorMsg() << endl;
1233 pDriver = GetGDALDriverManager()->GetDriverByName(
"MEM");
1235 if (NULL == pDataSet)
1239 << CPLGetLastErrorMsg() << endl;
1245 CPLPushErrorHandler(CPLQuietErrorHandler);
1247 CPLPopErrorHandler();
1255 if (NULL == pdRaster)
1262 bool bScaleOutput =
false;
1263 double dRangeScale = 0;
1264 double dDataMin = 0;
1268 double dDataMax = 0;
1274 dDataRange = dDataMax - dDataMin,
1278 dRangeScale = dWriteRange / dDataRange;
1282 bScaleOutput =
true;
1306 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetSedimentPlusInterventionTopElev();
1350 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetBeachProtectionFactor();
1360 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetPotentialPlatformErosion();
1364 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetActualPlatformErosion();
1368 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotPotentialPlatformErosion();
1372 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotActualPlatformErosion();
1376 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetPotentialBeachErosion();
1380 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetActualBeachErosion();
1384 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotPotentialBeachErosion();
1388 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotActualBeachErosion();
1396 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotBeachDeposition();
1400 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetSuspendedSediment();
1408 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetUnconsolidatedSediment()->dGetFineDepth();
1412 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetUnconsolidatedSediment()->dGetSandDepth();
1416 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetUnconsolidatedSediment()->dGetCoarseDepth();
1420 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetConsolidatedSediment()->dGetFineDepth();
1424 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetConsolidatedSediment()->dGetSandDepth();
1428 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nLayer)->pGetConsolidatedSediment()->dGetCoarseDepth();
1432 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetThisIterCliffCollapseErosionFine();
1436 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetThisIterCliffCollapseErosionSand();
1440 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetThisIterCliffCollapseErosionCoarse();
1444 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotCliffCollapseFine();
1448 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotCliffCollapseSand();
1452 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotCliffCollapseCoarse();
1456 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetThisIterCliffCollapseSandTalusDeposition();
1460 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetThisIterCliffCollapseCoarseTalusDeposition();
1464 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotSandTalusDeposition();
1468 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetTotCoarseTalusDeposition();
1472 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetInterventionHeight();
1477 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetCellDeepWaterWaveAngle();
1484 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetCellDeepWaterWaveHeight();
1491 dTmp =
m_pRasterGrid->m_Cell[nX][nY].dGetCellDeepWaterWavePeriod();
1513 dTmp =
m_pRasterGrid->m_Cell[nX][nY].bPotentialPlatformErosion();
1523 nTopLayer =
m_pRasterGrid->m_Cell[nX][nY].nGetTopNonZeroLayerAboveBasement();
1532 dTmp =
m_pRasterGrid->m_Cell[nX][nY].nGetLayerAtElev(dElev);
1536 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLandform()->nGetLFCategory();
1538 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLandform()->nGetLFSubCategory();
1542 dTmp =
m_pRasterGrid->m_Cell[nX][nY].nGetInterventionClass();
1546 dTmp = (
m_pRasterGrid->m_Cell[nX][nY].bIsCoastline() ? 1 : 0);
1550 dTmp = (
m_pRasterGrid->m_Cell[nX][nY].bIsProfile() ? 1 : 0);
1554 dTmp = (
m_pRasterGrid->m_Cell[nX][nY].bIsInActiveZone() ? 1 : 0);
1562 dTmp =
m_pRasterGrid->m_Cell[nX][nY].nGetShadowZoneNumber();
1566 dTmp =
m_pRasterGrid->m_Cell[nX][nY].nGetDownDriftZoneNumber();
1583 dTmp =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nTopLayer)->pGetUnconsolidatedSediment()->dGetTotAllSedimentInputDepth();
1587 dTmp = (
m_pRasterGrid->m_Cell[nX][nY].bIsFloodBySetupSurge() ? 1 : 0);
1591 dTmp = (
m_pRasterGrid->m_Cell[nX][nY].bIsFloodBySetupSurgeRunup() ? 1 : 0);
1595 dTmp = (
m_pRasterGrid->m_Cell[nX][nY].bIsFloodLine() ? 1 : 0);
1609 pdRaster[n++] = dTmp;
1614 GDALRasterBand* pBand = pDataSet->GetRasterBand(1);
1673 strUnits =
"degrees";
1677 strUnits =
"cumecs";
1703 CPLPushErrorHandler(CPLQuietErrorHandler);
1704 pBand->SetUnitType(strUnits.c_str());
1705 CPLPopErrorHandler();
1708 CPLPushErrorHandler(CPLQuietErrorHandler);
1713 CPLPopErrorHandler();
1716 string strDesc(*strPlotTitle);
1720 ststrTmp << dElev <<
"m, ";
1721 strDesc.append(ststrTmp.str());
1723 strDesc.append(
" at ");
1727 pBand->SetDescription(strDesc.c_str());
1730 char** papszCategoryNames = NULL;
1734 papszCategoryNames = CSLAddString(papszCategoryNames,
"Basement");
1735 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 0");
1736 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 1");
1737 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 2");
1738 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 3");
1739 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 4");
1740 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 5");
1741 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 6");
1742 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 7");
1743 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 8");
1744 papszCategoryNames = CSLAddString(papszCategoryNames,
"Layer 9");
1748 papszCategoryNames = CSLAddString(papszCategoryNames,
"None");
1749 papszCategoryNames = CSLAddString(papszCategoryNames,
"Hinterland");
1750 papszCategoryNames = CSLAddString(papszCategoryNames,
"Sea");
1751 papszCategoryNames = CSLAddString(papszCategoryNames,
"Cliff");
1752 papszCategoryNames = CSLAddString(papszCategoryNames,
"Drift");
1753 papszCategoryNames = CSLAddString(papszCategoryNames,
"Intervention");
1755 papszCategoryNames = CSLAddString(papszCategoryNames,
"Cliff on Coastline");
1756 papszCategoryNames = CSLAddString(papszCategoryNames,
"Inland Cliff");
1758 papszCategoryNames = CSLAddString(papszCategoryNames,
"Mixed Drift");
1759 papszCategoryNames = CSLAddString(papszCategoryNames,
"Talus");
1760 papszCategoryNames = CSLAddString(papszCategoryNames,
"Beach");
1761 papszCategoryNames = CSLAddString(papszCategoryNames,
"Dunes");
1765 papszCategoryNames = CSLAddString(papszCategoryNames,
"None");
1766 papszCategoryNames = CSLAddString(papszCategoryNames,
"Structural");
1767 papszCategoryNames = CSLAddString(papszCategoryNames,
"Non-Structural");
1771 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not coastline");
1772 papszCategoryNames = CSLAddString(papszCategoryNames,
"Coastline");
1776 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not coastline-normal profile");
1777 papszCategoryNames = CSLAddString(papszCategoryNames,
"Coastline-normal profile");
1781 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not in active zone");
1782 papszCategoryNames = CSLAddString(papszCategoryNames,
"In active zone");
1786 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not polygon");
1787 papszCategoryNames = CSLAddString(papszCategoryNames,
"In polygon");
1791 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not in shadow zone");
1792 papszCategoryNames = CSLAddString(papszCategoryNames,
"In shadow zone");
1796 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not in shadow downdrift zone");
1797 papszCategoryNames = CSLAddString(papszCategoryNames,
"In shadow downdrift zone");
1801 papszCategoryNames = CSLAddString(papszCategoryNames,
"Updrift movement of unconsolidated sediment ");
1802 papszCategoryNames = CSLAddString(papszCategoryNames,
"Downdrift movement of unconsolidated sediment");
1806 papszCategoryNames = CSLAddString(papszCategoryNames,
"Inundated by swl setup and surge ");
1807 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not inundated by swl setup and surge");
1811 papszCategoryNames = CSLAddString(papszCategoryNames,
"Inundated by swl setup, surge and runup ");
1812 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not inundated by swl setup, surge and runup");
1816 papszCategoryNames = CSLAddString(papszCategoryNames,
"Intersection line of inundation ");
1817 papszCategoryNames = CSLAddString(papszCategoryNames,
"Not inundated by swl waves and runup");
1821 CPLPushErrorHandler(CPLQuietErrorHandler);
1822 pBand->SetCategoryNames(papszCategoryNames);
1823 CPLPopErrorHandler();
1826 if (CE_Failure == pBand->RasterIO(GF_Write, 0, 0,
m_nXGridSize,
m_nYGridSize, pdRaster,
m_nXGridSize,
m_nYGridSize, GDT_Float64, 0, 0, NULL))
1829 cerr <<
ERR <<
"cannot write data for " <<
m_strRasterGISOutFormat <<
" file named " << strFilePathName << endl << CPLGetLastErrorMsg() << endl;
1835 double dMin, dMax, dMean, dStdDev;
1836 CPLPushErrorHandler(CPLQuietErrorHandler);
1837 pBand->ComputeStatistics(
false, &dMin, &dMax, &dMean, &dStdDev, NULL, NULL);
1838 CPLPopErrorHandler();
1841 CPLPushErrorHandler(CPLQuietErrorHandler);
1842 pBand->SetStatistics(dMin, dMax, dMean, dStdDev);
1843 CPLPopErrorHandler();
1849 GDALDataset* pOutDataSet = pOutDriver->CreateCopy(strFilePathName.c_str(), pDataSet, FALSE,
m_papszGDALRasterOptions, NULL, NULL);
1850 if (NULL == pOutDataSet)
1854 << CPLGetLastErrorMsg() << endl;
1859 GDALClose(pOutDataSet);
1863 GDALClose(pDataSet);
1884 int nGridSize = nXSize * nYSize;
1886 unsigned int nPoints =
static_cast<unsigned int>(pVdX->size());
1900 vector<double> VdOutX(nGridSize, 0);
1901 vector<double> VdOutY(nGridSize, 0);
1904 for (
int nDirection = 0; nDirection < 2; nDirection++)
1907 GDALGridLinearOptions* pOptions =
new GDALGridLinearOptions();
1909 pOptions->dfRadius = -1;
1910 pOptions->nSizeOfStructure =
sizeof(GDALGridLinearOptions);
1920 if (nDirection == 0)
1922 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);
1926 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);
1941 if (nRet == CE_Failure)
1943 cerr << CPLGetLastErrorMsg() << endl;
1947 if (nDirection == 0)
1952 for (
unsigned int n = 0; n < VdOutX.size(); n++)
1954 if (isnan(VdOutX[n]))
1956 else if (
tAbs(VdOutX[n]) > 1e10)
1972 for (
unsigned int n = 0; n < VdOutY.size(); n++)
1974 if (isnan(VdOutY[n]))
1976 else if (
tAbs(VdOutY[n]) > 1e10)
2114 for (
int nY = 0; nY < nYSize; nY++)
2116 for (
int nX = 0; nX < nXSize; nX++)
2121 if (
m_pRasterGrid->m_Cell[nActualX][nActualY].bIsInContiguousSea())
2127 double dDeepWaterWaveHeight =
m_pRasterGrid->m_Cell[nActualX][nActualY].dGetCellDeepWaterWaveHeight();
2128 m_pRasterGrid->m_Cell[nActualX][nActualY].SetWaveHeight(dDeepWaterWaveHeight);
2130 double dDeepWaterWaveAngle =
m_pRasterGrid->m_Cell[nActualX][nActualY].dGetCellDeepWaterWaveAngle();
2131 m_pRasterGrid->m_Cell[nActualX][nActualY].SetWaveAngle(dDeepWaterWaveAngle);
2136 double dWaveHeightX;
2137 double dWaveHeightY;
2141 dWaveHeightX = dXAvg;
2143 dWaveHeightX = VdOutX[n];
2146 dWaveHeightY = dYAvg;
2148 dWaveHeightY = VdOutY[n];
2151 double dWaveHeight = sqrt((dWaveHeightX * dWaveHeightX) + (dWaveHeightY * dWaveHeightY));
2152 double dWaveDir = atan2(dWaveHeightX, dWaveHeightY) * (180 /
PI);
2158 m_pRasterGrid->m_Cell[nActualX][nActualY].SetWaveHeight(dWaveHeight);
2162 double dSeaDepth =
m_pRasterGrid->m_Cell[nActualX][nActualY].dGetSeaDepth();
2164 m_pRasterGrid->m_Cell[nActualX][nActualY].SetInActiveZone(
true);
2171 n =
tMin(n,
static_cast<int>(VdOutX.size()-1));
2251 GDALGridInverseDistanceToAPowerOptions* pOptions =
new GDALGridInverseDistanceToAPowerOptions();
2252 pOptions->dfAngle = 0;
2253 pOptions->dfAnisotropyAngle = 0;
2254 pOptions->dfAnisotropyRatio = 0;
2255 pOptions->dfPower = 3;
2256 pOptions->dfSmoothing = 100;
2257 pOptions->dfRadius1 = 0;
2258 pOptions->dfRadius2 = 0;
2259 pOptions->nMaxPoints = 0;
2260 pOptions->nMinPoints = 0;
2270 if (pContext == NULL)
2278 int nRet = GDALGridContextProcess(pContext, 0,
m_nXGridSize - 1, 0,
m_nYGridSize - 1,
m_nXGridSize,
m_nYGridSize, GDT_Float64, dHeightOut, NULL, NULL);
2279 if (nRet == CE_Failure)
2281 delete[] dHeightOut;
2287 GDALGridContextFree(pContext);
2292 if (pContext == NULL)
2294 delete[] dHeightOut;
2301 nRet = GDALGridContextProcess(pContext, 0,
m_nXGridSize - 1, 0,
m_nYGridSize - 1,
m_nXGridSize,
m_nYGridSize, GDT_Float64, dAngleOut, NULL, NULL);
2302 if (nRet == CE_Failure)
2304 delete[] dHeightOut;
2311 GDALGridContextFree(pContext);
2316 if (pContext == NULL)
2324 nRet = GDALGridContextProcess(pContext, 0,
m_nXGridSize - 1, 0,
m_nYGridSize - 1,
m_nXGridSize,
m_nYGridSize, GDT_Float64, dPeriopdOut, NULL, NULL);
2325 if (nRet == CE_Failure)
2327 delete[] dPeriopdOut;
2333 GDALGridContextFree(pContext);
2356 if (isfinite(dHeightOut[n]))
2358 VdHeight.push_back(dHeightOut[n]);
2360 dAvgHeight += dHeightOut[n];
2368 if (isfinite(dAngleOut[n]))
2370 VdAngle.push_back(dAngleOut[n]);
2372 dAvgAngle += dAngleOut[n];
2380 if (isfinite(dPeriopdOut[n]))
2382 VdPeriod.push_back(dPeriopdOut[n]);
2384 dAvgPeriod += dPeriopdOut[n];
2398 dAvgHeight /= nValidHeight;
2399 dAvgAngle /= nValidAngle;
2400 dAvgPeriod /= nValidPeriod;
2404 delete[] dHeightOut;
2406 delete[] dPeriopdOut;
2415 m_pRasterGrid->m_Cell[nX][nY].SetCellDeepWaterWaveHeight(dAvgHeight);
2417 m_pRasterGrid->m_Cell[nX][nY].SetCellDeepWaterWaveHeight(VdHeight[n]);
2420 m_pRasterGrid->m_Cell[nX][nY].SetCellDeepWaterWaveAngle(dAvgAngle);
2422 m_pRasterGrid->m_Cell[nX][nY].SetCellDeepWaterWaveAngle(VdAngle[n]);
2425 m_pRasterGrid->m_Cell[nX][nY].SetCellDeepWaterWavePeriod(dAvgPeriod);
2427 m_pRasterGrid->m_Cell[nX][nY].SetCellDeepWaterWavePeriod(VdPeriod[n]);
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 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.
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
The value used for integer missing values.
int m_nYGridSize
The size of the grid in the y direction.
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
Missing value.
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
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 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
GDAL driver description for the initial unconsolidated coarse sediment GIS data.
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_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 RASTER_PLOT_TOTAL_CLIFF_COLLAPSE_DEPOSIT_COARSE
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
int const RASTER_PLOT_TOTAL_CLIFF_COLLAPSE_DEPOSIT_SAND
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
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
string const RASTER_TOTAL_CLIFF_COLLAPSE_EROSION_SAND_NAME
int const RASTER_PLOT_CLIFF_COLLAPSE_DEPOSIT_SAND
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_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_BEACH_PROTECTION
int const RASTER_PLOT_AVG_SEA_DEPTH
int const RASTER_PLOT_CLIFF_COLLAPSE_DEPOSIT_COARSE
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_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
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
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
int const RASTER_PLOT_NORMAL
Contains CRWCoast definitions.
Contains CGeomRasterGrid definitions.
Contains CSimulation definitions.
double dRound(double const d)
Correctly rounds doubles.