101 subroutine adjoint_scalars_init(this, n_adjoint_scalars, n_primal_scalars, &
102 msh, coef, gs, params_adjoint, params_primal, &
103 numerics_params, user, chkp, ulag, vlag, wlag, time_scheme, rho)
105 integer,
intent(in) :: n_adjoint_scalars, n_primal_scalars
106 type(mesh_t),
target,
intent(in) :: msh
107 type(coef_t),
target,
intent(in) :: coef
108 type(gs_t),
target,
intent(inout) :: gs
109 type(json_file),
target,
intent(inout) :: params_adjoint, params_primal
110 type(json_file),
target,
intent(inout) :: numerics_params
111 type(user_t),
target,
intent(in) :: user
112 type(field_series_t),
target,
intent(in) :: ulag, vlag, wlag
113 type(time_scheme_controller_t),
target,
intent(in) :: time_scheme
114 TYPE(field_t),
TARGET,
INTENT(IN) :: rho
115 type(chkp_t),
target,
intent(inout) :: chkp
116 type(json_file) :: json_subdict_adjoint, json_subdict_primal
118 character(len=:),
allocatable :: field_name
119 character(len=256),
allocatable :: field_names(:)
120 character(len=:),
allocatable :: primal_name, trial_primal_name
121 logical :: found_primal
123 if (n_adjoint_scalars .gt. n_primal_scalars)
then
124 call neko_error(
"More adjoint scalars than forward scalars")
135 allocate(field_names(n_adjoint_scalars))
138 if (n_adjoint_scalars > 1)
then
139 do i = 1, n_adjoint_scalars
141 call json_extract_item(params_adjoint,
"", i, json_subdict_adjoint)
144 if (json_subdict_adjoint%valid_path(
'name'))
then
145 call json_get(json_subdict_adjoint,
'name', field_name)
151 if (len_trim(field_name) == 0)
then
152 write(field_name,
'(A,I0,A)')
's_', i,
'_adj'
155 field_names(i) = trim(field_name)
160 if (trim(field_names(i)) == trim(field_names(j)))
then
161 write(field_name,
'(A,I0)') trim(field_names(i))//
'_', j
162 field_names(i) = trim(field_name)
171 do i = 1, n_adjoint_scalars
172 call json_extract_item(params_adjoint,
"", i, json_subdict_adjoint)
175 if (n_adjoint_scalars > 1)
then
176 call json_subdict_adjoint%add(
'name', trim(field_names(i)))
178 call json_subdict_adjoint%add(
'name',
's_adj')
185 call json_get_or_default(params_adjoint,
'primal_name', primal_name,
's')
187 found_primal = .false.
188 do j = 1, n_primal_scalars
190 call json_extract_item(params_primal,
"", j, json_subdict_primal)
193 if (json_subdict_primal%valid_path(
'name'))
then
194 call json_get(json_subdict_primal,
'name', trial_primal_name)
195 if (trim(trial_primal_name) == trim(primal_name))
then
196 found_primal = .true.
202 if (.not. found_primal)
then
203 call neko_error(
'Could not find corresponding primal scalar name')
206 call json_subdict_adjoint%add(
'primal_name', primal_name)
209 call this%adjoint_scalar_fields(i)%init(msh, coef, gs, &
210 json_subdict_adjoint, json_subdict_primal, numerics_params, &
211 user, chkp, ulag, vlag, wlag, time_scheme, rho)
232 params_primal, numerics_params, user, chkp, ulag, vlag, wlag, &
259 params_primal, numerics_params, user, chkp, ulag, vlag, wlag, &