module params_brag_numdiss_m !! Parameters for the BRAGINSKII model related with numerical dissipation use precision_grillix_m, only : GP, GP_NAN use error_handling_grillix_m, only: handle_error use status_codes_grillix_m, only : GRILLIX_ERR_NAMELIST use screen_io_m, only : get_stdout implicit none logical, protected :: perpdiss_exclude_buffer !! If true, applies an envelope function !! that excludes the buffer region from the dissipation operator integer, protected :: perpdiss_order_ne = 1 !! Order of (Hyper)diffusion !! acting on electron density real(GP), protected :: perpdiss_coeff_ne = 0.0_GP !! Perpendicular (Hyper)viscosity coefficent !! acting on electron density integer, protected :: perpdiss_order_vort = 1 !! Order of (Hyper)diffusion acting on vorticity real(GP), protected :: perpdiss_coeff_vort = 0.0_GP !! Perpendicular (Hyper)viscosity coefficent !! acting on vorticity integer, protected :: perpdiss_order_te = 1 !! Order of (Hyper)diffusion !! acting on electron temperature real(GP), protected :: perpdiss_coeff_te = 0.0_GP !! Perpendicular (Hyper)viscosity coefficent !! acting on electron temperature integer, protected :: perpdiss_order_pe = 1 !! Order of (Hyper)diffusion !! acting on electron pressure real(GP), protected :: perpdiss_coeff_pe = 0.0_GP !! Perpendicular (Hyper)viscosity coefficent !! acting on electron pressure integer, protected :: perpdiss_order_ti = 1 !! Order of (Hyper)diffusion !! acting on ion temperature real(GP), protected :: perpdiss_coeff_ti = 0.0_GP !! Perpendicular (Hyper)viscosity coefficent !! acting on ion temperature integer, protected :: perpdiss_order_pi = 1 !! Order of (Hyper)diffusion !! acting on ion pressure real(GP), protected :: perpdiss_coeff_pi = 0.0_GP !! Perpendicular (Hyper)viscosity coefficent !! acting on ion pressure integer, protected :: perpdiss_order_upar = 1 !! Order of (Hyper)diffusion !! acting on parallel velocity real(GP), protected :: perpdiss_coeff_upar = 0.0_GP !! Perpendicular (Hyper)viscosity coefficent !! acting on parallel velocity integer, protected :: perpdiss_order_ohm = 1 !! Order of (Hyper)diffusion acting in Ohm's law real(GP), protected :: perpdiss_coeff_ohm = 0.0_GP !! Perpendicular (Hyper)viscosity coefficent !! acting on Ohm's law real(GP), protected :: pardiss_coeff_ne = 0.0_GP !! Parallel (numerical) diffusion coefficent !! acting on electron density real(GP), protected :: pardiss_coeff_vort = 0.0_GP !! Parallel (numerical) diffusion coefficent !! acting on vorticity real(GP), protected :: pardiss_coeff_ohm = 0.0_GP !! Parallel (numerical) diffusion coefficent !! acting in Ohm's law public :: read_params_brag_numdiss public :: write_params_brag_numdiss namelist / brag_numdiss / & perpdiss_exclude_buffer, & perpdiss_order_ne, & perpdiss_order_vort, & perpdiss_order_te, & perpdiss_order_ti, & perpdiss_order_pe, & perpdiss_order_pi, & perpdiss_order_upar, & perpdiss_order_ohm, & perpdiss_coeff_ne, & perpdiss_coeff_vort, & perpdiss_coeff_te, & perpdiss_coeff_ti, & perpdiss_coeff_pe, & perpdiss_coeff_pi, & perpdiss_coeff_upar, & perpdiss_coeff_ohm, & pardiss_coeff_ne, & pardiss_coeff_vort, & pardiss_coeff_ohm private brag_numdiss contains subroutine read_params_brag_numdiss(filename) !! Reads parameters related with brag_numdiss character(len=*), intent(in) :: filename !! Filename, to read from integer :: io_unit, io_error character(len=256) :: io_errmsg open(newunit=io_unit, file=filename, status='old', action='read', & iostat=io_error, iomsg=io_errmsg) if (io_error /= 0) then call handle_error(io_errmsg, GRILLIX_ERR_NAMELIST, & __LINE__, __FILE__) endif read(io_unit, nml=brag_numdiss, iostat=io_error, iomsg=io_errmsg) if (io_error /= 0) then call handle_error(io_errmsg, GRILLIX_ERR_NAMELIST, & __LINE__, __FILE__) endif close(io_unit) end subroutine subroutine write_params_brag_numdiss(filename) !! Reads parameters related with brag_numdiss character(len=*), intent(in), optional :: filename !! If present, filename where params are written to, !! if not present, writes to screen integer :: io_unit, io_error character(len=256) :: io_errmsg if (present(filename)) then open(newunit=io_unit, file=filename, status='unknown', & access='append', action='write', & iostat=io_error, iomsg=io_errmsg ) if (io_error /= 0) then call handle_error(io_errmsg, GRILLIX_ERR_NAMELIST, & __LINE__, __FILE__) endif else io_unit = get_stdout() endif write(io_unit, nml=brag_numdiss, iostat=io_error, iomsg=io_errmsg) if (io_error /= 0) then call handle_error(io_errmsg, GRILLIX_ERR_NAMELIST, & __LINE__, __FILE__) endif if (present(filename)) then close(io_unit) endif end subroutine end module