39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
62 USE reader_old_mod , ONLY : line
63 USE user_id_mod , ONLY : id_limit
64 use element_mod , only : nixp
65
66
67
68#include "implicit_f.inc"
69
70
71
72#include "analyse_name.inc"
73
74
75
76#include "scr17_c.inc"
77#include "com04_c.inc"
78#include "param_c.inc"
79#include "units_c.inc"
80
81
82
83
84 INTEGER,INTENT(IN)::ITAB(*)
85 INTEGER,INTENT(IN)::ITABM1(*)
86 INTEGER,INTENT(IN)::IPART(LIPART1,*)
87 INTEGER,INTENT(IN)::IGEO(NPROPGI,*)
88 INTEGER,INTENT(IN)::IPM(NPROPMI,*)
89 TYPE(SUBMODEL_DATA),INTENT(IN)::LSUBMODEL(NSUBMOD)
90
91 INTEGER,INTENT(OUT)::IXP(NIXP,*)
92 INTEGER,INTENT(OUT)::IPARTP(*)
93 INTEGER,INTENT(OUT)::IBEAM_VECTOR(NUMELP)
94 my_real,
INTENT(OUT)::rbeam_vector(3,numelp)
95
96
97
98 INTEGER I, I1, I2, MID, PID,MT,IPID,IDS,J,STAT
99 INTEGER INDEX_PART
100 CHARACTER MESS*40, MESS2*40
102 INTEGER, DIMENSION(:), ALLOCATABLE :: SUB_BEAM
103 INTEGER N2,N3,N4
104 real*8, DIMENSION(:), ALLOCATABLE :: vx,vy,vz
105
106
107
108 INTEGER USR2SYS
109 DATA mess'3D BEAM ELEMENTS DEFINITION '/
110 DATA mess2/'3D BEAM ELEMENTS SELECTION FOR TH PLOT '/
111
112
113
114
115 ALLOCATE (sub_beam(numelp),stat=stat)
116 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'SUB_BEAM')
117 sub_beam(1:numelp) = 0
118 ALLOCATE (vx(numelp),stat=stat)
119 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'VX')
120 vx(1:numelp) = zero
121 ALLOCATE (vy(numelp),stat=stat)
122 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'VY')
123 vy(1:numelp) = zero
124 ALLOCATE (vz(numelp),stat=stat)
125 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'VZ')
126 vz(1:numelp) = zero
127 index_part = 1
128
129
130
131 CALL cpp_beam_read(ixp,nixp,ipartp,sub_beam,vx,vy,vz)
132
133
134
135 DO i=1,numelp
136
137
138
139 IF( ipart(4,index_part) /= ipartp(i) )THEN
140 DO j=1,npart
141 IF(ipart(4,j)== ipartp(i) ) index_part
142 ENDDO
143 ENDIF
144 IF(ipart(4,index_part) /= ipartp(i)) THEN
145 CALL ancmsg(msgid=402,msgtype=msgerror,anmode=aninfo_blind_1,c1=
"BEAM",i1=ipartp(i),i2=ipartp(i),prmod=msg_cumu)
146 ENDIF
147 ipartp(i) = index_part
148
149 mt=ipart(1,index_part)
150 ipid=ipart(2,index_part)
151 ixp(1,i)=mt
152 ixp(5,i)=ipid
153 IF (ixp(6,i)>id_limit%GLOBAL) THEN
154 CALL ancmsg(msgid=509,anmode=aninfo,msgtype=msgerror,i1=ixp(6,i),c1=line,c2=
'/BEAM')
155 ENDIF
156
157 norm = sqrt(vx(i)**2 + vy(i)**2 + vz(i
158 IF (
norm > em20)
THEN
159 ibeam_vector(i) = 1
160 rbeam_vector(1,i) = vx(i) /
norm
161 rbeam_vector(2,i) = vy(i) /
norm
162 rbeam_vector(3,i) = vz(i) /
norm
163 ixp(4,i) = ixp(3,i)
164 ELSE
165 ibeam_vector(i) = 0
166 rbeam_vector(1:3,i) = zero
167 ENDIF
168
169 IF ((ixp(4,i)==0 .OR. ixp(4,i)==ixp(2,i) .OR. ixp(4,i)==ixp(3,i)).
170 . and.(ibeam_vector(i)==0)) THEN
171 CALL ancmsg(msgid=2093,msgtype=msginfo,anmode=aninfo_blind_1,i1=ipart(4,index_part
172 ixp(4,i) = ixp(3,i)
173 ENDIF
174 DO j=2,4
175 ixp(j,i)=
usr2sys(ixp(j,i),itabm1,mess
176 ENDDO
177
178
179 CALL anodset(ixp(2,i), check_beam)
180 CALL anodset(ixp(3,i), check_beam)
181 CALL anodset(ixp(4,i), check_used)
182 ENDDO
183 IF(ALLOCATED(sub_beam)) DEALLOCATE(sub_beam)
184 IF(ALLOCATED(vx)) DEALLOCATE(vx)
185 IF(ALLOCATED(vy)) DEALLOCATE(vy)
186 IF(ALLOCATED(vz)) DEALLOCATE(vz)
187
188 CALL ancmsg(msgid=402,msgtype=msgerror,anmode=aninfo_blind_1
189
190 CALL ancmsg(msgid=2093,msgtype=msginfo,anmode=aninfo_blind_1,prmod
191
192
193
194 ids = 79
195 i = 0
196 j = 0
197 CALL vdouble(ixp(nixp,1),nixp,numelp,mess,0,bid)
198 ids = 28
199 i1=1
200 i2=min0(50,numelp)
201
202 90 WRITE (iout,300)
203 DO i=i1,i2
204 mid=ipm(1,ixp
205 pid=igeo(1,ixp(5,i))
206 n2=ixp(2,i)
207 n3=ixp(3,i)
208 n4=ixp(4,i)
209 IF(n2>0)n2=itab(n2)
210 IF(n3>0)n3=itab(n3)
211 IF(n4>0)n4=itab(n4)
212 IF (ibeam_vector(i) == 0) THEN
213 WRITE (iout,'(7(I10,1X))')i,ixp(6,i),mid,pid,n2,n3,n4
214 ELSE
215 WRITE (iout,'(6(I10,1X),3(1PG20.13,1X))')i,ixp(6,i),mid,pid,n2,n3,rbeam_vector(1,i),rbeam_vector(2,i),rbeam_vector(3,i)
216 ENDIF
217
218 ENDDO
219 IF(i2==numelp)GOTO 200
220 i1=i1+50
221 i2=min0(i2+50,numelp)
222 GOTO 90
223
224 200 CONTINUE
225 RETURN
226 300 FORMAT(/' BEAM ELEMENTS'/
227 + ' -------------'/
228 + ' LOC-EL GLO-EL MATER GEOM NODE1 NODE2 NODE3/VECTOR')
void anodset(int *id, int *type)
norm(diag(diag(diag(inv(mat))) -id.SOL), 2) % destroy mumps instance id.JOB
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)
integer function usr2sys(iu, itabm1, mess, id)
subroutine vdouble(list, ilist, nlist, mess, ir, rlist)