/[MITgcm]/MITgcm/tools/genmake2
ViewVC logotype

Diff of /MITgcm/tools/genmake2

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.152 by jmc, Thu Jun 15 17:11:37 2006 UTC revision 1.205 by jmc, Sun May 23 03:45:58 2010 UTC
# Line 325  find_possible_configs()  { Line 325  find_possible_configs()  {
325    
326      #================================================================      #================================================================
327      #  look for possible C compilers      #  look for possible C compilers
328      tmp="$MITGCM_CC $CC gcc c89 cc c99 mpicc"      tmp="$MITGCM_CC $CC gcc c89 cc c99 mpicc icc"
329      p_CC=      p_CC=
330      for c in $tmp ; do      for c in $tmp ; do
331          rm -f ./genmake_hello.c  ./genmake_hello          rm -f ./genmake_hello.c  ./genmake_hello
# Line 364  EOF Line 364  EOF
364    
365      #================================================================      #================================================================
366      #  look for possible FORTRAN compilers      #  look for possible FORTRAN compilers
367      tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc f90 f95 mpif77 mpf77 mpxlf95 gfortran"      tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc ifort f90 f95 mpif77 mpf77 mpxlf95 gfortran g95"
368      p_FC=      p_FC=
369      for c in $tmp ; do      for c in $tmp ; do
370          rm -f ./hello.f ./hello          rm -f ./hello.f ./hello
# Line 480  get_pdepend_list()  { Line 480  get_pdepend_list()  {
480      #  strip the comments and then convert the dependency file into      #  strip the comments and then convert the dependency file into
481      #  two arrays: PNAME, DNAME      #  two arrays: PNAME, DNAME
482      cat $1 | sed -e 's/#.*$//g' \      cat $1 | sed -e 's/#.*$//g' \
483          | $AWK 'BEGIN{nn=0;} (NF>0){ for(i=2;i<=NF;i++){nn++; print "PNAME["nn"]="$1"\nDNAME["nn"]="$i} }' \          | $AWK 'BEGIN{nn=-1;} (NF>0){ for(i=2;i<=NF;i++){nn++; print "PNAME_"nn"="$1"\nDNAME_"nn"="$i}} END{print "nname="nn}' \
484          > ./.pd_tmp          > ./.pd_tmp
485        RETVAL=$?
486        if test ! "x${RETVAL}" = x0 ; then
487          echo "Error: unable to parse package dependencies -- please check PDEPEND=\"$1\""
488          exit 1
489        fi
490      . ./.pd_tmp      . ./.pd_tmp
491      rm -f ./.pd_tmp      rm -f ./.pd_tmp
492    
     printf "PNAME = "${}  
493  }  }
494    
495    
# Line 519  Usage: "$0" [OPTIONS] Line 523  Usage: "$0" [OPTIONS]
523        -pdefault=NAME | --pdefault=NAME        -pdefault=NAME | --pdefault=NAME
524            Get the default package list from "NAME".            Get the default package list from "NAME".
525    
526        -bash NAME
527              Explicitly specify the Bourne or BASH shell to use
528    
529      -make NAME | -m NAME      -make NAME | -m NAME
530        --make=NAME | -m=NAME        --make=NAME | -m=NAME
531            Use "NAME" for the MAKE program. The default is "make" but            Use "NAME" for the MAKE program. The default is "make" but
# Line 578  Usage: "$0" [OPTIONS] Line 585  Usage: "$0" [OPTIONS]
585            *only* works if it is supported by the OPTFILE that            *only* works if it is supported by the OPTFILE that
586            is being used.            is being used.
587    
588        -use_real4 | -use_r4 | -ur4 | --use_real4 | --use_r4 | --ur4
589              Use "real*4" type for _RS variable (#undef REAL4_IS_SLOW)
590              *only* works if CPP_EEOPTIONS.h allows this.
591    
592      -ignoretime | -ignore_time | --ignoretime | --ignore_time      -ignoretime | -ignore_time | --ignoretime | --ignore_time
593            Ignore all the "wall clock" routines entirely.  This will            Ignore all the "wall clock" routines entirely.  This will
594            not in any way hurt the model results -- it simply means            not in any way hurt the model results -- it simply means
# Line 601  Usage: "$0" [OPTIONS] Line 612  Usage: "$0" [OPTIONS]
612    
613      -gsl | --gsl      -gsl | --gsl
614            Use GSL to control floating point rounding and precision            Use GSL to control floating point rounding and precision
615        -devel | --devel
616              Add additional warning and debugging flags for development
617    
618      -mpi | --mpi      -mpi | --mpi
619            Include MPI header files and link to MPI libraries            Include MPI header files and link to MPI libraries
# Line 609  Usage: "$0" [OPTIONS] Line 622  Usage: "$0" [OPTIONS]
622            set to PATH. i.e. Include files from \$PATH/include, link to libraries            set to PATH. i.e. Include files from \$PATH/include, link to libraries
623            from \$PATH/lib and use binaries from \$PATH/bin.            from \$PATH/lib and use binaries from \$PATH/bin.
624    
625        -omp | --omp
626              Activate OpenMP code + use Compiler option OMPFLAG
627        -omp=OMPFLAG | --omp=OMPFLAG
628              Activate OpenMP code + use Compiler option OMPFLAG
629    
630      -es | --es | -embed-source | --embed-source      -es | --es | -embed-source | --embed-source
631            Embed a tarball containing the full source code            Embed a tarball containing the full source code
632            (including the Makefile, etc.) used to build the            (including the Makefile, etc.) used to build the
633            executable [off by default]            executable [off by default]
634    
     -bash NAME  
           Explicitly specify the Bourne or BASH shell to use  
   
635    While it is most often a single word, the "NAME" variables specified    While it is most often a single word, the "NAME" variables specified
636    above can in many cases be a space-delimited string such as:    above can in many cases be a space-delimited string such as:
637    
# Line 628  Usage: "$0" [OPTIONS] Line 643  Usage: "$0" [OPTIONS]
643    
644    For more detailed genmake documentation, please see:    For more detailed genmake documentation, please see:
645    
646      http://mitgcm.org/devel_HOWTO/      http://mitgcm.org/public/devel_HOWTO/
647    
648  EOF  EOF
649    
# Line 744  void FC_NAMEMANGLE(cloc) ( double *curti Line 759  void FC_NAMEMANGLE(cloc) ( double *curti
759   *curtim = *curtim/1.E6;   *curtim = *curtim/1.E6;
760  }  }
761  EOF  EOF
762      make genmake_tc_1.o >> genmake_warnings 2>&1      COMM="$CC $CFLAGS -c genmake_tc_1.c"
763        echo $COMM >> genmake_warnings
764        $COMM >> genmake_warnings 2>&1
765      RET_C=$?      RET_C=$?
766      cat <<EOF > genmake_tc_2.$FS      cat <<EOF > genmake_tc_2.$FS
767        program hello        program hello
# Line 754  EOF Line 771  EOF
771        print *," HELLO WORLD", wtime        print *," HELLO WORLD", wtime
772        end        end
773  EOF  EOF
774      $FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o >> genmake_warnings 2>&1      COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o"
775        echo $COMM >> genmake_warnings
776        $COMM >> genmake_warnings 2>&1
777      RET_F=$?      RET_F=$?
778      test -x ./genmake_tc  &&  ./genmake_tc >> genmake_warnings 2>&1      test -x ./genmake_tc  &&  ./genmake_tc >> genmake_warnings 2>&1
779      RETVAL=$?      RETVAL=$?
# Line 801  void FC_NAMEMANGLE(sigreg) (int * aip) Line 820  void FC_NAMEMANGLE(sigreg) (int * aip)
820      return;      return;
821  }  }
822  EOF  EOF
823      make genmake_tc_1.o >> genmake_warnings 2>&1      COMM="$CC $CFLAGS -c genmake_tc_1.c"
824        echo $COMM >> genmake_warnings
825        $COMM >> genmake_warnings 2>&1
826      RET_C=$?      RET_C=$?
827      cat <<EOF > genmake_tc_2.$FS      cat <<EOF > genmake_tc_2.$FS
828        program hello        program hello
# Line 849  void FC_NAMEMANGLE(setrlstk) () Line 870  void FC_NAMEMANGLE(setrlstk) ()
870      return;      return;
871  }  }
872  EOF  EOF
873      make genmake_tc_1.o >> genmake_warnings 2>&1      COMM="$CC $CFLAGS -c genmake_tc_1.c"
874        echo $COMM >> genmake_warnings
875        $COMM >> genmake_warnings 2>&1
876      RET_C=$?      RET_C=$?
877      cat <<EOF > genmake_tc_2.$FS      cat <<EOF > genmake_tc_2.$FS
878        program hello        program hello
# Line 893  void FC_NAMEMANGLE(tfsize) ( int *nbyte Line 916  void FC_NAMEMANGLE(tfsize) ( int *nbyte
916          *nbyte = -1;          *nbyte = -1;
917  }  }
918  EOF  EOF
919      make genmake_tc_1.o >> genmake_tc.log 2>&1      COMM="$CC $CFLAGS -c genmake_tc_1.c"
920        echo $COMM >> genmake_warnings
921        $COMM >> genmake_tc.log 2>&1
922      RET_C=$?      RET_C=$?
923      cat <<EOF > genmake_tc_2.$FS      cat <<EOF > genmake_tc_2.$FS
924        program hello        program hello
# Line 946  EOF Line 971  EOF
971      RET_CPP=f      RET_CPP=f
972      COMM="cat genmake_tnc.F | $CPP $DEFINES $INCLUDES"      COMM="cat genmake_tnc.F | $CPP $DEFINES $INCLUDES"
973      echo "$COMM" >> genmake_tnc.log      echo "$COMM" >> genmake_tnc.log
974      $COMM > genmake_tnc.$FS 2>/dev/null  &&  RET_CPP=t      eval $COMM > genmake_tnc.$FS 2>/dev/null  &&  RET_CPP=t
975      if test "x$RET_CPP" = xf ; then      if test "x$RET_CPP" = xf ; then
976          echo "  WARNING: CPP failed to pre-process the netcdf test." \          echo "  WARNING: CPP failed to pre-process the netcdf test." \
977              >> genmake_tnc.log              >> genmake_tnc.log
# Line 954  EOF Line 979  EOF
979              >> genmake_tnc.log              >> genmake_tnc.log
980      fi      fi
981      echo "$FC $FFLAGS $FOPTIM -c genmake_tnc.$FS  \ " >> genmake_tnc.log      echo "$FC $FFLAGS $FOPTIM -c genmake_tnc.$FS  \ " >> genmake_tnc.log
982      echo "  &&  $LINK -o genmake_tnc.o $LIBS" >> genmake_tnc.log      echo "  &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc.o $LIBS" >> genmake_tnc.log
983      $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \      $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
984          &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS >> genmake_tnc.log 2>&1          &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS >> genmake_tnc.log 2>&1
985      RET_COMPILE=$?      RET_COMPILE=$?
986      cat genmake_tnc.log >> genmake_warnings      cat genmake_tnc.log >> genmake_warnings
987    
# Line 974  EOF Line 999  EOF
999          echo "try again with added '-lnetcdf'" > genmake_tnc.log          echo "try again with added '-lnetcdf'" > genmake_tnc.log
1000          echo "cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS \ " >> genmake_tnc.log          echo "cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS \ " >> genmake_tnc.log
1001          echo " &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log          echo " &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log
1002          echo " &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf" >> genmake_tnc.log          echo " &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf" >> genmake_tnc.log
1003          cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS 2>/dev/null  \          cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS 2>/dev/null  \
1004              &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \              &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
1005              &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf >> genmake_tnc.log 2>&1              &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf >> genmake_tnc.log 2>&1
1006          RET_COMPILE=$?          RET_COMPILE=$?
1007          cat genmake_tnc.log >> genmake_warnings          cat genmake_tnc.log >> genmake_warnings
1008          if test "x$RET_COMPILE" = x0 ; then          if test "x$RET_COMPILE" = x0 ; then
1009              LIBS="$LIBS -lnetcdf"              LIBS="$LIBS -lnetcdf"
1010              HAVE_NETCDF=t              HAVE_NETCDF=t
1011            else
1012            # try again with "-lnetcdff" added to the libs
1013                echo "try again with added '-lnetcdff -lnetcdf'" > genmake_tnc.log
1014                echo "cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS \ " >> genmake_tnc.log
1015                echo " &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log
1016                echo " &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf" >> genmake_tnc.log
1017                cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS 2>/dev/null  \
1018                    &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
1019                    &&  $LINK $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.o $LIBS -lnetcdff -lnetcdf >> genmake_tnc.log 2>&1
1020                RET_COMPILE=$?
1021                cat genmake_tnc.log >> genmake_warnings
1022                if test "x$RET_COMPILE" = x0 ; then
1023                    LIBS="$LIBS -lnetcdff -lnetcdf"
1024                    HAVE_NETCDF=t
1025                fi
1026          fi          fi
1027      fi      fi
1028      rm -f genmake_tnc*      rm -f genmake_tnc*
# Line 1018  OPTFILE= Line 1058  OPTFILE=
1058  INCLUDES="-I. $INCLUDES"  INCLUDES="-I. $INCLUDES"
1059  FFLAGS=  FFLAGS=
1060  FOPTIM=  FOPTIM=
1061    FEXTRAFLAGS=
1062    USE_EXTENDED_SRC=
1063    EXTENDED_SRC_FLAG=
1064  CFLAGS=  CFLAGS=
1065  KFLAGS1=  KFLAGS1=
1066  KFLAGS2=  KFLAGS2=
# Line 1028  NOOPTFILES= Line 1071  NOOPTFILES=
1071  NOOPTFLAGS=  NOOPTFLAGS=
1072  MPI=  MPI=
1073  MPIPATH=  MPIPATH=
1074    OMP=
1075    OMPFLAG=
1076    USE_R4=
1077  TS=  TS=
1078  PAPIS=  PAPIS=
1079  PCLS=  PCLS=
# Line 1036  PAPI= Line 1082  PAPI=
1082  PCL=  PCL=
1083  HPMT=  HPMT=
1084  GSL=  GSL=
1085    DEVEL=
1086  HAVE_TEST_L=  HAVE_TEST_L=
1087    
1088  # DEFINES checked by test compilation or command-line  # DEFINES checked by test compilation or command-line
# Line 1094  TAMC_EXTRA= Line 1141  TAMC_EXTRA=
1141    
1142  #  The following state can be set directly by command-line switches  #  The following state can be set directly by command-line switches
1143  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"
1144  gm_s2="FC CPP IEEE TS PAPIS PCLS PAPI PCL HPMT GSL MPI JAM DUMPSTATE STANDARDDIRS"  gm_s2="FC IEEE USE_R4 TS PAPIS PCLS PAPI PCL HPMT GSL DEVEL MPI OMP DUMPSTATE STANDARDDIRS"
1145    
1146  #  The following state is not directly set by command-line switches  #  The following state is not directly set by command-line switches
1147  gm_s3="LN S64 KPP LINK PACKAGES MAKEDEPEND PDEPEND PDEFAULT INCLUDES FFLAGS FOPTIM "  gm_s3="LN S64 KPP LINK PACKAGES MAKEDEPEND PDEPEND PDEFAULT INCLUDES FFLAGS FOPTIM FEXTRAFLAGS"
1148  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"
1149  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOST THISUSER THISDATE THISVER MACHINE"  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOST THISUSER THISDATE THISVER MACHINE"
1150  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"
# Line 1124  EOF Line 1171  EOF
1171    
1172  echo "===  Processing options files and arguments  ==="  echo "===  Processing options files and arguments  ==="
1173  gm_local="genmake_local"  gm_local="genmake_local"
 for i in . $MODS ; do  
     if test -r $i/$gm_local ; then  
         . $i/$gm_local  
         break  
     fi  
 done  
