35 SUBROUTINE iniebcs(ALE_CONNECTIVITY, IFLAG,IGRSURF, IXS, IXQ, IXTG,
36 . PM, IGEO, X, SENSORS, IVOLU, MULTI_FVM_IS_USED, EBCS_TAB, EBCS_TAG_CELL_SPMD)
49#include "implicit_f.inc"
56#include "tabsiz_c.inc"
61 INTEGER,
INTENT(IN),
TARGET :: IXS(NIXS,SIXS/NIXS),IXQ(NIXQ,SIXQ/NIXQ),IXTG(NIXTG,SIXTG/NIXTG)
62 INTEGER,
INTENT(IN) :: IVOLU(NIMV,*)
63 LOGICAL,
INTENT(IN) :: MULTI_FVM_IS_USED
64 INTEGER,
INTENT(INOUT) :: EBCS_TAG_CELL_SPMD(NUMELQ+NUMELTG+NUMELS)
65 my_real,
INTENT(IN) :: pm(npropm,nummat),x(sx)
66 TYPE (SURF_) ,
DIMENSION(NSURF) :: IGRSURF
67 TYPE(t_ebcs_tab),
TARGET,
INTENT(INOUT) :: EBCS_TAB
68 INTEGER,
INTENT(IN) :: IFLAG, IGEO(NPROPGI,NUMGEO)
69 TYPE (SENSORS_) ,
INTENT(IN) :: SENSORS
73 INTEGER,
DIMENSION(:),
ALLOCATABLE :: MWA
74 INTEGER I,TYP,ID,ISU,NSEG,IDSU,K1,SENS,VOLU,J,KK,LENMWA,ERR,ICELL
76 class(t_ebcs),
POINTER :: ebcs
77 INTEGER :: JALE_FROM_MAT, JALE_FROM_PROP, IS_ALE_EULER
79 INTEGER,
DIMENSION(:, :),
POINTER :: IX
81 integer,
target :: nothing(1,1)
83 ebcs_tag_cell_spmd(1:numelq+numeltg+numels)=0
88 lenmwa = numnod+2+8*numels
89 ALLOCATE(mwa(lenmwa), stat=err)
91 CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'EBCS')
93 CALL icinvs(8, numels, nixs, ixs, mwa, mwa(1+(2+numnod)))
94 ix => ixs(1:nixs, 1:numels)
96 ELSEIF (numelq /= 0)
THEN
97 lenmwa = numnod + 2 + 4 * numelq
98 ALLOCATE(mwa(lenmwa), stat=err)
100 CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'EBCS')
102 CALL icinvs(4, numelq, nixq, ixq, mwa, mwa(1+(2+numnod)))
103 ix => ixq(1:nixq, 1:numelq)
105 ELSEIF (numeltg /= 0 .AND. multi_fvm_is_used)
THEN
106 lenmwa = numnod + 2 + 3 * numeltg
107 ALLOCATE(mwa(lenmwa), stat=err)
109 CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'EBCS')
111 CALL icinvs(3, numeltg, nixtg, ixtg, mwa, mwa(1+(2+numnod)))
112 ix => ixtg(1:nixtg, 1:numeltg)
117 ebcs => ebcs_tab%tab(i)%poly
123 TYPE IS (t_ebcs_gradp0)
125 ebcs%has_vold = .true.
126 IF(iflag==0)
ALLOCATE(ebcs%vold(ebcs%nb_node))
127 ebcs%vold(1:ebcs%nb_node) = zero
129 ebcs%has_pold = .true.
130 IF(iflag==0)
ALLOCATE(ebcs%pold(ebcs%nb_node))
131 ebcs%pold(1:ebcs%nb_node) = zero
134 IF(iflag==0)
ALLOCATE(ebcs%p0(ebcs%nb_node))
135 ebcs%p0(1:ebcs%nb_node) = zero
137 ebcs%has_iface = .true.
138 IF(iflag==0)
ALLOCATE(ebcs%iface(ebcs%nb_elem))
139 ebcs%iface(1:ebcs%nb_elem) = 0
142 IF(iflag==0)
ALLOCATE(ebcs%la(3, ebcs%nb_node))
143 ebcs%la(1:3, 1:ebcs%nb_node) = zero
144 TYPE IS (t_ebcs_iniv)
146 ebcs%has_reso = .true.
147 IF(iflag==0)
ALLOCATE(ebcs%reso(3, ebcs%nb_node))
148 ebcs%reso(1:3, 1:ebcs%nb_node) = zero
150 ebcs%has_ro0 = .true.
151 IF(iflag==0)
ALLOCATE(ebcs%ro0(ebcs%nb_elem))
152 ebcs%ro0(1:ebcs%nb_elem) = zero
154 ebcs%has_en0 = .true.
155 IF(iflag==0)
ALLOCATE(ebcs%en0(ebcs%nb_elem))
156 ebcs%en0(1:ebcs%nb_elem) = zero
159 IF(iflag==0)
ALLOCATE(ebcs%v0(3, ebcs%nb_node))
160 ebcs%v0(1:3, 1:ebcs%nb_node) = zero
163 IF(iflag==0)
ALLOCATE(ebcs%la(3, ebcs%nb_node))
164 ebcs%la(1:3, 1:ebcs%nb_node) = zero
165 TYPE IS (t_ebcs_pres)
167 ebcs%has_vold = .true.
168 IF(iflag==0)
ALLOCATE(ebcs%vold(ebcs%nb_node))
169 ebcs%vold(1:ebcs%nb_node) = zero
171 ebcs%has_pold = .true.
172 IF(iflag==0)
ALLOCATE(ebcs%pold(ebcs%nb_node))
173 ebcs%pold(1:ebcs%nb_node) = zero
176 IF(iflag==0)
ALLOCATE(ebcs%la(3, ebcs%nb_node))
177 ebcs%la(1:3, 1:ebcs%nb_node) = zero
178 TYPE IS (t_ebcs_valvin)
180 ebcs%has_vold = .true.
181 IF(iflag==0)
ALLOCATE(ebcs%vold(ebcs%nb_node))
182 ebcs%vold(1:ebcs%nb_node) = zero
184 ebcs%has_pold = .true.
185 IF(iflag==0)
ALLOCATE(ebcs%pold(ebcs%nb_node)
186 ebcs%pold(1:ebcs%nb_node) = zero
189 IF(iflag==0)
ALLOCATE(ebcs%la(3, ebcs%nb_node))
190 ebcs%la(1:3, 1:ebcs%nb_node) = zero
191 TYPE IS (t_ebcs_valvout)
193 ebcs%has_vold = .true.
194 IF(iflag==0)
ALLOCATE(ebcs%vold(ebcs%nb_node))
195 ebcs%vold(1:ebcs%nb_node) = zero
197 ebcs%has_pold = .true.
198 IF(iflag==0)
ALLOCATE(ebcs%pold(ebcs%nb_node))
199 ebcs%pold(1:ebcs%nb_node) = zero
202 IF(iflag==0)
ALLOCATE(ebcs%la(3, ebcs%nb_node))
203 ebcs%la(1:3, 1:ebcs%nb_node) = zero
206 ebcs%has_reso = .true.
207 IF(iflag==0)
ALLOCATE(ebcs%reso(3, ebcs%nb_node))
208 ebcs%reso(1:3, 1:ebcs%nb_node) = zero
211 IF(iflag==0)
ALLOCATE(ebcs%la(3, ebcs%nb_node))
212 ebcs%la(1:3, 1:ebcs%nb_node) = zero
213 TYPE IS(t_ebcs_normv)
215 ebcs%has_reso = .true.
216 IF(iflag==0)
ALLOCATE(ebcs%reso(3, ebcs%nb_node))
217 ebcs%reso(1:3, 1:ebcs%nb_node) = zero
220 IF(iflag==0)
ALLOCATE(ebcs%la(3, ebcs%nb_node))
221 ebcs%la(1:3, 1:ebcs%nb_node) = zero
222 TYPE IS (t_ebcs_inip)
224 ebcs%has_ro0 = .true.
225 IF(iflag==0)
ALLOCATE(ebcs%ro0(ebcs%nb_elem))
226 ebcs%ro0(1:ebcs%nb_elem) = zero
228 ebcs%has_en0 = .true.
229 IF(iflag==0)
ALLOCATE(ebcs%en0(ebcs%nb_elem))
230 ebcs%en0(1:ebcs%nb_elem) = zero
233 IF(iflag==0)
ALLOCATE(ebcs%p0(ebcs%nb_node))
234 ebcs%p0(1:ebcs%nb_node) = zero
236 ebcs%has_vold = .true.
237 IF(iflag==0)
ALLOCATE(ebcs%vold(ebcs%nb_node))
238 ebcs%vold(1:ebcs%nb_node) = zero
240 ebcs%has_pold = .true.
241 IF(iflag==0)
ALLOCATE(ebcs%pold(ebcs%nb_node))
242 ebcs%pold(1:ebcs%nb_node) = zero
245 IF(iflag==0)
ALLOCATE(ebcs%la(3, ebcs%nb_node))
246 ebcs%la(1:3, 1:ebcs%nb_node) = zero
247 TYPE IS (t_ebcs_monvol)
248 volu = ebcs%monvol_id
249 sens = ebcs%sensor_id
251 IF (volu == ivolu(1,j))
THEN
253 ebcs%monvol_id = volu
257 DO j = 1, sensors%NSENSOR
258 IF (sens == sensors%SENSOR_TAB(j)%SENS_ID)
THEN
259 ebcs%monvol_id = sens
263 TYPE IS (t_ebcs_inlet)
264 ebcs%has_iface = .true.
265 IF(iflag==0)
ALLOCATE(ebcs%iface(ebcs%nb_elem))
266 ebcs%iface(1:ebcs%nb_elem) = 0
267 TYPE IS (t_ebcs_fluxout)
268 ebcs%has_iface = .true.
269 IF(iflag==0)
ALLOCATE(ebcs%iface(ebcs%nb_elem))
270 ebcs%iface(1:ebcs%nb_elem) = 0
272 IF(ebcs%is_multifluid)
THEN
278 ebcs%has_iface = .true.
279 IF(iflag==0)
ALLOCATE(ebcs%iface(nseg))
280 ebcs%iface(1:nseg) = 0
282 ebcs%has_vold = .true.
283 IF(iflag==0)
ALLOCATE(ebcs%vold(siz))
286 ebcs%has_Pold = .true.
287 IF(iflag==0)
ALLOCATE(ebcs%Pold(siz))
291 IF(iflag==0)
ALLOCATE(ebcs%la(3, ebcs%nb_node))
292 ebcs%la(1:3, 1:ebcs%nb_node) = zero
294 ebcs%has_dp0 = .true.
295 IF(iflag==0)
ALLOCATE(ebcs%dp0(nseg))
296 ebcs%dp0(1:nseg) = zero
298 TYPE IS (t_ebcs_propellant)
299 IF(ebcs%is_multifluid)
THEN
305 ebcs%has_iface = .true.
306 IF(iflag==0)
ALLOCATE(ebcs%iface(nseg))
307 ebcs%iface(1:nseg) = 0
309 ebcs%has_vold = .true.
310 IF(iflag==0)
ALLOCATE(ebcs%vold(siz))
313 ebcs%has_Pold = .true.
314 IF(iflag==0)
ALLOCATE(ebcs%Pold(siz))
318 IF(iflag==0)
ALLOCATE(ebcs%la(3, ebcs%nb_node))
319 ebcs%la(1:3, 1:ebcs%nb_node) = zero
321 ebcs%has_dp0 = .true.
322 IF(iflag==0)
ALLOCATE(ebcs%dp0(nseg))
323 ebcs%dp0(1:nseg) = zero
328 idsu = igrsurf(isu)%ID
330 CALL findele(ale_connectivity, 8, nixs, idsu,id,nseg,ixs,
331 . ebcs%iseg, ebcs%ielem, ebcs%itype,ebcs%iface,
332 . igrsurf(isu)%NODES,mwa,mwa(1+(2+numnod)),pm,x,typ,igeo)
333 ELSEIF (numelq /= 0)
THEN
334 CALL findele(ale_connectivity, 4, nixq, idsu,id,nseg,ixq,
335 . ebcs%iseg, ebcs%ielem,ebcs%itype, ebcs%iface,
336 . igrsurf(isu)%NODES,mwa,mwa(1+(2+numnod)),pm,x,typ,igeo)
337 ELSEIF (numeltg /= 0 .AND. multi_fvm_is_used)
THEN
338 CALL findele(ale_connectivity, 3, nixtg, idsu,id,nseg,ixtg,
339 . ebcs%iseg, ebcs%ielem,ebcs%itype, ebcs%iface,
340 . igrsurf(isu)%NODES,mwa,mwa(1+(2+numnod)),pm,x,typ,igeo)
343 IF(.NOT.ebcs%is_multifluid .AND. (typ == 0 .OR. typ == 10 .OR. typ == 11))
THEN
347 icell = ebcs%ielem(kk)
349 IF (ebcs%itype(kk)==4)k1=0
350 IF (ebcs%itype(kk)==3)k1=numelq
351 IF (ebcs%itype(kk)==8)k1=numelq+numeltg
352 IF(typ/=10 .AND. typ /= 11) ebcs_tag_cell_spmd
360 icell = ebcs%IELEM(kk)
363 jale_from_mat = int(pm(72,imid))
364 jale_from_prop = igeo(62,ipid)
365 is_ale_euler = jale_from_mat + jale_from_prop
366 IF(is_ale_euler == 0 .AND. iflag == 0)
THEN
368 CALL ancmsg(msgid=1602,msgtype=msgerror,anmode=aninfo,i1 = ebcs%ebcs_id,c1 = trim(ebcs%title),
369 . c2 =
"EBCS ARE ONLY COMPATIBLE WITH ALE OR EULER FRAMEWORK")
379 IF (
ALLOCATED(mwa))
DEALLOCATE(mwa)
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)