void Iterative::DoBuild() { time_steps_ = model_->managers().time_step()->ordered_time_steps(); // Set the default process labels for the time step for this phase for (auto time_step : time_steps_) time_step->SetInitialisationProcessLabels(label_, time_step->process_labels()); // handle any new processes we want to insert for (string insert : insert_processes_) { vector<string> pieces; boost::split(pieces, insert, boost::is_any_of("()="), boost::token_compress_on); string target_process = pieces.size() == 3 ? pieces[1] : ""; string new_process = pieces.size() == 3 ? pieces[2] : pieces[1]; auto time_step = model_->managers().time_step()->GetTimeStep(pieces[0]); vector<string> process_labels = time_step->initialisation_process_labels(label_); if (target_process == "") { process_labels.insert(process_labels.begin(), new_process); } else { vector<string>::iterator iter = std::find(process_labels.begin(), process_labels.end(), target_process); if (iter == process_labels.end()) LOG_ERROR_P(PARAM_INSERT_PROCESSES) << " process " << target_process << " does not exist in time step " << time_step->label(); process_labels.insert(iter, new_process); } time_step->SetInitialisationProcessLabels(label_, process_labels); } // handle the excludes we've specified for (string exclude : exclude_processes_) { unsigned count = 0; for (auto time_step : time_steps_) { vector<string> process_labels = time_step->initialisation_process_labels(label_); unsigned size_before = process_labels.size(); process_labels.erase(std::remove_if(process_labels.begin(), process_labels.end(), [exclude](string& ex) { return exclude == ex; }), process_labels.end()); unsigned diff = size_before - process_labels.size(); time_step->SetInitialisationProcessLabels(label_, process_labels); count += diff; } if (count == 0) LOG_ERROR_P(PARAM_EXCLUDE_PROCESSES) << " process " << exclude << " does not exist in any time steps to be excluded. Please check your spelling"; } if (convergence_years_.size() != 0) { std::sort(convergence_years_.begin(), convergence_years_.end()); if ((*convergence_years_.rbegin()) != years_) convergence_years_.push_back(years_); } // Build our partition vector<string> categories = model_->categories()->category_names(); partition_.Init(categories); cached_partition_.Init(categories); }
void Iterative::DoBuild() { LOG_TRACE(); time_steps_ = model_->managers().time_step()->ordered_time_steps(); // Set the default process labels for the time step for this phase for (auto time_step : time_steps_) time_step->SetInitialisationProcessLabels(label_, time_step->process_labels()); // handle any new processes we want to insert for (string insert : insert_processes_) { vector<string> pieces; boost::split(pieces, insert, boost::is_any_of("()="), boost::token_compress_on); string target_process = pieces.size() == 3 ? pieces[1] : ""; string new_process = pieces.size() == 3 ? pieces[2] : pieces[1]; auto time_step = model_->managers().time_step()->GetTimeStep(pieces[0]); vector<string> process_labels = time_step->initialisation_process_labels(label_); if (target_process == "") { process_labels.push_back(new_process); } else { vector<string>::iterator iter = std::find(process_labels.begin(), process_labels.end(), target_process); if (iter == process_labels.end()) LOG_ERROR_P(PARAM_INSERT_PROCESSES) << " process " << target_process << " does not exist in time step " << time_step->label(); process_labels.insert(iter, new_process); } time_step->SetInitialisationProcessLabels(label_, process_labels); } // handle the excludes we've specified for (string exclude : exclude_processes_) { unsigned count = 0; for (auto time_step : time_steps_) { vector<string> process_labels = time_step->initialisation_process_labels(label_); unsigned size_before = process_labels.size(); process_labels.erase(std::remove_if(process_labels.begin(), process_labels.end(), [exclude](string& ex) { return exclude == ex; }), process_labels.end()); unsigned diff = size_before - process_labels.size(); time_step->SetInitialisationProcessLabels(label_, process_labels); count += diff; } if (count == 0) LOG_ERROR_P(PARAM_EXCLUDE_PROCESSES) << " process " << exclude << " does not exist in any time steps to be excluded. Please check your spelling"; } if (convergence_years_.size() != 0) { std::sort(convergence_years_.begin(), convergence_years_.end()); if ((*convergence_years_.rbegin()) != years_) convergence_years_.push_back(years_); } // Build our partition vector<string> categories = model_->categories()->category_names(); partition_.Init(categories); cached_partition_.Init(categories); /* // Find any BH_recruitment process in the annual cycle unsigned i = 0; for (auto time_step : model_->managers().time_step()->ordered_time_steps()) { for (auto process : time_step->processes()) { if (process->process_type() == ProcessType::kRecruitment && process->type() == PARAM_RECRUITMENT_BEVERTON_HOLT) { LOG_FINEST() << "Found a BH process!!!!"; recruitment_process_.push_back(dynamic_cast<RecruitmentBevertonHolt*>(process)); if (!recruitment_process_[i]) LOG_CODE_ERROR() << "BevertonHolt Recruitment exists but dynamic cast pointer cannot be made, if (!recruitment) "; i++; } else if (process->process_type() == ProcessType::kRecruitment && process->type() == PARAM_RECRUITMENT_BEVERTON_HOLT_WITH_DEVIATIONS) { LOG_FINEST() << "Found a BH process!!!!"; recruitment_process_with_devs_.push_back(dynamic_cast<RecruitmentBevertonHoltWithDeviations*>(process)); if (!recruitment_process_with_devs_[i]) LOG_CODE_ERROR() << "BevertonHolt Recruitment with deviations exists but dynamic cast pointer cannot be made, if (!recruitment) "; i++; } } } */ }