--- trunk/gadget/gadget.cc 2014/02/10 17:09:07 1 +++ trunk/gadget/gadget.cc 2015/07/23 19:00:38 11 @@ -6,14 +6,22 @@ #include "stochasticdata.h" #include "interrupthandler.h" #include "global.h" +#ifdef GADGET_OPENMP +#include +#endif Ecosystem* EcoSystem; +//FIXME need? +StochasticData* data = 0; +Ecosystem** EcoSystems; int main(int aNumber, char* const aVector[]) { MainInfo main; - StochasticData* data = 0; + +// omp_set_num_threads(4); + int check = 0; //Initialise random number generator with system time [MNAA 02.02.26] @@ -121,31 +129,64 @@ } } else if (main.runOptimise()) { - if (EcoSystem->numVariables() == 0) - handle.logMessage(LOGFAIL, "Error - no parameters can be optimised"); - - if (main.getInitialParamGiven()) { - if (chdir(inputdir) != 0) //JMB need to change back to inputdir to read the file - handle.logMessage(LOGFAIL, "Error - failed to change input directory to", inputdir); - data = new StochasticData(main.getInitialParamFile()); - if (chdir(workingdir) != 0) - handle.logMessage(LOGFAIL, "Error - failed to change working directory to", workingdir); - - EcoSystem->Update(data); - EcoSystem->checkBounds(); - delete data; - } else - handle.logMessage(LOGFAIL, "Error - no parameter input file specified"); + if (EcoSystem->numVariables() == 0) + handle.logMessage(LOGFAIL, "Error - no parameters can be optimised"); - EcoSystem->Initialise(); - if (main.printInitial()) { - EcoSystem->Reset(); //JMB only need to call reset() before the print commands - EcoSystem->writeStatus(main.getPrintInitialFile()); - } + if (main.getInitialParamGiven()) { + if (chdir(inputdir) != 0) //JMB need to change back to inputdir to read the file + handle.logMessage(LOGFAIL, "Error - failed to change input directory to", inputdir); + data = new StochasticData(main.getInitialParamFile()); + if (chdir(workingdir) != 0) + handle.logMessage(LOGFAIL, "Error - failed to change working directory to", workingdir); + + EcoSystem->Update(data); + EcoSystem->checkBounds(); + } else + handle.logMessage(LOGFAIL, "Error - no parameter input file specified"); + + EcoSystem->Initialise(); + if (main.printInitial()) { + EcoSystem->Reset(); //JMB only need to call reset() before the print commands + EcoSystem->writeStatus(main.getPrintInitialFile()); + } + + if (main.runOmp()) + { +#ifdef GADGET_OPENMP + int numThr = omp_get_max_threads ( ); + //FIXME OJO! ml + EcoSystems = new Ecosystem*[numThr]; + int i; + //EcoSystems[0] = EcoSystem; + for (i=0; iUpdate(data); + EcoSystems[i]->Initialise(); + } + EcoSystem->OptimiseOMP(); + //////optimiseOMP main.runPrint() +#endif - EcoSystem->Optimise(); - if (main.getForcePrint()) - EcoSystem->Simulate(main.getForcePrint()); + } else { +#ifndef NO_OPENMP + int numThr = omp_get_max_threads ( ); + //FIXME OJO! ml + EcoSystems = new Ecosystem*[numThr]; + int i; + //EcoSystems[0] = EcoSystem; + for (i=0; iUpdate(data); + EcoSystems[i]->Initialise(); + } +#endif + EcoSystem->Optimise(); + } + delete data; + if (main.getForcePrint()) + EcoSystem->Simulate(main.getForcePrint()); } handle.logMessage(LOGMESSAGE, ""); //write blank line to log file