- Timestamp:
- Aug 18, 2017, 8:21:48 PM (8 years ago)
- Location:
- trunk/tools
- Files:
-
- 1 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tools/interpolate.f90
r1606 r1608 16 16 ! Function to search a given value from a coarser version of the data 17 17 18 USE module_definitions 18 19 USE module_generic 19 20 … … 37 38 REAL(r_k) :: fraclonv, fraclatv 38 39 REAL(r_k), ALLOCATABLE, DIMENSION(:,:) :: difflonlat, lon, lat 39 CHARACTER(LEN=50) :: fname40 40 41 41 ! Variables … … 225 225 REAL(r_k), ALLOCATABLE, DIMENSION(:,:) :: fractionlon, fractionlat 226 226 INTEGER :: fracdx, fracdy 227 CHARACTER(LEN=50) :: fname228 227 229 228 !!!!!!! Variables -
trunk/tools/module_ForDiagnostics.f90
r1606 r1608 7 7 MODULE module_ForDiagnostics 8 8 9 USE module_definitions 9 10 USE module_generic 10 11 USE module_ForDiagnosticsVars … … 31 32 IMPLICIT NONE 32 33 33 INTEGER, PARAMETER :: r_k = KIND(1.d0)34 34 INTEGER, INTENT(in) :: d1, d2, d3, d4 35 35 REAL(r_k), DIMENSION(d1,d2,d3,d4), INTENT(in) :: cldfra4D, pres4D … … 38 38 ! Local 39 39 INTEGER :: i,j,k, zdim, Ndim 40 CHARACTER(LEN=50) :: fname41 40 42 41 !!!!!!! Variables … … 71 70 IMPLICIT NONE 72 71 73 INTEGER, PARAMETER :: r_k = KIND(1.d0)74 72 INTEGER, INTENT(in) :: d1, d2, d3 75 73 REAL(r_k), DIMENSION(d1,d2,d3), INTENT(in) :: cldfra3D, pres3D … … 78 76 ! Local 79 77 INTEGER :: i,j,k, zdim, Ndim 80 CHARACTER(LEN=50) :: fname81 78 82 79 !!!!!!! Variables … … 109 106 IMPLICIT NONE 110 107 111 INTEGER, PARAMETER :: r_k = KIND(1.d0)112 108 INTEGER, INTENT(in) :: Ndim, d1, d2, d3, d4, zdim 113 109 REAL(r_k), DIMENSION(d1), OPTIONAL, INTENT(in) :: cldfra1D, pres1D … … 133 129 ! Local 134 130 INTEGER :: i,j,k 135 CHARACTER(LEN=50) :: fname136 131 137 132 !!!!!!! Variables … … 253 248 IMPLICIT NONE 254 249 255 INTEGER, PARAMETER :: r_k = KIND(1.d0)256 250 INTEGER, INTENT(in) :: d1, d2, d3, d4 257 251 REAL(r_k), DIMENSION(d1,d2,d3,d4), INTENT(in) :: cldfra4D … … 260 254 ! Local 261 255 INTEGER :: i,j,k, zdim, Ndim 262 CHARACTER(LEN=50) :: fname263 256 264 257 !!!!!!! Variables … … 292 285 IMPLICIT NONE 293 286 294 INTEGER, PARAMETER :: r_k = KIND(1.d0)295 287 INTEGER, INTENT(in) :: d1, d2, d3 296 288 REAL(r_k), DIMENSION(d1,d2,d3), INTENT(in) :: cldfra3D … … 299 291 ! Local 300 292 INTEGER :: i,j,k, zdim, Ndim 301 CHARACTER(LEN=50) :: fname302 293 303 294 !!!!!!! Variables … … 328 319 IMPLICIT NONE 329 320 330 INTEGER, PARAMETER :: r_k = KIND(1.d0)331 321 INTEGER, INTENT(in) :: Ndim, d1, d2, d3, d4, zdim 332 322 REAL(r_k), DIMENSION(d1), OPTIONAL, INTENT(in) :: cldfra1D … … 348 338 ! Local 349 339 INTEGER :: i,j,k 350 CHARACTER(LEN=50) :: fname351 340 352 341 !!!!!!! Variables -
trunk/tools/module_ForDiagnosticsVars.f90
r1606 r1608 7 7 MODULE module_ForDiagnosticsVars 8 8 9 USE module_definitions 9 10 USE module_generic 10 11 11 12 IMPLICIT NONE 12 13 13 ! INTEGER, PARAMETER :: r_k = KIND(1.d0)14 14 REAL(r_k), PARAMETER :: ZEPSEC=1.0D-12 15 15 ! Low limit pressure for medium clouds [Pa] … … 17 17 ! Low limit pressure for High clouds [Pa] 18 18 REAL(r_k), PARAMETER :: prmlc = 68000.d0 19 20 REAL(r_k), PARAMETER :: zero=0.d021 REAL(r_k), PARAMETER :: one=1.d022 REAL(r_k), PARAMETER :: two=2.d023 19 24 20 CONTAINS … … 40 36 IMPLICIT NONE 41 37 42 ! INTEGER, PARAMETER :: r_k = KIND(1.d0)43 38 INTEGER, INTENT(in) :: dz 44 39 REAL(r_k), DIMENSION(dz), INTENT(in) :: clfra, p … … 47 42 ! Local 48 43 INTEGER :: iz 49 CHARACTER(LEN=50) :: fname50 44 REAL(r_k) :: zclearl, zcloudl, zclearm, zcloudm, & 51 45 zclearh, zcloudh … … 56 50 fname = 'var_cllmh' 57 51 58 zclearl = one 59 zcloudl = zero 60 zclearm = one 61 zcloudm = zero 62 zclearh = one 63 zcloudh = zero 52 zclearl = oneRK 53 zcloudl = zeroRK 54 zclearm = oneRK 55 zcloudm = zeroRK 56 zclearh = oneRK 57 zcloudh = zeroRK 64 58 65 var_cllmh = one 59 var_cllmh = oneRK 66 60 67 61 DO iz=1, dz 68 62 IF (p(iz) < prmhc) THEN 69 var_cllmh(3) = var_cllmh(3)*(one -MAX(clfra(iz),zcloudh))/(one-MIN(zcloudh,one-ZEPSEC))63 var_cllmh(3) = var_cllmh(3)*(oneRK-MAX(clfra(iz),zcloudh))/(oneRK-MIN(zcloudh,oneRK-ZEPSEC)) 70 64 zcloudh = clfra(iz) 71 65 ELSE IF ( (p(iz) >= prmhc) .AND. (p(iz) < prmlc) ) THEN 72 var_cllmh(2) = var_cllmh(2)*(one -MAX(clfra(iz),zcloudm))/(one-MIN(zcloudm,one-ZEPSEC))66 var_cllmh(2) = var_cllmh(2)*(oneRK-MAX(clfra(iz),zcloudm))/(oneRK-MIN(zcloudm,oneRK-ZEPSEC)) 73 67 zcloudm = clfra(iz) 74 68 ELSE IF (p(iz) >= prmlc) THEN 75 var_cllmh(1) = var_cllmh(1)*(one -MAX(clfra(iz),zcloudl))/(one-MIN(zcloudl,one-ZEPSEC))69 var_cllmh(1) = var_cllmh(1)*(oneRK-MAX(clfra(iz),zcloudl))/(oneRK-MIN(zcloudl,oneRK-ZEPSEC)) 76 70 zcloudl = clfra(iz) 77 71 ELSE … … 85 79 END DO 86 80 87 var_cllmh = one - var_cllmh81 var_cllmh = oneRK - var_cllmh 88 82 89 83 RETURN … … 97 91 IMPLICIT NONE 98 92 99 ! INTEGER, PARAMETER :: r_k = KIND(1.d0)100 93 INTEGER, INTENT(in) :: dz 101 94 REAL(r_k), DIMENSION(dz), INTENT(in) :: clfra … … 103 96 INTEGER :: iz 104 97 REAL(r_k) :: zclear, zcloud 105 CHARACTER(LEN=50) :: fname 98 106 99 !!!!!!! Variables 107 100 ! cfra: 1-column cloud fraction values … … 109 102 fname = 'var_clt' 110 103 111 zclear = one 112 zcloud = zero 104 zclear = oneRK 105 zcloud = zeroRK 113 106 114 107 DO iz=1,dz 115 zclear = zclear*(one -MAX(clfra(iz),zcloud))/(one-MIN(zcloud,1.-ZEPSEC))116 var_clt = one - zclear108 zclear = zclear*(oneRK-MAX(clfra(iz),zcloud))/(oneRK-MIN(zcloud,1.-ZEPSEC)) 109 var_clt = oneRK - zclear 117 110 zcloud = clfra(iz) 118 111 END DO -
trunk/tools/module_ForInterpolate.f90
r1606 r1608 10 10 MODULE module_ForInterpolate 11 11 12 USE module_definitions 12 13 USE module_generic 13 14 … … 37 38 REAL(r_k) :: fraclonv, fraclatv 38 39 REAL(r_k), ALLOCATABLE, DIMENSION(:,:) :: difflonlat, lon, lat 39 CHARACTER(LEN=50) :: fname40 40 41 41 ! Variables … … 227 227 REAL(r_k) :: fraclonv, fraclatv 228 228 REAL(r_k), ALLOCATABLE, DIMENSION(:,:) :: difflonlat, lon, lat 229 CHARACTER(LEN=50) :: fname230 229 231 230 ! Variables … … 446 445 ! Local 447 446 REAL(r_k), DIMENSION(dx,dy) :: difflonlat 448 CHARACTER(LEN=50) :: fname449 447 450 448 ! Variables … … 503 501 REAL(r_k), ALLOCATABLE, DIMENSION(:,:) :: fractionlon, fractionlat 504 502 INTEGER :: dfracdx, dfracdy, fracdx, fracdy 505 CHARACTER(LEN=50) :: fname506 503 507 504 !!!!!!! Variables … … 609 606 REAL(r_k), ALLOCATABLE, DIMENSION(:,:) :: fractionlon, fractionlat 610 607 INTEGER :: dfracdx, dfracdy, fracdx, fracdy 611 CHARACTER(LEN=50) :: fname612 608 613 609 !!!!!!! Variables … … 735 731 REAL(r_k), DIMENSION(2) :: extremelon, extremelat, ipos 736 732 INTEGER, DIMENSION(2) :: iLl 737 CHARACTER(LEN=50) :: fname738 733 739 734 !!!!!!! Variables … … 889 884 REAL(r_k) :: w 890 885 REAL(r_k), DIMENSION(3,16,pdimx,pdimy) :: outLlw 891 CHARACTER(LEN=50) :: fname892 886 893 887 !!!!!!! Variables … … 967 961 REAL(r_k) :: w 968 962 REAL(r_k), DIMENSION(3,16,pdimx,pdimy) :: outLlw 969 CHARACTER(LEN=50) :: fname970 963 971 964 !!!!!!! Variables … … 1048 1041 REAL(r_k) :: w 1049 1042 REAL(r_k), DIMENSION(3,16,pdimx,pdimy) :: outLlw 1050 CHARACTER(LEN=50) :: fname1051 1043 1052 1044 !!!!!!! Variables … … 1133 1125 REAL(r_k) :: w 1134 1126 REAL(r_k), DIMENSION(3,16,pdimx,pdimy) :: outLlw 1135 CHARACTER(LEN=50) :: fname1136 1127 1137 1128 !!!!!!! Variables … … 1225 1216 REAL(r_k), DIMENSION(dimx,dimy) :: difflonlat 1226 1217 REAL(r_k), DIMENSION(2) :: extremelon, extremelat 1227 CHARACTER(LEN=50) :: fname1228 1218 1229 1219 !!!!!!! Variables … … 1324 1314 REAL(r_k), DIMENSION(dimy) :: difflat 1325 1315 REAL(r_k), DIMENSION(2) :: extremelon, extremelat 1326 CHARACTER(LEN=50) :: fname1327 1316 1328 1317 !!!!!!! Variables -
trunk/tools/module_generic.f90
r1606 r1608 1 1 MODULE module_generic 2 2 ! Module with generic functions 3 4 !!!!!!! Subroutines/Functions 5 ! ErrMsg: Subroutine to stop execution and provide an error message 6 ! ErrWarnMsg: Function to print error/warning message 3 7 ! Index1DArrayR: Function to provide the first index of a given value inside a 1D real array 8 ! Index1DArrayR_K: Function to provide the first index of a given value inside a 1D real(r_k) array 4 9 ! Index2DArrayR: Function to provide the first index of a given value inside a 2D real array 5 ! ErrWarnMsg: Function to print error/warning message6 7 INTEGER, PARAMETER :: r_k = KIND(1.d0) 8 ! Fill value at 64 bits 9 REAL(r_k) :: fillval64 = 1.e20 10 CHARACTER(len=50), PARAMETER :: errormsg = 'ERROR -- error -- ERROR -- error' 11 CHARACTER(len=50), PARAMETER :: warnmsg = 'WARNING -- warning -- WARNING -- warning'10 ! Nstrings: Function to repeat a number of times a given string 11 ! RangeI: Function to provide a range of d1 values from 'iniv' to 'endv', of integer values in a vector 12 ! RangeR: Function to provide a range of d1 values from 'iniv' to 'endv', of real values in a vector 13 ! RangeR_K: Function to provide a range of d1 from 'iniv' to 'endv', of real(r_k) values in a vector 14 ! vectorR_KS: Function to transform a vector of reals to a string of characters 15 16 USE module_definitions 12 17 13 18 CONTAINS 19 20 CHARACTER(len=1000) FUNCTION vectorR_KS(d1, vector) 21 ! Function to transform a vector of reals(r_k) to a string of characters 22 23 IMPLICIT NONE 24 25 INTEGER, INTENT(in) :: d1 26 REAL(r_k), DIMENSION(d1), INTENT(in) :: vector 27 28 ! Local 29 INTEGER :: iv 30 CHARACTER(len=50) :: RS 31 32 !!!!!!! Variables 33 ! d1: length of the vector 34 ! vector: values to transform 35 36 fname = 'vectorR_KS' 37 38 vectorR_KS = '' 39 DO iv=1, d1 40 WRITE(RS, '(F50.25)')vector(iv) 41 IF (iv == 1) THEN 42 vectorR_KS = TRIM(RS) 43 ELSE 44 vectorR_KS = TRIM(vectorR_KS) // ', ' // TRIM(RS) 45 END IF 46 END DO 47 48 END FUNCTION vectorR_KS 49 50 CHARACTER(len=1000) FUNCTION Nstrings(Strval, Ntimes) 51 ! Function to repeat a number of times a given string 52 53 IMPLICIT NONE 54 55 CHARACTER(LEN=50), INTENT(in) :: Strval 56 INTEGER, INTENT(in) :: Ntimes 57 58 ! Local 59 INTEGER :: i 60 61 !!!!!!! Variables 62 ! Strval: String to repeat 63 ! Ntimes: number of repetitions 64 65 fname = 'Nstrings' 66 67 Nstrings = '' 68 Do i=1, Ntimes 69 Nstrings = TRIM(Nstrings) // TRIM(Strval) 70 END DO 71 72 END FUNCTION Nstrings 14 73 15 74 INTEGER FUNCTION Index1DArrayR(array1D, d1, val) … … 25 84 ! Local 26 85 INTEGER :: i 27 CHARACTER(LEN=50) :: fname28 86 29 87 fname = 'Index1DArrayR' … … 40 98 END FUNCTION Index1DArrayR 41 99 100 INTEGER FUNCTION Index1DArrayR_K(array1D, d1, val) 101 ! Function to provide the first index of a given value inside a 1D real(r_k) array 102 103 IMPLICIT NONE 104 105 INTEGER, INTENT(in) :: d1 106 REAL(r_k), INTENT(in) :: val 107 REAL(r_k), DIMENSION(d1), INTENT(in) :: array1D 108 109 ! Local 110 INTEGER :: i 111 112 fname = 'Index1DArrayR_K' 113 114 Index1DArrayR_K = -1 115 116 DO i=1,d1 117 IF (array1d(i) == val) THEN 118 Index1DArrayR_K = i 119 EXIT 120 END IF 121 END DO 122 123 END FUNCTION Index1DArrayR_K 124 42 125 FUNCTION Index2DArrayR(array2D, d1, d2, val) 43 126 ! Function to provide the first index of a given value inside a 2D real array … … 53 136 ! Local 54 137 INTEGER :: i, j 55 CHARACTER(LEN=50) :: fname56 138 57 139 fname = 'Index2DArrayR' … … 71 153 END FUNCTION Index2DArrayR 72 154 155 FUNCTION RangeI(d1, iniv, endv) 156 ! Function to provide a range of d1 values from 'iniv' to 'endv', of integer values in a vector 157 158 IMPLICIT NONE 159 160 INTEGER, INTENT(in) :: d1, iniv, endv 161 INTEGER, DIMENSION(d1) :: RangeI 162 163 ! Local 164 INTEGER :: i, intv 165 166 fname = 'RangeI' 167 168 intv = (endv - iniv) / (d1*1 - 1) 169 170 RangeI(1) = iniv 171 DO i=2,d1 172 RangeI(i) = RangeI(i-1) + intv 173 END DO 174 175 END FUNCTION RangeI 176 177 FUNCTION RangeR(d1, iniv, endv) 178 ! Function to provide a range of d1 from 'iniv' to 'endv', of real values in a vector 179 180 IMPLICIT NONE 181 182 INTEGER, INTENT(in) :: d1 183 REAL, INTENT(in) :: iniv, endv 184 REAL, DIMENSION(d1) :: RangeR 185 186 ! Local 187 INTEGER :: i 188 REAL :: intv 189 190 fname = 'RangeR' 191 192 intv = (endv - iniv) / (d1*1. - 1.) 193 194 RangeR(1) = iniv 195 DO i=2,d1 196 RangeR(i) = RangeR(i-1) + intv 197 END DO 198 199 END FUNCTION RangeR 200 201 202 FUNCTION RangeR_K(d1, iniv, endv) 203 ! Function to provide a range of d1 from 'iniv' to 'endv', of real(r_k) values in a vector 204 205 IMPLICIT NONE 206 207 INTEGER, INTENT(in) :: d1 208 REAL(r_k), INTENT(in) :: iniv, endv 209 REAL(r_k), DIMENSION(d1) :: RangeR_K 210 211 ! Local 212 INTEGER :: i 213 REAL(r_k) :: intv 214 215 fname = 'RangeR_K' 216 217 intv = (endv - iniv) / (d1*oneRK-oneRK) 218 219 RangeR_K(1) = iniv 220 DO i=2,d1 221 RangeR_K(i) = RangeR_K(i-1) + intv 222 END DO 223 224 END FUNCTION RangeR_K 225 226 227 SUBROUTINE ErrMsg(msg, funcn, errN) 228 ! Subroutine to stop execution and provide an error message 229 230 IMPLICIT NONE 231 232 CHARACTER(LEN=*), INTENT(in) :: msg, funcn 233 INTEGER, INTENT(in) :: errN 234 235 ! Local 236 CHARACTER(LEN=50) :: emsg 237 238 !!!!!!! Variables 239 ! msg: message to print with the error 240 ! funcn: name of the funciton, section to localize the error 241 ! errN: number of the error provided for a given FORTRAN function 242 243 emsg = 'ERORR -- error -- ERROR -- error' 244 245 IF (errN /= 0) THEN 246 PRINT *,TRiM(emsg) 247 PRINT *,' ' // TRIM(funcn) // ': ' // TRIM(msg) // ' !!' 248 PRINT *,' error number:', errN 249 STOP 250 END IF 251 252 RETURN 253 254 END SUBROUTINE ErrMsg 255 73 256 CHARACTER(LEN=50) FUNCTION ErrWarnMsg(msg) 74 257 ! Function to print error/warning message … … 78 261 CHARACTER(LEN=3), INTENT(in) :: msg 79 262 ! Local 80 CHARACTER(LEN=50) :: fname81 263 82 264 fname = 'ErrWarnMsg'
Note: See TracChangeset
for help on using the changeset viewer.