diff --git a/src/MNH/eol_maths.f90 b/src/MNH/eol_maths.f90 index add257889074a24047254725c99e1b17bba151c6..13348a46ddcb2f674b716da29cfeecd5e2776a83 100644 --- a/src/MNH/eol_maths.f90 +++ b/src/MNH/eol_maths.f90 @@ -26,6 +26,8 @@ MODULE MODI_EOL_MATHS ! ####################### ! +IMPLICIT NONE + INTERFACE ! FUNCTION CROSS(PA, PB) @@ -99,6 +101,8 @@ END MODULE MODI_EOL_MATHS !######################################################### FUNCTION CROSS(PA, PB) ! Vectorial product 3D : PA * PB +! + IMPLICIT NONE ! REAL, DIMENSION(3) :: CROSS REAL, DIMENSION(3), INTENT(IN) :: PA, PB @@ -113,6 +117,8 @@ END FUNCTION CROSS !######################################################### FUNCTION NORM(PA) ! Eulerian norm of 3D vector : +! + IMPLICIT NONE ! REAL :: NORM REAL, DIMENSION(3), INTENT(IN) :: PA @@ -125,6 +131,8 @@ END FUNCTION NORM !######################################################### SUBROUTINE GET_ORI_MAT_X(PTHETA, PORI_MAT_X) ! Rotation matrix of PTHETA angle around X +! + IMPLICIT NONE ! REAL, INTENT(IN) :: PTHETA ! Angle REAL, DIMENSION(3,3), INTENT(OUT) :: PORI_MAT_X ! Matrix @@ -145,6 +153,8 @@ END SUBROUTINE GET_ORI_MAT_X !######################################################### SUBROUTINE GET_ORI_MAT_Y(PTHETA, PORI_MAT_Y) ! Rotation matrix of PTHETA angle around Y +! + IMPLICIT NONE ! REAL, INTENT(IN) :: PTHETA ! Angle REAL, DIMENSION(3,3), INTENT(OUT) :: PORI_MAT_Y ! Matrix @@ -165,6 +175,8 @@ END SUBROUTINE GET_ORI_MAT_Y !######################################################### SUBROUTINE GET_ORI_MAT_Z(PTHETA, PORI_MAT_Z) ! Rotation matrix of PTHETA angle around Z +! + IMPLICIT NONE ! REAL, INTENT(IN) :: PTHETA ! Angle REAL, DIMENSION(3,3), INTENT(OUT) :: PORI_MAT_Z ! Matrix @@ -185,6 +197,8 @@ END SUBROUTINE GET_ORI_MAT_Z !######################################################### FUNCTION GET_VEC_CYL(VEC_CART) ! Obtain cylindrical coordinates from a cartesian vector +! + IMPLICIT NONE ! REAL, DIMENSION(3), INTENT(IN) :: VEC_CART ! cartesian vector REAL, DIMENSION(3) :: GET_VEC_CYL ! cylindrical vector @@ -199,6 +213,8 @@ END FUNCTION GET_VEC_CYL !######################################################### FUNCTION GET_VEC_CART(VEC_CYL) ! Obtain cylindrical coordinates from a cartesian vector +! + IMPLICIT NONE ! REAL, DIMENSION(3), INTENT(IN) :: VEC_CYL ! cartesian vector REAL, DIMENSION(3) :: GET_VEC_CART ! cylindrical vector @@ -339,6 +355,8 @@ FUNCTION INTERP_LIN8NB(PPOS, KI, KJ, KK, PVAR, PZH) ! USE MODD_GRID_n, ONLY: XDXHAT, XXHATM, XDYHAT, XYHATM ! +IMPLICIT NONE +! REAL :: INTERP_LIN8NB ! Return REAL, DIMENSION(3), INTENT(IN) :: PPOS ! Position where we want to evaluate INTEGER, INTENT(IN) :: KI, KJ, KK ! Meso-NH cell index @@ -354,6 +372,8 @@ REAL :: ZHXNN, ZHXNP, ZHXPP, ZHXPN ! Interpotaled variables (VAR) in X pl ! REAL :: ZUXN, ZUXP ! Interpolated variables (VAR) in Y plance (VAR = A*POS + B) ! +REAL :: ZHXN, ZHXP ! Interpolated variables (VAR) in Y plance (VAR = A*POS + B) +! ! REAL :: ZALPHAX, ZALPHAY, ZALPHAZ ! Interpolated variables (VAR) in Z plane (VAR = A*POS + B) diff --git a/src/MNH/mnh_oasis_grid.F90 b/src/MNH/mnh_oasis_grid.F90 index 440ac2e7a3093ad88f084c9a46061d786cc9b3bc..f155f069450e85254c70abf4a208d831e17124bf 100644 --- a/src/MNH/mnh_oasis_grid.F90 +++ b/src/MNH/mnh_oasis_grid.F90 @@ -79,6 +79,8 @@ USE MODI_GET_FRAC_N USE MODE_GATHER_ll USE MODE_ll ! +IMPLICIT NONE +! !* 0.1 Declarations of argument ! ------------------------------------------------ LOGICAL, INTENT(IN) :: OD_MASTER ! MASTER process or not @@ -96,6 +98,7 @@ CHARACTER(LEN=4), PARAMETER :: YSFX_SEA = 'ssea' !* 0.2 Declaration of local variables ! ------------------------------------------------ INTEGER :: JI, JJ ! loop index +INTEGER :: IIB, IIE, IJB, IJE INTEGER :: IIU, IJU, ILU INTEGER :: IIU_ll, IJU_ll INTEGER :: IERROR diff --git a/src/MNH/mode_tmat.f90 b/src/MNH/mode_tmat.f90 index 2196eefd4dd609d9067140fde2e272db9e4a262f..c9e2803a445db7700ea850502033d6155d527fef 100644 --- a/src/MNH/mode_tmat.f90 +++ b/src/MNH/mode_tmat.f90 @@ -3,18 +3,18 @@ !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !------------------------------------------------------------------------------- -! algorithme initial cr�� par Michael Mishchenko (2000) +! algorithme initial cree par Michael Mishchenko (2000) ! -! algorithme modifi� par Corinne Burlaud (2000) puis Olivier Brunau (2002) -! calcul des param�tres radar en fonction de la forme des gouttes, du taux -! de pluies, de l'�l�vation du radar, de l'oscillation des gouttes, -! de la longueur d'onde �mise, pour une distribution de taille -! de goutte r�elle ou th�orique. -! l'essentiel des param�tres modifiables sont demand�s � l'utilisateur +! algorithme modifie par Corinne Burlaud (2000) puis Olivier Brunau (2002) +! calcul des parametres radar en fonction de la forme des gouttes, du taux +! de pluies, de l'elevation du radar, de l'oscillation des gouttes, +! de la longueur d'onde emise, pour une distribution de taille +! de goutte reelle ou theorique. +! l'essentiel des parametres modifiables sont demandes a l'utilisateur ! pendant l'execution du programme. ! -! Modif par Olivier Caumont (04/2008) pour interfa�age avec diagnostic -! radar de M�so-NH. +! Modif par Olivier Caumont (04/2008) pour interfacage avec diagnostic +! radar de Meso-NH. ! P. Wautelet 22/01/2019: replace double precision declarations by real(kind(0.0d0)) (to allow compilation by NAG compiler) ! P. Wautelet 22/02/2019: add kind parameter for CMPLX intrinsics (if not it default to single precision) ! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg @@ -299,6 +299,7 @@ use mode_msg IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) + IMPLICIT INTEGER (I-N) !! Parameter (NPN1=200, NPNG1=600, NPNG2=2*NPNG1, NPN2=2*NPN1,& !! NPN4=NPN1, NPN6=NPN4+1) @@ -372,7 +373,7 @@ P=ACOS(-1D0) !calcul de pi! !**** Lecture du fichier de DSD************************************** -!*********************spectre th�orique********************** +!*********************spectre theorique********************** !* constante en m-3.mm-1 !c N0=8000D0 ! @@ -404,7 +405,7 @@ ! !c do echant=1,AB !c Rmmh(echant)=0 -!* initial diameter:Deq=0.1 millim�tre +!* initial diameter:Deq=0.1 millimetre !* initial radius:AXI=Deq/2 ! !c AXI=0.05D0 @@ -412,7 +413,7 @@ !c NDeq(echant,1)=1 !c Deq_lu(echant,1)=Deq !c print*,Deq_lu(echant,1) -!c calcul de zth�orique +!c calcul de ztheorique !c Deq_lu2(echant,1)=Deq_lu(echant,1)**6 !c somm(echant)=somm(echant)+ !c & (NDeq(echant,1)*Deq_lu2(echant,1)) @@ -437,7 +438,7 @@ ! ! !***************************************************************** -!*****************d�but du fichier de sortie********************** +!*****************debut du fichier de sortie********************** THET0=90D0-Elev do param=1,2 @@ -468,16 +469,16 @@ !c??????? ! !**************************************** -!*********debut de la boucle pour chaque diam�tre de goutte mesur� -!*********32 diam�tres par echantillon r�el, 64 pour echantillon th�orique +!*********debut de la boucle pour chaque diametre de goutte mesure +!*********32 diametres par echantillon reel, 64 pour echantillon theorique ! -!C Diametre equivolumetrique en m�tre +!C Diametre equivolumetrique en metre !c Deq=Deq_lu(echant,1)*1D-3 ! ! AXI=Deq/2 ! !c IF(PARF.EQ."PB70") THEN -!c d�termination de la forme de la goutte (Pruppacher & Beard, 1970) +!c determination de la forme de la goutte (Pruppacher & Beard, 1970) !c if (gtte.EQ.2.AND.Deq.GE.5D-4) then !c oblate case !c EPS=1./(1.03-62.*Deq) @@ -486,7 +487,7 @@ !c EPS=1. !c ENDIF !c ELSE -!c d�termination de la forme de la goutte (Andsager et al., 1999) +!c determination de la forme de la goutte (Andsager et al., 1999) !c if (gtte.EQ.2) then !c oblate case !c if(Deq.ge.1.1E-3.and.Deq.le.4.4E-3) THEN @@ -791,7 +792,7 @@ !c NDeq(echant,I)=NDeq(echant,I)*1D3 if (param.EQ.1) then -!c calcul param�tres de propagation +!c calcul parametres de propagation !C PHI0 restera toujours fixe PHI0=0D0 @@ -902,7 +903,7 @@ !************************************************* elseif(param.EQ.2) then -!c calcul param�tres de retrodiffusion +!c calcul parametres de retrodiffusion !C PHI0 restera toujours fixe PHI0=0D0 @@ -1174,6 +1175,7 @@ !c INCLUDE 'ampld.par.f' !! Parameter (NPN1=200,NPN4=NPN1, NPN6=NPN4+1) IMPLICIT REAL(kind(0.0d0)) (A-B,D-H,O-Z), COMPLEX(kind(0.0d0)) (C) + IMPLICIT INTEGER (I-N) REAL(kind(0.0d0)) AL(3,2),AL1(3,2),AP(2,3),AP1(2,3),B(3,3),& R(2,2),R1(2,2),C(3,2),CA,CB,CT,CP,CTP,CPP,CT1,CP1,& CTP1,CPP1 @@ -1480,6 +1482,7 @@ USE MODD_TMAT, ONLY: NPN1,NPN4,NPN6 !! Parameter (NPN1=200,NPN4=NPN1, NPN6=NPN4+1) IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) + IMPLICIT INTEGER (I-N) REAL(kind(0.0d0)) DV1(NPN6), DV2(NPN6) DO N=1,NMAX @@ -1553,6 +1556,7 @@ USE MODD_TMAT, ONLY: NPN1,NPNG1,NPNG2 IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) + IMPLICIT INTEGER (I-N) !! Parameter (NPN1=200, NPNG1=600, NPNG2=2*NPNG1) REAL(kind(0.0d0)) X(NPNG2),W(NPNG2),& S(NPNG2),SS(NPNG2),& @@ -1595,6 +1599,7 @@ !! Parameter (NPN1=200, NPNG1=600, NPNG2=2*NPNG1) IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) + IMPLICIT INTEGER (I-N) REAL(kind(0.0d0)) X(NPNG2),R(NPNG2),DR(NPNG2),MRR,MRI,LAM,& Z(NPNG2),ZR(NPNG2),ZI(NPNG2),& DDR(NPNG2),DRR(NPNG2),DRI(NPNG2) @@ -1651,6 +1656,7 @@ SUBROUTINE RSP1(X,NG,NGAUSS,REV,EPS,R,DR) IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) + IMPLICIT INTEGER (I-N) REAL(kind(0.0d0)) X(NG),R(NG),DR(NG) A=REV*EPS**(1D0/3D0) @@ -1681,6 +1687,7 @@ USE MODD_TMAT,ONLY : XJ,XY,XJR,XJI,XDJ,XDY,XDJR,XDJI,NPN1,NPNG1,NPNG2 !! Parameter (NPN1=200, NPNG1=600, NPNG2=2*NPNG1) IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) + IMPLICIT INTEGER (I-N) REAL(kind(0.0d0)) X(NG),XR(NG),XI(NG),& !! J(NPNG2,NPN1),Y(NPNG2,NPN1),JR(NPNG2,NPN1),& !! JI(NPNG2,NPN1),DJ(NPNG2,NPN1),DY(NPNG2,NPN1),& @@ -1720,6 +1727,7 @@ SUBROUTINE RJB(X,Y,U,NMAX,NNMAX) IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) + IMPLICIT INTEGER (I-N) REAL(kind(0.0d0)) Y(NMAX),U(NMAX),Z(800) L=NMAX+NNMAX @@ -1752,6 +1760,7 @@ SUBROUTINE RYB(X,Y,V,NMAX) IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) + IMPLICIT INTEGER (I-N) REAL(kind(0.0d0)) Y(NMAX),V(NMAX) C=COS(X) @@ -1790,6 +1799,7 @@ USE MODD_TMAT,ONLY:NPN1 !! Parameter (NPN1=200) IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) + IMPLICIT INTEGER (I-N) REAL(kind(0.0d0)) YR(NMAX),YI(NMAX),UR(NMAX),UI(NMAX) REAL(kind(0.0d0)) CYR(NPN1),CYI(NPN1),CZR(1200),CZI(1200) @@ -1872,6 +1882,7 @@ !! Parameter (NPN1=200, NPNG1=600, NPNG2=2*NPNG1, NPN2=2*NPN1,& !! NPN4=NPN1,NPN6=NPN4+1) IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) + IMPLICIT INTEGER (I-N) REAL(kind(0.0d0)) X(NPNG2),W(NPNG2),AN(NPN1),& R(NPNG2),DR(NPNG2),SIG(NPN2),& !! J(NPNG2,NPN1),Y(NPNG2,NPN1),& @@ -2132,6 +2143,7 @@ DEALLOCATE(IG22) !! Parameter (NPN1=200, NPNG1=600, NPNG2=2*NPNG1, NPN2=2*NPN1, & !! NPN4=NPN1, NPN6=NPN4+1) IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) + IMPLICIT INTEGER (I-N) REAL(kind(0.0d0)) X(NPNG2),W(NPNG2),AN(NPN1),S(NPNG2),SS(NPNG2),& R(NPNG2),DR(NPNG2),SIG(NPN2),& !! J(NPNG2,NPN1),Y(NPNG2,NPN1),& @@ -2461,6 +2473,7 @@ DEALLOCATE(IG22) USE MODD_TMAT, ONLY:NPN1 !! Parameter (NPN1=200) IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) + IMPLICIT INTEGER (I-N) REAL(kind(0.0d0)) DV1(NPN1),DV2(NPN1) A=1D0 @@ -2526,6 +2539,7 @@ DEALLOCATE(IG22) !! Parameter (NPN1=200, NPN2=2*NPN1) IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) + IMPLICIT INTEGER (I-N) REAL(kind(0.0d0)) F(NPN2,NPN2),& !! QR(NPN2,NPN2),QI(NPN2,NPN2),& !! RGQR(NPN2,NPN2),RGQI(NPN2,NPN2),& @@ -2610,6 +2624,7 @@ DEALLOCATE(IG22) USE MODD_TMAT,ONLY : NPN1,NPN2 IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) + IMPLICIT INTEGER (I-N) !! Parameter (NPN1=200, NPN2=2*NPN1) REAL(kind(0.0d0)) A(NPN2,NPN2),F(NPN2,NPN2),B(NPN1),& WORK(NPN1),Q1(NPN1,NPN1),Q2(NPN1,NPN1),& @@ -2666,6 +2681,7 @@ DEALLOCATE(IG22) SUBROUTINE INVERT(NDIM,N,A,X,COND,IPVT,WORK,B) IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) + IMPLICIT INTEGER (I-N) REAL(kind(0.0d0)) A(NDIM,N),X(NDIM,N),WORK(N),B(N) INTEGER IPVT(N) @@ -2696,6 +2712,7 @@ DEALLOCATE(IG22) SUBROUTINE DECOMP (NDIM,N,A,COND,IPVT,WORK) IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) + IMPLICIT INTEGER (I-N) REAL(kind(0.0d0)) A(NDIM,N),COND,WORK(N) INTEGER IPVT(N) @@ -2807,6 +2824,7 @@ DEALLOCATE(IG22) SUBROUTINE SOLVE (NDIM,N,A,B,IPVT) IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) + IMPLICIT INTEGER (I-N) REAL(kind(0.0d0)) A(NDIM,N),B(N) INTEGER IPVT(N)