1*59599516SKenneth E. Jansen /*=========================================================================== 2*59599516SKenneth E. Jansen * 3*59599516SKenneth E. Jansen * "usr.h": Juin's header funtion 4*59599516SKenneth E. Jansen * 5*59599516SKenneth E. Jansen *=========================================================================== 6*59599516SKenneth E. Jansen */ 7*59599516SKenneth E. Jansen 8*59599516SKenneth E. Jansen #ifndef __USR_H__ 9*59599516SKenneth E. Jansen #define __USR_H__ 10*59599516SKenneth E. Jansen 11*59599516SKenneth E. Jansen #include <FCMangle.h> 12*59599516SKenneth E. Jansen 13*59599516SKenneth E. Jansen /*=========================================================================== 14*59599516SKenneth E. Jansen * 15*59599516SKenneth E. Jansen * "UsrHd": User main struct 16*59599516SKenneth E. Jansen * 17*59599516SKenneth E. Jansen *=========================================================================== 18*59599516SKenneth E. Jansen */ 19*59599516SKenneth E. Jansen typedef struct _Usr { 20*59599516SKenneth E. Jansen int eqnType ; /* equation type flag */ 21*59599516SKenneth E. Jansen double* aperm ; /* permanent data */ 22*59599516SKenneth E. Jansen double* atemp ; /* temporary data */ 23*59599516SKenneth E. Jansen double* resf ; /* residual vector */ 24*59599516SKenneth E. Jansen double* solinc ; /* solution increment */ 25*59599516SKenneth E. Jansen double* flowDiag ; /* global diagonal of total lhs */ 26*59599516SKenneth E. Jansen double* sclrDiag ; /* global diagonal of energy lhs */ 27*59599516SKenneth E. Jansen double* lesP ; /* utility vector for Q = A * P */ 28*59599516SKenneth E. Jansen double* lesQ ; /* utility vector for Q = A * P */ 29*59599516SKenneth E. Jansen int* iBC ; /* boundary condition code */ 30*59599516SKenneth E. Jansen double* BC ; /* boundary condition array */ 31*59599516SKenneth E. Jansen int* iper ; /* periodic nodal information */ 32*59599516SKenneth E. Jansen int* ilwork ; /* local MPI communication array */ 33*59599516SKenneth E. Jansen int numpe ; /* number of processors */ 34*59599516SKenneth E. Jansen int nNodes ; /* number of nodes */ 35*59599516SKenneth E. Jansen int nenl ; /* number of element nodes */ 36*59599516SKenneth E. Jansen int nPermDims ; /* number of permanent data */ 37*59599516SKenneth E. Jansen int nTmpDims ; /* number of temporary data */ 38*59599516SKenneth E. Jansen int* rowp ; /* row of p for nonzero's of A */ 39*59599516SKenneth E. Jansen int* colm ; /* start index for rowp vector */ 40*59599516SKenneth E. Jansen double* lhsK ; /* sparse K matrix (9,nnzeros) */ 41*59599516SKenneth E. Jansen double* lhsP ; /* sparse GoC matrix (4,nnzeros) */ 42*59599516SKenneth E. Jansen double* lhsS ; 43*59599516SKenneth E. Jansen int* nnz_tot ; /* factor for number of nonzeros) */ 44*59599516SKenneth E. Jansen double* CGsol; /* pdot after CG solve */ 45*59599516SKenneth E. Jansen } Usr ; 46*59599516SKenneth E. Jansen 47*59599516SKenneth E. Jansen typedef struct _Usr* UsrHd ; 48*59599516SKenneth E. Jansen 49*59599516SKenneth E. Jansen /*=========================================================================== 50*59599516SKenneth E. Jansen * 51*59599516SKenneth E. Jansen * C to Fortran naming conversion 52*59599516SKenneth E. Jansen * 53*59599516SKenneth E. Jansen *=========================================================================== 54*59599516SKenneth E. Jansen */ 55*59599516SKenneth E. Jansen 56*59599516SKenneth E. Jansen #define usrNew FortranCInterface_GLOBAL_(usrnew,USRNEW) 57*59599516SKenneth E. Jansen #define getSol FortranCInterface_GLOBAL_(getsol,GETSOL) /* extract Dy from usrHd */ 58*59599516SKenneth E. Jansen 59*59599516SKenneth E. Jansen #define drvlesPrepDiag FortranCInterface_GLOBAL_(drvlesprepdiag,DRVLESPREPDIAG) 60*59599516SKenneth E. Jansen #define drvLesApG FortranCInterface_GLOBAL_(drvlesapg,DRVLESAPG) 61*59599516SKenneth E. Jansen #define drvLesApKG FortranCInterface_GLOBAL_(drvlesapkg,DRVLESAPKG) 62*59599516SKenneth E. Jansen #define drvLesApNGt FortranCInterface_GLOBAL_(drvlesapngt,DRVLESAPNGT) 63*59599516SKenneth E. Jansen #define drvLesApNGtC FortranCInterface_GLOBAL_(drvlesapngtc,DRVLESAPNGTC) 64*59599516SKenneth E. Jansen #define drvLesApFull FortranCInterface_GLOBAL_(drvlesapfull,DRVLESAPFULL) 65*59599516SKenneth E. Jansen 66*59599516SKenneth E. Jansen #define commOut FortranCInterface_GLOBAL_(commout,COMMOUT) 67*59599516SKenneth E. Jansen #define commIn FortranCInterface_GLOBAL_(commin,COMMIN) 68*59599516SKenneth E. Jansen #define fLesSparseApSclr FortranCInterface_GLOBAL_(flessparseapsclr,FLESSPARSEAPSCLR) 69*59599516SKenneth E. Jansen #define fLesSparseApG FortranCInterface_GLOBAL_(flessparseapg,FLESSPARSEAPG) 70*59599516SKenneth E. Jansen #define fLesSparseApKG FortranCInterface_GLOBAL_(flessparseapkg,FLESSPARSEAPKG) 71*59599516SKenneth E. Jansen #define fLesSparseApNGt FortranCInterface_GLOBAL_(flessparseapngt,FLESSPARSEAPNGT) 72*59599516SKenneth E. Jansen #define fLesSparseApNGtC FortranCInterface_GLOBAL_(flessparseapngtc,FLESSPARSEAPNGTC) 73*59599516SKenneth E. Jansen #define fLesSparseApFull FortranCInterface_GLOBAL_(flessparseapfull,FLESSPARSEAPFULL) 74*59599516SKenneth E. Jansen 75*59599516SKenneth E. Jansen #define drvsclrDiag FortranCInterface_GLOBAL_(drvsclrdiag,DRVSCLRDIAG) 76*59599516SKenneth E. Jansen #define drvLesApSclr FortranCInterface_GLOBAL_(drvlesapsclr,DRVLESAPSCLR) 77*59599516SKenneth E. Jansen #define drvAllreduce FortranCInterface_GLOBAL_(drvallreduce,DRVALLREDUCE) 78*59599516SKenneth E. Jansen #define drvAllreducesclr FortranCInterface_GLOBAL_(drvallreducesclr,DRVALLREDUCESCLR) 79*59599516SKenneth E. Jansen #define flesCp FortranCInterface_GLOBAL_(flescp,FLESCP) 80*59599516SKenneth E. Jansen #define flesScale FortranCInterface_GLOBAL_(flesscale,FLESSCALE) 81*59599516SKenneth E. Jansen #define flesScaleCp FortranCInterface_GLOBAL_(flesscalecp,FLESSCALECP) 82*59599516SKenneth E. Jansen #define flesAdd FortranCInterface_GLOBAL_(flesadd,FLESADD) 83*59599516SKenneth E. Jansen #define flesSub FortranCInterface_GLOBAL_(flessub,FLESSUB) 84*59599516SKenneth E. Jansen #define flesDot1 FortranCInterface_GLOBAL_(flesdot1,FLESDOT1) 85*59599516SKenneth E. Jansen #define flesDot2 FortranCInterface_GLOBAL_(flesdot2,FLESDOT2) 86*59599516SKenneth E. Jansen #define flesDaxpy FortranCInterface_GLOBAL_(flesdaxpy,FLESDAXPY) 87*59599516SKenneth E. Jansen #define flesDxpay FortranCInterface_GLOBAL_(flesdxpay,FLESDXPAY) 88*59599516SKenneth E. Jansen #define flesInv FortranCInterface_GLOBAL_(flesinv,FLESINV) 89*59599516SKenneth E. Jansen #define flesZero FortranCInterface_GLOBAL_(fleszero,FLESZERO) 90*59599516SKenneth E. Jansen #define fsclrDiag FortranCInterface_GLOBAL_(fsclrdiag,FSCLRDIAG) 91*59599516SKenneth E. Jansen #define flesApSclr FortranCInterface_GLOBAL_(flesapsclr,FLESAPSCLR) 92*59599516SKenneth E. Jansen #define fMtxVdimVecMult FortranCInterface_GLOBAL_(fmtxvdimvecmult,FMTXVDIMVECMULT) 93*59599516SKenneth E. Jansen #define fMtxBlkDot2 FortranCInterface_GLOBAL_(fmtxblkdot2,FMTXBLKDOT2) 94*59599516SKenneth E. Jansen #define fMtxBlkDaxpy FortranCInterface_GLOBAL_(fmtxblkdaxpy,FMTXBLKDAXPY) 95*59599516SKenneth E. Jansen #define fMtxBlkDyeax FortranCInterface_GLOBAL_(fmtxblkdyeax,FMTXBLKDYEAX) 96*59599516SKenneth E. Jansen #define fMtxBlkDmaxpy FortranCInterface_GLOBAL_(fmtxblkdmaxpy,FMTXBLKDMAXPY) 97*59599516SKenneth E. Jansen #define fMtxVdimVecCp FortranCInterface_GLOBAL_(fmtxvdimveccp,FMTXVDIMVECCP) 98*59599516SKenneth E. Jansen #define fMtxVdimVecDot2 FortranCInterface_GLOBAL_(fmtxvdimvecdot2,FMTXVDIMVECDOT2) 99*59599516SKenneth E. Jansen #define fMtxVdimVecDaxpy FortranCInterface_GLOBAL_(fmtxvdimvecdaxpy,FMTXVDIMVECDAXPY) 100*59599516SKenneth E. Jansen #define ramg_interface FortranCInterface_GLOBAL_(ramg_interface,RAMG_INTERFACE) 101*59599516SKenneth E. Jansen #define ramg_normcheck FortranCInterface_GLOBAL_(ramg_normcheck,RAMG_NORMCHECK) 102*59599516SKenneth E. Jansen 103*59599516SKenneth E. Jansen /*=========================================================================== 104*59599516SKenneth E. Jansen * 105*59599516SKenneth E. Jansen * Function declaration 106*59599516SKenneth E. Jansen * 107*59599516SKenneth E. Jansen *=========================================================================== 108*59599516SKenneth E. Jansen */ 109*59599516SKenneth E. Jansen void usrNew( UsrHd usrHd, 110*59599516SKenneth E. Jansen int* eqnType, 111*59599516SKenneth E. Jansen double* aperm, 112*59599516SKenneth E. Jansen double* atemp, 113*59599516SKenneth E. Jansen double* resf, 114*59599516SKenneth E. Jansen double* solinc, 115*59599516SKenneth E. Jansen double* flowDiag, 116*59599516SKenneth E. Jansen double* sclrDiag, 117*59599516SKenneth E. Jansen double* lesP, 118*59599516SKenneth E. Jansen double* lesQ, 119*59599516SKenneth E. Jansen int* iBC, 120*59599516SKenneth E. Jansen double* BC, 121*59599516SKenneth E. Jansen int* iper, 122*59599516SKenneth E. Jansen int* ilwork, 123*59599516SKenneth E. Jansen int* numpe, 124*59599516SKenneth E. Jansen int* nNodes, 125*59599516SKenneth E. Jansen int* nenl, 126*59599516SKenneth E. Jansen int* nPermDims, 127*59599516SKenneth E. Jansen int* nTmpDims, 128*59599516SKenneth E. Jansen int* rowp, 129*59599516SKenneth E. Jansen int* colm, 130*59599516SKenneth E. Jansen double* lhsK, 131*59599516SKenneth E. Jansen double* lhsP, 132*59599516SKenneth E. Jansen double* lhsS, 133*59599516SKenneth E. Jansen int* nnz_tot, 134*59599516SKenneth E. Jansen double* CGsol) ; 135*59599516SKenneth E. Jansen 136*59599516SKenneth E. Jansen double* usrPointer( UsrHd usrHd, 137*59599516SKenneth E. Jansen int id, 138*59599516SKenneth E. Jansen int offset, 139*59599516SKenneth E. Jansen int nDims ) ; 140*59599516SKenneth E. Jansen 141*59599516SKenneth E. Jansen void getSol( UsrHd usrHd, 142*59599516SKenneth E. Jansen double* Dy ) ; 143*59599516SKenneth E. Jansen 144*59599516SKenneth E. Jansen /*=========================================================================== 145*59599516SKenneth E. Jansen * 146*59599516SKenneth E. Jansen * Fortran Function declaration 147*59599516SKenneth E. Jansen * 148*59599516SKenneth E. Jansen *=========================================================================== 149*59599516SKenneth E. Jansen */ 150*59599516SKenneth E. Jansen double flesDot1( double* a, 151*59599516SKenneth E. Jansen int* m, 152*59599516SKenneth E. Jansen int* n ) ; 153*59599516SKenneth E. Jansen double flesDot2( double* a, 154*59599516SKenneth E. Jansen double* b, 155*59599516SKenneth E. Jansen int* m, 156*59599516SKenneth E. Jansen int* n ) ; 157*59599516SKenneth E. Jansen 158*59599516SKenneth E. Jansen /*=========================================================================== 159*59599516SKenneth E. Jansen * 160*59599516SKenneth E. Jansen * End of the file 161*59599516SKenneth E. Jansen * 162*59599516SKenneth E. Jansen *=========================================================================== 163*59599516SKenneth E. Jansen */ 164*59599516SKenneth E. Jansen 165*59599516SKenneth E. Jansen #endif /* __USR_H__ */ 166*59599516SKenneth E. Jansen 167