Télécharger fimtr1.eso

Retour à la liste

Numérotation des lignes :

  1. C FIMTR1 SOURCE KK2000 14/04/10 21:15:06 8032
  2. SUBROUTINE FIMTR1
  3. C************************************************************************
  4. C
  5. C PROJET : CASTEM 2000
  6. C
  7. C NOM : FIMTR1
  8. C
  9. C DESCRIPTION : Subroutine appellée par FIMPVF
  10. C
  11. C Modelisation 2D/3D de term source
  12. C pour les equations multiespeces NS:
  13. C Gravité + k-\eps turbulence model
  14. C
  15. C Calcul du flux/residu
  16. C
  17. C LANGAGE : FORTRAN 77 + ESOPE 2000 (avec estensions CISI)
  18. C
  19. C AUTEUR : S. Kudriakov, DEN/DM2S/SFME/LTMF
  20. C
  21. C************************************************************************
  22. C
  23. C*** SYNTAXE
  24. C
  25. C Discrétisation en VF "cell-centered" des équations de NS pour
  26. C un gaz parfait polytropique (term source)
  27. C Inconnues: densités, quantité de mouvement, énergie totale par
  28. C unité de volumes, énergie cinetic turbulente (\rho k),
  29. C rate of dissipated turb. energy (\rho \eps) (var. conservatives)
  30. C Gravité
  31. C
  32. C RESU = 'FIMP' 'VF' 'GRAVKEPS' MOT1 TABGAS
  33. C LMOTC CHPRN CHPGN CHGRA CHRKA CHREPS GRADR GRADV ;
  34. C--------------------------------------------------------------------
  35. C
  36. C MOT1 : MOT: 'RESI'
  37. C
  38. C TABGAS : table with the gas properties;
  39. C here we need:
  40. C a) turbulent constant \sigma_t (see gravity
  41. C term in k-\eps equations)
  42. C name: TABGAS . 'SIGT'
  43. C b) turbulent constant C_{\eps 1} (see
  44. C \eps-equation)
  45. C name: TABGAS . 'CEPS1'
  46. C c) turbulent constant C_{\eps 2} (see
  47. C \eps-equation)
  48. C name: TABGAS . 'CEPS2'
  49. C d) rate of productions for the species
  50. C (source term); type 'CHPOINT'
  51. C (SPG = 'CENTRE', the number of components
  52. C is equal to the number of species in
  53. C TABGAS . 'ESPEULE')
  54. C e) TABGAS . 'ESPEULE' - the names of the
  55. C species which are explicitely in the equations
  56. C f) TABGAS . 'MUTURB' - turbulent viscosity
  57. C (SPG = 'CENTRE'; number of compon. = 1)
  58. C g) the formation enthalpies of the species
  59. C at T_0 = 0 K
  60. C
  61. C LMOTC : LISTMOTS, noms des variables conservatives
  62. C
  63. C CHPRN : densité (SPG = 'CENTRE', une seule
  64. C composante, 'SCAL')
  65. C
  66. C CHPGN : qdm (SPG = meme que CHPRN,
  67. C composantes: 'UX', 'UY', ('UZ'))
  68. C
  69. C CHPGRA : gravité (SPG = meme que CHPRN,
  70. C composantes: 'UX', 'UY', ('UZ'))
  71. C
  72. C CHRKA : turbulent kinetic energy per unit volume
  73. C (SPG = 'CENTRE', une seule composante, name is the
  74. C name of the corresponding conservative variable)
  75. C
  76. C CHREPS : rate of dissipated turb. energy per unit volume
  77. C (SPG = 'CENTRE', une seule composante, name is the
  78. C name of the corresponding conservative variable)
  79. C
  80. C GRADR : gradient of the density
  81. C (SPG = 'CENTRE', composantes: 'P1DX','P1DY', ('P1DZ'))
  82. C
  83. C GRADV : gradient of the velocity vector
  84. C (SPG = 'CENTRE', composantes: 'P1DX','P1DY', ('P1DZ')
  85. C 'P2DX','P2DY', ('P2DZ')
  86. C ('P3DX','P3DY', ('P3DZ')))
  87. C
  88. C SORTIES
  89. C
  90. C RESU : residu
  91. C
  92. C
  93. C************************************************************************
  94. C
  95. C HISTORIQUE (Anomalies et modifications éventuelles)
  96. C
  97. C HISTORIQUE :
  98. C
  99. C************************************************************************
  100. IMPLICIT INTEGER(I-N)
  101. IMPLICIT REAL*8(A-H,O-Z)
  102.  
  103. -INC CCOPTIO
  104. -INC SMLMOTS
  105. -INC SMCHPOI
  106. -INC SMTABLE
  107. C
  108. C**** Variables pour ACCTAB
  109. C
  110. INTEGER IVALI, IRETI,IVALR, IRETR, IESP
  111. REAL*8 XVALI, XVALR
  112. LOGICAL LOGII, LOGIR
  113. CHARACTER*(8) MTYPI, MTYPR, CHARR, MOTNEU
  114. C
  115. C**** Segment des caractéristiques du gaz
  116. C
  117. SEGMENT SORGAS
  118. REAL*8 H0K(NESP+1)
  119. POINTEUR SOUR(NESP+1).MCHPOI
  120. ENDSEGMENT
  121. C-----------------------------------------------------
  122. C
  123. INTEGER NBOPT, IMET, IRET, IRKA, ICEN, INDIC, NBCOMP
  124. & , IRO,IROVIT,JGN, JGM, IGRAV, ILIINC, IRES
  125. & ,NESP,IPGAS, IRETOU, ICOND, IREPS, IGRADR, IGRADV
  126. & , IMUT, ISOUR, I1
  127. C------Constants of the k-eps model
  128. REAL*8 TSIGT, TCEPS1, TCEPS2
  129. C
  130. PARAMETER (NBOPT=1)
  131. CHARACTER*8 LOPT(NBOPT)
  132. CHARACTER*4 MOT(1), MOTKA, MOTEPS, MOT1(10)
  133. C
  134. DATA LOPT/'RESI '/
  135. C
  136. C**** IMET = 1 -> residuu
  137. C
  138. CALL LIRMOT(LOPT,NBOPT,IMET,1)
  139. IF(IERR.NE.0)GOTO 9999
  140. C-------------------------------------------------
  141. C*** Reading the table PGAS *********************
  142. C-------------------------------------------------
  143. ICOND = 1
  144. CALL QUETYP(MTYPR,ICOND,IRETOU)
  145. IF(IERR .NE. 0)GOTO 9999
  146. IF(MTYPR .NE. 'TABLE ')THEN
  147. C---------------------------------------
  148. C Message d'erreur standard
  149. C 37 2
  150. C On ne trouve pas d'objet de type %m1:8
  151. C---------------------------------------
  152. MOTERR(1:8) = 'TABLE '
  153. CALL ERREUR(37)
  154. GOTO 9999
  155. ELSE
  156. ICOND = 1
  157. CALL LIROBJ(MTYPR,IPGAS,ICOND,IRETOU)
  158. IF(IERR .NE. 0)GOTO 9999
  159. ENDIF
  160. C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  161. C-------------------------------------------
  162. C Reading the constants of the Source term
  163. C-------------------------------------------
  164. C--------- \sigma_t
  165. CALL ACMF(IPGAS,'SIGT',XVALR)
  166. TSIGT = XVALR
  167. C-------- C_\eps 1
  168. CALL ACMF(IPGAS,'CEPS1',XVALR)
  169. TCEPS1 = XVALR
  170. C-------- C_\eps 2
  171. CALL ACMF(IPGAS,'CEPS2',XVALR)
  172. TCEPS2 = XVALR
  173. C-------------------------------------------
  174. C******** Reading the Source Terms ********
  175. C-------------------------------------------
  176. MTYPR = ' '
  177. CALL ACMO(IPGAS,'SOUR',MTYPR,ISOUR)
  178. IF(MTYPR .NE. 'TABLE ')THEN
  179. C--------------------------------
  180. C Message d'erreur standard
  181. C -301 0 %m1:40
  182. C--------------------------------
  183. MOTERR(1:40) = 'TAB1 . SOUR = ??? '
  184. WRITE(IOIMP,*) MOTERR(1:40)
  185. C---------------------------------
  186. C Message d'erreur standard
  187. C 21 2
  188. C Données incompatibles
  189. C--------------------------------
  190. CALL ERREUR(21)
  191. GOTO 9999
  192. ENDIF
  193. C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  194. C---------------------------------------------------------
  195. C Reading Les especes qui sont dans les Equations d'Euler
  196. C---------------------------------------------------------
  197. MTYPR = ' '
  198. CALL ACMO(IPGAS,'ESPEULE',MTYPR,MLMOT1)
  199. IF(MTYPR .NE. 'LISTMOTS')THEN
  200. C---------------------------
  201. C Message d'erreur standard
  202. C -301 0 %m1:40
  203. C---------------------------
  204. MOTERR(1:40) = 'TAB1 . ESPEULE = ??? '
  205. WRITE(IOIMP,*) MOTERR(1:40)
  206. C---------------------------
  207. C Message d'erreur standard
  208. C 21 2
  209. C Données incompatibles
  210. C--------------------------
  211. CALL ERREUR(21)
  212. GOTO 9999
  213. ENDIF
  214. C---------------------------------------------------------
  215. C Reading L'espece qui n'est pas dans les Equations d'Euler
  216. C---------------------------------------------------------
  217. MTYPR = ' '
  218. CALL ACMM(IPGAS,'ESPNEULE',MOTNEU)
  219. c*c*c*c*c*c***********************************
  220. SEGACT MLMOT1
  221. NESP = MLMOT1.MOTS(/2)
  222. C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  223. SEGINI SORGAS
  224. DO I1 = 1, NESP
  225. C-------------------------------
  226. C N.B. MOT1 est un CHARACTER*(4)
  227. C-------------------------------
  228. MOT1(1) = MLMOT1.MOTS(I1)
  229. MTYPI = 'MOT '
  230. MTYPR = ' '
  231. CALL ACCTAB(ISOUR,MTYPI,IVALI,XVALI,MOT1(1), LOGII,IRETI,
  232. & MTYPR,IVALR,XVALR,CHARR,LOGIR,IRETR)
  233. IF((IERR .NE. 0) .OR. (MTYPR .NE. 'CHPOINT ')) THEN
  234. C------------------------------
  235. C Message d'erreur standard
  236. C -301 0 %m1:40
  237. C------------------------------
  238. MOTERR = 'TAB1 . SOUR, TAB1 . ESPEULE = ??? '
  239. WRITE(IOIMP,*) MOTERR(1:40)
  240. C------------------------------
  241. C Message d'erreur standard
  242. C 21 2
  243. C Données incompatibles
  244. C------------------------------
  245. CALL ERREUR(21)
  246. GOTO 9999
  247. ENDIF
  248. SORGAS.SOUR(I1) = IRETR
  249. ENDDO
  250. C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  251. C-------------------------------------------------
  252. c Reading the enthalpies of formation at 0 K
  253. c-------------------------------------------------
  254. DO I1 = 1, NESP
  255. MOT1(1) = MLMOT1.MOTS(I1)
  256. C
  257. C******* CALL ACMF(...) ne marche pas parce que on a
  258. C des espaces dans nos noms de composantes
  259. C
  260. MTYPI = 'MOT '
  261. MTYPR = ' '
  262. CALL ACCTAB(IPGAS,MTYPI,IVALI,XVALI,MOT1(1), LOGII,IRETI,
  263. & MTYPR,IVALR,XVALR,CHARR,LOGIR,IESP)
  264. C
  265. C******* En IESP il y a la table IPGAZ.MOT1
  266. C
  267. IF((IERR .NE. 0) .OR. (MTYPR .NE. 'TABLE ')) THEN
  268.  
  269. C
  270. C********** Message d'erreur standard
  271. C -301 0 %m1:40
  272. C
  273. MOTERR = ' '
  274. MOTERR(1:7) = 'ARG1 . '
  275. MOTERR(8:11) = MOT1(1)
  276. MOTERR(13:17) = '= ???'
  277. WRITE(IOIMP,*) MOTERR
  278. C
  279. C********** Message d'erreur standard
  280. C 21 2
  281. C Données incompatibles
  282. C
  283. CALL ERREUR(21)
  284. GOTO 9999
  285. ENDIF
  286. C
  287. C******* H0K
  288. C
  289. MTYPI = 'MOT '
  290. MTYPR = ' '
  291. CALL ACCTAB(IESP,MTYPI,IVALI,XVALI, 'H0K' , LOGII,IRETI,
  292. & MTYPR,IVALR, XVALR ,CHARR,LOGIR,IRETR)
  293. IF((IERR .NE. 0) .OR. (MTYPR .NE. 'FLOTTANT')) THEN
  294.  
  295. C
  296. C********** Message d'erreur standard
  297. C -301 0 %m1:40
  298. C
  299. MOTERR = ' '
  300. MOTERR(1:7) = 'ARG1 . '
  301. MOTERR(8:11) = MOT1(1)
  302. MOTERR(13:25) = ' . H0K = ??? '
  303. WRITE(IOIMP,*) MOTERR
  304. C
  305. C********** Message d'erreur standard
  306. C 21 2
  307. C Données incompatibles
  308. C
  309. CALL ERREUR(21)
  310. GOTO 9999
  311. ENDIF
  312. SORGAS.H0K(I1)=XVALR
  313. ENDDO
  314. CCCCC--------------------------------------------------------
  315. C
  316. C******* CALL ACMF(...) ne marche pas parce que on a
  317. C des espaces dans nos noms de composantes
  318. C
  319. MTYPI = 'MOT '
  320. MTYPR = ' '
  321. CALL ACCTAB(IPGAS,MTYPI,IVALI,XVALI,MOTNEU, LOGII,IRETI,
  322. & MTYPR,IVALR,XVALR,CHARR,LOGIR,IESP)
  323. C
  324. C******* En IESP il y a la table IPGAZ.MOT1
  325. C
  326. IF((IERR .NE. 0) .OR. (MTYPR .NE. 'TABLE ')) THEN
  327.  
  328. C
  329. C********** Message d'erreur standard
  330. C -301 0 %m1:40
  331. C
  332. MOTERR = ' '
  333. MOTERR(1:7) = 'ARG1 . '
  334. MOTERR(8:11) = MOT1(1)
  335. MOTERR(13:17) = '= ???'
  336. WRITE(IOIMP,*) MOTERR
  337. C
  338. C********** Message d'erreur standard
  339. C 21 2
  340. C Données incompatibles
  341. C
  342. CALL ERREUR(21)
  343. GOTO 9999
  344. ENDIF
  345. C
  346. C******* H0K of the species which are not in the N-S equations
  347. C
  348. MTYPI = 'MOT '
  349. MTYPR = ' '
  350. CALL ACCTAB(IESP,MTYPI,IVALI,XVALI, 'H0K' , LOGII,IRETI,
  351. & MTYPR,IVALR, XVALR ,CHARR,LOGIR,IRETR)
  352. IF((IERR .NE. 0) .OR. (MTYPR .NE. 'FLOTTANT')) THEN
  353.  
  354. C
  355. C********** Message d'erreur standard
  356. C -301 0 %m1:40
  357. C
  358. MOTERR = ' '
  359. MOTERR(1:7) = 'ARG1 . '
  360. MOTERR(8:11) = MOT1(1)
  361. MOTERR(13:25) = ' . H0K = ??? '
  362. WRITE(IOIMP,*) MOTERR
  363. C
  364. C********** Message d'erreur standard
  365. C 21 2
  366. C Données incompatibles
  367. C
  368. CALL ERREUR(21)
  369. GOTO 9999
  370. ENDIF
  371. SORGAS.H0K(NESP+1)=XVALR
  372. CC------------------------------------------------
  373. SEGDES SORGAS
  374. SEGDES MLMOT1
  375. C-------------------------------------------------
  376. C Reading the turbulent viscosity
  377. C-------------------------------------------------
  378. MTYPI = 'MOT '
  379. MTYPR = ' '
  380. CALL ACCTAB(IPGAS,MTYPI,IVALI,XVALI,'MUTURB',LOGII,IRETI,
  381. & MTYPR,IVALR,XVALR,CHARR,LOGIR,IRETR)
  382. IF((IERR .NE. 0) .OR. (MTYPR .NE. 'CHPOINT ')) THEN
  383. C------------------------------
  384. C Message d'erreur standard
  385. C -301 0 %m1:40
  386. C------------------------------
  387. MOTERR = 'TAB1 . MUTURB = ??? '
  388. WRITE(IOIMP,*) MOTERR(1:40)
  389. C------------------------------
  390. C Message d'erreur standard
  391. C 21 2
  392. C Données incompatibles
  393. C------------------------------
  394. CALL ERREUR(21)
  395. GOTO 9999
  396. ENDIF
  397. IMUT = IRETR
  398. C-------------------------------------------------
  399. C**** Noms de variables conservatives
  400. C-------------------------------------------------
  401. CALL LIROBJ('LISTMOTS',ILIINC,1,IRET)
  402. IF(IERR .NE. 0) GOTO 9999
  403. MLMOTS = ILIINC
  404. SEGACT MLMOTS
  405. NBCOMP = MLMOTS.MOTS(/2)
  406. MOTKA = MLMOTS.MOTS(IDIM+NESP+3)
  407. MOTEPS = MLMOTS.MOTS(IDIM+NESP+4)
  408. SEGDES MLMOTS
  409. IF(NBCOMP .NE. (IDIM+NESP+4))THEN
  410. MOTERR(1:40) = 'LISTINCO = ???'
  411. WRITE(IOIMP,*) MOTERR
  412. C
  413. C******* Message d'erreur standard
  414. C 21 2
  415. C Données incompatibles
  416. C
  417. CALL ERREUR(21)
  418. GOTO 9999
  419. ENDIF
  420. C---------------------------------------------------
  421. C**** Densité
  422. C---------------------------------------------------
  423. CALL LIROBJ('CHPOINT',IRO,1,IRET)
  424. IF (IERR.NE.0) GOTO 9999
  425. C
  426. C**** On cherche le pointeur de son maillage et on l'impose sur les
  427. C autres CHPOINT
  428. C
  429. MCHPOI = IRO
  430. SEGACT MCHPOI
  431. MSOUPO = MCHPOI.IPCHP(1)
  432. SEGACT MSOUPO
  433. ICEN = MSOUPO.IGEOC
  434. SEGDES MSOUPO
  435. SEGDES MCHPOI
  436. C
  437. C**** Control du CHPOINT: QUEPOI
  438. C
  439. INDIC = 1
  440. NBCOMP = 1
  441. MOT(1) = 'SCAL'
  442. CALL QUEPOI(IRO, ICEN, INDIC, NBCOMP, MOT)
  443. IF(IERR .NE. 0) GOTO 9999
  444. C-------------------------------------------------
  445. C**** Lecture du CHPOINT DEBIT.
  446. C-------------------------------------------------
  447. CALL LIROBJ('CHPOINT',IROVIT,1,IRET)
  448. IF (IERR.NE.0) GOTO 9999
  449. C
  450. C**** Control du CHPOINT
  451. C
  452. JGN = 4
  453. JGM = IDIM
  454. SEGINI MLMOTS
  455. MLMOTS.MOTS(1) = 'UX '
  456. MLMOTS.MOTS(2) = 'UY '
  457. IF(IDIM .EQ. 3) MLMOTS.MOTS(3) = 'UZ '
  458. CALL QUEPO1(IROVIT, ICEN, MLMOTS)
  459. IF(IERR .NE. 0) GOTO 9999
  460. C
  461. C-------------------------------------------------
  462. C**** Lecture du CHPOINT GRAVITE.
  463. C-------------------------------------------------
  464. CALL LIROBJ('CHPOINT',IGRAV,1,IRET)
  465. IF (IERR.NE.0) GOTO 9999
  466. C
  467. C**** Control du CHPOINT
  468. C
  469. CALL QUEPO1(IGRAV, ICEN, MLMOTS)
  470. IF(IERR .NE. 0) GOTO 9999
  471. SEGSUP MLMOTS
  472. C---------------------------------------------------------
  473. C**** Turbulent kinetic energy
  474. C---------------------------------------------------------
  475. CALL LIROBJ('CHPOINT',IRKA,1,IRET)
  476. IF (IERR.NE.0) GOTO 9999
  477. C
  478. C**** Control du CHPOINT: QUEPOI
  479. C
  480. INDIC = 1
  481. NBCOMP = 1
  482. MOT(1) = MOTKA
  483. CALL QUEPOI(IRKA, ICEN, INDIC, NBCOMP, MOT)
  484. IF(IERR .NE. 0) GOTO 9999
  485. C
  486. C**** Turbulent energy dissipation
  487. C
  488. CALL LIROBJ('CHPOINT',IREPS,1,IRET)
  489. IF (IERR.NE.0) GOTO 9999
  490. C
  491. C**** Control du CHPOINT
  492. C
  493. INDIC = 1
  494. NBCOMP = 1
  495. MOT(1) = MOTEPS
  496. CALL QUEPOI(IREPS, ICEN, INDIC, NBCOMP, MOT)
  497. IF(IERR .NE. 0) GOTO 9999
  498. *------------------------------------------------------
  499. * Gradient of density given at the centre
  500. *------------------------------------------------------
  501. CALL LIROBJ('CHPOINT',IGRADR,1,IRET)
  502. IF(IERR .NE. 0) GOTO 9999
  503. *------------------------------
  504. JGN = 4
  505. JGM = IDIM
  506. SEGINI MLMOTS
  507. IF(IDIM .EQ. 2) THEN
  508. MLMOTS.MOTS(1) = 'P1DX'
  509. MLMOTS.MOTS(2) = 'P1DY'
  510. ELSE
  511. MLMOTS.MOTS(1) = 'P1DX'
  512. MLMOTS.MOTS(2) = 'P1DY'
  513. MLMOTS.MOTS(3) = 'P1DZ'
  514. ENDIF
  515. CALL QUEPO1(IGRADR, ICEN, MLMOTS)
  516. IF(IERR .NE. 0) GOTO 9999
  517. SEGDES MLMOTS
  518. *------------------------------------------------------
  519. * Gradient of velocity given at the centre
  520. *------------------------------------------------------
  521. CALL LIROBJ('CHPOINT',IGRADV,1,IRET)
  522. IF(IERR .NE. 0) GOTO 9999
  523. *------------------------------
  524. JGN = 4
  525. JGM = IDIM*IDIM
  526. SEGINI MLMOTS
  527. IF(IDIM .EQ. 2) THEN
  528. MLMOTS.MOTS(1) = 'P1DX'
  529. MLMOTS.MOTS(2) = 'P1DY'
  530. MLMOTS.MOTS(3) = 'P2DX'
  531. MLMOTS.MOTS(4) = 'P2DY'
  532. ELSE
  533. MLMOTS.MOTS(1) = 'P1DX'
  534. MLMOTS.MOTS(2) = 'P1DY'
  535. MLMOTS.MOTS(3) = 'P1DZ'
  536. MLMOTS.MOTS(4) = 'P2DX'
  537. MLMOTS.MOTS(5) = 'P2DY'
  538. MLMOTS.MOTS(6) = 'P2DZ'
  539. MLMOTS.MOTS(7) = 'P3DX'
  540. MLMOTS.MOTS(8) = 'P3DY'
  541. MLMOTS.MOTS(9) = 'P3DZ'
  542. ENDIF
  543. CALL QUEPO1(IGRADV, ICEN, MLMOTS)
  544. IF(IERR .NE. 0) GOTO 9999
  545. SEGDES MLMOTS
  546. C------------------------------------------------------
  547. C**** Results
  548. C------------------------------------------------------
  549. IF(IMET.EQ.1)THEN
  550. C
  551. C******* On calcule le residu
  552. C
  553. CALL FIMTR2(SORGAS,ILIINC,ICEN,IRO,IROVIT,IGRAV,IRKA,IREPS
  554. & ,IGRADR,IGRADV,IMUT,TSIGT,TCEPS1,TCEPS2,IRES)
  555. ENDIF
  556. C
  557. IF(IRES .NE. 0) CALL ECROBJ('CHPOINT ',IRES)
  558. C
  559. 9999 CONTINUE
  560. RETURN
  561. END
  562.  
  563.  
  564.  
  565.  
  566.  
  567.  
  568.  
  569.  
  570.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales