vvt 发表于 2020-5-11 19:28 谢谢您!已经解决了 ![]() |
necrohan 发表于 2020-5-11 14:04 感谢!已经解决了! ![]() |
|
[Fortran] 查看源码 复制源码 SUBROUTINE UEXTERNALDB(LOP,LRESTART,TIME,DTIME,KSTEP,KINC)
C
INCLUDE 'ABA_PARAM.INC'
C
DIMENSION TIME(2)
C
integer, parameter :: n = 24
real :: SPZFS(n),QW(n),FS(n),TDL(n),BDL(n),LDL(n)
common SPZFS,QW,FS,TDL,BDL,LDL
integer :: i !计数器
if( LOP .eq. 0) then
C 读数据
open(107,file='D:\Desktop\read\weatherdata.csv',status='old')
do i=1,n
read(107,*) SPZFS(n),QW(n),FS(n),TDL(n),BDL(n),LDL(n)
end do
close(107)
end if
RETURN
END
SUBROUTINE DFLUX(FLUX,SOL,KSTEP,KINC,TIME,NOEL,NPT,COORDS,
1 JLTYP,TEMP,PRESS,SNAME)
C
INCLUDE 'ABA_PARAM.INC'
C
DIMENSION FLUX(2), TIME(2), COORDS(3)
CHARACTER*80 SNAME
integer, parameter :: n = 24
real :: SPZFS(n),QW(n),FS(n),TDL(n),BDL(n),LDL(n)
common SPZFS,QW,FS,TDL,BDL,LDL
IF (SNAME .EQ. 'ASSEMBLY_SURF-4') THEN
flux(1)=0.5*SPZFS(KINC+1)
END IF
RETURN
END |
cyzhang 发表于 2020-5-11 10:35 1. 没有program也可以使用module,并不影响。 2. module没有限制不能使用read操作。 3. 多个subroutine可以 use 同一个module,或者不同module,都可以。 4. module可以只用来共享数据,也可以执行读取操作。 |
|
read(107,*) SPZFS(n),QW(n),FS(n),TDL(n),BDL(n),LDL(n) 把这里的n都改成i。 |
vvt 发表于 2020-5-11 08:17 您好!我参考http://bbs.fcode.cn/thread-1878-1-2.html 这个帖子中fcode大神的回复写了如下的代码,希望实现subroutine中读取如2楼中所示的数据,在program中调用其第一列数据,但是运行后结果是 1.58329436E+32 ,不知问题出在哪里,您能否给指点一二? [Fortran] 查看源码 复制源码 Module var_mod
integer, parameter ::n = 24
real SPZFS(n),QW(n),FS(n),TDL(n),BDL(n),LDL(n)
End Module var_mod
subroutine test
use var_mod
implicit none
integer ::i
open(107,file='D:\Desktop\read\weatherdata.csv',status='old')
do i=1,n
read(107,*) SPZFS(i),QW(i),FS(i),TDL(i),BDL(i),LDL(i)
end do
close(107)
end subroutine test
program main
use var_mod
implicit none
call test
write(*,*)SPZFS(n)
end |
vvt 发表于 2020-5-11 08:17 感谢您的回复! 能否请您帮忙看一下我的代码是否有语法错误?之前用common的方法,实现了读取txt的数据,并在两个subroutine中使用;这一次读取csv的数据后,使用common语句在另一个subroutine中却没有成功使用这些数据。 再次感谢! |
Transpose 发表于 2020-5-11 07:27 感谢您的回复! 我现在做的是abaqus这个软件的二次开发,只能对这些subroutine中的特定函数进行定义,即没有program,只有若干单独的subroutine,计算时在软件中勾选上该文件即可在计算中调用,实现二次开发。 所以,如果想用module的话,我必须写在subroutine中,但好像module中不能进行read操作。 请问:1.我可以在一个subroutine中使用module,然后在另一个subroutine中调用这个module吗? 2.如果1可行,那么我如何在subroutine的module中实现读取csv中的数据呢? 再次感谢! |
捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )
GMT+8, 2026-1-9 19:06