/[MITgcm]/MITgcm/pkg/exf/exf_interp.F
ViewVC logotype

Diff of /MITgcm/pkg/exf/exf_interp.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.3 by edhill, Thu Oct 9 04:19:19 2003 UTC revision 1.4 by dimitri, Sun Dec 7 07:41:45 2003 UTC
# Line 41  CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC Line 41  CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
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)
# Line 57  C Line 58  C
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
# Line 78  C local variables Line 83  C local variables
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)

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4

  ViewVC Help
Powered by ViewVC 1.1.22