[Como] Compilar Aimpac en ubuntu

Imagen de ejjp
0 puntos

Os dejo este mini-tutorial para instalar AIMPAC y dejarlo más o menos "funcional"
en una máquina con una distribución basada en debian.

AIMPAC lo forman 11 subprogramas o rutinas dedicados a la
teoria "Átomos en moléculas" (AIM) que realizan
cálculos y representaciones gráficas de forma independiente,
aunque también se dá el caso de que el fichero de salida de un programa
sirve de entrada para otro.

En este mini-tutorial se consiguen compilar los subprogramas
más importantes sin embargo, las rutinas que hacen las gráficas más molonas
aún se resisten.

Vamos al tema:
Las fuentes de AIMPAC en fortran77 (y poquísima o nada de información para instalarlo)
están disponibles aquí de forma gratuita:

http://www.chemistry.mcmaster.ca/aimpac/download/aimpac.zip
http://www.chemistry.mcmaster.ca/aimpac/download/aimpacpg.zip

Sin embargo, en la red disponemos de un magnífico tutorial
en castellano para instalarlo en una máquina linux genérica ¿BSD? http://www.fismol.org/quantum/quantum/aimpac.htm

Nota (17-11-07): la página está dada de baja, así que mi
mini tutorial se va a convertir en una adaptación comentada del original de Óscar Olvera Neria
para una distribución ubuntu 7.04. y así no se pierde su trabajo.

COMPILAR AIMPAC en distros basadas en debian

Los programas de AIMPAC y este tutorial se pueden dividir en dos grupos:

A)Compilar los programas de calculo numérico y propiedades:
* EXT94b
* PROAIMV
* BUBBLE
* PROFIL

B)Compilar los programas que constituyen herramientas gráficas:
* CONTOR
* GRDVEC
* GRIDV
* RELIEF
* SCHUSS
* CUBEV
* ENVELOPE

Los paquetes que se necesita tener instalados previamente:
g77, pgplot5, libpng2-dev, zlib1g-dev, libc6-dev y xlibs-dev.

A)Compilar los programas de calculo numérico y propiedades:

1. Crear una carpeta para aimpac, descargar el código fuente y descomprimir

%mkdir aim
%cd aim
%wget http://www.chemistry.mcmaster.ca/aimpac/download/aimpac.zip
%unzip aimpac.zip

2. Compilar el programa ext94b

%mv ext94b.src ext94b.f
%g77 -o ext94b ext94b.f

al compilar con g77 mostrará el siguiente error:
ext94b.f: En la subrutina `props':
ext94b.f:863:
SUBROUTINE BOND(X,Y,Z,BL,NCAL,PN,IFunc,Iwhole)
1
ext94b.f:3348: (continuado):
CALL BOND(X1,Y1,Z1,BL2,NCAL,PN)
2
Se pasaron muy few argumentos a `bond' en (2) contra la definición en (1) [info -f g77 M GLOBALS]

Por lo cual cambiamos la línea 3348 de CALL BOND(X1,Y1,Z1,BL2,NCAL,PN) a CALL BOND(X1,Y1,Z1,BL2,NCAL,PN,IFunc,Iwhole)
y volvemos a compilar esta vez sin problema.

3. Compilar el programa proaimv

%mv proaimv.src proaimv.f
%g77 -o proaimv proaimv.f

4. Compilar el programa bubble

%mv bubble.src bubble.f
%g77 -o bubble bubble.f

Aparece el siguiente mensaje de error (sólo se muestra una parte):

bubble.F:43: aviso:
COMMON /OFFSET/ ITYPE,ICENT,KATOM,IEORB,IE,IMO,ICHARG,IXC,IYC,IZC,
1
bubble.F:2602: (continuado):
COMMON /OFFSET/ ITYPE,ICENT,KATOM,IEORB,IE,IMO,ICHARG,IXC,IYC,IZC,
2

El error se debe a que los bloques OFFSET,UNITS y C2 se define de diferente tamaño en diferentes subrutinas, lo único que hay que hacer es definir de la misma manera a OFFSET, UNITS y C2 en todo el programa.

5. Compilar el programa profil

%mv profil.src profil.f

