annotate bmsb.R @ 30:53d2ac56c953 draft

Uploaded
author greg
date Sun, 21 Aug 2016 10:20:56 -0400
parents be7c61620bb1
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
ff341ead2c11 Uploaded
greg
parents:
diff changeset
1 #!/usr/bin/env Rscript
ff341ead2c11 Uploaded
greg
parents:
diff changeset
2
25
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
3 suppressPackageStartupMessages(library("optparse"))
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
4
26
641c4954c76c Uploaded
greg
parents: 25
diff changeset
5 options_list <- list(
29
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
6 make_option(c("-i", "--input"), action="store", help="Input dataset"),
22
a5f80d53feee Uploaded
greg
parents: 21
diff changeset
7 make_option(c("-o", "--output"), action="store", help="Output dataset")
0
ff341ead2c11 Uploaded
greg
parents:
diff changeset
8 )
ff341ead2c11 Uploaded
greg
parents:
diff changeset
9
13
860730afa679 Uploaded
greg
parents: 11
diff changeset
10 parser <- OptionParser(usage="%prog [options] file", options_list)
860730afa679 Uploaded
greg
parents: 11
diff changeset
11 args <- parse_args(parser, positional_arguments=TRUE)
860730afa679 Uploaded
greg
parents: 11
diff changeset
12 opt <- args$options
860730afa679 Uploaded
greg
parents: 11
diff changeset
13
25
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
14 #########################################
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
15 daylength=function(L){
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
16 # from Forsythe 1995
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
17 p=0.8333
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
18 dl<-NULL
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
19 for (i in 1:365) {
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
20 theta<-0.2163108+2*atan(0.9671396*tan(0.00860*(i-186)))
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
21 phi<-asin(0.39795*cos(theta))
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
22 dl[i]<-24-24/pi*acos((sin(p*pi/180)+sin(L*pi/180)*sin(phi))/(cos(L*pi/180)*cos(phi)))
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
23 }
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
24 dl # return a vector of daylength in 365 days
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
25 }
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
26 #########################################
13
860730afa679 Uploaded
greg
parents: 11
diff changeset
27
25
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
28 #########################################
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
29 # source("daylength.R")
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
30 hourtemp=function(L,date){
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
31 # L=37.5 specify this in main program
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
32 threshold<-12.7 # base development threshold for BMSB
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
33 # threshold2<-threshold/24 degree hour accumulation
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
34 #expdata<-tempdata[1:365,11:13] # Use daily max, min, mean
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
35 dnp<-expdata[date,2] # daily minimum
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
36 dxp<-expdata[date,3] # daily maximum
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
37 dmean<-0.5*(dnp+dxp)
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
38 #if (dmean>0) {
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
39 #dnp<-dnp-k1*dmean
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
40 #dxp<-dxp+k2*dmean
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
41 #} else {
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
42 #dnp<-dnp+k1*dmean
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
43 #dxp<-dxp-k2*dmean
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
44 #}
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
45 dd<-0 # initialize degree day accumulation
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
46
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
47 if (dxp<threshold) {dd<-0} else
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
48 {
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
49 dlprofile<-daylength(L) # extract daylength data for entire year
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
50 T<-NULL # initialize hourly temperature
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
51 dh<-NULL #initialize degree hour vector
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
52 # date<-200
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
53 y<-dlprofile[date] # calculate daylength in given date
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
54 z<-24-y # night length
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
55 a<-1.86 # lag coefficient
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
56 b<-2.20 # night coefficient
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
57 #tempdata<-read.csv("tempdata.csv") #import raw data set
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
58 # Should be outside function otherwise its redundant
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
59 risetime<-12-y/2 # sunrise time
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
60 settime<-12+y/2 # sunset time
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
61 ts<-(dxp-dnp)*sin(pi*(settime-5)/(y+2*a))+dnp
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
62 for (i in 1:24){
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
63 if (i>risetime && i<settime) {
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
64 m<-i-5 # number of hours after Tmin until sunset
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
65 T[i]=(dxp-dnp)*sin(pi*m/(y+2*a))+dnp
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
66 if (T[i]<8.4) {dh[i]<-0} else
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
67 {dh[i]<-T[i]-8.4}
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
68 } else
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
69 if (i>settime){
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
70 n<-i-settime
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
71 T[i]=dnp+(ts-dnp)*exp(-b*n/z)
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
72 if (T[i]<8.4) {dh[i]<-0} else
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
73 {dh[i]<-T[i]-8.4}
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
74 } else
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
75 {
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
76 n<-i+24-settime
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
77 T[i]=dnp+(ts-dnp)*exp(-b*n/z)
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
78 if (T[i]<8.4) {dh[i]<-0} else
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
79 {dh[i]<-T[i]-8.4}
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
80 }
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
81 }
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
82 dd<-sum(dh)/24
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
83 }
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
84 return=c(dmean,dd)
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
85 return
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
86 }
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
87 #########################################
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
88
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
89
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
90 #########################################
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
91 mortality.egg=function(temperature){
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
92 if (temperature<12.7) {
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
93 mort.prob=0.8} else
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
94 {mort.prob=0.8-temperature/40
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
95 if (mort.prob<0) {mort.prob=0.01}
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
96 }
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
97 return=mort.prob
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
98 return
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
99 }
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
100 #########################################
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
101
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
102
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
103 #########################################
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
104 mortality.nymph=function(temperature){
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
105 if (temperature<12.7) {
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
106 mort.prob=0.03} else
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
107 {mort.prob=temperature*0.0008+0.03}
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
108 return=mort.prob
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
109 return
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
110 }
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
111 #########################################
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
112
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
113 #########################################
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
114 mortality.adult=function(temperature){
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
115 if (temperature<12.7) {
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
116 mort.prob=0.002} else
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
117 {mort.prob=temperature*0.0005+0.02}
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
118 return=mort.prob
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
119 return
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
120 }
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
121 #########################################
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
122
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
123 # model initialization
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
124 # setwd(“/home/lunarmouse/Dropbox/Nelson's project/")
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
125 # PLEASE CHANGE TO YOUR OWN DIRECTORY!!!
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
126 # PLEASE LOAD BSMB FUNCTIONS FIRST!!!
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
127
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
128 n<-1000 # start with 1000 individuals
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
129 # Generation, Stage, DD, T, Diapause
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
130 vec.ini<-c(0,3,0,0,0)
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
131 # overwintering, previttelogenic,DD=0, T=0, no-diapause
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
132 vec.mat<-rep(vec.ini,n)
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
133 vec.mat<-t(matrix(vec.mat,nrow=5)) # complete matrix for the population
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
134 L<-35.58 # latitude for Asheville NC
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
135 ph.p<-daylength(L) # complete photoperiod profile in a year, requires daylength function
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
136
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
137 #load("asheville2014.Rdat") # load temperature data@location/year
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
138 load(opt$input) # load temperature data@location/year
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
139 tot.pop<-NULL # time series of population size
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
140 gen0.pop<-rep(0,365) # gen.0 pop size
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
141 gen1.pop<-rep(0,365)
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
142 gen2.pop<-rep(0,365)
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
143 S0<-S1<-S2<-S3<-S4<-S5<-rep(0,365)
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
144 g0.adult<-g1.adult<-g2.adult<-rep(0,365)
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
145 N.newborn<-N.death<-N.adult<-rep(0,365)
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
146 dd.day<-rep(0,365)
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
147
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
148 ptm <- proc.time() # start tick
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
149
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
150 for (day in 1:365) { # all the day
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
151 photoperiod<-ph.p[day] # photoperiod in the day
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
152 temp.profile<-hourtemp(L,day)
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
153 mean.temp<-temp.profile[1]
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
154 dd.temp<-temp.profile[2]
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
155 dd.day[day]<-dd.temp
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
156 death.vec<-NULL # trash bin for death
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
157 birth.vec<-NULL # new born
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
158 #n<-length(vec.mat[,1]) # population size at previous day
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
159
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
160 for (i in 1:n) { # all individual
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
161 vec.ind<-vec.mat[i,] # find individual record
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
162
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
163 # first of all, still alive?
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
164 if(vec.ind[2]==0){ # egg
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
165 death.prob=mortality.egg(mean.temp)
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
166 } else if (vec.ind[2]==1 | vec.ind[2]==2) {
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
167 death.prob=mortality.nymph(mean.temp)
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
168 } else if (vec.ind[2]==3 | vec.ind[2]==4 | vec.ind[2]==5) { # for adult
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
169 if (day<120 && day>270) {death.prob=0.33*mortality.adult(mean.temp)
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
170 } else {
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
171 death.prob=mortality.adult(mean.temp)} # reduce adult mortality after fall equinox
19
d965e188feab Uploaded
greg
parents: 18
diff changeset
172 }
25
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
173
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
174
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
175 #(or dependent on temperature and life stage?)
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
176 u.d<-runif(1)
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
177 if (u.d<death.prob) {
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
178 death.vec<-c(death.vec,i)} else # aggregrate index of dead bug
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
179 {
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
180 # event 1 end of diapause
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
181 if (vec.ind[1]==0 && vec.ind[2]==3) { # overwintering adult (previttelogenic)
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
182 if (photoperiod>13.5 && vec.ind[3]>77 && day<180) { # add 77C to become fully reproductively matured
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
183 vec.ind<-c(0,4,0,0,0) # transfer to vittelogenic
29
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
184 vec.mat[i,]<-vec.ind
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
185
25
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
186 } else {
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
187 vec.ind[3]<-vec.ind[3]+dd.temp # add to DD
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
188 vec.ind[4]<-vec.ind[4]+1 # add 1 day in current stage
29
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
189 vec.mat[i,]<-vec.ind
25
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
190 }
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
191 }
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
192
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
193 if (vec.ind[1]!=0 && vec.ind[2]==3) { # NOT overwintering adult (previttelogenic)
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
194 current.gen<-vec.ind[1]
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
195 if (vec.ind[3]>77) { # add 77C to become fully reproductively matured
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
196 vec.ind<-c(current.gen,4,0,0,0) # transfer to vittelogenic
29
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
197 vec.mat[i,]<-vec.ind
25
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
198 } else {
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
199 vec.ind[3]<-vec.ind[3]+dd.temp # add to DD
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
200 vec.ind[4]<-vec.ind[4]+1 # add 1 day in current stage
29
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
201 vec.mat[i,]<-vec.ind
25
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
202 }
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
203 }
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
204
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
205
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
206
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
207 # event 2 oviposition -- where population dynamics comes from
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
208 if (vec.ind[2]==4 && vec.ind[1]==0 && mean.temp>10) { # vittelogenic stage, overwintering generation
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
209 if (vec.ind[4]==0) { # just turned in vittelogenic stage
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
210 n.birth=round(runif(1,2,8))} else{
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
211 p.birth=0.01 # daily probability of birth
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
212 u1<-runif(1)
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
213 if (u1<p.birth) {n.birth=round(runif(1,2,8))}
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
214 }
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
215 vec.ind[3]<-vec.ind[3]+dd.temp # add to DD
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
216 vec.ind[4]<-vec.ind[4]+1 # add 1 day in current stage
29
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
217 vec.mat[i,]<-vec.ind
25
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
218 if (n.birth>0) { # add new birth -- might be in different generations
29
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
219 new.gen<-vec.ind[1]+1 # generation +1
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
220 new.ind<-c(new.gen,0,0,0,0) # egg profile
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
221 new.vec<-rep(new.ind,n.birth)
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
222 new.vec<-t(matrix(new.vec,nrow=5)) # update batch of egg profile
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
223 birth.vec<-rbind(birth.vec,new.vec) # group with total eggs laid in that day
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
224 }
25
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
225 }
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
226
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
227 # event 2 oviposition -- for gen 1.
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
228 if (vec.ind[2]==4 && vec.ind[1]==1 && mean.temp>12.5 && day<222) { # vittelogenic stage, 1st generation
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
229 if (vec.ind[4]==0) { # just turned in vittelogenic stage
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
230 n.birth=round(runif(1,2,8))} else{
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
231 p.birth=0.01 # daily probability of birth
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
232 u1<-runif(1)
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
233 if (u1<p.birth) {n.birth=round(runif(1,2,8))}
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
234 }
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
235 vec.ind[3]<-vec.ind[3]+dd.temp # add to DD
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
236 vec.ind[4]<-vec.ind[4]+1 # add 1 day in current stage
29
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
237 vec.mat[i,]<-vec.ind
25
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
238 if (n.birth>0) { # add new birth -- might be in different generations
29
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
239 new.gen<-vec.ind[1]+1 # generation +1
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
240 new.ind<-c(new.gen,0,0,0,0) # egg profile
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
241 new.vec<-rep(new.ind,n.birth)
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
242 new.vec<-t(matrix(new.vec,nrow=5)) # update batch of egg profile
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
243 birth.vec<-rbind(birth.vec,new.vec) # group with total eggs laid in that day
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
244 }
25
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
245 }
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
246
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
247
19
d965e188feab Uploaded
greg
parents: 18
diff changeset
248
25
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
249 # event 3 development (with diapause determination)
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
250 # event 3.1 egg development to young nymph (vec.ind[2]=0 -> egg)
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
251 if (vec.ind[2]==0) { # egg stage
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
252 vec.ind[3]<-vec.ind[3]+dd.temp # add to DD
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
253 if (vec.ind[3]>=68) { # from egg to young nymph, DD requirement met
29
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
254 current.gen<-vec.ind[1]
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
255 vec.ind<-c(current.gen,1,0,0,0) # transfer to young nym stage
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
256 } else {
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
257 vec.ind[4]<-vec.ind[4]+1 # add 1 day in current stage
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
258 }
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
259 vec.mat[i,]<-vec.ind
25
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
260 }
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
261
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
262 # event 3.2 young nymph to old nymph (vec.ind[2]=1 -> young nymph: determines diapause)
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
263 if (vec.ind[2]==1) { # young nymph stage
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
264 vec.ind[3]<-vec.ind[3]+dd.temp # add to DD
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
265 if (vec.ind[3]>=250) { # from young to old nymph, DD requirement met
29
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
266 current.gen<-vec.ind[1]
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
267 vec.ind<-c(current.gen,2,0,0,0) # transfer to old nym stage
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
268 if (photoperiod<13.5 && day > 180) {vec.ind[5]<-1} # prepare for diapausing
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
269 } else {
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
270 vec.ind[4]<-vec.ind[4]+1 # add 1 day in current stage
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
271 }
25
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
272 vec.mat[i,]<-vec.ind
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
273 }
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
274
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
275
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
276 # event 3.3 old nymph to adult: previttelogenic or diapausing?
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
277 if (vec.ind[2]==2) { # old nymph stage
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
278 vec.ind[3]<-vec.ind[3]+dd.temp # add to DD
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
279 if (vec.ind[3]>=200) { # from old to adult, DD requirement met
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
280 current.gen<-vec.ind[1]
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
281 if (vec.ind[5]==0) { # non-diapausing adult -- previttelogenic
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
282 vec.ind<-c(current.gen,3,0,0,0)
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
283 } else { # diapausing
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
284 vec.ind<-c(current.gen,5,0,0,1)
29
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
285 }
25
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
286 } else {
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
287 vec.ind[4]<-vec.ind[4]+1 # add 1 day in current stage
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
288 }
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
289 vec.mat[i,]<-vec.ind
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
290 }
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
291
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
292 # event 4 growing of diapausing adult (unimportant, but still necessary)##
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
293 if (vec.ind[2]==5) {
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
294 vec.ind[3]<-vec.ind[3]+dd.temp
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
295 vec.ind[4]<-vec.ind[4]+1
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
296 vec.mat[i,]<-vec.ind
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
297 }
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
298
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
299 } # else if it is still alive
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
300
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
301 } # end of the individual bug loop
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
302
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
303 # find how many died
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
304 n.death<-length(death.vec)
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
305 if (n.death>0) {
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
306 vec.mat<-vec.mat[-death.vec, ]}
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
307 # remove record of dead
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
308 # find how many new born
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
309 n.newborn<-length(birth.vec[,1])
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
310 vec.mat<-rbind(vec.mat,birth.vec)
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
311 # update population size for the next day
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
312 n<-n-n.death+n.newborn
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
313
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
314 # aggregate results by day
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
315 tot.pop<-c(tot.pop,n)
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
316 s0<-sum(vec.mat[,2]==0) #egg
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
317 s1<-sum(vec.mat[,2]==1) # young nymph
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
318 s2<-sum(vec.mat[,2]==2) # old nymph
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
319 s3<-sum(vec.mat[,2]==3) # previtellogenic
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
320 s4<-sum(vec.mat[,2]==4) # vitellogenic
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
321 s5<-sum(vec.mat[,2]==5) # diapausing
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
322 gen0<-sum(vec.mat[,1]==0) # overwintering adult
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
323 gen1<-sum(vec.mat[,1]==1) # first generation
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
324 gen2<-sum(vec.mat[,1]==2) # second generation
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
325 n.adult<-sum(vec.mat[,2]==3)+sum(vec.mat[,2]==4)+sum(vec.mat[,2]==5) # sum of all adults
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
326 gen0.pop[day]<-gen0 # gen.0 pop size
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
327 gen1.pop[day]<-gen1
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
328 gen2.pop[day]<-gen2
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
329 S0[day]<-s0
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
330 S1[day]<-s1
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
331 S2[day]<-s2
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
332 S3[day]<-s3
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
333 S4[day]<-s4
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
334 S5[day]<-s5
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
335 g0.adult[day]<-sum(vec.mat[,1]==0)
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
336 g1.adult[day]<-sum((vec.mat[,1]==1 & vec.mat[,2]==3) | (vec.mat[,1]==1 & vec.mat[,2]==4) | (vec.mat[,1]==1 & vec.mat[,2]==5))
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
337 g2.adult[day]<-sum((vec.mat[,1]==2 & vec.mat[,2]==3) | (vec.mat[,1]==2 & vec.mat[,2]==4) | (vec.mat[,1]==2 & vec.mat[,2]==5))
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
338
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
339
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
340
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
341 N.newborn[day]<-n.newborn
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
342 N.death[day]<-n.death
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
343 N.adult[day]<-n.adult
29
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
344 #print(c(day,n,n.adult))
25
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
345 }
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
346
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
347 proc.time() - ptm
08cb8c7228c2 Uploaded
greg
parents: 22
diff changeset
348 dd.cum<-cumsum(dd.day)
29
be7c61620bb1 Uploaded
greg
parents: 27
diff changeset
349 save(dd.day,dd.cum,S0,S1,S2,S3,S4,S5,N.newborn,N.death,N.adult,tot.pop,gen0.pop,gen1.pop,gen2.pop,g0.adult,g1.adult,g2.adult,file=opt$output)