xref: /phasta/phSolver/incompressible/les.h (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
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