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 15180 for NEMO/branches/UKMO/NEMO_4.0.4_generic_obs/src/OCE/OBS/obs_field.F90 – NEMO

Ignore:
Timestamp:
2021-08-11T13:24:27+02:00 (3 years ago)
Author:
dford
Message:

Further generification, particularly surrounding additional and extra variables.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/UKMO/NEMO_4.0.4_generic_obs/src/OCE/OBS/obs_field.F90

    r15144 r15180  
    3737    
    3838   ! Expected names for observation types with special behaviours (not needed for all observation types) 
    39    CHARACTER(LEN=8) :: cobsname_sst    = 'SST'  ! Expected variable name for SST 
    40    CHARACTER(LEN=8) :: cobsname_temp3d = 'POTM' ! Expected variable name for 3D temperature 
    41    CHARACTER(LEN=8) :: cobsname_sal3d  = 'PSAL' ! Expected variable name for 3D salinity 
    4239   CHARACTER(LEN=8) :: cobsname_uvel3d = 'UVEL' ! Expected variable name for 3D zonal currents 
    4340   CHARACTER(LEN=8) :: cobsname_vvel3d = 'VVEL' ! Expected variable name for 3D meridional currents 
     
    4744   TYPE obs_group 
    4845      ! 
    49       CHARACTER(LEN=128)                            :: cgroupname    !: Name of obs group (for stdout) 
     46      CHARACTER(LEN=25)                             :: cgroupname    !: Name of obs group (for stdout) 
    5047      CHARACTER(LEN=8),   DIMENSION(:), ALLOCATABLE :: cobstypes     !: Observation types to read from files 
    5148      CHARACTER(LEN=128), DIMENSION(:), ALLOCATABLE :: cobsfiles     !: Observation file names 
    52       CHARACTER(LEN=128), DIMENSION(:), ALLOCATABLE :: csstbiasfiles !: SST bias input file names 
     49      CHARACTER(LEN=128), DIMENSION(:), ALLOCATABLE :: cobsbiasfiles !: Bias input file names 
     50      CHARACTER(LEN=128)                            :: cbiasvarname  !: Bias variable name in input file 
    5351      CHARACTER(LEN=128)                            :: caltbiasfile  !: Altimeter bias input file name 
    5452      ! 
     
    5755      INTEGER  :: nobstypes          !: Number of observation types 
    5856      INTEGER  :: nobsfiles          !: Number of observation files 
    59       INTEGER  :: nextvars           !: Number of extra variables to get 
    60       INTEGER  :: nsstbiasfiles      !: Number of SST bias files 
     57      INTEGER  :: nobsbiasfiles      !: Number of bias files 
     58      INTEGER  :: nbiasvar           !: Index of observation type to be bias corrected 
    6159      INTEGER  :: navtypes           !: Number of profile data types representing a daily average 
     60      INTEGER  :: nextvars           !: Number of extra variables in addition to any in input files 
     61      INTEGER  :: naddvars           !: Number of additional variables in addition to any in input files 
    6262      INTEGER  :: n1dint             !: Type of vertical interpolation method 
    6363      INTEGER  :: n2dint             !: Type of horizontal interpolation method 
     
    6767      LOGICAL  :: lsurf              !: Logical switch for surface data 
    6868      LOGICAL  :: lprof              !: Logical switch for profile data 
    69       LOGICAL  :: lsst               !: Logical switch for SST data 
    70       LOGICAL  :: ltemp3d            !: Logical switch for 3D temperature data 
    71       LOGICAL  :: lsal3d             !: Logical switch for 3D salinity data 
    7269      LOGICAL  :: lvel3d             !: Logical switch for 3D velocity data 
    7370      LOGICAL  :: lsla               !: Logical switch for SLA data 
    7471      LOGICAL  :: laltbias           !: Logical switch for altimeter bias correction 
    75       LOGICAL  :: lsstbias           !: Logical switch for SST bias correction 
     72      LOGICAL  :: lobsbias           !: Logical switch for bias correction 
    7673      LOGICAL  :: lnea               !: Logical switch for rejecting observations near land 
    7774      LOGICAL  :: lbound_reject      !: Logical switch for rejecting obs near the boundary 
    7875      LOGICAL  :: lignmis            !: Logical switch for ignoring missing files 
    79       LOGICAL  :: ls_at_t            !: Logical switch for computing model S at T obs if not there 
     76      LOGICAL  :: lall_at_all        !: Logical switch for computing all model variables at all obs points 
    8077      LOGICAL  :: lnight             !: Logical switch for calculating night-time average 
    81       LOGICAL  :: loutput_clim       !: Logical switch for writing climatological values to fdbk files 
    82       LOGICAL  :: ltime_mean_sla_bkg !: Logical switch for applying time mean of SLA background to remove tidal signal 
    8378      LOGICAL  :: lfp_indegs         !: Logical: T=> averaging footprint is in degrees, F=> in metres 
    8479      ! 
     
    118113      ALLOCATE( sdobsgroup%cobstypes    (sdobsgroup%nobstypes            ), & 
    119114         &      sdobsgroup%cobsfiles    (sdobsgroup%nobsfiles            ), & 
    120          &      sdobsgroup%csstbiasfiles(sdobsgroup%nsstbiasfiles        ), & 
     115         &      sdobsgroup%cobsbiasfiles(sdobsgroup%nobsbiasfiles        ), & 
    121116         &      sdobsgroup%nprofdavtypes(sdobsgroup%navtypes             ), & 
    122117         &      sdobsgroup%rglam        (jpi,jpj,    sdobsgroup%nobstypes), & 
     
    144139      DEALLOCATE( sdobsgroup%cobstypes,     & 
    145140         &        sdobsgroup%cobsfiles,     & 
    146          &        sdobsgroup%csstbiasfiles, & 
     141         &        sdobsgroup%cobsbiasfiles, & 
    147142         &        sdobsgroup%nprofdavtypes, & 
    148143         &        sdobsgroup%rglam,         & 
     
    174169      CHARACTER(LEN=8),   DIMENSION(jpmaxntypes) :: cn_obstypes 
    175170      CHARACTER(LEN=128), DIMENSION(jpmaxnfiles) :: cn_obsfiles 
    176       CHARACTER(LEN=128), DIMENSION(jpmaxnfiles) :: cn_sstbiasfiles 
     171      CHARACTER(LEN=128), DIMENSION(jpmaxnfiles) :: cn_obsbiasfiles 
     172      CHARACTER(LEN=128)                         :: cn_type_to_biascorrect 
     173      CHARACTER(LEN=128)                         :: cn_obsbiasfile_varname 
    177174      CHARACTER(LEN=128)                         :: cn_altbiasfile 
    178175      INTEGER,            DIMENSION(imaxavtypes) :: nn_profdavtypes 
     
    184181      LOGICAL                                    :: ln_prof 
    185182      LOGICAL                                    :: ln_altbias 
    186       LOGICAL                                    :: ln_sstbias 
     183      LOGICAL                                    :: ln_obsbias 
    187184      LOGICAL                                    :: ln_nea 
    188185      LOGICAL                                    :: ln_bound_reject 
    189186      LOGICAL                                    :: ln_ignmis 
    190       LOGICAL                                    :: ln_s_at_t 
     187      LOGICAL                                    :: ln_all_at_all 
    191188      LOGICAL                                    :: ln_night 
    192       LOGICAL                                    :: ln_output_clim 
    193       LOGICAL                                    :: ln_time_mean_sla_bkg 
    194189      LOGICAL                                    :: ln_fp_indegs 
    195190      REAL(wp)                                   :: rn_avglamscl 
     
    201196         &                cn_obsfiles, cn_obstypes, ln_nea, ln_bound_reject,    & 
    202197         &                ln_ignmis, nn_2dint, nn_1dint, nn_profdavtypes,       & 
    203          &                ln_fp_indegs, rn_avglamscl, rn_avgphiscl, ln_sstbias, & 
    204          &                cn_sstbiasfiles, ln_night, ln_altbias,                & 
     198         &                ln_fp_indegs, rn_avglamscl, rn_avgphiscl, ln_obsbias, & 
     199         &                cn_obsbiasfiles, cn_type_to_biascorrect,              & 
     200         &                cn_obsbiasfile_varname, ln_night, ln_altbias,         & 
    205201         &                cn_altbiasfile, nn_msshc, rn_mdtcorr, rn_mdtcutoff,   & 
    206          &                ln_time_mean_sla_bkg, ln_s_at_t, ln_output_clim 
     202         &                ln_all_at_all 
    207203      !!---------------------------------------------------------------------- 
    208204 
    209205      cn_obstypes(:)     = '' 
    210206      cn_obsfiles(:)     = '' 
    211       cn_sstbiasfiles(:) = '' 
     207      cn_obsbiasfiles(:) = '' 
    212208      nn_profdavtypes(:) = -1 
    213209 
     
    229225         sdobsgroup%nobstypes     = 0 
    230226         sdobsgroup%nobsfiles     = 0 
     227         sdobsgroup%naddvars      = 0 
    231228         sdobsgroup%nextvars      = 0 
    232229         sdobsgroup%navtypes      = 0 
    233          sdobsgroup%nsstbiasfiles = 0 
    234          sdobsgroup%lsst          = .false. 
    235          sdobsgroup%ltemp3d       = .false. 
    236          sdobsgroup%lsal3d        = .false. 
     230         sdobsgroup%nobsbiasfiles = 0 
    237231         sdobsgroup%lvel3d        = .false. 
    238232         sdobsgroup%lsla          = .false. 
     
    254248         END DO 
    255249         DO jfile = 1, jpmaxnfiles 
    256             IF ( TRIM(cn_sstbiasfiles(jfile)) /= '' ) THEN 
    257                sdobsgroup%nsstbiasfiles = sdobsgroup%nsstbiasfiles + 1 
     250            IF ( TRIM(cn_obsbiasfiles(jfile)) /= '' ) THEN 
     251               sdobsgroup%nobsbiasfiles = sdobsgroup%nobsbiasfiles + 1 
    258252            ENDIF 
    259253         END DO 
     
    266260               itype = itype + 1 
    267261               sdobsgroup%cobstypes(itype) = TRIM(cn_obstypes(jtype)) 
    268                IF ( TRIM(sdobsgroup%cobstypes(itype)) == cobsname_sst ) THEN 
    269                   sdobsgroup%lsst = .true. 
    270                ELSEIF ( TRIM(sdobsgroup%cobstypes(itype)) == cobsname_temp3d ) THEN 
    271                   sdobsgroup%ltemp3d = .true. 
    272                   sdobsgroup%nextvars = sdobsgroup%nextvars + 1 
    273                ELSEIF ( TRIM(sdobsgroup%cobstypes(itype)) == cobsname_sal3d ) THEN 
    274                   sdobsgroup%lsal3d = .true. 
    275                ELSEIF ( (TRIM(sdobsgroup%cobstypes(itype)) == cobsname_uvel3d) .OR. & 
    276                   &     (TRIM(sdobsgroup%cobstypes(itype)) == cobsname_vvel3d) ) THEN 
     262               IF ( (TRIM(sdobsgroup%cobstypes(itype)) == cobsname_uvel3d) .OR. & 
     263                  & (TRIM(sdobsgroup%cobstypes(itype)) == cobsname_vvel3d) ) THEN 
    277264                  sdobsgroup%lvel3d = .true. 
    278                   sdobsgroup%nextvars = sdobsgroup%nextvars + 1 
    279265               ELSEIF ( TRIM(sdobsgroup%cobstypes(itype)) == cobsname_sla ) THEN 
    280266                  sdobsgroup%lsla = .true. 
    281                   sdobsgroup%nextvars = sdobsgroup%nextvars + 2 
     267! THESE WILL EACH NEED TO BE 1 (ADD=SSH, EXT=MDT) 
     268                  sdobsgroup%naddvars = 0 
     269                  sdobsgroup%nextvars = 0 
     270! DO THIS FOR FBD TOO 
    282271               ENDIF 
    283272               ! 
     
    313302         ifile = 0 
    314303         DO jfile = 1, jpmaxnfiles 
    315             IF ( TRIM(cn_sstbiasfiles(jfile)) /= '' ) THEN 
     304            IF ( TRIM(cn_obsbiasfiles(jfile)) /= '' ) THEN 
    316305               ifile = ifile + 1 
    317                sdobsgroup%csstbiasfiles(ifile) = cn_sstbiasfiles(jfile) 
    318             ENDIF 
    319          END DO 
     306               sdobsgroup%cobsbiasfiles(ifile) = cn_obsbiasfiles(jfile) 
     307            ENDIF 
     308         END DO 
     309         IF ( ln_obsbias ) THEN 
     310            sdobsgroup%nbiasvar = -1 
     311            DO jtype = 1, sdobsgroup%nobstypes 
     312               IF ( TRIM(sdobsgroup%cobstypes(itype)) == TRIM(cn_type_to_biascorrect) ) THEN 
     313                  sdobsgroup%nbiasvar = jtype 
     314                  EXIT 
     315               ENDIF 
     316            ENDDO 
     317         ENDIF 
    320318 
    321319         sdobsgroup%caltbiasfile       = cn_altbiasfile 
     
    326324         sdobsgroup%lprof              = ln_prof 
    327325         sdobsgroup%laltbias           = ln_altbias 
    328          sdobsgroup%lsstbias           = ln_sstbias 
     326         sdobsgroup%lobsbias           = ln_obsbias 
     327         sdobsgroup%cbiasvarname       = cn_obsbiasfile_varname 
    329328         sdobsgroup%lnea               = ln_nea 
    330329         sdobsgroup%lbound_reject      = ln_bound_reject 
    331330         sdobsgroup%lignmis            = ln_ignmis 
    332          sdobsgroup%ls_at_t            = ln_s_at_t 
     331         sdobsgroup%lall_at_all        = ln_all_at_all 
    333332         sdobsgroup%lnight             = ln_night 
    334          sdobsgroup%loutput_clim       = ln_output_clim 
    335          sdobsgroup%ltime_mean_sla_bkg = ln_time_mean_sla_bkg 
    336333         sdobsgroup%lfp_indegs         = ln_fp_indegs 
    337334         sdobsgroup%ravglamscl         = rn_avglamscl 
     
    395392            WRITE(numout,*) '             N/S diameter of obs footprint                      rn_avgphiscl = ', sdobsgroup%ravgphiscl 
    396393            WRITE(numout,*) '             Logical switch for night-time average                  ln_night = ', sdobsgroup%lnight 
     394            WRITE(numout,*) '             Logical switch for bias correction                   ln_obsbias = ', sdobsgroup%lobsbias 
     395            IF ( sdobsgroup%lobsbias ) THEN 
     396               WRITE(numout,*) '             Observation type to be bias corrected    cn_type_to_biascorrect = ', TRIM(sdobsgroup%cobstypes(sdobsgroup%nbiasvar)) 
     397               WRITE(numout,*) '             Bias variable name in bias files         cn_obsbiasfile_varname = ', TRIM(sdobsgroup%cbiasvarname) 
     398               WRITE(numout,*) '             Bias files in group:', sdobsgroup%nobsbiasfiles 
     399               DO jfile = 1, sdobsgroup%nobsbiasfiles 
     400                  WRITE(numout,*) '                ', TRIM(sdobsgroup%cobsbiasfiles(jfile)) 
     401               END DO 
     402            ENDIF 
    397403            WRITE(numout,*) '          Settings only for profile data, which is ', sdobsgroup%lprof 
    398404            WRITE(numout,*) '             Type of vertical interpolation method                  nn_1dint = ', sdobsgroup%n1dint 
    399405            WRITE(numout,*) '             Daily average types                             nn_profdavtypes = ', sdobsgroup%nprofdavtypes 
    400             WRITE(numout,*) '          Settings only for SST data, which is ', sdobsgroup%lsst 
    401             WRITE(numout,*) '             Logical switch for sst bias                          ln_sstbias = ', sdobsgroup%lsstbias 
    402             IF ( sdobsgroup%lsstbias ) THEN 
    403                WRITE(numout,*) '             SST bias files in group:' 
    404                DO jfile = 1, sdobsgroup%nsstbiasfiles 
    405                   WRITE(numout,*) '                ', TRIM(sdobsgroup%csstbiasfiles(jfile)) 
    406                END DO 
    407             ENDIF 
     406            WRITE(numout,*) '             Logical switch to compute all vars at all pts     ln_all_at_all = ', sdobsgroup%lall_at_all 
    408407            WRITE(numout,*) '          Settings only for SLA data, which is ', sdobsgroup%lsla 
    409408            WRITE(numout,*) '             Logical switch for alt bias                          ln_altbias = ', sdobsgroup%laltbias 
    410409            WRITE(numout,*) '             Alt bias file name                               cn_altbiasfile = ', TRIM(sdobsgroup%caltbiasfile) 
    411             WRITE(numout,*) '             Logical switch for time-mean of SLA        ln_time_mean_sla_bkg = ', sdobsgroup%ltime_mean_sla_bkg 
    412410            WRITE(numout,*) '             MSSH correction scheme                                 nn_msshc = ', sdobsgroup%nmsshc 
    413411            WRITE(numout,*) '             MDT  correction                                      rn_mdtcorr = ', sdobsgroup%rmdtcorr 
    414412            WRITE(numout,*) '             MDT cutoff for computed correction                 rn_mdtcutoff = ', sdobsgroup%rmdtcutoff 
    415             WRITE(numout,*) '          Settings only for 3D temperature/salinity data, temperature is ', sdobsgroup%ltemp3d 
    416             WRITE(numout,*) '                                                             salinity is ', sdobsgroup%lsal3d 
    417             WRITE(numout,*) '             Logical switch to compute model S at T obs            ln_s_at_t = ', sdobsgroup%ls_at_t 
    418             WRITE(numout,*) '             Logical switch for writing climat. at obs points ln_output_clim = ', sdobsgroup%loutput_clim 
    419413         ENDIF 
    420414 
     
    432426         ENDIF 
    433427 
    434          IF ( (sdobsgroup%lsst) .AND. (sdobsgroup%lsstbias) .AND. (sdobsgroup%nsstbiasfiles == 0) ) THEN 
    435             CALL ctl_stop( ' No SST bias files specified for this observation group' ) 
     428         IF ( (sdobsgroup%lobsbias) .AND. (sdobsgroup%nobsbiasfiles == 0) ) THEN 
     429            CALL ctl_stop( ' No bias files specified for this observation group' ) 
    436430         ENDIF 
    437431 
Note: See TracChangeset for help on using the changeset viewer.