15 using namespace linal;
17 static inline double max (double a, double b)
19 return (a > b) ? a : b;
22 double ans (double x, double y, double t)
24 return x*sin (y + t) *ipow (cos (x), 4);
27 double f (double x, double y, double t,
28 double mu, double sigma)
30 return ipow (cos (x), 2) *
31 (x*cos (y + t) *ipow (cos (x), 2)
32 + sigma*sin (y + t) *ipow (cos (x), 2) *x + 9*mu*sin (y + t) *sin (x) *cos (x)
33 - 15*mu*sin (y + t) *x + 20*mu*sin (y + t) *x*ipow (cos (x), 2) );
50 double dlat = M_PI / (nlat - 1);
51 double dlon = 2. * M_PI / nlon;
56 vector < double > u (nlat * nlon);
57 vector < double > v (nlat * nlon);
58 vector < double > r (nlat * nlon);
60 SphereChafe chafe (conf);
64 for (i = 0; i < nlat; ++i)
66 for (j = 0; j < nlon; ++j)
68 double phi = -0.5 * M_PI + i * dlat;
69 double lambda = j * dlon;
71 r[i * nlon + j] = ans (phi, lambda, t);
77 chafe.calc (&u[0], &r[0], t);
83 for (i = 0; i < nlat; ++i)
85 for (j = 0; j < nlon; ++j)
87 double phi = -0.5 * M_PI + i * dlat;
88 double lambda = j * dlon;
90 v[i * nlon + j] = ans (phi, lambda, t);
91 nev1 = max (nev1, fabs (u[i * nlon + j] - v[i * nlon + j] ) );
93 // fprintf(stderr, "%.16lf %.16lf \n", u[i * nlon + j], v[i * nlon + j]);
97 fprintf (stderr, "nev1=%.16le \n", nev1);
105 int main (int argc, char * argv[])