57 |
CHARACTER*8 parms1 |
CHARACTER*8 parms1 |
58 |
CHARACTER*3 mate_index |
CHARACTER*3 mate_index |
59 |
_RL qtmp1(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr+Nrphys,nSx,nSy) |
_RL qtmp1(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr+Nrphys,nSx,nSy) |
|
_RL qtmpsrf(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
|
|
_RL qtmp2(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr+Nrphys,nSx,nSy) |
|
60 |
_RL undef, getcon |
_RL undef, getcon |
61 |
EXTERNAL getcon |
EXTERNAL getcon |
62 |
INTEGER ILNBLNK |
INTEGER ILNBLNK |
63 |
EXTERNAL ILNBLNK |
EXTERNAL ILNBLNK |
64 |
INTEGER ilen |
INTEGER ilen |
65 |
integer nlevsout,nplevs |
INTEGER nlevsout |
|
parameter(nplevs = 16) |
|
|
_RL plevs1(nplevs) |
|
|
data plevs1/ 1000.0 _d 2, 925.0 _d 2, 850.0 _d 2, 700.0 _d 2, |
|
|
. 600.0 _d 2, 500.0 _d 2, 400.0 _d 2, 300.0 _d 2, |
|
|
. 250.0 _d 2, 200.0 _d 2, 150.0 _d 2, 100.0 _d 2, |
|
|
. 70.0 _d 2, 50.0 _d 2, 30.0 _d 2, 20.0 _d 2/ |
|
|
_RL plevs2(nplevs) |
|
|
data plevs2/ 1000.0 _d 2, 950.0 _d 2, 900.0 _d 2, 850.0 _d 2, |
|
|
. 800.0 _d 2, 750.0 _d 2, 700.0 _d 2, 600.0 _d 2, |
|
|
. 500.0 _d 2, 400.0 _d 2, 300.0 _d 2, 250.0 _d 2, |
|
|
. 200.0 _d 2, 150.0 _d 2, 100.0 _d 2, 50.0 _d 2/ |
|
|
_RL qprs(sNx,sNy,nplevs) |
|
|
_RL qinp(sNx,sNy,Nr+Nrphys) |
|
|
_RL pkz(sNx,sNy,Nr+Nrphys) |
|
|
_RL pksrf(sNx,sNy) |
|
|
_RL p |
|
|
INTEGER jpoint1,ipoint1 |
|
|
INTEGER jpoint2,ipoint2 |
|
|
_RL kappa |
|
|
logical foundp |
|
|
data foundp /.false./ |
|
66 |
|
|
67 |
INTEGER ioUnit |
INTEGER ioUnit |
68 |
CHARACTER*(MAX_LEN_FNAM) fn |
CHARACTER*(MAX_LEN_FNAM) fn |
72 |
#ifdef ALLOW_MNC |
#ifdef ALLOW_MNC |
73 |
INTEGER ii |
INTEGER ii |
74 |
CHARACTER*(MAX_LEN_FNAM) diag_mnc_bn |
CHARACTER*(MAX_LEN_FNAM) diag_mnc_bn |
|
CHARACTER*(5) ctmp |
|
75 |
INTEGER CW_DIMS, NLEN |
INTEGER CW_DIMS, NLEN |
76 |
PARAMETER ( CW_DIMS = 10 ) |
PARAMETER ( CW_DIMS = 10 ) |
77 |
PARAMETER ( NLEN = 80 ) |
PARAMETER ( NLEN = 80 ) |
79 |
CHARACTER*(NLEN) dn(CW_DIMS) |
CHARACTER*(NLEN) dn(CW_DIMS) |
80 |
CHARACTER*(NLEN) d_cw_name |
CHARACTER*(NLEN) d_cw_name |
81 |
CHARACTER*(NLEN) dn_blnk |
CHARACTER*(NLEN) dn_blnk |
82 |
|
#ifdef DIAG_MNC_COORD_NEEDSWORK |
83 |
|
CHARACTER*(5) ctmp |
84 |
_RS ztmp(Nr+Nrphys) |
_RS ztmp(Nr+Nrphys) |
85 |
|
#endif |
86 |
#endif /* ALLOW_MNC */ |
#endif /* ALLOW_MNC */ |
87 |
|
|
88 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
89 |
|
|
90 |
ioUnit= standardMessageUnit |
ioUnit= standardMessageUnit |
91 |
undef = getcon('UNDEF') |
undef = getcon('UNDEF') |
|
kappa = getcon('KAPPA') |
|
92 |
glf = globalFiles |
glf = globalFiles |
93 |
WRITE(suff,'(I10.10)') myIter |
WRITE(suff,'(I10.10)') myIter |
94 |
ilen = ILNBLNK(fnames(listId)) |
ilen = ILNBLNK(fnames(listId)) |
281 |
nlevsout = nlevels(listId) |
nlevsout = nlevels(listId) |
282 |
|
|
283 |
C----------------------------------------------------------------------- |
C----------------------------------------------------------------------- |
284 |
C Check to see if we need to interpolate before output |
C Check to see if we need to interpolate before output |
285 |
C----------------------------------------------------------------------- |
C----------------------------------------------------------------------- |
286 |
C (we are still inside field exist if sequence and field do loop) |
IF ( fflags(listId)(2:2).EQ.'P' ) THEN |
287 |
C |
C- Do vertical interpolation: |
288 |
|
CALL DIAGNOSTICS_INTERP_VERT( |
289 |
if(fflags(listId)(2:2).eq.'P') then |
I listId, md, ndId, ip, im, |
290 |
|
U nlevsout, |
291 |
c If nonlinear free surf is active, need averaged pressures |
U qtmp1, |
292 |
#ifdef NONLIN_FRSURF |
I undef, |
293 |
if(select_rStar.GT.0)then |
I myTime, myIter, myThid ) |
294 |
call diagnostics_get_pointers('RSURF ',ipoint1,jpoint1, |
ENDIF |
|
. myThid) |
|
|
call diagnostics_get_pointers('PRESSURE',ipoint2,jpoint2, |
|
|
. myThid) |
|
|
C if fizhi is being used, may need to get physics grid pressures |
|
|
#ifdef ALLOW_FIZHI |
|
|
if(gdiag(ndId)(10:10) .EQ. 'L')then |
|
|
call diagnostics_get_pointers('FIZPRES ',ipoint2,jpoint2, |
|
|
. myThid) |
|
|
endif |
|
|
#endif |
|
|
if( jpoint1.ne.0 .and. jpoint2.ne.0) foundp = .true. |
|
|
|
|
|
if(.not. foundp) then |
|
|
WRITE(msgBuf,'(3A)') 'DIAGNOSTICS_OUT: ', |
|
|
. ' Have asked for pressure interpolation but have not ', |
|
|
. ' Activated surface and 3D pressure diagnostic, ', |
|
|
. ' RSURF and PRESSURE' |
|
|
CALL PRINT_ERROR( msgBuf , myThid ) |
|
|
STOP 'ABNORMAL END: S/R DIAGNOSTICS_OUT' |
|
|
endif |
|
|
|
|
|
DO bj = myByLo(myThid), myByHi(myThid) |
|
|
DO bi = myBxLo(myThid), myBxHi(myThid) |
|
|
call getdiag(1.,undef,qtmpsrf(1-OLx,1-OLy,bi,bj), |
|
|
. jpoint1,0,ipoint1,0,bi,bj,myThid) |
|
|
ENDDO |
|
|
ENDDO |
|
|
DO bj = myByLo(myThid), myByHi(myThid) |
|
|
DO bi = myBxLo(myThid), myBxHi(myThid) |
|
|
DO k = 1,nlevels(listId) |
|
|
call getdiag(levs(k,listId),undef, |
|
|
. qtmp2(1-OLx,1-OLy,k,bi,bj),jpoint2,0,ipoint2,0, |
|
|
. bi,bj,myThid) |
|
|
ENDDO |
|
|
ENDDO |
|
|
ENDDO |
|
|
endif |
|
|
#else |
|
|
C If nonlinear free surf is off, get pressures from rC and rF arrays |
|
|
DO bj = myByLo(myThid), myByHi(myThid) |
|
|
DO bi = myBxLo(myThid), myBxHi(myThid) |
|
|
DO j = 1-OLy,sNy+OLy |
|
|
DO i = 1-OLx,sNx+OLx |
|
|
qtmpsrf(i,j,bi,bj) = rF(1) |
|
|
ENDDO |
|
|
ENDDO |
|
|
DO j = 1-OLy,sNy+OLy |
|
|
DO i = 1-OLx,sNx+OLx |
|
|
DO k = 1,nlevels(listId) |
|
|
qtmp2(i,j,k,bi,bj) = rC(k) |
|
|
ENDDO |
|
|
ENDDO |
|
|
ENDDO |
|
|
ENDDO |
|
|
ENDDO |
|
|
#endif |
|
|
C Load p to the kappa into a temporary array |
|
|
nlevsout = nplevs |
|
|
DO bj = myByLo(myThid), myByHi(myThid) |
|
|
DO bi = myBxLo(myThid), myBxHi(myThid) |
|
|
DO j = 1,sNy |
|
|
DO i = 1,sNx |
|
|
pksrf(i,j) = qtmpsrf(i,j,bi,bj) ** kappa |
|
|
DO k = 1,nlevels(listId) |
|
|
if(gdiag(ndId)(10:10).eq.'R') then |
|
|
if(hFacC(i,j,nlevels(listId)-k+1,bi,bj).ne.0.) then |
|
|
qinp(i,j,k) = qtmp1(i,j,nlevels(listId)-k+1,bi,bj) |
|
|
else |
|
|
qinp(i,j,k) = undef |
|
|
endif |
|
|
pkz(i,j,k) = qtmp2(i,j,nlevels(listId)-k+1,bi,bj)**kappa |
|
|
elseif(gdiag(ndId)(10:10).eq.'L') then |
|
|
qinp(i,j,k) = qtmp1(i,j,k,bi,bj) |
|
|
pkz(i,j,k) = qtmp2(i,j,k,bi,bj)**kappa |
|
|
endif |
|
|
ENDDO |
|
|
ENDDO |
|
|
ENDDO |
|
|
|
|
|
DO k = 1,nplevs |
|
|
if(fflags(listId)(3:3).eq.'1') then |
|
|
p = plevs1(k) |
|
|
elseif(fflags(listId)(3:3).eq.'2')then |
|
|
p = plevs2(k) |
|
|
endif |
|
|
call prestopres(qprs(1,1,k),qinp,pkz,pksrf,0.,p,sNx,sNy, |
|
|
. nlevels(listId) ) |
|
|
ENDDO |
|
|
|
|
|
DO j = 1,sNy |
|
|
DO i = 1,sNx |
|
|
DO k = 1,nlevsout |
|
|
qtmp1(i,j,k,bi,bj) = qprs(i,j,k) |
|
|
if(qtmp1(i,j,k,bi,bj).eq.undef) qtmp1(i,j,k,bi,bj) = 0. |
|
|
ENDDO |
|
|
ENDDO |
|
|
ENDDO |
|
|
ENDDO |
|
|
ENDDO |
|
|
|
|
|
endif |
|
295 |
|
|
296 |
#ifdef ALLOW_MDSIO |
#ifdef ALLOW_MDSIO |
297 |
C Prepare for mdsio optionality |
C Prepare for mdsio optionality |