TABLE OF CONTENTS


GEO/pni [ Modules ]

[ Top ] [ Modules ]

NOM

 pni(bl,vi,vj,vk)

DESCRIPTION

 calcul  d un point en position i,j,k dans un bloc quelconque
 maille de facon cartesienne 

 calculating a point at position i,j,k in any block Cartesian mesh 
 
 
    ENTREES / INPUT
  bl: bloc
  vi,vj,vk : indices du point a creer
    SORTIES / OUTPUT

SOURCE

! Ce logiciel est regi par la licence [CeCILL-B]
! This software is governed by the [CeCILL-B] license
!=========================== DEBUT DES DECLARATIONS ==================== 
!.1-----  Implicit, Use
  use geo_typ
  IMPLICIT NONE
!.2-----  Declaration
  integer,intent(in)               :: i2d!! =1 ->2D, =0 -> 3D , =-1 ->1D
  type(bloc),intent(in)            :: bl !! Bloc / Block
  real(kind=kind(0.d0)),intent(in) :: vi,vj,vk
!! position i,j,k dans le maillage cartesien du bloc / position i,j,k in the Cartesian mesh of the block
  
  type(point)                      :: pni
  real(kind=kind(0.d0))            :: am,ap,bm,bp,cm,cp
  integer :: ia
!=========================== DEBUT DU CODE EXECUTABLE ==================
! Initialisations

  am=1.d0-1.d0*(vi-1)/(bl%nx*2**(bl%nrb))
  ap=     1.d0*(vi-1)/(bl%nx*2**(bl%nrb))
  bm=1.d0-1.d0*(vj-1)/(bl%ny*2**(bl%nrb))
  bp=     1.d0*(vj-1)/(bl%ny*2**(bl%nrb))
  cm=1.d0-1.d0*(vk-1.+0.)/(bl%nz*2**(bl%nrb))
  cp=     1.d0*(vk-1.+0.)/(bl%nz*2**(bl%nrb))
  IF(i2d.eq.1) THEN
      cm=1.d0-1.d0*(vk-1.+0.)
      cp=     1.d0*(vk-1.+0.)
  ENDIF
  IF(i2d.eq.-1) THEN
        bm=1.d0-1.d0*(vj-1)
        bp=     1.d0*(vj-1)
        cm=1.d0-1.d0*(vk-1.+0.)
        cp=     1.d0*(vk-1.+0.)
  END IF
       
  pni%x=am*bm*cm*bl%s(1)%x + &
        ap*bm*cm*bl%s(2)%x + &
        ap*bp*cm*bl%s(3)%x + &
        am*bp*cm*bl%s(4)%x + &
        am*bm*cp*bl%s(5)%x + &
        ap*bm*cp*bl%s(6)%x + &
        ap*bp*cp*bl%s(7)%x + &
        am*bp*cp*bl%s(8)%x 
  pni%y=am*bm*cm*bl%s(1)%y + &
        ap*bm*cm*bl%s(2)%y + &
        ap*bp*cm*bl%s(3)%y + &
        am*bp*cm*bl%s(4)%y + &
        am*bm*cp*bl%s(5)%y + &
        ap*bm*cp*bl%s(6)%y + &
        ap*bp*cp*bl%s(7)%y + &
        am*bp*cp*bl%s(8)%y 
  pni%z=am*bm*cm*bl%s(1)%z + &
        ap*bm*cm*bl%s(2)%z + &
        ap*bp*cm*bl%s(3)%z + &
        am*bp*cm*bl%s(4)%z + &
        am*bm*cp*bl%s(5)%z + &
        ap*bm*cp*bl%s(6)%z + &
        ap*bp*cp*bl%s(7)%z + &
        am*bp*cp*bl%s(8)%z 
!------------------------------------------
  ia=-int(dlog(petit)/dlog(10.d0)-2.d0)
  pni%x=dnint(pni%x*10.d0**ia)/10.d0**ia
  pni%y=dnint(pni%y*10.d0**ia)/10.d0**ia
  pni%z=dnint(pni%z*10.d0**ia)/10.d0**ia

return
!===========================   FIN DE LA ROUTINE    ====================
END FUNCTION pni

GEO/volbloc [ Modules ]

[ Top ] [ Modules ]

NOM

 volbloc(bl)

DESCRIPTION

 Calcul du volume d un bloc 

 Calculate the volume of a block
 
    ENTREES / INPUT
     bl: bloc / block

    SORTIES / OUTPUT
     bl: bloc / block

SOURCE

