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, &