Skip to content

Commit cbab78e

Browse files
committed
Converter: bintp for ME
1 parent 4fcfa9a commit cbab78e

File tree

5 files changed

+146
-59
lines changed

5 files changed

+146
-59
lines changed

Cassiopee/Converter/Converter/IO/GenIO_bintp108.cpp

+139-51
Original file line numberDiff line numberDiff line change
@@ -2321,6 +2321,10 @@ E_Int K_IO::GenIO::tecwrite108(
23212321
ib = 0;
23222322
fwrite(&ib, si, 1, ptrFile);
23232323

2324+
// To keep track of type change due to tecplot limitations
2325+
E_Int changeME2HEXA = 0;
2326+
E_Int changePENTA2HEXA = 0;
2327+
23242328
no = 0;
23252329
while (no < structFieldSize + unstructFieldSize)
23262330
{
@@ -2367,6 +2371,8 @@ E_Int K_IO::GenIO::tecwrite108(
23672371
else
23682372
{
23692373
nol = no - structFieldSize;
2374+
FldArrayI* c = connect[nol];
2375+
E_Int nc = c->getNConnect();
23702376
/* Type of elts */
23712377
switch (eltTypes[nol][0])
23722378
{
@@ -2375,12 +2381,14 @@ E_Int K_IO::GenIO::tecwrite108(
23752381
break;
23762382
case 2: // TRI
23772383
ib = 2;
2384+
if (nc > 1) { ib = 3; } // FIX as QUAD for ME
23782385
break;
23792386
case 3: // QUAD
23802387
ib = 3;
23812388
break;
23822389
case 4: // TETRA
23832390
ib = 4;
2391+
if (nc > 1) { ib = 5; } // FIX as HEXA for ME
23842392
break;
23852393
case 5: // PYRA - FIX as HEXA
23862394
ib = 5; // Dans ce cas, on trace des hexa degeneres
@@ -2393,9 +2401,9 @@ E_Int K_IO::GenIO::tecwrite108(
23932401
break;
23942402
case 8: // NGON
23952403
{
2396-
E_Int* ngon = connect[nol]->getNGon();
2397-
E_Int* indPG = connect[nol]->getIndPG();
2398-
E_Int nf; connect[nol]->getFace(0, nf, ngon, indPG);
2404+
E_Int* ngon = c->getNGon();
2405+
E_Int* indPG = c->getIndPG();
2406+
E_Int nf; c->getFace(0, nf, ngon, indPG);
23992407
if (nf > 2) ib = 7; // polyhedron
24002408
else ib = 6; // polygon
24012409
}
@@ -2405,7 +2413,7 @@ E_Int K_IO::GenIO::tecwrite108(
24052413
return 1;
24062414
}
24072415
}
2408-
fwrite(&ib, si, 1, ptrFile);
2416+
fwrite(&ib, si, 1, ptrFile); // write type
24092417

24102418
// data packing (supp in 112)
24112419
//ib = 0; // block
@@ -2433,15 +2441,20 @@ E_Int K_IO::GenIO::tecwrite108(
24332441
else
24342442
{
24352443
nol = no - structFieldSize;
2436-
2444+
FldArrayI* c = connect[nol];
2445+
E_Int nc = c->getNConnect();
2446+
24372447
if (eltTypes[nol][0] != 8) // elements basiques
24382448
{
24392449
// numPts
24402450
ib = unstructField[nol]->getSize();
24412451
fwrite(&ib, si, 1, ptrFile);
24422452

24432453
// num elts
2444-
ib = connect[nol]->getSize();
2454+
E_Int nelts = 0;
2455+
for (E_Int n = 0; n < nc; n++) nelts += c->getConnect(n)->getSize();
2456+
ib = nelts;
2457+
//ib = c->getSize();
24452458
fwrite(&ib, si, 1, ptrFile);
24462459

24472460
// cellDim
@@ -2455,18 +2468,18 @@ E_Int K_IO::GenIO::tecwrite108(
24552468
ib = unstructField[nol]->getSize();
24562469
fwrite(&ib, si, 1, ptrFile);
24572470
// num faces
2458-
ib = connect[nol]->getNFaces(); fwrite(&ib, si, 1, ptrFile);
2471+
ib = c->getNFaces(); fwrite(&ib, si, 1, ptrFile);
24592472
// numFacesNodes
2460-
E_Int isNGon = connect[nol]->isNGon();
2461-
E_Int size = connect[nol]->getSizeNGon();
2462-
if (isNGon != 3) size -= connect[nol]->getNFaces();
2473+
E_Int isNGon = c->isNGon();
2474+
E_Int size = c->getSizeNGon();
2475+
if (isNGon != 3) size -= c->getNFaces();
24632476
ib = size; fwrite(&ib, si, 1, ptrFile);
24642477
// Boundary faces
24652478
ib = 0; fwrite(&ib, si, 1, ptrFile);
24662479
// Boundary connections
24672480
ib = 0; fwrite(&ib, si, 1, ptrFile);
24682481
// num elts
2469-
ib = connect[nol]->getNElts(); fwrite(&ib, si, 1, ptrFile);
2482+
ib = c->getNElts(); fwrite(&ib, si, 1, ptrFile);
24702483
// cellDim
24712484
ib = 0; fwrite(&ib, si, 1, ptrFile);
24722485
ib = 0; fwrite(&ib, si, 1, ptrFile);
@@ -2594,44 +2607,46 @@ E_Int K_IO::GenIO::tecwrite108(
25942607
fwrite(f.begin(n), sizeof(E_Float), f.getSize(), ptrFile);
25952608

25962609
// Connectivity
2597-
nt = c.getSize(); nv = c.getNfld();
2610+
E_Int nc = c.getNConnect();
25982611
int* bufferi;
2599-
2600-
if (eltTypes[no][0] == 5) // FIX pour PYRA as HEXA
2612+
E_Int sizet = 0;
2613+
if (eltTypes[no][0] == 8) // NGON
26012614
{
2602-
bufferi = new int[nt * 8];
2603-
for (n = 0; n < nt; n++)
2604-
{
2605-
p = n * 8;
2606-
bufferi[p ] = c(n, 1)-1;
2607-
bufferi[p+1] = c(n, 2)-1;
2608-
bufferi[p+2] = c(n, 3)-1;
2609-
bufferi[p+3] = c(n, 4)-1;
2610-
bufferi[p+4] = c(n, 5)-1;
2611-
bufferi[p+5] = c(n, 5)-1;
2612-
bufferi[p+6] = c(n, 5)-1;
2613-
bufferi[p+7] = c(n, 5)-1;
2614-
}
2615-
nv = 8;
2615+
E_Int* ngon = c.getNGon();
2616+
E_Int* indPG = c.getIndPG();
2617+
E_Int numFaces = c.getNFaces();
2618+
E_Int isNGon = c.isNGon();
2619+
E_Int size = c.getSizeNGon();
2620+
if (isNGon == 3) size += numFaces;
2621+
E_Int nf; c.getFace(0, nf, ngon, indPG);
2622+
if (nf > 2) sizet = numFaces+1 + (size-numFaces) + 2*numFaces;
2623+
else sizet = (size-numFaces) + 2*numFaces;
26162624
}
2617-
else if (eltTypes[no][0] == 6) // FIX pour PENTA as HEXA
2625+
else if (nc > 1) // ME
26182626
{
2619-
bufferi = new int[nt * 8];
2620-
for (n = 0; n < nt; n++)
2627+
for (E_Int n = 0; n < nc; n++)
26212628
{
2622-
p = n * 8;
2623-
bufferi[p ] = c(n, 1)-1;
2624-
bufferi[p+1] = c(n, 2)-1;
2625-
bufferi[p+2] = c(n, 2)-1;
2626-
bufferi[p+3] = c(n, 3)-1;
2627-
bufferi[p+4] = c(n, 4)-1;
2628-
bufferi[p+5] = c(n, 5)-1;
2629-
bufferi[p+6] = c(n, 5)-1;
2630-
bufferi[p+7] = c(n, 6)-1;
2629+
FldArrayI* cl = c.getConnect(n);
2630+
switch (eltTypes[no][n])
2631+
{
2632+
case 2: sizet += 4*cl->getSize(); break; // ALL FIX
2633+
case 3: sizet += 4*cl->getSize(); break;
2634+
case 4: sizet += 8*cl->getSize(); break;
2635+
case 5: sizet += 8*cl->getSize(); break;
2636+
case 6: sizet += 8*cl->getSize(); break;
2637+
case 7: sizet += 8*cl->getSize(); break;
2638+
default: break;
2639+
}
26312640
}
2632-
nv = 8;
26332641
}
2634-
else if (eltTypes[no][0] == 8) // NGONS
2642+
else // BE
2643+
{
2644+
sizet = c.getSize() * c.getNfld();
2645+
}
2646+
2647+
bufferi = new int [sizet];
2648+
2649+
if (eltTypes[no][0] == 8) // NGON
26352650
{
26362651
E_Int* ngon = c.getNGon();
26372652
E_Int* indPG = c.getIndPG();
@@ -2643,9 +2658,6 @@ E_Int K_IO::GenIO::tecwrite108(
26432658
if (nf > 2) nt = numFaces+1 + (size-numFaces) + 2*numFaces;
26442659
else nt = (size-numFaces) + 2*numFaces;
26452660

2646-
bufferi = new int[nt];
2647-
nv = 1;
2648-
26492661
// face offset
26502662
int* ptri = bufferi;
26512663
if (nf > 2) // only for volumic
@@ -2678,22 +2690,98 @@ E_Int K_IO::GenIO::tecwrite108(
26782690
// right
26792691
for (E_Int i = 0; i < numFaces; i++) ptri[i] = cFE2[i]-1;
26802692
}
2681-
else // CAS standard
2693+
else // ME and BE
26822694
{
2683-
bufferi = new int[nt * nv];
2684-
for (n = 0; n < nt; n++)
2695+
int* ptri = bufferi;
2696+
for (E_Int n = 0; n < nc; n++)
26852697
{
2686-
p = n * nv;
2687-
for (nf = 1; nf <= nv; nf++) bufferi[p+nf-1] = c(n, nf)-1;
2698+
FldArrayI& cl = *(c.getConnect(n));
2699+
nt = cl.getSize(); nv = cl.getNfld();
2700+
if (eltTypes[no][n] == 5) // FIX pour PYRA as HEXA
2701+
{
2702+
changePENTA2HEXA += 1;
2703+
for (i = 0; i < nt; i++)
2704+
{
2705+
p = i * 8;
2706+
ptri[p ] = cl(i, 1)-1;
2707+
ptri[p+1] = cl(i, 2)-1;
2708+
ptri[p+2] = cl(i, 3)-1;
2709+
ptri[p+3] = cl(i, 4)-1;
2710+
ptri[p+4] = cl(i, 5)-1;
2711+
ptri[p+5] = cl(i, 5)-1;
2712+
ptri[p+6] = cl(i, 5)-1;
2713+
ptri[p+7] = cl(i, 5)-1;
2714+
}
2715+
ptri += nt*8;
2716+
}
2717+
else if (eltTypes[no][n] == 6) // FIX pour PENTA as HEXA
2718+
{
2719+
changePENTA2HEXA += 1;
2720+
for (i = 0; i < nt; i++)
2721+
{
2722+
p = i * 8;
2723+
ptri[p ] = cl(i, 1)-1;
2724+
ptri[p+1] = cl(i, 2)-1;
2725+
ptri[p+2] = cl(i, 2)-1;
2726+
ptri[p+3] = cl(i, 3)-1;
2727+
ptri[p+4] = cl(i, 4)-1;
2728+
ptri[p+5] = cl(i, 5)-1;
2729+
ptri[p+6] = cl(i, 5)-1;
2730+
ptri[p+7] = cl(i, 6)-1;
2731+
}
2732+
ptri += nt*8;
2733+
}
2734+
else if (eltTypes[no][n] == 2 && nc > 1) // FIX pour TRI as QUAD for ME
2735+
{
2736+
changeME2HEXA += 1;
2737+
for (i = 0; i < nt; i++)
2738+
{
2739+
p = i * 4;
2740+
ptri[p ] = cl(i, 1)-1;
2741+
ptri[p+1] = cl(i, 2)-1;
2742+
ptri[p+2] = cl(i, 3)-1;
2743+
ptri[p+3] = cl(i, 3)-1;
2744+
}
2745+
ptri += nt*4;
2746+
}
2747+
else if (eltTypes[no][n] == 4 && nc > 1) // FIX pour TETRA as HEXA for ME
2748+
{
2749+
changeME2HEXA += 1;
2750+
for (i = 0; i < nt; i++)
2751+
{
2752+
p = i * 8;
2753+
ptri[p ] = cl(i, 1)-1;
2754+
ptri[p+1] = cl(i, 2)-1;
2755+
ptri[p+2] = cl(i, 3)-1;
2756+
ptri[p+3] = cl(i, 3)-1;
2757+
ptri[p+4] = cl(i, 4)-1;
2758+
ptri[p+5] = cl(i, 4)-1;
2759+
ptri[p+6] = cl(i, 4)-1;
2760+
ptri[p+7] = cl(i, 4)-1;
2761+
}
2762+
ptri += nt*8;
2763+
}
2764+
else // CAS standard
2765+
{
2766+
for (i = 0; i < nt; i++)
2767+
{
2768+
p = i * nv;
2769+
for (nf = 1; nf <= nv; nf++) ptri[p+nf-1] = cl(i, nf)-1;
2770+
}
2771+
ptri += nt*nv;
2772+
}
26882773
}
26892774
}
26902775

2691-
fwrite(bufferi, si, nt*nv, ptrFile);
2776+
fwrite(bufferi, si, sizet, ptrFile);
26922777
delete [] bufferi;
26932778

26942779
no++;
26952780
}
26962781

2782+
if (changeME2HEXA > 0) printf("Warning: tecwrite: I changed some multi-elements to HEXA or QUAD.\n");
2783+
if (changePENTA2HEXA > 0) printf("Warning: tecwrite: I changed PENTA or PYRA to HEXA.\n");
2784+
26972785
fclose(ptrFile);
26982786
return 0;
26992787
}

Cassiopee/Converter/Converter/Mpi.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
else:
1414
rank = 0; size = 1; KCOMM = None; COMM_WORLD = None
1515
SUM = 0; MAX = 0; MIN = 0; LAND = 0
16-
from .Distributed import setProc, _setProc, getProc, getProcDict, getProperty, getPropertyDict, convertFile2SkeletonTree, computeGraph, splitGraph, mergeGraph, readZones, convert2PartialTree, convert2SkeletonTree, readPyTreeFromPaths
16+
from .Distributed import setProc, _setProc, getProc, getProcDict, getProperty, getPropertyDict, convertFile2SkeletonTree, computeGraph, splitGraph, mergeGraph, readZones, writeZones, convert2PartialTree, convert2SkeletonTree, readPyTreeFromPaths
1717
def barrier(): return
1818
def bcast(a, root=0): return a
1919
def Bcast(a, root=0): return a

Cassiopee/Converter/Converter/convertFilePyTree.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,6 @@ PyObject* K_CONVERTER::convertPyTree2FilePartial(PyObject* self, PyObject* args)
204204
K_IO::GenIO::getInstance()->hdfcgnsWritePathsPartial(fileName, t, Filter, skeleton, mpi4pyCom);
205205

206206
#else
207-
E_Int comm = 0; // dummy
208207
/* En sequentiel */
209208
// skeleton = 1;
210209
K_IO::GenIO::getInstance()->hdfcgnsWritePathsPartial(fileName, t, Filter, skeleton, mpi4pyCom);

Cassiopee/Converter/test/convertPyTree2FilePT_t3.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,4 @@
1616
z = G.cartNGon((0,0,0), (1,1,1), (10,10,10), api=3)
1717
C._fillEmptyBCWith(z, 'far', 'BCFarfield')
1818
C.convertPyTree2File(z, LOCAL+'/out2.d')
19-
test.testF(LOCAL+'/out2.d', 1)
19+
test.testF(LOCAL+'/out2.d', 2)

Cassiopee/Converter/test/convertPyTree2FilePT_t4.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@
1717
test.testF(LOCAL+'/out2.plt', 2)
1818

1919
# ME - output HEXA
20-
#a = G.cartHexa((0,0,0), (1,1,1), (10,10,10))
21-
#b = G.cartTetra((9,0,0), (1,1,1), (10,10,10))
22-
#z = C.mergeConnectivity(a, b, boundary=0)
23-
#C.convertPyTree2File(z, LOCAL+'/out3.plt')
24-
#test.testF(LOCAL+'/out3.plt', 3)
20+
a = G.cartHexa((0,0,0), (1,1,1), (10,10,10))
21+
b = G.cartTetra((9,0,0), (1,1,1), (10,10,10))
22+
z = C.mergeConnectivity(a, b, boundary=0)
23+
C.convertPyTree2File(z, LOCAL+'/out3.plt')
24+
test.testF(LOCAL+'/out3.plt', 3)
2525

2626
# NGON3
2727
z = G.cartNGon((0,0,0), (1,1,1), (10,10,10), api=1)

0 commit comments

Comments
 (0)