! Ce logiciel est regi par la licence [CeCILL-B]
! This software is governed by the [CeCILL-B] license
!=========================== DEBUT DES DECLARATIONS ==================== 
!.1-----  Implicit, Use
  use geo_typ
  IMPLICIT NONE
!.2-----  Declaration
  type(bloc),intent(in) :: bl !! Bloc / Block
!=========================== DEBUT DU CODE EXECUTABLE ==================
! Initialisations
  volbloc= &
  dabs((bl%s(2)%y-bl%s(1)%y)*(bl%s(4)%z-bl%s(1)%z)*(bl%s(5)%x-bl%s(1)%x) &
      -(bl%s(4)%y-bl%s(1)%y)*(bl%s(2)%z-bl%s(1)%z)*(bl%s(5)%x-bl%s(1)%x)  &
      -(bl%s(2)%x-bl%s(1)%x)*(bl%s(4)%z-bl%s(1)%z)*(bl%s(5)%y-bl%s(1)%y) &
      +(bl%s(4)%x-bl%s(1)%x)*(bl%s(2)%z-bl%s(1)%z)*(bl%s(5)%y-bl%s(1)%y)+ &
       (bl%s(2)%x-bl%s(1)%x)*(bl%s(4)%y-bl%s(1)%y)*(bl%s(5)%z-bl%s(1)%z) &
      -(bl%s(4)%x-bl%s(1)%x)*(bl%s(2)%y-bl%s(1)%y)*(bl%s(5)%z-bl%s(1)%z))+&
  
  dabs((bl%s(3)%y-bl%s(2)%y)*(bl%s(4)%z-bl%s(2)%z)*(bl%s(7)%x-bl%s(2)%x) &
      -(bl%s(4)%y-bl%s(2)%y)*(bl%s(3)%z-bl%s(2)%z)*(bl%s(7)%x-bl%s(2)%x)  &
      -(bl%s(3)%x-bl%s(2)%x)*(bl%s(4)%z-bl%s(2)%z)*(bl%s(7)%y-bl%s(2)%y) &
      +(bl%s(4)%x-bl%s(2)%x)*(bl%s(3)%z-bl%s(2)%z)*(bl%s(7)%y-bl%s(2)%y)+ &
       (bl%s(3)%x-bl%s(2)%x)*(bl%s(4)%y-bl%s(2)%y)*(bl%s(7)%z-bl%s(2)%z) &
      -(bl%s(4)%x-bl%s(2)%x)*(bl%s(3)%y-bl%s(2)%y)*(bl%s(7)%z-bl%s(2)%z))+&
         
  dabs((bl%s(6)%y-bl%s(4)%y)*(bl%s(7)%z-bl%s(4)%z)*(bl%s(2)%x-bl%s(4)%x) &
      -(bl%s(7)%y-bl%s(4)%y)*(bl%s(6)%z-bl%s(4)%z)*(bl%s(2)%x-bl%s(4)%x)  &
      -(bl%s(6)%x-bl%s(4)%x)*(bl%s(7)%z-bl%s(4)%z)*(bl%s(2)%y-bl%s(4)%y) &
      +(bl%s(7)%x-bl%s(4)%x)*(bl%s(6)%z-bl%s(4)%z)*(bl%s(2)%y-bl%s(4)%y)+ &
       (bl%s(6)%x-bl%s(4)%x)*(bl%s(7)%y-bl%s(4)%y)*(bl%s(2)%z-bl%s(4)%z) &
      -(bl%s(7)%x-bl%s(4)%x)*(bl%s(6)%y-bl%s(4)%y)*(bl%s(2)%z-bl%s(4)%z))+&
          
  dabs((bl%s(8)%y-bl%s(6)%y)*(bl%s(7)%z-bl%s(6)%z)*(bl%s(4)%x-bl%s(6)%x) &
      -(bl%s(7)%y-bl%s(6)%y)*(bl%s(8)%z-bl%s(6)%z)*(bl%s(4)%x-bl%s(6)%x)  &
      -(bl%s(8)%x-bl%s(6)%x)*(bl%s(7)%z-bl%s(6)%z)*(bl%s(4)%y-bl%s(6)%y) &
      +(bl%s(7)%x-bl%s(6)%x)*(bl%s(8)%z-bl%s(6)%z)*(bl%s(4)%y-bl%s(6)%y)+ &
       (bl%s(8)%x-bl%s(6)%x)*(bl%s(7)%y-bl%s(6)%y)*(bl%s(4)%z-bl%s(6)%z) &
      -(bl%s(7)%x-bl%s(6)%x)*(bl%s(8)%y-bl%s(6)%y)*(bl%s(4)%z-bl%s(6)%z))+&
  
  dabs((bl%s(5)%y-bl%s(4)%y)*(bl%s(8)%z-bl%s(4)%z)*(bl%s(6)%x-bl%s(4)%x) &
      -(bl%s(8)%y-bl%s(4)%y)*(bl%s(5)%z-bl%s(4)%z)*(bl%s(6)%x-bl%s(4)%x)  &
      -(bl%s(5)%x-bl%s(4)%x)*(bl%s(8)%z-bl%s(4)%z)*(bl%s(6)%y-bl%s(4)%y) &
      +(bl%s(8)%x-bl%s(4)%x)*(bl%s(5)%z-bl%s(4)%z)*(bl%s(6)%y-bl%s(4)%y)+ &
       (bl%s(5)%x-bl%s(4)%x)*(bl%s(8)%y-bl%s(4)%y)*(bl%s(6)%z-bl%s(4)%z) &
      -(bl%s(8)%x-bl%s(4)%x)*(bl%s(5)%y-bl%s(4)%y)*(bl%s(6)%z-bl%s(4)%z))+&
  
  dabs((bl%s(6)%y-bl%s(5)%y)*(bl%s(2)%z-bl%s(5)%z)*(bl%s(4)%x-bl%s(5)%x) &
      -(bl%s(2)%y-bl%s(5)%y)*(bl%s(6)%z-bl%s(5)%z)*(bl%s(4)%x-bl%s(5)%x)  &
      -(bl%s(6)%x-bl%s(5)%x)*(bl%s(2)%z-bl%s(5)%z)*(bl%s(4)%y-bl%s(5)%y) &
      +(bl%s(2)%x-bl%s(5)%x)*(bl%s(6)%z-bl%s(5)%z)*(bl%s(4)%y-bl%s(5)%y)+ &
       (bl%s(6)%x-bl%s(5)%x)*(bl%s(2)%y-bl%s(5)%y)*(bl%s(4)%z-bl%s(5)%z) &
      -(bl%s(2)%x-bl%s(5)%x)*(bl%s(6)%y-bl%s(5)%y)*(bl%s(4)%z-bl%s(5)%z))
  volbloc=volbloc/6.d0
  return
