Gli Algoritmi della Libreria SOFA
Prev Next

3. Le 161 Subroutine della libreria SOFA

Quando le subroutine sono tantissime, come nel nostro caso, non conviene richiamarle di volta in volta dal programma principale, in quanto il procedimento sarebbe molto dispersivo. Infatti molte di esse si collegano a loro volta ad altre funzioni (FUNCTION) e “sub” per cui potrebbero innescarsi degli errori di compilazione quolora ci si scordasse di elencarne qualcuna.

Lo stesso Working Group dell'IAU (che ha predisposto il 'pacchetto' SOFA) consiglia la formazione di una LIBRERIA che raggruppi tutte le 161 subroutine.

3.1. Come si crea la libreria SOFA

Innanzitutto scarichiamola dalla seguente pagina web, cliccando su “download”. Il file gzippato contiene, oltre ai 161 file (.for), parecchie note tecnico-esplicative (HOWTO) e un importante makefile di cui gli utilizzatori di Linux conoscono la grande potenza e versatilità.

Stavolta però seguiamo una via più pratica, “comune” alle due piattaforme Linux e DOS. Dopo aver dezippato il file suddetto, lasciamo nella directory di lavoro i 161 file .for e li “cuciamo” in un unico file, che per praticità mnemonica potremmo chiamare 161p.for. La ′p′ sta per “plus”, intendendo che vi abbiamo aggiunto il seguente file, molto pratico per assegnare i colori allo sfondo dello schermo quando si avviano gli eseguibili. In realtà i file raggruppati saranno così 162.

      subroutine CLRSCR
*-----------------------------------------------------------------------
      character*14 escscr
********* Colori: Giallo (33m) su sfondo blu (44m) ********
********* Colori: Bianco (37m) su sfondo blu (44m) ********
      escscr=char(27)//'[44m'//char(27)//'[37m'//char(27)//'[2J' ! Bianco su Blu
      write (*,'(2x,a)') escscr
      return
      end

I comandi per unire i 162 file .for sono questi:

  Ambiente Linux: $ cat *.for > 161p.for

  Ambiente   DOS: copy /B *.for 161p.for

Successivamente bisogna creare un file oggetto, ossia la vera e propria libreria SOFA in binario, che verrà richiamata in fase di compilazione dal programma principale. In questo modo si è sicurissimi che nessun 'link' tra le varie routines verrà tralasciato. Ecco i comandi per far ciò:

  Ambiente Linux: $ gfortran -c 161p.for  (si forma il file oggetto 161p.o)

  Ambiente   DOS:        g95 -c 161p.for  (come sopra, file 161p.o del DOS)

Passiamo infine alla compilazione di un programma, per es. aaa.f90 in cui sono richiamate le routine SOFA. Eccola:

  Ambiente Linux: $ gfortran -o aaa aaa.f90 161p.o (compilazione)
                  $ ./aaa (avvio programma)
                  $ ./aaa > risu.txt (avvio programma con risultati su file)

  Ambiente   DOS: g95 -o aaa.exe aaa.f90 161p.for (compilazione)
                  aaa (avvio)
                  aaa > risu.txt (avvio programma con risultati su file)

3.2. Le due librerie pronte per l'uso

Riepilogando le librerie da usare sono due, ognuna relativa al proprio sistema operativo.

      161p-linux.o    per il Linux
      161p-dos.o      per il DOS

Per usarle immediatamente si possono prelevare da questo file gzippato, facendo così risparmiare tempo allo studioso.

3.3. SOFA in Fortran 90

Il Fortran 90 consente molta più flessibilità del Fortran 77 con cui è stata scritta la “big” libreria del pacchetto SOFA. Per la conversione da F77 a F90 è stato adottato un programma molto snello che consigliamo di scaricare da qui; nel file gzippato sono stati inseriti, oltre al codice 'fixcon.f90', anche gli eseguibili linux e DOS.

In quest'altro file sono stati compressi un esempio applicativo (zset8.f90) e la libreria Sofa trasformata in Fortran 90, desinenza .f90. Come detto nel paragrafo 3.1, il compilatore Fortran 90 in DOS si chiama (g95) e le modalità di esecuzione sono analoghe, basta stare attenti a compilare la libreria Sofa con la nuova estensione .f90.

Aggiornamento librerie SOFA al 2009-02-01. Niente di particolarmente importante, eccezion fatta per alcuni file in cui è stato introdotto il leap-second del 2008. L'intera libreria all161.for è stata deliberatamente lasciata in formato F77 e la compilazione dei listati in Fortran 90 avviene lo stesso. Con questo semplice comando linux:

$ gfortran nomefile.f90 all161.for -o nomefile   // per compilare
$ ./nomefile                                     // per avviare il programma
    

Infine, per un problema di 'copyright', in ognuna delle 161 sub/funzioni è stata aggiunta questa doverosa nota, richiesta dal punto 5. della licenza:

!+----------------------------------------------------------------------
!
!  Copyright (C) 2008
!  Standards Of Fundamental Astronomy Review Board
!  of the International Astronomical Union.
!
!  =====================
!  SOFA Software License (Software code converted in Fortran 90
!  by Giuseppe Matarazzo - Subroutines/Functions prefix changed
!  from `iau` to `zau` - March 2008)
!  =====================
!
!  NOTICE TO USER:
!  ............
!
!  5. The user may modify the Software for his/her own purposes.  The
!     user may distribute the modified software provided that the Board
!     is informed and that a copy of the modified software is made
!     available to the Board on request.  All modifications made by the
!     user shall be clearly identified to show how the modified software
!     differs from the original Software, and the name(s) of the
!     affected routine(s) shall be changed.  The original SOFA Software
!     License text must be present.
!
!  ............
!+----------------------------------------------------------------------

Valid XHTML 1.0 Strict