visit-dav / visit

VisIt - Visualization and Data Analysis for Mesh-based Scientific Data
https://visit.llnl.gov
BSD 3-Clause "New" or "Revised" License
443 stars 116 forks source link

Handle Silo periodic boundary conditions #19930

Closed markcmiller86 closed 1 month ago

markcmiller86 commented 1 month ago

Description

Resolves #19501

Type of change

How Has This Been Tested?

I was given data on RZ and have been using that in testing.

Reminders:

Checklist:

markcmiller86 commented 1 month ago

This is close but I am still getting issues with top and bottom faces of the global mesh...they are rendering all black.

markcmiller86 commented 1 month ago

I wonder if the black bottom/top faces is something to do with wrong normal directions? If I slice or clip right near the top/bottom edges, it looks right.

markcmiller86 commented 1 month ago

The below remarks capture some of the basic understanding I needed to write the code based on an example involving 3584 rectangular domains organized into a globally rectangular arrangement of 14x16x16 domains. Where should I put this? Is having just here in this PR ok?

For a globally and locally rectangular structure: each domain has 26 neighbors (6 face, 12 edge, 8 vertex neighbors) indexed 0...25. The DBmultimeshadj object’s neighbors member, A lines below, holds the 26 global domain ids for each domain’s neighbors.

The B line is the contents of the PeriodicDomList array (global domain ids) and the C line is the contents of the PeriodicBndList array (locally indexed to one of the possible 26 neighbors) formatted to align with the local indices. These two arrays are 1:1. Note that all array entries are sorted in monotone increasing domain id and the associated Silo plugin code takes advantage of this.

Domain on one of the the global mesh’s vertices (domain 0, 19 neighbors are periodic neighbors, 7 are non-periodic)

A. 1, 13, 14, 15, 27, 210, 211, 223, 224, 225, 237, 238, 239, 251, 434, 435, 447, 3360, 3361, 3373, 3374, 3375, 3387, 3570, 3571, 3583,
B.     0,          0,   0,   0,   0,             0,             0,   0,   0,    0,   0,    0,    0,    0,    0,    0,    0,    0,    0
C.     1,          4,   5,   6,   7,            10,            13,  14,  15,   16,  17,   18,   19,   20,   21,   22,   23,   24,   25

Domain on one of the global mesh’s edges (domain 1, 15 neighbors are periodic neighbors, 11 are non-periodic)

A. 0, 2, 14, 15, 16, 210, 211, 212, 224, 225, 226, 238, 239, 240, 434, 435, 436, 3360, 3361, 3362, 3374, 3375, 3376, 3570, 3571, 3572,
B.                     1,   1,   1,                                 1,   1,    1,   1,    1,    1,    1,    1,    1,    1,    1,    1,
C.                     5,   6,   7,                                14,  15,   16,  17,   18,   19,   20,   21,   22,   23,   24,   25,

Domain on one of he global mesh’s faces (domain 23, 9 periodic neighbors, 17 are non-periodic)

A. 9, 10, 11, 23, 25, 37, 38, 39, 233, 234, 235, 247, 248, 249, 261, 262, 263, 3369, 3370, 3371, 3383, 3384, 3385, 3397, 3398, 3399,
B.                                                                               23,   23,   23,   23,   23,   23,   23,   23,   23
C.                                                                               17,   18,   19,   20,   21,   22,   23,   24,   25

Domain wholly interior in the global mesh (domain 239, 0 periodic neighbors, 26 are non-periodic)

Domain 239 is first domain wholly contained in the interior of the original set of domains.