Neko 1.99.1
A portable framework for high-order spectral element flow simulations
Loading...
Searching...
No Matches
scalar_pnpn.f90
Go to the documentation of this file.
1! Copyright (c) 2022-2024, The Neko Authors
2! All rights reserved.
3!
4! Redistribution and use in source and binary forms, with or without
5! modification, are permitted provided that the following conditions
6! are met:
7!
8! * Redistributions of source code must retain the above copyright
9! notice, this list of conditions and the following disclaimer.
10!
11! * Redistributions in binary form must reproduce the above
12! copyright notice, this list of conditions and the following
13! disclaimer in the documentation and/or other materials provided
14! with the distribution.
15!
16! * Neither the name of the authors nor the names of its
17! contributors may be used to endorse or promote products derived
18! from this software without specific prior written permission.
19!
20! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21! "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22! LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23! FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24! COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25! INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
26! BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27! LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28! CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29! LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
30! ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31! POSSIBILITY OF SUCH DAMAGE.
32!
34
36 use num_types, only: rp
37 use, intrinsic :: iso_fortran_env, only: error_unit
39 rhs_maker_ext_fctry, rhs_maker_bdf_fctry, rhs_maker_oifs_fctry
41 use checkpoint, only : chkp_t
42 use field, only : field_t
43 use bc_list, only : bc_list_t
44 use mesh, only : mesh_t
45 use coefs, only : coef_t
47 use gather_scatter, only : gs_t, gs_op_add
48 use scalar_residual, only : scalar_residual_t, scalar_residual_factory
49 use ax_product, only : ax_t, ax_helm_factory
53 use krylov, only : ksp_monitor_t
57 use projection, only : projection_t
58 use math, only : glsc2, col2, add2s2
60 use advection, only : advection_t, advection_factory
63 use json_module, only : json_file, json_core, json_value
64 use user_intf, only : user_t
69 use time_state, only : time_state_t
70 use bc, only : bc_t
71 use comm, only : neko_comm
72 use mpi_f08, only : mpi_allreduce, mpi_integer, mpi_max
73 implicit none
74 private
75
76
77 type, public, extends(scalar_scheme_t) :: scalar_pnpn_t
78
80 type(field_t) :: s_res
81
83 type(field_t) :: ds
84
86 class(ax_t), allocatable :: ax
87
89 type(projection_t) :: proj_s
90
94 type(zero_dirichlet_t) :: bc_res
95
100 type(bc_list_t) :: bclst_ds
101
103 class(advection_t), allocatable :: adv
104
105 ! Time interpolation scheme
106 logical :: oifs
107
108 ! Advection terms for the oifs method
109 type(field_t) :: advs
110
112 class(scalar_residual_t), allocatable :: res
113
115 class(rhs_maker_ext_t), allocatable :: makeext
116
118 class(rhs_maker_bdf_t), allocatable :: makebdf
119
121 class(rhs_maker_oifs_t), allocatable :: makeoifs
122
124 type(field_t) :: abx1, abx2
125
126 contains
128 procedure, pass(this) :: init => scalar_pnpn_init
130 procedure, pass(this) :: restart => scalar_pnpn_restart
132 procedure, pass(this) :: free => scalar_pnpn_free
134 procedure, pass(this) :: step => scalar_pnpn_step
136 procedure, pass(this) :: setup_bcs_ => scalar_pnpn_setup_bcs_
138 end type scalar_pnpn_t
139
140 interface
141
147 module subroutine bc_factory(object, scheme, json, coef, user)
148 class(bc_t), pointer, intent(inout) :: object
149 type(scalar_pnpn_t), intent(in) :: scheme
150 type(json_file), intent(inout) :: json
151 type(coef_t), intent(in) :: coef
152 type(user_t), intent(in) :: user
153 end subroutine bc_factory
154 end interface
155
156contains
157
170 subroutine scalar_pnpn_init(this, msh, coef, gs, params, numerics_params, &
171 user, chkp, ulag, vlag, wlag, time_scheme, rho)
172 class(scalar_pnpn_t), target, intent(inout) :: this
173 type(mesh_t), target, intent(in) :: msh
174 type(coef_t), target, intent(in) :: coef
175 type(gs_t), target, intent(inout) :: gs
176 type(json_file), target, intent(inout) :: params
177 type(json_file), target, intent(inout) :: numerics_params
178 type(user_t), target, intent(in) :: user
179 type(chkp_t), target, intent(inout) :: chkp
180 type(field_series_t), target, intent(in) :: ulag, vlag, wlag
181 type(time_scheme_controller_t), target, intent(in) :: time_scheme
182 type(field_t), target, intent(in) :: rho
183 integer :: i
184 class(bc_t), pointer :: bc_i
185 character(len=15), parameter :: scheme = 'Modular (Pn/Pn)'
186 logical :: advection
187
188 call this%free()
189
190 ! Initiliaze base type.
191 call this%scheme_init(msh, coef, gs, params, scheme, user, rho)
192
193 ! Setup backend dependent Ax routines
194 call ax_helm_factory(this%ax, full_formulation = .false.)
195
196 ! Setup backend dependent scalar residual routines
197 call scalar_residual_factory(this%res)
198
199 ! Setup backend dependent summation of extrapolation scheme
200 call rhs_maker_ext_fctry(this%makeext)
201
202 ! Setup backend dependent contributions to F from lagged BD terms
203 call rhs_maker_bdf_fctry(this%makebdf)
204
205 ! Setup backend dependent contributions of the OIFS scheme
206 call rhs_maker_oifs_fctry(this%makeoifs)
207
208 ! Initialize variables specific to this plan
209 associate(xh_lx => this%Xh%lx, xh_ly => this%Xh%ly, xh_lz => this%Xh%lz, &
210 dm_xh => this%dm_Xh, nelv => this%msh%nelv)
211
212 call this%s_res%init(dm_xh, "s_res")
213
214 call this%abx1%init(dm_xh, trim(this%name)//"_abx1")
215 call neko_field_registry%add_field(dm_xh, trim(this%name)//"_abx1", ignore_existing = .true.)
216
217 call this%abx2%init(dm_xh, trim(this%name)//"_abx2")
218 call neko_field_registry%add_field(dm_xh, trim(this%name)//"_abx2", ignore_existing = .true.)
219
220 call this%advs%init(dm_xh, "advs")
221
222 call this%ds%init(dm_xh, 'ds')
223
224 end associate
225
226 ! Set up boundary conditions
227 call this%setup_bcs_(user)
228
229 ! Initialize dirichlet bcs for scalar residual
230 call this%bc_res%init(this%c_Xh, params)
231 do i = 1, this%bcs%size()
232 if (this%bcs%strong(i)) then
233 bc_i => this%bcs%get(i)
234 call this%bc_res%mark_facets(bc_i%marked_facet)
235 end if
236 end do
237
238! call this%bc_res%mark_zones_from_list('d_s', this%bc_labels)
239 call this%bc_res%finalize()
240
241 call this%bclst_ds%init()
242 call this%bclst_ds%append(this%bc_res)
243
244
245 ! Initialize projection space
246 call this%proj_s%init(this%dm_Xh%size(), this%projection_dim, &
247 this%projection_activ_step)
248
249 ! Determine the time-interpolation scheme
250 call json_get_or_default(params, 'case.numerics.oifs', this%oifs, .false.)
251 ! Point to case checkpoint
252 this%chkp => chkp
253 ! Initialize advection factory
254 call json_get_or_default(params, 'advection', advection, .true.)
255
256 call advection_factory(this%adv, numerics_params, this%c_Xh, &
257 ulag, vlag, wlag, this%chkp%dtlag, &
258 this%chkp%tlag, time_scheme, .not. advection, &
259 this%slag)
260 end subroutine scalar_pnpn_init
261
262 ! Restarts the scalar from a checkpoint
263 subroutine scalar_pnpn_restart(this, chkp)
264 class(scalar_pnpn_t), target, intent(inout) :: this
265 type(chkp_t), intent(inout) :: chkp
266 real(kind=rp) :: dtlag(10), tlag(10)
267 integer :: n
268 type(field_t), pointer :: temp_field
269 dtlag = chkp%dtlag
270 tlag = chkp%tlag
271
272 n = this%s%dof%size()
273
274 ! Lag fields are restored through the checkpoint's fsp mechanism
275
276 call col2(this%s%x, this%c_Xh%mult, n)
277 call col2(this%slag%lf(1)%x, this%c_Xh%mult, n)
278 call col2(this%slag%lf(2)%x, this%c_Xh%mult, n)
279 if (neko_bcknd_device .eq. 1) then
280 call device_memcpy(this%s%x, this%s%x_d, &
281 n, host_to_device, sync = .false.)
282 call device_memcpy(this%slag%lf(1)%x, this%slag%lf(1)%x_d, &
283 n, host_to_device, sync = .false.)
284 call device_memcpy(this%slag%lf(2)%x, this%slag%lf(2)%x_d, &
285 n, host_to_device, sync = .false.)
286 call device_memcpy(this%abx1%x, this%abx1%x_d, &
287 n, host_to_device, sync = .false.)
288 call device_memcpy(this%abx2%x, this%abx2%x_d, &
289 n, host_to_device, sync = .false.)
290 call device_memcpy(this%advs%x, this%advs%x_d, &
291 n, host_to_device, sync = .false.)
292 end if
293
294 call this%gs_Xh%op(this%s, gs_op_add)
295 call this%gs_Xh%op(this%slag%lf(1), gs_op_add)
296 call this%gs_Xh%op(this%slag%lf(2), gs_op_add)
297
298 end subroutine scalar_pnpn_restart
299
300 subroutine scalar_pnpn_free(this)
301 class(scalar_pnpn_t), intent(inout) :: this
302
303 !Deallocate scalar field
304 call this%scheme_free()
305
306 call this%bclst_ds%free()
307 call this%proj_s%free()
308
309 call this%s_res%free()
310
311 call this%ds%free()
312
313 call this%abx1%free()
314 call this%abx2%free()
315
316 call this%advs%free()
317
318 if (allocated(this%Ax)) then
319 deallocate(this%Ax)
320 end if
321
322 if (allocated(this%res)) then
323 deallocate(this%res)
324 end if
325
326 if (allocated(this%makeext)) then
327 deallocate(this%makeext)
328 end if
329
330 if (allocated(this%makebdf)) then
331 deallocate(this%makebdf)
332 end if
333
334 if (allocated(this%makeoifs)) then
335 deallocate(this%makeoifs)
336 end if
337
338 end subroutine scalar_pnpn_free
339
340 subroutine scalar_pnpn_step(this, time, ext_bdf, dt_controller, &
341 ksp_results)
342 class(scalar_pnpn_t), intent(inout) :: this
343 type(time_state_t), intent(in) :: time
344 type(time_scheme_controller_t), intent(in) :: ext_bdf
345 type(time_step_controller_t), intent(in) :: dt_controller
346 type(ksp_monitor_t), intent(inout) :: ksp_results
347 ! Number of degrees of freedom
348 integer :: n
349
350 n = this%dm_Xh%size()
351
352 call profiler_start_region(trim(this%name), 2)
353 associate(u => this%u, v => this%v, w => this%w, s => this%s, &
354 cp => this%cp, rho => this%rho, lambda_tot => this%lambda_tot, &
355 ds => this%ds, &
356 s_res => this%s_res, &
357 ax => this%Ax, f_xh => this%f_Xh, xh => this%Xh, &
358 c_xh => this%c_Xh, dm_xh => this%dm_Xh, gs_xh => this%gs_Xh, &
359 slag => this%slag, oifs => this%oifs, &
360 projection_dim => this%projection_dim, &
361 msh => this%msh, res => this%res, makeoifs => this%makeoifs, &
362 makeext => this%makeext, makebdf => this%makebdf, &
363 t => time%t, tstep => time%tstep, dt => time%dt)
364
365 ! Logs extra information the log level is NEKO_LOG_DEBUG or above.
366 call print_debug(this)
367 ! Compute the source terms
368 call this%source_term%compute(time)
369
370 ! Apply weak boundary conditions, that contribute to the source terms.
371 call this%bcs%apply_scalar(this%f_Xh%x, dm_xh%size(), time, .false.)
372
373 if (oifs) then
374 ! Add the advection operators to the right-hans-side.
375 call this%adv%compute_scalar(u, v, w, s, this%advs, &
376 xh, this%c_Xh, dm_xh%size())
377
378 call makeext%compute_scalar(this%abx1, this%abx2, f_xh%x, &
379 rho%x(1,1,1,1), ext_bdf%advection_coeffs, n)
380
381 call makeoifs%compute_scalar(this%advs%x, f_xh%x, rho%x(1,1,1,1), dt,&
382 n)
383 else
384 ! Add the advection operators to the right-hans-side.
385 call this%adv%compute_scalar(u, v, w, s, f_xh, &
386 xh, this%c_Xh, dm_xh%size())
387
388 ! At this point the RHS contains the sum of the advection operator,
389 ! Neumann boundary sources and additional source terms, evaluated using
390 ! the scalar field from the previous time-step. Now, this value is used in
391 ! the explicit time scheme to advance these terms in time.
392 call makeext%compute_scalar(this%abx1, this%abx2, f_xh%x, &
393 rho%x(1,1,1,1), ext_bdf%advection_coeffs, n)
394
395 ! Add the RHS contributions coming from the BDF scheme.
396 call makebdf%compute_scalar(slag, f_xh%x, s, c_xh%B, rho%x(1,1,1,1), &
397 dt, ext_bdf%diffusion_coeffs, ext_bdf%ndiff, n)
398 end if
399
400 call slag%update()
401
403 call this%bcs%apply_scalar(this%s%x, this%dm_Xh%size(), time, .true.)
404
405 ! Update material properties if necessary
406 call this%update_material_properties(time)
407
408 ! Compute scalar residual.
409 call profiler_start_region(trim(this%name) // '_residual', 20)
410 call res%compute(ax, s, s_res, f_xh, c_xh, msh, xh, lambda_tot, &
411 rho%x(1,1,1,1)*cp%x(1,1,1,1), ext_bdf%diffusion_coeffs(1), dt, &
412 dm_xh%size())
413
414 call gs_xh%op(s_res, gs_op_add)
415
416 ! Apply a 0-valued Dirichlet boundary conditions on the ds.
417 call this%bclst_ds%apply_scalar(s_res%x, dm_xh%size())
418
419 call profiler_end_region(trim(this%name) // '_residual', 20)
420
421 call this%proj_s%pre_solving(s_res%x, tstep, c_xh, n, dt_controller)
422
423 call this%pc%update()
424 call profiler_start_region(trim(this%name) // '_solve', 21)
425 ksp_results = this%ksp%solve(ax, ds, s_res%x, n, &
426 c_xh, this%bclst_ds, gs_xh)
427 ksp_results%name = trim(this%name)
428 call profiler_end_region(trim(this%name) // '_solve', 21)
429
430 call this%proj_s%post_solving(ds%x, ax, c_xh, this%bclst_ds, gs_xh, &
431 n, tstep, dt_controller)
432
433 ! Update the solution
434 if (neko_bcknd_device .eq. 1) then
435 call device_add2s2(s%x_d, ds%x_d, 1.0_rp, n)
436 else
437 call add2s2(s%x, ds%x, 1.0_rp, n)
438 end if
439
440 end associate
441 call profiler_end_region(trim(this%name), 2)
442 end subroutine scalar_pnpn_step
443
444 subroutine print_debug(this)
445 class(scalar_pnpn_t), intent(inout) :: this
446 character(len=LOG_SIZE) :: log_buf
447 integer :: n
448
449 n = this%dm_Xh%size()
450
451 write(log_buf, '(A, A, E15.7, A, E15.7, A, E15.7)') 'Scalar debug', &
452 ' l2norm s', glsc2(this%s%x, this%s%x, n), &
453 ' slag1', glsc2(this%slag%lf(1)%x, this%slag%lf(1)%x, n), &
454 ' slag2', glsc2(this%slag%lf(2)%x, this%slag%lf(2)%x, n)
455 call neko_log%message(log_buf, lvl = neko_log_debug)
456 write(log_buf, '(A, A, E15.7, A, E15.7)') 'Scalar debug2', &
457 ' l2norm abx1', glsc2(this%abx1%x, this%abx1%x, n), &
458 ' abx2', glsc2(this%abx2%x, this%abx2%x, n)
459 call neko_log%message(log_buf, lvl = neko_log_debug)
460 end subroutine print_debug
461
464 subroutine scalar_pnpn_setup_bcs_(this, user)
465 class(scalar_pnpn_t), intent(inout) :: this
466 type(user_t), target, intent(in) :: user
467 integer :: i, j, n_bcs, zone_size, global_zone_size, ierr
468 type(json_core) :: core
469 type(json_value), pointer :: bc_object
470 type(json_file) :: bc_subdict
471 class(bc_t), pointer :: bc_i
472 logical :: found
473 ! Monitor which boundary zones have been marked
474 logical, allocatable :: marked_zones(:)
475 integer, allocatable :: zone_indices(:)
476
477 if (this%params%valid_path('boundary_conditions')) then
478 call this%params%info('boundary_conditions', &
479 n_children = n_bcs)
480 call this%params%get_core(core)
481 call this%params%get('boundary_conditions', bc_object, found)
482
483 call this%bcs%init(n_bcs)
484
485 allocate(marked_zones(size(this%msh%labeled_zones)))
486 marked_zones = .false.
487
488 do i = 1, n_bcs
489 ! Create a new json containing just the subdict for this bc
490 call json_extract_item(core, bc_object, i, bc_subdict)
491
492 ! Check that we are not trying to assing a bc to zone, for which one
493 ! has already been assigned and that the zone has more than 0 size
494 ! in the mesh.
495 call json_get(bc_subdict, "zone_indices", zone_indices)
496
497 do j = 1, size(zone_indices)
498 zone_size = this%msh%labeled_zones(zone_indices(j))%size
499 call mpi_allreduce(zone_size, global_zone_size, 1, &
500 mpi_integer, mpi_max, neko_comm, ierr)
501
502 if (global_zone_size .eq. 0) then
503 write(error_unit, '(A, A, I0, A, A, I0, A)') "*** ERROR ***: ",&
504 "Zone index ", zone_indices(j), &
505 " is invalid as this zone has 0 size, meaning it ", &
506 "does not exist in the mesh. Check scalar boundary condition ", &
507 i, "."
508 error stop
509 end if
510
511 if (marked_zones(zone_indices(j)) .eqv. .true.) then
512 write(error_unit, '(A, A, I0, A, A, A, A)') "*** ERROR ***: ", &
513 "Zone with index ", zone_indices(j), &
514 " has already been assigned a boundary condition. ", &
515 "Please check your boundary_conditions entry for the ", &
516 "scalar and make sure that each zone index appears only ",&
517 "in a single boundary condition."
518 error stop
519 else
520 marked_zones(zone_indices(j)) = .true.
521 end if
522 end do
523
524 bc_i => null()
525
526 call bc_factory(bc_i, this, bc_subdict, this%c_Xh, user)
527 call this%bcs%append(bc_i)
528 end do
529
530 ! Make sure all labeled zones with non-zero size have been marked
531 do i = 1, size(this%msh%labeled_zones)
532 if ((this%msh%labeled_zones(i)%size .gt. 0) .and. &
533 (marked_zones(i) .eqv. .false.)) then
534 write(error_unit, '(A, A, I0)') "*** ERROR ***: ", &
535 "No scalar boundary condition assigned to zone ", i
536 error stop
537 end if
538 end do
539 else
540 ! Check that there are no labeled zones, i.e. all are periodic.
541 do i = 1, size(this%msh%labeled_zones)
542 if (this%msh%labeled_zones(i)%size .gt. 0) then
543 write(error_unit, '(A, A, A)') "*** ERROR ***: ", &
544 "No boundary_conditions entry in the case file for scalar ", &
545 this%s%name
546 error stop
547 end if
548 end do
549
550 ! For a pure periodic case, we still need to initilise the bc lists
551 ! to a zero size to avoid issues with apply() in step()
552 call this%bcs%init()
553
554 end if
555 end subroutine scalar_pnpn_setup_bcs_
556
557
558end module scalar_pnpn
Copy data between host and device (or device and device)
Definition device.F90:66
Retrieves a parameter by name or assigns a provided default value. In the latter case also adds the m...
Retrieves a parameter by name or throws an error.
Subroutines to add advection terms to the RHS of a transport equation.
Definition advection.f90:34
Defines a Matrix-vector product.
Definition ax.f90:34
Defines a list of bc_t.
Definition bc_list.f90:34
Defines a boundary condition.
Definition bc.f90:34
Defines a checkpoint.
Coefficients.
Definition coef.f90:34
Definition comm.F90:1
type(mpi_comm), public neko_comm
MPI communicator.
Definition comm.F90:42
subroutine, public device_add2s2(a_d, b_d, c1, n, strm)
Vector addition with scalar multiplication (multiplication on first argument)
subroutine, public device_col2(a_d, b_d, n, strm)
Vector multiplication .
Device abstraction, common interface for various accelerators.
Definition device.F90:34
integer, parameter, public host_to_device
Definition device.F90:47
Dirichlet condition applied in the facet normal direction.
Defines a registry for storing solution fields.
type(field_registry_t), target, public neko_field_registry
Global field registry.
Contains the field_serties_t type.
Defines a field.
Definition field.f90:34
Gather-scatter.
Utilities for retrieving parameters from the case files.
Implements the base abstract type for Krylov solvers plus helper types.
Definition krylov.f90:34
Logging routines.
Definition log.f90:34
integer, parameter, public neko_log_debug
Debug log level.
Definition log.f90:78
type(log_t), public neko_log
Global log stream.
Definition log.f90:70
integer, parameter, public log_size
Definition log.f90:46
Definition math.f90:60
real(kind=rp) function, public glsc2(a, b, n)
Weighted inner product .
Definition math.f90:1007
subroutine, public col2(a, b, n)
Vector multiplication .
Definition math.f90:860
subroutine, public add2s2(a, b, c1, n)
Vector addition with scalar multiplication (multiplication on second argument)
Definition math.f90:818
Defines a mesh.
Definition mesh.f90:34
Build configurations.
integer, parameter neko_bcknd_device
integer, parameter, public rp
Global precision used in computations.
Definition num_types.f90:12
Profiling interface.
Definition profiler.F90:34
subroutine, public profiler_start_region(name, region_id)
Started a named (name) profiler region.
Definition profiler.F90:78
subroutine, public profiler_end_region(name, region_id)
End the most recently started profiler region.
Definition profiler.F90:109
Project x onto X, the space of old solutions and back again.
Routines to generate the right-hand sides for the convection-diffusion equation. Employs the EXT/BDF ...
Definition rhs_maker.f90:38
Auxiliary routines for fluid solvers.
Definition scalar_aux.f90:2
subroutine scalar_step_info(time, ksp_results, strict_convergence)
Prints for prs, velx, vely, velz the following: Number of iterations, start residual,...
Contains the scalar_pnpn_t type.
subroutine scalar_pnpn_step(this, time, ext_bdf, dt_controller, ksp_results)
subroutine scalar_pnpn_setup_bcs_(this, user)
Initialize boundary conditions.
subroutine scalar_pnpn_restart(this, chkp)
subroutine scalar_pnpn_init(this, msh, coef, gs, params, numerics_params, user, chkp, ulag, vlag, wlag, time_scheme, rho)
Boundary condition factory. Both constructs and initializes the object.
subroutine scalar_pnpn_free(this)
Defines the residual for the scalar transport equation.
Contains the scalar_scheme_t type.
Defines a registry for storing and requesting temporary fields This can be used when you have a funct...
type(scratch_registry_t), target, public neko_scratch_registry
Global scratch registry.
Compound scheme for the advection and diffusion operators in a transport equation.
Base class for time integration schemes.
Module with things related to the simulation time.
Implements type time_step_controller.
Interfaces for user interaction with NEKO.
Definition user_intf.f90:34
Defines a zero-valued Dirichlet boundary condition.
Base abstract type for computing the advection operator.
Definition advection.f90:46
Base type for a matrix-vector product providing .
Definition ax.f90:43
Base type for a boundary condition.
Definition bc.f90:61
A list of allocatable `bc_t`. Follows the standard interface of lists.
Definition bc_list.f90:48
Coefficients defined on a given (mesh, ) tuple. Arrays use indices (i,j,k,e): element e,...
Definition coef.f90:55
Dirichlet condition in facet normal direction.
Stores a series (sequence) of fields, logically connected to a base field, and arranged according to ...
Type for storing initial and final residuals in a Krylov solver.
Definition krylov.f90:56
Abstract type to add contributions to F from lagged BD terms.
Definition rhs_maker.f90:59
Abstract type to sum up contributions to kth order extrapolation scheme.
Definition rhs_maker.f90:52
Abstract type to add contributions of kth order OIFS scheme.
Definition rhs_maker.f90:66
Abstract type to compute scalar residual.
Base type for a scalar advection-diffusion solver.
Implements the logic to compute the time coefficients for the advection and diffusion operators in a ...
A struct that contains all info about the time, expand as needed.
A type collecting all the overridable user routines and flag to suppress type injection from custom m...
Zero-valued Dirichlet boundary condition. Used for no-slip walls, but also for various auxillary cond...