39
40
41
42
48
49
50
51#include "implicit_f.inc"
52
53
54
55#include "com01_c.inc"
56#include "com04_c.inc"
57#include "scr06_c.inc"
58#include "units_c.inc"
59
60
61
62 INTEGER ISU1,ISU2,NOINT,NI
63 INTEGER IPARI(*)
65 . frigap(*), stfac
66 CHARACTER(LEN=NCHARTITLE)::TITR
67
68 TYPE (GROUP_) ,TARGET, DIMENSION(NGRNOD) :: IGRNOD
69 TYPE (SURF_) ,TARGET , DIMENSION(NSURF) :: IGRSURF
70 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
71 TYPE(SUBMODEL_DATA) LSUBMODEL(*)
72
73
74
75 INTEGER I,J,L, NTYP,MULTIMP,FLAGREMNOD,
76 . IREM7I2,IS1,IS2
78 . startt,bumult,stopt,gapmax,gap
79 CHARACTER MESS*40
80
81 INTEGER, DIMENSION(:), POINTER :: INGR2USR
82 LOGICAL IS_AVAILABLE
83
84
85
86 INTEGER NGR2USR
87
88
89
90 is1=0
91 is2=0
92 multimp = 0
93 irem7i2=0
94
95 ntyp = 7
96 ipari(15)=noint
97 ipari(7)=ntyp
98
99 is_available = .false.
100
101
102
103 CALL hm_get_intv(
'secondaryentityids',isu1,is_available,lsubmodel)
104 CALL hm_get_intv(
'mainentityids',isu2,is_available,lsubmodel)
105
106 IF(isu2==0) THEN
108 . msgtype=msgerror,
109 . anmode=aninfo,
110 . i1=noint,
111 . c1=titr)
112 ENDIF
113
114 is2=1
115 ingr2usr => igrsurf(1:nsurf)%ID
116 isu2=
ngr2usr(isu2,ingr2usr,nsurf)
117 IF(isu1/=0)THEN
118 ingr2usr => igrnod(1:ngrnod)%ID
119 isu1=
ngr2usr(isu1,ingr2usr,ngrnod)
120 is1 =2
121 ENDIF
122 IF(isu1==0)THEN
123 isu1=isu2
124 is1 =1
125 ENDIF
126
127 IF(frigap(16)==zero)THEN
128 gapmax=ep30
129 frigap(16)=gapmax
130 END IF
131
132 flagremnod = 0
133 IF (flagremnod == 0) flagremnod = 1
134 ipari(63) = flagremnod
135
136 IF (irem7i2==0) THEN
137 IF (iimplicit>0) irem7i2=1
138 END IF
139 ipari(54) = irem7i2
140
141
142
143 CALL hm_get_floatv(
'Gapmin',gap,is_available,lsubmodel,unitab)
144 frigap(2)=gap
145
146
147
148
149 startt = zero
150 stopt = ep30
151 frigap(3)=startt
152 frigap(11)=stopt
153
154 IF(stfac==zero) THEN
155 stfac=one
156 ENDIF
157
158
159
160
161 CALL hm_get_floatv(
'BUMULT',bumult,is_available,lsubmodel,unitab)
162
163 IF(bumult==zero) THEN
164 bumult = bmul0
165
166 IF(ntyp==7)THEN
167 IF(numnod > 2500000) THEN
168 bumult = bmul0*two
169 ELSEIF(numnod > 1500000) THEN
170 bumult = bmul0*three/two
171 END IF
172 END IF
173 END IF
174 frigap(4)=bumult
175
176
177 frigap(10)=float(0)
178 multimp = 4
179 ipari(23)=multimp
180
181 ipari(13)=is1*10+is2
182
183 ipari(15)=noint
184
185 ipari(45)=isu1
186 ipari(46)=isu2
187
188
189
190
191
192 WRITE(iout,1527)
193
194 IF(is1==0)THEN
195 WRITE(iout,'(6X,A)')'NO SECONDARY SURFACE INPUT'
196 ELSEIF(is1==1)THEN
197 WRITE(iout,'(6X,A)')'SECONDARY SURFACE INPUT BY SEGMENTS'
198 ELSEIF(is1==2)THEN
199 WRITE(iout,'(6X,A)')'SECONDARY SURFACE INPUT BY NODES'
200 ELSEIF(is1==3)THEN
201 WRITE(iout,'(6X,A)')'SECONDARY SURFACE INPUT BY SEGMENTS'
202 ELSEIF(is1==4 )THEN
203 WRITE(iout,'(6X,A)')'SECONDARY SIDE INPUT BY BRICKS'
204 ELSEIF(is1==5 )THEN
205 WRITE(iout,'(6X,A)')'SECONDARY SIDE INPUT BY SOLID ELEMENTS'
206 ENDIF
207 IF(is2==0)THEN
208 WRITE(iout,'(6X,A)')'NO MAIN SURFACE INPUT'
209 ELSEIF(is2==1)THEN
210 WRITE(iout,'(6X,A)')'MAIN SURFACE INPUT BY SEGMENTS'
211 ELSEIF(is2==2)THEN
212 WRITE(iout,'(6X,A)')'MAIN SURFACE INPUT BY NODES'
213 ELSEIF(is2==3)THEN
214 WRITE(iout,'(6X,A)')'MAIN SURFACE INPUT BY SEGMENTS'
215 ELSEIF(is2==4)THEN
216 WRITE(iout,
'(6X,A)')'
main surface refers
',
217 . 'to hyper-ellipsoidal surface'
218 ENDIF
219
220
221 RETURN
222 1527 FORMAT(//
223 . ' type==7 parallel/auto impacting ' /,
224 . ' lagrange multiplier formulation ' //)
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
integer, parameter nchartitle
integer function ngr2usr(iu, igr, ngr)
int main(int argc, char *argv[])
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)