OpenAtom  Version1.5a
test_para_grp_parse.C
Go to the documentation of this file.
1 /*****************************************************************************
2  * $Source$
3  * $Author$
4  * $Date$
5  * $Revision$
6  *****************************************************************************/
7 
8 ///////////////////////////////////////////////////////////////////////////////=
9 ///////////////////////////////////////////////////////////////////////////////c
10 ///////////////////////////////////////////////////////////////////////////////=
11 /** \file test_para_grp_parse.C
12  *
13  */
14 ///////////////////////////////////////////////////////////////////////////////=
15 
16 
17 
18 #include <cstring>
19 #include <cstdlib>
20 #include <cstdio>
21 #include <cmath>
22 
23 #include "para_grp_parse.h"
24 
25 void create_kvec(int **,int **,int **, int ,int *);
26 
27 void get_glenn_prms(int ,int *,int *,int *,int *,int **,int **,
28  int **,int **,int **);
29 
30 void test_flip(int,int, int *,int *,int*);
31 
32 ///////////////////////////////////////////////////////////////////////////=
33 ///////////////////////////////////////////////////////////////////////////c
34 ///////////////////////////////////////////////////////////////////////////=
35  int main(){
36 ///////////////////////////////////////////////////////////////////////////=
37 
38  int nktot;
39  int nplane;
40  int *kx,*ky,*kz;
41 
42 ///////////////////////////////////////////////////////////////////////////=
43 /// create the model data set
44 
45  PRINTF("\n");
46  PRINTF("////////////////////////////////////////////////////\n");
47  PRINTF(" Input data \n");
48  PRINTF("----------------------------------------------------\n");
49  PRINTF("Enter nplane : ");
50  scanf("%d",&nplane);
51 
52  int ntemp;
53  create_kvec(&kx,&ky,&kz,nplane,&ntemp);
54  ParaGrpParse::flip_data_set(ntemp,&nktot,kx,ky,kz);
55  test_flip(nktot,nplane,kx,ky,kz);
56 
57  PRINTF(" nktot : %d\n",nktot);
58 
59  PRINTF("////////////////////////////////////////////////////\n");
60 
61 ///////////////////////////////////////////////////////////////////////////=
62 /// Parse the data out by plane index
63 
64  PRINTF("\n");
65  PRINTF("////////////////////////////////////////////////////\n");
66  PRINTF(" Line decomposition \n");
67  PRINTF("----------------------------------------------------\n");
68 
69  int nline;
70  int *istrt;
71  int *iend;
72  int *npts;
73  int *kx_line;
74  int *ky_line;
75 
76  get_glenn_prms(nktot,kx,ky,&nplane,&nline,&istrt,&iend,&npts,&kx_line,&ky_line);
77  PRINTF("nplane %d nline %d\n",nplane,nline);
78 
79  int *istrt_lgrp = (int *)malloc(nplane*sizeof(int));
80  int *iend_lgrp = (int *)malloc(nplane*sizeof(int));
81  int *npts_lgrp = (int *)malloc(nplane*sizeof(int));
82  int *nline_lgrp = (int *)malloc(nplane*sizeof(int));
83  int *kx_str_lgrp = (int *)malloc(nplane*sizeof(int));
84  int *kx_end_lgrp = (int *)malloc(nplane*sizeof(int));
85  int *ky_str_lgrp = (int *)malloc(nplane*sizeof(int));
86  int *ky_end_lgrp = (int *)malloc(nplane*sizeof(int));
87 
88  ParaGrpParse::get_plane_line_prms(nktot,nplane,nline,npts,kx_line, ky_line,
89  istrt_lgrp,iend_lgrp,npts_lgrp,nline_lgrp,
90  kx_str_lgrp,kx_end_lgrp,ky_str_lgrp,ky_end_lgrp);
91 
92  for(int i=0;i<nplane;i++){
93  PRINTF("i=%d : n=%d istrt=%d iend=%d nline=%d ",
94  i,npts_lgrp[i],istrt_lgrp[i],iend_lgrp[i],nline_lgrp[i]);
95  PRINTF("kx_str %d kx_end %d ky_str %d ky_end %d\n",
96  kx_str_lgrp[i],kx_end_lgrp[i],ky_str_lgrp[i],ky_end_lgrp[i]);
97  }//endfor
98 
99  PRINTF("////////////////////////////////////////////////////\n");
100 
101  return 1;
102 //-------------------------------------------------------------------------
103  }//end routine
104 ///////////////////////////////////////////////////////////////////////////=
105 
106 
107 ///////////////////////////////////////////////////////////////////////////=
108 ///////////////////////////////////////////////////////////////////////////c
109 ///////////////////////////////////////////////////////////////////////////=
110 /// Create model data points in 3D with spherical truncation
111 ///////////////////////////////////////////////////////////////////////////=
112 
113 void create_kvec(int **kx_out,int **ky_out,int **kz_out,
114  int nplane,int *nktot_out)
115 
116 ///////////////////////////////////////////////////////////////////////////=
117  {//begin routine
118 ///////////////////////////////////////////////////////////////////////////=
119 
120  int nktot = 0;
121  double aplane1 = (double)(nplane-1);
122  for(int ikx=0;ikx<=nplane;ikx++){
123  int kymin = -nplane;
124  if(ikx==0)kymin=0;
125  for(int iky=kymin;iky<=nplane;iky++){
126  int kzmin = -nplane;
127  if(ikx==0 && iky==0)kzmin=1;
128  for(int ikz=kzmin;ikz<=nplane;ikz++){
129  double aka = (double)ikx;
130  double akb = (double)iky;
131  double akc = (double)ikz;
132  double g = sqrt(aka*aka + akb*akb + akc*akc);
133  if(g<=aplane1){nktot++;}
134  }//endfor
135  }//endfor
136  }//endfor
137  nktot++;
138 
139  int *kx = (int *)malloc(2*nktot*sizeof(int));
140  int *ky = (int *)malloc(2*nktot*sizeof(int));
141  int *kz = (int *)malloc(2*nktot*sizeof(int));
142 
143  int ic = 0;
144  for(int ikx=0;ikx<=nplane;ikx++){
145  int kymin = -nplane;
146  if(ikx==0)kymin=0;
147  for(int iky=kymin;iky<=nplane;iky++){
148  int kzmin = -nplane;
149  if(ikx==0 && iky==0)kzmin=1;
150  for(int ikz=kzmin;ikz<=nplane;ikz++){
151  double aka = (double)ikx;
152  double akb = (double)iky;
153  double akc = (double)ikz;
154  double g = sqrt(aka*aka + akb*akb + akc*akc);
155  if(g<=aplane1){kx[ic]=ikx; ky[ic]=iky; kz[ic]=ikz; ic++;}
156  }//endfor
157  }//endfor
158  }//endfor
159  kx[ic]=0;ky[ic]=0;kz[ic]=0;
160  ic++;
161 
162  *nktot_out = nktot;
163  *kx_out = kx;
164  *ky_out = ky;
165  *kz_out = kz;
166 
167 //-------------------------------------------------------------------------
168  }//end routine
169 ///////////////////////////////////////////////////////////////////////////=
170 
171 
172 
173 ///////////////////////////////////////////////////////////////////////////=
174 ///////////////////////////////////////////////////////////////////////////c
175 ///////////////////////////////////////////////////////////////////////////=
176 /// Decompose the nktot data points into chunks based on plane index
177 ///////////////////////////////////////////////////////////////////////////=
178 
179 void get_glenn_prms(int nktot,int *kx,int *ky,int *nplane_ret,
180  int *nline_ret,int **istrt_ret,int **iend_ret,
181  int **npts_ret,int **kx_line_ret,int **ky_line_ret)
182 
183 ///////////////////////////////////////////////////////////////////////////=
184  { //begin routine
185 ///////////////////////////////////////////////////////////////////////////=
186 /// count the planes
187 
188  int nplane = 1;
189  int nline = 1;
190  for(int i=1;i<nktot;i++){
191  if(kx[i]!=kx[(i-1)]){nplane++;}
192  if(ky[i]!=ky[(i-1)] || kx[i]!=kx[(i-1)]){nline++;}
193  }
194 
195  int *iend = (int *)malloc(nline*sizeof(int));
196  int *istrt = (int *)malloc(nline*sizeof(int));
197  int *npts = (int *)malloc(nline*sizeof(int));
198  int *kx_line = (int *)malloc(nline*sizeof(int));
199  int *ky_line = (int *)malloc(nline*sizeof(int));
200 
201  int ic = 0;
202  npts[0] = 1;
203  istrt[0] = 0;
204  iend[0] = 1;
205  kx_line[0] = kx[0];
206  ky_line[0] = ky[0];
207  for(int i=1;i<nktot;i++){
208  if(kx[i]!=kx[(i-1)] || ky[i]!=ky[(i-1)]){
209  iend[ic] = i;
210  ic += 1;
211  npts[ic] = 0;
212  istrt[ic] = i;
213  kx_line[ic] = kx[i];
214  ky_line[ic] = ky[i];
215  }//endif
216  npts[ic]++;
217  }//endfor
218  iend[(nline-1)]=nktot;
219 
220  *nplane_ret = nplane;
221  *nline_ret = nline;
222  *istrt_ret = istrt;
223  *iend_ret = iend;
224  *npts_ret = npts;
225  *kx_line_ret = kx_line;
226  *ky_line_ret = ky_line;
227 
228 //-------------------------------------------------------------------------
229  }//end routine
230 ///////////////////////////////////////////////////////////////////////////=
231 
232 
233 
234 ///////////////////////////////////////////////////////////////////////////=
235 ///////////////////////////////////////////////////////////////////////////c
236 ///////////////////////////////////////////////////////////////////////////=
237 /// Create model data points in 3D with spherical truncation
238 ///////////////////////////////////////////////////////////////////////////=
239 
240 void test_flip(int nktot, int nplane, int *kx,int *ky,int *kz)
241 
242 ///////////////////////////////////////////////////////////////////////////=
243  {//begin routine
244 ///////////////////////////////////////////////////////////////////////////=
245 
246  double aplane1 = (double)(nplane-1);
247 
248  int ic = 0;
249  for(int ikx=0;ikx<=nplane;ikx++){
250  int kymin = -nplane;
251  for(int iky=kymin;iky<=nplane;iky++){
252  int kzmin = -nplane;
253  for(int ikz=kzmin;ikz<=nplane;ikz++){
254  double aka = (double)ikx;
255  double akb = (double)iky;
256  double akc = (double)ikz;
257  double g = sqrt(aka*aka + akb*akb + akc*akc);
258  if(g<=aplane1){
259  if(ic>=nktot){
260  printf("flip error 1\n");exit(1);
261  }//endif
262  if(kx[ic]!=ikx || ky[ic]!=iky || kz[ic]!=ikz){
263  printf("flip error 2\n");exit(1);
264  }//endif
265  ic++;
266  }//endif
267  }//endfor
268  }//endfor
269  }//endfor
270  if(ic!=nktot){printf("flip error 3\n");exit(1);}
271 
272 ///////////////////////////////////////////////////////////////////////////=
273  }//end routine
274 ///////////////////////////////////////////////////////////////////////////=
int main()
void create_kvec(int **, int **, int **, int, int *)
= Create model data points in 3D with spherical truncation
void get_glenn_prms(int, int *, int *, int *, int *, int **, int **, int **, int **, int **)
= Decompose the nktot data points into chunks based on plane index
static void get_plane_line_prms(int, int, int, int *, int *, int *, int *, int *, int *, int *, int *, int *, int *, int *)
functions
static void flip_data_set(int, int *, int *, int *, int *)
void test_flip(int, int, int *, int *, int *)
= Create model data points in 3D with spherical truncation