Log In | Get Help   
Home My Page Projects Code Snippets Project Openings Mareframe
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files
[mareframe] Annotation of /trunk/gadget/gadget.cc
[mareframe] / trunk / gadget / gadget.cc Repository:
ViewVC logotype

Annotation of /trunk/gadget/gadget.cc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 27 - (view) (download)

1 : agomez 1 #include "ecosystem.h"
2 :     #include "maininfo.h"
3 :     #include "runid.h"
4 :     #include "gadget.h"
5 :     #include "errorhandler.h"
6 :     #include "stochasticdata.h"
7 :     #include "interrupthandler.h"
8 :     #include "global.h"
9 : ulcessvp 16 #ifdef _OPENMP
10 : ulcessvp 11 #include <omp.h>
11 :     #endif
12 : agomez 1
13 :     Ecosystem* EcoSystem;
14 : ulcessvp 11 StochasticData* data = 0;
15 :     Ecosystem** EcoSystems;
16 : ulcessvp 27 MainInfo _main;
17 : agomez 1
18 : ulcessvp 17 volatile int interrupted = 0;
19 :     volatile int interrupted_print = 0;
20 : agomez 1
21 : ulcessvp 17
22 : agomez 1 int main(int aNumber, char* const aVector[]) {
23 :    
24 : ulcessvp 11
25 : ulcessvp 27
26 : ulcessvp 11 // omp_set_num_threads(4);
27 :    
28 : agomez 1 int check = 0;
29 :    
30 :     //Initialise random number generator with system time [MNAA 02.02.26]
31 :     srand((int)time(NULL));
32 :    
33 :     //Test to see if the function double lgamma(double) is returning an integer.
34 :     //lgamma is a non-ansi function and on some platforms when compiled with the
35 :     //-ansi flag lgamma returns an integer value. [MNAA&AJ 05.2001]
36 :     assert(lgamma(1.2) != floor(lgamma(1.2)));
37 :    
38 :     char* workingdir = getenv("GADGET_WORKING_DIR");
39 :     if (workingdir == 0) {
40 :     if ((workingdir = (char*)malloc(LongString)) == NULL)
41 :     handle.logMessage(LOGFAIL, "Error - failed to malloc space for current working directory");
42 :     check = 1;
43 :     if (getcwd(workingdir, LongString) == NULL)
44 :     handle.logMessage(LOGFAIL, "Error - failed to get current working directory");
45 :     }
46 :     if (chdir(workingdir) != 0)
47 :     handle.logMessage(LOGFAIL, "Error - failed to change working directory to", workingdir);
48 :    
49 :     char* inputdir = getenv("GADGET_DATA_DIR");
50 :     if (inputdir == 0)
51 :     inputdir = workingdir;
52 :     if (chdir(inputdir) != 0)
53 :     handle.logMessage(LOGFAIL, "Error - failed to change input directory to", inputdir);
54 :     if (chdir(workingdir) != 0) //JMB change back to where we were ...
55 :     handle.logMessage(LOGFAIL, "Error - failed to change working directory to", workingdir);
56 :    
57 : ulcessvp 27 _main.read(aNumber, aVector);
58 :     _main.checkUsage(inputdir, workingdir);
59 : agomez 1
60 :     if (chdir(inputdir) != 0)
61 :     handle.logMessage(LOGFAIL, "Error - failed to change input directory to", inputdir);
62 : ulcessvp 27 EcoSystem = new Ecosystem(_main);
63 : agomez 1
64 :     #ifdef INTERRUPT_HANDLER
65 :     //JMB dont register interrupt if doing a network run
66 : ulcessvp 27 if (!(_main.runNetwork()))
67 : ulcessvp 17 registerInterrupts(&interrupted);
68 : agomez 1 #endif
69 :    
70 :     if (chdir(workingdir) != 0)
71 :     handle.logMessage(LOGFAIL, "Error - failed to change working directory to", workingdir);
72 : ulcessvp 27 if ((_main.getPI()).getPrint())
73 :     EcoSystem->writeInitialInformation((_main.getPI()).getOutputFile());
74 : agomez 1
75 : ulcessvp 27 if (_main.runStochastic()) {
76 :     if (_main.runNetwork()) {
77 : agomez 1 #ifdef GADGET_NETWORK //to help compiling when pvm libraries are unavailable
78 :     EcoSystem->Initialise();
79 :     data = new StochasticData();
80 :     while (data->getDataFromNetwork()) {
81 :     EcoSystem->Update(data);
82 : ulcessvp 27 EcoSystem->Simulate(_main.runPrint());
83 : agomez 1 data->sendDataToNetwork(EcoSystem->getLikelihood());
84 :     data->readNextLineFromNetwork();
85 :     }
86 :     delete data;
87 :     #endif
88 :    
89 : ulcessvp 27 } else if (_main.getInitialParamGiven()) {
90 : agomez 1 if (chdir(inputdir) != 0) //JMB need to change back to inputdir to read the file
91 :     handle.logMessage(LOGFAIL, "Error - failed to change input directory to", inputdir);
92 : ulcessvp 27 data = new StochasticData(_main.getInitialParamFile());
93 : agomez 1 if (chdir(workingdir) != 0)
94 :     handle.logMessage(LOGFAIL, "Error - failed to change working directory to", workingdir);
95 :    
96 :     EcoSystem->Update(data);
97 :     EcoSystem->checkBounds();
98 :    
99 :     EcoSystem->Initialise();
100 : ulcessvp 27 if (_main.printInitial()) {
101 : agomez 1 EcoSystem->Reset(); //JMB only need to call reset() before the print commands
102 : ulcessvp 27 EcoSystem->writeStatus(_main.getPrintInitialFile());
103 : agomez 1 }
104 :    
105 : ulcessvp 27 EcoSystem->Simulate(_main.runPrint());
106 :     if ((_main.getPI()).getPrint())
107 : agomez 1 EcoSystem->writeValues();
108 :    
109 :     while (data->isDataLeft()) {
110 :     data->readNextLine();
111 :     EcoSystem->Update(data);
112 :     EcoSystem->checkBounds();
113 : ulcessvp 27 EcoSystem->Simulate(_main.runPrint());
114 :     if ((_main.getPI()).getPrint())
115 : agomez 1 EcoSystem->writeValues();
116 :     }
117 :     delete data;
118 :    
119 :     } else {
120 :     if (EcoSystem->numVariables() != 0)
121 :     handle.logMessage(LOGWARN, "Warning - no parameter input file given, using default values");
122 :    
123 :     EcoSystem->Initialise();
124 : ulcessvp 27 if (_main.printInitial()) {
125 : agomez 1 EcoSystem->Reset(); //JMB only need to call reset() before the print commands
126 : ulcessvp 27 EcoSystem->writeStatus(_main.getPrintInitialFile());
127 : agomez 1 }
128 :    
129 : ulcessvp 27 EcoSystem->Simulate(_main.runPrint());
130 :     if ((_main.getPI()).getPrint())
131 : agomez 1 EcoSystem->writeValues();
132 :     }
133 :    
134 : ulcessvp 27 } else if (_main.runOptimise()) {
135 : ulcessvp 11 if (EcoSystem->numVariables() == 0)
136 :     handle.logMessage(LOGFAIL, "Error - no parameters can be optimised");
137 : agomez 1
138 : ulcessvp 27 if (_main.getInitialParamGiven()) {
139 : ulcessvp 11 if (chdir(inputdir) != 0) //JMB need to change back to inputdir to read the file
140 :     handle.logMessage(LOGFAIL, "Error - failed to change input directory to", inputdir);
141 : ulcessvp 27 data = new StochasticData(_main.getInitialParamFile());
142 : ulcessvp 11 if (chdir(workingdir) != 0)
143 :     handle.logMessage(LOGFAIL, "Error - failed to change working directory to", workingdir);
144 : agomez 1
145 : ulcessvp 11 EcoSystem->Update(data);
146 :     EcoSystem->checkBounds();
147 :     } else
148 :     handle.logMessage(LOGFAIL, "Error - no parameter input file specified");
149 : agomez 1
150 : ulcessvp 11 EcoSystem->Initialise();
151 : ulcessvp 27 if (_main.printInitial()) {
152 : ulcessvp 11 EcoSystem->Reset(); //JMB only need to call reset() before the print commands
153 : ulcessvp 27 EcoSystem->writeStatus(_main.getPrintInitialFile());
154 : ulcessvp 11 }
155 : agomez 1
156 : ulcessvp 16 #ifdef _OPENMP
157 : ulcessvp 27 if (_main.runParallel()){
158 : agomez 20 int numThr = omp_get_max_threads ( );
159 :     handle.logMessage(LOGINFO, "Info - initialise ", numThr," EcoSystems ");
160 :     EcoSystems = new Ecosystem*[numThr];
161 :     int i;
162 : ulcessvp 27 #pragma omp parallel for shared(EcoSystems,_main,data,handle)
163 : agomez 20 for (i=0; i<numThr; i++)
164 :     {
165 :     handle.logMessage(LOGINFO, "Info - Ecosystem ", i);
166 : ulcessvp 27 if (_main.getInitialParamGiven()) {
167 :     EcoSystems[i] = new Ecosystem(_main);
168 : agomez 20 EcoSystems[i]->Update(data);
169 :     EcoSystems[i]->checkBounds();
170 :     }
171 :     EcoSystems[i]->Initialise();
172 :     }
173 :     }
174 : ulcessvp 12 #endif
175 :     EcoSystem->Optimise();
176 : ulcessvp 11 delete data;
177 : ulcessvp 27 if (_main.getForcePrint())
178 :     EcoSystem->Simulate(_main.getForcePrint());
179 : agomez 1 }
180 :    
181 :     handle.logMessage(LOGMESSAGE, ""); //write blank line to log file
182 : ulcessvp 27 if (_main.printFinal() && !(_main.runNetwork()))
183 :     EcoSystem->writeStatus(_main.getPrintFinalFile());
184 : agomez 1
185 :     //JMB print final values of parameters
186 : ulcessvp 27 if (!(_main.runNetwork()))
187 :     EcoSystem->writeParams((_main.getPI()).getParamOutFile(), (_main.getPI()).getPrecision());
188 : agomez 1
189 :     if (check)
190 :     free(workingdir);
191 :    
192 :     delete EcoSystem;
193 :     handle.logFinish();
194 :     return EXIT_SUCCESS;
195 :     }

root@forge.cesga.es
ViewVC Help
Powered by ViewVC 1.0.0  

Powered By FusionForge