Automatisieren Sie Jobs, indem Sie Dateien in Python bearbeiten

Wenn ich einen Computer simulierte, während ich die Parameter nach und nach änderte, habe ich jedes Mal eine Datei manuell bedient, aber mit zunehmender Anzahl der erforderlichen Daten (ca. 200) wird es schwierig. Also habe ich ein einfaches Skript geschrieben, um es bis zu einem gewissen Grad zu automatisieren.

Überblick

Ich habe es manuell gemacht

Dieses Mal wird das Berechnungspaket nach den ersten Prinzipien verwendet, um die Wechselwirkungsenergie zu berechnen, die aus dem interatomaren Abstand von Graphit erhalten wird.

Erforderliche Bibliotheken

import os
import re
from time import sleep

os wird für Terminalbefehlsoperationen verwendet, re wird für reguläre Ausdrücke verwendet und sleep wird für die Beabstandung von Jobübermittlungen verwendet.

Parameterbereichseinstellung

Erstellen Sie 200 Daten mit interatomaren Abständen von 3,01 Å bis 5,00 Å.

begin = 3.01
end = 5.00
step = 0.01

Eingabedateien und Jobdateien lesen

Erstellen Sie im Voraus die Eingabedatei und die Datei, aus der die Jobdatei stammt, im Verzeichnis data und lesen Sie diese Dateien.

#Weisen Sie der Variablen einen Pfad zu
input_path = 'data/input_seed'
job_path = 'data/qsub_seed'

#Öffnen Sie die Datei und lesen Sie sie als Text
with open(input_path) as f:
  input_file = f.read()
  
with open(job_path) as f:
  job_file = f.read()

Lauf

Da der Parameter keine Ganzzahl ist und die Funktion range nicht verwendet werden kann, wird eine neue Funktion drange definiert.

#Drange-Funktionsdefinition
def drange(begin, end, step):
    n = begin
    while n < end:
     yield n
     n += step
     
for r in drange(begin,end,step):
  #Å=>In bohr konvertieren
  ang = ('{:.8f}'.format(r*2/0.529177))

  #Verzeichnis erstellen, Dateipfad angeben
  os.system('mkdir %s' % r)
  input_name = ('%s/nfinp' % r)
  job_name = ('%s/run.sh' % r)
  
  #Ersetzen Sie den Abstand durch einen regulären Ausdruck
  distance = str(ang)
  input_mod = re.sub('distance',distance,input_file)
   
  #Erstellen Sie eine Datei im Verzeichnis
  with open(input_name, mode='w') as f:
    f.write(input_mod)
  
  with open(job_name, mode='w') as f:
    f.write(job_file)

  #Geben Sie das Verzeichnis ein und senden Sie einen Job
  current_dir = os.getcwd()
  os.chdir(current_dir + ('/%s' % r))
  os.system('qsub run.sh')
  os.chdir(current_dir)
  sleep(1)

Inhalt der Eingabedatei

Der Inhalt der ursprünglichen Eingabedatei sieht folgendermaßen aus. Der interatomare Abstand ( distance) wird als Variable verwendet und ** durch einen regulären Ausdruck ** ersetzt. Ich verstehe die anderen Teile ehrlich gesagt nicht lol

data/input_seed


0 0 0 0 0 0                    : graphite
6.00 20.00 1 4 4               : GMAX, GMAXP, NTYP, NATM, NATM2
1 0                            : num_space_group, type of bravis lattice
4.655149797 4.655149797 distance 90.0 90.0 60.0 : a,b,c,alpha,beta,gamma
24 24 2 1 1 1                  : knx,kny,knz, k-point shift
0 0                            : NCORD, NINV
 0.000000000000  0.000000000000  0.250000000000 1 1 1
 0.333333333333  0.333333333333  0.250000000000 1 1 1
 0.000000000000  0.000000000000 -0.250000000000 1 1 1
