59 AA11,AA12,AA13,AA21,AA22,AA23,&
60 AA31,AA32,AA33,BB11,BB12,BB13,&
61 BB21,BB22,BB23,BB31,BB32,BB33,&
62 GG1,GG2,GG3,DD1,DD2,DD3,&
63 x_true,y_true,z_true,el,xref,yref,zref,&
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
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
93 xref = 0.0; yref = 0.0; zref = 0.0
97 if (highest(ie) .gt. elevation)
then
98 csi = 0.0; eta = 0.0; zeta = 0.0
101 dxdx = aa11(ie) + bb12(ie)*zeta + bb13(ie)*eta + gg1(ie)
102 dydx = aa21(ie) + bb22(ie)*zeta + bb23(ie)*eta + gg2(ie)
103 dzdx = aa31(ie) + bb32(ie)*zeta + bb33(ie)*eta + gg3(ie)
105 dxdy = aa12(ie) + bb11(ie)*zeta + bb13(ie)*csi + gg1(ie)
106 dydy = aa22(ie) + bb21(ie)*zeta + bb23(ie)*csi + gg2(ie)
107 dzdy = aa32(ie) + bb31(ie)*zeta + bb33(ie)*csi + gg3(ie)
109 dxdz = aa13(ie) + bb11(ie)*eta + bb12(ie)*csi + gg1(ie)
110 dydz = aa23(ie) + bb21(ie)*eta + bb22(ie)*csi + gg2(ie)
111 dzdz = aa33(ie) + bb31(ie)*eta + bb32(ie)*csi + gg3(ie)
113 det_j = dxdz * (dydx*dzdy - dzdx*dydy) - dydz * (dxdx*dzdy
114 + dzdz * (dxdx*dydy - dydx*dxdy)
117 a11 = +dydy*dzdz -dydz*dzdy
118 a12 = -dydx*dzdz +dydz*dzdx
119 a13 = +dydx*dzdy -dydy*dzdx
121 a21 = -dxdy*dzdz +dxdz*dzdy
122 a22 = +dxdx*dzdz -dxdz*dzdx
123 a23 = -dxdx*dzdy +dxdy*dzdx
125 a31 = +dxdy*dydz -dxdz*dydy
126 a32 = -dxdx*dydz +dxdz*dydx
127 a33 = +dxdx*dydy -dxdy*dydx
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
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
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
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
148 csi = csi + delta_csi
149 eta = eta + delta_eta
150 zeta = zeta + delta_zeta
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
161 dist = termx*termx +termy*termy +termz*termz
163 if (dist.lt.dist_min)
then
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.