gradnodt.f

Go to the documentation of this file.
00001 C:\opentelemac\v7p0\sources\telemac2d\gradnodt.f
00002 !
00070                      SUBROUTINE GRADNODT
00071 !                    *******************
00072 !
00073      &(NS,NT,NU,AIRT,AIRS,H,T,DPX,DPY,DJX,DJY,
00074      & DX,DY,DIFT,CVIST,CE,DTT,MESH)
00075 !
00076 !!***********************************************************************
00077 ! TELEMAC2D   V6P3                                   21/07/2013
00078 !***********************************************************************
00079 !
00080 !
00081 !
00082 !
00083 !
00084 !
00085 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00086 !| AIRS           |-->| CELL'S AREAS
00087 !| AIRT           |-->| TRIANGLES' AREAS
00088 !| CE             |<--| DIFFUSION TERM
00089 !| CVIST          |-->| COEFFICIENT OF TRACER DIFFUSION
00090 !| DIFT           |-->| LOGICAL TO SAY IF THERE IS TRACER DIFFUSION OR NO
00091 !| DJX,DJY        |<--| GRADIENTS PER TRIANGLE
00092 !| DTT            |-->| TRACER TIME STEP
00093 !| DX,DY          |<--| GRADIENTS AT NODES
00094 !| H              |-->| WATER DEPTH
00095 !| NS             |-->| TOTAL NUMER OF NODES IN THE MESH
00096 !| NT             |-->| TOTAL NUMBER OF ELEMENTS IN THE MESH
00097 !| NU             |-->| NUMBERING OF NODES IN THE TRIANGLE
00098 !| T              |-->| TRACERS
00099 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00100 !
00101       USE BIEF_DEF
00102       USE INTERFACE_TELEMAC2D, EX_GRADNODT => GRADNODT
00103       USE DECLARATIONS_TELEMAC2D, ONLY: DEBUG
00104       IMPLICIT NONE
00105       INTEGER LNG,LU
00106       COMMON/INFO/LNG,LU
00107 !
00108 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
00109 !
00110       INTEGER, INTENT(IN)             :: NS,NT
00111       INTEGER, INTENT(IN)             :: NU(NT,3)
00112       LOGICAL, INTENT(IN)             :: DIFT
00113       DOUBLE PRECISION, INTENT(IN)    :: DPX(3,NT),DPY(3,NT)
00114       DOUBLE PRECISION, INTENT(IN)    :: AIRT(NT),AIRS(NS),H(NS),T(NS)
00115       DOUBLE PRECISION, INTENT(INOUT) :: DJX(NT),DJY(NT),DX(NS),DY(NS)
00116       DOUBLE PRECISION, INTENT(INOUT) :: CE(NS)
00117       DOUBLE PRECISION, INTENT(IN)    :: DTT,CVIST
00118       TYPE(BIEF_MESH), INTENT(INOUT)  :: MESH
00119 !
00120 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
00121 !
00122       INTEGER IS,JT,NUBO1,NUBO2,NUBO3
00123       DOUBLE PRECISION AIRJ,UA1,UA2,UA3,AIS,HTT,AUX,TEMPOR,TIERS
00124 !
00125       TIERS = 1.0D0/3.0D0
00126 !-----------------------------------------------------------------------
00127 !
00128 !     INITIALISES THE HERMITIAN NODAL GRADIENTS
00129 !
00130       CALL OV( 'X=0     ' ,CE,CE,CE,0.D0 ,NS)
00131       CALL OV( 'X=0     ' ,DX,DX,DX,0.D0 ,NS)
00132       CALL OV( 'X=0     ' ,DY,DY,DY,0.D0 ,NS)
00133 !
00134 !     LOOP ON GLOBAL LIST OF TRIANGLES
00135 !
00136       DO JT=1,NT
00137 !
00138         NUBO1 = NU(JT,1)
00139         NUBO2 = NU(JT,2)
00140         NUBO3 = NU(JT,3)
00141 !
00142         AIRJ=   AIRT(JT)
00143 !
00144 !       COMPUTES THE P1-GRADIENTS
00145 !
00146         UA1=T(NUBO1)
00147         UA2=T(NUBO2)
00148         UA3=T(NUBO3)
00149 !
00150 !  GRADIENTS BY TRIANGLES
00151 !
00152         DJX(JT) = UA1*DPX(1,JT) +
00153      &            UA2*DPX(2,JT) + UA3*DPX(3,JT)
00154         DJY(JT) = UA1*DPY(1,JT) +
00155      &            UA2*DPY(2,JT) + UA3*DPY(3,JT)
00156 !
00157 !  GRADIENTS BY NODES
00158 !
00159         TEMPOR    = AIRJ*DJX(JT)
00160         DX(NUBO1) = DX(NUBO1) + TEMPOR
00161         DX(NUBO2) = DX(NUBO2) + TEMPOR
00162         DX(NUBO3) = DX(NUBO3) + TEMPOR
00163 !
00164         TEMPOR    = AIRJ*DJY(JT)
00165         DY(NUBO1) = DY(NUBO1) + TEMPOR
00166         DY(NUBO2) = DY(NUBO2) + TEMPOR
00167         DY(NUBO3) = DY(NUBO3) + TEMPOR
00168       ENDDO ! RA: SEPARATION OF LOOPS TO EXECUTE PARCOM
00169       IF(NCSIZE.GT.1)THEN
00170         CALL PARCOM2(DX,DY,DY,NS,1,2,2,MESH)
00171       ENDIF
00172 !
00173 !   DIFFUSION TERM
00174 !
00175       IF(DIFT.AND.CVIST.NE.0.) THEN
00176         DO JT=1,NT
00177 !
00178           NUBO1 = NU(JT,1)
00179           NUBO2 = NU(JT,2)
00180           NUBO3 = NU(JT,3)
00181 !
00182           AIRJ =  AIRT(JT)
00183           HTT  = H(NUBO1)+H(NUBO2)+H(NUBO3)
00184           AUX  =  CVIST*DTT*AIRJ*HTT/3.
00185 !
00186           CE(NUBO1)       = CE(NUBO1) -AUX*
00187      &    (DJX(JT)*DPX(1,JT)+DJY(JT)*DPY(1,JT))
00188           CE(NUBO2)       = CE(NUBO2) -AUX*
00189      &    (DJX(JT)*DPX(2,JT)+DJY(JT)*DPY(2,JT))
00190           CE(NUBO3)       = CE(NUBO3) -AUX*
00191      &    (DJX(JT)*DPX(3,JT)+DJY(JT)*DPY(3,JT))
00192         ENDDO
00193 !
00194 !       FOR PARALLELILSM
00195         IF(NCSIZE.GT.1)THEN
00196           CALL PARCOM2(CE,CE,CE,NS,1,2,1,MESH)
00197         ENDIF
00198       ENDIF
00199 !
00200 !     COMPLETES THE COMPUTATION OF THE NODAL GRADIENTS
00201 !
00202       DO IS=1,NS
00203         AIS     = TIERS/AIRS(IS)
00204         DX(IS)  = DX(IS)*AIS
00205         DY(IS)  = DY(IS)*AIS
00206       ENDDO
00207 !
00208 !-----------------------------------------------------------------------
00209 !
00210       RETURN
00211       END

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