OpenAtom  Version1.5a
CPcharmParaInfo.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * $Source$
3  * $Author$
4  * $Date$
5  * $Revision$
6  *****************************************************************************/
7 
8 ///////////////////////////////////////////////////////////////////////////////
9 ///////////////////////////////////////////////////////////////////////////////
10 ///////////////////////////////////////////////////////////////////////////////
11 /** \file CPcharmParaInfo.h
12  *
13  */
14 
15 #ifndef _parainfo_h_
16 #define _parainfo_h_
17 
18 #include "../include/RunDescriptor.h"
19 #include "../src_piny_physics_v1.0/friend_lib/proto_friend_lib_entry.h"
20 class CPcharmParaInfo; extern CPcharmParaInfo simReadOnly;
21 ///////////////////////////////////////////////////////////////////////////////
22 //////////////////////////////////////////////////////////////////////////////
23 ///////////////////////////////////////////////////////////////////////////////
25  public :
26  int nk0_max;
27  int nchareG;
28  int num_recv_tot; //how many chares do I recieve from
29  int num_send_tot; //how many chares do I send to
30  int *num_send;
31  int **lst_send;
32  int *num_recv;
33  int **lst_recv;
34 
36  nk0_max=0; nchareG=0;
37  num_send = NULL;
38  lst_send = NULL;
39  num_recv = NULL;
40  lst_recv = NULL;
41  }
42 
43  void Init(int nk0_max_,int nchareG_){
44  nk0_max = nk0_max_;
45  nchareG = nchareG_;
46  num_send = new int[nchareG];
47  num_recv = new int[nchareG];
48  for(int i=0;i<nchareG;i++){num_send[i] = 0;}
49  for(int i=0;i<nchareG;i++){num_recv[i] = 0;}
50  num_recv_tot = 0;
51  num_send_tot = 0;
52 
53  lst_send = new int *[nchareG];
54  lst_recv = new int *[nchareG];
55  for(int i=0;i<nchareG;i++){
56  lst_send[i]=new int[nk0_max];
57  lst_recv[i]=new int[nk0_max];
58  }//endfor
59  for(int i=0;i<nchareG;i++){
60  for(int j=0;j<nk0_max;j++){
61  lst_send[i][j] = 0;
62  lst_recv[i][j] = 0;
63  }}
64  }
65 
66  void Init(RedundantCommPkg *R,int index){
67  nk0_max = R->nk0_max;
68  nchareG = R->nchareG;
69  num_recv_tot = R->num_recv_tot;
70  num_send_tot = R->num_send_tot;
71  Init(nk0_max,nchareG);
72  for(int i=0;i<nchareG;i++){
73  num_send[i]=R->num_send[i];
74  num_recv[i]=R->num_recv[i];
75  }//endfor
76  for(int i=0;i<nchareG;i++){
77  for(int j=0;j<num_send[i];j++){
78  lst_send[i][j]=R->lst_send[i][j];
79  }//endfor
80  for(int j=0;j<num_recv[i];j++){
81  lst_recv[i][j]=R->lst_recv[i][j];
82  }//endfor
83  }//endfor
84  }
85 
87  if(num_send!=NULL)
88  delete [] num_send;
89  if(num_recv!=NULL)
90  delete [] num_recv;
91  if(lst_send!=NULL)
92  {
93  for(int j=0;j<nchareG;j++){
94  if(lst_send[j]!=NULL)
95  delete [] lst_send[j];
96  if(lst_recv[j]!=NULL)
97  delete [] lst_recv[j];
98  }//endfor
99  delete [] lst_send;
100  delete [] lst_recv;
101  }
102  }
103 
104  void pup(PUP::er &p){
105  p|nk0_max; p|nchareG;
106  if(p.isUnpacking()) {
107  Init(nk0_max,nchareG); // sets num_recv_tot and num_send_tot to 0
108  }//endif
109  p|num_recv_tot; p|num_send_tot; // must follow Init
110  PUParray(p,num_send,nchareG);
111  PUParray(p,num_recv,nchareG);
112  for(int i=0;i<nchareG;i++)
113  PUParray(p,lst_send[i],nk0_max);
114  for(int i=0;i<nchareG;i++)
115  PUParray(p,lst_recv[i],nk0_max);
116  }//end pup
117 
118 //----------------------------------------------------------------------------
119  };// end class
120 ///////////////////////////////////////////////////////////////////////////////
121 
122 
123 ///////////////////////////////////////////////////////////////////////////////
124 PUPmarshall(RedundantCommPkg);
125 ///////////////////////////////////////////////////////////////////////////////
126 
127 ///////////////////////////////////////////////////////////////////////////////
128 ///////////////////////////////////////////////////////////////////////////////
129 ///////////////////////////////////////////////////////////////////////////////
131 ///////////////////////////////////////////////////////////////////////////////
132  public:
133 
134  double vol,dt,tol_norb,tol_cp_min;
135  double tol_cp_dyn;
136  int ntemper;
137  int pi_beads;
138  int nkpoint;
139  int nspin;;
140  int iperd;
141  int doublepack;
142  int fftopt;
143  int kx_max,ky_max,kz_max;
144  int cp_norb_rot_kescal;
145  int ndump_frq;
146  int istart_typ_cp;
147  int cp_grad_corr_on;
148  int cp_opt;
149  int cp_std;
150  int cp_wave;
151  int cp_min_opt;
152  int cp_min_update;
153  int cp_min_cg;
154  int cp_min_std;
155  int cp_force_complex_psi;
156  int sizeX, sizeY, sizeZ;
157  int rhoRsubplanes;
158  int ees_eext_on; //Opt: EES option on for external energy
159  int ees_nloc_on; //Opt: EES option on for non-local energy
160  int ngrid_nloc_a, ngrid_nloc_b, ngrid_nloc_c;
161  int ngrid_eext_a, ngrid_eext_b, ngrid_eext_c;
162  int nstates;
163  int ntime;
164  int gen_wave;
165  int ncoef;
166  int ibinary_opt;
167  int ibinary_write_opt;
168  int nplane_x; // # of non-zero planes of gx
169  int nchareG; // # of collections of lines in g-space
170  int nlines_tot; // total number of lines in g-space
171  int nlines_max; // maximum number of lines in any collection
172  int npts_tot; // total number of pts in g-space
173  int natm_tot;
174  int nlIters; // number of non-local iterations
175  int nmem_zmat_max; // total size of zmatrix memory
176  int nmem_zmat_tot; // total size of zmatrix memory
177  int *ioff_zmat; // offset into zmatrix memory
178  int *nmem_zmat; // zmatrix memory for each iteration
179  int natm_nl;
180  int natm_typ;
181  int numSfGrps;
182  int natm_nl_grp_max;
183  double *lines_per_chareG; // lines in each collection (g-space)
184  double *pts_per_chareG; // pts in each collection (g-space)
185  CkVec<RunDescriptor> *sortedRunDescriptors; // description of collection
186  int *nlines_per_chareG; // lines in each collection (g-space)
187  int *npts_per_chareG; // pts in each collection (g-space)
188  int *index_output_off; // offset to unpack output fore each chareg
189  int **index_tran_upack; // unpack indicies for each chareG
190  int **index_tran_upackNL; // unpack indicies for each chareG
191 
192 
193  int nlines_tot_rho; // total number of lines in rhog-space
194  int nlines_max_rho; // maximum number of lines in any rho collection
195  int npts_tot_rho; // total number of pts in rhog-space
196  int nlines_max_eext;// rhoghelpers subdivided g-collections
197 
198  int nplane_rho_x; // # of non-zero planes of rho gx
199  int nchareRhoG; // # of collections of lines in rhog-space
200  int nchareRhoGEext; // # of collections of lines in rhog-space for
201  // eext
202  int nchareVdW; // number of Van der Walls
203  double *lines_per_chareRhoG; // lines in each collection (rhog-space)
204  double *pts_per_chareRhoG; // pts in each collection (rhog-space)
205 
206  int *nlines_per_chareRhoG; // lines in each collection (rhog-space)
207  int *nlines_per_chareRhoGEext; // lines in each collection (rhog-space)
208  int *npts_per_chareRhoG; // pts in each collection (rhog-space)
209  int **index_tran_upack_rho; // unpack indicies for each chareRhoG
210  int **index_tran_upack_eext; // unpack indicies for each chareRhoG
211 
212  int **nline_send_eext_y; // g-collections send/recv R to G in Rsubplane decomp
213  int **nline_send_rho_y; // g-collections send/recv R to G in Rsubplane decomp
214  int ***index_tran_upack_rho_y; // fancy indices to pack/upack collections
215  int ***index_tran_upack_eext_y;// in Rsubplane decomp.
216  int ***index_tran_upack_eext_ys;// in Rsubplane decomp.
217  int ***index_tran_pack_rho_y;
218  int ***index_tran_pack_eext_y;
219  int ***index_tran_pack_eext_ys;
220 
221  int ngxSubMax; // max number of gx values in any subplane grp
222  int *numSubGx; // number of gx values in each subplane grp
223  int **listSubGx; // gx values in each subplane grp
224  int listSubFlag;
225 
226  CkVec<RunDescriptor> *RhosortedRunDescriptors; // description of collection
227  RedundantCommPkg *RCommPkg; // communication of redundant elements
228 
229 ///////////////////////////////////////////////////////////////////////////////
230 
231 ///////////////////////////////////////////////////////////////////////////////
233 ///////////////////////////////////////////////////////////////////////////////
234 #ifdef _CP_DEBUG_PARAINFO_VERBOSE_
235  CkPrintf("[%d] CPcharmParaInfo copy constructor\n",CkMyPe());
236 #endif
237  vol = s.vol;
238  tol_norb = s.tol_norb;
239  tol_cp_min = s.tol_cp_min;
240  tol_cp_dyn = s.tol_cp_dyn;
241  dt = s.dt;
242 
243  ntemper = s.ntemper;
244  pi_beads = s.pi_beads;
245  nkpoint = s.nkpoint;
246  nspin = s.nspin;
247  iperd = s.iperd;
248  doublepack = s.doublepack;
249  fftopt = s.fftopt;
250  kx_max = s.kx_max;
251  ky_max = s.ky_max;
252  kz_max = s.kz_max;
253  cp_norb_rot_kescal = s.cp_norb_rot_kescal;
254  ndump_frq = s.ndump_frq;
255  istart_typ_cp= s.istart_typ_cp;
256  cp_grad_corr_on = s.cp_grad_corr_on;
257  cp_opt = s.cp_opt;
258  cp_std = s.cp_std;
259  cp_wave = s.cp_wave;
260  cp_min_opt = s.cp_min_opt;
261  cp_min_update= s.cp_min_update;
262  cp_min_cg = s.cp_min_cg;
263  cp_min_std = s.cp_min_std;
264  cp_force_complex_psi = s.cp_force_complex_psi;
265  rhoRsubplanes= s.rhoRsubplanes;
266  sizeX = s.sizeX;
267  sizeY = s.sizeY;
268  sizeZ = s.sizeZ;
269  nstates = s.nstates;
270  ees_eext_on = s.ees_eext_on;
271  ees_nloc_on = s.ees_nloc_on;
272  ngrid_nloc_a = s.ngrid_nloc_a;
273  ngrid_nloc_b = s.ngrid_nloc_b;
274  ngrid_nloc_c = s.ngrid_nloc_c;
275  ngrid_eext_a = s.ngrid_eext_a;
276  ngrid_eext_b = s.ngrid_eext_b;
277  ngrid_eext_c = s.ngrid_eext_c;
278  ntime = s.ntime;
279  gen_wave = s.gen_wave;
280  ncoef = s.ncoef;
281  ibinary_opt = s.ibinary_opt;
282  ibinary_write_opt = s.ibinary_write_opt;
283  nplane_x = s.nplane_x;
284  nchareG = s.nchareG;
285  nlines_tot = s.nlines_tot;
286  npts_tot = s.npts_tot;
287  nlines_max = s.nlines_max;
288  natm_tot = s.natm_tot;
289  natm_typ = s.natm_typ;
290  natm_nl = s.natm_nl;
291  numSfGrps = s.numSfGrps;
292  natm_nl_grp_max = s.natm_nl_grp_max;
293  if(nplane_x==0 || nplane_x > sizeX){
294  CkPrintf("@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
295  CkPrintf("Error in CPcharmParaInfo constructor\n");
296  CkPrintf("@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
297  CkExit();
298  }//endif
299  if(nchareG==0){
300  CkPrintf("@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
301  CkPrintf("Error in CPcharmParaInfo constructor\n");
302  CkPrintf("@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
303  CkExit();
304  }//endif
305  nlines_tot_rho = s.nlines_tot_rho;
306  npts_tot_rho = s.npts_tot_rho;
307  nlines_max_rho = s.nlines_max_rho;
308  nlines_max_eext = s.nlines_max_eext;
309  nplane_rho_x = s.nplane_rho_x;
310  nchareRhoG = s.nchareRhoG;
311  nchareVdW = s.nchareVdW;
312  nchareRhoGEext = s.nchareRhoGEext;
313  npts_per_chareRhoG = new int[nchareRhoG];
314  nlines_per_chareRhoG = new int[nchareRhoG];
315  nlines_per_chareRhoGEext = new int[nchareRhoGEext];
316  lines_per_chareRhoG = new double[nchareRhoG];
317  pts_per_chareRhoG = new double[nchareRhoG];
318  if(nplane_rho_x==0 || nplane_rho_x > sizeX){
319  CkPrintf("@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
320  CkPrintf("Error in CPcharmParaInfo constructor\n");
321  CkPrintf("@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
322  CkExit();
323  }//endif
324  if(nchareRhoG==0){
325  CkPrintf("@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
326  CkPrintf("Error in CPcharmParaInfo constructor\n");
327  CkPrintf("@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
328  CkExit();
329  }//endif
330  for(int i=0;i<nchareRhoG;i++){
331  nlines_per_chareRhoG[i] = s.nlines_per_chareRhoG[i];
332  lines_per_chareRhoG[i] = s.lines_per_chareRhoG[i];
333  pts_per_chareRhoG[i] = s.pts_per_chareRhoG[i];
334  npts_per_chareRhoG[i] = s.npts_per_chareRhoG[i];
335  }//endfor
336  index_tran_upack_rho = cmall_int_mat(0,nchareRhoG,0,nlines_max_rho,
337  "cpcharmparainfo.h");
338  for(int i=0;i<nchareRhoG;i++){
339  for(int j=0;j<nlines_per_chareRhoG[i];j++){
340  index_tran_upack_rho[i][j] = s.index_tran_upack_rho[i][j];
341  }//endfor
342  }//endfor
343 
344  for(int i=0;i<nchareRhoGEext;i++){
345  nlines_per_chareRhoGEext[i] = s.nlines_per_chareRhoGEext[i];
346  }//endfor
347  index_tran_upack_eext=cmall_int_mat(0,nchareRhoGEext,0,nlines_max_rho,
348  "cpcharmparainfo.h");
349  for(int i=0;i<nchareRhoGEext;i++){
350  for(int j=0;j<nlines_per_chareRhoGEext[i];j++){
351  index_tran_upack_eext[i][j] = s.index_tran_upack_eext[i][j];
352  }//endfor
353  }//endfor
354 
355  sortedRunDescriptors = new CkVec<RunDescriptor> [nchareG];
356  for(int i=0;i<nchareG;i++){
357  for(int j=0;j<s.sortedRunDescriptors[i].size();j++){
358  sortedRunDescriptors[i].push_back(s.sortedRunDescriptors[i][j]);
359  }//endfor
360  }//endfor
361 
362  RhosortedRunDescriptors = new CkVec<RunDescriptor> [nchareRhoG];
363  for(int i=0;i<nchareRhoG;i++){
364  for(int j=0;j<s.RhosortedRunDescriptors[i].size();j++){
365  RhosortedRunDescriptors[i].push_back(s.RhosortedRunDescriptors[i][j]);
366  }//endfor
367  }//endfor
368  npts_per_chareG = new int[nchareG];
369  index_output_off = new int[nchareG];
370  nlines_per_chareG = new int[nchareG];
371  lines_per_chareG = new double[nchareG];
372  pts_per_chareG = new double[nchareG];
373  for(int i=0;i<nchareG;i++){
374  nlines_per_chareG[i] = s.nlines_per_chareG[i];
375  lines_per_chareG[i] = s.lines_per_chareG[i];
376  pts_per_chareG[i] = s.pts_per_chareG[i];
377  npts_per_chareG[i] = s.npts_per_chareG[i];
378  index_output_off[i] = s.index_output_off[i];
379  }//endfor
380  index_tran_upack = cmall_int_mat(0,nchareG,0,nlines_max,"cpcharmparainfo.h");
381  for(int i=0;i<nchareG;i++){
382  for(int j=0;j<nlines_per_chareG[i];j++){
383  index_tran_upack[i][j] = s.index_tran_upack[i][j];
384  }//endfor
385  }//endfor
386 
387  index_tran_upackNL = cmall_int_mat(0,nchareG,0,nlines_max,"cpcharmparainfo.h");
388  for(int i=0;i<nchareG;i++){
389  for(int j=0;j<nlines_per_chareG[i];j++){
390  index_tran_upackNL[i][j] = s.index_tran_upackNL[i][j];
391  }//endfor
392  }//endfor
393 
394  RCommPkg = new RedundantCommPkg [nchareG];
395  for(int i=0;i<nchareG;i++){RCommPkg[i].Init(&s.RCommPkg[i],i);}
396 
397  nlIters = s.nlIters;
398  ioff_zmat = new int [nlIters];
399  nmem_zmat = new int [nlIters];;
400  for(int i =0;i<nlIters;i++){
401  ioff_zmat[i] = s.ioff_zmat[i];
402  nmem_zmat[i] = s.nmem_zmat[i];
403  }//endif
404 
405  if(rhoRsubplanes>1){
406  index_tran_upack_rho_y = cmall_itens3(0,nchareRhoG,0,rhoRsubplanes,
407  0,nlines_max_rho,"util.C");
408  index_tran_pack_rho_y = cmall_itens3(0,nchareRhoG,0,rhoRsubplanes,
409  0,nlines_max_rho,"util.C");
410  nline_send_rho_y = cmall_int_mat(0,nchareRhoG,0,rhoRsubplanes,"util.C");
411  index_tran_upack_eext_y = cmall_itens3(0,nchareRhoGEext,0,rhoRsubplanes,
412  0,nlines_max_eext,"util.C");
413  index_tran_upack_eext_ys= cmall_itens3(0,nchareRhoGEext,0,rhoRsubplanes,
414  0,nlines_max_eext,"util.C");
415  index_tran_pack_eext_y = cmall_itens3(0,nchareRhoGEext,0,rhoRsubplanes,
416  0,nlines_max_eext,"util.C");
417  index_tran_pack_eext_ys = cmall_itens3(0,nchareRhoGEext,0,rhoRsubplanes,
418  0,nlines_max_eext,"util.C");
419  nline_send_eext_y = cmall_int_mat(0,nchareRhoGEext,0,rhoRsubplanes,"util.C");
420  for(int igrp=0;igrp<nchareRhoG;igrp++){
421  for(int ic=0;ic<rhoRsubplanes;ic++){
422  nline_send_rho_y[igrp][ic] = s.nline_send_rho_y[igrp][ic];
423  for(int jc=0;jc<nline_send_rho_y[igrp][ic];jc++){
424  index_tran_upack_rho_y[igrp][ic][jc] = s.index_tran_upack_rho_y[igrp][ic][jc];
425  index_tran_pack_rho_y[igrp][ic][jc] = s.index_tran_pack_rho_y[igrp][ic][jc];
426  }//endfor
427  }//endfor
428  }//endfor
429  for(int igrp=0;igrp<nchareRhoGEext;igrp++){
430  for(int ic=0;ic<rhoRsubplanes;ic++){
431  nline_send_eext_y[igrp][ic] = s.nline_send_eext_y[igrp][ic];
432  for(int jc=0;jc<nline_send_eext_y[igrp][ic];jc++){
433  index_tran_upack_eext_y[igrp][ic][jc]= s.index_tran_upack_eext_y[igrp][ic][jc];
434  index_tran_upack_eext_ys[igrp][ic][jc]= s.index_tran_upack_eext_ys[igrp][ic][jc];
435  index_tran_pack_eext_y[igrp][ic][jc] = s.index_tran_pack_eext_y[igrp][ic][jc];
436  index_tran_pack_eext_ys[igrp][ic][jc] = s.index_tran_pack_eext_ys[igrp][ic][jc];
437  }//endfor
438  }//endfor
439  }//endfor
440 
441  listSubFlag = s.listSubFlag;
442  ngxSubMax = s.ngxSubMax;
443  numSubGx = new int [rhoRsubplanes];
444  listSubGx = cmall_int_mat(0,rhoRsubplanes,0,ngxSubMax,"charmparainfo");
445  for(int ic=0;ic<rhoRsubplanes;ic++){
446  numSubGx[ic] = s.numSubGx[ic];
447  for(int jc=0;jc<numSubGx[ic];jc++){
448  listSubGx[ic][jc] = s.listSubGx[ic][jc];
449  }//endfor
450  }//endfor
451 
452  }//endif : we have subplanes
453 
454  LBTurnInstrumentOff();
455  }//end constructor
456 ///////////////////////////////////////////////////////////////////////////////
457 
458 ///////////////////////////////////////////////////////////////////////////////
459 CPcharmParaInfo & operator=(const CPcharmParaInfo &s){
460 ///////////////////////////////////////////////////////////////////////////////
461 #ifdef _CP_DEBUG_PARAINFO_VERBOSE_
462  CkPrintf("[%d] CPcharmParaInfo assign operator\n", CkMyPe());
463 #endif
464  vol = s.vol;
465  tol_norb = s.tol_norb;
466  tol_cp_min = s.tol_cp_min;
467  tol_cp_dyn = s.tol_cp_dyn;
468  dt = s.dt;
469  nspin = s.nspin;
470  pi_beads = s.pi_beads;;
471  ntemper = s.ntemper;
472  nkpoint = s.nkpoint;
473  iperd = s.iperd;
474  doublepack = s.doublepack;
475  fftopt = s.fftopt;
476  kx_max = s.kx_max;
477  ky_max = s.ky_max;
478  kz_max = s.kz_max;
479  cp_norb_rot_kescal = s.cp_norb_rot_kescal;
480  ndump_frq = s.ndump_frq;
481  istart_typ_cp= s.istart_typ_cp;
482  cp_grad_corr_on = s.cp_grad_corr_on;
483  cp_opt = s.cp_opt;
484  cp_std = s.cp_std;
485  cp_wave = s.cp_wave;
486  cp_min_opt = s.cp_min_opt;
487  cp_min_update= s.cp_min_update;
488  cp_min_cg = s.cp_min_cg;
489  cp_min_std = s.cp_min_std;
490  cp_force_complex_psi = s.cp_force_complex_psi;
491  rhoRsubplanes= s.rhoRsubplanes;
492  sizeX = s.sizeX;
493  sizeY = s.sizeY;
494  sizeZ = s.sizeZ;
495  nstates = s.nstates;
496  ees_eext_on = s.ees_eext_on;
497  ees_nloc_on = s.ees_nloc_on;
498  ngrid_nloc_a = s.ngrid_nloc_a;
499  ngrid_nloc_b = s.ngrid_nloc_b;
500  ngrid_nloc_c = s.ngrid_nloc_c;
501  ngrid_eext_a = s.ngrid_eext_a;
502  ngrid_eext_b = s.ngrid_eext_b;
503  ngrid_eext_c = s.ngrid_eext_c;
504  ntime = s.ntime;
505  gen_wave = s.gen_wave;
506  ncoef = s.ncoef;
507  ibinary_opt = s.ibinary_opt;
508  ibinary_write_opt = s.ibinary_write_opt;
509  nplane_x = s.nplane_x;
510  nchareG = s.nchareG;
511  nlines_tot = s.nlines_tot;
512  npts_tot = s.npts_tot;
513  nlines_max = s.nlines_max;
514  natm_tot = s.natm_tot;
515  natm_typ = s.natm_typ;
516  natm_nl = s.natm_nl;
517  numSfGrps = s.numSfGrps;
518  natm_nl_grp_max = s.natm_nl_grp_max;
519  if(nplane_x==0 || nplane_x > sizeX){
520  CkPrintf("@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
521  CkPrintf("Error in CPcharmParaInfo constructor\n");
522  CkPrintf("@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
523  CkExit();
524  }//endif
525  if(nchareG==0){
526  CkPrintf("@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
527  CkPrintf("Error in CPcharmParaInfo constructor\n");
528  CkPrintf("@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
529  CkExit();
530  }//endif
531  nlines_tot_rho = s.nlines_tot_rho;
532  npts_tot_rho = s.npts_tot_rho;
533  nlines_max_rho = s.nlines_max_rho;
534  nlines_max_eext = s.nlines_max_eext;
535  nplane_rho_x = s.nplane_rho_x;
536  nchareRhoG = s.nchareRhoG;
537  nchareVdW = s.nchareVdW;
538  nchareRhoGEext = s.nchareRhoGEext;
539  npts_per_chareRhoG = new int[nchareRhoG];
540  nlines_per_chareRhoG = new int[nchareRhoG];
541  nlines_per_chareRhoGEext = new int[nchareRhoGEext];
542  lines_per_chareRhoG = new double[nchareRhoG];
543  pts_per_chareRhoG = new double[nchareRhoG];
544  if(nplane_rho_x==0 || nplane_rho_x > sizeX){
545  CkPrintf("@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
546  CkPrintf("Error in CPcharmParaInfo constructor\n");
547  CkPrintf("@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
548  CkExit();
549  }//endif
550  if(nchareRhoG==0){
551  CkPrintf("@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
552  CkPrintf("Error in CPcharmParaInfo constructor\n");
553  CkPrintf("@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@\n");
554  CkExit();
555  }//endif
556  for(int i=0;i<nchareRhoG;i++){
557  nlines_per_chareRhoG[i] = s.nlines_per_chareRhoG[i];
558  lines_per_chareRhoG[i] = s.lines_per_chareRhoG[i];
559  pts_per_chareRhoG[i] = s.pts_per_chareRhoG[i];
560  npts_per_chareRhoG[i] = s.npts_per_chareRhoG[i];
561  }//endfor
562  index_tran_upack_rho = cmall_int_mat(0,nchareRhoG,0,nlines_max_rho,
563  "cpcharmparainfo.h");
564  for(int i=0;i<nchareRhoG;i++){
565  for(int j=0;j<nlines_per_chareRhoG[i];j++){
566  index_tran_upack_rho[i][j] = s.index_tran_upack_rho[i][j];
567  }//endfor
568  }//endfor
569 
570  for(int i=0;i<nchareRhoGEext;i++){
571  nlines_per_chareRhoGEext[i] = s.nlines_per_chareRhoGEext[i];
572  }//endfor
573  index_tran_upack_eext=cmall_int_mat(0,nchareRhoGEext,0,nlines_max_rho,
574  "cpcharmparainfo.h");
575  for(int i=0;i<nchareRhoGEext;i++){
576  for(int j=0;j<nlines_per_chareRhoGEext[i];j++){
577  index_tran_upack_eext[i][j] = s.index_tran_upack_eext[i][j];
578  }//endfor
579  }//endfor
580 
581  sortedRunDescriptors = new CkVec<RunDescriptor> [nchareG];
582  for(int i=0;i<nchareG;i++){
583  for(int j=0;j<s.sortedRunDescriptors[i].size();j++){
584  sortedRunDescriptors[i].push_back(s.sortedRunDescriptors[i][j]);
585  }//endfor
586  }//endfor
587 
588  RhosortedRunDescriptors = new CkVec<RunDescriptor> [nchareRhoG];
589  for(int i=0;i<nchareRhoG;i++){
590  for(int j=0;j<s.RhosortedRunDescriptors[i].size();j++){
591  RhosortedRunDescriptors[i].push_back(s.RhosortedRunDescriptors[i][j]);
592  }//endfor
593  }//endfor
594  npts_per_chareG = new int[nchareG];
595  index_output_off = new int[nchareG];
596  nlines_per_chareG = new int[nchareG];
597  lines_per_chareG = new double[nchareG];
598  pts_per_chareG = new double[nchareG];
599  for(int i=0;i<nchareG;i++){
600  nlines_per_chareG[i] = s.nlines_per_chareG[i];
601  lines_per_chareG[i] = s.lines_per_chareG[i];
602  pts_per_chareG[i] = s.pts_per_chareG[i];
603  npts_per_chareG[i] = s.npts_per_chareG[i];
604  index_output_off[i] = s.index_output_off[i];
605  }//endfor
606  index_tran_upack = cmall_int_mat(0,nchareG,0,nlines_max,"cpcharmparainfo.h");
607  for(int i=0;i<nchareG;i++){
608  for(int j=0;j<nlines_per_chareG[i];j++){
609  index_tran_upack[i][j] = s.index_tran_upack[i][j];
610  }//endfor
611  }//endfor
612 
613  index_tran_upackNL = cmall_int_mat(0,nchareG,0,nlines_max,"cpcharmparainfo.h");
614  for(int i=0;i<nchareG;i++){
615  for(int j=0;j<nlines_per_chareG[i];j++){
616  index_tran_upackNL[i][j] = s.index_tran_upackNL[i][j];
617  }//endfor
618  }//endfor
619 
620  RCommPkg = new RedundantCommPkg [nchareG];
621  for(int i=0;i<nchareG;i++){RCommPkg[i].Init(&s.RCommPkg[i],i);}
622 
623  nlIters = s.nlIters;
624  ioff_zmat = new int [nlIters];
625  nmem_zmat = new int [nlIters];;
626  for(int i =0;i<nlIters;i++){
627  ioff_zmat[i] = s.ioff_zmat[i];
628  nmem_zmat[i] = s.nmem_zmat[i];
629  }//endif
630 
631  if(rhoRsubplanes>1){
632  index_tran_upack_rho_y = cmall_itens3(0,nchareRhoG,0,rhoRsubplanes,
633  0,nlines_max_rho,"util.C");
634  index_tran_pack_rho_y = cmall_itens3(0,nchareRhoG,0,rhoRsubplanes,
635  0,nlines_max_rho,"util.C");
636  nline_send_rho_y = cmall_int_mat(0,nchareRhoG,0,rhoRsubplanes,"util.C");
637  index_tran_upack_eext_y = cmall_itens3(0,nchareRhoGEext,0,rhoRsubplanes,
638  0,nlines_max_eext,"util.C");
639  index_tran_upack_eext_ys= cmall_itens3(0,nchareRhoGEext,0,rhoRsubplanes,
640  0,nlines_max_eext,"util.C");
641  index_tran_pack_eext_y = cmall_itens3(0,nchareRhoGEext,0,rhoRsubplanes,
642  0,nlines_max_eext,"util.C");
643  index_tran_pack_eext_ys = cmall_itens3(0,nchareRhoGEext,0,rhoRsubplanes,
644  0,nlines_max_eext,"util.C");
645  nline_send_eext_y = cmall_int_mat(0,nchareRhoGEext,0,rhoRsubplanes,"util.C");
646  for(int igrp=0;igrp<nchareRhoG;igrp++){
647  for(int ic=0;ic<rhoRsubplanes;ic++){
648  nline_send_rho_y[igrp][ic] = s.nline_send_rho_y[igrp][ic];
649  for(int jc=0;jc<nline_send_rho_y[igrp][ic];jc++){
650  index_tran_upack_rho_y[igrp][ic][jc] = s.index_tran_upack_rho_y[igrp][ic][jc];
651  index_tran_pack_rho_y[igrp][ic][jc] = s.index_tran_pack_rho_y[igrp][ic][jc];
652  }//endfor
653  }//endfor
654  }//endfor
655  for(int igrp=0;igrp<nchareRhoGEext;igrp++){
656  for(int ic=0;ic<rhoRsubplanes;ic++){
657  nline_send_eext_y[igrp][ic] = s.nline_send_eext_y[igrp][ic];
658  for(int jc=0;jc<nline_send_eext_y[igrp][ic];jc++){
659  index_tran_upack_eext_y[igrp][ic][jc]= s.index_tran_upack_eext_y[igrp][ic][jc];
660  index_tran_upack_eext_ys[igrp][ic][jc]= s.index_tran_upack_eext_ys[igrp][ic][jc];
661  index_tran_pack_eext_y[igrp][ic][jc] = s.index_tran_pack_eext_y[igrp][ic][jc];
662  index_tran_pack_eext_ys[igrp][ic][jc] = s.index_tran_pack_eext_ys[igrp][ic][jc];
663  }//endfor
664  }//endfor
665  }//endfor
666 
667  listSubFlag = s.listSubFlag;
668  ngxSubMax = s.ngxSubMax;
669  numSubGx = new int [rhoRsubplanes];
670  listSubGx = cmall_int_mat(0,rhoRsubplanes,0,ngxSubMax,"charmparainfo");
671  for(int ic=0;ic<rhoRsubplanes;ic++){
672  numSubGx[ic] = s.numSubGx[ic];
673  for(int jc=0;jc<numSubGx[ic];jc++){
674  listSubGx[ic][jc] = s.listSubGx[ic][jc];
675  }//endfor
676  }//endfor
677 
678  }//endif : we have subplanes
679 
680 
681  return *this;
682  }//end assign operator
683 ///////////////////////////////////////////////////////////////////////////////
684 
685 ///////////////////////////////////////////////////////////////////////////////
686  CPcharmParaInfo() {
687 ///////////////////////////////////////////////////////////////////////////////
688 #ifdef _CP_DEBUG_PARAINFO_VERBOSE_
689  CkPrintf("[%d] CPcharmParaInfo constructor\n", CkMyPe());
690 #endif
691  rhoRsubplanes = 1;
692  lines_per_chareG=NULL;
693  pts_per_chareG=NULL;
694  nlines_per_chareG=NULL;
695  npts_per_chareG=NULL;
696  index_output_off=NULL;
697 
698  lines_per_chareRhoG=NULL;
699  pts_per_chareRhoG=NULL;
700  nlines_per_chareRhoG=NULL;
701  nlines_per_chareRhoGEext=NULL;
702  npts_per_chareRhoG=NULL;
703  RCommPkg = NULL;
704 
705  ioff_zmat = NULL;
706  nmem_zmat = NULL;
707 
708  index_tran_upack_rho_y = NULL;
709  index_tran_pack_rho_y = NULL;
710  nline_send_rho_y = NULL;
711  index_tran_upack_eext_y = NULL;
712  index_tran_upack_eext_ys = NULL;
713  index_tran_pack_eext_y = NULL;
714  index_tran_pack_eext_ys = NULL;
715  nline_send_eext_y = NULL;
716 
717  ngxSubMax = 0;
718  numSubGx = NULL;
719  listSubGx = NULL;
720 
721  }
722 ///////////////////////////////////////////////////////////////////////////////
723 
724 ///////////////////////////////////////////////////////////////////////////////
725  ~CPcharmParaInfo() {
726  delete [] lines_per_chareG; lines_per_chareG = NULL;
727  delete [] nlines_per_chareG; nlines_per_chareG = NULL;
728  delete [] pts_per_chareG; pts_per_chareG = NULL;
729  delete [] npts_per_chareG; npts_per_chareG = NULL;
730  delete [] index_output_off; index_output_off = NULL;
731 
732  delete [] lines_per_chareRhoG; lines_per_chareRhoG = NULL;
733  delete [] nlines_per_chareRhoG; nlines_per_chareRhoG = NULL;
734  delete [] nlines_per_chareRhoGEext; nlines_per_chareRhoGEext = NULL;
735  delete [] pts_per_chareRhoG; pts_per_chareRhoG = NULL;
736  delete [] npts_per_chareRhoG; npts_per_chareRhoG = NULL;
737  delete [] RCommPkg; RCommPkg= NULL;
738  delete [] ioff_zmat;
739  delete [] nmem_zmat;
740  delete [] sortedRunDescriptors;
741  delete [] RhosortedRunDescriptors;
742  cfree_int_mat(index_tran_upack,0,nchareG,0,nlines_max);
743  cfree_int_mat(index_tran_upackNL,0,nchareG,0,nlines_max);
744  cfree_int_mat(index_tran_upack_rho,0,nchareRhoG,0,nlines_max_rho);
745  cfree_int_mat(index_tran_upack_eext,0,nchareRhoGEext,0,nlines_max_rho);
746 
747  if(rhoRsubplanes>1){
748  cfree_itens3(index_tran_upack_rho_y,0,nchareRhoG,0,rhoRsubplanes,0,nlines_max_rho);
749  cfree_itens3(index_tran_pack_rho_y,0,nchareRhoG,0,rhoRsubplanes,0,nlines_max_rho);
750  cfree_itens3(index_tran_upack_eext_y,0,nchareRhoGEext,0,rhoRsubplanes,
751  0,nlines_max_eext);
752  cfree_itens3(index_tran_upack_eext_ys,0,nchareRhoGEext,0,rhoRsubplanes,
753  0,nlines_max_eext);
754  cfree_itens3(index_tran_pack_eext_y,0,nchareRhoGEext,0,rhoRsubplanes,
755  0,nlines_max_eext);
756  cfree_itens3(index_tran_pack_eext_ys,0,nchareRhoGEext,0,rhoRsubplanes,
757  0,nlines_max_eext);
758  cfree_int_mat(nline_send_rho_y,0,nchareRhoG,0,rhoRsubplanes);
759  cfree_int_mat(nline_send_eext_y,0,nchareRhoGEext,0,rhoRsubplanes);
760 
761  delete [] numSubGx;
762  cfree_int_mat(listSubGx,0,rhoRsubplanes,0,ngxSubMax);
763  }//endif
764 
765  }//end destructor
766 ///////////////////////////////////////////////////////////////////////////////
767 
768 ///////////////////////////////////////////////////////////////////////////////
769  void pup(PUP::er &p){
770 ///////////////////////////////////////////////////////////////////////////////
771 #ifdef _CP_DEBUG_PARAINFO_VERBOSE_
772  CkPrintf("[%d] CPcharmParaInfo pup\n", CkMyPe());
773 #endif
774  p|vol; p|dt; p|tol_norb; p|tol_cp_min; p|tol_cp_dyn;
775  p|ntemper; p|pi_beads; p|nkpoint; p|nspin;
776  p|iperd; p|doublepack;
777  p|fftopt; p|kx_max; p|ky_max; p|kz_max; p|cp_norb_rot_kescal;
778  p|ndump_frq; p|istart_typ_cp; p|cp_grad_corr_on;
779  p|cp_opt; p|cp_std; p|cp_wave;
780  p|cp_min_opt; p|cp_min_update; p|cp_min_std; p|cp_force_complex_psi;
781  p|cp_min_cg; p|rhoRsubplanes;
782  p|sizeX; p|sizeY; p|sizeZ;
783  p|ees_eext_on; p|ees_nloc_on;
784  p|ngrid_nloc_a; p|ngrid_nloc_b; p|ngrid_nloc_c;
785  p|ngrid_eext_a; p|ngrid_eext_b; p|ngrid_eext_c;
786  p|nplane_x; p|nchareG; p|natm_tot; p|natm_nl;
787  p|nstates; p|ntime; p|gen_wave; p|ncoef;
788  p|ibinary_opt; p|ibinary_write_opt;
789  p|natm_typ; p|natm_nl; p|numSfGrps; p|nlIters;
790  p|nmem_zmat_tot; p|nmem_zmat_max;
791  p|natm_nl_grp_max; p|nlines_tot; p|npts_tot;
792  p|nlines_max; p|nlines_max_eext;
793  p|nplane_rho_x; p|nchareRhoG; p|nchareRhoGEext;
794  p|nlines_max_rho; p|nlines_tot_rho; p|npts_tot_rho;
795  p|ngxSubMax;
796  p|listSubFlag;
797 
798  if(p.isUnpacking()) {
799  lines_per_chareRhoG = new double[nchareRhoG];
800  pts_per_chareRhoG = new double[nchareRhoG];
801  nlines_per_chareRhoG = new int[nchareRhoG];
802  nlines_per_chareRhoGEext = new int[nchareRhoGEext];
803  npts_per_chareRhoG = new int[nchareRhoG];
804 #ifdef _CP_DEBUG_PARAINFO_VERBOSE_
805  CkPrintf("nchareRhoG %d nlines_max_rho %d sizeX %d\n",
806  nchareRhoG, nlines_max_rho, sizeX);
807 #endif
808  index_tran_upack_rho = cmall_int_mat(0,nchareRhoG,0,nlines_max_rho,
809  "cpcharmparainfo.h");
810  index_tran_upack_eext= cmall_int_mat(0,nchareRhoGEext,0,nlines_max_rho,
811  "cpcharmparainfo.h");
812  RhosortedRunDescriptors = new CkVec<RunDescriptor> [nchareRhoG];
813  if(rhoRsubplanes>1){
814  index_tran_upack_rho_y = cmall_itens3(0,nchareRhoG,0,rhoRsubplanes,
815  0,nlines_max_rho,"cpcharmparainfo.h");
816  index_tran_pack_rho_y = cmall_itens3(0,nchareRhoG,0,rhoRsubplanes,
817  0,nlines_max_rho,"cpcharmparainfo.h");
818  nline_send_rho_y = cmall_int_mat(0,nchareRhoG,0,rhoRsubplanes,
819  "cpcharmparainfo.h");
820  index_tran_upack_eext_y = cmall_itens3(0,nchareRhoGEext,0,rhoRsubplanes,
821  0,nlines_max_eext,"cpcharmparainfo.h");
822  index_tran_upack_eext_ys= cmall_itens3(0,nchareRhoGEext,0,rhoRsubplanes,
823  0,nlines_max_eext,"cpcharmparainfo.h");
824  index_tran_pack_eext_y = cmall_itens3(0,nchareRhoGEext,0,rhoRsubplanes,
825  0,nlines_max_eext,"cpcharmparainfo.h");
826  index_tran_pack_eext_ys = cmall_itens3(0,nchareRhoGEext,0,rhoRsubplanes,
827  0,nlines_max_eext,"cpcharmparainfo.h");
828  nline_send_eext_y = cmall_int_mat(0,nchareRhoGEext,0,rhoRsubplanes,
829  "cpcharmparainfo.h");
830  numSubGx = new int [rhoRsubplanes];
831  listSubGx = cmall_int_mat(0,rhoRsubplanes,0,ngxSubMax,
832  "charmparainfo");
833  }//endif
834  }//enddif : unpacking
835 #ifdef _CP_DEBUG_PARAINFO_VERBOSE_
836  CkPrintf("CPcharmParaInfo pup 2 \n");
837 #endif
838  PUParray(p,lines_per_chareRhoG, nchareRhoG);
839  PUParray(p,nlines_per_chareRhoG, nchareRhoG);
840  PUParray(p,nlines_per_chareRhoGEext, nchareRhoGEext);
841  PUParray(p,pts_per_chareRhoG, nchareRhoG);
842  PUParray(p,npts_per_chareRhoG, nchareRhoG);
843 
844  for(int igrp=0;igrp<nchareRhoG;igrp++){
845  p|RhosortedRunDescriptors[igrp];
846  }
847  for(int igrp=0;igrp<nchareRhoG;igrp++){
848  PUParray(p,index_tran_upack_rho[igrp],nlines_per_chareRhoG[igrp]);
849  }
850  for(int igrp=0;igrp<nchareRhoGEext;igrp++){
851  PUParray(p,index_tran_upack_eext[igrp],nlines_per_chareRhoGEext[igrp]);
852  }
853  if(rhoRsubplanes>1){
854  PUParray(p,numSubGx,rhoRsubplanes);
855  for(int igrp=0;igrp<nchareRhoG;igrp++){
856  PUParray(p,nline_send_rho_y[igrp],rhoRsubplanes);
857  }
858  for(int igrp=0;igrp<nchareRhoGEext;igrp++){
859  PUParray(p,nline_send_eext_y[igrp],rhoRsubplanes);
860  }
861  for(int igrp=0;igrp<nchareRhoG;igrp++){
862  for(int ic=0;ic<rhoRsubplanes;ic++){
863  PUParray(p,index_tran_pack_rho_y[igrp][ic],nline_send_rho_y[igrp][ic]);
864  PUParray(p,index_tran_upack_rho_y[igrp][ic],nline_send_rho_y[igrp][ic]);
865  }
866  }
867  for(int igrp=0;igrp<nchareRhoGEext;igrp++){
868  for(int ic=0;ic<rhoRsubplanes;ic++){
869  PUParray(p,index_tran_pack_eext_y[igrp][ic],nline_send_eext_y[igrp][ic]);
870  PUParray(p,index_tran_pack_eext_ys[igrp][ic],nline_send_eext_y[igrp][ic]);
871  PUParray(p,index_tran_upack_eext_y[igrp][ic],nline_send_eext_y[igrp][ic]);
872  PUParray(p,index_tran_upack_eext_ys[igrp][ic],nline_send_eext_y[igrp][ic]);
873  }
874  }
875  for(int ic=0;ic<rhoRsubplanes;ic++){
876  PUParray(p,listSubGx[ic],numSubGx[ic]);
877  }//endfor
878 
879  }//endif : subplanes are in use.
880 #ifdef _CP_DEBUG_PARAINFO_VERBOSE_
881  CkPrintf("CPcharmParaInfo pup 3 \n");
882 #endif
883  if(p.isUnpacking()) {
884  ioff_zmat = new int [nlIters];
885  nmem_zmat = new int [nlIters];;
886  lines_per_chareG = new double[nchareG];
887  pts_per_chareG = new double[nchareG];
888  nlines_per_chareG = new int[nchareG];
889  npts_per_chareG = new int[nchareG];
890  index_output_off = new int[nchareG];
891  index_tran_upack = cmall_int_mat(0,nchareG,0,nlines_max,"cpcharmparainfo.h");
892  index_tran_upackNL= cmall_int_mat(0,nchareG,0,nlines_max,"cpcharmparainfo.h");
893  sortedRunDescriptors = new CkVec<RunDescriptor> [nchareG];
894  }//endif : unpacking
895 #ifdef _CP_DEBUG_PARAINFO_VERBOSE_
896  CkPrintf("CPcharmParaInfo pup 4 \n");
897 #endif
898  p(ioff_zmat,nlIters);
899  p(nmem_zmat,nlIters);
900  p(lines_per_chareG,nchareG);
901  p(nlines_per_chareG,nchareG);
902  p(pts_per_chareG,nchareG);
903  p(npts_per_chareG,nchareG);
904  p(index_output_off,nchareG);
905  for(int igrp=0;igrp<nchareG;igrp++){
906  p|sortedRunDescriptors[igrp];
907  }//endfor
908  for(int igrp=0;igrp<nchareG;igrp++){
909  PUParray(p,index_tran_upack[igrp],nlines_per_chareG[igrp]);
910  }//endfor
911  for(int igrp=0;igrp<nchareG;igrp++){
912  PUParray(p,index_tran_upackNL[igrp],nlines_per_chareG[igrp]);
913  }
914 #ifdef _CP_DEBUG_PARAINFO_VERBOSE_
915  CkPrintf("CPcharmParaInfo pup 5 \n");
916 #endif
917  if(p.isUnpacking()){
918  if(sizeX<0|sizeY<0|sizeZ<0|RhosortedRunDescriptors[0].size()<=0){
919 #ifdef _CP_DEBUG_PARAINFO_VERBOSE_
920  }else{
921  CkPrintf("unpacked RhosortedRunDescriptors[0].size()=%d\n",
922  RhosortedRunDescriptors[0].size());
923 #endif
924  }//endif
925  }//endif
926  if(p.isUnpacking()){
927  RCommPkg = new RedundantCommPkg [nchareG];
928  }//endif
929  PUParray(p,RCommPkg,nchareG);
930 #ifdef _CP_DEBUG_PARAINFO_VERBOSE_
931  CkPrintf("end CPcharmParaInfo pup\n");
932 #endif
933  };
934 
935  static CPcharmParaInfo *get(){
936  return &simReadOnly; // return the pointer of the global instance
937  }
938 
939 //----------------------------------------------------------------------------
940  }; // end class
941 ///////////////////////////////////////////////////////////////////////////////
942 
943 
944 ///////////////////////////////////////////////////////////////////////////////
945 PUPmarshall(CPcharmParaInfo);
946 ///////////////////////////////////////////////////////////////////////////////
947 
948 
949 ///////////////////////////////////////////////////////////////////////////////
950 #endif