Вложено, пока цикл в bash Сценарий для загрузки заданий Loadleveler работает неправильно?

#!/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.

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

Выход из llq $c это хранится в б позже: 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

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

0 ответов

Другие вопросы по тегам