@@ -55,6 +55,8 @@ namespace maps{
55
55
bool _gridyfied=false ;
56
56
double _scalespace=1 .;
57
57
double _scalefield=1 .;
58
+ bool _has_active_flag=false ;
59
+ std::string _active_flag=" " ;
58
60
// data points container
59
61
hydra::multiarray<MP,3 ,hydra::host::sys_t > _extremes;
60
62
hydra::multiarray<MP,N,hydra::host::sys_t > _data;
@@ -79,18 +81,22 @@ namespace maps{
79
81
physmap (){
80
82
}
81
83
82
- physmap (std::string s, size_t skipcolumns=0 , size_t skiprows=0 , double scale=1 ., double scalespace=1 ., bool sparse=false ){
83
- this ->init (s,skipcolumns,skiprows,scale,scalespace,sparse);
84
+ physmap (std::string s, size_t skipcolumns=0 , size_t skiprows=0 , double scale=1 ., double scalespace=1 ., bool sparse=false , std::string search_active= " " ){
85
+ this ->init (s,skipcolumns,skiprows,scale,scalespace,sparse,search_active );
84
86
}
85
87
86
- void init (std::string s, size_t skipcolumns=0 , size_t skiprows=0 , double scale=1 ., double scalespace=1 ., bool sparse=false ){
88
+ void init (std::string s, size_t skipcolumns=0 , size_t skiprows=0 , double scale=1 ., double scalespace=1 ., bool sparse=false , std::string search_active= " " ){
87
89
_filename=s;
88
90
_cskip=skipcolumns;
89
91
_rskip=skiprows;
90
92
_sparse=false ;
91
93
_gridyfied=false ;
92
94
_scalefield=scale;
93
95
_scalespace=scalespace;
96
+ if (search_active!=" " ){
97
+ _has_active_flag = true ;
98
+ _active_flag = search_active;
99
+ }
94
100
}
95
101
96
102
void prepare (){
@@ -139,70 +145,96 @@ namespace maps{
139
145
hydra::copy (hydra::make_range (_data.begin (_3),_data.end (_3)),v);
140
146
}
141
147
148
+
149
+ template <typename Container, typename ElemType = decltype (*(std::declval<Container>().begin()))>
150
+ std::enable_if_t < hydra::tuple_size< ElemType >::value == 2 && N==5 , void >
151
+ fillscalar_and_active (Container &v){
152
+ v.resize (_data.size ());
153
+ hydra::copy (hydra::make_range (_data.begin (_3,_4),_data.end (_3,_4)),v);
154
+ }
155
+
142
156
template <typename Container>
143
- void fillemobility (Container &v){
157
+ std::enable_if<N==11 || N==12 , void >
158
+ fillemobility (Container &v){
144
159
v.resize (_data.size ());
145
160
hydra::copy (hydra::make_range (_data.begin (_6),_data.end (_6)),v);
146
161
}
147
162
163
+ template <typename Container, typename ElemType = decltype (*(std::declval<Container>().begin()))>
164
+ std::enable_if_t < hydra::tuple_size< ElemType >::value == 2 && N==12 , void >
165
+ fillemobility_and_active (Container &v){
166
+ v.resize (_data.size ());
167
+ hydra::copy (hydra::make_range (_data.begin (_6,_11),_data.end (_6,_11)),v);
168
+ }
169
+
148
170
template <typename Container>
149
- void fillhmobility (Container &v){
171
+ std::enable_if<N==11 || N==12 , void >
172
+ fillhmobility (Container &v){
150
173
v.resize (_data.size ());
151
174
hydra::copy (hydra::make_range (_data.begin (_7),_data.end (_7)),v);
152
175
}
153
176
154
- template <typename Container>
155
- void fillvector (Container &vx, Container &vy, Container &vz){
156
- vx.resize (_data.size ());
157
- vy.resize (_data.size ());
158
- vz.resize (_data.size ());
159
- hydra::copy (hydra::make_range (_data.begin (_3),_data.end (_3)),vx);
160
- hydra::copy (hydra::make_range (_data.begin (_4),_data.end (_4)),vy);
161
- hydra::copy (hydra::make_range (_data.begin (_5),_data.end (_5)),vz);
177
+ template <typename Container, typename ElemType = decltype (*(std::declval<Container>().begin()))>
178
+ std::enable_if_t < hydra::tuple_size< ElemType >::value == 2 && N==11 , void >
179
+ fillhmobility_and_active (Container &v){
180
+ v.resize (_data.size ());
181
+ hydra::copy (hydra::make_range (_data.begin (_7,_11),_data.end (_7,_11)),v);
162
182
}
163
183
164
- template <typename Container>
165
- void fillvector (Container &vect){
184
+ template <typename Container, typename ElemType = decltype (*(std::declval<Container>().begin()))>
185
+ std::enable_if_t < hydra::tuple_size< ElemType >::value == 3 && (N==6 || N==7 ), void >
186
+ fillvector (Container &vect){
166
187
vect.resize (_data.size ());
167
188
hydra::copy (hydra::make_range (_data.begin (_3,_4,_5),_data.end (_3,_4,_5)),vect);
168
189
}
169
190
170
- template <typename Container>
171
- void fillvectorEfield (Container &vect){
191
+ template <typename Container, typename ElemType = decltype (*(std::declval<Container>().begin()))>
192
+ std::enable_if_t < hydra::tuple_size< ElemType >::value == 4 && N==7 , void >
193
+ fillvector_and_active (Container &vect){
194
+ vect.resize (_data.size ());
195
+ hydra::copy (hydra::make_range (_data.begin (_3,_4,_5,_6),_data.end (_3,_4,_5,_6)),vect);
196
+ }
197
+
198
+ template <typename Container, typename ElemType = decltype (*(std::declval<Container>().begin()))>
199
+ std::enable_if_t < hydra::tuple_size< ElemType >::value == 3 && (N==11 || N==12 ), void >
200
+ fillvectorEfield (Container &vect){
172
201
vect.resize (_data.size ());
173
202
hydra::copy (hydra::make_range (_data.begin (_3,_4,_5),_data.end (_3,_4,_5)),vect);
174
203
}
175
204
176
- template <typename Container>
177
- void fillvectorWfield (Container &vect){
205
+ template <typename Container, typename ElemType = decltype (*(std::declval<Container>().begin()))>
206
+ std::enable_if_t < hydra::tuple_size< ElemType >::value == 4 && N==12 , void >
207
+ fillvectorEfield_and_active (Container &vect){
208
+ vect.resize (_data.size ());
209
+ hydra::copy (hydra::make_range (_data.begin (_3,_4,_5,_11),_data.end (_3,_4,_5,_11)),vect);
210
+ }
211
+
212
+ template <typename Container, typename ElemType = decltype (*(std::declval<Container>().begin()))>
213
+ std::enable_if_t < hydra::tuple_size< ElemType >::value == 3 && (N==11 || N==12 ), void >
214
+ fillvectorWfield (Container &vect){
178
215
vect.resize (_data.size ());
179
216
hydra::copy (hydra::make_range (_data.begin (_8,_9,_10),_data.end (_8,_9,_10)),vect);
180
217
}
181
218
182
- template <typename Container>
183
- void fillallquantities (Container &fields){
219
+ template <typename Container, typename ElemType = decltype (*(std::declval<Container>().begin()))>
220
+ std::enable_if_t < hydra::tuple_size< ElemType >::value == 4 && N==12 , void >
221
+ fillvectorWfield_and_active (Container &vect){
222
+ vect.resize (_data.size ());
223
+ hydra::copy (hydra::make_range (_data.begin (_8,_9,_10,_11),_data.end (_8,_9,_10,_11)),vect);
224
+ }
225
+
226
+ template <typename Container, typename ElemType = decltype (*(std::declval<Container>().begin()))>
227
+ std::enable_if_t < hydra::tuple_size< ElemType >::value == 8 && (N==11 || N==12 ), void >
228
+ fillallquantities (Container &fields){
184
229
fields.resize (_data.size ());
185
230
hydra::copy (hydra::make_range (_data.begin (_3,_4,_5,_6,_7,_8,_9,_10),_data.end (_3,_4,_5,_6,_7,_8,_9,_10)),fields);
186
231
}
187
-
188
- template <typename Container>
189
- void fillallquantities (Container &ex, Container &ey, Container &ez, Container &emob, Container &hmob, Container &wx, Container &wy, Container &wz){
190
- ex.resize (_data.size ());
191
- ey.resize (_data.size ());
192
- ez.resize (_data.size ());
193
- wx.resize (_data.size ());
194
- wy.resize (_data.size ());
195
- wz.resize (_data.size ());
196
- emob.resize (_data.size ());
197
- hmob.resize (_data.size ());
198
- hydra::copy (hydra::make_range (_data.begin (_3),_data.end (_3)),ex);
199
- hydra::copy (hydra::make_range (_data.begin (_4),_data.end (_4)),ey);
200
- hydra::copy (hydra::make_range (_data.begin (_5),_data.end (_5)),ez);
201
- hydra::copy (hydra::make_range (_data.begin (_6),_data.end (_6)),emob);
202
- hydra::copy (hydra::make_range (_data.begin (_7),_data.end (_7)),hmob);
203
- hydra::copy (hydra::make_range (_data.begin (_8),_data.end (_8)),wx);
204
- hydra::copy (hydra::make_range (_data.begin (_9),_data.end (_9)),wy);
205
- hydra::copy (hydra::make_range (_data.begin (_10),_data.end (_10)),wz);
232
+
233
+ template <typename Container, typename ElemType = decltype (*(std::declval<Container>().begin()))>
234
+ std::enable_if_t < hydra::tuple_size< ElemType >::value == 9 && N==12 , void >
235
+ fillallquantities_and_active (Container &fields){
236
+ fields.resize (_data.size ());
237
+ hydra::copy (hydra::make_range (_data.begin (_3,_4,_5,_6,_7,_8,_9,_10,_11),_data.end (_3,_4,_5,_6,_7,_8,_9,_10,_11)),fields);
206
238
}
207
239
208
240
};
@@ -576,7 +608,6 @@ namespace maps{
576
608
}
577
609
578
610
void load (std::string map_path){
579
- INFO_LINE (" Loading single map" )
580
611
_pm.init (map_path);
581
612
_pm.prepare ();
582
613
std::get<0 >(_borders) = *(_pm.getx ().begin ());
@@ -592,8 +623,6 @@ namespace maps{
592
623
}
593
624
594
625
void load (std::string efield_path, std::string emob_path, std::string hmob_path, std::string wfield_path){
595
- INFO_LINE (" Loading separate maps" )
596
-
597
626
// get efield
598
627
_efieldm.init (efield_path); // E field is a vector
599
628
_efieldm.prepare ();
0 commit comments