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
!-------------------------------------------------------------------------------
32
ndim , ncelet , ncel , nfac , nfabor , nfml , nprfml , &
33
nnod , lndfac , lndfbr , ncelbr , &
34
nvar , nscal , nphas , ncepdp , ncesmp , &
35
nideve , nrdeve , nituse , nrtuse , iscal , &
36
ifacel , ifabor , ifmfbr , ifmcel , iprfml , &
37
ipnfac , nodfac , ipnfbr , nodfbr , icepdc , icetsm , itypsm , &
39
idevel , ituser , ia , &
40
xyzcen , surfac , surfbo , cdgfac , cdgfbo , xyznod , volume , &
41
dt , rtpa , rtp , propce , propfa , propfb , &
42
coefa , coefb , ckupdc , smacel , &
44
viscf , viscb , xam , &
45
w1 , w2 , w3 , w4 , w5 , &
46
w6 , w7 , w8 , w9 , w10 , w11 , &
47
rdevel , rtuser , ra )
49
!===============================================================================
54
! CALCUL DES TERMES SOURCES POUR LE SCALAIRE ISCAL
56
! SOUS-PROGRAMME SPECIFIQUE A MATISSE (COPIE DE USTSSC)
58
! LES SEULS SCALAIRES TRAITES SONT
59
! ISCA(ITAAMT) TEMPERATURE DE L'AIR
60
! ISCA(ITPCMT) TEMPERATURE DE PEAU DES COLIS
61
! ISCA(ITPPMT) TEMPERATURE DE PEAU DES MURS
64
! ON RESOUT RHO*VOLUME*D(VAR)/DT = CRVIMP*VAR + CRVEXP
66
! ON FOURNIT ICI CRVIMP ET CRVEXP (ILS CONTIENNENT RHO*VOLUME)
67
! CRVEXP en kg variable/s :
68
! ex : pour les temperatures kg degres/s
69
! pour les enthalpies Joules/s
72
! VEILLER A UTILISER UN CRVIMP NEGATIF
73
! (ON IMPLICITERA CRVIMP
74
! IE SUR LA DIAGONALE DE LA MATRICE, LE CODE AJOUTERA :
75
! MAX(-CRVIMP,0) EN SCHEMA STANDARD EN TEMPS
76
! -CRVIMP SI LES TERMES SOURCES SONT A L'ORDRE 2
78
! CES TABLEAUX SONT INITIALISES A ZERO AVANT APPEL A CE SOUS
79
! PROGRAMME ET AJOUTES ENSUITE AUX TABLEAUX PRIS EN COMPTE
82
! EN CAS D'ORDRE 2 DEMANDE SUR LES TERMES SOURCES, ON DOIT
83
! FOURNIR CRVEXP A L'INSTANT N (IL SERA EXTRAPOLE) ET
84
! CRVIMP A L'INSTANT N+1/2 (IL EST DANS LA MATRICE,
85
! ON LE SUPPOSE NEGATIF)
87
!-------------------------------------------------------------------------------
89
!__________________.____._____.________________________________________________.
90
! name !type!mode ! role !
91
!__________________!____!_____!________________________________________________!
92
! idbia0 ! i ! <-- ! number of first free position in ia !
93
! idbra0 ! i ! <-- ! number of first free position in ra !
94
! ndim ! i ! <-- ! spatial dimension !
95
! ncelet ! i ! <-- ! number of extended (real + ghost) cells !
96
! ncel ! i ! <-- ! number of cells !
97
! nfac ! i ! <-- ! number of interior faces !
98
! nfabor ! i ! <-- ! number of boundary faces !
99
! nfml ! i ! <-- ! number of families (group classes) !
100
! nprfml ! i ! <-- ! number of properties per family (group class) !
101
! nnod ! i ! <-- ! number of vertices !
102
! lndfac ! i ! <-- ! size of nodfac indexed array !
103
! lndfbr ! i ! <-- ! size of nodfbr indexed array !
104
! ncelbr ! i ! <-- ! number of cells with faces on boundary !
105
! nvar ! i ! <-- ! total number of variables !
106
! nscal ! i ! <-- ! total number of scalars !
107
! nphas ! i ! <-- ! number of phases !
108
! ncepdp ! i ! <-- ! number of cells with head loss !
109
! ncesmp ! i ! <-- ! number of cells with mass source term !
110
! nideve, nrdeve ! i ! <-- ! sizes of idevel and rdevel arrays !
111
! nituse, nrtuse ! i ! <-- ! sizes of ituser and rtuser arrays !
112
! iscal ! i ! <-- ! scalar number !
113
! ifacel(2, nfac) ! ia ! <-- ! interior faces -> cells connectivity !
114
! ifabor(nfabor) ! ia ! <-- ! boundary faces -> cells connectivity !
115
! ifmfbr(nfabor) ! ia ! <-- ! boundary face family numbers !
116
! ifmcel(ncelet) ! ia ! <-- ! cell family numbers !
117
! iprfml ! ia ! <-- ! property numbers per family !
118
! (nfml, nprfml) ! ! ! !
119
! ipnfac(nfac+1) ! ia ! <-- ! interior faces -> vertices index (optional) !
120
! nodfac(lndfac) ! ia ! <-- ! interior faces -> vertices list (optional) !
121
! ipnfbr(nfabor+1) ! ia ! <-- ! boundary faces -> vertices index (optional) !
122
! nodfbr(lndfbr) ! ia ! <-- ! boundary faces -> vertices list (optional) !
123
! icepdc(ncelet ! te ! <-- ! numero des ncepdp cellules avec pdc !
124
! icetsm(ncesmp ! te ! <-- ! numero des cellules a source de masse !
125
! itypsm ! te ! <-- ! type de source de masse pour les !
126
! (ncesmp,nvar) ! ! ! variables (cf. ustsma) !
127
! iconra ! te ! <-- ! tab de connectivite pour !
128
! (ncelet+1) ! ! ! le rayonnement et les panaches !
129
! idevel(nideve) ! ia ! <-> ! integer work array for temporary development !
130
! ituser(nituse) ! ia ! <-> ! user-reserved integer work array !
131
! ia(*) ! ia ! --- ! main integer work array !
132
! xyzcen ! ra ! <-- ! cell centers !
133
! (ndim, ncelet) ! ! ! !
134
! surfac ! ra ! <-- ! interior faces surface vectors !
135
! (ndim, nfac) ! ! ! !
136
! surfbo ! ra ! <-- ! boundary faces surface vectors !
137
! (ndim, nfabor) ! ! ! !
138
! cdgfac ! ra ! <-- ! interior faces centers of gravity !
139
! (ndim, nfac) ! ! ! !
140
! cdgfbo ! ra ! <-- ! boundary faces centers of gravity !
141
! (ndim, nfabor) ! ! ! !
142
! xyznod ! ra ! <-- ! vertex coordinates (optional) !
143
! (ndim, nnod) ! ! ! !
144
! volume(ncelet) ! ra ! <-- ! cell volumes !
145
! dt(ncelet) ! ra ! <-- ! time step (per cell) !
146
! rtp, rtpa ! ra ! <-- ! calculated variables at cell centers !
147
! (ncelet, *) ! ! ! (at current and previous time steps) !
148
! propce(ncelet, *)! ra ! <-- ! physical properties at cell centers !
149
! propfa(nfac, *) ! ra ! <-- ! physical properties at interior face centers !
150
! propfb(nfabor, *)! ra ! <-- ! physical properties at boundary face centers !
151
! coefa, coefb ! ra ! <-- ! boundary conditions !
152
! (nfabor, *) ! ! ! !
153
! ckupdc ! tr ! <-- ! tableau de travail pour pdc !
155
! smacel ! tr ! <-- ! valeur des variables associee a la !
156
! (ncesmp,* ) ! ! ! source de masse !
157
! ! ! ! pour ivar=ipr, smacel=flux de masse !
158
! crvexp(ncelet ! tr ! --> ! tableau de travail pour part explicit !
159
! crvimp(ncelet ! tr ! --> ! tableau de travail pour terme instat !
160
! viscf(nfac) ! tr ! --- ! tableau de travail faces internes !
161
! viscb(nfabor ! tr ! --- ! tableau de travail faces de bord !
162
! xam(nfac,2) ! tr ! --- ! tableau de travail faces de bord !
163
! w1..11(ncelet ! tr ! --- ! tableau de travail cellules !
164
! rdevel(nrdeve) ! ra ! <-> ! real work array for temporary development !
165
! rtuser(nrtuse) ! ra ! <-> ! user-reserved real work array !
166
! ra(*) ! ra ! --- ! main real work array !
167
!__________________!____!_____!________________________________________________!
169
! TYPE : E (ENTIER), R (REEL), A (ALPHANUMERIQUE), T (TABLEAU)
170
! L (LOGIQUE) .. ET TYPES COMPOSES (EX : TR TABLEAU REEL)
171
! MODE : <-- donnee, --> resultat, <-> Donnee modifiee
172
! --- tableau de travail
173
!-------------------------------------------------------------------------------
174
!===============================================================================
178
!===============================================================================
180
!===============================================================================
194
!===============================================================================
198
integer idbia0 , idbra0
199
integer ndim , ncelet , ncel , nfac , nfabor
200
integer nfml , nprfml
201
integer nnod , lndfac , lndfbr , ncelbr
202
integer nvar , nscal , nphas
203
integer ncepdp , ncesmp
204
integer nideve , nrdeve , nituse , nrtuse
207
integer ifacel(2,nfac) , ifabor(nfabor)
208
integer ifmfbr(nfabor) , ifmcel(ncelet)
209
integer iprfml(nfml,nprfml)
210
integer ipnfac(nfac+1), nodfac(lndfac)
211
integer ipnfbr(nfabor+1), nodfbr(lndfbr)
212
integer icepdc(ncepdp)
213
integer icetsm(ncesmp), itypsm(ncesmp,nvar)
214
integer iconra(ncelet)
215
integer idevel(nideve), ituser(nituse), ia(*)
217
double precision xyzcen(ndim,ncelet)
218
double precision surfac(ndim,nfac), surfbo(ndim,nfabor)
219
double precision cdgfac(ndim,nfac), cdgfbo(ndim,nfabor)
220
double precision xyznod(ndim,nnod), volume(ncelet)
221
double precision dt(ncelet), rtp(ncelet,*), rtpa(ncelet,*)
222
double precision propce(ncelet,*)
223
double precision propfa(nfac,*), propfb(nfabor,*)
224
double precision coefa(nfabor,*), coefb(nfabor,*)
225
double precision ckupdc(ncepdp,6), smacel(ncesmp,nvar)
226
double precision crvexp(ncelet), crvimp(ncelet)
227
double precision viscf(nfac), viscb(nfabor)
228
double precision xam(nfac,2)
229
double precision w1(ncelet), w2(ncelet), w3(ncelet)
230
double precision w4(ncelet), w5(ncelet), w6(ncelet)
231
double precision w7(ncelet), w8(ncelet), w9(ncelet)
232
double precision w10(ncelet), w11(ncelet)
233
double precision rdevel(nrdeve), rtuser(nrtuse), ra(*)
238
integer idebia, idebra
239
integer ivar , iiscvr, ipcrom, iphas
240
integer icoul , ifml , iel , jel
242
integer nzones, izone
243
double precision xnu0 , xlamb0, prand0, phi0
244
double precision gmat , untier
245
double precision fform , emis
246
double precision hplus , hmoin , hmax , difx , dify , dhmur
247
double precision fragh , xxav , tbulk , un0 , ptot
248
double precision raleiz, reynol
249
double precision xnsraz, xnsrey, xnsalv
250
double precision hraz , hrey , h0 , hray
251
double precision hmrey , hmraz , hm0 , hmray , hnb
252
double precision cpcont, cpparo
253
double precision xlimin, xlimax, yrgmin, yrgmax, zalmin, zalmax
255
double precision dhe , dhs , ptcn
256
double precision fptsto, pvccsc, pccsc
258
!===============================================================================
259
!===============================================================================
261
!===============================================================================
263
! --- Gestion memoire
268
! --- Numero du scalaire a traiter : ISCAL (argument)
270
! --- Numero de la variable associee au scalaire a traiter ISCAL
273
! --- Nom de la variable associee au scalaire a traiter ISCAL
274
chaine = nomvar(ipprtp(ivar))
276
! --- Indicateur de variance
278
! le scalaire ISCAL n'est pas une variance
279
! Si ISCAVR > 0 et ISCAVR < NSCAL + 1 :
280
! le scalaire ISCAL est une variance associee
282
iiscvr = iscavr(iscal)
284
! --- Numero de phase associee au scalaire ISCAL
285
iphas = iphsca(iscal)
287
! --- Masse volumique
288
ipcrom = ipproc(irom(iphas))
291
! --- Reperage du pas de temps pour les impressions listing
293
modntl = mod(ntcabs,ntlist)
294
elseif(ntlist.eq.-1.and.ntcabs.eq.ntmabs) then
301
if(iwarni(ivar).ge.1) then
302
write(nfecra,1000) chaine(1:8)
304
if((irangp.le.0).and.(modntl.eq.0)) then
305
write(nfecra,2001) chaine(1:8)
311
!===============================================================================
312
! 1. DIMENSIONS GEOMETRIQUES
313
!===============================================================================
316
!===============================================================================
317
! 2. PROPRIETES PHYSIQUES
318
!===============================================================================
320
! --- Proprietes de l'air
322
! Nombre de Prandtl moleculaire
324
! Viscosite cinematique moleculaire (nu en m2.s-1)
325
xnu0 = xmumat/ro0(iphas)
326
! Condutivite thermique moleculaire (lambda en W.m-1.K-1)
327
xlamb0 = (xnu0/prand0)*cp0(iphas)*ro0(iphas)
330
! --- Capacite thermique fictive pour le solide
332
! On cherche un etat stationnaire comme limite d'un transitoire
333
! Les equations portant sur la temperature T des solides
334
! comportent un terme en CP dT/dt qui tend vers zero a
335
! convergence. La valeur de CP est utilisee pour accelerer
336
! la convergence : elle correspond a l'utilisation d'un
337
! pas de temps adapte pour la temperature des solides (comme
338
! on pourrait le faire avec CDTVAR)
344
!===============================================================================
345
! 2. EROSION DES PANACHES DE CONVECTION NATURELLE
346
!===============================================================================
348
! Le but est de reporter dans la zone de ciel une partie de la
349
! puissance transmise a l'air dans la zone de stockage.
350
! Ceci permet de simuler l'effet des panaches, le debit
351
! enthalpique de ceux-ci etant prescrit par l'utilisateur.
355
! --- Debit enthalpique de convection naturelle calcule (initialisation)
358
! --- Debit enthalpique de convection naturelle impose pour les panaches
360
! Nul par defaut (pas de modelisation des panaches)
362
! Calcul, si modelisation des panaches
367
!===============================================================================
369
!===============================================================================
371
! --- Flux d'un conteneur (puissance ramenee a la surface en W.m-2)
373
! En cas de stockage en alveole, il y a un plenum inferieur libre
375
phi0 = puicon/((hreso-hplen)*dmcont*pi)
377
phi0 = puicon/(hreso*dmcont*pi)
380
! --- Facteur de forme (alveole ou mur) / conteneur
382
! En alveole, le conteneur voit l'alveole entiere et c'est tout
387
! Sans alveole, le facteur de forme depend de la structure du reseau
390
! Pour un reseau en ligne, considerer une rangee suffit
391
! (valable jusqu'a PTRRES/DMCONT=4)
392
fform = sqrt( sqrt(dmcont/ptrres) + (dmcont/ptrres) )
394
! Pour un reseau en quinconce (reseau a pas triangulaire), on
395
! complete par la contribution d'une seconde rangee
397
fform = max( (fform + 0.22d0), 1.d0 )
403
! --- Emissivite equivalente (conteneur / mur)
404
emis = 1.d0/(1.d0/emicon + 1.d0/emimur)
406
! --- Densite de surface d'echange (par unite de hauteur)
407
xxav = pi*dmcont/(ptrres*plgres)
410
! --- Connectivite pour le rayonnement colis / plafond
411
! et pour la modelisation des panaches
412
! Une connectivite est necessaire pour relier la couche
413
! superieure de la zone occupee par des colis et les
414
! mailles situees directement sous le plafond
416
! Cote du haut des mailles du haut des conteneurs
418
! Cote du bas des mailles du haut des conteneurs
419
hmoin = hreso - epchel
420
! Cote du bas des mailles touchant le plafond
421
hmax = epchel*nchest - epchel
423
! Calcul de la connectivite
424
! Attention, c'est quadratique ...
425
! mais on ne le fait qu'au premier passage
427
! Calcul uniquement si pas deja fait et si utile
428
! (utile si les colis ne touchent pas le plafond)
429
if( (icnrok.eq.0).and.(hreso.lt.epchel*nchest) ) then
430
! On repere les mailles de plafond dans la zone de stockage
433
icoul = iprfml(ifml,1)
434
if(icoul.eq.icmtst.and.xyzcen(3,iel).gt.hmax)then
435
! On repere la maille du haut des colis situee dessous
437
difx = abs(xyzcen(1,jel)-xyzcen(1,iel))
438
dify = abs(xyzcen(2,jel)-xyzcen(2,iel))
439
if(difx.lt.ptrres*1.d-2.and.dify.lt.plgres*1.d-2) then
440
if ( xyzcen(3,jel).lt.hplus.and. &
441
xyzcen(3,jel).gt.hmoin ) then
448
! On indique que la connectivite a ete calculee
452
!===============================================================================
454
! ON VA COMPLETER CI-DESSOUS LES TERMES SOURCES
455
! - PUREMENT EXPLICITES (PUISSANCE)
456
! - PARTIELLEMENT EXPLICITES ET IMPLICITES (ECHANGES)
459
! ON UTILISE LE MODELE DE TERME SOURCE SUIVANT, POUR UN SCALAIRE F :
463
! APPARAISSANT DANS LES EQUATIONS DE TRANSPORT DE F SOUS LA FORME :
465
! RHO VOLUME D(F)/Dt = VOLUME*S
468
! CE TERME A UNE PARTIE QU'ON VEUT IMPLICITER : A
469
! ET UNE PARTIE QU'ON VA TRAITER EN EXPLICITE : B
472
! PAR EXEMPLE SI ON A :
476
! TAUF = 10.D0 [secondes ] (TEMPS DE DISSIPATION DE F)
477
! PRODF = 100.D0 [variable/s] (PRODUCTION DE F PAR UNITE DE TEMPS)
480
! CRVIMP(IEL) = VOLUME(IEL)* A = - VOLUME(IEL) (RHO / TAUF )
481
! CRVEXP(IEL) = VOLUME(IEL)* B = VOLUME(IEL) (RHO * PRODF)
483
!===============================================================================
486
! ===========================================================
489
! pour moyenne et affichage, mais pas seulement
491
! Coefficient d'echange moyen de convection forcee
493
! Coefficient d'echange moyen de convection naturelle
495
! Coefficient d'echange convectif moyen efficace
497
! Coefficient d'echange radiatif moyen pour les parois
499
! Compteur pour moyenne
501
! Puissance totale sans panache
503
! Puissance totale avec panache
507
gmat = sqrt(gx**2+gy**2+gz**2)
510
! === Boucle sur les cellules et selection selon couleur
511
! ===========================================================
515
! Vitesse horizontale
516
un0 = sqrt(rtp(iel,iu(iphas))**2+rtp(iel,iv(iphas))**2)
518
! Temperature de reference Kelvin
519
tbulk = (tinit+rtp(iel,isca(itaamt)))*0.5d0 + tkelvi
521
! Raleigh/DeltaT = FRAGH = g*H**3*beta/(nu a)
523
! . H = XYZCEN(3,IEL) : on suppose que le sol est a z=0
526
! . a = nu/Pr = XNU0/PRAND0
528
fragh = gmat*xyzcen(3,iel)**3*prand0/(tbulk*xnu0**2)
530
! Couleur pour selection de la zone de stockage
532
icoul = iprfml(ifml,1)
534
if(icoul.eq.icmtst) then
537
! === Calcul du coefficient d'echange par rayonnement
538
! ===========================================================
540
! Coeff d'echange = flux / (S (Tcolis-Tparoi))
541
! = Sigma Epsilon FactForme (Tcolis+Tparoi)(Tcolis**2+Tparoi**2)
543
! La paroi consideree est le plafond ou les murs ou les alveoles
546
! On utilise la connectivite calculee precedemment
547
if(icnrok.eq.1.and.xyzcen(3,iel).gt.hmax) then
549
! En presence d'alveoles,
550
! le plafond echange avec les alveoles face a face
551
! (seule l'alveole directement en face est vue,
552
! l'alveole voit un disque de plafond)
553
! La temperature du plafond et des alveoles est representee
554
! par le meme scalaire
555
! Ce coefficient est utilise pour le calcul des termes sources
556
! permettant de determiner la temperature de peau des parois
557
! (plafond, mur, alveoles)
558
! On le verra aussi intervenir pour un calcul de temperature
559
! de colis, mais dans la zone de ciel ou la temperature de colis
560
! n'a pas de signification (et comme il n'y a pas de diffusion
561
! en alveoles, c'est ok)
563
hray = stephn*emimur &
564
* (0.25d0*pi*dmcont**2)/(ptrres*plgres) &
565
* ( rtp(iconra(iel),isca(itppmt))+tkelvi &
566
+rtp( iel ,isca(itppmt))+tkelvi) &
567
* ((rtp(iconra(iel),isca(itppmt))+tkelvi)**2 &
568
+(rtp( iel ,isca(itppmt))+tkelvi)**2)
571
! le plafond echange avec les colis face a face
572
! Ce coefficient sera utilise pour le calcul des termes sources
573
! permettant de determiner la temperature de peau du plafond
576
* (0.25d0*pi*dmcont**2)/(ptrres*plgres) &
577
* ( rtp(iconra(iel),isca(itpcmt))+tkelvi &
578
+rtp( iel ,isca(itppmt))+tkelvi) &
579
* ((rtp(iconra(iel),isca(itpcmt))+tkelvi)**2 &
580
+(rtp( iel ,isca(itppmt))+tkelvi)**2)
583
! --- Zones de murs ou d'alveoles
584
! les murs et les alveoles echangent avec les colis
585
! le facteur de forme calcule precedemment s'applique
586
! il prend en compte le cas avec ou sans alveoles
587
! Ce coefficient sera utilise pour le calcul des termes sources
588
! permettant de determiner
589
! - la temperature de peau des parois
590
! - la temperature de peau des colis, en alveole (FFORM=1)
595
* ( rtp(iel,isca(itpcmt))+tkelvi &
596
+rtp(iel,isca(itppmt))+tkelvi) &
597
* ((rtp(iel,isca(itpcmt))+tkelvi)**2 &
598
+(rtp(iel,isca(itppmt))+tkelvi)**2)
602
! === Puissance transmise a l'air et a la peau des colis par conduction
603
! ===========================================================
606
! en stationnaire, toute la puissance des colis se retrouve tot ou
607
! tard dans l'air (elle peut transiter par la peau des colis,
608
! par les alveoles, par les murs, mais elle est extraite par
611
! Pour la peau des colis :
612
! toute la puissance des colis est transmise par conduction a
616
if (iscal.eq.itaamt.or.iscal.eq.itpcmt) then
618
! --- Puissance des colis par unite de surface au sol
619
! On prend en compte la carte de remplissage ensuite
621
! On doit fournit un CRVEXP en Watt/CP, soit de la dimension de
624
! Comme la puissance integree sur la hauteur du colis doit etre
625
! la puissance totale du colis, PUICON, on doit imposer dans
626
! chaque maille une fraction de PUICON.
627
! Pour une repartition uniforme en hauteur, cette fraction est
628
! la hauteur de la maille VOLUME/(PTRRES*PLGRES) divisee par
629
! la hauteur totale du colis.
630
! Les repartitions non uniformes en hauteur sont traitees par
631
! les cartes de repartition en altitude, plus bas.
632
! On impose donc CRVEXP = PUICON/CP * VOLUME/(PTRRES*PLGRES)
633
! puis on divise par la hauteur de colis (plus bas, lors du
634
! traitement des cartes de repartition en altitude).
636
! Noter que comme on multiplie par VOLUME/(PTRRES*PLGRES) ici
637
! et qu'on divise plus bas par EPCHEL, on pourrait simplifier,
638
! puisque, a priori, EPCHEL = VOLUME/(PTRRES*PLGRES)
642
if (iscal.eq.itaamt) then
643
crvexp(iel) = puicon/cp0(iphas) &
644
* volume(iel)/(ptrres*plgres)
646
elseif(iscal.eq.itpcmt) then
647
crvexp(iel) = puicon/cpcont &
648
* volume(iel)/(ptrres*plgres)
651
! --- Prise en compte des cartes de remplissage (adimensionnelles)
652
! Les entrepots ne sont pas uniformement remplis.
654
! Pour repr�senter la carte d'encombrement des lignes de colis, on
655
! repere les lignes occupees (coordonnee X, indicateur ILIGNE)
656
! par leurs bornes XLIMIN et XLIMAX qui sont stockees dans VIZCAR
657
! (avec l'indicateur ICPUIS faisant reference a la puissance)
658
nzones = nzocar(iligne,icpuis)
660
xlimin = ptrres*vizcar(1,izone,iligne,icpuis)
661
xlimax = ptrres*vizcar(2,izone,iligne,icpuis)
662
if ((xyzcen(1,iel).ge.xlimin).and. &
663
(xyzcen(1,iel).lt.xlimax)) then
664
crvexp(iel) = crvexp(iel) * vcarth(izone,iligne)
668
! Pour repr�senter la carte d'encombrement des rangees de colis, on
669
! repere les rangees occupees (coordonnee Y, indicateur IRANGE)
670
! par leurs bornes YRGMIN et YRGMAX qui sont stockees dans VIZCAR
671
! (avec l'indicateur ICPUIS faisant reference a la puissance)
672
nzones = nzocar(irange,icpuis)
674
yrgmin = plgres*vizcar(1,izone,irange,icpuis)
675
yrgmax = plgres*vizcar(2,izone,irange,icpuis)
676
if ((xyzcen(2,iel).ge.yrgmin).and. &
677
(xyzcen(2,iel).lt.yrgmax)) then
678
crvexp(iel) = crvexp(iel) * vcarth(izone,irange)
682
! Pour repr�senter la carte d'encombrement en hauteur de colis, on
683
! repere les couches occupees (coordonnee Z, indicateur IALTIT)
684
! par leurs bornes ZALMIN et ZALMAX qui sont stockees dans VIZCAR
685
! (avec l'indicateur ICPUIS faisant reference a la puissance)
686
! SQZ permet d'integrer VCARTH sur les zones afin que
687
! de normer VCARTH de telle sorte que la multiplication par
688
! VCARTH/SQZ permette de retrouver, en integrant sur la hauteur,
689
! toute la puissance du colis.
691
nzones = nzocar(ialtit,icpuis)
693
zalmin = epchel*vizcar(1,izone,ialtit,icpuis)
694
zalmax = epchel*vizcar(2,izone,ialtit,icpuis)
695
sqz = sqz + vcarth(izone,ialtit) * &
696
( vizcar(2,izone,ialtit,icpuis) - &
697
vizcar(1,izone,ialtit,icpuis) )
700
zalmin = epchel*vizcar(1,izone,ialtit,icpuis)
701
zalmax = epchel*vizcar(2,izone,ialtit,icpuis)
702
if ((xyzcen(3,iel).ge.zalmin).and. &
703
(xyzcen(3,iel).lt.zalmax)) then
704
crvexp(iel) = crvexp(iel)* &
705
vcarth(izone,ialtit)/(sqz*epchel)
709
! On calcule la puissance totale injectee (Watt)
712
if (iscal.eq.itaamt) then
713
ptot = ptot + crvexp(iel)*cp0(iphas)
719
! === Echange convectif conteneur / air et radiatif conteneur / mur
720
! ===========================================================
722
! Pour la determination de la temperature de peau des colis
724
! On calcule le coefficient d'echange convectif efficace selon
725
! la configuration (convection naturelle, forcee, mixte).
726
! On ajoute le terme de rayonnement a partir du coefficient
727
! equivalent HRAY calcule precedemment.
729
if (iscal.eq.itpcmt) then
731
! --- Convection naturelle verticale le long des colis
732
! Van Vliet&Ross et Vliet&Liu
734
! Rayleigh a partir du flux d'un conteneur
735
raleiz = fragh*phi0*xyzcen(3,iel)/xlamb0
737
xnsraz = 0.17d0 * raleiz**0.25d0
738
xnsraz = max(xnsraz,(0.6d0 * raleiz**0.2d0))
739
! Coefficient d'echange de convection naturelle conteneur / air
740
! Hypothese que le zero est a la base des colis
741
hraz = xnsraz*xlamb0/xyzcen(3,iel)
742
! Coefficient d'echange moyen de convection naturelle
746
! --- Convection forcee transversale dans le reseau de colis
749
! Reynolds (vitesse horizontale gap, diametre
750
reynol = (un0*ptrres/(ptrres-dmcont)) * dmcont / xnu0
752
xnsrey = 0.35d0*(ptrres/plgres)**0.2d0 &
753
* 0.89d0*reynol**0.6d0
754
! Coefficient d'echange de convection forcee conteneur / air
755
hrey = xnsrey*xlamb0/dmcont
756
! Coefficient d'echange moyen de convection forcee
759
! --- Compteur pour les moyennes
764
! --- Prise en compte du type de reseau (en ligne ou en quinconce)
765
! et de la presence d'alveoles
768
! convection naturelle uniquement
773
xnsalv = 0.17d0 * raleiz**0.25d0
774
! Coefficient d'echange de convection naturelle conteneur / air
775
! Hypothese que le zero est a la base des colis
776
h0 = xnsalv*xlamb0/xyzcen(3,iel)
779
! - Reseau en ligne (pas carre) sans alveoles
780
! 2/3 conv.force (face+cotes) + 1/3 conv.nat (sillage arriere)
782
elseif(iconlg.eq.1)then
783
h0 = (hraz+2.d0*hrey)/3.d0
785
! - Reseau en quinconce (pas triangulaire) sans alveoles
786
! conv.force (pas de protection du colis amont)
793
! le coefficient d'echange est toujours au moins egal a celui
794
! de la convection naturelle
799
! - Coefficient d'echange convectif moyen efficace
803
! --- Ajout du terme conductif et du terme radiatif
805
! CRVEXP contient deja la puissance des colis transmise
807
! On veut ajouter dans CRVEXP des Watt/CP soit H0*Surface*T/CP.
808
! On a ici XXAV*VOLUME = PI*DMCONT*EPCHEL, qui est la surface
809
! d'�change dans la cellule.
813
! echange par convection naturelle et
814
! les colis rayonnent avec le plafond et les alveoles
818
crvexp(iel) = crvexp(iel) &
819
+h0 *(xxav*volume(iel)) &
820
*rtp(iel,isca(itaamt))/cpcont &
821
+hray*(xxav*volume(iel)) &
822
*rtp(iel,isca(itppmt))/cpcont
823
crvimp(iel) = -(h0+hray)*(xxav*volume(iel))/cpcont
827
! echange par convection mixte seul
828
! les colis ne rayonnent qu'entre eux, et ceci est pris en compte
833
crvexp(iel) = crvexp(iel) &
834
+h0 *(xxav*volume(iel)) &
835
*rtp(iel,isca(itaamt))/cpcont
836
crvimp(iel) = - h0 *(xxav*volume(iel))/cpcont
844
! === Echange convectif mur / air et radiatif mur / conteneur
845
! ===========================================================
847
! Pour la determination de la temperature de peau des parois
850
if (iscal.eq.itppmt) then
852
! --- Echange par convection paroi / air
855
! convection naturelle uniquement
859
! Rayleigh a partir du flux d'un conteneur
860
raleiz = fragh*phi0*xyzcen(3,iel)/xlamb0
862
xnsalv = 0.17d0 * raleiz**0.25d0
863
! Coefficient d'echange de convection naturelle alveole / air
864
! Hypothese que le zero est a la base des colis
865
hraz = xnsalv*xlamb0/xyzcen(3,iel)
866
! Coefficient d'echange efficace alveole / air
867
! Convection naturelle seule
872
! convection naturelle (Mac Adams) ou convection forcee
876
! .Convection naturelle
878
! Rayleigh a partir de l'ecart de temperature paroi - air
880
fragh*(rtp(iel,isca(itppmt))-rtp(iel,isca(itaamt)))
881
! Nusselt associe (Mac Adams)
882
xnsraz = 0.12d0*(abs(raleiz))**untier
883
! Coefficient d'echange de convection naturelle paroi / air
884
hraz = xnsraz*xlamb0/xyzcen(3,iel)
885
! Coefficient d'echange moyen de convection naturelle
892
dhmur = ptrres-dmcont
893
! Reynolds associ� (vitesse horizontale hors reseau, pres des murs)
894
reynol = dhmur*un0/xnu0
895
! Nusselt associe (Colburn)
896
xnsrey = 0.023d0*reynol**0.8d0*prand0**untier
897
! Coefficient d'echange de convection forcee paroi / air
898
hrey = xnsrey*xlamb0/dhmur
899
! Coeficient d'echange moyen de convection forcee
903
! .Coefficient d'echange efficace (le plus efficace est dominant)
909
! - Coefficient d'echange convectif moyen efficace
911
! - Coefficient d'echange moyen de convection naturelle
913
! - Compteur pour les moyennes
917
! --- Ajout du terme conductif et du terme radiatif
919
! On veut ajouter dans CRVEXP des Watt/CP soit H0*Surface*T/CP.
920
! On calcule H0*VOLUME*T/CP et on divise par une distance
921
! plus bas. On pourrait faire les choses plus directement.
923
! Les echanges radiatifs sont les echanges avec les colis.
926
! - Coefficient d'echange radiatif moyen pour les parois
930
! - Echanges convectifs
931
crvexp(iel) = h0*volume(iel)*rtp(iel,isca(itaamt))/cpparo
932
crvimp(iel) =-h0*volume(iel)/cpparo
935
! - Echange radiatif dans le ciel
936
if(icnrok.eq.1.and.xyzcen(3,iel).gt.hmax) then
938
! .Alveoles : le plafond echange avec les alveoles
940
crvexp(iel) = crvexp(iel) &
942
*rtp(iconra(iel),isca(itppmt))/cpparo
944
! .Sans alveole : le plafond echange avec le dessus des colis
946
crvexp(iel) = crvexp(iel) &
948
*rtp(iconra(iel),isca(itpcmt))/cpparo
952
! - Echange radiatif avec les colis pour les autres parois
955
crvexp(iel) = crvexp(iel) &
956
+hray*volume(iel)*rtp(iel,isca(itpcmt))/cpparo
961
! - La partie implicite est la meme pour tous
962
crvimp(iel) = crvimp(iel) - hray*volume(iel)/cpparo
965
! - On divise par une distance
966
! Plus exactement, on multiplie par la surface d'echange et
967
! on divise par le volume (on aurait donc pu eviter de multiplier
971
! .Au dessus ou au dessous des colis, le plafond ou le sol echangent
972
! sur une surface de PTRRES*PLGRES
973
! dans des cellules de volume EPCHEL*PTRRES*PLGRES.
974
! Le rapport Surface/Volume est donc 1/EPCHEL
976
if(xyzcen(3,iel).lt.epchel.or.xyzcen(3,iel).gt.hmax) then
977
crvexp(iel) = crvexp(iel)/epchel
978
crvimp(iel) = crvimp(iel)/epchel
981
! .En stockage en alveoles, les alveoles echangent
982
! sur une surface de PI*DHALVE*EPCHEL
983
! dans des cellules de volume EPCHEL*PTRRES*PLGRES.
984
! Le rapport Surface/Volume est donc PI*DHALVE/(PTRRES*PLGRES)
985
! A priori DHALVE est positif, mais on laisse le ABS (pour le
986
! cas, ou il serait defini comme la difference entre le
987
! diametre des colis et des alveoles)
989
elseif(ialveo.eq.1) then
991
crvexp(iel)*pi*abs(dhalve)/(ptrres*plgres)
993
crvimp(iel)*pi*abs(dhalve)/(ptrres*plgres)
996
! .Sans alveoles, les murs echangent
997
! sur une surface de PLGRES*EPCHEL
998
! dans des cellules de volume EPCHEL*PTRRES*PLGRES.
999
! Le rapport Surface/Volume est donc 1/PTRRES
1000
! La ou il n'y a pas de mur, la temperature de mur ne signifie
1001
! rien, mais on peut quand meme l'y calculer (il n'y a pas de
1002
! phenomene de diffusion, tout est local)
1005
crvexp(iel) = crvexp(iel)/ptrres
1006
crvimp(iel) = crvimp(iel)/ptrres
1013
! Fin du test sur la zone de stockage
1018
! === Pour l'air, sans modelisation des panaches de convection naturelle
1019
! ===========================================================
1021
if(iscal.eq.itaamt) then
1025
! --- Calcul du debit enthalpique de convection naturelle
1026
! sortant en haut de la zone des colis : rho*W*S*Cp*DeltaT
1027
! (il aurait ete plus correct d'utiliser FLUMAS)
1032
icoul = iprfml(ifml,1)
1033
if(icoul.eq.icmtst) then
1035
if(icnrok.eq.1.and.xyzcen(3,iel).gt.hmax) then
1038
propce(jel,ipcrom)*rtp(jel,iw(iphas)) &
1039
*(volume(jel)/epchel) &
1040
*cp0(iphas)*(rtp(jel,isca(itaamt))-tinit)
1047
! --- Calcul de la puissance en kW,
1048
! avec correction si representation 3D en 2D
1050
puitot = ptot*frdtra*1.d-3
1053
! --- Calcul du debit enthalpique de convection naturelle en kW,
1054
! avec correction si representation 3D en 2D
1056
debcon = dhs*frdtra*1.d-3
1058
! --- Impression de PUITOT et DEBCON
1059
if (irangp.le.0.and.modntl.eq.0) then
1060
write(nfecra,2002) puitot, debcon
1064
! === Pour l'air, modelisation des panaches de convection naturelle
1065
! ===========================================================
1067
elseif(imdcnt.eq.1) then
1070
! --- Le debit enthalpique des panaches ne peut pas etre plus grand
1071
! que la puissance totale disponible ; sinon, c'est qu'il
1072
! a ete mal predit ou que la puissance a ete mal imposee :
1073
! les cartes ou la puissance d'un conteneur peuvent etre en
1075
! On fait ce test ici, dans la mesure ou PTOT est calcule juste
1078
if(dhpcnt.ge.ptot*frdtra)then
1079
write(nfecra,9001) imdcnt, dhpcnt, ptot*frdtra, &
1085
! --- Modification du terme source pour la modelisation des panaches
1087
! On redistribue la puissance transmise a l'air uniquement :
1088
! une fraction de la puissance totale est retiree de la zone
1089
! de stockage et injectee directement dans le ciel au dessus
1090
! des conteneurs. La repartition se fait a priori de maniere
1091
! homogene (le panache de tous les conteneurs presents recoit
1092
! la meme fraction de la puissance totale), puis on applique
1093
! la carte de repartition thermique XY.
1095
! - Calcul des grandeurs independantes de la maille
1097
! Fraction de la puissance totale a conserver
1098
! dans la zone de stockage
1099
fptsto = 1.d0-dhe/ptot
1101
! Puissance Volumique a ajouter dans la zone de Ciel au dessus
1102
! d'un Conteneur de puissance PUICON, divise par CP
1103
pvccsc = ( (dhe/ptot)*puicon / (hercnt*ptrres*plgres) ) &
1109
icoul = iprfml(ifml,1)
1111
if(icoul.eq.icmtst) then
1113
! - Reduction dans la zone de stockage
1115
! La puissance est reduite pour tous les conteneurs de maniere
1116
! homogene, en fonction du rapport entre le debit enthalpique
1117
! des panaches impose par l'utilisateur et la puissance totale
1118
! presente dans l'entrepot. Les cartes de repartition thermique
1119
! ayant deja ete appliquees a CRVEXP, c'est bien le rapport de
1120
! reduction (et non pas la valeur absolue de la reduction) qui
1123
crvexp(iel) = crvexp(iel)*fptsto
1126
if ( xyzcen(3,iel).lt.(hercnt+hreso).and. &
1127
xyzcen(3,iel).gt.hreso) then
1129
! - Report dans la zone des panaches (1/2)
1131
! Calcul de la puissance a ajouter dans la zone de ciel, au dessus
1132
! d'un conteneur de puissance PUICON (deja divise par CP)
1134
pccsc = pvccsc * volume(iel)
1136
! Les entrepots ne sont pas uniformement remplis.
1137
! Application de la carte thermique horizontale XY pour
1138
! selectionner les positions auxquelles un conteneur (ou
1139
! une fraction de conteneur est presente, puisque l'on
1140
! peut avoir des demi-conteneurs, par exemple sur un plan
1143
! Pour repr�senter la carte d'encombrement des lignes de colis, on
1144
! repere les lignes occupees (coordonnee X, indicateur ILIGNE)
1145
! par leurs bornes XLIMIN et XLIMAX qui sont stockees dans VIZCAR
1146
! (avec l'indicateur ICPUIS faisant reference a la puissance)
1147
nzones = nzocar(iligne,icpuis)
1148
do izone = 1, nzones
1149
xlimin = ptrres*vizcar(1,izone,iligne,icpuis)
1150
xlimax = ptrres*vizcar(2,izone,iligne,icpuis)
1151
if ((xyzcen(1,iel).ge.xlimin).and. &
1152
(xyzcen(1,iel).lt.xlimax)) then
1154
vcarth(izone,iligne)
1158
! Pour repr�senter la carte d'encombrement des rangees de colis, on
1159
! repere les rangees occupees (coordonnee Y, indicateur IRANGE)
1160
! par leurs bornes YRGMIN et YRGMAX qui sont stockees dans VIZCAR
1161
! (avec l'indicateur ICPUIS faisant reference a la puissance)
1162
nzones = nzocar(irange,icpuis)
1163
do izone = 1, nzones
1164
yrgmin = plgres*vizcar(1,izone,irange,icpuis)
1165
yrgmax = plgres*vizcar(2,izone,irange,icpuis)
1166
if ((xyzcen(2,iel).ge.yrgmin).and. &
1167
(xyzcen(2,iel).lt.yrgmax)) then
1169
vcarth(izone,irange)
1173
! Ajout de la puissance des panaches a la puissance deja existante
1175
crvexp(iel) = crvexp(iel) + pccsc
1177
! Fin si zone de panache
1180
! Fin si zone de stockage
1184
! --- Calcul de la puissance totale incluant la modelisation
1185
! des panaches de convection natuelle
1186
! (normalement la puissance totale n'a pas ete modifiee)
1188
ptcn = ptcn + crvexp(iel)*cp0(iphas)
1193
! --- Calcul et impression de la puissance totale incluant la modelisation
1194
! des panaches de convection naturelle
1195
! en kW, avec correction si representation 3D en 2D
1197
puitot = ptcn*frdtra*1.d-3
1198
if ((irangp.le.0).and.(modntl.eq.0)) then
1199
write(nfecra,2003) puitot
1202
! Fin si on modelise les panaches
1204
! Fin si scalaire = air ambiant
1209
! === Impressions pour la temperature de peau des colis et des parois
1210
! ===========================================================
1212
! --- Valeur fictive : pas de convection forcee en alveole
1213
! (valeur bizarre, mais uniquement pour affichage)
1214
if (ialveo.eq.1) then
1218
! --- Temperature de peau des colis
1220
if(iscal.eq.itpcmt) then
1222
! Si rien a moyenner, on prend une valeur negative
1223
! (mais les numerateurs seront nuls, normalement)
1224
if (hnb.lt.epzero) then
1228
! Stockage en common pour impression ulterieure
1231
! Impressions des coefficients d'echange moyens
1232
if ((irangp.le.0).and.(modntl.eq.0)) then
1233
write(nfecra,2004) hmrey/hnb, hmraz/hnb, hm0/hnb
1238
! --- Temperature de peau des parois
1240
if(iscal.eq.itppmt) then
1242
! Si rien a moyenner, on prend une valeur negative
1243
! (mais les numerateurs seront nuls, normalement)
1244
if (hnb.lt.epzero) then
1248
! Stockage en common pour impression ulterieure
1251
! Impressions des coefficients d'echange moyens
1252
if ((irangp.le.0).and.(modntl.eq.0)) then
1253
write(nfecra,2005) &
1254
hmrey/hnb, hmraz/hnb, hmray/hnb, hm0/hnb
1264
1000 format(' TERMES SOURCES MATISSE POUR LA VARIABLE ',A8,/)
1266
2001 FORMAT (/,3X,'** INFORMATIONS SUR MATISSE, VARIABLE ',A8,/, &
1267
3X,' -------------------------------------------')
1269
'mati --------------------------------------------------------',/,&
1270
'mati Puissance (sans modelisation panaches) ',/,&
1271
'mati -------------------------------------- ',/,&
1272
'mati Puissance totale ', E12.5 ,' kW',/,&
1273
'mati Debit enthalpique de conv. naturelle ', E12.5 ,' kW',/,&
1274
'mati --------------------------------------------------------',/)
1276
'mati --------------------------------------------------------',/,&
1277
'mati Puissance (avec modelisation panaches) ',/,&
1278
'mati -------------------------------------- ',/,&
1279
'mati Puissance totale avec erosion panaches', E12.5 ,' kW',/,&
1280
'mati --------------------------------------------------------',/)
1282
'mati --------------------------------------------------------',/,&
1283
'mati Coeff. d echange moyens (calcul T� de peau des colis) ',/,&
1284
'mati ----------------------------------------------------- ',/,&
1285
'mati Convection forcee ', E12.5 ,' W/m2/�C',/,&
1286
'mati Convection naturelle ', E12.5 ,' W/m2/�C',/,&
1287
'mati Efficace ', E12.5 ,' W/m2/�C',/,&
1288
'mati --------------------------------------------------------',/)
1290
'mati --------------------------------------------------------',/,&
1291
'mati Coeff. d echange moyens (calcul T� de peau des parois) ',/,&
1292
'mati ------------------------------------------------------ ',/,&
1293
'mati Convection forcee ', E12.5 ,' W/m2/�C',/,&
1294
'mati Convection naturelle ', E12.5 ,' W/m2/�C',/,&
1295
'mati Rayonnement ', E12.5 ,' W/m2/�C',/,&
1296
'mati Efficace ', E12.5 ,' W/m2/�C',/,&
1297
'mati --------------------------------------------------------',/)
1301
'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@',/,&
1303
'@ @@ ATTENTION : ARRET MATISSE (MTTSSC) ',/,&
1305
'@ DEBIT ENTHALPIQUE DES PANACHES INADAPTE. ',/,&
1307
'@ La modelisation des panaches est activee ',/,&
1308
'@ avec IMDCNT = ',I10 ,' ',/,&
1309
'@ Le debit enthalpique des panaches de convection ',/,&
1310
'@ naturelle doit etre strictement inferieur a la ',/,&
1311
'@ puissance totale des colis presents dans l''entrepot ',/,&
1312
'@ puisqu''il en represente une partie. ',/,&
1314
'@ Le debit enthalpique prescrit est DHPCNT =',E12.5 ,/,&
1315
'@ La puissance totale reelle est PTOT*FRDTRA =',E12.5 ,/,&
1317
'@ L''inegalite suivante n''est pas verifiee : ',/,&
1318
'@ DHPCNT < PTOT*FRDTRA ',/,&
1319
'@ ',E12.5 ,' ',E12.5 ,' ',/,&
1321
'@ Le calcul ne sera pas execute. ',/,&
1323
'@ Desactiver la modelisation des panaches ou ',/,&
1324
'@ modifier la valeur du debit enthalpique prescrit ou ',/,&
1325
'@ modifier la puissance totale (carte de remplissage ou ',/,&
1326
'@ puissance des colis). ',/,&
1328
'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@',/,&