43
44
45
46
47
48
49
55
56
57
58#include "implicit_f.inc"
59
60
61
62#include "scr17_c.inc"
63#include "com04_c.inc"
64#include "param_c.inc"
65#include "scr10_c.inc"
66
67
68
69 INTEGER,INTENT(IN) :: ITAB(NUMNOD), ITABM1(*), IKINE(*), IBCSLAG(5,*), LAG_NCF,LAG_NKF,LAG_NHF,IKINE1LAG(*),ISKN(LISKN,*)
70 INTEGER,INTENT(IN) :: NOM_OPT(LNOPT1,*)
71 INTEGER,INTENt(INOUT) :: ISKEW(*),ICODE(NUMNOD)
72 TYPE(SUBMODEL_DATA), INTENT(IN), DIMENSION(NSUBMOD) :: LSUBMODEL
73
74 TYPE (GROUP_) ,TARGET, DIMENSION(NGRNOD) :: IGRNOD
75
76
77
78 INTEGER I, IC, NC, N, IS, IC1, IC2,
79 . NOSYS, J,IGR,IGRS,IBCALE,J6(6),
80 . IC0, IC01, IC02, IC03, IC04, ,ILAGM,
81 . CHKCOD,NOD,SUB_INDEX
82 INTEGER IUN
83 CHARACTER MESS*40,CODE*7
84 CHARACTER(LEN=NCHARFIELD) :: STRING
85 CHARACTER(LEN=NCHARTITLE) :: TITR
86 LOGICAL :: IS_AVAILABLE, FOUND
87
88
89
90 INTEGER USR2SYS,MY_OR,CHECK_NEW,NGR2USR
91 INTEGER, DIMENSION(:), POINTER :: INGR2USR
92
93
94
95 DATA iun/1/
96 DATA mess/'BOUNDARY CONDITIONS '/
97
98
99
100 is_available = .false.
101 sub_index = 0
102
104
105 DO i = 1, nalebcs
108 . option_titr = titr,
109 . submodel_index = sub_index)
111 CALL hm_get_intv(
'inputsystem', is, is_available, lsubmodel)
112 IF(is == 0 .AND. sub_index /= 0 ) is = lsubmodel(sub_index)%SKEW
113 CALL hm_get_intv(
'entityid', igr, is_available, lsubmodel)
114 found = .false.
116 IF(is == iskn(4, j + 1)) THEN
117 is = j + 1
118 found = .true.
119 EXIT
120 ENDIF
121 ENDDO
122 IF (.NOT. found) THEN
123 CALL ancmsg(msgid = 137, anmode = aninfo, msgtype = msgerror,
124 . c1 = 'BOUNDARY CONDITION', c2 = 'BOUNDARY CONDITION',
125 . i2 = is, i1 = n, c3 = titr)
126 ENDIF
127
128 code = string(1:7)
129 READ(code,fmt='(3I1,1X,3I1)') j6
130 chkcod = 0
131 DO j=1,6
132 IF (j6(j) >= 2) THEN
133 chkcod = 1
134 ENDIF
135 ENDDO
136 IF (chkcod == 1) THEN
137 CALL ancmsg(msgid = 1051, anmode = aninfo_blind,msgtype = msgerror, i1 =
id, c1 = titr, c2 = code)
138 ENDIF
139 ic1=j6(1)*4 +j6(2)*2 +j6(3)
140 ic2=j6(4)*4 +j6(5)*2 +j6(6)
141 ic=ic1*8+ic2
142 ingr2usr => igrnod(1:ngrnod)%ID
143 igrs=
ngr2usr(igr,ingr2usr,ngrnod)
144 IF(igrs /= 0)THEN
145 DO j=1,igrnod(igrs)%NENTITY
146 nosys=igrnod(igrs)%ENTITY(j)
147 icode(nosys)=
my_or(ic,icode(nosys))
148 IF(iskew(nosys) == -1.OR.iskew(nosys) == is)THEN
149 check_new=is
150 ELSE
151 CALL ancmsg(msgid=148,anmode=aninfo,msgtype=msgerror,i1=itab(nosys
152 ENDIF
153 iskew(nosys)=check_new
154 ENDDO
155 CALL ancmsg(msgid=148,anmode=aninfo,msgtype=msgerror,i1=
id,c1=titr,prmod=msg_print)
156 ELSE
157 CALL ancmsg(msgid=678,anmode=aninfo,msgtype=msgerror,i1=
id,i2=igr,c1=titr)
158 ENDIF
159 ENDDO
160
161 RETURN
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_get_string(name, sval, size, is_available)
subroutine hm_option_start(entity_type)
integer, parameter nchartitle
integer, parameter ncharfield
integer function ngr2usr(iu, igr, ngr)
int my_or(int *a, int *b)
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)