找回密码
 注册
Simdroid-非首页
楼主: dmap

dmap的学习(欲连载)

[复制链接]
 楼主| 发表于 2006-3-10 18:03:22 | 显示全部楼层 来自 北京

Re:<欲连载>dmap的学习

这里面似乎对空格无效,呵呵
排了半天的版,没用上
发表于 2006-3-16 09:49:41 | 显示全部楼层 来自 安徽芜湖

Re:<欲连载>dmap的学习

Simdroid开发平台
继续啊
发表于 2006-3-28 10:30:30 | 显示全部楼层 来自 北京

Re:<欲连载>dmap的学习

楼主加油
 楼主| 发表于 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

查看全部评分

发表于 2006-4-11 14:52:27 | 显示全部楼层 来自 江苏南京

Re:<欲连载>dmap的学习

对dmap的无私奉献精神致以崇高的敬意!
quyf 该用户已被删除
发表于 2006-4-13 19:13:01 | 显示全部楼层 来自 武汉大学
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2006-4-18 18:05:51 | 显示全部楼层 来自 西安交通大学

dmap,太感谢了!我最近在用dmap输出刚度矩阵和单元刚度矩阵

依你的经验,这个问题难不难,我刚开始看关于dmap的资料,有什么好东东能不能给推荐一下,不胜感激!
发表于 2008-1-8 15:45:24 | 显示全部楼层 来自 陕西西安
对楼主得无私精神表示敬意
回复 不支持

使用道具 举报

发表于 2008-1-9 09:01:58 | 显示全部楼层 来自 日本
如果不顶顶自己的心理都过于不去,好文啊,技术含量比较高的好文啊
回复 不支持

使用道具 举报

发表于 2008-1-15 22:00:36 | 显示全部楼层 来自 上海闵行区
真的很好 谢谢你
回复 不支持

使用道具 举报

发表于 2008-1-16 10:32:26 | 显示全部楼层 来自 四川成都
楼主还来这里不哦?有很多问题请教你呢。
回复 不支持

使用道具 举报

发表于 2008-1-18 14:52:08 | 显示全部楼层 来自 上海

回复 31# 的帖子

非常非常好
回复 不支持

使用道具 举报

 楼主| 发表于 2008-1-20 21:44:40 | 显示全部楼层 来自 上海徐汇区
找到一个以前的关于DMAP的介绍,比较简洁,但是还算全面,先给大家发上来看看吧
好久好久没有来了......


1   直接矩阵提取程序介绍

从概念上看,有限单元法能够生成一组代数方程,这个组方程可以修改并用矩阵代数的方法求解。这一系列的过程,可以简化为一个能够生成需要的结果的程序或算法。
例如结构分析过程,它可以归纳为几个步骤,每个步骤都能用一些矩阵操作来表达。这个过程可以编制成反映这些矩阵操作的程序,程序的运行就表示了这些矩阵操作的依次实现。
MSC.Nastran提供了一种高级语言,这种语言定义表示这些矩阵操作序列的算法。这种语言允许用户以符号的方式定义操作和数据,不再需要担心诸如矩阵如何贮存,算法的机器指令表示以及系统矩阵的大小等问题。这种语言称为直接矩阵提取程序,表示为DMAP。例如需要求两个矩阵 [A] 与 [B] 的和,设结果为 [C],则对应的DMAP指令为:
            ADD   A, B / C     $
这里的记忆名ADD称为模块名,它定义了上述的矩阵操作,[A],[B] 称为输入数据块,而结果 [C] 称为输出数据块。指令的结构是这样的,要求输入数据块和输出数据块之间用斜杠(/)分隔,在这个例子中这些数据块都是矩阵。符号($)表示指令结束。
MSC.Nastran可以看作一个计算实验室,而DMAP模块是一组计算工具,MSC.Nastran执行程序提供了一个框架,控制适当的DMAP操作序列的执行,以及与每个DMAP指令有关的所有数据的存贮和提取。
实验室用于测试一些概念,MSC.Nastran计算实验室允许用户创建并试验矩阵操作的一些算法,不用编写任何Fortran或C语言的程序。这个过程随后可简化为一个DMAP算法序列,在执行这个序列的时候,将完成与这个特定的求解类型有关的操作步骤。
DMAP用于编写执行控制段中的SOL命令执行时所需要的求解算法。用户可以用任意一组包括求解矩阵代数算法的DMAP,取代SOL语句。但是在开始使用这种计算工具之前,用户需要对DMAP有更多的了解。DMAP语言和DMAP模块的完整说明超出了本书的范围。这里只是说明这种语言的结构,并介绍一些初步的内容,以使用户对有关问题有一个适当的了解。
        了解求解序列。
        修改求解序列。
        将MSC.Nastran作为开发稀疏矩阵操作算法的计算实验室。

2   DMAP指令的形式

在第一章中已经指出,MSC.Nastran是一种面向对象的程序,这种对象称为‘模块’。这些模块独立处理由DMAP指令所联系的数据。一个完整的算法或矩阵提取程序可以由相应的DMAP指令表达。DMAP指令的格式为:
模块名   输入数据块 / 输出数据块
                     参数表列 $

