44#include < string>
55#include < cmath>
66
7- #include < getopt.h>
8-
97#include " biorth1d.H"
108#include " SLGridMP2.H"
119#include " gaussQ.H"
1210#include " localmpi.H"
11+ #include " cxxopts.H"
1312
14- // ===========================================================================
15-
16- void usage (char *prog)
17- {
18- cout << " Usage:\n\n "
19- << prog << " [options]\n\n "
20- << setw (15 ) << " Option" << setw (10 ) << " Argument" << setw (10 ) << " "
21- << setiosflags (ios::left)
22- << setw (40 ) << " Description" << endl << endl
23- << resetiosflags (ios::left)
24- << setw (15 ) << " -m or --mpi" << setw (10 ) << " No" << setw (10 ) << " "
25- << setiosflags (ios::left)
26- << setw (40 ) << " Turn on MPI for SL computation" << endl
27- << resetiosflags (ios::left)
28- << setw (15 ) << " -t or --Trig" << setw (10 ) << " No" << setw (10 ) << " "
29- << setiosflags (ios::left)
30- << setw (40 ) << " Use trigonometric basis" << endl
31- << resetiosflags (ios::left)
32- << setw (15 ) << " -s or --SL" << setw (10 ) << " No" << setw (10 ) << " "
33- << setiosflags (ios::left)
34- << setw (40 ) << " Use Sturm-Liouville basis" << endl
35- << setw (15 ) << " -T or --type" << setw (10 ) << " string" << setw (10 ) << " "
36- << setiosflags (ios::left)
37- << setw (40 ) << " Density target (isothermal, constant, parabolic)" << endl
38- << resetiosflags (ios::left)
39- << setw (15 ) << " -n " << setw (10 ) << " int" << setw (10 ) << " "
40- << setiosflags (ios::left)
41- << setw (40 ) << " Number of basis functions" << endl
42- << resetiosflags (ios::left)
43- << setw (15 ) << " -H " << setw (10 ) << " double" << setw (10 ) << " "
44- << setiosflags (ios::left)
45- << setw (40 ) << " Slab scale height" << endl
46- << resetiosflags (ios::left)
47- << setw (15 ) << " -k " << setw (10 ) << " double" << setw (10 ) << " "
48- << setiosflags (ios::left)
49- << setw (40 ) << " Wave number for Trig basis" << endl
50- << resetiosflags (ios::left)
51- << setw (15 ) << " -x " << setw (10 ) << " double" << setw (10 ) << " "
52- << setiosflags (ios::left)
53- << setw (40 ) << " Wave number in X for SL basis" << endl
54- << resetiosflags (ios::left)
55- << setw (15 ) << " -y " << setw (10 ) << " double" << setw (10 ) << " "
56- << setiosflags (ios::left)
57- << setw (40 ) << " Wave number in Y for SL basis" << endl
58- << resetiosflags (ios::left)
59- << " " << endl;
60-
61- exit (0 );
62- }
6313
6414enum BioType1d {Trig, SL};
6515
6616int
6717main (int argc, char ** argv)
6818{
69- bool use_mpi = false ;
7019 double KX = 0.5 ;
7120 double H = 0.1 ;
7221 double ZMAX = 1.0 ;
7322 int NMAX = 10 ;
7423 int IKX = 1 ;
7524 int IKY = 3 ;
7625 BioType1d Type = Trig;
26+ std::string cachename = " .slab_sl_cache" ;
7727 std::string slabID = " iso" ;
28+ bool use_mpi = false ;
7829
79- int c;
80- while (1 ) {
81- int this_option_optind = optind ? optind : 1 ;
82- int option_index = 0 ;
83- static struct option long_options[] = {
84- {" mpi" , 0 , 0 , 0 },
85- {" Trig" , 0 , 0 , 0 },
86- {" SL" , 0 , 0 , 0 },
87- {0 , 0 , 0 , 0 }
88- };
89-
90- c = getopt_long (argc, argv, " msT:tx:y:k:n:z:H:h" ,
91- long_options, &option_index);
92-
93- if (c == -1 ) break ;
94-
95- switch (c) {
96- case 0 :
97- {
98- string optname (long_options[option_index].name );
99-
100- if (!optname.compare (" mpi" )) {
101- use_mpi = true ;
102- } else if (!optname.compare (" Trig" )) {
103- Type = Trig;
104- } else if (!optname.compare (" SL" )) {
105- Type = SL;
106- } else if (!optname.compare (" type" )) {
107- slabID = optarg;
108- } else {
109- cout << " Option " << long_options[option_index].name ;
110- if (optarg) cout << " with arg " << optarg;
111- cout << " is not defined " << endl;
112- exit (0 );
113- }
114- }
115- break ;
116-
117- case ' m' :
118- use_mpi = true ;
119- break ;
120-
121- case ' s' :
122- Type = SL;
123- break ;
124-
125- case ' T' :
126- slabID = optarg;
127- break ;
128-
129- case ' t' :
130- Type = Trig;
131- break ;
132-
133- case ' x' :
134- IKX = atoi (optarg);
135- break ;
136-
137- case ' y' :
138- IKY = atoi (optarg);
139- break ;
140-
141- case ' k' :
142- KX = atof (optarg);
143- break ;
144-
145- case ' z' :
146- ZMAX = atof (optarg);
147- break ;
148-
149- case ' H' :
150- H = atof (optarg);
151- break ;
152-
153- case ' n' :
154- NMAX = atoi (optarg);
155- break ;
156-
157- case ' h' :
158- default :
159- usage (argv[0 ]);
160- }
161-
30+ cxxopts::Options options (" orthochk" , " Check orthogonality of 1D basis functions" );
31+
32+ options.add_options ()
33+ (" m,mpi" , " Use MPI" )
34+ (" s,SL" , " Use Sturm-Liouville slab basis" )
35+ (" T,type" , " Slab type (iso, parabolic, or constant)" , cxxopts::value<std::string>())
36+ (" t,Trig" , " Use trigonometric basis" )
37+ (" x,ikx" , " IKX for SLGridSlab (default: 1)" , cxxopts::value<int >())
38+ (" y,iky" , " IKY for SLGridSlab (default: 3)" , cxxopts::value<int >())
39+ (" k,kx" , " KX for OneDTrig (default: 0.5)" , cxxopts::value<double >())
40+ (" z,zmax" , " ZMAX for OneDTrig and SLGridSlab (default: 1.0)" , cxxopts::value<double >())
41+ (" H,h" , " Scale height H for SLGridSlab (default: 0.1)" , cxxopts::value<double >())
42+ (" n,nmax" , " NMAX for SLGridSlab (default: 10)" , cxxopts::value<int >())
43+ (" c,cachename" , " Cache file name for SLGridSlab (default: .slab_sl_cache)" , cxxopts::value<std::string>())
44+ (" h,help" , " Print usage" );
45+
46+ auto result = options.parse (argc, argv);
47+
48+ if (result.count (" mpi" )) {
49+ local_init_mpi (argc, argv);
50+ use_mpi = true ;
16251 }
16352
164- // ===================
165- // MPI preliminaries
166- // ===================
167-
168- if (use_mpi) {
169- local_init_mpi (argc, argv);
53+ if (result.count (" help" )) {
54+ if (myid==0 )
55+ std::cout << options.help () << std::endl;
56+ return 0 ;
17057 }
17158
59+
17260 // ===================
17361 // Construct ortho
17462 // ===================
@@ -190,7 +78,7 @@ main(int argc, char** argv)
19078 SLGridSlab::H = H;
19179 if (use_mpi) SLGridSlab::mpi = 1 ;
19280
193- orthoSL = std::make_shared<SLGridSlab>(KMAX, NMAX, NUMZ, ZMAX, slabID, true );
81+ orthoSL = std::make_shared<SLGridSlab>(KMAX, NMAX, NUMZ, ZMAX, cachename, slabID, true );
19482 }
19583 break ;
19684
0 commit comments