From f36097ee81d632cf098d9af5fbb6834d5354532b Mon Sep 17 00:00:00 2001
From: Thomas <purcell@fhi-berlin.mpg.de>
Date: Thu, 10 Jun 2021 07:55:49 +0000
Subject: [PATCH] Update schedules to be all monotonic

This was throwing seg faults if it was not monotonic
---
 src/feature_creation/feature_space/FeatureSpace.cpp | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/feature_creation/feature_space/FeatureSpace.cpp b/src/feature_creation/feature_space/FeatureSpace.cpp
index 1c72bdef..a7d7d55d 100644
--- a/src/feature_creation/feature_space/FeatureSpace.cpp
+++ b/src/feature_creation/feature_space/FeatureSpace.cpp
@@ -347,14 +347,14 @@ void FeatureSpace::generate_reparam_feature_set(const std::vector<double>& prop)
             std::shared_ptr<NLOptimizer> optimizer_param = nlopt_wrapper::get_optimizer(_project_type, _task_sizes, _prop, _max_phi, _max_param_depth);
             std::shared_ptr<NLOptimizer> optimizer_reparam = nlopt_wrapper::get_optimizer(_project_type, _task_sizes, prop, _max_phi, _max_param_depth);
 
-            #pragma omp for schedule(dynamic)
+            #pragma omp for schedule(monotonic: dynamic)
             for(auto feat_1 = _phi_reparam.begin() + _start_gen_reparam.back() + _mpi_comm->rank(); feat_1 < _phi_reparam.end(); feat_1 += _mpi_comm->size())
             {
                 generate_non_param_feats(feat_1, next_phi_private, _phi_reparam.begin(), feat_ind, l_bound, u_bound);
                 generate_param_feats(feat_1, next_phi_private, _phi_reparam.begin(), feat_ind, optimizer_param, l_bound, u_bound);
             }
 
-            #pragma omp for schedule(dynamic)
+            #pragma omp for schedule(monotonic: dynamic)
             for(auto feat_1 = _phi.begin() + _start_gen[nn-1] + _mpi_comm->rank(); feat_1 < _phi.begin() + _end_no_params[nn-1]; feat_1 += _mpi_comm->size())
             {
                 generate_reparam_feats(feat_1, next_phi_private, feat_ind, optimizer_reparam, l_bound, u_bound);
@@ -572,7 +572,7 @@ void FeatureSpace::generate_feature_space()
             std::vector<node_ptr> next_phi_private;
             std::shared_ptr<NLOptimizer> optimizer = nlopt_wrapper::get_optimizer(_project_type, _task_sizes, _prop, _max_phi, _max_param_depth);
 
-            #pragma omp for schedule(dynamic)
+            #pragma omp for schedule(monotonic: dynamic)
             for(auto feat_1 = _phi.begin() + _start_gen.back() + _mpi_comm->rank(); feat_1 < _phi.end(); feat_1 += _mpi_comm->size())
             {
                 generate_non_param_feats(feat_1, next_phi_private, _phi.begin(), feat_ind, l_bound, u_bound);
@@ -586,7 +586,7 @@ void FeatureSpace::generate_feature_space()
         #pragma omp parallel firstprivate(feat_ind, l_bound, u_bound)
         {
             std::vector<node_ptr> next_phi_private;
-            #pragma omp for schedule(dynamic)
+            #pragma omp for schedule(monotonic: dynamic)
             for(auto feat_1 = _phi.begin() + _start_gen.back() + _mpi_comm->rank(); feat_1 < _phi.end(); feat_1 += _mpi_comm->size())
             {
                 generate_non_param_feats(feat_1, next_phi_private, _phi.begin(), feat_ind, l_bound, u_bound);
@@ -967,7 +967,7 @@ void FeatureSpace::project_generated(const double* prop, const int size, std::ve
         }
         #endif
 
-        #pragma omp for schedule(dynamic)
+        #pragma omp for schedule(monotonic: dynamic)
         for(auto feat = _phi.begin() + _start_gen.back() + _mpi_comm->rank(); feat < _phi.end(); feat += _mpi_comm->size())
         {
             unsigned long int feat_ind = _phi.size() + _n_sis_select * (omp_get_num_threads() + _mpi_comm->size());
-- 
GitLab