I am a Linux novice, and I am attempting to compile scientific software called DL_POLY_Classic. I downloaded the zip file dl_class_1.6.tar.gz and unzipped it using the command
tar xvzf dl_class_1.6.tar.gz. It gives me a series of folders containing various files for the program operation, which are described in the program manual. One of these directories, called source contains many .f files, among other things. The manual says that to compile the code, one needs to take one of the sample/template Makefiles and modify the paths therein to direct the
make program to the appropriate directory containing the compiler. (This DL_POLY_Classic program is written in, and must be compiled with, Fortran [Fortran 90, I believe].)
Based on the recommendation of a colleague, I am attempting to compile this code using an Intel Fortran compiler (ifort) that we have on our cluster. I have modified one of the targets in the template Makefile; this target now has the following text in the 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)
I place the Makefile in the source directory, as the manual directs. Then while in the source directory, I type the command:
However, I get the following error message:
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: Entering directory `/export/home/myusername/dlc1_16/dl_class_1.6/source' make: *** No rule to make target `dl_params.inc', needed by `angfrc.o'. Stop. make: Leaving directory `/export/home/myusername/dlc1_16/dl_class_1.6/source' make: *** [mpich-c2] Error 2
make program is telling me that there is
No rule to make target dl_params.inc, needed by angfrc.o.
My question is, what is the software telling me? Is it likely saying that it cannot find a file dl_params.inc, or is it likely that it is saying that it cannot find a file angfrc.o? Or, is it saying that I should have some sort of command in my Makefile to create a new file called dl_params.inc?
When I search in my Makefile (which, as I mentioned, is essentially exactly the template provided by the authors, but just with the directories in the
mpich-c2 target entries modified for the particular Fortran compiler to which I have access), I see only these mentions of 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
I am not sure what this means.
On the other hand, when I search in my Makefile for angfrc.o, I see only one mention, in the first line of the following (after
# 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 \
I am not sure what this means, either.
Interestingly, when I use the
find command to search by name--for example,
find -name angfrc.o,
find -name *.o, and
find -name dl_params.inc--I can find nothing anywhere in the program directories with these names. When I try
find -name *.inc, I do find that a file comms.inc exists in the source directory. This particular file says in its header that it is the "dl_poly include file for MPI, PVM and SHMEM." It is a relatively short file (only 42 lines long), and it appears that it contains both "parameters for message tags" and "MPI tagsizes"--although, I do not really have a clue as to what I should be looking for in there.
If you have time, can you please give me advise as to what I should try next? I am not so sure what the error message
No rule to make target dl_params.inc, needed by angfrc.o. is telling me; do you have any ideas? Thank you very much for your time.