//---------------------------------------------------------------------
///<summary>
///Simulate an Epidemic - This is the controlling function that calls the
///subsequent function. The basic logic of an epidemic resides here.
///</summary>
public static Epidemic Simulate(IAgent agent,
int currentTime,
int timestep,
int ROS)
{
Epidemic CurrentEpidemic = new Epidemic(agent);
UI.WriteLine(" New BDA Epidemic Activated: {0}.", agent.AgentName);
SiteResources.SiteResourceDominance(agent, ROS);
SiteResources.SiteResourceDominanceModifier(agent);
if (agent.Dispersal)
{
//Asynchronous - Simulate Agent Dispersal
// Calculate Site Vulnerability without considering the Neighborhood
// If neither disturbance modifiers nor ecoregion modifiers are active,
// Vulnerability will equal SiteReourceDominance.
SiteResources.SiteVulnerability(agent, ROS, false);
Epicenters.NewEpicenters(agent, timestep);
}
else
{
//Synchronous: assume that all Active sites can potentially be
//disturbed without regard to initial locations.
foreach (ActiveSite site in Model.Core.Landscape)
{
agent.OutbreakZone[site] = Zone.Newzone;
}
}
//Consider the Neighborhood if requested:
if (agent.NeighborFlag)
{
SiteResources.NeighborResourceDominance(agent);
}
//Recalculate Site Vulnerability considering neighbors if necessary:
SiteResources.SiteVulnerability(agent, ROS, agent.NeighborFlag);
CurrentEpidemic.DisturbSites(agent);
return(CurrentEpidemic);
}