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