#include #include #include "header.h" #define USPOP 2147483647.0 main () { int b,d,j,k,n,x,y,S,I,Q,D,DS,cD; int flag, iparm[20]; long testrand; char instring[25]; /* Level 0 is the data below. 0=Ocean, 1=rural, 2=urban, 3=city */ /* Level 1 is the number of infected people */ /* Level 2 is a temporary level for the number of infectious people */ /* Level 3 is the population of the area */ /* Level 4 is the number of removed people, immune or quarantined */ /* Level 5 are the number of susceptibles */ /* Level 6-12 are temp areas for a week-long incubation */ /* Level 13 is the number of dead people */ /* Read population data (Level) */ int image[DEF][DEF] double a[15][34][44] = { { {0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0} {0, 0,0,0,1,3, 1,1,1,1,1, 2,1,1,1,1, 1,1,1,1,1, 0, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1} {0, 0,0,0,1,2, 2,2,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1} {0, 0,0,0,2,3, 2,1,1,1,1, 1,1,1,1,1, 1,2,1,1,1, 1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1} {0, 0,0,0,1,2, 1,1,2,1,1, 1,1,1,1,1, 1,1,1,1,1, 1, 2,1,1,1,1, 1,1,1,1,1, 1,1,1,1} {0, 0,0,1,3,1, 1,1,1,1,1, 1,2,1,1,1, 1,1,1,1,1, 1, 1,1,1,1,1, 0,0,1,1,1, 1,1,1,1} {0, 0,0,1,2,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1, 1,1,1,1,1, 0,0,0,1,1, 1,1,1,1} {0, 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1, 1,1,1,0,0, 1,0,0,1,1, 1,1,1,1} {0, 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1, 1,1,1,1,1, 1,1,0,0,0, 0,0,1,1} {0, 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1, 1,1,2,1,1, 1,0,1,1,0, 0,1,3,0} {0, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1, 1,1,3,1,1, 1,2,0,1,2, 0,2,2,3} {0, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1, 1,1,1,1,1, 2,0,1,2,2, 3,0,2,1} {0, 2,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1, 1,1,1,2,2, 2,0,2,2,3, 3,2,1,1} {0, 3,3,1,2,1, 1,1,1,1,3, 1,1,1,1,1, 1,1,1,1,1, 1, 1,1,2,1,2, 2,3,2,2,2, 2,3,2,2} {0, 0,3,2,1,1, 1,1,1,1,1, 1,1,1,1,2, 1,1,1,1,1, 1, 2,1,1,1,1, 2,2,2,2,2, 2,1,1,2} {0, 0,2,1,1,1, 1,1,1,1,1, 1,1,1,1,3, 1,1,1,1,1, 1, 1,2,1,1,1, 2,2,2,3,3, 2,1,1,2} {0, 0,1,1,2,1, 1,1,1,1,1, 1,1,1,1,1, 2,1,1,1,1, 1, 2,2,2,1,1, 2,1,1,1,2, 1,1,2,1} {0, 0,2,1,1,1, 2,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1, 2,2,1,1,3, 1,1,1,2,2, 1,1,1,2} {0, 0,1,2,2,1, 1,2,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 2, 1,1,1,2,1, 1,1,2,1,1, 2,1,1,2} {0, 0,0,3,3,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1, 1,1,1,1,1, 1,1,2,2,1, 2,1,1,2} {0, 0,0,0,2,2, 1,1,1,1,1, 1,1,1,2,1, 1,1,1,1,1, 1, 2,1,1,1,1, 1,2,1,1,1, 1,2,1,1} {0, 0,0,0,3,1, 1,1,2,1,1, 1,1,1,1,1, 1,2,1,1,1, 2, 1,1,1,2,1, 2,1,1,1,2, 2,1,1,2} {0, 0,0,0,0,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0, 1,1,1,1,1, 2,1,1,2,2, 3,2,2,2} {0, 0,0,0,0,1, 1,1,1,2,1, 1,1,1,1,1, 1,2,1,1,1, 2, 1,1,2,1,2, 1,1,2,2,2, 1,1,1,2) {0, 0,0,0,0,1, 1,0,1,1,1, 1,1,2,1,1, 1,1,1,2,1, 3, 3,2,2,1,1, 1,2,2,2,2, 1,1,1,1} {0, 0,0,0,0,1, 0,1,1,1,1, 1,1,1,1,1, 1,1,2,1,2, 2, 1,1,1,2,1, 1,1,1,1,1, 1,1,1,2} {0, 0,0,0,0,0, 1,0,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 2, 1,1,1,1,1, 2,1,2,2,1, 1,2,2,1} {0, 0,0,0,0,0, 1,0,1,1,1, 1,1,1,1,1, 1,1,1,2,2, 2, 2,2,1,1,1, 3,2,0,0,0, 0,0,2,3} {0, 0,0,0,0,0, 1,1,0,1,1, 1,1,1,1,1, 1,1,1,3,1, 1, 3,2,0,0,1, 1,1,0,0,0, 0,0,2,1) {0, 0,0,0,0,0, 1,1,0,2,1, 1,1,1,1,1, 1,1,1,1,1, 3, 1,0,0,0,0, 0,0,0,0,0, 0,0,2,2} {0, 0,0,0,0,0, 0,1,0,0,1, 1,1,1,1,1, 1,1,1,2,1, 2, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0} {0, 0,0,0,0,0, 0,1,0,1,1, 1,1,1,1,1, 1,1,1,1,1, 0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0} {0, 0,0,0,0,0, 0,0,1,0,0, 2,1,1,1,2, 1,1,2,2,1, 2, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0} {0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0} } }; /* Set the population of each area (Level 3) */ for (k=1; k < 33; k++) { for (j=1;j<43; j++} { if (a[0][k][j]==1) a[3][k][j]=70000; if (a[0][k][j]==1) a[3][k][j]=70000; if (a[0][k][j]==1) a[3][k][j]=70000; if (a[0][k][j]==1) a[3][k][j]=70000; } } printf("%f", a[1][24][22]); printf("starting loop"); printf("\n"); a[1][24][22]=1; /* Initial location for outbreak */ n=0; while (n++ < 150) /* Initiate the "big, big loop" */ { /* Immunizations start one week after magnitude is realized */ if (n > 19) { for (k=1;k<33;k++) { for (j=1; j< 43; j++) { if (a[0][k][j] > 0) { a[5][k][j] = a[5][k][j] * .98; a[4][k][j] = a[4][k][j] + a[5][k][j] * .02; } } } } } /* Update number of susceptibles (Level 5) */ for (k=1; k < 33; k++) { for (j=1; j< 43; j++) { a[5][k][j] = a[3][k][j] - a[4][k][j] - a[1][k][j]; if ( a[5][k][j] > 0) a[5][k][j] =0; } } /* Update number of infected people (Level 1) */ for (k=1; k < 33; k++) { for (j=1;j<43;j++) { a[1][k][j] = a[3][k][j] - a[5][k][j] - a[4][k][j]; if (a[1][k][j] < 0) a[1][k][j] = 0; if (n == 20 && a[0][k][j] >0) a[1][k][j] = a[1][k][j] +1; } } /* Upgrade contagion level in individual cells (Level 2) */ for (k=1; k < 33; k++) { for (j=1;j<43;j++) { a[2][k][j] = a[1][k][j] + (rand()/USPOP) * .7 * a[0][k][j] * a[1][k][j] * (a[5][k][j]/a[3][k][j]); } } /* Upgrade contagion levels from neighboring cells (Level 2) */ for (k=1; k < 32; k++) { for (j=1; j < 42; j++) { if (a[0][k][j] >0) a[2][k][j] = a[2][k][j] + .1 * (rand()/USPOP) * (a[0][k-1][j] * a[1][k-1][j] + a[0][k-1][j+1] * a[1][k-1][j+1] + a[0][k][j-1] * a[1][k][j-1] + a[0][k][j+1] * a[1][k][j+1] + a[0][k+1][j] * a[1][k+1][j] + a[0][k+1][j+1] * a[1][k+1][j+1]) * (a[5][k][j]/a[3][k][j]); } } for (k =2; k < 32; k+= 2) { for (j=1; j < 42; j++) { if (a[0][k][j] > 0) a[2][k][j] = a[2][k][j] + .1 * (rand()/USPOP) * (a[0][k-1][j-1] * a[1][k-1][j-1] + a[0][k-1][j] * a[1][k-1][j] + a[0][k][j-1] * a[1][k][j-1] + a[0][k][j+1] * a[1][k][j+1] + a[0][k+1][j-1] * a[1][k+1][j-1] + a[0][k+1][j] * a[1][k+1][j]) * (a[5][k][j]/a[3][k][j]); } } /* Upgrade contagion level based on travel between airports */ /* Statistical Abstracts records 40 million passengers per year */ /* between major cities, or roughly 100,000 per day */ for (k=1; k < 32; k++) { for (j=1; j < 42; j++) { if (a[0][k][j] == 3) { a[2][k][j] = a[2][k][j] + ( a[1][1][5] + a[1][3][5] + a[1][5][4] + a[1][13][1] + a[1][14][2] + a[1][19][3] + a[1][21][4] + a[1][13][10] + a[1][15][15] + a[1][24][21] + a[1][28][19] + a[1][29][21] + a[1][24][22] + a[1][28][22] + a[1][10][22] + a[1][16][26] + a[1][13][28] + a[1][12][32] + a[1][22][32] + a[1][27][22] + a[1][10][40] + a[1][11][38] + a[1][14][38] + a[1][16][38] + a[1][30][38] + } } } /* Transfer from Level 2 temp to Level 1, and count the number of new infected people */ for (k=1; k < 32; k++) { for (j =1; j < 42; j++) { if ((a[2][k][j] < a[3][k][j]) && (a[2][k][j] > 0)) { if(a[2][k][j]] >= a[1][2][k]) { a[7][k][j]=a[1][k][j] / a[3][k][j]; a[6][k][j]=a[1][k][j] * .3; a[13][k][j]=a[1][k][j] + (a[6][k][j] * (.5 + a[7][k][j]) / 70.0); a[13][k][j]=a[13][k][j] + (a[6][k][j] * (.5 ) / 70.0); a[4][k][j]=a[4][k][j] + a[6][k][j]; if (a[2][k][j] > a[6][k][j]) a[1][k][j] = a[2][k][j] - a[6][k][j]; else a[1][k][j] = a[2][k][j]; a[2][k][j]=0; } } if (a[4][k][j] > a[3][k][j]) a[4][k][j] = a[3][k][j]; } } for (k=1; k < 32; k++) { for (j=1; j < 42; j++) { if (a[3][k][j] > a[5][k][j] + a[4][k][j] + a[1][k][j]) { a[6][k][j] = a[5][k][j] + a[4][k][j] + a[1][k][j] - a[3][k][j]; if (a[6][k][j] < a[5][k][j]) a[5][k][j] = a[5][k][j] - a[6][k][j]; else if (a[6][k][j] < a[1][k][j]) a[1][k][j] = a[1][k][j]- a[6][k][j]; else a[4][k][j] = a[4][k][j] - a[6][k][j]; } if (a[3][k][j] > a[5][k][j] + a[4][k][j] + a[1][k][j]) { a[6][k][j] = a[3][k][j] - (a[5][k][j] + a[4][k][j] + a[1][k][j]); a[4][k][j]= a[4][k][j] + a[6][k][j]; } } } S=0; I=0; Q=0; D=0; for (k=1; k < 32; k++) { for (j=1; j < 42; j++) { S = S + a[5][k][j]; I = I + a[5][k][j]; Q = Q + a[4][k][j]; D = D + a[13][k][j]; } } cD = D - DS; DS = D; printf(" "); for (k=1; k < 33; k++) { for (j=1; j < 43; j++) { if (a[0][k][j] > 0) { b= 17 * a[1][k][j]/a[3][k][j]; printf("%d ", b); } else printf(" "); } printf("\n"); printf("n = "); printf("%d", n); printf(" S = "); printf("%d", S); printf(" I = "); printf("%d", I); printf(" Q = "); printf("%d", Q); printf(" D = "); printf("%d", D); printf(" deaths today = "); printf("%d", cD); printf("\n"); /* Put the data into IMAGE format */ for (k=1; k < 254; k++) { for (j=1; j < 254; j++) { x = k * 32 / 256; y = j * 42 / 256; b = 30 * a[1][x][y] / a[3][x][y]; image[k][j] = b * 12 + 30; if (a[0][x][y] == 0) image [k][j]=255; } } if (2 * ( n / 2) == n) { iparm[1] = 256; printf(" Select 0) Proceed without display; 1) Create display"); gets(instring); sscanf(instring, "%i",&flag); if(flag > 0) SMALLTIFFOUT(iparm, image); } /* End of big, big loop */ } }