.. _program_listing_file_src_pcms_field_eqdsk_field.h: Program Listing for File eqdsk_field.h ====================================== |exhale_lsh| :ref:`Return to documentation for file ` (``src/pcms/field/eqdsk_field.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #ifndef PCMS_EQDSK_FIELD_H #define PCMS_EQDSK_FIELD_H #include "pcms/utility/eqdsk.h" #include "pcms/field/layout/uniform_grid.h" #include "pcms/field/function_space/spline.h" #include #include "pcms/field/coordinate_systems/cylindrical.hpp" namespace pcms { struct EQDSKField { std::shared_ptr space; Field field; }; // TODD: @jacobmerson replace with Function. struct EQDSKFieldWithData { EQDSKData data; std::shared_ptr space; Field field; }; inline EQDSKField MakeEQDSKField(const EQDSKData& eqdsk_data) { // EQDSK is a poloidal plane in cylindrical RZ coordinates auto space = SplineFunctionSpace::FromUniformGrid( eqdsk_data.grid, csys::CylindricalRZ::Create()); Field field = space->CreateFunction(); field.SetDOFHolderDataUnchecked(Rank2View( eqdsk_data.PSIZR.data(), eqdsk_data.PSIZR.extent(0), 1)); return {std::move(space), std::move(field)}; } inline EQDSKFieldWithData MakeEQDSKField(const std::string& filename) { auto eqdsk_data = EQDSKData(filename); auto [space, field] = MakeEQDSKField(eqdsk_data); return {std::move(eqdsk_data), std::move(space), std::move(field)}; } } // namespace pcms #endif // PCMS_EQDSK_FIELD_H