42
43
44
52
53
54
55#include "implicit_f.inc"
56
57
58
59#include "com04_c.inc"
60#include "scr03_c.inc"
61#include "random_c.inc"
62#include "units_c.inc"
63
64
65
66 INTEGER ITAB(*),IRAND(*)
68 . x(3,*),alea(*),xseed(*)
69
70 TYPE (GROUP_) ,TARGET, DIMENSION(NGRNOD) :: IGRNOD
71 TYPE (SUBMODEL_DATA),INTENT(IN)::LSUBMODEL(*)
72 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
73
74
75
76 INTEGER NGR2USR
78 . aleat
80
81
82
83 INTEGER I,J,ID,IS,IGRS,IALL,NRANDG,SUB_ID
84 CHARACTER(LEN=NCHARKEY) :: KEY
85
86 INTEGER, DIMENSION(:), POINTER :: INGR2USR
87 LOGICAL IS_AVAILABLE
88
89 iall = 0
90 nrandg = 0
92 xalea =zero
93
94
95
96 is_available = .false.
98
99 DO i=1,nrand
100 irand(i) = 0
101 alea(i) = zero
102 xseed(i) = zero
103
104
106
107
108
110 . keyword2 = key,
111 . submodel_id = sub_id)
112
113 IF(sub_id == 0) THEN
114 CALL hm_get_floatv(
'XALEA',alea(i),is_available,lsubmodel,unitab)
115 CALL hm_get_floatv(
'SEED',xseed(i),is_available,lsubmodel,unitab)
117
119 IF (alea(i) > zero) THEN
121 IF(key(1:5) == 'GRNOD') THEN
122 nrandg = nrandg+1
123 ingr2usr => igrnod(1:ngrnod)%ID
124 irand(nrandg) =
ngr2usr(
id,ingr2usr,ngrnod)
125 IF (irand(nrandg) == 0) THEN
127 . msgtype=msgerror,
128 . anmode=aninfo,
129 . c1='RANDOM NOISE',
130 . c2='NODE',
132 nrandg = nrandg-1
133 ENDIF
134 ELSE
135 iall = iall+1
136 xalea = alea(i)
137 ENDIF
138 ENDIF
139 ENDIF
140
141 ELSE
142
143 iall = iall+1
144 irand(i) = 0
148 xalea = alea(i)
149 ENDIF
150
151 ENDDO
152 IF ((nrandg == 0 .AND. xalea > zero).OR.(nrandg > 0 .AND. iall == 0) ) THEN
154 ENDIF
155
156 IF (nrandg == 0 .AND. xalea > zero) THEN
157
158
159
160 DO i=1,numnod
161 x(1,i)=x(1,i)+xalea*aleat()
162 x(2,i)=x(2,i)+xalea*aleat()
163 x(3,i)=x(3,i)+xalea*aleat()
164 ENDDO
165
166 WRITE (iout,'(8X,A)')'NODE GROUP : ALL NODES'
167 WRITE (iout,1100) xalea
168 IF (
seed /= zero)
WRITE (iout,1200)
seed
169 IF (ipri >= 4) THEN
170 WRITE (iout,1400)
171 DO i=1,numnod
172 WRITE(iout,1500)itab(i),x(1,i),x(2,i),x(3,i)
173 ENDDO
174 ENDIF
175 ELSEIF (nrandg > 0 .AND. iall == 0) THEN
176
177
178
179 DO i=1,nrandg
180 igrs = irand(i)
182 DO j=1,igrnod(igrs)%NENTITY
183 is=igrnod(igrs)%ENTITY(j)
184 x(1,is)=x(1,is)+alea(i)*aleat()
185 x(2,is)=x(2,is)+alea(i)*aleat()
186 x(3,is)=x(3,is)+alea(i)*aleat()
187 ENDDO
188 WRITE (iout,1050) igrnod(igrs)%ID
189 WRITE (iout,1100) alea(i)
190 IF (
seed /= zero)
WRITE (iout,1200)
seed
191 ENDDO
192 IF (ipri >= 4) THEN
193 WRITE (iout,1400)
194 DO i=1,nrandg
195 igrs = irand(i)
196 DO j=1,igrnod(igrs)%NENTITY
197 is=igrnod(igrs)%ENTITY(j)
198 WRITE(iout,1500) itab(is),x(1,is),x(2,is),x(3,is)
199 ENDDO
200 ENDDO
201 ENDIF
202 ENDIF
203
204 RETURN
205 1000 FORMAT(//
206 .' RANDOM NOISE '/
207 .' ------------ ')
208 1050 FORMAT(/8x,'NODE GROUP : ID = ',i10)
209 1100 FORMAT( 8x,'MAXIMUM RANDOM NOISE : XALEA = ',1pg20.13)
210 1200 FORMAT( 8x,'RANDOM SEQUENCE : SEED = ',1pg20.13)
211 1400 FORMAT(/8x,'NEW NODE COORDINATES',20x,'X',24x,'Y',24x,'Z')
212 1500 FORMAT( 7x,i10,3(5x,e20.13))
213
214 RETURN
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_start(entity_type)
integer, parameter ncharkey
type(random_struct) rand_struct
integer function ngr2usr(iu, igr, ngr)
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)