📄 defzone.f90
字号:
!------------------------------------------------------------------------------!! MODULE : DEFZONE Auteur : J. Gressier! Date : Juillet 2002! Fonction Modif : (cf historique)! Definition des structures de donnees des zones (contient! maillage, type de solveur et info)!! Defauts/Limitations/Divers :!!------------------------------------------------------------------------------!module DEFZONEuse TYPHMAKE ! Definition de la precision/donnees informatiquesuse MODINFO ! Information pour la gestion de l'integrationuse MENU_SOLVER ! Definition des solveursuse MENU_NUM ! Definition des parametres numeriques d'integrationuse MENU_MESH ! Definition du maillageuse MGRID ! Definition des grillesuse STRMESH ! Definition des maillages structuresuse USTMESH ! Definition des maillages non structures!use BOUND ! Librairie de definition des conditions aux limitesuse MENU_ZONECOUPLING ! Definition des structures d'echange entre zonesuse DEFFIELD ! Donnees des champs physiquesuse DEFCAPTEURS ! Donnees des capteurs implicit none! -- Variables globales du module -------------------------------------------! -- DECLARATIONS -----------------------------------------------------------!------------------------------------------------------------------------------!! Definition de la structure ST_ZONE : zone maillage general et champ!------------------------------------------------------------------------------!type st_zone integer :: id ! numero de zone character(len=strlen) :: nom ! nom de la zone !integer :: ndom ! nombre de domaine total (cas hybride) !integer :: nmesh_str ! nombre de domaines structures !integer :: nmesh_ust ! nombre de domaines non structures integer :: nprobe ! nombre de capteurs integer :: ncoupling ! nombre d'echanges avec d'autres zones type(st_infozone) :: info ! information sur l'integration type(mnu_solver) :: defsolver ! type de solveur a utiliser type(mnu_time) :: deftime ! parametres d'integration temporelle type(mnu_spat) :: defspat ! parametres d'integration spatiale ! cf definitions variables globales type(mnu_mesh) :: defmesh ! type de maillage character :: typ_mesh ! type de maillage (cf VARCOM) ! S : multibloc structure ! U : non structure ! H : hybride integer :: mpi_cpu ! numero de CPU charge du calcul !type(st_strmesh), dimension(:), pointer & ! :: str_mesh ! maillage multibloc structure integer :: ngrid ! nombre de grilles (mesh + field) type(st_grid), pointer :: grid ! liste chainee de grilles !integer :: nmesh ! nombre champs (liste chainee) !integer :: nfield ! nombre champs (liste chainee) !type(st_ustmesh), pointer & !type(st_ustmesh) & !, dimension(:), pointer & ! :: ust_mesh ! liste chainee de maillage non structure !type(st_field), pointer & !type(st_field), dimension(:), pointer & ! :: field ! tableau des champs type(st_capteur), dimension(:), pointer & :: probe ! tableau des capteurs type(mnu_zonecoupling), dimension(:), pointer & :: coupling !definition des raccords avec d'autres zonesendtype st_zone! -- INTERFACES -------------------------------------------------------------interface new module procedure new_zoneendinterfaceinterface delete module procedure delete_zoneendinterface! -- Fonctions et Operateurs ------------------------------------------------! -- IMPLEMENTATION ---------------------------------------------------------contains!------------------------------------------------------------------------------!! Procedure : initialisation d'une structure ZONE!------------------------------------------------------------------------------!subroutine new_zone(zone, id)implicit nonetype(st_zone) :: zoneinteger :: id zone%id = id !zone%ndom = 0 ! DEV: a supprimer apres homogeneisation dans MGRID zone%ngrid = 0 nullify(zone%grid)endsubroutine new_zone!------------------------------------------------------------------------------!! Procedure : desallocation d'une structure ZONE!------------------------------------------------------------------------------!subroutine delete_zone(zone)implicit nonetype(st_zone) :: zoneinteger :: i !print*,'DEBUG: destruction de zone ' !if (zone%nmesh_str >= 1) then ! do i = 1, zone%nmesh_str ! call delete(zone%str_mesh(i)) ! enddo ! deallocate(zone%str_mesh) !endif call delete(zone%defsolver) ! Destruction des structures USTMESH (DEV: dans MGRID) !if (zone%nmesh_ust >= 1) then ! print*,"desallocation ust_mesh" !! DEBUG ! call delete(zone%ust_mesh) !endif ! if (zone%ncoupling >= 1) then print*,"desallocation tableau coupling" !! DEBUG do i = 1, zone%ncoupling print*,"desallocation coupling ",i !! DEBUG call delete(zone%coupling(i)) enddo deallocate(zone%coupling)! endif ! Destruction des champs (structures FIELD) (DEV: dans MGRID) !print*,'debug delete_zone : ',zone%ndom,' ndom' !do i = 1, zone%ndom ! print*,"desallocation champ ",i !! DEBUG ! call delete(zone%field(i)) !enddo !if (zone%ndom >= 1) deallocate(zone%field) ! Destruction des structures MGRID print*,'DEV!!! destruction des MGRID a effectuer' !print*,'fin de destruction de zone interne' !! DEBUGendsubroutine delete_zone!------------------------------------------------------------------------------!! Procedure : ajout avec allocation d'une structure grille (par insertion)!------------------------------------------------------------------------------!function newgrid(zone) result(pgrid)implicit nonetype(st_grid), pointer :: pgridtype(st_zone) :: zoneinteger :: id zone%ngrid = zone%ngrid + 1 if (zone%ngrid == 1) then allocate(pgrid) call new(pgrid, zone%ngrid) else pgrid => insert_newgrid(zone%grid, zone%ngrid) endif pgrid%nbocofield = 0 pgrid%nfield = 0 zone%grid => pgridendfunction newgridendmodule DEFZONE!------------------------------------------------------------------------------!! Historique des modifications!! juil 2002 : creation du module! juin 2003 : structuration des champs par type (scalaire, vecteur...)! juil 2003 : delete zone%defsolver! mars 2003 : structure "grid" (mesh + field) en liste chainee!------------------------------------------------------------------------------!
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -