私はFortranを全く新しくしていますが、入力テキストファイルを読み込み、Fortranコードを使って値の集合を計算し、それらを出力テキストファイルに変換します。プログラムがエラーを生成する、ケース4、8、11以外のすべてのケースのために働く:ファイルを読み書きしてFortranで.exeファイルを作成する
forrtl: severe (24): end-of-file during read, unit 5, file C:\temp\sharclab\i_capa.txt
Image PC Routine Line Source
Capacity.exe 0046B6EE Unknown Unknown Unknown
Capacity.exe 00468940 Unknown Unknown Unknown
Capacity.exe 00411C9A Unknown Unknown Unknown
Capacity.exe 004118C7 Unknown Unknown Unknown
Capacity.exe 0040C416 Unknown Unknown Unknown
Capacity.exe 0040BBDA Unknown Unknown Unknown
Capacity.exe 0040714C _MAIN__ 16 main.F90
Capacity.exe 0046EB78 Unknown Unknown Unknown
Capacity.exe 004528E0 Unknown Unknown Unknown
kernel32.dll 7C817067 Unknown Unknown Unknown
私は以下のコードを掲載しますし、誰も私は、私は非常に多く、それを感謝ありがとうなり、これを解決するのに役立つことができれば!
まずファイル(機能しないだけで、特定の部品):
Case (4)
DiamRoul = abs(DonneesRlt(1))
DiamPrim = abs(DonneesRlt(2))
NbRoul = abs(int(DonneesRlt(3)))
NbRangRoul = abs(int(DonneesRlt(4)))
LongEff = abs(DonneesRlt(5))
If ((NbRoul==0).OR.(DiamPrim==0)) Then
CodeErr = 1
else ! Calcul si nb corps roulants différent de zéro
Gamma = DiamRoul/DiamPrim
FC = 17.24553 * ((1 + (1.04 * ((1 - Gamma)/(1 + Gamma))
& ** P1) ** P3) ** P4) * (((Gamma ** P2) * (1 - Gamma)
& ** P5)/((1 + Gamma) ** P11))
ChargeDynSNR = FC * ((NbRangRoul * LongEff) ** P6)
& * (NbRoul ** P7) * (DiamRoul ** P5) * 1.1293
ChargeDynISO = FC * ((NbRangRoul * LongEff) ** P6)
& * (NbRoul ** P7) * (DiamRoul ** P5) * 1.1
ChargeStaSNR = 4.4 * (1 - Gamma) * NbRangRoul * NbRoul
& * LongEff * DiamRoul
ChargeStaISO = ChargeStaSNR
End If
Case (8)
DiamRoul = abs(DonneesRlt(1))
DiamPrim = abs(DonneesRlt(2))
NbRoul = abs(int(DonneesRlt(3)))
LongEff = abs(DonneesRlt(4))
If ((NbRoul==0).OR.(DiamPrim==0)) Then
CodeErr = 1
else ! Calcul si nb corps roulants différent de zéro
Gamma = DiamRoul/DiamPrim
FC = 34.48913 * 0.85 * (Gamma ** P2)
ChargeDynSNR = FC * (LongEff ** P6) * (NbRoul ** P7) *
& (DiamRoul ** P5) * 1
ChargeDynISO = ChargeDynSNR
ChargeStaSNR = 22 * (1 - Gamma) * NbRoul * LongEff
& * DiamRoul
ChargeStaISO = ChargeStaSNR
End If
Case (11)
DiamRoul = abs(DonneesRlt(1))
NbRoul = abs(int(DonneesRlt(2)))
LongEff = abs(DonneesRlt(3))
DiamPrim = abs(DonneesRlt(4))
AngleDeg = 45
AngleMin = 0
AngleSec = 0
NbRoul = abs(int(NbRoul/2))
NbRangRoul = 2
DiamSpher = 0
If (NbRoul==0) Then
CodeErr = 1
else ! Calcul si nb corps roulants différent de zéro
Alpha = pi * (AngleDeg + (AngleMin/60) + (AngleSec/
& 3600))/180
If (DiamPrim==0) Then
DiamPrim = (DiamSpher - DiamRoul) * DCos(Alpha)
End If
Gamma = (DiamRoul * DCos(Alpha))/DiamPrim
FC = 17.24553 * ((1 + (1.04 * ((1 - Gamma)/(1 + Gamma))
& ** P1) ** P3) ** P4) * (((Gamma ** P2) * (1 - Gamma)
& ** P5)/((1 + Gamma) ** P11))
ChargeDynSNR = FC * ((NbRangRoul * LongEff * DCos(Alpha))
& ** P6) * (NbRoul ** P7) * (DiamRoul ** P5) * 1.1
ChargeDynISO = ChargeDynSNR
ChargeStaSNR = 4.4 * (1 - Gamma) * NbRangRoul * NbRoul *
& LongEff * DiamRoul * DCos(Alpha)
ChargeStaISO = ChargeStaSNR
End If
End Select
! Arrondissement de toutes les charges calculées
if (ChargeDynSNR.LE.0) then
ChargeDynSNR = 0
ChargeDynSNRArr = 0
else
Call Arron(TypeRlt, ChargeDynSNR, CapaArr)
ChargeDynSNRArr = CapaArr
end if
if (ChargeDynISO.LE.0) then
ChargeDynISO = 0
ChargeDynISOArr = 0
else
Call Arron(TypeRlt, ChargeDynISO, CapaArr)
ChargeDynISOArr = CapaArr
end if
if (ChargeStaSNR.LE.0) then
ChargeStaSNR = 0
ChargeStaSNRArr = 0
else
Call Arron(TypeRlt, ChargeStaSNR, CapaArr)
ChargeStaSNRArr = CapaArr
end if
if (ChargeStaISO.LE.0) then
ChargeStaISO = 0
ChargeStaISOArr = 0
else
Call Arron(TypeRlt, ChargeStaISO, CapaArr)
ChargeStaISOArr = CapaArr
endif
! Toutes les charges calculées sont multipliées par 10.
Charges(1) = ChargeDynSNR * 10
Charges(2) = ChargeDynISO * 10
Charges(3) = ChargeStaSNR * 10
Charges(4) = ChargeStaISO * 10
ChargesArr(1) = ChargeDynSNRArr * 10
ChargesArr(2) = ChargeDynISOArr * 10
ChargesArr(3) = ChargeStaSNRArr * 10
ChargesArr(4) = ChargeStaISOArr * 10
return
END subroutine
セカンドファイル(main.f90の):コードがコピーされていない場合、私は謝罪
program main
implicit none
integer TypeRlt
! Entrees/Sorties
real*8 DonneesRlt(15)
! Sorties
integer CodeErr
real*8 Charges(4)
integer ChargesArr(4)
open (5, FILE='C:\temp\sharclab\i_capa.txt')
open (6, FILE='C:\temp\sharclab\o_capa.txt')
read(5,*) TypeRlt
read(5,*) DonneesRlt
write(*,*) TypeRlt
write(*,*) DonneesRlt
close(5)
!TypeRlt = 5
call Capacites(TypeRlt,DonneesRlt,Charges,ChargesArr,CodeErr)
write(6,*) ChargesArr(1)
write(6,*) ChargesArr(2)
write(6,*) ChargesArr(3)
write(6,*) ChargesArr(4)
close(6)
write(*,*) ChargesArr(1)
write(*,*) ChargesArr(2)
write(*,*) ChargesArr(3)
write(*,*) ChargesArr(4)
end
2つのテキストファイルは、値が存在しない場合(このFortranプログラムでは必須)、値の0の値が置かれる単純な値のリストです。
このプログラムは、別のケース(ここには掲載していません)で正しく機能します。私はこれらのケースで同じことをしない理由を理解していません。
返信いただきありがとうございますが、私は値を変更しようとしましたが、何も変更されていないようです。 – user2063
私の編集した回答を参照してください –
私はそれを把握することができたし、実際には、それをPythonで実行します。皆さんのお手伝いをいただきありがとうございます。実際にFortranを使っていないので、Fortranのことを理解するのに役立ちました! – user2063