@@ -316,16 +316,15 @@ neut_nodes_memcpy (struct NODES Nodes, struct NODES *pNodes2)
316
316
if (Nodes .PerNodeSlaveNb )
317
317
{
318
318
(* pNodes2 ).PerNodeSlaveNb = ut_alloc_1d_pint ((* pNodes2 ).NodeQty + 1 );
319
- for (i = 1 ; i <= (* pNodes2 ).PerNodeQty ; i ++ )
320
- {
321
- id = (* pNodes2 ).PerNodeNb [i ];
322
- (* pNodes2 ).PerNodeSlaveNb [id ] =
323
- ut_alloc_1d_int ((* pNodes2 ).PerNodeSlaveQty [id ] + 1 );
324
-
325
- ut_array_1d_int_memcpy (Nodes .PerNodeSlaveNb [id ] + 1 ,
326
- (* pNodes2 ).PerNodeSlaveQty [id ],
327
- (* pNodes2 ).PerNodeSlaveNb [id ] + 1 );
328
- }
319
+ for (i = 1 ; i <= (* pNodes2 ).NodeQty ; i ++ )
320
+ if ((* pNodes2 ).PerNodeSlaveQty [i ])
321
+ {
322
+ (* pNodes2 ).PerNodeSlaveNb [i ] = ut_alloc_1d_int ((* pNodes2 ).PerNodeSlaveQty [i ] + 1 );
323
+
324
+ ut_array_1d_int_memcpy (Nodes .PerNodeSlaveNb [i ] + 1 ,
325
+ (* pNodes2 ).PerNodeSlaveQty [i ],
326
+ (* pNodes2 ).PerNodeSlaveNb [i ] + 1 );
327
+ }
329
328
}
330
329
}
331
330
@@ -629,21 +628,69 @@ neut_nodes_wbary (struct NODES Nodes, int *nodes, double *nodeweights,
629
628
}
630
629
631
630
/* node_nbs[...] = new pos */
632
- /* RAM could be improved by more elegant exchange of lines (not through
633
- * a big copy coo array */
634
631
void
635
632
neut_nodes_renumber_switch (struct NODES * pNodes , int * node_nbs )
636
633
{
637
- int i ;
638
- double * * coo = ut_alloc_2d (( * pNodes ). NodeQty + 1 , 3 ) ;
634
+ int i , j ;
635
+ struct NODES Nodes2 ;
639
636
640
- for ( i = 1 ; i <= ( * pNodes ). NodeQty ; i ++ )
641
- ut_array_1d_memcpy (( * pNodes ). NodeCoo [ i ], 3 , coo [ i ] );
637
+ neut_nodes_set_zero ( & Nodes2 );
638
+ neut_nodes_memcpy ( * pNodes , & Nodes2 );
642
639
643
640
for (i = 1 ; i <= (* pNodes ).NodeQty ; i ++ )
644
- ut_array_1d_memcpy (coo [i ], 3 , (* pNodes ).NodeCoo [node_nbs [i ]]);
641
+ {
642
+ ut_array_1d_memcpy (Nodes2 .NodeCoo [i ], 3 , (* pNodes ).NodeCoo [node_nbs [i ]]);
643
+ if ((* pNodes ).NodeCl )
644
+ (* pNodes ).NodeCl [node_nbs [i ]] = Nodes2 .NodeCl [i ];
645
+ }
645
646
646
- ut_free_2d (& coo , (* pNodes ).NodeQty );
647
+ if ((* pNodes ).PerNodeQty > 0 )
648
+ {
649
+ for (i = 1 ; i <= (* pNodes ).PerNodeQty ; i ++ )
650
+ (* pNodes ).PerNodeNb [i ] = node_nbs [Nodes2 .PerNodeNb [i ]];
651
+
652
+ ut_array_1d_int_zero ((* pNodes ).PerNodeMaster + 1 , (* pNodes ).NodeQty );
653
+ ut_array_2d_int_zero ((* pNodes ).PerNodeShift + 1 , (* pNodes ).NodeQty , 3 );
654
+ ut_array_1d_int_zero ((* pNodes ).PerNodeSlaveQty + 1 , (* pNodes ).NodeQty );
655
+ for (i = 1 ; i <= (* pNodes ).NodeQty ; i ++ )
656
+ ut_free_1d_int ((* pNodes ).PerNodeSlaveNb + i );
657
+
658
+ for (i = 1 ; i <= (* pNodes ).NodeQty ; i ++ )
659
+ {
660
+ (* pNodes ).PerNodeMaster [node_nbs [i ]] = node_nbs [Nodes2 .PerNodeMaster [i ]];
661
+ ut_array_1d_int_memcpy (Nodes2 .PerNodeShift [i ], 3 , (* pNodes ).PerNodeShift [node_nbs [i ]]);
662
+ (* pNodes ).PerNodeSlaveQty [node_nbs [i ]] = Nodes2 .PerNodeSlaveQty [i ];
663
+ if ((* pNodes ).PerNodeSlaveQty [node_nbs [i ]])
664
+ {
665
+ (* pNodes ).PerNodeSlaveNb [node_nbs [i ]] = ut_realloc_1d_int ((* pNodes ).PerNodeSlaveNb [node_nbs [i ]],
666
+ (* pNodes ).PerNodeSlaveQty [node_nbs [i ]] + 1 );
667
+ for (j = 1 ; j <= Nodes2 .PerNodeSlaveQty [i ]; j ++ )
668
+ (* pNodes ).PerNodeSlaveNb [node_nbs [i ]][j ] = node_nbs [Nodes2 .PerNodeSlaveNb [i ][j ]];
669
+ }
670
+ }
671
+ }
672
+
673
+ if ((* pNodes ).DupNodeQty > 0 )
674
+ {
675
+ for (i = 1 ; i <= (* pNodes ).DupNodeQty ; i ++ )
676
+ (* pNodes ).DupNodeNb [i ] = node_nbs [i ];
677
+
678
+ for (i = 1 ; i <= (* pNodes ).NodeQty ; i ++ )
679
+ {
680
+ (* pNodes ).DupNodeMaster [node_nbs [i ]] = node_nbs [Nodes2 .DupNodeMaster [i ]];
681
+ (* pNodes ).DupNodeSeed [node_nbs [i ]] = Nodes2 .DupNodeSeed [i ];
682
+ (* pNodes ).DupNodeSlaveQty [node_nbs [i ]] = Nodes2 .DupNodeSlaveQty [i ];
683
+ if ((* pNodes ).DupNodeSlaveQty [node_nbs [i ]])
684
+ {
685
+ (* pNodes ).DupNodeSlaveNb [node_nbs [i ]] = ut_realloc_1d_int ((* pNodes ).DupNodeSlaveNb [node_nbs [i ]],
686
+ (* pNodes ).DupNodeSlaveQty [node_nbs [i ]] + 1 );
687
+ for (j = 1 ; j <= Nodes2 .DupNodeSlaveQty [i ]; j ++ )
688
+ (* pNodes ).DupNodeSlaveNb [node_nbs [i ]][j ] = node_nbs [Nodes2 .DupNodeSlaveNb [i ][j ]];
689
+ }
690
+ }
691
+ }
692
+
693
+ neut_nodes_free (& Nodes2 );
647
694
648
695
return ;
649
696
}
@@ -716,6 +763,11 @@ neut_nodes_init_nodeslave (struct NODES *pNodes)
716
763
{
717
764
int i , master , slave ;
718
765
766
+ if ((* pNodes ).PerNodeSlaveQty )
767
+ ut_free_1d_int (& (* pNodes ).PerNodeSlaveQty );
768
+ if ((* pNodes ).PerNodeSlaveNb )
769
+ ut_free_2d_int (& (* pNodes ).PerNodeSlaveNb , (* pNodes ).PerNodeQty );
770
+
719
771
(* pNodes ).PerNodeSlaveQty = ut_alloc_1d_int ((* pNodes ).NodeQty + 1 );
720
772
(* pNodes ).PerNodeSlaveNb = ut_alloc_1d_pint ((* pNodes ).NodeQty + 1 );
721
773
0 commit comments