# Modules

## What is a module?

A module is a way to store variables and functions/subroutines that are available everywhere in the program and modifiable from anywhere in the program.

## How to write a module

To store variables that must be accessible everywhere in a program, you need to create a file called (for example) `mymodule.f90` which contains the following

```
module mymodule
  implicit none
  real :: a
  real :: b
  a = 5
  b = 6
  contains
    function functionInModule(x,y)
      implicit none
      real :: x, y, functionInModule
      functionInModule = x-y
    end function
end module
```

And the main program becomes

```
program myprogram
  use mymodule
  implicit none
  real :: w, z
  some code here
  w = 2
  z = functionInModule(w,w)
end program
```

Note the `use mymodule` at the beginning of the program before the `implicit none`. Because of this line, all the variables and functions/subroutines declared in the module can be used in the program.

One can also use `use mymodule, only: variable/function/subroutine` to make only part of the variables or functions available. For example

```
program myprogram
  use mymodule, only: functionInModule
  implicit none
  real :: w,z,r
  w = 1
  r = 2
  z = functionInModule(w,r)
end program
```

This can be done to make sure that other parameters contained in the module are not inadvertently modified in the program.
