상세 컨텐츠

본문 제목

GNU Exterior Ballistics Computer

공학/FORTRAN

by 도서관경비원 2025. 12. 17. 14:43

본문

반응형

GNU Exterior Ballistics Computer v1.00
Created by:   Derek R. Yates
Released on:  February, 2008
Built using:  Mingw32 / GCC compiler

Note from the Creator:
GNU Exterior Ballistics Computer was created as an open-sourced alternative to the multitude of commercial ballistics computers. As an avid shooter, I have purchased several commercial packages over the years, but never found exactly what I wanted in any of them. I have created this program, and released it under the GNU GPL License in order to create what I am looking for in a program, and to give you a base on which to build and improve what I've started.  The unique features I have included are a multitude of data export features, making it easy to load your data into a variety of analysis software, from OpenOffice to Microsoft Excel, and also in Adobe PDF format.  Never before has so much ballistics information been available so freely.

This program was written in C++, and uses the excellent GNU Exterior ballistics library (which I wrote previously for personal use).  The solutions are based on the three degrees of freedom differential equations and solved numerically to get a very accurate solution. In general the range data is accurate to within 0.1 yards, and the drop data is accurate to within a fraction of an inch. Standard drag models from G1-G8 are supported making this program very flexible for advanced ballistics use.

The GUI was created using FLTK, to allow both Windows and Linux users to build the source.  PDF creation is done using the LibHaru library, which is highly recommended should you ever need a C++ library for PDF creation.

I hope you have as much fun using this program as I have had creating it, and wish you the best shooting.

 

GNU 외장 탄도 컴퓨터 v1.00
작성자: 데릭 R. 예이츠
출시일: 2008년 2월
다음을 사용하여 빌드됨: Mingw32 / GCC 컴파일러

개발자의 메모:
GNU 외탄도 컴퓨터는 다양한 상업용 탄도 컴퓨터에 대한 오픈 소스 대안으로 만들어졌습니다. 열렬한 슈팅 게임 애호가로서 저는 수년 동안 여러 상업용 패키지를 구매했지만, 그 중 어느 것도 제가 원하는 것을 정확히 찾지 못했습니다. 이 프로그램을 만들고 GNU GPL 라이선스 하에 출시하여 제가 원하는 프로그램을 만들고, 제가 시작한 프로그램을 구축하고 개선할 수 있는 기반을 제공하고자 합니다. 제가 포함한 독특한 기능은 다양한 데이터 내보내기 기능으로, OpenOffice부터 Microsoft Excel, Adobe PDF 형식에 이르기까지 다양한 분석 소프트웨어에 데이터를 쉽게 로드할 수 있게 해줍니다. 이렇게 많은 탄도 정보를 이렇게 자유롭게 이용할 수 있었던 적은 없었습니다.

이 프로그램은 C++로 작성되었으며, 개인 용도로 이전에 작성한 우수한 GNU 외탄도 라이브러리를 사용합니다. 이 솔루션들은 세 가지 자유도 미분 방정식을 기반으로 하며, 매우 정확한 솔루션을 얻기 위해 수치적으로 계산합니다. 일반적으로 범위 데이터는 0.1야드 이내로 정확하며, 드롭 데이터는 1인치 이내로 정확합니다. G1-G8의 표준 드래그 모델이 지원되므로 이 프로그램은 고급 탄도학 사용에 매우 유연합니다.

GUI는 Windows와 Linux 사용자 모두 소스를 빌드할 수 있도록 FLTK를 사용하여 만들어졌습니다. PDF 생성은 LibHaru 라이브러리를 사용하여 이루어지며, PDF 생성을 위해 C++ 라이브러리가 필요할 경우 강력히 권장됩니다.

이 프로그램을 제가 만든 것만큼 재미있게 사용하시길 바라며, 최고의 슈팅을 기원합니다.

 

GEBC Interface
Range Table
Quick Plot
Optimize PBR
gebc-1.07-i386-win32.zip
0.51MB

 

 

 

