Estou tentando calcular constantes de troca para compostos cristalinos de níquel (Ni) usando o método da função de Greens de Dm M. Korotin et al. Física. Rev. B 91, 224405 (2015). Isso é conseguido com uma combinação de café expresso quântico e um mestre de trocas de codinome. No entanto, quando eu baixo o exchanges-master de https://github.com/dkorotin/exchanges e o coloco em meu diretório inicial, o exchanges-master não irá compilar (usando command make
) devido a erros como undefined reference to ‘omp_get_thread_num’
.
Para mais detalhes, o computador que estou usando é novo:
- É uma inveja da HP com um núcleo Intel i9 e 64 Gbytes de memória.
- O código gfortran é a versão mais recente GNU Fortran (Ubuntu11.4.0-1ubuntu1-22.04) 11.4.0).
- As versões mais recentes do lapack e blas também estão instaladas.
A única preparação que é instruída a fazer no diretório exchanges-master é designar gfortran e os pacotes lapack no Makefile usando o editor vim. Depois de fazer isso, está-se pronto para compilar com make
, que supostamente produzirá exchanges.x
os cálculos da função de Greens. No entanto, em vez disso, obtém-se:
(i) gfortran -o exchanges.x exchanges.o parameters.o general.o iomodule.o find_nnbrs.o green_function.o -L/usr/local/opt/lapack/lib/ -llapack -lblas
(ii) /usr/bin/ld: exchanges.o: in function `MAIN__':
(iii) /mnt/c/Users/adolp/exchanges-master/exchanges.f90:61: undefined reference to `omp_get_max_threads_'
`compute_g_._omp_fn.0':
(iv) /mnt/c/Users/adolp/exchanges-master/green_function.f90:23: undefined reference to `omp_get_num_threads'
(v) /usr/bin/ld: /mnt/c/Users/adolp/exchanges-master/green_function.f90:23: undefined reference to `omp_get_thread_num'
(vi) /usr/bin/ld: /mnt/c/Users/adolp/exchanges-master/green_function.f90:23: undefined reference to `GOMP_barrier'
(vii)/usr/bin/ld: green_function.o: in function `compute_g_':
(viii) /mnt/c/Users/adolp/exchanges-master/green_function.f90:21: undefined reference to `GOMP_parallel'
collect2: error: ld returned 1 exit status
make: *** [Makefile:28: exchanges.x] Error 1
Note the compilation is OK with our choices made in the Makefile (see line (i) above). The difficulty begins when it compiles the greens function calculation with
‘/usr/bin/id: exchanges.oi in function ‘MAIN_’
Todos os erros estão relacionados ao OMP e GOMP. Pode-se primeiro pensar que a solução é compilar o Quantum expresso desabilitando o processamento paralelo e o openmp. No entanto, compilei o QE de todas as maneiras. O 'exchanges-master' parece ser bastante independente em operação do expresso quântico. A única função do QE é fornecer os dados de entrada para exchanges.x, que é o pacote de trabalho obtido do exchanges-master após sua make
compilação.
Os arquivos onde ocorrem os erros estão no diretório exchanges-master e sua localização (ou seja, linha do arquivo) é fornecida com os erros listados em (ii) a (viii) acima. Como esses arquivos são necessários para realizar os cálculos, não se pode evitar os comandos dados em seu código relacionados ao OMP e GOMP. Parece que a única coisa que se pode fazer é definir bem o seu uso. No entanto, não há instruções sobre como fazer isso. Outra solução possível e talvez mais provável seria usar versões anteriores do exchanges-master que provavelmente não faziam referência ao OMP e ao GOMP. No entanto, as versões anteriores não estão listadas no Github.