xref: /phasta/phSolver/incompressible/usr.c (revision 18924a0afcafce200c2f5b454f3c68488e192bf0)
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"
14d7abaf6cSCameron Smith #include "syncio.h"
15d7abaf6cSCameron Smith #include "posixio.h"
16d7abaf6cSCameron Smith #include "streamio.h"
1759599516SKenneth E. Jansen #include "new_interface.h"
1859599516SKenneth E. Jansen #include <FCMangle.h>
1959599516SKenneth E. Jansen 
2059599516SKenneth E. Jansen extern char phasta_iotype[80];
2159599516SKenneth E. Jansen 
2259599516SKenneth E. Jansen /*===========================================================================
2359599516SKenneth E. Jansen  *
2459599516SKenneth E. Jansen  * "usrNew":  Put all the values in usrHd
2559599516SKenneth E. Jansen  *
2659599516SKenneth E. Jansen  * From FORTRAN
2759599516SKenneth E. Jansen  *
2859599516SKenneth E. Jansen  *	integer		usr(100)
2959599516SKenneth E. Jansen  *	dimension	aperm(numnp,nperm)
3059599516SKenneth E. Jansen  *	...
3159599516SKenneth E. Jansen  *	call usrnew( usr, aperm, ..., numnp, ...)
3259599516SKenneth E. Jansen  *
3359599516SKenneth E. Jansen  *
3459599516SKenneth E. Jansen  *===========================================================================
3559599516SKenneth E. Jansen  */
3659599516SKenneth E. Jansen #include "mpi.h"
3759599516SKenneth E. Jansen static int lmNum = 0;
3859599516SKenneth E. Jansen static LesHd lesArray[8];
3959599516SKenneth E. Jansen void   usrNew(	UsrHd	  usrHd,
4059599516SKenneth E. Jansen                         int*      eqnType,
4159599516SKenneth E. Jansen                         double*	  aperm,
4259599516SKenneth E. Jansen                         double*	  atemp,
4359599516SKenneth E. Jansen                         double*   resf,
4459599516SKenneth E. Jansen                         double*   solinc,
4559599516SKenneth E. Jansen                         double*   flowDiag,
4659599516SKenneth E. Jansen                         double*   sclrDiag,
4759599516SKenneth E. Jansen                         double*   lesP,
4859599516SKenneth E. Jansen                         double*   lesQ,
4959599516SKenneth E. Jansen                         int*      iBC,
5059599516SKenneth E. Jansen                         double*   BC,
5159599516SKenneth E. Jansen                         int*      iper,
5259599516SKenneth E. Jansen                         int*      ilwork,
5359599516SKenneth E. Jansen                         int*      numpe,
5459599516SKenneth E. Jansen                         int*      nNodes,
5559599516SKenneth E. Jansen                         int*      nenl,
5659599516SKenneth E. Jansen                         int*	  nPermDims,
5759599516SKenneth E. Jansen                         int*	  nTmpDims,
5859599516SKenneth E. Jansen                         int*	  rowp,
5959599516SKenneth E. Jansen                         int*	  colm,
6059599516SKenneth E. Jansen                         double*   lhsK,
6159599516SKenneth E. Jansen                         double*   lhsP,
6259599516SKenneth E. Jansen                         double*   lhsS,
6359599516SKenneth E. Jansen                         int*      nnz_tot,
6459599516SKenneth E. Jansen                         double*   CGsol
6559599516SKenneth E. Jansen     )
6659599516SKenneth E. Jansen {
6759599516SKenneth E. Jansen     char*	funcName = "usrNew" ;	/* function name		*/
6859599516SKenneth E. Jansen 
6959599516SKenneth E. Jansen /*---------------------------------------------------------------------------
7059599516SKenneth E. Jansen  * Stick the parameters
7159599516SKenneth E. Jansen  *---------------------------------------------------------------------------
7259599516SKenneth E. Jansen  */
7359599516SKenneth E. Jansen     usrHd->eqnType      = *eqnType ;
7459599516SKenneth E. Jansen     usrHd->aperm	= aperm ;
7559599516SKenneth E. Jansen     usrHd->atemp	= atemp ;
7659599516SKenneth E. Jansen     usrHd->resf         = resf ;
7759599516SKenneth E. Jansen     usrHd->solinc       = solinc ;
7859599516SKenneth E. Jansen     usrHd->flowDiag     = flowDiag ;
7959599516SKenneth E. Jansen     usrHd->sclrDiag     = sclrDiag ;
8059599516SKenneth E. Jansen     usrHd->lesP         = lesP ;
8159599516SKenneth E. Jansen     usrHd->lesQ         = lesQ ;
8259599516SKenneth E. Jansen     usrHd->iBC          = iBC  ;
8359599516SKenneth E. Jansen     usrHd->BC           = BC   ;
8459599516SKenneth E. Jansen     usrHd->iper         = iper ;
8559599516SKenneth E. Jansen     usrHd->ilwork       = ilwork ;
8659599516SKenneth E. Jansen     usrHd->numpe        = *numpe ;
8759599516SKenneth E. Jansen     usrHd->nNodes	= *nNodes ;
8859599516SKenneth E. Jansen     usrHd->nenl         = *nenl ;
8959599516SKenneth E. Jansen     usrHd->nPermDims	= *nPermDims ;
9059599516SKenneth E. Jansen     usrHd->nTmpDims	= *nTmpDims ;
9159599516SKenneth E. Jansen     usrHd->rowp	        = rowp ;
9259599516SKenneth E. Jansen     usrHd->colm	        = colm ;
9359599516SKenneth E. Jansen     usrHd->lhsK	        = lhsK ;
9459599516SKenneth E. Jansen     usrHd->lhsP	        = lhsP ;
9559599516SKenneth E. Jansen     usrHd->lhsS         = lhsS ;
9659599516SKenneth E. Jansen     usrHd->nnz_tot      = nnz_tot ;
9759599516SKenneth E. Jansen     usrHd->CGsol        = CGsol;
9859599516SKenneth E. Jansen } /* end of usrNew() */
9959599516SKenneth E. Jansen 
10059599516SKenneth E. Jansen /*===========================================================================
10159599516SKenneth E. Jansen  *
10259599516SKenneth E. Jansen  * "usrPointer":  Get the pointer
10359599516SKenneth E. Jansen  *
10459599516SKenneth E. Jansen  *===========================================================================
10559599516SKenneth E. Jansen  */
10659599516SKenneth E. Jansen Real*
10759599516SKenneth E. Jansen usrPointer(	UsrHd	usrHd,
10859599516SKenneth E. Jansen             Integer	id,
10959599516SKenneth E. Jansen             Integer	offset,
11059599516SKenneth E. Jansen             Integer	nDims )
11159599516SKenneth E. Jansen {
11259599516SKenneth E. Jansen     char*	funcName = "usrPointer";/* function name		*/
11359599516SKenneth E. Jansen     Real*	pnt ;			/* pointer			*/
11459599516SKenneth E. Jansen 
11559599516SKenneth E. Jansen /*---------------------------------------------------------------------------
11659599516SKenneth E. Jansen  * Get the head of the memory
11759599516SKenneth E. Jansen  *---------------------------------------------------------------------------
11859599516SKenneth E. Jansen  */
11959599516SKenneth E. Jansen     if ( id == LES_RES_PNT ) {
12059599516SKenneth E. Jansen 
12159599516SKenneth E. Jansen         pnt	= usrHd->resf ;
12259599516SKenneth E. Jansen         id	= 0 ;
12359599516SKenneth E. Jansen 
12459599516SKenneth E. Jansen     } else if ( id == LES_SOL_PNT ) {
12559599516SKenneth E. Jansen 
12659599516SKenneth E. Jansen         pnt	= usrHd->solinc ;
12759599516SKenneth E. Jansen         id	= 0 ;
12859599516SKenneth E. Jansen 
12959599516SKenneth E. Jansen     } else if ( id < 0 ) {
13059599516SKenneth E. Jansen 
13159599516SKenneth E. Jansen         pnt	= usrHd->aperm ;
13259599516SKenneth E. Jansen         id	= id + usrHd->nPermDims ;
13359599516SKenneth E. Jansen 
13459599516SKenneth E. Jansen     } else {
13559599516SKenneth E. Jansen 
13659599516SKenneth E. Jansen         pnt	= usrHd->atemp ;
13759599516SKenneth E. Jansen         id	= id ;
13859599516SKenneth E. Jansen 
13959599516SKenneth E. Jansen     }
14059599516SKenneth E. Jansen /*---------------------------------------------------------------------------
14159599516SKenneth E. Jansen  * Get the offset
14259599516SKenneth E. Jansen  *---------------------------------------------------------------------------
14359599516SKenneth E. Jansen  */
14459599516SKenneth E. Jansen     pnt		= pnt + (id + offset) * usrHd->nNodes ;
14559599516SKenneth E. Jansen 
14659599516SKenneth E. Jansen /*---------------------------------------------------------------------------
14759599516SKenneth E. Jansen  * Return the pointer
14859599516SKenneth E. Jansen  *---------------------------------------------------------------------------
14959599516SKenneth E. Jansen  */
15059599516SKenneth E. Jansen     return( pnt ) ;
15159599516SKenneth E. Jansen 
15259599516SKenneth E. Jansen } /* end of usrPointer() */
15359599516SKenneth E. Jansen 
15459599516SKenneth E. Jansen #define myflesnew FortranCInterface_GLOBAL_(myflesnew,MYFLESNEW)
15559599516SKenneth E. Jansen #define myflessolve FortranCInterface_GLOBAL_(myflessolve,MYFLESSOLVE)
15659599516SKenneth E. Jansen #define savelesrestart FortranCInterface_GLOBAL_(savelesrestart,SAVELESRESTART)
15759599516SKenneth E. Jansen #define readlesrestart FortranCInterface_GLOBAL_(readlesrestart,READLESRESTART)
15859599516SKenneth E. Jansen #define solverlicenseserver FortranCInterface_GLOBAL_(solverlicenseserver,SOLVERLICENSESERVER)
15959599516SKenneth E. Jansen 
16059599516SKenneth E. Jansen 
16159599516SKenneth E. Jansen 
16259599516SKenneth E. Jansen #ifdef intel
16359599516SKenneth E. Jansen         lesArray[ *lesId ] = lesNew( fileName, *lmport, &lmNum, *eqnType,
16459599516SKenneth E. Jansen                                      *nDofs, *minIters, *maxIters, *nKvecs,
16559599516SKenneth E. Jansen                                      *prjFlag, *nPrjs, *presPrjFlag, *nPresPrjs,presPrec,
16659599516SKenneth E. Jansen                                      *tol, *presTol, *verbose, stats, nPermDims,
16759599516SKenneth E. Jansen                                      nTmpDims );
16859599516SKenneth E. Jansen     return ;}
16959599516SKenneth E. Jansen /* the following is a fake function that was required when we moved to
17059599516SKenneth E. Jansen    a C++ main on in the MS Visual Studio environment.  It fails to
17159599516SKenneth E. Jansen    link because it is looking for this function
17259599516SKenneth E. Jansen */
17359599516SKenneth E. Jansen void  _CrtDbgReport() {
17459599516SKenneth E. Jansen     return ;}
17559599516SKenneth E. Jansen 
17659599516SKenneth E. Jansen double __vcos_(double fg) { fflush(stdout); printf(" vcos got called \n"); fflush(stdout);}
17759599516SKenneth E. Jansen double __vlog_(double fg)  { fflush(stdout); printf(" vlog got called \n"); fflush(stdout);}
17859599516SKenneth E. Jansen 
17959599516SKenneth E. Jansen 
18059599516SKenneth E. Jansen #endif /* we are in unix land... whew.  secretly we have equivalenced fileName and  */
18159599516SKenneth E. Jansen 
18259599516SKenneth E. Jansen /* #ifdef LINUX*/
18359599516SKenneth E. Jansen /* void flush_(int* junk ){ return; }*/
18459599516SKenneth E. Jansen /* #endif*/
18559599516SKenneth E. Jansen void    myflesnew(	     Integer*	lesId,
18659599516SKenneth E. Jansen                          Integer*	lmport,
18759599516SKenneth E. Jansen                          Integer*	eqnType,
18859599516SKenneth E. Jansen                          Integer*	nDofs,
18959599516SKenneth E. Jansen                          Integer*	minIters,
19059599516SKenneth E. Jansen                          Integer*	maxIters,
19159599516SKenneth E. Jansen                          Integer*	nKvecs,
19259599516SKenneth E. Jansen                          Integer*	prjFlag,
19359599516SKenneth E. Jansen                          Integer*	nPrjs,
19459599516SKenneth E. Jansen                          Integer*	presPrjFlag,
19559599516SKenneth E. Jansen                          Integer*	nPresPrjs,
19659599516SKenneth E. Jansen                          Real*	    tol,
19759599516SKenneth E. Jansen                          Real*     	presTol,
19859599516SKenneth E. Jansen                          Integer*	verbose,
19959599516SKenneth E. Jansen                          Real*     	stats,
20059599516SKenneth E. Jansen                          Integer*	nPermDims,
20159599516SKenneth E. Jansen                          Integer*	nTmpDims,
20259599516SKenneth E. Jansen                          char*      lmhost          ) {
20359599516SKenneth E. Jansen     int procId;
20459599516SKenneth E. Jansen #ifdef AMG
20559599516SKenneth E. Jansen     int presPrec=1;
20659599516SKenneth E. Jansen #else
20759599516SKenneth E. Jansen     int presPrec=0;
20859599516SKenneth E. Jansen #endif
20959599516SKenneth E. Jansen     MPI_Comm_rank( MPI_COMM_WORLD, &procId ) ;
21059599516SKenneth E. Jansen     if(lmNum==0){
21159599516SKenneth E. Jansen         if(procId==0){
21259599516SKenneth E. Jansen             lesArray[ *lesId ] = lesNew( lmhost, *lmport, &lmNum, *eqnType,
21359599516SKenneth E. Jansen                                          *nDofs, *minIters, *maxIters, *nKvecs,
21459599516SKenneth E. Jansen                                          *prjFlag, *nPrjs, *presPrjFlag, *nPresPrjs,presPrec,
21559599516SKenneth E. Jansen                                          *tol, *presTol, *verbose, stats, nPermDims,
21659599516SKenneth E. Jansen                                          nTmpDims );
21759599516SKenneth E. Jansen             MPI_Bcast( &lmNum, 1, MPI_INT, 0, MPI_COMM_WORLD ) ;
21859599516SKenneth E. Jansen         } else {
21959599516SKenneth E. Jansen             MPI_Bcast( &lmNum, 1, MPI_INT, 0, MPI_COMM_WORLD ) ;
22059599516SKenneth E. Jansen             lesArray[ *lesId ] = lesNew( lmhost, *lmport, &lmNum, *eqnType,
22159599516SKenneth E. Jansen                                          *nDofs, *minIters, *maxIters, *nKvecs,
22259599516SKenneth E. Jansen                                          *prjFlag, *nPrjs, *presPrjFlag, *nPresPrjs,presPrec,
22359599516SKenneth E. Jansen                                          *tol, *presTol, *verbose, stats, nPermDims,
22459599516SKenneth E. Jansen                                          nTmpDims );
22559599516SKenneth E. Jansen         }
22659599516SKenneth E. Jansen     } else {
22759599516SKenneth E. Jansen         lesArray[ *lesId ] = lesNew( lmhost, *lmport, &lmNum, *eqnType,
22859599516SKenneth E. Jansen                                      *nDofs, *minIters, *maxIters, *nKvecs,
22959599516SKenneth E. Jansen                                      *prjFlag, *nPrjs, *presPrjFlag, *nPresPrjs,presPrec,
23059599516SKenneth E. Jansen                                      *tol, *presTol, *verbose, stats, nPermDims,
23159599516SKenneth E. Jansen                                      nTmpDims );
23259599516SKenneth E. Jansen     }
23359599516SKenneth E. Jansen     return ;
23459599516SKenneth E. Jansen }
23559599516SKenneth E. Jansen 
23659599516SKenneth E. Jansen 
23759599516SKenneth E. Jansen void
23859599516SKenneth E. Jansen savelesrestart( Integer* lesId,
23959599516SKenneth E. Jansen                  Real*    aperm,
24059599516SKenneth E. Jansen                  Integer* nshg,
24159599516SKenneth E. Jansen                  Integer* myrank,
24259599516SKenneth E. Jansen                  Integer* lstep,
24359599516SKenneth E. Jansen                  Integer* nPermDims ) {
24459599516SKenneth E. Jansen 
24559599516SKenneth E. Jansen     int nPrjs, PrjSrcId;
24659599516SKenneth E. Jansen     int nPresPrjs, PresPrjSrcId;
24759599516SKenneth E. Jansen     char filename[255];
24859599516SKenneth E. Jansen     int iarray[3];
24959599516SKenneth E. Jansen     int size, nitems;
25059599516SKenneth E. Jansen     double* projVec;
25159599516SKenneth E. Jansen     int i, j, count;
25259599516SKenneth E. Jansen 
25359599516SKenneth E. Jansen     nPrjs = (Integer) lesGetPar( lesArray[ *lesId ], LES_ACT_PRJS );
25459599516SKenneth E. Jansen     PrjSrcId = (Integer) lesGetPar( lesArray[ *lesId ], LES_PRJ_VEC_ID );
25559599516SKenneth E. Jansen 
25659599516SKenneth E. Jansen     if ( PrjSrcId < 0 ) PrjSrcId += *nPermDims;
25759599516SKenneth E. Jansen 
25859599516SKenneth E. Jansen     projVec = (double*)malloc( nPrjs * ( *nshg ) * sizeof( double ) );
25959599516SKenneth E. Jansen 
26059599516SKenneth E. Jansen     count = 0;
26159599516SKenneth E. Jansen     for( i = PrjSrcId; i < PrjSrcId+nPrjs; i ++ ) {
26259599516SKenneth E. Jansen         for( j = 0 ; j < *nshg; j++ ) {
26359599516SKenneth E. Jansen             projVec[ count++ ] = aperm[ (*nshg) * i + j ];
26459599516SKenneth E. Jansen         }
26559599516SKenneth E. Jansen     }
26659599516SKenneth E. Jansen 
26759599516SKenneth E. Jansen     iarray[ 0 ] = *nshg;
26859599516SKenneth E. Jansen     iarray[ 1 ] = nPrjs;
26959599516SKenneth E. Jansen     nitems = 2;
27059599516SKenneth E. Jansen     size = (*nshg)*nPrjs;
27159599516SKenneth E. Jansen 
27259599516SKenneth E. Jansen     int name_length;
27359599516SKenneth E. Jansen     name_length = 18;
27459599516SKenneth E. Jansen     Write_Field(myrank,"a","projection vectors",&name_length, (void *)projVec,"d", nshg, &nPrjs, lstep);
27559599516SKenneth E. Jansen 
27659599516SKenneth E. Jansen     free(projVec);
27759599516SKenneth E. Jansen 
27859599516SKenneth E. Jansen     nPresPrjs = (Integer) lesGetPar( lesArray[ *lesId ], LES_ACT_PRES_PRJS );
27959599516SKenneth E. Jansen     PresPrjSrcId =(Integer)lesGetPar( lesArray[ *lesId ], LES_PRES_PRJ_VEC_ID );
28059599516SKenneth E. Jansen     if ( PresPrjSrcId < 0 ) PresPrjSrcId += *nPermDims;
28159599516SKenneth E. Jansen 
28259599516SKenneth E. Jansen     projVec = (double*)malloc( nPresPrjs * ( *nshg ) * sizeof( double ) );
28359599516SKenneth E. Jansen 
28459599516SKenneth E. Jansen     count = 0;
28559599516SKenneth E. Jansen     for( i = PresPrjSrcId; i < (PresPrjSrcId + nPresPrjs) ; i ++ ) {
28659599516SKenneth E. Jansen         for( j = 0 ; j < *nshg; j++ ) {
28759599516SKenneth E. Jansen             projVec[ count++ ] = aperm[ (*nshg) * i + j ];
28859599516SKenneth E. Jansen         }
28959599516SKenneth E. Jansen     }
29059599516SKenneth E. Jansen 
29159599516SKenneth E. Jansen     iarray[ 0 ] = *nshg;
29259599516SKenneth E. Jansen     iarray[ 1 ] = nPresPrjs;
29359599516SKenneth E. Jansen     nitems = 2;
29459599516SKenneth E. Jansen     size = (*nshg)*nPresPrjs;
29559599516SKenneth E. Jansen 
29659599516SKenneth E. Jansen     name_length = 27;
29759599516SKenneth E. Jansen     Write_Field(myrank,"a","pressure projection vectors",&name_length, projVec,"d", nshg, &nPresPrjs, lstep);
29859599516SKenneth E. Jansen 
29959599516SKenneth E. Jansen     free( projVec);
30059599516SKenneth E. Jansen }
30159599516SKenneth E. Jansen 
30259599516SKenneth E. Jansen void
30359599516SKenneth E. Jansen readlesrestart( Integer* lesId,
30459599516SKenneth E. Jansen                  Real*    aperm,
30559599516SKenneth E. Jansen                  Integer* nshg,
30659599516SKenneth E. Jansen                  Integer* myrank,
30759599516SKenneth E. Jansen                  Integer* lstep ,
30859599516SKenneth E. Jansen                  Integer* nPermDims ) {
30959599516SKenneth E. Jansen 
31059599516SKenneth E. Jansen     int nPrjs, PrjSrcId;
31159599516SKenneth E. Jansen     int nPresPrjs, PresPrjSrcId;
31259599516SKenneth E. Jansen     char filename[255];
313c07b23fcSCameron Smith     phio_fp fileHandle = NULL;
31459599516SKenneth E. Jansen     int iarray[3]={-1,-1,-1};
31559599516SKenneth E. Jansen     int size, nitems;
31659599516SKenneth E. Jansen     int itwo=2;
31759599516SKenneth E. Jansen     int lnshg;
31859599516SKenneth E. Jansen     double* projVec;
31959599516SKenneth E. Jansen     int i,j,count;
32059599516SKenneth E. Jansen     int nfiles;
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     nfiles = outpar.nsynciofiles;
32759599516SKenneth E. Jansen     numParts = workfc.numpe;
32859599516SKenneth E. Jansen     nprocs = workfc.numpe;
32959599516SKenneth E. Jansen     // Calculate number of parts each proc deal with and where it start and end ...
33059599516SKenneth E. Jansen     int nppp = numParts/nprocs;        // nppp : Number of parts per proc ...
33159599516SKenneth E. Jansen     int startpart = *myrank * nppp +1;    // Part id from which I (myrank) start ...
33259599516SKenneth E. Jansen     int endpart = startpart + nppp - 1;  // Part id to which I (myrank) end ...
33359599516SKenneth E. Jansen 
334a93de25bSCameron Smith     if( nfiles == -1 )
335*18924a0aSCameron Smith       streamio_setup_read(&fileHandle, streamio_get_gr());
336a93de25bSCameron Smith     else if( nfiles == 0 )
337d7abaf6cSCameron Smith       posixio_setup(&fileHandle, 'r');
338a93de25bSCameron Smith     else if( nfiles > 0 )
339d7abaf6cSCameron Smith       syncio_setup_read(nfiles, &fileHandle);
340a93de25bSCameron Smith     phio_constructName(fileHandle,"restart",filename);
341e81a6dc1SCameron Smith     phio_appendInt(filename, *lstep);
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