MIDAPACK - MIcrowave Data Analysis PACKage  1.1b
Parallel software tools for high performance CMB DA analysis
alm.c
Go to the documentation of this file.
1 
27 void m2s(double *mapval, double *submapval, int *subset, int count) {
28  int i;
29 
30  // #pragma omp parallel for
31  for (i = 0; i < count; i++) { submapval[i] = mapval[subset[i]]; }
32 }
33 
38 void lmatvecprod(int *ind, double *val, int m, int nnz, double *in,
39  double *out) {
40  int i, j, k;
41  k = 0;
42  for (i = 0; i < m; i++) { /*<local transform reduce*/
43  for (j = 0; j < nnz; j++) {
44  out[i] += val[k] * in[ind[k]];
45  k++;
46  }
47  }
48 }
49 
54 void s2m_sum(double *mapval, double *submapval, int *subset, int count) {
55  int i;
56  // #pragma omp parallel for
57  for (i = 0; i < count; i++) { mapval[subset[i]] += submapval[i]; }
58 }
59 
64 void s2m(double *mapval, double *submapval, int *subset, int count) {
65  int i;
66  for (i = 0; i < count; i++) { mapval[subset[i]] = submapval[i]; }
67 }
68 
71 void cnt_nnz_dot_prod(double *out, double *in, int cnt, int *ind, double *val,
72  int nnz) {
73  int i, j, k;
74  k = 0;
75  for (i = 0; i < cnt; i++) /*<local transform reduce*/
76  for (j = 0; j < nnz; j++) out[ind[k]] += val[k] * in[i];
77 }
78 
79 #if OPENMP
82 void omp_cnt_nnz_dot_prod(double *out, double *in, int cnt, int *ind,
83  double *val, int nnz) {
84  int i, j, k;
85  k = 0;
86  for (i = 0; i < cnt; i++) /*<local transform reduce*/
87  for (j = 0; j < nnz; j++) out[ind[k]] += val[k] * in[i];
88 }
89 #endif
90 
97 int m2m(double *vA1, int *A1, int n1, double *vA2, int *A2, int n2) {
98  int i = 0, j = 0, k = 0;
99  while (i < n1 && j < n2) {
100  if (A1[i] < A2[j]) {
101  i++;
102  } else if (A1[i] > A2[j]) {
103  j++;
104  } else {
105  vA2[j] = vA1[i];
106  k++;
107  i++;
108  j++;
109  }
110  }
111  return k;
112 }
113 
120 int m2m_sum(double *vA1, int *A1, int n1, double *vA2, int *A2, int n2) {
121  int i = 0, j = 0, k = 0;
122  while (i < n1 && j < n2) {
123  if (A1[i] < A2[j]) {
124  i++;
125  } else if (A1[i] > A2[j]) {
126  j++;
127  } else {
128  vA2[j] += vA1[i];
129  k++;
130  i++;
131  j++;
132  }
133  }
134  return k;
135 }
136 
144 int m2m_sum_i(int *vA1, int *A1, int n1, int *vA2, int *A2, int n2) {
145  int i = 0, j = 0, k = 0;
146  while (i < n1 && j < n2) {
147  if (A1[i] < A2[j]) {
148  i++;
149  } else if (A1[i] > A2[j]) {
150  j++;
151  } else {
152  vA2[j] += vA1[i];
153  k++;
154  i++;
155  j++;
156  }
157  }
158  return k;
159 }
void m2s(double *mapval, double *submapval, int *subset, int count)
Definition: alm.c:27
void lmatvecprod(int *ind, double *val, int m, int nnz, double *in, double *out)
Local mat vec prod.
Definition: alm.c:38
int m2m_sum(double *vA1, int *A1, int n1, double *vA2, int *A2, int n2)
Definition: alm.c:120
int m2m(double *vA1, int *A1, int n1, double *vA2, int *A2, int n2)
Definition: alm.c:97
void s2m(double *mapval, double *submapval, int *subset, int count)
assign submap values the submap values array
Definition: alm.c:64
int m2m_sum_i(int *vA1, int *A1, int n1, int *vA2, int *A2, int n2)
Definition: alm.c:144
void omp_cnt_nnz_dot_prod(double *out, double *in, int cnt, int *ind, double *val, int nnz)
Sum submap values the submap values array.
Definition: alm.c:82
void s2m_sum(double *mapval, double *submapval, int *subset, int count)
Sum submap values the submap values array.
Definition: alm.c:54
void cnt_nnz_dot_prod(double *out, double *in, int cnt, int *ind, double *val, int nnz)
Sum submap values the submap values array.
Definition: alm.c:71