- Timestamp:
- 2018-09-12T15:59:13+02:00 (6 years ago)
- Location:
- NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlim.F90
r7398 r10115 190 190 DO ji = 1, jpi 191 191 ! denitrification factor computed from O2 levels 192 nitrfac(ji,jj,jk) = MAX( 0.e0, 0.4 * ( 6.e-6 - trb(ji,jj,jk,jpoxy) ) &192 nitrfac(ji,jj,jk) = MAX( 0.e0, 0.4 * ( 6.e-6 - trb(ji,jj,jk,jpoxy) ) & 193 193 & / ( oxymin + trb(ji,jj,jk,jpoxy) ) ) 194 nitrfac(ji,jj,jk) = MIN( 1., nitrfac(ji,jj,jk) ) 194 nitrfac(ji,jj,jk) = MIN( 1., nitrfac(ji,jj,jk) ) 195 ! 196 ! denitrification factor computed from NO3 levels 197 nitrfac2(ji,jj,jk) = MAX( 0.e0, ( 1.E-6 - trb(ji,jj,jk,jpno3) ) & 198 & / ( 1.E-6 + trb(ji,jj,jk,jpno3) ) ) 199 nitrfac2(ji,jj,jk) = MIN( 1., nitrfac2(ji,jj,jk) ) 195 200 END DO 196 201 END DO … … 264 269 ! 265 270 nitrfac (:,:,:) = 0._wp 271 nitrfac2(:,:,:) = 0._wp 266 272 ! 267 273 END SUBROUTINE p4z_lim_init -
NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlys.F90
r7806 r10115 131 131 132 132 IF( lk_iomput .AND. knt == nrdttrc ) THEN 133 IF( iom_use( "PH" ) ) CALL iom_put( "PH" , -1. * LOG10( hi(:,:,:) )* tmask(:,:,:) )133 IF( iom_use( "PH" ) ) CALL iom_put( "PH" , -1. * LOG10( MAX( rtrn, hi(:,:,:) ) ) * tmask(:,:,:) ) 134 134 IF( iom_use( "CO3" ) ) CALL iom_put( "CO3" , zco3(:,:,:) * 1.e+3 * tmask(:,:,:) ) 135 135 IF( iom_use( "CO3sat" ) ) CALL iom_put( "CO3sat", zco3sat(:,:,:) * 1.e+3 * tmask(:,:,:) ) -
NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmeso.F90
r7398 r10115 111 111 ! no real reason except that it seems to be more stable and may mimic predation 112 112 ! --------------------------------------------------------------- 113 ztortz2 = mzrat2 * 1.e6 * zfact * trb(ji,jj,jk,jpmes) 113 ztortz2 = mzrat2 * 1.e6 * zfact * trb(ji,jj,jk,jpmes) * (1. - nitrfac(ji,jj,jk) ) 114 114 ! 115 115 zcompadi = MAX( ( trb(ji,jj,jk,jpdia) - xthresh2dia ), 0.e0 ) … … 126 126 zdenom = zfoodlim / ( xkgraz2 + zfoodlim ) 127 127 zdenom2 = zdenom / ( zfood + rtrn ) 128 zgraze2 = grazrat2 * zstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpmes) 128 zgraze2 = grazrat2 * zstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpmes) * (1. - nitrfac(ji,jj,jk) ) 129 129 130 130 131 zgrazd = zgraze2 * xprefc * zcompadi * zdenom2 … … 142 143 # if ! defined key_kriest 143 144 zgrazffeg = grazflux * zstep * wsbio4(ji,jj,jk) & 144 & * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes) 145 & * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes) & 146 & * (1. - nitrfac(ji,jj,jk)) 145 147 zgrazfffg = zgrazffeg * trb(ji,jj,jk,jpbfe) / (trb(ji,jj,jk,jpgoc) + rtrn) 146 148 # endif 147 149 zgrazffep = grazflux * zstep * wsbio3(ji,jj,jk) & 148 & * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpmes) 150 & * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpmes) & 151 & * (1. - nitrfac(ji,jj,jk)) 149 152 zgrazfffp = zgrazffep * trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) 150 153 ! -
NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmicro.F90
r7398 r10115 103 103 ! no real reason except that it seems to be more stable and may mimic predation. 104 104 ! --------------------------------------------------------------- 105 ztortz = mzrat * 1.e6 * zfact * trb(ji,jj,jk,jpzoo) 105 ztortz = mzrat * 1.e6 * zfact * trb(ji,jj,jk,jpzoo) * (1. - nitrfac(ji,jj,jk)) 106 106 107 107 zcompadi = MIN( MAX( ( trb(ji,jj,jk,jpdia) - xthreshdia ), 0.e0 ), xsizedia ) … … 115 115 zdenom = zfoodlim / ( xkgraz + zfoodlim ) 116 116 zdenom2 = zdenom / ( zfood + rtrn ) 117 zgraze = grazrat * zstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpzoo) 117 zgraze = grazrat * zstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpzoo) * (1. - nitrfac(ji,jj,jk)) 118 118 119 119 zgrazp = zgraze * xpref2p * zcompaph * zdenom2 -
NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zopt.F90
r7520 r10115 36 36 37 37 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_par ! structure of input par 38 INTEGER , PARAMETER :: nbtimes = 36 5!: maximum number of times record in a file38 INTEGER , PARAMETER :: nbtimes = 366 !: maximum number of times record in a file 39 39 INTEGER :: ntimes_par ! number of time steps in a file 40 40 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: par_varsw !: PAR fraction of shortwave -
NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zrem.F90
r7398 r10115 67 67 ! 68 68 INTEGER :: ji, jj, jk 69 REAL(wp) :: zremip, zremik, zsiremin 69 REAL(wp) :: zremip, zremik, zsiremin, zammonic 70 70 REAL(wp) :: zsatur, zsatur2, znusil, znusil2, zdep, zdepmin, zfactdep 71 71 REAL(wp) :: zbactfer, zorem, zorem2, zofer, zolimit … … 78 78 REAL(wp), POINTER, DIMENSION(:,: ) :: ztempbac 79 79 REAL(wp), POINTER, DIMENSION(:,:,:) :: zdepbac, zolimi, zdepprod, zw3d 80 REAL(wp), POINTER, DIMENSION(:,:,:) :: zoxyrem 80 81 !!--------------------------------------------------------------------- 81 82 ! … … 84 85 ! Allocate temporary workspace 85 86 CALL wrk_alloc( jpi, jpj, ztempbac ) 86 CALL wrk_alloc( jpi, jpj, jpk, zdepbac, zdepprod, zolimi )87 CALL wrk_alloc( jpi, jpj, jpk, zdepbac, zdepprod, zolimi, zoxyrem ) 87 88 88 89 ! Initialisation of temprary arrys … … 129 130 ! Ammonification in suboxic waters with denitrification 130 131 ! ------------------------------------------------------- 131 denitr(ji,jj,jk) = MIN( ( trb(ji,jj,jk,jpno3) - rtrn ) / rdenit, & 132 & zremik * nitrfac(ji,jj,jk) * trb(ji,jj,jk,jpdoc) ) 132 zammonic = zremik * nitrfac(ji,jj,jk) * trb(ji,jj,jk,jpdoc) 133 denitr(ji,jj,jk) = zammonic * ( 1. - nitrfac2(ji,jj,jk) ) 134 zoxyrem(ji,jj,jk) = zammonic * nitrfac2(ji,jj,jk) 133 135 ! 134 136 zolimi (ji,jj,jk) = MAX( 0.e0, zolimi (ji,jj,jk) ) 135 137 denitr (ji,jj,jk) = MAX( 0.e0, denitr (ji,jj,jk) ) 138 zoxyrem(ji,jj,jk) = MAX( 0.e0, zoxyrem(ji,jj,jk) ) 136 139 ! 137 140 END DO … … 157 160 tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) + zonitr - rdenita * denitnh4(ji,jj,jk) 158 161 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2nit * zonitr 159 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2 * rno3 * zonitr + rno3 * ( rdenita - 1. ) * denitnh4(ji,jj,jk) 162 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2 * rno3 * zonitr & 163 & + rno3 * ( rdenita - 1. ) * denitnh4(ji,jj,jk) 160 164 END DO 161 165 END DO … … 291 295 292 296 DO jk = 1, jpkm1 293 tra(:,:,jk,jppo4) = tra(:,:,jk,jppo4) + zolimi (:,:,jk) + denitr(:,:,jk) 294 tra(:,:,jk,jpnh4) = tra(:,:,jk,jpnh4) + zolimi (:,:,jk) + denitr(:,:,jk) 297 tra(:,:,jk,jppo4) = tra(:,:,jk,jppo4) + zolimi (:,:,jk) + denitr(:,:,jk) + zoxyrem(:,:,jk) 298 tra(:,:,jk,jpnh4) = tra(:,:,jk,jpnh4) + zolimi (:,:,jk) + denitr(:,:,jk) + zoxyrem(:,:,jk) 295 299 tra(:,:,jk,jpno3) = tra(:,:,jk,jpno3) - denitr (:,:,jk) * rdenit 296 tra(:,:,jk,jpdoc) = tra(:,:,jk,jpdoc) - zolimi (:,:,jk) - denitr(:,:,jk) 300 tra(:,:,jk,jpdoc) = tra(:,:,jk,jpdoc) - zolimi (:,:,jk) - denitr(:,:,jk) - zoxyrem(:,:,jk) 297 301 tra(:,:,jk,jpoxy) = tra(:,:,jk,jpoxy) - zolimi (:,:,jk) * o2ut 298 tra(:,:,jk,jpdic) = tra(:,:,jk,jpdic) + zolimi (:,:,jk) + denitr(:,:,jk) 299 tra(:,:,jk,jptal) = tra(:,:,jk,jptal) + rno3 * ( zolimi(:,:,jk) + ( rdenit + 1.) * denitr(:,:,jk) ) 302 tra(:,:,jk,jpdic) = tra(:,:,jk,jpdic) + zolimi (:,:,jk) + denitr(:,:,jk) + zoxyrem(:,:,jk) 303 tra(:,:,jk,jptal) = tra(:,:,jk,jptal) + rno3 * ( zolimi(:,:,jk) + zoxyrem(:,:,jk) & 304 & + ( rdenit + 1.) * denitr(:,:,jk) ) 300 305 END DO 301 306 … … 323 328 ! 324 329 CALL wrk_dealloc( jpi, jpj, ztempbac ) 325 CALL wrk_dealloc( jpi, jpj, jpk, zdepbac, zdepprod, zolimi )330 CALL wrk_dealloc( jpi, jpj, jpk, zdepbac, zdepprod, zolimi, zoxyrem ) 326 331 ! 327 332 IF( nn_timing == 1 ) CALL timing_stop('p4z_rem') -
NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsed.F90
r7520 r10115 64 64 REAL(wp) :: zwflux, zfminus, zfplus 65 65 REAL(wp) :: zlim, zfact, zfactcal 66 REAL(wp) :: zo2, zno3, zflx, zpdenit, z1pdenit, z denitt, zolimit66 REAL(wp) :: zo2, zno3, zflx, zpdenit, z1pdenit, zolimit 67 67 REAL(wp) :: zsiloss, zcaloss, zws3, zws4, zwsc, zdep, zwstpoc 68 68 REAL(wp) :: ztrfer, ztrpo4, zwdust, zlight … … 323 323 tra(ji,jj,ikt,jptal) = tra(ji,jj,ikt,jptal) + zcaloss * zrivalk * 2.0 324 324 tra(ji,jj,ikt,jpdic) = tra(ji,jj,ikt,jpdic) + zcaloss * zrivalk 325 zsedcal(ji,jj) = (1.0 - zrivalk) * zcaloss / zdep326 zsedsi (ji,jj) = (1.0 - zrivsil) * zsiloss / zdep325 zsedcal(ji,jj) = (1.0 - zrivalk) * zcaloss * fse3t(ji,jj,ikt) 326 zsedsi (ji,jj) = (1.0 - zrivsil) * zsiloss * fse3t(ji,jj,ikt) 327 327 #endif 328 328 END DO … … 354 354 355 355 #if ! defined key_sed 356 ! The 0.5 factor in zpdenit and zdenitt is to avoid negative NO3 concentration after both denitrification 357 ! in the sediments and just above the sediments. Not very clever, but simpliest option. 358 zpdenit = MIN( 0.5 * ( trb(ji,jj,ikt,jpno3) - rtrn ) / rdenit, zdenit2d(ji,jj) * zwstpoc * zrivno3 ) 356 ! The 0.5 factor in zpdenit is to avoid negative NO3 concentration after 357 ! denitrification in the sediments. Not very clever, but simpliest option. 358 zpdenit = MIN( 0.5 * ( trb(ji,jj,ikt,jpno3) - rtrn ) / rdenit, & 359 zdenit2d(ji,jj) * zwstpoc * zrivno3 * (1. - nitrfac2(ji,jj,ikt) ) ) 359 360 z1pdenit = zwstpoc * zrivno3 - zpdenit 360 361 zolimit = MIN( ( trb(ji,jj,ikt,jpoxy) - rtrn ) / o2ut, z1pdenit * ( 1.- nitrfac(ji,jj,ikt) ) ) 361 zdenitt = MIN( 0.5 * ( trb(ji,jj,ikt,jpno3) - rtrn ) / rdenit, z1pdenit * nitrfac(ji,jj,ikt) ) 362 tra(ji,jj,ikt,jpdoc) = tra(ji,jj,ikt,jpdoc) + z1pdenit - zolimit - zdenitt 363 tra(ji,jj,ikt,jppo4) = tra(ji,jj,ikt,jppo4) + zpdenit + zolimit + zdenitt 364 tra(ji,jj,ikt,jpnh4) = tra(ji,jj,ikt,jpnh4) + zpdenit + zolimit + zdenitt 365 tra(ji,jj,ikt,jpno3) = tra(ji,jj,ikt,jpno3) - rdenit * (zpdenit + zdenitt) 362 tra(ji,jj,ikt,jpdoc) = tra(ji,jj,ikt,jpdoc) + z1pdenit - zolimit 363 tra(ji,jj,ikt,jppo4) = tra(ji,jj,ikt,jppo4) + zpdenit + zolimit 364 tra(ji,jj,ikt,jpnh4) = tra(ji,jj,ikt,jpnh4) + zpdenit + zolimit 365 tra(ji,jj,ikt,jpno3) = tra(ji,jj,ikt,jpno3) - rdenit * zpdenit 366 366 tra(ji,jj,ikt,jpoxy) = tra(ji,jj,ikt,jpoxy) - zolimit * o2ut 367 tra(ji,jj,ikt,jptal) = tra(ji,jj,ikt,jptal) + rno3 * (zolimit + (1.+rdenit) * (zpdenit + zdenitt))368 tra(ji,jj,ikt,jpdic) = tra(ji,jj,ikt,jpdic) + zpdenit + zolimit + zdenitt369 sdenit(ji,jj) = rdenit * zpdenit / zdep370 zsedc(ji,jj) = (1. - zrivno3) * zwstpoc / zdep367 tra(ji,jj,ikt,jptal) = tra(ji,jj,ikt,jptal) + rno3 * (zolimit + (1.+rdenit) * zpdenit ) 368 tra(ji,jj,ikt,jpdic) = tra(ji,jj,ikt,jpdic) + zpdenit + zolimit 369 sdenit(ji,jj) = rdenit * zpdenit * fse3t(ji,jj,ikt) 370 zsedc(ji,jj) = (1. - zrivno3) * zwstpoc * fse3t(ji,jj,ikt) 371 371 #endif 372 372 END DO … … 415 415 IF( lk_iomput ) THEN 416 416 IF( knt == nrdttrc ) THEN 417 zfact = 1.e+3 * rfact2r * rno3 ! conversion from molC/l/kt to molN/m3/s418 IF( iom_use("Nfix" ) ) CALL iom_put( "Nfix", nitrpot(:,:,:) * nitrfix * zfact * tmask(:,:,:) ) ! nitrogen fixation417 zfact = 1.e+3 * rfact2r ! conversion from molC/l/kt to molC/m3/s 418 IF( iom_use("Nfix" ) ) CALL iom_put( "Nfix", nitrpot(:,:,:) * nitrfix * rno3 * zfact * tmask(:,:,:) ) ! nitrogen fixation 419 419 IF( iom_use("INTNFIX") ) THEN ! nitrogen fixation rate in ocean ( vertically integrated ) 420 420 zwork1(:,:) = 0. 421 421 DO jk = 1, jpkm1 422 zwork1(:,:) = zwork1(:,:) + nitrpot(:,:,jk) * nitrfix * zfact * fse3t(:,:,jk) * tmask(:,:,jk)422 zwork1(:,:) = zwork1(:,:) + nitrpot(:,:,jk) * nitrfix * rno3 * zfact * fse3t(:,:,jk) * tmask(:,:,jk) 423 423 ENDDO 424 424 CALL iom_put( "INTNFIX" , zwork1 ) 425 425 ENDIF 426 IF( iom_use("SedCal" ) ) CALL iom_put( "SedCal", zsedcal(:,:) * 1.e+3)427 IF( iom_use("SedSi" ) ) CALL iom_put( "SedSi", zsedsi (:,:) * 1.e+3)428 IF( iom_use("SedC" ) ) CALL iom_put( "SedC", zsedc (:,:) * 1.e+3)429 IF( iom_use("Sdenit" ) ) CALL iom_put( "Sdenit", sdenit (:,:) * 1.e+3 * rno3)426 IF( iom_use("SedCal" ) ) CALL iom_put( "SedCal", zsedcal(:,:) * zfact ) 427 IF( iom_use("SedSi" ) ) CALL iom_put( "SedSi", zsedsi (:,:) * zfact ) 428 IF( iom_use("SedC" ) ) CALL iom_put( "SedC", zsedc (:,:) * zfact ) 429 IF( iom_use("Sdenit" ) ) CALL iom_put( "Sdenit", sdenit (:,:) * rno3 * zfact ) 430 430 ENDIF 431 431 ELSE 432 IF( ln_diatrc ) & 433 & trc2d(:,:,jp_pcs0_2d + 12) = nitrpot(:,:,1) * nitrfix * rno3 * 1.e+3 * rfact2r * fse3t(:,:,1) * tmask(:,:,1) 432 IF( ln_diatrc ) THEN 433 zfact = 1.e+3 * rfact2r ! conversion from molC/l/kt to molC/m3/s 434 trc2d(:,:,jp_pcs0_2d + 12) = nitrpot(:,:,1) * nitrfix * rno3 * zfact * fse3t(:,:,1) * tmask(:,:,1) 435 ENDIF 434 436 ENDIF 435 437 ! -
NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsms.F90
r7806 r10115 450 450 451 451 IF( kt == nittrc000 ) THEN 452 xfact1 = rfact2r * 12. / 1.e15 * ryyss ! conversion molC/kt --> PgC/yr 453 xfact2 = 1.e+3 * rno3 * 14. / 1.e12 * ryyss ! conversion molC/l/s ----> TgN/m3/yr 454 xfact3 = 1.e+3 * rfact2r * rno3 ! conversion molC/l/kt ----> molN/m3/s 452 455 IF( ln_check_mass .AND. lwp) THEN ! Open budget file of NO3, ALK, Si, Fer 453 456 CALL ctl_opn( numco2, 'carbon.budget' , 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 454 457 CALL ctl_opn( numnut, 'nutrient.budget', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 455 458 CALL ctl_opn( numnit, 'nitrogen.budget', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 456 xfact1 = rfact2r * 12. / 1.e15 * ryyss ! conversion molC/kt --> PgC/yr457 xfact2 = 1.e+3 * rno3 * 14. / 1.e12 * ryyss ! conversion molC/l/s ----> TgN/m3/yr458 xfact3 = 1.e+3 * rfact2r * rno3 ! conversion molC/l/kt ----> molN/m3/s459 459 cltxt='time-step Alkalinity Nitrate Phosphorus Silicate Iron' 460 460 IF( lwp ) WRITE(numnut,*) TRIM(cltxt) … … 529 529 IF( iom_use( "tnfix" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 530 530 znitrpottot = glob_sum ( nitrpot(:,:,:) * nitrfix * cvol(:,:,:) ) 531 CALL iom_put( "tnfix" , znitrpottot * 1.e+3 * rno3 ) ! Global nitrogen fixation molC/l to molN/m3531 CALL iom_put( "tnfix" , znitrpottot * xfact3 ) ! Global nitrogen fixation molC/l to molN/m3 532 532 ENDIF 533 533 ! 534 534 IF( iom_use( "tdenit" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 535 zrdenittot = glob_sum ( denitr(:,:,:) * rdenit * xnegtr(:,:,:) * cvol(:,:,:) ) 536 CALL iom_put( "tdenit" , zrdenittot * 1.e+3 * rno3 ) ! Total denitrification molC/l to molN/m3 537 ENDIF 538 ! 539 IF( iom_use( "Sdenit" ) .OR. ( ln_check_mass .AND. kt == nitend ) ) THEN 540 zsdenittot = glob_sum ( sdenit(:,:) * e1e2t(:,:) ) 541 CALL iom_put( "Sdenit", sdenit(:,:) * xfact3 * tmask(:,:,1) ) ! Nitrate reduction in the sediments 535 zrdenittot = glob_sum ( denitr(:,:,:) * rdenit * xnegtr(:,:,:) * cvol(:,:,:) ) ! denitrification in the water column 536 zsdenittot = glob_sum ( sdenit(:,:) * e1e2t(:,:) * tmask(:,:,1) ) ! denitrification in the sediments 537 CALL iom_put( "tdenit" , ( zrdenittot + zsdenittot ) * xfact3 ) ! Total denitrification in molN/m3 542 538 ENDIF 543 539
Note: See TracChangeset
for help on using the changeset viewer.