From c07eb9958e3b6d51a5c0b7164fb042ee8c971a98 Mon Sep 17 00:00:00 2001 From: Andrew Benson Date: Fri, 6 Aug 2021 00:23:39 +0000 Subject: [PATCH] feat: Add output of the transfer function in the power spectrum task --- source/tasks.power_spectrum.F90 | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/source/tasks.power_spectrum.F90 b/source/tasks.power_spectrum.F90 index 5383d1a03a..9fa2d08232 100644 --- a/source/tasks.power_spectrum.F90 +++ b/source/tasks.power_spectrum.F90 @@ -25,6 +25,7 @@ use :: Power_Spectra , only : powerSpectrumClass use :: Power_Spectra_Nonlinear , only : powerSpectrumNonlinearClass use :: Power_Spectrum_Window_Functions, only : powerSpectrumWindowFunctionClass + use :: Transfer_Functions , only : transferFunctionClass !![ @@ -39,6 +40,7 @@ class (cosmologyParametersClass ), pointer :: cosmologyParameters_ => null() class (cosmologyFunctionsClass ), pointer :: cosmologyFunctions_ => null() class (linearGrowthClass ), pointer :: linearGrowth_ => null() + class (transferFunctionClass ), pointer :: transferFunction_ => null() class (powerSpectrumClass ), pointer :: powerSpectrum_ => null() class (powerSpectrumNonlinearClass ), pointer :: powerSpectrumNonlinear_ => null() class (powerSpectrumWindowFunctionClass ), pointer :: powerSpectrumWindowFunction_ => null() @@ -74,6 +76,7 @@ function powerSpectraConstructorParameters(parameters) result(self) class (cosmologyParametersClass ), pointer :: cosmologyParameters_ class (cosmologyFunctionsClass ), pointer :: cosmologyFunctions_ class (linearGrowthClass ), pointer :: linearGrowth_ + class (transferFunctionClass ), pointer :: transferFunction_ class (powerSpectrumClass ), pointer :: powerSpectrum_ class (powerSpectrumNonlinearClass ), pointer :: powerSpectrumNonlinear_ class (powerSpectrumWindowFunctionClass), pointer :: powerSpectrumWindowFunction_ @@ -118,6 +121,7 @@ function powerSpectraConstructorParameters(parameters) result(self) + @@ -133,6 +137,7 @@ function powerSpectraConstructorParameters(parameters) result(self) & cosmologyParameters_ , & & cosmologyFunctions_ , & & linearGrowth_ , & + & transferFunction_ , & & powerSpectrum_ , & & powerSpectrumNonlinear_ , & & powerSpectrumWindowFunction_, & @@ -144,6 +149,7 @@ function powerSpectraConstructorParameters(parameters) result(self) + @@ -162,6 +168,7 @@ function powerSpectraConstructorInternal( & & cosmologyParameters_ , & & cosmologyFunctions_ , & & linearGrowth_ , & + & transferFunction_ , & & powerSpectrum_ , & & powerSpectrumNonlinear_ , & & powerSpectrumWindowFunction_, & @@ -176,6 +183,7 @@ function powerSpectraConstructorInternal( & class (cosmologyParametersClass ), intent(in ), target :: cosmologyParameters_ class (cosmologyFunctionsClass ), intent(in ), target :: cosmologyFunctions_ class (linearGrowthClass ), intent(in ), target :: linearGrowth_ + class (transferFunctionClass ), intent(in ), target :: transferFunction_ class (powerSpectrumClass ), intent(in ), target :: powerSpectrum_ class (powerSpectrumNonlinearClass ), intent(in ), target :: powerSpectrumNonlinear_ class (powerSpectrumWindowFunctionClass), intent(in ), target :: powerSpectrumWindowFunction_ @@ -186,7 +194,7 @@ function powerSpectraConstructorInternal( & logical , intent(in ) :: includeNonLinear type (varying_string ), intent(in ) :: outputGroup !![ - + !!] return @@ -203,6 +211,7 @@ subroutine powerSpectraDestructor(self) + @@ -237,7 +246,7 @@ subroutine powerSpectraPerform(self,status) double precision , allocatable , dimension(:,:) :: powerSpectrumNonLinear , sigmaNonLinear , & & sigma , sigmaGradient , & & powerSpectrumLinear , growthFactor , & - & growthFactorLogDerivative + & growthFactorLogDerivative, transferFunction double precision :: wavenumberMinimum , wavenumberMaximum type (integrator ) :: integrator_ type (hdf5Object ) :: outputsGroup , outputGroup , & @@ -252,6 +261,7 @@ subroutine powerSpectraPerform(self,status) ! Allocate arrays for power spectra. call allocateArray(wavenumber ,[wavenumberCount ]) call allocateArray(powerSpectrumLinear ,[wavenumberCount,outputCount]) + call allocateArray(transferFunction ,[wavenumberCount,outputCount]) call allocateArray(massScale ,[wavenumberCount ]) call allocateArray(sigma ,[wavenumberCount,outputCount]) call allocateArray(sigmaGradient ,[wavenumberCount,outputCount]) @@ -288,6 +298,8 @@ subroutine powerSpectraPerform(self,status) growthFactorLogDerivative(iWavenumber,iOutput)=self%linearGrowth_ %logarithmicDerivativeExpansionFactor(time=self%outputTimes_%time(iOutput),wavenumber=wavenumber(iWavenumber)) ! Compute power spectrum. powerSpectrumLinear (iWavenumber,iOutput)=+self%powerSpectrum_ %power (time=self%outputTimes_%time(iOutput),wavenumber=wavenumber(iWavenumber)) + ! Compute transfer function. + transferFunction (iWavenumber,iOutput)=+self%transferFunction_ %value ( wavenumber=wavenumber(iWavenumber)) ! Compute fluctuation on this mass scale. sigma (iWavenumber,iOutput)=+self%cosmologicalMassVariance_%rootVariance (time=self%outputTimes_%time(iOutput),mass =massScale (iWavenumber)) ! Compute gradient of mass fluctuations. @@ -333,6 +345,7 @@ subroutine powerSpectraPerform(self,status) call outputGroup %writeDataset (powerSpectrumLinear (:,iOutput),'powerSpectrum' ,'The power spectrum.' ,datasetReturned=dataset) call dataset %writeAttribute(megaParsec**3 ,'unitsInSI' ) call dataset %close ( ) + call outputGroup %writeDataset (transferFunction (:,iOutput),'transferFunction' ,'The transfer function.' ) call outputGroup %writeDataset (sigma (:,iOutput),'sigma' ,'The mass fluctuation on this scale.' ) call outputGroup %writeDataset (sigmaGradient (:,iOutput),'alpha' ,'Logarithmic deriative of the mass flucation with respect to mass.' ) if (self%includeNonLinear) then