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 |
|
|
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> |
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> |
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 |
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) |
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 |
|
|
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> |
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> |
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 |
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> |
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 |
|
|
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 |
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), |
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> |
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 |
|
|
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> |
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 |
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> |
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 |
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 |
|
|
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 |
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> |
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> |
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 |
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 |
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. |
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 |
|
|
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 |
: |
: |
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 |
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 |
|
|
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 |
|
|
1390 |
|
|
1391 |
</sect1> |
</sect1> |
1392 |
|
|
|
|
|
1393 |
<sect1 id="documentation"> |
<sect1 id="documentation"> |
1394 |
<title>Editing the Documentation</title> |
<title>Editing the Documentation</title> |
1395 |
|
|
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 |
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> |
1493 |
|
|
1494 |
</article> |
</article> |
1495 |
|
|
|
|
|