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

📄 menu_solver.f90

📁 国外大名顶顶的“台风”并行计算流体力学CFD软件的早期版本的源代码
💻 F90
字号:
!------------------------------------------------------------------------------!! MODULE : MENU_SOLVER                    Auteur : J. Gressier!                                         Date   : Aout 2002! Fonction                                Modif  : (cf Historique)!   Definition des structures pour les entrees du programme TYPHON!   Structures pour les options des solveurs !   - Definition du probleme (solveur, conditions limites, initiales)!   - Parametres de calcul   (integration temporelle, spatiale, AMR...)!! Defauts/Limitations/Divers :!!------------------------------------------------------------------------------!module MENU_SOLVERuse TYPHMAKE      ! Definition de la precisionuse MENU_NS       ! Definition des solveurs type NSuse MENU_KDIF     ! Definition des solveurs type Equation de diffusionuse MENU_VORTEX   ! Definition des solveurs type VORTEX (lagrangien)use MENU_BOCO     ! Definition des conditions limitesuse MENU_INIT     ! Definition de l'initialisationuse MENU_CAPTEURS ! Definition des capteursuse MENU_AMR      ! Definition des parametres de raffinementimplicit none! -- Variables globales du module -------------------------------------------! -- Definition des entiers caracteristiques pour le type de solveur -- CF VARCOM!integer, parameter :: solNS   = 10    ! Equations de Navier-Stokes (EQNS)!integer, parameter :: solKDIF = 20    ! Equation  de la chaleur    (EQKDIF)!integer, parameter :: solVORTEX = 30   ! Methode integrale et lagrangienne VORTEX! -- Definition du type de quantite integer, parameter :: qs_temperature = 010 integer, parameter :: qs_pressure    = 011integer, parameter :: qs_density     = 012integer, parameter :: qv_velocity    = 101integer, parameter :: qv_stress      = 102 ! -- DECLARATIONS -----------------------------------------------------------!------------------------------------------------------------------------------!! structure MNU_SOLVER : options numeriques les solveurs !------------------------------------------------------------------------------!type mnu_solver  integer         :: typ_solver      ! type de solveur (cf definitions VARCOM)   integer         :: nequat          ! nombre d'equations  type(mnu_ns)    :: defns           ! options si solveur NS  type(mnu_kdif)  :: defkdif         ! options si solveur KDIF  type(mnu_vort)  :: defvort         ! options si solveur VORTEX  type(mnu_amr)   :: defamr          ! options si AMR  integer         :: nboco           ! nombre de conditions aux limites  type(mnu_boco), dimension(:), pointer &                  :: boco            ! definitions des conditions aux limites  integer         :: ninit           ! nombre de conditions initiales  type(mnu_init), dimension(:), pointer &                  :: init            ! definitions des conditions initiales  integer         :: nprobe          ! nombre de capteurs  type(mnu_capteur), dimension(:), pointer &                  :: probe           ! definitions des capteursendtype mnu_solver! -- INTERFACES -------------------------------------------------------------interface delete  module procedure delete_mnu_solverendinterface! -- Fonctions et Operateurs ------------------------------------------------! -- IMPLEMENTATION ---------------------------------------------------------contains!------------------------------------------------------------------------------!! Procedure : initialisation d'une structure MNU_SOLVER!------------------------------------------------------------------------------!subroutine init_mnu_solver(defsolver)implicit nonetype(mnu_solver)  :: defsolver  defsolver%nboco  = 0  defsolver%nprobe = 0  defsolver%ninit  = 0  defsolver%defamr%nbcriter = 0     ! call init(defsolver%defamr)endsubroutine init_mnu_solver!------------------------------------------------------------------------------!! Procedure : desallocation d'une structure MNU_SOLVER!------------------------------------------------------------------------------!subroutine delete_mnu_solver(defsolver)implicit nonetype(mnu_solver)  :: defsolverinteger           :: ib  call delete(defsolver%defamr)  select case(defsolver%typ_solver)  case(solKDIF)    call delete(defsolver%defkdif%materiau%Kd)  case(solNS)  case(solVORTEX)  endselect  ! -- destruction des parametres d'initialisation --  select case(defsolver%typ_solver)  case(solKDIF)    do ib = 1, defsolver%ninit      if (defsolver%init(ib)%unif==init_nonunif) then        deallocate(defsolver%init(ib)%kdif%coef)      endif    enddo  case(solNS)  case(solVORTEX)  endselect  if (defsolver%ninit >= 1) then    deallocate(defsolver%init)  endif    ! -- destruction des parametres des capteurs --  if (defsolver%nprobe >= 1) then    do ib = 1, defsolver%nprobe      call delete(defsolver%probe(ib))    enddo    deallocate(defsolver%probe)  endif    ! -- destruction des parametres de conditions limites --  if (defsolver%nboco >= 1) then    ! DEV : definition d'un delete_mnu_boco    do ib = 1, defsolver%nboco      select case(defsolver%boco(ib)%boco_unif)      case(nonuniform)        ! condition de Dirichlet non uniforme        if (defsolver%boco(ib)%boco_kdif%alloctemp) then          deallocate(defsolver%boco(ib)%boco_kdif%temp)          defsolver%boco(ib)%boco_kdif%alloctemp = .false.        endif        ! condition de Von Neumann non uniforme        if (defsolver%boco(ib)%boco_kdif%allocflux) then          deallocate(defsolver%boco(ib)%boco_kdif%flux_nunif)          defsolver%boco(ib)%boco_kdif%allocflux = .false.        endif        ! condition de Fourier non uniforme        if (defsolver%boco(ib)%boco_kdif%allochconv) then          deallocate(defsolver%boco(ib)%boco_kdif%h_nunif)          deallocate(defsolver%boco(ib)%boco_kdif%tconv_nunif)          defsolver%boco(ib)%boco_kdif%allochconv = .false.        endif      endselect    enddo    deallocate(defsolver%boco)  endifendsubroutine delete_mnu_solver!------------------------------------------------------------------------------!! Fonction : retourne le type entier de quantite physique!------------------------------------------------------------------------------!integer function quantity(str)implicit nonecharacter(len=*) str  quantity = inull    ! quantites scalaires  if (samestring(str, "TEMPERATURE" ))  quantity = qs_temperature  if (samestring(str, "PRESSURE" ))     quantity = qs_pressure  if (samestring(str, "DENSITY" ))      quantity = qs_density  ! quantites vectorielles  if (samestring(str, "VELOCITY" ))     quantity = qv_velocity  if (samestring(str, "STRESS" ))       quantity = qv_stressendfunction quantity!------------------------------------------------------------------------------!! Fonction : retourne l'index de condition limite correspondant au nom "str"!------------------------------------------------------------------------------!integer function indexboco(defsolver, str)implicit nonetype(mnu_solver) :: defsolvercharacter(len=*) :: strinteger          :: i  indexboco = inull  do i = 1, defsolver%nboco    if (samestring(str, defsolver%boco(i)%family)) indexboco = i  enddoendfunction indexboco!------------------------------------------------------------------------------!! Fonction : retourne l'index de capteur correspondant au nom "str"!------------------------------------------------------------------------------!integer function indexcapteur(defsolver, str)implicit nonetype(mnu_solver) :: defsolvercharacter(len=*) :: strinteger          :: i  indexcapteur = inull  do i = 1, defsolver%nprobe    if (samestring(str, defsolver%probe(i)%name)) indexcapteur = i  enddoendfunction indexcapteurendmodule MENU_SOLVER!------------------------------------------------------------------------------!! Historique des modifications!! aout 2002 : creation du module! mars 2003 : ajout des conditions aux limites!             ajout des structures d'initialisation! juil 2003 : procedure delete : Kd! nov  2003 : tableau de parametres pour les capteurs!             definition des quantites!             index de conditions limites ou de capteurs en fonction du nom! fev  2004 : definition du solveur VORTEX! juin 2004 : procedure delete : condition limite Fourier non uniforme! july 2004 : add AMR parameters!------------------------------------------------------------------------------!

⌨️ 快捷键说明

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