Source code for run

from T2GEORES import writer as writer
from T2GEORES import gener as t2g
import os
import subprocess
import shutil

[docs]def incon_replace(incon_file,blocks,incon_file_len): """It rewrite the incon file without the porosity, depending if it comes from .sav file or INCON generated with T2GEORES Parameters ---------- incon_file : str incon file to be rearange blocks: str Declares if the file has the block information on even or odd lines incon_file_len: int Length of incon file Returns ------- str string: formatted string with incon data Attention --------- The function is called by incon_to_t2() """ string="" for index, incon_line in enumerate(incon_file): if '+++' in incon_line: minus = 3 else: minus = 2 if blocks=='even' and index!=0 and index<=incon_file_len-minus: if index%2==1: string+=incon_line[0:5]+'\n' else: string+=incon_line if blocks=='odd' : if index%2!=1: string+=incon_line else: string+=incon_line return string
[docs]def incon_delete(): """It reads the TOUGH2 file assuming it is on ../model/t2/ and erases the INCON section Returns ------- file t2: file without INCON information Attention --------- There is no need of input argument Examples -------- >>> incon_delete() """ final_t2="" incon_section=False input_fi_file="../model/t2/t2" if os.path.isfile(input_fi_file): t2_file=open(input_fi_file, "r") for t2_line in t2_file: if 'INCON' in t2_line: incon_section=True elif 'ELEME' in t2_line: incon_section=False if not incon_section: final_t2+=t2_line t2_file.close() t2_file_out=open(input_fi_file, "w") t2_file_out.write(final_t2) t2_file_out.close() else: sys.exit("The file %s or directory do not exist"%input_fi_file)
[docs]def incon_to_t2(input_dictionary, file_name = None): """Adds the INCON block to the TOUGH2 input file Parameters ---------- input_dictionary : dictionary Dictionary contanining the information of the source of incon with keyword 'incon_state' can take the value of 'current' or 'init'. Returns ------- file t2: modified file on ../model/t2/t2 Examples -------- >>> incon_to_t2(input_dictionary) """ incon_state=input_dictionary['incon_state'] if incon_state=='current': input_incon="../model/t2/%s"%file_name blocks='even' incon_file_len=len(open(input_incon).readlines()) elif incon_state=='init': input_incon="../model/t2/sources/INCON" blocks='odd' incon_file_len=len(open(input_incon).readlines()) elif incon_state=='steinar': input_incon="../model/t2/sources/STE_INCON" blocks='odd' incon_file_len=len(open(input_incon).readlines()) elif incon_state=='init_mod': input_incon="../model/t2/sources/INCON_MOD" blocks='odd' incon_file_len=len(open(input_incon).readlines()) input_fi_file="../model/t2/t2" if os.path.isfile(input_fi_file): if os.path.isfile(input_incon): incon_file=open(input_incon, "r") t2_file=open(input_fi_file, "r") if 'INCON' not in open(input_fi_file).read(): final_t2="" for t2_line in t2_file: if 'ELEME' not in t2_line: final_t2+=t2_line elif 'ELEME' in t2_line: final_t2+='INCON\n' final_t2+=incon_replace(incon_file,blocks,incon_file_len) final_t2+='\nELEME----1----*----2----*----3----*----4----*----5----*----6----*----7----*----8\n' else: final_t2="" incon_section=False for t2_line in t2_file: if 'INCON' in t2_line: incon_section=True elif 'ELEME' in t2_line: incon_section=False final_t2+='INCON\n' final_t2+=incon_replace(incon_file,blocks,incon_file_len) final_t2+='\n' if not incon_section: final_t2+=t2_line incon_file.close() t2_file.close() t2_file_out=open(input_fi_file, "w") t2_file_out.write(final_t2) t2_file_out.close() else: sys.exit("The file %s or directory do not exist"%input_fi_file) else: sys.exit("The file %s or directory do not exist"%input_fi_file)
[docs]def update_gen(input_dictionary): """It updates the file the TOUGH2 input file based on the previous updates of all files on ../model/t2/sources/GENER_* Parameters ---------- input_dictionary : dictionary Dictionary contaning the type of desire run 'production' or 'natural' written on the keyword 'TYPE_RUN' Returns ------- file t2: file with the modified version of GENER Note ---- Some print sentences are expected depending on the availability of certain files Examples -------- >>> update_gen(input_dictionary) """ type_run=input_dictionary['TYPE_RUN'] final_t2="" incon_section=False input_fi_file="../model/t2/t2" sources_file='../model/t2/sources/GENER_SOURCES' well_sources_file='../model/t2/sources/GENER_PROD' makeup_well_sources_file='../model/t2/sources/GENER_MAKEUP' t2_ver=float(input_dictionary['VERSION'][0:3]) if os.path.isfile(input_fi_file): if os.path.isfile(sources_file): if 'GENER' not in open(input_fi_file).read(): t2_string="" t2_file=open(input_fi_file, "r") for t2_line in t2_file: if 'ENDCY' not in t2_line: t2_string+=t2_line else: pass if t2_ver<7: t2_string+='GENER----1----*----2----*----3----*----4----*----5----*----6----*----7----*----8\n' else: t2_string+='GENER D--1----*----2----*----3----*----4----*----5----*----6----*----7----*----8\n' gener_source_file=open(sources_file, "r") for sources in gener_source_file: t2_string+=sources gener_source_file.close() if type_run=='production': if os.path.isfile(well_sources_file): well_source_file=open(well_sources_file, "r") for sources in well_source_file: t2_string+=sources well_source_file.close() else: print("The file %s or directory do not exist"%well_sources_file) if os.path.isfile(makeup_well_sources_file): well_makeup_source_file=open(makeup_well_sources_file, "r") for sources in well_makeup_source_file: t2_string+=sources well_makeup_source_file.close() else: print("The file %s or directory do not exist"%well_sources_file) t2_string+='\n' t2_string+='ENDCY----1----*----2----*----3----*----4----*----5----*----6----*----7----*----8\n' t2_file.close() t2_file_out=open(input_fi_file, "w") t2_file_out.write(t2_string) t2_file_out.close() else: t2_string="" t2_file=open(input_fi_file, "r") for t2_line in t2_file: if 'GENER' not in t2_line: t2_string+=t2_line else: if t2_ver<7: t2_string+='GENER----1----*----2----*----3----*----4----*----5----*----6----*----7----*----8\n' else: t2_string+='GENER D--1----*----2----*----3----*----4----*----5----*----6----*----7----*----8\n' t2_string+="AA110DUM00 3 MASS 10.e5\n" t2_string+=" -infinity 0.0\n" t2_string+="%s 0.0\n"%(format(input_dictionary['ref_date'].strftime("%Y-%m-%d_00:00:00"),'>20s')) t2_string+=" infinity 0.0\n" gener_source_file=open(sources_file, "r") for sources in gener_source_file: t2_string+=sources if type_run=='production': if os.path.isfile(well_sources_file): well_source_file=open(well_sources_file, "r") for sources in well_source_file: t2_string+=sources well_source_file.close() else: print("The file %s or directory do not exist"%well_sources_file) if os.path.isfile(makeup_well_sources_file): well_makeup_source_file=open(makeup_well_sources_file, "r") for sources in well_makeup_source_file: t2_string+=sources well_makeup_source_file.close() else: print("The file %s or directory do not exist"%well_sources_file) break t2_string+='\nENDCY----1----*----2----*----3----*----4----*----5----*----6----*----7----*----8\n' t2_file.close() t2_file_out=open(input_fi_file, "w") t2_file_out.write(t2_string) t2_file_out.close() else: sys.exit("The file %s or directory do not exist"%sources_file) else: sys.exit("The file %s or directory do not exist"%input_fi_file)
[docs]def update_rock_distribution(input_dictionary): """It updates the file the TOUGH2 input file based on the new rock distribution Parameters ---------- input_dictionary : dictionary Dictionary contaning the information where the rock distribution comes from Returns ------- file t2: file with the modified version of ELEME and CONNE Examples -------- >>> update_rock_distribution(input_dictionary) """ writer.CONNE_from_steinar_to_t2() writer.merge_ELEME_and_in_to_t2() t2_string="" input_fi_file="../model/t2/t2" if os.path.isfile(input_fi_file): t2_file=open(input_fi_file, "r") ELEME_line=1E50 add_gener=False add_ELEME=False for i,t2_line in enumerate(t2_file): if 'ELEME' not in t2_line and ELEME_line>i: t2_string+=t2_line if 'ELEME' in t2_line: add_ELEME=True ELEME_line=0 if 'GENER D' in t2_line: add_gener=True if add_gener: t2_string+=t2_line if add_ELEME: t2_string+=writer.ELEME_adder(input_dictionary) t2_string+=writer.CONNE_adder(input_dictionary) add_ELEME=False t2_file.close() t2_file_out=open(input_fi_file, "w") t2_file_out.write(t2_string) t2_file_out.close() else: sys.exit("The file %s or directory do not exist"%input_fi_file)
[docs]def copy_folder(src,dest): """It copies all the files on a folder to another folder Parameters ---------- src : str Source directory dest : str Output directory Examples -------- >>> copy_folder('../model/t2','../model/t2/prev') """ src_files = os.listdir(src) for file_name in src_files: full_file_name = os.path.join(src, file_name) if os.path.isfile(full_file_name): try: shutil.copy(full_file_name, dest) except shutil.Error: print("%s and %s didnt change"%(full_file_name,dest))
[docs]def create_prev(): """It creates a copy of several folder for further comparisson Note ---- The folders to copy are: '../model/t2' '../output/PT/images' '../output/PT/json' '../output/PT/txt' '../output/PT/evol' '../output/mh' All of them contains a subfolder prev where the data is stored Examples -------- >>> create_prev() """ #Copy t2 output src='../model/t2' dest= '../model/t2/prev' copy_folder(src,dest) #Copy prev images output src='../output/PT/images' dest='../output/PT/images/prev' copy_folder(src,dest) #Copy prev json output src='../output/PT/json' dest='../output/PT/json/prev' copy_folder(src,dest) #Copy prev txt output src='../output/PT/txt' dest='../output/PT/txt/prev' copy_folder(src,dest) #Copy prev txt output src='../output/PT/evol' dest='../output/PT/evol/prev' copy_folder(src,dest) #Copy prev txt output src='../output/mh/txt' dest='../output/mh/txt/prev' copy_folder(src,dest)
[docs]def run(input_dictionary): """It runs the TOUGH2 input file Parameters ---------- input_dictionary : dictionary A dictionary with the EOS used on the model Returns ------- files various: containing the output from modelling """ EOS=input_dictionary['EOS'] version=input_dictionary['VERSION'] current=os.path.abspath(os.getcwd()) t2_input_file='%s/model/t2/t2'%current.replace('/scripts','') it2_input_file='%s/model/t2/fit2'%current.replace('/scripts','') shutil.copyfile(t2_input_file, current+'/t2') shutil.copyfile(it2_input_file, current+'/fit2') if not input_dictionary['IT2_alias']: subprocess.run(["itough2",'-v',version,'fit2','t2',str(EOS)]) else: subprocess.run([input_dictionary['IT2_alias'],'fit2','t2',str(EOS)]) target_dir = current.replace('/scripts','/model/t2') file_names = os.listdir(current) for file_name in file_names: if 't2.' in file_name or 'fit2' in file_name: try: shutil.move(os.path.join(current, file_name),os.path.join(target_dir, file_name) ) except shutil.Error: print("File already exist %s"%file_name)
[docs]def rock_update(input_dictionary): """ It updates the rock type on the TOUGH2 file Parameters ---------- input_dictionary : dictionary TOUGH2 file name """ t2_string = "" input_fi_file = "../model/t2/%s"%input_dictionary['TOUGH2_file'] if os.path.isfile(input_fi_file): t2_file=open(input_fi_file, "r") ELEME_line = 1E50 add_param = False add_rocks = False for i,t2_line in enumerate(t2_file): if 'ROCKS' not in t2_line and ELEME_line>i: t2_string+=t2_line if 'ROCKS' in t2_line: add_rocks=True ELEME_line=0 if 'PARAM' in t2_line or 'START' in t2_line: add_param = True if add_param: t2_string += t2_line if add_rocks: t2_string += writer.ROCKS_writer(input_dictionary) add_rocks = False t2_file.close() t2_file_out = open(input_fi_file, "w") t2_file_out.write(t2_string) t2_file_out.close() else: sys.exit("The file %s or directory do not exist"%input_fi_file)