1
!-------------------------------------------------------------------------------
6
! This file is part of the Code_Saturne Kernel, element of the
7
! Code_Saturne CFD tool.
9
! Copyright (C) 1998-2008 EDF S.A., France
11
! contact: saturne-support@edf.fr
13
! The Code_Saturne Kernel is free software; you can redistribute it
14
! and/or modify it under the terms of the GNU General Public License
15
! as published by the Free Software Foundation; either version 2 of
16
! the License, or (at your option) any later version.
18
! The Code_Saturne Kernel is distributed in the hope that it will be
19
! useful, but WITHOUT ANY WARRANTY; without even the implied warranty
20
! of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
! GNU General Public License for more details.
23
! You should have received a copy of the GNU General Public License
24
! along with the Code_Saturne Kernel; if not, write to the
25
! Free Software Foundation, Inc.,
26
! 51 Franklin St, Fifth Floor,
27
! Boston, MA 02110-1301 USA
29
!-------------------------------------------------------------------------------
35
ndim , ncelet , ncel , nfac , nfabor , nfml , nprfml , &
36
nnod , lndfac , lndfbr , ncelbr , &
37
nvar , nscal , nphas , &
38
nbpmax , nvp , nvp1 , nvep , nivep , &
39
ntersl , nvlsta , nvisbr , &
40
nideve , nrdeve , nituse , nrtuse , &
41
ifacel , ifabor , ifmfbr , ifmcel , iprfml , &
42
ipnfac , nodfac , ipnfbr , nodfbr , itepa , &
43
idevel , ituser , ia , &
44
xyzcen , surfac , surfbo , cdgfac , cdgfbo , xyznod , volume , &
45
dt , rtpa , rtp , propce , propfa , propfb , &
47
ettp , ettpa , tepa , taup , tlag , tempct , &
50
rdevel , rtuser , ra )
52
!===============================================================================
56
! SOUS-PROGRAMME DU MODULE LAGRANGIEN :
57
! -----------------------------------
59
! SOUS-PROGRAMME UTILISATEUR (INTERVENTION NON OBLIGATOIRE)
61
! MODIFICATIONS UTILSATEUR SUR LES VARIABLES EN FIN D'ITERATION
62
! LAGRANGIENNES ET CALCUL DES STATISTIQUES UTILISATEUR
63
! SUPPLEMENTAIRES SUR LES PARTICULES
65
! POUR LES STATISTIQUES UTILISATEUR SUPPLEMENTAIRES,
68
! ISTTIO = 0 : calcul instationnaire pour le lagrangien
69
! = 1 : calcul stationnaire pour le lagrangien
71
! ISTALA : calcul statistiques si >= 1 sinon pas de stat
73
! ISUIST : suite calcul statistiques si >= 1 sinon pas de stat
75
! IDSTNT : Numero du pas de temps pour debut statistque
77
! NSTIST : iteration Lagrangienne du debut calcul stationnaire
79
! NPST : nombre d'iterations de calcul de stat stationnaires
81
! NPSTT : nombre d'iterations total des stats depuis le debut
82
! du calcul, partie instationnaire comprise
84
! TSTAT : Temps physique d'enregistrement des stats volumiques
86
! (en instationnaire TSTAT=DTP le pas de temps Lagrangien)
88
!-------------------------------------------------------------------------------
90
!__________________.____._____.________________________________________________.
91
! nom !type!mode ! role !
92
!__________________!____!_____!________________________________________________!
93
! idbia0 ! e ! <-- ! numero de la 1ere case libre dans ia !
94
! idbra0 ! e ! <-- ! numero de la 1ere case libre dans ra !
95
! ndim ! e ! <-- ! dimension de l'espace !
96
! ncelet ! e ! <-- ! nombre d'elements halo compris !
97
! ncel ! e ! <-- ! nombre d'elements actifs !
98
! nfac ! e ! <-- ! nombre de faces internes !
99
! nfabor ! e ! <-- ! nombre de faces de bord !
100
! nfml ! e ! <-- ! nombre de familles d entites !
101
! nprfml ! e ! <-- ! nombre de proprietese des familles !
102
! nnod ! e ! <-- ! nombre de sommets !
103
! lndfac ! e ! <-- ! longueur du tableau nodfac !
104
! lndfbr ! e ! <-- ! longueur du tableau nodfbr !
105
! ncelbr ! e ! <-- ! nombre d'elements ayant au moins une !
106
! ! ! ! face de bord !
107
! nvar ! e ! <-- ! nombre total de variables !
108
! nscal ! e ! <-- ! nombre total de scalaires !
109
! nphas ! e ! <-- ! nombre de phases !
110
! nbpmax ! e ! <-- ! nombre max de particulies autorise !
111
! nvp ! e ! <-- ! nombre de variables particulaires !
112
! nvp1 ! e ! <-- ! nvp sans position, vfluide, vpart !
113
! nvep ! e ! <-- ! nombre info particulaires (reels) !
114
! nivep ! e ! <-- ! nombre info particulaires (entiers) !
115
! ntersl ! e ! <-- ! nbr termes sources de couplage retour !
116
! nvlsta ! e ! <-- ! nombre de var statistiques lagrangien !
117
! nvisbr ! e ! <-- ! nombre de statistiques aux frontieres !
118
! nideve nrdeve ! e ! <-- ! longueur de idevel rdevel !
119
! nituse nrtuse ! e ! <-- ! longueur de ituser rtuser !
120
! ifacel ! te ! <-- ! elements voisins d'une face interne !
122
! ifabor ! te ! <-- ! element voisin d'une face de bord !
124
! ifmfbr ! te ! <-- ! numero de famille d'une face de bord !
126
! ifmcel ! te ! <-- ! numero de famille d'une cellule !
128
! iprfml ! te ! <-- ! proprietes d'une famille !
129
! nfml ,nprfml ! ! ! !
130
! ipnfac ! te ! <-- ! position du premier noeud de chaque !
131
! (nfac+1) ! ! ! face interne dans nodfac (optionnel) !
132
! nodfac ! te ! <-- ! connectivite faces internes/noeuds !
133
! (lndfac) ! ! ! (optionnel) !
134
! ipnfbr ! te ! <-- ! position du premier noeud de chaque !
135
! (nfabor+1) ! ! ! face de bord dans nodfbr (optionnel) !
136
! nodfbr ! te ! <-- ! connectivite faces de bord/noeuds !
137
! (lndfbr ) ! ! ! (optionnel) !
138
! itepa ! te ! <-- ! info particulaires (entiers) !
139
! (nbpmax,nivep ! ! ! (cellule de la particule,...) !
140
! idevel(nideve ! te ! <-- ! tab entier complementaire developemt !
141
! ituser(nituse ! te ! <-- ! tab entier complementaire utilisateur !
142
! ia(*) ! tr ! --- ! macro tableau entier !
143
! xyzcen ! tr ! <-- ! point associes aux volumes de control !
144
! (ndim,ncelet ! ! ! !
145
! surfac ! tr ! <-- ! vecteur surface des faces internes !
146
! (ndim,nfac) ! ! ! !
147
! surfbo ! tr ! <-- ! vecteur surface des faces de bord !
148
! (ndim,nfabor) ! ! ! !
149
! cdgfac ! tr ! <-- ! centre de gravite des faces internes !
150
! (ndim,nfac) ! ! ! !
151
! cdgfbo ! tr ! <-- ! centre de gravite des faces de bord !
152
! (ndim,nfabor) ! ! ! !
153
! xyznod ! tr ! <-- ! coordonnes des noeuds !
154
! (ndim,nnod) ! ! ! !
155
! volume(ncelet ! tr ! <-- ! volume d'un des ncelet elements !
156
! dt(ncelet) ! tr ! <-- ! pas de temps !
157
! rtp, rtpa ! tr ! <-- ! variables de calcul au centre des !
158
! (ncelet,*) ! ! ! cellules (instant courant ou prec) !
159
! propce ! tr ! <-- ! proprietes physiques au centre des !
160
! (ncelet,*) ! ! ! cellules !
161
! propfa ! tr ! <-- ! proprietes physiques au centre des !
162
! (nfac,*) ! ! ! faces internes !
163
! propfb ! tr ! <-- ! proprietes physiques au centre des !
164
! (nfabor,*) ! ! ! faces de bord !
165
! coefa, coefb ! tr ! <-- ! conditions aux limites aux !
166
! (nfabor,*) ! ! ! faces de bord !
167
! ettp ! tr ! <-- ! tableaux des variables liees !
168
! (nbpmax,nvp) ! ! ! aux particules etape courante !
169
! ettpa ! tr ! <-- ! tableaux des variables liees !
170
! (nbpmax,nvp) ! ! ! aux particules etape precedente !
171
! tepa(nbpmax, ! tr ! <-- ! caracteristiques des particules !
172
! nvep) ! ! ! aux particules (poids, ...) !
173
! taup(nbpmax) ! tr ! <-- ! temps caracteristique dynamique !
174
! tlag(nbpmax) ! tr ! <-- ! temps caracteristique fluide !
175
! tempct ! tr ! <-- ! temps caracteristique thermique !
177
! statis ! tr ! <-- ! cumul pour les moyennes des !
178
!(ncelet,nvlsta ! ! ! statistiques volumiques !
179
! stativ ! tr ! <-- ! cumul pour les variances des !
180
!(ncelet, ! ! ! statistiques volumiques !
182
! w1..w3(ncelet ! tr ! --- ! tableaux de travail !
183
! rdevel(nrdeve ! tr ! <-- ! tab reel complementaire developemt !
184
! rtuser(nrtuse ! tr ! <-- ! tab reel complementaire utilisateur !
185
! ra(*) ! tr ! --- ! macro tableau reel !
186
!__________________!____!_____!________________________________________________!
188
! TYPE : E (ENTIER), R (REEL), A (ALPHANUMERIQUE), T (TABLEAU)
189
! L (LOGIQUE) .. ET TYPES COMPOSES (EX : TR TABLEAU REEL)
190
! MODE : <-- donnee, --> resultat, <-> Donnee modifiee
191
! --- tableau de travail
193
!===============================================================================
197
!===============================================================================
199
!===============================================================================
214
!===============================================================================
218
integer idbia0 , idbra0
219
integer ndim , ncelet , ncel , nfac , nfabor
220
integer nfml , nprfml
221
integer nnod , lndfac , lndfbr , ncelbr
222
integer nvar , nscal , nphas
223
integer nbpmax , nvp , nvp1 , nvep , nivep
224
integer ntersl , nvlsta , nvisbr
225
integer nideve , nrdeve , nituse , nrtuse
226
integer ifacel(2,nfac) , ifabor(nfabor)
227
integer ifmfbr(nfabor) , ifmcel(ncelet)
228
integer iprfml(nfml,nprfml)
229
integer ipnfac(nfac+1) , nodfac(lndfac)
230
integer ipnfbr(nfabor+1) , nodfbr(lndfbr)
231
integer itepa(nbpmax,nivep)
232
integer idevel(nideve), ituser(nituse)
235
double precision xyzcen(ndim,ncelet)
236
double precision surfac(ndim,nfac) , surfbo(ndim,nfabor)
237
double precision cdgfac(ndim,nfac) , cdgfbo(ndim,nfabor)
238
double precision xyznod(ndim,nnod) , volume(ncelet)
239
double precision dt(ncelet) , rtp(ncelet,*) , rtpa(ncelet,*)
240
double precision propce(ncelet,*)
241
double precision propfa(nfac,*) , propfb(nfabor,*)
242
double precision coefa(nfabor,*) , coefb(nfabor,*)
243
double precision ettp(nbpmax,nvp) , ettpa(nbpmax,nvp)
244
double precision tepa(nbpmax,nvep)
245
double precision taup(nbpmax) , tlag(nbpmax,3) , tempct(nbpmax,2)
246
double precision statis(ncelet,nvlsta)
247
double precision stativ(ncelet,nvlsta-1)
248
double precision w1(ncelet), w2(ncelet), w3(ncelet)
249
double precision rdevel(nrdeve) , rtuser(nrtuse)
250
double precision ra(*)
254
integer idebia , idebra
255
integer ifinia, ifinra
256
integer npt , iel , iphas
258
integer ivf , ivff , itabvr , iflu , icla
260
! VARIABLES LOCALES UTILISATEUR
263
parameter (nxlist=100)
267
integer inoeud, irang0, indic
270
double precision zz(4), zzz(8), xlist(nxlist,8), xyzpt(3)
274
double precision debm(4)
277
!===============================================================================
280
! TEST_TO_REMOVE_FOR_USE_OF_SUBROUTINE_START
282
if(istala.eq.1 .and. iplas.ge.idstnt .and. nvlsts.gt.0) then
284
! Si l'on passe ici, il faut que l'utilisateur complete
285
! l'exemple ci-dessous et l'adapte...
288
write(nfecra,9000)nvlsts
294
'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@',/,&
296
'@ @@ ATTENTION : ARRET DANS LE MODULE LAGRANGIEN ',/,&
298
'@ LE SOUS-PROGRAMME UTILISATEUR uslast DOIT ETRE COMPLETE',/,&
300
'@ Le calcul ne sera pas execute. ',/,&
302
'@ Des variables statistiques supplementaires ont ete ',/,&
303
'@ demandees dans uslag1 (NVLSTS=', I10,') ',/,&
304
'@ Le sous-programme uslast doit etre complete pour preciser ',/,&
305
'@ le calcul de leur cumul. ',/,&
307
'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@',/,&
312
! On entre toujours dans ce sous programme en lagrangien,
313
! si on ne souhaite rien y faire, on sort immediatement.
319
! TEST_TO_REMOVE_FOR_USE_OF_SUBROUTINE_END
322
!===============================================================================
324
!===============================================================================
329
!===============================================================================
331
!===============================================================================
335
!===============================================================================
336
! 2 - CALCUL DES STATISTIQUES PARTICULAIRES UTILISATEURS
337
!===============================================================================
339
! D'une facon generale, dans cette routine on realise les cumuls
340
! de la quantite dont on souhaite faire les statistiques.
341
! La moyenne et la variance sont calculees dans la routine
342
! USLAEN.F. Ce calcul est le plus souvent obtenu par division
343
! des cumuls soit par le temps du cumul stationnaire contenu dans
344
! la variable TSTAT, soit par le nombre de particules en poids
345
! statistiques. Cette division est appliquee pour chaque ecriture
346
! dans le listing et pour les sorties post-processing.
348
! Cet exemple est desactive et doit etre adapte au cas traite
352
if(istala.eq.1 .and. iplas.ge.idstnt .and. nvlsts.gt.0) then
356
if( itepa(npt,jisor).gt.0 ) then
358
iel = itepa(npt,jisor)
360
! -------------------------------------------------
361
! EXEMPLE 1 : Cumul pour la concentration massique
362
! -------------------------------------------------
364
statis(iel,ilvu(1)) = statis(iel,ilvu(1)) &
365
+ tepa(npt,jrpoi) *ettp(npt,jmp)
367
stativ(iel,ilvu(1)) = stativ(iel,ilvu(1)) &
368
+ tepa(npt,jrpoi) *ettp(npt,jmp) *ettp(npt,jmp)
378
!===============================================================================
379
! 3 - CALCUL UTILISATEUR DU DEBIT MASSIQUE DE PARTICULES SUR 4 PLANS
380
!===============================================================================
382
! Cet exemple est desactive et doit etre adapte au cas traite
391
! Si on est en instationnaire, ou si le debut des stat stationnaires
392
! n'est pas encore atteint, toutes les statistiques sont remises a
393
! zero a chaque pas de temps avant d'entrer dans ce sous-programme.
395
if(isttio.eq.0 .or. npstt.le.nstist) then
405
if(itepa(npt,jisor).gt.0) then
407
iel = itepa(npt,jisor)
409
if( ettp(npt,jxp).gt.zz(iplan) .and. &
410
ettpa(npt,jxp).le.zz(iplan) ) then
411
debm(iplan) = debm(iplan) +tepa(npt,jrpoi)*ettp(npt,jmp)
420
write(nfecra,1001)iplan,debm(iplan)/tstat
423
1001 format(' Debit massique particulaire en Z(',I10,') : ',E14.5)
428
!===============================================================================
429
! 4 - EXTRACTION DE STATISTIQUES VOLUMIQUES EN FIN DE CALCUL
430
!===============================================================================
432
! Cet exemple est desactive et doit etre adapte au cas traite
436
if(ntcabs.eq.ntmabs) then
465
ifinra = itabvr + ncelet
466
CALL RASIZE('USLAST',IFINRA)
471
! Pour le fichier ci-dessous :
472
! l'utilisateur verifiera qu'il n'a pas laisse ouverte l'unite
473
! IMPUSR(1), dans un autre sous-programme utilisateur
474
OPEN(FILE=NAME(IPLAN),UNIT=IMPUSR(1),FORM='formatted')
476
xyzpt(1) = zzz(iplan)
486
( ifinia , ifinra , &
487
ndim , ncelet , ncel , nfac , nfabor , nfml , nprfml , &
488
nnod , lndfac , lndfbr , ncelbr , &
489
nvar , nscal , nphas , nvlsta , &
490
nideve , nrdeve , nituse , nrtuse , &
491
ivff , ivff , ivff , iflu , ilpd , icla , &
492
ifacel , ifabor , ifmfbr , ifmcel , iprfml , &
493
ipnfac , nodfac , ipnfbr , nodfbr , &
494
idevel , ituser , ia , &
495
xyzcen , surfac , surfbo , cdgfac , cdgfbo , xyznod , volume , &
496
dt , rtpa , rtp , propce , propfa , propfb , &
497
coefa , coefb , statis , stativ , ra(itabvr) , &
498
rdevel , rtuser , ra )
504
xyzpt(3) = float(ii-1)/float(npts-1)*150.d-3
508
(ncelet, ncel, xyzcen, &
509
xyzpt(1), xyzpt(2), xyzpt(3), inoeud, irang0)
511
indic = ituser(inoeud)
515
xlist(ind,1) = xyzcen(1,inoeud)
516
xlist(ind,2) = xyzcen(3,inoeud) * (1.d3 / 5.d0)
517
xlist(ind,ivf+2) = ra(itabvr+inoeud-1)
523
WRITE (IMPUSR(1),'(8E13.5)') (XLIST(IL,II), II=1,6)
536
!===============================================================================