module interp !-------------------------------------------------------------! ! MODULO INTERP ! !-------------------------------------------------------------! ! MODULO DE FUNCOES BASICAS DE INTERPOLACAO ! ! Copyrights (c) Sergio Herique Soares Ferreira ! ! Instituto Nacional de Pesquisas Espaciais ! ! ! !-------------------------------------------------------------! public contains !-------------------------------------------------------------! ! og2dm1 ! Interpolocao Pto Obs - Pto Grade Metodo 1 ! SHSF ! !-------------------------------------------------------------! ! Interpolacao de dados Pto de Observacao para ponto de grades ! utilizado metodo de ponderacao linear com a distancia ! !------------------------------------------------------------- subroutine interp_og2dm1(obs,x,y,nobs,nvar,null,gradx,grady,nx,ny,raio2,grad) !{ Variaveis de interface real,dimension(:,:),intent(in)::obs ! Matriz de observacoes (nobs,nvar) real,dimension(:),intent(in)::x ! Coordenada X da observacao: x(nobs) real,dimension(:),intent(in)::y ! Coordenada Y da observacao: y(nobs) integer,intent(in)::nobs ! Numero de observacoes integer,intent(in)::nvar ! Numero de variaveis real,intent(in)::null ! valor nulo de preenchimento (background) real,dimension(:),intent(in)::gradx ! Coordenadas X da grade de interpolacao: x(nx) real,dimension(:),intent(in)::grady ! Coordenadas Y da grade de interpolacao : y(ny) integer,intent(in)::nx ! Numero de pontos de grade em X integer,intent(in)::ny ! Numero de pontos de grade em y real,intent(in)::raio2 ! Quadrado do Raio de influencia para interpolcao !Valores interpolados em pto de grade: grad(nx,ny,nvar) real,dimension(:,:,:),intent(out):: grad !} !{ Variaveis locais integer::i,ix,iy,iv real::dist real::peso real,dimension(nx,ny,nvar)::SomaPeso !} !{ Iniciar Variaveis grad(:,:,:)=0 somapeso(:,:,:)=0 !} !-------------------------------- ! Ponderacao de Valores !------------------------------- do i=1,nobs ! Para todas as observacoes !print *,"i=",i do ix=1,nx ! Para todos os pontos em X !print *,"ix=",ix do iy=1,ny ! Para todas as pontos em y !print *,"iy=",iy dist=((y(i)-grady(iy))**2 + (x(i)-gradx(ix))**2) !print *,dist,lon(i),gradx(ix) if (dist0) then Grad(ix,iy,iv)=Grad(ix,iy,iv)/SomaPeso(ix,iy,iv) else grad(ix,iy,iv)=null end if end do end do end do end subroutine interp_og2dm1 end module