flower: physics: #Coefficients for Butler-volmer alpha: &alpha 0.5 alpha_a: 0.5 alpha_c: 0.5 bulk_velocity: zero #use zero velocity in liquid phase for transport # Species H2 KOH H2O # concentration0: &concentration0 [1.6e-1, 6.7e3, 4.9e4] # concentration0: [&cH2, cKOH, cH2O] # concentration0: [1.6e-1, 6.7e3, 4.9e4] concentration0_H2: &concentration0_H2 1.6e-1 concentration0_KOH: &concentration0_KOH 6.7e3 concentration0_H2O: &concentration0_H2O 4.9e4 concentration0: [*concentration0_H2, *concentration0_KOH, *concentration0_H2O] epsilon_concentration: [1e-14, 1e-14, 1e-14] electrolysis_reaction: "Butler_no_concentration" diffusion_coeff_H2: &diffusion_coeff_H2 5.8e-9 diffusion_coeff_KOH: &diffusion_coeff_KOH 3.2e-9 diffusion_coeff_H2O: &diffusion_coeff_H2O 3.2e-9 diffusion_coeff: [*diffusion_coeff_H2, *diffusion_coeff_KOH, *diffusion_coeff_H2O] species_names: &species_names ['H2','KOH','H2O'] end_time: 1.0 #7.3 #s current: 1000 #A Faraday: &Faraday 9.64853321233100184e4 #C⋅mol−1 Henry_H2: &Henry_H2 1 Henry_KOH: &Henry_KOH 0 Henry_H2O: &Henry_H2O 0 Henry: [*Henry_H2, *Henry_KOH, *Henry_H2O] i0: &i0 1.0 intfc_x: 0.0 # x coordinate of bubble center intfc_y: 5.0e-5 # y coordinate of bubble center # KOHwtpercent: 30 ls_wall_xmin: 5e-6 mu1: 0.0 #6.7e-7*1258.0 mu2: 0.0 mu_cin1: &mu_cin1 6.7e-7 mu_cin2: &mu_cin2 6.7e-7 #m^2/s MWH2: 2.01568e-3 #kg/mol nb_levelsets: &nb_levelsets 1 #2 nb_transported_scalars: &nb_transported_scalars 0 #TODO or inv stoechiometric Navier_slip_length: 1.0e-2 nucleation_time: -1.0 #deactivated #Electric potential phi_ele0: 0.0 phi_ele1: &phi_ele1 -0.6 pres0: 0.0 #1e5 radius: 1.2e-5 # 6.0e-6 #3.0e-6 #initial radius ref_length: 1e-4 rho1: &rho1 1258.0 #liquid rho2: 0.069575 #gaz #TODO need for 80°C, check with other study #"0.7016E-01" in \citet{cohnTABLETHERMODYNAMICPROPERTIES1963} H2 # Linear interpolation between 350 and 360 # 350 360 353 B 0.13841 353 350 360 # 7.02E-02 6.82E-02 -0.00194999999999999 A -0.000194999999999999 0.069575 0.07016 0.06821 radial_vel_factor: 1e-7 Ru: &Ru 8.314 sigma: 7.7e-2 temperature0: &temperature0 353.0 theta_e: 30 #145 #90 theta_adv: 120 theta_rec: 30 # if θe < 40 # max_its = 35000 # elseif θe < 100 # max_its = 15000 # else # max_its = 5000 # end v_inlet: &v_inlet 6.7e-4 g: 9.81 beta: 0.0 #angle for gravity domain_length: &domain_length 1.0e-4 mesh: nx: 128 ny: 128 xmin: &mesh_xmin 0.0 xmax: &mesh_xmax 1.0e-4 ymin: &mesh_ymin 0.0 ymax: &mesh_ymax 1.0e-4 simulation: activate_interface: &activate_interface 1 advection_LS_mode: 10 #9 #8 #2 #5 #4 #3 #2 adapt_timestep_mode: 3 #fixed timestep average_liquid_solid: 0 ns_advection: 1 #0 no advection auto_reinit: 1 #activated: 1 bc_int: WallNoSlip #FreeSurface #WallNoSlip breakup: 1 bulk_conductivity: 3 #2 3:constant conductivity from c_0 # uses bulk or interfacial concentrationfor conductivity case: None #Planar #Cylinder CFL: 0.5 concentration_check_factor: &concentration_check_factor 1.0e-4 #TODO do not write 1e-4, ill read in python contact_angle: 1 #activate advancing/receding contact angle convection_Cdivu: 0 convection_mode: 1 #0 #1 electrolysis_convection: 0 #1 electrical_potential: 3 #2 #0 deactivated electrical_potential_max_iter: 50 #20 electrical_potential_relative_residual: 1.0e-10 electrical_potential_residual: 1.0e-10 electrical_potential_nonlinear_solver: 1 #0 for successive substitutions #1 for Newton-Raphson electrolysis_phase_change_case: "None" #"Khalighi" #no phase change phase_change_method: 6 #5 #fixed mass transfer rate 0.05 rho_l #4 epsilon_volume_fraction_phase_change: 1.0e-6 # electrolysis_phase_change_case: "Khalighi" #integration on whole surface to get a radius # electrolysis_phase_change_case: "levelset" # local eps: 1.0e-12 #eps for small numbers epsilon: 0.2 #0.05 #0.2 #cut small cells epsilon_wall: 0.2 #0.05 #0.2 #if epsilon=0 centroids will be on the interface epsilon_mode: 2 #way to handle epsilon: # if num.epsilon_mode == 0 # return 1 / (W+eps(0.01)) # elseif num.epsilon_mode == 1 # return 1 / max(W, num.epsilon_vol) # elseif num.epsilon_mode == 2 # return inv_weight_clip(num,W) # end kill_dead_cells: 1 extend_field: 1 #do not imposed_velocity : "none" #"zero" #"none" #"zero" #"none" index_phase_change: 1 index_electrolyte: 2 max_iter: 1 #1 #60 #1 #60 #1 #60 #maximum number of iterations average_velocity: 1 #0 laplacian: 0 #1 #multiply by 4/3 marching_squares_epsilon: 1.0e-9 marching_squares_max_iter: 15 mass_transfer_rate: 2 #1 #Johansen & Colella mode_2d: 3 # mode_2d = 1 #use equivalent cylinder # mode_2d = 2 #mol/meter # mode_2d = 3 #mol/meter with xcoord and ycoord parameters for LS definition name: "convergence_diffusion" nb_reinit: 2 #10 non_dimensionalize: 0 # 0: NS equations as is (without non_dimensionalization) null_space: 0 #method for null space, matrix diagonal one_fluid_model: 0 one_fluid_normal: 1 surface_tension: 1 # 0 for CSF from VOF, 1 for LS mu_one_fluid_average: 1 #0 : arithmetic #1 harmonic smooth_VOF: 2 periodic_x: 0 periodic_y: 0 prediction: PmIIimposedpressureBCincrement #0 #4 #0 #pressure-velocity coupling # prediction = 0 # prediction = 1 # prediction = 2 # prediction = 3 # PIII in Brown's article # prediction = 4 pressure_velocity_coupling: 0 #3 #3 #1 # 0: projection, 1: coupled pressure_velocity_solver: 0 #direct 1 #BICGSTAB(2) solve_solid: 0 #0 do not solve in solid reinit_every: 3 #0 #3 # period of levelset reinialization levelset_reinitialize: 0 #do not reinit restart: 0 #TODO restart with PDI show_every: 1 scalar_bc: 0 #1 for multiple LS (describing wall) #0 for one LS scalar_scheme: 0 #1 #0 #CN 1 #Backward Euler (implicit) solve_Navier_Stokes_liquid_phase: 0 #1 activated solve_Navier_Stokes: 0 solve_potential: 1 solve_species: 1 solver: 0 #2 #0 #1 #0: Julia 1: MUMPS debug: "None" #"allocations_start" #"scalar_testing" #"scalar_debug" time_scheme: FE #CN #FE #Forward Euler # time_scheme: CN n_ext: 10 delta_reinit: 10.0 # delta for automatic reinitialization NB: 24 # number of cells the velocity is extended verbosity: 0 #3 macros: boundaries: | # Signs in divergence theorem sign_left = -1.0 #n \cdot e_x = -1 sign_right = 1.0 #n \cdot e_x = 1 sign_bottom = -1.0 #n \cdot e_y = -1 sign_top = 1.0 #n \cdot e_y = 1 if phys.nb_levelsets ==1 BC_int = [WallNoSlip()] #[FreeSurface()] end BC_uL= BoundariesInt() BC_vL= BoundariesInt() BC_pL = Boundaries( name = "BC_pL", left = Neumann(), right = Neumann(), bottom = Neumann(), top = Neumann(), ) i_butler = gp.x[:,1] .*0.0 phi_ele = gp.x[:,1] .*0.0 i_butler=butler_volmer_no_concentration.(phys.alpha_a,phys.alpha_c,phys.Faraday,phys.i0,phi_ele,phys.phi_ele1,phys.Ru,phys.temperature0) BC_phi_ele = BoundariesInt( left = Neumann(val=i_butler./elec_cond), #TODO -BC in Flower ? so i_butler not -i_butler right = Dirichlet(), bottom = Neumann(val=0.0), top = Neumann(val=0.0), int = Neumann(val=0.0), LS = [Neumann(val=0.0)] ) BC_trans_scal_H2 = BoundariesInt( bottom = Dirichlet(val = phys.concentration0[1]), top = Neumann(), left = Neumann(val=-i_butler/(2*phys.Faraday*DH2)), right = Dirichlet(val = phys.concentration0[1]), int = Dirichlet(val = phys.concentration0[1]/phys.Henry_H2)) #KOH BC_trans_scal_KOH = BoundariesInt( bottom = Dirichlet(val = phys.concentration0[2]), top = Neumann(), left = Neumann(val=-i_butler/(2*phys.Faraday*DKOH)), right = Dirichlet(val = phys.concentration0[2]), int = Neumann(val=0.0)) #KOH #H2O BC_trans_scal_H2O = BoundariesInt( bottom = Dirichlet(val = phys.concentration0[3]), top = Neumann(), left = Neumann(val=i_butler/(phys.Faraday*DH2O)), right = Dirichlet(val = phys.concentration0[3]), int = Neumann(val=0.0)) BC_trans_scal = [ BC_trans_scal_H2, #H2 BC_trans_scal_KOH, #KOH BC_trans_scal_H2O] #H2O BC_u = Boundaries( bottom = Neumann_inh(), top = Neumann_inh(), left = Neumann_inh(), right = Neumann_inh() ) BC_uS = BoundariesInt() BC_vS = BoundariesInt() BC_pS = Boundaries() # print BC # print("\n BC_int ",BC_int) print("\n BC_uL ",BC_uL) print("\n BC_vL ",BC_vL) print("\n BC_pL ",BC_pL) print("\n BC_phi_ele ",BC_phi_ele) print("\n BC_trans_scal ",BC_trans_scal) open("BC0.html", "w") do file print_BC_html(BC_uL,"u";io=file) print_BC_html(BC_vL,"v";io=file) print_BC_html(BC_pL,"p";io=file) print_BC_html(BC_phi_ele,"phi";io=file) print_BC_html(BC_trans_scal_H2,"H2";io=file) print_BC_html(BC_trans_scal_KOH,"KOH";io=file) print_BC_html(BC_trans_scal_H2O,"H2O";io=file) # write(file, "This is a line of text.\n") # The file will be automatically closed here end L0 = mesh.xmax - mesh.xmin print("\n grad ",(BC_pL.top.val-BC_pL.bottom.val)/L0) init_fields: | printstyled(color=:green, @sprintf "\n Initialisation \n") #init Bulk if num.solve_solid == 1 phS.T .= phys.temperature0 end phL.T .= phys.temperature0 # Electrochemistry for iscal=1:phys.nb_transported_scalars phL.trans_scal[:,:,iscal] .= phys.concentration0[iscal] end phL.phi_ele .= phys.phi_ele0 # Initialize Poiseuille pressure profile phL.u .= 0.0 phL.v .= 0.0 phL.uD .= 0.0 phL.vD .= 0.0 # p_top = 0 # p_bottom = p_top + phys.rho1*phys.g*(mesh.ymax - mesh.ymin) # phL.p .= p_bottom .+ (gp.y .- mesh.ymin)*(p_top-p_bottom)/(mesh.ymax - mesh.ymin) # vec1(phL.pD,gp) .= vec(phL.p) # # p_top = 0 # p_bottom = p_top + 8*mu1/phys.ref_length*phys.v_inlet # phL.p .= p_bottom .+ (gp.y .- mesh.ymin)*(p_top-p_bottom)/(mesh.ymax - mesh.ymin) # vec1(phL.pD,gp) .= vec(phL.p) # # Initialize Poiseuille velocity profile # vPoiseuille = Poiseuille_fmax.(gv.x,phys.v_inlet,phys.ref_length) # vPoiseuilleb = Poiseuille_fmax.(gv.x[1,:],phys.v_inlet,phys.ref_length) # phL.u .= 0.0 # phL.v .= vPoiseuille # vecb_B(phL.vD,gv) .= vPoiseuilleb interface: | # gp.LS[1].u .= gp.x .- phys.ls_wall_xmin if sim.activate_interface == 1 gp.LS[1].u .= sqrt.((gp.x .- phys.intfc_x).^2 + (gp.y .- phys.intfc_y).^2) - phys.radius * ones(gp) #modify velocity field near interface su = sqrt.((gv.x .- phys.intfc_x).^2 .+ (gv.y .- phys.intfc_y).^2) R1 = phys.radius + 3.0*num.Δ bl = 4.0 for II in gv.ind.all_indices if su[II] <= R1 phL.v[II] = 0.0 # elseif su[II] > R1 # uL[II] = tanh(bl*(su[II]-R1)) end end elseif sim.activate_interface == -1 gp.LS[1].u .= sqrt.((gp.x .- phys.intfc_x).^2 + (gp.y .- phys.intfc_y).^2) - phys.radius * ones(gp) gp.LS[1].u .*= -1.0 else gp.LS[1].u .= 1.0 end test_LS(gp) print_parameters: | print("\n Print parameters from yml file \n") mu = phys.mu_cin1 *phys.rho1 #in Pa s = M L^{-1} T^{-1}} phys.mu1 = mu phys.mu2 = mu mu1=mu mu2=mu h0 = phys.radius # print("\n phys.concentration0 ",phys.concentration0) # c0_H2 = phys.concentration0.concentration0_H2 # c0_KOH = phys.concentration0.concentration0_KOH # c0_H2O = phys.concentration0.concentration0_H2O # concentration0_dict = PropertyDict(phys.concentration0) # c0_H2 = concentration0_dict.concentration0_H2 # c0_KOH = concentration0_dict.concentration0_KOH # c0_H2O = concentration0_dict.concentration0_H2O c0_H2,c0_KOH,c0_H2O = phys.concentration0 DH2,DKOH,DH2O= phys.diffusion_coeff elec_cond=2*phys.Faraday^2*c0_KOH*DKOH/(phys.Ru*phys.temperature0) printstyled(color=:red, @sprintf "\n elec_cond : %.2e \n" elec_cond) Re=phys.rho1*phys.v_inlet*phys.ref_length/mu #Reynolds number printstyled(color=:green, @sprintf "\n Re : %.2e %.2e %.2e %.2e\n" Re phys.rho1/mu1 phys.rho1 mu1) Re=phys.rho1/mu1 #not Reynolds number, but rho1/mu1 printstyled(color=:green, @sprintf "\n 'Re' i.e. rho/mu : %.2e %.2e %.2e %.2e\n" Re phys.rho1/mu1 phys.rho1 mu1) if phys.nb_transported_scalars>0 if length(phys.concentration0)!=phys.nb_transported_scalars print(@sprintf "\nnb_transported_scalars: %5i\n" phys.nb_transported_scalars) @error ("nb_transported_scalars") end if length(phys.diffusion_coeff)!=phys.nb_transported_scalars print(@sprintf "\nnb_transported_scalars: %5i\n" phys.nb_transported_scalars) @error ("nb_transported_scalars") end else printstyled(color=:red, @sprintf "\n WARNING no scalar transport\n") end print(@sprintf "\nnb_transported_scalars: %5i\n" phys.nb_transported_scalars) # diffusion_t = (phys.radius^2)./phys.diffusion_coeff diffusion_t = ((mesh.xmax-mesh.xmin)^2)./phys.diffusion_coeff print("\n diffusion time ", diffusion_t,"\n") open("report.html", "w") do file # write("simulation time ", phys.end_time) # write("simulation dt ", timestep) # write("simulation max_iter ", sim.max_iter) # write("diffusion time ", diffusion_t) print(file,"\nsimulation time ", phys.end_time) # print(file,"\ndt ", timestep) print(file,"\nsimulation max_iter ", sim.max_iter) print(file,"\ndiffusion time ", diffusion_t) # print_BC_html(BC_uL,"u";io=file) # print_BC_html(BC_vL,"v";io=file) # print_BC_html(BC_pL,"p";io=file) # write(file, "This is a line of text.\n") # The file will be automatically closed here end print("\n end Print parameters from yml file \n") # test_end: | # print("\n test end \n") # open("BC.html", "w") do file # print_BC_html(BC_uL,"u";io=file) # print_BC_html(BC_vL,"v";io=file) # print_BC_html(BC_pL,"p";io=file) # print_BC_html(BC_phi_ele,"phi";io=file) # print_BC_html(BC_trans_scal_H2,"H2";io=file) # print_BC_html(BC_trans_scal_KOH,"KOH";io=file) # print_BC_html(BC_trans_scal_H2O,"H2O";io=file) # # write(file, "This is a line of text.\n") # # The file will be automatically closed here # end # phi_test = -1.166e-02 # i_butler_test = butler_volmer_no_concentration.(phys.alpha_a,phys.alpha_c,phys.Faraday,phys.i0,phi_test,phys.phi_ele1,phys.Ru,phys.temperature0) # print("\n test Butler ",i_butler_test) # # L = Lmesh_xmax-mesh_xmin # print("\n test Butler ",i_butler_test,-i_butler_test*L) # print("\n") study: #tolerance for tests test_tolerance: 1.e-11 #1.e-14 test_tolerance_solution_absolute: 1.e-1 # from n = 16 meshes: [32,64,128] #[32,64,128,256] compute_errors: None timesteps: [1e-4] #[1e-3] #[5e-3] #[1e-2] #[5e-2] #[5e-3] # #[1e-3] #[1e-4] #nucleation_time is 2.0e-2 plot: ax_locator_x: [0,20,40,60,80,100] #ticks in matplotlib ax_locator_y: [0,20,40,60,80,100] ax_formatter_x: [0,20,40,60,80,100] #[0,$L_e$] ax_formatter_y: [0,20,40,60,80,100] #[0,$L_e$] xlim: [0,100] #[0,3.175e-4] ylim: [0,100] #[0,3.175e-4] cbarlabel: "" #["u","v"] cmap: "viridis" color_line: "k" #"w" #"k" color_wall: 'k' fig_fraction: 1.0 #0.5 interface_color: 'r' #'k' extend: neither #max xlabel: $x ( \unit{\um})$ ylabel: $y ( \unit{\um})$ linewidth: 1 linestyle: None skip_every: 1 #12 text_color: k themes: [dark,light] #[light] #[dark,light] theme: light film_format: mp4 quiver_scale: 1e-4 quiver_scale_unit: xy #None scale_time: 1e-3 scale_vel: 1e-4 scale_x: 1e-6 scale_y: 1e-6 theta1: 0 theta2: 90 ticks_x: 0:20:100 ticks_y: 0:20:100 unit_time: ms write_h5: 0 plot_grid: false plot_levelset: True plot_levelset_segments: False plot_movies : false plot_R : false #debug Levelset plotcase : "none" #plotcase : "circle" plot_current_wall : false # plot_current_wall : true plot_interface : false # plot_interface : true plot_mode: "pcolormesh" fontsize: 2 print_mode: "val" plotbc: true dpi: 300 font_size: 12 img_format: "pdf" latex_frame_height: 180 #220 #180 #200 #220 # 261.20912 #228.4378 #pt #beamer latex_frame_width: 426.79135 # 398.3386 #do not plot 2D figure, used in special plots (velocity vectors and current lines): no_2D_plot: ["velocity_x","velocity_y","i_current_x","i_current_y"] pdi: 1 #1: pdi activated # quiver_scale_unit: xy #None # scale_time: 1e-3 # scale_vel: 1e-4 # scale_x: 1.0 #1e-6 # scale_y: 1.0 #1e-6 # theta1: 0 # theta2: 90 # ticks_x: 0:1:0.5 #0:20:100 # ticks_y: 0:2:0.5 #0:20:100 # unit_time: ms # write_h5: 0 # # plot_grid: false # # plot_levelset: True # # plot_levelset_segments: False # plot_movies : false # plot_R : false # #debug Levelset # plotcase : "none" # #plotcase : "circle" # plot_current_wall : false # # plot_current_wall : true # plot_interface : false # # plot_interface : true # # plot_mode: "pcolormesh" # # print_mode: "val" # plotbc: true # prefix: "./" # show_nodes: False # figsize: None # aspect_box: 'box' # aspect_ratio: 'equal' # fontsize: 4 # isocontour: False # levels: 10 # # mesh_macro: | # # global x_1D_2, y_1D_2,key_LS_2 # # x_1D_2 = xp # # y_1D_2 = yv # plot_bc: True # plot_grid: True # plot_levelset: True # plot_levelset_segments: #True # plot_normal: True # plot_normal_macro: | # normal_x # quiver_scale: 10 # # skip_every: # plot_mode: pcolormesh #contourf # print_mode: "val" # range: [0,1e-4] # slope_color: 'k' # slope_alpha: 0.5 # zoom: [[0,5],[0,5]] # zoom_mode: index # zoom: [[1,11],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # zoom: [[0,10],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # zoom: [[0,4],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # zoom_mode: coord color_annot_bc: w color_annot_bulk: w linestyles: ['(0, (3, 6))' ] # macro_file_name: ['file_name+"_"+str(mesh["nx"])+"_"+plotpar["theme"]+ ".pdf"', # 'file_name+"_"+str(mesh["nx"])+ "_"+plotpar["theme"]+".svg"'] # macro_file_name: ['file_name+"_"+str(mesh["nx"])+"_"+"it"+"_"+str(nstep)+"_"+plotpar["theme"]+ ".pdf"', # 'file_name+"_"+str(mesh["nx"])+"_"+"it"+"_"+str(nstep)+"_"+plotpar["theme"]+".svg"'] macro_file_name: ['file_name+"_"+"it"+"_"+str(nstep)+"_"+plotpar["theme"]+ ".pdf"', 'file_name+"_"+"it"+"_"+str(nstep)+"_"+plotpar["theme"]+".svg"'] ticks_format: '%.2e' files_macro: | #macro to select files for film import re global h5_files_2 freq = 10 freq = 1 max_iter = 23 h5_files_2 = [] for file in h5_files: iter = int(re.split(r'_|\.h5', file)[1]) # print('iter',iter,iter%freq) # if iter%freq == 0: # h5_files_2.append(file) if (iter%freq == 0) and (iter < max_iter): h5_files_2.append(file) # zoom: &zoom1 [[0.0,1.0],[0.0,1.0]] # zoom_mode: &zoom_mode1 coord zoom: &zoom1 [[0.27,0.73],[0.27,0.73]] zoom_mode: &zoom_mode1 coord zoom2: &zoom2 [[0.4,0.6],[0.6,0.8]] zoom_mode2: &zoom_mode2 coord # zoom2: &zoom2 [[0.0,0.1],[0,0.1]] # zoom_mode2: &zoom_mode2 coord # zoom3: &zoom3 [[0.9,1.0],[0,0.1]] # zoom_mode3: &zoom_mode3 coord # zoom4: &zoom4 [[0.9,1.0],[0.9,1.0]] # zoom_mode4: &zoom_mode4 coord # zoom5: &zoom5 [[0,0.1],[0.9,1.0]] # zoom_mode5: &zoom_mode5 coord figures: - var: i_current_x figsize: True file: current_lines fig_fraction: 1.0 fig_ratio: 0.5 add_schematics: True add_schematics_coords: [0, 2, 61, 63] #[0, 1, 55, 57] fontsize: 6 func: plot_current_lines cbarlabel: "$ \\text{Electrical potential} ~ (\\unit{V})$" #Electrical potential ax_locator_x: [0,20,40,60,80,100] ax_locator_y: [0,20,40,60,80,100] img_format: mp4 isocontour: #True levels: 10 #10 range: np.linspace(-1.116e-2,0,11) plot_bc: True plot_grid: True plot_levelset: True plot_levelset_segments: False plot_mode: contourf # range: [0,1e-4] ticks_format: '%.2e' # xlim: [0,100] # ylim: [0,100] linewidth: 0.25 #1 linestyle: '-' #'dotted' zoom_mode: None #For current lines density: '[0.5,0.5]' streamplot_cbarlabel: "$ \\text{Current magnitude} ~ \\rightarrow$" streamplot_color: 'k' #mag streamplot_mutation_scale: 5 #1 very small, 10 default? # start_points: 'np.array([[100,100,100,100,100,100,100,100,100,100,100,100,100,100], [10,20,30,40,45,47.5,48,51,52.5,55,60,70,80,90]])' #'np.array([[0,20,40,60,80,100], [0,20,40,60,80,100]])' # broken_streamlines: True streamplot_lw: 0.25 # plot_schematic_wall: True # - var: i_current_x # # figsize: True # file: current_lines # func: plot_current_lines # cbarlabel: "$ \\text{Electrical potential} ~ (\\unit{V})$" #Electrical potential # # #macro_file_name: ['file_name+"_"+str(mesh["nx"])+"_"+plotpar["theme"]+ ".pdf"', 'file_name+"_"+str(mesh["nx"])+ "_"+plotpar["theme"]+".svg"'] # # fig_fraction: 1.0 # # fig_ratio: 0.5 # add_schematics: #True # add_schematics_coords: [0, 2, 61, 63] #[0, 1, 55, 57] # fontsize: 6 # # # ax_locator_x: [0,0.5,1] # # # ax_locator_y: [0,0.5,1,0.5,2] # # img_format: mp4 # # isocontour: #True # # levels: 10 #10 # # # range: np.linspace(-1.116e-2,0,11) # # plot_bc: True # # plot_grid: True # # plot_levelset: #True # # plot_levelset_segments: False # # plot_mode: contourf # # # range: [0,1e-4] # # ticks_format: '%.2e' # # linewidth: 0.25 #1 # # linestyle: '-' #'dotted' # # zoom_mode: None # # #For current lines # # density: '[0.5,0.5]' # # streamplot_cbarlabel: "$ \\text{Current magnitude} ~ \\rightarrow$" # # streamplot_color: 'k' #mag # # streamplot_mutation_scale: 5 #1 very small, 10 default? # # # start_points: 'np.array([[100,100,100,100,100,100,100,100,100,100,100,100,100,100], [10,20,30,40,45,47.5,48,51,52.5,55,60,70,80,90]])' #'np.array([[0,0.5,1], [0,0.5,1]])' # # # broken_streamlines: True # # streamplot_lw: 0.25 # # # plot_schematic_wall: True # - var: dcap_1 # func: plot_python_pdf_full2 # file: dcap_1_zoom # cbarlabel: "dcap_1" # img_format: pdf # isocontour: False # levels: 10 # range: np.linspace(48982,49000.001,11) #49000.001 for rounding errors, otherwise use extend parameter but we cannot check if c>>490000 # plot_bc: #True # plot_grid: True # plot_levelset: True # plot_levelset_segments: False # plot_capacities: True # plot_capacities_ijlist: [[1,1],[1,5],[1,10]] # plot_mode: contourf # xlim: [0,100] # ylim: [0,100] # zoom: [[0,10],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # zoom_mode: coord # color_annot_bc: w # color_annot_bulk: w # linewidth: 1 # linestyle: None # - var: dcap_1 # file: dcap_1 # field_index: 1 # cbarlabel: "$\\chi$" # fontsize: 4 # isocontour: False # levels: 10 # # lcolor: # plot_bc: True # plot_wall: #True # plot_grid: True # plot_levelset: True # plot_levelset_segments: #True # plot_levelset_segments_print: # plot_mode: contourf # print_mode: # range: [0,1e-4] # xlim: [0,100] # ylim: [0,100] # linewidth: 1 # linestyle: None # - var: dcap_2 # file: dcap_2 # field_index: 1 # cbarlabel: "$\\chi$" # fontsize: 4 # isocontour: False # levels: 10 # # lcolor: # plot_bc: True # plot_wall: #True # plot_grid: True # plot_levelset: True # plot_levelset_segments: #True # plot_levelset_segments_print: # plot_mode: contourf # print_mode: # range: [0,1e-4] # xlim: [0,100] # ylim: [0,100] # linewidth: 1 # linestyle: None # - var: dcap_3 # file: dcap_3 # field_index: 1 # cbarlabel: "$\\chi$" # fontsize: 4 # isocontour: False # levels: 10 # # lcolor: # plot_bc: True # plot_wall: #True # plot_grid: True # plot_levelset: True # plot_levelset_segments: #True # plot_levelset_segments_print: # plot_mode: contourf # print_mode: # range: [0,1e-4] # xlim: [0,100] # ylim: [0,100] # linewidth: 1 # linestyle: None # - var: dcap_4 # file: dcap_4 # field_index: 1 # cbarlabel: "$\\chi$" # fontsize: 4 # isocontour: False # levels: 10 # # lcolor: # plot_bc: True # plot_wall: #True # plot_grid: True # plot_levelset: True # plot_levelset_segments: #True # plot_levelset_segments_print: # plot_mode: contourf # print_mode: # range: [0,1e-4] # xlim: [0,100] # ylim: [0,100] # linewidth: 1 # linestyle: None # - var: levelset_p # file: levelset_p # figsize: None # aspect_box: 'box' # aspect_ratio: 'equal' # cbarlabel: Levelset p # fontsize: 4 # isocontour: False # levels: 10 # plot_bc: True # plot_wall: #True # plot_grid: True # plot_levelset: True #False # plot_levelset_segments: #True # plot_normal: #True # skip_every: 1 # quiverkey: True # quiver_scale: 1 # # quiver_scale_unit: xy #None # quiver_unit: m/s #given value v_inlet # quiver_x: 0.7 # quiver_y: 0.05 # # linewidth: 1 # # linestyle: 'dotted' # plot_mode: contourf #pcolormesh #contourf # print_mode: "val" # range: [0,1e-4] # xlim: [0,100] # ylim: [0,100] # # zoom: [[0,5],[0,5]] # # zoom_mode: index # # zoom: [[1,11],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # # zoom: [[0,10],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # # zoom: [[0,4],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # # zoom_mode: coord # color_annot_bc: w # color_annot_bulk: w # linewidth: 1 # linestyle: None - var: concentration_H2_1DT func: plot_python_pdf_full2 macro_file_name: ['file_name+"_"+str(mesh["nx"])+"_"+plotpar["theme"]+ ".pdf"', 'file_name+"_"+str(mesh["nx"])+ "_"+plotpar["theme"]+".svg"'] file: concentration_H2_zoom_no_bc cbarlabel: "$ \\text{Concentration} ~ \\ce{H2}$" img_format: pdf isocontour: False levels: 10 range: np.linspace(48982,49000.001,11) #49000.001 for rounding errors, otherwise use extend parameter but we cannot check if c>>490000 plot_bc: #True plot_grid: True plot_levelset: True plot_levelset_segments: False plot_mode: contourf xlim: [0,100] ylim: [0,100] zoom: [[0,10],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square zoom_mode: coord color_annot_bc: w color_annot_bulk: w linewidth: 1 linestyle: None - var: concentration_H2_1DT file: concentration_H2 func: plot_file macro_file_name: ['file_name+"_"+str(mesh["nx"])+"_"+plotpar["theme"]+ ".pdf"', 'file_name+"_"+str(mesh["nx"])+ "_"+plotpar["theme"]+".svg"'] cbarlabel: "$\\text{Concentration}~H_2$" fontsize: 4 isocontour: False levels: 10 # lcolor: plot_bc: True plot_grid: True plot_levelset: True plot_levelset_segments: #True plot_levelset_segments_print: plot_mode: contourf print_mode: range: [0,1e-4] xlim: [0,100] ylim: [0,100] linewidth: 1 linestyle: None # - var: levelset_p # func: plot_python_pdf_full2 # file: levelset_p_zoom # field_index: 1 # cbarlabel: LS # fontsize: 4 # isocontour: False # levels: 10 # plot_bc: True # plot_grid: True # plot_levelset: False # plot_levelset_segments: False # plot_normal: #True # plot_mode: pcolormesh #contourf # print_mode: "val" # range: [0,1e-4] # xlim: [0,100] # ylim: [0,100] # #zoom: [[0,5],[0,5]] # #zoom_mode: index # zoom: [[0,4],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # zoom_mode: coord # color_annot_bc: k #w # color_annot_bulk: w # - var: levelset_p # file: levelset_p # figsize: None # aspect_box: 'box' # aspect_ratio: 'equal' # cbarlabel: Levelset p # fontsize: 4 # isocontour: False # levels: 10 # plot_bc: True # plot_wall: #True # plot_grid: True # plot_levelset: True #False # plot_levelset_segments: #True # plot_normal: True # plot_mode: contourf #pcolormesh #contourf # print_mode: "val" # range: [0,1e-4] # xlim: [0,100] # ylim: [0,100] # # zoom: [[0,5],[0,5]] # # zoom_mode: index # # zoom: [[1,11],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # # zoom: [[0,10],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # # zoom: [[0,4],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # # zoom_mode: coord # color_annot_bc: w # color_annot_bulk: w # linewidth: 1 # linestyle: None # - var: normal_velocity_intfc # func: plot_file # file: normal_velocity_intfc # field_index: 1 # cbarlabel: normal_velocity_intfc # fontsize: 4 # isocontour: False # levels: 10 # plot_bc: True # plot_grid: True # plot_levelset: True # plot_levelset_segments: False # plot_mode: pcolormesh #contourf # print_mode: "val" # range: [0,1e-4] # xlim: [0,100] # ylim: [0,100] # #zoom: [[0,5],[0,5]] # #zoom_mode: index # zoom: [[0,4],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # zoom_mode: None #coord # color_annot_bc: k #w # color_annot_bulk: w # linewidth: 1 # linestyle: None # - var: normal_velocity_intfc # func: plot_python_pdf_full2 # file: normal_velocity_intfc_zoom # field_index: 1 # cbarlabel: normal_velocity_intfc # fontsize: 4 # isocontour: False # levels: 10 # plot_bc: True # plot_grid: True # plot_levelset: False # plot_levelset_segments: False # plot_mode: pcolormesh #contourf # print_mode: "val" # range: [0,1e-4] # xlim: [0,100] # ylim: [0,100] # #zoom: [[0,5],[0,5]] # #zoom_mode: index # zoom: [[0,4],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # zoom_mode: coord # color_annot_bc: k #w # color_annot_bulk: w # - var: concentration_H2_1DT # func: plot_python_pdf_full2 # file: concentration_H2_zoom # field_index: 1 # cbarlabel: "$\\text{Concentration}~H_2$" # fontsize: 4 # isocontour: False # levels: 10 # plot_bc: True # plot_grid: True # plot_levelset: True # plot_levelset_segments: False # plot_mode: pcolormesh #contourf # print_mode: "val" # range: [0,1e-4] # xlim: [0,100] # ylim: [0,100] # #zoom: [[0,5],[0,5]] # #zoom_mode: index # zoom: [[0,4],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # zoom_mode: coord # color_annot_bc: k #w # color_annot_bulk: w # - var: concentration_H2_1DT # func: plot_python_pdf_full2 # file: concentration_H2_zoom_int # field_index: 2 # cbarlabel: "$\\text{Concentration}~H_2$" # fontsize: 4 # isocontour: False # levels: 10 # plot_bc: #True # plot_grid: True # plot_levelset: False # plot_levelset_segments: False # plot_mode: pcolormesh #contourf # print_mode: "val" # range: [0,1e-4] # xlim: [0,100] # ylim: [0,100] # #zoom: [[0,5],[0,5]] # #zoom_mode: index # zoom: [[0,4],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # zoom_mode: coord # color_annot_bc: k #w # color_annot_bulk: w # - var: mass_transfer_rate_border # func: plot_python_pdf_full2 # file: mass_transfer_rate_zoom_border # figsize: None # aspect_box: 'box' # aspect_ratio: 'equal' # cbarlabel: Mass transfer rate # fontsize: 4 # isocontour: False # levels: 10 # plot_bc: True # plot_grid: True # plot_levelset: True #False # plot_levelset_segments: #True # plot_mode: pcolormesh #contourf # print_mode: "val" # range: [0,1e-4] # xlim: [0,100] # ylim: [0,100] # # zoom: [[0,5],[0,5]] # # zoom_mode: index # # zoom: [[1,11],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # # zoom: [[0,10],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # zoom: [[0,4],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # zoom_mode: coord # color_annot_bc: w # color_annot_bulk: w # linewidth: 1 # linestyle: None # - var: mass_transfer_rate_intfc # func: plot_python_pdf_full2 # file: mass_transfer_rate_zoom_intfc # figsize: None # aspect_box: 'box' # aspect_ratio: 'equal' # cbarlabel: Mass transfer rate # fontsize: 4 # isocontour: False # levels: 10 # plot_bc: True # plot_grid: True # plot_levelset: True #False # plot_levelset_segments: #True # plot_mode: pcolormesh #contourf # print_mode: "val" # range: [0,1e-4] # xlim: [0,100] # ylim: [0,100] # # zoom: [[0,5],[0,5]] # # zoom_mode: index # # zoom: [[1,11],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # # zoom: [[0,10],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # zoom: [[0,4],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # zoom_mode: coord # color_annot_bc: w # color_annot_bulk: w # linewidth: 1 # linestyle: None # - var: mass_transfer_rate_bulk # func: plot_python_pdf_full2 # file: mass_transfer_rate_zoom_bulk # figsize: None # aspect_box: 'box' # aspect_ratio: 'equal' # cbarlabel: Mass transfer rate # fontsize: 4 # isocontour: False # levels: 10 # plot_bc: True # plot_grid: True # plot_levelset: True #False # plot_levelset_segments: #True # plot_mode: pcolormesh #contourf # print_mode: "val" # range: [0,1e-4] # xlim: [0,100] # ylim: [0,100] # # zoom: [[0,5],[0,5]] # # zoom_mode: index # # zoom: [[1,11],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # # zoom: [[0,10],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # zoom: [[0,4],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # zoom_mode: coord # color_annot_bc: w # color_annot_bulk: w # linewidth: 1 # linestyle: None # - var: mass_transfer_rate # func: plot_python_pdf_full2 # file: mass_transfer_rate_zoom # figsize: None # aspect_box: 'box' # aspect_ratio: 'equal' # cbarlabel: Mass transfer rate # fontsize: 4 # isocontour: False # levels: 10 # plot_bc: True # plot_grid: True # plot_levelset: True #False # plot_levelset_segments: #True # plot_mode: pcolormesh #contourf # print_mode: "val" # range: [0,1e-4] # xlim: [0,100] # ylim: [0,100] # # zoom: [[0,5],[0,5]] # # zoom_mode: index # # zoom: [[1,11],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # # zoom: [[0,10],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # zoom: [[0,4],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # zoom_mode: coord # color_annot_bc: w # color_annot_bulk: w # linewidth: 1 # linestyle: None # - var: velocity_x # func: plot_vector # file: velocity_vectors # plot_levelset: True # plot_levelset_segments: False # skip_every: 12 # xlim: [0,100] # ylim: [0,100] # quiverkey: True # quiver_unit: m/s #given value v_inlet # quiver_x: 0.7 # quiver_y: 0.97 # linewidth: 1 # linestyle: 'dotted' # ax_locator_x: [0,20,40,60,80,100] # ax_locator_y: [0,20,40,60,80,100] # - var: i_current_x # file: current_lines # func: plot_current_lines # cbarlabel: Electrical potential # # img_format: mp4 # isocontour: #True # levels: 0 #10 # range: np.linspace(-1.5e-4,0,11) # plot_bc: True # plot_grid: True # plot_levelset: True # plot_levelset_segments: False # plot_mode: contourf # # range: [0,1e-4] # ticks_format: '%.2e' # xlim: [0,100] # ylim: [0,100] # linewidth: 1 # linestyle: 'dotted' # zoom_mode: None # #For current lines # density: '[0.5,0.5]' # streamplot_color: mag # streamplot_mutation_scale: 5 #1 very small, 10 default? # streamplot_lw: 0.25 # - var: i_current_x # figsize: True # file: current_lines # macro_file_name: ['file_name+"_"+str(mesh["nx"])+"_"+plotpar["theme"]+ ".pdf"', 'file_name+"_"+str(mesh["nx"])+ "_"+plotpar["theme"]+".svg"'] # fig_fraction: 1.0 # fig_ratio: 0.5 # # add_schematics: #True # add_schematics_coords: [0, 2, 61, 63] #[0, 1, 55, 57] # fontsize: 6 # func: plot_current_lines # cbarlabel: "$ \\text{Electrical potential} ~ (\\unit{V})$" #Electrical potential # ax_locator_x: [0,20,40,60,80,100] # ax_locator_y: [0,20,40,60,80,100] # img_format: mp4 # isocontour: #True # levels: 10 #10 # range: np.linspace(-1.116e-2,0,11) # plot_bc: True # plot_grid: True # plot_levelset: True # plot_levelset_segments: False # plot_mode: contourf # # range: [0,1e-4] # ticks_format: '%.2e' # xlim: [0,100] # ylim: [0,100] # linewidth: 0.25 #1 # linestyle: '-' #'dotted' # zoom_mode: None # #For current lines # density: '[0.5,0.5]' # streamplot_cbarlabel: "$ \\text{Current magnitude} ~ \\rightarrow$" # streamplot_color: 'k' #mag # streamplot_mutation_scale: 5 #1 very small, 10 default? # # start_points: 'np.array([[100,100,100,100,100,100,100,100,100,100,100,100,100,100], [10,20,30,40,45,47.5,48,51,52.5,55,60,70,80,90]])' #'np.array([[0,20,40,60,80,100], [0,20,40,60,80,100]])' # # broken_streamlines: True # streamplot_lw: 0.25 # # plot_schematic_wall: True - var: i_current_x figsize: True file: current_lines_schematics macro_file_name: ['file_name+"_"+str(mesh["nx"])+"_"+plotpar["theme"]+ ".pdf"', 'file_name+"_"+str(mesh["nx"])+ "_"+plotpar["theme"]+".svg"'] fig_fraction: 1.0 fig_ratio: 0.5 add_schematics: #True add_schematics_coords: [0, 2, 61, 63] #[0, 1, 55, 57] fontsize: 6 func: plot_current_lines cbarlabel: "$ \\text{Electrical potential} ~ (\\unit{V})$" #Electrical potential ax_locator_x: [0,20,40,60,80,100] ax_locator_y: [0,20,40,60,80,100] img_format: mp4 isocontour: #True levels: 10 #10 range: np.linspace(-1.116e-2,0,11) plot_bc: True plot_grid: True plot_levelset: True plot_levelset_segments: False plot_mode: contourf # range: [0,1e-4] ticks_format: '%.2e' xlim: [0,100] ylim: [0,100] linewidth: 0.25 #1 linestyle: '-' #'dotted' zoom_mode: None #For current lines density: '[0.5,0.5]' streamplot_cbarlabel: "$ \\text{Current magnitude} ~ \\rightarrow$" streamplot_color: 'k' #mag streamplot_mutation_scale: 5 #1 very small, 10 default? # start_points: 'np.array([[100,100,100,100,100,100,100,100,100,100,100,100,100,100], [10,20,30,40,45,47.5,48,51,52.5,55,60,70,80,90]])' #'np.array([[0,20,40,60,80,100], [0,20,40,60,80,100]])' # broken_streamlines: True streamplot_lw: 0.25 # plot_schematic_wall: True - var: v_1D file: v_LS cbarlabel: v/v_inlet isocontour: False norm: *v_inlet #reference inside yaml levels: 10 plot_bc: True plot_grid: True plot_levelset: True plot_levelset_segments: False plot_mode: contourf range: [0,1e-4] xlim: [0,100] ylim: [0,100] linewidth: 0.5 linestyle: 'dotted' # - var: mass_transfer_rate # file: mass_transfer_rate # cbarlabel: mass_transfer_rate # isocontour: False # levels: 10 # plot_bc: True # plot_grid: True # plot_levelset: True # plot_levelset_segments: False # plot_mode: contourf # range: [0,1e-4] # xlim: [0,100] # ylim: [0,100] # linewidth: 1 # linestyle: None # - var: mass_transfer_rate # file: mass_transfer_rate_no_intfc # cbarlabel: mass_transfer_rate # isocontour: False # levels: 10 # plot_bc: True # plot_grid: True # plot_levelset: #True # plot_levelset_segments: False # plot_mode: contourf # range: [0,1e-4] # xlim: [0,100] # ylim: [0,100] # linewidth: 1 # linestyle: None # - var: trans_scal_1D_H2 # file: trans_scal_1D_H2 # cbarlabel: '$\\text{Concentration} H_2$' # isocontour: False # levels: 10 # plot_bc: True # plot_grid: True # plot_levelset: False # plot_mode: contourf # range: [0,1e-4] # xlim: [0,100] # ylim: [0,100] # linewidth: 1 # linestyle: None # - var: trans_scal_1D_H2_1DT # file: trans_scal_1D_H2_zoom # field_index: 1 # 1 for bulk, 2 for 1st interface # cbarlabel: '$\\text{Concentration} H_2$' # fontsize: 4 # isocontour: False # levels: 10 # plot_bc: True # plot_grid: True # plot_levelset: False # plot_mode: colormesh # print_mode: "val" # range: [0,1e-4] # xlim: [0,100] # ylim: [0,100] # linewidth: 1 # linestyle: None # zoom: [[0,5],[0,5]] # - var: concentration_H2_1DT # file: concentration_H2 # cbarlabel: "$\\text{Concentration}~H_2$" # fontsize: 4 # isocontour: False # levels: 10 # # lcolor: # plot_bc: True # plot_grid: True # plot_levelset: False #True # plot_levelset_segments: #True # plot_levelset_segments_print: # plot_mode: contourf # print_mode: # range: [0,1e-4] # xlim: [0,100] # ylim: [0,100] # linewidth: 1 # linestyle: None # - var: concentration_KOH_1DT # file: concentration_KOH # cbarlabel: '$\\text{Concentration} KOH$' # isocontour: False # levels: 10 # plot_bc: True # plot_grid: True # plot_levelset: True # plot_levelset_segments: False # plot_mode: contourf # range: [0,1e-4] # xlim: [0,100] # ylim: [0,100] # linewidth: 1 # linestyle: None # - var: concentration_H2O_1DT # file: concentration_H2O # cbarlabel: '$\\text{Concentration} H_2O$' # isocontour: False # levels: 10 # plot_bc: True # plot_grid: True # plot_levelset: True # plot_levelset_segments: False # plot_mode: contourf # range: [0,1e-4] # xlim: [0,100] # ylim: [0,100] # linewidth: 1 # linestyle: None # #Zoom # - var: mass_transfer_rate # func: plot_python_pdf_full2 # file: mass_transfer_rate_zoom_coord # figsize: None # aspect_box: 'box' # aspect_ratio: 'equal' # cbarlabel: Mass transfer rate # fontsize: 4 # isocontour: False # levels: 10 # plot_bc: True # plot_grid: True # plot_levelset: True #False # plot_levelset_segments: #True # plot_mode: pcolormesh #contourf # print_mode: "ijcoord" #"val" # range: [0,1e-4] # xlim: [0,100] # ylim: [0,100] # # zoom: [[0,5],[0,5]] # # zoom_mode: index # # zoom: [[1,11],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # # zoom: [[0,10],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # zoom: [[2,4],[45,47]] #[[1,10],[45,55]] activates BC plot so no longer square # zoom_mode: coord # color_annot_bc: w # color_annot_bulk: w # linewidth: 1 # linestyle: None # - var: mass_transfer_rate # func: plot_python_pdf_full2 # file: mass_transfer_rate_zoom # figsize: None # aspect_box: 'box' # aspect_ratio: 'equal' # cbarlabel: Mass transfer rate # fontsize: 4 # isocontour: False # levels: 10 # plot_bc: True # plot_grid: True # plot_levelset: True #False # plot_levelset_segments: #True # plot_mode: pcolormesh #contourf # print_mode: "ijval" #"val" # range: [0,1e-4] # xlim: [0,100] # ylim: [0,100] # # zoom: [[0,5],[0,5]] # # zoom_mode: index # # zoom: [[1,11],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # # zoom: [[0,10],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # zoom: [[0,4],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # zoom_mode: coord # color_annot_bc: w # color_annot_bulk: w # linewidth: 1 # linestyle: None # - var: v_1D # file: v_zoom # figsize: None # aspect_box: 'box' # aspect_ratio: 'equal' # cbarlabel: v # fontsize: 4 # isocontour: False # levels: 10 # plot_bc: True # plot_grid: True # plot_levelset: True #False # plot_levelset_segments: #True # plot_mode: pcolormesh #contourf # print_mode: "val" # range: [0,1e-4] # xlim: [0,100] # ylim: [0,100] # # zoom: [[0,5],[0,5]] # # zoom_mode: index # # zoom: [[1,11],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # # zoom: [[0,10],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # zoom: [[0,4],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # zoom_mode: coord # color_annot_bc: w # color_annot_bulk: w # linewidth: 1 # linestyle: None # - var: concentration_H2_1DT # file: concentration_H2_zoom # field_index: 1 # cbarlabel: "$\\text{Concentration}~H_2$" # fontsize: 4 # isocontour: False # levels: 10 # plot_bc: True # plot_grid: True # plot_levelset: False # plot_levelset_segments: False # plot_mode: pcolormesh #contourf # print_mode: "val" # range: [0,1e-4] # xlim: [0,100] # ylim: [0,100] # #zoom: [[0,5],[0,5]] # #zoom_mode: index # zoom: [[0,4],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # zoom_mode: coord # color_annot_bc: w # color_annot_bulk: w # - var: concentration_H2_1DT # file: concentration_H2_zoom_segments # field_index: 1 # cbarlabel: "$\\text{Concentration}~H_2$" # fontsize: 4 # isocontour: False # levels: 10 # plot_bc: True # plot_grid: True # plot_levelset: False # plot_levelset_segments: #True # plot_levelset_segments_print: ijy #ijx # plot_mode: pcolormesh #contourf # print_mode: ijy #ijx #ijcoord #ijval #ij #"val" # range: [0,1e-4] # xlim: [0,100] # ylim: [0,100] # zoom: [[1,11],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # zoom_mode: coord # color_annot_bc: w # color_annot_bulk: w # - var: concentration_H2_1DT # file: concentration_H2_zoom_segments # field_index: 1 # cbarlabel: '$\\text{Concentration} H_2$' # fontsize: 4 # isocontour: False # levels: 10 # plot_bc: True # plot_grid: True # plot_levelset: False # plot_levelset_segments: True # plot_mode: pcolormesh #contourf # print_mode: ijval #ij #"val" # range: [0,1e-4] # xlim: [0,100] # ylim: [0,100] # zoom: [[1,11],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # zoom_mode: coord # color_annot_bc: w # color_annot_bulk: w films: # - var: normal_velocity_intfc # file: normal_velocity_intfc_zoom # func: plot_python_pdf_full2 # cbarlabel: normal_velocity_intfc # img_format: mp4 # isocontour: False # levels: 10 # plot_bc: True # plot_grid: True # plot_levelset: True # plot_levelset_segments: False # plot_mode: contourf # range: [0,1e-4] # ticks_format: '%.2e' # xlim: [0,100] # ylim: [0,100] # linewidth: 1 # linestyle: None # zoom: [[0,5],[0,5]] # zoom_mode: index # - var: normal_velocity_intfc # func: plot_file # file: normal_velocity_intfc # field_index: 1 # cbarlabel: normal_velocity_intfc # img_format: mp4 # fontsize: 4 # isocontour: False # levels: 0 #10 # range: np.linspace(-1e-2,1e-2,11) # plot_bc: True # plot_grid: True # plot_levelset: True # plot_levelset_segments: False # plot_mode: pcolormesh #contourf # print_mode: "val" # # range: [0,1e-4] # xlim: [0,100] # ylim: [0,100] # #zoom: [[0,5],[0,5]] # #zoom_mode: index # zoom: [[0,4],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # zoom_mode: None #coord # color_annot_bc: k #w # color_annot_bulk: w # linewidth: 1 # linestyle: None # - var: i_current_x # file: current_lines # func: plot_current_lines # cbarlabel: Electrical potential # ax_locator_x: [0,20,40,60,80,100] # ax_locator_y: [0,20,40,60,80,100] # img_format: mp4 # isocontour: #True # levels: 10 #10 # range: np.linspace(-1.5e-4,0,11) # plot_bc: True # plot_grid: True # plot_levelset: True # plot_levelset_segments: False # plot_mode: contourf # # range: [0,1e-4] # ticks_format: '%.2e' # xlim: [0,100] # ylim: [0,100] # linewidth: 1 # linestyle: 'dotted' # zoom_mode: None # #For current lines # density: '[0.5,0.5]' # streamplot_cbarlabel: "$ \\text{Current magnitude} ~ \\rightarrow$" # streamplot_color: mag # streamplot_mutation_scale: 5 #1 very small, 10 default? # streamplot_lw: 0.25 # - var: i_current_mag # file: i_current_mag # cbarlabel: "Current magnitude" # ax_locator_x: [0,20,40,60,80,100] # ax_locator_y: [0,20,40,60,80,100] # img_format: mp4 # isocontour: False # levels: 10 # range: #np.linspace(48000,49000,11) # plot_bc: True # plot_grid: True # plot_levelset: True # plot_levelset_segments: False # plot_mode: contourf # xlim: [0,100] # ylim: [0,100] # linewidth: 1 # linestyle: None # zoom_mode: None # - var: normal_velocity_intfc # file: normal_velocity_intfc_zoom # func: plot_python_pdf_full2 # cbarlabel: normal_velocity_intfc # img_format: mp4 # isocontour: False # levels: 10 # plot_bc: True # plot_grid: True # plot_levelset: True # plot_levelset_segments: False # plot_mode: contourf # range: [0,1e-4] # ticks_format: '%.2e' # xlim: [0,100] # ylim: [0,100] # linewidth: 1 # linestyle: None # zoom: [[0,5],[0,5]] # zoom_mode: index # - var: levelset_p # func: plot_python_pdf_full2 # file: levelset_p_zoom # field_index: 1 # cbarlabel: LS # fontsize: 4 # isocontour: False # levels: 10 # plot_bc: True # plot_grid: True # plot_levelset: False # plot_levelset_segments: False # plot_mode: pcolormesh #contourf # print_mode: "val" # range: [0,1e-4] # xlim: [0,100] # ylim: [0,100] # #zoom: [[0,5],[0,5]] # #zoom_mode: index # zoom: [[0,4],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # zoom_mode: coord # color_annot_bc: k #w # color_annot_bulk: w - var: concentration_H2_1DT func: plot_python_pdf_full2 file: concentration_H2_zoom macro_file_name: ['file_name+"_"+str(mesh["nx"])+"_"+plotpar["theme"]+ ".pdf"', 'file_name+"_"+str(mesh["nx"])+ "_"+plotpar["theme"]+".svg"'] cbarlabel: "$ \\text{Concentration} ~ \\ce{H2}$" img_format: mp4 isocontour: False levels: 10 range: np.linspace(48982,49000.001,11) #49000.001 for rounding errors, otherwise use extend parameter but we cannot check if c>>490000 plot_bc: True plot_grid: True plot_levelset: True plot_levelset_segments: False plot_mode: contourf xlim: [0,100] ylim: [0,100] zoom: [[0,4],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square zoom_mode: coord color_annot_bc: w color_annot_bulk: w linewidth: 1 linestyle: None # - var: levelset_p # func: plot_python_pdf_full2 # file: levelset_p_zoom_2 # figsize: None # aspect_box: 'box' # aspect_ratio: 'equal' # cbarlabel: Levelset p # color_LS: "#0072B2" #'cyan' # img_format: mp4 # fontsize: 4 # isocontour: False # levels: 0 #10 # range: 'np.linspace(-1,1,3)' # plot_bc: True # plot_wall: #True # plot_grid: True # plot_levelset: True # plot_levelset_segments: #True # plot_mode: contourf #contourf_LS #pcolormesh #contourf # print_mode: "val" # # range: [0,1e-4] # xlim: [0,100] # ylim: [0,100] # zoom: [[0,4],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # zoom_mode: coord # color_annot_bc: w # color_annot_bulk: w # linewidth: 1 # linestyle: None - var: levelset_p func: plot_python_pdf_full2 file: levelset_p_zoom figsize: None aspect_box: 'box' aspect_ratio: 'equal' cbarlabel: Levelset p color_LS: "#0072B2" #'cyan' img_format: mp4 fontsize: 4 isocontour: False levels: 0 #10 range: 'np.linspace(-1,1,3)' plot_bc: True plot_wall: #True plot_grid: True plot_levelset: True plot_levelset_segments: #True plot_mode: contourf_LS #pcolormesh #contourf print_mode: "val" # range: [0,1e-4] xlim: [0,100] ylim: [0,100] zoom: [[0,4],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square zoom_mode: coord color_annot_bc: w color_annot_bulk: w linewidth: 1 linestyle: None - var: levelset_p file: levelset_p figsize: None aspect_box: 'box' aspect_ratio: 'equal' ax_locator_x: [0,20,40,60,80,100] ax_locator_y: [0,20,40,60,80,100] cbarlabel: Levelset p color_LS: "#0072B2" #'cyan' img_format: mp4 fontsize: 4 isocontour: False levels: 0 #10 range: 'np.linspace(-1,1,3)' plot_bc: True plot_wall: #True plot_grid: True plot_levelset: #True plot_levelset_segments: #True plot_mode: contourf_LS #pcolormesh #contourf print_mode: "val" # range: [0,1e-4] xlim: [0,100] ylim: [0,100] # zoom: [[0,5],[0,5]] # zoom_mode: index # zoom: [[1,11],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # zoom: [[0,10],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # zoom: [[0,4],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # zoom_mode: coord color_annot_bc: w color_annot_bulk: w linewidth: 1 linestyle: None - var: p_1D file: pressure func: plot_file cbarlabel: p img_format: mp4 isocontour: False levels: 10 plot_bc: True plot_grid: True plot_levelset: True plot_levelset_segments: False plot_mode: contourf range: [0,1e-4] ticks_format: '%.2e' xlim: [0,100] ylim: [0,100] linewidth: 1 linestyle: None # zoom: [[0,5],[0,5]] zoom_mode: None # - var: p_1D # file: pressure_zoom # func: plot_python_pdf_full2 # cbarlabel: p # img_format: mp4 # isocontour: False # levels: 10 # plot_bc: True # plot_grid: True # plot_levelset: True # plot_levelset_segments: False # plot_mode: contourf # range: [0,1e-4] # ticks_format: '%.2e' # xlim: [0,100] # ylim: [0,100] # linewidth: 1 # linestyle: None # zoom: [[0,5],[0,5]] # zoom_mode: index - var: velocity_x file: velocity_vectors func: plot_vector img_format: mp4 plot_levelset: True plot_levelset_segments: False skip_every: 12 xlim: [0,100] ylim: [0,100] quiverkey: True quiver_unit: m/s #given value v_inlet quiver_x: 0.7 quiver_y: 0.05 linewidth: 1 linestyle: 'dotted' # - var: concentration_H2O_1DT # file: current_wall # func: plot_current_wall # axis_offset: 1.25 # img_format: mp4 # levels: 10 # labels: ['$c\left(H_2O\right)$', '$-\eta ~\text{(-overpotential)}$','Current'] # linestyles: ['(0, (3, 6))', # '(3, (3, 6))', #"dashdot" # '(6, (3, 6))'] #"dotted" # ticks: ['np.linspace(48982,49000,10)','np.linspace(0.5,0.7,11)','np.linspace(0,1,11)'] # # ticks: ['np.linspace(40000,49000,10)','np.linspace(0.5,0.7,11)','np.linspace(0,1,11)'] # # range: np.linspace(-0,15,11) # plot_bc: True # plot_grid: True # plot_levelset: True # plot_levelset_segments: False # plot_mode: contourf # xlim: [0,100] # ylim: [0,100] # linewidth: 1 # linestyle: None # zoom_mode: None # - var: concentration_H2_1DT # file: concentration_H2 # cbarlabel: "$ \\text{Concentration} ~ \\ce{H2}$" # img_format: mp4 # isocontour: False # levels: 0 #10 # range: np.linspace(-0,15,11) # plot_bc: True # plot_grid: True # plot_levelset: True # plot_levelset_segments: False # plot_mode: contourf # xlim: [0,100] # ylim: [0,100] # linewidth: 1 # linestyle: None # zoom_mode: None # - var: concentration_H2O_1DT # file: concentration_H2O # cbarlabel: "$ \\text{Concentration} ~ H_2O$" # img_format: mp4 # isocontour: False # levels: 0 # range: np.linspace(48982,49000.001,11) #49000.001 for rounding errors, otherwise use extend parameter but we cannot check if c>>490000 # plot_bc: True # plot_grid: True # plot_levelset: True # plot_levelset_segments: False # plot_mode: contourf # xlim: [0,100] # ylim: [0,100] # linewidth: 1 # linestyle: None # zoom_mode: None - var: velocity_x file: velocity_vectors func: plot_vector img_format: mp4 plot_levelset: True plot_levelset_segments: False skip_every: 12 xlim: [0,100] ylim: [0,100] quiverkey: True quiver_unit: m/s #given value v_inlet quiver_x: 0.7 quiver_y: 0.97 linewidth: 1 linestyle: 'dotted' # - var: i_current_x # file: current_lines # func: plot_current_lines # cbarlabel: Electrical potential # img_format: mp4 # isocontour: #True # levels: 10 #10 # range: np.linspace(-1.5e-4,0,11) # plot_bc: True # plot_grid: True # plot_levelset: True # plot_levelset_segments: False # plot_mode: contourf # # range: [0,1e-4] # ticks_format: '%.2e' # xlim: [0,100] # ylim: [0,100] # linewidth: 1 # linestyle: 'dotted' # zoom_mode: None # #For current lines # density: '[0.5,0.5]' # streamplot_color: mag # streamplot_mutation_scale: 5 #1 very small, 10 default? # streamplot_lw: 0.25 - var: v_1D file: v_LS cbarlabel: v img_format: mp4 isocontour: False levels: 10 plot_bc: True plot_grid: True plot_levelset: True plot_levelset_segments: False plot_mode: contourf range: [0,1e-4] ticks_format: '%.2e' xlim: [0,100] ylim: [0,100] linewidth: 1 linestyle: None zoom_mode: None - var: u_1D file: u_LS cbarlabel: u img_format: mp4 isocontour: False levels: 10 plot_bc: True plot_grid: True plot_levelset: True plot_levelset_segments: False plot_mode: contourf range: [0,1e-4] ticks_format: '%.2e' xlim: [0,100] ylim: [0,100] linewidth: 1 linestyle: None zoom_mode: None curves: # macro_plot_BC: | # inset_ax.text( # 0,# xmin/2 # 0.5, r'$\frac{\partial c_{\ce{H2}} }{\partial n} = \frac{-i}{2FD}$', # fontsize=fontsize,color='w',ha='left',va='center') # inset_ax.text(0.65, 0.0, r'$c_{\ce{H2},0} $', fontsize=fontsize,va='bottom',ha='center',color='w') # inset_ax.text(1.0, 0.5, r'$c_{\ce{H2},0}$', fontsize=fontsize,va='center',ha='right',color='w') # inset_ax.text(0.65, 1.0, r'$\frac{\partial c_{\ce{H2}} }{\partial n} = 0$', fontsize=fontsize,va='top',ha='center',color='w') # macro_show_slice: | # linewidth_points = 1 # line, = inset_ax.plot([0, 0], [0, 1], ls='-',color='r',lw=linewidth_points) # # shift the object over 2 points, and down 2 points # dx, dy = +(linewidth_points/2)/72.,0 # offset = transforms.ScaledTranslation(dx, dy, fig.dpi_scale_trans) # shadow_transform = inset_ax.transData + offset # inset_ax.text(0.0,0.2, 'Slice', # va='center', # ha='left', # transform = shadow_transform, # color='r', # fontsize=fontsize, # ) - var: [[x_1D,concentration_H2_1DT]] file: concentration_H2_through_bubble func: plot_1D fontsize: 10 labels: [["$x ( \\unit{\\um})$", "$ \\text{Concentration} ~ \\ce{H2}$" ]] linestyles: ['(0, (3, 6))' ] #, # '(3, (3, 6))', #"dashdot" # '(6, (3, 6))'] #"dotted" #['-'] ticks: ['[0,20,40,60,80,100]', '[0,20,40,60,80,100]'] linewidth: 0.5 # plot_ref: '4* yml["flower"]["physics"]["v_inlet"]*x_1D*scale_x/(mesh["xmax"]-mesh["xmin"])*(1-x_1D*scale_x/(mesh["xmax"]-mesh["xmin"]))' #use "" not '' in '' macro_file_name: ['file_name+"_"+plotpar["theme"]+ ".pdf"', 'file_name+"_"+plotpar["theme"]+".svg"'] macro_slice: "veci(reshape_data(data),nx,ny,field_index)[ny//2,:]" add_schematics: True add_schematics_coords: [0,1,0,0.001] schematics_width: 40% schematics_height: 40% schematics_loc: center macro_plot_BC: | text_height = 0.3 inset_ax.text( 0,# xmin/2 text_height, r'$\frac{\partial c_{\ce{H2}} }{\partial n} = \frac{-i}{2FD}$', fontsize=fontsize,color='w',ha='left',va='center') inset_ax.text(0.65, 0.0, r'$c_{\ce{H2},0} $', fontsize=fontsize,va='bottom',ha='center',color='w') inset_ax.text(1.0, text_height, r'$c_{\ce{H2},0}$', fontsize=fontsize,va='center',ha='right',color='w') inset_ax.text(0.65, 1.0, r'$\frac{\partial c_{\ce{H2}} }{\partial n} = 0$', fontsize=fontsize,va='top',ha='center',color='w') macro_show_slice: | linewidth_points = 1 line, = inset_ax.plot([0, 1], [0.5, 0.5], ls='-',color='r',lw=linewidth_points) # shift the object over 2 points, and down 2 points dx, dy = 0, +linewidth_points/72. offset = transforms.ScaledTranslation(dx, dy, fig.dpi_scale_trans) shadow_transform = inset_ax.transData + offset inset_ax.text(0.5,0.5, 'Slice', va='bottom', ha='center', transform = shadow_transform, color='r', fontsize=fontsize, ) - var: [[x_1D,phi_ele_1D]] file: phi_through_bubble #_poisson_iter func: plot_1D fontsize: 10 labels: [["$x ( \\unit{\\um})$", "$ \\text{Electrical potential} ~ (\\unit{V})$"]] legend_pos: upper center linestyles: ['(0, (3, 6))' ] #, # '(3, (3, 6))', #"dashdot" # '(6, (3, 6))'] #"dotted" #['-'] ticks: ['[0,20,40,60,80,100]', '[0,20,40,60,80,100]'] linewidth: 0.5 # plot_ref: '4* yml["flower"]["physics"]["v_inlet"]*x_1D*scale_x/(mesh["xmax"]-mesh["xmin"])*(1-x_1D*scale_x/(mesh["xmax"]-mesh["xmin"]))' #use "" not '' in '' macro_slice: "veci(reshape_data(data),nx,ny,field_index)[ny//2,:]" add_schematics: True add_schematics_coords: [0,1,0,0.001] schematics_width: 40% schematics_height: 40% schematics_loc: lower right macro_show_slice: | linewidth_points = 1 line, = inset_ax.plot([0, 1], [0.5, 0.5], ls='-',color='r',lw=linewidth_points) # shift the object over 2 points, and down 2 points dx, dy = 0, -linewidth_points/72. offset = transforms.ScaledTranslation(dx, dy, fig.dpi_scale_trans) shadow_transform = inset_ax.transData + offset inset_ax.text(0.5,0.5, 'Slice', va='top', ha='center', transform = shadow_transform, color='r', fontsize=fontsize, ) macro: | # label1 = str(file['poisson_iter'][()]) global label2 label2 = label1 # X = varx*scale_x # Y = slice_1D # # Add a column of ones to X to account for the intercept # X = np.vstack([X, np.ones(len(X))]).T # # Perform least squares fit # coefficients, residuals, rank, s = np.linalg.lstsq(X, Y, rcond=None) # # coefficients[0] is the slope, coefficients[1] is the intercept # slope, intercept = coefficients # # slope = slope/scale_x #rescale if X not resaled # print(f"Slope: {slope}, Intercept: {intercept}") # import numpy as np # from scipy.stats import pearsonr # # Calculate the correlation coefficient and p-value # correlation_coefficient, p_value = pearsonr(varx*scale_x, slice_1D) # print(f"Correlation Coefficient: {correlation_coefficient}") # # print(f"P-value: {p_value}") # global label2 # # label2 = label1 + " slope " + str(slope) + " R2 " + str(correlation_coefficient) # label2 = label1 + r"$\mathrm{{{text}}}: {slope:.3e}, R^2: {R2:.2f}".format(text=', slope',slope=slope,R2=correlation_coefficient) + '$' # # print(label1) # # print(label2) # - var: [[x_1D,phi_ele_1D]] # file: poisson_iter # func: plot_1D # labels: [["$x ( \\unit{\\um})$", "$ \\text{Electrical potential} ~ (\\unit{V})$"]] # linestyles: ['(0, (3, 6))' ] #, # # '(3, (3, 6))', #"dashdot" # # '(6, (3, 6))'] #"dotted" #['-'] # ticks: ['[0,20,40,60,80,100]', '[0,20,40,60,80,100]'] # linewidth: 0.5 # # plot_ref: '4* yml["flower"]["physics"]["v_inlet"]*x_1D*scale_x/(mesh["xmax"]-mesh["xmin"])*(1-x_1D*scale_x/(mesh["xmax"]-mesh["xmin"]))' #use "" not '' in '' # macro_file_name: ['file_name+"_mesh"+str(nx)+ ".pdf"', 'file_name+"_mesh"+str(nx)+".svg"'] # macro_slice: "veci(reshape_data(data),nx,ny,field_index)[0,:]" # # macro_show_slice: | # # linewidth_points = 1 # # line, = inset_ax.plot([0, 1], [0.5, 0.5], ls='-',color='r',lw=linewidth_points) # # # shift the object over 2 points, and down 2 points # # dx, dy = 0, -linewidth_points/72. # # offset = transforms.ScaledTranslation(dx, dy, fig.dpi_scale_trans) # # shadow_transform = inset_ax.transData + offset # # inset_ax.text(0.5,0.5, 'Slice', # # va='top', # # ha='center', # # transform = shadow_transform, # # color='r', # # fontsize=fontsize, # # ) # macro: | # X = varx*scale_x # Y = slice_1D # # Add a column of ones to X to account for the intercept # X = np.vstack([X, np.ones(len(X))]).T # # Perform least squares fit # coefficients, residuals, rank, s = np.linalg.lstsq(X, Y, rcond=None) # # coefficients[0] is the slope, coefficients[1] is the intercept # slope, intercept = coefficients # # slope = slope/scale_x #rescale if X not resaled # print(f"Slope: {slope}, Intercept: {intercept}") # import numpy as np # from scipy.stats import pearsonr # # Calculate the correlation coefficient and p-value # correlation_coefficient, p_value = pearsonr(varx*scale_x, slice_1D) # print(f"Correlation Coefficient: {correlation_coefficient}") # # print(f"P-value: {p_value}") # label1 = str(file['poisson_iter'][()]) # global label2 # # label2 = label1 + " slope " + str(slope) + " R2 " + str(correlation_coefficient) # # label2 = label1 + r"$\mathrm{{{text}}}: {slope:.3e}, R^2: {R2:.2f}".format(text=', slope',slope=slope,R2=correlation_coefficient) + '$' # residual = file['residual_electrical_potential'][()] # label2 = label1 + r"$\mathrm{{{text}}}: {slope:.3e}, \mathrm{{{textres}}}: {residual:.3e}".format(text=', slope',slope=slope,R2=correlation_coefficient,textres='res',residual=residual) + '$' # # label2 = label2 + str(file['residual_electrical_potential'][()]) # # print(label1) # # print(label2) # # variation = file['variation_electrical_potential'][()] - var: [[x_1D,phi_ele_1D]] file: phi func: plot_1D labels: [["$x ( \\unit{\\um})$", "$ \\text{Electrical potential} ~ (\\unit{V})$"]] linestyles: ['(0, (3, 6))' ] #, # '(3, (3, 6))', #"dashdot" # '(6, (3, 6))'] #"dotted" #['-'] ticks: ['[0,20,40,60,80,100]', '[0,20,40,60,80,100]'] linewidth: 0.5 # plot_ref: '4* yml["flower"]["physics"]["v_inlet"]*x_1D*scale_x/(mesh["xmax"]-mesh["xmin"])*(1-x_1D*scale_x/(mesh["xmax"]-mesh["xmin"]))' #use "" not '' in '' macro_slice: "veci(reshape_data(data),nx,ny,field_index)[0,:]" add_schematics: True add_schematics_coords: [0,1,0,0.001] schematics_width: 40% schematics_height: 40% schematics_loc: upper left macro_show_slice: | linewidth_points = 1 slice_pos = 0.0 line, = inset_ax.plot([0, 1], [slice_pos, slice_pos], ls='-',color='r',lw=linewidth_points,zorder=10) # shift the object over 2 points, and down 2 points dx, dy = 0, +linewidth_points/72. offset = transforms.ScaledTranslation(dx, dy, fig.dpi_scale_trans) shadow_transform = inset_ax.transData + offset inset_ax.text(0.2,slice_pos, 'Slice', va='bottom', ha='center', transform = shadow_transform, color='r', fontsize=fontsize, ) macro: | X = varx*scale_x Y = slice_1D # Add a column of ones to X to account for the intercept X = np.vstack([X, np.ones(len(X))]).T # Perform least squares fit coefficients, residuals, rank, s = np.linalg.lstsq(X, Y, rcond=None) # coefficients[0] is the slope, coefficients[1] is the intercept slope, intercept = coefficients # slope = slope/scale_x #rescale if X not resaled print(f"Slope: {slope}, Intercept: {intercept}") import numpy as np from scipy.stats import pearsonr # Calculate the correlation coefficient and p-value correlation_coefficient, p_value = pearsonr(varx*scale_x, slice_1D) print(f"Correlation Coefficient: {correlation_coefficient}") # print(f"P-value: {p_value}") global label2 # label2 = label1 + " slope " + str(slope) + " R2 " + str(correlation_coefficient) label2 = label1 + r"$\mathrm{{{text}}}: {slope:.3e}, R^2: {R2:.2f}".format(text=', slope',slope=slope,R2=correlation_coefficient) + '$' # print(label1) # print(label2) # - var: [[y_1D,phi_ele_1D]] # file: phi_wall # func: plot_1D # labels: [["$y ( \\unit{\\um})$", "$ \\text{Electrical potential} ~ (\\unit{V})$"]] # linestyles: ['(0, (3, 6))' ] #, # # '(3, (3, 6))', #"dashdot" # # '(6, (3, 6))'] #"dotted" #['-'] # ticks: ['[0,20,40,60,80,100]', '[0,20,40,60,80,100]'] # linewidth: 0.5 # # plot_ref: '4* yml["flower"]["physics"]["v_inlet"]*x_1D*scale_x/(mesh["xmax"]-mesh["xmin"])*(1-x_1D*scale_x/(mesh["xmax"]-mesh["xmin"]))' #use "" not '' in '' # macro_slice: "vecb_L(reshape_data(data),nx,ny)" #"reshape_data_veci(data,nx,ny,field_index)[:,0]" - var: [[y_1D,phi_ele_1D]] file: phi_wall #_poisson_iter func: plot_1D fontsize: 10 labels: [["$y ( \\unit{\\um})$", "$ \\text{Electrical potential} ~ (\\unit{V})$"]] linestyles: ['(0, (3, 6))' ] #, # '(3, (3, 6))', #"dashdot" # '(6, (3, 6))'] #"dotted" #['-'] ticks: ['[0,20,40,60,80,100]', '[0,20,40,60,80,100]'] linewidth: 0.5 # plot_ref: '4* yml["flower"]["physics"]["v_inlet"]*x_1D*scale_x/(mesh["xmax"]-mesh["xmin"])*(1-x_1D*scale_x/(mesh["xmax"]-mesh["xmin"]))' #use "" not '' in '' # macro_file_name: ['file_name+"_"+str(mesh["nx"])+"_"+plotpar["theme"]+ ".pdf"', 'file_name+"_"+str(mesh["nx"])+ "_"+plotpar["theme"]+".svg"'] macro_file_name: ['file_name+"_"+plotpar["theme"]+ ".pdf"', 'file_name+"_"+plotpar["theme"]+".svg"'] macro_slice: "vecb_L(reshape_data(data),nx,ny)" #"reshape_data_veci(data,nx,ny,field_index)[:,0]" add_schematics: True add_schematics_coords: [0,1,0,0.001] schematics_width: 40% schematics_height: 40% schematics_loc: center left macro_show_slice: | linewidth_points = 1 line, = inset_ax.plot([0, 0], [0, 1], ls='-',color='r',lw=linewidth_points) # shift the object over 2 points, and down 2 points dx, dy = +(linewidth_points/2)/72.,0 offset = transforms.ScaledTranslation(dx, dy, fig.dpi_scale_trans) shadow_transform = inset_ax.transData + offset inset_ax.text(0.0,0.2, 'Slice', va='center', ha='left', transform = shadow_transform, color='r', fontsize=fontsize, ) - var: [[y_1D,concentration_KOH_1DT]] file: concentration_KOH_wall #_poisson_iter func: plot_1D fontsize: 10 labels: [["$y ( \\unit{\\um})$", "$ \\text{Concentration} ~ KOH$" ]] linestyles: ['(0, (3, 6))' ] #, # '(3, (3, 6))', #"dashdot" # '(6, (3, 6))'] #"dotted" #['-'] ticks: ['[0,20,40,60,80,100]', '[0,20,40,60,80,100]'] linewidth: 0.5 # plot_ref: '4* yml["flower"]["physics"]["v_inlet"]*x_1D*scale_x/(mesh["xmax"]-mesh["xmin"])*(1-x_1D*scale_x/(mesh["xmax"]-mesh["xmin"]))' #use "" not '' in '' # macro_file_name: ['file_name+"_"+str(mesh["nx"])+"_"+plotpar["theme"]+ ".pdf"', 'file_name+"_"+str(mesh["nx"])+ "_"+plotpar["theme"]+".svg"'] macro_file_name: ['file_name+"_"+plotpar["theme"]+ ".pdf"', 'file_name+"_"+plotpar["theme"]+".svg"'] macro_slice: "vecb_L(reshape_data(data),nx,ny)" #"reshape_data_veci(data,nx,ny,field_index)[:,0]" add_schematics: True add_schematics_coords: [0,1,0,0.001] schematics_width: 40% schematics_height: 40% schematics_loc: center macro_plot_BC: | inset_ax.text( 0,# xmin/2 0.5, r'$\frac{\partial c_{\ce{KOH}} }{\partial n} = \frac{-i}{2FD}$', fontsize=fontsize,color='w',ha='left',va='center') inset_ax.text(0.65, 0.0, r'$c_{\ce{KOH},0} $', fontsize=fontsize,va='bottom',ha='center',color='w') inset_ax.text(1.0, 0.5, r'$c_{\ce{KOH},0}$', fontsize=fontsize,va='center',ha='right',color='w') inset_ax.text(0.65, 1.0, r'$\frac{\partial c_{\ce{KOH}} }{\partial n} = 0$', fontsize=fontsize,va='top',ha='center',color='w') macro_show_slice: | linewidth_points = 1 line, = inset_ax.plot([0, 0], [0, 1], ls='-',color='r',lw=linewidth_points) # shift the object over 2 points, and down 2 points dx, dy = +(linewidth_points/2)/72.,0 offset = transforms.ScaledTranslation(dx, dy, fig.dpi_scale_trans) shadow_transform = inset_ax.transData + offset inset_ax.text(0.0,0.2, 'Slice', va='center', ha='left', transform = shadow_transform, color='r', fontsize=fontsize, ) - var: [[y_1D,concentration_H2_1DT]] file: concentration_H2_wall #_poisson_iter func: plot_1D fontsize: 10 labels: [["$y ( \\unit{\\um})$", "$ \\text{Concentration} ~ \\ce{H2}$" ]] linestyles: ['(0, (3, 6))' ] #, # '(3, (3, 6))', #"dashdot" # '(6, (3, 6))'] #"dotted" #['-'] ticks: ['[0,20,40,60,80,100]', '[0,20,40,60,80,100]'] linewidth: 0.5 # plot_ref: '4* yml["flower"]["physics"]["v_inlet"]*x_1D*scale_x/(mesh["xmax"]-mesh["xmin"])*(1-x_1D*scale_x/(mesh["xmax"]-mesh["xmin"]))' #use "" not '' in '' # macro_file_name: ['file_name+"_"+str(mesh["nx"])+"_"+plotpar["theme"]+ ".pdf"', 'file_name+"_"+str(mesh["nx"])+ "_"+plotpar["theme"]+".svg"'] macro_file_name: ['file_name+"_"+plotpar["theme"]+ ".pdf"', 'file_name+"_"+plotpar["theme"]+".svg"'] macro_slice: "vecb_L(reshape_data(data),nx,ny)" #"reshape_data_veci(data,nx,ny,field_index)[:,0]" add_schematics: True add_schematics_coords: [0,1,0,0.001] schematics_width: 40% schematics_height: 40% schematics_loc: center macro_plot_BC: | inset_ax.text( 0,# xmin/2 0.5, r'$\frac{\partial c_{\ce{H2}} }{\partial n} = \frac{-i}{2FD}$', fontsize=fontsize,color='w',ha='left',va='center') inset_ax.text(0.65, 0.0, r'$c_{\ce{H2},0} $', fontsize=fontsize,va='bottom',ha='center',color='w') inset_ax.text(1.0, 0.5, r'$c_{\ce{H2},0}$', fontsize=fontsize,va='center',ha='right',color='w') inset_ax.text(0.65, 1.0, r'$\frac{\partial c_{\ce{H2}} }{\partial n} = 0$', fontsize=fontsize,va='top',ha='center',color='w') macro_show_slice: | linewidth_points = 1 line, = inset_ax.plot([0, 0], [0, 1], ls='-',color='r',lw=linewidth_points) # shift the object over 2 points, and down 2 points dx, dy = +(linewidth_points/2)/72.,0 offset = transforms.ScaledTranslation(dx, dy, fig.dpi_scale_trans) shadow_transform = inset_ax.transData + offset inset_ax.text(0.0,0.2, 'Slice', va='center', ha='left', transform = shadow_transform, color='r', fontsize=fontsize, ) # - var: [[y_1D,concentration_KOH_1DT]] # file: concentration_KOH_wall # func: plot_1D # labels: [["$y ( \\unit{\\um})$", "$ \\text{Concentration} ~ KOH$" ]] # linestyles: ['(0, (3, 6))' ] #, # # '(3, (3, 6))', #"dashdot" # # '(6, (3, 6))'] #"dotted" #['-'] # ticks: ['[0,20,40,60,80,100]', '[0,20,40,60,80,100]'] # linewidth: 0.5 # # plot_ref: '4* yml["flower"]["physics"]["v_inlet"]*x_1D*scale_x/(mesh["xmax"]-mesh["xmin"])*(1-x_1D*scale_x/(mesh["xmax"]-mesh["xmin"]))' #use "" not '' in '' # # macro_file_name: ['file_name+"_"+str(mesh["nx"])+"_"+plotpar["theme"]+ ".pdf"', 'file_name+"_"+str(mesh["nx"])+ "_"+plotpar["theme"]+".svg"'] # macro_file_name: ['file_name+"_"+plotpar["theme"]+ ".pdf"', 'file_name+"_"+plotpar["theme"]+".svg"'] # macro_slice: "vecb_L(reshape_data(data),nx,ny)" #"reshape_data_veci(data,nx,ny,field_index)[:,0]" # - var: concentration_H2_1DT # func: plot_python_pdf_full2 # file: concentration_H2_zoom_no_bc # cbarlabel: "$ \\text{Concentration} ~ \\ce{H2}$" # img_format: pdf # isocontour: False # levels: 10 # range: np.linspace(48982,49000.001,11) #49000.001 for rounding errors, otherwise use extend parameter but we cannot check if c>>490000 # plot_bc: #True # plot_grid: True # plot_levelset: True # plot_levelset_segments: False # plot_mode: contourf # xlim: [0,100] # ylim: [0,100] # zoom: [[0,10],[45,55]] #[[1,10],[45,55]] activates BC plot so no longer square # zoom_mode: coord # color_annot_bc: w # color_annot_bulk: w # linewidth: 1 # linestyle: None # macro: | # global label2 # label1 = str(file['poisson_iter'][()]) # label2 = label1 +" "+ r"$\phi_\mathrm{{{text}}}: {val:.3e}".format(text='wall',val=np.mean(slice_1D)) + '$' # print(colored(label2,'red')) # - var: [[poisson_iter,phi_ele_1D]] # file: phi_wall_poisson_iter_log # func: plot_1D # fontsize: 10 # labels: [["Number of iterations", "$|\\phi-\\phi^e|/|\\phi^e|$"]] # linestyles: ['(0, (3, 6))' ] #, # # '(3, (3, 6))', #"dashdot" # # '(6, (3, 6))'] #"dotted" #['-'] # ticks: ['[1,2,3,4,5]', '[0,20,40,60,80,100]'] # linewidth: 0.5 # # plot_ref: '4* yml["flower"]["physics"]["v_inlet"]*x_1D*scale_x/(mesh["xmax"]-mesh["xmin"])*(1-x_1D*scale_x/(mesh["xmax"]-mesh["xmin"]))' #use "" not '' in '' # macro_slice: "abs((np.mean(vecb_L(reshape_data(data),nx,ny))-(-0.011655612832847977)))/0.011655612832847977" # logplot: True # logplot_x: False # logplot_y: True # slope_start: 2 # slope_stop: 10 # legend: False # # add_schematics: True # add_schematics_coords: [0,1,0,0.001] # schematics_width: 40% # schematics_height: 40% # schematics_loc: upper left # macro_show_slice: | # linewidth_points = 1 # line, = inset_ax.plot([0, 0], [0, 1], ls='-',color='r',lw=linewidth_points) # # shift the object over 2 points, and down 2 points # dx, dy = +(linewidth_points/2)/72.,0 # offset = transforms.ScaledTranslation(dx, dy, fig.dpi_scale_trans) # shadow_transform = inset_ax.transData + offset # inset_ax.text(0.0,0.2, 'Slice', # va='center', # ha='left', # transform = shadow_transform, # color='r', # fontsize=fontsize, # ) # macro: | # label1 = str(file['poisson_iter'][()]) # global label2 # label1 = str(file['poisson_iter'][()]) # label2 = label1 +" "+ r"$\phi_\mathrm{{{text}}}: {val:.3e}".format(text='wall',val=np.mean(slice_1D)) + '$' # print(colored(label2,'red')) # label2=None - var: [l1_rel_error,l2_rel_error,linfty_rel_error] func: plot_errors_from_h5 file: errors slope_start: 32 #16 slope_stop: 256 xlim: [1e-3,1e-1] - var: [l1_rel_error_full_cells,l2_rel_error_full_cells,linfty_rel_error_full_cells] func: plot_errors_from_h5 file: errors_full_cells slope_start: 32 #16 slope_stop: 256 xlim: [1e-3,1e-1] - var: [l1_rel_error_partial_cells,l2_rel_error_partial_cells,linfty_rel_error_partial_cells] func: plot_errors_from_h5 file: errors_partial_cells slope_start: 32 #16 slope_stop: 256 xlim: [1e-3,1e-1] - var: radius file: radius slope_start: 1.2e-4 #2e-4 slope_stop: 1e-3 # cbarlabel: H2 #'$Concentration H_2$' # img_format: mp4 # isocontour: False # levels: 10 # plot_bc: True # plot_grid: True # plot_levelset: True # plot_levelset_segments: False # plot_mode: contourf # range: [0,1e-4] # xlim: [0,100] # ylim: [0,100] # linewidth: 1 # linestyle: None # zoom_mode: None # - var: i_current_x # file: current_wall # func: plot_current_wall schematics: # - file: boundary_conditions_diffusion # - file: boundary_conditions_diffusion # func: plot_schematics_full # fig_ratio: 0.5 - file: schematics_full_with_losses func: plot_schematics_full_with_losses fig_ratio: 0.5 - file: schematics_full func: plot_schematics_full font_size: 8 - file: schematics func: plot_schematics # fig_ratio: 0.5 - file: schematics_fluxes func: plot_schematics_fluxes # fig_ratio: 0.5 #TODO call compute_grad_phi_ele! only when needed #TODO call us, vs interpolation only when needed #TODO sparse data (H5 fill value or chunked ?) #TODO LS could be sparse too #TODO struct grid_u.LS[iLS].u[:,:] more difficult than [:,:,:] #TODO fig size pdi: metadata: # type of small values for which PDI keeps a copy nx: int64 #Domain size per proc ny: int64 #Domain size per proc mpi_max_coords_x: int64 #MPI decomposition mpi_max_coords_y: int64 #MPI decomposition mpi_coords_x: int64 #MPI coordinate of the current process mpi_coords_y: int64 #MPI coordinate of the current process time: double #Time nstep: int64 #Index for naming files nb_transported_scalars: int64 nb_levelsets: int64 radius: double intfc_vtx_num: int64 # number of vertices to describe the interface intfc_seg_num: int64 #number of segments vtx_num: int64 # number of vertices for debugging phase-change nb_Navier_slip_BC: int64 #number of Navier BC timestep: double rise_velocity_y: double mean_phase_change_velocity: double cell_length: double data: # values for which PDI does not keep a copy #in Flower: zeros((n.nLS + 1) * g.ny * g.nx + 2 * g.nx + 2 * g.ny) #Field of the current subdomain #Bulk, interface and border u velocity, ... # u grid nx+1, ny # v grid nx, ny # p grid (scalar): nx, ny # In Flower : vec "1D" bulk: 1:nx*ny, ith levelset: ...i*ny*nx # stored in 1D u_1D: { size: '($nb_levelsets + 1) * ($ny) * ($nx+1) + 2 * ($nx+1) + 2 * $ny', type: array, subtype: double } v_1D: { size: '($nb_levelsets + 1) * ($ny+1) * ($nx) + 2 * ($nx) + 2 * ($ny+1)', type: array, subtype: double } p_1D: { size: '($nb_levelsets + 1) * ($ny) * ($nx) + 2 * ($nx) + 2 * ($ny)', type: array, subtype: double } # trans_scal_1D: { size: ['($nb_levelsets + 1) * ($ny) * ($nx) + 2 * ($nx) + 2 * $ny','$nb_transported_scalars'], type: array, subtype: double } trans_scal_1DT: { size: ['$nb_transported_scalars','($nb_levelsets + 1) * ($ny) * ($nx) + 2 * ($nx) + 2 * $ny'], type: array, subtype: double } phi_ele_1D: { size: '($nb_levelsets + 1) * ($ny) * ($nx) + 2 * ($nx) + 2 * $ny', type: array, subtype: double } rhs_1D: { size: '($nb_levelsets + 1) * ($ny) * ($nx) + 2 * ($nx) + 2 * $ny', type: array, subtype: double } # rhs_uv_1D: # size: '($nb_levelsets - $nb_Navier_slip_BC + 1) * ($ny) * ($nx+1) + 2 * ($nx+1) + 2 * $ny + ($nb_levelsets -$nb_Navier_slip_BC + 1) * ($ny+1) * ($nx) + 2 * ($nx) + 2 * ($ny+1) +($nb_Navier_slip_BC + $nb_levelsets + 1) * ($ny) * ($nx) + 2 * ($nx) + 2 * ($ny)' # type: array # subtype: double rhs_uv_1D: { size: '$rhs_uv_len', type: array, subtype: double } vec_1D: { size: '$vec_1D_len', type: array, subtype: double } Auv_colptr_1D: { size: '$Auv_colptr_len', type: array, subtype: int64 } Auv_rowval_1D: { size: '$Auv_rowval_len', type: array, subtype: int64 } Auv_nzval_1D: { size: '$Auv_nzval_len', type: array, subtype: double } Auv_colptr_len: int64 Auv_rowval_len: int64 Auv_nzval_len: int64 Auv_n: int64 Auv_m: int64 rhs_uv_len: int64 vec_1D_len: int64 elec_cond_1D: { size: '($nb_levelsets + 1) * ($ny) * ($nx) + 2 * ($nx) + 2 * $ny', type: array, subtype: double } mesh_x_1D: { size: '($nb_levelsets + 1) * ($ny) * ($nx) + 2 * ($nx) + 2 * $ny', type: array, subtype: double } mesh_y_1D: { size: '($nb_levelsets + 1) * ($ny) * ($nx) + 2 * ($nx) + 2 * $ny', type: array, subtype: double } residual_1D: { size: '($nb_levelsets + 1) * ($ny) * ($nx) + 2 * ($nx) + 2 * $ny', type: array, subtype: double } # for computations, to ignore small cells mask_1D: { size: '($nb_levelsets + 1) * ($ny) * ($nx) + 2 * ($nx) + 2 * $ny', type: array, subtype: double } grad_x_1D: { size: ' ($ny) * ($nx+1) ', type: array, subtype: double } grad_y_1D: { size: ' ($ny+1) * ($nx) ', type: array, subtype: double } #BC BC_phi_ele_left: { size: '$ny', type: array, subtype: double } # trans_scal_1D_H2: { size: '($nb_levelsets + 1) * ($ny) * ($nx) + 2 * ($nx) + 2 * $ny', type: array, subtype: double } # trans_scal_1D_KOH: { size: '($nb_levelsets + 1) * ($ny) * ($nx) + 2 * ($nx) + 2 * $ny', type: array, subtype: double } # trans_scal_1D_H2O: { size: '($nb_levelsets + 1) * ($ny) * ($nx) + 2 * ($nx) + 2 * $ny', type: array, subtype: double } i_current_x: { size: '($ny) * ($nx)', type: array, subtype: double } i_current_y: { size: '($ny) * ($nx)', type: array, subtype: double } i_current_mag: { size: '($ny) * ($nx)', type: array, subtype: double } # stored in 1D: tests l1_rel_error: { size: '$n_tests', type: array, subtype: double } l2_rel_error: { size: '$n_tests', type: array, subtype: double } linfty_rel_error: { size: '$n_tests', type: array, subtype: double } l1_rel_error_full_cells: { size: '$n_tests', type: array, subtype: double } l2_rel_error_full_cells: { size: '$n_tests', type: array, subtype: double } linfty_rel_error_full_cells: { size: '$n_tests', type: array, subtype: double } l1_rel_error_partial_cells: { size: '$n_tests', type: array, subtype: double } l2_rel_error_partial_cells: { size: '$n_tests', type: array, subtype: double } linfty_rel_error_partial_cells: { size: '$n_tests', type: array, subtype: double } nx_list: { size: '$n_tests', type: array, subtype: int64 } cell_volume_list: { size: '$n_tests', type: array, subtype: double } n_tests: int64 domain_length: double min_cell_volume: double # Store segments of interface in 1D vectors intfc_vtx_x: { size: '$intfc_vtx_num', type: array, subtype: double } #TODO vector x y fields all together in size: [ '$intfc_vtx_num', '$nscalars+2' ] intfc_vtx_y: { size: '$intfc_vtx_num', type: array, subtype: double } vtx_x: { size: '$vtx_num', type: array, subtype: double } #TODO vector x y fields all together in size: [ '$intfc_vtx_num', '$nscalars+2' ] vtx_y: { size: '$vtx_num', type: array, subtype: double } intfc_vtx_field: { size: '$intfc_vtx_num', type: array, subtype: double } # intfc_vtx_connectivities: { size: '2*($intfc_vtx_num)', type: array, subtype: int64 } intfc_vtx_connectivities: { size: '2*($intfc_seg_num)', type: array, subtype: int64 } # stored in 2D i_current_x: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain i_current_y: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain i_current_mag: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain levelset_iso: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain levelset_p: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain levelset_u: { size: [ '$nx+1', '$ny' ], type: array, subtype: double } #Field of the current subdomain levelset_v: { size: [ '$nx', '$ny+1' ], type: array, subtype: double } #Field of the current subdomain advection_velocity_p: { size: [ '$nx', '$ny' ], type: array, subtype: double } advection_velocity_u: { size: [ '$nx+1', '$ny' ], type: array, subtype: double } advection_velocity_v: { size: [ '$nx', '$ny+1' ], type: array, subtype: double } advection_velocity_bulk_u: { size: [ '$nx+1', '$ny' ], type: array, subtype: double } advection_velocity_bulk_v: { size: [ '$nx', '$ny+1' ], type: array, subtype: double } advection_velocity_phase_change_u: { size: [ '$nx+1', '$ny' ], type: array, subtype: double } advection_velocity_phase_change_v: { size: [ '$nx', '$ny+1' ], type: array, subtype: double } advection_velocity_before_extension_u: { size: [ '$nx+1', '$ny' ], type: array, subtype: double } advection_velocity_before_extension_v: { size: [ '$nx', '$ny+1' ], type: array, subtype: double } mass_transfer_rate_u: { size: [ '$nx+1', '$ny' ], type: array, subtype: double } mass_transfer_rate_v: { size: [ '$nx', '$ny+1' ], type: array, subtype: double } normal_u: { size: [ '$nx+1', '$ny' ], type: array, subtype: double } normal_v: { size: [ '$nx', '$ny+1' ], type: array, subtype: double } #interpolated advection_velocity_x: { size: [ '$nx', '$ny' ], type: array, subtype: double } advection_velocity_y: { size: [ '$nx', '$ny' ], type: array, subtype: double } advection_velocity_phase_change_x: { size: [ '$nx', '$ny' ], type: array, subtype: double } advection_velocity_phase_change_y: { size: [ '$nx', '$ny' ], type: array, subtype: double } advection_velocity_bulk_x: { size: [ '$nx', '$ny' ], type: array, subtype: double } advection_velocity_bulk_y: { size: [ '$nx', '$ny' ], type: array, subtype: double } advection_velocity_before_extension_x: { size: [ '$nx', '$ny' ], type: array, subtype: double } advection_velocity_before_extension_y: { size: [ '$nx', '$ny' ], type: array, subtype: double } normal_phase_change_velocity: { size: [ '$nx', '$ny' ], type: array, subtype: double } levelset_p_wall: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain velocity_x: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain velocity_y: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain mass_transfer_rate: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain mass_transfer_rate_redistributed: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain mass_transfer_rate_before_redistribution: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain nb_gaz_acceptors: { size: [ '$nx', '$ny' ], type: array, subtype: int64 } #Field of the current subdomain mass_transfer_rate_bulk: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain mass_transfer_rate_border: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain mass_transfer_rate_intfc: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain normal_angle: { size: [ '$nx', '$ny' ], type: array, subtype: double } # angle to compute normal (cos,sin) in 2D normal_velocity_intfc: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain dcap_1: { size: [ '$nx', '$ny'], type: array, subtype: double } #Field of the current subdomain dcap_2: { size: [ '$nx', '$ny'], type: array, subtype: double } #Field of the current subdomain dcap_3: { size: [ '$nx', '$ny'], type: array, subtype: double } #Field of the current subdomain dcap_4: { size: [ '$nx', '$ny'], type: array, subtype: double } #Field of the current subdomain grad_x_coord: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain grad_y_coord: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain grad_x: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain grad_y: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain grad_u: { size: [ '$nx+1', '$ny' ], type: array, subtype: double } #Field of the current subdomain grad_v: { size: [ '$nx', '$ny+1' ], type: array, subtype: double } #Field of the current subdomain grad_pres_y: { size: [ '$nx', '$ny+1' ], type: array, subtype: double } #Field of the current subdomain grav_y: { size: [ '$nx', '$ny+1' ], type: array, subtype: double } #Field of the current subdomain conv_y: { size: [ '$nx', '$ny+1' ], type: array, subtype: double } #Field of the current subdomain velocity_divergence: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain normalise_velocity_divergence: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain rho_one_fluid: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain mu_one_fluid: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain volume_cell: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain volume_fraction: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain smoothed_volume_fraction: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain levelset_surface_tension: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain levelset_heavyside: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain curvature_p: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain curvature_u: { size: [ '$nx+1', '$ny' ], type: array, subtype: double } #Field of the current subdomain curvature_v: { size: [ '$nx', '$ny+1' ], type: array, subtype: double } #Field of the current subdomain volumic_surface_tension_u: { size: [ '$nx+1', '$ny' ], type: array, subtype: double } #Field of the current subdomain volumic_surface_tension_v: { size: [ '$nx', '$ny+1' ], type: array, subtype: double } #Field of the current subdomain viscosity_coeff_for_du_dx: { size: [ '$nx+2', '$ny' ], type: array, subtype: double } #Field of the current subdomain viscosity_coeff_for_dv_dy: { size: [ '$nx', '$ny+2' ], type: array, subtype: double } #Field of the current subdomain viscosity_coeff_for_du_dy: { size: [ '$nx+1', '$ny+1' ], type: array, subtype: double } #Field of the current subdomain viscosity_coeff_for_dv_dx: { size: [ '$nx+1', '$ny+1' ], type: array, subtype: double } #Field of the current subdomain rho_one_fluid_u: { size: [ '$nx+1', '$ny' ], type: array, subtype: double } #Field of the current subdomain rho_one_fluid_v: { size: [ '$nx', '$ny+1' ], type: array, subtype: double } #Field of the current subdomain rhs_uv_v: { size: [ '$nx', '$ny+1' ], type: array, subtype: double } #Field of the current subdomain rhs_uv_divergence: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain mesh_p_x: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain mesh_p_y: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain # stored in 3D dcap: { size: [ 11,'$nx', '$ny'], type: array, subtype: double } #Field of the current subdomain iscal: int64 #Index for naming files poisson_iter: int64 #Index for naming files # Convergence criteria residual_electrical_potential: double variation_electrical_potential: double concentration_check_value: double concentration_check_min: double concentration_check_max: double concentration_check_mean: double conductivity_u: { size: [ '$nx+1', '$ny' ], type: array, subtype: double } #Field of the current subdomain conductivity_v: { size: [ '$nx', '$ny+1' ], type: array, subtype: double } #Field of the current subdomain #chi # chi_1: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain # chi_2: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain # chi_3: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain # To save only bulk field, with u given in Flower # u: { size: [ '$nx+1', '$ny' ], type: array, subtype: double } #Field of the current subdomain # v: { size: [ '$nx', '$ny+1' ], type: array, subtype: double } #Field of the current subdomain # trans_scal: { size: [ '$nx', '$ny','$nb_transported_scalars' ], type: array, subtype: double } #Field of the current subdomain # phi_ele: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain # iu: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain # iv: { size: [ '$nx', '$ny' ], type: array, subtype: double } #Field of the current subdomain plugins: # trace: ~ pycall: # logging: "debug" on_event: # close_pycall: # exec: | # Py_FinalizeEx() # init_PDI: # exec: | # print('\n \033[93m'+'test init PDI','\033[0m') # print('Py_IsInitialized',Py_IsInitialized) # init_PDI2: # exec: | # print('\n \033[93m'+'test init PDI','\033[0m') # print('Py_IsInitialized',Py_IsInitialized) # - exec: print('nb levelsets',nLS) # with: { nLS: $nb_levelsets } check_pressure_velocity_end: with: nx: $nx ny: $ny u_1D: $u_1D v_1D: $v_1D p_1D: $p_1D grad_x: $grad_x grad_y: $grad_y mu_cin1: *mu_cin1 rho1: *rho1 v_inlet: *v_inlet xmin: *mesh_xmin xmax: *mesh_xmax ymin: *mesh_ymin ymax: *mesh_ymax exec: | import numpy as np print('\033[38;5;206m') # print('\033[36m') print('[check_pressure_velocity_end]') print("min(u) {u:.2e} min(v) {v:.2e} min(p) {p:.2e}".format(u=np.min(u_1D),v=np.min(v_1D),p=np.min(p_1D))) print("max(u) {u:.2e} max(v) {v:.2e} max(p) {p:.2e}".format(u=np.max(u_1D),v=np.max(v_1D),p=np.max(p_1D))) print("mean(u) {u:.2e} mean(v) {v:.2e} mean(p) {p:.2e}".format(u=np.mean(u_1D),v=np.mean(v_1D),p=np.mean(p_1D))) # print('\033[0m') print("min(grad_x) {u:.2e} min(grad_y) {v:.2e} ".format(u=np.min(grad_x),v=np.min(grad_y))) print("max(grad_x) {u:.2e} max(grad_y) {v:.2e} ".format(u=np.max(grad_x),v=np.max(grad_y))) from debug_flower import veci field_index = 1 # # slice_1D = veci(v_1D,nx,ny,field_index)[ny//2,:] # # print('slice projection', slice_1D) # # print('len',len(slice_1D)) # print('nx',nx,ny) # slice_1D = veci(v_1D,nx,ny+1,field_index)[(ny+1)//2,:] # print('slice projection', slice_1D) # # print('len',len(slice_1D)) # # Print p and v # # for j in range(0,ny): # # slice_p = veci(p_1D,nx,ny,field_index)[j,:] # # print('Slice p',j,slice_p) # # slice_1D = veci(v_1D,nx,ny+1,field_index)[j,:] # # print('Slice v',j,slice_1D) pressure_equal_on_line = True # Print v for j in range(0,ny): slice_p = veci(p_1D,nx,ny,field_index)[j,:] if (max(slice_p)-min(slice_p))/min(slice_p) > 1.0e-10: pressure_equal_on_line = False print('Slice p',j,max(slice_p)-min(slice_p),(max(slice_p)-min(slice_p))/min(slice_p) ) # print('Slice p',j,slice_p) slice_1D = veci(v_1D,nx,ny+1,field_index)[j,:] # print('Slice v',j,slice_1D) mu1 = mu_cin1 * rho1 # print('mu1',mu1) x_1D = 0 y_1D = 0 # import numpy as np xp = np.zeros(nx) yp = np.zeros(ny) # xp = np.linspace(float(mesh["xmin"]), float(mesh["xmax"]), int(mesh["nx"])) # yp = np.linspace(float(mesh["ymin"]), float(mesh["ymax"]), int(mesh["ny"])) dx = (xmax - xmin) / nx dy = (ymax - ymin) / ny # print('len(xp)',len(xp),len(yp)) xp[0] = xmin + dx/2 yp[0] = ymin + dy/2 for i in range(1,len(xp)): xp[i] = xp[i-1]+dx for i in range(1,len(yp)): yp[i] = yp[i-1]+dx yv = yp + dy / 2 yv = np.insert(yv, 0, yp[0] - dy / 2) # print('xp',xp) #xv too # print('yp',yp) # print('yv',yv) # p from debug_flower import vecb, vecb_B,vecb_T,vecb_L,vecb_R p_top = 0 p_bottom = p_top + 8*mu1/(xmax-xmin)*v_inlet p_along_y = p_bottom + (yv - ymin)*(p_top-p_bottom)/(ymax - ymin) print('p',p_along_y) print('Bottom',vecb_B(p_1D,nx,ny)) print('Top',vecb_T(p_1D,nx,ny)) print('Left',vecb_L(p_1D,nx,ny)) print('Right',vecb_R(p_1D,nx,ny)) # v slice_v_exact = 4* v_inlet * xp /(xmax-xmin)*(1-xp/(xmax-xmin)) print('slice v exact', slice_v_exact) # def Poiseuille(v_inlet,xp_full,xmin,xmax): # slice_v_exact = 4* v_inlet * xp_full /(xmax-xmin)*(1-xp_full/(xmax-xmin)) # return slice_v_exact # xp_full = xmin # print('Poiseuille',xp_full,Poiseuille(v_inlet,xp_full,xmin,xmax)) # xp_full = xmax # print('Poiseuille',xp_full,Poiseuille(v_inlet,xp_full,xmin,xmax)) print('\033[0m') write_initialization: with: { phi_ele_1D_py: $phi_ele_1D, nx_py: $nx, ny_py: $ny, u_1D: $u_1D, v_1D: $v_1D, p_1D: $p_1D} exec: | import numpy as np print('\033[93m') # print('Initialization') print("min(u) {u:.2e} min(v) {v:.2e} min(p) {p:.2e}".format(u=np.min(u_1D),v=np.min(v_1D),p=np.min(p_1D))) print("max(u) {u:.2e} max(v) {v:.2e} max(p) {p:.2e}".format(u=np.max(u_1D),v=np.max(v_1D),p=np.max(p_1D))) print("mean(u) {u:.2e} mean(v) {v:.2e} mean(p) {p:.2e}".format(u=np.mean(u_1D),v=np.mean(v_1D),p=np.mean(p_1D))) # print("min(cH2) %.6e", minscal1L))\t$(@sprintf("min(KOH) %.6e", minscal2L))\t$(@sprintf("min(H2O) %.6e", minscal3L))\n") # print("max(cH2) %.6e", maxscal1L))\t$(@sprintf("max(KOH) %.6e", maxscal2L))\t$(@sprintf("max(H2O) %.6e", maxscal3L))\n") # print("moy(cH2) %.6e", moyscal1L))\t$(@sprintf("moy(KOH) %.6e", moyscal2L))\t$(@sprintf("moy(H2O) %.6e", moyscal3L))\n") print('\033[0m') # write_electrical_conductivity: # with: # elec_cond_1D: $elec_cond_1D # conductivity_u: $conductivity_u # conductivity_v: $conductivity_v # nx_py: $nx # ny_py: $ny # exec: | # from debug_flower import vecb # # print('write_electrical_conductivity') # # print('coeffD borders ',vecb(elec_cond_1D,nx_py,ny_py)) # # print('coeffDu border ',conductivity_u[:,ny_py//2]) # # print('coeffDv border ',conductivity_v[nx_py//2,:]) # # print('coeffDu border ',conductivity_u[ny_py//2,:]) # # print('coeffDv border ',conductivity_v[:,nx_py//2]) print_start_temporal_iteration: with: time: $time nstep: $nstep dcap: $dcap exec: | print('\033[93m') print() print('Iteration {nstep:d} time {time:.2e}'.format(nstep=nstep,time=time)) # print('Check cut-cell operators ',dcap[:,1,1]) print('\033[0m') print_before_prediction: with: { nx: $nx, ny: $ny, u_1D: $u_1D, v_1D: $v_1D, p_1D: $p_1D} exec: | import numpy as np print('\033[36m') print('[Before prediction]') print("min(u) {u:.2e} min(v) {v:.2e} min(p) {p:.2e}".format(u=np.min(u_1D),v=np.min(v_1D),p=np.min(p_1D))) print("max(u) {u:.2e} max(v) {v:.2e} max(p) {p:.2e}".format(u=np.max(u_1D),v=np.max(v_1D),p=np.max(p_1D))) print("mean(u) {u:.2e} mean(v) {v:.2e} mean(p) {p:.2e}".format(u=np.mean(u_1D),v=np.mean(v_1D),p=np.mean(p_1D))) print('\033[0m') # from debug_flower import veci # field_index = 1 # # slice_1D = veci(v_1D,nx,ny,field_index)[ny//2,:] # # print('slice projection', slice_1D) # # print('len',len(slice_1D)) # # print('nx',nx,ny) # slice_1D = veci(v_1D,nx,ny+1,field_index)[(ny+1)//2,:] # print('slice projection', slice_1D) # # print('len',len(slice_1D)) # for j in range(0,ny): # slice_p = veci(p_1D,nx,ny,field_index)[ny-1-j,:] #0: end (top), ny, 1 # print('Slice p',j,slice_p) # # from plot_pdi import plot_profile; plot_profile(x,slice_1D,"Poiseuille_during_projection") print_pressure_gradient_in_prediction: with: grad_x_1D: $grad_x_1D grad_y_1D: $grad_y_1D p_1D: $p_1D nx: $nx ny: $ny # mu_cin1: *mu_cin1 # rho1: *rho1 # v_inlet: *v_inlet xmin: *mesh_xmin xmax: *mesh_xmax ymin: *mesh_ymin ymax: *mesh_ymax exec: | import numpy as np print('\033[36m') print('[print_pressure_gradient_in_prediction]') dx = (xmax-xmin)/ nx volume = dx**2 # grad_x = np.reshape(grad_x_1D, (nx, ny)) # grad_y = np.reshape(grad_y_1D, (nx, ny)) grad_x = np.reshape(grad_x_1D, (nx+1, ny)) grad_y = np.reshape(grad_y_1D, (nx, ny+1)) grad_x = grad_x.transpose() grad_y = grad_y.transpose() for j in range(0,ny): slice_p = grad_x[j,:] #0: end (top), ny, 1 print('grad_x',j,slice_p) for j in range(0,ny+1): slice_p = grad_y[j,:] #0: end (top), ny, 1 print('grad_y',j,slice_p) # # Select only useful part of vector, the actual gradient # grad_x = grad_x[:,1:-1] #size ny, nx-1 # grad_y = grad_y[1:-1,:] #size ny-1, nx print("min(u) {u:.2e} min(v) {v:.2e} min(v)/volume {p:.2e}".format(u=np.min(grad_x),v=np.min(grad_y),p=np.min(grad_y)/volume)) print("max(u) {u:.2e} max(v) {v:.2e} max(v)/volume {p:.2e}".format(u=np.max(grad_x),v=np.max(grad_y),p=np.max(grad_y)/volume)) print("mean(u) {u:.2e} mean(v) {v:.2e} mean(v)/volume {p:.2e}".format(u=np.mean(grad_x),v=np.mean(grad_y),p=np.mean(grad_y)/volume)) # for j in range(0,ny): # slice_p = grad_x[j,:] #0: end (top), ny, 1 # print('grad_x',j,slice_p) # for j in range(0,ny-1): # slice_p = grad_y[j,:] #0: end (top), ny, 1 # print('grad_y',j,slice_p) from debug_flower import vecb, vecb_B, vecb_T, vecb_L,vecb_R print('bottom BC pressure',vecb_B(p_1D,nx,ny)) print('top BC pressure',vecb_T(p_1D,nx,ny)) print('left BC pressure',vecb_L(p_1D,nx,ny)) print('right BC pressure',vecb_R(p_1D,nx,ny)) # print('vecb pressure',vecb(p_1D,nx,ny)) print('\033[0m') print_variables: with: phi_ele_1D_py: $phi_ele_1D nx_py: $nx ny_py: $ny u_1D: $u_1D v_1D: $v_1D p_1D: $p_1D trans_scal_1DT: $trans_scal_1DT nb_transported_scalars: *nb_transported_scalars exec: | import numpy as np print('\033[93m') print('[print_variables]') print("min(u) {u:.2e} min(v) {v:.2e} min(p) {p:.2e}".format(u=np.min(u_1D),v=np.min(v_1D),p=np.min(p_1D))) print("max(u) {u:.2e} max(v) {v:.2e} max(p) {p:.2e}".format(u=np.max(u_1D),v=np.max(v_1D),p=np.max(p_1D))) print("mean(u) {u:.2e} mean(v) {v:.2e} mean(p) {p:.2e}".format(u=np.mean(u_1D),v=np.mean(v_1D),p=np.mean(p_1D))) if nb_transported_scalars>0: print("min(cH2) {cH2:.2e} min(KOH) {KOH:.2e} min(H2O) {H2O:.2e}".format(cH2=np.min(trans_scal_1DT[0,:]),KOH=np.min(trans_scal_1DT[1,:]),H2O=np.min(trans_scal_1DT[2,:]))) print("max(cH2) {cH2:.2e} max(KOH) {KOH:.2e} max(H2O) {H2O:.2e}".format(cH2=np.max(trans_scal_1DT[0,:]),KOH=np.max(trans_scal_1DT[1,:]),H2O=np.max(trans_scal_1DT[2,:]))) print("mean(cH2) {cH2:.2e} mean(KOH) {KOH:.2e} mean(H2O) {H2O:.2e}".format(cH2=np.mean(trans_scal_1DT[0,:]),KOH=np.mean(trans_scal_1DT[1,:]),H2O=np.mean(trans_scal_1DT[2,:]))) print('\033[0m') mesh: with: mesh_x_1D_py: $mesh_x_1D grad_x_coord_py: $grad_x_coord nx_py: $nx ny_py: $ny exec: | from debug_flower import veci # mesh in 1 line in x direction at j = 0 print('\n \033[93m'+'mesh x ',veci(mesh_x_1D_py,nx_py,ny_py,1)[0,:],'\033[0m') print('\n \033[93m'+'corr x ',veci(grad_x_coord_py,nx_py+1,ny_py,1)[0,:],'\033[0m') check_electrical_potential_convergence: with: # BC_phi_ele_left_py: $BC_phi_ele_left residual_py: $residual_1D phi_ele_1D_py: $phi_ele_1D elec_cond_1D_py: $elec_cond_1D rhs_1D: $rhs_1D dcap_1: $dcap_1 # i_current_x_py: $i_current_x nx_py: $nx ny_py: $ny # phi_ele1: $phi_ele1 alpha: *alpha i0: *i0 phi_ele1: *phi_ele1 Faraday: *Faraday Ru: *Ru temperature0: *temperature0 concentration0_KOH: *concentration0_KOH diffusion_coeff_KOH: *diffusion_coeff_KOH mesh_xmax: *mesh_xmax mesh_xmin: *mesh_xmin domain_length: *domain_length # with: { phi_ele_1D_py: $phi_ele_1D, nx_py: $nx, ny_py: $ny} exec: | import numpy as np from debug_flower import butler_grad_phi,vecb_L,butler,veci print('\n \033[93m') print() print('[check_electrical_potential_convergence]') print('phi wall ',vecb_L(phi_ele_1D_py,nx_py,ny_py)) # print('F_residual ',vecb_L(residual_py,nx_py,ny_py)) #array at wall # print('F_residual ',np.min(vecb_L(residual_py,nx_py,ny_py)), np.max(vecb_L(residual_py,nx_py,ny_py))) # print('F_residual bulk', np.min(veci(residual_py,nx_py,ny_py,1)), np.max(veci(residual_py,nx_py,ny_py,1)) ) # print('len(dcap_1[1,:])',len(dcap_1[1,:])) # print('dcap',dcap_1[1,:]) # print('F_residual /dx (homogeneous to a gradient of potential)',vecb_L(residual_py,nx_py,ny_py)/dcap_1[1,:]) # print('F_residual /dx * cond (homogeneous to a gradient of current) ',vecb_L(residual_py,nx_py,ny_py)/dcap_1[1,:]*vecb_L(elec_cond_1D_py,nx_py,ny_py)) # print('F_residual normalized (unitless)',vecb_L(residual_py,nx_py,ny_py)/dcap_1[1,:]/vecb_L(rhs_1D,nx_py,ny_py)) print('F_residual normalized infty',np.max(np.abs(vecb_L(residual_py,nx_py,ny_py)))/np.max(np.abs(vecb_L(rhs_1D,nx_py,ny_py)))) # print('vecb_L(rhs_1D,nx_py,ny_py)',vecb_L(rhs_1D,nx_py,ny_py)) print('\033[0m') warning_scalar_transport: with: iscal: $iscal trans_scal_1DT: $trans_scal_1DT concentration_check_value: $concentration_check_value nb_levelsets: *nb_levelsets nb_transported_scalars: *nb_transported_scalars activate_interface: *activate_interface concentration_check_factor: *concentration_check_factor concentration0_H2: *concentration0_H2 concentration0_KOH: *concentration0_KOH concentration0_H2O: *concentration0_H2O exec: | print('\n \033[91m') print() concentration0 = [concentration0_H2,concentration0_KOH,concentration0_H2O] if iscal == 1: print("[warning_scalar_transport] H2 {iscal:d} {concentration_check_value:.2e} {check_threshold:.2e}".format(iscal=iscal,concentration_check_value=concentration_check_value,check_threshold=concentration0[iscal-1]*(1-concentration_check_factor))) elif iscal == 2: print("[warning_scalar_transport] KOH {iscal:d} {concentration_check_value:.2e} {check_threshold:.2e}".format(iscal=iscal,concentration_check_value=concentration_check_value,check_threshold=concentration0[iscal-1]*(1-concentration_check_factor))) elif iscal == 3: print("[warning_scalar_transport] H2O {iscal:d} {concentration_check_value:.2e} {check_threshold:.2e}".format(iscal=iscal,concentration_check_value=concentration_check_value,check_threshold=concentration0[iscal-1]*(1+concentration_check_factor))) # concentration drop:(minimum(ph.trans_scal[:,:,iscal])-num.concentration0[iscal])/num.concentration0[iscal]*100) print("concentration too low") print('\033[0m') check_scalar_transport_interface: with: iscal: $iscal nb_levelsets: *nb_levelsets nb_transported_scalars: *nb_transported_scalars activate_interface: *activate_interface # concentration_check_value: $concentration_check_value concentration_check_min: $concentration_check_min concentration_check_max: $concentration_check_max concentration_check_mean: $concentration_check_mean trans_scal_1DT: $trans_scal_1DT concentration0_H2: *concentration0_H2 concentration0_KOH: *concentration0_KOH concentration0_H2O: *concentration0_H2O concentration_check_factor: *concentration_check_factor # concentration0: $concentration0 # concentration0: << *concentration0 # <<: *concentration0 # <<: *concentration0 exec: | print('\n \033[92m') print() print('[check_scalar_transport_interface]') concentration0 = np.array([concentration0_H2,concentration0_KOH,concentration0_H2O]) print("[check_scalar_transport_interface] min {concentration_check_min:.2e} max {concentration_check_max:.2e} mean {concentration_check_mean:.2e}".format(concentration_check_min=concentration_check_min,concentration_check_max=concentration_check_max,concentration_check_mean=concentration_check_mean)) concentration_check_value = concentration_check_min if iscal == 1: print("[check_scalar_transport_interface] H2 {iscal:d} {concentration_check_value:.2e} {check_threshold:.2e}".format(iscal=iscal,concentration_check_value=concentration_check_value,check_threshold=concentration0[iscal-1]*(1-concentration_check_factor))) elif iscal == 2: print("[check_scalar_transport_interface] KOH {iscal:d} {concentration_check_value:.2e} {check_threshold:.2e}".format(iscal=iscal,concentration_check_value=concentration_check_value,check_threshold=concentration0[iscal-1]*(1-concentration_check_factor))) elif iscal == 3: print("[check_scalar_transport_interface] H2O {iscal:d} {concentration_check_value:.2e} {check_threshold:.2e}".format(iscal=iscal,concentration_check_value=concentration_check_value,check_threshold=concentration0[iscal-1]*(1+concentration_check_factor))) print('\033[0m') #Checks after resolution if the values are physical check_scalar_transport: with: iscal: $iscal nb_levelsets: *nb_levelsets nb_transported_scalars: *nb_transported_scalars activate_interface: *activate_interface trans_scal_1DT: $trans_scal_1DT # concentration0: $concentration0 # concentration0: *concentration0 # <<: *concentration0 concentration0_H2: *concentration0_H2 concentration0_KOH: *concentration0_KOH concentration0_H2O: *concentration0_H2O mask_1D: $mask_1D #mask containing volumes in bulk, and liquid heights on interfaces, and 0 when a cell is cut # so that small cells are ignored when computing min, max, ... exec: | print('\n \033[92m') print() print('[check_scalar_transport]') print("min(cH2) {cH2:.2e} min(KOH) {KOH:.2e} min(H2O) {H2O:.2e}".format(cH2=np.min(trans_scal_1DT[0,:]),KOH=np.min(trans_scal_1DT[1,:]),H2O=np.min(trans_scal_1DT[2,:]))) print("max(cH2) {cH2:.2e} max(KOH) {KOH:.2e} max(H2O) {H2O:.2e}".format(cH2=np.max(trans_scal_1DT[0,:]),KOH=np.max(trans_scal_1DT[1,:]),H2O=np.max(trans_scal_1DT[2,:]))) print("mean(cH2) {cH2:.2e} mean(KOH) {KOH:.2e} mean(H2O) {H2O:.2e}".format(cH2=np.mean(trans_scal_1DT[0,:]),KOH=np.mean(trans_scal_1DT[1,:]),H2O=np.mean(trans_scal_1DT[2,:]))) print('with mask') scal0 = np.ma.masked_where(mask_1D <= 0.0, trans_scal_1DT[0,:]) scal1 = np.ma.masked_where(mask_1D <= 0.0, trans_scal_1DT[1,:]) scal2 = np.ma.masked_where(mask_1D <= 0.0, trans_scal_1DT[2,:]) print('with mask') print("min(cH2) {cH2:.2e} min(KOH) {KOH:.2e} min(H2O) {H2O:.2e}".format(cH2=np.min(scal0), KOH=np.min(scal1), H2O=np.min(scal2))) print("max(cH2) {cH2:.2e} max(KOH) {KOH:.2e} max(H2O) {H2O:.2e}".format(cH2=np.max(scal0), KOH=np.max(scal1), H2O=np.max(scal2))) print("mean(cH2) {cH2:.2e} mean(KOH) {KOH:.2e} mean(H2O) {H2O:.2e}".format(cH2=np.mean(scal0),KOH=np.mean(scal1),H2O=np.mean(scal2))) concentration0 = np.array([concentration0_H2,concentration0_KOH,concentration0_H2O]) # concentration0 = [concentration0_H2[0],concentration0_KOH[0],concentration0_H2O[0]] # print("concentration0",concentration0) # print('concentration0_H2',concentration0_H2) # try: # print('concentration0_H2',concentration0_H2[0]) # except: # print('no ') # print('types',type(iscal),type(concentration0_H2),type(concentration0)) # # print average value at interface # if activate_interface !=0: # iLS = 1 # # nonzero = mean_intfc_non_null(ph.trans_scalD,iscal,grid,iLS) #Value at interface # index = iLS+1 # num=0 # nonzero = 0.0 # # cf veci @view a[g.ny*g.nx*(p-1)+1:g.ny*g.nx*p] # for scal_intfc in veci(scalD): # if abs(scal_intfc) >0.0: # nonzero += scalD[i,iscal] # num += 1 # if num == 0: # print("no intfc in mean_intfc_non_null") # else: # nonzero /= num # print("Mean value at interface {:.2e}".format(nonzero)) print('\033[0m') check_electrical_potential: with: poisson_iter: $poisson_iter BC_phi_ele_left_py: $BC_phi_ele_left elec_cond_1D_py: $elec_cond_1D phi_ele_1D_py: $phi_ele_1D i_current_x_py: $i_current_x i_current_x: $i_current_x i_current_y: $i_current_y i_current_mag: $i_current_mag nx_py: $nx ny_py: $ny variation_electrical_potential: $variation_electrical_potential residual_electrical_potential: $residual_electrical_potential residual_1D: $residual_1D rhs_1D: $rhs_1D # phi_ele1: $phi_ele1 alpha: *alpha i0: *i0 phi_ele1: *phi_ele1 Faraday: *Faraday Ru: *Ru temperature0: *temperature0 concentration0_KOH: *concentration0_KOH diffusion_coeff_KOH: *diffusion_coeff_KOH mesh_xmax: *mesh_xmax mesh_xmin: *mesh_xmin domain_length: *domain_length # with: { phi_ele_1D_py: $phi_ele_1D, nx_py: $nx, ny_py: $ny} exec: | import numpy as np from debug_flower import butler_grad_phi,vecb_L,butler,veci print('\n \033[93m') print() # print('check_electrical_potential') print('[check_electrical_potential] Poisson iter',poisson_iter,'\033[0m') print("Residual {:.2e} absolute variation {:.2e}".format(residual_electrical_potential,variation_electrical_potential)) # #num.electrical_potential_residual # print('\n \033[93m'+'Pycall ','\033[0m') min_phi = np.min(phi_ele_1D_py) phi = veci(phi_ele_1D_py,nx_py,ny_py,1) # print('\n \033[93m'+'phi ',np.min(phi_ele_1D_py),np.max(phi_ele_1D_py),'\033[0m') # print('\n \033[93m'+'Conductivity min',np.min(elec_cond_1D_py),'max',np.max(elec_cond_1D_py),'\033[0m') residual_electrical_potential_wall = np.max(abs(vecb_L(residual_1D,nx_py,ny_py))) / np.max(abs(vecb_L(rhs_1D,nx_py,ny_py))) residual_electrical_potential_total = np.max(abs(residual_1D)) / np.max(abs(rhs_1D)) print("Residual wall {:.2e} whole {:.2e}".format(residual_electrical_potential_wall,residual_electrical_potential_total)) # print('\n \033[93m'+'BC_phi_ele_left ',np.min(BC_phi_ele_left_py),np.max(BC_phi_ele_left_py),'\033[0m') # print('\n \033[93m'+'i_current_x min ',np.min(i_current_x_py),'max ',np.max(i_current_x_py),'\033[0m') # print('\n \033[93m'+'i_current_x_py ',i_current_x_py[:,ny_py//2],'\033[0m') # print('\n \033[93m'+'phi line ',phi[:,ny_py//2],'\033[0m') # vertical line # print('\n \033[93m'+'phi line ',phi[ny_py//2,:],'\033[0m') #horizontal line # min_phi = np.min(phi_ele_1D_py) # print('\n \033[93m'+'sum ',-i_current_x_py[:,ny_py//2]+butler(min_phi,phi_ele1,Faraday,alpha,Ru,temperature0,i0),'\033[0m') # print('\n \033[93m'+'Convergence Butler-Volmer ',np.max(np.abs(-i_current_x_py[:,ny_py//2]+butler(vecb_L(phi_ele_1D_py,nx_py,ny_py),phi_ele1,Faraday,alpha,Ru,temperature0,i0))),'\033[0m') # print('\n \033[93m'+'ratio ',(-i_current_x_py[:,ny_py//2]+butler(vecb_L(phi_ele_1D_py,nx_py,ny_py),phi_ele1,Faraday,alpha,Ru,temperature0,i0)/butler(0,phi_ele1,Faraday,alpha,Ru,temperature0,i0),phi_ele1,Faraday,alpha,Ru,temperature0,i0),'\033[0m') # print('\n \033[93m'+'sum ',butler(vecb_L(phi_ele_1D_py,nx_py,ny_py),phi_ele1,Faraday,alpha,Ru,temperature0,i0),'\033[0m') # print('\n \033[93m'+'sum ',butler(0,phi_ele1,Faraday,alpha,Ru,temperature0,i0),'\033[0m') # L = mesh_xmax-mesh_xmin # print('\n \033[93m'+'phi ',min_phi,-L*butler_grad_phi(min_phi,phi_ele1,Faraday,alpha,Ru,temperature0,concentration0_KOH,diffusion_coeff_KOH,i0),'\033[0m') # print('\n \033[93m'+'grad phi ',min_phi,butler_grad_phi(min_phi,phi_ele1,Faraday,alpha,Ru,temperature0,concentration0_KOH,diffusion_coeff_KOH,i0),'\033[0m') # print(vecb_L(phi_ele_1D_py,nx_py,ny_py)) # from debug_flower import vecbprint,veci, butler # # vecbprint(phi_ele_1D_py,nx_py,ny_py) # phi = veci(phi_ele_1D_py,nx_py,ny_py,1) # # print(phi[nx_py/2,:]) # # print(phi[:,nx_py/2]) # # a = 0.66 # a = 0.6608349877730476 # L= 1e-4 # npoints=2 # xplot_new = np.linspace(0, L, npoints) # yplot_new = a * (xplot_new / L - 1) print('\033[0m') # print_electrical_potential: # with: # poisson_iter: $poisson_iter # BC_phi_ele_left_py: $BC_phi_ele_left # elec_cond_1D_py: $elec_cond_1D # phi_ele_1D_py: $phi_ele_1D # i_current_x_py: $i_current_x # nx_py: $nx # ny_py: $ny # # variation_electrical_potential: $variation_electrical_potential # # residual_electrical_potential: $residual_electrical_potential # # phi_ele1: $phi_ele1 # alpha: *alpha # i0: *i0 # phi_ele1: *phi_ele1 # Faraday: *Faraday # Ru: *Ru # temperature0: *temperature0 # concentration0_KOH: *concentration0_KOH # diffusion_coeff_KOH: *diffusion_coeff_KOH # mesh_xmax: *mesh_xmax # mesh_xmin: *mesh_xmin # domain_length: *domain_length # # with: { phi_ele_1D_py: $phi_ele_1D, nx_py: $nx, ny_py: $ny} # exec: | # import numpy as np # from debug_flower import butler_grad_phi,vecb_L,butler,veci # print('\n \033[93m') # print() # print('[print_electrical_potential] Poisson iter',poisson_iter,'\033[0m') # # print('\n \033[93m'+'Pycall ','\033[0m') # phi = veci(phi_ele_1D_py,nx_py,ny_py,1) # # print('\n \033[93m'+'phi ',np.min(phi_ele_1D_py),np.max(phi_ele_1D_py),'\033[0m') # print('\n \033[93m'+'Conductivity min',np.min(elec_cond_1D_py),'max',np.max(elec_cond_1D_py),'\033[0m') # # print('\n \033[93m'+'BC_phi_ele_left ',np.min(BC_phi_ele_left_py),np.max(BC_phi_ele_left_py),'\033[0m') # # print('\n \033[93m'+'i_current_x min ',np.min(i_current_x_py),'max ',np.max(i_current_x_py),'\033[0m') # # print('\n \033[93m'+'i_current_x_py ',i_current_x_py[:,ny_py//2],'\033[0m') # # print('\n \033[93m'+'phi line ',phi[:,ny_py//2],'\033[0m') # vertical line # # print('\n \033[93m'+'phi line ',phi[ny_py//2,:],'\033[0m') #horizontal line # # min_phi = np.min(phi_ele_1D_py) # # print('\n \033[93m'+'sum ',-i_current_x_py[:,ny_py//2]+butler(min_phi,phi_ele1,Faraday,alpha,Ru,temperature0,i0),'\033[0m') # # print('\n \033[93m'+'Convergence Butler-Volmer ',np.max(np.abs(-i_current_x_py[:,ny_py//2]+butler(vecb_L(phi_ele_1D_py,nx_py,ny_py),phi_ele1,Faraday,alpha,Ru,temperature0,i0))),'\033[0m') # # print('\n \033[93m'+'ratio ',(-i_current_x_py[:,ny_py//2]+butler(vecb_L(phi_ele_1D_py,nx_py,ny_py),phi_ele1,Faraday,alpha,Ru,temperature0,i0)/butler(0,phi_ele1,Faraday,alpha,Ru,temperature0,i0),phi_ele1,Faraday,alpha,Ru,temperature0,i0),'\033[0m') # # print('\n \033[93m'+'sum ',butler(vecb_L(phi_ele_1D_py,nx_py,ny_py),phi_ele1,Faraday,alpha,Ru,temperature0,i0),'\033[0m') # # print('\n \033[93m'+'sum ',butler(0,phi_ele1,Faraday,alpha,Ru,temperature0,i0),'\033[0m') # # L = mesh_xmax-mesh_xmin # # print('\n \033[93m'+'phi ',min_phi,-L*butler_grad_phi(min_phi,phi_ele1,Faraday,alpha,Ru,temperature0,concentration0_KOH,diffusion_coeff_KOH,i0),'\033[0m') # # print('\n \033[93m'+'grad phi ',min_phi,butler_grad_phi(min_phi,phi_ele1,Faraday,alpha,Ru,temperature0,concentration0_KOH,diffusion_coeff_KOH,i0),'\033[0m') # # print(vecb_L(phi_ele_1D_py,nx_py,ny_py)) # # from debug_flower import vecbprint,veci, butler # # # vecbprint(phi_ele_1D_py,nx_py,ny_py) # # phi = veci(phi_ele_1D_py,nx_py,ny_py,1) # # # print(phi[nx_py/2,:]) # # # print(phi[:,nx_py/2]) # # # a = 0.66 # # a = 0.6608349877730476 # # L= 1e-4 # # npoints=2 # # xplot_new = np.linspace(0, L, npoints) # # yplot_new = a * (xplot_new / L - 1) # # print("Residual {:.2e} absolute variation {:.2e}".format(residual_electrical_potential,variation_electrical_potential)) # # #num.electrical_potential_residual # print('\033[0m') # - exec: import plot_flower; plot_flower.print_bc(phi_ele_1D_py) #TODO bug hdf5 so put debugging functions in debug_flower.py # write_data_elec_ix_iy: # with: # ix: $i_current_x # iy: $i_current_y # exec: | # import numpy as np # print('\n \033[93m') # print('Current i_x {:.2e} i_y {:.2e}'.format(np.max(ix),np.max(iy))) # print('\033[0m') # write_data_elec_imag: # with: { imag: $i_current_mag } # exec: | # import numpy as np # print('\033[93m') # print('Current magnitude {:.2e} '.format( np.max(imag) ) ) # print('\033[0m') write_data_elec_ix_iy: with: ix: $i_current_x iy: $i_current_y imag: $i_current_mag exec: | import numpy as np print('\n \033[93m') print('Current i_x {:.2e} i_y {:.2e} i_mag {:.2e}'.format(np.max(ix),np.max(iy),np.max(imag))) print('\033[0m') # write_data: # - exec: print('Test nstep',nstep_py) # with: { nstep_py: $nstep } # - exec: from debug_flower import vecbprint; vecbprint(p_1D_py,nx_py,ny_py) # with: { p_1D_py: $p_1D, nx_py: $nx, ny_py: $ny} # - exec: import plot_flower; plot_flower.print_bc(p_1D_py) #TODO bug hdf5 so put debugging functions in debug_flower.py # check_concentrations: # - exec: print('Test nstep',nstep_py) # write_scalar_transport: # # CRED = '\033[91m' # # CEND = '\033[0m' # - exec: print('\033[91m Test iscal',iscal_py,'\033[0m') # with: { iscal_py: $iscal } testing: #python event to plot with matplotlib exec: from plot_pdi import plot_bc2; plot_bc2() # write_data: # with: { iter_id: $nstep, source_field: $main_field } # exec: | # import numpy as np # if 0 < iter_id < 4: # transformed_field = np.sqrt(source_field[1:-1,1:-1]) # pdi.expose('transformed_field', transformed_field, pdi.OUT) # mpi: #TODO careful: when to update nstep so that stored in right file with multi expose #TODO careful make first write overwrite so that old data does not remain decl_hdf5: #Writing in hdf5 # - file: results/data_${nstep:08}_${mpi_coords_x:02}_${mpi_coords_y:02}.h5 - file: convergence_Butler.h5 collision_policy: replace #write_into overwrite old file #TODO on_event: convergence_study write: [nx_list,cell_volume_list,l1_rel_error,l2_rel_error,linfty_rel_error,l1_rel_error_full_cells,l2_rel_error_full_cells,linfty_rel_error_full_cells,l1_rel_error_partial_cells,l2_rel_error_partial_cells,linfty_rel_error_partial_cells,min_cell_volume] #domain_length # #write segments of interface # - file: convergence_Poiseuille_${nstep:08}.h5 # collision_policy: write_into # on_event: convergence_study_iter # # write: [intfc_vtx_num,intfc_vtx_x,intfc_vtx_y,intfc_vtx_field,intfc_seg_num,intfc_vtx_connectivities] # write: [nstep,levelset_p,normal_angle,phi_ele_1D,radius,intfc_vtx_num,intfc_vtx_x,intfc_vtx_y,intfc_vtx_field,intfc_seg_num,intfc_vtx_connectivities] - file: flower_${nstep:08}.h5 collision_policy: replace #write_into overwrite old file #TODO on_event: write_initialization # datasets: #Dataset we are writing in: the whole solution # data: # type: array # subtype: double # size: ['$nx*$mpi_max_coords_x', '$ny*$mpi_max_coords_y'] # when: "$nstep = 0" write: [levelset_p,levelset_u,levelset_v,radius,nstep,time,velocity_x,velocity_y, i_current_x, i_current_y ,i_current_mag] #write: [levelset_p,levelset_u,levelset_v,levelset_p_wall,radius] - file: flower_${nstep:08}.h5 collision_policy: replace #replace_and_warn #write_into overwrite old file #TODO on_event: write_data_start_loop # datasets: #Dataset we are writing in: the whole solution # data: # type: array # subtype: double # size: ['$nx*$mpi_max_coords_x', '$ny*$mpi_max_coords_y'] # when: "$nstep%50 = 0" write: [levelset_p,levelset_u,levelset_v,radius,nstep,time] #,normal_angle] - file: flower_${nstep:08}.h5 collision_policy: write_into #write_into overwrite old file #TODO on_event: write_radius write: [radius] - file: flower_${nstep:08}.h5 collision_policy: write_into #write_into overwrite old file #TODO on_event: write_normal_phase_change_velocity write: [normal_phase_change_velocity] #,normal_an - file: flower_${nstep:08}.h5 collision_policy: write_into #write_into overwrite old file #TODO on_event: write_advection_velocity_before_extension write: [advection_velocity_before_extension_u,advection_velocity_before_extension_v] - file: flower_${nstep:08}.h5 collision_policy: write_into #write_into overwrite old file #TODO on_event: write_mass_transfer_rate_uv write: [mass_transfer_rate_u,mass_transfer_rate_v] - file: flower_${nstep:08}.h5 collision_policy: write_into #write_into overwrite old file #TODO on_event: write_normal_uv write: [normal_u,normal_v] - file: flower_${nstep:08}.h5 collision_policy: write_into #write_into overwrite old file #TODO on_event: write_advection_velocity_phase_change write: [advection_velocity_phase_change_u,advection_velocity_phase_change_v] - file: flower_${nstep:08}.h5 collision_policy: write_into #write_into overwrite old file #TODO on_event: write_advection_velocity_bulk write: [advection_velocity_bulk_u,advection_velocity_bulk_v] - file: flower_${nstep:08}.h5 collision_policy: write_into #write_into overwrite old file #TODO on_event: write_advection write: [advection_velocity_u,advection_velocity_v] - file: flower_${nstep:08}.h5 collision_policy: write_into #write_into overwrite old file #TODO on_event: write_interpolated_advection_velocity_before_extension write: [advection_velocity_before_extension_x,advection_velocity_before_extension_y] - file: flower_${nstep:08}.h5 collision_policy: write_into #write_into overwrite old file #TODO on_event: write_interpolated_advection_velocity_phase_change write: [advection_velocity_phase_change_x,advection_velocity_phase_change_y] - file: flower_${nstep:08}.h5 collision_policy: write_into #write_into overwrite old file #TODO on_event: write_interpolated_advection_velocity_bulk write: [advection_velocity_bulk_x,advection_velocity_bulk_y] - file: flower_${nstep:08}.h5 collision_policy: write_into #write_into overwrite old file #TODO on_event: write_interpolated_advection_velocity write: [advection_velocity_x,advection_velocity_y] - file: flower_${nstep:08}.h5 collision_policy: write_into #write_into overwrite old file #TODO on_event: write_advection_bulk_velocity write: [advection_bulk_velocity] #,normal_an - file: flower_${nstep:08}.h5 collision_policy: write_into #write_into overwrite old file #TODO on_event: check_divergence # datasets: #Dataset we are writing in: the whole solution # data: # type: array # subtype: double # size: ['$nx*$mpi_max_coords_x', '$ny*$mpi_max_coords_y'] # when: "$nstep%50 = 0" write: [nstep,velocity_divergence] #,normal_angle] - file: flower_${nstep:08}.h5 collision_policy: write_into #write_into overwrite old file #TODO on_event: print_conservation write: [nstep,conservation] #,normal_angle] # #write segments of interface # - file: flower_${nstep:08}.h5 # collision_policy: write_into # on_event: write_data_start_loop # write: [intfc_vtx_num,intfc_vtx_x,intfc_vtx_y,intfc_vtx_field,intfc_seg_num,intfc_vtx_connectivities] #write mass flux used in phase change - file: flower_${nstep:08}.h5 collision_policy: write_into on_event: write_mass_transfer_rate # datasets: #Dataset we are writing in: the whole solution # data: # type: array # subtype: double # size: ['$nx*$mpi_max_coords_x', '$ny*$mpi_max_coords_y'] # when: #"$nstep%50 = 0" write: [mass_transfer_rate,mass_transfer_rate_bulk,mass_transfer_rate_border,mass_transfer_rate_intfc] - file: flower_${nstep:08}.h5 collision_policy: write_into on_event: write_mass_transfer_rate_redistributed # datasets: #Dataset we are writing in: the whole solution # data: # type: array # subtype: double # size: ['$nx*$mpi_max_coords_x', '$ny*$mpi_max_coords_y'] # when: #"$nstep%50 = 0" write: [mass_transfer_rate,mass_transfer_rate_before_redistribution,nb_gaz_acceptors] - file: flower_${nstep:08}.h5 collision_policy: write_into on_event: write_mass_transfer_rate_only write: [mass_transfer_rate] - file: flower_${nstep:08}.h5 collision_policy: write_into on_event: write_interface_length write: [interface_length] # - file: flower_${nstep:08}.h5 # collision_policy: write_into # on_event: write_electrical_potential # # datasets: #Dataset we are writing in: the whole solution # # data: # # type: array # # subtype: double # # size: ['$nx*$mpi_max_coords_x', '$ny*$mpi_max_coords_y'] # # when: "$iscal = -1" #"$iscal = 1" #"$nstep%50 = 0" # write: [rhs_1D,phi_ele_1D] #,trans_scal_1DT"] #chi_1,chi_2] - file: flower_${nstep:08}.h5 collision_policy: write_into on_event: write_scalar_transport # datasets: #Dataset we are writing in: the whole solution # data: # type: array # subtype: double # size: ['$nx*$mpi_max_coords_x', '$ny*$mpi_max_coords_y'] when: "$iscal = 1" #2 #"$iscal = -1" #"$iscal = 1" #"$nstep%50 = 0" write: [iscal,rhs_1D] #chi_1,chi_2] - file: flower_${nstep:08}.h5 collision_policy: write_into on_event: write_iso write: [levelset_iso] # - file: flower_${nstep:08}.h5 # collision_policy: write_into # on_event: write_capacities # # datasets: #Dataset we are writing in: the whole solution # # data: # # type: array # # subtype: double # # size: ['$nx*$mpi_max_coords_x', '$ny*$mpi_max_coords_y'] # # when: #"$nstep%50 = 0" # write: [dcap] #chi_1,chi_2] - file: flower_${nstep:08}.h5 collision_policy: write_into on_event: write_capacities # datasets: #Dataset we are writing in: the whole solution # data: # type: array # subtype: double # size: ['$nx*$mpi_max_coords_x', '$ny*$mpi_max_coords_y'] # when: #"$nstep%50 = 0" write: [dcap_1,dcap_2,dcap_3,dcap_4] # #write capacities # - file: flower_${nstep:08}.h5 # collision_policy: write_into # on_event: write_capacities # datasets: # a list of datasets inside the file created on first access # #*** define the datasets for main_field # dcap_1: { type: array, subtype: double, size: [1, '$nx', '$ny'] } # write: # dcap: # the name of the data to write # dataset: dcap_1 # memory_selection: #only H2O # size: [1, '$nx', '$ny'] # start: [0,0,0] # - file: flower_${nstep:08}.h5 # collision_policy: write_into # on_event: write_capacities # datasets: # a list of datasets inside the file created on first access # #*** define the datasets for main_field # dcap_2: { type: array, subtype: double, size: [1, '$nx', '$ny'] } # write: # dcap: # the name of the data to write # dataset: dcap_2 # memory_selection: #only H2O # size: [1, '$nx', '$ny'] # start: [1,0,0] # - file: flower_${nstep:08}.h5 # collision_policy: write_into # on_event: write_capacities # datasets: # a list of datasets inside the file created on first access # #*** define the datasets for main_field # dcap_3: { type: array, subtype: double, size: [1, '$nx', '$ny'] } # write: # dcap: # the name of the data to write # dataset: dcap_3 # memory_selection: #only H2O # size: [1, '$nx', '$ny'] # start: [2,0,0] # - file: flower_${nstep:08}.h5 # collision_policy: write_into # on_event: write_capacities # datasets: # a list of datasets inside the file created on first access # #*** define the datasets for main_field # dcap_4: { type: array, subtype: double, size: [1, '$nx', '$ny'] } # write: # dcap: # the name of the data to write # dataset: dcap_4 # memory_selection: #only H2O # size: [1, '$nx', '$ny'] # start: [3,0,0] #write velocity for LS advection - file: flower_${nstep:08}.h5 collision_policy: write_into on_event: write_before_LS_adv # datasets: #Dataset we are writing in: the whole solution # data: # type: array # subtype: double # size: ['$nx*$mpi_max_coords_x', '$ny*$mpi_max_coords_y'] # when: #"$nstep%50 = 0" write: [normal_velocity_intfc] # - file: flower_${nstep:08}.h5 # collision_policy: write_into # on_event: write_data # # datasets: #Dataset we are writing in: the whole solution # # data: # # type: array # # subtype: double # # size: ['$nx*$mpi_max_coords_x', '$ny*$mpi_max_coords_y'] # # when: "$nstep%50 = 0" # write: [u_1D,v_1D,p_1D,time,nstep,velocity_x,velocity_y] #,phi_ele_1D,i_current_x,i_current_y,i_current_mag] # #,trans_scal_1D_H2,trans_scal_1D_KOH,trans_scal_1D_H2O] #,levelset_p,levelset_u,levelset_v] #write_data # - file: mesh_${nx:08}.h5 # collision_policy: write_into # on_event: write_data # # datasets: #Dataset we are writing in: the whole solution # # data: # # type: array # # subtype: double # # size: ['$nx*$mpi_max_coords_x', '$ny*$mpi_max_coords_y'] # # when: "$nstep%50 = 0" # write: [u_1D,v_1D,p_1D,time,nx,velocity_x,velocity_y,phi_ele_1D,levelset_p] #,i_current_x,i_current_y,i_current_mag] # #,trans_scal_1D_H2,trans_scal_1D_KOH,trans_scal_1D_H2O] #,levelset_p,levelset_u,levelset_v] - file: flower_${nstep:08}.h5 collision_policy: write_into on_event: viscosity_coeff_for_du_dx write: [viscosity_coeff_for_du_dx] - file: flower_${nstep:08}.h5 collision_policy: write_into on_event: viscosity_coeff_for_dv_dy write: [viscosity_coeff_for_dv_dy] - file: flower_${nstep:08}.h5 collision_policy: write_into on_event: viscosity_coeff_for_du_dy write: [viscosity_coeff_for_du_dy] - file: flower_${nstep:08}.h5 collision_policy: write_into on_event: viscosity_coeff_for_dv_dx write: [viscosity_coeff_for_dv_dx] - file: flower_${nstep:08}.h5 collision_policy: write_into on_event: write_rhs_uv_v write: [rhs_uv_v] - file: flower_${nstep:08}.h5 collision_policy: write_into on_event: rhs_uv_divergence write: [rhs_uv_divergence] # - file: flower_${nstep:08}.h5 # collision_policy: write_into # on_event: grad_pres_y # write: [grad_pres_y] # - file: flower_${nstep:08}.h5 # collision_policy: write_into # on_event: grav_y # write: [grav_y] - file: flower_${nstep:08}.h5 collision_policy: write_into on_event: conv_y write: [conv_y] - file: flower_${nstep:08}.h5 collision_policy: write_into on_event: write_data # datasets: #Dataset we are writing in: the whole solution # data: # type: array # subtype: double # size: ['$nx*$mpi_max_coords_x', '$ny*$mpi_max_coords_y'] # when: "$nstep%50 = 0" write: [u_1D,v_1D,p_1D,time,timestep,nx,ny,velocity_x,velocity_y,phi_ele_1D,levelset_p,levelset_u,levelset_v] #,i_current_x,i_current_y,i_current_mag] #,trans_scal_1D_H2,trans_scal_1D_KOH,trans_scal_1D_H2O] #,levelset_p,levelset_u,levelset_v] - file: flower_${nstep:08}.h5 collision_policy: write_into on_event: write_velocity_prediction write: [u_prediction,v_prediction] - file: flower_${nstep:08}.h5 collision_policy: write_into on_event: write_one_fluid # datasets: #Dataset we are writing in: the whole solution # data: # type: array # subtype: double # size: ['$nx*$mpi_max_coords_x', '$ny*$mpi_max_coords_y'] # when: "$nstep%50 = 0" write: [nstep,rho_one_fluid,rho_one_fluid_u,rho_one_fluid_v,volume_fraction] #mu_one_fluid - file: flower_${nstep:08}.h5 collision_policy: write_into on_event: write_one_fluid_surface_tension # datasets: #Dataset we are writing in: the whole solution # data: # type: array # subtype: double # size: ['$nx*$mpi_max_coords_x', '$ny*$mpi_max_coords_y'] # when: "$nstep%50 = 0" write: [volume_fraction,grad_u,grad_v,curvature_p,curvature_u,curvature_v,volumic_surface_tension_u,volumic_surface_tension_v,normal_x,normal_y,normal_angle] - file: flower_${nstep:08}.h5 collision_policy: write_into on_event: write_one_fluid_smoothed_volume_fraction write: [smoothed_volume_fraction] - file: flower_${nstep:08}.h5 collision_policy: write_into on_event: write_one_fluid_levelset write: [levelset_surface_tension,levelset_heavyside] - file: poisson_${nx:08}_${poisson_iter:08}.h5 collision_policy: write_into on_event: check_electrical_potential write: [poisson_iter,nx,ny,phi_ele_1D,i_current_x,i_current_y,levelset_p,residual_electrical_potential,variation_electrical_potential] # $BC_phi_ele_left,elec_cond_1D # phi_ele_1D_py: $phi_ele_1D # i_current_x_py: $i_current_x # nx_py: $nx # ny_py: $ny] # write_data_elec_ix_iy # - file: mesh_${nx:08}.h5 #flower_${nstep:08}.h5 # collision_policy: write_into # on_event: write_data_elec_ix_iy # write: [i_current_x,i_current_y,phi_ele_1D] - file: flower_${nstep:08}.h5 collision_policy: write_into on_event: write_data_elec_ix_iy write: [i_current_x,i_current_y,phi_ele_1D] - file: mesh_${nx:08}.h5 #flower_${nstep:08}.h5 collision_policy: write_into on_event: write_data_elec_imag write: [i_current_mag] - file: flower_${nstep:08}.h5 collision_policy: write_into on_event: debug_phase_change write: [vtx_num,vtx_x,vtx_y] #write concentration for H2 only : data selection # - file: flower_${nstep:08}.h5 #Name of the file - file: flower_${nstep:08}.h5 #mesh_${nx:08}.h5 collision_policy: write_into when: "$nb_transported_scalars>0" on_event: write_data datasets: # a list of datasets inside the file created on first access #*** define the datasets for main_field concentration_H2_1DT: { type: array, subtype: double, size: [1,'($nb_levelsets + 1) * ($ny) * ($nx) + 2 * ($nx) + 2 * $ny'] } write: trans_scal_1DT: # the name of the data to write dataset: concentration_H2_1DT memory_selection: #only H2O size: [1,'($nb_levelsets + 1) * ($ny) * ($nx) + 2 * ($nx) + 2 * $ny'] start: [0,0] # - file: flower_${nstep:08}.h5 #Name of the file - file: flower_${nstep:08}.h5 collision_policy: write_into when: "$nb_transported_scalars>0" on_event: write_data datasets: # a list of datasets inside the file created on first access #*** define the datasets for main_field concentration_KOH_1DT: { type: array, subtype: double, size: [1,'($nb_levelsets + 1) * ($ny) * ($nx) + 2 * ($nx) + 2 * $ny'] } write: trans_scal_1DT: # the name of the data to write dataset: concentration_KOH_1DT memory_selection: #only H2O size: [1,'($nb_levelsets + 1) * ($ny) * ($nx) + 2 * ($nx) + 2 * $ny'] start: [1,0] # - file: flower_${nstep:08}.h5 #Name of the file test.h5 - file: flower_${nstep:08}.h5 collision_policy: write_into when: "$nb_transported_scalars>0" on_event: write_data datasets: # a list of datasets inside the file created on first access #*** define the datasets for main_field concentration_H2O_1DT: { type: array, subtype: double, size: [1,'($nb_levelsets + 1) * ($ny) * ($nx) + 2 * ($nx) + 2 * $ny'] } write: trans_scal_1DT: # the name of the data to write dataset: concentration_H2O_1DT memory_selection: #only H2O size: [1,'($nb_levelsets + 1) * ($ny) * ($nx) + 2 * ($nx) + 2 * $ny'] start: [2,0]