45 character(len=20) :: WALLM_KNOWN_TYPES(5) = [character(len=20) :: &
47 "cai_sagaut_model_ii", &
62 module subroutine wall_model_factory(object, scheme_name, coef, msk, facet, &
64 class(wall_model_t),
allocatable,
intent(inout) :: object
65 character(len=*),
intent(in) :: scheme_name
66 type(coef_t),
intent(in) :: coef
67 integer,
intent(in) :: msk(:)
68 integer,
intent(in) :: facet(:)
69 type(json_file),
intent(inout) :: json
70 character(len=:),
allocatable :: type_name
71 character(len=:),
allocatable :: type_string
74 call json_get(json,
"model", type_name)
75 call json_get(json,
"h_index", h_index)
77 call wall_model_allocator(object, type_name)
80 call object%init(scheme_name, coef, msk, facet, h_index, json)
82 end subroutine wall_model_factory
87 module subroutine wall_model_allocator(object, type_name)
88 class(wall_model_t),
allocatable,
intent(inout) :: object
89 character(len=:),
allocatable,
intent(in) :: type_name
92 if (
allocated(object))
then
97 select case (trim(type_name) )
100 case (
"cai_sagaut_model_ii")
102 case (
"rough_log_law")
109 do i = 1, wall_model_registry_size
110 if (trim(type_name) .eq. trim(wall_model_registry(i)%type_name))
then
111 call wall_model_registry(i)%allocator(object)
117 end subroutine wall_model_allocator
124 module subroutine register_wall_model(type_name, allocator)
125 character(len=*),
intent(in) :: type_name
126 procedure(wall_model_allocate),
pointer,
intent(in) :: allocator
127 type(allocator_entry),
allocatable :: temp(:)
130 do i = 1,
size(wallm_known_types)
131 if (trim(type_name) .eq. trim(wallm_known_types(i)))
then
136 do i = 1, wall_model_registry_size
137 if (trim(type_name) .eq. trim(wall_model_registry(i)%type_name))
then
143 if (wall_model_registry_size .eq. 0)
then
144 allocate(wall_model_registry(1))
146 allocate(temp(wall_model_registry_size + 1))
147 temp(1:wall_model_registry_size) = wall_model_registry
148 call move_alloc(temp, wall_model_registry)
151 wall_model_registry_size = wall_model_registry_size + 1
152 wall_model_registry(wall_model_registry_size)%type_name = type_name
153 wall_model_registry(wall_model_registry_size)%allocator => allocator
154 end subroutine register_wall_model
156end submodule wall_model_fctry
Implements cai_sagaut_model_ii_t.
Implements rough_log_law_t.
subroutine, public neko_type_registration_error(base_type, wrong_type, known)
subroutine, public neko_type_error(base_type, wrong_type, known_types)
Reports an error allocating a type for a particular base pointer class.
Explicit wall model based on Model-II from Cai and Sagaut (2021).
Wall model based on the Monin-Obukhov Similarity Theory for atmospheric boundary layer flows....
Wall model similar to the Monin-Obukhov Similarity Theory for atmospheric boundary layer flows,...
Wall model based on the log-law for a rough wall. The formula defining the law is ....
Wall model based on Spalding's law of the wall. Reference: http://dx.doi.org/10.1115/1....