有关etable的疑问

上一篇 / 下一篇  2007-05-14 21:59:14

查看( 31 ) / 评论( 8 ) /
1、ansys能否直接输出单元表?有没有相关命令?
2、到底能不能对局部单元定义单元表?若能定义,能不能做操作(比如输出)。我试了可以定义这样的单元表,也可以正常使用,用*vget把单元表拷贝到一个数组里,总是会操作失败。
3、如果一个模型的单元编号不是从一开始,比如说从200开始,然后定义单元表后,再用*vget把单元表拷贝到一个数组里,总是会操作失败。但这个单元表可以正常使用,又是为什么?
4、是不是如果想把单元表信息用*vget拷贝到矩阵里,起始单元编号必须从1开始?

TAG:

一个人的天荒地老 ..⊕゛.︵.ゥ.︵oο 北极熊甲 发布于2007-03-27 23:14:40
1.自动输出到一个文件中好像不能. 你得list后,save as
2.能.选好单元后在定义单元表. 错误? 是V11吗?不是的话,需要你提前定义个数组.11不用.
3.什么提示?
4.不是.你可以指定第一个单元号2和第一数组号4. 然后ansys一次往下对应的填填3-5,4-6.... 你可以使用 *VLEN or *VMASK 跳过一些单元位置,比如你不要7好单元的数据.
一个人的天荒地老 ..⊕゛.︵.ゥ.︵oο 北极熊甲 发布于2007-03-27 23:25:43
这个应该能解决了你的问题,包括输出的问题:
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!
! DESCRIPTION:
!
! THIS MACRO STORES THE INFORMATION REQUESTED BY THE USER FOR A SELECTED
! SET OF NODES OR ELEMENTS IN AN ARRAY CALLED RESULT_COMP. THIS INFORMATION
! CAN BE ANY THING THAT IS  IN THE COMMAND *VGET,FOR NODES & ELEMENTS. THE
! REASON FOR THIS MACRO IS THAT WHEN USING *VGET THE NODE OR ELEM NUMBERS MUST
! BE SEQUENTIAL, IN ORDER TO GET ANY INFORMATION. THIS MACRO DEALS WITH THAT
! i.e. BY USING *VMASK, ONE CAN ALWAYS DO THIS MANUALLY, HOWEVER THIS MACRO IS
! HELPFULL WHEN NEEDED TO USE REGULARLY
! THIS MACRO ALSO CREATES A TXT FILE FOR THE REQUESTED INFORMATION.
!
!
! MACRO CREATED BY:  KIRAN SREERAM
! MACRO LANGUAGE:    ANSYS PARAMETRIC DESIGN LANGUAGE (APDL)
! ANALYSIS SOFTWARE: ANSYS 7.1

!
!     
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!
!MACRO SYNTAX FOR BATCH OPERATION:
!
!VGET_SUBS,arg1,arg2
!
!WHERE:
!                         FIELD INPUT DESCRIPTION
!
!
!  Input                     Parameter                             
!Parameter                  Description                           
!   ID
!
!  arg1          SHOULD BE ELEM OR NODE, ENCLOSED IN SINGLE QUOTES.
!                FOR ENTITY = NODE. CAN BE PREP7 AND POST1 ITEM1.
!
!  arg2          MUST BE CHARACTER VALUE. CAN BE ANY VALUE  GIVEN IN  
!                *VGET  COMMAND FOR ITEM1 FOR ENTITY = NODE. CAN BE PREP7
!                                 AND POST1 ITEM1.
!                     
!
!  arg3          CAN BE ANY IT1NUM VALUE FOR ENTITY = NODE IN THE
!                                 *VGET COMMAND                                 
!
! example of *vget
! *VGET,RESULTPRM(1),NODE,NODE NUMBER,ARG1,ARG2,               
!                                
!
!SAMPLE SYNTAX FOR BATCH INPUT (SEE ABOVE DEFINITIONS):
!
!VGET_SUBS,'NODE','LOC','X'
!
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!
!PARAMETER    TYPE                          DESCRIPTION
!
!CUR_ROUT_  SCALAR                - STORES THE ACTIVE ROUTINE.
!NODE_MIN             (SCALAR)    - MININMUM NODE NUMBER
!NODE_MAX             (SCALAR)    - MAXIMUM NODE NUMBER
!NODE_ARRAY           (ARRAY)
!NODE_MASK            (ARRAY)
!NODE_TEMP            (ARRAY)
!RESULT_COMP          (ARRAY)     - FINAL ARRAY WITH COMPRESSED NODE OR ELEMENT  
!                                   NUMBERS SORTED BY COORDINATES.
!
!
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!                       START OF EXECUTION OF THE MACRO
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      *MSG,UI,
       EXECUTING THE MACRO VGET_SUBS
       /wait,1

