File indexing completed on 2018-03-02 18:37:40 UTC
view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
e259fb67de Jean*0001 #include "ATM_PHYS_OPTIONS.h"
0002
0003
0004
0005
0006
0007 SUBROUTINE ATM_PHYS_DYN2PHYS(
0008 O lat2d, pHalf3d, pFull3d,
0009 O zHalf3d, zFull3d,
0010 O t3d, q3d, u3d, v3d,
0011 I bi, bj, myTime, myIter, myThid )
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022 IMPLICIT NONE
0023 #include "SIZE.h"
0024 #include "EEPARAMS.h"
0025 #include "PARAMS.h"
0026 #include "GRID.h"
0027 #include "DYNVARS.h"
0028 #include "SURFACE.h"
0029
0030
0031
0032
0033
0034
0035 INTEGER bi, bj
0036 _RL myTime
0037 INTEGER myIter, myThid
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049 _RL lat2d (sNx,sNy)
0050 _RL pHalf3d (sNx,sNy,Nr+1)
0051 _RL pFull3d (sNx,sNy,Nr)
0052 _RL zHalf3d (sNx,sNy,Nr+1)
0053 _RL zFull3d (sNx,sNy,Nr)
0054 _RL t3d (sNx,sNy,Nr)
0055 _RL q3d (sNx,sNy,Nr)
0056 _RL u3d (sNx,sNy,Nr)
0057 _RL v3d (sNx,sNy,Nr)
0058
0059
0060 _RL conv_theta2T
0061 INTEGER k, kc, ki, kp
0062
0063
0064
0065
0066
0067
0068 lat2d(:,:) = yC(1:sNx,1:sNy,bi,bj)*deg2rad
0069 #ifdef NONLIN_FRSURF
0070 IF ( nonlinFreeSurf.GT.0 ) THEN
0071 IF ( staggerTimeStep.AND.select_rStar.GT.0 ) THEN
0072 DO k=1,Nr
0073 kc = Nr-k+1
0074 pFull3d(:,:,k) = rF(Nr+1) + ( rC(kc) - rF(Nr+1) )
0075 & *rStarFacC(1:sNx,1:sNy,bi,bj)
0076 ENDDO
0077 DO k=1,Nr+1
0078 ki = Nr-k+2
0079 pHalf3d(:,:,k) = rF(Nr+1) + ( rF(ki) - rF(Nr+1) )
0080 & *rStarFacC(1:sNx,1:sNy,bi,bj)
0081 ENDDO
1023b1ccda Jean*0082 ELSEIF ( select_rStar.GT.0 ) THEN
0083 DO k=1,Nr
0084 kc = Nr-k+1
0085 pFull3d(:,:,k) = rF(Nr+1) + ( rC(kc) - rF(Nr+1) )
0086 & *rStarFacNm1C(1:sNx,1:sNy,bi,bj)
0087 ENDDO
0088 DO k=1,Nr+1
0089 ki = Nr-k+2
0090 pHalf3d(:,:,k) = rF(Nr+1) + ( rF(ki) - rF(Nr+1) )
0091 & *rStarFacNm1C(1:sNx,1:sNy,bi,bj)
0092 ENDDO
e259fb67de Jean*0093 ELSE
0094 STOP 'ATM_PHYS_DYN2PHYS: misssing code - 1 -'
0095 ENDIF
0096 ELSE
0097 #else /* ndef NONLIN_FRSURF */
0098 IF (.TRUE.) THEN
0099 #endif /* NONLIN_FRSURF */
0100 DO k=1,Nr
0101 kc = Nr-k+1
0102 pFull3d(:,:,k) = rC(kc)
0103 ENDDO
0104 DO k=1,Nr+1
0105 ki = Nr-k+2
0106 pHalf3d(:,:,k) = rF(ki)
0107 ENDDO
0108 ENDIF
0109
0110
0111 DO k=1,Nr
0112 kc = Nr-k+1
0113 zFull3d(:,:,k) = ( phiRef(2*kc)
0114 & + totPhiHyd(1:sNx,1:sNy,kc,bi,bj)
0115 & )*recip_gravity
0116 conv_theta2T = (rC(kc)/atm_po)**atm_kappa
0117 t3d(:,:,k) = theta(1:sNx,1:sNy,kc,bi,bj)*conv_theta2T
0118 q3d(:,:,k) = MAX( salt(1:sNx,1:sNy,kc,bi,bj), 0. _d 0 )
0119 u3d(:,:,k) = ( uVel(1:sNx, 1:sNy,kc,bi,bj)
0120 & + uVel(2:sNx+1,1:sNy,kc,bi,bj) )*0.5 _d 0
0121 v3d(:,:,k) = ( vVel(1:sNx,1:sNy, kc,bi,bj)
0122 & + vVel(1:sNx,2:sNy+1,kc,bi,bj) )*0.5 _d 0
0123 IF ( nonlinFreeSurf.LE.0 ) THEN
0124 zFull3d(:,:,k) = zFull3d(:,:,k)
0125 & - Bo_surf(1:sNx,1:sNy,bi,bj)
0126 & *etaN(1:sNx,1:sNy,bi,bj)
0127 & *recip_gravity
0128 ENDIF
0129 #ifdef NONLIN_FRSURF
0130 IF ( select_rStar.GE.1 ) THEN
0131 t3d(:,:,k) = t3d(:,:,k)*pStarFacK(1:sNx,1:sNy,bi,bj)
0132 ENDIF
0133 #endif /* NONLIN_FRSURF */
0134 ENDDO
0135
0136
0137
0138
0139
0140
0141 DO k=1,Nr+1
0142 ki = Nr-k+2
0143 zHalf3d(:,:,k) = phiRef(2*ki-1)*recip_gravity
0144 ENDDO
0145 DO k=1,Nr
0146 kc = Nr-k+1
0147 kp = MIN(kc+1,Nr)
0148 zHalf3d(:,:,k) = zHalf3d(:,:,k)
0149 & + ( totPhiHyd(1:sNx,1:sNy,kp,bi,bj)
0150 & +totPhiHyd(1:sNx,1:sNy,kc,bi,bj) )*0.5
0151 & *recip_gravity
0152 IF ( nonlinFreeSurf.LE.0 ) THEN
0153 zHalf3d(:,:,k) = zHalf3d(:,:,k)
0154 & - Bo_surf(1:sNx,1:sNy,bi,bj)
0155 & *etaN(1:sNx,1:sNy,bi,bj)
0156 & *recip_gravity
0157 ENDIF
0158 ENDDO
0159
0160 RETURN
0161 END