| 1 | \chapter{Program organization and compilation script} | 
|---|
| 2 | \label{sc:info} | 
|---|
| 3 | \index{Programming organization and compilation} | 
|---|
| 4 |  | 
|---|
| 5 | \label{loc:contenu} | 
|---|
| 6 |  | 
|---|
| 7 | All the elements of the LMD model are in the {\bf LMDZ.GENERIC} directory | 
|---|
| 8 | (and subdirectories). | 
|---|
| 9 | As explained in Section~\ref{loc:contact1}, this directory | 
|---|
| 10 | should be associated with | 
|---|
| 11 |  environment variable {\bf LMDGCM}:\\ | 
|---|
| 12 | If using Csh: | 
|---|
| 13 | \begin{verbatim} | 
|---|
| 14 | setenv  LMDGCM /where/you/put/the/model/LMDZ.GENERIC | 
|---|
| 15 | \end{verbatim} | 
|---|
| 16 | If using Bash: | 
|---|
| 17 | \begin{verbatim} | 
|---|
| 18 | export  LMDGCM=/where/you/put/the/model/LMDZ.GENERIC | 
|---|
| 19 | \end{verbatim} | 
|---|
| 20 |  | 
|---|
| 21 | \noindent Here is a brief description of the | 
|---|
| 22 | {\bf LMDZ.GENERIC} directory contents: | 
|---|
| 23 | \begin{verbatim} | 
|---|
| 24 |   libf/  All the model FORTRAN Sources (.F or .F90) | 
|---|
| 25 |          and  include files (.h) organised in sub-directories | 
|---|
| 26 |         (physics (phystd), dynamics (dyn3d), filters (filtrez)...) | 
|---|
| 27 |  | 
|---|
| 28 |   deftank/   A collection of examples of parameter files required | 
|---|
| 29 |                 to run the GCM (run.def, callphys.def, ...) | 
|---|
| 30 |  | 
|---|
| 31 |   makegcm  Script that should be used to compile the GCM as well | 
|---|
| 32 |             as related utilities (newstart, start2archive, testphys1d) | 
|---|
| 33 |  | 
|---|
| 34 |   create_make_gcm   Executable used to create the makefile. | 
|---|
| 35 |                     This command is run automatically by | 
|---|
| 36 |                     "makegcm" (see below). | 
|---|
| 37 |  | 
|---|
| 38 | \end{verbatim} | 
|---|
| 39 |  | 
|---|
| 40 |  | 
|---|
| 41 | \section{Organization of the model source files} | 
|---|
| 42 | \index{Organization of the model source files} | 
|---|
| 43 |  | 
|---|
| 44 | The model source files are stored in various sub directories | 
|---|
| 45 | in directory {\bf libf}. | 
|---|
| 46 | These sub-directories correspond to the different parts of the model: | 
|---|
| 47 |  | 
|---|
| 48 | \begin{description} | 
|---|
| 49 | \item{\bf grid:} mainly made up of "dimensions.h" file, | 
|---|
| 50 | which contains the parameters that define the model grid, | 
|---|
| 51 | i.e. the number of points in longitude (IIM), latitude (JJM) and altitude | 
|---|
| 52 | (LLM), as well as the number of tracers (NQMX). | 
|---|
| 53 |  | 
|---|
| 54 | \item{\bf dyn3d:} contains the dynamical subroutines. | 
|---|
| 55 |  | 
|---|
| 56 | \item{\bf bibio:} contains some generic subroutines not specifically | 
|---|
| 57 | related to physics or dynamics but used by either or both. | 
|---|
| 58 |  | 
|---|
| 59 | \item{\bf phymars:} contains the physics routines. | 
|---|
| 60 |  | 
|---|
| 61 | \item{\bf filtrez:} contains the longitudinal filter sources applied in the | 
|---|
| 62 | upper latitudes, | 
|---|
| 63 | where the Courant-Friedrich-Levy stability criterion is violated. | 
|---|
| 64 |  | 
|---|
| 65 | \end{description} | 
|---|
| 66 |  | 
|---|
| 67 | \section{Programming} | 
|---|
| 68 |  | 
|---|
| 69 | The model is written in {\bf Fortran-77} and {\bf Fortran-90}. | 
|---|
| 70 | \begin{itemize} | 
|---|
| 71 | \item The program sources are written in {\bf ``file.F"} | 
|---|
| 72 | or {\bf ``file.F90''} files. | 
|---|
| 73 | The extension .F is the standard extension for fixed-form Fortran and | 
|---|
| 74 | the extension .F90 is for free-form Fortran. | 
|---|
| 75 | These files must be preprocessed (by a{\bf C preprocessor} | 
|---|
| 76 | such as (cpp)) before compilation (this behaviour is, for most | 
|---|
| 77 | compilers, implicitly obtained but using a capital F in the extention | 
|---|
| 78 | of the file names). | 
|---|
| 79 |  | 
|---|
| 80 | \item Constants are placed in COMMON declarations, | 
|---|
| 81 | located in the common ``include'' files {\bf "file.h"} | 
|---|
| 82 |  | 
|---|
| 83 | %\item [also module files now too...] | 
|---|
| 84 | \item In general, variables are passed from subroutine to subroutine | 
|---|
| 85 | as arguments (and never as COMMON blocks). | 
|---|
| 86 |  | 
|---|
| 87 | \item In some parts of the code, for ``historical'' reasons, | 
|---|
| 88 | the following rule is sometimes used: in the subroutine, | 
|---|
| 89 | the variables (ex: \verb+name+) passed as an argument by the calling program | 
|---|
| 90 | are given the prefix \verb+p+ (ex: \verb+pname+) | 
|---|
| 91 |  while the local variables are given the prefix \verb+z+ (ex: \verb+zname+). | 
|---|
| 92 | As a result, several variables change their prefix (and thus their name) | 
|---|
| 93 | when passing from a calling subroutine to a called subroutine. We're trying to eliminate this as the code is developed. | 
|---|
| 94 | \end{itemize} | 
|---|
| 95 |  | 
|---|
| 96 | \section{Model organization} | 
|---|
| 97 | Figure~\ref{fg:organi_phys} describes the main subroutines called by physiq.F. OBSOLETE - FOR MARS ONLY!!! | 
|---|
| 98 | \index{Model organization} | 
|---|
| 99 | \begin{figure} | 
|---|
| 100 | \begin{flushleft} | 
|---|
| 101 | \includegraphics[scale=0.70,angle=-90]{Fig/physique.eps} | 
|---|
| 102 | \caption{Organigram of subroutine function physiq.F90} | 
|---|
| 103 | \label{fg:organi_phys} | 
|---|
| 104 | \end{flushleft} | 
|---|
| 105 | \end{figure} | 
|---|
| 106 |  | 
|---|
| 107 |  | 
|---|
| 108 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | 
|---|
| 109 | %  Compilation du modele | 
|---|
| 110 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | 
|---|
| 111 |  | 
|---|
| 112 | \section{Compiling the model} | 
|---|
| 113 | \index{Compiling the model} | 
|---|
| 114 |  | 
|---|
| 115 | \label{sc:compil1} | 
|---|
| 116 | Technically, the model is compiled using the Unix utility {\tt make}. | 
|---|
| 117 | The file {\tt makefile}, which describes the code dependencies | 
|---|
| 118 | and requirements, | 
|---|
| 119 | is created automatically by the script | 
|---|
| 120 | \begin{verbatim} | 
|---|
| 121 | create_make_gcm | 
|---|
| 122 | \end{verbatim} | 
|---|
| 123 | This utility script recreates the {\tt makefile} file when necessary, | 
|---|
| 124 | for example, when a source file has been added or removed since the last | 
|---|
| 125 | compilation. | 
|---|
| 126 |  | 
|---|
| 127 | {\bf None of this is visible to the user. | 
|---|
| 128 | To compile the model just run the command} | 
|---|
| 129 | \begin{verbatim} | 
|---|
| 130 | makegcm | 
|---|
| 131 | \end{verbatim} | 
|---|
| 132 | with adequate options (e.g. {\tt makegcm -d 62x48x32 -p mars gcm}), as | 
|---|
| 133 | discussed below and described in section~\ref{sc:run1}. | 
|---|
| 134 |  | 
|---|
| 135 |  | 
|---|
| 136 | The {\tt makegcm} command compiles the model ({\bf gcm}) and related utilities | 
|---|
| 137 | ({\bf newstart}, {\bf start2archive}, {\bf testphys1d}). | 
|---|
| 138 | A detailed description of how to use it and of the various parameters that | 
|---|
| 139 | can be supplied | 
|---|
| 140 | is given in the help manual below | 
|---|
| 141 | (which will also be given by the \verb+makegcm -h+ command).\\ | 
|---|
| 142 | Note that before compiling the GCM with {\tt makegcm} you should have set | 
|---|
| 143 | the environment variable {\bf LIBOGCM} to a path where intermediate | 
|---|
| 144 | objects and libraries will be generated.\\ | 
|---|
| 145 | If using Csh: | 
|---|
| 146 | \begin{verbatim} | 
|---|
| 147 | setenv  LIBOGCM /where/you/want/objects/to/go/libo | 
|---|
| 148 | \end{verbatim} | 
|---|
| 149 | If using Bash: | 
|---|
| 150 | \begin{verbatim} | 
|---|
| 151 | export  LIBOGCM=/where/you/want/objects/to/go/libo | 
|---|
| 152 | \end{verbatim} | 
|---|
| 153 | \paragraph{Help manual for the makegcm script} | 
|---|
| 154 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | 
|---|
| 155 | % makegcm.help:  lu dans makegcm | 
|---|
| 156 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | 
|---|
| 157 | \input{input/makegcm_help.tex} | 
|---|
| 158 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | 
|---|