|
MPI-AMRVAC
3.0
The MPI - Adaptive Mesh Refinement - Versatile Advection Code
|
module mod_magnetofriction.t Purpose: use magnetofrictional method to relax 3D magnetic field to force-free field 01.04.2016 developed by Chun Xia and Yang Guo 04.10.2017 modulized by Chun Xia Usage: in amrvac.par: &methodlist time_stepper='onestep' ! time marching scheme, or 'twostep','threestep' flux_method=13*'cd4' ! or 'tvdlf', 'fd' limiter= 13*'koren' ! or 'vanleer','cada3','mp5' so on / &meshlist ditregrid=20 ! set iteration interval for adjusting AMR / &mhd_list mhd_magnetofriction=.true. / &mf_list mf_it_max=60000 ! set the maximum iteration number mf_ditsave=20000 ! set iteration interval for data output mf_cc=0.3 ! stability coefficient controls numerical stability mf_cy=0.2 ! frictional velocity coefficient mf_cdivb=0.01 ! divb cleaning coefficient controls diffusion speed of divb / More...
Functions/Subroutines | |
| subroutine | mf_params_read (files) |
| Read this module"s parameters from a file. More... | |
| subroutine | magnetofriction_init () |
| Initialize the module. More... | |
| subroutine | magnetofriction |
| subroutine | mf_velocity_update (dtfff) |
| subroutine | vhat (w, x, ixIL, ixOL, vhatmaxgrid) |
| subroutine | frictional_velocity (w, x, ixIL, ixOL, qvmax, qdt) |
| subroutine | advectmf (idimLIM, qt, qdt) |
| subroutine | advect1mf (method, dtin, dtfactor, idimLIM, qtC, psa, qt, psb) |
| subroutine | process1_gridmf (method, igrid, qdt, ixGL, idimLIM, qtC, wCT, qt, w, wold) |
| subroutine | upwindlrmf (ixIL, ixLL, ixRL, idim, w, wCT, wLC, wRC, x) |
| subroutine | getfluxmf (w, x, ixIL, ixOL, idir, idim, f) |
| subroutine | tvdlfmf (qdt, ixIL, ixOL, idimLIM, qtC, wCT, qt, wnew, wold, fC, dxD, x) |
| subroutine | hancockmf (qdt, ixIL, ixOL, idimLIM, qtC, wCT, qt, wnew, dxD, x) |
| subroutine | fdmf (qdt, ixIL, ixOL, idimLIM, qtC, wCT, qt, wnew, wold, fC, dxD, x) |
| subroutine | reconstructlmf (ixIL, iLL, idims, w, wLC) |
| subroutine | reconstructrmf (ixIL, iLL, idims, w, wRC) |
| subroutine | centdiff4mf (qdt, ixIL, ixOL, idimLIM, qtC, wCT, qt, w, wold, fC, dxD, x) |
| subroutine | getdtfff_courant (w, x, ixIL, ixOL, dtnew) |
| subroutine | getcmaxfff (w, ixIL, ixOL, idims, cmax) |
| subroutine | divbclean (qdt, ixIL, ixOL, wCT, w, x) |
| Clean divergence of magnetic field by Janhunen's and Linde's source terms. More... | |
| subroutine | addgeometrymf (qdt, ixIL, ixOL, wCT, w, x) |
| subroutine | get_current (w, ixIL, ixOL, idirmin, current) |
| Calculate idirmin and the idirmin:3 components of the common current array make sure that dxlevel(^D) is set correctly. More... | |
| subroutine | get_divb (w, ixIL, ixOL, divb) |
| Calculate div B within ixO. More... | |
Variables | |
| double precision | mf_cc |
| stability coefficient controls numerical stability More... | |
| double precision | mf_cy |
| frictional velocity coefficient More... | |
| double precision | mf_cy_max |
| double precision | mf_cdivb |
| divb cleaning coefficient controls diffusion speed of divb More... | |
| double precision | mf_cdivb_max |
| double precision | mf_tvdlfeps |
| TVDLF dissipation coefficient controls the dissipation term. More... | |
| double precision | mf_tvdlfeps_min |
| double precision | tmf |
| time in magnetofriction process More... | |
| double precision | cmax_mype |
| maximal speed for fd scheme More... | |
| double precision | cmax_global |
| maximal speed for fd scheme More... | |
| integer | mf_ditsave |
| integer | mf_it_max |
| integer | mf_it |
| logical | mf_advance |
| logical | fix_conserve_at_step = .true. |
module mod_magnetofriction.t Purpose: use magnetofrictional method to relax 3D magnetic field to force-free field 01.04.2016 developed by Chun Xia and Yang Guo 04.10.2017 modulized by Chun Xia Usage: in amrvac.par: &methodlist time_stepper='onestep' ! time marching scheme, or 'twostep','threestep' flux_method=13*'cd4' ! or 'tvdlf', 'fd' limiter= 13*'koren' ! or 'vanleer','cada3','mp5' so on / &meshlist ditregrid=20 ! set iteration interval for adjusting AMR / &mhd_list mhd_magnetofriction=.true. / &mf_list mf_it_max=60000 ! set the maximum iteration number mf_ditsave=20000 ! set iteration interval for data output mf_cc=0.3 ! stability coefficient controls numerical stability mf_cy=0.2 ! frictional velocity coefficient mf_cdivb=0.01 ! divb cleaning coefficient controls diffusion speed of divb /
| subroutine mod_magnetofriction::addgeometrymf | ( | double precision, intent(in) | qdt, |
| integer, intent(in) | ixI, | ||
| integer, intent(in) | L, | ||
| integer, intent(in) | ixO, | ||
| L, | |||
| double precision, dimension(ixi^s,1:nw), intent(inout) | wCT, | ||
| double precision, dimension(ixi^s,1:nw), intent(inout) | w, | ||
| double precision, dimension(ixi^s,1:ndim), intent(in) | x | ||
| ) |
Definition at line 1318 of file mod_magnetofriction.t.
| subroutine mod_magnetofriction::advect1mf | ( | integer, dimension(nlevelshi), intent(in) | method, |
| double precision, intent(in) | dtin, | ||
| double precision, intent(in) | dtfactor, | ||
| integer, intent(in) | idim, | ||
| integer, intent(in) | LIM, | ||
| double precision, intent(in) | qtC, | ||
| type(state), dimension(max_blocks) | psa, | ||
| double precision, intent(in) | qt, | ||
| type(state), dimension(max_blocks) | psb | ||
| ) |
| subroutine mod_magnetofriction::advectmf | ( | integer, intent(in) | idim, |
| integer, intent(in) | LIM, | ||
| double precision, intent(in) | qt, | ||
| double precision, intent(in) | qdt | ||
| ) |
| subroutine mod_magnetofriction::centdiff4mf | ( | double precision, intent(in) | qdt, |
| integer, intent(in) | ixI, | ||
| integer, intent(in) | L, | ||
| integer, intent(in) | ixO, | ||
| L, | |||
| integer, intent(in) | idim, | ||
| integer, intent(in) | LIM, | ||
| double precision, intent(in) | qtC, | ||
| double precision, dimension(ixi^s,1:nw) | wCT, | ||
| double precision, intent(in) | qt, | ||
| double precision, dimension(ixi^s,1:nw) | w, | ||
| double precision, dimension(ixi^s,1:nw) | wold, | ||
| double precision, dimension(ixi^s,1:ndir,1:ndim) | fC, | ||
| double precision, intent(in) | dx, | ||
| integer, intent(in) | D, | ||
| double precision, dimension(ixi^s,1:ndim), intent(in) | x | ||
| ) |
| subroutine mod_magnetofriction::divbclean | ( | double precision, intent(in) | qdt, |
| integer, intent(in) | ixI, | ||
| integer, intent(in) | L, | ||
| integer, intent(in) | ixO, | ||
| L, | |||
| double precision, dimension(ixi^s,1:nw), intent(in) | wCT, | ||
| double precision, dimension(ixi^s,1:nw), intent(inout) | w, | ||
| double precision, dimension(ixi^s,1:ndim), intent(in) | x | ||
| ) |
Clean divergence of magnetic field by Janhunen's and Linde's source terms.
Definition at line 1279 of file mod_magnetofriction.t.

