ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-1.0/libmdtools/PRCG.cpp
Revision: 1334
Committed: Fri Jul 16 18:58:03 2004 UTC (19 years, 11 months ago) by gezelter
File size: 1273 byte(s)
Log Message:
Initial import of OOPSE-1.0 source tree

File Contents

# Content
1 #include "OOPSEMinimizer.hpp"
2 #include "Utility.hpp"
3 void PRCGMinimizer::init(){
4
5 calcG();
6
7 for(int i = 0; i < direction.size(); i++){
8 direction[i] = -curG[i];
9 }
10
11 }
12
13 int PRCGMinimizer::step(){
14 int lsStatus;
15
16 prevF = curF;
17 prevG = curG;
18 prevX = curX;
19
20 //optimize along the search direction and reset minimum point value
21 lsStatus = doLineSearch(direction, stepSize);
22
23 if (lsStatus < 0)
24 return -1;
25 else
26 return 1;
27 }
28
29 void PRCGMinimizer::prepareStep(){
30 vector<double> deltaGrad;
31 double beta;
32 size_t i;
33
34 deltaGrad.resize(ndim);
35
36 //calculate the new direction using Polak-Ribiere Conjugate Gradient
37
38 for(i = 0; i < curG.size(); i++)
39 deltaGrad[i] = curG[i] - prevG[i];
40
41 #ifndef IS_MPI
42 beta = dotProduct(deltaGrad, curG) / dotProduct(prevG, prevG);
43 #else
44 double localDP1;
45 double localDP2;
46 double globalDP1;
47 double globalDP2;
48
49 localDP1 = dotProduct(deltaGrad, curG);
50 localDP2 = dotProduct(prevG, prevG);
51
52 MPI_Allreduce(&localDP1, &globalDP1, 1, MPI_DOUBLE,MPI_SUM, MPI_COMM_WORLD);
53 MPI_Allreduce(&localDP2, &globalDP2, 1, MPI_DOUBLE,MPI_SUM, MPI_COMM_WORLD);
54
55 beta = globalDP1 / globalDP2;
56 #endif
57
58 for(i = 0; i < direction.size(); i++)
59 direction[i] = -curG[i] + beta * direction[i];
60
61 }

Properties

Name Value
svn:executable *