Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran 是否将循环参数视为非数字字符_Fortran_Mex - Fatal编程技术网

Fortran 是否将循环参数视为非数字字符

Fortran 是否将循环参数视为非数字字符,fortran,mex,Fortran,Mex,我是Fortran的新手,在Do循环中遇到问题。我正在为要在Matlab中使用的MEX文件编写Fortran代码。 我想它对k和z的定义有问题,但我不明白为什么。也许你们能告诉我我做错了什么。多谢各位 错误消息和代码 内循环 Dok=1,4 1. 错误:位于(1)的语句标签中的非数字字符 内循环 Dok=1,4 1. 错误:位于(1)的不可分类语句 内循环 do z=1,25 1. 错误:位于(1)的语句标签中的非数字字符 内循环 do z=1,25 错误:位于(1)的不可分类语句 通过使用.F

我是Fortran的新手,在Do循环中遇到问题。我正在为要在Matlab中使用的MEX文件编写Fortran代码。 我想它对k和z的定义有问题,但我不明白为什么。也许你们能告诉我我做错了什么。多谢各位

错误消息和代码 内循环 Dok=1,4
1. 错误:位于(1)的语句标签中的非数字字符 内循环 Dok=1,4
1. 错误:位于(1)的不可分类语句 内循环 do z=1,25
1. 错误:位于(1)的语句标签中的非数字字符 内循环 do z=1,25
错误:位于(1)的不可分类语句


通过使用.F后缀,编译器默认假定您使用的是固定格式的源代码。在固定格式中,某些列保留用于特殊目的。在这里,您的“do”似乎被错误地放在为语句标签保留的列中(第1列到第5列)。在固定格式的fortran文件中,语句必须介于第7列和第72列之间。这就是编译器所抱怨的。正如其他人提到的,您的代码还包含其他需要修复的错误


为了简化操作,您可以使用自由格式,将后缀改为.f90,并将“C”注释指示符替换为“!”

通过使用.F后缀,编译器默认假定您使用的是固定格式的源代码。在固定格式中,某些列保留用于特殊目的。在这里,您的“do”似乎被错误地放在为语句标签保留的列中(第1列到第5列)。在固定格式的fortran文件中,语句必须介于第7列和第72列之间。这就是编译器所抱怨的。正如其他人提到的,您的代码还包含其他需要修复的错误


为了简化操作,您可以使用自由格式,将后缀改为.f90,并将“C”注释指示符替换为“!”

通过使用.F后缀,编译器默认假定您使用的是固定格式的源代码。在固定格式中,某些列保留用于特殊目的。在这里,您的“do”似乎被错误地放在为语句标签保留的列中(第1列到第5列)。在固定格式的fortran文件中,语句必须介于第7列和第72列之间。这就是编译器所抱怨的。正如其他人提到的,您的代码还包含其他需要修复的错误


为了简化操作,您可以使用自由格式,将后缀改为.f90,并将“C”注释指示符替换为“!”

通过使用.F后缀,编译器默认假定您使用的是固定格式的源代码。在固定格式中,某些列保留用于特殊目的。在这里,您的“do”似乎被错误地放在为语句标签保留的列中(第1列到第5列)。在固定格式的fortran文件中,语句必须介于第7列和第72列之间。这就是编译器所抱怨的。正如其他人提到的,您的代码还包含其他需要修复的错误


为了简化操作,您可以使用自由格式,将后缀改为.f90,并将“C”注释指示符替换为“!”

看起来您缺少
do k=1,4
的“end do”。是的。您可能希望使用
end do
而不是
continue
语句。然后删除
return
语句后面的
end do
——它是不可访问的。缩进将使代码更具可读性。这不是错误的原因,但请注意整数除法1/4的结果为零。最好是1/4。。由于您是新手,我强烈建议您离开FORTRAN 77并使用FORTRAN 90+。它有很多有用的功能,你很快就会爱上它。其中一个明显的例子是
隐式none
,一旦你开始编写一个中等大小(可能大于300行)的程序,你就会意识到它的威力。正如朱所说,你本来会更安全。看起来你在
do k=1,4
中缺少了一个“end do”。是的。您可能希望使用
end do
而不是
continue
语句。然后删除
return
语句后面的
end do
——它是不可访问的。缩进将使代码更具可读性。这不是错误的原因,但请注意整数除法1/4的结果为零。最好是1/4。。由于您是新手,我强烈建议您离开FORTRAN 77并使用FORTRAN 90+。它有很多有用的功能,你很快就会爱上它。其中一个明显的例子是
隐式none
,一旦你开始编写一个中等大小(可能大于300行)的程序,你就会意识到它的威力。正如朱所说,你本来会更安全。看起来你在
do k=1,4
中缺少了一个“end do”。是的。您可能希望使用
end do
而不是
continue
语句。然后删除
return
语句后面的
end do
——它是不可访问的。缩进将使代码更具可读性。这不是错误的原因,但请注意整数除法1/4的结果为零。最好是1/4。。由于您是新手,我强烈建议您离开FORTRAN 77并使用FORTRAN 90+。它有很多有用的功能,你很快就会爱上它。其中一个明显的例子是
隐式none
,一旦你开始编写一个中等大小(可能大于300行)的程序,你就会意识到它的威力。正如朱所说,你本来会更安全。看起来你在
do k=1,4
中缺少了一个“end do”。是的。您可能希望使用
end do
而不是
continue
语句。然后删除
return
语句后面的
end do
——它是不可访问的。缩进将使您的代码
C     Computational routine
subroutine innerloops(J,c1,c2,c3,c4,n1,n2,n3,n4,y,m,n)
mwSize m, n
integer k, z
real*8 J(m,n), y(4,1), c1, c2, c3, c4, n1, n2, n3, n4
real*8 QuadRuleX(25,2)
real*8 QuadRuleW(25,1)
real*8 X(5,1), r, t
real*8 P, c_h, n_h
integer h = 10 

C     Gaussian Points
X(1) = -.906179
X(2) = -.538469
X(3) = 0
X(4) = .538469
X(5) = .906179

C     Corresponding QuadRule points
QuadRuleX(1,1) = X(1)
QuadRuleX(1,2) = X(1)
C .... (snipped it here for readability)

C Corresponding weights
QuadRuleW(1) = Y(1)*Y(1)
QuadRuleW(2) = Y(2)*Y(1)
C .... (snipped it here for readability)

do k = 1, 4           
do z = 1, 25
r = QuadRuleX(z,1)
t = QuadRuleX(z,2)
P = shape(k,r,t)
c_h = c1*shape(k,r,t)
n_h = n1*shape(k,r,t)
y(k,1) = (P*((((h-1)*c_h)/(h-1)*c_h+1))*n_h*(2-n_h)-n_h)
continue
continue
return
end do
end subroutine innerloops

C defining the shape functions
Function shape(q,c,d)
implicit none
real q,c,d,P 
if (q == 1) then
P = 1/4*(c-1)*(d-1)
else if (q == 2) then
P = -1/4*(c+1)*(d-1)
else if (q == 3) then
P = 1/4*(c+1)*(d+1) 
else if (q == 4) then
P = -1/4*(c-1)*(d+1)
endif
return
end Function shape