Tutorial

Installation

MeshIntegrals.jl is registered in the official Julia General registry, enabling it to be easily installed using Julia on an internet-connected computer. MeshIntegrals.jl should usually be installed in conjunction with Meshes.jl and Unitful.jl which provide support for geometries and physical units, respectively.

MeshIntegrals.jl can be installed from the Julia REPL by entering pkg mode with the ] key and adding it by name

pkg> add MeshIntegrals

or by calling the built-in Pkg.jl library.

import Pkg
Pkg.add("MeshIntegrals")

Basic Usage

Usage of MeshIntegrals.jl typically also involves using Meshes.jl and Unitful.jl, so all three packages will be used in this example.

using Meshes
using MeshIntegrals
using Unitful

Define a Geometry to Use as an Integration Domain

Here, representing the domain being integrated over, we will define a Bezier curve whose path approximates a sine-wave on the xy-plane.

N = 361  # number of control points
xs = range(-π, π, length=N)  # x will be bounded in [-π, π] meters
curve = Meshes.BezierCurve([Point(x * u"m", sin(x) * u"m", 0.0u"m") for x in xs])
BezierCurve
└─ controls: [Point(x: -3.141592653589793 m, y: -1.2246467991473532e-16 m, z: 0.0 m), Point(x: -3.12413936106985 m, y: -0.01745240643728344 m, z: 0.0 m), Point(x: -3.1066860685499065 m, y: -0.03489949670250114 m, z: 0.0 m), Point(x: -3.0892327760299634 m, y: -0.05233595624294381 m, z: 0.0 m), Point(x: -3.07177948351002 m, y: -0.06975647374412552 m, z: 0.0 m), Point(x: -3.0543261909900767 m, y: -0.0871557427476582 m, z: 0.0 m), Point(x: -3.036872898470133 m, y: -0.10452846326765373 m, z: 0.0 m), Point(x: -3.01941960595019 m, y: -0.12186934340514755 m, z: 0.0 m), Point(x: -3.0019663134302466 m, y: -0.13917310096006574 m, z: 0.0 m), Point(x: -2.9845130209103035 m, y: -0.15643446504023098 m, z: 0.0 m), Point(x: -2.9670597283903604 m, y: -0.17364817766693028 m, z: 0.0 m), Point(x: -2.949606435870417 m, y: -0.19080899537654497 m, z: 0.0 m), Point(x: -2.9321531433504737 m, y: -0.20791169081775931 m, z: 0.0 m), Point(x: -2.91469985083053 m, y: -0.2249510543438652 m, z: 0.0 m), Point(x: -2.897246558310587 m, y: -0.24192189559966773 m, z: 0.0 m), Point(x: -2.8797932657906435 m, y: -0.258819045102521 m, z: 0.0 m), Point(x: -2.8623399732707004 m, y: -0.2756373558169992 m, z: 0.0 m), Point(x: -2.844886680750757 m, y: -0.29237170472273705 m, z: 0.0 m), Point(x: -2.827433388230814 m, y: -0.3090169943749475 m, z: 0.0 m), Point(x: -2.8099800957108707 m, y: -0.3255681544571566 m, z: 0.0 m), Point(x: -2.792526803190927 m, y: -0.3420201433256689 m, z: 0.0 m), Point(x: -2.775073510670984 m, y: -0.3583679495453002 m, z: 0.0 m), Point(x: -2.7576202181510405 m, y: -0.37460659341591224 m, z: 0.0 m), Point(x: -2.7401669256310974 m, y: -0.39073112848927377 m, z: 0.0 m), Point(x: -2.722713633111154 m, y: -0.40673664307580043 m, z: 0.0 m), Point(x: -2.705260340591211 m, y: -0.4226182617406995 m, z: 0.0 m), Point(x: -2.6878070480712672 m, y: -0.4383711467890777 m, z: 0.0 m), Point(x: -2.670353755551324 m, y: -0.45399049973954686 m, z: 0.0 m), Point(x: -2.652900463031381 m, y: -0.4694715627858907 m, z: 0.0 m), Point(x: -2.6354471705114375 m, y: -0.48480962024633717 m, z: 0.0 m), Point(x: -2.6179938779914944 m, y: -0.49999999999999994 m, z: 0.0 m), Point(x: -2.600540585471551 m, y: -0.5150380749100544 m, z: 0.0 m), Point(x: -2.5830872929516078 m, y: -0.5299192642332049 m, z: 0.0 m), Point(x: -2.5656340004316642 m, y: -0.5446390350150273 m, z: 0.0 m), Point(x: -2.548180707911721 m, y: -0.5591929034707469 m, z: 0.0 m), Point(x: -2.5307274153917776 m, y: -0.5735764363510464 m, z: 0.0 m), Point(x: -2.5132741228718345 m, y: -0.5877852522924732 m, z: 0.0 m), Point(x: -2.4958208303518914 m, y: -0.6018150231520482 m, z: 0.0 m), Point(x: -2.478367537831948 m, y: -0.6156614753256584 m, z: 0.0 m), Point(x: -2.4609142453120048 m, y: -0.6293203910498374 m, z: 0.0 m), Point(x: -2.443460952792061 m, y: -0.6427876096865395 m, z: 0.0 m), Point(x: -2.426007660272118 m, y: -0.6560590289905073 m, z: 0.0 m), Point(x: -2.4085543677521746 m, y: -0.6691306063588583 m, z: 0.0 m), Point(x: -2.3911010752322315 m, y: -0.6819983600624986 m, z: 0.0 m), Point(x: -2.373647782712288 m, y: -0.6946583704589975 m, z: 0.0 m), Point(x: -2.356194490192345 m, y: -0.7071067811865476 m, z: 0.0 m), Point(x: -2.3387411976724017 m, y: -0.7193398003386511 m, z: 0.0 m), Point(x: -2.321287905152458 m, y: -0.7313537016191706 m, z: 0.0 m), Point(x: -2.303834612632515 m, y: -0.7431448254773942 m, z: 0.0 m), Point(x: -2.2863813201125716 m, y: -0.7547095802227721 m, z: 0.0 m), Point(x: -2.2689280275926285 m, y: -0.766044443118978 m, z: 0.0 m), Point(x: -2.251474735072685 m, y: -0.777145961456971 m, z: 0.0 m), Point(x: -2.234021442552742 m, y: -0.788010753606722 m, z: 0.0 m), Point(x: -2.2165681500327983 m, y: -0.798635510047293 m, z: 0.0 m), Point(x: -2.199114857512855 m, y: -0.8090169943749475 m, z: 0.0 m), Point(x: -2.181661564992912 m, y: -0.8191520442889917 m, z: 0.0 m), Point(x: -2.1642082724729685 m, y: -0.8290375725550417 m, z: 0.0 m), Point(x: -2.1467549799530254 m, y: -0.838670567945424 m, z: 0.0 m), Point(x: -2.129301687433082 m, y: -0.8480480961564261 m, z: 0.0 m), Point(x: -2.111848394913139 m, y: -0.8571673007021123 m, z: 0.0 m), Point(x: -2.0943951023931953 m, y: -0.8660254037844387 m, z: 0.0 m), Point(x: -2.076941809873252 m, y: -0.8746197071393959 m, z: 0.0 m), Point(x: -2.0594885173533086 m, y: -0.8829475928589271 m, z: 0.0 m), Point(x: -2.0420352248333655 m, y: -0.8910065241883679 m, z: 0.0 m), Point(x: -2.0245819323134224 m, y: -0.8987940462991669 m, z: 0.0 m), Point(x: -2.007128639793479 m, y: -0.90630778703665 m, z: 0.0 m), Point(x: -1.9896753472735356 m, y: -0.913545457642601 m, z: 0.0 m), Point(x: -1.9722220547535922 m, y: -0.9205048534524404 m, z: 0.0 m), Point(x: -1.9547687622336491 m, y: -0.9271838545667874 m, z: 0.0 m), Point(x: -1.9373154697137058 m, y: -0.9335804264972017 m, z: 0.0 m), Point(x: -1.9198621771937625 m, y: -0.9396926207859084 m, z: 0.0 m), Point(x: -1.9024088846738192 m, y: -0.9455185755993168 m, z: 0.0 m), Point(x: -1.8849555921538759 m, y: -0.9510565162951536 m, z: 0.0 m), Point(x: -1.8675022996339325 m, y: -0.9563047559630355 m, z: 0.0 m), Point(x: -1.8500490071139892 m, y: -0.9612616959383189 m, z: 0.0 m), Point(x: -1.832595714594046 m, y: -0.9659258262890683 m, z: 0.0 m), Point(x: -1.8151424220741026 m, y: -0.9702957262759965 m, z: 0.0 m), Point(x: -1.7976891295541595 m, y: -0.9743700647852352 m, z: 0.0 m), Point(x: -1.7802358370342162 m, y: -0.9781476007338057 m, z: 0.0 m), Point(x: -1.7627825445142729 m, y: -0.981627183447664 m, z: 0.0 m), Point(x: -1.7453292519943295 m, y: -0.984807753012208 m, z: 0.0 m), Point(x: -1.7278759594743862 m, y: -0.9876883405951378 m, z: 0.0 m), Point(x: -1.710422666954443 m, y: -0.9902680687415704 m, z: 0.0 m), Point(x: -1.6929693744344996 m, y: -0.9925461516413221 m, z: 0.0 m), Point(x: -1.6755160819145563 m, y: -0.9945218953682734 m, z: 0.0 m), Point(x: -1.658062789394613 m, y: -0.9961946980917455 m, z: 0.0 m), Point(x: -1.6406094968746698 m, y: -0.9975640502598242 m, z: 0.0 m), Point(x: -1.6231562043547265 m, y: -0.9986295347545738 m, z: 0.0 m), Point(x: -1.6057029118347832 m, y: -0.9993908270190958 m, z: 0.0 m), Point(x: -1.5882496193148399 m, y: -0.9998476951563913 m, z: 0.0 m), Point(x: -1.5707963267948966 m, y: -1.0 m, z: 0.0 m), Point(x: -1.5533430342749532 m, y: -0.9998476951563913 m, z: 0.0 m), Point(x: -1.53588974175501 m, y: -0.9993908270190958 m, z: 0.0 m), Point(x: -1.5184364492350666 m, y: -0.9986295347545738 m, z: 0.0 m), Point(x: -1.5009831567151233 m, y: -0.9975640502598242 m, z: 0.0 m), Point(x: -1.4835298641951802 m, y: -0.9961946980917455 m, z: 0.0 m), Point(x: -1.4660765716752369 m, y: -0.9945218953682733 m, z: 0.0 m), Point(x: -1.4486232791552935 m, y: -0.992546151641322 m, z: 0.0 m), Point(x: -1.4311699866353502 m, y: -0.9902680687415704 m, z: 0.0 m), Point(x: -1.413716694115407 m, y: -0.9876883405951378 m, z: 0.0 m), Point(x: -1.3962634015954636 m, y: -0.984807753012208 m, z: 0.0 m), Point(x: -1.3788101090755203 m, y: -0.981627183447664 m, z: 0.0 m), Point(x: -1.361356816555577 m, y: -0.9781476007338056 m, z: 0.0 m), Point(x: -1.3439035240356336 m, y: -0.9743700647852352 m, z: 0.0 m), Point(x: -1.3264502315156905 m, y: -0.9702957262759965 m, z: 0.0 m), Point(x: -1.3089969389957472 m, y: -0.9659258262890683 m, z: 0.0 m), Point(x: -1.2915436464758039 m, y: -0.9612616959383189 m, z: 0.0 m), Point(x: -1.2740903539558606 m, y: -0.9563047559630354 m, z: 0.0 m), Point(x: -1.2566370614359172 m, y: -0.9510565162951535 m, z: 0.0 m), Point(x: -1.239183768915974 m, y: -0.9455185755993167 m, z: 0.0 m), Point(x: -1.2217304763960306 m, y: -0.9396926207859083 m, z: 0.0 m), Point(x: -1.2042771838760873 m, y: -0.9335804264972017 m, z: 0.0 m), Point(x: -1.186823891356144 m, y: -0.9271838545667873 m, z: 0.0 m), Point(x: -1.1693705988362009 m, y: -0.9205048534524404 m, z: 0.0 m), Point(x: -1.1519173063162575 m, y: -0.9135454576426009 m, z: 0.0 m), Point(x: -1.1344640137963142 m, y: -0.9063077870366499 m, z: 0.0 m), Point(x: -1.117010721276371 m, y: -0.898794046299167 m, z: 0.0 m), Point(x: -1.0995574287564276 m, y: -0.8910065241883678 m, z: 0.0 m), Point(x: -1.0821041362364843 m, y: -0.8829475928589269 m, z: 0.0 m), Point(x: -1.064650843716541 m, y: -0.8746197071393957 m, z: 0.0 m), Point(x: -1.0471975511965976 m, y: -0.8660254037844386 m, z: 0.0 m), Point(x: -1.0297442586766543 m, y: -0.8571673007021122 m, z: 0.0 m), Point(x: -1.0122909661567112 m, y: -0.8480480961564261 m, z: 0.0 m), Point(x: -0.9948376736367678 m, y: -0.8386705679454239 m, z: 0.0 m), Point(x: -0.9773843811168246 m, y: -0.8290375725550417 m, z: 0.0 m), Point(x: -0.9599310885968813 m, y: -0.8191520442889918 m, z: 0.0 m), Point(x: -0.9424777960769379 m, y: -0.8090169943749475 m, z: 0.0 m), Point(x: -0.9250245035569946 m, y: -0.7986355100472928 m, z: 0.0 m), Point(x: -0.9075712110370513 m, y: -0.7880107536067219 m, z: 0.0 m), Point(x: -0.8901179185171081 m, y: -0.7771459614569709 m, z: 0.0 m), Point(x: -0.8726646259971648 m, y: -0.766044443118978 m, z: 0.0 m), Point(x: -0.8552113334772214 m, y: -0.754709580222772 m, z: 0.0 m), Point(x: -0.8377580409572781 m, y: -0.7431448254773941 m, z: 0.0 m), Point(x: -0.8203047484373349 m, y: -0.7313537016191705 m, z: 0.0 m), Point(x: -0.8028514559173916 m, y: -0.7193398003386512 m, z: 0.0 m), Point(x: -0.7853981633974483 m, y: -0.7071067811865475 m, z: 0.0 m), Point(x: -0.767944870877505 m, y: -0.6946583704589973 m, z: 0.0 m), Point(x: -0.7504915783575616 m, y: -0.6819983600624985 m, z: 0.0 m), Point(x: -0.7330382858376184 m, y: -0.6691306063588582 m, z: 0.0 m), Point(x: -0.7155849933176751 m, y: -0.6560590289905073 m, z: 0.0 m), Point(x: -0.6981317007977318 m, y: -0.6427876096865393 m, z: 0.0 m), Point(x: -0.6806784082777885 m, y: -0.6293203910498374 m, z: 0.0 m), Point(x: -0.6632251157578453 m, y: -0.6156614753256583 m, z: 0.0 m), Point(x: -0.6457718232379019 m, y: -0.6018150231520483 m, z: 0.0 m), Point(x: -0.6283185307179586 m, y: -0.5877852522924731 m, z: 0.0 m), Point(x: -0.6108652381980153 m, y: -0.573576436351046 m, z: 0.0 m), Point(x: -0.593411945678072 m, y: -0.5591929034707468 m, z: 0.0 m), Point(x: -0.5759586531581288 m, y: -0.5446390350150271 m, z: 0.0 m), Point(x: -0.5585053606381855 m, y: -0.5299192642332049 m, z: 0.0 m), Point(x: -0.5410520681182421 m, y: -0.5150380749100542 m, z: 0.0 m), Point(x: -0.5235987755982988 m, y: -0.49999999999999994 m, z: 0.0 m), Point(x: -0.5061454830783556 m, y: -0.48480962024633706 m, z: 0.0 m), Point(x: -0.4886921905584123 m, y: -0.4694715627858908 m, z: 0.0 m), Point(x: -0.47123889803846897 m, y: -0.45399049973954675 m, z: 0.0 m), Point(x: -0.45378560551852565 m, y: -0.4383711467890774 m, z: 0.0 m), Point(x: -0.4363323129985824 m, y: -0.42261826174069944 m, z: 0.0 m), Point(x: -0.41887902047863906 m, y: -0.40673664307580015 m, z: 0.0 m), Point(x: -0.4014257279586958 m, y: -0.39073112848927377 m, z: 0.0 m), Point(x: -0.3839724354387525 m, y: -0.374606593415912 m, z: 0.0 m), Point(x: -0.3665191429188092 m, y: -0.35836794954530027 m, z: 0.0 m), Point(x: -0.3490658503988659 m, y: -0.3420201433256687 m, z: 0.0 m), Point(x: -0.33161255787892263 m, y: -0.3255681544571567 m, z: 0.0 m), Point(x: -0.3141592653589793 m, y: -0.3090169943749474 m, z: 0.0 m), Point(x: -0.296705972839036 m, y: -0.2923717047227367 m, z: 0.0 m), Point(x: -0.2792526803190927 m, y: -0.27563735581699916 m, z: 0.0 m), Point(x: -0.2617993877991494 m, y: -0.25881904510252074 m, z: 0.0 m), Point(x: -0.24434609527920614 m, y: -0.24192189559966773 m, z: 0.0 m), Point(x: -0.22689280275926282 m, y: -0.22495105434386498 m, z: 0.0 m), Point(x: -0.20943951023931953 m, y: -0.20791169081775931 m, z: 0.0 m), Point(x: -0.19198621771937624 m, y: -0.1908089953765448 m, z: 0.0 m), Point(x: -0.17453292519943295 m, y: -0.17364817766693033 m, z: 0.0 m), Point(x: -0.15707963267948966 m, y: -0.15643446504023087 m, z: 0.0 m), Point(x: -0.13962634015954636 m, y: -0.13917310096006544 m, z: 0.0 m), Point(x: -0.12217304763960307 m, y: -0.12186934340514748 m, z: 0.0 m), Point(x: -0.10471975511965977 m, y: -0.10452846326765346 m, z: 0.0 m), Point(x: -0.08726646259971647 m, y: -0.08715574274765817 m, z: 0.0 m), Point(x: -0.06981317007977318 m, y: -0.0697564737441253 m, z: 0.0 m), Point(x: -0.05235987755982988 m, y: -0.05233595624294383 m, z: 0.0 m), Point(x: -0.03490658503988659 m, y: -0.03489949670250097 m, z: 0.0 m), Point(x: -0.017453292519943295 m, y: -0.01745240643728351 m, z: 0.0 m), Point(x: 2.524354896707238e-29 m, y: 2.524354896707238e-29 m, z: 0.0 m), Point(x: 0.017453292519943295 m, y: 0.01745240643728351 m, z: 0.0 m), Point(x: 0.03490658503988659 m, y: 0.03489949670250097 m, z: 0.0 m), Point(x: 0.05235987755982988 m, y: 0.05233595624294383 m, z: 0.0 m), Point(x: 0.06981317007977318 m, y: 0.0697564737441253 m, z: 0.0 m), Point(x: 0.08726646259971647 m, y: 0.08715574274765817 m, z: 0.0 m), Point(x: 0.10471975511965977 m, y: 0.10452846326765346 m, z: 0.0 m), Point(x: 0.12217304763960307 m, y: 0.12186934340514748 m, z: 0.0 m), Point(x: 0.13962634015954636 m, y: 0.13917310096006544 m, z: 0.0 m), Point(x: 0.15707963267948966 m, y: 0.15643446504023087 m, z: 0.0 m), Point(x: 0.17453292519943295 m, y: 0.17364817766693033 m, z: 0.0 m), Point(x: 0.19198621771937624 m, y: 0.1908089953765448 m, z: 0.0 m), Point(x: 0.20943951023931953 m, y: 0.20791169081775931 m, z: 0.0 m), Point(x: 0.22689280275926282 m, y: 0.22495105434386498 m, z: 0.0 m), Point(x: 0.24434609527920614 m, y: 0.24192189559966773 m, z: 0.0 m), Point(x: 0.2617993877991494 m, y: 0.25881904510252074 m, z: 0.0 m), Point(x: 0.2792526803190927 m, y: 0.27563735581699916 m, z: 0.0 m), Point(x: 0.296705972839036 m, y: 0.2923717047227367 m, z: 0.0 m), Point(x: 0.3141592653589793 m, y: 0.3090169943749474 m, z: 0.0 m), Point(x: 0.33161255787892263 m, y: 0.3255681544571567 m, z: 0.0 m), Point(x: 0.3490658503988659 m, y: 0.3420201433256687 m, z: 0.0 m), Point(x: 0.3665191429188092 m, y: 0.35836794954530027 m, z: 0.0 m), Point(x: 0.3839724354387525 m, y: 0.374606593415912 m, z: 0.0 m), Point(x: 0.4014257279586958 m, y: 0.39073112848927377 m, z: 0.0 m), Point(x: 0.41887902047863906 m, y: 0.40673664307580015 m, z: 0.0 m), Point(x: 0.4363323129985824 m, y: 0.42261826174069944 m, z: 0.0 m), Point(x: 0.45378560551852565 m, y: 0.4383711467890774 m, z: 0.0 m), Point(x: 0.47123889803846897 m, y: 0.45399049973954675 m, z: 0.0 m), Point(x: 0.4886921905584123 m, y: 0.4694715627858908 m, z: 0.0 m), Point(x: 0.5061454830783556 m, y: 0.48480962024633706 m, z: 0.0 m), Point(x: 0.5235987755982988 m, y: 0.49999999999999994 m, z: 0.0 m), Point(x: 0.5410520681182421 m, y: 0.5150380749100542 m, z: 0.0 m), Point(x: 0.5585053606381855 m, y: 0.5299192642332049 m, z: 0.0 m), Point(x: 0.5759586531581288 m, y: 0.5446390350150271 m, z: 0.0 m), Point(x: 0.593411945678072 m, y: 0.5591929034707468 m, z: 0.0 m), Point(x: 0.6108652381980153 m, y: 0.573576436351046 m, z: 0.0 m), Point(x: 0.6283185307179586 m, y: 0.5877852522924731 m, z: 0.0 m), Point(x: 0.6457718232379019 m, y: 0.6018150231520483 m, z: 0.0 m), Point(x: 0.6632251157578453 m, y: 0.6156614753256583 m, z: 0.0 m), Point(x: 0.6806784082777885 m, y: 0.6293203910498374 m, z: 0.0 m), Point(x: 0.6981317007977318 m, y: 0.6427876096865393 m, z: 0.0 m), Point(x: 0.7155849933176751 m, y: 0.6560590289905073 m, z: 0.0 m), Point(x: 0.7330382858376184 m, y: 0.6691306063588582 m, z: 0.0 m), Point(x: 0.7504915783575616 m, y: 0.6819983600624985 m, z: 0.0 m), Point(x: 0.767944870877505 m, y: 0.6946583704589973 m, z: 0.0 m), Point(x: 0.7853981633974483 m, y: 0.7071067811865475 m, z: 0.0 m), Point(x: 0.8028514559173916 m, y: 0.7193398003386512 m, z: 0.0 m), Point(x: 0.8203047484373349 m, y: 0.7313537016191705 m, z: 0.0 m), Point(x: 0.8377580409572781 m, y: 0.7431448254773941 m, z: 0.0 m), Point(x: 0.8552113334772214 m, y: 0.754709580222772 m, z: 0.0 m), Point(x: 0.8726646259971648 m, y: 0.766044443118978 m, z: 0.0 m), Point(x: 0.8901179185171081 m, y: 0.7771459614569709 m, z: 0.0 m), Point(x: 0.9075712110370513 m, y: 0.7880107536067219 m, z: 0.0 m), Point(x: 0.9250245035569946 m, y: 0.7986355100472928 m, z: 0.0 m), Point(x: 0.9424777960769379 m, y: 0.8090169943749475 m, z: 0.0 m), Point(x: 0.9599310885968813 m, y: 0.8191520442889918 m, z: 0.0 m), Point(x: 0.9773843811168246 m, y: 0.8290375725550417 m, z: 0.0 m), Point(x: 0.9948376736367678 m, y: 0.8386705679454239 m, z: 0.0 m), Point(x: 1.0122909661567112 m, y: 0.8480480961564261 m, z: 0.0 m), Point(x: 1.0297442586766543 m, y: 0.8571673007021122 m, z: 0.0 m), Point(x: 1.0471975511965976 m, y: 0.8660254037844386 m, z: 0.0 m), Point(x: 1.064650843716541 m, y: 0.8746197071393957 m, z: 0.0 m), Point(x: 1.0821041362364843 m, y: 0.8829475928589269 m, z: 0.0 m), Point(x: 1.0995574287564276 m, y: 0.8910065241883678 m, z: 0.0 m), Point(x: 1.117010721276371 m, y: 0.898794046299167 m, z: 0.0 m), Point(x: 1.1344640137963142 m, y: 0.9063077870366499 m, z: 0.0 m), Point(x: 1.1519173063162575 m, y: 0.9135454576426009 m, z: 0.0 m), Point(x: 1.1693705988362009 m, y: 0.9205048534524404 m, z: 0.0 m), Point(x: 1.186823891356144 m, y: 0.9271838545667873 m, z: 0.0 m), Point(x: 1.2042771838760873 m, y: 0.9335804264972017 m, z: 0.0 m), Point(x: 1.2217304763960306 m, y: 0.9396926207859083 m, z: 0.0 m), Point(x: 1.239183768915974 m, y: 0.9455185755993167 m, z: 0.0 m), Point(x: 1.2566370614359172 m, y: 0.9510565162951535 m, z: 0.0 m), Point(x: 1.2740903539558606 m, y: 0.9563047559630354 m, z: 0.0 m), Point(x: 1.2915436464758039 m, y: 0.9612616959383189 m, z: 0.0 m), Point(x: 1.3089969389957472 m, y: 0.9659258262890683 m, z: 0.0 m), Point(x: 1.3264502315156905 m, y: 0.9702957262759965 m, z: 0.0 m), Point(x: 1.3439035240356336 m, y: 0.9743700647852352 m, z: 0.0 m), Point(x: 1.361356816555577 m, y: 0.9781476007338056 m, z: 0.0 m), Point(x: 1.3788101090755203 m, y: 0.981627183447664 m, z: 0.0 m), Point(x: 1.3962634015954636 m, y: 0.984807753012208 m, z: 0.0 m), Point(x: 1.413716694115407 m, y: 0.9876883405951378 m, z: 0.0 m), Point(x: 1.4311699866353502 m, y: 0.9902680687415704 m, z: 0.0 m), Point(x: 1.4486232791552935 m, y: 0.992546151641322 m, z: 0.0 m), Point(x: 1.4660765716752369 m, y: 0.9945218953682733 m, z: 0.0 m), Point(x: 1.4835298641951802 m, y: 0.9961946980917455 m, z: 0.0 m), Point(x: 1.5009831567151233 m, y: 0.9975640502598242 m, z: 0.0 m), Point(x: 1.5184364492350666 m, y: 0.9986295347545738 m, z: 0.0 m), Point(x: 1.53588974175501 m, y: 0.9993908270190958 m, z: 0.0 m), Point(x: 1.5533430342749532 m, y: 0.9998476951563913 m, z: 0.0 m), Point(x: 1.5707963267948966 m, y: 1.0 m, z: 0.0 m), Point(x: 1.5882496193148399 m, y: 0.9998476951563913 m, z: 0.0 m), Point(x: 1.6057029118347832 m, y: 0.9993908270190958 m, z: 0.0 m), Point(x: 1.6231562043547265 m, y: 0.9986295347545738 m, z: 0.0 m), Point(x: 1.6406094968746698 m, y: 0.9975640502598242 m, z: 0.0 m), Point(x: 1.658062789394613 m, y: 0.9961946980917455 m, z: 0.0 m), Point(x: 1.6755160819145563 m, y: 0.9945218953682734 m, z: 0.0 m), Point(x: 1.6929693744344996 m, y: 0.9925461516413221 m, z: 0.0 m), Point(x: 1.710422666954443 m, y: 0.9902680687415704 m, z: 0.0 m), Point(x: 1.7278759594743862 m, y: 0.9876883405951378 m, z: 0.0 m), Point(x: 1.7453292519943295 m, y: 0.984807753012208 m, z: 0.0 m), Point(x: 1.7627825445142729 m, y: 0.981627183447664 m, z: 0.0 m), Point(x: 1.7802358370342162 m, y: 0.9781476007338057 m, z: 0.0 m), Point(x: 1.7976891295541595 m, y: 0.9743700647852352 m, z: 0.0 m), Point(x: 1.8151424220741026 m, y: 0.9702957262759965 m, z: 0.0 m), Point(x: 1.832595714594046 m, y: 0.9659258262890683 m, z: 0.0 m), Point(x: 1.8500490071139892 m, y: 0.9612616959383189 m, z: 0.0 m), Point(x: 1.8675022996339325 m, y: 0.9563047559630355 m, z: 0.0 m), Point(x: 1.8849555921538759 m, y: 0.9510565162951536 m, z: 0.0 m), Point(x: 1.9024088846738192 m, y: 0.9455185755993168 m, z: 0.0 m), Point(x: 1.9198621771937625 m, y: 0.9396926207859084 m, z: 0.0 m), Point(x: 1.9373154697137058 m, y: 0.9335804264972017 m, z: 0.0 m), Point(x: 1.9547687622336491 m, y: 0.9271838545667874 m, z: 0.0 m), Point(x: 1.9722220547535922 m, y: 0.9205048534524404 m, z: 0.0 m), Point(x: 1.9896753472735356 m, y: 0.913545457642601 m, z: 0.0 m), Point(x: 2.007128639793479 m, y: 0.90630778703665 m, z: 0.0 m), Point(x: 2.0245819323134224 m, y: 0.8987940462991669 m, z: 0.0 m), Point(x: 2.0420352248333655 m, y: 0.8910065241883679 m, z: 0.0 m), Point(x: 2.0594885173533086 m, y: 0.8829475928589271 m, z: 0.0 m), Point(x: 2.076941809873252 m, y: 0.8746197071393959 m, z: 0.0 m), Point(x: 2.0943951023931953 m, y: 0.8660254037844387 m, z: 0.0 m), Point(x: 2.111848394913139 m, y: 0.8571673007021123 m, z: 0.0 m), Point(x: 2.129301687433082 m, y: 0.8480480961564261 m, z: 0.0 m), Point(x: 2.1467549799530254 m, y: 0.838670567945424 m, z: 0.0 m), Point(x: 2.1642082724729685 m, y: 0.8290375725550417 m, z: 0.0 m), Point(x: 2.181661564992912 m, y: 0.8191520442889917 m, z: 0.0 m), Point(x: 2.199114857512855 m, y: 0.8090169943749475 m, z: 0.0 m), Point(x: 2.2165681500327983 m, y: 0.798635510047293 m, z: 0.0 m), Point(x: 2.234021442552742 m, y: 0.788010753606722 m, z: 0.0 m), Point(x: 2.251474735072685 m, y: 0.777145961456971 m, z: 0.0 m), Point(x: 2.2689280275926285 m, y: 0.766044443118978 m, z: 0.0 m), Point(x: 2.2863813201125716 m, y: 0.7547095802227721 m, z: 0.0 m), Point(x: 2.303834612632515 m, y: 0.7431448254773942 m, z: 0.0 m), Point(x: 2.321287905152458 m, y: 0.7313537016191706 m, z: 0.0 m), Point(x: 2.3387411976724017 m, y: 0.7193398003386511 m, z: 0.0 m), Point(x: 2.356194490192345 m, y: 0.7071067811865476 m, z: 0.0 m), Point(x: 2.373647782712288 m, y: 0.6946583704589975 m, z: 0.0 m), Point(x: 2.3911010752322315 m, y: 0.6819983600624986 m, z: 0.0 m), Point(x: 2.4085543677521746 m, y: 0.6691306063588583 m, z: 0.0 m), Point(x: 2.426007660272118 m, y: 0.6560590289905073 m, z: 0.0 m), Point(x: 2.443460952792061 m, y: 0.6427876096865395 m, z: 0.0 m), Point(x: 2.4609142453120048 m, y: 0.6293203910498374 m, z: 0.0 m), Point(x: 2.478367537831948 m, y: 0.6156614753256584 m, z: 0.0 m), Point(x: 2.4958208303518914 m, y: 0.6018150231520482 m, z: 0.0 m), Point(x: 2.5132741228718345 m, y: 0.5877852522924732 m, z: 0.0 m), Point(x: 2.5307274153917776 m, y: 0.5735764363510464 m, z: 0.0 m), Point(x: 2.548180707911721 m, y: 0.5591929034707469 m, z: 0.0 m), Point(x: 2.5656340004316642 m, y: 0.5446390350150273 m, z: 0.0 m), Point(x: 2.5830872929516078 m, y: 0.5299192642332049 m, z: 0.0 m), Point(x: 2.600540585471551 m, y: 0.5150380749100544 m, z: 0.0 m), Point(x: 2.6179938779914944 m, y: 0.49999999999999994 m, z: 0.0 m), Point(x: 2.6354471705114375 m, y: 0.48480962024633717 m, z: 0.0 m), Point(x: 2.652900463031381 m, y: 0.4694715627858907 m, z: 0.0 m), Point(x: 2.670353755551324 m, y: 0.45399049973954686 m, z: 0.0 m), Point(x: 2.6878070480712672 m, y: 0.4383711467890777 m, z: 0.0 m), Point(x: 2.705260340591211 m, y: 0.4226182617406995 m, z: 0.0 m), Point(x: 2.722713633111154 m, y: 0.40673664307580043 m, z: 0.0 m), Point(x: 2.7401669256310974 m, y: 0.39073112848927377 m, z: 0.0 m), Point(x: 2.7576202181510405 m, y: 0.37460659341591224 m, z: 0.0 m), Point(x: 2.775073510670984 m, y: 0.3583679495453002 m, z: 0.0 m), Point(x: 2.792526803190927 m, y: 0.3420201433256689 m, z: 0.0 m), Point(x: 2.8099800957108707 m, y: 0.3255681544571566 m, z: 0.0 m), Point(x: 2.827433388230814 m, y: 0.3090169943749475 m, z: 0.0 m), Point(x: 2.844886680750757 m, y: 0.29237170472273705 m, z: 0.0 m), Point(x: 2.8623399732707004 m, y: 0.2756373558169992 m, z: 0.0 m), Point(x: 2.8797932657906435 m, y: 0.258819045102521 m, z: 0.0 m), Point(x: 2.897246558310587 m, y: 0.24192189559966773 m, z: 0.0 m), Point(x: 2.91469985083053 m, y: 0.2249510543438652 m, z: 0.0 m), Point(x: 2.9321531433504737 m, y: 0.20791169081775931 m, z: 0.0 m), Point(x: 2.949606435870417 m, y: 0.19080899537654497 m, z: 0.0 m), Point(x: 2.9670597283903604 m, y: 0.17364817766693028 m, z: 0.0 m), Point(x: 2.9845130209103035 m, y: 0.15643446504023098 m, z: 0.0 m), Point(x: 3.0019663134302466 m, y: 0.13917310096006574 m, z: 0.0 m), Point(x: 3.01941960595019 m, y: 0.12186934340514755 m, z: 0.0 m), Point(x: 3.036872898470133 m, y: 0.10452846326765373 m, z: 0.0 m), Point(x: 3.0543261909900767 m, y: 0.0871557427476582 m, z: 0.0 m), Point(x: 3.07177948351002 m, y: 0.06975647374412552 m, z: 0.0 m), Point(x: 3.0892327760299634 m, y: 0.05233595624294381 m, z: 0.0 m), Point(x: 3.1066860685499065 m, y: 0.03489949670250114 m, z: 0.0 m), Point(x: 3.12413936106985 m, y: 0.01745240643728344 m, z: 0.0 m), Point(x: 3.141592653589793 m, y: 1.2246467991473532e-16 m, z: 0.0 m)]

