subroutine utvgv2 ( nbarto, nbtrto, nbquto, > nbteto, nbtecf, nbteca, > nbheto, nbhecf, nbheca, > nbpyto, nbpycf, nbpyca, > nbpeto, nbpecf, nbpeca, > aretri, > arequa, > tritet, cotrte, aretet, > quahex, coquhe, arehex, > facpyr, cofapy, arepyr, > facpen, cofape, arepen, > nbtear, pttear, > nbhear, pthear, > nbpyar, ptpyar, > nbpear, ptpear, > ulsort, langue, codret ) c ______________________________________________________________________ c c H O M A R D c c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D c c Version originale enregistree le 18 juin 1996 sous le numero 96036 c aupres des huissiers de justice Simart et Lavoir a Clamart c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014 c aupres des huissiers de justice c Lavoir, Silinski & Cherqui-Abrahmi a Clamart c c HOMARD est une marque deposee d'Electricite de France c c Copyright EDF 1996 c Copyright EDF 1998 c Copyright EDF 2002 c Copyright EDF 2020 c ______________________________________________________________________ c c UTilitaire : VoisinaGes Volumes / aretes - phase 2 c -- - - - - c ______________________________________________________________________ c c determine le nombre de volumes voisins de chaque arete, par categorie c En sortie : c pttear(0) = 0 c pttear(i) = position du dernier voisin de l'arete i-1 c = nombre cumule de voisins pour les (i-1) 1eres aretes c ______________________________________________________________________ c . . . . . c . nom . e/s . taille . description . c .____________________________________________________________________. c . nbarto . e . 1 . nombre total d'aretes . c . nbtrto . e . 1 . nombre total de triangles . c . nbquto . e . 1 . nombre total de quadrangles . c . nbteto . e . 1 . nombre de tetraedres total . c . nbtecf . e . 1 . nombre total de tetraedres decrits par face. c . nbteca . e . 1 . nombre total de tetras decrits par aretes . c . nbheto . e . 1 . nombre d'hexaedres total . c . nbhecf . e . 1 . nombre d'hexaedres decrits par faces . c . nbheca . e . 1 . nombre d'hexaedres decrits par aretes . c . nbpyto . e . 1 . nombre de pyramides total . c . nbpycf . e . 1 . nombre total de pyramides decrits par faces. c . nbpyca . e . 1 . nombre total de pyras decrits par aretes . c . nbpeto . e . 1 . nombre de pentaedres total . c . nbpecf . e . 1 . nombre total de pentas decrits par faces . c . nbpeca . e . 1 . nombre total de pentas decrits par aretes . c . aretri . e .nbtrto*3. numeros des 3 aretes des triangles . c . arequa . e .nbquto*4. numeros des 4 aretes des quadrangles . c . tritet . e .nbtecf*4. numeros des 4 triangles des tetraedres . c . cotrte . e .nbtecf*4. code des 4 triangles des tetraedres . c . aretet . e .nbteca*6. numeros des 6 aretes des tetraedres . c . quahex . e .nbhecf*6. numeros des 6 quadrangles des hexaedres . c . coquhe . e .nbhecf*6. codes des 6 quadrangles des hexaedres . c . arehex . e .nbheca12. numeros des 12 aretes des hexaedres . c . facpyr . e .nbpycf*5. numeros des 5 faces des pyramides . c . cofapy . e .nbpycf*5. codes des faces des pyramides . c . arepyr . e .nbpyca*8. numeros des 8 aretes des pyramides . c . facpen . e .nbpecf*5. numeros des 5 faces des pentaedres . c . cofape . e .nbpecf*5. code des 5 faces des pentaedres . c . arepen . e .nbpeca*9. numeros des 9 aretes des pentaedres . c . nbtear . s . 1 . nombre de tetraedres voisins d'aretes . c . pttear . s .0:nbarto. nombre de tetraedres voisins par aretes . c . nbhear . s . 1 . nombre d'hexaedres voisins d'aretes . c . pthear . s .0:nbarto. nombre d'hexaedres voisins par aretes . c . nbpyar . s . 1 . nombre de pyramides voisines d'aretes . c . ptpyar . s .0:nbarto. nombre de pyramides voisines par aretes . c . nbpear . s . 1 . nombre de pentaedres voisins d'aretes . c . ptpear . s .0:nbarto. nombre de pentaedres voisins par aretes . c . ulsort . e . 1 . numero d'unite logique de la liste standard. c . langue . e . 1 . langue des messages . c . . . . 1 : francais, 2 : anglais . c . codret . es . 1 . code de retour des modules . c . . . . 0 : pas de probleme . c . . . . non nul : probleme . c ______________________________________________________________________ c c==== c 0. declarations et dimensionnement c==== c c 0.1. ==> generalites c implicit none save c character*6 nompro parameter ( nompro = 'UTVGV2' ) c #include "nblang.h" c c 0.2. ==> communs c #include "envex1.h" #include "impr02.h" c c 0.3. ==> arguments c integer nbarto, nbtrto, nbquto integer nbteto, nbtecf, nbteca integer nbheto, nbhecf, nbheca integer nbpyto, nbpycf, nbpyca integer nbpeto, nbpecf, nbpeca c integer aretri(nbtrto,3) integer arequa(nbquto,4) integer tritet(nbtecf,4), cotrte(nbtecf,4), aretet(nbteca,6) integer quahex(nbhecf,6), coquhe(nbhecf,6), arehex(nbheca,12) integer facpyr(nbpycf,5), cofapy(nbpycf,5), arepyr(nbpyca,8) integer facpen(nbpecf,5), cofape(nbpecf,5), arepen(nbpeca,9) c integer nbtear, pttear(0:nbarto) integer nbhear, pthear(0:nbarto) integer nbpyar, ptpyar(0:nbarto) integer nbpear, ptpear(0:nbarto) c integer ulsort, langue, codret c c 0.4. ==> variables locales c integer iaux integer letetr, lehexa, lapyra, lepent integer listar(12) c integer nbmess parameter ( nbmess = 10 ) character*80 texte(nblang,nbmess) c ______________________________________________________________________ c c==== c 1. initialisation c==== c #include "impr01.h" c #ifdef _DEBUG_HOMARD_ write (ulsort,texte(langue,1)) 'Entree', nompro call dmflsh (iaux) #endif c #include "impr03.h" c #ifdef _DEBUG_HOMARD_ write (ulsort,90002) 'nbarto', nbarto write (ulsort,90002) 'nbtrto', nbtrto write (ulsort,90002) 'nbquto', nbquto write (ulsort,90002) 'nbteto, nbtecf', nbteto, nbtecf write (ulsort,90002) 'nbheto, nbhecf', nbheto, nbhecf write (ulsort,90002) 'nbpyto, nbpycf', nbpyto, nbpycf write (ulsort,90002) 'nbpeto, nbpecf', nbpeto, nbpecf #endif c c==== c 2. decompte des tetraedres voisins d'aretes c==== c if ( nbteto.gt.0 ) then c do 21 , iaux = 0 , nbarto pttear(iaux) = 0 21 continue c do 22 , letetr = 1 , nbteto c if ( letetr.le.nbtecf ) then c call utarte ( letetr, > nbtrto, nbtecf, > aretri, tritet, cotrte, > listar ) c else c do 221 , iaux = 1 , 6 listar(iaux) = aretet(letetr-nbtecf,iaux) 221 continue c endif c do 222 , iaux = 1 , 6 pttear(listar(iaux)) = pttear(listar(iaux)) + 1 222 continue c 22 continue c do 23 , iaux = 1 , nbarto pttear(iaux) = pttear(iaux-1) + pttear(iaux) 23 continue nbtear = pttear(nbarto) do 24 , iaux = nbarto , 1 , -1 pttear(iaux) = pttear(iaux-1) 24 continue c endif c c==== c 3. decompte des hexaedres voisins d'aretes c==== c if ( nbheto.gt.0 ) then c do 31 , iaux = 0 , nbarto pthear(iaux) = 0 31 continue c do 32 , lehexa = 1 , nbheto c if ( lehexa.le.nbhecf ) then c call utarhe ( lehexa, > nbquto, nbhecf, > arequa, quahex, coquhe, > listar ) c else c do 321 , iaux = 1 , 12 listar(iaux) = arehex(lehexa-nbhecf,iaux) 321 continue c endif c do 322 , iaux = 1 , 12 pthear(listar(iaux)) = pthear(listar(iaux)) + 1 322 continue c 32 continue c do 33 , iaux = 1 , nbarto pthear(iaux) = pthear(iaux-1) + pthear(iaux) 33 continue nbhear = pthear(nbarto) do 34 , iaux = nbarto , 1 , -1 pthear(iaux) = pthear(iaux-1) 34 continue c endif c c==== c 4. decompte des pyramides voisines d'aretes c==== c if ( nbpyto.gt.0 ) then c do 41 , iaux = 0 , nbarto ptpyar(iaux) = 0 41 continue c do 42 , lapyra = 1 , nbpyto c if ( lapyra.le.nbpycf ) then c call utarpy ( lapyra, > nbtrto, nbpycf, > aretri, facpyr, cofapy, > listar ) c else c do 421 , iaux = 1 , 8 listar(iaux) = arepyr(lapyra-nbpycf,iaux) 421 continue c endif c do 422 , iaux = 1 , 8 ptpyar(listar(iaux)) = ptpyar(listar(iaux)) + 1 422 continue c 42 continue c do 43 , iaux = 1 , nbarto ptpyar(iaux) = ptpyar(iaux-1) + ptpyar(iaux) 43 continue nbpyar = ptpyar(nbarto) do 44 , iaux = nbarto , 1 , -1 ptpyar(iaux) = ptpyar(iaux-1) 44 continue c endif c c==== c 5. decompte des pentaedres voisins d'aretes c==== c if ( nbpeto.gt.0 ) then c do 51 , iaux = 0 , nbarto ptpear(iaux) = 0 51 continue c do 52 , lepent = 1 , nbpeto c if ( lepent.le.nbpecf ) then c call utarpe ( lepent, > nbquto, nbpecf, > arequa, facpen, cofape, > listar ) c else c do 521 , iaux = 1 , 9 listar(iaux) = arepen(lepent-nbpecf,iaux) 521 continue c endif c do 522 , iaux = 1 , 9 ptpear(listar(iaux)) = ptpear(listar(iaux)) + 1 522 continue c 52 continue c do 53 , iaux = 1 , nbarto ptpear(iaux) = ptpear(iaux-1) + ptpear(iaux) 53 continue nbpear = ptpear(nbarto) do 54 , iaux = nbarto , 1 , -1 ptpear(iaux) = ptpear(iaux-1) 54 continue c endif c #ifdef _DEBUG_HOMARD_ write (ulsort,90002) 'nbtear', nbtear write (ulsort,90002) 'nbhear', nbhear write (ulsort,90002) 'nbpyar', nbpyar write (ulsort,90002) 'nbpear', nbpear #endif c c==== c 6. La fin c==== c if ( codret.ne.0 ) then c #include "envex2.h" c write (ulsort,texte(langue,1)) 'Sortie', nompro write (ulsort,texte(langue,2)) codret c endif c #ifdef _DEBUG_HOMARD_ write (ulsort,texte(langue,1)) 'Sortie', nompro call dmflsh (iaux) #endif c end