/[MITgcm]/MITgcm/doc/devel_HOWTO.sgml
ViewVC logotype

Diff of /MITgcm/doc/devel_HOWTO.sgml

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.12 by dimitri, Tue Apr 27 04:03:45 2010 UTC revision 1.19 by jmc, Fri Jan 5 20:47:02 2018 UTC
# Line 1  Line 1 
1  <!DOCTYPE ARTICLE PUBLIC "-//OASIS//DTD DocBook V4.1//EN">  <!DOCTYPE ARTICLE PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
2    <!--
3     $Header$
4     $Name$
5    -->
6    
7  <article id="MITgcm-Development-HOWTO">  <article id="MITgcm-Development-HOWTO">
8    
# Line 27  Line 31 
31          <date>2010-01-21</date>          <date>2010-01-21</date>
32          <authorinitials>jmc</authorinitials>          <authorinitials>jmc</authorinitials>
33          <revremark>          <revremark>
34            update links.            Update links.
35          </revremark>          </revremark>
36        </revision>        </revision>
37        <revision>        <revision>
# Line 38  Line 42 
42            Add subsection "Developer settings" (under CVS Repository).            Add subsection "Developer settings" (under CVS Repository).
43          </revremark>          </revremark>
44        </revision>        </revision>
45          <revision>
46            <revnumber>0.04</revnumber>
47            <date>2011-04-24</date>
48            <authorinitials>jmc</authorinitials>
49            <revremark>
50              Update subsection "The verification suite".
51            </revremark>
52          </revision>
53      </revhistory>      </revhistory>
54    
55      <abstract>      <abstract>
# Line 121  Line 133 
133        others.  The tree currently resembles:</para>        others.  The tree currently resembles:</para>
134    
135  <programlisting>gcmpack/  <programlisting>gcmpack/
   CS-regrid             goes into utils  
136    CVSROOT               -hidden-    CVSROOT               -hidden-
137    
138    MITgcm                code    MITgcm                code
# Line 129  Line 140 
140         doc                      basic developpment documentation         doc                      basic developpment documentation
141         eesupp                   execution environment support code (wrapper)         eesupp                   execution environment support code (wrapper)
142         exe                      empty         exe                      empty
143         jobs                     runtime shell scripts for         jobs                     runtime shell scripts for
144                                    various platforms (not maintained)                                    various platforms (not maintained)
145         lsopt                    line search         lsopt                    line search
146         model                    main dynamics (core)         model                    main dynamics (core)
# Line 145  Line 156 
156    
157    acesgrid.org          build acesgrid web site    acesgrid.org          build acesgrid web site
158    development           experimental stuff    development           experimental stuff
   gcmpack               an old back-up copy ?  
159    gfd_lab               -?-    gfd_lab               -?-
160    manual                -save-    manual                source of MITgcm documentation
   misc                  -?-  
161    mitgcm.org            build web site    mitgcm.org            build web site
162    mitgcmdoc  -> manual  -remove-    old_develop           old and early development source
163    models                -?-         misc                 -?-
164    packages              -?-         models               -?-
165           packages             -?-
166           preprocess           -?-
167    pdfs                  some pdfs    pdfs                  some pdfs
168    planetinabottle.org   unfinished web site    planetinabottle.org   unfinished web site
   preprocess            -?-  
   tmp                   -?-  
169    www.ecco-group.org    build ecco web site ?    www.ecco-group.org    build ecco web site ?
170  </programlisting>  </programlisting>
171    
# Line 219  Line 228 
228      <sect2>      <sect2>
229        <title> Developer settings </title>        <title> Developer settings </title>
230    
231        <para>CVS is a convenient tool to keep up-to-date a personal copy of the        <para>CVS is a convenient tool to keep up-to-date a personal copy of the
232        MITgcm code (see: <ulink url="http://mitgcm.org/public/using_cvs.html">        MITgcm code (see: <ulink url="http://mitgcm.org/public/using_cvs.html">
233        using CVS </ulink>). The same tool is used by developers to        using CVS </ulink>). The same tool is used by developers to
234        incorporate any change into the repository. However, this later        incorporate any change into the repository. However, this later
235        function requires specific settings, as detailed here after:</para>        function requires specific settings, as detailed here after</para>
236        <orderedlist>        <orderedlist>
237          <listitem>          <listitem>
238            <para> You will need an account (loggin access) to the server            <para> You will need an account (login access) to the server
239             "mitgcm.org" with the proper group setting (e.g.,             "mitgcm.org" (curently: <filename>mitgcmcvs.mit.edu</filename>)
240              group "gcmctrb" to add/modify code into MITgcm_contrib).             with the proper group setting (e.g., group "gcmctrb" to add/modify
241              This kind of account is granted only upon well motivated request.             code into MITgcm_contrib).
242              The access to the server mitgcm.org is through ssh-key authorization             This kind of account is granted only upon well motivated request
243              which will need to be set properly on both side (on your local machine             (we recommend to ask your senior MITgcm-collaborator to send such
244              and on your server account). You need to be able to             request to marshall-admin at techsquare.com with Cc to Chris Hill
245              to ssh to mitgcm.org (or <filename>ssh MY_USER_NAME@mitgcm.org</filename>             for approval).</para>
246              in case of different user-name on both sides) to proceed further.</para>            <para> The access to the server <filename>mitgcm.org</filename> is
247               through ssh-key authorization which will need to be set properly on
248               both side (on your local machine and on your server account).
249               You need to be able to ssh to <filename>mitgcm.org</filename>
250               (or <filename>ssh MY_USER_NAME@mitgcm.org</filename>
251               in case of different user-name on both sides) to proceed further.</para>
252          </listitem>          </listitem>
253    
254          <listitem>          <listitem>
255            <para> You need to register to the            <para> You need to register to the
256          <ulink url="http://mitgcm.org/mailman/listinfo/mitgcm-cvs">          <ulink url="http://mailman.mitgcm.org/mailman/listinfo/mitgcm-cvs">
257        mitgcm-cvs </ulink> mailing list.         mitgcm-cvs </ulink> mailing list.
258            This ensures that other developers will receive email notification            This ensures that other developers will receive email notification
259             when you make changes; you will also receive as well such email             when you make changes; you will also receive such email
260             when others make changes to the repository.             when others make changes to the repository.
261            </para>            </para>
262          </listitem>          </listitem>
263    
264          <listitem>          <listitem>
265            <para> It is highly recommended that you register also to the            <para> It is highly recommended that you register also to the
266          <ulink url="http://mitgcm.org/mailman/listinfo/mitgcm-devel">          <ulink url="http://mailman.mitgcm.org/mailman/listinfo/mitgcm-devel">
267        mitgcm-devel </ulink> mailing list (expect a short delay for         mitgcm-devel </ulink> mailing list (expect a short delay for
268         this request to be processed).         this request to be processed).
269            This list is intended for developer discussions.            This list is intended for developer discussions.
270            </para>            </para>
271          </listitem>          </listitem>
272    
273          <listitem>          <listitem>
274            <para> The standard anonymous mode (using "cvsanon", as mentionned            <para> The standard CVS-anonymous mode (using "cvsanon",
275          <ulink url="http://mitgcm.org/public/source_code.html">          as mentionned <ulink url="http://mitgcm.org/public/source_code.html">
276        here </ulink>) does not allow check-in ("cvs commit") permission.          here </ulink>) does not provide check-in ("cvs commit") permission.
277           Instead, you will need to set our CVS environment as follow:</para>           Instead, you will need to set our CVS environment as follow:</para>
278  <screen>  <screen>
279    $ export CVS_RSH=ssh    $ export CVS_RSH=ssh
280    $ export CVSROOT=':ext:MY_USER_NAME@mitgcm.org:/u/gcmpack'    $ export CVSROOT=':ext:MY_USER_NAME@mitgcm.org:/u/gcmpack'
281  </screen>  </screen>
282            <para> After downloading a directory, e.g.: <filename>myCopy</filename>,            <para> The reason for such limitation is that when downloading a directory,
283             from the CVS repository (e.g.,              e.g.: <filename>myCopy</filename>, from the CVS repository (e.g.,
284              <filename>MITgcm_contrib/thisPart</filename>) using the command:</para>              <filename>MITgcm_contrib/thisPart</filename>) using the command:</para>
285  <screen>  <screen>
286    $ cvs co -P -d myCopy MITgcm_contrib/thisPart    $ cvs co -P -d myCopy MITgcm_contrib/thisPart
287  </screen>  </screen>
288            <para> the type of CVS environment which has been used            <para> the type of CVS environment which has been used
289             is stored in the file <filename>myCopy/CVS/Root</filename>             is stored in the file <filename>myCopy/CVS/Root</filename>.
290             and makes it difficult to re-use, for cvs-commit purpose,             This prevent to re-use, for cvs-commit purpose,
291             a cvs local copy (<filename>myCopy</filename>) which was obtained             a cvs local copy (<filename>myCopy</filename>) which was obtained
292             using the CVS anonymous mode.</para>             using the CVS anonymous mode.</para>
293          </listitem>          </listitem>
294    
295          <listitem>          <listitem>
296            <para> At this stage, you should be able to send your modified source            <para> At this stage, you should be able to send your modified source
297            file (e.g., <filename>src_file</filename>) from your local copy directory            file (e.g., <filename>src_file</filename>) from your local copy directory
298            (<filename>myCopy</filename>) to the CVS repository            (<filename>myCopy</filename>) to the CVS repository
299            (<filename>MITgcm_contrib/thisPart</filename>) using the command            (<filename>MITgcm_contrib/thisPart</filename>) using the command
300            "cvs commit":</para>            "cvs commit":</para>
# Line 290  Line 304 
304    $ cvs diff src_file    (optional; list your changes)    $ cvs diff src_file    (optional; list your changes)
305    $ cvs commit src_file    $ cvs commit src_file
306  </screen>  </screen>
307            <para> It is essential that you provide a short description of the            <para> It is essential that you provide a short description of the
308            changes you made to <filename>src_file</filename> as you check-in            changes you made to <filename>src_file</filename> as you check-in
309            this file (the "cvs commit" command automatically opens your standard            this file (the "cvs commit" command automatically opens your standard
310            editor for this purpose).</para>            editor for this purpose).</para>
311              <para> Note:
312               Please ignore the following warnings that the "cvs commit" command
313               produces if you are not part of the "gcmpack" group:
314    <screen>
315       cvs commit: failed to create lock directory for `/u/gcmpack/CVSROOT'
316       (/u/gcmpack/CVSROOT/#cvs.history.lock): Permission denied
317       cvs commit: failed to obtain history lock in repository `/u/gcmpack'
318    </screen>
319              These warnings are not affecting the changes you made to the CVS repository.
320              </para>
321          </listitem>          </listitem>
322    
323        </orderedlist>        </orderedlist>
# Line 302  Line 326 
326    
327      <sect2>      <sect2>
328        <title>Main code development</title>        <title>Main code development</title>
329        <para>(formerly named "Tagging" ; this section needs an update)</para>        <para><emphasis>(formerly named "Tagging" ; this section needs an update)
330            </emphasis></para>
331    
332        <para>The intent of tagging is to create "known-good" checkpoints that        <para>The intent of tagging is to create "known-good" checkpoints that
333        developers can use as references.  Traditionally, MITgcm tagging has        developers can use as references.  Traditionally, MITgcm tagging has
# Line 355  checkpoint50e_post Line 380  checkpoint50e_post
380  o make KPP work with PTRACERS  o make KPP work with PTRACERS
381   - fix gad_calc_rhs to call new routine kpp_transport_ptr, which is   - fix gad_calc_rhs to call new routine kpp_transport_ptr, which is
382     nearly a copy of kpp_transport_s     nearly a copy of kpp_transport_s
383   - there is no analogue to SurfaceTendencyS, so I have to use   - there is no analogue to SurfaceTendencyS, so I have to use
384     gPtr(of the surface layer) instead     gPtr(of the surface layer) instead
385  o add a new platform SunFire+mpi (SunFire 15000) to genmake  o add a new platform SunFire+mpi (SunFire 15000) to genmake
386  checkpoint50e_pre  checkpoint50e_pre
387    
388  checkpoint50d_post  checkpoint50d_post
389  o change kpp output from multiple-record state files to single-record state  o change kpp output from multiple-record state files to single-record state
390    files analogous to write_state.F    files analogous to write_state.F
391  o reduce the output frequency of cg3d-related stuff to the monitor frequency,  o reduce the output frequency of cg3d-related stuff to the monitor frequency,
392    analogous to the cg2d-related output.    analogous to the cg2d-related output.
393  o fix small problem with in ptracers_write_checkpoint.F: len(suff)=512,  o fix small problem with in ptracers_write_checkpoint.F: len(suff)=512,
394    so that writing to internal file fn (with length 512) fails.    so that writing to internal file fn (with length 512) fails.
395  checkpoint50d_pre  checkpoint50d_pre
396  </programlisting>  </programlisting>
# Line 378  checkpoint50d_pre Line 403  checkpoint50d_pre
403      </sect2>      </sect2>
404    </sect1>    </sect1>
405    
   
