40 . IGRPART ,NPC ,UNITAB ,ISKN ,
41 . ITAGND ,IGRSURF ,PLD ,BUFSF ,LSUBMODEL)
55#include "implicit_f.inc"
65 TYPE (UNIT_TYPE_),
INTENT(IN) ::UNITAB
73 TYPE (GROUP_) ,
DIMENSION(NGRPART) ::
74 TYPE (SURF_) ,
DIMENSION(NSURF) :: IGRSURF
82CHARACTER X*1, Y*1, Z*1, XX*2, YY*2, ZZ*2, MESS*40
83 CHARACTER(LEN=NCHARTITLE)::TITR
85 INTEGER :: IGU,ISU,IGRAV, IG, IS, IDIR, PN1, ICURS, IIGRAV,IIG,IIS
86 my_real :: BX_,BY_,BZ_, GRAV0,NX,NY,NZ,NORM,PSURF
87 LOGICAL :: lFOUND, lPLANAR_SURF, lUSER_SURF, lOUTP, lGRAV, lUNIQUE, IS_AVAILABLE
90 INTEGER :: M,ID_LIST(NINIGRAV)
98 DATA mess/
'INITIAL GRAVITY LOADING DEFINITION '/
102 lplanar_surf = .false.
106 is_available = .false.
122 . option_titr = titr)
127 IF (unitab%UNIT_ID(j) == uid)
THEN
136 IF(id==id_list(m))
THEN
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',
153 CALL hm_get_intv(
'surf_ID' ,isu,is_available,lsubmodel
154 CALL hm_get_intv(
'grav_ID' ,igrav,is_available,lsubmodel)
157 CALL hm_get_floatv(
'Pref' ,psurf,is_available, lsubmodel, unitab)
161 CALL HM_GET_FLOATV('by
',BY_,IS_AVAILABLE, LSUBMODEL, UNITAB)
162 CALL HM_GET_FLOATV('bz
',BZ_,IS_AVAILABLE, LSUBMODEL, UNITAB)
165 ! Checking Gravity ID
170 IF (IGRAV == IGRV(5,IG)) THEN
176 GRAV0 = AGRV(1,IG)*PLD(PN1+1)
180 IDIR = MOD(IGRV(2,IG),10)
196 IF (GRAV0 < ZERO) THEN
206.NOT.
IF (lFOUND) THEN
207 CALL ANCMSG(MSGID=73,ANMODE=ANINFO,MSGTYPE=MSGERROR,
211 . C2='does not refer to a valid /grav id
')
215 ! Inigrav ID duplicated
216.NOT.
IF (lUNIQUE) THEN
217 CALL ANCMSG(MSGID=73,ANMODE=ANINFO,MSGTYPE=MSGERROR,
221 . C2='identifier is duplicated
')
224 ! Checking surface ID
229 IF (ISU == IGRSURF(IS)%ID)THEN
230 SELECT CASE(IGRSURF(IS)%TYPE)
234 IADPL = IGRSURF(IS)%IAD_BUFR
249 IADPL = IGRSURF(IS)%IAD_BUFR
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)
266.NOT.
IF (lFOUND) THEN
267 CALL ANCMSG(MSGID=73,ANMODE=ANINFO,MSGTYPE=MSGERROR,
271 . C2='does not refer to a valid /surf id
')
283 IAD = NGRNOD+NGRBRIC+NGRQUAD+NGRSHEL+NGRSH3N+NGRTRUS+NGRBEAM+NGRSPRI
286 IF (IGU == IGRPART(IG)%ID) THEN
293.NOT.
IF (lFOUND) THEN
294 CALL ANCMSG(MSGID=73,ANMODE=ANINFO,MSGTYPE=MSGERROR,
298 . C2='does not refer to a valid grpart
')
303 ! Checking the normal
304.AND.
IF (lPLANAR_SURF 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,
311 . C2='refer to a gravity direction colinear to
the input surface
')
316 ! Storing IDs in INIGRV table
322 ! Storing real data in LINIGRAV table
329 LINIGRAV(07,K) = GRAV0
333 LINIGRAV(11,K) = PSURF
336 IF (lPLANAR_SURF) THEN
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
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)
356 .' initial gravity loading
'/
357 .' -----------------------
'/
358 .' grpart_id surf_id grav_id bx by bz psurf
')
361 .' initial gravity loading
'/
362 .' -----------------------
'/
363 .' grpart_id surf_id grav_id psurf
')
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)
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
')
subroutine hm_read_inigrav(igrv, ibuf, agrv, itab, itabm1, igrpart, npc, unitab, iskn, itagnd, igrsurf, pld, bufsf, lsubmodel)
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)