# -*- coding: utf-8 -*-
"""
Created on Thu Apr 25 11:26:04 2019
@author: Lee
"""
""" Goal is to take inputs from the import_geometry module and edit a blockmesh file template"""
import shutil
from shutil import copyfile
from shutil import copy
"""Moving forward assuming the filepath is known for the Stoveopt master directory
In the future, the path and filename will be an argument for the software provided by user in input file"""
block_mesh_template_fname = "blockMeshDict_Template_reactionfoam_empty" #No file type
[docs]def locate_blockmesh_template(block_mesh_template_fname):
"""the function uses the StoveOpt path and blockmesh template name to open the
template version of the blockMeshDict file for editing in the system folder"""
# Current working dir for stove opt master
path_StoveOpt_master = os.getcwd()
# Steps to system folder
dir_steps = "//foamfiles//counterFlowFlame2D//system//"
blockmesh_template = path_StoveOpt_master + dir_steps + block_mesh_template_fname # location and path name of blockmesh template
print(blockmesh_template)
f = open(blockmesh_template,"r")
#print(f.read())
print("located template file in system folder")
f.close()
system_folder = path_StoveOpt_master + dir_steps
return blockmesh_template, system_folder
[docs]def update_blockmesh(blockmesh_template, system_folder):
"""Used to create (but not assign) a new name for the blockmesh file saving name to the blockMeshDict required for running--in the system folder"""
with open(blockmesh_template,'r') as f:
# Save file with iterative name here (this is for future development..?)
saveLocation = system_folder
saveFileName = "blockMeshDict" # Will need to be updated to save iteratively
saveName = saveLocation + saveFileName
f.close()
return saveName
[docs]def rename_blockmesh(saveName, blockmesh_template):
"""Moving the file and renaming--Need to add an existence check"""
exists = os.path.isfile(saveName) # Will exist if a file named blockMeshDict is already in the location
if exists:
# Probably should either delete the current file there, or move it to obselete
print("blockmeshfile for run already exists--moving to obselete")
# Still need to put this functionality in
else:
os.rename(blockmesh_template, saveName)
import os
[docs]def edit_blockmesh_template(saveName, pt0str, pt1str, pt2str, pt3str, pt4str, pt5str, pt6str, pt7str, pt8str, pt9str, pt10str, pt11str, pt12str, pt13str, pt14str, pt15str, pt16str, pt17str, pt18str, pt19str, pt20str, pt21str, pt22str, pt23str, pt24str, pt25str, pt26str, pt27str, pt28str, pt29str, pt30str, pt31str, pt32str, pt33str, pt34str, pt35str, pt36str, pt37str, pt38str, pt39str, pt40str, pt41str, pt42str, pt43str, pt44str, pt45str, pt46str, pt47str, pt48str, pt49str, pt50str, pt51str):
"""open the blockmeshtemplate for edit, locate the positions needed, and overwrite the vertice lines"""
# 703 is where the cursor is immediately before the pt1 string
with open(saveName, 'r+') as f:
f.seek(639) #pt1
f.write(pt0str +'\n')
f.write(pt1str +'\n')
f.write(pt2str+'\n')
f.write(pt3str+'\n')
f.write(pt4str+'\n')
f.write(pt5str+'\n')
f.write(pt6str+'\n')
f.write(pt7str+'\n')
f.write(pt8str+'\n')
f.write(pt9str+'\n')
f.write(pt10str+'\n')
f.write(pt11str+'\n')
f.write(pt12str+'\n')
f.write(pt13str+'\n')
f.write(pt14str+'\n')
f.write(pt15str+'\n')
f.write(pt16str+'\n')
f.write(pt17str+'\n')
f.write(pt18str+'\n')
f.write(pt19str+'\n')
f.write(pt20str+'\n')
f.write(pt21str+'\n')
f.write(pt22str +'\n')
f.write(pt23str +'\n')
f.write(pt24str+'\n')
f.write(pt25str+'\n')
f.write(pt26str+'\n')
f.write(pt27str+'\n')
f.write(pt28str+'\n')
f.write(pt29str+'\n')
f.write(pt30str+'\n')
f.write(pt31str+'\n')
f.write(pt32str+'\n')
f.write(pt33str+'\n')
f.write(pt34str+'\n')
f.write(pt35str+'\n')
f.write(pt36str+'\n')
f.write(pt37str+'\n')
f.write(pt38str+'\n')
f.write(pt39str+'\n')
f.write(pt40str+'\n')
f.write(pt41str+'\n')
f.write(pt42str+'\n')
f.write(pt43str+'\n')
f.write(pt44str+'\n')
f.write(pt45str+'\n')
f.write(pt46str+'\n')
f.write(pt47str+'\n')
f.write(pt48str+'\n')
f.write(pt49str+'\n')
f.write(pt50str+'\n')
f.write(pt51str+'\n')
[docs]def move_bmesh_to_templatecase(saveName):
"""Copy the previously edited blockmesh file to the template case system folder"""
current_dir = os.getcwd() # current working directory
template_case_steps = "\\foamfiles\\counterFlowFlame2D\\template_case\\"
system_steps = "system"
source = saveName
destination = current_dir + template_case_steps + system_steps
copy(source, destination)
# This should be run after the blockmesh and CFD case have been excecuted
[docs]def replace_template(path_StoveOpt_master, block_mesh_template_fname, dir_steps):
"""Move the template from the backup folder into the system folder for future edits
Does not excecute if the template file is already there"""
templateFile = path_StoveOpt_master + dir_steps + "backup/" + block_mesh_template_fname # template path/name
print(templateFile)
newFile = path_StoveOpt_master + dir_steps + block_mesh_template_fname # template path/name minus the backup folder
print(newFile)
exists = os.path.isfile(newFile)
if exists:
print("template already in location")
else:
copyfile(templateFile,newFile)
# Edit the controlDict file--> add the proper vertices for the temperature data, and for the composition data
[docs]def modify_controlDict(pt10str, pt11str, pt9str, pt48str, pt44str, pt14str, pt20str, pt6str, pt21str, pt7str, pt46str, pt15str, pt8str, pt50str, pt12str, pt13str):
"""Add the points to the controlDict file for the temperature data, and emissions data"""
current_dir = os.getcwd() # master StoveOpt directory
current_dir = str(current_dir)
template_case_steps = "\\foamfiles\\counterFlowFlame2D\\template_case\\system\\"
# Path steps from StoveOpt to the case 25-150 case file
template_steps = "/foamfiles/counterFlowFlame2D/file_templates/blank/controlDict"
replacement_template_steps = "/foamfiles/counterFlowFlame2D/file_templates/replacement/controlDict"
steps_25 = "\\foamfiles\\counterFlowFlame2D\\case_25\\system\\controlDict"
steps_50 = "/foamfiles/counterFlowFlame2D/case_50/system/controlDict"
steps_100 = "/foamfiles/counterFlowFlame2D/case_100/system/controlDict"
steps_125 = "/foamfiles/counterFlowFlame2D/case_125/system/controlDict"
steps_150 = "/foamfiles/counterFlowFlame2D/case_150/system/controlDict"
# Full paths
path_25 = current_dir + steps_25
path_50 = current_dir + steps_50
path_100 = current_dir + steps_100
path_125 = current_dir + steps_125
path_150 = current_dir + steps_150
template_path = current_dir + template_steps
replacement_template_path = current_dir + replacement_template_steps
template_cases_path = current_dir + template_case_steps # where
print("case template controlDict path")
print(template_cases_path)
loc = 1504 # position where the points entry begins
# Open and edit template--add the probing points all around the cookstove currently includes back and front points
with open(template_path, 'r+') as f:
f.seek(loc)
#f.write('(' + '\n')
f.write(pt10str + '\n')
f.write(" ")
f.write(pt11str + '\n')
f.write(" ")
f.write(pt9str + '\n')
f.write(" ")
f.write(pt48str + '\n')
f.write(" ")
f.write(pt44str + '\n')
f.write(" ")
f.write(pt14str + '\n')
f.write(" ")
f.write(pt20str + '\n')
f.write(" ")
f.write(pt6str + '\n')
f.write(" ")
f.write(pt21str + '\n')
f.write(" ")
f.write(pt7str + '\n')
f.write(" ")
f.write(pt46str + '\n')
f.write(" ")
f.write(pt15str + '\n')
f.write(" ")
f.write(pt8str + '\n')
f.write(" ")
f.write(pt50str + '\n')
f.write(" ")
f.write(pt12str + '\n')
f.write(" ")
f.write(pt15str + '\n')
f.write('\n')
f.write(');')
# copy the controlDict file and paste to the case directories
shutil.copyfile(template_path, path_25)
shutil.copyfile(template_path, path_50)
shutil.copyfile(template_path, path_100)
shutil.copyfile(template_path, path_125)
shutil.copyfile(template_path, path_150)
shutil.copy(template_path, template_cases_path)
# replace controlDict in the templates directory with the blank---not sure that this is actually necessary
shutil.copyfile(replacement_template_path, template_path)