** Warning **
Issuing rollback() due to DESTROY without explicit disconnect() of DBD::mysql::db handle dbname=MITgcm at /usr/local/share/lxr/lib/LXR/Common.pm line 1224.
Last-Modified: Wed, 14 Oct 2025 05:09:11 GMT
Content-Type: text/html; charset=utf-8
MITgcm/MITgcm/pkg/exf/exf_set_uv.F
File indexing completed on 2021-11-10 06:15:39 UTC
view on github raw file Latest commit deacece5 on 2021-11-09 17:35:09 UTC
8ac0e9b3ce Dimi* 0001 #include "EXF_OPTIONS.h "
0002
8a0f942cd7 Jean* 0003
0004
30fcb891cf Jean* 0005
8a0f942cd7 Jean* 0006
4aa4270510 Jean* 0007 SUBROUTINE EXF_SET_UV (
8a0f942cd7 Jean* 0008 I uVecName , uVecFile , uVecMask ,
0009 I uVecStartTime , uVecPeriod , uVecRepeatCycle ,
0010 I uVec_inScale , uVec_remove_intercept , uVec_remove_slope ,
0011 U uVec , uVec0 , uVec1 ,
0012 I vVecName , vVecFile , vVecMask ,
0013 I vVecStartTime , vVecPeriod , vVecRepeatCycle ,
0014 I vVec_inScale , vVec_remove_intercept , vVec_remove_slope ,
0015 U vVec , vVec0 , vVec1 ,
4aa4270510 Jean* 0016 #ifdef USE_EXF_INTERPOLATION
8a0f942cd7 Jean* 0017 I uVec_lon0 , uVec_lon_inc , uVec_lat0 , uVec_lat_inc ,
0018 I uVec_nlon , uVec_nlat , u_interp_method ,
0019 I vVec_lon0 , vVec_lon_inc , vVec_lat0 , vVec_lat_inc ,
0020 I vVec_nlon , vVec_nlat , v_interp_method , uvInterp ,
4aa4270510 Jean* 0021 #endif /* USE_EXF_INTERPOLATION */
0022 I myTime , myIter , myThid )
8ac0e9b3ce Dimi* 0023
8a0f942cd7 Jean* 0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
4aa4270510 Jean* 0035 IMPLICIT NONE
0036
8ac0e9b3ce Dimi* 0037 #include "EEPARAMS.h "
0038 #include "SIZE.h "
0039 #include "PARAMS.h "
0040 #include "GRID.h "
082e18c36c Jean* 0041 #include "EXF_PARAM.h "
0042 #include "EXF_CONSTANTS.h "
30fcb891cf Jean* 0043 #include "EXF_INTERP_SIZE.h "
0044 #include "EXF_INTERP_PARAM.h "
a9085e980c Jean* 0045 #include "EXF_FIELDS.h "
8ac0e9b3ce Dimi* 0046
8a0f942cd7 Jean* 0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059 #ifdef USE_EXF_INTERPOLATION
0060
0061
4aa4270510 Jean* 0062
a9085e980c Jean* 0063
4aa4270510 Jean* 0064
0065
8a0f942cd7 Jean* 0066 #endif /* USE_EXF_INTERPOLATION */
0067
0068
0069
0070 CHARACTER *(*) uVecName
0071 CHARACTER *(128) uVecFile
0072 CHARACTER *1 uVecMask
0073 _RL uVecStartTime , uVecPeriod , uVecRepeatCycle
0074 _RL uVec_inScale
0075 _RL uVec_remove_intercept , uVec_remove_slope
0076 _RL uVec (1-OLx :sNx +OLx ,1-OLy :sNy +OLy ,nSx ,nSy )
0077 _RL uVec0 (1-OLx :sNx +OLx ,1-OLy :sNy +OLy ,nSx ,nSy )
0078 _RL uVec1 (1-OLx :sNx +OLx ,1-OLy :sNy +OLy ,nSx ,nSy )
0079 CHARACTER *(*) vVecName
0080 CHARACTER *(128) vVecFile
0081 CHARACTER *1 vVecMask
0082 _RL vVecStartTime , vVecPeriod , vVecRepeatCycle
0083 _RL vVec_inScale
0084 _RL vVec_remove_intercept , vVec_remove_slope
0085 _RL vVec (1-OLx :sNx +OLx ,1-OLy :sNy +OLy ,nSx ,nSy )
0086 _RL vVec0 (1-OLx :sNx +OLx ,1-OLy :sNy +OLy ,nSx ,nSy )
0087 _RL vVec1 (1-OLx :sNx +OLx ,1-OLy :sNy +OLy ,nSx ,nSy )
4aa4270510 Jean* 0088 #ifdef USE_EXF_INTERPOLATION
8a0f942cd7 Jean* 0089 _RL uVec_lon0 , uVec_lon_inc
0090 _RL uVec_lat0 , uVec_lat_inc (MAX_LAT_INC )
0091 INTEGER uVec_nlon , uVec_nlat , u_interp_method
0092 _RL vVec_lon0 , vVec_lon_inc
0093 _RL vVec_lat0 , vVec_lat_inc (MAX_LAT_INC )
0094 INTEGER vVec_nlon , vVec_nlat , v_interp_method
78c96ec6a7 Jean* 0095 LOGICAL uvInterp
4aa4270510 Jean* 0096 #endif /* USE_EXF_INTERPOLATION */
0097 _RL myTime
0098 INTEGER myIter
0099 INTEGER myThid
8ac0e9b3ce Dimi* 0100
8a0f942cd7 Jean* 0101
1fc1e2c3e5 Jean* 0102 INTEGER ILNBLNK
0103 EXTERNAL ILNBLNK
0104
8a0f942cd7 Jean* 0105
353c624de2 Jean* 0106 INTEGER i , j , bi , bj
0107 _RL tmp_u (1-OLx :sNx +OLx ,1-OLy :sNy +OLy ,nSx ,nSy )
0108 _RL tmp_v (1-OLx :sNx +OLx ,1-OLy :sNy +OLy ,nSx ,nSy )
4aa4270510 Jean* 0109 #ifdef USE_EXF_INTERPOLATION
1fc1e2c3e5 Jean* 0110
0111 CHARACTER *(MAX_LEN_MBUF ) msgBuf
8a0f942cd7 Jean* 0112 CHARACTER *(128) uVecFile0 , uVecFile1
0113 CHARACTER *(128) vVecFile0 , vVecFile1
0114 CHARACTER *(MAX_LEN_FNAM ) out_uVecFile , out_vVecFile
4aa4270510 Jean* 0115 LOGICAL first , changed
95aadf3c69 Jean* 0116 _RL fac
0117 #ifdef EXF_USE_OLD_VEC_ROTATION
0118 _RL x1 , x2 , x3 , x4 , y1 , y2 , y3 , y4 , dx , dy
0119 #endif
4aa4270510 Jean* 0120 INTEGER count0 , count1
0121 INTEGER year0 , year1
a9085e980c Jean* 0122 # ifndef EXF_INTERP_USE_DYNALLOC
0123 _RL bufArr1 ( exf_interp_bufferSize )
0124 _RL bufArr2 ( exf_interp_bufferSize )
0125 # endif
4aa4270510 Jean* 0126 #endif /* USE_EXF_INTERPOLATION */
8a0f942cd7 Jean* 0127
8ac0e9b3ce Dimi* 0128
4aa4270510 Jean* 0129 #ifdef USE_EXF_INTERPOLATION
78c96ec6a7 Jean* 0130 IF ( u_interp_method .GE. 1 .AND. v_interp_method .GE. 1 .AND.
8a0f942cd7 Jean* 0131 & uVecFile .NE. ' ' .AND. vVecFile .NE. ' ' .AND.
78c96ec6a7 Jean* 0132 & (usingCurvilinearGrid .OR. rotateGrid .OR. uvInterp ) ) THEN
8ac0e9b3ce Dimi* 0133
454eebbe98 Jean* 0134 IF ( exf_debugLev .GE. debLevD ) THEN
0135 _BEGIN_MASTER ( myThid )
8a0f942cd7 Jean* 0136 i = ILNBLNK (uVecFile )
0137 j = ILNBLNK (vVecFile )
0138 WRITE (msgBuf ,'(6A)' ) 'EXF_SET_UV: ' ,
0139 & 'processing fields "' , uVecName , '" & "' , vVecName , '"'
0140 CALL PRINT_MESSAGE ( msgBuf , standardMessageUnit ,
0141 & SQUEEZE_RIGHT , myThid )
0142 WRITE (msgBuf ,'(6A)' ) 'EXF_SET_UV: ' ,
0143 & ' files: ' , uVecFile (1:i ), ' & ' , vVecFile (1:j )
454eebbe98 Jean* 0144 CALL PRINT_MESSAGE ( msgBuf , standardMessageUnit ,
0145 & SQUEEZE_RIGHT , myThid )
0146 _END_MASTER ( myThid )
0147 ENDIF
8a0f942cd7 Jean* 0148 IF ( useCAL .AND. uVecPeriod .EQ. -12. ) THEN
bd3e337e2f Jean* 0149 #ifdef ALLOW_CAL
d0e15cd3ab Jean* 0150
0151
0152 CALL cal_GetMonthsRec (
0153 O fac , first , changed ,
deacece587 Oliv* 0154 O count0 , count1 , year0 , year1 ,
0155 I myTime , myIter , myThid )
0156 #endif /* ALLOW_CAL */
0157 ELSEIF ( useCAL .AND. uVecPeriod .EQ. -1.) THEN
0158 #ifdef ALLOW_CAL
0159
0160
0161
0162
0163 CALL EXF_GetMonthsRec (
0164 I uVecStartTime , useExfYearlyFields ,
0165 O fac , first , changed ,
0166 O count0 , count1 , year0 , year1 ,
d0e15cd3ab Jean* 0167 I myTime , myIter , myThid )
bd3e337e2f Jean* 0168 #endif /* ALLOW_CAL */
8a0f942cd7 Jean* 0169 ELSEIF ( uVecPeriod .LT. 0. ) THEN
0170 j = ILNBLNK (uVecFile )
0171 WRITE (msgBuf ,'(4A,1PE16.8,2A)' ) 'EXF_SET_UV: ' ,
0172 & '"' , uVecName , '", Invalid uVecPeriod=' , uVecPeriod ,
0173 & ' for file: ' , uVecFile (1:j )
d0e15cd3ab Jean* 0174 CALL PRINT_ERROR ( msgBuf , myThid )
0175 STOP 'ABNORMAL END: S/R EXF_SET_UV'
0176 ELSE
78c96ec6a7 Jean* 0177
8a0f942cd7 Jean* 0178 CALL EXF_GetFFieldRec (
0179 I uVecStartTime , uVecPeriod , uVecRepeatCycle ,
0180 I uVecName , useExfYearlyFields ,
d0e15cd3ab Jean* 0181 O fac , first , changed ,
0182 O count0 , count1 , year0 , year1 ,
0183 I myTime , myIter , myThid )
0184 ENDIF
0185 IF ( exf_debugLev .GE. debLevD ) THEN
0186 _BEGIN_MASTER ( myThid )
8a0f942cd7 Jean* 0187 WRITE (msgBuf ,'(2A,I10,2I7)' ) 'EXF_SET_UV: ' ,
d0e15cd3ab Jean* 0188 & ' myIter, count0, count1:' , myIter , count0 , count1
0189 CALL PRINT_MESSAGE ( msgBuf , standardMessageUnit ,
0190 & SQUEEZE_RIGHT , myThid )
deacece587 Oliv* 0191 WRITE (msgBuf ,'(2A,2(L2,2X),F21.17)' ) 'EXF_SET_UV: ' ,
d0e15cd3ab Jean* 0192 & ' first, changed, fac: ' , first , changed , fac
0193 CALL PRINT_MESSAGE ( msgBuf , standardMessageUnit ,
0194 & SQUEEZE_RIGHT , myThid )
0195 _END_MASTER ( myThid )
0196 ENDIF
8ac0e9b3ce Dimi* 0197
4aa4270510 Jean* 0198 IF ( first ) THEN
78c96ec6a7 Jean* 0199
510778fc01 Mart* 0200
4aa4270510 Jean* 0201 CALL exf_GetYearlyFieldName (
8a0f942cd7 Jean* 0202 I useExfYearlyFields , twoDigitYear , uVecPeriod , year0 ,
0203 I uVecFile ,
0204 O uVecFile0 ,
4aa4270510 Jean* 0205 I myTime , myIter , myThid )
0206 CALL exf_GetYearlyFieldName (
8a0f942cd7 Jean* 0207 I useExfYearlyFields , twoDigitYear , vVecPeriod , year0 ,
0208 I vVecFile ,
0209 O vVecFile0 ,
4aa4270510 Jean* 0210 I myTime , myIter , myThid )
1fc1e2c3e5 Jean* 0211 IF ( exf_debugLev .GE. debLevC ) THEN
0212 _BEGIN_MASTER (myThid )
8a0f942cd7 Jean* 0213 WRITE (msgBuf ,'(6A,I10)' ) 'EXF_SET_UV: ' ,
0214 & 'fields "' , uVecName , '" & "' , vVecName , '", it=' , myIter
1fc1e2c3e5 Jean* 0215 CALL PRINT_MESSAGE ( msgBuf , standardMessageUnit ,
0216 & SQUEEZE_RIGHT , myThid )
8a0f942cd7 Jean* 0217 j = ILNBLNK (uVecFile0 )
0218 WRITE (msgBuf ,'(2A,I6,3A)' ) 'EXF_SET_UV: ' ,
0219 & 'loading rec=' , count0 , ' from file: "' , uVecFile0 (1:j ), '"'
1fc1e2c3e5 Jean* 0220 CALL PRINT_MESSAGE ( msgBuf , standardMessageUnit ,
8a0f942cd7 Jean* 0221 & SQUEEZE_RIGHT , myThid )
0222 j = ILNBLNK (vVecFile0 )
0223 WRITE (msgBuf ,'(2A,I6,3A)' ) 'EXF_SET_UV: ' ,
0224 & 'loading rec=' , count0 , ' from file: "' , vVecFile0 (1:j ), '"'
0225 CALL PRINT_MESSAGE ( msgBuf , standardMessageUnit ,
0226 & SQUEEZE_RIGHT , myThid )
1fc1e2c3e5 Jean* 0227 _END_MASTER (myThid )
0228 ENDIF
4aa4270510 Jean* 0229
78c96ec6a7 Jean* 0230 IF ( uvInterp ) THEN
0231
0232 CALL EXF_INTERP_UV (
8a0f942cd7 Jean* 0233 I uVecFile0 , vVecFile0 , exf_iprec , count0 ,
0234 I uVec_nlon , uVec_nlat ,
0235 I uVec_lon0 , uVec_lon_inc , uVec_lat0 , uVec_lat_inc ,
a9085e980c Jean* 0236 #ifdef EXF_INTERP_USE_DYNALLOC
78c96ec6a7 Jean* 0237 O tmp_u , tmp_v ,
a9085e980c Jean* 0238 #else
0239 O tmp_u , tmp_v , bufArr1 , bufArr2 ,
0240 #endif
78c96ec6a7 Jean* 0241 I xC , yC ,
0242 I u_interp_method , v_interp_method , myIter , myThid )
0243 ELSE
0244
0245 CALL EXF_INTERP (
8a0f942cd7 Jean* 0246 I uVecFile0 , exf_iprec ,
a9085e980c Jean* 0247 #ifdef EXF_INTERP_USE_DYNALLOC
4aa4270510 Jean* 0248 O tmp_u ,
a9085e980c Jean* 0249 #else
0250 O tmp_u , bufArr1 ,
0251 #endif
4aa4270510 Jean* 0252 I count0 , xC , yC ,
8a0f942cd7 Jean* 0253 I uVec_lon0 , uVec_lon_inc , uVec_lat0 , uVec_lat_inc ,
0254 I uVec_nlon , uVec_nlat , u_interp_method ,
78c96ec6a7 Jean* 0255 I myIter , myThid )
0256 CALL EXF_INTERP (
8a0f942cd7 Jean* 0257 I vVecFile0 , exf_iprec ,
a9085e980c Jean* 0258 #ifdef EXF_INTERP_USE_DYNALLOC
4aa4270510 Jean* 0259 O tmp_v ,
a9085e980c Jean* 0260 #else
0261 O tmp_v , bufArr2 ,
0262 #endif
4aa4270510 Jean* 0263 I count0 , xC , yC ,
8a0f942cd7 Jean* 0264 I vVec_lon0 , vVec_lon_inc , vVec_lat0 , vVec_lat_inc ,
0265 I vVec_nlon , vVec_nlat , v_interp_method ,
78c96ec6a7 Jean* 0266 I myIter , myThid )
0267 ENDIF
0268
353c624de2 Jean* 0269
8a0f942cd7 Jean* 0270
0271
353c624de2 Jean* 0272
0273 IF ( exf_output_interp ) THEN
8a0f942cd7 Jean* 0274 j = ILNBLNK (uVecFile0 )
0275 WRITE (out_uVecFile ,'(2A)' ) uVecFile0 (1:j ), '_out'
353c624de2 Jean* 0276 IF ( count0 .NE. 1 )
8a0f942cd7 Jean* 0277 & CALL WRITE_REC_XY_RL (out_uVecFile ,tmp_u ,1,myIter ,myThid )
0278 CALL WRITE_REC_XY_RL (out_uVecFile ,tmp_u ,count0 ,myIter ,myThid )
0279 j = ILNBLNK (vVecFile0 )
0280 WRITE (out_vVecFile ,'(2A)' ) vVecFile0 (1:j ), '_out'
353c624de2 Jean* 0281 IF ( count0 .NE. 1 )
8a0f942cd7 Jean* 0282 & CALL WRITE_REC_XY_RL (out_vVecFile ,tmp_v ,1,myIter ,myThid )
0283 CALL WRITE_REC_XY_RL (out_vVecFile ,tmp_v ,count0 ,myIter ,myThid )
353c624de2 Jean* 0284 ENDIF
63930fb278 Gael* 0285
353c624de2 Jean* 0286
78c96ec6a7 Jean* 0287 IF ( usingCurvilinearGrid .OR. rotateGrid ) THEN
0288 DO bj = myByLo (myThid ),myByHi (myThid )
0289 DO bi = myBxLo (myThid ),myBxHi (myThid )
4aa4270510 Jean* 0290 DO j = 1,sNy
78c96ec6a7 Jean* 0291 DO i = 1,sNx
8a0f942cd7 Jean* 0292 tmp_u (i ,j ,bi ,bj ) = uVec_inScale *tmp_u (i ,j ,bi ,bj )
0293 tmp_v (i ,j ,bi ,bj ) = vVec_inScale *tmp_v (i ,j ,bi ,bj )
353c624de2 Jean* 0294 ENDDO
0295 ENDDO
0296 DO j = 1,sNy
0297 DO i = 1,sNx
95aadf3c69 Jean* 0298 #ifdef EXF_USE_OLD_VEC_ROTATION
1e18bd6176 Dimi* 0299 x1 =xG (i ,j ,bi ,bj )
0300 x2 =xG (i +1,j ,bi ,bj )
0301 x3 =xG (i ,j +1,bi ,bj )
0302 x4 =xG (i +1,j +1,bi ,bj )
4aa4270510 Jean* 0303 IF ((x2 -x1 ).GT. 180) x2 =x2 -360
0304 IF ((x1 -x2 ).GT. 180) x2 =x2 +360
0305 IF ((x3 -x1 ).GT. 180) x3 =x3 -360
0306 IF ((x1 -x3 ).GT. 180) x3 =x3 +360
0307 IF ((x4 -x1 ).GT. 180) x4 =x4 -360
0308 IF ((x1 -x4 ).GT. 180) x4 =x4 +360
1e18bd6176 Dimi* 0309 y1 =yG (i ,j ,bi ,bj )
0310 y2 =yG (i +1,j ,bi ,bj )
0311 y3 =yG (i ,j +1,bi ,bj )
0312 y4 =yG (i +1,j +1,bi ,bj )
a7ceeb6957 Patr* 0313 dx =0.5*(x3 +x4 -x1 -x2 )
0314 dx =dx *
1e18bd6176 Dimi* 0315 & cos(deg2rad *yC (i ,j ,bi ,bj ))
a7ceeb6957 Patr* 0316 dy =0.5*(y3 +y4 -y1 -y2 )
8a0f942cd7 Jean* 0317 vVec1 (i ,j ,bi ,bj )=
1e18bd6176 Dimi* 0318 & (tmp_u (i ,j ,bi ,bj )*dx +
0319 & tmp_v (i ,j ,bi ,bj )*dy )/
4aa4270510 Jean* 0320 & SQRT(dx *dx +dy *dy )
a7ceeb6957 Patr* 0321 dx =0.5*(x2 +x4 -x1 -x3 )
0322 dx =dx *
1e18bd6176 Dimi* 0323 & cos(deg2rad *yC (i ,j ,bi ,bj ))
a7ceeb6957 Patr* 0324 dy =0.5*(y2 +y4 -y1 -y3 )
8a0f942cd7 Jean* 0325 uVec1 (i ,j ,bi ,bj )=
1e18bd6176 Dimi* 0326 & (tmp_u (i ,j ,bi ,bj )*dx +
0327 & tmp_v (i ,j ,bi ,bj )*dy )/
4aa4270510 Jean* 0328 & SQRT(dx *dx +dy *dy )
95aadf3c69 Jean* 0329 #else /* EXF_USE_OLD_VEC_ROTATION */
8a0f942cd7 Jean* 0330 uVec1 (i ,j ,bi ,bj ) =
95aadf3c69 Jean* 0331 & angleCosC (i ,j ,bi ,bj )*tmp_u (i ,j ,bi ,bj )
0332 & +angleSinC (i ,j ,bi ,bj )*tmp_v (i ,j ,bi ,bj )
8a0f942cd7 Jean* 0333 vVec1 (i ,j ,bi ,bj ) =
95aadf3c69 Jean* 0334 & -angleSinC (i ,j ,bi ,bj )*tmp_u (i ,j ,bi ,bj )
0335 & +angleCosC (i ,j ,bi ,bj )*tmp_v (i ,j ,bi ,bj )
0336 #endif /* EXF_USE_OLD_VEC_ROTATION */
78c96ec6a7 Jean* 0337 ENDDO
4aa4270510 Jean* 0338 ENDDO
78c96ec6a7 Jean* 0339 ENDDO
4aa4270510 Jean* 0340 ENDDO
78c96ec6a7 Jean* 0341 ELSE
0342 DO bj = myByLo (myThid ),myByHi (myThid )
0343 DO bi = myBxLo (myThid ),myBxHi (myThid )
0344 DO j = 1,sNy
0345 DO i = 1,sNx
8a0f942cd7 Jean* 0346 uVec1 (i ,j ,bi ,bj ) = uVec_inScale *tmp_u (i ,j ,bi ,bj )
0347 vVec1 (i ,j ,bi ,bj ) = vVec_inScale *tmp_v (i ,j ,bi ,bj )
78c96ec6a7 Jean* 0348 ENDDO
0349 ENDDO
0350 ENDDO
0351 ENDDO
0352 ENDIF
353c624de2 Jean* 0353
8a0f942cd7 Jean* 0354 CALL EXF_FILTER_RL ( uVec1 , uVecMask , myThid )
0355 CALL EXF_FILTER_RL ( vVec1 , vVecMask , myThid )
353c624de2 Jean* 0356
0357
4aa4270510 Jean* 0358 ENDIF
0359
0360 IF ( first .OR. changed ) THEN
78c96ec6a7 Jean* 0361
0362
8a0f942cd7 Jean* 0363 CALL exf_SwapFFields ( uVec0 , uVec1 , myThid )
0364 CALL exf_SwapFFields ( vVec0 , vVec1 , myThid )
4aa4270510 Jean* 0365
0366 CALL exf_GetYearlyFieldName (
8a0f942cd7 Jean* 0367 I useExfYearlyFields , twoDigitYear , uVecPeriod , year1 ,
0368 I uVecFile ,
0369 O uVecFile1 ,
4aa4270510 Jean* 0370 I myTime , myIter , myThid )
0371 CALL exf_GetYearlyFieldName (
8a0f942cd7 Jean* 0372 I useExfYearlyFields , twoDigitYear , vVecPeriod , year1 ,
0373 I vVecFile ,
0374 O vVecFile1 ,
4aa4270510 Jean* 0375 I myTime , myIter , myThid )
1fc1e2c3e5 Jean* 0376 IF ( exf_debugLev .GE. debLevC ) THEN
0377 _BEGIN_MASTER (myThid )
8a0f942cd7 Jean* 0378 WRITE (msgBuf ,'(6A,I10)' ) 'EXF_SET_UV: ' ,
0379 & 'fields "' , uVecName , '" & "' , vVecName , '", it=' , myIter
1fc1e2c3e5 Jean* 0380 CALL PRINT_MESSAGE ( msgBuf , standardMessageUnit ,
8a0f942cd7 Jean* 0381 & SQUEEZE_RIGHT , myThid )
0382 j = ILNBLNK (uVecFile1 )
0383 WRITE (msgBuf ,'(2A,I6,3A)' ) 'EXF_SET_UV: ' ,
0384 & 'loading rec=' , count1 , ' from file: "' , uVecFile1 (1:j ), '"'
1fc1e2c3e5 Jean* 0385 CALL PRINT_MESSAGE ( msgBuf , standardMessageUnit ,
8a0f942cd7 Jean* 0386 & SQUEEZE_RIGHT , myThid )
0387 j = ILNBLNK (vVecFile1 )
0388 WRITE (msgBuf ,'(2A,I6,3A)' ) 'EXF_SET_UV: ' ,
0389 & 'loading rec=' , count1 , ' from file: "' , vVecFile1 (1:j ), '"'
0390 CALL PRINT_MESSAGE ( msgBuf , standardMessageUnit ,
0391 & SQUEEZE_RIGHT , myThid )
1fc1e2c3e5 Jean* 0392 _END_MASTER (myThid )
0393 ENDIF
4aa4270510 Jean* 0394
78c96ec6a7 Jean* 0395 IF ( uvInterp ) THEN
0396
0397 CALL EXF_INTERP_UV (
8a0f942cd7 Jean* 0398 I uVecFile1 , vVecFile1 , exf_iprec , count1 ,
0399 I uVec_nlon , uVec_nlat ,
0400 I uVec_lon0 , uVec_lon_inc , uVec_lat0 , uVec_lat_inc ,
a9085e980c Jean* 0401 #ifdef EXF_INTERP_USE_DYNALLOC
78c96ec6a7 Jean* 0402 O tmp_u , tmp_v ,
a9085e980c Jean* 0403 #else
0404 O tmp_u , tmp_v , bufArr1 , bufArr2 ,
0405 #endif
78c96ec6a7 Jean* 0406 I xC , yC ,
0407 I u_interp_method , v_interp_method , myIter , myThid )
0408 ELSE
0409
4aa4270510 Jean* 0410 CALL EXF_INTERP (
8a0f942cd7 Jean* 0411 I uVecFile1 , exf_iprec ,
a9085e980c Jean* 0412 #ifdef EXF_INTERP_USE_DYNALLOC
4aa4270510 Jean* 0413 O tmp_u ,
a9085e980c Jean* 0414 #else
0415 O tmp_u , bufArr1 ,
0416 #endif
4aa4270510 Jean* 0417 I count1 , xC , yC ,
8a0f942cd7 Jean* 0418 I uVec_lon0 , uVec_lon_inc , uVec_lat0 , uVec_lat_inc ,
0419 I uVec_nlon , uVec_nlat , u_interp_method ,
78c96ec6a7 Jean* 0420 I myIter , myThid )
4aa4270510 Jean* 0421 CALL EXF_INTERP (
8a0f942cd7 Jean* 0422 I vVecFile1 , exf_iprec ,
a9085e980c Jean* 0423 #ifdef EXF_INTERP_USE_DYNALLOC
4aa4270510 Jean* 0424 O tmp_v ,
a9085e980c Jean* 0425 #else
0426 O tmp_v , bufArr2 ,
0427 #endif
4aa4270510 Jean* 0428 I count1 , xC , yC ,
8a0f942cd7 Jean* 0429 I vVec_lon0 , vVec_lon_inc , vVec_lat0 , vVec_lat_inc ,
0430 I vVec_nlon , vVec_nlat , v_interp_method ,
78c96ec6a7 Jean* 0431 I myIter , myThid )
0432 ENDIF
0433
353c624de2 Jean* 0434
8a0f942cd7 Jean* 0435
0436
353c624de2 Jean* 0437
0438 IF ( exf_output_interp ) THEN
8a0f942cd7 Jean* 0439 j = ILNBLNK (uVecFile1 )
0440 WRITE (out_uVecFile ,'(2A)' ) uVecFile1 (1:j ), '_out'
0441 CALL WRITE_REC_XY_RL (out_uVecFile ,tmp_u ,count1 ,myIter ,myThid )
0442 j = ILNBLNK (vVecFile1 )
0443 WRITE (out_vVecFile ,'(2A)' ) vVecFile1 (1:j ), '_out'
0444 CALL WRITE_REC_XY_RL (out_vVecFile ,tmp_v ,count1 ,myIter ,myThid )
353c624de2 Jean* 0445 ENDIF
63930fb278 Gael* 0446
353c624de2 Jean* 0447
78c96ec6a7 Jean* 0448 IF ( usingCurvilinearGrid .OR. rotateGrid ) THEN
0449 DO bj = myByLo (myThid ),myByHi (myThid )
0450 DO bi = myBxLo (myThid ),myBxHi (myThid )
4aa4270510 Jean* 0451 DO j = 1,sNy
78c96ec6a7 Jean* 0452 DO i = 1,sNx
8a0f942cd7 Jean* 0453 tmp_u (i ,j ,bi ,bj ) = uVec_inScale *tmp_u (i ,j ,bi ,bj )
0454 tmp_v (i ,j ,bi ,bj ) = vVec_inScale *tmp_v (i ,j ,bi ,bj )
353c624de2 Jean* 0455 ENDDO
0456 ENDDO
0457 DO j = 1,sNy
0458 DO i = 1,sNx
95aadf3c69 Jean* 0459 #ifdef EXF_USE_OLD_VEC_ROTATION
1e18bd6176 Dimi* 0460 x1 =xG (i ,j ,bi ,bj )
0461 x2 =xG (i +1,j ,bi ,bj )
0462 x3 =xG (i ,j +1,bi ,bj )
0463 x4 =xG (i +1,j +1,bi ,bj )
4aa4270510 Jean* 0464 IF ((x2 -x1 ).GT. 180) x2 =x2 -360
0465 IF ((x1 -x2 ).GT. 180) x2 =x2 +360
0466 IF ((x3 -x1 ).GT. 180) x3 =x3 -360
0467 IF ((x1 -x3 ).GT. 180) x3 =x3 +360
0468 IF ((x4 -x1 ).GT. 180) x4 =x4 -360
0469 IF ((x1 -x4 ).GT. 180) x4 =x4 +360
1e18bd6176 Dimi* 0470 y1 =yG (i ,j ,bi ,bj )
0471 y2 =yG (i +1,j ,bi ,bj )
0472 y3 =yG (i ,j +1,bi ,bj )
0473 y4 =yG (i +1,j +1,bi ,bj )
a7ceeb6957 Patr* 0474 dx =0.5*(x3 +x4 -x1 -x2 )
0475 dx =dx *
1e18bd6176 Dimi* 0476 & cos(deg2rad *yC (i ,j ,bi ,bj ))
a7ceeb6957 Patr* 0477 dy =0.5*(y3 +y4 -y1 -y2 )
8a0f942cd7 Jean* 0478 vVec1 (i ,j ,bi ,bj )=
1e18bd6176 Dimi* 0479 & (tmp_u (i ,j ,bi ,bj )*dx +
0480 & tmp_v (i ,j ,bi ,bj )*dy )/
4aa4270510 Jean* 0481 & SQRT(dx *dx +dy *dy )
a7ceeb6957 Patr* 0482 dx =0.5*(x2 +x4 -x1 -x3 )
0483 dx =dx *
1e18bd6176 Dimi* 0484 & cos(deg2rad *yC (i ,j ,bi ,bj ))
a7ceeb6957 Patr* 0485 dy =0.5*(y2 +y4 -y1 -y3 )
8a0f942cd7 Jean* 0486 uVec1 (i ,j ,bi ,bj )=
1e18bd6176 Dimi* 0487 & (tmp_u (i ,j ,bi ,bj )*dx +
0488 & tmp_v (i ,j ,bi ,bj )*dy )/
4aa4270510 Jean* 0489 & SQRT(dx *dx +dy *dy )
95aadf3c69 Jean* 0490 #else /* EXF_USE_OLD_VEC_ROTATION */
8a0f942cd7 Jean* 0491 uVec1 (i ,j ,bi ,bj ) =
95aadf3c69 Jean* 0492 & angleCosC (i ,j ,bi ,bj )*tmp_u (i ,j ,bi ,bj )
0493 & +angleSinC (i ,j ,bi ,bj )*tmp_v (i ,j ,bi ,bj )
8a0f942cd7 Jean* 0494 vVec1 (i ,j ,bi ,bj ) =
95aadf3c69 Jean* 0495 & -angleSinC (i ,j ,bi ,bj )*tmp_u (i ,j ,bi ,bj )
0496 & +angleCosC (i ,j ,bi ,bj )*tmp_v (i ,j ,bi ,bj )
0497 #endif /* EXF_USE_OLD_VEC_ROTATION */
78c96ec6a7 Jean* 0498 ENDDO
4aa4270510 Jean* 0499 ENDDO
78c96ec6a7 Jean* 0500 ENDDO
4aa4270510 Jean* 0501 ENDDO
78c96ec6a7 Jean* 0502 ELSE
0503 DO bj = myByLo (myThid ),myByHi (myThid )
0504 DO bi = myBxLo (myThid ),myBxHi (myThid )
0505 DO j = 1,sNy
0506 DO i = 1,sNx
8a0f942cd7 Jean* 0507 uVec1 (i ,j ,bi ,bj ) = uVec_inScale *tmp_u (i ,j ,bi ,bj )
0508 vVec1 (i ,j ,bi ,bj ) = vVec_inScale *tmp_v (i ,j ,bi ,bj )
78c96ec6a7 Jean* 0509 ENDDO
0510 ENDDO
0511 ENDDO
0512 ENDDO
0513 ENDIF
353c624de2 Jean* 0514
8a0f942cd7 Jean* 0515 CALL EXF_FILTER_RL ( uVec1 , uVecMask , myThid )
0516 CALL EXF_FILTER_RL ( vVec1 , vVecMask , myThid )
353c624de2 Jean* 0517
0518
4aa4270510 Jean* 0519 ENDIF
0520
78c96ec6a7 Jean* 0521
4aa4270510 Jean* 0522 DO bj = myByLo (myThid ),myByHi (myThid )
0523 DO bi = myBxLo (myThid ),myBxHi (myThid )
0524 DO j = 1,sNy
0525 DO i = 1,sNx
8a0f942cd7 Jean* 0526 uVec (i ,j ,bi ,bj ) = fac * uVec0 (i ,j ,bi ,bj )
0527 & + (exf_one - fac )* uVec1 (i ,j ,bi ,bj )
0528 vVec (i ,j ,bi ,bj ) = fac * vVec0 (i ,j ,bi ,bj )
0529 & + (exf_one - fac )* vVec1 (i ,j ,bi ,bj )
4aa4270510 Jean* 0530 ENDDO
0531 ENDDO
0532 ENDDO
0533 ENDDO
8ac0e9b3ce Dimi* 0534
0535 ELSE
78c96ec6a7 Jean* 0536
0537
4aa4270510 Jean* 0538 #else /* USE_EXF_INTERPOLATION */
0539 IF ( .TRUE. ) THEN
0540 #endif /* USE_EXF_INTERPOLATION */
8ac0e9b3ce Dimi* 0541
8a0f942cd7 Jean* 0542 CALL EXF_SET_FLD (
0543 I uVecName , uVecFile , uVecMask ,
0544 I uVecStartTime , uVecPeriod , uVecRepeatCycle ,
0545 I uVec_inScale , uVec_remove_intercept , uVec_remove_slope ,
0546 U uVec , uVec0 , uVec1 ,
4aa4270510 Jean* 0547 #ifdef USE_EXF_INTERPOLATION
8a0f942cd7 Jean* 0548 I uVec_lon0 , uVec_lon_inc , uVec_lat0 , uVec_lat_inc ,
0549 I uVec_nlon , uVec_nlat , xC , yC , u_interp_method ,
4aa4270510 Jean* 0550 #endif /* USE_EXF_INTERPOLATION */
8a0f942cd7 Jean* 0551 I myTime , myIter , myThid )
4aa4270510 Jean* 0552
8a0f942cd7 Jean* 0553 CALL EXF_SET_FLD (
0554 I vVecName , vVecFile , vVecMask ,
0555 I vVecStartTime , vVecPeriod , vVecRepeatCycle ,
0556 I vVec_inScale , vVec_remove_intercept , vVec_remove_slope ,
0557 U vVec , vVec0 , vVec1 ,
4aa4270510 Jean* 0558 #ifdef USE_EXF_INTERPOLATION
8a0f942cd7 Jean* 0559 I vVec_lon0 , vVec_lon_inc , vVec_lat0 , vVec_lat_inc ,
0560 I vVec_nlon , vVec_nlat , xC , yC , v_interp_method ,
4aa4270510 Jean* 0561 #endif /* USE_EXF_INTERPOLATION */
8a0f942cd7 Jean* 0562 I myTime , myIter , myThid )
b04d738fef Jean* 0563
63930fb278 Gael* 0564
0565 IF ( rotateStressOnAgrid ) THEN
0566 DO bj = myByLo (myThid ),myByHi (myThid )
0567 DO bi = myBxLo (myThid ),myBxHi (myThid )
0568 DO j = 1,sNy
0569 DO i = 1,sNx
8a0f942cd7 Jean* 0570 tmp_u (i ,j ,bi ,bj ) = uVec (i ,j ,bi ,bj )
0571 tmp_v (i ,j ,bi ,bj ) = vVec (i ,j ,bi ,bj )
63930fb278 Gael* 0572 ENDDO
0573 ENDDO
0574 ENDDO
0575 ENDDO
0576 DO bj = myByLo (myThid ),myByHi (myThid )
0577 DO bi = myBxLo (myThid ),myBxHi (myThid )
0578 DO j = 1,sNy
0579 DO i = 1,sNx
8a0f942cd7 Jean* 0580 uVec (i ,j ,bi ,bj ) =
63930fb278 Gael* 0581 & angleCosC (i ,j ,bi ,bj )*tmp_u (i ,j ,bi ,bj )
0582 & +angleSinC (i ,j ,bi ,bj )*tmp_v (i ,j ,bi ,bj )
8a0f942cd7 Jean* 0583 vVec (i ,j ,bi ,bj ) =
63930fb278 Gael* 0584 & -angleSinC (i ,j ,bi ,bj )*tmp_u (i ,j ,bi ,bj )
0585 & +angleCosC (i ,j ,bi ,bj )*tmp_v (i ,j ,bi ,bj )
0586 ENDDO
0587 ENDDO
0588 ENDDO
0589 ENDDO
0590 ENDIF
0591
8ac0e9b3ce Dimi* 0592 ENDIF
0593
4aa4270510 Jean* 0594 RETURN
0595 END