这里  模块名:     MSC.Nstran的模块名称。
      输入数据块: 数据块名的表列,由逗号分隔,个数由模块确定。
          输出模块名: 数据块名的表列,由逗号分隔,模块输出并确定数据块个数。
          参数表列:   参数列,由斜杠(/)分隔,模块确定参数的个数及类型。
用斜杠(/)分隔输入输出数据块段及参数,DMAP指令的结束符号为$。
DMAP语句看起来比FORTRAN 和C语言的语句更为复杂。但是它们更类似于FORTRAN中的函数(Function)或子程序(Subroutine)。模块名即为子程序名,输入数据块名,输出数据块名及参数列为模块/子程序引用的数据结构。
回复 不支持

使用道具 举报

 楼主| 发表于 2008-1-20 21:51:25 | 显示全部楼层 来自 上海徐汇区

为了对数据集进行矩阵操作,需要能将矩阵数据定义为输入列,对它进行操作并打印结果。下面将描述这些操作模块,然后讨论数据如何指定和打印。

MSC.Nastran用户手册中有DMAP模块的详细说明,下面将简要说明有关的DMAP模块。主要包括:
1.
DMAP
模块名。
2.
模块用途。
3.
DMAP
模块形式及输入数据块,输出数据块和参数指定。
4.
输入数据块描述。
5.
输出数据块描述。
6.
参数描述。
        7,  使用模块的适当说明。




4
DMAP
规则

现在已经了解了一些MSC.Nastran模块,所以应该考虑一下有关使用这种语言的规则。

41
指令形式

DMAP语句必须符合相应模块说明所描述的DMAP指令格式。包括:
1.
模块名。
2.
一定个数的输入数据块。
3.
一定个数的输出数据块。
4.
一定个数及类型的参数。

42
输入数据块

根据MSC.Nastran规则,DMAP的输入数据块必须为:
1.
上一个DMAP语句的输出数据块。
2.
DMI矩阵输入语句在Bulk Data中输入的数据块。
3.
DTI表格输入语句在Bulk Data中输入的数据块。
4.
在数据库文件中定义的数据块。
输入数据块由用户指定的名字引用,由逗号分隔。各个数据块的位置是一定的,即使某些数据块不存在,也需要用足够个数的逗号来表示。例如模块ADD5,允许五个矩阵相加,因此有五个输入数据块。如果只存在一个数据块,那么它的调用形式为:

ADD5 A
,,,,/
X
/
(参数列)$
这里数据块A以后是用逗号指定的四个空数据块。
43
输出数据块

一个数据块名只能在输出中出现一次。因为每个模块的输出数据块的个数是一定的,所以分隔的逗号数必须比数据块的个数少一。和输入情况相仿,连续的逗号表示空数据块。

参数
模块的参数有很多用途,包括
1.
标记模块所采用的控制计算的算法。
2.
对模块传送数据的值,或从模块得到数据的值。
由于用户必须确定下列一些因素的原因,所以参数的应用很复杂。
1.
参数是常数还是变量。
2.
参数值是否可以由PARAM模型数据项指定。
3.
直接指定参数值,还是由参数名引用。
参数说明就反映了这三个要求,并由三个区域构成:
            (常数或变量),(YesNo),(值)
或简化为:

CVS
YNV
CVS = C
参数为常数。

V
参数为变量。

S
参数为保存值。
YN =
Y
参数在PARAM语句中指定。
N
相反。
V =
p

     参数名。
     参数名=p
这里p为参数值的值,数值类型必须是正确的整数,实数或字符。
参数的确定看起来好像很简单,但是参数值的指定必须特别的注意。在DMAP编译的时候,每个参数赋予一个初值。参数可以由模块开发者赋予一个省略值,如果没有省略值,那么必须指定一个初始值。只有在DMAP程序中声明参数为变量时,它在运行过程中的值才能和初始值不同。参数值是由前面的模块所改变的,而且是由CVS区域的S值声明指定存储的参数值。
回复 不支持

使用道具 举报

 楼主| 发表于 2008-1-20 21:59:42 | 显示全部楼层 来自 上海徐汇区
效果实在不好,我整个发到附件里面吧
有兴趣的朋友自己下载一下吧
我也是好久没有用这个东西了,很陌生了
这个附件东西其实也很浅,入门的兄弟了解一下吧
进一步的东西还需要多看看其他资料
这个资料忘记是哪儿的一篇附录了,呵呵
不要怨偶

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

发表于 2008-3-28 15:05:37 | 显示全部楼层 来自 江苏南京

对于楼主的无私衷心的感谢

刚开始学DMAP,
苦于学习资料的缺乏,
楼主能提供丰富的资料,
真的是由衷的感谢。
祝愿楼主,工作顺利
回复 不支持

使用道具 举报

发表于 2008-4-21 16:12:19 | 显示全部楼层 来自 北京

回复 35# 的帖子

比较全!!!
回复 不支持

使用道具 举报

发表于 2008-4-21 20:48:56 | 显示全部楼层 来自 陕西西安
感谢LZ 受教了
回复 不支持

使用道具 举报

发表于 2008-4-27 22:24:06 | 显示全部楼层 来自 江苏南京
向楼主学习
回复 不支持

使用道具 举报

发表于 2008-5-29 17:43:13 | 显示全部楼层 来自 河南郑州
多谢楼主的无私奉献,楼主辛苦
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2026-1-10 08:57 , Processed in 0.044162 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表