Primero hay que modificar este archivo comentando las primeras
lineas con una letra C mayúscula al principio del renglón hasta
donde esta el título del programa.
Segundo, por un problema similar en la compilación que hemos visto más arriba, se requiere cambiar COMMON /UNITS/ INPT,IOUT,IWFN por COMMON /UNITS/ INPT,IOUT,IWFN,IDBG en todos los lugares donde aparezca UNITS.
Ademas existe un error de padding que se soluciona
cambiando:
/PRIMS/ COO(MPRIMS,MMO),EXX(MPRIMS),ICT(MPRIMS),

+ SUM(MPRIMS),ITP(10),NPRIMS,DIV(MPRIMS)

por

/PRIMS/ COO(MPRIMS,MMO),EXX(MPRIMS),ICT(MPRIMS),

+ SUM(MPRIMS),ITP(10),DIV(MPRIMS),NPRIMS

Y finalmentne, la compilación del programa profil.f solicita una subrutina dgemm que se encuentra en las librerias de BLAS.
Se puede conseguir blas_linux de la siguiente dirección http://www.netlib.org/blas/archives/

%wget http://www.netlib.org/blas/archives/blas_linux.tgz
% tar xvfz blas_linux.tgz
%mv blas_linux.a libblas_linux.a

Ahora instalamos la librería en /usr/lib para ello se requiere el password del root
#sudo install -c -o root -g root -m 444 libblas_linux.a /usr/lib

La librería libblas_linux.a solicita la siguiente subrutina xerbla.o, así que hay que generar el archivo. Bajamos xerbla.f
de la siguiente dirección http://www.netlib.org/blas/xerbla.f y hacemos lo siguiente en /usr/lib, como root

#wget http://www.netlib.org/blas/xerbla.f
#g77 -c xerbla.f (para generar el xerbla.o)
#ar rv libblas_linux.a xerbla.o
De esta manera tenemos lista la libreria BLAS, ahora compilamos el programa profil.f
Nos cambiamos al directorio donde tenemos el código fuente de profil.f,

%g77 -o profil profil.f -L/usr/lib -lblas_linux

De esta manera, el primer bloque de programas ha sido compilado
usando g77, aunque se pueden usar otros compiladores.

B. Compilar los programas que constituyen herramientas gráficas:

1 y 2. Compilar las nuevas versiones de CONTOR y GRDVEC

En la carpeta donde esta Aimpac
%wget http://www.chemistry.mcmaster.ca/aimpac/download/aimpacpg.zip
%unzip aimpacpg.zip
%mv contorpg.f contor.f
%mv grdvecpg.f grdvec.f
%g77 -c hereplot.f
%g77 -O -o contor contor.f hereplot.o -lc -lpgplot -lX11 -lpng
%g77 -O -o grdvec grdvec.f hereplot.o -lc -lpgplot -lX11 -lpng
Estas líneas por RadSurfer desde el IRC en el canal #fortran
Gracias!!

3. Compilar GRIDV.SRC

%mv gridv.src gridv.f
%g77 -o gridv gridv.f

Trucos usando Aimpac:
El "man" de las rutinas es un poco antiguo.

Para ejecutar contor o grdvec y que de como resultado un grafico.png
Primero ejecutamos el comando gridv sobre uno de los ejemplos que vienen en el paquete
%./gridv c4h4 c4h4
y da como error
ERROR IN PLOT ATTRIBUTES CARD
Muchos de los archivos ejemplo que vienen con el programa tiene caracteres extraños que hay que
subsanar usando "vi" u otro editor. En concreto c4h4.inf tiene un error en en la primera línea, un "enter" de más.
%./gridv c4h4 c4h4
%./contor c4h4 grafico (donde grafico será el nombre del archivo.png que se crea)

Si usamos profil: es mejor introducir las coordenadas con el mismo numero de decimales en el .pfl

Los archivos .wfn los estoy obteniendo de gaussian98. La línea que pongo en el archivo de entrada a gaussian es la siguiente
#P B3LYP/6-311G(d,p) 6d 10f iop(3/32=2) units=bohr OUTPUT=WFN
Como veis no he incluido la orden Density=Current porque en cálculos DFT
los orbitales obtenidos todos tienen energía igual a 0 lo que no nos vale.
Si no se incluye iop(3/32=2) el .wfn generado no funciona en Aimpac.

########################################################################################################

Hasta aquí los programas han compilado con más o menos problemas, pero si son testeados con los
ejemplos que vienen en los .tar se puede comprobar que funcionan bien.

Los siguientes programas a continuación si bien algunos compilan el resultado de ejecutarlos da error y otros simplemente
no compilan por algun error en el código que no logro descubrir.

Estas rutinas se están resistiendo a funcionar bien y aquí necesitaría ayuda de la comunidad para
hacerlos funcionar

4. Compilamos RELIEF.SRC

%mv relief.src relief.f
%g77 -O -o relief relief.f hereplot.o -lc -lpgplot -lX11 -lpng

si ahora usamos el comando relief con el gridv generado anteriormente en el ejemplo
./relief c4h4 grafico3d
aparece un error cíclico

%PGPLOT, PGSLS: selected graphics device is not open
%PGPLOT, PGBBUF: selected graphics device is not open
%PGPLOT, PGEBUF: selected graphics device is not open
...
Aunque parece un error de PGPLOT, he comprobado que éste funciona
bien en los ejemplos que viene cuando instalas pgplot5. Además
usando las rutinas gráficas contor y grdvec funciona bien.
Creo que el error está en el archivo relief.f pero no consigo encontrarlo.
Alguna sugerencia estaría bien por aquí.
En el tutorial original de Óscar Olvera Neria
el compila relief de la siguiente manera:

%g77 -O -o relief relief.f hereplot.o /usr/lib/libpgplot.a -lc -lbsd -L /usr/X11R6/lib -lX11

hay que quitar -lbsd porque no es necesario en máquinas con debian y sigue dando errores y
la compilación con g77 es imposible. Recomiendo la línea de RadSurfer o la que viene
en la documentancion de pgplot5 que tambien consigue compilar relief.f

g77 -O -o relief relief.f hereplot.o -lpgplot -L/usr/X11R6/lib -lX11 -lpng -lz -lm

Sin embargo cuando se ejecuta el programa también aparece el error comentado arriba.
Quizás el man de relief está mal escrito pero ya he probado muchas combinaciones y sigue dando
el mismo error siempre. Quizás la solución sería instalar un pgplot antiguo contemporáneo de
Aimpac...

5. Compilamos SCHUSS.SRC
%mv schuss.src schuss.f
%g77 -O -o schuss schuss.f hereplot.o -lpgplot -L/usr/X11R6/lib -lX11 -lpng -lz -lm

El programa es compilado con este aviso

schuss.f: En la subrutina `trudge':
schuss.f:1873: aviso:
127 CONTINUE
1
schuss.f:1954: (continuado):
GOTO 127
2
La referencia a la etiqueta en (2) está fuera del bloque que contiene la definición en (1)

No he conseguido arreglarlo, quizás con otro compilador funcione...
O se admiten sugerencias para modificar el schuss.f....
Además el binario schuss no funciona bien.
Primero de todo se necesita incluir en el .vec un intro al principio del fichero, si no da
core dumped. Schuss y grdvec utilizan el mismo tipo de ficheros a la entrada, sin embargo el primero
no funcina y el segudo si. Por tanto debe haber varios errores en schuss.f

6. Compilamos CUBEV.SRC

%mv cubev.src cubev.f
%g77 -o cubev cubev.f

Compila bien, sin embargo no funciona al ser ejecutado.
Este cubev tiene el mismo tipo de archivos de entrada que gridv. El primero
da un core dumped y el gridv funciona perfectamente.

7. Compilamos ENVELOP.SRC
%mv envelop.src envelop.f
%g77 -O -o envelop envelop.f hereplot.o /usr/lib/libpgplot.a -lc -lbsd -L /usr/X11R6/lib -lX11

Marca un error (line 47, column 7: Invalid END PROGRAM statement)
Hay que entrar al programa envelop.f y en la línea 47 y columna 10 dar un enter.
Despues de esto compila bien pero la rutina envelop necesita del archivo
de salida que genera cubev para ser probada.

De 11 rutinas funcionan bien 7. No está mal, pero estaría genial conseguir sobre todo
relief que es el que dá gráficos más espectaculares en tres dimensiones.