1174  printf "  getting local config information:  "  printf "  getting local config information:  "
1175  if test -f $gm_local ; then  if test -f $gm_local ; then
1176      echo "using $gm_local"      echo "using $gm_local"
# Line 1141  else Line 1182  else
1182  fi  fi
1183    
1184  #echo "$0::$1:$2:$3:$4:$5:$6:$7:"  #echo "$0::$1:$2:$3:$4:$5:$6:$7:"
 #OPTIONS=  
 #n=0  
 #for i ; do  
 #   echo "$i  $n"  
 #   setvar="OPTIONS[$n]='$i'"  
 #   #  echo "  $setvar"  
 #   eval "$setvar"  
 #   n=$(( $n + 1 ))  
 #done  
1185  #parse_options  #parse_options
1186  ac_prev=  ac_prev=
1187  for ac_option in "$@" ; do  for ac_option in "$@" ; do
# Line 1274  for ac_option in "$@" ; do Line 1306  for ac_option in "$@" ; do
1306          -noieee | --noieee)          -noieee | --noieee)
1307              IEEE= ;;              IEEE= ;;
1308    
1309            -use_real4 | -use_r4 | -ur4 | --use_real4 | --use_r4 | --ur4 )
1310                USE_R4=true ;;
1311    
1312          -ts | --ts)          -ts | --ts)
1313              TS=true ;;              TS=true ;;
1314          -papis | --papis)          -papis | --papis)
# Line 1292  for ac_option in "$@" ; do Line 1327  for ac_option in "$@" ; do
1327          -gsl | --gsl)          -gsl | --gsl)
1328              GSL=true ;;              GSL=true ;;
1329    
1330            -devel | --devel)
1331                DEVEL=true ;;
1332    
1333          -mpi | --mpi)          -mpi | --mpi)
1334              MPI=true ;;              MPI=true ;;
1335          -mpi=* | --mpi=*)          -mpi=* | --mpi=*)
1336              MPIPATH=$ac_optarg              MPIPATH=$ac_optarg
1337              MPI=true ;;              MPI=true ;;
1338                    
1339  #       -jam | --jam)          -omp | --omp)
1340  #           JAM=1 ;;              OMP=true ;;
1341  #       -nojam | --nojam)          -omp=* | --omp=*)
1342  #           JAM=0 ;;              OMPFLAG=$ac_optarg
1343                OMP=true ;;
1344                    
1345          -ds | --ds)          -ds | --ds)
1346              DUMPSTATE=t ;;              DUMPSTATE=t ;;
# Line 1340  done Line 1379  done
1379  if test -f ./.genmakerc ; then  if test -f ./.genmakerc ; then
1380      echo      echo
1381      echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""      echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""
1382      echo "  file.  This file format is no longer supported.  Please see:"      echo "  file.  This file format is no longer supported.  For directions on"
1383      echo      echo "  how to setup and use the new \"genmake2\" script, please see:"
1384      echo "    http://mitgcm.org/devel_HOWTO/"      echo "    http://mitgcm.org/devel_HOWTO/"
1385      echo      echo "  and send an email to MITgcm-support@mitgcm.org if you need help."
1386      echo "  for directions on how to setup and use the new \"genmake2\" input"      echo "WARNING: ignore \"./.genmakerc\" and continue."
     echo "  files and send an email to MITgcm-support@mitgcm.org if you want help."  
