56
57
58
59 USE elbufdef_mod
60 USE matparam_def_mod
66
67
68
69#include "implicit_f.inc"
70
71
72
73#include "com01_c.inc"
74#include "com04_c.inc"
75#include "param_c.inc"
76#include "units_c.inc"
77#include "scr17_c.inc"
78#include "chara_c.inc"
79#include "task_c.inc"
80
81
82
83 INTEGER IPARG(*),
84 . IXC(NIXC,*),IXTG(NIXTG,*),IPM(*),IGEO(*),
85 . ITAB(*) ,IPART(LIPART1,*) ,IPARTC(*) ,IPARTTG(*),
86 . WEIGHT(*), NODGLOB(*), NPBY(NNPBY,*), LPBY(*)
87 INTEGER LENG,LENGC,LENGTG
89 . x(*), bufel(*),
90 . pm(npropm,*), geo(npropg,*) ,thke(*)
91 TYPE (ELBUF_STRUCT_), DIMENSION(NGROUP), TARGET :: ELBUF_TAB
92 TYPE (STACK_PLY) :: STACK
93 TYPE (DRAPE_) :: DRAPE_SH4N(NUMELC_DRAPE),DRAPE_SH3N(NUMELTG_DRAPE)
94 TYPE (DRAPEG_) :: DRAPEG
95 TYPE (DYNAIN_DATABASE), INTENT(INOUT) :: DYNAIN_DATA
96 TYPE (MATPARAM_STRUCT_) ,DIMENSION(NUMMAT) ,INTENT(IN) :: MAT_PARAM
97
98
99
100 CHARACTER CHSTAT*4,FILNAM*100,T10*10,MES*40
101 INTEGER FILEN,I,INNODA,IERR,J,N
102 INTEGER LENR,SIZLOC,SIZP0
103 INTEGER , DIMENSION(:),ALLOCATABLE :: ITABG, NODTAG ,DYNAIN_INDXC ,
104 . DYNAIN_INDXTG
105 INTEGER CTEXT(2149)
106 double precision
107 . , DIMENSION(:),ALLOCATABLE :: wa,wap0
108
109 INTEGER :: LEN_TMP_NAME
110 CHARACTER(len=2148) :: TMP_NAME
111 LOGICAL IS_FILE_TO_BE_WRITTEN
112 CHARACTER*100 LINE
113
114
115
116
117
118
119 IF(dynain_data%IDYNAINF>=10000)dynain_data%IDYNAINF=1
120 WRITE(chstat,'(I4.4)')dynain_data%IDYNAINF
121 IF(dynain_data%ZIPDYNAIN==0) THEN
122 filnam=rootnam(1:rootlen)//'_'//chstat//'.dynain'
123 filen = rootlen + 12
126 IF(ispmd == 0) THEN
127 OPEN(unit=iudynain,file=tmp_name(1:len_tmp_name),access='SEQUENTIAL',form='FORMATTED',status='UNKNOWN')
128 WRITE(iudynain,'(2A)')'$RADIOSS DYNAIN FILE ',filnam(1:filen)
129 END IF
130 ELSE
131 filnam=rootnam(1:rootlen)//'_'//chstat//'.dynain'
132 filen = rootlen + 12
135 DO i=1,len_tmp_name
136 ctext(i)=ichar(tmp_name(i:i))
138 ENDDO
139 IF(ispmd == 0) THEN
140 CALL open_c(ctext,len_tmp_name,6)
141 WRITE(line,'(2A)') '$RADIOSS DYNAIN FILE ',filnam(1:filen)
143 ENDIF
144 ENDIF
145
146
147
148
149
150
151 ALLOCATE(nodtag(numnod),stat=ierr)
152 ALLOCATE(itabg(leng),stat=ierr)
153 ALLOCATE(dynain_indxc(2*lengc),stat=ierr)
154 ALLOCATE(dynain_indxtg(2*lengtg),stat=ierr)
155
156
157
158
160
161 nodtag=0
162
163 dynain_data%DYNAIN_NUMELC =0
164 dynain_data%DYNAIN_NUMELTG =0
165
166 IF(nspmd == 1)THEN
167
169 . ixtg ,ipartc ,iparttg ,dynain_data ,
170 . nodtag ,dynain_indxc,dynain_indxtg,iparg ,
171 . elbuf_tab,thke ,ipart )
172 dynain_data%DYNAIN_NUMELC_G =dynain_data%DYNAIN_NUMELC
173 dynain_data%DYNAIN_NUMELTG_G =dynain_data%DYNAIN_NUMELTG
174 ELSE
175
177 . ixtg ,ipartc ,iparttg ,dynain_data ,
178 . nodtag ,dynain_indxc,dynain_indxtg,iparg ,
179 . elbuf_tab,thke ,lengc ,lengtg ,ipart )
180 END IF
181
182
183
184
185
186 DO i=1,nrbody
187 DO j=1,npby(2,i)
188 n=lpby(npby(11,i)+j)
189 IF (nodtag(n)/=0) THEN
190 nodtag(npby(1,i)) = 1
191 EXIT
192 END IF
193 ENDDO
194 ENDDO
195
196 CALL dynain_node(x,numnod,itab,itabg,leng,nodglob,weight,nodtag,dynain_data)
197
198
200
201
202
203
204 ierr = 0
205 IF(sizloc >= 1) THEN
206 ALLOCATE(wa(sizloc),stat=ierr)
207 ELSE
208 ALLOCATE(wa(1))
209 ENDIF
210 IF(ierr/=0)THEN
211 CALL ancmsg(msgid=252,anmode=aninfo,
212 . i1=ierr)
214 END IF
215
216 ierr = 0
218 ALLOCATE(wap0(sizp0),stat=ierr)
219 IF(ierr/=0)THEN
220 CALL ancmsg(msgid=252,anmode=aninfo,
221 . i1=ierr)
223 END IF
224
225
226
227
228
229 IF(dynain_data%DYNAIN_C(4)==1) THEN
231 1 elbuf_tab ,iparg ,igeo ,ixc ,
232 2 ixtg ,wa ,wap0 ,ipartc,iparttg,
233 3 dynain_data,dynain_indxc,dynain_indxtg,sizp0 ,
234 4 geo ,stack ,drape_sh4n ,drape_sh3n,x ,
235 5 thke , drapeg ,nummat ,mat_param )
236 ENDIF
237
238
239 IF(dynain_data%DYNAIN_C(5)==1) THEN
241 1 elbuf_tab ,iparg ,ipm ,igeo ,ixc ,
242 2 ixtg ,wa ,wap0 ,ipartc,iparttg,
243 3 dynain_data,dynain_indxc,dynain_indxtg,sizp0 ,
244 4 geo ,stack ,drape_sh4n ,drape_sh3n,x ,
245 5 thke ,drapeg)
246 ENDIF
247
248
249
250 IF(sizloc >= 1) DEALLOCATE(wa)
251 IF(sizp0 >= 1) DEALLOCATE(wap0)
252
253
254
255 DEALLOCATE(nodtag,itabg,dynain_indxc,dynain_indxtg)
256
257
258
259 IF(ispmd==0) THEN
260 IF(dynain_data%ZIPDYNAIN==0) THEN
261 WRITE(iudynain,'(A)')'*END '
262 CLOSE(UNIT=IUDYNAIN)
263 ELSE
264 CALL STRS_TXT50('*END ',7)
265 CALL CLOSE_C()
266 ENDIF
267
268 WRITE (IOUT,1000) FILNAM(1:FILEN)
269 WRITE (ISTDO,1000) FILNAM(1:FILEN)
270 ENDIF
271
272
273 1000 FORMAT (4X,' DYNAIN FILE:',1X,A,' WRITTEN')
274
275 RETURN
subroutine dynain_c_strag(elbuf_tab, iparg, ipm, igeo, ixc, ixtg, wa, wap0, ipartc, iparttg, dynain_data, dynain_indxc, dynain_indxtg, sizp0, geo, stack, drape_sh4n, drape_sh3n, x, thke, drapeg)
subroutine dynain_c_strsg(elbuf_tab, iparg, igeo, ixc, ixtg, wa, wap0, ipartc, iparttg, dynain_data, dynain_indxc, dynain_indxtg, sizp0, geo, stack, drape_sh4n, drape_sh3n, x, thke, drapeg, nummat, mat_param)
subroutine dynain_node(x, numnod, itab, itabg, leng, nodglob, weight, nodtag, dynain_data)
subroutine dynain_shel_mp(itab, itabg, leng, igeo, ixc, ixtg, ipartc, iparttg, dynain_data, nodtag, dynain_indxc, dynain_indxtg, iparg, elbuf_tab, thke, ipart)
subroutine dynain_shel_spmd(itab, itabg, leng, igeo, ixc, ixtg, ipartc, iparttg, dynain_data, nodtag, dynain_indxc, dynain_indxtg, iparg, elbuf_tab, thke, lengc, lengtg, ipart)
subroutine dynain_size_c(iparg, elbuf_tab, p0ars, wasz, dynain_data)
character(len=outfile_char_len) outfile_name
subroutine spmd_outpitab(v, weight, nodglob, vglob)
subroutine strs_txt50(text, length)
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)
void open_c(int *ifil, int *len, int *mod)