406    <sect1 id="coding">    <sect1 id="coding">
407      <title>Coding for MITgcm</title>      <title>Coding for MITgcm</title>
408    
# Line 392  checkpoint50d_pre Line 416  checkpoint50d_pre
416          For MITgcm, the process is similar.  Typical commands are:</para>          For MITgcm, the process is similar.  Typical commands are:</para>
417    
418  <screen>  <screen>
419    $ genmake -mods=../code    $ genmake2 -mods=../code
420    $ make depend    $ make depend
421    $ make    $ make
422  </screen>  </screen>
423    
424        <para>The following sections describe the individual steps in the build        <para>The following sections describe the individual steps in the build
425          process.</para>          process.</para>
426          
427        <sect3 id="genmake">        <sect3 id="genmake">
428          <title>The <filename>genmake2</> Utility</title>          <title>The <filename>genmake2</> Utility</title>
429    
430          <para><emphasis>Please note that the older <filename>genmake</> is          <para><emphasis>(Note: the older <filename>genmake</>
431              deprecated and will eventually be replaced by <filename>genmake2</>.              has been replaced by <filename>genmake2</>)</emphasis></para>
             This HOWTO only describes the newer tool.</emphasis></para>  
432    
433          <para>The first step in any MITgcm build is to create a Unix-style          <para>The first step in any MITgcm build is to create a Unix-style
434            <filename>Makefile</filename> which will be parsed by            <filename>Makefile</filename> which will be parsed by
# Line 461  checkpoint50d_pre Line 484  checkpoint50d_pre
484              <para>an "options file" as specified by the command-line option              <para>an "options file" as specified by the command-line option
485                <filename>-optfile='FILENAME'</filename></para>                <filename>-optfile='FILENAME'</filename></para>
486            </listitem>            </listitem>
487              <listitem>
488                <para> a <filename>packages.conf</filename> file (in the current
489                  directory or in one of the "MODS" directories, see below)
490                  which contains the specific list of packages to compile
491                </para>
492              </listitem>
493          </orderedlist>          </orderedlist>
494    
495          <para>then checking certain dependency rules (the package dependencies),          <para>then checking certain dependency rules (the package dependencies),
# Line 514  checkpoint50d_pre Line 543  checkpoint50d_pre
543            </varlistentry>            </varlistentry>
544    
545            <varlistentry>            <varlistentry>
             <term><filename>-pdepend=/PATH/FILENAME</></term>  
   
             <listitem>  
               <para>This specifies the dependency file used for packages.  If  
               not specified, the default dependency file is  
               <filename>$ROOTDIR/pkg/pkg_depend</>.  The syntax for this file is  
               parsed on a line-by-line basis where each line containes either a  
               comment ("#") or a simple "PKGNAME1 (+|-)PKGNAME2" pairwise rule  
               where the "+" or "-" symbol specifies a "must be used with" or a  
               "must not be used with" relationship, respectively.  If no rule is  
               specified, then it is assumed that the two packages are compatible  
               and will function either with or without each other.</para>  
             </listitem>  
           </varlistentry>  
   
           <varlistentry>  
             <term><filename>-pdefault=PKG</></term>  
             <term><filename>-pdefault='PKG1 [PKG2 PKG3 ...]'</></term>  
             <listitem>  
               <para>This option specifies the default set of packages  
               to be used.  If not set, the default package list will  
               be read from  
               <filename>$ROOTDIR/pkg/pkg_default</>.</para>  
             </listitem>  
           </varlistentry>  
   
           <varlistentry>  
546              <term><filename>-adof=/path/to/file</></term>              <term><filename>-adof=/path/to/file</></term>
547              <term><filename>-adoptfile=/path/to/file</></term>              <term><filename>-adoptfile=/path/to/file</></term>
548              <listitem>              <listitem>
# Line 568  checkpoint50d_pre Line 570  checkpoint50d_pre
570                  will be overridden by any identically-named sources within the                  will be overridden by any identically-named sources within the
571                  "MODS" directories.  The order of precedence for this                  "MODS" directories.  The order of precedence for this
572                  "name-hiding" is as follows:</para>                  "name-hiding" is as follows:</para>
                 
