knitr::opts_chunk$set(fig.width=6.5, fig.height=3.5,fig.pos='center',echo=FALSE,comment='>',dpi=800)
library(ggplot2)
library(insol)
library(biosplit)

cfg <- loadConfig()
realWd <- system.file(package = "biosplit")
realWd <- "C:/Users/Siddarta.Jairam/Documents/MothMigrationModel"
figList <- list()
source(paste(realWd, "inst", "docs", "rmdUtils.R", sep='/'))

theme_set(getNiceTheme())

Corn

Data Collection

The corn acreage was collected from CropScape and aggregated for the 40x40km grid. This is a remote sensing tool with a small resolution of 30x30m which could mean that the data collection could be picking up family plots, small farms or characterization errors. since the FAW and potentially other migratory insects only infest with a higher spatial density of corn, there is a threshold for the amount of corn noticeable by a moth currently set at r cfg$CornThres hectares/1600m^2^.

Planting/Harvest

Currently the planting and harvesting practices are assumed to be fully represented by date of action which is dependent only on latitude. With warmer climates in the south comes early dates for both planting and harvesting corn. In the corn belt above Oklahoma, the dates plateaus. A linear piecewise function is said to encapsulate these practices as shown below.

aprioriLoc <- paste(realWd,'R', 'aprioriVars.R', sep='/')
getTimingSplit <- grabFunc(aprioriLoc, "getTimingSplit")

ys <- seq(23.22184, 49.32604,by=0.396)

plant <- getTimingSplit(cfg$plantTimes,ys)
harvest <- getTimingSplit(cfg$harvestTimes,ys)
datP <- data.frame(Latitude = ys,Julian_Date = plant)
datH <- data.frame(Latitude = ys,Julian_Date = harvest)
dat <- rbind(datP, datH)
dat$Type <- factor(c(rep("Planting_Dates", dim(datP)[1]), rep("Harvest_Dates", dim(datH)[1])))
sdf <- ggplot(dat, aes(x=Latitude, y=Julian_Date, linetype=Type)) + geom_line()
sdf + xlab(expression("Latitude (" *
         degree * "N)"))+ ylab("Time of Action (Julian date)")
figList <- updateCntList(figList,'cornDates')

Figure r figList$cornDates. The julian day when farmers at a particular latitude will either plant or harvest their corn

This fits well with reported numbers done by USDA Ag. Handbook 628 2010, though these numbers are hard to collect and have a large error bound. After the corn has been planted, the degree days are accumulated, GDD~corn~ , with minimum and maximum temperatures for that day as shown below.

calcDegDay <- grabFunc(aprioriLoc,"calcDegDay")
highs <- 5:35
DD <- 1.8 * calcDegDay(highs, 10, highLim = 30,lowLim = 10, shGrow = FALSE)
cdat <- data.frame(High_Temps = highs, Degree_Days = DD)
sdf <- ggplot(cdat, aes(x=High_Temps, y=Degree_Days)) + geom_line()
sdf + xlab(expression("High Temperatures at 4PM (" *
         degree * "C)"))+ ylab(expression("Degree Days (" * degree * "F)"))
figList <- updateCntList(figList,'cornGrowth')

Figure r figList$cornGrowth. How corn is grown with increasing high temperatures with a fixed low temperature at 10C

This means that below the corn threshold, the GDD~corn~ is 0. The GDD~corn~ starts accumulating on the planting date and stops at the harvest date where it goes back down to 0. The accumulation is bounded at 10°C and 30°C.

Eggs

When to lay

The decision to lay eggs is a yes or no decision every day. The conditions are if the GDD~corn~ is within the threshold and the limit, the age of the moth is greater than or equal to the oviposition day and the moths have more eggs remaining than the daily egg lay amount. This means that if the moth lands in an unsuitable region, it will want to fly the next night and will keep the eggs for the next landing. Therefore, the number of days that a moth oviposits is 7 days or more. This assumes that the fertilization rate is 100% and that fertilization is done before flight. Here are the relevant assumptions as they are set now.

dispVar(cfg$infestThres)
dispVar(cfg$infestLmt)
dispVar(cfg$oviDay)
dispVar(cfg$capEggs)
dispVar(cfg$eggsPerInfest)

The units are in °F, days old, or eggs/moth for capEggs. This capEggs comes from a literature value of around 500 eggs/female with a 50% mortality rate throughout the immature development and a 50% sex ratio. Throughout the model, this is the only mention of sex ratio as all the other parameters are assumed to be independent of sex ratio.

Egg Growth

The eggs that are there are already assumed to be "survivors" so the only growth involved is with a degree day calculation as done by Hogg et al. 1982 using a threshold of r cfg$TGDDbaseFAW°C.

Flight

Generational flight

When the moths first emerge, the moths have a choice of whether they want to fly to a new place or remain a local population. Once a moth decides to stay in the local population they remain there till they die. This is the same for the nightly migration, so the age of the migrant moths is heavily weighted for the young (1-7 days old) moths. The split between the generational local and migrant populations is based on whether or not the corn is in the silking stage. This is shown as a proportion of the moths in the migrant population as shown below:

dispVar(cfg$flightPropBeforeSilk)
dispVar(cfg$flightPropAfterSilk)

cornGDD <- seq(0,3000,by=50)
iterateLoc <- paste(realWd, "R", "iterateHYSPLIT.R", sep='/')
genFlightProp <- grabFunc(iterateLoc, 'genFlightProp', shouldCat=1)

fp <- qplot(cornGDD,
                        genFlightProp(cornGDD,
                                                    cfg$infestLmt,
                                                    cfg$flightPropBeforeSilk,
                                                    cfg$flightPropAfterSilk)
                        ,ylim=c(0,1))
