https://github.com/sueda/eol-cloth
Revision 28fad2e07ec31f0dfd2c681878904e707f6715d5 authored by Shinjiro Sueda on 11 September 2018, 15:17:28 UTC, committed by GitHub on 11 September 2018, 15:17:28 UTC
1 parent 3c3ef84
Tip revision: 28fad2e07ec31f0dfd2c681878904e707f6715d5 authored by Shinjiro Sueda on 11 September 2018, 15:17:28 UTC
Create LICENSE
Create LICENSE
Tip revision: 28fad2e
ComputeInertial.cpp
#include <cmath>
void ComputeInertial(
const double *xa, // [input 3x1] World position of vertex A
const double *xb, // [input 3x1] World position of vertex B
const double *xc, // [input 3x1] World position of vertex C
const double *Xa, // [input 2x1] Material position of vertex A
const double *Xb, // [input 2x1] Material position of vertex B
const double *Xc, // [input 2x1] Material position of vertex C
const double *g, // [input 3x1] 3D gravity vector
double rho, // [input 1x1] Density (mass per area)
double *W, // [output 1x1] Gravitational potential energy
double *f, // [output 9x1] Gravity force vector
double *M) // [output 9x9] Inertia matrix
{
double xax = xa[0];
double xay = xa[1];
double xaz = xa[2];
double xbx = xb[0];
double xby = xb[1];
double xbz = xb[2];
double xcx = xc[0];
double xcy = xc[1];
double xcz = xc[2];
double Xax = Xa[0];
double Xay = Xa[1];
double Xbx = Xb[0];
double Xby = Xb[1];
double Xcx = Xc[0];
double Xcy = Xc[1];
double gx = g[0];
double gy = g[1];
double gz = g[2];
double t8 = rho * (Xax * Xby - Xax * Xcy - Xbx * Xay + Xcx * Xay + Xbx * Xcy - Xcx * Xby);
double W00 = -t8 * (gx * (xbx - xcx) / 6 + gy * (xby - xcy) / 6 + gz * (xbz - xcz) / 6 + gx * (xax - xcx) / 6 + gy * (xay - xcy) / 6 + gz * (xaz - xcz) / 6 + gx * xcx / 2 + gy * xcy / 2 + gz * xcz / 2);
double f01 = t8 * gx / 6;
double f02 = t8 * gy / 6;
double f03 = t8 * gz / 6;
double f04 = f01;
double f05 = f02;
double f06 = f03;
double f07 = f04;
double f08 = f05;
double f09 = f06;
double M0101 = t8 / 12;
double M0102 = 0;
double M0103 = 0;
double M0104 = t8 / 24;
double M0105 = 0;
double M0106 = 0;
double M0107 = M0104;
double M0108 = 0;
double M0109 = 0;
double M0201 = 0;
double M0202 = M0101;
double M0203 = 0;
double M0204 = 0;
double M0205 = M0107;
double M0206 = 0;
double M0207 = 0;
double M0208 = M0205;
double M0209 = 0;
double M0301 = 0;
double M0302 = 0;
double M0303 = M0202;
double M0304 = 0;
double M0305 = 0;
double M0306 = M0208;
double M0307 = 0;
double M0308 = 0;
double M0309 = M0306;
double M0401 = M0309;
double M0402 = 0;
double M0403 = 0;
double M0404 = M0303;
double M0405 = 0;
double M0406 = 0;
double M0407 = M0401;
double M0408 = 0;
double M0409 = 0;
double M0501 = 0;
double M0502 = M0407;
double M0503 = 0;
double M0504 = 0;
double M0505 = M0404;
double M0506 = 0;
double M0507 = 0;
double M0508 = M0502;
double M0509 = 0;
double M0601 = 0;
double M0602 = 0;
double M0603 = M0508;
double M0604 = 0;
double M0605 = 0;
double M0606 = M0505;
double M0607 = 0;
double M0608 = 0;
double M0609 = M0603;
double M0701 = M0609;
double M0702 = 0;
double M0703 = 0;
double M0704 = M0701;
double M0705 = 0;
double M0706 = 0;
double M0707 = M0606;
double M0708 = 0;
double M0709 = 0;
double M0801 = 0;
double M0802 = M0704;
double M0803 = 0;
double M0804 = 0;
double M0805 = M0802;
double M0806 = 0;
double M0807 = 0;
double M0808 = M0707;
double M0809 = 0;
double M0901 = 0;
double M0902 = 0;
double M0903 = M0805;
double M0904 = 0;
double M0905 = 0;
double M0906 = M0903;
double M0907 = 0;
double M0908 = 0;
double M0909 = M0808;
W[0]=W00;
f[0]=f01; f[1]=f02; f[2]=f03; f[3]=f04; f[4]=f05; f[5]=f06; f[6]=f07; f[7]=f08; f[8]=f09;
M[ 0*9+ 0]=M0101; M[ 0*9+ 1]=M0102; M[ 0*9+ 2]=M0103; M[ 0*9+ 3]=M0104; M[ 0*9+ 4]=M0105; M[ 0*9+ 5]=M0106; M[ 0*9+ 6]=M0107; M[ 0*9+ 7]=M0108; M[ 0*9+ 8]=M0109;
M[ 1*9+ 0]=M0201; M[ 1*9+ 1]=M0202; M[ 1*9+ 2]=M0203; M[ 1*9+ 3]=M0204; M[ 1*9+ 4]=M0205; M[ 1*9+ 5]=M0206; M[ 1*9+ 6]=M0207; M[ 1*9+ 7]=M0208; M[ 1*9+ 8]=M0209;
M[ 2*9+ 0]=M0301; M[ 2*9+ 1]=M0302; M[ 2*9+ 2]=M0303; M[ 2*9+ 3]=M0304; M[ 2*9+ 4]=M0305; M[ 2*9+ 5]=M0306; M[ 2*9+ 6]=M0307; M[ 2*9+ 7]=M0308; M[ 2*9+ 8]=M0309;
M[ 3*9+ 0]=M0401; M[ 3*9+ 1]=M0402; M[ 3*9+ 2]=M0403; M[ 3*9+ 3]=M0404; M[ 3*9+ 4]=M0405; M[ 3*9+ 5]=M0406; M[ 3*9+ 6]=M0407; M[ 3*9+ 7]=M0408; M[ 3*9+ 8]=M0409;
M[ 4*9+ 0]=M0501; M[ 4*9+ 1]=M0502; M[ 4*9+ 2]=M0503; M[ 4*9+ 3]=M0504; M[ 4*9+ 4]=M0505; M[ 4*9+ 5]=M0506; M[ 4*9+ 6]=M0507; M[ 4*9+ 7]=M0508; M[ 4*9+ 8]=M0509;
M[ 5*9+ 0]=M0601; M[ 5*9+ 1]=M0602; M[ 5*9+ 2]=M0603; M[ 5*9+ 3]=M0604; M[ 5*9+ 4]=M0605; M[ 5*9+ 5]=M0606; M[ 5*9+ 6]=M0607; M[ 5*9+ 7]=M0608; M[ 5*9+ 8]=M0609;
M[ 6*9+ 0]=M0701; M[ 6*9+ 1]=M0702; M[ 6*9+ 2]=M0703; M[ 6*9+ 3]=M0704; M[ 6*9+ 4]=M0705; M[ 6*9+ 5]=M0706; M[ 6*9+ 6]=M0707; M[ 6*9+ 7]=M0708; M[ 6*9+ 8]=M0709;
M[ 7*9+ 0]=M0801; M[ 7*9+ 1]=M0802; M[ 7*9+ 2]=M0803; M[ 7*9+ 3]=M0804; M[ 7*9+ 4]=M0805; M[ 7*9+ 5]=M0806; M[ 7*9+ 6]=M0807; M[ 7*9+ 7]=M0808; M[ 7*9+ 8]=M0809;
M[ 8*9+ 0]=M0901; M[ 8*9+ 1]=M0902; M[ 8*9+ 2]=M0903; M[ 8*9+ 3]=M0904; M[ 8*9+ 4]=M0905; M[ 8*9+ 5]=M0906; M[ 8*9+ 6]=M0907; M[ 8*9+ 7]=M0908; M[ 8*9+ 8]=M0909;
}
Computing file changes ...