PGI Guide to CHARMM

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.

Version Information

This guide uses Version v32b1 of CHARMM and PGI Compiler Release 7.1.

Application Notes

Information about CHARMM (Chemistry at HARvard Molecular Mechanics) can be found at the CHARMM web page.

Obtaining the Source Code

Information about obtaining the source can be found at http://yuri.harvard.edu/.

Dependencies

None.

Configuration and Set-up Information

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

Building CHARMM

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

Running CHARMM

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

Verifying Correctness

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.

Known Issues and Limitations

None.

Click me