Changeset 5712 for LMDZ6/trunk/libf/phylmd/cv_routines.f90
- Timestamp:
- Jun 16, 2025, 7:12:42 PM (3 weeks ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/cv_routines.f90
r5711 r5712 407 407 END SUBROUTINE cv_trigger 408 408 409 SUBROUTINE cv_compress(len, nloc, ncum, nd, iflag1, nk1, icb1, cbmf1, plcl1, &409 SUBROUTINE cv_compress(len, nloc, ncum, nd, iflag1, compress, nk1, icb1, cbmf1, plcl1, & 410 410 tnk1, qnk1, gznk1, t1, q1, qs1, u1, v1, gz1, h1, lv1, cpn1, p1, ph1, tv1, & 411 411 tp1, tvp1, clw1, iflag, nk, icb, cbmf, plcl, tnk, qnk, gznk, t, q, qs, u, & … … 419 419 INTEGER len, ncum, nd, nloc 420 420 INTEGER iflag1(len), nk1(len), icb1(len) 421 LOGICAL compress 421 422 REAL cbmf1(len), plcl1(len), tnk1(len), qnk1(len), gznk1(len) 422 423 REAL t1(len, nd), q1(len, nd), qs1(len, nd), u1(len, nd), v1(len, nd) … … 439 440 CHARACTER (LEN=80) :: abort_message 440 441 441 442 DO k = 1, nl + 1 442 IF (compress) THEN 443 DO k = 1, nl + 1 444 nn = 0 445 DO i = 1, len 446 IF (iflag1(i)==0) THEN 447 nn = nn + 1 448 t(nn, k) = t1(i, k) 449 q(nn, k) = q1(i, k) 450 qs(nn, k) = qs1(i, k) 451 u(nn, k) = u1(i, k) 452 v(nn, k) = v1(i, k) 453 gz(nn, k) = gz1(i, k) 454 h(nn, k) = h1(i, k) 455 lv(nn, k) = lv1(i, k) 456 cpn(nn, k) = cpn1(i, k) 457 p(nn, k) = p1(i, k) 458 ph(nn, k) = ph1(i, k) 459 tv(nn, k) = tv1(i, k) 460 tp(nn, k) = tp1(i, k) 461 tvp(nn, k) = tvp1(i, k) 462 clw(nn, k) = clw1(i, k) 463 END IF 464 END DO 465 END DO 466 467 IF (nn/=ncum) THEN 468 WRITE (lunout, *) 'strange! nn not equal to ncum: ', nn, ncum 469 abort_message = '' 470 CALL abort_physic(modname, abort_message, 1) 471 END IF 472 443 473 nn = 0 444 474 DO i = 1, len 445 475 IF (iflag1(i)==0) THEN 446 476 nn = nn + 1 447 t(nn, k) = t1(i, k) 448 q(nn, k) = q1(i, k) 449 qs(nn, k) = qs1(i, k) 450 u(nn, k) = u1(i, k) 451 v(nn, k) = v1(i, k) 452 gz(nn, k) = gz1(i, k) 453 h(nn, k) = h1(i, k) 454 lv(nn, k) = lv1(i, k) 455 cpn(nn, k) = cpn1(i, k) 456 p(nn, k) = p1(i, k) 457 ph(nn, k) = ph1(i, k) 458 tv(nn, k) = tv1(i, k) 459 tp(nn, k) = tp1(i, k) 460 tvp(nn, k) = tvp1(i, k) 461 clw(nn, k) = clw1(i, k) 462 END IF 463 END DO 464 END DO 465 466 IF (nn/=ncum) THEN 467 WRITE (lunout, *) 'strange! nn not equal to ncum: ', nn, ncum 468 abort_message = '' 469 CALL abort_physic(modname, abort_message, 1) 470 END IF 471 472 nn = 0 473 DO i = 1, len 474 IF (iflag1(i)==0) THEN 475 nn = nn + 1 476 cbmf(nn) = cbmf1(i) 477 plcl(nn) = plcl1(i) 478 tnk(nn) = tnk1(i) 479 qnk(nn) = qnk1(i) 480 gznk(nn) = gznk1(i) 481 nk(nn) = nk1(i) 482 icb(nn) = icb1(i) 483 iflag(nn) = iflag1(i) 484 END IF 485 END DO 477 cbmf(nn) = cbmf1(i) 478 plcl(nn) = plcl1(i) 479 tnk(nn) = tnk1(i) 480 qnk(nn) = qnk1(i) 481 gznk(nn) = gznk1(i) 482 nk(nn) = nk1(i) 483 icb(nn) = icb1(i) 484 iflag(nn) = iflag1(i) 485 END IF 486 END DO 487 488 ELSE !compress 489 t(:, 1:nl+1) = t1(:, 1:nl+1) 490 q(:, 1:nl+1) = q1(:, 1:nl+1) 491 qs(:, 1:nl+1) = qs1(:, 1:nl+1) 492 u(:, 1:nl+1) = u1(:, 1:nl+1) 493 v(:, 1:nl+1) = v1(:, 1:nl+1) 494 gz(:, 1:nl+1) = gz1(:, 1:nl+1) 495 h(:, 1:nl+1) = h1(:, 1:nl+1) 496 lv(:, 1:nl+1) = lv1(:, 1:nl+1) 497 cpn(:, 1:nl+1) = cpn1(:, 1:nl+1) 498 p(:, 1:nl+1) = p1(:, 1:nl+1) 499 ph(:, 1:nl+1) = ph1(:, 1:nl+1) 500 tv(:, 1:nl+1) = tv1(:, 1:nl+1) 501 tp(:, 1:nl+1) = tp1(:, 1:nl+1) 502 tvp(:, 1:nl+1) = tvp1(:, 1:nl+1) 503 clw(:, 1:nl+1) = clw1(:, 1:nl+1) 504 505 cbmf(:) = cbmf1(:) 506 plcl(:) = plcl1(:) 507 tnk(:) = tnk1(:) 508 qnk(:) = qnk1(:) 509 gznk(:) = gznk1(:) 510 nk(:) = nk1(:) 511 icb(:) = icb1(:) 512 iflag(:) = iflag1(:) 513 ENDIF 486 514 487 515 DO k = 1, nl … … 1702 1730 END SUBROUTINE cv_yield 1703 1731 1704 SUBROUTINE cv_uncompress(nloc, len, ncum, nd, idcum, i flag, precip, cbmf, ft, &1732 SUBROUTINE cv_uncompress(nloc, len, ncum, nd, idcum, is_convect, compress, iflag, precip, cbmf, ft, & 1705 1733 fq, fu, fv, ma, qcondc, iflag1, precip1, cbmf1, ft1, fq1, fu1, fv1, ma1, & 1706 1734 qcondc1) … … 1712 1740 INTEGER len, ncum, nd, nloc 1713 1741 INTEGER idcum(nloc) 1742 LOGICAL is_convect(nloc) 1743 LOGICAL compress 1714 1744 INTEGER iflag(nloc) 1715 1745 REAL precip(nloc), cbmf(nloc) … … 1727 1757 ! local variables: 1728 1758 INTEGER i, k 1729 1730 DO i = 1, ncum 1731 precip1(idcum(i)) = precip(i) 1732 cbmf1(idcum(i)) = cbmf(i) 1733 iflag1(idcum(i)) = iflag(i) 1734 END DO 1735 1736 DO k = 1, nl 1759 1760 IF (compress) THEN 1737 1761 DO i = 1, ncum 1738 ft1(idcum(i), k) = ft(i, k) 1739 fq1(idcum(i), k) = fq(i, k) 1740 fu1(idcum(i), k) = fu(i, k) 1741 fv1(idcum(i), k) = fv(i, k) 1742 ma1(idcum(i), k) = ma(i, k) 1743 qcondc1(idcum(i), k) = qcondc(i, k) 1744 END DO 1745 END DO 1746 1762 precip1(idcum(i)) = precip(i) 1763 cbmf1(idcum(i)) = cbmf(i) 1764 iflag1(idcum(i)) = iflag(i) 1765 END DO 1766 1767 DO k = 1, nl 1768 DO i = 1, ncum 1769 ft1(idcum(i), k) = ft(i, k) 1770 fq1(idcum(i), k) = fq(i, k) 1771 fu1(idcum(i), k) = fu(i, k) 1772 fv1(idcum(i), k) = fv(i, k) 1773 ma1(idcum(i), k) = ma(i, k) 1774 qcondc1(idcum(i), k) = qcondc(i, k) 1775 END DO 1776 END DO 1777 ELSE 1778 DO i = 1, len 1779 IF (is_convect(i)) THEN 1780 precip1(i) = precip(i) 1781 cbmf1(i) = cbmf(i) 1782 iflag1(i) = iflag(i) 1783 ENDIF 1784 END DO 1785 1786 DO k = 1, nl 1787 DO i = 1, ncum 1788 IF (is_convect(i)) THEN 1789 ft1(i, k) = ft(i, k) 1790 fq1(i, k) = fq(i, k) 1791 fu1(i, k) = fu(i, k) 1792 fv1(i, k) = fv(i, k) 1793 ma1(i, k) = ma(i, k) 1794 qcondc1(i, k) = qcondc(i, k) 1795 ENDIF 1796 END DO 1797 END DO 1798 ENDIF 1747 1799 RETURN 1748 1800 END SUBROUTINE cv_uncompress
Note: See TracChangeset
for help on using the changeset viewer.