Full_storage f (dim(), 2*s+1);
for (int i=0; i < dim(); i++)
{
- int k=-s;
- for (; k < -band_size_i(); k++)
- f.elem (i,k + s) = 0.0;
- for (; k <= band_size_i()&& k<=s ; k++)
- f.elem (i, k + s) = band_.elem (i,k+ band_size_i());
- for (; k <= s; k++)
- f.elem (i, k + s) =0.0;
+ int k=-s;
+ for (; k < -band_size_i(); k++)
+ f.elem (i,k + s) = 0.0;
+ for (; k <= band_size_i()&& k<=s ; k++)
+ f.elem (i, k + s) = band_.elem (i,k+ band_size_i());
+ for (; k <= s; k++)
+ f.elem (i, k + s) =0.0;
}
band_ = f;
Full_storage f (d, 2*band_size_i()+1);
for (int i=0; i < d && i < dim(); i++)
{
- for (int k=0; k < 2*band_size_i(); k++)
- f.elem (i,k) = elem (i,k);
+ for (int k=0; k < 2*band_size_i(); k++)
+ f.elem (i,k) = elem (i,k);
}
band_ = f;
{
j++;
if (j < i - band_size_i())
- j = i- band_size_i();
+ j = i- band_size_i();
if (j > i + band_size_i() || j >= dim ())
{
- i++;
- j = 0 >? i - band_size_i();
+ i++;
+ j = 0 >? i - band_size_i();
}
}
{
i++;
if (i < j - band_size_i())
- i = j-band_size_i();
+ i = j-band_size_i();
if (i >= dim() || i > j + band_size_i ())
{
- j++;
- i = 0 >? j - band_size_i();
+ j++;
+ i = 0 >? j - band_size_i();
}
}
Diagonal_storage::elem (int i, int j) const
{
if (abs (i-j) > band_size_i())
- return 0;
+ return 0;
else
- return band_.elem (i, j - i +band_size_i());
+ return band_.elem (i, j - i +band_size_i());
}
Real &
assert (!nul_entry);
if (abs (i-j) > band_size_i())
- return nul_entry;
+ return nul_entry;
else
- return band_.elem (i, j - i + band_size_i());
+ return band_.elem (i, j - i + band_size_i());
}
/*
bool
Diagonal_storage::try_right_multiply (Matrix_storage*dest,
- const Matrix_storage*right) const
+ const Matrix_storage*right) const
{
if (right->name() != Diagonal_storage::static_name ())
- return false;
+ return false;
const Diagonal_storage* right_diag = (Diagonal_storage const*)right;
int band2 = right_diag->band_size_i();
int n = dim();
/*
should check if dest is a Diagonal_storage of sufficient size too.
- */
+ */
for (int i=0; i < n; i++)
{
- for (int j = 0; j < n; j++)
- {
- int startk = i - band_size_i() >? 0 >? j - band2;
- int stopk = i + band_size_i() <? n-1 <? j + band2;
- int relk = startk + band_size_i() -i;
- Real sum =0.0;
- for (int k = startk; k <= stopk; k++)
- sum += band_.elem (i, relk++) * right_diag->elem (k, j);
- dest->elem (i, j) = sum;
+ for (int j = 0; j < n; j++)
+ {
+ int startk = i - band_size_i() >? 0 >? j - band2;
+ int stopk = i + band_size_i() <? n-1 <? j + band2;
+ int relk = startk + band_size_i() -i;
+ Real sum =0.0;
+ for (int k = startk; k <= stopk; k++)
+ sum += band_.elem (i, relk++) * right_diag->elem (k, j);
+ dest->elem (i, j) = sum;
- }
+ }
}
return true;
}
resize_dim (stor_l->dim());
for (int i=0,j=0; mult_ok (i,j); mult_next (i,j))
- band_.elem (i, j + band_i -i) = stor_l->elem (i,j);
+ band_.elem (i, j + band_i -i) = stor_l->elem (i,j);
}
void