mod
This commit is contained in:
parent
0dd4e01188
commit
2d3873605d
@ -132,7 +132,6 @@ def Plot_Histogram(meshnames,paths,colors,outpath):
|
|||||||
ind = 0
|
ind = 0
|
||||||
|
|
||||||
for nm in range(len(meshnames)):
|
for nm in range(len(meshnames)):
|
||||||
|
|
||||||
if 'box' in meshnames[nm]:
|
if 'box' in meshnames[nm]:
|
||||||
# VOXEL SEQUENCE SIZE
|
# VOXEL SEQUENCE SIZE
|
||||||
Lx = 64
|
Lx = 64
|
||||||
@ -167,13 +166,11 @@ def Plot_Histogram(meshnames,paths,colors,outpath):
|
|||||||
heights_method = False
|
heights_method = False
|
||||||
|
|
||||||
for k in range(mesh.num_cells()):
|
for k in range(mesh.num_cells()):
|
||||||
|
|
||||||
# Coordinates of each cell (A,B,C,D)
|
# Coordinates of each cell (A,B,C,D)
|
||||||
A = Points[Cells[k]][0]
|
A = Points[Cells[k]][0]
|
||||||
B = Points[Cells[k]][1]
|
B = Points[Cells[k]][1]
|
||||||
C = Points[Cells[k]][2]
|
C = Points[Cells[k]][2]
|
||||||
D = Points[Cells[k]][3]
|
D = Points[Cells[k]][3]
|
||||||
|
|
||||||
if heights_method:
|
if heights_method:
|
||||||
hs = np.zeros([4])
|
hs = np.zeros([4])
|
||||||
for l in range(4):
|
for l in range(4):
|
||||||
@ -1412,127 +1409,79 @@ def ROUTINE(options):
|
|||||||
|
|
||||||
if 'Error-curves' in options:
|
if 'Error-curves' in options:
|
||||||
if options['Error-curves']['apply']:
|
if options['Error-curves']['apply']:
|
||||||
print('--- Error curves ---')
|
print('--- Error-curves analysis ---')
|
||||||
|
ratio = False
|
||||||
meas = {}
|
for types in options['Error-curves']['type']:
|
||||||
corrs = {}
|
if types=='mean_ratio':
|
||||||
times = {}
|
types = 'mean'
|
||||||
norm = options['Error-curves']['norm']
|
ratio = True
|
||||||
colorset = options['Error-curves']['colors']
|
if types=='max_ratio':
|
||||||
|
types = 'max'
|
||||||
for resol in options['Error-curves']['resol']:
|
ratio = True
|
||||||
meas[resol] = {}
|
|
||||||
corrs[resol] = {}
|
|
||||||
times[resol] = {}
|
|
||||||
for dts in options['Error-curves']['times']:
|
|
||||||
path = options['Error-curves']['folder'] + \
|
|
||||||
resol + '/dt' + dts
|
|
||||||
try:
|
|
||||||
corrs[resol][dts] = np.loadtxt(
|
|
||||||
path + '/w_' + str(norm) + 'norm.txt')
|
|
||||||
except IOError:
|
|
||||||
print('no curve for ' + resol + '/' + dts)
|
|
||||||
|
|
||||||
try:
|
|
||||||
meas[resol][dts] = np.loadtxt(
|
|
||||||
path + '/u_' + str(norm) + 'norm.txt')
|
|
||||||
times[resol][dts] = np.loadtxt(
|
|
||||||
path + '/times_' + str(norm) + 'norm.txt')
|
|
||||||
except IOError:
|
|
||||||
print('no meas for ' + resol + '/' + dts)
|
|
||||||
|
|
||||||
|
|
||||||
if 'meas' in options['Error-curves']['mode']:
|
|
||||||
for resol in options['Error-curves']['resol']:
|
|
||||||
for dts in meas[resol].keys():
|
|
||||||
if resol == 'H1':
|
|
||||||
nc = 0
|
|
||||||
elif resol == 'H2':
|
|
||||||
nc = 1
|
|
||||||
elif resol == 'H3':
|
|
||||||
nc = 2
|
|
||||||
plt.plot(times[resol][dts], meas[resol]
|
|
||||||
[dts], color=colorset[nc], label='$' + resol + '/' + dts + '$')
|
|
||||||
|
|
||||||
#plt.ylim([0, 1.1])
|
|
||||||
plt.ylabel('$||u||_2$', fontsize=18)
|
|
||||||
plt.xlabel('$time \ \ (s)$', fontsize=18)
|
|
||||||
plt.legend(fontsize=16)
|
|
||||||
plt.savefig(options['Error-curves']['outpath'] + 'meas_' +dts + '.png',
|
|
||||||
dpi=500, bbox_inches='tight')
|
|
||||||
plt.show()
|
|
||||||
|
|
||||||
if 'corrs' in options['Error-curves']['mode']:
|
|
||||||
for resol in options['Error-curves']['resol']:
|
|
||||||
for dts in corrs[resol].keys():
|
|
||||||
if resol == 'H1':
|
|
||||||
nc = 0
|
|
||||||
elif resol == 'H2':
|
|
||||||
nc = 1
|
|
||||||
elif resol == 'H3':
|
|
||||||
nc = 2
|
|
||||||
plt.plot(times[resol][dts], corrs[resol]
|
|
||||||
[dts], color = colorset[nc],label='$' + resol + '/' + dts + '$')
|
|
||||||
|
|
||||||
plt.ylim([0, 16.2])
|
|
||||||
plt.ylabel('$||w||_2$', fontsize=18)
|
|
||||||
plt.xlabel('$time \ \ (s)$', fontsize=18)
|
|
||||||
plt.legend(fontsize=16)
|
|
||||||
plt.savefig(options['Error-curves']['outpath'] + 'corrs_' +dts + '.png',
|
|
||||||
dpi=500, bbox_inches='tight')
|
|
||||||
plt.show()
|
|
||||||
|
|
||||||
if 'fracs' in options['Error-curves']['mode']:
|
|
||||||
for resol in options['Error-curves']['resol']:
|
|
||||||
for dts in corrs[resol].keys():
|
|
||||||
if resol == 'H1':
|
|
||||||
nc = 0
|
|
||||||
elif resol == 'H2':
|
|
||||||
nc = 1
|
|
||||||
elif resol == 'H3':
|
|
||||||
nc = 2
|
|
||||||
plt.plot(times[resol][dts], corrs[resol][dts]/meas[resol][dts],
|
|
||||||
color=colorset[nc], label='$' + resol + '/' + dts + '$')
|
|
||||||
|
|
||||||
plt.ylim([0, 1])
|
|
||||||
plt.ylabel('$||w||_2/||u||_2$', fontsize=18)
|
|
||||||
plt.xlabel('$time \ \ (s)$', fontsize=18)
|
|
||||||
plt.legend(fontsize=16)
|
|
||||||
plt.savefig(options['Error-curves']['outpath'] + 'fracs_' +dts + '.png',
|
|
||||||
dpi=500, bbox_inches='tight')
|
|
||||||
plt.show()
|
|
||||||
|
|
||||||
if 'Components' in options:
|
|
||||||
if options['Components']['apply']:
|
|
||||||
print('--- Components analysis ---')
|
|
||||||
|
|
||||||
for types in options['Components']['type']:
|
|
||||||
nc = 0
|
nc = 0
|
||||||
for subf in options['Components']['subfolders']:
|
if len(options['Error-curves']['subfolders'])==0:
|
||||||
ucomp = []
|
ucomp = []
|
||||||
wcomp = []
|
wcomp = []
|
||||||
colorset = options['Components']['colors']
|
colorset = options['Error-curves']['colors']
|
||||||
path = options['Components']['folder'] + subf + '/'
|
path = options['Error-curves']['folder']
|
||||||
try:
|
try:
|
||||||
ucomp = np.loadtxt(path + '/u'+types+'.txt')
|
ucomp = np.loadtxt(path + '/u'+types+'.txt')
|
||||||
wcomp = np.loadtxt(path + '/w'+types+'.txt')
|
wcomp = np.loadtxt(path + '/w'+types+'.txt')
|
||||||
times = np.loadtxt(path + '/times.txt')
|
times = np.loadtxt(path + '/times.txt')
|
||||||
except IOError:
|
except IOError:
|
||||||
print('no components for ' + subf)
|
print('no Error-curves for ' + subf)
|
||||||
|
if not ratio:
|
||||||
|
plt.plot(
|
||||||
plt.plot(
|
times, ucomp, color=colorset[nc], linestyle='-', label= '$u$' )
|
||||||
times, ucomp, color=colorset[nc], linestyle='-', label= '$u'+ subf +'$' )
|
plt.plot(
|
||||||
|
times, wcomp, color=colorset[nc], linestyle='--', label='$w$')
|
||||||
plt.plot(
|
else:
|
||||||
times, wcomp, color=colorset[nc], linestyle='--', label='$w'+subf+'$')
|
plt.plot(
|
||||||
|
times, ucomp, color=colorset[nc], linestyle='-', label= '$u$' )
|
||||||
|
plt.plot(
|
||||||
|
times, wcomp, color=colorset[nc], linestyle='--', label='$w$')
|
||||||
nc +=1
|
nc +=1
|
||||||
|
else:
|
||||||
|
for subf in options['Error-curves']['subfolders']:
|
||||||
|
ucomp = []
|
||||||
|
wcomp = []
|
||||||
|
colorset = options['Error-curves']['colors']
|
||||||
|
labelset = options['Error-curves']['labels']
|
||||||
|
path = options['Error-curves']['folder'] + subf + '/'
|
||||||
|
try:
|
||||||
|
ucomp = np.loadtxt(path + '/u'+types+'.txt')
|
||||||
|
wcomp = np.loadtxt(path + '/w'+types+'.txt')
|
||||||
|
times = np.loadtxt(path + '/times.txt')
|
||||||
|
except IOError:
|
||||||
|
print('no cError-curves for ' + subf)
|
||||||
|
|
||||||
|
if not ratio:
|
||||||
|
plt.plot(
|
||||||
|
times, ucomp, color=colorset[nc], linestyle='-', label= '$u'+ subf +'$' )
|
||||||
|
|
||||||
|
plt.plot(
|
||||||
|
times, wcomp, color=colorset[nc], linestyle='--', label='$w'+subf+'$')
|
||||||
|
else:
|
||||||
|
wu = wcomp/ucomp
|
||||||
|
plt.plot(
|
||||||
|
times, wu, color=colorset[nc], linestyle='-', label= '$'+ labelset[nc] +'$' )
|
||||||
|
nc +=1
|
||||||
|
|
||||||
|
|
||||||
#plt.ylim([0, 170])
|
#plt.ylim([0, 170])
|
||||||
plt.ylabel('$velocity \ \ (cm/s)$', fontsize=18)
|
|
||||||
plt.xlabel('$time \ \ (s)$', fontsize=18)
|
plt.xlabel('$time \ \ (s)$', fontsize=18)
|
||||||
plt.legend(fontsize=16)
|
plt.legend(fontsize=16)
|
||||||
plt.savefig(options['Components']['outpath'] + types + '.png', dpi=500, bbox_inches='tight')
|
if options['Error-curves']['title']:
|
||||||
|
plt.title(options['Error-curves']['title'], fontsize=18)
|
||||||
|
|
||||||
|
if not ratio:
|
||||||
|
plt.ylabel('$velocity \ \ (cm/s)$', fontsize=18)
|
||||||
|
plt.savefig(options['Error-curves']['outpath'] + types + '.png', dpi=500, bbox_inches='tight')
|
||||||
|
else:
|
||||||
|
plt.ylabel('$w/u$', fontsize=18)
|
||||||
|
if 'max' in types:
|
||||||
|
plt.ylim([0, 1.8])
|
||||||
|
plt.savefig(options['Error-curves']['outpath'] + types + '_ratio.png', dpi=500, bbox_inches='tight')
|
||||||
plt.show()
|
plt.show()
|
||||||
|
|
||||||
|
|
||||||
|
@ -175,6 +175,37 @@ def READcheckpoint(MESH, mode, output_path, checkpoint_path, filename, outname,
|
|||||||
for bb in bnds:
|
for bb in bnds:
|
||||||
QQ[bb] = []
|
QQ[bb] = []
|
||||||
|
|
||||||
|
if mode == 'Histograms':
|
||||||
|
u = Function(W)
|
||||||
|
if 'w_COR' in filename:
|
||||||
|
h5name = 'w/vector_0'
|
||||||
|
else:
|
||||||
|
h5name = 'u/vector_0'
|
||||||
|
|
||||||
|
|
||||||
|
ValuesTime = np.zeros([len(indexes),len(u.vector().get_local())])
|
||||||
|
ValuesPeak = np.zeros([len(u.vector().get_local())])
|
||||||
|
ix = int(0)
|
||||||
|
|
||||||
|
for k in indexes:
|
||||||
|
path = checkpoint_path + str(k) + '/'+filename+'.h5'
|
||||||
|
hdf = HDF5File(MESH['mesh'].mpi_comm(), path, 'r')
|
||||||
|
print('Reading checkpoint ',indexes[k])
|
||||||
|
hdf.read(u, h5name)
|
||||||
|
time = hdf.attributes(h5name).to_dict()['timestamp']
|
||||||
|
hdf.close()
|
||||||
|
uvec = u.vector().get_local()
|
||||||
|
ValuesTime[ix,:] = np.abs(uvec)
|
||||||
|
ix +=1
|
||||||
|
|
||||||
|
CoordPeak = np.where(ValuesTime==np.max(ValuesTime))
|
||||||
|
ValuesPeak = np.abs(ValuesTime[CoordPeak[0],:])
|
||||||
|
freq,edges = np.histogram(ValuesPeak, bins=80, density=True)
|
||||||
|
#Saving the histogram
|
||||||
|
print('Saving at ' + output_path)
|
||||||
|
np.savetxt(output_path + 'hist_frew.txt', freq)
|
||||||
|
np.savetxt(output_path + 'hist_edges.txt', edges)
|
||||||
|
|
||||||
if mode == 'perturbation':
|
if mode == 'perturbation':
|
||||||
u = Function(W)
|
u = Function(W)
|
||||||
unew = Function(W)
|
unew = Function(W)
|
||||||
@ -216,10 +247,10 @@ def READcheckpoint(MESH, mode, output_path, checkpoint_path, filename, outname,
|
|||||||
ufactor = options['Perturbation']['type']['phase_contrast']/100
|
ufactor = options['Perturbation']['type']['phase_contrast']/100
|
||||||
VENC = np.max(np.abs(uvec))*ufactor
|
VENC = np.max(np.abs(uvec))*ufactor
|
||||||
gamma = 267.513e6 # rad/Tesla/sec Gyromagnetic ratio for H nuclei
|
gamma = 267.513e6 # rad/Tesla/sec Gyromagnetic ratio for H nuclei
|
||||||
#B0 = 1.5 # Tesla Magnetic Field Strenght
|
B0 = 1.5 # Tesla Magnetic Field Strenght
|
||||||
TE = 5e-3 # Echo-time
|
TE = 5e-3 # Echo-time
|
||||||
Phi1 = gamma*10*TE + 0*uvec
|
Phi1 = 1*B0*TE + 0*uvec
|
||||||
Phi2 = gamma*10*TE + np.pi*uvec/VENC
|
Phi2 = 1*B0*TE + np.pi*uvec/VENC
|
||||||
M1 = np.cos(Phi1) + 1j*np.sin(Phi1)
|
M1 = np.cos(Phi1) + 1j*np.sin(Phi1)
|
||||||
M2 = np.cos(Phi2) + 1j*np.sin(Phi2)
|
M2 = np.cos(Phi2) + 1j*np.sin(Phi2)
|
||||||
|
|
||||||
@ -476,7 +507,10 @@ def ERRORmap(MESH, mode, outpath, reference_path, checkpoint_path, refname,comna
|
|||||||
u.rename('meas', 'meas')
|
u.rename('meas', 'meas')
|
||||||
w.rename('w', 'w')
|
w.rename('w', 'w')
|
||||||
hdf_w = HDF5File(MESH['mesh'].mpi_comm(),path_w,'r')
|
hdf_w = HDF5File(MESH['mesh'].mpi_comm(),path_w,'r')
|
||||||
hdf_w.read(w, 'w/vector_0')
|
if 'w' in comname:
|
||||||
|
hdf_w.read(w, 'w/vector_0')
|
||||||
|
else:
|
||||||
|
hdf_w.read(w, 'u/vector_0')
|
||||||
hdf_u = HDF5File(MESH['mesh'].mpi_comm(), path_u, 'r')
|
hdf_u = HDF5File(MESH['mesh'].mpi_comm(), path_u, 'r')
|
||||||
hdf_u.read(u, 'u/vector_0')
|
hdf_u.read(u, 'u/vector_0')
|
||||||
hdf_u.close()
|
hdf_u.close()
|
||||||
@ -917,7 +951,6 @@ def OUTLETwind(MESH, output_path, checkpoint_path, filename, bnds):
|
|||||||
unsort_indexes = os.listdir(checkpoint_path)
|
unsort_indexes = os.listdir(checkpoint_path)
|
||||||
indexes = [int(x) for x in unsort_indexes]
|
indexes = [int(x) for x in unsort_indexes]
|
||||||
indexes.sort()
|
indexes.sort()
|
||||||
|
|
||||||
QQ = {}
|
QQ = {}
|
||||||
PP = {}
|
PP = {}
|
||||||
ds = Measure('ds', domain=MESH['mesh'], subdomain_data=MESH['boundaries'])
|
ds = Measure('ds', domain=MESH['mesh'], subdomain_data=MESH['boundaries'])
|
||||||
@ -930,11 +963,6 @@ def OUTLETwind(MESH, output_path, checkpoint_path, filename, bnds):
|
|||||||
for k in range(0, len(indexes)):
|
for k in range(0, len(indexes)):
|
||||||
path_u = checkpoint_path + str(indexes[k]) + '/'+filename[0]+'.h5'
|
path_u = checkpoint_path + str(indexes[k]) + '/'+filename[0]+'.h5'
|
||||||
path_p = checkpoint_path + str(indexes[k]) + '/'+filename[1]+'.h5'
|
path_p = checkpoint_path + str(indexes[k]) + '/'+filename[1]+'.h5'
|
||||||
if indexes[k] < 10:
|
|
||||||
path_u = checkpoint_path + '0' + \
|
|
||||||
str(indexes[k]) + '/'+filename[0]+'.h5'
|
|
||||||
path_p = checkpoint_path + '0' + \
|
|
||||||
str(indexes[k]) + '/'+filename[1]+'.h5'
|
|
||||||
|
|
||||||
u = Function(V)
|
u = Function(V)
|
||||||
p = Function(W)
|
p = Function(W)
|
||||||
@ -946,7 +974,7 @@ def OUTLETwind(MESH, output_path, checkpoint_path, filename, bnds):
|
|||||||
hdf_p.read(p, 'p/vector_0')
|
hdf_p.read(p, 'p/vector_0')
|
||||||
hdf_p.close()
|
hdf_p.close()
|
||||||
|
|
||||||
print('Computing flows and pressures at timestep number ' + str(k))
|
print('Computing flows and pressures at timestep number ' + str(indexes[k]))
|
||||||
for bb in bnds:
|
for bb in bnds:
|
||||||
if bb == 2:
|
if bb == 2:
|
||||||
QQ[bb].append(-assemble(dot(u, n)*ds(bb)))
|
QQ[bb].append(-assemble(dot(u, n)*ds(bb)))
|
||||||
@ -1134,10 +1162,21 @@ def ROUTINE(options):
|
|||||||
|
|
||||||
MESH = LOADmesh(options['Perturbation']['meshpath'])
|
MESH = LOADmesh(options['Perturbation']['meshpath'])
|
||||||
checkpath = options['Perturbation']['checkpath'] + 'checkpoint/'
|
checkpath = options['Perturbation']['checkpath'] + 'checkpoint/'
|
||||||
out_check = options['Perturbation']['checkpath'] + 'Perturbation/'
|
name_folder = 'SNR' +options['Perturbation']['type']['SNR'] + 'V' + str(options['Perturbation']['type']['phase_contrast'])
|
||||||
|
out_check = options['Perturbation']['checkpath'] + name_folder + '/'
|
||||||
READcheckpoint(MESH,'perturbation', out_check,checkpath,'u','u',options)
|
READcheckpoint(MESH,'perturbation', out_check,checkpath,'u','u',options)
|
||||||
|
|
||||||
|
if 'Histograms' in options:
|
||||||
|
if options['Histograms']['apply']:
|
||||||
|
if rank==0:
|
||||||
|
print('--- Histograms in measurements ---')
|
||||||
|
|
||||||
|
MESH = LOADmesh(options['Histograms']['meshpath'])
|
||||||
|
checkpath = options['Histograms']['checkpath'] + 'checkpoint/'
|
||||||
|
outpath = options['Histograms']['checkpath']
|
||||||
|
field_name = options['Histograms']['field_name']
|
||||||
|
READcheckpoint(MESH,'Histograms', outpath, checkpath,field_name,field_name,options)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user