Ejemplo n.º 1
0
            pair<double, double> WGS84Coordinate::project(double lat, double lon) const {
                pair<double, double> result;

                if (abs(lat) < 1e-10 ) {
                    result.first = lon;
                    result.second = -m_ml0;
                } else {
                    double ms;
                    if (abs(sin(lat)) > 1e-10) {
                        ms = msfn(sin(lat), cos(lat), SQUARED_ECCENTRICITY) / sin(lat);
                    } else {
                        ms = 0.0;
                    }
                    result.first = ms * sin(lon *= sin(lat));
                    result.second = (mlfn(lat) - m_ml0) + ms * (1.0 - cos(lon));
                }

                return result;
            }
Ejemplo n.º 2
0
TEST(MiniTensor_ROL, Paraboloid)
{
  bool const
  print_output = ::testing::GTEST_FLAG(print_time);

  // outputs nothing
  Teuchos::oblackholestream
  bhs;

  std::ostream &
  os = (print_output == true) ? std::cout : bhs;

  constexpr Intrepid2::Index
  DIM{2};

  using MSFN = Intrepid2::Paraboloid<Real, DIM>;

  Intrepid2::Vector<Real, DIM>
  min(0.0, 0.0);

  MSFN
  msfn(0.0, 0.0);

  ROL::MiniTensor_Objective<MSFN, Real, DIM>
  obj(msfn);

  // Set parameters.
  Teuchos::ParameterList
  params;

  params.sublist("Step").sublist("Line Search").sublist("Descent Method")
      .set("Type", "Newton-Krylov");

  params.sublist("Status Test").set("Gradient Tolerance", 10.e-12);
  params.sublist("Status Test").set("Step Tolerance", 1.0e-14);
  params.sublist("Status Test").set("Iteration Limit", 128);

  // Define algorithm.
  ROL::Algorithm<Real>
  algo("Line Search", params);

  // Set Initial Guess
  Intrepid2::Vector<Real, DIM>
  xval(Intrepid2::RANDOM);

  ROL::MiniTensorVector<Real, DIM> x(xval);

  // Run Algorithm
  algo.run(x, obj, true, os);

  Intrepid2::Vector<Real, DIM> const
  sol = ROL::MTfromROL<Real, DIM>(x);

  os << "Solution : " << sol << '\n';

  Real const
  epsilon{Intrepid2::machine_epsilon<Real>()};

  Real const
  error = Intrepid2::norm(sol - min);

  ASSERT_LE(error, epsilon);
}