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