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 9211 for branches/UKMO – NEMO

Changeset 9211 for branches/UKMO


Ignore:
Timestamp:
2018-01-11T16:43:41+01:00 (6 years ago)
Author:
dford
Message:

Change to loop over obs_prof_opt one variable at a time.

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

Legend:

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

    r9205 r9211  
    747747               &               kdailyavtypes = nn_profdavtypes ) 
    748748             
    749             ! Is allocating and deallocating repeatedly in a loop good practice? 
    750749            DEALLOCATE( llvar ) 
    751750            CALL wrk_dealloc( jpi, jpj,      nvarsprof(jtype), zglam ) 
     
    889888      INTEGER :: ji, jj            ! Loop counters 
    890889      REAL(wp) :: tiny             ! small number 
    891       REAL(wp), POINTER, DIMENSION(:,:,:) :: & 
    892          & zprofvar1, &            ! Model values for 1st variable in a prof ob 
    893          & zprofvar2               ! Model values for 2nd variable in a prof ob 
    894       REAL(wp), POINTER, DIMENSION(:,:,:) :: & 
    895          & zprofmask1, &           ! Mask associated with zprofvar1 
    896          & zprofmask2              ! Mask associated with zprofvar2 
     890      REAL(wp), POINTER, DIMENSION(:,:,:,:) :: & 
     891         & zprofvar                ! Model values for variables in a prof ob 
     892      REAL(wp), POINTER, DIMENSION(:,:,:,:) :: & 
     893         & zprofmask               ! Mask associated with zprofvar 
    897894      REAL(wp), POINTER, DIMENSION(:,:) :: & 
    898895         & zsurfvar, &             ! Model values equivalent to surface ob. 
    899896         & zsurfmask               ! Mask associated with surface variable 
    900       REAL(wp), POINTER, DIMENSION(:,:) :: & 
    901          & zglam1,    &            ! Model longitudes for prof variable 1 
    902          & zglam2,    &            ! Model longitudes for prof variable 2 
    903          & zgphi1,    &            ! Model latitudes for prof variable 1 
    904          & zgphi2                  ! Model latitudes for prof variable 2 
     897      REAL(wp), POINTER, DIMENSION(:,:,:) :: & 
     898         & zglam,    &             ! Model longitudes for prof variables 
     899         & zgphi                   ! Model latitudes for prof variables 
    905900      LOGICAL :: llog10            ! Perform log10 transform of variable 
    906901 
    907  
    908       !Allocate local work arrays 
    909       CALL wrk_alloc( jpi, jpj, jpk, zprofvar1 ) 
    910       CALL wrk_alloc( jpi, jpj, jpk, zprofvar2 ) 
    911       CALL wrk_alloc( jpi, jpj, jpk, zprofmask1 ) 
    912       CALL wrk_alloc( jpi, jpj, jpk, zprofmask2 ) 
    913       CALL wrk_alloc( jpi, jpj, zsurfvar ) 
    914       CALL wrk_alloc( jpi, jpj, zsurfmask ) 
    915       CALL wrk_alloc( jpi, jpj, zglam1 ) 
    916       CALL wrk_alloc( jpi, jpj, zglam2 ) 
    917       CALL wrk_alloc( jpi, jpj, zgphi1 ) 
    918       CALL wrk_alloc( jpi, jpj, zgphi2 ) 
    919902 
    920903      IF(lwp) THEN 
     
    935918         DO jtype = 1, nproftypes 
    936919 
     920            ! Allocate local work arrays 
     921            CALL wrk_alloc( jpi, jpj, jpk, profdataqc(jtype)%nvar, zprofvar  ) 
     922            CALL wrk_alloc( jpi, jpj, jpk, profdataqc(jtype)%nvar, zprofmask ) 
     923            CALL wrk_alloc( jpi, jpj,      profdataqc(jtype)%nvar, zglam     ) 
     924            CALL wrk_alloc( jpi, jpj,      profdataqc(jtype)%nvar, zgphi     ) 
     925             
     926            ! Defaults which might change 
     927            DO jvar = 1, profdataqc(jtype)%nvar 
     928               zprofmask(:,:,:,jvar) = tmask(:,:,:) 
     929               zglam(:,:,jvar)       = glamt(:,:) 
     930               zgphi(:,:,jvar)       = gphit(:,:) 
     931            END DO 
     932 
    937933            SELECT CASE ( TRIM(cobstypesprof(jtype)) ) 
     934 
    938935            CASE('prof') 
    939                zprofvar1(:,:,:) = tsn(:,:,:,jp_tem) 
    940                zprofvar2(:,:,:) = tsn(:,:,:,jp_sal) 
    941                zprofmask1(:,:,:) = tmask(:,:,:) 
    942                zprofmask2(:,:,:) = tmask(:,:,:) 
    943                zglam1(:,:) = glamt(:,:) 
    944                zglam2(:,:) = glamt(:,:) 
    945                zgphi1(:,:) = gphit(:,:) 
    946                zgphi2(:,:) = gphit(:,:) 
     936               zprofvar(:,:,:,1) = tsn(:,:,:,jp_tem) 
     937               zprofvar(:,:,:,2) = tsn(:,:,:,jp_sal) 
     938 
    947939            CASE('vel') 
    948                zprofvar1(:,:,:) = un(:,:,:) 
    949                zprofvar2(:,:,:) = vn(:,:,:) 
    950                zprofmask1(:,:,:) = umask(:,:,:) 
    951                zprofmask2(:,:,:) = vmask(:,:,:) 
    952                zglam1(:,:) = glamu(:,:) 
    953                zglam2(:,:) = glamv(:,:) 
    954                zgphi1(:,:) = gphiu(:,:) 
    955                zgphi2(:,:) = gphiv(:,:) 
     940               zprofvar(:,:,:,1) = un(:,:,:) 
     941               zprofvar(:,:,:,2) = vn(:,:,:) 
     942               zprofmask(:,:,:,1) = umask(:,:,:) 
     943               zprofmask(:,:,:,2) = vmask(:,:,:) 
     944               zglam(:,:,1) = glamu(:,:) 
     945               zglam(:,:,2) = glamv(:,:) 
     946               zgphi(:,:,1) = gphiu(:,:) 
     947               zgphi(:,:,2) = gphiv(:,:) 
    956948 
    957949            CASE('plchltot') 
    958950#if defined key_hadocc 
    959951               ! Chlorophyll from HadOCC 
    960                zprofvar1(:,:,:) = HADOCC_CHL(:,:,:) 
     952               zprofvar(:,:,:,1) = HADOCC_CHL(:,:,:) 
    961953#elif defined key_medusa && defined key_foam_medusa 
    962954               ! Add non-diatom and diatom chlorophyll from MEDUSA 
    963                zprofvar1(:,:,:) = trn(:,:,:,jpchn) + trn(:,:,:,jpchd) 
     955               zprofvar(:,:,:,1) = trn(:,:,:,jpchn) + trn(:,:,:,jpchd) 
    964956#elif defined key_fabm 
    965957               ! Add all chlorophyll groups from ERSEM 
    966                zprofvar1(:,:,:) = trn(:,:,:,jp_fabm_chl1) + trn(:,:,:,jp_fabm_chl2) + & 
    967                   &               trn(:,:,:,jp_fabm_chl3) + trn(:,:,:,jp_fabm_chl4) 
     958               zprofvar(:,:,:,1) = trn(:,:,:,jp_fabm_chl1) + trn(:,:,:,jp_fabm_chl2) + & 
     959                  &                trn(:,:,:,jp_fabm_chl3) + trn(:,:,:,jp_fabm_chl4) 
    968960#else 
    969961               CALL ctl_stop( ' Trying to run plchltot observation operator', & 
    970962                  &           ' but no biogeochemical model appears to have been defined' ) 
    971963#endif 
    972                zprofmask1(:,:,:) = tmask(:,:,:) 
    973964               ! Take the log10 where we can, otherwise exclude 
    974965               tiny = 1.0e-20 
    975                WHERE(zprofvar1(:,:,:) > tiny .AND. zprofvar1(:,:,:) /= obfillflt ) 
    976                   zprofvar1(:,:,:)  = LOG10(zprofvar1(:,:,:)) 
     966               WHERE(zprofvar(:,:,:,:) > tiny .AND. zprofvar(:,:,:,:) /= obfillflt ) 
     967                  zprofvar(:,:,:,:)  = LOG10(zprofvar(:,:,:,:)) 
    977968               ELSEWHERE 
    978                   zprofvar1(:,:,:)  = obfillflt 
    979                   zprofmask1(:,:,:) = 0 
     969                  zprofvar(:,:,:,:)  = obfillflt 
     970                  zprofmask(:,:,:,:) = 0 
    980971               END WHERE 
    981                zglam1(:,:) = glamt(:,:) 
    982                zgphi1(:,:) = gphit(:,:) 
    983972 
    984973            CASE('pchltot') 
    985974#if defined key_hadocc 
    986975               ! Chlorophyll from HadOCC 
    987                zprofvar1(:,:,:) = HADOCC_CHL(:,:,:) 
     976               zprofvar(:,:,:,1) = HADOCC_CHL(:,:,:) 
    988977#elif defined key_medusa && defined key_foam_medusa 
    989978               ! Add non-diatom and diatom chlorophyll from MEDUSA 
    990                zprofvar1(:,:,:) = trn(:,:,:,jpchn) + trn(:,:,:,jpchd) 
     979               zprofvar(:,:,:,1) = trn(:,:,:,jpchn) + trn(:,:,:,jpchd) 
    991980#elif defined key_fabm 
    992981               ! Add all chlorophyll groups from ERSEM 
    993                zprofvar1(:,:,:) = trn(:,:,:,jp_fabm_chl1) + trn(:,:,:,jp_fabm_chl2) + & 
    994                   &               trn(:,:,:,jp_fabm_chl3) + trn(:,:,:,jp_fabm_chl4) 
     982               zprofvar(:,:,:,1) = trn(:,:,:,jp_fabm_chl1) + trn(:,:,:,jp_fabm_chl2) + & 
     983                  &                trn(:,:,:,jp_fabm_chl3) + trn(:,:,:,jp_fabm_chl4) 
    995984#else 
    996985               CALL ctl_stop( ' Trying to run pchltot observation operator', & 
    997986                  &           ' but no biogeochemical model appears to have been defined' ) 
    998987#endif 
    999                zprofmask1(:,:,:) = tmask(:,:,:) 
    1000                zglam1(:,:) = glamt(:,:) 
    1001                zgphi1(:,:) = gphit(:,:) 
    1002988 
    1003989            CASE('pno3') 
    1004990#if defined key_hadocc 
    1005991               ! Dissolved inorganic nitrogen from HadOCC 
    1006                zprofvar1(:,:,:) = trn(:,:,:,jp_had_nut) 
     992               zprofvar(:,:,:,1) = trn(:,:,:,jp_had_nut) 
    1007993#elif defined key_medusa && defined key_foam_medusa 
    1008994               ! Dissolved inorganic nitrogen from MEDUSA 
    1009                zprofvar1(:,:,:) = trn(:,:,:,jpdin) 
     995               zprofvar(:,:,:,1) = trn(:,:,:,jpdin) 
    1010996#elif defined key_fabm 
    1011997               ! Nitrate from ERSEM 
    1012                zprofvar1(:,:,:) = trn(:,:,:,jp_fabm_n3n) 
     998               zprofvar(:,:,:,1) = trn(:,:,:,jp_fabm_n3n) 
    1013999#else 
    10141000               CALL ctl_stop( ' Trying to run pno3 observation operator', & 
    10151001                  &           ' but no biogeochemical model appears to have been defined' ) 
    10161002#endif 
    1017                zprofmask1(:,:,:) = tmask(:,:,:) 
    1018                zglam1(:,:) = glamt(:,:) 
    1019                zgphi1(:,:) = gphit(:,:) 
    10201003 
    10211004            CASE('psi4') 
     
    10251008#elif defined key_medusa && defined key_foam_medusa 
    10261009               ! Silicate from MEDUSA 
    1027                zprofvar1(:,:,:) = trn(:,:,:,jpsil) 
     1010               zprofvar(:,:,:,1) = trn(:,:,:,jpsil) 
    10281011#elif defined key_fabm 
    10291012               ! Silicate from ERSEM 
    1030                zprofvar1(:,:,:) = trn(:,:,:,jp_fabm_n5s) 
     1013               zprofvar(:,:,:,1) = trn(:,:,:,jp_fabm_n5s) 
    10311014#else 
    10321015               CALL ctl_stop( ' Trying to run psi4 observation operator', & 
    10331016                  &           ' but no biogeochemical model appears to have been defined' ) 
    10341017#endif 
    1035                zprofmask1(:,:,:) = tmask(:,:,:) 
    1036                zglam1(:,:) = glamt(:,:) 
    1037                zgphi1(:,:) = gphit(:,:) 
    10381018 
    10391019            CASE('ppo4') 
     
    10461026#elif defined key_fabm 
    10471027               ! Phosphate from ERSEM 
    1048                zprofvar1(:,:,:) = trn(:,:,:,jp_fabm_n1p) 
     1028               zprofvar(:,:,:,1) = trn(:,:,:,jp_fabm_n1p) 
    10491029#else 
    10501030               CALL ctl_stop( ' Trying to run ppo4 observation operator', & 
    10511031                  &           ' but no biogeochemical model appears to have been defined' ) 
    10521032#endif 
    1053                zprofmask1(:,:,:) = tmask(:,:,:) 
    1054                zglam1(:,:) = glamt(:,:) 
    1055                zgphi1(:,:) = gphit(:,:) 
    10561033 
    10571034            CASE('pdic') 
    10581035#if defined key_hadocc 
    10591036               ! Dissolved inorganic carbon from HadOCC 
    1060                zprofvar1(:,:,:) = trn(:,:,:,jp_had_dic) 
     1037               zprofvar(:,:,:,1) = trn(:,:,:,jp_had_dic) 
    10611038#elif defined key_medusa && defined key_foam_medusa 
    10621039               ! Dissolved inorganic carbon from MEDUSA 
    1063                zprofvar1(:,:,:) = trn(:,:,:,jpdic) 
     1040               zprofvar(:,:,:,1) = trn(:,:,:,jpdic) 
    10641041#elif defined key_fabm 
    10651042               ! Dissolved inorganic carbon from ERSEM 
    1066                zprofvar1(:,:,:) = trn(:,:,:,jp_fabm_o3c) 
     1043               zprofvar(:,:,:,1) = trn(:,:,:,jp_fabm_o3c) 
    10671044#else 
    10681045               CALL ctl_stop( ' Trying to run pdic observation operator', & 
    10691046                  &           ' but no biogeochemical model appears to have been defined' ) 
    10701047#endif 
    1071                zprofmask1(:,:,:) = tmask(:,:,:) 
    1072                zglam1(:,:) = glamt(:,:) 
    1073                zgphi1(:,:) = gphit(:,:) 
    10741048 
    10751049            CASE('palk') 
    10761050#if defined key_hadocc 
    10771051               ! Alkalinity from HadOCC 
    1078                zprofvar1(:,:,:) = trn(:,:,:,jp_had_alk) 
     1052               zprofvar(:,:,:,1) = trn(:,:,:,jp_had_alk) 
    10791053#elif defined key_medusa && defined key_foam_medusa 
    10801054               ! Alkalinity from MEDUSA 
    1081                zprofvar1(:,:,:) = trn(:,:,:,jpalk) 
     1055               zprofvar(:,:,:,1) = trn(:,:,:,jpalk) 
    10821056#elif defined key_fabm 
    10831057               ! Alkalinity from ERSEM 
    1084                zprofvar1(:,:,:) = trn(:,:,:,jp_fabm_o3a) 
     1058               zprofvar(:,:,:,1) = trn(:,:,:,jp_fabm_o3a) 
    10851059#else 
    10861060               CALL ctl_stop( ' Trying to run palk observation operator', & 
    10871061                  &           ' but no biogeochemical model appears to have been defined' ) 
    10881062#endif 
    1089                zprofmask1(:,:,:) = tmask(:,:,:) 
    1090                zglam1(:,:) = glamt(:,:) 
    1091                zgphi1(:,:) = gphit(:,:) 
    10921063 
    10931064            CASE('pph') 
     
    10971068#elif defined key_medusa && defined key_foam_medusa 
    10981069               ! pH from MEDUSA 
    1099                zprofvar1(:,:,:) = f3_pH(:,:,:) 
     1070               zprofvar(:,:,:,1) = f3_pH(:,:,:) 
    11001071#elif defined key_fabm 
    11011072               ! pH from ERSEM 
    1102                zprofvar1(:,:,:) = trn(:,:,:,jp_fabm_o3ph) 
     1073               zprofvar(:,:,:,1) = trn(:,:,:,jp_fabm_o3ph) 
    11031074#else 
    11041075               CALL ctl_stop( ' Trying to run pph observation operator', & 
    11051076                  &           ' but no biogeochemical model appears to have been defined' ) 
    11061077#endif 
    1107                zprofmask1(:,:,:) = tmask(:,:,:) 
    1108                zglam1(:,:) = glamt(:,:) 
    1109                zgphi1(:,:) = gphit(:,:) 
    11101078 
    11111079            CASE('po2') 
     
    11151083#elif defined key_medusa && defined key_foam_medusa 
    11161084               ! Oxygen from MEDUSA 
    1117                zprofvar1(:,:,:) = trn(:,:,:,jpoxy) 
     1085               zprofvar(:,:,:,1) = trn(:,:,:,jpoxy) 
    11181086#elif defined key_fabm 
    11191087               ! Oxygen from ERSEM 
    1120                zprofvar1(:,:,:) = trn(:,:,:,jp_fabm_o2o) 
     1088               zprofvar(:,:,:,1) = trn(:,:,:,jp_fabm_o2o) 
    11211089#else 
    11221090               CALL ctl_stop( ' Trying to run po2 observation operator', & 
    11231091                  &           ' but no biogeochemical model appears to have been defined' ) 
    11241092#endif 
    1125                zprofmask1(:,:,:) = tmask(:,:,:) 
    1126                zglam1(:,:) = glamt(:,:) 
    1127                zgphi1(:,:) = gphit(:,:) 
    11281093 
    11291094            CASE DEFAULT 
    11301095               CALL ctl_stop( 'Unknown profile observation type '//TRIM(cobstypesprof(jtype))//' in dia_obs' ) 
     1096 
    11311097            END SELECT 
    1132              
    1133             IF ( ( TRIM(cobstypesprof(jtype)) /= 'prof' ) .AND. ( TRIM(cobstypesprof(jtype)) /= 'vel' ) ) THEN 
    1134                zprofvar2(:,:,:)  = zprofvar1(:,:,:) 
    1135                zprofmask2(:,:,:) = zprofmask1(:,:,:) 
    1136                zglam2(:,:)       = zglam1(:,:) 
    1137                zgphi2(:,:)       = zgphi1(:,:) 
    1138             ENDIF 
    1139  
    1140             CALL obs_prof_opt( profdataqc(jtype), kstp, jpi, jpj, jpk,  & 
    1141                &               nit000, idaystp,                         & 
    1142                &               zprofvar1, zprofvar2,                    & 
    1143                &               fsdept(:,:,:), fsdepw(:,:,:),            &  
    1144                &               zprofmask1, zprofmask2,                  & 
    1145                &               zglam1, zglam2, zgphi1, zgphi2,          & 
    1146                &               nn_1dint, nn_2dint_default,              & 
    1147                &               kdailyavtypes = nn_profdavtypes ) 
     1098 
     1099            DO jvar = 1, profdataqc(jtype)%nvar 
     1100               CALL obs_prof_opt( profdataqc(jtype), kstp, jpi, jpj, jpk,  & 
     1101                  &               nit000, idaystp, jvar,                   & 
     1102                  &               zprofvar(:,:,:,jvar),                    & 
     1103                  &               fsdept(:,:,:), fsdepw(:,:,:),            &  
     1104                  &               zprofmask(:,:,:,jvar),                   & 
     1105                  &               zglam(:,:,jvar), zgphi(:,:,jvar),        & 
     1106                  &               nn_1dint, nn_2dint_default,              & 
     1107                  &               kdailyavtypes = nn_profdavtypes ) 
     1108            END DO 
     1109 
     1110            CALL wrk_dealloc( jpi, jpj, jpk, profdataqc(jtype)%nvar, zprofvar  ) 
     1111            CALL wrk_dealloc( jpi, jpj, jpk, profdataqc(jtype)%nvar, zprofmask ) 
     1112            CALL wrk_dealloc( jpi, jpj,      profdataqc(jtype)%nvar, zglam     ) 
     1113            CALL wrk_dealloc( jpi, jpj,      profdataqc(jtype)%nvar, zgphi    ) 
    11481114 
    11491115         END DO 
     
    11521118 
    11531119      IF ( nsurftypes > 0 ) THEN 
     1120 
     1121         !Allocate local work arrays 
     1122         CALL wrk_alloc( jpi, jpj, zsurfvar ) 
     1123         CALL wrk_alloc( jpi, jpj, zsurfmask ) 
    11541124 
    11551125         DO jtype = 1, nsurftypes 
     
    14141384         END DO 
    14151385 
     1386         CALL wrk_dealloc( jpi, jpj, zsurfvar ) 
     1387         CALL wrk_dealloc( jpi, jpj, zsurfmask ) 
     1388 
    14161389      ENDIF 
    1417  
    1418       CALL wrk_dealloc( jpi, jpj, jpk, zprofvar1 ) 
    1419       CALL wrk_dealloc( jpi, jpj, jpk, zprofvar2 ) 
    1420       CALL wrk_dealloc( jpi, jpj, jpk, zprofmask1 ) 
    1421       CALL wrk_dealloc( jpi, jpj, jpk, zprofmask2 ) 
    1422       CALL wrk_dealloc( jpi, jpj, zsurfvar ) 
    1423       CALL wrk_dealloc( jpi, jpj, zsurfmask ) 
    1424       CALL wrk_dealloc( jpi, jpj, zglam1 ) 
    1425       CALL wrk_dealloc( jpi, jpj, zglam2 ) 
    1426       CALL wrk_dealloc( jpi, jpj, zgphi1 ) 
    1427       CALL wrk_dealloc( jpi, jpj, zgphi2 ) 
    14281390 
    14291391   END SUBROUTINE dia_obs 
  • branches/UKMO/dev_r5518_obs_oper_update_bgc3d/NEMOGCM/NEMO/OPA_SRC/OBS/obs_oper.F90

    r9186 r9211  
    3636      & sbc_dcy, nday_qsr 
    3737   USE obs_grid,      ONLY : &  
    38       & obs_level_search      
     38      & obs_level_search    
     39   USE dom_oce                  ! Ocean space and time domain variables   
    3940 
    4041   IMPLICIT NONE 
     
    6061 
    6162 
    62    SUBROUTINE obs_prof_opt( prodatqc, kt, kpi, kpj, kpk,          & 
    63       &                     kit000, kdaystp,                      & 
    64       &                     pvar1, pvar2, pgdept, pgdepw,         & 
    65       &                     pmask1, pmask2,                       &   
    66       &                     plam1, plam2, pphi1, pphi2,           & 
     63   SUBROUTINE obs_prof_opt( prodatqc, kt, kpi, kpj, kpk, & 
     64      &                     kit000, kdaystp, kvar,       & 
     65      &                     pvar, pgdept, pgdepw,        & 
     66      &                     pmask,                       &   
     67      &                     plam, pphi,                  & 
    6768      &                     k1dint, k2dint, kdailyavtypes ) 
    6869 
     
    134135      INTEGER, INTENT(IN) :: k2dint  ! Horizontal interpolation type (see header) 
    135136      INTEGER, INTENT(IN) :: kdaystp ! Number of time steps per day 
     137      INTEGER, INTENT(IN) :: kvar    ! Number of variable in prodatqc 
    136138      REAL(KIND=wp), INTENT(IN), DIMENSION(kpi,kpj,kpk) :: & 
    137          & pvar1,    &               ! Model field 1 
    138          & pvar2,    &               ! Model field 2 
    139          & pmask1,   &               ! Land-sea mask 1 
    140          & pmask2                    ! Land-sea mask 2 
     139         & pvar,   &                 ! Model field for variable 
     140         & pmask                     ! Land-sea mask for variable 
    141141      REAL(KIND=wp), INTENT(IN), DIMENSION(kpi,kpj) :: & 
    142          & plam1,    &               ! Model longitudes for variable 1 
    143          & plam2,    &               ! Model longitudes for variable 2 
    144          & pphi1,    &               ! Model latitudes for variable 1 
    145          & pphi2                     ! Model latitudes for variable 2 
     142         & plam,   &                 ! Model longitudes for variable 
     143         & pphi                      ! Model latitudes for variable 
    146144      REAL(KIND=wp), INTENT(IN), DIMENSION(kpi,kpj,kpk) :: &  
    147145         & pgdept, &                 ! Model array of depth T levels  
     
    166164         & idailyavtypes 
    167165      INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: & 
    168          & igrdi1, & 
    169          & igrdi2, & 
    170          & igrdj1, & 
    171          & igrdj2 
     166         & igrdi, & 
     167         & igrdj 
    172168      INTEGER, ALLOCATABLE, DIMENSION(:) :: iv_indic 
    173169 
     
    176172      REAL(KIND=wp) :: zdaystp 
    177173      REAL(KIND=wp), DIMENSION(kpk) :: & 
    178          & zobsmask1, & 
    179          & zobsmask2, & 
    180174         & zobsk,    & 
    181175         & zobs2k 
    182176      REAL(KIND=wp), DIMENSION(2,2,1) :: & 
    183177         & zweig1, & 
    184          & zweig2, & 
    185178         & zweig 
    186179      REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE :: & 
    187          & zmask1, & 
    188          & zmask2, & 
    189          & zint1,  & 
    190          & zint2,  & 
    191          & zinm1,  & 
    192          & zinm2,  & 
     180         & zmask,  & 
     181         & zint,   & 
     182         & zinm,   & 
    193183         & zgdept, &  
    194184         & zgdepw 
    195185      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: & 
    196          & zglam1, & 
    197          & zglam2, & 
    198          & zgphi1, & 
    199          & zgphi2 
    200       REAL(KIND=wp), DIMENSION(1) :: zmsk_1, zmsk_2    
     186         & zglam,  & 
     187         & zgphi 
     188      REAL(KIND=wp), DIMENSION(1) :: zmsk 
    201189      REAL(KIND=wp), DIMENSION(:,:,:), ALLOCATABLE :: interp_corner 
    202190 
     
    230218               DO jj = 1, jpj 
    231219                  DO ji = 1, jpi 
    232                      prodatqc%vdmean(ji,jj,jk,1) = 0.0 
    233                      IF ( prodatqc%nvar == 2 ) THEN 
    234                         prodatqc%vdmean(ji,jj,jk,2) = 0.0 
    235                      ENDIF 
     220                     prodatqc%vdmean(ji,jj,jk,kvar) = 0.0 
    236221                  END DO 
    237222               END DO 
     
    242227            DO jj = 1, jpj 
    243228               DO ji = 1, jpi 
    244                   ! Increment field 1 for computing daily mean 
    245                   prodatqc%vdmean(ji,jj,jk,1) = prodatqc%vdmean(ji,jj,jk,1) & 
    246                      &                        + pvar1(ji,jj,jk) 
    247                   IF ( prodatqc%nvar == 2 ) THEN 
    248                      ! Increment field 2 for computing daily mean 
    249                      prodatqc%vdmean(ji,jj,jk,2) = prodatqc%vdmean(ji,jj,jk,2) & 
    250                         &                        + pvar2(ji,jj,jk) 
    251                   ENDIF 
     229                  ! Increment field for computing daily mean 
     230                  prodatqc%vdmean(ji,jj,jk,kvar) = prodatqc%vdmean(ji,jj,jk,kvar) & 
     231                     &                           + pvar(ji,jj,jk) 
    252232               END DO 
    253233            END DO 
     
    262242               DO jj = 1, jpj 
    263243                  DO ji = 1, jpi 
    264                      prodatqc%vdmean(ji,jj,jk,1) = prodatqc%vdmean(ji,jj,jk,1) & 
    265                         &                        * zdaystp 
    266                      IF ( prodatqc%nvar == 2 ) THEN 
    267                         prodatqc%vdmean(ji,jj,jk,2) = prodatqc%vdmean(ji,jj,jk,2) & 
    268                            &                        * zdaystp 
    269                      ENDIF 
     244                     prodatqc%vdmean(ji,jj,jk,kvar) = prodatqc%vdmean(ji,jj,jk,kvar) & 
     245                        &                           * zdaystp 
    270246                  END DO 
    271247               END DO 
     
    277253      ! Get the data for interpolation 
    278254      ALLOCATE( & 
    279          & igrdi1(2,2,ipro),      & 
    280          & igrdi2(2,2,ipro),      & 
    281          & igrdj1(2,2,ipro),      & 
    282          & igrdj2(2,2,ipro),      & 
    283          & zglam1(2,2,ipro),      & 
    284          & zglam2(2,2,ipro),      & 
    285          & zgphi1(2,2,ipro),      & 
    286          & zgphi2(2,2,ipro),      & 
    287          & zmask1(2,2,kpk,ipro),  & 
    288          & zmask2(2,2,kpk,ipro),  & 
    289          & zint1(2,2,kpk,ipro),   & 
    290          & zint2(2,2,kpk,ipro),   & 
     255         & igrdi(2,2,ipro),       & 
     256         & igrdj(2,2,ipro),       & 
     257         & zglam(2,2,ipro),       & 
     258         & zgphi(2,2,ipro),       & 
     259         & zmask(2,2,kpk,ipro),   & 
     260         & zint(2,2,kpk,ipro),    & 
    291261         & zgdept(2,2,kpk,ipro),  &  
    292262         & zgdepw(2,2,kpk,ipro)   &  
     
    295265      DO jobs = prodatqc%nprofup + 1, prodatqc%nprofup + ipro 
    296266         iobs = jobs - prodatqc%nprofup 
    297          igrdi1(1,1,iobs) = prodatqc%mi(jobs,1)-1 
    298          igrdj1(1,1,iobs) = prodatqc%mj(jobs,1)-1 
    299          igrdi1(1,2,iobs) = prodatqc%mi(jobs,1)-1 
    300          igrdj1(1,2,iobs) = prodatqc%mj(jobs,1) 
    301          igrdi1(2,1,iobs) = prodatqc%mi(jobs,1) 
    302          igrdj1(2,1,iobs) = prodatqc%mj(jobs,1)-1 
    303          igrdi1(2,2,iobs) = prodatqc%mi(jobs,1) 
    304          igrdj1(2,2,iobs) = prodatqc%mj(jobs,1) 
    305          IF ( prodatqc%nvar == 2 ) THEN 
    306             igrdi2(1,1,iobs) = prodatqc%mi(jobs,2)-1 
    307             igrdj2(1,1,iobs) = prodatqc%mj(jobs,2)-1 
    308             igrdi2(1,2,iobs) = prodatqc%mi(jobs,2)-1 
    309             igrdj2(1,2,iobs) = prodatqc%mj(jobs,2) 
    310             igrdi2(2,1,iobs) = prodatqc%mi(jobs,2) 
    311             igrdj2(2,1,iobs) = prodatqc%mj(jobs,2)-1 
    312             igrdi2(2,2,iobs) = prodatqc%mi(jobs,2) 
    313             igrdj2(2,2,iobs) = prodatqc%mj(jobs,2) 
    314          ENDIF 
     267         igrdi(1,1,iobs) = prodatqc%mi(jobs,kvar)-1 
     268         igrdj(1,1,iobs) = prodatqc%mj(jobs,kvar)-1 
     269         igrdi(1,2,iobs) = prodatqc%mi(jobs,kvar)-1 
     270         igrdj(1,2,iobs) = prodatqc%mj(jobs,kvar) 
     271         igrdi(2,1,iobs) = prodatqc%mi(jobs,kvar) 
     272         igrdj(2,1,iobs) = prodatqc%mj(jobs,kvar)-1 
     273         igrdi(2,2,iobs) = prodatqc%mi(jobs,kvar) 
     274         igrdj(2,2,iobs) = prodatqc%mj(jobs,kvar) 
    315275      END DO 
    316276 
     
    319279      zgdepw(:,:,:,:) = 0.0 
    320280 
    321       CALL obs_int_comm_2d( 2, 2, ipro, kpi, kpj, igrdi1, igrdj1, plam1, zglam1 ) 
    322       CALL obs_int_comm_2d( 2, 2, ipro, kpi, kpj, igrdi1, igrdj1, pphi1, zgphi1 ) 
    323       CALL obs_int_comm_3d( 2, 2, ipro, kpi, kpj, kpk, igrdi1, igrdj1, pmask1, zmask1 ) 
    324       CALL obs_int_comm_3d( 2, 2, ipro, kpi, kpj, kpk, igrdi1, igrdj1, pvar1,   zint1 ) 
    325        
    326       IF ( prodatqc%nvar == 2 ) THEN 
    327          CALL obs_int_comm_2d( 2, 2, ipro, kpi, kpj, igrdi2, igrdj2, plam2, zglam2 ) 
    328          CALL obs_int_comm_2d( 2, 2, ipro, kpi, kpj, igrdi2, igrdj2, pphi2, zgphi2 ) 
    329          CALL obs_int_comm_3d( 2, 2, ipro, kpi, kpj, kpk, igrdi2, igrdj2, pmask2, zmask2 ) 
    330          CALL obs_int_comm_3d( 2, 2, ipro, kpi, kpj, kpk, igrdi2, igrdj2, pvar2,   zint2 ) 
    331       ENDIF 
    332  
    333       CALL obs_int_comm_3d( 2, 2, ipro, kpi, kpj, kpk, igrdi1, igrdj1, pgdept, zgdept )  
    334       CALL obs_int_comm_3d( 2, 2, ipro, kpi, kpj, kpk, igrdi1, igrdj1, pgdepw, zgdepw )  
     281      CALL obs_int_comm_2d( 2, 2, ipro, kpi, kpj, igrdi, igrdj, plam, zglam ) 
     282      CALL obs_int_comm_2d( 2, 2, ipro, kpi, kpj, igrdi, igrdj, pphi, zgphi ) 
     283      CALL obs_int_comm_3d( 2, 2, ipro, kpi, kpj, kpk, igrdi, igrdj, pvar,   zint ) 
     284 
     285      CALL obs_int_comm_3d( 2, 2, ipro, kpi, kpj, kpk, igrdi, igrdj, pgdept, zgdept )  
     286      CALL obs_int_comm_3d( 2, 2, ipro, kpi, kpj, kpk, igrdi, igrdj, pgdepw, zgdepw )  
    335287 
    336288      ! At the end of the day also get interpolated means 
    337289      IF ( ld_dailyav .AND. idayend == 0 ) THEN 
    338290 
    339          ALLOCATE( & 
    340             & zinm1(2,2,kpk,ipro),  & 
    341             & zinm2(2,2,kpk,ipro)   & 
    342             & ) 
    343  
    344          CALL obs_int_comm_3d( 2, 2, ipro, kpi, kpj, kpk, igrdi1, igrdj1, & 
    345             &                  prodatqc%vdmean(:,:,:,1), zinm1 ) 
    346          IF ( prodatqc%nvar == 2 ) THEN 
    347             CALL obs_int_comm_3d( 2, 2, ipro, kpi, kpj, kpk, igrdi2, igrdj2, & 
    348                &                  prodatqc%vdmean(:,:,:,2), zinm2 ) 
    349          ENDIF 
     291         ALLOCATE( zinm(2,2,kpk,ipro) ) 
     292 
     293         CALL obs_int_comm_3d( 2, 2, ipro, kpi, kpj, kpk, igrdi, igrdj, & 
     294            &                  prodatqc%vdmean(:,:,:,kvar), zinm ) 
    350295 
    351296      ENDIF 
     
    382327         ! Horizontal weights  
    383328         ! Masked values are calculated later.   
    384          IF ( prodatqc%npvend(jobs,1) > 0 ) THEN 
     329         IF ( prodatqc%npvend(jobs,kvar) > 0 ) THEN 
    385330 
    386331            CALL obs_int_h2d_init( 1, 1, k2dint, zlam, zphi,     & 
    387                &                   zglam1(:,:,iobs), zgphi1(:,:,iobs), & 
    388                &                   zmask1(:,:,1,iobs), zweig1, zmsk_1 ) 
    389  
    390          ENDIF 
    391  
    392          IF ( prodatqc%nvar == 2 ) THEN 
    393             IF ( prodatqc%npvend(jobs,2) > 0 ) THEN 
    394  
    395                CALL obs_int_h2d_init( 1, 1, k2dint, zlam, zphi,     & 
    396                   &                   zglam2(:,:,iobs), zgphi2(:,:,iobs), & 
    397                   &                   zmask2(:,:,1,iobs), zweig2, zmsk_2 ) 
    398  
    399             ENDIF 
    400          ENDIF 
    401  
    402          IF ( prodatqc%npvend(jobs,1) > 0 ) THEN 
     332               &                   zglam(:,:,iobs), zgphi(:,:,iobs), & 
     333               &                   zmask(:,:,1,iobs), zweig1, zmsk ) 
     334 
     335         ENDIF 
     336 
     337         IF ( prodatqc%npvend(jobs,kvar) > 0 ) THEN 
    403338 
    404339            zobsk(:) = obfillflt 
     
    420355                        IF ( k1dint == 1 ) THEN  
    421356                           CALL obs_int_z1d_spl( kpk, &  
    422                               &     zinm1(iin,ijn,:,iobs), &  
     357                              &     zinm(iin,ijn,:,iobs), &  
    423358                              &     zobs2k, zgdept(iin,ijn,:,iobs), &  
    424                               &     zmask1(iin,ijn,:,iobs))  
     359                              &     zmask(iin,ijn,:,iobs))  
    425360                        ENDIF  
    426361        
    427362                        CALL obs_level_search(kpk, &  
    428363                           &    zgdept(iin,ijn,:,iobs), &  
    429                            &    inum_obs, prodatqc%var(1)%vdep(ista:iend), &  
     364                           &    inum_obs, prodatqc%var(kvar)%vdep(ista:iend), &  
    430365                           &    iv_indic)  
    431366 
    432367                        CALL obs_int_z1d(kpk, iv_indic, k1dint, inum_obs, &  
    433                            &    prodatqc%var(1)%vdep(ista:iend), &  
    434                            &    zinm1(iin,ijn,:,iobs), &  
     368                           &    prodatqc%var(kvar)%vdep(ista:iend), &  
     369                           &    zinm(iin,ijn,:,iobs), &  
    435370                           &    zobs2k, interp_corner(iin,ijn,:), &  
    436371                           &    zgdept(iin,ijn,:,iobs), &  
    437                            &    zmask1(iin,ijn,:,iobs))  
     372                           &    zmask(iin,ijn,:,iobs))  
    438373        
    439374                     ENDDO  
     
    447382      
    448383               ! vertically interpolate all 4 corners  
    449                ista = prodatqc%npvsta(jobs,1)  
    450                iend = prodatqc%npvend(jobs,1)  
     384               ista = prodatqc%npvsta(jobs,kvar)  
     385               iend = prodatqc%npvend(jobs,kvar)  
    451386               inum_obs = iend - ista + 1  
    452387               ALLOCATE(interp_corner(2,2,inum_obs), iv_indic(inum_obs))  
     
    456391                     IF ( k1dint == 1 ) THEN  
    457392                        CALL obs_int_z1d_spl( kpk, &  
    458                            &    zint1(iin,ijn,:,iobs),&  
     393                           &    zint(iin,ijn,:,iobs),&  
    459394                           &    zobs2k, zgdept(iin,ijn,:,iobs), &  
    460                            &    zmask1(iin,ijn,:,iobs))  
     395                           &    zmask(iin,ijn,:,iobs))  
    461396   
    462397                     ENDIF  
     
    464399                     CALL obs_level_search(kpk, &  
    465400                         &        zgdept(iin,ijn,:,iobs),&  
    466                          &        inum_obs, prodatqc%var(1)%vdep(ista:iend), &  
     401                         &        inum_obs, prodatqc%var(kvar)%vdep(ista:iend), &  
    467402                         &        iv_indic)  
    468403 
    469404                     CALL obs_int_z1d(kpk, iv_indic, k1dint, inum_obs,     &  
    470                          &          prodatqc%var(1)%vdep(ista:iend),     &  
    471                          &          zint1(iin,ijn,:,iobs),            &  
     405                         &          prodatqc%var(kvar)%vdep(ista:iend),     &  
     406                         &          zint(iin,ijn,:,iobs),            &  
    472407                         &          zobs2k,interp_corner(iin,ijn,:), &  
    473408                         &          zgdept(iin,ijn,:,iobs),         &  
    474                          &          zmask1(iin,ijn,:,iobs) )       
     409                         &          zmask(iin,ijn,:,iobs) )       
    475410          
    476411                  ENDDO  
     
    496431                  DO ijn=1,2  
    497432      
    498                      depth_loop1: DO ik=kpk,2,-1  
    499                         IF(zmask1(iin,ijn,ik-1,iobs ) > 0.9 )THEN    
     433                     depth_loop: DO ik=kpk,2,-1  
     434                        IF(zmask(iin,ijn,ik-1,iobs ) > 0.9 )THEN    
    500435                             
    501436                           zweig(iin,ijn,1) = &   
    502437                              & zweig1(iin,ijn,1) * &  
    503438                              & MAX( SIGN(1._wp,(zgdepw(iin,ijn,ik,iobs) ) &  
    504                               &  - prodatqc%var(1)%vdep(iend)),0._wp)  
     439                              &  - prodatqc%var(kvar)%vdep(iend)),0._wp)  
    505440                             
    506                            EXIT depth_loop1  
     441                           EXIT depth_loop 
    507442 
    508443                        ENDIF  
    509444 
    510                      ENDDO depth_loop1  
     445                     ENDDO depth_loop 
    511446      
    512447                  ENDDO  
     
    514449    
    515450               CALL obs_int_h2d( 1, 1, zweig, interp_corner(:,:,ikn), &  
    516                   &              prodatqc%var(1)%vmod(iend:iend) )  
     451                  &              prodatqc%var(kvar)%vmod(iend:iend) )  
    517452 
    518453                  ! Set QC flag for any observations found below the bottom 
    519454                  ! needed as the check here is more strict than that in obs_prep 
    520                IF (sum(zweig) == 0.0_wp) prodatqc%var(1)%nvqc(iend:iend)=4 
     455               IF (sum(zweig) == 0.0_wp) prodatqc%var(kvar)%nvqc(iend:iend)=4 
    521456  
    522457            ENDDO  
     
    524459            DEALLOCATE(interp_corner,iv_indic)  
    525460           
    526          ENDIF  
    527  
    528          IF ( prodatqc%nvar == 2 ) THEN 
    529             ! For the second variable 
    530             IF ( prodatqc%npvend(jobs,2) > 0 ) THEN 
    531  
    532                zobsk(:) = obfillflt 
    533  
    534                IF ( ANY (idailyavtypes(:) == prodatqc%ntyp(jobs)) ) THEN 
    535  
    536                   IF ( idayend == 0 )  THEN 
    537                      ! Daily averaged data 
    538  
    539                      ! vertically interpolate all 4 corners  
    540                      ista = prodatqc%npvsta(jobs,2)  
    541                      iend = prodatqc%npvend(jobs,2)  
    542                      inum_obs = iend - ista + 1  
    543                      ALLOCATE(interp_corner(2,2,inum_obs),iv_indic(inum_obs))  
    544  
    545                      DO iin=1,2  
    546                         DO ijn=1,2  
    547  
    548                            IF ( k1dint == 1 ) THEN  
    549                               CALL obs_int_z1d_spl( kpk, &  
    550                                  &     zinm2(iin,ijn,:,iobs), &  
    551                                  &     zobs2k, zgdept(iin,ijn,:,iobs), &  
    552                                  &     zmask2(iin,ijn,:,iobs))  
    553                            ENDIF  
    554  
    555                            CALL obs_level_search(kpk, &  
    556                               &    zgdept(iin,ijn,:,iobs), &  
    557                               &    inum_obs, prodatqc%var(2)%vdep(ista:iend), &  
    558                               &    iv_indic)  
    559  
    560                            CALL obs_int_z1d(kpk, iv_indic, k1dint, inum_obs, &  
    561                               &    prodatqc%var(2)%vdep(ista:iend), &  
    562                               &    zinm2(iin,ijn,:,iobs), &  
    563                               &    zobs2k, interp_corner(iin,ijn,:), &  
    564                               &    zgdept(iin,ijn,:,iobs), &  
    565                               &    zmask2(iin,ijn,:,iobs))  
    566  
    567                         ENDDO  
    568                      ENDDO  
    569  
    570                   ENDIF !idayend 
    571  
    572                ELSE    
    573  
    574                   ! Point data  
    575  
    576                   ! vertically interpolate all 4 corners  
    577                   ista = prodatqc%npvsta(jobs,2)  
    578                   iend = prodatqc%npvend(jobs,2)  
    579                   inum_obs = iend - ista + 1  
    580                   ALLOCATE(interp_corner(2,2,inum_obs), iv_indic(inum_obs))  
    581                   DO iin=1,2   
    582                      DO ijn=1,2  
    583  
    584                         IF ( k1dint == 1 ) THEN  
    585                            CALL obs_int_z1d_spl( kpk, &  
    586                               &    zint2(iin,ijn,:,iobs),&  
    587                               &    zobs2k, zgdept(iin,ijn,:,iobs), &  
    588                               &    zmask2(iin,ijn,:,iobs))  
    589  
    590                         ENDIF  
    591  
    592                         CALL obs_level_search(kpk, &  
    593                             &        zgdept(iin,ijn,:,iobs),&  
    594                             &        inum_obs, prodatqc%var(2)%vdep(ista:iend), &  
    595                             &        iv_indic)  
    596  
    597                         CALL obs_int_z1d(kpk, iv_indic, k1dint, inum_obs,     &  
    598                             &          prodatqc%var(2)%vdep(ista:iend),     &  
    599                             &          zint2(iin,ijn,:,iobs),            &  
    600                             &          zobs2k,interp_corner(iin,ijn,:), &  
    601                             &          zgdept(iin,ijn,:,iobs),         &  
    602                             &          zmask2(iin,ijn,:,iobs) )       
    603  
    604                      ENDDO  
    605                   ENDDO  
    606  
    607                ENDIF  
    608  
    609                !-------------------------------------------------------------  
    610                ! Compute the horizontal interpolation for every profile level  
    611                !-------------------------------------------------------------  
    612  
    613                DO ikn=1,inum_obs  
    614                   iend=ista+ikn-1 
    615  
    616                   zweig(:,:,1) = 0._wp  
    617  
    618                   ! This code forces the horizontal weights to be   
    619                   ! zero IF the observation is below the bottom of the   
    620                   ! corners of the interpolation nodes, Or if it is in   
    621                   ! the mask. This is important for observations near   
    622                   ! steep bathymetry  
    623                   DO iin=1,2  
    624                      DO ijn=1,2  
    625  
    626                         depth_loop2: DO ik=kpk,2,-1  
    627                            IF(zmask2(iin,ijn,ik-1,iobs ) > 0.9 )THEN    
    628  
    629                               zweig(iin,ijn,1) = &   
    630                                  & zweig2(iin,ijn,1) * &  
    631                                  & MAX( SIGN(1._wp,(zgdepw(iin,ijn,ik,iobs) ) &  
    632                                  &  - prodatqc%var(2)%vdep(iend)),0._wp)  
    633  
    634                               EXIT depth_loop2  
    635  
    636                            ENDIF  
    637  
    638                         ENDDO depth_loop2  
    639  
    640                      ENDDO  
    641                   ENDDO  
    642  
    643                   CALL obs_int_h2d( 1, 1, zweig, interp_corner(:,:,ikn), &  
    644                      &              prodatqc%var(2)%vmod(iend:iend) )  
    645  
    646                      ! Set QC flag for any observations found below the bottom 
    647                      ! needed as the check here is more strict than that in obs_prep 
    648                   IF (sum(zweig) == 0.0_wp) prodatqc%var(2)%nvqc(iend:iend)=4 
    649  
    650                ENDDO  
    651  
    652                DEALLOCATE(interp_corner,iv_indic)  
    653  
    654             ENDIF  
    655          ENDIF  
     461         ENDIF 
    656462 
    657463      ENDDO 
    658464 
    659465      ! Deallocate the data for interpolation 
    660       DEALLOCATE( & 
    661          & igrdi1, & 
    662          & igrdi2, & 
    663          & igrdj1, & 
    664          & igrdj2, & 
    665          & zglam1, & 
    666          & zglam2, & 
    667          & zgphi1, & 
    668          & zgphi2, & 
    669          & zmask1, & 
    670          & zmask2, & 
    671          & zint1,  & 
    672          & zint2,  & 
     466      DEALLOCATE(  & 
     467         & igrdi,  & 
     468         & igrdj,  & 
     469         & zglam,  & 
     470         & zgphi,  & 
     471         & zmask,  & 
     472         & zint,   & 
    673473         & zgdept, & 
    674474         & zgdepw  & 
     
    677477      ! At the end of the day also get interpolated means 
    678478      IF ( ld_dailyav .AND. idayend == 0 ) THEN 
    679          DEALLOCATE( & 
    680             & zinm1,  & 
    681             & zinm2   & 
    682             & ) 
     479         DEALLOCATE( zinm ) 
    683480      ENDIF 
    684481 
    685       prodatqc%nprofup = prodatqc%nprofup + ipro  
     482      IF ( kvar == prodatqc%nvar ) THEN 
     483         prodatqc%nprofup = prodatqc%nprofup + ipro  
     484      ENDIF 
    686485 
    687486   END SUBROUTINE obs_prof_opt 
Note: See TracChangeset for help on using the changeset viewer.