Changeset 2330 in lmdz_wrf
- Timestamp:
- Feb 11, 2019, 7:43:21 PM (6 years ago)
- Location:
- trunk/tools
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tools/module_ForDiagnostics.f90
r2285 r2330 977 977 INTEGER, DIMENSION(2,d1) :: ranges1 978 978 INTEGER, DIMENSION(2,d2) :: ranges2 979 INTEGER, DIMENSION(d1,d2) :: iranges 979 980 980 981 !!!!!!! Variables … … 1019 1020 END DO 1020 1021 DO i=1, Nranges 1021 ranges(ranges1(1,i):ranges1(2,i),j) = i1022 iranges(ranges1(1,i):ranges1(2,i),j) = i 1022 1023 rangeshgtmax(ranges1(1,i):ranges1(2,i),j) = rangeshgtmax1(i) 1023 1024 ptrangeshgtmax(irangeshgtmax1(i),j) = 1 … … 1039 1040 END DO 1040 1041 DO j=1, Nranges 1041 ranges(i,ranges2(1,j):ranges2(2,j)) = j1042 iranges(i,ranges2(1,j):ranges2(2,j)) = j 1042 1043 rangeshgtmax(i,ranges2(1,j):ranges2(2,j)) = rangeshgtmax2(j) 1043 1044 ptrangeshgtmax(i,irangeshgtmax2(j)) = 1 … … 1049 1050 PRINT *,' accepted ones: WE, SN' 1050 1051 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) 1051 1059 END IF 1052 1060 -
trunk/tools/module_generic.f90
r2328 r2330 18 18 ! RangeR_K: Function to provide a range of d1 from 'iniv' to 'endv', of real(r_k) values in a vector 19 19 ! 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 ! 22 24 23 25 USE module_definitions … … 440 442 END SUBROUTINE stoprun 441 443 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 ! 444 447 ! Here we have a 2D matrix of integers, with contiguous integer filled zones, zero outside any zone 445 448 ! It might be, that within the same zone, might be lines which do not share the same integer … … 459 462 INTEGER :: Nmaxzones, TOTzones 460 463 LOGICAL :: assigned 461 INTEGER, DIMENSION(d y) :: prevline462 INTEGER, DIMENSION(d x) :: Nyzones464 INTEGER, DIMENSION(dx) :: prevline 465 INTEGER, DIMENSION(dy) :: Nxzones 463 466 INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: zones 464 467 … … 468 471 ! outzones: zones homogenized 469 472 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' 471 574 472 575 ! Maximum possible number of zones … … 537 640 IF (ALLOCATED(zones)) DEALLOCATE(zones) 538 641 539 END SUBROUTINE zones_homogenization642 END SUBROUTINE yzones_homogenization 540 643 541 644 END MODULE module_generic -
trunk/tools/nc_var_tools.py
r2329 r2330 29437 29437 quit(-1) 29438 29438 29439 29440 29439 29441 onc = NetCDFFile(ncfile, 'r') 29440 29442 if not onc.variables.has_key(varname):
Note: See TracChangeset
for help on using the changeset viewer.