40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
63 USE reader_old_mod , ONLY : line
64 USE user_id_mod , ONLY : id_limit
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,ID,IDS,J,N,JC,STAT
99 INTEGER CPT,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 INTEGER NINTRN
110 DATA mess /'3D BEAM ELEMENTS DEFINITION '/
111 DATA mess2/'3D BEAM ELEMENTS SELECTION FOR TH PLOT '/
112
113
114
115
116 ALLOCATE (sub_beam(numelp),stat=stat)
117 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'SUB_BEAM')
118 sub_beam(1:numelp) = 0
119 ALLOCATE (vx(numelp),stat=stat)
120 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'VX')
121 vx(1:numelp) = zero
122 ALLOCATE (vy(numelp),stat=stat)
123 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1='vy
')
124 VY(1:NUMELP) = ZERO
125 ALLOCATE (VZ(NUMELP),STAT=stat)
126 IF (STAT /= 0) CALL ANCMSG(MSGID=268,ANMODE=ANINFO,MSGTYPE=MSGERROR,C1='vz')
127 VZ(1:NUMELP) = ZERO
128 INDEX_PART = 1
129
130
131
132 CALL CPP_BEAM_READ(IXP,NIXP,IPARTP,SUB_BEAM,VX,VY,VZ)
133
134
135
136 DO I=1,NUMELP
137
138
139
140 IF( IPART(4,INDEX_PART) /= IPARTP(I) )THEN
141 DO J=1,NPART
142 IF(IPART(4,J)== IPARTP(I) ) INDEX_PART = J
143 ENDDO
144 ENDIF
145 IF(IPART(4,INDEX_PART) /= IPARTP(I)) THEN
146 CALL ANCMSG(MSGID=402,MSGTYPE=MSGERROR,ANMODE=ANINFO_BLIND_1,C1="BEAM",I1=IPARTP(I),I2=IPARTP(I),PRMOD=MSG_CUMU)
147 ENDIF
148 IPARTP(I) = INDEX_PART
149
150 MT=IPART(1,INDEX_PART)
151 IPID=IPART(2,INDEX_PART)
152 IXP(1,I)=MT
153 IXP(5,I)=IPID
154 IF (IXP(6,I)>ID_LIMIT%GLOBAL) THEN
155 CALL ANCMSG(MSGID=509,ANMODE=ANINFO,MSGTYPE=MSGERROR,I1=IXP(6,I),C1=LINE,C2='/beam')
156 ENDIF
157
158 NORM = SQRT(VX(I)**2 + VY(I)**2 + VZ(I)**2)
159 IF (NORM > ZERO) THEN
160 IBEAM_VECTOR(I) = 1
161 RBEAM_VECTOR(1,I) = VX(I) / NORM
162 RBEAM_VECTOR(2,I) = VY(I) / NORM
163 RBEAM_VECTOR(3,I) = VZ(I) / NORM
164 IXP(4,I) = IXP(3,I)
165 ELSE
166 IBEAM_VECTOR(I) = 0
167 RBEAM_VECTOR(1:3,I) = ZERO
168 ENDIF
169
170.OR..OR. IF ((IXP(4,I)==0 IXP(4,I)==IXP(2,I) IXP(4,I)==IXP(3,I)).
171 . AND.(IBEAM_VECTOR(I)==0)) THEN
172 CALL ANCMSG(MSGID=2093,MSGTYPE=MSGINFO,ANMODE=ANINFO_BLIND_1,I1=IPART(4,INDEX_PART),I2=IXP(6,I),PRMOD=MSG_CUMU)
173 IXP(4,I) = IXP(3,I)
174 ENDIF
175 DO J=2,4
176 IXP(J,I)=USR2SYS(IXP(J,I),ITABM1,MESS,IXP(6,I))
177 ENDDO
178
179
180 CALL ANODSET(IXP(2,I), CHECK_BEAM)
181 CALL ANODSET(IXP(3,I), CHECK_BEAM)
182 CALL ANODSET(IXP(4,I), CHECK_USED)
183 ENDDO
184 IF(ALLOCATED(SUB_BEAM)) DEALLOCATE(SUB_BEAM)
185 IF(ALLOCATED(VX)) DEALLOCATE(VX)
186 IF(ALLOCATED(VY)) DEALLOCATE(VY)
187 IF(ALLOCATED(VZ)) DEALLOCATE(VZ)
188
189 CALL ANCMSG(MSGID=402,MSGTYPE=MSGERROR,ANMODE=ANINFO_BLIND_1, PRMOD=MSG_PRINT)
190
191 CALL ANCMSG(MSGID=2093,MSGTYPE=MSGINFO,ANMODE=ANINFO_BLIND_1,PRMOD=MSG_PRINT)
192
193
194
195 IDS = 79
196 I = 0
197 J = 0
198 CALL VDOUBLE(IXP(NIXP,1),NIXP,NUMELP,MESS,0,BID)
199 IDS = 28
200 I1=1
201 I2=MIN0(50,NUMELP)
202
203 90 WRITE (IOUT,300)
204 DO I=I1,I2
205 MID=IPM (1,IXP(1,I))
206 PID=IGEO(1,IXP(5,I))
207 N2=IXP(2,I)
208 N3=IXP(3,I)
209 N4=IXP(4,I)
210 IF(N2>0)N2=ITAB(N2)
211 IF(N3>0)N3=ITAB(N3)
212 IF(N4>0)N4=ITAB(N4)
213 IF (IBEAM_VECTOR(I) == 0) THEN
214 WRITE (IOUT,'(7(i10,1x))')I,IXP(6,I),MID,PID,N2,N3,N4
215 ELSE
216 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)
217 ENDIF
218
219 ENDDO
220 IF(I2==NUMELP)GOTO 200
221 I1=I1+50
222 I2=MIN0(I2+50,NUMELP)
223 GOTO 90
224
225 200 CONTINUE
226 RETURN
227 300 FORMAT(/' beam elements'/
228 + ' -------------'/
229 + ' loc-el glo-el mater
geom node1 node2 node3/vector
')
norm(diag(diag(diag(inv(mat))) -id.SOL), 2) % destroy mumps instance id.JOB
subroutine geom(a, b, c, center_x, center_y, center_z, vol)
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)