@@ -2321,6 +2321,10 @@ E_Int K_IO::GenIO::tecwrite108(
2321
2321
ib = 0 ;
2322
2322
fwrite (&ib, si, 1 , ptrFile);
2323
2323
2324
+ // To keep track of type change due to tecplot limitations
2325
+ E_Int changeME2HEXA = 0 ;
2326
+ E_Int changePENTA2HEXA = 0 ;
2327
+
2324
2328
no = 0 ;
2325
2329
while (no < structFieldSize + unstructFieldSize)
2326
2330
{
@@ -2367,6 +2371,8 @@ E_Int K_IO::GenIO::tecwrite108(
2367
2371
else
2368
2372
{
2369
2373
nol = no - structFieldSize;
2374
+ FldArrayI* c = connect[nol];
2375
+ E_Int nc = c->getNConnect ();
2370
2376
/* Type of elts */
2371
2377
switch (eltTypes[nol][0 ])
2372
2378
{
@@ -2375,12 +2381,14 @@ E_Int K_IO::GenIO::tecwrite108(
2375
2381
break ;
2376
2382
case 2 : // TRI
2377
2383
ib = 2 ;
2384
+ if (nc > 1 ) { ib = 3 ; } // FIX as QUAD for ME
2378
2385
break ;
2379
2386
case 3 : // QUAD
2380
2387
ib = 3 ;
2381
2388
break ;
2382
2389
case 4 : // TETRA
2383
2390
ib = 4 ;
2391
+ if (nc > 1 ) { ib = 5 ; } // FIX as HEXA for ME
2384
2392
break ;
2385
2393
case 5 : // PYRA - FIX as HEXA
2386
2394
ib = 5 ; // Dans ce cas, on trace des hexa degeneres
@@ -2393,9 +2401,9 @@ E_Int K_IO::GenIO::tecwrite108(
2393
2401
break ;
2394
2402
case 8 : // NGON
2395
2403
{
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);
2399
2407
if (nf > 2 ) ib = 7 ; // polyhedron
2400
2408
else ib = 6 ; // polygon
2401
2409
}
@@ -2405,7 +2413,7 @@ E_Int K_IO::GenIO::tecwrite108(
2405
2413
return 1 ;
2406
2414
}
2407
2415
}
2408
- fwrite (&ib, si, 1 , ptrFile);
2416
+ fwrite (&ib, si, 1 , ptrFile); // write type
2409
2417
2410
2418
// data packing (supp in 112)
2411
2419
// ib = 0; // block
@@ -2433,15 +2441,20 @@ E_Int K_IO::GenIO::tecwrite108(
2433
2441
else
2434
2442
{
2435
2443
nol = no - structFieldSize;
2436
-
2444
+ FldArrayI* c = connect[nol];
2445
+ E_Int nc = c->getNConnect ();
2446
+
2437
2447
if (eltTypes[nol][0 ] != 8 ) // elements basiques
2438
2448
{
2439
2449
// numPts
2440
2450
ib = unstructField[nol]->getSize ();
2441
2451
fwrite (&ib, si, 1 , ptrFile);
2442
2452
2443
2453
// 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();
2445
2458
fwrite (&ib, si, 1 , ptrFile);
2446
2459
2447
2460
// cellDim
@@ -2455,18 +2468,18 @@ E_Int K_IO::GenIO::tecwrite108(
2455
2468
ib = unstructField[nol]->getSize ();
2456
2469
fwrite (&ib, si, 1 , ptrFile);
2457
2470
// num faces
2458
- ib = connect[nol] ->getNFaces (); fwrite (&ib, si, 1 , ptrFile);
2471
+ ib = c ->getNFaces (); fwrite (&ib, si, 1 , ptrFile);
2459
2472
// 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 ();
2463
2476
ib = size; fwrite (&ib, si, 1 , ptrFile);
2464
2477
// Boundary faces
2465
2478
ib = 0 ; fwrite (&ib, si, 1 , ptrFile);
2466
2479
// Boundary connections
2467
2480
ib = 0 ; fwrite (&ib, si, 1 , ptrFile);
2468
2481
// num elts
2469
- ib = connect[nol] ->getNElts (); fwrite (&ib, si, 1 , ptrFile);
2482
+ ib = c ->getNElts (); fwrite (&ib, si, 1 , ptrFile);
2470
2483
// cellDim
2471
2484
ib = 0 ; fwrite (&ib, si, 1 , ptrFile);
2472
2485
ib = 0 ; fwrite (&ib, si, 1 , ptrFile);
@@ -2594,44 +2607,46 @@ E_Int K_IO::GenIO::tecwrite108(
2594
2607
fwrite (f.begin (n), sizeof (E_Float), f.getSize (), ptrFile);
2595
2608
2596
2609
// Connectivity
2597
- nt = c. getSize (); nv = c.getNfld ();
2610
+ E_Int nc = c.getNConnect ();
2598
2611
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
2601
2614
{
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;
2616
2624
}
2617
- else if (eltTypes[no][ 0 ] == 6 ) // FIX pour PENTA as HEXA
2625
+ else if (nc > 1 ) // ME
2618
2626
{
2619
- bufferi = new int [nt * 8 ];
2620
- for (n = 0 ; n < nt; n++)
2627
+ for (E_Int n = 0 ; n < nc; n++)
2621
2628
{
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
+ }
2631
2640
}
2632
- nv = 8 ;
2633
2641
}
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
2635
2650
{
2636
2651
E_Int* ngon = c.getNGon ();
2637
2652
E_Int* indPG = c.getIndPG ();
@@ -2643,9 +2658,6 @@ E_Int K_IO::GenIO::tecwrite108(
2643
2658
if (nf > 2 ) nt = numFaces+1 + (size-numFaces) + 2 *numFaces;
2644
2659
else nt = (size-numFaces) + 2 *numFaces;
2645
2660
2646
- bufferi = new int [nt];
2647
- nv = 1 ;
2648
-
2649
2661
// face offset
2650
2662
int * ptri = bufferi;
2651
2663
if (nf > 2 ) // only for volumic
@@ -2678,22 +2690,98 @@ E_Int K_IO::GenIO::tecwrite108(
2678
2690
// right
2679
2691
for (E_Int i = 0 ; i < numFaces; i++) ptri[i] = cFE2[i]-1 ;
2680
2692
}
2681
- else // CAS standard
2693
+ else // ME and BE
2682
2694
{
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++)
2685
2697
{
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
+ }
2688
2773
}
2689
2774
}
2690
2775
2691
- fwrite (bufferi, si, nt*nv , ptrFile);
2776
+ fwrite (bufferi, si, sizet , ptrFile);
2692
2777
delete [] bufferi;
2693
2778
2694
2779
no++;
2695
2780
}
2696
2781
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
+
2697
2785
fclose (ptrFile);
2698
2786
return 0 ;
2699
2787
}
0 commit comments