由买买提看人间百态

topics

全部话题 - 话题: enddo
(共0页)
gw
发帖数: 2175
1
有一段大概这样的Fortran code,
subroutine A

Part B
do i=1,N1

Part C1
enddo
do i=1,N2

Part C2
enddo
contains

function d1

subrounine e1
endsubroutine A
这里面 part B, C1, C2都用到了contains里的functions and subroutines.其中C1和
C2是一段比较长的代码,并且有很大的相似性,但功能有一点不同。直接这样写,看着
这个程序总有点别扭,因为C1,C2两大段总让人有重复的感觉。于是想写一个新的
subroutine C来取代这两部分,使整个程序变成这样的。
subroutine A

Part B
do i=1,N1

call C(1)
enddo
do i=1,N2

call C(2)
enddo
contains

function d1

su
k******y
发帖数: 1407
2
写出的文件是*.dat 具有下面的格式:
4 200 300 11
1.1
1.2
1.3
1.4
………………
**********************************************
write(51,*)tnx,tny,tnz,nt
do k=1,tnz
do j=1,tny
do i=1,tnx
write(51,*)mat1001(i,j,k,t)
enddo
enddo
enddo
enddo
**********************************************
因为一直是用Mac下的DataTank作图,请问一下要是使用Windows下的TecPlot对于上述
的格式的dat文件应该怎么读入呢?
到处找资料都有些晕头了,希望能有人回答一下,谢谢!!!
s*********e
发帖数: 97
3
Anyone knows any sample fortran routine for coordinate transformation?
I would like do such a calculation for stresses ans strains:
[C]=[A][B][A]^T
Any tips are thankful.
I already know the matrix calulation fortran flow for A= B*C like:
do i=1,3
do j=1,3
A(i,j)=0.0
do k=1,3
A(i,j)=B(i,k)*C(k,j)+A(i,j)
enddo
enddo
enddo
Someone told me to use lapack library, I think it may be a simpler
solution like above...
h********r
发帖数: 821
4
近来看比较大的程序,因为缩进做得很不好,让我对那些遥相呼应的if endif,do
enddo不胜其烦。是否有某种编程工具可以自动找到这种if endif,do enddo对?
本人用fortran编程,但是我想所有编程语言工具是类似的。
那位大侠知道请指点一二,不胜感激!
a******s
发帖数: 232
5
来自主题: Computation版 - a question about data transfer in MPI
就是阿,这个语法错我总觉得是最低级的错,又不是啥大程序,有时候不好定位,
这个程序,多看几眼就出来了,我就不说了。
fortran77只是个规范,不会变的,但是现在我相信所有的编译器都支持
do..enddo,但是也不说明fortran77支持。如果你用ifc7.1的话,如果
用do 10 ...10 continue的话,编译时候不带-w的话,还提示语法过时呢,
现在ifort都给省了,编译缺省级别不同了。
有时候还是do 10这样好,看着清晰,要不enddo太多了,分不清end是哪儿个do了。:)
d*****9
发帖数: 70
6
来自主题: CS版 - 谁能猜出这个数列???
就是说输入 i,循环三次
do i=?, ?, ?

