42
43
44
52
53
54
55#include "implicit_f.inc"
56
57
58
59#include "com04_c.inc"
60#include "units_c.inc"
61#include "param_c.inc"
62
63
64
65 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
66 INTEGER IGRV(NIGRV,*), IBUF(*), ITAB(*), ITABM1(*),NPC(*),
67 . ISKN(LISKN,*),ITAGND(*)
69 . agrv(lfacgrv,*)
71 TYPE(SUBMODEL_DATA) LSUBMODEL(*)
72
73 TYPE (GROUP_) , DIMENSION(NGRPART) :: IGRPART
74 TYPE (SURF_) , DIMENSION(NSURF) :: IGRSURF
75
76
77
79 . ngx,ngy,ngz,dotprod
80 INTEGER UID,
81 . IAD,J,K,ID,IFLAGUNIT,IADPL
82 CHARACTER X*1, Y*1, Z*1, XX*2, YY*2, ZZ*2, MESS*40
83 CHARACTER(LEN=NCHARTITLE)::TITR
84
85 INTEGER :: IGU,ISU,IGRAV, IG, IS, IDIR, PN1, ICURS, IIGRAV,IIG,IIS
87 LOGICAL :: lFOUND, lPLANAR_SURF, lUSER_SURF, lOUTP, lGRAV, lUNIQUE, IS_AVAILABLE
88 CHARACTER*2 :: CDIR
89
90 INTEGER :: M,ID_LIST(NINIGRAV)
91
92 DATA x/'X'/
93 DATA y/'Y'/
94 DATA z/'Z'/
95 DATA xx/'XX'/
96 DATA yy/'YY'/
97 DATA zz/'ZZ'/
98 DATA mess/'INITIAL GRAVITY LOADING DEFINITION '/
99
100
101
102 lplanar_surf = .false.
103 luser_surf = .false.
104 lgrav = .true.
105 loutp = .true.
106 is_available = .false.
107 ngx = zero
108 ngy = zero
109 ngz = zero
110
111
113
114
115 DO k=1,ninigrav
116
117
118 titr = ''
121 . unit_id = uid,
122 . option_titr = titr)
123
124
125 iflagunit = 0
126 DO j=1,unitab%NUNITS
127 IF (unitab%UNIT_ID(j) == uid) THEN
128 iflagunit = 1
129 EXIT
130 ENDIF
131 ENDDO
132
134 lunique = .true.
135 DO m=1,k-1
136 IF(
id==id_list(m))
THEN
137 lunique=.false.
138 EXIT
139 ENDIF
140 ENDDO
141
142 IF (uid /= 0 .AND. iflagunit == 0) THEN
143 CALL ancmsg(msgid=659,anmode=aninfo,msgtype=msgerror,
145 . c1='INITIAL GRAVITY LOADING',
146 . c2='INITIAL GRAVITY LOADING',
147 . c3= titr)
148 loutp = .false.
149 ENDIF
150
151
152 CALL hm_get_intv(
'grpart_ID',igu,is_available,lsubmodel)
153 CALL hm_get_intv(
'surf_ID' ,isu,is_available,lsubmodel)
154 CALL hm_get_intv(
'grav_ID' ,igrav,is_available,lsubmodel)
155
156
157 CALL hm_get_floatv(
'Pref' ,psurf,is_available, lsubmodel, unitab)
158
159 IF (isu == 0) THEN
163 ENDIF
164
165
166 lfound = .false.
167 iigrav = 0
168 grav0 = zero
169 DO ig=1,ngrav
170 IF (igrav == igrv(5,ig)) THEN
171 lfound = .true.
172 iigrav = ig
173 icurs = igrv(3,ig)
174 IF (icurs > 0) THEN
175 pn1 = npc(icurs)
176 grav0 = agrv(1,ig)*pld(pn1+1)
177 ELSE
178 grav0 = agrv(1,ig)
179 ENDIF
180 idir = mod(igrv(2,ig),10)
181 ngx = zero
182 ngy = zero
183 ngz = zero
184 SELECT CASE (idir)
185 CASE(1)
186 cdir(1:2) =' X'
187 ngx = one
188 CASE(2)
189 cdir(1:2) =' Y'
190 ngy = one
191 CASE(3)
192 cdir(1:2) =' Z'
193 ngz = one
194 END SELECT
195 cdir(1:1)="+"
196 IF (grav0 < zero) THEN
197 cdir(1:1)="-"
198 ngx = -ngx
199 ngy = -ngy
200 ngz = -ngz
201 ENDIF
202 EXIT
203 ENDIF
204 ENDDO
205
206 IF (.NOT.lfound) THEN
207 CALL ancmsg(msgid=73,anmode=aninfo,msgtype=msgerror,
209 . c1=titr,
210 . i2= igrav,
211 . c2='DOES NOT REFER TO A VALID /GRAV ID')
212 loutp = .false.
213 lgrav = .false.
214 ENDIF
215
216 IF (.NOT.lunique) THEN
217 CALL ancmsg(msgid=73,anmode=aninfo,msgtype=msgerror,
219 . c1=titr,
221 . c2='IDENTIFIER IS DUPLICATED')
222 ENDIF
223
224
225 iis = 0
226 IF (isu > 0) THEN
227 lfound = .false.
228 DO is=1,nsurf
229 IF (isu == igrsurf(is)%ID)THEN
230 SELECT CASE(igrsurf(is)%TYPE)
231 CASE(0)
232 iis = is
233 luser_surf=.true.
234 iadpl = igrsurf(is)%IAD_BUFR
235 lfound = .true.
236 bx_ = zero
237 by_ = zero
238 bz_ = zero
239 nx = zero
240 ny = zero
241 nz = zero
242 nx = zero
243 ny = zero
244 nz = zero
245 EXIT
246 CASE(200)
247 iis = is
248 lplanar_surf=.true.
249 iadpl = igrsurf(is)%IAD_BUFR
250 lfound = .true.
251 bx_ = bufsf(iadpl+1)
252 by_ = bufsf(iadpl+2)
253 bz_ = bufsf(iadpl+3)
254 nx = bufsf(iadpl+4)- bufsf(iadpl+1)
255 ny = bufsf(iadpl+5)- bufsf(iadpl+2)
256 nz = bufsf(iadpl+6)- bufsf(iadpl+3)
257 norm = sqrt(nx*nx+ny*ny+nz*nz)
261 EXIT
262 END SELECT
263 ENDIF
264 ENDDO
265
266 IF (.NOT.lfound) THEN
267 CALL ancmsg(msgid=73,anmode=aninfo,msgtype=msgerror,
269 . c1=titr,
270 . i2= isu,
271 . c2='DOES NOT REFER TO A VALID /SURF ID')
272 loutp = .false.
273 ENDIF
274 ELSE
275 nx = ngx
276 ny = ngy
277 nz = ngz
278 ENDIF
279
280
281 lfound = .false.
282 iig = 0
283 iad = ngrnod+ngrbric+ngrquad+ngrshel+ngrsh3n+ngrtrus+ngrbeam+ngrspri
284 IF (igu > 0) THEN
285 DO ig=1,ngrpart
286 IF (igu == igrpart(ig)%ID) THEN
287 iig = ig
288 lfound = .true.
289 EXIT
290 ENDIF
291 ENDDO
292
293 IF (.NOT.lfound) THEN
294 CALL ancmsg(msgid=73,anmode=aninfo,msgtype=msgerror,
296 . c1=titr,
297 . i2= igu,
298 . c2='DOES NOT REFER TO A VALID GRPART ')
299 loutp = .false.
300 ENDIF
301 ENDIF
302
303
304 IF (lplanar_surf .AND. lgrav) THEN
305 dotprod = nx*ngx+ny*ngy+nz*ngz
306 IF(abs(dotprod)<=em20)THEN
307 CALL ancmsg(msgid=73,anmode=aninfo,msgtype=msgerror,
309 . c1=titr,
310 . i2= igrav,
311 . c2='REFER TO A GRAVITY DIRECTION COLINEAR TO THE INPUT SURFACE')
312 loutp = .false.
313 ENDIF
314 ENDIF
315
316
321
322
323 linigrav(01,k) = bx_
324 linigrav(02,k) = by_
325 linigrav(03,k) = bz_
326 linigrav(04,k) = nx
327 linigrav(05,k) = ny
328 linigrav(06,k) = nz
329 linigrav(07,k) = grav0
330 linigrav(08,k) = ngx
331 linigrav(09,k) = ngy
332 linigrav(10,k) = ngz
333 linigrav(11,k) = psurf
334
335
336 IF (lplanar_surf) THEN
337 WRITE (iout,2000)
338 WRITE (iout,fmt='(A)') ''
339 WRITE (iout,3000) igu,isu,igrav,bx_,by_,bz_, psurf
340 WRITE (iout,3001) cdir(2:2)
341 WRITE (iout,3002) grav0
342 IF(lplanar_surf) WRITE (iout,3003) nx,ny,nz
343 ELSEIF(luser_surf)THEN
344 WRITE (iout,2001)
345 WRITE (iout,fmt='(A)') ''
346 WRITE (iout,3005) igu,isu,igrav, psurf
347 WRITE (iout,3001) cdir(2:2)
348 WRITE (iout,3002) grav0
349 IF(luser_surf)WRITE (iout,3004)
350 ENDIF
351 ENDDO
352
353 RETURN
354
355 2000 FORMAT(//
356 .' INITIAL GRAVITY LOADING '/
357 .' ----------------------- '/
358 .' GRPART_ID SURF_ID GRAV_ID BX BY BZ PSURF ')
359
360 2001 FORMAT(//
361 .' INITIAL GRAVITY LOADING '/
362 .' ----------------------- '/
363 .' GRPART_ID SURF_ID GRAV_ID PSURF ')
364
365 3000 FORMAT(2x,i10,2x,i10,2x,i10,2x,e12.4,2x,e12.4,2x,e12.4,2x,e12.4)
366 3005 FORMAT(2x,i10,2x,i10,2x,i10,3x,e12.4)
367
368 3001 FORMAT(' GRAVITY ORIENTATION : ',1x,a2)
369 3002 FORMAT(' GRAVITY VALUE : ',2x,e12.4)
370 3003 FORMAT(' SURFACE ORIENTATION : ',2x,e12.4,2x,e12.4,2x,e12.4)
371 3004 FORMAT(' USER DEFINED SURFACE')
372
373 RETURN
norm(diag(diag(diag(inv(mat))) -id.SOL), 2) % destroy mumps instance id.JOB
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_start(entity_type)
integer, dimension(:,:), allocatable inigrv
integer, parameter nchartitle
integer, parameter ncharfield
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)