| subroutine mod_magnetofriction::fdmf | ( | double precision, intent(in) | qdt, |
| integer, intent(in) | ixI, | ||
| integer, intent(in) | L, | ||
| integer, intent(in) | ixO, | ||
| L, | |||
| integer, intent(in) | idim, | ||
| integer, intent(in) | LIM, | ||
| double precision, intent(in) | qtC, | ||
| double precision, dimension(ixi^s,1:nw), intent(inout) | wCT, | ||
| double precision, intent(in) | qt, | ||
| double precision, dimension(ixi^s,1:nw), intent(inout) | wnew, | ||
| double precision, dimension(ixi^s,1:nw), intent(inout) | wold, | ||
| double precision, dimension(ixi^s,1:ndir,1:ndim), intent(out) | fC, | ||
| double precision, intent(in) | dx, | ||
| double precision, intent(in) | D, | ||
| double precision, dimension(ixi^s,1:ndim), intent(in) | x | ||
| ) |
| subroutine mod_magnetofriction::frictional_velocity | ( | double precision, dimension(ixi^s,1:nw), intent(inout) | w, |
| double precision, dimension(ixi^s,1:ndim), intent(in) | x, | ||
| integer, intent(in) | ixI, | ||
| integer, intent(in) | L, | ||
| integer, intent(in) | ixO, | ||
| L, | |||
| double precision, intent(in) | qvmax, | ||
| double precision, intent(in) | qdt | ||
| ) |
Definition at line 548 of file mod_magnetofriction.t.
| subroutine mod_magnetofriction::get_current | ( | double precision, dimension(ixi^s,1:nw) | w, |
| integer | ixI, | ||
| integer | L, | ||
| integer | ixO, | ||
| L, | |||
| integer | idirmin, | ||
| double precision, dimension(ixi^s,7-2*ndir:3) | current | ||
| ) |
Calculate idirmin and the idirmin:3 components of the common current array make sure that dxlevel(^D) is set correctly.
Definition at line 1380 of file mod_magnetofriction.t.