enddo
当输入0的 时候,输出3,2,1
当输入1输出0,3,2
当输入2输出1,0,3
当输入3输出2,1,0
K*****n
发帖数: 23
7
character (len=100) :: fname, fmtstr= '(A,I??,A)'
integer :: ndig
do i = 1, 1460
ndig = int(log(dble(i)))+1
write(fmtstr(5:6),'(I2)') ndig
!
write(fname, fmtstr) 'xx',i, 'xxx'
!
open(10, file=fname,action='read')
....
close(10)
enddo
在 moontrees (moonovertrees) 的大作中提到: 】
s**l
发帖数: 30
8
Can it be more specified?
like an example which is tested. Thanks.
I tested the following
Fortran part:
program test
real B(1)
call fsub(B)
end
subroutine fsub(B)
real B(1)
do i=1,10
B(i)=i*1.
write(6,*) B(i)
enddo
end
C part:
#include
#include
void aaa( )
{
float * B;
B=(float *)malloc(10*sizeof(float));
fsub_(B);
}
But it says segmentation fault.....
p*****g
发帖数: 530
9
来自主题: Actuary版 - 老问题, 几门算overqualify?
DO WHILE (# OF SOA EXAM PASSED < 1 )
PASS ANY SOA PRELIMINARY EXAM
ENDDO
IF ( !GOOD ENGLISH COMMUNICATION || !GOOD PERSONALITY)
IMPROVE IT
ELSE
NETWORKING or PRACITCE INTERVIEW or PASS SOA EXAMS
ENDIF
a*******x
发帖数: 47
10
来自主题: Computation版 - <>全书下载
看了上面的贴子, 说说我的理解:
之所以FORTRAN比C/C++快, 一个重要的原因是FORTRAN标准规定子程序的参数之间不
允许有重叠的部分, 这样的话常常可疑保证计算结果于执行顺序无关, 从而使编译器
能够最大限度的优化:
比如以下的例子
SUBROUTINE ADD(N,A, B,C)
DIMENSION A(N),B(N),C(N)
DO I = 1, N
C(I) = A(I) +B(I)
ENDDO
END
由于A B C之间不允许有重叠,计算结果与执行顺序无关, 所以编译器可以进行
LOOP UNROLLING等优化.
而同样的C/C++程序, 如果不特别加上某些编译器开关的话, 就无法同样优化.因为
C允许参变量有重叠.
y***r
发帖数: 1845
11
来自主题: Computation版 - Fortran 77 dynamic memory allocation 1
这个是使用cray pointer的方法,很简单啊。
INTEGER*8 MALLOC
EXTERNAL MALLOC
INTEGER WORK(10)
POINTER (P, WORK)
C
READ(*,*) N
P = MALLOC(N*4)
DO I=1,N
WORK(I) = I
ENDDO
C
CALL FREE(P)
END
c*******n
发帖数: 1648
12
来自主题: Computation版 - 关于文件输出,请教大家?
FILENAME = 'char01'
DO I = 1, 10
J = 10+II
WRITE(FILENAME(5:6),I2.2) I
OPEN(UNIT=J,FILE=FILENAME)
ENDDO
result:
char01
char02
....
h***o
发帖数: 539
13
来自主题: Computation版 - 问个Fortran字符串操作的问题
integer function strlen(str)
integer i
character str*(*)
i = len(str)
do while (str(i:i) .eq. ' ')
i = i - 1
enddo
strlen = i
return
end
fortran is really awkward...
w**t
发帖数: 1068
14
来自主题: Computation版 - MPI_send 使用求助
程序用fortran写的。我想把t传给其他cpu,下面的程序哪里错了?我实现不了传递。
谢谢大侠帮助!
real(8) t
main_pc=0
if (rank .eq. main_pc) then
do dest=1, size-1
call MPI_SEND(t, 1, MPI_REAL, dest, 0, MPI_COMM_WORLD, err)
enddo
else
call MPI_RECV(t, 1, MPI_REAL, 0, 0, MPI_COMM_WORLD, status, err)
endif
g****y
发帖数: 199
15
☆─────────────────────────────────────☆
yunatidus (为了美好生活) 于 (Mon Sep 10 21:52:20 2007) 提到:
文件名未定,希望用一个字符串向量设置。
比如:
namearray=[name1,name2,name3,name4......]
do i=1,n
open (unit=1, file=namerarry(i),status='replace')
enddo
但是用什么方式设置才能实现这样的想法呢?
谢谢
☆─────────────────────────────────────☆
longtian (戒网中...) 于 (Mon Sep 10 22:10:21 2007) 提到:
你说的用字符串的方法,我也想过,实现比价麻烦
我现在用的简单方法是把names全部写在一个文件里边,比如namearray
name1
name2
name3
然后每次写文件的时候读namearray文件就行了

☆─────────────────────────────────────☆
yu
l*******G
发帖数: 1191
16
来自主题: Computation版 - fortran90 奇怪的格式问题
对于自己定义的数据(结构)的成员打印格式居然出问题。有兴趣的看一下为何主程序
最后两行打印结果不一样?gfortran and ifort give same results on linux.
=====save to test.f90, and then "ifort test.f90" and then "./a.out" to run=====
module numz
integer, parameter:: b8 = selected_real_kind(14)
integer,allocatable :: a_gene(:),many_genes(:,:)
end module
module galapagos
use numz
... 阅读全帖
l*******G
发帖数: 1191
17
来自主题: Computation版 - fortran90 奇怪的格式问题
对于自己定义的数据(结构)的成员打印格式居然出问题。有兴趣的看一下为何主程序
最后两行打印结果不一样?gfortran and ifort give same results on linux.
=====save to test.f90, and then "ifort test.f90" and then "./a.out" to run=====
module numz
integer, parameter:: b8 = selected_real_kind(14)
integer,allocatable :: a_gene(:),many_genes(:,:)
end module
module galapagos
use numz
... 阅读全帖
a***n
发帖数: 53
18
来自主题: ME版 - 问个Ansys的问题
using APDL. The APDL file should look like the following.
/post1
*cfopen,nodetemp,txt
*get,nnode,node,,num,count
nn=0
*do,i,1,nnode,1
nn=nnext(nn)
*get,tempatnode,node,nn,temp
*vwrite,nn,tempatnode
(f9.0,tl1,' ',f9.3)
*enddo
*cfclose
(共0页)