My Project
Functions
rotations Namespace Reference

Functions

template<unsigned int Precision>
void applyrotationsfromtheleft (bool isforward, int m1, int m2, int n1, int n2, const ap::template_1d_array< amp::ampf< Precision > > &c, const ap::template_1d_array< amp::ampf< Precision > > &s, ap::template_2d_array< amp::ampf< Precision > > &a, ap::template_1d_array< amp::ampf< Precision > > &work)
 
template<unsigned int Precision>
void applyrotationsfromtheright (bool isforward, int m1, int m2, int n1, int n2, const ap::template_1d_array< amp::ampf< Precision > > &c, const ap::template_1d_array< amp::ampf< Precision > > &s, ap::template_2d_array< amp::ampf< Precision > > &a, ap::template_1d_array< amp::ampf< Precision > > &work)
 
template<unsigned int Precision>
void generaterotation (amp::ampf< Precision > f, amp::ampf< Precision > g, amp::ampf< Precision > &cs, amp::ampf< Precision > &sn, amp::ampf< Precision > &r)
 

Function Documentation

◆ applyrotationsfromtheleft()

template<unsigned int Precision>
void rotations::applyrotationsfromtheleft ( bool  isforward,
int  m1,
int  m2,
int  n1,
int  n2,
const ap::template_1d_array< amp::ampf< Precision > > &  c,
const ap::template_1d_array< amp::ampf< Precision > > &  s,
ap::template_2d_array< amp::ampf< Precision > > &  a,
ap::template_1d_array< amp::ampf< Precision > > &  work 
)

Definition at line 100 of file rotations.h.

109  {
110  int j;
111  int jp1;
112  amp::ampf<Precision> ctemp;
113  amp::ampf<Precision> stemp;
115 
116 
117  if( m1>m2 || n1>n2 )
118  {
119  return;
120  }
121 
122  //
123  // Form P * A
124  //
125  if( isforward )
126  {
127  if( n1!=n2 )
128  {
129 
130  //
131  // Common case: N1<>N2
132  //
133  for(j=m1; j<=m2-1; j++)
134  {
135  ctemp = c(j-m1+1);
136  stemp = s(j-m1+1);
137  if( ctemp!=1 || stemp!=0 )
138  {
139  jp1 = j+1;
140  ap::vmove(work.getvector(n1, n2), a.getrow(jp1, n1, n2), ctemp);
141  ap::vsub(work.getvector(n1, n2), a.getrow(j, n1, n2), stemp);
142  ap::vmul(a.getrow(j, n1, n2), ctemp);
143  ap::vadd(a.getrow(j, n1, n2), a.getrow(jp1, n1, n2), stemp);
144  ap::vmove(a.getrow(jp1, n1, n2), work.getvector(n1, n2));
145  }
146  }
147  }
148  else
149  {
150 
151  //
152  // Special case: N1=N2
153  //
154  for(j=m1; j<=m2-1; j++)
155  {
156  ctemp = c(j-m1+1);
157  stemp = s(j-m1+1);
158  if( ctemp!=1 || stemp!=0 )
159  {
160  temp = a(j+1,n1);
161  a(j+1,n1) = ctemp*temp-stemp*a(j,n1);
162  a(j,n1) = stemp*temp+ctemp*a(j,n1);
163  }
164  }
165  }
166  }
167  else
168  {
169  if( n1!=n2 )
170  {
171 
172  //
173  // Common case: N1<>N2
174  //
175  for(j=m2-1; j>=m1; j--)
176  {
177  ctemp = c(j-m1+1);
178  stemp = s(j-m1+1);
179  if( ctemp!=1 || stemp!=0 )
180  {
181  jp1 = j+1;
182  ap::vmove(work.getvector(n1, n2), a.getrow(jp1, n1, n2), ctemp);
183  ap::vsub(work.getvector(n1, n2), a.getrow(j, n1, n2), stemp);
184  ap::vmul(a.getrow(j, n1, n2), ctemp);
185  ap::vadd(a.getrow(j, n1, n2), a.getrow(jp1, n1, n2), stemp);
186  ap::vmove(a.getrow(jp1, n1, n2), work.getvector(n1, n2));
187  }
188  }
189  }
190  else
191  {
192 
193  //
194  // Special case: N1=N2
195  //
196  for(j=m2-1; j>=m1; j--)
197  {
198  ctemp = c(j-m1+1);
199  stemp = s(j-m1+1);
200  if( ctemp!=1 || stemp!=0 )
201  {
202  temp = a(j+1,n1);
203  a(j+1,n1) = ctemp*temp-stemp*a(j,n1);
204  a(j,n1) = stemp*temp+ctemp*a(j,n1);
205  }
206  }
207  }
208  }
209  }
Definition: amp.h:82
raw_vector< T > getvector(int iStart, int iEnd)
Definition: ap.h:776
raw_vector< T > getrow(int iRow, int iColumnStart, int iColumnEnd)
Definition: ap.h:939
const CanonicalForm int s
Definition: facAbsFact.cc:51
int j
Definition: facHensel.cc:110
void vmove(raw_vector< T > vdst, const_raw_vector< T > vsrc)
Definition: ap.h:237
void vadd(raw_vector< T > vdst, const_raw_vector< T > vsrc)
Definition: ap.h:413
void vmul(raw_vector< T > vdst, T2 alpha)
Definition: ap.h:603
void vsub(raw_vector< T > vdst, const_raw_vector< T > vsrc)
Definition: ap.h:533

