40 character(len=20) :: SCALAR_KNOWN_TYPES(1) = [character(len=20) :: &
57 module subroutine scalar_scheme_factory(object, msh, coef, gs, params, &
59 class(scalar_scheme_t),
allocatable,
intent(inout) :: object
60 type(mesh_t),
target,
intent(in) :: msh
61 type(coef_t),
target,
intent(in) :: coef
62 type(gs_t),
target,
intent(inout) :: gs
63 type(json_file),
target,
intent(inout) :: params
64 type(json_file),
target,
intent(inout) :: numerics_params
65 type(user_t),
target,
intent(in) :: user
66 type(chkp_t),
target,
intent(inout) :: chkp
67 type(field_series_t),
target,
intent(in) :: ulag, vlag, wlag
68 type(time_scheme_controller_t),
target,
intent(in) :: time_scheme
69 type(field_t),
target,
intent(in) :: rho
70 character(len=:),
allocatable :: type_name
72 call json_get_or_default(params,
"scheme", type_name,
"pnpn")
74 call scalar_scheme_allocator(object, type_name)
76 call object%init(msh, coef, gs, params, numerics_params,
user, chkp, &
79 end subroutine scalar_scheme_factory
84 module subroutine scalar_scheme_allocator(object, type_name)
85 class(scalar_scheme_t),
allocatable,
intent(inout) :: object
86 character(len=*),
intent(in):: type_name
89 if (
allocated(object))
then
94 select case (trim(type_name))
98 do i = 1, scalar_scheme_registry_size
99 if (trim(type_name) == &
100 trim(scalar_scheme_registry(i)%type_name))
then
101 call scalar_scheme_registry(i)%allocator(object)
109 end subroutine scalar_scheme_allocator
116 module subroutine register_scalar_scheme(type_name, allocator)
117 character(len=*),
intent(in) :: type_name
118 procedure(scalar_scheme_allocate),
pointer,
intent(in) :: allocator
119 type(scalar_scheme_allocator_entry),
allocatable :: temp(:)
122 do i = 1,
size(scalar_known_types)
123 if (trim(type_name) .eq. trim(scalar_known_types(i)))
then
129 do i = 1, scalar_scheme_registry_size
130 if (trim(type_name) .eq. &
131 trim(scalar_scheme_registry(i)%type_name))
then
138 if (scalar_scheme_registry_size == 0)
then
139 allocate(scalar_scheme_registry(1))
141 allocate(temp(scalar_scheme_registry_size + 1))
142 temp(1:scalar_scheme_registry_size) = scalar_scheme_registry
143 call move_alloc(temp, scalar_scheme_registry)
146 scalar_scheme_registry_size = scalar_scheme_registry_size + 1
147 scalar_scheme_registry(scalar_scheme_registry_size)%type_name = type_name
148 scalar_scheme_registry(scalar_scheme_registry_size)%allocator => allocator
149 end subroutine register_scalar_scheme
151end submodule scalar_scheme_fctry
Contains the scalar_pnpn_t type.
Contains the scalar_scheme_t type.
Base class for time integration schemes.
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.