72 use json_module,
only : json_file, json_core, json_value
100 class(
ksp_t),
allocatable :: ksp_vel
101 class(
ksp_t),
allocatable :: ksp_prs
102 class(pc_t),
allocatable :: pc_vel
103 class(pc_t),
allocatable :: pc_prs
104 integer :: vel_projection_dim
105 integer :: pr_projection_dim
106 integer :: vel_projection_activ_step
107 integer :: pr_projection_activ_step
125 type(json_file),
pointer :: params
131 logical :: forced_flow_rate = .false.
132 logical :: freeze = .false.
134 real(kind=
rp),
pointer :: mu => null()
136 real(kind=
rp),
pointer :: rho => null()
139 character(len=NEKO_MSH_MAX_ZLBL_LEN),
allocatable :: bc_labels(:)
166 type(
mesh_t),
target,
intent(inout) :: msh
167 integer,
intent(inout) :: lx
168 type(json_file),
target,
intent(inout) :: params
169 type(
user_t),
intent(in) :: user
190 real(kind=
rp),
intent(inout) :: t
191 integer,
intent(inout) :: tstep
192 real(kind=
rp),
intent(in) :: dt
204 real(kind=
rp) :: dtlag(10), tlag(10)
216 type(
mesh_t),
target,
intent(inout) :: msh
217 integer,
intent(inout) :: lx
218 character(len=*),
intent(in) :: scheme
219 type(json_file),
target,
intent(inout) :: params
220 type(
user_t),
target,
intent(in) :: user
223 character(len=LOG_SIZE) :: log_buf
224 real(kind=
rp),
allocatable :: real_vec(:)
225 real(kind=
rp) :: real_val
226 logical :: logical_val
227 integer :: integer_val, ierr
228 character(len=:),
allocatable :: string_val1, string_val2
233 write(log_buf,
'(A, A)')
'Type : ', trim(scheme)
236 write(log_buf,
'(A, I1)')
'lx : ', lx
237 else if (lx .ge. 10)
then
238 write(log_buf,
'(A, I2)')
'lx : ', lx
240 write(log_buf,
'(A, I3)')
'lx : ', lx
251 write(log_buf,
'(A,ES13.6)')
'rho :', this%rho
253 write(log_buf,
'(A,ES13.6)')
'mu :', this%mu
255 call json_get(params,
'case.fluid.velocity_solver.type', string_val1)
256 call json_get(params,
'case.fluid.velocity_solver.preconditioner', &
258 call json_get(params,
'case.fluid.velocity_solver.absolute_tolerance', &
261 call neko_log%message(
'Ksp vel. : ('// trim(string_val1) // &
262 ', ' // trim(string_val2) //
')')
264 write(log_buf,
'(A,ES13.6)')
' `-abs tol :', real_val
266 call json_get(params,
'case.fluid.pressure_solver.type', string_val1)
267 call json_get(params,
'case.fluid.pressure_solver.preconditioner', &
269 call json_get(params,
'case.fluid.pressure_solver.absolute_tolerance', &
272 call neko_log%message(
'Ksp prs. : ('// trim(string_val1) // &
273 ', ' // trim(string_val2) //
')')
274 write(log_buf,
'(A,ES13.6)')
' `-abs tol :', real_val
277 call json_get(params,
'case.numerics.dealias', logical_val)
278 write(log_buf,
'(A, L1)')
'Dealias : ', logical_val
283 write(log_buf,
'(A, L1)')
'Save bdry : ', logical_val
288 'case.fluid.velocity_solver.projection_space_size',&
289 this%vel_projection_dim, 20)
291 'case.fluid.pressure_solver.projection_space_size',&
292 this%pr_projection_dim, 20)
294 'case.fluid.velocity_solver.projection_hold_steps',&
295 this%vel_projection_activ_step, 5)
297 'case.fluid.pressure_solver.projection_hold_steps',&
298 this%pr_projection_activ_step, 5)
303 if (params%valid_path(
"case.fluid.flow_rate_force"))
then
304 this%forced_flow_rate = .true.
307 if (msh%gdim .eq. 2)
then
308 call this%Xh%init(
gll, lx, lx)
310 call this%Xh%init(
gll, lx, lx, lx)
315 this%params => params
319 call this%gs_Xh%init(this%dm_Xh)
321 call this%c_Xh%init(this%gs_Xh)
327 this%bc_labels =
"not"
332 if (params%valid_path(
'case.fluid.boundary_types'))
then
334 'case.fluid.boundary_types', &
340 call this%bc_sym%init(this%c_Xh)
341 call this%bc_sym%mark_zone(msh%sympln)
342 call this%bc_sym%mark_zones_from_list(msh%labeled_zones,&
343 'sym', this%bc_labels)
344 call this%bc_sym%finalize()
345 call this%bc_sym%init_msk()
351 if (params%valid_path(
'case.fluid.inflow_condition'))
then
352 call json_get(params,
'case.fluid.inflow_condition.type', string_val1)
353 if (trim(string_val1) .eq.
"uniform")
then
355 else if (trim(string_val1) .eq.
"blasius")
then
357 else if (trim(string_val1) .eq.
"user")
then
360 call neko_error(
'Invalid inflow condition '//string_val1)
363 call this%bc_inflow%init(this%c_Xh)
364 call this%bc_inflow%mark_zone(msh%inlet)
365 call this%bc_inflow%mark_zones_from_list(msh%labeled_zones,&
367 call this%bc_inflow%finalize()
370 if (trim(string_val1) .eq.
"uniform")
then
371 call json_get(params,
'case.fluid.inflow_condition.value', real_vec)
372 call this%bc_inflow%set_inflow(real_vec)
373 else if (trim(string_val1) .eq.
"blasius")
then
374 select type(bc_if => this%bc_inflow)
376 call bc_if%set_coef(this%C_Xh)
377 call json_get(params,
'case.fluid.blasius.delta', real_val)
378 call json_get(params,
'case.fluid.blasius.approximation',&
380 call json_get(params,
'case.fluid.blasius.freestream_velocity',&
383 call bc_if%set_inflow(real_vec)
384 call bc_if%set_params(real_val, string_val2)
387 else if (trim(string_val1) .eq.
"user")
then
388 select type(bc_if => this%bc_inflow)
390 call bc_if%set_coef(this%C_Xh)
395 call this%bc_wall%init(this%c_Xh)
396 call this%bc_wall%mark_zone(msh%wall)
397 call this%bc_wall%mark_zones_from_list(msh%labeled_zones,&
399 call this%bc_wall%finalize()
403 call this%bc_field_vel%field_dirichlet_u%init(this%c_Xh)
404 call this%bc_field_vel%field_dirichlet_u%mark_zones_from_list(msh%labeled_zones,&
405 'd_vel_u', this%bc_labels)
406 call this%bc_field_vel%field_dirichlet_u%finalize()
408 call mpi_allreduce(this%bc_field_vel%field_dirichlet_u%msk(0), integer_val, 1, &
410 if (integer_val .gt. 0)
call this%bc_field_vel%field_dirichlet_u%init_field(
'd_vel_u')
413 call this%bc_field_vel%field_dirichlet_v%init(this%c_Xh)
414 call this%bc_field_vel%field_dirichlet_v%mark_zones_from_list(msh%labeled_zones,&
415 'd_vel_v', this%bc_labels)
416 call this%bc_field_vel%field_dirichlet_v%finalize()
418 call mpi_allreduce(this%bc_field_vel%field_dirichlet_v%msk(0), integer_val, 1, &
420 if (integer_val .gt. 0)
call this%bc_field_vel%field_dirichlet_v%init_field(
'd_vel_v')
423 call this%bc_field_vel%field_dirichlet_w%init(this%c_Xh)
424 call this%bc_field_vel%field_dirichlet_w%mark_zones_from_list(msh%labeled_zones,&
425 'd_vel_w', this%bc_labels)
426 call this%bc_field_vel%field_dirichlet_w%finalize()
428 call mpi_allreduce(this%bc_field_vel%field_dirichlet_w%msk(0), integer_val, 1, &
430 if (integer_val .gt. 0)
call this%bc_field_vel%field_dirichlet_w%init_field(
'd_vel_w')
433 call this%bc_field_vel%init(this%c_Xh)
434 call this%bc_field_vel%mark_zones_from_list(msh%labeled_zones,&
435 'd_vel_u', this%bc_labels)
436 call this%bc_field_vel%mark_zones_from_list(msh%labeled_zones,&
437 'd_vel_v', this%bc_labels)
438 call this%bc_field_vel%mark_zones_from_list(msh%labeled_zones,&
439 'd_vel_w', this%bc_labels)
440 call this%bc_field_vel%finalize()
443 call bc_list_add(this%bclst_vel, this%bc_field_vel)
448 this%dirichlet_update_ => user%user_dirichlet_update
453 allocate(this%field_dirichlet_fields%fields(4))
455 this%field_dirichlet_fields%fields(1)%f => &
456 this%bc_field_vel%field_dirichlet_u%field_bc
457 this%field_dirichlet_fields%fields(2)%f => &
458 this%bc_field_vel%field_dirichlet_v%field_bc
459 this%field_dirichlet_fields%fields(3)%f => &
460 this%bc_field_vel%field_dirichlet_w%field_bc
461 this%field_dirichlet_fields%fields(4)%f => &
462 this%bc_field_prs%field_bc
465 call bc_list_add(this%field_dirichlet_bcs, this%bc_field_vel%field_dirichlet_u)
466 call bc_list_add(this%field_dirichlet_bcs, this%bc_field_vel%field_dirichlet_v)
467 call bc_list_add(this%field_dirichlet_bcs, this%bc_field_vel%field_dirichlet_w)
475 if (logical_val)
then
476 call this%bdry%init(this%dm_Xh,
'bdry')
479 call bdry_mask%init(this%c_Xh)
480 call bdry_mask%mark_zone(msh%wall)
481 call bdry_mask%mark_zones_from_list(msh%labeled_zones,&
483 call bdry_mask%finalize()
484 call bdry_mask%set_g(1.0_rp)
485 call bdry_mask%apply_scalar(this%bdry%x, this%dm_Xh%size())
486 call bdry_mask%free()
488 call bdry_mask%init(this%c_Xh)
489 call bdry_mask%mark_zone(msh%inlet)
490 call bdry_mask%mark_zones_from_list(msh%labeled_zones,&
492 call bdry_mask%finalize()
493 call bdry_mask%set_g(2.0_rp)
494 call bdry_mask%apply_scalar(this%bdry%x, this%dm_Xh%size())
495 call bdry_mask%free()
497 call bdry_mask%init(this%c_Xh)
498 call bdry_mask%mark_zone(msh%outlet)
499 call bdry_mask%mark_zones_from_list(msh%labeled_zones,&
501 call bdry_mask%finalize()
502 call bdry_mask%set_g(3.0_rp)
503 call bdry_mask%apply_scalar(this%bdry%x, this%dm_Xh%size())
504 call bdry_mask%free()
506 call bdry_mask%init(this%c_Xh)
507 call bdry_mask%mark_zone(msh%sympln)
508 call bdry_mask%mark_zones_from_list(msh%labeled_zones,&
509 'sym', this%bc_labels)
510 call bdry_mask%finalize()
511 call bdry_mask%set_g(4.0_rp)
512 call bdry_mask%apply_scalar(this%bdry%x, this%dm_Xh%size())
513 call bdry_mask%free()
515 call bdry_mask%init(this%c_Xh)
516 call bdry_mask%mark_zone(msh%periodic)
517 call bdry_mask%finalize()
518 call bdry_mask%set_g(5.0_rp)
519 call bdry_mask%apply_scalar(this%bdry%x, this%dm_Xh%size())
520 call bdry_mask%free()
522 call bdry_mask%init(this%c_Xh)
523 call bdry_mask%mark_zone(msh%outlet_normal)
524 call bdry_mask%mark_zones_from_list(msh%labeled_zones,&
525 'on', this%bc_labels)
526 call bdry_mask%finalize()
527 call bdry_mask%set_g(6.0_rp)
528 call bdry_mask%apply_scalar(this%bdry%x, this%dm_Xh%size())
529 call bdry_mask%free()
539 call this%f_x%init(this%dm_Xh, fld_name=
"fluid_rhs_x")
540 call this%f_y%init(this%dm_Xh, fld_name=
"fluid_rhs_y")
541 call this%f_z%init(this%dm_Xh, fld_name=
"fluid_rhs_z")
544 call this%source_term%init(params, this%f_x, this%f_y, this%f_z, this%c_Xh,&
551 user, material_properties)
554 type(
mesh_t),
target,
intent(inout) :: msh
555 integer,
intent(inout) :: lx
556 type(json_file),
target,
intent(inout) :: params
557 type(
user_t),
target,
intent(in) :: user
560 character(len=*),
intent(in) :: scheme
562 real(kind=
rp) :: abs_tol
563 character(len=:),
allocatable :: solver_type, precon_type
564 integer :: ksp_vel_maxiter
577 call json_get(params,
'case.fluid.velocity_solver.type', solver_type)
578 call json_get(params,
'case.fluid.velocity_solver.preconditioner', &
580 call json_get(params,
'case.fluid.velocity_solver.absolute_tolerance', &
585 'case.fluid.velocity_solver.max_iterations', &
586 ksp_vel_maxiter, 800)
588 solver_type, ksp_vel_maxiter, abs_tol)
590 this%c_Xh, this%dm_Xh, this%gs_Xh, this%bclst_vel, precon_type)
598 scheme, user, material_properties)
601 type(
mesh_t),
target,
intent(inout) :: msh
602 integer,
intent(inout) :: lx
603 type(json_file),
target,
intent(inout) :: params
604 type(
user_t),
target,
intent(in) :: user
608 character(len=*),
intent(in) :: scheme
609 real(kind=
rp) :: real_val, dong_delta, dong_uchar
610 real(kind=
rp),
allocatable :: real_vec(:)
611 integer :: integer_val, ierr
612 character(len=:),
allocatable :: string_val1, string_val2
627 call this%ulag%init(this%u, 2)
628 call this%vlag%init(this%v, 2)
629 call this%wlag%init(this%w, 2)
636 call this%bc_prs%init(this%c_Xh)
637 call this%bc_prs%mark_zones_from_list(msh%labeled_zones,&
639 call this%bc_prs%mark_zones_from_list(msh%labeled_zones,&
640 'on', this%bc_labels)
643 call this%bc_field_prs%init(this%c_Xh)
644 call this%bc_field_prs%mark_zones_from_list(msh%labeled_zones,&
645 'd_pres', this%bc_labels)
646 call this%bc_field_prs%finalize()
647 call mpi_allreduce(this%bc_field_prs%msk(0), integer_val, 1, &
650 if (integer_val .gt. 0)
call this%bc_field_prs%init_field(
'd_pres')
651 call bc_list_add(this%bclst_prs, this%bc_field_prs)
652 call bc_list_add(this%field_dirichlet_bcs, this%bc_field_prs)
654 if (msh%outlet%size .gt. 0)
then
655 call this%bc_prs%mark_zone(msh%outlet)
657 if (msh%outlet_normal%size .gt. 0)
then
658 call this%bc_prs%mark_zone(msh%outlet_normal)
661 call this%bc_prs%finalize()
662 call this%bc_prs%set_g(0.0_rp)
664 call this%bc_dong%init(this%c_Xh)
665 call this%bc_dong%mark_zones_from_list(msh%labeled_zones,&
666 'o+dong', this%bc_labels)
667 call this%bc_dong%mark_zones_from_list(msh%labeled_zones,&
668 'on+dong', this%bc_labels)
669 call this%bc_dong%finalize()
677 call this%bc_dong%set_vars(dong_uchar, dong_delta)
684 'case.fluid.velocity_solver.max_iterations', &
686 call json_get(params,
'case.fluid.velocity_solver.type', string_val1)
687 call json_get(params,
'case.fluid.velocity_solver.preconditioner', &
689 call json_get(params,
'case.fluid.velocity_solver.absolute_tolerance', &
693 string_val1, integer_val, real_val)
695 this%c_Xh, this%dm_Xh, this%gs_Xh, this%bclst_vel, string_val2)
700 'case.fluid.pressure_solver.max_iterations', &
702 call json_get(params,
'case.fluid.pressure_solver.type', string_val1)
703 call json_get(params,
'case.fluid.pressure_solver.preconditioner', &
705 call json_get(params,
'case.fluid.pressure_solver.absolute_tolerance', &
709 string_val1, integer_val, real_val)
711 this%c_Xh, this%dm_Xh, this%gs_Xh, this%bclst_prs, string_val2)
723 call this%bdry%free()
725 if (
allocated(this%bc_inflow))
then
726 call this%bc_inflow%free()
729 call this%bc_wall%free()
730 call this%bc_sym%free()
735 call this%bc_field_prs%field_bc%free()
736 call this%bc_field_prs%free()
737 call this%bc_field_vel%field_dirichlet_u%field_bc%free()
738 call this%bc_field_vel%field_dirichlet_v%field_bc%free()
739 call this%bc_field_vel%field_dirichlet_w%field_bc%free()
740 call this%bc_field_vel%free()
742 call this%field_dirichlet_fields%free()
744 if (
associated(this%dirichlet_update_))
then
745 this%dirichlet_update_ => null()
750 if (
allocated(this%ksp_vel))
then
752 deallocate(this%ksp_vel)
755 if (
allocated(this%ksp_prs))
then
757 deallocate(this%ksp_prs)
760 if (
allocated(this%pc_vel))
then
762 deallocate(this%pc_vel)
765 if (
allocated(this%pc_prs))
then
767 deallocate(this%pc_prs)
770 if (
allocated(this%bc_labels))
then
771 deallocate(this%bc_labels)
774 call this%source_term%free()
776 call this%gs_Xh%free()
778 call this%c_Xh%free()
782 call this%scratch%free()
791 call this%ulag%free()
792 call this%vlag%free()
793 call this%wlag%free()
796 if (
associated(this%f_x))
then
800 if (
associated(this%f_y))
then
804 if (
associated(this%f_z))
then
820 logical :: logical_val
822 if ( (.not.
associated(this%u)) .or. &
823 (.not.
associated(this%v)) .or. &
824 (.not.
associated(this%w)) .or. &
825 (.not.
associated(this%p)))
then
829 if ( (.not.
allocated(this%u%x)) .or. &
830 (.not.
allocated(this%v%x)) .or. &
831 (.not.
allocated(this%w%x)) .or. &
832 (.not.
allocated(this%p%x)))
then
836 if (.not.
allocated(this%ksp_vel))
then
837 call neko_error(
'No Krylov solver for velocity defined')
840 if (.not.
allocated(this%ksp_prs))
then
841 call neko_error(
'No Krylov solver for pressure defined')
844 if (.not.
associated(this%params))
then
848 if (
allocated(this%bc_inflow))
then
849 select type(ip => this%bc_inflow)
858 call this%chkp%init(this%u, this%v, this%w, this%p)
863 if (this%params%valid_path(
'case.statistics'))
then
866 if (logical_val)
then
867 call this%mean%init(this%u, this%v, this%w, this%p)
868 call this%stats%init(this%c_Xh, this%mean%u, &
869 this%mean%v, this%mean%w, this%mean%p)
885 real(kind=
rp),
intent(in) :: t
886 integer,
intent(in) :: tstep
889 this%u%x, this%v%x, this%w%x, this%dm_Xh%size(), t, tstep)
897 real(kind=
rp),
intent(in) :: t
898 integer,
intent(in) :: tstep
901 this%p%dof%size(), t, tstep)
908 class(
ksp_t),
allocatable,
target,
intent(inout) :: ksp
909 integer,
intent(in),
value :: n
910 character(len=*),
intent(in) :: solver
911 integer,
intent(in) :: max_iter
912 real(kind=
rp),
intent(in) :: abstol
920 class(pc_t),
allocatable,
target,
intent(inout) :: pc
921 class(
ksp_t),
target,
intent(inout) :: ksp
922 type(
coef_t),
target,
intent(inout) :: coef
923 type(
dofmap_t),
target,
intent(inout) :: dof
924 type(
gs_t),
target,
intent(inout) :: gs
925 type(
bc_list_t),
target,
intent(inout) :: bclst
926 character(len=*) :: pctype
930 select type(pcp => pc)
932 call pcp%init(coef, dof, gs)
933 type is (sx_jacobi_t)
934 call pcp%init(coef, dof, gs)
935 type is (device_jacobi_t)
936 call pcp%init(coef, dof, gs)
938 if (len_trim(pctype) .gt. 4)
then
939 if (index(pctype,
'+') .eq. 5)
then
940 call pcp%init(dof%msh, dof%Xh, coef, dof, gs, &
941 bclst, trim(pctype(6:)))
946 call pcp%init(dof%msh, dof%Xh, coef, dof, gs, bclst)
959 select type(bc_if => this%bc_inflow)
961 call bc_if%set_eval(usr_eval)
963 call neko_error(
"Not a user defined inflow condition")
970 real(kind=
rp),
intent(in) :: dt
973 c =
cfl(dt, this%u%x, this%v%x, this%w%x, &
974 this%Xh, this%c_Xh, this%msh%nelv, this%msh%gdim)
Abstract interface defining a dirichlet condition on a list of fields.
Abstract interface to dealocate a fluid formulation.
Abstract interface to initialize a fluid formulation.
Abstract interface to restart a fluid scheme.
Abstract interface to compute a time-step.
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.
Abstract interface defining a user defined inflow condition (pointwise)
Defines a boundary condition.
subroutine, public bc_list_add(bclst, bc)
Add a condition to a list of boundary conditions.
subroutine, public bc_list_apply_vector(bclst, x, y, z, n, t, tstep)
Apply a list of boundary conditions to a vector field.
subroutine, public bc_list_init(bclst, size)
Constructor for a list of boundary conditions.
subroutine, public bc_list_free(bclst)
Destructor for a list of boundary conditions.
subroutine, public bc_list_apply_scalar(bclst, x, n, t, tstep)
Apply a list of boundary conditions to a scalar field.
Defines a Blasius profile dirichlet condition.
type(mpi_comm) neko_comm
MPI communicator.
Defines a dirichlet boundary condition.
Defines a mapping of the degrees of freedom.
Defines a dong outflow condition.
Defines inflow dirichlet conditions.
Defines inflow dirichlet conditions.
Defines a registry for storing solution fields.
type(field_registry_t), target, public neko_field_registry
Global field registry.
subroutine fluid_scheme_init_common(this, msh, lx, params, scheme, user, material_properties)
Initialize common data for the current scheme.
subroutine fluid_scheme_init_all(this, msh, lx, params, kspv_init, kspp_init, scheme, user, material_properties)
Initialize all components of the current scheme.
subroutine fluid_scheme_free(this)
Deallocate a fluid formulation.
real(kind=rp) function fluid_compute_cfl(this, dt)
Compute CFL.
subroutine fluid_scheme_solver_factory(ksp, n, solver, max_iter, abstol)
Initialize a linear solver.
subroutine fluid_scheme_set_usr_inflow(this, usr_eval)
Initialize a user defined inflow condition.
subroutine fluid_scheme_bc_apply_vel(this, t, tstep)
Apply all boundary conditions defined for velocity Here we perform additional gs operations to take c...
subroutine fluid_scheme_validate(this)
Validate that all fields, solvers etc necessary for performing time-stepping are defined.
subroutine fluid_scheme_precon_factory(pc, ksp, coef, dof, gs, bclst, pctype)
Initialize a Krylov preconditioner.
subroutine fluid_scheme_init_uvw(this, msh, lx, params, kspv_init, scheme, user, material_properties)
Initialize all velocity related components of the current scheme.
subroutine fluid_scheme_bc_apply_prs(this, t, tstep)
Apply all boundary conditions defined for pressure.
Implements the fluid_source_term_t type.
Computes various statistics for the fluid fields. We use the Reynolds decomposition for a field u = ...
Implements the fluid_user_source_term_t type.
Defines inflow dirichlet conditions.
Utilities for retrieving parameters from the case files.
subroutine, public krylov_solver_destroy(ksp)
Destroy an interative Krylov solver.
subroutine, public krylov_solver_factory(ksp, n, solver, max_iter, abstol, M)
Initialize an iterative Krylov solver.
Implements the base abstract type for Krylov solvers plus helper types.
type(log_t), public neko_log
Global log stream.
Implements material_properties_t type.
Collection of vector field operations operating on and . Note that in general the indices and ....
Defines a mean flow field.
Defines a mean squared flow field.
integer, parameter, public neko_msh_max_zlbls
Max num. zone labels.
Dirichlet condition on axis aligned plane in the non normal direction.
integer, parameter, public rp
Global precision used in computations.
real(kind=rp) function, public cfl(dt, u, v, w, Xh, coef, nelv, gdim)
subroutine precon_destroy(pc)
Destroy a preconditioner.
subroutine precon_factory(pc, pctype)
Create a preconditioner.
Defines a registry for storing and requesting temporary fields This can be used when you have a funct...
Implements the source_term_t type and a wrapper source_term_wrapper_t.
Defines a function space.
integer, parameter, public gll
Defines a container for all statistics.
Mixed Dirichlet-Neumann axis aligned symmetry plane.
Compound scheme for the advection and diffusion operators in a transport equation.
Implements type time_step_controller.
Interfaces for user interaction with NEKO.
Defines inflow dirichlet conditions.
subroutine neko_warning(warning_msg)
Defines wall boundary conditions.
A list of boundary conditions.
Blasius profile for inlet (vector valued)
Coefficients defined on a given (mesh, ) tuple. Arrays use indices (i,j,k,e): element e,...
Generic Dirichlet boundary condition on .
Dong outflow condition Follows "A Convective-like Energy-Stable Open Boundary Condition for Simulati...
User defined dirichlet condition, for which the user can work with an entire field....
Extension of the user defined dirichlet condition field_dirichlet
field_list_t, To be able to group fields together
Base type of all fluid formulations.
Wrapper contaning and executing the fluid source terms.
A source-term for the fluid, with procedure pointers pointing to the actual implementation in the use...
Dirichlet condition for inlet (vector valued)
Base abstract type for a canonical Krylov method, solving .
Contains all the material properties necessary in the simulation.
Dirichlet condition in non normal direction of a plane.
The function space for the SEM solution fields.
Mixed Dirichlet-Neumann symmetry plane condition.
Implements the logic to compute the time coefficients for the advection and diffusion operators in a ...
Provides a tool to set time step dt.
User defined dirichlet condition for inlet (vector valued)
No-slip Wall boundary condition.