@@ -470,7 +470,7 @@ ModelRun SVDASolver::iteration_upgrd(RunManagerAbstract &run_manager, Terminatio
470470 }
471471 }
472472
473- vector<double > lambda_vec = base_lambda_vec ;
473+ vector<double > lambda_vec = pest_scenario. get_pestpp_options (). get_base_lambda_vec () ;
474474 std::sort (lambda_vec.begin (), lambda_vec.end ());
475475 auto iter = std::unique (lambda_vec.begin (), lambda_vec.end ());
476476 lambda_vec.resize (std::distance (lambda_vec.begin (), iter));
@@ -699,6 +699,45 @@ ModelRun SVDASolver::iteration_upgrd(RunManagerAbstract &run_manager, Terminatio
699699 {
700700 throw runtime_error (" all upgrade runs failed" );
701701 }
702+
703+ // Check if best_lambda is at the edge of lambda_vec
704+
705+ // regrab lambda_vec
706+ vector<double > lambda_vec = pest_scenario.get_pestpp_options ().get_base_lambda_vec ();
707+ std::sort (lambda_vec.begin (), lambda_vec.end ());
708+ auto iter = std::unique (lambda_vec.begin (), lambda_vec.end ());
709+ lambda_vec.resize (std::distance (lambda_vec.begin (), iter));
710+
711+ auto last_lambda = lambda_vec.back ();
712+ auto first_lambda = lambda_vec.front ();
713+ file_manager.rec_ofstream () << " Checking to see if best lambda is at the edge" << std::endl;
714+ double lambda_spacing_factor = 10.0 ; // doing powers of 10 for now
715+ bool extended = false ;
716+
717+ if (best_lambda == last_lambda)
718+ {
719+ // Add a new larger lambda
720+ double new_lambda = last_lambda * lambda_spacing_factor;
721+ if (std::find (lambda_vec.begin (), lambda_vec.end (), new_lambda) == lambda_vec.end ())
722+ {
723+ lambda_vec.push_back (new_lambda);
724+ extended = true ;
725+ file_manager.rec_ofstream () << " *** Extending lambda_vec: added larger lambda " << new_lambda << std::endl;
726+ }
727+ }
728+ else if (best_lambda == first_lambda)
729+ {
730+ // Add a new smaller lambda
731+ double new_lambda = first_lambda / lambda_spacing_factor;
732+ if (std::find (lambda_vec.begin (), lambda_vec.end (), new_lambda) == lambda_vec.end ())
733+ {
734+ lambda_vec.push_back (new_lambda);
735+ extended = true ;
736+ file_manager.rec_ofstream () << " *** Extending lambda_vec: added smaller lambda " << new_lambda << std::endl;
737+ }
738+ }
739+ std::sort (lambda_vec.begin (), lambda_vec.end ());
740+ pest_scenario.get_pestpp_options_ptr ()->set_base_lambda_vec (lambda_vec);
702741 return best_upgrade_run;
703742}
704743
0 commit comments