|
203 | 203 | @test_throws "not supported" volumeintegral(f, plane) |
204 | 204 | end |
205 | 205 |
|
| 206 | +@testitem "Meshes.Quadrangle" setup=[Setup] begin |
| 207 | + using SpecialFunctions: erf |
| 208 | + quadrangle = Quadrangle((-1.0, 0.0), (-1.0, 1.0), (1.0, 1.0), (1.0, 0.0)) |
| 209 | + |
| 210 | + function f(p::P) where {P <: Meshes.Point} |
| 211 | + ur = hypot(p.coords.x, p.coords.y) |
| 212 | + r = ustrip(u"m", ur) |
| 213 | + exp(-r^2) |
| 214 | + end |
| 215 | + fv(p) = fill(f(p), 3) |
| 216 | + |
| 217 | + # Scalar integrand |
| 218 | + sol = 0.5 * π * erf(1)^2 * u"m^2" |
| 219 | + @test integral(f, quadrangle, GaussLegendre(100)) ≈ sol |
| 220 | + @test integral(f, quadrangle, GaussKronrod()) ≈ sol |
| 221 | + @test integral(f, quadrangle, HAdaptiveCubature()) ≈ sol |
| 222 | + |
| 223 | + # Vector integrand |
| 224 | + vsol = fill(sol, 3) |
| 225 | + @test integral(fv, quadrangle, GaussLegendre(100)) ≈ vsol |
| 226 | + @test integral(fv, quadrangle, GaussKronrod()) ≈ vsol |
| 227 | + @test integral(fv, quadrangle, HAdaptiveCubature()) ≈ vsol |
| 228 | + |
| 229 | + # Integral aliases |
| 230 | + @test_throws "not supported" lineintegral(f, quadrangle) |
| 231 | + @test surfaceintegral(f, quadrangle) ≈ sol |
| 232 | + @test_throws "not supported" volumeintegral(f, quadrangle) |
| 233 | +end |
| 234 | + |
206 | 235 | @testitem "Meshes.Ray" setup=[Setup] begin |
207 | 236 | a = Point(0.0u"m", 0.0u"m", 0.0u"m") |
208 | 237 | v = Vec(1.0u"m", 1.0u"m", 1.0u"m") |
|
0 commit comments