TABLE OF CONTENTS
- 1. GEO/volcel
- 2. GEO/volbloc
- 3. GEO/pni
GEO/pni [ 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 ]
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 ]
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