diff --git a/cbind/base/psb_c_tools_cbind_mod.F90 b/cbind/base/psb_c_tools_cbind_mod.F90 index b7895de2..644d2e1e 100644 --- a/cbind/base/psb_c_tools_cbind_mod.F90 +++ b/cbind/base/psb_c_tools_cbind_mod.F90 @@ -67,6 +67,38 @@ contains return end function psb_c_cgeall_remote + function psb_c_cgeall_remote_options(xh,cdh,bldmode,dupl) bind(c) result(res) + + implicit none + integer(psb_c_ipk_) :: res + type(psb_c_cvector) :: xh + type(psb_c_descriptor) :: cdh + integer(psb_c_ipk_), value :: dupl + integer(psb_c_ipk_), value :: bldmode + + + type(psb_desc_type), pointer :: descp + type(psb_c_vect_type), pointer :: xp + integer(psb_c_ipk_) :: info + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + return + end if + allocate(xp) + call psb_geall(xp,descp,info,bldmode=bldmode,dupl=dupl) + xh%item = c_loc(xp) + res = min(0,info) + + return + end function psb_c_cgeall_remote + function psb_c_cgeasb(xh,cdh) bind(c) result(res) implicit none diff --git a/cbind/base/psb_d_tools_cbind_mod.F90 b/cbind/base/psb_d_tools_cbind_mod.F90 index 2de6990c..c22198ef 100644 --- a/cbind/base/psb_d_tools_cbind_mod.F90 +++ b/cbind/base/psb_d_tools_cbind_mod.F90 @@ -67,6 +67,38 @@ contains return end function psb_c_dgeall_remote + function psb_c_dgeall_remote_options(xh,cdh,bldmode,dupl) bind(c) result(res) + + implicit none + integer(psb_c_ipk_) :: res + type(psb_c_dvector) :: xh + type(psb_c_descriptor) :: cdh + integer(psb_c_ipk_), value :: dupl + integer(psb_c_ipk_), value :: bldmode + + + type(psb_desc_type), pointer :: descp + type(psb_d_vect_type), pointer :: xp + integer(psb_c_ipk_) :: info + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + return + end if + allocate(xp) + call psb_geall(xp,descp,info,bldmode=bldmode,dupl=dupl) + xh%item = c_loc(xp) + res = min(0,info) + + return + end function psb_c_dgeall_remote + function psb_c_dgeasb(xh,cdh) bind(c) result(res) implicit none diff --git a/cbind/base/psb_s_tools_cbind_mod.F90 b/cbind/base/psb_s_tools_cbind_mod.F90 index 517ad361..7870d20c 100644 --- a/cbind/base/psb_s_tools_cbind_mod.F90 +++ b/cbind/base/psb_s_tools_cbind_mod.F90 @@ -67,6 +67,38 @@ contains return end function psb_c_sgeall_remote + function psb_c_sgeall_remote_options(xh,cdh,bldmode,dupl) bind(c) result(res) + + implicit none + integer(psb_c_ipk_) :: res + type(psb_c_svector) :: xh + type(psb_c_descriptor) :: cdh + integer(psb_c_ipk_), value :: dupl + integer(psb_c_ipk_), value :: bldmode + + + type(psb_desc_type), pointer :: descp + type(psb_s_vect_type), pointer :: xp + integer(psb_c_ipk_) :: info + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + return + end if + allocate(xp) + call psb_geall(xp,descp,info,bldmode=bldmode,dupl=dupl) + xh%item = c_loc(xp) + res = min(0,info) + + return + end function psb_c_sgeall_remote + function psb_c_sgeasb(xh,cdh) bind(c) result(res) implicit none diff --git a/cbind/base/psb_z_tools_cbind_mod.F90 b/cbind/base/psb_z_tools_cbind_mod.F90 index 3e94b715..534a8869 100644 --- a/cbind/base/psb_z_tools_cbind_mod.F90 +++ b/cbind/base/psb_z_tools_cbind_mod.F90 @@ -67,6 +67,38 @@ contains return end function psb_c_zgeall_remote + function psb_c_zgeall_remote_options(xh,cdh,bldmode,dupl) bind(c) result(res) + + implicit none + integer(psb_c_ipk_) :: res + type(psb_c_zvector) :: xh + type(psb_c_descriptor) :: cdh + integer(psb_c_ipk_), value :: dupl + integer(psb_c_ipk_), value :: bldmode + + + type(psb_desc_type), pointer :: descp + type(psb_z_vect_type), pointer :: xp + integer(psb_c_ipk_) :: info + + res = -1 + + if (c_associated(cdh%item)) then + call c_f_pointer(cdh%item,descp) + else + return + end if + if (c_associated(xh%item)) then + return + end if + allocate(xp) + call psb_geall(xp,descp,info,bldmode=bldmode,dupl=dupl) + xh%item = c_loc(xp) + res = min(0,info) + + return + end function psb_c_zgeall_remote + function psb_c_zgeasb(xh,cdh) bind(c) result(res) implicit none diff --git a/cbind/psb_c_cbase.h b/cbind/psb_c_cbase.h new file mode 100644 index 00000000..90b5ad09 --- /dev/null +++ b/cbind/psb_c_cbase.h @@ -0,0 +1,104 @@ +#ifndef PSB_C_CBASE_ +#define PSB_C_CBASE_ +#include "psb_c_base.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct PSB_C_CVECTOR { + void *cvector; +} psb_c_cvector; + +typedef struct PSB_C_CSPMAT { + void *cspmat; +} psb_c_cspmat; + + +/* dense vectors */ +psb_c_cvector* psb_c_new_cvector(); +psb_i_t psb_c_cvect_get_nrows(psb_c_cvector *xh); +psb_c_t *psb_c_cvect_get_cpy( psb_c_cvector *xh); +psb_i_t psb_c_cvect_f_get_cpy(psb_c_t *v, psb_c_cvector *xh); +psb_i_t psb_c_cvect_zero(psb_c_cvector *xh); +psb_i_t *psb_c_cvect_f_get_pnt(psb_c_cvector *xh); + +psb_i_t psb_c_cgeall(psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_cgeall_remote(psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_cgeall_remote_options(psb_c_cvector *xh, psb_c_descriptor *cdh, psb_i_t bldmode, psb_i_t dupl); +psb_i_t psb_c_cgeins(psb_i_t nz, const psb_l_t *irw, const psb_c_t *val, + psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_cgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_c_t *val, + psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_cgeasb(psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_cgefree(psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_c_t psb_c_cgetelem(psb_c_cvector *xh,psb_l_t index,psb_c_descriptor *cd); + +/* sparse matrices*/ +psb_c_cspmat* psb_c_new_cspmat(); +psb_i_t psb_c_cspall(psb_c_cspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_cspall_remote(psb_c_cspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_cspasb(psb_c_cspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_cspfree(psb_c_cspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_cspins(psb_i_t nz, const psb_l_t *irw, const psb_l_t *icl, + const psb_c_t *val, psb_c_cspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_cmat_get_nrows(psb_c_cspmat *mh); +psb_i_t psb_c_cmat_get_ncols(psb_c_cspmat *mh); +psb_l_t psb_c_cnnz(psb_c_cspmat *mh,psb_c_descriptor *cdh); +bool psb_c_cis_matupd(psb_c_cspmat *mh,psb_c_descriptor *cdh); +bool psb_c_cis_matasb(psb_c_cspmat *mh,psb_c_descriptor *cdh); +bool psb_c_cis_matbld(psb_c_cspmat *mh,psb_c_descriptor *cdh); +psb_i_t psb_c_cset_matupd(psb_c_cspmat *mh,psb_c_descriptor *cdh); +psb_i_t psb_c_cset_matasb(psb_c_cspmat *mh,psb_c_descriptor *cdh); +psb_i_t psb_c_cset_matbld(psb_c_cspmat *mh,psb_c_descriptor *cdh); +psb_i_t psb_c_ccopy_mat(psb_c_cspmat *ah,psb_c_cspmat *bh,psb_c_descriptor *cdh); + +/* psb_i_t psb_c_cspasb_opt(psb_c_cspmat *mh, psb_c_descriptor *cdh, */ +/* const char *afmt, psb_i_t upd, psb_i_t dupl); */ +psb_i_t psb_c_csprn(psb_c_cspmat *mh, psb_c_descriptor *cdh, _Bool clear); +psb_i_t psb_c_cmat_name_print(psb_c_cspmat *mh, char *name); +psb_i_t psb_c_cvect_set_scal(psb_c_cvector *xh, psb_c_t val); +psb_i_t psb_c_cvect_set_vect(psb_c_cvector *xh, psb_c_t *val, psb_i_t n); + +/* psblas computational routines */ +psb_c_t psb_c_cgedot(psb_c_cvector *xh, psb_c_cvector *yh, psb_c_descriptor *cdh); +psb_s_t psb_c_cgenrm2(psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_s_t psb_c_cgeamax(psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_s_t psb_c_cgeasum(psb_c_cvector *xh, psb_c_descriptor *cdh); +psb_s_t psb_c_cgenrmi(psb_c_cspmat *ah, psb_c_descriptor *cdh); +psb_i_t psb_c_cgeaxpby(psb_c_t alpha, psb_c_cvector *xh, + psb_c_t beta, psb_c_cvector *yh, psb_c_descriptor *cdh); +psb_i_t psb_c_cgeaxpbyz(psb_c_t alpha, psb_c_cvector *xh, + psb_c_t beta, psb_c_cvector *yh, psb_c_cvector *zh, psb_c_descriptor *cdh); +psb_i_t psb_c_cspmm(psb_c_t alpha, psb_c_cspmat *ah, psb_c_cvector *xh, + psb_c_t beta, psb_c_cvector *yh, psb_c_descriptor *cdh); +psb_i_t psb_c_cspmm_opt(psb_c_t alpha, psb_c_cspmat *ah, psb_c_cvector *xh, + psb_c_t beta, psb_c_cvector *yh, psb_c_descriptor *cdh, + char *trans, bool doswap); +psb_i_t psb_c_cspsm(psb_c_t alpha, psb_c_cspmat *th, psb_c_cvector *xh, + psb_c_t beta, psb_c_cvector *yh, psb_c_descriptor *cdh); +/* Additional computational routines */ +psb_i_t psb_c_cgemlt(psb_c_cvector *xh,psb_c_cvector *yh,psb_c_descriptor *cdh); +psb_i_t psb_c_cgemlt2(psb_c_t alpha, psb_c_cvector *xh, psb_c_cvector *yh, psb_c_t beta, psb_c_cvector *zh, psb_c_descriptor *cdh); +psb_i_t psb_c_cgediv(psb_c_cvector *xh,psb_c_cvector *yh,psb_c_descriptor *cdh); +psb_i_t psb_c_cgediv_check(psb_c_cvector *xh,psb_c_cvector *yh,psb_c_descriptor *cdh, bool flag); +psb_i_t psb_c_cgediv2(psb_c_cvector *xh,psb_c_cvector *yh,psb_c_cvector *zh,psb_c_descriptor *cdh); +psb_i_t psb_c_cgediv2_check(psb_c_cvector *xh,psb_c_cvector *yh,psb_c_cvector *zh,psb_c_descriptor *cdh, bool flag); +psb_i_t psb_c_cgeinv(psb_c_cvector *xh,psb_c_cvector *yh,psb_c_descriptor *cdh); +psb_i_t psb_c_cgeinv_check(psb_c_cvector *xh,psb_c_cvector *yh,psb_c_descriptor *cdh, bool flag); +psb_i_t psb_c_cgeabs(psb_c_cvector *xh,psb_c_cvector *yh,psb_c_cvector *cdh); +psb_i_t psb_c_cgecmp(psb_c_cvector *xh,psb_s_t ch,psb_c_cvector *zh,psb_c_descriptor *cdh); +bool psb_c_cgecmpmat(psb_c_cspmat *ah,psb_c_cspmat *bh,psb_s_t tol,psb_c_descriptor *cdh); +bool psb_c_cgecmpmat_val(psb_c_cspmat *ah,psb_c_t val,psb_s_t tol,psb_c_descriptor *cdh); +psb_i_t psb_c_cgeaddconst(psb_c_cvector *xh,psb_c_t bh,psb_c_cvector *zh,psb_c_descriptor *cdh); +psb_s_t psb_c_cgenrm2_weight(psb_c_cvector *xh,psb_c_cvector *wh,psb_c_descriptor *cdh); +psb_s_t psb_c_cgenrm2_weightmask(psb_c_cvector *xh,psb_c_cvector *wh,psb_c_cvector *idvh,psb_c_descriptor *cdh); +psb_i_t psb_c_cspscal(psb_c_t alpha, psb_c_cspmat *ah, psb_c_descriptor *cdh); +psb_i_t psb_c_cspscalpid(psb_c_t alpha, psb_c_cspmat *ah, psb_c_descriptor *cdh); +psb_i_t psb_c_cspaxpby(psb_c_t alpha, psb_c_cspmat *ah, psb_c_t beta, psb_c_cspmat *bh, psb_c_descriptor *cdh); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/cbind/psb_c_dbase.h b/cbind/psb_c_dbase.h new file mode 100644 index 00000000..6053268c --- /dev/null +++ b/cbind/psb_c_dbase.h @@ -0,0 +1,108 @@ +#ifndef PSB_C_DBASE_ +#define PSB_C_DBASE_ +#include "psb_c_base.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct PSB_C_DVECTOR { + void *dvector; +} psb_c_dvector; + +typedef struct PSB_C_DSPMAT { + void *dspmat; +} psb_c_dspmat; + + +/* dense vectors */ +psb_c_dvector* psb_c_new_dvector(); +psb_i_t psb_c_dvect_get_nrows(psb_c_dvector *xh); +psb_d_t *psb_c_dvect_get_cpy( psb_c_dvector *xh); +psb_i_t psb_c_dvect_f_get_cpy(psb_d_t *v, psb_c_dvector *xh); +psb_i_t psb_c_dvect_zero(psb_c_dvector *xh); +psb_d_t *psb_c_dvect_f_get_pnt( psb_c_dvector *xh); + +psb_i_t psb_c_dgeall(psb_c_dvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgeall_remote(psb_c_dvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgeall_remote_options(psb_c_dvector *xh, psb_c_descriptor *cdh, psb_i_t bldmode, psb_i_t dupl); +psb_i_t psb_c_dgeins(psb_i_t nz, const psb_l_t *irw, const psb_d_t *val, + psb_c_dvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_d_t *val, + psb_c_dvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgeasb(psb_c_dvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgefree(psb_c_dvector *xh, psb_c_descriptor *cdh); +psb_d_t psb_c_dgetelem(psb_c_dvector *xh,psb_l_t index,psb_c_descriptor *cd); + +/* sparse matrices*/ +psb_c_dspmat* psb_c_new_dspmat(); +psb_i_t psb_c_dspall(psb_c_dspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_dspall_remote(psb_c_dspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_dspasb(psb_c_dspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_dspfree(psb_c_dspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_dspins(psb_i_t nz, const psb_l_t *irw, const psb_l_t *icl, + const psb_d_t *val, psb_c_dspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_dmat_get_nrows(psb_c_dspmat *mh); +psb_i_t psb_c_dmat_get_ncols(psb_c_dspmat *mh); +psb_l_t psb_c_dnnz(psb_c_dspmat *mh,psb_c_descriptor *cdh); +bool psb_c_dis_matupd(psb_c_dspmat *mh,psb_c_descriptor *cdh); +bool psb_c_dis_matasb(psb_c_dspmat *mh,psb_c_descriptor *cdh); +bool psb_c_dis_matbld(psb_c_dspmat *mh,psb_c_descriptor *cdh); +psb_i_t psb_c_dset_matupd(psb_c_dspmat *mh,psb_c_descriptor *cdh); +psb_i_t psb_c_dset_matasb(psb_c_dspmat *mh,psb_c_descriptor *cdh); +psb_i_t psb_c_dset_matbld(psb_c_dspmat *mh,psb_c_descriptor *cdh); +psb_i_t psb_c_dcopy_mat(psb_c_dspmat *ah,psb_c_dspmat *bh,psb_c_descriptor *cdh); + +/* psb_i_t psb_c_dspasb_opt(psb_c_dspmat *mh, psb_c_descriptor *cdh, */ +/* const char *afmt, psb_i_t upd, psb_i_t dupl); */ +psb_i_t psb_c_dsprn(psb_c_dspmat *mh, psb_c_descriptor *cdh, _Bool clear); +psb_i_t psb_c_dmat_name_print(psb_c_dspmat *mh, char *name); +psb_i_t psb_c_dvect_set_scal(psb_c_dvector *xh, psb_d_t val); +psb_i_t psb_c_dvect_set_vect(psb_c_dvector *xh, psb_d_t *val, psb_i_t n); + +/* psblas computational routines */ +psb_d_t psb_c_dgedot(psb_c_dvector *xh, psb_c_dvector *yh, psb_c_descriptor *cdh); +psb_d_t psb_c_dgenrm2(psb_c_dvector *xh, psb_c_descriptor *cdh); +psb_d_t psb_c_dgeamax(psb_c_dvector *xh, psb_c_descriptor *cdh); +psb_d_t psb_c_dgeasum(psb_c_dvector *xh, psb_c_descriptor *cdh); +psb_d_t psb_c_dgenrmi(psb_c_dvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgeaxpby(psb_d_t alpha, psb_c_dvector *xh, + psb_d_t beta, psb_c_dvector *yh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgeaxpbyz(psb_d_t alpha, psb_c_dvector *xh, + psb_d_t beta, psb_c_dvector *yh, psb_c_dvector *zh, psb_c_descriptor *cdh); +psb_i_t psb_c_dspmm(psb_d_t alpha, psb_c_dspmat *ah, psb_c_dvector *xh, + psb_d_t beta, psb_c_dvector *yh, psb_c_descriptor *cdh); +psb_i_t psb_c_dspmm_opt(psb_d_t alpha, psb_c_dspmat *ah, psb_c_dvector *xh, + psb_d_t beta, psb_c_dvector *yh, psb_c_descriptor *cdh, + char *trans, bool doswap); +psb_i_t psb_c_dspsm(psb_d_t alpha, psb_c_dspmat *th, psb_c_dvector *xh, + psb_d_t beta, psb_c_dvector *yh, psb_c_descriptor *cdh); +/* Additional computational routines */ +psb_i_t psb_c_dgemlt(psb_c_dvector *xh,psb_c_dvector *yh,psb_c_descriptor *cdh); +psb_i_t psb_c_dgemlt2(psb_d_t alpha, psb_c_dvector *xh, psb_c_dvector *yh, psb_d_t beta, psb_c_dvector *zh, psb_c_descriptor *cdh); +psb_i_t psb_c_dgediv(psb_c_dvector *xh,psb_c_dvector *yh,psb_c_descriptor *cdh); +psb_i_t psb_c_dgediv_check(psb_c_dvector *xh,psb_c_dvector *yh,psb_c_descriptor *cdh, bool flag); +psb_i_t psb_c_dgediv2(psb_c_dvector *xh,psb_c_dvector *yh,psb_c_dvector *zh,psb_c_descriptor *cdh); +psb_i_t psb_c_dgediv2_check(psb_c_dvector *xh,psb_c_dvector *yh,psb_c_dvector *zh,psb_c_descriptor *cdh, bool flag); +psb_i_t psb_c_dgeinv(psb_c_dvector *xh,psb_c_dvector *yh,psb_c_descriptor *cdh); +psb_i_t psb_c_dgeinv_check(psb_c_dvector *xh,psb_c_dvector *yh,psb_c_descriptor *cdh, bool flag); +psb_i_t psb_c_dgeabs(psb_c_dvector *xh,psb_c_dvector *yh,psb_c_descriptor *cdh); +psb_i_t psb_c_dgecmp(psb_c_dvector *xh,psb_d_t ch,psb_c_dvector *zh,psb_c_descriptor *cdh); +bool psb_c_dgecmpmat(psb_c_dspmat *ah,psb_c_dspmat *bh,psb_d_t tol,psb_c_descriptor *cdh); +bool psb_c_dgecmpmat_val(psb_c_dspmat *ah,psb_d_t val,psb_d_t tol,psb_c_descriptor *cdh); +psb_i_t psb_c_dgeaddconst(psb_c_dvector *xh,psb_d_t bh,psb_c_dvector *zh,psb_c_descriptor *cdh); +psb_d_t psb_c_dgenrm2_weight(psb_c_dvector *xh,psb_c_dvector *wh,psb_c_descriptor *cdh); +psb_d_t psb_c_dgenrm2_weightmask(psb_c_dvector *xh,psb_c_dvector *wh,psb_c_dvector *idvh,psb_c_descriptor *cdh); +psb_i_t psb_c_dmask(psb_c_dvector *ch,psb_c_dvector *xh,psb_c_dvector *mh, bool *t, psb_c_descriptor *cdh); +psb_d_t psb_c_dgemin(psb_c_dvector *xh,psb_c_descriptor *cdh); +psb_d_t psb_c_dminquotient(psb_c_dvector *xh,psb_c_dvector *yh, psb_c_descriptor *cdh); +psb_i_t psb_c_dspscal(psb_d_t alpha, psb_c_dspmat *ah, psb_c_descriptor *cdh); +psb_i_t psb_c_dspscalpid(psb_d_t alpha, psb_c_dspmat *ah, psb_c_descriptor *cdh); +psb_i_t psb_c_dspaxpby(psb_d_t alpha, psb_c_dspmat *ah, psb_d_t beta, psb_c_dspmat *bh, psb_c_descriptor *cdh); + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/cbind/psb_c_sbase.h b/cbind/psb_c_sbase.h new file mode 100644 index 00000000..46d1874a --- /dev/null +++ b/cbind/psb_c_sbase.h @@ -0,0 +1,105 @@ +#ifndef PSB_C_SBASE_ +#define PSB_C_SBASE_ +#include "psb_c_base.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct PSB_C_SVECTOR { + void *svector; +} psb_c_svector; + +typedef struct PSB_C_SSPMAT { + void *sspmat; +} psb_c_sspmat; + + +/* dense vectors */ +psb_c_svector* psb_c_new_svector(); +psb_i_t psb_c_svect_get_nrows(psb_c_svector *xh); +psb_s_t *psb_c_svect_get_cpy( psb_c_svector *xh); +psb_i_t psb_c_svect_f_get_cpy(psb_s_t *v, psb_c_svector *xh); +psb_i_t psb_c_svect_zero(psb_c_svector *xh); +psb_s_t *psb_c_svect_f_get_pnt( psb_c_svector *xh); + +psb_i_t psb_c_sgeall(psb_c_svector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_sgeall_remote(psb_c_svector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_sgeall_remote_options(psb_c_svector *xh, psb_c_descriptor *cdh, psb_i_t bldmode, psb_i_t dupl); +psb_i_t psb_c_sgeins(psb_i_t nz, const psb_l_t *irw, const psb_s_t *val, + psb_c_svector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_sgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_s_t *val, + psb_c_svector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_sgeasb(psb_c_svector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_sgefree(psb_c_svector *xh, psb_c_descriptor *cdh); +psb_s_t psb_c_sgetelem(psb_c_svector *xh,psb_l_t index,psb_c_descriptor *cd); + +/* sparse matrices*/ +psb_c_sspmat* psb_c_new_sspmat(); +psb_i_t psb_c_sspall(psb_c_sspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_sspall_remote(psb_c_sspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_sspasb(psb_c_sspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_sspfree(psb_c_sspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_sspins(psb_i_t nz, const psb_l_t *irw, const psb_l_t *icl, + const psb_s_t *val, psb_c_sspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_smat_get_nrows(psb_c_sspmat *mh); +psb_i_t psb_c_smat_get_ncols(psb_c_sspmat *mh); +psb_l_t psb_c_snnz(psb_c_sspmat *mh,psb_c_descriptor *cdh); +bool psb_c_sis_matupd(psb_c_sspmat *mh,psb_c_descriptor *cdh); +bool psb_c_sis_matasb(psb_c_sspmat *mh,psb_c_descriptor *cdh); +bool psb_c_sis_matbld(psb_c_sspmat *mh,psb_c_descriptor *cdh); +psb_i_t psb_c_sset_matupd(psb_c_sspmat *mh,psb_c_descriptor *cdh); +psb_i_t psb_c_sset_matasb(psb_c_sspmat *mh,psb_c_descriptor *cdh); +psb_i_t psb_c_sset_matbld(psb_c_sspmat *mh,psb_c_descriptor *cdh); +psb_i_t psb_c_scopy_mat(psb_c_sspmat *ah,psb_c_sspmat *bh,psb_c_descriptor *cdh); + +/* psb_i_t psb_c_sspasb_opt(psb_c_sspmat *mh, psb_c_descriptor *cdh, */ +/* const char *afmt, psb_i_t upd, psb_i_t dupl); */ +psb_i_t psb_c_ssprn(psb_c_sspmat *mh, psb_c_descriptor *cdh, _Bool clear); +psb_i_t psb_c_smat_name_print(psb_c_sspmat *mh, char *name); +psb_i_t psb_c_svect_set_scal(psb_c_svector *xh, psb_s_t val); +psb_i_t psb_c_svect_set_vect(psb_c_svector *xh, psb_s_t *val, psb_i_t n); + +/* psblas computational routines */ +psb_s_t psb_c_sgedot(psb_c_svector *xh, psb_c_svector *yh, psb_c_descriptor *cdh); +psb_s_t psb_c_sgenrm2(psb_c_svector *xh, psb_c_descriptor *cdh); +psb_s_t psb_c_sgeamax(psb_c_svector *xh, psb_c_descriptor *cdh); +psb_s_t psb_c_sgeasum(psb_c_svector *xh, psb_c_descriptor *cdh); +psb_s_t psb_c_sgenrmi(psb_c_sspmat *ah, psb_c_descriptor *cdh); +psb_i_t psb_c_sgeaxpby(psb_s_t alpha, psb_c_svector *xh, + psb_s_t beta, psb_c_svector *yh, psb_c_descriptor *cdh); +psb_i_t psb_c_sgeaxpbyz(psb_s_t alpha, psb_c_svector *xh, + psb_s_t beta, psb_c_svector *yh, psb_c_svector *zh, psb_c_descriptor *cdh); +psb_i_t psb_c_sspmm(psb_s_t alpha, psb_c_sspmat *ah, psb_c_svector *xh, + psb_s_t beta, psb_c_svector *yh, psb_c_descriptor *cdh); +psb_i_t psb_c_sspmm_opt(psb_s_t alpha, psb_c_sspmat *ah, psb_c_svector *xh, + psb_s_t beta, psb_c_svector *yh, psb_c_descriptor *cdh, + char *trans, bool doswap); +psb_i_t psb_c_sspsm(psb_s_t alpha, psb_c_sspmat *th, psb_c_svector *xh, + psb_s_t beta, psb_c_svector *yh, psb_c_descriptor *cdh); +/* Additional computational routines */ +psb_i_t psb_c_sgemlt(psb_c_svector *xh,psb_c_svector *yh,psb_c_descriptor *cdh); +psb_i_t psb_c_sgemlt2(psb_s_t alpha, psb_c_svector *xh, psb_c_svector *yh, psb_s_t beta, psb_c_svector *zh, psb_c_descriptor *cdh); +psb_i_t psb_c_sgediv(psb_c_svector *xh,psb_c_svector *yh,psb_c_descriptor *cdh); +psb_i_t psb_c_sgediv_check(psb_c_svector *xh,psb_c_svector *yh,psb_c_descriptor *cdh, bool flag); +psb_i_t psb_c_sgediv2(psb_c_svector *xh,psb_c_svector *yh,psb_c_svector *zh,psb_c_descriptor *cdh); +psb_i_t psb_c_sgediv2_check(psb_c_svector *xh,psb_c_svector *yh,psb_c_svector *zh,psb_c_descriptor *cdh, bool flag); +psb_i_t psb_c_sgeinv(psb_c_svector *xh,psb_c_svector *yh,psb_c_descriptor *cdh); +psb_i_t psb_c_sgeinv_check(psb_c_svector *xh,psb_c_svector *yh,psb_c_descriptor *cdh, bool flag); +psb_i_t psb_c_sgeabs(psb_c_svector *xh,psb_c_svector *yh,psb_c_descriptor *cdh); +psb_i_t psb_c_sgecmp(psb_c_svector *xh,psb_s_t ch,psb_c_svector *zh,psb_c_descriptor *cdh); +bool psb_c_sgecmpmat(psb_c_sspmat *ah,psb_c_sspmat *bh,psb_s_t tol,psb_c_descriptor *cdh); +bool psb_c_sgecmpmat_val(psb_c_sspmat *ah,psb_s_t val,psb_s_t tol,psb_c_descriptor *cdh); +psb_i_t psb_c_sgeaddconst(psb_c_svector *xh,psb_s_t bh,psb_c_svector *zh,psb_c_descriptor *cdh); +psb_s_t psb_c_sgenrm2_weight(psb_c_svector *xh,psb_c_svector *wh,psb_c_descriptor *cdh); +psb_s_t psb_c_sgenrm2_weightmask(psb_c_svector *xh,psb_c_svector *wh,psb_c_svector *idvh,psb_c_descriptor *cdh); +psb_i_t psb_c_smask(psb_c_svector *ch,psb_c_svector *xh,psb_c_svector *mh, bool *t, psb_c_descriptor *cdh); +psb_s_t psb_c_sgemin(psb_c_svector *xh,psb_c_descriptor *cdh); +psb_i_t psb_c_sspscal(psb_s_t alpha, psb_c_sspmat *ah, psb_c_descriptor *cdh); +psb_i_t psb_c_sspscalpid(psb_s_t alpha, psb_c_sspmat *ah, psb_c_descriptor *cdh); +psb_i_t psb_c_sspaxpby(psb_s_t alpha, psb_c_sspmat *ah, psb_s_t beta, psb_c_sspmat *bh, psb_c_descriptor *cdh); +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/cbind/psb_c_zbase.h b/cbind/psb_c_zbase.h new file mode 100644 index 00000000..09fc8525 --- /dev/null +++ b/cbind/psb_c_zbase.h @@ -0,0 +1,105 @@ +#ifndef PSB_C_ZBASE_ +#define PSB_C_ZBASE_ +#include "psb_c_base.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct PSB_C_ZVECTOR { + void *zvector; +} psb_c_zvector; + +typedef struct PSB_C_ZSPMAT { + void *zspmat; +} psb_c_zspmat; + + +/* dense vectors */ +psb_c_zvector* psb_c_new_zvector(); +psb_i_t psb_c_zvect_get_nrows(psb_c_zvector *xh); +psb_z_t *psb_c_zvect_get_cpy( psb_c_zvector *xh); +psb_i_t psb_c_zvect_f_get_cpy(psb_z_t *v, psb_c_zvector *xh); +psb_i_t psb_c_zvect_zero(psb_c_zvector *xh); +psb_z_t *psb_c_zvect_f_get_pnt( psb_c_zvector *xh); + +psb_i_t psb_c_zgeall(psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_zgeall_remote(psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_zgeall_remote_options(psb_c_zvector *xh, psb_c_descriptor *cdh, psb_i_t bldmode, psb_i_t dupl); +psb_i_t psb_c_zgeins(psb_i_t nz, const psb_l_t *irw, const psb_z_t *val, + psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_zgeins_add(psb_i_t nz, const psb_l_t *irw, const psb_z_t *val, + psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_zgeasb(psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_i_t psb_c_zgefree(psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_z_t psb_c_zgetelem(psb_c_zvector *xh,psb_l_t index,psb_c_descriptor *cd); + +/* sparse matrices*/ +psb_c_zspmat* psb_c_new_zspmat(); +psb_i_t psb_c_zspall(psb_c_zspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_zspall_remote(psb_c_zspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_zspasb(psb_c_zspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_zspfree(psb_c_zspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_zspins(psb_i_t nz, const psb_l_t *irw, const psb_l_t *icl, + const psb_z_t *val, psb_c_zspmat *mh, psb_c_descriptor *cdh); +psb_i_t psb_c_zmat_get_nrows(psb_c_zspmat *mh); +psb_i_t psb_c_zmat_get_ncols(psb_c_zspmat *mh); +psb_l_t psb_c_znnz(psb_c_zspmat *mh,psb_c_descriptor *cdh); +bool psb_c_zis_matupd(psb_c_zspmat *mh,psb_c_descriptor *cdh); +bool psb_c_zis_matasb(psb_c_zspmat *mh,psb_c_descriptor *cdh); +bool psb_c_zis_matbld(psb_c_zspmat *mh,psb_c_descriptor *cdh); +psb_i_t psb_c_zset_matupd(psb_c_zspmat *mh,psb_c_descriptor *cdh); +psb_i_t psb_c_zset_matasb(psb_c_zspmat *mh,psb_c_descriptor *cdh); +psb_i_t psb_c_zset_matbld(psb_c_zspmat *mh,psb_c_descriptor *cdh); +psb_i_t psb_c_zcopy_mat(psb_c_zspmat *ah,psb_c_zspmat *bh,psb_c_descriptor *cdh); + + +/* psb_i_t psb_c_zspasb_opt(psb_c_zspmat *mh, psb_c_descriptor *cdh, */ +/* const char *afmt, psb_i_t upd, psb_i_t dupl); */ +psb_i_t psb_c_zsprn(psb_c_zspmat *mh, psb_c_descriptor *cdh, _Bool clear); +psb_i_t psb_c_zmat_name_print(psb_c_zspmat *mh, char *name); +psb_i_t psb_c_zvect_set_scal(psb_c_zvector *xh, psb_z_t val); +psb_i_t psb_c_zvect_set_vect(psb_c_zvector *xh, psb_z_t *val, psb_i_t n); + +/* psblas computational routines */ +psb_z_t psb_c_zgedot(psb_c_zvector *xh, psb_c_zvector *yh, psb_c_descriptor *cdh); +psb_d_t psb_c_zgenrm2(psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_d_t psb_c_zgeamax(psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_d_t psb_c_zgeasum(psb_c_zvector *xh, psb_c_descriptor *cdh); +psb_d_t psb_c_zgenrmi(psb_c_zspmat *ah, psb_c_descriptor *cdh); +psb_i_t psb_c_zgeaxpby(psb_z_t alpha, psb_c_zvector *xh, + psb_z_t beta, psb_c_zvector *yh, psb_c_descriptor *cdh); +psb_i_t psb_c_zgeaxpbyz(psb_z_t alpha, psb_c_zvector *xh, + psb_z_t beta, psb_c_zvector *yh, psb_c_zvector *zh, psb_c_descriptor *cdh); +psb_i_t psb_c_zspmm(psb_z_t alpha, psb_c_zspmat *ah, psb_c_zvector *xh, + psb_z_t beta, psb_c_zvector *yh, psb_c_descriptor *cdh); +psb_i_t psb_c_zspmm_opt(psb_z_t alpha, psb_c_zspmat *ah, psb_c_zvector *xh, + psb_z_t beta, psb_c_zvector *yh, psb_c_descriptor *cdh, + char *trans, bool doswap); +psb_i_t psb_c_zspsm(psb_z_t alpha, psb_c_zspmat *th, psb_c_zvector *xh, + psb_z_t beta, psb_c_zvector *yh, psb_c_descriptor *cdh); +/* Additional computational routines */ +psb_i_t psb_c_zgemlt(psb_c_zvector *xh,psb_c_zvector *yh,psb_c_descriptor *cdh); +psb_i_t psb_c_zgemlt2(psb_z_t alpha, psb_c_zvector *xh, psb_c_zvector *yh, psb_z_t beta, psb_c_zvector *zh, psb_c_descriptor *cdh); +psb_i_t psb_c_zgediv(psb_c_zvector *xh,psb_c_zvector *yh,psb_c_descriptor *cdh); +psb_i_t psb_c_zgediv_check(psb_c_zvector *xh,psb_c_zvector *yh,psb_c_descriptor *cdh, bool flag); +psb_i_t psb_c_zgediv2(psb_c_zvector *xh,psb_c_zvector *yh,psb_c_zvector *zh,psb_c_descriptor *cdh); +psb_i_t psb_c_zgediv2_check(psb_c_zvector *xh,psb_c_zvector *yh,psb_c_zvector *zh,psb_c_descriptor *cdh, bool flag); +psb_i_t psb_c_zgeinv(psb_c_zvector *xh,psb_c_zvector *yh,psb_c_descriptor *cdh); +psb_i_t psb_c_zgeinv_check(psb_c_zvector *xh,psb_c_zvector *yh,psb_c_descriptor *cdh, bool flag); +psb_i_t psb_c_zgeabs(psb_c_zvector *xh,psb_c_zvector *yh,psb_c_descriptor *cdh); +psb_i_t psb_c_zgecmp(psb_c_zvector *xh,psb_d_t ch,psb_c_zvector *zh,psb_c_descriptor *cdh); +bool psb_c_zgecmpmat(psb_c_zspmat *ah,psb_c_zspmat *bh,psb_d_t tol,psb_c_descriptor *cdh); +bool psb_c_zgecmpmat_val(psb_c_zspmat *ah,psb_z_t val,psb_d_t tol,psb_c_descriptor *cdh); +psb_i_t psb_c_zgeaddconst(psb_c_zvector *xh,psb_z_t bh,psb_c_zvector *zh,psb_c_descriptor *cdh); +psb_d_t psb_c_zgenrm2_weight(psb_c_zvector *xh,psb_c_zvector *wh,psb_c_descriptor *cdh); +psb_d_t psb_c_zgenrm2_weightmask(psb_c_zvector *xh,psb_c_zvector *wh,psb_c_zvector *idvh,psb_c_descriptor *cdh); +psb_i_t psb_c_zspscal(psb_z_t alpha, psb_c_zspmat *ah, psb_c_descriptor *cdh); +psb_i_t psb_c_zspscalpid(psb_z_t alpha, psb_c_zspmat *ah, psb_c_descriptor *cdh); +psb_i_t psb_c_zspaxpby(psb_z_t alpha, psb_c_zspmat *ah, psb_z_t beta, psb_c_zspmat *bh, psb_c_descriptor *cdh); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif