# CSE 4250: Project #1, Spread of Epidemics

Due: Friday, 22 September 2017

Suppose everyone in a population of $n$ people is in close contact with $\alpha$ others, chosen at random. If one person is infected with a disease like Ebola and if the disease spreads to all those who are in close contact with an infected person, the total number of infected people will be approximately $\gamma n$ for large $n$ where $\gamma =1-{e}^{-\alpha \gamma }$.

Since $\alpha {e}^{-\alpha }=\alpha \left(1-\gamma \right){e}^{\alpha \left(\gamma -1\right)}$ we have $\gamma =1+W\left(-\alpha {e}^{-\alpha }\right)/\alpha$ where $W\left(z\right)$ is defined by the equation $z=W\left(z\right){e}^{W\left(z\right)}$

[For MathML impaired browsers:]

The function $W\left(z\right)$ is called the Lambert W function. See the Citizendium page on the Lambert W function and there is even a Lambert W poster.

The plot on the left is the Lambert W function, the plot on the right is the the proportion of the population ultimately affected by an epidemic for different values of $\alpha$.

## Input/Output

Read from the standard input stream and write to the standard output stream. (There is no need to open any files.)

The input will consist of several (maybe thousands of) testcases each on a line. Each testcase consists of a pair of numbers $n$ and $\alpha$ separated by at least one space. The integer $n$ is greater than one and less than or equal to a billion. It is the number of people in the population. The real number $\alpha$ is greater than or equal to one and less than $n-1$. It is the expected number of other people a person is in close contact with.

The output is the total number of people (rounded to the nearest whole number) in the population expected to become infected. Output each answer on a line by itself.

For the input:

```2345 1.45678
4283  3.2347
```
the output would be:
```  1298
4088
```
Read to the end of the standard input stream and have no output other than the numbers. Do not prompt for input. There should be one line (one number) input pair of input numbers.

Test your program. You can use Wolfram alpha (cf. Lambert W Function) to get high precision answers. Like many numeric problems, it is not easy to get accurate answers in all cases.

## Fortran

Differences in implementations and in dialects of Fortran are usually non-existant in simple programs like this one. But the program must compile and run with the implementation used in grading:
```\$ gfortran --version
GNU Fortran (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
```
The GNU Fortran compiler implements ISO/IEC 1539:1997 (Fortran 95). It also supports the ISO/IEC TR-15581 enhancements to allocatable arrays. GNU Fortran also has partial support for ISO/IEC 1539-1:2004 (Fortran 2003), ISO/IEC 1539-1:2010 (Fortran 2008)

#### Books

 Chapman Stephen J. Chapman. Fortran 90/95 for Scientists and Engineers. McGraw-Hill, New York, New York, 1997 ISBN 0-07-011938-4. Gehrke Wilhelm Gehrke. Fortran 95 Language Guide. Springer-Verlag, Berlin, Germany, 1996 ISBN 0-387-76062-8. Metcalf Michael Metcalf and John Ker Reid. Fortran 90/95 Explained. Oxford University Press, Oxford, United Kingdom, 1996 ISBN 0-19-851888-9.

## Turning it in

You may work in groups of no more than two people. You may not work with the same person on any of the remaining projects. If in a group of two, make sure both names are in the program and turn in the assignment from just one account. By the due date, turn in your source program. At the beginning of your source file include the following header information in comments:

```! Author: name1, e-mail address