Some code for my calculation can be generated automatically with different
program. For now I just copy and paste the relevant output in my code which
now looks like
>
> function UnitTriangleIntegration(f::Function,NP=16)
>
>
>> xw = [0., 0., 0.]
>
>
>> if NP==16
>
> xw=[0.33333333333333 0.33333333333333 0.14431560767779
>
> 0.45929258829272 0.45929258829272 0.09509163426728
>
> 0.45929258829272 0.08141482341455 0.09509163426728
>
> 0.08141482341455 0.45929258829272 0.09509163426728
>
> 0.17056930775176 0.17056930775176 0.10321737053472
>
> 0.17056930775176 0.65886138449648 0.10321737053472
>
> 0.65886138449648 0.17056930775176 0.10321737053472
>
> 0.05054722831703 0.05054722831703 0.03245849762320
>
> 0.05054722831703 0.89890554336594 0.03245849762320
>
> 0.89890554336594 0.05054722831703 0.03245849762320
>
> 0.26311282963464 0.72849239295540 0.02723031417443
>
> 0.72849239295540 0.00839477740996 0.02723031417443
>
> 0.00839477740996 0.26311282963464 0.02723031417443
>
> 0.72849239295540 0.26311282963464 0.02723031417443
>
> 0.26311282963464 0.00839477740996 0.02723031417443
>
> 0.00839477740996 0.72849239295540 0.02723031417443]
>
> elseif NP==3
>
> xw = [0.16666666666667 0.16666666666667 0.33333333333333
>
> 0.16666666666667 0.66666666666667 0.33333333333333
>
> 0.66666666666667 0.16666666666667 0.33333333333333]
>
> end
>
>
>> s = 0
>
> for j in 1:NP
>
> xi = xw[j,1]
>
> eta = xw[j,2]
>
> w = xw[j,3]
>
>
>> s += f(xi,eta)*w/2
>
> end
>
> return s
>
> end
>
>
>> function ctrquad(f::Function,x::Array{Float64,2})
>
>
>> alpha1 = 1/(1 + norm(x[:,4]-x[:,2])/norm(x[:,4]-x[:,1]))
>
> beta1 = 1/(1 + norm(x[:,6]-x[:,3])/norm(x[:,6]-x[:,1]))
>
> gamma1 = 1/(1 + norm(x[:,5]-x[:,2])/norm(x[:,5]-x[:,3]))
>
>
>> f_(xi,eta) = begin
>
>
>> x_ = x[:,1]*(-eta - xi + 1 + eta^2/beta1 + eta*xi/beta1 -
>> eta/beta1 + eta*xi/alpha1 + xi^2/alpha1 - xi/alpha1) +
>> x[:,2]*(xi*(eta*(alpha1 - gamma1) + (alpha1 - xi)*(gamma1 - 1))/((alpha1 -
>> 1)*(gamma1 - 1))) + x[:,3]*(eta*(gamma1*(beta1 - eta) - xi*(beta1 + gamma1
>> - 1))/(gamma1*(beta1 - 1))) + x[:,4]*(xi*(eta + xi - 1)/(alpha1*(alpha1 -
>> 1))) + x[:,5]*(-eta*xi/(gamma1*(gamma1 - 1)))
>
> + x[:,6]*(eta*(eta + xi - 1)/(beta1*(beta1 - 1)))
>
>
>> e_xi = x[:,1]*(-1 + eta/beta1 + eta/alpha1 + 2*xi/alpha1 -
>> 1/alpha1) + x[:,2]*((eta*(alpha1 - gamma1) - xi*(gamma1 - 1) - (-alpha1 +
>> xi)*(gamma1 - 1))/((alpha1 - 1)*(gamma1 - 1))) + x[:,3]*(-eta*(beta1 +
>> gamma1 - 1)/(gamma1*(beta1 - 1))) + x[:,4]*((eta + 2*xi -
>> 1)/(alpha1*(alpha1 - 1))) + x[:,5]*(-eta/(gamma1*(gamma1 - 1))) +
>> x[:,6]*(eta/(beta1*(beta1 - 1)))
>
>
>> e_eta = x[:,1]*(-1 + 2*eta/beta1 + xi/beta1 - 1/beta1 +
>> xi/alpha1) + x[:,2]*(xi*(alpha1 - gamma1)/((alpha1 - 1)*(gamma1 - 1))) +
>> x[:,3]*(-(eta*gamma1 - gamma1*(beta1 - eta) + xi*(beta1 + gamma1 -
>> 1))/(gamma1*(beta1 - 1))) + x[:,4]*(xi/(alpha1*(alpha1 - 1))) +
>> x[:,5]*(-xi/(gamma1*(gamma1 - 1))) + x[:,6]*((2*eta + xi - 1)/(beta1*(beta1
>> - 1)))
>
>
>> f(x_,e_xi,e_eta)*norm(cross(e_xi,e_eta))
>
> end
>
>
>> UnitTriangleIntegration(f_,16)
>
> end
>
>
>>
>> ### Here is some testing
>
> x1 = [0.,0.,0.]
>
> x2 = [1.,0.,0.]
>
> x3 = [0.,1.,0.]
>
>
>> y = Array(Float64,3,6)
>
> y[:,1] = x1
>
> y[:,2] = x2
>
> y[:,3] = x3
>
> y[:,4] = (x1+x2)/2
>
> y[:,5] = (x2+x3)/2
>
> y[:,6] = (x1+x3)/2
>
>
>> area = ctrquad((x,exi,eeta) -> 1, y)
>
> I would like to put the code from ` f_(xi,eta) = begin ...... end` outside
of this file as it is automaticaly generated. Trying to do it with
`include(...)` failed for me as it checks variables. What sugestions do
have splitting automaticaly generated code from the one which is human
writed? Also are there anything I can do to improve performance?
>
>>
>