/NOPR                       ! SUPRESS DISPLAY OF FOLLOWING WARNING MESAGES:
/UIS,MSGPOP,3               ! SET MSG POP LEVEL ONLY TO ERRORS
*GET,AR21,PARM,ARG1,TYPE    ! WHAT TYPE WAS ITEM1_  
*GET,AR22,PARM,ARG2,TYPE    ! WHAT TYPE WAS ITEM1_
*GET,AR23,PARM,ARG3,TYPE    ! WHAT TYPE WAS ITEM1_

!*************************************************************************
! CODE TO GIVE ERROR MSGS IF INTERACTIVE AND WARNING IF BATCH MODE
!
*GET,AR51,ACTIVE,0,INT       !RETRIVE INTERACTIVE OR BATCH MODE
*IF,AR51,EQ,2,THEN
      AR50='error'
   *ELSE
      AR50='UI'
*ENDIF

*IF,AR21,NE,3,THEN,
     *MSG,%AR50%,
      ARGUMENT 1 NOT ENTERED CORRECTLY. ARGUMENT 1 HAS TO BE EITHER  %/&
      ELEM OR NODE AND SHOULD BE ENTERED WITHIN SINGLE QUOTES. %/&
       ***************** MACRO IS BEING TERMINATED ******************
     *RETURN,-1
*ELSE
     ARG1 = UPCASE(ARG1)
    *IF,ARG1,NE,'ELEM',THEN,
      *IF,ARG1,NE,'NODE',THEN,
        *MSG,%AR50%,
         ARGUMENT 1 NOT ENTERED CORRECTLY. ARGUMENT 1 HAS TO BE EITHER  %/&
         ELEM OR NODE AND SHOULD BE ENTERED WITHIN SINGLE QUOTES.%/&
           ***************** MACRO IS BEING TERMINATED ******************
        *RETURN,-1
      *ENDIF
   *ENDIF
*ENDIF

*IF,AR22,NE,3,THEN
    *MSG,%AR50%,
     ARGUMENT 2 NOT ENTERED CORRECTLY. ARGUMENT 2 HAS TO BE ALPHABETS%/&
     AND SHOULD BE ENTERED WITHIN SINGLE QUOTES. %/&
      ***************** MACRO IS BEING TERMINATED ******************
    *RETURN,-1
*ENDIF

*IF,AR23,EQ,0,THEN
   *IF,ARG3 ,LE,0,OR,ARG3,GE,3,THEN
     *MSG,%AR50%,
      ARGUMENT 3 NOT ENTERED CORRECTLY. CHECK,IF ALPHABETS THEN PLEASE%/&
       ENTER WITHIN  SINGLE QUOTES.  %/&
       ***************** MACRO IS BEING TERMINATED ******************
     *RETURN,-1
   *ENDIF
*ENDIF

  ENT_ = ARG1
  ITEM1_  = ARG2
  IT1NUM_ = ARG3
!
/INQUIRE,USR_NAME_,USER         ! USER NAME PARA
!
/INQUIRE,JNAME_,JOBNAME         ! JOBNAME PARAMETER RETRIEVAL
!
/INQUIRE,CURDIR_,DIRECTORY      ! CURRENT WORKING DIRECTORY PARAMETER
                                                        ! RETRIEVAL
