SPEED
GET_PNT_POS_PGM.f90 File Reference

Go to the source code of this file.

Functions/Subroutines

subroutine get_pnt_pos_pgm (nb_el, aa11, aa12, aa13, aa21, aa22, aa23, aa31, aa32, aa33, bb11, bb12, bb13, bb21, bb22, bb23, bb31, bb32, bb33, gg1, gg2, gg3, dd1, dd2, dd3, x_true, y_true, z_true, el, xref, yref, zref,
 Findes node coordinates in the reference element.
 

Function/Subroutine Documentation

◆ get_pnt_pos_pgm()

subroutine get_pnt_pos_pgm ( integer*4  nb_el,
real*8, dimension(nb_el)  aa11,
real*8, dimension(nb_el)  aa12,
real*8, dimension(nb_el)  aa13,
real*8, dimension(nb_el)  aa21,
real*8, dimension(nb_el)  aa22,
real*8, dimension(nb_el)  aa23,
real*8, dimension(nb_el)  aa31,
real*8, dimension(nb_el)  aa32,
real*8, dimension(nb_el)  aa33,
real*8, dimension(nb_el)  bb11,
real*8, dimension(nb_el)  bb12,
real*8, dimension(nb_el)  bb13,
real*8, dimension(nb_el)  bb21,
real*8, dimension(nb_el)  bb22,
real*8, dimension(nb_el)  bb23,
real*8, dimension(nb_el)  bb31,
real*8, dimension(nb_el)  bb32,
real*8, dimension(nb_el)  bb33,
real*8, dimension(nb_el)  gg1,
real*8, dimension(nb_el)  gg2,
real*8, dimension(nb_el)  gg3,
real*8, dimension(nb_el)  dd1,
real*8, dimension(nb_el)  dd2,
real*8, dimension(nb_el)  dd3,
real*8  x_true,
real*8  y_true,
real*8  z_true,
integer*4  el,
real*8  xref,
real*8  yref,
real*8  zref 
)

Findes node coordinates in the reference element.

Author
Ilario Mazzieri
Date
September, 2013
Version
1.0
Parameters
[in]nb_elnumber of elements
[in]A11costant values for the bilinear map
[in]A12costant values for the bilinear map
[in]A13costant values for the bilinear map
[in]A21costant values for the bilinear map
[in]A22costant values for the bilinear map
[in]A23costant values for the bilinear map
[in]A31costant values for the bilinear map
[in]A32costant values for the bilinear map
[in]A33costant values for the bilinear map
[in]B11costant values for the bilinear map
[in]B12costant values for the bilinear map
[in]B13costant values for the bilinear map
[in]B21costant values for the bilinear map
[in]B22costant values for the bilinear map
[in]B23costant values for the bilinear map
[in]B31costant values for the bilinear map
[in]B32costant values for the bilinear map
[in]B33costant values for the bilinear map
[in]GG1costant values for the bilinear map
[in]GG2costant values for the bilinear map
[in]GG3costant values for the bilinear map
[in]DD1costant values for the bilinear map
[in]DD2costant values for the bilinear map
[in]DD3costant values for the bilinear map
[in]x_truex-coordinate of the node
[in]y_truey-coordinate of the node
[in]z_truez-coordinate of the node
[in]highestelevation of the elemnt
[in]elevationmaximal elevation
[out]elelement index
[out]xrefx-coordinate in the refernce element
[out]yrefy-coordinate in the refernce element
[out]zrefz-coordinate in the refernce element

Definition at line 58 of file GET_PNT_POS_PGM.f90.

64 highest,elevation)
65
66 implicit none
67
68 integer*4 :: nb_el,el
69 integer*4 :: inr,ie
70
71 real*8 :: x_true,y_true,z_true,xref,yref,zref
72 real*8 :: csi,eta,zeta,delta_csi,delta_eta,delta_zeta,dist,dist_min
73 real*8 :: termx,termy,termz,det_j
74 real*8 :: dxdx,dxdy,dxdz
75 real*8 :: dydx,dydy,dydz
76 real*8 :: dzdx,dzdy,dzdz
77 real*8 :: a11,a12,a13
78 real*8 :: a21,a22,a23
79 real*8 :: a31,a32,a33
80 real*8 :: elevation
81
82 real*8, dimension(nb_el) :: aa11,aa12,aa13
83 real*8, dimension(nb_el) :: aa21,aa22,aa23
84 real*8, dimension(nb_el) :: aa31,aa32,aa33
85 real*8, dimension(nb_el) :: bb11,bb12,bb13
86 real*8, dimension(nb_el) :: bb21,bb22,bb23
87 real*8, dimension(nb_el) :: bb31,bb32,bb33
88 real*8, dimension(nb_el) :: gg1,gg2,gg3
89 real*8, dimension(nb_el) :: dd1,dd2,dd3
90 real*8, dimension(nb_el) :: highest
91
92 dist_min = 1.0e20
93 xref = 0.0; yref = 0.0; zref = 0.0
94 el = 1
95
96 do ie = 1,nb_el
97 if (highest(ie) .gt. elevation) then
98 csi = 0.0; eta = 0.0; zeta = 0.0
99
100 do inr = 1, 100
101 dxdx = aa11(ie) + bb12(ie)*zeta + bb13(ie)*eta + gg1(ie)*eta*zeta
102 dydx = aa21(ie) + bb22(ie)*zeta + bb23(ie)*eta + gg2(ie)*eta*zeta
103 dzdx = aa31(ie) + bb32(ie)*zeta + bb33(ie)*eta + gg3(ie)*eta*zeta
104
105 dxdy = aa12(ie) + bb11(ie)*zeta + bb13(ie)*csi + gg1(ie)*zeta*csi
106 dydy = aa22(ie) + bb21(ie)*zeta + bb23(ie)*csi + gg2(ie)*zeta*csi
107 dzdy = aa32(ie) + bb31(ie)*zeta + bb33(ie)*csi + gg3(ie)*zeta*csi
108
109 dxdz = aa13(ie) + bb11(ie)*eta + bb12(ie)*csi + gg1(ie)*csi*eta
110 dydz = aa23(ie) + bb21(ie)*eta + bb22(ie)*csi + gg2(ie)*csi*eta
111 dzdz = aa33(ie) + bb31(ie)*eta + bb32(ie)*csi + gg3(ie)*csi*eta
112
113 det_j = dxdz * (dydx*dzdy - dzdx*dydy) - dydz * (dxdx*dzdy - dzdx*dxdy) &
114 + dzdz * (dxdx*dydy - dydx*dxdy)
115
116
117 a11 = +dydy*dzdz -dydz*dzdy
118 a12 = -dydx*dzdz +dydz*dzdx
119 a13 = +dydx*dzdy -dydy*dzdx
120
121 a21 = -dxdy*dzdz +dxdz*dzdy
122 a22 = +dxdx*dzdz -dxdz*dzdx
123 a23 = -dxdx*dzdy +dxdy*dzdx
124
125 a31 = +dxdy*dydz -dxdz*dydy
126 a32 = -dxdx*dydz +dxdz*dydx
127 a33 = +dxdx*dydy -dxdy*dydx
128
129 termx = aa11(ie)*csi + aa12(ie)*eta &
130 + aa13(ie)*zeta + bb11(ie)*eta*zeta &
131 + bb12(ie)*csi*zeta + bb13(ie)*csi*eta &
132 + gg1(ie)*csi*eta*zeta + dd1(ie) -x_true
133
134 termy = aa21(ie)*csi + aa22(ie)*eta &
135 + aa23(ie)*zeta + bb21(ie)*eta*zeta &
136 + bb22(ie)*csi*zeta + bb23(ie)*csi*eta &
137 + gg2(ie)*csi*eta*zeta + dd2(ie) -y_true
138
139 termz = aa31(ie)*csi + aa32(ie)*eta &
140 + aa33(ie)*zeta + bb31(ie)*eta*zeta &
141 + bb32(ie)*csi*zeta + bb33(ie)*csi*eta &
142 + gg3(ie)*csi*eta*zeta + dd3(ie) -z_true
143
144 delta_csi = -(a11*termx +a21*termy +a31*termz) / det_j
145 delta_eta = -(a12*termx +a22*termy +a32*termz) / det_j
146 delta_zeta = -(a13*termx +a23*termy +a33*termz) / det_j
147
148 csi = csi + delta_csi
149 eta = eta + delta_eta
150 zeta = zeta + delta_zeta
151
152 if (csi.lt.-1.0) csi = -1.0
153 if (csi.gt. 1.0) csi = 1.0
154 if (eta.lt.-1.0) eta = -1.0
155 if (eta.gt. 1.0) eta = 1.0
156 if (zeta.lt.-1.0) zeta = -1.0
157 if (zeta.gt. 1.0) zeta = 1.0
158
159 enddo
160
161 dist = termx*termx +termy*termy +termz*termz
162
163 if (dist.lt.dist_min) then
164 el = ie
165 xref = csi
166 yref = eta
167 zref = zeta
168 dist_min = dist
169 endif
170
171 endif !if (highest(ie).gt.elevation) then
172
173 enddo !do ie = 1,nb_el
174
175 return
176

Referenced by find_monitor_position(), and read_system_position().

Here is the caller graph for this function: