41
42
43
44
45
51
52
53
54#include "implicit_f.inc"
55
56
57
58#include "com04_c.inc"
59#include "com09_c.inc"
60#include "units_c.inc"
61
62
63
64 INTEGER,INTENT(IN) :: SITAB,SITABM1,NPARI,NPARIR,SISKWN,LISKN
65 INTEGER ISU1,ISU2,NOINT
66 INTEGER IPARI(NPARI),ISKN(LISKN,SISKWN/LISKN),ITAB(SITAB),ITABM1(SITABM1)
69 TYPE(SUBMODEL_DATA),INTENT(IN) :: LSUBMODEL(NSUBMOD)
70 TYPE (UNIT_TYPE_),INTENT(IN) :: UNITAB
71
72 TYPE (SURF_) ,TARGET , DIMENSION(NSURF) :: IGRSURF
73
74
75
76 INTEGER J, NTYP,IS1, IS2,IGSTI,ILEV,ITIED,HIERA,
77 . BCOPT,ISKEW,ICENTER
79 . fric,gap,startt,stopt,bid,xc,yc,zc,xr,yr,zr,teta,
80 . xt,yt,zt
81 CHARACTER(LEN=40)::MESS
82
83 INTEGER, DIMENSION(:), POINTER :: INGR2USR
84 LOGICAL IS_AVAILABLE
85
86
87
88 INTEGER ,NGR2USR
89
90
91
92
93
94
95 is1=0
96 is2=0
97 igsti=0
98 ilev= 0
99 hiera=0
100 bcopt=0
101
102 fric = zero
103 gap = zero
104 startt = zero
105 stopt=ep30
106
107
108 ntyp = 12
109 ipari(15)=noint
110 ipari(7)=ntyp
111
112 is_available=.false.
113
114
115
116
117
118 CALL hm_get_intv(
'secondaryentityids', isu1, is_available, lsubmodel)
119 CALL hm_get_intv(
'mainentityids', isu2, is_available, lsubmodel)
120 CALL hm_get_intv(
'type12_interpol', ilev, is_available, lsubmodel)
121 igsti=0
122 hiera=0
123
124
125
126 is1=1
127 is2=1
128 ingr2usr => igrsurf(1:nsurf)%ID
129 isu1=
ngr2usr(isu1,ingr2usr,nsurf)
130 isu2=
ngr2usr(isu2,ingr2usr,nsurf)
131
132
133 ipari(45)=isu1
134 ipari(46)=isu2
135 ipari(13)=is1*10+is2
136
137
138
139
140 CALL hm_get_floatv(
'type12_tol', gap, is_available, lsubmodel, unitab)
141 bid=zero
142 startt=zero
143 stopt=zero
144
145
146
147 IF(gap==0.)gap=two*em02
148
149
150
151 CALL hm_get_intv(
'type12_itied', itied, is_available, lsubmodel)
152 CALL hm_get_intv(
'type12_bcopt', bcopt, is_available, lsubmodel)
153 CALL hm_get_intv(
'SKEW_CSID', iskew, is_available, lsubmodel)
154 CALL hm_get_intv(
'Node_C', icenter, is_available, lsubmodel)
155
156
157
158 IF(hiera==0)hiera=itied+1
159 IF(bcopt==0)bcopt=2
160 ipari(26)=hiera
161 nhin2=
max(nhin2,hiera)
162
163 ipari(11)=bcopt
164
165
166
167
168 IF(itied==2)THEN
169 CALL hm_get_floatv(
'type12_Xc', xc, is_available, lsubmodel, unitab)
171 CALL hm_get_floatv(
'type12_Zc', zc, is_available, lsubmodel, unitab)
172
173 CALL hm_get_floatv(
'type12_XN', xr, is_available, lsubmodel, unitab)
174 CALL hm_get_floatv(
'type12_YN', yr, is_available, lsubmodel, unitab)
175 CALL hm_get_floatv(
'type12_ZN', zr, is_available, lsubmodel, unitab)
176 CALL hm_get_floatv(
'type12_theta', teta, is_available, lsubmodel, unitab)
177
178 CALL hm_get_floatv(
'type12_XT', xt, is_available, lsubmodel, unitab)
179 CALL hm_get_floatv(
'type12_YT', yt, is_available, lsubmodel, unitab)
180 CALL hm_get_floatv(
'type12_ZT', zt, is_available, lsubmodel, unitab)
181
182 ENDIF
183
184
185 frigap(3)=startt
186 IF (stopt == zero) stopt = ep30
187 frigap(11)=stopt
188
189
190
191
192
193 IF (stfac == zero) stfac = one_fifth
194 frigap(1)=itied+0.1
195 frigap(2)=gap
196
197
198 IF(itied==2) THEN
199 frigap(4)=teta
200 frigap(5)=xt
201 frigap(6)=yt
202 frigap(7)=zt
203 frigap(8)=xc
204 frigap(9)=yc
205 frigap(10)=zc
206 frigap(12)=xr
207 frigap(13)=yr
208 frigap(14)=zr
209 ELSE
210 ipari(20)=ilev
211 ipari(21)=0
212 IF(icenter>0)THEN
213 ipari(22)=
usr2sys(icenter,itabm1,mess,ipari(15))
214 ELSE
215 ipari(22)=0
216 ENDIF
217 IF(ilev==1)THEN
218 IF(iskew>0)THEN
219 DO 640 j=0,numskw
220 IF(iskew==iskn(4,j+1)) THEN
221 iskew=j
222 GO TO 660
223 ENDIF
224 640 CONTINUE
225 WRITE(istdo,641)
226 WRITE(iout,641)
227 641 FORMAT(' ** ERROR INTERF TYPE 12 WRONG SKEW SYSTEM NUMBER')
228 ierr=ierr+1
229 660 CONTINUE
230 IF(iskn(1,j+1)==0)THEN
231 WRITE(istdo,'(a)')'** WARNING INTERFACE 12'
232 iwarn=iwarn+1
233 WRITE(iout,642) icenter
234 642 FORMAT(' ** INTERF TYPE 12 SKEW SYSTEM IS FIXED,',
235 & ' USING CENTER NODE', i8,
236 & ' AND SKEW AXIS 1 FOR POLAR COORDINATE SYSTEM')
237 ELSE
238 icenter=itab(iskn(1,j+1))
239 ipari(22)=iskn(1,j+1)
240 ENDIF
241 ELSE
242 WRITE(istdo,'(a)')'** WARNING INTERFACE 12'
243 iwarn=iwarn+1
244 WRITE(iout,643)
245 643 FORMAT(' ** INTERF TYPE 12, USING ORIGIN AND X-AXIS',
246 & ' FOR POLAR COORDINATE SYSTEM')
247 ENDIF
248 ipari(21)=iskew
249 ENDIF
250 ENDIF
251
252
253
254
255
256
257 WRITE(iout,1512)gap,itied,ipari(11)
258 IF(ipari(20)==1)WRITE(iout,2512)ipari(21),icenter
259 IF(ipari(20)==2)WRITE(iout,2513)ipari(21)
260 IF(itied==2) WRITE(iout,1513)xt,yt,zt,xc,yc,zc,xr,yr,zr,teta
261
262
263 IF(is1==0)THEN
264 WRITE(iout,'(6X,A)')'NO SECONDARY SURFACE INPUT'
265 ELSEIF(is1==1)THEN
266 WRITE(iout,'(6X,A)')'SECONDARY SURFACE INPUT BY SEGMENTS'
267 ELSEIF(is1==2)THEN
268 WRITE(iout,'(6X,A)')'SECONDARY SURFACE INPUT BY NODES'
269 ELSEIF(is1==3)THEN
270 WRITE(iout,'(6X,A)')'SECONDARY SURFACE INPUT BY SEGMENTS'
271 ELSEIF(is1==4 )THEN
272 WRITE(iout,'(6X,A)')'SECONDARY SIDE INPUT BY BRICKS'
273 ELSEIF(is1==5 )THEN
274 WRITE(iout,'(6x,a)')'secondary side input by solid elements'
275 ENDIF
276 IF(IS2==0)THEN
277 WRITE(IOUT,'(6x,a)
')'no
main surface input
'
278 ELSEIF(IS2==1)THEN
279 WRITE(IOUT,'(6x,a)
')'main surface input by segments
'
280 ELSEIF(IS2==2)THEN
281 WRITE(IOUT,'(6x,a)
')'main surface input by nodes
'
282 ELSEIF(IS2==3)THEN
283 WRITE(IOUT,'(6x,a)
')'main surface input by segments
'
284 ELSEIF(IS2==4)THEN
285 WRITE(IOUT,'(6x,a)
')'main surface refers
',
286 . 'to hyper-ellipsoidal surface'
287 ENDIF
288
289
290
291 RETURN
292
293
294 1512 FORMAT(//
295 . ' type==12 fluid/fluid INTERFACE ' //,
296 . ' tolerance to find
main segment . . . . .
',1PG20.13/,
297 . ' itied . . . . . . . . . . . . . . . . . . . ',I1/,
298 . ' 0: sliding(novoid)'/,
299 . ' 1: tied '/,
300 . ' 2: periodic boundary condition '/,
301 . ' 3: sliding no flux '/,
302 . ' bccod(default 2) . . . . . . . . . . . . . ',I1/,
303 . ' 1: normal check '/,
304 . ' 2: secondary deactivation(rby & inter type2) '/,
305 . ' 3: secondary deactivation(b.c., rby & inter type2)'/)
306
307 1513 FORMAT(
308 . ' translation vector xt . . . . . . . . . . ',1PG20.13/,
309 . ' yt . . . . . . . . . . ',1PG20.13/,
310 . ' zt . . . . . . . . . . ',1PG20.13/,
311 . ' rotation center xc . . . . . . . . . . ',1PG20.13/,
312 . ' yc . . . . . . . . . . ',1PG20.13/,
313 . ' zc . . . . . . . . . . ',1PG20.13/,
314 . ' rotation vector xr . . . . . . . . . . ',1PG20.13/,
315 . ' yr . . . . . . . . . . ',1PG20.13/,
316 . ' zr . . . . . . . . . . ',1PG20.13/,
317 . ' rotation angle teta . . . . . . . . . . ',1PG20.13/)
318
319 2512 FORMAT( ' polar interpolation : skew system number . ',I10/,
320 . ' center node . . . . . . . . . . . . . . . . ',I10/)
321 2513 FORMAT( ' spherical interpolation : center node . . . ',I10/)
322
323
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
integer, parameter nchartitle
integer, parameter ncharkey
integer, parameter ncharfield
integer function ngr2usr(iu, igr, ngr)
int main(int argc, char *argv[])
integer function usr2sys(iu, itabm1, mess, id)