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