Changeset 2555 in lmdz_wrf


Ignore:
Timestamp:
May 24, 2019, 11:24:47 PM (6 years ago)
Author:
lfita
Message:

Fixing `grid_within_polygon' for any contingency (mostly polygon smaller than grid resolution)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/module_scientific.f90

    r2554 r2555  
    49914991          END DO
    49924992
    4993 !          ! Getting grid faces
    4994 !          DO iv=1, Nvertexmax-1
    4995 !            IF (.NOT.within(ix,iy)) THEN
    4996 !              IF (xBvals(ix,iy,iv) /= fillvalI) THEN
    4997 !                face(1,:) = (/ xBvals(ix,iy,iv), yBvals(ix,iy,iv) /)
    4998 !                face(2,:) = (/ xBvals(ix,iy,iv+1), yBvals(ix,iy,iv+1) /)
    4999 !                DO ivA=1, NvertexA-1
    5000 !                  faceA(1,:) = (/ polygonA(ivA,1), polygonA(ivA,2) /)
    5001 !                  faceA(2,:) = (/polygonA(ivA+1,1), polygonA(ivA+1,2) /)
    5002 !                  CALL intersectfaces(face, faceA, cross, crosspoint)
    5003 !                  IF (cross /= 0) THEN
    5004 !                    Ngridsin = Ngridsin + 1
    5005 !                    ! Getting coordinates
    5006 !                    gridsin(Ngridsin,1) = ix
    5007 !                    gridsin(Ngridsin,2) = iy
    5008 !                    within(ix,iy) = .TRUE.
    5009 !                    CYCLE
    5010 !                  END IF
    5011 !                END DO
    5012 !                IF (.NOT.within(ix,iy)) THEN
    5013 !                  faceA(1,:) = (/ polygonA(NvertexA,1), polygonA(NvertexA,2) /)
    5014 !                  faceA(2,:) = (/polygonA(1,1), polygonA(1,2) /)
    5015 !                  CALL intersectfaces(face, faceA, cross, crosspoint)
    5016 !                  IF (cross /= 0) THEN
    5017 !                    Ngridsin = Ngridsin + 1
    5018 !                    ! Getting coordinates
    5019 !                    gridsin(Ngridsin,1) = ix
    5020 !                    gridsin(Ngridsin,2) = iy
    5021 !                    within(ix,iy) = .TRUE.
    5022 !                  END IF
    5023 !                END IF
    5024 !              END IF
    5025 !            END IF
    5026 !          END DO
    5027 !          iv = Nvertexmax
    5028 !          IF (.NOT.within(ix,iy)) THEN
    5029 !            IF (xBvals(ix,iy,iv) /= fillvalI) THEN
    5030 !              face(1,:) = (/ xBvals(ix,iy,iv), yBvals(ix,iy,iv) /)
    5031 !              face(2,:) = (/ xBvals(ix,iy,1), yBvals(ix,iy,1) /)
    5032 !              DO ivA=1, NvertexA-1
    5033 !                faceA(1,:) = (/ polygonA(ivA,1), polygonA(ivA,2) /)
    5034 !                faceA(2,:) = (/polygonA(ivA+1,1), polygonA(ivA+1,2) /)
    5035 !                CALL intersectfaces(face, faceA, cross, crosspoint)
    5036 !                IF (cross /= 0) THEN
    5037 !                  Ngridsin = Ngridsin + 1
    5038 !                  ! Getting coordinates
    5039 !                  gridsin(Ngridsin,1) = ix
    5040 !                  gridsin(Ngridsin,2) = iy
    5041 !                  within(ix,iy) = .TRUE.
    5042 !                  CYCLE
    5043 !                END IF
    5044 !              END DO
    5045 !              IF (.NOT.within(ix,iy)) THEN
    5046 !                faceA(1,:) = (/ polygonA(NvertexA,1), polygonA(NvertexA,2) /)
    5047 !                faceA(2,:) = (/polygonA(1,1), polygonA(1,2) /)
    5048 !                CALL intersectfaces(face, faceA, cross, crosspoint)
    5049 !                IF (cross /= 0) THEN
    5050 !                  Ngridsin = Ngridsin + 1
    5051 !                  ! Getting coordinates
    5052 !                  gridsin(Ngridsin,1) = ix
    5053 !                  gridsin(Ngridsin,2) = iy
    5054 !                  within(ix,iy) = .TRUE.
    5055 !               END IF
    5056 !              END IF
    5057 !            END IF
    5058 !          END IF
     4993          ! Getting grid faces
     4994          DO iv=1, Nvertexmax-1
     4995            IF (.NOT.within(ix,iy)) THEN
     4996              IF (xBvals(ix,iy,iv) /= fillvalI) THEN
     4997                face(1,:) = (/ xBvals(ix,iy,iv), yBvals(ix,iy,iv) /)
     4998                face(2,:) = (/ xBvals(ix,iy,iv+1), yBvals(ix,iy,iv+1) /)
     4999                DO ivA=1, NvertexA-1
     5000                  faceA(1,:) = (/ polygonA(ivA,1), polygonA(ivA,2) /)
     5001                  faceA(2,:) = (/polygonA(ivA+1,1), polygonA(ivA+1,2) /)
     5002                  CALL intersectfaces(face, faceA, cross, crosspoint)
     5003                  IF (cross /= 0) THEN
     5004                    Ngridsin = Ngridsin + 1
     5005                    ! Getting coordinates
     5006                    gridsin(Ngridsin,1) = ix
     5007                    gridsin(Ngridsin,2) = iy
     5008                    within(ix,iy) = .TRUE.
     5009                    CYCLE
     5010                  END IF
     5011                END DO
     5012                IF (.NOT.within(ix,iy)) THEN
     5013                  faceA(1,:) = (/ polygonA(NvertexA,1), polygonA(NvertexA,2) /)
     5014                  faceA(2,:) = (/polygonA(1,1), polygonA(1,2) /)
     5015                  CALL intersectfaces(face, faceA, cross, crosspoint)
     5016                  IF (cross /= 0) THEN
     5017                    Ngridsin = Ngridsin + 1
     5018                    ! Getting coordinates
     5019                    gridsin(Ngridsin,1) = ix
     5020                    gridsin(Ngridsin,2) = iy
     5021                    within(ix,iy) = .TRUE.
     5022                  END IF
     5023                END IF
     5024              END IF
     5025            END IF
     5026          END DO
     5027          iv = Nvertexmax
     5028          IF (.NOT.within(ix,iy)) THEN
     5029            IF (xBvals(ix,iy,iv) /= fillvalI) THEN
     5030              face(1,:) = (/ xBvals(ix,iy,iv), yBvals(ix,iy,iv) /)
     5031              face(2,:) = (/ xBvals(ix,iy,1), yBvals(ix,iy,1) /)
     5032              DO ivA=1, NvertexA-1
     5033                faceA(1,:) = (/ polygonA(ivA,1), polygonA(ivA,2) /)
     5034                faceA(2,:) = (/polygonA(ivA+1,1), polygonA(ivA+1,2) /)
     5035                CALL intersectfaces(face, faceA, cross, crosspoint)
     5036                IF (cross /= 0) THEN
     5037                  Ngridsin = Ngridsin + 1
     5038                  ! Getting coordinates
     5039                  gridsin(Ngridsin,1) = ix
     5040                  gridsin(Ngridsin,2) = iy
     5041                  within(ix,iy) = .TRUE.
     5042                  CYCLE
     5043                END IF
     5044              END DO
     5045              IF (.NOT.within(ix,iy)) THEN
     5046                faceA(1,:) = (/ polygonA(NvertexA,1), polygonA(NvertexA,2) /)
     5047                faceA(2,:) = (/polygonA(1,1), polygonA(1,2) /)
     5048                CALL intersectfaces(face, faceA, cross, crosspoint)
     5049                IF (cross /= 0) THEN
     5050                  Ngridsin = Ngridsin + 1
     5051                  ! Getting coordinates
     5052                  gridsin(Ngridsin,1) = ix
     5053                  gridsin(Ngridsin,2) = iy
     5054                  within(ix,iy) = .TRUE.
     5055               END IF
     5056              END IF
     5057            END IF
     5058          END IF
    50595059
    50605060          ! Inverting process, look polygon within grid
     
    50665066              gridpoly(iv,2) = yBvals(ix,iy,iv)
    50675067            END DO
    5068             print *,ix,iy,'gridpoly :', gridpoly
    50695068            DO ivA = 1, NvertexA
    50705069              IF (.NOT.within(ix,iy)) THEN
    50715070                 vertex = polygonA(ivA,:)
    5072                  print *,'  ', ivA, 'vertex :', vertex
    5073                  PRINT *,'  ',point_inside(vertex, Nvertexmax, gridpoly)
    50745071                 IF (point_inside(vertex, Nvertexmax, gridpoly)) THEN
    50755072                   Ngridsin = Ngridsin + 1
Note: See TracChangeset for help on using the changeset viewer.