- Timestamp:
- 2020-05-14T21:46:00+02:00 (4 years ago)
- Location:
- NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser
- Property svn:externals
-
old new 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL 8 9 # SETTE 10 ^/utils/CI/sette@HEAD sette
-
- Property svn:externals
-
NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser/src/OCE/SBC/geo2ocean.F90
r10425 r12928 43 43 44 44 !! * Substitutions 45 # include " vectopt_loop_substitute.h90"45 # include "do_loop_substitute.h90" 46 46 !!---------------------------------------------------------------------- 47 47 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 160 160 ! (computation done on the north stereographic polar plane) 161 161 ! 162 DO jj = 2, jpjm1 163 DO ji = fs_2, jpi ! vector opt. 164 ! 165 zlam = plamt(ji,jj) ! north pole direction & modulous (at t-point) 166 zphi = pphit(ji,jj) 167 zxnpt = 0. - 2. * COS( rad*zlam ) * TAN( rpi/4. - rad*zphi/2. ) 168 zynpt = 0. - 2. * SIN( rad*zlam ) * TAN( rpi/4. - rad*zphi/2. ) 169 znnpt = zxnpt*zxnpt + zynpt*zynpt 170 ! 171 zlam = plamu(ji,jj) ! north pole direction & modulous (at u-point) 172 zphi = pphiu(ji,jj) 173 zxnpu = 0. - 2. * COS( rad*zlam ) * TAN( rpi/4. - rad*zphi/2. ) 174 zynpu = 0. - 2. * SIN( rad*zlam ) * TAN( rpi/4. - rad*zphi/2. ) 175 znnpu = zxnpu*zxnpu + zynpu*zynpu 176 ! 177 zlam = plamv(ji,jj) ! north pole direction & modulous (at v-point) 178 zphi = pphiv(ji,jj) 179 zxnpv = 0. - 2. * COS( rad*zlam ) * TAN( rpi/4. - rad*zphi/2. ) 180 zynpv = 0. - 2. * SIN( rad*zlam ) * TAN( rpi/4. - rad*zphi/2. ) 181 znnpv = zxnpv*zxnpv + zynpv*zynpv 182 ! 183 zlam = plamf(ji,jj) ! north pole direction & modulous (at f-point) 184 zphi = pphif(ji,jj) 185 zxnpf = 0. - 2. * COS( rad*zlam ) * TAN( rpi/4. - rad*zphi/2. ) 186 zynpf = 0. - 2. * SIN( rad*zlam ) * TAN( rpi/4. - rad*zphi/2. ) 187 znnpf = zxnpf*zxnpf + zynpf*zynpf 188 ! 189 zlam = plamv(ji,jj ) ! j-direction: v-point segment direction (around t-point) 190 zphi = pphiv(ji,jj ) 191 zlan = plamv(ji,jj-1) 192 zphh = pphiv(ji,jj-1) 193 zxvvt = 2. * COS( rad*zlam ) * TAN( rpi/4. - rad*zphi/2. ) & 194 & - 2. * COS( rad*zlan ) * TAN( rpi/4. - rad*zphh/2. ) 195 zyvvt = 2. * SIN( rad*zlam ) * TAN( rpi/4. - rad*zphi/2. ) & 196 & - 2. * SIN( rad*zlan ) * TAN( rpi/4. - rad*zphh/2. ) 197 znvvt = SQRT( znnpt * ( zxvvt*zxvvt + zyvvt*zyvvt ) ) 198 znvvt = MAX( znvvt, 1.e-14 ) 199 ! 200 zlam = plamf(ji,jj ) ! j-direction: f-point segment direction (around u-point) 201 zphi = pphif(ji,jj ) 202 zlan = plamf(ji,jj-1) 203 zphh = pphif(ji,jj-1) 204 zxffu = 2. * COS( rad*zlam ) * TAN( rpi/4. - rad*zphi/2. ) & 205 & - 2. * COS( rad*zlan ) * TAN( rpi/4. - rad*zphh/2. ) 206 zyffu = 2. * SIN( rad*zlam ) * TAN( rpi/4. - rad*zphi/2. ) & 207 & - 2. * SIN( rad*zlan ) * TAN( rpi/4. - rad*zphh/2. ) 208 znffu = SQRT( znnpu * ( zxffu*zxffu + zyffu*zyffu ) ) 209 znffu = MAX( znffu, 1.e-14 ) 210 ! 211 zlam = plamf(ji ,jj) ! i-direction: f-point segment direction (around v-point) 212 zphi = pphif(ji ,jj) 213 zlan = plamf(ji-1,jj) 214 zphh = pphif(ji-1,jj) 215 zxffv = 2. * COS( rad*zlam ) * TAN( rpi/4. - rad*zphi/2. ) & 216 & - 2. * COS( rad*zlan ) * TAN( rpi/4. - rad*zphh/2. ) 217 zyffv = 2. * SIN( rad*zlam ) * TAN( rpi/4. - rad*zphi/2. ) & 218 & - 2. * SIN( rad*zlan ) * TAN( rpi/4. - rad*zphh/2. ) 219 znffv = SQRT( znnpv * ( zxffv*zxffv + zyffv*zyffv ) ) 220 znffv = MAX( znffv, 1.e-14 ) 221 ! 222 zlam = plamu(ji,jj+1) ! j-direction: u-point segment direction (around f-point) 223 zphi = pphiu(ji,jj+1) 224 zlan = plamu(ji,jj ) 225 zphh = pphiu(ji,jj ) 226 zxuuf = 2. * COS( rad*zlam ) * TAN( rpi/4. - rad*zphi/2. ) & 227 & - 2. * COS( rad*zlan ) * TAN( rpi/4. - rad*zphh/2. ) 228 zyuuf = 2. * SIN( rad*zlam ) * TAN( rpi/4. - rad*zphi/2. ) & 229 & - 2. * SIN( rad*zlan ) * TAN( rpi/4. - rad*zphh/2. ) 230 znuuf = SQRT( znnpf * ( zxuuf*zxuuf + zyuuf*zyuuf ) ) 231 znuuf = MAX( znuuf, 1.e-14 ) 232 ! 233 ! ! cosinus and sinus using dot and cross products 234 gsint(ji,jj) = ( zxnpt*zyvvt - zynpt*zxvvt ) / znvvt 235 gcost(ji,jj) = ( zxnpt*zxvvt + zynpt*zyvvt ) / znvvt 236 ! 237 gsinu(ji,jj) = ( zxnpu*zyffu - zynpu*zxffu ) / znffu 238 gcosu(ji,jj) = ( zxnpu*zxffu + zynpu*zyffu ) / znffu 239 ! 240 gsinf(ji,jj) = ( zxnpf*zyuuf - zynpf*zxuuf ) / znuuf 241 gcosf(ji,jj) = ( zxnpf*zxuuf + zynpf*zyuuf ) / znuuf 242 ! 243 gsinv(ji,jj) = ( zxnpv*zxffv + zynpv*zyffv ) / znffv 244 gcosv(ji,jj) =-( zxnpv*zyffv - zynpv*zxffv ) / znffv ! (caution, rotation of 90 degres) 245 ! 246 END DO 247 END DO 162 DO_2D_00_01 163 ! 164 zlam = plamt(ji,jj) ! north pole direction & modulous (at t-point) 165 zphi = pphit(ji,jj) 166 zxnpt = 0. - 2. * COS( rad*zlam ) * TAN( rpi/4. - rad*zphi/2. ) 167 zynpt = 0. - 2. * SIN( rad*zlam ) * TAN( rpi/4. - rad*zphi/2. ) 168 znnpt = zxnpt*zxnpt + zynpt*zynpt 169 ! 170 zlam = plamu(ji,jj) ! north pole direction & modulous (at u-point) 171 zphi = pphiu(ji,jj) 172 zxnpu = 0. - 2. * COS( rad*zlam ) * TAN( rpi/4. - rad*zphi/2. ) 173 zynpu = 0. - 2. * SIN( rad*zlam ) * TAN( rpi/4. - rad*zphi/2. ) 174 znnpu = zxnpu*zxnpu + zynpu*zynpu 175 ! 176 zlam = plamv(ji,jj) ! north pole direction & modulous (at v-point) 177 zphi = pphiv(ji,jj) 178 zxnpv = 0. - 2. * COS( rad*zlam ) * TAN( rpi/4. - rad*zphi/2. ) 179 zynpv = 0. - 2. * SIN( rad*zlam ) * TAN( rpi/4. - rad*zphi/2. ) 180 znnpv = zxnpv*zxnpv + zynpv*zynpv 181 ! 182 zlam = plamf(ji,jj) ! north pole direction & modulous (at f-point) 183 zphi = pphif(ji,jj) 184 zxnpf = 0. - 2. * COS( rad*zlam ) * TAN( rpi/4. - rad*zphi/2. ) 185 zynpf = 0. - 2. * SIN( rad*zlam ) * TAN( rpi/4. - rad*zphi/2. ) 186 znnpf = zxnpf*zxnpf + zynpf*zynpf 187 ! 188 zlam = plamv(ji,jj ) ! j-direction: v-point segment direction (around t-point) 189 zphi = pphiv(ji,jj ) 190 zlan = plamv(ji,jj-1) 191 zphh = pphiv(ji,jj-1) 192 zxvvt = 2. * COS( rad*zlam ) * TAN( rpi/4. - rad*zphi/2. ) & 193 & - 2. * COS( rad*zlan ) * TAN( rpi/4. - rad*zphh/2. ) 194 zyvvt = 2. * SIN( rad*zlam ) * TAN( rpi/4. - rad*zphi/2. ) & 195 & - 2. * SIN( rad*zlan ) * TAN( rpi/4. - rad*zphh/2. ) 196 znvvt = SQRT( znnpt * ( zxvvt*zxvvt + zyvvt*zyvvt ) ) 197 znvvt = MAX( znvvt, 1.e-14 ) 198 ! 199 zlam = plamf(ji,jj ) ! j-direction: f-point segment direction (around u-point) 200 zphi = pphif(ji,jj ) 201 zlan = plamf(ji,jj-1) 202 zphh = pphif(ji,jj-1) 203 zxffu = 2. * COS( rad*zlam ) * TAN( rpi/4. - rad*zphi/2. ) & 204 & - 2. * COS( rad*zlan ) * TAN( rpi/4. - rad*zphh/2. ) 205 zyffu = 2. * SIN( rad*zlam ) * TAN( rpi/4. - rad*zphi/2. ) & 206 & - 2. * SIN( rad*zlan ) * TAN( rpi/4. - rad*zphh/2. ) 207 znffu = SQRT( znnpu * ( zxffu*zxffu + zyffu*zyffu ) ) 208 znffu = MAX( znffu, 1.e-14 ) 209 ! 210 zlam = plamf(ji ,jj) ! i-direction: f-point segment direction (around v-point) 211 zphi = pphif(ji ,jj) 212 zlan = plamf(ji-1,jj) 213 zphh = pphif(ji-1,jj) 214 zxffv = 2. * COS( rad*zlam ) * TAN( rpi/4. - rad*zphi/2. ) & 215 & - 2. * COS( rad*zlan ) * TAN( rpi/4. - rad*zphh/2. ) 216 zyffv = 2. * SIN( rad*zlam ) * TAN( rpi/4. - rad*zphi/2. ) & 217 & - 2. * SIN( rad*zlan ) * TAN( rpi/4. - rad*zphh/2. ) 218 znffv = SQRT( znnpv * ( zxffv*zxffv + zyffv*zyffv ) ) 219 znffv = MAX( znffv, 1.e-14 ) 220 ! 221 zlam = plamu(ji,jj+1) ! j-direction: u-point segment direction (around f-point) 222 zphi = pphiu(ji,jj+1) 223 zlan = plamu(ji,jj ) 224 zphh = pphiu(ji,jj ) 225 zxuuf = 2. * COS( rad*zlam ) * TAN( rpi/4. - rad*zphi/2. ) & 226 & - 2. * COS( rad*zlan ) * TAN( rpi/4. - rad*zphh/2. ) 227 zyuuf = 2. * SIN( rad*zlam ) * TAN( rpi/4. - rad*zphi/2. ) & 228 & - 2. * SIN( rad*zlan ) * TAN( rpi/4. - rad*zphh/2. ) 229 znuuf = SQRT( znnpf * ( zxuuf*zxuuf + zyuuf*zyuuf ) ) 230 znuuf = MAX( znuuf, 1.e-14 ) 231 ! 232 ! ! cosinus and sinus using dot and cross products 233 gsint(ji,jj) = ( zxnpt*zyvvt - zynpt*zxvvt ) / znvvt 234 gcost(ji,jj) = ( zxnpt*zxvvt + zynpt*zyvvt ) / znvvt 235 ! 236 gsinu(ji,jj) = ( zxnpu*zyffu - zynpu*zxffu ) / znffu 237 gcosu(ji,jj) = ( zxnpu*zxffu + zynpu*zyffu ) / znffu 238 ! 239 gsinf(ji,jj) = ( zxnpf*zyuuf - zynpf*zxuuf ) / znuuf 240 gcosf(ji,jj) = ( zxnpf*zxuuf + zynpf*zyuuf ) / znuuf 241 ! 242 gsinv(ji,jj) = ( zxnpv*zxffv + zynpv*zyffv ) / znffv 243 gcosv(ji,jj) =-( zxnpv*zyffv - zynpv*zxffv ) / znffv ! (caution, rotation of 90 degres) 244 ! 245 END_2D 248 246 249 247 ! =============== ! … … 251 249 ! =============== ! 252 250 253 DO jj = 2, jpjm1 254 DO ji = fs_2, jpi ! vector opt. 255 IF( MOD( ABS( plamv(ji,jj) - plamv(ji,jj-1) ), 360. ) < 1.e-8 ) THEN 256 gsint(ji,jj) = 0. 257 gcost(ji,jj) = 1. 258 ENDIF 259 IF( MOD( ABS( plamf(ji,jj) - plamf(ji,jj-1) ), 360. ) < 1.e-8 ) THEN 260 gsinu(ji,jj) = 0. 261 gcosu(ji,jj) = 1. 262 ENDIF 263 IF( ABS( pphif(ji,jj) - pphif(ji-1,jj) ) < 1.e-8 ) THEN 264 gsinv(ji,jj) = 0. 265 gcosv(ji,jj) = 1. 266 ENDIF 267 IF( MOD( ABS( plamu(ji,jj) - plamu(ji,jj+1) ), 360. ) < 1.e-8 ) THEN 268 gsinf(ji,jj) = 0. 269 gcosf(ji,jj) = 1. 270 ENDIF 271 END DO 272 END DO 251 DO_2D_00_01 252 IF( MOD( ABS( plamv(ji,jj) - plamv(ji,jj-1) ), 360. ) < 1.e-8 ) THEN 253 gsint(ji,jj) = 0. 254 gcost(ji,jj) = 1. 255 ENDIF 256 IF( MOD( ABS( plamf(ji,jj) - plamf(ji,jj-1) ), 360. ) < 1.e-8 ) THEN 257 gsinu(ji,jj) = 0. 258 gcosu(ji,jj) = 1. 259 ENDIF 260 IF( ABS( pphif(ji,jj) - pphif(ji-1,jj) ) < 1.e-8 ) THEN 261 gsinv(ji,jj) = 0. 262 gcosv(ji,jj) = 1. 263 ENDIF 264 IF( MOD( ABS( plamu(ji,jj) - plamu(ji,jj+1) ), 360. ) < 1.e-8 ) THEN 265 gsinf(ji,jj) = 0. 266 gcosf(ji,jj) = 1. 267 ENDIF 268 END_2D 273 269 274 270 ! =========================== !
Note: See TracChangeset
for help on using the changeset viewer.