30 . ELEMENT_SIZE,MIN_MAX_POSITION,X,
31 . ALE_ELEMENT_NUMBER,ALE_NODE_NUMBER,LIST_ALE_NODE)
39! - loop over
the element group
40! -
for each ale element group, loop over
the nel elements
41! - compute
the maximum element
size
47#include "implicit_f.inc"
55 INTEGER,
INTENT(IN) :: NPARG, NGROUP, NUMELS,NUMELTG,NUMELQ,NUMNOD,N2D
56 INTEGER,
INTENT(INOUT) :: ALE_ELEMENT_NUMBER
57 INTEGER,
INTENT(INOUT) :: ALE_NODE_NUMBER
58 INTEGER,
DIMENSION(NUMNOD),
INTENT(INOUT) ::
59 INTEGER,
DIMENSION(NPARG,NGROUP),
INTENT(IN) :: IPARG
60 INTEGER,
DIMENSION(NIXS,NUMELS),
INTENT(IN),
TARGET :: IXS
61 INTEGER,
DIMENSION(NIXQ,NUMELQ),
INTENT(IN),
TARGET :: IXQ
62 INTEGER,
DIMENSION(NIXTG,NUMELTG),
INTENT(IN),
TARGET :: IXTG
63 my_real,
INTENT(INOUT) :: element_size
64 my_real,
DIMENSION(6),
INTENT(INOUT) :: min_max_position
65 my_real,
DIMENSION(3,NUMNOD),
INTENT(IN) :: x
70 INTEGER :: MTN,NEL,NFT,ITY,ISOLNOD,INIVOL
71 INTEGER :: NODE_NUMBER,FIRST
72 INTEGER,
DIMENSION(:,:),
POINTER :: IX
73 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TAG_ARRAY
75 my_real,
DIMENSION(3) :: max_node,min_node,distance
76 integer,
target :: nothing(1,1)
78 ALLOCATE(tag_array(numnod))
79 tag_array(1:numnod) = 0
82 min_max_position(1:3) = ep30
83 min_max_position(4:6) = -ep30
84 ale_element_number = 0
93 isolnod = iparg(28,ng)
96 IF(mtn /= 51 .AND. mtn /= 151) cycle
97 IF(n2d == 0 .AND. ity /= 1)
THEN
99 ELSEIF(n2d > 0 .AND. ity/=7 .AND. ity /= 2)
THEN
103 ale_element_number = ale_element_number + nel
110 ix => ixs(1:node_number+1,nft+1:nft+nel)
111 ELSEIF(ity == 2)
THEN
114 ix => ixq(1:node_number+1,nft+1:nft+nel)
115 ELSEIF(ity == 7)
THEN
118 ix => ixtg(1:node_number+1,nft+1:nft+nel)
121 node_number = -huge(node_number)
130 max_node(1:3) = -ep20
135 max_node(first:3) =
max(max_node(first:3),x(first:3,ix
136 min_node(first:3) =
min(min_node(first:3),x(first:3,ix(1+i,j)) )
138 distance(first:3) = (abs(max_node(first:3)-min_node(first:3)))**2
139 local_size = sqrt( sum(distance(first:3)) )
140 element_size =
max(element_size,local_size)
147 min_max_position(k) =
min(min_max_position(k),x(k,ix(1+i,j)))
148 min_max_position(3+k) =
max(min_max_position(3+k),x(k,ix(1+i,j)))
149 IF(tag_array(ix(1+i,j))==0)
THEN
150 tag_array(ix(1+i,j)) = 1
151 ale_node_number = ale_node_number + 1
152 list_ale_node(ale_node_number) = ix(1+i,j)
161 DEALLOCATE(tag_array)
subroutine ale_element_size_computation(nparg, ngroup, numels, numeltg, numelq, numnod, n2d, iparg, ixs, ixq, ixtg, element_size, min_max_position, x, ale_element_number, ale_node_number, list_ale_node)