35
36
37
38
39
40
41
42
43
44
45
46
50
51
52
53#include "implicit_f.inc"
54
55
56
57 INTEGER,INTENT(IN) :: NSURF,NUMNOD
58 INTEGER, INTENT(IN) :: NB_CELL_X,NB_CELL_Y,NB_CELL_Z
59 INTEGER, INTENT(IN) :: SURFACE_NUMBER
60 TYPE(array_type), DIMENSION(SURFACE_NUMBER), INTENT(INOUT) :: CELL
61 my_real,
DIMENSION(6),
INTENT(IN) :: min_max_position
62 my_real,
DIMENSION(3,NUMNOD),
INTENT(IN) :: x
63 INTEGER, DIMENSION(3,NUMNOD), INTENT(INOUT) :: CELL_POSITION
64 TYPE (SURF_), DIMENSION(NSURF), INTENT(IN) :: IGRSURF
65 TYPE (INIVOL_STRUCT_), INTENT(IN) :: INIVOL
66 INTEGER, INTENT(IN) :: ALE_NODE_NUMBER
67 INTEGER, DIMENSION(ALE_NODE_NUMBER), INTENT(IN) :: LIST_ALE_NODE
68
69
70
71 INTEGER :: I,J,K
72 INTEGER :: II,JJ,KK
73 INTEGER, DIMENSION(5) :: IX,IY,IZ
74 INTEGER :: SURFACE_ID,SURFACE_NODE_NUMBER,SURFACE_TYPE
75 INTEGER, DIMENSION(4) :: NODE_ID
76 INTEGER :: LOW_X,UP_X
77 INTEGER :: LOW_Y,UP_Y
78 INTEGER :: LOW_Z,UP_Z
81
82
83
84 xmax = min_max_position(4)
85 xmin = min_max_position(1)
86 ymax = min_max_position(5)
87 ymin = min_max_position(2)
88 zmax = min_max_position(6)
89 zmin = min_max_position(3)
90
91
92
93
94 DO i=1,surface_number
95
96
97 cell(i)%SIZE_INT_ARRAY_3D(1) = nb_cell_x
98 cell(i)%SIZE_INT_ARRAY_3D(2) = nb_cell_y
99 cell(i)%SIZE_INT_ARRAY_3D(3) = nb_cell_z
101 cell(i)%INT_ARRAY_3D(1:nb_cell_x,1:nb_cell_y,1:nb_cell_z) = 0
102
103
104
105 surface_id =
inivol%CONTAINER(i)%SURF_ID
106 surface_node_number = igrsurf(surface_id)%NSEG
107 surface_type = igrsurf(surface_id)%TYPE
108 IF(surface_type/=200.AND.surface_type/=101) THEN
109 DO k=1,surface_node_number
110
111
112 DO j=1,4
113 node_id(j) = igrsurf(surface_id)%NODES(k,j)
114 ix(j)=
max(1,1+int(nb_cell_x*(x(1,node_id(j))-xmin)/(xmax-xmin)))
115 iy(j)=
max(1,1+int(nb_cell_y*(x(2,node_id(j))-ymin)/(
ymax-ymin)))
116 iz(j)=
max(1,1+int(nb_cell_z*(x(3,node_id
117 ENDDO
118 ix(5) = ix(1)
119 iy(5) = iy(1)
120 iz(5) = iz(1)
121
122
123
124
125
126
127
128
129
130
131
132 ! c | | | |
133
134
135 low_x = nb_cell_x + 1
136 up_x = -1
137 low_y = nb_cell_y + 1
138 up_y = -1
139 low_z = nb_cell_z + 1
140 up_z = -1
141 DO j=1,4
142 low_z =
min(low_z,iz(j))
143 up_z =
max(up_z,iz(j+1))
144 low_y =
min(low_y,iy(j))
145 up_y =
max(up_y,iy(j+1))
146 low_x =
min(low_x,ix(j))
147 up_x =
max(up_x,ix(j+1))
148 ENDDO
150 up_z =
min(nb_cell_z,up_z)
152 up_y =
min(nb_cell_y,up_y)
154 up_x =
min(nb_cell_x,up_x)
155
156 DO kk=low_z,up_z
157 DO jj=low_y,up_y
158 DO ii=low_x,up_x
159
160
161 IF(cell(i)%INT_ARRAY_3D(ii,jj,kk)/=2) THEN
162 cell(i)%INT_ARRAY_3D(ii,jj,kk) = 2
163 ENDIF
164
165 ENDDO
166 ENDDO
167 ENDDO
168
169 ENDDO
170
171 ENDIF
172 ENDDO
173
174
175
176
177 DO j=1,ale_node_number
178 i = list_ale_node(j)
179 cell_position(1,i) =
max(1,1+int(nb_cell_x*(x(1,i)-xmin)/(xmax-xmin)))
180 cell_position(2,i) =
max(1,1+int(nb_cell_y*(x(2,i)-ymin)/(
ymax-ymin)))
181 cell_position(3,i) =
max(1,1+int(nb_cell_z*(x(3,i)-zmin)/(zmax-zmin)))
182
183
184
185 cell_position(1,i) =
min(cell_position(1,i)
186 cell_position(2,i) =
min(cell_position(2,i),nb_cell_y)
187 cell_position(3,i) =
min(cell_position(3,i),nb_cell_z)
188 ENDDO
189
190
191 RETURN
subroutine ymax(idn, fac, npc, pld, stiffmin, stiffmax, stiffini, stiffavg)
subroutine alloc_3d_array(this)
type(inivol_struct_), dimension(:), allocatable inivol