MPI-AMRVAC 3.1
The MPI - Adaptive Mesh Refinement - Versatile Advection Code (development version)
Loading...
Searching...
No Matches
mod_initialize_amr.t
Go to the documentation of this file.
2
3 implicit none
4 private
5
6 public :: initlevelone
7 public :: modify_ic
8 public :: initial_condition
10
11
12contains
13
14
15 !> Generate and initialize all grids at the coarsest level (level one)
16 subroutine initlevelone
22
23 integer :: iigrid, igrid{#ifdef evolvingboundary , morton_no}
24
25 levmin=1
26 levmax=1
27
29
30 call getigrids
32
33 ! fill solution space of all root grids
34 do iigrid=1,igridstail; igrid=igrids(iigrid);
35 call alloc_node(igrid)
36 ! in case gradient routine used in initial condition, ensure geometry known
37 call initial_condition(igrid)
38 end do
39 {#IFDEF EVOLVINGBOUNDARY
40 ! mark physical-boundary blocks on space-filling curve
41 do morton_no=morton_start(mype),morton_stop(mype)
42 igrid=sfc_to_igrid(morton_no)
43 if (phyboundblock(igrid)) sfc_phybound(morton_no)=1
44 end do
45 call mpi_allreduce(mpi_in_place,sfc_phybound,nleafs,mpi_integer,&
46 mpi_sum,icomm,ierrmpi)
47 }
48
49 ! update ghost cells
50 call getbc(global_time,0.d0,ps,iwstart,nwgc)
51
52 end subroutine initlevelone
53
54 !> fill in initial condition
55 subroutine initial_condition(igrid)
56 ! Need only to set the mesh values (can leave ghost cells untouched)
59 use mod_comm_lib, only: mpistop
60
61 integer, intent(in) :: igrid
62
63 ! in case gradient routine used in initial condition, ensure geometry known
64 block=>ps(igrid)
65 ^d&dxlevel(^d)=rnode(rpdx^d_,igrid);
66
67 if (.not. associated(usr_init_one_grid)) then
68 call mpistop("usr_init_one_grid not defined")
69 else
70 call usr_init_one_grid(ixg^ll,ixm^ll,ps(igrid)%w,ps(igrid)%x)
71 end if
72
73 end subroutine initial_condition
74
75 !> modify initial condition
76 subroutine modify_ic
79 use mod_comm_lib, only: mpistop
80
81 integer :: iigrid, igrid
82
83 do iigrid=1,igridstail; igrid=igrids(iigrid);
84 block=>ps(igrid)
85 ^d&dxlevel(^d)=rnode(rpdx^d_,igrid);
86
87 if (.not. associated(usr_init_one_grid)) then
88 call mpistop("usr_init_one_grid not defined")
89 else
90 call usr_init_one_grid(ixg^ll,ixm^ll,ps(igrid)%w,ps(igrid)%x)
91 end if
92 end do
93
94 end subroutine modify_ic
95
96 !> improve initial condition after initialization
102 use mod_physics
104
105 logical :: active
106
107 if(associated(usr_improve_initial_condition)) then
109 else if(stagger_grid) then
110 if(associated(usr_init_vector_potential)) then
111 ! re-calculate magnetic field from the vector potential in a
112 ! completely divergency free way for AMR mesh in 3D
113 if(levmax>levmin.and.ndim==3) call recalculateb
114 end if
115 if(slab_uniform.and.associated(phys_clean_divb)) then
116 ! Project out the divB using multigrid poisson solver
117 ! if not initialised from vector potential
118 if(.not.use_multigrid) call mg_setup_multigrid()
119 call phys_clean_divb(global_time,0.d0,active)
120 call getbc(global_time,0.d0,ps,iwstart,nwgc)
121 end if
122 end if
123
124 end subroutine improve_initial_condition
125
126end module mod_initialize_amr
subroutine, public alloc_node(igrid)
allocate arrays on igrid node
subroutine, public mpistop(message)
Exit MPI-AMRVAC with an error message.
subroutine recalculateb
re-calculate the magnetic field from the vector potential in a completely divergency free way
subroutine, public init_forest_root
build root forest
update ghost cells of all blocks including physical boundaries
subroutine getbc(time, qdt, psb, nwstart, nwbc)
do update ghost cells of all blocks including physical boundaries
This module contains definitions of global parameters and variables and some generic functions/subrou...
type(state), pointer block
Block pointer for using one block and its previous state.
double precision global_time
The global simulation time.
integer, parameter ndim
Number of spatial dimensions for grid variables.
logical stagger_grid
True for using stagger grid.
logical, dimension(:), allocatable phyboundblock
True if a block has any physical boundary.
integer icomm
The MPI communicator.
integer mype
The rank of the current MPI task.
double precision, dimension(:), allocatable, parameter d
integer ixm
the mesh range of a physical block without ghost cells
integer ierrmpi
A global MPI error return code.
double precision, dimension(:,:), allocatable rnode
Corner coordinates.
double precision, dimension(^nd) dxlevel
store unstretched cell size of current level
logical use_multigrid
Use multigrid (only available in 2D and 3D)
logical slab_uniform
uniform Cartesian geometry or not (stretched Cartesian)
subroutine, public improve_initial_condition()
improve initial condition after initialization
subroutine, public initlevelone
Generate and initialize all grids at the coarsest level (level one)
subroutine, public modify_ic
modify initial condition
subroutine, public initial_condition(igrid)
fill in initial condition
Module to couple the octree-mg library to AMRVAC. This file uses the VACPP preprocessor,...
subroutine mg_setup_multigrid()
Setup multigrid for usage.
This module defines the procedures of a physics module. It contains function pointers for the various...
Definition mod_physics.t:4
procedure(sub_clean_divb), pointer phys_clean_divb
Definition mod_physics.t:84
Module with all the methods that users can customize in AMRVAC.
procedure(p_no_args), pointer usr_improve_initial_condition
procedure(init_one_grid), pointer usr_init_one_grid
Initialize earch grid block data.
procedure(init_vector_potential), pointer usr_init_vector_potential