mlj0016 发表于 2010-7-9 15:22:03

子程序介绍四:分布力子程序forcem

本帖最后由 mlj0016 于 2010-7-9 15:24 编辑

先请大家帮个忙。本人在“建设家园”版申请MARC版的版主,希望大家能去捧个场,谢啦。

言归正传,介绍一下今天的子程序forcem。
其实《二次开发》上最初的例子,介绍的就是这个子程序。我写的和这个例子几乎相同,区别就是路径不同。子程序如下:
      subroutine forcem(press,th1,th2,nn,n)
implicit real*8 (a-h, o-z)
      dimension th1(3), th2(3), n(7)
include 'C:\MSC.Software\Marc\2010\marc2010\common\creeps'

if (th1(1).le.30.and.th1(1).ge.20.and.th1(2).le.(4*(time_beg_inc
   $ +1)).and.th1(2).ge.(4*time_beg_inc)) then
press=0.002
end if
th2(1)=0.0d0
th2(2)=0.0d0
th2(3)=-1.0d0
      return
      end

说明一下,载荷沿着y轴移动,速度为4mm/s,载荷范围x方向10mm,y方向4mm。
需要指出的是,在marc2005中,使用cptim作为增量步开始时间,timinc作为时间增量,
而在marc2010中,使用这两个变量时出了些问题。可能与声明有关。因此改用time_beg_inc作为增量步开始时间。
这个子程序非常简单,需要注意的是,必须在job的analysis options中选择follower force,才能实现我们希望的载荷的移动。大家可以分别选择follower force和no follower force计算一下,结果的区别显而易见。
另外,如果大家注意的话,我在已经介绍的这四个子程序中,三次都用到了“移动”。相信大家能够很好的掌握这种方式了。
对于这样的一个简单子程序,通过一些变化,如坐标变换,就可以实现圆形、环状、正弦分布等力的范围、力的大小的变化。过些日子将专门发帖介绍一下坐标变换的应用。

模拟结果如图。


模型与子程序见附件。
**** Hidden Message *****

sj27725liu 发表于 2010-7-9 19:36:51

1# mlj0016

希望楼主,对程序再讲解细点,我是赖鸟,什么都不会啊,
另外请教,学子程序应该先学什么呀

Coldplay 发表于 2010-7-9 19:50:31

向楼主学习,正在努力钻研中。

mlj0016 发表于 2010-7-9 20:00:19

编写子程序的基础当然是fortran语言。但fortran仅仅是个工具,重点还在于一些专业性的基础知识。比如使用film、flux这两个子程序,最好懂传热学的基本原理;而要使用hypela,一定要学一下弹塑性力学。

2# sj27725liu

zhangluu 发表于 2010-7-9 21:13:55

本帖最后由 zhangluu 于 2010-7-9 21:33 编辑

编写子程序的基础当然是fortran语言。但fortran仅仅是个工具,重点还在于一些专业性的基础知识。比如使用film、flux这两个子程序,最好懂传热学的基本原理;而要使用hypela,一定要学一下弹塑性力学。

2# sj2772 ...
mlj0016 发表于 2010-7-9 20:00 http://forum.simwe.com/images/common/back.gif

我用的marc2005,CVF6.6b

为什么我的子程序编译时说没有主程序呢???是不是marc不必须要求有主程序啊

我必须加上这几句
program force
call forcem
才能build通过

要不,只compile的话,marc调用会出错,不知道哪儿出错了,还望mlj兄多多指点
http://forum.simwe.com/thread-938882-1-3.html


另外再请教mlj兄个问题
我发的这个帖子里的荷载http://forum.simwe.com/thread-939348-1-2.html用forcem可以吗?群里几个网友告诉我说用table也可以,试了试发现不太懂X0-coordinate跟x-coordinate有啥区别,另外用2个变量table的时候,自变量V2是自变量V1的函数该怎么处理?

q705378791 发表于 2010-7-9 21:43:31

看看,拜读一下

haizhonglong1 发表于 2010-7-9 22:13:29

师兄,过来顶你!

mlj0016 发表于 2010-7-10 09:00:09

我在使用子程序时,只要compile通过就可以了。
关于你问的第二个问题,我也没太看明白什么意思。不知道你是要施加重力还是分布力。如果是一个分布力的话,利用子程序是很好实现的。只要把press写成th1()的函数就可以了。另外,利用table应该也可以实现。你可以试一下。
5# zhangluu

zhangluu 发表于 2010-7-10 09:10:04

本帖最后由 zhangluu 于 2010-7-10 09:19 编辑

我在使用子程序时,只要compile通过就可以了。
关于你问的第二个问题,我也没太看明白什么意思。不知道你是要施加重力还是分布力。如果是一个分布力的话,利用子程序是很好实现的。只要把press写成th1()的函数就可以 ...
mlj0016 发表于 2010-7-10 09:00 http://forum.simwe.com/images/common/back.gif

mlj兄好,我想施加的是一个重力,不知道应该怎么做,mlj兄我可以加你QQ吗,希望有机会向你请教

q705378791 发表于 2010-7-10 10:41:51

我想看看你的模型,可对话区显示model is corrupt ,点FILL没有模型显示是因为版本不对忙呢 我的是2005版的

zwj0322 发表于 2010-7-11 19:30:28

支持师兄当版主。

励耘剑 发表于 2010-7-12 08:00:00

学习子程序,太难了,但也得学啊,支持楼主升版主

luyifei84 发表于 2010-7-13 23:00:07

学习一下:):)

1354202904 发表于 2010-7-14 09:15:37

子程序的学习很有意思,感谢lz。

toidy 发表于 2010-7-26 09:43:32

哇,见习版主啊,呵呵。
图文并茂,很好,支持!

shanqinqin 发表于 2010-7-27 19:22:50

不错的好东西哦

gtd 发表于 2010-8-9 20:18:10

我是新手,刚做上面那个例子。怎么compaq visual fortran的build里面老出现下面的错误,是什么意思啊?
“--------------------Configuration: plate - Win32 Debug--------------------
Compiling Fortran...
D:\Marc\plate.f
Linking...
dfor.lib(DFORMAIN.OBJ) : error LNK2001: unresolved external symbol _MAIN__
Debug/plate.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

plate.exe - 2 error(s), 0 warning(s)

zhangluu 发表于 2010-8-10 11:14:00

我是新手,刚做上面那个例子。怎么compaq visual fortran的build里面老出现下面的错误,是什么意思啊?
“--------------------Configuration: plate - Win32 Debug--------------------
Compiling Fortran...
D: ...
gtd 发表于 2010-8-9 20:18 http://forum.simwe.com/images/common/back.gif[/quot

Marc好像不用这一步骤,只要fortran编译通过就可以了~~
说是没有主程序,后来我试了试,编译通过,marc是可以调用的

gtd 发表于 2010-8-10 19:52:58

谢谢18楼,今天我把CVF6.6升级成CVF6.6b就好了!不好意思啊,小问题惊动了各位:D

zhs309 发表于 2010-8-12 14:21:43

支持一下,希望MARC版块可以火起来!
页: [1] 2 3 4 5 6
查看完整版本: 子程序介绍四:分布力子程序forcem