xref: /phasta/M2NFixBnd/src/phasta.cc (revision 06d45c3e23cf9519431c2d5c7bbad33ddf2fbe7a)
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 
5 #include <unistd.h>
6 #include <sys/types.h>
7 #include <sys/stat.h>
8 
9 #include <iostream>
10 #include <sstream>
11 using namespace std;
12 
13 #define OMPI_SKIP_MPICXX 1
14 #include <mpi.h>
15 
16 #include <FCMangle.h>
17 #define input FortranCInterface_GLOBAL_(input,INPUT)
18 #define timer FortranCInterface_GLOBAL_(timer,TIMER)
19 
20 #include "commonM2NFixBnd_c.h"
21 
22 extern "C" char phasta_iotype[80];
23 char phasta_iotype[80];
24 
25 extern "C" void input();
26 //MR CHANGE
27 extern void setIOparam(); // For SyncIO
28 //MR CHANGE END
29 
30 int myrank; /* made file global for ease in debugging */
31 
32 void
33 catchDebugger() {
34     while (1) {
35       int debuggerPresent=0;
36       int fakeSTOP = 1; // please stop HERE and assign as next line
37       // assign or set debuggerPresent=1
38       if(debuggerPresent) {
39         break;
40       }
41     }
42 }
43 
44 // some useful debugging functions
45 
46 void
47 pdarray( void* darray , int start, int end ) {
48     for( int i=start; i < end; i++ ){
49         cout << ((double*)darray)[i] << endl;
50     }
51 }
52 
53 void
54 piarray( void* iarray , int start, int end ) {
55     for( int i=start; i < end; i++ ){
56         cout << ((int*)iarray)[i] << endl;
57     }
58 }
59 
60 extern "C" int
61 phasta( int argc,
62         char *argv[] ) {
63 
64     int size,ierr;
65     char inpfilename[100];
66     char* pauseDebugger = getenv("catchDebugger");
67     //cout << "pauseDebugger" << pauseDebugger << endl;
68 
69     MPI_Init(&argc,&argv);
70     MPI_Comm_size (MPI_COMM_WORLD, &size);
71     MPI_Comm_rank (MPI_COMM_WORLD, &myrank);
72 
73     workfc.numpe = size;
74     workfc.myrank = myrank;
75 
76 #if (defined WIN32)
77     if(argc > 2 ){
78       catchDebugger();
79     }
80 #endif
81 #if (1) // ALWAYS ( defined LAUNCH_GDB ) && !( defined WIN32 )
82 
83     if ( pauseDebugger ) {
84 
85         int parent_pid = getpid();
86         int gdb_child = fork();
87         cout << "gdb_child" << gdb_child << endl;
88 
89         if( gdb_child == 0 ) {
90 
91             cout << "Debugger Process initiating" << endl;
92             std::stringstream exec_string;
93 
94 #if ( defined decalp )
95             exec_string <<"xterm -e idb "
96                         << " -pid "<< parent_pid <<" "<< argv[0] << endl;
97 #endif
98 #if ( defined LINUX )
99             exec_string <<"xterm -e gdb"
100                         << " -pid "<< parent_pid <<" "<< argv[0] << endl;
101 #endif
102 #if ( defined SUN4 )
103             exec_string <<"xterm -e dbx "
104                         << " - "<< parent_pid <<" "<< argv[0] << endl;
105 #endif
106 #if ( defined IRIX )
107             exec_string <<"xterm -e dbx "
108                         << " -p "<< parent_pid <<" "<< argv[0] << endl;
109 #endif
110             std::string s = exec_string.str();
111             system( s.c_str() );
112             exit(0);
113         }
114         catchDebugger();
115     }
116 
117 #endif
118 
119 //MR CHANGE
120         setIOparam();
121 //MR CHANGE END
122 
123         input();
124 //MR CHANGE
125 
126     MPI_Barrier(MPI_COMM_WORLD);
127     if ( myrank == 0 ) {
128       printf("phasta.cc - last call before finalize!\n");
129     }
130 //MR CHANGE
131 
132     MPI_Finalize();
133     return 0;
134 }
135