MIDAPACK - MIcrowave Data Analysis PACKage  1.1b
Parallel software tools for high performance CMB DA analysis
 All Data Structures Files Functions Variables Typedefs Groups Pages
alm.c
Go to the documentation of this file.
1 
10 #include <stdlib.h>
11 
16 void m2s(double *mapval, double *submapval, int *subset, int count){
17  int i;
18 
19 //#pragma omp parallel for
20  for(i=0; i< count; i++){
21  submapval[i]=mapval[subset[i]];
22  }
23 }
24 
29 void lmatvecprod(int *ind, double *val, int m, int nnz, double *in, double *out){
30  int i, j, k;
31  k=0;
32  for(i=0; i<m; i++){ /*<local transform reduce*/
33  for(j=0; j<nnz; j++){
34  out[i]+=val[k]*in[ind[k]];
35  k++;
36  }
37  }
38 }
39 
40 
45 void s2m_sum(double *mapval, double *submapval, int *subset, int count){
46  int i;
47 //#pragma omp parallel for
48  for(i=0; i< count; i++){
49  mapval[subset[i]] += submapval[i];
50  }
51 }
52 
53 
58 void s2m(double *mapval, double *submapval, int *subset, int count){
59  int i;
60  for(i=0; i< count; i++){
61  mapval[subset[i]] = submapval[i];
62  }
63 }
64 
67 void cnt_nnz_dot_prod(double *out, double *in, int cnt, int *ind, double *val, int nnz){
68  int i, j, k;
69  k=0;
70  for(i=0; i<cnt; i++) /*<local transform reduce*/
71  for(j=0; j<nnz; j++)
72  out[ind[k]]+=val[k]*in[i];
73 }
74 
75 #if OPENMP
76 
78 void omp_cnt_nnz_dot_prod(double *out, double *in, int cnt, int *ind, double *val, int nnz){
79  int i, j, k;
80  k=0;
81  for(i=0; i<cnt; i++) /*<local transform reduce*/
82  for(j=0; j<nnz; j++)
83  out[ind[k]]+=val[k]*in[i];
84 }
85 #endif
86 
93 int m2m(double *vA1, int *A1, int n1, double *vA2, int *A2, int n2){
94  int i=0, j=0, k= 0;
95  while( i<n1 && j<n2){
96  if(A1[i] < A2[j]){
97  i++;
98  }
99  else if(A1[i] > A2[j]){
100  j++;
101  }
102  else{
103  vA2[j]=vA1[i];
104  k++;
105  i++;
106  j++;
107  }
108  }
109  return k;
110 }
111 
118 int m2m_sum(double *vA1, int *A1, int n1, double *vA2, int *A2, int n2){
119  int i=0, j=0, k= 0;
120  while( i<n1 && j<n2){
121  if(A1[i] < A2[j]){
122  i++;
123  }
124  else if(A1[i] > A2[j]){
125  j++;
126  }
127  else{
128  vA2[j]+=vA1[i];
129  k++;
130  i++;
131  j++;
132  }
133  }
134  return k;
135 }
136