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

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

Powered By FusionForge