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