Added an example code to test CG on a 4D HYPRE_SSTRUCT complex problem. Added regression tests for bigint, maxdim, and complex. Added a test to make sure double types are not added to the source. See [Issue995] in the tracker for more details.
345 lines
16 KiB
C
345 lines
16 KiB
C
/*BHEADER**********************************************************************
|
|
* Copyright (c) 2008, Lawrence Livermore National Security, LLC.
|
|
* Produced at the Lawrence Livermore National Laboratory.
|
|
* This file is part of HYPRE. See file COPYRIGHT for details.
|
|
*
|
|
* HYPRE is free software; you can redistribute it and/or modify it under the
|
|
* terms of the GNU Lesser General Public License (as published by the Free
|
|
* Software Foundation) version 2.1 dated February 1999.
|
|
*
|
|
* $Revision$
|
|
***********************************************************************EHEADER*/
|
|
|
|
|
|
|
|
|
|
/* hypre_lapack.h -- Contains LAPACK prototypes needed by Hypre */
|
|
|
|
#ifndef HYPRE_LAPACK_H
|
|
#define HYPRE_LAPACK_H
|
|
#include "f2c.h"
|
|
#include "fortran.h"
|
|
|
|
/* --------------------------------------------------------------------------
|
|
* Change all names to hypre_ to avoid link conflicts
|
|
* --------------------------------------------------------------------------*/
|
|
|
|
#define dgebd2_ hypre_dgebd2
|
|
#define dgebrd_ hypre_dgebrd
|
|
#define dgelq2_ hypre_dgelq2
|
|
#define dgelqf_ hypre_dgelqf
|
|
#define dgels_ hypre_dgels
|
|
#define dgeqr2_ hypre_dgeqr2
|
|
#define dgeqrf_ hypre_dgeqrf
|
|
#define dgesvd_ hypre_dgesvd
|
|
#define dgetf2_ hypre_dgetf2
|
|
#define dgetrf_ hypre_dgetrf
|
|
#define dgetrs_ hypre_dgetrs
|
|
#define dlabad_ hypre_dlabad
|
|
#define dlabrd_ hypre_dlabrd
|
|
#define dlae2_ hypre_dlae2
|
|
#define dlaev2_ hypre_dlaev2
|
|
#define dlamch_ hypre_dlamch
|
|
#define dlamc1_ hypre_dlamc1
|
|
#define dlamc2_ hypre_dlamc2
|
|
#define dlamc3_ hypre_dlamc3
|
|
#define dlamc4_ hypre_dlamc4
|
|
#define dlamc5_ hypre_dlamc5
|
|
#define dlaswp_ hypre_dlaswp
|
|
#define dlange_ hypre_dlange
|
|
#define dlanst_ hypre_dlanst
|
|
#define dlansy_ hypre_dlansy
|
|
#define dlapy2_ hypre_dlapy2
|
|
#define dlarf_ hypre_dlarf
|
|
#define dlarfb_ hypre_dlarfb
|
|
#define dlarfg_ hypre_dlarfg
|
|
#define dlarft_ hypre_dlarft
|
|
#define dlartg_ hypre_dlartg
|
|
#define dlascl_ hypre_dlascl
|
|
#define dlaset_ hypre_dlaset
|
|
#define dlasr_ hypre_dlasr
|
|
#define dlasrt_ hypre_dlasrt
|
|
#define dlassq_ hypre_dlassq
|
|
#define dlatrd_ hypre_dlatrd
|
|
#define dorg2l_ hypre_dorg2l
|
|
#define dorg2r_ hypre_dorg2r
|
|
#define dorgql_ hypre_dorgql
|
|
#define dorgqr_ hypre_dorgqr
|
|
#define dorgtr_ hypre_dorgtr
|
|
#define dorm2r_ hypre_dorm2r
|
|
#define dorml2_ hypre_dorml2
|
|
#define dormlq_ hypre_dormlq
|
|
#define dormqr_ hypre_dormqr
|
|
#define dpotf2_ hypre_dpotf2
|
|
#define dpotrf_ hypre_dpotrf
|
|
#define dpotrs_ hypre_dpotrs
|
|
#define dsteqr_ hypre_dsteqr
|
|
#define dsterf_ hypre_dsterf
|
|
#define dsyev_ hypre_dsyev
|
|
#define dsygst_ hypre_dsygst
|
|
#define dsygv_ hypre_dsygv
|
|
#define dsytd2_ hypre_dsytd2
|
|
#define dsytrd_ hypre_dsytrd
|
|
#define ieeeck_ hypre_ieeeck
|
|
#define ilaenv_ hypre_ilaenv
|
|
#define d_lg10_ hypre_d_lg10
|
|
#define d_sign_ hypre_d_sign
|
|
#define pow_di_ hypre_pow_di
|
|
#define pow_dd_ hypre_pow_dd
|
|
#define s_cat_ hypre_s_cat
|
|
#define lsame_ hypre_lsame
|
|
#define xerbla_ hypre_xerbla
|
|
#define dbdsqr_ hypre_dbdsqr
|
|
#define dorgbr_ hypre_dorgbr
|
|
#define dsygs2_ hypre_dsygs2
|
|
#define dorglq_ hypre_dorglq
|
|
#define dlacpy_ hypre_dlacpy
|
|
#define dormbr_ hypre_dormbr
|
|
#define dlasq1_ hypre_dlasq1
|
|
#define dlas2_ hypre_dlas2
|
|
#define dlasv2_ hypre_dlasv2
|
|
#define dorgl2_ hypre_dorgl2
|
|
#define dlasq2_ hypre_dlasq2
|
|
#define dlasq3_ hypre_dlasq3
|
|
#define dlasq4_ hypre_dlasq4
|
|
#define dlasq5_ hypre_dlasq5
|
|
#define dlasq6_ hypre_dlasq6
|
|
|
|
#define s_cmp hypre_F90_NAME_BLAS(s_cmp,S_CMP)
|
|
#define s_copy hypre_F90_NAME_BLAS(s_copy,S_COPY)
|
|
#define d_lg10 hypre_d_lg10
|
|
#define d_sign hypre_d_sign
|
|
#define pow_dd hypre_pow_dd
|
|
#define pow_di hypre_pow_di
|
|
#define s_cat hypre_s_cat
|
|
|
|
/* --------------------------------------------------------------------------
|
|
* Prototypes
|
|
* --------------------------------------------------------------------------*/
|
|
|
|
/* dgebd2.c */
|
|
HYPRE_Int dgebd2_ ( integer *m , integer *n , doublereal *a , integer *lda , doublereal *d__ , doublereal *e , doublereal *tauq , doublereal *taup , doublereal *work , integer *info );
|
|
|
|
/* dgebrd.c */
|
|
HYPRE_Int dgebrd_ ( integer *m , integer *n , doublereal *a , integer *lda , doublereal *d__ , doublereal *e , doublereal *tauq , doublereal *taup , doublereal *work , integer *lwork , integer *info );
|
|
|
|
/* dgelq2.c */
|
|
HYPRE_Int dgelq2_ ( integer *m , integer *n , doublereal *a , integer *lda , doublereal *tau , doublereal *work , integer *info );
|
|
|
|
/* dgelqf.c */
|
|
HYPRE_Int dgelqf_ ( integer *m , integer *n , doublereal *a , integer *lda , doublereal *tau , doublereal *work , integer *lwork , integer *info );
|
|
|
|
/* dgels.c */
|
|
HYPRE_Int dgels_ ( char *trans , integer *m , integer *n , integer *nrhs , doublereal *a , integer *lda , doublereal *b , integer *ldb , doublereal *work , integer *lwork , integer *info );
|
|
|
|
/* dgeqr2.c */
|
|
HYPRE_Int dgeqr2_ ( integer *m , integer *n , doublereal *a , integer *lda , doublereal *tau , doublereal *work , integer *info );
|
|
|
|
/* dgeqrf.c */
|
|
HYPRE_Int dgeqrf_ ( integer *m , integer *n , doublereal *a , integer *lda , doublereal *tau , doublereal *work , integer *lwork , integer *info );
|
|
|
|
/* dgesvd.c */
|
|
HYPRE_Int dgesvd_ ( char *jobu , char *jobvt , integer *m , integer *n , doublereal *a , integer *lda , doublereal *s , doublereal *u , integer *ldu , doublereal *vt , integer *ldvt , doublereal *work , integer *lwork , integer *info );
|
|
|
|
|
|
/* dgetf2.c */
|
|
HYPRE_Int dgetf2_( integer *m , integer *n , doublereal *a , integer *lda , integer *ipiv , integer *info );
|
|
|
|
/* dgetrf.c */
|
|
HYPRE_Int dgetrf_( integer *m , integer *n , doublereal *a , integer *lda , integer *ipiv , integer *info );
|
|
|
|
/* dgetrs.c */
|
|
HYPRE_Int dgetrs_( char *trans , integer *n , integer *nrhs , doublereal *a , integer *lda , integer *ipiv , doublereal *b , integer *ldb , integer *info );
|
|
|
|
/* dlabad.c */
|
|
HYPRE_Int dlabad_ ( doublereal *small , doublereal *large );
|
|
|
|
/* dlabrd.c */
|
|
HYPRE_Int dlabrd_ ( integer *m , integer *n , integer *nb , doublereal *a , integer *lda , doublereal *d__ , doublereal *e , doublereal *tauq , doublereal *taup , doublereal *x , integer *ldx , doublereal *y , integer *ldy );
|
|
|
|
/* dlae2.c */
|
|
HYPRE_Int dlae2_ ( doublereal *a , doublereal *b , doublereal *c__ , doublereal *rt1 , doublereal *rt2 );
|
|
|
|
/* dlaev2.c */
|
|
HYPRE_Int dlaev2_ ( doublereal *a , doublereal *b , doublereal *c__ , doublereal *rt1 , doublereal *rt2 , doublereal *cs1 , doublereal *sn1 );
|
|
|
|
/* dlamch.c */
|
|
doublereal dlamch_ ( char *cmach );
|
|
HYPRE_Int dlamc1_ ( integer *beta , integer *t , logical *rnd , logical *ieee1 );
|
|
HYPRE_Int dlamc2_ ( integer *beta , integer *t , logical *rnd , doublereal *eps , integer *emin , doublereal *rmin , integer *emax , doublereal *rmax );
|
|
doublereal dlamc3_ ( doublereal *a , doublereal *b );
|
|
HYPRE_Int dlamc4_ ( integer *emin , doublereal *start , integer *base );
|
|
HYPRE_Int dlamc5_ ( integer *beta , integer *p , integer *emin , logical *ieee , integer *emax , doublereal *rmax );
|
|
|
|
|
|
/* dlaswp.c */
|
|
HYPRE_Int dlaswp_( integer *n , doublereal *a , integer *lda , integer *k1 , integer *k2 , integer *ipiv , integer *incx );
|
|
|
|
/* dlange.c */
|
|
doublereal dlange_ ( char *norm , integer *m , integer *n , doublereal *a , integer *lda , doublereal *work );
|
|
|
|
/* dlanst.c */
|
|
doublereal dlanst_ ( char *norm , integer *n , doublereal *d__ , doublereal *e );
|
|
|
|
/* dlansy.c */
|
|
doublereal dlansy_ ( char *norm , char *uplo , integer *n , doublereal *a , integer *lda , doublereal *work );
|
|
|
|
/* dlapy2.c */
|
|
doublereal dlapy2_ ( doublereal *x , doublereal *y );
|
|
|
|
/* dlarf.c */
|
|
HYPRE_Int dlarf_ ( char *side , integer *m , integer *n , doublereal *v , integer *incv , doublereal *tau , doublereal *c__ , integer *ldc , doublereal *work );
|
|
|
|
/* dlarfb.c */
|
|
HYPRE_Int dlarfb_ ( char *side , char *trans , char *direct , char *storev , integer *m , integer *n , integer *k , doublereal *v , integer *ldv , doublereal *t , integer *ldt , doublereal *c__ , integer *ldc , doublereal *work , integer *ldwork );
|
|
|
|
/* dlarfg.c */
|
|
HYPRE_Int dlarfg_ ( integer *n , doublereal *alpha , doublereal *x , integer *incx , doublereal *tau );
|
|
|
|
/* dlarft.c */
|
|
HYPRE_Int dlarft_ ( char *direct , char *storev , integer *n , integer *k , doublereal *v , integer *ldv , doublereal *tau , doublereal *t , integer *ldt );
|
|
|
|
/* dlartg.c */
|
|
HYPRE_Int dlartg_ ( doublereal *f , doublereal *g , doublereal *cs , doublereal *sn , doublereal *r__ );
|
|
|
|
/* dlascl.c */
|
|
HYPRE_Int dlascl_ ( char *type__ , integer *kl , integer *ku , doublereal *cfrom , doublereal *cto , integer *m , integer *n , doublereal *a , integer *lda , integer *info );
|
|
|
|
/* dlaset.c */
|
|
HYPRE_Int dlaset_ ( char *uplo , integer *m , integer *n , doublereal *alpha , doublereal *beta , doublereal *a , integer *lda );
|
|
|
|
/* dlasr.c */
|
|
HYPRE_Int dlasr_ ( char *side , char *pivot , char *direct , integer *m , integer *n , doublereal *c__ , doublereal *s , doublereal *a , integer *lda );
|
|
|
|
/* dlasrt.c */
|
|
HYPRE_Int dlasrt_ ( char *id , integer *n , doublereal *d__ , integer *info );
|
|
|
|
/* dlassq.c */
|
|
HYPRE_Int dlassq_ ( integer *n , doublereal *x , integer *incx , doublereal *scale , doublereal *sumsq );
|
|
|
|
/* dlatrd.c */
|
|
HYPRE_Int dlatrd_ ( char *uplo , integer *n , integer *nb , doublereal *a , integer *lda , doublereal *e , doublereal *tau , doublereal *w , integer *ldw );
|
|
|
|
/* dorg2l.c */
|
|
HYPRE_Int dorg2l_ ( integer *m , integer *n , integer *k , doublereal *a , integer *lda , doublereal *tau , doublereal *work , integer *info );
|
|
|
|
/* dorg2r.c */
|
|
HYPRE_Int dorg2r_ ( integer *m , integer *n , integer *k , doublereal *a , integer *lda , doublereal *tau , doublereal *work , integer *info );
|
|
|
|
/* dorgql.c */
|
|
HYPRE_Int dorgql_ ( integer *m , integer *n , integer *k , doublereal *a , integer *lda , doublereal *tau , doublereal *work , integer *lwork , integer *info );
|
|
|
|
/* dorgqr.c */
|
|
HYPRE_Int dorgqr_ ( integer *m , integer *n , integer *k , doublereal *a , integer *lda , doublereal *tau , doublereal *work , integer *lwork , integer *info );
|
|
|
|
/* dorgtr.c */
|
|
HYPRE_Int dorgtr_ ( char *uplo , integer *n , doublereal *a , integer *lda , doublereal *tau , doublereal *work , integer *lwork , integer *info );
|
|
|
|
/* dorm2r.c */
|
|
HYPRE_Int dorm2r_ ( char *side , char *trans , integer *m , integer *n , integer *k , doublereal *a , integer *lda , doublereal *tau , doublereal *c__ , integer *ldc , doublereal *work , integer *info );
|
|
|
|
/* dorml2.c */
|
|
HYPRE_Int dorml2_ ( char *side , char *trans , integer *m , integer *n , integer *k , doublereal *a , integer *lda , doublereal *tau , doublereal *c__ , integer *ldc , doublereal *work , integer *info );
|
|
|
|
/* dormlq.c */
|
|
HYPRE_Int dormlq_ ( char *side , char *trans , integer *m , integer *n , integer *k , doublereal *a , integer *lda , doublereal *tau , doublereal *c__ , integer *ldc , doublereal *work , integer *lwork , integer *info );
|
|
|
|
/* dormqr.c */
|
|
HYPRE_Int dormqr_ ( char *side , char *trans , integer *m , integer *n , integer *k , doublereal *a , integer *lda , doublereal *tau , doublereal *c__ , integer *ldc , doublereal *work , integer *lwork , integer *info );
|
|
|
|
/* dpotf2.c */
|
|
HYPRE_Int dpotf2_ ( char *uplo , integer *n , doublereal *a , integer *lda , integer *info );
|
|
|
|
/* dpotrf.c */
|
|
HYPRE_Int dpotrf_ ( char *uplo , integer *n , doublereal *a , integer *lda , integer *info );
|
|
|
|
/* dpotrs.c */
|
|
HYPRE_Int dpotrs_ ( char *uplo , integer *n , integer *nrhs , doublereal *a , integer *lda , doublereal *b , integer *ldb , integer *info );
|
|
|
|
/* dsteqr.c */
|
|
HYPRE_Int dsteqr_ ( char *compz , integer *n , doublereal *d__ , doublereal *e , doublereal *z__ , integer *ldz , doublereal *work , integer *info );
|
|
|
|
/* dsterf.c */
|
|
HYPRE_Int dsterf_ ( integer *n , doublereal *d__ , doublereal *e , integer *info );
|
|
|
|
/* dsyev.c */
|
|
HYPRE_Int dsyev_ ( char *jobz , char *uplo , integer *n , doublereal *a , integer *lda , doublereal *w , doublereal *work , integer *lwork , integer *info );
|
|
|
|
/* dsygst.c */
|
|
HYPRE_Int dsygst_ ( integer *itype , char *uplo , integer *n , doublereal *a , integer *lda , doublereal *b , integer *ldb , integer *info );
|
|
|
|
/* dsygv.c */
|
|
HYPRE_Int dsygv_ ( integer *itype , char *jobz , char *uplo , integer *n , doublereal *a , integer *lda , doublereal *b , integer *ldb , doublereal *w , doublereal *work , integer *lwork , integer *info );
|
|
|
|
/* dsytd2.c */
|
|
HYPRE_Int dsytd2_ ( char *uplo , integer *n , doublereal *a , integer *lda , doublereal *d__ , doublereal *e , doublereal *tau , integer *info );
|
|
|
|
/* dsytrd.c */
|
|
HYPRE_Int dsytrd_ ( char *uplo , integer *n , doublereal *a , integer *lda , doublereal *d__ , doublereal *e , doublereal *tau , doublereal *work , integer *lwork , integer *info );
|
|
|
|
/* ieeeck.c */
|
|
integer ieeeck_ ( integer *ispec , real *zero , real *one );
|
|
|
|
/* ilaenv.c */
|
|
integer ilaenv_ ( integer *ispec , char *name__ , char *opts , integer *n1 , integer *n2 , integer *n3 , integer *n4 , ftnlen name_len , ftnlen opts_len );
|
|
|
|
/* lapack_utils.c */
|
|
HYPRE_Real d_lg10 ( doublereal *x );
|
|
HYPRE_Real d_sign ( doublereal *a , doublereal *b );
|
|
HYPRE_Real pow_di ( doublereal *ap , integer *bp );
|
|
HYPRE_Real pow_dd ( doublereal *ap , doublereal *bp );
|
|
HYPRE_Int s_cat ( char *lp , char *rpp [], ftnlen rnp [], ftnlen *np , ftnlen ll );
|
|
|
|
/* lsame.c */
|
|
logical lsame_ ( char *ca , char *cb );
|
|
|
|
/* xerbla.c */
|
|
HYPRE_Int xerbla_ ( char *srname , integer *info );
|
|
|
|
/* dbdsqr.c */
|
|
HYPRE_Int dbdsqr_ ( char *uplo , integer *n , integer *ncvt , integer *nru , integer *ncc , doublereal *d__ , doublereal *e , doublereal *vt , integer *ldvt , doublereal *u , integer *ldu , doublereal *c__ , integer *ldc , doublereal *work , integer *info );
|
|
|
|
/* dorgbr.c */
|
|
HYPRE_Int dorgbr_ ( char *vect , integer *m , integer *n , integer *k , doublereal *a , integer *lda , doublereal *tau , doublereal *work , integer *lwork , integer *info );
|
|
|
|
/* dsygs2.c */
|
|
HYPRE_Int dsygs2_ ( integer *itype , char *uplo , integer *n , doublereal *a , integer *lda , doublereal *b , integer *ldb , integer *info );
|
|
|
|
/* dorglq.c */
|
|
HYPRE_Int dorglq_ ( integer *m , integer *n , integer *k , doublereal *a , integer *lda , doublereal *tau , doublereal *work , integer *lwork , integer *info );
|
|
|
|
/* dlacpy.c */
|
|
HYPRE_Int dlacpy_ ( char *uplo , integer *m , integer *n , doublereal *a , integer *lda , doublereal *b , integer *ldb );
|
|
|
|
/* dormbr.c */
|
|
HYPRE_Int dormbr_ ( char *vect , char *side , char *trans , integer *m , integer *n , integer *k , doublereal *a , integer *lda , doublereal *tau , doublereal *c__ , integer *ldc , doublereal *work , integer *lwork , integer *info );
|
|
|
|
/* dlasq1.c */
|
|
HYPRE_Int dlasq1_ ( integer *n , doublereal *d__ , doublereal *e , doublereal *work , integer *info );
|
|
|
|
/* dlas2.c */
|
|
HYPRE_Int dlas2_ ( doublereal *f , doublereal *g , doublereal *h__ , doublereal *ssmin , doublereal *ssmax );
|
|
|
|
/* dlasv2.c */
|
|
HYPRE_Int dlasv2_ ( doublereal *f , doublereal *g , doublereal *h__ , doublereal *ssmin , doublereal *ssmax , doublereal *snr , doublereal *csr , doublereal *snl , doublereal *csl );
|
|
|
|
/* dorgl2.c */
|
|
HYPRE_Int dorgl2_ ( integer *m , integer *n , integer *k , doublereal *a , integer *lda , doublereal *tau , doublereal *work , integer *info );
|
|
|
|
/* dlasq2.c */
|
|
HYPRE_Int dlasq2_ ( integer *n , doublereal *z__ , integer *info );
|
|
|
|
/* dlasq3.c */
|
|
HYPRE_Int dlasq3_ ( integer *i0 , integer *n0 , doublereal *z__ , integer *pp , doublereal *dmin__ , doublereal *sigma , doublereal *desig , doublereal *qmax , integer *nfail , integer *iter , integer *ndiv , logical *ieee );
|
|
|
|
/* dlasq4.c */
|
|
HYPRE_Int dlasq4_ ( integer *i0 , integer *n0 , doublereal *z__ , integer *pp , integer *n0in , doublereal *dmin__ , doublereal *dmin1 , doublereal *dmin2 , doublereal *dn , doublereal *dn1 , doublereal *dn2 , doublereal *tau , integer *ttype );
|
|
|
|
/* dlasq5.c */
|
|
HYPRE_Int dlasq5_ ( integer *i0 , integer *n0 , doublereal *z__ , integer *pp , doublereal *tau , doublereal *dmin__ , doublereal *dmin1 , doublereal *dmin2 , doublereal *dn , doublereal *dnm1 , doublereal *dnm2 , logical *ieee );
|
|
|
|
/* dlasq6.c */
|
|
HYPRE_Int dlasq6_ ( integer *i0 , integer *n0 , doublereal *z__ , integer *pp , doublereal *dmin__ , doublereal *dmin1 , doublereal *dmin2 , doublereal *dn , doublereal *dnm1 , doublereal *dnm2 );
|
|
|
|
#endif
|