41 |
I lat_0, lat_inc, |
I lat_0, lat_inc, |
42 |
I nx_in, ny_in, method, mythid) |
I nx_in, ny_in, method, mythid) |
43 |
|
|
44 |
C |
implicit none |
45 |
|
|
46 |
C infile = name of the input file (direct access binary) |
C infile = name of the input file (direct access binary) |
47 |
C filePrec = file precicision (currently not used, assumes real*4) |
C filePrec = file precicision (currently not used, assumes real*4) |
48 |
C arrout = output arrays (different for each processor) |
C arrout = output arrays (different for each processor) |
58 |
|
|
59 |
#include "SIZE.h" |
#include "SIZE.h" |
60 |
#include "EEPARAMS.h" |
#include "EEPARAMS.h" |
61 |
|
#ifdef ALLOW_USE_MPI |
62 |
|
# include "EESUPPORT.h" |
63 |
|
# include "PARAMS.h" |
64 |
|
#endif /* ALLOW_USE_MPI */ |
65 |
|
|
66 |
C subroutine variables |
C subroutine variables |
67 |
character*(*) infile |
character*(*) infile |
83 |
real*8 lagran |
real*8 lagran |
84 |
real*4 arrayin(-1:nx_in+2 , -1:ny_in+2) |
real*4 arrayin(-1:nx_in+2 , -1:ny_in+2) |
85 |
real*8 x_in (-1:nx_in+2), y_in(-1:ny_in+2) |
real*8 x_in (-1:nx_in+2), y_in(-1:ny_in+2) |
86 |
integer i, j, k, l, js, bi, bj, sp, interp_unit |
integer i, j, k, l, js, bi, bj, interp_unit, sp |
87 |
|
real*4 global(nx_in,ny_in) |
88 |
|
|
89 |
|
_BEGIN_MASTER( myThid ) |
90 |
|
|
91 |
C check input arguments |
C check input arguments |
92 |
if ( .NOT. (filePrec .EQ. 32) ) |
if ( .NOT. (filePrec .EQ. 32) ) |
93 |
& stop 'stop in exf_interp.F: value of filePrec not allowed' |
& stop 'stop in exf_interp.F: value of filePrec not allowed' |
94 |
|
|
95 |
C read in input data |
C read in input data |
96 |
call mdsfindunit( interp_unit, mythid) |
#ifdef ALLOW_USE_MPI |
97 |
open(interp_unit,file=infile,status='old',access='direct', |
if (useSingleCPUIO) then |
98 |
& recl=nx_in*ny_in*4) |
|
99 |
read(interp_unit,rec=irecord) ((arrayin(i,j),i=1,nx_in),j=1,ny_in) |
C master thread of process 0, only, opens a global file |
100 |
|
IF( mpiMyId .EQ. 0 ) THEN |
101 |
|
call mdsfindunit( interp_unit, mythid) |
102 |
|
open(interp_unit,file=infile,status='old',access='direct', |
103 |
|
& recl=nx_in*ny_in*4) |
104 |
|
read(interp_unit,rec=irecord) |
105 |
|
& ((global(i,j),i=1,nx_in),j=1,ny_in) |
106 |
|
close(interp_unit) |
107 |
|
ENDIF |
108 |
|
|
109 |
|
C broadcast to all processes |
110 |
|
call MPI_BCAST(global,nx_in*ny_in,MPI_REAL, |
111 |
|
& 0,MPI_COMM_MODEL,ierr) |
112 |
|
do j=1,ny_in |
113 |
|
do i=1,nx_in |
114 |
|
arrayin(i,j)=global(i,j) |
115 |
|
enddo |
116 |
|
enddo |
117 |
|
|
118 |
|
else |
119 |
|
#endif /* ALLOW_USE_MPI */ |
120 |
|
|
121 |
|
call mdsfindunit( interp_unit, mythid) |
122 |
|
open(interp_unit,file=infile,status='old',access='direct', |
123 |
|
& recl=nx_in*ny_in*4) |
124 |
|
read(interp_unit,rec=irecord) |
125 |
|
& ((arrayin(i,j),i=1,nx_in),j=1,ny_in) |
126 |
|
close(interp_unit) |
127 |
|
|
128 |
|
#ifdef ALLOW_USE_MPI |
129 |
|
endif |
130 |
|
#endif /* ALLOW_USE_MPI */ |
131 |
|
|
132 |
#ifdef _BYTESWAPIO |
#ifdef _BYTESWAPIO |
133 |
call MDS_BYTESWAPR4((nx_in+4)*(ny_in+4), arrayin ) |
call MDS_BYTESWAPR4((nx_in+4)*(ny_in+4), arrayin ) |
134 |
#endif |
#endif /* _BYTESWAPIO */ |
|
close(interp_unit) |
|
135 |
|
|
136 |
C setup input grid |
C setup input grid |
137 |
do i=-1,nx_in+2 |
do i=-1,nx_in+2 |
138 |
x_in(i) = lon_0 + (i-1.)*lon_inc |
x_in(i) = lon_0 + (i-1.)*lon_inc |
139 |
enddo |
enddo |
140 |
y_in(0) = lat_0 - lat_inc(1) |
y_in(0) = lat_0 - lat_inc(1) |
141 |
y_in(-1)= lat_0 - 2.*lat_inc(1) |
y_in(-1)= lat_0 - 2.*lat_inc(1) |
142 |
y_in(1) = lat_0 |
y_in(1) = lat_0 |
143 |
do j=2,ny_in |
do j=2,ny_in |
144 |
y_in(j) = y_in(j-1) + lat_inc(j-1) |
y_in(j) = y_in(j-1) + lat_inc(j-1) |
145 |
enddo |
enddo |
146 |
y_in(ny_in+1) = y_in(ny_in) + lat_inc(ny_in-1) |
y_in(ny_in+1) = y_in(ny_in) + lat_inc(ny_in-1) |
147 |
y_in(ny_in+2) = y_in(ny_in) + 2.*lat_inc(ny_in-1) |
y_in(ny_in+2) = y_in(ny_in) + 2.*lat_inc(ny_in-1) |
148 |
|
|
149 |
C enlarge boundary |
C enlarge boundary |
150 |
do j=1,ny_in |
do j=1,ny_in |
151 |
arrayin(0,j) = arrayin(nx_in,j) |
arrayin(0,j) = arrayin(nx_in,j) |
152 |
arrayin(-1,j) = arrayin(nx_in-1,j) |
arrayin(-1,j) = arrayin(nx_in-1,j) |
153 |
arrayin(nx_in+1,j) = arrayin(1,j) |
arrayin(nx_in+1,j) = arrayin(1,j) |
154 |
arrayin(nx_in+2,j) = arrayin(2,j) |
arrayin(nx_in+2,j) = arrayin(2,j) |
155 |
enddo |
enddo |
156 |
do i=-1,nx_in+2 |
do i=-1,nx_in+2 |
157 |
arrayin(i,0) = arrayin(i,1) |
arrayin(i,0) = arrayin(i,1) |
158 |
arrayin(i,-1) = arrayin(i,1) |
arrayin(i,-1) = arrayin(i,1) |
159 |
arrayin(i,ny_in+1) = arrayin(i,ny_in) |
arrayin(i,ny_in+1) = arrayin(i,ny_in) |
160 |
arrayin(i,ny_in+2) = arrayin(i,ny_in) |
arrayin(i,ny_in+2) = arrayin(i,ny_in) |
161 |
enddo |
enddo |
162 |
|
|
163 |
|
_END_MASTER( myThid ) |
164 |
|
|
165 |
do bj = mybylo(mythid), mybyhi(mythid) |
do bj = mybylo(mythid), mybyhi(mythid) |
166 |
do bi = mybxlo(mythid), mybxhi(mythid) |
do bi = mybxlo(mythid), mybxhi(mythid) |