73 int main(
int argc,
char* argv[]) {
76 Teuchos::GlobalMPISession mpiSession(&argc, &argv);
79 int iprint = argc - 1;
80 Teuchos::RCP<std::ostream> outStream;
81 Teuchos::oblackholestream bhs;
83 outStream = Teuchos::rcp(&std::cout,
false);
85 outStream = Teuchos::rcp(&bhs,
false);
90 Teuchos::ParameterList parlist;
91 std::string paramfile =
"parameters.xml";
92 Teuchos::updateParametersFromXmlFile(paramfile,Teuchos::Ptr<Teuchos::ParameterList>(&parlist));
94 int ni = parlist.get(
"Interior Grid Points",50);
95 double gnl = parlist.get(
"Nonlinearity Coefficient g",10.00);
96 bool useRiesz = parlist.get(
"Use Riesz Map",
true);
97 std::string filename = parlist.get(
"Output File Name",
"results.csv");
99 std::ofstream outfile(filename.c_str());
104 Teuchos::RCP<Teuchos::LAPACK<int,RealT> >lapack =
105 Teuchos::rcp(
new Teuchos::LAPACK<int,RealT>() );
106 Teuchos::RCP<NodalBasis<RealT> > nb = Teuchos::rcp(
new NodalBasis<RealT>(lapack,ni+2,nq));
109 std::vector<RealT> L(ni*nq,0);
110 std::copy(nb->L_.begin()+nq,nb->L_.end()-nq,L.begin());
111 std::vector<RealT> Lp(ni*nq,0);
112 std::copy(nb->Lp_.begin()+nq,nb->Lp_.end()-nq,Lp.begin());
115 std::vector<RealT> x(nb->xq_);
118 std::vector<RealT> w(nb->wq_);
121 Teuchos::RCP<InnerProductMatrix<RealT> > mass =
125 Teuchos::RCP<InnerProductMatrix<RealT> > kinetic =
129 Teuchos::RCP<InnerProductMatrix<RealT> > nonlinear =
133 std::vector<RealT> v(nq,0);
134 for(
int i=0;i<nq;++i){
135 v[i] = 100*x[i]*x[i];
138 Teuchos::RCP<InnerProductMatrix<RealT> > potential =
142 Teuchos::RCP<std::vector<RealT> > psi_rcp = Teuchos::rcp(
new std::vector<RealT> (ni, 0.0) );
145 for(
int i=0;i<ni;++i){
146 (*psi_rcp)[i]=(1+nb->xi_[i+1])*(1-nb->xi_[i+1])*sqrt(15.0/16.0);
151 Teuchos::RCP<std::vector<RealT> > c_rcp = Teuchos::rcp(
new std::vector<RealT> (1, 0.0) );
155 Teuchos::RCP<std::vector<RealT> > lam_rcp = Teuchos::rcp(
new std::vector<RealT> (1, 0.0) );
177 Teuchos::RCP<std::vector<RealT> > g_rcp = Teuchos::rcp(
new std::vector<RealT> (ni, 0.0) );
181 Teuchos::RCP<Objective<RealT> > obj =
183 (ni,gnl,nb,kinetic,potential,nonlinear));
186 Teuchos::RCP<EqualityConstraint<RealT> > constr =
190 RealT left = -1e0, right = 1e0;
191 Teuchos::RCP<std::vector<RealT> > xtest_rcp = Teuchos::rcp(
new std::vector<RealT> (ni, 0.0) );
192 Teuchos::RCP<std::vector<RealT> > d_rcp = Teuchos::rcp(
new std::vector<RealT> (ni, 0.0) );
193 Teuchos::RCP<std::vector<RealT> > gd_rcp = Teuchos::rcp(
new std::vector<RealT> (ni, 0.0) );
194 Teuchos::RCP<std::vector<RealT> > vd_rcp = Teuchos::rcp(
new std::vector<RealT> (ni, 0.0) );
195 Teuchos::RCP<std::vector<RealT> > vc_rcp = Teuchos::rcp(
new std::vector<RealT> (1, 0.0) );
196 Teuchos::RCP<std::vector<RealT> > vl_rcp = Teuchos::rcp(
new std::vector<RealT> (1, 0.0) );
205 for (
int i=0; i<ni; i++) {
206 (*xtest_rcp)[i] = ( (
RealT)rand() / (
RealT)RAND_MAX ) * (right - left) + left;
207 (*d_rcp)[i] = ( (
RealT)rand() / (
RealT)RAND_MAX ) * (right - left) + left;
208 (*gd_rcp)[i] = ( (
RealT)rand() / (
RealT)RAND_MAX ) * (right - left) + left;
209 (*vd_rcp)[i] = ( (
RealT)rand() / (
RealT)RAND_MAX ) * (right - left) + left;
213 (*vc_rcp)[0] = ( (
RealT)rand() / (
RealT)RAND_MAX ) * (right - left) + left;
214 (*vl_rcp)[0] = ( (
RealT)rand() / (
RealT)RAND_MAX ) * (right - left) + left;
216 obj->checkGradient(xtest, g, d,
true, *outStream); *outStream <<
"\n";
217 obj->checkHessVec(xtest, g, vd,
true, *outStream); *outStream <<
"\n";
218 obj->checkHessSym(xtest, g, d, vd,
true, *outStream); *outStream <<
"\n";
219 constr->checkApplyJacobian(xtest, vd, vc,
true, *outStream); *outStream <<
"\n";
220 constr->checkApplyAdjointJacobian(xtest, vl, vc, g,
true, *outStream); *outStream <<
"\n";
221 constr->checkApplyAdjointHessian(xtest, vl, d, g,
true, *outStream); *outStream <<
"\n";
226 parlist.set(
"Nominal SQP Optimality Solver Tolerance", 1.e-4);
227 parlist.set(
"Maximum Number of Krylov Iterations",80);
228 parlist.set(
"Absolute Krylov Tolerance",1e-4);
244 std::vector<std::string> output = algo.
run(psi, g, lam, c, *obj, *constr,
false);
246 for (
unsigned i = 0; i < output.size(); i++ ) {
247 *outStream << output[i];
255 outfile <<
"-1,0" << std::endl;
256 for(
int i=0;i<ni;++i) {
257 outfile << nb->xi_[i+1] <<
"," << (*psi_rcp)[i] << std::endl;
259 outfile <<
"1,0" << std::endl;
262 std::cout <<
"End Result: TEST FAILED\n";
264 std::cout <<
"End Result: TEST PASSED\n";
Teuchos::RCP< const AlgorithmState< Real > > getState(void) const
virtual std::vector< std::string > run(Vector< Real > &x, Objective< Real > &obj, bool print=false, std::ostream &outStream=std::cout)
Run algorithm on unconstrained problems (Type-U). This is the primary Type-U interface.
Implements the computation of optimization steps with composite-step trust-region SQP methods...
This class adds a solve method.
int main(int argc, char *argv[])