OpenAtom  Version1.5a
util.h
Go to the documentation of this file.
1 ///////////////////////////////////////////////////////////////////////////////////==
2 ///////////////////////////////////////////////////////////////////////////////////cc
3 ///////////////////////////////////////////////////////////////////////////////////==
4 /** \file util.h
5  *
6  */
7 ///////////////////////////////////////////////////////////////////////////////////==
8 
9 #ifndef __PFFTUTIL_H__
10 #define __PFFTUTIL_H__
11 ///////////////////////////////////////////////////////////////////////////////////==
12 
13 #include "converse.h"
14 #include "ckcomplex.h"
15 
16 ///////////////////////////////////////////////////////////////////////////////////==
17 ///////////////////////////////////////////////////////////////////////////////////cc
18 ///////////////////////////////////////////////////////////////////////////////////==
19 class CPcharmParaInfo; //forward decl
20 #include <cstdio>
21 #include <cstdlib>
22 #include <iostream>
23 #include <fstream>
24 /// much hate for this
25 #ifdef DUAL_FFTW
26 #include <dfftw.h>
27 #include <drfftw.h>
28 #else
29 #include <fftw.h>
30 #include <rfftw.h>
31 #endif
32 #include <charm++.h>
33 
34 #define CAREFUL 1
35 
36 #define ENERGY_EHART 0
37 #define ENERGY_ENL 1
38 #define ENERGY_EKE 2
39 #define ENERGY_EGGA 3
40 #define ENERGY_EEXC 4
41 #define ENERGY_EEXT 5
42 #define ENERGY_EWD 6
43 #define ENERGY_FMAG 7
44 #define ENERGY_FICTEKE 8
45 
46 #define NUM_ENERGIES 9
47 
48 #define MAX_CHAR_ARRAY_LENGTH 1024
49 
50 ///////////////////////////////////////////////////////////////////////////////////==
51 
52 
53 
54 ///////////////////////////////////////////////////////////////////////////////////==
55 ///////////////////////////////////////////////////////////////////////////////////cc
56 ///////////////////////////////////////////////////////////////////////////////////==
57 /// Size or location in a regular 2D array
58 ///////////////////////////////////////////////////////////////////////////////////==
59 class size2d {
60  int sz[2];
61 public:
62  inline size2d() {sz[0]=sz[1]=0;}
63  inline size2d(int ni,int nj) {sz[0]=ni; sz[1]=nj;}
64  inline int ni(void) const {return sz[0];}
65  inline int nj(void) const {return sz[1];}
66  inline int nx(void) const {return sz[0];}
67  inline int ny(void) const {return sz[1];}
68  inline int operator[](int i) const {return sz[i];}
69  inline int getIndex(int i,int j) const {
70 #if CAREFUL
71  if (i<0 || i>=sz[0]) {CkAbort("Index out of bounds");}
72  if (j<0 || j>=sz[1]) {CkAbort("Index out of bounds");}
73 #endif
74  return i*sz[1] + j;
75  }
76  inline int getIndex(const size2d &at) const {
77  return getIndex(at[0],at[1]);
78  }
79  inline int getTotal(void) const {return sz[0]*sz[1];}
80  inline int getVolume(void) const {return getTotal();}
81 };
82 #if ! CMK_BLUEGENE_CHARM
83 PUPbytes(size2d);
84 #endif
85 ///////////////////////////////////////////////////////////////////////////////////==
86 
87 
88 ///////////////////////////////////////////////////////////////////////////////////==
89 ///////////////////////////////////////////////////////////////////////////////////cc
90 ///////////////////////////////////////////////////////////////////////////////////==
91 /// Regular rectangular 2D array
92 ///////////////////////////////////////////////////////////////////////////////////==
93 template <class T>
94 class array2d {
95  size2d size;
96 
97  //void free(void) {delete[] data; data=NULL;}
98 
99  inline void allocate(void) {
100  //data=new T[size.getTotal()];
101  data = (T*) malloc(size.getTotal() * sizeof(T));
102  }
103 
104  inline void destroy(void) {
105  //delete[] data;
106 
107  free((void *) data);
108  data=NULL;
109  }
110 
111 
112  inline array2d(const array2d &a);
113  inline void operator=(const array2d &a);
114 
115 public:
116 
117  T *data; //probably not a good idea JCHANGED
118  inline array2d(void) {data=NULL;}
119  inline array2d(const size2d &sz):size(sz){
120  allocate();
121  zero();
122  }
123  inline ~array2d() {destroy();}
124 
125  inline void zero(void) {
126  int l=size.getTotal();
127  //for (int i=0;i<l;i++) data[i]=T(0);
128 
129  memset(data, 0, l * sizeof(T));
130  }
131 
132  inline const size2d &getSize(void) const {return size;}
133  inline T *getData(void) const {return data;}
134 
135  inline T &operator[](const size2d &at) {return data[size.getIndex(at)];}
136  inline const T &operator[](const size2d &at) const {return data[size.getIndex(at)];}
137 
138  inline T &operator()(int i,int j) {return data[size.getIndex(i,j)];}
139  inline const T &operator()(int i,int j) const {return data[size.getIndex(i,j)];}
140 
141  void pup(PUP::er &p) {
142  p|size;
143  if (p.isUnpacking()) allocate();
144  p(data, size.getTotal());
145  }
146 
147 };
148 ///////////////////////////////////////////////////////////////////////////////////==
149 
150 #include "../../include/RunDescriptor.h"
151 
152 #include "configure.h"
153 
154 ///////////////////////////////////////////////////////////////////////////////////==
155 ///////////////////////////////////////////////////////////////////////////////////cc
156 ///////////////////////////////////////////////////////////////////////////////////==
157 /// rho space run descriptors for spherical cutoff fft support
158 ///////////////////////////////////////////////////////////////////////////////////==
159 void make_rho_runs(CPcharmParaInfo *sim);
160 
161 void get_rho_kvectors(double ecut4, double *hmati, int **kx_ret, int **ky_ret,
162  int **kz_ret, int *nline_tot_ret, int *nPacked_ret,
163  int ka_max, int kb_max, int kc_max);
164 ///////////////////////////////////////////////////////////////////////////////////==
165 
166 
167 
168 ///////////////////////////////////////////////////////////////////////////////////==
169 ///////////////////////////////////////////////////////////////////////////////////cc
170 ///////////////////////////////////////////////////////////////////////////////////==
171 /// input/output routines, including states, run descriptors, and line balancing
172 ///////////////////////////////////////////////////////////////////////////////////==
173 
174 void readStateInfo(int &, int &, int &, int &, int &, int &,const char *, int );
175 
176 void readStateIntoRuns(int , int,complex *, CkVec<RunDescriptor> &,
177  const char *,int ,int *,int *,int *,int *,int *,int *,
178  int **, int **, int **,int **,int **,int,int,int,int,int);
179 
180 void readState(int nPacked, complex *arrCP, const char *fromFile,
181  int ibinary_opt, int *nline_tot_ret,int *nplane_ret, int *kx,
182  int *ky, int *kz, int *nx_ret, int *ny_ret, int *nz_ret,
183  int *istrt_lgrp,int *iend_lgrp,int *npts_lgrp,int *nline_lgrp,
184  int iget_decomp,int iget_vstate);
185 
187 
188 void sort_kxky(int ,int *,int *,int *,int *,int);
189 
190 void writeStateFile(int ,complex *,complex *,
191  int *,int *,int *,int ,int,int,int,char *,char *,int,int,int,
192  int , int , int , int );
193 
194 void sort_psi_output(int ,int *,int *,int *,int *,int *,int *);
195 
196 void getSplitDecomp(int *,int *,int *, int , int ,int );
197 
198 void create_subPlane_decomp(int ,int *,int *,int ,int *,int *,int *,int **, int );
199 void score_subPlane_decomp(int ,int , int *,int *, int *,int **, int *);
200 void create_gx_decomp(int , int , int *, int *,int ,int *);
201 
202 void processState(int , int, complex *, const char *,int ,int *,int *, int *, int *,
203  int *, int *,int *,int *,int *, int ,int ,int,int);
204 
205 FILE *openScreenfWrite(const char *dirnameBase, const char *fname, int temper, int bead, bool beadfile);
206 ///////////////////////////////////////////////////////////////////////////////////==
207 
208 #endif //__PFFTUTIL_H__
209 
210 
== Size or location in a regular 2D array
Definition: util.h:59
void readStateInfo(int &, int &, int &, int &, int &, int &, const char *, int)
== input/output routines, including states, run descriptors, and line balancing
void getSplitDecomp(int *, int *, int *, int, int, int)
Initialization Function /////////////////////////////////////////////////////////////////////////// /...
Definition: util.C:2250
void sort_kxky(int, int *, int *, int *, int *, int)
Definition: util.C:2192
FILE * openScreenfWrite(const char *dirnameBase, const char *fname, int temper, int bead, bool beadfile)
this stuff is in a C file because multiple includes of .def will give you too many implementations of...
Definition: util.C:2479
void create_line_decomp_descriptor(CPcharmParaInfo *sim)
/////////////////////////////////////////////////////////////////////////cc
Definition: util.C:1651
void create_subPlane_decomp(int, int *, int *, int, int *, int *, int *, int **, int)
Create some decompositions and find the best one. ///////////////////////////////////////////////////...
Definition: util.C:2295
== Regular rectangular 2D array
Definition: util.h:94
void readStateIntoRuns(int, int, complex *, CkVec< RunDescriptor > &, const char *, int, int *, int *, int *, int *, int *, int *, int **, int **, int **, int **, int **, int, int, int, int, int)
Definition: util.C:862
void readState(int nPacked, complex *arrCP, const char *fromFile, int ibinary_opt, int *nline_tot_ret, int *nplane_ret, int *kx, int *ky, int *kz, int *nx_ret, int *ny_ret, int *nz_ret, int *istrt_lgrp, int *iend_lgrp, int *npts_lgrp, int *nline_lgrp, int iget_decomp, int iget_vstate)
Definition: util.C:1108
void processState(int, int, complex *, const char *, int, int *, int *, int *, int *, int *, int *, int *, int *, int *, int, int, int, int)
Definition: util.C:1332
void get_rho_kvectors(double ecut4, double *hmati, int **kx_ret, int **ky_ret, int **kz_ret, int *nline_tot_ret, int *nPacked_ret, int ka_max, int kb_max, int kc_max)
Definition: util.C:777
void make_rho_runs(CPcharmParaInfo *sim)
== rho space run descriptors for spherical cutoff fft support
Definition: util.C:34
void sort_psi_output(int, int *, int *, int *, int *, int *, int *)
Definition: util.C:2149
void create_gx_decomp(int, int, int *, int *, int, int *)
Definition: util.C:2403
void score_subPlane_decomp(int, int, int *, int *, int *, int **, int *)
Score a decomposition /////////////////////////////////////////////////////////////////////////// ///...
Definition: util.C:2365