ComIn 0.5.1
ICON Community Interface
Loading...
Searching...
No Matches
comin_plugin_info.F90
Go to the documentation of this file.
1!> @file comin_plugin_info.F90
2!! @brief Data shared between host and plugins.
3!!
4!! @authors 01/2026 :: ICON Community Interface <comin@icon-model.org>
5!
6! SPDX-License-Identifier: BSD-3-Clause
7!
8! See LICENSES for license information.
9! Where software is supplied by third parties, it is indicated in the
10! headers of the routines.
11!
13 use, INTRINSIC :: iso_c_binding, only: c_bool, c_ptr, c_int
14
19
20 IMPLICIT NONE
21
22 PRIVATE
23
24 PUBLIC :: comin_severity_debug
25 PUBLIC :: comin_severity_info
26 PUBLIC :: comin_severity_warning
27 PUBLIC :: comin_severity_error
28
34
36
37 ENUM, BIND(C)
38 ENUMERATOR :: &
39 COMIN_SEVERITY_DEBUG = 0, & !< Show debug and more severe messages.
40 comin_severity_info = 1, & !< Show info and more severe messages.
41 comin_severity_warning = 2, & !< Show warning and more severe messages.
42 comin_severity_error = 3 !< Only show error messages.
43 END ENUM
44
45 ! Helpers for Fortran
46 INTERFACE
47 TYPE(c_ptr) FUNCTION comin_current_get_plugin_name_c() &
48 & BIND(C, name='comin_current_get_plugin_name')
49 IMPORT c_ptr
50 END FUNCTION comin_current_get_plugin_name_c
51
52 TYPE(c_ptr) FUNCTION comin_current_get_plugin_options_c() &
53 & BIND(C, name='comin_current_get_plugin_options')
54 IMPORT c_ptr
55 END FUNCTION comin_current_get_plugin_options_c
56
57 TYPE(c_ptr) FUNCTION comin_current_get_plugin_comm_c() &
58 & BIND(C, name='comin_current_get_plugin_comm')
59 IMPORT c_ptr
60 END FUNCTION comin_current_get_plugin_comm_c
61
62 FUNCTION comin_current_get_plugin_errors_return_c() RESULT(errors_return) &
63 & bind(c, name='comin_current_get_plugin_errors_return')
64 IMPORT c_bool
65 LOGICAL(c_bool) :: errors_return
66 END FUNCTION comin_current_get_plugin_errors_return_c
67
68 FUNCTION comin_current_get_plugin_log_severity_c() RESULT(severity) &
69 & bind(c, name='comin_current_get_plugin_log_severity')
70 IMPORT c_int
71 INTEGER(c_int) :: severity
72 END FUNCTION comin_current_get_plugin_log_severity_c
73 END INTERFACE
74
75CONTAINS
76
77 !> Get the current plugin's name.
78 FUNCTION comin_current_get_plugin_name() RESULT(res)
79 CHARACTER(len=:), ALLOCATABLE :: res
80 res = convert_c_string(comin_current_get_plugin_name_c())
82
83 !> Get the current plugin's options string.
84 FUNCTION comin_current_get_plugin_options() RESULT(res)
85 CHARACTER(len=:), ALLOCATABLE :: res
86 res = convert_c_string(comin_current_get_plugin_options_c())
88
89 !> Get the current plugin's communicator name.
90 FUNCTION comin_current_get_plugin_comm() RESULT(res)
91 CHARACTER(len=:), ALLOCATABLE :: res
92 res = convert_c_string(comin_current_get_plugin_comm_c())
94
95 !> Get whether comin errors triggered in the current plugin do return back
96 !! to the plugin or abort the program.
97 !! @return `.TRUE.` if errors return to the plugin, `.FALSE.` otherwise.
98 !! @ingroup fortran_interface
99 FUNCTION comin_current_get_plugin_errors_return() RESULT(errors_return)
100 LOGICAL :: errors_return
101 errors_return = LOGICAL(comin_current_get_plugin_errors_return_c())
103
104 !> Get the currently active log severity level.
105 !! @return one of the `COMIN_SEVERITY` enum constants.
106 !! @ingroup fortran_interface
107 FUNCTION comin_current_get_plugin_log_severity() RESULT(severity)
108 INTEGER :: severity
109 severity = int(comin_current_get_plugin_log_severity_c())
111
112 !> Returns the `t_comin_plugin_info` structure of the current plugin.
113 !! It can for example be used to access the ID or the options string.
114 !!
115 !! @deprecated 0.5.0
116 !! Use the accessor functions @ref comin_current_get_plugin_name, etc.
117 !!
118 !! @ingroup fortran_interface
119 SUBROUTINE comin_current_get_plugin_info(comin_current_plugin)
120 TYPE(t_comin_plugin_info), INTENT(OUT) :: comin_current_plugin !< plugin info struct
121
122 comin_current_plugin%id = comin_current_get_plugin_id()
123 comin_current_plugin%name = convert_c_string(comin_current_get_plugin_name_c())
124 comin_current_plugin%options = convert_c_string(comin_current_get_plugin_options_c())
125 comin_current_plugin%comm = convert_c_string(comin_current_get_plugin_comm_c())
126 comin_current_plugin%errors_return = comin_current_get_plugin_errors_return()
127
128 SELECT CASE (comin_current_get_plugin_log_severity_c())
129 CASE(comin_severity_debug)
130 comin_current_plugin%log_debug = .true.
131 comin_current_plugin%log_info = .true.
132 comin_current_plugin%log_warning = .true.
133 CASE(comin_severity_info)
134 comin_current_plugin%log_debug = .false.
135 comin_current_plugin%log_info = .true.
136 comin_current_plugin%log_warning = .true.
137 CASE(comin_severity_warning)
138 comin_current_plugin%log_debug = .false.
139 comin_current_plugin%log_info = .false.
140 comin_current_plugin%log_warning = .true.
141 CASE(comin_severity_error)
142 comin_current_plugin%log_debug = .false.
143 comin_current_plugin%log_info = .false.
144 comin_current_plugin%log_warning = .false.
145 CASE DEFAULT
146 CALL comin_plugin_finish('comin_current_get_plugin_info', 'Internal error: unknown severity')
147 END SELECT
148
149 END SUBROUTINE comin_current_get_plugin_info
150
151END MODULE comin_plugin_info
void comin_plugin_finish(const char *routine, const char *text)
t_comin_log_severity comin_current_get_plugin_log_severity()
const char * comin_current_get_plugin_name()
bool comin_current_get_plugin_errors_return()
const char * comin_current_get_plugin_options()
const char * comin_current_get_plugin_comm()
int comin_current_get_plugin_id()
The elements of this derived data type describe a 3rd party plugin.
subroutine, public comin_plugin_finish(routine, text)
Wrapper function for callback to ICON's "finish" routine.
subroutine, public comin_current_get_plugin_info(comin_current_plugin)
Returns the t_comin_plugin_info structure of the current plugin. It can for example be used to access...