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

📄 interpol.f90

📁 国外大名顶顶的“台风”并行计算流体力学CFD软件的早期版本的源代码
💻 F90
📖 第 1 页 / 共 2 页
字号:
  iin = 2   ! pointe sur la valeur superieure de l'entree pour l'interpolation de chaque point  do iout = 1, nout    if (tabout(iout,1) > tabin(iin,1)) iin = min(nin, iin + 1)    tabout(iout,2) = interlindp(tabout(iout,1), tabin(iin-1,:), tabin(iin,:))  enddo endsubroutine interpoltabdp!------------------------------------------------------------------------------!!------------------------------------------------------------------------------!! Fonction : getfromtabsp/dp              Auteur : J. Gressier!                                         Date   : Fevrier 2002! Fonction                                Modif  : Septembre 2002!   Interpolation selon un tableau d'entree (tabin) une coordonnee unique!! Defauts/Limitations/Divers :!   L'ordre d'interpolation est parametrable, lineaire par defaut!!------------------------------------------------------------------------------!function getfromtabsp(xin, vin, coord, ordre)     ! donner une valeur par defaut a ordreimplicit none ! -- Declaration des entrees --real, dimension(:), intent(in) :: xin, vin   ! valeurs de referencereal,               intent(in) :: coord      ! entrees des coordonneesinteger, optional,  intent(in) :: ordre! -- Declaration des sorties --real :: getfromtabsp! -- Declaration des variables internes --integer nin, iin, iordre! -- Debut de la procedure --  if (present(ordre)) then    iordre = ordre  else    iordre = 1  endif  nin  = size(xin, dim=1)  if (size(vin,dim=1) /= nin) call interpolerr("Donnees d'entrees invalides")  if (nin < 2) call interpolerr("Impossible d'interpoler dans un tableau a une valeur")  iin = 2   ! pointe sur la valeur superieure de l'entree pour l'interpolation de chaque point  do while ((coord > xin(iin)).and.(iin < nin))     iin = iin + 1  enddo  getfromtabsp = interlinsp(coord, (/ xin(iin-1),vin(iin-1) /), (/ xin(iin),vin(iin) /) ) endfunction getfromtabsp!------------------------------------------------------------------------------!!------------------------------------------------------------------------------!function getfromtabdp(xin, vin, coord, ordre)     ! donner une valeur par defaut a ordreimplicit none ! -- Declaration des entrees --double precision, dimension(:), intent(in) :: xin, vin   ! valeurs de referencedouble precision,               intent(in) :: coord      ! entrees des coordonneesinteger, optional,              intent(in) :: ordre! -- Declaration des sorties --double precision :: getfromtabdp! -- Declaration des variables internes --integer nin, iin, iordre! -- Debut de la procedure --  if (present(ordre)) then    iordre = ordre  else    iordre = 1  endif  nin  = size(xin, dim=1)  if (size(vin,dim=1) /= nin) call interpolerr("Donnees d'entrees invalides")  if (nin < 2) call interpolerr("Impossible d'interpoler dans un tableau a une valeur")  iin = 2   ! pointe sur la valeur superieure de l'entree pour l'interpolation de chaque point  do while ((coord > xin(iin)).and.(iin < nin))     iin = iin + 1  enddo  getfromtabdp = interlindp(coord, (/ xin(iin-1), vin(iin-1) /), (/ xin(iin),vin(iin) /) ) endfunction getfromtabdp!------------------------------------------------------------------------------!!------------------------------------------------------------------------------!! Fonction : getfromtabtsp/tdp            Auteur : J. Gressier!                                         Date   : Fevrier 2002! Fonction                                Modif  : Mars 2002!   Interpolation selon un tableau d'entree (tabin) et un tableau de coordonnees!! Defauts/Limitations/Divers :!   L'ordre d'interpolation est parametrable, lineaire par defaut!!------------------------------------------------------------------------------!function getfromtabtsp(xin, vin, coord, ordre)     ! donner une valeur par defaut a ordreimplicit none ! -- Declaration des entrees --real, dimension(:), intent(in) :: xin, vin   ! valeurs de referencereal, dimension(:), intent(in) :: coord      ! entrees des coordonneesinteger, optional,  intent(in) :: ordre! -- Declaration des sorties --real, dimension(size(coord,1))   :: getfromtabtsp! -- Declaration des variables internes --integer nin, nout, iin, iout, iordre! -- Debut de la procedure --  if (present(ordre)) then    iordre = ordre  else    iordre = 1  endif  nin  = size(xin, dim=1)  nout = size(coord, dim=1)  !print*,"interpol:",nin,nout  if (size(vin,dim=1) /= nin) call interpolerr("Donnees d'entrees invalides")  if (nin < 2) call interpolerr("Impossible d'interpoler dans un tableau a une valeur")  iin = 2   ! pointe sur la valeur superieure de l'entree pour l'interpolation de chaque point  do iout = 1, nout    do while ((coord(iout) > xin(iin)).and.(iin < nin))       iin = iin + 1    enddo    getfromtabtsp(iout) = interlinsp(coord(iout), (/ xin(iin-1), vin(iin-1) /), &                                                  (/ xin(iin),   vin(iin)   /)    )  enddo endfunction getfromtabtsp!------------------------------------------------------------------------------!!------------------------------------------------------------------------------!function getfromtabtdp(xin, vin, coord, ordre)     ! donner une valeur par defaut a ordreimplicit none ! -- Declaration des entrees --double precision, dimension(:), intent(in) :: xin, vin   ! valeurs de referencedouble precision, dimension(:), intent(in) :: coord      ! entrees des coordonneesinteger, optional,              intent(in) :: ordre! -- Declaration des sorties --double precision, dimension(size(coord,1))   :: getfromtabtdp! -- Declaration des variables internes --integer nin, nout, iin, iout, iordre! -- Debut de la procedure --  if (present(ordre)) then    iordre = ordre  else    iordre = 1  endif  nin  = size(xin,   dim=1)  nout = size(coord, dim=1)  if (size(vin,dim=1) /= nin) call interpolerr("Donnees d'entrees invalides")  if (nin < 2) call interpolerr("Impossible d'interpoler dans un tableau a une valeur")  iin = 2   ! pointe sur la valeur superieure de l'entree pour l'interpolation de chaque point  do iout = 1, nout    do while ((coord(iout) > xin(iin)).and.(iin < nin))       iin = iin + 1    enddo    getfromtabtdp(iout) = interlindp(coord(iout), (/ xin(iin-1), vin(iin-1) /), &                                                  (/ xin(iin),   vin(iin)   /)    )  enddo endfunction getfromtabtdp!------------------------------------------------------------------------------!!------------------------------------------------------------------------------!! Fonction : interlin                     Auteur : J. Gressier!                                         Date   : Fevrier 2002! Fonction                                Modif  :!! Defauts/Limitations/Divers :!!------------------------------------------------------------------------------!!function interlin!implicit none ! -- Declaration des entrees --! -- Declaration des sorties --! -- Declaration des variables internes --! -- Debut de la procedure --  !endsubroutine!------------------------------------------------------------------------------!endmodule INTERPOL!------------------------------------------------------------------------------!! Historique des modifications!! fev  2002 : creation de la procedure!!------------------------------------------------------------------------------!

⌨️ 快捷键说明

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