mirror of
https://github.com/nwchemgit/nwchem.git
synced 2026-07-26 21:25:29 -04:00
116 lines
4.4 KiB
Bash
Executable file
116 lines
4.4 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
#
|
|
# $Id$
|
|
#
|
|
# We have introduced a macro MAPOINTER to explicitly define the Fortran
|
|
# data type for an MA/GA index. On 64-bit platforms these indeces need to be
|
|
# of type integer*8, whereas on 32-bit platforms these need to be integer*4.
|
|
# The reason for this is that the MA library allocates memory returning offsets
|
|
# with respect to arrays in a common block. These offsets are computed from the
|
|
# difference of 2 C-language pointers. The corresponding Fortran data types
|
|
# must be large enough to hold the resulting integer values.
|
|
#
|
|
# When this whole operation is done NWChem will be using 2 different kinds of
|
|
# integers. Explicitly declared integers (either integer*8 or integer*4) for
|
|
# the MA indeces and default type integers for everything else. The problem with
|
|
# this is that mistakes will be hard to detect unless we get some help from the
|
|
# compiler.
|
|
#
|
|
# With Fortran90 compiler help is easily organized with interface blocks.
|
|
# However, we do not want to force the whole code to become Fortran90 forever.
|
|
# So we do not want include the interface blocks permanently in the GA include
|
|
# files.
|
|
#
|
|
# This script looks for the appropriate GA include files and modifies them to
|
|
# include the interface blocks we need to ensure we have the index data types
|
|
# right. Running this script requires a subsequence "make realclean" to ensure
|
|
# that GA regenerates all its include files (the files we will change are
|
|
# typically files that will be pre-processed to generate the real include
|
|
# files). Hopefully, with this tool in place the transition will be smooth
|
|
# (famous last words...).
|
|
#
|
|
# Huub van Dam, July 30, 2012.
|
|
#
|
|
if [ ${#DEV_GA} -ne 0 ] ; then
|
|
export MAFDECLS=../../src/tools/ga-dev/ma/mafdecls.fh.in
|
|
export GLOBAL=../../src/tools/ga-dev/global/src/global.fh.in
|
|
elif [ ${#OLD_GA} -ne 0 ] ; then
|
|
export MAFDECLS=../../src/tools/ga-4-3/ma/mafdecls.fh
|
|
export MAFDECLS2=../../src/tools/ma/mafdecls.fh
|
|
export MAFDECLS3=../../src/tools/include/mafdecls.fh
|
|
export GLOBAL=../../src/tools/ga-4-3/global/src/global.fh
|
|
elif [ ${#EXP_GA} -ne 0 ] ; then
|
|
export MAFDECLS=../../src/tools/ga-exp1/ma/mafdecls.fh.in
|
|
export GLOBAL=../../src/tools/ga-exp1/global/src/global.fh.in
|
|
else
|
|
export MAFDECLS=../../src/tools/ga-5-1/ma/mafdecls.fh.in
|
|
export GLOBAL=../../src/tools/ga-5-1/global/src/global.fh.in
|
|
fi
|
|
#
|
|
# Do the MA include file
|
|
#
|
|
grep interface ${MAFDECLS}
|
|
status=$?
|
|
if [ ${status} -ne 0 ] ; then
|
|
grep -i -v ma_alloc_get ${MAFDECLS} | grep -i -v ma_get_index | grep -i -v ma_push_get > /tmp/mafdecls.$$
|
|
if [ ${#OLD_GA} -ne 0 ] ; then
|
|
echo "#define MAPOINTER Integer" >> /tmp/mafdecls.$$
|
|
echo "#define MA_ACCESS_INDEX_TYPE Integer" >> /tmp/mafdecls.$$
|
|
fi
|
|
cat << EOF >> /tmp/mafdecls.$$
|
|
interface
|
|
logical function MA_alloc_get(itype,n,name,handle,index)
|
|
integer itype, n, handle
|
|
character*(*) name
|
|
MA_ACCESS_INDEX_TYPE index
|
|
end function MA_alloc_get
|
|
logical function MA_get_index(handle,index)
|
|
integer handle
|
|
MA_ACCESS_INDEX_TYPE index
|
|
end function MA_get_index
|
|
logical function MA_push_get(itype,n,name,handle,index)
|
|
integer itype, n, handle
|
|
character*(*) name
|
|
MA_ACCESS_INDEX_TYPE index
|
|
end function MA_push_get
|
|
end interface
|
|
EOF
|
|
mv /tmp/mafdecls.$$ ${MAFDECLS}
|
|
if [ ${#OLD_GA} -ne 0 ] ; then
|
|
# With OLD_GA there are multiple versions mafdecls in multiple places
|
|
# so rather than figuring out what gets used when and how we just clobber
|
|
# all versions of the include file that we know of.
|
|
if [ -f ${MAFDECLS2} ] ; then
|
|
cp ${MAFDECLS} ${MAFDECLS2}
|
|
# else
|
|
# The file does not exist so we cannot clobber it.
|
|
fi
|
|
if [ -f ${MAFDECLS3} ] ; then
|
|
cp ${MAFDECLS} ${MAFDECLS3}
|
|
# else
|
|
# The file does not exist so we cannot clobber it.
|
|
fi
|
|
fi
|
|
fi
|
|
#
|
|
# Do the GA include file
|
|
#
|
|
grep interface ${GLOBAL}
|
|
status=$?
|
|
if [ ${status} -ne 0 ] ; then
|
|
if [ ${#OLD_GA} -ne 0 ] ; then
|
|
echo "#define GA_ACCESS_INDEX_TYPE Integer" >> ${GLOBAL}
|
|
fi
|
|
cat << EOF >> ${GLOBAL}
|
|
interface
|
|
subroutine GA_access(g_a,ilo,ihi,jlo,jhi,index,ld)
|
|
integer g_a,ilo,ihi,jlo,jhi,ld
|
|
GA_ACCESS_INDEX_TYPE index
|
|
end subroutine GA_access
|
|
subroutine NGA_access(g_a,lo,hi,index,ld)
|
|
integer g_a,lo(:),hi(:),ld(:)
|
|
GA_ACCESS_INDEX_TYPE index
|
|
end subroutine NGA_access
|
|
end interface
|
|
EOF
|
|
fi
|