158 subroutine compute_hexa_jacobian(ihexa,xisol,etsol,zesol,dxidx,dxidy,dxidz,detdx,detdy,detdz,dzedx,dzedy,dzedz,det)
164 ,ig_hexa_gnode_etloc&
165 ,ig_hexa_gnode_zeloc&
171 ,ig_hexa_gnode_glonum&
180 real ,
intent( in) :: xisol
181 real ,
intent( in) :: etsol
182 real ,
intent( in) :: zesol
183 integer,
intent( in) :: ihexa
184 real ,
intent(out) :: dxidx
185 real ,
intent(out) :: dxidy
186 real ,
intent(out) :: dxidz
187 real ,
intent(out) :: detdx
188 real ,
intent(out) :: detdy
189 real ,
intent(out) :: detdz
190 real ,
intent(out) :: dzedx
191 real ,
intent(out) :: dzedy
192 real ,
intent(out) :: dzedz
193 real ,
intent(out) :: det
195 real ,
parameter :: eps = 1.0e-8
234 do m = 1,ig_hexa_nnode
236 lag_deriv_xi =
lagrad_geom(ig_hexa_gnode_xiloc(m),xisol,ig_line_nnode)
237 lag_deriv_et =
lagrad_geom(ig_hexa_gnode_etloc(m),etsol,ig_line_nnode)
238 lag_deriv_ze =
lagrad_geom(ig_hexa_gnode_zeloc(m),zesol,ig_line_nnode)
240 lag_xi =
lagrap_geom(ig_hexa_gnode_xiloc(m),xisol,ig_line_nnode)
241 lag_et =
lagrap_geom(ig_hexa_gnode_etloc(m),etsol,ig_line_nnode)
242 lag_ze =
lagrap_geom(ig_hexa_gnode_zeloc(m),zesol,ig_line_nnode)
244 xgnode = rg_gnode_x(ig_hexa_gnode_glonum(m,ihexa))
245 ygnode = rg_gnode_y(ig_hexa_gnode_glonum(m,ihexa))
246 zgnode = rg_gnode_z(ig_hexa_gnode_glonum(m,ihexa))
248 xxi = xxi + lag_deriv_xi*lag_et*lag_ze*xgnode
249 yxi = yxi + lag_deriv_xi*lag_et*lag_ze*ygnode
250 zxi = zxi + lag_deriv_xi*lag_et*lag_ze*zgnode
252 xet = xet + lag_xi*lag_deriv_et*lag_ze*xgnode
253 yet = yet + lag_xi*lag_deriv_et*lag_ze*ygnode
254 zet = zet + lag_xi*lag_deriv_et*lag_ze*zgnode
256 xze = xze + lag_xi*lag_et*lag_deriv_ze*xgnode
257 yze = yze + lag_xi*lag_et*lag_deriv_ze*ygnode
258 zze = zze + lag_xi*lag_et*lag_deriv_ze*zgnode
264 det = xxi*yet*zze - xxi*yze*zet + xet*yze*zxi - xet*yxi*zze + xze*yxi*zet - xze*yet*zxi
268 write(*,*)
"***error in compute_hexa_jacobian: det null or negative, det = ",det
269 write(*,*)
"***element ",ihexa,
"cpu ",ig_myrank
270 call mpi_abort(mpi_comm_world,100,ios)
277 dxidx = (yet*zze-yze*zet)*inv_det
278 dxidy = (xze*zet-xet*zze)*inv_det
279 dxidz = (xet*yze-xze*yet)*inv_det
280 detdx = (yze*zxi-yxi*zze)*inv_det
281 detdy = (xxi*zze-xze*zxi)*inv_det
282 detdz = (xze*yxi-xxi*yze)*inv_det
283 dzedx = (yxi*zet-yet*zxi)*inv_det
284 dzedy = (xet*zxi-xxi*zet)*inv_det
285 dzedz = (xxi*yet-xet*yxi)*inv_det
311 ,ig_quad_gnode_etloc&
317 ,ig_quadf_gnode_glonum&
325 real ,
intent(out) :: dxidx
326 real ,
intent(out) :: dxidy
327 real ,
intent(out) :: detdx
328 real ,
intent(out) :: detdy
329 real ,
intent( in) :: xisol
330 real ,
intent( in) :: etsol
331 integer,
intent( in) :: iquad
333 real ,
parameter :: eps = 1.0e-8
360 do m = 1,ig_quad_nnode
362 lag_deriv_xi =
lagrad_geom(ig_quad_gnode_xiloc(m),xisol,ig_line_nnode)
363 lag_deriv_et =
lagrad_geom(ig_quad_gnode_etloc(m),etsol,ig_line_nnode)
365 lag_xi =
lagrap_geom(ig_quad_gnode_xiloc(m),xisol,ig_line_nnode)
366 lag_et =
lagrap_geom(ig_quad_gnode_etloc(m),etsol,ig_line_nnode)
368 xgnode = rg_gnode_x(ig_quadf_gnode_glonum(m,iquad))
369 ygnode = rg_gnode_y(ig_quadf_gnode_glonum(m,iquad))
371 xxi = xxi + lag_deriv_xi*lag_et*xgnode
372 yxi = yxi + lag_deriv_xi*lag_et*ygnode
374 xet = xet + lag_xi*lag_deriv_et*xgnode
375 yet = yet + lag_xi*lag_deriv_et*ygnode
382 det = xxi*yet - xet*yxi
386 write(*,*)
"***error in compute_quad_jacobian: det null or negative, det = ",det
387 write(*,*)
"***element ",iquad,
"cpu ",ig_myrank
388 call mpi_abort(mpi_comm_world,100,ios)
395 dxidx = (+yet)*inv_det
396 dxidy = (-xet)*inv_det
397 detdx = (-yxi)*inv_det
398 detdy = (+xxi)*inv_det
subroutine, public compute_hexa_jacobian(ihexa, xisol, etsol, zesol, dxidx, dxidy, dxidz, detdx, detdy, detdz, dzedx, dzedy, dzedz, det)
This subroutine computes jacobian matrix and its determinant at location in hexahedron element ihexa...
real function, public lagrad_geom(i, x, n)
function to compute value of the derivative of order Lagrange polynomial of geometric node i at absc...
This module defines all global variables of EFISPEC3D. Scalar variables are initialized directly in t...
real function, public lagrap_geom(i, x, n)
function to compute value of order Lagrange polynomial of geometric node i at abscissa : ...
subroutine, public compute_quad_jacobian(iquad, xisol, etsol, dxidx, dxidy, detdx, detdy, det)
This subroutine computes jacobian matrix and its determinant at location in quadrangle element iquad...
This module contains functions to compute Lagrange polynomials and its derivatives; and to interpolat...
This module contains subroutines to compute jacobian matrix.