Dear Matthew,

Thanks for your email. I tried first what you suggested and it didn’t work. 
However, I actually tried also commenting the same function in Section and 
worked! This is the working code:


def createfields(dm):
    """Set up the solution field"""

    dim = dm.getDimension()
    # The number of solution fields
    numFields = 1
    dm.setNumFields(numFields)
    # numComp - An array of size numFields that holds the number of components 
for each field
    numComp = np.array([dim], dtype=np.int32)
    # numDof - An array of size numFields*(dim+1) which holds
    # the number of dof for each field on a mesh piece of dimension d
    numDof = np.zeros(numFields*(dim+1), dtype=np.int32)
    numDof[0] = dim # u is defined on vertices

    # Create a PetscSection based upon the dof layout specification provided
    # PetscSection: Mapping from integers in a designated range to contiguous 
sets of integers
    section = dm.createSection(numComp, numDof)
    # Sets the name of a field in the PetscSection, 0 is the field number and 
"u" is the field name
    section.setFieldName(0, "u")
    # Set the PetscSection encoding the local data layout for the DM
    dm.setDefaultSection(section)

    return dm

The question I now have is whether PETSc 3.13 and the matching petsc4py will 
change functionality to the point that this code will no longer work. Would 
that be the case?

Best regards,

— Alejandro

On 28 Mar 2020, at 18:14, Matthew Knepley 
<knep...@gmail.com<mailto:knep...@gmail.com>> wrote:

On Fri, Mar 27, 2020 at 10:09 AM Matthew Knepley 
<knep...@gmail.com<mailto:knep...@gmail.com>> wrote:
On Fri, Mar 27, 2020 at 3:31 AM Alejandro Aragon - 3ME 
<a.m.ara...@tudelft.nl<mailto:a.m.ara...@tudelft.nl>> wrote:
Dear Matthew,

Thanks for your email. I have attached the python code that reproduces the 
following error in my computer:

I think I see the problem. There were changes in DM in order to support fields 
which only occupy part of the domain.
Now you need to tell the DM about the fields before it builds a Section. I 
think in your code, you only need

  f = PetscContainer()
  f.setName("potential")
  dm.addField(field = f)

So Nicolas Barral found a much better way to do this. You only need

  dm.setNumFields(1)

  Thanks,

     Matt

from 
https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/DM/DMAddField.html<https://urldefense.proofpoint.com/v2/url?u=https-3A__www.mcs.anl.gov_petsc_petsc-2Dcurrent_docs_manualpages_DM_DMAddField.html&d=DwMFaQ&c=XYzUhXBD2cD-CornpT4QE19xOJBbRy-TBPLK0X9U2o8&r=U1Pry6bTDByPujjSnTcPY6KNXqrym6APfmtom-lIPFA&m=UZjBC-wnFeOXp0s_J1LfjZeUVWAtsWXRKX6gZQ64z7Q&s=ICc46rZbM067ZBpFcy0TKivavc07pbkZe1e8Bu4SmIA&e=>
 before the createSection().
My Python may not be correct since I never use that interface.

  Thanks,

     Matt

(.pydev) ➜  dmplex_fem mpirun -np 2  python Cpp2Python.py
Traceback (most recent call last):
  File "Cpp2Python.py", line 383, in <module>
    sys.exit(Cpp2Python())
  File "Cpp2Python.py", line 357, in Cpp2Python
    dm = createfields(dm)
  File "Cpp2Python.py", line 62, in createfields
    section.setFieldName(0, "u")
  File "PETSc/Section.pyx", line 59, in petsc4py.PETSc.Section.setFieldName
petsc4py.PETSc.Error: error code 63
[1] PetscSectionSetFieldName() line 427 in 
/private/tmp/pip-install-laf1l3br/petsc/src/vec/is/section/interface/section.c
[1] Argument out of range
[1] Section field 0 should be in [0, 0)
Traceback (most recent call last):
  File "Cpp2Python.py", line 383, in <module>
    sys.exit(Cpp2Python())
  File "Cpp2Python.py", line 357, in Cpp2Python
    dm = createfields(dm)
  File "Cpp2Python.py", line 62, in createfields
    section.setFieldName(0, "u")
  File "PETSc/Section.pyx", line 59, in petsc4py.PETSc.Section.setFieldName
