Module MeshDatabase
@author: Alexandre Sac–Morane alexandre.sac-morane@uclouvain.be
Manage the database of the meshes known to reduce the computation cost.
Expand source code
#-------------------------------------------------------------------------------
# Librairies
#-------------------------------------------------------------------------------
import pickle
from pathlib import Path
#-------------------------------------------------------------------------------
# Functions
#-------------------------------------------------------------------------------
def check_mesh_database(dict_user, dict_sample, dict_pp):
'''
Check mesh database.
'''
if Path('mesh_map.database').exists():
with open('mesh_map.database', 'rb') as handle:
dict_database = pickle.load(handle)
dict_data = {
'n_proc': dict_user['n_proc'],
'x_min': min(dict_sample['L_x']),
'x_max': max(dict_sample['L_x']),
'y_min': min(dict_sample['L_y']),
'y_max': max(dict_sample['L_y']),
'n_mesh_x': len(dict_sample['L_x']),
'n_mesh_y': len(dict_sample['L_y'])
}
mesh_map_known = False
for i_run in range(1,len(dict_database.keys())+1):
if dict_database['Run_'+str(int(i_run))]['n_proc'] == dict_user['n_proc'] and\
dict_database['Run_'+str(int(i_run))]['x_min'] == dict_user['x_min'] and\
dict_database['Run_'+str(int(i_run))]['x_max'] == dict_user['x_max'] and\
dict_database['Run_'+str(int(i_run))]['y_min'] == dict_user['y_min'] and\
dict_database['Run_'+str(int(i_run))]['y_max'] == dict_user['y_max'] and\
dict_database['Run_'+str(int(i_run))]['n_mesh_x'] == dict_user['n_mesh_x'] and\
dict_database['Run_'+str(int(i_run))]['n_mesh_y'] == dict_user['n_mesh_y'] :
mesh_map_known = True
i_known = i_run
if mesh_map_known :
dict_pp['L_L_i_XYZ_not_used'] = dict_database['Run_'+str(int(i_known))]['L_L_i_XYZ_not_used']
dict_pp['L_XYZ'] = dict_database['Run_'+str(int(i_known))]['L_XYZ']
else :
dict_pp['L_L_i_XYZ_not_used'] = None
else :
dict_pp['L_L_i_XYZ_not_used'] = None
#------------------------------------------------------------------------------------------------------------------------------------------ #
def save_mesh_database(dict_user, dict_sample, dict_pp):
'''
Save mesh database.
'''
# creating a database
if not Path('mesh_map.database').exists():
dict_data = {
'n_proc': dict_user['n_proc'],
'x_min': min(dict_sample['L_x']),
'x_max': max(dict_sample['L_x']),
'y_min': min(dict_sample['L_y']),
'y_max': max(dict_sample['L_y']),
'n_mesh_x': len(dict_sample['L_x']),
'n_mesh_y': len(dict_sample['L_y']),
'L_L_i_XYZ_not_used': dict_pp['L_L_i_XYZ_not_used'],
'L_XYZ': dict_pp['L_XYZ']
}
dict_database = {'Run_1': dict_data}
with open('mesh_map.database', 'wb') as handle:
pickle.dump(dict_database, handle, protocol=pickle.HIGHEST_PROTOCOL)
# updating a database
else :
with open('mesh_map.database', 'rb') as handle:
dict_database = pickle.load(handle)
dict_data = {
'n_proc': dict_user['n_proc'],
'x_min': min(dict_sample['L_x']),
'x_max': max(dict_sample['L_x']),
'y_min': min(dict_sample['L_y']),
'y_max': max(dict_sample['L_y']),
'n_mesh_x': len(dict_sample['L_x']),
'n_mesh_y': len(dict_sample['L_y']),
'L_L_i_XYZ_not_used': dict_pp['L_L_i_XYZ_not_used'],
'L_XYZ': dict_pp['L_XYZ']
}
mesh_map_known = False
for i_run in range(1,len(dict_database.keys())+1):
if dict_database['Run_'+str(int(i_run))] == dict_data:
mesh_map_known = True
# new entry
if not mesh_map_known:
key_entry = 'Run_'+str(int(len(dict_database.keys())+1))
dict_database[key_entry] = dict_data
with open('mesh_map.database', 'wb') as handle:
pickle.dump(dict_database, handle, protocol=pickle.HIGHEST_PROTOCOL)
Functions
def check_mesh_database()
-
Check mesh database.
Expand source code
def check_mesh_database(dict_user, dict_sample, dict_pp): ''' Check mesh database. ''' if Path('mesh_map.database').exists(): with open('mesh_map.database', 'rb') as handle: dict_database = pickle.load(handle) dict_data = { 'n_proc': dict_user['n_proc'], 'x_min': min(dict_sample['L_x']), 'x_max': max(dict_sample['L_x']), 'y_min': min(dict_sample['L_y']), 'y_max': max(dict_sample['L_y']), 'n_mesh_x': len(dict_sample['L_x']), 'n_mesh_y': len(dict_sample['L_y']) } mesh_map_known = False for i_run in range(1,len(dict_database.keys())+1): if dict_database['Run_'+str(int(i_run))]['n_proc'] == dict_user['n_proc'] and\ dict_database['Run_'+str(int(i_run))]['x_min'] == dict_user['x_min'] and\ dict_database['Run_'+str(int(i_run))]['x_max'] == dict_user['x_max'] and\ dict_database['Run_'+str(int(i_run))]['y_min'] == dict_user['y_min'] and\ dict_database['Run_'+str(int(i_run))]['y_max'] == dict_user['y_max'] and\ dict_database['Run_'+str(int(i_run))]['n_mesh_x'] == dict_user['n_mesh_x'] and\ dict_database['Run_'+str(int(i_run))]['n_mesh_y'] == dict_user['n_mesh_y'] : mesh_map_known = True i_known = i_run if mesh_map_known : dict_pp['L_L_i_XYZ_not_used'] = dict_database['Run_'+str(int(i_known))]['L_L_i_XYZ_not_used'] dict_pp['L_XYZ'] = dict_database['Run_'+str(int(i_known))]['L_XYZ'] else : dict_pp['L_L_i_XYZ_not_used'] = None else : dict_pp['L_L_i_XYZ_not_used'] = None
def save_mesh_database()
-
Save mesh database.
Expand source code
def save_mesh_database(dict_user, dict_sample, dict_pp): ''' Save mesh database. ''' # creating a database if not Path('mesh_map.database').exists(): dict_data = { 'n_proc': dict_user['n_proc'], 'x_min': min(dict_sample['L_x']), 'x_max': max(dict_sample['L_x']), 'y_min': min(dict_sample['L_y']), 'y_max': max(dict_sample['L_y']), 'n_mesh_x': len(dict_sample['L_x']), 'n_mesh_y': len(dict_sample['L_y']), 'L_L_i_XYZ_not_used': dict_pp['L_L_i_XYZ_not_used'], 'L_XYZ': dict_pp['L_XYZ'] } dict_database = {'Run_1': dict_data} with open('mesh_map.database', 'wb') as handle: pickle.dump(dict_database, handle, protocol=pickle.HIGHEST_PROTOCOL) # updating a database else : with open('mesh_map.database', 'rb') as handle: dict_database = pickle.load(handle) dict_data = { 'n_proc': dict_user['n_proc'], 'x_min': min(dict_sample['L_x']), 'x_max': max(dict_sample['L_x']), 'y_min': min(dict_sample['L_y']), 'y_max': max(dict_sample['L_y']), 'n_mesh_x': len(dict_sample['L_x']), 'n_mesh_y': len(dict_sample['L_y']), 'L_L_i_XYZ_not_used': dict_pp['L_L_i_XYZ_not_used'], 'L_XYZ': dict_pp['L_XYZ'] } mesh_map_known = False for i_run in range(1,len(dict_database.keys())+1): if dict_database['Run_'+str(int(i_run))] == dict_data: mesh_map_known = True # new entry if not mesh_map_known: key_entry = 'Run_'+str(int(len(dict_database.keys())+1)) dict_database[key_entry] = dict_data with open('mesh_map.database', 'wb') as handle: pickle.dump(dict_database, handle, protocol=pickle.HIGHEST_PROTOCOL)