⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 balle.f

📁 Fortran的数学物理方程数值算法源程序。这是"Numerical Methods for Physics"第二版的Fortran源程序
💻 F
字号:
! balle - Program to compute the trajectory of a baseball!         using the Euler method.      program balle      integer*4 MAXmaxStep      parameter( MAXmaxStep = 100000 )      integer*4 iStep, maxStep, i      real*8 y1, speed, theta, pi, airFlag, rho, Cd, area, grav, mass      real*8 air_const, tau, t, normV      real*8 r1(2), v1(2), r(2), v(2), accel(2)      real*8 xplot(MAXmaxStep), yplot(MAXmaxStep)      real*8 xNoAir(MAXmaxStep), yNoAir(MAXmaxStep)      !* Set initial position and velocity of the baseball      write(*,*) 'Enter initial height (meters): '      read(*,*) y1      r1(1) = 0      ! Initial vector position      r1(2) = y1      write(*,*) 'Enter initial speed (m/s): '      read(*,*) speed      write(*,*) 'Enter initial angle (degrees): '      read(*,*) theta      pi = 3.141592654      v1(1) = speed*cos(theta*pi/180)   ! Initial velocity (x)      v1(2) = speed*sin(theta*pi/180)   ! Initial velocity (y)      r(1) = r1(1)      r(2) = r1(2)      ! Set initial position and velocity      v(1) = v1(1)      v(2) = v1(2)      !* Set physical parameters (mass, Cd, etc.)      Cd = 0.35      ! Drag coefficient (dimensionless)      area = 4.3e-3  ! Cross-sectional area of projectile (m^2)      grav = 9.81    ! Gravitational acceleration (m/s^2)      mass = 0.145   ! Mass of projectile (kg)      write(*,*) 'Air resistance? (Yes:1, No:0): '      read(*,*) airFlag      if( airFlag .eq. 0 ) then        rho = 0      ! No air resistance      else        rho = 1.2    ! Density of air (kg/m^3)      endif      air_const = -0.5*Cd*rho*area/mass  ! Air resistance constant      !* Loop until ball hits ground or max steps completed      write(*,*) 'Enter timestep, tau (sec): '      read(*,*) tau      maxStep = 1000   ! Maximum number of steps      do iStep=1,maxStep        !* Record position (computed and theoretical) for plotting        xplot(iStep) = r(1)   ! Record trajectory for plot        yplot(iStep) = r(2)        t = (iStep-1)*tau        ! Current time        xNoAir(iStep) = r1(1) + v1(1)*t        yNoAir(iStep) = r1(2) + v1(2)*t - 0.5*grav*t**2        !* Calculate the acceleration of the ball        normV = sqrt( v(1)*v(1) + v(2)*v(2) )        accel(1) = air_const*normV*v(1)    ! Air resistance        accel(2) = air_const*normV*v(2)    ! Air resistance        accel(2) = accel(2) - grav         ! Gravity        !* Calculate the new position and velocity using Euler method        r(1) = r(1) + tau*v(1)             ! Euler step        r(2) = r(2) + tau*v(2)        v(1) = v(1) + tau*accel(1)        v(2) = v(2) + tau*accel(2)        !* If ball reaches ground (y<0), break out of the loop        if( r(2) .lt. 0 ) then          xplot(iStep+1) = r(1)  ! Record last values computed          yplot(iStep+1) = r(2)          goto 100               ! Break out of the for loop        endif      enddo100   continue      !* Print maximum range and time of flight      write(*,*) 'Maximum range is ', r(1), ' meters'      write(*,*) 'Time of flight is ', iStep*tau, ' seconds'      !* Print out the plotting variables:      !    xplot, yplot, xNoAir, yNoAir      open(11,file='xplot.txt',status='unknown')      open(12,file='yplot.txt',status='unknown')      open(13,file='xNoAir.txt',status='unknown')      open(14,file='yNoAir.txt',status='unknown')      do i=1,iStep+1        write(11,*) xplot(i)        write(12,*) yplot(i)      enddo      do i=1,iStep        write(13,*) xNoAir(i)        write(14,*) yNoAir(i)      enddo      stop      end!***** To plot in MATLAB; use the script below ********************!load xplot.txt; load yplot.txt; load xNoAir.txt; load yNoAir.txt;!clf;  figure(gcf);   % Clear figure window and bring it forward!% Mark the location of the ground by a straight line!xground = [0 max(xNoAir)];  yground = [0 0];!% Plot the computed trajectory and parabolic, no-air curve!plot(xplot,yplot,'+',xNoAir,yNoAir,'-',xground,yground,'-');!legend('Euler method','Theory (No air)');!xlabel('Range (m)');  ylabel('Height (m)');!title('Projectile motion');!*****************************************************************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -