- Timestamp:
- 2020-09-14T17:40:34+02:00 (4 years ago)
- Location:
- NEMO/branches/2019/dev_r11351_fldread_with_XIOS
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11351_fldread_with_XIOS
- Property svn:externals
-
old new 3 3 ^/utils/build/mk@HEAD mk 4 4 ^/utils/tools@HEAD tools 5 ^/vendors/AGRIF/dev @HEADext/AGRIF5 ^/vendors/AGRIF/dev_r12970_AGRIF_CMEMS ext/AGRIF 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL 8 9 # SETTE 10 ^/utils/CI/sette@13382 sette
-
- Property svn:externals
-
NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/SBC/cyclone.F90
r10068 r13463 37 37 38 38 !! * Substitutions 39 # include " vectopt_loop_substitute.h90"39 # include "do_loop_substitute.h90" 40 40 !!---------------------------------------------------------------------- 41 41 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 137 137 zhemi = SIGN( 1. , zrlat ) 138 138 zinfl = 15.* rad ! clim inflow angle in Tropical Cyclones 139 IF 139 IF( vortex == 0 ) THEN 140 140 141 141 ! Vortex Holland reconstruct wind at each lon-lat position … … 147 147 zb = 2. 148 148 149 DO jj = 1, jpj 150 DO ji = 1, jpi 151 152 ! calc distance between TC center and any point following great circle 153 ! source : http://www.movable-type.co.uk/scripts/latlong.html 154 zzrglam = rad * glamt(ji,jj) - zrlon 155 zzrgphi = rad * gphit(ji,jj) 156 zdist = ra * ACOS( SIN( zrlat ) * SIN( zzrgphi ) & 157 & + COS( zrlat ) * COS( zzrgphi ) * COS( zzrglam ) ) 158 159 IF (zdist < zrout2) THEN ! calculation of wind only to a given max radius 160 ! shape of the wind profile 161 zztmp = ( zrmw / ( zdist + 1.e-12 ) )**zb 162 zztmp = zvmax * SQRT( zztmp * EXP(1. - zztmp) ) 163 164 IF (zdist > zrout1) THEN ! bring to zero between r_out1 and r_out2 165 zztmp = zztmp * ( (zrout2-zdist)*1.e-6 ) 166 ENDIF 167 168 ! !!! KILL EQ WINDS 169 ! IF (SIGN( 1. , zrlat ) /= zhemi) THEN 170 ! zztmp = 0. ! winds in other hemisphere 171 ! IF (ABS(gphit(ji,jj)) <= 5.) zztmp=0. ! kill between 5N-5S 172 ! ENDIF 173 ! IF (ABS(gphit(ji,jj)) <= 10. .and. ABS(gphit(ji,jj)) > 5.) THEN 174 ! zztmp = zztmp * ( 1./5. * (ABS(gphit(ji,jj)) - 5.) ) 175 ! !linear to zero between 10 and 5 176 ! ENDIF 177 ! !!! / KILL EQ 178 179 IF (ABS(gphit(ji,jj)) >= 55.) zztmp = 0. ! kill weak spurious winds at high latitude 180 181 zwnd_t = COS( zinfl ) * zztmp 182 zwnd_r = - SIN( zinfl ) * zztmp 183 184 ! Project radial-tangential components on zonal-meridional components 185 ! ------------------------------------------------------------------- 186 187 ! ztheta = azimuthal angle of the great circle between two points 188 zztmp = COS( zrlat ) * SIN( zzrgphi ) & 189 & - SIN( zrlat ) * COS( zzrgphi ) * COS( zzrglam ) 190 ztheta = ATAN2( COS( zzrgphi ) * SIN( zzrglam ) , zztmp ) 191 192 zwnd_x(ji,jj) = zwnd_x(ji,jj) - zhemi * COS(ztheta)*zwnd_t + SIN(ztheta)*zwnd_r 193 zwnd_y(ji,jj) = zwnd_y(ji,jj) + zhemi * SIN(ztheta)*zwnd_t + COS(ztheta)*zwnd_r 194 ENDIF 195 END DO 196 END DO 149 DO_2D( 1, 1, 1, 1 ) 150 151 ! calc distance between TC center and any point following great circle 152 ! source : http://www.movable-type.co.uk/scripts/latlong.html 153 zzrglam = rad * glamt(ji,jj) - zrlon 154 zzrgphi = rad * gphit(ji,jj) 155 zdist = ra * ACOS( SIN( zrlat ) * SIN( zzrgphi ) & 156 & + COS( zrlat ) * COS( zzrgphi ) * COS( zzrglam ) ) 157 158 IF(zdist < zrout2) THEN ! calculation of wind only to a given max radius 159 ! shape of the wind profile 160 zztmp = ( zrmw / ( zdist + 1.e-12 ) )**zb 161 zztmp = zvmax * SQRT( zztmp * EXP(1. - zztmp) ) 162 163 IF(zdist > zrout1) THEN ! bring to zero between r_out1 and r_out2 164 zztmp = zztmp * ( (zrout2-zdist)*1.e-6 ) 165 ENDIF 166 167 ! !!! KILL EQ WINDS 168 ! IF(SIGN( 1. , zrlat ) /= zhemi) THEN 169 ! zztmp = 0. ! winds in other hemisphere 170 ! IF(ABS(gphit(ji,jj)) <= 5.) zztmp=0. ! kill between 5N-5S 171 ! ENDIF 172 ! IF(ABS(gphit(ji,jj)) <= 10. .and. ABS(gphit(ji,jj)) > 5.) THEN 173 ! zztmp = zztmp * ( 1./5. * (ABS(gphit(ji,jj)) - 5.) ) 174 ! !linear to zero between 10 and 5 175 ! ENDIF 176 ! !!! / KILL EQ 177 178 IF(ABS(gphit(ji,jj)) >= 55.) zztmp = 0. ! kill weak spurious winds at high latitude 179 180 zwnd_t = COS( zinfl ) * zztmp 181 zwnd_r = - SIN( zinfl ) * zztmp 182 183 ! Project radial-tangential components on zonal-meridional components 184 ! ------------------------------------------------------------------- 185 186 ! ztheta = azimuthal angle of the great circle between two points 187 zztmp = COS( zrlat ) * SIN( zzrgphi ) & 188 & - SIN( zrlat ) * COS( zzrgphi ) * COS( zzrglam ) 189 ztheta = ATAN2( COS( zzrgphi ) * SIN( zzrglam ) , zztmp ) 190 191 zwnd_x(ji,jj) = zwnd_x(ji,jj) - zhemi * COS(ztheta)*zwnd_t + SIN(ztheta)*zwnd_r 192 zwnd_y(ji,jj) = zwnd_y(ji,jj) + zhemi * SIN(ztheta)*zwnd_t + COS(ztheta)*zwnd_r 193 ENDIF 194 END_2D 197 195 198 ELSE IF 196 ELSE IF( vortex == 1 ) THEN 199 197 200 198 ! Vortex Willoughby reconstruct wind at each lon-lat position … … 206 204 zn = 2.1340 + 0.0077*zvmax - 0.4522*LOG(zrmw/1000.) - 0.0038*ABS( ztct(jtc,jp_lat) ) 207 205 zA = 0.5913 + 0.0029*zvmax - 0.1361*LOG(zrmw/1000.) - 0.0042*ABS( ztct(jtc,jp_lat) ) 208 IF 206 IF(zA < 0) THEN 209 207 zA=0 210 208 ENDIF 211 209 212 DO jj = 1, jpj 213 DO ji = 1, jpi 214 215 zzrglam = rad * glamt(ji,jj) - zrlon 216 zzrgphi = rad * gphit(ji,jj) 217 zdist = ra * ACOS( SIN( zrlat ) * SIN( zzrgphi ) & 218 & + COS( zrlat ) * COS( zzrgphi ) * COS( zzrglam ) ) 219 220 IF (zdist < zrout2) THEN ! calculation of wind only to a given max radius 210 DO_2D( 1, 1, 1, 1 ) 211 212 zzrglam = rad * glamt(ji,jj) - zrlon 213 zzrgphi = rad * gphit(ji,jj) 214 zdist = ra * ACOS( SIN( zrlat ) * SIN( zzrgphi ) & 215 & + COS( zrlat ) * COS( zzrgphi ) * COS( zzrglam ) ) 216 217 IF(zdist < zrout2) THEN ! calculation of wind only to a given max radius 218 219 ! shape of the wind profile 220 IF(zdist <= zrmw) THEN ! inside the Radius of Maximum Wind 221 zztmp = zvmax * (zdist/zrmw)**zn 222 ELSE 223 zztmp = zvmax * ( (1-zA) * EXP(- (zdist-zrmw)/zXX1 ) + zA * EXP(- (zdist-zrmw)/zXX2 ) ) 224 ENDIF 225 226 IF(zdist > zrout1) THEN ! bring to zero between r_out1 and r_out2 227 zztmp = zztmp * ( (zrout2-zdist)*1.e-6 ) 228 ENDIF 229 230 ! !!! KILL EQ WINDS 231 ! IF(SIGN( 1. , zrlat ) /= zhemi) THEN 232 ! zztmp = 0. ! winds in other hemisphere 233 ! IF(ABS(gphit(ji,jj)) <= 5.) zztmp=0. ! kill between 5N-5S 234 ! ENDIF 235 ! IF(ABS(gphit(ji,jj)) <= 10. .and. ABS(gphit(ji,jj)) > 5.) THEN 236 ! zztmp = zztmp * ( 1./5. * (ABS(gphit(ji,jj)) - 5.) ) 237 ! !linear to zero between 10 and 5 238 ! ENDIF 239 ! !!! / KILL EQ 240 241 IF(ABS(gphit(ji,jj)) >= 55.) zztmp = 0. ! kill weak spurious winds at high latitude 242 243 zwnd_t = COS( zinfl ) * zztmp 244 zwnd_r = - SIN( zinfl ) * zztmp 245 246 ! Project radial-tangential components on zonal-meridional components 247 ! ------------------------------------------------------------------- 221 248 222 ! shape of the wind profile 223 IF (zdist <= zrmw) THEN ! inside the Radius of Maximum Wind 224 zztmp = zvmax * (zdist/zrmw)**zn 225 ELSE 226 zztmp = zvmax * ( (1-zA) * EXP(- (zdist-zrmw)/zXX1 ) + zA * EXP(- (zdist-zrmw)/zXX2 ) ) 227 ENDIF 228 229 IF (zdist > zrout1) THEN ! bring to zero between r_out1 and r_out2 230 zztmp = zztmp * ( (zrout2-zdist)*1.e-6 ) 231 ENDIF 232 233 ! !!! KILL EQ WINDS 234 ! IF (SIGN( 1. , zrlat ) /= zhemi) THEN 235 ! zztmp = 0. ! winds in other hemisphere 236 ! IF (ABS(gphit(ji,jj)) <= 5.) zztmp=0. ! kill between 5N-5S 237 ! ENDIF 238 ! IF (ABS(gphit(ji,jj)) <= 10. .and. ABS(gphit(ji,jj)) > 5.) THEN 239 ! zztmp = zztmp * ( 1./5. * (ABS(gphit(ji,jj)) - 5.) ) 240 ! !linear to zero between 10 and 5 241 ! ENDIF 242 ! !!! / KILL EQ 243 244 IF (ABS(gphit(ji,jj)) >= 55.) zztmp = 0. ! kill weak spurious winds at high latitude 245 246 zwnd_t = COS( zinfl ) * zztmp 247 zwnd_r = - SIN( zinfl ) * zztmp 248 249 ! Project radial-tangential components on zonal-meridional components 250 ! ------------------------------------------------------------------- 251 252 ! ztheta = azimuthal angle of the great circle between two points 253 zztmp = COS( zrlat ) * SIN( zzrgphi ) & 254 & - SIN( zrlat ) * COS( zzrgphi ) * COS( zzrglam ) 255 ztheta = ATAN2( COS( zzrgphi ) * SIN( zzrglam ) , zztmp ) 256 257 zwnd_x(ji,jj) = zwnd_x(ji,jj) - zhemi * COS(ztheta)*zwnd_t + SIN(ztheta)*zwnd_r 258 zwnd_y(ji,jj) = zwnd_y(ji,jj) + zhemi * SIN(ztheta)*zwnd_t + COS(ztheta)*zwnd_r 259 260 ENDIF 261 END DO 262 END DO 249 ! ztheta = azimuthal angle of the great circle between two points 250 zztmp = COS( zrlat ) * SIN( zzrgphi ) & 251 & - SIN( zrlat ) * COS( zzrgphi ) * COS( zzrglam ) 252 ztheta = ATAN2( COS( zzrgphi ) * SIN( zzrglam ) , zztmp ) 253 254 zwnd_x(ji,jj) = zwnd_x(ji,jj) - zhemi * COS(ztheta)*zwnd_t + SIN(ztheta)*zwnd_r 255 zwnd_y(ji,jj) = zwnd_y(ji,jj) + zhemi * SIN(ztheta)*zwnd_t + COS(ztheta)*zwnd_r 256 257 ENDIF 258 END_2D 263 259 ENDIF ! / vortex Holland or Wiloughby 264 260 ENDIF ! / cyclone is defined in this slot ? yes--> begin
Note: See TracChangeset
for help on using the changeset viewer.