Potrebno je primjenom gradijentne metode brzog spuštanja i fortranskog
programa Wenner.f90 obraditi podatke i odrediti specifičnu otpornost gornjeg i donjeg sloja horizontalno dvoslojnog zemljišta te debljinu gornjeg sloja zemljišta. Na osnovu listinga programa Wenner.f90 napraviti program u MATLABU.
Računarski program WENNER.f90
DIMENSION pa(200),pr(200),a(200),rom(200),roa(200),droa1(200),droa2(200), droh(200),pBB(200),BB(200),R(200),aaa(200),uu(10000),vv(10000) m = 20 eps=1.e-35 L = 1000000 pi=acos(-1.) OPEN (5,file = 'Podaci Wenner Sri Iskandar.txt') READ (5,*) np write(*,*) 'broj tacki:',np DO i = 1,np Write(*,*)‘Unesite index mjerne tacke, probno rastojanje, dubinu sondi, otpor:’ READ (5,*) nnn,pA(i),pBB(i),pR(i) write(*,*) nnn,pA(i),pBB(i),pR(i) aaa(i) = pA(i) end do CLOSE (5) n=0 do 991 i = 1,np if(pA(i).eq.0.) goto 991 n = n+1 is = 1 suma = pR(i) do 992 j = 1,np if ((pA(i).eq.pA(j)).and.(i.NE.j)) then is = is+1 suma = suma+pR(j) pA(j) = 0. end if 992 continue BB(n) = pBB(i) A(n) = pA(i) R(n) = suma/float(is) 991 continue do 998 i = 1,n rom(i) = 4.*pi*a(i)*R(i)/( 1. + 2.*a(i)/(sqrt(a(i)**2+4.*bb(i)**2))- a(i)/(sqrt(a(i)**2+bb(i)**2))) 998 continue rmin = rom(1) rmax = rom(1) DO 111 i = 1,n rmin = min(rmin,rom(i)) rmax = max(rmax,rom(i)) 111 CONTINUE imax = 1 aamax = a(1) DO 711 i = 1,n if (a(i).gt.aamax) then imax = i aamax = a(i) end if 711 CONTINUE h = 1. roa1 = 1.2*rmax roa2 = 0.9*rom(imax) iC3 = 0 iter = 0 10 ak = (roa2-roa1)/(roa2+roa1) DO 2 i = 1,n s = 0. s1 = 0. s2 = 0. s3 = 0. ee = 1. DO 63 j = 1,m ee = ee*ak d = 1.+(2.*FLOAT(j)*H/a(i))**2 b = 4.+(2.*FLOAT(j)*h/a(i))**2 s = s+ee/sqrt(d)-ee/sqrt(b) s1 = s1+(1.-FLOAT(j)*(1.-ak**2)/(2.*ak))*(ee/sqrt(d)- ee/sqrt(b)) s2 = s2+(2.*FLOAT(j))*(1.-ak**2)*(ee/sqrt(d)-ee/ sqrt(b))/ak s3 = s3+FLOAT(j)**2*(ee/sqrt(b**3)-ee/sqrt(d**3)) 63 CONTINUE roa(i) = roa1*(1.+4.*s) droa1(i) = 1.+4.*s1 droa2(i) = s2*roa1/roa2 droh(i) = 16.*roa1*h*s3/a(i)**2 2 CONTINUE s4 = 0. s5 = 0. s6 = 0. c1 = 0. do 64 i = 1,n c = (rom(i)-roa(i))/rom(i) s4 = s4+c/rom(i)*droa1(i) s5 = s5+c/rom(i)*droa2(i) s6 = s6+c/rom(i)*droh(i) c1 = c1+c**2 64 continue dpsi1 = -2.*s4 dpsi2 = -2.*s5 dpsi3 = -2.*s6 delpsi = -0.0005*(ABS(roa1)*(dpsi1**2)+abs(roa2)* (dpsi2**2)+abs(h)*(dpsi3**2)) if(abs(delpsi)-eps) 100,100,200 100 s7 = 0. s8 = 0. amaxeps = abs(rom(1)-roa(1)) do 55 i = 1,n e = (rom(i)-roa(i)) s7 = s7+e**2 s8 = s8+rom(i) if(amaxeps-ABS(E)) 89,55,55 89 amaxeps = ABS(E) 55 continue SG = SQRT(S7/FLOAT(n-1)) art = s8/FLOAT(n) s9 = 0. do 66 i = 1,n 66 s9 = s9+(rom(i)-art)**2 f = s7/s9 if (f-1.) 7,7,8 7 rxy = sqrt (1.-f) WRITE (*,*) iter write(*,500) roa1,roa2,h,iter write(*,600) sg,amaxeps,rxy write(*,500) roa1,roa2,h,iter write(*,600) sg,amaxeps,rxy goto 300 8 continue WRITE (*,*) roa1,roa2,h goto 300 200 if (iter.eq.l) goto 100 c2 = FLOAT(iter)/1000. ic2 = ifix(c2) if(ic2.ne.ic3) then ic3 = ic2 end if roa1s = roa1 roa2s = roa2 hs = h iter = iter+1 IF ((iter/25000)*25000.EQ.iter) write(*,*) iter,' ro1',roa1,' ro2',roa2,' h',h roa1= roa1-0.0005*abs(roa1)*dpsi1 roa2= roa2-0.0005*abs(roa2)*dpsi2 h = h-0.0005*abs(h)*dpsi3 if (iter.gt.1000) then g1 = ABS (roa1-roa1s) g2 = ABS (roa2-roa2s) g3 = ABS (h-hs) if(g1.lt.0.0000001.and.g2.lt.0.0000001.and.g3.lt.0.0000001) then WRITE (*,*) roa1,roa2,h goto 300 end if end if goto 10 300 continue !--------crtanje funkcije otpornosti ref = (roa2-roa1)/(roa2+roa1) xxmin = pA(1) xxmax = pA(1) yymax = 0. DO 451 i = 1,np xxmin = min (xxmin,pA(i)) xxmax = max (xxmax,pA(i)) romm = 4.*pi*pA(i)*pR(i)/( 1. + 2.*pA(i)/(sqrt(pA(i)**2+4.*pBB(i)**2))- pA(i)/(sqrt(pA(i)**2+pBB(i)**2))) yymax = max (yymax,romm) 451 CONTINUE yymax = max (yymax,roa1,roa2) dL = xxmax ncrt = 999 deltaa = dL/FLOAT (ncrt) DO 1 i = 1,ncrt+1 xx = FLOAT (i-1)*xxmax/FLOAT (ncrt) if(xx.eq.0.) xx = 1.e-15 uu(i) = FLOAT (i-1)*deltaa suma = 0. eee = 1. do 453 m = 1,40 eee = eee*ref suma = suma+eee/SQRT (1.+(2.*float(m)*h/xx)**2)- eee/SQRT (4.+(2.*float(m)*h/xx)**2) 453 continue vv(i) = roa1*(1.+4.*suma) 1 CONTINUE IF (ncrt.EQ.0) STOP OPEN (12,file = 'otpor.scr') CALL blipmode2D (12) IF (xxmax.EQ.0.) xxmax = 1.E-10 IF (yymax.EQ.0.) yymax = 1.E-10 CALL line (1.,4.5,8.,4.5,12) CALL line (1.,4.475,1.,7.5,12) rr = 2. DO 3 m = 1,7 CALL line (rr,4.475,rr,4.525,12) rr = rr+1. 3 CONTINUE zz = 4.5 DO 4 m = 1,4 CALL line (0.975,zz,1.025,zz,12) zz = zz+1. 4 CONTINUE rr = 0.7 tt = 0 DO 5 m = 1,8 CALL text (rr,4.33,0.07,0.,12) WRITE (12,6) tt rr = rr+1. tt = tt+xxmax/7. 5 CONTINUE DO 47 m = 1,7 zz = 8.2-FLOAT (m) zzz = FLOAT (4-m)*yymax/3. CALL text (0.9,zz,0.07,90.,12) WRITE (12,6) zzz 47 CONTINUE CALL text (2.5,1.8,0.14,0.,12) WRITE (12,*) 'Raspodjela specificne otpornosti tla' CALL text (0.71,4.17,0.125,90.,12) WRITE (12,*) 'Otpornost [Ohmm]' rs = 1. zs = 4.5+vv(1)*3./yymax CALL color (12,7) DO 12 j = 2,ncrt rn = rs+7./FLOAT (ncrt-1) zn = vv(j)*3./yymax+4.5 gg = 1.+xxmin*7./xxmax if (rn.gt.gg) CALL line (rs,zs,rn,zn,12) rs = rn zs = zn 12 CONTINUE CALL color (12,3) DO 13 i = 1,np xxxx = 1.+pA(i)*7./xxmax romm = 4.*pi*pA(i)*pR(i)/( 1. + 2.*pA(i)/(sqrt(pA(i)**2+4.*pBB(i)**2))- pA(i)/(sqrt(pA(i)**2+pBB(i)**2))) yyyy = 4.5+romm*3./yymax CALL circle (xxxx,yyyy,0.,0.01,12) 13 CONTINUE CALL zoom (12) CLOSE (12) OPEN (12,file = 'wenner.doc') write (12,800) DO 341 i = 1,np xx = aaa(i) suma = 0. eee = 1. do 153 m = 1,40 eee = eee*ref suma = suma+eee/SQRT (1.+(2.*float(m)*h/xx)**2)- eee/SQRT (4.+(2.*float(m)*h/xx)**2) 153 continue romm = roa1*(1.+4.*suma) write (12,801) i,aaa(i),pBB(i),pR(i),romm 341 CONTINUE write (12,*) write (12,*) write (12,*) 'Standardna greska regresije: ',sg write (12,*) 'Maximalna greska aproksimacije: ',amaxeps write (12,*) 'koeficijent krivolinijske regresije:',rxy write (12,*) write (12,*) 'Otpor gornjeg sloja: ',roa1,'[Ohm m]' write (12,*) 'Otpor donjeg sloja: ',roa2,'[Ohm m]' write (12,*) 'Koeficijent refleksije: ',ref,'[p.u.]' write (12,*) 'Debljina gornjeg sloja: ',h,'[m]' CLOSE (12) !------------------------------------------------------------------------------------------------------ stop 800 format(//,72(1H-),/,' Isp.tac. Prob.ras. Vis.sond. Otpor',' Izr.otpor.tla',/,' a[m] b[m] R[Ohm]',' ro[Ohm m]',/,72(1H-)) 801 format(i5,' ',f10.2,' ',f10.2,' ',f10.2,' ',f10.2) 500 format('specificna otpornost prvog sloja: ',e8.3,/,'specificna otpornost drugog sloja:',e8.3,/,'dubina prvog sloja: ',e8.3,/,'broj iteracija: ',I8) 600 FORMAT ('standardna greska regresije: ',e8.3,/,'max. greska aproksimacije: ',e8.3,/,'koeficijent krivol. regresije:',e8.3) 700 FORMAT ('ne postoji korelacija. ',/,'standardna greska regresije:',e8.3,/,'max greska aproksimacije: ',e8.3) 6 FORMAT (F9.2) 9 FORMAT ('Ukorak =',F7.2,' [V]') end !--------podprogram za crtanje bez krizica u AUTO CAD-u u 2-D prostoru SUBROUTINE blipmode2D (nw) !------------------------------------------------------------------------------------------------------ WRITE (nw,1) 6.9,5.,10.,0.0001 !------------------------------------------------------------------------------------------------------ RETURN 1 FORMAT ('ERASE'/'W'/'-1000,-1000',/'1000,1000',' '/'VIEWRES'/'Y'/ '100'/'COLOR'/'7'/'BLIPMODE'/'OFF'/'ZOOM'/'C'/,E9.4,',',E9.4,/,E9.4,/'STYLE'/'CO MPLEX'/'COMPLEX'///////'SNAP'/,E9.4) END !---------podprogram za crtanje tanke linije u 2-D prostoru u AUTO CAD-u SUBROUTINE line (x1,y1,x2,y2,nw) CHARACTER*1 a,b,c,d !------------------------------------------------------------------------------------------------------ a = '+' b = '+' c = '+' d = '+' IF (x1.LT.0.) a = '-' IF (y1.LT.0.) b = '-' IF (x2.LT.0.) c = '-' IF (y2.LT.0.) d = '-' xx1 = ABS (x1) yy1 = ABS (y1) xx2 = ABS (x2) yy2 = ABS (y2) WRITE (nw,1) a,xx1,b,yy1,c,xx2,d,yy2 !------------------------------------------------------------------------------------------------------ RETURN 1 FORMAT ('line'/,A1,E9.4,',',A1,E9.4,',0',/, A1,E9.4,',',A1,E9.4,',0',' ') END !---------podprogram za crtanje slova u 2-D prostoru u AUTO CAD-u SUBROUTINE text (x,y,h,angle,nw) CHARACTER*1 a,b,c !------------------------------------------------------------------------------------------------------ a = '+' b = '+' c = '+' IF (x.LT.0.) a = '-' IF (y.LT.0.) b = '-' IF (angle.LT.0.) c = '-' xx = ABS (x) yy = ABS (y) aangle = ABS (angle) WRITE (nw,1) a,xx,b,yy,h,c,aangle !------------------------------------------------------------------------------------------------------ RETURN 1 FORMAT ('TEXT'/,A1,E9.4,',',A1,E9.4,/,E9.4,/,A1,E9.4) END !--------podprogram za zadavanje boje slova i texta u AUTO CAD-u SUBROUTINE color (nw,ncol) !------------------------------------------------------------------------------------------------------ IF (ncol.LE.9) THEN WRITE (nw,1) ncol ELSE WRITE (nw,2) ncol END IF !------------------------------------------------------------------------------------------------------ RETURN 1 FORMAT ('COLOR'/,I1) 2 FORMAT ('COLOR'/,I2) END !--------podprogram za crtanje kruznice u 2-D prostoru u ACAD-u SUBROUTINE circle (xc,yc,zc,r,nw) CHARACTER*1 a,b,c !------------------------------------------------------------------------------------------------------ a = '+' b = '+' c = '+' IF (xc.LT.0.) a = '-' IF (yc.LT.0.) b = '-' IF (zc.LT.0.) c = '-' xxc = ABS (xc) yyc = ABS (yc) zzc = ABS (zc) WRITE (nw,1) a,xxc,b,yyc,c,zzc,r !------------------------------------------------------------------------------------------------------ RETURN 1 FORMAT ('circle'/,A1,E9.4,',',A1,E9.4,',',A1,E9.4,/,E9.4) END !---------podprogram za uvecavanje slike u AUTO CAD-u SUBROUTINE zoom (nw) !------------------------------------------------------------------------------------------------------ WRITE (nw,1) !------------------------------------------------------------------------------------------------------ RETURN 1 FORMAT ('ZOOM'/'E') END