37 SUBROUTINE read_dynain(IPART,DYNAIN_DATA,IPARTC,IPARTTG,IXC,IXTG)
46#include "implicit_f.inc"
59 INTEGER IPART(LIPART1,*), IXC(NIXC,*), IXTG(NIXTG,*),IPARTC(*), IPARTTG(*)
60 TYPE (DYNAIN_DATABASE),
INTENT(INOUT) :: DYNAIN_DATA
64 INTEGER I,IDPRT,K_STAT,J,IP
65 INTEGER N ,NELC , NELTG , NELCG , NELTGG ,
66 . FLG_CHK , IS_CHECK , JWARN, NELMIN , NELMAX,
67 . MY_SIZEC ,MY_SIZETG ,IERR ,
68 . SIZEC_P0(NSPMD), SIZETG_P0(NSPMD) ,ADRC(NSPMD) ,
72 INTEGER ,
DIMENSION(:),
ALLOCATABLE :: NELIDC ,NELIDTG,
73 . CLEFC ,CLEFTG ,INDXC ,INDXTG ,IDWARN ,NELIDCG ,
78 ALLOCATE( dynain_data%IPART_DYNAIN(npart))
79 dynain_data%IPART_DYNAIN(1:npart) = 0
80 IF (dynain_data%NDYNAINPRT /= 0)
THEN
81 DO i=1,dynain_data%NDYNAINPRT
82 READ(iin,
'(I10)') idprt
85 IF(ipart(4,j)==idprt)ip=j
88 CALL ancmsg(msgid=290,anmode=aninfo,i1=idprt)
91 dynain_data%IPART_DYNAIN(ip)=1
93 ELSEIF(dynain_data%NDYNAINALL /= 0)
THEN
95 dynain_data%IPART_DYNAIN(j) = 1
103 IF(dynain_data%DYNAIN_CHECK == 0.AND.(dynain_data%NDYNAINPRT /=0 .OR.dynain_data%NDYNAINALL /= 0) )
THEN
110 IF(numelc/=0)
ALLOCATE(nelidc(numelc),stat=ierr)
111 IF(numeltg/=0)
ALLOCATE(nelidtg(numeltg),stat=ierr)
113 IF(dynain_data%NDYNAINALL /= 0)
THEN
117 nelidc(i) = ixc(nixc,i)
123 nelidtg(neltg) = ixtg(nixtg,i)
132 IF(dynain_data%IPART_DYNAIN(ip)==1)
THEN
134 nelidc(nelc) = ixc(nixc,i)
140 IF(dynain_data%IPART_DYNAIN(ip)==1)
THEN
142 nelidtg(neltg) = ixtg(nixtg,i)
152 sizec_p0(1:nspmd) = 0
160 sizetg_p0(1:nspmd) = 0
171 adrc(i+1) = adrc(i) + sizec_p0(i)
172 nelcg = nelcg + sizec_p0(i)
174 nelcg = nelcg + sizec_p0(nspmd)
181 adrtg(i+1) = adrtg(i) + sizetg_p0(i)
182 neltgg = neltgg + sizetg_p0(i)
184 neltgg = neltgg + sizetg_p0(nspmd)
187 ALLOCATE(nelidcg(nelcg),stat=ierr)
188 ALLOCATE(nelidtgg(neltgg),stat=ierr)
202 ALLOCATE(nelidcg(nelcg),stat=ierr)
203 nelidcg(1:nelcg) = nelidc(1:nelc)
206 ALLOCATE(nelidtgg(neltgg),stat=ierr)
207 nelidtgg(1:neltgg) = nelidtg(1:neltg)
217 IF(nelcg/=0.AND.neltgg/=0) flg_chk = 1
219 IF(flg_chk > 0 )
THEN
223 ALLOCATE(clefc(nelcg),stat=ierr)
224 ALLOCATE(indxc(2*nelcg),stat=ierr)
230 CALL my_orders(0,work,clefc,indxc,nelcg,1)
232 ALLOCATE(cleftg(neltgg),stat=ierr)
233 ALLOCATE(indxtg(2*neltgg),stat=ierr)
237 cleftg(n)= nelidtgg(n)
240 CALL my_orders(0,work,cleftg,indxtg,neltgg,1)
242 IF(nelidtgg(indxtg(1))>=nelidcg(indxc(1)).AND.nelidtgg(indxtg(1))<=nelidcg(indxc(nelcg)))
THEN
246 IF(nelidtgg(indxtg(neltgg))>=nelidcg(indxc(1)).AND.nelidtgg(indxtg(neltgg))<=nelidcg(indxc(nelcg)))
THEN
250 IF(nelidcg(indxc(1))>=nelidtgg(indxtg(1)).AND.nelidcg(indxc(1))<=nelidtgg(indxtg(neltgg)))
THEN
254 IF(nelidcg(indxc(nelcg))>=nelidtgg(indxtg(1)).AND.nelidcg(indxc(nelcg))<=nelidtgg(indxtg(neltgg)))
THEN
258 IF(is_check == 1)
THEN
259 nelmin =
max(nelidcg(indxc(1)),nelidtgg(indxtg(1)))
260 nelmax =
min(nelidcg(indxc(nelcg)),nelidtgg(indxtg(neltgg)))
262 ALLOCATE(idwarn(
min(nelcg,neltgg)),stat=ierr)
266 IF(nelidcg(indxc(i))>=nelmin.AND.nelidcg(indxc(i))<=nelmax)
THEN
268 IF(nelidtgg(indxtg(j))>=nelmin.AND.nelidtgg(indxtg(j))<=nelmax)
THEN
269 IF(nelidcg(indxc(i))==nelidtgg(indxtg(j)))
THEN
271 idwarn(jwarn) = nelidcg(indxc(i))
280 .
' ** ERROR : DYNAIN FILE CAN NOT BE WRITTEN',
281 .
' THESE 4 NODE SHELLS AND 3 NODE SHELLS HAVE SAME USER ID'
282 WRITE(iout,*) idwarn(1:jwarn)
284 WRITE(istdo,
'(A,A,I10,A)')
285 .
' ** ERROR : DYNAIN FILE CAN NOT BE WRITTEN',
286 .
' 4 NODE SHELLS AND 3 NODE SHELLS MUST TO HAVE DIFFERENT USER ID',
295 DEALLOCATE(clefc,cleftg,indxc,indxtg)
300 IF(numelc/=0)
DEALLOCATE(nelidc,stat=ierr)
301 IF(numeltg/=0)
DEALLOCATE(nelidtg,stat=ierr)
302 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)