cornor.f

Go to the documentation of this file.
00001 C:\opentelemac\v7p0\sources\telemac2d\cornor.f
00002 !
00069                      SUBROUTINE CORNOR
00070 !                    *****************
00071 !
00072      &(XNEBOR,YNEBOR,XSGBOR,YSGBOR,NPTFR,KLOG,
00073      & LIHBOR,T1,T2,MESH,IKLBOR,NELEB,NELEBX)
00074 !
00075 !***********************************************************************
00076 ! TELEMAC2D   V7P0                                   21/08/2010
00077 !***********************************************************************
00078 !
00079 !
00080 !
00081 !
00082 !
00083 !
00084 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00085 !| IKLBOR         |-->| CONNECTIVITY TABLE OF BOUNDARY ELEMENTS
00086 !| KLOG           |-->| CONVENTION FOR SOLID BOUNDARY
00087 !| LIHBOR         |-->| TYPE OF BOUNDARY CONDITIONS ON DEPTH
00088 !| MESH           |-->| MESH STRUCTURE
00089 !| NELEB          |-->| NUMBER OF BOUNDARY ELEMENTS
00090 !| NELEBX         |-->| MAXIMUM NUMBER OF BOUNDARY ELEMENTS
00091 !| NPTFR          |-->| NUMBER OF BOUNDARY POINTS
00092 !| T1             |<->| WORK BIEF_OBJ STRUCTURE
00093 !| T2             |<->| WORK BIEF_OBJ STRUCTURE
00094 !| XNEBOR         |<--| X-COMPONENT OF NORMAL AT NODES
00095 !| XSGBOR         |-->| X-COMPONENT OF NORMAL TO SEGMENTS
00096 !| YNEBOR         |<--| Y-COMPONENT OF NORMAL AT NODES
00097 !| YSGBOR         |-->| Y-COMPONENT OF NORMAL TO SEGMENTS
00098 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00099 !
00100       USE BIEF
00101 !
00102       IMPLICIT NONE
00103       INTEGER LNG,LU
00104       COMMON/INFO/LNG,LU
00105 !
00106 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
00107 !
00108       INTEGER, INTENT(IN)             :: NPTFR,KLOG,NELEB,NELEBX
00109       INTEGER, INTENT(IN)             :: LIHBOR(NPTFR)
00110       INTEGER, INTENT(IN)             :: IKLBOR(NELEBX,2)
00111       DOUBLE PRECISION, INTENT(IN)    :: XSGBOR(NELEBX,4)
00112       DOUBLE PRECISION, INTENT(IN)    :: YSGBOR(NELEBX,4)
00113       DOUBLE PRECISION, INTENT(INOUT) :: XNEBOR(NPTFR,2),YNEBOR(NPTFR,2)
00114 !
00115       TYPE(BIEF_OBJ), INTENT(INOUT)   :: T1,T2
00116       TYPE(BIEF_MESH), INTENT(INOUT)  :: MESH
00117 !
00118 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
00119 !
00120       INTEGER K,KP1,IELEB
00121       DOUBLE PRECISION XNORM
00122 !
00123       INTRINSIC SQRT
00124 !
00125 !-----------------------------------------------------------------------
00126 !
00127 !     CONSIDERS ONLY THE NORMALS TO LIQUID BOUNDARIES HERE
00128 !     THE ONLY ONES USED
00129 !
00130 !     COPIES THEN CANCELS T1 AND T2 FOR SOLID BOUNDARIES
00131 !
00132       IF(NELEB.GT.0) THEN
00133         DO IELEB=1,NELEB
00134           K  =IKLBOR(IELEB,1)
00135           KP1=IKLBOR(IELEB,2)
00136 !         NON NORMALISED VERSION OF XSGBOR AND YSGBOR
00137           T1%R(IELEB)=XSGBOR(IELEB,3)
00138           T2%R(IELEB)=YSGBOR(IELEB,3)
00139           IF(LIHBOR(K).EQ.KLOG.OR.LIHBOR(KP1).EQ.KLOG) THEN
00140             T1%R(IELEB)=0.D0
00141             T2%R(IELEB)=0.D0
00142           ENDIF
00143         ENDDO
00144       ENDIF
00145 !
00146 !     START OF COMPUTATION OF XNEBOR AND YNEBOR FOR THE LIQUID BOUNDARIES
00147 !
00148       IF(NPTFR.GT.0) THEN
00149         DO K=1,NPTFR
00150           XNEBOR(K,1)=0.D0
00151           YNEBOR(K,1)=0.D0
00152         ENDDO
00153         IF(NELEB.GT.0) THEN
00154           DO IELEB=1,NELEB
00155             K  =IKLBOR(IELEB,1)
00156             KP1=IKLBOR(IELEB,2)
00157             XNEBOR(K  ,1)=XNEBOR(K  ,1)+T1%R(IELEB)
00158             YNEBOR(K  ,1)=YNEBOR(K  ,1)+T2%R(IELEB)
00159             XNEBOR(KP1,1)=XNEBOR(KP1,1)+T1%R(IELEB)
00160             YNEBOR(KP1,1)=YNEBOR(KP1,1)+T2%R(IELEB)
00161           ENDDO
00162         ENDIF
00163       ENDIF
00164 !
00165 !     ASSEMBLY IN PARALLEL (EVEN IF NPTFR=0)
00166 !
00167       IF(NCSIZE.GT.1) THEN
00168         CALL PARCOM_BORD(XNEBOR,2,MESH)
00169         CALL PARCOM_BORD(YNEBOR,2,MESH)
00170       ENDIF
00171 !
00172 !     RENORMALISATION
00173 !
00174       IF(NPTFR.GT.0) THEN
00175         DO K=1,NPTFR
00176           XNORM=SQRT(XNEBOR(K,1)**2+YNEBOR(K,1)**2)
00177           IF(XNORM.GT.1.D-10) THEN
00178 !           SAVING THE NON-NORMED VERSION
00179             XNEBOR(K,2)=0.5D0*XNEBOR(K,1)
00180             YNEBOR(K,2)=0.5D0*YNEBOR(K,1)
00181 !           NOW NORMALISE
00182             XNEBOR(K,1)=XNEBOR(K,1)/XNORM
00183             YNEBOR(K,1)=YNEBOR(K,1)/XNORM
00184           ELSE
00185 !           POINT BETWEEN TWO SOLID SEGMENTS
00186 !           TAKES THE ORIGINAL COMPUTATION DONE IN NORMAB
00187             XNORM=SQRT(XNEBOR(K,2)**2+YNEBOR(K,2)**2)
00188             XNEBOR(K,1)=XNEBOR(K,2)/XNORM
00189             YNEBOR(K,1)=YNEBOR(K,2)/XNORM
00190           ENDIF
00191         ENDDO
00192       ENDIF
00193 !
00194 !-----------------------------------------------------------------------
00195 !
00196       RETURN
00197       END

Generated on Fri Aug 31 2013 18:12:58 by S.E.Bourban (HRW) using doxygen 1.7.0