def_boco.f90

来自「国外大名顶顶的“台风”并行计算流体力学CFD软件的早期版本的源代码」· F90 代码 · 共 247 行

F90
247
字号
!------------------------------------------------------------------------------!! Procedure : def_boco                    Auteur : J. Gressier!                                         Date   : Mars 2003! Fonction                                Modif  : (cf historique)!   Traitement des parametres du fichier menu principal!   Parametres principaux du projet!! Defauts/Limitations/Divers :!!------------------------------------------------------------------------------!subroutine def_boco(block, isolver, defsolver, zcoupling, ncoupling) use RPMuse TYPHMAKEuse OUTPUTuse VARCOMuse MENU_SOLVERuse MENU_BOCOuse MENU_ZONECOUPLINGuse USTMESHimplicit none! -- Declaration des entrees --type(rpmblock), target :: blockinteger                :: isolverinteger                :: ncoupling!type(st_ustmesh)       :: ustdom! -- Declaration des sorties --type(mnu_solver)                             :: defsolvertype(mnu_zonecoupling), dimension(ncoupling) :: zcoupling! -- Declaration des variables internes --type(rpmblock), pointer  :: pblock, pcour  ! pointeur de bloc RPMinteger                  :: nboco          ! nombre de conditions aux limitesinteger                  :: ib, nkey, ibocointeger                  :: izr            ! indice de parcours du tableau de raccordscharacter(len=dimrpmlig) :: str            ! chaine RPM intermediaire! -- Debut de la procedure --call print_info(5,"- Definition des conditions aux limites")! -- Recherche du BLOCK:BOCOpblock => blockcall seekrpmblock(pblock, "BOCO", 0, pcour, nboco)if (nboco < 1) call erreur("lecture de menu", &                           "Pas de definition de conditions aux limites (BOCO)")defsolver%nboco = nbocoallocate(defsolver%boco(nboco))izr = 0 !initialisationdo ib = 1, nboco  ! -- Initialisation des allocations de tableaux de CL a FALSE  defsolver%boco(ib)%boco_kdif%alloctemp = .false.  defsolver%boco(ib)%boco_kdif%allocflux = .false.  defsolver%boco(ib)%boco_kdif%allochconv = .false.  ! -- Initialisation des noms de fichier de temperature, flux  defsolver%boco(ib)%boco_kdif%tempfile = cnull  defsolver%boco(ib)%boco_kdif%fluxfile = cnull  defsolver%boco(ib)%boco_kdif%hfile = cnull  defsolver%boco(ib)%boco_kdif%tconvfile = cnull  call seekrpmblock(pblock, "BOCO", ib, pcour, nkey)  ! -- Determination du nom de famille  call rpmgetkeyvalstr(pcour, "FAMILY", str)  defsolver%boco(ib)%family = str  ! -- Determination du type de condition aux limites   call rpmgetkeyvalstr(pcour, "TYPE", str)  defsolver%boco(ib)%typ_boco = bocotype(str)  if (defsolver%boco(ib)%typ_boco /= inull) then    call print_info(8,"    famille "//defsolver%boco(ib)%family(1:12)//": condition "//trim(str))  else    call erreur("lecture de menu (def_boco)",trim(str)//" condition aux limites inconnue")  endif  ! -- Traitement du couplage  if (samestring(str, "COUPLING")) then    ! -- Condition aux limites necessairement non uniforme     defsolver%boco(ib)%boco_unif = nonuniform    ! -- Allocation memoire pour les tableaux de conditions limites    defsolver%boco(ib)%boco_kdif%alloctemp = .true.    defsolver%boco(ib)%boco_kdif%allocflux = .true.    defsolver%boco(ib)%boco_kdif%allochconv = .true.    ! -- Incrementation : numero du raccord    izr = izr + 1    ! -- Determination de la zone connectee par le raccord    call rpmgetkeyvalstr(pcour, "CONNZONE", str)    zcoupling(izr)%connzone = str        ! -- Determination du nom de la famille connectee par le raccord    call rpmgetkeyvalstr(pcour, "CONNFAM", str)    zcoupling(izr)%connfam = str        ! -- Nom de la famille du raccord    zcoupling(izr)%family = defsolver%boco(ib)%family        ! -- Determination de la methode de calcul du raccord    call rpmgetkeyvalstr(pcour, "METHOD", str)      if (samestring(str, "FLUX" ))      defsolver%boco(ib)%typ_calc = bc_calc_flux    if (samestring(str, "GHOSTFACE" )) defsolver%boco(ib)%typ_calc = bc_calc_ghostface    if (samestring(str, "GHOSTCELL"))  defsolver%boco(ib)%typ_calc = bc_calc_ghostcell        select case(defsolver%boco(ib)%typ_calc)      case(bc_calc_flux) ! Methode du flux specifique      call print_info(10,"    methode du flux specifique")    case(bc_calc_ghostface) ! Methode du flux de face      call print_info(10,"    methode du flux de face")    case(bc_calc_ghostcell) ! Methode de la cellule fictive      call print_info(10,"    methode de la cellule fictive")    case default      call erreur("lecture de menu","methode de calcul du raccord inconnue")     endselect    ! -- Correction : repartition    call rpmgetkeyvalstr(pcour, "CORRECTION", str, "AUTO")    if (samestring(str, "AUTO"))          zcoupling(izr)%typ_cor = auto    if (samestring(str, "BEF_EXCH"))         zcoupling(izr)%typ_cor = avant    if (samestring(str, "AFT_EXCH"))         zcoupling(izr)%typ_cor = apres      if (samestring(str, "NO"))            zcoupling(izr)%typ_cor = sans     if (samestring(str, "SPLIT_REG"))     zcoupling(izr)%typ_cor = repart_reg    if (samestring(str, "SPLIT_GEO"))     zcoupling(izr)%typ_cor = repart_geo    if (samestring(str, "SPLIT_PARTIAL")) zcoupling(izr)%typ_cor = partiel    if (samestring(str, "EQ_BOCOT"))         zcoupling(izr)%typ_cor = bocoT    if (samestring(str, "NEQ_BOCOT"))        zcoupling(izr)%typ_cor = bocoT2 !DEV1603    select case(zcoupling(izr)%typ_cor)    case(auto) ! Application de la correction automatique      call print_info(10,"    Correction automatique")      zcoupling(izr)%partcor = 1    case(avant) ! Application de la correction AVANT l'echange, en 1 fois      call print_info(10,"    Correction AVANT")      zcoupling(izr)%partcor = 1    case(apres) ! Application de la correction APRES l'echange, en 1 fois      call print_info(10,"    Correction APRES")      zcoupling(izr)%partcor = 1    case(sans)   ! Pas de correction      call print_info(10,"    Pas de correction")      zcoupling(izr)%partcor = 0    case(repart_reg) ! repartition reguliere de la correction sur le nombre                     ! d'iterations necessaires      call print_info(10,"    Correction regulierement repartie sur plusieurs iterations")      call rpmgetkeyvalreal(pcour, "ITER_PART", zcoupling(izr)%partcor)    case(repart_geo) ! repartition geometrique de la correction       call print_info(10,"    Correction repartie selon une variation geometrique")      call rpmgetkeyvalreal(pcour, "ITER_PART", zcoupling(izr)%partcor)    case(partiel) ! correction partielle sur un cycle      call print_info(10,"    Correction partielle")      call rpmgetkeyvalreal(pcour, "ITER_PART", zcoupling(izr)%partcor)    case(bocoT)   ! Correction sur la condition aux limites      call print_info(10,"    Correction appliquee sur la condition limite d'interface")      zcoupling(izr)%partcor = 1    case(bocoT2)   ! Correction sur la condition aux limites      call print_info(10,"    Correction appliquee sur la condition limite d'interface")      zcoupling(izr)%partcor = 1    case default      call erreur("lecture de menu","type de correction inconnu")     endselect  ! -- Traitement des conditions aux limites non attachees a un couplage  else         ! -- Determination de l'uniformite de la CL (par defaut : uniforme)    call rpmgetkeyvalstr(pcour, "UNIFORMITY", str, "UNIFORM")    defsolver%boco(ib)%boco_unif = inull    if (samestring(str, "UNIFORM" )) defsolver%boco(ib)%boco_unif = uniform    if (samestring(str, "NON_UNIFORM" )) defsolver%boco(ib)%boco_unif = nonuniform    if (defsolver%boco(ib)%boco_unif == inull) &    call erreur("lecture de menu (def_boco)","Uniformite de la CL mal definie")    ! Traitement des conditions aux limites communes aux solveurs    select case(defsolver%boco(ib)%typ_boco)    case(bc_geo_sym)       !call erreur("Developpement","'bc_geo_sym' : Cas non implemente")        case(bc_geo_period)      call erreur("Developpement","'bc_geo_period' : Cas non implemente")        case(bc_geo_extrapol)      call rpmgetkeyvalstr(pcour, "ORDER", str, "QUANTITY")      defsolver%boco(ib)%order_extrap = inull      if (samestring(str, "QUANTITY" )) defsolver%boco(ib)%order_extrap = extrap_quantity      if (samestring(str, "GRADIENT" )) defsolver%boco(ib)%order_extrap = extrap_gradient      if (defsolver%boco(ib)%order_extrap == inull) &        call erreur("lecture de menu (def_boco)","ordre d'extrapolation inconnu")       case default          select case(isolver)      case(solKDIF)        call def_boco_kdif(pcour, defsolver%boco(ib)%typ_boco, &                           defsolver%boco(ib)%boco_kdif, &                           defsolver%boco(ib)%boco_unif)      case(solNS)        call def_boco_ns(pcour, defsolver%boco(ib)%typ_boco, &                           defsolver%boco(ib)%boco_ns)      case(solVORTEX)        call def_boco_vortex(pcour, defsolver%boco(ib)%typ_boco, &                           defsolver%boco(ib)%boco_vortex, &                           defsolver%boco(ib)%boco_unif)       case default         call erreur("incoherence interne (def_boco)","solveur inconnu")      endselect    endselect    ! Initialisation de l'implementation de la condition aux limites    defsolver%boco(ib)%typ_calc = bctype_of_boco(isolver, defsolver%boco(ib)%typ_boco)  endifenddoendsubroutine def_boco!------------------------------------------------------------------------------!! Historique des modifications!! mars 2003 : creation de la routine! fev  2004 : ajout des CL propres au solveur VORTEX (cf MENU_VORTEX)!------------------------------------------------------------------------------!

⌨️ 快捷键说明

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