options.hpp serif/backend/mfem/operators/volume_data.hpp serif/utils/serialize/numerics.hpp serif::utils::serialize::Serializer< operators::backend::mfem::VolumeOptions > serif serif::utils serif::utils::serialize #pragmaonce #include"serif/backend/mfem/operators/volume_data.hpp" #include"serif/utils/serialize/numerics.hpp" namespaceserif::utils::serialize{ template<> structSerializer<operators::backend::mfem::VolumeOptions>{ staticconstexprstd::string_viewkey="assembly_options"; staticNodesave(constoperators::backend::mfem::VolumeOptions&value){ returnobject("mfem.volume_options",field("quadrature",value.quadrature_policy),field("contraction",static_cast<int>(value.contraction_mode))); } staticResult<operators::backend::mfem::VolumeOptions>load(constNode&node){ usingMode=operators::backend::mfem::ContractionMode; autoresult=read_object(node,"mfem.volume_options",[](discretization::quadrature::Policyquadrature,intcontraction){ returnoperators::backend::mfem::VolumeOptions{.quadrature_policy=std::move(quadrature),.contraction_mode=static_cast<Mode>(contraction)}; },member<discretization::quadrature::Policy>("quadrature"),member<int>("contraction")); if(result&&result->contraction_mode!=Mode::automatic&&result->contraction_mode!=Mode::dense){ returnstd::unexpected(Error{"contraction","UnsupportedMFEMcontractionmode."}); } returnresult; } }; }