New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 12928 for NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser/src/OCE/SBC/geo2ocean.F90 – NEMO

Ignore:
Timestamp:
2020-05-14T21:46:00+02:00 (4 years ago)
Author:
smueller
Message:

Synchronizing with /NEMO/trunk@12925 (ticket #2170)

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  
        66^/vendors/FCM@HEAD            ext/FCM 
        77^/vendors/IOIPSL@HEAD         ext/IOIPSL 
         8 
         9# SETTE 
         10^/utils/CI/sette@HEAD         sette 
  • NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser/src/OCE/SBC/geo2ocean.F90

    r10425 r12928  
    4343 
    4444   !! * Substitutions 
    45 #  include "vectopt_loop_substitute.h90" 
     45#  include "do_loop_substitute.h90" 
    4646   !!---------------------------------------------------------------------- 
    4747   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    160160      ! (computation done on the north stereographic polar plane) 
    161161      ! 
    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 
    248246 
    249247      ! =============== ! 
     
    251249      ! =============== ! 
    252250 
    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 
    273269 
    274270      ! =========================== ! 
Note: See TracChangeset for help on using the changeset viewer.