1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
| subroutine lecture_maillage(nbre_noeuds, nbre_elements, num_glob_noeuds)
implicit none
character(50), dimension(:), allocatable :: maillage_brut
character(20) :: filename
integer :: i, j, nbre_lignes, fileid, temp
integer :: indice_noeud, indice_element, indice_materiau, indice_section, indice_epaisseur, indice_cld, indice_clf, indice_fin
integer :: nbre_elements, nbre_materiaux, nbre_sections, nbre_epaisseurs, nbre_clds, nbre_clfs
integer, intent(in) :: nbre_noeuds
integer, dimension(:), allocatable, intent(out) :: num_glob_noeuds
integer, dimension(:,:), allocatable :: coord_glob_elements
real, dimension(:,:), allocatable :: coord_glob_noeuds
real, dimension(:,:), allocatable :: noeuds, elements, sections, materiaux, epaisseurs, clds, clfs
fileid=10
filename='maillage.txt'
! calcul nbre de lignes
call calcul_nbre_lignes(fileid,filename,nbre_lignes)
! lecture fichier maillage
! ------------------------
open(10,file='maillage.txt')
rewind(10)
allocate(maillage_brut(nbre_lignes))
do i=1,nbre_lignes
read(10,'(a50)')maillage_brut(i)
if (maillage_brut(i) == '.NODE') then
indice_noeud=i
elseif (maillage_brut(i) == '.ELEM') then
indice_element=i
elseif (maillage_brut(i) == '.MAT') then
indice_materiau=i
elseif (maillage_brut(i) == '.SEC') then
indice_section=i
elseif (maillage_brut(i) == '.EP') then
indice_epaisseur=i
elseif (maillage_brut(i) == '.CLD') then
indice_cld=i
elseif (maillage_brut(i) == '.CLF') then
indice_clf=i
elseif (maillage_brut(i) == '.FIN') then
indice_fin=i
endif
enddo
!nbre_noeuds = indice_element - indice_noeud - 1
nbre_elements = indice_materiau - indice_element - 1
nbre_materiaux = indice_section - indice_materiau - 1
nbre_sections = indice_epaisseur - indice_section - 1
nbre_epaisseurs = indice_cld - indice_epaisseur - 1
nbre_clds = indice_clf - indice_cld - 1
nbre_clfs = indice_fin - indice_clf - 1
allocate(noeuds(nbre_noeuds,4), elements(nbre_elements,9), materiaux(nbre_materiaux,3), sections(nbre_sections,5))
allocate(epaisseurs(nbre_epaisseurs,2), clds(nbre_clds,7), clfs(nbre_clfs,7))
!lecture et formatage des noeuds
j=1
do i=indice_noeud+1,indice_element-1
read(maillage_brut(i),*)noeuds(j,:)
j=j+1
enddo
!lecture et formatage des elements
j=1
do i=indice_element+1,indice_materiau-1
read(maillage_brut(i),*)elements(j,:)
j=j+1
enddo
!lecture et formatage des materiaux
j=1
do i=indice_materiau+1,indice_section-1
read(maillage_brut(i),*)materiaux(j,:)
j=j+1
enddo
!lecture et formatage des sections
j=1
do i=indice_section+1,indice_epaisseur-1
read(maillage_brut(i),*)sections(j,:)
j=j+1
enddo
!lecture et formatage des epaisseurs
j=1
do i=indice_epaisseur+1,indice_cld-1
read(maillage_brut(i),*)epaisseurs(j,:)
j=j+1
enddo
!lecture et formatage des cld
j=1
do i=indice_cld+1,indice_clf-1
read(maillage_brut(i),*)clds(j,:)
j=j+1
enddo
!lecture et formatage des clf
j=1
do i=indice_clf+1,indice_fin-1
read(maillage_brut(i),*)clfs(j,:)
j=j+1
enddo
!organisation des noeuds
allocate(num_glob_noeuds(nbre_noeuds))
do i=1,nbre_noeuds
num_glob_noeuds(i) = noeuds(i,1)
!coord_glob_noeuds(i,:) = noeuds(i,2:4)
enddo
!organisation des elements
!allocate(num_glob_elements(nbre_elements), coord_glob_elements(nbre_elements,4))
!do i=1,nbre_elements
! num_glob_elements(i) = elements(i,1)
! coord_glob_elements(i,:) = elements(i,6:9)
! print*,num_glob_elements(i),coord_glob_elements(i,:)
!enddo
close(10)
end subroutine lecture_maillage |
Partager