1 /* _______________________________________________________________________
2
3 PECOS: Parallel Environment for Creation Of Stochastics
4 Copyright (c) 2011, Sandia National Laboratories.
5 This software is distributed under the GNU Lesser General Public License.
6 For more information, see the README file in the top Pecos directory.
7 _______________________________________________________________________ */
8
9 //- Class: PolynomialApproximation
10 //- Description: Implementation code for PolynomialApproximation class
11 //-
12 //- Owner: Mike Eldred
13
14 #include "PolynomialApproximation.hpp"
15 #include "BasisPolynomial.hpp"
16 #include "SparseGridDriver.hpp"
17 #include "NumericGenOrthogPolynomial.hpp"
18 #include "DiscrepancyCalculator.hpp"
19
20 //#define DEBUG
21
22
23 namespace Pecos {
24
compute_coefficients()25 void PolynomialApproximation::compute_coefficients()
26 {
27 if (!expansionCoeffFlag && !expansionCoeffGradFlag) {
28 PCerr << "Warning: neither expansion coefficients nor expansion "
29 << "coefficient gradients\n are active in Polynomial"
30 << "Approximation::compute_coefficients().\n Bypassing "
31 << "approximation construction." << std::endl;
32 return;
33 }
34
35 // update surrData (if active aggregation key)
36 synchronize_surrogate_data();
37
38 // For testing of anchor point logic:
39 //surrData.anchor_index(0); // treat 1st SDV,SDR as anchor point
40
41 // anchor point, if present, is handled differently for different
42 // expCoeffsSolnApproach settings:
43 // SAMPLING: treat it as another data point
44 // QUADRATURE/CUBATURE/*_SPARSE_GRID: error
45 // LEAST_SQ_REGRESSION: use equality-constrained least squares
46 if (!surrData.points()) {
47 PCerr << "Error: nonzero number of sample points required in Polynomial"
48 << "Approximation::compute_coefficients()." << std::endl;
49 abort_handler(-1);
50 }
51 }
52
53
synchronize_surrogate_data()54 void PolynomialApproximation::synchronize_surrogate_data()
55 {
56 std::shared_ptr<SharedPolyApproxData> data_rep =
57 std::static_pointer_cast<SharedPolyApproxData>(sharedDataRep);
58 const UShortArray& active_key = data_rep->activeKey;
59 if (active_key != surrData.active_key()) {
60 PCerr << "Error: active key mismatch in PolynomialApproximation::"
61 << "synchronize_surrogate_data()." << std::endl;
62 abort_handler(-1);
63 }
64
65 // level 0: surrData non-aggregated key stores raw data
66 short discrep_type = data_rep->expConfigOptions.discrepancyType,
67 combine_type = data_rep->expConfigOptions.combineType;
68 if (!discrep_type || !DiscrepancyCalculator::aggregated_key(active_key))
69 return;
70
71 switch (discrep_type) {
72 case RECURSIVE_DISCREP:
73 // When using a recursive discrepancy with additive/multiplicative corr,
74 // we will subtract/divide the current polynomial approx prediction from
75 // the new surrData so that we form an expansion on the surplus. Prior
76 // to using compute() to form the surplus, LF-hat must be generated and
77 // will be stored within surrData in a format that compute() can utilize.
78 generate_synthetic_data(surrData, active_key, combine_type);
79 break;
80 //case DISTINCT_DISCREP:
81 // When using a distinct discrepancy with additive/multiplicative corr,
82 // we will subtract/divide the HF,LF pairs. In this case, the data is
83 // already provided within surrData and specific pairings are identified
84 // by data groups.
85 }
86 // now compute the discrepancy between {HF,LF} or {HF,LF-hat} datasets
87 DiscrepancyCalculator::compute(surrData, active_key, combine_type);
88 }
89
90
91 /** Compute the combined expansion prediction that corresponds to new surrData,
92 prior to forming an expansion on the difference (surplus). */
93 void PolynomialApproximation::
generate_synthetic_data(SurrogateData & surr_data,const UShortArray & active_key,short combine_type)94 generate_synthetic_data(SurrogateData& surr_data, const UShortArray& active_key,
95 short combine_type)
96 {
97 // generate synthetic low-fidelity data at the high-fidelity points
98 // and store within surr_data[lf_hat_key] where lf_hat_key is the trailing
99 // portion of active_key. This synthetic data then enables the computation
100 // and emulation of a recursive discrepancy from hf - lf_hat differences
101 // (surpluses) at the high-fidelity points
102 UShortArray hf_key, lf0_key, lf_hat_key; // LF-hat in surplus case
103 DiscrepancyCalculator::extract_keys(active_key, hf_key, lf_hat_key);
104 lf0_key = surr_data.filtered_key(RAW_DATA_FILTER, 0);
105
106 // initialize surr_data[lf_hat_key]
107 surr_data.active_key(lf_hat_key); // active key restored at fn end
108 surr_data.variables_data(surr_data.variables_data(hf_key)); // shallow copies
109 surr_data.anchor_index(surr_data.anchor_index(hf_key));
110 surr_data.pop_count_stack(surr_data.pop_count_stack(hf_key));
111
112 const SDRArray& hf_sdr_array = surr_data.response_data(hf_key);
113 surr_data.size_active_sdr(hf_sdr_array); // size lf_hat_sdr_array
114 const SDVArray& sdv_array = surr_data.variables_data();
115 SDRArray& lf_hat_sdr_array = surr_data.response_data();
116
117 // extract all discrepancy data sets (which have expansions supporting
118 // stored_{value,gradient} evaluations)
119 const std::map<UShortArray, SDRArray>& discrep_resp_map
120 = surr_data.filtered_response_data_map(AGGREGATED_DATA_FILTER);
121 std::map<UShortArray, SDRArray>::const_iterator cit;
122 size_t i, num_pts = hf_sdr_array.size();
123 switch (combine_type) {
124 case MULT_COMBINE: {
125 Real stored_val, fn_val_j, fn_val_jm1;
126 RealVector fn_grad_j, fn_grad_jm1;
127 size_t j, k, num_deriv_vars = surr_data.num_derivative_variables();
128 for (i=0; i<num_pts; ++i) {
129 const RealVector& c_vars = sdv_array[i].continuous_variables();
130 SurrogateDataResp& lf_hat_sdr = lf_hat_sdr_array[i];
131 short lf_hat_bits = lf_hat_sdr.active_bits();
132 // start from emulation of lowest fidelity QoI (LF-hat)
133 fn_val_j = stored_value(c_vars, lf0_key); // coarsest fn
134 if (lf_hat_bits & 2) // coarsest grad
135 fn_grad_j = stored_gradient_nonbasis_variables(c_vars, lf0_key);
136 // augment w/ emulation of discrepancies (Delta-hat) preceding active_key
137 for (cit = discrep_resp_map.begin(), j=0;
138 cit->first != active_key; ++cit, ++j) {
139 stored_val = stored_value(c_vars, cit->first); // Delta-hat
140 if (lf_hat_bits & 2) { // recurse using levels j and j-1
141 const RealVector& stored_grad // discrepancy gradient-hat
142 = stored_gradient_nonbasis_variables(c_vars, cit->first);
143 fn_val_jm1 = fn_val_j; fn_grad_jm1 = fn_grad_j;
144 for (k=0; k<num_deriv_vars; ++k) // grad corrected to level j
145 fn_grad_j[k] = ( fn_grad_jm1[k] * stored_val +
146 fn_val_jm1 * stored_grad[k] );
147 }
148 fn_val_j *= stored_val; // fn corrected to level j
149 }
150 if (lf_hat_bits & 1)
151 lf_hat_sdr.response_function(fn_val_j);
152 if (lf_hat_bits & 2)
153 lf_hat_sdr.response_gradient(fn_grad_j);
154 }
155 break;
156 }
157 default: { //case ADD_COMBINE: (correction specification not required)
158 Real sum_val; RealVector sum_grad;
159 for (i=0; i<num_pts; ++i) {
160 const RealVector& c_vars = sdv_array[i].continuous_variables();
161 SurrogateDataResp& lf_hat_sdr = lf_hat_sdr_array[i];
162 short lf_hat_bits = lf_hat_sdr.active_bits();
163 if (lf_hat_bits & 1) {
164 sum_val = stored_value(c_vars, lf0_key);
165 for (cit = discrep_resp_map.begin(); cit->first != active_key; ++cit)
166 sum_val += stored_value(c_vars, cit->first);
167 lf_hat_sdr.response_function(sum_val);
168 }
169 if (lf_hat_bits & 2) {
170 sum_grad = stored_gradient_nonbasis_variables(c_vars, lf0_key);
171 for (cit = discrep_resp_map.begin(); cit->first != active_key; ++cit)
172 sum_grad += stored_gradient_nonbasis_variables(c_vars, cit->first);
173 lf_hat_sdr.response_gradient(sum_grad);
174 }
175 }
176 break;
177 }
178 }
179
180 surr_data.active_key(active_key); // restore
181 }
182
183
combined_to_active(bool clear_combined)184 void PolynomialApproximation::combined_to_active(bool clear_combined)
185 {
186 allocate_component_sobol(); // size sobolIndices from shared sobolIndexMap
187
188 // migrate moments
189 primaryMeanIter->second = combinedMeanBits;
190 primaryVarIter->second = combinedVarBits;
191 std::shared_ptr<SharedPolyApproxData> data_rep =
192 std::static_pointer_cast<SharedPolyApproxData>(sharedDataRep);
193 if (!data_rep->nonRandomIndices.empty()) {
194 const UShortArray& key = data_rep->activeKey;
195 xPrevMean[key] = xPrevCombMean;
196 xPrevVar[key] = xPrevCombVar;
197 }
198 if (clear_combined) {
199 primaryMomIter->second.swap(combinedMoments);
200 combinedMoments.resize(0);
201 clear_combined_bits();
202 }
203 else
204 primaryMomIter->second = combinedMoments; // deep copy
205 }
206
207
208 void PolynomialApproximation::
compute_moments(bool full_stats,bool combined_stats)209 compute_moments(bool full_stats, bool combined_stats)
210 {
211 // default for standard variables mode (2 moments for both full and
212 // intermediate stats) is specialized by {Interp,ProjectOrthog}PolyApprox
213
214 if (combined_stats) {
215 if (combinedMoments.length() != 2) combinedMoments.resize(2);
216 combined_mean(); combined_variance();
217 }
218 else {
219 RealVector& mom1 = primaryMomIter->second;
220 if (mom1.length() != 2) mom1.sizeUninitialized(2);
221 mean(); variance();
222 //standardize_moments(mom1);
223
224 if (!full_stats && !secondaryMoments.empty()) secondaryMoments.resize(0);
225 }
226 }
227
228
229 void PolynomialApproximation::
compute_moments(const RealVector & x,bool full_stats,bool combined_stats)230 compute_moments(const RealVector& x, bool full_stats, bool combined_stats)
231 {
232 // default for all variables mode (2 moments) is specialized by ...
233
234 if (combined_stats) {
235 if (combinedMoments.length() != 2) combinedMoments.resize(2);
236 combined_mean(x); combined_variance(x);
237 }
238 else {
239 RealVector& mom1 = primaryMomIter->second;
240 if (mom1.length() != 2) mom1.sizeUninitialized(2);
241 mean(x); variance(x);
242 //standardize_moments(mom1);
243
244 if (!full_stats && !secondaryMoments.empty()) secondaryMoments.resize(0);
245 }
246 }
247
248
249 void PolynomialApproximation::
integrate_moments(const RealVector & coeffs,const RealVector & t1_wts,RealVector & moments)250 integrate_moments(const RealVector& coeffs, const RealVector& t1_wts,
251 RealVector& moments)
252 {
253 // computes and stores the following moments:
254 // > mean (1st raw moment)
255 // > variance (2nd central moment)
256 // > skewness (3rd standardized moment)
257 // > kurtosis (4th standardized moment with offset to eliminate "excess")
258
259 // current support for this implementation: can't be open-ended since we
260 // employ a specific combination of raw, central, and standardized moments
261 size_t num_moments = moments.length();
262 if (num_moments < 1 || num_moments > 4) {
263 PCerr << "Error: unsupported number of moments requested in Polynomial"
264 << "Approximation::integrate_moments()" << std::endl;
265 abort_handler(-1);
266 }
267 size_t i, j, num_pts = coeffs.length();
268 if (t1_wts.length() != num_pts) {
269 PCerr << "Error: mismatch in array lengths between integration driver "
270 << "weights (" << t1_wts.length() << ") and coefficients (" << num_pts
271 << ") in PolynomialApproximation::integrate_moments()." << std::endl;
272 abort_handler(-1);
273 }
274
275 #ifdef DEBUG
276 PCout << "Coeffs in integrate_moments():\n" << coeffs
277 << "Weights in integrate_moments():\n" << t1_wts;
278 #endif
279
280 // estimate 1st raw moment (mean)
281 moments = 0.;
282 Real& mean = moments[0];
283 for (i=0; i<num_pts; ++i)
284 mean += t1_wts[i] * coeffs[i];
285
286 // estimate central moments 2 through num_moments
287 if (num_moments > 1) {
288 Real centered_fn, pow_fn;
289 for (i=0; i<num_pts; ++i) {
290 pow_fn = centered_fn = coeffs[i] - mean;
291 for (j=1; j<num_moments; ++j) {
292 pow_fn *= centered_fn;
293 moments[j] += t1_wts[i] * pow_fn;
294 }
295 }
296 }
297
298 // standardize third and higher central moments, if present
299 //standardize_moments(moments);
300 }
301
302
303 void PolynomialApproximation::
integrate_moments(const RealVector & t1_coeffs,const RealMatrix & t2_coeffs,const RealVector & t1_wts,const RealMatrix & t2_wts,RealVector & moments)304 integrate_moments(const RealVector& t1_coeffs, const RealMatrix& t2_coeffs,
305 const RealVector& t1_wts, const RealMatrix& t2_wts,
306 RealVector& moments)
307 {
308 // computes and stores the following moments:
309 // > mean (1st raw moment)
310 // > variance (2nd central moment)
311 // > skewness (3rd standardized moment)
312 // > kurtosis (4th standardized moment with offset to eliminate "excess")
313
314 // current support for this implementation: can't be open-ended since we
315 // employ a specific combination of raw, central, and standardized moments
316 size_t num_moments = moments.length();
317 if (num_moments < 1 || num_moments > 4) {
318 PCerr << "Error: unsupported number of moments requested in Polynomial"
319 << "Approximation::integrate_moments()" << std::endl;
320 abort_handler(-1);
321 }
322 size_t i, j, k, num_pts = t1_coeffs.length(), num_v = sharedDataRep->numVars;
323 if (t1_wts.length() != num_pts || t2_wts.numCols() != num_pts ||
324 t2_coeffs.numCols() != num_pts) {
325 PCerr << "Error: mismatch in array lengths among integration driver "
326 << "weights (" << t1_wts.length() << ", " << t2_wts.numCols()
327 << ") and coefficients (" << num_pts << ", " << t2_coeffs.numCols()
328 << ") in PolynomialApproximation::integrate_moments()." << std::endl;
329 abort_handler(-1);
330 }
331
332 // estimate 1st raw moment (mean)
333 moments = 0.;
334 Real& mean = moments[0];
335 for (i=0; i<num_pts; ++i) {
336 mean += t1_wts[i] * t1_coeffs[i];
337 const Real* coeff2_i = t2_coeffs[i];
338 const Real* t2_wt_i = t2_wts[i];
339 for (j=0; j<num_v; ++j)
340 mean += coeff2_i[j] * t2_wt_i[j];
341 }
342
343 // estimate central moments 2 through num_moments
344 if (num_moments > 1) {
345 Real centered_fn, pow_fn;
346 for (i=0; i<num_pts; ++i) {
347 pow_fn = centered_fn = t1_coeffs[i] - mean;
348 const Real* coeff2_i = t2_coeffs[i];
349 const Real* t2_wt_i = t2_wts[i];
350 for (j=1; j<num_moments; ++j) {
351 Real& moment_j = moments[j];
352 // type2 interpolation of (R - \mu)^n
353 // --> interpolated gradients are n(R - \mu)^{n-1} dR/dx
354 for (k=0; k<num_v; ++k)
355 moment_j += (j+1) * pow_fn * coeff2_i[k] * t2_wt_i[k];
356 // type 1 interpolation of (R - \mu)^n
357 pow_fn *= centered_fn;
358 moment_j += t1_wts[i] * pow_fn;
359 }
360 }
361 }
362
363 // convert central moments to std deviation/skewness/kurtosis
364 //standardize_moments(moments);
365 }
366
367
368 void PolynomialApproximation::
standardize_moments(const RealVector & central_moments,RealVector & std_moments)369 standardize_moments(const RealVector& central_moments, RealVector& std_moments)
370 {
371 size_t num_moments = central_moments.length();
372 std_moments.sizeUninitialized(num_moments);
373 if (num_moments >= 1) std_moments[0] = central_moments[0]; // mean
374 if (num_moments < 2) return;
375
376 const Real& var = central_moments[1];
377 Real& std_dev = std_moments[1];
378 if (var > 0.) {
379 // standardized moment k is E[((X-mu)/sigma)^k] = E[(X-mu)^k]/sigma^k
380 std_dev = std::sqrt(var); // not standardized (2nd standardized moment is 1)
381 Real pow_fn = var;
382 for (size_t i=2; i<num_moments; ++i)
383 { pow_fn *= std_dev; std_moments[i] = central_moments[i] / pow_fn; }
384 // offset the fourth standardized moment to eliminate excess kurtosis
385 if (num_moments > 3)
386 std_moments[3] -= 3.;
387 }
388 else {
389 // don't leave uninitialized, even if undefined
390 for (size_t i=1; i<num_moments; ++i)
391 std_moments[i] = 0.;
392 // special case of zero variance is OK for num_moments == 2, but not higher
393 if ( !(num_moments == 2 && var == 0.) ) // std_dev OK for var == 0.
394 PCerr << "Warning: moments cannot be standardized due to non-positive "
395 << "variance.\n Skipping standardization." << std::endl;
396 }
397 }
398
399
allocate_component_sobol()400 void PolynomialApproximation::allocate_component_sobol()
401 {
402 std::shared_ptr<SharedPolyApproxData> data_rep =
403 std::static_pointer_cast<SharedPolyApproxData>(sharedDataRep);
404 size_t sobol_len = data_rep->sobolIndexMap.size();
405 if (sobolIndices.length() != sobol_len)
406 sobolIndices.sizeUninitialized(sobol_len);
407 }
408
409
allocate_total_sobol()410 void PolynomialApproximation::allocate_total_sobol()
411 {
412 // number of total indices independent of number of component indices
413 std::shared_ptr<SharedPolyApproxData> data_rep =
414 std::static_pointer_cast<SharedPolyApproxData>(sharedDataRep);
415 if (totalSobolIndices.empty() && expansionCoeffFlag &&
416 data_rep->expConfigOptions.vbdFlag)
417 totalSobolIndices.sizeUninitialized(sharedDataRep->numVars);
418 }
419
420
421 void PolynomialApproximation::
initialize_covariance(PolynomialApproximation * poly_approx_2)422 initialize_covariance(PolynomialApproximation* poly_approx_2)
423 { } // default is no-op
424
425
clear_covariance_pointers()426 void PolynomialApproximation::clear_covariance_pointers()
427 { } // default is no-op
428
429
initialize_products()430 void PolynomialApproximation::initialize_products()
431 { } // default is no-op
432
433
product_interpolants()434 bool PolynomialApproximation::product_interpolants()
435 { return false; } // default
436
437
sparse_sobol_index_map() const438 ULongULongMap PolynomialApproximation::sparse_sobol_index_map() const
439 { return ULongULongMap(); } // default is empty map
440
441
expansion_terms() const442 size_t PolynomialApproximation::expansion_terms() const
443 {
444 PCerr << "Error: expansion_terms() not defined for this polynomial "
445 << "approximation type." << std::endl;
446 abort_handler(-1);
447 return _NPOS;
448 }
449
450
combined_mean()451 Real PolynomialApproximation::combined_mean()
452 {
453 PCerr << "Error: combined_mean() not available for this polynomial "
454 << "approximation type." << std::endl;
455 abort_handler(-1);
456 return 0.;
457 }
458
459
combined_mean(const RealVector & x)460 Real PolynomialApproximation::combined_mean(const RealVector& x)
461 {
462 PCerr << "Error: combined_mean() not available for this polynomial "
463 << "approximation type." << std::endl;
464 abort_handler(-1);
465 return 0.;
466 }
467
468
469 Real PolynomialApproximation::
combined_covariance(PolynomialApproximation * poly_approx_2)470 combined_covariance(PolynomialApproximation* poly_approx_2)
471 {
472 PCerr << "Error: combined_covariance() not available for this polynomial "
473 << "approximation type." << std::endl;
474 abort_handler(-1);
475 return 0.;
476 }
477
478
479 Real PolynomialApproximation::
combined_covariance(const RealVector & x,PolynomialApproximation * poly_approx_2)480 combined_covariance(const RealVector& x, PolynomialApproximation* poly_approx_2)
481 {
482 PCerr << "Error: combined_covariance() not available for this polynomial "
483 << "approximation type." << std::endl;
484 abort_handler(-1);
485 return 0.;
486 }
487
488
beta(bool cdf_flag,Real z_bar)489 Real PolynomialApproximation::beta(bool cdf_flag, Real z_bar)
490 {
491 PCerr << "Error: beta() not available for this polynomial approximation type."
492 << std::endl;
493 abort_handler(-1);
494 return 0.;
495 }
496
497
498 Real PolynomialApproximation::
beta(const RealVector & x,bool cdf_flag,Real z_bar)499 beta(const RealVector& x, bool cdf_flag, Real z_bar)
500 {
501 PCerr << "Error: beta(x) not available for this polynomial approximation "
502 << "type." << std::endl;
503 abort_handler(-1);
504 return 0.;
505 }
506
507
combined_beta(bool cdf_flag,Real z_bar)508 Real PolynomialApproximation::combined_beta(bool cdf_flag, Real z_bar)
509 {
510 PCerr << "Error: combined_beta() not available for this polynomial "
511 << "approximation type." << std::endl;
512 abort_handler(-1);
513 return 0.;
514 }
515
516
517 Real PolynomialApproximation::
combined_beta(const RealVector & x,bool cdf_flag,Real z_bar)518 combined_beta(const RealVector& x, bool cdf_flag, Real z_bar)
519 {
520 PCerr << "Error: combined_beta(x) not available for this polynomial "
521 << "approximation type." << std::endl;
522 abort_handler(-1);
523 return 0.;
524 }
525
526
delta_mean()527 Real PolynomialApproximation::delta_mean()
528 {
529 PCerr << "Error: delta_mean() not available for this polynomial "
530 << "approximation type." << std::endl;
531 abort_handler(-1);
532 return 0.;
533 }
534
535
delta_mean(const RealVector & x)536 Real PolynomialApproximation::delta_mean(const RealVector& x)
537 {
538 PCerr << "Error: delta_mean(x) not available for this polynomial "
539 << "approximation type." << std::endl;
540 abort_handler(-1);
541 return 0.;
542 }
543
544
delta_combined_mean()545 Real PolynomialApproximation::delta_combined_mean()
546 {
547 PCerr << "Error: delta_combined_mean() not available for this polynomial "
548 << "approximation type." << std::endl;
549 abort_handler(-1);
550 return 0.;
551 }
552
553
delta_combined_mean(const RealVector & x)554 Real PolynomialApproximation::delta_combined_mean(const RealVector& x)
555 {
556 PCerr << "Error: delta_combined_mean(x) not available for this polynomial "
557 << "approximation type." << std::endl;
558 abort_handler(-1);
559 return 0.;
560 }
561
562
delta_std_deviation()563 Real PolynomialApproximation::delta_std_deviation()
564 {
565 PCerr << "Error: delta_std_deviation() not available for this polynomial "
566 << "approximation type." << std::endl;
567 abort_handler(-1);
568 return 0.;
569 }
570
571
delta_std_deviation(const RealVector & x)572 Real PolynomialApproximation::delta_std_deviation(const RealVector& x)
573 {
574 PCerr << "Error: delta_std_deviation(x) not available for this polynomial "
575 << "approximation type." << std::endl;
576 abort_handler(-1);
577 return 0.;
578 }
579
580
delta_combined_std_deviation()581 Real PolynomialApproximation::delta_combined_std_deviation()
582 {
583 PCerr << "Error: delta_combined_std_deviation() not available for this "
584 << "polynomial approximation type." << std::endl;
585 abort_handler(-1);
586 return 0.;
587 }
588
589
delta_combined_std_deviation(const RealVector & x)590 Real PolynomialApproximation::delta_combined_std_deviation(const RealVector& x)
591 {
592 PCerr << "Error: delta_combined_std_deviation(x) not available for this "
593 << "polynomial approximation type." << std::endl;
594 abort_handler(-1);
595 return 0.;
596 }
597
598
599 Real PolynomialApproximation::
delta_covariance(PolynomialApproximation * poly_approx_2)600 delta_covariance(PolynomialApproximation* poly_approx_2)
601 {
602 PCerr << "Error: delta_covariance() not available for this polynomial "
603 << "approximation type." << std::endl;
604 abort_handler(-1);
605 return 0.;
606 }
607
608
609 Real PolynomialApproximation::
delta_covariance(const RealVector & x,PolynomialApproximation * poly_approx_2)610 delta_covariance(const RealVector& x, PolynomialApproximation* poly_approx_2)
611 {
612 PCerr << "Error: delta_covariance() not available for this polynomial "
613 << "approximation type." << std::endl;
614 abort_handler(-1);
615 return 0.;
616 }
617
618
619 Real PolynomialApproximation::
delta_combined_covariance(PolynomialApproximation * poly_approx_2)620 delta_combined_covariance(PolynomialApproximation* poly_approx_2)
621 {
622 PCerr << "Error: delta_combined_covariance() not available for this "
623 << "polynomial approximation type." << std::endl;
624 abort_handler(-1);
625 return 0.;
626 }
627
628
629 Real PolynomialApproximation::
delta_combined_covariance(const RealVector & x,PolynomialApproximation * poly_approx_2)630 delta_combined_covariance(const RealVector& x,
631 PolynomialApproximation* poly_approx_2)
632 {
633 PCerr << "Error: delta_combined_covariance() not available for this "
634 << "polynomial approximation type." << std::endl;
635 abort_handler(-1);
636 return 0.;
637 }
638
639
delta_beta(bool cdf_flag,Real z_bar)640 Real PolynomialApproximation::delta_beta(bool cdf_flag, Real z_bar)
641 {
642 PCerr << "Error: delta_beta() not available for this polynomial "
643 << "approximation type." << std::endl;
644 abort_handler(-1);
645 return 0.;
646 }
647
648
649 Real PolynomialApproximation::
delta_beta(const RealVector & x,bool cdf_flag,Real z_bar)650 delta_beta(const RealVector& x, bool cdf_flag, Real z_bar)
651 {
652 PCerr << "Error: delta_beta(x) not available for this polynomial "
653 << "approximation type." << std::endl;
654 abort_handler(-1);
655 return 0.;
656 }
657
658
delta_z(bool cdf_flag,Real beta_bar)659 Real PolynomialApproximation::delta_z(bool cdf_flag, Real beta_bar)
660 {
661 PCerr << "Error: delta_z() not available for this polynomial approximation "
662 << "type." << std::endl;
663 abort_handler(-1);
664 return 0.;
665 }
666
667
668 Real PolynomialApproximation::
delta_z(const RealVector & x,bool cdf_flag,Real beta_bar)669 delta_z(const RealVector& x, bool cdf_flag, Real beta_bar)
670 {
671 PCerr << "Error: delta_z(x) not available for this polynomial approximation "
672 << "type." << std::endl;
673 abort_handler(-1);
674 return 0.;
675 }
676
677
delta_combined_beta(bool cdf_flag,Real z_bar)678 Real PolynomialApproximation::delta_combined_beta(bool cdf_flag, Real z_bar)
679 {
680 PCerr << "Error: delta_combined_beta() not available for this polynomial "
681 << "approximation type." << std::endl;
682 abort_handler(-1);
683 return 0.;
684 }
685
686
687 Real PolynomialApproximation::
delta_combined_beta(const RealVector & x,bool cdf_flag,Real z_bar)688 delta_combined_beta(const RealVector& x, bool cdf_flag, Real z_bar)
689 {
690 PCerr << "Error: delta_combined_beta(x) not available for this polynomial "
691 << "approximation type." << std::endl;
692 abort_handler(-1);
693 return 0.;
694 }
695
696
delta_combined_z(bool cdf_flag,Real beta_bar)697 Real PolynomialApproximation::delta_combined_z(bool cdf_flag, Real beta_bar)
698 {
699 PCerr << "Error: delta_combined_z() not available for this polynomial "
700 << "approximation type." << std::endl;
701 abort_handler(-1);
702 return 0.;
703 }
704
705
706 Real PolynomialApproximation::
delta_combined_z(const RealVector & x,bool cdf_flag,Real beta_bar)707 delta_combined_z(const RealVector& x, bool cdf_flag, Real beta_bar)
708 {
709 PCerr << "Error: delta_combined_z(x) not available for this polynomial "
710 << "approximation type." << std::endl;
711 abort_handler(-1);
712 return 0.;
713 }
714
715 } // namespace Pecos
716