PGI Guide to CHARMM

This guide was created for Version v32b1 of CHARMM using PGI Compiler Release 7.1 for use on a AMD64/Opteron/Barcelona/EM64T/Dual Core 2/ system running 64-bit Linux.

Version Information
  This guide was created for Version v32b1 of CHARMM using PGI Compiler Release 7.1. This information is for a AMD64/Opteron/Barcelona/EM64T,Dual Core 2 system running 64-bit Linux.
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.