Added Fortran interface for AMS.
This commit is contained in:
parent
c4d9da0d6c
commit
6362cc6ab3
348
parcsr_ls/F90_HYPRE_ams.c
Normal file
348
parcsr_ls/F90_HYPRE_ams.c
Normal file
@ -0,0 +1,348 @@
|
||||
/*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_AMS Fortran interface
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#include "headers.h"
|
||||
#include "fortran.h"
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* HYPRE_AMSCreate
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
void
|
||||
hypre_F90_IFACE(hypre_amscreate, HYPRE_AMSCREATE)(
|
||||
long int *solver,
|
||||
int *ierr)
|
||||
|
||||
{
|
||||
*ierr = (int) ( HYPRE_AMSCreate( (HYPRE_Solver *) solver ) );
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* HYPRE_AMSDestroy
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
void
|
||||
hypre_F90_IFACE(hypre_amsdestroy, HYPRE_AMSDESTROY)(
|
||||
long int *solver,
|
||||
int *ierr)
|
||||
{
|
||||
*ierr = (int) ( HYPRE_AMSDestroy( (HYPRE_Solver) *solver ) );
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* HYPRE_AMSSetup
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
void
|
||||
hypre_F90_IFACE(hypre_amssetup, HYPRE_AMSSETUP)(
|
||||
long int *solver,
|
||||
long int *A,
|
||||
long int *b,
|
||||
long int *x,
|
||||
int *ierr)
|
||||
{
|
||||
*ierr = (int) ( HYPRE_AMSSetup( (HYPRE_Solver) *solver,
|
||||
(HYPRE_ParCSRMatrix) *A,
|
||||
(HYPRE_ParVector) *b,
|
||||
(HYPRE_ParVector) *x ) );
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* HYPRE_AMSSolve
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
void
|
||||
hypre_F90_IFACE(hypre_amssolve, HYPRE_AMSSOLVE)(
|
||||
long int *solver,
|
||||
long int *A,
|
||||
long int *b,
|
||||
long int *x,
|
||||
int *ierr)
|
||||
{
|
||||
*ierr = (int) ( HYPRE_AMSSolve( (HYPRE_Solver) *solver,
|
||||
(HYPRE_ParCSRMatrix) *A,
|
||||
(HYPRE_ParVector) *b,
|
||||
(HYPRE_ParVector) *x ) );
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* HYPRE_AMSSetDimension
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
void
|
||||
hypre_F90_IFACE(hypre_amssetdimension, HYPRE_AMSSETDIMENSION)(
|
||||
long int *solver,
|
||||
int *dim,
|
||||
int *ierr)
|
||||
{
|
||||
*ierr = (int) ( HYPRE_AMSSetDimension( (HYPRE_Solver) *solver,
|
||||
(int) *dim ) );
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* HYPRE_AMSSetDiscreteGradient
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
void
|
||||
hypre_F90_IFACE(hypre_amssetdiscretegradient, HYPRE_AMSSETDISCRETEGRADIENT)(
|
||||
long int *solver,
|
||||
long int *G,
|
||||
int *ierr)
|
||||
{
|
||||
*ierr = (int) ( HYPRE_AMSSetDiscreteGradient( (HYPRE_Solver) *solver,
|
||||
(HYPRE_ParCSRMatrix) *G ) );
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* HYPRE_AMSSetCoordinateVectors
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
void
|
||||
hypre_F90_IFACE(hypre_amssetcoordinatevectors, HYPRE_AMSSETCOORDINATEVECTORS)(
|
||||
long int *solver,
|
||||
long int *x,
|
||||
long int *y,
|
||||
long int *z,
|
||||
int *ierr)
|
||||
{
|
||||
*ierr = (int) ( HYPRE_AMSSetCoordinateVectors( (HYPRE_Solver) *solver,
|
||||
(HYPRE_ParVector) *x,
|
||||
(HYPRE_ParVector) *y,
|
||||
(HYPRE_ParVector) *z ) );
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* HYPRE_AMSSetEdgeConstantVectors
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
void
|
||||
hypre_F90_IFACE(hypre_amssetedgeconstantvectors, HYPRE_AMSSETEDGECONSTANTVECTORS)(
|
||||
long int *solver,
|
||||
long int *Gx,
|
||||
long int *Gy,
|
||||
long int *Gz,
|
||||
int *ierr)
|
||||
{
|
||||
*ierr = (int) ( HYPRE_AMSSetEdgeConstantVectors( (HYPRE_Solver) *solver,
|
||||
(HYPRE_ParVector) *Gx,
|
||||
(HYPRE_ParVector) *Gy,
|
||||
(HYPRE_ParVector) *Gz ) );
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* HYPRE_AMSSetAlphaPoissonMatrix
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
void
|
||||
hypre_F90_IFACE(hypre_amssetalphapoissonmatrix, HYPRE_AMSSETALPHAPOISSONMATRIX)(
|
||||
long int *solver,
|
||||
long int *A_alpha,
|
||||
int *ierr)
|
||||
{
|
||||
*ierr = (int) ( HYPRE_AMSSetAlphaPoissonMatrix( (HYPRE_Solver) *solver,
|
||||
(HYPRE_ParCSRMatrix) *A_alpha ) );
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* HYPRE_AMSSetBetaPoissonMatrix
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
void
|
||||
hypre_F90_IFACE(hypre_amssetbetapoissonmatrix, HYPRE_AMSSETBETAPOISSONMATRIX)(
|
||||
long int *solver,
|
||||
long int *A_beta,
|
||||
int *ierr)
|
||||
{
|
||||
*ierr = (int) ( HYPRE_AMSSetBetaPoissonMatrix( (HYPRE_Solver) *solver,
|
||||
(HYPRE_ParCSRMatrix) *A_beta ) );
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* HYPRE_AMSSetMaxIter
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
void
|
||||
hypre_F90_IFACE(hypre_amssetmaxiter, HYPRE_AMSSETMAXITER)(
|
||||
long int *solver,
|
||||
int *maxiter,
|
||||
int *ierr)
|
||||
{
|
||||
*ierr = (int) ( HYPRE_AMSSetMaxIter( (HYPRE_Solver) *solver,
|
||||
(int) *maxiter ) );
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* HYPRE_AMSSetTol
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
void
|
||||
hypre_F90_IFACE(hypre_amssettol, HYPRE_AMSSETTOL)(
|
||||
long int *solver,
|
||||
double *tol,
|
||||
int *ierr)
|
||||
{
|
||||
*ierr = (int) ( HYPRE_AMSSetTol( (HYPRE_Solver) *solver,
|
||||
(double) *tol ) );
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* HYPRE_AMSSetCycleType
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
void
|
||||
hypre_F90_IFACE(hypre_amssetcycletype, HYPRE_AMSSETCYCLETYPE)(
|
||||
long int *solver,
|
||||
int *cycle_type,
|
||||
int *ierr)
|
||||
{
|
||||
*ierr = (int) ( HYPRE_AMSSetCycleType( (HYPRE_Solver) *solver,
|
||||
(int) *cycle_type ) );
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* HYPRE_AMSSetPrintLevel
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
void
|
||||
hypre_F90_IFACE(hypre_amssetprintlevel, HYPRE_AMSSETPRINTLEVEL)(
|
||||
long int *solver,
|
||||
int *print_level,
|
||||
int *ierr)
|
||||
{
|
||||
*ierr = (int) ( HYPRE_AMSSetPrintLevel( (HYPRE_Solver) *solver,
|
||||
(int) *print_level ) );
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* HYPRE_AMSSetSmoothingOptions
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
void
|
||||
hypre_F90_IFACE(hypre_amssetsmoothingoptions, HYPRE_AMSSETSMOOTHINGOPTIONS)(
|
||||
long int *solver,
|
||||
int *relax_type,
|
||||
int *relax_times,
|
||||
double *relax_weight,
|
||||
double *omega,
|
||||
int *ierr)
|
||||
{
|
||||
*ierr = (int) ( HYPRE_AMSSetSmoothingOptions( (HYPRE_Solver) *solver,
|
||||
(int) *relax_type,
|
||||
(int) *relax_times,
|
||||
(double) *relax_weight,
|
||||
(double) *omega ) );
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* HYPRE_AMSSetAlphaAMGOptions
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
void
|
||||
hypre_F90_IFACE(hypre_amssetalphaamgoptions, HYPRE_AMSSETALPHAAMGOPTIONS)(
|
||||
long int *solver,
|
||||
int *alpha_coarsen_type,
|
||||
int *alpha_agg_levels,
|
||||
int *alpha_relax_type,
|
||||
double *alpha_strength_threshold,
|
||||
int *alpha_interp_type,
|
||||
int *alpha_Pmax,
|
||||
int *ierr)
|
||||
|
||||
{
|
||||
*ierr = (int) ( HYPRE_AMSSetAlphaAMGOptions( (HYPRE_Solver) *solver,
|
||||
(int) *alpha_coarsen_type,
|
||||
(int) *alpha_agg_levels,
|
||||
(int) *alpha_relax_type,
|
||||
(double) *alpha_strength_threshold,
|
||||
(int) *alpha_interp_type,
|
||||
(int) *alpha_Pmax ) );
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* HYPRE_AMSSetBetaAMGOptions
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
void
|
||||
hypre_F90_IFACE(hypre_amssetbetaamgoptions, HYPRE_AMSSETBETAAMGOPTIONS)(
|
||||
long int *solver,
|
||||
int *beta_coarsen_type,
|
||||
int *beta_agg_levels,
|
||||
int *beta_relax_type,
|
||||
double *beta_strength_threshold,
|
||||
int *beta_interp_type,
|
||||
int *beta_Pmax,
|
||||
int *ierr)
|
||||
|
||||
{
|
||||
*ierr = (int) ( HYPRE_AMSSetBetaAMGOptions( (HYPRE_Solver) *solver,
|
||||
(int) *beta_coarsen_type,
|
||||
(int) *beta_agg_levels,
|
||||
(int) *beta_relax_type,
|
||||
(double) *beta_strength_threshold,
|
||||
(int) *beta_interp_type,
|
||||
(int) *beta_Pmax ) );
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* HYPRE_AMSGetNumIterations
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
void
|
||||
hypre_F90_IFACE(hypre_amsgetnumiterations, HYPRE_AMSGETNUMITERATIONS)(
|
||||
long int *solver,
|
||||
int *num_iterations,
|
||||
int *ierr)
|
||||
{
|
||||
*ierr = (int) ( HYPRE_AMSGetNumIterations( (HYPRE_Solver) *solver,
|
||||
(int *) num_iterations ) );
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* HYPRE_AMSGetFinalRelativeResidualNorm
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
void
|
||||
hypre_F90_IFACE(hypre_amsgetfinalrelativeresidualnorm, HYPRE_AMSGETFINALRELATIVERESIDUALNORM)(
|
||||
long int *solver,
|
||||
double *rel_resid_norm,
|
||||
int *ierr)
|
||||
{
|
||||
*ierr = (int) ( HYPRE_AMSGetFinalRelativeResidualNorm( (HYPRE_Solver) *solver,
|
||||
(double *) rel_resid_norm ) );
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* HYPRE_AMSConstructDiscreteGradient
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
void
|
||||
hypre_F90_IFACE(hypre_amsconstructdiscretegradient, HYPRE_AMSCONSTRUCTDISCRETEGRADIENT)(
|
||||
long int *A,
|
||||
long int *x_coord,
|
||||
int *edge_vertex,
|
||||
int *edge_orientation,
|
||||
long int *G,
|
||||
int *ierr)
|
||||
{
|
||||
*ierr = (int) ( HYPRE_AMSConstructDiscreteGradient( (HYPRE_ParCSRMatrix) *A,
|
||||
(HYPRE_ParVector) *x_coord,
|
||||
(int *) edge_vertex,
|
||||
(int) *edge_orientation,
|
||||
(HYPRE_ParCSRMatrix *) G ) );
|
||||
}
|
||||
@ -72,6 +72,7 @@ FILES =\
|
||||
F90_HYPRE_parcsr_pcg.c\
|
||||
F90_HYPRE_parcsr_pilut.c\
|
||||
F90_HYPRE_parcsr_schwarz.c\
|
||||
F90_HYPRE_ams.c\
|
||||
HYPRE_parcsr_amg.c\
|
||||
HYPRE_parcsr_bicgstab.c\
|
||||
HYPRE_parcsr_block.c\
|
||||
|
||||
Loading…
Reference in New Issue
Block a user