#include #include namespace sch { using namespace saw::schema; using MetaArgsStruct = Struct< Member, Member, Member, Member, Member >; using MetaArgs = Args< MetaArgsStruct, Tuple >; } template< saw::error_or meta_main(int argc, char** argv){ using namespace kel::lbm; std::string_view cfg_file_name = "config.json"; if(argc > 1){ cfg_file_name = argv[1]; } saw::data args_dat; { saw::data args_enc{argc,argv}; saw::codec args_codec; auto eov = args_codec.decode(args_enc,args_dat); if(eov.is_error()){ return eov; } auto& args_str = args_dat.template get<"args">(); auto& args_pos = args_dat.template get<"positionals">(); converter conv{ {args_str.template get<"delta_x">()}, {args_str.template get<"delta_t">()} }; switch(args_pos.get<0u>().get()){ case 1u: { } break; case 2u: { switch(args_pos.get<1u>().get()){ case 5u: break; case 9u: break; default: return saw::make_error("Second positional needs to be a valid velocity set"); } } break; case 3u: { } break; default: return saw::make_error("First positional needs to be Dimension 1,2 or 3"); } print_lbm_meta>(conv, {args_str.template get<"kinematic_viscosity">()},{args_str.template get<"char_vel">()},{args_str.template get<"char_len">()}); return saw::make_void(); } int main(int argc, char** argv){ auto eov = meta_main(argc,argv); if(eov.is_error()){ auto& err = eov.get_error(); std::cerr<<"[Error]: "<