The TELEMAC-MASCARET system  trunk
om4121.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE om4121
3 ! *****************
4 !
5  &(op , dm,typdim,xm,typexm, dn,typdin,xn,typexn, c,
6  & nulone,nelbor,nbor,nelmax,sizdn,sizxn,szmxn)
7 !
8 !***********************************************************************
9 ! BIEF V6P1 21/08/2010
10 !***********************************************************************
11 !
12 !brief OPERATIONS ON MATRICES.
13 !code
14 !+ M: P1 TRIANGLE
15 !+ N: BOUNDARY MATRIX
16 !+ D: DIAGONAL MATRIX
17 !+ C: CONSTANT
18 !+
19 !+ OP IS A STRING OF 8 CHARACTERS, WHICH INDICATES THE OPERATION TO BE
20 !+ PERFORMED ON MATRICES M AND N, D AND C.
21 !+
22 !+ THE RESULT IS MATRIX M.
23 !+
24 !+ OP = 'M=M+N ' : ADDS N TO M
25 !+ OP = 'M=M+TN ' : ADDS TRANSPOSE(N) TO M
26 !
27 !code
28 !+ CONVENTION FOR THE STORAGE OF EXTRA-DIAGONAL TERMS:
29 !+
30 !+ XM( ,1) ----> M(1,2)
31 !+ XM( ,2) ----> M(1,3)
32 !+ XM( ,3) ----> M(2,3)
33 !+ XM( ,4) ----> M(2,1)
34 !+ XM( ,5) ----> M(3,1)
35 !+ XM( ,6) ----> M(3,2)
36 !
37 !history J-M HERVOUET (LNHE)
38 !+ 23/06/2008
39 !+ V5P9
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 !
54 !history S.E.BOURBAN (HRW)
55 !+ 21/03/2017
56 !+ V7P3
57 !+ Replacement of the DATA declarations by the PARAMETER associates
58 !
59 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
60 !| C |-->| A GIVEN CONSTANT USED IN OPERATION OP
61 !| DM |<->| DIAGONAL OF M
62 !| DN |-->| DIAGONAL OF N
63 !| NBOR |-->| GLOBAL NUMBER OF BOUNDARY POINTS
64 !| NELBOR |-->| FOR THE KTH BOUNDARY EDGE, GIVES THE CORRESPONDING
65 !| | | ELEMENT.
66 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
67 !| NULONE |-->| GOES WITH ARRAY NELBOR. NELBOR GIVES THE
68 !| | | ADJACENT ELEMENT, NULONE GIVES THE LOCAL
69 !| | | NUMBER OF THE FIRST NODE OF THE BOUNDARY EDGE
70 !| | | I.E. 1, 2 OR 3 FOR TRIANGLES.
71 !| OP |-->| OPERATION TO BE DONE (SEE ABOVE)
72 !| SIZDN |-->| SIZE OF DIAGONAL DN
73 !| SIZXN |-->| SIZE OF OFF-DIAGONAL TERMS XN
74 !| SZMDN |-->| MAXIMUM SIZE OF DIAGONAL DN
75 !| SZMXN |-->| MAXIMUM SIZE OF OFF-DIAGONAL TERMS XN
76 !| TYPDIM |<->| TYPE OF DIAGONAL OF M:
77 !| | | TYPDIM = 'Q' : ANY VALUE
78 !| | | TYPDIM = 'I' : IDENTITY
79 !| | | TYPDIM = '0' : ZERO
80 !| TYPDIN |<->| TYPE OF DIAGONAL OF N:
81 !| | | TYPDIN = 'Q' : ANY VALUE
82 !| | | TYPDIN = 'I' : IDENTITY
83 !| | | TYPDIN = '0' : ZERO
84 !| TYPEXM |-->| TYPE OF OFF-DIAGONAL TERMS OF M:
85 !| | | TYPEXM = 'Q' : ANY VALUE
86 !| | | TYPEXM = 'S' : SYMMETRIC
87 !| | | TYPEXM = '0' : ZERO
88 !| TYPEXN |-->| TYPE OF OFF-DIAGONAL TERMS OF N:
89 !| | | TYPEXN = 'Q' : ANY VALUE
90 !| | | TYPEXN = 'S' : SYMMETRIC
91 !| | | TYPEXN = '0' : ZERO
92 !| XM |-->| OFF-DIAGONAL TERMS OF M
93 !| XN |-->| OFF-DIAGONAL TERMS OF N
94 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
95 !
96  USE bief, ex_om4121 => om4121
97 !
99  IMPLICIT NONE
100 !
101 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
102 !
103  INTEGER, INTENT(IN) :: NELMAX,SIZDN,SIZXN,SZMXN
104  CHARACTER(LEN=8), INTENT(IN) :: OP
105  INTEGER, INTENT(IN) :: NULONE(*),NELBOR(*),NBOR(*)
106  DOUBLE PRECISION, INTENT(IN) :: DN(*),XN(szmxn,*)
107  DOUBLE PRECISION, INTENT(INOUT) :: DM(*),XM(nelmax,*)
108  CHARACTER(LEN=1), INTENT(INOUT) :: TYPDIM,TYPEXM,TYPDIN,TYPEXN
109  DOUBLE PRECISION, INTENT(IN) :: C
110 !
111 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
112 !
113  INTEGER K,IEL
114 !
115  DOUBLE PRECISION Z(1)
116 !
117 !-----------------------------------------------------------------------
118 !
119  INTEGER :: CORNSY(3,12)
120  parameter( cornsy = reshape( (/
121  & 1, 6,17, 4, 9,10, 3, 8,12, 8,12, 3, 7,11, 5,
122  & 28,30,14, 16,21, 2, 19,24,25, 18,23,27, 23,27,18,
123  & 22,26,20, 13,15,29 /), shape=(/ 3,12 /) ) )
124  INTEGER :: CORSYM(3,6)
125  parameter( corsym = reshape( (/
126  & 1, 6, 2, 4, 9,10, 3, 8,12, 8,12, 3, 7,11, 5,
127  & 13,15,14 /), shape=(/ 3,6 /) ) )
128 !
129 !***********************************************************************
130 !
131  IF(op(1:8).EQ.'M=M+N ') THEN
132 !
133  IF(typdim.EQ.'Q'.AND.typdin.EQ.'Q') THEN
134  CALL ovdb( 'X=X+Y ' , dm , dn , z , c , nbor , sizdn )
135  ELSE
136  WRITE(lu,199) typdim(1:1),op(1:8),typdin(1:1)
137 199 FORMAT(1x,'OM4121 (BIEF) : TYPDIM = ',a1,' NOT IMPLEMENTED',
138  & /,1x,'FOR THE OPERATION : ',a8,' WITH TYPDIN = ',a1)
139  CALL plante(1)
140  stop
141  ENDIF
142 !
143  IF(typexm(1:1).EQ.'Q'.AND.typexn(1:1).EQ.'Q') THEN
144 !
145 ! CASE WHERE BOTH MATRICES ARE NONSYMMETRICAL
146 !
147  IF(ncsize.GT.1) THEN
148  DO k = 1 , sizxn
149  iel = nelbor(k)
150  IF(iel.GT.0) THEN
151  xm( iel , cornsy(nulone(k), 1) ) =
152  & xm( iel , cornsy(nulone(k), 1) ) + xn(k, 1)
153  xm( iel , cornsy(nulone(k), 2) ) =
154  & xm( iel , cornsy(nulone(k), 2) ) + xn(k, 2)
155  xm( iel , cornsy(nulone(k), 3) ) =
156  & xm( iel , cornsy(nulone(k), 3) ) + xn(k, 3)
157  xm( iel , cornsy(nulone(k), 4) ) =
158  & xm( iel , cornsy(nulone(k), 4) ) + xn(k, 4)
159  xm( iel , cornsy(nulone(k), 5) ) =
160  & xm( iel , cornsy(nulone(k), 5) ) + xn(k, 5)
161  xm( iel , cornsy(nulone(k), 6) ) =
162  & xm( iel , cornsy(nulone(k), 6) ) + xn(k, 6)
163  xm( iel , cornsy(nulone(k), 7) ) =
164  & xm( iel , cornsy(nulone(k), 7) ) + xn(k, 7)
165  xm( iel , cornsy(nulone(k), 8) ) =
166  & xm( iel , cornsy(nulone(k), 8) ) + xn(k, 8)
167  xm( iel , cornsy(nulone(k), 9) ) =
168  & xm( iel , cornsy(nulone(k), 9) ) + xn(k, 9)
169  xm( iel , cornsy(nulone(k),10) ) =
170  & xm( iel , cornsy(nulone(k),10) ) + xn(k,10)
171  xm( iel , cornsy(nulone(k),11) ) =
172  & xm( iel , cornsy(nulone(k),11) ) + xn(k,11)
173  xm( iel , cornsy(nulone(k),12) ) =
174  & xm( iel , cornsy(nulone(k),12) ) + xn(k,12)
175  ENDIF
176  ENDDO
177  ELSE
178  DO k = 1 , sizxn
179  iel = nelbor(k)
180  xm( iel , cornsy(nulone(k), 1) ) =
181  & xm( iel , cornsy(nulone(k), 1) ) + xn(k, 1)
182  xm( iel , cornsy(nulone(k), 2) ) =
183  & xm( iel , cornsy(nulone(k), 2) ) + xn(k, 2)
184  xm( iel , cornsy(nulone(k), 3) ) =
185  & xm( iel , cornsy(nulone(k), 3) ) + xn(k, 3)
186  xm( iel , cornsy(nulone(k), 4) ) =
187  & xm( iel , cornsy(nulone(k), 4) ) + xn(k, 4)
188  xm( iel , cornsy(nulone(k), 5) ) =
189  & xm( iel , cornsy(nulone(k), 5) ) + xn(k, 5)
190  xm( iel , cornsy(nulone(k), 6) ) =
191  & xm( iel , cornsy(nulone(k), 6) ) + xn(k, 6)
192  xm( iel , cornsy(nulone(k), 7) ) =
193  & xm( iel , cornsy(nulone(k), 7) ) + xn(k, 7)
194  xm( iel , cornsy(nulone(k), 8) ) =
195  & xm( iel , cornsy(nulone(k), 8) ) + xn(k, 8)
196  xm( iel , cornsy(nulone(k), 9) ) =
197  & xm( iel , cornsy(nulone(k), 9) ) + xn(k, 9)
198  xm( iel , cornsy(nulone(k),10) ) =
199  & xm( iel , cornsy(nulone(k),10) ) + xn(k,10)
200  xm( iel , cornsy(nulone(k),11) ) =
201  & xm( iel , cornsy(nulone(k),11) ) + xn(k,11)
202  xm( iel , cornsy(nulone(k),12) ) =
203  & xm( iel , cornsy(nulone(k),12) ) + xn(k,12)
204  ENDDO
205  ENDIF
206 !
207  ELSEIF(typexm(1:1).EQ.'Q'.AND.typexn(1:1).EQ.'S') THEN
208 !
209 ! CASE WHERE M CAN BE ANYTHING AND N IS SYMMETRICAL
210 !
211  IF(ncsize.GT.1) THEN
212  DO k = 1 , sizxn
213  iel = nelbor(k)
214  IF(iel.GT.0) THEN
215  xm( iel , cornsy(nulone(k), 1) ) =
216  & xm( iel , cornsy(nulone(k), 1) ) + xn(k, 1)
217  xm( iel , cornsy(nulone(k), 2) ) =
218  & xm( iel , cornsy(nulone(k), 2) ) + xn(k, 2)
219  xm( iel , cornsy(nulone(k), 3) ) =
220  & xm( iel , cornsy(nulone(k), 3) ) + xn(k, 3)
221  xm( iel , cornsy(nulone(k), 4) ) =
222  & xm( iel , cornsy(nulone(k), 4) ) + xn(k, 4)
223  xm( iel , cornsy(nulone(k), 5) ) =
224  & xm( iel , cornsy(nulone(k), 5) ) + xn(k, 5)
225  xm( iel , cornsy(nulone(k), 6) ) =
226  & xm( iel , cornsy(nulone(k), 6) ) + xn(k, 6)
227  xm( iel , cornsy(nulone(k), 7) ) =
228  & xm( iel , cornsy(nulone(k), 7) ) + xn(k, 1)
229  xm( iel , cornsy(nulone(k), 8) ) =
230  & xm( iel , cornsy(nulone(k), 8) ) + xn(k, 2)
231  xm( iel , cornsy(nulone(k), 9) ) =
232  & xm( iel , cornsy(nulone(k), 9) ) + xn(k, 3)
233  xm( iel , cornsy(nulone(k),10) ) =
234  & xm( iel , cornsy(nulone(k),10) ) + xn(k, 4)
235  xm( iel , cornsy(nulone(k),11) ) =
236  & xm( iel , cornsy(nulone(k),11) ) + xn(k, 5)
237  xm( iel , cornsy(nulone(k),12) ) =
238  & xm( iel , cornsy(nulone(k),12) ) + xn(k, 6)
239  ENDIF
240  ENDDO
241  ELSE
242  DO k = 1 , sizxn
243  iel = nelbor(k)
244  xm( iel , cornsy(nulone(k), 1) ) =
245  & xm( iel , cornsy(nulone(k), 1) ) + xn(k, 1)
246  xm( iel , cornsy(nulone(k), 2) ) =
247  & xm( iel , cornsy(nulone(k), 2) ) + xn(k, 2)
248  xm( iel , cornsy(nulone(k), 3) ) =
249  & xm( iel , cornsy(nulone(k), 3) ) + xn(k, 3)
250  xm( iel , cornsy(nulone(k), 4) ) =
251  & xm( iel , cornsy(nulone(k), 4) ) + xn(k, 4)
252  xm( iel , cornsy(nulone(k), 5) ) =
253  & xm( iel , cornsy(nulone(k), 5) ) + xn(k, 5)
254  xm( iel , cornsy(nulone(k), 6) ) =
255  & xm( iel , cornsy(nulone(k), 6) ) + xn(k, 6)
256  xm( iel , cornsy(nulone(k), 7) ) =
257  & xm( iel , cornsy(nulone(k), 7) ) + xn(k, 1)
258  xm( iel , cornsy(nulone(k), 8) ) =
259  & xm( iel , cornsy(nulone(k), 8) ) + xn(k, 2)
260  xm( iel , cornsy(nulone(k), 9) ) =
261  & xm( iel , cornsy(nulone(k), 9) ) + xn(k, 3)
262  xm( iel , cornsy(nulone(k),10) ) =
263  & xm( iel , cornsy(nulone(k),10) ) + xn(k, 4)
264  xm( iel , cornsy(nulone(k),11) ) =
265  & xm( iel , cornsy(nulone(k),11) ) + xn(k, 5)
266  xm( iel , cornsy(nulone(k),12) ) =
267  & xm( iel , cornsy(nulone(k),12) ) + xn(k, 6)
268  ENDDO
269  ENDIF
270 !
271  ELSEIF(typexm(1:1).EQ.'S'.AND.typexn(1:1).EQ.'S') THEN
272 !
273 ! CASE WHERE BOTH MATRICES ARE SYMMETRICAL
274 !
275  IF(ncsize.GT.1) THEN
276  DO k = 1 , sizxn
277  iel = nelbor(k)
278  IF(iel.GT.0) THEN
279  xm( iel , corsym(nulone(k), 1) ) =
280  & xm( iel , corsym(nulone(k), 1) ) + xn(k, 1)
281  xm( iel , corsym(nulone(k), 2) ) =
282  & xm( iel , corsym(nulone(k), 2) ) + xn(k, 2)
283  xm( iel , corsym(nulone(k), 3) ) =
284  & xm( iel , corsym(nulone(k), 3) ) + xn(k, 3)
285  xm( iel , corsym(nulone(k), 4) ) =
286  & xm( iel , corsym(nulone(k), 4) ) + xn(k, 4)
287  xm( iel , corsym(nulone(k), 5) ) =
288  & xm( iel , corsym(nulone(k), 5) ) + xn(k, 5)
289  xm( iel , corsym(nulone(k), 6) ) =
290  & xm( iel , corsym(nulone(k), 6) ) + xn(k, 6)
291  ENDIF
292  ENDDO
293  ELSE
294  DO k = 1 , sizxn
295  iel = nelbor(k)
296  xm( iel , corsym(nulone(k), 1) ) =
297  & xm( iel , corsym(nulone(k), 1) ) + xn(k, 1)
298  xm( iel , corsym(nulone(k), 2) ) =
299  & xm( iel , corsym(nulone(k), 2) ) + xn(k, 2)
300  xm( iel , corsym(nulone(k), 3) ) =
301  & xm( iel , corsym(nulone(k), 3) ) + xn(k, 3)
302  xm( iel , corsym(nulone(k), 4) ) =
303  & xm( iel , corsym(nulone(k), 4) ) + xn(k, 4)
304  xm( iel , corsym(nulone(k), 5) ) =
305  & xm( iel , corsym(nulone(k), 5) ) + xn(k, 5)
306  xm( iel , corsym(nulone(k), 6) ) =
307  & xm( iel , corsym(nulone(k), 6) ) + xn(k, 6)
308  ENDDO
309  ENDIF
310 !
311  ELSE
312  WRITE(lu,99) typexm(1:1),op(1:8),typexn(1:1)
313 99 FORMAT(1x,'OM4121 (BIEF) : TYPEXM = ',a1,' DOES NOT GO',
314  & /,1x,'FOR THE OPERATION : ',a8,' WITH TYPEXN = ',a1)
315  CALL plante(1)
316  stop
317  ENDIF
318 !
319 !-----------------------------------------------------------------------
320 !
321  ELSEIF(op(1:8).EQ.'M=M+TN ') THEN
322 !
323  CALL ovdb( 'X=X+Y ' , dm , dn , z , c , nbor , sizxn )
324 !
325  IF(typexm(1:1).EQ.'Q'.AND.typexn(1:1).EQ.'Q') THEN
326 !
327 ! CASE WHERE BOTH MATRICES ARE NONSYMMETRICAL
328 !
329  IF(ncsize.GT.1) THEN
330  DO k = 1 , sizxn
331  iel = nelbor(k)
332  IF(iel.GT.0) THEN
333  xm( iel , cornsy(nulone(k), 1) ) =
334  & xm( iel , cornsy(nulone(k), 1) ) + xn(k, 7)
335  xm( iel , cornsy(nulone(k), 2) ) =
336  & xm( iel , cornsy(nulone(k), 2) ) + xn(k, 8)
337  xm( iel , cornsy(nulone(k), 3) ) =
338  & xm( iel , cornsy(nulone(k), 3) ) + xn(k, 9)
339  xm( iel , cornsy(nulone(k), 4) ) =
340  & xm( iel , cornsy(nulone(k), 4) ) + xn(k,10)
341  xm( iel , cornsy(nulone(k), 5) ) =
342  & xm( iel , cornsy(nulone(k), 5) ) + xn(k,11)
343  xm( iel , cornsy(nulone(k), 6) ) =
344  & xm( iel , cornsy(nulone(k), 6) ) + xn(k,12)
345  xm( iel , cornsy(nulone(k), 7) ) =
346  & xm( iel , cornsy(nulone(k), 7) ) + xn(k, 1)
347  xm( iel , cornsy(nulone(k), 8) ) =
348  & xm( iel , cornsy(nulone(k), 8) ) + xn(k, 2)
349  xm( iel , cornsy(nulone(k), 9) ) =
350  & xm( iel , cornsy(nulone(k), 9) ) + xn(k, 3)
351  xm( iel , cornsy(nulone(k),10) ) =
352  & xm( iel , cornsy(nulone(k),10) ) + xn(k, 4)
353  xm( iel , cornsy(nulone(k),11) ) =
354  & xm( iel , cornsy(nulone(k),11) ) + xn(k, 5)
355  xm( iel , cornsy(nulone(k),12) ) =
356  & xm( iel , cornsy(nulone(k),12) ) + xn(k, 6)
357  ENDIF
358  ENDDO
359  ELSE
360  DO k = 1 , sizxn
361  iel = nelbor(k)
362  xm( iel , cornsy(nulone(k), 1) ) =
363  & xm( iel , cornsy(nulone(k), 1) ) + xn(k, 7)
364  xm( iel , cornsy(nulone(k), 2) ) =
365  & xm( iel , cornsy(nulone(k), 2) ) + xn(k, 8)
366  xm( iel , cornsy(nulone(k), 3) ) =
367  & xm( iel , cornsy(nulone(k), 3) ) + xn(k, 9)
368  xm( iel , cornsy(nulone(k), 4) ) =
369  & xm( iel , cornsy(nulone(k), 4) ) + xn(k,10)
370  xm( iel , cornsy(nulone(k), 5) ) =
371  & xm( iel , cornsy(nulone(k), 5) ) + xn(k,11)
372  xm( iel , cornsy(nulone(k), 6) ) =
373  & xm( iel , cornsy(nulone(k), 6) ) + xn(k,12)
374  xm( iel , cornsy(nulone(k), 7) ) =
375  & xm( iel , cornsy(nulone(k), 7) ) + xn(k, 1)
376  xm( iel , cornsy(nulone(k), 8) ) =
377  & xm( iel , cornsy(nulone(k), 8) ) + xn(k, 2)
378  xm( iel , cornsy(nulone(k), 9) ) =
379  & xm( iel , cornsy(nulone(k), 9) ) + xn(k, 3)
380  xm( iel , cornsy(nulone(k),10) ) =
381  & xm( iel , cornsy(nulone(k),10) ) + xn(k, 4)
382  xm( iel , cornsy(nulone(k),11) ) =
383  & xm( iel , cornsy(nulone(k),11) ) + xn(k, 5)
384  xm( iel , cornsy(nulone(k),12) ) =
385  & xm( iel , cornsy(nulone(k),12) ) + xn(k, 6)
386  ENDDO
387  ENDIF
388 !
389  ELSEIF(typexm(1:1).EQ.'Q'.AND.typexn(1:1).EQ.'S') THEN
390 !
391 ! CASE WHERE M CAN BE ANYTHING AND N IS SYMMETRICAL
392 !
393  IF(ncsize.GT.1) THEN
394  DO k = 1 , sizxn
395  iel = nelbor(k)
396  IF(iel.GT.0) THEN
397  xm( iel , cornsy(nulone(k), 1) ) =
398  & xm( iel , cornsy(nulone(k), 1) ) + xn(k, 1)
399  xm( iel , cornsy(nulone(k), 2) ) =
400  & xm( iel , cornsy(nulone(k), 2) ) + xn(k, 2)
401  xm( iel , cornsy(nulone(k), 3) ) =
402  & xm( iel , cornsy(nulone(k), 3) ) + xn(k, 3)
403  xm( iel , cornsy(nulone(k), 4) ) =
404  & xm( iel , cornsy(nulone(k), 4) ) + xn(k, 4)
405  xm( iel , cornsy(nulone(k), 5) ) =
406  & xm( iel , cornsy(nulone(k), 5) ) + xn(k, 5)
407  xm( iel , cornsy(nulone(k), 6) ) =
408  & xm( iel , cornsy(nulone(k), 6) ) + xn(k, 6)
409  xm( iel , cornsy(nulone(k), 7) ) =
410  & xm( iel , cornsy(nulone(k), 7) ) + xn(k, 1)
411  xm( iel , cornsy(nulone(k), 8) ) =
412  & xm( iel , cornsy(nulone(k), 8) ) + xn(k, 2)
413  xm( iel , cornsy(nulone(k), 9) ) =
414  & xm( iel , cornsy(nulone(k), 9) ) + xn(k, 3)
415  xm( iel , cornsy(nulone(k),10) ) =
416  & xm( iel , cornsy(nulone(k),10) ) + xn(k, 4)
417  xm( iel , cornsy(nulone(k),11) ) =
418  & xm( iel , cornsy(nulone(k),11) ) + xn(k, 5)
419  xm( iel , cornsy(nulone(k),12) ) =
420  & xm( iel , cornsy(nulone(k),12) ) + xn(k, 6)
421  ENDIF
422  ENDDO
423  ELSE
424  DO k = 1 , sizxn
425  iel = nelbor(k)
426  xm( iel , cornsy(nulone(k), 1) ) =
427  & xm( iel , cornsy(nulone(k), 1) ) + xn(k, 1)
428  xm( iel , cornsy(nulone(k), 2) ) =
429  & xm( iel , cornsy(nulone(k), 2) ) + xn(k, 2)
430  xm( iel , cornsy(nulone(k), 3) ) =
431  & xm( iel , cornsy(nulone(k), 3) ) + xn(k, 3)
432  xm( iel , cornsy(nulone(k), 4) ) =
433  & xm( iel , cornsy(nulone(k), 4) ) + xn(k, 4)
434  xm( iel , cornsy(nulone(k), 5) ) =
435  & xm( iel , cornsy(nulone(k), 5) ) + xn(k, 5)
436  xm( iel , cornsy(nulone(k), 6) ) =
437  & xm( iel , cornsy(nulone(k), 6) ) + xn(k, 6)
438  xm( iel , cornsy(nulone(k), 7) ) =
439  & xm( iel , cornsy(nulone(k), 7) ) + xn(k, 1)
440  xm( iel , cornsy(nulone(k), 8) ) =
441  & xm( iel , cornsy(nulone(k), 8) ) + xn(k, 2)
442  xm( iel , cornsy(nulone(k), 9) ) =
443  & xm( iel , cornsy(nulone(k), 9) ) + xn(k, 3)
444  xm( iel , cornsy(nulone(k),10) ) =
445  & xm( iel , cornsy(nulone(k),10) ) + xn(k, 4)
446  xm( iel , cornsy(nulone(k),11) ) =
447  & xm( iel , cornsy(nulone(k),11) ) + xn(k, 5)
448  xm( iel , cornsy(nulone(k),12) ) =
449  & xm( iel , cornsy(nulone(k),12) ) + xn(k, 6)
450  ENDDO
451  ENDIF
452 !
453  ELSEIF(typexm(1:1).EQ.'S'.AND.typexn(1:1).EQ.'S') THEN
454 !
455 ! CASE WHERE BOTH MATRICES ARE SYMMETRICAL
456 !
457  IF(ncsize.GT.1) THEN
458  DO k = 1 , sizxn
459  iel = nelbor(k)
460  IF(iel.GT.0) THEN
461  xm( iel , corsym(nulone(k), 1) ) =
462  & xm( iel , corsym(nulone(k), 1) ) + xn(k, 1)
463  xm( iel , corsym(nulone(k), 2) ) =
464  & xm( iel , corsym(nulone(k), 2) ) + xn(k, 2)
465  xm( iel , corsym(nulone(k), 3) ) =
466  & xm( iel , corsym(nulone(k), 3) ) + xn(k, 3)
467  xm( iel , corsym(nulone(k), 4) ) =
468  & xm( iel , corsym(nulone(k), 4) ) + xn(k, 4)
469  xm( iel , corsym(nulone(k), 5) ) =
470  & xm( iel , corsym(nulone(k), 5) ) + xn(k, 5)
471  xm( iel , corsym(nulone(k), 6) ) =
472  & xm( iel , corsym(nulone(k), 6) ) + xn(k, 6)
473  ENDIF
474  ENDDO
475  ELSE
476  DO k = 1 , sizxn
477  iel = nelbor(k)
478  xm( iel , corsym(nulone(k), 1) ) =
479  & xm( iel , corsym(nulone(k), 1) ) + xn(k, 1)
480  xm( iel , corsym(nulone(k), 2) ) =
481  & xm( iel , corsym(nulone(k), 2) ) + xn(k, 2)
482  xm( iel , corsym(nulone(k), 3) ) =
483  & xm( iel , corsym(nulone(k), 3) ) + xn(k, 3)
484  xm( iel , corsym(nulone(k), 4) ) =
485  & xm( iel , corsym(nulone(k), 4) ) + xn(k, 4)
486  xm( iel , corsym(nulone(k), 5) ) =
487  & xm( iel , corsym(nulone(k), 5) ) + xn(k, 5)
488  xm( iel , corsym(nulone(k), 6) ) =
489  & xm( iel , corsym(nulone(k), 6) ) + xn(k, 6)
490  ENDDO
491  ENDIF
492 !
493  ELSE
494  WRITE(lu,99) typexm(1:1),op(1:8),typexn(1:1)
495  CALL plante(1)
496  stop
497  ENDIF
498 !
499 !-----------------------------------------------------------------------
500 !
501  ELSE
502 !
503  WRITE(lu,71) op
504 71 FORMAT(1x,'OM4121 (BIEF) : UNKNOWN OPERATION : ',a8)
505  CALL plante(1)
506  stop
507 !
508  ENDIF
509 !
510 !-----------------------------------------------------------------------
511 !
512  RETURN
513  END
subroutine om4121(OP, DM, TYPDIM, XM, TYPEXM, DN, TYPDIN, XN, TYPEXN, C, NULONE, NELBOR, NBOR, NELMAX, SIZDN, SIZXN, SZMXN)
Definition: om4121.f:8
subroutine ovdb(OP, X, Y, Z, C, NBOR, NPTFR)
Definition: ovdb.f:7
Definition: bief.f:3