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

📄 integration_cycle.f90

📁 国外大名顶顶的“台风”并行计算流体力学CFD软件的早期版本的源代码
💻 F90
字号:
!------------------------------------------------------------------------------!! Procedure : integration_cycle           Auteur : J. Gressier!                                         Date   : Juillet 2002! Fonction                                Modif  : (cf Historique)!   Integration de cycle pour toutes les zones!   Gestion des communications et couplages entre zones!! Defauts/Limitations/Divers :!!------------------------------------------------------------------------------!subroutine integration_cycle(lworld, exchcycle, ncoupling) use TYPHMAKEuse OUTPUTuse VARCOMuse MODWORLDimplicit none! -- Declaration des entrees --integer                         :: ncoupling  ! nombre de couplagesinteger, dimension(1:ncoupling) :: exchcycle  ! indice du cycle d'echange                                              ! (pour les differents couplages de zones)! -- Declaration des entrees/sorties --type(st_world) :: lworld! -- Declaration des sorties --! -- Declaration des variables internes --integer   :: izone, ir, ifield, ifinteger   :: iz1, iz2, ic, ncoupl1, ncoupl2, ib, nbc1, nbc2! -- Debut de la procedure --! allocation des champs de residus!do izone = 1, lworld%prj%nzone!  do if = 1, lworld%zone(izone)%ndom!    call alloc_res(lworld%zone(izone)%field(if))!  enddo!enddo! -- Procedure d'echange, en debut de cycleif (ncoupling > 0) thendo ir = 1, ncoupling  if (lworld%info%icycle.eq.exchcycle(ir)) then    ! calcul des donnees de raccord : indices de raccord, de CL pour     ! les deux zones couplees    call calcul_raccord(lworld, ir, iz1, iz2, ncoupl1, ncoupl2, nbc1, nbc2)    ! appel procedure d'echange    call echange_zonedata(lworld,ir, iz1, iz2, ncoupl1, ncoupl2, nbc1, nbc2)    select case(lworld%prj%typ_temps)          case(instationnaire)     ! reinitialisation a 0 des tableaux de cumul de flux pour la correction      ! de flux     print*, "correction de flux", lworld%zone(iz1)%coupling(ncoupl1)%zcoupling%etatcons%tabscal(1)%scal(1), &             lworld%zone(iz1)%coupling(ncoupl1)%zcoupling%etatcons%tabscal(2)%scal(1), &             lworld%zone(iz1)%coupling(ncoupl1)%zcoupling%etatcons%tabscal(3)%scal(1)     lworld%zone(iz1)%coupling(ncoupl1)%zcoupling%etatcons%tabscal(1)%scal(:) = 0._krp     lworld%zone(iz2)%coupling(ncoupl2)%zcoupling%etatcons%tabscal(1)%scal(:) = 0._krp    endselect    ! calcul du nouvel instant d'echange    exchcycle(ir) = exchcycle(ir) + lworld%coupling(ir)%n_tpsbase  endifenddocall output_result(lworld, in_cycle) !DEV2602endif!------------------------------------------------------------------------------! DVT : comparaison des flux a l'interface.!------------------------------------------------------------------------------!! Calcul des conditions aux limites pour le calcul des flux a l'interface!!do izone = 1, lworld%prj%nzone! call conditions_limites(lworld%zone(izone))!enddo!!if (lworld%prj%ncoupling > 0) then!!ir =1 ! DVT : provisoire!    ! calcul des donnees de raccord : indices de raccord, de CL pour les ! deux zones couplees!call calcul_raccord(lworld, ir, iz1, iz2, ncoupl1, ncoupl2, nbc1, nbc2)!!call comp_flux(lworld%zone(iz1), lworld%zone(iz2), nbc1, nbc2, lworld%zone(iz1)%ust_mesh%boco(nbc1)%nface,  &!                    lworld%info%curtps, ncoupl1)!endif!!------------------------------------------------------------------------------! --------------------------------------------! Integration d'un cycle de chacune des zones ! --------------------------------------------! -- Initialisation du residu courant de world a 0 :lworld%info%cur_res = 0do izone = 1, lworld%prj%nzone   ! -- Initialisation des infos pour le cycle  lworld%zone(izone)%info%iter_tot  = 0  lworld%zone(izone)%info%typ_temps = lworld%prj%typ_temps  select case(lworld%prj%typ_temps)  case(stationnaire)    lworld%zone(izone)%info%residumax  = lworld%zone(izone)%deftime%maxres    lworld%zone(izone)%info%residu_ref = 0._krp  case(instationnaire)    lworld%zone(izone)%info%cycle_dt = lworld%prj%dtbase  case(periodique)  endselect  !-------------------------------------  ! changement de nom en integration_cycle_zone ?  call integrationmacro_zone(lworld%zone(izone))  !-------------------------------------  ! -- Initialisation de residu_reforigine : valeur du residu de reference   !    du premier cycle pour chaque zone.  if(lworld%info%icycle.eq.1) then    lworld%zone(izone)%info%residu_reforigine = lworld%zone(izone)%info%residu_ref  endif  ! -- Retour d'informations d'integration du cycle  lworld%zone(izone)%info%typ_temps = lworld%prj%typ_temps  select case(lworld%prj%typ_temps)  case(stationnaire)     ! On attribue les residus courant et de reference de la zone la moins avancee, c'est-a-dire  ! celle dont le rapport (residu courant/residu de reference (d'origine)) est le plus grand.  ! Ainsi, la fin est atteinte quand toutes les zones ont vu leur residu diminuer de la valeur  ! voulue au moins.    if( (lworld%zone(izone)%info%cur_res / lworld%zone(izone)%info%residu_reforigine) &        .ge.(lworld%info%cur_res / lworld%info%residu_ref) ) then      lworld%info%cur_res    = lworld%zone(izone)%info%cur_res      lworld%info%residu_ref = lworld%zone(izone)%info%residu_reforigine !max(lworld%info%residu_ref, lworld%zone(izone)%info%residu_ref)    endif  case(instationnaire)    lworld%zone(izone)%info%cycle_dt = lworld%prj%dtbase  case(periodique)  endselect  ! do if = 1, lworld%zone(izone)%ndom  !   call dealloc_res(lworld%zone(izone)%field(if))  ! enddoenddo!-------------------------------------endsubroutine integration_cycle!------------------------------------------------------------------------------!! Historique des modifications!! juil 2002 : creation de la procedure! mai  2003 : procedures d'echange! juil 2003 : ajout de corrections de flux lors de couplage!             allocation des residus globale pour tous les cycles! sept 2003 : changement de nom de la procedure (ancien: integration_macrodt)!             gestion du calcul selon residus ! oct  2003 : suppression correction de flux APRES! oct  2003 : remplacement instant d'echange excht par cycle d'echange exchcycle! oct  2003 : modification de la gestion selon residus pour le calcul stationnaire !             multizone.! oct  2003 : corrections de flux seulement en instationnaire!------------------------------------------------------------------------------!

⌨️ 快捷键说明

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