41
42
43
46
47
48
49#include "implicit_f.inc"
50#include "mvsiz_p.inc"
51#include "comlock.inc"
52
53
54
55#include "units_c.inc"
56
57
58
59 INTEGER, INTENT(IN) :: NEL
60 INTEGER, INTENT(IN) :: ISMSTR
61 INTEGER ITET,NGL(*)
63 . offg(*),volg(*),deltax(*), volg0(*)
64 TYPE(DT_), INTENT(INOUT) :: DT
65
66
67
68 INTEGER I,J,ICOUNT,LIST(MVSIZ)
70 . tet_colla(mvsiz),coef,def_v,al,min_aspect,min_defv
71
72 min_aspect = dt%BRICK_CST_COL_MIN
73 min_defv = dt%BRICK_CST_DEFV_MIN
74
75 IF(min_aspect==zero.AND.min_defv==zero) RETURN
76 IF(ismstr/=2.AND.ismstr/=12) RETURN
77 coef = one
78 IF (itet >0) coef = one/1.24/sqr3
79
80 IF (min_defv >zero) THEN
81 DO i=1,nel
82 IF (offg(i)>one.OR.offg(i)==zero) cycle
83 def_v = volg(i)/volg0(i)
84 IF (def_v < min_defv) THEN
85 offg(i) = two
86#include "lockon.inc"
87 CALL ancmsg(msgid=267,anmode=aninfo,
88 . i1=ngl(i),
89 . r1=def_v )
90#include "lockoff.inc"
91 END IF
92 END DO
93 END IF
94
95 IF (min_aspect>zero) THEN
96 icount = 0
97 DO i=1,nel
98 IF (offg(i)>one.OR.offg(i)==zero) cycle
99
100
101 tet_colla(i) = coef * sqrt(deltax(i)**3 / volg
102 IF (tet_colla(i) < min_aspect) THEN
103 offg(i) = two
104 icount=icount+1
105 list(icount)=i
106 END IF
107 END DO
108 IF (icount > 0) THEN
109#include "lockon.inc"
110 WRITE(iout,1000)
111 WRITE(istdo,1000)
112 DO j=1,icount
113 i=list(j)
114 WRITE(iout,'(6X,I10,1PG20.13)')ngl(i),tet_colla(i)
115 WRITE(istdo,'(6X,I10,1PG20.13)')ngl(i),tet_colla(i)
116 ENDDO
117 WRITE(iout,*)
118 WRITE(istdo,*)
119#include "lockoff.inc"
120 END IF
121 END IF
122
123 RETURN
124 1000 FORMAT(/
125 . 'THE FOLLOWING ELEMENTS WILL BE SWITCHED TO SMALL STRAIN DUE TO BAD ASPECT RATIO' /)
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)