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 12377 for NEMO/trunk/src/OCE/SBC/cyclone.F90 – NEMO

Ignore:
Timestamp:
2020-02-12T15:39:06+01:00 (4 years ago)
Author:
acc
Message:

The big one. Merging all 2019 developments from the option 1 branch back onto the trunk.

This changeset reproduces 2019/dev_r11943_MERGE_2019 on the trunk using a 2-URL merge
onto a working copy of the trunk. I.e.:

svn merge --ignore-ancestry \

svn+ssh://acc@forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/NEMO/trunk \
svn+ssh://acc@forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/NEMO/branches/2019/dev_r11943_MERGE_2019 ./

The --ignore-ancestry flag avoids problems that may otherwise arise from the fact that
the merge history been trunk and branch may have been applied in a different order but
care has been taken before this step to ensure that all applicable fixes and updates
are present in the merge branch.

The trunk state just before this step has been branched to releases/release-4.0-HEAD
and that branch has been immediately tagged as releases/release-4.0.2. Any fixes
or additions in response to tickets on 4.0, 4.0.1 or 4.0.2 should be done on
releases/release-4.0-HEAD. From now on future 'point' releases (e.g. 4.0.2) will
remain unchanged with periodic releases as needs demand. Note release-4.0-HEAD is a
transitional naming convention. Future full releases, say 4.2, will have a release-4.2
branch which fulfills this role and the first point release (e.g. 4.2.0) will be made
immediately following the release branch creation.

2020 developments can be started from any trunk revision later than this one.

Location:
NEMO/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/trunk

    • Property svn:externals
      •  

        old new  
        33^/utils/build/mk@HEAD         mk 
        44^/utils/tools@HEAD            tools 
        5 ^/vendors/AGRIF/dev@HEAD      ext/AGRIF 
         5^/vendors/AGRIF/dev_r11615_ENHANCE-04_namelists_as_internalfiles_agrif@HEAD      ext/AGRIF 
        66^/vendors/FCM@HEAD            ext/FCM 
        77^/vendors/IOIPSL@HEAD         ext/IOIPSL 
  • NEMO/trunk/src/OCE/SBC/cyclone.F90

    r10068 r12377  
    3737 
    3838   !! * Substitutions 
    39 #  include "vectopt_loop_substitute.h90" 
     39#  include "do_loop_substitute.h90" 
    4040   !!---------------------------------------------------------------------- 
    4141   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    137137            zhemi = SIGN( 1. , zrlat ) 
    138138            zinfl = 15.* rad                             ! clim inflow angle in Tropical Cyclones 
    139          IF ( vortex == 0 ) THEN 
     139         IF( vortex == 0 ) THEN 
    140140 
    141141            ! Vortex Holland reconstruct wind at each lon-lat position 
     
    147147            zb = 2. 
    148148 
    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_11_11 
     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 
    197195          
    198          ELSE IF ( vortex == 1 ) THEN 
     196         ELSE IF( vortex == 1 ) THEN 
    199197 
    200198            ! Vortex Willoughby reconstruct wind at each lon-lat position 
     
    206204            zn   =   2.1340 + 0.0077*zvmax - 0.4522*LOG(zrmw/1000.) - 0.0038*ABS( ztct(jtc,jp_lat) )             
    207205            zA   =   0.5913 + 0.0029*zvmax - 0.1361*LOG(zrmw/1000.) - 0.0042*ABS( ztct(jtc,jp_lat) )   
    208             IF (zA < 0) THEN  
     206            IF(zA < 0) THEN  
    209207               zA=0 
    210208            ENDIF            
    211209         
    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_11_11 
     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               ! ------------------------------------------------------------------- 
    221248                
    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 
    263259         ENDIF                                         ! / vortex Holland or Wiloughby 
    264260         ENDIF                                           ! / cyclone is defined in this slot ? yes--> begin 
Note: See TracChangeset for help on using the changeset viewer.