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

📄 corr_varprim_kdif.f90

📁 国外大名顶顶的“台风”并行计算流体力学CFD软件的早期版本的源代码
💻 F90
字号:
!------------------------------------------------------------------------------!! Procedure : corr_varprim_kdif           Auteur : E. Radenac!                                         Date   : Juillet 2003! Fonction                                Modif  :!   Calcul des variables primitives aux frontieres de couplage,!   tenant compte des corrections de flux, code thermique.! Defauts/Limitations/Divers :!!------------------------------------------------------------------------------!subroutine corr_varprim_kdif(field, domaine, def_solver, dif_enflux, nb, &                             part_cor, typ_cor, fincycle) use TYPHMAKEuse OUTPUTuse VARCOMuse USTMESHuse MENU_SOLVERuse DEFFIELDuse MENU_ZONECOUPLINGimplicit none! -- Declaration des entrees --type(st_ustmesh)      :: domaine          ! domaine non structure a integrertype(mnu_solver)      :: def_solver       ! proprietes du solvertype(st_genericfield) :: dif_enflux       ! energie a ajouter, pour correction de fluxinteger               :: nb               ! index de la condition aux limitesreal(krp)             :: part_cor         ! part de la correction a apporterinteger               :: typ_cor          ! type de correctionlogical               :: fincycle! -- Declaration des entrees/sorties --type(st_field)   :: field            ! champ des valeurs et residus! -- Declaration des variables internes --integer               :: i, if               ! index de faceinteger               :: ic1, ic2         ! index de cellulesinteger               :: ip               ! index de variables! -- Debut de la procedure --do i=1, domaine%boco(nb)%nface  if = domaine%boco(nb)%iface(i)  ic1 = domaine%facecell%fils(if,1)  ic2 = domaine%facecell%fils(if,2)  ! -- calcul des residus --  ! Choix selon les types de correction  select case(typ_cor)  case(repart_reg)! DEV : on cumule les restes eventuels en fin de cycle, sinon modifier pour les! echanges n'ayant pas lieu a chaque fin de cycle!    if (.not. fincycle) then      if (abs(dif_enflux%tabscal(3)%scal(i)) .ge. &          abs(part_cor*dif_enflux%tabscal(2)%scal(i)) ) then          !print*, "debug correction repartie C", dif_enflux%tabscal(3)%scal(i), &          !          part_cor*dif_enflux%tabscal(2)%scal(i)        do ip = 1, field%nscal          field%residu%tabscal(ip)%scal(ic1) = &                                       - part_cor*dif_enflux%tabscal(2)%scal(i)          field%residu%tabscal(ip)%scal(ic2) = &                                         part_cor*dif_enflux%tabscal(2)%scal(i)          dif_enflux%tabscal(3)%scal(i) = dif_enflux%tabscal(3)%scal(i) - &                                        part_cor*dif_enflux%tabscal(2)%scal(i)        enddo        !do ip = 1, field%nvect        !  field%residu%tabvect(ip)%vect(ic1) = &        !                              - part_cor*dif_enflux%tabvect(2)%vect(i)        !  field%residu%tabvect(ip)%vect(ic2) = &        !                                part_cor*dif_enflux%tabvect(2)%vect(i)        !  dif_enflux%tabvect(3)%vect(i) = dif_enflux%tabvect(3)%vect(i) - &        !                                part_cor*dif_enflux%tabvect(2)%vect(i)        !enddo      else        !print*, "debug correction repartie NC", dif_enflux%tabscal(3)%scal(i), &        !          part_cor*dif_enflux%tabscal(2)%scal(i)        do ip = 1, field%nscal          field%residu%tabscal(ip)%scal(ic1) = - dif_enflux%tabscal(3)%scal(i)          field%residu%tabscal(ip)%scal(ic2) = dif_enflux%tabscal(3)%scal(i)          dif_enflux%tabscal(3)%scal(i) = 0        enddo        !do ip = 1, field%nvect        !  field%residu%tabvect(ip)%vect(ic1) = - dif_enflux%tabvect(3)%vect(i)        !  field%residu%tabvect(ip)%vect(ic2) = dif_enflux%tabvect(3)%vect(i)        !  dif_enflux%tabvect(3)%vect(i) = v3d(0._krp, 0._krp, 0._krp)        !enddo        endif    !    else!      do ip = 1, field%nscal!        field%residu%tabscal(ip)%scal(ic1) = - dif_enflux%tabscal(3)%scal(i)!        field%residu%tabscal(ip)%scal(ic2) = dif_enflux%tabscal(3)%scal(i)!        dif_enflux%tabscal(3)%scal(i) = 0!      enddo!      do ip = 1, field%nvect!        field%residu%tabvect(ip)%vect(ic1) = - dif_enflux%tabvect(3)%vect(i)!        field%residu%tabvect(ip)%vect(ic2) = dif_enflux%tabvect(3)%vect(i)!        dif_enflux%tabvect(3)%vect(i) = v3d(0._krp, 0._krp, 0._krp)!      enddo!    endif  case(repart_geo)! DEV : on cumule les restes eventuels en fin de cycle, sinon modifier pour les! echanges n'ayant pas lieu a chaque fin de cycle!    if (.not. fincycle) then!print*, "debug correction repartie geo", dif_enflux%tabscal(3)%scal(i)      do ip = 1, field%nscal        field%residu%tabscal(ip)%scal(ic1) = &                                       - part_cor*dif_enflux%tabscal(3)%scal(i)        field%residu%tabscal(ip)%scal(ic2) = &                                         part_cor*dif_enflux%tabscal(3)%scal(i)        dif_enflux%tabscal(3)%scal(i) = dif_enflux%tabscal(3)%scal(i) - &                                        part_cor*dif_enflux%tabscal(3)%scal(i)      enddo      do ip = 1, field%nvect        field%residu%tabvect(ip)%vect(ic1) = &                                       - part_cor*dif_enflux%tabvect(3)%vect(i)        field%residu%tabvect(ip)%vect(ic2) = &                                         part_cor*dif_enflux%tabvect(3)%vect(i)        dif_enflux%tabvect(3)%vect(i) = dif_enflux%tabvect(3)%vect(i) - &                                        part_cor*dif_enflux%tabvect(3)%vect(i)      enddo!    else!      do ip = 1, field%nscal!        field%residu%tabscal(ip)%scal(ic1) = - dif_enflux%tabscal(3)%scal(i)!        field%residu%tabscal(ip)%scal(ic2) = dif_enflux%tabscal(3)%scal(i)!        dif_enflux%tabscal(3)%scal(i) = 0!      enddo!      do ip = 1, field%nvect!        field%residu%tabvect(ip)%vect(ic1) = - dif_enflux%tabvect(3)%vect(i)!        field%residu%tabvect(ip)%vect(ic2) = dif_enflux%tabvect(3)%vect(i)!        dif_enflux%tabvect(3)%vect(i) = v3d(0._krp, 0._krp, 0._krp)!      enddo!    endif  case(partiel)    do ip = 1, field%nscal      field%residu%tabscal(ip)%scal(ic1) = &                                       - part_cor*dif_enflux%tabscal(2)%scal(i)      field%residu%tabscal(ip)%scal(ic2) = &                                         part_cor*dif_enflux%tabscal(2)%scal(i)      dif_enflux%tabscal(3)%scal(i) = dif_enflux%tabscal(3)%scal(i) - &                                        part_cor*dif_enflux%tabscal(2)%scal(i)    enddo    do ip = 1, field%nvect      field%residu%tabvect(ip)%vect(ic1) = &                                       - part_cor*dif_enflux%tabvect(2)%vect(i)      field%residu%tabvect(ip)%vect(ic2) = &                                         part_cor*dif_enflux%tabvect(2)%vect(i)      dif_enflux%tabvect(3)%vect(i) = dif_enflux%tabvect(3)%vect(i) - &                                        part_cor*dif_enflux%tabvect(2)%vect(i)    enddo  case default ! correction AVANT, APRES ou AUTO!DEBUG!print*, "CORRECTION"    do ip = 1, field%nscal      field%residu%tabscal(ip)%scal(ic1) = - dif_enflux%tabscal(2)%scal(i)      field%residu%tabscal(ip)%scal(ic2) = - dif_enflux%tabscal(2)%scal(i)      if (typ_cor.ne.bocoT2) then        dif_enflux%tabscal(3)%scal(i) = 0      endif    enddo    do ip = 1, field%nvect      field%residu%tabvect(ip)%vect(ic1) = - dif_enflux%tabvect(2)%vect(i)      field%residu%tabvect(ip)%vect(ic2) = dif_enflux%tabvect(2)%vect(i)      if (typ_cor.ne.bocoT2) then        dif_enflux%tabvect(3)%vect(i) = v3d(0._krp, 0._krp, 0._krp)      endif    enddo  endselect  ! -- residus  do ip = 1, field%nscal    field%residu%tabscal(ip)%scal(ic1) =  field%residu%tabscal(ip)%scal(ic1) &                                            / domaine%mesh%volume(ic1,1,1)    field%residu%tabscal(ip)%scal(ic2) =  field%residu%tabscal(ip)%scal(ic2) &                                            / domaine%mesh%volume(ic1,1,1)  enddo  do ip = 1, field%nvect    field%residu%tabvect(ip)%vect(ic1) =  field%residu%tabvect(ip)%vect(ic1)  &                                            / domaine%mesh%volume(ic1,1,1)    field%residu%tabvect(ip)%vect(ic2) =  field%residu%tabvect(ip)%vect(ic2)  &                                            / domaine%mesh%volume(ic1,1,1)  enddo  if (typ_cor == bocoT2) then    def_solver%boco(domaine%boco(nb)%idefboco)%boco_kdif%temp(i)= &      def_solver%boco(domaine%boco(nb)%idefboco)%boco_kdif%temp(i)&      +(field%residu%tabscal(ip)%scal(ic2)/def_solver%defkdif%materiau%Cp)  else  ! -- calcul des variables conservatives et primitives --  do ip = 1, field%nscal    field%etatcons%tabscal(ip)%scal(ic1) = field%etatcons%tabscal(ip)%scal(ic1) &                                          + field%residu%tabscal(ip)%scal(ic1)    field%etatprim%tabscal(ip)%scal(ic1) = field%etatcons%tabscal(ip)%scal(ic1) &                                          / def_solver%defkdif%materiau%Cp  enddo  do ip= 1, field%nvect    field%etatcons%tabvect(ip)%vect(ic1) = field%etatcons%tabvect(ip)%vect(ic1) &                                          + field%residu%tabvect(ip)%vect(ic1)    field%etatprim%tabvect(ip)%vect(ic1) = field%etatcons%tabvect(ip)%vect(ic1) &                                          / def_solver%defkdif%materiau%Cp  enddo  endifenddoendsubroutine corr_varprim_kdif!------------------------------------------------------------------------------!! Historique des modifications!! juillet 2003 : creation de la procedure!------------------------------------------------------------------------------!

⌨️ 快捷键说明

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