xref: /phasta/phSolver/incompressible/usr.c (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen /*===========================================================================
2*59599516SKenneth E. Jansen  *
3*59599516SKenneth E. Jansen  * "usr.c":  user's function
4*59599516SKenneth E. Jansen  *
5*59599516SKenneth E. Jansen  *===========================================================================
6*59599516SKenneth E. Jansen  */
7*59599516SKenneth E. Jansen #include <stdio.h>
8*59599516SKenneth E. Jansen #include <stdlib.h>
9*59599516SKenneth E. Jansen #include "les.h"
10*59599516SKenneth E. Jansen #include "usr.h"
11*59599516SKenneth E. Jansen //mr change
12*59599516SKenneth E. Jansen // #include "common_c.h" //not needed here any more because added in new_interface.c
13*59599516SKenneth E. Jansen //mr change end
14*59599516SKenneth E. Jansen #include "common_c.h"
15*59599516SKenneth E. Jansen #include "phastaIO.h"
16*59599516SKenneth E. Jansen #include "new_interface.h"
17*59599516SKenneth E. Jansen #include <FCMangle.h>
18*59599516SKenneth E. Jansen 
19*59599516SKenneth E. Jansen extern char phasta_iotype[80];
20*59599516SKenneth E. Jansen extern int field_flag; //new_interface.c //TODO: figure out where these
21*59599516SKenneth E. Jansen extern int f_descriptor; //new_interface.c // should be
22*59599516SKenneth E. Jansen 
23*59599516SKenneth E. Jansen /*===========================================================================
24*59599516SKenneth E. Jansen  *
25*59599516SKenneth E. Jansen  * "usrNew":  Put all the values in usrHd
26*59599516SKenneth E. Jansen  *
27*59599516SKenneth E. Jansen  * From FORTRAN
28*59599516SKenneth E. Jansen  *
29*59599516SKenneth E. Jansen  *	integer		usr(100)
30*59599516SKenneth E. Jansen  *	dimension	aperm(numnp,nperm)
31*59599516SKenneth E. Jansen  *	...
32*59599516SKenneth E. Jansen  *	call usrnew( usr, aperm, ..., numnp, ...)
33*59599516SKenneth E. Jansen  *
34*59599516SKenneth E. Jansen  *
35*59599516SKenneth E. Jansen  *===========================================================================
36*59599516SKenneth E. Jansen  */
37*59599516SKenneth E. Jansen #include "mpi.h"
38*59599516SKenneth E. Jansen static int lmNum = 0;
39*59599516SKenneth E. Jansen static LesHd lesArray[8];
40*59599516SKenneth E. Jansen void   usrNew(	UsrHd	  usrHd,
41*59599516SKenneth E. Jansen                         int*      eqnType,
42*59599516SKenneth E. Jansen                         double*	  aperm,
43*59599516SKenneth E. Jansen                         double*	  atemp,
44*59599516SKenneth E. Jansen                         double*   resf,
45*59599516SKenneth E. Jansen                         double*   solinc,
46*59599516SKenneth E. Jansen                         double*   flowDiag,
47*59599516SKenneth E. Jansen                         double*   sclrDiag,
48*59599516SKenneth E. Jansen                         double*   lesP,
49*59599516SKenneth E. Jansen                         double*   lesQ,
50*59599516SKenneth E. Jansen                         int*      iBC,
51*59599516SKenneth E. Jansen                         double*   BC,
52*59599516SKenneth E. Jansen                         int*      iper,
53*59599516SKenneth E. Jansen                         int*      ilwork,
54*59599516SKenneth E. Jansen                         int*      numpe,
55*59599516SKenneth E. Jansen                         int*      nNodes,
56*59599516SKenneth E. Jansen                         int*      nenl,
57*59599516SKenneth E. Jansen                         int*	  nPermDims,
58*59599516SKenneth E. Jansen                         int*	  nTmpDims,
59*59599516SKenneth E. Jansen                         int*	  rowp,
60*59599516SKenneth E. Jansen                         int*	  colm,
61*59599516SKenneth E. Jansen                         double*   lhsK,
62*59599516SKenneth E. Jansen                         double*   lhsP,
63*59599516SKenneth E. Jansen                         double*   lhsS,
64*59599516SKenneth E. Jansen                         int*      nnz_tot,
65*59599516SKenneth E. Jansen                         double*   CGsol
66*59599516SKenneth E. Jansen     )
67*59599516SKenneth E. Jansen {
68*59599516SKenneth E. Jansen     char*	funcName = "usrNew" ;	/* function name		*/
69*59599516SKenneth E. Jansen 
70*59599516SKenneth E. Jansen /*---------------------------------------------------------------------------
71*59599516SKenneth E. Jansen  * Stick the parameters
72*59599516SKenneth E. Jansen  *---------------------------------------------------------------------------
73*59599516SKenneth E. Jansen  */
74*59599516SKenneth E. Jansen     usrHd->eqnType      = *eqnType ;
75*59599516SKenneth E. Jansen     usrHd->aperm	= aperm ;
76*59599516SKenneth E. Jansen     usrHd->atemp	= atemp ;
77*59599516SKenneth E. Jansen     usrHd->resf         = resf ;
78*59599516SKenneth E. Jansen     usrHd->solinc       = solinc ;
79*59599516SKenneth E. Jansen     usrHd->flowDiag     = flowDiag ;
80*59599516SKenneth E. Jansen     usrHd->sclrDiag     = sclrDiag ;
81*59599516SKenneth E. Jansen     usrHd->lesP         = lesP ;
82*59599516SKenneth E. Jansen     usrHd->lesQ         = lesQ ;
83*59599516SKenneth E. Jansen     usrHd->iBC          = iBC  ;
84*59599516SKenneth E. Jansen     usrHd->BC           = BC   ;
85*59599516SKenneth E. Jansen     usrHd->iper         = iper ;
86*59599516SKenneth E. Jansen     usrHd->ilwork       = ilwork ;
87*59599516SKenneth E. Jansen     usrHd->numpe        = *numpe ;
88*59599516SKenneth E. Jansen     usrHd->nNodes	= *nNodes ;
89*59599516SKenneth E. Jansen     usrHd->nenl         = *nenl ;
90*59599516SKenneth E. Jansen     usrHd->nPermDims	= *nPermDims ;
91*59599516SKenneth E. Jansen     usrHd->nTmpDims	= *nTmpDims ;
92*59599516SKenneth E. Jansen     usrHd->rowp	        = rowp ;
93*59599516SKenneth E. Jansen     usrHd->colm	        = colm ;
94*59599516SKenneth E. Jansen     usrHd->lhsK	        = lhsK ;
95*59599516SKenneth E. Jansen     usrHd->lhsP	        = lhsP ;
96*59599516SKenneth E. Jansen     usrHd->lhsS         = lhsS ;
97*59599516SKenneth E. Jansen     usrHd->nnz_tot      = nnz_tot ;
98*59599516SKenneth E. Jansen     usrHd->CGsol        = CGsol;
99*59599516SKenneth E. Jansen } /* end of usrNew() */
100*59599516SKenneth E. Jansen 
101*59599516SKenneth E. Jansen /*===========================================================================
102*59599516SKenneth E. Jansen  *
103*59599516SKenneth E. Jansen  * "usrPointer":  Get the pointer
104*59599516SKenneth E. Jansen  *
105*59599516SKenneth E. Jansen  *===========================================================================
106*59599516SKenneth E. Jansen  */
107*59599516SKenneth E. Jansen Real*
108*59599516SKenneth E. Jansen usrPointer(	UsrHd	usrHd,
109*59599516SKenneth E. Jansen             Integer	id,
110*59599516SKenneth E. Jansen             Integer	offset,
111*59599516SKenneth E. Jansen             Integer	nDims )
112*59599516SKenneth E. Jansen {
113*59599516SKenneth E. Jansen     char*	funcName = "usrPointer";/* function name		*/
114*59599516SKenneth E. Jansen     Real*	pnt ;			/* pointer			*/
115*59599516SKenneth E. Jansen 
116*59599516SKenneth E. Jansen /*---------------------------------------------------------------------------
117*59599516SKenneth E. Jansen  * Get the head of the memory
118*59599516SKenneth E. Jansen  *---------------------------------------------------------------------------
119*59599516SKenneth E. Jansen  */
120*59599516SKenneth E. Jansen     if ( id == LES_RES_PNT ) {
121*59599516SKenneth E. Jansen 
122*59599516SKenneth E. Jansen         pnt	= usrHd->resf ;
123*59599516SKenneth E. Jansen         id	= 0 ;
124*59599516SKenneth E. Jansen 
125*59599516SKenneth E. Jansen     } else if ( id == LES_SOL_PNT ) {
126*59599516SKenneth E. Jansen 
127*59599516SKenneth E. Jansen         pnt	= usrHd->solinc ;
128*59599516SKenneth E. Jansen         id	= 0 ;
129*59599516SKenneth E. Jansen 
130*59599516SKenneth E. Jansen     } else if ( id < 0 ) {
131*59599516SKenneth E. Jansen 
132*59599516SKenneth E. Jansen         pnt	= usrHd->aperm ;
133*59599516SKenneth E. Jansen         id	= id + usrHd->nPermDims ;
134*59599516SKenneth E. Jansen 
135*59599516SKenneth E. Jansen     } else {
136*59599516SKenneth E. Jansen 
137*59599516SKenneth E. Jansen         pnt	= usrHd->atemp ;
138*59599516SKenneth E. Jansen         id	= id ;
139*59599516SKenneth E. Jansen 
140*59599516SKenneth E. Jansen     }
141*59599516SKenneth E. Jansen /*---------------------------------------------------------------------------
142*59599516SKenneth E. Jansen  * Get the offset
143*59599516SKenneth E. Jansen  *---------------------------------------------------------------------------
144*59599516SKenneth E. Jansen  */
145*59599516SKenneth E. Jansen     pnt		= pnt + (id + offset) * usrHd->nNodes ;
146*59599516SKenneth E. Jansen 
147*59599516SKenneth E. Jansen /*---------------------------------------------------------------------------
148*59599516SKenneth E. Jansen  * Return the pointer
149*59599516SKenneth E. Jansen  *---------------------------------------------------------------------------
150*59599516SKenneth E. Jansen  */
151*59599516SKenneth E. Jansen     return( pnt ) ;
152*59599516SKenneth E. Jansen 
153*59599516SKenneth E. Jansen } /* end of usrPointer() */
154*59599516SKenneth E. Jansen 
155*59599516SKenneth E. Jansen #define myflesnew FortranCInterface_GLOBAL_(myflesnew,MYFLESNEW)
156*59599516SKenneth E. Jansen #define myflessolve FortranCInterface_GLOBAL_(myflessolve,MYFLESSOLVE)
157*59599516SKenneth E. Jansen #define savelesrestart FortranCInterface_GLOBAL_(savelesrestart,SAVELESRESTART)
158*59599516SKenneth E. Jansen #define readlesrestart FortranCInterface_GLOBAL_(readlesrestart,READLESRESTART)
159*59599516SKenneth E. Jansen #define solverlicenseserver FortranCInterface_GLOBAL_(solverlicenseserver,SOLVERLICENSESERVER)
160*59599516SKenneth E. Jansen 
161*59599516SKenneth E. Jansen 
162*59599516SKenneth E. Jansen 
163*59599516SKenneth E. Jansen #ifdef intel
164*59599516SKenneth E. Jansen         lesArray[ *lesId ] = lesNew( fileName, *lmport, &lmNum, *eqnType,
165*59599516SKenneth E. Jansen                                      *nDofs, *minIters, *maxIters, *nKvecs,
166*59599516SKenneth E. Jansen                                      *prjFlag, *nPrjs, *presPrjFlag, *nPresPrjs,presPrec,
167*59599516SKenneth E. Jansen                                      *tol, *presTol, *verbose, stats, nPermDims,
168*59599516SKenneth E. Jansen                                      nTmpDims );
169*59599516SKenneth E. Jansen     return ;}
170*59599516SKenneth E. Jansen /* the following is a fake function that was required when we moved to
171*59599516SKenneth E. Jansen    a C++ main on in the MS Visual Studio environment.  It fails to
172*59599516SKenneth E. Jansen    link because it is looking for this function
173*59599516SKenneth E. Jansen */
174*59599516SKenneth E. Jansen void  _CrtDbgReport() {
175*59599516SKenneth E. Jansen     return ;}
176*59599516SKenneth E. Jansen 
177*59599516SKenneth E. Jansen double __vcos_(double fg) { fflush(stdout); printf(" vcos got called \n"); fflush(stdout);}
178*59599516SKenneth E. Jansen double __vlog_(double fg)  { fflush(stdout); printf(" vlog got called \n"); fflush(stdout);}
179*59599516SKenneth E. Jansen 
180*59599516SKenneth E. Jansen 
181*59599516SKenneth E. Jansen #endif /* we are in unix land... whew.  secretly we have equivalenced fileName and  */
182*59599516SKenneth E. Jansen 
183*59599516SKenneth E. Jansen /* #ifdef LINUX*/
184*59599516SKenneth E. Jansen /* void flush_(int* junk ){ return; }*/
185*59599516SKenneth E. Jansen /* #endif*/
186*59599516SKenneth E. Jansen void    myflesnew(	     Integer*	lesId,
187*59599516SKenneth E. Jansen                          Integer*	lmport,
188*59599516SKenneth E. Jansen                          Integer*	eqnType,
189*59599516SKenneth E. Jansen                          Integer*	nDofs,
190*59599516SKenneth E. Jansen                          Integer*	minIters,
191*59599516SKenneth E. Jansen                          Integer*	maxIters,
192*59599516SKenneth E. Jansen                          Integer*	nKvecs,
193*59599516SKenneth E. Jansen                          Integer*	prjFlag,
194*59599516SKenneth E. Jansen                          Integer*	nPrjs,
195*59599516SKenneth E. Jansen                          Integer*	presPrjFlag,
196*59599516SKenneth E. Jansen                          Integer*	nPresPrjs,
197*59599516SKenneth E. Jansen                          Real*	    tol,
198*59599516SKenneth E. Jansen                          Real*     	presTol,
199*59599516SKenneth E. Jansen                          Integer*	verbose,
200*59599516SKenneth E. Jansen                          Real*     	stats,
201*59599516SKenneth E. Jansen                          Integer*	nPermDims,
202*59599516SKenneth E. Jansen                          Integer*	nTmpDims,
203*59599516SKenneth E. Jansen                          char*      lmhost          ) {
204*59599516SKenneth E. Jansen     int procId;
205*59599516SKenneth E. Jansen #ifdef AMG
206*59599516SKenneth E. Jansen     int presPrec=1;
207*59599516SKenneth E. Jansen #else
208*59599516SKenneth E. Jansen     int presPrec=0;
209*59599516SKenneth E. Jansen #endif
210*59599516SKenneth E. Jansen     MPI_Comm_rank( MPI_COMM_WORLD, &procId ) ;
211*59599516SKenneth E. Jansen     if(lmNum==0){
212*59599516SKenneth E. Jansen         if(procId==0){
213*59599516SKenneth E. Jansen             lesArray[ *lesId ] = lesNew( lmhost, *lmport, &lmNum, *eqnType,
214*59599516SKenneth E. Jansen                                          *nDofs, *minIters, *maxIters, *nKvecs,
215*59599516SKenneth E. Jansen                                          *prjFlag, *nPrjs, *presPrjFlag, *nPresPrjs,presPrec,
216*59599516SKenneth E. Jansen                                          *tol, *presTol, *verbose, stats, nPermDims,
217*59599516SKenneth E. Jansen                                          nTmpDims );
218*59599516SKenneth E. Jansen             MPI_Bcast( &lmNum, 1, MPI_INT, 0, MPI_COMM_WORLD ) ;
219*59599516SKenneth E. Jansen         } else {
220*59599516SKenneth E. Jansen             MPI_Bcast( &lmNum, 1, MPI_INT, 0, MPI_COMM_WORLD ) ;
221*59599516SKenneth E. Jansen             lesArray[ *lesId ] = lesNew( lmhost, *lmport, &lmNum, *eqnType,
222*59599516SKenneth E. Jansen                                          *nDofs, *minIters, *maxIters, *nKvecs,
223*59599516SKenneth E. Jansen                                          *prjFlag, *nPrjs, *presPrjFlag, *nPresPrjs,presPrec,
224*59599516SKenneth E. Jansen                                          *tol, *presTol, *verbose, stats, nPermDims,
225*59599516SKenneth E. Jansen                                          nTmpDims );
226*59599516SKenneth E. Jansen         }
227*59599516SKenneth E. Jansen     } else {
228*59599516SKenneth E. Jansen         lesArray[ *lesId ] = lesNew( lmhost, *lmport, &lmNum, *eqnType,
229*59599516SKenneth E. Jansen                                      *nDofs, *minIters, *maxIters, *nKvecs,
230*59599516SKenneth E. Jansen                                      *prjFlag, *nPrjs, *presPrjFlag, *nPresPrjs,presPrec,
231*59599516SKenneth E. Jansen                                      *tol, *presTol, *verbose, stats, nPermDims,
232*59599516SKenneth E. Jansen                                      nTmpDims );
233*59599516SKenneth E. Jansen     }
234*59599516SKenneth E. Jansen     return ;
235*59599516SKenneth E. Jansen }
236*59599516SKenneth E. Jansen 
237*59599516SKenneth E. Jansen 
238*59599516SKenneth E. Jansen void
239*59599516SKenneth E. Jansen savelesrestart( Integer* lesId,
240*59599516SKenneth E. Jansen                  Real*    aperm,
241*59599516SKenneth E. Jansen                  Integer* nshg,
242*59599516SKenneth E. Jansen                  Integer* myrank,
243*59599516SKenneth E. Jansen                  Integer* lstep,
244*59599516SKenneth E. Jansen                  Integer* nPermDims ) {
245*59599516SKenneth E. Jansen 
246*59599516SKenneth E. Jansen     int nPrjs, PrjSrcId;
247*59599516SKenneth E. Jansen     int nPresPrjs, PresPrjSrcId;
248*59599516SKenneth E. Jansen     char filename[255];
249*59599516SKenneth E. Jansen     int fileHandle=0;
250*59599516SKenneth E. Jansen     int iarray[3];
251*59599516SKenneth E. Jansen     int size, nitems;
252*59599516SKenneth E. Jansen     double* projVec;
253*59599516SKenneth E. Jansen     int i, j, count;
254*59599516SKenneth E. Jansen 
255*59599516SKenneth E. Jansen //     sprintf( filename,"restart.%d.%d", *lstep, *myrank+1 );
256*59599516SKenneth E. Jansen //     openfile_( filename, "append", &fileHandle );
257*59599516SKenneth E. Jansen 
258*59599516SKenneth E. Jansen     nPrjs = (Integer) lesGetPar( lesArray[ *lesId ], LES_ACT_PRJS );
259*59599516SKenneth E. Jansen     PrjSrcId = (Integer) lesGetPar( lesArray[ *lesId ], LES_PRJ_VEC_ID );
260*59599516SKenneth E. Jansen 
261*59599516SKenneth E. Jansen     if ( PrjSrcId < 0 ) PrjSrcId += *nPermDims;
262*59599516SKenneth E. Jansen 
263*59599516SKenneth E. Jansen     projVec = (double*)malloc( nPrjs * ( *nshg ) * sizeof( double ) );
264*59599516SKenneth E. Jansen 
265*59599516SKenneth E. Jansen     count = 0;
266*59599516SKenneth E. Jansen     for( i = PrjSrcId; i < PrjSrcId+nPrjs; i ++ ) {
267*59599516SKenneth E. Jansen         for( j = 0 ; j < *nshg; j++ ) {
268*59599516SKenneth E. Jansen             projVec[ count++ ] = aperm[ (*nshg) * i + j ];
269*59599516SKenneth E. Jansen         }
270*59599516SKenneth E. Jansen     }
271*59599516SKenneth E. Jansen 
272*59599516SKenneth E. Jansen     //printf("Savelessrestart, nPrjs is %d\n",nPrjs);
273*59599516SKenneth E. Jansen 
274*59599516SKenneth E. Jansen     iarray[ 0 ] = *nshg;
275*59599516SKenneth E. Jansen     iarray[ 1 ] = nPrjs;
276*59599516SKenneth E. Jansen     nitems = 2;
277*59599516SKenneth E. Jansen     size = (*nshg)*nPrjs;
278*59599516SKenneth E. Jansen 
279*59599516SKenneth E. Jansen     int name_length;
280*59599516SKenneth E. Jansen     name_length = 18;
281*59599516SKenneth E. Jansen     Write_Field(myrank,"a","projection vectors",&name_length, (void *)projVec,"d", nshg, &nPrjs, lstep);
282*59599516SKenneth E. Jansen 
283*59599516SKenneth E. Jansen     //writeheader_( &fileHandle, "projection vectors ", (void*)iarray,
284*59599516SKenneth E. Jansen     //              &nitems, &size, "double", phasta_iotype );
285*59599516SKenneth E. Jansen     //nitems = size;
286*59599516SKenneth E. Jansen     //writedatablock_( &fileHandle, "projection vectors ", (void*)projVec,
287*59599516SKenneth E. Jansen     //                 &nitems, "double", phasta_iotype );
288*59599516SKenneth E. Jansen     free(projVec);
289*59599516SKenneth E. Jansen 
290*59599516SKenneth E. Jansen     /*************************************************************************/
291*59599516SKenneth E. Jansen 
292*59599516SKenneth E. Jansen     nPresPrjs = (Integer) lesGetPar( lesArray[ *lesId ], LES_ACT_PRES_PRJS );
293*59599516SKenneth E. Jansen     PresPrjSrcId =(Integer)lesGetPar( lesArray[ *lesId ], LES_PRES_PRJ_VEC_ID );
294*59599516SKenneth E. Jansen     if ( PresPrjSrcId < 0 ) PresPrjSrcId += *nPermDims;
295*59599516SKenneth E. Jansen 
296*59599516SKenneth E. Jansen     projVec = (double*)malloc( nPresPrjs * ( *nshg ) * sizeof( double ) );
297*59599516SKenneth E. Jansen 
298*59599516SKenneth E. Jansen     count = 0;
299*59599516SKenneth E. Jansen     for( i = PresPrjSrcId; i < (PresPrjSrcId + nPresPrjs) ; i ++ ) {
300*59599516SKenneth E. Jansen         for( j = 0 ; j < *nshg; j++ ) {
301*59599516SKenneth E. Jansen             projVec[ count++ ] = aperm[ (*nshg) * i + j ];
302*59599516SKenneth E. Jansen         }
303*59599516SKenneth E. Jansen     }
304*59599516SKenneth E. Jansen 
305*59599516SKenneth E. Jansen     iarray[ 0 ] = *nshg;
306*59599516SKenneth E. Jansen     iarray[ 1 ] = nPresPrjs;
307*59599516SKenneth E. Jansen     nitems = 2;
308*59599516SKenneth E. Jansen     size = (*nshg)*nPresPrjs;
309*59599516SKenneth E. Jansen 
310*59599516SKenneth E. Jansen     name_length = 27;
311*59599516SKenneth E. Jansen     Write_Field(myrank,"a","pressure projection vectors",&name_length, projVec,"d", nshg, &nPresPrjs, lstep);
312*59599516SKenneth E. Jansen 
313*59599516SKenneth E. Jansen //writeheader_( &fileHandle, "pressure projection vectors ", (void*)iarray,
314*59599516SKenneth E. Jansen //                  &nitems, &size, "double", phasta_iotype );
315*59599516SKenneth E. Jansen //    nitems = size;
316*59599516SKenneth E. Jansen 
317*59599516SKenneth E. Jansen //writedatablock_( &fileHandle, "pressure projection vectors ",
318*59599516SKenneth E. Jansen //                     (void*)projVec, &nitems, "double", phasta_iotype );
319*59599516SKenneth E. Jansen     free( projVec);
320*59599516SKenneth E. Jansen 
321*59599516SKenneth E. Jansen //closefile_( &fileHandle, "append" );
322*59599516SKenneth E. Jansen }
323*59599516SKenneth E. Jansen 
324*59599516SKenneth E. Jansen void
325*59599516SKenneth E. Jansen readlesrestart( Integer* lesId,
326*59599516SKenneth E. Jansen                  Real*    aperm,
327*59599516SKenneth E. Jansen                  Integer* nshg,
328*59599516SKenneth E. Jansen                  Integer* myrank,
329*59599516SKenneth E. Jansen                  Integer* lstep ,
330*59599516SKenneth E. Jansen                  Integer* nPermDims ) {
331*59599516SKenneth E. Jansen 
332*59599516SKenneth E. Jansen     int nPrjs, PrjSrcId;
333*59599516SKenneth E. Jansen     int nPresPrjs, PresPrjSrcId;
334*59599516SKenneth E. Jansen     char filename[255];
335*59599516SKenneth E. Jansen     int fileHandle=0;
336*59599516SKenneth E. Jansen     int iarray[3]={-1,-1,-1};
337*59599516SKenneth E. Jansen     int size, nitems;
338*59599516SKenneth E. Jansen     int itwo=2;
339*59599516SKenneth E. Jansen     int lnshg;
340*59599516SKenneth E. Jansen     double* projVec;
341*59599516SKenneth E. Jansen     int i,j,count;
342*59599516SKenneth E. Jansen 
343*59599516SKenneth E. Jansen //MR CHANGE
344*59599516SKenneth E. Jansen //    sprintf( filename,"restart.%d.%d", *lstep, *myrank+1 );
345*59599516SKenneth E. Jansen 
346*59599516SKenneth E. Jansen //     int nfiles=2;
347*59599516SKenneth E. Jansen //     int numParts=8;
348*59599516SKenneth E. Jansen //     int nfields=6;
349*59599516SKenneth E. Jansen     int nfiles;
350*59599516SKenneth E. Jansen     int nfields;
351*59599516SKenneth E. Jansen     int numParts;
352*59599516SKenneth E. Jansen     int nprocs;
353*59599516SKenneth E. Jansen     int nppf;
354*59599516SKenneth E. Jansen 
355*59599516SKenneth E. Jansen     nfiles = outpar.nsynciofiles;
356*59599516SKenneth E. Jansen //    nfields = outpar.nsynciofieldsreadrestart;
357*59599516SKenneth E. Jansen     numParts = workfc.numpe;
358*59599516SKenneth E. Jansen     nprocs = workfc.numpe;
359*59599516SKenneth E. Jansen //MR CHANGE END
360*59599516SKenneth E. Jansen 
361*59599516SKenneth E. Jansen //    int nppf = numParts/nfiles;
362*59599516SKenneth E. Jansen     char fieldname[255];
363*59599516SKenneth E. Jansen 
364*59599516SKenneth E. Jansen //      MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
365*59599516SKenneth E. Jansen     // Calculate number of parts each proc deal with and where it start and end ...
366*59599516SKenneth E. Jansen     int nppp = numParts/nprocs;        // nppp : Number of parts per proc ...
367*59599516SKenneth E. Jansen     int startpart = *myrank * nppp +1;    // Part id from which I (myrank) start ...
368*59599516SKenneth E. Jansen     int endpart = startpart + nppp - 1;  // Part id to which I (myrank) end ...
369*59599516SKenneth E. Jansen 
370*59599516SKenneth E. Jansen     sprintf( filename,"restart-dat.%d.%d",*lstep,((int)(*myrank/(numParts/nfiles))+1));
371*59599516SKenneth E. Jansen     queryphmpiio(filename, &nfields, &nppf);
372*59599516SKenneth E. Jansen     initphmpiio(&nfields, &nppf, &nfiles,&fileHandle,"read");
373*59599516SKenneth E. Jansen //MR CHANGE END
374*59599516SKenneth E. Jansen 
375*59599516SKenneth E. Jansen     openfile( filename, "read", &fileHandle );
376*59599516SKenneth E. Jansen 
377*59599516SKenneth E. Jansen 
378*59599516SKenneth E. Jansen //        if ( fileHandle == 0 ) return;
379*59599516SKenneth E. Jansen     if ( fileHandle < 0 ) return; // See phastaIO.cc for error fileHandle
380*59599516SKenneth E. Jansen //     for (  i = 0; i < nppp; i++  ) // If one day several parts per file
381*59599516SKenneth E. Jansen //     {
382*59599516SKenneth E. Jansen     bzero((void*)fieldname,255);
383*59599516SKenneth E. Jansen     sprintf(fieldname,"projection vectors@%d",startpart);
384*59599516SKenneth E. Jansen //     readheader_( &fileHandle, "projection vectors", (void*)iarray,
385*59599516SKenneth E. Jansen //                  &itwo, "integer", phasta_iotype );
386*59599516SKenneth E. Jansen     readheader( &fileHandle, fieldname, (void*)iarray,
387*59599516SKenneth E. Jansen                 &itwo, "integer", phasta_iotype );
388*59599516SKenneth E. Jansen //       }
389*59599516SKenneth E. Jansen //MR CHANGE END
390*59599516SKenneth E. Jansen 
391*59599516SKenneth E. Jansen     if ( iarray[0] != *nshg ) {
392*59599516SKenneth E. Jansen         closefile( &fileHandle, "read" );
393*59599516SKenneth E. Jansen         if(workfc.myrank==workfc.master)
394*59599516SKenneth E. Jansen           printf("projection vectors are being initialized to zero (SAFE)\n");
395*59599516SKenneth E. Jansen         return;
396*59599516SKenneth E. Jansen     }
397*59599516SKenneth E. Jansen 
398*59599516SKenneth E. Jansen     lnshg = iarray[ 0 ] ;
399*59599516SKenneth E. Jansen     nPrjs = iarray[ 1 ] ;
400*59599516SKenneth E. Jansen 
401*59599516SKenneth E. Jansen     size = (*nshg)*nPrjs;
402*59599516SKenneth E. Jansen     projVec = (double*)malloc( size * sizeof( double ));
403*59599516SKenneth E. Jansen 
404*59599516SKenneth E. Jansen //MR CHANGE
405*59599516SKenneth E. Jansen //     readdatablock_( &fileHandle, "projection vectors", (void*)projVec,
406*59599516SKenneth E. Jansen //                         &size, "double", phasta_iotype );
407*59599516SKenneth E. Jansen     readdatablock( &fileHandle, fieldname, (void*)projVec,
408*59599516SKenneth E. Jansen                     &size, "double", phasta_iotype );
409*59599516SKenneth E. Jansen //MR CHANGE END
410*59599516SKenneth E. Jansen 
411*59599516SKenneth E. Jansen     lesSetPar( lesArray[ *lesId ], LES_ACT_PRJS, (Real) nPrjs );
412*59599516SKenneth E. Jansen     PrjSrcId = (Integer) lesGetPar( lesArray[ *lesId ], LES_PRJ_VEC_ID );
413*59599516SKenneth E. Jansen     if ( PrjSrcId < 0 ) PrjSrcId += *nPermDims;
414*59599516SKenneth E. Jansen 
415*59599516SKenneth E. Jansen     count = 0;
416*59599516SKenneth E. Jansen     for( i = PrjSrcId; i < PrjSrcId+nPrjs; i ++ ) {
417*59599516SKenneth E. Jansen         for( j = 0 ; j < *nshg; j++ ) {
418*59599516SKenneth E. Jansen             aperm[ (*nshg) * i + j ] = projVec[ count++ ] ;
419*59599516SKenneth E. Jansen         }
420*59599516SKenneth E. Jansen     }
421*59599516SKenneth E. Jansen 
422*59599516SKenneth E. Jansen     free( projVec );
423*59599516SKenneth E. Jansen 
424*59599516SKenneth E. Jansen     /************************************************************************/
425*59599516SKenneth E. Jansen 
426*59599516SKenneth E. Jansen     iarray[0] = -1; iarray[1] = -1; iarray[2] = -1;
427*59599516SKenneth E. Jansen 
428*59599516SKenneth E. Jansen //MR CHANGE
429*59599516SKenneth E. Jansen 
430*59599516SKenneth E. Jansen     bzero((void*)fieldname,255);
431*59599516SKenneth E. Jansen     sprintf(fieldname,"pressure projection vectors@%d",startpart);
432*59599516SKenneth E. Jansen 
433*59599516SKenneth E. Jansen //MR CHANGE END
434*59599516SKenneth E. Jansen 
435*59599516SKenneth E. Jansen 
436*59599516SKenneth E. Jansen     readheader( &fileHandle, fieldname, (void*)iarray,
437*59599516SKenneth E. Jansen                  &itwo, "integer", phasta_iotype );
438*59599516SKenneth E. Jansen 
439*59599516SKenneth E. Jansen     lnshg = iarray[ 0 ] ;
440*59599516SKenneth E. Jansen     nPresPrjs = iarray[ 1 ] ;
441*59599516SKenneth E. Jansen 
442*59599516SKenneth E. Jansen     if ( lnshg != *nshg )  {
443*59599516SKenneth E. Jansen         closefile( &fileHandle, "read" );
444*59599516SKenneth E. Jansen         if(workfc.myrank==workfc.master)
445*59599516SKenneth E. Jansen           printf("pressure projection vectors are being initialized to zero (SAFE)\n");
446*59599516SKenneth E. Jansen         return;
447*59599516SKenneth E. Jansen     }
448*59599516SKenneth E. Jansen 
449*59599516SKenneth E. Jansen     size = (*nshg)*nPresPrjs;
450*59599516SKenneth E. Jansen     projVec = (double*)malloc( size * sizeof( double ));
451*59599516SKenneth E. Jansen 
452*59599516SKenneth E. Jansen     readdatablock( &fileHandle, fieldname, (void*)projVec,
453*59599516SKenneth E. Jansen                     &size, "double", phasta_iotype );
454*59599516SKenneth E. Jansen 
455*59599516SKenneth E. Jansen     lesSetPar( lesArray[ *lesId ], LES_ACT_PRES_PRJS, (Real) nPresPrjs );
456*59599516SKenneth E. Jansen     PresPrjSrcId=(Integer)lesGetPar( lesArray[ *lesId ], LES_PRES_PRJ_VEC_ID );
457*59599516SKenneth E. Jansen     if ( PresPrjSrcId < 0 ) PresPrjSrcId += *nPermDims;
458*59599516SKenneth E. Jansen 
459*59599516SKenneth E. Jansen     count = 0;
460*59599516SKenneth E. Jansen     for( i = PresPrjSrcId; i < PresPrjSrcId+nPresPrjs; i ++ ) {
461*59599516SKenneth E. Jansen         for( j = 0 ; j < *nshg; j++ ) {
462*59599516SKenneth E. Jansen             aperm[ (*nshg) * i + j ] = projVec[ count++ ] ;
463*59599516SKenneth E. Jansen         }
464*59599516SKenneth E. Jansen     }
465*59599516SKenneth E. Jansen 
466*59599516SKenneth E. Jansen     free( projVec );
467*59599516SKenneth E. Jansen 
468*59599516SKenneth E. Jansen     closefile( &fileHandle, "read" );
469*59599516SKenneth E. Jansen 
470*59599516SKenneth E. Jansen //MR CHANGE
471*59599516SKenneth E. Jansen     finalizephmpiio(&fileHandle);
472*59599516SKenneth E. Jansen //MR CHANGE END
473*59599516SKenneth E. Jansen 
474*59599516SKenneth E. Jansen }
475*59599516SKenneth E. Jansen 
476*59599516SKenneth E. Jansen void  myflessolve( Integer* lesId,
477*59599516SKenneth E. Jansen                     UsrHd    usrHd){
478*59599516SKenneth E. Jansen     lesSolve( lesArray[ *lesId ], usrHd );
479*59599516SKenneth E. Jansen }
480*59599516SKenneth E. Jansen 
481*59599516SKenneth E. Jansen 
482*59599516SKenneth E. Jansen int solverlicenseserver(char key[]){
483*59599516SKenneth E. Jansen #ifdef intel
484*59599516SKenneth E. Jansen     strcpy(key,"C:\\cygwin\\license.dat");
485*59599516SKenneth E. Jansen #else
486*59599516SKenneth E. Jansen     char* env_server_name;
487*59599516SKenneth E. Jansen     env_server_name = getenv("LES_LICENSE_SERVER");
488*59599516SKenneth E. Jansen     if(env_server_name) strcpy(key, env_server_name);
489*59599516SKenneth E. Jansen     else {
490*59599516SKenneth E. Jansen         if(workfc.myrank==workfc.master) {
491*59599516SKenneth E. Jansen           fprintf(stderr,"environment variable LES_LICENSE_SERVER not defined \n");
492*59599516SKenneth E. Jansen           fprintf(stderr,"using wesley as default \n");
493*59599516SKenneth E. Jansen         }
494*59599516SKenneth E. Jansen //MR CHANGE
495*59599516SKenneth E. Jansen //        strcpy(key, "wesley.scorec.rpi.edu");
496*59599516SKenneth E. Jansen         strcpy(key, "acusim.license.scorec.rpi.edu");
497*59599516SKenneth E. Jansen //MR CHANGE END
498*59599516SKenneth E. Jansen     }
499*59599516SKenneth E. Jansen #endif
500*59599516SKenneth E. Jansen     return 1;
501*59599516SKenneth E. Jansen }
502