hypre/struct_ls/F90_HYPRE_struct_pcg.c
falgout c4ae5f02f8 Changed fortran interface port to (hopefully) support CRAY fortran
compilers and any other fortran compilers that mangle subroutine
names using all caps.
2000-10-09 22:32:34 +00:00

258 lines
10 KiB
C

/*BHEADER**********************************************************************
* (c) 1998 The Regents of the University of California
*
* See the file COPYRIGHT_and_DISCLAIMER for a complete copyright
* notice, contact person, and disclaimer.
*
* $Revision$
*********************************************************************EHEADER*/
#include "headers.h"
#include "fortran.h"
/*--------------------------------------------------------------------------
* HYPRE_StructPCGCreate
*--------------------------------------------------------------------------*/
void
hypre_F90_IFACE(hypre_structpcgcreate, HYPRE_STRUCTPCGCREATE)( int *comm,
long int *solver,
int *ierr )
{
*ierr = (int)
( HYPRE_StructPCGCreate( (MPI_Comm) *comm,
(HYPRE_StructSolver *) solver ) );
}
/*--------------------------------------------------------------------------
* HYPRE_StructPCGDestroy
*--------------------------------------------------------------------------*/
void
hypre_F90_IFACE(hypre_structpcgdestroy, HYPRE_STRUCTPCGDESTROY)( long int *solver,
int *ierr )
{
*ierr = (int) ( HYPRE_StructPCGDestroy( (HYPRE_StructSolver) *solver ) );
}
/*--------------------------------------------------------------------------
* HYPRE_StructPCGSetup
*--------------------------------------------------------------------------*/
void
hypre_F90_IFACE(hypre_structpcgsetup, HYPRE_STRUCTPCGSETUP)( long int *solver,
long int *A,
long int *b,
long int *x,
int *ierr )
{
*ierr = (int) ( HYPRE_StructPCGSetup( (HYPRE_StructSolver) *solver,
(HYPRE_StructMatrix) *A,
(HYPRE_StructVector) *b,
(HYPRE_StructVector) *x ) );
}
/*--------------------------------------------------------------------------
* HYPRE_StructPCGSolve
*--------------------------------------------------------------------------*/
void
hypre_F90_IFACE(hypre_structpcgsolve, HYPRE_STRUCTPCGSOLVE)( long int *solver,
long int *A,
long int *b,
long int *x,
int *ierr )
{
*ierr = (int) ( HYPRE_StructPCGSolve( (HYPRE_StructSolver) *solver,
(HYPRE_StructMatrix) *A,
(HYPRE_StructVector) *b,
(HYPRE_StructVector) *x ) );
}
/*--------------------------------------------------------------------------
* HYPRE_StructPCGSetTol
*--------------------------------------------------------------------------*/
void
hypre_F90_IFACE(hypre_structpcgsettol, HYPRE_STRUCTPCGSETTOL)( long int *solver,
double *tol,
int *ierr )
{
*ierr = (int) ( HYPRE_StructPCGSetTol( (HYPRE_StructSolver) *solver,
(double) *tol ) );
}
/*--------------------------------------------------------------------------
* HYPRE_StructPCGSetMaxIter
*--------------------------------------------------------------------------*/
void
hypre_F90_IFACE(hypre_structpcgsetmaxiter, HYPRE_STRUCTPCGSETMAXITER)( long int *solver,
int *max_iter,
int *ierr )
{
*ierr = (int)
( HYPRE_StructPCGSetMaxIter( (HYPRE_StructSolver) *solver,
(int) *max_iter ) );
}
/*--------------------------------------------------------------------------
* HYPRE_StructPCGSetTwoNorm
*--------------------------------------------------------------------------*/
void
hypre_F90_IFACE(hypre_structpcgsettwonorm, HYPRE_STRUCTPCGSETTWONORM)( long int *solver,
int *two_norm,
int *ierr )
{
*ierr = (int)
( HYPRE_StructPCGSetTwoNorm( (HYPRE_StructSolver) *solver,
(int) *two_norm ) );
}
/*--------------------------------------------------------------------------
* HYPRE_StructPCGSetRelChange
*--------------------------------------------------------------------------*/
void
hypre_F90_IFACE(hypre_structpcgsetrelchange, HYPRE_STRUCTPCGSETRELCHANGE)( long int *solver,
int *rel_change,
int *ierr )
{
*ierr = (int)
( HYPRE_StructPCGSetRelChange( (HYPRE_StructSolver) *solver,
(int) *rel_change ) );
}
/*--------------------------------------------------------------------------
* HYPRE_StructPCGSetPrecond
*--------------------------------------------------------------------------*/
void
hypre_F90_IFACE(hypre_structpcgsetprecond, HYPRE_STRUCTPCGSETPRECOND)( long int *solver,
int *precond_id,
long int *precond_solver,
int *ierr )
{
/*------------------------------------------------------------
* The precond_id flags mean :
* 0 - setup a smg preconditioner
* 1 - setup a pfmg preconditioner
* 8 - setup a ds preconditioner
* 9 - dont setup a preconditioner
*------------------------------------------------------------*/
if (*precond_id == 0)
{
*ierr = (int)
( HYPRE_StructPCGSetPrecond( (HYPRE_StructSolver) *solver,
HYPRE_StructSMGSolve,
HYPRE_StructSMGSetup,
(HYPRE_StructSolver) *precond_solver) );
}
else if (*precond_id == 1)
{
*ierr = (int)
( HYPRE_StructPCGSetPrecond( (HYPRE_StructSolver) *solver,
HYPRE_StructPFMGSolve,
HYPRE_StructPFMGSetup,
(HYPRE_StructSolver) *precond_solver) );
}
else if (*precond_id == 8)
{
*ierr = (int)
( HYPRE_StructPCGSetPrecond( (HYPRE_StructSolver) *solver,
HYPRE_StructDiagScale,
HYPRE_StructDiagScaleSetup,
(HYPRE_StructSolver) *precond_solver) );
}
else if (*precond_id == 9)
{
*ierr = 0;
}
else
{
*ierr = -1;
}
}
/*--------------------------------------------------------------------------
* HYPRE_StructPCGSetLogging
*--------------------------------------------------------------------------*/
void
hypre_F90_IFACE(hypre_structpcgsetlogging, HYPRE_STRUCTPCGSETLOGGING)( long int *solver,
int *logging,
int *ierr )
{
*ierr = (int)
( HYPRE_StructPCGSetLogging( (HYPRE_StructSolver) *solver,
(int) *logging ) );
}
/*--------------------------------------------------------------------------
* HYPRE_StructPCGGetNumIterations
*--------------------------------------------------------------------------*/
void
hypre_F90_IFACE(hypre_structpcggetnumiterations, HYPRE_STRUCTPCGGETNUMITERATIONS)( long int *solver,
int *num_iterations,
int *ierr )
{
*ierr = (int)
( HYPRE_StructPCGGetNumIterations(
(HYPRE_StructSolver) *solver,
(int *) num_iterations ) );
}
/*--------------------------------------------------------------------------
* HYPRE_StructPCGGetFinalRelativeResidualNorm
*--------------------------------------------------------------------------*/
void
hypre_F90_IFACE(hypre_structpcggetfinalrelative, HYPRE_STRUCTPCGGETFINALRELATIVE)( long int *solver,
double *norm,
int *ierr )
{
*ierr = (int)
( HYPRE_StructPCGGetFinalRelativeResidualNorm(
(HYPRE_StructSolver) *solver,
(double *) norm ) );
}
/*--------------------------------------------------------------------------
* HYPRE_StructDiagScaleSetup
*--------------------------------------------------------------------------*/
void
hypre_F90_IFACE(hypre_structdiagscalesetup, HYPRE_STRUCTDIAGSCALESETUP)( long int *solver,
long int *A,
long int *y,
long int *x,
int *ierr )
{
*ierr = (int) ( HYPRE_StructDiagScaleSetup( (HYPRE_StructSolver) *solver,
(HYPRE_StructMatrix) *A,
(HYPRE_StructVector) *y,
(HYPRE_StructVector) *x ) );
}
/*--------------------------------------------------------------------------
* HYPRE_StructDiagScale
*--------------------------------------------------------------------------*/
void
hypre_F90_IFACE(hypre_structdiagscale, HYPRE_STRUCTDIAGSCALE)( long int *solver,
long int *HA,
long int *Hy,
long int *Hx,
int *ierr )
{
*ierr = (int) ( HYPRE_StructDiagScale( (HYPRE_StructSolver) *solver,
(HYPRE_StructMatrix) *HA,
(HYPRE_StructVector) *Hy,
(HYPRE_StructVector) *Hx ) );
}