36
37
38
39 USE my_alloc_mod
43 use element_mod , only : nixt,nixp,nixr
44
45
46
47#include "implicit_f.inc"
48
49
50
51 INTEGER, INTENT(IN) :: IXT(NIXT,*),IXP(NIXP,*),IXR(NIXR,*)
52
53 TYPE (SET_) :: CLAUSE
54 TYPE (SET_SCRATCH) :: DELBUF
55 LOGICAL GO_IN_ARRAY
56
57
58
59 INTEGER I, NIX, SZELMAX, IAD_LINE, NSEG, LINE_NENTITY
60 INTEGER IWORK(70000)
61
62 INTEGER, ALLOCATABLE, DIMENSION(:,:) :: ITRI
63 INTEGER, ALLOCATABLE, DIMENSION(:) :: INDEX, BUFTMPLINE
64
65 delbuf%SZ_LINE = 0
66
67!
68 szelmax = clause%NB_TRUSS + clause%NB_BEAM + clause%NB_SPRING
69 IF (szelmax == 0) RETURN
70
71 line_nentity = 4
72 ALLOCATE(buftmpline(szelmax*line_nentity))
73 ALLOCATE(itri(3,szelmax))
74 ALLOCATE(index(2*szelmax))
75
76 iad_line = 1
77
78
79
80 nseg = 0
82 . ixt ,ixp ,ixr ,buftmpline , nseg,
83 . iad_line ,clause )
84
85
86 nix = line_nentity
87
88 DO i=1,nseg
89 index(i)=i
90 itri(1,i) = buftmpline((i-1)*nix+1)
91 itri(2,i) = buftmpline((i-1)*nix+2)
92 itri(3,i) = buftmpline((i-1)*nix+4)
93 ENDDO
94 iwork(1:70000) = 0
96
97
98
99
100
101
102
103
104
105 IF (go_in_array .EQV. .true.) THEN
106 delbuf%SZ_LINE = nseg
107 ALLOCATE(delbuf%LINE(nseg,4))
108 DO i=1,nseg
109 delbuf%LINE(i,1) = buftmpline((index(i)-1)*nix+1)
110 delbuf%LINE(i,2) = buftmpline((index(i)-1)*nix+2)
111 delbuf%LINE(i,3) = buftmpline((index(i)-1)*nix+3)
112 delbuf%LINE(i,4) = buftmpline((index(i)-1)*nix+4)
113 ENDDO
114 ELSE
115 IF(ALLOCATED( clause%LINE_NODES )) DEALLOCATE( clause%LINE_NODES )
116 IF(ALLOCATED( clause%LINE_ELTYP )) DEALLOCATE( clause%LINE_ELTYP )
117 IF(ALLOCATED( clause%LINE_ELEM )) DEALLOCATE( clause%LINE_ELEM )
118
119 clause%NB_LINE_SEG = nseg
120 CALL my_alloc(clause%LINE_NODES,nseg,2)
121 CALL my_alloc(clause%LINE_ELTYP,nseg)
122 CALL my_alloc(clause%LINE_ELEM,nseg)
123
124 DO i=1,nseg
125 clause%LINE_NODES(i,1) = buftmpline((index(i)-1)*nix+1)
126 clause%LINE_NODES(i,2) = buftmpline((index(i)-1)*nix+2)
127 clause%LINE_ELTYP(i) = buftmpline((index(i)-1)*nix+3)
128 clause%LINE_ELEM(i) = buftmpline((index(i)-1)*nix+4)
129 ENDDO
130 ENDIF
131
132 IF(ALLOCATED(itri)) DEALLOCATE(itri)
133 IF(ALLOCATED(index)) DEALLOCATE(index)
134 IF(ALLOCATED(buftmpline)) DEALLOCATE(buftmpline)
135
136
137 RETURN
subroutine line_buffer(ixt, ixp, ixr, buftmpline, nseg, iad_line, clause)
void my_orders(int *mode, int *iwork, int *data, int *index, int *n, int *irecl)