123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400 |
- This is the technical documentation of the PUMA model. In the following, the purpose of each
- module is given and its general structure and possible input and output
- parameters provided (namelist, files) are explained.
- %--------------------------------------------------------------------------------
- \begin{center}
- \begin{tabular}{|p{15cm}|}
- \hline
- \vspace{-5mm} \section{fftmod.f90 / fft991mod.f90} \vspace{-5mm} \\
- \hline
- \vspace{1mm} {\bf General} The module {\module fftmod.f90} contains all subroutines
- necessary to perform the fast fourier transformation and its inverse. The interface to the main
- PUMA module {\module puma.f90}
- is given by the subroutines {\sub gp2fc} and {\sub
- fc2gp} which are called in {\module puma.f90} from the subroutine {\sub gridpoint}. \vspace{3mm} \\
- \hline
- \vspace{1mm} {\bf Input/Output} {\module fftmod.f90} does not use any additional input or
- output files. No namelist input is required. \vspace{3mm} \\
- \hline
- \vspace{2mm} {\bf Structure} Internally, {\module fftmod.f90} uses the FORTRAN-90 module
- {\module fftmod}, which uses no other modules. Subroutine {\sub gp2fc} performs the
- transformation from gridpoint space into fourier space while the subroutine {\sub fc2gp} does
- the transformation from fourier space into grid point space. Both routines use several
- subroutines
- to do the direct or indirect transformation for different factors. When {\sub gp2fc} or {\sub
- fc2gp} is called for the first time, {\sub fftini} is called to initialize the FFT.
- \vspace{3mm} \\
- \hline
- \vspace{2mm} Alternatively, the module {\module fft991mod.f90} may be used
- instead of {\module fftmod.f90}. While {\module fftmod.f90} runs faster,
- {\module fft991mod.f90} can be used for resolutions that are not supported by {\module fftmod.f90}, e.g. T63 or T106.
- To select the appropriate module edit the file "Most15/puma/src/make\_puma".
- Use either:
- \begin{verbatim}
- FFTMOD=fftmod
- \end{verbatim}
- or
- \begin{verbatim}
- FFTMOD=fft991mod
- \end{verbatim}
- \vspace{3mm} \\
- \hline
- \end{tabular}
- \end{center}
- \newpage
- %---------------------------------------------------------------------------------------------
- \begin{center}
- \begin{tabular}{|p{15cm}|}
- \hline
- \vspace{-5mm} \section{guimod.f90 / guimod\_stub.f90} \vspace{-5mm} \\
- \hline
- \vspace{1mm} {\bf General} The module {\module guimod.f90}
- contains subroutines for communication with the GUI.
- On operating systems that do not support the Xlib library (X11R6) e.g. Windows,
- {\module guimod\_stub.f90} may be used as a stub replacement.
- \vspace{3mm} \\
- \hline
- \vspace{2mm} {\bf Structure}
- The following subroutines are included in {\module guimod.f90}:
- \begin{center}
- \begin{tabular}{l p{2cm} l}
- Subroutine & &Purpose \\
- && \\
- {\sub guistart} && initialize the GUI \\
- {\sub guistop} && finalize the GUI \\
- {\sub guistep\_puma} && called every timestep from PUMA \\
- {\sub guistep\_plasim} && called every timestep from PLASIM \\
- {\sub guips} && gather, scale, and send surface pressure to the GUI \\
- {\sub guihor} && gather, scale, and send a gridpoint array to the GUI \\
- {\sub guigv} && gather, scale, and send wind components to the GUI \\
- {\sub change\_disp} && called for user input into the GUI \\
- {\sub change\_dtep} && called for user input into the GUI \\
- {\sub change\_dtns} && called for user input into the GUI \\
- {\sub change\_co2} && called for user input into the GUI \\
- {\sub change\_gsol0} && called for user input into the GUI \\
- {\sub change\_dawn} && called for user input into the GUI \\
- \end{tabular}
- \end{center}
- \vspace{3mm} \\
- \hline
- \end{tabular}
- \end{center}
- \newpage
- %---------------------------------------------------------------------------------------------
- \begin{center}
- \begin{tabular}{|p{14cm}|}
- \hline
- \vspace{-5mm} \section{legsym.f90} \vspace{-5mm} \\
- \hline
- \vspace{1mm} {\bf General} The module {\module legsym.f90}
- contains all the subroutines
- necessary to perform the Legendre transformation and its inverse.
- The module legsym is written for arrays in alternate representation,
- which use pairs of Northern and Southern latitudes. This symmetry conserving
- scheme is different to the Legendre modules used in PLASIM or the preprocessor.
- The interface to the main
- PUMA module {\module puma.f90} is given by the subroutines {\sub legini}, {\sub
- inigau}, {\sub fc2sp}, {\sub fc3sp}, and {\sub sp2gp}
- which are called in {\module puma.f90}
- from the subroutines {\sub prolog} and {\sub gridpoint}.
- \vspace{3mm} \\
- \hline
- \vspace{1mm} {\bf Input/Output} {\module legsym.f90}
- does not use any other input or output files. No namelist input is required.
- \vspace{3mm} \\
- \hline
- \vspace{1mm}
- The following subroutines are included in {\module legsym.f90}:
- \begin{center}
- \begin{tabular}{l p{2cm} l}
- Subroutine & &Purpose \\
- && \\
- {\sub inigau} && compute Gaussian abscissae and weights \\
- {\sub legini} && compute Legendre polynomials \\
- {\sub fc2sp} && Fourier to Spectral transformation \\
- {\sub fc2spdmu} && Fourier to Spectral transformation with d/dmu \\
- {\sub sp2fc} && Spectral to Fourier transformation \\
- {\sub sp3fc} && simultaneous transformation of T, Div., and Vort. \\
- {\sub mktend} && compute and transform tendencies \\
- {\sub reg2alt} && convert regular array to alternate array \\
- {\sub alt2reg} && convert alternate array to regular array \\
- \end{tabular}
- \end{center}
- \vspace{3mm} \\
- \hline
- \end{tabular}
- \end{center}
- \newpage
- %--------------------------------------------------------------------------------
- \begin{center}
- \begin{tabular}{|p{15cm}|}
- \hline
- \vspace{-5mm} \section{mpimod.f90 / mpimod\_stub.f90} \vspace{-5mm}
- \\
- \hline
- \vspace{1mm} {\bf General} The module {\module mpimod.f90} contains the interface
- subroutines of the MPI ({\bf M}essage {\bf P}assing {\bf I}nterface) needed for
- (massive) parallel computing. Several MPI
- routines are called from the module. The interface to the other modules is provided by numerous
- subroutines with names which begin with {\sub mp}. Subroutines in {\module mpimod.f90} are
- called from several other modules. There are no direct calls to the MPI other than
- from within {\module mpimod.f90}. This encapsulation makes it possible to
- use {\module mpimod\_stub.f90} for single CPU runs without
- changing any other part of the model code.
- The selection is done automatically when using MoSt, or can be done manually
- by editing "Most16/puma/src/make\_puma". \vspace{3mm}
- \\
- \hline
- \vspace{1mm} {\bf Input/Output} {\module mpimod.f90} and {\module mpimod\underline{
- }stub} do not use any extra input or
- output files. No namelist input is required. \vspace{3mm} \\
- \hline
- \vspace{2mm} {\bf Structure} Internally, {\module mpimod.f90} uses the FORTRAN-90
- module
- {\module mpimod}, which in turn uses the global common module {\module pumamod} from
- {\module pumamod.f90} and the MPI module {\module mpi}. {\module mpimod\underline{
- }stub.f90} does not use any other module. The following subroutines are included in {\module
- mpimod.f90}:
- \begin{center}
- \begin{tabular}{l p{2cm} l}
- Subroutine & &Purpose \\
- && \\
- {\sub mpbci} && broadcast 1 integer \\
- {\sub mpbcin} & &broadcast n integers \\
- {\sub mpbcr} & &broadcast 1 real \\
- {\sub mpbcrn} & &broadcast n reals \\
- {\sub mpbcl} && broadcast 1 logical \\
- {\sub mpscin} & &scatter n integers \\
- {\sub mpscrn} && scatter n reals \\
- {\sub mpscgp} && scatter grid point field \\
- {\sub mpgagp} && gather grid point field \\
- {\sub mpgallgp} && gather grid point field to all \\
- {\sub mpscsp} & &scatter spectral field \\
- {\sub mpgasp} && gather spectral field \\
- {\sub mpgacs} && gather cross section \\
- {\sub mpgallsp} && gather spectral field to all \\
- {\sub mpsum} && sum spectral field \\
- {\sub mpsumsc} && sum and scatter spectral field \\
- {\sub mpsumr} && sum n reals \\
- {\sub mpsumbcr}& & sum and broadcast n reals \\
- {\sub mpstart} & &initialize MPI \\
- {\sub mpstop} & &terminate MPI \\
- \end{tabular}
- \end{center}
- \vspace{3mm} \\
- \hline
- \end{tabular}
- \end{center}
- \newpage
- \begin{center}
- \begin{tabular}{|p{15cm}|}
- \hline
- \begin{center}
- \begin{tabular}{l p{2cm} l}
- Subroutine & &Purpose \\
- && \\
- {\sub mpreadgp}& & read and scatter grid point field \\
- {\sub mpwritegp}& & gather and write grid point field \\
- {\sub mpwritegph} && gather and write (with header) grid point field \\
- {\sub mpreadsp} & &read and scatter spectral field \\
- {\sub mpwritesp} &&gather and write spectral field \\
- {\sub mpi\_info} && report information about setup \\
- {\sub mpgetsp} && read spectral array from restart file \\
- {\sub mpgetgp} && read gridpoint array from restart file \\
- {\sub mpputsp} && write spectral array to restart file \\
- {\sub mpputgp} && write gridpoint array to restart file \\
- {\sub mpmaxval} && compute maximum value of an array \\
- {\sub mpsumval} && compute sum of all array elements \\
- \end{tabular}
- \end{center}
- \vspace{3mm} \\
- \hline
- \end{tabular}
- \end{center}
- \newpage
- %--------------------------------------------------------------------------------
- \begin{center}
- \begin{tabular}{|p{15cm}|}
- \hline
- \vspace{-5mm} \section{puma.f90} \vspace{-5mm} \\
- \hline
- \vspace{1mm} {\bf General} The module {\module puma.f90}
- is the main module of the
- model. It includes the main program {\sub puma} and controls the run.
- The interface routines to all other modules are
- called from {\module puma.f90}.
- The output is performed by calling the subroutine to {\module outsp}, and
- the adiabatic tendencies and the horizontal
- diffusion are also computed in {\module puma.f90}.
- To do the necessary transformations, calls to the modules {\module fftmod.f90}
- and {\module legsym.f90} are used. \vspace{3mm} \\
- \hline
- \vspace{1mm} {\bf Input/Output} {\module puma.f90}
- A diagnostic printout is written to the standard output
- (usually redirected with the operator "$>$" to a file). {\module puma.f90} is
- controlled by the namelist {\nam inp} which is part of the namelist file {\file
- puma$\_$namelist}. For a complete list of namelist variables see
- Appendix C. Here is a table of the most important ones:
- \vspace{1mm}
- \begin{center}
- \begin{tabular}{l l p{6cm} c}
- Parameter & Type & Purpose & Default \\
- &&&\\
- MPSTEP & Integer & MPSTEP (Minutes Per STEP) defines the length of the
- time step. Recommended values are 60 min. for T21
- and 20 min for T42. The values are not checked
- so take care not to violate the CFL
- (Courant-Friedrichs-Levy) criterion! & 60 \\
- NYEARS & Integer & Number of years to be run & 1 \\
- NMONTHS & Integer & Number of months to be run : NYEARS and NMONTHS
- may be used together. The simulation length in
- days is: NYEARS * 360 + NMONTHS * 30. & 0 \\
- NOUTPUT & Integer & NOUTPUT is a global switch for enabling (1)
- or disabling (0) writing to {\bf puma\_output}. & 1 \\
- NWPD & Integer & NWPD (Number of Writes Per Day) defines the
- output interval for writing model arrays to the
- file {\bf puma\_output}. Possible values range
- from 1 (daily output) to 24 (hourly). & 1 \\
- NDIAG & Integer & NDIAG sets the interval (in time steps) for
- printing out some diagnostic arrays and values
- to the standard output. & 12 \\
- \end{tabular}
- \end{center}
- \vspace{3mm} \\
- \hline
- \end{tabular}
- \end{center}
- \newpage
- \begin{center}
- \begin{tabular}{|p{15cm}|}
- \hline
- \begin{center}
- \begin{tabular}{l l p{5cm} c} %{p{3cm} p{2cm} p{6cm} p{2cm}}
- Parameter & Type & Purpose & Default \\
- &&&\\
- NDL(NLEV) & Integer Array & Switch for diagnostic print out of a level (0~=~off; 1~=~on)
- & NLEV $\cdot$ 0 \\
- DTEP & Real & Equator to pole temperature difference [K] for Newtonian cooling & 60.0 \\
- DTNS & Real & North to South pole temperature difference [K] for Newtonian cooling & 0.0 \\
- DTROP & Real & Tropopause height [m] for Newtonian cooling & 12000.0 \\
- DTTRP & Real & Smoothing of the tropopause [K] for Newtonian cooling & 2 \\
- TGR & Real & Surface temperature [K] for Newtonian cooling & 288 \\
- TDISS & Real & Time scale [d] for the horizontal diffusion & 0.25 \\
- PSURF & Real & Global mean sea level pressure [Pa] & 101100.00 \\
- RESTIM(NLEV) & Real Array & Time scale [d] for Newtonian cooling & 0.0 \\
- T0K(NLEV) & Real Array & Reference temperature used in the discretization scheme & 250.0 \\
- TFRC(NLEV) & Real Array & Time scale [d] for Rayleigh friction (0.0~=~off)& 0.0
- \end{tabular}
- \end{center}
- \vspace{3mm} \\
- \hline
- \vspace{2mm} {\bf Structure}
- After starting MPI, the main program {\sub puma} calls {\sub
- prolog} to initialize the model. Then {\sub master} is called to do the time stepping.
- Finally, subroutine {\sub epilog} terminates the run. In subroutine {\sub prolog} calls to
- different subroutines, which are part of {\module puma.f90} or are provided by other
- modules, initialize various parts of the model: {\sub gauaw} and {\sub inilat} build the grid,
- {\sub readnl} reads the namelist file and sets parameters using the namelist input,
- {\sub initpm} and {\sub initsi} initialize parameters for the physics and the semi
- implicit scheme respectively, and {\sub outini} starts the output.
- The program then checks for the existence of a file named "puma\_restart".
- If the file can be opened then the restart record
- is read by {\sub restart}, otherwise {\sub initfd} sets the prognostic variables
- to their initial values.
- Finally, the global averaged surface
- pressure is set using PSURF and the orography. The subroutine {\sub master} controls the
- time stepping. First, if it is not a restart, the initial NKITS explicit forward time steps are
- performed.
- The main loop is defined by calling {\sub gridpoint} to set the nonlinear tendencies,
- and {\sub spectral} to add the linear tendencies. The run is finalized by subroutine
- {\sub epilog} which writes the restart records and terminates the MPI. \vspace{3mm} \\
- \hline
- \end{tabular}
- \end{center}
- \newpage
- %---------------------------------------------------------------------------------------
- \begin{center}
- \begin{tabular}{|p{15cm}|}
- \hline
- \vspace{-5mm} \section{pumamod.f90} \vspace{-5mm} \\
- \hline
- \vspace{1mm} {\bf General} The module {\module pumamod.f90} contains all the parameters
- and
- variables which may be used to share information between {\module puma.f90} and other
- modules. No subroutines or programs are included. \vspace{3mm} \\
- \hline
- \vspace{1mm} {\bf Input/Output} {\module pumamod.f90} does not use any extra input
- or output files. No namelist input is required. \vspace{3mm} \\
- \hline
- \vspace{2mm} {\bf Structure} Internally, {\module pumamod.f90} is a FORTRAN-90
- module named {\module pumamod}. Names for global parameters, scalars and arrays are
- declared and, if possible, values are preset.\vspace{3mm} \\
- \hline
- \end{tabular}
- \end{center}
- \newpage
- %---------------------------------------------------------------------------------------------
- \begin{center}
- \begin{tabular}{|p{15cm}|}
- \hline
- \vspace{-5mm} \section{restartmod.f90} \vspace{-5mm} \\
- \hline
- \vspace{1mm} {\bf General} The module {\module restartmod.f90}
- contains routines for opening, reading and writing the restart files.
- The scalars and arrays of the restart files
- are identified by name. This enables adding or removing
- variables from the restart files without loosing compatibility.
- There is also no dependence on the sequence of variables.
- In parallel runs
- these routines are either called from the root process,
- which takes care of broadcasting, or from subroutines in
- {\module mpimod.f90} which gather before writing,
- or scatter after reading, the arrays.
- \vspace{3mm} \\
- \hline
- \vspace{2mm} {\bf Structure}
- \begin{center}
- \begin{tabular}{l p{2cm} l}
- Subroutine & &Purpose \\
- && \\
- {\sub restart\_ini} && Scan restart file and store pointer \\
- {\sub restart\_prepare} && Open file for restart ouput \\
- {\sub restart\_stop} && Close files \\
- {\sub get\_restart\_integer} && Read integer scalar \\
- {\sub get\_restart\_array} && Read real array \\
- {\sub put\_restart\_integer} && Write integer scalar \\
- {\sub put\_restart\_array} && Write real array \\
- {\sub fileseek} && position filepointer to requested variable \\
- {\sub check\_equality} && May be used as debug tool \\
- \end{tabular}
- \end{center}
- \vspace{3mm} \\
- \hline
- \end{tabular}
- \end{center}
- \newpage
- %---------------------------------------------------------------------------------------------
|