1387      echo      echo
1388  fi  fi
1389    
1390  #  Find the MITgcm ${ROOTDIR}  #  Find the MITgcm ${ROOTDIR}
1391  if test "x${ROOTDIR}" = x ; then  if test "x${ROOTDIR}" = x ; then
1392      tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'`      tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'`
1393      if test "x$tmp" = "xbin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then      if test "x$tmp" = "xbin" -a -d ../model -a -d ../eesupp -a -d ../pkg ; then
1394          ROOTDIR=".."          ROOTDIR=".."
1395      else      else
1396          for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do          for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do
# Line 1377  if test ! -d ${ROOTDIR} ; then Line 1415  if test ! -d ${ROOTDIR} ; then
1415  fi  fi
1416    
1417  #  Find the MITgcm ${THISVER}  #  Find the MITgcm ${THISVER}
1418  if test -f "${ROOTDIR}/doc/tag-index" ; then  version_file="${ROOTDIR}/doc/tag-index"
1419      THISVER=`grep '^checkpoint' ${ROOTDIR}/doc/tag-index | head -1`  if test -f $version_file ; then
1420        THISVER=`$AWK '/^checkpoint/{print $1; exit}' $version_file`
1421    #-  remove ./BUILD_INFO.h file if older than version_file
1422        if test -f ./BUILD_INFO.h -a ./BUILD_INFO.h -ot $version_file ; then
1423            echo "  remove ./BUILD_INFO.h (older than ${version_file})"
1424            rm -f ./BUILD_INFO.h
1425        fi
1426  fi  fi
1427    
1428  if test "x$MAKEFILE" = x ; then  if test "x$MAKEFILE" = x ; then
# Line 1534  if test ! "x$MPI" = x ; then Line 1578  if test ! "x$MPI" = x ; then
1578        echo "  Turning on MPI cpp macros"        echo "  Turning on MPI cpp macros"
1579        DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"        DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"
1580  fi  fi
1581    if test ! "x$OMP" = x ; then
1582          echo "  Add OMPFLAG and turn on OpenMP cpp macros"
1583          FFLAGS="$FFLAGS $OMPFLAG"
1584          F90FLAGS="$F90FLAGS $OMPFLAG"
1585          DEFINES="$DEFINES -DUSE_OMP_THREADING"
1586    fi
1587    
1588    if test ! "x$USE_R4" = x ; then
1589          echo "  Turning on LET_RS_BE_REAL4 cpp flag"
1590          DEFINES="$DEFINES -DLET_RS_BE_REAL4"
1591    fi
1592    
1593  if test ! "x$TS" = x ; then  if test ! "x$TS" = x ; then
1594        echo "  Turning on timing per timestep"        echo "  Turning on timing per timestep"
# Line 1542  if test ! "x$TS" = x ; then Line 1597  if test ! "x$TS" = x ; then
1597        else        else
1598              DEFINES="$DEFINES -DTIME_PER_TIMESTEP"              DEFINES="$DEFINES -DTIME_PER_TIMESTEP"
1599        fi        fi
1600          PACKAGES="$PACKAGES showflops"
1601  fi  fi
1602  if test ! "x$PAPIS" = x ; then  if test ! "x$PAPIS" = x ; then
1603        echo "  Turning on PAPI flop summary per timestep"        echo "  Turning on PAPI flop summary per timestep"
# Line 1553  if test ! "x$PAPIS" = x ; then Line 1609  if test ! "x$PAPIS" = x ; then
1609        fi        fi
1610        INCLUDES="$INCLUDES $PAPIINC"        INCLUDES="$INCLUDES $PAPIINC"
1611        LIBS="$LIBS $PAPILIB"        LIBS="$LIBS $PAPILIB"
1612          PACKAGES="$PACKAGES showflops"
1613  fi  fi
1614  if test ! "x$PCLS" = x ; then  if test ! "x$PCLS" = x ; then
1615        echo "  Turning on PCL counter summary per timestep"        echo "  Turning on PCL counter summary per timestep"
# Line 1564  if test ! "x$PCLS" = x ; then Line 1621  if test ! "x$PCLS" = x ; then
1621        fi        fi
1622        INCLUDES="$INCLUDES $PCLINC"        INCLUDES="$INCLUDES $PCLINC"
1623        LIBS="$LIBS $PCLLIB"        LIBS="$LIBS $PCLLIB"
1624          PACKAGES="$PACKAGES showflops"
1625  fi  fi
1626  if test ! "x$PAPI" = x ; then  if test ! "x$PAPI" = x ; then
1627        if test ! "x$PAPIS" = x ; then        if test ! "x$PAPIS" = x ; then
# Line 1612  if test ! "x$GSL" = x ; then Line 1670  if test ! "x$GSL" = x ; then
1670        INCLUDES="$INCLUDES $GSLINC"        INCLUDES="$INCLUDES $GSLINC"
1671        LIBS="$LIBS $GSLLIB"        LIBS="$LIBS $GSLLIB"
1672  fi  fi
1673    #- if USE_EXTENDED_SRC is set, add EXTENDED_SRC_FLAG to FFLAGS :
1674    if test ! "x$USE_EXTENDED_SRC" = x ; then
1675          FFLAGS="$FFLAGS $EXTENDED_SRC_FLAG"
1676          F90FIXEDFORMAT="$F90FIXEDFORMAT $EXTENDED_SRC_FLAG"
1677    fi
1678    
1679  printf "\n===  Checking system libraries  ===\n"  printf "\n===  Checking system libraries  ===\n"
1680  printf "  Do we have the system() command using $FC...  "  printf "  Do we have the system() command using $FC...  "
# Line 1734  fi Line 1797  fi
1797    
1798    
1799  printf "\n===  Setting defaults  ===\n"  printf "\n===  Setting defaults  ===\n"
1800  printf "  Adding MODS directories:  "  printf "  Adding MODS directories: "
1801  for d in $MODS ; do  for d in $MODS ; do
1802      if test ! -d $d ; then      if test ! -d $d ; then
1803          echo          echo
1804          echo "Error: MODS directory \"$d\" not found!"          echo "Error: MODS directory \"$d\" not found!"
1805          exit 1          exit 1
1806      else      else
1807          printf " $d"          printf "$d "
1808          SOURCEDIRS="$SOURCEDIRS $d"          SOURCEDIRS="$SOURCEDIRS $d"
1809          INCLUDEDIRS="$INCLUDEDIRS $d"          INCLUDEDIRS="$INCLUDEDIRS $d"
1810      fi      fi
# Line 1802  THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSD Line 1865  THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSD
1865    
1866  EXECUTABLE=${EXECUTABLE:-mitgcmuv}  EXECUTABLE=${EXECUTABLE:-mitgcmuv}
1867    
1868    #  Set Standard Code Directories:
1869    if test "x$STANDARDDIRS" = xUSE_THE_DEFAULT ; then
1870        STANDARDDIRS="eesupp model"
1871    fi
1872    #  if model in Standard-Code-Dir, add eesupp (needed to compile model)
1873    echo " $STANDARDDIRS " | grep ' model ' > /dev/null 2>&1
1874    ckM=$?
1875    echo " $STANDARDDIRS " | grep ' eesupp ' > /dev/null 2>&1
1876    ckE=$?
1877    if test $ckM = 0 -a $ckE = 1 ; then
1878        STANDARDDIRS="$STANDARDDIRS eesupp"
1879    fi
1880    
1881  #  We have a special set of source files in eesupp/src which are  #  We have a special set of source files in eesupp/src which are
1882  #  generated from some template source files. We'll make them first so  #  generated from some template source files. We'll make them first so
1883  #  they appear as regular source code  #  they appear as regular source code
# Line 1818  if test -r $ROOTDIR"/eesupp/src/Makefile Line 1894  if test -r $ROOTDIR"/eesupp/src/Makefile
1894      fi      fi
1895  fi  fi
1896    
1897  #same for exch2  #same for pkg/exch2 and pkg/regrid
1898  if test -r $ROOTDIR"/pkg/exch2/Makefile" ; then  for pdir in exch2 regrid ; do
1899      echo "  Making source files in exch2 from  templates"      if test -r $ROOTDIR"/pkg/${pdir}/Makefile" ; then
1900      ( cd $ROOTDIR"/pkg/exch2/" && $MAKE ) > make_exch2.errors 2>&1          echo "  Making source files in pkg/${pdir} from templates"
1901      RETVAL=$?          ( cd $ROOTDIR"/pkg/"${pdir} && $MAKE ) > make_${pdir}.errors 2>&1
1902      if test "x${RETVAL}" = x0 ; then          RETVAL=$?
1903          rm -f make_exch2.errors          if test "x${RETVAL}" = x0 ; then
1904      else              rm -f make_${pdir}.errors
1905          echo "Error: problem encountered while building source files in exch2:"          else
1906          cat make_exch2.errors 1>&2              echo "Error: problem encountered while building source files in pkg/${pdir}:"
1907          exit 1              cat make_${pdir}.errors 1>&2
1908                exit 1
1909            fi
1910      fi      fi
1911  fi  done
1912    
1913  printf "\n===  Determining package settings  ===\n"  printf "\n===  Determining package settings  ===\n"
1914  if  test "x${PDEPEND}" = x ; then  if  test "x${PDEPEND}" = x ; then
# Line 1850  fi Line 1928  fi
1928  echo "  getting package dependency info from  $PDEPEND"  echo "  getting package dependency info from  $PDEPEND"
1929  #  Strip the comments and then convert the dependency file into  #  Strip the comments and then convert the dependency file into
1930  #  two arrays: PNAME, DNAME  #  two arrays: PNAME, DNAME
1931  cat $PDEPEND | sed -e 's/#.*$//g' \  get_pdepend_list $PDEPEND
     | $AWK 'BEGIN{nn=-1;} (NF>0){ for(i=2;i<=NF;i++){nn++; print "PNAME_"nn"="$1"\nDNAME_"nn"="$i}} END{print "nname="nn}' \  
     > ./.pd_tmp  
 RETVAL=$?  
 if test ! "x${RETVAL}" = x0 ; then  
     echo "Error: unable to parse package dependencies -- please check PDEPEND=\"$PDEPEND\""  
     exit 1  
 fi  
 . ./.pd_tmp  
 rm -f ./.pd_tmp  
1932    
1933  #  Search for default packages.  Note that a "$ROOTDIR/pkg/pkg_groups"  #  Search for default packages.  Note that a "$ROOTDIR/pkg/pkg_groups"
1934  #  file should eventually be added so that, for convenience, one can  #  file has been added so that, for convenience, one can specify
1935  #  specify groups of packages using names like "ocean" and "atmosphere".  #  groups of packages using names like "ocean" and "atmosphere".
1936  echo "  checking default package list:  "  echo "  checking default package list:  "
1937  if test "x${PDEFAULT}" = x ; then  if test "x${PDEFAULT}" = x ; then
1938      for i in "." $MODS ; do      for i in "." $MODS ; do
# Line 1894  else Line 1963  else
1963          for i in $def ; do          for i in $def ; do
1964              PACKAGES="$PACKAGES $i"              PACKAGES="$PACKAGES $i"
1965          done          done
1966          echo "    before group expansion packages are: $PACKAGES"          echo "    before group expansion packages are:$PACKAGES"
1967          RET=1          RET=1
1968          while test $RET = 1 ; do expand_pkg_groups; RET=$?; done          while test $RET = 1 ; do expand_pkg_groups; RET=$?; done
1969          echo "    after group expansion packages are:  $PACKAGES"          echo "    after group expansion packages are: $PACKAGES"
1970      fi      fi
1971  fi  fi
1972    
1973  echo "  applying DISABLE settings"  echo "  applying DISABLE settings"
1974    echo "" > ./.tmp_pack
1975  for i in $PACKAGES ; do  for i in $PACKAGES ; do
1976      echo $i >> ./.tmp_pack      echo $i >> ./.tmp_pack
1977  done  done
# Line 1939  for i in `grep -v "-" ./.tmp_pack | sort Line 2009  for i in `grep -v "-" ./.tmp_pack | sort
2009      PACKAGES="$PACKAGES $i"      PACKAGES="$PACKAGES $i"
2010  done  done
2011  rm -f ./.tmp_pack  rm -f ./.tmp_pack
2012  echo "    packages are:  $PACKAGES"  echo "    packages are: $PACKAGES"
2013    
2014  #  Check availability of NetCDF and then either build the MNC template  #  Check for package MNC: if NetCDF is available, then build the MNC
2015  #  files or delete mnc from the list of available packages.  #  template files ; otherwise, delete mnc from the list of packages.
2016  echo $PACKAGES | grep ' mnc ' > /dev/null 2>&1  echo " $PACKAGES " | grep ' mnc ' > /dev/null 2>&1
2017  RETVAL=$?  RETVAL=$?
2018  if test "x$RETVAL" = x0 ; then  if test "x$RETVAL" = x0 ; then
2019      if test "x$HAVE_NETCDF" != xt ; then      if test "x$HAVE_NETCDF" != xt ; then
# Line 1976  EOF Line 2046  EOF
2046      fi      fi
2047  fi  fi
2048    
2049    #  Check for package PROFILES: if NetCDF is not available,
2050    #  then delete profiles from the list of available packages.
2051    echo " $PACKAGES " | grep ' profiles ' > /dev/null 2>&1
2052    RETVAL=$?
2053    if test "x$RETVAL" = x0 ; then
2054        if test "x$HAVE_NETCDF" != xt ; then
2055            cat <<EOF
2056    
2057    *********************************************************************
2058    WARNING: the "profiles" package was enabled but tests failed to
2059      compile NetCDF applications.  Please check that:
2060    
2061      1) NetCDF is correctly installed for this compiler and
2062      2) the LIBS variable (within the "optfile") specifies the correct
2063           NetCDF library to link against.
2064    
2065      Due to this failure, the "profiles" package is now DISABLED.
2066    *********************************************************************
2067    
2068    EOF
2069            PACKAGES=`echo $PACKAGES | sed -e 's/profiles//g'`
2070            DISABLE="$DISABLE profiles"
2071        fi
2072    fi
2073    
2074  echo "  applying package dependency rules"  echo "  applying package dependency rules"
2075  ck=  ck=
2076  while test "x$ck" != xtt ; do  while test "x$ck" != xtt ; do
2077      i=0      i=0
2078      # rtot=${#PNAME[@]}      # rtot=${#PNAME[@]}
2079      rtot=$nname      rtot=$nname
2080      while test $i -lt $rtot ; do      while test $i -le $rtot ; do
2081    
2082          #  Is $pname in the current $PACKAGES list?          #  Is $pname in the current $PACKAGES list?
2083          #  pname=${PNAME[$i]}          #  pname=${PNAME[$i]}
# Line 1994  while test "x$ck" != xtt ; do Line 2089  while test "x$ck" != xtt ; do
2089                  pin="t"                  pin="t"
2090              fi              fi
2091          done          done
2092            #  or in the current $STANDARDDIRS list?
2093            for p in $STANDARDDIRS ; do
2094                if test "x$p" = "x$pname" ; then pin="t" ; fi
2095            done
2096    
2097          #  Is the DNAME entry a (+) or (-) rule ?          #  Is the DNAME entry a (+) or (-) rule ?
2098          tmp="dname=\"\$DNAME_$i\""          tmp="dname=\"\$DNAME_$i\""
# Line 2016  while test "x$ck" != xtt ; do Line 2115  while test "x$ck" != xtt ; do
2115    
2116          #  Do we need to add $dname according to the dependency rules?          #  Do we need to add $dname according to the dependency rules?
2117          if test "x$pin" = xt -a "x$plus" = "x+" -a "x$din" = xf ; then          if test "x$pin" = xt -a "x$plus" = "x+" -a "x$din" = xf ; then
2118                #echo "   " $pname ": need to add :" $dname
2119              in_dis="f"              in_dis="f"
2120              for dis in $DISABLE ; do              for dis in $DISABLE ; do
2121                  if test "x$dis" = "x$dname" ; then                  if test "x$dis" = "x$dname" ; then
# Line 2045  while test "x$ck" != xtt ; do Line 2145  while test "x$ck" != xtt ; do
2145      done      done
2146      ck=$ck"t"      ck=$ck"t"
2147  done  done
2148  echo "    packages are:  $PACKAGES"  echo "    packages are: $PACKAGES"
2149  for i in $PACKAGES ; do  for i in $PACKAGES ; do
2150      adr="$ROOTDIR/pkg/$i"      adr="$ROOTDIR/pkg/$i"
2151      if test -d $adr ; then      if test -d $adr ; then
# Line 2101  for i in $PACKAGES ; do Line 2201  for i in $PACKAGES ; do
2201    
2202  done  done
2203    
2204  echo "  Adding STANDARDDIRS"  echo "  Adding STANDARDDIRS='$STANDARDDIRS'"
2205  BUILDDIR=${BUILDDIR:-.}  BUILDDIR=${BUILDDIR:-.}
 if test "x$STANDARDDIRS" = xUSE_THE_DEFAULT ; then  
     STANDARDDIRS="eesupp model"  
 fi  
2206  if test "x$STANDARDDIRS" != x ; then  if test "x$STANDARDDIRS" != x ; then
2207      for d in $STANDARDDIRS ; do      for d in $STANDARDDIRS ; do
2208          adr="$ROOTDIR/$d/src"          adr="$ROOTDIR/$d/src"
# Line 2160  fi Line 2257  fi
2257    
2258  #  Here, we build the list of files to be "run through" the adjoint  #  Here, we build the list of files to be "run through" the adjoint
2259  #  compiler.  #  compiler.
2260  if test -f ./ad_files ; then  if test -f ./adSrcFiles.tmp ; then
2261      rm -f ./ad_files      rm -f ./adSrcFiles.tmp
2262  fi  fi
2263  echo "  Creating the list of files for the adjoint compiler."  echo "  Creating the list of files for the adjoint compiler."
2264  for i in $SOURCEDIRS ; do  for i in $SOURCEDIRS ; do
2265      list_files=`( cd $i && ls -1 *.list 2>/dev/null )`      list_files=`( cd $i && ls -1 *.list 2>/dev/null )`
2266      for j in $list_files ; do      for j in $list_files ; do
2267          cat $i/$j >> ad_files          cat $i/$j >> adSrcFiles.tmp
2268      done      done
2269  done  done
2270  if test ! "x"$FS = "x.f" ; then  if test ! "x"$FS = "x.f" ; then
2271      cat ad_files | sed -e "s/\.f/.$FS/g" > ad_files_f      cat adSrcFiles.tmp | sed -e "s/\.f/.$FS/g" > adSrcFiles.tmp_f
2272      mv -f ad_files_f ad_files      mv -f adSrcFiles.tmp_f adSrcFiles.tmp
2273  fi  fi
2274    
2275  echo  echo
# Line 2205  if test ! "x$DIVA" = x ; then Line 2302  if test ! "x$DIVA" = x ; then
2302          perl -i -pe 's/MPI_DISPLACEMENT_CURRENT=-1_8/MPI_DISPLACEMENT_CURRENT=-1/g' mpi_headers/mpif.h          perl -i -pe 's/MPI_DISPLACEMENT_CURRENT=-1_8/MPI_DISPLACEMENT_CURRENT=-1/g' mpi_headers/mpif.h
2303      else      else
2304          echo " We cannot create a copy of mpif.h!"          echo " We cannot create a copy of mpif.h!"
2305          exit -1  #       exit -1
2306      fi      fi
2307  fi  fi
2308    
# Line 2230  if test ! -r ".links.tmp/foo" ; then Line 2327  if test ! -r ".links.tmp/foo" ; then
2327      exit 1      exit 1
2328  fi  fi
2329  rm -f .links.tmp/foo  rm -f .links.tmp/foo
2330    
2331    if test "x$OPENAD" != x ; then
2332        OAD_DONT_COMPILE="/dev/null"
2333        OAD_DONT_TRANSFORM="/dev/null"
2334        OAD_KEEP_ORIGINAL="/dev/null"
2335        OAD_CB2M_FILES="/dev/null"
2336        echo "  looking for dontCompile file:  "
2337        for i in "." $MODS ; do
2338            if test -r $i"/dontCompile" ; then
2339                OAD_DONT_COMPILE=$i"/dontCompile"
2340                echo "     found $OAD_DONT_COMPILE"
2341                break
2342            fi
2343        done
2344        echo "  looking for dontTransform file:  "
2345        for i in "." $MODS ; do
2346            if test -r $i"/dontTransform" ; then
2347                OAD_DONT_TRANSFORM=$i"/dontTransform"
2348                echo "     found $OAD_DONT_TRANSFORM"
2349                break
2350            fi
2351        done
2352        echo "  looking for keepOriginal file:  "
2353        for i in "." $MODS ; do
2354            if test -r $i"/keepOriginal" ; then
2355                OAD_KEEP_ORIGINAL=$i"/keepOriginal"
2356                echo "     found $OAD_KEEP_ORIGINAL"
2357                break
2358            fi
2359        done
2360        echo "  looking for cb2mFiles:  "
2361        for i in "." $MODS ; do
2362            if test -r $i"/cb2mFiles" ; then
2363                OAD_CB2M_FILES=$i"/cb2mFiles"
2364                echo "     found $OAD_CB2M_FILES"
2365                break
2366            fi
2367        done
2368        echo "   OpenAD exceptions:  "
2369    fi
2370    
2371  echo "# This section creates symbolic links" > srclinks.tmp  echo "# This section creates symbolic links" > srclinks.tmp
2372  echo "" >> srclinks.tmp  echo "" >> srclinks.tmp
2373  printf 'SRCFILES = '    > srclist.inc  printf 'F77_SRC_FILES = ' > F77srclist.tmp
2374  printf 'CSRCFILES = '   > csrclist.inc  printf 'NON_AD_F77_SRC_FILES = ' > nonADF77srclist.tmp
2375  printf 'F90SRCFILES = ' > f90srclist.inc  printf 'C_SRC_FILES = '   > csrclist.tmp
2376  printf 'HEADERFILES = ' > hlist.inc  printf 'F90_SRC_FILES = ' > F90srclist.tmp
2377  printf 'AD_FLOW_FILES = ' > ad_flow_files.inc  printf 'H_SRC_FILES = '   > hsrclist.tmp
2378    printf 'AD_FLOW_FILES = ' > ad_flow_files.tmp
2379  alldirs="$SOURCEDIRS $INCLUDEDIRS ."  alldirs="$SOURCEDIRS $INCLUDEDIRS ."
2380  for d in $alldirs ; do  for d in $alldirs ; do
2381      deplist=      deplist=
2382      sfiles=`( cd $d; echo *.[h,c,F] *.flow )`      sfiles=`( cd $d; echo *.[h,c,F] *.flow )`
2383      sfiles=`( echo $sfiles; cd $d; echo *.F90 )`      sfiles=`( echo $sfiles; cd $d; echo *.F90 )`
2384        if test "x$OPENAD" != x ; then
2385            sfiles=`( echo $sfiles | grep -v _cb2m\. )`
2386        fi
2387      for sf in $sfiles ; do      for sf in $sfiles ; do
2388          if test ! -r ".links.tmp/$sf" ; then          if test ! -r ".links.tmp/$sf" ; then
2389              if test -f "$d/$sf" ; then              if test -f "$d/$sf" ; then
# Line 2276  for d in $alldirs ; do Line 2418  for d in $alldirs ; do
2418                  if test "x$ignore_f" = xf ; then                  if test "x$ignore_f" = xf ; then
2419                      extn=`echo $sf | $AWK -F. '{print $NF}'`                      extn=`echo $sf | $AWK -F. '{print $NF}'`
2420                      case $extn in                      case $extn in
2421                          F)                        F)
2422                              echo    " \\"  >> srclist.inc                          echo    " \\"  >> F77srclist.tmp
2423                              printf " $sf" >> srclist.inc                          printf " $sf" >> F77srclist.tmp
2424                              ;;                          if test "x$OPENAD" != x ; then
2425                          F90)                              basename=${sf%%.F}
2426                              echo    " \\"  >> f90srclist.inc                              isAD=`egrep ^$basename.f'[  ]*' adSrcFiles.tmp`
2427                              printf " $sf" >> f90srclist.inc                              if test -z "$isAD" ; then
2428                              ;;                                  toBeIgnored=`egrep ^$basename'[      ]*' ${OAD_DONT_COMPILE}`
2429                          c)                                  if test -z "$toBeIgnored" ; then
2430                              echo    " \\"  >> csrclist.inc                                      echo    " \\"  >> nonADF77srclist.tmp
2431                              printf " $sf" >> csrclist.inc                                      printf " $sf" >> nonADF77srclist.tmp
2432                              ;;                                  else
2433                          h)                                      echo "    not to be compiled   :  $sf"
2434                              echo    " \\"  >> hlist.inc                                  fi
2435                              printf " $sf" >> hlist.inc                              else # file is initially listed as an AD file we want to exclude it
2436                              ;;                                   # or we want to retain the untransformed version
2437                          flow)                                  notToBeTransformed=`egrep ^$basename'[      ]*' ${OAD_DONT_TRANSFORM}`
2438                              echo    " \\"  >> ad_flow_files.inc                                  untransformedVersionToBeKept=`egrep ^$basename'[      ]*' ${OAD_KEEP_ORIGINAL}`
2439                              printf " $sf" >> ad_flow_files.inc                                  if test -n "$notToBeTransformed"; then
2440                              ;;                                      echo "    not to be transformed:  $sf"
2441                      esac                                  fi
2442                  fi                                  if test -n "$untransformedVersionToBeKept" ; then
2443                                        echo "    original to be kept  :  $sf"
2444                                    fi    
2445                                    if test -n "$notToBeTransformed" -o -n "$untransformedVersionToBeKept" ; then
2446                                        echo    " \\"  >> nonADF77srclist.tmp
2447                                        printf " $sf" >> nonADF77srclist.tmp
2448                                    fi
2449                                fi
2450                            fi
2451                            ;;
2452                        F90)
2453                            echo    " \\"  >> F90srclist.tmp
2454                            printf " $sf" >> F90srclist.tmp
2455                            ;;
2456                        c)
2457                            echo    " \\"  >> csrclist.tmp
2458                            printf " $sf" >> csrclist.tmp
2459                            ;;
2460                        h)
2461                            echo    " \\"  >> hsrclist.tmp
2462                            printf " $sf" >> hsrclist.tmp
2463                            ;;
2464                        flow)
2465                            echo    " \\"  >> ad_flow_files.tmp
2466                            printf " $sf" >> ad_flow_files.tmp
2467                            ;;
2468                       esac
2469                    fi
2470              fi              fi
2471          fi          fi
2472      done      done
2473      if test "x$deplist" != x ; then      if test "x$deplist" != x ; then
2474          echo "" >> srclinks.tmp        if test "$d" != "." ; then
2475            echo "" >> srclinks.tmp
2476          echo "#  These files are linked from $d" >> srclinks.tmp          echo "#  These files are linked from $d" >> srclinks.tmp
2477          echo "$deplist :" >> srclinks.tmp          echo "$deplist :" >> srclinks.tmp
2478          printf "\t\$(LN) %s/\$@ \$@\n" $d >> srclinks.tmp  # We need to make sure that the link isn't already there.
2479    # This may happen when make thinks that a header file has to be "remade"
2480    # because a module it depends on has changed.  In this case we do nothing.
2481            printf "\tif [ ! -L \$@ ]; then \$(LN) %s/\$@ \$@; fi\n" $d >> srclinks.tmp
2482          fi
2483      fi      fi
2484  done  done
2485  rm -rf .links.tmp  rm -rf .links.tmp
2486  echo "" >> srclist.inc  echo "" >> F77srclist.tmp
2487  echo "" >> csrclist.inc  echo "" >> nonADF77srclist.tmp
2488  echo "" >> f90srclist.inc  echo "" >> csrclist.tmp
2489  echo "" >> hlist.inc  echo "" >> F90srclist.tmp
2490  echo "" >> ad_flow_files.inc  echo "" >> hsrclist.tmp
2491    echo "" >> ad_flow_files.tmp
2492    
2493    CMDLINE=$0
2494    for xx in "$@" ; do nw=`echo $xx | wc -w`
2495        if test $nw = '1' ; then CMDLINE="$CMDLINE $xx"
2496                            else CMDLINE="$CMDLINE '$xx'" ; fi
2497    done
2498    
2499  if test -f $MAKEFILE ; then  if test -f $MAKEFILE ; then
2500      mv -f $MAKEFILE "$MAKEFILE.bak"      mv -f $MAKEFILE "$MAKEFILE.old"
2501  fi  fi
2502  echo "  Writing makefile: $MAKEFILE"  echo "  Writing makefile: $MAKEFILE"
2503  echo "# Multithreaded + multi-processing makefile for:" > $MAKEFILE  echo "# Multithreaded + multi-processing makefile for:" > $MAKEFILE
# Line 2324  echo "#    $MACHINE" >> $MAKEFILE Line 2505  echo "#    $MACHINE" >> $MAKEFILE
2505  echo "# This makefile was generated automatically on" >> $MAKEFILE  echo "# This makefile was generated automatically on" >> $MAKEFILE
2506  echo "#    $THISDATE" >> $MAKEFILE  echo "#    $THISDATE" >> $MAKEFILE
2507  echo "# by the command:" >> $MAKEFILE  echo "# by the command:" >> $MAKEFILE
2508  echo "#    $0 $G2ARGS" >> $MAKEFILE  echo "#    $CMDLINE"  >> $MAKEFILE
2509  echo "# executed by:" >> $MAKEFILE  echo "# executed by:" >> $MAKEFILE
2510  echo "#    ${THISUSER}@${THISHOST}:${THISCWD}" >> $MAKEFILE  echo "#    ${THISUSER}@${THISHOST}:${THISCWD}" >> $MAKEFILE
2511    
# Line 2335  EXE_SVD=$EXECUTABLE"_svd" Line 2516  EXE_SVD=$EXECUTABLE"_svd"
2516  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2517  #  #
2518  # OPTFILE="$OPTFILE"  # OPTFILE="$OPTFILE"
2519  #  #
2520  # BUILDDIR     : Directory where object files are written  # BUILDDIR     : Directory where object files are written
2521  # SOURCEDIRS   : Directories containing the source (.F) files  # SOURCEDIRS   : Directories containing the source (.F) files
2522  # INCLUDEDIRS  : Directories containing the header-source (.h) files  # INCLUDEDIRS  : Directories containing the header-source (.h) files
# Line 2355  cat >>$MAKEFILE <<EOF Line 2536  cat >>$MAKEFILE <<EOF
2536  # LIBS         : Library flags /or/ additional optimization/debugging flags  # LIBS         : Library flags /or/ additional optimization/debugging flags
2537    
2538  ROOTDIR     = ${ROOTDIR}  ROOTDIR     = ${ROOTDIR}
2539  BUILDDIR    = ${BUILDDIR}    BUILDDIR    = ${BUILDDIR}
2540  SOURCEDIRS  = ${SOURCEDIRS}  SOURCEDIRS  = ${SOURCEDIRS}
2541  INCLUDEDIRS = ${INCLUDEDIRS}  INCLUDEDIRS = ${INCLUDEDIRS}
2542  EXEDIR      = ${EXEDIR}  EXEDIR      = ${EXEDIR}
# Line 2381  else Line 2562  else
2562      echo "EMBEDDED_FILES = " >>$MAKEFILE      echo "EMBEDDED_FILES = " >>$MAKEFILE
2563  fi  fi
2564    
 #  Note: figure out some way to add Hyades JAM libraries here  
2565  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2566  # Unix ln (link)  # Unix ln (link)
2567  LN = ${LN}  LN = ${LN}
# Line 2408  INCLUDES = ${INCLUDES} Line 2588  INCLUDES = ${INCLUDES}
2588  KFLAGS1 = ${KFLAGS1}  KFLAGS1 = ${KFLAGS1}
2589  KFLAGS2 = ${KFLAGS2}  KFLAGS2 = ${KFLAGS2}
2590  # Optim./debug for FC  # Optim./debug for FC
2591  FFLAGS = ${FFLAGS}  FFLAGS = ${FFLAGS} ${FEXTRAFLAGS}
2592  FOPTIM = ${FOPTIM}  FOPTIM = ${FOPTIM}
2593  # Optim./debug for FC  # Optim./debug for FC
2594  F90FLAGS = ${F90FLAGS}  F90FLAGS = ${F90FLAGS}
2595  F90OPTIM = ${F90OPTIM}  F90OPTIM = ${F90OPTIM}
2596    F90FIXEDFORMAT = ${F90FIXEDFORMAT}
2597  # Flags for CC  # Flags for CC
2598  CFLAGS = ${CFLAGS}  CFLAGS = ${CFLAGS}
2599  # Files that should not be optimized  # Files that should not be optimized
# Line 2425  MAKEFILE=${MAKEFILE} Line 2606  MAKEFILE=${MAKEFILE}
2606    
2607  EOF  EOF
2608    
2609  cat srclist.inc       >> $MAKEFILE  cat F77srclist.tmp      >> $MAKEFILE
2610  cat csrclist.inc      >> $MAKEFILE  cat nonADF77srclist.tmp >> $MAKEFILE
2611  cat f90srclist.inc    >> $MAKEFILE  cat csrclist.tmp        >> $MAKEFILE
2612  cat hlist.inc         >> $MAKEFILE  cat F90srclist.tmp      >> $MAKEFILE
2613  cat ad_flow_files.inc >> $MAKEFILE  cat hsrclist.tmp        >> $MAKEFILE
2614    cat ad_flow_files.tmp   >> $MAKEFILE
2615    
2616    rm -f F77srclist.tmp nonADF77srclist.tmp csrclist.tmp F90srclist.tmp hsrclist.tmp ad_flow_files.tmp
2617    
2618  echo >> $MAKEFILE  echo >> $MAKEFILE
2619  echo 'F77FILES =  $(SRCFILES:.F=.'$FS')'      >> $MAKEFILE  
2620  echo 'F90FILES =  $(F90SRCFILES:.F90=.'$FS90')' >> $MAKEFILE  # add definitions for preprocessed sources
2621  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE  # and note that not all systems allow case sensitive extensions
2622    # hence the $FS and $FS90 here.
2623    # for fixed format f90 files we use ff90 or FF90 resp
2624    # but these are not expected to be the original source files
2625    
2626    echo 'F77_PP_SRC_FILES = $(F77_SRC_FILES:.F=.'$FS')'      >> $MAKEFILE
2627    echo 'F90_PP_SRC_FILES = $(F90_SRC_FILES:.F90=.'$FS90')' >> $MAKEFILE
2628    echo 'OBJFILES= $(F77_SRC_FILES:.F=.o) $(C_SRC_FILES:.c=.o) $(F90_SRC_FILES:.F90=.o)' >> $MAKEFILE
2629    echo 'FLOFILES =  $(AD_FLOW_FILES:.flow=.flowdir)' >> $MAKEFILE
2630  echo >> $MAKEFILE  echo >> $MAKEFILE
2631  echo '.SUFFIXES:' >> $MAKEFILE  echo '.SUFFIXES:' >> $MAKEFILE
2632  echo '.SUFFIXES: .o .'$FS' .p .F .c .'$FS90' .F90' >> $MAKEFILE  echo '.SUFFIXES: .o .'$FS' .p .F .c .f'$FS90' .'$FS90' .FF90 .F90 .flowdir .flow' >> $MAKEFILE
 rm -f srclist.inc csrclist.inc hlist.inc flist.tmp clist.tmp f90srclist.inc  
 rm -f ad_flow_files.inc  
2633    
2634  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2635    
2636  all: \$(EXECUTABLE)  all: \$(EXECUTABLE)
2637  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES) \$(EMBEDDED_FILES)  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(OBJFILES) \$(EMBEDDED_FILES)
2638          @echo Creating \$@ ...          @echo Creating \$@ ...
2639          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
2640  depend:  depend:
2641          @make links          @make links
2642          \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(SRCFILES)          \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(F77_SRC_FILES)
2643          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
2644          -rm -f makedepend.out          -rm -f makedepend.out
2645    
# Line 2456  lib: libmitgcmuv.a Line 2647  lib: libmitgcmuv.a
2647    
2648  libmitgcmuv.a: \$(OBJFILES)  libmitgcmuv.a: \$(OBJFILES)
2649          ar rcv libmitgcmuv.a \$(OBJFILES)          ar rcv libmitgcmuv.a \$(OBJFILES)
2650            ar d   libmitgcmuv.a main.o
2651    
2652  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES)  links: \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(SPECIAL_FILES)
2653    
2654  small_f: \$(F77FILES) \$(F90FILES)  small_f: \$(F77_PP_SRC_FILES) \$(F90_PP_SRC_FILES)
2655    
2656  output.txt: \$(EXECUTABLE)  output.txt: \$(EXECUTABLE)
2657          @printf 'running ... '          @printf 'running ... '
2658          @\$(EXECUTABLE) > \$@          @\$(EXECUTABLE) > \$@
2659    
2660  clean:  clean:
2661          -rm -rf *.o *.$FS *.p *.$FS90 *.mod ${RMFILES} work.{pc,pcl} *.template          -rm -rf *.p *.$FS90 *.mod ${RMFILES} work.{pc,pcl} *.template
2662            -rm -rf *.o
2663            -rm -rf *.$FS *.flowdir
2664            -rm -rf *.f$FS90 \$(AD_CLEAN) ad_input*
2665  Clean:  Clean:
2666          @make clean          @make clean
2667          @make cleanlinks          @make cleanlinks
2668          -rm -f \$(SPECIAL_FILES)          -rm -f \$(SPECIAL_FILES)
2669          -rm -f genmake_state genmake_*optfile genmake_warnings make.log run.log *.bak          -rm -f genmake_state genmake_*optfile genmake_warnings genmake_errors
2670            -rm -f make.log run.log f90mkdepend.log *.bak "$MAKEFILE.old"
2671            -rm -f taf_command taf_output taf_ad.log taf_ad_flow.log
2672  CLEAN:  CLEAN:
2673          @make Clean          @make Clean
2674          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
2675          -find \$(EXEDIR) -name "*.data" -exec rm {} \;          -find \$(EXEDIR) -name "*.data" -exec rm {} \;
2676          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;
2677          -rm -f \$(EXECUTABLE) \$(EXE_AD) *.txt STD* *diagnostics.log datetime          -rm -f \$(EXECUTABLE) \$(EXE_AD) *.txt STD* *diagnostics.log datetime
2678            -rm -f *_MIT_CE_000.opt0000 costfunction*0000
2679          -rm -rf mnc_test_*          -rm -rf mnc_test_*
2680    
2681  #eh3 Makefile: makefile  #eh3 Makefile: makefile
# Line 2486  makefile: Line 2684  makefile:
2684  cleanlinks:  cleanlinks:
2685          -find . -type l -exec rm {} \;          -find . -type l -exec rm {} \;
2686    
2687  # Special targets (SPECIAL_FILES) which are create by make  # Special targets (SPECIAL_FILES) which are created by make
2688  ${PACKAGES_DOT_H}:  ${PACKAGES_DOT_H}:
2689          @echo Creating \$@ ...          @echo Creating \$@ ...
2690          @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -bPACKAGES_CONFIG_H "Disabled packages:" \$(DISABLED_PACKAGES) " " "Enabled packages:" \$(ENABLED_PACKAGES) > \$@          @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -bPACKAGES_CONFIG_H "Disabled packages:" \$(DISABLED_PACKAGES) " " "Enabled packages:" \$(ENABLED_PACKAGES) > \$@
# Line 2511  if test "x$EMBED_SRC" = xt ; then Line 2709  if test "x$EMBED_SRC" = xt ; then
2709    
2710  decode_files.o : EMBEDDED_FILES.h  decode_files.o : EMBEDDED_FILES.h
2711    
2712  ##  \$(F77FILES)  ##  \$(F77_PP_SRC_FILES)
2713  all_fF.tar.gz : \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(F77FILES) Makefile  all_fF.tar.gz : \$(SPECIAL_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(F77_PP_SRC_FILES) Makefile
2714          @echo Creating \$@ ...          @echo Creating \$@ ...
2715          -tar -hcf all_fF.tar \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(F77FILES) Makefile          -tar -hcf all_fF.tar \$(SPECIAL_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) \$(F77_PP_SRC_FILES) Makefile
2716          -rm -f all_fF.tar.gz          -rm -f all_fF.tar.gz
2717          -gzip all_fF.tar          -gzip all_fF.tar
2718    
# Line 2538  cat >>$MAKEFILE <<EOF Line 2736  cat >>$MAKEFILE <<EOF
2736          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<
2737  .F90.$FS90:  .F90.$FS90:
2738          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2739    .FF90.f$FS90:
2740            \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2741  .$FS90.o:  .$FS90.o:
2742          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<
2743    .f$FS90.o:
2744            cp \$< \$(basename  \$<).f90
2745            \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$(F90FIXEDFORMAT) \$(basename  \$<).f90
2746  .c.o:  .c.o:
2747          \$(CC) \$(CFLAGS) \$(DEFINES) \$(INCLUDES) -c \$<          \$(CC) \$(CFLAGS) \$(DEFINES) \$(INCLUDES) -c \$<
2748    .flow.flowdir:
2749            \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
2750    
2751  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain
2752  .F.p:  .F.p:
# Line 2549  cat >>$MAKEFILE <<EOF Line 2754  cat >>$MAKEFILE <<EOF
2754  .p.$FS:  .p.$FS:
2755          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<
2756    
2757    EOF
2758    
2759  #=========================================  #=========================================
2760  #===  Automatic Differentiation Rules  ===  #===  Automatic Differentiation Rules  ===
2761    #===  for TAMC/TAF  ======================
2762    
2763    if test "x$OPENAD" = x ; then
2764    
2765    cat >>$MAKEFILE <<EOF
2766    
2767  TAMC           = ${TAMC}  TAMC           = ${TAMC}
2768  TAF            = ${TAF}  TAF            = ${TAF}
# Line 2574  done Line 2786  done
2786  echo "  Add the source list for AD code generation"  echo "  Add the source list for AD code generation"
2787  echo >> $MAKEFILE  echo >> $MAKEFILE
2788  printf "AD_FILES = " >> $MAKEFILE  printf "AD_FILES = " >> $MAKEFILE
2789  AD_FILES=`cat ad_files`  AD_FILES=`cat adSrcFiles.tmp`
2790  for i in $AD_FILES ; do  for i in $AD_FILES ; do
2791      echo    " \\" >> $MAKEFILE      echo    " \\" >> $MAKEFILE
2792      printf " $i" >> $MAKEFILE      printf " $i" >> $MAKEFILE
2793  done  done
2794  echo >> $MAKEFILE  echo >> $MAKEFILE
2795  rm -f ad_files  rm -f adSrcFiles.tmp
2796    
2797  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2798    
# Line 2589  adall: \$(EXE_AD) Line 2801  adall: \$(EXE_AD)
2801  adtaf: ad_taf_output.$FS  adtaf: ad_taf_output.$FS
2802  adtamc: ad_tamc_output.$FS  adtamc: ad_tamc_output.$FS
2803    
2804  ad_input_code.$FS: \$(AD_FILES) \$(HEADERFILES)  ad_input_code.$FS: \$(AD_FILES) \$(H_SRC_FILES) \$(AD_FLOW_FILES)
2805          @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -DALLOW_ADJOINT_RUN -UALLOW_TANGENTLINEAR_RUN -UALLOW_ECCO_OPTIMIZATION > ad_config.template          @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -DALLOW_ADJOINT_RUN -UALLOW_TANGENTLINEAR_RUN -UALLOW_ECCO_OPTIMIZATION > ad_config.template
2806          cmp ad_config.template AD_CONFIG.h || cat ad_config.template > AD_CONFIG.h          cmp ad_config.template AD_CONFIG.h || cat ad_config.template > AD_CONFIG.h
2807          -rm -f ad_config.template          -rm -f ad_config.template
2808          @make \$(F77FILES)          @make \$(F77_PP_SRC_FILES)
2809          @make \$(AD_FLOW_FILES)          @make \$(FLOFILES)
2810          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.$FS          cat \$(FLOFILES) \$(AD_FILES) | sed -f \$(TOOLSDIR)/remove_comments_sed > ad_input_code.$FS
2811    
2812  ad_taf_output.$FS: ad_input_code.$FS  ad_taf_output.$FS: ad_input_code.$FS
2813          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2814            ls -l ad_input_code_ad.$FS
2815          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS
2816    
2817  adtafonly:  adtafonly:
2818          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2819            ls -l ad_input_code_ad.$FS
2820          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS
2821    
2822  \${EXE_AD}: ad_taf_output.o \$(OBJFILES)  \${EXE_AD}: ad_taf_output.o \$(OBJFILES)
# Line 2626  ftlall: ftl_taf Line 2840  ftlall: ftl_taf
2840  ftltaf: ftl_taf_output.$FS  ftltaf: ftl_taf_output.$FS
2841  ftltamc: ftl_tamc_output.$FS  ftltamc: ftl_tamc_output.$FS
2842    
2843  ftl_input_code.$FS: \$(AD_FILES) \$(HEADERFILES)  ftl_input_code.$FS: \$(AD_FILES) \$(H_SRC_FILES)
2844          @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -UALLOW_ADJOINT_RUN -DALLOW_TANGENTLINEAR_RUN -UALLOW_ECCO_OPTIMIZATION > ftl_config.template          @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -UALLOW_ADJOINT_RUN -DALLOW_TANGENTLINEAR_RUN -UALLOW_ECCO_OPTIMIZATION > ftl_config.template
2845          cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h          cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h
2846          -rm -f ftl_config.template          -rm -f ftl_config.template
2847          @make \$(F77FILES)          @make \$(F77_PP_SRC_FILES)
2848          @make \$(AD_FLOW_FILES)          @make \$(AD_FLOW_FILES)
2849          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.$FS          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.$FS
2850    
2851  ftl_taf_output.$FS: ftl_input_code.$FS  ftl_taf_output.$FS: ftl_input_code.$FS
2852          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2853            ls -l ftl_input_code_ftl.$FS
2854          cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS          cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS
2855    
2856  ftltafonly:  ftltafonly:
2857          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2858            ls -l ftl_input_code_ftl.$FS
2859          cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS          cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS
2860    
2861  ftl_taf: ftl_taf_output.o \$(OBJFILES)  ftl_taf: ftl_taf_output.o \$(OBJFILES)
# Line 2677  svd_touch: Line 2893  svd_touch:
2893          cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h          cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h
2894          -rm -f ftl_config.template          -rm -f ftl_config.template
2895    
2896  #=========================================  EOF
2897    
2898    fi
2899    
2900    #===  for OpenAD  ========================
2901    
2902    if test "x$OPENAD" != x ; then
2903    
2904    # ============ begin OpenAD specific section ==============
2905    
2906    cat >>$MAKEFILE <<EOF
2907    
2908    # all the source files linked from the various locations:
2909    ALL_LINKED_FILES= \
2910    \$(F77_SRC_FILES) \
2911    \$(C_SRC_FILES) \
2912    \$(H_SRC_FILES) \
2913    \$(F90_SRC_FILES) \
2914    \$(SPECIAL_FILES)
2915    
2916    ifndef OPENADROOT
2917      \$(error "Error:  environment variable OPENADROOT not defined!")
2918    endif
2919    
2920    ifndef XAIFSCHEMAROOT
2921      \$(error "Error:  environment variable XAIFSCHEMAROOT not defined!")
2922    endif
2923    
2924    ifndef XAIFBOOSTERROOT
2925      \$(error "Error:  environment variable XAIFBOOSTERROOT not defined!")
2926    endif
2927    
2928    EOF
2929    
2930    echo "  Add the source list for common block to module conversion "
2931    echo >> $MAKEFILE
2932    printf "CB2M_F90_SRC_NAMES = " >> $MAKEFILE
2933    for i in `cat ${OAD_CB2M_FILES}` ; do
2934      echo    " \\" >> $MAKEFILE
2935      printf " $i" >> $MAKEFILE
2936    done
2937    echo >> $MAKEFILE
2938    
2939    echo "  Add the source list for AD code generation"
2940    echo >> $MAKEFILE
2941    printf "AD_FILES = " >> $MAKEFILE
2942    for i in `cat ${OAD_CB2M_FILES}` ; do
2943      echo    " \\" >> $MAKEFILE
2944      printf " ${i}_mod.f$FS90" >> $MAKEFILE
2945    done
2946    AD_FILES=`cat adSrcFiles.tmp`
2947    for i in $AD_FILES ; do
2948      basename=${i%%.f}
2949      toBeIgnored=`egrep ^$basename'[      ]*' ${OAD_DONT_COMPILE} ${OAD_DONT_TRANSFORM}`
2950      if test -z "$toBeIgnored" ; then
2951        echo    " \\" >> $MAKEFILE
2952        printf " $i" >> $MAKEFILE
2953      fi
2954    done
2955    echo >> $MAKEFILE
2956    rm -f adSrcFiles.tmp
2957    
2958    cat >>$MAKEFILE <<EOF
2959    
2960    adAll: \$(EXE_AD)
2961    .PHONY: adAll
2962    
2963    CB2M_F90_PP_SRC_FILES=\$(addsuffix _mod.f$FS90, \$(CB2M_F90_SRC_NAMES))
2964    
2965    .PRECIOUS: \$(CB2M_F90_PP_SRC_FILES) \$(NON_AD_F77_SRC_FILES:.F=_cb2m.f$FS90)
2966    
2967    .PHONY: adDepend
2968    adDepend: \$(ALL_LINKED_FILES) \$(addsuffix _mod.h, \$(CB2M_F90_SRC_NAMES)) \$(addsuffix _mod.FF90, \$(CB2M_F90_SRC_NAMES)) \$(F77_SRC_FILES:.F=_cb2m.FF90)
2969            \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(F77_SRC_FILES)
2970            \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
2971            -rm -f makedepend.out
2972    
2973    OPENAD_SUPPORT_F90_SRC_FILES = \
2974    w2f__types.F90 \
2975    OAD_active.F90 \
2976    OAD_cp.F90 \
2977    OAD_rev.F90 \
2978    OAD_tape.F90        
2979    
2980    OPENAD_SUPPORT_C_SRC_FILES = \
2981    iaddr.c \
2982    timeRatio.c
2983    
2984    f95_test_mods.f90: \$(OPENAD_SUPPORT_F90_SRC_FILES:F90=$FS90)
2985            cat \$^ > \$@
2986    
2987    f95_test.f90: all_mods.xb.x2w.w2f.pp.f$FS90 \$(NON_AD_F77_SRC_FILES:.F=_cb2m.f$FS90) ad_input_code.w2f.pre.xb.x2w.w2f.td.pp.f$FS90
2988            cat \$^ > \$@
2989    
2990    f95_test.out: f95_test_mods.f90 f95_test.f90
2991            f95 -fixed -w=unused -maxcontin=132 -c f95_test_mods.f90 > \$@ 2>&1
2992            f95 -fixed -w=unused -maxcontin=132 -c -fixed f95_test.f90 >> \$@ 2>&1
2993    
2994    # the file included below is created by the
2995    # postProcessor and its inclusion sets the
2996    # variable POSTPROCESSEDFILES
2997    # used below. Because the file is made during
2998    # make it won't be read until the second (recursive)
2999    # invocation in the rule below
3000    -include postProcess.make
3001    
3002    AD_OBJ_FILES_S1=\$(OPENAD_SUPPORT_F90_SRC_FILES:.F90=.o) \$(OPENAD_SUPPORT_C_SRC_FILES:.c=.o) \$(POSTPROCESSEDFILES:.f$FS90=.o)
3003    
3004    AD_OBJ_FILES_S2=\$(AD_OBJ_FILES_S1) \$(NON_AD_F77_SRC_FILES:.F=_cb2m.o) \$(C_SRC_FILES:.c=.o) \$(F90_SRC_FILES:.F90=.o)
3005    
3006    postProcess.comp: \$(ALL_LINKED_FILES) \$(addsuffix _mod.h, \$(CB2M_F90_SRC_NAMES)) postProcess.tag \$(AD_OBJ_FILES_S1)
3007    ifeq (\$(MAKELEVEL),0)
3008            \$(MAKE) adAll
3009    else
3010            touch \$@
3011    endif
3012    
3013    \$(EXE_AD): \$(ALL_LINKED_FILES) \$(addsuffix _mod.h, \$(CB2M_F90_SRC_NAMES)) postProcess.comp \$(AD_OBJ_FILES_S2)
3014    ifeq (\$(MAKELEVEL),1)
3015            \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(AD_OBJ_FILES_S2) \$(LIBS)
3016    else
3017            touch \$@
3018    endif
3019    
3020    # makefile debug rule
3021    openad: ad_input_code.w2f.pre.xb.x2w.w2f.td.pp.f$FS90
3022    .PHONY: openad
3023    
3024    # create the module files
3025    %_mod.FF90 : %.h ../OAD_support/cb2mGetModules.csh ../OAD_support/cb2mGetModules.awk
3026            ../OAD_support/cb2mGetModules.csh $< ../OAD_support/cb2mGetModules.awk
3027    
3028    # create the header files
3029    %_mod.h : %.h ../OAD_support/cb2mGetHeaders.csh ../OAD_support/cb2mGetHeaders.awk
3030            ../OAD_support/cb2mGetHeaders.csh $< ../OAD_support/cb2mGetHeaders.awk \$(CB2M_F90_SRC_NAMES)
3031    
3032    # change everybody else to use the new module files:
3033    %_cb2m.FF90 : %.F ../OAD_support/cb2mUseModules.bash
3034            ../OAD_support/cb2mUseModules.bash $< ${MPI}
3035    
3036    # makefile debug rule
3037    small_f: \$(CB2M_F90_PP_SRC_FILES)
3038    .PHONY: small_f
3039    
3040    ad_output.txt: \$(EXE_AD)
3041            @printf 'linking data files ... '
3042            \$(LN) -f ../input_ad/data* ../input_ad/eedata .
3043            \$(LN) -f ../../global_ocean.90x40x15/input/*.bin .
3044            @printf 'running ... '
3045            @./\$(EXE_AD) > \$@
3046    
3047    CB2M_AD_FILES=\$(AD_FILES:.f=_cb2m.f$FS90)
3048    ad_input_code.f$FS90:  \$(CB2M_AD_FILES)
3049            cat \$^ > \$@
3050    
3051    # strip all comments and blanks to reduce
3052    # the file size in order to reduce perl's memory requirements
3053    ad_input_code_sf.f$FS90 : ad_input_code.f$FS90
3054            cat \$^ | sed -f ../OAD_support/strip.sed | sed -f ../OAD_support/stop2print.sed > \$@
3055    
3056    # mfef90 preprocessing
3057    # expand statement functions
3058    # expose mfef90 specific substring handling
3059    # add the w2f__types module
3060    ad_input_code_sf.w2f.f$FS90: ad_input_code_sf.f$FS90 mfef90 whirl2f whirl2f_be w2f__types.f90
3061            ./mfef90 -r8 -z -F -N132 \$<
3062            mv \$<.B \$(basename \$<).B
3063            ./whirl2f -openad \$(basename \$<).B
3064            cat w2f__types.f90 \$(basename \$<).w2f.f > \$@
3065    
3066    # canonicalizer
3067    ad_input_code_sf.w2f.pre.f$FS90: ad_input_code_sf.w2f.f$FS90 preProcess.py
3068            ./preProcess.py --timing --r8 -H -S \$< -o \$@
3069    
3070    # F -> WHIRL
3071    # note that the canonicalized version cuts off at col 72
3072    # doing this also for string constants which is ok as long
3073    # as we are in fixed mode and cut of exactly there.
3074    # Otherwise mfef90 patches in spaces to fill up to 72 (or 132)
3075    # characters respectively.
3076    ad_input_code_sf.w2f.pre.B: ad_input_code_sf.w2f.pre.f$FS90 mfef90
3077            ./mfef90 -r8 -z -F \$<
3078            mv \$<.B \$@
3079    
3080    # WHIRL -> XAIF
3081    ad_input_code_sf.w2f.pre.xaif : ad_input_code_sf.w2f.pre.B whirl2xaif
3082            ./whirl2xaif -s -n --debug 1 -o \$@ \$<
3083    
3084    # XAIF -> XAIF'
3085    ad_input_code_sf.w2f.pre.xb.xaif : ad_input_code_sf.w2f.pre.xaif xaif.xsd xaif_base.xsd xaif_inlinable_intrinsics.xsd xaif_derivative_propagator.xsd xaif_output.xsd oadDriver
3086            ./oadDriver -f -t forward_step -i \$< -c \${XAIFSCHEMAROOT}/schema/examples/inlinable_intrinsics.xaif -o \$@ -I -r
3087    
3088    # XAIF' -> WHIRL'
3089    ad_input_code_sf.w2f.pre.xb.x2w.B : ad_input_code_sf.w2f.pre.xb.xaif xaif2whirl
3090            ./xaif2whirl --debug 1 ad_input_code_sf.w2f.pre.B \$<
3091    
3092    # WHIRL' -> F'
3093    ad_input_code_sf.w2f.pre.xb.x2w.w2f.f$FS90: ad_input_code_sf.w2f.pre.xb.x2w.B whirl2f whirl2f_be
3094            ./whirl2f -FLIST:ftn_file=\$@ -openad \$<
3095    
3096    # insert template directives
3097    ad_input_code_sf.w2f.pre.xb.x2w.w2f.td.f$FS90: ad_input_code_sf.w2f.pre.xb.x2w.w2f.f$FS90 ../OAD_support/insertTemplateDir.bash
3098            ../OAD_support/insertTemplateDir.bash \$< \$@
3099    
3100    PPEXTRAS=\$(wildcard ../OAD_support/ad_template.*.F) ../OAD_support/ad_inline.F
3101    # postprocess F'
3102    postProcess.tag: ad_input_code_sf.w2f.pre.xb.x2w.w2f.td.f$FS90 postProcess.py \$(PPEXTRAS:.F=.f)
3103            # the target is a placeholder to signal execution of the rule
3104            touch \$@
3105            # this step also creates the file postProcess.make but we cannot
3106            # name it as the target or else make will try to remake it for
3107            # the include directive above for any rule, e.g. make clean
3108            ./postProcess.py --progress --timing --outputFormat=fixed -m r -i ../OAD_support/ad_inline.f --width 4 \$<
3109    
3110    # setup some links
3111    %.xsd:
3112            \$(LN) \${XAIFSCHEMAROOT}/schema/\$@ .
3113    
3114    mfef90:
3115            \$(LN) \${OPEN64ROOT}/crayf90/sgi/mfef90 .
3116    
3117    # link the support files:
3118    \$(OPENAD_SUPPORT_F90_SRC_FILES) \$(OPENAD_SUPPORT_C_SRC_FILES):
3119            \$(LN) ../OAD_support/\$@ .
3120    
3121    whirl2xaif xaif2whirl:
3122            \$(LN) \${OPENADFORTTK}/bin/\$@ .
3123    
3124    preProcess.py postProcess.py:
3125            \$(LN) \${OPENADFORTTK_BASE}/tools/SourceProcessing/\$@ .
3126    
3127    whirl2f whirl2f_be:
3128            \$(LN) \${OPEN64ROOT}/whirl2f/\$@ .
3129    
3130    oadDriver:
3131            \$(LN) \${XAIFBOOSTERROOT}/xaifBooster/algorithms/BasicBlockPreaccumulationReverse/driver/oadDriver \$@
3132    
3133    AD_CLEAN += *_mod.h *_mod.F90 *.FF90 *.mod-whirl temp.sed oad_cp.* postProcess.make postProcess.tag postProcess.comp \$(PPEXTRAS:.F=.f)
3134    
3135    # ============ end OpenAD specific section ==============
3136    
3137  EOF  EOF
3138    
3139    fi
3140    
3141    #=========================================
3142    
3143  if test "x$EXEHOOK" != x ; then  if test "x$EXEHOOK" != x ; then
3144      printf "\nexehook:\n\t%s\n" $EXEHOOK >> $MAKEFILE      printf "\nexehook:\n\t%s\n" $EXEHOOK >> $MAKEFILE
3145  fi  fi

Legend:
Removed from v.1.152  
changed lines
  Added in v.1.205

  ViewVC Help
Powered by ViewVC 1.1.22