# basicplus.model # Facilitated Systems # http://facilitatedsystems.com/ # 2007-03-27 States = { NotYet, # Groups who have not yet become concert-goers Now, # Current concert-goers NoMore # Past concert-goers }; Outputs = { NewConcertGoers_PA, DepartingConcertGoers_PA, ReproductionRate, Population, NotYetBirths_PA, NowBirths_PA, NoMoreBirths_PA, NotYetDeaths_PA, NowDeaths_PA, NoMoreDeaths_PA, NotYetImmigration_PA, NowImmigration_PA, NoMoreImmigration_PA }; InitialNotYet = 90.0e6; InitialNow = 10.0e6; InitialNoMore = 0.0; Immigration_PA = 2.0e6; FractNotYetImmigration = 0.90; FractNowImmigration = 0.10; FractNoMoreImmigration = 0.00; Fecundity = 2.1; # births per female Lifespan = 75.0; # years Contacts_PA = 40.0; Infectiousness = 1.0 / 900.0; FractionDeparting_PA = 0.04; AdvertisingIntensity = 1.0; # Relative intensity of advertising effort DMNL AdvertisingEffectiveness = 0.0005; # 1 / YEAR Initialize{ NotYet = InitialNotYet; Now = InitialNow; NoMore = InitialNoMore; } Dynamics{ Population = NotYet + Now + NoMore; WOM_PA = Contacts_PA * (Now / Population) * Infectiousness * NotYet; Advertising_PA = NotYet * AdvertisingIntensity * AdvertisingEffectiveness; NewConcertGoers_PA = WOM_PA + Advertising_PA; DepartingConcertGoers_PA = Now * FractionDeparting_PA; # Births ############################################################# # Births out of one group don't have to go back to that group. NotYetBirths_PA = Fecundity * NotYet / (Lifespan - 40); NowBirths_PA = Fecundity * Now / (Lifespan - 40); NoMoreBirths_PA = Fecundity * NoMore / (Lifespan - 40); # Immigration ######################################################## NotYetImmigration_PA = FractNotYetImmigration * Immigration_PA; NowImmigration_PA = FractNowImmigration * Immigration_PA; NoMoreImmigration_PA = FractNoMoreImmigration * Immigration_PA; # Deaths ############################################################# NotYetDeaths_PA = NotYet / Lifespan; NowDeaths_PA = Now / Lifespan; NoMoreDeaths_PA = NoMore / Lifespan; ###################################################################### dt(NotYet) = (NotYetImmigration_PA + NotYetBirths_PA) - (NewConcertGoers_PA + NotYetDeaths_PA); dt(Now) = (NowImmigration_PA + NowBirths_PA +NewConcertGoers_PA) - (DepartingConcertGoers_PA + NowDeaths_PA); dt(NoMore) = (NoMoreImmigration_PA + NoMoreBirths_PA + DepartingConcertGoers_PA) - (NoMoreDeaths_PA); } CalcOutputs{ ReproductionRate = Contacts_PA * Infectiousness * (1.0 / FractionDeparting_PA) * (NotYet/Population); }