Define an Integrand Function

Here, we will define an integrand function of the following form, where all coordinates are defined in a physical space with meter units and the result is a quantity in units of Ohms per meter.

\[f(x, y, z) = \frac{1}{\sqrt{1 + \cos^2(x/\text{m})}} ~ \Omega/\text{m}\]

Integrand functions are expected to provide a method that takes a single Meshes.Point argument, so this can be written in Julia as

function f(p::Meshes.Point)
    x, y, z = Meshes.to(p)
    return (1 / sqrt(1 + cos(x / u"m")^2)) * u"Ω/m"
end
f (generic function with 1 method)

Alternatively, this could be written in the user-friendly notation

f(x, y, z) = (1 / sqrt(1 + cos(x / u"m")^2)) * u"Ω/m"
f(p::Meshes.Point) = f(Meshes.to(p)...)
f (generic function with 2 methods)

where the required f(Meshes.Point) method simply maps to the method f(x, y, z).

Integrating

This function can be integrated using recommended defaults simply by calling

integral(f, curve)  # -> Approximately 2π Ω
6.264795483127288 Ω

The alias function lineintegral works for this geometry since it has one parametric dimension. However, the aliases surfaceintegral and volumeintegral will throw an ArgumentError since the geometry is not a surface or volume.

lineintegral(f, curve)
# -> Approximately 2π Ω

surfaceintegral(f, curve)
# -> ERROR: ArgumentError: Performing a surface integral on a geometry with 1 parametric dimensions not supported.

volumeintegral(f, curve)
# -> ERROR: ArgumentError: Performing a volume integral on a geometry with 1 parametric dimensions not supported.

An IntegrationRule with settings can also be manually specified. The following example uses the adaptive Gauss-Kronrod method with a loosened absolute tolerance setting of $10^{-4}~\Omega$, which speeds up integration by sacrificing some accuracy.

integral(f, curve, GaussKronrod(atol = 1e-4u"Ω")) # -> Approximately (2π ± 1e-4) Ω
6.264795504552421 Ω

The integral function and its aliases also support Julia's do-syntax, which provides a code block to define a single-use anonymous function and then injects it as a first argument to the preceding call. This can be useful if the integrand function will not be used outside this integration call.

integral(curve) do p
    x, y, z = Meshes.to(p)
    (1 / sqrt(1 + cos(x / u"m")^2)) * u"Ω/m"
end # -> Approximately 2π Ω
6.264795483127288 Ω