ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/NonlinearCons.cpp
Revision: 1011
Committed: Tue Feb 3 20:47:10 2004 UTC (20 years, 5 months ago) by tim
File size: 1988 byte(s)
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 tim 1011 #include "NonlinearCons.hpp"
2    
3     NonlinearCons::NonlinearCons(vector<int>& theIndex, NLModel* theModel , double b, BoundType bType)
4     :ConstraintBase(){
5    
6     if(theIndex.size() != theModel->getDim()){
7     cout << "NonlinearCons Error: the dimension of index and the model does not match" << endl;
8     exit(ERROR_CONSTRAINT);
9     }
10    
11     bound = b;
12     boundType = bType;
13    
14     if(bType == btEqu){
15     consType = nonlinearEqu;
16     }
17     else{
18     consType = nonlinearInequ;
19     }
20    
21     index = theIndex;
22     model = theModel;
23     }
24    
25     NonlinearCons::NonlinearCons(int dim, vector<int>& theIndex, NLModel* theModel , double b, BoundType bType)
26     :ConstraintBase(dim){
27    
28     if(dim != theModel->getDim()){
29     cout << "NonlinearCons Error: the dimension of index and the model does not match" << endl;
30     exit(ERROR_CONSTRAINT);
31     }
32    
33     bound = b;
34     boundType = bType;
35    
36     if(bType == btEqu){
37     consType = nonlinearEqu;
38     }
39     else{
40     consType = nonlinearInequ;
41     }
42    
43     index = theIndex;
44     model = theModel;
45     }
46    
47    
48     void NonlinearCons::setDim(int dim){
49    
50     if(dim != model->getDim()){
51     cout << "NonlinearCons Error: the dimension of index and the model does not match" << endl;
52     exit(ERROR_CONSTRAINT);
53     }
54    
55     ConstraintBase::setDim(dim);
56    
57     }
58    
59     double NonlinearCons::calcResidual(vector<double>& x){
60     double fVal;
61    
62     fVal = model->calcF(x);
63    
64     fVal -= bound;
65    
66     if(boundType == btLower)
67     fVal = -fVal;
68    
69     return fVal;
70     }
71    
72     vector<double> NonlinearCons::calcConsGrad(vector<double>& x){
73     vector<double> consGrad(ndim);
74    
75     consGrad = model->calcGrad(x);
76    
77     if(boundType == btLower){
78     for(int i = 0; i < consGrad.size(); i++)
79     consGrad[i] = -consGrad[i];
80     }
81    
82     return consGrad;
83     }
84    
85     SymMatrix NonlinearCons::calcConsHessian(vector<double>& x){
86     SymMatrix H(ndim);
87    
88     H = model->calcHessian(x);
89    
90     if(boundType == btLower){
91     //H = -H;
92     }
93    
94     return H;
95     }

Properties

Name Value
svn:executable *