45
46
47
53 use element_mod , only : nixr
54
55
56
57#include "implicit_f.inc"
58
59
60
61#include "com04_c.inc"
62#include "scr17_c.inc"
63#include "param_c.inc"
64
65
66
67 INTEGER :: NIMPDISP,NIMPVEL
68 INTEGER ,DIMENSION(*) :: ITAB,ITABM1,IKINE,IKINE1LAG,IPARTR
69 INTEGER ,DIMENSION(LISKN,*) ,INTENT(IN) :: ISKN
70 INTEGER ,DIMENSION(LIPART1,*) ,INTENT(IN) :: IPART
71 INTEGER ,DIMENSION(NIXR,*) ,INTENT(IN) :: IXR
72 INTEGER ,DIMENSION(LNOPT1,*) ,INTENT(OUT) :: NOM_OPT
73 INTEGER ,DIMENSION(NIFV,NFXVEL) ,INTENT(OUT) :: IBFVEL
74 my_real ,
DIMENSION(LFXVELR,NFXVEL) ,
INTENT(OUT) :: fbfvel
75 TYPE(UNIT_TYPE_),INTENT(IN) :: UNITAB
76 my_real ,
DIMENSION(3,NUMNOD) ,
INTENT(IN) :: x0
77 TYPE (GROUP_) ,DIMENSION(NGRNOD) ,INTENT(IN) :: IGRNOD
78 TYPE(SUBMODEL_DATA),DIMENSION(*) ,INTENT(IN) :: LSUBMODEL
79
80
81
82 INTEGER IOPT,INUM,NOPT,NFDISP,NFVEL,FGEOD,FGEOV,NIMPDISP_0,LAGMULV
83 INTEGER ,DIMENSION(:), ALLOCATABLE :: OPTID
84 CHARACTER(nchartitle) :: MESS
85
86
87
88 DATA mess/'IMPOSED VELOCITY DEFINITION '/
89
90 inum = 0
91 iopt = 0
92
93
94
95
97 nimpdisp_0 = nimpdisp
99
103
104 nfdisp = nimpdisp - fgeod
105 nfvel = nimpvel - fgeov - lagmulv
106 nopt = nfdisp + nfvel
107
108
109 IF (nimpdisp > 0) THEN
110
111 IF (nfdisp > 0) THEN
113 . nimpdisp ,inum ,iopt ,fbfvel ,ibfvel ,
114 . itab ,itabm1 ,ikine ,igrnod ,nom_opt ,
115 . iskn ,unitab ,lsubmodel)
116 ENDIF
117
118 IF (fgeod > 0) THEN
120 . fgeod ,inum ,iopt ,fbfvel ,ibfvel ,
121 . itab ,itabm1 ,igrnod ,nom_opt ,x0 ,
122 . ixr ,ipart ,ipartr ,unitab ,lsubmodel)
123 ENDIF
124
125
126
127 ALLOCATE( optid(nimpdisp) )
128 optid(1:nimpdisp) = nom_opt(1,1:nimpdisp)
129 CALL udouble(optid,1,nimpdisp,mess,0,zero)
130 DEALLOCATE( optid )
131
132 END IF
133 nimpdisp = inum
134
135
136
137
138 IF (nimpvel > 0) THEN
139
140
141 IF (nfvel > 0) THEN
143 . nimpvel ,inum ,iopt ,fbfvel ,ibfvel ,
144 . itab ,itabm1 ,ikine ,ikine1lag,nom_opt ,
145 . igrnod ,iskn ,unitab ,lsubmodel)
146 END IF
147
148
149
150 IF (fgeov > 0) THEN
152 . fgeov ,inum ,iopt ,fbfvel ,ibfvel ,
153 . itab ,itabm1 ,igrnod ,nom_opt ,x0 ,
154 . ixr ,ipart ,ipartr ,unitab ,lsubmodel)
155 END IF
156
157
158
159 IF (lagmulv > 0) THEN
161 . lagmulv ,inum ,iopt ,fbfvel ,ibfvel ,
162 . itab ,itabm1 ,igrnod ,nom_opt ,x0 ,
163 . ixr ,ipart ,ipartr ,iskn ,ikine ,
164 . unitab ,lsubmodel)
165 END IF
166
167
168
169 ALLOCATE( optid(nimpvel) )
170 optid(1:nimpvel) = nom_opt(1,nimpdisp_0+1:nimpvel+nimpdisp_0)
171 CALL udouble(optid,1,nimpvel,mess,0,zero)
172 DEALLOCATE( optid )
173
174 END IF
175
176 nimpvel = inum - nimpdisp
177 nfxvel = inum
178
179 RETURN
subroutine hm_option_count(entity_type, hm_option_number)
subroutine read_impdisp(ndisp, inum, iopt, fbfvel, ibfvel, itab, itabm1, ikine, igrnod, nom_opt, iskn, unitab, lsubmodel)
subroutine read_impdisp_fgeo(nfgeo, inum, iopt, fbfvel, ibfvel, itab, itabm1, igrnod, nom_opt, x0, ixr, ipart, ipartr, unitab, lsubmodel)
subroutine read_impvel(nfvel, inum, iopt, fbfvel, ibfvel, itab, itabm1, ikine, ikine1lag, nom_opt, igrnod, iskn, unitab, lsubmodel)
subroutine read_impvel_fgeo(nfgeo, inum, iopt, fbfvel, ibfvel, itab, itabm1, igrnod, nom_opt, x0, ixr, ipart, ipartr, unitab, lsubmodel)
subroutine read_impvel_lagmul(nlagmul, inum, iopt, fbfvel, ibfvel, itab, itabm1, igrnod, nom_opt, x0, ixr, ipart, ipartr, iskn, ikine, unitab, lsubmodel)
subroutine udouble(list, ilist, nlist, mess, ir, rlist)