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

# User Rev Content
1 gezelter 1334 #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 *