39 SUBROUTINE hm_read_ale_grid(DT_INPUT, ALPHA, GAMMA, VGX, VGY, VGZ, VOLMIN, LSUBMODEL, UNITAB)
64#include "implicit_f.inc"
74 my_real,
INTENT(INOUT) :: dt_input,
alpha, gamma, vgx, vgy, vgz, volmin
75 TYPE(
submodel_data),
DIMENSION(NSUBMOD),
INTENT(IN) :: LSUBMODEL
80 INTEGER :: NALE_GRID, II, NITER,NTETRA4
82 LOGICAL :: IS_AVAILABLE
83 LOGICAL :: IS_DEFINED_ALE_GRID
84 INTEGER :: IS_DEF, IS_ROT
89 is_defined_ale_grid = .false.
102 CALL HM_OPTION_READ_KEY(LSUBMODEL, KEYWORD3 = KEY)
103 IF (KEY(1:5) == 'donea
') THEN
104 IS_DEFINED_ALE_GRID = .TRUE.
105 IF(NUMTETRA4 > 0) ALE%GLOBAL%NALENOVS=12
106 CALL HM_GET_FLOATV('alpha', ALPHA, IS_AVAILABLE, LSUBMODEL, UNITAB)
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.
119 CALL HM_GET_FLOATV('mat_eps
', ALPHA, IS_AVAILABLE, LSUBMODEL, UNITAB)
120 CALL HM_GET_FLOATV('mat_pc
', VOLMIN, IS_AVAILABLE, LSUBMODEL, UNITAB)
121 IF (ALPHA == ZERO) ALPHA = INFINITY
125 ELSEIF (KEY(1:6) == 'spring
') THEN
126 IS_DEFINED_ALE_GRID = .TRUE.
128 CALL ANCMSG(MSGID = 787, MSGTYPE=MSGERROR, ANMODE=ANINFO,C1='spring
')
132 CALL HM_GET_FLOATV('deltat
', ALPHA, IS_AVAILABLE, LSUBMODEL, UNITAB)
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.
143 CALL HM_GET_FLOATV('deltat_min
', ALPHA, IS_AVAILABLE, LSUBMODEL, UNITAB)
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)')
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)')
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)
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
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
192 ELSEIF (key(1:8) ==
'LAGRANGE')
THEN
193 is_defined_ale_grid = .true.
210 IF(nale_grid > 1)
THEN
212 CALL ancmsg(msgid = 1118, msgtype = msgerror, anmode = aninfo,
213 . c1=
'ONLY A SINGLE DEFINITION OF GRID SMOOTHING ALGORITHM IS ALLOWED')
subroutine contrl(multi_fvm, lsubmodel, is_dyna, detonators, user_windows, mat_elem, names_and_titles, lipart1, defaults, glob_therm, pblast, output)
subroutine hm_read_ale_grid(dt_input, alpha, gamma, vgx, vgy, vgz, volmin, lsubmodel, unitab)
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)