⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mgrid.f90

📁 国外大名顶顶的“台风”并行计算流体力学CFD软件的早期版本的源代码
💻 F90
字号:
!------------------------------------------------------------------------------!! MODULE : MGRID                          Auteur : J. Gressier!                                         Date   : Mars 2004! Fonction                                Modif  : (cf historique)!   Definition des structures de donnees des grilles!   maillage et champ!! Defauts/Limitations/Divers :!!------------------------------------------------------------------------------!module MGRIDuse TYPHMAKE      ! Definition de la precision/donnees informatiquesuse USTMESH       ! Definition des maillages non structuresuse DEFFIELD      ! Definition des champs physiquesuse GEO3D        ! module de definition des vecteurs et operateurs associesimplicit none! -- Variables globales du module -------------------------------------------! -- DECLARATIONS -----------------------------------------------------------!------------------------------------------------------------------------------!! Definition de la structure ST_GRID : grid maillage general et champ!------------------------------------------------------------------------------!type st_grid  integer                :: id         ! numero de grid  integer                :: mpi_cpu    ! numero de CPU charge du calcul  type(st_grid), pointer :: next       ! pointeur de liste chainee  type(st_grid), pointer :: subgrid    ! pointeur de liste chainee  type(st_ustmesh)       :: umesh      ! maillage non structure  integer                :: nfield     ! nombre de champs  type(st_field), pointer:: field      ! tableau des champs  integer                :: nbocofield ! nombre de champs generiques  type(st_genericfield), pointer &                         :: bocofield  ! liste chainee de champs generiques  type(st_field), pointer:: field_loc  ! champ local pour l'integration  type(st_field), pointer:: field_cyclestart  ! champ de debut de cycleendtype st_grid! -- INTERFACES -------------------------------------------------------------interface new  module procedure new_gridendinterfaceinterface delete  module procedure delete_gridendinterfaceinterface name  module procedure name_gridendinterface! -- Fonctions et Operateurs ------------------------------------------------! -- IMPLEMENTATION ---------------------------------------------------------contains!------------------------------------------------------------------------------!! Procedure : initialisation d'une structure GRID!------------------------------------------------------------------------------!subroutine new_grid(grid, id)implicit nonetype(st_grid)  :: gridinteger        :: id  grid%id = id  nullify(grid%next)  nullify(grid%subgrid)endsubroutine new_grid!------------------------------------------------------------------------------!! Procedure : creation et lien chaine d'une structure GRID!------------------------------------------------------------------------------!function insert_newgrid(grid, id) result(pgrid)implicit nonetype(st_grid), pointer :: pgridtype(st_grid), target  :: gridinteger                :: id  allocate(pgrid)  call new(pgrid, id)  pgrid%next => grid  endfunction insert_newgrid!------------------------------------------------------------------------------!! Procedure : desallocation d'une structure GRID!------------------------------------------------------------------------------!subroutine delete_grid(grid)implicit nonetype(st_grid)  :: grid  ! destruction des champs et maillage de la grille  call delete(grid%umesh)  call delete_chainedfield(grid%field)  deallocate(grid%field_loc)  ! destruction des sous-grilles  call delete_chainedgrid(grid%subgrid)  ! ATTENTION : pas de destruction de la grilles suivanteendsubroutine delete_grid!------------------------------------------------------------------------------!! Procedure : desallocation d'une liste chainee de structure GRID!------------------------------------------------------------------------------!subroutine delete_chainedgrid(grid)implicit nonetype(st_grid), target  :: gridtype(st_grid), pointer :: pgrid, dgrid  pgrid => grid  do while(associated(pgrid))    dgrid => pgrid    pgrid => pgrid%next    call delete(dgrid)  enddoendsubroutine delete_chainedgrid!------------------------------------------------------------------------------!! Fonction : nom de grille!------------------------------------------------------------------------------!function name_grid(grid) result(str)implicit nonetype(st_grid)         :: gridcharacter(len=strlen) :: str  str = "" ! grid%umesh%nameendfunction name_grid!------------------------------------------------------------------------------!! Procedure : ajout avec allocation d'une structure champ generique! (par insertion)!------------------------------------------------------------------------------!function newbocofield(grid,dim,nscal,nvect,ntens) result(pbocofield)implicit nonetype(st_genericfield), pointer :: pbocofieldtype(st_grid)                  :: gridinteger                        :: dim, nscal, nvect, ntens  grid%nbocofield = grid%nbocofield + 1  if (grid%nbocofield == 1) then   allocate(pbocofield)   call new(pbocofield,dim,nscal,nvect,ntens)   nullify(pbocofield%next)   call init_genericfield(pbocofield,0._krp,v3d(0._krp,0._krp,0._krp))  else    pbocofield => insert_newgfield(grid%bocofield,dim,nscal,nvect,ntens)    call init_genericfield(pbocofield,0._krp,v3d(0._krp,0._krp,0._krp))  endif  grid%bocofield => pbocofieldendfunction newbocofield!------------------------------------------------------------------------------!! Procedure : ajout avec allocation d'une structure champ (par insertion)!------------------------------------------------------------------------------!function newfield(grid,nscal,nvect,ncell,nface) result(pfield)implicit nonetype(st_field), pointer :: pfieldtype(st_grid)           :: gridinteger                 :: dim, nscal, nvect, ncell, nface  grid%nfield = grid%nfield + 1  if (grid%nfield == 1) then   allocate(pfield)   call new(pfield,nscal,nvect,ncell,nface)   nullify(pfield%next)  else    pfield => insert_newfield(grid%field,nscal,nvect,ncell,nface)  endif  grid%field => pfieldendfunction newfieldendmodule MGRID!------------------------------------------------------------------------------!! Historique des modifications!! mars 2004 : creation du module! juin 2004 : procedure newbocofield! oct  2004 : field chained list!------------------------------------------------------------------------------!

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -