- 积分
- 3
- 注册时间
- 2005-10-27
- 仿真币
-
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2006-3-28 21:49:01
|
显示全部楼层
来自 北京
Re:<欲连载>dmap的学习
中间空了一段时间,其实很想看看大家得看法,很希望有人能提点意见,因为这个东西我没写过,也没有什么可以参考的东西,只是自己瞎摸着走。因此呢就不知道写的东西对于大家有没有什么用处,如果写偏了,大家看了没什么用处或者说根本就不想看,那我就白写了,呵呵
下面继续的内容是有关Nastran中矩阵的读写和操作的一些知识介绍,这也是大家经常要问道的问题,但是我可不能完全讲明白,水平的问题
先说矩阵的读与写操作吧。先说基本方法。矩阵的读写包括从输入文件中读取矩阵和向文件中输出矩阵,也就是写。
1,从输入文件中读取矩阵:
有两种方法,也可以说是两种格式:
DMIIN = 读入DMI 数据 – 这种格式的输入矩阵只有行和列的标示,用起来比较方便,用的也比较广泛。通常的PCH文件中用的是这种格式
MTRXIN = 读入 DMIG 卡片数据 – 这种格式的输入矩阵是以每个节点元素项的自由度为标示进行排列的,通常的在f06文件中输出的矩阵用的就是这种方式。当然,这两种格式的选择取决于用户选择的输出方式,也不是程序固定的。
一般来说,DMI比较常用,也符合我们对矩阵的一般理解,这里将DMIIN格式做一个比较详细的解释。
DMIIN:从输入数据中读入DMI格式的矩阵数据;格式如下:
DMIIN DMI,DMINDX/DMI1,DMI2,DMI3, DMI4, DMI5, DMI6, DMI7, DMI8, DMI9, DMI10/PARM1/ PARM2/ PARM3/ PARM4/ PARM5/ PARM6/ PARM7/ PARM8/ PARM9/ PARM10 $
解释一下:
DMI:指的就是指定的DMI数据卡中所有的矩阵(确切讲应该是表)。
DMINDX:DMI数据的索引。
DMIi:以DMI卡格式表示的矩阵数据的名称
PARMi:判断参数,如果生成了某个矩阵,则对应的参数为真(1)。
给个例子吧:
DMIIN DMI,DMINDX/MAT1,MAT2,,,,,,,,/s,n,gotmat1/s,n,gotmat2 $
这条语句从DMI卡中读入矩阵MAT1 和 MAT2 (当然前提是这两个矩阵要存在才行)
下面给一个我用到的示例:
SOL 100
COMPILE USERDMAP $
ALTER 2 $
DMIIN DMI,DMINDX/OUTX,,,,,,,,,/S,N,YES1 $倒入矩阵OUTX
DMIIN DMI,DMINDX/OUTDX,,,,,,,,,/S,N,YES1$导入矩阵OUTDX
$
TRNSP OUTDX/OUTDXT $
TRNSP OUTX/OUTXT $
MATMOD OUTDXT,,,,,/UVX, /1/458 $
MATMOD OUTDXT,,,,,/UAX,/1/1330$
MATMOD OUTXT,,,,,/UX, /1/458 $
MATPCH UX,UVX,UAX $
CEND
$
BEGIN BULK
$
INCLUDE 'STEP-IN.PCH'
ENDDATA
上面这是一个对DMI数据进行读写操作的典型例子,所有的输入数据在另一个pch文件STEP-IN.PCH中,可以看一下。下面有比较标准的泛例。
2,输出矩阵(按照nastran的翻译,打印矩阵更确切一些,呵呵,但是总感觉有个打印机似的)
在MSC.Nastran中有许多中方式输出矩阵,这里介绍几个经常用到的吧,其他的我也不清楚,嘿嘿。
MATPRN – 在DMAP中最常用的矩阵输出模块- 仅仅有矩阵元素的行和列来标示;
MATPRT – 矩阵输出模块 – 格式不好描述,但是对于小型矩阵比较适合一些
MATGPR – 输出DMIG格式的矩阵,也就是由节点自由度表示的矩阵- 使用起来比较困难。
另外介绍一个比较好用的方式
MATPCH - 文件输出 - 将矩阵输出到同名的.pch文件中,格式为DMI格式,此方法对于单纯的矩阵以及数据输出非常适用,我一般用这种方法。
对MATPRN, MATPRT两个模块进行一下说明,这两个模块在“.f06”文件中输出矩阵,并且输出的矩阵由矩阵的行和列进行识别,而不是由节点自由度进行识别。
格式为:
MATPRN MAT1,MAT2,MAT3,MAT4,MAT5// $
MAT1-MAT5为需要输出的矩阵
这个模块是DMAP中为数不多的不需要对所有的输出域进行定义的模块之一,也就是说,可以简单的这么写:MATPRN A// $
MATPRT MAT1// $
这个模块每次只能输出一个矩阵。另外它比较适合于小型矩阵,而前者比较适合于大型稀疏矩阵的输出。
给一个例子吧,一个DMIIN应用的例子,大家可以坐一下看看
×××××××××××××××××××××××××××
SOL readdmi
$
COMPILE readdmi, LIST
$
SUBDMAP readdmi
$
type parm,,logical,n,got1,got2
$
include 'preface.dat'
$
dmiin dmi,dmindx/matrix1,matrix2,,,,,,,,/
s,n,got1/s,n,got2 $
if(got1)then $
message //'got matrix 1 - matprn follows' $
matprn matrix1// $
message//'matprt follows' $
matprt matrix1// $
else $
message //'matrix 1 not found' $
endif $
end $
cend
title = read matrix using dmiin
begin bulk
$
$ DMI - create a 3x3 matrix
$
DMI,matrix1,0,1,1,,,3,3
DMI,matrix1,1,1,1.,2.,3.
DMI,matrix1,2,1,4.,5.,6.
DMI,matrix1,3,1,7.,8.,9.
enddata
××××××××××××××××××××××××××××
输出结果为:
^^^GOT MATRIX 1 - MATPRN FOLLOWS
MATRIX MATRIX1 (GINO NAME 101 ) IS A DB PREC 3 COLUMN X 3 ROW SQUARE MATRIX.
COLUMN 1 ROWS 1 THRU 3 -------------------------------------------------
ROW
1) 1.0000D+00 2.0000D+00 3.0000D+00
COLUMN 2 ROWS 1 THRU 3 --------------------------------------------------
ROW
1) 4.0000D+00 5.0000D+00 6.0000D+00
COLUMN 3 ROWS 1 THRU 3 --------------------------------------------------
ROW
1) 7.0000D+00 8.0000D+00 9.0000D+00
THE NUMBER OF NON-ZERO TERMS IN THE DENSEST COLUMN = 3
THE DENSITY OF THIS MATRIX IS 100.00 PERCENT.
^^^MATPRT FOLLOWS
INTERMEDIATE MATRIX ... MATRIX1
COLUMN 1
1.000000E+00 2.000000E+00 3.000000E+00
COLUMN 2
4.000000E+00 5.000000E+00 6.000000E+00
COLUMN 3
7.000000E+00 8.000000E+00 9.000000E+00
* * * END OF JOB * * * |
评分
-
1
查看全部评分
-
|