xref: /phasta/phSolver/incompressible/usr.c (revision 57ac376bfbd520e51f34eb5b6d84c8ca52b5aee1)
159599516SKenneth E. Jansen /*===========================================================================
259599516SKenneth E. Jansen  *
359599516SKenneth E. Jansen  * "usr.c":  user's function
459599516SKenneth E. Jansen  *
559599516SKenneth E. Jansen  *===========================================================================
659599516SKenneth E. Jansen  */
759599516SKenneth E. Jansen #include <stdio.h>
859599516SKenneth E. Jansen #include <stdlib.h>
959599516SKenneth E. Jansen #include "les.h"
1059599516SKenneth E. Jansen #include "usr.h"
1159599516SKenneth E. Jansen #include "common_c.h"
1259599516SKenneth E. Jansen #include "phastaIO.h"
138dcbc979SCameron Smith #include "phIO.h"
1459599516SKenneth E. Jansen #include "new_interface.h"
1559599516SKenneth E. Jansen #include <FCMangle.h>
1659599516SKenneth E. Jansen 
1759599516SKenneth E. Jansen extern char phasta_iotype[80];
1859599516SKenneth E. Jansen 
1959599516SKenneth E. Jansen /*===========================================================================
2059599516SKenneth E. Jansen  *
2159599516SKenneth E. Jansen  * "usrNew":  Put all the values in usrHd
2259599516SKenneth E. Jansen  *
2359599516SKenneth E. Jansen  * From FORTRAN
2459599516SKenneth E. Jansen  *
2559599516SKenneth E. Jansen  *	integer		usr(100)
2659599516SKenneth E. Jansen  *	dimension	aperm(numnp,nperm)
2759599516SKenneth E. Jansen  *	...
2859599516SKenneth E. Jansen  *	call usrnew( usr, aperm, ..., numnp, ...)
2959599516SKenneth E. Jansen  *
3059599516SKenneth E. Jansen  *
3159599516SKenneth E. Jansen  *===========================================================================
3259599516SKenneth E. Jansen  */
3359599516SKenneth E. Jansen #include "mpi.h"
3459599516SKenneth E. Jansen static int lmNum = 0;
3559599516SKenneth E. Jansen static LesHd lesArray[8];
3659599516SKenneth E. Jansen void   usrNew(	UsrHd	  usrHd,
3759599516SKenneth E. Jansen                         int*      eqnType,
3859599516SKenneth E. Jansen                         double*	  aperm,
3959599516SKenneth E. Jansen                         double*	  atemp,
4059599516SKenneth E. Jansen                         double*   resf,
4159599516SKenneth E. Jansen                         double*   solinc,
4259599516SKenneth E. Jansen                         double*   flowDiag,
4359599516SKenneth E. Jansen                         double*   sclrDiag,
4459599516SKenneth E. Jansen                         double*   lesP,
4559599516SKenneth E. Jansen                         double*   lesQ,
4659599516SKenneth E. Jansen                         int*      iBC,
4759599516SKenneth E. Jansen                         double*   BC,
4859599516SKenneth E. Jansen                         int*      iper,
4959599516SKenneth E. Jansen                         int*      ilwork,
5059599516SKenneth E. Jansen                         int*      numpe,
5159599516SKenneth E. Jansen                         int*      nNodes,
5259599516SKenneth E. Jansen                         int*      nenl,
5359599516SKenneth E. Jansen                         int*	  nPermDims,
5459599516SKenneth E. Jansen                         int*	  nTmpDims,
5559599516SKenneth E. Jansen                         int*	  rowp,
5659599516SKenneth E. Jansen                         int*	  colm,
5759599516SKenneth E. Jansen                         double*   lhsK,
5859599516SKenneth E. Jansen                         double*   lhsP,
5959599516SKenneth E. Jansen                         double*   lhsS,
6059599516SKenneth E. Jansen                         int*      nnz_tot,
6159599516SKenneth E. Jansen                         double*   CGsol
6259599516SKenneth E. Jansen     )
6359599516SKenneth E. Jansen {
6459599516SKenneth E. Jansen     char*	funcName = "usrNew" ;	/* function name		*/
6559599516SKenneth E. Jansen 
6659599516SKenneth E. Jansen /*---------------------------------------------------------------------------
6759599516SKenneth E. Jansen  * Stick the parameters
6859599516SKenneth E. Jansen  *---------------------------------------------------------------------------
6959599516SKenneth E. Jansen  */
7059599516SKenneth E. Jansen     usrHd->eqnType      = *eqnType ;
7159599516SKenneth E. Jansen     usrHd->aperm	= aperm ;
7259599516SKenneth E. Jansen     usrHd->atemp	= atemp ;
7359599516SKenneth E. Jansen     usrHd->resf         = resf ;
7459599516SKenneth E. Jansen     usrHd->solinc       = solinc ;
7559599516SKenneth E. Jansen     usrHd->flowDiag     = flowDiag ;
7659599516SKenneth E. Jansen     usrHd->sclrDiag     = sclrDiag ;
7759599516SKenneth E. Jansen     usrHd->lesP         = lesP ;
7859599516SKenneth E. Jansen     usrHd->lesQ         = lesQ ;
7959599516SKenneth E. Jansen     usrHd->iBC          = iBC  ;
8059599516SKenneth E. Jansen     usrHd->BC           = BC   ;
8159599516SKenneth E. Jansen     usrHd->iper         = iper ;
8259599516SKenneth E. Jansen     usrHd->ilwork       = ilwork ;
8359599516SKenneth E. Jansen     usrHd->numpe        = *numpe ;
8459599516SKenneth E. Jansen     usrHd->nNodes	= *nNodes ;
8559599516SKenneth E. Jansen     usrHd->nenl         = *nenl ;
8659599516SKenneth E. Jansen     usrHd->nPermDims	= *nPermDims ;
8759599516SKenneth E. Jansen     usrHd->nTmpDims	= *nTmpDims ;
8859599516SKenneth E. Jansen     usrHd->rowp	        = rowp ;
8959599516SKenneth E. Jansen     usrHd->colm	        = colm ;
9059599516SKenneth E. Jansen     usrHd->lhsK	        = lhsK ;
9159599516SKenneth E. Jansen     usrHd->lhsP	        = lhsP ;
9259599516SKenneth E. Jansen     usrHd->lhsS         = lhsS ;
9359599516SKenneth E. Jansen     usrHd->nnz_tot      = nnz_tot ;
9459599516SKenneth E. Jansen     usrHd->CGsol        = CGsol;
9559599516SKenneth E. Jansen } /* end of usrNew() */
9659599516SKenneth E. Jansen 
9759599516SKenneth E. Jansen /*===========================================================================
9859599516SKenneth E. Jansen  *
9959599516SKenneth E. Jansen  * "usrPointer":  Get the pointer
10059599516SKenneth E. Jansen  *
10159599516SKenneth E. Jansen  *===========================================================================
10259599516SKenneth E. Jansen  */
10359599516SKenneth E. Jansen Real*
10459599516SKenneth E. Jansen usrPointer(	UsrHd	usrHd,
10559599516SKenneth E. Jansen             Integer	id,
10659599516SKenneth E. Jansen             Integer	offset,
10759599516SKenneth E. Jansen             Integer	nDims )
10859599516SKenneth E. Jansen {
10959599516SKenneth E. Jansen     char*	funcName = "usrPointer";/* function name		*/
11059599516SKenneth E. Jansen     Real*	pnt ;			/* pointer			*/
11159599516SKenneth E. Jansen 
11259599516SKenneth E. Jansen /*---------------------------------------------------------------------------
11359599516SKenneth E. Jansen  * Get the head of the memory
11459599516SKenneth E. Jansen  *---------------------------------------------------------------------------
11559599516SKenneth E. Jansen  */
11659599516SKenneth E. Jansen     if ( id == LES_RES_PNT ) {
11759599516SKenneth E. Jansen 
11859599516SKenneth E. Jansen         pnt	= usrHd->resf ;
11959599516SKenneth E. Jansen         id	= 0 ;
12059599516SKenneth E. Jansen 
12159599516SKenneth E. Jansen     } else if ( id == LES_SOL_PNT ) {
12259599516SKenneth E. Jansen 
12359599516SKenneth E. Jansen         pnt	= usrHd->solinc ;
12459599516SKenneth E. Jansen         id	= 0 ;
12559599516SKenneth E. Jansen 
12659599516SKenneth E. Jansen     } else if ( id < 0 ) {
12759599516SKenneth E. Jansen 
12859599516SKenneth E. Jansen         pnt	= usrHd->aperm ;
12959599516SKenneth E. Jansen         id	= id + usrHd->nPermDims ;
13059599516SKenneth E. Jansen 
13159599516SKenneth E. Jansen     } else {
13259599516SKenneth E. Jansen 
13359599516SKenneth E. Jansen         pnt	= usrHd->atemp ;
13459599516SKenneth E. Jansen         id	= id ;
13559599516SKenneth E. Jansen 
13659599516SKenneth E. Jansen     }
13759599516SKenneth E. Jansen /*---------------------------------------------------------------------------
13859599516SKenneth E. Jansen  * Get the offset
13959599516SKenneth E. Jansen  *---------------------------------------------------------------------------
14059599516SKenneth E. Jansen  */
14159599516SKenneth E. Jansen     pnt		= pnt + (id + offset) * usrHd->nNodes ;
14259599516SKenneth E. Jansen 
14359599516SKenneth E. Jansen /*---------------------------------------------------------------------------
14459599516SKenneth E. Jansen  * Return the pointer
14559599516SKenneth E. Jansen  *---------------------------------------------------------------------------
14659599516SKenneth E. Jansen  */
14759599516SKenneth E. Jansen     return( pnt ) ;
14859599516SKenneth E. Jansen 
14959599516SKenneth E. Jansen } /* end of usrPointer() */
15059599516SKenneth E. Jansen 
15159599516SKenneth E. Jansen #define myflesnew FortranCInterface_GLOBAL_(myflesnew,MYFLESNEW)
15259599516SKenneth E. Jansen #define myflessolve FortranCInterface_GLOBAL_(myflessolve,MYFLESSOLVE)
15359599516SKenneth E. Jansen #define savelesrestart FortranCInterface_GLOBAL_(savelesrestart,SAVELESRESTART)
15459599516SKenneth E. Jansen #define readlesrestart FortranCInterface_GLOBAL_(readlesrestart,READLESRESTART)
15559599516SKenneth E. Jansen #define solverlicenseserver FortranCInterface_GLOBAL_(solverlicenseserver,SOLVERLICENSESERVER)
15659599516SKenneth E. Jansen 
15759599516SKenneth E. Jansen 
15859599516SKenneth E. Jansen 
15959599516SKenneth E. Jansen #ifdef intel
16059599516SKenneth E. Jansen         lesArray[ *lesId ] = lesNew( fileName, *lmport, &lmNum, *eqnType,
16159599516SKenneth E. Jansen                                      *nDofs, *minIters, *maxIters, *nKvecs,
16259599516SKenneth E. Jansen                                      *prjFlag, *nPrjs, *presPrjFlag, *nPresPrjs,presPrec,
16359599516SKenneth E. Jansen                                      *tol, *presTol, *verbose, stats, nPermDims,
16459599516SKenneth E. Jansen                                      nTmpDims );
16559599516SKenneth E. Jansen     return ;}
16659599516SKenneth E. Jansen /* the following is a fake function that was required when we moved to
16759599516SKenneth E. Jansen    a C++ main on in the MS Visual Studio environment.  It fails to
16859599516SKenneth E. Jansen    link because it is looking for this function
16959599516SKenneth E. Jansen */
17059599516SKenneth E. Jansen void  _CrtDbgReport() {
17159599516SKenneth E. Jansen     return ;}
17259599516SKenneth E. Jansen 
17359599516SKenneth E. Jansen double __vcos_(double fg) { fflush(stdout); printf(" vcos got called \n"); fflush(stdout);}
17459599516SKenneth E. Jansen double __vlog_(double fg)  { fflush(stdout); printf(" vlog got called \n"); fflush(stdout);}
17559599516SKenneth E. Jansen 
17659599516SKenneth E. Jansen 
17759599516SKenneth E. Jansen #endif /* we are in unix land... whew.  secretly we have equivalenced fileName and  */
17859599516SKenneth E. Jansen 
17959599516SKenneth E. Jansen /* #ifdef LINUX*/
18059599516SKenneth E. Jansen /* void flush_(int* junk ){ return; }*/
18159599516SKenneth E. Jansen /* #endif*/
18259599516SKenneth E. Jansen void    myflesnew(	     Integer*	lesId,
18359599516SKenneth E. Jansen                          Integer*	lmport,
18459599516SKenneth E. Jansen                          Integer*	eqnType,
18559599516SKenneth E. Jansen                          Integer*	nDofs,
18659599516SKenneth E. Jansen                          Integer*	minIters,
18759599516SKenneth E. Jansen                          Integer*	maxIters,
18859599516SKenneth E. Jansen                          Integer*	nKvecs,
18959599516SKenneth E. Jansen                          Integer*	prjFlag,
19059599516SKenneth E. Jansen                          Integer*	nPrjs,
19159599516SKenneth E. Jansen                          Integer*	presPrjFlag,
19259599516SKenneth E. Jansen                          Integer*	nPresPrjs,
19359599516SKenneth E. Jansen                          Real*	    tol,
19459599516SKenneth E. Jansen                          Real*     	presTol,
19559599516SKenneth E. Jansen                          Integer*	verbose,
19659599516SKenneth E. Jansen                          Real*     	stats,
19759599516SKenneth E. Jansen                          Integer*	nPermDims,
19859599516SKenneth E. Jansen                          Integer*	nTmpDims,
19959599516SKenneth E. Jansen                          char*      lmhost          ) {
20059599516SKenneth E. Jansen     int procId;
20159599516SKenneth E. Jansen #ifdef AMG
20259599516SKenneth E. Jansen     int presPrec=1;
20359599516SKenneth E. Jansen #else
20459599516SKenneth E. Jansen     int presPrec=0;
20559599516SKenneth E. Jansen #endif
20659599516SKenneth E. Jansen     MPI_Comm_rank( MPI_COMM_WORLD, &procId ) ;
20759599516SKenneth E. Jansen     if(lmNum==0){
20859599516SKenneth E. Jansen         if(procId==0){
20959599516SKenneth E. Jansen             lesArray[ *lesId ] = lesNew( lmhost, *lmport, &lmNum, *eqnType,
21059599516SKenneth E. Jansen                                          *nDofs, *minIters, *maxIters, *nKvecs,
21159599516SKenneth E. Jansen                                          *prjFlag, *nPrjs, *presPrjFlag, *nPresPrjs,presPrec,
21259599516SKenneth E. Jansen                                          *tol, *presTol, *verbose, stats, nPermDims,
21359599516SKenneth E. Jansen                                          nTmpDims );
21459599516SKenneth E. Jansen             MPI_Bcast( &lmNum, 1, MPI_INT, 0, MPI_COMM_WORLD ) ;
21559599516SKenneth E. Jansen         } else {
21659599516SKenneth E. Jansen             MPI_Bcast( &lmNum, 1, MPI_INT, 0, MPI_COMM_WORLD ) ;
21759599516SKenneth E. Jansen             lesArray[ *lesId ] = lesNew( lmhost, *lmport, &lmNum, *eqnType,
21859599516SKenneth E. Jansen                                          *nDofs, *minIters, *maxIters, *nKvecs,
21959599516SKenneth E. Jansen                                          *prjFlag, *nPrjs, *presPrjFlag, *nPresPrjs,presPrec,
22059599516SKenneth E. Jansen                                          *tol, *presTol, *verbose, stats, nPermDims,
22159599516SKenneth E. Jansen                                          nTmpDims );
22259599516SKenneth E. Jansen         }
22359599516SKenneth E. Jansen     } else {
22459599516SKenneth E. Jansen         lesArray[ *lesId ] = lesNew( lmhost, *lmport, &lmNum, *eqnType,
22559599516SKenneth E. Jansen                                      *nDofs, *minIters, *maxIters, *nKvecs,
22659599516SKenneth E. Jansen                                      *prjFlag, *nPrjs, *presPrjFlag, *nPresPrjs,presPrec,
22759599516SKenneth E. Jansen                                      *tol, *presTol, *verbose, stats, nPermDims,
22859599516SKenneth E. Jansen                                      nTmpDims );
22959599516SKenneth E. Jansen     }
23059599516SKenneth E. Jansen     return ;
23159599516SKenneth E. Jansen }
23259599516SKenneth E. Jansen 
23359599516SKenneth E. Jansen 
23459599516SKenneth E. Jansen void
23559599516SKenneth E. Jansen savelesrestart( Integer* lesId,
23659599516SKenneth E. Jansen                  Real*    aperm,
23759599516SKenneth E. Jansen                  Integer* nshg,
23859599516SKenneth E. Jansen                  Integer* myrank,
23959599516SKenneth E. Jansen                  Integer* lstep,
24059599516SKenneth E. Jansen                  Integer* nPermDims ) {
24159599516SKenneth E. Jansen 
24259599516SKenneth E. Jansen     int nPrjs, PrjSrcId;
24359599516SKenneth E. Jansen     int nPresPrjs, PresPrjSrcId;
24459599516SKenneth E. Jansen     char filename[255];
24559599516SKenneth E. Jansen     int iarray[3];
24659599516SKenneth E. Jansen     int size, nitems;
24759599516SKenneth E. Jansen     double* projVec;
24859599516SKenneth E. Jansen     int i, j, count;
24959599516SKenneth E. Jansen 
25059599516SKenneth E. Jansen     nPrjs = (Integer) lesGetPar( lesArray[ *lesId ], LES_ACT_PRJS );
25159599516SKenneth E. Jansen     PrjSrcId = (Integer) lesGetPar( lesArray[ *lesId ], LES_PRJ_VEC_ID );
25259599516SKenneth E. Jansen 
25359599516SKenneth E. Jansen     if ( PrjSrcId < 0 ) PrjSrcId += *nPermDims;
25459599516SKenneth E. Jansen 
25559599516SKenneth E. Jansen     projVec = (double*)malloc( nPrjs * ( *nshg ) * sizeof( double ) );
25659599516SKenneth E. Jansen 
25759599516SKenneth E. Jansen     count = 0;
25859599516SKenneth E. Jansen     for( i = PrjSrcId; i < PrjSrcId+nPrjs; i ++ ) {
25959599516SKenneth E. Jansen         for( j = 0 ; j < *nshg; j++ ) {
26059599516SKenneth E. Jansen             projVec[ count++ ] = aperm[ (*nshg) * i + j ];
26159599516SKenneth E. Jansen         }
26259599516SKenneth E. Jansen     }
26359599516SKenneth E. Jansen 
26459599516SKenneth E. Jansen     iarray[ 0 ] = *nshg;
26559599516SKenneth E. Jansen     iarray[ 1 ] = nPrjs;
26659599516SKenneth E. Jansen     nitems = 2;
26759599516SKenneth E. Jansen     size = (*nshg)*nPrjs;
26859599516SKenneth E. Jansen 
26959599516SKenneth E. Jansen     int name_length;
27059599516SKenneth E. Jansen     name_length = 18;
27159599516SKenneth E. Jansen     Write_Field(myrank,"a","projection vectors",&name_length, (void *)projVec,"d", nshg, &nPrjs, lstep);
27259599516SKenneth E. Jansen 
27359599516SKenneth E. Jansen     free(projVec);
27459599516SKenneth E. Jansen 
27559599516SKenneth E. Jansen     nPresPrjs = (Integer) lesGetPar( lesArray[ *lesId ], LES_ACT_PRES_PRJS );
27659599516SKenneth E. Jansen     PresPrjSrcId =(Integer)lesGetPar( lesArray[ *lesId ], LES_PRES_PRJ_VEC_ID );
27759599516SKenneth E. Jansen     if ( PresPrjSrcId < 0 ) PresPrjSrcId += *nPermDims;
27859599516SKenneth E. Jansen 
27959599516SKenneth E. Jansen     projVec = (double*)malloc( nPresPrjs * ( *nshg ) * sizeof( double ) );
28059599516SKenneth E. Jansen 
28159599516SKenneth E. Jansen     count = 0;
28259599516SKenneth E. Jansen     for( i = PresPrjSrcId; i < (PresPrjSrcId + nPresPrjs) ; i ++ ) {
28359599516SKenneth E. Jansen         for( j = 0 ; j < *nshg; j++ ) {
28459599516SKenneth E. Jansen             projVec[ count++ ] = aperm[ (*nshg) * i + j ];
28559599516SKenneth E. Jansen         }
28659599516SKenneth E. Jansen     }
28759599516SKenneth E. Jansen 
28859599516SKenneth E. Jansen     iarray[ 0 ] = *nshg;
28959599516SKenneth E. Jansen     iarray[ 1 ] = nPresPrjs;
29059599516SKenneth E. Jansen     nitems = 2;
29159599516SKenneth E. Jansen     size = (*nshg)*nPresPrjs;
29259599516SKenneth E. Jansen 
29359599516SKenneth E. Jansen     name_length = 27;
29459599516SKenneth E. Jansen     Write_Field(myrank,"a","pressure projection vectors",&name_length, projVec,"d", nshg, &nPresPrjs, lstep);
29559599516SKenneth E. Jansen 
29659599516SKenneth E. Jansen     free( projVec);
29759599516SKenneth E. Jansen }
29859599516SKenneth E. Jansen 
29959599516SKenneth E. Jansen void
30059599516SKenneth E. Jansen readlesrestart( Integer* lesId,
30159599516SKenneth E. Jansen                  Real*    aperm,
30259599516SKenneth E. Jansen                  Integer* nshg,
30359599516SKenneth E. Jansen                  Integer* myrank,
30459599516SKenneth E. Jansen                  Integer* lstep ,
30559599516SKenneth E. Jansen                  Integer* nPermDims ) {
30659599516SKenneth E. Jansen 
30759599516SKenneth E. Jansen     int nPrjs, PrjSrcId;
30859599516SKenneth E. Jansen     int nPresPrjs, PresPrjSrcId;
30959599516SKenneth E. Jansen     char filename[255];
310c07b23fcSCameron Smith     phio_fp fileHandle = NULL;
31159599516SKenneth E. Jansen     int iarray[3]={-1,-1,-1};
31259599516SKenneth E. Jansen     int size, nitems;
31359599516SKenneth E. Jansen     int itwo=2;
31459599516SKenneth E. Jansen     int lnshg;
31559599516SKenneth E. Jansen     double* projVec;
31659599516SKenneth E. Jansen     int i,j,count;
31759599516SKenneth E. Jansen     int nfiles;
31859599516SKenneth E. Jansen     int nfields;
31959599516SKenneth E. Jansen     int numParts;
32059599516SKenneth E. Jansen     int nprocs;
32159599516SKenneth E. Jansen     int nppf;
32259599516SKenneth E. Jansen 
32359599516SKenneth E. Jansen     nfiles = outpar.nsynciofiles;
32459599516SKenneth E. Jansen     numParts = workfc.numpe;
32559599516SKenneth E. Jansen     nprocs = workfc.numpe;
32659599516SKenneth E. Jansen     // Calculate number of parts each proc deal with and where it start and end ...
32759599516SKenneth E. Jansen     int nppp = numParts/nprocs;        // nppp : Number of parts per proc ...
32859599516SKenneth E. Jansen     int startpart = *myrank * nppp +1;    // Part id from which I (myrank) start ...
32959599516SKenneth E. Jansen     int endpart = startpart + nppp - 1;  // Part id to which I (myrank) end ...
33059599516SKenneth E. Jansen 
3312efdc748SKenneth E. Jansen     if(nfiles == 0) {
3322efdc748SKenneth E. Jansen       sprintf(filename,"restart.%d.",*lstep);
3332efdc748SKenneth E. Jansen     }
3342efdc748SKenneth E. Jansen     else {
335c07b23fcSCameron Smith       sprintf(filename,"restart-dat.%d.",*lstep);
3362efdc748SKenneth E. Jansen     }
3378dcbc979SCameron Smith     phio_openfile_read(filename, &nfiles, &fileHandle);
33859599516SKenneth E. Jansen 
339*57ac376bSCameron Smith     if ( !fileHandle ) return; // See phastaIO.cc for error fileHandle
340c07b23fcSCameron Smith     phio_readheader(fileHandle, "projection vectors", (void*)iarray,
34159599516SKenneth E. Jansen                 &itwo, "integer", phasta_iotype);
3428dcbc979SCameron Smith 
34359599516SKenneth E. Jansen     if ( iarray[0] != *nshg ) {
344c07b23fcSCameron Smith         phio_closefile_read(fileHandle);
34559599516SKenneth E. Jansen         if(workfc.myrank==workfc.master)
34659599516SKenneth E. Jansen           printf("projection vectors are being initialized to zero (SAFE)\n");
34759599516SKenneth E. Jansen         return;
34859599516SKenneth E. Jansen     }
34959599516SKenneth E. Jansen 
35059599516SKenneth E. Jansen     lnshg = iarray[ 0 ] ;
35159599516SKenneth E. Jansen     nPrjs = iarray[ 1 ] ;
35259599516SKenneth E. Jansen 
35359599516SKenneth E. Jansen     size = (*nshg)*nPrjs;
35459599516SKenneth E. Jansen     projVec = (double*)malloc( size * sizeof( double ));
35559599516SKenneth E. Jansen 
356c07b23fcSCameron Smith     phio_readdatablock(fileHandle, "projection vectors", (void*)projVec,
35759599516SKenneth E. Jansen                     &size, "double", phasta_iotype );
35859599516SKenneth E. Jansen 
35959599516SKenneth E. Jansen     lesSetPar( lesArray[ *lesId ], LES_ACT_PRJS, (Real) nPrjs );
36059599516SKenneth E. Jansen     PrjSrcId = (Integer) lesGetPar( lesArray[ *lesId ], LES_PRJ_VEC_ID );
36159599516SKenneth E. Jansen     if ( PrjSrcId < 0 ) PrjSrcId += *nPermDims;
36259599516SKenneth E. Jansen 
36359599516SKenneth E. Jansen     count = 0;
36459599516SKenneth E. Jansen     for( i = PrjSrcId; i < PrjSrcId+nPrjs; i ++ ) {
36559599516SKenneth E. Jansen         for( j = 0 ; j < *nshg; j++ ) {
36659599516SKenneth E. Jansen             aperm[ (*nshg) * i + j ] = projVec[ count++ ] ;
36759599516SKenneth E. Jansen         }
36859599516SKenneth E. Jansen     }
36959599516SKenneth E. Jansen 
37059599516SKenneth E. Jansen     free( projVec );
37159599516SKenneth E. Jansen 
37259599516SKenneth E. Jansen     iarray[0] = -1; iarray[1] = -1; iarray[2] = -1;
37359599516SKenneth E. Jansen 
374c07b23fcSCameron Smith     phio_readheader(fileHandle, "pressure projection vectors", (void*)iarray,
37559599516SKenneth E. Jansen                  &itwo, "integer", phasta_iotype );
37659599516SKenneth E. Jansen 
37759599516SKenneth E. Jansen     lnshg = iarray[ 0 ] ;
37859599516SKenneth E. Jansen     nPresPrjs = iarray[ 1 ] ;
37959599516SKenneth E. Jansen 
38059599516SKenneth E. Jansen     if ( lnshg != *nshg )  {
381c07b23fcSCameron Smith         phio_closefile_read(fileHandle);
38259599516SKenneth E. Jansen         if(workfc.myrank==workfc.master)
38359599516SKenneth E. Jansen           printf("pressure projection vectors are being initialized to zero (SAFE)\n");
38459599516SKenneth E. Jansen         return;
38559599516SKenneth E. Jansen     }
38659599516SKenneth E. Jansen 
38759599516SKenneth E. Jansen     size = (*nshg)*nPresPrjs;
38859599516SKenneth E. Jansen     projVec = (double*)malloc( size * sizeof( double ));
38959599516SKenneth E. Jansen 
390c07b23fcSCameron Smith     phio_readdatablock(fileHandle, "pressure projection vectors", (void*)projVec,
39159599516SKenneth E. Jansen                     &size, "double", phasta_iotype );
39259599516SKenneth E. Jansen 
39359599516SKenneth E. Jansen     lesSetPar( lesArray[ *lesId ], LES_ACT_PRES_PRJS, (Real) nPresPrjs );
39459599516SKenneth E. Jansen     PresPrjSrcId=(Integer)lesGetPar( lesArray[ *lesId ], LES_PRES_PRJ_VEC_ID );
39559599516SKenneth E. Jansen     if ( PresPrjSrcId < 0 ) PresPrjSrcId += *nPermDims;
39659599516SKenneth E. Jansen 
39759599516SKenneth E. Jansen     count = 0;
39859599516SKenneth E. Jansen     for( i = PresPrjSrcId; i < PresPrjSrcId+nPresPrjs; i ++ ) {
39959599516SKenneth E. Jansen         for( j = 0 ; j < *nshg; j++ ) {
40059599516SKenneth E. Jansen             aperm[ (*nshg) * i + j ] = projVec[ count++ ] ;
40159599516SKenneth E. Jansen         }
40259599516SKenneth E. Jansen     }
40359599516SKenneth E. Jansen 
40459599516SKenneth E. Jansen     free( projVec );
40559599516SKenneth E. Jansen 
406c07b23fcSCameron Smith     phio_closefile_read(fileHandle);
40759599516SKenneth E. Jansen }
40859599516SKenneth E. Jansen 
40959599516SKenneth E. Jansen void  myflessolve( Integer* lesId,
41059599516SKenneth E. Jansen                     UsrHd    usrHd){
41159599516SKenneth E. Jansen     lesSolve( lesArray[ *lesId ], usrHd );
41259599516SKenneth E. Jansen }
41359599516SKenneth E. Jansen 
41459599516SKenneth E. Jansen 
41559599516SKenneth E. Jansen int solverlicenseserver(char key[]){
41659599516SKenneth E. Jansen #ifdef intel
41759599516SKenneth E. Jansen     strcpy(key,"C:\\cygwin\\license.dat");
41859599516SKenneth E. Jansen #else
41959599516SKenneth E. Jansen     char* env_server_name;
42059599516SKenneth E. Jansen     env_server_name = getenv("LES_LICENSE_SERVER");
42159599516SKenneth E. Jansen     if(env_server_name) strcpy(key, env_server_name);
42259599516SKenneth E. Jansen     else {
42359599516SKenneth E. Jansen         if(workfc.myrank==workfc.master) {
42459599516SKenneth E. Jansen           fprintf(stderr,"environment variable LES_LICENSE_SERVER not defined \n");
42559599516SKenneth E. Jansen           fprintf(stderr,"using wesley as default \n");
42659599516SKenneth E. Jansen         }
42759599516SKenneth E. Jansen         strcpy(key, "acusim.license.scorec.rpi.edu");
42859599516SKenneth E. Jansen     }
42959599516SKenneth E. Jansen #endif
43059599516SKenneth E. Jansen     return 1;
43159599516SKenneth E. Jansen }
432