14
Lean Palma PS130 Finals PROBLEM 1 MAIN PROGRAM PROGRAM midpointcannon IMPLICIT NONE INTEGER::i, last_step INTEGER, PARAMETER::dim=10000 REAL, DIMENSION(dim)::x=0, v_x=0, y=0, v_y=0 REAL::theta, v, maxrange=0, maxangle=0 REAL, PARAMETER:: B2m=4e-5, a=6.5e-3, Tk=300, alpha=2.5, dt=0.1, v_initial=750, pi=3.141592654, g=9.81 CHARACTER (len=30)::name1="max", name2="max+5", name3="max-5" theta=30 DO CALL calc(x, y, v_x, v_y, v, pi, dim, B2m, a, g, Tk, alpha, dt, theta, v_initial, last_step) IF (x(last_step)>maxrange)THEN maxrange=x(last_step) maxangle=theta END IF IF (theta>54)THEN EXIT END IF theta=theta+1 END DO WRITE(*,100)"Max range=", maxrange, "Max angle=", maxangle 100 FORMAT(A15, 1X, F10.3, //, A15, 1X, F10.3) theta=maxangle x=0 v_x=0 y=0 v_y=0 CALL calc(x, y, v_x, v_y, v, pi, dim, B2m, a, g, Tk, alpha, dt, theta, v_initial, last_step) CALL writeresults(x, y, name1, dim) theta=maxangle+5 x=0 v_x=0 y=0 v_y=0 CALL calc(x, y, v_x, v_y, v, pi, dim, B2m, a, g, Tk, alpha, dt, theta, v_initial, last_step) CALL writeresults(x, y, name2, dim) theta=maxangle-5 x=0 v_x=0

Lean Palma Ps130 Finals

Embed Size (px)

DESCRIPTION

Final Exam for PS130

Citation preview

Page 1: Lean Palma Ps130 Finals

Lean PalmaPS130 Finals

PROBLEM 1

MAIN PROGRAM

PROGRAM midpointcannon IMPLICIT NONE INTEGER::i, last_step INTEGER, PARAMETER::dim=10000 REAL, DIMENSION(dim)::x=0, v_x=0, y=0, v_y=0 REAL::theta, v, maxrange=0, maxangle=0 REAL, PARAMETER:: B2m=4e-5, a=6.5e-3, Tk=300, alpha=2.5, dt=0.1, v_initial=750, pi=3.141592654, g=9.81 CHARACTER (len=30)::name1="max", name2="max+5", name3="max-5" theta=30 DO CALL calc(x, y, v_x, v_y, v, pi, dim, B2m, a, g, Tk, alpha, dt, theta, v_initial, last_step) IF (x(last_step)>maxrange)THEN maxrange=x(last_step) maxangle=theta END IF IF (theta>54)THEN EXIT END IF theta=theta+1 END DO WRITE(*,100)"Max range=", maxrange, "Max angle=", maxangle100 FORMAT(A15, 1X, F10.3, //, A15, 1X, F10.3) theta=maxangle x=0 v_x=0 y=0 v_y=0 CALL calc(x, y, v_x, v_y, v, pi, dim, B2m, a, g, Tk, alpha, dt, theta, v_initial, last_step) CALL writeresults(x, y, name1, dim)

theta=maxangle+5 x=0 v_x=0 y=0 v_y=0 CALL calc(x, y, v_x, v_y, v, pi, dim, B2m, a, g, Tk, alpha, dt, theta, v_initial, last_step) CALL writeresults(x, y, name2, dim) theta=maxangle-5 x=0 v_x=0

Page 2: Lean Palma Ps130 Finals

y=0 v_y=0 CALL calc(x, y, v_x, v_y, v, pi, dim, B2m, a, g, Tk, alpha, dt, theta, v_initial, last_step) CALL writeresults(x, y, name3, dim)END PROGRAM midpointcannon

Trajectory Subroutine

SUBROUTINE calc(x, y, v_x, v_y, v, pi, dim, B2m, a, g, Tk, alpha, dt, theta, v_initial, last_step) IMPLICIT NONE INTEGER, INTENT(INOUT)::dim INTEGER, INTENT(OUT)::last_step REAL,INTENT(INOUT), DIMENSION(dim)::x, v_x, y, v_y REAL, INTENT(INOUT)::v REAL, INTENT(IN)::dt, B2m, a, Tk, alpha, v_initial, pi, g, theta INTEGER::i x(1)=0 y(1)=0 v_x(1)=v_initial*COS(pi*theta/180) v_y(1)=v_initial*SIN(pi*theta/180) v=v_initial DO i=1, dim-1 v_x(i+1)=v_x(i)-B2m*v*v_x(i)*(1-(a*y(i)/Tk))**alpha*dt x(i+1)=x(i)+((v_x(i+1)+v_x(i))/2)*dt v_y(i+1)=v_y(i)-g*dt-B2m*v*v_y(i)*(1-(a*y(i)/Tk))**alpha*dt y(i+1)=y(i)+((v_y(i+1)+v_y(i))/2)*dt last_step=i IF (ATAN(y(i+1)/x(i+1))<0)THEN EXIT END IF END DOEND SUBROUTINE calc

Write results Subroutine

SUBROUTINE writeresults(x, y, name, n) INTEGER, INTENT(IN)::n REAL,INTENT(IN), DIMENSION(n)::x, y CHARACTER (len=30), INTENT(IN)::name INTEGER::i, status OPEN (UNIT=23, FILE=name, STATUS='REPLACE', ACTION='WRITE', IOSTAT=status) IF ( status == 0 ) THEN WRITE(23, 100, IOSTAT=status) x(1), y(1)100 FORMAT(F20.13, 5X, F20.13) DO i=2,n IF(x(i)==0.AND.y(i)==0)EXIT WRITE(23, 110, IOSTAT=status) x(i), y(i)110 FORMAT(F20.13, 5X, F20.13) END DO

Page 3: Lean Palma Ps130 Finals

ELSE WRITE(*,*) "ERROR occured creating file" RETURNEND IFCLOSE (UNIT=23)END SUBROUTINE writeresults

Page 4: Lean Palma Ps130 Finals

PROBLEM 2

Main Program

PROGRAM pivot IMPLICIT NONE INTEGER::i INTEGER, PARAMETER::dim=10000 REAL, PARAMETER::g=9.8, L=1.0, Td=1.0, pi=3.141592654, dt=0.001, initial_theta=10 REAL::A0=0 REAL, DIMENSION(dim)::theta=0, omega=0, t=0 CHARACTER(len=30)::name WRITE(*,*)"Input A0:" READ(*,*)A0 WRITE(*,*)"Input filename:" READ(*,*)name theta(1)=initial_theta*pi/180 DO i=1, dim-1 omega(i+1)=omega(i)-((g+A0*SIN(2*pi*t(i)/Td))*SIN(theta(i))/L)*dt theta(i+1)=theta(i)+omega(i)*dt t(i+1)=t(i)+dt DO IF(theta(i+1)<pi .AND. theta(i+1)>-pi)THEN EXIT ELSE IF (theta(i+1)>pi)THEN theta(i+1)=theta(i+1)-2*pi CYCLE ELSE IF (theta(i+1)<-pi)THEN theta(i+1)=theta(i+1)+2*pi CYCLE END IF END DO END DO CALL writeresults (t, theta, name, dim)END PROGRAM pivot Write results Subroutine

SUBROUTINE writeresults(x, y, name, n) INTEGER, INTENT(IN)::n REAL,INTENT(IN), DIMENSION(n)::x, y CHARACTER (len=30), INTENT(IN)::name INTEGER::i, status OPEN (UNIT=23, FILE=name, STATUS='REPLACE', ACTION='WRITE', IOSTAT=status) IF ( status == 0 ) THEN DO i=1,n WRITE(23, 110, IOSTAT=status) x(i), y(i)110 FORMAT(F20.13, 5X, F20.13) END DO

Page 5: Lean Palma Ps130 Finals

ELSE WRITE(*,*) "ERROR occured creating file" RETURNEND IFCLOSE (UNIT=23)END SUBROUTINE writeresults

Page 6: Lean Palma Ps130 Finals

Plots When dt=0.1:

Page 7: Lean Palma Ps130 Finals
Page 8: Lean Palma Ps130 Finals
Page 9: Lean Palma Ps130 Finals

PROBLEM 3

Main Program

PROGRAM ecology IMPLICIT NONE INTEGER:: i, initial_x, initial_y REAL, PARAMETER::a=10, b=1e-5, c=0.1, d=10, e=0.1, dt=0.001 INTEGER, PARAMETER:: dim=10000 REAL, DIMENSION(dim)::x=0, d_x=0, y=0, d_y=0, x_prime, y_prime=0, t=0,t_prime CHARACTER (len=30)::name1="xvt", name2="yvt", name3="yvx" WRITE(*,*)"Input initial x" READ(*,*)initial_x WRITE(*,*)"Input initial y" READ(*,*)initial_y x(1)=initial_x y(1)=initial_y DO i=1, dim-1 x_prime(i)=x(i)+0.5*(a-b*x(i)-c*y(i))*x(i)*dt y_prime(i)=y(i)+0.5*(-d+e*x(i))*y(i)*dt t_prime(i)=t(i)+0.5*dt x(i+1)=x(i)+(a-b*x_prime(i)-c*y_prime(i))*x_prime(i)*dt y(i+1)=y(i)+(-d+e*x_prime(i))*y_prime(i)*dt t(i+1)=t(i)+dt END DOCALL writeresults (t, x, name1, dim)CALL writeresults (t, y, name2, dim)CALL writeresults (x, y, name3, dim)END PROGRAM ecology

Write Results Subroutine

SUBROUTINE writeresults(x, y, name, n) INTEGER, INTENT(IN)::n REAL,INTENT(IN), DIMENSION(n)::x, y CHARACTER (len=30), INTENT(IN)::name INTEGER::i, status OPEN (UNIT=23, FILE=name, STATUS='REPLACE', ACTION='WRITE', IOSTAT=status) IF ( status == 0 ) THEN DO i=1,n WRITE(23, 110, IOSTAT=status) x(i), y(i)110 FORMAT(F20.13, 5X, F20.13) END DO ELSE WRITE(*,*) "ERROR occured creating file" RETURNEND IFCLOSE (UNIT=23)END SUBROUTINE writeresults

Page 10: Lean Palma Ps130 Finals
Page 11: Lean Palma Ps130 Finals
Page 12: Lean Palma Ps130 Finals
Page 13: Lean Palma Ps130 Finals
Page 14: Lean Palma Ps130 Finals