32 |
C currently sure what TAF would do with this. |
C currently sure what TAF would do with this. |
33 |
COMMON /EXF_IOPTR/ glPtr |
COMMON /EXF_IOPTR/ glPtr |
34 |
REAL*4, POINTER :: glPtr(:,:) |
REAL*4, POINTER :: glPtr(:,:) |
35 |
|
COMMON /EXF_IOPTR8/ glPtr8 |
36 |
|
REAL*8, POINTER :: glPtr8(:,:) |
37 |
#endif |
#endif |
38 |
|
|
39 |
C subroutine variables |
C subroutine variables |
40 |
character*(*) infile |
character*(*) infile |
41 |
integer filePrec, irecord, nx_in, ny_in |
integer filePrec, irecord, nx_in, ny_in |
42 |
real*4 arrayin(-1:nx_in+2 , -1:ny_in+2) |
real*4 arrayin( -1:nx_in+2 , -1:ny_in+2 ) |
43 |
integer mythid |
integer mythid |
44 |
|
|
45 |
C Functions |
C Functions |
56 |
integer i, j, k, l, js, bi, bj, sp, interp_unit |
integer i, j, k, l, js, bi, bj, sp, interp_unit |
57 |
#ifdef EXF_IREAD_USE_GLOBAL_POINTER |
#ifdef EXF_IREAD_USE_GLOBAL_POINTER |
58 |
real*4, target :: global(nx_in,ny_in) |
real*4, target :: global(nx_in,ny_in) |
59 |
|
real*8, target :: global8(nx_in,ny_in) |
60 |
#else |
#else |
61 |
real*4 global(nx_in,ny_in) |
real*4 global(nx_in,ny_in) |
62 |
|
real*8 global8(nx_in,ny_in) |
63 |
#endif |
#endif |
64 |
|
|
65 |
_BARRIER |
_BARRIER |
73 |
&'EXF_INTERP_READ: nThreads > 1 needs EXF_IREAD_USE_GLOBAL_POINTER' |
&'EXF_INTERP_READ: nThreads > 1 needs EXF_IREAD_USE_GLOBAL_POINTER' |
74 |
ENDIF |
ENDIF |
75 |
#endif |
#endif |
|
C check input arguments |
|
|
IF ( .NOT. (filePrec .EQ. 32) ) |
|
|
& STOP 'stop in exf_interp.F: value of filePrec not allowed' |
|
76 |
|
|
77 |
C read in input data |
C read in input data |
78 |
#ifdef ALLOW_USE_MPI |
#ifdef ALLOW_USE_MPI |
88 |
length_of_rec=MDS_RECLEN( filePrec, nx_in*ny_in, mythid ) |
length_of_rec=MDS_RECLEN( filePrec, nx_in*ny_in, mythid ) |
89 |
open(interp_unit,file=infile,status='old',access='direct', |
open(interp_unit,file=infile,status='old',access='direct', |
90 |
& recl=length_of_rec) |
& recl=length_of_rec) |
91 |
read(interp_unit,rec=irecord) |
IF ( filePrec .EQ. 32 ) THEN |
92 |
& ((global(i,j),i=1,nx_in),j=1,ny_in) |
read(interp_unit,rec=irecord) |
93 |
|
& ((global(i,j),i=1,nx_in),j=1,ny_in) |
94 |
|
#ifdef _BYTESWAPIO |
95 |
|
call MDS_BYTESWAPR4(nx_in*ny_in,global) |
96 |
|
#endif /* _BYTESWAPIO */ |
97 |
|
ELSE |
98 |
|
read(interp_unit,rec=irecord) |
99 |
|
& ((global8(i,j),i=1,nx_in),j=1,ny_in) |
100 |
|
#ifdef _BYTESWAPIO |
101 |
|
call MDS_BYTESWAPR8(nx_in*ny_in,global8) |
102 |
|
#endif /* _BYTESWAPIO */ |
103 |
|
ENDIF |
104 |
close(interp_unit) |
close(interp_unit) |
105 |
ENDIF |
ENDIF |
106 |
|
|
107 |
C broadcast to all processes |
C broadcast to all processes |
108 |
call MPI_BCAST(global,nx_in*ny_in,MPI_REAL, |
IF ( filePrec .EQ. 32 ) THEN |
109 |
& 0,MPI_COMM_MODEL,ierr) |
call MPI_BCAST(global,nx_in*ny_in,MPI_REAL, |
110 |
|
& 0,MPI_COMM_MODEL,ierr) |
111 |
|
ELSE |
112 |
|
call MPI_BCAST(global8,nx_in*ny_in,MPI_DOUBLE_PRECISION, |
113 |
|
& 0,MPI_COMM_MODEL,ierr) |
114 |
|
ENDIF |
115 |
else |
else |
116 |
#endif /* ALLOW_USE_MPI */ |
#endif /* ALLOW_USE_MPI */ |
117 |
|
|
119 |
length_of_rec=MDS_RECLEN( filePrec, nx_in*ny_in, mythid ) |
length_of_rec=MDS_RECLEN( filePrec, nx_in*ny_in, mythid ) |
120 |
open(interp_unit,file=infile,status='old',access='direct', |
open(interp_unit,file=infile,status='old',access='direct', |
121 |
& recl=length_of_rec) |
& recl=length_of_rec) |
122 |
read(interp_unit,rec=irecord) global |
IF ( filePrec .EQ. 32 ) THEN |
123 |
|
read(interp_unit,rec=irecord) global |
124 |
|
#ifdef _BYTESWAPIO |
125 |
|
call MDS_BYTESWAPR4(nx_in*ny_in,global) |
126 |
|
#endif /* _BYTESWAPIO */ |
127 |
|
ELSE |
128 |
|
read(interp_unit,rec=irecord) global8 |
129 |
|
#ifdef _BYTESWAPIO |
130 |
|
call MDS_BYTESWAPR8(nx_in*ny_in,global8) |
131 |
|
#endif /* _BYTESWAPIO */ |
132 |
|
ENDIF |
133 |
close(interp_unit) |
close(interp_unit) |
134 |
|
|
135 |
#ifdef ALLOW_USE_MPI |
#ifdef ALLOW_USE_MPI |
136 |
endif |
endif |
137 |
#endif /* ALLOW_USE_MPI */ |
#endif /* ALLOW_USE_MPI */ |
138 |
#ifdef EXF_IREAD_USE_GLOBAL_POINTER |
#ifdef EXF_IREAD_USE_GLOBAL_POINTER |
139 |
glPtr => global |
IF ( filePrec .EQ. 32 ) THEN |
140 |
|
glPtr => global |
141 |
|
ELSE |
142 |
|
glPtr8 => global8 |
143 |
|
ENDIF |
144 |
#endif |
#endif |
145 |
_END_MASTER( myThid ) |
_END_MASTER( myThid ) |
146 |
_BARRIER |
_BARRIER |
147 |
|
|
148 |
#ifdef EXF_IREAD_USE_GLOBAL_POINTER |
#ifdef EXF_IREAD_USE_GLOBAL_POINTER |
149 |
do j=1,ny_in |
IF ( filePrec .EQ. 32 ) THEN |
150 |
do i=1,nx_in |
do j=1,ny_in |
151 |
arrayin(i,j)=glPtr(i,j) |
do i=1,nx_in |
152 |
enddo |
arrayin(i,j)=glPtr(i,j) |
153 |
enddo |
enddo |
154 |
|
enddo |
155 |
|
ELSE |
156 |
|
do j=1,ny_in |
157 |
|
do i=1,nx_in |
158 |
|
arrayin(i,j)=glPtr8(i,j) |
159 |
|
enddo |
160 |
|
enddo |
161 |
|
ENDIF |
162 |
#else |
#else |
163 |
do j=1,ny_in |
IF ( filePrec .EQ. 32 ) THEN |
164 |
do i=1,nx_in |
do j=1,ny_in |
165 |
arrayin(i,j)=global(i,j) |
do i=1,nx_in |
166 |
enddo |
arrayin(i,j)=global(i,j) |
167 |
enddo |
enddo |
168 |
|
enddo |
169 |
|
ELSE |
170 |
|
do j=1,ny_in |
171 |
|
do i=1,nx_in |
172 |
|
arrayin(i,j)=global8(i,j) |
173 |
|
enddo |
174 |
|
enddo |
175 |
|
ENDIF |
176 |
#endif |
#endif |
177 |
|
|
|
#ifdef _BYTESWAPIO |
|
|
call MDS_BYTESWAPR4((nx_in+4)*(ny_in+4), arrayin ) |
|
|
#endif /* _BYTESWAPIO */ |
|
|
|
|
178 |
RETURN |
RETURN |
179 |
END |
END |