1*59599516SKenneth E. Jansen /*=========================================================================== 2*59599516SKenneth E. Jansen * 3*59599516SKenneth E. Jansen * "usr.c": user's function 4*59599516SKenneth E. Jansen * 5*59599516SKenneth E. Jansen *=========================================================================== 6*59599516SKenneth E. Jansen */ 7*59599516SKenneth E. Jansen #include <stdio.h> 8*59599516SKenneth E. Jansen #include <stdlib.h> 9*59599516SKenneth E. Jansen #include "les.h" 10*59599516SKenneth E. Jansen #include "usr.h" 11*59599516SKenneth E. Jansen //mr change 12*59599516SKenneth E. Jansen // #include "common_c.h" //not needed here any more because added in new_interface.c 13*59599516SKenneth E. Jansen //mr change end 14*59599516SKenneth E. Jansen #include "common_c.h" 15*59599516SKenneth E. Jansen #include "phastaIO.h" 16*59599516SKenneth E. Jansen #include "new_interface.h" 17*59599516SKenneth E. Jansen #include <FCMangle.h> 18*59599516SKenneth E. Jansen 19*59599516SKenneth E. Jansen extern char phasta_iotype[80]; 20*59599516SKenneth E. Jansen extern int field_flag; //new_interface.c //TODO: figure out where these 21*59599516SKenneth E. Jansen extern int f_descriptor; //new_interface.c // should be 22*59599516SKenneth E. Jansen 23*59599516SKenneth E. Jansen /*=========================================================================== 24*59599516SKenneth E. Jansen * 25*59599516SKenneth E. Jansen * "usrNew": Put all the values in usrHd 26*59599516SKenneth E. Jansen * 27*59599516SKenneth E. Jansen * From FORTRAN 28*59599516SKenneth E. Jansen * 29*59599516SKenneth E. Jansen * integer usr(100) 30*59599516SKenneth E. Jansen * dimension aperm(numnp,nperm) 31*59599516SKenneth E. Jansen * ... 32*59599516SKenneth E. Jansen * call usrnew( usr, aperm, ..., numnp, ...) 33*59599516SKenneth E. Jansen * 34*59599516SKenneth E. Jansen * 35*59599516SKenneth E. Jansen *=========================================================================== 36*59599516SKenneth E. Jansen */ 37*59599516SKenneth E. Jansen #include "mpi.h" 38*59599516SKenneth E. Jansen static int lmNum = 0; 39*59599516SKenneth E. Jansen static LesHd lesArray[8]; 40*59599516SKenneth E. Jansen void usrNew( UsrHd usrHd, 41*59599516SKenneth E. Jansen int* eqnType, 42*59599516SKenneth E. Jansen double* aperm, 43*59599516SKenneth E. Jansen double* atemp, 44*59599516SKenneth E. Jansen double* resf, 45*59599516SKenneth E. Jansen double* solinc, 46*59599516SKenneth E. Jansen double* flowDiag, 47*59599516SKenneth E. Jansen double* sclrDiag, 48*59599516SKenneth E. Jansen double* lesP, 49*59599516SKenneth E. Jansen double* lesQ, 50*59599516SKenneth E. Jansen int* iBC, 51*59599516SKenneth E. Jansen double* BC, 52*59599516SKenneth E. Jansen int* iper, 53*59599516SKenneth E. Jansen int* ilwork, 54*59599516SKenneth E. Jansen int* numpe, 55*59599516SKenneth E. Jansen int* nNodes, 56*59599516SKenneth E. Jansen int* nenl, 57*59599516SKenneth E. Jansen int* nPermDims, 58*59599516SKenneth E. Jansen int* nTmpDims, 59*59599516SKenneth E. Jansen int* rowp, 60*59599516SKenneth E. Jansen int* colm, 61*59599516SKenneth E. Jansen double* lhsK, 62*59599516SKenneth E. Jansen double* lhsP, 63*59599516SKenneth E. Jansen double* lhsS, 64*59599516SKenneth E. Jansen int* nnz_tot, 65*59599516SKenneth E. Jansen double* CGsol 66*59599516SKenneth E. Jansen ) 67*59599516SKenneth E. Jansen { 68*59599516SKenneth E. Jansen char* funcName = "usrNew" ; /* function name */ 69*59599516SKenneth E. Jansen 70*59599516SKenneth E. Jansen /*--------------------------------------------------------------------------- 71*59599516SKenneth E. Jansen * Stick the parameters 72*59599516SKenneth E. Jansen *--------------------------------------------------------------------------- 73*59599516SKenneth E. Jansen */ 74*59599516SKenneth E. Jansen usrHd->eqnType = *eqnType ; 75*59599516SKenneth E. Jansen usrHd->aperm = aperm ; 76*59599516SKenneth E. Jansen usrHd->atemp = atemp ; 77*59599516SKenneth E. Jansen usrHd->resf = resf ; 78*59599516SKenneth E. Jansen usrHd->solinc = solinc ; 79*59599516SKenneth E. Jansen usrHd->flowDiag = flowDiag ; 80*59599516SKenneth E. Jansen usrHd->sclrDiag = sclrDiag ; 81*59599516SKenneth E. Jansen usrHd->lesP = lesP ; 82*59599516SKenneth E. Jansen usrHd->lesQ = lesQ ; 83*59599516SKenneth E. Jansen usrHd->iBC = iBC ; 84*59599516SKenneth E. Jansen usrHd->BC = BC ; 85*59599516SKenneth E. Jansen usrHd->iper = iper ; 86*59599516SKenneth E. Jansen usrHd->ilwork = ilwork ; 87*59599516SKenneth E. Jansen usrHd->numpe = *numpe ; 88*59599516SKenneth E. Jansen usrHd->nNodes = *nNodes ; 89*59599516SKenneth E. Jansen usrHd->nenl = *nenl ; 90*59599516SKenneth E. Jansen usrHd->nPermDims = *nPermDims ; 91*59599516SKenneth E. Jansen usrHd->nTmpDims = *nTmpDims ; 92*59599516SKenneth E. Jansen usrHd->rowp = rowp ; 93*59599516SKenneth E. Jansen usrHd->colm = colm ; 94*59599516SKenneth E. Jansen usrHd->lhsK = lhsK ; 95*59599516SKenneth E. Jansen usrHd->lhsP = lhsP ; 96*59599516SKenneth E. Jansen usrHd->lhsS = lhsS ; 97*59599516SKenneth E. Jansen usrHd->nnz_tot = nnz_tot ; 98*59599516SKenneth E. Jansen usrHd->CGsol = CGsol; 99*59599516SKenneth E. Jansen } /* end of usrNew() */ 100*59599516SKenneth E. Jansen 101*59599516SKenneth E. Jansen /*=========================================================================== 102*59599516SKenneth E. Jansen * 103*59599516SKenneth E. Jansen * "usrPointer": Get the pointer 104*59599516SKenneth E. Jansen * 105*59599516SKenneth E. Jansen *=========================================================================== 106*59599516SKenneth E. Jansen */ 107*59599516SKenneth E. Jansen Real* 108*59599516SKenneth E. Jansen usrPointer( UsrHd usrHd, 109*59599516SKenneth E. Jansen Integer id, 110*59599516SKenneth E. Jansen Integer offset, 111*59599516SKenneth E. Jansen Integer nDims ) 112*59599516SKenneth E. Jansen { 113*59599516SKenneth E. Jansen char* funcName = "usrPointer";/* function name */ 114*59599516SKenneth E. Jansen Real* pnt ; /* pointer */ 115*59599516SKenneth E. Jansen 116*59599516SKenneth E. Jansen /*--------------------------------------------------------------------------- 117*59599516SKenneth E. Jansen * Get the head of the memory 118*59599516SKenneth E. Jansen *--------------------------------------------------------------------------- 119*59599516SKenneth E. Jansen */ 120*59599516SKenneth E. Jansen if ( id == LES_RES_PNT ) { 121*59599516SKenneth E. Jansen 122*59599516SKenneth E. Jansen pnt = usrHd->resf ; 123*59599516SKenneth E. Jansen id = 0 ; 124*59599516SKenneth E. Jansen 125*59599516SKenneth E. Jansen } else if ( id == LES_SOL_PNT ) { 126*59599516SKenneth E. Jansen 127*59599516SKenneth E. Jansen pnt = usrHd->solinc ; 128*59599516SKenneth E. Jansen id = 0 ; 129*59599516SKenneth E. Jansen 130*59599516SKenneth E. Jansen } else if ( id < 0 ) { 131*59599516SKenneth E. Jansen 132*59599516SKenneth E. Jansen pnt = usrHd->aperm ; 133*59599516SKenneth E. Jansen id = id + usrHd->nPermDims ; 134*59599516SKenneth E. Jansen 135*59599516SKenneth E. Jansen } else { 136*59599516SKenneth E. Jansen 137*59599516SKenneth E. Jansen pnt = usrHd->atemp ; 138*59599516SKenneth E. Jansen id = id ; 139*59599516SKenneth E. Jansen 140*59599516SKenneth E. Jansen } 141*59599516SKenneth E. Jansen /*--------------------------------------------------------------------------- 142*59599516SKenneth E. Jansen * Get the offset 143*59599516SKenneth E. Jansen *--------------------------------------------------------------------------- 144*59599516SKenneth E. Jansen */ 145*59599516SKenneth E. Jansen pnt = pnt + (id + offset) * usrHd->nNodes ; 146*59599516SKenneth E. Jansen 147*59599516SKenneth E. Jansen /*--------------------------------------------------------------------------- 148*59599516SKenneth E. Jansen * Return the pointer 149*59599516SKenneth E. Jansen *--------------------------------------------------------------------------- 150*59599516SKenneth E. Jansen */ 151*59599516SKenneth E. Jansen return( pnt ) ; 152*59599516SKenneth E. Jansen 153*59599516SKenneth E. Jansen } /* end of usrPointer() */ 154*59599516SKenneth E. Jansen 155*59599516SKenneth E. Jansen #define myflesnew FortranCInterface_GLOBAL_(myflesnew,MYFLESNEW) 156*59599516SKenneth E. Jansen #define myflessolve FortranCInterface_GLOBAL_(myflessolve,MYFLESSOLVE) 157*59599516SKenneth E. Jansen #define savelesrestart FortranCInterface_GLOBAL_(savelesrestart,SAVELESRESTART) 158*59599516SKenneth E. Jansen #define readlesrestart FortranCInterface_GLOBAL_(readlesrestart,READLESRESTART) 159*59599516SKenneth E. Jansen #define solverlicenseserver FortranCInterface_GLOBAL_(solverlicenseserver,SOLVERLICENSESERVER) 160*59599516SKenneth E. Jansen 161*59599516SKenneth E. Jansen 162*59599516SKenneth E. Jansen 163*59599516SKenneth E. Jansen #ifdef intel 164*59599516SKenneth E. Jansen lesArray[ *lesId ] = lesNew( fileName, *lmport, &lmNum, *eqnType, 165*59599516SKenneth E. Jansen *nDofs, *minIters, *maxIters, *nKvecs, 166*59599516SKenneth E. Jansen *prjFlag, *nPrjs, *presPrjFlag, *nPresPrjs,presPrec, 167*59599516SKenneth E. Jansen *tol, *presTol, *verbose, stats, nPermDims, 168*59599516SKenneth E. Jansen nTmpDims ); 169*59599516SKenneth E. Jansen return ;} 170*59599516SKenneth E. Jansen /* the following is a fake function that was required when we moved to 171*59599516SKenneth E. Jansen a C++ main on in the MS Visual Studio environment. It fails to 172*59599516SKenneth E. Jansen link because it is looking for this function 173*59599516SKenneth E. Jansen */ 174*59599516SKenneth E. Jansen void _CrtDbgReport() { 175*59599516SKenneth E. Jansen return ;} 176*59599516SKenneth E. Jansen 177*59599516SKenneth E. Jansen double __vcos_(double fg) { fflush(stdout); printf(" vcos got called \n"); fflush(stdout);} 178*59599516SKenneth E. Jansen double __vlog_(double fg) { fflush(stdout); printf(" vlog got called \n"); fflush(stdout);} 179*59599516SKenneth E. Jansen 180*59599516SKenneth E. Jansen 181*59599516SKenneth E. Jansen #endif /* we are in unix land... whew. secretly we have equivalenced fileName and */ 182*59599516SKenneth E. Jansen 183*59599516SKenneth E. Jansen /* #ifdef LINUX*/ 184*59599516SKenneth E. Jansen /* void flush_(int* junk ){ return; }*/ 185*59599516SKenneth E. Jansen /* #endif*/ 186*59599516SKenneth E. Jansen void myflesnew( Integer* lesId, 187*59599516SKenneth E. Jansen Integer* lmport, 188*59599516SKenneth E. Jansen Integer* eqnType, 189*59599516SKenneth E. Jansen Integer* nDofs, 190*59599516SKenneth E. Jansen Integer* minIters, 191*59599516SKenneth E. Jansen Integer* maxIters, 192*59599516SKenneth E. Jansen Integer* nKvecs, 193*59599516SKenneth E. Jansen Integer* prjFlag, 194*59599516SKenneth E. Jansen Integer* nPrjs, 195*59599516SKenneth E. Jansen Integer* presPrjFlag, 196*59599516SKenneth E. Jansen Integer* nPresPrjs, 197*59599516SKenneth E. Jansen Real* tol, 198*59599516SKenneth E. Jansen Real* presTol, 199*59599516SKenneth E. Jansen Integer* verbose, 200*59599516SKenneth E. Jansen Real* stats, 201*59599516SKenneth E. Jansen Integer* nPermDims, 202*59599516SKenneth E. Jansen Integer* nTmpDims, 203*59599516SKenneth E. Jansen char* lmhost ) { 204*59599516SKenneth E. Jansen int procId; 205*59599516SKenneth E. Jansen #ifdef AMG 206*59599516SKenneth E. Jansen int presPrec=1; 207*59599516SKenneth E. Jansen #else 208*59599516SKenneth E. Jansen int presPrec=0; 209*59599516SKenneth E. Jansen #endif 210*59599516SKenneth E. Jansen MPI_Comm_rank( MPI_COMM_WORLD, &procId ) ; 211*59599516SKenneth E. Jansen if(lmNum==0){ 212*59599516SKenneth E. Jansen if(procId==0){ 213*59599516SKenneth E. Jansen lesArray[ *lesId ] = lesNew( lmhost, *lmport, &lmNum, *eqnType, 214*59599516SKenneth E. Jansen *nDofs, *minIters, *maxIters, *nKvecs, 215*59599516SKenneth E. Jansen *prjFlag, *nPrjs, *presPrjFlag, *nPresPrjs,presPrec, 216*59599516SKenneth E. Jansen *tol, *presTol, *verbose, stats, nPermDims, 217*59599516SKenneth E. Jansen nTmpDims ); 218*59599516SKenneth E. Jansen MPI_Bcast( &lmNum, 1, MPI_INT, 0, MPI_COMM_WORLD ) ; 219*59599516SKenneth E. Jansen } else { 220*59599516SKenneth E. Jansen MPI_Bcast( &lmNum, 1, MPI_INT, 0, MPI_COMM_WORLD ) ; 221*59599516SKenneth E. Jansen lesArray[ *lesId ] = lesNew( lmhost, *lmport, &lmNum, *eqnType, 222*59599516SKenneth E. Jansen *nDofs, *minIters, *maxIters, *nKvecs, 223*59599516SKenneth E. Jansen *prjFlag, *nPrjs, *presPrjFlag, *nPresPrjs,presPrec, 224*59599516SKenneth E. Jansen *tol, *presTol, *verbose, stats, nPermDims, 225*59599516SKenneth E. Jansen nTmpDims ); 226*59599516SKenneth E. Jansen } 227*59599516SKenneth E. Jansen } else { 228*59599516SKenneth E. Jansen lesArray[ *lesId ] = lesNew( lmhost, *lmport, &lmNum, *eqnType, 229*59599516SKenneth E. Jansen *nDofs, *minIters, *maxIters, *nKvecs, 230*59599516SKenneth E. Jansen *prjFlag, *nPrjs, *presPrjFlag, *nPresPrjs,presPrec, 231*59599516SKenneth E. Jansen *tol, *presTol, *verbose, stats, nPermDims, 232*59599516SKenneth E. Jansen nTmpDims ); 233*59599516SKenneth E. Jansen } 234*59599516SKenneth E. Jansen return ; 235*59599516SKenneth E. Jansen } 236*59599516SKenneth E. Jansen 237*59599516SKenneth E. Jansen 238*59599516SKenneth E. Jansen void 239*59599516SKenneth E. Jansen savelesrestart( Integer* lesId, 240*59599516SKenneth E. Jansen Real* aperm, 241*59599516SKenneth E. Jansen Integer* nshg, 242*59599516SKenneth E. Jansen Integer* myrank, 243*59599516SKenneth E. Jansen Integer* lstep, 244*59599516SKenneth E. Jansen Integer* nPermDims ) { 245*59599516SKenneth E. Jansen 246*59599516SKenneth E. Jansen int nPrjs, PrjSrcId; 247*59599516SKenneth E. Jansen int nPresPrjs, PresPrjSrcId; 248*59599516SKenneth E. Jansen char filename[255]; 249*59599516SKenneth E. Jansen int fileHandle=0; 250*59599516SKenneth E. Jansen int iarray[3]; 251*59599516SKenneth E. Jansen int size, nitems; 252*59599516SKenneth E. Jansen double* projVec; 253*59599516SKenneth E. Jansen int i, j, count; 254*59599516SKenneth E. Jansen 255*59599516SKenneth E. Jansen // sprintf( filename,"restart.%d.%d", *lstep, *myrank+1 ); 256*59599516SKenneth E. Jansen // openfile_( filename, "append", &fileHandle ); 257*59599516SKenneth E. Jansen 258*59599516SKenneth E. Jansen nPrjs = (Integer) lesGetPar( lesArray[ *lesId ], LES_ACT_PRJS ); 259*59599516SKenneth E. Jansen PrjSrcId = (Integer) lesGetPar( lesArray[ *lesId ], LES_PRJ_VEC_ID ); 260*59599516SKenneth E. Jansen 261*59599516SKenneth E. Jansen if ( PrjSrcId < 0 ) PrjSrcId += *nPermDims; 262*59599516SKenneth E. Jansen 263*59599516SKenneth E. Jansen projVec = (double*)malloc( nPrjs * ( *nshg ) * sizeof( double ) ); 264*59599516SKenneth E. Jansen 265*59599516SKenneth E. Jansen count = 0; 266*59599516SKenneth E. Jansen for( i = PrjSrcId; i < PrjSrcId+nPrjs; i ++ ) { 267*59599516SKenneth E. Jansen for( j = 0 ; j < *nshg; j++ ) { 268*59599516SKenneth E. Jansen projVec[ count++ ] = aperm[ (*nshg) * i + j ]; 269*59599516SKenneth E. Jansen } 270*59599516SKenneth E. Jansen } 271*59599516SKenneth E. Jansen 272*59599516SKenneth E. Jansen //printf("Savelessrestart, nPrjs is %d\n",nPrjs); 273*59599516SKenneth E. Jansen 274*59599516SKenneth E. Jansen iarray[ 0 ] = *nshg; 275*59599516SKenneth E. Jansen iarray[ 1 ] = nPrjs; 276*59599516SKenneth E. Jansen nitems = 2; 277*59599516SKenneth E. Jansen size = (*nshg)*nPrjs; 278*59599516SKenneth E. Jansen 279*59599516SKenneth E. Jansen int name_length; 280*59599516SKenneth E. Jansen name_length = 18; 281*59599516SKenneth E. Jansen Write_Field(myrank,"a","projection vectors",&name_length, (void *)projVec,"d", nshg, &nPrjs, lstep); 282*59599516SKenneth E. Jansen 283*59599516SKenneth E. Jansen //writeheader_( &fileHandle, "projection vectors ", (void*)iarray, 284*59599516SKenneth E. Jansen // &nitems, &size, "double", phasta_iotype ); 285*59599516SKenneth E. Jansen //nitems = size; 286*59599516SKenneth E. Jansen //writedatablock_( &fileHandle, "projection vectors ", (void*)projVec, 287*59599516SKenneth E. Jansen // &nitems, "double", phasta_iotype ); 288*59599516SKenneth E. Jansen free(projVec); 289*59599516SKenneth E. Jansen 290*59599516SKenneth E. Jansen /*************************************************************************/ 291*59599516SKenneth E. Jansen 292*59599516SKenneth E. Jansen nPresPrjs = (Integer) lesGetPar( lesArray[ *lesId ], LES_ACT_PRES_PRJS ); 293*59599516SKenneth E. Jansen PresPrjSrcId =(Integer)lesGetPar( lesArray[ *lesId ], LES_PRES_PRJ_VEC_ID ); 294*59599516SKenneth E. Jansen if ( PresPrjSrcId < 0 ) PresPrjSrcId += *nPermDims; 295*59599516SKenneth E. Jansen 296*59599516SKenneth E. Jansen projVec = (double*)malloc( nPresPrjs * ( *nshg ) * sizeof( double ) ); 297*59599516SKenneth E. Jansen 298*59599516SKenneth E. Jansen count = 0; 299*59599516SKenneth E. Jansen for( i = PresPrjSrcId; i < (PresPrjSrcId + nPresPrjs) ; i ++ ) { 300*59599516SKenneth E. Jansen for( j = 0 ; j < *nshg; j++ ) { 301*59599516SKenneth E. Jansen projVec[ count++ ] = aperm[ (*nshg) * i + j ]; 302*59599516SKenneth E. Jansen } 303*59599516SKenneth E. Jansen } 304*59599516SKenneth E. Jansen 305*59599516SKenneth E. Jansen iarray[ 0 ] = *nshg; 306*59599516SKenneth E. Jansen iarray[ 1 ] = nPresPrjs; 307*59599516SKenneth E. Jansen nitems = 2; 308*59599516SKenneth E. Jansen size = (*nshg)*nPresPrjs; 309*59599516SKenneth E. Jansen 310*59599516SKenneth E. Jansen name_length = 27; 311*59599516SKenneth E. Jansen Write_Field(myrank,"a","pressure projection vectors",&name_length, projVec,"d", nshg, &nPresPrjs, lstep); 312*59599516SKenneth E. Jansen 313*59599516SKenneth E. Jansen //writeheader_( &fileHandle, "pressure projection vectors ", (void*)iarray, 314*59599516SKenneth E. Jansen // &nitems, &size, "double", phasta_iotype ); 315*59599516SKenneth E. Jansen // nitems = size; 316*59599516SKenneth E. Jansen 317*59599516SKenneth E. Jansen //writedatablock_( &fileHandle, "pressure projection vectors ", 318*59599516SKenneth E. Jansen // (void*)projVec, &nitems, "double", phasta_iotype ); 319*59599516SKenneth E. Jansen free( projVec); 320*59599516SKenneth E. Jansen 321*59599516SKenneth E. Jansen //closefile_( &fileHandle, "append" ); 322*59599516SKenneth E. Jansen } 323*59599516SKenneth E. Jansen 324*59599516SKenneth E. Jansen void 325*59599516SKenneth E. Jansen readlesrestart( Integer* lesId, 326*59599516SKenneth E. Jansen Real* aperm, 327*59599516SKenneth E. Jansen Integer* nshg, 328*59599516SKenneth E. Jansen Integer* myrank, 329*59599516SKenneth E. Jansen Integer* lstep , 330*59599516SKenneth E. Jansen Integer* nPermDims ) { 331*59599516SKenneth E. Jansen 332*59599516SKenneth E. Jansen int nPrjs, PrjSrcId; 333*59599516SKenneth E. Jansen int nPresPrjs, PresPrjSrcId; 334*59599516SKenneth E. Jansen char filename[255]; 335*59599516SKenneth E. Jansen int fileHandle=0; 336*59599516SKenneth E. Jansen int iarray[3]={-1,-1,-1}; 337*59599516SKenneth E. Jansen int size, nitems; 338*59599516SKenneth E. Jansen int itwo=2; 339*59599516SKenneth E. Jansen int lnshg; 340*59599516SKenneth E. Jansen double* projVec; 341*59599516SKenneth E. Jansen int i,j,count; 342*59599516SKenneth E. Jansen 343*59599516SKenneth E. Jansen //MR CHANGE 344*59599516SKenneth E. Jansen // sprintf( filename,"restart.%d.%d", *lstep, *myrank+1 ); 345*59599516SKenneth E. Jansen 346*59599516SKenneth E. Jansen // int nfiles=2; 347*59599516SKenneth E. Jansen // int numParts=8; 348*59599516SKenneth E. Jansen // int nfields=6; 349*59599516SKenneth E. Jansen int nfiles; 350*59599516SKenneth E. Jansen int nfields; 351*59599516SKenneth E. Jansen int numParts; 352*59599516SKenneth E. Jansen int nprocs; 353*59599516SKenneth E. Jansen int nppf; 354*59599516SKenneth E. Jansen 355*59599516SKenneth E. Jansen nfiles = outpar.nsynciofiles; 356*59599516SKenneth E. Jansen // nfields = outpar.nsynciofieldsreadrestart; 357*59599516SKenneth E. Jansen numParts = workfc.numpe; 358*59599516SKenneth E. Jansen nprocs = workfc.numpe; 359*59599516SKenneth E. Jansen //MR CHANGE END 360*59599516SKenneth E. Jansen 361*59599516SKenneth E. Jansen // int nppf = numParts/nfiles; 362*59599516SKenneth E. Jansen char fieldname[255]; 363*59599516SKenneth E. Jansen 364*59599516SKenneth E. Jansen // MPI_Comm_size(MPI_COMM_WORLD, &numprocs); 365*59599516SKenneth E. Jansen // Calculate number of parts each proc deal with and where it start and end ... 366*59599516SKenneth E. Jansen int nppp = numParts/nprocs; // nppp : Number of parts per proc ... 367*59599516SKenneth E. Jansen int startpart = *myrank * nppp +1; // Part id from which I (myrank) start ... 368*59599516SKenneth E. Jansen int endpart = startpart + nppp - 1; // Part id to which I (myrank) end ... 369*59599516SKenneth E. Jansen 370*59599516SKenneth E. Jansen sprintf( filename,"restart-dat.%d.%d",*lstep,((int)(*myrank/(numParts/nfiles))+1)); 371*59599516SKenneth E. Jansen queryphmpiio(filename, &nfields, &nppf); 372*59599516SKenneth E. Jansen initphmpiio(&nfields, &nppf, &nfiles,&fileHandle,"read"); 373*59599516SKenneth E. Jansen //MR CHANGE END 374*59599516SKenneth E. Jansen 375*59599516SKenneth E. Jansen openfile( filename, "read", &fileHandle ); 376*59599516SKenneth E. Jansen 377*59599516SKenneth E. Jansen 378*59599516SKenneth E. Jansen // if ( fileHandle == 0 ) return; 379*59599516SKenneth E. Jansen if ( fileHandle < 0 ) return; // See phastaIO.cc for error fileHandle 380*59599516SKenneth E. Jansen // for ( i = 0; i < nppp; i++ ) // If one day several parts per file 381*59599516SKenneth E. Jansen // { 382*59599516SKenneth E. Jansen bzero((void*)fieldname,255); 383*59599516SKenneth E. Jansen sprintf(fieldname,"projection vectors@%d",startpart); 384*59599516SKenneth E. Jansen // readheader_( &fileHandle, "projection vectors", (void*)iarray, 385*59599516SKenneth E. Jansen // &itwo, "integer", phasta_iotype ); 386*59599516SKenneth E. Jansen readheader( &fileHandle, fieldname, (void*)iarray, 387*59599516SKenneth E. Jansen &itwo, "integer", phasta_iotype ); 388*59599516SKenneth E. Jansen // } 389*59599516SKenneth E. Jansen //MR CHANGE END 390*59599516SKenneth E. Jansen 391*59599516SKenneth E. Jansen if ( iarray[0] != *nshg ) { 392*59599516SKenneth E. Jansen closefile( &fileHandle, "read" ); 393*59599516SKenneth E. Jansen if(workfc.myrank==workfc.master) 394*59599516SKenneth E. Jansen printf("projection vectors are being initialized to zero (SAFE)\n"); 395*59599516SKenneth E. Jansen return; 396*59599516SKenneth E. Jansen } 397*59599516SKenneth E. Jansen 398*59599516SKenneth E. Jansen lnshg = iarray[ 0 ] ; 399*59599516SKenneth E. Jansen nPrjs = iarray[ 1 ] ; 400*59599516SKenneth E. Jansen 401*59599516SKenneth E. Jansen size = (*nshg)*nPrjs; 402*59599516SKenneth E. Jansen projVec = (double*)malloc( size * sizeof( double )); 403*59599516SKenneth E. Jansen 404*59599516SKenneth E. Jansen //MR CHANGE 405*59599516SKenneth E. Jansen // readdatablock_( &fileHandle, "projection vectors", (void*)projVec, 406*59599516SKenneth E. Jansen // &size, "double", phasta_iotype ); 407*59599516SKenneth E. Jansen readdatablock( &fileHandle, fieldname, (void*)projVec, 408*59599516SKenneth E. Jansen &size, "double", phasta_iotype ); 409*59599516SKenneth E. Jansen //MR CHANGE END 410*59599516SKenneth E. Jansen 411*59599516SKenneth E. Jansen lesSetPar( lesArray[ *lesId ], LES_ACT_PRJS, (Real) nPrjs ); 412*59599516SKenneth E. Jansen PrjSrcId = (Integer) lesGetPar( lesArray[ *lesId ], LES_PRJ_VEC_ID ); 413*59599516SKenneth E. Jansen if ( PrjSrcId < 0 ) PrjSrcId += *nPermDims; 414*59599516SKenneth E. Jansen 415*59599516SKenneth E. Jansen count = 0; 416*59599516SKenneth E. Jansen for( i = PrjSrcId; i < PrjSrcId+nPrjs; i ++ ) { 417*59599516SKenneth E. Jansen for( j = 0 ; j < *nshg; j++ ) { 418*59599516SKenneth E. Jansen aperm[ (*nshg) * i + j ] = projVec[ count++ ] ; 419*59599516SKenneth E. Jansen } 420*59599516SKenneth E. Jansen } 421*59599516SKenneth E. Jansen 422*59599516SKenneth E. Jansen free( projVec ); 423*59599516SKenneth E. Jansen 424*59599516SKenneth E. Jansen /************************************************************************/ 425*59599516SKenneth E. Jansen 426*59599516SKenneth E. Jansen iarray[0] = -1; iarray[1] = -1; iarray[2] = -1; 427*59599516SKenneth E. Jansen 428*59599516SKenneth E. Jansen //MR CHANGE 429*59599516SKenneth E. Jansen 430*59599516SKenneth E. Jansen bzero((void*)fieldname,255); 431*59599516SKenneth E. Jansen sprintf(fieldname,"pressure projection vectors@%d",startpart); 432*59599516SKenneth E. Jansen 433*59599516SKenneth E. Jansen //MR CHANGE END 434*59599516SKenneth E. Jansen 435*59599516SKenneth E. Jansen 436*59599516SKenneth E. Jansen readheader( &fileHandle, fieldname, (void*)iarray, 437*59599516SKenneth E. Jansen &itwo, "integer", phasta_iotype ); 438*59599516SKenneth E. Jansen 439*59599516SKenneth E. Jansen lnshg = iarray[ 0 ] ; 440*59599516SKenneth E. Jansen nPresPrjs = iarray[ 1 ] ; 441*59599516SKenneth E. Jansen 442*59599516SKenneth E. Jansen if ( lnshg != *nshg ) { 443*59599516SKenneth E. Jansen closefile( &fileHandle, "read" ); 444*59599516SKenneth E. Jansen if(workfc.myrank==workfc.master) 445*59599516SKenneth E. Jansen printf("pressure projection vectors are being initialized to zero (SAFE)\n"); 446*59599516SKenneth E. Jansen return; 447*59599516SKenneth E. Jansen } 448*59599516SKenneth E. Jansen 449*59599516SKenneth E. Jansen size = (*nshg)*nPresPrjs; 450*59599516SKenneth E. Jansen projVec = (double*)malloc( size * sizeof( double )); 451*59599516SKenneth E. Jansen 452*59599516SKenneth E. Jansen readdatablock( &fileHandle, fieldname, (void*)projVec, 453*59599516SKenneth E. Jansen &size, "double", phasta_iotype ); 454*59599516SKenneth E. Jansen 455*59599516SKenneth E. Jansen lesSetPar( lesArray[ *lesId ], LES_ACT_PRES_PRJS, (Real) nPresPrjs ); 456*59599516SKenneth E. Jansen PresPrjSrcId=(Integer)lesGetPar( lesArray[ *lesId ], LES_PRES_PRJ_VEC_ID ); 457*59599516SKenneth E. Jansen if ( PresPrjSrcId < 0 ) PresPrjSrcId += *nPermDims; 458*59599516SKenneth E. Jansen 459*59599516SKenneth E. Jansen count = 0; 460*59599516SKenneth E. Jansen for( i = PresPrjSrcId; i < PresPrjSrcId+nPresPrjs; i ++ ) { 461*59599516SKenneth E. Jansen for( j = 0 ; j < *nshg; j++ ) { 462*59599516SKenneth E. Jansen aperm[ (*nshg) * i + j ] = projVec[ count++ ] ; 463*59599516SKenneth E. Jansen } 464*59599516SKenneth E. Jansen } 465*59599516SKenneth E. Jansen 466*59599516SKenneth E. Jansen free( projVec ); 467*59599516SKenneth E. Jansen 468*59599516SKenneth E. Jansen closefile( &fileHandle, "read" ); 469*59599516SKenneth E. Jansen 470*59599516SKenneth E. Jansen //MR CHANGE 471*59599516SKenneth E. Jansen finalizephmpiio(&fileHandle); 472*59599516SKenneth E. Jansen //MR CHANGE END 473*59599516SKenneth E. Jansen 474*59599516SKenneth E. Jansen } 475*59599516SKenneth E. Jansen 476*59599516SKenneth E. Jansen void myflessolve( Integer* lesId, 477*59599516SKenneth E. Jansen UsrHd usrHd){ 478*59599516SKenneth E. Jansen lesSolve( lesArray[ *lesId ], usrHd ); 479*59599516SKenneth E. Jansen } 480*59599516SKenneth E. Jansen 481*59599516SKenneth E. Jansen 482*59599516SKenneth E. Jansen int solverlicenseserver(char key[]){ 483*59599516SKenneth E. Jansen #ifdef intel 484*59599516SKenneth E. Jansen strcpy(key,"C:\\cygwin\\license.dat"); 485*59599516SKenneth E. Jansen #else 486*59599516SKenneth E. Jansen char* env_server_name; 487*59599516SKenneth E. Jansen env_server_name = getenv("LES_LICENSE_SERVER"); 488*59599516SKenneth E. Jansen if(env_server_name) strcpy(key, env_server_name); 489*59599516SKenneth E. Jansen else { 490*59599516SKenneth E. Jansen if(workfc.myrank==workfc.master) { 491*59599516SKenneth E. Jansen fprintf(stderr,"environment variable LES_LICENSE_SERVER not defined \n"); 492*59599516SKenneth E. Jansen fprintf(stderr,"using wesley as default \n"); 493*59599516SKenneth E. Jansen } 494*59599516SKenneth E. Jansen //MR CHANGE 495*59599516SKenneth E. Jansen // strcpy(key, "wesley.scorec.rpi.edu"); 496*59599516SKenneth E. Jansen strcpy(key, "acusim.license.scorec.rpi.edu"); 497*59599516SKenneth E. Jansen //MR CHANGE END 498*59599516SKenneth E. Jansen } 499*59599516SKenneth E. Jansen #endif 500*59599516SKenneth E. Jansen return 1; 501*59599516SKenneth E. Jansen } 502