[FLASH-USERS] MHD (8wave & USM): Refinement region boundaries - spurious waves when B field is oblique to jumps in refinement.
Jonathan Thurgood
jonathan.thurgood at northumbria.ac.uk
Thu May 19 06:10:32 EDT 2016
Hi Klaus,
Thanks for the info on the call tree - I'll let you know how I get on!
Jonathan
-----Original Message-----
From: Klaus Weide [mailto:klaus at flash.uchicago.edu]
Sent: 18 May 2016 19:37
To: Jonathan Thurgood
Cc: Sean Couch; John ZuHone; flash-users at flash.uchicago.edu
Subject: RE: [FLASH-USERS] MHD (8wave & USM): Refinement region boundaries - spurious waves when B field is oblique to jumps in refinement.
On Wed, 18 May 2016, Jonathan Thurgood wrote:
> The artefact is common to 8 wave and USM, so I think it is sensible to
> start with going through the interpolation at boundaries used in the 8
> wave setup since I won't have to worry about the staggering on face
> variables.
> Could you please tell me which files / routines would be called to
> handle the coarse-to-fine / fine-to-coarse interpolation at refinement
> boundaries in the case of a simple 8wave setup so I can follow them
> through? The code is so substantial that I'm finding it tricky to
> navigate the source code at this stage.
>
Jonathan,
You asked for it. :)
Here are parts of the call tree, relevant to grid interpolation for cell-centered variables. Directories (where given) are relative to source/Grid/GridMain/paramesh/paramesh4/Paramesh4dev/PM4_package/;
I give file names of routines (without suffix), subroutine names are the same, modulo a possible mpi_ prefix.
(Btw. you usually find the face-variable routines and variables that correspond to cell-centered ones by replacing _cc with _fc.)
A) This is for -gridinterpolation=native :
Grid_fillGuardCells
|
V
source/mpi_amr_guardcell
|
V
mpi_source/mpi_amr_1blk_guardcell
|
+--------------------------------------------+
| |
V V
mpi_source/mpi_amr_1blk_guardcell_c_to_f source/amr_1blk_guardcell_srl
|
V
source/amr_1blk_cc_prol_gen_unk_fun
|
+--------------------------------------------+---------------------+
| | |
V V V
source/amr_1blk_cc_prol_inject source/amr_1blk_cc_prol_linear source/amr_1blk_cc_prol_genorder
For case A, note in particular how amr_1blk_cc_prol_gen_unk_fun dispatches based on interp_mask_unk(ivar); this could be used to apply different interpolation methoss on a variable-by-variable basis.
FLASH does not make use of this. The initialization seems to happen here by default:
amr_initialize.F90: interp_mask_unk(:) = 1
This could be changed, perhaps in
source/Grid/GridMain/paramesh/paramesh4/Paramesh_init, see comments there.
The implementation routines (on the last line) depend crucially on coefficients that are initalized once at program start; see headers/prolong_arrays, source/amr_prolong_cc_fun_init, maybe others.
B) This is for -gridinterpolation=monotonic ;
directories starting with "interpolation" are under
source/Grid/GridMain/paramesh/ .
(as above)
|
V
mpi_source/mpi_amr_1blk_guardcell_c_to_f
|
V
interpolation/Paramesh4/prolong/amr_1blk_cc_prol_gen_unk_fun
|
V
interpolation/Paramesh4/prolong/amr_prolong_gen_unk1_fun
|
+---------------------+---------------------+
| | |
V V V
umap3 umap2 umap1
(these, and further called subroutines, in interpolation/prolong/umap.F)
For case B, note how amr_prolong_gen_unk1_fun passes gr_intpol (the value from runtime parameter interpol_order) on to the called implementation routines.
HTH,
Klaus
More information about the flash-users
mailing list