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 13463 for NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/DOM/dtatsd.F90 – NEMO

Ignore:
Timestamp:
2020-09-14T17:40:34+02:00 (4 years ago)
Author:
andmirek
Message:

Ticket #2195:update to trunk 13461

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  
        33^/utils/build/mk@HEAD         mk 
        44^/utils/tools@HEAD            tools 
        5 ^/vendors/AGRIF/dev@HEAD      ext/AGRIF 
         5^/vendors/AGRIF/dev_r12970_AGRIF_CMEMS      ext/AGRIF 
        66^/vendors/FCM@HEAD            ext/FCM 
        77^/vendors/IOIPSL@HEAD         ext/IOIPSL 
         8 
         9# SETTE 
         10^/utils/CI/sette@13382        sette 
  • NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/DOM/dtatsd.F90

    r11482 r13463  
    4040   CHARACTER(lc), PUBLIC                ::   cinit_context    !: context name used in xios 
    4141 
     42   !! * Substitutions 
     43#  include "do_loop_substitute.h90" 
    4244   !!---------------------------------------------------------------------- 
    4345   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    7072      ierr0 = 0  ;  ierr1 = 0  ;  ierr2 = 0  ;  ierr3 = 0 
    7173      ! 
    72       REWIND( numnam_ref )              ! Namelist namtsd in reference namelist :  
    7374      READ  ( numnam_ref, namtsd, IOSTAT = ios, ERR = 901) 
    74 901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namtsd in reference namelist', lwp ) 
    75       REWIND( numnam_cfg )              ! Namelist namtsd in configuration namelist : Parameters of the run 
     75901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namtsd in reference namelist' ) 
    7676      READ  ( numnam_cfg, namtsd, IOSTAT = ios, ERR = 902 ) 
    77 902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namtsd in configuration namelist', lwp ) 
     77902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namtsd in configuration namelist' ) 
    7878      IF(lwm) WRITE ( numond, namtsd ) 
    7979 
     
    166166         IF( nn_cfg == 2 .AND. ln_tsd_dmp ) THEN    ! some hand made alterations 
    167167            ! 
    168             ij0 = 101   ;   ij1 = 109                       ! Reduced T & S in the Alboran Sea 
    169             ii0 = 141   ;   ii1 = 155 
     168            ij0 = 101 + nn_hls       ;   ij1 = 109 + nn_hls                       ! Reduced T & S in the Alboran Sea 
     169            ii0 = 141 + nn_hls - 1   ;   ii1 = 155 + nn_hls - 1 
    170170            DO jj = mj0(ij0), mj1(ij1) 
    171171               DO ji = mi0(ii0), mi1(ii1) 
     
    180180               END DO 
    181181            END DO 
    182             ij0 =  87   ;   ij1 =  96                          ! Reduced temperature in Red Sea 
    183             ii0 = 148   ;   ii1 = 160 
     182            ij0 =  87 + nn_hls       ;   ij1 =  96 + nn_hls                       ! Reduced temperature in Red Sea 
     183            ii0 = 148 + nn_hls - 1   ;   ii1 = 160 + nn_hls - 1 
    184184            sf_tsd(jp_tem)%fnow( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ,  4:10 ) = 7.0_wp 
    185185            sf_tsd(jp_tem)%fnow( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 11:13 ) = 6.5_wp 
     
    199199         ENDIF 
    200200         ! 
    201          DO jj = 1, jpj                         ! vertical interpolation of T & S 
    202             DO ji = 1, jpi 
    203                DO jk = 1, jpk                        ! determines the intepolated T-S profiles at each (i,j) points 
    204                   zl = gdept_0(ji,jj,jk) 
    205                   IF(     zl < gdept_1d(1  ) ) THEN          ! above the first level of data 
    206                      ztp(jk) =  ptsd(ji,jj,1    ,jp_tem) 
    207                      zsp(jk) =  ptsd(ji,jj,1    ,jp_sal) 
    208                   ELSEIF( zl > gdept_1d(jpk) ) THEN          ! below the last level of data 
    209                      ztp(jk) =  ptsd(ji,jj,jpkm1,jp_tem) 
    210                      zsp(jk) =  ptsd(ji,jj,jpkm1,jp_sal) 
    211                   ELSE                                      ! inbetween : vertical interpolation between jkk & jkk+1 
    212                      DO jkk = 1, jpkm1                                  ! when  gdept(jkk) < zl < gdept(jkk+1) 
    213                         IF( (zl-gdept_1d(jkk)) * (zl-gdept_1d(jkk+1)) <= 0._wp ) THEN 
    214                            zi = ( zl - gdept_1d(jkk) ) / (gdept_1d(jkk+1)-gdept_1d(jkk)) 
    215                            ztp(jk) = ptsd(ji,jj,jkk,jp_tem) + ( ptsd(ji,jj,jkk+1,jp_tem) - ptsd(ji,jj,jkk,jp_tem) ) * zi  
    216                            zsp(jk) = ptsd(ji,jj,jkk,jp_sal) + ( ptsd(ji,jj,jkk+1,jp_sal) - ptsd(ji,jj,jkk,jp_sal) ) * zi 
    217                         ENDIF 
    218                      END DO 
    219                   ENDIF 
    220                END DO 
    221                DO jk = 1, jpkm1 
    222                   ptsd(ji,jj,jk,jp_tem) = ztp(jk) * tmask(ji,jj,jk)     ! mask required for mixed zps-s-coord 
    223                   ptsd(ji,jj,jk,jp_sal) = zsp(jk) * tmask(ji,jj,jk) 
    224                END DO 
    225                ptsd(ji,jj,jpk,jp_tem) = 0._wp 
    226                ptsd(ji,jj,jpk,jp_sal) = 0._wp 
     201         DO_2D( 1, 1, 1, 1 ) 
     202            DO jk = 1, jpk                        ! determines the intepolated T-S profiles at each (i,j) points 
     203               zl = gdept_0(ji,jj,jk) 
     204               IF(     zl < gdept_1d(1  ) ) THEN          ! above the first level of data 
     205                  ztp(jk) =  ptsd(ji,jj,1    ,jp_tem) 
     206                  zsp(jk) =  ptsd(ji,jj,1    ,jp_sal) 
     207               ELSEIF( zl > gdept_1d(jpk) ) THEN          ! below the last level of data 
     208                  ztp(jk) =  ptsd(ji,jj,jpkm1,jp_tem) 
     209                  zsp(jk) =  ptsd(ji,jj,jpkm1,jp_sal) 
     210               ELSE                                      ! inbetween : vertical interpolation between jkk & jkk+1 
     211                  DO jkk = 1, jpkm1                                  ! when  gdept(jkk) < zl < gdept(jkk+1) 
     212                     IF( (zl-gdept_1d(jkk)) * (zl-gdept_1d(jkk+1)) <= 0._wp ) THEN 
     213                        zi = ( zl - gdept_1d(jkk) ) / (gdept_1d(jkk+1)-gdept_1d(jkk)) 
     214                        ztp(jk) = ptsd(ji,jj,jkk,jp_tem) + ( ptsd(ji,jj,jkk+1,jp_tem) - ptsd(ji,jj,jkk,jp_tem) ) * zi  
     215                        zsp(jk) = ptsd(ji,jj,jkk,jp_sal) + ( ptsd(ji,jj,jkk+1,jp_sal) - ptsd(ji,jj,jkk,jp_sal) ) * zi 
     216                     ENDIF 
     217                  END DO 
     218               ENDIF 
    227219            END DO 
    228          END DO 
     220            DO jk = 1, jpkm1 
     221               ptsd(ji,jj,jk,jp_tem) = ztp(jk) * tmask(ji,jj,jk)     ! mask required for mixed zps-s-coord 
     222               ptsd(ji,jj,jk,jp_sal) = zsp(jk) * tmask(ji,jj,jk) 
     223            END DO 
     224            ptsd(ji,jj,jpk,jp_tem) = 0._wp 
     225            ptsd(ji,jj,jpk,jp_sal) = 0._wp 
     226         END_2D 
    229227         !  
    230228      ELSE                                !==   z- or zps- coordinate   ==! 
     
    234232         ! 
    235233         IF( ln_zps ) THEN                      ! zps-coordinate (partial steps) interpolation at the last ocean level 
    236             DO jj = 1, jpj 
    237                DO ji = 1, jpi 
    238                   ik = mbkt(ji,jj)  
    239                   IF( ik > 1 ) THEN 
    240                      zl = ( gdept_1d(ik) - gdept_0(ji,jj,ik) ) / ( gdept_1d(ik) - gdept_1d(ik-1) ) 
    241                      ptsd(ji,jj,ik,jp_tem) = (1.-zl) * ptsd(ji,jj,ik,jp_tem) + zl * ptsd(ji,jj,ik-1,jp_tem) 
    242                      ptsd(ji,jj,ik,jp_sal) = (1.-zl) * ptsd(ji,jj,ik,jp_sal) + zl * ptsd(ji,jj,ik-1,jp_sal) 
    243                   ENDIF 
    244                   ik = mikt(ji,jj) 
    245                   IF( ik > 1 ) THEN 
    246                      zl = ( gdept_0(ji,jj,ik) - gdept_1d(ik) ) / ( gdept_1d(ik+1) - gdept_1d(ik) )  
    247                      ptsd(ji,jj,ik,jp_tem) = (1.-zl) * ptsd(ji,jj,ik,jp_tem) + zl * ptsd(ji,jj,ik+1,jp_tem) 
    248                      ptsd(ji,jj,ik,jp_sal) = (1.-zl) * ptsd(ji,jj,ik,jp_sal) + zl * ptsd(ji,jj,ik+1,jp_sal) 
    249                   END IF 
    250                END DO 
    251             END DO 
     234            DO_2D( 1, 1, 1, 1 ) 
     235               ik = mbkt(ji,jj)  
     236               IF( ik > 1 ) THEN 
     237                  zl = ( gdept_1d(ik) - gdept_0(ji,jj,ik) ) / ( gdept_1d(ik) - gdept_1d(ik-1) ) 
     238                  ptsd(ji,jj,ik,jp_tem) = (1.-zl) * ptsd(ji,jj,ik,jp_tem) + zl * ptsd(ji,jj,ik-1,jp_tem) 
     239                  ptsd(ji,jj,ik,jp_sal) = (1.-zl) * ptsd(ji,jj,ik,jp_sal) + zl * ptsd(ji,jj,ik-1,jp_sal) 
     240               ENDIF 
     241               ik = mikt(ji,jj) 
     242               IF( ik > 1 ) THEN 
     243                  zl = ( gdept_0(ji,jj,ik) - gdept_1d(ik) ) / ( gdept_1d(ik+1) - gdept_1d(ik) )  
     244                  ptsd(ji,jj,ik,jp_tem) = (1.-zl) * ptsd(ji,jj,ik,jp_tem) + zl * ptsd(ji,jj,ik+1,jp_tem) 
     245                  ptsd(ji,jj,ik,jp_sal) = (1.-zl) * ptsd(ji,jj,ik,jp_sal) + zl * ptsd(ji,jj,ik+1,jp_sal) 
     246               END IF 
     247            END_2D 
    252248         ENDIF 
    253249         ! 
Note: See TracChangeset for help on using the changeset viewer.