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