36 module mod_ui_parse_system
38 use mod_nts_parse_block
39 use mod_nts_parse_path
40 use mod_ui_read_solver
41 use mod_ui_system_state
46 logical recursive function ui_parse_system(parser, tok, keyword_id)
result(keyword_id_found)
54 type(t_parser) :: parser
55 type(t_token),
intent(in) :: tok
56 integer,
intent(in) :: keyword_id
58 type(t_token) :: tok_brace, tok_test_case
59 type(t_token) :: tok_next
61 keyword_id_found = .true.
63 select case(keyword_id)
64 case(kw_output_directory)
66 call nts_expect(parser, tk_semicolon)
68 case(kw_measure_cpu_time)
69 is_cpu_time_measuring = .true.
70 call nts_expect(parser, tk_semicolon)
72 case(kw_measure_time_iteration_cpu_time)
73 is_cpu_time_time_iteration_measuring = .true.
74 call nts_expect(parser, tk_semicolon)
76 case(kw_write_cpu_time)
77 is_cpu_time_writing = .true.
78 call nts_expect(parser, tk_semicolon)
80 case(kw_enable_checkpoint)
82 call nts_expect(parser, tk_semicolon)
84 case(kw_checkpoint_frequency)
86 call nts_expect(parser, tk_semicolon)
88 case(kw_checkpoint_metric)
89 call nts_get_keyword(parser, tok_next)
91 select case(tok_next%keyword_id)
93 checkpoint_metric = checkpoint_metric_cpu_time
94 case(kw_time_iteration)
95 checkpoint_metric = checkpoint_metric_time_iteration
97 call parser%throw_error(tok,
"checkpoint_metric expect 'checkpoint_metric_cpu_time' or 'checkpoint_metric_time_iteration'")
100 case(kw_enable_initial_conditions_checkpoint)
102 call nts_expect(parser, tk_semicolon)
104 case(kw_enable_last_iteration_checkpoint)
106 call nts_expect(parser, tk_semicolon)
108 case(kw_checkpoint_max_files)
110 call nts_expect(parser, tk_semicolon)
112 if (checkpoint_n_files < 2)
call parser%throw_error(tok,
"'checkpoint_max_files' must be ≥ 2")
114 case(kw_checkpoint_name)
116 call nts_expect(parser, tk_semicolon)
118 ui_is_checkpoint_file_read = .true.
121 restart_filename = nts_parse_path(parser)
122 call nts_expect(parser, tk_semicolon)
127 call nts_peek(parser, tok_test_case)
129 if (.not. nts_next_token(parser, tk_keyword))
then 130 call parser%throw_error(tok,
"test case keyword expected (ie. tc_poiseuille) but got a '"// &
131 trim(token_id_to_string(tok_test_case%kind))//
"' instead")
134 select case(tok_test_case%keyword_id)
135 case(kw_tc_channel_3d)
136 test_case = test_case_channel_3d
137 case(kw_tc_backward_facing_step_axisymmetric)
138 test_case = test_case_ibm_backward_facing_step_axisymmetric
139 case(kw_tc_lagrangian_particles)
140 test_case = test_case_lagrangian_particles
141 case(kw_tc_linear_system_test)
142 test_case = test_case_linear_system_test
143 call nts_peek(parser, tok_brace)
144 call nts_expect(parser, tk_left_brace)
145 call parser%new_scope(tok_brace)
147 case(kw_tc_species_transport)
148 test_case = test_case_species_transport
149 case(kw_tc_plane_turbulent_channel)
150 test_case = test_case_plane_turbulent_channel
151 case(kw_tc_poiseuille_rayleigh_benard)
152 test_case = test_case_poiseuille_rayleigh_benard
153 case(kw_tc_poiseuille_viscosity)
154 test_case = test_case_poiseuille_viscosity
155 case(kw_tc_solitary_wave_periodic)
156 test_case = test_case_solitary_wave_periodic
157 case(kw_tc_solitary_wave_wall)
158 test_case = test_case_solitary_wave_wall
159 case(kw_tc_standing_wave)
160 test_case = test_case_standing_wave
161 case(kw_tc_thermal_contact_resistance)
162 test_case = test_case_thermal_contact_resistance
164 case(kw_tc_bubble_rise)
165 test_case = test_case_bubble_rise
166 case(kw_tc_jet_buckling)
167 test_case = test_case_jet_buckling
169 call parser%throw_error(tok_test_case,
"keyword '"//ui_keywords(tok_test_case%keyword_id)%name//&
170 "' is not a valid test case keyword")
173 call nts_expect(parser, tk_semicolon)
175 is_test_case_mode = .true.
177 case(kw_test_case_switch)
181 call parser%throw_error(tok,
"invalid keyword '"//parser%lex%keywords(tok%keyword_id)%name//
"' in system block")
182 keyword_id_found = .false.
184 end function ui_parse_system
187 logical recursive function ui_test_case_linear_system_test(parser, tok, keyword_id)
result(keyword_id_found)
188 use variables_test_case_linear_system_test
190 type(t_parser) :: parser
191 type(t_token),
intent(in) :: tok
192 integer,
intent(in) :: keyword_id
194 character(len=:),
allocatable :: stl_type
196 keyword_id_found = .true.
198 select case(keyword_id)
199 case(kw_stencil_type)
201 select case (stl_type)
203 ls_test_stencil_type = stencil_1_star
205 ls_test_stencil_type = stencil_1_square
207 ls_test_stencil_type = stencil_2_star
209 ls_test_stencil_type = stencil_2_square
211 call parser%throw_error(tok,
"unknown stencil type: "//stl_type)
213 call nts_expect(parser, tk_semicolon)
216 call ui_read_solver(parser, ls_test_solver)
219 keyword_id_found = .false.
221 end function ui_test_case_linear_system_test
223 end module mod_ui_parse_system
Declaration variables associated to checkpoint/restart.
Variables for CPU time measurement in different part of the code.
recursive logical function nts_evaluate_boolean_expression(parser)
Evaluate a boolean expression.
Define variables of the core library.
recursive integer function nts_evaluate_integer_expression(parser)
Evaluate an integer expression.
recursive subroutine nts_parse_block(parser, block_reader)
Read a new block.
recursive character(len=:) function, allocatable nts_evaluate_string_expression(parser)
Evaluate a string precision expression.
Define variables associated to outputs.
Define variables associated to test cases setup.