Home > src > matlab > nodal3DCurv.m

nodal3DCurv

PURPOSE ^

----------------------------------------------------------------------------

SYNOPSIS ^

function [Nx, Ny, Nz] = nodal3DCurv(k, X, Y, Z)

DESCRIPTION ^

 ----------------------------------------------------------------------------
 SPDX-License-Identifier: GPL-3.0-or-later
 © 2008-2024 San Diego State University Research Foundation (SDSURF).
 See LICENSE file or https://www.gnu.org/licenses/gpl-3.0.html for details.
 ----------------------------------------------------------------------------

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function [Nx, Ny, Nz] = nodal3DCurv(k, X, Y, Z)
0002 % ----------------------------------------------------------------------------
0003 % SPDX-License-Identifier: GPL-3.0-or-later
0004 % © 2008-2024 San Diego State University Research Foundation (SDSURF).
0005 % See LICENSE file or https://www.gnu.org/licenses/gpl-3.0.html for details.
0006 % ----------------------------------------------------------------------------
0007 
0008     % Get the determinant of the jacobian and the metrics
0009     [J, Xe, Xn, Xc, Ye, Yn, Yc, Ze, Zn, Zc] = jacobian3D(k, X, Y, Z);
0010     
0011     % Dimensions of nodal grid
0012     [n, m, o] = size(X);
0013     
0014     len = n*m*o;
0015     
0016     % Convert metrics to diagonal matrices
0017     J = spdiags(1./J, 0, numel(len), numel(len));
0018     A = spdiags(Yn.*Zc-Zn.*Yc, 0, len, len);
0019     B = spdiags(Zn.*Xc-Xn.*Zc, 0, len, len);
0020     C = spdiags(Xn.*Yc-Yn.*Xc, 0, len, len);
0021     D = spdiags(Ze.*Yc-Ye.*Zc, 0, len, len);
0022     E = spdiags(Xe.*Zc-Ze.*Xc, 0, len, len);
0023     F = spdiags(Ye.*Xc-Xe.*Yc, 0, len, len);
0024     G = spdiags(Ye.*Zn-Ze.*Yn, 0, len, len);
0025     H = spdiags(Ze.*Xn-Xe.*Zn, 0, len, len);
0026     I = spdiags(Xe.*Yn-Ye.*Xn, 0, len, len);
0027     
0028     % Construct 3D uniform nodal operator
0029     N = nodal3D(k, m, 1, n, 1, o, 1); % N is tall and skinny
0030     Ne = N(1:len, :);
0031     Nn = N(len+1:2*len, :);
0032     Nc = N(2*len+1:end, :);
0033     
0034     % Apply transformation
0035     Nx = J*(A*Ne+D*Nn+G*Nc);
0036     Ny = J*(B*Ne+E*Nn+H*Nc);
0037     Nz = J*(C*Ne+F*Nn+I*Nc);
0038     
0039     %  [J*A J*D J*G;
0040     %   J*B J*E J*H;
0041     %   J*C J*F J*I]*[Ne; Nn; Nc]
0042 end

Generated on Tue 18-Mar-2025 18:53:27 by m2html © 2003-2022