public override int harvestStand(Stand stand) { //printf("before harvest standID: %d, stocking: %lf\n",stand->getId(),computeStandStocking(stand)); SitesCut += stand.numberOfActiveSites(); //printf("sitesinstand:%d SitesCut:%d Target:%d\n",stand->numberOfActiveSites(),SitesCut,itsTargetCut); Ldpoint pt = new Ldpoint(); int m; int k; int i; int j; double TmpStockingS; double TmpStockingS_avg; double Stocking_toCut; double shareCut_ACell; TmpStockingS = 0; for (StandIterator it = new StandIterator(stand); it.moreSites(); it.gotoNextSite()) { pt = it.getCurrentSite(); i = pt.y; j = pt.x; TmpStockingS += GetStockinginACell(i, j); } TmpStockingS = TmpStockingS / stand.numberOfActiveSites(); //TmpStockingS_avg = TmpStockingS / pCoresites->CellSize/pCoresites->CellSize/stand->numberOfActiveSites()*10000; TmpStockingS_avg = TmpStockingS / stand.numberOfActiveSites(); if (TmpStockingS <= Mininum_Stocking) { } else { //Cut trees here //printf("Enough to Harvest\n"); StandsCut++; itsStands.Add(stand.getId()); //Add By Qia on June 01 2012 Stocking_toCut = TmpStockingS - TargetStocking; //Stocking_toCut = Stocking_toCut * pCoresites->CellSize * pCoresites->CellSize * stand->numberOfActiveSites()/10000; for (StandIterator it = new StandIterator(stand); it.moreSites(); it.gotoNextSite()) { pt = it.getCurrentSite(); i = pt.y; j = pt.x; shareCut_ACell = GetStockinginACell(i, j) / TmpStockingS * Stocking_toCut; if (shareCut_ACell > 0.0) { //CutShareStockinginACell(i,j,shareCut_ACell); //SitesCut++; CutShareStockinginACell_LifeSpanPercent(i, j, shareCut_ACell); BoundedPocketStandHarvester.pHarvestsites[i, j].harvestType = (short)GetUserInputId(); BoundedPocketStandHarvester.pHarvestsites[i, j].lastHarvest = (short)BoundedPocketStandHarvester.currentDecade; } else { //pHarvestsites->SetValueHarvestBA(i,j,shareCut_ACell); } } } //return StandsCut; //printf("after harvest standID: %d, stocking: %lf\n",stand->getId(),computeStandStocking(stand)); return(1); }
public void reharvest() { Stand stand = new Stand(); for (int ii = 0; ii < itsStands.Count; ii++) { stand.Copy(BoundedPocketStandHarvester.pstands[itsStands[ii]]); SitesCut += stand.numberOfActiveSites(); double stocking_debug = computeStandStocking(stand); Ldpoint pt = new Ldpoint(); int m; int k; int i; int j; double TmpStockingS; double TmpStockingS_avg; double Stocking_toCut; double shareCut_ACell; TmpStockingS = 0; for (StandIterator it = new StandIterator(stand); it.moreSites(); it.gotoNextSite()) { pt = it.getCurrentSite(); i = pt.y; j = pt.x; TmpStockingS += GetStockinginACell(i, j); } TmpStockingS = TmpStockingS / stand.numberOfActiveSites(); if (TmpStockingS <= Mininum_Stocking) { } else { //Cut trees here StandsCut++; Stocking_toCut = TmpStockingS - TargetStocking; for (StandIterator it = new StandIterator(stand); it.moreSites(); it.gotoNextSite()) { pt = it.getCurrentSite(); i = pt.y; j = pt.x; shareCut_ACell = GetStockinginACell(i, j) / TmpStockingS * Stocking_toCut; if (shareCut_ACell > 0.0) { CutShareStockinginACell_LifeSpanPercent(i, j, shareCut_ACell); BoundedPocketStandHarvester.pHarvestsites[i, j].harvestType = (short)GetUserInputId(); BoundedPocketStandHarvester.pHarvestsites[i, j].lastHarvest = (short)BoundedPocketStandHarvester.currentDecade; } else { //pHarvestsites->SetValueHarvestBA(i,j,shareCut_ACell); } } } } }
public override int harvestStand(Stand stand) { SitesCut += stand.numberOfActiveSites(); Ldpoint pt = new Ldpoint(); int i; int j; double TmpBasalAreaS; double TmpBasalAreaS_avg; double BA_toCut; double shareCut_ACell; TmpBasalAreaS = 0; for (StandIterator it = new StandIterator(stand); it.moreSites(); it.gotoNextSite()) { pt = it.getCurrentSite(); i = pt.y; j = pt.x; TmpBasalAreaS += GetBAinACell(i, j); } TmpBasalAreaS_avg = TmpBasalAreaS / BoundedPocketStandHarvester.pCoresites.CellSize / BoundedPocketStandHarvester.pCoresites.CellSize / stand.numberOfActiveSites() * 10000; if (TmpBasalAreaS_avg <= Mininum_BA) { } else { //Cut trees here //printf("Enough to Harvest\n"); StandsCut++; itsStands.Add(stand.getId()); //Add By Qia on June 01 2012 BA_toCut = TmpBasalAreaS_avg - TargetVolume; if (BA_toCut < 0.0) { BA_toCut = TmpBasalAreaS_avg; } BA_toCut = BA_toCut * BoundedPocketStandHarvester.pCoresites.CellSize * BoundedPocketStandHarvester.pCoresites.CellSize * stand.numberOfActiveSites() / 10000; for (StandIterator it = new StandIterator(stand); it.moreSites(); it.gotoNextSite()) { pt = it.getCurrentSite(); i = pt.y; j = pt.x; shareCut_ACell = GetBAinACell(i, j) / TmpBasalAreaS * BA_toCut; if (shareCut_ACell > 0) { double shareCut = 0.0; shareCut = CutShareBAinACell_LifeSpanPercent(i, j, shareCut_ACell); BoundedPocketStandHarvester.pHarvestsites[i, j].harvestType = (short)GetUserInputId(); BoundedPocketStandHarvester.pHarvestsites[i, j].lastHarvest = (short)BoundedPocketStandHarvester.currentDecade; } else { BoundedPocketStandHarvester.pHarvestsites.SetValueHarvestBA(i, j, shareCut_ACell); } } } //return StandsCut; return(1); }
public void reharvest() { Stand stand = new Stand(); //Console.WriteLine(itsStands.Count); //Console.ReadLine(); for (int ii = 0; ii < itsStands.Count; ii++) { stand.Copy(BoundedPocketStandHarvester.pstands[itsStands[ii]]); SitesCut += stand.numberOfActiveSites(); Ldpoint pt = new Ldpoint(); int m; int k; int i; int j; double TmpBasalAreaS; double TmpBasalAreaS_avg; double BA_toCut; double shareCut_ACell; TmpBasalAreaS = 0; for (StandIterator it = new StandIterator(stand); it.moreSites(); it.gotoNextSite()) { pt = it.getCurrentSite(); i = pt.y; j = pt.x; TmpBasalAreaS += GetBAinACell(i, j); } TmpBasalAreaS_avg = TmpBasalAreaS / BoundedPocketStandHarvester.pCoresites.CellSize / BoundedPocketStandHarvester.pCoresites.CellSize / stand.numberOfActiveSites() * 10000; if (TmpBasalAreaS_avg <= Mininum_BA) { } else { //Cut trees here StandsCut++; BA_toCut = TmpBasalAreaS_avg - TargetVolume; BA_toCut = BA_toCut * BoundedPocketStandHarvester.pCoresites.CellSize * BoundedPocketStandHarvester.pCoresites.CellSize * stand.numberOfActiveSites() / 10000; for (StandIterator it = new StandIterator(stand); it.moreSites(); it.gotoNextSite()) { pt = it.getCurrentSite(); i = pt.y; j = pt.x; shareCut_ACell = GetBAinACell(i, j) / TmpBasalAreaS * BA_toCut; // Console.WriteLine(shareCut_ACell); if (shareCut_ACell > 0) { CutShareBAinACell_LifeSpanPercent(i, j, shareCut_ACell); BoundedPocketStandHarvester.pHarvestsites[i, j].harvestType = (short)GetUserInputId(); BoundedPocketStandHarvester.pHarvestsites[i, j].lastHarvest = (short)BoundedPocketStandHarvester.currentDecade; } else { BoundedPocketStandHarvester.pHarvestsites.SetValueHarvestBA(i, j, shareCut_ACell); } } } } }
public override int harvestStand(Stand stand) { SitesCut += stand.numberOfActiveSites(); //printf("sitesinstand:%d SitesCut:%d Target:%d\n",stand->numberOfActiveSites(),SitesCut,itsTargetCut); SiteHarvester theSiteHarvester = new SiteHarvester(GetUserInputId(), getRemovalMask(), getReport(), getDuration()); MultiplePocketStandHarvester theStandHarvester = new MultiplePocketStandHarvester(stand, itsStandProportion, itsMeanGroupSize, itsStandardDeviation, theSiteHarvester); int standCut = theStandHarvester.Harvest(); if (standCut > 0) { stand.reserve(); itsStands.Add(stand.getId()); itsTotalNumberOfStands++; } return(1); }
public double computeStandStocking(Stand stand) { Ldpoint p = new Ldpoint(); Landis.Extension.Succession.Landispro.site site; double count = 0; int m; int k; double num_trees = 0; //N double Diameters = 0; //D double Diameters_square = 0; //D^2 double x = BoundedPocketStandHarvester.pCoresites.stocking_x_value; double y = BoundedPocketStandHarvester.pCoresites.stocking_y_value; double z = BoundedPocketStandHarvester.pCoresites.stocking_z_value; Landis.Extension.Succession.Landispro.landunit l; for (StandIterator it = new StandIterator(stand); it.moreSites(); it.gotoNextSite()) { p = it.getCurrentSite(); l = BoundedPocketStandHarvester.pCoresites.locateLanduPt((uint)p.y, (uint)p.x); site = BoundedPocketStandHarvester.pCoresites[(uint)p.y, (uint)p.x]; count += 1; for (k = 1; k <= BoundedPocketStandHarvester.pCoresites.SpecNum; k++) { for (m = 1; m <= site.specAtt(k).Longevity / BoundedPocketStandHarvester.pCoresites.SuccessionTimeStep; m++) { num_trees += site.SpecieIndex(k).getTreeNum(m, k); Diameters += BoundedPocketStandHarvester.pCoresites.GetGrowthRates(k, m, l.LtID) * site.SpecieIndex(k).getTreeNum(m, k) / 2.54; Diameters_square += BoundedPocketStandHarvester.pCoresites.GetGrowthRates(k, m, l.LtID) * BoundedPocketStandHarvester.pCoresites.GetGrowthRates(k, m, l.LtID) * site.SpecieIndex(k).getTreeNum(m, k) / 2.54 / 2.54; } } } return((x * num_trees + y * Diameters + z * Diameters_square) / (BoundedPocketStandHarvester.pCoresites.CellSize * BoundedPocketStandHarvester.pCoresites.CellSize / 4046.86) / stand.numberOfActiveSites()); }