📄 tau_damp.c
字号:
mlfFeval(
mclValueVarargout(),
mlxVp,
mlfIndexRef(
vr, "(?)", mlfColon(mlfScalar(4.0), mlfScalar(6.0), NULL)),
mlfIndexRef(veh, ".P6_b"),
NULL)));
/*
*
* % relative velocity of fin6 middle point wrt c in 6
* v_6c6=R_6b'*v_6cb;
*/
mlfAssign(&v_6c6, mlfMtimes(mlfCtranspose(R_6b), v_6cb));
/*
*
* % attack angle
* a6=atan2(v_6c6(3),v_6c6(1));
*/
mlfAssign(
&a6,
mlfAtan2(
mlfIndexRef(v_6c6, "(?)", mlfScalar(3.0)),
mlfIndexRef(v_6c6, "(?)", mlfScalar(1.0))));
/*
*
* % fin6 wind frame rotation matrix
* R_w6=[cos(a6) 0 -sin(a6); 0 1 0; sin(a6) 0 cos(a6)];
*/
mlfAssign(
&R_w6,
mlfVertcat(
mlfHorzcat(mlfCos(a6), mlfScalar(0.0), mlfUminus(mlfSin(a6)), NULL),
mlfDoubleMatrix(1, 3, __Array25_r, NULL),
mlfHorzcat(mlfSin(a6), mlfScalar(0.0), mlfCos(a6), NULL),
NULL));
/*
*
* % cl and cd computation
* [cl,cd]=a2clcd(a6);
*/
mlfAssign(&cl, mlfA2clcd(&cd, a6));
/*
*
* % damping forces on 6 wrt w
* F_6w=-0.5*veh.rho*veh.st*(v_6c6(1)^2+v_6c6(3)^2)*[cd; 0; cl];
*/
mlfAssign(
&F_6w,
mlfMtimes(
mlfMtimes(
mlfFeval(
mclValueVarargout(),
mlxMtimes,
mlfFeval(
mclValueVarargout(),
mlxMtimes,
mlfScalar(-0.5),
mlfIndexRef(veh, ".rho"),
NULL),
mlfIndexRef(veh, ".st"),
NULL),
mlfPlus(
mlfMpower(
mlfIndexRef(v_6c6, "(?)", mlfScalar(1.0)), mlfScalar(2.0)),
mlfMpower(
mlfIndexRef(v_6c6, "(?)", mlfScalar(3.0)), mlfScalar(2.0)))),
mlfVertcat(
mlfHorzcat(cd, NULL),
mlfDoubleMatrix(1, 1, __Array26_r, NULL),
mlfHorzcat(cl, NULL),
NULL)));
/*
*
* % damping forces on 6 wrt b
* F_6b=R_6b*R_w6*F_6w;
*/
mlfAssign(&F_6b, mlfMtimes(mlfMtimes(R_6b, R_w6), F_6w));
/*
*
* % moments on 6 with pole in b wrt b
* M_6bb=vp(veh.P6_b,F_6b);
*/
mlfAssign(
&M_6bb,
mlfFeval(
mclValueVarargout(), mlxVp, mlfIndexRef(veh, ".P6_b"), F_6b, NULL));
/*
*
* t6=[F_6b;M_6bb];
*/
mlfAssign(
&t6, mlfVertcat(mlfHorzcat(F_6b, NULL), mlfHorzcat(M_6bb, NULL), NULL));
/*
*
* % --------------------------------------------------------------
* % forces on FIN 7
*
* % fin7 rotation matrix
* R_7b=[cos(de(7)) 0 sin(de(7)); 0 -1 0; sin(de(7)) 0 -cos(de(7))];
*/
mlfAssign(
&R_7b,
mlfVertcat(
mlfHorzcat(
mlfCos(mlfIndexRef(de, "(?)", mlfScalar(7.0))),
mlfScalar(0.0),
mlfSin(mlfIndexRef(de, "(?)", mlfScalar(7.0))),
NULL),
mlfDoubleMatrix(1, 3, __Array27_r, NULL),
mlfHorzcat(
mlfSin(mlfIndexRef(de, "(?)", mlfScalar(7.0))),
mlfScalar(0.0),
mlfUminus(mlfCos(mlfIndexRef(de, "(?)", mlfScalar(7.0)))),
NULL),
NULL));
/*
*
* % relative velocity of fin7 middle point wrt c in b
* v_7cb=vr(1:3)+vp(vr(4:6),veh.P7_b);
*/
mlfAssign(
&v_7cb,
mlfPlus(
mlfIndexRef(vr, "(?)", mlfColon(mlfScalar(1.0), mlfScalar(3.0), NULL)),
mlfFeval(
mclValueVarargout(),
mlxVp,
mlfIndexRef(
vr, "(?)", mlfColon(mlfScalar(4.0), mlfScalar(6.0), NULL)),
mlfIndexRef(veh, ".P7_b"),
NULL)));
/*
*
* % relative velocity of fin7 middle point wrt c in 7
* v_7c7=R_7b'*v_7cb;
*/
mlfAssign(&v_7c7, mlfMtimes(mlfCtranspose(R_7b), v_7cb));
/*
*
* % attack angle
* a7=atan2(v_7c7(3),v_7c7(1));
*/
mlfAssign(
&a7,
mlfAtan2(
mlfIndexRef(v_7c7, "(?)", mlfScalar(3.0)),
mlfIndexRef(v_7c7, "(?)", mlfScalar(1.0))));
/*
*
* % fin7 wind frame rotation matrix
* R_w7=[cos(a7) 0 -sin(a7); 0 1 0; sin(a7) 0 cos(a7)];
*/
mlfAssign(
&R_w7,
mlfVertcat(
mlfHorzcat(mlfCos(a7), mlfScalar(0.0), mlfUminus(mlfSin(a7)), NULL),
mlfDoubleMatrix(1, 3, __Array28_r, NULL),
mlfHorzcat(mlfSin(a7), mlfScalar(0.0), mlfCos(a7), NULL),
NULL));
/*
*
* % cl and cd computation
* [cl,cd]=a2clcd(a7);
*/
mlfAssign(&cl, mlfA2clcd(&cd, a7));
/*
*
* % damping forces on 7 wrt w
* F_7w=-0.5*veh.rho*veh.st*(v_7c7(1)^2+v_7c7(3)^2)*[cd; 0; cl];
*/
mlfAssign(
&F_7w,
mlfMtimes(
mlfMtimes(
mlfFeval(
mclValueVarargout(),
mlxMtimes,
mlfFeval(
mclValueVarargout(),
mlxMtimes,
mlfScalar(-0.5),
mlfIndexRef(veh, ".rho"),
NULL),
mlfIndexRef(veh, ".st"),
NULL),
mlfPlus(
mlfMpower(
mlfIndexRef(v_7c7, "(?)", mlfScalar(1.0)), mlfScalar(2.0)),
mlfMpower(
mlfIndexRef(v_7c7, "(?)", mlfScalar(3.0)), mlfScalar(2.0)))),
mlfVertcat(
mlfHorzcat(cd, NULL),
mlfDoubleMatrix(1, 1, __Array29_r, NULL),
mlfHorzcat(cl, NULL),
NULL)));
/*
*
* % damping forces on 7 wrt b
* F_7b=R_7b*R_w7*F_7w;
*/
mlfAssign(&F_7b, mlfMtimes(mlfMtimes(R_7b, R_w7), F_7w));
/*
*
* % moments on 7 with pole in b wrt b
* M_7bb=vp(veh.P7_b,F_7b);
*/
mlfAssign(
&M_7bb,
mlfFeval(
mclValueVarargout(), mlxVp, mlfIndexRef(veh, ".P7_b"), F_7b, NULL));
/*
*
* t7=[F_7b;M_7bb];
*/
mlfAssign(
&t7, mlfVertcat(mlfHorzcat(F_7b, NULL), mlfHorzcat(M_7bb, NULL), NULL));
/*
*
* % --------------------------------------------------------------
* % forces on FIN 8
*
* % fin8 rotation matrix
* R_8b=[cos(de(8)) 0 sin(de(8)); -sin(de(8)) 0 cos(de(8)); 0 -1 0];
*/
mlfAssign(
&R_8b,
mlfVertcat(
mlfHorzcat(
mlfCos(mlfIndexRef(de, "(?)", mlfScalar(8.0))),
mlfScalar(0.0),
mlfSin(mlfIndexRef(de, "(?)", mlfScalar(8.0))),
NULL),
mlfHorzcat(
mlfUminus(mlfSin(mlfIndexRef(de, "(?)", mlfScalar(8.0)))),
mlfScalar(0.0),
mlfCos(mlfIndexRef(de, "(?)", mlfScalar(8.0))),
NULL),
mlfDoubleMatrix(1, 3, __Array30_r, NULL),
NULL));
/*
*
* % relative velocity of fin8 middle point wrt c in b
* v_8cb=vr(1:3)+vp(vr(4:6),veh.P8_b);
*/
mlfAssign(
&v_8cb,
mlfPlus(
mlfIndexRef(vr, "(?)", mlfColon(mlfScalar(1.0), mlfScalar(3.0), NULL)),
mlfFeval(
mclValueVarargout(),
mlxVp,
mlfIndexRef(
vr, "(?)", mlfColon(mlfScalar(4.0), mlfScalar(6.0), NULL)),
mlfIndexRef(veh, ".P8_b"),
NULL)));
/*
*
* % relative velocity of fin8 middle point wrt c in 8
* v_8c8=R_8b'*v_8cb;
*/
mlfAssign(&v_8c8, mlfMtimes(mlfCtranspose(R_8b), v_8cb));
/*
*
* % attack angle
* a8=atan2(v_8c8(3),v_8c8(1));
*/
mlfAssign(
&a8,
mlfAtan2(
mlfIndexRef(v_8c8, "(?)", mlfScalar(3.0)),
mlfIndexRef(v_8c8, "(?)", mlfScalar(1.0))));
/*
*
* % fin8 wind frame rotation matrix
* R_w8=[cos(a8) 0 -sin(a8); 0 1 0; sin(a8) 0 cos(a8)];
*/
mlfAssign(
&R_w8,
mlfVertcat(
mlfHorzcat(mlfCos(a8), mlfScalar(0.0), mlfUminus(mlfSin(a8)), NULL),
mlfDoubleMatrix(1, 3, __Array31_r, NULL),
mlfHorzcat(mlfSin(a8), mlfScalar(0.0), mlfCos(a8), NULL),
NULL));
/*
*
* % cl and cd computation
* [cl,cd]=a2clcd(a8);
*/
mlfAssign(&cl, mlfA2clcd(&cd, a8));
/*
*
* % damping forces on 8 wrt w
* F_8w=-0.5*veh.rho*veh.st*(v_8c8(1)^2+v_8c8(3)^2)*[cd; 0; cl];
*/
mlfAssign(
&F_8w,
mlfMtimes(
mlfMtimes(
mlfFeval(
mclValueVarargout(),
mlxMtimes,
mlfFeval(
mclValueVarargout(),
mlxMtimes,
mlfScalar(-0.5),
mlfIndexRef(veh, ".rho"),
NULL),
mlfIndexRef(veh, ".st"),
NULL),
mlfPlus(
mlfMpower(
mlfIndexRef(v_8c8, "(?)", mlfScalar(1.0)), mlfScalar(2.0)),
mlfMpower(
mlfIndexRef(v_8c8, "(?)", mlfScalar(3.0)), mlfScalar(2.0)))),
mlfVertcat(
mlfHorzcat(cd, NULL),
mlfDoubleMatrix(1, 1, __Array32_r, NULL),
mlfHorzcat(cl, NULL),
NULL)));
/*
*
* % damping forces on 8 wrt b
* F_8b=R_8b*R_w8*F_8w;
*/
mlfAssign(&F_8b, mlfMtimes(mlfMtimes(R_8b, R_w8), F_8w));
/*
*
* % moments on 8 with pole in b wrt b
* M_8bb=vp(veh.P8_b,F_8b);
*/
mlfAssign(
&M_8bb,
mlfFeval(
mclValueVarargout(), mlxVp, mlfIndexRef(veh, ".P8_b"), F_8b, NULL));
/*
*
* t8=[F_8b;M_8bb];
*/
mlfAssign(
&t8, mlfVertcat(mlfHorzcat(F_8b, NULL), mlfHorzcat(M_8bb, NULL), NULL));
/*
*
* % --------------------------------------------------------------
* % resulting hydrodynamic force and moment with pole in b wrt b
*
* td=tf+t1+t2+t3+t4+t5+t6+t7+t8;
*/
mlfAssign(
&td,
mlfPlus(
mlfPlus(
mlfPlus(
mlfPlus(mlfPlus(mlfPlus(mlfPlus(mlfPlus(tf, t1), t2), t3), t4), t5),
t6),
t7),
t8));
mclValidateOutputs("tau_damp", 1, nargout_, &td);
mxDestroyArray(F_1b);
mxDestroyArray(F_1w);
mxDestroyArray(F_2b);
mxDestroyArray(F_2w);
mxDestroyArray(F_3b);
mxDestroyArray(F_3w);
mxDestroyArray(F_4b);
mxDestroyArray(F_4w);
mxDestroyArray(F_5b);
mxDestroyArray(F_5w);
mxDestroyArray(F_6b);
mxDestroyArray(F_6w);
mxDestroyArray(F_7b);
mxDestroyArray(F_7w);
mxDestroyArray(F_8b);
mxDestroyArray(F_8w);
mxDestroyArray(F_Bb);
mxDestroyArray(F_Bw);
mxDestroyArray(M_1bb);
mxDestroyArray(M_2bb);
mxDestroyArray(M_3bb);
mxDestroyArray(M_4bb);
mxDestroyArray(M_5bb);
mxDestroyArray(M_6bb);
mxDestroyArray(M_7bb);
mxDestroyArray(M_8bb);
mxDestroyArray(M_Bbb);
mxDestroyArray(Pf_b);
mxDestroyArray(R_1b);
mxDestroyArray(R_2b);
mxDestroyArray(R_3b);
mxDestroyArray(R_4b);
mxDestroyArray(R_5b);
mxDestroyArray(R_6b);
mxDestroyArray(R_7b);
mxDestroyArray(R_8b);
mxDestroyArray(R_fb);
mxDestroyArray(R_w1);
mxDestroyArray(R_w2);
mxDestroyArray(R_w3);
mxDestroyArray(R_w4);
mxDestroyArray(R_w5);
mxDestroyArray(R_w6);
mxDestroyArray(R_w7);
mxDestroyArray(R_w8);
mxDestroyArray(R_wf);
mxDestroyArray(a1);
mxDestroyArray(a2);
mxDestroyArray(a3);
mxDestroyArray(a4);
mxDestroyArray(a5);
mxDestroyArray(a6);
mxDestroyArray(a7);
mxDestroyArray(a8);
mxDestroyArray(af);
mxDestroyArray(cd);
mxDestroyArray(cl);
mxDestroyArray(i_fb);
mxDestroyArray(k_fb);
mxDestroyArray(sf);
mxDestroyArray(t1);
mxDestroyArray(t2);
mxDestroyArray(t3);
mxDestroyArray(t4);
mxDestroyArray(t5);
mxDestroyArray(t6);
mxDestroyArray(t7);
mxDestroyArray(t8);
mxDestroyArray(tf);
mxDestroyArray(v_1c1);
mxDestroyArray(v_1cb);
mxDestroyArray(v_2c2);
mxDestroyArray(v_2cb);
mxDestroyArray(v_3c3);
mxDestroyArray(v_3cb);
mxDestroyArray(v_4c4);
mxDestroyArray(v_4cb);
mxDestroyArray(v_5c5);
mxDestroyArray(v_5cb);
mxDestroyArray(v_6c6);
mxDestroyArray(v_6cb);
mxDestroyArray(v_7c7);
mxDestroyArray(v_7cb);
mxDestroyArray(v_8c8);
mxDestroyArray(v_8cb);
mxDestroyArray(v_Bcb);
mxDestroyArray(v_Bcf);
mxDestroyArray(xcp);
return td;
}
/*
* The function "mlfTau_damp" contains the normal interface for the "tau_damp"
* M-function from file "E:\RTW\NEW3\TAU_DAMP.M" (lines 1-307). This function
* processes any input arguments and passes them to the implementation version
* of the function, appearing above.
*/
mxArray * mlfTau_damp(mxArray * veh, mxArray * vr, mxArray * de) {
int nargout = 1;
mxArray * td = mclGetUninitializedArray();
mlfEnterNewContext(0, 3, veh, vr, de);
td = Mtau_damp(nargout, veh, vr, de);
mlfRestorePreviousContext(0, 3, veh, vr, de);
return mlfReturnValue(td);
}
/*
* The function "mlxTau_damp" contains the feval interface for the "tau_damp"
* M-function from file "E:\RTW\NEW3\TAU_DAMP.M" (lines 1-307). The feval
* function calls the implementation version of tau_damp through this function.
* This function processes any input arguments and passes them to the
* implementation version of the function, appearing above.
*/
void mlxTau_damp(int nlhs, mxArray * plhs[], int nrhs, mxArray * prhs[]) {
mxArray * mprhs[3];
mxArray * mplhs[1];
int i;
if (nlhs > 1) {
mlfError(
mxCreateString(
"Run-time Error: File: tau_damp Line: 1 Column:"
" 0 The function \"tau_damp\" was called with m"
"ore than the declared number of outputs (1)"));
}
if (nrhs > 3) {
mlfError(
mxCreateString(
"Run-time Error: File: tau_damp Line: 1 Column:"
" 0 The function \"tau_damp\" was called with m"
"ore than the declared number of inputs (3)"));
}
for (i = 0; i < 1; ++i) {
mplhs[i] = NULL;
}
for (i = 0; i < 3 && i < nrhs; ++i) {
mprhs[i] = prhs[i];
}
for (; i < 3; ++i) {
mprhs[i] = NULL;
}
mlfEnterNewContext(0, 3, mprhs[0], mprhs[1], mprhs[2]);
mplhs[0] = Mtau_damp(nlhs, mprhs[0], mprhs[1], mprhs[2]);
mlfRestorePreviousContext(0, 3, mprhs[0], mprhs[1], mprhs[2]);
plhs[0] = mplhs[0];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -