2929#include " ../basecode/global.h"
3030#include " ../basecode/Cinfo.h"
3131
32-
3332#include " ../shell/Shell.h"
3433#include " ../shell/Wildcard.h"
3534#include " ../shell/Neutral.h"
@@ -165,7 +164,7 @@ ObjId mooseElement(const string& path)
165164}
166165
167166ObjId loadModelInternal (const string& fname, const string& modelpath,
168- const string& solverclass = " " )
167+ const string& solverclass = " " )
169168{
170169 Id model;
171170 if (solverclass.empty ()) {
@@ -186,7 +185,8 @@ ObjId getElementField(const ObjId objid, const string& fname)
186185 return ObjId (objid.path () + ' /' + fname);
187186}
188187
189- ObjId getElementFieldItem (const ObjId& objid, const string& fname, unsigned int index)
188+ ObjId getElementFieldItem (const ObjId& objid, const string& fname,
189+ unsigned int index)
190190{
191191 ObjId oid = getElementField (objid, fname);
192192
@@ -213,8 +213,8 @@ ObjId getElementFieldItem(const ObjId& objid, const string& fname, unsigned int
213213 return ObjId (oid.id , oid.dataIndex , index);
214214}
215215
216-
217- ObjId connect ( const ObjId& src, const string& srcField, const ObjId& tgt, const string& tgtField)
216+ ObjId connect ( const ObjId& src, const string& srcField, const ObjId& tgt,
217+ const string& tgtField)
218218{
219219 auto pShell = getShellPtr ();
220220 return pShell->doAddMsg (" Single" , src, srcField, tgt, tgtField);
@@ -248,3 +248,67 @@ py::object mooseGetCwe()
248248 return py::cast (getShellPtr ()->getCwe ());
249249}
250250
251+ map<string, string> mooseGetFieldDict (const string& className,
252+ const string& finfoType = " " )
253+ {
254+ const Cinfo* cinfo = Cinfo::find (className);
255+ if (! cinfo) {
256+ cout << " Warning: Invalid class " << className << endl;
257+ return {};
258+ }
259+
260+ map<string, string> fieldDict;
261+ if (finfoType == " " )
262+ {
263+ auto finfos = cinfo->finfoMap ();
264+ for (auto & v : finfos)
265+ fieldDict[v.first ] = v.second ->rttiType ();
266+ return fieldDict;
267+ }
268+
269+ // Now the specific one.
270+ // FIXME: Fix the typeids or remove the 'get' and 'set'
271+ if (finfoType == " valueFinfo" || finfoType == " value" ) {
272+ for (unsigned int ii = 0 ; ii < cinfo->getNumValueFinfo (); ++ii) {
273+ auto *finfo = cinfo->getValueFinfo (ii);
274+ fieldDict[finfo->name ()] = finfo->rttiType ();
275+ }
276+ } else if (finfoType == " srcFinfo" || finfoType == " src" ) {
277+ for (unsigned int ii = 0 ; ii < cinfo->getNumSrcFinfo (); ++ii) {
278+ auto *finfo = cinfo->getSrcFinfo (ii);
279+ fieldDict[finfo->name ()] = finfo->rttiType ();
280+ }
281+ } else if (finfoType == " destFinfo" || finfoType == " dest" ) {
282+ for (unsigned int ii = 0 ; ii < cinfo->getNumDestFinfo (); ++ii) {
283+ auto *finfo = cinfo->getDestFinfo (ii);
284+ fieldDict[finfo->name ()] = finfo->rttiType ();
285+ }
286+ } else if (finfoType == " lookupFinfo" || finfoType == " lookup" ) {
287+ for (unsigned int ii = 0 ; ii < cinfo->getNumLookupFinfo (); ++ii) {
288+ auto *finfo = cinfo->getLookupFinfo (ii);
289+ fieldDict[finfo->name ()] = finfo->rttiType ();
290+ }
291+ } else if (finfoType == " sharedFinfo" || finfoType == " shared" ) {
292+ for (unsigned int ii = 0 ; ii < cinfo->getNumSrcFinfo (); ++ii) {
293+ auto *finfo = cinfo->getSrcFinfo (ii);
294+ fieldDict[finfo->name ()] = finfo->rttiType ();
295+ }
296+ } else if (finfoType == " fieldElementFinfo" || finfoType == " field" ||
297+ finfoType == " fieldElement" ) {
298+ for (unsigned int ii = 0 ; ii < cinfo->getNumFieldElementFinfo (); ++ii) {
299+ auto *finfo = cinfo->getFieldElementFinfo (ii);
300+ fieldDict[finfo->name ()] = finfo->rttiType ();
301+ }
302+ }
303+ return fieldDict;
304+ }
305+
306+ void mooseReinit ()
307+ {
308+ getShellPtr ()->doReinit ();
309+ }
310+
311+ void mooseStart (double runtime, bool notify=false )
312+ {
313+ getShellPtr ()->doStart (runtime, notify);
314+ }
0 commit comments