2 c ______________________________________________________________________
6 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
8 c Version originale enregistree le 18 juin 1996 sous le numero 96036
9 c aupres des huissiers de justice Simart et Lavoir a Clamart
10 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
11 c aupres des huissiers de justice
12 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
14 c HOMARD est une marque deposee d'Electricite de France
20 c ______________________________________________________________________
22 c UTilitaire - INitialisation des Constantes Generales
24 c ______________________________________________________________________
27 c 0. declarations et dimensionnement
30 c 0.1. ==> generalites
72 c 0.4. ==> variables locales
75 integer kaux1, kaux2, kaux3, kaux4
85 c 1.1. ==> les extremes
87 call dmzero ( vinfpo, zeroma )
91 c 1.2. ==> precision machine et plus grand entier
93 call dmprma ( epsima, dmxent, nbchii )
95 c 1.3. ==> les valeurs indefinies
97 call dmindf ( iindef, rindef, sindef )
100 c 2. initialisation des fonctions en dur
103 c 2.1. ==> fonction de numerotation des demi-triangles fils
104 c remarque : la diagonale du tableau n'est pas utilisee
105 c on met une valeur indefinie pour planter au cas ou !
117 c 2.2. ==> Codes permettant d'ordonner les fils d'un quadrangle
118 c quand il est face d'un hexaedre ou d'un pentaedre
156 c 2.3. ==> numero local de la face opposee pour un hexaedre respectant
157 c la convention d'un de : i + coen07(i) = 7
166 c 2.4. ==> correspondance entre le code d'un triangle dans un
167 c tetraedre ou un pentaedre et les numeros locaux des aretes
169 c Pour une face de code c :
170 c i1(c) : numero local de l'arete I1
171 c i2(c) : numero local de l'arete I2
172 c i3(c) : numero local de l'arete I3
195 c 2.5. ==> correspondance entre le code d'un quadrangle dans un
196 c un hexaedre ou un pentaedre et les numeros locaux des aretes
198 c Pour une face de code c :
199 c j1(c) : numero local de l'arete I1
200 c j2(c) : numero local de l'arete I2
201 c j3(c) : numero local de l'arete I3
202 c j4(c) : numero local de l'arete I4
240 c 2.6. ==> correspondance entre le code des faces dans un volume
241 c et l'orientation relative de cette face
242 c Pour la face i de code c :
243 c orcoxx(i,c) : 1, la face est sortante
244 c -1, la face est entrante
245 c 2.6.1. ==> tetraedre/triangle
275 c 2.6.3. ==> hexaedre/quadrangle
331 c 2.6.3. ==> pentaedre/triangle et pentaedre/quadrangle
374 c 2.6.4. ==> pyramide/triangle et pyramide/quadrangle
414 c 3. manipulations numeriques
416 c 3.1. ==> choix du 2nd chiffre entre 1 et 2
421 c 3.2. ==> choix du 3eme chiffre entre 1, 2 et 3
433 c 3.3. ==> choix du 4eme chiffre entre 1, 2, 3 et 4
436 do 331 , jaux = 1 , 4
437 do 3311 , kaux1 = 1 , 4
442 do 3312 , kaux1 = 1 , 4
443 if ( iaux.eq.jaux .or. jaux.eq.kaux1 .or.
444 > kaux1.eq.iaux ) then
445 fp1234(iaux,jaux,kaux1) = iindef
447 do 3313 , kaux2 = 1 , 4
448 if ( tabaux(kaux2).eq.0 .and. kaux2.ne.kaux1 ) then
449 fp1234(iaux,jaux,kaux1) = kaux2
457 c 3.4. ==> choix du 6eme chiffre entre 1, 2, 3, 4, 5 et 6
460 do 341 , jaux = 1 , 6
461 do 3411 , kaux1 = 1 , 6
462 do 3412 , kaux2 = 1 , 6
463 do 3413 , kaux3 = 1 , 6
470 do 3414 , kaux3 = 1 , 6
471 if ( iaux.eq.jaux .or. iaux.eq.kaux1 .or.
472 > iaux.eq.kaux2 .or. jaux.eq.kaux1 .or.
473 > jaux.eq.kaux2 .or. kaux1.eq.kaux2 ) then
474 fp1aa6(iaux,jaux,kaux1,kaux2,kaux3) = iindef
476 do 3415 , kaux4 = 1 , 6
477 if ( tabaux(kaux4).eq.0 .and. kaux4.ne.kaux3 ) then
478 fp1aa6(iaux,jaux,kaux1,kaux2,kaux3) = kaux4
488 c 3.5. ==> dans la permutation circulaire (1,2,3) :
489 c per1a3(-1,i) renvoie l'entier qui est avant i
490 c per1a3( 0,i) renvoie l'entier i
491 c per1a3( 1,i) renvoie l'entier qui est apres i
492 c per1a3( 2,i) renvoie l'entier qui est 2 places apres i
510 c 3.6. ==> dans la permutation circulaire (1,2,3,4) :
511 c . Pour i de 1 a 4 :
512 c per1a4(-5,i) = 1 devient 2, puis sens inverse
513 c per1a4(-4,i) = 1 devient 3, puis sens inverse
514 c per1a4(-3,i) = 1 devient 4, puis sens inverse
515 c per1a4(-2,i) = 1 idem, puis sens inverse
516 c per1a4(-1,i) renvoie l'entier qui est avant i
517 c per1a4( 0,i) renvoie l'entier i
518 c per1a4( 1,i) renvoie l'entier qui est apres i
519 c per1a4( 2,i) renvoie l'entier qui est 2 places apres i
520 c per1a4( 3,i) renvoie l'entier qui est 3 places apres i
522 c per1a4(j,5) = le reciproque de per1a4(j,*)
578 c 3.7. ==> dans la permutation circulaire (4,5,6) :
579 c per4a6(-1,i) = entier avant i
581 c per4a6( 1,i) = entier apres i
582 c per4a6( 2,i) = entier 2 places apres i = per4a6(-1,i)
600 c 3.8. ==> per001 : etablissement des codes pour les raffinements
601 c conformes des pentaedres
602 c remarque : per001(i,1) = i
646 c 3.9. ==> per002 : permutation circulaire des 8 permiers entiers,
647 c traites par paquet de 4
648 c remarque : per002(i,1) = i
687 c 4. description pour une connectivite a la med
693 do 411 , jaux = 1 , 6
694 nofmed(iaux,jaux,1) = iindef
695 nofmed(iaux,jaux,2) = iindef
696 nofmed(iaux,jaux,3) = iindef
703 nofmed(typenh,1,1) = 1
704 nofmed(typenh,2,1) = 2
705 nofmed(typenh,3,1) = 3
706 nofmed(typenh,4,1) = 4
709 iaux = nofmed(typenh,jaux,1)
710 nofmed(typenh,iaux,2) = jaux
712 cgn print *,(nofmed(typenh,jaux,2),jaux = 1 , 4)
717 nofmed(typenh,1,1) = 1
718 nofmed(typenh,2,1) = 6
719 nofmed(typenh,3,1) = 2
720 nofmed(typenh,4,1) = 4
721 nofmed(typenh,5,1) = 5
722 nofmed(typenh,6,1) = 3
725 iaux = nofmed(typenh,jaux,1)
726 nofmed(typenh,iaux,2) = jaux
728 cgn print *,(nofmed(typenh,jaux,2),jaux = 1 , 6)
733 nofmed(typenh,1,1) = 1
734 nofmed(typenh,2,1) = 2
735 nofmed(typenh,3,1) = 3
736 nofmed(typenh,4,1) = 4
737 nofmed(typenh,5,1) = 5
740 iaux = nofmed(typenh,jaux,1)
741 nofmed(typenh,iaux,2) = jaux
743 cgn print *,(nofmed(typenh,jaux,2),jaux = 1 , 5)
748 nofmed(typenh,1,1) = 5
749 nofmed(typenh,2,1) = 1
750 nofmed(typenh,3,1) = 2
751 nofmed(typenh,4,1) = 3
752 nofmed(typenh,5,1) = 4
755 iaux = nofmed(typenh,jaux,1)
756 nofmed(typenh,iaux,2) = jaux
758 cgn print *,(nofmed(typenh,jaux,2),jaux = 1 , 5)
762 c remarque : le code doit etre le meme que pour suffix
766 mess14(1,1,-1) = 'noeud '
767 mess14(1,1,0) = 'maille-point '
768 mess14(1,1,1) = 'segment '
769 mess14(1,1,2) = 'triangle '
770 mess14(1,1,3) = 'tetraedre '
771 mess14(1,1,4) = 'quadrangle '
772 mess14(1,1,5) = 'pyramide '
773 mess14(1,1,6) = 'hexaedre '
774 mess14(1,1,7) = 'pentaedre '
775 mess14(1,1,8) = 'face '
776 mess14(1,1,9) = 'volume '
777 mess14(1,1,10) = ' entite '
778 mess14(1,1,11) = 'provisoire '
779 mess14(1,1,12) = 'sans objet '
780 mess14(1,1,13) = 'maille '
782 mess14(1,2,-1) = 'Noeud '
783 mess14(1,2,0) = 'Maille-Point '
784 mess14(1,2,1) = 'Segment '
785 mess14(1,2,2) = 'Triangle '
786 mess14(1,2,3) = 'Tetraedre '
787 mess14(1,2,4) = 'Quadrangle '
788 mess14(1,2,5) = 'Pyramide '
789 mess14(1,2,6) = 'Hexaedre '
790 mess14(1,2,7) = 'Pentaedre '
791 mess14(1,2,8) = 'Face '
792 mess14(1,2,9) = 'Volume '
793 mess14(1,2,10) = ' Entite '
794 mess14(1,2,11) = 'Provisoire '
795 mess14(1,2,12) = 'Sans objet '
796 mess14(1,2,13) = 'Maille '
798 mess14(1,3,-1) = 'noeuds '
799 mess14(1,3,0) = 'mailles-points'
800 mess14(1,3,1) = 'segments '
801 mess14(1,3,2) = 'triangles '
802 mess14(1,3,3) = 'tetraedres '
803 mess14(1,3,4) = 'quadrangles '
804 mess14(1,3,5) = 'pyramides '
805 mess14(1,3,6) = 'hexaedres '
806 mess14(1,3,7) = 'pentaedres '
807 mess14(1,3,8) = 'faces '
808 mess14(1,3,9) = 'volumes '
809 mess14(1,3,10) = 'entites '
810 mess14(1,3,11) = 'Provisoire '
811 mess14(1,3,12) = 'Sans objet '
812 mess14(1,3,13) = 'mailles '
814 mess14(1,4,-1) = 'Noeuds '
815 mess14(1,4,0) = 'Mailles-Points'
816 mess14(1,4,1) = 'Segments '
817 mess14(1,4,2) = 'Triangles '
818 mess14(1,4,3) = 'Tetraedres '
819 mess14(1,4,4) = 'Quadrangles '
820 mess14(1,4,5) = 'Pyramides '
821 mess14(1,4,6) = 'Hexaedres '
822 mess14(1,4,7) = 'Pentaedres '
823 mess14(1,4,8) = 'Faces '
824 mess14(1,4,9) = 'Volumes '
825 mess14(1,4,10) = ' Entites '
826 mess14(1,4,11) = 'Provisoires '
827 mess14(1,4,12) = 'Sans objet '
828 mess14(1,4,13) = 'Mailles '
830 mess14(1,5,-1) = 'NOEUDS '
831 mess14(1,5,0) = 'MAILLES-POINTS'
832 mess14(1,5,1) = 'SEGMENTS '
833 mess14(1,5,2) = 'TRIANGLES '
834 mess14(1,5,3) = 'TETRAEDRES '
835 mess14(1,5,4) = 'QUADRANGLES '
836 mess14(1,5,5) = 'PYRAMIDES '
837 mess14(1,5,6) = 'HEXAEDRES '
838 mess14(1,5,7) = 'PENTAEDRES '
839 mess14(1,5,8) = 'FACES '
840 mess14(1,5,9) = 'VOLUMES '
841 mess14(1,5,10) = ' ENTITES '
842 mess14(1,5,11) = 'PROVISOIRES '
843 mess14(1,5,12) = 'SANS OBJET '
844 mess14(1,5,13) = 'MAILLES '
846 mess14(2,1,-1) = 'node '
847 mess14(2,1,0) = 'point-mesh '
848 mess14(2,1,1) = 'edge '
849 mess14(2,1,2) = 'triangle '
850 mess14(2,1,3) = 'tetrahedron '
851 mess14(2,1,4) = 'quadrangle '
852 mess14(2,1,5) = 'pyramid '
853 mess14(2,1,6) = 'hexahedron '
854 mess14(2,1,7) = 'prism '
855 mess14(2,1,8) = 'face '
856 mess14(2,1,9) = 'volume '
857 mess14(2,1,10) = ' entity '
858 mess14(2,1,11) = 'temporary '
859 mess14(2,1,12) = 'useless '
860 mess14(2,1,13) = 'mesh '
862 mess14(2,2,-1) = 'Node '
863 mess14(2,2,0) = 'Point-Mesh '
864 mess14(2,2,1) = 'Edge '
865 mess14(2,2,2) = 'Triangle '
866 mess14(2,2,3) = 'Tetrahedron '
867 mess14(2,2,4) = 'Quadrangle '
868 mess14(2,2,5) = 'Pyramid '
869 mess14(2,2,6) = 'Hexahedron '
870 mess14(2,2,7) = 'Prism '
871 mess14(2,2,8) = 'Face '
872 mess14(2,2,9) = 'Volume '
873 mess14(2,2,10) = ' Entity '
874 mess14(2,2,11) = 'Temporary '
875 mess14(2,2,12) = 'Useless '
876 mess14(2,2,13) = 'Mesh '
878 mess14(2,3,-1) = 'nodes '
879 mess14(2,3,0) = 'point-meshes '
880 mess14(2,3,1) = 'edges '
881 mess14(2,3,2) = 'triangles '
882 mess14(2,3,3) = 'tetraedra '
883 mess14(2,3,4) = 'quadrangles '
884 mess14(2,3,5) = 'pyramids '
885 mess14(2,3,6) = 'hexahedrons '
886 mess14(2,3,7) = 'prisms '
887 mess14(2,3,8) = 'faces '
888 mess14(2,3,9) = 'volumes '
889 mess14(2,3,10) = 'entities '
890 mess14(2,3,11) = 'Temporary '
891 mess14(2,3,12) = 'Useless '
892 mess14(2,3,13) = 'meshes '
894 mess14(2,4,-1) = 'Nodes '
895 mess14(2,4,0) = 'Point-Meshes '
896 mess14(2,4,1) = 'Edges '
897 mess14(2,4,2) = 'Triangles '
898 mess14(2,4,3) = 'Tetraedra '
899 mess14(2,4,4) = 'Quadrangles '
900 mess14(2,4,5) = 'Pyramids '
901 mess14(2,4,6) = 'Hexahedrons '
902 mess14(2,4,7) = 'Prisms '
903 mess14(2,4,8) = 'Faces '
904 mess14(2,4,9) = 'Volumes '
905 mess14(2,4,10) = ' Entities '
906 mess14(2,4,11) = 'Temporary '
907 mess14(2,4,12) = 'Useless '
908 mess14(2,4,13) = 'Meshes '
910 mess14(2,5,-1) = 'NODES '
911 mess14(2,5,0) = 'POINT-MESHES '
912 mess14(2,5,1) = 'EDGES '
913 mess14(2,5,2) = 'TRIANGLES '
914 mess14(2,5,3) = 'TETRAEDRA '
915 mess14(2,5,4) = 'QUADRANGLES '
916 mess14(2,5,5) = 'PYRAMIDS '
917 mess14(2,5,6) = 'HEXAHEDRONS '
918 mess14(2,5,7) = 'PRISMS '
919 mess14(2,5,8) = 'FACES '
920 mess14(2,5,9) = 'VOLUMES '
921 mess14(2,5,10) = ' ENTITIES '
922 mess14(2,5,11) = 'TEMPORARY '
923 mess14(2,5,12) = 'USELESS '
924 mess14(2,5,13) = 'MESHES '
929 c remarque : le code doit etre le meme que pour mess14
933 suffix(1,-1) = 'Noeud '
934 suffix(1,0) = 'Point '
935 suffix(1,1) = 'Arete '
936 suffix(1,2) = 'Trian '
937 suffix(1,3) = 'Tetra '
938 suffix(1,4) = 'Quadr '
939 suffix(1,5) = 'Pyram '
940 suffix(1,6) = 'Hexae '
941 suffix(1,7) = 'Penta '
946 suffix(2,-1) = 'noeu '
947 suffix(2,0) = 'poin '
948 suffix(2,1) = 'aret '
949 suffix(2,2) = 'tria '
950 suffix(2,3) = 'tetr '
951 suffix(2,4) = 'quad '
952 suffix(2,5) = 'pyra '
953 suffix(2,6) = 'hexa '
954 suffix(2,7) = 'pent '
986 c 7. fonctions pour la conformite des hexaedres
992 c 8. Caracteristiques des familles :
994 c 8.1. ==> initialisation des nombres maximaux de familles
1000 #ifdef _DEBUG_HOMARD_
1001 write (*,90002) 'nbfarm', nbfarm
1002 write (*,90002) 'nbftrm', nbftrm
1003 write (*,90002) 'nbfqum', nbfqum
1006 c 8.2. ==> Caracteristiques par type de mailless
1008 c noeuds 1 : famille MED
1010 c 2 : famille du noeud translate dans l'extrusion
1011 c 3 : famille de l'arete creee dans l'extrusion
1012 c 4 : position du noeud
1014 c + l : appartenance a l'equivalence l
1016 c mailles-points 1 : famille MED
1017 c 2 : type de maille-point
1018 c 3 : famille du sommet support
1019 c + l : appartenance a l'equivalence l
1021 c aretes 1 : famille MED
1022 c 2 : type de segment
1024 c 4 : famille d'orientation inverse
1025 c 5 : numero de ligne de frontiere
1026 c > 0 si arete concernee par le suivi de frontiere
1027 c <= 0 si non concernee
1028 c 6 : famille de suivi de frontiere active/inactive
1029 c 7 : numero de surface de frontiere
1031 c 8 : famille de l'arete translatee dans l'extrusion
1032 c 9 : famille du quadrangle cree dans l'extrusion
1033 c 10 : position de l'arete
1035 c + l : appartenance a l'equivalence l
1037 c triangles 1 : famille MED
1038 c 2 : type de triangle
1039 c 3 : numero de surface de frontiere
1040 c 4 : famille des aretes internes apres raf
1042 c 5 : famille du triangle translate dans l'extrusion
1043 c 6 : famille du pentaedre cree dans l'extrusion
1044 c 7 : orientation du triangle face du pentaedre
1045 c 8 : position du triangle
1047 c + l : appartenance a l'equivalence l
1049 c quadrangles 1 : famille MED
1050 c 2 : type de quadrangle
1051 c 3 : numero de surface de frontiere
1052 c 4 : famille des aretes internes apres raf
1053 c 5 : famille des triangles de conformite
1054 c 6 : famille de suivi de frontiere active/inactive
1056 c 7 : famille du quadrangle translate dans l'extrusion
1057 c 8 : famille de l'hexaedre cree dans l'extrusion
1058 c 9 : orientation du quadrangle face de l'hexaedre
1059 c 10 : position du quadrangle
1061 c + l : appartenance a l'equivalence l
1063 c tetraedres 1 : famille MED
1064 c 2 : type de tetraedres
1066 c hexaedres 1 : famille MED
1067 c 2 : type de hexaedres
1068 c 3 : famille des tetraedres de conformite
1069 c 4 : famille des pyramides de conformite
1071 c pyramides 1 : famille MED
1072 c 2 : type de pyramides
1074 c pentaedres 1 : famille MED
1075 c 2 : type de pentaedres
1076 c 3 : famille des tetraedres de conformite
1077 c 4 : famille des pyramides de conformite
1090 #ifdef _DEBUG_HOMARD_
1091 write (*,90002) 'ncffno', ncffno
1092 write (*,90002) 'ncffmp', ncffmp
1093 write (*,90002) 'ncffar', ncffar
1094 write (*,90002) 'ncfftr', ncfftr
1095 write (*,90002) 'ncffqu', ncffqu
1096 write (*,90002) 'ncffte', ncffte
1097 write (*,90002) 'ncffhe', ncffhe
1098 write (*,90002) 'ncffpy', ncffpy
1099 write (*,90002) 'ncffpe', ncffpe
1107 #ifdef _DEBUG_HOMARD_
1108 write (*,90002) 'ncxfno', ncxfno
1109 write (*,90002) 'ncxfar', ncxfar
1110 write (*,90002) 'ncxftr', ncxftr
1111 write (*,90002) 'ncxfqu', ncxfqu