Changeset 2330 in lmdz_wrf


Ignore:
Timestamp:
Feb 11, 2019, 7:43:21 PM (6 years ago)
Author:
lfita
Message:

Adding x/y look for continuity (not totally working!)

Location:
trunk/tools
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/module_ForDiagnostics.f90

    r2285 r2330  
    977977    INTEGER, DIMENSION(2,d1)                             :: ranges1
    978978    INTEGER, DIMENSION(2,d2)                             :: ranges2
     979    INTEGER, DIMENSION(d1,d2)                            :: iranges
    979980
    980981!!!!!!! Variables
     
    10191020        END DO
    10201021        DO i=1, Nranges
    1021           ranges(ranges1(1,i):ranges1(2,i),j) = i
     1022          iranges(ranges1(1,i):ranges1(2,i),j) = i
    10221023          rangeshgtmax(ranges1(1,i):ranges1(2,i),j) = rangeshgtmax1(i)
    10231024          ptrangeshgtmax(irangeshgtmax1(i),j) = 1
     
    10391040        END DO
    10401041        DO j=1, Nranges
    1041           ranges(i,ranges2(1,j):ranges2(2,j)) = j
     1042          iranges(i,ranges2(1,j):ranges2(2,j)) = j
    10421043          rangeshgtmax(i,ranges2(1,j):ranges2(2,j)) = rangeshgtmax2(j)
    10431044          ptrangeshgtmax(i,irangeshgtmax2(j)) = 1
     
    10491050      PRINT *,'    accepted ones: WE, SN'
    10501051      STOP
     1052    END IF
     1053
     1054    ! Homogenizing indices of the ranges
     1055    IF (TRIM(face) == 'WE') THEN
     1056      CALL xzones_homogenization(d1, d2, iranges, ranges)
     1057    ELSE IF (TRIM(face) == 'SN') THEN
     1058      CALL yzones_homogenization(d1, d2, iranges, ranges)
    10511059    END IF
    10521060
  • trunk/tools/module_generic.f90

    r2328 r2330  
    1818! RangeR_K: Function to provide a range of d1 from 'iniv' to 'endv', of real(r_k) values in a vector
    1919! stoprun: Subroutine to stop running and print a message
    20 ! zones_homogenization: Subroutine to homogenize 2D contiguous zones, zones might be contiguous, but
    21 !   with different number assigned !
     20! xzones_homogenization: Subroutine to homogenize 2D contiguous zones along x-axis. Zones might be
     21!   contiguous, but with different number assigned !
     22! yzones_homogenization: Subroutine to homogenize 2D contiguous zones along y-axis. Zones might be
     23!   contiguous, but with different number assigned !
    2224
    2325  USE module_definitions
     
    440442  END SUBROUTINE stoprun
    441443
    442   SUBROUTINE zones_homogenization(dx, dy, inzones, outzones)
    443 ! Subroutine to homogenize 2D contiguous zones, zones might be contiguous, but with different number assigned !
     444  SUBROUTINE xzones_homogenization(dx, dy, inzones, outzones)
     445! Subroutine to homogenize 2D contiguous zones along x-axis, zones might be contiguous, but with
     446!   different number assigned !
    444447!   Here we have a 2D matrix of integers, with contiguous integer filled zones, zero outside any zone
    445448!   It might be, that within the same zone, might be lines which do not share the same integer
     
    459462    INTEGER                                              :: Nmaxzones, TOTzones
    460463    LOGICAL                                              :: assigned
    461     INTEGER, DIMENSION(dy)                               :: prevline
    462     INTEGER, DIMENSION(dx)                               :: Nyzones
     464    INTEGER, DIMENSION(dx)                               :: prevline
     465    INTEGER, DIMENSION(dy)                               :: Nxzones
    463466    INTEGER, DIMENSION(:,:,:), ALLOCATABLE               :: zones
    464467
     
    468471! outzones: zones homogenized
    469472
    470     fname = 'zones_homogenization'
     473    fname = 'xzones_homogenization'
     474
     475    ! Maximum possible number of zones
     476    Nmaxzones = INT((dx/2)*(dy/2))
     477
     478    ! Matrix with [i,j,Nzone,izone/ezone]
     479    IF (ALLOCATED(zones)) DEALLOCATE(zones)
     480    ALLOCATE(zones(dy,Nmaxzones,3))
     481
     482    zones = 0
     483    Nxzones = 0
     484    ! Getting beginning/end of y-bands
     485    DO j=1, dy
     486      k = 0
     487      i = 1
     488      IF (inzones(i,j) /= 0) THEN
     489        k = k + 1
     490        zones(j,k,1) = i
     491        zones(j,k,3) = k
     492      END IF
     493      DO i=2, dx
     494        IF ( (inzones(i,j) /= 0) .AND. (inzones(i-1,j) == 0)) THEN
     495          k = k+1
     496          zones(j,k,1) = i
     497          zones(j,k,3) = k
     498        ELSE IF ( (inzones(i-1,j) /= 0) .AND. (inzones(i,j) == 0)) THEN
     499          zones(j,k,2) = i-1
     500          zones(j,k,3) = k
     501        END IF
     502      END DO
     503      IF (k > 0) THEN
     504        IF (zones(j,k,2) == 0) zones(j,k,2) = dx
     505      END IF
     506      Nxzones(j) = k
     507    END DO
     508
     509    ! Homogenizing contigous zones
     510    outzones = 0
     511    TOTzones = 0
     512    j = 1
     513    DO k = 1, Nxzones(j)
     514      TOTzones = TOTzones + 1
     515      DO i=zones(j,k,1), zones(j,k,2)
     516        outzones(i,j) = TOTzones
     517      END DO
     518    END DO
     519
     520    DO j=2, dy
     521      prevline = outzones(:,j-1)
     522      DO k = 1, Nxzones(j)
     523        assigned = .FALSE.
     524        DO i=zones(j,k,1), zones(j,k,2)
     525          IF (prevline(i) /= 0) THEN
     526            outzones(zones(j,k,1):zones(j,k,2),j) = prevline(i)
     527            assigned = .TRUE.
     528            EXIT
     529          END IF
     530        END DO
     531        IF (.NOT.assigned) THEN
     532          TOTzones = TOTzones + 1
     533          DO i=zones(j,k,1), zones(j,k,2)
     534            outzones(i,j) = TOTzones
     535          END DO
     536        END IF
     537      END DO
     538    END DO
     539
     540    IF (ALLOCATED(zones)) DEALLOCATE(zones)
     541
     542  END SUBROUTINE xzones_homogenization
     543
     544  SUBROUTINE yzones_homogenization(dx, dy, inzones, outzones)
     545! Subroutine to homogenize 2D contiguous zones along y-axis, zones might be contiguous, but with
     546!   different number assigned !
     547!   Here we have a 2D matrix of integers, with contiguous integer filled zones, zero outside any zone
     548!   It might be, that within the same zone, might be lines which do not share the same integer
     549!     0 0 0 0 0          0 0 0 0 0
     550!     0 1 1 0 0          0 1 1 0 0
     551!     0 2 0 0 1    == >  0 1 0 0 2
     552!     0 1 1 0 0          0 1 1 0 0
     553
     554    IMPLICIT NONE
     555
     556    INTEGER, INTENT(in)                                  :: dx, dy
     557    INTEGER, DIMENSION(dx,dy), INTENT(in)                :: inzones
     558    INTEGER, DIMENSION(dx,dy), INTENT(out)               :: outzones
     559
     560! Local
     561    INTEGER                                              :: i,j,k
     562    INTEGER                                              :: Nmaxzones, TOTzones
     563    LOGICAL                                              :: assigned
     564    INTEGER, DIMENSION(dy)                               :: prevline
     565    INTEGER, DIMENSION(dx)                               :: Nyzones
     566    INTEGER, DIMENSION(:,:,:), ALLOCATABLE               :: zones
     567
     568!!!!!!! Variables
     569! dx, dy: Shape of the 2D space
     570! inzones: zones to homogenize
     571! outzones: zones homogenized
     572
     573    fname = 'yzones_homogenization'
    471574
    472575    ! Maximum possible number of zones
     
    537640    IF (ALLOCATED(zones)) DEALLOCATE(zones)
    538641
    539   END SUBROUTINE zones_homogenization
     642  END SUBROUTINE yzones_homogenization
    540643
    541644END MODULE module_generic
  • trunk/tools/nc_var_tools.py

    r2329 r2330  
    2943729437        quit(-1)
    2943829438
     29439   
     29440
    2943929441    onc = NetCDFFile(ncfile, 'r')
    2944029442    if not onc.variables.has_key(varname):
Note: See TracChangeset for help on using the changeset viewer.