#include "Level1Data.h" #include "sofiefov.h" #include "GATS_Utilities.hpp" #include "fortranfunctions.h" #include #include #include using namespace GATS_Utilities; extern "C" void fov_atm_convolution ( int* nblk, int* iblk, int* isl, int* iel, int* nl, double* lockdown, double *appang, double* trueang, double **tau, double **conv_tau, double *simexo, int* fovflag, int* idiff_ext, float* za) { std::vector fovdat,fovpos; int numfov; std::vector elevSldc = ::gLevel1Data.ScanElev(); int numsol = (int)elevSldc.size(); for(int i = 0; i < *nblk; ++i) { if( *fovflag) { fovpos = ::gFOVdata.get_fov_elev( iblk[i] ); fovdat = ::gFOVdata.get_fov_response(iblk[i] ); assert( fovpos.size() == fovdat.size() ); // convert to radians std::transform(fovpos.begin(),fovpos.end(),fovpos.begin(), std::bind2nd( std::multiplies(), M_PI/(60.*180.) ) ); numfov = (int)fovpos.size(); } else { numfov=0; } std::vector sldc = ::gLevel1Data.ScanData(iblk[i] ); assert(elevSldc.size() == sldc.size() ); ::conv_fov_atm_sun__( nl, isl, iel, appang, trueang, lockdown, &tau[i][0], &fovdat[0], &fovpos[0], &numfov, &sldc[0], &elevSldc[0], &numsol, &simexo[i], &conv_tau[i][0] ); if(*idiff_ext ) { for(int j = *isl-1; j <= *iel-1; ++j) { conv_tau[0][j] = tau[0][j] ; } } } }