! RETRIEVE UNIX DATE AND TIME
!
*GET,AR20,ACTIVE,,DATE          ! GET WALLCLOCK DATE
AR31 = MOD(AR20,100)
AR32 = (MOD(AR20,10000)-AR31)/100
AR33 = (AR20-MOD(AR20,10000))/10000
*IF,AR31,LT,10,THEN $ AR31='0%AR31%' $ *ELSE $ AR31='%AR31%' $ *ENDIF
*GET,AR30,ACTIVE,,TIME,WALL  ! GET WALLCLOCK TIME
AR34 = NINT(AR30-0.5)
*IF,AR34,LT,10,THEN $ AR54='0%AR34%' $ *ELSE $ AR54='%AR34%' $ *ENDIF
AR35 = NINT((AR30-AR34)*60-0.5)
*IF,AR35,LT,10,THEN $ AR55='0%AR35%' $ *ELSE $ AR55='%AR35%' $ *ENDIF
AR36 = NINT((AR30-(AR34+AR35/60))*3600)
*IF,AR36,LT,10,THEN $ AR56='0%AR36%' $ *ELSE $ AR56='%AR36%' $ *ENDIF
*SET,MONTH_ $ *DIM,MONTH_,CHAR,12
*SET,MONTH_(1),'JAN','FEB','MAR','APR','MAY','JUN'
*SET,MONTH_(7),'JUL','AUG','SEP','OCT','NOV','DEC'
TIME_ = '%AR54%:%AR55%:%AR56%'
DATE_ = '%AR31%-%MONTH_(AR32)%-%AR33%'

!------------------------------------------------------------------------------------
!GETTING THE INFORMATION OF THE RESULTS SET CURRENTLY BEING USED.
!
*GET, ACTSTP_, ACTIVE, , SET,LSTP,
*GET, ACTTIM_, ACTIVE, , SET,TIME,   
!-------------------------------------------------------------------------------------
*GET,CUR_ROUT,ACTIVE,,ROUT
!-------------------------------------------------------------------------------
/POST1
*GET,AR37,ACTIVE,0,CSYS          ! RETRIVE THE ACTIVE COORDINATE SYSTEM
*GET,AR38,ACTIVE,0,RSYS          ! RETRIVE THE ACTIVE RESULTS COORDINATE SYSTEM

*IF,ENT_,eq,'ELEM',then
  ENTVAL_ = 1
  ETABLE,ELSTRS_,% ITEM1_ %,IT1NUM_
*ELSE
  ENTVAL_ = 0
*ENDIF
  
!********GETTING THE DESIRED VALUES INTO ARRAYS FOR NODE NUMBERS***************

*GET,%ENT_%MN,%ENT_%,,NUM,MIN                 ! MIN NODE NUMBER OF SELECTED SET
*GET,%ENT_%MX,%ENT_%,,NUM,MAX                 ! MAX NODE NUMBER OF SELECTED SET
*DIM,%ENT_%AR,,(%ENT_%MX-%ENT_%MN)+1,2        ! ARRAY THAT ENCOMPASSES SELECTED SET
*DIM,%ENT_%MK,,(%ENT_%MX-%ENT_%MN)+1          ! MASK ARRAY ENCOMPASSES SELECTED SET
!
*IF,ENTVAL_,EQ,1,THEN,
   *VGET,%ENT_%MK(1),%ENT_%,%ENT_%MN,ESEL     ! FILL MASK ARRAY WITH SELECTION STATUS  
*ELSE
   *VGET,%ENT_%MK(1),%ENT_%,%ENT_%MN,NSEL
*ENDIF
*VMASK,%ENT_%MK(1)                            ! DECLARE MASK FOR NEXT OPERATION
*VFILL,%ENT_%AR(1,1),RAMP,%ENT_%MN,1          ! NUMBERS OF SELECTED NODES, WITH "HOLES"
*IF,ENTVAL_,EQ,1,THEN,
   *VGET,%ENT_%AR(1,2),%ENT_%,%ENT_%MN,ETAB,ELSTRS_ ! OBTAIN THE REQUESTED DATA IN ITEM1_ AND IT1NUM_
*ELSE
   *VGET,%ENT_%AR(1,2),%ENT_%,%ENT_%MN,ITEM1_ ,%IT1NUM_%