END FUNCTION volbloc

GEO/volcel [ Modules ]

[ Top ] [ Modules ]

NOM

 volcel(bl,vi,vj,vk,i2d)

DESCRIPTION

 calcul du volume d un hexaedre quelconque 

 calculating the volume of any hexahedron
 
 
    ENTREES / INPUT
  p1,p2,p3,p4,p5,p6,p7,p8 : 8 points
    SORTIES / OUTPUT

SOURCE

! Ce logiciel est regi par la licence [CeCILL-B]
! This software is governed by the [CeCILL-B] license
!=========================== DEBUT DES DECLARATIONS ==================== 
!.1-----  Implicit, Use
  use geo_typ
  IMPLICIT NONE
!.2-----  Declaration
  integer,intent(in)               :: i2d !! =1 ->2D, =0 -> 3D , =-1 ->1D
  type(bloc),intent(in)            :: bl  !! Bloc / Block
  real(kind=kind(0.d0)),intent(in) :: vi,vj,vk 
!! position i,j,k dans le maillage cartesien du bloc / position i,j,k in the Cartesian mesh of the block
  
  real(kind=kind(0.d0))            :: am,ap,bm,bp,cm,cp
  type(vect_3)                     :: p1,p2,p3,p4,p5,p6,p7,p8
  type(vect_3),dimension(8)        :: s
  integer                          :: i,nx,ny,nz
!=========================== DEBUT DU CODE EXECUTABLE ==================
! Initialisations
  DO i=1,8
      s(i)%v(1)=bl%s(i)%x
      s(i)%v(2)=bl%s(i)%y
      s(i)%v(3)=bl%s(i)%z
  END DO

  nx=bl%nx*2**(bl%nrb)
  ny=bl%ny*2**(bl%nrb)
  nz=bl%nz*2**(bl%nrb)
  IF(i2d.eq.1) nz=1
  IF(i2d.eq.-1) THEN
        ny=1
        nz=1
  END IF

  am=1.d0-1.d0*(vi-1.+0.)/nx
  ap=     1.d0*(vi-1.+0.)/nx
  bm=1.d0-1.d0*(vj-1.+0.)/ny
  bp=     1.d0*(vj-1.+0.)/ny
  cm=1.d0-1.d0*(vk-1.+0.)/nz
  cp=     1.d0*(vk-1.+0.)/nz

