Type | Intent | Optional | 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 |
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