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

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

Powered By FusionForge