@@ -55,6 +55,8 @@ namespace maps{
5555 bool _gridyfied=false ;
5656 double _scalespace=1 .;
5757 double _scalefield=1 .;
58+ bool _has_active_flag=false ;
59+ std::string _active_flag=" " ;
5860 // data points container
5961 hydra::multiarray<MP,3 ,hydra::host::sys_t > _extremes;
6062 hydra::multiarray<MP,N,hydra::host::sys_t > _data;
@@ -79,18 +81,22 @@ namespace maps{
7981 physmap (){
8082 }
8183
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 );
8486 }
8587
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= " " ){
8789 _filename=s;
8890 _cskip=skipcolumns;
8991 _rskip=skiprows;
9092 _sparse=false ;
9193 _gridyfied=false ;
9294 _scalefield=scale;
9395 _scalespace=scalespace;
96+ if (search_active!=" " ){
97+ _has_active_flag = true ;
98+ _active_flag = search_active;
99+ }
94100 }
95101
96102 void prepare (){
@@ -139,70 +145,96 @@ namespace maps{
139145 hydra::copy (hydra::make_range (_data.begin (_3),_data.end (_3)),v);
140146 }
141147
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+
142156 template <typename Container>
143- void fillemobility (Container &v){
157+ std::enable_if<N==11 || N==12 , void >
158+ fillemobility (Container &v){
144159 v.resize (_data.size ());
145160 hydra::copy (hydra::make_range (_data.begin (_6),_data.end (_6)),v);
146161 }
147162
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+
148170 template <typename Container>
149- void fillhmobility (Container &v){
171+ std::enable_if<N==11 || N==12 , void >
172+ fillhmobility (Container &v){
150173 v.resize (_data.size ());
151174 hydra::copy (hydra::make_range (_data.begin (_7),_data.end (_7)),v);
152175 }
153176
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);
162182 }
163183
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){
166187 vect.resize (_data.size ());
167188 hydra::copy (hydra::make_range (_data.begin (_3,_4,_5),_data.end (_3,_4,_5)),vect);
168189 }
169190
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){
172201 vect.resize (_data.size ());
173202 hydra::copy (hydra::make_range (_data.begin (_3,_4,_5),_data.end (_3,_4,_5)),vect);
174203 }
175204
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){
178215 vect.resize (_data.size ());
179216 hydra::copy (hydra::make_range (_data.begin (_8,_9,_10),_data.end (_8,_9,_10)),vect);
180217 }
181218
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){
184229 fields.resize (_data.size ());
185230 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);
186231 }
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);
206238 }
207239
208240 };
@@ -576,7 +608,6 @@ namespace maps{
576608 }
577609
578610 void load (std::string map_path){
579- INFO_LINE (" Loading single map" )
580611 _pm.init (map_path);
581612 _pm.prepare ();
582613 std::get<0 >(_borders) = *(_pm.getx ().begin ());
@@ -592,8 +623,6 @@ namespace maps{
592623 }
593624
594625 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-
597626 // get efield
598627 _efieldm.init (efield_path); // E field is a vector
599628 _efieldm.prepare ();
0 commit comments