573                <itemizedlist>                <itemizedlist>
574                  <listitem><para>"MODS" directories (in the order given)                  <listitem><para>"MODS" directories (in the order given)
575                    </para></listitem>                    </para></listitem>
576                  <listitem><para>Packages either explicitly specified or                  <listitem><para>Packages either explicitly specified or
577                      provided by default (in the order given)</para></listitem>                      provided by default (in the order given)</para></listitem>
578                  <listitem><para>Packages included due to package dependencies                  <listitem><para>Packages included due to package dependencies
579                      (in the order that that package dependencies are                      (in the order that that package dependencies are
580                      parsed)</para></listitem>                      parsed)</para></listitem>
581                  <listitem><para>The "standard dirs" (which may have been                  <listitem><para>The "standard dirs" (which may have been
582                      specified by the "-standarddirs" option)</para></listitem>                      specified by the "-standarddirs" option)</para></listitem>
583                </itemizedlist>                </itemizedlist>
584                </listitem>
585              </varlistentry>
586    
587              <varlistentry>
588                <term><filename>-pgroups=/PATH/FILENAME</></term>
589                <listitem>
590                  <para>This option specifies the file where package groups are
591                  defined.  If not set, the package-groups definition will
592                  be read from
593                  <filename>$ROOTDIR/pkg/pkg_groups</>.</para>
594                  <para>
595                  It also contains the default list of packages (defined
596                  as the group <filename>"default_pkg_list"</>) which is used
597                  when no specific package list (file: <filename>packages.conf</>)
598                  is found in current directory or in any "MODS" directory.
599                  </para>
600                </listitem>
601              </varlistentry>
602    
603              <varlistentry>
604                <term><filename>-pdepend=/PATH/FILENAME</></term>
605    
606                <listitem>
607                  <para>This specifies the dependency file used for packages.  If
608                  not specified, the default dependency file is
609                  <filename>$ROOTDIR/pkg/pkg_depend</>.  The syntax for this file is
610                  parsed on a line-by-line basis where each line containes either a
611                  comment ("#") or a simple "PKGNAME1 (+|-)PKGNAME2" pairwise rule
612                  where the "+" or "-" symbol specifies a "must be used with" or a
613                  "must not be used with" relationship, respectively.  If no rule is
614                  specified, then it is assumed that the two packages are compatible
615                  and will function either with or without each other.</para>
616              </listitem>              </listitem>
617            </varlistentry>            </varlistentry>
618    
# Line 606  checkpoint50d_pre Line 638  checkpoint50d_pre
638          <para>In general, it is best to use <filename>genmake2</> on a "clean"          <para>In general, it is best to use <filename>genmake2</> on a "clean"
639            directory that is free of all source (*.[F,f],*.[F,f]90) and header            directory that is free of all source (*.[F,f],*.[F,f]90) and header
640            (*.h,*.inc) files.  Generally, this can be accomplished in an            (*.h,*.inc) files.  Generally, this can be accomplished in an
641            "un-clean" directory by running "make CLEAN" followed by "make            "un-clean" directory by running "make Clean" followed by "make
642            makefile".</para>            makefile".</para>
643    
644        </sect3>        </sect3>
# Line 619  checkpoint50d_pre Line 651  checkpoint50d_pre
651            simulator) executable using:</para>            simulator) executable using:</para>
652    
653  <screen>  <screen>
654    $ make CLEAN    $ make Clean
655    $ make depend    $ make depend
656    $ make    $ make
657  </screen>  </screen>
658    
659          <para>The "make CLEAN" step will remove any stale source files, include          <para>The "make Clean" step will remove any stale source files, include
660            files, and links.  It is strongly recommended for "un-clean"            files, and links.  It is strongly recommended for "un-clean"
661            directories which may contain the (perhaps partial) results of            directories which may contain the (perhaps partial) results of
662            previous builds.  Such "debris" can interfere with the next stage of            previous builds. Such "debris" can interfere with the next stage of
663            the build.</para>            the build.
664              A more agressive cleaning option, "make CLEAN", can be used to also
665              remove the executable and output files from a previous run.</para>
666    
667          <para>The "make depend" step will create a large number of symbolic          <para>The "make depend" step will create a large number of symbolic
668            links from the local directory to the source file locations.  It also            links from the local directory to the source file locations.  It also
# Line 661  checkpoint50d_pre Line 695  checkpoint50d_pre
695              <listitem>              <listitem>
696                <para>This target produces an <filename>mitgcmuv_ad</> executable                <para>This target produces an <filename>mitgcmuv_ad</> executable
697                  using the <filename>taf</> or <filename>staf</> adjoint                  using the <filename>taf</> or <filename>staf</> adjoint
698                  compiler.  See the <filename>genmake2</> "-adof" option for                  compiler.  See the <filename>genmake2</> "-adof" option for
699                  compiler selection.</para>                  compiler selection.</para>
700              </listitem>              </listitem>
701            </varlistentry>            </varlistentry>
# Line 687  checkpoint50d_pre Line 721  checkpoint50d_pre
721        <title>The Verification Suite</title>        <title>The Verification Suite</title>
722    
723        <para>The MITgcm CVS tree (within the <filename>$ROOTDIR/verification/</>        <para>The MITgcm CVS tree (within the <filename>$ROOTDIR/verification/</>
724          directory) includes more than a dozen examples intended for regression          directory) includes many (> 90) examples intended for regression
725          testing.  Each one of these example directories contains "known-good"          testing.  Each one of these test-experiment directories contains "known-good"
726          output files along with all the input (including both code and data          output files along with all the input (including both code and data
727          files) required for their re-calculation.  These example directories are          files) required for their re-calculation.
728          further broken down into sets of subdirectories          Also included in <filename>$ROOTDIR/verification/</> is the shell
729          (eg. <filename>/input</>, <filename>/code</>) intended to expedite the          script <filename>testreport</> to perform regression tests.</para>
730          testing process.</para>  
731          <sect3 id="test-experiment">
732            <title>Test-experiment Directory Content</title>
733    
734              <para> Each test-experiment directory (<filename>TESTDIR</>) contains
735              several standard subdirectories and files which <filename>testreport</>
736              recognizes and uses when running a regression test.
737              The directories/files that <filename>testreport</> uses are different
738              for a forward test and an adjoint test (<filename>testreport -adm</>)
739              and some test-experiments are set-up for only one type of regression
740              test whereas others allow both types of tests (forward and adjoint).</para>
741              <para>Also some test-experiment allows, using the same MITgcm executable,
742              to perform multiple tests using different parameters and input files,
743              with a primary input set-up
744              (<filename>input/ </> or <filename>input_ad/ </>)
745              and corresponding results (<filename>results/output.txt</> or
746              <filename>results/output_adm.txt</>) and with one or several secondary
747              inputs (<filename>input.OTHER/ </> or <filename>input_ad.OTHER/ </>)
748              and corresponding results (<filename>results/output.OTHER.txt </>
749              or <filename>results/output_adm.OTHER.txt</>).</para>
750            <variablelist>
751    
752              <varlistentry>
753                <term>directory <filename>TESTDIR/results/</></term>
754                <listitem>
755                  <para>contains reference standard output used for test comparison.
756                    <filename>results/output.txt</> and
757                    <filename>results/output_adm.txt</>
758                    correspond respectively to primary forward and adjoint test
759                    run on the reference platform (currently
760                    <filename>baudelaire.csail.mit.edu</>)
761                    on one processor (no MPI, single thread)
762                    using the reference compiler (curently the GNU fortran
763                    compiler <filename>gfortran</>).
764                    The presence of these files determines whether or not
765                    <filename>testreport</> is testing or skipping
766                    this test-experiment.
767                    Reference standard output for secondary tests
768                    (<filename>results/output.OTHER.txt</>
769                    or <filename>results/output_adm.OTHER.txt</>) are
770                    also expected here.</para>
771                  <para>The test comparison involves few model variables output, which are,
772                    by default and for a forward test, the 2-D solver initial residual
773                    (<filename>cg2d_init_res</>) and 3-D state variables (T,S,U,V)
774                    monitor output, and, by default and for an adjoint test, the
775                    cost-function and gradient-check. However, some test-experiments
776                    use some package-specific variable/monitor output according to
777                    the file <filename>TESTDIR/input[_ad][.OTHER]/tr_checklist</>
778                    specification.</para>
779                </listitem>
780              </varlistentry>
781    
782              <varlistentry>
783                <term>directory <filename>TESTDIR/build/</></term>
784                <listitem>
785                  <para> initially empty directory where <filename>testreport</>
786                    will build the MITgcm executable for forward and adjoint test.
787                    It might contains an experiment specific
788                    <filename>genmake_local</> file (see <xref linkend="genmake">).
789                    </para>
790                  <para> Note that the original <filename>code[_ad]/SIZE.h_mpi</>
791                    is not directly used as "SIZE.h" to build an MPI-executable ;
792                    instead, a local copy <filename>build/SIZE.h.mpi</> is derived
793                    from <filename>code[_ad]/SIZE.h_mpi</>
794                    by adjusting the number of processors (nPx,nPy) according to
795                    <filename>NUMBER_OF_PROCS</> (see <xref linkend="testreport">,
796                    <filename>testreport -MPI</>) ; then it is linked to "SIZE.h"
797                    (<filename> ln -s SIZE.h.mpi SIZE.h </>) before building
798                    the MPI-executable.</para>
799                </listitem>
800              </varlistentry>
801    
802              <varlistentry>
803                <term>directory <filename>TESTDIR/code/</></term>
804                <listitem>
805                  <para>contains the test-experiment specific source code
806                    used to build the MITgcm executable (<filename>mitgcmuv</>)
807                    for forward-test (using <filename>genmake2 -mods=../code</>).
808                    </para>
809                    <para> It can also contain specific source files with the suffix
810                    "<filename>_mpi</>" to be used
811                    <!--
812                    in the <filename>TESTDIR/build/</> directory
813                    -->
814                    in place of the corresponding file (without suffix)
815                    for an MPI test (see <xref linkend="testreport">).
816                    The presence or absence of <filename>SIZE.h_mpi</>
817                    determines whether or not an MPI test on this
818                    test-experiment is performed or skipped.</para>
819                </listitem>
820              </varlistentry>
821    
822              <varlistentry>
823                <term>directory <filename>TESTDIR/code_ad/</></term>
824                <listitem>
825                  <para>contains the test-experiment specific source code
826                    used to build the MITgcm executable (<filename>mitgcmuv_ad</>)
827                    for adjoint-test (using <filename>genmake2 -mods=../code_ad</>).
828                    It can also contain specific source files with the suffix
829                    "<filename>_mpi</>" (see above).</para>
830                </listitem>
831              </varlistentry>
832    
833              <varlistentry>
834                <term>directory <filename>TESTDIR/input/</></term>
835                <listitem>
836                  <para>contains the input and parameter files
837                    used to run the primary forward test of this test-experiment.
838                    </para>
839                  <para>It can also contain specific parameter files with the suffix
840                    "<filename>.mpi</>" to be used
841                    <!--
842                    in the <filename>TESTDIR/run/</> directory
843                    -->
844                    in place of the corresponding file (without suffix) for MPI
845                    test, or with suffix "<filename>.mth</>" to be used for
846                    multi-threaded test (see <xref linkend="testreport">).
847                    The presence or absence of <filename>eedata.mth</>
848                    determines whether or not a multi-threaded test on this
849                    test-experiment is performed or skipped.</para>
850                  <para>To save disk space and reduce downloading time, multiple
851                    copies of the same input file is avoided by using a shell
852                    script <filename>prepare_run</>.
853                    When such a script is found in <filename>TESTDIR/input/ </>,
854                    <filename>testreport</> run this script in directory
855                    <filename>TESTDIR/run/ </> after linking all the input file
856                    from <filename>TESTDIR/input/ </>.
857                    </para>
858                </listitem>
859              </varlistentry>
860    
861              <varlistentry>
862                <term>directory <filename>TESTDIR/input_ad/</></term>
863                <listitem>
864                  <para>contains the input and parameter files
865                    used to run the primary adjoint test of this test-experiment.
866                    It can also contain specific parameter files with the suffix
867                    "<filename>.mpi</>" and shell script <filename>prepare_run</>
868                    as described above.</para>
869                </listitem>
870              </varlistentry>
871    
872              <varlistentry>
873                <term>directory <filename>TESTDIR/input.OTHER/</></term>
874                <listitem>
875                  <para>contains the input and parameter files
876                    used to run the secondary OTHER forward test of this test-experiment.
877                    It can also contain specific parameter files with suffix
878                    "<filename>.mpi</>" or "<filename>.mth</>" and shell script
879                    <filename>prepare_run</> (see above).</para>
880                    <para> The presence or absence the file <filename>eedata.mth</>
881                    determines whether or not a secondary multi-threaded test on this
882                    test-experiment is performed or skipped.</para>
883                </listitem>
884              </varlistentry>
885    
886              <varlistentry>
887                <term>directory <filename>TESTDIR/input_ad.OTHER/</></term>
888                <listitem>
889                  <para>contains the input and parameter files
890                    used to run the secondary OTHER adjoint test of this test-experiment.
891                    It can also contain specific parameter files with the suffix
892                    "<filename>.mpi</>" and shell script <filename>prepare_run</>
893                    (see above).</para>
894                </listitem>
895              </varlistentry>
896                    <!--
897                    -->
898              <varlistentry>
899                <term>directory <filename>TESTDIR/run/</></term>
900                <listitem>
901                  <para> initially empty directory where <filename>testreport</>
902                    will run the MITgcm executable for primary forward and adjoint
903                    test.</para>
904                  <para>Symbolic links (using command "<filename>ln -s</>") are made
905                    for input and parameter files (from <filename>../input/ </>
906                    or from <filename>../input_ad/ </>) and for MITgcm executable
907                    (from <filename>../build/ </>) before the run proceeds.
908                    The sequence of links (function <filename>linkdata</> within shell
909                    script <filename>testreport</>) for a forward test is:</para>
910    <screen>
911    * link+rename or remove links
912           to special files with suffix ".mpi" or ".mth" from ../input/
913    * link files from ../input/
914    * execute ../input/prepare_run (if it exists)
915    </screen>
916                  <para>The sequence for an ajoint test is similar, with
917                    <filename>../input_ad/ </> replacing <filename>../input/ </>.
918                    </para>
919                </listitem>
920              </varlistentry>
921    
922              <varlistentry>
923                <term>directory <filename>TESTDIR/tr_run.OTHER/</></term>
924                <listitem>
925                  <para> directory created by <filename>testreport</>
926                    to run the MITgcm executable for secondary "OTHER" forward
927                    or adjoint test.</para>
928                  <para> The sequence of links for a forward secondary test is:</para>
929    <screen>
930    * link+rename or remove links
931           to special files with suffix ".mpi" or ".mth" from ../input.OTHER/
932    * link files from ../input.OTHER/
933    * execute ../input.OTHER/prepare_run (if it exists)
934    * link files from ../input/
935    * execute ../input/prepare_run (if it exists)
936    </screen>
937                  <para>The sequence for an ajoint test is similar, with
938                    <filename>../input_ad.OTHER/ </> and <filename>../input_ad/ </>
939                    replacing <filename>../input.OTHER/ </> and <filename>../input/ </>.
940                    </para>
941                </listitem>
942              </varlistentry>
943    
944            </variablelist>
945          </sect3>
946    
947        <sect3 id="testreport">        <sect3 id="testreport">
948          <title>The <filename>testreport</> Utility</title>          <title>The <filename>testreport</> Utility</title>
949    
950          <para>Also included in <filename>$ROOTDIR/verification/</> are shell          <para> The shell script  <filename>testreport</> (in
951            scripts for automated testing.  The newest script (which was written            <filename>$ROOTDIR/verification/</>), which was written to work with
952            to work with <filename>genmake2</>) is called <filename>testreport</>.            <filename>genmake2</>, can be used to build different versions
953            This script can be used to build different versions of the MITgcm            of the MITgcm code, run the various examples, compare the output,
954            code, run the various examples, compare the output, and (if specified)            and (if specified) email the results of each one of these tests to a
955            email the results of each one of these tests to a central            central repository.</para>
           repository.</para>  
