* Änderungen in Messy-Main-Routinen in Präprozessor-Direktiven klammern:
{{{
#ifdef MBM_CLAMS
...
#else
...
#endif
}}}
* Änderungen in Messy-Main-Routinen kennzeichnen mit ''aa_bb_yyyymmdd'' <
>
aa = Institution <
>
bb = Initialen des Benutzers <
>
z.B. :
{{{
! ju_nt_20150101+
! ju_nt_20150101-
}}}
* F90-Module müssen so heißen wie das Fortran-90-File
* Die Namen der Files/Module müssen eindeutig sein. <
>
D. h. ein Modul mit globalen Deklarationen für das Submodel xxx, sollte nicht nur "global" heißen, sondern z.B. '''clamsxxx_global'''
* Ein- und Ausgabe von/auf Dateien sollte möglichst gebündelt in IO-Routinen ausgelagert werden und nicht im Sourcecode verteilt sein. <
>
Alle IO-Routinen sollten in einem Modul zusammengefasst sein.<
>
Im Messy muss IO aus dem untersten Level ausgelagert und auf SMIL-Ebene genutzt werden
* Immer '''IMPLICIT NONE''' verwenden
* Bei der Deklaration sollten Variablen vordefiniert und Pointer auf NULL gesetzt werden, z.B.
{{{
INTEGER :: nparts = 0
REAL, DIMENSION(:), POINTER :: ptr => NULL()
}}}
* '''USE'''-Statements immer kombiniert mit '''ONLY''' verwenden, damit die Herkunft nicht-lokaler Variablen erkennbar ist
* '''keine STOPs''':
In allen Unterprogrammen, in denen Probleme auftreten können, einen Return-Code als Rückgabeparameter vereinbaren. <
>
Diesen Return-Code durch die Unterprogramm-Hierarchie bis auf das oberste Level zurückgeben und dort eine zentrale Fehlerbearbeitung aufrufen. <
>
Im Messy können keine Programmabrüche auf unterstem Level genutzt werden, da MPI dort nicht beendet werden kann.
* '''MPI'''
Wenn MPI genutzt werden kann, sollten ''ntasks'' und ''rank'' auch für die serielle Version deklariert und belegt sein (ntasks=1, rank=0), damit
keine Präprozessor-Direktiven für die MPI-Version genutzt werden müssen <
>
=> Keine Fallunterscheidung nötig, da Ausgaben immer für rank=0 gemacht werden können und do-Loops für die serielle und paralleleVersion gleich aufgeteilt werden können <
>
Im Messy: kein MPI auf unterstem Level, sondern auf SMIL-Ebene