10 #ifndef FIELD_VALUES_HH_
11 #define FIELD_VALUES_HH_
15 #include <boost/format.hpp>
21 namespace IT=Input::Type;
45 std::string &
at(
unsigned int row) {
return at(row,0); }
46 std::string &
at(
unsigned int row,
unsigned int col) {
return values_[col*
n_rows+row]; }
48 for(
auto &elem:
values_) elem =
"0.0";
53 operator std::string() {
83 ASSERT( ref.
n_rows==1 ,
"Converting StringTensor(n,m) too std::string with m!=1 or n!=1.");
108 template<
int NRows,
int NCols,
class ET>
117 template <
int NRows,
class ET>
122 template<
int NRows,
int NCols>
136 template<
int NRows,
int NCols>
150 template <
class RT>
inline RT &
set_raw_scalar(RT &val,
double *raw_data) {
return *raw_data;}
151 template <
class RT>
inline RT &
set_raw_scalar(RT &val,
int *raw_data) {
return *raw_data;}
152 template <
class RT>
inline RT &
set_raw_scalar(RT &val,
string *raw_data) {
return val;}
155 template <
class RT>
inline RT &
set_raw_vec(RT &val,
double *raw_data) { arma::access::rw(val.mem) = raw_data;
return val;}
156 template <
class RT>
inline RT &
set_raw_vec(RT &val,
int *raw_data) { arma::access::rw(val.mem) = raw_data;
return val;}
157 template <
class RT>
inline RT &
set_raw_vec(RT &val,
string *raw_data) {
return val;}
158 template <
class RT>
inline RT &
set_raw_vec(RT &val,
FieldEnum *raw_data) { arma::access::rw(val.mem) = raw_data;
return val;}
160 template <
class RT>
inline RT &
set_raw_fix(RT &val,
double *raw_data) { val = RT(raw_data);
return val;}
161 template <
class RT>
inline RT &
set_raw_fix(RT &val,
int *raw_data) { val = RT(raw_data);
return val;}
162 template <
class RT>
inline RT &
set_raw_fix(RT &val,
string *raw_data) {
return val;}
188 template <
int NRows,
int NCols,
class ET>
200 if (element_input_type) {
225 if (it->size() == 1 && NRows == NCols) {
232 if (rec.
size() == 1) {
234 ET scalar=*(it->begin<ET>());
235 for(
unsigned int i=0; i< NRows; i++)
value_.at(i,i)=scalar;
236 }
else if (rec.
size() == NRows) {
238 for(
unsigned int i=0; i< NRows; i++, ++it)
value_.at(i,i)=*(it->begin<ET>());
239 }
else if (rec.
size() == (NRows+1)*NRows/2) {
240 for(
unsigned int row=0; row<NRows; row++)
241 for(
unsigned int col=0; col<NCols; col++)
243 value_.at(row,col) = *(it->begin<ET>());
249 boost::str(boost::format(
"Initializing symmetric matrix %dx%d by vector of wrong size %d, should be 1, %d, or %d.")
250 % NRows % NCols % rec.
size() % NRows % ((NRows+1)*NRows/2)))
258 if (rec.
size() == NRows && it->size() == NCols) {
260 for (
unsigned int row = 0; row < NRows; row++, ++it) {
261 if (it->size() != NCols)
262 THROW( ExcFV_Input() << EI_InputMsg(
"Wrong number of columns.")
265 for (
unsigned int col = 0; col < NCols; col++, ++col_it)
266 value_.at(row, col) = *col_it;
271 boost::str(boost::format(
"Initializing matrix %dx%d by matrix of wrong size %dx%d.")
272 % NRows % NCols % rec.
size() % it->size() ))
285 {
return value_.at(i,j); }
287 {
return value_.at(i,j); }
317 if (element_input_type)
318 return *element_input_type;
369 if (element_input_type) {
370 return IT::Array( *element_input_type, 1);
385 if ( rec.
size() == 1 ) {
386 for(
unsigned int i=0; i<
n_rows(); i++)
389 for(
unsigned int i=0; i<
n_rows(); i++, ++it) {
396 boost::str(boost::format(
"Initializing vector of size %d by vector of size %d.")
422 template <
int NRows,
class ET>
435 if (element_input_type) {
436 return IT::Array( *element_input_type, 1, NRows);
449 if ( rec.
size() == 1 ) {
450 for(
unsigned int i=0; i<
n_rows(); i++)
452 }
else if ( rec.
size() == NRows ) {
453 for(
unsigned int i=0; i< NRows; i++, ++it)
458 boost::str(boost::format(
"Initializing fixed vector of size %d by vector of size %d.")
493 template <
int spacedim>