标签: fortran

Fortran类型转换

我有以下命令来设置我的数组

Use, Intrinsic :: iso_fortran_env
Integer (Int8), Allocatable :: iu(:)

Allocate (iu(4))
iu = [4,3,2,1]
Run Code Online (Sandbox Code Playgroud)

我怎么能阻止编译器给我

Allocate (iu(4));  iu = [4,3,2,1]
                       1
Warning: Possible change of value in conversion 
from INTEGER(4) to INTEGER(1) at (1) [-Wconversion]
Run Code Online (Sandbox Code Playgroud)

arrays fortran converter

0
推荐指数
1
解决办法
170
查看次数

双精度值的精度错误

我需要将Fortran代码转换为C++代码,我有以下问题:

我正在尝试计算一个R12用Fortran 77和C++语言命名的double值,但是我获得了两个彼此非常接近的值但具有两个不同的精度.这是我的Fortran代码:

R12 = sqrt(95699.68D0+1123.6D0*flx) - 408.99D0
Run Code Online (Sandbox Code Playgroud)

double flx = 192.9D0.我获得的价值是R12 = 149.97522253177789

我用C++做同样的事情:

R12 = sqrt(95699.68+1123.6*flx) - 408.99 ; 
Run Code Online (Sandbox Code Playgroud)

我在这里获得的价值是R12 = 149.97522253177794.

你们能帮助我找到这种差异的来源,因为对我的工作来说,确保精确度非常重要

c++ double fortran fortran77

0
推荐指数
1
解决办法
178
查看次数

在fortran中使用带有矩阵的IF语句

我想通过矩阵并检查它的任何块是否与预定义单位相同.这是我的代码.'sd5'是2乘2的预定义单位.

ALLOCATE (fList((n-1)**2,3))
fList = 0
p = 1
DO i = 1, n-1, 1
  DO j = 1, n-1, 1
    IF (TEST(i:i+1, j:j+1) == sd5) THEN
      fList(p,1:3) = (i, j+1, 101) ! 101 should be replaced by submatrix number
  END IF
  p = p+1
  END DO
END DO
Run Code Online (Sandbox Code Playgroud)

问题似乎在IF声明中,因为返回了四个逻辑语句TEST(i:i+1, j:j+1) == sd5.我收到此错误:

Error: IF clause at (1) requires a scalar LOGICAL expression
Run Code Online (Sandbox Code Playgroud)

我收到另一个错误:

fList(p,1:3) = (i, j+1, 101) ! 101 should be replaced by sub …
Run Code Online (Sandbox Code Playgroud)

fortran matrix

0
推荐指数
1
解决办法
171
查看次数

现代Fortran中的整数精度

selected_int_kind(int16)显示为1而不是2.这是编译器错误吗?

在下面的输出中请注意其差异bint是2个字节,INT16.(为清楚起见,添加了注释<===.)

compiler version  = GCC version 5.1.0
compiler options  = -fPIC -mmacosx-version-min=10.9.4 -mtune=core2 -Og -Wall -Wextra -Wconversion -Wpedantic -fcheck=bounds -fmax-errors=5
execution command = ./a.out

Number of bytes in type default = 4
Number of bytes in type int_8 = 1
Number of bytes in type int_16 = 2         <===
Number of bytes in type int_32 = 4
Number of bytes in type int_64 = 8
Number of bytes in type int_a = 1 …
Run Code Online (Sandbox Code Playgroud)

iso fortran long-integer

0
推荐指数
1
解决办法
664
查看次数

如何与gfortran一起编译f77和f90文件

我有几十个f77函数的文件,我想将它们包含在我的f90程序中.我如何与gfortran一起带来它?如果我只是尝试

gfortran myprogram.f90
Run Code Online (Sandbox Code Playgroud)

它抱怨其他文件中的f77代码.据我所知,它希望看到所有文件都符合明确的标准(f90的f77).

fortran gfortran fortran77 fortran90

0
推荐指数
1
解决办法
1614
查看次数

Fortran:在读取未知大小的文件时如何分配数组?

