void fwalk_RWalk1 (ffam_Fam * fam, fwalk_Res1 * res, fcho_Cho2 * cho, long N, long n, int r, int s, long L, int Nr, int j1, int j2, int jstep) { long Par[5] = { 0 }; lebool localRes; Par[0] = N; Par[1] = n; Par[2] = r; Par[3] = s; Par[4] = L; if (res == NULL) { localRes = TRUE; res = fwalk_CreateRes1 (); } else localRes = FALSE; PrintHead ("fwalk_RWalk1", fam, A_RANDOMWALK1, Par, Nr, j1, j2, jstep); InitRes1 (fam, res, N, Nr, j1, j2, jstep, "fwalk_RWalk1"); ftab_MakeTables (fam, res, cho, Par, TabRWalk1, Nr, j1, j2, jstep); PrintRes1 (res); if (localRes) fwalk_DeleteRes1 (res); }
static void InVarGeo (ffam_Fam * fam, fres_Cont * res, fcho_Cho2 * cho, long N, long n, int r, double Mu, int Algo, int Nr, int j1, int j2, int jstep) { double Par[5]; lebool localRes; char Name[30]; Par[0] = N; Par[1] = n; Par[2] = r; Par[3] = Mu; Par[4] = Algo; if (res == NULL) { localRes = TRUE; res = fres_CreateCont (); } else localRes = FALSE; if (Algo == B_ALGOP) strcpy (Name, "fwalk_VarGeoP1"); else strcpy (Name, "fwalk_VarGeoN1"); PrintHead (Name, fam, A_VARGEO, Par, Nr, j1, j2, jstep); fres_InitCont (fam, res, N, Nr, j1, j2, jstep, Name); ftab_MakeTables (fam, res, cho, Par, TabVarGeo, Nr, j1, j2, jstep); fres_PrintCont (res); if (localRes) fres_DeleteCont (res); }
void OutputTable::ConsolePrint() { PrintBorder(); PrintHead(); PrintBorder(); for (size_t i = 0; i < params.size(); i++) { PrintRows(i); PrintBorder(); } }
void StudentUI(SOCKET sd) { char buffer[sizeof(STUDENT)];//接受学生成绩信息 STUDENT student; system("cls"); gotoxy(10, 5); /*在文本窗口中设置光标*/ printf(" 学生成绩管理系统--学生\n"); if(1==CompleteRecv(sd, buffer, sizeof(STUDENT))) { // printf("接收成功!\n"); } BuffertoData((char *)&student, buffer, sizeof(STUDENT)/sizeof(char));//转换 PrintHead(); PrintData(&student); getchar(); return; }
int main(int argc, char *argv[]) { UserData data; SUNMatrix A, AB; SUNLinearSolver LS, LSB; void *cvode_mem; realtype reltolQ, abstolQ; N_Vector y, q, constraints; int steps; int indexB; realtype reltolB, abstolB, abstolQB; N_Vector yB, qB, constraintsB; realtype time; int retval, ncheck; long int nst, nstB; CVadjCheckPointRec *ckpnt; data = NULL; A = AB = NULL; LS = LSB = NULL; cvode_mem = NULL; ckpnt = NULL; y = yB = qB = NULL; constraints = NULL; constraintsB = NULL; /* Print problem description */ printf("\nAdjoint Sensitivity Example for Chemical Kinetics\n"); printf("-------------------------------------------------\n\n"); printf("ODE: dy1/dt = -p1*y1 + p2*y2*y3\n"); printf(" dy2/dt = p1*y1 - p2*y2*y3 - p3*(y2)^2\n"); printf(" dy3/dt = p3*(y2)^2\n\n"); printf("Find dG/dp for\n"); printf(" G = int_t0^tB0 g(t,p,y) dt\n"); printf(" g(t,p,y) = y3\n\n\n"); /* User data structure */ data = (UserData) malloc(sizeof *data); if (check_retval((void *)data, "malloc", 2)) return(1); data->p[0] = RCONST(0.04); data->p[1] = RCONST(1.0e4); data->p[2] = RCONST(3.0e7); /* Initialize y */ y = N_VNew_Serial(NEQ); if (check_retval((void *)y, "N_VNew_Serial", 0)) return(1); Ith(y,1) = RCONST(1.0); Ith(y,2) = ZERO; Ith(y,3) = ZERO; /* Set constraints to all 1's for nonnegative solution values. */ constraints = N_VNew_Serial(NEQ); if(check_retval((void *)constraints, "N_VNew_Serial", 0)) return(1); N_VConst(ONE, constraints); /* Initialize q */ q = N_VNew_Serial(1); if (check_retval((void *)q, "N_VNew_Serial", 0)) return(1); Ith(q,1) = ZERO; /* Set the scalar realtive and absolute tolerances reltolQ and abstolQ */ reltolQ = RTOL; abstolQ = ATOLq; /* Create and allocate CVODES memory for forward run */ printf("Create and allocate CVODES memory for forward runs\n"); /* Call CVodeCreate to create the solver memory and specify the Backward Differentiation Formula */ cvode_mem = CVodeCreate(CV_BDF); if (check_retval((void *)cvode_mem, "CVodeCreate", 0)) return(1); /* Call CVodeInit to initialize the integrator memory and specify the user's right hand side function in y'=f(t,y), the initial time T0, and the initial dependent variable vector y. */ retval = CVodeInit(cvode_mem, f, T0, y); if (check_retval(&retval, "CVodeInit", 1)) return(1); /* Call CVodeWFtolerances to specify a user-supplied function ewt that sets the multiplicative error weights w_i for use in the weighted RMS norm */ retval = CVodeWFtolerances(cvode_mem, ewt); if (check_retval(&retval, "CVodeWFtolerances", 1)) return(1); /* Attach user data */ retval = CVodeSetUserData(cvode_mem, data); if (check_retval(&retval, "CVodeSetUserData", 1)) return(1); /* Call CVodeSetConstraints to initialize constraints */ retval = CVodeSetConstraints(cvode_mem, constraints); if (check_retval(&retval, "CVODESetConstraints", 1)) return(1); N_VDestroy(constraints); /* Create dense SUNMatrix for use in linear solves */ A = SUNDenseMatrix(NEQ, NEQ); if (check_retval((void *)A, "SUNDenseMatrix", 0)) return(1); /* Create dense SUNLinearSolver object */ LS = SUNLinSol_Dense(y, A); if (check_retval((void *)LS, "SUNLinSol_Dense", 0)) return(1); /* Attach the matrix and linear solver */ retval = CVDlsSetLinearSolver(cvode_mem, LS, A); if (check_retval(&retval, "CVDlsSetLinearSolver", 1)) return(1); /* Set the user-supplied Jacobian routine Jac */ retval = CVDlsSetJacFn(cvode_mem, Jac); if (check_retval(&retval, "CVDlsSetJacFn", 1)) return(1); /* Call CVodeQuadInit to allocate initernal memory and initialize quadrature integration*/ retval = CVodeQuadInit(cvode_mem, fQ, q); if (check_retval(&retval, "CVodeQuadInit", 1)) return(1); /* Call CVodeSetQuadErrCon to specify whether or not the quadrature variables are to be used in the step size control mechanism within CVODES. Call CVodeQuadSStolerances or CVodeQuadSVtolerances to specify the integration tolerances for the quadrature variables. */ retval = CVodeSetQuadErrCon(cvode_mem, SUNTRUE); if (check_retval(&retval, "CVodeSetQuadErrCon", 1)) return(1); /* Call CVodeQuadSStolerances to specify scalar relative and absolute tolerances. */ retval = CVodeQuadSStolerances(cvode_mem, reltolQ, abstolQ); if (check_retval(&retval, "CVodeQuadSStolerances", 1)) return(1); /* Allocate global memory */ /* Call CVodeAdjInit to update CVODES memory block by allocting the internal memory needed for backward integration.*/ steps = STEPS; /* no. of integration steps between two consecutive ckeckpoints*/ retval = CVodeAdjInit(cvode_mem, steps, CV_HERMITE); /* retval = CVodeAdjInit(cvode_mem, steps, CV_POLYNOMIAL); */ if (check_retval(&retval, "CVodeAdjInit", 1)) return(1); /* Perform forward run */ printf("Forward integration ... "); /* Call CVodeF to integrate the forward problem over an interval in time and saves checkpointing data */ retval = CVodeF(cvode_mem, TOUT, y, &time, CV_NORMAL, &ncheck); if (check_retval(&retval, "CVodeF", 1)) return(1); retval = CVodeGetNumSteps(cvode_mem, &nst); if (check_retval(&retval, "CVodeGetNumSteps", 1)) return(1); printf("done ( nst = %ld )\n",nst); printf("\nncheck = %d\n\n", ncheck); retval = CVodeGetQuad(cvode_mem, &time, q); if (check_retval(&retval, "CVodeGetQuad", 1)) return(1); printf("--------------------------------------------------------\n"); #if defined(SUNDIALS_EXTENDED_PRECISION) printf("G: %12.4Le \n",Ith(q,1)); #elif defined(SUNDIALS_DOUBLE_PRECISION) printf("G: %12.4e \n",Ith(q,1)); #else printf("G: %12.4e \n",Ith(q,1)); #endif printf("--------------------------------------------------------\n\n"); /* Test check point linked list (uncomment next block to print check point information) */ /* { int i; printf("\nList of Check Points (ncheck = %d)\n\n", ncheck); ckpnt = (CVadjCheckPointRec *) malloc ( (ncheck+1)*sizeof(CVadjCheckPointRec)); CVodeGetAdjCheckPointsInfo(cvode_mem, ckpnt); for (i=0;i<=ncheck;i++) { printf("Address: %p\n",ckpnt[i].my_addr); printf("Next: %p\n",ckpnt[i].next_addr); printf("Time interval: %le %le\n",ckpnt[i].t0, ckpnt[i].t1); printf("Step number: %ld\n",ckpnt[i].nstep); printf("Order: %d\n",ckpnt[i].order); printf("Step size: %le\n",ckpnt[i].step); printf("\n"); } } */ /* Initialize yB */ yB = N_VNew_Serial(NEQ); if (check_retval((void *)yB, "N_VNew_Serial", 0)) return(1); Ith(yB,1) = ZERO; Ith(yB,2) = ZERO; Ith(yB,3) = ZERO; /* Initialize qB */ qB = N_VNew_Serial(NP); if (check_retval((void *)qB, "N_VNew", 0)) return(1); Ith(qB,1) = ZERO; Ith(qB,2) = ZERO; Ith(qB,3) = ZERO; /* Set the scalar relative tolerance reltolB */ reltolB = RTOL; /* Set the scalar absolute tolerance abstolB */ abstolB = ATOLl; /* Set the scalar absolute tolerance abstolQB */ abstolQB = ATOLq; /* Set constraints to all 1's for nonnegative solution values. */ constraintsB = N_VNew_Serial(NEQ); if(check_retval((void *)constraintsB, "N_VNew_Serial", 0)) return(1); N_VConst(ONE, constraintsB); /* Create and allocate CVODES memory for backward run */ printf("Create and allocate CVODES memory for backward run\n"); /* Call CVodeCreateB to specify the solution method for the backward problem. */ retval = CVodeCreateB(cvode_mem, CV_BDF, &indexB); if (check_retval(&retval, "CVodeCreateB", 1)) return(1); /* Call CVodeInitB to allocate internal memory and initialize the backward problem. */ retval = CVodeInitB(cvode_mem, indexB, fB, TB1, yB); if (check_retval(&retval, "CVodeInitB", 1)) return(1); /* Set the scalar relative and absolute tolerances. */ retval = CVodeSStolerancesB(cvode_mem, indexB, reltolB, abstolB); if (check_retval(&retval, "CVodeSStolerancesB", 1)) return(1); /* Attach the user data for backward problem. */ retval = CVodeSetUserDataB(cvode_mem, indexB, data); if (check_retval(&retval, "CVodeSetUserDataB", 1)) return(1); /* Call CVodeSetConstraintsB to initialize constraints */ retval = CVodeSetConstraintsB(cvode_mem, indexB, constraintsB); if(check_retval(&retval, "CVodeSetConstraintsB", 1)) return(1); N_VDestroy(constraintsB); /* Create dense SUNMatrix for use in linear solves */ AB = SUNDenseMatrix(NEQ, NEQ); if (check_retval((void *)AB, "SUNDenseMatrix", 0)) return(1); /* Create dense SUNLinearSolver object */ LSB = SUNLinSol_Dense(yB, AB); if (check_retval((void *)LSB, "SUNLinSol_Dense", 0)) return(1); /* Attach the matrix and linear solver */ retval = CVDlsSetLinearSolverB(cvode_mem, indexB, LSB, AB); if (check_retval(&retval, "CVDlsSetLinearSolverB", 1)) return(1); /* Set the user-supplied Jacobian routine JacB */ retval = CVDlsSetJacFnB(cvode_mem, indexB, JacB); if (check_retval(&retval, "CVDlsSetJacFnB", 1)) return(1); /* Call CVodeQuadInitB to allocate internal memory and initialize backward quadrature integration. */ retval = CVodeQuadInitB(cvode_mem, indexB, fQB, qB); if (check_retval(&retval, "CVodeQuadInitB", 1)) return(1); /* Call CVodeSetQuadErrCon to specify whether or not the quadrature variables are to be used in the step size control mechanism within CVODES. Call CVodeQuadSStolerances or CVodeQuadSVtolerances to specify the integration tolerances for the quadrature variables. */ retval = CVodeSetQuadErrConB(cvode_mem, indexB, SUNTRUE); if (check_retval(&retval, "CVodeSetQuadErrConB", 1)) return(1); /* Call CVodeQuadSStolerancesB to specify the scalar relative and absolute tolerances for the backward problem. */ retval = CVodeQuadSStolerancesB(cvode_mem, indexB, reltolB, abstolQB); if (check_retval(&retval, "CVodeQuadSStolerancesB", 1)) return(1); /* Backward Integration */ PrintHead(TB1); /* First get results at t = TBout1 */ /* Call CVodeB to integrate the backward ODE problem. */ retval = CVodeB(cvode_mem, TBout1, CV_NORMAL); if (check_retval(&retval, "CVodeB", 1)) return(1); /* Call CVodeGetB to get yB of the backward ODE problem. */ retval = CVodeGetB(cvode_mem, indexB, &time, yB); if (check_retval(&retval, "CVodeGetB", 1)) return(1); /* Call CVodeGetAdjY to get the interpolated value of the forward solution y during a backward integration. */ retval = CVodeGetAdjY(cvode_mem, TBout1, y); if (check_retval(&retval, "CVodeGetAdjY", 1)) return(1); PrintOutput1(time, TBout1, y, yB); /* Then at t = T0 */ retval = CVodeB(cvode_mem, T0, CV_NORMAL); if (check_retval(&retval, "CVodeB", 1)) return(1); CVodeGetNumSteps(CVodeGetAdjCVodeBmem(cvode_mem, indexB), &nstB); printf("Done ( nst = %ld )\n", nstB); retval = CVodeGetB(cvode_mem, indexB, &time, yB); if (check_retval(&retval, "CVodeGetB", 1)) return(1); /* Call CVodeGetQuadB to get the quadrature solution vector after a successful return from CVodeB. */ retval = CVodeGetQuadB(cvode_mem, indexB, &time, qB); if (check_retval(&retval, "CVodeGetQuadB", 1)) return(1); retval = CVodeGetAdjY(cvode_mem, T0, y); if (check_retval(&retval, "CVodeGetAdjY", 1)) return(1); PrintOutput(time, y, yB, qB); /* Reinitialize backward phase (new tB0) */ Ith(yB,1) = ZERO; Ith(yB,2) = ZERO; Ith(yB,3) = ZERO; Ith(qB,1) = ZERO; Ith(qB,2) = ZERO; Ith(qB,3) = ZERO; printf("Re-initialize CVODES memory for backward run\n"); retval = CVodeReInitB(cvode_mem, indexB, TB2, yB); if (check_retval(&retval, "CVodeReInitB", 1)) return(1); retval = CVodeQuadReInitB(cvode_mem, indexB, qB); if (check_retval(&retval, "CVodeQuadReInitB", 1)) return(1); PrintHead(TB2); /* First get results at t = TBout1 */ retval = CVodeB(cvode_mem, TBout1, CV_NORMAL); if (check_retval(&retval, "CVodeB", 1)) return(1); retval = CVodeGetB(cvode_mem, indexB, &time, yB); if (check_retval(&retval, "CVodeGetB", 1)) return(1); retval = CVodeGetAdjY(cvode_mem, TBout1, y); if (check_retval(&retval, "CVodeGetAdjY", 1)) return(1); PrintOutput1(time, TBout1, y, yB); /* Then at t = T0 */ retval = CVodeB(cvode_mem, T0, CV_NORMAL); if (check_retval(&retval, "CVodeB", 1)) return(1); CVodeGetNumSteps(CVodeGetAdjCVodeBmem(cvode_mem, indexB), &nstB); printf("Done ( nst = %ld )\n", nstB); retval = CVodeGetB(cvode_mem, indexB, &time, yB); if (check_retval(&retval, "CVodeGetB", 1)) return(1); retval = CVodeGetQuadB(cvode_mem, indexB, &time, qB); if (check_retval(&retval, "CVodeGetQuadB", 1)) return(1); retval = CVodeGetAdjY(cvode_mem, T0, y); if (check_retval(&retval, "CVodeGetAdjY", 1)) return(1); PrintOutput(time, y, yB, qB); /* Free memory */ printf("Free memory\n\n"); CVodeFree(&cvode_mem); N_VDestroy(y); N_VDestroy(q); N_VDestroy(yB); N_VDestroy(qB); SUNLinSolFree(LS); SUNMatDestroy(A); SUNLinSolFree(LSB); SUNMatDestroy(AB); if (ckpnt != NULL) free(ckpnt); free(data); return(0); }