95e62dd88b3c375ec49738563a00b9d0c031cbb2
[alexxy/gromacs.git] / src / gmxlib / gmx_lapack / slamrg.c
1 #include "gmx_lapack.h"
2
3
4 /* LAPACK */
5
6
7 void
8 F77_FUNC(slamrg,SLAMRG)(int *n1,
9                         int *n2,
10                         float *a,
11                         int *dtrd1,
12                         int *dtrd2,
13                         int *index)
14 {
15   int n1sv = *n1;
16   int n2sv = *n2;
17   int i,ind1,ind2;
18
19   if(*dtrd1>0)
20     ind1 = 0;
21   else
22     ind1 = *n1-1;
23
24   if(*dtrd2>0)
25     ind2 = *n1;
26   else
27     ind2 = *n1+*n2-1;
28
29   i = 0;
30   
31   while(n1sv>0 && n2sv>0) {
32     if(a[ind1]<=a[ind2]) {
33       index[i] = ind1 + 1;
34       i++;
35       ind1 += *dtrd1;
36       n1sv--;
37     } else {
38       index[i] = ind2 + 1;
39       i++;
40       ind2 += *dtrd2;
41       n2sv--;
42     }
43   }
44
45   if(n1sv==0) {
46     for(n1sv=1;n1sv<=n2sv;n1sv++) {
47       index[i] = ind2 + 1;
48       i++;
49       ind2 += *dtrd2;
50     } 
51   } else {
52     for(n2sv=1;n2sv<=n1sv;n2sv++) {
53       index[i] = ind1 + 1;
54       i++;
55       ind1 += *dtrd1;
56     } 
57   }
58   return;
59 }