Salome HOME
Homard executable
[modules/homard.git] / src / tool / Creation_Maillage / cmrdtr.F
diff --git a/src/tool/Creation_Maillage/cmrdtr.F b/src/tool/Creation_Maillage/cmrdtr.F
new file mode 100644 (file)
index 0000000..d0389b4
--- /dev/null
@@ -0,0 +1,307 @@
+      subroutine cmrdtr ( somare, hetare, filare, merare,
+     >                    aretri, hettri, filtri, pertri,
+     >                    nivtri, decfac,
+     >                    famare, famtri,
+     >                    indare, indtri,
+     >                    cfatri,
+     >                    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    Creation du Maillage - Raffinement - Decoupage des TRiangles
+c    -           -          -             -             --
+c ______________________________________________________________________
+c .        .     .        .                                            .
+c .  nom   . e/s . taille .           description                      .
+c .____________________________________________________________________.
+c . somare . es  .2*nouvar. numeros des extremites d'arete             .
+c . hetare . es  . nouvar . historique de l'etat des aretes            .
+c . filare . es  . nouvar . premiere fille des aretes                  .
+c . merare . es  . nouvar . mere des aretes                            .
+c . aretri . es  .nouvtr*3. numeros des 3 aretes des triangles         .
+c . hettri . es  . nouvtr . historique de l'etat des triangles         .
+c . filtri . es  . nouvtr . premier fils des triangles                 .
+c . pertri . es  . nouvtr . pere des triangles                         .
+c . nivtri . es  . nouvtr . niveau des triangles                       .
+c . decfac . es  . -nouvqu. decision sur les faces (quad. + tri.)      .
+c .        .     . :nouvtr.                                            .
+c . famare .     . nouvar . famille des aretes                         .
+c . famtri . es  . nouvtr . famille des triangles                      .
+c . indare . es  . 1      . indice de la derniere arete creee          .
+c . indtri . es  . 1      . indice du dernier triangle cree            .
+c . cfatri . e   . nctftr*. codes des familles des triangles           .
+c .        .     . nbftri .   1 : famille MED                          .
+c .        .     .        .   2 : type de triangle                     .
+c .        .     .        .   3 : numero de surface de frontiere       .
+c .        .     .        .   4 : famille des aretes internes apres raf.
+c .        .     .        . + l : appartenance a l'equivalence l       .
+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 ______________________________________________________________________
+c
+c====
+c 0. declarations et dimensionnement
+c====
+c
+c 0.1. ==> generalites
+c
+      implicit none
+      save
+c
+      character*6 nompro
+      parameter ( nompro = 'CMRDTR' )
+c
+#include "nblang.h"
+#include "cofatq.h"
+c
+c 0.2. ==> communs
+c
+#include "envex1.h"
+#include "nombtr.h"
+#include "nouvnb.h"
+#include "dicfen.h"
+#include "nbfami.h"
+c
+c 0.3. ==> arguments
+c
+      integer decfac(-nouvqu:nouvtr)
+      integer somare(2,nouvar), hetare(nouvar), filare(nouvar)
+      integer merare(nouvar), aretri(nouvtr,3), hettri(nouvtr)
+      integer filtri(nouvtr), pertri(nouvtr), nivtri(nouvtr)
+      integer famare(nouvar), famtri(nouvtr)
+      integer indare, indtri
+      integer cfatri(nctftr,nbftri)
+c
+      integer ulsort, langue, codret
+c
+c 0.4. ==> variables locales
+c
+      integer fammer, letria
+      integer n1, n2, n3, as1s2, as1s3, as2s3
+      integer as1n2, as1n3, as2n1, as2n3, as3n1, as3n2
+      integer af1, af2, af3, etat, nf, nf1, nf2, nf3, niv
+      integer lepere
+      integer iaux
+c
+      integer nbmess
+      parameter ( nbmess = 10 )
+      character*80 texte(nblang,nbmess)
+c
+c 0.5. ==> initialisations
+c ______________________________________________________________________
+c
+c====
+c 1. preliminaires
+c====
+c
+#include "impr01.h"
+c
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,texte(langue,1)) 'Entree', nompro
+      call dmflsh (iaux)
+#endif
+c
+      texte(1,4) = '(''Decoupage du triangle'',i10)'
+c
+      texte(2,4) = '(''Splitting of triangle #'',i10)'
+c
+#include "impr03.h"
+c
+c====
+c 1. decoupage en 4 des triangles de decision 4
+c====
+c
+cgn      print *,'indtri',indtri
+cgn      print *,'indare',indare
+      do 100 , letria = 1 , nbtrpe
+cgn      print *,letria,decfac(letria)
+c
+        if ( decfac(letria).eq.4 ) then
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,texte(langue,4)) letria
+#endif
+c
+c 1.1. ==> determination des numeros d'aretes
+c
+          as2s3 = aretri(letria,1)
+          as1s3 = aretri(letria,2)
+          as1s2 = aretri(letria,3)
+cgn      write (ulsort,90002)'.. indqua',indqua
+cgn      write (ulsort,90002)'.. indare',indare
+cgn      write (ulsort,90002)'.. aretes     ',as2s3,as1s3,as1s2
+cgn      write (ulsort,90002)'.. de filles  ',filare(as2s3),
+cgn     >                    filare(as1s3),filare(as1s2)
+c
+c 1.2. ==> determination des 6 demi-aretes filles des precedentes
+c
+          call utaftr ( somare, filare, as2s3, as1s3, as1s2,
+     >                  as2n1, as3n1,
+     >                  as3n2, as1n2,
+     >                  as1n3, as2n3 )
+c
+c 1.3. ==> determination des noeuds milieux
+c
+          n1 = somare(2,as2n1)
+          n2 = somare(2,as1n2)
+          n3 = somare(2,as1n3)
+c
+c 1.4. ==> creation des aretes internes
+c
+c 1.4.1. ==> leurs numeros
+c
+          af1 = indare + 1
+          af2 = indare + 2
+          af3 = indare + 3
+          indare = af3
+c
+c 1.4.2. ==> les numeros de leurs sommets avec la convention ad'hoc
+c
+          somare(1,af1) = min ( n2 , n3 )
+          somare(2,af1) = max ( n2 , n3 )
+          somare(1,af2) = min ( n1 , n3 )
+          somare(2,af2) = max ( n1 , n3 )
+          somare(1,af3) = min ( n1 , n2 )
+          somare(2,af3) = max ( n1 , n2 )
+c
+c 1.4.3. ==> leur famille
+c
+cgn      write(ulsort,90002) 'famtri(letria)',famtri(letria)
+cgn      write(ulsort,90002) 'avec cfatri',
+cgn     >(cfatri(iaux,famtri(letria)),iaux=1,nctftr)
+cgn      write(ulsort,90002) '==> famare', cfatri(cofafa,famtri(letria))
+          iaux = cfatri(cofafa,famtri(letria))
+          famare(af1) = iaux
+          famare(af2) = iaux
+          famare(af3) = iaux
+c
+c 1.4.4. ==> la parente
+c
+          hetare(af1) = 50
+          hetare(af2) = 50
+          hetare(af3) = 50
+          merare(af1) = 0
+          merare(af2) = 0
+          merare(af3) = 0
+          filare(af1) = 0
+          filare(af2) = 0
+          filare(af3) = 0
+c
+c 1.5. ==> creation des 4 triangles fils
+c
+c         triangle central : nf
+c
+          nf = indtri + 1
+          aretri(nf,1) = af1
+          aretri(nf,2) = af2
+          aretri(nf,3) = af3
+c
+c         triangle : nf + 1
+c
+          nf1 = nf + 1
+          aretri(nf1,1) = af1
+          aretri(nf1,2) = as1n2
+          aretri(nf1,3) = as1n3
+c
+c         triangle : nf + 2
+c
+          nf2 = nf + 2
+          aretri(nf2,1) = as2n1
+          aretri(nf2,2) = af2
+          aretri(nf2,3) = as2n3
+c
+c         triangle : nf + 3
+c
+          nf3 = nf + 3
+          aretri(nf3,1) = as3n1
+          aretri(nf3,2) = as3n2
+          aretri(nf3,3) = af3
+c
+          indtri = nf + 3
+c
+c 1.6. ==> mise a jour de la famille des 4 triangles fils
+c
+          fammer = famtri(letria)
+          famtri(nf)  = fammer
+          famtri(nf1) = fammer
+          famtri(nf2) = fammer
+          famtri(nf3) = fammer
+c
+          hettri(nf)  = 50
+          hettri(nf1) = 50
+          hettri(nf2) = 50
+          hettri(nf3) = 50
+          filtri(nf)  = 0
+          filtri(nf1) = 0
+          filtri(nf2) = 0
+          filtri(nf3) = 0
+          pertri(nf)  = letria
+          pertri(nf1) = letria
+          pertri(nf2) = letria
+          pertri(nf3) = letria
+          niv = nivtri(letria) + 1
+          nivtri(nf)  = niv
+          nivtri(nf1) = niv
+          nivtri(nf2) = niv
+          nivtri(nf3) = niv
+c
+c 1.7. ==> mise a jour du pere et du grand-pere eventuel
+c Remarque : si on est parti d'un macro-maillage non conforme,
+c            certains triangles ont des peres adoptifs de numero
+c            negatif. Il ne faut pas changer leur etat
+c            Le cas des peres negatif parce que quadrangle de conformite
+c            n'existe plus a ce stade : ces triangles ont ete detruits
+c            en amont
+c
+          filtri(letria) = nf
+          hettri(letria) = hettri(letria) + 4
+          lepere = pertri(letria)
+          if ( lepere.gt.0 ) then
+            etat = hettri(lepere)
+            hettri(lepere) = etat - mod(etat,10) + 9
+          endif
+c
+        endif
+c
+  100 continue
+cgn      print *,'indtri',indtri
+cgn      print *,'indare',indare
+c
+c====
+c 2. 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