1*59599516SKenneth E. Jansen //MR CHANGE 2*59599516SKenneth E. Jansen #define OMPI_SKIP_MPICXX 1 3*59599516SKenneth E. Jansen //MR CHANGE END 4*59599516SKenneth E. Jansen #include <mpi.h> 5*59599516SKenneth E. Jansen #include <stdio.h> 6*59599516SKenneth E. Jansen #include <stdlib.h> 7*59599516SKenneth E. Jansen #include <string.h> 8*59599516SKenneth E. Jansen 9*59599516SKenneth E. Jansen #include <sys/types.h> 10*59599516SKenneth E. Jansen #include <sys/stat.h> 11*59599516SKenneth E. Jansen 12*59599516SKenneth E. Jansen #include "common_c.h" 13*59599516SKenneth E. Jansen 14*59599516SKenneth E. Jansen #if !(defined IOSTREAMH) 15*59599516SKenneth E. Jansen #include <iostream> 16*59599516SKenneth E. Jansen #include <strstream> 17*59599516SKenneth E. Jansen using namespace std; 18*59599516SKenneth E. Jansen #endif 19*59599516SKenneth E. Jansen 20*59599516SKenneth E. Jansen #include <FCMangle.h> 21*59599516SKenneth E. Jansen #define input FortranCInterface_GLOBAL_(input,INPUT) 22*59599516SKenneth E. Jansen #define proces FortranCInterface_GLOBAL_(proces,PROCES) 23*59599516SKenneth E. Jansen #define timer FortranCInterface_GLOBAL_(timer,TIMER) 24*59599516SKenneth E. Jansen 25*59599516SKenneth E. Jansen #ifdef intel 26*59599516SKenneth E. Jansen #include <direct.h> 27*59599516SKenneth E. Jansen #define chdir _chdir 28*59599516SKenneth E. Jansen #else 29*59599516SKenneth E. Jansen #include <unistd.h> 30*59599516SKenneth E. Jansen #endif 31*59599516SKenneth E. Jansen 32*59599516SKenneth E. Jansen extern "C" char phasta_iotype[80]; 33*59599516SKenneth E. Jansen char phasta_iotype[80]; 34*59599516SKenneth E. Jansen 35*59599516SKenneth E. Jansen extern int SONFATH; 36*59599516SKenneth E. Jansen extern void Partition_Problem( int, char[], char[], int ); 37*59599516SKenneth E. Jansen extern "C" void proces(); 38*59599516SKenneth E. Jansen extern "C" void input(); 39*59599516SKenneth E. Jansen extern int input_fform(char inpfname[]); 40*59599516SKenneth E. Jansen //MR CHANGE 41*59599516SKenneth E. Jansen extern void setIOparam(); // For SyncIO 42*59599516SKenneth E. Jansen //MR CHANGE END 43*59599516SKenneth E. Jansen 44*59599516SKenneth E. Jansen int myrank; /* made file global for ease in debugging */ 45*59599516SKenneth E. Jansen 46*59599516SKenneth E. Jansen void 47*59599516SKenneth E. Jansen catchDebugger() { 48*59599516SKenneth E. Jansen while (1) { 49*59599516SKenneth E. Jansen int debuggerPresent=0; 50*59599516SKenneth E. Jansen int fakeSTOP = 1; // please stop HERE and assign as next line 51*59599516SKenneth E. Jansen // assign or set debuggerPresent=1 52*59599516SKenneth E. Jansen if(debuggerPresent) { 53*59599516SKenneth E. Jansen break; 54*59599516SKenneth E. Jansen } 55*59599516SKenneth E. Jansen } 56*59599516SKenneth E. Jansen } 57*59599516SKenneth E. Jansen 58*59599516SKenneth E. Jansen // some useful debugging functions 59*59599516SKenneth E. Jansen 60*59599516SKenneth E. Jansen void 61*59599516SKenneth E. Jansen pdarray( void* darray , int start, int end ) { 62*59599516SKenneth E. Jansen for( int i=start; i < end; i++ ){ 63*59599516SKenneth E. Jansen cout << ((double*)darray)[i] << endl; 64*59599516SKenneth E. Jansen } 65*59599516SKenneth E. Jansen } 66*59599516SKenneth E. Jansen 67*59599516SKenneth E. Jansen void 68*59599516SKenneth E. Jansen piarray( void* iarray , int start, int end ) { 69*59599516SKenneth E. Jansen for( int i=start; i < end; i++ ){ 70*59599516SKenneth E. Jansen cout << ((int*)iarray)[i] << endl; 71*59599516SKenneth E. Jansen } 72*59599516SKenneth E. Jansen } 73*59599516SKenneth E. Jansen 74*59599516SKenneth E. Jansen extern "C" int 75*59599516SKenneth E. Jansen phasta( int argc, 76*59599516SKenneth E. Jansen char *argv[] ) { 77*59599516SKenneth E. Jansen 78*59599516SKenneth E. Jansen int size,ierr; 79*59599516SKenneth E. Jansen char inpfilename[100]; 80*59599516SKenneth E. Jansen char* pauseDebugger = getenv("catchDebugger"); 81*59599516SKenneth E. Jansen //cout << "pauseDebugger" << pauseDebugger << endl; 82*59599516SKenneth E. Jansen 83*59599516SKenneth E. Jansen MPI_Init(&argc,&argv); 84*59599516SKenneth E. Jansen MPI_Comm_size (MPI_COMM_WORLD, &size); 85*59599516SKenneth E. Jansen MPI_Comm_rank (MPI_COMM_WORLD, &myrank); 86*59599516SKenneth E. Jansen 87*59599516SKenneth E. Jansen workfc.numpe = size; 88*59599516SKenneth E. Jansen workfc.myrank = myrank; 89*59599516SKenneth E. Jansen 90*59599516SKenneth E. Jansen #if (defined WIN32) 91*59599516SKenneth E. Jansen if(argc > 2 ){ 92*59599516SKenneth E. Jansen catchDebugger(); 93*59599516SKenneth E. Jansen } 94*59599516SKenneth E. Jansen #endif 95*59599516SKenneth E. Jansen #if (1) // ALWAYS ( defined LAUNCH_GDB ) && !( defined WIN32 ) 96*59599516SKenneth E. Jansen 97*59599516SKenneth E. Jansen if ( pauseDebugger ) { 98*59599516SKenneth E. Jansen 99*59599516SKenneth E. Jansen int parent_pid = getpid(); 100*59599516SKenneth E. Jansen int gdb_child = fork(); 101*59599516SKenneth E. Jansen cout << "gdb_child" << gdb_child << endl; 102*59599516SKenneth E. Jansen 103*59599516SKenneth E. Jansen if( gdb_child == 0 ) { 104*59599516SKenneth E. Jansen 105*59599516SKenneth E. Jansen cout << "Debugger Process initiating" << endl; 106*59599516SKenneth E. Jansen strstream exec_string; 107*59599516SKenneth E. Jansen 108*59599516SKenneth E. Jansen #if ( defined decalp ) 109*59599516SKenneth E. Jansen exec_string <<"xterm -e idb " 110*59599516SKenneth E. Jansen << " -pid "<< parent_pid <<" "<< argv[0] << endl; 111*59599516SKenneth E. Jansen #endif 112*59599516SKenneth E. Jansen #if ( defined LINUX ) 113*59599516SKenneth E. Jansen exec_string <<"xterm -e gdb" 114*59599516SKenneth E. Jansen << " -pid "<< parent_pid <<" "<< argv[0] << endl; 115*59599516SKenneth E. Jansen #endif 116*59599516SKenneth E. Jansen #if ( defined SUN4 ) 117*59599516SKenneth E. Jansen exec_string <<"xterm -e dbx " 118*59599516SKenneth E. Jansen << " - "<< parent_pid <<" "<< argv[0] << endl; 119*59599516SKenneth E. Jansen #endif 120*59599516SKenneth E. Jansen #if ( defined IRIX ) 121*59599516SKenneth E. Jansen exec_string <<"xterm -e dbx " 122*59599516SKenneth E. Jansen << " -p "<< parent_pid <<" "<< argv[0] << endl; 123*59599516SKenneth E. Jansen #endif 124*59599516SKenneth E. Jansen system( exec_string.str() ); 125*59599516SKenneth E. Jansen exit(0); 126*59599516SKenneth E. Jansen } 127*59599516SKenneth E. Jansen catchDebugger(); 128*59599516SKenneth E. Jansen } 129*59599516SKenneth E. Jansen 130*59599516SKenneth E. Jansen #endif 131*59599516SKenneth E. Jansen 132*59599516SKenneth E. Jansen /* Input data */ 133*59599516SKenneth E. Jansen if(argc > 1 ){ 134*59599516SKenneth E. Jansen strcpy(inpfilename,argv[1]); 135*59599516SKenneth E. Jansen } else { 136*59599516SKenneth E. Jansen strcpy(inpfilename,"solver.inp"); 137*59599516SKenneth E. Jansen } 138*59599516SKenneth E. Jansen ierr = input_fform(inpfilename); 139*59599516SKenneth E. Jansen if(!ierr){ 140*59599516SKenneth E. Jansen 141*59599516SKenneth E. Jansen /* Preprocess data and run the problem */ 142*59599516SKenneth E. Jansen /* Partition the problem to the correct number of processors */ 143*59599516SKenneth E. Jansen if( size > 1 ) { 144*59599516SKenneth E. Jansen if( myrank == 0 ) { 145*59599516SKenneth E. Jansen Partition_Problem( size, phasta_iotype, 146*59599516SKenneth E. Jansen phasta_iotype, SONFATH ); 147*59599516SKenneth E. Jansen MPI_Barrier(MPI_COMM_WORLD); 148*59599516SKenneth E. Jansen } else { 149*59599516SKenneth E. Jansen MPI_Barrier(MPI_COMM_WORLD); 150*59599516SKenneth E. Jansen sprintf(inpfilename,"%d-procs_case/",size); 151*59599516SKenneth E. Jansen if( chdir( inpfilename ) ) { 152*59599516SKenneth E. Jansen cerr << "could not change to the problem directory " 153*59599516SKenneth E. Jansen << inpfilename << endl; 154*59599516SKenneth E. Jansen return 1; 155*59599516SKenneth E. Jansen } 156*59599516SKenneth E. Jansen } 157*59599516SKenneth E. Jansen } 158*59599516SKenneth E. Jansen 159*59599516SKenneth E. Jansen //MR CHANGE 160*59599516SKenneth E. Jansen setIOparam(); 161*59599516SKenneth E. Jansen //MR CHANGE END 162*59599516SKenneth E. Jansen 163*59599516SKenneth E. Jansen input(); 164*59599516SKenneth E. Jansen /* now we can start the solver */ 165*59599516SKenneth E. Jansen proces(); 166*59599516SKenneth E. Jansen } 167*59599516SKenneth E. Jansen else{ 168*59599516SKenneth E. Jansen printf("error during reading ascii input \n"); 169*59599516SKenneth E. Jansen } 170*59599516SKenneth E. Jansen 171*59599516SKenneth E. Jansen //MR CHANGE 172*59599516SKenneth E. Jansen 173*59599516SKenneth E. Jansen MPI_Barrier(MPI_COMM_WORLD); 174*59599516SKenneth E. Jansen if ( myrank == 0 ) { 175*59599516SKenneth E. Jansen printf("phasta.cc - last call before finalize!\n"); 176*59599516SKenneth E. Jansen } 177*59599516SKenneth E. Jansen //MR CHANGE 178*59599516SKenneth E. Jansen 179*59599516SKenneth E. Jansen MPI_Finalize(); 180*59599516SKenneth E. Jansen return 0; 181*59599516SKenneth E. Jansen } 182