50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69 USE my_alloc_mod
76 use surface_type_mod , only : surface_type
77
78
79
80#include "implicit_f.inc"
81#include "param_c.inc"
82#include "sphcom.inc"
83#include "com04_c.inc"
84#include "scr17_c.inc"
85
86
87
88 TYPE (SET_) :: SET
89 TYPE (SET_) :: CLAUSE
90 TYPE (SET_SCRATCH) :: DELBUF
91 INTEGER CLAUSE_OPERATOR
92
93 INTEGER OPT_A,OPT_O,OPT_E
94 INTEGER IXS(NIXS,*),IXS10(6,*),
95 . IXQ(NIXQ,*),IXC(NIXC,*),IXTG(NIXTG,*),IXT(NIXT,*),
96 . IXP(NIXP,*),IXR(NIXR,*),
97 . SH4TREE(*),SH3TREE(*),KNOD2ELS(*),KNOD2ELC(*),KNOD2ELTG(*),
98 . KNOD2ELQ(*),NOD2ELS(*),NOD2ELC(*),NOD2ELTG(*),NOD2ELQ(*),
99 . IPARTS(*),IPARTC(*),IPARTG(*),IPART(LIPART1,*)
101 . x(3,*)
102 CHARACTER(LEN=NCHARFIELD) :: KEYSET
103
104
105
106 INTEGER, DIMENSION(:), ALLOCATABLE :: RESULT
107 INTEGER, DIMENSION(:), ALLOCATABLE :: NODES
108 INTEGER, DIMENSION(:,:), ALLOCATABLE :: SURF
109 INTEGER NEW_SIZE,NS,ND_SIZE,OPERATOR
110 logical :: empty_condition
111
112
113
114 IF( clause%NB_NODE > 0) THEN
115
116 IF(
set%NB_NODE > 0 )
THEN
117
118 ALLOCATE(result(
set%NB_NODE + clause%NB_NODE ))
119
121 * clause%NODE, clause%NB_NODE ,
122 * result, new_size ,
123 * clause_operator)
124
125 IF (
ALLOCATED(
set%NODE))
DEALLOCATE (
set%NODE)
126 ALLOCATE(
set%NODE(new_size))
127
128 set%NODE(1:new_size) = result(1:new_size)
130
131 DEALLOCATE(result)
132
133 ELSE
134
135 IF ( clause_operator ==
set_add)
THEN
136 IF (
ALLOCATED(
set%NODE))
DEALLOCATE (
set%NODE)
137 ALLOCATE(
set%NODE(clause%NB_NODE) )
138
139 set%NB_NODE=clause%NB_NODE
140 set%NODE(1:clause%NB_NODE)=clause%NODE(1:clause%NB_NODE)
141
142 ENDIF
143
144 ENDIF
145 ELSE
147 IF (
set%NB_NODE > 0)
THEN
148 IF(
ALLOCATED(
set%NODE))
DEALLOCATE(
set%NODE)
150 ENDIF
151 ENDIF
152 ENDIF
153
154
155
156 IF( clause%NB_NODENS > 0 ) THEN
157
158 IF(
set%NB_NODENS > 0 )
THEN
159
160 ALLOCATE(result(
set%NB_NODENS + clause%NB_NODENS ))
161
163 * clause%NODENS, clause%NB_NODENS ,
164 * result, new_size ,
165 * clause_operator)
166
167 IF (
ALLOCATED(
set%NODENS))
DEALLOCATE (
set%NODENS)
168 ALLOCATE(
set%NODENS(new_size))
169
170 set%NODENS(1:new_size) = result(1:new_size)
171 set%NB_NODENS=new_size
172
173 DEALLOCATE(result)
174
175 ELSE
176
177 IF ( clause_operator ==
set_add)
THEN
178 IF (
ALLOCATED(
set%NODENS))
DEALLOCATE (
set%NODENS)
179 ALLOCATE(
set%NODENS(clause%NB_NODENS) )
180
181 set%NB_NODENS=clause%NB_NODENS
182 set%NODENS(1:clause%NB_NODENS)=clause%NODENS(1:clause%NB_NODENS)
183
184 ENDIF
185
186 ENDIF
187 ELSE
189 IF (
set%NB_NODENS > 0)
THEN
190 IF(
ALLOCATED(
set%NODENS))
DEALLOCATE(
set%NODENS)
192 ENDIF
193 ENDIF
194 ENDIF
195
196
197
198 IF( clause%NB_PART > 0) THEN
199
200 IF(
set%NB_PART > 0 )
THEN
201
202 ALLOCATE(result(
set%NB_PART + clause%NB_PART ))
203
205 * clause%PART, clause%NB_PART ,
206 * result, new_size ,
207 * clause_operator )
208
209 IF (
ALLOCATED(
set%PART))
DEALLOCATE (
set%PART)
210 ALLOCATE(
set%PART(new_size))
211
212 set%PART(1:new_size) = result(1:new_size)
214
215 DEALLOCATE(result)
216
217 ELSE
218 IF ( clause_operator ==
set_add)
THEN
219 IF (
ALLOCATED(
set%PART))
DEALLOCATE (
set%PART)
220 ALLOCATE(
set%PART(clause%NB_PART) )
221
222 set%NB_PART=clause%NB_PART
223 set%PART(1:
set%NB_PART)=clause%PART(1:
set%NB_PART)
224
225 ENDIF
226
227 ENDIF
228 ELSE
230 IF (
set%NB_PART > 0)
THEN
231 IF(
ALLOCATED(
set%PART))
DEALLOCATE(
set%PART)
233 ENDIF
234 ENDIF
235 ENDIF
236
237
238
239 IF( clause%NB_SOLID > 0) THEN
240
241 IF(
set%NB_SOLID > 0 )
THEN
242
243 ALLOCATE(result(
set%NB_SOLID + clause%NB_SOLID ))
244
246 * clause%SOLID, clause%NB_SOLID ,
247 * result, new_size ,
248 * clause_operator)
249
250 IF (
ALLOCATED(
set%SOLID))
DEALLOCATE (
set%SOLID)
251 ALLOCATE(
set%SOLID(new_size))
252
253 set%SOLID(1:new_size) = result(1:new_size)
254 set%NB_SOLID=new_size
255
256 DEALLOCATE(result)
257
258 ELSE
259
260 IF ( clause_operator ==
set_add)
THEN
261 IF (
ALLOCATED(
set%SOLID))
DEALLOCATE (
set%SOLID)
262 ALLOCATE(
set%SOLID(clause%NB_SOLID) )
263
264 set%NB_SOLID=clause%NB_SOLID
265 set%SOLID(1:clause%NB_SOLID)=clause%SOLID(1:clause%NB_SOLID)
266
267 ENDIF
268
269 ENDIF
270 ELSE
272 IF (
set%NB_SOLID > 0)
THEN
273 IF(
ALLOCATED(
set%SOLID))
DEALLOCATE(
set%SOLID)
275 ENDIF
276 ENDIF
277 ENDIF
278
279
280
281 IF( clause%NB_SH4N > 0) THEN
282
283 IF(
set%NB_SH4N > 0 )
THEN
284
285 ALLOCATE(result(
set%NB_SH4N + clause%NB_SH4N ))
286
288 * clause%SH4N, clause%NB_SH4N ,
289 * result, new_size ,
290 * clause_operator)
291
292 IF (
ALLOCATED(
set%SH4N))
DEALLOCATE (
set%SH4N)
293 ALLOCATE(
set%SH4N(new_size))
294
295 set%SH4N(1:new_size) = result(1:new_size)
297
298 DEALLOCATE(result)
299
300 ELSE
301
302 IF ( clause_operator ==
set_add)
THEN
303 IF (
ALLOCATED(
set%SH4N))
DEALLOCATE (
set%SH4N)
304 ALLOCATE(
set%SH4N(clause%NB_SH4N) )
305
306 set%NB_SH4N=clause%NB_SH4N
307 set%SH4N(1:clause%NB_SH4N)=clause%SH4N(1:clause%NB_SH4N)
308
309 ENDIF
310
311 ENDIF
312 ELSE
314 IF (
set%NB_SH4N > 0)
THEN
315 IF(
ALLOCATED(
set%SH4N))
DEALLOCATE(
set%SH4N)
317 ENDIF
318 ENDIF
319 ENDIF
320
321
322
323 IF( clause%NB_SH3N > 0) THEN
324
325 IF(
set%NB_SH3N > 0 )
THEN
326
327 ALLOCATE(result(
set%NB_SH3N + clause%NB_SH3N ))
328
330 * clause%SH3N, clause%NB_SH3N ,
331 * result, new_size ,
332 * clause_operator)
333
334 IF (
ALLOCATED(
set%SH3N))
DEALLOCATE (
set%SH3N)
335 ALLOCATE(
set%SH3N(new_size))
336
337 set%SH3N(1:new_size) = result(1:new_size)
339
340 DEALLOCATE(result)
341
342 ELSE
343
344 IF ( clause_operator ==
set_add)
THEN
345 IF (
ALLOCATED(
set%SH3N))
DEALLOCATE (
set%SH3N)
346 ALLOCATE(
set%SH3N(clause%NB_SH3N) )
347
348 set%NB_SH3N=clause%NB_SH3N
349 set%SH3N(1:clause%NB_SH3N) = clause%SH3N(1:clause%NB_SH3N)
350
351 ENDIF
352
353 ENDIF
354 ELSE
356 IF (
set%NB_SH3N > 0)
THEN
357 IF(
ALLOCATED(
set%SH3N))
DEALLOCATE(
set%SH3N)
359 ENDIF
360 ENDIF
361 ENDIF
362
363
364
365 IF( clause%NB_QUAD > 0) THEN
366
367 IF(
set%NB_QUAD > 0 )
THEN
368
369 ALLOCATE(result(
set%NB_QUAD + clause%NB_QUAD ))
370
372 * clause%QUAD, clause%NB_QUAD ,
373 * result, new_size ,
374 * clause_operator)
375
376 IF (
ALLOCATED(
set%QUAD))
DEALLOCATE (
set%QUAD)
377 ALLOCATE(
set%QUAD(new_size))
378
379 set%QUAD(1:new_size) = result(1:new_size)
381
382 DEALLOCATE(result)
383
384 ELSE
385
386 IF ( clause_operator ==
set_add)
THEN
387 IF (
ALLOCATED(
set%QUAD))
DEALLOCATE (
set%QUAD)
388 ALLOCATE(
set%QUAD(clause%NB_QUAD) )
389
390 set%NB_QUAD=clause%NB_QUAD
391 set%QUAD(1:clause%NB_QUAD)=clause%QUAD(1:clause%NB_QUAD)
392
393 ENDIF
394
395 ENDIF
396 ELSE
398 IF (
set%NB_QUAD > 0)
THEN
399 IF(
ALLOCATED(
set%QUAD))
DEALLOCATE(
set%QUAD)
401 ENDIF
402 ENDIF
403 ENDIF
404
405
406
407 IF( clause%NB_TRIA > 0) THEN
408
409 IF(
set%NB_TRIA > 0 )
THEN
410
411 ALLOCATE(result(
set%NB_TRIA + clause%NB_TRIA ))
412
414 * clause%TRIA, clause%NB_TRIA ,
415 * result, new_size ,
416 * clause_operator)
417
418 IF (
ALLOCATED(
set%TRIA))
DEALLOCATE (
set%TRIA)
419 ALLOCATE(
set%TRIA(new_size))
420
421 set%TRIA(1:new_size) = result(1:new_size)
423
424 DEALLOCATE(result)
425
426 ELSE
427
428 IF ( clause_operator ==
set_add)
THEN
429 IF (
ALLOCATED(
set%TRIA))
DEALLOCATE (
set%TRIA)
430 ALLOCATE(
set%TRIA(clause%NB_TRIA) )
431
432 set%NB_TRIA=clause%NB_TRIA
433 set%TRIA(1:clause%NB_TRIA) = clause%TRIA(1:clause%NB_TRIA)
434
435 ENDIF
436
437 ENDIF
438 ELSE
440 IF (
set%NB_TRIA > 0)
THEN
441 IF(
ALLOCATED(
set%TRIA))
DEALLOCATE(
set%TRIA)
443 ENDIF
444 ENDIF
445 ENDIF
446
447
448
449 IF( clause%NB_BEAM > 0) THEN
450
451 IF(
set%NB_BEAM > 0 )
THEN
452
453 ALLOCATE(result(
set%NB_BEAM + clause%NB_BEAM ))
454
456 * clause%BEAM, clause%NB_BEAM ,
457 * result, new_size ,
458 * clause_operator)
459
460 IF (
ALLOCATED(
set%BEAM))
DEALLOCATE (
set%BEAM)
461 ALLOCATE(
set%BEAM(new_size))
462
463 set%BEAM(1:new_size) = result(1:new_size)
465
466 DEALLOCATE(result)
467
468 ELSE
469
470 IF ( clause_operator ==
set_add)
THEN
471 IF (
ALLOCATED(
set%BEAM))
DEALLOCATE (
set%BEAM)
472 ALLOCATE(
set%BEAM(clause%NB_BEAM) )
473
474 set%NB_BEAM=clause%NB_BEAM
475 set%BEAM(1:clause%NB_BEAM) = clause%BEAM(1:clause%NB_BEAM)
476 ENDIF
477
478 ENDIF
479 ELSE
481 IF (
set%NB_BEAM > 0)
THEN
482 IF(
ALLOCATED(
set%BEAM))
DEALLOCATE(
set%BEAM)
484 ENDIF
485 ENDIF
486 ENDIF
487
488
489
490 IF( clause%NB_TRUSS > 0) THEN
491
492 IF(
set%NB_TRUSS > 0 )
THEN
493
494 ALLOCATE(result(
set%NB_TRUSS + clause%NB_TRUSS ))
495
497 * clause%TRUSS, clause%NB_TRUSS ,
498 * result, new_size ,
499 * clause_operator)
500
501 IF (
ALLOCATED(
set%TRUSS))
DEALLOCATE (
set%TRUSS)
502 ALLOCATE(
set%TRUSS(new_size))
503
504 set%TRUSS(1:new_size) = result(1:new_size)
505 set%NB_TRUSS=new_size
506
507 DEALLOCATE(result)
508
509 ELSE
510
511 IF ( clause_operator ==
set_add)
THEN
512 IF (
ALLOCATED(
set%TRUSS))
DEALLOCATE (
set%TRUSS)
513 ALLOCATE(
set%TRUSS(clause%NB_TRUSS) )
514
515 set%NB_TRUSS=clause%NB_TRUSS
516 set%TRUSS(1:clause%NB_TRUSS) = clause%TRUSS(1:clause%NB_TRUSS)
517
518 ENDIF
519
520 ENDIF
521 ELSE
523 IF (
set%NB_TRUSS > 0)
THEN
524 IF(
ALLOCATED(
set%TRUSS))
DEALLOCATE(
set%TRUSS)
526 ENDIF
527 ENDIF
528 ENDIF
529
530
531
532 IF( clause%NB_SPRING > 0) THEN
533
534 IF(
set%NB_SPRING > 0 )
THEN
535
536 ALLOCATE(result(
set%NB_SPRING + clause%NB_SPRING ))
537
539 * clause%SPRING, clause%NB_SPRING ,
540 * result, new_size ,
541 * clause_operator)
542
543 IF (
ALLOCATED(
set%SPRING))
DEALLOCATE (
set%SPRING)
544 ALLOCATE(
set%SPRING(new_size))
545
546 set%SPRING(1:new_size) = result(1:new_size)
547 set%NB_SPRING=new_size
548
549 DEALLOCATE(result)
550
551 ELSE
552
553 IF ( clause_operator ==
set_add)
THEN
554 IF (
ALLOCATED(
set%SPRING))
DEALLOCATE (
set%SPRING)
555 ALLOCATE(
set%SPRING(clause%NB_SPRING) )
556
557 set%NB_SPRING=clause%NB_SPRING
558 set%SPRING(1:clause%NB_SPRING)=clause%SPRING(1:clause%NB_SPRING)
559
560 ENDIF
561 ENDIF
562 ELSE
564 IF (
set%NB_SPRING > 0)
THEN
565 IF(
ALLOCATED(
set%SPRING))
DEALLOCATE(
set%SPRING)
567 ENDIF
568 ENDIF
569 ENDIF
570
571
572
573
574
575
576
577
578 IF (
set%NB_ELLIPSE > 0 )
THEN
579
580 set%ELLIPSE_IAD_BUFR = clause%ELLIPSE_IAD_BUFR
581 set%ELLIPSE_ID_MADYMO = clause%ELLIPSE_ID_MADYMO
582 set%ELLIPSE_N = clause%ELLIPSE_N
583 set%ELLIPSE_XC = clause%ELLIPSE_XC
584 set%ELLIPSE_YC = clause%ELLIPSE_YC
585 set%ELLIPSE_ZC = clause%ELLIPSE_ZC
586 set%ELLIPSE_A = clause%ELLIPSE_A
587 set%ELLIPSE_B = clause%ELLIPSE_B
588 set%ELLIPSE_C = clause%ELLIPSE_C
589 set%EXT_ALL = clause%EXT_ALL
590 CALL my_alloc(
set%ELLIPSE_SKEW,9)
591 set%ELLIPSE_SKEW(1:9) = clause%ELLIPSE_SKEW(1:9)
592
593
594
595
596 ELSEIF (
set%NB_PLANE > 0 )
THEN
597
598 set%PLANE_IAD_BUFR = clause%PLANE_IAD_BUFR
599 set%PLANE_XM = clause%PLANE_XM
600 set%PLANE_YM = clause%PLANE_YM
601 set%PLANE_ZM = clause%PLANE_ZM
602 set%PLANE_XM1 = clause%PLANE_XM1
603 set%PLANE_YM1 = clause%PLANE_YM1
604 set%PLANE_ZM1 = clause%PLANE_ZM1
605 set%EXT_ALL = clause%EXT_ALL
606 ELSE
607
608
609
610 empty_condition = (clause%nb_surf_seg==0)
611 IF( clause%NB_SURF_SEG > 0) THEN
612 empty_condition = (
set%nb_surf_seg==0)
613 IF(
set%NB_SURF_SEG > 0 )
THEN
614
615
616
617
618
619
620 IF ( clause_operator ==
set_add)
THEN
621
622 CALL union_surface(
set%SURF_NODES(1,1),
set%SURF_NODES(1,2),
623 .
set%SURF_NODES(1,3),
set%SURF_NODES(1,4),
624 .
set%SURF_ELTYP,
set%SURF_ELEM,
set%NB_SURF_SEG,
625 . clause%SURF_NODES(1,1), clause%SURF_NODES(1,2),
626 . clause%SURF_NODES(1,3), clause%SURF_NODES(1,4),
627 . clause%SURF_ELTYP, clause%SURF_ELEM, clause%NB_SURF_SEG,
628 . ns )
629 call surface_type( empty_condition,clause_operator,clause,
set )
630
632
633 CALL delete_surface(
set%SURF_NODES(1,1),
set%SURF_NODES(1,2),
634 .
set%SURF_NODES(1,3),
set%SURF_NODES(1,4),
635 .
set%SURF_ELTYP,
set%SURF_ELEM,
set%NB_SURF_SEG,
636 . clause%SURF_NODES(1,1), clause%SURF_NODES(1,2),
637 . clause%SURF_NODES(1,3), clause%SURF_NODES(1,4),
638 . clause%SURF_ELTYP, clause%SURF_ELEM, clause%NB_SURF_SEG,
639 . ns )
640 call surface_type( empty_condition,clause_operator,clause,
set )
641
643
644 CALL intersect_surface(
set%SURF_NODES(1,1),
set%SURF_NODES(1,2),
645 .
set%SURF_NODES(1,3),
set%SURF_NODES(1,4),
646 .
set%SURF_ELTYP,
set%SURF_ELEM,
set%NB_SURF_SEG,
647 . clause%SURF_NODES(1,1), clause%SURF_NODES(1,2),
648 . clause%SURF_NODES(1,3), clause%SURF_NODES(1,4),
649 . clause%SURF_ELTYP, clause%SURF_ELEM, clause%NB_SURF_SEG,
650 . ns )
651 call surface_type( empty_condition,clause_operator,clause,
set )
652 ELSE
653 print*,'Unknown clause operator'
654 ENDIF
655
656 DEALLOCATE(
set%SURF_NODES)
657 DEALLOCATE(
set%SURF_ELTYP)
658 DEALLOCATE(
set%SURF_ELEM)
659
660 CALL my_alloc(
set%SURF_NODES,ns,4)
661 CALL my_alloc (
set%SURF_ELTYP,ns)
662 CALL my_alloc (
set%SURF_ELEM,ns)
663
665
666 CALL get_merged_surface(
set%SURF_NODES(1,1),
667 .
set%SURF_NODES(1,2),
668 .
set%SURF_NODES(1,3),
669 .
set%SURF_NODES(1,4),
672
673 ELSE
674
675 IF ( clause_operator ==
set_add)
THEN
676 IF (
ALLOCATED (
set%SURF_NODES) )
DEALLOCATE(
set%SURF_NODES)
677 IF (
ALLOCATED (
set%SURF_ELTYP) )
DEALLOCATE(
set%SURF_ELTYP)
678 IF (
ALLOCATED (
set%SURF_ELEM) )
DEALLOCATE(
set%SURF_ELEM)
679
680 new_size = clause%NB_SURF_SEG
681 CALL my_alloc(
set%SURF_NODES,new_size,4)
682 CALL my_alloc (
set%SURF_ELTYP,new_size)
683 CALL my_alloc (
set%SURF_ELEM,new_size)
684
685 set%NB_SURF_SEG = new_size
686 set%SURF_NODES(1:new_size,1:4) = clause%SURF_NODES(1:new_size,1:4)
687 set%SURF_ELTYP(1:new_size) = clause%SURF_ELTYP(1:new_size)
688 set%SURF_ELEM(1:new_size) = clause%SURF_ELEM(1:new_size)
689 call surface_type( empty_condition,clause_operator,clause,
set )
690 ENDIF
691 ENDIF
692 ELSE
694 IF (
set%NB_SURF_SEG > 0)
THEN
695 IF(
ALLOCATED(
set%SURF_NODES))
DEALLOCATE(
set%SURF_NODES)
696 IF(
ALLOCATED(
set%SURF_ELTYP))
DEALLOCATE(
set%SURF_ELTYP)
697 IF(
ALLOCATED(
set%SURF_ELEM))
DEALLOCATE(
set%SURF_ELEM)
699 call surface_type( empty_condition,clause_operator,clause,
set )
700 ENDIF
701 ENDIF
702 ENDIF
703 ENDIF
704
705
706
707 IF( clause%NB_LINE_SEG > 0) THEN
708
709 IF(
set%NB_LINE_SEG > 0 )
THEN
710
711
712
713
714
715
716 IF ( clause_operator ==
set_add)
THEN
717
718 CALL union_line(
set%LINE_NODES(1,1),
set%LINE_NODES(1,2),
719 .
set%LINE_ELTYP,
set%LINE_ELEM,
set%NB_LINE_SEG,
720 . clause%LINE_NODES(1,1), clause%LINE_NODES(1,2),
721 . clause%LINE_ELTYP, clause%LINE_ELEM, clause%NB_LINE_SEG,
722 .
723
725
726 CALL delete_line (
set%LINE_NODES(1,1),
set%LINE_NODES(1,2),
727 .
set%LINE_ELTYP,
set%LINE_ELEM,
set%NB_LINE_SEG,
728 . clause%LINE_NODES(1,1), clause%LINE_NODES(1,2),
729 . clause%LINE_ELTYP, clause%LINE_ELEM, clause%NB_LINE_SEG,
730 . new_size )
731
733
734 CALL intersect_line (
set%LINE_NODES(1,1),
set%LINE_NODES(1,2),
735 .
set%LINE_ELTYP,
set%LINE_ELEM,
set%NB_LINE_SEG,
736 . clause%LINE_NODES
737 . clause%LINE_ELTYP, clause%LINE_ELEM, clause%NB_LINE_SEG,
738 . new_size )
739 ELSE
740 print*,'Unknown clause operator'
741 ENDIF
742
743 DEALLOCATE(
set%LINE_NODES)
744 DEALLOCATE(
set%LINE_ELTYP)
745 DEALLOCATE(
set%LINE_ELEM)
746
747 CALL my_alloc(
set%LINE_NODES,new_size,4)
748 CALL my_alloc (
set%LINE_ELTYP,new_size)
749 CALL my_alloc (
set%LINE_ELEM,new_size)
750
751 set%NB_LINE_SEG = new_size
752
753 CALL get_merged_lines (
set%LINE_NODES(1,1),
754 .
set%LINE_NODES(1,2),
757
758 ELSE
759
760 IF ( clause_operator ==
set_add)
THEN
761 IF (
ALLOCATED (
set%LINE_NODES) )
DEALLOCATE(
set%LINE_NODES)
762 IF (
ALLOCATED (
set%LINE_ELTYP) )
DEALLOCATE(
set%LINE_ELTYP)
763 IF (
ALLOCATED (
set%LINE_ELEM) )
DEALLOCATE(
set%LINE_ELEM)
764
765 new_size = clause%NB_LINE_SEG
766 CALL my_alloc(
set%LINE_NODES,new_size,2)
767 CALL my_alloc (
set%LINE_ELTYP,new_size)
768 CALL my_alloc (
set%LINE_ELEM,new_size)
769
770 set%NB_LINE_SEG = new_size
771 set%LINE_NODES(1:new_size,1:2) = clause%LINE_NODES(1:new_size,1:2)
772 set%LINE_ELTYP(1:new_size) = clause%LINE_ELTYP(1:new_size)
773 set%LINE_ELEM(1:new_size) = clause%LINE_ELEM(1:new_size)
774
775 ENDIF
776 ENDIF
777 ELSE
779 IF (
set%NB_LINE_SEG > 0)
THEN
780 IF(
ALLOCATED(
set%LINE_NODES))
DEALLOCATE(
set%LINE_NODES)
781 IF(
ALLOCATED(
set%LINE_ELTYP))
DEALLOCATE(
set%LINE_ELTYP)
782 IF(
ALLOCATED(
set%LINE_ELEM))
DEALLOCATE(
set%LINE_ELEM)
784 ENDIF
785 ENDIF
786 ENDIF
787
788
789
790
791
792
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820! DEALLOCATE(result)
821
822
823
824
825
826
827
828
830 . ixs ,ixs10 ,sh4tree ,sh3tree ,ixc ,
831 . ixtg ,knod2els ,nod2els ,knod2elc ,nod2elc ,
832 . knod2eltg ,nod2eltg ,ipartc ,ipartg ,iparts ,
833 . ipart ,
set ,opt_a ,opt_o ,ixq ,
834 . knod2elq ,nod2elq ,x ,keyset ,delbuf ,
835 . .true. )
836
837
838 IF(.NOT.
ALLOCATED(
set%SURF_NODES))
ALLOCATE(
set%SURF_NODES(1,4))
839 IF(.NOT.
ALLOCATED(
set%SURF_ELTYP))
ALLOCATE(
set%SURF_ELTYP(1))
840 IF(.NOT.
ALLOCATED(
set%SURF_ELEM))
ALLOCATE(
set%SURF_ELEM(1))
841 IF(.NOT. ALLOCATED(delbuf%SURF)) ALLOCATE(delbuf%SURF(1,6))
842
843 CALL union_surface(
set%SURF_NODES(1,1),
set%SURF_NODES(1,2),
844 .
set%SURF_NODES(1,3),
set%SURF_NODES(1,4),
845 .
set%SURF_ELTYP,
set%SURF_ELEM,
set%NB_SURF_SEG,
846 . delbuf%SURF(1,1), delbuf%SURF(1,2),
847 . delbuf%SURF(1,3), delbuf%SURF(1,4),
848 . delbuf%SURF(1,5), delbuf%SURF(1,6), delbuf%SZ_SURF,
849 . ns )
850
851 IF(
ALLOCATED(
set%SURF_NODES))
DEALLOCATE(
set%SURF_NODES)
852 IF(
ALLOCATED(
set%SURF_ELTYP))
DEALLOCATE(
set%SURF_ELTYP)
853 IF(
ALLOCATED(
set%SURF_ELEM))
DEALLOCATE(
set%SURF_ELEM)
854 IF(ALLOCATED(delbuf%SURF)) DEALLOCATE(delbuf%SURF)
855
856 CALL my_alloc(
set%SURF_NODES,ns,4)
857 CALL my_alloc(
set%SURF_ELTYP,ns)
858 CALL my_alloc(
set%SURF_ELEM,ns)
859
861
862 CALL get_merged_surface(
set%SURF_NODES(1,1),
863 .
set%SURF_NODES(1,2),
864 .
set%SURF_NODES(1,3),
865 .
set%SURF_NODES(1,4),
868
869 delbuf%SZ_SURF = 0
870
871
872
873
874
875
877 . .true. )
878 IF(.NOT.
ALLOCATED(
set%LINE_NODES))
ALLOCATE(
set%LINE_NODES(1,2))
879 IF(.NOT.
ALLOCATED(
set%LINE_ELTYP))
ALLOCATE(
set%LINE_ELTYP(1))
880 IF(.NOT.
ALLOCATED(
set%LINE_ELEM))
ALLOCATE(
set%LINE_ELEM(1))
881 IF(.NOT. ALLOCATED(delbuf%LINE)) ALLOCATE(delbuf%LINE(1,4))
882
883 CALL union_line(
set%LINE_NODES(1,1),
set%LINE_NODES(1,2),
884 .
set%LINE_ELTYP,
set%LINE_ELEM,
set%NB_LINE_SEG,
885 . delbuf%LINE(1,1), delbuf%LINE(1,2),
886 . delbuf%LINE(1,3), delbuf%LINE(1,4), delbuf%SZ_LINE,
887 . new_size )
888
889 IF(
ALLOCATED(
set%LINE_NODES))
DEALLOCATE
890 IF(
ALLOCATED(
set%LINE_ELTYP))
DEALLOCATE(
set%LINE_ELTYP)
891 IF(
ALLOCATED(
set%LINE_ELEM))
DEALLOCATE(
set%LINE_ELEM)
892 IF(ALLOCATED(delbuf%LINE)) DEALLOCATE(delbuf%LINE)
893
894 CALL my_alloc(
set%LINE_NODES,new_size,4)
895 CALL my_alloc (
set%LINE_ELTYP,new_size)
896 CALL my_alloc (
set%LINE_ELEM
897
898 set%NB_LINE_SEG = new_size
899
900 CALL get_merged_lines (
set%LINE_NODES(1,1),
901 .
set%LINE_NODES(1,2),
904
905 delbuf%SZ_LINE = 0
906
907
908
910 . .true.)
911
912 IF(.NOT.
ALLOCATED(
set%LINE_NODES))
ALLOCATE(
set%LINE_NODES(1,2))
913 IF(.NOT.
ALLOCATED(
set%LINE_ELTYP))
ALLOCATE(
set%LINE_ELTYP(1))
914 IF(.NOT.
ALLOCATED(
set%LINE_ELEM))
ALLOCATE(
set%LINE_ELEM(1))
915 IF(.NOT. ALLOCATED(delbuf%LINE)) ALLOCATE(delbuf%LINE(1,4))
916
917
918 CALL union_line(
set%LINE_NODES(1,1),
set%LINE_NODES(1,2),
919 .
set%LINE_ELTYP,
set%LINE_ELEM
920 . delbuf%LINE(1,1), delbuf%LINE(1,2),
921 . delbuf%LINE(1,3), delbuf%LINE(1,4), delbuf%SZ_LINE,
922 . new_size )
923
924 IF(
ALLOCATED(
set%LINE_NODES))
DEALLOCATE(
set%LINE_NODES)
925 IF(
ALLOCATED(
set%LINE_ELTYP))
DEALLOCATE(
set%LINE_ELTYP)
926 IF(
ALLOCATED(
set%LINE_ELEM))
DEALLOCATE(
set%LINE_ELEM)
927 IF(ALLOCATED(delbuf%LINE)) DEALLOCATE(delbuf%LINE)
928
929 CALL my_alloc(
set%LINE_NODES,new_size
930 CALL my_alloc (
set%LINE_ELTYP
931 CALL my_alloc (
set%LINE_ELEM,new_size)
932
933 set%NB_LINE_SEG = new_size
934
935 CALL get_merged_lines (
set%LINE_NODES(1,1),
936 .
set%LINE_NODES(1,2),
939
940 delbuf%SZ_LINE = 0
941
942 ENDIF
943
944
subroutine create_line_from_element(ixt, ixp, ixr, clause, delbuf, go_in_array)
subroutine create_line_from_surface(clause, keyset, opt_a, opt_e, delbuf, go_in_array)
subroutine create_surface_from_element(ixs, ixs10, sh4tree, sh3tree, ixc, ixtg, knod2els, nod2els, knod2elc, nod2elc, knod2eltg, nod2eltg, ipartc, ipartg, iparts, ipart, clause, opt_a, opt_o, ixq, knod2elq, nod2elq, x, keyset, delbuf, go_in_array)
integer, parameter ncharfield
integer, parameter set_add
add operator
integer, parameter set_intersect
intersection operator
integer, parameter set_delete
delete operator
type(set_), dimension(:), allocatable, target set
subroutine set_merge_simple(set_entity, nb_set_entity, clause_entity, nb_clause_entity, result, nb_result, clause_operator)