Changeset 2332 in lmdz_wrf


Ignore:
Timestamp:
Feb 12, 2019, 2:41:13 PM (6 years ago)
Author:
lfita
Message:

Adding use of 'polygons' at the end of `rangefaces' in order to homogenously join ranges

Location:
trunk/tools
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/diag_tools.py

    r2277 r2332  
    14801480    """
    14811481    fname = 'Forcompute_range_faces'
    1482 
    1483     print fname + 'Lluis:', dsfilt, dsnewrng, hvalleyrng
    14841482
    14851483    vardims = dimns[:]
  • trunk/tools/module_ForDiagnostics.f90

    r2330 r2332  
    99  USE module_definitions
    1010  USE module_generic
     11  USE module_scientific
    1112  USE module_ForDiagnosticsVars
    1213
     
    978979    INTEGER, DIMENSION(2,d2)                             :: ranges2
    979980    INTEGER, DIMENSION(d1,d2)                            :: iranges
     981    LOGICAL, DIMENSION(d1,d2)                            :: Lranges
    980982
    981983!!!!!!! Variables
     
    10531055
    10541056    ! 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)
    1059     END IF
     1057    Lranges = iranges /= 0
     1058    CALL polygons(.FALSE., d1, d2, Lranges, ranges, Nranges)
     1059
     1060!    IF (TRIM(face) == 'WE') THEN
     1061!      CALL xzones_homogenization(d1, d2, iranges, ranges)
     1062!    ELSE IF (TRIM(face) == 'SN') THEN
     1063!      CALL yzones_homogenization(d1, d2, iranges, ranges)
     1064!    END IF
    10601065
    10611066    RETURN
  • trunk/tools/module_scientific.f90

    r2328 r2332  
    25762576  INTEGER                                                :: ierr
    25772577  INTEGER, DIMENSION(:,:), ALLOCATABLE                   :: borders
    2578   LOGICAL, DIMENSION(dx,dy)                              :: isborder, isbordery
     2578  LOGICAL, DIMENSION(dx,dy)                              :: isborder, isbordery, borderp
    25792579  INTEGER, DIMENSION(:,:,:), ALLOCATABLE                 :: paths
    25802580  INTEGER                                                :: Npath
     
    25842584  INTEGER, DIMENSION(:,:), ALLOCATABLE                   :: vertxs, points
    25852585  LOGICAL, DIMENSION(:), ALLOCATABLE                     :: isin
     2586  CHARACTER(len=1000)                                    :: boundsS
    25862587
    25872588!!!!!!! Variables
     
    25962597
    25972598  ! The mathematical maximum woiuld be dx*dy/4, but let's be optimistic... (sorry Jero)
    2598   Nppt = dx*dy/10
     2599  Nppt = dx*dy/100
    25992600
    26002601  IF (ALLOCATED(borders)) DEALLOCATE(borders)
     
    26052606  IF (ALLOCATED(paths)) DEALLOCATE(paths)
    26062607  ALLOCATE(paths(Nppt,Nppt,2), STAT=ierr)
    2607   msg = "Problems allocating matrix 'paths'"
     2608  boundsS = vectorI_S(3, (/Nppt, Nppt, 2/))
     2609  msg = "Problems allocating matrix 'paths' shape: " // TRIM(boundsS) // " try to reduce Nppt " //    &
     2610    "and recompile"
    26082611  CALL ErrMsg(msg, fname, ierr)
    26092612
     
    26332636  END DO
    26342637
    2635   CALL borders_matrixL(dx, dy, Nppt, boolmat, borders, isborder, isbordery)
     2638  CALL borders_matrixL(dbg, dx, dy, Nppt, boolmat, borders, isborder, isbordery)
    26362639  CALL paths_border(dbg, dx, dy, isborder, Nppt, borders, paths, Npath, Nptpaths)
    26372640
     
    26512654    isin = .FALSE.
    26522655
    2653     IF (dbg) PRINT *, '  path:', ip, ' N pts:', Nptpaths(ip)
     2656    IF (dbg) THEN
     2657      PRINT *, '  path:', ip, ' N pts:', Nptpaths(ip)
     2658      DO j=1, Nptpaths(ip)
     2659        PRINT *, '      ',j,':',paths(ip,j,:)
     2660      END DO
     2661    END IF
     2662
     2663    borderp = .FALSE.
     2664    DO j=1,Nptpaths(ip)
     2665      borderp(paths(ip,j,1),paths(ip,j,2)) = .TRUE.
     2666    END DO
    26542667
    26552668    CALL path_properties(dx, dy, boolmat, Nptpaths(ip), paths(ip,1:Nptpaths(ip),:), xtrx, xtry,       &
     
    26672680    END IF
    26682681 
    2669     CALL gridpoints_InsidePolygon(dx, dy, isbordery, Nptpaths(ip), paths(ip,1:Nptpaths(ip),:), Nvertx,&
    2670       xtrx, xtry, vertxs, Npts, points, isin)
     2682    CALL gridpoints_InsidePolygon(dbg, dx, dy, isbordery, Nptpaths(ip), paths(ip,1:Nptpaths(ip),:),   &
     2683      Nvertx, xtrx, xtry, vertxs, Npts, points, isin)
    26712684
    26722685    ! Filling polygons
     
    26892702  CALL clean_polygons(dx, dy, boolmat, polys, Npoly, dbg)
    26902703
    2691   DEALLOCATE (borders) 
    2692   DEALLOCATE (Nptpaths)
    2693   DEALLOCATE (paths)
    2694   DEALLOCATE (vertxs)
    2695   DEALLOCATE (points)
    2696   DEALLOCATE (isin)
     2704  IF (ALLOCATED(borders)) DEALLOCATE (borders) 
     2705  IF (ALLOCATED(Nptpaths)) DEALLOCATE (Nptpaths)
     2706  IF (ALLOCATED(paths)) DEALLOCATE (paths)
     2707  IF (ALLOCATED(vertxs)) DEALLOCATE (vertxs)
     2708  IF (ALLOCATED(points)) DEALLOCATE (points)
     2709  IF (ALLOCATED(isin)) DEALLOCATE (isin)
    26972710
    26982711  RETURN
     
    29042917  END SUBROUTINE path_properties
    29052918
    2906   SUBROUTINE gridpoints_InsidePolygon(dx, dy, isbrdr, Npath, path, Nvrtx, xpathxtrm, ypathxtrm,       &
     2919  SUBROUTINE gridpoints_InsidePolygon(dbg, dx, dy, isbrdr, Npath, path, Nvrtx, xpathxtrm, ypathxtrm,  &
    29072920    vrtxs, Npts, pts, inside)
    29082921! Subroutine to determine if a series of grid points are inside a polygon following ray casting algorithm
     
    29122925
    29132926  INTEGER, INTENT(in)                                    :: dx,dy,Npath,Nvrtx,Npts
     2927  LOGICAL, INTENT(in)                                    :: dbg
    29142928  LOGICAL, DIMENSION(dx,dy), INTENT(in)                  :: isbrdr
    29152929  INTEGER, DIMENSION(Npath,2), INTENT(in)                :: path
     
    29472961  halo_brdr = .FALSE.
    29482962
     2963  IF (dbg) PRINT *,'Border _______'
    29492964  DO i=1,dx
    29502965    halo_brdr(i+1,2:dy+1) = isbrdr(i,:)
     2966    IF (dbg) PRINT *,isbrdr(i,:)
    29512967  END DO
    29522968
     
    29792995        IF (halo_brdr(ix+1,j+1) .AND. (ispath /= -1) .AND. (halo_brdr(ix+1,j+1) .EQV. halo_brdr(ix+1,j+2))) THEN
    29802996          Nbrbrdr = Nbrbrdr + 1
     2997          IF (dbg) PRINT *,'    ',Nbrbrdr,' Consec brdrs:', halo_brdr(ix+1,j+1), halo_brdr(ix+1,j+2), &
     2998             '(', ix,j,';', ix,j+1,')', isbrdr(ix,j), isbrdr(ix,j+1)
    29812999        ELSE
    29823000          ! Will remove that consecutive borders above 2
    29833001          IF (Nbrbrdr /= 0) THEN
     3002            IF (dbg) PRINT *, ix,',',iy,';', Nintersecs, '  amount of consecutive borders:', Nbrbrdr, &
     3003              ' removing:', MAX(Nbrbrdr-1, 0)
    29843004            Nintersecs = Nintersecs - MAX(Nbrbrdr-1, 0)
    29853005            Nbrbrdr = 0
     
    29883008      END DO
    29893009      IF (MOD(Nintersecs,2) /= 0) inside(ip) = .TRUE.
     3010      IF (dbg) PRINT *,ip,'    point:', ix, iy, 'isbrdr:', isbrdr(ix,1:iy-1), 'y-ray:', halo_brdr(ix+1,1:iy), 'inside:', inside(ip)
    29903011    END IF
    29913012
     
    30653086END SUBROUTINE look_clockwise_borders
    30663087
    3067 SUBROUTINE borders_matrixL(dx,dy,dxy,Lmat,brdrs,isbrdr,isbrdry)
     3088SUBROUTINE borders_matrixL(dbg,dx,dy,dxy,Lmat,brdrs,isbrdr,isbrdry)
    30683089! Subroutine to provide the borders of a logical array (interested in .TRUE.)
    30693090
     
    30713092
    30723093  INTEGER, INTENT(in)                                    :: dx,dy,dxy
     3094  LOGICAL, INTENT(in)                                    :: dbg
    30733095  LOGICAL, DIMENSION(dx,dy), INTENT(in)                  :: Lmat
    30743096  INTEGER, DIMENSION(dxy,2), INTENT(out)                 :: brdrs
     
    31853207  END DO
    31863208
     3209  IF (dbg) THEN
     3210    PRINT *,' BORDERS _______ x y'
     3211    DO i=1,dx
     3212      PRINT *,isbrdr(i,:), '       ', isbrdry(i,:)
     3213    END DO
     3214  END IF
     3215
    31873216  RETURN
    31883217
     
    32223251  fname = 'paths_border'
    32233252
     3253  IF (dbg) PRINT *, TRIM(fname) // ' ...'
     3254
    32243255  ! Sarting matrix
    32253256  paths = -1
     
    32383269   
    32393270  IF (dbg) THEN
     3271    PRINT *,'  isborder ______'
     3272    DO i=1,dx
     3273      PRINT *,isborder(i,:)
     3274    END DO
     3275
    32403276    PRINT *,'    borders _______'
    32413277    DO i=1,Nbrdr
     
    32783314        IF (dbg) PRINT *,ipath,'iip jip:', iip, ijp
    32793315        found = .FALSE.
    3280         CALL look_clockwise_borders(dx,dy,Nppt,borders,gotbrdr,isborder,iip,ijp,.FALSE.,iif,jjf,iff)
     3316        CALL look_clockwise_borders(dx,dy,Nppt,borders,gotbrdr,isborder,iip,ijp,dbg,iif,jjf,iff)
    32813317        IF (iif /= -1) THEN
    32823318          ip=ip+1
     
    33103346              iip = paths(ipath,i,1)
    33113347              ijp = paths(ipath,i,2)
    3312               CALL look_clockwise_borders(dx,dy,Nppt,borders,gotbrdr,isborder,iip,ijp,.FALSE., iif,   &
     3348              CALL look_clockwise_borders(dx,dy,Nppt,borders, gotbrdr, isborder,iip, ijp, dbg, iif,   &
    33133349                jjf,iff)
    33143350              IF (iif /= -1 .AND. iff /= -1) THEN
Note: See TracChangeset for help on using the changeset viewer.