This guide is intended to aid in building the Chemistry at HARvard Molecular Mechanics (CHARMM) application for use on a x64 systems running 64-bit Linux.
This guide uses Version v32b1 of CHARMM and PGI Compiler Release 7.1.
Information about CHARMM (Chemistry at HARvard Molecular Mechanics) can be found at the CHARMM web page.
Information about obtaining the source can be found at http://yuri.harvard.edu/.
None.
Four files need to be changed to allow the code to be built in 64-bit mode while using dynamic memory allocation. The files are, install.com, cstuff.c, machutil.src, and space.src. Below are the changes needed.
./install.com
This change allows specification of the I8 install.com option for architecture "gnu" for any kind of compiler
Before:
464 # Modify Makefile_template for long integer compilation
465 if ( $longint == 1 ) then
466 if ( $chm_host == sgi64 || \
467 $chm_host == altix || \
468 $chm_host == alpha || \
469 ( $chm_host == gnu && $pathscale == 1) || \
470 ( $chm_host == gnu && $efc == 1) || \
471 ( $chm_host == gnu && $cfort == 1) ) then
472 sed -e 's/$(I8DUM1)/-i8/' \
473 $chmbuild/Makefile_$chmhost > $chmbuild/Makefile_$$
474 sed -e 's/$(I8DUM2)/-Di8/' \
475 $chmbuild/Makefile_$$ > $chmbuild/Makefile_$chmhost
476 /bin/rm $chmbuild/Makefile_$$
477 else
478 echo "-i8 not available for this platform"
479 echo "Update install.com and
build/UNX/Makefile_$chmhost"
480 exit -1
481 endif
482 endif
After:
464 # Modify Makefile_template for long integer compilation
465 if ( $longint == 1 ) then
466 if ( $chm_host == sgi64 || \
467 $chm_host == altix || \
468 $chm_host == alpha || \
469 ( $chm_host == gnu && $pgf77 == 1) || \
470 ( $chm_host == gnu && $pathscale == 1) || \
471 ( $chm_host == gnu && $efc == 1) || \
472 ( $chm_host == gnu && $cfort == 1) ) then
473 sed -e 's/$(I8DUM1)/-i8/' \
474 $chmbuild/Makefile_$chmhost > $chmbuild/Makefile_$$
475 sed -e 's/$(I8DUM2)/-Di8/' \
476 $chmbuild/Makefile_$$ > $chmbuild/Makefile_$chmhost
477 /bin/rm $chmbuild/Makefile_$$
478 else
479 echo "-i8 not available for this platform"
480 echo "Update install.com and
build/UNX/Makefile_$chmhost"
481 exit -1
482 endif
483 endif
./source/machdep/cstuff.c
This change makes function "loc_" return type "long" rather than "int" when the I8 install.com option is used.
Before:
615 #if machine_aix370 || gnu
616 int loc_(numb)
617 #else
618 INT loc(numb)
619 #endif
After:
615 #if machine_aix370 || gnu 616 INT loc_(numb) 617 #else 618 INT loc(numb) 619 #endif
This change is needed because these functions are called for INTEGER type F77 variables which are 64-bit on x86_64; using INT makes them C type "long" which is also 64-bit.
Before:
957 unsigned int ishft_(i,j)
After:
957 unsigned INT ishft_(i,j)
Before:
963 unsigned int iand_(i,j)
After:
963 unsigned INT iand_(i,j)
Before:
968 unsigned int ieor_(i,j)
After:
968 unsigned INT ieor_(i,j)
./source/machdep/machutil.src
This change specifies the size of the heap word to be 8 when the I8 install.com option is used.
Before:
871 ##ELIF UNIX IBMRS IBMVM IBMMVS IBMSP GNU OS2 IBMAIX OSX 872 LOCDIF=LOC(A)-LOC(B) 873 NMATCH=4
After:
871 ##ELIF UNIX IBMRS IBMVM IBMMVS IBMSP GNU OS2 IBMAIX OSX 872 LOCDIF=LOC(A)-LOC(B) 873 ##IF INTEGER8 874 NMATCH=8 875 ##ELSE 876 NMATCH=4 877 ##ENDIF
./source/machdep/space.src
This change allows the use of the "fmalloc" function defined in ./source/machdep/cstuff.c instead of the intrinsic "malloc".
Before:
322 ##IF IBMAIX 323 B8=FMALLOC(CODE) 324 ##ELSE 325 B8=MALLOC(CODE) 326 ##ENDIF
After:
322 ##IF IBMAIX 323 B8=FMALLOC(CODE) 324 ##ELSE 325 B8=FMALLOC(CODE) 326 ##ENDIF
./build/UNX/Makefile_gnu
Before:
66 # pgi pgf77 3.0
67 ifdef PGI_F77
68 FC = pgf77 -O2 -Munroll -tp p6 -Mnoframe -Mbyteswapio
69 LD = pgf77 -O2 -Munroll -tp p6 -Mnoframe -Mbyteswapio
70 endif
After:
66 # pgi pgf77 3.0
67 ifdef PGI_F77
68 FC = pgf90 -O2 -Munroll -Mnoframe -Mbyteswapio $(I8DUM1)
69 LD = pgf90 -O2 -Munroll -Mnoframe -Mbyteswapio $(I8DUM1)
70 endif
Before:
131 ifdef PGI_F77 132 FC0 = pgf77 -c -Mbyteswapio 133 else
After:
131 ifdef PGI_F77 132 FC0 = pgf90 -c -Mbyteswapio $(I8DUM1) 133 else
Before building the CHARMM executable make sure that your shells "path" variable includes the location of the PGI compilers. Then execute the following command:
./install.com gnu xxlarge FULL PGF77 keepo keepf I8
There are a set of tests provided with the CHARMM distribution in the ./test directory. To run these tests, do the following:
cd ./test ./test.com gnu
Provided with the source distribution is a script used to check for correctness when running the tests from the distribution. This script ./test/compare.awk compares output files with previously generated output.
None.