OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
ebcs_main.F
Go to the documentation of this file.
1Copyright> OpenRadioss
2Copyright> Copyright (C) 1986-2025 Altair Engineering Inc.
3Copyright>
4Copyright> This program is free software: you can redistribute it and/or modify
5Copyright> it under the terms of the GNU Affero General Public License as published by
6Copyright> the Free Software Foundation, either version 3 of the License, or
7Copyright> (at your option) any later version.
8Copyright>
9Copyright> This program is distributed in the hope that it will be useful,
10Copyright> but WITHOUT ANY WARRANTY; without even the implied warranty of
11Copyright> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12Copyright> GNU Affero General Public License for more details.
13Copyright>
14Copyright> You should have received a copy of the GNU Affero General Public License
15Copyright> along with this program. If not, see <https://www.gnu.org/licenses/>.
16Copyright>
17Copyright>
18Copyright> Commercial Alternative: Altair Radioss Software
19Copyright>
20Copyright> As an alternative to this open-source version, Altair also offers Altair Radioss
21Copyright> software under a commercial license. Contact Altair to discuss further if the
22Copyright> commercial version may interest you: https://www.altair.com/radioss/.
23!||====================================================================
24!|| ebcs_main ../engine/source/boundary_conditions/ebcs/ebcs_main.F
25!||--- called by ------------------------------------------------------
26!|| alemain ../engine/source/ale/alemain.F
27!||--- calls -----------------------------------------------------
28!|| ebcs0_gradp0 ../engine/source/boundary_conditions/ebcs/ebcs0_gradp0.F
29!|| ebcs10_nrf ../engine/source/boundary_conditions/ebcs/ebcs10_nrf.F
30!|| ebcs11_propellant ../engine/source/boundary_conditions/ebcs/ebcs11_propellant.F90
31!|| ebcs123_pres ../engine/source/boundary_conditions/ebcs/ebcs123_pres.F
32!|| ebcs12_cyclic ../engine/source/boundary_conditions/ebcs/ebcs12_cyclic.F90
33!|| ebcs4_vel ../engine/source/boundary_conditions/ebcs/ebcs4_vel.F
34!|| ebcs5_normv ../engine/source/boundary_conditions/ebcs/ebcs5_normv.F
35!|| ebcs6_inip ../engine/source/boundary_conditions/ebcs/ebcs6_inip.F
36!|| ebcs7_iniv ../engine/source/boundary_conditions/ebcs/ebcs7_iniv.F
37!|| ebcs8_inlet ../engine/source/boundary_conditions/ebcs/ebcs8_inlet.F90
38!|| ebcs_vol2seg ../engine/source/boundary_conditions/ebcs/ebcs_vol2seg.F
39!||--- uses -----------------------------------------------------
40!|| ebcs0_gradp0_mod ../engine/source/boundary_conditions/ebcs/ebcs0_gradp0.F
41!|| ebcs10_nrf_mod ../engine/source/boundary_conditions/ebcs/ebcs10_nrf.F
42!|| ebcs11_propellant_mod ../engine/source/boundary_conditions/ebcs/ebcs11_propellant.F90
43!|| ebcs123_pres_mod ../engine/source/boundary_conditions/ebcs/ebcs123_pres.F
44!|| ebcs12_cyclic_mod ../engine/source/boundary_conditions/ebcs/ebcs12_cyclic.F90
45!|| ebcs4_vel_mod ../engine/source/boundary_conditions/ebcs/ebcs4_vel.F
46!|| ebcs5_normv_mod ../engine/source/boundary_conditions/ebcs/ebcs5_normv.F
47!|| ebcs6_inip_mod ../engine/source/boundary_conditions/ebcs/ebcs6_inip.F
48!|| ebcs7_iniv_mod ../engine/source/boundary_conditions/ebcs/ebcs7_iniv.F
49!|| ebcs8_inlet_mod ../engine/source/boundary_conditions/ebcs/ebcs8_inlet.F90
50!|| ebcs_mod ../common_source/modules/boundary_conditions/ebcs_mod.F90
51!|| elbufdef_mod ../common_source/modules/mat_elem/elbufdef_mod.F90
52!|| element_mod ../common_source/modules/elements/element_mod.F90
53!|| groupdef_mod ../common_source/modules/groupdef_mod.F
54!|| matparam_def_mod ../common_source/modules/mat_elem/matparam_def_mod.F90
55!|| multi_fvm_mod ../common_source/modules/ale/multi_fvm_mod.F90
56!|| output_mod ../common_source/modules/output/output_mod.F90
57!|| python_funct_mod ../common_source/modules/python_mod.F90
58!|| segvar_mod ../engine/share/modules/segvar_mod.F
59!|| sensor_mod ../common_source/modules/sensor_mod.F90
60!|| th_surf_mod ../common_source/modules/interfaces/th_surf_mod.F
61!||====================================================================
62 SUBROUTINE ebcs_main(IGRSURF,SEGVAR,VOLMON,A,V,W,X,
63 . FSAV,FV,MS,STIFN,IPARG,ELBUF_TAB,EBCS_TAB,MULTI_FVM,IXQ,IXS,IXTG,
64 . FSKY,FSAVSURF,TIME,DT1,
65 . NSENSOR,SENSOR_TAB,PYTHON,
66 . NPC, TF ,SNPC, STF, OUTPUT, MATPARAM, PM,
67 . BUFMAT)
68C-----------------------------------------------
69C M o d u l e s
70C-----------------------------------------------
71 USE segvar_mod, ONLY : t_segvar
72 USE elbufdef_mod
73 USE groupdef_mod
74 USE ebcs_mod
75 USE multi_fvm_mod , only : multi_fvm_struct
77 USE sensor_mod, ONLY : sensor_str_
78 USE python_funct_mod
79 USE output_mod , only : output_
80 USE matparam_def_mod, ONLY : matparam_struct_
83 USE ebcs4_vel_mod , ONLY : ebcs4_vel
84 USE ebcs5_normv_mod , ONLY : ebcs5_normv
85 USE ebcs6_inip_mod , ONLY : ebcs6_inip
86 USE ebcs7_iniv_mod , ONLY : ebcs7_iniv
87 USE ebcs8_inlet_mod , ONLY : ebcs8_inlet
88 USE ebcs10_nrf_mod , ONLY : ebcs10_nrf
89 USE ebcs11_propellant_mod , ONLY : ebcs11_propellant
90 USE ebcs12_cyclic_mod , ONLY : ebcs12_cyclic
91 use element_mod , only : nixs,nixq,nixtg
92C-----------------------------------------------
93C I m p l i c i t T y p e s
94C-----------------------------------------------
95#include "implicit_f.inc"
96C-----------------------------------------------
97C C o m m o n B l o c k s
98C-----------------------------------------------
99#include "param_c.inc"
100#include "com01_c.inc"
101#include "com04_c.inc"
102#include "parit_c.inc"
103C-----------------------------------------------
104C D u m m y A r g u m e n t s
105C-----------------------------------------------
106 my_real,INTENT(IN) :: dt1 !time step
107 my_real,INTENT(IN) :: time !simulation time
108 my_real,INTENT(INOUT) :: fsavsurf(th_surf_num_channel,nsurf)
109 INTEGER IPARG(NPARG,NGROUP)
110 INTEGER,INTENT(IN) :: IXQ(NIXQ,NUMELQ),IXS(NIXS,NUMELS),IXTG(NIXTG,NUMELTG)
111 my_real volmon(*),v(3,numnod),w(3,numnod),a(3,numnod),x(3,numnod),fsav(nthvki,*),fv(*),stifn(numnod)
112 my_real,intent(inout) :: ms(numnod)
113 TYPE(elbuf_struct_), DIMENSION(NGROUP) :: ELBUF_TAB
114 TYPE (SURF_) , DIMENSION(NSURF) :: IGRSURF
115 TYPE(t_ebcs_tab), TARGET, INTENT(INOUT) :: EBCS_TAB
116 TYPE(multi_fvm_struct),INTENT(IN) :: MULTI_FVM
117 my_real, DIMENSION(8,LSKY), INTENT(INOUT) :: fsky ! acceleration array for parith/on option
118 INTEGER,INTENT(IN) :: NSENSOR
119 TYPE (sensor_str_) ,DIMENSION(NSENSOR) ,INTENT(IN) :: sensor_tab
120 TYPE (PYTHON_), INTENT(IN) :: PYTHON
121 INTEGER,INTENT(IN) :: SNPC, STF
122 INTEGER,INTENT(IN) :: NPC(SNPC)
123 my_real :: tf(stf)
124 TYPE(t_segvar) :: SEGVAR
125 TYPE(output_), INTENT(INOUT) :: OUTPUT !< output structure
126 TYPE(matparam_struct_),DIMENSION(NUMMAT),INTENT(IN) :: MATPARAM !< material buffer
127 my_real,INTENT(IN) :: pm(npropm, nummat)
128 my_real,INTENT(IN) :: bufmat(*)
129C-----------------------------------------------
130C L o c a l V a r i a b l e s
131C-----------------------------------------------
132 INTEGER I,TYP,ISU,NSEG,VOLU,NOD
133 CLASS(t_ebcs), POINTER :: EBCS
134 LOGICAL HAS_TH
135C-----------------------------------------------
136C S o u r c e L i n e s
137C-----------------------------------------------
138 !/TH/SURF (RESET)
139 DO i = 1, nebcs
140 IF(.NOT.ebcs_tab%need_to_compute(i)) cycle !EBCS may be on domain 0 only depending on ebcs type
141 ebcs => ebcs_tab%tab(i)%poly
142 has_th = ebcs%has_th
143 IF(has_th)THEN
144 isu = ebcs%surf_id
145 fsavsurf(1:5,isu) = zero
146 ! FSAVSURF(6,ISU) is cumulative value : not reset
147 ENDIF
148 ENDDO
149
150 DO i = 1, nebcs
151 IF(.NOT.ebcs_tab%need_to_compute(i)) cycle
152 ebcs => ebcs_tab%tab(i)%poly
153 IF(ebcs%is_multifluid)return
154 typ = ebcs%type
155 isu = ebcs%surf_id
156 nseg = ebcs%nb_elem
157 nod = ebcs%nb_node
158 IF (typ == 0) THEN
159 select type (twf => ebcs_tab%tab(i)%poly)
160 type is (t_ebcs_gradp0)
161 CALL ebcs0_gradp0(nseg, ebcs%iseg, segvar,
162 . a, v, x,
163 . ebcs%node_list, nod, ebcs%elem_list,ebcs%ielem,
164 . ebcs%vold, ebcs%pold, ebcs%p0,
165 . ebcs%la, fv, ms, stifn, iparg, elbuf_tab, twf, output, dt1, time)
166 end select
167 ELSE IF (typ <= 3)THEN
168 CALL ebcs123_pres(nseg,ebcs%iseg,segvar,
169 . a,v,x,
170 . ebcs%node_list,nod,ebcs%elem_list,
171 . ebcs%vold,ebcs%pold,ebcs%la,
172 . fv,ms,stifn,ebcs_tab, i,output, dt1, time)
173 ELSE IF (typ == 4) THEN
174 select type (twf => ebcs_tab%tab(i)%poly)
175 type is (t_ebcs_vel)
176 CALL ebcs4_vel(nseg,ebcs%iseg,segvar,
177 . a,v,x,
178 . ebcs%node_list,nod,ebcs%elem_list,
179 . ebcs%la,fv,ms,stifn,twf,output, dt1, time)
180 end select
181 ELSE IF (typ == 5) THEN
182 select type (twf => ebcs_tab%tab(i)%poly)
183 type is (t_ebcs_normv)
184 CALL ebcs5_normv(nseg,ebcs%iseg,segvar,
185 . a,v,x,
186 . ebcs%node_list,nod,ebcs%elem_list,
187 . ebcs%la,fv,ms,stifn,twf,output, dt1, time)
188 end select
189 ELSE IF (typ == 6) THEN
190 select type (twf => ebcs_tab%tab(i)%poly)
191 type is (t_ebcs_inip)
192 CALL ebcs6_inip(nseg,ebcs%iseg,segvar,
193 . a,v,x,
194 . ebcs%node_list,nod,ebcs%elem_list,
195 . ebcs%ro0,ebcs%en0,ebcs%p0,
196 . ebcs%vold,ebcs%pold,ebcs%la,
197 . ms,stifn,twf,output, dt1, time)
198 end select
199 ELSE IF (typ == 7) THEN
200 select type (twf => ebcs_tab%tab(i)%poly)
201 type is (t_ebcs_iniv)
202 CALL ebcs7_iniv(nseg,ebcs%iseg,segvar,
203 . a,v,x,
204 . ebcs%node_list,nod,ebcs%elem_list,
205 . ebcs%ro0,ebcs%en0,ebcs%v0,
206 . ebcs%la,ms,stifn,twf,output, dt1, time)
207 end select
208 ELSE IF (typ == 8) THEN
209 select type (twf => ebcs_tab%tab(i)%poly)
210 type is (t_ebcs_inlet)
211 CALL ebcs8_inlet(
212 . numnod, nseg,ebcs%ISEG,segvar,
213 . a,v,w,x,
214 . ebcs%NODE_LIST,nod,ebcs%ELEM_LIST,
215 . ebcs%LA, fv,twf,output,dt1,time,
216 . ngroup, elbuf_tab, nparg, iparg, n2d,
217 . twf%SURF_ID,nsurf,fsavsurf,nummat,matparam,snpc,npc,stf,tf,
218 . npropm, pm, bufmat, ncycle, iale)
219 end select
220 ELSE IF (typ == 10) THEN
221 select type (twf => ebcs)
222 type is (t_ebcs_nrf)
223 CALL ebcs10_nrf(nseg,twf%iseg,segvar,
224 . a,v,w,x,
225 . twf%node_list,nod,twf%elem_list,twf%ielem,twf%iface,
226 . twf%la,twf,iparg,elbuf_tab,multi_fvm,ixq,ixs,ixtg,
227 . ebcs_parithon(i)%ELEM_ADRESS,fsky,fsavsurf, output, dt1, time)
228 end select
229 ELSE IF (typ == 11) THEN
230 select type (twf => ebcs)
231 type is (t_ebcs_propellant)
232 call ebcs11_propellant(nseg,twf%iseg,segvar,
233 . x,
234 . twf%node_list,nod,twf%elem_list,twf%ielem,twf%iface,
235 . twf%la,ms,stifn,twf,iparg,elbuf_tab,ixq,ixs,ixtg,
236 . fsavsurf,time,iparit,dt1,
237 . numels, numelq, numeltg,numnod, nparg, ngroup, nixs, nixq, nixtg, nsurf, n2d,
238 . nfunct, npc, tf ,snpc, stf, python,
239 . nsensor, sensor_tab, output)
240 end select
241 ELSE IF (typ == 12) THEN
242 select type (twf => ebcs)
243 type is (t_ebcs_cyclic)
244 call ebcs12_cyclic(nseg,twf%iseg,segvar,
245 . x,v,w,a,
246 . twf%node_list,nod,twf%elem_list,twf%ielem,twf%iface,
247 . twf%la,ms,stifn,twf,iparg,elbuf_tab,ixq,ixs,ixtg,
248 . fsavsurf,iparit,dt1,
249 . numels, numelq, numeltg,numnod, nparg, ngroup, nixs, nixq, nixtg, nsurf, n2d,
250 . ncycle, iale,ebcs_parithon(i)%elem_adress,lsky,fsky)
251 end select
252 ELSE IF (typ == 100) THEN
253 SELECT TYPE(ebcs)
254 TYPE IS (t_ebcs_monvol)
255 volu = ebcs%monvol_id
256 CALL ebcs_vol2seg(nseg,igrsurf(isu)%NODES,ebcs%iseg,segvar,a,v,x,volmon(nrvolu*(volu-1)+1),fsav(1,volu))
257 END SELECT
258 ENDIF
259 ENDDO
260
261c-----------
262 RETURN
263 END
264
#define my_real
Definition cppsort.cpp:32
subroutine ebcs_main(igrsurf, segvar, volmon, a, v, w, x, fsav, fv, ms, stifn, iparg, elbuf_tab, ebcs_tab, multi_fvm, ixq, ixs, ixtg, fsky, fsavsurf, time, dt1, nsensor, sensor_tab, python, npc, tf, snpc, stf, output, matparam, pm, bufmat)
Definition ebcs_main.F:68
subroutine ebcs_vol2seg(nseg, surf_nodes, iseg, segvar, a, v, x, volmon, fsav)
subroutine ebcs0_gradp0(nseg, iseg, segvar, a, v, x, liste, nod, irect, ielem, vo, po, p0, la, fv, ms, stifn, iparg, elbuf_tab, ebcs, output, dt1, time)
subroutine ebcs10_nrf(nseg, iseg, segvar, a, v, w, x, liste, nod, irect, ielem, iface, la, ebcs, iparg, elbuf_tab, multi_fvm, ixq, ixs, ixtg, elem_adress, fsky, fsavsurf, output, dt1, time)
Definition ebcs10_nrf.F:51
subroutine ebcs123_pres(nseg, iseg, segvar, a, v, x, liste, nod, irect, vo, po, la, fv, ms, stifn, ebcs_tab, iebcs, output, dt1, time)
subroutine ebcs4_vel(nseg, iseg, segvar, a, v, x, liste, nod, irect, la, fv, ms, stifn, ebcs, output, dt1, time)
Definition ebcs4_vel.F:41
subroutine ebcs5_normv(nseg, iseg, segvar, a, v, x, liste, nod, irect, la, fv, ms, stifn, ebcs, output, dt1, time)
Definition ebcs5_normv.F:44
subroutine ebcs6_inip(nseg, iseg, segvar, a, v, x, liste, nod, irect, ro0, en0, p0, vo, po, la, ms, stifn, ebcs, output, dt1, time)
Definition ebcs6_inip.F:46
subroutine ebcs7_iniv(nseg, iseg, segvar, a, v, x, liste, nod, irect, ro0, en0, v0, la, ms, stifn, ebcs, output, dt1, time)
Definition ebcs7_iniv.F:45
OPTION /TH/SURF outputs of Pressure and Area needed Tabs.
Definition th_surf_mod.F:61
integer, parameter th_surf_num_channel
number of /TH/SURF channels : AREA, VELOCITY, MASSFLOW, P A, MASS