1
0
Fork 0
mirror of https://github.com/cosmo-sims/monofonIC.git synced 2024-09-19 17:03:45 +02:00

removed superfluous grid operators

This commit is contained in:
Oliver Hahn 2020-04-04 21:35:16 +02:00
parent f4d6b9e669
commit 5d60b59f6c
2 changed files with 14 additions and 12 deletions

View file

@ -1,10 +1,18 @@
#pragma once #pragma once
/*
operators.hh - This file is part of MUSIC2 -
a code to generate multi-scale initial conditions
for cosmological simulations
Copyright (C) 2019 Oliver Hahn
*/
#include <general.hh> #include <general.hh>
namespace op{ namespace op{
//!== long list of primitive operators to work on fields ==!// //!== list of primitive operators to work on fields ==!//
template< typename field> template< typename field>
inline auto assign_to( field& g ){return [&g](auto i, auto v){ g[i] = v; };} inline auto assign_to( field& g ){return [&g](auto i, auto v){ g[i] = v; };}
@ -15,15 +23,9 @@ inline auto multiply_add_to( field& g, val x ){return [&g,x](auto i, auto v){ g[
template< typename field> template< typename field>
inline auto add_to( field& g ){return [&g](auto i, auto v){ g[i] += v; };} inline auto add_to( field& g ){return [&g](auto i, auto v){ g[i] += v; };}
template< typename field>
inline auto add_twice_to( field& g ){return [&g](auto i, auto v){ g[i] += 2*v; };}
template< typename field> template< typename field>
inline auto subtract_from( field& g ){return [&g](auto i, auto v){ g[i] -= v; };} inline auto subtract_from( field& g ){return [&g](auto i, auto v){ g[i] -= v; };}
template< typename field>
inline auto subtract_twice_from( field& g ){return [&g](auto i, auto v){ g[i] -= 2*v; };}
//! vanilla standard gradient //! vanilla standard gradient
class fourier_gradient{ class fourier_gradient{
private: private:

View file

@ -353,7 +353,7 @@ int Run( config_file& the_config )
music::ilog << std::setw(40) << std::setfill('.') << std::left << "Computing phi(3a) term" << std::flush; music::ilog << std::setw(40) << std::setfill('.') << std::left << "Computing phi(3a) term" << std::flush;
phi3a.FourierTransformForward(false); phi3a.FourierTransformForward(false);
Conv.convolve_Hessians(phi, {0, 0}, phi, {1, 1}, phi, {2, 2}, op::assign_to(phi3a)); Conv.convolve_Hessians(phi, {0, 0}, phi, {1, 1}, phi, {2, 2}, op::assign_to(phi3a));
Conv.convolve_Hessians(phi, {0, 1}, phi, {0, 2}, phi, {1, 2}, op::add_twice_to(phi3a)); Conv.convolve_Hessians(phi, {0, 1}, phi, {0, 2}, phi, {1, 2}, op::multiply_add_to(phi3a,2.0));
Conv.convolve_Hessians(phi, {1, 2}, phi, {1, 2}, phi, {0, 0}, op::subtract_from(phi3a)); Conv.convolve_Hessians(phi, {1, 2}, phi, {1, 2}, phi, {0, 0}, op::subtract_from(phi3a));
Conv.convolve_Hessians(phi, {0, 2}, phi, {0, 2}, phi, {1, 1}, op::subtract_from(phi3a)); Conv.convolve_Hessians(phi, {0, 2}, phi, {0, 2}, phi, {1, 1}, op::subtract_from(phi3a));
Conv.convolve_Hessians(phi, {0, 1}, phi, {0, 1}, phi, {2, 2}, op::subtract_from(phi3a)); Conv.convolve_Hessians(phi, {0, 1}, phi, {0, 1}, phi, {2, 2}, op::subtract_from(phi3a));
@ -367,9 +367,9 @@ int Run( config_file& the_config )
Conv.convolve_SumOfHessians(phi, {0, 0}, phi2, {1, 1}, {2, 2}, op::assign_to(phi3b)); Conv.convolve_SumOfHessians(phi, {0, 0}, phi2, {1, 1}, {2, 2}, op::assign_to(phi3b));
Conv.convolve_SumOfHessians(phi, {1, 1}, phi2, {2, 2}, {0, 0}, op::add_to(phi3b)); Conv.convolve_SumOfHessians(phi, {1, 1}, phi2, {2, 2}, {0, 0}, op::add_to(phi3b));
Conv.convolve_SumOfHessians(phi, {2, 2}, phi2, {0, 0}, {1, 1}, op::add_to(phi3b)); Conv.convolve_SumOfHessians(phi, {2, 2}, phi2, {0, 0}, {1, 1}, op::add_to(phi3b));
Conv.convolve_Hessians(phi, {0, 1}, phi2, {0, 1}, op::subtract_twice_from(phi3b)); Conv.convolve_Hessians(phi, {0, 1}, phi2, {0, 1}, op::multiply_add_to(phi3b,-2.0));
Conv.convolve_Hessians(phi, {0, 2}, phi2, {0, 2}, op::subtract_twice_from(phi3b)); Conv.convolve_Hessians(phi, {0, 2}, phi2, {0, 2}, op::multiply_add_to(phi3b,-2.0));
Conv.convolve_Hessians(phi, {1, 2}, phi2, {1, 2}, op::subtract_twice_from(phi3b)); Conv.convolve_Hessians(phi, {1, 2}, phi2, {1, 2}, op::multiply_add_to(phi3b,-2.0));
phi3b.apply_InverseLaplacian(); phi3b.apply_InverseLaplacian();
phi3b *= 0.5; // factor 1/2 from definition of phi(3b)! phi3b *= 0.5; // factor 1/2 from definition of phi(3b)!
music::ilog << std::setw(20) << std::setfill(' ') << std::right << "took " << get_wtime() - wtime << "s" << std::endl; music::ilog << std::setw(20) << std::setfill(' ') << std::right << "took " << get_wtime() - wtime << "s" << std::endl;