Dear all,
I have a problem for compile PDSLin with PETSc, the configure.log says
------------------------------------------------------
====== Compiling PDSLin; this may take several minutes
===============================================================================
sh: cd
/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/externalpackages/pdslin_0.0
&&
PDSLIN_INSTALL_DIR=/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/arch-cray-xt6-pkgs-opt-doubleprecision-pdslin/lib
&& export PDSLIN_INSTALL_DIR && make clean && make lib LAAUX="" && mv -f *.a
/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/arch-cray-xt6-pkgs-opt-doubleprecision-pdslin/lib
&& cp -f include/*.h
/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/arch-cray-xt6-pkgs-opt-doubleprecision-pdslin/include/.Executing:
cd
/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/externalpackages/pdslin_0.0
&&
PDSLIN_INSTALL_DIR=/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/arch-cray-
xt6-pkgs-opt-doubleprecision-pdslin/lib && export PDSLIN_INSTALL_DIR && make
clean && make lib LAAUX="" && mv -f *.a
/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/arch-cray-xt6-pkgs-opt-doubleprecision-pdslin/lib
&& cp -f include/*.h
/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/arch-cray-xt6-pkgs-opt-doubleprecision-pdslin/include/.
sh: (cd src/; make clean; cd
/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/externalpackages/pdslin_0.0/fortran;
make clean; cd /scratch2/scratchdirs/xyuan/Software_Hopper/pet
sc-dev/externalpackages/pdslin_0.0/fortran/examples; make clean; cd
/scratch2/scratchdirs/x
yuan/Software_Hopper/petsc-dev/externalpackages/pdslin_0.0/examples; make
clean; rm -f ; )
make[1]: Entering directory
`/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/externalpackages/pdslin_0.0/src'
( rm -f *.o; rm -f ./slu/*.o;)
make[1]: Leaving directory
`/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/externalpackages/pdslin_0.0/src'
make[1]: Entering directory
`/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/externalpackages/pdslin_0.0/fortran'
(rm -f *.o; rm -f *.mod;)
make[1]: Leaving directory
`/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/externalpackages/pdslin_0.0/fortran'
make[1]: Entering directory
`/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/externalpackages/pdslin_0.0/fortran/examples'
(rm -f *.o; rm -f *.mod; rm -f dtest_pdslinf; rm -f ztest_pdslinf;)
make[1]: Leaving directory
`/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/externalpackages/pdslin_0.0/fortran/examples'
make[1]: Entering directory
`/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/externalpackages/pdslin_0.0/examples'
(rm -f *.o; rm -f *.dat; rm -f dtest_pdslin; rm -f ztest_pdslin; rm -f dtest;
rm -f ztest;)
make[1]: Leaving directory
`/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/externalpackages/pdslin_0.0/examples'
make: Nothing to be done for `lib'.
*******************************************************************************
UNABLE to CONFIGURE with GIVEN OPTIONS (see configure.log for
details):
-------------------------------------------------------------------------------
Error running make on PDSLIN: Could not execute "cd
/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/externalpackages/pdslin_0.0
&&
PDSLIN_INSTALL_DIR=/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/arch-cray-xt6-pkgs-opt-doubleprecision-pdslin/lib
&& export PDSLIN_INSTALL_DIR && make clean && make lib LAAUX="" && mv -f *.a
/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/arch-cray-xt6-pkgs-opt-doubleprecision-pdslin/lib
&& cp -f include/*.h
/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/arch-cray-xt6-pkgs-opt-doubleprecision-pdslin/include/.":
(cd src/; make clean; cd
/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/externalpackages/pdslin_0.0/fortran;
make clean; cd
/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/externalpackages/pdslin_0.0/fortran/examples;
make clean; cd
/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/externalpackages/pdslin_0.0/examples;
make clean; rm -f ; )
make[1]: Entering directory
`/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/externalpackages/pdslin_0.0/src'
( rm -f *.o; rm -f ./slu/*.o;)
make[1]: Leaving directory
`/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/externalpackages/pdslin_0.0/src'
make[1]: Entering directory
`/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/externalpackages/pdslin_0.0/fortran'
(rm -f *.o; rm -f *.mod; rm -f dtest_pdslinf; rm -f ztest_pdslinf;)
make[1]: Leaving directory
`/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/externalpackages/pdslin_0.0/fortran/examples'
make[1]: Entering directory
`/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/external
packages/pdslin_0.0/examples'
(rm -f *.o; rm -f *.dat; rm -f dtest_pdslin; rm -f ztest_pdslin; rm -f dtest;
rm -f ztest;)
make[1]: Leaving directory
`/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/externalpackages/pdslin_0.0/examples'
make: Nothing to be done for `lib'.
mv: cannot stat `*.a': No such file or
directory*******************************************************************************
File
"/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/config/configure.py",
line 27
2, in petsc_configure framework.configure(out = sys.stdout)
File
"/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/config/BuildSystem/config/fra
mework.py", line 925, in configure child.configure()
File
"/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/config/BuildSystem/config/package.py",
line 500, in configure
self.executeTest(self.configureLibrary)
File
"/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/config/BuildSystem/config/base.py",
line 115, in executeTest
ret = apply(test, args,kargs)
File
"/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/config/BuildSystem/config/package.py",
line 427, in configureLibrary
for location, directory, lib, incl in self.generateGuesses():
File
"/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/config/BuildSystem/config/package.py",
line 223, in generateGuesses
d = self.checkDownload(1)
File
"/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/config/BuildSystem/config/package.py",
line 308, in checkDownload
return self.getInstallDir()
File
"/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/config/BuildSystem/config/package.py",
line 181, in getInstallDir
return os.path.abspath(self.Install())
File
"/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/config/PETSc/packages/PDSLin.py",
line 74, in Install
raise RuntimeError('Error running make on PDSLIN: '+str(e))
-----------------------------------------------------
I started to copy and paste the error message including commands:
Error running make on PDSLIN: Could not execute "cd
/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/externalpackages/pdslin_0.0
&&
PDSLIN_INSTALL_DIR=/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/arch-cray-xt6-pkgs-opt-doubleprecision-pdslin/lib
&& export PDSLIN_INSTALL_DIR && make clean && make lib LAAUX="" && mv -f *.a
/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/arch-cray-xt6-pkgs-opt-doubleprecision-pdslin/lib
&& cp -f include/*.h
/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/arch-cray-xt6-pkgs-opt-doubleprecision-pdslin/include/.":
And found that
Software_Hopper/petsc-dev> cd
/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/externalpackages/pdslin_0.0
Directory:
/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/externalpackages/pdslin_0.0
externalpackages/pdslin_0.0>
PDSLIN_INSTALL_DIR=/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/arch-cray-xt6-pkgs-opt-doubleprecision-pdslin/lib
PDSLIN_INSTALL_DIR=/scratch2/scratchdirs/xyuan/Software_Hopper/petsc-dev/arch-cray-xt6-pkgs-opt-doubleprecision-pdslin/lib:
Command not found.
externalpackages/pdslin_0.0>
Then I realized that it is a csh not a bash. However, there is no error message
for other packages, such as SuperLU_DIST. My PDSLin.py looks like (modified
from SuperLU_DIST.py):
-------------------------------------
import PETSc.package
class Configure(PETSc.package.NewPackage):
def __init__(self, framework): PETSc.package.NewPackage.__init__(self,
framework)
self.downloadname = self.name.lower()
self.download =
['http://portal.nersc.gov/project/nerscpd/pdslin_0.0.tar.gz']
self.functions = ['dpdslin_solver']
self.includes = ['dpdslin_solver.h']
self.liblist = [['libpdslin.a']]
#
# PDSLin supports 64 bit integers but uses ParMetis which does not, see
the comment in
ParMetis.py
# in the method configureLibrary()
self.requires32bitint = 0
self.complex = 1
return
def setupDependencies(self, framework):
PETSc.package.NewPackage.setupDependencies(self, framework)
self.blasLapack = framework.require('config.packages.BlasLapack',self)
self.parmetis = framework.require('PETSc.packages.ParMetis',self)
self.scotch = framework.require('PETSc.packages.Scotch',self)
self.superlu_dist = framework.require('PETSc.packages.SuperLU_DIST',self)
self.deps =
[self.mpi,self.blasLapack,self.parmetis,self.scotch,self.superlu_dist]
return
def Install(self):
import os
import sys
g = open(os.path.join(self.packageDir,'make.inc'),'w')
g.write('SHELL = '+self.programs.SHELL+'\n')
g.write('DPDSLINroot = '+self.packageDir+'\n')
g.write('HOME = $(DPDSLINroot)\n')
g.write('DPDSLINLIB = $(DPDSLINroot)/lib/libpdslin.a\n')
g.write('BLASDEF = -DUSE_VENDOR_BLAS\n')
g.write('BLASLIB =
'+self.libraries.toString(self.blasLapack.dlib)+'\n')
g.write('IMPI = '+self.headers.toString(self.mpi.include)+'\n')
g.write('MPILIB = '+self.libraries.toString(self.mpi.lib)+'\n')
g.write('PMETISLIB = '+self.libraries.toString(self.parmetis.lib)+'\n')
g.write('PSCOTCHLIB = '+self.libraries.toString(self.scotch.lib)+'\n')
g.write('SUPERLUDISTLIB =
'+self.libraries.toString(self.superlu_dist.lib)+'\n')
g.write('LIBS = $(DPDSLINLIB) $(BLASLIB) $(PMETISLIB) $(MPILIB)
$(PSCOTCHLIB) $(SUPERLUDISTLIB)\n')
g.write('ARCH = '+self.setCompilers.AR+'\n')
g.write('ARCHFLAGS = '+self.setCompilers.AR_FLAGS+'\n')
g.write('RANLIB = '+self.setCompilers.RANLIB+'\n')
self.setCompilers.pushLanguage('C')
g.write('CC = '+self.setCompilers.getCompiler()+' $(IMPI)\n')
#build fails without $(IMPI)
g.write('CFLAGS = '+self.setCompilers.getCompilerFlags()+'\n')
g.write('LOADER = '+self.setCompilers.getLinker()+'\n')
g.write('LOADOPTS = \n')
self.setCompilers.popLanguage()
# set blas/lapack name mangling
if self.blasLapack.mangling == 'underscore':
g.write('CDEFS = -DAdd_')
elif self.blasLapack.mangling == 'caps':
g.write('CDEFS = -DUpCase')
else:
g.write('CDEFS = -DNoChange')
if self.framework.argDB['with-64-bit-indices']:
g.write(' -D_LONGINT')
g.write('\n')
# not sure what this is for
g.write('NOOPTS =
'+self.blasLapack.getSharedFlag(self.setCompilers.getCompilerFlags())+'
'+self.blasLapack.getPrecisionFlag(self.setCompilers.getCompilerFlags())+'
'+self.blasLapack.getWindowsNonOptFlags(self.setCompilers.getCompilerFlags())+'\n')
g.close()
if self.installNeeded('make.inc'):
try:
self.logPrintBox('Compiling PDSLin; this may take several minutes')
if not os.path.exists(os.path.join(self.packageDir,'lib')):
os.makedirs(os.path.join(self.packageDir,'lib'))
output,err,ret = PETSc.package.NewPackage.executeShellCommand('cd
'+self.packageDir+' && PDSLIN_INSTALL_DIR='+self.installDir+'/lib && export
PDSLIN_INSTALL_DIR && make clean && make lib LAAUX="" && mv -f *.a
'+os.path.join(self.installDir,'lib')+' && cp -f include/*.h
'+os.path.join(self.installDir,'include')+'/.', timeout=2500, log =
self.framework.log)
except RuntimeError, e:
raise RuntimeError('Error running make on PDSLIN: '+str(e))
self.postInstall(output+err,'make.inc')
return self.installDir
def consistencyChecks(self):
PETSc.package.NewPackage.consistencyChecks(self)
if self.framework.argDB['with-'+self.package]:
if not self.blasLapack.checkForRoutine('slamch'):
raise RuntimeError('PDSLin requires the BLAS routine slamch()')
self.framework.log.write('Found slamch() in BLAS library as needed by
PDSLin\n')
if not self.blasLapack.checkForRoutine('dlamch'):
raise RuntimeError('PDSLin requires the BLAS routine dlamch()')
self.framework.log.write('Found dlamch() in BLAS library as needed by
PDSLin\n')
if not self.blasLapack.checkForRoutine('xerbla'):
raise RuntimeError('PDSLin requires the BLAS routine xerbla()')
self.framework.log.write('Found xerbla() in BLAS library as needed by
PDSLin\n')
return
------------------------------------
What could be wrong here?
Thanks very much!
Cheers,
Rebecca
On Aug 17, 2011, at 1:46 PM, Barry Smith wrote:
>
> Rebecca,
>
> It would probably be best if you email to petsc-maint the PDSLin tarball
> so we can look at the PDSlin structure and come up with the best way to
> proceed. The way to handle the packaging will depend on how PDSLin interacts
> with PETSc.
>
> Thanks
>
> Barry
>
> On Aug 17, 2011, at 3:19 PM, Xuefei (Rebecca) Yuan wrote:
>
>> Dear all,
>>
>> We are trying to add a PETSc dependent package called PDSLin to PETSc as an
>> external package. PDSLin is a hybrid linear solver and we would like to have
>> it been imported to PETSc as SuperLU_DIST used to be, and it provides an
>> alternative way to solving a linear system in parallel.
>>
>> Even though the package has not been released yet (should be released soon)
>> and it is under testing for some problems, we are still interesting in
>> putting it as an external package to PETSc for now.
>>
>> I did some search of the old threads to the petsc-dev team and there is a
>> request from Lious for the PaStiX a few years ago.
>>
>> My understanding to add a package is the following steps:
>>
>> 1) create a python code called "PDSLin.py" under
>> /petsc-dev/config/PETSc/packages
>>
>> 2) write an interface file between PETSc and PDSLin.
>>
>> As PDSLin is very similar to SuperLU_DIST, and it also depending on PETSc
>> (similar to Prometheus), the PDSLin.py is created based on SuperLU_DIST.py
>> and Prometheus.py.
>>
>> Before putting the interface file in some places under petsc-dev directory,
>> would you please help me understand how those option calls go to this
>> interface file?
>>
>> a) am I missing another file to create/modify to have those options
>> connected to PDSLin in a very similar way to SuperLU_DIST?
>>
>> b) do I have some flexibility to add more options called from PETSc to this
>> package?
>>
>> Moreover, I am not sure how to put the interface file in the dev package.
>>
>> c) where shall it go? The SuperLU_DIST is located at
>>
>> ./src/mat/impls/aij/mpi/superlu_dist/superlu_dist.c
>>
>> shall I put it as
>>
>> ./src/mat/impls/aij/mpi/pdslin/pdslin.c ?
>>
>> d) what is the rule of writing this interface file?
>>
>> In superlu_dist.c, the extern functions are
>>
>> extern PetscErrorCode MatFactorInfo_SuperLU_DIST(Mat,PetscViewer);
>> extern PetscErrorCode MatLUFactorNumeric_SuperLU_DIST(Mat,Mat,const
>> MatFactorInfo *);
>> extern PetscErrorCode MatDestroy_SuperLU_DIST(Mat);
>> extern PetscErrorCode MatView_SuperLU_DIST(Mat,PetscViewer);
>> extern PetscErrorCode MatSolve_SuperLU_DIST(Mat,Vec,Vec);
>> extern PetscErrorCode MatLUFactorSymbolic_SuperLU_DIST(Mat,Mat,IS,IS,const
>> MatFactorInfo *);
>> extern PetscErrorCode MatDestroy_MPIAIJ(Mat);
>>
>> What kind of functions should I have in the interface file for PDSLin?
>>
>> I am not sure if I have stated the problem clearly, in short is that we
>> would like to add some package to PETSc but not sure the right way and steps
>> to approach the goal.
>>
>> Thanks very much!
>>
>> Best regards,
>>
>> Rebecca
>>
>> Xuefei (Rebecca) Yuan
>> Postdoctoral Fellow
>> Lawrence Berkeley National Laboratory
>> Tel: 1-510-486-7031
>>
>>
>