diff --git a/src/MNH/flash_geom_elec.f90 b/src/MNH/flash_geom_elec.f90 index d2a5b05e6522074b2500c6902501bc488b29c4e7..b7686962ca5cf08e65b81f7a756e6901aea622be 100644 --- a/src/MNH/flash_geom_elec.f90 +++ b/src/MNH/flash_geom_elec.f90 @@ -96,6 +96,7 @@ END MODULE MODI_FLASH_GEOM_ELEC_n ! P. Wautelet 22/01/2019: use standard FLUSH statement instead of non standard intrinsics!! ! P. Wautelet 22/02/2019: use MOD intrinsics with same kind for all arguments (to respect Fortran standard) ! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg +! P. Wautelet 19/04/2019: use modd_precision kinds !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -2067,6 +2068,8 @@ END SUBROUTINE CHARGE_POCKET !* 0. DECLARATIONS ! ------------ ! +use modd_precision, only: MNHINT64, MNHINT64_MPI + IMPLICIT NONE ! !* 0.1 declaration of dummy arguments @@ -2086,10 +2089,10 @@ LOGICAL :: GRANDOM ! T = the gridpoints are chosen randomly INTEGER, DIMENSION(NPROC) :: INBPT_PROC REAL, DIMENSION(:), ALLOCATABLE :: ZAUX ! -INTEGER*8, DIMENSION(:), ALLOCATABLE :: I8VECT , I8VECT_LL -INTEGER , DIMENSION(:), ALLOCATABLE :: IRANK , IRANK_LL , IORDER_LL -INTEGER :: JI,JJ,JK,JIL , ICHOICE,IPOINT -INTEGER, DIMENSION(NPROC+1) :: IDISPL +INTEGER :: JI,JJ,JK,JIL , ICHOICE,IPOINT +INTEGER, DIMENSION(NPROC+1) :: IDISPL +INTEGER(kind=MNHINT64), DIMENSION(:), ALLOCATABLE :: I8VECT , I8VECT_LL +INTEGER, DIMENSION(:), ALLOCATABLE :: IRANK , IRANK_LL , IORDER_LL ! ! ! @@ -2175,8 +2178,8 @@ DO WHILE (IM .LE. IDELTA_IND .AND. ISTOP .NE. 1) ALLOCATE(I8VECT_LL(IPT_DIST_GLOB)) ALLOCATE(IRANK_LL(IPT_DIST_GLOB)) ALLOCATE(IORDER_LL(IPT_DIST_GLOB)) - CALL MPI_ALLGATHERV(I8VECT,IPT_DIST, MPI_INTEGER8,I8VECT_LL , & - INBPT_PROC, IDISPL, MPI_INTEGER8, NMNH_COMM_WORLD, IERR) + CALL MPI_ALLGATHERV(I8VECT,IPT_DIST, MNHINT64_MPI,I8VECT_LL , & + INBPT_PROC, IDISPL, MNHINT64_MPI, NMNH_COMM_WORLD, IERR) CALL MPI_ALLGATHERV(IRANK,IPT_DIST, MPI_INTEGER,IRANK_LL , & INBPT_PROC, IDISPL, MPI_INTEGER, NMNH_COMM_WORLD, IERR) CALL N8QUICK_SORT(I8VECT_LL, IORDER_LL) @@ -2198,7 +2201,7 @@ DO WHILE (IM .LE. IDELTA_IND .AND. ISTOP .NE. 1) !print*,"OUT => I8VECT_LL(ICHOICE)=",I8VECT_ll(ICHOICE),JI,JJ,JK,ICHOICE ZFLASH(JI,JJ,JK,IL) = 2. END IF - I8VECT_LL(ICHOICE) = 0. + I8VECT_LL(ICHOICE) = 0 ENDIF END DO END DO @@ -2622,9 +2625,11 @@ RECURSIVE SUBROUTINE N8QUICK_SORT(PLIST, KORDER) ! Modified by Alan Miller to include an associated integer array which gives ! the positions of the elements in the original order. ! +use modd_precision, only: MNHINT64 + IMPLICIT NONE ! -INTEGER*8, DIMENSION (:), INTENT(INOUT) :: PLIST +INTEGER(kind=MNHINT64), DIMENSION (:), INTENT(INOUT) :: PLIST INTEGER, DIMENSION (:), INTENT(OUT) :: KORDER ! ! Local variable @@ -2642,13 +2647,18 @@ END SUBROUTINE N8QUICK_SORT ! RECURSIVE SUBROUTINE N8QUICK_SORT_1(KLEFT_END, KRIGHT_END, PLIST1, KORDER1) -INTEGER, INTENT(IN) :: KLEFT_END, KRIGHT_END -INTEGER*8, DIMENSION (:), INTENT(INOUT) :: PLIST1 -INTEGER, DIMENSION (:), INTENT(INOUT) :: KORDER1 +use modd_precision, only: MNHINT64 + +implicit none + +INTEGER, INTENT(IN) :: KLEFT_END, KRIGHT_END +INTEGER(kind=MNHINT64), DIMENSION (:), INTENT(INOUT) :: PLIST1 +INTEGER, DIMENSION (:), INTENT(INOUT) :: KORDER1 ! Local variables -INTEGER :: JI, JJ, ITEMP -INTEGER*8 :: ZREF, ZTEMP -INTEGER, PARAMETER :: IMAX_SIMPLE_SORT_SIZE = 6 +INTEGER, PARAMETER :: IMAX_SIMPLE_SORT_SIZE = 6 + +INTEGER :: JI, JJ, ITEMP +INTEGER(kind=MNHINT64) :: ZREF, ZTEMP IF (KRIGHT_END < KLEFT_END + IMAX_SIMPLE_SORT_SIZE) THEN ! Use interchange sort for small PLISTs @@ -2691,8 +2701,8 @@ ELSE END IF END DO - IF (KLEFT_END < JJ) CALL N8QUICK_SORT_1(KLEFT_END, JJ, PLIST1, KORDER1) - IF (JI < KRIGHT_END) CALL N8QUICK_SORT_1(JI, KRIGHT_END,PLIST1,KORDER1) + IF ( KLEFT_END < JJ ) CALL N8QUICK_SORT_1( KLEFT_END, JJ, PLIST1, KORDER1 ) + IF ( JI < KRIGHT_END ) CALL N8QUICK_SORT_1( JI, KRIGHT_END, PLIST1, KORDER1 ) END IF END SUBROUTINE N8QUICK_SORT_1 @@ -2701,12 +2711,16 @@ END SUBROUTINE N8QUICK_SORT_1 ! SUBROUTINE N8INTERCHANGE_SORT(KLEFT_END, KRIGHT_END, PLIST2, KORDER2) -INTEGER, INTENT(IN) :: KLEFT_END, KRIGHT_END -INTEGER*8, DIMENSION (:), INTENT(INOUT) :: PLIST2 -INTEGER, DIMENSION (:), INTENT(INOUT) :: KORDER2 +use modd_precision, only: MNHINT64 + +implicit none + +INTEGER, INTENT(IN) :: KLEFT_END, KRIGHT_END +INTEGER(kind=MNHINT64), DIMENSION(:), INTENT(INOUT) :: PLIST2 +INTEGER, DIMENSION(:), INTENT(INOUT) :: KORDER2 ! Local variables -INTEGER :: JI, JJ, ITEMP -INTEGER*8 :: ZTEMP +INTEGER :: JI, JJ, ITEMP +INTEGER(kind=MNHINT64) :: ZTEMP ! boucle sur tous les points DO JI = KLEFT_END, KRIGHT_END - 1 @@ -2738,10 +2752,12 @@ END SUBROUTINE N8INTERCHANGE_SORT !------------------------------------------------------------------------------- SUBROUTINE MNH_RANDOM_NUMBER(ZRANDOM) - REAL :: ZRANDOM - INTEGER ,SAVE :: NSEED_MNH = 26032012 + use modd_precision, only: MNHINT32 + + REAL :: ZRANDOM + INTEGER(kind=MNHINT32), SAVE :: NSEED_MNH = 26032012_MNHINT32 - ZRANDOM = r8_uniform_01 (NSEED_MNH) + ZRANDOM = real( r8_uniform_01( NSEED_MNH ), kind(ZRANDOM) ) END SUBROUTINE MNH_RANDOM_NUMBER @@ -2820,37 +2836,39 @@ END SUBROUTINE N8INTERCHANGE_SORT ! ! Parameters: ! - ! Input/output, integer ( kind = 4 ) SEED, the "seed" value, which should + ! Input/output, integer ( kind = MNHINT32 ) SEED, the "seed" value, which should ! NOT be 0. On output, SEED has been updated. ! - ! Output, real ( kind = 8 ) R8_UNIFORM_01, a new pseudorandom variate, + ! Output, real ( kind = MNHREAL64 ) R8_UNIFORM_01, a new pseudorandom variate, ! strictly between 0 and 1. ! - use mode_msg + use modd_precision, only: MNHINT32, MNHREAL64 + + implicit none - IMPLICIT NONE + integer(kind = MNHINT32), intent(inout) :: seed + real(kind=MNHREAL64) :: r8_uniform_01 - INTEGER ( kind = 4 ), PARAMETER :: i4_huge = 2147483647 - INTEGER ( kind = 4 ) k - REAL r8_uniform_01 - INTEGER ( kind = 4 ) seed + integer(kind = MNHINT32), parameter :: i4_huge = 2147483647_MNHINT32 - IF ( seed == 0 ) THEN + integer(kind = MNHINT32) :: k + + if ( seed == 0_MNHINT32 ) THEN call Print_msg( NVERB_FATAL, 'GEN', 'r8_uniform_01', 'seed dummy argument must be different of 0' ) - END IF + end if - k = seed / 127773 + k = seed / 127773_MNHINT32 - seed = 16807 * ( seed - k * 127773 ) - k * 2836 + seed = 16807_MNHINT32 * ( seed - k * 127773_MNHINT32 ) - k * 2836_MNHINT32 - IF ( seed < 0 ) THEN + if ( seed < 0_MNHINT32 ) then seed = seed + i4_huge - END IF + end if - r8_uniform_01 = REAL ( seed ) * 4.656612875D-10 + r8_uniform_01 = real(seed) * 4.656612875d-10 - RETURN - END FUNCTION r8_uniform_01 + return + end function r8_uniform_01 ! END SUBROUTINE FLASH_GEOM_ELEC_n ! diff --git a/src/MNH/isocom.f b/src/MNH/isocom.f index f61d7aa0a2b4521278f97dbd00241fc8c7f32ca8..b02dbe9f597d2c93ca9f49458d7dfb825558f88c 100644 --- a/src/MNH/isocom.f +++ b/src/MNH/isocom.f @@ -13,7 +13,7 @@ C ======================== ARGUMENTS / USAGE =========================== C C INPUT: C 1. [WI] -C REAL*8 array of length [5]. +C REAL(kind(0.0d0)) array of length [5]. C Concentrations, expressed in moles/m3. Depending on the type of C problem solved (specified in CNTRL(1)), WI contains either C GAS+AEROSOL or AEROSOL only concentratios. @@ -24,15 +24,15 @@ C WI(4) - nitrate C WI(5) - chloride C C 2. [RHI] -C REAL*8 variable. +C REAL(kind(0.0d0)) variable. C Ambient relative humidity expressed on a (0,1) scale. C C 3. [TEMPI] -C REAL*8 variable. +C REAL(kind(0.0d0)) variable. C Ambient temperature expressed in Kelvins. C C 4. [CNTRL] -C REAL*8 array of length [2]. +C REAL(kind(0.0d0)) array of length [2]. C Parameters that control the type of problem solved. C C CNTRL(1): Defines the type of problem solved. @@ -47,7 +47,7 @@ C 1 - The aerosol is in only liquid state (metastable aerosol) C C OUTPUT: C 1. [WT] -C REAL*8 array of length [5]. +C REAL(kind(0.0d0)) array of length [5]. C Total concentrations (GAS+AEROSOL) of species, expressed in moles/m3. C If the foreward probelm is solved (CNTRL(1)=0), array WT is C identical to array WI. @@ -58,14 +58,14 @@ C WT(4) - total nitrate C WT(5) - total chloride C C 2. [GAS] -C REAL*8 array of length [03]. +C REAL(kind(0.0d0)) array of length [03]. C Gaseous species concentrations, expressed in moles/m3. C GAS(1) - NH3 C GAS(2) - HNO3 C GAS(3) - HCl C C 3. [AERLIQ] -C REAL*8 array of length [11]. +C REAL(kind(0.0d0)) array of length [11]. C Liquid aerosol species concentrations, expressed in moles/m3. C AERLIQ(01) - H+(aq) C AERLIQ(02) - Na+(aq) @@ -81,7 +81,7 @@ C AERLIQ(11) - HNO3(aq) (undissociated) C AERLIQ(12) - OH-(aq) C C 4. [AERSLD] -C REAL*8 array of length [09]. +C REAL(kind(0.0d0)) array of length [09]. C Solid aerosol species concentrations, expressed in moles/m3. C AERSLD(01) - NaNO3(s) C AERSLD(02) - NH4NO3(s) @@ -98,7 +98,7 @@ C CHARACTER(len=15) variable. C Returns the subcase which the input corresponds to. C C 6. [OTHER] -C REAL*8 array of length [6]. +C REAL(kind(0.0d0)) array of length [6]. C Returns solution information. C C OTHER(1): Shows if aerosol water exists. @@ -126,6 +126,7 @@ C C Modifications: C P. Wautelet 13/02/2018: use ifdef MNH_REAL to prevent problems with intrinsics on Blue Gene/Q C P. Wautelet 22/01/2019: replace obsolete SNGL intrinsics by REAL intrinsics +C P. Wautelet 19/04/2019: use kind(0.0d0) instead of kind=8 C======================================================================= C SUBROUTINE ISOROPIA (WI, RHI, TEMPI, CNTRL, @@ -280,7 +281,7 @@ C Defines the maximum number of iterations for activity coefficient C calculations. C C 6. [EPSACTI] -C REAL*8 variable. +C REAL(kind(0.0d0)) variable. C Defines the convergence criterion for activity coefficient C calculations. C @@ -1379,12 +1380,12 @@ C *** WRITTEN BY ATHANASIOS NENES C C======================================================================= C -C REAL*8 FUNCTION GETASR (SO4I, RHI) +C REAL(kind(0.0d0)) FUNCTION GETASR (SO4I, RHI) FUNCTION GETASR (SO4I, RHI) PARAMETER (NSO4S=14, NRHS=20, NASRD=NSO4S*NRHS) COMMON /ASRC/ ASRAT(NASRD), ASSO4(NSO4S) - REAL*8 SO4I, RHI - REAL*8 GETASR + REAL(kind(0.0d0)) SO4I, RHI + REAL(kind(0.0d0)) GETASR CCC CCC *** SOLVE USING FULL COMPUTATIONS, NOT LOOK-UP TABLES ************** CCC @@ -1531,7 +1532,7 @@ C======================================================================= C SUBROUTINE CALCHA INCLUDE 'isrpia.inc' - REAL*8 KAPA + REAL(kind(0.0d0)) KAPA CC CHARACTER ERRINF*40 C C *** CALCULATE HCL DISSOLUTION ***************************************** @@ -1628,7 +1629,7 @@ C======================================================================= C SUBROUTINE CALCNA INCLUDE 'isrpia.inc' - REAL*8 KAPA + REAL(kind(0.0d0)) KAPA CC CHARACTER ERRINF*40 C C *** CALCULATE HNO3 DISSOLUTION **************************************** @@ -1809,7 +1810,7 @@ C======================================================================= C SUBROUTINE CALCNHA INCLUDE 'isrpia.inc' - REAL*8 M1, M2, M3 + REAL(kind(0.0d0)) M1, M2, M3 CHARACTER ERRINF*40 C C *** SPECIAL CASE; WATER=ZERO ****************************************** @@ -1968,7 +1969,7 @@ C======================================================================= C SUBROUTINE CALCAMAQ (NH4I, OHI, DELT) INCLUDE 'isrpia.inc' - REAL*8 NH4I + REAL(kind(0.0d0)) NH4I CC CHARACTER ERRINF*40 C C *** EQUILIBRIUM CONSTANTS @@ -2028,7 +2029,7 @@ C======================================================================= C SUBROUTINE CALCAMAQ2 (GGNH3, NH4I, OHI, NH3AQ) INCLUDE 'isrpia.inc' - REAL*8 NH4I, NH3AQ + REAL(kind(0.0d0)) NH4I, NH3AQ C C *** EQUILIBRIUM CONSTANTS C @@ -2072,7 +2073,7 @@ C======================================================================= C SUBROUTINE CALCCLAQ (CLI, HI, DELT) INCLUDE 'isrpia.inc' - REAL*8 CLI + REAL(kind(0.0d0)) CLI C C *** EQUILIBRIUM CONSTANTS C @@ -2123,7 +2124,7 @@ C======================================================================= C SUBROUTINE CALCCLAQ2 (GGCL, CLI, HI, CLAQ) INCLUDE 'isrpia.inc' - REAL*8 CLI + REAL(kind(0.0d0)) CLI C C *** EQUILIBRIUM CONSTANTS C @@ -2166,7 +2167,7 @@ C======================================================================= C SUBROUTINE CALCNIAQ (NO3I, HI, DELT) INCLUDE 'isrpia.inc' - REAL*8 NO3I + REAL(kind(0.0d0)) NO3I C C *** EQUILIBRIUM CONSTANTS C @@ -2220,7 +2221,7 @@ C======================================================================= C SUBROUTINE CALCNIAQ2 (GGNO3, NO3I, HI, NO3AQ) INCLUDE 'isrpia.inc' - REAL*8 NO3I, NO3AQ + REAL(kind(0.0d0)) NO3I, NO3AQ C C *** EQUILIBRIUM CONSTANTS C @@ -2816,7 +2817,7 @@ C C REAL EX10, URF REAL G0(3,4),ZPL,ZMI,AGAMA,SION,H,CH,F1(3),F2(4) - REAL*8 MPL, XIJ, YJI + REAL(kind(0.0d0)) MPL, XIJ, YJI PARAMETER (URF=0.5) C G(I,J)= (F1(I)/Z(I) + F2(J)/Z(J+3)) / (Z(I)+Z(J+3)) - H @@ -3591,8 +3592,8 @@ CC Author : Athanasios Nenes CC CC ======================= ARGUMENTS / USAGE ============================= CC -CC VAR is the REAL*8 variable which value is to be saved -CC DEF is a REAL*8 variable, with the default value of VAR. +CC VAR is the REAL(kind(0.0d0)) variable which value is to be saved +CC DEF is a REAL(kind(0.0d0)) variable, with the default value of VAR. CC PROMPT is a CHARACTER varible containing the prompt string. CC PRFMT is a CHARACTER variable containing the FORMAT specifier CC for the default value DEF. @@ -3615,7 +3616,7 @@ CC CC CC*********************************************************************** CHARACTER PROMPT*(*), PRFMT*(*), BUFFER*128 - REAL*8 DEF, VAR + REAL(kind(0.0d0)) DEF, VAR INTEGER IERR C IERR = 0 @@ -3778,10 +3779,10 @@ C======================================================================= C SUBROUTINE POLY3 (A1, A2, A3, ROOT, ISLV) C - IMPLICIT REAL*8 (A-H, O-Z) + IMPLICIT REAL(kind(0.0d0)) (A-H, O-Z) PARAMETER (EXPON=1.D0/3.D0, ZERO=0.D0, THET1=120.D0/180.D0, & THET2=240.D0/180.D0, PI=3.14159265358932, EPS=1D-50) - REAL*8 X(3) + REAL(kind(0.0d0)) X(3) C C *** SPECIAL CASE : QUADRATIC*X EQUATION ***************************** C @@ -3878,7 +3879,7 @@ C======================================================================= C SUBROUTINE POLY3B (A1, A2, A3, RTLW, RTHI, ROOT, ISLV) C - IMPLICIT REAL*8 (A-H, O-Z) + IMPLICIT REAL(kind(0.0d0)) (A-H, O-Z) PARAMETER (ZERO=0.D0, EPS=1D-15, MAXIT=100, NDIV=5) C FUNC(X) = X**3.d0 + A1*X**2.0 + A2*X + A3 @@ -3944,7 +3945,7 @@ C ccc PROGRAM DRIVER -ccc REAL*8 ROOT +ccc REAL(kind(0.0d0)) ROOT cccC ccc CALL POLY3 (-1.d0, 1.d0, -1.d0, ROOT, ISLV) ccc IF (ISLV.NE.0) STOP 'Error in POLY3' @@ -4093,7 +4094,7 @@ C ======================== ARGUMENTS / USAGE =========================== C C INPUT: C 1. [WI] -C REAL*8 array of length [5]. +C REAL(kind(0.0d0)) array of length [5]. C Concentrations, expressed in moles/m3. Depending on the type of C problem solved, WI contains either GAS+AEROSOL or AEROSOL only C concentratios. @@ -4104,11 +4105,11 @@ C WI(4) - nitrate C WI(5) - chloride C C 2. [RHI] -C REAL*8 variable. +C REAL(kind(0.0d0)) variable. C Ambient relative humidity expressed in a (0,1) scale. C C 3. [TEMPI] -C REAL*8 variable. +C REAL(kind(0.0d0)) variable. C Ambient temperature expressed in Kelvins. C C 4. [IPROB] @@ -4121,14 +4122,14 @@ C contains AEROSOL concentrations only. C C OUTPUT: C 1. [GAS] -C REAL*8 array of length [03]. +C REAL(kind(0.0d0)) array of length [03]. C Gaseous species concentrations, expressed in moles/m3. C GAS(1) - NH3 C GAS(2) - HNO3 C GAS(3) - HCl C C 2. [AERLIQ] -C REAL*8 array of length [11]. +C REAL(kind(0.0d0)) array of length [11]. C Liquid aerosol species concentrations, expressed in moles/m3. C AERLIQ(01) - H+(aq) C AERLIQ(02) - Na+(aq) @@ -4143,7 +4144,7 @@ C AERLIQ(10) - HNCl(aq) (undissociated) C AERLIQ(11) - HNO3(aq) (undissociated) C C 3. [AERSLD] -C REAL*8 array of length [09]. +C REAL(kind(0.0d0)) array of length [09]. C Solid aerosol species concentrations, expressed in moles/m3. C AERSLD(01) - NaNO3(s) C AERSLD(02) - NH4NO3(s) @@ -4439,11 +4440,11 @@ C The size of the error stack (maximum number of errors that can C be stored before the stack exhausts). C C 7. [TIN] -C REAL*8 variable +C REAL(kind(0.0d0)) variable C The value used for a very small number. C C 8. [GRT] -C REAL*8 variable +C REAL(kind(0.0d0)) variable C The value used for a very large number. C C *** COPYRIGHT 1996-2000, UNIVERSITY OF MIAMI, CARNEGIE MELLON UNIVERSITY diff --git a/src/MNH/lima_functions.f90 b/src/MNH/lima_functions.f90 index 30fd902b4ef4169f78e2e5a60dca84911d1b7c71..f253b700aa334c5879f149748cf21cfa4e489c00 100644 --- a/src/MNH/lima_functions.f90 +++ b/src/MNH/lima_functions.f90 @@ -4,8 +4,8 @@ !MNH_LIC for details. version 1. !----------------------------------------------------------------- ! Modifications: -! P.Wautelet 22/01/2019: replace double precision declarations by real(kind(0.0d0)) (to allow compilation by NAG compiler) -! +! P. Wautelet 22/01/2019: replace double precision declarations by real(kind(0.0d0)) (to allow compilation by NAG compiler) +! P. Wautelet 19/04/2019: use modd_precision kinds !----------------------------------------------------------------- !################################# MODULE MODI_LIMA_FUNCTIONS @@ -222,13 +222,15 @@ END FUNCTION DELTA_VEC !########################### SUBROUTINE gaulag(x,w,n,alf) !########################### + use modd_precision, only: MNHREAL64 + INTEGER n,MAXIT REAL alf,w(n),x(n) - REAL(kind=8) :: EPS + REAL(kind=MNHREAL64) :: EPS PARAMETER (EPS=3.D-14,MAXIT=10) INTEGER i,its,j REAL ai - REAL(kind=8) :: p1,p2,p3,pp,z,z1 + REAL(kind=MNHREAL64) :: p1,p2,p3,pp,z,z1 ! REAL SUMW ! @@ -277,12 +279,14 @@ END SUBROUTINE gaulag !########################################## SUBROUTINE gauher(x,w,n) !########################################## + use modd_precision, only: MNHREAL64 + INTEGER n,MAXIT REAL w(n),x(n) - REAL(kind=8) :: EPS,PIM4 + REAL(kind=MNHREAL64) :: EPS,PIM4 PARAMETER (EPS=3.D-14,PIM4=.7511255444649425D0,MAXIT=10) INTEGER i,its,j,m - REAL(kind=8) :: p1,p2,p3,pp,z,z1 + REAL(kind=MNHREAL64) :: p1,p2,p3,pp,z,z1 ! REAL SUMW ! diff --git a/src/MNH/modd_tmat.f90 b/src/MNH/modd_tmat.f90 index b9d6909e525d6d9880d36546ef869aa4ecb16279..a954b1a2f88079802001915892edec33216f6e73 100644 --- a/src/MNH/modd_tmat.f90 +++ b/src/MNH/modd_tmat.f90 @@ -1,7 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2010-2019 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. +!------------------------------------------------------------------------------- ! ################# MODULE MODD_TMAT ! ################# @@ -28,7 +29,8 @@ !! ------------- !! !! Original 23/03/2010 -!! +! P. Wautelet 19/04/2019: use kind(0.0d0) instead of kind=8 +! !------------------------------------------------------------------------------- ! @@ -57,16 +59,16 @@ REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: XIT21,XIT22 !COMMON /CT/ dimensions : (NPN2,NPN2) -REAL(KIND=8),DIMENSION(:,:),ALLOCATABLE,SAVE :: XTR1,XTI1 +REAL(kind(0.0d0)),DIMENSION(:,:),ALLOCATABLE,SAVE :: XTR1,XTI1 !COMMON /CTT/ dimensions : (NPN2,NPN2) -REAL(KIND=8),DIMENSION(:,:),ALLOCATABLE,SAVE :: XQR,XQI,XRGQR,XRGQI +REAL(kind(0.0d0)),DIMENSION(:,:),ALLOCATABLE,SAVE :: XQR,XQI,XRGQR,XRGQI ! !COMMON /CBESS/ dimensions (NPNG2,NPN1) -REAL(KIND=8),DIMENSION(:,:),ALLOCATABLE,SAVE ::XJ,XY,XJR,XJI,XDJ -REAL(KIND=8),DIMENSION(:,:),ALLOCATABLE,SAVE ::XDJR,XDJI,XDY +REAL(kind(0.0d0)),DIMENSION(:,:),ALLOCATABLE,SAVE ::XJ,XY,XJR,XJI,XDJ +REAL(kind(0.0d0)),DIMENSION(:,:),ALLOCATABLE,SAVE ::XDJR,XDJI,XDY END MODULE MODD_TMAT diff --git a/src/MNH/mode_datetime.f90 b/src/MNH/mode_datetime.f90 index 2684e11d48a4426dea6321524ba93edc6ebe080a..b6547cfa9cb7714be3b7c73a5d0f12d9b1398777 100644 --- a/src/MNH/mode_datetime.f90 +++ b/src/MNH/mode_datetime.f90 @@ -5,6 +5,7 @@ !----------------------------------------------------------------- ! Modifications: ! P. Wautelet 22/02/2019: use MOD intrinsics with same kind for all arguments (to respect Fortran standard) +! P. Wautelet 19/04/2019: use modd_precision kinds !----------------------------------------------------------------- MODULE MODE_DATETIME ! @@ -38,29 +39,31 @@ SUBROUTINE DATETIME_TIME2REFERENCE(TPDATE,PDIST) ! !Compute number of seconds since reference date (and time) ! +use modd_precision, only: MNHINT64 + TYPE(DATE_TIME), INTENT(IN) :: TPDATE REAL, INTENT(OUT) :: PDIST ! -INTEGER(KIND=8) :: ILEAPS !Number of leap days -INTEGER(KIND=8) :: IDAYS !Number of days since reference date -INTEGER(KIND=8) :: IYEARS !Number of years since reference date -INTEGER(KIND=8) :: IDAY_CUR, IMONTH_CUR, IYEAR_CUR !Currrent day, month and year -REAL :: ZSEC !Current time of the day (in seconds) -TYPE(DATE_TIME) :: TZDATE +INTEGER(KIND=MNHINT64) :: ILEAPS !Number of leap days +INTEGER(KIND=MNHINT64) :: IDAYS !Number of days since reference date +INTEGER(KIND=MNHINT64) :: IYEARS !Number of years since reference date +INTEGER(KIND=MNHINT64) :: IDAY_CUR, IMONTH_CUR, IYEAR_CUR !Currrent day, month and year +REAL :: ZSEC !Current time of the day (in seconds) +TYPE(DATE_TIME) :: TZDATE ! -ILEAPS = 0 -IDAYS = 0 +ILEAPS = 0_MNHINT64 +IDAYS = 0_MNHINT64 ! TZDATE = TPDATE CALL DATETIME_CORRECTDATE(TZDATE) ! -IYEAR_CUR = TZDATE%TDATE%YEAR -IMONTH_CUR = TZDATE%TDATE%MONTH -IDAY_CUR = TZDATE%TDATE%DAY +IYEAR_CUR = int( TZDATE%TDATE%YEAR, kind=MNHINT64 ) +IMONTH_CUR = int( TZDATE%TDATE%MONTH, kind=MNHINT64 ) +IDAY_CUR = int( TZDATE%TDATE%DAY, kind=MNHINT64 ) ZSEC = TZDATE%TIME ! !Compute number of days since beginning of the year -IF ( ((MOD(IYEAR_CUR,4_8)==0).AND.(MOD(IYEAR_CUR,100_8)/=0)) .OR. (MOD(IYEAR_CUR,400_8)==0)) ILEAPS=1 +IF ( ((MOD(IYEAR_CUR,4_MNHINT64)==0).AND.(MOD(IYEAR_CUR,100_MNHINT64)/=0)) .OR. (MOD(IYEAR_CUR,400_MNHINT64)==0)) ILEAPS=1 SELECT CASE(IMONTH_CUR) CASE(1) IDAYS = IDAY_CUR-1 @@ -88,8 +91,8 @@ SELECT CASE(IMONTH_CUR) IDAYS = IDAY_CUR-1+31+28+ILEAPS+31+30+31+30+31+31+30+31+30 END SELECT ! -IYEARS = IYEAR_CUR-TPREFERENCE_DATE%TDATE%YEAR -IF (IYEARS<0) THEN +IYEARS = IYEAR_CUR - int( TPREFERENCE_DATE%TDATE%YEAR, kind=MNHINT64 ) +IF ( IYEARS < 0_MNHINT64 ) THEN CALL PRINT_MSG(NVERB_WARNING,'GEN','DATETIME_TIME2REFERENCE', & 'input year is smaller than reference year => result could be invalid') END IF diff --git a/src/MNH/mode_tmat.f90 b/src/MNH/mode_tmat.f90 index 9de6651339a1a9b187f10cde8f36629bf357b551..6c22fdabbe8eecbd80297423af55e4db1c8a246c 100644 --- a/src/MNH/mode_tmat.f90 +++ b/src/MNH/mode_tmat.f90 @@ -2,7 +2,7 @@ !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !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 modifié par Corinne Burlaud (2000) puis Olivier Brunau (2002) @@ -18,6 +18,7 @@ ! 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 +! P. Wautelet 19/04/2019: use kind(0.0d0) instead of kind=8 ! !**************************************************************************** @@ -296,7 +297,7 @@ use mode_msg - IMPLICIT REAL*8 (A-H,O-Z) + IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) !! Parameter (NPN1=200, NPNG1=600, NPNG2=2*NPNG1, NPN2=2*NPN1,& !! NPN4=NPN1, NPN6=NPN4+1) @@ -304,32 +305,32 @@ INTEGER param,oscil - REAL*8 SIGBETA,Fbeta - REAL*8 PDtotal,PDalpha,PDbeta,Poids + REAL(kind(0.0d0)) SIGBETA,Fbeta + REAL(kind(0.0d0)) PDtotal,PDalpha,PDbeta,Poids - REAL*8 LAM,MRR,MRI,Deq,X(NPNG2),W(NPNG2),S(NPNG2),SS(NPNG2),& + REAL(kind(0.0d0)) LAM,MRR,MRI,Deq,X(NPNG2),W(NPNG2),S(NPNG2),SS(NPNG2),& AN(NPN1),R(NPNG2),DR(NPNG2),& DDR(NPNG2),DRR(NPNG2),DRI(NPNG2),ANN(NPN1,NPN1) - REAL*8 NUMZ,DENZ,NUMTZ,DENTZ,ZDRT,NTotal - REAL*8 NUMD,DEND,DELTA,NUMTD,DENTD,DELTAT - REAL*8 PAS,KDP + REAL(kind(0.0d0)) NUMZ,DENZ,NUMTZ,DENTZ,ZDRT,NTotal + REAL(kind(0.0d0)) NUMD,DEND,DELTA,NUMTD,DENTD,DELTAT + REAL(kind(0.0d0)) PAS,KDP - REAL*8 THET0,THET,Elev,AXI + REAL(kind(0.0d0)) THET0,THET,Elev,AXI - REAL*8 MYS11cr,MYS22cr + REAL(kind(0.0d0)) MYS11cr,MYS22cr -!! REAL*8 TR1(NPN2,NPN2),TI1(NPN2,NPN2) +!! REAL(kind(0.0d0)) TR1(NPN2,NPN2),TI1(NPN2,NPN2) !! REAL*4 RT11(NPN6,NPN4,NPN4),RT12(NPN6,NPN4,NPN4),& !! RT21(NPN6,NPN4,NPN4),RT22(NPN6,NPN4,NPN4),& ! ! IT11(NPN6,NPN4,NPN4),IT12(NPN6,NPN4,NPN4),& !! IT21(NPN6,NPN4,NPN4),IT22(NPN6,NPN4,NPN4) - COMPLEX*16 S11,S12,S21,S22 - COMPLEX*16 S11u,S12u,S21u,S22u + COMPLEX(kind(0.0d0)) S11,S12,S21,S22 + COMPLEX(kind(0.0d0)) S11u,S12u,S21u,S22u - REAL*8 S11carre,S22carre - COMPLEX*16 NUMrhoAB,NUMTrhoAB + REAL(kind(0.0d0)) S11carre,S22carre + COMPLEX(kind(0.0d0)) NUMrhoAB,NUMTrhoAB !! COMMON /CT/ TR1,TI1 !! COMMON /TMAT/ RT11,RT12,RT21,RT22,IT11,IT12,IT21,IT22 @@ -1171,17 +1172,17 @@ !c INCLUDE 'ampld.par.f' !! Parameter (NPN1=200,NPN4=NPN1, NPN6=NPN4+1) - IMPLICIT REAL*8 (A-B,D-H,O-Z), COMPLEX*16 (C) - REAL*8 AL(3,2),AL1(3,2),AP(2,3),AP1(2,3),B(3,3),& + IMPLICIT REAL(kind(0.0d0)) (A-B,D-H,O-Z), COMPLEX(kind(0.0d0)) (C) + 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 -!C REAL*8 ZDR,NUM,DEN - REAL*8 DV1(NPN6),DV2(NPN6),DV01(NPN6),DV02(NPN6) +!C REAL(kind(0.0d0)) ZDR,NUM,DEN + REAL(kind(0.0d0)) DV1(NPN6),DV2(NPN6),DV01(NPN6),DV02(NPN6) !! REAL*4 TR11(NPN6,NPN4,NPN4),TR12(NPN6,NPN4,NPN4),& !! TR21(NPN6,NPN4,NPN4),TR22(NPN6,NPN4,NPN4),& !! TI11(NPN6,NPN4,NPN4),TI12(NPN6,NPN4,NPN4),& !! TI21(NPN6,NPN4,NPN4),TI22(NPN6,NPN4,NPN4) - COMPLEX*16 CAL(NPN4,NPN4),VV,VH,HV,HH + COMPLEX(kind(0.0d0)) CAL(NPN4,NPN4),VV,VH,HV,HH !! COMMON /TMAT/ TR11,TR12,TR21,TR22,TI11,TI12,TI21,TI22 IF (ALPHA.LT.0D0.OR.ALPHA.GT.360D0.OR.& @@ -1477,8 +1478,8 @@ USE MODD_TMAT, ONLY: NPN1,NPN4,NPN6 !! Parameter (NPN1=200,NPN4=NPN1, NPN6=NPN4+1) - IMPLICIT REAL*8 (A-H,O-Z) - REAL*8 DV1(NPN6), DV2(NPN6) + IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) + REAL(kind(0.0d0)) DV1(NPN6), DV2(NPN6) DO N=1,NMAX DV1(N)=0D0 @@ -1550,9 +1551,9 @@ SUBROUTINE CONST(NGAUSS,NMAX,X,W,AN,ANN,S,SS) USE MODD_TMAT, ONLY: NPN1,NPNG1,NPNG2 - IMPLICIT REAL*8 (A-H,O-Z) + IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) !! Parameter (NPN1=200, NPNG1=600, NPNG2=2*NPNG1) - REAL*8 X(NPNG2),W(NPNG2),& + REAL(kind(0.0d0)) X(NPNG2),W(NPNG2),& S(NPNG2),SS(NPNG2),& AN(NPN1),ANN(NPN1,NPN1),DD(NPN1) @@ -1592,8 +1593,8 @@ USE MODD_TMAT, ONLY: NPN1,NPNG1,NPNG2 !! Parameter (NPN1=200, NPNG1=600, NPNG2=2*NPNG1) - IMPLICIT REAL*8 (A-H,O-Z) - REAL*8 X(NPNG2),R(NPNG2),DR(NPNG2),MRR,MRI,LAM,& + IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) + 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) @@ -1648,8 +1649,8 @@ !C********************************************************************** SUBROUTINE RSP1(X,NG,NGAUSS,REV,EPS,R,DR) - IMPLICIT REAL*8 (A-H,O-Z) - REAL*8 X(NG),R(NG),DR(NG) + IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) + REAL(kind(0.0d0)) X(NG),R(NG),DR(NG) A=REV*EPS**(1D0/3D0) AA=A*A @@ -1678,8 +1679,8 @@ 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*8 (A-H,O-Z) - REAL*8 X(NG),XR(NG),XI(NG),& + IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) + 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),& !! DJR(NPNG2,NPN1),DJI(NPNG2,NPN1),& @@ -1717,8 +1718,8 @@ !C********************************************************************** SUBROUTINE RJB(X,Y,U,NMAX,NNMAX) - IMPLICIT REAL*8 (A-H,O-Z) - REAL*8 Y(NMAX),U(NMAX),Z(800) + IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) + REAL(kind(0.0d0)) Y(NMAX),U(NMAX),Z(800) L=NMAX+NNMAX XX=1D0/X @@ -1749,8 +1750,8 @@ !C********************************************************************** SUBROUTINE RYB(X,Y,V,NMAX) - IMPLICIT REAL*8 (A-H,O-Z) - REAL*8 Y(NMAX),V(NMAX) + IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) + REAL(kind(0.0d0)) Y(NMAX),V(NMAX) C=COS(X) S=SIN(X) @@ -1787,9 +1788,9 @@ USE MODD_TMAT,ONLY:NPN1 !! Parameter (NPN1=200) - IMPLICIT REAL*8 (A-H,O-Z) - REAL*8 YR(NMAX),YI(NMAX),UR(NMAX),UI(NMAX) - REAL*8 CYR(NPN1),CYI(NPN1),CZR(1200),CZI(1200) + IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) + REAL(kind(0.0d0)) YR(NMAX),YI(NMAX),UR(NMAX),UI(NMAX) + REAL(kind(0.0d0)) CYR(NPN1),CYI(NPN1),CZR(1200),CZI(1200) L=NMAX+NNMAX XRXI=1D0/(XR*XR+XI*XI) @@ -1869,8 +1870,8 @@ NPN1,NPNG1,NPNG2,NPN2,NPN4,NPN6 !! Parameter (NPN1=200, NPNG1=600, NPNG2=2*NPNG1, NPN2=2*NPN1,& !! NPN4=NPN1,NPN6=NPN4+1) - IMPLICIT REAL*8 (A-H,O-Z) - REAL*8 X(NPNG2),W(NPNG2),AN(NPN1),& + IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) + REAL(kind(0.0d0)) X(NPNG2),W(NPNG2),AN(NPN1),& R(NPNG2),DR(NPNG2),SIG(NPN2),& !! J(NPNG2,NPN1),Y(NPNG2,NPN1),& !! JR(NPNG2,NPN1),JI(NPNG2,NPN1),DJ(NPNG2,NPN1),& @@ -1880,12 +1881,12 @@ D1(NPNG2,NPN1),D2(NPNG2,NPN1),& DRI(NPNG2),RR(NPNG2),& DV1(NPN1),DV2(NPN1) - REAL(KIND=8),DIMENSION(:,:),ALLOCATABLE :: R11,R12,R21,R22 - REAL(KIND=8),DIMENSION(:,:),ALLOCATABLE :: I11,I12,I21,I22 - REAL(KIND=8),DIMENSION(:,:),ALLOCATABLE :: RG11,RG12,RG21,RG22 - REAL(KIND=8),DIMENSION(:,:),ALLOCATABLE :: IG11,IG12,IG21,IG22 + REAL(kind(0.0d0)),DIMENSION(:,:),ALLOCATABLE :: R11,R12,R21,R22 + REAL(kind(0.0d0)),DIMENSION(:,:),ALLOCATABLE :: I11,I12,I21,I22 + REAL(kind(0.0d0)),DIMENSION(:,:),ALLOCATABLE :: RG11,RG12,RG21,RG22 + REAL(kind(0.0d0)),DIMENSION(:,:),ALLOCATABLE :: IG11,IG12,IG21,IG22 - REAL*8 ANN(NPN1,NPN1),& + REAL(kind(0.0d0)) ANN(NPN1,NPN1),& !! QR(NPN2,NPN2),QI(NPN2,NPN2),& !! RGQR(NPN2,NPN2),RGQI(NPN2,NPN2),& TQR(NPN2,NPN2),TQI(NPN2,NPN2),& @@ -2129,8 +2130,8 @@ DEALLOCATE(IG22) !c INCLUDE 'ampld.par.f' !! Parameter (NPN1=200, NPNG1=600, NPNG2=2*NPNG1, NPN2=2*NPN1, & !! NPN4=NPN1, NPN6=NPN4+1) - IMPLICIT REAL*8 (A-H,O-Z) - REAL*8 X(NPNG2),W(NPNG2),AN(NPN1),S(NPNG2),SS(NPNG2),& + IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) + 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),& !! JR(NPNG2,NPN1),JI(NPNG2,NPN1),DJ(NPNG2,NPN1),& @@ -2140,12 +2141,12 @@ DEALLOCATE(IG22) D1(NPNG2,NPN1),D2(NPNG2,NPN1),& DRI(NPNG2),DS(NPNG2),DSS(NPNG2),RR(NPNG2),& DV1(NPN1),DV2(NPN1) - REAL(KIND=8),DIMENSION(:,:),ALLOCATABLE :: R11,R12,R21,R22 - REAL(KIND=8),DIMENSION(:,:),ALLOCATABLE :: I11,I12,I21,I22 - REAL(KIND=8),DIMENSION(:,:),ALLOCATABLE :: RG11,RG12,RG21,RG22 - REAL(KIND=8),DIMENSION(:,:),ALLOCATABLE :: IG11,IG12,IG21,IG22 + REAL(kind(0.0d0)),DIMENSION(:,:),ALLOCATABLE :: R11,R12,R21,R22 + REAL(kind(0.0d0)),DIMENSION(:,:),ALLOCATABLE :: I11,I12,I21,I22 + REAL(kind(0.0d0)),DIMENSION(:,:),ALLOCATABLE :: RG11,RG12,RG21,RG22 + REAL(kind(0.0d0)),DIMENSION(:,:),ALLOCATABLE :: IG11,IG12,IG21,IG22 - REAL*8 ANN(NPN1,NPN1),& + REAL(kind(0.0d0)) ANN(NPN1,NPN1),& !! QR(NPN2,NPN2),QI(NPN2,NPN2),& !! RGQR(NPN2,NPN2),RGQI(NPN2,NPN2),& TQR(NPN2,NPN2),TQI(NPN2,NPN2),& @@ -2458,8 +2459,8 @@ DEALLOCATE(IG22) USE MODD_TMAT, ONLY:NPN1 !! Parameter (NPN1=200) - IMPLICIT REAL*8 (A-H,O-Z) - REAL*8 DV1(NPN1),DV2(NPN1) + IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) + REAL(kind(0.0d0)) DV1(NPN1),DV2(NPN1) A=1D0 QS=SQRT(1D0-X*X) @@ -2523,12 +2524,12 @@ DEALLOCATE(IG22) !! Parameter (NPN1=200, NPN2=2*NPN1) - IMPLICIT REAL*8 (A-H,O-Z) - REAL*8 F(NPN2,NPN2),& + IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) + REAL(kind(0.0d0)) F(NPN2,NPN2),& !! QR(NPN2,NPN2),QI(NPN2,NPN2),& !! RGQR(NPN2,NPN2),RGQI(NPN2,NPN2),& A(NPN2,NPN2),C(NPN2,NPN2),D(NPN2,NPN2),E(NPN2,NPN2) -!! REAL*8 TR1(NPN2,NPN2),TI1(NPN2,NPN2) +!! REAL(kind(0.0d0)) TR1(NPN2,NPN2),TI1(NPN2,NPN2) !c INTEGER IPVT(NPN2) !! COMMON /CT/ TR1,TI1 !! COMMON /CTT/ QR,QI,RGQR,RGQI @@ -2587,7 +2588,7 @@ DEALLOCATE(IG22) !C******************************************************************** SUBROUTINE PROD(A,B,C,NDIM,N) - REAL*8 A(NDIM,N),B(NDIM,N),C(NDIM,N),cij + REAL(kind(0.0d0)) A(NDIM,N),B(NDIM,N),C(NDIM,N),cij DO I=1,N DO J=1,N @@ -2607,9 +2608,9 @@ DEALLOCATE(IG22) SUBROUTINE INV1(NMAX,F,A) USE MODD_TMAT,ONLY : NPN1,NPN2 - IMPLICIT REAL*8 (A-H,O-Z) + IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) !! Parameter (NPN1=200, NPN2=2*NPN1) - REAL*8 A(NPN2,NPN2),F(NPN2,NPN2),B(NPN1),& + REAL(kind(0.0d0)) A(NPN2,NPN2),F(NPN2,NPN2),B(NPN1),& WORK(NPN1),Q1(NPN1,NPN1),Q2(NPN1,NPN1),& P1(NPN1,NPN1),P2(NPN1,NPN1) INTEGER IPVT(NPN1),IND1(NPN1),IND2(NPN1) @@ -2663,8 +2664,8 @@ DEALLOCATE(IG22) !C********************************************************************* SUBROUTINE INVERT(NDIM,N,A,X,COND,IPVT,WORK,B) - IMPLICIT REAL*8 (A-H,O-Z) - REAL*8 A(NDIM,N),X(NDIM,N),WORK(N),B(N) + IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) + REAL(kind(0.0d0)) A(NDIM,N),X(NDIM,N),WORK(N),B(N) INTEGER IPVT(N) CALL DECOMP (NDIM,N,A,COND,IPVT,WORK) @@ -2693,8 +2694,8 @@ DEALLOCATE(IG22) !C******************************************************************** SUBROUTINE DECOMP (NDIM,N,A,COND,IPVT,WORK) - IMPLICIT REAL*8 (A-H,O-Z) - REAL*8 A(NDIM,N),COND,WORK(N) + IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) + REAL(kind(0.0d0)) A(NDIM,N),COND,WORK(N) INTEGER IPVT(N) IPVT(N)=1 @@ -2804,8 +2805,8 @@ DEALLOCATE(IG22) !C********************************************************************** SUBROUTINE SOLVE (NDIM,N,A,B,IPVT) - IMPLICIT REAL*8 (A-H,O-Z) - REAL*8 A(NDIM,N),B(N) + IMPLICIT REAL(kind(0.0d0)) (A-H,O-Z) + REAL(kind(0.0d0)) A(NDIM,N),B(N) INTEGER IPVT(N) IF (N.NE.1) THEN @@ -2846,8 +2847,8 @@ DEALLOCATE(IG22) !C********************************************************************** SUBROUTINE GAUSS(N,IND1,IND2,Z,W) - IMPLICIT REAL*8 (A-H,P-Z) - REAL*8 Z(N),W(N) + IMPLICIT REAL(kind(0.0d0)) (A-H,P-Z) + REAL(kind(0.0d0)) Z(N),W(N) DATA A,B,C /1D0,2D0,3D0/ IND=MOD(N,2) @@ -2915,11 +2916,3 @@ DEALLOCATE(IG22) RETURN END - - - - - - - -