36
37
38
39
40
41
42
43
44
45
46
47
48
50 USE multi_fvm_mod
52
53
54
55#include "implicit_f.inc"
56
57
58
59#include "com04_c.inc"
60#include "param_c.inc"
61
62
63
64 INTEGER,INTENT(IN) :: , NOINT, IDDLEVEL,ISTIFF
65 INTEGER,INTENT(IN) :: IBUFSSG(*), IXS(NIXS,NUMELS), IPM(NPROPMI,NUMMAT)
66 my_real,
INTENT(INOUT) :: global_gap
67 my_real,
INTENT(IN) :: x(3,numnod)
68 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
69 LOGICAL, INTENT(INOUT) :: IS_GAP_COMPUTED
70 my_real ,
INTENT(IN) :: pm(npropm,nummat)
71 my_real,
INTENT(INOUT) :: auto_rho, auto_length
72 TYPE(MULTI_FVM_STRUCT), INTENT(IN) :: MULTI_FVM
73
74
75
76 INTEGER :: I, J, J2, IEDG, CONNECT1(12), CONNECT2(12),IE,IMAT, ENUM, ILAW
82 my_real :: diag, diag_max , max_ratio, len_edge(12), lmax, lmin, ratio2
84 LOGICAL :: CHECK_ASPECT
85 CHARACTER(LEN=NCHARTITLE) :: MSGTITL
86 CHARACTER*10 :: CHAR_ID
87
88
89
90
91 is_gap_computed = .false.
92
93
94
95
96 IF(global_gap == zero)THEN
97
98
99 diag_max = em20
100 DO i=1,nbric
101 ie = ibufssg(i)
102 IF(ie==0)EXIT
103 max_x = -ep20
104 max_y = -ep20
105 max_z = -ep20
106 min_x = ep20
107 min_y = ep20
108 min_z = ep20
109 DO j=2,9
110 IF(ixs(j,ibufssg(i))==0)EXIT
111 xx = x(1,ixs(j,ie))
112 yy = x(2,ixs(j,ie))
113 zz = x(3,ixs(j,ie))
114 IF(xx < min_x)min_x=xx
115 IF(yy < min_y)min_y=yy
116 IF(zz < min_z)min_z=zz
117 IF(xx > max_x)max_x=xx
118 IF(yy > max_y)max_y=yy
119 IF(zz > max_z)max_z=zz
120 ENDDO
121 dx = min_x-max_x
122 dy = min_y-max_y
123 dz = min_z-max_z
124 diag = sqrt(dx*dx+dy*dy+dz*dz)
125 diag = sqrt(three)*diag
126 diag = half*diag
127 IF(diag > diag_max)diag_max=diag
128 END DO
129 global_gap = diag_max
130 auto_length = sqrt(three)*third*diag_max
131 is_gap_computed = .true.
132 ENDIF
133
134
135
136
137 rho_max = zero
138 IF(istiff == 2)THEN
139 rho_max=zero
140 DO i=1,nbric
141 ie=ibufssg(i)
142 IF(ie == 0)EXIT
143 imat=ixs(1,ie)
144 rho0=pm(89,imat)
145 ilaw=ipm(2,imat)
146 IF(ilaw == 51 .OR. ilaw == 151)THEN
147 rho_max =
max(rho_max,pm(91,imat))
148 ELSE
149 rho_max =
max(rho_max, rho0)
150 ENDIF
151 END DO
152 ENDIF
153 auto_rho = rho_max
154
155
156
157
158 check_aspect=.false.
159 IF(iddlevel==1 .AND. multi_fvm%IS_USED)check_aspect=.true.
160 IF (check_aspect)THEN
161
162 connect1(1:12)=(/1,1,1,2,2,3,3,4,5,5,6,7/)
163 connect2(1:12)=(/2,4,5,3,6,4,7,8,6,8,7,8/)
164 enum=0
165 DO i=1,nbric
166 DO iedg=1,12
167 j=1+connect1(iedg)
168 j2=1+connect2(iedg)
169 xx = x(1,ixs(j,ibufssg(i)))
170 yy = x(2,ixs(j,ibufssg(i)))
171 zz = x(3,ixs(j,ibufssg(i)))
172 xx2 = x(1,ixs(j2,ibufssg(i)))
173 yy2 = x(2,ixs(j2,ibufssg(i)))
174 zz2 = x(3,ixs(j2,ibufssg(i)))
175 dx = xx-xx2
176 dy = yy-yy2
177 dz = zz-zz2
178 len_edge(iedg) = dx*dx + dy*dy + dz*dz
179 ENDDO
180 lmin=minval(len_edge)
181 lmax=maxval(len_edge)
182 ratio2 = lmax/lmin
183 IF(ratio2 > 6.25 .AND. ENUM < 10)then
184 char_id=' '
185 WRITE(char_id,fmt='(I0)')ixs(11,ibufssg(i))
186 msgtitl='CHECK ASPECT RATIO CELL ID ='//char_id
187 CALL ancmsg(msgid=1826, msgtype=msgwarning, anmode=aninfo, i1=noint, c1=titr, c2=msgtitl)
188 enum=enum+1
189 ENDIF
190 IF(ENUM == 10)exit
191 ENDDO
192 ENDIF
193
194 RETURN
integer, parameter nchartitle
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)