OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_ale_grid.F File Reference
#include "implicit_f.inc"
#include "param_c.inc"
#include "com01_c.inc"
#include "com04_c.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine hm_read_ale_grid (dt_input, alpha, gamma, vgx, vgy, vgz, volmin, lsubmodel, unitab)

Function/Subroutine Documentation

◆ hm_read_ale_grid()

subroutine hm_read_ale_grid ( intent(inout) dt_input,
intent(inout) alpha,
intent(inout) gamma,
intent(inout) vgx,
intent(inout) vgy,
intent(inout) vgz,
intent(inout) volmin,
type(submodel_data), dimension(nsubmod), intent(in) lsubmodel,
type(unit_type_), intent(in) unitab )

Definition at line 39 of file hm_read_ale_grid.F.

40C-----------------------------------------------
41C D e s c r i p t i o n
42C-----------------------------------------------
43C Input Reader for options /ALE/GRID/...
44C NWALE FORMULATION
45C 0 'DONEA'
46C 1 'DISP'
47C 2 'SPRING'
48C 3 'ZERO'
49C 4 'STANDARD'
50C 5 'LAPLACIAN'
51C 6 'VOLUME'
52C 7 'FLOW-TRACKING'
53C-----------------------------------------------
54C M o d u l e s
55C-----------------------------------------------
56 USE unitab_mod
58 USE submodel_mod
59 USE message_mod
60 USE ale_mod
61C-----------------------------------------------
62C I m p l i c i t T y p e s
63C-----------------------------------------------
64#include "implicit_f.inc"
65C-----------------------------------------------
66C C o m m o n B l o c k s
67C-----------------------------------------------
68#include "param_c.inc"
69#include "com01_c.inc"
70#include "com04_c.inc"
71C-----------------------------------------------
72C D u m m y A r g u m e n t s
73C-----------------------------------------------
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
77C-----------------------------------------------
78C L o c a l V a r i a b l e s
79C-----------------------------------------------
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
85C-----------------------------------------------
86C S o u r c e L i n e s
87C-----------------------------------------------
88! Initializations
89 is_defined_ale_grid = .false.
90 ale%GRID%NWALE = 0
91 alpha = zero
92 gamma = zero
93 vgx = zero
94 vgy = zero
95 vgz = zero
96 volmin = zero
97! Counting
98 CALL hm_option_count('/ALE/GRID', nale_grid)
99
100 CALL hm_option_start('/ALE/GRID')
101 DO ii = 1, nale_grid
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.
118 ale%GRID%NWALE = 1
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
122 vgx = one
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
130 ale%GRID%NWALE = 2
131 vgz = zero
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
138 dt_input = alpha
139 alpha = alpha / (-vgx + sqrt(vgx * vgx + one))
140 ELSEIF (key(1:8) == 'STANDARD') THEN
141 is_defined_ale_grid = .true.
142 ale%GRID%NWALE = 4
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)
147 IF (alpha == zero) alpha = zep9
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.
160 ale%GRID%NWALE = 3
161 ELSEIF (key(1:9) == 'LAPLACIAN') THEN
162 is_defined_ale_grid = .true.
163 ale%GRID%NWALE = 5
164 CALL hm_get_floatv('LAMBDA', alpha, is_available, lsubmodel, unitab)
165 CALL hm_get_intv('Niter', niter, is_available, lsubmodel)
166 gamma = zero
167 vgx = niter
168 alpha = max(zero, min(alpha, ep06))
169 IF (alpha == zero) alpha = one
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.
175 ale%GRID%NWALE = 6
176 ELSEIF (key(1:13) == 'FLOW-TRACKING') THEN
177 is_defined_ale_grid = .true.
178 ale%GRID%NWALE = 7
179 CALL hm_get_intv('IS_DEF', is_def, is_available, lsubmodel)
180 CALL hm_get_intv('IS_ROT', is_rot, is_available, lsubmodel)
181 CALL hm_get_floatv('SCALE_DEF', alpha, is_available, lsubmodel, unitab)
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 !value different than expected values leads to default value
187 IF (alpha == zero) alpha = one
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.
194 ale%GRID%NWALE = 8
195 ELSE
196 !invalid keyword : error message managed by Reader itself
197 ENDIF
198
199 ENDDO
200
201 ! NO /ALE/GRID formulation => DEFAULT:'DISP' & its default values are set here
202 IF(.NOT. is_defined_ale_grid .OR. nale_grid == 0)THEN
203 ale%GRID%NWALE = 1
204 alpha = infinity
205 vgx = one
206 vgy = one
207 vgz = one
208 ENDIF
209
210 IF(nale_grid > 1)THEN
211 ! multiple definition of /ALE/GRID : error message eliminates any ambiguity
212 CALL ancmsg(msgid = 1118, msgtype = msgerror, anmode = aninfo,
213 . c1='ONLY A SINGLE DEFINITION OF GRID SMOOTHING ALGORITHM IS ALLOWED')
214 ENDIF
215
#define my_real
Definition cppsort.cpp:32
#define alpha
Definition eval.h:35
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)
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21
type(ale_) ale
Definition ale_mod.F:249
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)
Definition message.F:889