!
! BALLISTIC GNU BALLISTICS LIBRARY
!
! ORIGINALLY CREATED BY DEREK YATES
!
MODULE GLOBAL
    IMPLICIT NONE
    REAL,PARAMETER :: PI = 2.0*ASIN(1.0)
    REAL,PARAMETER :: RERTH = 0.000072921159        ! RAD/S
    REAL,PARAMETER :: GRAV = -32.17405              ! FT/S/S
    REAL :: PROCALI,PROWEIT,PROLENG,DRAGCOEF,VI
    REAL :: STAB,SHOTANGL,ZEROANGL
    REAL :: TEMP,ALT,PRES,RH,WINDANGL,WINDSPED,LAT,AZIM
    REAL :: SIGTHEGT,TWIST,MUZLVEL,ZERORANG
    INTEGER :: DRAGFUNC
    REAL,DIMENSION(10000) :: RANGVALU,DROPVALU,DROPMOA,ENGYVALU
    REAL,DIMENSION(10000) :: VEL,VELX,VELY
    REAL,DIMENSION(10000) :: WINDVALU,WINDMOA,TIME
END MODULE GLOBAL

PROGRAM BALLISTICS
    USE GLOBAL
    CHARACTER(LEN=100) :: BULLET
    REAL :: V, VX, VY, VX1, VY1, DV, DVX, DVY, X, Y
    REAL :: WIND, HEADWIND, CROSWIND, GX, GY, T, DT
    INTEGER :: N,STEP,IATMOS,ISPIN,ITWST,ICORIOLI
    OPEN (UNIT=6,FILE='RESULTS.OUT')
    !
    BULLET='308 WIN MATCH, 168GR SIERRA MATCH KING'
    !
    DRAGCOEF=0.465      ! DRAG COEFFICIENT OF PROJECTILE
    PROWEIT=168         ! PROJECTILE WEIGHT (GRAIN)
    PROCALI=0.308       ! PROJECTILE DIAMETER (IN)    
    MUZLVEL=2650.0      ! MUZZLE INITIAL VELOCITY (FT/S)
    SIGTHEGT=1.6        ! SIGHT HEIGHT (IN)
    SHOTANGL=0.0        ! SHOOTING ANGLE (DEG)
    ZERORANG=200        ! ZERO RANGE (YDS)
    WINDSPED=0.0        ! WIND VELOCITY (MI/HR)
    WINDANGL=0.0        ! WIND ANGLE (0~360 DEG)
    !
    ALT=0.0             ! ALTITUDE (FT)
    TEMP=59.0           ! TEMPERATURE (F)
    PRES=29.53          ! PRESSURE (IN HG)
    REHU=78             ! RELATIVE HUMIDITY (%)
    !
    LAT=24.5            ! SHOOT LATITUDE (DEG)
    AZIM=0.0            ! SHOOT DIRECTION (DEG) (N=0,E=90,S=180,W=270)
    PROLENG=1.236       ! BULLET LENGTH (IN)
    TWIST=7*25.4        ! BARREL TWIST (IN)
    !
    RMIN=0              ! RANGE (YARD)
    RMAX=1000           ! RANGE (YARD)
    STEP=10             ! STEP (YARD)
    !
    DRAGFUNC=1          ! DRAG FUNCTION
    IATMOS=0            ! ATMOSPHERIC CORRECTION
    ISPIN=0             ! SPIN DRIFT(0:EXCLUDE,1:INCLUDE)
    ITWST=0             ! SPIN DIRECTION(0:RIGHT,1:LEFT)
    ICORIOLI=0          ! CORIOLI CORRECTION
    ! ******************************************************************
    WRITE(6,*) BULLET
    WRITE(6,"(/'DRAG COEFFICIENT:    ',F10.3)") DRAGCOEF
    WRITE(6,"('PROJECTILE WEIGHT:   ',F10.3,' GRAINS')") PROWEIT
    WRITE(6,"('INITIAL VELOCITY:    ',F10.3,' (FT/S)')") MUZLVEL
    WRITE(6,"('ZERO RANGE:          ',F10.3,' (YARDS)')") ZERORANG
    WRITE(6,"('SHOOTING ANGLE:      ',F10.3,' (DEGREES)')") SHOTANGL
    WRITE(6,"('WIND VELOCITY:       ',F10.3,' (MPH)')") WINDSPED
    WRITE(6,"('WIND DIRECTION:      ',F10.3,' (DEGREES)')") WINDANGL
    WRITE(6,"('ALTITUDE:            ',F10.3,' (FEET)')") ALT
    WRITE(6,"('PRESSURE:            ',F10.3,' (IN-HG)')") PRES
    WRITE(6,"('TEMPERATURE:         ',F10.3,' (F)')") TEMP
    WRITE(6,"('RELATIVE HUMIDITY:   ',F10.3,' (%)'/)") REHU
    ! ******************************************************************
    ! 
    ! SOLVE
    !
    ! ******************************************************************
    !
    ! ATMOSPHERIC CORRECTION
    !
    ! ******************************************************************
    ! THE COEFFICIENT OF DRAG FOR THE PROJECTILE.
    ! DRAGCOEF AT VACCUM = 0.0
    ! ABSOLUTE ZERO : 0 K = -273.15 C = -459.67 F
    ! ALTITUDE TEMPERATURE(F DEG.) FACTOR 0.0036 F DEG./FT
    ! STANDARD TEMPERATURE +15.0 C DEG. = +59.0 F DEG.
    ! RELATIVE HUMIDITY RISES WHEN THE TEMPERATURE DROPS.
    ! STANDARD HUMIDITY : 0 %
    ! THE PRESSURE IN INCHES OF MERCURY (IN HG).
    ! THIS IS NOT "ABSOLUTE" PRESSURE, IT IS THE 'STANDARDIZED' PRESSURE 
    ! REPORTED IN THE PAPERS AND NEWS.
    ! STANDARD PRESSURE 29.921 IN-HG
    ! ******************************************************************
    IF (IATMOS==1) THEN
        FA=1.0/(-4E-15*(ALT**3)+4E-10*(ALT**2)-3E-5*ALT+1)
        TSTD=-0.0036*ALT+59.0
        FT=(TEMP-TSTD)/(459.67+TSTD)
        VPW=4E-6*TEMP**3-0.0004*TEMP**2+0.0234*TEMP-0.2517
        FR=0.995*(PRES/(PRES-(0.3783)*(RH)*VPW))
        PSTD=29.921
        FP=(PRES-PSTD)/(PSTD)
        CF=(FA*(1+FT-FP)*FR)
        DRAGCOEF=DRAGCOEF*CF
    END IF
    WRITE(6,"('DRAG COEFFICIENT AT THE ALTITUDE:    ',F10.3/)") DRAGCOEF
    ! ******************************************************************
    ! ZERO ANGLE
    ! ******************************************************************
    VI=MUZLVEL
    DT=1/VI         ! S/FT
    ANGLE=0.0
    DA=14.0*PI/180  ! RAD
    T=0.0
    DO
        VY=VI*SIN(ANGLE)
        VX=VI*COS(ANGLE)
        GX=GRAV*SIN(ANGLE)
        GY=GRAV*COS(ANGLE)
        X=0.0
        Y=-SIGTHEGT/12
        DO 
            T=T+DT
            VY1=VY
            VX1=VX
            V=SQRT((VX**2)+(VY**2))
            DT=1/V
            DV=RETARD(DRAGFUNC,DRAGCOEF,V)
            DVY=-DV*VY/V*DT
            DVX=-DV*VX/V*DT
            VX=VX+DVX
            VY=VY+DVY
            VY=VY+DT*GY
            VX=VX+DT*GX
            X=X+DT*(VX+VX1)/2
            Y=Y+DT*(VY+VY1)/2
            IF (VY < 0 .AND. Y < 0) EXIT           
            IF (VY > 3*VX) EXIT
            IF (X > ZERORANG*3) EXIT
        END DO
        IF (Y > 0 .AND. DA > 0) DA=-DA/2
        IF (Y < 0 .AND. DA < 0) DA =-DA/2
        ANGLE=ANGLE+DA
        IF (ABS(DA) < (0.01/60*PI/180.0)) EXIT
        IF (ANGLE > (45*PI/180.0)) EXIT
    END DO
    ZEROANGL=ANGLE*180/PI
    ! ******************************************************************
    !
    ! OUTPUT
    !
    ! ******************************************************************
    WRITE(6,"('     RANGE      DROP        DROP    VELOCITY   &
    & ENERGY    WIND DRIFT    WINDAGE     TIME')") 
    WRITE(6,"('     (YARD)     (INCHES)    (MOA)   (FT/S)     &
    & (FT-LB)   (INCHES)      (MOA)       (S)')") 
    T=0.0
    DT=0.0
    V=0.0;VX=0.0;VY=0.0
    VX1=0.0;VY1=0.0
    DV=0.0;DVX=0.0;DVY=0.0
    X=0.0;Y=0.0
    ! HEAD WIND IS POSITIVE AT WIND ANGLE = 0
    WINDA=WINDA*(PI/180.0)
    HEADWIND = COS(WINDA) * WINDSPEED
    ! POSITIVE IS FROM SHOOTER'S RIGHT TO LEFT (WIND FROM 90 DEGREE)
    CROSWIND = SIN(WINDA) * WINDSPEED
    ! GRAVITATIONAL ACCELERATION
    GY=GRAV*COS((SHOTANGL+ZEROANGL)*PI/180.0)
    GX=GRAV*SIN((SHOTANGL+ZEROANGL)*PI/180.0)
    VX=VI*COS(ZEROANGL*PI/180.0)
    VY=VI*SIN(ZEROANGL*PI/180.0)
    ! THE HEIGHT OF THE SIGHTING SYSTEM (IN)
    Y=-SIGTHEGT/12
    !
    N=0
    I=1
    DO
        VX1=VX 
        VY1=VY
        V=SQRT(VX**2+VY**2)
        DT=0.5/V 
        DV=RETARD(DRAGFUNC,DRAGCOEF,V+HEADWIND)
        DVX=-(VX/V)*DV
        DVY=-(VY/V)*DV
        VX=VX+DT*DVX+DT*GX
        VY=VY+DT*DVY+DT*GY
        WIND=CROSWIND*17.6*((T+DT)-X/VI)
        DROP=Y*12                           ! IN
        ! SPIN DRIFT AND ADD TO WINDAGE
        STAB=(30.0*PROWEIT)/((TWIST/PROCALI)**2.0)*(PROCALI**3.0)*&
            & (PROLENG/PROCALI)*(1.0+(PROLENG/PROCALI)**2.0)  
        IF (MUZLVEL > 2800) THEN
            STAB=STAB*(MUZLVEL/2800)**(1.0/3.0)
        END IF
        STAB=STAB*(((TEMP+460)/519.0)*(29.92/PRES))
        IF (ISPIN==1) THEN
            SD=1.25*(STAB+1.2)*((T+DT)**1.83)
            IF (TWIST==0) THEN 
                WIND=WIND+SD
            ELSE
                WIND=WIND-SD
            END IF
        END IF
        ! CORIOLIS FORCE
        IF (ICORIOLI==1) THEN
            WIND=WIND+(RERTH*(X/3)*SIN(LAT*PI/180)*(T+DT)*12)
            DROP=DROP*(1-((2*RERTH*MUZLVEL)/GRAV)*COS(LAT*PI/180)*SIN(AZIM*PI/180))
        END IF
        ! 
        ! EXTERIOR BALLISTICS RESULTS
        !
        IF (X/3 >= N) THEN 
            RANGVALU(I)=X/3     ! YARD
            DROPVALU(I)=DROP    ! IN
            DROPMOA(I)=-ATAN(Y/X)*60*180/PI
            TIME(I)=T+DT
            WINDVALU(I)=WIND
            IF (X.NE.0) THEN 
                WINDMOA(I)=ATAN((WIND/12)/X)*60*180/PI
            END IF
            ENGYVALU(I)=(PROWEIT*V*V)/(2*225218.34)
            !
            VEL(I)=V 
            VELX(I)=VX 
            VELY(I)=VY
            WRITE(6,"(8(1X,1F10.3))") RANGVALU(I),DROPVALU(I), &
                DROPMOA(I),VEL(I),ENGYVALU(I),WINDVALU(I),WINDMOA(I), &
                TIME(I)
            IF (RANGVALU(I)>RMAX) THEN
                EXIT
            END IF
            N=N+STEP
            I=I+1
        END IF
        ! COMPUTE POSITION BASED ON AVERAGE VELOCITY.
        X=X+DT*(VX+VX1)/2
        Y=Y+DT*(VY+VY1)/2
        T=T+DT
        IF (ABS(VY) > ABS(3*VX)) THEN 
            EXIT
        END IF
    END DO
    CLOSE(UNIT=6)
END PROGRAM BALLISTICS

FUNCTION RETARD(DRAGFUNC,DRAGCOEF,VELOCITY)
    ! RETARD CORRECTS THE VELOCITY FOR BALLISTIC DRAG.
    INTEGER :: DRAGFUNC
    REAL :: RETARD,VP,A,M
    VP=VELOCITY
    A=-1.0          ! ACCELERATION
    M=-1.0          ! MASS
    SELECT CASE (DRAGFUNC)
        CASE (1)
        IF (VP > 4230) THEN
            A = 0.0001477404177730177;
            M = 1.9565
        ELSEIF (VP > 3680) THEN
            A = 0.00019203392687556139 
            M = 1.925
        ELSEIF (VP > 3450) THEN
            A = 0.00028947510268197461 
            M = 1.875
        ELSEIF (VP > 3295) THEN
            A = 0.00043499051111156362 
            M = 1.825
        ELSEIF (VP > 3130) THEN
            A = 0.00065204218718926618 
            M = 1.775
        ELSEIF (VP > 2960) THEN
            A = 0.00097480736940786959 
            M = 1.725
        ELSEIF (VP > 2830) THEN
            A = 0.0014537215601872859 
            M = 1.675
        ELSEIF (VP > 2680) THEN
            A = 0.0021628872029303761 
            M = 1.625
        ELSEIF (VP > 2460) THEN
            A = 0.0032095597831298811 
            M = 1.575
        ELSEIF (VP > 2225) THEN
            A = 0.0039043682186912492 
            M = 1.55
        ELSEIF (VP > 2015) THEN
            A = 0.0032229422712623359 
            M = 1.575
        ELSEIF (VP > 1890) THEN
            A = 0.0022033295422978091 
            M = 1.625
        ELSEIF (VP > 1810) THEN
            A = 0.0015110010288919039
            M = 1.675
        ELSEIF (VP > 1730) THEN
            A = 0.00086099575924682592 
            M = 1.75
        ELSEIF (VP > 1595) THEN
            A = 0.00040861467973051169 
            M = 1.85
        ELSEIF (VP > 1520) THEN
            A = 0.0001954473210037398 
            M = 1.95
        ELSEIF (VP > 1420) THEN
            A = 0.00005431896266462351 
            M = 2.125
        ELSEIF (VP > 1360) THEN
            A = 0.0000088477425816744163
            M = 2.375
        ELSEIF (VP > 1315) THEN
            A = 0.0000014569223287202981 
            M = 2.625
        ELSEIF (VP > 1280) THEN
            A = 0.00000024194851918955649 
            M = 2.875
        ELSEIF (VP > 1220) THEN
            A = 0.000000016579563210676119 
            M = 3.25
        ELSEIF (VP > 1185) THEN
            A = 0.00000000047454695371573713 
            M = 3.75
        ELSEIF (VP > 1150) THEN
            A = 0.000000000013797465900250881
            M = 4.25
        ELSEIF (VP > 1100) THEN
            A = 0.00000000000040701579611478821 
            M = 4.75
        ELSEIF (VP > 1060) THEN
            A = 0.000000000000029382369548473309 
            M = 5.125
        ELSEIF (VP > 1025) THEN
            A = 0.000000000000012285973707747459 
            M = 5.25
        ELSEIF (VP > 980) THEN
            A = 0.000000000000029169382641004953 
            M = 5.125
        ELSEIF (VP > 945) THEN
            A = 0.00000000000038550994248074508 
            M = 4.75
        ELSEIF (VP > 905) THEN
            A = 0.00000000001185097045689854 
            M = 4.25
        ELSEIF (VP > 860) THEN
            A = 0.00000000035661294709749512 
            M = 3.75
        ELSEIF (VP > 810) THEN
            A = 0.000000010455132639662721 
            M = 3.25
        ELSEIF (VP > 780) THEN
            A = 0.00000012911592008462161 
            M = 2.875
        ELSEIF (VP > 750) THEN
            A = 0.0000006824429329105383
            M = 2.625
        ELSEIF (VP > 700) THEN
            A = 0.000003569169672385163 
            M = 2.375
        ELSEIF (VP > 640) THEN
            A = 0.00001839015095899579 
            M = 2.125
        ELSEIF (VP > 600) THEN
            A = 0.0000571117468873424 
            M = 1.95
        ELSEIF (VP > 550) THEN
            A = 0.000092265570919734271 
            M = 1.875
        ELSEIF (VP > 250) THEN
            A = 0.000093379919571313886 
            M = 1.875
        ELSEIF (VP > 100) THEN
            A = 0.000072252473275904129 
            M = 1.925
        ELSEIF (VP > 65) THEN
            A = 0.00005792684957074546 
            M = 1.975
        ELSEIF (VP > 0) THEN
            A = 0.000052062141073205883 
            M = 2.0
        END IF
    CASE (2)
    IF (VP > 1674) THEN
        A = 0.0079470052136733 
        M = 1.36999902851493
    ELSEIF (VP > 1172) THEN
        A = 0.00100419763721974 
        M = 1.65392237010294
    ELSEIF (VP > 1060) THEN
        A = 7.15571228255369E-23 
        M = 7.91913562392361
    ELSEIF (VP > 949) THEN
        A = 0.000000000139589807205091 
        M = 3.81439537623717
    ELSEIF (VP > 670) THEN
        A = 0.000234364342818625 
        M = 1.71869536324748
    ELSEIF (VP > 335) THEN
        A = 0.000177962438921838 
        M = 1.76877550388679
    ELSEIF (VP > 0) THEN
        A = 0.0000518033561289704 
        M = 1.98160270524632
    END IF
    CASE (5)
    IF (VP > 1730) THEN
        A = 0.00724854775171929 
        M = 1.41538574492812
    ELSEIF (VP > 1228) THEN
        A = 0.0000350563361516117 
        M = 2.13077307854948
    ELSEIF (VP > 1116) THEN
        A = 0.000000000000184029481181151 
        M = 4.81927320350395
    ELSEIF (VP > 1004) THEN
        A = 1.34713064017409E-22 
        M = 7.8100555281422
    ELSEIF (VP > 837) THEN
        A = 0.000000103965974081168 
        M = 2.84204791809926
    ELSEIF (VP > 335) THEN
        A = 0.000109301593869823 
        M = 1.81096361579504
    ELSEIF (VP > 0) THEN
        A = 0.0000351963178524273 
        M = 2.00477856801111
    END IF
    CASE (6)
    IF (VP > 3236) THEN
        A = 0.0455384883480781 
        M = 1.15997674041274
    ELSEIF (VP > 2065) THEN
        A = 0.0716726184965377 
        M = 1.10704436538885
    ELSEIF (VP > 1311) THEN
        A = 0.00166676386084348 
        M = 1.60085100195952
    ELSEIF (VP > 1144) THEN
        A = 0.000000101482730119215 
        M = 2.9569674731838
    ELSEIF (VP > 1004) THEN
        A = 4.31542773103552E-18 
        M = 6.34106317069757
    ELSEIF (VP > 670) THEN
        A = 0.0000204835650496866 
        M = 2.11688446325998
    ELSEIF (VP > 0) THEN
        A = 0.0000750912466084823 
        M = 1.92031057847052
    END IF
    CASE (7)
    IF (VP > 4200) THEN
        A = 0.00000000129081656775919 
        M = 3.24121295355962
    ELSEIF (VP > 3000) THEN
        A = 0.0171422231434847 
        M = 1.27907168025204
    ELSEIF (VP > 1470) THEN
        A = 0.00233355948302505 
        M = 1.52693913274526
    ELSEIF (VP > 1260) THEN
        A = 0.000797592111627665 
        M = 1.67688974440324
    ELSEIF (VP > 1110) THEN
        A = 0.00000000000571086414289273 
        M = 4.3212826264889
    ELSEIF (VP > 960) THEN
        A = 3.02865108244904E-17 
        M = 5.99074203776707
    ELSEIF (VP > 670) THEN
        A = 0.00000752285155782535 
        M = 2.1738019851075
    ELSEIF (VP > 540) THEN
        A = 0.0000131766281225189 
        M = 2.08774690257991
    ELSEIF (VP > 0) THEN
        A = 0.0000134504843776525 
        M = 2.08702306738884
    END IF
    CASE (8)
    IF (VP > 3571) THEN
        A = 0.0112263766252305 
        M = 1.33207346655961
    ELSEIF (VP > 1841) THEN
        A = 0.0167252613732636 
        M = 1.28662041261785
    ELSEIF (VP > 1120) THEN
        A = 0.00220172456619625 
        M = 1.55636358091189
    ELSEIF (VP > 1088) THEN
        A = 0.00000000000000020538037167098 
        M = 5.80410776994789
    ELSEIF (VP > 976) THEN
        A = 0.00000000000592182174254121 
        M = 4.29275576134191
    ELSEIF (VP > 0) THEN
        A = 0.000043917343795117 
        M = 1.99978116283334
    END IF
    CASE (9)
        A = 0.0 
        M = 0.0
    END SELECT
    IF ((A.NE.-1).AND.(M.NE.-1).AND.(VP>0).AND.(VP<10000)) THEN
        RETARD=A*(VP**M)/DRAGCOEF
    END IF
END FUNCTION
반응형

관련글 더보기