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