956    
957          <para>On some systems, the testreport script can be run with a command          <para>On some systems, the testreport script can be run with a command
958          line as simple as:</para>          line as simple as:</para>
959    
960  <screen>  <screen>
961    $ cd verification    $ cd verification
962    $ ./testreport -ieee    $ ./testreport
963  </screen>  </screen>
964    
965          <para>However, some systems (those lacking or wiht a broken "/bin/sh")          <para>However, some systems (those lacking or wiht a broken "/bin/sh")
966            may require an explicit shell invocation such as:</para>            may require an explicit shell invocation such as:</para>
967    
968  <screen>  <screen>
969    $ sh ./testreport -ieee -t 'exp0 exp4'    $ sh ./testreport -t 'exp2 exp4'
970    $ /some/path/to/bash ./testreport -ieee -t 'ideal_2D_oce lab_sea natl_box'    $ /some/path/to/bash ./testreport -t 'ideal_2D_oce lab_sea natl_box'
971  </screen>  </screen>
972    
973          <para>The <filename>testreport</> script accepts a number of          <para>The <filename>testreport</> script accepts a number of
# Line 729  checkpoint50d_pre Line 977  checkpoint50d_pre
977          <variablelist>          <variablelist>
978    
979            <varlistentry>            <varlistentry>
980              <term><filename>-ieee</></term>              <term><filename>-ieee</> (default) / <filename>-noieee</></term>
981              <listitem>              <listitem>
982                <para>If allowed by the compiler (as defined in the "optfile"),                <para>If allowed by the compiler (as defined in the "optfile"),
983                  use IEEE arithmetic.  This option, along with the GCC compiler,                  use IEEE arithmetic (<filename>genmake2 -ieee</>).
984                  is how the standard results were produced.</para>                  This option, along with the gfortran / gcc compiler,
985                    is how the standard results are produced.</para>
986                </listitem>
987              </varlistentry>
988    
989              <varlistentry>
990                <term><filename>-optfile=/PATH/FILENAME</></term>
991                <term><filename>-optfile '/PATH/F1 [/PATH/F2 ...]'</></term>
992                <listitem>
993                  <para>This specifies a list of "options files" that will be passed
994                    to <filename>genmake2</>.  If multiple options files are used
995                    (say, to test different compilers or different sets of options
996                    for the same compiler), then each options file will be used with
997                    each of the test directories.</para>
998              </listitem>              </listitem>
999            </varlistentry>            </varlistentry>
1000    
# Line 744  checkpoint50d_pre Line 1005  checkpoint50d_pre
1005                <para>This option specifies the test directory or list of test                <para>This option specifies the test directory or list of test
1006                  directories that should be used.  Each of these entries should                  directories that should be used.  Each of these entries should
1007                  exactly (note: they are case sensitive!) match the names of                  exactly (note: they are case sensitive!) match the names of
1008                  directries in <filename>$ROOTDIR/verification/</>.  If this                  directories in <filename>$ROOTDIR/verification/</>.  If this
1009                  option is omitted, then all directories that are properly                  option is omitted, then all directories that are properly
1010                  formatted (that is, containing an <filename>input</>                  formatted (that is, containing an <filename>input</>
1011                  sub-directory and a <filename>results/output.txt</> file) will                  sub-directory and a <filename>results/output.txt</> file) will
# Line 753  checkpoint50d_pre Line 1014  checkpoint50d_pre
1014            </varlistentry>            </varlistentry>
1015    
1016            <varlistentry>            <varlistentry>
             <term><filename>-optfile=/PATH/FILENAME</></term>  
             <term><filename>-optfile '/PATH/F1 [/PATH/F2 ...]'</></term>  
             <listitem>  
               <para>This specifies a list of "options files" that will be passed  
                 to <filename>genmake2</>.  If multiple options files are used  
                 (say, to test different compilers or different sets of options  
                 for the same compiler), then each options file will be used with  
                 each of the test directories.</para>  
             </listitem>  
           </varlistentry>  
   
           <varlistentry>  
