Page MenuHomec4science

read_h5.py
No OneTemporary

File Metadata

Created
Sun, Jun 30, 23:14

read_h5.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Mon Mar 14 14:53:25 2022
@author: ekinkubilay
"""
from fenics import *
def get_previous_temperature(current_layer_no, final_step):
#allow extrapolation for now
parameters['allow_extrapolation'] = True
#set directory names
mesh_dir = '../Part_geometry/mesh/'
temp_data_dir = 'results/'
#set file names
previous_layer_no = current_layer_no - 1
previous_mesh_name = 'layer_{}.xdmf'.format(str(previous_layer_no).zfill(3))
current_mesh_name = 'layer_{}.xdmf'.format(str(current_layer_no).zfill(3))
previous_temperature_name = 'temperature_layer_{}.h5'.format(str(previous_layer_no).zfill(3))
previous_mesh_file = mesh_dir+previous_mesh_name
current_mesh_file = mesh_dir+current_mesh_name
previous_temperature_file = temp_data_dir+previous_temperature_name
#load old previous layer mesh
mesh = Mesh()
filename = previous_mesh_file
#filename = '../Part_geometry/mesh/layer_009.xdmf'
f = XDMFFile(MPI.comm_world, filename)
f.read(mesh)
MeshTransformation.rescale(mesh, 1e-3, Point(0,0,0)) #in m
f.close()
#load previous layer Temperature function
#hdf5_file = HDF5File(MPI.comm_world, 'results/trial.h5', "r")
hdf5_file = HDF5File(MPI.comm_world, previous_temperature_file, "r")
#define function space for V
V = FunctionSpace(mesh, "CG", 1)
#define temperature of old layer
T_old = Function(V)
#define the last time step
#t = 1983
t = final_step
#define name of the vector
vec_name = "/Temperature/vector_%d"%t
#read the temperature of the last time step of previous layer
hdf5_file.read(T_old, vec_name)
timestamp = hdf5_file.attributes(vec_name)["timestamp"]
hdf5_file.close()
#output the read temperature on the previous mesh
xdmf_file = XDMFFile(MPI.comm_world, 'results/retrial.xdmf')
xdmf_file.parameters["flush_output"] = True
xdmf_file.parameters["functions_share_mesh"] = True
xdmf_file.parameters["rewrite_function_mesh"] = False
#xdmf_file.write_checkpoint(T_old, "Temperature", t, XDMFFile.Encoding.HDF5)
T_old.rename("Temperature", "Temperature")
xdmf_file.write(T_old, t)
#load current layer mesh
mesh = Mesh()
#filename = '../Part_geometry/mesh/layer_010.xdmf'
filename = current_mesh_file
f = XDMFFile(MPI.comm_world, filename)
f.read(mesh)
MeshTransformation.rescale(mesh, 1e-3, Point(0,0,0)) #in m
f.close()
#define function space for V
V = FunctionSpace(mesh, "CG", 1)
#define temperature of new layer
T_new = Function(V)
#interpolate the previous temperature field onto new temperature field
LagrangeInterpolator.interpolate(T_new, T_old)
#output the read temperature on the current mesh
xdmf_file = XDMFFile(MPI.comm_world, 'results/retrial2.xdmf')
xdmf_file.parameters["flush_output"] = True
xdmf_file.parameters["functions_share_mesh"] = True
xdmf_file.parameters["rewrite_function_mesh"] = False
#xdmf_file.write_checkpoint(T_old, "Temperature", t, XDMFFile.Encoding.HDF5)
T_new.rename("Temperature", "Temperature")
xdmf_file.write(T_new, t)
parameters['allow_extrapolation'] = False
return T_new

Event Timeline