*ENDIF
!
*DIM,%ENT_%TEMP,ARRAY,%ENT_%MX-%ENT_%MN+1,2   ! NODE NUMBERS WITH HOLES REMOVED
*VMASK,%ENT_%MK(1)                            ! DECLARE MASK FOR NEXT OPERATION
*VFUN,%ENT_%TEMP(1,1),COMP,%ENT_%AR(1,1)      ! COMPRESS OUT THE HOLES
*VMASK,%ENT_%MK(1)                            ! DECLARE MASK FOR NEXT OPERATION
*VFUN,%ENT_%TEMP(1,2),COMP,%ENT_%AR(1,2)      ! COMPRESS OUT THE HOLES
*DEL,%ENT_%MK,,NOPR                           ! SILENT DELETE (UNDOCUMENTED ARGUMENT)
*DEL,%ENT_%AR,,NOPR                           ! SILENT DELETE (UNDOCUMENTED ARGUMENT)
!
*GET,%ENT_%COUNT,%ENT_%,,COUNT                ! HOW MANY NODES SELECTED
RESULT_COMP =
*DIM,RESULT_COMP,ARRAY,%ENT_%COUNT,2          ! MIN LENGTH ARRAY, NODE NUMBERS
*VFUN,RESULT_COMP(1,1),COPY,%ENT_%TEMP(1,1)   ! STORE IN MINIMUM LENGTH ARRAY
*VFUN,RESULT_COMP(1,2),COPY,%ENT_%TEMP(1,2)

*DEL,%ENT_%TEMP,,NOPR                         ! SILENT DELETE (UNDOCUMENTED ARGUMENT)
*DIM,GARBAGE,ARRAY,%ENT_%COUNT
*MOPER,GARBAGE(1),RESULT_COMP(1,1),SORT,RESULT_COMP(1,1)
%ENT_%MN=                                      ! DELETE VARIABLES
%ENT_%MNAX=
%ENT_%COUNT=
GARBAGE =
!
!

!***********WRITING THE RESULTING PARAMETER TO A TXT FILE********************
/nopr

/output,%ENT_%%ITEM1_%%IT1NUM_%,txt

/COM,            +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
/COM,            |                                                 |
/COM,            |            GE POWER SYSTEMS. ON %DATE_%   |
/COM,            |                                                 |
/COM,            |                                                 |
/COM,            |                  VGET_SUBS.MAC                  |
/COM,            |                                                 |
/COM,            |          VERSION 1 , DATE: JULY 20, 2004        |
/COM,            |                                                 |
/COM,            +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
/COM,
/COM,USER NAME                              :%USR_NAME_(1)%
/COM,CURRENT WORKING DIRECTORY              :%CURDIR_(1)%
/COM,JOB NAME                               :%JNAME_(1)%
/COM,THIS MACRO WAS EXECUTED ON             :%DATE_% AT %TIME_%
/COM,CURRENT LOADSTEP                       :%ACTSTP_%
/COM,TIME ASSOCIATED WITH LOADSTEP          :%ACTTIM_%
/COM,ACTIVE COORDINATE SYSTEM (CSYS)        :%AR37%
/COM,ACTIVE RESULTS COORDINATE SYSTEM (RSYS):%AR38%
/COM,-----------------------------------
/COM,|    %ENT_% NUMBER  |        % ITEM1_ % %IT1NUM_%      |
/COM, -----------------------------------
*vwrite,' |',RESULT_COMP(1,1),'|',RESULT_COMP(1,2),'|'
%C %-15I %C %15.3F %C
/COM, -----------------------------------
/output,term
!------------------------------------------------------------------------------
*IF,%AR51%,eq,2,THEN
        *UILIST,%ENT_%%ITEM1_%%IT1NUM_ %,txt
*ENDIF

