38
39
40
43 USE multi_fvm_mod
46 USE ebcs_mod
48
49
50
51#include "implicit_f.inc"
52
53
54
55#include "units_c.inc"
56#include "com04_c.inc"
57
58
59
60 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
61 INTEGER NPC(*),ID
62 TYPE (MULTI_FVM_STRUCT), INTENT(INOUT) :: MULTI_FVM
63 TYPE (SURF_) ,TARGET, DIMENSION(NSURF) :: IGRSURF
64 CHARACTER(LEN=NCHARTITLE), INTENT(IN) :: TITR
65 TYPE(SUBMODEL_DATA) LSUBMODEL(NSUBMOD)
66 TYPE(t_ebcs_pres), INTENT(INOUT) :: EBCS
67
68
69
70 INTEGER ISU,SURF,NGR2USR,IPRES,IRHO,J,NSEG,IENER,IVX,IVY,IVZ
71 my_real c,pres,rho,lcar,r1,r2,ener,vx,vy,vz
73 INTEGER, DIMENSION(:), POINTER :: INGR2USR
74 LOGICAL IS_ENCRYPTED, IS_AVAILABLE
75
76
77
78
79 ipres=0
80 ivx=0
81 ivy=0
82 ivz=0
83 irho=0
84 iener=0
85 c=zero
86 pres=zero
87 rho=zero
88 lcar=zero
89 r1=zero
90 r2=zero
91 ener=zero
92 vx=zero
93 vy=zero
94 vz=zero
95
96 ebcs%title = trim(titr)
97
99 CALL hm_get_intv(
'entityid', surf ,is_available,lsubmodel)
100
101 isu=0
102 ingr2usr => igrsurf(1:nsurf)%ID
103 IF (surf/=0) isu=
ngr2usr(surf,ingr2usr,nsurf)
104 nseg=0
105 IF (isu/=0) nseg=igrsurf(isu)%NSEG
106 IF(surf==0)THEN
107 ierr=ierr+1
108 WRITE(istdo,'(6X,A)')' ** A SURFACE SHOULD BE INPUT'
109 WRITE(iout, '(6X,A)')' ** A SURFACE SHOULD BE INPUT'
110 ELSEIF(isu==0)THEN
111 ierr=ierr+1
112 WRITE(istdo,*)' ** ERROR SURFACE NOT FOUND, ID=',surf
113 WRITE(iout,*) ' ** ERROR SURFACE NOT FOUND, ID=',surf
114 ELSEIF(nseg==0)THEN
115 ierr=ierr+1
116 WRITE(istdo,*)' ** ERROR EMPTY SURFACE',surf
117 WRITE(iout,*) ' ** ERROR EMPTY SURFACE',surf
118 ENDIF
119
120
121 CALL hm_get_floatv(
'rad_ebcs_c', c ,is_available,lsubmodel,unitab)
122
123
124 CALL hm_get_intv(
'rad_fct_pr', ipres ,is_available,lsubmodel)
125 CALL hm_get_floatv(
'rad_ebcs_fscale_pr', pres ,is_available,lsubmodel,unitab)
126
127
128 CALL hm_get_intv(
'rad_fct_rho', irho ,is_available,lsubmodel)
129 CALL hm_get_floatv(
'rad_ebcs_fscale_rho', rho ,is_available,lsubmodel,unitab)
130
131
132 CALL hm_get_intv(
'rad_fct_en', iener ,is_available,lsubmodel)
133 CALL hm_get_floatv(
'rad_ebcs_fscale_en', ener ,is_available,lsubmodel,unitab)
134
135
136 CALL hm_get_floatv('rad_ebcs_lc
', LCAR ,IS_AVAILABLE,LSUBMODEL,UNITAB)
137 CALL HM_GET_FLOATV('rad_ebcs_r1', R1 ,IS_AVAILABLE,LSUBMODEL,UNITAB)
138 CALL HM_GET_FLOATV('rad_ebcs_r2', R2 ,IS_AVAILABLE,LSUBMODEL,UNITAB)
139
140
141.AND..AND. IF(SURF/=0 ISU/=0 NSEG/=0)THEN
142 WRITE(IOUT,1001)ID,TRIM(TITR)
143 WRITE(IOUT,1101)SURF,NSEG,C,PRES,IPRES,RHO,IRHO,ENER,IENER,LCAR,R1,R2
144 ENDIF
145 DO J=1,NFUNCT
146.AND. IF(IPRES/=0 IPRES==NPC(J)) THEN
147 IPRES=J
148 EXIT
149 ENDIF
150 ENDDO
151 DO J=1,NFUNCT
152.AND. IF(IRHO/=0 IRHO==NPC(J)) THEN
153 IRHO=J
154 EXIT
155 ENDIF
156 ENDDO
157 DO J=1,NFUNCT
158.AND. IF(IENER/=0 IENER==NPC(J)) THEN
159 IENER=J
160 EXIT
161 ENDIF
162 ENDDO
163 DO J=1,NFUNCT
164.AND. IF(IVX/=0 IVX==NPC(J)) THEN
165 IVX=J
166 EXIT
167 ENDIF
168 ENDDO
169 DO J=1,NFUNCT
170.AND. IF(IVY/=0 IVY==NPC(J)) THEN
171 IVY=J
172 EXIT
173 ENDIF
174 ENDDO
175 DO J=1,NFUNCT
176.AND. IF(IVZ/=0 IVZ==NPC(J)) THEN
177 IVZ=J
178 EXIT
179 ENDIF
180 ENDDO
181 !initializes the list of surface node
182! K1=2*NSEG+1
183! CALL EBCNODE(IEBCS(K1),NSEG,IGRSURF(ISU)%NODES,NOD)
184! K2=K1+NOD
185! CALL EBCRECT(IEBCS(K1),NSEG,IGRSURF(ISU)%NODES,NOD,IEBCS(K2))
186 EBCS%title = TITR
187 EBCS%ipres = IPRES
188 EBCS%irho = IRHO
189 EBCS%iener = IENER
190 EBCS%ivx = IVX
191 EBCS%ivy = IVY
192 EBCS%ivz = IVZ
193 EBCS%c = C
194 EBCS%pres = PRES
195 EBCS%rho = RHO
196 EBCS%lcar = LCAR
197 EBCS%r1 = R1
198 EBCS%r2 = R2
199 EBCS%ener = ENER
200 EBCS%vx = VX
201 EBCS%vy = VY
202 EBCS%vz = VZ
203
204 IF (MULTI_FVM%IS_USED) THEN
205 CALL ANCMSG(MSGID = 1602, MSGTYPE = MSGERROR, ANMODE = ANINFO,
206 . I1 = ID, C1 = TRIM(TITR), C2 = "NOT COMPATIBLE WITH LAW 151")
207 ENDIF
208
209
210 RETURN
211
212
213 1001 FORMAT( //'imposed pressure ebcs number . . . . . . :',I8,1X,A)
214 1101 FORMAT(
215 . ' on surface . . . . . . . . . . . . . . . ',I8,/,
216 . ' number of segments found. . . . . . . . . ',I8,/,
217 . ' speed of sound . . . . . . . . . . . . . ',E16.6,/,
218 . ' imposed pressure . . . . . . . . . . . . ',E16.6,/,
219 . ' pressure scaling FUNCTION . . . . . . . . ',I8,/,
220 . ' imposed density . . . . . . . . . . . . . ',E16.6,/,
221 . ' density scaling function . . . . . . . . ',I8,/,
222 . ' imposed energy . . . . . . . . . . . . . ',E16.6,/,
223 . ' energy scaling function . . . . . . . . . ',I8,/,
224 . ' characteristic length . . . . . . . . . . ',E16.6,/,
225 . ' linear resistance . . . . . . . . . . . . ',E16.6,/,
226 . ' quadratic resistance . . . . . . . . . . ',E16.6,/)
227
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_is_encrypted(is_encrypted)
integer, parameter nchartitle
integer function ngr2usr(iu, igr, ngr)