49
50
51
58
59
60
61#include "implicit_f.inc"
62
63
64
65#include "sphcom.inc"
66#include "lagmult.inc"
67#include "com04_c.inc"
68#include "scr17_c.inc"
69#include "param_c.inc"
70#include "units_c.inc"
71
72
73
74 INTEGER ,INTENT(IN ) :: NLAGMUL
75 INTEGER ,INTENT(INOUT) :: INUM,IOPT
76 INTEGER ,DIMENSION(*) :: ITAB,ITABM1,IPARTR,IKINE
77 INTEGER ,DIMENSION(LIPART1,*) :: IPART
78 INTEGER ,DIMENSION(NIXR,*) :: IXR
79 INTEGER ,DIMENSION(NIFV,NFXVEL) :: IBFVEL
80 INTEGER ,DIMENSION(LISKN,*),INTENT(IN) :: ISKN
81 INTEGER ,DIMENSION(LNOPT1,*) ,INTENT(OUT) :: NOM_OPT
82 my_real ,
DIMENSION(LFXVELR,NFXVEL) :: fbfvel
83 my_real ,
DIMENSION(3,NUMNOD) ,
INTENT(IN):: x0
84 TYPE (UNIT_TYPE_) ,INTENT(IN) :: UNITAB
85 TYPE (GROUP_) ,DIMENSION(NGRNOD) ,INTENT(IN) :: IGRNOD
86 TYPE(SUBMODEL_DATA),DIMENSION(*) ,INTENT(IN) :: LSUBMODEL
87
88
89
90 INTEGER I,J,K,N,N1,N2,NOD,NUM0,ILAGMUL,IUN,JPART,NNOD,NOFRAME,INOD,NOSKEW,
91 . SENS_ID,PART_ID,OPTID,UID,FCT1_ID,FCT2_ID,ILAGM,GRNOD_ID,IGS,LEN,
92 . LAGMUL,IDIS,ICOOR,DISTRIBUTION,SKEW_ID
93 INTEGER ,DIMENSION(NUMNOD) :: NOD1,NOD2,NWORK
94 INTEGER ,DIMENSION(3*NUMNOD) :: IKINE1
95 my_real :: xscale,yscale,fscal_t,fscal_v,t0
96 . xi,yi,zi,xf,yf,zf,tstart,tstop
97 CHARACTER(LEN=NCHARKEY) :: KEY
98 CHARACTER(LEN=NCHARFIELD) :: XYZ
99 CHARACTER(LEN=NCHARTITLE) :: TITR,MESS
100 CHARACTER(LEN=2) :: X,Y,Z,XX,YY,ZZ
101 LOGICAL IS_AVAILABLE
102
103
104
105 INTEGER ,USR2SYS
107
108
109
110 DATA x /'X'/
111 DATA y /'Y'/
112 DATA z /'Z'/
113 DATA xx /'xx'/
114 DATA YY /'yy'/
115 DATA ZZ /'zz'/
116
117 DATA IUN/1/
118 DATA MESS/'imposed velocity definition '/
119
120 IS_AVAILABLE = .FALSE.
121
122 NUM0 = INUM+1
123
124 IKINE1(:) = 0
125
126
127 CALL HM_OPTION_START('/impvel/lagmul')
128
129
130 DO ILAGMUL = 1,NLAGMUL
131
132 CALL HM_OPTION_READ_KEY(LSUBMODEL,
133 . OPTION_ID = OPTID,
134 . UNIT_ID = UID,
135 . OPTION_TITR = TITR,
136 . KEYWORD2 = KEY)
137
138 IOPT = IOPT + 1
139 NOM_OPT(1,IOPT) = OPTID
140 CALL FRETITL(TITR,NOM_OPT(LNOPT1-LTITR+1,IOPT),LTITR)
141
142
143 ICOOR = 0
144 IDIS = 1
145 ILAGM = 1
146 NOFRAME = 0
147 SENS_ID = 0
148 LEN = 1
149 TSTART = ZERO
150 TSTOP = INFINITY
151
152
153
154 CALL HM_GET_INTV ('curveid' ,FCT1_ID,IS_AVAILABLE,LSUBMODEL)
155 CALL HM_GET_STRING('rad_dir' ,XYZ ,ncharfield,IS_AVAILABLE)
156 CALL HM_GET_INTV ('inputsystem' ,SKEW_ID,IS_AVAILABLE,LSUBMODEL)
157 CALL HM_GET_INTV ('entityid' ,GRNOD_ID ,IS_AVAILABLE,LSUBMODEL)
158
159 CALL HM_GET_FLOATV('xscale' ,XSCALE ,IS_AVAILABLE,LSUBMODEL,UNITAB)
160 CALL HM_GET_FLOATV('magnitude' ,YSCALE ,IS_AVAILABLE,LSUBMODEL,UNITAB)
161
162
163
164 DO J=0,NUMSKW+MIN(1,NSPCOND)*NUMSPH+NSUBMOD
165 IF (SKEW_ID == ISKN(4,J+1)) THEN
166 NOSKEW = J+1
167 EXIT
168 ENDIF
169 ENDDO
170.and. IF (SKEW_ID > 0 NOSKEW == 0)
171 . CALL ANCMSG(MSGID=137,ANMODE=ANINFO,MSGTYPE=MSGERROR,
172 . I1= OPTID,
173 . I2= SKEW_ID,
174 . C1='imposed velocity',
175 . C2='imposed velocity',
176 . C3= TITR)
177
178
179
180 IF (XSCALE == ZERO) THEN
181 CALL HM_GET_FLOATV_DIM('xscale' ,FSCAL_T ,IS_AVAILABLE,LSUBMODEL,UNITAB)
182 XSCALE = FSCAL_T
183 ENDIF
184 IF (YSCALE == ZERO) THEN
185 CALL HM_GET_FLOATV_DIM('magnitude' ,FSCAL_V ,IS_AVAILABLE,LSUBMODEL,UNITAB)
186 YSCALE = FSCAL_V
187 ENDIF
188
189.OR..OR. IF (XYZ(1:2) == XX XYZ(1:2) == YY XYZ(1:2) == ZZ) THEN
190 LEN = 2
191 ENDIF
192 WRITE (IOUT,1000)
193
194 NNOD = NODGRNR5(GRNOD_ID ,IGS ,NWORK,IGRNOD ,ITABM1 ,MESS )
195
196
197 NFVLAG = NFVLAG+NNOD
198 LAG_NCF = LAG_NCF + NNOD
199 LAG_NHF = LAG_NHF + NNOD
200 IF(NOSKEW == 0) THEN
201 LAG_NKF = LAG_NKF + NNOD
202 ELSE
203 LAG_NKF = LAG_NKF + NNOD*3
204 ENDIF
205
206
207
208 DO J=1,NNOD
209 INUM = INUM + 1
210 INOD = IABS(NWORK(J))
211 NOD = ITAB(INOD)
212
213 IBFVEL(1 ,INUM) = NWORK(J)
214 IBFVEL(2 ,INUM) = 0
215 IBFVEL(3 ,INUM) = FCT1_ID
216 IBFVEL(4 ,INUM) = SENS_ID
217 IBFVEL(5 ,INUM) = 0
218 IBFVEL(6 ,INUM) = 0
219 IBFVEL(7 ,INUM) = IDIS
220 IBFVEL(8 ,INUM) = ILAGM
221 IBFVEL(9 ,INUM) = NOFRAME
222 IBFVEL(10,INUM) = ICOOR
223 IBFVEL(11,INUM) = 0
224 IBFVEL(12,INUM) = IOPT
225 IBFVEL(13,INUM) = 0
226 IBFVEL(14,INUM) = 0
227
228
229
230 FBFVEL(1,INUM) = YSCALE
231 FBFVEL(2,INUM) = TSTART
232 FBFVEL(3,INUM) = TSTOP
233 FBFVEL(4,INUM) = ZERO
234 FBFVEL(5,INUM) = ONE/XSCALE
235 FBFVEL(6,INUM) = ZERO
236
237 IF(XYZ(1:2) == XX)THEN
238 IBFVEL(2,INUM) = 4 + NOSKEW*10
239 CALL KINSET(16,NOD,IKINE(INOD),4,NOSKEW,IKINE1(INOD))
240 ELSEIF(XYZ(1:2) == YY)THEN
241 IBFVEL(2,INUM) = 5 + NOSKEW*10
242 CALL KINSET(16,NOD,IKINE(INOD),5,NOSKEW,IKINE1(INOD))
243 ELSEIF(XYZ(1:2) == ZZ)THEN
244 IBFVEL(2,INUM) = 6 + NOSKEW*10
245 CALL KINSET(16,NOD,IKINE(INOD),6,NOSKEW,IKINE1(INOD))
246 ELSEIF (XYZ(1:1) == X)THEN
247 IBFVEL(2,INUM)=1 + NOSKEW*10
248 CALL KINSET(16,NOD,IKINE(INOD),1,NOSKEW,IKINE1(INOD))
249 ELSEIF(XYZ(1:1) == Y)THEN
250 IBFVEL(2,INUM) = 2 + NOSKEW*10
251 CALL KINSET(16,NOD,IKINE(INOD),2,NOSKEW,IKINE1(INOD))
252 ELSEIF(XYZ(1:1) == Z)THEN
253 IBFVEL(2,INUM) = 3 + NOSKEW*10
254 CALL KINSET(16,NOD,IKINE(INOD),3,NOSKEW,IKINE1(INOD))
255 ELSE
256 CALL ANCMSG(MSGID=164, MSGTYPE=MSGERROR, ANMODE=ANINFO,
257 . I1=OPTID,
258 . C1=TITR,
259 . C2=XYZ)
260 ENDIF
261
262
263 WRITE (IOUT,4000) NOD,ISKN(4,NOSKEW),0,XYZ(1:LEN),FCT1_ID,SENS_ID,
264 . YSCALE,XSCALE,TSTART,TSTOP,0
265 END DO
266
267 END DO !
268
269 1000 FORMAT(//
270 .' imposed velocities by lagrange multipliers'/
271 .' ------------------------------------------'/
272 .' node skew frame direction load_curve',
273 .' sensor fscale ascale')
274
275 4000 FORMAT(3X,I10,3X,I10,3X,I10,9X,A2,3X,I10,3X,I10,
276 . 2X,1PG20.13,2X,1PG20.13,2X,G20.13,2X,G20.13,16X,I10)
277
278 RETURN
integer, parameter nchartitle
integer, parameter ncharkey
integer, parameter ncharfield
integer function usr2sys(iu, itabm1, mess, id)