fp + geom_line() + xlab(expression("GDD (" *
         degree * "F)"))+ ylab("Prop. of migrant moths")
figList <- updateCntList(figList,'genFlight')

Figure r figList$genFlight. The split between the generational migrants and the local moths

When the corn is outside the infest bounds, all the moths want to fly. This is only encountered for a generation when the moths lay eggs near the edge of the infest limit or when the corn is harvested before the moth is fully developed. The moths generation should be viable in this situation but there is not suitable area for a local population so they all want to leave for better areas.

Of the moths that emerge as migrants, their date of first flight is spread over 7 days using an exponential decay function with a half-life of 2 days. The migrant moths with first flight days that are later in the week are kept separate from the local and migrant populations but grow just the same. The function to calculate the amount of moths that fly each day is shown below:

s <- 1:6
spread <- exp(-(s-1)/2)-exp(-(s)/2)
spread <- c(spread,1-sum(spread))
fm <- qplot(1:7,spread,ylim=c(0,1), geom="bar", stat="identity")
fm + xlab("Days")+ ylab("Prop. of Moths that fly")
figList <- updateCntList(figList,'spread')

Figure r figList$spread. The proportion of the moth population that leave on any given day in the week after emergence

Nightly flight

Each subdivided population of migrant moths that can and wants to fly is sent into a seperate run into HYSPLIT. The only thing that HYSPLIT sees is indiscriminate particles at the specified locations launched up to 500m at dusk over the course of an hour. Hpwever, there are some location specific parameters that are reset every flight. One of these is the area of emmision being the amount of corn in the take-off grid cell. The idea is that the abundance of corn would lead to more local movement throughout the day simulated by a growing circle centered on the center of the grid cell. In this way, areas with little corn are basically point sources which can be easily manipulated by a stray gust of wind, where a large corn producing area can be more resilient.

Another parameter that changed is the duration of the flight. The flight duration is defined as the time between dusk and dawn minus one hour. As the earth rotates around the sun, the time between dusk and dawn changes with respect to latitude. This is shown below.

getNightDur <- grabFunc(iterateLoc,'getNightDur')

jds <- 1:360
dat <- list()
gridLen <- length(ys)
dat1 <- data.frame(xindp = jds, ydep = getNightDur(ys[1],30,jds),
                                     Lat = factor(rep(toString(round(ys[1],1)),length(jds))))
dat2 <- data.frame(xindp = jds, ydep = getNightDur(ys[gridLen/2],30,jds),
                                     Lat = factor(rep(toString(round(ys[gridLen/2],1)),length(jds))))
dat3 <- data.frame(xindp = jds, ydep = getNightDur(ys[gridLen],30,jds),
                                     Lat = factor(rep(toString(round(ys[gridLen],1)),length(jds))))
dat <- rbind(dat1, dat2,dat3)

pDur <- ggplot(dat, aes(x=xindp, y=ydep, linetype=Lat))
pDur + geom_line() + xlab("Julian Day")+ ylab("Flight Duration (hrs)")

figList <- updateCntList(figList,'flightDur')

Figure r figList$flightDur. The distribution of flight duration with respect to latitude and day of the year. The solid line represents r round(ys[1],2) latitude (Tip of TX), the dotted line refers to r round(ys[gridLen/2], 2) latitude () and the dashed line refers to r ys[gridLen] latitude (CA-US border)

The reason the time is limited to hour length is due HYSPLIT stipulating that minutes cannot be specified when the time is above 1 hour. If this were not the case, the familiar curves would be shown with the higher latitudes having a higher amplitude.

After HYSPLIT runs, the check for whether the migrant population wants to settle down in a location is a variable called livability. The qualitative definition is the suitability of the area for a population of FAW. In the future this can include factors like pesticide use, predators, disease, number of days in flight, etc. Right now it is a piecewise function just on GDD~corn~. The functions is as follows:

dispVar(cfg$infestThres)
howLivable <- grabFunc(iterateLoc, 'howLivable', shouldCat=1)

Here 'cGrowth' is the GDD~corn~ in °F. 1000°F refers to a fully emerged plant. 1400°F is the silking stage. 2400°F refers to a developed plant. The function looks like this:

p <- qplot(cornGDD,
                     howLivable(cornGDD, cfg$infestThres),
                     ylim=c(0,1))
p + geom_line() + xlab(expression("GDD(" *
         degree * "F)"))+ ylab("Livability")
figList <- updateCntList(figList,'howLivable')

Figure r figList$howLivable. A metric, livability, of how suitable a grid cell is for sustaining a local population of moths

Death

Cohorts

Right now the death rate is constant 50% for all x,y,z and t during the developmental stages of insect growth. The cohorts are only removed from tracking by turning into a mature moth at a GDD~FAW~ of r cfg$cohortGDDThres °C.

Moths

Moths do not have a biological mortality factor other than old age at r cfg$lifeSpan days. They do have a meteorological mortality factor based on the destinations that HYSPLIT simulates after 12 hours of nightly flight. If the destination grid is outside of the grid extent or in an area that has a livability of 0 as shown in Figure r figList$howLivable, then the Moth population dies. This makes it so moths cannot survive on fallow lands or in an ocean for a day. The indirect impact is that the Moth population is lowered due to the livability of the surrounding areas. This happens on the short term with the removal of migrant moths, and in the long term by the removal of the eggs that these moths carry.

For the population of "migrant moths", another death rate is wanting to settle down and become a local population. This decision cannot be reversed and is based on the livability as shown in r figList$howLivable. The impact is that the migrant moths are much younger than the entire moth population. Since the capacity of eggs is a limiting factor in the effectiveness of the moths to infest a particular area, old migrant moths are then rare and inconsequential with the current model.



sidjai/biosplit documentation built on May 29, 2019, 9:59 p.m.