Skip to content

Use of PWMatrixCoefficient to define matrix coefficients per attribute #253

@mdavids-cfs

Description

@mdavids-cfs

Hi all,
I have been trying to implement a PWMatrixCoefficient but I am having trouble with the interface (also couldn't find an example for this). The goal is to assign a MatrixConstantCoefficient per mesh attribute.
In normal MFEM (C++) this is done by creating an Array Array<MatrixCoefficient *> coefs(0); and then assigning the matrix coefficients. I thought that PyMFEM can interpret normal lists of tuples as list-equivalents, i.e., I tried something like this:

sigma_all_coefs = []
sigma_attr = mfem.intArray(max_attr)
for ti,tensor in enumerate(sigma_all): 
    # just for testing
    temp = mfem.DenseMatrix(dim)
    temp.Assign(0.0)

    # add matrix coefficient to list
    sigma_all_coefs.append(mfem.MatrixConstantCoefficient(temp)  )
    sigma_attr[ti] = ti+1   
    
# Create PW Matrix Coefficient
sigmaCoef = mfem.PWMatrixCoefficient(dim, sigma_attr, sigma_all_coefs, False)

which fails when calling the mfem.PWMatrixCoefficient constructor. Also tried another approach:

# Create PW Matrix Coefficient
sigmaCoef = mfem.PWMatrixCoefficient(dim, False)

for ti, tensor in enumerate(sigma_all):
    # Set coefficient
    sigmaCoef.UpdateCoefficient( ti+1, mfem.MatrixConstantCoefficient( mfem.DenseMatrix(tensor) ) )

which fails when attempting to assemble a bilinear operator, that utilizes the PWMatrixCoefficient.

Any thoughts on how this could be achieved?
Big thanks and warm regards,
Mathias

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions