Changeset 3146
- Timestamp:
- Jul 18, 2018 10:36:19 PM (6 years ago)
- Location:
- palm/trunk/SOURCE
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/land_surface_model_mod.f90
r3143 r3146 20 20 ! Current revisions: 21 21 ! ----------------- 22 ! 22 ! Adjustments for new surface structure 23 23 ! 24 24 ! Former revisions: … … 2320 2320 ! 2321 2321 !-- Update virtual potential temperature 2322 vpt(k+k_off,j+j_off,i+i_off) = pt(k+k_off,j+j_off,i+i_off) * &2322 surf%vpt_surface(m) = surf%pt_surface(m) * & 2323 2323 ( 1.0_wp + 0.61_wp * q(k+k_off,j+j_off,i+i_off) ) 2324 2324 2325 2326 2325 2327 ENDDO 2326 2328 -
palm/trunk/SOURCE/surface_layer_fluxes_mod.f90
r3130 r3146 21 21 ! Current revisions: 22 22 ! ------------------ 23 ! 23 ! Major bugfix in calculation of Obukhov length 24 24 ! 25 25 ! Former revisions: … … 329 329 surf => surf_def_h(l) 330 330 CALL calc_pt_q 331 IF ( .NOT. neutral ) CALL calc_pt_surface 331 IF ( .NOT. neutral ) THEN 332 CALL calc_pt_surface 333 IF ( humidity ) THEN 334 CALL calc_vpt_surface 335 ENDIF 336 ENDIF 332 337 ENDIF 333 338 ENDDO … … 354 359 ENDIF 355 360 356 ! 357 !-- Call for urban-type vertical surfaces 361 !-- Call for urban-type vertical surfaces 358 362 IF ( surf_usm_v(l)%ns >= 1 ) THEN 359 363 surf => surf_usm_v(l) … … 1184 1188 IF ( ibc_pt_b /= 1 ) THEN 1185 1189 IF ( humidity ) THEN 1186 !$OMP PARALLEL DO PRIVATE( i, j, k,z_mo )1190 !$OMP PARALLEL DO PRIVATE( z_mo ) 1187 1191 DO m = 1, surf%ns 1188 1192 1189 i = surf%i(m)1190 j = surf%j(m)1191 k = surf%k(m)1192 1193 1193 z_mo = surf%z_mo(m) 1194 1194 1195 surf%rib(m) = g * z_mo * & 1196 ( vpt(k,j,i) - vpt(k-1,j,i) ) / & 1197 ( surf%uvw_abs(m)**2 * vpt(k,j,i) + 1.0E-20_wp ) 1195 surf%rib(m) = g * z_mo & 1196 * ( surf%vpt1(m) - surf%vpt_surface(m) ) & 1197 / ( surf%uvw_abs(m)**2 * surf%vpt1(m) & 1198 + 1.0E-20_wp ) 1198 1199 ENDDO 1199 1200 ELSE 1200 !$OMP PARALLEL DO PRIVATE( i, j, k,z_mo )1201 !$OMP PARALLEL DO PRIVATE( z_mo ) 1201 1202 DO m = 1, surf%ns 1202 1203 1203 i = surf%i(m)1204 j = surf%j(m)1205 k = surf%k(m)1206 1207 1204 z_mo = surf%z_mo(m) 1208 1205 1209 surf%rib(m) = g * z_mo * & 1210 ( pt(k,j,i) - pt(k-1,j,i) ) / & 1211 ( surf%uvw_abs(m)**2 * pt(k,j,i) + 1.0E-20_wp ) 1206 surf%rib(m) = g * z_mo & 1207 * ( surf%pt1(m) - surf%pt_surface(m) ) & 1208 / ( surf%uvw_abs(m)**2 * surf%pt1(m) & 1209 + 1.0E-20_wp ) 1212 1210 ENDDO 1213 1211 ENDIF 1214 1212 ELSE 1215 1213 IF ( humidity ) THEN 1216 !$OMP PARALLEL DO PRIVATE( i, j,k, z_mo )1214 !$OMP PARALLEL DO PRIVATE( k, z_mo ) 1217 1215 DO m = 1, surf%ns 1218 1216 1219 i = surf%i(m)1220 j = surf%j(m)1221 1217 k = surf%k(m) 1222 1218 … … 1224 1220 1225 1221 surf%rib(m) = - g * z_mo * ( ( 1.0_wp + 0.61_wp & 1226 * q(k,j,i) ) * surf%shf(m) + 0.61_wp&1227 * pt(k,j,i) * surf%qsws(m) ) *&1222 * surf%qv1(m) ) * surf%shf(m) + 0.61_wp & 1223 * surf%pt1(m) * surf%qsws(m) ) * & 1228 1224 drho_air_zw(k-1) / & 1229 ( surf%uvw_abs(m)**3 * vpt(k,j,i) * kappa**2&1225 ( surf%uvw_abs(m)**3 * surf%vpt1(m) * kappa**2 & 1230 1226 + 1.0E-20_wp ) 1231 1227 ENDDO 1232 1228 ELSE 1233 !$OMP PARALLEL DO PRIVATE( i, j,k, z_mo )1229 !$OMP PARALLEL DO PRIVATE( k, z_mo ) 1234 1230 DO m = 1, surf%ns 1235 1231 1236 i = surf%i(m)1237 j = surf%j(m)1238 1232 k = surf%k(m) 1239 1233 … … 1242 1236 surf%rib(m) = - g * z_mo * surf%shf(m) * & 1243 1237 drho_air_zw(k-1) / & 1244 ( surf%uvw_abs(m)**3 * pt(k,j,i) * kappa**2&1238 ( surf%uvw_abs(m)**3 * surf%pt1(m) * kappa**2 & 1245 1239 + 1.0E-20_wp ) 1246 1240 ENDDO … … 1418 1412 1419 1413 IF ( .NOT. humidity ) THEN 1420 !$OMP PARALLEL DO PRIVATE( i, j, k,z_mo )1414 !$OMP PARALLEL DO PRIVATE( z_mo ) 1421 1415 DO m = 1, surf%ns 1422 1416 1423 i = surf%i(m)1424 j = surf%j(m)1425 k = surf%k(m)1426 1427 1417 z_mo = surf%z_mo(m) 1428 1418 1429 surf%ol(m) = ( pt(k,j,i) * surf%us(m)**2 ) /&1419 surf%ol(m) = ( surf%pt1(m) * surf%us(m)**2 ) / & 1430 1420 ( kappa * g * & 1431 1421 surf%ts(m) + 1E-30_wp ) … … 1453 1443 1454 1444 1455 surf%ol(m) = ( vpt(k,j,i) * surf%us(m)**2 ) /&1445 surf%ol(m) = ( surf%vpt1(m) * surf%us(m)**2 ) / & 1456 1446 ( kappa * g * ( surf%ts(m) + & 1457 1447 0.61_wp * surf%pt1(m) * surf%us(m) & … … 1472 1462 ELSE 1473 1463 1474 !$OMP PARALLEL DO PRIVATE( i, j, k,z_mo )1464 !$OMP PARALLEL DO PRIVATE( z_mo ) 1475 1465 DO m = 1, surf%ns 1476 1466 1477 i = surf%i(m)1478 j = surf%j(m)1479 k = surf%k(m)1480 1481 1467 z_mo = surf%z_mo(m) 1482 1468 1483 surf%ol(m) = ( vpt(k,j,i) * surf%us(m)**2 ) /&1484 ( kappa * g * ( surf%ts(m) + 0.61_wp * pt(k,j,i) *&1485 surf%qs(m) + 0.61_wp * q(k,j,i) *&1469 surf%ol(m) = ( surf%vpt1(m) * surf%us(m)**2 ) / & 1470 ( kappa * g * ( surf%ts(m) + 0.61_wp * surf%pt1(m) * & 1471 surf%qs(m) + 0.61_wp * surf%qv1(m) * & 1486 1472 surf%ts(m) ) + 1E-30_wp ) 1487 1473 … … 1560 1546 1561 1547 ! 1562 !-- Calculate potential temperature and specific humidity at first grid level 1548 !-- Calculate potential temperature, specific humidity, and virtual potential 1549 !-- temperature at first grid level 1563 1550 !-- ( only for upward-facing surfs ) 1564 1551 SUBROUTINE calc_pt_q … … 1590 1577 ENDIF 1591 1578 1579 IF ( humidity ) THEN 1580 surf%vpt1(m) = pt(k,j,i) * ( 1.0_wp + 0.61_wp * q(k,j,i) ) 1581 ENDIF 1582 1592 1583 ENDDO 1593 1584 … … 1596 1587 1597 1588 ! 1598 !-- Calculate potential temperature a nd specific humidity at first grid level1589 !-- Calculate potential temperature at first grid level 1599 1590 !-- ( only for upward-facing surfs ) 1600 1591 SUBROUTINE calc_pt_surface … … 1602 1593 IMPLICIT NONE 1603 1594 1604 INTEGER(iwp) :: k off !< index offset between surface and atmosphere grid point (-1 for upward-, +1 for downward-facing walls)1595 INTEGER(iwp) :: k_off !< index offset between surface and atmosphere grid point (-1 for upward-, +1 for downward-facing walls) 1605 1596 INTEGER(iwp) :: m !< loop variable over all horizontal surf elements 1606 1597 1607 k off = surf%koff1598 k_off = surf%koff 1608 1599 !$OMP PARALLEL DO PRIVATE( i, j, k ) 1609 1600 DO m = 1, surf%ns … … 1613 1604 k = surf%k(m) 1614 1605 1615 surf%pt_surface(m) = pt(k+k off,j,i)1606 surf%pt_surface(m) = pt(k+k_off,j,i) 1616 1607 1617 1608 ENDDO … … 1619 1610 END SUBROUTINE calc_pt_surface 1620 1611 1612 ! 1613 !-- Calculate virtual potential temperature at first grid level 1614 !-- ( only for upward-facing surfs ) 1615 SUBROUTINE calc_vpt_surface 1616 1617 IMPLICIT NONE 1618 1619 INTEGER(iwp) :: k_off !< index offset between surface and atmosphere grid point (-1 for upward-, +1 for downward-facing walls) 1620 INTEGER(iwp) :: m !< loop variable over all horizontal surf elements 1621 1622 k_off = surf%koff 1623 !$OMP PARALLEL DO PRIVATE( i, j, k ) 1624 DO m = 1, surf%ns 1625 1626 i = surf%i(m) 1627 j = surf%j(m) 1628 k = surf%k(m) 1629 1630 surf%vpt_surface(m) = vpt(k+k_off,j,i) 1631 1632 ENDDO 1633 1634 END SUBROUTINE calc_vpt_surface 1635 1621 1636 ! 1622 1637 !-- Calculate the other MOST scaling parameters theta*, q*, (qc*, qr*, nc*, nr*) -
palm/trunk/SOURCE/surface_mod.f90
r3055 r3146 21 21 ! Current revisions: 22 22 ! ------------------ 23 ! 23 ! Added vpt_surface and vpt1 24 24 ! 25 25 ! Former revisions: … … 251 251 REAL(wp), DIMENSION(:), ALLOCATABLE :: z0q !< roughness length for humidity 252 252 253 REAL(wp), DIMENSION(:), ALLOCATABLE :: pt1 !< Potential temperature at first grid level253 REAL(wp), DIMENSION(:), ALLOCATABLE :: pt1 !< potential temperature at first grid level 254 254 REAL(wp), DIMENSION(:), ALLOCATABLE :: qv1 !< mixing ratio at first grid level 255 REAL(wp), DIMENSION(:), ALLOCATABLE :: vpt1 !< virtual potential temperature at first grid level 256 255 257 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: css !< scaling parameter chemical species 256 258 ! … … 302 304 303 305 REAL(wp), DIMENSION(:), ALLOCATABLE :: pt_surface !< skin-surface temperature 306 REAL(wp), DIMENSION(:), ALLOCATABLE :: vpt_surface !< skin-surface virtual temperature 304 307 REAL(wp), DIMENSION(:), ALLOCATABLE :: rad_net !< net radiation 305 308 REAL(wp), DIMENSION(:), ALLOCATABLE :: rad_net_l !< net radiation, used in USM … … 1047 1050 DEALLOCATE ( surfaces%pt1 ) 1048 1051 DEALLOCATE ( surfaces%qv1 ) 1052 DEALLOCATE ( surfaces%vpt1 ) 1053 1049 1054 ! 1050 1055 !-- … … 1149 1154 ALLOCATE ( surfaces%pt_surface(1:surfaces%ns) ) 1150 1155 ! 1151 !-- Characteristic humidity and surface flux of latent heat1156 !-- Characteristic humidity, surface flux of latent heat, and surface virtual potential temperature 1152 1157 IF ( humidity ) THEN 1153 1158 ALLOCATE ( surfaces%qs(1:surfaces%ns) ) 1154 1159 ALLOCATE ( surfaces%qsws(1:surfaces%ns) ) 1160 ALLOCATE ( surfaces%vpt_surface(1:surfaces%ns) ) 1155 1161 ENDIF 1156 1162 ! … … 1171 1177 ALLOCATE ( surfaces%pt1(1:surfaces%ns) ) 1172 1178 ALLOCATE ( surfaces%qv1(1:surfaces%ns) ) 1179 ALLOCATE ( surfaces%vpt1(1:surfaces%ns) ) 1173 1180 ! 1174 1181 !-- … … 1406 1413 IF ( humidity ) THEN 1407 1414 DEALLOCATE ( surfaces%qs ) 1408 DEALLOCATE ( surfaces%qsws ) 1415 DEALLOCATE ( surfaces%qsws ) 1416 DEALLOCATE ( surfaces%vpt_surface ) 1409 1417 ENDIF 1410 1418 ! … … 1425 1433 DEALLOCATE ( surfaces%pt1 ) 1426 1434 DEALLOCATE ( surfaces%qv1 ) 1435 DEALLOCATE ( surfaces%vpt1 ) 1427 1436 1428 1437 IF ( cloud_physics .AND. microphysics_seifert) THEN … … 1527 1536 !-- Characteristic humidity and surface flux of latent heat 1528 1537 IF ( humidity ) THEN 1529 ALLOCATE ( surfaces%qs(1:surfaces%ns) ) 1530 ALLOCATE ( surfaces%qsws(1:surfaces%ns) ) 1538 ALLOCATE ( surfaces%qs(1:surfaces%ns) ) 1539 ALLOCATE ( surfaces%qsws(1:surfaces%ns) ) 1540 ALLOCATE ( surfaces%vpt_surface(1:surfaces%ns) ) 1531 1541 ENDIF 1532 1542 ! … … 1547 1557 ALLOCATE ( surfaces%pt1(1:surfaces%ns) ) 1548 1558 ALLOCATE ( surfaces%qv1(1:surfaces%ns) ) 1559 ALLOCATE ( surfaces%vpt1(1:surfaces%ns) ) 1549 1560 1550 1561 IF ( cloud_physics .AND. microphysics_seifert) THEN … … 2097 2108 surf%nrsws(num_h) = 0.0_wp 2098 2109 2099 surf%pt1(num_h) = 0.0_wp 2100 surf%qv1(num_h) = 0.0_wp 2101 2110 surf%pt1(num_h) = 0.0_wp 2111 surf%qv1(num_h) = 0.0_wp 2112 surf%vpt1(num_h) = 0.0_wp 2113 2102 2114 ENDIF 2103 2115 ENDIF … … 2604 2616 IF ( ALLOCATED( surf_def_h(l)%pt_surface ) ) & 2605 2617 surf_h(l)%pt_surface(mm(l)) = surf_def_h(l)%pt_surface(m) 2618 IF ( ALLOCATED( surf_def_h(l)%vpt_surface ) ) & 2619 surf_h(l)%vpt_surface(mm(l)) = surf_def_h(l)%vpt_surface(m) 2606 2620 IF ( ALLOCATED( surf_def_h(l)%usws ) ) & 2607 2621 surf_h(l)%usws(mm(l)) = surf_def_h(l)%usws(m) … … 2659 2673 IF ( ALLOCATED( surf_lsm_h%pt_surface ) ) & 2660 2674 surf_h(l)%pt_surface(mm(l)) = surf_lsm_h%pt_surface(m) 2675 IF ( ALLOCATED( surf_def_h(l)%vpt_surface ) ) & 2676 surf_h(l)%vpt_surface(mm(l)) = surf_def_h(l)%vpt_surface(m) 2661 2677 IF ( ALLOCATED( surf_lsm_h%usws ) ) & 2662 2678 surf_h(0)%usws(mm(0)) = surf_lsm_h%usws(m) … … 2714 2730 IF ( ALLOCATED( surf_usm_h%pt_surface ) ) & 2715 2731 surf_h(l)%pt_surface(mm(l)) = surf_usm_h%pt_surface(m) 2732 IF ( ALLOCATED( surf_usm_h%vpt_surface ) ) & 2733 surf_h(l)%vpt_surface(mm(l)) = surf_usm_h%vpt_surface(m) 2716 2734 IF ( ALLOCATED( surf_usm_h%usws ) ) & 2717 2735 surf_h(0)%usws(mm(0)) = surf_usm_h%usws(m) … … 2810 2828 IF ( ALLOCATED( surf_def_v(l)%pt_surface ) ) & 2811 2829 surf_v(l)%pt_surface(mm(l)) = surf_def_v(l)%pt_surface(m) 2830 IF ( ALLOCATED( surf_def_v(l)%vpt_surface ) ) & 2831 surf_v(l)%vpt_surface(mm(l)) = surf_def_v(l)%vpt_surface(m) 2812 2832 IF ( ALLOCATED( surf_def_v(l)%shf ) ) & 2813 2833 surf_v(l)%shf(mm(l)) = surf_def_v(l)%shf(m) … … 2866 2886 IF ( ALLOCATED( surf_lsm_v(l)%pt_surface ) ) & 2867 2887 surf_v(l)%pt_surface(mm(l)) = surf_lsm_v(l)%pt_surface(m) 2888 IF ( ALLOCATED( surf_lsm_v(l)%vpt_surface ) ) & 2889 surf_v(l)%vpt_surface(mm(l)) = surf_lsm_v(l)%vpt_surface(m) 2868 2890 IF ( ALLOCATED( surf_lsm_v(l)%usws ) ) & 2869 2891 surf_v(l)%usws(mm(l)) = surf_lsm_v(l)%usws(m) … … 2926 2948 IF ( ALLOCATED( surf_usm_v(l)%pt_surface ) ) & 2927 2949 surf_v(l)%pt_surface(mm(l)) = surf_usm_v(l)%pt_surface(m) 2950 IF ( ALLOCATED( surf_usm_v(l)%vpt_surface ) ) & 2951 surf_v(l)%vpt_surface(mm(l)) = surf_usm_v(l)%vpt_surface(m) 2928 2952 IF ( ALLOCATED( surf_usm_v(l)%usws ) ) & 2929 2953 surf_v(l)%usws(mm(l)) = surf_usm_v(l)%usws(m) … … 3066 3090 ENDIF 3067 3091 3092 IF ( ALLOCATED ( surf_h(l)%vpt_surface ) ) THEN 3093 CALL wrd_write_string( 'surf_h(' // dum // ')%vpt_surface' ) 3094 WRITE ( 14 ) surf_h(l)%vpt_surface 3095 ENDIF 3096 3068 3097 IF ( ALLOCATED ( surf_h(l)%usws ) ) THEN 3069 3098 CALL wrd_write_string( 'surf_h(' // dum // ')%usws' ) … … 3191 3220 CALL wrd_write_string( 'surf_v(' // dum // ')%pt_surface' ) 3192 3221 WRITE ( 14 ) surf_v(l)%pt_surface 3222 ENDIF 3223 3224 IF ( ALLOCATED ( surf_v(l)%vpt_surface ) ) THEN 3225 CALL wrd_write_string( 'surf_v(' // dum // ')%vpt_surface' ) 3226 WRITE ( 14 ) surf_v(l)%vpt_surface 3193 3227 ENDIF 3194 3228 … … 3430 3464 IF ( ALLOCATED( surf_h(0)%pt_surface ) .AND. kk == 1 ) & 3431 3465 READ ( 13 ) surf_h(0)%pt_surface 3466 CASE ( 'surf_h(0)%vpt_surface' ) 3467 IF ( ALLOCATED( surf_h(0)%vpt_surface ) .AND. kk == 1 ) & 3468 READ ( 13 ) surf_h(0)%vpt_surface 3432 3469 CASE ( 'surf_h(0)%usws' ) 3433 3470 IF ( ALLOCATED( surf_h(0)%usws ) .AND. kk == 1 ) & … … 3507 3544 IF ( ALLOCATED( surf_h(1)%pt_surface ) .AND. kk == 1 ) & 3508 3545 READ ( 13 ) surf_h(1)%pt_surface 3546 CASE ( 'surf_h(1)%vpt_surface' ) 3547 IF ( ALLOCATED( surf_h(1)%vpt_surface ) .AND. kk == 1 ) & 3548 READ ( 13 ) surf_h(1)%vpt_surface 3509 3549 CASE ( 'surf_h(1)%usws' ) 3510 3550 IF ( ALLOCATED( surf_h(1)%usws ) .AND. kk == 1 ) & … … 3584 3624 IF ( ALLOCATED( surf_h(2)%pt_surface ) .AND. kk == 1 ) & 3585 3625 READ ( 13 ) surf_h(2)%pt_surface 3626 CASE ( 'surf_h(2)%vpt_surface' ) 3627 IF ( ALLOCATED( surf_h(2)%vpt_surface ) .AND. kk == 1 ) & 3628 READ ( 13 ) surf_h(2)%vpt_surface 3586 3629 CASE ( 'surf_h(2)%usws' ) 3587 3630 IF ( ALLOCATED( surf_h(2)%usws ) .AND. kk == 1 ) & … … 3663 3706 IF ( ALLOCATED( surf_v(0)%pt_surface ) .AND. kk == 1 ) & 3664 3707 READ ( 13 ) surf_v(0)%pt_surface 3708 CASE ( 'surf_v(0)%vpt_surface' ) 3709 IF ( ALLOCATED( surf_v(0)%vpt_surface ) .AND. kk == 1 ) & 3710 READ ( 13 ) surf_v(0)%vpt_surface 3665 3711 CASE ( 'surf_v(0)%shf' ) 3666 3712 IF ( ALLOCATED( surf_v(0)%shf ) .AND. kk == 1 ) & … … 3743 3789 IF ( ALLOCATED( surf_v(1)%pt_surface ) .AND. kk == 1 ) & 3744 3790 READ ( 13 ) surf_v(1)%pt_surface 3791 CASE ( 'surf_v(1)%vpt_surface' ) 3792 IF ( ALLOCATED( surf_v(1)%vpt_surface ) .AND. kk == 1 ) & 3793 READ ( 13 ) surf_v(1)%vpt_surface 3745 3794 CASE ( 'surf_v(1)%shf' ) 3746 3795 IF ( ALLOCATED( surf_v(1)%shf ) .AND. kk == 1 ) & … … 3823 3872 IF ( ALLOCATED( surf_v(2)%pt_surface ) .AND. kk == 1 ) & 3824 3873 READ ( 13 ) surf_v(2)%pt_surface 3874 CASE ( 'surf_v(2)%vpt_surface' ) 3875 IF ( ALLOCATED( surf_v(2)%vpt_surface ) .AND. kk == 1 ) & 3876 READ ( 13 ) surf_v(2)%vpt_surface 3825 3877 CASE ( 'surf_v(2)%shf' ) 3826 3878 IF ( ALLOCATED( surf_v(2)%shf ) .AND. kk == 1 ) & … … 3903 3955 IF ( ALLOCATED( surf_v(3)%pt_surface ) .AND. kk == 1 ) & 3904 3956 READ ( 13 ) surf_v(3)%pt_surface 3957 CASE ( 'surf_v(3)%vpt_surface' ) 3958 IF ( ALLOCATED( surf_v(3)%vpt_surface ) .AND. kk == 1 ) & 3959 READ ( 13 ) surf_v(3)%vpt_surface 3905 3960 CASE ( 'surf_v(3)%shf' ) 3906 3961 IF ( ALLOCATED( surf_v(3)%shf ) .AND. kk == 1 ) & … … 4097 4152 ENDIF 4098 4153 4154 IF ( INDEX( restart_string(1:length), '%vpt_surface' ) /= 0 ) THEN 4155 IF ( ALLOCATED( surf_target%vpt_surface ) .AND. & 4156 ALLOCATED( surf_file%vpt_surface ) ) & 4157 surf_target%vpt_surface(m_target) = surf_file%vpt_surface(m_file) 4158 ENDIF 4159 4099 4160 IF ( INDEX( restart_string(1:length), '%usws' ) /= 0 ) THEN 4100 4161 IF ( ALLOCATED( surf_target%usws ) .AND. &
Note: See TracChangeset
for help on using the changeset viewer.