void TripletHelper::FillValues_(Index n_entries, const SumSymMatrix& matrix, Number* values) { Index total_n_entries = 0; for (Index i=0; i<matrix.NTerms(); i++) { // Fill the values for the individual term Number retFactor = 0.0; SmartPtr<const SymMatrix> retTerm; matrix.GetTerm(i, retFactor, retTerm); Index term_n_entries = GetNumberEntries(*retTerm); total_n_entries += term_n_entries; if (retFactor!=0.0) { FillValues(term_n_entries, *retTerm, values); if (retFactor!=1.) { // Now adjust the values based on the factor IpBlasDscal(term_n_entries, retFactor, values, 1); } } else { const Number zero = 0.; IpBlasDcopy(term_n_entries, &zero, 0, values, 1); } // now shift the values pointer for the next term values += term_n_entries; } DBG_ASSERT(total_n_entries == n_entries); }
void DenseGenMatrix::ScaleColumns(const DenseVector& scal_vec) { DBG_ASSERT(scal_vec.Dim() == NCols()); DBG_ASSERT(initialized_); const Number* scal_values = scal_vec.Values(); for (Index j=0; j<NCols(); j++) { IpBlasDscal(NRows(), scal_values[j], &values_[j*NRows()], 1); } ObjectChanged(); }