solid_cells_ogrid
Module
- ** AUTOMATIC CPARAM.INC GENERATION ************************
Declare (for generation of cparam.inc) the number of f array variables and auxiliary variables added by this module
CPARAM logical, parameter :: lsolid_cells = .true. CPARAM logical, parameter :: lsolid_ogrid = .true.
MAUX CONTRIBUTION 0
New solid cells module Overlapping cylindrical grid (O-grid) around cylinder or sphere, coupled to cartesian grid outside the o-grid by interpolation.
Very fine resolution of boundary layer
Quick access
- Types:
- Variables:
adjust_inear_cart,adjust_inear_cart_glob,adjust_inear_curv,adjust_inear_curv_glob,advance_solid_cells_position,ba,ba_defined,ba_shift,bc_thermo_type,bc_vel_type,boundary_x_10th,boundary_x_6th,boundary_x_8_6th,boundary_x_8th,boundary_x_central,boundconds_x_ogrid,boundconds_y_filter,boundconds_y_ogrid,boundconds_z_ogrid,c_dragx,c_dragx_p,c_dragy,c_dragy_p,c_dragz,c_dragz_p,calc_boundary_velocity,calc_diagnostics_solid,calc_diff_ib,calc_diff_visc_coef_ib,calc_heatcond_constchi_ogrid,calc_pencils_density_ogrid,calc_pencils_energy_ogrid,calc_pencils_eos_ogrid,calc_pencils_grid_ogrid,calc_pencils_hydro_ogrid,calc_pencils_viscosity_ogrid,calc_reaction_rate,calc_solid_cells_chemistry,calculate_shift_matrix,centr_line,char_consumption,charac_len,check_cyl_pos,close_interpolation_method,coefa,coefb,communicate_filter_zones,communicate_ip_cart_to_curv,communicate_ip_curv_to_cart,construct_grid_ogrid,construct_serial_bdry_cartesian,construct_serial_bdry_curv,create_curv_cart_transform,cv,cylinder_theta,cylinder_xvel,cylinder_yvel,del2v_etc_ogrid,denergy_dt_ogrid,dfs,dim_stl,dlnrho_dt_ogrid,dot2_ogrid,drag_coeffs,drag_force_pencils,duu_dt_ogrid,find_closest_wall,find_low_gp_index_bisection,find_near_ind_global_cart,find_near_ind_global_curv,find_near_ind_local_cart,find_near_ind_local_curv,find_point,find_proc_cartesian,find_proc_curvilinear,find_solid_cell_boundaries,find_unit_vectors,fpnearestgrid,fs,gaunoise_ogrid,geometryfile,get_grid_mn_ogrid,get_mu1_full_ib,get_polar_coords,get_polar_coords_2d,get_polar_coords_3d,get_polar_coords_3d_alt,get_xx_ib,heat_cond,ib_nearest_grid,ichemsco,ichemsco2,ichemsn2,ichemso2,idiag_c_dragx,idiag_c_dragx_p,idiag_c_dragy,idiag_c_dragy_p,idiag_c_dragz,idiag_c_dragz_p,idiag_nusselt,ind_global_to_local_cart,ind_global_to_local_curv,ineargridshift,initialize_eos_ogr,initialize_grid_ogrid,initialize_interpolate_points,initialize_pade_filter,initialize_particles_ogrid,initialize_pencils_ogrid,initialize_send_ip_points_alt,input_snap_ogrid,interp_lagrange,interp_point_curv_to_cart_alt,interpolate_linear_ogrid,interpolate_ogrid_near,interpolate_ogrid_near_mom,interpolate_particles_ogrid,interpolate_point,interpolate_point_cart_to_curv,interpolate_point_curv_to_cart,interpolate_pseudocubic,interpolate_pseudoquad,interpolate_quad_ogrid,interpolate_quadratic_sp_og,inverse_grid_ogrid,irhocount,irs,isco,isco2,isn2,iso2,its,ius,ivs,iws,ixs,iys,izs,lcheck_ba,lclose_interpolation,lclose_linear,lclose_quad_rad_inter,lerror_norm,lfull_diff_ib,limit_close_linear,linear_interpolate_cartesian,linear_interpolate_curvilinear,linear_interpolate_ogrid,linear_interpolate_quadratic,lineelement,lloc_c_press_output,lloc_density_output,lloc_nusselt_output,lloc_temp_output,lnointerception,lnusselt_output,loc_coor_utvec,locchemspec_error,locdensity_error,loutput_local_reaction_rate,lpos_advance,lradius_advance,lsco,lsco2,lsecondorder_chem,lsecondorder_rho,lsimple_diff_ib,lsn2,lso2,map_nearest_grid_ogrid,max_items,maxterm,mdot_c_coeffs,mdot_c_pencils,mspecies,n_lines,new_stefan,nforcepoints,nlat,nlong,nobjects,norm_line,nrectangles,nspheres,nsvar,nusselt,nusselt_coeffs,nusselt_pencils,object_skin,objects,osci_a,osci_dir,osci_f,osci_t,output_snap_form_ogrid,output_snap_ogrid,pade_filter,pde_ogrid,poly_interp_cart,poly_interp_curv,pressure0,r_int_outer,r_theta_phi_velocity_in_point,radius_ogrid,read_snap_double_ogrid,read_snap_ogrid,read_snap_single_ogrid,read_snapshot_solid_cells,real_to_index_ogrid,reverse_normal_value,rhosum,rsnap_ogrid,run_tests_ogrid,sc_diags_reductions,sc_init_diag_accum,sc_init_reduc_pointers,scale_stl,scp,set_interpolation_limits,setup_mm_nn_ogrid,solid_ds,solid_dt,solid_flux,solid_object,solid_phi,solid_reactions_intro_time,solid_temp,solid_tempflux,solid_theta,solid_vel,solid_xpos,solid_ypos,solid_zpos,sphere_phi,sphere_temp,sphere_theta,sphere_xpos,sphere_xvel,sphere_ypos,sphere_yvel,sphere_zpos,sphere_zvel,srho,sum_line,svarname,theta_shift,time_step_ogrid,tol_stl,transform_curv_to_cart,tx_stl,ty_stl,u_dot_grad_ogrid,update_ghosts_ogrid,update_ogrid_flow_info,vertex,vs_normal,write_reactions,write_snapshot_solid_cells,wsnap_ogrid,wsnap_solid_cells,xmax_stl,xmin_stl,ymax_stl,ymin_stl- Routines:
calc_diagnostics_solid(),calc_matrix(),close_interpolation(),dsolid_dt(),dsolid_dt_integrate(),find_closest_grid_plane(),find_corner_points(),find_ib_point(),find_ib_point_mir(),find_near_indeces(),find_projection(),find_solid_cell_boundary(),fp_nearest_grid(),freeze_solid_cells(),get_stl_data(),in_solid_cell(),init_solid_cells(),initialize_solid_cells(),interpolate_idw(),interpolate_matrix(),interpolate_particles_ogrid(),is_point_on_line(),map_nearest_grid_ogrid(),output_solid_cells(),pencil_criteria_solid_cells(),read_solid_cells_init_pars(),read_solid_cells_run_pars(),register_solid_cells(),rprint_solid_cells(),sc_diags_reductions(),sc_init_reduc_pointers(),solid_cells_clean_up(),solid_cells_timestep_first(),solid_cells_timestep_second(),time_step_ogrid(),update_solid_cells(),update_solid_cells_pencil(),write_solid_cells_init_pars(),write_solid_cells_run_pars(),wsnap_ogrid()
Needed modules
cdata: $Id$general(keep_compiler_quiet()): $Id$messages: $Id$
Variables
- solid_cells/adjust_inear_cart [private]
- solid_cells/adjust_inear_cart_glob [private]
- solid_cells/adjust_inear_curv [private]
- solid_cells/adjust_inear_curv_glob [private]
- solid_cells/boundary_x_10th [private]
- solid_cells/boundary_x_6th [private]
- solid_cells/boundary_x_8_6th [private]
- solid_cells/boundary_x_8th [private]
- solid_cells/boundary_x_central [private]
- solid_cells/boundconds_x_ogrid [private]
- solid_cells/boundconds_y_filter [private]
- solid_cells/boundconds_y_ogrid [private]
- solid_cells/boundconds_z_ogrid [private]
- solid_cells/calc_heatcond_constchi_ogrid [private]
- solid_cells/calc_pencils_density_ogrid [private]
- solid_cells/calc_pencils_energy_ogrid [private]
- solid_cells/calc_pencils_eos_ogrid [private]
- solid_cells/calc_pencils_grid_ogrid [private]
- solid_cells/calc_pencils_hydro_ogrid [private]
- solid_cells/calc_pencils_viscosity_ogrid [private]
- solid_cells/check_cyl_pos [private]
- solid_cells/communicate_filter_zones [private]
- solid_cells/communicate_ip_cart_to_curv [private]
- solid_cells/communicate_ip_curv_to_cart [private]
- solid_cells/construct_grid_ogrid [private]
- solid_cells/construct_serial_bdry_cartesian [private]
- solid_cells/construct_serial_bdry_curv [private]
- solid_cells/cp [real,private]
- solid_cells/create_curv_cart_transform [private]
- solid_cells/cv [real,private]
- solid_cells/del2v_etc_ogrid [private]
- solid_cells/denergy_dt_ogrid [private]
- solid_cells/dlnrho_dt_ogrid [private]
- solid_cells/dot2_ogrid [private]
- solid_cells/drag_coeffs [private]
- solid_cells/drag_force_pencils [private]
- solid_cells/duu_dt_ogrid [private]
- solid_cells/find_low_gp_index_bisection [private]
- solid_cells/find_near_ind_global_cart [private]
- solid_cells/find_near_ind_global_curv [private]
- solid_cells/find_near_ind_local_cart [private]
- solid_cells/find_near_ind_local_curv [private]
- solid_cells/find_proc_cartesian [private]
- solid_cells/find_proc_curvilinear [private]
- solid_cells/gamma [real,private]
- solid_cells/gamma1 [real,private]
- solid_cells/gamma_m1 [real,private]
- solid_cells/gaunoise_ogrid [private]
- solid_cells/get_grid_mn_ogrid [private]
- solid_cells/get_polar_coords [private]
- solid_cells/get_polar_coords_2d [private]
- solid_cells/get_polar_coords_3d [private]
- solid_cells/get_polar_coords_3d_alt [private]
- solid_cells/ind_global_to_local_cart [private]
- solid_cells/ind_global_to_local_curv [private]
- solid_cells/initialize_eos_ogr [private]
- solid_cells/initialize_grid_ogrid [private]
- solid_cells/initialize_interpolate_points [private]
- solid_cells/initialize_pade_filter [private]
- solid_cells/initialize_particles_ogrid [private]
- solid_cells/initialize_pencils_ogrid [private]
- solid_cells/initialize_send_ip_points_alt [private]
- solid_cells/input_snap_ogrid [private]
- solid_cells/interp_lagrange [private]
- solid_cells/interp_point_curv_to_cart_alt [private]
- solid_cells/interpolate_linear_ogrid [private]
- solid_cells/interpolate_ogrid_near [private]
- solid_cells/interpolate_ogrid_near_mom [private]
- solid_cells/interpolate_point_cart_to_curv [private]
- solid_cells/interpolate_point_curv_to_cart [private]
- solid_cells/interpolate_pseudocubic [private]
- solid_cells/interpolate_pseudoquad [private]
- solid_cells/interpolate_quad_ogrid [private]
- solid_cells/interpolate_quadratic_sp_og [private]
- solid_cells/inverse_grid_ogrid [private]
- solid_cells/linear_interpolate_cartesian [private]
- solid_cells/linear_interpolate_curvilinear [private]
- solid_cells/linear_interpolate_ogrid [private]
- solid_cells/mdot_c_coeffs [private]
- solid_cells/mdot_c_pencils [private]
- solid_cells/nusselt_coeffs [private]
- solid_cells/nusselt_pencils [private]
- solid_cells/output_snap_form_ogrid [private]
- solid_cells/output_snap_ogrid [private]
- solid_cells/pade_filter [private]
- solid_cells/pde_ogrid [private]
- solid_cells/poly_interp_cart [private]
- solid_cells/poly_interp_curv [private]
- solid_cells/r_int_outer [public]
- solid_cells/r_ogrid [public]
- solid_cells/radius_ogrid [private]
- solid_cells/read_snap_double_ogrid [private]
- solid_cells/read_snap_ogrid [private]
- solid_cells/read_snap_single_ogrid [private]
- solid_cells/real_to_index_ogrid [private]
- solid_cells/rsnap_ogrid [private]
- solid_cells/run_tests_ogrid [private]
- solid_cells/sc_init_diag_accum [private]
- solid_cells/set_interpolation_limits [private]
- solid_cells/setup_mm_nn_ogrid [private]
- solid_cells/transform_curv_to_cart [private]
- solid_cells/u_dot_grad_ogrid [private]
- solid_cells/update_ghosts_ogrid [private]
- solid_cells/update_ogrid_flow_info [private]
- solid_cells/write_reactions [private]
- solid_cells/xorigo_ogrid [public]
Subroutines and functions
- subroutine solid_cells/register_solid_cells()
Dummy routine
- Called from:
- subroutine solid_cells/initialize_solid_cells(f)
Define the geometry of the solids and construct the grid around the solid object. Currently only a single solid object with overlapping grid is implemented. Use solid_cells.f90 without overlapping grids if several solids inside the flow domain is desired.
feb–apr-17/Jorgen: Coded
- Parameters:
- Use :
solid_cells_mpicomm(initialize_mpicomm_ogrid()),equationofstate(lpres_grad(),pr_number(),get_gamma_etc()),sharedvariables(get_shared_variable())- Called from:
- Call to:
fatal_error(),warning(),get_gamma_etc(),initialize_eos_chemistry(),initialize_mpicomm_ogrid(),initialize_chemistry_og()
- subroutine solid_cells/init_solid_cells(f)
Initial conditions for cases where we have solid structures in the domain. Typically the flow field is set such that we have no-slip conditions at the solid structure surface.
This routine is adapted to resolve the solid structures with overlapping curvilinear grids. Hence, the f-array, which is the array of flow variables on the carteisian grid, must use potential flow to set the ghost zones that will be set by intepolation for t>0.
Only implemented for a single solid at present!
XX-feb-17/Jorgen: Coded
- Parameters:
- Use :
initcond(gaunoise()),io(wdim()),sub(control_file_exists()),equationofstate(imass(),lpres_grad())- Called from:
- Call to:
fatal_error(),wsnap_ogrid(),control_file_exists(),wdim(),mpiwait(),mpibarrier(),getnu()
- subroutine solid_cells/dsolid_dt(f, df, p)
Dummy routine
- Parameters:
- Called from:
pde(),write_diagnostics(),calc_all_module_diagnostic_auxiliaries(),perform_diagnostics(),finalize_diagnostics()
- subroutine solid_cells/calc_diagnostics_solid(p)
- Parameters:
p [pencil_case,in]
- subroutine solid_cells/rprint_solid_cells(lreset[, lwrite])
Reads and registers print parameters relevant for solid cells
mar-2009/kragset: coded nov-2010/kragset: generalized to include drag in z-direction
- Parameters:
lreset [logical]
lwrite [logical]
- Use :
- Called from:
register_modules(),initialize_modules(),finalize_modules(),choose_pencils(),rprint_list()
- subroutine solid_cells/update_solid_cells(f)
Dummy routine
- subroutine solid_cells/update_solid_cells_pencil(f)
Dummy routine
- Parameters:
- Called from:
pde(),write_diagnostics(),calc_all_module_diagnostic_auxiliaries(),perform_diagnostics(),finalize_diagnostics()
- subroutine solid_cells/freeze_solid_cells(df)
If we are inside the region of interpolation from curvilinear to cartesian grid, the comutations of the f-array are frozen, by setting df=0 for all variables
22-feb-17/Jorgen: Coded
- function solid_cells/in_solid_cell(part_pos, part_rad)
Check if the position px,py,pz is within a solid cylinder
14-feb-17/Jorgen: coded
- Parameters:
part_pos (*) [real,in]
part_rad [real,in]
- Return:
in_solid_cell [logical]
- Called from:
- Call to:
fatal_error(),interpolate_quadratic_spline(),find_star(),calc_bound_coeffs(),construct_serial_arrays(),mpifinalize(),update_ghosts(),wsnap_ogrid(),mpibarrier(),chemspec_normalization_n2_og(),calc_for_chem_mixture_ogrid(),calc_pencils_eos_ogrid_chem(),calc_pencils_chemistry_ogrid(),calc_heter_reaction_term(),dyk_dt_ogrid(),calc_heatcond_chemistry_ogrid(),dot2_mn_ogrid(),gij_ogrid(),div_mn_ogrid(),traceless_strain_ogrid(),multm2_sym_mn_ogrid(),gij_etc_ogrid(),grad_ogrid(),multmv_mn_ogrid(),del2_ogrid(),getnu(),bval_from_neumann_sbp(),bval_from_neumann_bdry5(),set_ghosts_onesided_ogrid(),bval_from_neumann_arr_ogrid(),fatal_error_local(),read_snaptime(),update_snaptime(),log_filename_to_file(),initiate_isendrcv_bdry_ogrid(),finalize_isendrcv_bdry_ogrid(),start_serialize(),end_serialize(),stop_it(),mpiwait(),der2_ogrid(),derij_ogrid(),der_ogrid(),initiate_isendrcv_bdry_filter(),finalize_isendrcv_bdry_filter(),cyclic_parallel_y(),cyclic(),tridag_parallel_x(),tridag()
- subroutine solid_cells/pencil_criteria_solid_cells()
Dummy routine
- Called from:
register_modules(),initialize_modules(),finalize_modules(),choose_pencils()- Call to:
- subroutine solid_cells/solid_cells_clean_up()
Dummy routine
- Called from:
- Call to:
- subroutine solid_cells/solid_cells_timestep_first(f)
08-feb-17/Jorgen: Coded
Only save time, which is the time before timesteps on cartesian grid is performed. Will need this to set timestep of ogrid iterations.
- subroutine solid_cells/solid_cells_timestep_second(f, int_dt, int_ds)
Time evolution of solid_cells variables.
- subroutine solid_cells/read_solid_cells_init_pars(iomsg)
- Parameters:
iomsg [character,out]
- Use :
- subroutine solid_cells/write_solid_cells_init_pars(unit)
- Parameters:
unit [integer,in]
- Called from:
get_datadir(),get_snapdir(),read_all_init_pars(),read_all_run_pars(),get_downpars()
- subroutine solid_cells/read_solid_cells_run_pars(iomsg)
- Parameters:
iomsg [character,out]
- Use :
- subroutine solid_cells/write_solid_cells_run_pars(unit)
- Parameters:
unit [integer,in]
- Called from:
get_datadir(),get_snapdir(),read_all_init_pars(),read_all_run_pars(),get_downpars()
- subroutine solid_cells/close_interpolation(f, ix0_, iy0_, iz0_, iobj, xxp, f_tmp, fluid_point)
- Parameters:
f (,,*,*) [real]
ix0 [integer,in]
iy0 [integer,in]
iz0 [integer,in]
iobj [integer,in]
xxp (3) [real,in]
f_tmp (*) [real,inout]
fluid_point [logical,in]
- subroutine solid_cells/time_step_ogrid(f_cartesian)
Perform time steps on the curvilinear grid, including interpolation of flow variables back and forth between the overlapping grids. The time iterations should equal to one time step on the cartesian grid
07-feb-17/Jorgen+Nils: Adapded from timestep.f90
- Parameters:
- Use :
mpicomm(mpifinalize(),mpiallreduce_max()),boundcond(update_ghosts()),equationofstate(lpres_grad())- Called from:
- Call to:
mpifinalize(),update_ghosts(),wsnap_ogrid(),mpibarrier(),chemspec_normalization_n2_og(),calc_for_chem_mixture_ogrid(),calc_pencils_eos_ogrid_chem(),calc_pencils_chemistry_ogrid(),calc_heter_reaction_term(),dyk_dt_ogrid(),calc_heatcond_chemistry_ogrid(),fatal_error(),dot2_mn_ogrid(),gij_ogrid(),div_mn_ogrid(),traceless_strain_ogrid(),multm2_sym_mn_ogrid(),gij_etc_ogrid(),grad_ogrid(),multmv_mn_ogrid(),del2_ogrid(),getnu()
- subroutine solid_cells/wsnap_ogrid(chsnap[, enum[, flist]])
Write snapshot file of overlapping grid, labelled consecutively if enum==.true. Otherwise just write a snapshot without label (used for var.dat).
21-feb-17/Jorgen: Adapted from snapsjots.f90
- Parameters:
chsnap [character,in]
enum [logical,in,]
flist [character,in,]
- Use :
general(safe_character_assign()),io(log_filename_to_file()),sub(read_snaptime(),update_snaptime())- Called from:
init_solid_cells(),in_solid_cell(),time_step_ogrid(),helper_loop(),reload(),gen_output(),timeloop(),check_tspec_crit_log_interval(),check_tsnap_crit_log_interval(),check_tvid_crit_log_interval(),setup_signal_files(),print_metrics(),run_start()- Call to:
read_snaptime(),update_snaptime(),log_filename_to_file(),initiate_isendrcv_bdry_ogrid(),finalize_isendrcv_bdry_ogrid(),start_serialize(),fatal_error(),end_serialize(),stop_it(),mpiwait(),mpibarrier(),der2_ogrid(),derij_ogrid(),der_ogrid(),gij_ogrid(),gij_etc_ogrid(),initiate_isendrcv_bdry_filter(),finalize_isendrcv_bdry_filter(),cyclic_parallel_y(),cyclic(),tridag_parallel_x(),tridag()
- subroutine solid_cells/map_nearest_grid_ogrid(xxp, ineargridproc_ogrid, rthz)
Find index (ix0, iy0, iz0) of nearest grid point of particle in global coordinates.
- jul/aug-17/Jorgen: Adapted from map_nearest_grid in particles_sub
to work for overlapping grid
- Parameters:
xxp (3) [real,in]
ineargridproc_ogrid (4) [integer,out]
rthz (3) [real,out]
- Call to:
mpiwait(),mpibarrier(),fatal_error(),der2_ogrid(),derij_ogrid(),der_ogrid(),gij_ogrid(),gij_etc_ogrid(),initiate_isendrcv_bdry_filter(),finalize_isendrcv_bdry_filter(),cyclic_parallel_y(),cyclic(),tridag_parallel_x(),tridag()
- subroutine solid_cells/interpolate_particles_ogrid(ivar1, ivar2, xxp, gp, inear_glob)
Use information from the overlapping curvilinear grid to interpolate the velocity of the particle. Must transform to cartesian velocity after interpolation.
Use linear interpolation for all flow variables, except the radial component of the velocity. Quadratic interpolation is used for this components, as this is consistent with how the radial velocity behaves near the cylinder.
31-okt-17/Jorgen: Coded
- Parameters:
ivar1 [integer,in]
ivar2 [integer,in]
xxp (3) [real,in]
gp (1 - ivar1 + ivar2) [real,out]
inear_glob (4) [integer,in]
- Call to:
fatal_error(),der2_ogrid(),derij_ogrid(),der_ogrid(),gij_ogrid(),gij_etc_ogrid(),initiate_isendrcv_bdry_filter(),finalize_isendrcv_bdry_filter(),cyclic_parallel_y(),cyclic(),tridag_parallel_x(),tridag()
- subroutine solid_cells/sc_diags_reductions()
Reduces accumulated diagnostic variables across threads. Only called if using OpenMP Dummy for solid cells ogrid
30-mar-23/TP: coded
- subroutine solid_cells/sc_init_reduc_pointers()
Initiliazes solid_cells specific pointers needed in thread_reductions Dummy for solid cells ogrid
30-mar-23/TP: Coded
- Called from: