Index: /branches/UKMO/dev_r5518_obs_oper_update_kd490/NEMOGCM/NEMO/OPA_SRC/OBS/diaobs.F90
===================================================================
--- /branches/UKMO/dev_r5518_obs_oper_update_kd490/NEMOGCM/NEMO/OPA_SRC/OBS/diaobs.F90	(revision 11258)
+++ /branches/UKMO/dev_r5518_obs_oper_update_kd490/NEMOGCM/NEMO/OPA_SRC/OBS/diaobs.F90	(revision 11259)
@@ -230,4 +230,5 @@
          & clproffiles, &        ! Profile filenames
          & clsurffiles           ! Surface filenames
+      CHARACTER(len=8), DIMENSION(:), ALLOCATABLE :: clvars  ! Expected variable names
 
       LOGICAL, DIMENSION(:), ALLOCATABLE :: llvar   ! Logical for profile variable read
@@ -730,4 +731,5 @@
                nextrprof(jtype) = 1
                ALLOCATE(llvar(nvarsprof(jtype)))
+               ALLOCATE(clvars(nvarsprof(jtype)))
                CALL wrk_alloc( jpi, jpj,      nvarsprof(jtype), zglam )
                CALL wrk_alloc( jpi, jpj,      nvarsprof(jtype), zgphi )
@@ -735,4 +737,6 @@
                llvar(1)       = ln_t3d
                llvar(2)       = ln_s3d
+               clvars(1)      = 'POTM'
+               clvars(2)      = 'PSAL'
                zglam(:,:,1)   = glamt(:,:)
                zglam(:,:,2)   = glamt(:,:)
@@ -745,4 +749,5 @@
                nextrprof(jtype) = 2
                ALLOCATE(llvar(nvarsprof(jtype)))
+               ALLOCATE(clvars(nvarsprof(jtype)))
                CALL wrk_alloc( jpi, jpj,      nvarsprof(jtype), zglam )
                CALL wrk_alloc( jpi, jpj,      nvarsprof(jtype), zgphi )
@@ -750,4 +755,6 @@
                llvar(1)       = ln_vel3d
                llvar(2)       = ln_vel3d
+               clvars(1)      = 'UVEL'
+               clvars(2)      = 'VVEL'
                zglam(:,:,1)   = glamu(:,:)
                zglam(:,:,2)   = glamv(:,:)
@@ -760,4 +767,5 @@
                nextrprof(jtype) = 0
                ALLOCATE(llvar(nvarsprof(jtype)))
+               ALLOCATE(clvars(nvarsprof(jtype)))
                CALL wrk_alloc( jpi, jpj,      nvarsprof(jtype), zglam )
                CALL wrk_alloc( jpi, jpj,      nvarsprof(jtype), zgphi )
@@ -767,4 +775,23 @@
                zgphi(:,:,1)   = gphit(:,:)
                zmask(:,:,:,1) = tmask(:,:,:)
+               IF ( TRIM(cobstypesprof(jtype)) == 'plchltot' )  THEN
+                  clvars(1) = 'PLCHLTOT'
+               ELSE IF ( TRIM(cobstypesprof(jtype)) == 'pchltot' )  THEN
+                  clvars(1) = 'PCHLTOT'
+               ELSE IF ( TRIM(cobstypesprof(jtype)) == 'pno3' )  THEN
+                  clvars(1) = 'PNO3'
+               ELSE IF ( TRIM(cobstypesprof(jtype)) == 'psi4' )  THEN
+                  clvars(1) = 'PSI4'
+               ELSE IF ( TRIM(cobstypesprof(jtype)) == 'ppo4' )  THEN
+                  clvars(1) = 'PPO4'
+               ELSE IF ( TRIM(cobstypesprof(jtype)) == 'pdic' )  THEN
+                  clvars(1) = 'PDIC'
+               ELSE IF ( TRIM(cobstypesprof(jtype)) == 'palk' )  THEN
+                  clvars(1) = 'PALK'
+               ELSE IF ( TRIM(cobstypesprof(jtype)) == 'pph' )  THEN
+                  clvars(1) = 'PPH'
+               ELSE IF ( TRIM(cobstypesprof(jtype)) == 'po2' )  THEN
+                  clvars(1) = 'PO2'
+               ENDIF
             ENDIF
 
@@ -774,5 +801,5 @@
                &               nvarsprof(jtype), nextrprof(jtype), nitend-nit000+2, &
                &               rn_dobsini, rn_dobsend, llvar, &
-               &               ln_ignmis, ln_s_at_t, .FALSE., &
+               &               ln_ignmis, ln_s_at_t, .FALSE., clvars, &
                &               kdailyavtypes = nn_profdavtypes )
 
@@ -788,5 +815,5 @@
                &               kdailyavtypes = nn_profdavtypes )
             
-            DEALLOCATE( llvar )
+            DEALLOCATE( llvar, clvars )
             CALL wrk_dealloc( jpi, jpj,      nvarsprof(jtype), zglam )
             CALL wrk_dealloc( jpi, jpj,      nvarsprof(jtype), zgphi )
@@ -808,7 +835,53 @@
          DO jtype = 1, nsurftypes
 
-            nvarssurf(jtype) = 1
-            nextrsurf(jtype) = 0
-            IF ( TRIM(cobstypessurf(jtype)) == 'sla' ) nextrsurf(jtype) = 2
+            IF ( TRIM(cobstypessurf(jtype)) == 'sla' )
+               nvarssurf(jtype) = 1
+               nextrsurf(jtype) = 2
+            ELSE
+               nvarssurf(jtype) = 1
+               nextrsurf(jtype) = 0
+            ENDIF
+            
+            ALLOCATE( clvars( nvarssurf(jtype) ) )
+
+            IF ( TRIM(cobstypessurf(jtype)) == 'sla' ) THEN
+               clvars(1) = 'SLA'
+            ELSE IF ( TRIM(cobstypessurf(jtype)) == 'sst' ) THEN
+               clvars(1) = 'SST'
+            ELSE IF ( TRIM(cobstypessurf(jtype)) == 'sic' ) THEN
+               clvars(1) = 'ICECONC'
+            ELSE IF ( TRIM(cobstypessurf(jtype)) == 'sss' ) THEN
+               clvars(1) = 'SSS'
+            ELSE IF ( TRIM(cobstypessurf(jtype)) == 'slchltot' ) THEN
+               clvars(1) = 'SLCHLTOT'
+            ELSE IF ( TRIM(cobstypessurf(jtype)) == 'slchldia' ) THEN
+               clvars(1) = 'SLCHLDIA'
+            ELSE IF ( TRIM(cobstypessurf(jtype)) == 'slchlnon' ) THEN
+               clvars(1) = 'SLCHLNON'
+            ELSE IF ( TRIM(cobstypessurf(jtype)) == 'slchldin' ) THEN
+               clvars(1) = 'SLCHLDIN'
+            ELSE IF ( TRIM(cobstypessurf(jtype)) == 'slchlmic' ) THEN
+               clvars(1) = 'SLCHLMIC'
+            ELSE IF ( TRIM(cobstypessurf(jtype)) == 'slchlnan' ) THEN
+               clvars(1) = 'SLCHLNAN'
+            ELSE IF ( TRIM(cobstypessurf(jtype)) == 'slchlpic' ) THEN
+               clvars(1) = 'SLCHLPIC'
+            ELSE IF ( TRIM(cobstypessurf(jtype)) == 'schltot' ) THEN
+               clvars(1) = 'SCHLTOT'
+            ELSE IF ( TRIM(cobstypessurf(jtype)) == 'slphytot' ) THEN
+               clvars(1) = 'SLPHYTOT'
+            ELSE IF ( TRIM(cobstypessurf(jtype)) == 'slphydia' ) THEN
+               clvars(1) = 'SLPHYDIA'
+            ELSE IF ( TRIM(cobstypessurf(jtype)) == 'slphynon' ) THEN
+               clvars(1) = 'SLPHYNON'
+            ELSE IF ( TRIM(cobstypessurf(jtype)) == 'sspm' ) THEN
+               clvars(1) = 'SSPM'
+            ELSE IF ( TRIM(cobstypessurf(jtype)) == 'skd490' ) THEN
+               clvars(1) = 'SKD490'
+            ELSE IF ( TRIM(cobstypessurf(jtype)) == 'sfco2' ) THEN
+               clvars(1) = 'SFCO2'
+            ELSE IF ( TRIM(cobstypessurf(jtype)) == 'spco2' ) THEN
+               clvars(1) = 'SPCO2'
+            ENDIF
 
             !Read in surface obs types
