16 #include <deal.II/base/tensor.h> 17 #include <deal.II/base/point.h> 18 #include <deal.II/base/function_lib.h> 19 #include <deal.II/base/function_bessel.h> 20 #include <deal.II/lac/vector.h> 24 DEAL_II_NAMESPACE_OPEN
30 # define M_PI 3.14159265358979323846 34 # define M_PI_2 1.57079632679489661923 46 const unsigned int)
const 65 std::vector<double> &values,
66 const unsigned int)
const 68 Assert (values.size() == points.size(),
69 ExcDimensionMismatch(values.size(), points.size()));
71 for (
unsigned int i=0; i<points.size(); ++i)
82 const unsigned int)
const 91 std::vector<double> &values,
92 const unsigned int)
const 94 Assert (values.size() == points.size(),
95 ExcDimensionMismatch(values.size(), points.size()));
97 for (
unsigned int i=0; i<points.size(); ++i)
106 const unsigned int)
const 128 const unsigned int)
const 130 Assert (gradients.size() == points.size(),
131 ExcDimensionMismatch(gradients.size(), points.size()));
133 for (
unsigned int i=0; i<points.size(); ++i)
144 const unsigned int)
const 146 Assert (dim>=2, ExcInternalError());
155 std::vector<double> &values,
156 const unsigned int)
const 158 Assert (dim>=2, ExcInternalError());
159 Assert (values.size() == points.size(),
160 ExcDimensionMismatch(values.size(), points.size()));
162 for (
unsigned int i=0; i<points.size(); ++i)
165 values[i] = p(0)*p(1);
176 Assert (dim>=2, ExcInternalError());
177 Assert (values.size() == points.size(),
178 ExcDimensionMismatch(values.size(), points.size()));
179 Assert(values[0].size() == 1, ExcDimensionMismatch(values[0].size(), 1));
181 for (
unsigned int i=0; i<points.size(); ++i)
184 values[i](0) = p(0)*p(1);
192 const unsigned int)
const 194 Assert (dim>=2, ExcInternalError());
202 std::vector<double> &values,
203 const unsigned int)
const 205 Assert (dim>=2, ExcInternalError());
206 Assert (values.size() == points.size(),
207 ExcDimensionMismatch(values.size(), points.size()));
209 for (
unsigned int i=0; i<points.size(); ++i)
218 const unsigned int)
const 220 Assert (dim>=2, ExcInternalError());
233 const unsigned int)
const 235 Assert (dim>=2, ExcInternalError());
236 Assert (gradients.size() == points.size(),
237 ExcDimensionMismatch(gradients.size(), points.size()));
239 for (
unsigned int i=0; i<points.size(); ++i)
241 gradients[i][0] = points[i](1);
242 gradients[i][1] = points[i](0);
253 Assert (dim>=2, ExcInternalError());
254 Assert (gradients.size() == points.size(),
255 ExcDimensionMismatch(gradients.size(), points.size()));
256 Assert(gradients[0].size() == 1,
257 ExcDimensionMismatch(gradients[0].size(), 1));
259 for (
unsigned int i=0; i<points.size(); ++i)
261 gradients[i][0][0] = points[i](1);
262 gradients[i][0][1] = points[i](0);
280 const unsigned int)
const 285 return 1.-p(0)*p(0)+offset;
287 return (1.-p(0)*p(0))*(1.-p(1)*p(1))+offset;
289 return (1.-p(0)*p(0))*(1.-p(1)*p(1))*(1.-p(2)*p(2))+offset;
291 Assert(
false, ExcNotImplemented());
299 std::vector<double> &values,
300 const unsigned int)
const 302 Assert (values.size() == points.size(),
303 ExcDimensionMismatch(values.size(), points.size()));
305 for (
unsigned int i=0; i<points.size(); ++i)
311 values[i] = 1.-p(0)*p(0)+offset;
314 values[i] = (1.-p(0)*p(0))*(1.-p(1)*p(1))+offset;
317 values[i] = (1.-p(0)*p(0))*(1.-p(1)*p(1))*(1.-p(2)*p(2))+offset;
320 Assert(
false, ExcNotImplemented());
330 const unsigned int)
const 337 return -2.*((1.-p(0)*p(0))+(1.-p(1)*p(1)));
339 return -2.*((1.-p(0)*p(0))*(1.-p(1)*p(1))
340 +(1.-p(1)*p(1))*(1.-p(2)*p(2))
341 +(1.-p(2)*p(2))*(1.-p(0)*p(0)));
343 Assert(
false, ExcNotImplemented());
351 std::vector<double> &values,
352 const unsigned int)
const 354 Assert (values.size() == points.size(),
355 ExcDimensionMismatch(values.size(), points.size()));
357 for (
unsigned int i=0; i<points.size(); ++i)
366 values[i] = -2.*((1.-p(0)*p(0))+(1.-p(1)*p(1)));
369 values[i] = -2.*((1.-p(0)*p(0))*(1.-p(1)*p(1))
370 +(1.-p(1)*p(1))*(1.-p(2)*p(2))
371 +(1.-p(2)*p(2))*(1.-p(0)*p(0)));
374 Assert(
false, ExcNotImplemented());
382 const unsigned int)
const 388 result[0] = -2.*p(0);
391 result[0] = -2.*p(0)*(1.-p(1)*p(1));
392 result[1] = -2.*p(1)*(1.-p(0)*p(0));
395 result[0] = -2.*p(0)*(1.-p(1)*p(1))*(1.-p(2)*p(2));
396 result[1] = -2.*p(1)*(1.-p(0)*p(0))*(1.-p(2)*p(2));
397 result[2] = -2.*p(2)*(1.-p(0)*p(0))*(1.-p(1)*p(1));
400 Assert(
false, ExcNotImplemented());
409 const unsigned int)
const 411 Assert (gradients.size() == points.size(),
412 ExcDimensionMismatch(gradients.size(), points.size()));
414 for (
unsigned int i=0; i<points.size(); ++i)
420 gradients[i][0] = -2.*p(0);
423 gradients[i][0] = -2.*p(0)*(1.-p(1)*p(1));
424 gradients[i][1] = -2.*p(1)*(1.-p(0)*p(0));
427 gradients[i][0] = -2.*p(0)*(1.-p(1)*p(1))*(1.-p(2)*p(2));
428 gradients[i][1] = -2.*p(1)*(1.-p(0)*p(0))*(1.-p(2)*p(2));
429 gradients[i][2] = -2.*p(2)*(1.-p(0)*p(0))*(1.-p(1)*p(1));
432 Assert(
false, ExcNotImplemented());
450 const unsigned int)
const 455 return std::cos(M_PI_2*p(0));
457 return std::cos(M_PI_2*p(0)) * std::cos(M_PI_2*p(1));
459 return std::cos(M_PI_2*p(0)) * std::cos(M_PI_2*p(1)) * std::cos(M_PI_2*p(2));
461 Assert(
false, ExcNotImplemented());
469 std::vector<double> &values,
470 const unsigned int)
const 472 Assert (values.size() == points.size(),
473 ExcDimensionMismatch(values.size(), points.size()));
475 for (
unsigned int i=0; i<points.size(); ++i)
476 values[i] =
value(points[i]);
486 Assert (values.size() == points.size(),
487 ExcDimensionMismatch(values.size(), points.size()));
489 for (
unsigned int i=0; i<points.size(); ++i)
491 const double v =
value(points[i]);
492 for (
unsigned int k=0; k<values[i].size(); ++k)
501 const unsigned int)
const 506 return -M_PI_2*M_PI_2* std::cos(M_PI_2*p(0));
508 return -2*M_PI_2*M_PI_2* std::cos(M_PI_2*p(0)) * std::cos(M_PI_2*p(1));
510 return -3*M_PI_2*M_PI_2* std::cos(M_PI_2*p(0)) * std::cos(M_PI_2*p(1)) * std::cos(M_PI_2*p(2));
512 Assert(
false, ExcNotImplemented());
520 std::vector<double> &values,
521 const unsigned int)
const 523 Assert (values.size() == points.size(),
524 ExcDimensionMismatch(values.size(), points.size()));
526 for (
unsigned int i=0; i<points.size(); ++i)
533 const unsigned int)
const 539 result[0] = -M_PI_2* std::sin(M_PI_2*p(0));
542 result[0] = -M_PI_2* std::sin(M_PI_2*p(0)) * std::cos(M_PI_2*p(1));
543 result[1] = -M_PI_2* std::cos(M_PI_2*p(0)) * std::sin(M_PI_2*p(1));
546 result[0] = -M_PI_2* std::sin(M_PI_2*p(0)) * std::cos(M_PI_2*p(1)) * std::cos(M_PI_2*p(2));
547 result[1] = -M_PI_2* std::cos(M_PI_2*p(0)) * std::sin(M_PI_2*p(1)) * std::cos(M_PI_2*p(2));
548 result[2] = -M_PI_2* std::cos(M_PI_2*p(0)) * std::cos(M_PI_2*p(1)) * std::sin(M_PI_2*p(2));
551 Assert(
false, ExcNotImplemented());
560 const unsigned int)
const 562 Assert (gradients.size() == points.size(),
563 ExcDimensionMismatch(gradients.size(), points.size()));
565 for (
unsigned int i=0; i<points.size(); ++i)
571 gradients[i][0] = -M_PI_2* std::sin(M_PI_2*p(0));
574 gradients[i][0] = -M_PI_2* std::sin(M_PI_2*p(0)) * std::cos(M_PI_2*p(1));
575 gradients[i][1] = -M_PI_2* std::cos(M_PI_2*p(0)) * std::sin(M_PI_2*p(1));
578 gradients[i][0] = -M_PI_2* std::sin(M_PI_2*p(0)) * std::cos(M_PI_2*p(1)) * std::cos(M_PI_2*p(2));
579 gradients[i][1] = -M_PI_2* std::cos(M_PI_2*p(0)) * std::sin(M_PI_2*p(1)) * std::cos(M_PI_2*p(2));
580 gradients[i][2] = -M_PI_2* std::cos(M_PI_2*p(0)) * std::cos(M_PI_2*p(1)) * std::sin(M_PI_2*p(2));
583 Assert(
false, ExcNotImplemented());
591 const unsigned int)
const 593 const double pi2 = M_PI_2*M_PI_2;
599 result[0][0] = -pi2* std::cos(M_PI_2*p(0));
604 const double coco = -pi2*std::cos(M_PI_2*p(0)) * std::cos(M_PI_2*p(1));
605 const double sisi = pi2*std::sin(M_PI_2*p(0)) * std::sin(M_PI_2*p(1));
615 const double cococo = -pi2*std::cos(M_PI_2*p(0)) * std::cos(M_PI_2*p(1)) * std::cos(M_PI_2*p(2));
616 const double sisico = pi2*std::sin(M_PI_2*p(0)) * std::sin(M_PI_2*p(1)) * std::cos(M_PI_2*p(2));
617 const double sicosi = pi2*std::sin(M_PI_2*p(0)) * std::cos(M_PI_2*p(1)) * std::sin(M_PI_2*p(2));
618 const double cosisi = pi2*std::cos(M_PI_2*p(0)) * std::sin(M_PI_2*p(1)) * std::sin(M_PI_2*p(2));
620 result[0][0] = cococo;
621 result[1][1] = cococo;
622 result[2][2] = cococo;
624 result[0][1] = sisico;
625 result[0][2] = sicosi;
626 result[1][2] = cosisi;
630 Assert(
false, ExcNotImplemented());
639 const unsigned int)
const 641 Assert (hessians.size() == points.size(),
642 ExcDimensionMismatch(hessians.size(), points.size()));
644 const double pi2 = M_PI_2*M_PI_2;
646 for (
unsigned int i=0; i<points.size(); ++i)
652 hessians[i][0][0] = -pi2* std::cos(M_PI_2*p(0));
657 const double coco = -pi2*std::cos(M_PI_2*p(0)) * std::cos(M_PI_2*p(1));
658 const double sisi = pi2*std::sin(M_PI_2*p(0)) * std::sin(M_PI_2*p(1));
659 hessians[i][0][0] = coco;
660 hessians[i][1][1] = coco;
662 hessians[i][0][1] = sisi;
668 const double cococo = -pi2*std::cos(M_PI_2*p(0)) * std::cos(M_PI_2*p(1)) * std::cos(M_PI_2*p(2));
669 const double sisico = pi2*std::sin(M_PI_2*p(0)) * std::sin(M_PI_2*p(1)) * std::cos(M_PI_2*p(2));
670 const double sicosi = pi2*std::sin(M_PI_2*p(0)) * std::cos(M_PI_2*p(1)) * std::sin(M_PI_2*p(2));
671 const double cosisi = pi2*std::cos(M_PI_2*p(0)) * std::sin(M_PI_2*p(1)) * std::sin(M_PI_2*p(2));
673 hessians[i][0][0] = cococo;
674 hessians[i][1][1] = cococo;
675 hessians[i][2][2] = cococo;
677 hessians[i][0][1] = sisico;
678 hessians[i][0][2] = sicosi;
679 hessians[i][1][2] = cosisi;
683 Assert(
false, ExcNotImplemented());
701 const unsigned int d)
const 704 const unsigned int d1 = (d+1) % dim;
705 const unsigned int d2 = (d+2) % dim;
709 return (-M_PI_2* std::sin(M_PI_2*p(0)));
711 return (-M_PI_2* std::sin(M_PI_2*p(d)) * std::cos(M_PI_2*p(d1)));
713 return (-M_PI_2* std::sin(M_PI_2*p(d)) * std::cos(M_PI_2*p(d1)) * std::cos(M_PI_2*p(d2)));
715 Assert(
false, ExcNotImplemented());
731 result(0) = -M_PI_2* std::sin(M_PI_2*p(0));
734 result(0) = -M_PI_2* std::sin(M_PI_2*p(0)) * std::cos(M_PI_2*p(1));
735 result(1) = -M_PI_2* std::cos(M_PI_2*p(0)) * std::sin(M_PI_2*p(1));
738 result(0) = -M_PI_2* std::sin(M_PI_2*p(0)) * std::cos(M_PI_2*p(1)) * std::cos(M_PI_2*p(2));
739 result(1) = -M_PI_2* std::cos(M_PI_2*p(0)) * std::sin(M_PI_2*p(1)) * std::cos(M_PI_2*p(2));
740 result(2) = -M_PI_2* std::cos(M_PI_2*p(0)) * std::cos(M_PI_2*p(1)) * std::sin(M_PI_2*p(2));
743 Assert(
false, ExcNotImplemented());
752 std::vector<double> &values,
753 const unsigned int d)
const 755 Assert (values.size() == points.size(),
756 ExcDimensionMismatch(values.size(), points.size()));
758 const unsigned int d1 = (d+1) % dim;
759 const unsigned int d2 = (d+2) % dim;
761 for (
unsigned int i=0; i<points.size(); ++i)
767 values[i] = -M_PI_2* std::sin(M_PI_2*p(d));
770 values[i] = -M_PI_2* std::sin(M_PI_2*p(d)) * std::cos(M_PI_2*p(d1));
773 values[i] = -M_PI_2* std::sin(M_PI_2*p(d)) * std::cos(M_PI_2*p(d1)) * std::cos(M_PI_2*p(d2));
776 Assert(
false, ExcNotImplemented());
788 Assert (values.size() == points.size(),
789 ExcDimensionMismatch(values.size(), points.size()));
791 for (
unsigned int i=0; i<points.size(); ++i)
797 values[i](0) = -M_PI_2* std::sin(M_PI_2*p(0));
800 values[i](0) = -M_PI_2* std::sin(M_PI_2*p(0)) * std::cos(M_PI_2*p(1));
801 values[i](1) = -M_PI_2* std::cos(M_PI_2*p(0)) * std::sin(M_PI_2*p(1));
804 values[i](0) = -M_PI_2* std::sin(M_PI_2*p(0)) * std::cos(M_PI_2*p(1)) * std::cos(M_PI_2*p(2));
805 values[i](1) = -M_PI_2* std::cos(M_PI_2*p(0)) * std::sin(M_PI_2*p(1)) * std::cos(M_PI_2*p(2));
806 values[i](2) = -M_PI_2* std::cos(M_PI_2*p(0)) * std::cos(M_PI_2*p(1)) * std::sin(M_PI_2*p(2));
809 Assert(
false, ExcNotImplemented());
819 const unsigned int d)
const 821 return -M_PI_2*M_PI_2*
value(p,d);
829 const unsigned int d)
const 832 const unsigned int d1 = (d+1) % dim;
833 const unsigned int d2 = (d+2) % dim;
834 const double pi2 = M_PI_2*M_PI_2;
840 result[0] = -pi2* std::cos(M_PI_2*p(0));
843 result[d ] = -pi2*std::cos(M_PI_2*p(d)) * std::cos(M_PI_2*p(d1));
844 result[d1] = pi2*std::sin(M_PI_2*p(d)) * std::sin(M_PI_2*p(d1));
847 result[d ] = -pi2*std::cos(M_PI_2*p(d)) * std::cos(M_PI_2*p(d1)) * std::cos(M_PI_2*p(d2));
848 result[d1] = pi2*std::sin(M_PI_2*p(d)) * std::sin(M_PI_2*p(d1)) * std::cos(M_PI_2*p(d2));
849 result[d2] = pi2*std::sin(M_PI_2*p(d)) * std::cos(M_PI_2*p(d1)) * std::sin(M_PI_2*p(d2));
852 Assert(
false, ExcNotImplemented());
863 const unsigned int d)
const 866 const unsigned int d1 = (d+1) % dim;
867 const unsigned int d2 = (d+2) % dim;
868 const double pi2 = M_PI_2*M_PI_2;
870 Assert (gradients.size() == points.size(),
871 ExcDimensionMismatch(gradients.size(), points.size()));
872 for (
unsigned int i=0; i<points.size(); ++i)
880 result[0] = -pi2* std::cos(M_PI_2*p(0));
883 result[d ] = -pi2*std::cos(M_PI_2*p(d)) * std::cos(M_PI_2*p(d1));
884 result[d1] = pi2*std::sin(M_PI_2*p(d)) * std::sin(M_PI_2*p(d1));
887 result[d ] = -pi2*std::cos(M_PI_2*p(d)) * std::cos(M_PI_2*p(d1)) * std::cos(M_PI_2*p(d2));
888 result[d1] = pi2*std::sin(M_PI_2*p(d)) * std::sin(M_PI_2*p(d1)) * std::cos(M_PI_2*p(d2));
889 result[d2] = pi2*std::sin(M_PI_2*p(d)) * std::cos(M_PI_2*p(d1)) * std::sin(M_PI_2*p(d2));
892 Assert(
false, ExcNotImplemented());
905 const double pi2 = M_PI_2*M_PI_2;
907 for (
unsigned int i=0; i<points.size(); ++i)
913 gradients[i][0][0] = -pi2* std::cos(M_PI_2*p(0));
918 const double coco = -pi2*std::cos(M_PI_2*p(0)) * std::cos(M_PI_2*p(1));
919 const double sisi = pi2*std::sin(M_PI_2*p(0)) * std::sin(M_PI_2*p(1));
920 gradients[i][0][0] = coco;
921 gradients[i][1][1] = coco;
922 gradients[i][0][1] = sisi;
923 gradients[i][1][0] = sisi;
929 const double cococo = -pi2*std::cos(M_PI_2*p(0)) * std::cos(M_PI_2*p(1)) * std::cos(M_PI_2*p(2));
930 const double sisico = pi2*std::sin(M_PI_2*p(0)) * std::sin(M_PI_2*p(1)) * std::cos(M_PI_2*p(2));
931 const double sicosi = pi2*std::sin(M_PI_2*p(0)) * std::cos(M_PI_2*p(1)) * std::sin(M_PI_2*p(2));
932 const double cosisi = pi2*std::cos(M_PI_2*p(0)) * std::sin(M_PI_2*p(1)) * std::sin(M_PI_2*p(2));
934 gradients[i][0][0] = cococo;
935 gradients[i][1][1] = cococo;
936 gradients[i][2][2] = cococo;
937 gradients[i][0][1] = sisico;
938 gradients[i][1][0] = sisico;
939 gradients[i][0][2] = sicosi;
940 gradients[i][2][0] = sicosi;
941 gradients[i][1][2] = cosisi;
942 gradients[i][2][1] = cosisi;
946 Assert(
false, ExcNotImplemented());
957 const unsigned int)
const 962 return std::exp(p(0));
964 return std::exp(p(0)) * std::exp(p(1));
966 return std::exp(p(0)) * std::exp(p(1)) * std::exp(p(2));
968 Assert(
false, ExcNotImplemented());
976 std::vector<double> &values,
977 const unsigned int)
const 979 Assert (values.size() == points.size(),
980 ExcDimensionMismatch(values.size(), points.size()));
982 for (
unsigned int i=0; i<points.size(); ++i)
988 values[i] = std::exp(p(0));
991 values[i] = std::exp(p(0)) * std::exp(p(1));
994 values[i] = std::exp(p(0)) * std::exp(p(1)) * std::exp(p(2));
997 Assert(
false, ExcNotImplemented());
1005 const unsigned int)
const 1010 return std::exp(p(0));
1012 return 2 * std::exp(p(0)) * std::exp(p(1));
1014 return 3 * std::exp(p(0)) * std::exp(p(1)) * std::exp(p(2));
1016 Assert(
false, ExcNotImplemented());
1024 std::vector<double> &values,
1025 const unsigned int)
const 1027 Assert (values.size() == points.size(),
1028 ExcDimensionMismatch(values.size(), points.size()));
1030 for (
unsigned int i=0; i<points.size(); ++i)
1036 values[i] = std::exp(p(0));
1039 values[i] = 2 * std::exp(p(0)) * std::exp(p(1));
1042 values[i] = 3 * std::exp(p(0)) * std::exp(p(1)) * std::exp(p(2));
1045 Assert(
false, ExcNotImplemented());
1053 const unsigned int)
const 1059 result[0] = std::exp(p(0));
1062 result[0] = std::exp(p(0)) * std::exp(p(1));
1063 result[1] = std::exp(p(0)) * std::exp(p(1));
1066 result[0] = std::exp(p(0)) * std::exp(p(1)) * std::exp(p(2));
1067 result[1] = std::exp(p(0)) * std::exp(p(1)) * std::exp(p(2));
1068 result[2] = std::exp(p(0)) * std::exp(p(1)) * std::exp(p(2));
1071 Assert(
false, ExcNotImplemented());
1080 const unsigned int)
const 1082 Assert (gradients.size() == points.size(),
1083 ExcDimensionMismatch(gradients.size(), points.size()));
1085 for (
unsigned int i=0; i<points.size(); ++i)
1091 gradients[i][0] = std::exp(p(0));
1094 gradients[i][0] = std::exp(p(0)) * std::exp(p(1));
1095 gradients[i][1] = std::exp(p(0)) * std::exp(p(1));
1098 gradients[i][0] = std::exp(p(0)) * std::exp(p(1)) * std::exp(p(2));
1099 gradients[i][1] = std::exp(p(0)) * std::exp(p(1)) * std::exp(p(2));
1100 gradients[i][2] = std::exp(p(0)) * std::exp(p(1)) * std::exp(p(2));
1103 Assert(
false, ExcNotImplemented());
1112 LSingularityFunction::value (
const Point<2> &p,
1113 const unsigned int)
const 1118 if ((x>=0) && (y>=0))
1121 double phi = std::atan2(y,-x)+M_PI;
1122 double r2 = x*x+y*y;
1124 return std::pow(r2,1./3.) * std::sin(2./3.*phi);
1129 LSingularityFunction::value_list (
const std::vector<
Point<2> > &points,
1130 std::vector<double> &values,
1131 const unsigned int)
const 1133 Assert (values.size() == points.size(),
1134 ExcDimensionMismatch(values.size(), points.size()));
1136 for (
unsigned int i=0; i<points.size(); ++i)
1138 double x = points[i](0);
1139 double y = points[i](1);
1141 if ((x>=0) && (y>=0))
1145 double phi = std::atan2(y,-x)+M_PI;
1146 double r2 = x*x+y*y;
1148 values[i] = std::pow(r2,1./3.) * std::sin(2./3.*phi);
1155 LSingularityFunction::vector_value_list (
1156 const std::vector<
Point<2> > &points,
1159 Assert (values.size() == points.size(),
1160 ExcDimensionMismatch(values.size(), points.size()));
1162 for (
unsigned int i=0; i<points.size(); ++i)
1164 Assert (values[i].size() == 1,
1165 ExcDimensionMismatch(values[i].size(), 1));
1166 double x = points[i](0);
1167 double y = points[i](1);
1169 if ((x>=0) && (y>=0))
1173 double phi = std::atan2(y,-x)+M_PI;
1174 double r2 = x*x+y*y;
1176 values[i](0) = std::pow(r2,1./3.) * std::sin(2./3.*phi);
1183 LSingularityFunction::laplacian (
const Point<2> &,
1184 const unsigned int)
const 1191 LSingularityFunction::laplacian_list (
const std::vector<
Point<2> > &points,
1192 std::vector<double> &values,
1193 const unsigned int)
const 1195 Assert (values.size() == points.size(),
1196 ExcDimensionMismatch(values.size(), points.size()));
1198 for (
unsigned int i=0; i<points.size(); ++i)
1204 LSingularityFunction::gradient (
const Point<2> &p,
1205 const unsigned int)
const 1209 double phi = std::atan2(y,-x)+M_PI;
1210 double r43 = std::pow(x*x+y*y,2./3.);
1213 result[0] = 2./3.*(std::sin(2./3.*phi)*x + std::cos(2./3.*phi)*y)/r43;
1214 result[1] = 2./3.*(std::sin(2./3.*phi)*y - std::cos(2./3.*phi)*x)/r43;
1220 LSingularityFunction::gradient_list (
const std::vector<
Point<2> > &points,
1222 const unsigned int)
const 1224 Assert (gradients.size() == points.size(),
1225 ExcDimensionMismatch(gradients.size(), points.size()));
1227 for (
unsigned int i=0; i<points.size(); ++i)
1232 double phi = std::atan2(y,-x)+M_PI;
1233 double r43 = std::pow(x*x+y*y,2./3.);
1235 gradients[i][0] = 2./3.*(std::sin(2./3.*phi)*x + std::cos(2./3.*phi)*y)/r43;
1236 gradients[i][1] = 2./3.*(std::sin(2./3.*phi)*y - std::cos(2./3.*phi)*x)/r43;
1242 LSingularityFunction::vector_gradient_list (
1243 const std::vector<
Point<2> > &points,
1244 std::vector<std::vector<
Tensor<1,2> > > &gradients)
const 1246 Assert (gradients.size() == points.size(),
1247 ExcDimensionMismatch(gradients.size(), points.size()));
1249 for (
unsigned int i=0; i<points.size(); ++i)
1251 Assert(gradients[i].size() == 1,
1252 ExcDimensionMismatch(gradients[i].size(), 1));
1256 double phi = std::atan2(y,-x)+M_PI;
1257 double r43 = std::pow(x*x+y*y,2./3.);
1259 gradients[i][0][0] = 2./3.*(std::sin(2./3.*phi)*x + std::cos(2./3.*phi)*y)/r43;
1260 gradients[i][0][1] = 2./3.*(std::sin(2./3.*phi)*y - std::cos(2./3.*phi)*x)/r43;
1273 LSingularityGradFunction::value (
const Point<2> &p,
1274 const unsigned int d)
const 1278 const double x = p(0);
1279 const double y = p(1);
1280 const double phi = std::atan2(y,-x)+M_PI;
1281 const double r43 = std::pow(x*x+y*y,2./3.);
1283 return 2./3.*(std::sin(2./3.*phi)*p(d) +
1285 ? (std::cos(2./3.*phi)*y)
1286 : (-std::cos(2./3.*phi)*x)))
1292 LSingularityGradFunction::value_list (
1293 const std::vector<
Point<2> > &points,
1294 std::vector<double> &values,
1295 const unsigned int d)
const 1300 for (
unsigned int i=0; i<points.size(); ++i)
1303 const double x = p(0);
1304 const double y = p(1);
1305 const double phi = std::atan2(y,-x)+M_PI;
1306 const double r43 = std::pow(x*x+y*y,2./3.);
1308 values[i] = 2./3.*(std::sin(2./3.*phi)*p(d) +
1310 ? (std::cos(2./3.*phi)*y)
1311 : (-std::cos(2./3.*phi)*x)))
1318 LSingularityGradFunction::vector_value_list (
1319 const std::vector<
Point<2> > &points,
1322 Assert (values.size() == points.size(),
1323 ExcDimensionMismatch(values.size(), points.size()));
1325 for (
unsigned int i=0; i<points.size(); ++i)
1329 const double x = p(0);
1330 const double y = p(1);
1331 const double phi = std::atan2(y,-x)+M_PI;
1332 const double r43 = std::pow(x*x+y*y,2./3.);
1334 values[i](0) = 2./3.*(std::sin(2./3.*phi)*x + std::cos(2./3.*phi)*y)/r43;
1335 values[i](1) = 2./3.*(std::sin(2./3.*phi)*y - std::cos(2./3.*phi)*x)/r43;
1341 LSingularityGradFunction::laplacian (
const Point<2> &,
1342 const unsigned int)
const 1349 LSingularityGradFunction::laplacian_list (
const std::vector<
Point<2> > &points,
1350 std::vector<double> &values,
1351 const unsigned int)
const 1353 Assert (values.size() == points.size(),
1354 ExcDimensionMismatch(values.size(), points.size()));
1356 for (
unsigned int i=0; i<points.size(); ++i)
1363 LSingularityGradFunction::gradient (
1365 const unsigned int )
const 1367 Assert(
false, ExcNotImplemented());
1373 LSingularityGradFunction::gradient_list (
1376 const unsigned int )
const 1378 Assert(
false, ExcNotImplemented());
1383 LSingularityGradFunction::vector_gradient_list (
1387 Assert(
false, ExcNotImplemented());
1396 const unsigned int)
const 1401 double phi = std::atan2(x,y)+M_PI;
1402 double r2 = x*x+y*y;
1404 return std::pow(r2,.25) * std::sin(.5*phi);
1412 std::vector<double> &values,
1413 const unsigned int)
const 1415 Assert (values.size() == points.size(),
1416 ExcDimensionMismatch(values.size(), points.size()));
1418 for (
unsigned int i=0; i<points.size(); ++i)
1420 double x = points[i](0);
1421 double y = points[i](1);
1423 double phi = std::atan2(x,y)+M_PI;
1424 double r2 = x*x+y*y;
1426 values[i] = std::pow(r2,.25) * std::sin(.5*phi);
1437 Assert (values.size() == points.size(),
1438 ExcDimensionMismatch(values.size(), points.size()));
1440 for (
unsigned int i=0; i<points.size(); ++i)
1442 Assert (values[i].size() == 1,
1443 ExcDimensionMismatch(values[i].size(), 1));
1445 double x = points[i](0);
1446 double y = points[i](1);
1448 double phi = std::atan2(x,y)+M_PI;
1449 double r2 = x*x+y*y;
1451 values[i](0) = std::pow(r2,.25) * std::sin(.5*phi);
1459 const unsigned int)
const 1469 std::vector<double> &values,
1470 const unsigned int)
const 1472 Assert (values.size() == points.size(),
1473 ExcDimensionMismatch(values.size(), points.size()));
1475 for (
unsigned int i=0; i<points.size(); ++i)
1483 const unsigned int)
const 1487 double phi = std::atan2(x,y)+M_PI;
1488 double r64 = std::pow(x*x+y*y,3./4.);
1491 result[0] = 1./2.*(std::sin(1./2.*phi)*x + std::cos(1./2.*phi)*y)/r64;
1492 result[1] = 1./2.*(std::sin(1./2.*phi)*y - std::cos(1./2.*phi)*x)/r64;
1501 const unsigned int)
const 1503 Assert (gradients.size() == points.size(),
1504 ExcDimensionMismatch(gradients.size(), points.size()));
1506 for (
unsigned int i=0; i<points.size(); ++i)
1511 double phi = std::atan2(x,y)+M_PI;
1512 double r64 = std::pow(x*x+y*y,3./4.);
1514 gradients[i][0] = 1./2.*(std::sin(1./2.*phi)*x + std::cos(1./2.*phi)*y)/r64;
1515 gradients[i][1] = 1./2.*(std::sin(1./2.*phi)*y - std::cos(1./2.*phi)*x)/r64;
1516 for (
unsigned int d=2; d<dim; ++d)
1517 gradients[i][d] = 0.;
1527 Assert (gradients.size() == points.size(),
1528 ExcDimensionMismatch(gradients.size(), points.size()));
1530 for (
unsigned int i=0; i<points.size(); ++i)
1532 Assert(gradients[i].size() == 1,
1533 ExcDimensionMismatch(gradients[i].size(), 1));
1538 double phi = std::atan2(x,y)+M_PI;
1539 double r64 = std::pow(x*x+y*y,3./4.);
1541 gradients[i][0][0] = 1./2.*(std::sin(1./2.*phi)*x + std::cos(1./2.*phi)*y)/r64;
1542 gradients[i][0][1] = 1./2.*(std::sin(1./2.*phi)*y - std::cos(1./2.*phi)*x)/r64;
1543 for (
unsigned int d=2; d<dim; ++d)
1544 gradients[i][0][d] = 0.;
1552 SlitHyperSingularityFunction::value (
const Point<2> &p,
1553 const unsigned int)
const 1558 double phi = std::atan2(x,y)+M_PI;
1559 double r2 = x*x+y*y;
1561 return std::pow(r2,.125) * std::sin(.25*phi);
1566 SlitHyperSingularityFunction::value_list (
1567 const std::vector<
Point<2> > &points,
1568 std::vector<double> &values,
1569 const unsigned int)
const 1571 Assert (values.size() == points.size(),
1572 ExcDimensionMismatch(values.size(), points.size()));
1574 for (
unsigned int i=0; i<points.size(); ++i)
1576 double x = points[i](0);
1577 double y = points[i](1);
1579 double phi = std::atan2(x,y)+M_PI;
1580 double r2 = x*x+y*y;
1582 values[i] = std::pow(r2,.125) * std::sin(.25*phi);
1588 SlitHyperSingularityFunction::vector_value_list (
1589 const std::vector<
Point<2> > &points,
1592 Assert (values.size() == points.size(),
1593 ExcDimensionMismatch(values.size(), points.size()));
1595 for (
unsigned int i=0; i<points.size(); ++i)
1597 Assert(values[i].size() == 1,
1598 ExcDimensionMismatch(values[i].size(), 1));
1600 double x = points[i](0);
1601 double y = points[i](1);
1603 double phi = std::atan2(x,y)+M_PI;
1604 double r2 = x*x+y*y;
1606 values[i](0) = std::pow(r2,.125) * std::sin(.25*phi);
1612 SlitHyperSingularityFunction::laplacian (
1614 const unsigned int)
const 1621 SlitHyperSingularityFunction::laplacian_list (
1622 const std::vector<
Point<2> > &points,
1623 std::vector<double> &values,
1624 const unsigned int)
const 1626 Assert (values.size() == points.size(),
1627 ExcDimensionMismatch(values.size(), points.size()));
1629 for (
unsigned int i=0; i<points.size(); ++i)
1635 SlitHyperSingularityFunction::gradient (
1637 const unsigned int)
const 1641 double phi = std::atan2(x,y)+M_PI;
1642 double r78 = std::pow(x*x+y*y,7./8.);
1646 result[0] = 1./4.*(std::sin(1./4.*phi)*x + std::cos(1./4.*phi)*y)/r78;
1647 result[1] = 1./4.*(std::sin(1./4.*phi)*y - std::cos(1./4.*phi)*x)/r78;
1653 SlitHyperSingularityFunction::gradient_list (
1654 const std::vector<
Point<2> > &points,
1656 const unsigned int)
const 1658 Assert (gradients.size() == points.size(),
1659 ExcDimensionMismatch(gradients.size(), points.size()));
1661 for (
unsigned int i=0; i<points.size(); ++i)
1666 double phi = std::atan2(x,y)+M_PI;
1667 double r78 = std::pow(x*x+y*y,7./8.);
1669 gradients[i][0] = 1./4.*(std::sin(1./4.*phi)*x + std::cos(1./4.*phi)*y)/r78;
1670 gradients[i][1] = 1./4.*(std::sin(1./4.*phi)*y - std::cos(1./4.*phi)*x)/r78;
1676 SlitHyperSingularityFunction::vector_gradient_list (
1677 const std::vector<
Point<2> > &points,
1678 std::vector<std::vector<
Tensor<1,2> > > &gradients)
const 1680 Assert (gradients.size() == points.size(),
1681 ExcDimensionMismatch(gradients.size(), points.size()));
1683 for (
unsigned int i=0; i<points.size(); ++i)
1685 Assert(gradients[i].size() == 1,
1686 ExcDimensionMismatch(gradients[i].size(), 1));
1691 double phi = std::atan2(x,y)+M_PI;
1692 double r78 = std::pow(x*x+y*y,7./8.);
1694 gradients[i][0][0] = 1./4.*(std::sin(1./4.*phi)*x + std::cos(1./4.*phi)*y)/r78;
1695 gradients[i][0][1] = 1./4.*(std::sin(1./4.*phi)*y - std::cos(1./4.*phi)*x)/r78;
1703 const double steepness)
1705 direction(direction),
1706 steepness(steepness)
1717 Assert(
false, ExcNotImplemented());
1728 const unsigned int)
const 1731 return -std::atan(x);
1739 std::vector<double> &values,
1740 const unsigned int)
const 1742 Assert (values.size() == p.size(),
1743 ExcDimensionMismatch(values.size(), p.size()));
1745 for (
unsigned int i=0; i<p.size(); ++i)
1748 values[i] = -std::atan(x);
1756 const unsigned int)
const 1767 std::vector<double> &values,
1768 const unsigned int)
const 1770 Assert (values.size() == p.size(),
1771 ExcDimensionMismatch(values.size(), p.size()));
1775 for (
unsigned int i=0; i<p.size(); ++i)
1777 double x = steepness*(-
cosine*p[i](0)+
sine*p[i](1));
1779 values[i] = f*x/(r*r);
1788 const unsigned int)
const 1804 const unsigned int)
const 1806 Assert (gradients.size() == p.size(),
1807 ExcDimensionMismatch(gradients.size(), p.size()));
1809 for (
unsigned int i=0; i<p.size(); ++i)
1813 gradients[i][0] =
cosine*r;
1814 gradients[i][1] =
sine*r;
1826 return sizeof (*this);
1841 fourier_coefficients (fourier_coefficients)
1849 const unsigned int component)
const 1852 Assert (component==0, ExcIndexRange(component,0,1));
1861 const unsigned int component)
const 1864 Assert (component==0, ExcIndexRange(component,0,1));
1873 const unsigned int component)
const 1876 Assert (component==0, ExcIndexRange(component,0,1));
1892 fourier_coefficients (fourier_coefficients)
1900 const unsigned int component)
const 1903 Assert (component==0, ExcIndexRange(component,0,1));
1912 const unsigned int component)
const 1915 Assert (component==0, ExcIndexRange(component,0,1));
1924 const unsigned int component)
const 1927 Assert (component==0, ExcIndexRange(component,0,1));
1941 const std::vector<double> &weights)
1958 const unsigned int component)
const 1961 Assert (component==0, ExcIndexRange(component,0,1));
1963 const unsigned int n = weights.size();
1965 for (
unsigned int s=0; s<n; ++s)
1976 const unsigned int component)
const 1979 Assert (component==0, ExcIndexRange(component,0,1));
1981 const unsigned int n = weights.size();
1983 for (
unsigned int s=0; s<n; ++s)
1994 const unsigned int component)
const 1997 Assert (component==0, ExcIndexRange(component,0,1));
1999 const unsigned int n = weights.size();
2001 for (
unsigned int s=0; s<n; ++s)
2016 const std::vector<double> &weights)
2033 const unsigned int component)
const 2036 Assert (component==0, ExcIndexRange(component,0,1));
2038 const unsigned int n = weights.size();
2040 for (
unsigned int s=0; s<n; ++s)
2051 const unsigned int component)
const 2054 Assert (component==0, ExcIndexRange(component,0,1));
2056 const unsigned int n = weights.size();
2058 for (
unsigned int s=0; s<n; ++s)
2069 const unsigned int component)
const 2072 Assert (component==0, ExcIndexRange(component,0,1));
2074 const unsigned int n = weights.size();
2076 for (
unsigned int s=0; s<n; ++s)
2095 exponents (exponents)
2103 const unsigned int component)
const 2107 ExcIndexRange(component, 0, this->n_components)) ;
2110 for (
unsigned int s=0; s<dim; ++s)
2114 ExcMessage(
"Exponentiation of a negative base number with " 2115 "a real exponent can't be performed."));
2131 for (
unsigned int i=0; i<values.
size(); ++i)
2140 const unsigned int component)
const 2143 Assert (component==0, ExcIndexRange(component,0,1)) ;
2146 for (
unsigned int d=0; d<dim; ++d)
2149 for (
unsigned int s=0; s<dim; ++s)
2151 if ((s==d) && (
exponents[s] == 0) && (p[s] == 0))
2160 ExcMessage(
"Exponentiation of a negative base number with " 2161 "a real exponent can't be performed."));
2180 std::vector<double> &values,
2181 const unsigned int component)
const 2183 Assert (values.size() == points.size(),
2184 ExcDimensionMismatch(values.size(), points.size()));
2186 for (
unsigned int i=0; i<points.size(); ++i)
2193 const unsigned int order,
2194 const double wave_number,
2198 wave_number(wave_number),
2206 Assert(dim==2, ExcNotImplemented());
2207 const double r = p.
distance(center);
2208 #ifdef DEAL_II_HAVE_JN 2209 return jn(order, r*wave_number);
2211 Assert(
false,
ExcMessage(
"The Bessel function jn was not found by CMake."));
2221 std::vector<double> &values,
2222 const unsigned int)
const 2224 Assert(dim==2, ExcNotImplemented());
2226 for (
unsigned int k=0; k<points.size(); ++k)
2228 #ifdef DEAL_II_HAVE_JN 2229 const double r = points[k].distance(center);
2230 values[k] = jn(order, r*wave_number);
2232 Assert(
false,
ExcMessage(
"The Bessel function jn was not found by CMake."));
2241 const unsigned int)
const 2243 Assert(dim==2, ExcNotImplemented());
2244 const double r = p.
distance(center);
2245 const double co = (r==0.) ? 0. : (p(0)-center(0))/r;
2246 const double si = (r==0.) ? 0. : (p(1)-center(1))/r;
2248 #ifdef DEAL_II_HAVE_JN 2249 const double dJn = (order==0)
2250 ? (-jn(1, r*wave_number))
2251 : (.5*(jn(order-1, wave_number*r) -jn(order+1, wave_number*r)));
2253 result[0] = wave_number * co * dJn;
2254 result[1] = wave_number * si * dJn;
2257 Assert(
false,
ExcMessage(
"The Bessel function jn was not found by CMake."));
2269 const unsigned int)
const 2271 Assert(dim==2, ExcNotImplemented());
2273 for (
unsigned int k=0; k<points.size(); ++k)
2276 const double r = p.
distance(center);
2277 const double co = (r==0.) ? 0. : (p(0)-center(0))/r;
2278 const double si = (r==0.) ? 0. : (p(1)-center(1))/r;
2280 #ifdef DEAL_II_HAVE_JN 2281 const double dJn = (order==0)
2282 ? (-jn(1, r*wave_number))
2283 : (.5*(jn(order-1, wave_number*r) -jn(order+1, wave_number*r)));
2285 const double dJn = 0.;
2286 Assert(
false,
ExcMessage(
"The Bessel function jn was not found by CMake."));
2289 result[0] = wave_number * co * dJn;
2290 result[1] = wave_number * si * dJn;
2305 return ((1-xi[0])*data_values[ix[0]]
2307 xi[0]*data_values[ix[0]+1]);
2314 return (((1-p_unit[0])*data_values[ix[0]][ix[1]]
2316 p_unit[0]*data_values[ix[0]+1][ix[1]])*(1-p_unit[1])
2318 ((1-p_unit[0])*data_values[ix[0]][ix[1]+1]
2320 p_unit[0]*data_values[ix[0]+1][ix[1]+1])*p_unit[1]);
2327 return ((((1-p_unit[0])*data_values[ix[0]][ix[1]][ix[2]]
2329 p_unit[0]*data_values[ix[0]+1][ix[1]][ix[2]])*(1-p_unit[1])
2331 ((1-p_unit[0])*data_values[ix[0]][ix[1]+1][ix[2]]
2333 p_unit[0]*data_values[ix[0]+1][ix[1]+1][ix[2]])*p_unit[1]) * (1-p_unit[2])
2335 (((1-p_unit[0])*data_values[ix[0]][ix[1]][ix[2]+1]
2337 p_unit[0]*data_values[ix[0]+1][ix[1]][ix[2]+1])*(1-p_unit[1])
2339 ((1-p_unit[0])*data_values[ix[0]][ix[1]+1][ix[2]+1]
2341 p_unit[0]*data_values[ix[0]+1][ix[1]+1][ix[2]+1])*p_unit[1]) * p_unit[2]);
2356 grad[0] = (data_values[ix[0]+1] - data_values[ix[0]]) / dx[0];
2368 u00 = data_values[ix[0]][ix[1]],
2369 u01 = data_values[ix[0]+1][ix[1]],
2370 u10 = data_values[ix[0]][ix[1]+1],
2371 u11 = data_values[ix[0]+1][ix[1]+1];
2373 grad[0] = ((1-p_unit[1])*(u01-u00) + p_unit[1]*(u11-u10))/dx[0];
2374 grad[1] = ((1-p_unit[0])*(u10-u00) + p_unit[0]*(u11-u01))/dx[1];
2386 u000 = data_values[ix[0]][ix[1]][ix[2]],
2387 u001 = data_values[ix[0]+1][ix[1]][ix[2]],
2388 u010 = data_values[ix[0]][ix[1]+1][ix[2]],
2389 u100 = data_values[ix[0]][ix[1]][ix[2]+1],
2390 u011 = data_values[ix[0]+1][ix[1]+1][ix[2]],
2391 u101 = data_values[ix[0]+1][ix[1]][ix[2]+1],
2392 u110 = data_values[ix[0]][ix[1]+1][ix[2]+1],
2393 u111 = data_values[ix[0]+1][ix[1]+1][ix[2]+1];
2395 grad[0] = ((1-p_unit[2])
2397 ((1-p_unit[1])*(u001-u000) + p_unit[1]*(u011-u010))
2401 ((1-p_unit[1])*(u101-u100) + p_unit[1]*(u111-u110))
2403 grad[1] = ((1-p_unit[2])
2405 ((1-p_unit[0])*(u010-u000) + p_unit[0]*(u011-u001))
2409 ((1-p_unit[0])*(u110-u100) + p_unit[0]*(u111-u101))
2411 grad[2] = ((1-p_unit[1])
2413 ((1-p_unit[0])*(u100-u000) + p_unit[0]*(u101-u001))
2417 ((1-p_unit[0])*(u110-u010) + p_unit[0]*(u111-u011))
2429 coordinate_values (coordinate_values),
2430 data_values (data_values)
2432 for (
unsigned int d=0; d<dim; ++d)
2435 ExcMessage (
"Coordinate arrays must have at least two coordinate values!"));
2438 ExcMessage (
"Coordinate arrays must be sorted in strictly ascending order."));
2441 ExcMessage (
"Data and coordinate tables do not have the same size."));
2450 const unsigned int component)
const 2454 ExcMessage (
"This is a scalar function object, the component can only be zero."));
2461 for (
unsigned int d=0; d<dim; ++d)
2485 for (
unsigned int d=0; d<dim; ++d)
2499 const unsigned int component)
const 2503 ExcMessage (
"This is a scalar function object, the component can only be zero."));
2507 for (
unsigned int d=0; d<dim; ++d)
2521 for (
unsigned int d=0; d<dim; ++d)
2525 for (
unsigned int d=0; d<dim; ++d)
2530 return gradient_interpolate(
data_values, ix, p_unit, dx);
2538 const std_cxx11::array<unsigned int,dim> &n_subintervals,
2541 interval_endpoints (interval_endpoints),
2542 n_subintervals (n_subintervals),
2543 data_values (data_values)
2545 for (
unsigned int d=0; d<dim; ++d)
2547 Assert (n_subintervals[d] >= 1,
2548 ExcMessage (
"There needs to be at least one subinterval in each " 2549 "coordinate direction."));
2551 ExcMessage (
"The interval in each coordinate direction needs " 2552 "to have positive size"));
2553 Assert (data_values.
size()[d] == n_subintervals[d]+1,
2554 ExcMessage (
"The data table does not have the correct size."));
2562 const unsigned int component)
const 2566 ExcMessage (
"This is a scalar function object, the component can only be zero."));
2571 for (
unsigned int d=0; d<dim; ++d)
2587 for (
unsigned int d=0; d<dim; ++d)
2591 p_unit[d] = std::max(std::min((p[d]-
interval_endpoints[d].first-ix[d]*delta_x)/delta_x,
2606 const std::vector<double> &coefficients)
2609 exponents (exponents),
2610 coefficients(coefficients)
2612 Assert(exponents.n_rows() == coefficients.size(),
2613 ExcDimensionMismatch(exponents.n_rows(), coefficients.size()));
2614 Assert(exponents.n_cols() == dim,
2615 ExcDimensionMismatch(exponents.n_cols(), dim));
2623 const unsigned int component)
const 2626 Assert (component==0, ExcIndexRange(component,0,1));
2630 for (
unsigned int monom = 0; monom <
exponents.n_rows(); ++monom)
2633 for (
unsigned int s=0; s< dim; ++s)
2637 ExcMessage(
"Exponentiation of a negative base number with " 2638 "a real exponent can't be performed."));
2639 prod *= std::pow(p[s],
exponents[monom][s]);
2651 std::vector<double> &values,
2652 const unsigned int component)
const 2654 Assert (values.size() == points.size(),
2655 ExcDimensionMismatch(values.size(), points.size()));
2657 for (
unsigned int i=0; i<points.size(); ++i)
2666 const unsigned int component)
const 2669 Assert (component==0, ExcIndexRange(component,0,1));
2673 for (
unsigned int d=0; d<dim; ++d)
2677 for (
unsigned int monom = 0; monom <
exponents.n_rows(); ++monom)
2680 for (
unsigned int s=0; s < dim; ++s)
2682 if ((s==d)&&(
exponents[monom][s] == 0)&&(p[s] == 0))
2691 ExcMessage(
"Exponentiation of a negative base number with " 2692 "a real exponent can't be performed."));
2760 DEAL_II_NAMESPACE_CLOSE
virtual void value_list(const std::vector< Point< dim > > &points, std::vector< double > &values, const unsigned int component=0) const
virtual double value(const Point< dim > &p, const unsigned int component=0) const
const Tensor< 1, dim > fourier_coefficients
virtual double laplacian(const Point< dim > &p, const unsigned int component=0) const
virtual double laplacian(const Point< dim > &p, const unsigned int component=0) const
virtual double value(const Point< dim > &p, const unsigned int component=0) const
virtual Tensor< 1, dim > gradient(const Point< dim > &p, const unsigned int component) const
virtual double value(const Point< dim > &p, const unsigned int component) const
#define AssertDimension(dim1, dim2)
virtual Tensor< 1, dim > gradient(const Point< dim > &p, const unsigned int component=0) const
virtual double laplacian(const Point< dim > &p, const unsigned int component=0) const
virtual double laplacian(const Point< dim > &p, const unsigned int component=0) const
virtual void value_list(const std::vector< Point< dim > > &points, std::vector< double > &values, const unsigned int component=0) const
virtual double value(const Point< dim > &p, const unsigned int component=0) const
LSingularityGradFunction()
virtual Tensor< 1, dim > gradient(const Point< dim > &p, const unsigned int component=0) const
virtual void vector_value(const Point< dim > &p, Vector< double > &values) const
Monomial(const Tensor< 1, dim > &exponents, const unsigned int n_components=1)
Polynomial(const Table< 2, double > &exponents, const std::vector< double > &coefficients)
virtual double value(const Point< dim > &p, const unsigned int component=0) const
virtual void vector_value_list(const std::vector< Point< dim > > &points, std::vector< Vector< double > > &values) const
::ExceptionBase & ExcMessage(std::string arg1)
#define AssertIndexRange(index, range)
virtual double value(const Point< dim > &p, const unsigned int component=0) const
virtual void laplacian_list(const std::vector< Point< dim > > &points, std::vector< double > &values, const unsigned int component=0) const
#define AssertVectorVectorDimension(vec, dim1, dim2)
virtual double laplacian(const Point< dim > &p, const unsigned int component) const
const Tensor< 1, dim > fourier_coefficients
virtual void value_list(const std::vector< Point< dim > > &points, std::vector< double > &values, const unsigned int component=0) const
virtual Tensor< 1, dim > gradient(const Point< dim > &p, const unsigned int component=0) const
virtual void gradient_list(const std::vector< Point< dim > > &points, std::vector< Tensor< 1, dim > > &gradients, const unsigned int component=0) const
virtual double laplacian(const Point< dim > &p, const unsigned int component=0) const
virtual void vector_value(const Point< dim > &p, Vector< double > &values) const
virtual void vector_value(const Point< dim > &p, Vector< double > &values) const
CosineFunction(const unsigned int n_components=1)
virtual void vector_value_list(const std::vector< Point< dim > > &points, std::vector< Vector< double > > &values) const
virtual void value_list(const std::vector< Point< dim > > &points, std::vector< double > &values, const unsigned int component=0) const
virtual double value(const Point< dim > &p, const unsigned int component=0) const
virtual Tensor< 1, dim > gradient(const Point< dim > &p, const unsigned int component=0) const
virtual double value(const Point< dim > &p, const unsigned int component=0) const
virtual Tensor< 1, dim > gradient(const Point< dim > &p, const unsigned int component=0) const
virtual Tensor< 1, dim > gradient(const Point< dim > &p, const unsigned int component=0) const
const unsigned int n_components
virtual void laplacian_list(const std::vector< Point< dim > > &points, std::vector< double > &values, const unsigned int component=0) const
virtual SymmetricTensor< 2, dim > hessian(const Point< dim > &p, const unsigned int component=0) const
virtual void laplacian_list(const std::vector< Point< dim > > &points, std::vector< double > &values, const unsigned int component=0) const
virtual double value(const Point< dim > &p, const unsigned int component=0) const
std::size_t memory_consumption() const
const std_cxx11::array< std::vector< double >, dim > coordinate_values
#define Assert(cond, exc)
virtual void value_list(const std::vector< Point< dim > > &points, std::vector< double > &values, const unsigned int component=0) const
const Table< 2, double > exponents
const std::vector< Point< dim > > fourier_coefficients
virtual double laplacian(const Point< dim > &p, const unsigned int component=0) const
virtual void gradient_list(const std::vector< Point< dim > > &points, std::vector< Tensor< 1, dim > > &gradients, const unsigned int component=0) const
virtual Tensor< 1, dim > gradient(const Point< dim > &p, const unsigned int component=0) const
virtual void value_list(const std::vector< Point< dim > > &points, std::vector< double > &values, const unsigned int component=0) const
virtual void laplacian_list(const std::vector< Point< dim > > &points, std::vector< double > &values, const unsigned int component=0) const
virtual double laplacian(const Point< dim > &p, const unsigned int component=0) const
virtual void vector_value_list(const std::vector< Point< dim > > &points, std::vector< Vector< double > > &values) const
const Table< dim, double > data_values
numbers::NumberTraits< Number >::real_type distance(const Point< dim, Number > &p) const
virtual void hessian_list(const std::vector< Point< dim > > &points, std::vector< SymmetricTensor< 2, dim > > &hessians, const unsigned int component=0) const
virtual Tensor< 1, dim > gradient(const Point< dim > &p, const unsigned int component=0) const
virtual double value(const Point< dim > &p, const unsigned int component=0) const
const std::vector< double > coefficients
virtual void laplacian_list(const std::vector< Point< dim > > &points, std::vector< double > &values, const unsigned int component=0) const
virtual double value(const Point< dim > &p, const unsigned int component=0) const
const Point< dim > direction
virtual double laplacian(const Point< dim > &p, const unsigned int component=0) const
const std::vector< Point< dim > > fourier_coefficients
virtual double value(const Point< dim > &points, const unsigned int component) const
virtual void laplacian_list(const std::vector< Point< dim > > &points, std::vector< double > &values, const unsigned int component=0) const
PillowFunction(const double offset=0.)
virtual void gradient_list(const std::vector< Point< dim > > &points, std::vector< Tensor< 1, dim > > &gradients, const unsigned int component=0) const
virtual Tensor< 1, dim > gradient(const Point< dim > &p, const unsigned int component=0) const
virtual Tensor< 1, dim > gradient(const Point< dim > &p, const unsigned int component=0) const
virtual double value(const Point< dim > &p, const unsigned int component=0) const
numbers::NumberTraits< Number >::real_type square() const
FourierCosineFunction(const Tensor< 1, dim > &fourier_coefficients)
virtual double value(const Point< dim > &p, const unsigned int component=0) const
FourierCosineSum(const std::vector< Point< dim > > &fourier_coefficients, const std::vector< double > &weights)
virtual void value_list(const std::vector< Point< dim > > &points, std::vector< double > &values, const unsigned int component=0) const
FourierSineFunction(const Tensor< 1, dim > &fourier_coefficients)
virtual double laplacian(const Point< dim > &p, const unsigned int component=0) const
const Tensor< 1, dim > exponents
unsigned int size(const unsigned int i) const
virtual double value(const Point< dim > &p, const unsigned int component=0) const
virtual Tensor< 1, dim > gradient(const Point< dim > &p, const unsigned int component=0) const
virtual Tensor< 1, dim > gradient(const Point< dim > &p, const unsigned int component=0) const
virtual double value(const Point< dim > &p, const unsigned int component=0) const
virtual void value_list(const std::vector< Point< dim > > &points, std::vector< double > &values, const unsigned int component=0) const
virtual double laplacian(const Point< dim > &p, const unsigned int component=0) const
virtual Tensor< 1, dim > gradient(const Point< dim > &p, const unsigned int component=0) const
virtual void laplacian_list(const std::vector< Point< dim > > &points, std::vector< double > &values, const unsigned int component=0) const
virtual void value_list(const std::vector< Point< dim > > &points, std::vector< double > &values, const unsigned int component) const
virtual Tensor< 1, dim > gradient(const Point< dim > &p, const unsigned int component=0) const
virtual void value_list(const std::vector< Point< dim > > &points, std::vector< double > &values, const unsigned int component=0) const
InterpolatedTensorProductGridData(const std_cxx11::array< std::vector< double >, dim > &coordinate_values, const Table< dim, double > &data_values)
virtual double laplacian(const Point< dim > &p, const unsigned int component=0) const
virtual void value_list(const std::vector< Point< dim > > &points, std::vector< double > &values, const unsigned int component=0) const
virtual void vector_value_list(const std::vector< Point< dim > > &points, std::vector< Vector< double > > &values) const
JumpFunction(const Point< dim > &direction, const double steepness)
virtual Tensor< 1, dim > gradient(const Point< dim > &p, const unsigned int component=0) const
FourierSineSum(const std::vector< Point< dim > > &fourier_coefficients, const std::vector< double > &weights)