petsc4py.PETSc.Error: error code 63
[0] PetscSectionSetFieldName() line 427 in 
/private/tmp/pip-install-laf1l3br/petsc/src/vec/is/section/interface/section.c
[0] Argument out of range
[0] Section field 0 should be in [0, 0)
-------------------------------------------------------
Primary job  terminated normally, but 1 process returned
a non-zero exit code.. Per user-direction, the job has been aborted.
-------------------------------------------------------
--------------------------------------------------------------------------
mpirun detected that one or more processes exited with non-zero status, thus 
causing
the job to be terminated. The first process to do so was:

  Process name: [[23972,1],0]
  Exit code:    1
--------------------------------------------------------------------------

I’m using Python 3.8 and this is the output of ‘pip freeze'

(.pydev) ➜  dmplex_fem pip freeze
cachetools==4.0.0
cycler==0.10.0
kiwisolver==1.1.0
llvmlite==0.31.0
matplotlib==3.2.1
mpi4py==3.0.3
numba==0.48.0
numpy==1.18.2
petsc==3.12.4
petsc4py==3.12.0
plexus==0.1.0
pyparsing==2.4.6
python-dateutil==2.8.1
scipy==1.4.1
six==1.14.0

I’m looking forward to getting your insight on the issue.
Best regards,

— Alejandro



On 25 Mar 2020, at 17:37, Matthew Knepley 
<knep...@gmail.com<mailto:knep...@gmail.com>> wrote:

On Wed, Mar 25, 2020 at 12:29 PM Alejandro Aragon - 3ME 
<a.m.ara...@tudelft.nl<mailto:a.m.ara...@tudelft.nl>> wrote:
Dear everyone,

I’m new to petsc4py and I’m trying to run a simple finite element code that 
uses DMPLEX to load a .msh file (created by Gmsh). In version 3.10 the code was 
working but I recently upgraded to 3.12 and I get the following error:

(.pydev) ➜  testmodule git:(e0bc9ae) ✗ mpirun -np 2 python 
testmodule/__main__.py
{3: <testmodule.constitutive.elastic.Elastic object at 0x10feea520>}
{3: <testmodule.constitutive.elastic.Elastic object at 0x10d96d520>}
Traceback (most recent call last):
  File "testmodule/__main__.py", line 32, in <module>
    sys.exit(main(sys.argv))
  File "testmodule/__main__.py", line 29, in main
    step.solve(m)
  File "/Users/aaragon/Local/testmodule/testmodule/fem/analysis/static.py", 
line 33, in solve
    self.Amat.assemblyBegin(assembly=0)  # FINAL_ASSEMBLY = 0
  File "PETSc/Mat.pyx", line 1039, in petsc4py.PETSc.Mat.assemblyBegin
petsc4py.PETSc.Error: error code 63
[1] MatAssemblyBegin() line 5182 in 
/private/tmp/pip-install-zurcx_6k/petsc/src/mat/interface/matrix.c
[1] MatAssemblyBegin_MPIAIJ() line 810 in 
/private/tmp/pip-install-zurcx_6k/petsc/src/mat/impls/aij/mpi/mpiaij.c
[1] MatStashScatterBegin_Private() line 462 in 
/private/tmp/pip-install-zurcx_6k/petsc/src/mat/utils/matstash.c
[1] MatStashScatterBegin_BTS() line 931 in 
/private/tmp/pip-install-zurcx_6k/petsc/src/mat/utils/matstash.c
[1] PetscCommBuildTwoSidedFReq() line 555 in 
/private/tmp/pip-install-zurcx_6k/petsc/src/sys/utils/mpits.c
[1] Argument out of range
[1] toranks[0] 2 not in comm size 2
Traceback (most recent call last):
  File "testmodule/__main__.py", line 32, in <module>
    sys.exit(main(sys.argv))
  File "testmodule/__main__.py", line 29, in main
    step.solve(m)
  File "/Users/aaragon/Local/testmodule/testmodule/fem/analysis/static.py", 
line 33, in solve
    self.Amat.assemblyBegin(assembly=0)  # FINAL_ASSEMBLY = 0
  File "PETSc/Mat.pyx", line 1039, in petsc4py.PETSc.Mat.assemblyBegin
