147{
148 std::ifstream f(samples_file_name_);
149 std::string line;
150 std::list<std::string> items;
151
152
153 int linenumber = 0;
154 getline(f, line); linenumber++;
155 items.clear();
157 nexact_samples_ = std::stoi(items.front());
158 items.pop_front();
159 napprox_samples_ = std::stoi(items.front());
160 items.pop_front();
161 nsamples_ = napprox_samples_ + nexact_samples_;
162
163 parameter_samples_.resize(nsamples_);
164 interpolation_coefficients_.resize(napprox_samples_);
165
166
167
168
169 for (int nsmpl = 0; nsmpl < nexact_samples_; nsmpl++) {
170 getline(f, line); linenumber++;
171 items.clear();
173 if (items.size() != nparameters_) {
174 throw std::invalid_argument("\nError: UQ file " + samples_file_name_ + " has not enough exact sample parameters on line " + std::to_string(linenumber) + " expecting " + std::to_string(nparameters_) + " found " + std::to_string(items.size()) + "\n");
175 }
176 for (int n = 0; n < nparameters_; n++) {
177 std::string item = items.front();
178 items.pop_front();
179 parameter_samples_[nsmpl].push_back(std::stod(item));
180 }
181 }
182
183
184
185
186 int ncoeff = nexact_samples_ + 1;
187 for (int nsmpl = 0; nsmpl < napprox_samples_; nsmpl++) {
188 getline(f, line); linenumber++;
189 size_t colon_pos = line.find(":");
190 if (colon_pos == std::string::npos) {
191 throw std::invalid_argument( "\nError: UQ file " + samples_file_name_ + " has wrong format (no colon) on line " + std::to_string(linenumber) + "\n");
192 }
193 std::string params_string = line.substr(0, colon_pos);
194 std::string coeffs_string = line.substr(colon_pos + 1, line.size());
195 items.clear();
196 items =
split(params_string);
197 if (items.size() != nparameters_) {
198 throw std::invalid_argument( "\nError: UQ file " + samples_file_name_ + " has " + std::to_string(items.size()) +" parameters (preceding :) on line " + std::to_string(linenumber) + " expecting " + std::to_string(nparameters_) + "\n");
199 }
200 for (int n = 0; n < nparameters_; n++) {
201 std::string item = items.front();
202 items.pop_front();
203 parameter_samples_[nexact_samples_ + nsmpl].push_back(std::stod(item));
204 }
205 items.clear();
206 items =
split(coeffs_string);
207 if (items.size() != ncoeff) {
208 throw std::invalid_argument( "\nError: UQ file " + samples_file_name_ + " has " + std::to_string(items.size()) + " coefficients on line " + std::to_string(linenumber) + " expecting " + std::to_string(ncoeff) + "\n");
209 }
210
211 for (int n = 0; n < ncoeff; n++) {
212 std::string item = items.front();
213 items.pop_front();
214 interpolation_coefficients_[nsmpl].push_back(std::stod(item));
215 }
216 }
217
218}