Path: blob/devel/elmerice/examples/InverseMethods_OLD/src/USF_Init.F90
3206 views
FUNCTION UIni( Model, nodenumber, dumy) RESULT(U)1USE types23implicit none4TYPE(Model_t) :: Model5Real(kind=dp) :: dumy,U6INTEGER :: nodenumber78Real(kind=dp),allocatable :: dem(:,:),xx(:),yy(:)9Real(kind=dp) :: x,y10Real(kind=dp) :: LinearInterp1112integer :: nx,ny13integer :: i,j1415character(len=MAX_NAME_LEN) :: filin='Data/UDEM.xy'1617logical :: Firsttime=.true.1819SAVE dem,xx,yy,nx,ny20SAVE Firsttime2122if (Firsttime) then23Firsttime=.False.2425! open file26open(10,file=trim(filin))27Read(10,*) nx28Read(10,*) ny29allocate(xx(nx),yy(ny))30Allocate(dem(nx,ny))31Do i=1,nx32Do j=1,ny33read(10,*) xx(i),yy(j),dem(i,j)34End Do35End do36close(10)37End if3839! position current point40x=Model % Nodes % x (nodenumber)41y=Model % Nodes % y (nodenumber)4243U=LinearInterp(dem,xx,yy,nx,ny,x,y)4445Return46End4748FUNCTION VIni( Model, nodenumber, dumy) RESULT(U)49USE types5051implicit none52TYPE(Model_t) :: Model53Real(kind=dp) :: dumy,U54INTEGER :: nodenumber5556Real(kind=dp),allocatable :: dem(:,:),xx(:),yy(:)57Real(kind=dp) :: x,y58Real(kind=dp) :: LinearInterp5960integer :: nx,ny61integer :: i,j6263character(len=MAX_NAME_LEN) :: filin='Data/VDEM.xy'6465logical :: Firsttime=.true.6667SAVE dem,xx,yy,nx,ny68SAVE Firsttime6970if (Firsttime) then71Firsttime=.False.7273! open file74open(10,file=trim(filin))75Read(10,*) nx76Read(10,*) ny77allocate(xx(nx),yy(ny))78Allocate(dem(nx,ny))79Do i=1,nx80Do j=1,ny81read(10,*) xx(i),yy(j),dem(i,j)82End Do83End do84close(10)85End if8687! position current point88x=Model % Nodes % x (nodenumber)89y=Model % Nodes % y (nodenumber)9091U=LinearInterp(dem,xx,yy,nx,ny,x,y)9293Return94End9596FUNCTION zsIni( Model, nodenumber, dumy) RESULT(U)97USE types9899implicit none100TYPE(Model_t) :: Model101Real(kind=dp) :: dumy,U102INTEGER :: nodenumber103104Real(kind=dp),allocatable :: dem(:,:),xx(:),yy(:)105Real(kind=dp) :: x,y106Real(kind=dp) :: LinearInterp107108integer :: nx,ny109integer :: i,j110111character(len=MAX_NAME_LEN) :: filin='Data/zsDEM.xy'112113logical :: Firsttime=.true.114115SAVE dem,xx,yy,nx,ny116SAVE Firsttime117118if (Firsttime) then119Firsttime=.False.120121! open file122open(10,file=trim(filin))123Read(10,*) nx124Read(10,*) ny125allocate(xx(nx),yy(ny))126Allocate(dem(nx,ny))127Do i=1,nx128Do j=1,ny129read(10,*) xx(i),yy(j),dem(i,j)130End Do131End do132close(10)133End if134135! position current point136x=Model % Nodes % x (nodenumber)137y=Model % Nodes % y (nodenumber)138139U=LinearInterp(dem,xx,yy,nx,ny,x,y)140141Return142End143144FUNCTION zbIni( Model, nodenumber, dumy) RESULT(U)145USE types146147implicit none148TYPE(Model_t) :: Model149Real(kind=dp) :: dumy,U150INTEGER :: nodenumber151152Real(kind=dp),allocatable :: dem(:,:),xx(:),yy(:)153Real(kind=dp) :: x,y154Real(kind=dp) :: LinearInterp155156integer :: nx,ny157integer :: i,j158159character(len=MAX_NAME_LEN) :: filin='Data/zbDEM.xy'160161logical :: Firsttime=.true.162163SAVE dem,xx,yy,nx,ny164SAVE Firsttime165166if (Firsttime) then167Firsttime=.False.168169! open file170open(10,file=trim(filin))171Read(10,*) nx172Read(10,*) ny173allocate(xx(nx),yy(ny))174Allocate(dem(nx,ny))175Do i=1,nx176Do j=1,ny177read(10,*) xx(i),yy(j),dem(i,j)178End Do179End do180close(10)181End if182183! position current point184x=Model % Nodes % x (nodenumber)185y=Model % Nodes % y (nodenumber)186187U=LinearInterp(dem,xx,yy,nx,ny,x,y)188189Return190End191192193Function LinearInterp(dem,xx,yy,nx,ny,x,y) Result(InterP1)194195USE TYPES196implicit none197198REAL(KIND=dp) :: dem(nx,ny),xx(nx),yy(ny)199REAL(KIND=dp) :: Dx,Dy,DxDy200Real(kind=dp) :: x,y,x_1,y_1,B(4)201Real(kind=dp) :: InterP1202integer :: nx,ny203integer :: nx_1,ny_1204205Dx=(xx(nx)-xx(1))/(nx-1)206Dy=(yy(ny)-yy(1))/(ny-1)207DxDy=Dx*Dy208209! lower left point in DEM210nx_1=floor((x-xx(1))/Dx) + 1211ny_1=floor((y-yy(1))/Dy) + 1212nx_1=min(nx_1,nx-1)213ny_1=min(ny_1,ny-1)214215x_1=xx(nx_1)216y_1=yy(ny_1)217218219! DEM Value in surroundings points220! 4 ----- 3221! | |222! 1 ----- 2223B(1)=dem(nx_1,ny_1)224B(2)=dem(nx_1+1,ny_1)225B(3)=dem(nx_1+1,ny_1+1)226B(4)=dem(nx_1,ny_1+1)227228229! Linear Interpolation at Point x,y230InterP1=(x-x_1)*(y-y_1)*(B(3)+B(1)-B(2)-B(4))/DxDy231InterP1=InterP1+(x-x_1)*(B(2)-B(1))/Dx+(y-y_1)*(B(4)-B(1))/Dy+B(1)232233Return234End235236237