petsc4py.PETSc.Error: error code 63
[0] MatAssemblyBegin() line 5182 in 
/private/tmp/pip-install-zurcx_6k/petsc/src/mat/interface/matrix.c
[0] MatAssemblyBegin_MPIAIJ() line 810 in 
/private/tmp/pip-install-zurcx_6k/petsc/src/mat/impls/aij/mpi/mpiaij.c
[0] MatStashScatterBegin_Private() line 462 in 
/private/tmp/pip-install-zurcx_6k/petsc/src/mat/utils/matstash.c
[0] MatStashScatterBegin_BTS() line 931 in 
/private/tmp/pip-install-zurcx_6k/petsc/src/mat/utils/matstash.c
[0] PetscCommBuildTwoSidedFReq() line 555 in 
/private/tmp/pip-install-zurcx_6k/petsc/src/sys/utils/mpits.c
[0] Argument out of range
[0] toranks[0] 2 not in comm size 2
-------------------------------------------------------
Primary job  terminated normally, but 1 process returned
a non-zero exit code.. Per user-direction, the job has been aborted.
-------------------------------------------------------
--------------------------------------------------------------------------
mpirun detected that one or more processes exited with non-zero status, thus 
causing
the job to be terminated. The first process to do so was:

  Process name: [[46994,1],0]
  Exit code:    1
--------------------------------------------------------------------------


This is in the call to assembly, which looks like this:


# Begins assembling the matrix. This routine should be called after completing 
all calls to MatSetValues().
self.Amat.assemblyBegin(assembly=0)  # FINAL_ASSEMBLY = 0
# Completes assembling the matrix. This routine should be called after 
MatAssemblyBegin().
self.Amat.assemblyEnd(assembly=0)

I would appreciate if someone can give me some insight on what has changed in 
the new version of petsc4py (or petsc for that matter) to make this code work 
again.

It looks like you have an inconsistent build, or a memory overwrite. Since you 
are in Python, I suspect the former. Can you build
PETSc from scratch and try this? Does it work in serial? Can you send a small 
code that reproduces this?

  Thanks,

     Matt

Best regards,

— Alejandro



--
What most experimenters take for granted before they begin their experiments is 
infinitely more interesting than any results to which their experiments lead.
-- Norbert Wiener

https://www.cse.buffalo.edu/~knepley/<https://urldefense.proofpoint.com/v2/url?u=http-3A__www.cse.buffalo.edu_-7Eknepley_&d=DwMFaQ&c=XYzUhXBD2cD-CornpT4QE19xOJBbRy-TBPLK0X9U2o8&r=U1Pry6bTDByPujjSnTcPY6KNXqrym6APfmtom-lIPFA&m=WPJk3cZzX4wkA5n5wceeOf2wjrRxHYug5Gs78b9WHlc&s=vuuUnGL1h2Bfv_uY7e5cMSfiF1btYPrvwf5vKy1JoN0&e=>



--
What most experimenters take for granted before they begin their experiments is 
infinitely more interesting than any results to which their experiments lead.
-- Norbert Wiener

https://www.cse.buffalo.edu/~knepley/<https://urldefense.proofpoint.com/v2/url?u=http-3A__www.cse.buffalo.edu_-7Eknepley_&d=DwMFaQ&c=XYzUhXBD2cD-CornpT4QE19xOJBbRy-TBPLK0X9U2o8&r=U1Pry6bTDByPujjSnTcPY6KNXqrym6APfmtom-lIPFA&m=UZjBC-wnFeOXp0s_J1LfjZeUVWAtsWXRKX6gZQ64z7Q&s=pgBjejAN8aAlWZNjhIiXXP8IhXJrAr2HeI7cLhj0wlM&e=>


--
What most experimenters take for granted before they begin their experiments is 
infinitely more interesting than any results to which their experiments lead.
-- Norbert Wiener

https://www.cse.buffalo.edu/~knepley/<https://urldefense.proofpoint.com/v2/url?u=http-3A__www.cse.buffalo.edu_-7Eknepley_&d=DwMFaQ&c=XYzUhXBD2cD-CornpT4QE19xOJBbRy-TBPLK0X9U2o8&r=U1Pry6bTDByPujjSnTcPY6KNXqrym6APfmtom-lIPFA&m=UZjBC-wnFeOXp0s_J1LfjZeUVWAtsWXRKX6gZQ64z7Q&s=pgBjejAN8aAlWZNjhIiXXP8IhXJrAr2HeI7cLhj0wlM&e=>

Reply via email to