cloudy  trunk
optimize.h
Go to the documentation of this file.
1 /* This file is part of Cloudy and is copyright (C)1978-2013 by Gary J. Ferland and
2  * others. For conditions of distribution and use see copyright notice in license.txt */
3 
4 #ifndef OPTIMIZE_H_
5 #define OPTIMIZE_H_
6 
7 #include "energy.h"
8 #include "flux.h"
9 
12 bool lgOptimize_do(void);
13 
17 void vary_input(bool *lgLimOK, int grid_index);
18 
33 void optimize_subplex(long int n,
34  double tol,
35  long int maxnfe,
36  long int mode,
37  realnum scale[],
38  realnum x[],
39  realnum *fx,
40  long int *nfe,
41  realnum work[],
42  long int iwork[],
43  long int *iflag);
44 
45 /*<NP->*/
47 const realnum VRSNEW = realnum(4.00);
48 
49 typedef double chi2_type;
50 
51 const chi2_type BIG_CHI2 = chi2_type(FLT_MAX);
52 
53 void optimize_phymir(realnum[],const realnum[],long,chi2_type*,realnum);
54 
56 chi2_type optimize_func(const realnum param[], int grid_index = -1);
57 
58 /* varypar.h */
60 const long LIMEXT = 5L;
61 const long LIMPAR = 20L;
62 
66 
67 // this struct is written straight to a binary file, so it should be
68 // self-contained and NOT contain any pointers to other data!
69 // this also implies that only POD types are allowed here
70 template<class X, class Y = X, int NP = 32, int NSTR = 32>
72 {
73  X p_xmax;
74  Y p_ymax;
75  X p_xp[2*NP+1][NP];
76  Y p_yp[2*NP+1];
77  X p_absmin[NP];
78  X p_absmax[NP];
79  X p_varmin[NP];
80  X p_varmax[NP];
81  X p_a2[NP][NP];
82  X p_c1[NP];
83  X p_c2[NP];
84  X p_xc[NP];
85  X p_xcold[NP];
86  X p_vers;
88  X p_dmax;
89  X p_dold;
90  Y p_ymin;
91  int32 p_dim;
92  int32 p_sdim;
93  int32 p_nvar;
94  int32 p_noptim;
95  int32 p_maxiter;
96  int32 p_jmin;
97  int32 p_maxcpu;
98  int32 p_curcpu;
100  char p_chState[NSTR];
101  char p_chStr1[NSTR];
102  char p_chStr2[NSTR];
103  char p_chStr3[NSTR];
104 
105  // ONLY data items BEFORE this item will be written to the state file
106  uint32 p_size;
107  Y (*p_func)(const X[],int);
108 
109  // private methods
110  void p_clear1();
111  void p_wr_state(const char*) const;
112  void p_rd_state(const char*);
113  Y p_execute_job( const X[], int, int );
114  // p_execute_job_parallel MUST be const, otherwise changes by child processes may be lost!
115  void p_execute_job_parallel( const X[], int, int ) const;
116  void p_barrier( int, int );
117  void p_process_output(int, int );
118  void p_evaluate_hyperblock();
120  void p_reset_hyperblock();
121  void p_phygrm( X[][NP], int );
122  bool p_lgLimitExceeded(const X[]) const;
123  X p_delta( int i, int j ) const { return ( i == j ) ? X(1.) : X(0.); }
125 
126 public:
127  // public methods, there should be no data here...
129  void clear() { p_clear1(); }
130  void init_minmax( const X[], const X[], int );
131  void init_state_file_name( const char* );
132  void init_strings( const char*, const char*, const char* );
133  void initial_run( Y (*)(const X[],int), int, const X[], const X[], X, int, phymir_mode, int );
134  void continue_from_state( Y (*)(const X[],int), int, const char*, X, int, phymir_mode, int );
135  void optimize();
136  void optimize_with_restart();
137  bool lgMaxIterExceeded() const { return ( p_noptim >= p_maxiter ); }
138  bool lgInitialized() const { return ( p_nvar > 0 ); }
139  bool lgConverged() const { return ( p_dmax <= p_toler ); }
140  bool lgConvergedRestart() const;
141  X xval( int i ) const { return p_xc[i]; }
142  X xmin( int i ) const { return max(p_varmin[i],p_absmin[i]); }
143  X xmax( int i ) const { return min(p_varmax[i],p_absmax[i]); }
144  Y yval() const { return p_ymin; }
145  int32 noptim() const { return p_noptim; }
146 };
147 
148 
170 struct t_optimize {
171 
173  bool lgVaryOn;
175  bool lgNoVary;
176 
178  bool lgOptimr;
179 
181 
185 
189 
192 
194  long int nvarxt[LIMPAR],
196 
199 
200  long int nvary,
203  bool lgVarOn;
204 
205  long int nIterOptim;
206 
208  vector<string> chColDen_label;
209  vector<long> ion_ColDen;
210  vector<realnum> ColDen_Obs;
211  vector<realnum> ColDen_error;
212 
215  vector<string> chLineLabel;
217  vector<realnum> wavelength;
219  vector<realnum> errorwave;
220  vector<long> ipobs;
221  vector<realnum> xLineInt_Obs;
222  vector<realnum> xLineInt_error;
223 
225  vector<string> chTempLab;
226  vector<long> ionTemp;
227  vector<realnum> temp_obs;
228  vector<realnum> temp_error;
229  vector<string> chTempWeight;
230 
232  bool lgOptDiam;
236 
238  vector<long> ContIndex;
239  vector<Energy> ContEner;
240  vector<Flux> ContNFnu;
241  vector<chi2_type> ContNFnuErr;
242 
244 
246  long int nOptimiz;
247 
251  long int nTrOpt;
252  bool lgTrOpt;
255  bool lgOptLum;
256  int nOptLum;
257 
260  bool lgOptCont;
261  long useCPU;
262 
264  char chOptRtn[5];
265 
266  double SavGenericData[10];
267 
268  };
269 extern t_optimize optimize;
270 
271 #endif /* OPTIMIZE_H_ */
t_optimize::nIterOptim
long int nIterOptim
Definition: optimize.h:205
t_optimize::temp_obs
vector< realnum > temp_obs
Definition: optimize.h:227
t_optimize::ipobs
vector< long > ipobs
Definition: optimize.h:220
phymir_state::p_varmin
X p_varmin[NP]
Definition: optimize.h:79
t_optimize::optier
realnum optier
Definition: optimize.h:250
phymir_state::yval
Y yval() const
Definition: optimize.h:144
t_optimize::ColDen_Obs
vector< realnum > ColDen_Obs
Definition: optimize.h:210
chOptimFileName
char chOptimFileName[INPUT_LINE_LENGTH]
Definition: optimize.cpp:6
t_optimize::vincr
realnum vincr[LIMPAR]
Definition: optimize.h:191
phymir_state::p_dmax
X p_dmax
Definition: optimize.h:88
phymir_state::p_reset_transformation_matrix
void p_reset_transformation_matrix()
Definition: optimize_phymir.cpp:474
phymir_state::lgInitialized
bool lgInitialized() const
Definition: optimize.h:138
phymir_state::p_maxiter
int32 p_maxiter
Definition: optimize.h:95
t_optimize::lgOptimr
bool lgOptimr
Definition: optimize.h:178
t_optimize::nparm
long int nparm
Definition: optimize.h:201
t_optimize::nOptimiz
long int nOptimiz
Definition: optimize.h:246
t_optimize::lgParallel
bool lgParallel
Definition: optimize.h:259
energy.h
phymir_state::p_rd_state
void p_rd_state(const char *)
Definition: optimize_phymir.cpp:109
phymir_state::xval
X xval(int i) const
Definition: optimize.h:141
phymir_state::p_nvar
int32 p_nvar
Definition: optimize.h:93
realnum
float realnum
Definition: cddefines.h:103
phymir_state::p_chStr2
char p_chStr2[NSTR]
Definition: optimize.h:102
phymir_state::p_absmin
X p_absmin[NP]
Definition: optimize.h:77
phymir_state::p_dold
X p_dold
Definition: optimize.h:89
t_optimize::lgNoVary
bool lgNoVary
Definition: optimize.h:175
phymir_state::p_yp
Y p_yp[2 *NP+1]
Definition: optimize.h:76
t_optimize::nOptLum
int nOptLum
Definition: optimize.h:256
t_optimize::lgVarOn
bool lgVarOn
Definition: optimize.h:203
t_optimize::lgOptimize
bool lgOptimize
Definition: optimize.h:253
phymir_state::p_evaluate_hyperblock
void p_evaluate_hyperblock()
Definition: optimize_phymir.cpp:265
phymir_state::p_xcold
X p_xcold[NP]
Definition: optimize.h:85
phymir_state::p_wr_state
void p_wr_state(const char *) const
Definition: optimize_phymir.cpp:88
LIMEXT
const long LIMEXT
Definition: optimize.h:60
PHYMIR_FORK
@ PHYMIR_FORK
Definition: optimize.h:65
phymir_state::p_varmax
X p_varmax[NP]
Definition: optimize.h:80
phymir_state::p_toler
X p_toler
Definition: optimize.h:87
phymir_state::p_clear1
void p_clear1()
Definition: optimize_phymir.cpp:34
VRSNEW
const realnum VRSNEW
Definition: optimize.h:47
PHYMIR_MPI
@ PHYMIR_MPI
Definition: optimize.h:65
t_optimize::chOptRtn
char chOptRtn[5]
Definition: optimize.h:264
lgOptimize_do
bool lgOptimize_do(void)
Definition: optimize_do.cpp:13
phymir_state::xmin
X xmin(int i) const
Definition: optimize.h:142
phymir_state::p_c1
X p_c1[NP]
Definition: optimize.h:82
phymir_state::p_ymin
Y p_ymin
Definition: optimize.h:90
t_optimize
Definition: optimize.h:170
phymir_state::p_setup_next_hyperblock
void p_setup_next_hyperblock()
Definition: optimize_phymir.cpp:296
phymir_state::p_chStr1
char p_chStr1[NSTR]
Definition: optimize.h:101
t_optimize::lgOptLum
bool lgOptLum
Definition: optimize.h:255
phymir_state::p_dim
int32 p_dim
Definition: optimize.h:91
phymir_state::optimize_with_restart
void optimize_with_restart()
Definition: optimize_phymir.cpp:640
t_optimize::nTrOpt
long int nTrOpt
Definition: optimize.h:251
phymir_state::p_ymax
Y p_ymax
Definition: optimize.h:74
phymir_state::p_c2
X p_c2[NP]
Definition: optimize.h:83
t_optimize::varmax
realnum varmax[LIMPAR]
Definition: optimize.h:183
t_optimize::OptIncrm
realnum OptIncrm[LIMPAR]
Definition: optimize.h:197
flux.h
phymir_mode
phymir_mode
Definition: optimize.h:65
t_optimize::vparm
realnum vparm[LIMEXT][LIMPAR]
Definition: optimize.h:188
t_optimize::chVarFmt
char chVarFmt[LIMPAR][FILENAME_PATH_LENGTH_2]
Definition: optimize.h:263
phymir_state::initial_run
void initial_run(Y(*)(const X[], int), int, const X[], const X[], X, int, phymir_mode, int)
Definition: optimize_phymir.cpp:526
phymir_state::p_phygrm
void p_phygrm(X[][NP], int)
Definition: optimize_phymir.cpp:432
t_optimize::ionTemp
vector< long > ionTemp
Definition: optimize.h:226
phymir_state::p_execute_job
Y p_execute_job(const X[], int, int)
Definition: optimize_phymir.cpp:128
BIG_CHI2
const chi2_type BIG_CHI2
Definition: optimize.h:51
phymir_state::p_reset_hyperblock
void p_reset_hyperblock()
Definition: optimize_phymir.cpp:414
phymir_state::clear
void clear()
Definition: optimize.h:129
phymir_state::p_process_output
void p_process_output(int, int)
Definition: optimize_phymir.cpp:244
chi2_type
double chi2_type
Definition: optimize.h:49
phymir_state::lgConvergedRestart
bool lgConvergedRestart() const
Definition: optimize_phymir.cpp:656
phymir_state::p_absmax
X p_absmax[NP]
Definition: optimize.h:78
t_optimize::errorwave
vector< realnum > errorwave
Definition: optimize.h:219
phymir_state::p_noptim
int32 p_noptim
Definition: optimize.h:94
t_optimize::lgOptCont
bool lgOptCont
Definition: optimize.h:260
t_optimize::nvarxt
long int nvarxt[LIMPAR]
Definition: optimize.h:194
phymir_state::p_jmin
int32 p_jmin
Definition: optimize.h:96
t_optimize::lgOptimFlow
bool lgOptimFlow
Definition: optimize.h:248
phymir_state::p_vers
X p_vers
Definition: optimize.h:86
phymir_state::continue_from_state
void continue_from_state(Y(*)(const X[], int), int, const char *, X, int, phymir_mode, int)
Definition: optimize_phymir.cpp:578
t_optimize::ion_ColDen
vector< long > ion_ColDen
Definition: optimize.h:209
t_optimize::chColDen_label
vector< string > chColDen_label
Definition: optimize.h:208
t_optimize::ContIndex
vector< long > ContIndex
Definition: optimize.h:238
phymir_state
Definition: optimize.h:71
t_optimize::ContNFnu
vector< Flux > ContNFnu
Definition: optimize.h:240
phymir_state::p_delta
X p_delta(int i, int j) const
Definition: optimize.h:123
PHYMIR_ILL
@ PHYMIR_ILL
Definition: optimize.h:65
phymir_state::xmax
X xmax(int i) const
Definition: optimize.h:143
t_optimize::nvary
long int nvary
Definition: optimize.h:200
t_optimize::ContNFnuErr
vector< chi2_type > ContNFnuErr
Definition: optimize.h:241
phymir_state::init_strings
void init_strings(const char *, const char *, const char *)
Definition: optimize_phymir.cpp:501
PHYMIR_SEQ
@ PHYMIR_SEQ
Definition: optimize.h:65
phymir_state::lgConverged
bool lgConverged() const
Definition: optimize.h:139
phymir_state::p_xc
X p_xc[NP]
Definition: optimize.h:84
phymir_state::p_curcpu
int32 p_curcpu
Definition: optimize.h:98
phymir_state::p_chStr3
char p_chStr3[NSTR]
Definition: optimize.h:103
t_optimize::xLineInt_Obs
vector< realnum > xLineInt_Obs
Definition: optimize.h:221
FILENAME_PATH_LENGTH_2
const int FILENAME_PATH_LENGTH_2
Definition: cddefines.h:249
t_optimize::lgVaryOn
bool lgVaryOn
Definition: optimize.h:173
t_optimize::varang
realnum varang[LIMPAR][2]
Definition: optimize.h:198
INPUT_LINE_LENGTH
const int INPUT_LINE_LENGTH
Definition: cddefines.h:254
t_optimize::optDiam
chi2_type optDiam
Definition: optimize.h:234
t_optimize::ContEner
vector< Energy > ContEner
Definition: optimize.h:239
t_optimize::OptGlobalErr
realnum OptGlobalErr
Definition: optimize.h:243
optimize
t_optimize optimize
Definition: optimize.cpp:5
min
long min(int a, long b)
Definition: cddefines.h:723
t_optimize::lgOptimizeAsLinear
bool lgOptimizeAsLinear[LIMPAR]
Definition: optimize.h:180
phymir_state::p_execute_job_parallel
void p_execute_job_parallel(const X[], int, int) const
Definition: optimize_phymir.cpp:178
phymir_state::p_sdim
int32 p_sdim
Definition: optimize.h:92
t_optimize::varmin
realnum varmin[LIMPAR]
Definition: optimize.h:184
LIMPAR
const long LIMPAR
Definition: optimize.h:61
t_optimize::chTempWeight
vector< string > chTempWeight
Definition: optimize.h:229
t_optimize::nvfpnt
long int nvfpnt[LIMPAR]
Definition: optimize.h:195
vary_input
void vary_input(bool *lgLimOK, int grid_index)
Definition: vary_input.cpp:11
optimize_func
chi2_type optimize_func(const realnum param[], int grid_index=-1)
Definition: optimize_func.cpp:20
t_optimize::SavGenericData
double SavGenericData[10]
Definition: optimize.h:266
phymir_state::optimize
void optimize()
Definition: optimize_phymir.cpp:623
phymir_state::noptim
int32 noptim() const
Definition: optimize.h:145
t_optimize::lgOptDiam
bool lgOptDiam
Definition: optimize.h:232
t_optimize::optDiamErr
chi2_type optDiamErr
Definition: optimize.h:235
optimize_phymir
void optimize_phymir(realnum[], const realnum[], long, chi2_type *, realnum)
t_optimize::lgDiamInCM
bool lgDiamInCM
Definition: optimize.h:233
phymir_state::p_xp
X p_xp[2 *NP+1][NP]
Definition: optimize.h:75
t_optimize::chTempLab
vector< string > chTempLab
Definition: optimize.h:225
t_optimize::nEmergent
int nEmergent
Definition: optimize.h:214
phymir_state::lgMaxIterExceeded
bool lgMaxIterExceeded() const
Definition: optimize.h:137
phymir_state::p_size
uint32 p_size
Definition: optimize.h:106
phymir_state::phymir_state
phymir_state()
Definition: optimize.h:128
phymir_state::p_mode
phymir_mode p_mode
Definition: optimize.h:99
phymir_state::p_chState
char p_chState[NSTR]
Definition: optimize.h:100
phymir_state::p_barrier
void p_barrier(int, int)
Definition: optimize_phymir.cpp:212
t_optimize::wavelength
vector< realnum > wavelength
Definition: optimize.h:217
t_optimize::lgTrOpt
bool lgTrOpt
Definition: optimize.h:252
phymir_state::p_a2
X p_a2[NP][NP]
Definition: optimize.h:81
t_optimize::ColDen_error
vector< realnum > ColDen_error
Definition: optimize.h:211
t_optimize::optint
realnum optint
Definition: optimize.h:249
phymir_state::p_func
Y(* p_func)(const X[], int)
Definition: optimize.h:107
t_optimize::temp_error
vector< realnum > temp_error
Definition: optimize.h:228
t_optimize::nRangeSet
long int nRangeSet
Definition: optimize.h:202
phymir_state::init_state_file_name
void init_state_file_name(const char *)
Definition: optimize_phymir.cpp:517
phymir_state::init_minmax
void init_minmax(const X[], const X[], int)
Definition: optimize_phymir.cpp:485
t_optimize::useCPU
long useCPU
Definition: optimize.h:261
optimize_subplex
void optimize_subplex(long int n, double tol, long int maxnfe, long int mode, realnum scale[], realnum x[], realnum *fx, long int *nfe, realnum work[], long int iwork[], long int *iflag)
Definition: optimize_subplx.cpp:64
phymir_state::p_xmax
X p_xmax
Definition: optimize.h:73
max
long max(int a, long b)
Definition: cddefines.h:775
t_optimize::xLineInt_error
vector< realnum > xLineInt_error
Definition: optimize.h:222
t_optimize::chLineLabel
vector< string > chLineLabel
Definition: optimize.h:215
phymir_state::p_maxcpu
int32 p_maxcpu
Definition: optimize.h:97
phymir_state::p_lgLimitExceeded
bool p_lgLimitExceeded(const X[]) const
Definition: optimize_phymir.cpp:459