! i,j,k       
  p1%v= am*bm*cm*s(1)%v + ap*bm*cm*s(2)%v + ap*bp*cm*s(3)%v + am*bp*cm*s(4)%v + &
        am*bm*cp*s(5)%v + ap*bm*cp*s(6)%v + ap*bp*cp*s(7)%v + am*bp*cp*s(8)%v 
! i+1,j,k   
   am=1.d0-1.d0*(vi-1.+1.)/nx
   ap=     1.d0*(vi-1.+1.)/nx
   
   p2%v= am*bm*cm*s(1)%v + ap*bm*cm*s(2)%v + ap*bp*cm*s(3)%v + am*bp*cm*s(4)%v + &
         am*bm*cp*s(5)%v + ap*bm*cp*s(6)%v + ap*bp*cp*s(7)%v + am*bp*cp*s(8)%v 
! i+1,j+1,k   
  bm=1.d0-1.d0*(vj-1.+1.)/ny
  bp=     1.d0*(vj-1.+1.)/ny
  
  p3%v= am*bm*cm*s(1)%v + ap*bm*cm*s(2)%v + ap*bp*cm*s(3)%v + am*bp*cm*s(4)%v + &
        am*bm*cp*s(5)%v + ap*bm*cp*s(6)%v + ap*bp*cp*s(7)%v + am*bp*cp*s(8)%v 
! i,j+1,k   
  am=1.d0-1.d0*(vi-1.+0.)/nx
  ap=     1.d0*(vi-1.+0.)/nx
  
  p4%v= am*bm*cm*s(1)%v + ap*bm*cm*s(2)%v + ap*bp*cm*s(3)%v + am*bp*cm*s(4)%v + &
        am*bm*cp*s(5)%v + ap*bm*cp*s(6)%v + ap*bp*cp*s(7)%v + am*bp*cp*s(8)%v 
          
! i,j+1,k+1   
  cm=1.d0-1.d0*(vk-1.+1.)/nz
  cp=     1.d0*(vk-1.+1.)/nz
  
  p8%v= am*bm*cm*s(1)%v + ap*bm*cm*s(2)%v + ap*bp*cm*s(3)%v + am*bp*cm*s(4)%v + &
        am*bm*cp*s(5)%v + ap*bm*cp*s(6)%v + ap*bp*cp*s(7)%v + am*bp*cp*s(8)%v 
! i,j,k+1   
  bm=1.d0-1.d0*(vj-1.+0.)/ny
  bp=     1.d0*(vj-1.+0.)/ny
  
  p5%v= am*bm*cm*s(1)%v + ap*bm*cm*s(2)%v + ap*bp*cm*s(3)%v + am*bp*cm*s(4)%v + &
        am*bm*cp*s(5)%v + ap*bm*cp*s(6)%v + ap*bp*cp*s(7)%v + am*bp*cp*s(8)%v 
          
! i+1,j,k+1   
  am=1.d0-1.d0*(vi-1.+1.)/nx
  ap=     1.d0*(vi-1.+1.)/nx
  
  p6%v= am*bm*cm*s(1)%v + ap*bm*cm*s(2)%v + ap*bp*cm*s(3)%v + am*bp*cm*s(4)%v + &
        am*bm*cp*s(5)%v + ap*bm*cp*s(6)%v + ap*bp*cp*s(7)%v + am*bp*cp*s(8)%v 

