aboutsummaryrefslogtreecommitdiff
path: root/PETSc.sh
blob: 071ebf9d2f91e5b6a967f031123bf4c988b33ca1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#! /bin/sh
#/*@@
#  @file   petsc.sh
#  @date   Fri 29 Aug 2003
#  @author Thomas Radke
#  @desc
#          Setup for an external PETSc installation
#  @enddesc
# @@*/

# /*@@
#   @routine    CCTK_Search
#   @date       Wed Jul 21 11:16:35 1999
#   @author     Tom Goodale
#   @desc
#   Used to search for something in various directories
#   @enddesc
#@@*/

CCTK_Search()
{
  eval  $1=""
  if test $# -lt 4 ; then
    cctk_basedir=""
  else
    cctk_basedir="$4/"
  fi
  for cctk_place in $2
    do
#      echo $ac_n "  Looking in $cctk_place""...$ac_c" #1>&6
      if test -r "$cctk_basedir$cctk_place/$3" ; then
#        echo "$ac_t""... Found" #1>&6
        eval $1="$cctk_place"
        break
      fi
      if test -d "$cctk_basedir$cctk_place/$3" ; then
#        echo "$ac_t""... Found" #1>&6
        eval $1="$cctk_place"
        break
      fi
#      echo "$ac_t"" No" #1>&6
    done

  return
}


# Check that MPI is there
if [ -z "$MPI" -o "$MPI" = 'none' ]; then
  echo "BEGIN ERROR"
  echo 'Thorn PETSc requires MPI.  Please configure with MPI ' \
       'or remove PETSc from your configuration ThornList.'
  echo "END ERROR"
  exit 2
fi

# Work out PETSc's installation directory
if [ -z "$PETSC_DIR" ]; then
  echo "BEGIN MESSAGE"
  echo 'PETSc selected but no PETSC_DIR set. Checking some places...'
  echo "END MESSAGE"
  CCTK_Search PETSC_DIR '/ /usr /usr/local /usr/local/petsc /usr/local/packages/petsc /usr/local/apps/petsc' include/petsc.h
  if [ -z "$PETSC_DIR" ] ; then
     echo "BEGIN ERROR"
     echo 'Thorn PETSc requires an external installation of the PETSc ' \
          'library.  Please set PETSC_DIR to the directory of this ' \
          'installation, or remove PETSc from your configuration ThornList.'
     echo "END ERROR"
     exit 2
  fi
  echo "BEGIN MESSAGE"
  echo "Found a PETSc package in $PETSC_DIR"
  echo "END MESSAGE"
else
  echo "BEGIN MESSAGE"
  echo "Using PETSc package in $PETSC_DIR"
  echo "END MESSAGE"
fi

# Set platform-specific libraries
if [ -z "$PETSC_ARCH_LIBS" ]; then
  case "$PETSC_ARCH" in
    alpha) PETSC_ARCH_LIBS='dxml' ;;
    IRIX64) PETSC_ARCH_LIBS='fpe blas complib.sgimath' ;;
    linux)  PETSC_ARCH_LIBS='flapack fblas g2c mpich'  ;;
    linux_intel) PETSC_ARCH_LIBS='mkl_lapack mkl_def guide' ;;
    linux-gnu) PETSC_ARCH_LIBS='mkl_lapack mkl_def guide' ;;
    linux64_intel) PETSC_ARCH_LIBS='mkl_lapack mkl guide' ;;
    rs6000_64) PETSC_ARCH_LIBS='essl' ;;
    *) echo 'BEGIN ERROR'
       echo "No PETSc support for architecture '$PETSC_ARCH'."
       echo 'Please set the variable PETSC_ARCH_LIBS manually,'
       echo 'and/or send a request to <cactusmaint@cactuscode.org>.'
       echo 'END ERROR'
       exit 2
  esac
fi

# Set version-specific library directory
# (version 2.3.0 and newer use different library directories)
if [ -e "$PETSC_DIR/lib/$PETSC_ARCH" -o -e "$PETSC_DIR/lib/libpetsc.a" ]; then
  PETSC_LIB_INFIX=''
else
  PETSC_LIB_INFIX='/libO'
fi

# Set version-specific libraries
# (version 2.2.0 and newer do not have libpetscsles.a any more)
if [ -e "$PETSC_DIR/lib$PETSC_LIB_INFIX/$PETSC_ARCH/libpetscksp.a" -o -e "$PETSC_DIR/lib/libpetscksp.a" ]; then
  PETSC_SLES_LIBS="petscksp"
else
  PETSC_SLES_LIBS="petscsles"
fi

# Set the PETSc libs, libdirs and includedirs
PETSC_INC_DIRS='$(PETSC_DIR)/include $(PETSC_DIR)/bmake/$(PETSC_ARCH)'
PETSC_LIB_DIRS='$(PETSC_DIR)/lib'$PETSC_LIB_INFIX'/$(PETSC_ARCH)'
PETSC_LIBS="petscts petscsnes $PETSC_SLES_LIBS petscdm petscmat petscvec petsc $PETSC_ARCH_LIBS"

echo 'BEGIN MAKE_DEFINITION'
echo "PETSC_DIR      = $PETSC_DIR"
echo "PETSC_ARCH     = $PETSC_ARCH"
echo "PETSC_INC_DIRS = $PETSC_INC_DIRS"
echo "PETSC_LIB_DIRS = $PETSC_LIB_DIRS"
echo "PETSC_LIBS     = $PETSC_LIBS"
echo 'END MAKE_DEFINITION'

# Write the data out to the headers and makefiles
echo 'INCLUDE_DIRECTORY $(PETSC_INC_DIRS)'
echo 'LIBRARY_DIRECTORY $(PETSC_LIB_DIRS) $(X_LIB_DIR)'
echo 'LIBRARY $(PETSC_LIBS) X11 $(MPI_LIBS)'