📄 integration_zone_lag.f90
字号:
!------------------------------------------------------------------------------!! Procedure : integration_zone_lag Auteur : J. Gressier! Date : Mars 2004! Fonction Modif : (cf historique)! Integration de tous les domaines d'une zone sur un pas de temps correspondant ! a une iteration!! Defauts/Limitations/Divers :!!------------------------------------------------------------------------------!subroutine integration_zone_lag(dt, zone)use TYPHMAKEuse OUTPUTuse VARCOMuse DEFZONEuse LAPACK ! linear algebraimplicit none! -- Declaration des entrees --real(krp) :: dt ! pas de temps propre a la zonetype(st_zone) :: zone ! zone a integrer! -- Declaration des sorties --! retour des residus a travers le champ field de la structure zone ??! -- Declaration des variables internes --integer :: ib, if, nf, dim, i, irhs, infointeger, dimension(:), & allocatable :: pivtype(st_grid), pointer :: pgridtype(st_genericfield) :: center, velocityreal(krp), dimension(:,:), allocatable & ! 2 dimensions pour raisons informatiques :: rhsreal(krp), dimension(:,:), allocatable & :: mattype(v3d) :: vinf! -- Debut de la procedure --!-----------------------------------------------------------------------! calcul du champ des vitesses induit (par singularites + vortex libres)! aux points vortex uniquement!pgrid => zone%grid!do while (associated(pgrid)) ! call get_singularity_nodes(pgrid, center)!! call calc_induced_velocity(zone, center, velocity) ! pgrid => pgrid%next !enddo! -- convection des tourbillons --! a ajouter ! call calc_new_vortices! -- emission des tourbillons aux limites --! a ajouter ! call shed_vortices!-----------------------------------------------------------------------! dimensionnementdim = 0do ib = 1, zone%defsolver%nboco if (zone%defsolver%boco(ib)%typ_calc == bc_calc_singpanel) then !print*,"TEST DEBUG",associated(zone%defsolver%boco(ib)%boco_vortex%pgrid) dim = dim + zone%defsolver%boco(ib)%boco_vortex%pgrid%umesh%mesh%nface + 1 ! DEV : memorisation d'indice ? endifenddo!-----------------------------------------------------------------------! calcul de la vitesse normale locale aux centres de panneaux singularitesallocate(rhs(dim,1))rhs(:,1) = 0._krp!pgrid => zone%grid!irhs = 1!nf = pgrid%umesh%nface!do while (associated(pgrid))! call addtorhs_vect(rhs(irhs:irhs+nf-1), pgrid! pgrid => pgrid%next!enddo!-----------------------------------------------------------------------! calcul du nouveau champ des vitesses induit ! (par farfield + vortex libres)! aux centres de panneaux singularitesdo ib = 1, zone%defsolver%nboco ! boucle sur boco / rech. de cond. champ lointain if (zone%defsolver%boco(ib)%typ_calc == bc_calc_farfield) then vinf = zone%defsolver%boco(ib)%boco_vortex%vect endif enddodo ib = 1, zone%defsolver%nboco ! boucle sur boco / rech. de cond. singularites if (zone%defsolver%boco(ib)%typ_calc == bc_calc_singpanel) then pgrid => zone%defsolver%boco(ib)%boco_vortex%pgrid ! DEV : memorisation de l'indice dans la structure boco_vortex irhs = 0 nf = pgrid%umesh%nface do if = 1, nf rhs(irhs+if,1) = rhs(irhs+if,1) - (vinf.scal.pgrid%umesh%mesh%iface(if,1,1)%normale) enddo irhs = irhs + (nf+1) endifenddo!-----------------------------------------------------------------------! calcul des singularites panneauxallocate(mat(dim, dim)) mat(:,:) = 0._krp! calcul de la matrice d'effets des singularites!print*,'ngrid :',zone%ngriddo ib = 1, zone%defsolver%nboco ! boucle sur boco / rech. de cond. singularites if (zone%defsolver%boco(ib)%typ_calc == bc_calc_singpanel) then !print*,"TEST SNG DEBUG",associated(zone%defsolver%boco(ib)%boco_vortex%pgrid) pgrid => zone%defsolver%boco(ib)%boco_vortex%pgrid ! DEV : memorisation de l'indice dans la structure boco_vortex irhs = 1 nf = pgrid%umesh%nface call fillmat_sing_effects(mat, dim, irhs, pgrid, zone%defsolver) irhs = irhs + (nf+1) endifenddo! ecriture des conditions de Kelvin (en instationnaire) (mat et rhs)! DEV : init_boco_vortex !!!!!!!!! (connectivites)! ecriture des conditions de Kutta-Joukowski (mat et rhs)! DEV : init_boco_vortex !!!!!!!!! (connectivites)do ib = 1, zone%defsolver%nboco ! boucle sur boco / rech. de cond. KUTTA if (zone%defsolver%boco(ib)%typ_calc == bc_calc_kutta) then !print*,"TEST KT DEBUG",associated(zone%defsolver%boco(ib)%boco_vortex%pgrid) pgrid => zone%defsolver%boco(ib)%boco_vortex%pgrid ! print*,pgrid%id !! DEV : memorisation de l'indice dans la structure boco_vortex !irhs = 0 nf = pgrid%umesh%nface ! DEV : PAR DEFAUT : KT sur premiere et derniere singularite de pgrid mat(nf+1, 1) = 1._krp mat(nf+1, nf+1) = 1._krp rhs(nf+1, 1) = 0._krp endifenddo! resolutionallocate(piv(dim))piv(:) = 0!print*,'mat:',real(mat,4)!print*,'rhs:',real(rhs,4)call lapack_getrf(dim, dim, mat, dim, piv, info)if (info /= 0) call erreur("calcul des singularites",& "probleme dans la decomposition LU")call lapack_getrs('N', dim, 1, mat, dim, piv, rhs, dim, info)if (info /= 0) call erreur("calcul des singularites",& "probleme dans l'inversion")! redistribution des singularitesdo ib = 1, zone%defsolver%nboco ! boucle sur boco / rech. de cond. singularites if (zone%defsolver%boco(ib)%typ_calc == bc_calc_singpanel) then pgrid => zone%defsolver%boco(ib)%boco_vortex%pgrid ! DEV : memorisation de l'indice dans la structure boco_vortex irhs = 0 nf = pgrid%umesh%nface !print*,'debug field scalaires : ',pgrid%bocofield%nscal,'x',pgrid%bocofield%dim do if = 1, nf+1 !print*,'debug redistribution ',if,'sur',nf ,':',rhs(irhs+if,1) pgrid%bocofield%tabscal(1)%scal(if) = rhs(irhs+if,1) enddo irhs = irhs + (nf+1) endifenddo!print*,'inversion reussie (debug)'! -- desallocation --deallocate(mat, rhs, piv)!-----------------------------endsubroutine integration_zone_lag!------------------------------------------------------------------------------!! Historique des modifications!! mars 2004 : creation de la procedure!------------------------------------------------------------------------------!
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -