Here I tried to add an if block in init_value(),
if (boost::iequals(varname, string("p")))
{
... // calculate the return value like before
}Then the setting of initial values worked. Since the above code only work for one variable, does this mean I have to call project_solution for all variables in my N-S separately? BTW,Since I used shared_ptr<> for _func in init_value(), is there any limits of the maximum in its internal counter? Cheers, Zhenyu ------------------ Original ------------------ From: "John Peterson";<[email protected]>; Send time: Monday, Apr 20, 2015 10:37 PM To: "Zhenyu Zhang"<[email protected]>; Cc: "libmesh-users"<[email protected]>; Subject: Re: [Libmesh-users] segmentation fault after projection solution On Mon, Apr 20, 2015 at 8:04 AM, grandrabbit <[email protected]> wrote: Hello, I wrote a class for set up initial values and called it by system.attach_init_function (init_sys); Here is the part of init_sys void init_sys(EquationSystems& es,const std::string& system_name) { System & system = es.get_system<System>(system_name); vector< string > formulas; boost::split(formulas, system_name, boost::is_any_of("_"), token_compress_on ); if(boost::iequals(formulas[0], string("ns"))) { // TransientNonlinearImplicitSystem & system = // es.get_system<TransientNonlinearImplicitSystem>(system_name); system.project_solution(init_value, NULL, es.parameters); // run-time error by petsc, segfault cout<<"init_sys OK, "<<system_name<<endl; // this line never run due to the following error } else { cout<<"unknown type from system_name yet"<<endl; exit(-1); } } Number init_value (const Point& p, const Parameters& parameters, const std::string& sysname, const std::string& varname) { auto _func=_init_conditioner->get_func(sysname,varname); if(!_func) { std::cerr<<"!!! init_value(...): _func is nullptr"<<endl; exit(-1); } Real _time =parameters.get<Real> ("time"); Number result=(*_func)(p, _time); ipoint++; #if 1 cout<< sysname<<"."<<varname<<":"; cout<<"("<<p(0)<<","<<p(1)<<","<<p(2)<<"), " <<"t= "<<_time <<", value= "<<result <<", ipoint="<<ipoint<<endl; #endif return result; } The whole code is cuessfully built and linked. Now the question is when it runs, in the main() function errors aborted the run when it reached equation_systems.init (); Then I located the error more precisely, say, the above system.project_solution() in init_sys was partly executed. I am sorry the original codes is long enough, but if any of you think it necessary, I can upload it afterwards, Here are some screenshot of the errors: ns_0.v:(5.98457,4.68673,0), t= 0, value= 0.069756, ipoint=783857 ns_0.v:(5.87916,4.9296,0), t= 0, value= 0.069756, ipoint=783858 ns_0.v:(5.93191,4.9295,0), t= 0, value= 0.069756, ipoint=783859 ns_0.v:(5.98465,4.92939,0), t= 0, value= 0.069756, ipoint=783860 ns_0.p:(5.86218,4.37566,0), t= 0, value= 0, ipoint=783861 ns_0.p:(6,4.37319,0), t= 0, value= 0, ipoint=783862 ns_0.p:(6,5,0), t= 0, value= 0, ipoint=783863 ns_0.p:(5.86402,5,0), t= 0, value= 0, ipoint=783864 [0]PETSC ERROR: ------------------------------------------------------------------------ [0]PETSC ERROR: Caught signal number 11 SEGV: Segmentation Violation, probably memory access out of range Looks like the segfault is in "_func" which I don't think you sent the code for... -- John ------------------------------------------------------------------------------ BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT Develop your own process in accordance with the BPMN 2 standard Learn Process modeling best practices with Bonita BPM through live exercises http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- event?utm_ source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF _______________________________________________ Libmesh-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/libmesh-users
