- Ä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+ <geaenderte Zeilen> ! 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