IGMPlot 3.16 Optimized IGMplot version able to use wfn/wfx/xyz files

Loading...
Searching...
No Matches
Node.h
Go to the documentation of this file.
1/*
2 * Copyright University of Reims Champagne-Ardenne
3 * Authors and Contributors: Akilan RAJAMANI, Corentin LEFEBVRE, Johanna KLEIN,
4 * Emmanuel PLUOT, Hugo ROUSSEL, Gaetan RUBEZ, Hassan KHARTABIL,
5 * Jean-Charles BOISSON and Eric HENON
6 * (24/07/2017)
7 * jean-charles.boisson@univ-reims.fr, eric.henon@univ-reims.fr
8 *
9 * This software is a computer program whose purpose is to
10 * detect and quantify interactions from electron density
11 * obtained either internally from promolecular density or
12 * calculated from an input wave function input file. It also
13 * prepares for the visualization of isosurfaces representing
14 * several descriptors (dg) coming from the IGM methodology.
15 *
16 * This software is governed by the CeCILL-C license under French law and
17 * abiding by the rules of distribution of free software. You can use,
18 * modify and/ or redistribute the software under the terms of the CeCILL-C
19 * license as circulated by CEA, CNRS and INRIA at the following URL
20 * "http://www.cecill.info".
21 *
22 * As a counterpart to the access to the source code and rights to copy,
23 * modify and redistribute granted by the license, users are provided only
24 * with a limited warranty and the software's author, the holder of the
25 * economic rights, and the successive licensors have only limited
26 * liability.
27 *
28 * In this respect, the user's attention is drawn to the risks associated
29 * with loading, using, modifying and/or developing or reproducing the
30 * software by the user in light of its specific status of free software,
31 * that may mean that it is complicated to manipulate, and that also
32 * therefore means that it is reserved for developers and experienced
33 * professionals having in-depth computer knowledge. Users are therefore
34 * encouraged to load and test the software's suitability as regards their
35 * requirements in conditions enabling the security of their systems and/or
36 * data to be ensured and, more generally, to use and operate it in the
37 * same conditions as regards security.
38 *
39 * The fact that you are presently reading this means that you have had
40 * knowledge of the CeCILL-C license and that you accept its terms.
41 *
42 * */
43
48
49#ifndef _NODE_H_
50#define _NODE_H_
51
52// LOCAL
53#include <Results.h>
54//#include <ProgData.h>
55
58 class Node
59{
60
61 private :
62
63 // Variables relevant to the node itself
64
66 int nbAtom;
67
69 int nbAtomMolA;
70
72 LocalData * data;
73
75 ProgData & pdata;
76
77 // Variables relevant in the computing of density and, therefore, gradiant and hessian values
78
80 double * __restrict diffX;
81
83 double * __restrict diffY;
84
86 double * __restrict diffZ;
87
89 double * __restrict squareX;
90
92 double * __restrict squareY;
93
95 double * __restrict squareZ;
96
98 double * __restrict rho1;
99
101 double * __restrict rho2;
102
104 double * __restrict rho3;
105
107 double * __restrict distance;
108
110 double rho;
111
113 double contribution;
114
115 // Determinant value
116 // NOT USED
117 //double determinant;
118
120 bool shouldCompute;
121
122 // Variables relevant in the computing of the gradient and hessian values
123
125 double hess[6];
126
128 double lambdas[3];
129
131 double eigV[3][3]; // a static ARRAY
132
134 axis_t partialGradient;
135
137 double sumBRho;
138
140 double sumSquareBRho;
141
143 double multInvR;
144
146 double squareMultInvR;
147
148 // Lambda processing values : a (TO DOCUMENT)
149 // NOT USED
150 //double a;
151
152 // Lambda processing values : b (TO DOCUMENT)
153 // NOT USED
154 //double b;
155
156 // Lambda processing values : c (TO DOCUMENT)
157 // NOT USED
158 //double c;
159
160 // Lambda processing values : p (TO DOCUMENT)
161 // NOT USED
162 //double p;
163
164 // Lambda processing values : q (TO DOCUMENT)
165 // NOT USED
166 //double q;
167
169 // double opti;array over atoms
170 double * __restrict opti;
171
173 double opti2;
174
175 // Optimization value 3
176 // NOT USED
177 //double opti3;
178
180 double tmp;
181
182 // Miscealenous constants
183
185 static const int X = 0;
186
188 static const int Y = 1;
189
191 static const int Z = 2;
192
194 int lol2;
195
196 public :
197
204 Node(int nbAtomParam, int nbAtomMolAParam, ProgData &pdataParam);
205
209 ~Node();
210
217 void computeDensity(axis_t & __restrict posGrid, param_t & __restrict params);
218
222 void computeGradHess();
226 void reComputeGrad();
227
231 void sortLambdas();
232
236 void computeSortLambdas();
237
245 void process( axis_t & posGrid, int index, Results &results, param_t & params );
246
250 void diagonalizeHessian();
251
256 void basisChange(double matrixHessianEigVec[3][3]);
257
258
259}; // end of class Node
260
261#endif
Results.h
Manage the results of the application.
LocalData
Class designed to store Gradient related values and provide some utilities concerning those.
Definition LocalData.h:61
Node::sumBRho
double sumBRho
Sum multiplications of rhos' values and B values.
Definition Node.h:137
Node::process
void process(axis_t &posGrid, int index, Results &results, param_t &params)
Process all the information for an entire line of the grid.
Definition Node.cpp:366
Node::hess
double hess[6]
Six hessian values.
Definition Node.h:125
Node::diffX
double *__restrict diffX
Differences between node position and atom's position over x axis.
Definition Node.h:80
Node::Y
static const int Y
Constant used for accessing y axis in three element's array.
Definition Node.h:188
Node::distance
double *__restrict distance
Distance value between the node position and the atom.
Definition Node.h:107
Node::squareZ
double *__restrict squareZ
Square of difference value "diffZ" over the z axis.
Definition Node.h:95
Node::multInvR
double multInvR
Multiplicative inverse of the distance.
Definition Node.h:143
Node::rho1
double *__restrict rho1
Rho value processed over the x axis.
Definition Node.h:98
Node::opti2
double opti2
Optimization value 2.
Definition Node.h:173
Node::diffZ
double *__restrict diffZ
Differences between node position and atom's position over z axis.
Definition Node.h:86
Node::computeSortLambdas
void computeSortLambdas()
Function used to compute and sort lambdas' values.
Definition Node.cpp:323
Node::tmp
double tmp
Temporary value.
Definition Node.h:180
Node::nbAtomMolA
int nbAtomMolA
The number of atom in molecule A.
Definition Node.h:69
Node::reComputeGrad
void reComputeGrad()
Computes gradient only, ig ED gradiet have already been computed before.
Definition Node.cpp:259
Node::rho3
double *__restrict rho3
Rho value processed over the z axis.
Definition Node.h:104
Node::Z
static const int Z
Constant used for accessing z axis in three element's array.
Definition Node.h:191
Node::squareX
double *__restrict squareX
Square of difference value "diffX" over the x axis.
Definition Node.h:89
Node::squareMultInvR
double squareMultInvR
Square of the multiplicative inverse of the distance.
Definition Node.h:146
Node::pdata
ProgData & pdata
The program's data.
Definition Node.h:75
Node::rho
double rho
Rho value processed during density processing.
Definition Node.h:110
Node::computeDensity
void computeDensity(axis_t &__restrict posGrid, param_t &__restrict params)
Computes density.
Definition Node.cpp:107
Node::lol2
int lol2
TO DOCUMENT.
Definition Node.h:194
Node::partialGradient
axis_t partialGradient
Partial gradients added to process gradient values.
Definition Node.h:134
Node::rho2
double *__restrict rho2
Rho value processed over the y axis.
Definition Node.h:101
Node::X
static const int X
Constant used for accessing x axis in three element's array.
Definition Node.h:185
Node::~Node
~Node()
Destructor.
Definition Node.cpp:81
Node::diffY
double *__restrict diffY
Differences between node position and atom's position over y axis.
Definition Node.h:83
Node::sortLambdas
void sortLambdas()
Sorting function used to sort lambdas' values.
Definition Node.cpp:292
Node::Node
Node(int nbAtomParam, int nbAtomMolAParam, ProgData &pdataParam)
Main constructor.
Definition Node.cpp:55
Node::contribution
double contribution
Contribution value processed during density processing.
Definition Node.h:113
Node::basisChange
void basisChange(double matrixHessianEigVec[3][3])
basis change for every vector of the IGM approach : ED gradient, ED IGM gradient, ....
Definition Node.cpp:522
Node::lambdas
double lambdas[3]
Three lambda's values (eigenvalues of the ED hessian)
Definition Node.h:128
Node::shouldCompute
bool shouldCompute
Tells if the density matched the desired values.
Definition Node.h:120
Node::sumSquareBRho
double sumSquareBRho
Sum multiplications of rhos' values and squares of B values.
Definition Node.h:140
Node::data
LocalData * data
The local data' values.
Definition Node.h:72
Node::squareY
double *__restrict squareY
Square of difference value "diffY" over the y axis.
Definition Node.h:92
Node::nbAtom
int nbAtom
The number of atom, both molecule combined.
Definition Node.h:66
Node::computeGradHess
void computeGradHess()
Computes gradient and hessian's values.
Definition Node.cpp:192
Node::eigV
double eigV[3][3]
Three eigenvectors.
Definition Node.h:131
Node::opti
double *__restrict opti
Optimization value 1.
Definition Node.h:170
ProgData
Class designed to store the program's main dataprovide some utilities concerning those.
Definition ProgData.h:65
Results
Class designed to store all results that can be used as output by the program.
Definition Results.h:67
axis_t
Structure describing one axis.
Definition general.h:694
param_t
Structure used for the storage of the parameters read from the parameter file param....
Definition general.h:560