Hi,
Still I'm confused with the carpet reduction. The basic reduction method in Christian's code was same with mine. But I thought what I did before should be improved. First of all my expression "integration over only the coarsest level" is very inaccurate. Anyway let me ask again.
What people do in reduction of , e.g. "Mass = Integration of density * volume_measure" is;
------ Method I -------- * In local mode at mol_pseudoevolution or poststep define Integrand = density ! note it's not "density * volume_measure"
* In global mode at analysis CCTK_Reduce(Integrand --> Mass_temp) Mass = Mass_temp * product(cctk_delta_space) ------------------------------
Why do people define "integrand = density" not as "density * volume_measure"? However, if i do take the latter, then I get very weird result, so people might have not taken that. To my understanding, the above Method I will produce;
Result I: Mass = (Sum_reflev=0 of capret weighted density(i,j,k) * dV_0) + (Sum_reflev=1 of carpet weighted density(i,j,k) * dV_0) + ...
But what I wanted (expected) to get by defining integrand = density * volume_measure" is more accurate one;
Result II: Mass = (Sum_reflev=0 of carpet weighted density(i,j,k) * dV_0) + (Sum_reflev=1 of carpet weighted density(i,j,k) * 1/8 * dV_0) + ...
What is the above Method I doing for? Result I or Result II, or something else? The new reduction API mentioned in the reference manual is still underdevelopment?
Thanks in advance,
Hee Il
2011/1/6 Hee Il Kim heeilkim@gmail.com
Christian, thanks so much !
Your code seems to contain everything I wanted to calculate.
There's one minor mismatched declaration in ML_ADMQuantities which should be fixed anyhow.
####
[khi@zenith src]$ diff ML_ADMQuantities.c.ori ML_ADMQuantities.c 56c56 < const char *groups[] = {"grid::coordinates","Grid::coordinates","McLachlan::ML_curv","McLachlan::ML_Gamma","McLachlan::ML_lapse","McLachlan::ML_log_confac","McLachlan::ML_metric","McLachlan::ML_shift","McLachlan::ML_trace_curv","ML_ADMQuantities::ML_Jadm","ML_ADMQuantities::ML_Madm"};
const char *groups[] =
{"grid::coordinates","Grid::coordinates","ML_BSSN::ML_curv","ML_BSSN::ML_Gamma","ML_BSSN::ML_lapse","ML_BSSN::ML_log_confac","ML_BSSN::ML_metric","ML_BSSN::ML_shift","ML_BSSN::ML_trace_curv","ML_ADMQuantities::ML_Jadm","ML_ADMQuantities::ML_Madm"};
####
Thanks again,
Hee Il
2011/1/5 Christian D. Ott cott@tapir.caltech.edu
Dear Hee Il,
I agree that getting this right is tricky. You must set up your grid functions that you want to reduce in MoL_PseudoEvolution in local mode, then do the reduction in CCTK_Analysis in global mode.
I am attaching a Thorn called ZelmaniAnalysis that I use for the kinds of things you want. The reduction works with Carpet.
Best,
- Christian
On Wed, Jan 05, 2011 at 09:18:21PM +0900, Hee Il Kim wrote:
Hi,
Belated Happy New Year !
I am writing a simple code for the calculation of ADM mass and angular momentum by using ML_ADMQuantities. As you know, it requires reduction procedure for the summation of the integrand, e.g., density * volume measure. I've tried various reduction APIs including old deprecated one,
but
I could only succeed in the integration only over the coarsest grid
level,
which was not accurate.
If I use the new reduction API in the reference manual of Cactus, CCTK_ReduceGridArrays;
CCTK_ReduceGridArrays(const cGH *GH, int dest_processor, int local_reduce_handle, int param_table_handle, int N_input_arrays, const CCTK_INT input_array_variable_indices[], int M_output_values, const CCTK_INT output_value_type_codes[], void* const output_values[]);
, I encounter the following error .... WARNING[L3,P0] (Cactus): CCTK_ReduceGridArrays: no grid array reduction registered WARNING level 0 in thorn ML_Analysis processor 0 host compute-0-5.local (line 159 of Evaluate_ADMQuantities.F90): -> Failed to integrate J_z
Param_table_handle is not clear to me but it seems not causing the
problem.
The reduction operators are registered by CactusBase/LocalReduce.
Could you let me know which reduction function I have to use for this calculation? I mean the integration over the whole grid levels. Should I
do
loop over refinenment levels; ... do loop over reflev call CCTK_Reduce enddo ...
Thanks in advance,
Hee Il
Users mailing list Users@einsteintoolkit.org http://lists.einsteintoolkit.org/mailman/listinfo/users