帝国理工学院冠状病毒建模代码/尼尔·弗格森(主要部分)

2020-05-07 19:53:26

PermalLink GitHub是5000多万开发人员的家园,他们一起工作,共同托管和审查代码、管理项目和构建软件。

报名。

void SeedInftion(Double,int*,int,int);//添加Run Number作为事件日志参数:ggilani-15/10/2014。

void InfectSweep(Double,int);//将int作为参数添加到InfectSweep以记录运行编号:ggilani-15/10/14。

void SaveOriginDestMatrix(Void);//新增保存原目标矩阵功能,可以与主结果分开:ggilani-13/02/15。

void SaveRandomSeeds(Void);//增加了保存每次运行随机种子的函数:ggilani-09/03/17。

void SaveEvents(Void);//新增此函数保存所有实现的感染事件:ggilani-15/10/14。

/*。/*/*/

/*全局变量(CovidSim.h文件中的一些结构和一些容器)-稍后分配的内存。

/*。/*/*/。

/TimeSeries是一个类型为Results的数组,用于存储(毫不奇怪)结果中每个量的时间序列。主要在RecordSample中使用。

/TSMeanNE和TSVarNE是非灭绝时间序列的均值和方差。TSMeanE和TSVarE是绝迹时间序列的均值和方差。TSMean和TSVar是指向已灭绝或未灭绝的指针。

Results*TimeSeries,*TSMean,*TSVar,*TSMeanNE,*TSVarNE,*TSMeanE,*TSVarE;/RecordSample,RecordInfTypes,SaveResults中使用的时间序列。TSMean和TSVar。

//每个像素最多可容纳20亿人,应该足够了。

int32_t*bmPopulation;//每个位图像素的种群。特殊值-1表示";国家边界";

gotP=goto=gotL=gots=gota=gotAP=gotScF=gotPP=0;

