--- MITgcm/pkg/mnc/mnc_cw_cvars.F 2004/12/20 17:10:27 1.4 +++ MITgcm/pkg/mnc/mnc_cw_cvars.F 2008/05/22 12:21:19 1.9 @@ -1,4 +1,4 @@ -C $Header: /home/ubuntu/mnt/e9_copy/MITgcm/pkg/mnc/mnc_cw_cvars.F,v 1.4 2004/12/20 17:10:27 edhill Exp $ +C $Header: /home/ubuntu/mnt/e9_copy/MITgcm/pkg/mnc/mnc_cw_cvars.F,v 1.9 2008/05/22 12:21:19 mlosch Exp $ C $Name: $ #include "MNC_OPTIONS.h" @@ -22,7 +22,7 @@ C !USES: implicit none #include "netcdf.inc" -#include "mnc_common.h" +#include "MNC_COMMON.h" #include "SIZE.h" #include "EEPARAMS.h" #include "EESUPPORT.h" @@ -44,7 +44,7 @@ CEOP C !LOCAL VARIABLES: - integer i,j, vid, nnf,nnl, doit, err + integer i, vid, nnf, nnl, doit, err integer nids, cv_did(1), xtmin,ytmin character*(MAX_LEN_MBUF) msgbuf integer cv_start(1), cv_count(1) @@ -68,73 +68,121 @@ cv_start(1) = 1 cv_count(1) = sNx - DO i = cv_start(1),cv_count(1) #ifdef ALLOW_EXCH2 - rtmp(i) = xtmin + i + DO i = cv_start(1),cv_count(1) + rtmp(i) = xtmin + i + ENDDO #else + IF ( usingCurvilinearGrid .OR. rotateGrid ) THEN + DO i = cv_start(1),cv_count(1) + rtmp(i) = xtmin + i + ENDDO + ELSE + DO i = cv_start(1),cv_count(1) rtmp(i) = xC(i,1,bi,bj) + ENDDO + ENDIF #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 + DO i = cv_start(1),cv_count(1) + rtmp(i) = xtmin + i + ENDDO #else + IF ( usingCurvilinearGrid .OR. rotateGrid ) THEN + DO i = cv_start(1),cv_count(1) + rtmp(i) = xtmin + i + ENDDO + ELSE + DO i = cv_start(1),cv_count(1) rtmp(i) = xG(i,1,bi,bj) + ENDDO + ENDIF #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 + DO i = cv_start(1),cv_count(1) + rtmp(i) = xtmin + i + ENDDO #else + IF ( usingCurvilinearGrid .OR. rotateGrid ) THEN + DO i = cv_start(1),cv_count(1) + rtmp(i) = xtmin - OLx + i + ENDDO + ELSE + DO i = cv_start(1),cv_count(1) rtmp(i) = xC(i,1,bi,bj) + ENDDO + ENDIF #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 + DO i = cv_start(1),cv_count(1) + rtmp(i) = ytmin + i + ENDDO #else + IF ( usingCurvilinearGrid .OR. rotateGrid ) THEN + DO i = cv_start(1),cv_count(1) + rtmp(i) = ytmin + i + ENDDO + ELSE + DO i = cv_start(1),cv_count(1) rtmp(i) = yC(1,i,bi,bj) + ENDDO + ENDIF #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 + DO i = cv_start(1),cv_count(1) + rtmp(i) = ytmin + i + ENDDO #else + IF ( usingCurvilinearGrid .OR. rotateGrid ) THEN + DO i = cv_start(1),cv_count(1) + rtmp(i) = ytmin + i + ENDDO + ELSE + DO i = cv_start(1),cv_count(1) rtmp(i) = yG(1,i,bi,bj) + ENDDO + ENDIF #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 + DO i = cv_start(1),cv_count(1) + rtmp(i) = ytmin + i + ENDDO #else + IF ( usingCurvilinearGrid .OR. rotateGrid ) THEN + DO i = cv_start(1),cv_count(1) + rtmp(i) = ytmin - OLy + i + ENDDO + ELSE + DO i = cv_start(1),cv_count(1) rtmp(i) = yC(1,i-OLy,bi,bj) + ENDDO + ENDIF #endif - ENDDO ELSEIF (cvname(nnf:nnl) .EQ. 'Z') THEN @@ -152,6 +200,30 @@ 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 @@ -163,14 +235,15 @@ CALL MNC_FILE_REDEF(fname, myThid) err = NF_DEF_VAR(fid, cvname, NF_DOUBLE, & nids, cv_did, vid) + i = ILNBLNK( fname ) write(msgbuf,'(5a)') 'defining coordinate variable ''', - & cvname(nnf:nnl), ''' in file ''', fname, '''' + & cvname(nnf:nnl), ''' in file ''', fname(1:i), '''' 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, '''' + & cvname(nnf:nnl), ''' in file ''', fname(1:i), '''' CALL MNC_HANDLE_ERR(err, msgbuf, myThid) ENDIF