| 126 | |
| 127 | |
| 128 | void symmetricrank2update(ap::real_2d_array& a, |
| 129 | bool isupper, |
| 130 | int i1, |
| 131 | int i2, |
| 132 | const ap::real_1d_array& x, |
| 133 | const ap::real_1d_array& y, |
| 134 | ap::real_1d_array& t, |
| 135 | double alpha) |
| 136 | { |
| 137 | int i; |
| 138 | int tp1; |
| 139 | int tp2; |
| 140 | double v; |
| 141 | |
| 142 | if( isupper ) |
| 143 | { |
| 144 | for(i = i1; i <= i2; i++) |
| 145 | { |
| 146 | tp1 = i+1-i1; |
| 147 | tp2 = i2-i1+1; |
| 148 | v = x(i+1-i1); |
| 149 | ap::vmove(&t(tp1), 1, &y(tp1), 1, ap::vlen(tp1,tp2), v); |
| 150 | v = y(i+1-i1); |
| 151 | ap::vadd(&t(tp1), 1, &x(tp1), 1, ap::vlen(tp1,tp2), v); |
| 152 | ap::vmul(&t(tp1), 1, ap::vlen(tp1,tp2), alpha); |
| 153 | ap::vadd(&a(i, i), 1, &t(tp1), 1, ap::vlen(i,i2)); |
| 154 | } |
| 155 | } |
| 156 | else |
| 157 | { |
| 158 | for(i = i1; i <= i2; i++) |
| 159 | { |
| 160 | tp1 = 1; |
| 161 | tp2 = i+1-i1; |
| 162 | v = x(i+1-i1); |
| 163 | ap::vmove(&t(tp1), 1, &y(tp1), 1, ap::vlen(tp1,tp2), v); |
| 164 | v = y(i+1-i1); |
| 165 | ap::vadd(&t(tp1), 1, &x(tp1), 1, ap::vlen(tp1,tp2), v); |
| 166 | ap::vmul(&t(tp1), 1, ap::vlen(tp1,tp2), alpha); |
| 167 | ap::vadd(&a(i, i1), 1, &t(tp1), 1, ap::vlen(i1,i)); |
| 168 | } |
| 169 | } |
| 170 | } |
| 171 | |
| 172 | |
| 173 | |