C $Header: /home/ubuntu/mnt/e9_copy/MITgcm/pkg/mnc/mnc_cw_cvars.F,v 1.5 2005/02/23 05:17:36 edhill Exp $ C $Name: $ #include "MNC_OPTIONS.h" C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| CBOP 1 C !ROUTINE: MNC_CW_WRITE_CVAR C !INTERFACE: SUBROUTINE MNC_CW_WRITE_CVAR( I fname, I cvname, I fid, I did, I bi, bj, I myThid ) C !DESCRIPTION: C Write a CF-convention coordinate variable (a vector). C !USES: implicit none #include "netcdf.inc" #include "mnc_common.h" #include "SIZE.h" #include "EEPARAMS.h" #include "EESUPPORT.h" #include "PARAMS.h" #include "GRID.h" #ifdef ALLOW_EXCH2 #include "W2_EXCH2_TOPOLOGY.h" #include "W2_EXCH2_PARAMS.h" #endif C Functions integer IFNBLNK, ILNBLNK C !INPUT PARAMETERS: character*(*) fname character*(*) cvname integer fid, did, bi,bj integer myThid CEOP C !LOCAL VARIABLES: integer i,j, vid, nnf,nnl, doit, err integer nids, cv_did(1), xtmin,ytmin character*(MAX_LEN_MBUF) msgbuf integer cv_start(1), cv_count(1) _RS rtmp(sNx + 2*OLx + sNy + 2*OLy + Nr) nnf = IFNBLNK(cvname) nnl = ILNBLNK(cvname) xtmin = 0 ytmin = 0 #ifdef ALLOW_EXCH2 xtmin = exch2_tbasex(W2_myTileList(bi)) ytmin = exch2_tbasey(W2_myTileList(bi)) #endif doit = 1 nids = 1 cv_did(1)= did C Check all the coordinate variables that we know about IF (cvname(nnf:nnl) .EQ. 'X') THEN cv_start(1) = 1 cv_count(1) = sNx DO i = cv_start(1),cv_count(1) #ifdef ALLOW_EXCH2 rtmp(i) = xtmin + i #else rtmp(i) = xC(i,1,bi,bj) #endif ENDDO ELSEIF (cvname(nnf:nnl) .EQ. 'Xp1') THEN cv_start(1) = 1 cv_count(1) = sNx + 1 DO i = cv_start(1),cv_count(1) #ifdef ALLOW_EXCH2 rtmp(i) = xtmin + i #else rtmp(i) = xG(i,1,bi,bj) #endif ENDDO ELSEIF (cvname(nnf:nnl) .EQ. 'Xwh') THEN cv_start(1) = 1 cv_count(1) = sNx + 2*OLx DO i = cv_start(1),cv_count(1) #ifdef ALLOW_EXCH2 rtmp(i) = xtmin - OLx + i #else rtmp(i) = xC(i,1,bi,bj) #endif ENDDO ELSEIF (cvname(nnf:nnl) .EQ. 'Y') THEN cv_start(1) = 1 cv_count(1) = sNy DO i = cv_start(1),cv_count(1) #ifdef ALLOW_EXCH2 rtmp(i) = ytmin + i #else rtmp(i) = yC(1,i,bi,bj) #endif ENDDO ELSEIF (cvname(nnf:nnl) .EQ. 'Yp1') THEN cv_start(1) = 1 cv_count(1) = sNy + 1 DO i = cv_start(1),cv_count(1) #ifdef ALLOW_EXCH2 rtmp(i) = ytmin + i #else rtmp(i) = yG(1,i,bi,bj) #endif ENDDO ELSEIF (cvname(nnf:nnl) .EQ. 'Ywh') THEN cv_start(1) = 1 cv_count(1) = sNy + 2*OLy DO i = cv_start(1),cv_count(1) #ifdef ALLOW_EXCH2 rtmp(i) = ytmin - OLy + i #else rtmp(i) = yC(1,i-OLy,bi,bj) #endif ENDDO ELSEIF (cvname(nnf:nnl) .EQ. 'Z') THEN cv_start(1) = 1 cv_count(1) = Nr DO i = cv_start(1),cv_count(1) rtmp(i) = rC(i) ENDDO ELSEIF (cvname(nnf:nnl) .EQ. 'Zp1') THEN cv_start(1) = 1 cv_count(1) = Nr + 1 DO i = cv_start(1),cv_count(1) rtmp(i) = rF(i) ENDDO ELSEIF (cvname(nnf:nnl) .EQ. 'Zu') THEN cv_start(1) = 1 cv_count(1) = Nr DO i = cv_start(1),cv_count(1) rtmp(i) = rF(i + 1) ENDDO ELSEIF (cvname(nnf:nnl) .EQ. 'Zl') THEN cv_start(1) = 1 cv_count(1) = Nr DO i = cv_start(1),cv_count(1) rtmp(i) = rF(i) ENDDO ELSEIF (cvname(nnf:nnl) .EQ. 'Zm1') THEN cv_start(1) = 1 cv_count(1) = Nr - 1 DO i = cv_start(1),cv_count(1) rtmp(i) = rF(i + 1) ENDDO ELSE doit = 0 ENDIF IF ( doit .EQ. 1 ) THEN CALL MNC_FILE_REDEF(fname, myThid) err = NF_DEF_VAR(fid, cvname, NF_DOUBLE, & nids, cv_did, vid) write(msgbuf,'(5a)') 'defining coordinate variable ''', & cvname(nnf:nnl), ''' in file ''', fname, '''' CALL MNC_HANDLE_ERR(err, msgbuf, myThid) CALL MNC_FILE_ENDDEF(fname, myThid) err = NF_PUT_VARA_DOUBLE(fid, vid, & cv_start, cv_count, rtmp) write(msgbuf,'(5a)') 'writing coordinate variable ''', & cvname(nnf:nnl), ''' in file ''', fname, '''' CALL MNC_HANDLE_ERR(err, msgbuf, myThid) ENDIF RETURN END C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|