Eu sou um novato em Linux e estou tentando compilar um software científico chamado DL_POLY_Classic . Eu baixei o arquivo zip dl_class_1.6.tar.gz e o descompactei usando o comando tar xvzf dl_class_1.6.tar.gz
. Dá-me uma série de pastas contendo vários arquivos para a operação do programa, que são descritos no programa manual . Um desses diretórios, chamado source , contém muitos arquivos .f , entre outras coisas. O manual diz que para compilar o código, é necessário usar um dos Makefiles de exemplo / modelo e modificar os caminhos nele para direcionar o programa make
para o diretório apropriado que contém o compilador. (Este programa DL_POLY_Classic está escrito, e deve ser compilado com Fortran [Fortran 90, eu acredito].)
Com base na recomendação de um colega, estou tentando compilar esse código usando um compilador Intel Fortran (ifort) que temos em nosso cluster. Eu modifiquei um dos alvos no modelo Makefile; este alvo agora tem o seguinte texto no Makefile:
#========== mpich-c2
mpich-c2: dpp
cp /opt/mpich/ch-p4/include/mpif.h mpif.h
$(MAKE) LD="/opt/mpich_intel/ch-p4/bin/mpif90 -O3 -o" \
LDFLAGS="-L/opt/mpich_intel/ch-p4/lib64 -lmpich" \
TIMER="" \
FC=/opt/intel_fc_80/bin/ifort \
FFLAGS="-c " \
MPICH_F90="/opt/mpich_intel/ch-p4/bin/mpif90" \
CPFLAGS="-D$(STRESS) -DMPI -P -D'pointer=integer'\
-I/opt/mpich_intel/ch-p4/include" \
EX=$(EX) BINROOT=$(BINROOT) $(TYPE)
Eu coloco o Makefile no diretório source , como o manual direciona. Então, enquanto no diretório source , eu digito o comando:
make mpich-c2
No entanto, recebo a seguinte mensagem de erro:
cp /opt/mpich/ch-p4/include/mpif.h mpif.h
make LD="/opt/mpich_intel/ch-p4/bin/mpif90 -O3 -o" \
LDFLAGS="-L/opt/mpich_intel/ch-p4/lib64 -lmpich" \
TIMER="" \
FC=/opt/intel_fc_80/bin/ifort \
FFLAGS="-c " \
MPICH_F90="/opt/mpich_intel/ch-p4/bin/mpif90" \
CPFLAGS="-DSTRESS -DMPI -P -D'pointer=integer'\
-I/opt/mpich_intel/ch-p4/include" \
EX=D.X BINROOT=./ 3pt
make[1]: Entering directory '/export/home/myusername/dlc1_16/dl_class_1.6/source'
make[1]: *** No rule to make target 'dl_params.inc', needed by 'angfrc.o'. Stop.
make[1]: Leaving directory '/export/home/myusername/dlc1_16/dl_class_1.6/source'
make: *** [mpich-c2] Error 2
Então, o programa make
está me dizendo que existe No rule to make target dl_params.inc, needed by angfrc.o.
Minha pergunta é: o que o software está me dizendo? É provável que ele não consiga encontrar um arquivo dl_params.inc , ou é provável que esteja dizendo que não pode encontrar um arquivo angfrc.o ? Ou está dizendo que eu deveria ter algum tipo de comando no meu Makefile para criar um arquivo chamado dl_params.inc ?
Quando eu pesquiso no meu Makefile (que, como mencionei, é essencialmente o modelo fornecido pelos autores, mas apenas com os diretórios nas entradas mpich-c2
target modificadas para o compilador Fortran específico ao qual tenho acesso) , Vejo apenas estas menções de dl_params.inc :
# Declare dependency on parameters file
$(OBJ_ALL): dl_params.inc
$(OBJ_RRR): dl_params.inc
$(OBJ_4PT): dl_params.inc
$(OBJ_RSQ): dl_params.inc
$(OBJ_NEU): dl_params.inc
$(OBJ_RIG): dl_params.inc
$(OBJ_EXT): dl_params.inc
$(OBJ_SPME): dl_params.inc
$(OBJ_HKE): dl_params.inc
Não tenho certeza do que isso significa.
Por outro lado, quando eu pesquiso no meu Makefile para angfrc.o , vejo apenas uma menção, na primeira linha do seguinte (após OBJ_ALL
):
# Define object files
#=====================================================================
OBJ_ALL = angfrc.o bndfrc.o cfgscan.o corshl.o coul0.o coul4.o \
coul2.o coul3.o conscan.o dblstr.o dcell.o diffsn0.o \
diffsn1.o dlpoly.o duni.o error.o ewald1.o ewald3.o \
exclude.o exclude_atom.o fldscan.o exclude_link.o forces.o\
exitcomms.o extnfld.o fbpfrc.o fcap.o freeze.o gauss.o \
gdsum.o getrec.o gimax.o gisum.o gstate.o images.o initcomms.o \
intlist.o intstr.o invert.o invfrc.o jacobi.o lowcase.o lrcmetal.o \
lrcorrect.o machine.o merge.o merge1.o merge4.o \
npt_b1.o npt_b3.o parset.o npt_h1.o npt_h3.o nve_1.o \
nvt_b1.o nvt_e1.o nvt_h1.o parlst_nsq.o parlink.o parlst.o passcon.o \
passpmf.o pmf_1.o pmf_shake.o primlst.o quench.o rdf0.o rdf1.o \
rdshake_1.o result.o revive.o scdens.o shellsort.o shlfrc.o \
shlmerge.o shlqnch.o shmove.o simdef.o splice.o static.o strip.o \
strucopt.o sysdef.o sysgen.o systemp.o sysbook.o sysinit.o \
tethfrc.o thbfrc.o timchk.o traject.o vertest.o vscaleg.o \
warning.o xscale.o zden0.o zden1.o \
Eu não tenho certeza do que isso significa também.
Curiosamente, quando eu uso o comando find
para pesquisar por nome - por exemplo, find -name angfrc.o
, find -name *.o
e find -name dl_params.inc
- não consigo encontrar nada em nenhum lugar nos diretórios do programa com esses nomes. Quando tento find -name *.inc
, descubro que existe um arquivo comms.inc no diretório source . Este arquivo em particular diz em seu cabeçalho que é o "arquivo de inclusão dl_poly para MPI, PVM e SHMEM". É um arquivo relativamente curto (com apenas 42 linhas de comprimento), e parece que ele contém tanto "parâmetros para tags de mensagem" quanto "tags de MPI" - embora, eu não tenha a menor idéia do que eu deveria estar procurando lá dentro.
Se você tiver tempo, por favor me dê conselhos sobre o que devo tentar em seguida? Não tenho tanta certeza do que a mensagem de erro No rule to make target dl_params.inc, needed by angfrc.o.
está me dizendo; você tem alguma ideia? Muito obrigado pelo seu tempo.