◆ applyrotationsfromtheright()

template<unsigned int Precision>
void rotations::applyrotationsfromtheright ( bool  isforward,
int  m1,
int  m2,
int  n1,
int  n2,
const ap::template_1d_array< amp::ampf< Precision > > &  c,
const ap::template_1d_array< amp::ampf< Precision > > &  s,
ap::template_2d_array< amp::ampf< Precision > > &  a,
ap::template_1d_array< amp::ampf< Precision > > &  work 
)

Definition at line 238 of file rotations.h.

247  {
248  int j;
249  int jp1;
250  amp::ampf<Precision> ctemp;
251  amp::ampf<Precision> stemp;
253 
254 
255 
256  //
257  // Form A * P'
258  //
259  if( isforward )
260  {
261  if( m1!=m2 )
262  {
263 
264  //
265  // Common case: M1<>M2
266  //
267  for(j=n1; j<=n2-1; j++)
268  {
269  ctemp = c(j-n1+1);
270  stemp = s(j-n1+1);
271  if( ctemp!=1 || stemp!=0 )
272  {
273  jp1 = j+1;
274  ap::vmove(work.getvector(m1, m2), a.getcolumn(jp1, m1, m2), ctemp);
275  ap::vsub(work.getvector(m1, m2), a.getcolumn(j, m1, m2), stemp);
276  ap::vmul(a.getcolumn(j, m1, m2), ctemp);
277  ap::vadd(a.getcolumn(j, m1, m2), a.getcolumn(jp1, m1, m2), stemp);
278  ap::vmove(a.getcolumn(jp1, m1, m2), work.getvector(m1, m2));
279  }
280  }
281  }
282  else
283  {
284 
285  //
286  // Special case: M1=M2
287  //
288  for(j=n1; j<=n2-1; j++)
289  {
290  ctemp = c(j-n1+1);
291  stemp = s(j-n1+1);
292  if( ctemp!=1 || stemp!=0 )
293  {
294  temp = a(m1,j+1);
295  a(m1,j+1) = ctemp*temp-stemp*a(m1,j);
296  a(m1,j) = stemp*temp+ctemp*a(m1,j);
297  }
298  }
299  }
300  }
301  else
302  {
303  if( m1!=m2 )
304  {
305 
306  //
307  // Common case: M1<>M2
308  //
309  for(j=n2-1; j>=n1; j--)
310  {
311  ctemp = c(j-n1+1);
312  stemp = s(j-n1+1);
313  if( ctemp!=1 || stemp!=0 )
314  {
315  jp1 = j+1;
316  ap::vmove(work.getvector(m1, m2), a.getcolumn(jp1, m1, m2), ctemp);
317  ap::vsub(work.getvector(m1, m2), a.getcolumn(j, m1, m2), stemp);
318  ap::vmul(a.getcolumn(j, m1, m2), ctemp);
319  ap::vadd(a.getcolumn(j, m1, m2), a.getcolumn(jp1, m1, m2), stemp);
320  ap::vmove(a.getcolumn(jp1, m1, m2), work.getvector(m1, m2));
321  }
322  }
323  }
324  else
325  {
326 
327  //
328  // Special case: M1=M2
329  //
330  for(j=n2-1; j>=n1; j--)
331  {
332  ctemp = c(j-n1+1);
333  stemp = s(j-n1+1);
334  if( ctemp!=1 || stemp!=0 )
335  {
336  temp = a(m1,j+1);
337  a(m1,j+1) = ctemp*temp-stemp*a(m1,j);
338  a(m1,j) = stemp*temp+ctemp*a(m1,j);
339  }
340  }
341  }
342  }
343  }
raw_vector< T > getcolumn(int iColumn, int iRowStart, int iRowEnd)
Definition: ap.h:931

◆ generaterotation()

template<unsigned int Precision>
void rotations::generaterotation ( amp::ampf< Precision >  f,
amp::ampf< Precision >  g,
amp::ampf< Precision > &  cs,
amp::ampf< Precision > &  sn,
amp::ampf< Precision > &  r 
)

Definition at line 355 of file rotations.h.

360  {
363 
364 
365  if( g==0 )
366  {
367  cs = 1;
368  sn = 0;
369  r = f;
370  }
371  else
372  {
373  if( f==0 )
374  {
375  cs = 0;
376  sn = 1;
377  r = g;
378  }
379  else
380  {
381  f1 = f;
382  g1 = g;
383  r = amp::sqrt<Precision>(amp::sqr<Precision>(f1)+amp::sqr<Precision>(g1));
384  cs = f1/r;
385  sn = g1/r;
386  if( amp::abs<Precision>(f)>amp::abs<Precision>(g) && cs<0 )
387  {
388  cs = -cs;
389  sn = -sn;
390  r = -r;
391  }
392  }
393  }
394  }
g
Definition: cfModGcd.cc:4092
FILE * f
Definition: checklibs.c:9