PolyFEM
Loading...
Searching...
No Matches
OptState.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <polyfem/Common.hpp>
4
7
10
11#include <Eigen/Core>
12
13#include <string>
14#include <vector>
15#include <memory>
16
17namespace polyfem
18{
19 class State;
20
21 namespace solver
22 {
23 class AdjointNLProblem;
24 } // namespace solver
25
28 {
29 public:
30 //---------------------------------------------------
31 //-----------------initialization--------------------
32 //---------------------------------------------------
33
34 ~OptState();
36 OptState();
37
41 void init(const json &args, const bool strict_validation);
42
45
51 void init_logger(
52 const std::string &log_file,
53 const spdlog::level::level_enum log_level,
54 const spdlog::level::level_enum file_log_level,
55 const bool is_quiet);
56
60 void init_logger(std::ostream &os, const spdlog::level::level_enum log_level);
61
64 void set_log_level(const spdlog::level::level_enum log_level);
65
67 void create_states(const int max_threads = -1);
68
70 void init_variables();
71
72 void create_problem();
73
74 void initial_guess(Eigen::VectorXd &x); // shoud be const
75
76 double eval(Eigen::VectorXd &x) const;
77
78 void solve(Eigen::VectorXd &x);
79
80 private:
81 inline std::string root_path() const
82 {
83 if (utils::is_param_valid(args, "root_path"))
84 return args["root_path"].get<std::string>();
85 return "";
86 }
87
89 void check_unsupported() const;
90
92 void init_logger(const std::vector<spdlog::sink_ptr> &sinks, const spdlog::level::level_enum log_level);
93
95 spdlog::sink_ptr console_sink_ = nullptr;
96 spdlog::sink_ptr file_sink_ = nullptr;
97
98 //---------------------------------------------------
99 //-----------------state--------------------
100 //---------------------------------------------------
101
103 std::vector<std::shared_ptr<State>> states;
104 std::vector<std::shared_ptr<DiffCache>> diff_caches;
105
107 std::vector<int> variable_sizes;
108 int ndof;
109
111
112 std::unique_ptr<solver::AdjointNLProblem> nl_problem;
113
114 public:
116 std::string output_dir;
117 };
118} // namespace polyfem
int x
main class that contains the polyfem adjoint solver and all its state
Definition OptState.hpp:28
std::vector< std::shared_ptr< State > > states
State used in the opt.
Definition OptState.hpp:103
void solve(Eigen::VectorXd &x)
Definition OptState.cpp:261
void initial_guess(Eigen::VectorXd &x)
Definition OptState.cpp:248
void set_log_level(const spdlog::level::level_enum log_level)
change log level
Definition OptState.cpp:103
void create_states(const int max_threads=-1)
create the opt states
Definition OptState.cpp:141
json args
main input arguments containing all defaults
Definition OptState.hpp:44
void init(const json &args, const bool strict_validation)
initialize the polyfem solver with a json settings
Definition OptState.cpp:110
std::vector< std::shared_ptr< DiffCache > > diff_caches
Definition OptState.hpp:104
spdlog::sink_ptr file_sink_
Definition OptState.hpp:96
std::string root_path() const
Definition OptState.hpp:81
void check_unsupported() const
Check and throw if any forward simulation State is not supported.
Definition OptState.cpp:159
double eval(Eigen::VectorXd &x) const
Definition OptState.cpp:255
std::vector< int > variable_sizes
variables
Definition OptState.hpp:107
std::unique_ptr< solver::AdjointNLProblem > nl_problem
Definition OptState.hpp:112
std::string output_dir
Directory for output files.
Definition OptState.hpp:116
spdlog::sink_ptr console_sink_
logger sink to stdout
Definition OptState.hpp:95
void init_logger(const std::string &log_file, const spdlog::level::level_enum log_level, const spdlog::level::level_enum file_log_level, const bool is_quiet)
initializing the logger
Definition OptState.cpp:59
solver::VariableToSimulationGroup variable_to_simulations
Definition OptState.hpp:110
void init_variables()
init variables
Definition OptState.cpp:216
OptState()
Constructor.
Definition OptState.cpp:54
A collection of VariableToSimulation.
bool is_param_valid(const json &params, const std::string &key)
Determine if a key exists and is non-null in a json object.
nlohmann::json json
Definition Common.hpp:9