Вложено, пока цикл в bash Сценарий для загрузки заданий Loadleveler работает неправильно? - PullRequest
0 голосов
/ 09 сентября 2018
#!/bin/bash

rm WAVECAR k_conv k_plot
#k convergence

for i in 2 4 6 8 9 10 11 12 13 14 15 16 ; 
do
    cat >KPOINTS <<!
    pymatgen 4.7.6+ generated KPOINTS with grid density = 875 / atom
    0
    Monkhorst
    $i $i $i
    !

    echo "k = $i" ; 

    b=$(llsubmit multiple.cmd) ;

    c=$(echo $b | awk '{ 
    ret=match($0,".in.") 
    rwt=match($0,"\" has")
    rqt=rwt-(ret+4)
    subs=substr($0,(ret+4),rqt)
    print subs
    }') ;

    #c stores the job id

    d=1 ;

    until [ $d -eq 0 ]
    do
        b=$(llq $c) ; #llq is the command to query job information

        d=$(echo $b | awk '{
        if ($0 ~ /mm17s003/)
            {print 1}
        else
            {print 0}
        }')
    done

    E=$(tail -1 OSZICAR) ;

    echo $i $E >> k_conv
done

awk '{print $1 "\t" $(NF-5)}' k_conv >> k_plot ; #Used to just write two specific columns from the file k_conv to k_plot.

Это файл сценария, который я использую для отправки заданий, который изменяет значение одного входного параметра в файле KPOINTS перед отправкой задания каждый раз. for loop для этого. multiple.cmd - это сценарий фактической отправки задания, а llsubmit - команда отправки задания для loadleveler.

nested until loop используется для запроса статуса задания для конкретной отправленной работы. Пока работа не закончена, этот цикл повторяется. После завершения работы и окончания until loop создается выходной файл OSZICAR. Awk используется для извлечения определенных строк, которые затем сохраняются в E. Наконец, переменная цикла for i (то есть входной параметр для вычисления, который изменяет скрипт) и E сохраняются в файле k_conv. Конец for loop.

По сути, из-за until loop одновременно должна быть представлена ​​только одна работа. После этого начинается следующая итерация for loop и отправляется новое задание. Каким-то образом, когда я запускаю скрипт, для любых двух или трех случайных значений i задания представляются одновременно. Я предполагаю, что есть какая-то проблема с until loop.

Вывод llsubmit multiple.cmd, который изначально хранится в b: llsubmit: The job "c1hn1.virgo.iitm.ac.in.2077655" has been submitted.

c принимает идентификатор задания (2077655 из приведенного выше примера) в качестве значения.

Вывод llq $c, который сохраняется в b позже: Id Owner Submitted ST PRI Class Running On ------------------------ ---------- ----------- -- --- ------------ ----------- c1hn1.2077655.0 mm17s003 9/9 23:43 I 50 Small 1 job step(s) in query, 1 waiting, 0 pending, 0 running, 0 held, 0 preempted

Любая помощь очень ценится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...