OpenAtom  Version1.5a
CP_LargeSP_RhoGSpacePlane.C
Go to the documentation of this file.
1 /*****************************************************************************
2  * $Source$
3  * $Author$
4  * $Date$
5  * $Revision$
6  *****************************************************************************/
7 
8 //////////////////////////////////////////////////////////////////////////////
9 //////////////////////////////////////////////////////////////////////////////
10 //////////////////////////////////////////////////////////////////////////////
11 /** \file CP_LargeSP_RhoGSpacePlane.C
12  * @defgroup LargeSparse LargeSparse
13  *
14  * \brief Extension module to support QM/MM computations by using a dual grid interpolation scheme between the small box (QM) and large box (MM) scheme.
15  *
16  * This is the description of the "life" of a CP_LargeSP_RhoGSpacePlane object.
17  *
18  * At the start of the program, the constructor CP_LargeSP_RhoGSpacePlane() is called.
19  *
20  * CP_LargeSP_RhoGSpacePlanes receive the FFT transpose from
21  * CP_LargeSP_RhoRealSpacePlane. They then receive S(g) from the
22  * large box MD code (NAMD) and combine that with the charge grid to
23  * compute the QM force contribution. The QM force contribution is
24  * then returned to the MD code (using a ckcallback?). Finally, the
25  * grid is FFT transposed back to CP_LargeSP_RhoRealSpacePlane.
26  */
27 //////////////////////////////////////////////////////////////////////////////
28 
29 #include "charm++.h"
30 #include <iostream>
31 #include <fstream>
32 #include <cmath>
33 
34 #include "debug_flags.h"
35 #include "utility/util.h"
36 #include "main/cpaimd.h"
39 #include "src_piny_physics_v1.0/include/class_defs/CP_OPERATIONS/class_cpxcfnctls.h"
40 
41 //////////////////////////////////////////////////////////////////////////////
42 extern CProxy_TimeKeeper TimeKeeperProxy;
43 extern CkVec <CProxy_FFTcache> UfftCacheProxy;
44 extern CkVec <CProxy_GSpaceDriver> UgSpaceDriverProxy;
45 
46 
47 extern CkGroupID mCastGrpId;
48 
49 extern Config config;
50 extern int nstates;
51 
52 bool is_pow2(int );
53 
54 
55 /** @addtogroup LargeSparse
56  @{
57 */
58 
59 //////////////////////////////////////////////////////////////////////////////
60 //////////////////////////////////////////////////////////////////////////////
61 //////////////////////////////////////////////////////////////////////////////
62 ///
63 /// This class (array) accepts the real space densities from all the Rho_Gs.
64 /// Interpolates onto the larger grid, FFT transpose to LargeSP_RhoG,
65 /// receive the ifft from LargeSP_RhoG and ungrid back to Rho_Gs.
66 ///
67 //////////////////////////////////////////////////////////////////////////////
68 CP_LargeSP_RhoGSpacePlane::CP_LargeSP_RhoGSpacePlane(
69  UberCollection _instance) :
70  thisInstance(_instance)
71 //////////////////////////////////////////////////////////////////////////////
72  {//begin routine
73 //////////////////////////////////////////////////////////////////////////////
74 
75 #ifdef _CP_DEBUG_LARGESP_RHOG_VERBOSE_
76  CkPrintf("[%d] LargeSP_RhoG constructs \n",thisIndex.x);
77 #endif
78 
79 //////////////////////////////////////////////////////////////////////////////
80 /// Get parameters from the globals/groups
81 
82  CPcharmParaInfo *sim = CPcharmParaInfo::get();
83 
84 
85 
86 //////////////////////////////////////////////////////////////////////////////
87 /// handle class member local initialization
88 
89 
90 
91 //////////////////////////////////////////////////////////////////////////////
92 /// Migration
93 
94  usesAtSync = true;
95  setMigratable(false);
96 
97 
98 //---------------------------------------------------------------------------
99  }//end routine
100 //////////////////////////////////////////////////////////////////////////////
101 
102 /** post constructor initialization */
103 //////////////////////////////////////////////////////////////////////////////
104 //////////////////////////////////////////////////////////////////////////////
105 //////////////////////////////////////////////////////////////////////////////
107 
108 /// place holder
109 
110 //---------------------------------------------------------------------------
111 }
112 //////////////////////////////////////////////////////////////////////////////
113 
114 
115 //////////////////////////////////////////////////////////////////////////////
116 //////////////////////////////////////////////////////////////////////////////
117 //////////////////////////////////////////////////////////////////////////////
118 CP_LargeSP_RhoGSpacePlane::~CP_LargeSP_RhoGSpacePlane(){
119 
120 //---------------------------------------------------------------------------
121 }
122 //////////////////////////////////////////////////////////////////////////////
123 
124 
125 //////////////////////////////////////////////////////////////////////////////
126 //////////////////////////////////////////////////////////////////////////////
127 //////////////////////////////////////////////////////////////////////////////
128 /// Pup my variables for migration
129 //////////////////////////////////////////////////////////////////////////////
131  ArrayElement1D::pup(p);
132 //---------------------------------------------------------------------------
133  }//end routine
134 //////////////////////////////////////////////////////////////////////////////
135 
136 
137 //////////////////////////////////////////////////////////////////////////////
138 //////////////////////////////////////////////////////////////////////////////
139 //////////////////////////////////////////////////////////////////////////////
140 ///
141 /// Data comes from LargeSP_RhoReal once an algorithm step.
142 /**
143  * Here the density is interpolated onto the large grid.
144  */
145 //////////////////////////////////////////////////////////////////////////////
147 //////////////////////////////////////////////////////////////////////////////
148 
149 #ifdef _CP_DEBUG_LARGE_RHOREAL_VERBOSE_
150  CkPrintf("LSP_RhoG accepting LSPRhoR %d %d\n",
151  thisIndex.x,CkMyPe());
152 #endif
153 
154 
155 
156 //----------------------------------------------------------------------------
157  }//end routine
158 //////////////////////////////////////////////////////////////////////////////
159 
160 //////////////////////////////////////////////////////////////////////////////
161 //////////////////////////////////////////////////////////////////////////////
162 //////////////////////////////////////////////////////////////////////////////
163 ///
164 /// Data comes from MD once an algorithm step.
165 /**
166  * Here the density is interpolated onto the large grid.
167  */
168 //////////////////////////////////////////////////////////////////////////////
170 //////////////////////////////////////////////////////////////////////////////
171 
172 #ifdef _CP_DEBUG_LARGE_MDSG_VERBOSE_
173  CkPrintf("LSP_RhoG accepting MDSg %d %d \n",
174  thisIndex.x,CkMyPe());
175 #endif
176 
177 
178 
179 //----------------------------------------------------------------------------
180  }//end routine
181 //////////////////////////////////////////////////////////////////////////////
182 
183 /*@}*/
bool is_pow2(int)
return tru if input is power of 2
holds the UberIndex and the offset for proxies
Definition: Uber.h:68
Add type declarations for simulationConstants class (readonly vars) and once class for each type of o...
void acceptLSPRhoR()
Data comes from LargeSP_RhoReal once an algorithm step.
CkGroupID mCastGrpId
Multicast manager group that handles many mcast/redns in the code. Grep for info. ...
Definition: cpaimd.C:216
Some basic data structures and the array map classes are defined here.
Useful debugging flags.
void acceptMDSg()
Data comes from MD once an algorithm step.
void pup(PUP::er &)
Pup my variables for migration.
void init()
post constructor initialization