Exemplo n.º 1
0
struct sd_sch *
sd_sch_new_emc(double time, double dt, double lam,
	       struct sd_sys *sys, struct sd_hist *hist, struct sd_rng *rng)
{
	struct data *d, z={0};
	uint32_t n_dim = sys->get_n_dim(sys)
	       , n_in  = sys->get_n_in(sys)
	       , n_out = sys->get_n_out(sys)
	       ;
	if ((d = sd_malloc(sizeof(struct data))) == NULL
	 || (*d=z, 0)
	 || (d->f=sd_malloc(sizeof(double)*n_dim))==NULL
	 || (d->g=sd_malloc(sizeof(double)*n_dim))==NULL
	 || (d->z=sd_malloc(sizeof(double)*n_dim))==NULL
	 || (d->eps=sd_malloc(sizeof(double)*n_dim))==NULL
     || sch_base_init(&d->base,
            time, dt,
            n_dim, n_in, n_out,
            sys, hist, rng, 
            emc_n_byte, emc_free, emc_copy, emc_apply, &sample) != SD_OK
	)
	{
		if (d->f!=NULL) sd_free(d->f);
		if (d->g!=NULL) sd_free(d->g);
		if (d->z!=NULL) sd_free(d->z);
		if (d->eps!=NULL) sd_free(d->eps);
		if (d != NULL) sd_free(d);
		sd_err("alloc for emc scheme failed.");
		return NULL;
	}
	d->first_call = true;
	d->lam = lam;
	d->base.sch.data = d;
	return &(d->base.sch);
}
Exemplo n.º 2
0
Arquivo: cb.c Projeto: Vio8023/sddekit
struct sd_sch *
sd_sch_new_cb(
	double time, double dt,
	struct sd_sys *sys,
	struct sd_hist *hist,
	struct sd_rng *rng,
	void *user_data,
	enum sd_stat(*user_apply)(void *))
{
	struct data *data;
	if ((data = sd_malloc(sizeof(struct data))) == NULL)
	{
		sd_err("alloc sch cb failed.");
		return NULL;
	}
	sch_base_init(&data->base,
		time, dt,
		sys->get_n_dim(sys),
		sys->get_n_in(sys),
		sys->get_n_out(sys),
		sys, hist, rng,
		&n_byte, &cb_free, &copy, &apply);
	data->base.sch.data = data;
	data->user_data = user_data;
	data->user_apply = user_apply;
	return &data->base.sch;
}