本文整理汇总了C++中input::retrieve方法的典型用法代码示例。如果您正苦于以下问题:C++ input::retrieve方法的具体用法?C++ input::retrieve怎么用?C++ input::retrieve使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类input
的用法示例。
在下文中一共展示了input::retrieve方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: postprocess
/*!
* Performs the postprocessing for toroidal,
* which is setting the number of iterations that are to be performed
* @param dat Map containing the input values
* \sa controller::postprocess, item_dim::postprocess
*/
void toroidal::postprocess(input& dat){
controller::postprocess(dat);
num_int=0;
int _iterations;
dat.retrieve(_iterations, "iterations", this);
dat.retrieve(initial_inc, "initial_inc", this);
dat.retrieve(mul_fac, "mul_fac", this);
iterations = _iterations;
if(mul_fac==0){
err("Multiply factor, mul_fac, must not be equal to zero",
"toroidal::postprocess", "controller/toroidal.cpp",
FATAL_ERROR);
}
if(initial_inc==0){
err("The initial increment, initial_inc, must not be equal to zero",
"toroidal::postprocess", "controller/toroidal.cpp",
FATAL_ERROR);
}
//temporary hack to help with c_elegans
holder->index = index*iterations;
//find the controllers place in the number of iterations
}
示例2: postprocess
/*!
* Initializes the rhs_CNLS class
*/
void rhs_CNLS::postprocess(input& dat){
rhs::postprocess(dat);
NUM_TIME_STEPS = dimension/2;
if(NUM_TIME_STEPS*2 != dimension){
err("dimension not even, which is required for rhs_CNLS",
"rhs_CNLS::postprocess", "rhs/rhs_CNLS.cpp", FATAL_ERROR);
}
dat.retrieve(LENGTH_T, "t_int", this);
if(LENGTH_T <= 0){
std::string errmess = "t_int is invalid, must be >= 0";
err(errmess, "rhs_CNLS::postprocess", "rhs/rhs_CNLS.cpp",
dat["t_int"], FATAL_ERROR);
}
dt = LENGTH_T/NUM_TIME_STEPS;
dat.retrieve(g0, "g0", this);
dat.retrieve(e0, "e0", this);
memp.create(NUM_TIME_STEPS, &u1, &u2, &comp_in, &comp_in_r, &comp_out, &comp_out_r, &sq1, &sq2, &k, &ksq);
//create k values
double mulval=(2.0*PI/LENGTH_T)*(NUM_TIME_STEPS/2.0);
for(size_t i=0; i<NUM_TIME_STEPS/2; i++){
k[i] = mulval * (2.0*i/(1.0*NUM_TIME_STEPS));
ksq[i] = k[i]*k[i];
}
for(size_t i=NUM_TIME_STEPS/2; i<NUM_TIME_STEPS; i++){
k[i] = mulval * 2.0*((int)i-(int)NUM_TIME_STEPS)/(NUM_TIME_STEPS*1.0);
ksq[i] = k[i]*k[i];
}
}
示例3: postprocess
/*!
* This function process data that has been generated from an input file
* All of the names returned in the dependencies file exist and have been processed
* @param dat The data structure containing the variable names
*/
void example_rhs::postprocess(input& dat){
//warning so nobody ever actually constructs one of these
//please don't have warnings that always throw in your code ever
err("Example_rhs created, mysteriously fails on some architectures seemingly from AVX instructions. Also does nothing useful", "rhs::create", "rhs/rhs.cpp", WARNING);
rhs::postprocess(dat);//always postprocess the parent class first
//Any class that inherits from rhs, or item_dim, has access to a variable
//called dimension, which represents the dimension of the problem at hand
//dimension is initialized in the item_dep, which is why the parent postprocessing
//must be called first
//There are two types of errors, warning and fatal errors.
//Warnings print something to the screen to warn the user,
//but do not stop the program. A fatal error causes an immediate exit
//These are caused by the function err. Details can be found in the documentation
//
//Lets throw a fatal error if the dimension is less than 10
if(dimension > 10){
err("dimension > 10, which is required for example_rhs", "example_rhs::postprocess",
"rhs/example_rhs.cpp", FATAL_ERROR);
}
//Lets also throw an error if the dimension is equal to 5
if(dimension==5){
err("dimension=5, which gets a warning from example_rhs", "example_rhs::postprocess",
"rhs/example_rhs.cpp", WARNING);
}
//The map contains item*, which point to an item of arbitrary type.
//I plan to implement type checking of the dependencies.
//But sometime later
//
//To retrieve a value, you can call the retrieve function of the variable at hand
//you just pass the name of parameter that is being retrieved to the map, which returns
//an item*. Then this pointer is called to retrieve the value, and is passed the address
//of val1
dat.retrieve(val1, "val1", this);
dat.retrieve(val2, "val2", this);
dat.retrieve(random_info, "random_info", this);
//now, we are going to allocate some memory to something
//This may be useful for storing temporary calculations during the RHS.
//Inheriting from item_dim provides access to a memory pool, memp.
//just pass memp.create the dimension of the problem and the
//addresses of the pointers and the alignment, allocation, and deallocation is
//taken care of!
//
//memp.create(dimension, &ptr1, &ptr2, &ptr3, etc)
//for custom alignment(standard is 32 byte)
//memp.create(alignment, dimension, &ptr1, &prt2, etc)
//
memp.create(32, dimension, &value_holder);
for(size_t i = 0; i < dimension; i++){
value_holder[i] = Id*(double)i*val1 + (dimension-i)*val2;
}
}
示例4: update
void example_integrator_tmpl<T>::postprocess(input& in){
//perform postprocessing of integrator class
//note how we skip example_integrator in this chain since example integrator is
//only a proxy that performs type erasure
integrator::postprocess(in);
item* some_class;
in.retrieve(some_class, "test_class", this);
//this allows us to have a consistent representation in the input file.
//If the variable in question is not part of the hardcore numerical analysis code,
//it may be better to just use a double and not deal with this in the postprocessing
double _rval1 = 0;
in.retrieve(_rval1, "rval1", this);
rval1=_rval1;
//note how we pass a default parameter since rval2 isn't necesarily going to exist
in.retrieve(rval2, "rval2", this, 0);
in.retrieve(unsigned_var, "unsigned_var", this);
in.retrieve(something, "something", this);
update();
}
示例5: postprocess
void n_pulse_score::postprocess(input& invals){
objective::postprocess(invals);
int _n_pulse = 0;
invals.retrieve(_n_pulse, "num_pulses", this);
n_pulse = _n_pulse;
if(dimension%n_pulse){
err("n_pulse_score requires a dimension divisible by the number of pulses",
"bi_pulse_score::postprocess", "objective/bi_pulse_score.cpp", FATAL_ERROR);
}
nts = dimension/n_pulse;
memp.create(nts, &help, &kurtosis_help);
}
示例6: postprocess
void jones_optical::postprocess(input& invals){
#ifdef gen_t_dat
func_dat=fopen("python/grad_data2.out", "w");
func_score = fopen("python/score_data2.out", "w");
#else
func_dat=fopen("python/grad_data.out", "w");
func_score = fopen("python/score_data.out", "w");
#endif
stable_spectral_pde_1d_tmpl<comp>::postprocess(invals);
if(dimension%2){
err("System jones_optical requires an even dimension", "jones_optical::postprocess",
"system/jones_optical.cpp", FATAL_ERROR);
}
int num_segments;
invals.retrieve(num_segments, "num_jones_segments", this);
if(num_segments < 0){
err("Number of jones segments must be greater than or equal to zero",
"jones_optical::postprocess", "system/jones_optical.cpp", FATAL_ERROR);
}
invals.retrieve(jones_int_dist, "jones_int_dist", this);
if(jones_int_dist<0){
err("The distance between jones segments, jones_int_dist, must be greater than or equal to zero",
"jones_optical::postprocess", "system/jones_optical.cpp", FATAL_ERROR);
}
memp.add(dimension, &nvec1);
memp.add(nts, &help, &t, &kurtosis_help, &phold, &nvec2);
double dt = 60.0/nts;
gaussian_noise(ucur, dimension, 0, 0.2);
for(size_t i = 0; i < nts; i++){
t[i] = dt*(i-nts/2.0);
}
for(size_t i = 0; i < nts; i++){
ucur[i] = ucur[i+nts] = 1.00/cosh(t[i]/2.0);
help[i] = _real(ucur[i]);
nvec1[i] = ucur[i];
}
for(size_t i = 0; i < num_pulses; i++){
fft(nvec1 + i*nts, nvec1 +1*nts, nts);
}
//generate variables for the jones matrices
//create jones matrices
std::string name_base = "jones_system_vars";
std::string mat_base = "jones_system_matrices";
for(int i = 0; i < num_segments; i++){
std::vector<std::shared_ptr<variable> > vv(4);
for(auto& val : vv){
val = std::make_shared<variable>();
val->setname(get_unique_name(name_base));
val->holder=holder;
val->parse("0.1");
#ifdef gen_t_dat
val->set(0*2*3.1415*(rand()*1.0/RAND_MAX));
#else
val->set(0);
#endif
invals.insert_item(val);
cont->addvar(val);
}
std::shared_ptr<jones_matrix> m = std::make_shared<jones_matrix>(get_unique_name(mat_base), i, holder);
invals.insert_item(m);
m->setup(vv);
jones_matrices.push_back(m);
}
}
示例7: postprocess
/*!
* This function initializes the internal memory and variables in the initiator class
* When called, all parameters returned by dependencies are promised to have been processed
* at the appropriate level of detail
* \sa item_dim::postprocess
*/
void integrator::postprocess(input& dat){
item_dim::postprocess(dat);
dat.retrieve(rh_val, "rhs", this);
}
示例8: postprocess
/*!
* This function does the processing for the c_elegans class.
*
* It initializes the various matrices and reads values from the input files
*/
void c_elegans::postprocess(input& in){
rhs_type::postprocess(in);
if(dimension != num_neur*2){
err("Dimension must be 558, which is double the number of neurons",
"", "", FATAL_ERROR);
}
in.retrieve(beta, "beta", this);
in.retrieve(tau, "tau", this);
in.retrieve(gelec, "gelec", this);
in.retrieve(gchem, "gchem", this);
in.retrieve(memV, "memV", this);
in.retrieve(memG, "memG", this);
in.retrieve(EchemEx, "EchemEx", this);
in.retrieve(EchemInh, "EchemInh", this);
in.retrieve(ar, "ar", this);
in.retrieve(ad, "ad", this);
std::string ag_fname, a_fname;
in.retrieve(ag_fname, "ag_mat", this);
in.retrieve(a_fname, "a_mat", this);
sparse_type a_m(num_neur, num_neur);
ag_full.resize(num_neur, num_neur);
laplacian.resize(num_neur, num_neur);
read_mat(ag_fname, ag_full);
read_mat(a_fname, a_m);
//create transposed sparse matrix AEchem
AEchem_trans_full.resize(num_neur, num_neur);
AEchem_trans_full = a_m.transpose();
AEchem_trans.resize(num_neur, num_neur);
//do any needed fake iterations, must make more general at some point
size_t num_comb;
int iterations;
in.retrieve(num_comb, "num_comb", this);
in.retrieve(iterations, "iterations", this);
in.retrieve(cur_ind, "!start_ind", this);
abl_neur.resize(num_comb);
for(auto& val : abl_neur){
val = 0;
}
if(abl_neur.size() != 1){
next_comb(abl_neur, num_neur);
}
for(int i = 0; i < cur_ind; i++){
for(int j = 0; j < iterations; j++){
if(next_comb(abl_neur, num_neur)){
char ind_str[20];//won't ever have a 20 digit index
//handy buffer to overflow for those hacking this.
sprintf(ind_str, "%d", (int)cur_ind);
err(std::string("Combinations exhausted in index ") + ind_str,
"c_elegans::postprocess","rhs/c_elegans.cpp", FATAL_ERROR);
}
}
}
auto dat_inds =
std::shared_ptr<writer>(new writer(true));
dat_inds->add_data(data::create("Ablations", abl_neur.data(), abl_neur.size()), writer::OTHER);
holder->add_writer(dat_inds);
//write first ablation data
//set up dummy connection to toroidal controller for now
controller* cont;
in.retrieve(cont, "controller", this);
auto val = std::make_shared<variable>();
val->setname("c_elegans_quickfix");
val->holder = holder;
val->parse("0.1");
in.insert_item(val);
cont->addvar(val);
in.retrieve(dummy, val->name(), this);
has_gone=true; //is true at first to allow update of zero index to occur
first_round=true;
update();
}