The TELEMAC-MASCARET system  trunk
hloc.f
Go to the documentation of this file.
1 ! ***************
2  SUBROUTINE hloc
3 ! ***************
4 !
5  &(npoin,nseg,nelem,nubo,vnocl,airs,dthaut,mesh,eltseg,ifabor)
6 !
7 !***********************************************************************
8 ! BIEF V6P3 25/05/2013
9 !***********************************************************************
10 !
11 !brief COMPUTES THE LOCAL SPACE STEP [ |CI|/SUM(LIJ) ].
12 !
13 !
14 !history INRIA
15 !+
16 !+ V5P4
17 !+
18 !
19 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
20 !+ 13/07/2010
21 !+ V6P0
22 !+ Translation of French comments within the FORTRAN sources into
23 !+ English comments
24 !
25 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
26 !+ 21/08/2010
27 !+ V6P0
28 !+ Creation of DOXYGEN tags for automated documentation and
29 !+ cross-referencing of the FORTRAN sources
30 !+
31 ! history R. ATA
32 !+ 25/02/2012
33 !+ V6P3
34 !+ remove nubo and change by gloseg
35 !+ parallelization
36 !+
37 !history R. ATA
38 !+ 25/05/2013
39 !+ V6P3
40 !+ clean unused variables and loop changed.
41 !
42 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
43 !| AIRS |-->| AREAS OF CELLS IN THE MESH.
44 !| DTHAUT |<--| SPACE STEP
45 !| NBOR |-->| GLOBAL NUMBER OF BOUNDARY POINTS
46 !| NPOIN |-->| NUMBER OF POINTS
47 !| NPTFR |-->| NUMBER OF BOUNDARY POINTS
48 !| NSEG |-->| NUMBER OF SEGMENTS
49 !| NUBO |-->| FIRST AND SECOND POINT OF SEGMENTS
50 !| VNOCL |-->| NORMAL VECTOR TO INTERFACE
51 !| | | (2 FIRST COMPONENTS) AND
52 !| | | SEGMENT LENGTH (3RD COMPONENT)
53 !| XNEBOR |-->| X-COMPONENT OF NORMAL VECTOR AT BOUNDARY POINT
54 !| YNEBOR |-->| Y-COMPONENT OF NORMAL VECTOR AT BOUNDARY POINT
55 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
56 !
57  USE bief_def
58  USE bief, ex_hloc => hloc
60  IMPLICIT NONE
61 !
62 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
63 !
64  INTEGER, INTENT(IN) :: NSEG,NPOIN
65  INTEGER, INTENT(IN) :: NUBO(2,*)
66  INTEGER, INTENT(IN) :: NELEM
67  INTEGER, INTENT(IN) :: ELTSEG(nelem,3)
68  DOUBLE PRECISION, INTENT(IN) :: VNOCL(3,*)
69  DOUBLE PRECISION, INTENT(IN) :: AIRS(npoin)
70  DOUBLE PRECISION, INTENT(OUT) :: DTHAUT(npoin)
71  TYPE(bief_mesh), INTENT(INOUT) :: MESH
72  INTEGER, INTENT(IN) :: IFABOR(nelem,3)
73 !
74 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
75 !
76  INTEGER I,NSG,NUBO1,NUBO2,IELEM,IER
77  LOGICAL, ALLOCATABLE :: YESNO(:)
78  ALLOCATE(yesno(nseg),stat=ier)
79  CALL check_allocate(ier, 'HLOC')
80 !
81 !-----------------------------------------------------------------------
82 !
83 ! INITIALISES
84 !
85  DO i=1,npoin
86  dthaut(i) = 0.d0
87  ENDDO
88 ! INITIALIZATION OF YESNO
89  DO i=1,nseg
90  yesno(i)=.false.
91  ENDDO
92 !
93  DO ielem=1, nelem
94  DO i = 1,3
95  IF(.NOT.yesno(eltseg(ielem,i)))THEN
96  nsg = eltseg(ielem,i)
97  nubo1 = nubo(1,nsg)
98  nubo2 = nubo(2,nsg)
99 ! NUBO OR GLOSEG ARE THE SAME .. TO REMOVE NUBO (REDUNDANCE)
100  IF(ncsize.GT.1.AND.ifabor(ielem,i).EQ.-2)THEN !THIS IS AN INTERFACE EDGE
101  dthaut(nubo1)=dthaut(nubo1) + 0.5d0*vnocl(3,nsg)
102  dthaut(nubo2)=dthaut(nubo2) + 0.5d0*vnocl(3,nsg)
103  ELSE
104  dthaut(nubo1)=dthaut(nubo1) + vnocl(3,nsg)
105  dthaut(nubo2)=dthaut(nubo2) + vnocl(3,nsg)
106  ENDIF
107  yesno(nsg)=.true.
108  ENDIF
109  ENDDO
110  ENDDO
111 !
112  IF(ncsize.GT.1) THEN
113  CALL parcom2(dthaut,dthaut,dthaut,npoin,1,2,1,mesh)
114  ENDIF
115 !
116  DO i=1,npoin
117  dthaut(i) = airs(i)/ dthaut(i)
118  ENDDO
119 !
120  DEALLOCATE(yesno)
121 !
122 !-----------------------------------------------------------------------
123 !
124  RETURN
125  END
subroutine hloc(NPOIN, NSEG, NELEM, NUBO, VNOCL, AIRS, DTHAUT, MESH, ELTSEG, IFABOR)
Definition: hloc.f:7
integer ncsize
Definition: bief_def.f:49
subroutine parcom2(X1, X2, X3, NPOIN, NPLAN, ICOM, IAN, MESH)
Definition: parcom2.f:7
Definition: bief.f:3