Jump to content
Guest

How to compute normal vector of quad4?

Recommended Posts

Guest

Hi,


In Hypermesh's database, I see :


=====================================


normalx


      The x component of the element normal (double).


normaly


     The y component of the element normal (double).


normalz


     The z component of the element normal (double).


=====================================


I'm curious to know how Hypermesh compute the normal vector of a quad4 element ?


In simple case, all 4 nodes of quad4 are coplanar, it's simple.


However, when the 4th node is not coplanar to 3 others, how to compute?


And for quad8 elems, how to do compute ?


 


Thanks,


Share this post


Link to post
Share on other sites

Hi,


 


It's all about the node id's how it was placed in element card


 


 


Check the elem card edit for the particular element.


 


If the node id's are placed in  anti clockwise then the normal is toward us (Red).


 


If the node id's are placed in clockwise then the normal is Opposite(Blue).

Share this post


Link to post
Share on other sites

@Karthi : thank you for your reply. But that's not an answer to my question

 

 

 

 

Hi I think it is N1N3 x N2N4 so this can eliminate affect of warpage

it is similar to when we calculate dihedral angel of solid elems we have to take normal of each face as that

Share this post


Link to post
Share on other sites
Guest

@tinh: I do a test with two quad4 elements (see my quad4.zip attached)


 


1st element : all 4 nodes are coplanar.


2nd element: the 4th node was moved out of plan


 


Run this simple script:



proc get_normal { eid } {
set nx [hm_getentityvalue elems $eid "normalx" 0]
set ny [hm_getentityvalue elems $eid "normaly" 0]
set nz [hm_getentityvalue elems $eid "normalz" 0]
puts [format "E= %d : normal=(%0.3f ; %0.3f ; %0.3f)" $eid $nx $ny $nz]
}

get_normal 1;
get_normal 2;


I got the same normal vector for two elements.



E= 1 : normal=(0.000 ; 0.000 ; 1.000)
E= 2 : normal=(0.000 ; 0.000 ; 1.000)

Try it and tell me what do you think about that.


 


 


 


 


 


quad4.zip

Share this post


Link to post
Share on other sites

Hi Mr.Quy


I cannot open your file on hm12


but i test a warping quad and surprised that its normal is calculated by N1N2N3


:o


post-3195-0-52112300-1418833608_thumb.pn


 


can this confict with solver specific?. I read manual that y axis of element coordinate system where stress output, lies on plane defined by "G1,G2,G3 and G4", means it should be N1N3 x N2N4


Share this post


Link to post
Share on other sites

Hy Tinh,

 

The requirement is to project a node on a user defined plane, whose normals keep changing for different files

i wanted to obtain the normal x, normal y, normal z for passing in the parameter for *createplane 


 

 

*createmark nodes 1 7053 
set nodeIds [ hm_getmark nodes 1 ]
if { ! [ Null nodeIds ] } {
set nodeId [ lindex $nodeIds 0 ]
set x [ hm_getentityvalue NODES $nodeId "x" 0 ]
set y [ hm_getentityvalue NODES $nodeId "y" 0 ]
set z [ hm_getentityvalue NODES $nodeId "z" 0 ]
}

*createmark nodes 1 7099
set nodeIds [ hm_getmark nodes 1 ]
if { ! [ Null nodeIds ] } {
set nodeId [ lindex $nodeIds 0 ]
set xx [ hm_getentityvalue NODES $nodeId "x" 0 ]
set yy [ hm_getentityvalue NODES $nodeId "y" 0 ]
set zz [ hm_getentityvalue NODES $nodeId "z" 0 ]
}

set x_vector [ expr { $xx - $x } ]
set z_vector [ expr { $zz - $z } ]
*createmarkpanel nodes 1 "Select 3 nodes "
set NodeList1 [ hm_getmark nodes 1 ]
*clearmark nodes 1

set  CoordX [hm_getentityvalue NODE $NodeList1 "x" 0]
set  CoordY [hm_getentityvalue NODE $NodeList1 "y" 0]
set  CoordZ [hm_getentityvalue NODE $NodeList1 "z" 0]

*createmark nodes 1  7099
*duplicatemark nodes 1 28 
*createmark nodes 1  550003
*createplane 1 -0.596426819 -1.81399629e-008 0.239601619 $CoordX $CoordY $CoordZ 
*createvector 1 $x_vector 0 $z_vector 
*projectmarktoplane nodes 1 1 1 1 

 

 

I tried the above code, and got an error:

 

0
0
    while executing
"*projectmarktoplane nodes 1 1 1 1 "

 

 

Please suggest me how to proceed ahead. 

 

Thanks in advance.

Arjun Arasan

 

On 12/16/2014 at 7:40 PM, tinh said:

 

 

 

 

Hi I think it is N1N3 x N2N4 so this can eliminate affect of warpage

 

it is similar to when we calculate dihedral angel of solid elems we have to take normal of each face as that

 

Share this post


Link to post
Share on other sites

Hi, 

from HM13, you don't need to do such complex, use available functions

example

*createmarkpanel nodes 1 "Select nodes to project to plane:"
if {[hm_marklength nodes 1]} {
     set Plane [hm_getplanepanel "Specify a plane:"]
     if {[llength $Plane]==2} {
          set Vector [lindex [hm_getdirectionpanel "Specify a vector:"] 0]
          if {[llength $Vector]==3} {
               *duplicatemark nodes 1                
               eval *createvector 1 $Vector
               eval *createplane 1 [join [join $Plane]]
               *projectmarktoplane nodes 1 1 1 1
          }
     }
}

 

Share this post


Link to post
Share on other sites

Dear Tinh,

 

Thank you for the help.

 

could you please explain the logic behind them?

{

               eval *createvector 1 $Vector
               eval *createplane 1 [join [join $Plane]]

}

 

what does it do internally?

is it similar to our vector product of 2 vectors specified by 3 nodes co ordinates?

It would be of great learning, if explained.

Thanks and regards,

Arjun Arasan

Share this post


Link to post
Share on other sites
11 hours ago, ArjunArasan said:

Dear Tinh,

 

Thank you for the help.

 

could you please explain the logic behind them?

{


               eval *createvector 1 $Vector
               eval *createplane 1 [join [join $Plane]]

}

 

what does it do internally?

is it similar to our vector product of 2 vectors specified by 3 nodes co ordinates?

It would be of great learning, if explained.

Thanks and regards,

Arjun Arasan

 

 

Hi,

example Vector is {1 0 0} then "eval *createvector 1 $Vector" will be "*createvector 1 1 0 0"

if Plane is {{1 0 0} {0 0 0}} then "[join [join $Plane]]" will be "{1 0 0 0 0 0}"

and "eval *createplane 1 [join [join $Plane]]" will be "*createplane 1 1 0 0 0 0 0"

it is not vector product. It is tcl syntax that you can refer on tcl manual

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...