34
35
36
38
39
40
41#include "implicit_f.inc"
42
43
44
45#include "com01_c.inc"
46#include "com04_c.inc"
47#include "param_c.inc"
48#include "units_c.inc"
49#include "task_c.inc"
50
51
52
53 INTEGER NFVMESH, MONVOL(*)
55 . volmon(*), x(3,*)
56
57
58
59 INTEGER I, ID, NBX, NBY, K1, K2, KIBJET, KIBHOL, KIBALE, KK1, N,
60 . ITYP, NN, KI1, J, JJ, NSTEP, IV(10), IFVI, NBZ, IFV
62 . vx3, vy3, vz3, vx1, vy1, vz1, dx0, dy0, dz0, lx, ly,
norm,
63 . vvx3, vvy3, vvz3, norm2, ss, vvx1, vvy1, vvz1, vvx2,
64 . vvy2, vvz2, lxmax, lymax, xx, yy, zz, xl, yl, x0, y0, z0,
65 . lz, lzmax, zl, rbid
67 . , DIMENSION(:,:), ALLOCATABLE :: xxx
68
69 DO i=1,nfvmesh
70 READ(iin,'(I10)') ifvi
71 IF (ifvi==1) THEN
72 READ(iin,'(2i10)') ID, NSTEP
73 IF (NSTEP==0) NSTEP=20
74 READ(IIN,'(3f20.0)') VX3, VY3, VZ3
75 READ(IIN,'(3f20.0)') VX1, VY1, VZ1
76 READ(IIN,'(3f20.0)') DX0, DY0, DZ0
77 READ(IIN,'(3f20.0)') LX, LY, LZ
78 READ(IIN,'(3i10)') NBX, NBY, NBZ
79
80 K1=1
81 K2=1+NIMV*NVOLU
82 KIBJET=K2+LICBAG
83 KIBHOL=KIBJET+LIBAGJET
84 KIBALE=KIBHOL+LIBAGHOL
85 KK1=1
86 DO N=1,NVOLU
87 IF (MONVOL(K1)==ID) THEN
88 ITYP=MONVOL(K1-1+2)
89 IF (ITYP/=6) THEN
90 WRITE(IOUT,'(a33,i8,a38)')
91 . ' /fvmbag/remesh : mon. volume
id ',ID,' is not of
TYPE fvmbag
'//
92 . ' -'
93 GOTO 100
94 ENDIF
95
96 NORM=SQRT(VX3**2+VY3**2+VZ3**2)
97 IF (NORM==ZERO) THEN
98 VX3=VOLMON(KK1-1+35)
99 VY3=VOLMON(KK1-1+36)
100 VZ3=VOLMON(KK1-1+37)
101 NORM=SQRT(VX3**2+VY3**2+VZ3**2)
102 ENDIF
103 VVX3=VX3/NORM
104 VVY3=VY3/NORM
105 VVZ3=VZ3/NORM
106 NORM2=VX1**2+VY1**2+VZ1**2
107 IF (NORM2==ZERO) THEN
108 VX1=VOLMON(KK1-1+38)
109 VY1=VOLMON(KK1-1+39)
110 VZ1=VOLMON(KK1-1+40)
111 ENDIF
112 X0=VOLMON(KK1-1+41)+DX0
113 Y0=VOLMON(KK1-1+42)+DY0
114 Z0=VOLMON(KK1-1+43)+DZ0
115 IF (LX==ZERO) LX=VOLMON(KK1-1+44)
116 IF (LY==ZERO) LY=VOLMON(KK1-1+45)
117 IF (LZ==ZERO) LZ=VOLMON(KK1-1+53)
118 IF (NBX==0) NBX=MONVOL(K1-1+54)
119 IF (NBY==0) NBY=MONVOL(K1-1+55)
120 IF (NBZ==0) NBZ=MONVOL(K1-1+65)
121
122 SS=VX1*VVX3+VY1*VVY3+VZ1*VVZ3
123 VVX1=VX1-SS*VVX3
124 VVY1=VY1-SS*VVY3
125 VVZ1=VZ1-SS*VVZ3
126 NORM=SQRT(VVX1**2+VVY1**2+VVZ1**2)
127 IF (NORM==ZERO) THEN
128 WRITE(ISTDO,'(a)')
129 . ' ** error in fvmbag meshing DATA '
130 WRITE(IOUT,'(a)')
131 . ' ** error in fvmbag meshing DATA '
132 WRITE(IOUT,'(a14,i8)
') ' monvol
id ',ID
133 WRITE(IOUT,'(a)')
134 . ' new cut directions are colinear'
135 CALL ARRET(2)
136 ENDIF
137 VVX1=VVX1/NORM
138 VVY1=VVY1/NORM
139 VVZ1=VVZ1/NORM
140 VVX2=VVY3*VVZ1-VVZ3*VVY1
141 VVY2=VVZ3*VVX1-VVX3*VVZ1
142 VVZ2=VVX3*VVY1-VVY3*VVX1
143
144 LXMAX=ZERO
145 LYMAX=ZERO
146 LZMAX=ZERO
147 NN=MONVOL(K1-1+32)
148 KI1=KIBALE+MONVOL(K1-1+31)
149
150 IFV=MONVOL(K1-1+45)
151 ALLOCATE(XXX(3,NN))
152 CALL SPMD_FVB_GATH(IFV, X, XXX, RBID, RBID,
153 . 1 )
154 IF (ISPMD==FVSPMD(IFV)%PMAIN-1) THEN
155 DO J=1,NN
156 XX=XXX(1,J)
157 YY=XXX(2,J)
158 ZZ=XXX(3,J)
159 XL=(XX-X0)*VVX1+(YY-Y0)*VVY1+(ZZ-Z0)*VVZ1
160 YL=(XX-X0)*VVX2+(YY-Y0)*VVY2+(ZZ-Z0)*VVZ2
161 ZL=(XX-X0)*VVX3+(YY-Y0)*VVY3+(ZZ-Z0)*VVZ3
162 LXMAX=MAX(LXMAX,ABS(XL))
163 LYMAX=MAX(LYMAX,ABS(YL))
164 LZMAX=MAX(LZMAX,ABS(ZL))
165 ENDDO
166 ENDIF
167 DEALLOCATE(XXX)
168
169 IF (LXMAX>LX) THEN
170 WRITE(IOUT,'(a14,i8,a9)')
171 . ' ** monvol
id ',ID,' (fvmbag)'
172 WRITE(iout,'(A)') ' IN LOCAL FRAME DIRECTION 1'
173 WRITE(iout,'(A18,G11.4,A33,G11.4,G11.4)')
174 . ' GIVEN LENGTH ',lx,
175 . ' IS SMALLER THAN BOUNDING LENGTH ',lxmax
176 lx=lxmax*onep01
177 WRITE(iout,'(A20,G11.4)') ' IT IS RESET TO ',lx
178 ENDIF
179 IF (lymax>ly) THEN
180 WRITE(iout,'(A14,I8,A9)')
181 .
' ** MONVOL ID ',
id,
' (FVMBAG)'
182 WRITE(iout,'(A)') ' IN LOCAL FRAME DIRECTION 2'
183 WRITE(iout,'(A18,G11.4,A33,G11.4,G11.4)')
184 . ' GIVEN LENGTH ',ly,
185 . ' IS SMALLER THAN BOUNDING LENGTH ',lymax
186 ly=lymax*onep01
187 WRITE(iout,'(A20,G11.4)') ' IT IS RESET TO ',ly
188 ENDIF
189
190
191
192
193
194
195
196
197
198
199
200
201 volmon(kk1-1+35)=vx3
202 volmon(kk1-1+36)=vy3
203 volmon(kk1-1+37)=vz3
204 volmon(kk1-1+38)=vx1
205 volmon(kk1-1+39)=vy1
206 volmon(kk1-1+40)=vz1
207 volmon(kk1-1+41)=x0
208 volmon(kk1-1+42)=y0
209 volmon(kk1-1+43)=z0
210 volmon(kk1-1+44)=lx
211 volmon(kk1-1+45)=ly
212 volmon(kk1-1+53)=lz
213 monvol(k1-1+54)=nbx
214 monvol(k1-1+55)=nby
215 monvol(k1-1+65)=nbz
216
217 monvol(k1-1+56)=1
218 monvol(k1-1+58)=nstep
219 ENDIF
220 k1=k1+nimv
221 kk1=kk1+nrvolu
222 ENDDO
223 ENDIF
224 100 ENDDO
225
226 RETURN
norm(diag(diag(diag(inv(mat))) -id.SOL), 2) % destroy mumps instance id.JOB