44 typename std::vector<std::pair<bool,space_basic<T,M> > >::iterator xh_iter = l_Xh.begin();
45 for (
typename std::list<value_type>::const_iterator iter = _l.begin(); iter != _l.end(); ++iter, xh_iter++, j_comp++) {
49 check_macro (x.s == 0,
"unsupported non-nul scalar `"<<x.s<<
"' in form concatenation"
50 <<
" at ("<<i_comp<<
","<<j_comp<<
")");
54 if (!(*xh_iter).first) {
55 (*xh_iter).first =
true;
56 (*xh_iter).second = IR;
58 check_macro (IR == (*xh_iter).second,
"form initializer: invalid field:"
59 <<
" expect a form with its second space `" << (*xh_iter).second.name() <<
"'"
60 <<
" at ("<<i_comp<<
","<<j_comp<<
")");
66 check_macro (x.v.get_space() == Yh,
"form initializer: invalid field space `"
67 << x.v.get_space().name() <<
"': expect `" << Yh.name() <<
"'"
68 <<
" at ("<<i_comp<<
","<<j_comp<<
")");
73 if (!(*xh_iter).first) {
74 (*xh_iter).first =
true;
77 check_macro (x.v.get_space() == (*xh_iter).second,
"form initializer: invalid trans(field) space `"
78 << x.v.get_space().name() <<
"': expect `" << (*xh_iter).second.name() <<
"'"
79 <<
" at ("<<i_comp<<
","<<j_comp<<
")");
85 check_macro (IR == Yh,
"form initializer: invalid trans(field): "
86 <<
" expect a form with its second space `"
87 << Yh.name() <<
"'" <<
" at ("<<i_comp<<
","<<j_comp<<
")");
92 size_t n = x.vv.size();
93 check_macro (n != 0,
"form initializer: invalid vector<field> with zero-size");
95 if (!(*xh_iter).first) {
96 (*xh_iter).first =
true;
97 (*xh_iter).second = x.vv[0].get_space();
99 check_macro (x.vv[0].get_space() == (*xh_iter).second,
"form initializer: invalid 0-th vector<field> space `"
100 << x.vv[0].get_space().name() <<
"': expect `" << (*xh_iter).second.name() <<
"'"
101 <<
" at ("<<i_comp<<
","<<j_comp<<
")");
103 for (
size_t i = 1; i < n; ++i) {
104 check_macro (x.vv[i].get_space() == x.vv[0].get_space(),
"form initializer: invalid "<<i<<
"-th vector<field> space `"
105 << x.vv[i].get_space().name() <<
"': expect `" << (*xh_iter).second.name() <<
"'"
106 <<
" at ("<<i_comp<<
","<<j_comp<<
")");
112 check_macro (IRn == Yh,
"form initializer: invalid vector<field>: "
113 <<
" expect a form with its second space `"
114 << Yh.name() <<
"'" <<
" at ("<<i_comp<<
","<<j_comp<<
")");
119 size_t n = x.vv.size();
120 check_macro (n != 0,
"form initializer: invalid trans(vector<field>) with zero-size");
122 if (!(*xh_iter).first) {
123 (*xh_iter).first =
true;
124 (*xh_iter).second = IRn;
126 check_macro (IRn == (*xh_iter).second,
"form initializer: invalid trans(vector<field>):"
127 <<
" expect a form with its second space `" << (*xh_iter).second.name() <<
"'"
128 <<
" at ("<<i_comp<<
","<<j_comp<<
")");
132 Yh = x.vv[0].get_space();
134 check_macro (x.vv[0].get_space() == Yh,
"form initializer: invalid 0-th trans(vector<field>) space `"
135 << x.vv[0].get_space().name() <<
"': expect `" << Yh.name() <<
"'"
136 <<
" at ("<<i_comp<<
","<<j_comp<<
")");
138 for (
size_t i = 1; i < n; ++i) {
139 check_macro (x.vv[i].get_space() == x.vv[0].get_space(),
"form initializer: invalid "<<i<<
"-th trans(vector<field>) space `"
140 << x.vv[i].get_space().name() <<
"': expect `" << (*xh_iter).second.name() <<
"'"
141 <<
" at ("<<i_comp<<
","<<j_comp<<
")");
146 if (!(*xh_iter).first) {
147 (*xh_iter).first =
true;
148 (*xh_iter).second = x.
m.get_first_space();
150 check_macro (x.m.get_first_space() == (*xh_iter).second,
"form initializer: invalid second space `"
151 << x.m.get_first_space().name() <<
"': expect `" << (*xh_iter).second.name() <<
"'"
152 <<
" at ("<<i_comp<<
","<<j_comp<<
")");
156 Yh = x.m.get_second_space();
158 check_macro (x.m.get_second_space() == Yh,
"form initializer: invalid second space `"
159 << x.m.get_second_space().name() <<
"': expect `" << Yh.name() <<
"'"
160 <<
" at ("<<i_comp<<
","<<j_comp<<
")");
164 default:
error_macro (
"concatenation not yet supported"
165 <<
" at ("<<i_comp<<
","<<j_comp<<
")");
168 check_macro (have_Yh,
"form concatenation: "<<i_comp<<
"th row space remains undefined");
250 for (
typename std::list<line_type>::const_iterator iter = _l.begin(); iter != _l.end(); ++iter, i_comp++) {
253 line.build_form_pass0 (l_Xh, Yih, i_comp);
266 for (
typename std::list<line_type>::const_iterator iter = _l.begin(); iter != _l.end(); ++iter) {
269 for (
typename std::list<value_type>::const_iterator jter = line.begin(); jter != line.end(); ++jter) {
273 check_macro (x.s == 0,
"unsupported non-nul scalar `"<<x.s<<
"' in form concatenation");
283 sizes_type u_sizes (x.v.u().size(), x.v.u().dis_size());
284 sizes_type b_sizes (x.v.b().size(), x.v.b().dis_size());
293 sizes_type u_sizes (x.v.u().size(), x.v.u().dis_size());
294 sizes_type b_sizes (x.v.b().size(), x.v.b().dis_size());
303 size_t n = x.vv.size();
307 std::vector<vec<T,M>> x_vv_u(n), x_vv_b(n);
308 for (
size_t i = 0; i < n; ++i) {
309 x_vv_u[i] = x.vv[i].u();
310 x_vv_b[i] = x.vv[i].b();
311 u_sizes.first += x.vv[i].u().size();
312 u_sizes.second += x.vv[i].u().dis_size();
313 b_sizes.first += x.vv[i].b().size();
314 b_sizes.second += x.vv[i].b().dis_size();
322 u_sizes.first = x.vv[0].u().size();
323 u_sizes.second = x.vv[0].u().dis_size();
324 b_sizes.first = x.vv[0].b().size();
325 b_sizes.second = x.vv[0].b().dis_size();
326 for (
size_t i = 0; i < n; ++i) {
327 check_macro (u_sizes.first == x.vv[i].u().size() &&
328 u_sizes.second == x.vv[i].u().dis_size(),
329 "trans(vector<field>): "<<i<<
"-th vector.u size [0:"<<x.vv[i].u().size()<<
"|"<<x.vv[i].u().dis_size()<<
"]"
330 " is incompatible with 0-th one [" <<x.vv[0].u().size()<<
"|"<<x.vv[0].u().dis_size()<<
"]");
331 check_macro (b_sizes.first == x.vv[i].b().size() &&
332 b_sizes.second == x.vv[i].b().dis_size(),
333 "trans(vector<field>): "<<i<<
"-th vector.b size [0:"<<x.vv[i].b().size()<<
"|"<<x.vv[i].b().dis_size()<<
"]"
334 " is incompatible with 0-th one [" <<x.vv[0].b().size()<<
"|"<<x.vv[0].b().dis_size()<<
"]");
337 std::vector<vec<T,M>> x_vv_u(n), x_vv_b(n);
338 for (
size_t i = 0; i < n; ++i) {
339 x_vv_u[i] = x.vv[i].u();
340 x_vv_b[i] = x.vv[i].b();
350 size_t n = x.vv.size();
356 u_sizes.first = x.vv[0].u().size();
357 u_sizes.second = x.vv[0].u().dis_size();
358 b_sizes.first = x.vv[0].b().size();
359 b_sizes.second = x.vv[0].b().dis_size();
360 for (
size_t i = 0; i < n; ++i) {
361 check_macro (u_sizes.first == x.vv[i].u().size() &&
362 u_sizes.second == x.vv[i].u().dis_size(),
363 "trans(vector<field>): "<<i<<
"-th vector.u size [0:"<<x.vv[i].u().size()<<
"|"<<x.vv[i].u().dis_size()<<
"]"
364 " is incompatible with 0-th one [" <<x.vv[0].u().size()<<
"|"<<x.vv[0].u().dis_size()<<
"]");
365 check_macro (b_sizes.first == x.vv[i].b().size() &&
366 b_sizes.second == x.vv[i].b().dis_size(),
367 "trans(vector<field>): "<<i<<
"-th vector.b size [0:"<<x.vv[i].b().size()<<
"|"<<x.vv[i].b().dis_size()<<
"]"
368 " is incompatible with 0-th one [" <<x.vv[0].b().size()<<
"|"<<x.vv[0].b().dis_size()<<
"]");
371 std::vector<vec<T,M>> x_vv_u(n), x_vv_b(n);
372 for (
size_t i = 0; i < n; ++i) {
373 x_vv_u[i] = x.vv[i].u();
374 x_vv_b[i] = x.vv[i].b();
389 default:
error_macro (
"non-form or scalar concatenation not yet supported");
check_macro(expr1.have_homogeneous_space(Xh1), "dual(expr1,expr2); expr1 should have homogeneous space. HINT: use dual(interpolate(Xh, expr1),expr2)")