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

Changeset 6016


Ignore:
Timestamp:
2015-12-07T17:42:57+01:00 (8 years ago)
Author:
kingr
Message:

#1642 bug fixes for general vertical coord obsoper

Location:
branches/UKMO/dev_r4650_general_vert_coord_obsoper/NEMOGCM/NEMO/OPA_SRC/OBS
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r4650_general_vert_coord_obsoper/NEMOGCM/NEMO/OPA_SRC/OBS/diaobs.F90

    r5838 r6016  
    10631063      IF ( ln_t3d .OR. ln_s3d ) THEN 
    10641064         DO jprofset = 1, nprofsets 
    1065             IF( ln_zco .OR. ln_zps ) THEN  
     1065            IF( (.NOT. lk_vvl) .AND. (ln_zco .OR. ln_zps) ) THEN  
     1066               IF(lwp) THEN 
     1067                  WRITE(numout,*) 'dia_obs : calling obs_pro_opt' 
     1068               ENDIF 
    10661069               IF ( ld_enact(jprofset) ) THEN  
    10671070                  CALL obs_pro_opt( prodatqc(jprofset),                     &  
     
    10771080               ENDIF  
    10781081            ELSE 
     1082               IF(lwp) THEN 
     1083                  WRITE(numout,*) 'dia_obs : calling obs_pro_sco_opt' 
     1084               ENDIF 
    10791085               IF ( ld_enact(jprofset) ) THEN  
    10801086                  CALL obs_pro_sco_opt( prodatqc(jprofset),                 &  
    10811087                     &              kstp, jpi, jpj, jpk, nit000, idaystp,   &  
    10821088                     &              tsn(:,:,:,jp_tem), tsn(:,:,:,jp_sal),   &  
    1083                      &              fsdept(:,:,:), tmask, n1dint, n2dint,   &  
     1089                     &              fsdept(:,:,:), fsdepw(:,:,:),           &  
     1090                     &              tmask, n1dint, n2dint,                  &  
    10841091                     &              kdailyavtypes = endailyavtypes )  
    10851092               ELSE  
     
    10871094                     &              kstp, jpi, jpj, jpk, nit000, idaystp,   &  
    10881095                     &              tsn(:,:,:,jp_tem), tsn(:,:,:,jp_sal),   &  
    1089                      &              fsdept(:,:,:), tmask, n1dint, n2dint )  
     1096                     &              fsdept(:,:,:), fsdepw(:,:,:),           & 
     1097                     &              tmask, n1dint, n2dint )  
    10901098               ENDIF  
    10911099            ENDIF 
  • branches/UKMO/dev_r4650_general_vert_coord_obsoper/NEMOGCM/NEMO/OPA_SRC/OBS/obs_oper.F90

    r5838 r6016  
    464464 
    465465   SUBROUTINE obs_pro_sco_opt( prodatqc, kt, kpi, kpj, kpk, kit000, kdaystp, &  
    466       &                    ptn, psn, pgdept, ptmask, k1dint, k2dint, &  
     466      &                    ptn, psn, pgdept, pgdepw, ptmask, k1dint, k2dint, &  
    467467      &                    kdailyavtypes )  
    468468      !!-----------------------------------------------------------------------  
     
    547547         & psn,    &    ! Model salinity field  
    548548         & ptmask       ! Land-sea mask  
    549       REAL(KIND=wp), INTENT(IN), DIMENSION(kpi,jpj,kpk) :: &  
    550          & pgdept       ! Model array of depth levels  
     549      REAL(KIND=wp), INTENT(IN), DIMENSION(kpi,kpj,kpk) :: &  
     550         & pgdept, &       ! Model array of depth T levels  
     551         & pgdepw       ! Model array of depth W levels  
    551552      INTEGER, DIMENSION(imaxavtypes), OPTIONAL :: &  
    552553         & kdailyavtypes   ! Types for daily averages  
     
    682683      END DO  
    683684  
     685      ! Initiialise depth arrays 
     686      zgdept = 0.0 
     687      zgdepw = 0.0 
     688       
    684689      CALL obs_int_comm_2d( 2, 2, ipro, igrdi, igrdj, glamt, zglam )  
    685690      CALL obs_int_comm_2d( 2, 2, ipro, igrdi, igrdj, gphit, zgphi )  
     
    687692      CALL obs_int_comm_3d( 2, 2, ipro, kpk, igrdi, igrdj, ptn,   zintt )  
    688693      CALL obs_int_comm_3d( 2, 2, ipro, kpk, igrdi, igrdj, psn,   zints )  
    689       CALL obs_int_comm_3d( 2, 2, ipro, kpk, igrdi, igrdj, fsdept(:,:,:), &  
     694      CALL obs_int_comm_3d( 2, 2, ipro, kpk, igrdi, igrdj, pgdept(:,:,:), &  
    690695        &                     zgdept )  
    691       CALL obs_int_comm_3d( 2, 2, ipro, kpk, igrdi, igrdj, fsdepw(:,:,:), &  
     696      CALL obs_int_comm_3d( 2, 2, ipro, kpk, igrdi, igrdj, pgdepw(:,:,:), &  
    692697        &                     zgdepw )  
    693698  
     
    780785                           IF ( k1dint == 1 ) THEN  
    781786                              CALL obs_int_z1d_spl( kpk, &  
    782                                  &     zinmt(iin,ijn,:,jobs), &  
    783                                  &     zobs2k, zgdept(iin,ijn,:,jobs), &  
    784                                  &     zmask(iin,ijn,:,jobs))  
     787                                 &     zinmt(iin,ijn,:,iobs), &  
     788                                 &     zobs2k, zgdept(iin,ijn,:,iobs), &  
     789                                 &     zmask(iin,ijn,:,iobs))  
    785790                           ENDIF  
    786791        
    787792                           CALL obs_level_search(kpk, &  
    788                               &    zgdept(iin,ijn,:,jobs), &  
     793                              &    zgdept(iin,ijn,:,iobs), &  
    789794                              &    inum_obs, prodatqc%var(1)%vdep(ista:iend), &  
    790795                              &    iv_indic)  
    791796                           CALL obs_int_z1d(kpk, iv_indic, k1dint, inum_obs, &  
    792797                              &    prodatqc%var(1)%vdep(ista:iend), &  
    793                               &    zinmt(iin,ijn,:,jobs), &  
     798                              &    zinmt(iin,ijn,:,iobs), &  
    794799                              &    zobs2k, interp_corner(iin,ijn,:), &  
    795                               &    zgdept(iin,ijn,:,jobs), &  
    796                               &    zmask(iin,ijn,:,jobs))  
     800                              &    zgdept(iin,ijn,:,iobs), &  
     801                              &    zmask(iin,ijn,:,iobs))  
    797802        
    798803                        ENDDO  
     
    823828                        IF ( k1dint == 1 ) THEN  
    824829                           CALL obs_int_z1d_spl( kpk, &  
    825                               &    zintt(iin,ijn,:,jobs),&  
    826                               &    zobs2k, zgdept(iin,ijn,:,jobs), &  
    827                               &    zmask(iin,ijn,:,jobs))  
     830                              &    zintt(iin,ijn,:,iobs),&  
     831                              &    zobs2k, zgdept(iin,ijn,:,iobs), &  
     832                              &    zmask(iin,ijn,:,iobs))  
    828833   
    829834                        ENDIF  
    830835        
    831836                        CALL obs_level_search(kpk, &  
    832                             &        zgdept(iin,ijn,:,jobs),&  
     837                            &        zgdept(iin,ijn,:,iobs),&  
    833838                            &        inum_obs, prodatqc%var(1)%vdep(ista:iend), &  
    834839                            &         iv_indic)  
    835840                        CALL obs_int_z1d(kpk, iv_indic, k1dint, inum_obs,     &  
    836841                            &          prodatqc%var(1)%vdep(ista:iend),     &  
    837                             &          zintt(iin,ijn,:,jobs),            &  
     842                            &          zintt(iin,ijn,:,iobs),            &  
    838843                            &          zobs2k,interp_corner(iin,ijn,:), &  
    839                             &          zgdept(iin,ijn,:,jobs),         &  
    840                             &          zmask(iin,ijn,:,jobs) )       
     844                            &          zgdept(iin,ijn,:,iobs),         &  
     845                            &          zmask(iin,ijn,:,iobs) )       
    841846          
    842847                     ENDDO  
     
    850855              
    851856               DO ikn=1,inum_obs  
    852                   iend=ista+ikn-1  
     857                  iend=ista+ikn-1 
     858                   
     859                  l_zweig(:,:,1) = 0._wp  
    853860    
    854861                  ! This code forces the horizontal weights to be   
     
    861868      
    862869                        depth_loop1: DO ik=kpk,2,-1  
    863                            IF(zmask(iin,ijn,ik-1,jobs ) > 0.9 )THEN    
     870                           IF(zmask(iin,ijn,ik-1,iobs ) > 0.9 )THEN    
    864871                             
    865872                              l_zweig(iin,ijn,1) = &   
    866873                                 & zweig(iin,ijn,1) * &  
    867                                  & MAX( SIGN(1._wp,(zgdepw(iin,ijn,ik,jobs) ) &  
     874                                 & MAX( SIGN(1._wp,(zgdepw(iin,ijn,ik,iobs) ) &  
    868875                                 &  - prodatqc%var(1)%vdep(iend)),0._wp)  
    869876                             
     
    911918                           IF ( k1dint == 1 ) THEN  
    912919                              CALL obs_int_z1d_spl( kpk, &  
    913                                  &     zinms(iin,ijn,:,jobs), &  
    914                                  &     zobs2k, zgdept(iin,ijn,:,jobs), &  
    915                                  &     zmask(iin,ijn,:,jobs))  
     920                                 &     zinms(iin,ijn,:,iobs), &  
     921                                 &     zobs2k, zgdept(iin,ijn,:,iobs), &  
     922                                 &     zmask(iin,ijn,:,iobs))  
    916923                           ENDIF  
    917924        
    918925                           CALL obs_level_search(kpk, &  
    919                               &    zgdept(iin,ijn,:,jobs), &  
     926                              &    zgdept(iin,ijn,:,iobs), &  
    920927                              &    inum_obs, prodatqc%var(2)%vdep(ista:iend), &  
    921928                              &    iv_indic)  
    922929                           CALL obs_int_z1d(kpk, iv_indic, k1dint, inum_obs, &  
    923930                              &    prodatqc%var(2)%vdep(ista:iend), &  
    924                               &    zinms(iin,ijn,:,jobs), &  
     931                              &    zinms(iin,ijn,:,iobs), &  
    925932                              &    zobs2k, interp_corner(iin,ijn,:), &  
    926                               &    zgdept(iin,ijn,:,jobs), &  
    927                               &    zmask(iin,ijn,:,jobs))  
     933                              &    zgdept(iin,ijn,:,iobs), &  
     934                              &    zmask(iin,ijn,:,iobs))  
    928935        
    929936                        ENDDO  
     
    955962                        IF ( k1dint == 1 ) THEN  
    956963                           CALL obs_int_z1d_spl( kpk, &  
    957                               &    zints(iin,ijn,:,jobs),&  
    958                               &    zobs2k, zgdept(iin,ijn,:,jobs), &  
    959                               &    zmask(iin,ijn,:,jobs))  
     964                              &    zints(iin,ijn,:,iobs),&  
     965                              &    zobs2k, zgdept(iin,ijn,:,iobs), &  
     966                              &    zmask(iin,ijn,:,iobs))  
    960967   
    961968                        ENDIF  
    962969        
    963970                        CALL obs_level_search(kpk, &  
    964                            &        zgdept(iin,ijn,:,jobs),&  
     971                           &        zgdept(iin,ijn,:,iobs),&  
    965972                           &        inum_obs, prodatqc%var(2)%vdep(ista:iend), &  
    966973                           &         iv_indic)  
    967974                        CALL obs_int_z1d(kpk, iv_indic, k1dint, inum_obs,  &  
    968975                           &          prodatqc%var(2)%vdep(ista:iend),     &  
    969                            &          zints(iin,ijn,:,jobs),               &  
     976                           &          zints(iin,ijn,:,iobs),               &  
    970977                           &          zobs2k,interp_corner(iin,ijn,:),     &  
    971                            &          zgdept(iin,ijn,:,jobs),              &  
    972                            &          zmask(iin,ijn,:,jobs) )       
     978                           &          zgdept(iin,ijn,:,iobs),              &  
     979                           &          zmask(iin,ijn,:,iobs) )       
    973980          
    974981                     ENDDO  
     
    982989              
    983990               DO ikn=1,inum_obs  
    984                   iend=ista+ikn-1  
     991                  iend=ista+ikn-1 
     992                   
     993                  l_zweig(:,:,1) = 0._wp  
    985994    
    986995                  ! This code forces the horizontal weights to be   
     
    9931002      
    9941003                        depth_loop2: DO ik=kpk,2,-1  
    995                            IF(zmask(iin,ijn,ik-1,jobs ) > 0.9 )THEN    
     1004                           IF(zmask(iin,ijn,ik-1,iobs ) > 0.9 )THEN    
    9961005                             
    9971006                              l_zweig(iin,ijn,1) = &   
    9981007                                 &  zweig(iin,ijn,1) * &  
    999                                  &  MAX( SIGN(1._wp,(zgdepw(iin,ijn,ik,jobs) ) &  
     1008                                 &  MAX( SIGN(1._wp,(zgdepw(iin,ijn,ik,iobs) ) &  
    10001009                                 &  - prodatqc%var(2)%vdep(iend)),0._wp)  
    10011010                             
     
    10291038         & zmask, &  
    10301039         & zintt, &  
    1031          & zints  &  
     1040         & zints, &  
     1041         & zgdept,&  
     1042         & zgdepw &  
    10321043         & )  
    10331044      ! At the end of the day also get interpolated means  
Note: See TracChangeset for help on using the changeset viewer.