Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • otm/telemac-mascaret
1 result
Show changes
Commits on Source (10)
Latest changes
==============
HERMES: read boundary information in MED files regardless of the presence or
not of a boundary conditions file
TELEMAC-2D: Fix mass balance issue with finite volumes and tracer
Initialization of MASSOU for finite volumes kernel
Correction of mass balance computation for parellel runs
PYTHON: TelemacFile.print_info now correctly displays the number of interface
points if any, as well as the number of boundary points and elements regardless
of the presence or not of a boundary conditions file.
MASCARET: Fix Bazin's friction Law
KHIONE: Addition of a new formula to compute under ice cover friction
A new default value of 0.02 m1/3/s is set for under cover friction
......
/-----------------------------------------------------------------------/
FORTRAN FILE : './user_fortran'
BOUNDARY CONDITIONS FILE : './geoT3D_littoral.cli'
BOUNDARY CONDITIONS FILE : './geo_littoral.cli'
GEOMETRY FILE : './geo_littoral.slf'
RESULTS FILE : './res_littoral.slf'
FORMATTED RESULTS FILE : './polygon_particles.txt'
......
......@@ -426,11 +426,7 @@ class TelemacFile(HermesFile if HERMES_AVAIL else SerafinFile):
Returns the number of boundary elements
"""
if self._nelebd is None:
if self.boundary_file is not None:
self._nelebd = self.get_bnd_npoin()
else:
raise TelemacException(
"Can not read nelebd no boundary file was given")
self._nelebd = self.get_bnd_nelem()
return self._nelebd
......@@ -2084,22 +2080,17 @@ class TelemacFile(HermesFile if HERMES_AVAIL else SerafinFile):
if self.nptir == 0:
print(" - No parallel information")
else:
print(" - Number of interface points: {}".format(self.nptfr))
print(" - Number of interface points: {}".format(self.nptir))
print(" - Local ot Global numbering {}".format(self.knolg))
print()
print("~> Boundary info")
print()
if self.boundary_file is None:
print(" - No boundary file given")
else:
print(" - Boundary element type: {}"
.format(elem2str(self.typ_bnd_elem)))
print(" - Number of bnd points: {}".format(self.nptfr))
print(" - Number of bnd elements: {}".format(self.nelebd))
# TODO: display stuff on boundary values ?
print(" - Number of boundary points: {}".format(self.nptfr))
print(
" - Boundary element type: {}".format(elem2str(self.typ_bnd_elem))
)
print(" - Number of boundary elements: {}".format(self.nelebd))
print()
print("~> Data info")
......
......@@ -104,7 +104,7 @@ module M_DEBITANCE_S
!----------------------------------------------------
case(LOI_FROTTEMENT_BAZIN)
chezy = 45._DOUBLE / ( 1._DOUBLE + CF1 / RH1 )
chezy = 87._DOUBLE / ( 1._DOUBLE + CF1 / RH1**W12 )
end select
......
......@@ -90,7 +90,7 @@ CONTAINS
!----------------------------------------------------
! BAZIN Chezy(i) en fonction de RH et mb (fixe)
!----------------------------------------------------
chezy = 45._DOUBLE/(1._DOUBLE+cf1/rh1)
chezy = 87._DOUBLE / ( 1._DOUBLE + CF1 / RH1**W12 )
CALL PUSHCONTROL3B(4)
CASE DEFAULT
CALL PUSHCONTROL3B(0)
......
......@@ -89,9 +89,8 @@ MODULE M_DEBITANCE_S_D
!----------------------------------------------------
! BAZIN Chezy(i) en fonction de RH et mb (fixe)
!----------------------------------------------------
chezyd = -(45._DOUBLE*(cf1d*rh1-cf1*rh1d)/rh1**2/(1._DOUBLE+cf1/&
& rh1)**2)
chezy = 45._DOUBLE/(1._DOUBLE+cf1/rh1)
chezyd = 43.5_DOUBLE*(cf1*rh1d-2*cf1d*rh1)/(2._DOUBLE*rh1**W12*(cf1+rh1**W12)**2)
chezy = 87._DOUBLE/(1._DOUBLE+cf1/rh1**w12)
CASE DEFAULT
chezyd = 0.D0
END SELECT
......
......@@ -117,7 +117,12 @@
ENDIF
!
! FINAL BALANCE OF TRACER
MASSOU(ITRAC) = MASSOU(ITRAC) + DT*SMTR%ADR(ITRAC)%P%R(I)
IF(NCSIZE.GT.1) THEN
MASSOU(ITRAC) = MASSOU(ITRAC) + DT*SMTR%ADR(ITRAC)%P%R(I)
& * MESH%IFAC%I(I)
ELSE
MASSOU(ITRAC) = MASSOU(ITRAC) + DT*SMTR%ADR(ITRAC)%P%R(I)
ENDIF
ENDDO
!
IF(INCLUS(COUPLING,'GAIA').AND.
......
......@@ -1368,6 +1368,7 @@
FLUTENT = 0.D0
IF(DEBUG.GT.0) WRITE(LU,*) 'CALLING BILANT1'
DO ITRAC=1,NTRAC
MASSOU(ITRAC) = 0.D0
CALL BILANT1(H,UCONV,VCONV,HPROP,T3,T4,T5,T6,
& LT,TOTAL_ITER,ENTET,MASKTR,
& T%ADR(ITRAC)%P,TN%ADR(ITRAC)%P,TETAT,
......
......@@ -52,9 +52,9 @@
G = SQRT (GRAVIT)
LUMES = 0
!.....PARAMETRES DE L'ALGORITHME ITERATIF
!.....ITERATIVE ALGORITHM PARAMETERS
! """""""""""""""""""""""""""""""""""
!!!!!!!!!!!!!!!!!!!!!!!!!!comeca da subrotina chris2!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
VITNUL= 1.D-6
ITERM = 100
TOLF = 1.D-8
......@@ -65,7 +65,7 @@
RAC2=DSQRT(2.D0)
C1 =1.D0/(XKAPPA*RAC2)
!""""""""""""""""""""""""""""""""""""""""""""
! 0 C AFFECTATION DES CONSTANTES DU MODELE.
! 0 C ASSIGNMENT OF MODEL CONSTANTS.
!=====C======================================
R = 0.45D0
......@@ -79,9 +79,9 @@
ENDIF
XKN = 11.D0*MAX(DEPTH(I),1.D-9) /EXP(0.41D0*73.D0/G)
DO JF = 1,NF
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!ATENÇAO!TOU EU A DAR XKN
!!!!!!!!!!!!!!!!!!!!!!!!!!!!ATTENTION! I'M GIVING XKN
OMEGAA=DEUPI*FREQ(JF)
!.....DETERMINATION DES SOLUTIONS INITIALES (SANS EFFET MUTUEL)
!.....DETERMINATION OF INITIAL SOLUTIONS (WITHOUT MUTUAL EFFECT)
! """""""""""""""""""""""""""""""""""""""""""""""""""""""""
XJ=(DSQRT(BETAMJ)*UWBM(I)/(XKN*OMEGAA))**(2.D0/3.D0)
COEF1 = 30.D0/DEXP(1.D0)
......@@ -91,7 +91,7 @@
ELSEIF (XJ.LT.3.47D0) THEN
FWINIT=2.D0*BETAMJ/XJ
ELSE
! FUNCAO FWMOD2!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!11
! FWMOD2 FUNCTION!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
USKA=UWBM(I)/(XKN*OMEGAA)
!
C2=C1*DLOG(30.D0*XKAPPA*DEXP(-2.D0*ZETA)*USKA/RAC2)
......@@ -107,15 +107,16 @@
STOP
205 CONTINUE
FWINIT=1.D0/(YN*YN)
!FUNCAO final FWMOD2!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!final FWMOD2 FUNCTION!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ENDIF
!
!.....AFFECTATION DE LA SOLUTION DE DEPART
!.....ASSIGNMENT OF INITIAL SOLUTION
! """"""""""""""""""""""""""""""""""""
FC=FCINIT
FW=FWINIT
!.....ON S'ARRETE A CES SOLUTIONS SI UNE DES DEUX VITESSES EST
! NULLE OU SI LE RAPPORT DES VITESSES EST TRES GRAND OU PETIT.
!.....STOP AT THESE SOLUTIONS IF ONE OF THE TWO VELOCITIES IS ZERO, OR IF THE
! VELOCITY RATIO IS VERY LARGE OR SMALL.
!
! """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""
IF ((VITCOU.LT.VITNUL).OR.(UWBM(I).LT.VITNUL)) THEN
CFWC%R(I)=FC
......@@ -124,46 +125,45 @@
CFWC%R(I)=FC
ELSE
!
!.....ALGORITHME ITERATIF DE NEWTON-RAPHSON.
!.....NEWTON-RAPHSON ITERATIVE ALGORITHM.
! """"""""""""""""""""""""""""""""""""""
ITER=0
500 CONTINUE
ITER=ITER+1
!!!!!!!!!!!!!!!!!!!!!!!!!!final da subrotina chris2!!!!!!!!!!!!!!!
!.......CALCUL DES MATRICES ALFA ET BETA POUR X DONNE.
!CJSUBR!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
!...... CALCULATION OF ALFA AND BETA MATRICES FOR GIVEN X.
!
!=====C
! 1 C CALCUL DE SIGMA ET DE SES DERIVEES (COMMUN AUX 2 MODELES)
!=====C===========================================================
! 1 C CALCULATION OF SIGMA AND ITS DERIVATIVES (COMMON TO BOTH MODELS)
!=====C=================================================================
SIG = (FC/FW)*(VITCOU/UWBM(I))**2
SIGDFC = SIG/FC
SIGDFW = -SIG/FW
!=====C
! 2 C CALCUL DE M ET DE SES DERIVEES (COMMUN AUX 2 MODELES)
!=====C===========================================================
! 2 C CALCULATION OF M AND ITS DERIVATIVES (COMMON TO BOTH MODELS)
!=====C=============================================================
COSDIR = DABS(COS(DIRHOU(I)-DIRCOU))
MMM = DSQRT(1.D0+SIG*SIG+2.D0*SIG*COSDIR)
MMMDFC = (SIG+COSDIR)/MMM*SIGDFC
MMMDFW = (SIG+COSDIR)/MMM*SIGDFW
!=====C
! 3 C CALCUL DE J ET DE SES DERIVEES (COMMUN AUX 2 MODELES)
!=====C===========================================================
! 3 C CALCULATION OF J AND ITS DERIVATIVES (COMMON TO BOTH MODELS)
!=====C=============================================================
COEFJ = UWBM(I)/(XKN*OMEGAA*DSQRT(2.D0))
JJJ = COEFJ*DSQRT(MMM*FW)
JJJDFC = 0.5D0*JJJ/MMM*MMMDFC
JJJDFW = 0.5D0*JJJ*(1.D0/FW+1.D0/MMM*MMMDFW)
!=====C
! 4 C SELECTION DU MODELE EN FONCTION DE LA VALEUR DE J
!=====C==================================================
! 4 C MODEL SELECTION BASED ON THE VALUE OF J
!=====C========================================
IF (JJJ.GT.3.47D0) THEN
MODEL=2
ELSE
MODEL=1
ENDIF
!=====C
! 5 C CALCUL DE DELTAW ET DE SES DERIVEES (SELON LE MODELE CHOISI)
!=====C=============================================================
! 5 C CALCULATION OF DELTAW AND ITS DERIVATIVES (DEPENDING ON THE MODEL CHOSEN)
!=====C==========================================================================
IF (MODEL.EQ.1) THEN
COEFTA = XKN*R*DEUPI/2.D0*DSQRT(BETAMJ*0.5D0)
TAW = COEFTA*DSQRT(JJJ)
......@@ -176,8 +176,8 @@
TAWDFW = COEFTA*JJJDFW
ENDIF
!=====C
! 6 C CALCUL DE KA ET DE SES DERIVEES (SELON LE MODELE CHOISI)
!=====C=============================================================
! 6 C CALCULATION OF KA AND ITS DERIVATIVES (DEPENDING ON THE MODEL CHOSEN)
!=====C======================================================================
IF (MODEL.EQ.1) THEN
COEFKA = XKAPPA/(BETAMJ*XKN)
XKA = 30.D0*TAW*DEXP(-COEFKA*TAW*DSQRT(SIG/MMM))
......@@ -194,8 +194,8 @@
& *DLOG(30.D0*TAW/XKN) + (1.D0-AUXI)*TAWDFW/TAW )
ENDIF
!=====C
! 7 C CALCUL DE F1 ET DE SES DERIVEES (SELON LE MODELE CHOISI)
!=====C=============================================================
! 7 C CALCULATION OF F1 AND ITS DERIVATIVES (DEPENDING ON THE MODEL CHOSEN)
!=====C======================================================================
IF (MODEL.EQ.1) THEN
F1MJ = FW -2.D0*BETAMJ*MMM/JJJ
DF1DFC = -2.D0*BETAMJ*(MMMDFC/JJJ-JJJDFC*MMM/JJJ**2)
......@@ -210,26 +210,26 @@
& - 2.D0*MMM/JJJ*JJJDFW/AUXI**3)
ENDIF
!=====C
! 8 C CALCUL DE F2 ET DE SES DERIVEES (COMMUN AUX 2 MODELES)
!=====C===========================================================
! 8 C CALCULATION OF F2 AND ITS DERIVATIVES (COMMON TO BOTH MODELS)
!=====C==============================================================
COEF2 = 30.D0*DEPTH(I)/DEXP(1.D0)
AUXI = DLOG(COEF2/XKA)
F2MJ = DSQRT(2.D0/FC) - AUXI/XKAPPA
DF2DFC = XKADFC/(XKA*XKAPPA)-1.D0/DSQRT(2.D0*FC**3)
DF2DFW = XKADFW/(XKA*XKAPPA)
!CJSUBR!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
!.......CALCUL DE L'ERREUR SUR LA FONCTION
! """"""""""""""""""""""""""""""""""
!.......CALCULATION OF THE ERROR ON THE FUNCTION
! """"""""""""""""""""""""""""""""""""""""
ERRF=ABS(F1MJ)+ABS(F2MJ)
IF (ERRF.LT.TOLF) THEN
KONVER=1
GOTO 201
ENDIF
!
!.......CALCUL DE DX
! """"""""""""
!.......CALCULATION OF DX
! """""""""""""""""
DET=DF1DFC*DF2DFW-DF1DFW*DF2DFC
IF (ABS(DET).LT.1.D-10) THEN
WRITE(6,*) '/!/ ARRET DANS CJSUBR : DETERMINAT NUL DET='
......@@ -238,13 +238,13 @@
DFC=(-F1MJ*DF2DFW+F2MJ*DF1DFW)/DET
DFW=(-F2MJ*DF1DFC+F1MJ*DF2DFC)/DET
!
!.......MISE A JOUR DE LA SOLUTION
! """"""""""""""""""""""""""
!.......UPDATING THE SOLUTION
! """""""""""""""""""""
FC=FC+DFC
FW=FW+DFW
!
!.......TEST SUR LA VALEUR DE DX
! """"""""""""""""""""""""
!.......TEST ON THE VALUE OF DX
! """""""""""""""""""""""
ERRX=ABS(DFC)+ABS(DFW)
IF (ERRX.LT.TOLX) THEN
KONVER=2
......@@ -258,8 +258,8 @@
201 CONTINUE
IF (LUMES.GT.0) WRITE(LUMES,2000) KONVER,ITER,FC,FW
2000 FORMAT(
& 'CONVERGENCE ',I1,' APRES',I5,' ITERATIONS => FC =',
& E11.4,' ET FW =',E11.4)
& 'CONVERGENCE ',I1,' AFTER ',I5,' ITERATIONS => FC =',
& E11.4,' AND FW =',E11.4)
ENDIF
ENDDO
ENDDO
......
......@@ -76,11 +76,11 @@
& (ST3,'=','GRADF Y',IELM2,1.D0,MESH%Y,
& ST1,ST1,ST1,ST1,ST1,MESH,.FALSE.,ST1,ASSPAR=.TRUE.)
!AQUI FAZEMOS A MÉDIA dos grads no volume.
!HERE WE AVERAGE the grads in the volume.
CALL OV('X=Y/Z ',WIPDY,T1,T3,C,NPOIN2)
!AQUI TEMOS AS DERIVADAS EM X E Y DO WAVE INDUCED PRESSURE
!HERE WE HAVE THE X AND Y DERIVATIVES OF THE WAVE INDUCED PRESSURE
RETURN
END
......
......@@ -2250,7 +2250,6 @@
!
#if defined (HAVE_MED)
INTEGER :: MY_ID
INTEGER(KIND=KMED_INT) :: TYPE_ELEM_MED
!
!-----------------------------------------------------------------------
!
......@@ -2262,15 +2261,6 @@
RETURN
ENDIF
!
! CONVERTS TYPE OF ELEMENTS
CALL CONVERT_ELEM_TYPE(TYPE_ELEM, TYPE_ELEM_MED, IERR)
IF(IERR.NE.0) THEN
ERROR_MESSAGE = 'ERROR IN '//
& TRIM(MY_OBJ_TAB(MY_ID)%FILE_NAME)//': '//
& 'GET_BND_NELEM_MED:CONVERT_ELEM_TYPE'
RETURN
ENDIF
!
! Identify bnd element if necessary
CALL IDENTIFY_BND_ELMT(FILE_ID,TYPE_ELEM,IERR)
IF(IERR.NE.0) THEN
......@@ -5319,7 +5309,7 @@
& 'ALLOCATING IDENTIFY_BND_ELMT:IS_BND'
RETURN
ENDIF
!
IF(NELEM.NE.0) THEN
!
! READ THE FAMILY NUMBER FOR EACH ELEMENT
......@@ -5438,20 +5428,27 @@
ENDDO
DEALLOCATE(GRP_NAME)
ENDDO
!
IF(NELEM.NE.0) THEN
! Looping on all element and checking if their family is in
! bnd_fam
DO I=1,NELEM
MY_OBJ_TAB(MY_ID)%IS_BND(I) = .FALSE.
DO IFAM=1,NB_FAMILY
IF(NUM_FAMILY(I).EQ.
& MY_OBJ_TAB(MY_ID)%BND_FAM(INT(IFAM),1)) THEN
MY_OBJ_TAB(MY_ID)%IS_BND(I) =
& MY_OBJ_TAB(MY_ID)%BND_FAM(INT(IFAM),2).NE.0
EXIT
ENDIF
IF(MY_OBJ_TAB(MY_ID)%NBND_GRP.NE.0) THEN
! Looping on all element and checking if their family is in
! bnd_fam
MY_OBJ_TAB(MY_ID)%IS_BND(:) = .FALSE.
DO I=1,NELEM
DO IFAM=1,NB_FAMILY
IF(NUM_FAMILY(I).EQ.
& MY_OBJ_TAB(MY_ID)%BND_FAM(INT(IFAM),1)) THEN
MY_OBJ_TAB(MY_ID)%IS_BND(I) =
& MY_OBJ_TAB(MY_ID)%BND_FAM(INT(IFAM),2).NE.0
EXIT
ENDIF
ENDDO
ENDDO
ENDDO
ELSE
! No boundary conditions file has been provided, all
! boundary elements are presumed valid
MY_OBJ_TAB(MY_ID)%IS_BND(:) = .TRUE.
ENDIF
DEALLOCATE(NUM_FAMILY)
ENDIF
ENDIF
......