38 SUBROUTINE read_dynain(IPART,DYNAIN_DATA,IPARTC,IPARTTG,IXC,IXTG)
44 use element_mod ,
only : nixc,nixtg
48#include "implicit_f.inc"
61 INTEGER IPART(LIPART1,*), IXC(NIXC,*), IXTG(NIXTG,*),IPARTC(*), IPARTTG(*)
62 TYPE (DYNAIN_DATABASE),
INTENT(INOUT) :: DYNAIN_DATA
66 INTEGER I,IDPRT,K_STAT,J,IP
67 INTEGER N ,NELC , NELTG , NELCG , NELTGG ,
68 . FLG_CHK , IS_CHECK , JWARN, NELMIN , NELMAX,
69 . MY_SIZEC ,MY_SIZETG ,IERR ,
70 . SIZEC_P0(NSPMD), SIZETG_P0(NSPMD) ,ADRC(NSPMD) ,
74 INTEGER ,
DIMENSION(:),
ALLOCATABLE :: NELIDC ,NELIDTG,
75 . CLEFC ,CLEFTG ,INDXC ,INDXTG ,IDWARN ,NELIDCG ,
80 ALLOCATE( dynain_data%IPART_DYNAIN(npart))
81 dynain_data%IPART_DYNAIN(1:npart) = 0
82 IF (dynain_data%NDYNAINPRT /= 0)
THEN
83 DO i=1,dynain_data%NDYNAINPRT
84 READ(iin,
'(I10)') idprt
87 IF(ipart(4,j)==idprt)ip=j
90 CALL ancmsg(msgid=290,anmode=aninfo,i1=idprt)
93 dynain_data%IPART_DYNAIN(ip)=1
95 ELSEIF(dynain_data%NDYNAINALL /= 0)
THEN
97 dynain_data%IPART_DYNAIN(j) = 1
105 IF(dynain_data%DYNAIN_CHECK == 0.AND.(dynain_data%NDYNAINPRT /=0 .OR.dynain_data%NDYNAINALL /= 0) )
THEN
112 IF(numelc/=0)
ALLOCATE(nelidc(numelc),stat=ierr)
113 IF(numeltg/=0)
ALLOCATE(nelidtg(numeltg),stat=ierr)
115 IF(dynain_data%NDYNAINALL /= 0)
THEN
119 nelidc(i) = ixc(nixc,i)
125 nelidtg(neltg) = ixtg(nixtg,i)
134 IF(dynain_data%IPART_DYNAIN(ip)==1)
THEN
136 nelidc(nelc) = ixc(nixc,i)
142 IF(dynain_data%IPART_DYNAIN(ip)==1)
THEN
144 nelidtg(neltg) = ixtg(nixtg,i)
154 sizec_p0(1:nspmd) = 0
162 sizetg_p0(1:nspmd) = 0
173 adrc(i+1) = adrc(i) + sizec_p0(i)
174 nelcg = nelcg + sizec_p0(i)
176 nelcg = nelcg + sizec_p0(nspmd)
183 adrtg(i+1) = adrtg(i) + sizetg_p0(i)
184 neltgg = neltgg + sizetg_p0(i)
186 neltgg = neltgg + sizetg_p0(nspmd)
189 ALLOCATE(nelidcg(nelcg),stat=ierr)
190 ALLOCATE(nelidtgg(neltgg),stat=ierr)
204 ALLOCATE(nelidcg(nelcg),stat=ierr)
205 nelidcg(1:nelcg) = nelidc(1:nelc)
208 ALLOCATE(nelidtgg(neltgg),stat=ierr)
209 nelidtgg(1:neltgg) = nelidtg(1:neltg)
219 IF(nelcg/=0.AND.neltgg/=0) flg_chk = 1
221 IF(flg_chk > 0 )
THEN
225 ALLOCATE(clefc(nelcg),stat=ierr)
226 ALLOCATE(indxc(2*nelcg),stat=ierr)
232 CALL my_orders(0,work,clefc,indxc,nelcg,1)
234 ALLOCATE(cleftg(neltgg),stat=ierr)
235 ALLOCATE(indxtg(2*neltgg),stat=ierr)
239 cleftg(n)= nelidtgg(n)
242 CALL my_orders(0,work,cleftg,indxtg,neltgg,1)
244 IF(nelidtgg(indxtg(1))>=nelidcg(indxc(1)).AND.nelidtgg(indxtg(1))<=nelidcg(indxc(nelcg)))
THEN
248 IF(nelidtgg(indxtg(neltgg))>=nelidcg(indxc(1)).AND.nelidtgg(indxtg(neltgg))<=nelidcg(indxc(nelcg)))
THEN
252 IF(nelidcg(indxc(1))>=nelidtgg(indxtg(1)).AND.nelidcg(indxc(1))<=nelidtgg(indxtg(neltgg)))
THEN
256 IF(nelidcg(indxc(nelcg))>=nelidtgg(indxtg(1)).AND.nelidcg(indxc(nelcg))<=nelidtgg(indxtg(neltgg)))
THEN
260 IF(is_check == 1)
THEN
261 nelmin =
max(nelidcg(indxc(1)),nelidtgg(indxtg(1)))
262 nelmax =
min(nelidcg(indxc(nelcg)),nelidtgg(indxtg(neltgg)))
264 ALLOCATE(idwarn(
min(nelcg,neltgg)),stat=ierr)
268 IF(nelidcg(indxc(i))>=nelmin.AND.nelidcg(indxc(i))<=nelmax)
THEN
270 IF(nelidtgg(indxtg(j))>=nelmin.AND.nelidtgg(indxtg(j))<=nelmax)
THEN
271 IF(nelidcg(indxc(i))==nelidtgg(indxtg(j)))
THEN
273 idwarn(jwarn) = nelidcg(indxc(i))
282 .
' ** ERROR : DYNAIN FILE CAN NOT BE WRITTEN',
283 .
' THESE 4 NODE SHELLS AND 3 NODE SHELLS HAVE SAME USER ID'
284 WRITE(iout,*) idwarn(1:jwarn)
286 WRITE(istdo,
'(A,A,I10,A)')
287 .
' ** ERROR : DYNAIN FILE CAN NOT BE WRITTEN',
288 .
' 4 NODE SHELLS AND 3 NODE SHELLS MUST TO HAVE DIFFERENT USER ID',
297 DEALLOCATE(clefc,cleftg,indxc,indxtg)
302 IF(numelc/=0)
DEALLOCATE(nelidc,stat=ierr)
303 IF(numeltg/=0)
DEALLOCATE(nelidtg,stat=ierr)
304 DEALLOCATE(nelidcg,nelidtgg)
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)