40 . IGRPART ,NPC ,UNITAB ,ISKN ,
41 . ITAGND ,IGRSURF ,PLD ,BUFSF ,LSUBMODEL)
55#include "implicit_f.inc"
66 INTEGER IGRV(NIGRV,*), IBUF(*), ITAB(*), ITABM1(*),NPC(*),
67 . iskn(liskn,*),itagnd(*)
73 TYPE (GROUP_) ,
DIMENSION(NGRPART) :: IGRPART
74 TYPE (SURF_) ,
DIMENSION(NSURF) :: IGRSURF
79 . fcx,fcy,fac_m,fac_l,fac_t,ngx,ngy,ngz,dotprod
80 INTEGER I, NOD, NCUR, NOSKEW,NSKW,NN,IGS,UID,
81 . IAD,NS,IWA,J,K,ID,K1,K2,NCURS,N1,N2,NC,L,
82 . itag, iflagunit,flag_fmt,flag_fmt_tmp,ifix_tmp,iadpl
83 CHARACTER(LEN=NCHARFIELD) :: XYZ
84 CHARACTER X*1, Y*1, Z*1, XX*2, YY*2, ZZ*2, MESS*40
85 CHARACTER(LEN=NCHARTITLE)::TITR
87 INTEGER :: IGU,ISU,IGRAV,IBID, IG, IS, IDIR, PN1, ICURS, IIGRAV,IIG,IIS
88 my_real :: BX_,BY_,BZ_, GRAV0,NX,NY,NZ,NORM,PSURF,BID
89 LOGICAL :: lFOUND, lPLANAR_SURF, lUSER_SURF, lOUTP, lGRAV, lUNIQUE, IS_AVAILABLE
92 INTEGER :: M,ID_LIST(NINIGRAV)
100 DATA mess/
'INITIAL GRAVITY LOADING DEFINITION '/
104 lplanar_surf = .false.
108 is_available = .false.
124 . option_titr = titr)
129 IF (unitab%UNIT_ID(j) == uid)
THEN
138 IF(id==id_list(m))
THEN
144 IF (uid /= 0 .AND. iflagunit == 0)
THEN
145 CALL ancmsg(msgid=659,anmode=aninfo,msgtype=msgerror,
147 . c1=
'INITIAL GRAVITY LOADING',
148 . c2=
'INITIAL GRAVITY LOADING',
154 CALL hm_get_intv(
'grpart_ID',igu,is_available,lsubmodel)
156 CALL hm_get_intv('grav_id
' ,IGRAV,IS_AVAILABLE,LSUBMODEL)
158 ! Reading 2nd card : pressure, etc
159 CALL HM_GET_FLOATV('pref
' ,PSURF,IS_AVAILABLE, LSUBMODEL, UNITAB)
162 CALL HM_GET_FLOATV('bx
',BX_,IS_AVAILABLE, LSUBMODEL, UNITAB)
163 CALL HM_GET_FLOATV('by
',BY_,IS_AVAILABLE, LSUBMODEL, UNITAB)
164 CALL HM_GET_FLOATV('bz
',BZ_,IS_AVAILABLE, LSUBMODEL, UNITAB)
167 ! Checking Gravity ID
172 IF (IGRAV == IGRV(5,IG)) THEN
178 GRAV0 = AGRV(1,IG)*PLD(PN1+1)
182 IDIR = MOD(IGRV(2,IG),10)
198 IF (GRAV0 < ZERO) THEN
208.NOT.
IF (lFOUND) THEN
209 CALL ANCMSG(MSGID=73,ANMODE=ANINFO,MSGTYPE=MSGERROR,
213 . C2='does not refer to a valid /grav id
')
217 ! Inigrav ID duplicated
218.NOT.
IF (lUNIQUE) THEN
219 CALL ANCMSG(MSGID=73,ANMODE=ANINFO,MSGTYPE=MSGERROR,
223 . C2='identifier is duplicated
')
226 ! Checking surface ID
231 IF (ISU == IGRSURF(IS)%ID)THEN
232 SELECT CASE(IGRSURF(IS)%TYPE)
236 IADPL = IGRSURF(IS)%IAD_BUFR
251 IADPL = IGRSURF(IS)%IAD_BUFR
256 NX = BUFSF(IADPL+4)- BUFSF(IADPL+1)
257 NY = BUFSF(IADPL+5)- BUFSF(IADPL+2)
258 NZ = BUFSF(IADPL+6)- BUFSF(IADPL+3)
259 NORM = SQRT(NX*NX+NY*NY+NZ*NZ)
268.NOT.
IF (lFOUND) THEN
269 CALL ANCMSG(MSGID=73,ANMODE=ANINFO,MSGTYPE=MSGERROR,
273 . C2='does not refer to a valid /surf id
')
285 IAD = NGRNOD+NGRBRIC+NGRQUAD+NGRSHEL+NGRSH3N+NGRTRUS+NGRBEAM+NGRSPRI
288 IF (IGU == IGRPART(IG)%ID) THEN
295.NOT.
IF (lFOUND) THEN
296 CALL ANCMSG(MSGID=73,ANMODE=ANINFO,MSGTYPE=MSGERROR,
300 . C2='does not refer to a valid grpart
')
305 ! Checking the normal
306.AND.
IF (lPLANAR_SURF lGRAV) THEN
307 DOTPROD = NX*NGX+NY*NGY+NZ*NGZ
308 IF(ABS(DOTPROD)<=EM20)THEN
309 CALL ANCMSG(MSGID=73,ANMODE=ANINFO,MSGTYPE=MSGERROR,
313 . C2='refer to a gravity direction
')
318 ! Storing IDs in INIGRV table
324 ! Storing real data in LINIGRAV table
331 LINIGRAV(07,K) = GRAV0
335 LINIGRAV(11,K) = PSURF
338 IF (lPLANAR_SURF) THEN
340 WRITE (IOUT,FMT='(a)
') ''
341 WRITE (IOUT,3000) IGU,ISU,IGRAV,BX_,BY_,BZ_, PSURF
342 WRITE (IOUT,3001) CDIR(2:2)
343 WRITE (IOUT,3002) GRAV0
344 IF(lPLANAR_SURF) WRITE (IOUT,3003) NX,NY,NZ
345 ELSEIF(lUSER_SURF)THEN
347 WRITE (IOUT,FMT='(a)
') ''
348 WRITE (IOUT,3005) IGU,ISU,IGRAV, PSURF
349 WRITE (IOUT,3001) CDIR(2:2)
350 WRITE (IOUT,3002) GRAV0
351 IF(lUSER_SURF)WRITE (IOUT,3004)
358 .' initial gravity loading
'/
359 .' -----------------------
'/
360 .' grpart_id surf_id grav_id bx by bz psurf
')
363 .' initial gravity loading
'/
364 .' -----------------------
'/
365 .' grpart_id surf_id grav_id psurf
')
367 3000 FORMAT(2X,I10,2X,I10,2X,I10,2X,E12.4,2X,E12.4,2X,E12.4,2X,E12.4)
368 3005 FORMAT(2X,I10,2X,I10,2X,I10,3X,E12.4)
370 3001 FORMAT(' gravity orientation :
',1X,A2)
371 3002 FORMAT(' gravity
VALUE :
',2X,E12.4)
372 3003 FORMAT(' surface orientation :
',2X,E12.4,2X,E12.4,2X,E12.4)
373 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)