Lors de la simulation d'un ordinateur en changeant peu à peu les paramètres, j'avais l'habitude de manipuler manuellement un fichier à chaque fois, mais à mesure que le nombre de données requises augmente (environ 200), cela devient difficile. J'ai donc écrit un script simple pour l'automatiser dans une certaine mesure.
Je le faisais manuellement -Créer un répertoire pour chaque valeur de paramètre -Créer un fichier d'entrée et un fichier de commande de travail dans le répertoire -Editer les paramètres du fichier d'entrée avec un éditeur ・ Soumission d'emploi Je vais utiliser la commande avec python pour qu'elle puisse être exécutée.
Cette fois, le progiciel de calcul des premiers principes est utilisé pour calculer l'énergie d'interaction obtenue à partir de la distance interatomique du graphite.
import os
import re
from time import sleep
```Osest utilisé pour les opérations de commande de terminal,
reest utilisé pour les expressions régulières et
sleep`` est utilisé pour espacer les soumissions de travaux.
Créez 200 éléments de données avec des distances interatomiques allant de 3,01 Å '' à
5,00 Å ''.
begin = 3.01
end = 5.00
step = 0.01
Créez au préalable le fichier d'entrée et le fichier source du fichier de travail dans le répertoire `` data '' et lisez ces fichiers.
#Attribuer le chemin à la variable
input_path = 'data/input_seed'
job_path = 'data/qsub_seed'
#Ouvrez le fichier et lisez-le sous forme de texte
with open(input_path) as f:
input_file = f.read()
with open(job_path) as f:
job_file = f.read()
Comme le paramètre n'est pas un entier et que la fonction range '' ne peut pas être utilisée, une nouvelle fonction
drange '' est définie.
#définition de fonction drange
def drange(begin, end, step):
n = begin
while n < end:
yield n
n += step
for r in drange(begin,end,step):
#Å=>Convertir en bohr
ang = ('{:.8f}'.format(r*2/0.529177))
#Créer un répertoire, spécifier le chemin du fichier
os.system('mkdir %s' % r)
input_name = ('%s/nfinp' % r)
job_name = ('%s/run.sh' % r)
#Remplacer la distance par une expression régulière
distance = str(ang)
input_mod = re.sub('distance',distance,input_file)
#Créer un fichier dans le répertoire
with open(input_name, mode='w') as f:
f.write(input_mod)
with open(job_name, mode='w') as f:
f.write(job_file)
#Entrez dans le répertoire et soumettez un travail
current_dir = os.getcwd()
os.chdir(current_dir + ('/%s' % r))
os.system('qsub run.sh')
os.chdir(current_dir)
sleep(1)
Le contenu du fichier d'entrée d'origine ressemble à ceci. La distance interatomique (`` distance '') est utilisée comme variable, et ** remplacée par une expression régulière **. Honnêtement, je ne comprends pas les autres parties 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
Ce serait bien si nous pouvions générer les parties nécessaires du fichier de sortie sous forme de base de données et même dessiner un graphique.
Recommended Posts