! i+1,j+1,k+1   
  bm=1.d0-1.d0*(vj-1.+1.)/ny
  bp=     1.d0*(vj-1.+1.)/ny
  
  p7%v= am*bm*cm*s(1)%v + ap*bm*cm*s(2)%v + ap*bp*cm*s(3)%v + am*bp*cm*s(4)%v + &
        am*bm*cp*s(5)%v + ap*bm*cp*s(6)%v + ap*bp*cp*s(7)%v + am*bp*cp*s(8)%v 

  volcel= &
  dabs((p2%v(2)-p1%v(2))*(p4%v(3)-p1%v(3))*(p5%v(1)-p1%v(1))-(p4%v(2)-p1%v(2))*(p2%v(3)-p1%v(3))*(p5%v(1)-p1%v(1))  &
      -(p2%v(1)-p1%v(1))*(p4%v(3)-p1%v(3))*(p5%v(2)-p1%v(2))+(p4%v(1)-p1%v(1))*(p2%v(3)-p1%v(3))*(p5%v(2)-p1%v(2))+ &
       (p2%v(1)-p1%v(1))*(p4%v(2)-p1%v(2))*(p5%v(3)-p1%v(3))-(p4%v(1)-p1%v(1))*(p2%v(2)-p1%v(2))*(p5%v(3)-p1%v(3)))+ &
  
  dabs((p3%v(2)-p2%v(2))*(p4%v(3)-p2%v(3))*(p7%v(1)-p2%v(1))-(p4%v(2)-p2%v(2))*(p3%v(3)-p2%v(3))*(p7%v(1)-p2%v(1))  &
      -(p3%v(1)-p2%v(1))*(p4%v(3)-p2%v(3))*(p7%v(2)-p2%v(2))+(p4%v(1)-p2%v(1))*(p3%v(3)-p2%v(3))*(p7%v(2)-p2%v(2))+ &
       (p3%v(1)-p2%v(1))*(p4%v(2)-p2%v(2))*(p7%v(3)-p2%v(3))-(p4%v(1)-p2%v(1))*(p3%v(2)-p2%v(2))*(p7%v(3)-p2%v(3)))+ &
         
  dabs((p6%v(2)-p4%v(2))*(p7%v(3)-p4%v(3))*(p2%v(1)-p4%v(1))-(p7%v(2)-p4%v(2))*(p6%v(3)-p4%v(3))*(p2%v(1)-p4%v(1))  &
      -(p6%v(1)-p4%v(1))*(p7%v(3)-p4%v(3))*(p2%v(2)-p4%v(2))+(p7%v(1)-p4%v(1))*(p6%v(3)-p4%v(3))*(p2%v(2)-p4%v(2))+ &
       (p6%v(1)-p4%v(1))*(p7%v(2)-p4%v(2))*(p2%v(3)-p4%v(3))-(p7%v(1)-p4%v(1))*(p6%v(2)-p4%v(2))*(p2%v(3)-p4%v(3)))+ &
          
  dabs((p8%v(2)-p6%v(2))*(p7%v(3)-p6%v(3))*(p4%v(1)-p6%v(1))-(p7%v(2)-p6%v(2))*(p8%v(3)-p6%v(3))*(p4%v(1)-p6%v(1))  &
      -(p8%v(1)-p6%v(1))*(p7%v(3)-p6%v(3))*(p4%v(2)-p6%v(2))+(p7%v(1)-p6%v(1))*(p8%v(3)-p6%v(3))*(p4%v(2)-p6%v(2))+ &
       (p8%v(1)-p6%v(1))*(p7%v(2)-p6%v(2))*(p4%v(3)-p6%v(3))-(p7%v(1)-p6%v(1))*(p8%v(2)-p6%v(2))*(p4%v(3)-p6%v(3)))+ &
  
  dabs((p5%v(2)-p4%v(2))*(p8%v(3)-p4%v(3))*(p6%v(1)-p4%v(1))-(p8%v(2)-p4%v(2))*(p5%v(3)-p4%v(3))*(p6%v(1)-p4%v(1))  &
      -(p5%v(1)-p4%v(1))*(p8%v(3)-p4%v(3))*(p6%v(2)-p4%v(2))+(p8%v(1)-p4%v(1))*(p5%v(3)-p4%v(3))*(p6%v(2)-p4%v(2))+ &
       (p5%v(1)-p4%v(1))*(p8%v(2)-p4%v(2))*(p6%v(3)-p4%v(3))-(p8%v(1)-p4%v(1))*(p5%v(2)-p4%v(2))*(p6%v(3)-p4%v(3)))+ &
  
  dabs((p6%v(2)-p5%v(2))*(p2%v(3)-p5%v(3))*(p4%v(1)-p5%v(1))-(p2%v(2)-p5%v(2))*(p6%v(3)-p5%v(3))*(p4%v(1)-p5%v(1))  &
      -(p6%v(1)-p5%v(1))*(p2%v(3)-p5%v(3))*(p4%v(2)-p5%v(2))+(p2%v(1)-p5%v(1))*(p6%v(3)-p5%v(3))*(p4%v(2)-p5%v(2))+ &
       (p6%v(1)-p5%v(1))*(p2%v(2)-p5%v(2))*(p4%v(3)-p5%v(3))-(p2%v(1)-p5%v(1))*(p6%v(2)-p5%v(2))*(p4%v(3)-p5%v(3)))

  volcel=volcel/6.d0
  return
!===========================   FIN DE LA ROUTINE    ====================
END FUNCTION volcel