print('\nWriting predicted eigenvec to OpenFOAM format...') header_tensor = headerTensorOF(time, fieldname, len(mask)) fh = open(result_dir + fieldname, 'w') fh.write(header_tensor) np.savetxt(fh, eigvec_pred_all, fmt="(%.10f %.10f %.10f %.10f %.10f %.10f %.10f %.10f %.10f)") fh.write(footer_tensor) fh.close() print('\nFinished writing predicted eigenvec to OpenFOAM format') del eigvec_pred_all """ Calculate Barycentric Map """ t0 = t.time() xy_bary, rgb_bary = getBarycentricMapData(eigval_test) del eigval_test xy_bary_pred, rgb_bary_pred = getBarycentricMapData(eigval_pred) del eigvec_pred t1 = t.time() print('\nFinished getting Barycentric map data in {:.4f} s'.format(t1 - t0)) # Limit RGB values to max of 1 rgb_bary[rgb_bary > 1.] = 1. rgb_bary_pred[rgb_bary_pred > 1.] = 1. """ Write Barycentric RGB back to OpenFOAM File """ print( '\nAssigning true RGB values of confined domain to the whole domain, with out-of confinement RGB being (0, 0, 0)...' )
# anomaly_idx_test4 = outliers4['anomaly_idx_test'] # anomaly_idx_train5 = outliers5['anomalyIdxTrains'] # anomaly_idx_test5 = outliers5['anomaly_idx_test'] """ Postprocess Machine Learning Predictions """ t0 = t.time() _, eigval_test, _ = processReynoldsStress(y_test, make_anisotropic=False, realization_iter=0) # _, eigval_train, _ = processReynoldsStress(y_train, make_anisotropic=False, realization_iter=0) t1 = t.time() print('\nFinished processing Reynolds stress in {:.4f} s'.format(t1 - t0)) t0 = t.time() xy_bary_test, rgb_bary_test = getBarycentricMapData(eigval_test) # Limit RGB value to [0, 1] rgb_bary_test[rgb_bary_test > 1.] = 1. # xy_bary_train, rgb_bary_train = getBarycentricMapData(eigval_train) rgb_bary_test_out = rgb_bary_test.copy() rgb_bary_test_out[anomaly_idx_test] = gray # rgb_bary_train_out = rgb_bary_train.copy() # rgb_bary_train_out[anomaly_idx_train], rgb_bary_train_out[anomaly_idx_train2], rgb_bary_train_out[anomaly_idx_train3], \ # rgb_bary_train_out[anomaly_idx_train4], rgb_bary_train_out[anomaly_idx_train5] \ # = (0.4,)*3, (0.3,)*3, (0.2,)*3, (0.1,)*3, (0,)*3 t1 = t.time() print('\nFinished getting Barycentric map data in {:.4f} s'.format(t1 - t0)) t0 = t.time() ccx_test_mesh, ccy_test_mesh, _, rgb_bary_test_mesh = interpolateGridData(
""" Postprocess Machine Learning Predictions """ t0 = t.time() # _, eigval_test, _ = processReynoldsStress(y_test, make_anisotropic=False, realization_iter=0) # _, eigval_train, _ = processReynoldsStress(y_train, make_anisotropic=False, realization_iter=0) y_pred_test3, eigval_pred_test, _ = processReynoldsStress(y_pred_test, make_anisotropic=False, realization_iter=realize_iter) y_pred_train3, eigval_pred_train, _ = processReynoldsStress(y_pred_train, make_anisotropic=False, realization_iter=realize_iter) t1 = t.time() print('\nFinished processing Reynolds stress in {:.4f} s'.format(t1 - t0)) t0 = t.time() # xy_bary_test, rgb_bary_test = getBarycentricMapData(eigval_test) # xy_bary_train, rgb_bary_train = getBarycentricMapData(eigval_train) xy_bary_pred_test, rgb_bary_pred_test = getBarycentricMapData(eigval_pred_test) xy_bary_pred_train, rgb_bary_pred_train = getBarycentricMapData(eigval_pred_train) t1 = t.time() print('\nFinished getting Barycentric map data in {:.4f} s'.format(t1 - t0)) t0 = t.time() # ccx_test_mesh, ccy_test_mesh, _, rgb_bary_test_mesh = interpolateGridData(ccx_test, ccy_test, rgb_bary_test, mesh_target=uniform_mesh_size, interp=interp_method, fill_val=0.3) # ccx_train_mesh, ccy_train_mesh, _, rgb_bary_train_mesh = interpolateGridData(ccx_train, ccy_train, rgb_bary_train, mesh_target=uniform_mesh_size, interp=interp_method, fill_val=0.3) ccx_test_mesh, ccy_test_mesh, _, rgb_bary_pred_test_mesh = interpolateGridData(ccx_test, ccy_test, rgb_bary_pred_test, mesh_target=uniform_mesh_size, interp=interp_method, fill_val=0.3) ccx_train_mesh, ccy_train_mesh, _, rgb_bary_pred_train_mesh = interpolateGridData(ccx_train, ccy_train, rgb_bary_pred_train, mesh_target=uniform_mesh_size, interp=interp_method, fill_val=0.3) t1 = t.time() print('\nFinished interpolating mesh data for barycentric map in {:.4f} s'.format(t1 - t0)) t0 = t.time() _, _, _, y_pred_test_mesh = interpolateGridData(ccx_test, ccy_test, y_pred_test, mesh_target=uniform_mesh_size, interp=interp_method, fill_val=0.3) _, _, _, y_pred_train_mesh = interpolateGridData(ccx_train, ccy_train, y_pred_train, mesh_target=uniform_mesh_size, interp=interp_method, fill_val=0.3)
t0 = t.time() _, eigval_test, _ = processReynoldsStress(y_test, make_anisotropic=False, realization_iter=0, to_old_grid_shape=False) # If filter was True, eigval_pred_test is a mesh grid _, eigval_pred_test, _ = processReynoldsStress(y_pred_test, make_anisotropic=False, realization_iter=0, to_old_grid_shape=False) t1 = t.time() print('\nFinished processing Reynolds stress in {:.4f} s'.format(t1 - t0)) t0 = t.time() xy_bary_test, rgb_bary_test = getBarycentricMapData(eigval_test) # If filter was True, both xy_bary_pred_test and rgb_bary_pred_test are mesh grids xy_bary_pred_test, rgb_bary_pred_test = getBarycentricMapData( eigval_pred_test, to_old_grid_shape=True) t1 = t.time() print('\nFinished getting Barycentric map data in {:.4f} s'.format(t1 - t0)) t0 = t.time() # Interpolate to desired uniform mesh if 'bary' in plot_property or '*' in plot_property: ccx_test_mesh, ccy_test_mesh, ccz_test_mesh, rgb_pred_test_mesh = case_slice.interpolateDecomposedSliceData_Fast( ccx_test, ccy_test, ccz_test, rgb_bary_pred_test,
""" Process Uninterpolated Anisotropy Tensor """ # Retrieve Rij of this slice rij = case.slices_val[slicename] rij = expandSymmetricTensor(rij).reshape((-1, 3, 3)) # Rotate Rij if requested, rotateData only accept full matrix form if rotate_data: rij = rotateData(rij, anglez=rot_z) rij = contractSymmetricTensor(rij) rij_tmp = rij.copy() # Get bij from Rij and its corresponding eigenval and eigenvec bij, eig_val, eig_vec = processReynoldsStress(rij_tmp, realization_iter=0, make_anisotropic=make_anisotropic, to_old_grid_shape=False) # bij was (n_samples, 3, 3) contract it bij = contractSymmetricTensor(bij) # Get barycentric map coor and normalized RGB xy_bary, rgb = getBarycentricMapData(eig_val, c_offset=c_offset, c_exp=c_exp) """ Interpolation """ # 1st coor is always x not matter vertical or horizontal slice # 2nd coor is y if horizontal slice otherwise z, take appropriate confinebox limit coor2_lim = confinebox[i][2:4] if case.slices_orient[slicename] == 'horizontal' else confinebox[i][4:] # Selective interpolation upon request if 'bary' in plot_property or '*' in plot_property: x_mesh, y_mesh, z_mesh, rgb_mesh = case.interpolateDecomposedSliceData_Fast(case.slices_coor[slicename][:, 0], case.slices_coor[slicename][:, 1], case.slices_coor[slicename][:, 2], rgb, slice_orient=case.slices_orient[slicename], target_meshsize=target_meshsize, # No interpolation as it gives undefined colors in my barycentric map interp_method='nearest', confinebox=confinebox[i]) if plot_type in ('3D', '*'): list_rgb.append(rgb_mesh)