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 5704 for branches/2015/dev_r5072_UKMO2_OBS_simplification/NEMOGCM/NEMO/OPA_SRC/OBS/diaobs.F90 – NEMO

Ignore:
Timestamp:
2015-08-21T15:00:38+02:00 (9 years ago)
Author:
mattmartin
Message:

Updated simplified obs operator after testing sea-ice concentration and velocity data types.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/dev_r5072_UKMO2_OBS_simplification/NEMOGCM/NEMO/OPA_SRC/OBS/diaobs.F90

    r5682 r5704  
    137137      REAL(dp) :: rn_dobsini     ! Obs window start date YYYYMMDD.HHMMSS 
    138138      REAL(dp) :: rn_dobsend     ! Obs window end date   YYYYMMDD.HHMMSS 
    139       REAL(wp), DIMENSION(jpi,jpj) :: & 
     139      REAL(wp), POINTER, DIMENSION(:,:) :: & 
    140140         & zglam1, &             ! Model longitudes for profile variable 1 
    141141         & zglam2                ! Model longitudes for profile variable 2 
    142       REAL(wp), DIMENSION(jpi,jpj) :: & 
     142      REAL(wp), POINTER, DIMENSION(:,:) :: & 
    143143         & zgphi1, &             ! Model latitudes for profile variable 1 
    144144         & zgphi2                ! Model latitudes for profile variable 2 
    145       REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 
     145      REAL(wp), POINTER, DIMENSION(:,:,:) :: & 
    146146         & zmask1, &             ! Model land/sea mask associated with variable 1 
    147147         & zmask2                ! Model land/sea mask associated with variable 2 
     
    159159         &            nn_msshc, rn_mdtcorr, rn_mdtcutoff,             & 
    160160         &            nn_profdavtypes 
     161 
     162      CALL wrk_alloc( jpi, jpj, zglam1 ) 
     163      CALL wrk_alloc( jpi, jpj, zglam2 ) 
     164      CALL wrk_alloc( jpi, jpj, zgphi1 ) 
     165      CALL wrk_alloc( jpi, jpj, zgphi2 ) 
     166      CALL wrk_alloc( jpi, jpj, jpk, zmask1 ) 
     167      CALL wrk_alloc( jpi, jpj, jpk, zmask2 ) 
    161168 
    162169      !----------------------------------------------------------------------- 
     
    409416            CALL obs_pre_prof( profdata(jtype), profdataqc(jtype), & 
    410417               &               llvar1, llvar2, & 
     418               &               jpi, jpj, jpk, & 
    411419               &               zmask1, zglam1, zgphi1, zmask2, zglam2, zgphi2,  & 
    412420               &               ln_nea, kdailyavtypes = nn_profdavtypes ) 
     
    451459 
    452460      ENDIF 
     461 
     462      CALL wrk_dealloc( jpi, jpj, zglam1 ) 
     463      CALL wrk_dealloc( jpi, jpj, zglam2 ) 
     464      CALL wrk_dealloc( jpi, jpj, zgphi1 ) 
     465      CALL wrk_dealloc( jpi, jpj, zgphi2 ) 
     466      CALL wrk_dealloc( jpi, jpj, jpk, zmask1 ) 
     467      CALL wrk_dealloc( jpi, jpj, jpk, zmask2 ) 
    453468 
    454469   END SUBROUTINE dia_obs_init 
     
    500515      INTEGER :: jtype             ! Data loop variable 
    501516      INTEGER :: jvar              ! Variable number 
    502       REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 
     517      INTEGER :: ji, jj            ! Loop counters 
     518      REAL(wp), POINTER, DIMENSION(:,:,:) :: & 
    503519         & zprofvar1, &            ! Model values for 1st variable in a prof ob 
    504520         & zprofvar2               ! Model values for 2nd variable in a prof ob 
    505       REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 
     521      REAL(wp), POINTER, DIMENSION(:,:,:) :: & 
    506522         & zprofmask1, &           ! Mask associated with zprofvar1 
    507523         & zprofmask2              ! Mask associated with zprofvar2 
    508       REAL(wp), DIMENSION(jpi,jpj)    :: & 
     524      REAL(wp), POINTER, DIMENSION(:,:) :: & 
    509525         & zsurfvar                ! Model values equivalent to surface ob. 
    510       REAL(wp), DIMENSION(jpi,jpj) :: & 
     526      REAL(wp), POINTER, DIMENSION(:,:) :: & 
    511527         & zglam1,    &            ! Model longitudes for prof variable 1 
    512528         & zglam2,    &            ! Model longitudes for prof variable 2 
     
    518534      LOGICAL :: llnightav        ! Logical for calculating night-time average 
    519535 
     536      !Allocate local work arrays 
     537      CALL wrk_alloc( jpi, jpj, jpk, zprofvar1 ) 
     538      CALL wrk_alloc( jpi, jpj, jpk, zprofvar2 ) 
     539      CALL wrk_alloc( jpi, jpj, jpk, zprofmask1 ) 
     540      CALL wrk_alloc( jpi, jpj, jpk, zprofmask2 ) 
     541      CALL wrk_alloc( jpi, jpj, zsurfvar ) 
     542      CALL wrk_alloc( jpi, jpj, zglam1 ) 
     543      CALL wrk_alloc( jpi, jpj, zglam2 ) 
     544      CALL wrk_alloc( jpi, jpj, zgphi1 ) 
     545      CALL wrk_alloc( jpi, jpj, zgphi2 ) 
    520546#if ! defined key_lim2 && ! defined key_lim3 
    521547      CALL wrk_alloc(jpi,jpj,frld)  
     
    591617#if defined key_lim2 || defined key_lim3 
    592618            CASE('sic') 
    593                zsurfvar(:,:) = 1._wp - frld(:,:) 
     619               IF ( kstp == 0 ) THEN 
     620                  IF ( lwp .AND. surfdataqc(jtype)%nsstpmpp(1) > 0 ) THEN 
     621                     CALL ctl_warn( 'Sea-ice not initialised on zeroth '// & 
     622                        &           'time-step but some obs are valid then.' ) 
     623                     WRITE(numout,*)surfdataqc(jtype)%nsstpmpp(1), & 
     624                        &           ' sea-ice obs will be missed' 
     625                  ENDIF 
     626                  surfdataqc(jtype)%nsurfup = surfdataqc(jtype)%nsurfup + & 
     627                     &                        surfdataqc(jtype)%nsstp(1) 
     628                  CYCLE 
     629               ELSE 
     630                  zsurfvar(:,:) = 1._wp - frld(:,:) 
     631               ENDIF 
     632 
    594633               llnightav = .FALSE. 
    595634#endif 
     
    604643      ENDIF 
    605644 
     645      CALL wrk_dealloc( jpi, jpj, jpk, zprofvar1 ) 
     646      CALL wrk_dealloc( jpi, jpj, jpk, zprofvar2 ) 
     647      CALL wrk_dealloc( jpi, jpj, jpk, zprofmask1 ) 
     648      CALL wrk_dealloc( jpi, jpj, jpk, zprofmask2 ) 
     649      CALL wrk_dealloc( jpi, jpj, zsurfvar ) 
     650      CALL wrk_dealloc( jpi, jpj, zglam1 ) 
     651      CALL wrk_dealloc( jpi, jpj, zglam2 ) 
     652      CALL wrk_dealloc( jpi, jpj, zgphi1 ) 
     653      CALL wrk_dealloc( jpi, jpj, zgphi2 ) 
    606654#if ! defined key_lim2 && ! defined key_lim3 
    607       CALL wrk_dealloc(jpi,jpj,frld)  
     655      CALL wrk_dealloc(jpi,jpj,frld) 
    608656#endif 
    609657 
    610658   END SUBROUTINE dia_obs 
    611659 
    612    SUBROUTINE dia_obs_wri  
     660   SUBROUTINE dia_obs_wri 
    613661      !!---------------------------------------------------------------------- 
    614662      !!                    ***  ROUTINE dia_obs_wri  *** 
     
    618666      !! ** Method  : Call observation diagnostic output routines 
    619667      !! 
    620       !! ** Action  :  
     668      !! ** Action  : 
    621669      !! 
    622670      !! History : 
     
    628676      !!        !  15-08  (M. Martin) Combined writing for prof and surf types 
    629677      !!---------------------------------------------------------------------- 
     678      !! * Modules used 
     679      USE obs_rot_vel          ! Rotation of velocities 
     680 
    630681      IMPLICIT NONE 
    631682 
    632683      !! * Local declarations 
    633684      INTEGER :: jtype                    ! Data set loop variable 
     685      INTEGER :: jo, jvar, jk 
     686      REAL(wp), DIMENSION(:), ALLOCATABLE :: & 
     687         & zu, & 
     688         & zv 
    634689 
    635690      !----------------------------------------------------------------------- 
     
    640695 
    641696         DO jtype = 1, nproftypes 
     697 
     698            IF ( TRIM(cobstypesprof(jtype)) == 'vel' ) THEN 
     699 
     700               ! For velocity data, rotate the model velocities to N/S, E/W 
     701               ! using the compressed data structure. 
     702               ALLOCATE( & 
     703                  & zu(profdataqc(jtype)%nvprot(1)), & 
     704                  & zv(profdataqc(jtype)%nvprot(2))  & 
     705                  & ) 
     706 
     707               CALL obs_rotvel( profdataqc(jtype), nn_2dint, zu, zv ) 
     708 
     709               DO jo = 1, profdataqc(jtype)%nprof 
     710                  DO jvar = 1, 2 
     711                     DO jk = profdataqc(jtype)%npvsta(jo,jvar), profdataqc(jtype)%npvend(jo,jvar) 
     712 
     713                        IF ( jvar == 1 ) THEN 
     714                           profdataqc(jtype)%var(jvar)%vmod(jk) = zu(jk) 
     715                        ELSE 
     716                           profdataqc(jtype)%var(jvar)%vmod(jk) = zv(jk) 
     717                        ENDIF 
     718 
     719                     END DO 
     720                  END DO 
     721               END DO 
     722 
     723               DEALLOCATE( zu ) 
     724               DEALLOCATE( zv ) 
     725 
     726            END IF 
    642727 
    643728            CALL obs_prof_decompress( profdataqc(jtype), & 
    644729               &                      profdata(jtype), .TRUE., numout ) 
    645730 
    646             CALL obs_wri_prof( profdata(jtype), nn_2dint ) 
     731            CALL obs_wri_prof( profdata(jtype) ) 
    647732 
    648733         END DO 
Note: See TracChangeset for help on using the changeset viewer.