1
!-------------------------------------------------------------------------------
3
! This file is part of the Code_Saturne Kernel, element of the
4
! Code_Saturne CFD tool.
6
! Copyright (C) 1998-2009 EDF S.A., France
8
! contact: saturne-support@edf.fr
10
! The Code_Saturne Kernel is free software; you can redistribute it
11
! and/or modify it under the terms of the GNU General Public License
12
! as published by the Free Software Foundation; either version 2 of
13
! the License, or (at your option) any later version.
15
! The Code_Saturne Kernel is distributed in the hope that it will be
16
! useful, but WITHOUT ANY WARRANTY; without even the implied warranty
17
! of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
! GNU General Public License for more details.
20
! You should have received a copy of the GNU General Public License
21
! along with the Code_Saturne Kernel; if not, write to the
22
! Free Software Foundation, Inc.,
23
! 51 Franklin St, Fifth Floor,
24
! Boston, MA 02110-1301 USA
26
!-------------------------------------------------------------------------------
31
( ncelet , ncel , nfac , isym , iinvpe , &
32
ifacel , xa , vx , vy )
34
!===============================================================================
38
! PRODUIT MATRICE VECTEUR Y = (XA).X
40
!-------------------------------------------------------------------------------
42
!__________________.____._____.________________________________________________.
43
! name !type!mode ! role !
44
!__________________!____!_____!________________________________________________!
45
! ncelet ! i ! <-- ! number of extended (real + ghost) cells !
46
! ncel ! i ! <-- ! number of cells !
47
! nfac ! i ! <-- ! number of interior faces !
48
! isym ! e ! <-- ! indicateur = 1 matrice symetrique !
49
! ! ! ! = 2 matrice non symetrique !
50
! iinvpe ! e ! <-- ! indicateur pour annuler les increment !
51
! ! ! ! en periodicite de rotation (=2) ou !
52
! ! ! ! pour les echanger normalement de !
53
! ! ! ! maniere scalaire (=1) !
54
! ifacel(2,nfac ! te ! <-- ! no des elts voisins d'une face intern !
55
! xa(nfac,isym) ! tr ! <-- ! extra diagonale de la matrice !
56
! vx(ncelet ! tr ! <-- ! vecteur a multiplier !
57
! vy(ncelet ! tr ! --> ! vecteur resultat !
58
!__________________!____!_____!________________________________________________!
60
! TYPE : E (ENTIER), R (REEL), A (ALPHANUMERIQUE), T (TABLEAU)
61
! L (LOGIQUE) .. ET TYPES COMPOSES (EX : TR TABLEAU REEL)
62
! MODE : <-- donnee, --> resultat, <-> Donnee modifiee
63
! --- tableau de travail
64
!===============================================================================
68
!===============================================================================
70
!===============================================================================
77
!===============================================================================
82
integer ncelet , ncel , nfac , isym , iinvpe
83
integer ifacel(2,nfac)
84
double precision xa(nfac,isym),vx(ncelet),vy(ncelet)
88
integer ifac,ii,jj,iel,idimte,itenso
90
!===============================================================================
92
! 1 - PRODUIT MATRICE/VECTEUR PAR LA DIAGONALE
93
! --------------------------------------------
100
! 2 - PRODUIT MATRICE/VECTEUR TERMES X-TRADIAGONAUX
101
! -------------------------------------------------
103
! ---> TRAITEMENT DU PARALLELISME
105
if(irangp.ge.0) call parcom (vx)
108
! --> TRAITEMENT DE LA PERIODICITE
115
( idimte , itenso , &
119
elseif(iinvpe.eq.2) then
124
( idimte , itenso , &
129
! Utile a Codits (produit avec une variable non en increment)
130
elseif(iinvpe.eq.3) then
135
( idimte , itenso , &
145
if (ivecti.eq.1) then
151
vy(ii) = vy(ii) +xa(ifac,1)*vx(jj)
152
vy(jj) = vy(jj) +xa(ifac,1)*vx(ii)
157
! VECTORISATION NON FORCEE
161
vy(ii) = vy(ii) +xa(ifac,1)*vx(jj)
162
vy(jj) = vy(jj) +xa(ifac,1)*vx(ii)
169
if (ivecti.eq.1) then
175
vy(ii) = vy(ii) +xa(ifac,1)*vx(jj)
176
vy(jj) = vy(jj) +xa(ifac,2)*vx(ii)
181
! VECTORISATION NON FORCEE
185
vy(ii) = vy(ii) +xa(ifac,1)*vx(jj)
186
vy(jj) = vy(jj) +xa(ifac,2)*vx(ii)