1017              <term><filename>-addr EMAIL</></term>              <term><filename>-addr EMAIL</></term>
1018              <term><filename>-addr 'EMAIL1 EMAIL2 [...]'</></term>              <term><filename>-addr 'EMAIL1 EMAIL2 [...]'</></term>
1019              <listitem>              <listitem>
# Line 778  checkpoint50d_pre Line 1027  checkpoint50d_pre
1027            </varlistentry>            </varlistentry>
1028    
1029            <varlistentry>            <varlistentry>
1030                <term><filename>-MPI NUMBER_OF_PROCS</></term>
1031              <term><filename>-mpi</></term>              <term><filename>-mpi</></term>
1032              <listitem>              <listitem>
1033                <para>If the necessary files                <para>If the necessary file (<filename>TESTDIR/code/SIZE.h_mpi</>)
1034                (<filename>TESTDIR/code/CPP_EEOPTIONS.h_mpi</> and                exists, then use it (and all <filename>TESTDIR/code/*_mpi</> files)
1035                <filename>TESTDIR/code/SIZE.h_mpi</>) exist, then use them for an                for an MPI--enabled run.  The new option (<filename>-MPI</> followed
1036                MPI--enabled run.  Note that the use of MPI typically requires a                by the maximum number of processors) enable to build and run each
1037                  test-experiment using variable number of MPI processors (multiple
1038                  of <filename>nPx*nPy</> from <filename>TESTDIR/code/SIZE.h_mpi</>
1039                  and not larger than <filename>NUMBER_OF_PROCS</>).
1040                  The short option ("-mpi") can only be used to build and run on 2 MPI
1041                  processors (equivalent to "<filename>-MPI 2</>").</para>
1042                  <para>Note that the use of MPI typically requires a
1043                special command option (see "-command" below) to invoke the MPI                special command option (see "-command" below) to invoke the MPI
1044                executable.  Examples of PBS scripts using MPI with testreport can be                executable.  Examples of PBS scripts using testreport with MPI can be
1045                found in the <ulink                found in the <ulink
1046                url="http://mitgcm.org/viewvc/MITgcm/MITgcm_contrib/test_scripts/">                url="http://mitgcm.org/viewvc/MITgcm/MITgcm/tools/example_scripts/">
1047                MITgcm-contrib area</ulink></para>                tools/example_scripts directory</ulink>.</para>
1048              </listitem>              </listitem>
1049            </varlistentry>            </varlistentry>
1050    
1051            <varlistentry>            <varlistentry>
1052              <term><filename>-command='some command to run'</></term>              <term><filename>-command='some command to run'</></term>
1053              <listitem>              <listitem>
1054                <para>For some tests, particularly MPI runs, the default "make                <para>For some tests, particularly MPI runs, a specific command
1055                output.txt" is not sufficient.  This option allows a more general                might be needed to run the executable. This option allows a more general
1056                command (or shell script) to be invoked.  Examples of PBS scripts                command (or shell script) to be invoked.  Examples of PBS scripts
1057                using MPI with testreport can be found in the <ulink                using testreport with MPI can be found in the <ulink
1058                url="http://mitgcm.org/viewvc/MITgcm/MITgcm_contrib/test_scripts/">                url="http://mitgcm.org/viewvc/MITgcm/MITgcm/tools/example_scripts/">
1059                MITgcm-contrib area</ulink></para>                tools/example_scripts directory</ulink>.</para>
1060                  <para>
1061                    For the case where the number of MPI processors varies according
1062                    to each test-experiment, some key-words within the command-to-run
1063                    argument will be replaced by their effective value:</para>
1064                  <para>
1065                    <filename>TR_NPROC </> will be replaced by the actual number
1066                    of MPI processors needed to run the current test-experiment.</para>
1067                  <para>
1068                    <filename>TR_MFILE </> will be replaced by the name of local-file
1069                    that testreport creates from the full list of machines which
1070                    "<filename>testreport -mf MACHINE_FILE</>" provides, but truncated
1071                    to the exact number of machines.</para>
1072                </listitem>
1073              </varlistentry>
1074    
1075              <varlistentry>
1076                <term><filename>-mf MACHINE_FILE</></term>
1077                <listitem>
1078                  <para>
1079                    To use with <filename>-MPI NUMBER_OF_PROCS</> option, to specify
1080                    the file containing the full list of <filename>NUMBER_OF_PROCS</>
1081                    machines to use for the MPI runs.</para>
1082                </listitem>
1083              </varlistentry>
1084    
1085              <varlistentry>
1086                <term><filename>-mth</></term>
1087                <listitem>
1088                  <para>compile (with <filename>genmake2 -omp</>) and run with
1089                    multiple threads (using eedata.mth).</para>
1090              </listitem>              </listitem>
1091            </varlistentry>            </varlistentry>
1092    
1093          </variablelist>          </variablelist>
1094    
1095          <para>The <filename>testreport</> script will write progress to the          <para>The <filename>testreport</> script will create an output directory
1096            screen (stdout) as it runs.  In addition, it will create a            <filename>tr_NAME_DATE_N/ </>, with <filename>hostname</> as default
1097            <filename>tr_out.txt</> file that contains a brief comparison of the            <filename>NAME</>, <filename>DATE</> the current date followed by
1098            current output with the "known-good" output.</para>            a suffix number "N" to distinguish from previous
1099              <filename>testreport</> output directories.
1100              <filename>testreport</> writes progress to the screen (stdout)
1101              and reports into the ouput directory as it runs.
1102              In particular, one can find, in the ouput directory,
1103              the <filename>summary.txt</> file that contains a brief comparison
1104              of the current output with the "known-good" output.
1105              At the end of the testing process, the <filename>tr_out.txt</> file
1106              is generated in <filename>$ROOTDIR/verification/ </>
1107              as a compact version of <filename>summry.txt</> file.</para>
1108    
1109        </sect3>        </sect3>
1110    
1111      </sect2>        <sect3 id="tst_2plus2">
1112            <title>The <filename>do_tst_2+2</> Utility</title>
1113            <para> The shell script  <filename>do_tst_2+2</> (in
1114              <filename>$ROOTDIR/tools/ </>)
1115              can be used to check the accuracy of the restart procedure.
1116            </para>
1117          </sect3>
1118    
1119        </sect2>
1120    
1121      <sect2 id="packages">      <sect2 id="packages">
1122        <title>Creating MITgcm Packages</title>        <title>Creating MITgcm Packages</title>
# Line 851  separated from the generic fluid dynamic Line 1153  separated from the generic fluid dynamic
1153  below using generic package names ${pkg}.  below using generic package names ${pkg}.
1154  A concrete examples of a package is the code  A concrete examples of a package is the code
1155  for implementing GM/Redi mixing. This code uses  for implementing GM/Redi mixing. This code uses
1156  the package name  the package name
1157  *   ${PKG} = GMREDI  *   ${PKG} = GMREDI
1158  *   ${pkg} = gmredi  *   ${pkg} = gmredi
1159  *   ${Pkg} = gmRedi  *   ${Pkg} = gmRedi
# Line 886  o  Each package gets its runtime configu Line 1188  o  Each package gets its runtime configu
1188     Package runtime config. options are imported     Package runtime config. options are imported
1189     into a common block held in a header file     into a common block held in a header file
1190     called "${PKG}.h".     called "${PKG}.h".
1191     Note: In some packages, the header file "${PKG}.h" is splitted     Note: In some packages, the header file "${PKG}.h" is splitted
1192     into "${PKG}_PARAMS.h" that contains the package parameters and     into "${PKG}_PARAMS.h" that contains the package parameters and
1193     ${PKG}_VARS.h" for the field arrays.     ${PKG}_VARS.h" for the field arrays.
1194    
1195  o  The core driver part of the model can check  o  The core driver part of the model can check
# Line 911  CPP Flags Line 1213  CPP Flags
1213      1. Within the core driver code flags of the form      1. Within the core driver code flags of the form
1214         ALLOW_${PKG} are used to include or exclude         ALLOW_${PKG} are used to include or exclude
1215         whole packages. The ALLOW_${PKG} flags are included         whole packages. The ALLOW_${PKG} flags are included
1216         from a PACKAGES_CONFIG.h file that is automatically         from a PACKAGES_CONFIG.h file that is automatically
1217         generated by genmake2 (see genmake2 section).         generated by genmake2 (see genmake2 section).
1218         held in-line in the CPP_OPTIONS.h header file.         held in-line in the CPP_OPTIONS.h header file.
1219         e.g.         e.g.
# Line 930  CPP Flags Line 1232  CPP Flags
1232    
1233      2. Within an individual package a header file,      2. Within an individual package a header file,
1234         "${PKG}_OPTIONS.h", is used to set CPP flags         "${PKG}_OPTIONS.h", is used to set CPP flags
1235         specific to that package. It also includes         specific to that package. It also includes
1236         "PACKAGES_CONFIG.h" and "CPP_OPTIONS.h".         "PACKAGES_CONFIG.h" and "CPP_OPTIONS.h".
1237    
   
1238  Package Boot Sequence  Package Boot Sequence
1239  =====================  =====================
1240    
# Line 944  Package Boot Sequence Line 1245  Package Boot Sequence
1245      1. S/R PACKAGES_BOOT()      1. S/R PACKAGES_BOOT()
1246              :              :
1247          CALL OPEN_COPY_DATA_FILE( 'data.pkg', 'PACKAGES_BOOT', ... )          CALL OPEN_COPY_DATA_FILE( 'data.pkg', 'PACKAGES_BOOT', ... )
   
1248    
1249      2. S/R PACKAGES_READPARMS()      2. S/R PACKAGES_READPARMS()
1250              :              :
# Line 996  Package Output Line 1296  Package Output
1296  Description  Description
1297  ===========  ===========
1298    
1299        - ${PKG}_READPARMS()        - ${PKG}_READPARMS()
1300      is responsible for reading      is responsible for reading
1301      in the package parameters file data.${pkg}, and storing      in the package parameters file data.${pkg}, and storing
1302      the package parameters in "${PKG}.h" (or in "${PKG}_PARAMS.h").      the package parameters in "${PKG}.h" (or in "${PKG}_PARAMS.h").
1303      -> called from INITIALISE_FIXED in PACKAGES_READPARMS      -> called from INITIALISE_FIXED in PACKAGES_READPARMS
1304    
1305       - ${PKG}_INIT_FIXED()       - ${PKG}_INIT_FIXED()
1306      is responsible for completing the internal setup of a package.      is responsible for completing the internal setup of a package.
1307      -> called from INITIALISE_FIXED in PACKAGES_INIT_FIXED      -> called from INITIALISE_FIXED in PACKAGES_INIT_FIXED
1308      note: 1) some pkg use instead:      note: 1) some pkg use instead:
1309               CALL ${PKG}_INITIALISE  ( or the old form CALL ${PKG}_INIT )               CALL ${PKG}_INITIALISE  ( or the old form CALL ${PKG}_INIT )
1310            2) for simple pkg setup, this part is done inside ${PKG}_READPARMS            2) for simple pkg setup, this part is done inside ${PKG}_READPARMS
1311    
1312       - ${PKG}_CHECK()       - ${PKG}_CHECK()
1313      is responsible for validating      is responsible for validating
1314      basic package setup and inter-package dependencies.      basic package setup and inter-package dependencies.
1315      ${PKG}_CHECK can import other package parameters it may      ${PKG}_CHECK can import other package parameters it may
# Line 1018  Description Line 1318  Description
1318      will not be reset during ${PKG}_CHECK().      will not be reset during ${PKG}_CHECK().
1319      -> called from INITIALISE_FIXED in PACKAGES_CHECK      -> called from INITIALISE_FIXED in PACKAGES_CHECK
1320    
1321       - ${PKG}_INIT_VARIA()       - ${PKG}_INIT_VARIA()
1322      is responsible for fill-in all package variables with an initial value.      is responsible for fill-in all package variables with an initial value.
1323      Contains eventually a call to ${PKG}_READ_PICKUP that will read      Contains eventually a call to ${PKG}_READ_PICKUP that will read
1324      from a pickup file the package variables required to restart the model.      from a pickup file the package variables required to restart the model.
1325      This routine is called after the core model state has been completely      This routine is called after the core model state has been completely
1326      initialised but before the core model timestepping starts.      initialised but before the core model timestepping starts.
1327      -> called from INITIALISE_VARIA in PACKAGES_INIT_VARIABLES      -> called from INITIALISE_VARIA in PACKAGES_INIT_VARIABLES
1328      note: the name ${PKG}_INIT_VARIA is not yet standard and some pkg      note: the name ${PKG}_INIT_VARIA is not yet standard and some pkg
1329       use for e.g. ${PKG}_INI_VARS, ${PKG}_INIT_VARIABLES, or the old       use for e.g. ${PKG}_INI_VARS, ${PKG}_INIT_VARIABLES, or the old
1330       form ${PKG}_INIT       form ${PKG}_INIT
1331    
1332       - ${PKG}_OUTPUT( )       - ${PKG}_OUTPUT( )
1333       is responsible for writing time-average fields to output files       is responsible for writing time-average fields to output files
1334       (but the cumulating step is done within the package main S/R).       (but the cumulating step is done within the package main S/R).
1335       Can also contain other diagnostics (.e.g. CALL ${PKG}_MONITOR)       Can also contain other diagnostics (.e.g. CALL ${PKG}_MONITOR)
1336       and write snap-shot fields that are hold in common blocks. Other       and write snap-shot fields that are hold in common blocks. Other
1337       temporary fields are directly dump to file where they are available.       temporary fields are directly dump to file where they are available.
1338       NOTE: 1) the S/R old name ${PKG}_DIAGS is used in some packages       NOTE: 1) the S/R old name ${PKG}_DIAGS is used in some packages
1339                but is beeing replaced by ${PKG}_OUTPUT                but is beeing replaced by ${PKG}_OUTPUT
1340                to avoid confusion with pkg/diagnostics functionality.                to avoid confusion with pkg/diagnostics functionality.
1341             2) the output part is not yet in a standard form and might still             2) the output part is not yet in a standard form and might still
1342                evolve a lot.                evolve a lot.
1343      -> called within DO_THE_MODEL_IO      -> called within DO_THE_MODEL_IO
1344    
1345       - ${PKG}_WRITE_PICKUP()       - ${PKG}_WRITE_PICKUP()
1346       is responsible for writing a package pickup file when necessary for       is responsible for writing a package pickup file when necessary for
1347       a restart. (found also the old name: ${PKG}_WRITE_CHECKPOINT )       a restart. (found also the old name: ${PKG}_WRITE_CHECKPOINT )
1348      -> called from FORWARD_STEP and THE_MODEL_MAIN in PACKAGES_WRITE_PICKUP      -> called from FORWARD_STEP and THE_MODEL_MAIN in PACKAGES_WRITE_PICKUP
1349    
# Line 1079  Summary Line 1379  Summary
1379    * ${pkg}_output.F       write output to file.    * ${pkg}_output.F       write output to file.
1380    * ${pkg}_write_pickup.F write a package pickup file to restart the model    * ${pkg}_write_pickup.F write a package pickup file to restart the model
1381    
1382    New: Subroutine in one package (pkgA) that only contains code which    New: Subroutine in one package (pkgA) that only contains code which
1383         is connected to a 2nd package (pkgB) (e.g.: gmredi_diagnostics_init.F)         is connected to a 2nd package (pkgB) (e.g.: gmredi_diagnostics_init.F)
1384         will be named: pkgA_pkgB_something.F         will be named: pkgA_pkgB_something.F
1385    
# Line 1090  Summary Line 1390  Summary
1390    
1391    </sect1>    </sect1>
1392    
   
1393    <sect1 id="documentation">    <sect1 id="documentation">
1394      <title>Editing the Documentation</title>      <title>Editing the Documentation</title>
1395    
# Line 1136  Summary Line 1435  Summary
1435        the CVS tree.</para>        the CVS tree.</para>
1436    
1437        <para>The result is a command that resembles either</para>        <para>The result is a command that resembles either</para>
1438          
1439        <orderedlist>        <orderedlist>
1440          <listitem>          <listitem>
1441            <para>a reference to a variable or subroutine name such as            <para>a reference to a variable or subroutine name such as
# Line 1155  Summary Line 1454  Summary
1454                into a "-")</para>                into a "-")</para>
1455          </listitem>          </listitem>
1456        </orderedlist>        </orderedlist>
1457                      
   
1458    
1459      </sect2>      </sect2>
1460    
1461      <sect2>      <sect2>
1462        <title>Building the Documentation</title>        <title>Building the Documentation</title>
1463          
1464        <para>Given the directory structure of <xref        <para>Given the directory structure of <xref
1465        linkend="documentation_getting">, the entire documentation for the web        linkend="documentation_getting">, the entire documentation for the web
1466        site can be built using:</para>        site can be built using:</para>
# Line 1195  Summary Line 1493  Summary
1493    
1494  </article>  </article>
1495    
   

Legend:
Removed from v.1.12  
changed lines
  Added in v.1.19

  ViewVC Help
Powered by ViewVC 1.1.22