38
39
40
42 USE elbufdef_mod
43
44
45
46#include "implicit_f.inc"
47
48
49
50#include "com01_c.inc"
51#include "com08_c.inc"
52#include "param_c.inc"
53
54
55
56 INTEGER NE
57 INTEGER IPARG(NPARG,*), NELW(*) ,IXQ(NIXQ,*),
58 . (*), IAD_ELEM(2,*), FR_ELEM(*)
60 . pm(npropm,*), x(3,*),e(*),
61 . temp,tstif
62 TYPE(ELBUF_STRUCT_), TARGET, DIMENSION(NGROUP) :: ELBUF_TAB
63
64
65
66 INTEGER I, II, N1, N2, IE, NG, MAT, IFA, LENR,
67 . IFACE(2,4)
69 . y1, y2, y3, y4, z1, z2, z3, z4,
70 . ny, nz, dy, dz, dd, grad, phi, tempe, vol,
71 . tstife, coef,ee
72 INTEGER :: LLT ,NFT ,MTN ,IAD ,ITY ,NPT ,JALE ,ISMSTR ,JEUL ,JTUR ,JTHE ,JLAG ,JMULT ,JHBE
73 INTEGER :: JIVF, NVAUX, JPOR, JCVT, JCLOSE, JPLASOL, IREP, IINT, IGTYP
74 INTEGER :: ISORTH, ISORTHG, ISRAT, ISROT, ICSEN, IFAILURE, JSMS
75
76
77 TYPE(G_BUFEL_) ,POINTER :: GBUF
78
79 DATA iface/ 2, 3, 3, 4, 4, 5, 5, 2/
80
81
82
83
84 i = 0
85 DO 100 ie=1,ne
86 ii = nelw(ie)/10
87 ifa = nelw(ie) - 10*ii
88 n1 = ixq(
iface(1,ifa),ii)
89 n2 = ixq(
iface(2,ifa),ii)
90 IF(ntag(n1)>0) ntag(n1) = ntag(n1) + 1
91 IF(ntag(n2)>0) ntag(n2) = ntag(n2) + 1
92 100 CONTINUE
93
94
95
96 IF(nspmd>1)THEN
97 lenr = iad_elem(1,nspmd+1)-iad_elem(1,1)
99 END IF
100
101
102
103 DO 600 ie=1,ne
104 ii = nelw(ie)/10
105 ifa = nelw(ie)-10*ii
106 n1 = ixq(
iface(1,ifa),ii)
107 n2 = ixq(
iface(2,ifa),ii)
108 IF(ntag(n1)+ntag(n2)>0)THEN
109
110
111
112 DO 200 ng=ii/nvsiz,ngroup
114 2 mtn ,llt ,nft ,iad ,ity ,
115 3 npt ,jale ,ismstr ,jeul ,jtur ,
116 4 jthe ,jlag ,jmult ,jhbe ,jivf ,
117 5 nvaux ,jpor ,jcvt ,jclose ,jplasol ,
118 6 irep ,iint ,igtyp ,israt ,isrot ,
119 7 icsen ,isorth ,isorthg ,ifailure,jsms )
120 IF(ity/=2) GO TO 200
121 IF(ii>nft+llt) GO TO 200
122 IF(iparg(8,ng)==1) GO TO 600
123 IF(jthe/=1) GO TO 600
124 i = ii - nft
125 GOTO 250
126 200 CONTINUE
127 250 CONTINUE
128
129 gbuf => elbuf_tab(ng)%GBUF
130
131 vol = gbuf%VOL(i)
132 tempe= gbuf%TEMP(i)
133
134 ee = zero
135 phi = zero
136
137
138
139 IF(ntag(n1)>1) ee = ee + e(n1) / (ntag(n1)-1)
140 IF(ntag(n2)>1) ee = ee + e(n2) / (ntag(n2)-1)
141
142
143
144 y1=x(2,n1)
145 z1=x(3,n1)
146
147 y2=x(2,n2)
148 z2=x(3,n2)
149
150
151
152 ny= (z2-z1)
153 nz=-(y2-y1)
154
155
156
157 dy = two*(y1 + y2)
158 . -x(2,ixq(2,ii))-x(2,ixq(3,ii))
159 . -x(2,ixq(4,ii))-x(2,ixq(5,ii))
160
161 dz = two*(z1 + z2)
162 . -x(3,ixq(2,ii))-x(3,ixq(3,ii))
163 . -x(3,ixq(4,ii))-x(3,ixq(5,ii))
164
165 dd= dy**2+dz**2
166
167
168
169 grad = four*(dy*ny+dz*nz) /
max(em15,dd)
170 mat =ixq(1,ie)
171 IF(tempe<=pm(80,mat))THEN
172 coef=pm(75,mat)+pm(76,mat)*tempe
173 ELSE
174 coef=pm(77,mat)+pm(78,mat)*tempe
175 ENDIF
176 tstife = coef * grad
177
178
179
180 phi = tstife*tstif*(temp-tempe)
181 2 /
max(em20,(tstife+tstif))
182 phi = phi * dt1
183 + * (
min(ntag(n1),1) +
min(ntag(n2),1) )
184 + / two
185
186
187
188 phi = (phi + ee) /
max(vol,em20)
189 gbuf%EINT(i) = gbuf%EINT(i) + phi
190 ENDIF
191 600 CONTINUE
192
193 RETURN
integer function iface(ip, n)
subroutine initbuf(iparg, ng, mtn, llt, nft, iad, ity, npt, jale, ismstr, jeul, jtur, jthe, jlag, jmult, jhbe, jivf, mid, jpor, jcvt, jclose, jpla, irep, iint, igtyp, israt, isrot, icsen, isorth, isorthg, ifailure, jsms)
subroutine spmd_extag(ntag, iad_elem, fr_elem, lenr)