1*59599516SKenneth E. Jansen /**************************************************************************** 2*59599516SKenneth E. Jansen ** Copyright (c) 1994-2003 ACUSIM Software, Inc. 3*59599516SKenneth E. Jansen ** All rights reserved. 4*59599516SKenneth E. Jansen ** This source code is confidential and may not be disclosed. 5*59599516SKenneth E. Jansen ****************************************************************************/ 6*59599516SKenneth E. Jansen 7*59599516SKenneth E. Jansen /*=========================================================================== 8*59599516SKenneth E. Jansen ** 9*59599516SKenneth E. Jansen ** "les.h": Linear Equation Solvers. 10*59599516SKenneth E. Jansen ** 11*59599516SKenneth E. Jansen ** Original: Farzin Shakib (Aug 94) 12*59599516SKenneth E. Jansen **=========================================================================== 13*59599516SKenneth E. Jansen */ 14*59599516SKenneth E. Jansen 15*59599516SKenneth E. Jansen #ifndef __LES_H__ 16*59599516SKenneth E. Jansen #define __LES_H__ 17*59599516SKenneth E. Jansen 18*59599516SKenneth E. Jansen /*=========================================================================== 19*59599516SKenneth E. Jansen * 20*59599516SKenneth E. Jansen * Get the needed include files 21*59599516SKenneth E. Jansen * 22*59599516SKenneth E. Jansen *=========================================================================== 23*59599516SKenneth E. Jansen */ 24*59599516SKenneth E. Jansen #include <ctype.h> 25*59599516SKenneth E. Jansen #include <errno.h> 26*59599516SKenneth E. Jansen #include <limits.h> 27*59599516SKenneth E. Jansen #include <math.h> 28*59599516SKenneth E. Jansen #include <stdarg.h> 29*59599516SKenneth E. Jansen #include <stdio.h> 30*59599516SKenneth E. Jansen #include <stdlib.h> 31*59599516SKenneth E. Jansen #include <string.h> 32*59599516SKenneth E. Jansen #include <time.h> 33*59599516SKenneth E. Jansen #include "usr.h" 34*59599516SKenneth E. Jansen 35*59599516SKenneth E. Jansen /*=========================================================================== 36*59599516SKenneth E. Jansen * 37*59599516SKenneth E. Jansen * Main data types 38*59599516SKenneth E. Jansen * 39*59599516SKenneth E. Jansen *=========================================================================== 40*59599516SKenneth E. Jansen */ 41*59599516SKenneth E. Jansen typedef int Integer ; /* integer type */ 42*59599516SKenneth E. Jansen typedef double Real ; /* real type */ 43*59599516SKenneth E. Jansen typedef float Float ; /* float type */ 44*59599516SKenneth E. Jansen typedef char* String ; /* string type */ 45*59599516SKenneth E. Jansen typedef void* Data ; /* data type */ 46*59599516SKenneth E. Jansen typedef void Void ; /* void type */ 47*59599516SKenneth E. Jansen 48*59599516SKenneth E. Jansen #ifdef TRUE 49*59599516SKenneth E. Jansen #undef TRUE 50*59599516SKenneth E. Jansen #endif 51*59599516SKenneth E. Jansen #ifdef FALSE 52*59599516SKenneth E. Jansen #undef FALSE 53*59599516SKenneth E. Jansen #endif 54*59599516SKenneth E. Jansen 55*59599516SKenneth E. Jansen typedef enum { 56*59599516SKenneth E. Jansen FALSE = 0 , 57*59599516SKenneth E. Jansen TRUE = 1 58*59599516SKenneth E. Jansen } Bool ; /* boolean type */ 59*59599516SKenneth E. Jansen 60*59599516SKenneth E. Jansen /*=========================================================================== 61*59599516SKenneth E. Jansen * 62*59599516SKenneth E. Jansen * Nil 63*59599516SKenneth E. Jansen * 64*59599516SKenneth E. Jansen *=========================================================================== 65*59599516SKenneth E. Jansen */ 66*59599516SKenneth E. Jansen #define Nil(T) ((T)NULL) 67*59599516SKenneth E. Jansen 68*59599516SKenneth E. Jansen /*=========================================================================== 69*59599516SKenneth E. Jansen * 70*59599516SKenneth E. Jansen * "Les": Acusim LES data structure 71*59599516SKenneth E. Jansen * 72*59599516SKenneth E. Jansen *=========================================================================== 73*59599516SKenneth E. Jansen */ 74*59599516SKenneth E. Jansen typedef struct _Les* LesHd ; 75*59599516SKenneth E. Jansen 76*59599516SKenneth E. Jansen /*=========================================================================== 77*59599516SKenneth E. Jansen * 78*59599516SKenneth E. Jansen * Equation type 79*59599516SKenneth E. Jansen * 80*59599516SKenneth E. Jansen *=========================================================================== 81*59599516SKenneth E. Jansen */ 82*59599516SKenneth E. Jansen #define LES_EQN_FLOW 1 /* Solve flow vel/pres */ 83*59599516SKenneth E. Jansen #define LES_EQN_SCLR 2 /* Solve multi-scalar */ 84*59599516SKenneth E. Jansen 85*59599516SKenneth E. Jansen /*=========================================================================== 86*59599516SKenneth E. Jansen * 87*59599516SKenneth E. Jansen * Parameter names 88*59599516SKenneth E. Jansen * 89*59599516SKenneth E. Jansen *=========================================================================== 90*59599516SKenneth E. Jansen */ 91*59599516SKenneth E. Jansen #define LES_ACT_PRJS 1 /* No. active projection vecs. */ 92*59599516SKenneth E. Jansen #define LES_ACT_PRES_PRJS 2 /* No. act. pres. prj. vecs. */ 93*59599516SKenneth E. Jansen #define LES_PRJ_VEC_ID 3 /* Prj vec srcId into permVec */ 94*59599516SKenneth E. Jansen #define LES_PRES_PRJ_VEC_ID 4 /* Pres. Prj vec srcId */ 95*59599516SKenneth E. Jansen 96*59599516SKenneth E. Jansen /*=========================================================================== 97*59599516SKenneth E. Jansen * 98*59599516SKenneth E. Jansen * Pointers 99*59599516SKenneth E. Jansen * 100*59599516SKenneth E. Jansen *=========================================================================== 101*59599516SKenneth E. Jansen */ 102*59599516SKenneth E. Jansen #define LES_RES_PNT 100000 /* residual pointer */ 103*59599516SKenneth E. Jansen #define LES_SOL_PNT 200000 /* solution pointer */ 104*59599516SKenneth E. Jansen 105*59599516SKenneth E. Jansen /*=========================================================================== 106*59599516SKenneth E. Jansen * 107*59599516SKenneth E. Jansen * Acusim callable funtions in C 108*59599516SKenneth E. Jansen * 109*59599516SKenneth E. Jansen *=========================================================================== 110*59599516SKenneth E. Jansen */ 111*59599516SKenneth E. Jansen LesHd lesNew( char* lmHost, 112*59599516SKenneth E. Jansen Integer lmPort, 113*59599516SKenneth E. Jansen Integer* lmNum, 114*59599516SKenneth E. Jansen Integer eqnType, 115*59599516SKenneth E. Jansen Integer nDofs, 116*59599516SKenneth E. Jansen Integer minIters, 117*59599516SKenneth E. Jansen Integer maxIters, 118*59599516SKenneth E. Jansen Integer nKvecs, 119*59599516SKenneth E. Jansen Integer prjFlag, 120*59599516SKenneth E. Jansen Integer nPrjs, 121*59599516SKenneth E. Jansen Integer presPrjFlag, 122*59599516SKenneth E. Jansen Integer nPresPrjs, 123*59599516SKenneth E. Jansen Integer presPrecFlag, 124*59599516SKenneth E. Jansen Real tol, 125*59599516SKenneth E. Jansen Real presTol, 126*59599516SKenneth E. Jansen Integer verbose, 127*59599516SKenneth E. Jansen Real* stats, 128*59599516SKenneth E. Jansen Integer* nPermDims, 129*59599516SKenneth E. Jansen Integer* nTmpDims ) ; 130*59599516SKenneth E. Jansen Void lesFree( LesHd lesHd ) ; 131*59599516SKenneth E. Jansen Void lesSolve( LesHd lesHd, 132*59599516SKenneth E. Jansen UsrHd usrHd ) ; 133*59599516SKenneth E. Jansen Real lesGetPar( LesHd lesHd, 134*59599516SKenneth E. Jansen Integer parName ) ; 135*59599516SKenneth E. Jansen Void lesSetPar( LesHd lesHd, 136*59599516SKenneth E. Jansen Integer parName, 137*59599516SKenneth E. Jansen Real parVal ) ; 138*59599516SKenneth E. Jansen 139*59599516SKenneth E. Jansen /*=========================================================================== 140*59599516SKenneth E. Jansen * 141*59599516SKenneth E. Jansen * Fortran calling convention 142*59599516SKenneth E. Jansen * 143*59599516SKenneth E. Jansen *=========================================================================== 144*59599516SKenneth E. Jansen */ 145*59599516SKenneth E. Jansen #if defined(ACUSIM_SGI) || defined(ACUSIM_SGI64) || \ 146*59599516SKenneth E. Jansen defined(ACUSIM_HAL) || defined(ACUSIM_SUN) || \ 147*59599516SKenneth E. Jansen defined(ACUSIM_ALPHA) || defined(ACUSIM_LINUX) || \ 148*59599516SKenneth E. Jansen defined(ACUSIM_LINUXIPF) 149*59599516SKenneth E. Jansen #define fLesNew flesnew_ 150*59599516SKenneth E. Jansen #define fLesFree flesfree_ 151*59599516SKenneth E. Jansen #define fLesSolve flessolve_ 152*59599516SKenneth E. Jansen #elif defined(ACUSIM_HP) || defined(ibm) 153*59599516SKenneth E. Jansen #define fLesNew flesnew 154*59599516SKenneth E. Jansen #define fLesFree flesfree 155*59599516SKenneth E. Jansen #define fLesSolve flessolve 156*59599516SKenneth E. Jansen #elif defined(ACUSIM_NT) 157*59599516SKenneth E. Jansen #define fLesNew FLESNEW 158*59599516SKenneth E. Jansen #define fLesFree FLESFREE 159*59599516SKenneth E. Jansen #define fLesSolve FLESSOLVE 160*59599516SKenneth E. Jansen #else /* dummy */ 161*59599516SKenneth E. Jansen #define fLesNew fLesNewXX 162*59599516SKenneth E. Jansen #define fLesFree fLesFreeXX 163*59599516SKenneth E. Jansen #define fLesSolve fLesSolveXX 164*59599516SKenneth E. Jansen #endif 165*59599516SKenneth E. Jansen 166*59599516SKenneth E. Jansen /*=========================================================================== 167*59599516SKenneth E. Jansen * 168*59599516SKenneth E. Jansen * Acusim callable funtions in Fortran 169*59599516SKenneth E. Jansen * 170*59599516SKenneth E. Jansen *=========================================================================== 171*59599516SKenneth E. Jansen */ 172*59599516SKenneth E. Jansen 173*59599516SKenneth E. Jansen Void fLesNew( Integer* lesId, 174*59599516SKenneth E. Jansen char* lmhost, 175*59599516SKenneth E. Jansen Integer* lmport, 176*59599516SKenneth E. Jansen Integer* lmNum, 177*59599516SKenneth E. Jansen Integer* eqnType, 178*59599516SKenneth E. Jansen Integer* nDofs, 179*59599516SKenneth E. Jansen Integer* minIters, 180*59599516SKenneth E. Jansen Integer* maxIters, 181*59599516SKenneth E. Jansen Integer* nKvecs, 182*59599516SKenneth E. Jansen Integer* prjFlag, 183*59599516SKenneth E. Jansen Integer* nPrjs, 184*59599516SKenneth E. Jansen Integer* presPrjFlag, 185*59599516SKenneth E. Jansen Integer* nPresPrjs, 186*59599516SKenneth E. Jansen Integer* presPrecFlag, 187*59599516SKenneth E. Jansen Real* tol, 188*59599516SKenneth E. Jansen Real* presTol, 189*59599516SKenneth E. Jansen Integer* verbose, 190*59599516SKenneth E. Jansen Real* stats, 191*59599516SKenneth E. Jansen Integer* nPermDims, 192*59599516SKenneth E. Jansen Integer* nTmpDims, 193*59599516SKenneth E. Jansen Integer len_lmHost ) ; 194*59599516SKenneth E. Jansen Void fLesFree( Integer* lesId ) ; 195*59599516SKenneth E. Jansen Void fLesSolve( Integer* lesId, 196*59599516SKenneth E. Jansen UsrHd usrHd ) ; 197*59599516SKenneth E. Jansen 198*59599516SKenneth E. Jansen /*=========================================================================== 199*59599516SKenneth E. Jansen * 200*59599516SKenneth E. Jansen * Functions to be provided by user 201*59599516SKenneth E. Jansen * 202*59599516SKenneth E. Jansen *=========================================================================== 203*59599516SKenneth E. Jansen */ 204*59599516SKenneth E. Jansen Void lesPrepDiag( UsrHd usrHd ) ; 205*59599516SKenneth E. Jansen Void lesDiagScaleCp( UsrHd usrHd, 206*59599516SKenneth E. Jansen Integer srcId, 207*59599516SKenneth E. Jansen Integer dstId, 208*59599516SKenneth E. Jansen Integer nSrcDims, 209*59599516SKenneth E. Jansen Integer srcOff, 210*59599516SKenneth E. Jansen Integer nDstDims, 211*59599516SKenneth E. Jansen Integer dstOff, 212*59599516SKenneth E. Jansen Integer diagOff, 213*59599516SKenneth E. Jansen Integer nDims ) ; 214*59599516SKenneth E. Jansen 215*59599516SKenneth E. Jansen Void lesZero( UsrHd usrHd, 216*59599516SKenneth E. Jansen Integer dstId, 217*59599516SKenneth E. Jansen Integer nDims ) ; 218*59599516SKenneth E. Jansen Void lesCp( UsrHd usrHd, 219*59599516SKenneth E. Jansen Integer srcId, 220*59599516SKenneth E. Jansen Integer dstId, 221*59599516SKenneth E. Jansen Integer nDims ) ; 222*59599516SKenneth E. Jansen Void lesScale( UsrHd usrHd, 223*59599516SKenneth E. Jansen Integer dstId, 224*59599516SKenneth E. Jansen Real coef, 225*59599516SKenneth E. Jansen Integer nDims ) ; 226*59599516SKenneth E. Jansen Void lesScaleCp( UsrHd usrHd, 227*59599516SKenneth E. Jansen Integer srcId, 228*59599516SKenneth E. Jansen Integer dstId, 229*59599516SKenneth E. Jansen Real coef, 230*59599516SKenneth E. Jansen Integer nDims ) ; 231*59599516SKenneth E. Jansen Void lesAdd( UsrHd usrHd, 232*59599516SKenneth E. Jansen Integer srcId, 233*59599516SKenneth E. Jansen Integer dstId, 234*59599516SKenneth E. Jansen Integer nDims ) ; 235*59599516SKenneth E. Jansen Void lesSub( UsrHd usrHd, 236*59599516SKenneth E. Jansen Integer srcId, 237*59599516SKenneth E. Jansen Integer dstId, 238*59599516SKenneth E. Jansen Integer nDims ) ; 239*59599516SKenneth E. Jansen Real lesDot1( UsrHd usrHd, 240*59599516SKenneth E. Jansen Integer srcId, 241*59599516SKenneth E. Jansen Integer nDims ) ; 242*59599516SKenneth E. Jansen Real lesDot2( UsrHd usrHd, 243*59599516SKenneth E. Jansen Integer src1Id, 244*59599516SKenneth E. Jansen Integer src2Id, 245*59599516SKenneth E. Jansen Integer nDims ) ; 246*59599516SKenneth E. Jansen Void lesDaxpy( UsrHd usrHd, 247*59599516SKenneth E. Jansen Integer srcId, 248*59599516SKenneth E. Jansen Integer dstId, 249*59599516SKenneth E. Jansen Real coef, 250*59599516SKenneth E. Jansen Integer nDims ) ; 251*59599516SKenneth E. Jansen Void lesDxpay( UsrHd usrHd, 252*59599516SKenneth E. Jansen Integer srcId, 253*59599516SKenneth E. Jansen Integer dstId, 254*59599516SKenneth E. Jansen Real coef, 255*59599516SKenneth E. Jansen Integer nDims ) ; 256*59599516SKenneth E. Jansen Void lesInv( UsrHd usrHd, 257*59599516SKenneth E. Jansen Integer dstId, 258*59599516SKenneth E. Jansen Integer nDims ) ; 259*59599516SKenneth E. Jansen Void lesBlkDot2( UsrHd usrHd, 260*59599516SKenneth E. Jansen Integer src1Id, 261*59599516SKenneth E. Jansen Integer src2Id, 262*59599516SKenneth E. Jansen Real* values, 263*59599516SKenneth E. Jansen Integer mDims, 264*59599516SKenneth E. Jansen Integer nDims ) ; 265*59599516SKenneth E. Jansen Void lesBlkDaxpy( UsrHd usrHd, 266*59599516SKenneth E. Jansen Integer srcId, 267*59599516SKenneth E. Jansen Integer dstId, 268*59599516SKenneth E. Jansen Real* coef, 269*59599516SKenneth E. Jansen Integer mDims, 270*59599516SKenneth E. Jansen Integer nDims ) ; 271*59599516SKenneth E. Jansen Void lesBlkDyeax( UsrHd usrHd, 272*59599516SKenneth E. Jansen Integer srcId, 273*59599516SKenneth E. Jansen Integer dstId, 274*59599516SKenneth E. Jansen Real* coef, 275*59599516SKenneth E. Jansen Integer mDims, 276*59599516SKenneth E. Jansen Integer nDims ) ; 277*59599516SKenneth E. Jansen Void lesBlkDmaxpy( UsrHd usrHd, 278*59599516SKenneth E. Jansen Integer srcId, 279*59599516SKenneth E. Jansen Integer dstId, 280*59599516SKenneth E. Jansen Real* coef, 281*59599516SKenneth E. Jansen Integer mDims, 282*59599516SKenneth E. Jansen Integer nDims ) ; 283*59599516SKenneth E. Jansen Void lesVdimCp( UsrHd usrHd, 284*59599516SKenneth E. Jansen Integer srcId, 285*59599516SKenneth E. Jansen Integer dstId, 286*59599516SKenneth E. Jansen Integer nSrcDims, 287*59599516SKenneth E. Jansen Integer srcOff, 288*59599516SKenneth E. Jansen Integer nDstDims, 289*59599516SKenneth E. Jansen Integer dstOff, 290*59599516SKenneth E. Jansen Integer nDims ) ; 291*59599516SKenneth E. Jansen Void lesVdimDot2( UsrHd usrHd, 292*59599516SKenneth E. Jansen Integer src1Id, 293*59599516SKenneth E. Jansen Integer src2Id, 294*59599516SKenneth E. Jansen Real* coef, 295*59599516SKenneth E. Jansen Integer nSrc1Dims, 296*59599516SKenneth E. Jansen Integer src1Off, 297*59599516SKenneth E. Jansen Integer nSrc2Dims, 298*59599516SKenneth E. Jansen Integer src2Off, 299*59599516SKenneth E. Jansen Integer nDims ) ; 300*59599516SKenneth E. Jansen Void lesVdimDaxpy( UsrHd usrHd, 301*59599516SKenneth E. Jansen Integer srcId, 302*59599516SKenneth E. Jansen Integer dstId, 303*59599516SKenneth E. Jansen Real* coef, 304*59599516SKenneth E. Jansen Integer nSrcDims, 305*59599516SKenneth E. Jansen Integer srcOff, 306*59599516SKenneth E. Jansen Integer nDstDims, 307*59599516SKenneth E. Jansen Integer dstOff, 308*59599516SKenneth E. Jansen Integer nDims ) ; 309*59599516SKenneth E. Jansen 310*59599516SKenneth E. Jansen Void lesApG( UsrHd usrHd, 311*59599516SKenneth E. Jansen Integer srcId, 312*59599516SKenneth E. Jansen Integer dstId, 313*59599516SKenneth E. Jansen Integer nSrcDims, 314*59599516SKenneth E. Jansen Integer srcOff, 315*59599516SKenneth E. Jansen Integer nDstDims, 316*59599516SKenneth E. Jansen Integer dstOff ) ; 317*59599516SKenneth E. Jansen Void lesApKG( UsrHd usrHd, 318*59599516SKenneth E. Jansen Integer src1Id, 319*59599516SKenneth E. Jansen Integer src2Id, 320*59599516SKenneth E. Jansen Integer dstId, 321*59599516SKenneth E. Jansen Integer nSrc1Dims, 322*59599516SKenneth E. Jansen Integer src1Off, 323*59599516SKenneth E. Jansen Integer nSrc2Dims, 324*59599516SKenneth E. Jansen Integer src2Off, 325*59599516SKenneth E. Jansen Integer nDstDims, 326*59599516SKenneth E. Jansen Integer dstOff ) ; 327*59599516SKenneth E. Jansen Void lesApNGt( UsrHd usrHd, 328*59599516SKenneth E. Jansen Integer srcId, 329*59599516SKenneth E. Jansen Integer dstId, 330*59599516SKenneth E. Jansen Integer nSrcDims, 331*59599516SKenneth E. Jansen Integer srcOff, 332*59599516SKenneth E. Jansen Integer nDstDims, 333*59599516SKenneth E. Jansen Integer dstOff ) ; 334*59599516SKenneth E. Jansen Void lesApNGtC( UsrHd usrHd, 335*59599516SKenneth E. Jansen Integer src1Id, 336*59599516SKenneth E. Jansen Integer src2Id, 337*59599516SKenneth E. Jansen Integer dstId, 338*59599516SKenneth E. Jansen Integer nSrc1Dims, 339*59599516SKenneth E. Jansen Integer src1Off, 340*59599516SKenneth E. Jansen Integer nSrc2Dims, 341*59599516SKenneth E. Jansen Integer src2Off, 342*59599516SKenneth E. Jansen Integer nDstDims, 343*59599516SKenneth E. Jansen Integer dstOff ) ; 344*59599516SKenneth E. Jansen Void lesApFull( UsrHd usrHd, 345*59599516SKenneth E. Jansen Integer srcId, 346*59599516SKenneth E. Jansen Integer dstId, 347*59599516SKenneth E. Jansen Integer nSrcDims, 348*59599516SKenneth E. Jansen Integer srcOff, 349*59599516SKenneth E. Jansen Integer nDstDims, 350*59599516SKenneth E. Jansen Integer dstOff ) ; 351*59599516SKenneth E. Jansen Void lesApSclr( UsrHd usrHd, 352*59599516SKenneth E. Jansen Integer srcId, 353*59599516SKenneth E. Jansen Integer dstId, 354*59599516SKenneth E. Jansen Integer nSrcDims, 355*59599516SKenneth E. Jansen Integer srcOff, 356*59599516SKenneth E. Jansen Integer nDstDims, 357*59599516SKenneth E. Jansen Integer dstOff ) ; 358*59599516SKenneth E. Jansen Void lesPrecPPE( UsrHd usrHd, 359*59599516SKenneth E. Jansen Integer srcId, 360*59599516SKenneth E. Jansen Integer dstId, 361*59599516SKenneth E. Jansen Integer nSrcDims, 362*59599516SKenneth E. Jansen Integer srcOff, 363*59599516SKenneth E. Jansen Integer nDstDims, 364*59599516SKenneth E. Jansen Integer dstOff ) ; 365*59599516SKenneth E. Jansen 366*59599516SKenneth E. Jansen /*=========================================================================== 367*59599516SKenneth E. Jansen * 368*59599516SKenneth E. Jansen * End of the file 369*59599516SKenneth E. Jansen * 370*59599516SKenneth E. Jansen *=========================================================================== 371*59599516SKenneth E. Jansen */ 372*59599516SKenneth E. Jansen 373*59599516SKenneth E. Jansen #endif /* __LES_H__ */ 374