📄 interpol.f90
字号:
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 + -