@@ -816,5 +889,6 @@
                &               clsurffiles(jtype,1:ifilessurf(jtype)), &
                &               nvarssurf(jtype), nextrsurf(jtype), nitend-nit000+2, &
-               &               rn_dobsini, rn_dobsend, ln_ignmis, .FALSE., llnightav(jtype) )
+               &               rn_dobsini, rn_dobsend, ln_ignmis, .FALSE., llnightav(jtype), &
+               &               clvars )
 
             CALL obs_pre_surf( surfdata(jtype), surfdataqc(jtype), ln_nea, ln_bound_reject )
@@ -840,4 +914,6 @@
 
             ENDIF
+            
+            DEALLOCATE( clvars )
 
          END DO
Index: /branches/UKMO/dev_r5518_obs_oper_update_kd490/NEMOGCM/NEMO/OPA_SRC/OBS/obs_read_prof.F90
===================================================================
--- /branches/UKMO/dev_r5518_obs_oper_update_kd490/NEMOGCM/NEMO/OPA_SRC/OBS/obs_read_prof.F90	(revision 11258)
+++ /branches/UKMO/dev_r5518_obs_oper_update_kd490/NEMOGCM/NEMO/OPA_SRC/OBS/obs_read_prof.F90	(revision 11259)
@@ -46,5 +46,5 @@
       &                     kvars, kextr, kstp, ddobsini, ddobsend, &
       &                     ldvar, ldignmis, ldsatt, &
-      &                     ldmod, kdailyavtypes )
+      &                     ldmod, cdvars, kdailyavtypes )
       !!---------------------------------------------------------------------
       !!
@@ -80,4 +80,5 @@
       REAL(dp), INTENT(IN) :: ddobsini  ! Obs. ini time in YYYYMMDD.HHMMSS
       REAL(dp), INTENT(IN) :: ddobsend  ! Obs. end time in YYYYMMDD.HHMMSS
+      CHARACTER(len=8), DIMENSION(kvars), INTENT(IN) :: cdvars
       INTEGER, DIMENSION(imaxavtypes), OPTIONAL :: &
          & kdailyavtypes                ! Types of daily average observations
@@ -86,5 +87,5 @@
       CHARACTER(LEN=15), PARAMETER :: cpname='obs_rea_prof'
       CHARACTER(len=8) :: clrefdate
-      CHARACTER(len=8), DIMENSION(:), ALLOCATABLE :: clvars
+      CHARACTER(len=8), DIMENSION(:), ALLOCATABLE :: clvarsin
       INTEGER :: jvar
       INTEGER :: ji
@@ -221,11 +222,15 @@
 
             IF ( jj == 1 ) THEN
-               ALLOCATE( clvars( inpfiles(jj)%nvar ) )
+               ALLOCATE( clvarsin( inpfiles(jj)%nvar ) )
                DO ji = 1, inpfiles(jj)%nvar
-                 clvars(ji) = inpfiles(jj)%cname(ji)
+                 clvarsin(ji) = inpfiles(jj)%cname(ji)
+                 IF ( clvarsin(ji) /= cdvars(ji) ) THEN
+                    CALL ctl_stop( 'Feedback file variables do not match', &
+                        &           ' expected variable names for this type' )
+                 ENDIF
                END DO
             ELSE
                DO ji = 1, inpfiles(jj)%nvar
-                  IF ( inpfiles(jj)%cname(ji) /= clvars(ji) ) THEN
+                  IF ( inpfiles(jj)%cname(ji) /= clvarsin(ji) ) THEN
                      CALL ctl_stop( 'Feedback file variables not consistent', &
                         &           ' with previous files for this type' )
@@ -506,5 +511,5 @@
       profdata%nprof     = 0
       profdata%nvprot(:) = 0
-      profdata%cvars(:)  = clvars(:)
+      profdata%cvars(:)  = clvarsin(:)
       iprof = 0
 
@@ -805,5 +810,5 @@
       ! Deallocate temporary data
       !-----------------------------------------------------------------------
-      DEALLOCATE( ifileidx, iprofidx, zdat, clvars )
+      DEALLOCATE( ifileidx, iprofidx, zdat, clvarsin )
 
       !-----------------------------------------------------------------------
