100 subroutine adjoint_scalars_init(this, n_adjoint_scalars, n_primal_scalars, &
101 msh, coef, gs, params_adjoint, params_primal, &
102 numerics_params, user, chkp, ulag, vlag, wlag, time_scheme, rho)
104 integer,
intent(in) :: n_adjoint_scalars, n_primal_scalars
105 type(mesh_t),
target,
intent(in) :: msh
106 type(coef_t),
target,
intent(in) :: coef
107 type(gs_t),
target,
intent(inout) :: gs
108 type(json_file),
target,
intent(inout) :: params_adjoint, params_primal
109 type(json_file),
target,
intent(inout) :: numerics_params
110 type(user_t),
target,
intent(in) :: user
111 type(field_series_t),
target,
intent(in) :: ulag, vlag, wlag
112 type(time_scheme_controller_t),
target,
intent(in) :: time_scheme
113 TYPE(field_t),
TARGET,
INTENT(IN) :: rho
114 type(chkp_t),
target,
intent(inout) :: chkp
115 type(json_file) :: json_subdict_adjoint, json_subdict_primal
117 character(len=:),
allocatable :: field_name
118 character(len=256),
allocatable :: field_names(:)
119 character(len=:),
allocatable :: primal_name, trial_primal_name
120 logical :: found_primal
122 if (n_adjoint_scalars .gt. n_primal_scalars)
then
123 call neko_error(
"More adjoint scalars than forward scalars")
134 allocate(field_names(n_adjoint_scalars))
137 if (n_adjoint_scalars > 1)
then
138 do i = 1, n_adjoint_scalars
140 call json_extract_item(params_adjoint,
"", i, json_subdict_adjoint)
143 if (json_subdict_adjoint%valid_path(
'name'))
then
144 call json_get(json_subdict_adjoint,
'name', field_name)
150 if (len_trim(field_name) == 0)
then
151 write(field_name,
'(A,I0,A)')
's_', i,
'_adj'
154 field_names(i) = trim(field_name)
159 if (trim(field_names(i)) == trim(field_names(j)))
then
160 write(field_name,
'(A,I0)') trim(field_names(i))//
'_', j
161 field_names(i) = trim(field_name)
170 do i = 1, n_adjoint_scalars
171 call json_extract_item(params_adjoint,
"", i, json_subdict_adjoint)
174 if (n_adjoint_scalars > 1)
then
175 call json_subdict_adjoint%add(
'name', trim(field_names(i)))
177 call json_subdict_adjoint%add(
'name',
's_adj')
184 call json_get_or_default(params_adjoint,
'primal_name', primal_name,
's')
186 found_primal = .false.
187 do j = 1, n_primal_scalars
189 call json_extract_item(params_primal,
"", j, json_subdict_primal)
192 if (json_subdict_primal%valid_path(
'name'))
then
193 call json_get(json_subdict_primal,
'name', trial_primal_name)
194 if (trim(trial_primal_name) == trim(primal_name))
then
195 found_primal = .true.
201 if (.not. found_primal)
then
202 call neko_error(
'Could not find corresponding primal scalar name')
205 call json_subdict_adjoint%add(
'primal_name', primal_name)
208 call this%adjoint_scalar_fields(i)%init(msh, coef, gs, &
209 json_subdict_adjoint, json_subdict_primal, numerics_params, &
210 user, chkp, ulag, vlag, wlag, time_scheme, rho)
231 params_primal, numerics_params, user, chkp, ulag, vlag, wlag, &
258 params_primal, numerics_params, user, chkp, ulag, vlag, wlag, &