| subroutine mod_magnetofriction::get_divb | ( | double precision, dimension(ixi^s,1:nw), intent(in) | w, |
| integer, intent(in) | ixI, | ||
| integer, intent(in) | L, | ||
| integer, intent(in) | ixO, | ||
| L, | |||
| double precision, dimension(ixi^s) | divb | ||
| ) |
Calculate div B within ixO.
Definition at line 1404 of file mod_magnetofriction.t.

| subroutine mod_magnetofriction::getcmaxfff | ( | double precision, dimension(ixi^s,1:nw), intent(in) | w, |
| integer, intent(in) | ixI, | ||
| integer, intent(in) | L, | ||
| integer, intent(in) | ixO, | ||
| L, | |||
| integer, intent(in) | idims, | ||
| double precision, dimension(ixi^s), intent(out) | cmax | ||
| ) |
Definition at line 1260 of file mod_magnetofriction.t.
| subroutine mod_magnetofriction::getdtfff_courant | ( | double precision, dimension(ixi^s,1:nw), intent(inout) | w, |
| double precision, dimension(ixi^s,1:ndim), intent(in) | x, | ||
| integer, intent(in) | ixI, | ||
| integer, intent(in) | L, | ||
| integer, intent(in) | ixO, | ||
| L, | |||
| double precision, intent(inout) | dtnew | ||
| ) |
| subroutine mod_magnetofriction::getfluxmf | ( | double precision, dimension(ixi^s,nw), intent(in) | w, |
| double precision, dimension(ixi^s,1:ndim), intent(in) | x, | ||
| integer, intent(in) | ixI, | ||
| integer, intent(in) | L, | ||
| integer, intent(in) | ixO, | ||
| L, | |||
| integer, intent(in) | idir, | ||
| integer, intent(in) | idim, | ||
| double precision, dimension(ixi^s), intent(out) | f | ||
| ) |
Definition at line 823 of file mod_magnetofriction.t.
| subroutine mod_magnetofriction::hancockmf | ( | double precision, intent(in) | qdt, |
| integer, intent(in) | ixI, | ||
| integer, intent(in) | L, | ||
| integer, intent(in) | ixO, | ||
| L, | |||
| integer, intent(in) | idim, | ||
| integer, intent(in) | LIM, | ||
| double precision, intent(in) | qtC, | ||
| double precision, dimension(ixi^s,1:nw), intent(inout) | wCT, | ||
| double precision, intent(in) | qt, | ||
| double precision, dimension(ixi^s,1:nw), intent(inout) | wnew, | ||
| double precision, intent(in) | dx, | ||
| double precision, intent(in) | D, | ||
| double precision, dimension(ixi^s,1:ndim), intent(in) | x | ||
| ) |
| subroutine mod_magnetofriction::magnetofriction |
| subroutine mod_magnetofriction::magnetofriction_init |
Initialize the module.
Definition at line 78 of file mod_magnetofriction.t.