Index: /branches/UKMO/dev_r5518_obs_oper_update_kd490/NEMOGCM/NEMO/OPA_SRC/OBS/obs_read_surf.F90
===================================================================
--- /branches/UKMO/dev_r5518_obs_oper_update_kd490/NEMOGCM/NEMO/OPA_SRC/OBS/obs_read_surf.F90	(revision 11258)
+++ /branches/UKMO/dev_r5518_obs_oper_update_kd490/NEMOGCM/NEMO/OPA_SRC/OBS/obs_read_surf.F90	(revision 11259)
@@ -40,5 +40,5 @@
    SUBROUTINE obs_rea_surf( surfdata, knumfiles, cdfilenames, &
       &                     kvars, kextr, kstp, ddobsini, ddobsend, &
-      &                     ldignmis, ldmod, ldnightav )
+      &                     ldignmis, ldmod, ldnightav, cdvars )
       !!---------------------------------------------------------------------
       !!
@@ -73,9 +73,10 @@
       REAL(dp), INTENT(IN) :: ddobsini   ! Obs. ini time in YYYYMMDD.HHMMSS
       REAL(dp), INTENT(IN) :: ddobsend   ! Obs. end time in YYYYMMDD.HHMMSS
+      CHARACTER(len=8), DIMENSION(kvars), INTENT(IN) :: cdvars
 
       !! * Local declarations
       CHARACTER(LEN=11), PARAMETER :: cpname='obs_rea_surf'
       CHARACTER(len=8) :: clrefdate
-      CHARACTER(len=8), DIMENSION(:), ALLOCATABLE :: clvars
+      CHARACTER(len=8), DIMENSION(:), ALLOCATABLE :: clvarsin
       INTEGER :: ji
       INTEGER :: jj
@@ -192,11 +193,15 @@
 
             IF ( jj == 1 ) THEN
-               ALLOCATE( clvars( inpfiles(jj)%nvar ) )
+               ALLOCATE( clvarsin( inpfiles(jj)%nvar ) )
                DO ji = 1, inpfiles(jj)%nvar
-                 clvars(ji) = inpfiles(jj)%cname(ji)
+                 clvarsin(ji) = inpfiles(jj)%cname(ji)
+                 IF ( clvarsin(ji) /= cdvars(ji) ) THEN
+                    CALL ctl_stop( 'Feedback file variables do not match', &
+                        &           ' expected variable names for this type' )
+                 ENDIF
                END DO
             ELSE
                DO ji = 1, inpfiles(jj)%nvar
-                  IF ( inpfiles(jj)%cname(ji) /= clvars(ji) ) THEN
+                  IF ( inpfiles(jj)%cname(ji) /= clvarsin(ji) ) THEN
                      CALL ctl_stop( 'Feedback file variables not consistent', &
                         &           ' with previous files for this type' )
@@ -369,5 +374,5 @@
 
       iobs = 0
-      surfdata%cvars(:)  = clvars(:)
+      surfdata%cvars(:)  = clvarsin(:)
       IF ( ldmod .AND. ( TRIM( surfdata%cvars(1) ) == 'SLA' ) ) THEN
          surfdata%cext(1) = 'SSH'
@@ -511,5 +516,5 @@
       ! Deallocate temporary data
       !-----------------------------------------------------------------------
-      DEALLOCATE( ifileidx, isurfidx, zdat, clvars )
+      DEALLOCATE( ifileidx, isurfidx, zdat, clvarsin )
 
       !-----------------------------------------------------------------------
Index: /branches/UKMO/dev_r5518_obs_oper_update_kd490/NEMOGCM/NEMO/OPA_SRC/OBS/obs_write.F90
===================================================================
--- /branches/UKMO/dev_r5518_obs_oper_update_kd490/NEMOGCM/NEMO/OPA_SRC/OBS/obs_write.F90	(revision 11258)
+++ /branches/UKMO/dev_r5518_obs_oper_update_kd490/NEMOGCM/NEMO/OPA_SRC/OBS/obs_write.F90	(revision 11259)
@@ -500,5 +500,5 @@
          clgrid     = 'T'
 
-      CASE('SLCHLTOT','LOGCHL','LogChl','logchl')
+      CASE('SLCHLTOT')
 
          clfiletype = 'slchltotfb'
@@ -591,5 +591,5 @@
          clgrid     = 'T'
 
-      CASE('SFCO2','FCO2','fCO2','fco2')
+      CASE('SFCO2')
 
          clfiletype = 'sfco2fb'
