diff --git a/optimizer/Comm/CommSplitter.h b/optimizer/Comm/CommSplitter.h index 0808522675ed4649a330a29e77bd21794822396b..dd223dced1e2246632ac8646fa070ec4a9ce19d0 100644 --- a/optimizer/Comm/CommSplitter.h +++ b/optimizer/Comm/CommSplitter.h @@ -77,9 +77,10 @@ public: MPI_Comm mpiComm() const { return world_comm_; } int globalRank() const { return global_rank_; } - int PilotRank() const { return Strategy_t::poller_; } + int pilotRank() const { return Strategy_t::poller_; } int getLeader() const { return Strategy_t::leader_; } + int getNrWorkerGroups() const { return Strategy_t::getNrWorkerGroups();} /// construct comm bundle and return Comm::Bundle_t getBundle() const { diff --git a/optimizer/Comm/Splitter/ManyMasterSplit.h b/optimizer/Comm/Splitter/ManyMasterSplit.h index 94831f48fbc136ad457310965a9c8c3c3d1847f8..5ab2c092430d6efd31dbb3cfd8cb9a3a922e05ba 100644 --- a/optimizer/Comm/Splitter/ManyMasterSplit.h +++ b/optimizer/Comm/Splitter/ManyMasterSplit.h @@ -32,7 +32,7 @@ public: {} - void split() { + virtual void split() { parseArguments(); @@ -94,6 +94,10 @@ public: leader_ = 1; } + virtual int getNrWorkerGroups() const { + return (num_procs_ - 2 * num_masters_) / num_coworkers_worker_; + } + private: size_t num_masters_; diff --git a/optimizer/Comm/Splitter/SplitStrategy.h b/optimizer/Comm/Splitter/SplitStrategy.h index 4c1dac9a436db28320507e015686d3e4e7a458c7..934b073db063e7988868af32148fe65b016fe0e7 100644 --- a/optimizer/Comm/Splitter/SplitStrategy.h +++ b/optimizer/Comm/Splitter/SplitStrategy.h @@ -43,6 +43,9 @@ public: */ virtual void split() = 0; + /// Get number of worker groups + virtual int getNrWorkerGroups() const = 0; + MPI_Comm getComm() const { return comm_; } int getRank() const { return rank_; } @@ -53,10 +56,6 @@ public: int getLeader() const { return leader_; } int getPoller() const { return poller_; } - std::vector<int> getWorkers() const { return workers_; } - std::vector<int> getOptimizers() const { return optimizers_; } - std::vector<int> getCoworkers() const { return coworkers_; } - private: @@ -83,18 +82,6 @@ protected: /// every core can specifies a master int poller_; - - /// used in master <-> workers communicator - std::vector<int> workers_; - - /// used in aster <-> optimizers communicator - std::vector<int> optimizers_; - - /// every role has one or more pids to solve the task at hand - // a worker leader has more worker-cores to solve the forward problem - // a optimizer leader has more opt-cores to solve the opt problem - // a master has other masters working on the same opt problem - std::vector<int> coworkers_; }; #endif diff --git a/optimizer/Comm/types.h b/optimizer/Comm/types.h index 36ad822d3fea85a946f4489236698a4e6bfff5d9..be9df1e42dc5dbe208fd9dd22821cd27d2ff17ff 100644 --- a/optimizer/Comm/types.h +++ b/optimizer/Comm/types.h @@ -2,30 +2,14 @@ #define __COMM_TYPES__ #include <vector> -#include <map> -#include <set> #include "mpi.h" -#include "boost/tuple/tuple.hpp" -#include "boost/variant/variant.hpp" - namespace Comm { typedef size_t id_t; typedef size_t localId_t; - // defining different groups of processors (consecutive vs. sets).. This - // is currently not used. - typedef boost::tuple<size_t, size_t> blockProcessorGroup_t; - typedef std::set<size_t> setProcessorGroup_t; - - typedef boost::variant < - std::vector<blockProcessorGroup_t> - , std::vector<setProcessorGroup_t> - > - processorGroups_t; - /// bundles all communicators for a specific role/pid struct Bundle_t { int island_id; diff --git a/optimizer/Optimizer/EA/FixedPisaNsga2.h b/optimizer/Optimizer/EA/FixedPisaNsga2.h index 9e24d8fc8c4bd4895edf2b277a49dc99225cf337..134838477451ff344e483a029c5c2718a758f15c 100644 --- a/optimizer/Optimizer/EA/FixedPisaNsga2.h +++ b/optimizer/Optimizer/EA/FixedPisaNsga2.h @@ -69,12 +69,13 @@ public: Expressions::Named_t constraints, DVarContainer_t dvars, size_t dim, Comm::Bundle_t comms, CmdArguments_t args, - std::vector<double> hypervolRef); + std::vector<double> hypervolRef, + int nrWorkerGroups); ~FixedPisaNsga2(); /// Starting selection algorithm and variator PISA state machine - void initialize(); + virtual void initialize(); /// type used in solution state exchange with other optimizers typedef std::vector< Individual > SolutionState_t; @@ -130,11 +131,9 @@ private: std::string getStateString(PisaState_t) const; - //FIXME: // selector parameters int seed; /* seed for random number generator */ const int tournament_m = 1; /* number of opponents for mating selection */ - size_t selector_mu_; ///< number of finished individuals in current generation /// the current state of the state machine PisaState_t curState_m; @@ -181,8 +180,13 @@ private: /// size of initial population size_t alpha_m; - /// initial population optimization flag (doubles initial population) + /// initial population optimization flag (increases initial population) bool initialOptimization_m; + /// enforce strict population size + bool birthControl_m; + /// population file to be started from + std::string file_start_m; + /// number of parents the selector chooses //size_t mu_m; /// number of children the variator produces @@ -193,6 +197,8 @@ private: size_t act_gen = 1; /// maximal generation (stopping criterion) size_t maxGenerations_m; + /// number of individuals running + int num_workergroups_m; /// result file name std::string resultFile_m; diff --git a/optimizer/Optimizer/EA/FixedPisaNsga2.tcc b/optimizer/Optimizer/EA/FixedPisaNsga2.tcc index 627ba82c1555d66e0efab2f39b27030b08938490..1c09e323eb9f90e44631eb74f50b24db5edcfacc 100644 --- a/optimizer/Optimizer/EA/FixedPisaNsga2.tcc +++ b/optimizer/Optimizer/EA/FixedPisaNsga2.tcc @@ -1,6 +1,5 @@ #include <iostream> #include <sstream> -#include <cassert> #include <cmath> #include <cstring> #include <set> @@ -37,7 +36,8 @@ FixedPisaNsga2<CO, MO>::FixedPisaNsga2( DVarContainer_t dvars, size_t dim, Comm::Bundle_t comms, CmdArguments_t args, - std::vector<double> hypervolRef) + std::vector<double> hypervolRef, + int nrWorkerGroups) : Optimizer(comms.opt) , statistics_(new Statistics<size_t>("individuals")) , comms_(comms) @@ -46,6 +46,7 @@ FixedPisaNsga2<CO, MO>::FixedPisaNsga2( , dvars_m(dvars) , args_m(args) , dim_m(dim) + , num_workergroups_m(nrWorkerGroups) , hvol_ref_m(hypervolRef) { my_local_pid_ = 0; @@ -77,11 +78,14 @@ FixedPisaNsga2<CO, MO>::FixedPisaNsga2( current_hvol_ = std::numeric_limits<double>::max(); hvol_progress_ = std::numeric_limits<double>::max(); - //XXX: we can also set alpha_m to number of workers lambda_m = args->getArg<int>("num-ind-gen", 2, false); alpha_m = args->getArg<int>("initialPopulation", true); //mu_m = lambda_m; - initialOptimization_m = args->getArg<bool>("initial-optimization", false); + + // initial population arguments + file_start_m = args_m->getArg<std::string>("start-population", "", false); + initialOptimization_m = args_m->getArg<bool> ("initial-optimization", false, false); + birthControl_m = args_m->getArg<bool> ("birth-control", false, false); file_param_descr_ = "%ID,"; @@ -424,8 +428,8 @@ template< template <class> class CO, template <class> class MO > void FixedPisaNsga2<CO, MO>::toSelectorAndCommit() { to_selector_.clear(); - selector_mu_ = finishedBuffer_m.size(); - for(size_t i = 0; i < selector_mu_; i++) { + const size_t size = finishedBuffer_m.size(); + for(size_t i = 0; i < size; i++) { unsigned int id = finishedBuffer_m.front(); to_selector_.insert(id); finishedBuffer_m.pop_front(); @@ -536,11 +540,10 @@ void FixedPisaNsga2<CO, MO>::runStateMachine() { // information about initial population to ini file. case Initialize: { if(initialized_m == false) { - if (initialOptimization_m == true) { - // double population such that workers keep busy until full initial population is found - variator_m->initial_population(2*alpha_m); - } else { - variator_m->initial_population(alpha_m); + variator_m->initial_population(alpha_m, file_start_m); + if (initialOptimization_m == true && birthControl_m == false && file_start_m.empty()) { + // increase population such that workers keep busy until full initial population is found + variator_m->initial_population(num_workergroups_m, ""); } dispatch_forward_solves(); initialized_m = true; @@ -557,9 +560,10 @@ void FixedPisaNsga2<CO, MO>::runStateMachine() { toSelectorAndCommit(); curState_m = InitializeSelector; - if (initialOptimization_m == false) { - //FIXME: and double the population again to have all workers busy - variator_m->initial_population(alpha_m); + // add additional worker jobs to the queue so that single job won't keep system idle + if (initialOptimization_m == false && birthControl_m == false && file_start_m.empty()) { + // increase population to have all workers busy + variator_m->initial_population(num_workergroups_m, ""); dispatch_forward_solves(); } } @@ -1004,9 +1008,7 @@ void FixedPisaNsga2<CO, MO>::environmentalSelection() { min = j; } // swap - unsigned int p_min = pp_all[min]; - pp_all[min] = pp_all[i]; - pp_all[i] = p_min; + std::swap(pp_all[min], pp_all[i]); } // erase others pp_all.erase(pp_all.begin() + alpha_m, pp_all.end()); @@ -1016,8 +1018,8 @@ void FixedPisaNsga2<CO, MO>::environmentalSelection() { /* Fills mating pool 'parent_queue_' */ template< template <class> class CO, template <class> class MO > void FixedPisaNsga2<CO, MO>::matingSelection() { - // select at least lambda_m parents - for (size_t i = 0; i < std::max(selector_mu_, lambda_m); i++) { + // select lambda_m parents + for (size_t i = 0; i < lambda_m; i++) { int winner = irand(pp_all.size()); for (int j = 0; j < tournament_m; j++) { diff --git a/optimizer/Optimizer/EA/Variator.h b/optimizer/Optimizer/EA/Variator.h index 02bd37a5e32df6f99806539dd936e320c06a9313..8cb72b35bbba93566c1724ce03d30d39a6bf287c 100644 --- a/optimizer/Optimizer/EA/Variator.h +++ b/optimizer/Optimizer/EA/Variator.h @@ -71,68 +71,66 @@ public: } /// create an initial population - void initial_population(size_t sizeInitial) { - - std::string fname = args_->getArg<std::string>("start-population", "", false); - + void initial_population(size_t sizeInitial, std::string fname) { if ( fname.empty() ) { - for(size_t i = 0; i < sizeInitial; i++) + for(size_t i = 0; i < sizeInitial; i++) { new_individual(); - } else { - typedef boost::property_tree::ptree ptree_t; - ptree_t tree; - - boost::property_tree::read_json(fname, tree); - - if ( tree.get<std::string>("name").compare("opt-pilot") ) { - throw OptPilotException("Variator::initial_population", - "Json file not generated by opt-pilot."); - } - - std::size_t nDVars = 0; - for(auto& elem : tree.get_child("dvar-bounds")) { - // check if it is a design variable - if (std::find(dNames_m.begin(), dNames_m.end(), elem.first) == dNames_m.end()) { - throw OptPilotException("Variator::initial_population", - "The design variable '" + elem.first + "' is not in the list."); - } - ++nDVars; } - - if ( nDVars != dVarBounds_m.size() ) { + return; + } + // read population from file + typedef boost::property_tree::ptree ptree_t; + ptree_t tree; + + boost::property_tree::read_json(fname, tree); + + if ( tree.get<std::string>("name").compare("opt-pilot") ) { + throw OptPilotException("Variator::initial_population", + "Json file not generated by opt-pilot."); + } + + std::size_t nDVars = 0; + for(auto& elem : tree.get_child("dvar-bounds")) { + // check if it is a design variable + if (std::find(dNames_m.begin(), dNames_m.end(), elem.first) == dNames_m.end()) { throw OptPilotException("Variator::initial_population", - "The number of design variables do not agree."); - } - - - boost::property_tree::ptree& population = tree.get_child("population"); - - std::size_t size = 0; - Individual::genes_t dvars(nDVars); - for (auto& ind : population ) { - - if ( size > sizeInitial - 1 ) - break; - - /* just to be sure: It might be that the order of the design variables in the - * Json file is not the same as it reads in, therefore, we check and take the order - * of the container dNames_m. - */ - for (auto& dvar : population.get_child(ind.first).get_child("dvar")) { - auto it = std::find(dNames_m.begin(), dNames_m.end(), dvar.first); - std::size_t idx = std::distance(dNames_m.begin(), it); - //FIXME requires random access of Individual::genes_t - dvars[idx] = dvar.second.get_value<double>(); - } - - new_individual(dvars); - ++size; + "The design variable '" + elem.first + "' is not in the list."); } - - // fill with random individuals - for (std::size_t i = size; i < sizeInitial; ++i) { - new_individual(); + ++nDVars; + } + + if ( nDVars != dVarBounds_m.size() ) { + throw OptPilotException("Variator::initial_population", + "The number of design variables do not agree."); + } + + boost::property_tree::ptree& population = tree.get_child("population"); + + std::size_t size = 0; + Individual::genes_t dvars(nDVars); + for (auto& ind : population ) { + + if ( size > sizeInitial - 1 ) + break; + + /* just to be sure: It might be that the order of the design variables in the + * Json file is not the same as it reads in, therefore, we check and take the order + * of the container dNames_m. + */ + for (auto& dvar : population.get_child(ind.first).get_child("dvar")) { + auto it = std::find(dNames_m.begin(), dNames_m.end(), dvar.first); + std::size_t idx = std::distance(dNames_m.begin(), it); + //FIXME requires random access of Individual::genes_t + dvars[idx] = dvar.second.get_value<double>(); } + + new_individual(dvars); + ++size; + } + + // fill with random individuals + for (std::size_t i = size; i < sizeInitial; ++i) { + new_individual(); } } diff --git a/optimizer/Pilot/Pilot.h b/optimizer/Pilot/Pilot.h index 2663b4b9cd68e849393f57beee4cba8313752047..58c1b578b64abf0647e26d5ce898a4152d250e68 100644 --- a/optimizer/Pilot/Pilot.h +++ b/optimizer/Pilot/Pilot.h @@ -260,7 +260,7 @@ protected: boost::scoped_ptr<Opt_t> opt( new Opt_t(objectives_, constraints_, dvars_, objectives_.size(), - comm_->getBundle(), cmd_args_, hypervolRef_)); + comm_->getBundle(), cmd_args_, hypervolRef_, comm_->getNrWorkerGroups())); opt->initialize(); std::cout << "Stop Opt.." << std::endl; diff --git a/optimizer/Pilot/Worker.h b/optimizer/Pilot/Worker.h index d3c02f7f102b977c500cf65f78ccf0ba0635dd8f..fe8e29f518d41c95a1d3d3e60838cfeb357276e4 100644 --- a/optimizer/Pilot/Worker.h +++ b/optimizer/Pilot/Worker.h @@ -12,9 +12,6 @@ #include "Util/MPIHelper.h" #include "Util/CmdArguments.h" -#include "Simulation/Simulation.h" - - /** * \class Worker * \brief A worker MPI entity consists of a processor group that runs a diff --git a/src/Optimize/OptimizeCmd.cpp b/src/Optimize/OptimizeCmd.cpp index c62331718ea13e4a2875fbbfd2ba804d3f99ed36..7f128182fcf4d1b98e9c3ebb4fff7a3b4c0f6570 100644 --- a/src/Optimize/OptimizeCmd.cpp +++ b/src/Optimize/OptimizeCmd.cpp @@ -76,6 +76,7 @@ namespace { RECOMBINATIONPROBABILITY, SIMBINCROSSOVERNU, INITIALOPTIMIZATION, + BIRTHCONTROL, SIMTMPDIR, TEMPLATEDIR, FIELDMAPDIR, @@ -143,6 +144,8 @@ OptimizeCmd::OptimizeCmd(): ("SIMBIN_CROSSOVER_NU", "Simulated binary crossover, default: 2.0"); itsAttr[INITIALOPTIMIZATION] = Attributes::makeBool ("INITIAL_OPTIMIZATION", "Optimize speed of initial generation, default: false"); + itsAttr[BIRTHCONTROL] = Attributes::makeBool + ("BIRTH_CONTROL", "Enforce strict population sizes (or flexible to keep workers busy), default: false"); itsAttr[SIMTMPDIR] = Attributes::makeString ("SIMTMPDIR", "Directory where simulations are run"); itsAttr[TEMPLATEDIR] = Attributes::makeString @@ -260,6 +263,7 @@ void OptimizeCmd::execute() { {RECOMBINATIONPROBABILITY, "recombination-probability"}, {SIMBINCROSSOVERNU, "simbin-crossover-nu"}, {INITIALOPTIMIZATION, "initial-optimization"}, + {BIRTHCONTROL, "birth-control"}, {RESTART_FILE, "restartfile"}, {RESTART_STEP, "restartstep"} }); @@ -308,6 +312,16 @@ void OptimizeCmd::execute() { throw OpalException("OptimizeCmd::execute", "The hypervolume reference point should have the same dimension as the objectives"); } + if (Attributes::getString(itsAttr[STARTPOPULATION]) != "" && + Attributes::getBool( itsAttr[INITIALOPTIMIZATION]) == true) { + throw OpalException("OptimizeCmd::execute", + "No INITIAL_OPTIMIZATION possible when reading initial population from file (STARTPOPULATION)"); + } + if (Attributes::getBool(itsAttr[BIRTHCONTROL]) == true && + Attributes::getBool(itsAttr[INITIALOPTIMIZATION]) == true) { + throw OpalException("OptimizeCmd::execute", + "No INITIAL_OPTIMIZATION possible with BIRTH_CONTROL"); + } if (Attributes::getString(itsAttr[SIMTMPDIR]) != "") { fs::path dir(Attributes::getString(itsAttr[SIMTMPDIR])); diff --git a/src/Sample/Sampler.cpp b/src/Sample/Sampler.cpp index 4f0d1519fefb11616fe81e636abc4314baa8b996..eae62b30b65b3e81688513a7cae63d70e484ff7c 100644 --- a/src/Sample/Sampler.cpp +++ b/src/Sample/Sampler.cpp @@ -19,7 +19,8 @@ Sampler::Sampler(Expressions::Named_t objectives, DVarContainer_t dvars, size_t dim, Comm::Bundle_t comms, CmdArguments_t args, - std::vector<double> hypervolRef) + std::vector<double> hypervolRef, + int nrWorkerGroups) : Optimizer(comms.opt) { throw OptPilotException("Sampler::Sampler", diff --git a/src/Sample/Sampler.h b/src/Sample/Sampler.h index 78d076ab03b3ef04d9329d4eae72301853d62286..e55eaafd7355d424ccbff490c708d39517a4d7cf 100644 --- a/src/Sample/Sampler.h +++ b/src/Sample/Sampler.h @@ -52,7 +52,8 @@ public: DVarContainer_t dvars, size_t dim, Comm::Bundle_t comms, CmdArguments_t args, - std::vector<double> hypervolRef); + std::vector<double> hypervolRef, + int nrWorkerGroups); /** @@ -73,8 +74,8 @@ public: Comm::Bundle_t comms, CmdArguments_t args); - /// Starting selection algorithm and variator PISA state machine - void initialize(); + /// Initialization and start algorithm + virtual void initialize(); /// type used in solution state exchange with other optimizers typedef std::vector< SampleIndividual > SolutionState_t; @@ -94,7 +95,6 @@ protected: private: - std::map<std::string, std::shared_ptr<SamplingMethod> > sampleMethods_m; diff --git a/tools/emacs/opal.el b/tools/emacs/opal.el index 4c54f0e942b96c0119bdb0eb63949605e3f2ec8a..31a41c02e6e570a395a51792cff0cdb5bdf29182 100644 --- a/tools/emacs/opal.el +++ b/tools/emacs/opal.el @@ -138,11 +138,11 @@ ) "Highlighting expressions for OPAL mode (seqediting).") -;(concat "\\<" (regexp-opt '("A" "ADD" "AMPLITUDE_MODEL" "ANGLE" "APERTURE" "APVETO" "AT" "AUTOPHASE" "B" "BBOXINCR" "BCFFTZ" "BCFFTT" "BCFFTX" "BCFFTY" "BCURRENT" "BEAM_PHIINIT" "BEAM_PRINIT" "BEAM_RINIT" "BFREQ" "BMAX" "BOUNDPDESTROYFQ" "BSCALE" "BY" "CALLS" "CATHTEMP" "CENTRE" "CHARGE" "CLASS" "CLEAR" "CMD" "COEFDENOM" "COEFDENOMPHI" "COEFNUM" "COEFNUMPHI" "COLUMN" "CONDUCT" "CONSTRAINTS" "CONST_LENGTH" "CONV_HVOL_PROG" "CORRX" "CORRY" "CORRZ" "CSRDUMP" "CROSSOVER" "CUTOFFLONG" "CUTOFFPX" "CUTOFFPY" "CUTOFFPZ" "CUTOFFR" "CUTOFFX" "CUTOFFY" "CYHARMON" "CZERO" "DESIGNENERGY" "DK1" "DK1S" "DK2" "DK2S" "DKN" "DKNR" "DKS" "DKSR" "DLAG" "DPHI" "DPSI" "DS" "DT" "DTHETA" "DUMP" "DUMP_DAT" "DUMP_FREQ" "DUMP_OFFSPRING" "DVARS" "DVOLT" "DX" "DY" "DZ" "E1" "E2" "EBDUMP" "ECHO" "EKIN" "ELASER" "ELEMEDGE" "ELEMENT" "EMISSIONMODEL" "EMISSIONSTEPS" "EMITTED" "ENABLEHDF5" "ENERGY" "ENDSEQUENCE" "END_NORMAL_X" "END_NORMAL_Y" "END_POSITION_X" "END_POSITION_Y" "EPSILON" "ESCALE" "ET" "EVERYSTEP" "EX" "EXPECTED_HYPERVOL" "EXPR" "EY" "FE" "FGEOM" "FIELDMAPDIR" "FIELDMAPDIR" "FILE" "FINT" "FMAPFN" "FNAME" "FORM" "FREQ" "FREQUENCY_MODEL" "FROM" "FSTYPE" "FTOSCAMPLITUDE" "FTOSCPERIODS" "FULL" "GAMMA" "GAP" "GAPWIDTH" "GENE_MUTATION_PROBABILITY" "GEOMETRY" "GREENSF" "H1" "H2" "HAPERT" "HARMON" "HARMONIC_NUMBER" "HGAP" "HKICK" "HYPERVOLREFERENCE" "IDEALIZED" "INITIAL_OPTIMIZATION" "IMAGENAME" "INFO" "INITIALPOPULATION" "INPUT" "INPUTMOUNITS" "INTENSITYCUT" "INTERPL" "IS_CLOSED" "ITSOLVER" "K0" "K0S" "K1" "K1S" "K2" "K2S" "K3" "K3S" "KEYWORD" "KICK" "KN" "KS" "L" "LAG" "LASERPROFFN" "LATTICE_PHIINIT" "LATTICE_RINIT" "LATTICE_THETAINIT" "LENGTH" "LEVEL" "LOGBENDTRAJECTORY" "LOWER" "LOWERBOUND" "MASS" "MAXGENERATIONS" "MAXITERS" "MAXR" "MAXSTEPS" "MAXZ" "METHOD" "MINR" "MINZ" "MODE" "MREX" "MREY" "MSCALX" "MSCALY" "MT" "MUTATION_PROBABILITY" "MX" "MY" "NBIN" "NFREQ" "NLEFT" "NO" "NPART" "NPOINTS" "NRIGHT" "NUMCELLS" "NUM_COWORKERS" "NUM_IND_GEN" "NUM_MASTERS" "OBJECTIVES" "OFFSETPX" "OFFSETPY" "OFFSETPZ" "OFFSETT" "OFFSETX" "OFFSETY" "OFFSETZ" "ONE_PILOT_CONVERGE" "OPCHARGE" "OPMASS" "OPYIELD" "ORDER" "ORIENTATION" "ORIGIN" "OUTDIR" "OUTFN" "OUTPUT" "P1" "P2" "P3" "P4" "PARFFTT" "PARFFTX" "PARFFTY" "PARTICLE" "PARTICLEMATTERINTERACTION" "PATTERN" "PC" "PDIS" "PHI" "PHI0" "PHIINIT" "PHIMAX" "PHIMIN" "PLANE" "POLYORDER" "PRECMODE" "PRINIT" "PSDUMPEACHTURN" "PSDUMPFRAME" "PSDUMPFREQ" "PSI" "PTC" "PYMULT" "PZINIT" "PZMULT" "R51" "R52" "R61" "R62" "RADIUS" "RANDOM" "RANGE" "RASTER" "RECOMBINATION_PROBABILITY" "REFER" "REFPOS" "REPARTFREQ" "RESET" "RFFREQ" "RFMAPFN" "RFPHI" "RINIT" "RMAX" "RMIN" "ROTATION" "ROW" "S" "SAMPLINGS" "SCALABLE" "SEED" "SELECTED" "SEQUENCE" "SIGMA" "SIGMAPX" "SIGMAPY" "SIGMAPZ" "SIGMAR" "SIGMAT" "SIGMAX" "SIGMAY" "SIGMAZ" "SIGX" "SIGY" "SIMBIN_CROSSOVER_NU" "SIMTMPDIR" "SLPTC" "SOL_SYNCH" "SPLIT" "SPTDUMPFREQ" "STATDUMPFREQ" "STEP" "STEPSPERTURN" "STOP" "STRING" "SUPERPOSE" "SYMMETRY" "T0" "TABLE" "TAU" "TELL" "TEMPLATEDIR" "TFALL" "THETA" "THIN" "THRESHOLD" "TIME" "TIMEINTEGRATOR" "TMULT" "TO" "TOL" "TOLERANCE" "TPULSEFWHM" "TRACE" "TRIMCOILTHRESHOLD" "TRISE" "TURNS" "TYPE" "UPPER" "UPPERBOUND" "VARIABLE" "VERIFY" "VERSION" "VKICK" "VMAX" "VMIN" "VOLT" "W" "WAKEF" "WARN" "WARP" "WEIGHT" "WIDTH" "WRITETOFILE" "X" "XEND" "XMA" "XMULT" "XSIZE" "XSTART" "Y" "YEND" "YMA" "YMULT" "YSIZE" "YSTART" "Z" "Z0" "ZEND" "ZINIT" "ZSTART" "ZSTOP") t) "\\>") +;(concat "\\<" (regexp-opt '("A" "ADD" "AMPLITUDE_MODEL" "ANGLE" "APERTURE" "APVETO" "AT" "AUTOPHASE" "B" "BBOXINCR" "BCFFTZ" "BCFFTT" "BCFFTX" "BCFFTY" "BCURRENT" "BEAM_PHIINIT" "BEAM_PRINIT" "BEAM_RINIT" "BFREQ" "BIRTH_CONTROL" "BMAX" "BOUNDPDESTROYFQ" "BSCALE" "BY" "CALLS" "CATHTEMP" "CENTRE" "CHARGE" "CLASS" "CLEAR" "CMD" "COEFDENOM" "COEFDENOMPHI" "COEFNUM" "COEFNUMPHI" "COLUMN" "CONDUCT" "CONSTRAINTS" "CONST_LENGTH" "CONV_HVOL_PROG" "CORRX" "CORRY" "CORRZ" "CSRDUMP" "CROSSOVER" "CUTOFFLONG" "CUTOFFPX" "CUTOFFPY" "CUTOFFPZ" "CUTOFFR" "CUTOFFX" "CUTOFFY" "CYHARMON" "CZERO" "DESIGNENERGY" "DK1" "DK1S" "DK2" "DK2S" "DKN" "DKNR" "DKS" "DKSR" "DLAG" "DPHI" "DPSI" "DS" "DT" "DTHETA" "DUMP" "DUMP_DAT" "DUMP_FREQ" "DUMP_OFFSPRING" "DVARS" "DVOLT" "DX" "DY" "DZ" "E1" "E2" "EBDUMP" "ECHO" "EKIN" "ELASER" "ELEMEDGE" "ELEMENT" "EMISSIONMODEL" "EMISSIONSTEPS" "EMITTED" "ENABLEHDF5" "ENERGY" "ENDSEQUENCE" "END_NORMAL_X" "END_NORMAL_Y" "END_POSITION_X" "END_POSITION_Y" "EPSILON" "ESCALE" "ET" "EVERYSTEP" "EX" "EXPECTED_HYPERVOL" "EXPR" "EY" "FE" "FGEOM" "FIELDMAPDIR" "FIELDMAPDIR" "FILE" "FINT" "FMAPFN" "FNAME" "FORM" "FREQ" "FREQUENCY_MODEL" "FROM" "FSTYPE" "FTOSCAMPLITUDE" "FTOSCPERIODS" "FULL" "GAMMA" "GAP" "GAPWIDTH" "GENE_MUTATION_PROBABILITY" "GEOMETRY" "GREENSF" "H1" "H2" "HAPERT" "HARMON" "HARMONIC_NUMBER" "HGAP" "HKICK" "HYPERVOLREFERENCE" "IDEALIZED" "INITIAL_OPTIMIZATION" "IMAGENAME" "INFO" "INITIALPOPULATION" "INPUT" "INPUTMOUNITS" "INTENSITYCUT" "INTERPL" "IS_CLOSED" "ITSOLVER" "K0" "K0S" "K1" "K1S" "K2" "K2S" "K3" "K3S" "KEYWORD" "KICK" "KN" "KS" "L" "LAG" "LASERPROFFN" "LATTICE_PHIINIT" "LATTICE_RINIT" "LATTICE_THETAINIT" "LENGTH" "LEVEL" "LOGBENDTRAJECTORY" "LOWER" "LOWERBOUND" "MASS" "MAXGENERATIONS" "MAXITERS" "MAXR" "MAXSTEPS" "MAXZ" "METHOD" "MINR" "MINZ" "MODE" "MREX" "MREY" "MSCALX" "MSCALY" "MT" "MUTATION_PROBABILITY" "MX" "MY" "NBIN" "NFREQ" "NLEFT" "NO" "NPART" "NPOINTS" "NRIGHT" "NUMCELLS" "NUM_COWORKERS" "NUM_IND_GEN" "NUM_MASTERS" "OBJECTIVES" "OFFSETPX" "OFFSETPY" "OFFSETPZ" "OFFSETT" "OFFSETX" "OFFSETY" "OFFSETZ" "ONE_PILOT_CONVERGE" "OPCHARGE" "OPMASS" "OPYIELD" "ORDER" "ORIENTATION" "ORIGIN" "OUTDIR" "OUTFN" "OUTPUT" "P1" "P2" "P3" "P4" "PARFFTT" "PARFFTX" "PARFFTY" "PARTICLE" "PARTICLEMATTERINTERACTION" "PATTERN" "PC" "PDIS" "PHI" "PHI0" "PHIINIT" "PHIMAX" "PHIMIN" "PLANE" "POLYORDER" "PRECMODE" "PRINIT" "PSDUMPEACHTURN" "PSDUMPFRAME" "PSDUMPFREQ" "PSI" "PTC" "PYMULT" "PZINIT" "PZMULT" "R51" "R52" "R61" "R62" "RADIUS" "RANDOM" "RANGE" "RASTER" "RECOMBINATION_PROBABILITY" "REFER" "REFPOS" "REPARTFREQ" "RESET" "RFFREQ" "RFMAPFN" "RFPHI" "RINIT" "RMAX" "RMIN" "ROTATION" "ROW" "S" "SAMPLINGS" "SCALABLE" "SEED" "SELECTED" "SEQUENCE" "SIGMA" "SIGMAPX" "SIGMAPY" "SIGMAPZ" "SIGMAR" "SIGMAT" "SIGMAX" "SIGMAY" "SIGMAZ" "SIGX" "SIGY" "SIMBIN_CROSSOVER_NU" "SIMTMPDIR" "SLPTC" "SOL_SYNCH" "SPLIT" "SPTDUMPFREQ" "STARTPOPULATION" "STATDUMPFREQ" "STEP" "STEPSPERTURN" "STOP" "STRING" "SUPERPOSE" "SYMMETRY" "T0" "TABLE" "TAU" "TELL" "TEMPLATEDIR" "TFALL" "THETA" "THIN" "THRESHOLD" "TIME" "TIMEINTEGRATOR" "TMULT" "TO" "TOL" "TOLERANCE" "TPULSEFWHM" "TRACE" "TRIMCOILTHRESHOLD" "TRISE" "TURNS" "TYPE" "UPPER" "UPPERBOUND" "VARIABLE" "VERIFY" "VERSION" "VKICK" "VMAX" "VMIN" "VOLT" "W" "WAKEF" "WARN" "WARP" "WEIGHT" "WIDTH" "WRITETOFILE" "X" "XEND" "XMA" "XMULT" "XSIZE" "XSTART" "Y" "YEND" "YMA" "YMULT" "YSIZE" "YSTART" "Z" "Z0" "ZEND" "ZINIT" "ZSTART" "ZSTOP") t) "\\>") (defconst opal-font-lock-keywords-parameters (list - '("\\<\\(A\\(?:DD\\|MPLITUDE_MODEL\\|NGLE\\|P\\(?:ERTURE\\|VETO\\)\\|T\\|UTOPHASE\\)\\|B\\(?:BOXINCR\\|C\\(?:FFT[TXYZ]\\|URRENT\\)\\|EAM_\\(?:\\(?:P\\(?:HI\\|R\\)\\|R\\)INIT\\)\\|FREQ\\|MAX\\|OUNDPDESTROYFQ\\|SCALE\\|Y\\)\\|C\\(?:A\\(?:LLS\\|THTEMP\\)\\|ENTRE\\|HARGE\\|L\\(?:ASS\\|EAR\\)\\|MD\\|O\\(?:EF\\(?:DENOM\\(?:PHI\\)?\\|NUM\\(?:PHI\\)?\\)\\|LUMN\\|N\\(?:DUCT\\|ST\\(?:RAINTS\\|_LENGTH\\)\\|V_HVOL_PROG\\)\\|RR[XYZ]\\)\\|ROSSOVER\\|SRDUMP\\|UTOFF\\(?:LONG\\|P[XYZ]\\|[RXY]\\)\\|YHARMON\\|ZERO\\)\\|D\\(?:ESIGNENERGY\\|K\\(?:1S\\|2S\\|[NS]R\\|[12NS]\\)\\|LAG\\|P\\(?:[HS]I\\)\\|THETA\\|UMP\\(?:_\\(?:DAT\\|FREQ\\|OFFSPRING\\)\\)?\\|V\\(?:ARS\\|OLT\\)\\|[STXYZ]\\)\\|E\\(?:BDUMP\\|CHO\\|KIN\\|L\\(?:ASER\\|EME\\(?:DGE\\|NT\\)\\)\\|MI\\(?:SSION\\(?:MODEL\\|STEPS\\)\\|TTED\\)\\|N\\(?:ABLEHDF5\\|D\\(?:SEQUENCE\\|_\\(?:NORMAL_[XY]\\|POSITION_[XY]\\)\\)\\|ERGY\\)\\|PSILON\\|SCALE\\|VERYSTEP\\|XP\\(?:ECTED_HYPERVOL\\|R\\)\\|[12TXY]\\)\\|F\\(?:E\\|GEOM\\|I\\(?:ELDMAPDIR\\|LE\\|NT\\)\\|MAPFN\\|NAME\\|ORM\\|R\\(?:EQ\\(?:UENCY_MODEL\\)?\\|OM\\)\\|STYPE\\|TOSC\\(?:AMPLITUDE\\|PERIODS\\)\\|ULL\\)\\|G\\(?:A\\(?:MMA\\|P\\(?:WIDTH\\)?\\)\\|E\\(?:\\(?:NE_MUTATION_PROBABILIT\\|OMETR\\)Y\\)\\|REENSF\\)\\|H\\(?:A\\(?:PERT\\|RMON\\(?:IC_NUMBER\\)?\\)\\|GAP\\|KICK\\|YPERVOLREFERENCE\\|[12]\\)\\|I\\(?:DEALIZED\\|MAGENAME\\|N\\(?:FO\\|ITIAL\\(?:\\(?:POPUL\\|_OPTIMIZ\\)ATION\\)\\|PUT\\(?:MOUNITS\\)?\\|TE\\(?:NSITYCUT\\|RPL\\)\\)\\|S_CLOSED\\|TSOLVER\\)\\|K\\(?:0S\\|1S\\|2S\\|3S\\|EYWORD\\|ICK\\|[0-3NS]\\)\\|L\\(?:A\\(?:G\\|SERPROFFN\\|TTICE_\\(?:\\(?:PHI\\|R\\|THETA\\)INIT\\)\\)\\|E\\(?:NGTH\\|VEL\\)\\|O\\(?:GBENDTRAJECTORY\\|WER\\(?:BOUND\\)?\\)\\)\\|M\\(?:A\\(?:SS\\|X\\(?:GENERATIONS\\|ITERS\\|STEPS\\|[RZ]\\)\\)\\|ETHOD\\|IN[RZ]\\|ODE\\|RE[XY]\\|SCAL[XY]\\|UTATION_PROBABILITY\\|[TXY]\\)\\|N\\(?:BIN\\|FREQ\\|LEFT\\|O\\|P\\(?:ART\\|OINTS\\)\\|RIGHT\\|UM\\(?:CELLS\\|_\\(?:COWORKERS\\|IND_GEN\\|MASTERS\\)\\)\\)\\|O\\(?:BJECTIVES\\|FFSET\\(?:P[XYZ]\\|[TXYZ]\\)\\|NE_PILOT_CONVERGE\\|P\\(?:CHARGE\\|MASS\\|YIELD\\)\\|R\\(?:DER\\|I\\(?:\\(?:ENTATIO\\|GI\\)N\\)\\)\\|UT\\(?:DIR\\|FN\\|PUT\\)\\)\\|P\\(?:A\\(?:R\\(?:FFT[TXY]\\|TICLE\\(?:MATTERINTERACTION\\)?\\)\\|TTERN\\)\\|DIS\\|HI\\(?:0\\|INIT\\|M\\(?:AX\\|IN\\)\\)?\\|LANE\\|OLYORDER\\|R\\(?:ECMODE\\|INIT\\)\\|S\\(?:DUMP\\(?:EACHTURN\\|FR\\(?:AME\\|EQ\\)\\)\\|I\\)\\|TC\\|\\(?:YMUL\\|Z\\(?:INI\\|MUL\\)\\)T\\|[1-4C]\\)\\|R\\(?:5[12]\\|6[12]\\|A\\(?:DIUS\\|N\\(?:DOM\\|GE\\)\\|STER\\)\\|E\\(?:COMBINATION_PROBABILITY\\|F\\(?:ER\\|POS\\)\\|PARTFREQ\\|SET\\)\\|F\\(?:FREQ\\|MAPFN\\|PHI\\)\\|INIT\\|M\\(?:AX\\|IN\\)\\|O\\(?:TATION\\|W\\)\\)\\|S\\(?:AMPLINGS\\|CALABLE\\|E\\(?:ED\\|LECTED\\|QUENCE\\)\\|I\\(?:G\\(?:MA\\(?:P[XYZ]\\|[RTXYZ]\\)?\\|[XY]\\)\\|M\\(?:BIN_CROSSOVER_NU\\|TMPDIR\\)\\)\\|LPTC\\|OL_SYNCH\\|P\\(?:LIT\\|TDUMPFREQ\\)\\|T\\(?:ATDUMPFREQ\\|EP\\(?:SPERTURN\\)?\\|OP\\|RING\\)\\|UPERPOSE\\|YMMETRY\\)\\|T\\(?:A\\(?:BLE\\|U\\)\\|E\\(?:LL\\|MPLATEDIR\\)\\|FALL\\|H\\(?:ETA\\|IN\\|RESHOLD\\)\\|IME\\(?:INTEGRATOR\\)?\\|MULT\\|OL\\(?:ERANCE\\)?\\|PULSEFWHM\\|R\\(?:ACE\\|I\\(?:MCOILTHRESHOLD\\|SE\\)\\)\\|URNS\\|YPE\\|[0O]\\)\\|UPPER\\(?:BOUND\\)?\\|V\\(?:ARIABLE\\|ER\\(?:IFY\\|SION\\)\\|KICK\\|M\\(?:AX\\|IN\\)\\|OLT\\)\\|W\\(?:A\\(?:KEF\\|R[NP]\\)\\|EIGHT\\|IDTH\\|RITETOFILE\\)\\|X\\(?:END\\|M\\(?:A\\|ULT\\)\\|S\\(?:IZE\\|TART\\)\\)\\|Y\\(?:END\\|M\\(?:A\\|ULT\\)\\|S\\(?:IZE\\|TART\\)\\)\\|Z\\(?:0\\|END\\|INIT\\|ST\\(?:ART\\|OP\\)\\)\\|[ABLSW-Z]\\)\\>" + '("\\<\\(A\\(?:DD\\|MPLITUDE_MODEL\\|NGLE\\|P\\(?:ERTURE\\|VETO\\)\\|T\\|UTOPHASE\\)\\|B\\(?:BOXINCR\\|C\\(?:FFT[TXYZ]\\|URRENT\\)\\|EAM_\\(?:\\(?:P\\(?:HI\\|R\\)\\|R\\)INIT\\)\\|FREQ\\|IRTH_CONTROL\\|MAX\\|OUNDPDESTROYFQ\\|SCALE\\|Y\\)\\|C\\(?:A\\(?:LLS\\|THTEMP\\)\\|ENTRE\\|HARGE\\|L\\(?:ASS\\|EAR\\)\\|MD\\|O\\(?:EF\\(?:DENOM\\(?:PHI\\)?\\|NUM\\(?:PHI\\)?\\)\\|LUMN\\|N\\(?:DUCT\\|ST\\(?:RAINTS\\|_LENGTH\\)\\|V_HVOL_PROG\\)\\|RR[XYZ]\\)\\|ROSSOVER\\|SRDUMP\\|UTOFF\\(?:LONG\\|P[XYZ]\\|[RXY]\\)\\|YHARMON\\|ZERO\\)\\|D\\(?:ESIGNENERGY\\|K\\(?:1S\\|2S\\|[NS]R\\|[12NS]\\)\\|LAG\\|P\\(?:[HS]I\\)\\|THETA\\|UMP\\(?:_\\(?:DAT\\|FREQ\\|OFFSPRING\\)\\)?\\|V\\(?:ARS\\|OLT\\)\\|[STXYZ]\\)\\|E\\(?:BDUMP\\|CHO\\|KIN\\|L\\(?:ASER\\|EME\\(?:DGE\\|NT\\)\\)\\|MI\\(?:SSION\\(?:MODEL\\|STEPS\\)\\|TTED\\)\\|N\\(?:ABLEHDF5\\|D\\(?:SEQUENCE\\|_\\(?:NORMAL_[XY]\\|POSITION_[XY]\\)\\)\\|ERGY\\)\\|PSILON\\|SCALE\\|VERYSTEP\\|XP\\(?:ECTED_HYPERVOL\\|R\\)\\|[12TXY]\\)\\|F\\(?:E\\|GEOM\\|I\\(?:ELDMAPDIR\\|LE\\|NT\\)\\|MAPFN\\|NAME\\|ORM\\|R\\(?:EQ\\(?:UENCY_MODEL\\)?\\|OM\\)\\|STYPE\\|TOSC\\(?:AMPLITUDE\\|PERIODS\\)\\|ULL\\)\\|G\\(?:A\\(?:MMA\\|P\\(?:WIDTH\\)?\\)\\|E\\(?:\\(?:NE_MUTATION_PROBABILIT\\|OMETR\\)Y\\)\\|REENSF\\)\\|H\\(?:A\\(?:PERT\\|RMON\\(?:IC_NUMBER\\)?\\)\\|GAP\\|KICK\\|YPERVOLREFERENCE\\|[12]\\)\\|I\\(?:DEALIZED\\|MAGENAME\\|N\\(?:FO\\|ITIAL\\(?:\\(?:POPUL\\|_OPTIMIZ\\)ATION\\)\\|PUT\\(?:MOUNITS\\)?\\|TE\\(?:NSITYCUT\\|RPL\\)\\)\\|S_CLOSED\\|TSOLVER\\)\\|K\\(?:0S\\|1S\\|2S\\|3S\\|EYWORD\\|ICK\\|[0-3NS]\\)\\|L\\(?:A\\(?:G\\|SERPROFFN\\|TTICE_\\(?:\\(?:PHI\\|R\\|THETA\\)INIT\\)\\)\\|E\\(?:NGTH\\|VEL\\)\\|O\\(?:GBENDTRAJECTORY\\|WER\\(?:BOUND\\)?\\)\\)\\|M\\(?:A\\(?:SS\\|X\\(?:GENERATIONS\\|ITERS\\|STEPS\\|[RZ]\\)\\)\\|ETHOD\\|IN[RZ]\\|ODE\\|RE[XY]\\|SCAL[XY]\\|UTATION_PROBABILITY\\|[TXY]\\)\\|N\\(?:BIN\\|FREQ\\|LEFT\\|O\\|P\\(?:ART\\|OINTS\\)\\|RIGHT\\|UM\\(?:CELLS\\|_\\(?:COWORKERS\\|IND_GEN\\|MASTERS\\)\\)\\)\\|O\\(?:BJECTIVES\\|FFSET\\(?:P[XYZ]\\|[TXYZ]\\)\\|NE_PILOT_CONVERGE\\|P\\(?:CHARGE\\|MASS\\|YIELD\\)\\|R\\(?:DER\\|I\\(?:\\(?:ENTATIO\\|GI\\)N\\)\\)\\|UT\\(?:DIR\\|FN\\|PUT\\)\\)\\|P\\(?:A\\(?:R\\(?:FFT[TXY]\\|TICLE\\(?:MATTERINTERACTION\\)?\\)\\|TTERN\\)\\|DIS\\|HI\\(?:0\\|INIT\\|M\\(?:AX\\|IN\\)\\)?\\|LANE\\|OLYORDER\\|R\\(?:ECMODE\\|INIT\\)\\|S\\(?:DUMP\\(?:EACHTURN\\|FR\\(?:AME\\|EQ\\)\\)\\|I\\)\\|TC\\|\\(?:YMUL\\|Z\\(?:INI\\|MUL\\)\\)T\\|[1-4C]\\)\\|R\\(?:5[12]\\|6[12]\\|A\\(?:DIUS\\|N\\(?:DOM\\|GE\\)\\|STER\\)\\|E\\(?:COMBINATION_PROBABILITY\\|F\\(?:ER\\|POS\\)\\|PARTFREQ\\|SET\\)\\|F\\(?:FREQ\\|MAPFN\\|PHI\\)\\|INIT\\|M\\(?:AX\\|IN\\)\\|O\\(?:TATION\\|W\\)\\)\\|S\\(?:AMPLINGS\\|CALABLE\\|E\\(?:ED\\|LECTED\\|QUENCE\\)\\|I\\(?:G\\(?:MA\\(?:P[XYZ]\\|[RTXYZ]\\)?\\|[XY]\\)\\|M\\(?:BIN_CROSSOVER_NU\\|TMPDIR\\)\\)\\|LPTC\\|OL_SYNCH\\|P\\(?:LIT\\|TDUMPFREQ\\)\\|T\\(?:A\\(?:RTPOPULATION\\|TDUMPFREQ\\)\\|EP\\(?:SPERTURN\\)?\\|OP\\|RING\\)\\|UPERPOSE\\|YMMETRY\\)\\|T\\(?:A\\(?:BLE\\|U\\)\\|E\\(?:LL\\|MPLATEDIR\\)\\|FALL\\|H\\(?:ETA\\|IN\\|RESHOLD\\)\\|IME\\(?:INTEGRATOR\\)?\\|MULT\\|OL\\(?:ERANCE\\)?\\|PULSEFWHM\\|R\\(?:ACE\\|I\\(?:MCOILTHRESHOLD\\|SE\\)\\)\\|URNS\\|YPE\\|[0O]\\)\\|UPPER\\(?:BOUND\\)?\\|V\\(?:ARIABLE\\|ER\\(?:IFY\\|SION\\)\\|KICK\\|M\\(?:AX\\|IN\\)\\|OLT\\)\\|W\\(?:A\\(?:KEF\\|R[NP]\\)\\|EIGHT\\|IDTH\\|RITETOFILE\\)\\|X\\(?:END\\|M\\(?:A\\|ULT\\)\\|S\\(?:IZE\\|TART\\)\\)\\|Y\\(?:END\\|M\\(?:A\\|ULT\\)\\|S\\(?:IZE\\|TART\\)\\)\\|Z\\(?:0\\|END\\|INIT\\|ST\\(?:ART\\|OP\\)\\)\\|[ABLSW-Z]\\)\\>" . font-lock-variable-name-face) ) "Highlighting expressions for OPAL mode (parameters).")