| subroutine mod_magnetofriction::mf_params_read | ( | character(len=*), dimension(:), intent(in) | files | ) |
Read this module"s parameters from a file.
Definition at line 61 of file mod_magnetofriction.t.
| subroutine mod_magnetofriction::mf_velocity_update | ( | double precision, intent(in) | dtfff | ) |
| subroutine mod_magnetofriction::process1_gridmf | ( | integer, intent(in) | method, |
| integer, intent(in) | igrid, | ||
| double precision, intent(in) | qdt, | ||
| integer, intent(in) | ixG, | ||
| integer, intent(in) | L, | ||
| integer, intent(in) | idim, | ||
| integer, intent(in) | LIM, | ||
| double precision, intent(in) | qtC, | ||
| double precision, dimension(ixg^s,1:nw) | wCT, | ||
| double precision, intent(in) | qt, | ||
| double precision, dimension(ixg^s,1:nw) | w, | ||
| double precision, dimension(ixg^s,1:nw) | wold | ||
| ) |
| subroutine mod_magnetofriction::reconstructlmf | ( | integer, intent(in) | ixI, |
| integer, intent(in) | L, | ||
| integer, intent(in) | iL, | ||
| L, | |||
| integer, intent(in) | idims, | ||
| double precision, dimension(ixi^s,1:nw), intent(in) | w, | ||
| double precision, dimension(ixi^s,1:nw), intent(out) | wLC | ||
| ) |
| subroutine mod_magnetofriction::reconstructrmf | ( | integer, intent(in) | ixI, |
| integer, intent(in) | L, | ||
| integer, intent(in) | iL, | ||
| L, | |||
| integer, intent(in) | idims, | ||
| double precision, dimension(ixi^s,1:nw), intent(in) | w, | ||
| double precision, dimension(ixi^s,1:nw), intent(out) | wRC | ||
| ) |
| subroutine mod_magnetofriction::tvdlfmf | ( | double precision, intent(in) | qdt, |
| integer, intent(in) | ixI, | ||
| integer, intent(in) | L, | ||
| integer, intent(in) | ixO, | ||
| L, | |||
| integer, intent(in) | idim, | ||
| integer, intent(in) | LIM, | ||
| double precision, intent(in) | qtC, | ||
| double precision, dimension(ixi^s,1:nw) | wCT, | ||
| double precision, intent(in) | qt, | ||
| double precision, dimension(ixi^s,1:nw) | wnew, | ||
| double precision, dimension(ixi^s,1:nw) | wold, | ||
| double precision, dimension(ixi^s,1:ndir,1:ndim) | fC, | ||
| double precision, intent(in) | dx, | ||
| double precision, intent(in) | D, | ||
| double precision, dimension(ixi^s,1:ndim), intent(in) | x | ||
| ) |
| subroutine mod_magnetofriction::upwindlrmf | ( | integer, intent(in) | ixI, |
| integer, intent(in) | L, | ||
| integer, intent(in) | ixL, | ||
| L, | |||
| integer, intent(in) | ixR, | ||
| L, | |||
| integer, intent(in) | idim, | ||
| double precision, dimension(ixi^s,1:nw) | w, | ||
| double precision, dimension(ixi^s,1:nw) | wCT, | ||
| double precision, dimension(ixi^s,1:nw) | wLC, | ||
| double precision, dimension(ixi^s,1:nw) | wRC, | ||
| double precision, dimension(ixi^s,1:ndim) | x | ||
| ) |
| subroutine mod_magnetofriction::vhat | ( | double precision, dimension(ixi^s,nw), intent(inout) | w, |
| double precision, dimension(ixi^s,1:ndim), intent(in) | x, | ||
| integer, intent(in) | ixI, | ||
| integer, intent(in) | L, | ||
| integer, intent(in) | ixO, | ||
| L, | |||
| double precision, intent(out) | vhatmaxgrid | ||
| ) |
| double precision mod_magnetofriction::cmax_global |
maximal speed for fd scheme
Definition at line 42 of file mod_magnetofriction.t.
| double precision mod_magnetofriction::cmax_mype |
maximal speed for fd scheme
Definition at line 40 of file mod_magnetofriction.t.
| logical mod_magnetofriction::fix_conserve_at_step = .true. |
Definition at line 57 of file mod_magnetofriction.t.
| logical mod_magnetofriction::mf_advance |
Definition at line 56 of file mod_magnetofriction.t.
| double precision mod_magnetofriction::mf_cc |
stability coefficient controls numerical stability
Definition at line 30 of file mod_magnetofriction.t.
| double precision mod_magnetofriction::mf_cdivb |
divb cleaning coefficient controls diffusion speed of divb
Definition at line 34 of file mod_magnetofriction.t.
| double precision mod_magnetofriction::mf_cdivb_max |
Definition at line 34 of file mod_magnetofriction.t.
| double precision mod_magnetofriction::mf_cy |
frictional velocity coefficient
Definition at line 32 of file mod_magnetofriction.t.
| double precision mod_magnetofriction::mf_cy_max |
Definition at line 32 of file mod_magnetofriction.t.
| integer mod_magnetofriction::mf_ditsave |
Definition at line 53 of file mod_magnetofriction.t.
| integer mod_magnetofriction::mf_it |
Definition at line 55 of file mod_magnetofriction.t.
| integer mod_magnetofriction::mf_it_max |
Definition at line 54 of file mod_magnetofriction.t.
| double precision mod_magnetofriction::mf_tvdlfeps |
TVDLF dissipation coefficient controls the dissipation term.
Definition at line 36 of file mod_magnetofriction.t.
| double precision mod_magnetofriction::mf_tvdlfeps_min |
Definition at line 36 of file mod_magnetofriction.t.
| double precision mod_magnetofriction::tmf |
time in magnetofriction process
Definition at line 38 of file mod_magnetofriction.t.