!
!**************************************************************************************
*IF,CUR_ROUT,EQ,0,THEN,
                          FINISH
          *ELSEIF,CUR_ROUT,EQ,17,THEN,
                          /PREP7
          *ELSEIF,CUR_ROUT,EQ,21,THEN,
                          /SOLUTION
          *ELSEIF,CUR_ROUT,EQ,31,THEN,
                          /POST1
          *ELSEIF,CUR_ROUT,EQ,36,THEN,
                          /POST26                                                                     
          *ELSEIF,CUR_ROUT,EQ,41,THEN,
                         /OPT
          *ELSEIF,CUR_ROUT,EQ,52,THEN,
                          /AUX2
          *ELSEIF,CUR_ROUT,EQ,62,THEN,
                          /AUX12
          *ELSEIF,CUR_ROUT,EQ,65,THEN,
                          /AUX15
          *ELSEIF,CUR_ROUT,EQ,71,THEN,
                          /RUNSTAT
*ENDIF

*DEL,TIME_   ,,NOPR $*DEL,PARR_   ,,NOPR  $*DEL,ACTSTP_ ,,NOPR
*DEL,ITEM1_  ,,NOPR $*DEL,IT1NUM_ ,,NOPR  $*DEL,MONTH_  ,,NOPR
*DEL,ENTVAL_ ,,NOPR $*DEL,ENT_ ,,NOPR     $*DEL,USR_NAME_,,NOPR
*DEL,DATE_   ,,NOPR $*DEL,CUR_ROUT,,NOPR  $*DEL,ACTTIM_ ,,NOPR
*DEL,JNAME_  ,,NOPR $*DEL,CURDIR_ ,,NOPR  

/GOPR
/EOF

[ 本帖最后由 北极熊甲 于 2007-3-27 23:29 编辑 ]
yangjungang2004的个人空间 yangjungang2004 发布于2007-03-28 12:20:17

QUOTE:

原帖由 北极熊甲 于 2007-3-27 23:14 发表
1.自动输出到一个文件中好像不能. 你得list后,save as
2.能.选好单元后在定义单元表. 错误? 是V11吗?不是的话,需要你提前定义个数组.11不用.
3.什么提示?
4.不是.你可以指定第一个单元号2和第一数组号4. 然后 ...
1、如果真的不能,无语
2、我是提前定义了数组,然后用*vget获取单元表内容,出错:
Some entities requested in the *VGET were undefined
3、也是这样的错误:
Some entities requested in the *VGET were undefined
4、我再研究一下
Think you very much
一个人的天荒地老 ..⊕゛.︵.ゥ.︵oο 北极熊甲 发布于2007-03-30 12:49:56

LHphoenix发布于2007-03-30 13:56:35
我碰到的问题和楼主的基本一致,出错信息也一样
雨人的个人空间 雨人 发布于2007-03-30 20:41:42
*dim,n,array,960      !定义数组
esel,s,,,1,330           !选择单元

*do,i,1,6                     !将单元表的数据赋值给数组
avprin,0,0
etable,n(i),nmisc,4*cs*1.5+17+i
*enddo

*create,ansuitmp,,,,    !将数组输出到文件
*cfopen,'text-fx'
*vwrite,n(1,1),,,,,,,,,
(6f12.4)
*cfclos
*end
/input,ansuitmp

[ 本帖最后由 雨人 于 2007-3-30 20:43 编辑 ]
一个人的天荒地老 ..⊕゛.︵.ゥ.︵oο 北极熊甲 发布于2007-03-30 21:34:36

QUOTE:

原帖由 雨人 于 2007-3-30 20:41 发表
*dim,n,array,960      !定义数组
esel,s,,,1,330           !选择单元

*do,i,1,6                     !将单元表的数据赋值给数组
avprin,0,0
etable,n(i),nmisc,4*cs*1.5+17+i
*enddo

*create,ansu ...
矢量操作比*Do循环高效得多得多
在一个有18400条线和25600个节点的模型中,运行一个由*Do循环建的宏需要555秒中,而使用由矢量操作定义的宏时用了不到0.3s.
ppblog发布于2007-06-02 13:03:10
怎么将Etable的数据输出到文件阿?
怎么将Etable的数据输出到文件阿?
我来说两句

(可选)

我的栏目

日历

« 2008-07-06  
  12345
6789101112
13141516171819
20212223242526
2728293031  

数据统计

  • 访问量: 2681
  • 日志数: 15
  • 建立时间: 2006-12-10
  • 更新时间: 2008-05-26

RSS订阅

Open Toolbar