* Ä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