我对Fortran的典型使用始于读取未知大小的文件(通常为5-100MB).我目前的数组分配方法涉及读取文件两次.首先确定问题的大小(分配数组),然后第二次将数据读入这些数组.

是否有更好的尺寸确定/阵列分配方法?我刚刚阅读了另一篇文章中的自动数组分配(例如下面的例子),这看起来更容易.

array = [array,new_data]
Run Code Online (Sandbox Code Playgroud)

有哪些选择及其优缺点?

arrays fortran dynamic-arrays

0
推荐指数
1
解决办法
428
查看次数

FORTRAN中的DIMENSION语句

我正在将FORTRAN代码转换为C++.在理解FORTRAN代码的同时,我在FORTRAN中遇到了以下代码片段.

DIMENSION X(50),Y(50),PARA(6,9)                                      
DIMENSION AMPA(12),FCUR(20),VER(20),AMPS(20) 
Run Code Online (Sandbox Code Playgroud)

据我所知,DIMENSION在FORTRAN中不需要任何数据类型.但是我无法理解X,Y,PARA等的默认数据类型.默认情况下它是整数吗?

c++ fortran

0
推荐指数
1
解决办法
267
查看次数

Old fortran:Hollerith编辑Format语句的描述符语法

我正在尝试对旧代码进行现代化(或者至少让它更容易理解)但是我已经遇到了一个奇怪的格式,对于一个呃,FORMAT语句.

具体来说,它是一个FORMAT带有Hollerith常量的声明(nHwhere n是一个数字):

  FORMAT(15H  ((C(I,J),J=1,I3,12H),(D(J),J=1,I3, 6H),I=1,I3,')  te'        
 1,'xt'  ) 
Run Code Online (Sandbox Code Playgroud)

这与语法突出显示混淆,因为它看起来有未闭括号.它使用这种格式语句编译得很好,但是关闭括号会导致编译错误(使用intel或gfortran编译器).

据我了解,Hollerith常量是Fortran 66的一个生物,并且被CHARACTERFortran 77中的出现所取代.我通常在用作类似角色的东西时理解它们,但是用作FORMAT混淆我.

此外,如果我15H ((...改为15H ((...(即我删除一个空格),它将无法编译.事实上,即使我将代码更改为此代码,它也无法编译:

  FORMAT(15H  ((C(I,J),J=1,I3,12H),(D(J),J=1,I3, 6H),I=1,I3,')  text'  ) 
Run Code Online (Sandbox Code Playgroud)

我希望这是一个更正常(F77 +)格式.任何帮助表示赞赏.

fortran fortran77

0
推荐指数
1
解决办法
268
查看次数

FFT:fortran与python

我有fortran代码计算离散信号的FFT(具有两个不同频率的双正弦信号),从以下提取:

y = 0.5*np.sin(2 * np.pi * ff1 * t) + 0.1*np.sin(2 * np.pi * ff2 * t)

当我使用fortran代码计算FFT并且与使用python计算的FFT进行比较时,我可以看到:

1.两个图中的选秀权的差异是由于四舍五入?我可以以某种方式消除或减少它吗?

FFT python

python中使用的代码是:

import numpy as np
import matplotlib.pyplot as plt
from scipy import fft

Fs = 2048    # sampling rate = number of lines in the input file
Ts = 1.0/Fs  # sampling interval
data = np.loadtxt('input.dat')
t =  data[:,0]
y    = data[:,1]

plt.subplot(2,1,1)
plt.plot(t,y,'ro')
plt.xlabel('time')
plt.ylabel('amplitude')
plt.subplot(2,1,2)

n = len(y)                       # length of the signal
k = np.arange(n)
T …
Run Code Online (Sandbox Code Playgroud)

python fortran fft gfortran fortran90

0
推荐指数
1
解决办法
636
查看次数

与MPICH的nvprof

我正在尝试分析MPI/OpenACC Fortran代码.我找到了一个网站,详细说明如何在这里使用MPI运行nvprof .给出的示例适用于OpenMPI.但是,我仅限于MPICH,我无法弄清楚它的等价物.谁知道它会是什么?

fortran mpi openacc nvprof

0
推荐指数
1
解决办法
191
查看次数