-0.333333333333 -0.333333333333 -0.250000000000 1 1 1
6 0.1500 1.00794 3 1 0.d0      : TYPE 1IATOMN,ALFA,AMION,ILOC,IVAN
0 0 0 0 0                      : ICOND 0-MD, 1-CONT.MD, 2-WAVE FN,, 3-WAVE FN CONT., iconstpw
0 1                            : IPRE, IPRI
200 1000 0 57200.00 0         : NMD1, NMD2, iter_last, CPUMAX,ifstop
6 1                            : Simple=1,Broyd2=3,Blugel=6, 1:charge, 2:potential mix.
0 30 0.5                       : starting mixing, kbxmix,alpha
0.60 0.50 0.60 0.70 1.00       : DTIM1, DTIM2, DTIM3, DTIM4, dtim_last
100.00 2 1 0.10D-08 1.d-06     : DTIO ,IMDALG, IEXPL, EDELTA
-0.0010 1.00D+03 0             : WIDTH,FORCCR,ISTRESS
rev-vdw-df2 1                       : XCTYPE, nspin
1.00 3                         : destm, n_stm
101                            : NBZTYP 0-SF, 1-BK, 2-SC, 3-BCC, 4-FCC, 5-DIA, 6-HEX
0 0 0                          : NKX, NKY, NKZ
0 0 0                          : NKX2,NKY2,NKZ2
12                             : NEG
1                              : NEXTST(MB)
0                              : 0; random numbers, 1; matrix diagon
2 0 0 0(MB)                    : imsd, i_2lm, i_sd2another, wksz for phase
0                              : evaluation of eko difference.0 = no ,1 = yes
0                              : npdosao
0 0.0                          : SM_N, dopping

Was ich als nächstes tun möchte

Es wäre schön, wenn wir die erforderlichen Teile der Ausgabedatei als Datenbank ausgeben und sogar ein Diagramm zeichnen könnten.

Recommended Posts

Automatisieren Sie Jobs, indem Sie Dateien in Python bearbeiten
Führen Sie automatisierte Jobs in Python aus
Sortieren nach Datum in Python
Verschieben von CSV-Dateien mit Python Teil 1
Bearbeiten von EAGLE .brd-Dateien mit Python
Laden Sie Google Drive-Dateien in Python herunter
Sortieren Sie große Textdateien in Python
Lesen Sie Dateien parallel zu Python
Exportieren und Ausgeben von Dateien in Python
Sortieren von Dateien nach Namenskonvention mit Python
Extrahieren Sie mit Python Zeichenfolgen aus Dateien
Suchen Sie nach Dateien wie Linux Find in Python
Geben Sie Anmerkungen für Python2 in Stub-Dateien ein!
Referenz der INI-Datei in Python oder Ruby
Lesen Sie die Datei Zeile für Zeile mit Python
Lesen Sie die Datei Zeile für Zeile mit Python
Lesen und schreiben Sie JSON-Dateien mit Python
Beispiel für den Umgang mit EML-Dateien in Python
Common Mock von Moto im Unit-Test von Python
Stellen Sie sicher, dass in Python regelmäßig Cron-ähnliche Jobs ausgeführt werden
Laden Sie Dateien in jedem Format mit Python herunter
Ausrichtungsalgorithmus durch Einfügemethode in Python
Szenenerkennung nach GIST-Feature-Quantität in Python
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
SendKeys in Python
[Python] Holen Sie sich die Dateien mit Python in den Ordner
Konvertieren Sie die FBX-Datei in Python in ASCII <-> BINARY
Metaanalyse in Python
Unittest in Python
Zusammenfassung zum Importieren von Dateien in Python 3
Beheben Sie den japanischen Schreibfehler UnicodeEncodeError in der Python-Datei
Epoche in Python
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
Lesen und Schreiben von CSV- und JSON-Dateien mit Python
N-Gramm in Python
Programmieren mit Python
Behandeln Sie Zip-Dateien mit japanischen Dateinamen in Python 3
Plink in Python
Konstante in Python
Zeichenkodierung beim Umgang mit Dateien in Python 3
Teilen Sie Dateien beim Schreiben des Vim-Plugins in Python
So erhalten Sie die Dateien im Ordner [Python]
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
Holen Sie sich die Datei, Funktion, Zeilennummer in Python ausgeführt
LINE-Bot [0] in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Konstante in Python