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 3585 for branches/2012/dev_r3342_MERCATOR7_SST/NEMOGCM/NEMO – NEMO

Ignore:
Timestamp:
2012-11-16T18:14:12+01:00 (12 years ago)
Author:
cbricaud
Message:

commit modifications due to review for SST night operator

Location:
branches/2012/dev_r3342_MERCATOR7_SST/NEMOGCM/NEMO/OPA_SRC/OBS
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/2012/dev_r3342_MERCATOR7_SST/NEMOGCM/NEMO/OPA_SRC/OBS/diaobs.F90

    r3411 r3585  
    5959 
    6060   !! * Module variables 
    61    LOGICAL, PUBLIC :: ln_t3d         !: Logical switch for temperature profiles 
    62    LOGICAL, PUBLIC :: ln_s3d         !: Logical switch for salinity profiles 
    63    LOGICAL, PUBLIC :: ln_ena         !: Logical switch for the ENACT data set 
    64    LOGICAL, PUBLIC :: ln_cor         !: Logical switch for the Coriolis data set 
    65    LOGICAL, PUBLIC :: ln_profb       !: Logical switch for profile feedback datafiles 
    66    LOGICAL, PUBLIC :: ln_sla         !: Logical switch for sea level anomalies  
    67    LOGICAL, PUBLIC :: ln_sladt       !: Logical switch for SLA from AVISO files 
    68    LOGICAL, PUBLIC :: ln_slafb       !: Logical switch for SLA from feedback files 
    69    LOGICAL, PUBLIC :: ln_sst         !: Logical switch for sea surface temperature 
    70    LOGICAL, PUBLIC :: ln_reysst      !: Logical switch for Reynolds sea surface temperature 
    71    LOGICAL, PUBLIC :: ln_ghrsst      !: Logical switch for GHRSST data 
    72    LOGICAL, PUBLIC :: ln_sstfb       !: Logical switch for SST from feedback files 
    73    LOGICAL, PUBLIC :: ln_seaice      !: Logical switch for sea ice concentration 
    74    LOGICAL, PUBLIC :: ln_vel3d       !: Logical switch for velocity component (u,v) observations 
    75    LOGICAL, PUBLIC :: ln_velavcur    !: Logical switch for raw daily averaged netCDF current meter vel. data  
    76    LOGICAL, PUBLIC :: ln_velhrcur    !: Logical switch for raw high freq netCDF current meter vel. data  
    77    LOGICAL, PUBLIC :: ln_velavadcp   !: Logical switch for raw daily averaged netCDF ADCP vel. data  
    78    LOGICAL, PUBLIC :: ln_velhradcp   !: Logical switch for raw high freq netCDF ADCP vel. data  
    79    LOGICAL, PUBLIC :: ln_velfb       !: Logical switch for velocities from feedback files 
    80    LOGICAL, PUBLIC :: ln_ssh         !: Logical switch for sea surface height 
    81    LOGICAL, PUBLIC :: ln_sss         !: Logical switch for sea surface salinity 
    82    LOGICAL, PUBLIC :: ln_nea         !: Remove observations near land 
    83    LOGICAL, PUBLIC :: ln_altbias     !: Logical switch for altimeter bias   
    84    LOGICAL, PUBLIC :: ln_ignmis      !: Logical switch for ignoring missing files 
    85    LOGICAL, PUBLIC :: ln_s_at_t      !: Logical switch to compute model S at T observations 
     61   LOGICAL, PUBLIC :: ln_t3d          !: Logical switch for temperature profiles 
     62   LOGICAL, PUBLIC :: ln_s3d          !: Logical switch for salinity profiles 
     63   LOGICAL, PUBLIC :: ln_ena          !: Logical switch for the ENACT data set 
     64   LOGICAL, PUBLIC :: ln_cor          !: Logical switch for the Coriolis data set 
     65   LOGICAL, PUBLIC :: ln_profb        !: Logical switch for profile feedback datafiles 
     66   LOGICAL, PUBLIC :: ln_sla          !: Logical switch for sea level anomalies  
     67   LOGICAL, PUBLIC :: ln_sladt        !: Logical switch for SLA from AVISO files 
     68   LOGICAL, PUBLIC :: ln_slafb        !: Logical switch for SLA from feedback files 
     69   LOGICAL, PUBLIC :: ln_sst          !: Logical switch for sea surface temperature 
     70   LOGICAL, PUBLIC :: ln_reysst       !: Logical switch for Reynolds sea surface temperature 
     71   LOGICAL, PUBLIC :: ln_reysst_night !: Reynolds SST is a foundation SST 
     72   LOGICAL, PUBLIC :: ln_ghrsst       !: Logical switch for GHRSST data 
     73   LOGICAL, PUBLIC :: ln_ghrsst_night !: GHRSST observations is a foundation SST 
     74   LOGICAL, PUBLIC :: ln_sstfb        !: Logical switch for SST from feedback files 
     75   LOGICAL, PUBLIC :: ln_sstfb_night  !: SST from feedback is a foundation SST 
     76   LOGICAL, PUBLIC :: ln_seaice       !: Logical switch for sea ice concentration 
     77   LOGICAL, PUBLIC :: ln_vel3d        !: Logical switch for velocity component (u,v) observations 
     78   LOGICAL, PUBLIC :: ln_velavcur     !: Logical switch for raw daily averaged netCDF current meter vel. data  
     79   LOGICAL, PUBLIC :: ln_velhrcur     !: Logical switch for raw high freq netCDF current meter vel. data  
     80   LOGICAL, PUBLIC :: ln_velavadcp    !: Logical switch for raw daily averaged netCDF ADCP vel. data  
     81   LOGICAL, PUBLIC :: ln_velhradcp    !: Logical switch for raw high freq netCDF ADCP vel. data  
     82   LOGICAL, PUBLIC :: ln_velfb        !: Logical switch for velocities from feedback files 
     83   LOGICAL, PUBLIC :: ln_ssh          !: Logical switch for sea surface height 
     84   LOGICAL, PUBLIC :: ln_sss          !: Logical switch for sea surface salinity 
     85   LOGICAL, PUBLIC :: ln_nea          !: Remove observations near land 
     86   LOGICAL, PUBLIC :: ln_altbias      !: Logical switch for altimeter bias   
     87   LOGICAL, PUBLIC :: ln_ignmis       !: Logical switch for ignoring missing files 
     88   LOGICAL, PUBLIC :: ln_s_at_t       !: Logical switch to compute model S at T observations 
    8689 
    8790   REAL(KIND=dp), PUBLIC :: dobsini   !: Observation window start date YYYYMMDD.HHMMSS 
     
    107110      & ld_velav     !: Velocity data is daily averaged 
    108111   LOGICAL, DIMENSION(:), ALLOCATABLE :: & 
    109       & ld_sstnight  !: SST observation corresponds to night mean 
     112      & l_sstnight  !: SST observation corresponds to night mean 
    110113 
    111114   !!---------------------------------------------------------------------- 
     
    159162      NAMELIST/namobs/ln_ena, ln_cor, ln_profb, ln_t3d, ln_s3d,       & 
    160163         &            ln_sla, ln_sladt, ln_slafb,                     & 
    161          &            ln_ssh, ln_sst, ln_sstfb, ln_sss, ln_nea,       & 
     164         &            ln_ssh, ln_sst, ln_sss, ln_nea,                 & 
    162165         &            enactfiles, coriofiles, profbfiles,             & 
    163166         &            slafilesact, slafilespas, slafbfiles,           & 
     
    166169         &            dobsini, dobsend, n1dint, n2dint,               & 
    167170         &            nmsshc, mdtcorr, mdtcutoff,                     & 
    168          &            ln_reysst, ln_ghrsst, reysstname, reysstfmt,    & 
     171         &            ln_reysst, ln_reysst_night,                     & 
     172         &            ln_ghrsst, ln_ghrsst_night,                     & 
     173         &            ln_sstfb , ln_sstfb_night,                      & 
     174         &            reysstname, reysstfmt,                          & 
    169175         &            ln_grid_search_lookup,                          & 
    170176         &            grid_search_file, grid_search_res,              & 
     
    212218      ln_sst = .FALSE. 
    213219      ln_seaice = .FALSE. 
    214       ln_reysst = .FALSE. 
    215       ln_ghrsst = .FALSE. 
     220      ln_reysst       = .FALSE. 
     221      ln_reysst_night = .FALSE. 
     222      ln_ghrsst       = .FALSE. 
     223      ln_ghrsst_night = .FALSE. 
     224      ln_sstfb        = .FALSE. 
     225      ln_sstfb_night  = .FALSE. 
    216226      ln_sss = .FALSE. 
    217227      ln_profb = .FALSE. 
     
    220230      ln_sladt = .TRUE. 
    221231      ln_slafb = .FALSE. 
    222       ln_sstfb = .FALSE. 
    223232      ln_velavcur = .FALSE. 
    224233      ln_velhrcur = .FALSE. 
     
    355364         WRITE(numout,*) '             Logical switch for SST observations                ln_sst = ', ln_sst 
    356365         WRITE(numout,*) '             Logical switch for Reynolds observations        ln_reysst = ', ln_reysst     
     366         WRITE(numout,*) '             Reynolds observations is a foundation SST ln_reysst_night = ', ln_reysst_night     
    357367         WRITE(numout,*) '             Logical switch for GHRSST observations          ln_ghrsst = ', ln_ghrsst 
     368         WRITE(numout,*) '             GHRSST observations is a foundation SST   ln_ghrsst_night = ', ln_ghrsst_night     
    358369         WRITE(numout,*) '             Logical switch for feedback SST data             ln_sstfb = ', ln_sstfb 
     370         WRITE(numout,*) '             Feedback SST data is a foundation SST     ln_ghrsst_night = ', ln_sstfb_night     
    359371         WRITE(numout,*) '             Logical switch for SSS observations                ln_sss = ', ln_sss 
    360372         WRITE(numout,*) '             Logical switch for Sea Ice observations         ln_seaice = ', ln_seaice 
     
    721733 
    722734      !  - Sea surface temperature 
    723       IF ( ln_sst ) THEN 
     735      IF( ln_sst ) THEN 
    724736 
    725737         ! Set the number of variables for sst to 1 
     
    739751         ALLOCATE(sstdata(nsstsets)) 
    740752         ALLOCATE(sstdatqc(nsstsets)) 
    741          ALLOCATE(ld_sstnight(nsstsets)) 
    742          sstdata(:)%nsurf=0 
    743          sstdatqc(:)%nsurf=0     
    744          ld_sstnight(:)=.false. 
     753         ALLOCATE(l_sstnight(nsstsets)) 
     754         sstdata(:)%nsurf  = 0 
     755         sstdatqc(:)%nsurf = 0     
     756         l_sstnight(:)    = .false. 
    745757 
    746758         nsstsets = 0 
     
    750762            nsstsets = nsstsets + 1 
    751763 
    752             ld_sstnight(nsstsets) = .TRUE. 
     764            l_sstnight(nsstsets) = ln_reysst_night 
    753765 
    754766            CALL obs_rea_sst_rey( reysstname, reysstfmt, sstdata(nsstsets), & 
     
    758770               &              ln_nea ) 
    759771 
    760         ENDIF 
     772         ENDIF 
    761773         
    762         IF (ln_ghrsst) THEN 
     774         IF (ln_ghrsst) THEN 
    763775         
    764776            nsstsets = nsstsets + 1 
    765777 
    766             ld_sstnight(nsstsets) = .TRUE. 
     778            l_sstnight(nsstsets) = ln_ghrsst_night 
    767779           
    768780            CALL obs_rea_sst( 1, sstdata(nsstsets), jnumsst, & 
     
    783795               nsstsets = nsstsets + 1 
    784796 
    785                ld_sstnight(nsstsets) = .TRUE. 
     797               l_sstnight(nsstsets) = ln_sstfb_night 
    786798             
    787799               CALL obs_rea_sst( 0, sstdata(nsstsets), 1, & 
     
    11051117               &              kstp, jpi, jpj, nit000, idaystp,  & 
    11061118               &              tsn(:,:,1,jp_tem), tmask(:,:,1),  & 
    1107                &              n2dint, ld_sstnight(jsstset) ) 
     1119               &              n2dint, l_sstnight(jsstset) ) 
    11081120         END DO 
    11091121      ENDIF 
  • branches/2012/dev_r3342_MERCATOR7_SST/NEMOGCM/NEMO/OPA_SRC/OBS/obs_oper.F90

    r3411 r3585  
    663663         & psstn,  &    ! Model SST field 
    664664         & psstmask     ! Land-sea mask 
     665      LOGICAL, INTENT(IN) :: ld_nightav 
    665666 
    666667      !! * Local declarations 
     
    694695         & igrdi, & 
    695696         & igrdj 
    696       LOGICAL, INTENT(IN) :: ld_nightav 
    697697 
    698698      !----------------------------------------------------------------------- 
     
    705705      IF ( ld_nightav ) THEN 
    706706 
    707       ! Initialize array for night mean 
    708  
    709       IF ( kt .EQ. 0 ) THEN 
    710          ALLOCATE ( icount_sstnight(kpi,kpj) ) 
    711          ALLOCATE ( imask_night(kpi,kpj) ) 
    712          ALLOCATE ( zintmp(kpi,kpj) ) 
    713          ALLOCATE ( zouttmp(kpi,kpj) ) 
    714          ALLOCATE ( zmeanday(kpi,kpj) ) 
    715          nday_qsr = -1   ! initialisation flag for nbc_dcy 
    716       ENDIF 
    717  
    718       ! Initialize daily mean for first timestep 
    719       idayend = MOD( kt - kit000 + 1, kdaystp ) 
    720  
    721       ! Added kt == 0 test to catch restart case  
    722       IF ( idayend == 1 .OR. kt == 0) THEN 
    723          IF (lwp) WRITE(numout,*) 'Reset sstdatqc%vdmean on time-step: ',kt 
     707         ! Initialize array for night mean 
     708 
     709         IF ( kt .EQ. 0 ) THEN 
     710            ALLOCATE ( icount_sstnight(kpi,kpj) ) 
     711            ALLOCATE ( imask_night(kpi,kpj) ) 
     712            ALLOCATE ( zintmp(kpi,kpj) ) 
     713            ALLOCATE ( zouttmp(kpi,kpj) ) 
     714            ALLOCATE ( zmeanday(kpi,kpj) ) 
     715            nday_qsr = -1   ! initialisation flag for nbc_dcy 
     716         ENDIF 
     717 
     718         ! Initialize daily mean for first timestep 
     719         idayend = MOD( kt - kit000 + 1, kdaystp ) 
     720 
     721         ! Added kt == 0 test to catch restart case  
     722         IF ( idayend == 1 .OR. kt == 0) THEN 
     723            IF (lwp) WRITE(numout,*) 'Reset sstdatqc%vdmean on time-step: ',kt 
     724            DO jj = 1, jpj 
     725               DO ji = 1, jpi 
     726                  sstdatqc%vdmean(ji,jj) = 0.0 
     727                  zmeanday(ji,jj) = 0.0 
     728                  icount_sstnight(ji,jj) = 0 
     729               END DO 
     730            END DO 
     731         ENDIF 
     732 
     733         zintmp(:,:) = 0.0 
     734         zouttmp(:,:) = sbc_dcy( zintmp(:,:), .TRUE. ) 
     735         imask_night(:,:) = INT( zouttmp(:,:) ) 
     736 
    724737         DO jj = 1, jpj 
    725738            DO ji = 1, jpi 
    726                sstdatqc%vdmean(ji,jj) = 0.0 
    727                zmeanday(ji,jj) = 0.0 
    728                icount_sstnight(ji,jj) = 0 
     739               ! Increment the temperature field for computing night mean and counter 
     740               sstdatqc%vdmean(ji,jj) = sstdatqc%vdmean(ji,jj)  & 
     741                      &                        + psstn(ji,jj)*imask_night(ji,jj) 
     742               zmeanday(ji,jj)        = zmeanday(ji,jj) + psstn(ji,jj) 
     743               icount_sstnight(ji,jj) = icount_sstnight(ji,jj) + imask_night(ji,jj) 
    729744            END DO 
    730745         END DO 
    731       ENDIF 
    732  
    733       zintmp(:,:) = 0.0 
    734       zouttmp(:,:) = sbc_dcy( zintmp(:,:), .TRUE. ) 
    735       imask_night(:,:) = INT( zouttmp(:,:) ) 
    736  
    737       DO jj = 1, jpj 
    738          DO ji = 1, jpi 
    739             ! Increment the temperature field for computing night mean and counter 
    740             sstdatqc%vdmean(ji,jj) = sstdatqc%vdmean(ji,jj)  & 
    741                    &                        + psstn(ji,jj)*imask_night(ji,jj) 
    742             zmeanday(ji,jj)        = zmeanday(ji,jj) + psstn(ji,jj) 
    743             icount_sstnight(ji,jj) = icount_sstnight(ji,jj) + imask_night(ji,jj) 
    744          END DO 
    745       END DO 
    746746    
    747       ! Compute the daily mean at the end of day 
    748  
    749       zdaystp = 1.0 / REAL( kdaystp ) 
    750  
    751       IF ( idayend == 0 ) THEN  
    752          DO jj = 1, jpj 
    753             DO ji = 1, jpi 
    754                ! Test if "no night" point 
    755                IF ( icount_sstnight(ji,jj) .NE. 0 ) THEN 
    756                   sstdatqc%vdmean(ji,jj) = sstdatqc%vdmean(ji,jj) & 
     747         ! Compute the daily mean at the end of day 
     748 
     749         zdaystp = 1.0 / REAL( kdaystp ) 
     750 
     751         IF ( idayend == 0 ) THEN  
     752            DO jj = 1, jpj 
     753               DO ji = 1, jpi 
     754                  ! Test if "no night" point 
     755                  IF ( icount_sstnight(ji,jj) .NE. 0 ) THEN 
     756                     sstdatqc%vdmean(ji,jj) = sstdatqc%vdmean(ji,jj) & 
    757757                    &                        / icount_sstnight(ji,jj)  
    758                ELSE 
    759                   sstdatqc%vdmean(ji,jj) = zmeanday(ji,jj) * zdaystp 
    760                ENDIF 
     758                  ELSE 
     759                     sstdatqc%vdmean(ji,jj) = zmeanday(ji,jj) * zdaystp 
     760                  ENDIF 
     761               END DO 
    761762            END DO 
    762          END DO 
    763       ENDIF 
    764  
    765       ENDIF 
     763         ENDIF 
     764 
     765      ENDIF !ld_nightav 
    766766 
    767767      ! Get the data for interpolation 
Note: See TracChangeset for help on using the changeset viewer.