📄 connectivity.f90
字号:
!------------------------------------------------------------------------------!! MODULE : CONNECTIVITY Auteur : J. Gressier! Date : Juillet 2003! Fonction Modif : (cf historique)! Bibliotheque de procedures et fonctions pour la gestion de connectivites!! Defauts/Limitations/Divers :!!------------------------------------------------------------------------------!module CONNECTIVITYuse TYPHMAKE ! Definition de la precisionimplicit none! -- Variables globales du module -------------------------------------------! -- DECLARATIONS -----------------------------------------------------------!------------------------------------------------------------------------------!! structure ST_ELEMC : Definition d'un element de connectivite !------------------------------------------------------------------------------!type st_elemc integer :: nbfils ! nombre de connectivites integer, dimension(:), pointer & :: fils ! definition de la connectiviteendtype st_elemc!------------------------------------------------------------------------------!! structure ST_CONNECT : Definition de connectivite a nombre de fils constants!------------------------------------------------------------------------------!type st_connect integer :: nbnodes ! nombre de d'ensemble connectivites integer :: nbfils ! nombre de connectivites par ensemble integer, dimension(:,:), pointer & :: fils ! definition de la connectiviteendtype st_connect!------------------------------------------------------------------------------!! structure ST_GENCONNECT : Definition de connectivite a nombre de fils variables!------------------------------------------------------------------------------!type st_genconnect integer :: nbnodes ! nombre de d'ensemble connectivites type(st_elemc), dimension(:), pointer & :: noeud ! nombre de fils pour chaque noeudendtype st_genconnect! -- INTERFACES -------------------------------------------------------------interface new module procedure new_elemc, new_connect, new_genconnect, new_genconnect2endinterfaceinterface delete module procedure delete_elemc, delete_connect, delete_genconnectendinterfaceinterface copy module procedure copy_connectendinterfaceinterface realloc module procedure realloc_connectendinterfaceinterface index module procedure index_intendinterface! -- Fonctions et Operateurs ------------------------------------------------! -- IMPLEMENTATION ---------------------------------------------------------contains!------------------------------------------------------------------------------!! Procedure : allocation d'une structure ELEMC!------------------------------------------------------------------------------!subroutine new_elemc(conn, dim)implicit nonetype(st_elemc) :: conninteger :: dim conn%nbfils = dim allocate(conn%fils(dim))endsubroutine new_elemc!------------------------------------------------------------------------------!! Procedure : allocation d'une structure CONNECT!------------------------------------------------------------------------------!subroutine new_connect(conn, nbnodes, nbfils)implicit nonetype(st_connect) :: conninteger :: nbnodes, nbfils conn%nbnodes = nbnodes conn%nbfils = nbfils allocate(conn%fils(nbnodes, nbfils))endsubroutine new_connect!------------------------------------------------------------------------------!! Procedure : reallocation d'une structure CONNECT!------------------------------------------------------------------------------!subroutine realloc_connect(conn, nbnodes, nbfils)implicit nonetype(st_connect) :: conn, provinteger :: nbnodes, nbfils ! nouvelle tailleinteger :: old_nbnodes, old_nbfils ! ancienne tailleinteger :: min_nbnodes, min_nbfils ! ancienne taille prov = copy(conn) conn%nbnodes = nbnodes ! affectation des nouvelles tailles conn%nbfils = nbfils deallocate(conn%fils) ! desallocation de l'ancien tableau allocate(conn%fils(nbnodes, nbfils)) ! allocation du nouveau tableau conn%fils(1:nbnodes, 1:nbfils) = 0 ! initialisation min_nbnodes = min(nbnodes, prov%nbnodes) min_nbfils = min(nbfils, prov%nbfils) ! copie des connectivites conn%fils(1:min_nbnodes, 1:min_nbfils) = prov%fils(1:min_nbnodes, 1:min_nbfils) endsubroutine realloc_connect!------------------------------------------------------------------------------!! Procedure : allocation d'une structure CONNECT par copie!------------------------------------------------------------------------------!function copy_connect(source)implicit nonetype(st_connect) :: copy_connect, source copy_connect%nbnodes = source%nbnodes copy_connect%nbfils = source%nbfils allocate(copy_connect%fils(copy_connect%nbnodes, copy_connect%nbfils)) copy_connect%fils = source%filsendfunction copy_connect!------------------------------------------------------------------------------!! Procedure : desallocation d'une structure ELEMC!------------------------------------------------------------------------------!subroutine delete_elemc(conn)implicit nonetype(st_elemc) :: conn conn%nbfils = 0 if (associated(conn%fils)) deallocate(conn%fils)endsubroutine delete_elemc!------------------------------------------------------------------------------!! Procedure : desallocation d'une structure CONNECT!------------------------------------------------------------------------------!subroutine delete_connect(conn)implicit nonetype(st_connect) :: conn conn%nbnodes = 0 if (associated(conn%fils)) deallocate(conn%fils)endsubroutine delete_connect!------------------------------------------------------------------------------!! Procedure : allocation d'une structure GENCONNECT sans nombre de fils!------------------------------------------------------------------------------!subroutine new_genconnect(conn, nbnodes) implicit none type(st_genconnect) :: conn integer :: nbnodes integer :: i conn%nbnodes = nbnodes allocate(conn%noeud(nbnodes)) do i = 1, nbnodes conn%noeud(i)%nbfils = 0 enddoendsubroutine new_genconnect!------------------------------------------------------------------------------!! Procedure : allocation d'une structure GENCONNECT avec nombre de fils!------------------------------------------------------------------------------!subroutine new_genconnect2(conn, nbnodes, nbfils) implicit none type(st_genconnect) :: conn integer :: nbnodes, nbfils(nbnodes) integer :: i conn%nbnodes = nbnodes allocate(conn%noeud(nbnodes)) do i = 1, nbnodes conn%noeud(i)%nbfils = nbfils(i) allocate(conn%noeud(i)%fils(nbfils(i))) enddoendsubroutine new_genconnect2!------------------------------------------------------------------------------!! Procedure : desallocation d'une structure GENCONNECT!------------------------------------------------------------------------------!subroutine delete_genconnect(conn) implicit none type(st_genconnect) :: conn integer :: nbnodes integer :: i do i = 1, nbnodes if (conn%noeud(i)%nbfils /= 0) deallocate(conn%noeud(i)%fils) enddo deallocate(conn%noeud) conn%nbnodes = 0endsubroutine delete_genconnect!------------------------------------------------------------------------------!! Fonction : index d'un entier dans une liste d'entiers!------------------------------------------------------------------------------!integer function index_int(int, tab) implicit none integer :: int ! entier a rechercher integer :: tab(:) ! liste d'entier pour la recherche integer :: i, dim dim = size(tab) index_int = 0 ! valeur par defaut si index introuvable do i = 1, dim if (tab(i)==int) then index_int = i exit endif enddo endfunction index_intendmodule CONNECTIVITY!------------------------------------------------------------------------------!! Historique des modifications!! juil 2003 : creation du module, connectivite simple et generalisee! juin 2004 : new et delete pour st_elemc!------------------------------------------------------------------------------!
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -