/
gobElemental.go
72 lines (66 loc) · 1.29 KB
/
gobElemental.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package ptrack
import (
"encoding/gob"
"fmt"
"os"
)
func (d *Domain) ExportMeshNetworkGob(fp string, pl [][]Particle, nv int) error {
nds := make([]Vert, 0, nv)
nc, k := len(d.Prisms())/d.Nly, 0
for _, pln := range pl {
pnds := make([]Vert, len(pln))
for j, v := range pln {
pnds[j] = Vert{
X: v.X,
Y: v.Y,
Z: v.Z,
T: v.T,
VertID: k,
PathID: v.I,
PrsmID: v.C, // the prism/cell it's in
CellID: v.C % nc, // the 2d grid cell/element it's in
Layer: v.C/nc + 1,
Order: j,
USid: -1,
DSid: -1,
}
k++
}
// build topology
switch len(pnds) {
case 0:
// do nothing
case 1:
pnds[0].USid = -1
pnds[0].DSid = -1
default:
for j, p := range pnds {
if j == 0 {
p.USid = -1
p.DSid = pnds[j+1].VertID
} else if j == len(pnds)-1 {
p.USid = pnds[j-1].VertID
p.DSid = -1
} else {
p.USid = pnds[j-1].VertID
p.DSid = pnds[j+1].VertID
}
pnds[j] = p
}
nds = append(nds, pnds...) // ignoring 1-point vertices
}
// nds = append(nds, pnds...)
}
fmt.Printf(" saving %s nodes..\n", big(len(nds)))
f, err := os.Create(fp)
if err != nil {
return err
}
enc := gob.NewEncoder(f)
err = enc.Encode(nds)
if err != nil {
return err
}
f.Close()
return nil
}