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/simulation.cc
[mareframe] / trunk / gadget / simulation.cc Repository:
ViewVC logotype

Annotation of /trunk/gadget/simulation.cc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 17 - (view) (download)

1 : agomez 1 #include "ecosystem.h"
2 :     #include "errorhandler.h"
3 :     #include "gadget.h"
4 :     #include "interruptinterface.h"
5 :     #include "global.h"
6 :    
7 : ulcessvp 17 #ifdef INTERRUPT_HANDLER
8 :     extern volatile int interrupted;
9 :     extern volatile int interrupted_print;
10 :     extern Ecosystem* EcoSystem;
11 :     #endif
12 :    
13 :    
14 : agomez 1 void Ecosystem::updatePredationOneArea(int area) {
15 :     int i;
16 :     // calculate the number of preys and predators in area.
17 :     for (i = 0; i < basevec.Size(); i++)
18 :     if (basevec[i]->isInArea(area))
19 :     basevec[i]->calcNumbers(area, TimeInfo);
20 :     for (i = 0; i < basevec.Size(); i++)
21 :     if (basevec[i]->isInArea(area))
22 :     basevec[i]->calcEat(area, Area, TimeInfo);
23 :     for (i = 0; i < basevec.Size(); i++)
24 :     if (basevec[i]->isInArea(area))
25 :     basevec[i]->checkEat(area, TimeInfo);
26 :     for (i = 0; i < basevec.Size(); i++)
27 :     if (basevec[i]->isInArea(area))
28 :     basevec[i]->adjustEat(area, TimeInfo);
29 :     for (i = 0; i < basevec.Size(); i++)
30 :     if (basevec[i]->isInArea(area))
31 :     basevec[i]->reducePop(area, TimeInfo);
32 :     }
33 :    
34 :     void Ecosystem::updatePopulationOneArea(int area) {
35 :     int i;
36 :     // under updates are movements to mature stock, renewal, spawning and straying.
37 :     for (i = 0; i < basevec.Size(); i++)
38 :     if (basevec[i]->isInArea(area))
39 :     basevec[i]->Grow(area, Area, TimeInfo);
40 :     for (i = 0; i < basevec.Size(); i++)
41 :     if (basevec[i]->isInArea(area))
42 :     basevec[i]->updatePopulationPart1(area, TimeInfo);
43 :     for (i = 0; i < basevec.Size(); i++)
44 :     if (basevec[i]->isInArea(area))
45 :     basevec[i]->updatePopulationPart2(area, TimeInfo);
46 :     for (i = 0; i < basevec.Size(); i++)
47 :     if (basevec[i]->isInArea(area))
48 :     basevec[i]->updatePopulationPart3(area, TimeInfo);
49 :     for (i = 0; i < basevec.Size(); i++)
50 :     if (basevec[i]->isInArea(area))
51 :     basevec[i]->updatePopulationPart4(area, TimeInfo);
52 :     for (i = 0; i < basevec.Size(); i++)
53 :     if (basevec[i]->isInArea(area))
54 :     basevec[i]->updatePopulationPart5(area, TimeInfo);
55 :     }
56 :    
57 :     void Ecosystem::updateAgesOneArea(int area) {
58 :     int i;
59 :     // age related update and movements between stocks.
60 :     for (i = 0; i < basevec.Size(); i++)
61 :     if (basevec[i]->isInArea(area))
62 :     basevec[i]->updateAgePart1(area, TimeInfo);
63 :     for (i = 0; i < basevec.Size(); i++)
64 :     if (basevec[i]->isInArea(area))
65 :     basevec[i]->updateAgePart2(area, TimeInfo);
66 :     for (i = 0; i < basevec.Size(); i++)
67 :     if (basevec[i]->isInArea(area))
68 :     basevec[i]->updateAgePart3(area, TimeInfo);
69 :     }
70 :    
71 :     void Ecosystem::Simulate(int print) {
72 :     int i, j, k;
73 :    
74 :     handle.logMessage(LOGMESSAGE, ""); //write blank line to log file
75 :     for (j = 0; j < likevec.Size(); j++)
76 :     likevec[j]->Reset(keeper);
77 :     for (j = 0; j < likevec.Size(); j++)
78 :     likevec[j]->addLikelihoodKeeper(TimeInfo, keeper);
79 :    
80 :     for (j = 0; j < tagvec.Size(); j++)
81 :     tagvec[j]->Reset();
82 :    
83 :     TimeInfo->Reset();
84 :     for (i = 0; i < TimeInfo->numTotalSteps(); i++) {
85 :     for (j = 0; j < basevec.Size(); j++)
86 :     basevec[j]->Reset(TimeInfo);
87 :    
88 :     // add in any new tagging experiments
89 :     tagvec.updateTags(TimeInfo);
90 :    
91 :     if (print)
92 :     for (j = 0; j < printvec.Size(); j++)
93 :     printvec[j]->Print(TimeInfo, 1); //start of timestep, so printtime is 1
94 :    
95 :     // migration between areas
96 :     if (Area->numAreas() > 1) //no migration if there is only one area
97 :     for (j = 0; j < basevec.Size(); j++)
98 :     basevec[j]->Migrate(TimeInfo);
99 :    
100 :     // predation can be split into substeps
101 :     for (k = 0; k < TimeInfo->numSubSteps(); k++) {
102 :     for (j = 0; j < Area->numAreas(); j++)
103 :     this->updatePredationOneArea(j);
104 :     TimeInfo->IncrementSubstep();
105 :     }
106 :    
107 :     // maturation, spawning, recruits etc
108 :     for (j = 0; j < Area->numAreas(); j++)
109 :     this->updatePopulationOneArea(j);
110 :    
111 : ulcessvp 11 for (j = 0; j < likevec.Size(); j++){
112 : agomez 1 likevec[j]->addLikelihood(TimeInfo);
113 : ulcessvp 11 }
114 : agomez 1
115 :     if (print)
116 :     for (j = 0; j < printvec.Size(); j++)
117 :     printvec[j]->Print(TimeInfo, 0); //end of timestep, so printtime is 0
118 :    
119 :     for (j = 0; j < Area->numAreas(); j++)
120 :     this->updateAgesOneArea(j);
121 :    
122 :     #ifdef INTERRUPT_HANDLER
123 :     if (interrupted) {
124 :     InterruptInterface ui;
125 :     if (!ui.menu()) {
126 :     handle.logMessage(LOGMESSAGE, "\n** Gadget interrupted - quitting current simulation **");
127 :     char interruptfile[15];
128 :     strncpy(interruptfile, "", 15);
129 :     strcpy(interruptfile, "interrupt.out");
130 : ulcessvp 17 EcoSystem->writeParams(interruptfile, 0);
131 : agomez 1 handle.logMessage(LOGMESSAGE, "** Gadget interrupted - quitting current simulation **");
132 :     exit(EXIT_SUCCESS);
133 :     }
134 :     interrupted = 0;
135 : ulcessvp 17 interrupted_print = 0;
136 : agomez 1 }
137 :     #endif
138 :    
139 :     // remove any expired tagging experiments
140 :     tagvec.deleteTags(TimeInfo);
141 :    
142 :     // increase the time in the simulation
143 :     TimeInfo->IncrementTime();
144 :     }
145 :    
146 :     // remove all the tagging experiments - they must have expired now
147 :     tagvec.deleteAllTags();
148 :    
149 :     likelihood = 0.0;
150 :     for (j = 0; j < likevec.Size(); j++)
151 :     likelihood += likevec[j]->getLikelihood();
152 :    
153 :     if (handle.getLogLevel() >= LOGMESSAGE) {
154 :     handle.logMessage(LOGMESSAGE, "\nThe current likelihood scores for each component are:");
155 :     for (j = 0; j < likevec.Size(); j++)
156 :     handle.logMessage(LOGMESSAGE, likevec[j]->getName(), likevec[j]->getLikelihood());
157 :     handle.logMessage(LOGMESSAGE, "\nThe current overall likelihood score is", likelihood);
158 :     }
159 :     }

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

Powered By FusionForge