Salome HOME
Homard executable
[modules/homard.git] / src / tool / Utilitaire / utnpen.F
diff --git a/src/tool/Utilitaire/utnpen.F b/src/tool/Utilitaire/utnpen.F
new file mode 100644 (file)
index 0000000..bbe6674
--- /dev/null
@@ -0,0 +1,148 @@
+      subroutine utnpen ( lepent, niveau,
+     >                    facpen, perpen,
+     >                    nivtri, nivqua )
+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 : Niveau d'un PENtaedre
+c     --           -           ---
+c ______________________________________________________________________
+c .        .     .        .                                            .
+c .  nom   . e/s . taille .           description                      .
+c .____________________________________________________________________.
+c . lepent . e   .  1     . numero du pentaedre a examiner             .
+c . niveau .  s  .  1     . niveau                                     .
+c . facpen . e   .nbpecf*5. numeros des 5 faces des pentaedres         .
+c . perpen . e   . nbpeto . pere des pentaedres                        .
+c . nivtri . e   . nbtrto . niveau dans le raffinement/deraffinement   .
+c . nivqua . e   . nbquto . niveau dans le raffinement/deraffinement   .
+c ______________________________________________________________________
+c
+c====
+c 0. declarations et dimensionnement
+c====
+c
+c 0.1. ==> generalites
+c
+      implicit none
+      save
+c
+c 0.2. ==> communs
+c
+#include "nombtr.h"
+#include "nombqu.h"
+#include "nombpe.h"
+c
+c 0.3. ==> arguments
+c
+      double precision niveau
+c
+      integer lepent
+      integer facpen(nbpecf,5), perpen(nbpeto)
+      integer nivtri(nbtrto), nivqua(nbquto)
+c
+c 0.4. ==> variables locales
+c
+      integer lafac1, lafac2, lafac3, lafac4, lafac5
+      integer lepere
+      integer iaux, jaux
+c
+c 0.5. ==> initialisations
+c
+#include "impr03.h"
+c
+cgn      write(*,90002) 'nbpema, nbpecf, nbpeto', nbpema, nbpecf, nbpeto
+cgn      write(*,90002) 'nbheco', nbheco
+c
+c====
+c 1. Du maillage initial
+c====
+c
+      if ( lepent.le.nbpema ) then
+c
+        niveau = 0.d0
+c
+c====
+c 2. Au dela
+c====
+c
+      else
+c
+c 2.1. ==> Si le pentaedre est decrit par faces :
+c            le plus haut niveau de ses faces
+c
+        if ( lepent.le.nbpecf ) then
+c
+          lafac1 = facpen(lepent,1)
+          lafac2 = facpen(lepent,2)
+          lafac3 = facpen(lepent,3)
+          lafac4 = facpen(lepent,4)
+          lafac5 = facpen(lepent,5)
+          jaux = max(nivtri(lafac1),nivtri(lafac2),
+     >               nivqua(lafac3),nivqua(lafac4),nivqua(lafac5))
+c
+c 2.2. ==> Si le pentaedre est decrit par aretes :
+c            son niveau est le niveau du pere augmente d'un cran
+c
+        else
+c
+          iaux = perpen(lepent)
+c
+          if ( iaux.gt.0 ) then
+            lepere = iaux
+          else
+            write(*,90002) 'lepent, iaux', lepent, iaux
+            write(*,*) 'arret dans utnpen'
+            STOP
+          endif
+cgn      write(*,90002) 'iaux, lepere', iaux, lepere
+c
+          if ( iaux.gt.0 ) then
+c
+            lafac1 = facpen(lepere,1)
+            lafac2 = facpen(lepere,2)
+            lafac3 = facpen(lepere,3)
+            lafac4 = facpen(lepere,4)
+            lafac5 = facpen(lepere,5)
+            jaux = max(nivtri(lafac1),nivtri(lafac2),
+     >                 nivqua(lafac3),nivqua(lafac4),nivqua(lafac5))
+c
+          endif
+c
+          jaux = jaux + 1
+c
+        endif
+c
+cgn      write(*,90002) '==> jaux',jaux
+        niveau = dble(jaux)
+c
+c====
+c 3. Si le pentaedre est de conformite, on prend le niveau
+c            intermediaire immediatement inferieur
+c====
+c
+        if ( lepent.gt.nbpepe ) then
+          niveau = niveau - 0.5d0
+        endif
+c
+      endif
+cgn      write(*,90004) '==> niveau',niveau
+c
+      end