Skip to content
Snippets Groups Projects
cxx-sfx-model-compute-flux.cpp 2.54 KiB
Newer Older
  • Learn to ignore specific revisions
  • 数学の武士's avatar
    数学の武士 committed
    #include <stdlib.h>
    #include <stdio.h>
    
    #include "cxx-sfx-model-compute-flux.h"
    #include "sfx-esm.h"
    #include "sfx-sheba.h"
    
    数学の武士's avatar
    数学の武士 committed
    #include <vector>
    
    // -------------------------------------------------------------------------- //
    
    数学の武士's avatar
    数学の武士 committed
    void esm_compute_flux (sfxDataVecTypeC* sfx,
    
    数学の武士's avatar
    数学の武士 committed
                               meteoDataVecTypeC* meteo,
    
    数学の武士's avatar
    数学の武士 committed
                               const sfx_esm_param_C* model_param, 
    
    数学の武士's avatar
    数学の武士 committed
                               const sfx_surface_param* surface_param,
    
    数学の武士's avatar
    数学の武士 committed
                               const sfx_esm_numericsType_C* numerics,
    
    数学の武士's avatar
    数学の武士 committed
                               const sfx_phys_constants* constants,
    
    数学の武士's avatar
    数学の武士 committed
                               const int grid_size)
    
    数学の武士's avatar
    数学の武士 committed
    {
    
    数学の武士's avatar
    数学の武士 committed
    #ifdef INCLUDE_CUDA
    
    数学の武士's avatar
    数学の武士 committed
        static FluxEsm<float, MemType::CPU, MemType::CPU, MemType::GPU> F(sfx, meteo, grid_size);
        F.compute_flux(*model_param, *surface_param, *numerics, *constants);
    
    数学の武士's avatar
    数学の武士 committed
    #else
    
    数学の武士's avatar
    数学の武士 committed
        static FluxEsm<float, MemType::CPU, MemType::CPU, MemType::CPU> F(sfx, meteo, grid_size);
        F.compute_flux(*model_param, *surface_param, *numerics, *constants);
    
    数学の武士's avatar
    数学の武士 committed
    #endif
    
    数学の武士's avatar
    .  
    数学の武士 committed
    }
    
    
    数学の武士's avatar
    数学の武士 committed
    void sheba_compute_flux (sfxDataVecTypeC* sfx,
    
    数学の武士's avatar
    数学の武士 committed
                               meteoDataVecTypeC* meteo,
    
    数学の武士's avatar
    数学の武士 committed
                               const sfx_sheba_param_C* model_param, 
    
    数学の武士's avatar
    数学の武士 committed
                               const sfx_surface_param* surface_param,
    
    数学の武士's avatar
    数学の武士 committed
                               const sfx_sheba_numericsType_C* numerics,
    
    数学の武士's avatar
    数学の武士 committed
                               const sfx_phys_constants* constants,
                               const int grid_size)
    
    数学の武士's avatar
    .  
    数学の武士 committed
    {
    
    #ifdef INCLUDE_CUDA
    
        static FluxSheba<float, MemType::CPU, MemType::CPU, MemType::GPU> F(sfx, meteo, grid_size);
        F.compute_flux(*model_param, *surface_param, *numerics, *constants);
    
        static FluxSheba<float, MemType::CPU, MemType::CPU, MemType::CPU> F(sfx, meteo, grid_size);
        F.compute_flux(*model_param, *surface_param, *numerics, *constants);
    #endif
    }
    
    void sheba_noit_compute_flux (sfxDataVecTypeC* sfx,
                               meteoDataVecTypeC* meteo,
                               const sfx_sheba_noit_param_C* model_param, 
                               const sfx_surface_param* surface_param,
                               const sfx_sheba_noit_numericsType_C* numerics,
                               const sfx_phys_constants* constants,
                               const int grid_size)
    {
    #ifdef INCLUDE_CUDA
        static FluxSheba<float, MemType::CPU, MemType::CPU, MemType::GPU> F(sfx, meteo, grid_size);
        F.noit_compute_flux(*model_param, *surface_param, *numerics, *constants);
    #else
        static FluxSheba<float, MemType::CPU, MemType::CPU, MemType::CPU> F(sfx, meteo, grid_size);
        F.noit_compute_flux(*model_param, *surface_param, *numerics, *constants);
    
    数学の武士's avatar
    数学の武士 committed
    }