PyMFEM icon indicating copy to clipboard operation
PyMFEM copied to clipboard

Array wrapping enhancement

Open sshiraiwa opened this issue 1 year ago • 3 comments

This PR includes

  1. address recent addition of kernel_dispatch.hpp in MFEM C++.
  • kernel_dispatch.hpp doesn't need to be exposed to Python. But, we need MFEM_REGISTER_KERNELS macro to be defined somehow. In this PR, MFEM_REGISTER_KERNELS is replaced to be empty macro. So that SWIG does not see the lines containing this macro.
  1. Add CoefficentArray, VectorCoefficientArray, and MatrixCoefficientArray (represent Array<* Coefficient> and so on)
  • Changed Array constructor behavior when list of SWIG-wrapped MFEM objects is passed. SWIG objects passed as an item in list/tuple looses owner ship to underlying C++ MFEM object. Internally, we create a new Array (depending on the length of container) and set each Array element one by one (after setting thisown to False).
  1. Renamed other Array< * MFEM object>.
  • They are used to be named like VectorPtrArray. We simplify it as VectorArray.
  1. SparseMatrixArray2D, DenseMatrixArray2D, HypreParMatrixArray2D are added
  • HypreParMatrixArray2D can be used with mfem.HypreParMatrixFromBlocks
  • DenseMatrixArray2D appears in BlockNonlinearFormIntegrator
  • SparseMatrixArray2D is used wtih MixedBilinearForm::GetBlocks

ToDo:

  • Update Doc
  • Add test/test_array2d.py

sshiraiwa avatar Oct 03 '24 16:10 sshiraiwa

PR is made to trigger the test.

sshiraiwa avatar Oct 03 '24 16:10 sshiraiwa

Example asked in https://github.com/mfem/PyMFEM/issues/253 can be done as follows.

   tensors =  [mfem.DenseMatrix(np.ones((3,3))*i) for i in range(max_attr)]
   tensor_coefs =  [mfem.MatrixConstantCoefficient(mat) for mat in tensors]
   sigma_array = mfem.MatrixCoefficientArray(tensor_coefs)
   sigma_attr = mfem.intArray([1,2,3,4,5])
   sigmaCoef = mfem.PWMatrixCoefficient(dim, sigma_attr, sigma_array, False)

sshiraiwa avatar Oct 05 '24 15:10 sshiraiwa

@sshiraiwa let me know when this is ready I'm happy to test it out.

justinlaughlin avatar Oct 15 '24 05:10 justinlaughlin

Closing this one w/o merging, since this version will be baseline of PyMFEM4.8

sshiraiwa avatar Apr 12 '25 15:04 sshiraiwa