Во время открытия входного файла с помощью программы pwgui появились сообщения об ошибках.

Вопрос или проблема

Каждый раз, когда я пытаюсь открыть файл ввода Quantum Espresso с помощью программы PWgui (графический интерфейс QE), появляется следующее сообщение:

==================================================
Версия PWgui : 7.2

PWGUI : /opt/local/bin/qe-7.3/GUI/PWgui/
GUIB движок : /opt/local/bin/qe-7.3/GUI/PWgui/lib/Guib-1.0

Член функции “::guib::moduleObj::makeEmbedGUI” не определен и не может быть автоматически загружен
при выполнении
“$obj makeEmbedGUI [expr {$containerWidget != “.” ? $containerWidget : “” }]”
(процедура “::guib::embedGUI”, строка 6)
вызвано внутри
“::guib::embedGUI $moduleFile $wid”
(объект “::gUI0”, метод “::guib::GUI::_newInput”, тело строка 56)
вызвано внутри
“_newInput $moduleIdent $moduleName $moduleFile”
(объект “::gUI0”, метод “::guib::GUI::openInput”, тело строка 11)
вызвано внутри
“$gui openInput $moduleIdent $moduleName $moduleFile $inputFile”
(файл “/opt/local/bin/qe-7.3/GUI/PWgui//pwgui.tcl”, строка 10)
вызвано внутри
“source $env(PWGUI)/pwgui.tcl”
(файл “/opt/local/bin/qe-7.3/GUI/PWgui/pwgui”, строка 41)

Вот файл pwgui.tcl, который, как я понимаю, вызывает эту ошибку.

# ----------------------------------------------------------------------
#  ПРОГРАММА: PWgui
#  ЦЕЛЬ: Строитель ввода GUI для PWscf
# ----------------------------------------------------------------------
#  Антон Кокаль
#  Институт Йожафа Штефана, Любляна, Словения
#  Электронная почта: [email protected]
# ======================================================================
#  Авторское право (c) 2003--2023 Антон Кокаль
# ======================================================================
#
#
# Этот файл распространяется на условиях Общей публичной лицензии
# GNU. См. файл COPYING в корневом каталоге данной
# дистрибуции, или http://www.gnu.org/copyleft/gpl.txt.
#
# 
# ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ "КАК ЕСТЬ", БЕЗ ГАРАНТИЙ ЛЮБОГО РОДА,
# ЯВНЫХ ИЛИ НЕЯВНЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ
# ТОРГОВОЙ ПРИГОДНОСТИ, ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ И
# НЕНАРУШЕНИЯ.  ПОД НИКАКИМИ УСЛОВИЯМИ АНТОН КОКАЛЬ НЕ НОСИТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ
# ИСКИ, УЩЕРБ ИЛИ ДРУГИЕ ОБЯЗАТЕЛЬСТВА, БУДУ ТОЛЬКО В ДЕЙСТВИИ КОНТРАКТА,
# ДЕЛИКТЕ ИЛИ ИНДИФФЕРЕНТНО, ВЫТЕКАЮЩИЕ ИЗ ИЛИ В СВЯЗИ С ПРИЛОЖЕНИЕМ
# ИЛИ ИСПОЛЬЗОВАНИЕМ ИЛИ ДРУГИМИ СДЕЛКАМИ С ПО.
#

# Версия PWgui

set fid [open $env(PWGUI)/VERSION]
set ver [read -nonewline $fid]
close $fid

# создаем список поддерживаемых программ QE

foreach item [glob -nocomplain [file join $env(PWGUI) modules *]] {
    if { [file isdirectory $item] } {
        set prog [file tail $item]
        if { $prog == "atomic" } {
            append progs "          [format {%-9s  или  %-9s} ld1.x atomic]\n"
        } else {
            append progs "          [format {%-9s  или  %-9s} $prog.x $prog]\n"
        }
        lappend prog_l [file rootname $prog]
    }
}

# использование

set usage [subst -nocommands {
    Использование:  pwgui [-h] |  [-r программа inputFile] [-o программа inputFile]

    Описание параметров:

    -h
    -?
    --help
          Печатает это сообщение об использовании.

    -r  программа  inputFile
    --reformat  программа  inputFile
          Читает "inputFile" программы QE (например, pw.x, pp.x, ...),
          проверяет его синтаксис на корректность и красиво форматирует.

    -o  программа  inputFile
    --open  программа  inputFile
          Открывает "inputFile" программы QE (например, pw.x, pp.x, ...)
          в PWgui.

    Допустимые значения для "program":

$progs
}]

set o_usage {
    Неверное использование параметра $opt, должно быть:

    pwgui $opt программа inputFile
}

# парсим параметры командной строки

set reformat 0
set open     0

if { $argc > 0 } {
    set opt [lindex $argv 0]
    switch -glob -- $opt {
        -h - --help - -\\? {
            puts $usage
            exit 0
        }
        -r* - --ref* {
            # -r | --reformat
            if { $argc != 3 } { puts [subst $o_usage]; exit 1 }
            set reformat 1
        }
        -o* - --open {
            # -o | --open
            if { $argc != 3 } { puts [subst $o_usage]; exit 1 }
            set open 1
        }
        default {
            puts "\n    Неверный параметр \"$opt\", прерывание...\n$usage"
            exit 1
        }
    }

    set module    [file rootname [lindex $argv 1]]
    set inputFile [lindex $argv 2]
    if { ! [file exists $inputFile] } {
        puts "
   Файл \"$inputFile\" не существует.\n"  
        exit 1
    }
    if { $module == "ld1" || $module == "atomic" } {
        set module      atomic
        set moduleIdent ld
        set moduleName  LD1.X
    } else {
        set moduleIdent $module
        set moduleName  [string toupper $module].X
    }
    set moduleFile [file join $env(PWGUI) modules $module $module.tcl]

    # проверка действительного модуля    

    if { [lsearch $prog_l $module] < 0 } {
        puts "[subst $o_usage]
    где программа должна быть одной из:

       [join $prog_l {, }]\n"
        exit 1
    }
}

if { [info exists env(PWGUI)] } {    
    set guib_dir [glob -nocomplain -directory [file join $env(PWGUI) lib] Guib-*]
    if { $guib_dir != "" } {
    set env(GUIB) $guib_dir
    } else {
        set guib_dir [file normalize [file join $env(PWGUI) .. Guib]]
    if { [file isdirectory $guib_dir] } {
            # мы приходим сюда, если используем PWgui внутри QE
            set env(GUIB) $guib_dir
        }
    }

    if { [info exists env(GUIB)] } {
    lappend auto_path $env(GUIB)
    } else {
        puts "
 Двигатель Guib не найден. 
 Вы можете рассмотреть возможность определения переменной среды GUIB, указывающей на движок Guib.

 Прерывание.
"
        exit 1
    }

    if { ! $reformat } {
        puts "
 ==================================================
  Версия PWgui :   $ver
 --------------------------------------------------

 PWGUI       : $env(PWGUI)
 GUIB движок : $env(GUIB)\n"
    }

} else {
    puts stderr " "
    puts stderr " Пожалуйста, определите переменную среды PWGUI !!!"
    puts stderr " PWGUI должна указывать на корневую директорию PWgui."
    puts stderr " "
    exit 1
}

#
# вся инициализация должна происходить в init.tcl
#
source [file join $env(PWGUI) init.tcl]

wm withdraw .

if { ! $reformat } {
    #
    # открываем главное окно GUI
    #
    bind . <Destroy> ::guib::exitApp
    source [file join $env(PWGUI) src pwscf.itcl]

    if { $open } {
        # открываем указанный файл ввода
        $gui openInput $moduleIdent $moduleName $moduleFile $inputFile
    }
} else {
    #
    # только переформатируем указанный файл ввода
    #
    set ::tclu::DEBUG 0
    set ::tclu::DEBUG_FILE 0
    option readfile [file join $::guib::library guib.theme] startupFile

    namespace eval ::guib  {
        set moduleObj [embedGUI $::moduleFile .]
        $moduleObj openFile $::inputFile
        $moduleObj print 1
    }
    exit 0
}

Я не знаком с этим языком программирования и не являюсь экспертом в этой области. Поэтому я благодарен любому, кто сможет просмотреть код и увидеть, что пошло не так.

Ответ или решение

Когда вы пытаетесь открыть входной файл для Quantum Espresso с помощью PWgui (версия 7.2), вы получаете ошибку, которая может быть связана с несколькими аспектами программы и её окружения. Ошибка, которую вы видите, говорит о том, что функция "::guib::moduleObj::makeEmbedGUI" не определена и не может быть загружена автоматически.

Возможные причины проблемы

  1. Проблемы с установкой или обновлениями: Убедитесь, что установлены все необходимые зависимости для PWgui и что версии всех компонентов совместимы друг с другом. Учтите, что версия PWgui, которую вы используете, может иметь зависимости, которые были изменены или обновлены.

  2. Отсутствие необходимых модулей: Сообщение об ошибке намекает на то, что PWgui не может найти или загрузить необходимый модуль GUIB. Проверьте, определена ли переменная среды GUIB, указывающая на правильный путь к движку Guib. Для этого можете выполнить в терминале команду:

    echo $GUIB

    Проверьте, что путь корректен и существует.

  3. Ошибки в коде скрипта: Если вы изменяли pwgui.tcl, это может быть причиной сбоя. Убедитесь, что файл не был повреждён и все необходимые функции присутствуют. Особенно важно проверить строки, связанные с функциями модуля Guib, на наличие синтаксических и логических ошибок.

  4. Версии программного обеспечения: Убедитесь, что вы используете совместимые версии Quantum Espresso и PWgui. Программное обеспечение может иметь специфические требования к версиям, так как более новые или более старые версии могут иметь изменения в API.

Шаги по устранению ошибки

  1. Проверка переменных окружения: Убедитесь, что переменная PWGUI правильно задана и указывает на корневую директорию PWgui. Если она не задана, вы можете добавить её в ваш .bashrc или .bash_profile:

    export PWGUI=/path/to/pwgui
  2. Проверка наличия необходимых модулей: Убедитесь, что в каталоге modules вашей установки PWgui есть необходимые файлы и они не были удалены или перемещены.

  3. Запуск с отладкой: Вы можете запустить PWgui с помощью отладочных сообщений, чтобы получить более детальную информацию о том, что именно вызывает сбой. Добавьте отладочные сообщения в код, чтобы увидеть, какие части кода выполняются, а какие – нет.

  4. Обновление программного обеспечения: Если проблема сохраняется, возможно, стоит обновить PWgui и Quantum Espresso до последних стабильных версий. Это может решить проблемы, связанные с совместимостью.

Резюме

Ваша ошибка может быть вызвана несколькими причинами, включая проблемы с установкой и зависимостями, отсутствием необходимых модулей и возможные ошибки в коде. Следуйте предложенным шагам, чтобы диагностировать и устранить проблему. Если ничего не помогает, стоит рассмотреть возможность обращения за помощью на форумы поддержки Quantum Espresso или обратиться к документации.

Оцените материал
Добавить комментарий

Капча загружается...