NOTE Documentation is slowly being built up within the code using doxygen. After installing doxygen and dot, run "make doc" to create the API documentation in docs/html/
This will be updated over time. For now here is a cursory description to help point people to the right files.
The main program resides in main/driver.f90
driver.f90 calls init_model(), init_physics(), and bc_init()
see: main/init_options.f90
see: main/init.f90 -> init_model() -> init_domain()
see: main/boundary.f90 -> bc_init(), bc_update()
bc_init() reads in the initial conditions for the atmosphere.
bc_update() reads in the updated boundary conditions for the atmosphere, as well as the internal u,v, and p states. bc_update() is VERY similar to bc_init()
see: main/time_step.f90 -> step()
The various physics packages are stored in the physics/ directory. This code is further broken down into microphysics (mp_), advection (adv_), planetary boundary layer (pbl_), radiation (ra_), land surface (lsm_), and cumulus (cu_) code, each of which has a *_driver.f90 file that contains the routine called from time_step.f90. In addition, the linear theory "dynamics" are in physics/linear_wind.f90
NetCDF input and output is handled by various helper routines in the io/ directory. The io/output.f90 file contains the code to write the primary ICAR output files, while io_routines.f90 contains various helper routines for both reading and writing files.
Important utility functions are included for working with calendars (time.f90), geographic/horizontal interpolation (geo_reader.f90), vertical interpolation (vinterp.f90), string manipulation (string.f90), and fft array manipulation (fftshift.f90).
A few rudimentary tests have been developed to help debug the code as it was being developed, and they are retained in the tests/ directory for future use.