Ignore:
Timestamp:
Jul 26, 2016 7:52:02 AM (8 years ago)
Author:
maronga
Message:

further modularization of land surface model (2D/3D output and restart data)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk/SOURCE/data_output_2d.f90

    r1961 r1972  
    1919! Current revisions:
    2020! -----------------
    21 !
     21! Output of land surface quantities is now done directly in the respective module
    2222!
    2323! Former revisions:
     
    174174   
    175175    USE land_surface_model_mod,                                                &
    176         ONLY:  c_liq, c_liq_av, c_soil_av, c_veg, c_veg_av, ghf_eb,            &
    177                ghf_eb_av, lai, lai_av, m_liq_eb, m_liq_eb_av, m_soil,          &
    178                m_soil_av, nzb_soil, nzt_soil, qsws_eb, qsws_eb_av,             &
    179                qsws_liq_eb, qsws_liq_eb_av, qsws_soil_eb, qsws_soil_eb_av,     &
    180                qsws_veg_eb, qsws_veg_eb_av, r_a, r_a_av, r_s, r_s_av, shf_eb,  &
    181                shf_eb_av, t_soil, t_soil_av, zs
     176        ONLY:  land_surface, lsm_data_output_2d, zs
    182177   
    183178#if defined( __netcdf )
     
    290285             CALL check_open( 101+av*10 )
    291286          ENDIF
    292 
    293287          IF ( data_output_2d_on_each_pe )  THEN
    294288             CALL check_open( 21 )
     
    433427                IF ( mode == 'xy' )  level_z = zu
    434428
    435              CASE ( 'c_liq*_xy' )        ! 2d-array
    436                 IF ( av == 0 )  THEN
    437                    DO  i = nxlg, nxrg
    438                       DO  j = nysg, nyng
    439                          local_pf(i,j,nzb+1) = c_liq(j,i) * c_veg(j,i)
    440                       ENDDO
    441                    ENDDO
    442                 ELSE
    443                    DO  i = nxlg, nxrg
    444                       DO  j = nysg, nyng
    445                          local_pf(i,j,nzb+1) = c_liq_av(j,i)
     429             CASE ( 'lpt_xy', 'lpt_xz', 'lpt_yz' )
     430                IF ( av == 0 )  THEN
     431                   to_be_resorted => pt
     432                ELSE
     433                   to_be_resorted => lpt_av
     434                ENDIF
     435                IF ( mode == 'xy' )  level_z = zu
     436
     437             CASE ( 'lwp*_xy' )        ! 2d-array
     438                IF ( av == 0 )  THEN
     439                   DO  i = nxlg, nxrg
     440                      DO  j = nysg, nyng
     441                         local_pf(i,j,nzb+1) = SUM( ql(nzb:nzt,j,i) *          &
     442                                                    dzw(1:nzt+1) )
     443                      ENDDO
     444                   ENDDO
     445                ELSE
     446                   DO  i = nxlg, nxrg
     447                      DO  j = nysg, nyng
     448                         local_pf(i,j,nzb+1) = lwp_av(j,i)
    446449                      ENDDO
    447450                   ENDDO
     
    450453                two_d = .TRUE.
    451454                level_z(nzb+1) = zu(nzb+1)
    452 
    453              CASE ( 'c_soil*_xy' )        ! 2d-array
    454                 IF ( av == 0 )  THEN
    455                    DO  i = nxlg, nxrg
    456                       DO  j = nysg, nyng
    457                          local_pf(i,j,nzb+1) = 1.0_wp - c_veg(j,i)
    458                       ENDDO
    459                    ENDDO
    460                 ELSE
    461                    DO  i = nxlg, nxrg
    462                       DO  j = nysg, nyng
    463                          local_pf(i,j,nzb+1) = c_soil_av(j,i)
    464                       ENDDO
    465                    ENDDO
    466                 ENDIF
    467                 resorted = .TRUE.
    468                 two_d = .TRUE.
    469                 level_z(nzb+1) = zu(nzb+1)
    470 
    471              CASE ( 'c_veg*_xy' )        ! 2d-array
    472                 IF ( av == 0 )  THEN
    473                    DO  i = nxlg, nxrg
    474                       DO  j = nysg, nyng
    475                          local_pf(i,j,nzb+1) = c_veg(j,i)
    476                       ENDDO
    477                    ENDDO
    478                 ELSE
    479                    DO  i = nxlg, nxrg
    480                       DO  j = nysg, nyng
    481                          local_pf(i,j,nzb+1) = c_veg_av(j,i)
    482                       ENDDO
    483                    ENDDO
    484                 ENDIF
    485                 resorted = .TRUE.
    486                 two_d = .TRUE.
    487                 level_z(nzb+1) = zu(nzb+1)
    488 
    489              CASE ( 'ghf_eb*_xy' )        ! 2d-array
    490                 IF ( av == 0 )  THEN
    491                    DO  i = nxlg, nxrg
    492                       DO  j = nysg, nyng
    493                          local_pf(i,j,nzb+1) = ghf_eb(j,i)
    494                       ENDDO
    495                    ENDDO
    496                 ELSE
    497                    DO  i = nxlg, nxrg
    498                       DO  j = nysg, nyng
    499                          local_pf(i,j,nzb+1) = ghf_eb_av(j,i)
    500                       ENDDO
    501                    ENDDO
    502                 ENDIF
    503                 resorted = .TRUE.
    504                 two_d = .TRUE.
    505                 level_z(nzb+1) = zu(nzb+1)
    506 
    507              CASE ( 'lai*_xy' )        ! 2d-array
    508                 IF ( av == 0 )  THEN
    509                    DO  i = nxlg, nxrg
    510                       DO  j = nysg, nyng
    511                          local_pf(i,j,nzb+1) = lai(j,i)
    512                       ENDDO
    513                    ENDDO
    514                 ELSE
    515                    DO  i = nxlg, nxrg
    516                       DO  j = nysg, nyng
    517                          local_pf(i,j,nzb+1) = lai_av(j,i)
    518                       ENDDO
    519                    ENDDO
    520                 ENDIF
    521                 resorted = .TRUE.
    522                 two_d = .TRUE.
    523                 level_z(nzb+1) = zu(nzb+1)
    524 
    525              CASE ( 'lpt_xy', 'lpt_xz', 'lpt_yz' )
    526                 IF ( av == 0 )  THEN
    527                    to_be_resorted => pt
    528                 ELSE
    529                    to_be_resorted => lpt_av
    530                 ENDIF
    531                 IF ( mode == 'xy' )  level_z = zu
    532 
    533              CASE ( 'lwp*_xy' )        ! 2d-array
    534                 IF ( av == 0 )  THEN
    535                    DO  i = nxlg, nxrg
    536                       DO  j = nysg, nyng
    537                          local_pf(i,j,nzb+1) = SUM( ql(nzb:nzt,j,i) *          &
    538                                                     dzw(1:nzt+1) )
    539                       ENDDO
    540                    ENDDO
    541                 ELSE
    542                    DO  i = nxlg, nxrg
    543                       DO  j = nysg, nyng
    544                          local_pf(i,j,nzb+1) = lwp_av(j,i)
    545                       ENDDO
    546                    ENDDO
    547                 ENDIF
    548                 resorted = .TRUE.
    549                 two_d = .TRUE.
    550                 level_z(nzb+1) = zu(nzb+1)
    551 
    552              CASE ( 'm_liq_eb*_xy' )        ! 2d-array
    553                 IF ( av == 0 )  THEN
    554                    DO  i = nxlg, nxrg
    555                       DO  j = nysg, nyng
    556                          local_pf(i,j,nzb+1) = m_liq_eb(j,i)
    557                       ENDDO
    558                    ENDDO
    559                 ELSE
    560                    DO  i = nxlg, nxrg
    561                       DO  j = nysg, nyng
    562                          local_pf(i,j,nzb+1) = m_liq_eb_av(j,i)
    563                       ENDDO
    564                    ENDDO
    565                 ENDIF
    566                 resorted = .TRUE.
    567                 two_d = .TRUE.
    568                 level_z(nzb+1) = zu(nzb+1)
    569 
    570              CASE ( 'm_soil_xy', 'm_soil_xz', 'm_soil_yz' )
    571                 nzb_do = nzb_soil
    572                 nzt_do = nzt_soil
    573                 IF ( av == 0 )  THEN
    574                    to_be_resorted => m_soil
    575                 ELSE
    576                    to_be_resorted => m_soil_av
    577                 ENDIF
    578                 IF ( mode == 'xy' )  level_z = zs
    579455
    580456             CASE ( 'nr_xy', 'nr_xz', 'nr_yz' )
     
    859735                level_z(nzb+1) = zu(nzb+1)
    860736
    861              CASE ( 'qsws_eb*_xy' )        ! 2d-array
     737             CASE ( 'qv_xy', 'qv_xz', 'qv_yz' )
     738                IF ( av == 0 )  THEN
     739                   DO  i = nxlg, nxrg
     740                      DO  j = nysg, nyng
     741                         DO  k = nzb, nzt+1
     742                            local_pf(i,j,k) = q(k,j,i) - ql(k,j,i)
     743                         ENDDO
     744                      ENDDO
     745                   ENDDO
     746                   resorted = .TRUE.
     747                ELSE
     748                   to_be_resorted => qv_av
     749                ENDIF
     750                IF ( mode == 'xy' )  level_z = zu
     751
     752             CASE ( 'rad_net*_xy' )        ! 2d-array
    862753                IF ( av == 0 ) THEN
    863754                   DO  i = nxlg, nxrg
    864755                      DO  j = nysg, nyng
    865                          local_pf(i,j,nzb+1) =  qsws_eb(j,i)
     756                         local_pf(i,j,nzb+1) =  rad_net(j,i)
    866757                      ENDDO
    867758                   ENDDO
     
    869760                   DO  i = nxlg, nxrg
    870761                      DO  j = nysg, nyng
    871                          local_pf(i,j,nzb+1) =  qsws_eb_av(j,i)
     762                         local_pf(i,j,nzb+1) =  rad_net_av(j,i)
    872763                      ENDDO
    873764                   ENDDO
     
    877768                level_z(nzb+1) = zu(nzb+1)
    878769
    879              CASE ( 'qsws_liq_eb*_xy' )        ! 2d-array
    880                 IF ( av == 0 ) THEN
    881                    DO  i = nxlg, nxrg
    882                       DO  j = nysg, nyng
    883                          local_pf(i,j,nzb+1) =  qsws_liq_eb(j,i)
    884                       ENDDO
    885                    ENDDO
    886                 ELSE
    887                    DO  i = nxlg, nxrg
    888                       DO  j = nysg, nyng
    889                          local_pf(i,j,nzb+1) =  qsws_liq_eb_av(j,i)
    890                       ENDDO
    891                    ENDDO
    892                 ENDIF
    893                 resorted = .TRUE.
    894                 two_d = .TRUE.
    895                 level_z(nzb+1) = zu(nzb+1)
    896 
    897              CASE ( 'qsws_soil_eb*_xy' )        ! 2d-array
    898                 IF ( av == 0 ) THEN
    899                    DO  i = nxlg, nxrg
    900                       DO  j = nysg, nyng
    901                          local_pf(i,j,nzb+1) =  qsws_soil_eb(j,i)
    902                       ENDDO
    903                    ENDDO
    904                 ELSE
    905                    DO  i = nxlg, nxrg
    906                       DO  j = nysg, nyng
    907                          local_pf(i,j,nzb+1) =  qsws_soil_eb_av(j,i)
    908                       ENDDO
    909                    ENDDO
    910                 ENDIF
    911                 resorted = .TRUE.
    912                 two_d = .TRUE.
    913                 level_z(nzb+1) = zu(nzb+1)
    914 
    915              CASE ( 'qsws_veg_eb*_xy' )        ! 2d-array
    916                 IF ( av == 0 ) THEN
    917                    DO  i = nxlg, nxrg
    918                       DO  j = nysg, nyng
    919                          local_pf(i,j,nzb+1) =  qsws_veg_eb(j,i)
    920                       ENDDO
    921                    ENDDO
    922                 ELSE
    923                    DO  i = nxlg, nxrg
    924                       DO  j = nysg, nyng
    925                          local_pf(i,j,nzb+1) =  qsws_veg_eb_av(j,i)
    926                       ENDDO
    927                    ENDDO
    928                 ENDIF
    929                 resorted = .TRUE.
    930                 two_d = .TRUE.
    931                 level_z(nzb+1) = zu(nzb+1)
    932 
    933              CASE ( 'qv_xy', 'qv_xz', 'qv_yz' )
    934                 IF ( av == 0 )  THEN
    935                    DO  i = nxlg, nxrg
    936                       DO  j = nysg, nyng
    937                          DO  k = nzb, nzt+1
    938                             local_pf(i,j,k) = q(k,j,i) - ql(k,j,i)
    939                          ENDDO
    940                       ENDDO
    941                    ENDDO
    942                    resorted = .TRUE.
    943                 ELSE
    944                    to_be_resorted => qv_av
    945                 ENDIF
    946                 IF ( mode == 'xy' )  level_z = zu
    947 
    948              CASE ( 'rad_net*_xy' )        ! 2d-array
    949                 IF ( av == 0 ) THEN
    950                    DO  i = nxlg, nxrg
    951                       DO  j = nysg, nyng
    952                          local_pf(i,j,nzb+1) =  rad_net(j,i)
    953                       ENDDO
    954                    ENDDO
    955                 ELSE
    956                    DO  i = nxlg, nxrg
    957                       DO  j = nysg, nyng
    958                          local_pf(i,j,nzb+1) =  rad_net_av(j,i)
    959                       ENDDO
    960                    ENDDO
    961                 ENDIF
    962                 resorted = .TRUE.
    963                 two_d = .TRUE.
    964                 level_z(nzb+1) = zu(nzb+1)
    965 
    966770
    967771             CASE ( 'rad_lw_in_xy', 'rad_lw_in_xz', 'rad_lw_in_yz' )
     
    1035839                   to_be_resorted => rho_av
    1036840                ENDIF
    1037 
    1038              CASE ( 'r_a*_xy' )        ! 2d-array
    1039                 IF ( av == 0 )  THEN
    1040                    DO  i = nxlg, nxrg
    1041                       DO  j = nysg, nyng
    1042                          local_pf(i,j,nzb+1) = r_a(j,i)
    1043                       ENDDO
    1044                    ENDDO
    1045                 ELSE
    1046                    DO  i = nxlg, nxrg
    1047                       DO  j = nysg, nyng
    1048                          local_pf(i,j,nzb+1) = r_a_av(j,i)
    1049                       ENDDO
    1050                    ENDDO
    1051                 ENDIF
    1052                 resorted = .TRUE.
    1053                 two_d = .TRUE.
    1054                 level_z(nzb+1) = zu(nzb+1)
    1055 
    1056              CASE ( 'r_s*_xy' )        ! 2d-array
    1057                 IF ( av == 0 )  THEN
    1058                    DO  i = nxlg, nxrg
    1059                       DO  j = nysg, nyng
    1060                          local_pf(i,j,nzb+1) = r_s(j,i)
    1061                       ENDDO
    1062                    ENDDO
    1063                 ELSE
    1064                    DO  i = nxlg, nxrg
    1065                       DO  j = nysg, nyng
    1066                          local_pf(i,j,nzb+1) = r_s_av(j,i)
    1067                       ENDDO
    1068                    ENDDO
    1069                 ENDIF
    1070                 resorted = .TRUE.
    1071                 two_d = .TRUE.
    1072                 level_z(nzb+1) = zu(nzb+1)
    1073841
    1074842             CASE ( 's_xy', 's_xz', 's_yz' )
     
    1097865                      DO  j = nysg, nyng
    1098866                         local_pf(i,j,nzb+1) =  shf_av(j,i)
    1099                       ENDDO
    1100                    ENDDO
    1101                 ENDIF
    1102                 resorted = .TRUE.
    1103                 two_d = .TRUE.
    1104                 level_z(nzb+1) = zu(nzb+1)
    1105 
    1106              CASE ( 'shf_eb*_xy' )        ! 2d-array
    1107                 IF ( av == 0 ) THEN
    1108                    DO  i = nxlg, nxrg
    1109                       DO  j = nysg, nyng
    1110                          local_pf(i,j,nzb+1) =  shf_eb(j,i)
    1111                       ENDDO
    1112                    ENDDO
    1113                 ELSE
    1114                    DO  i = nxlg, nxrg
    1115                       DO  j = nysg, nyng
    1116                          local_pf(i,j,nzb+1) =  shf_eb_av(j,i)
    1117867                      ENDDO
    1118868                   ENDDO
     
    1158908                level_z(nzb+1) = zu(nzb+1)
    1159909
    1160              CASE ( 't_soil_xy', 't_soil_xz', 't_soil_yz' )
    1161                 nzb_do = nzb_soil
    1162                 nzt_do = nzt_soil
    1163                 IF ( av == 0 )  THEN
    1164                    to_be_resorted => t_soil
    1165                 ELSE
    1166                    to_be_resorted => t_soil_av
    1167                 ENDIF
    1168                 IF ( mode == 'xy' )  level_z = zs
    1169 
    1170910             CASE ( 'u_xy', 'u_xz', 'u_yz' )
    1171911                IF ( av == 0 )  THEN
     
    12851025
    12861026             CASE DEFAULT
     1027
     1028!
     1029!--             Land surface model quantity
     1030                IF ( land_surface )  THEN
     1031                   CALL lsm_data_output_2d( av, do2d(av,if), found, grid, mode,&
     1032                                            local_pf, two_d, nzb_do, nzt_do )
     1033                ENDIF
     1034
    12871035!
    12881036!--             User defined quantity
    1289                 CALL user_data_output_2d( av, do2d(av,if), found, grid,        &
    1290                                           local_pf, two_d, nzb_do, nzt_do )
     1037                IF ( .NOT. found )  THEN
     1038                   CALL user_data_output_2d( av, do2d(av,if), found, grid,     &
     1039                                             local_pf, two_d, nzb_do, nzt_do )
     1040                ENDIF
     1041
    12911042                resorted = .TRUE.
    12921043
Note: See TracChangeset for help on using the changeset viewer.