The TELEMAC-MASCARET system  trunk
mv0306.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE mv0306
3 ! *****************
4 !
5  &(op, x , da,typdia,
6  & xa12,xa13,xa14,xa15,xa16,xa21,xa23,xa24,
7  & xa25,xa26,xa31,xa32,xa34,xa35,xa36,
8  & typext, y,c,
9  & ikle1,ikle2,ikle3,ikle4,ikle5,ikle6,
10  & npoin,npt2,nelem,w1,w2,w3,w4,w5,w6)
11 !
12 !***********************************************************************
13 ! BIEF V6P1 21/08/2010
14 !***********************************************************************
15 !
16 !brief FUNCTION: MATRIX VECTOR OPERATIONS FOR P1*P2 TRIANGLES.
17 !code
18 !+ OP IS A STRING OF 8 CHARACTERS, WHICH INDICATES THE OPERATION TO BE
19 !+ PERFORMED ON VECTORS X,Y AND MATRIX M.
20 !+
21 !+ THE RESULT IS VECTOR X.
22 !+
23 !+ THESE OPERATIONS ARE DIFFERENT DEPENDING ON THE DIAGONAL TYPE
24 !+ AND THE TYPE OF EXTRADIAGONAL TERMS.
25 !+
26 !+ IMPLEMENTED OPERATIONS:
27 !+
28 !+ OP = 'X=AY ' : X = AY
29 !+ OP = 'X=-AY ' : X = - AY
30 !+ OP = 'X=X+AY ' : X = X + AY
31 !+ OP = 'X=X-AY ' : X = X - AY
32 !+ OP = 'X=X+CAY ' : X = X + C AY
33 !+ OP = 'X=TAY ' : X = TA Y (TRANSPOSE OF A)
34 !+ OP = 'X=-TAY ' : X = - TA Y (- TRANSPOSE OF A)
35 !+ OP = 'X=X+TAY ' : X = X + TA Y
36 !+ OP = 'X=X-TAY ' : X = X - TA Y
37 !+ OP = 'X=X+CTAY' : X = X + C TA Y
38 !
39 !history ALGIANE FROEHLY (MATMECA); J-M HERVOUET (LNH)
40 !+ 31/03/08
41 !+ V5P9
42 !+
43 !
44 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
45 !+ 13/07/2010
46 !+ V6P0
47 !+ Translation of French comments within the FORTRAN sources into
49 !
50 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
51 !+ 21/08/2010
52 !+ V6P0
53 !+ Creation of DOXYGEN tags for automated documentation and
54 !+ cross-referencing of the FORTRAN sources
55 !
56 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
57 !| C |-->| A GIVEN CONSTANT
58 !| DA |-->| MATRIX DIAGONAL
59 !| IKLE1 |-->| FIRST POINTS OF ELEMENTS
60 !| IKLE2 |-->| SECOND POINTS OF ELEMENTS
61 !| IKLE3 |-->| THIRD POINTS OF ELEMENTS
62 !| IKLE4 |-->| FOURTH POINTS OF ELEMENTS
63 !| IKLE5 |-->| FIFTH POINTS OF ELEMENTS
64 !| IKLE6 |-->| SIXTH POINTS OF ELEMENTS
65 !| NELEM |-->| NUMBER OF ELEMENTS
66 !| NPOIN |-->| NUMBER OF LINEAR POINTS
67 !| NPT2 |-->| NUMBER OF QUADRATIC POINTS
68 !| OP |-->| OPERATION TO BE DONE (SEE ABOVE)
69 !| TYPDIA |-->| TYPE OF DIAGONAL:
70 !| | | TYPDIA = 'Q' : ANY VALUE
71 !| | | TYPDIA = 'I' : IDENTITY
72 !| | | TYPDIA = '0' : ZERO
73 !| TYPEXT |-->| TYPE OF OFF-DIAGONAL TERMS
74 !| | | TYPEXT = 'Q' : ANY VALUE
75 !| | | TYPEXT = 'S' : SYMMETRIC
76 !| | | TYPEXT = '0' : ZERO
77 !| W1 |<->| RESULT IN NON ASSEMBLED FORM
78 !| W2 |<->| RESULT IN NON ASSEMBLED FORM
79 !| W3 |<->| RESULT IN NON ASSEMBLED FORM
80 !| W4 |<->| RESULT IN NON ASSEMBLED FORM
81 !| W5 |<->| RESULT IN NON ASSEMBLED FORM
82 !| W6 |<->| RESULT IN NON ASSEMBLED FORM
83 !| X |<->| RESULT IN ASSEMBLED FORM
84 !| XA13 |-->| OFF-DIAGONAL TERM OF MATRIX
85 !| XA14 |-->| OFF-DIAGONAL TERM OF MATRIX
86 !| XA15 |-->| OFF-DIAGONAL TERM OF MATRIX
87 !| XA16 |-->| OFF-DIAGONAL TERM OF MATRIX
88 !| XA21 |-->| OFF-DIAGONAL TERM OF MATRIX
89 !| XA23 |-->| OFF-DIAGONAL TERM OF MATRIX
90 !| XA24 |-->| OFF-DIAGONAL TERM OF MATRIX
91 !| XA25 |-->| OFF-DIAGONAL TERM OF MATRIX
92 !| XA26 |-->| OFF-DIAGONAL TERM OF MATRIX
93 !| XA31 |-->| OFF-DIAGONAL TERM OF MATRIX
94 !| XA32 |-->| OFF-DIAGONAL TERM OF MATRIX
95 !| XA34 |-->| OFF-DIAGONAL TERM OF MATRIX
96 !| XA35 |-->| OFF-DIAGONAL TERM OF MATRIX
97 !| XA36 |-->| OFF-DIAGONAL TERM OF MATRIX
98 !| Y |-->| VECTOR USED IN THE OPERATION
99 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
100 !
101  USE bief!, EX_MV0306 => MV0306
102 !
104  IMPLICIT NONE
105 !
106 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
107 !
108  INTEGER, INTENT(IN) :: NELEM,NPOIN,NPT2
109 !
110  INTEGER, INTENT(IN) :: IKLE1(*),IKLE2(*),IKLE3(*)
111  INTEGER, INTENT(IN) :: IKLE4(*),IKLE5(*),IKLE6(*)
112 !
113  DOUBLE PRECISION, INTENT(INOUT) :: W1(*),W2(*),W3(*)
114  DOUBLE PRECISION, INTENT(INOUT) :: W4(*),W5(*),W6(*)
115  DOUBLE PRECISION, INTENT(IN) :: Y(*),DA(*)
116  DOUBLE PRECISION, INTENT(INOUT) :: X(*)
117  DOUBLE PRECISION, INTENT(IN) :: XA12(*),XA13(*),XA14(*),XA15(*)
118  DOUBLE PRECISION, INTENT(IN) :: XA16(*),XA21(*),XA23(*),XA24(*)
119  DOUBLE PRECISION, INTENT(IN) :: XA25(*),XA26(*),XA31(*),XA32(*)
120  DOUBLE PRECISION, INTENT(IN) :: XA34(*),XA35(*),XA36(*)
121  DOUBLE PRECISION, INTENT(IN) :: C
122 !
123  CHARACTER(LEN=8), INTENT(IN) :: OP
124  CHARACTER(LEN=1), INTENT(IN) :: TYPDIA,TYPEXT
125 !
126 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
127 !
128  INTEGER IELEM
129  DOUBLE PRECISION Z(1)
130 !
131 !-----------------------------------------------------------------------
132 !
133  IF(op(1:8).EQ.'X=AY ') THEN
134 !
135 ! CONTRIBUTION OF EXTRADIAGONAL TERMS:
136 !
137  IF(typext(1:1).EQ.'Q') THEN
138 !
139  DO ielem = 1 , nelem
140  w1(ielem) = xa12(ielem) * y(ikle2(ielem))
141  & + xa13(ielem) * y(ikle3(ielem))
142  & + xa14(ielem) * y(ikle4(ielem))
143  & + xa15(ielem) * y(ikle5(ielem))
144  & + xa16(ielem) * y(ikle6(ielem))
145  w2(ielem) = xa21(ielem) * y(ikle1(ielem))
146  & + xa23(ielem) * y(ikle3(ielem))
147  & + xa24(ielem) * y(ikle4(ielem))
148  & + xa25(ielem) * y(ikle5(ielem))
149  & + xa26(ielem) * y(ikle6(ielem))
150  w3(ielem) = xa31(ielem) * y(ikle1(ielem))
151  & + xa32(ielem) * y(ikle2(ielem))
152  & + xa34(ielem) * y(ikle4(ielem))
153  & + xa35(ielem) * y(ikle5(ielem))
154  & + xa36(ielem) * y(ikle6(ielem))
155 !
156  ENDDO ! IELEM
157 !
158  ELSEIF(typext(1:1).EQ.'0') THEN
159 !
160  CALL ov ('X=C ', w1 , y , z , 0.d0 , nelem )
161  CALL ov ('X=C ', w2 , y , z , 0.d0 , nelem )
162  CALL ov ('X=C ', w3 , y , z , 0.d0 , nelem )
163 !
164  ELSE
165 !
166  WRITE(lu,1001) typext
167  CALL plante(1)
168  stop
169 !
170  ENDIF
171 !
172 ! CONTRIBUTION OF THE DIAGONAL:
173 !
174  IF(typdia(1:1).EQ.'Q') THEN
175  CALL ov ('X=YZ ', x , y , da , c , npoin )
176  ELSEIF(typdia(1:1).EQ.'I') THEN
177  CALL ov ('X=Y ', x , y , z , c , npoin )
178  ELSEIF(typdia(1:1).EQ.'0') THEN
179  CALL ov ('X=C ', x , y , z , 0.d0 , npoin )
180  ELSE
181  WRITE(lu,2001) typdia
182  CALL plante(1)
183  stop
184  ENDIF
185 !
186 !-----------------------------------------------------------------------
187 !
188  ELSEIF(op(1:8).EQ.'X=-AY ') THEN
189 !
190 ! CONTRIBUTION OF EXTRADIAGONAL TERMS:
191 !
192  IF(typext(1:1).EQ.'Q') THEN
193 !
194  DO ielem = 1 , nelem
195  w1(ielem) = - xa12(ielem) * y(ikle2(ielem))
196  & - xa13(ielem) * y(ikle3(ielem))
197  & - xa14(ielem) * y(ikle4(ielem))
198  & - xa15(ielem) * y(ikle5(ielem))
199  & - xa16(ielem) * y(ikle6(ielem))
200  w2(ielem) = - xa21(ielem) * y(ikle1(ielem))
201  & - xa23(ielem) * y(ikle3(ielem))
202  & - xa24(ielem) * y(ikle4(ielem))
203  & - xa25(ielem) * y(ikle5(ielem))
204  & - xa26(ielem) * y(ikle6(ielem))
205  w3(ielem) = - xa31(ielem) * y(ikle1(ielem))
206  & - xa32(ielem) * y(ikle2(ielem))
207  & - xa34(ielem) * y(ikle4(ielem))
208  & - xa35(ielem) * y(ikle5(ielem))
209  & - xa36(ielem) * y(ikle6(ielem))
210  ENDDO ! IELEM
211 !
212  ELSEIF(typext(1:1).EQ.'0') THEN
213 !
214  CALL ov ('X=C ', w1 , y , z , 0.d0 , nelem )
215  CALL ov ('X=C ', w2 , y , z , 0.d0 , nelem )
216  CALL ov ('X=C ', w3 , y , z , 0.d0 , nelem )
217 !
218  ELSE
219 !
220  WRITE(lu,1001) typext
221  CALL plante(1)
222  stop
223 !
224  ENDIF
225 !
226 ! CONTRIBUTION OF THE DIAGONAL:
227 !
228  IF(typdia(1:1).EQ.'Q') THEN
229  CALL ov ('X=-YZ ', x , y , da , c , npoin )
230  ELSEIF(typdia(1:1).EQ.'I') THEN
231  CALL ov ('X=-Y ', x , y , z , c , npoin )
232  ELSEIF(typdia(1:1).EQ.'0') THEN
233  CALL ov ('X=C ', x , y , z , 0.d0 , npoin )
234  ELSE
235  WRITE(lu,2001) typdia
236  CALL plante(1)
237  stop
238  ENDIF
239 !
240 !-----------------------------------------------------------------------
241 !
242  ELSEIF(op(1:8).EQ.'X=X+AY ') THEN
243 !
244 ! CONTRIBUTION OF EXTRADIAGONAL TERMS:
245 !
246  IF(typext(1:1).EQ.'Q') THEN
247 !
248  DO ielem = 1 , nelem
249  w1(ielem) = w1(ielem) + xa12(ielem) * y(ikle2(ielem))
250  & + xa13(ielem) * y(ikle3(ielem))
251  & + xa14(ielem) * y(ikle4(ielem))
252  & + xa15(ielem) * y(ikle5(ielem))
253  & + xa16(ielem) * y(ikle6(ielem))
254  w2(ielem) = w2(ielem) + xa21(ielem) * y(ikle1(ielem))
255  & + xa23(ielem) * y(ikle3(ielem))
256  & + xa24(ielem) * y(ikle4(ielem))
257  & + xa25(ielem) * y(ikle5(ielem))
258  & + xa26(ielem) * y(ikle6(ielem))
259  w3(ielem) = w3(ielem) + xa31(ielem) * y(ikle1(ielem))
260  & + xa32(ielem) * y(ikle2(ielem))
261  & + xa34(ielem) * y(ikle4(ielem))
262  & + xa35(ielem) * y(ikle5(ielem))
263  & + xa36(ielem) * y(ikle6(ielem))
264  ENDDO ! IELEM
265 !
266  ELSEIF(typext(1:1).NE.'0') THEN
267 !
268  WRITE(lu,1001) typext
269  CALL plante(1)
270  stop
271 !
272  ENDIF
273 !
274 ! CONTRIBUTION OF THE DIAGONAL:
275 !
276  IF(typdia(1:1).EQ.'Q') THEN
277  CALL ov ('X=X+YZ ', x , y , da , c , npoin )
278  ELSEIF(typdia(1:1).EQ.'I') THEN
279  CALL ov ('X=X+Y ', x , y , z , c , npoin )
280  ELSEIF(typdia(1:1).NE.'0') THEN
281  WRITE(lu,2001) typdia
282  CALL plante(1)
283  stop
284  ENDIF
285 !
286 !-----------------------------------------------------------------------
287 !
288  ELSEIF(op(1:8).EQ.'X=X-AY ') THEN
289 !
290 ! CONTRIBUTION OF EXTRADIAGONAL TERMS:
291 !
292  IF(typext(1:1).EQ.'Q') THEN
293 !
294  DO ielem = 1 , nelem
295  w1(ielem) = w1(ielem) - xa12(ielem) * y(ikle2(ielem))
296  & - xa13(ielem) * y(ikle3(ielem))
297  & - xa14(ielem) * y(ikle4(ielem))
298  & - xa15(ielem) * y(ikle5(ielem))
299  & - xa16(ielem) * y(ikle6(ielem))
300  w2(ielem) = w2(ielem) - xa21(ielem) * y(ikle1(ielem))
301  & - xa23(ielem) * y(ikle3(ielem))
302  & - xa24(ielem) * y(ikle4(ielem))
303  & - xa25(ielem) * y(ikle5(ielem))
304  & - xa26(ielem) * y(ikle6(ielem))
305  w3(ielem) = w3(ielem) - xa31(ielem) * y(ikle1(ielem))
306  & - xa32(ielem) * y(ikle2(ielem))
307  & - xa34(ielem) * y(ikle4(ielem))
308  & - xa35(ielem) * y(ikle5(ielem))
309  & - xa36(ielem) * y(ikle6(ielem))
310  ENDDO ! IELEM
311 !
312  ELSEIF(typext(1:1).NE.'0') THEN
313 !
314  WRITE(lu,1001) typext
315  CALL plante(1)
316  stop
317 !
318  ENDIF
319 !
320 ! CONTRIBUTION OF THE DIAGONAL:
321 !
322  IF(typdia(1:1).EQ.'Q') THEN
323  CALL ov ('X=X-YZ ', x , y , da , c , npoin )
324  ELSEIF(typdia(1:1).EQ.'I') THEN
325  CALL ov ('X=X-Y ', x , y , z , c , npoin )
326  ELSEIF(typdia(1:1).NE.'0') THEN
327  WRITE(lu,2001) typdia
328  CALL plante(0)
329  stop
330  ENDIF
331 !
332 !-----------------------------------------------------------------------
333 !
334  ELSEIF(op(1:8).EQ.'X=X+CAY ') THEN
335 !
336 ! CONTRIBUTION OF EXTRADIAGONAL TERMS:
337 !
338  IF(typext(1:1).EQ.'Q') THEN
339 !
340  DO ielem = 1 , nelem
341  w1(ielem) = w1(ielem)
342  & + c * ( xa12(ielem) * y(ikle2(ielem))
343  & + xa13(ielem) * y(ikle3(ielem))
344  & + xa14(ielem) * y(ikle4(ielem))
345  & + xa15(ielem) * y(ikle5(ielem))
346  & + xa16(ielem) * y(ikle6(ielem)) )
347  w2(ielem) = w2(ielem)
348  & + c * ( xa21(ielem) * y(ikle1(ielem))
349  & + xa23(ielem) * y(ikle3(ielem))
350  & + xa24(ielem) * y(ikle4(ielem))
351  & + xa25(ielem) * y(ikle5(ielem))
352  & + xa26(ielem) * y(ikle6(ielem)) )
353  w3(ielem) = w3(ielem)
354  & + c * ( xa31(ielem) * y(ikle1(ielem))
355  & + xa32(ielem) * y(ikle2(ielem))
356  & + xa34(ielem) * y(ikle4(ielem))
357  & + xa35(ielem) * y(ikle5(ielem))
358  & + xa36(ielem) * y(ikle6(ielem)) )
359  ENDDO ! IELEM
360 !
361  ELSEIF(typext(1:1).NE.'0') THEN
362 !
363  WRITE(lu,1001) typext
364  CALL plante(1)
365  stop
366 !
367  ENDIF
368 !
369 ! CONTRIBUTION OF THE DIAGONAL:
370 !
371  IF(typdia(1:1).EQ.'Q') THEN
372  CALL ov ('X=X+CYZ ', x , y , da , c , npoin )
373  ELSEIF(typdia(1:1).EQ.'I') THEN
374  CALL ov ('X=X+CY ', x , y , z , c , npoin )
375  ELSEIF(typdia(1:1).NE.'0') THEN
376  WRITE(lu,2001) typdia
377  CALL plante(1)
378  stop
379  ENDIF
380 !
381 !-----------------------------------------------------------------------
382 !
383  ELSEIF(op(1:8).EQ.'X=TAY ') THEN
384 !
385 ! CONTRIBUTION OF EXTRADIAGONAL TERMS:
386 !
387  IF(typext(1:1).EQ.'Q') THEN
388 !
389  DO ielem = 1 , nelem
390  w1(ielem) = + xa21(ielem) * y(ikle2(ielem))
391  & + xa31(ielem) * y(ikle3(ielem))
392  w2(ielem) = + xa12(ielem) * y(ikle1(ielem))
393  & + xa32(ielem) * y(ikle3(ielem))
394  w3(ielem) = + xa13(ielem) * y(ikle1(ielem))
395  & + xa23(ielem) * y(ikle2(ielem))
396  w4(ielem) = + xa14(ielem) * y(ikle1(ielem))
397  & + xa24(ielem) * y(ikle2(ielem))
398  & + xa34(ielem) * y(ikle3(ielem))
399  w5(ielem) = + xa15(ielem) * y(ikle1(ielem))
400  & + xa25(ielem) * y(ikle2(ielem))
401  & + xa35(ielem) * y(ikle3(ielem))
402  w6(ielem) = + xa16(ielem) * y(ikle1(ielem))
403  & + xa26(ielem) * y(ikle2(ielem))
404  & + xa36(ielem) * y(ikle3(ielem))
405  ENDDO
406 !
407  ELSEIF(typext(1:1).EQ.'0') THEN
408 !
409  CALL ov ('X=C ', w1 , y , z , 0.d0 , nelem )
410  CALL ov ('X=C ', w2 , y , z , 0.d0 , nelem )
411  CALL ov ('X=C ', w3 , y , z , 0.d0 , nelem )
412  CALL ov ('X=C ', w4 , y , z , 0.d0 , nelem )
413  CALL ov ('X=C ', w5 , y , z , 0.d0 , nelem )
414  CALL ov ('X=C ', w6 , y , z , 0.d0 , nelem )
415 !
416  ELSE
417 !
418  WRITE(lu,1001) typext
419  CALL plante(1)
420  stop
421 !
422  ENDIF
423 !
424 ! CONTRIBUTION OF THE DIAGONAL
425 !
426  IF(typdia(1:1).EQ.'Q') THEN
427  CALL ov ('X=YZ ', x , y , da , c , npoin )
428  ELSEIF(typdia(1:1).EQ.'I') THEN
429  CALL ov ('X=Y ', x , y , z , c , npoin )
430  ELSEIF(typdia(1:1).EQ.'0') THEN
431  CALL ov ('X=C ', x , y , da , 0.d0 , npoin )
432  ELSE
433  WRITE(lu,2001) typdia
434  CALL plante(1)
435  stop
436  ENDIF
437 !
438 ! THE DIAGONAL REACHES ONLY LINEAR POINTS, OTHERS NOT INITIALISED
439 ! THEY ARE SET TO 0 HERE
440  CALL ov ('X=C ',x(npoin+1:npt2),y,z,0.d0,npt2-npoin)
441 !
442 !-----------------------------------------------------------------------
443 !
444  ELSEIF(op(1:8).EQ.'X=-TAY ') THEN
445 !
446 ! CONTRIBUTION OF EXTRADIAGONAL TERMS:
447 !
448  IF(typext(1:1).EQ.'Q') THEN
449 !
450  DO ielem = 1 , nelem
451  w1(ielem) = - xa21(ielem) * y(ikle2(ielem))
452  & - xa31(ielem) * y(ikle3(ielem))
453  w2(ielem) = - xa12(ielem) * y(ikle1(ielem))
454  & - xa32(ielem) * y(ikle3(ielem))
455  w3(ielem) = - xa13(ielem) * y(ikle1(ielem))
456  & - xa23(ielem) * y(ikle2(ielem))
457  w4(ielem) = - xa14(ielem) * y(ikle1(ielem))
458  & - xa24(ielem) * y(ikle2(ielem))
459  & - xa34(ielem) * y(ikle3(ielem))
460  w5(ielem) = - xa15(ielem) * y(ikle1(ielem))
461  & - xa25(ielem) * y(ikle2(ielem))
462  & - xa35(ielem) * y(ikle3(ielem))
463  w6(ielem) = - xa16(ielem) * y(ikle1(ielem))
464  & - xa26(ielem) * y(ikle2(ielem))
465  & - xa36(ielem) * y(ikle3(ielem))
466  ENDDO ! IELEM
467 !
468  ELSEIF(typext(1:1).EQ.'0') THEN
469 !
470  CALL ov ('X=C ', w1 , y , z , 0.d0 , nelem )
471  CALL ov ('X=C ', w2 , y , z , 0.d0 , nelem )
472  CALL ov ('X=C ', w3 , y , z , 0.d0 , nelem )
473  CALL ov ('X=C ', w4 , y , z , 0.d0 , nelem )
474  CALL ov ('X=C ', w5 , y , z , 0.d0 , nelem )
475  CALL ov ('X=C ', w6 , y , z , 0.d0 , nelem )
476 !
477  ELSE
478 !
479  WRITE(lu,1001) typext
480  CALL plante(0)
481  stop
482 !
483  ENDIF
484 !
485 ! CONTRIBUTION OF THE DIAGONAL
486 !
487  IF(typdia(1:1).EQ.'Q') THEN
488  CALL ov ('X=-YZ ', x , y , da , c , npoin )
489  ELSEIF(typdia(1:1).EQ.'I') THEN
490  CALL ov ('X=-Y ', x , y , z , c , npoin )
491  ELSEIF(typdia(1:1).EQ.'0') THEN
492  CALL ov ('X=C ', x , y , da , 0.d0 , npoin )
493  ELSE
494  WRITE(lu,2001) typdia
495  CALL plante(1)
496  stop
497  ENDIF
498 !
499 ! THE DIAGONAL REACHES ONLY LINEAR POINTS, OTHERS NOT INITIALISED
500 ! THEY ARE SET TO 0 HERE
501  CALL ov ('X=C ',x(npoin+1:npt2),y,z,0.d0,npt2-npoin)
502 !
503 !-----------------------------------------------------------------------
504 !
505  ELSEIF(op(1:8).EQ.'X=X+TAY ') THEN
506 !
507 ! CONTRIBUTION OF EXTRADIAGONAL TERMS:
508 !
509  IF(typext(1:1).EQ.'Q') THEN
510 !
511  DO ielem = 1 , nelem
512  w1(ielem) = w1(ielem) + xa21(ielem) * y(ikle2(ielem))
513  & + xa31(ielem) * y(ikle3(ielem))
514  w2(ielem) = w2(ielem) + xa12(ielem) * y(ikle1(ielem))
515  & + xa32(ielem) * y(ikle3(ielem))
516  w3(ielem) = w3(ielem) + xa13(ielem) * y(ikle1(ielem))
517  & + xa23(ielem) * y(ikle2(ielem))
518  w4(ielem) = w4(ielem) + xa14(ielem) * y(ikle1(ielem))
519  & + xa24(ielem) * y(ikle2(ielem))
520  & + xa34(ielem) * y(ikle3(ielem))
521  w5(ielem) = w5(ielem) + xa15(ielem) * y(ikle1(ielem))
522  & + xa25(ielem) * y(ikle2(ielem))
523  & + xa35(ielem) * y(ikle3(ielem))
524  w6(ielem) = w6(ielem) + xa16(ielem) * y(ikle1(ielem))
525  & + xa26(ielem) * y(ikle2(ielem))
526  & + xa36(ielem) * y(ikle3(ielem))
527  ENDDO ! IELEM
528 !
529  ELSEIF(typext(1:1).NE.'0') THEN
530 !
531  WRITE(lu,1001) typext
532  CALL plante(1)
533  stop
534 !
535  ENDIF
536 !
537 ! CONTRIBUTION OF THE DIAGONAL
538 !
539  IF(typdia(1:1).EQ.'Q') THEN
540  CALL ov ('X=X+YZ ', x , y , da , c , npoin )
541  ELSEIF(typdia(1:1).EQ.'I') THEN
542  CALL ov ('X=X+Y ', x , y , z , c , npoin )
543  ELSEIF(typdia(1:1).NE.'0') THEN
544  WRITE(lu,2001) typdia
545  CALL plante(1)
546  stop
547  ENDIF
548 !
549 !-----------------------------------------------------------------------
550 !
551  ELSEIF(op(1:8).EQ.'X=X-TAY ') THEN
552 !
553 ! CONTRIBUTION OF EXTRADIAGONAL TERMS:
554 !
555  IF(typext(1:1).EQ.'Q') THEN
556 !
557  DO ielem = 1 , nelem
558  w1(ielem) = w1(ielem) - xa21(ielem) * y(ikle2(ielem))
559  & - xa31(ielem) * y(ikle3(ielem))
560  w2(ielem) = w2(ielem) - xa12(ielem) * y(ikle1(ielem))
561  & - xa32(ielem) * y(ikle3(ielem))
562  w3(ielem) = w3(ielem) - xa13(ielem) * y(ikle1(ielem))
563  & - xa23(ielem) * y(ikle2(ielem))
564  w4(ielem) = w4(ielem) - xa14(ielem) * y(ikle1(ielem))
565  & - xa24(ielem) * y(ikle2(ielem))
566  & - xa34(ielem) * y(ikle3(ielem))
567  w5(ielem) = w5(ielem) - xa15(ielem) * y(ikle1(ielem))
568  & - xa25(ielem) * y(ikle2(ielem))
569  & - xa35(ielem) * y(ikle3(ielem))
570  w6(ielem) = w6(ielem) - xa16(ielem) * y(ikle1(ielem))
571  & - xa26(ielem) * y(ikle2(ielem))
572  & - xa36(ielem) * y(ikle3(ielem))
573  ENDDO ! IELEM
574 !
575  ELSEIF(typext(1:1).NE.'0') THEN
576 !
577  WRITE(lu,1001) typext
578  CALL plante(1)
579  stop
580 !
581  ENDIF
582 !
583 ! CONTRIBUTION OF THE DIAGONAL
584 !
585  IF(typdia(1:1).EQ.'Q') THEN
586  CALL ov ('X=X-YZ ', x , y , da , c , npoin )
587  ELSEIF(typdia(1:1).EQ.'I') THEN
588  CALL ov ('X=X-Y ', x , y , z , c , npoin )
589  ELSEIF(typdia(1:1).NE.'0') THEN
590  WRITE(lu,2001) typdia
591  CALL plante(1)
592  stop
593  ENDIF
594 !
595 !-----------------------------------------------------------------------
596 !
597  ELSEIF(op(1:8).EQ.'X=X+CTAY') THEN
598 !
599 ! CONTRIBUTION OF EXTRADIAGONAL TERMS:
600 !
601  IF(typext(1:1).EQ.'Q') THEN
602 !
603  DO ielem = 1 , nelem
604  w1(ielem) = w1(ielem)
605  & + c * ( + xa21(ielem) * y(ikle2(ielem))
606  & + xa31(ielem) * y(ikle3(ielem)) )
607  w2(ielem) = w2(ielem)
608  & + c * ( + xa12(ielem) * y(ikle1(ielem))
609  & + xa32(ielem) * y(ikle3(ielem)) )
610  w3(ielem) = w3(ielem)
611  & + c * ( + xa13(ielem) * y(ikle1(ielem))
612  & + xa23(ielem) * y(ikle2(ielem)) )
613  w4(ielem) = w4(ielem)
614  & + c * ( + xa14(ielem) * y(ikle1(ielem))
615  & + xa24(ielem) * y(ikle2(ielem))
616  & + xa34(ielem) * y(ikle3(ielem)) )
617  w5(ielem) = w5(ielem)
618  & + c * ( + xa15(ielem) * y(ikle1(ielem))
619  & + xa25(ielem) * y(ikle2(ielem))
620  & + xa35(ielem) * y(ikle3(ielem)) )
621  w6(ielem) = w6(ielem)
622  & + c * ( + xa16(ielem) * y(ikle1(ielem))
623  & + xa26(ielem) * y(ikle2(ielem))
624  & + xa36(ielem) * y(ikle3(ielem)) )
625  ENDDO ! IELEM
626 !
627  ELSEIF(typext(1:1).NE.'0') THEN
628 !
629  WRITE(lu,1001) typext
630  CALL plante(1)
631  stop
632 !
633  ENDIF
634 !
635 ! CONTRIBUTION OF THE DIAGONAL
636 !
637  IF(typdia(1:1).EQ.'Q') THEN
638  CALL ov ('X=X+CYZ ', x , y , da , c , npoin )
639  ELSEIF(typdia(1:1).EQ.'I') THEN
640  CALL ov ('X=X+CY ', x , y , z , c , npoin )
641  ELSEIF(typdia(1:1).NE.'0') THEN
642  WRITE(lu,2001) typdia
643  CALL plante(1)
644  stop
645  ENDIF
646 !
647 !-----------------------------------------------------------------------
648 !
649  ELSE
650 !
651  WRITE(lu,3001) op
652  CALL plante(1)
653  stop
654 !
655 !-----------------------------------------------------------------------
656 !
657  ENDIF
658 !
659 !-----------------------------------------------------------------------
660 !
661  RETURN
662 !
663 1001 FORMAT(1x,'MV0306 (BIEF) : EXTRADIAG. TERMS UNKNOWN TYPE : ',a1)
664 2001 FORMAT(1x,'MV0306 (BIEF) : DIAGONAL : UNKNOWN TYPE : ',a1)
665 3001 FORMAT(1x,'MV0306 (BIEF) : UNKNOWN OPERATION : ',a8)
666 !
667 !-----------------------------------------------------------------------
668 !
669  END
subroutine ov(OP, X, Y, Z, C, DIM1)
Definition: ov.f:7
subroutine mv0306(OP, X, DA, TYPDIA, XA12, XA13, XA14, XA15, XA16, XA21, XA23, XA24, XA25, XA26, XA31, XA32, XA34, XA35, XA36, TYPEXT, Y, C, IKLE1, IKLE2, IKLE3, IKLE4, IKLE5, IKLE6, NPOIN, NPT2, NELEM, W1, W2, W3, W4, W5, W6)
Definition: mv0306.f:12
Definition: bief.f:3