Salome HOME
Homard executable
[modules/homard.git] / src / tool / Utilitaire / utsuar.F
diff --git a/src/tool/Utilitaire/utsuar.F b/src/tool/Utilitaire/utsuar.F
new file mode 100644 (file)
index 0000000..d12f33d
--- /dev/null
@@ -0,0 +1,173 @@
+      subroutine utsuar ( disare,
+     >                    hetare, merare, filare,
+     >                    ancare, nouare,
+     >                    nbarre )
+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 - SUppression des ARetes
+c    --           --              --
+c ______________________________________________________________________
+c
+c   Attention : toutes les aretes n'ont pas forcement une mere !
+c               celles crees en interne a des tetraedres/triangles
+c               sont de la premiere generation, meme si elles
+c               sont a des niveaux > 1
+c ______________________________________________________________________
+c .        .     .        .                                            .
+c .  nom   . e/s . taille .           description                      .
+c .____________________________________________________________________.
+c . disare . e   . nouvar . indicateurs de disparition des aretes      .
+c . hetare . es  . nouvar . historique de l'etat des aretes            .
+c . merare . es  . nouvar . mere des aretes                            .
+c . filare . es  . nouvar . premiere fille des aretes                  .
+c . ancare .   s . nouvar . anciens numeros des aretes conservees      .
+c . nouare .   s .0:nouvar. nouveaux numeros des aretes conservees     .
+c . nbarre .   s .   1    . nombre d'aretes restantes                  .
+c ______________________________________________________________________
+c
+c====
+c 0. declarations et dimensionnement
+c====
+c
+c 0.1. ==> generalites
+c
+      implicit none
+      save
+c
+cgn      character*6 nompro
+cgn      parameter ( nompro = 'UTSUAR' )
+c
+c 0.2. ==> communs
+c
+#include "nombar.h"
+#include "nouvnb.h"
+c
+c 0.3. ==> arguments
+c
+      integer hetare(nouvar), merare(nouvar), filare(nouvar)
+      integer disare(nouvar), ancare(nouvar)
+      integer nouare(0:nouvar)
+      integer nbarre
+c
+c 0.4. ==> variables locales
+c
+      integer larete, lamere, gdmere, etgmer
+      integer cmptr, e1, e2, et
+c ______________________________________________________________________
+c
+c====
+c 1. fabrication des tableaux ancare et nouare
+c====
+c
+      cmptr = 0
+      nouare(0) = 0
+c
+c 1.1 generation des tableaux reciproques
+c
+      do 100 , larete = 1 , nbarpe
+c
+        if ( disare(larete).ne.0 ) then
+c
+          nouare(larete) = 0
+          hetare(larete) = 10 * int( hetare(larete) / 10 ) + 5
+c
+        else
+c
+          cmptr = cmptr + 1
+          ancare(cmptr)  = larete
+          nouare(larete) = cmptr
+c
+        endif
+c
+  100 continue
+c
+c 1.2 nombre d'entites restantes apres suppression
+c     (pour la remise a jour du nombre d'entites du maillage)
+c
+      nbarre = cmptr
+c
+c====
+c 2. modification des etats des meres eventuelles des aretes disparues
+c====
+c
+      do 200 , larete = 1 , nbarpe
+c
+        if ( disare(larete).ne.0 ) then
+c
+c         mise a zero de l'etat actuel de la mere
+c
+          lamere = merare(larete)
+c
+          if ( lamere.ne.0 ) then
+            hetare(lamere) = hetare(lamere) - mod(hetare(lamere),10)
+          endif
+c
+        endif
+c
+  200 continue
+c
+c====
+c 3. modification des etats des eventuelles grand-meres des aretes
+c====
+c
+      do 300 , larete = 1 , nbarpe
+c
+        if ( disare(larete).ne.0 ) then
+c
+          lamere = merare(larete)
+c
+          if ( lamere.ne.0 ) then
+c
+            gdmere = merare(lamere)
+c
+            if ( gdmere.ne.0 ) then
+c
+c 3.1     verification de l'etat de la grand-mere
+c
+              etgmer = mod( hetare(gdmere) , 10 )
+c
+              if ( etgmer.ne.2 ) then
+c
+c 3.1.1     verification de l'etat des soeurs de la mere
+c
+                e1 = mod( hetare(filare(gdmere))   , 10 )
+                e2 = mod( hetare(filare(gdmere)+1) , 10 )
+                et = e1 + e2
+c
+c 3.1.2       attribution de l'etat 'coupee en 2' a l'entite
+c
+                if ( et .eq. 0 ) then
+                  hetare(gdmere) = hetare(gdmere)
+     >                           - mod(hetare(gdmere),10)
+     >                           + 2
+                endif
+c
+              endif
+c
+            endif
+c
+          endif
+c
+        endif
+c
+  300 continue
+c
+      end