fprintf(stderr;sizeof(Int)=%i sizeof(Long)=%i sizeof(浮动)=%i sizeof(Double)=%i sizeof(无符号短整型)=%i sizeof(int*)=%i\n&34;,(Int)sizeof(Int),(Int)sizeof(Long),(Int)sizeof(浮点),(Int)sizeof(Double),(Int)sizeof(Double),(int。

/读取命令行参数-很多内容,例如随机数种子;(PRE)参数文件;二进制文件;总体数据;输出目录?等。

P.PlaceCloseIndesThresh=P.LoadSaveNetwork=P.DoHeteroDensity=P.DoPeriodicBoraries=P.DoSchoolFile=P.DoAdunitDemog=P.OutputDensFile=P.MaxNumThread=P.DoIntervenonFile=0;

P.KernelOffsetScale=P.KernelPowerScale=1.0;//添加了该选项,只有在命令行输入时才会更改内核参数:ggilani-15/10/2014。

/滚动查看命令行参数,预计它们可以使用各种IF语句。

如果((argv[i][0]!=';/';)&;&;((argv[i][2]!=';:';)&;&;(argv[i][3]!=';:';))perr=1;

ELSE IF(argv[i][1]==';K';&;&;argv[i][2]==';P';&;&;argv[3]==';::';)//添加了内核能力和偏移缩放,以便可以从命令行轻松更改,以便快速更改内核:ggilani-15/10/14。

否则,如果(argv[i][1]==';C';&;&;argv[i][2]==';L';&;&;argv[i][3]==';P';&;&;argv[i][4]==';1';&;&;argv[i][5]==';:&#。)//通用命令行指定的param-与param文件中的#1匹配

否则,如果(argv[i][1]==';C';&;&;argv[i][2]==';L';&;&;argv[i][3]==';P';&;&;argv[i][4]==';2';&;&;argv[i][5]==';:&#。)//通用命令行指定的param-与param文件中的#2匹配。

否则,如果(argv[i][1]==';C';&;&;argv[i][2]==';L';&;&;argv[i][3]==';P';&;&;argv[i][4]==';3';&;&;argv[i][5]==';:&#。)//通用命令行指定的param-与param文件中的#3匹配。

否则,如果(argv[i][1]==';C';&;&;argv[i][2]==';L';&;&;argv[i][3]==';P';&;&;argv[i][4]==';4';&;&;argv[i][5]==';:&#。)//通用命令行指定的param-与param文件中的#4匹配。

否则,如果(argv[i][1]==';C';&;&;argv[i][2]==';L';&;&;argv[i][3]==';P';&;&;argv[i][4]==';5';&;&;argv[i][5]==';:&#。)//通用命令行指定的param-与param文件中的#5匹配。

否则,如果(argv[i][1]==';C';&;&;argv[i][2]==';L';&;&;argv[i][3]==';P';&;&;argv[i][4]==';6';&;&;argv[i][5]==';:&#。)//通用命令行指定的param-与param文件中的#6匹配。

IF(PERR)ERR_CRICAL_FMT(";语法:\n%s/P:ParamFile/O:OutputFile[/AP:AirTravelFile][/s:SchoolFile][/D:DensityFile][/L:NetworkFileToLoad|/S:NetworkFileToSave][/R:R0scaling]Seed1 Seed2 Seed3 Seed4\n";,argv[0]);

/*//*。/*/*。

/*//*。/*/*

/*//*。/*/*。

/*//*。/*/*。

IF(!GotAP)ERR_CRICAL_FMT(";语法:\n%s/P:ParamFile/O:OutputFile/AP:AirTravelFile[/s:SchoolFile][/D:DensityFile][/L:NetworkFileToLoad|/S:NetworkFileToSave][/R:R0scaling]Seed1 Seed2 Seed3 Seed4\n";,argv[0]);

/*//*。/*/*。

/*//*。/*/*。

/*//*。/*/*。

/*//*。/*/*。

InitModel(I);//将运行号传入RunModel,以便我们可以将运行号保存在感染事件日志中:ggilani-15/10/2014

{//已中断以重置假期时间。请注意,这目前仅在第一次运行时发生,无论正在运行多少次实现。

for(i=0;i<;max_Countries;i++){CountryNames[i]=CountryNameBuf+128*i;CountryNames[i][0]=0;}。

for(i=0;i<;MAX_ADUNITS;i++){AdunitListNames[i]=AdunitListNamesBuf+128*i;AdunitListNames[i][0]=0;}。

如果(!GetInputParameter2(ParamFile_dat,PreParamFile_dat,";未灭绝的实现数";,";%i";,(void*)&;(p.nrn),1,1,0))p.nrn=p.nr;

如果(!GetInputParameter2(ParamFile_dat,PreParamFile_dat,";定义小爆发的最大病例数";,";%i";,(void*)&;(P.SmallEpidemicCases),1,1,0)P.SmallEpidemicCases=-1;

GetInputParameter(ParamFile_dat,PreParamFile_dat,";每空间单元格宽度的微单元数";,";%i";,(void*)&;(p.nmcl),1,1,0);

如果(!GetInputParameter2(ParamFile_dat,PreParamFile_dat,";Reset Seed for每次运行";,";%i";,(void*)&;(P.ResetSeeds),1,1,0))P.ResetSeeds=0;

如果(!GetInputParameter2(ParamFile_dat,PreParamFile_dat,";为每次运行";,";%i";,(void*)&;(P.KeepSameSeeds),1,1,0))P.KeepSameSeeds=0;//添加此命令以控制使用哪些种子:Gigilani 27/11/19

如果(!GetInputParameter2(ParamFile_dat,PreParamFile_dat,";Reset SeedsPostIntervention";,";%i";,(void*)&;(P.ResetSeedsPostIntervention),1,1,0))p.ResetSeedsPostIntervention=0;

如果(!GetInputParameter2(ParamFile_dat,PreParamFile_dat,";干预后重置种子的时间";,";%i";,(void*)&;(P.TimeToResetSeeds),1,1,0)P.TimeToResetSeeds=1000000;

如果(!GetInputParameter2(ParamFile_dat,AdminFile_dat,";Include家庭";,";%i";,(void*)&;(P.DoHousehold),1,1,0)P.DoHousehold=1;

如果(!GetInputParameter2(ParamFile_dat,PreParamFile_dat,";OutputAge";,";%i";,(void*)&;(P.OutputAge),1,1,0)P.OutputAge=1;/默认打开。

如果(!GetInputParameter2(ParamFile_dat,PreParamFile_dat,";OutputSeverityAdminUnit";,";%i";,(void*)&;(P.OutputSeverityAdminUnit),1,1,0)P.OutputSeverityAdminUnit=1;/默认打开。

如果(!GetInputParameter2(ParamFile_dat,PreParamFile_dat,";OutputR0";,";%i";,(void*)&;(P.OutputR0),1,1,0))p.OutputR0=0;/默认关闭。

如果(!GetInputParameter2(ParamFile_dat,PreParamFile_dat,";OutputControls";,";%i";,(void*)&;(P.OutputControls),1,1,0)P.OutputControls=0;/默认情况下关闭。

如果(!GetInputParameter2(ParamFile_dat,PreParamFile_dat,";OutputCountry";,";%i";,(void*)&;(P.OutputCountry),1,1,0)P.OutputCountry=0;/默认情况下关闭。

如果(!GetInputParameter2(ParamFile_dat,PreParamFile_dat,";OutputAdUnitVar";,";%i";,(void*)&;(P.OutputAdUnitVar),1,1,0)P.OutputAdUnitVar=0;/默认关闭。

如果(!GetInputParameter2(ParamFile_dat,PreParamFile_dat,";OutputHousehold";,";%i";,(void*)&;(P.OutputHousehold),1,1,0)P.OutputHousehold=0;/默认关闭。

如果(!GetInputParameter2(ParamFile_dat,PreParamFile_dat,";OutputInfType";,";%i";,(void*)&;(P.OutputInfType),1,1,0)P.OutputInfType=0;/默认关闭。

如果(!GetInputParameter2(ParamFile_dat,PreParamFile_dat,";OutputNonSeverity";,";%i";,(void*)&;(P.OutputNonSeverity),1,1,0)P.OutputNonSeverity=0;/默认关闭。

如果(!GetInputParameter2(ParamFile_dat,PreParamFile_dat,";OutputNonSummaryResults";,";%i";,(void*)&;(P.OutputNonSummaryResults),1,1,0)P.OutputNonSummaryResults=0;/默认关闭。

如果(!GetInputParameter2(ParamFile_dat,AdminFile_dat,";)更正家庭分配后的年龄分布,以精确匹配指定的人口统计";,";%i";,(void*)&;(P.DoCorrectAgeDist),1,1,0)p.DoCorrectAgeDist=0;

如果(!GetInputParameter2(ParamFile_dat,AdminFile_dat,";包括国家/地区内的行政单位";,";%i";,(void*)&;(P.DoAdUnits),1,1,0))p.DoAdUnits=1;

如果(!GetInputParameter2(ParamFile_dat,AdminFile_dat,";除数";,";%i";,(void*)&;(P.CountryDivisor),1,1,0))P.CountryDivisor=1;

如果(!(AdunitNamesBuf=(char*)malloc(3*ADUNIT_LOOKUP_SIZE*360*sizeof(Char)ERR_CRICAL(";无法分配临时存储\n";);

AdunitNames[3*i+1]=AdunitNamesBuf+3*i*360+60;

AdunitNames[3*i+2]=AdunitNamesBuf+3*i*360+160;

如果(!GetInputParameter2(ParamFile_dat,AdminFile_dat,";Divisor for Level 1管理单元";,";%i";,(void*)&;(P.AdunitLevel1Divisor),1,1,0)P.AdunitLevel1Divisor=1;

如果(!GetInputParameter2(ParamFile_dat,AdminFile_dat,";Mask for Level 1管理单元";,";%i";,(void*)&;(P.AdunitLevel1Mask),1,1,0))P.AdunitLevel1Mask=1000000000;

NA=(GetInputParameter2(ParamFile_dat,AdminFile_dat,";,";%s";,(void*)AdunitNames,3*ADUNIT_LOOKUP_SIZE,1,0))/3;

如果(!GetInputParameter2(ParamFile_dat,AdminFile_dat,";要包括的国家/地区数";,";%i";,(void*)&;nc,1,1,0))nc=0;

GetInputParameter(ParamFile_dat,AdminFile_dat,";要包含的国家/地区名称列表";,";%s";,(NC>;1)?(void*)CountryNames):((void*)CountryNames[0]),NC,1,0);

如果((AdunitNames[3*i+1][0])&;&;(!strcmp(AdunitNames[3*i+1],CountryNames[j])&;&;(atoi(AdunitNames[3*i])!=0)。

如果(!GetInputParameter2(ParamFile_dat,AdminFile_dat,";要包括";,";%i";,(void*)&;(P.NumAdunit),1,1,0))P.NumAdunit=0;

GetInputParameter(ParamFile_dat,AdminFile_dat,";要包括的1级管理单元列表";,";%s";,(P.NumAdunit>;1)?((void*)AdunitListNames):((void*)AdunitListNames[0]),P.NumAdunit,1,0);

对于(j=0;(j<;na)&;&;(!f);j++)f=(!strcmp(AdunitNames[3*j+2],AdunitListNames[i]));

如果(!GetInputParameter2(ParamFile_dat,AdminFile_dat;";,";%i";,(void*)&;(P.DoAdunitOutput),1,1,0))p.DoAdunitOutput=0;

如果(!GetInputParameter2(ParamFile_dat,AdminFile_dat,";在地图上绘制行政单位边界";,";%i";,(void*)&;(P.DoAdunitBoraryOutput),1,1,0)p.DoAdunitOveraryOutput=0;

如果(!GetInputParameter2(ParamFile_dat,AdminFile_dat,";正确的管理单元人口";,";%i";,(void*)&;(P.DoCorrectAdunitPop),1,1,0)P.DoCorrectAdunitPop=0;

如果(!GetInputParameter2(ParamFile_dat,AdminFile_dat,";Fix Pull Size at指定值";,";%i";,(void*)&;(P.DoSpecifyPop),1,1,0))P.DoSpecifyPop=0;

如果(!GetInputParameter2(ParamFile_dat,AdminFile_dat,";AdminFile_dat;";,";%i";,(void*)&;(P.AdunitBitmapDivisor),1,1,0))p.AdunitBitmapDivisor=1;

如果(!GetInputParameter2(ParamFile_dat,PreParamFile_dat,";只输出一个行政单位";,";%i";,(void*)&;(P.DoOutputPlaceDistForOneAdunit),1,1,0))p.DoOutputPlaceDistForOneAdunit=0;

如果(!GetInputParameter2(ParamFile_dat,PreParamFile_dat,";要输出的家庭距离分布";,";%i";,(void*)&;(P.OutputPlaceDistAdunit),1,1,0))p.DoOutputPlaceDistForOneAdunit=0;

如果(!GetInputParameter2(ParamFile_dat,AdminFile_dat,";include age";,";%i";,(void*)&;(p.doage),1,1,0))p.doage=1;

如果(!GetInputParameter2(ParamFile_dat,PreParamFile_dat,";初始免疫充当部分免疫";,";%i";,(void*)&;(P.DoPartialImmunity),1,1,0))p.DoPartialImmunity=1;

如果(!GetInputParameter2(ParamFile_dat,PreParamFile_dat,";初始免疫适用于所有家庭成员";,";%i";,(void*)&;(P.DoWholeHouseholdImmunity),1,1,0)p.DoWholeHouseholdImmunity=0;

如果(!GetInputParameter2(ParamFile_dat,AdminFile_dat,";Include空间传输";,";%i";,(void*)&;(P.DoSpatial),1,1,0))P.DoSpatial=1;

如果(!GetInputParameter2(ParamFile_dat,AdminFile_dat,";内核第三个参数";,";%lf";,(void*)&;(P.MoveKernelP3),1,1,0))p.MoveKernelP3=0;

如果(!GetInputParameter2(ParamFile_dat,AdminFile_dat,";Kernel 4 param";,";%lf";,(void*)&;(P.MoveKernelP4),1,1,0))p.MoveKernelP4=0;

如果(!GetInputParameter2(ParamFile_dat,AdminFile_dat,";Kernel Shape";,";%lf";,(void*)&;(P.MoveKernelShape),1,1,0))P.MoveKernelShape=1.0;

如果(!GetInputParameter2(ParamFile_dat,AdminFile_dat,";Airport Kernel Type";,";%i";,(void*)&;(P.AirportKernelType),1,1,0))p.AirportKernelType=P.MoveKernelType;

如果(!GetInputParameter2(ParamFile_dat,AdminFile_dat,";Airport Kernel Scale";,";%lf";,(void*)&;(P.AirportKernelScale),1,1,0))p.AirportKernelScale=P.MoveKernelScale;

如果(!GetInputParameter2(ParamFile_dat,AdminFile_dat,";Airport Kernel Shape";,";%lf";,(void*)&;(P.AirportKernelShape),1,1,0))p.AirportKernelShape=P.MoveKernelShape;

如果(!GetInputParameter2(ParamFile_dat,AdminFile_dat,";Airport Kernel 3param";,";%lf";,(void*)&;(P.AirportKernelP3),1,1,0))p.AirportKernelP3=P.MoveKernelP3;

如果(!GetInputParameter2(ParamFile_dat,AdminFile_dat,";Airport Kernel 4 param";,";%lf";,(void*)&;(P.AirportKernelP4),1,1,0))p.AirportKernelP4=P.MoveKernelP4;

如果(!GetInputParameter2(ParamFile_dat,AdminFile_dat,";位置类型数";,";%i";,(void*)&;(P.PlaceTypeNum),1,1,0))P.PlaceTypeNum=0;

GetInputParameter(ParamFile_dat,AdminFile_dat,";for age group 1 in place type";,";%i";,(void*)P.PlaceTypeAgeMin,P.PlaceTypeNum,1,0);

GetInputParameter(ParamFile_dat,AdminFile_dat,";age group 1 in place type";,";%i";,(void*)P.PlaceTypeAgeMax,P.PlaceTypeNum,1,0);

GetInputParameter(ParamFile_dat,AdminFile_dat,";年龄组1在位比例类型";,";%lf";,(void*)&;(P.PlaceTypePropAgeGroup),P.PlaceTypeNum,1,0);

如果(!GetInputParameter2(ParamFile_dat,AdminFile_dat,";年龄组2的就地比例类型";,";%lf";,(void*)&;(P.PlaceTypePropAgeGroup2),P.PlaceTypeNum,1,0))。

GetInputParameter(ParamFile_dat,AdminFile_dat,";年龄组2的最小年龄就地类型";,";%i";,(void*)P.PlaceTypeAgeMin2,P.PlaceTypeNum,1,0);

GetInputParameter(ParamFile_dat,AdminFile_dat,";年龄组2的最长年龄位置类型";,";%i";,(void*)P.PlaceTypeAgeMax2,P.placeType。

..