From 58d5b8f33f84df01eabd040456a86b96080b080b Mon Sep 17 00:00:00 2001 From: Dongryeol Lee Date: Wed, 12 Sep 2007 22:52:12 +0000 Subject: [PATCH] Added acceleration for TransFarToFar operator --- .../series_expansion/series_expansion.h | 18 +++++++++++++----- .../series_expansion/series_expansion_aux.h | 2 +- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/fastlib/u/dongryel/series_expansion/series_expansion.h b/fastlib/u/dongryel/series_expansion/series_expansion.h index d33c93bc43..76445659f4 100644 --- a/fastlib/u/dongryel/series_expansion/series_expansion.h +++ b/fastlib/u/dongryel/series_expansion/series_expansion.h @@ -513,6 +513,9 @@ void SeriesExpansion::TransFarToFar(const SeriesExpansion &se) { Vector prev_coeffs; Vector prev_center; const ArrayList < int > *multiindex_mapping = sea_->get_multiindex_mapping(); + const ArrayList < int > *lower_mapping_index = + sea_->get_lower_mapping_index(); + ArrayList tmp_storage; Vector center_diff; Vector inv_multiindex_factorials; @@ -544,9 +547,13 @@ void SeriesExpansion::TransFarToFar(const SeriesExpansion &se) { for(index_t j = 1; j < total_num_coeffs; j++) { ArrayList gamma_mapping = multiindex_mapping[j]; - - for(index_t k = 0; k <= j; k++) { - ArrayList inner_mapping = multiindex_mapping[k]; + ArrayList lower_mappings_for_gamma = lower_mapping_index[j]; + + for(index_t k = 0; k < lower_mappings_for_gamma.size(); k++) { + + ArrayList inner_mapping = + multiindex_mapping[lower_mappings_for_gamma[k]]; + int flag = 0; double diff1; @@ -571,8 +578,9 @@ void SeriesExpansion::TransFarToFar(const SeriesExpansion &se) { diff1 *= pow(center_diff[l] / sqrt_two_bandwidth, tmp_storage[l]); } - coeffs_[j] += prev_coeffs[k] * diff1 * - inv_multiindex_factorials[sea_->ComputeMultiindexPosition(tmp_storage)]; + coeffs_[j] += prev_coeffs[lower_mappings_for_gamma[k]] * diff1 * + inv_multiindex_factorials + [sea_->ComputeMultiindexPosition(tmp_storage)]; } // end of k-loop } // end of j-loop diff --git a/fastlib/u/dongryel/series_expansion/series_expansion_aux.h b/fastlib/u/dongryel/series_expansion/series_expansion_aux.h index 6cd601e77c..c5c96ce81b 100644 --- a/fastlib/u/dongryel/series_expansion/series_expansion_aux.h +++ b/fastlib/u/dongryel/series_expansion/series_expansion_aux.h @@ -50,7 +50,7 @@ class SeriesExpansionAux { ArrayList outer_mapping = multiindex_mapping_[i]; lower_mapping_index_[i].Init(); - for(index_t j = 0; j <= i; j++) { + for(index_t j = 0; j < list_total_num_coeffs_[max_order_]; j++) { ArrayList inner_mapping = multiindex_mapping_[j]; int flag = 0;