1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
SUBROUTINE read_3d_input_files(it, varname, field)
IMPLICIT NONE
INTEGER, INTENT(IN) :: it
CHARACTER(len=*), INTENT(IN) :: varname
REAL, INTENT(OUT), DIMENSION(:,:,:) :: field
INTEGER :: i, j, k
REAL :: factor, offset,min,max
CHARACTER(len=LEN(varname)) :: tmp
min= -1.e20
max=1.e20
tmp = TRIM(ADJUSTL(varname))
SELECT CASE (tmp)
CASE ('CLOUD')
factor = 0.02
offset = -20.
CASE ('U')
factor = .075
offset = 45.
max=21
min=17
CASE ('T')
factor = 1.3
offset = -27.5
min=191.
max=240.
CASE ('tro3')
factor = 1.
offset = 0.
END SELECT
DO k=1,SIZE(field, 3)
DO j=1,SIZE(field, 2)
DO i=1,SIZE(field, 1)
field(i,j,k) = ((k-1)*64 + (j-1)*16 + (i-1)*4 + it)*factor - offset
if (field(i,j,k).gt.max) field(i,j,k)=max
if (field(i,j,k).lt.min) field(i,j,k)=min
END DO
END DO
END DO
END SUBROUTINE read_3d_input_files
SUBROUTINE read_2d_input_files(it, varname, field)
IMPLICIT NONE
INTEGER, INTENT(IN) :: it
CHARACTER(len=*), INTENT(IN) :: varname
REAL, INTENT(OUT), DIMENSION(:,:) :: field
INTEGER :: i, j
REAL :: factor, offset,min,max
CHARACTER(len=LEN(varname)) :: tmp
min= -1.e20
max=1.e20
tmp = TRIM(ADJUSTL(varname))
SELECT CASE (tmp)
CASE ('LATENT')
factor = 4.2
offset = 0.
min=-65
max=65
CASE ('TSURF')
factor = 2.0
offset = -230.
max=285
min=270
CASE ('SOIL_WET')
factor = 4.
offset = 0.
max = 128.
CASE ('PSURF')
factor = 100.
offset = -9.4e4
CASE ('PRECIP')
factor = 1.2e-6
offset = 0.
max = 1.e-3
min=0.
CASE ('SFTLF')
factor = 1.
offset = -12.
max = 100.
min=0.
END SELECT
DO j=1,SIZE(field, 2)
DO i=1,SIZE(field, 1)
field(i,size(field,2)+1-j) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
if (field(i,size(field,2)+1-j).gt.max) field(i,size(field,2)+1-j)=max
if (field(i,size(field,2)+1-j).lt.min) field(i,size(field,2)+1-j)=min
END DO
END DO
END SUBROUTINE read_2d_input_files
SUBROUTINE read_1d_input_files(it, varname, field)
IMPLICIT NONE
INTEGER, INTENT(IN) :: it
CHARACTER(len=*), INTENT(IN) :: varname
REAL, INTENT(OUT), DIMENSION(:,:) :: field
INTEGER :: i, j
REAL :: factor, offset,min,max
CHARACTER(len=LEN(varname)) :: tmp
min=-1.e20
max=1.e20
tmp = TRIM(ADJUSTL(varname))
SELECT CASE (tmp)
CASE ('OFLUX')
factor = .5e14
offset = 2.e13
max = 1.492e14
min = 1.46e14
END SELECT
DO j=1,SIZE(field, 2)
DO i=1,SIZE(field, 1)
field(i,j) = ((j-1)*16 + (i-1)*4 + it)*factor - offset
if (field(i,j).gt.max) field(i,j)=max
if (field(i,j).lt.min) field(i,j)=min
END DO
END DO
END SUBROUTINE read_1d_input_files
|