xref: /phasta/phSolver/incompressible/usr.c (revision c07b23fc5d98026b0b2c751adbe455d84e9bf2d1)
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