void Foam::mulesWithDiffusionImplicitLimiter ( const volScalarField& rho, volScalarField& Y, const surfaceScalarField& phiPos, const surfaceScalarField& phiNeg, scalarField& lambdaFace, surfaceScalarField& rhoPhif, surfaceScalarField& diffFlux, const surfaceScalarField& Dmi, const fvScalarMatrix& SuSp ) { const fvMesh& mesh = rho.mesh(); const dictionary& MULEScontrols = mesh.solverDict("Yi"); label nLimiterIter ( readLabel(MULEScontrols.lookup("nLimiterIter")) ); upwind<scalar> UDsPos(mesh, phiPos); upwind<scalar> UDsNeg(mesh, phiNeg); fvScalarMatrix YConvection ( fv::gaussConvectionScheme<scalar>(mesh, phiPos, UDsPos).fvmDiv(phiPos, Y) + fv::gaussConvectionScheme<scalar>(mesh, phiNeg, UDsPos).fvmDiv(phiNeg, Y) ); surfaceScalarField rhoPhifBD = YConvection.flux(); surfaceScalarField& rhoPhifCorr = rhoPhif; rhoPhifCorr -= rhoPhifBD; volScalarField Su ( "Su", SuSp & Y ); MULES::limiter ( lambdaFace, 1.0/mesh.time().deltaTValue(), rho, Y, rhoPhifBD, rhoPhifCorr, zeroField(), Su, 1.0, //psiMax, 0.0, //psiMin, nLimiterIter ); }
void App::Login() { struct passwd *pw; pid_t pid; pw = LoginPanel->GetInput()->GetPasswdStruct(); if(pw == 0) return; // Create new process pid = fork(); if(pid == 0) { // Login process starts here SwitchUser Su(pw, &cfg, DisplayName); string session = LoginPanel->getSession(); Su.Login(cfg.getLoginCommand(session).c_str()); exit(OK_EXIT); } #ifndef XNEST_DEBUG CloseLog(); #endif // Wait until user is logging out (login process terminates) pid_t wpid = -1; int status; while (wpid != pid) { wpid = wait(&status); } if (WIFEXITED(status) && WEXITSTATUS(status)) { LoginPanel->Message("Failed to execute login command"); } // Close all clients KillAllClients(False); KillAllClients(True); // Send HUP signal to clientgroup killpg(pid, SIGHUP); // Send TERM signal to clientgroup, if error send KILL if(killpg(pid, SIGTERM)) killpg(pid, SIGKILL); HideCursor(); #ifndef XNEST_DEBUG // Re-activate log file OpenLog(); #endif }
int main(int argc, char *argv[]) { timeSelector::addOptions(); # include "setRootCase.H" # include "createTime.H" instantList timeDirs = timeSelector::select0(runTime, args); # include "createMesh.H" forAll(timeDirs, timeI) { runTime.setTime(timeDirs[timeI], timeI); mesh.readUpdate(); volScalarField mgb ( IOobject ( "mgb", runTime.timeName(), mesh, IOobject::MUST_READ ), mesh ); volScalarField Su ( IOobject ( "Su", runTime.timeName(), mesh, IOobject::MUST_READ ), mesh ); volScalarField Xi ( IOobject ( "Xi", runTime.timeName(), mesh, IOobject::MUST_READ ), mesh ); volScalarField St ( IOobject ( "St", runTime.timeName(), mesh, IOobject::NO_READ ), Xi*Su ); St.write(); volScalarField wdot ( IOobject ( "wdot", runTime.timeName(), mesh, IOobject::NO_READ ), St*mgb ); wdot.write(); }
/* >>> start tutorial code >>> */ int main( ) { DifferentialState xT; // the trolley position DifferentialState vT; // the trolley velocity IntermediateState aT; // the trolley acceleration DifferentialState xL; // the cable length DifferentialState vL; // the cable velocity IntermediateState aL; // the cable acceleration DifferentialState phi; // the excitation angle DifferentialState omega; // the angular velocity DifferentialState uT; // trolley velocity control DifferentialState uL; // cable velocity control Control duT; Control duL; // // DEFINE THE PARAMETERS: // const double tau1 = 0.012790605943772; const double a1 = 0.047418203070092; const double tau2 = 0.024695192379264; const double a2 = 0.034087337273386; const double g = 9.81; const double c = 0.2; const double m = 1318.0; // // DEFINE THE MODEL EQUATIONS: // DifferentialEquation f, f2, test_expr; ExportAcadoFunction fun, fun2; aT = -1.0 / tau1 * vT + a1 / tau1 * uT; aL = -1.0 / tau2 * vL + a2 / tau2 * uL; Expression states; states << xT; states << vT; states << xL; states << vL; states << phi; states << omega; states << uT; states << uL; Expression controls; controls << duT; controls << duL; Expression arg; arg << states; arg << controls; int NX = states.getDim(); int NU = controls.getDim(); IntermediateState expr(2); expr(0) = - 1.0/xL*(-g*sin(phi)-aT*cos(phi)-2*vL*omega-c*omega/(m*xL)) + log(duT/duL)*pow(xL,2); expr(1) = - 1.0/xL*(-g*tan(phi)-aT*acos(phi)-2*atan(vL)*omega-c*asin(omega)/exp(xL)) + duT/pow(omega,3); //~ expr(0) = - 1.0/xL*(-g*sin(phi)); //~ expr(1) = duT/pow(omega,3); DifferentialState lambda("", expr.getDim(),1); DifferentialState Sx("", states.getDim(),states.getDim()); DifferentialState Su("", states.getDim(),controls.getDim()); Expression S = Sx; S.appendCols(Su); // SYMMETRIC DERIVATIVES Expression S_tmp = S; S_tmp.appendRows(zeros<double>(NU,NX).appendCols(eye<double>(NU))); IntermediateState dfS,dl; Expression f_tmp = symmetricDerivative( expr, arg, S_tmp, lambda, &dfS, &dl ); f << returnLowerTriangular( f_tmp ); fun.init(f, "symmetricDerivative", NX*(1+NX+NU)+expr.getDim(), 0, 2, 0, 0, 0); // ALTERNATIVE DERIVATIVES IntermediateState tmp = backwardDerivative( expr, states, lambda ); IntermediateState tmp2 = forwardDerivative( tmp, states ); Expression tmp3 = backwardDerivative( expr, controls, lambda ); Expression tmp4 = multipleForwardDerivative( tmp3, states, Su ); Expression tmp5 = tmp4 + tmp4.transpose() + forwardDerivative( tmp3, controls ); Expression f2_tmp1; f2_tmp1 = symmetricDoubleProduct( tmp2, Sx ); f2_tmp1.appendCols( zeros<double>(NX,NU) ); Expression f2_tmp2; f2_tmp2 = Su.transpose()*tmp2*Sx + multipleForwardDerivative( tmp3, states, Sx ); f2_tmp2.appendCols( symmetricDoubleProduct( tmp2, Su ) + tmp5 ); f2_tmp1.appendRows( f2_tmp2 ); f2 << returnLowerTriangular( f2_tmp1 ); fun2.init(f2, "alternativeSymmetric", NX*(1+NX+NU)+expr.getDim(), 0, 2, 0, 0, 0); Function f1; f1 << dfS; f1 << dl; std::ofstream stream2( "ADtest/ADsymbolic_output2.c" ); stream2 << f1; stream2.close(); std::ofstream stream( "ADtest/ADsymbolic_output.c" ); fun.exportCode( stream, "double" ); fun2.exportCode( stream, "double" ); test_expr << expr; stream << test_expr; stream.close(); return 0; }
void App::Login() { struct passwd *pw; pid_t pid; pw = LoginPanel->GetInput()->GetPasswdStruct(); if(pw == 0) return; // Create new process pid = fork(); if(pid == 0) { // Login process starts here SwitchUser Su(pw, &cfg, DisplayName); string session = LoginPanel->getSession(); string loginCommand = cfg.getOption("login_cmd"); replaceVariables(loginCommand, SESSION_VAR, session); replaceVariables(loginCommand, THEME_VAR, themeName); string sessStart = cfg.getOption("sessionstart_cmd"); if (sessStart != "") { replaceVariables(sessStart, USER_VAR, pw->pw_name); system(sessStart.c_str()); } Su.Login(loginCommand.c_str()); exit(OK_EXIT); } #ifndef XNEST_DEBUG CloseLog(); #endif // Wait until user is logging out (login process terminates) pid_t wpid = -1; int status; while (wpid != pid) { wpid = wait(&status); } if (WIFEXITED(status) && WEXITSTATUS(status)) { LoginPanel->Message("Failed to execute login command"); } else { string sessStop = cfg.getOption("sessionstop_cmd"); if (sessStop != "") { replaceVariables(sessStop, USER_VAR, pw->pw_name); system(sessStop.c_str()); } } // Close all clients KillAllClients(False); KillAllClients(True); // Send HUP signal to clientgroup killpg(pid, SIGHUP); // Send TERM signal to clientgroup, if error send KILL if(killpg(pid, SIGTERM)) killpg(pid, SIGKILL); HideCursor(); #ifndef XNEST_DEBUG // Re-activate log file OpenLog(); #endif }