254int CSimulation::nDoCliffCollapse(
int const nCoast,
CRWCliff* pCliff,
double& dFineCollapse,
double& dSandCollapse,
double& dCoarseCollapse,
double& dPreCollapseCliffElev,
double& dPostCollapseCliffElev)
261 int const nPoly =
m_pRasterGrid->m_Cell[nX][nY].nGetPolygonID();
273 double const dOrigCliffTopElev =
m_pRasterGrid->m_Cell[nX][nY].dGetSedimentTopElev();
279 int const nNotchLayer =
m_pRasterGrid->m_Cell[nX][nY].nGetLayerAtElev(dNotchElev);
284 LogStream <<
m_ulIter <<
": " <<
WARN <<
"in nDoCliffCollapse(), [" << nX <<
"][" << nY <<
"] nNotchLayer is in basement" << endl;
289 LogStream <<
m_ulIter <<
": " <<
WARN <<
"in nDoCliffCollapse(), [" << nX <<
"][" << nY <<
"] has nNotchLayer above sediment top" << endl;
292 else if (nNotchLayer < 0)
301 int const nTopLayer =
m_pRasterGrid->m_Cell[nX][nY].nGetTopLayerAboveBasement();
306 LogStream <<
m_ulIter <<
": " <<
WARN <<
"in nDoCliffCollapse(), [" << nX <<
"][" << nY <<
"] nTopLayer = " << nTopLayer << endl;
319 dPreCollapseCliffElev =
m_pRasterGrid->m_Cell[nX][nY].dGetSedimentTopElev();
322 double dAvailable = 0;
323 double dFineConsLost = 0;
324 double dFineUnconsLost = 0;
325 double dSandConsLost = 0;
326 double dSandUnconsLost = 0;
327 double dCoarseConsLost = 0;
328 double dCoarseUnconsLost = 0;
331 for (
int n = nTopLayer; n > nNotchLayer; n--)
334 dAvailable =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(n)->pGetUnconsolidatedSediment()->dGetFineDepth() -
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(n)->pGetUnconsolidatedSediment()->dGetNotchFineLost();
338 dFineCollapse += dAvailable;
339 dFineUnconsLost += dAvailable;
340 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(n)->pGetUnconsolidatedSediment()->SetFineDepth(0);
341 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(n)->pGetUnconsolidatedSediment()->SetNotchFineLost(0);
344 dAvailable =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(n)->pGetUnconsolidatedSediment()->dGetSandDepth() -
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(n)->pGetUnconsolidatedSediment()->dGetNotchSandLost();
348 dSandCollapse += dAvailable;
349 dSandUnconsLost += dAvailable;
350 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(n)->pGetUnconsolidatedSediment()->SetSandDepth(0);
351 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(n)->pGetUnconsolidatedSediment()->SetNotchSandLost(0);
354 dAvailable =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(n)->pGetUnconsolidatedSediment()->dGetCoarseDepth() -
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(n)->pGetUnconsolidatedSediment()->dGetNotchCoarseLost();
358 dCoarseCollapse += dAvailable;
359 dCoarseUnconsLost += dAvailable;
360 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(n)->pGetUnconsolidatedSediment()->SetCoarseDepth(0);
361 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(n)->pGetUnconsolidatedSediment()->SetNotchCoarseLost(0);
365 dAvailable =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(n)->pGetConsolidatedSediment()->dGetFineDepth() -
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(n)->pGetConsolidatedSediment()->dGetNotchFineLost();
369 dFineCollapse += dAvailable;
370 dFineConsLost += dAvailable;
371 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(n)->pGetConsolidatedSediment()->SetFineDepth(0);
372 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(n)->pGetConsolidatedSediment()->SetNotchFineLost(0);
375 dAvailable =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(n)->pGetConsolidatedSediment()->dGetSandDepth() -
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(n)->pGetConsolidatedSediment()->dGetNotchSandLost();
379 dSandCollapse += dAvailable;
380 dSandConsLost += dAvailable;
381 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(n)->pGetConsolidatedSediment()->SetSandDepth(0);
382 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(n)->pGetConsolidatedSediment()->SetNotchSandLost(0);
385 dAvailable =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(n)->pGetConsolidatedSediment()->dGetCoarseDepth() -
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(n)->pGetConsolidatedSediment()->dGetNotchCoarseLost();
389 dCoarseCollapse += dAvailable;
390 dCoarseConsLost += dAvailable;
391 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(n)->pGetConsolidatedSediment()->SetCoarseDepth(0);
392 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(n)->pGetConsolidatedSediment()->SetNotchCoarseLost(0);
397 double const dNotchLayerTop =
m_pRasterGrid->m_Cell[nX][nY].dCalcLayerElev(nNotchLayer);
398 double const dNotchLayerThickness =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nNotchLayer)->dGetTotalThickness();
399 double const dNotchLayerFracRemoved = (dNotchLayerTop - dNotchElev) / dNotchLayerThickness;
402 double dFineDepth =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nNotchLayer)->pGetUnconsolidatedSediment()->dGetFineDepth();
403 dAvailable = dFineDepth -
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nNotchLayer)->pGetUnconsolidatedSediment()->dGetNotchFineLost();
408 double const dLost = dAvailable * dNotchLayerFracRemoved;
409 dFineCollapse += dLost;
410 dFineUnconsLost += dLost;
411 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nNotchLayer)->pGetUnconsolidatedSediment()->SetFineDepth(dFineDepth - dLost);
412 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nNotchLayer)->pGetUnconsolidatedSediment()->SetNotchFineLost(0);
415 double dSandDepth =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nNotchLayer)->pGetUnconsolidatedSediment()->dGetSandDepth();
416 dAvailable = dSandDepth -
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nNotchLayer)->pGetUnconsolidatedSediment()->dGetNotchSandLost();
421 double const dLost = dAvailable * dNotchLayerFracRemoved;
422 dSandCollapse += dLost;
423 dSandUnconsLost += dLost;
424 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nNotchLayer)->pGetUnconsolidatedSediment()->SetSandDepth(dSandDepth - dLost);
425 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nNotchLayer)->pGetUnconsolidatedSediment()->SetNotchSandLost(0);
428 double dCoarseDepth =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nNotchLayer)->pGetUnconsolidatedSediment()->dGetCoarseDepth();
429 dAvailable = dCoarseDepth -
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nNotchLayer)->pGetUnconsolidatedSediment()->dGetNotchCoarseLost();
434 double const dLost = dAvailable * dNotchLayerFracRemoved;
435 dCoarseCollapse += dLost;
436 dCoarseUnconsLost += dLost;
437 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nNotchLayer)->pGetUnconsolidatedSediment()->SetCoarseDepth(dCoarseDepth - dLost);
438 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nNotchLayer)->pGetUnconsolidatedSediment()->SetNotchCoarseLost(0);
442 dFineDepth =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nNotchLayer)->pGetConsolidatedSediment()->dGetFineDepth();
443 dAvailable = dFineDepth -
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nNotchLayer)->pGetConsolidatedSediment()->dGetNotchFineLost();
448 double const dLost = dAvailable * dNotchLayerFracRemoved;
449 dFineCollapse += dLost;
450 dFineConsLost += dLost;
451 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nNotchLayer)->pGetConsolidatedSediment()->SetFineDepth(dFineDepth - dLost);
452 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nNotchLayer)->pGetConsolidatedSediment()->SetNotchFineLost(0);
455 dSandDepth =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nNotchLayer)->pGetConsolidatedSediment()->dGetSandDepth();
456 dAvailable = dSandDepth -
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nNotchLayer)->pGetConsolidatedSediment()->dGetNotchSandLost();
461 double const dLost = dAvailable * dNotchLayerFracRemoved;
462 dSandCollapse += dLost;
463 dSandConsLost += dLost;
464 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nNotchLayer)->pGetConsolidatedSediment()->SetSandDepth(dSandDepth - dLost);
465 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nNotchLayer)->pGetConsolidatedSediment()->SetNotchSandLost(0);
468 dCoarseDepth =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nNotchLayer)->pGetConsolidatedSediment()->dGetCoarseDepth();
469 dAvailable = dCoarseDepth -
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nNotchLayer)->pGetConsolidatedSediment()->dGetNotchCoarseLost();
474 double const dLost = dAvailable * dNotchLayerFracRemoved;
475 dCoarseCollapse += dLost;
476 dCoarseConsLost += dLost;
477 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nNotchLayer)->pGetConsolidatedSediment()->SetCoarseDepth(dCoarseDepth - dLost);
478 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nNotchLayer)->pGetConsolidatedSediment()->SetNotchCoarseLost(0);
482 m_pRasterGrid->m_Cell[nX][nY].IncrCliffCollapseErosion(dFineCollapse, dSandCollapse, dCoarseCollapse);
488 dPostCollapseCliffElev =
m_pRasterGrid->m_Cell[nX][nY].dGetSedimentTopElev();
491 LogStream <<
m_ulIter <<
": cliff collapse at [" << nX <<
"][" << nY <<
"], original cliff elevation = " << dOrigCliffTopElev <<
", new cliff elevation = " << dPostCollapseCliffElev <<
", change in elevation = " << dOrigCliffTopElev - dPostCollapseCliffElev << endl;
536 int const nCoastSize =
m_VCoast[nCoast].nGetCoastlineSize();
543 int const nPoly =
m_pRasterGrid->m_Cell[nXCliff][nYCliff].nGetPolygonID();
559 if ((nTalusWidthInCells % 2) == 0)
560 nTalusWidthInCells++;
563 vector<int> VnTalusProfileCoastStartPoint(nCoastSize);
566 VnTalusProfileCoastStartPoint[0] = nStartPoint;
575 if ((nCount % 2) != 0)
576 nTmpPoint = nStartPoint + nSigned;
579 nTmpPoint = nStartPoint - nSigned;
584 if ((nTmpPoint < 0) || (nTmpPoint > (nCoastSize - 1)))
593 VnTalusProfileCoastStartPoint[nn] = nTmpPoint;
597 }
while (nn < nCoastSize);
599 bool bHitFirstCoastPoint =
false;
600 bool bHitLastCoastPoint =
false;
602 double dTotSandToDepositAllProfiles = dSandFromCollapse;
603 double dTotCoarseToDepositAllProfiles = dCoarseFromCollapse;
604 double dTotSandDepositedAllProfiles = 0;
605 double dTotCoarseDepositedAllProfiles = 0;
608 for (
int nDepProfile = 0; nDepProfile < nCoastSize; nDepProfile++)
610 bool bDoSandDepositionOnThisProfile =
false;
611 bool bSandDepositionCompletedOnThisProfile =
false;
612 bool bDoCoarseDepositionOnThisProfile =
false;
613 bool bCoarseDepositionCompletedOnThisProfile =
false;
615 int const nRemainingProfiles =
tMax(1, nTalusWidthInCells - nDepProfile);
621 double dTargetSandToDepositOnThisProfile = (dTotSandToDepositAllProfiles - dTotSandDepositedAllProfiles) / nRemainingProfiles;
622 double dTargetCoarseToDepositOnThisProfile = (dTotCoarseToDepositAllProfiles - dTotCoarseDepositedAllProfiles) / nRemainingProfiles;
625 double dSandProp = 0.5;
626 double dCoarseProp = 1 - dSandProp;
628 if (dTargetSandToDepositOnThisProfile + dTargetCoarseToDepositOnThisProfile > 0)
630 dSandProp = dTargetSandToDepositOnThisProfile / (dTargetSandToDepositOnThisProfile + dTargetCoarseToDepositOnThisProfile);
631 dCoarseProp = 1 - dSandProp;
634 double dSandDepositedOnThisProfile = 0;
635 double dCoarseDepositedOnThisProfile = 0;
637 if (dTotSandToDepositAllProfiles > 0)
639 bDoSandDepositionOnThisProfile =
true;
642 bSandDepositionCompletedOnThisProfile =
true;
646 bSandDepositionCompletedOnThisProfile =
true;
648 if (dTotCoarseToDepositAllProfiles > 0)
650 bDoCoarseDepositionOnThisProfile =
true;
653 bCoarseDepositionCompletedOnThisProfile =
true;
657 bCoarseDepositionCompletedOnThisProfile =
true;
659 if (bSandDepositionCompletedOnThisProfile && bCoarseDepositionCompletedOnThisProfile)
667 int const nThisPoint = VnTalusProfileCoastStartPoint[nDepProfile];
671 bHitFirstCoastPoint =
true;
673 if (nThisPoint == nCoastSize - 1)
674 bHitLastCoastPoint =
true;
686 bool bJustDepositWhatWeCan =
false;
689 int nSeawardOffset = 1;
694 if (bJustDepositWhatWeCan || (bSandDepositionCompletedOnThisProfile && bCoarseDepositionCompletedOnThisProfile))
708 if (dCliffHeightFrac < 1)
722 bJustDepositWhatWeCan =
true;
734 dCliffHeightFrac = 1;
739 if (bHitFirstCoastPoint && bHitLastCoastPoint)
742 LogStream <<
m_ulIter <<
": unable to deposit sufficient unconsolidated talus from cliff collapse at [" << nXCliff <<
"][" << nYCliff <<
"] nStartPoint = " << nStartPoint <<
" nThisPoint = " << nThisPoint << endl <<
"\tnSeawardOffset = " << nSeawardOffset <<
" dCliffHeightFrac = " << dCliffHeightFrac <<
" nDepProfile = " << nDepProfile << endl <<
"\tdTargetSandToDepositOnThisProfile = " << dTargetSandToDepositOnThisProfile <<
" dSandDepositedOnThisProfile = " << dSandDepositedOnThisProfile <<
" dTotSandToDepositAllProfiles = " << dTotSandToDepositAllProfiles <<
" dTotSandDepositedAllProfiles = " << dTotSandDepositedAllProfiles << endl <<
"\tdTargetCoarseToDepositOnThisProfile = " << dTargetCoarseToDepositOnThisProfile <<
" dCoarseDepositedOnThisProfile = " << dCoarseDepositedOnThisProfile <<
" dTotCoarseToDepositAllProfiles = " << dTotCoarseToDepositAllProfiles <<
" dTotCoarseDepositedAllProfiles = " << dTotCoarseDepositedAllProfiles << endl;
748 double const dThisProfileLength = (nTalusProfileLenInCells + nSeawardOffset + 1) *
m_dCellSide;
752 int const nRtn =
nGetCoastNormalEndPoint(nCoast, nThisPoint, nCoastSize, &PtStart, dThisProfileLength, &PtEnd, &PtiEnd,
false);
757 LogStream <<
m_ulIter <<
": unable to deposit sufficient unconsolidated talus from cliff collapse, could not find a solution for the end point of the Dean profile" << endl;
763 if (PtStart == PtEnd)
772 vector<CGeom2DPoint> VTmpProfile;
773 VTmpProfile.push_back(PtStart);
774 VTmpProfile.push_back(PtEnd);
775 vector<CGeom2DIPoint> VCellsUnderProfile;
780 int const nRasterProfileLength =
static_cast<int>(VCellsUnderProfile.size());
783 if (nRasterProfileLength - nSeawardOffset < 3)
789 else if (nRasterProfileLength - nSeawardOffset == 3)
792 bJustDepositWhatWeCan =
true;
795 vector<double> dVProfileNow(nRasterProfileLength, 0);
796 vector<bool> bVProfileValid(nRasterProfileLength,
true);
801 for (
int n = 0; n < nRasterProfileLength; n++)
803 int const nX = VCellsUnderProfile[n].nGetX();
804 int const nY = VCellsUnderProfile[n].nGetY();
806 dVProfileNow[n] =
m_pRasterGrid->m_Cell[nX][nY].dGetSedimentTopElev();
810 bVProfileValid[n] =
false;
814 double const dCliffHeight = dPreCollapseCliffElev - dPostCollapseCliffElev;
815 double const dTalusTopElev = dPostCollapseCliffElev + (dCliffHeight * dCliffHeightFrac);
823 double const dTalusSlopeLength = dThisProfileLength - ((nSeawardOffset - 1) *
m_dCellSide);
832 dA = (dTalusTopElev - dVProfileNow[nRasterProfileLength - 1]) / pow(dTalusSlopeLength,
DEAN_POWER);
835 double const dInc = dTalusSlopeLength / (nRasterProfileLength - nSeawardOffset - 2);
836 vector<double> dVDeanProfile(nRasterProfileLength);
839 CalcDeanProfile(&dVDeanProfile, dInc, dTalusTopElev, dA,
true, nSeawardOffset, dTalusTopElev);
842 double const dTotElevDiff =
dSubtractProfiles(&dVDeanProfile, &dVProfileNow, &bVProfileValid);
873 if (! bJustDepositWhatWeCan && (dTotElevDiff < (dTargetSandToDepositOnThisProfile + dTargetCoarseToDepositOnThisProfile)))
882 for (
int n = 0; n < nRasterProfileLength; n++)
885 if (bDoSandDepositionOnThisProfile)
888 bSandDepositionCompletedOnThisProfile =
true;
891 bSandDepositionCompletedOnThisProfile =
false;
895 if (bDoCoarseDepositionOnThisProfile)
898 bCoarseDepositionCompletedOnThisProfile =
true;
901 bCoarseDepositionCompletedOnThisProfile =
false;
905 if (bSandDepositionCompletedOnThisProfile && bCoarseDepositionCompletedOnThisProfile)
913 int const nX = VCellsUnderProfile[n].nGetX();
914 int const nY = VCellsUnderProfile[n].nGetY();
920 int const nTopLayer =
m_pRasterGrid->m_Cell[nX][nY].nGetTopNonZeroLayerAboveBasement();
929 cerr <<
"All layers have zero thickness" << endl;
934 if (dVDeanProfile[n] > dVProfileNow[n])
937 double dSandToDeposit = 0;
939 if (bDoSandDepositionOnThisProfile)
941 dSandToDeposit = (dVDeanProfile[n] - dVProfileNow[n]) * dSandProp;
942 dSandToDeposit =
tMin(dSandToDeposit, (dTargetSandToDepositOnThisProfile - dSandDepositedOnThisProfile), (dTotSandToDepositAllProfiles - dTotSandDepositedAllProfiles));
944 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nTopLayer)->pGetUnconsolidatedSediment()->AddSandDepth(dSandToDeposit);
949 dSandDepositedOnThisProfile += dSandToDeposit;
950 dTotSandDepositedAllProfiles += dSandToDeposit;
953 double dCoarseToDeposit = 0;
955 if (bDoCoarseDepositionOnThisProfile)
957 dCoarseToDeposit = (dVDeanProfile[n] - dVProfileNow[n]) * dCoarseProp;
958 dCoarseToDeposit =
tMin(dCoarseToDeposit, (dTargetCoarseToDepositOnThisProfile - dCoarseDepositedOnThisProfile), (dTotCoarseToDepositAllProfiles - dTotCoarseDepositedAllProfiles));
960 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nTopLayer)->pGetUnconsolidatedSediment()->AddCoarseDepth(dCoarseToDeposit);
965 dCoarseDepositedOnThisProfile += dCoarseToDeposit;
966 dTotCoarseDepositedAllProfiles += dCoarseToDeposit;
976 m_pRasterGrid->m_Cell[nX][nY].AddSandTalusDeposition(dSandToDeposit);
977 m_pRasterGrid->m_Cell[nX][nY].AddCoarseTalusDeposition(dCoarseToDeposit);
987 else if (dVDeanProfile[n] < dVProfileNow[n])
990 double const dThisLowering = dVProfileNow[n] - dVDeanProfile[n];
993 double const dExistingAvailableFine =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nTopLayer)->pGetUnconsolidatedSediment()->dGetFineDepth();
994 double const dExistingAvailableSand =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nTopLayer)->pGetUnconsolidatedSediment()->dGetSandDepth();
995 double const dExistingAvailableCoarse =
m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nTopLayer)->pGetUnconsolidatedSediment()->dGetCoarseDepth();
998 int const nFineWeight = (dExistingAvailableFine > 0 ? 1 : 0);
999 int const nSandWeight = (dExistingAvailableSand > 0 ? 1 : 0);
1000 int const nCoarseWeight = (dExistingAvailableCoarse > 0 ? 1 : 0);
1010 double const dFine =
tMin(dExistingAvailableFine, dFineLowering);
1011 double const dRemaining = dExistingAvailableFine - dFine;
1014 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nTopLayer)->pGetUnconsolidatedSediment()->SetFineDepth(dRemaining);
1034 double const dSandToErode =
tMin(dExistingAvailableSand, dSandLowering);
1035 double const dRemaining = dExistingAvailableSand - dSandToErode;
1038 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nTopLayer)->pGetUnconsolidatedSediment()->SetSandDepth(dRemaining);
1047 dTargetSandToDepositOnThisProfile += dSandToErode;
1048 dTotSandToDepositAllProfiles += dSandToErode;
1062 double const dCoarseToErode =
tMin(dExistingAvailableCoarse, dCoarseLowering);
1063 double const dRemaining = dExistingAvailableCoarse - dCoarseToErode;
1066 m_pRasterGrid->m_Cell[nX][nY].pGetLayerAboveBasement(nTopLayer)->pGetUnconsolidatedSediment()->SetCoarseDepth(dRemaining);
1075 dTargetCoarseToDepositOnThisProfile += dCoarseToErode;
1076 dTotCoarseToDepositAllProfiles += dCoarseToErode;
1099 if (bDoSandDepositionOnThisProfile)
1102 bSandDepositionCompletedOnThisProfile =
true;
1105 if (bDoCoarseDepositionOnThisProfile)
1108 bCoarseDepositionCompletedOnThisProfile =
true;
1111 if (bSandDepositionCompletedOnThisProfile && bCoarseDepositionCompletedOnThisProfile)
1119 LogStream <<
ERR <<
m_ulIter <<
": non-zero dTotSandToDepositAllProfiles = " << dTotSandToDepositAllProfiles << endl;
1123 LogStream <<
ERR <<
m_ulIter <<
": non-zero dTotCoarseToDepositAllProfiles = " << dTotCoarseToDepositAllProfiles << endl;