configure_output_variables Subroutine

subroutine configure_output_variables(target_variable_list, input_categories, active_categories, json, key)

Arguments

Type IntentOptional Attributes Name
character(len=:), intent(inout), allocatable :: target_variable_list(:)
character(len=*), intent(in) :: input_categories(:)
character(len=*), intent(in) :: active_categories(:)
class(json_file), intent(inout) :: json
character(len=*), intent(in) :: key

Calls

proc~~configure_output_variables~~CallsGraph proc~configure_output_variables configure_output_variables destroy destroy proc~configure_output_variables->destroy interface~filter filter proc~configure_output_variables->interface~filter proc~error_message error_message proc~configure_output_variables->proc~error_message proc~filter_character_array filter_character_array interface~filter->proc~filter_character_array log_error log_error proc~error_message->log_error

Called by

proc~~configure_output_variables~~CalledByGraph proc~configure_output_variables configure_output_variables proc~read_output_settings_fields read_output_settings_fields proc~read_output_settings_fields->proc~configure_output_variables proc~read_output_settings_history read_output_settings_history proc~read_output_settings_history->proc~configure_output_variables proc~inout_read_output_settings inout_read_output_settings proc~inout_read_output_settings->proc~read_output_settings_fields proc~inout_read_output_settings->proc~read_output_settings_history interface~inout_read_output_settings type_input%inout_read_output_settings interface~inout_read_output_settings->proc~inout_read_output_settings proc~initialize_type_input type_input%initialize_type_input proc~initialize_type_input->interface~inout_read_output_settings

Source Code

    subroutine configure_output_variables(target_variable_list, input_categories, active_categories, json, key)
        implicit none
        ! --- 引数 ---
        character(:), allocatable, intent(inout) :: target_variable_list(:)
        character(len=*), intent(in) :: input_categories(:)
        character(len=*), intent(in) :: active_categories(:)
        class(json_file), intent(inout) :: json
        character(len=*), intent(in) :: key

        ! --- ローカル変数 ---
        character(len=40), allocatable :: current_valid_names(:)
        logical, allocatable :: mask(:)
        integer :: i, j, n_valid ! ★「count」を「n_valid」に変更

        ! ==========================================================================
        ! STEP 1: active_categories に基づいて、有効な変数リストを動的に作成
        ! ==========================================================================
        allocate (mask(size(master_valid_variables)))
        mask(:) = .false.
        ! ★DOループで要素ごとに比較
        do i = 1, size(master_valid_variables)
            do j = 1, size(active_categories)
                if (trim(master_valid_variables(i)%category) == trim(active_categories(j))) then
                    mask(i) = .true.
                end if
            end do
        end do

        ! ★組み込み関数count()を使う
        n_valid = count(mask)
        if (n_valid > 0) then
            allocate (current_valid_names(n_valid))
            current_valid_names = pack([(master_valid_variables(j)%name, j=1, size(master_valid_variables))], mask)
        else
            allocate (current_valid_names(0))
        end if
        deallocate (mask)

        ! ==========================================================================
        ! STEP 2: 作成した有効リストを使い、ユーザーが要求した変数をフィルタリング
        ! ==========================================================================
        call filter(input_categories, current_valid_names, target_variable_list)

        if (size(target_variable_list) == 0) then
            call json%destroy()
            call error_message(905, c_opt=key)

        end if

        deallocate (current_valid_names)

    end subroutine configure_output_variables