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 15248 – NEMO

Changeset 15248


Ignore:
Timestamp:
2021-09-10T16:38:02+02:00 (3 years ago)
Author:
dford
Message:

Implement remaining bug fixes from v3.6 branch.

Location:
NEMO/branches/UKMO/NEMO_4.0.4_generic_obs/src/OCE
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/UKMO/NEMO_4.0.4_generic_obs/src/OCE/DYN/dynspg_ts.F90

    r14075 r15248  
    5151   USE agrif_oce 
    5252#endif 
    53 #if defined key_asminc    
    54    USE asminc          ! Assimilation increment 
    55 #endif 
     53! REMOVING THIS AS PER V3.6, BUT IS THIS THE BEST BRANCH TO DO IT IN? 
     54!#if defined key_asminc    
     55!   USE asminc          ! Assimilation increment 
     56!#endif 
    5657   ! 
    5758   USE in_out_manager  ! I/O manager 
     
    341342      ENDIF 
    342343      ! 
    343 #if defined key_asminc 
    344       !                                   !=  Add the IAU weighted SSH increment  =! 
    345       !                                   !  ------------------------------------  ! 
    346       IF( lk_asminc .AND. ln_sshinc .AND. ln_asmiau ) THEN 
    347          zssh_frc(:,:) = zssh_frc(:,:) - ssh_iau(:,:) 
    348       ENDIF 
    349 #endif 
     344! REMOVING THIS AS PER V3.6, BUT IS THIS THE BEST BRANCH TO DO IT IN? 
     345!#if defined key_asminc 
     346!      !                                   !=  Add the IAU weighted SSH increment  =! 
     347!      !                                   !  ------------------------------------  ! 
     348!      IF( lk_asminc .AND. ln_sshinc .AND. ln_asmiau ) THEN 
     349!         zssh_frc(:,:) = zssh_frc(:,:) - ssh_iau(:,:) 
     350!      ENDIF 
     351!#endif 
    350352      !                                   != Fill boundary data arrays for AGRIF 
    351353      !                                   ! ------------------------------------ 
  • NEMO/branches/UKMO/NEMO_4.0.4_generic_obs/src/OCE/OBS/obs_level_search.h90

    r14075 r15248  
    1313      !! ** Method  : Straightforward search 
    1414      !! 
    15       !! ** Action  :  
     15      !! ** Action  : Will return level associated with T-point below the obs 
     16      !!              depth, except when observation is in the top box will  
     17      !!              return level 2. Also, if obs depth greater than depth  
     18      !!              of last wet T-point (kpk-1) will return level kpk. 
    1619      !! 
    1720      !! History : 
     
    4346      DO ji = 1, kobs  
    4447         kobsk(ji) = 1 
    45          depk: DO jk = 2, kgrd 
     48         depk: DO jk = 2, kgrd-1 
    4649            IF ( pgrddep(jk) >= pobsdep(ji) ) EXIT depk 
    4750         END DO depk 
  • NEMO/branches/UKMO/NEMO_4.0.4_generic_obs/src/OCE/OBS/obs_oper.F90

    r15246 r15248  
    760760         & zmask(imaxifp,imaxjfp,isurf), & 
    761761         & zsurf(imaxifp,imaxjfp,isurf), & 
    762          & zsurftmp(imaxifp,imaxjfp,isurf),  & 
    763          & zglamf(imaxifp+1,imaxjfp+1,isurf), & 
    764          & zgphif(imaxifp+1,imaxjfp+1,isurf), & 
    765          & igrdip1(imaxifp+1,imaxjfp+1,isurf), & 
    766          & igrdjp1(imaxifp+1,imaxjfp+1,isurf) & 
     762         & zsurftmp(imaxifp,imaxjfp,isurf) & 
    767763         & ) 
     764 
     765      IF ( k2dint > 4 ) THEN 
     766         ALLOCATE( & 
     767            & zglamf(imaxifp+1,imaxjfp+1,isurf),  & 
     768            & zgphif(imaxifp+1,imaxjfp+1,isurf),  & 
     769            & igrdip1(imaxifp+1,imaxjfp+1,isurf), & 
     770            & igrdjp1(imaxifp+1,imaxjfp+1,isurf)  & 
     771            & ) 
     772      ENDIF 
    768773 
    769774      IF ( ldclim ) THEN 
     
    787792               IF ( imodj > jpjglo ) imodj = jpjglo 
    788793               ! 
    789                igrdip1(ji+1,jj+1,iobs) = imodi 
    790                igrdjp1(ji+1,jj+1,iobs) = imodj 
     794               IF ( k2dint > 4 ) THEN 
     795                  igrdip1(ji+1,jj+1,iobs) = imodi 
     796                  igrdjp1(ji+1,jj+1,iobs) = imodj 
     797               ENDIF 
    791798               ! 
    792799               IF ( ji >= 1 .AND. jj >= 1 ) THEN 
     
    819826      ENDIF 
    820827 
    821       CALL obs_int_comm_2d( imaxifp+1, imaxjfp+1, isurf, kpi, kpj, & 
    822          &                  igrdip1, igrdjp1, glamf, zglamf ) 
    823       CALL obs_int_comm_2d( imaxifp+1, imaxjfp+1, isurf, kpi, kpj, & 
    824          &                  igrdip1, igrdjp1, gphif, zgphif ) 
     828      IF ( k2dint > 4 ) THEN  
     829         CALL obs_int_comm_2d( imaxifp+1, imaxjfp+1, isurf, kpi, kpj, & 
     830            &                  igrdip1, igrdjp1, glamf, zglamf ) 
     831         CALL obs_int_comm_2d( imaxifp+1, imaxjfp+1, isurf, kpi, kpj, & 
     832            &                  igrdip1, igrdjp1, gphif, zgphif ) 
     833      ENDIF 
    825834       
    826835      IF ( ldclim ) THEN 
     
    955964         & zmask, & 
    956965         & zsurf, & 
    957          & zsurftmp, & 
    958          & zglamf, & 
    959          & zgphif, & 
    960          & igrdip1,& 
    961          & igrdjp1 & 
     966         & zsurftmp & 
    962967         & ) 
     968 
     969      IF ( k2dint > 4 ) THEN 
     970         DEALLOCATE( &      
     971            & zglamf, & 
     972            & zgphif, & 
     973            & igrdip1,& 
     974            & igrdjp1 & 
     975            & ) 
     976      ENDIF 
    963977             
    964978      IF ( ldclim ) THEN 
  • NEMO/branches/UKMO/NEMO_4.0.4_generic_obs/src/OCE/OBS/obs_prep.F90

    r15228 r15248  
    11201120         & gdept_n,       & 
    11211121         & ln_zco,        & 
    1122          & ln_zps              
    1123  
     1122         & ln_zps,        & 
     1123         & mbkt 
     1124! I THINK MBKT IS CORRECT (V3.6 WAS MBATHY) BUT CONFIRM 
    11241125      !! * Arguments 
    11251126      INTEGER, INTENT(IN) :: kprofno      ! Number of profiles 
     
    11661167      REAL(KIND=wp), DIMENSION(jpi,jpj) :: zbdymask 
    11671168      REAL(KIND=wp), DIMENSION(2,2,kpk,kprofno) :: & 
     1169         & zgdept, & 
    11681170         & zgdepw 
    11691171      REAL(KIND=wp), DIMENSION(2,2,kprofno) :: & 
    11701172         & zglam, &           ! Model longitude at grid points 
    1171          & zgphi              ! Model latitude at grid points 
     1173         & zgphi, &           ! Model latitude at grid points 
     1174         & zbathy             ! Index of deepest wet level at grid points 
    11721175      INTEGER, DIMENSION(2,2,kprofno) :: & 
    11731176         & igrdi, &           ! Grid i,j 
     
    11771180      INTEGER :: iig, ijg           ! i,j of observation on model grid point. 
    11781181      INTEGER :: jobs, jobsp, jk, ji, jj 
     1182      REAL(KIND=wp) :: maxdept, maxdepw 
    11791183      !!---------------------------------------------------------------------- 
    11801184 
     
    12281232      CALL obs_int_comm_2d( 2, 2, kprofno, kpi, kpj, igrdi, igrdj, plam, zglam ) 
    12291233      CALL obs_int_comm_2d( 2, 2, kprofno, kpi, kpj, igrdi, igrdj, pphi, zgphi ) 
     1234      CALL obs_int_comm_2d( 2, 2, kprofno, kpi, kpj, igrdi, igrdj, REAL(mbkt), zbathy ) 
     1235      ! Need to know the bathy depth for each observation for sco 
    12301236      CALL obs_int_comm_3d( 2, 2, kprofno, kpi, kpj, kpk, igrdi, igrdj, gdepw_n(:,:,:), & 
    1231         &                     zgdepw ) 
     1237        &                   zgdepw ) 
     1238      CALL obs_int_comm_3d( 2, 2, kprofno, kpi, kpj, kpk, igrdi, igrdj, gdept_n(:,:,:), & 
     1239         &                  zgdept ) 
    12321240 
    12331241      DO jobs = 1, kprofno 
     
    12651273         DO jobsp = kpstart(jobs), kpend(jobs) 
    12661274 
     1275            ! Calculate max T and W depths of 2x2 grid 
     1276            maxdept=zgdept(1,1,NINT(zbathy(1,1,jobs)),jobs) 
     1277            maxdepw=zgdepw(1,1,NINT(zbathy(1,1,jobs))+1,jobs) 
     1278            DO jj = 1, 2 
     1279               DO ji = 1, 2 
     1280                  IF ( zgdept(ji,jj,NINT(zbathy(ji,jj,jobs)),jobs) > maxdept ) THEN 
     1281                     maxdept = zgdept(ji,jj,NINT(zbathy(ji,jj,jobs)),jobs) 
     1282                  END IF 
     1283                  IF ( zgdepw(ji,jj,NINT(zbathy(ji,jj,jobs))+1,jobs) > maxdepw ) THEN 
     1284                     maxdepw = zgdepw(ji,jj,NINT(zbathy(ji,jj,jobs))+1,jobs) 
     1285                  END IF 
     1286               END DO 
     1287            END DO 
     1288 
    12671289            ! Flag if the observation falls outside the model spatial domain 
    1268             IF (       ( pobslam(jobs) < -180.         )       & 
    1269                &  .OR. ( pobslam(jobs) >  180.         )       & 
    1270                &  .OR. ( pobsphi(jobs) <  -90.         )       & 
    1271                &  .OR. ( pobsphi(jobs) >   90.         )       & 
    1272                &  .OR. ( pobsdep(jobsp) < 0.0          )       & 
    1273                &  .OR. ( pobsdep(jobsp) > gdepw_1d(kpk)) ) THEN 
     1290            IF (       ( pobslam(jobs) < -180.    )       & 
     1291               &  .OR. ( pobslam(jobs) >  180.    )       & 
     1292               &  .OR. ( pobsphi(jobs) <  -90.    )       & 
     1293               &  .OR. ( pobsphi(jobs) >   90.    )       & 
     1294               &  .OR. ( pobsdep(jobsp) < 0.0     )       & 
     1295               &  .OR. ( pobsdep(jobsp) > maxdepw ) ) THEN 
    12741296               kobsqc(jobsp) = IBSET(kobsqc(jobsp),11) 
    12751297               kosdobs = kosdobs + 1 
     
    13171339 
    13181340            ! Set observation depth equal to that of the first model depth 
    1319             IF ( pobsdep(jobsp) <= pdep(1) ) THEN 
    1320                pobsdep(jobsp) = pdep(1)   
    1321             ENDIF 
     1341            IF ( pobsdep(jobsp) < MINVAL(zgdept(1:2,1:2,1,jobs) ) ) THEN 
     1342               pobsdep(jobsp) = MINVAL(zgdept(1:2,1:2,1,jobs)) 
     1343            ENDIF 
     1344 
     1345            ! Set observation depth equal to that of the last wet T-point 
     1346            IF ( ( pobsdep(jobsp) > maxdept ) .AND. & 
     1347               & ( pobsdep(jobsp) < maxdepw ) ) THEN 
     1348               pobsdep(jobsp) = maxdept 
     1349            END IF 
    13221350             
    13231351            IF (ln_bdy) THEN 
Note: See TracChangeset for help on using the changeset viewer.