Skip to content

[Bug] Modifying global variables inside integrands of Functionals segfaults when run in parallel #262

@joshichaitanya3

Description

@joshichaitanya3

The fix for this is already planned, as mentioned in #259, but I am documenting it here as an open issue for posterity.

Describe the bug
An integrand function of, say, an AreaIntegral, is not allowed to modify state (see #259). This results in a Segmentation Fault if run in multithreaded setting.

To Reproduce
Run the following code using morpho6 -w4

import constants
import meshtools

var mb = MeshBuilder()
mb.addvertex([0,0])
mb.addvertex([1,0])
mb.addvertex([0,1])
mb.addface([0,1,2])

var m = mb.build()

var f = Field(m, fn (x,y) Matrix([x,2*y]))
var r

fn integrand(x, n) {
    var g = grad(n)
    r = []
    for (u in g) r.append(u.clone())
    return 0
}

var total = AreaIntegral(integrand, f).total(m)

print r[0]

Note that r is defined in the global scope and being modified inside the integrand.

Expected behavior
Some clear error pointing out that the variable r cannot be modified inside the integrand.

Currently, this generates a segmentation fault.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingenhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions