Skip to content

Commit de282b4

Browse files
Rewrite the cpl_oasis_grid subroutine for better performance and to use OASIS and SCRIP standards. (NOAA-EMC#1354)
1 parent 2681f7b commit de282b4

File tree

1 file changed

+28
-36
lines changed

1 file changed

+28
-36
lines changed

model/src/w3oacpmd.F90

+28-36
Original file line numberDiff line numberDiff line change
@@ -162,13 +162,16 @@ SUBROUTINE CPL_OASIS_GRID(LD_MASTER,ID_LCOMM)
162162
!/ | Last update : April-2016 |
163163
!/ +-----------------------------------+
164164
!/
165-
!/ Jul-2013 : Origination. ( version 4.18 )
166-
!/ April-2016 : Add comments (J. Pianezze) ( version 5.07 )
167-
!/ Sept-2016 : Correct bug MPI (J. Pianezze) ( version 5.12 )
165+
!/ Jul-2013 : Origination. ( version 4.18 )
166+
!/ April-2016 : Add comments (J. Pianezze) ( version 5.07 )
167+
!/ Sept-2016 : Correct bug MPI (J. Pianezze) ( version 5.12 )
168+
!/ Jan-2025 : Use scrip format (J.M. Castillo) ( version x.xx )
168169
!/
169170
! 1. Purpose :
170171
!
171-
! Grid data file definition
172+
! Grid data file definition in the scrip format.
173+
! In this format, grid corners are specified in counterclockwise
174+
! order, being the first corner the one at the bottom left.
172175
!
173176
! 2. Method :
174177
! 3. Parameters :
@@ -250,41 +253,30 @@ SUBROUTINE CPL_OASIS_GRID(LD_MASTER,ID_LCOMM)
250253
NYS=1
251254
NYN=NY
252255
!
253-
! lat/lon
254256
ALLOCATE ( LON(NNODES,1), LAT(NNODES,1) )
255-
I = 0
256-
DO IY = NYS, NYN
257-
DO IX = NXW, NXE
258-
I = I+1
259-
LON(I,1)=XGRD(IY,IX)*FACTOR
260-
LAT(I,1)=YGRD(IY,IX)*FACTOR
261-
END DO
262-
END DO
263-
!
264-
! areas, corners
265257
ALLOCATE ( AREA(NNODES,1), CORLON(NNODES,1,4), CORLAT(NNODES,1,4) )
266-
I = 0
267-
DO IY = NYS, NYN
268-
DO IX = NXW, NXE
269-
I = I+1
270-
CORLON(I,1,1)=LON(I,1)+HPFAC(IY,IX)/2.*FACTOR
271-
CORLON(I,1,2)=LON(I,1)-HPFAC(IY,IX)/2.*FACTOR
272-
CORLON(I,1,3)=LON(I,1)-HPFAC(IY,IX)/2.*FACTOR
273-
CORLON(I,1,4)=LON(I,1)+HPFAC(IY,IX)/2.*FACTOR
274-
CORLAT(I,1,1)=LAT(I,1)+HQFAC(IY,IX)/2.*FACTOR
275-
CORLAT(I,1,2)=LAT(I,1)+HQFAC(IY,IX)/2.*FACTOR
276-
CORLAT(I,1,3)=LAT(I,1)-HQFAC(IY,IX)/2.*FACTOR
277-
CORLAT(I,1,4)=LAT(I,1)-HQFAC(IY,IX)/2.*FACTOR
278-
AREA(I,1)=HPFAC(IY,IX)*HQFAC(IY,IX)
279-
END DO
280-
END DO
281-
!
282-
! Model grid mask
283258
ALLOCATE ( MASK(NNODES,1) )
259+
!
284260
I = 0
285261
DO IY = NYS, NYN
286262
DO IX = NXW, NXE
287263
I = I+1
264+
! lat/lon
265+
LON(I,1) = XGRD(IY,IX)*FACTOR
266+
LAT(I,1) = YGRD(IY,IX)*FACTOR
267+
!
268+
! areas, corners
269+
CORLON(I,1,1) = LON(I,1)-HPFAC(IY,IX)/2.*FACTOR
270+
CORLON(I,1,2) = LON(I,1)+HPFAC(IY,IX)/2.*FACTOR
271+
CORLON(I,1,3) = CORLON(I,1,2)
272+
CORLON(I,1,4) = CORLON(I,1,1)
273+
CORLAT(I,1,1) = LAT(I,1)-HQFAC(IY,IX)/2.*FACTOR
274+
CORLAT(I,1,2) = CORLAT(I,1,1)
275+
CORLAT(I,1,3) = LAT(I,1)+HQFAC(IY,IX)/2.*FACTOR
276+
CORLAT(I,1,4) = CORLAT(I,1,3)
277+
AREA(I,1) = HPFAC(IY,IX)*HQFAC(IY,IX)
278+
!
279+
! Model grid mask
288280
! Get the mask : 0 - sea / 1 - open boundary cells (the land is already excluded)
289281
IF ((MAPSTA(IY,IX) .EQ. 1)) THEN
290282
MASK(I,1) = 0
@@ -317,13 +309,13 @@ SUBROUTINE CPL_OASIS_GRID(LD_MASTER,ID_LCOMM)
317309
CORLON(I,1,3) = CORLON(I,1,2)
318310
CORLON(I,1,4) = CORLON(I,1,1)
319311
CORLAT(I,1,1) = Y0 + IJKCel(2,I)*DLAT
320-
CORLAT(I,1,2)=CORLAT(I,1,1)
312+
CORLAT(I,1,2) = CORLAT(I,1,1)
321313
CORLAT(I,1,3) = Y0 + (IJKCel(2,I) + IJKCel(4,I))*DLAT
322-
CORLAT(I,1,4)=CORLAT(I,1,3)
314+
CORLAT(I,1,4) = CORLAT(I,1,3)
323315
! areas
324316
AREA(I,1) = 0.25 * IJKCEL(3,I)*DLON * IJKCEL(4,I)*DLAT
325-
! Model grid mask
326-
MASK(I,1) = 1
317+
! Model grid mask: 0 - sea / 1 - open boundary cells (the land is already excluded)
318+
MASK(I,1) = 0
327319
ENDDO
328320
#endif
329321
!

0 commit comments

Comments
 (0)