Changeset 463 for trunk/NEMO/OPA_SRC
- Timestamp:
- 2006-05-10T19:26:55+02:00 (18 years ago)
- Location:
- trunk/NEMO/OPA_SRC/ZDF
- Files:
-
- 1 added
- 2 deleted
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/OPA_SRC/ZDF/zdf_oce.F90
r255 r463 25 25 lk_zdfcst = .FALSE. !: constant vertical mixing flag 26 26 #endif 27 LOGICAL, PUBLIC :: & !: 27 LOGICAL, PUBLIC :: & !!! namzdf: vertical diffusion 28 ln_zdfexp = .FALSE. , & !: explicit vertical diffusion scheme flag 28 29 ln_zdfevd = .TRUE. , & !: convection: enhanced vertical diffusion flag 29 30 ln_zdfnpc = .FALSE. !: convection: non-penetrative convection flag 30 31 31 LOGICAL, PUBLIC :: & !:32 l_trazdf_exp = .FALSE. , & !: ???33 l_trazdf_imp = .FALSE. , & !:34 l_dynzdf_exp = .FALSE. , & !:35 l_dynzdf_imp = .TRUE. , & !:36 l_dynzdf_imp_tsk = .FALSE. !:37 38 32 INTEGER, PUBLIC :: & !!: namzdf: vertical diffusion 39 33 n_zdfexp = 3 , & !: number of sub-time step (explicit time stepping) 40 n evdm= 1 !: =0/1 flag to apply enhanced avm or not34 n_evdm = 1 !: =0/1 flag to apply enhanced avm or not 41 35 42 36 REAL(wp), PUBLIC :: & !!: namzdf vertical diffusion -
trunk/NEMO/OPA_SRC/ZDF/zdfbfr.F90
r258 r463 80 80 81 81 CASE( 0 ) ! no-slip boundary condition 82 # if defined key_vectopt_loop && ! defined key_ autotasking82 # if defined key_vectopt_loop && ! defined key_mpp_omp 83 83 jj = 1 84 84 DO ji = jpi+2, jpij-jpi-1 ! vector opt. (forced unrolling) … … 93 93 avmu(ji,jj,ikbu) = 2. * avmu(ji,jj,ikbum1) 94 94 avmv(ji,jj,ikbv) = 2. * avmv(ji,jj,ikbvm1) 95 # if ! defined key_vectopt_loop || defined key_ autotasking95 # if ! defined key_vectopt_loop || defined key_mpp_omp 96 96 END DO 97 97 # endif … … 99 99 100 100 CASE( 1 ) ! linear botton friction 101 # if defined key_vectopt_loop && ! defined key_ autotasking101 # if defined key_vectopt_loop && ! defined key_mpp_omp 102 102 jj = 1 103 103 DO ji = jpi+2, jpij-jpi-1 ! vector opt. (forced unrolling) … … 110 110 avmu(ji,jj,ikbu) = bfri1 * fse3uw(ji,jj,ikbu) 111 111 avmv(ji,jj,ikbv) = bfri1 * fse3vw(ji,jj,ikbv) 112 # if ! defined key_vectopt_loop || defined key_ autotasking112 # if ! defined key_vectopt_loop || defined key_mpp_omp 113 113 END DO 114 114 # endif … … 116 116 117 117 CASE( 2 ) ! quadratic botton friction 118 # if defined key_vectopt_loop && ! defined key_ autotasking118 # if defined key_vectopt_loop && ! defined key_mpp_omp 119 119 jj = 1 120 120 !CDIR NOVERRCHK … … 142 142 avmu(ji,jj,ikbu) = bfri2 * zecu * fse3uw(ji,jj,ikbu) 143 143 avmv(ji,jj,ikbv) = bfri2 * zecv * fse3vw(ji,jj,ikbv) 144 # if ! defined key_vectopt_loop || defined key_ autotasking144 # if ! defined key_vectopt_loop || defined key_mpp_omp 145 145 END DO 146 146 # endif … … 148 148 149 149 CASE( 3 ) ! free-slip boundary condition 150 # if defined key_vectopt_loop && ! defined key_ autotasking150 # if defined key_vectopt_loop && ! defined key_mpp_omp 151 151 jj = 1 152 152 DO ji = jpi+2, jpij-jpi-1 ! vector opt. (forced unrolling) … … 159 159 avmu(ji,jj,ikbu) = 0.e0 160 160 avmv(ji,jj,ikbv) = 0.e0 161 # if ! defined key_vectopt_loop || defined key_ autotasking161 # if ! defined key_vectopt_loop || defined key_mpp_omp 162 162 END DO 163 163 # endif -
trunk/NEMO/OPA_SRC/ZDF/zdfevd.F90
r255 r463 73 73 avmu_evd (:,:,:) = avmu(:,:,:) 74 74 75 SELECT CASE ( n evdm )75 SELECT CASE ( n_evdm ) 76 76 77 77 CASE ( 1 ) ! enhance vertical eddy viscosity and diffusivity (if rn2<-1.e-12) … … 79 79 DO jk = 1, jpkm1 ! Horizontal slab 80 80 ! ! =============== 81 # if defined key_vectopt_loop && ! defined key_ autotasking81 # if defined key_vectopt_loop && ! defined key_mpp_omp 82 82 !!! WHERE( rn2(:,:,jk) <= -1.e-12 ) avt(:,:,jk) = tmask(:,:,jk) * avevd ! agissant sur T SEUL! 83 83 jj = 1 ! big loop forced … … 129 129 ! ! =============== 130 130 !!! WHERE( rn2(:,:,jk) <= -1.e-12 ) avt(:,:,jk) = tmask(:,:,jk) * avevd ! agissant sur T SEUL! 131 # if defined key_vectopt_loop && ! defined key_ autotasking131 # if defined key_vectopt_loop && ! defined key_mpp_omp 132 132 jj = 1 ! big loop forced 133 133 DO ji = 1, jpij -
trunk/NEMO/OPA_SRC/ZDF/zdfini.F90
r297 r463 31 31 !!---------------------------------------------------------------------- 32 32 !! OPA 9.0 , LOCEAN-IPSL (2005) 33 !! $Header$34 !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt35 33 !!---------------------------------------------------------------------- 36 34 … … 52 50 !! * Local declarations 53 51 INTEGER :: ioptio ! temporary scalar 54 LOGICAL :: & !!! namzdf: vertical diffusion55 ln_zdfexp = .FALSE. ! explicit vertical diffusion scheme flag56 52 57 53 !! * Namelist 58 NAMELIST/namzdf/ ln_zdfe vd, ln_zdfnpc, &59 & avm0 , avt0, avevd, nevdm, ln_zdfexp, n_zdfexp54 NAMELIST/namzdf/ ln_zdfexp, n_zdfexp, ln_zdfevd, ln_zdfnpc, & 55 & avm0 , avt0 , avevd , n_evdm 60 56 !!---------------------------------------------------------------------- 61 57 !! OPA 9.0, LODYC-IPSL (2003) … … 73 69 WRITE(numout,*) 'zdf_init: vertical physics' 74 70 WRITE(numout,*) '~~~~~~~~' 75 WRITE(numout,*) ' 76 WRITE(numout,*) ' enhanced vertical diffusion ln_zdfevd = ', ln_zdfevd77 WRITE(numout,*) ' non-penetrative convection ln_zdfnpc = ', ln_zdfnpc78 WRITE(numout,*) ' vertical eddy viscosity avm0 = ', avm079 WRITE(numout,*) ' vertical eddy diffusivity avt0 = ', avt080 WRITE(numout,*) ' vertical coefficient for evd avevd = ', avevd81 WRITE(numout,*) ' applied on momentum (=1/0) nevdm = ', nevdm82 WRITE(numout,*) ' time splitting / backward scheme ln_zdfexp = ', ln_zdfexp83 WRITE(numout,*) ' number of time step n_zdfexp = ', n_zdfexp71 WRITE(numout,*) ' Namelist namzdf : set vertical mixing mixing parameters' 72 WRITE(numout,*) ' time splitting / backward scheme ln_zdfexp = ', ln_zdfexp 73 WRITE(numout,*) ' number of time step n_zdfexp = ', n_zdfexp 74 WRITE(numout,*) ' enhanced vertical diffusion ln_zdfevd = ', ln_zdfevd 75 WRITE(numout,*) ' non-penetrative convection ln_zdfnpc = ', ln_zdfnpc 76 WRITE(numout,*) ' vertical eddy viscosity avm0 = ', avm0 77 WRITE(numout,*) ' vertical eddy diffusivity avt0 = ', avt0 78 WRITE(numout,*) ' vertical coefficient for evd avevd = ', avevd 79 WRITE(numout,*) ' applied on momentum (=1/0) n_evdm = ', n_evdm 84 80 ENDIF 85 81 86 82 ! Parameter & logicals controls 87 83 ! ----------------------------- 88 ! ... vertical mixing 89 ! time stepping scheme (N.B. TKE or KPP schemes => force the use of implicit scheme) 90 IF( ( ln_zdfexp .AND. .NOT.lk_zdftke ) .OR. ( ln_zdfexp .AND. .NOT.lk_zdfkpp ) ) THEN 91 l_trazdf_exp = .TRUE. ! use explicit scheme 92 l_trazdf_imp = .FALSE. 93 l_dynzdf_exp = .TRUE. ! use explicit scheme 94 l_dynzdf_imp = .FALSE. 95 ELSE 96 l_trazdf_exp = .FALSE. ! use implicit scheme 97 l_trazdf_imp = .TRUE. 98 l_dynzdf_exp = .FALSE. ! use implicit scheme 99 l_dynzdf_imp = .TRUE. 100 ENDIF 101 IF( l_trazdf_iso .OR. l_trazdf_iso_vo ) THEN 102 l_trazdf_exp = .FALSE. ! iso-neutral diffusion : 103 l_trazdf_imp = .FALSE. ! implicit scheme included in iso-neutral routine 104 ENDIF 105 IF( l_dynldf_iso ) THEN 106 l_dynzdf_exp = .FALSE. ! iso-neutral diffusion : 107 l_dynzdf_imp = .FALSE. ! implicit scheme included in iso-neutral routine 108 ENDIF 109 #if defined key_autotasking 110 IF( l_dynzdf_imp ) THEN 111 l_dynzdf_imp = .FALSE. 112 l_dynzdf_imp_tsk = .TRUE. 113 ENDIF 114 #else 115 l_dynzdf_imp_tsk = .FALSE. 116 #endif 117 IF( lk_esopa ) THEN 118 l_trazdf_exp = .TRUE. ! esopa: use all options 119 l_trazdf_imp = .TRUE. 120 l_dynzdf_exp = .TRUE. ! esopa: use all options 121 l_dynzdf_imp = .TRUE. 122 l_dynzdf_imp_tsk = .TRUE. 123 ENDIF 84 ! ... check of vertical mixing scheme on tracers 85 ! ==> will be done in trazdf module 124 86 87 ! ... check of mixing coefficient 125 88 IF(lwp) WRITE(numout,*) 126 89 IF(lwp) WRITE(numout,*) ' vertical mixing option :' 127 90 ioptio = 0 128 91 IF( lk_zdfcst ) THEN 129 IF(lwp) WRITE(numout,*) ' constant eddy diffusion coef .'92 IF(lwp) WRITE(numout,*) ' constant eddy diffusion coefficients' 130 93 ioptio = ioptio+1 131 94 ENDIF 132 95 IF( lk_zdfric ) THEN 133 IF(lwp) WRITE(numout,*) ' Richardson dependent eddy coef .'96 IF(lwp) WRITE(numout,*) ' Richardson dependent eddy coefficients' 134 97 ioptio = ioptio+1 135 98 ENDIF 136 99 IF( lk_zdftke ) THEN 137 IF(lwp) WRITE(numout,*) ' TKE dependent eddy coef .'100 IF(lwp) WRITE(numout,*) ' TKE dependent eddy coefficients' 138 101 ioptio = ioptio+1 139 102 ENDIF 140 103 IF( lk_zdfkpp ) THEN 141 IF(lwp) WRITE(numout,*) ' KPP dependent eddy coef .'104 IF(lwp) WRITE(numout,*) ' KPP dependent eddy coefficients' 142 105 ioptio = ioptio+1 143 106 ENDIF … … 176 139 nstop = nstop + 1 177 140 ENDIF 178 IF( ioptio == 0 .AND. .NOT. lk_zdftke) THEN141 IF( ioptio == 0 .AND. .NOT.( lk_zdftke .OR. lk_zdfkpp ) ) THEN 179 142 IF(lwp) WRITE(numout,cform_err) 180 IF(lwp) WRITE(numout,*) ' except for TKE s cheme, a convection scheme is'143 IF(lwp) WRITE(numout,*) ' except for TKE sor KPP physics, a convection scheme is' 181 144 IF(lwp) WRITE(numout,*) ' required: ln_zdfevd or ln_zdfnpc logicals' 182 145 nstop = nstop + 1 -
trunk/NEMO/OPA_SRC/ZDF/zdfkpp.F90
r258 r463 16 16 USE dom_oce ! ocean space and time domain 17 17 USE zdf_oce ! ocean vertical physics 18 USE in_out_manager ! I/O manager19 USE lbclnk ! ocean lateral boundary conditions (or mpp link)20 18 USE phycst ! physical constants 21 19 USE taumod ! surface stress … … 23 21 USE ocesbc ! thermohaline fluxes 24 22 USE zdfddm ! double diffusion mixing 23 USE in_out_manager ! I/O manager 24 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 25 25 USE prtctl ! Print control 26 26 … … 30 30 !! * Routine accessibility 31 31 PUBLIC zdf_kpp ! routine called by step.F90 32 PUBLIC tra_kpp ! routine called by step.F90 32 33 33 34 !! * Share Module variables … … 1262 1263 1263 1264 1265 SUBROUTINE tra_kpp 1266 !!---------------------------------------------------------------------- 1267 !! *** ROUTINE tra_kpp *** 1268 !! 1269 !! ** Purpose : compute and add to the tracer trend the non-local 1270 !! tracer flux 1271 !! 1272 !! ** Method : ??? 1273 !! 1274 !! history : 1275 !! 9.0 ! 05-11 (G. Madec) Original code 1276 !!---------------------------------------------------------------------- 1277 !! * Modules used 1278 USE oce, ONLY : ztrdt => ua, & ! use ua as 3D workspace 1279 ztrds => va ! use va as 3D workspace 1280 !!---------------------------------------------------------------------- 1281 1282 IF( kt == nit000 ) THEN 1283 IF(lwp) WRITE(numout,*) 1284 IF(lwp) WRITE(numout,*) 'tra_kpp : KPP non-local tracer fluxes' 1285 IF(lwp) WRITE(numout,*) '~~~~~~~ ' 1286 ENDIF 1287 1288 1289 ! Save ta and sa trends 1290 IF( l_trdtra ) THEN 1291 ztrdt(:,:,:) = ta(:,:,:) 1292 ztrds(:,:,:) = sa(:,:,:) 1293 ENDIF 1294 1295 ! add non-local temperature and salinity flux ( in convective case only) 1296 DO jk = 1, jpkm1 1297 DO jj = 2, jpjm1 1298 DO ji = fs_2, fs_jpim1 1299 ta(ji,jj,jk) = ta(ji,jj,jk) & 1300 & - ( ghats(ji,jj,jk ) * avt(ji,jj,jk ) & 1301 & - ghats(ji,jj,jk+1) * avt(ji,jj,jk+1) ) * wt0(ji,jj) / fse3t(ji,jj,jk) 1302 sa(ji,jj,jk) = sa(ji,jj,jk) & 1303 & - ( ghats(ji,jj,jk ) * fsavs(ji,jj,jk ) & 1304 & - ghats(ji,jj,jk+1) * fsavs(ji,jj,jk+1) ) * ws0(ji,jj) / fse3t(ji,jj,jk) 1305 END DO 1306 END DO 1307 END DO 1308 1309 ! save the non-local tracer flux trends for diagnostic 1310 IF( l_trdtra ) THEN 1311 ztrdt(:,:,:) = ta(:,:,:) - ztrdt(:,:,:) 1312 ztrds(:,:,:) = sa(:,:,:) - ztrds(:,:,:) 1313 !!bug gm jpttdzdf ==> jpttkpp 1314 CALL trd_mod(ztrdt, ztrds, jpttdzdf, 'TRA', kt) 1315 ENDIF 1316 1317 IF(ln_ctl) THEN ! print mean trends (used for debugging) 1318 CALL prt_ctl(tab3d_1=ta, clinfo1=' kpp - Ta: ', mask1=tmask, & 1319 & tab3d_2=sa, clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra') 1320 ENDIF 1321 1322 END SUBROUTINE tra_kpp 1323 1264 1324 1265 1325 SUBROUTINE zdf_kpp_init … … 1547 1607 WRITE(*,*) 'zdf_kpp: You should not have seen this print! error?', kt 1548 1608 END SUBROUTINE zdf_kpp 1609 SUBROUTINE tra_kpp( kt ) ! Empty routine 1610 WRITE(*,*) 'tra_kpp: You should not have seen this print! error?', kt 1611 END SUBROUTINE tra_kpp 1549 1612 #endif 1550 1613 -
trunk/NEMO/OPA_SRC/ZDF/zdfmxl.F90
r384 r463 4 4 !! Ocean physics: mixed layer depth 5 5 !!====================================================================== 6 6 !! History : 7 !! 9.0 ! 03-08 (G. Madec) OpenMP/autotasking optimization 7 8 !!---------------------------------------------------------------------- 8 9 !! zdf_mxl : Compute the turbocline and mixed layer depths. … … 44 45 CONTAINS 45 46 46 # if defined key_ autotasking47 !!---------------------------------------------------------------------- 48 !! 'key_ autotasking'j-k-i loop (j-slab)47 # if defined key_mpp_omp 48 !!---------------------------------------------------------------------- 49 !! 'key_mpp_omp' j-k-i loop (j-slab) 49 50 !!---------------------------------------------------------------------- 50 51 … … 63 64 !! ** Action : 64 65 !! 65 !! History :66 !! 9.0 ! 03-08 (G. Madec) autotasking optimization67 66 !!---------------------------------------------------------------------- 68 67 !! * Arguments … … 78 77 IF( kt == nit000 ) THEN 79 78 IF(lwp) WRITE(numout,*) 80 IF(lwp) WRITE(numout,*) 'zdf_mxl : mixed layer depth' 81 IF(lwp) WRITE(numout,*) '~~~~~~~ auto-tasking case : j-k-i loop' 82 IF(lwp) WRITE(numout,*) 79 IF(lwp) WRITE(numout,*) 'zdf_mxl : mixed layer depth, j-k-i loops' 80 IF(lwp) WRITE(numout,*) '~~~~~~~' 83 81 ENDIF 84 82 … … 135 133 ! ! =============== 136 134 137 IF(ln_ctl) THEN 138 CALL prt_ctl(tab2d_1=REAL(nmln,wp), clinfo1=' nmln : ', tab2d_2=hmld, clinfo2=' hmld : ', ovlap=1) 139 ENDIF 140 135 IF(ln_ctl) CALL prt_ctl( tab2d_1=REAL(nmln,wp), clinfo1=' nmln : ', tab2d_2=hmld, clinfo2=' hmld : ', ovlap=1 ) 141 136 142 137 END SUBROUTINE zdf_mxl … … 239 234 END DO 240 235 241 IF(ln_ctl) THEN 242 CALL prt_ctl(tab2d_1=REAL(nmln,wp), clinfo1=' nmln : ', tab2d_2=hmld, clinfo2=' hmld : ', ovlap=1) 243 ENDIF 236 IF(ln_ctl) CALL prt_ctl( tab2d_1=REAL(nmln,wp), clinfo1=' nmln : ', tab2d_2=hmld, clinfo2=' hmld : ', ovlap=1 ) 244 237 245 238 END SUBROUTINE zdf_mxl -
trunk/NEMO/OPA_SRC/ZDF/zdftke.F90
r422 r463 21 21 USE taumod ! surface stress 22 22 USE prtctl ! Print control 23 USE traadv_ctl ! advection scheme control24 23 25 24 IMPLICIT NONE … … 27 26 28 27 !! * Routine accessibility 29 PUBLIC zdf_tke ! routine called by step.F90 28 PUBLIC zdf_tke ! routine called in step module 29 PUBLIC zdf_tke_init ! routine called in zdftke_jki module 30 30 31 31 !! * Share Module variables … … 37 37 en !: now turbulent kinetic energy 38 38 39 !! * Module variables 40 INTEGER :: & !!! ** tke namelist (namtke) ** 39 INTEGER, PUBLIC :: & !!! ** tke namelist (namtke) ** 41 40 nitke = 50 , & ! number of restart iterative loops 42 41 nmxl = 2 , & ! = 0/1/2/3 flag for the type of mixing length used … … 44 43 nave = 1 , & ! = 0/1 flag for horizontal average on avt, avmu, avmv 45 44 navb = 0 ! = 0/1 flag for constant or profile background avt 46 REAL(wp) ::& !!! ** tke namlist (namtke) **45 REAL(wp), PUBLIC :: & !!! ** tke namlist (namtke) ** 47 46 ediff = 0.1_wp , & ! coeff. for vertical eddy coef.; avt=ediff*mxl*sqrt(e) 48 47 ediss = 0.7_wp , & ! coef. of the Kolmogoroff dissipation … … 52 51 emin0 = 1.e-4_wp , & ! surface minimum value of tke (m2/s2) 53 52 ri_c = 2._wp / 9._wp ! critic Richardson number 54 REAL(wp) :: &55 eboost ! multiplicative coeff of the shear product.53 REAL(wp), PUBLIC :: & 54 eboost ! multiplicative coeff of the shear product. 56 55 57 56 !! caution vectopt_memory change the solution (last digit of the solver stat) 58 57 # if defined key_vectopt_memory 59 REAL(wp), DIMENSION(jpi,jpj,jpk) :: &58 REAL(wp), DIMENSION(jpi,jpj,jpk), PUBLIC :: & 60 59 etmean, & ! coefficient used for horizontal smoothing 61 60 eumean, & ! at t-, u- and v-points … … 76 75 !!---------------------------------------------------------------------- 77 76 !! OPA 9.0 , LOCEAN-IPSL (2005) 78 !! $Header$79 !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt80 77 !!---------------------------------------------------------------------- 81 78 82 79 CONTAINS 83 84 # if defined key_autotasking85 !!----------------------------------------------------------------------86 !! 'key_autotasking' : j-k-i loop (j-slab)87 !!----------------------------------------------------------------------88 # include "zdftke_atsk.h90"89 90 # else91 !!----------------------------------------------------------------------92 !! default option : k-j-i loop93 !!----------------------------------------------------------------------94 80 95 81 SUBROUTINE zdf_tke ( kt ) … … 623 609 END SUBROUTINE zdf_tke 624 610 625 # endif626 611 627 612 SUBROUTINE zdf_tke_init … … 792 777 ! Background profile of avt (fit a theoretical/observational profile (Krauss 1990) 793 778 avmb(:) = avm0 794 avtb(:) = avt0 + ( 3.0e-4 - 2 * avt0 ) * 1.0e-4 * gdepw(:) ! m2/s 779 !!bug this is not valide neither in scoord 780 IF(ln_sco .AND. lwp) WRITE(numout,cform_war) 781 IF(ln_sco .AND. lwp) WRITE(numout,*) ' avtb profile nort valid in sco' 782 783 avtb(:) = avt0 + ( 3.0e-4 - 2 * avt0 ) * 1.0e-4 * gdepw_0(:) ! m2/s 795 784 ENDIF 796 785 797 IF( cp_cfg == "orca" .AND. jp_cfg == 2 .AND. ln_traadv_cen2 ) THEN 798 ! Increase the background in the surface layers 799 avmb(1) = 10. * avmb(1) ; avtb(1) = 10. * avtb(1) 800 avmb(2) = 10. * avmb(2) ; avtb(2) = 10. * avtb(2) 801 avmb(3) = 5. * avmb(3) ; avtb(3) = 5. * avtb(3) 802 avmb(4) = 2.5 * avmb(4) ; avtb(4) = 2.5 * avtb(4) 803 ENDIF 786 ! Increase the background in the surface layers 787 avmb(1) = 10. * avmb(1) ; avtb(1) = 10. * avtb(1) 788 avmb(2) = 10. * avmb(2) ; avtb(2) = 10. * avtb(2) 789 avmb(3) = 5. * avmb(3) ; avtb(3) = 5. * avtb(3) 790 avmb(4) = 2.5 * avmb(4) ; avtb(4) = 2.5 * avtb(4) 804 791 805 792
Note: See TracChangeset
for help on using the changeset viewer.