40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
61
62
63
64#include "implicit_f.inc"
65
66
67
68#include "param_c.inc"
69#include "com01_c.inc"
70#include "com04_c.inc"
71
72
73
74 my_real,
INTENT(INOUT) :: dt_input,
alpha, gamma, vgx, vgy, vgz, volmin
75 TYPE(SUBMODEL_DATA), DIMENSION(NSUBMOD), INTENT(IN) :: LSUBMODEL
76 TYPE(UNIT_TYPE_), INTENT(IN) :: UNITAB
77
78
79
80 INTEGER :: NALE_GRID, II, NITER,NTETRA4
81 CHARACTER :: KEY*32
82 LOGICAL :: IS_AVAILABLE
83 LOGICAL :: IS_DEFINED_ALE_GRID
84 INTEGER :: IS_DEF, IS_ROT
85
86
87
88
89 is_defined_ale_grid = .false.
92 gamma = zero
93 vgx = zero
94 vgy = zero
95 vgz = zero
96 volmin = zero
97
99
101 DO ii = 1, nale_grid
103 IF (key(1:5) == 'DONEA') THEN
104 is_defined_ale_grid = .true.
105 IF(numtetra4 > 0)
ale%GLOBAL%NALENOVS=12
107 CALL hm_get_floatv(
'GAMMA', gamma, is_available, lsubmodel, unitab)
108 CALL hm_get_floatv(
'VEL_X', vgx, is_available, lsubmodel, unitab)
109 CALL hm_get_floatv(
'VEL_Y', vgy, is_available, lsubmodel, unitab)
110 CALL hm_get_floatv(
'VEL_Z', vgz, is_available, lsubmodel, unitab)
111 CALL hm_get_floatv(
'MINI', volmin, is_available, lsubmodel, unitab)
112 IF (gamma == zero) gamma = hundred
113 IF (vgx == zero) vgx = one
114 IF (vgy == zero) vgy = one
115 IF (vgz == zero) vgz = one
116 ELSEIF (key(1:4) == 'DISP') THEN
117 is_defined_ale_grid = .true.
120 CALL hm_get_floatv(
'MAT_PC', volmin, is_available, lsubmodel, unitab)
122 vgx
123 vgy = one
124 vgz = one
125 ELSEIF (key(1:6) == 'SPRING') THEN
126 is_defined_ale_grid = .true.
127 IF (n2d /= 0) THEN
128 CALL ancmsg(msgid = 787, msgtype=msgerror, anmode=aninfo,c1=
'SPRING')
129 ENDIF
131 vgz = zero
133 CALL hm_get_floatv(
'MAT_GAMA0', gamma, is_available, lsubmodel, unitab)
134 CALL hm_get_floatv(
'DAMP1', vgx, is_available, lsubmodel, unitab)
135 CALL hm_get_floatv(
'Nu_l', vgy, is_available, lsubmodel, unitab)
136 IF (vgx == zero) vgx = half
137 IF (vgy == zero) vgy = one
139 alpha =
alpha / (-vgx + sqrt(vgx * vgx + one))
140 ELSEIF (key(1:8) == 'STANDARD') THEN
141 is_defined_ale_grid = .true.
144 CALL hm_get_floatv(
'MAT_GAMAi', gamma, is_available, lsubmodel, unitab)
145 CALL hm_get_floatv(
'DAMP4', vgx, is_available, lsubmodel, unitab)
146 CALL hm_get_floatv(
'Nu_g', vgy, is_available, lsubmodel, unitab)
148 IF (gamma == zero) gamma = em02
149 IF (vgx == zero) vgx = em02
150 IF (vgy == zero) THEN
151 CALL ancmsg(msgid = 1119, msgtype = msgerror, anmode = aninfo,
152 . c1='** CRITICAL ELEMENT SIZE MUST BE DEFINED (4TH FIELD)')
153 ENDIF
154 IF (gamma < zero .OR. gamma > one) THEN
155 CALL ancmsg(msgid = 1119, msgtype = msgerror, anmode = aninfo,
156 . c1='** NON-LINEAR FACTOR MUST BE BETWEEN 0 AND 1 (2ND FIELD)')
157 ENDIF
158 ELSEIF (key(1:4) == 'ZERO') THEN
159 is_defined_ale_grid = .true.
161 ELSEIF (key(1:9) == 'LAPLACIAN') THEN
162 is_defined_ale_grid = .true.
165 CALL hm_get_intv(
'Niter', niter, is_available, lsubmodel)
166 gamma = zero
167 vgx = niter
170 IF (gamma == zero) gamma = one
171 IF (gamma /= one .AND. gamma /= two) gamma = one
172 IF (vgx <= zero) vgx = one
173 ELSEIF (key(1:6) == 'VOLUME') THEN
174 is_defined_ale_grid = .true.
176 ELSEIF (key(1:13) == 'FLOW-TRACKING') THEN
177 is_defined_ale_grid = .true.
179 CALL hm_get_intv(
'IS_DEF', is_def, is_available, lsubmodel)
180 CALL hm_get_intv(
'IS_ROT', is_rot, is_available, lsubmodel)
182 CALL hm_get_floatv(
'SCALE_ROT', gamma, is_available, lsubmodel, unitab)
183 IF(is_def == 0)is_def = 1
184 IF(is_def /= 1 .AND. is_def /= -1)is_def = 1 !value different than expected values leads to default value
185 IF(is_rot == 0)is_rot = 1
186 IF(is_rot /= 1 .AND. is_rot /= -1)is_rot = 1
188 IF (gamma == zero) gamma = one
189 vgx = is_def
190 vgy = is_rot
191 vgz = zero
192 ELSEIF (key(1:8) == 'LAGRANGE') THEN
193 is_defined_ale_grid = .true.
195 ELSE
196
197 ENDIF
198
199 ENDDO
200
201
202 IF(.NOT. is_defined_ale_grid .OR. nale_grid == 0)THEN
205 vgx = one
206 vgy = one
207 vgz = one
208 ENDIF
209
210 IF(nale_grid > 1)THEN
211
212 CALL ancmsg(msgid = 1118, msgtype = msgerror, anmode = aninfo,
213 . c1='ONLY A SINGLE DEFINITION OF GRID SMOOTHING ALGORITHM IS ALLOWED')
214 ENDIF
215
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_count(entity_type, hm_option_number)
subroutine hm_option_start(entity_type)
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)