[petsc-users] PetscViewer with 64bit
Jed Brown
jed at jedbrown.org
Tue Feb 14 19:17:16 CST 2023
Can you share a reproducer? I think I recall the format requiring certain things to be Int32.
Mike Michell <mi.mike1021 at gmail.com> writes:
> Thanks for the note.
> I understood that PETSc calculates the offsets for me through "boffset"
> variable in plexvtu.c file. Please correct me if it is wrong.
>
> If plexvtu.c has a bug, it could be around "write file header" part in
> which the boffset is also computed. Is this correct? I am not using complex
> number.
> There are several mixed parts among "Int32, UInt8, PetscInt_FMT,
> PetscInt64_FMT" in writing the header.
>
> Which combination of those flags is correct for 64bit indices? I am gonna
> modify plexvtu.c file with "#if defined(PETSC_USE_64BIT_INDICES)"
> statement, but I do not know what is the correct form of the header flag
> for 64bit indices.
>
> It is also confusing to me:
> boffset += gpiece[r].ncells * sizeof(PetscInt) + sizeof(int);
> How is sizeof(PetscInt) different from sizeof(int)?
>
> Thanks,
> Mike
>
>
>> On Tue, Feb 14, 2023 at 11:45 AM Mike Michell <mi.mike1021 at gmail.com>
>> wrote:
>>
>>> I was trying to modify the header flags from "Int32" to "Int64", but the
>>> problem was not resolved. Could I get any additional comments?
>>>
>>
>> The calculated offsets are not correct I think.
>>
>> Matt
>>
>>
>>> Thanks,
>>> Mike
>>>
>>>
>>>> Thanks for the comments.
>>>> To be precise on the question, the entire part of the header of the .vtu
>>>> file is attached:
>>>>
>>>> <?xml version="1.0"?>
>>>> <VTKFile type="UnstructuredGrid" version="0.1" byte_order="LittleEndian">
>>>> <UnstructuredGrid>
>>>> <Piece NumberOfPoints="4872" NumberOfCells="4000">
>>>> <Points>
>>>> <DataArray type="Float64" Name="Position" NumberOfComponents="3"
>>>> format="appended" offset="0" />
>>>> </Points>
>>>> <Cells>
>>>> <DataArray type="Int32" Name="connectivity"
>>>> NumberOfComponents="1" format="appended" offset="116932" />
>>>> <DataArray type="Int32" Name="offsets"
>>>> NumberOfComponents="1" format="appended" offset="372936" />
>>>> <DataArray type="UInt8" Name="types"
>>>> NumberOfComponents="1" format="appended" offset="404940" />
>>>> </Cells>
>>>> <CellData>
>>>> <DataArray type="Int32" Name="Rank" NumberOfComponents="1"
>>>> format="appended" offset="408944" />
>>>> </CellData>
>>>> <PointData>
>>>> <DataArray type="Float64" Name="Vec_0x37c89c0_4Field_0.0"
>>>> NumberOfComponents="1" format="appended" offset="424948" />
>>>> </PointData>
>>>> </Piece>
>>>> <Piece NumberOfPoints="4872" NumberOfCells="4000">
>>>> <Points>
>>>> <DataArray type="Float64" Name="Position" NumberOfComponents="3"
>>>> format="appended" offset="463928" />
>>>> </Points>
>>>> <Cells>
>>>> <DataArray type="Int32" Name="connectivity"
>>>> NumberOfComponents="1" format="appended" offset="580860" />
>>>> <DataArray type="Int32" Name="offsets"
>>>> NumberOfComponents="1" format="appended" offset="836864" />
>>>> <DataArray type="UInt8" Name="types"
>>>> NumberOfComponents="1" format="appended" offset="868868" />
>>>> </Cells>
>>>> <CellData>
>>>> <DataArray type="Int32" Name="Rank" NumberOfComponents="1"
>>>> format="appended" offset="872872" />
>>>> </CellData>
>>>> <PointData>
>>>> <DataArray type="Float64" Name="Vec_0x37c89c0_4Field_0.0"
>>>> NumberOfComponents="1" format="appended" offset="888876" />
>>>> </PointData>
>>>> </Piece>
>>>> </UnstructuredGrid>
>>>> <AppendedData encoding="raw">
>>>>
>>>>
>>>> Thanks,
>>>> Mike
>>>>
>>>>
>>>>> On Sun, Feb 12, 2023 at 6:15 PM Mike Michell <mi.mike1021 at gmail.com>
>>>>> wrote:
>>>>>
>>>>>> Dear PETSc team,
>>>>>>
>>>>>> I am a user of PETSc with Fortran. My code uses DMPlex to handle dm
>>>>>> object. To print out output variable and mesh connectivity, I use VecView()
>>>>>> by defining PetscSection on that dm and borrow a vector. The type of the
>>>>>> viewer is set to PETSCVIEWERVTK.
>>>>>>
>>>>>> With 32bit indices, the above work flow has no issue. However, if
>>>>>> PETSc is configured with 64bit indices, my output .vtu file has an error if
>>>>>> I open the file with visualization tools, such as Paraview or Tecplot,
>>>>>> saying that:
>>>>>> "Cannot read cell connectivity from Cells in piece 0 because the
>>>>>> "offsets" array is not monotonically increasing or starts with a value
>>>>>> other than 0."
>>>>>>
>>>>>> If I open the .vtu file from terminal, I can see such a line:
>>>>>> ...
>>>>>> <DataArray type="Int32" Name="connectivity" NumberOfComponents="1"
>>>>>> format="appended" offset="580860" />
>>>>>> ...
>>>>>>
>>>>>> I expected "DataArray type="Int64", since the PETSc has 64bit indices.
>>>>>> Could I get recommendations that I need to check to resolve the issue?
>>>>>>
>>>>>
>>>>> This is probably a bug. We will look at it.
>>>>>
>>>>> Jed, I saw that Int32 is hardcoded in plexvtu.c, but sizeof(PetscInt)
>>>>> is used to calculate the offset, which looks inconsistent. Can you take a
>>>>> look?
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Matt
>>>>>
>>>>>
>>>>>> Thanks,
>>>>>> Mike
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> 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/
>>>>> <http://www.cse.buffalo.edu/~knepley/>
>>>>>
>>>>
>>
>> --
>> 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/
>> <http://www.cse.buffalo.edu/~knepley/>
>>
More information about the petsc-users
mailing list