const double& PipeBundle::ConjugateDeadCache(void) { for(this->FirstChild(); this->UntilFinalChild(); this->NextChild()) area_dead_cache += (*child)->ConjugateDeadCache(); area_alive -= area_dead_cache; // この一行追加しただけ (2002.05.23) return area_dead_cache; } const double PipeBundle::EstimateVolumeChange(const double& recycle_rate) { if (status == DYING) return 0.0; double volume_change(0.0); for(this->FirstChild(); this->UntilFinalChild(); this->NextChild()) volume_change += (*child)->EstimateVolumeChange(recycle_rate); // with setting area_alive_new // ------------------------------------------------------------------ area_alive_new = 0.0; if (foliage != NULL) area_alive_new += foliage->AreaAsPipe(); if (pipe_terminal != NULL) area_alive_new += pipe_terminal->AreaNew(); for(this->FirstChild(); this->UntilFinalChild(); this->NextChild()) area_alive_new += (*child)->area_alive_new; // ------------------------------------------------------------------ const double recycled_area(recycle_rate * area_dead_cache); area_dead_change = area_dead_cache - recycled_area; // ------------------------------------------------------------------ const double area_alive_change(area_alive_new - area_alive); if (area_alive_change < recycled_area) area_dead_change += recycled_area - area_alive_change; else volume_change += length * (area_alive_change - recycled_area); // ------------------------------------------------------------------ return volume_change; //including children's growth } void PipeBundle::ChangeSize(void) { for(this->FirstChild(); this->UntilFinalChild(); this->NextChild()) (*child)->ChangeSize(); area_alive = area_alive_new; area_dead += area_dead_change; area_dead_cache = area_dead_change = 0.0; volume_alive = length * area_alive; volume_total = volume_alive + length * area_dead; if (area_alive > 0.0) tube_maker->Generate(tube, this); else this->SetAllDying(); }