*ID VOLVAR
*/
*/ Modified by Doug Smith 07/09/2001 to forecast the volcanic aerosol
*/ as an exponential decay (with a timescale of 1 year) from the value
*/ at the start of the forecast.
*/ NOTE: The start of the forecast is taken to be the MODEL_BASIS_TIME,
*/ so this will only work if the model is NOT retarted as an NRUN during
*/ the forecast period. So if the model crashes and won't restart as a
*/ CRUN it will have to be run again from the beginning!
*/
*/
*/
*/ Peter Stott 23/12/99
*/ volvar_right_new is a version of volvar_right that runs into the future
*/ using a constant value of volcanic forcing given by its value in 1999
*/ which has dropped to zero - set to 1 to avoid problems with zero
*/
*/ volvar_right is a corrected version of volvar, which was used in some
*/ experiments at vn4.4. An indexing error in volvar meant that the volcanic
*/ effect was striped within each PE domain rather than with the intended
*/ global variation. This also implied different results according to PE
*/ decomposition.
*/
*/ Mod volvar for 4.5 to pass an array of volcanic aerosol (not defined
*/ herein - use Satoetal for the Sato & al (1993) timeseries) into
*/ HadCM3 radiation code (which would otherwise be using a
*/ climatological amount of such aerosol, but which takes it as a
*/ mass loading, not optical depth). One line-number change from
*/ the 4.4 mod was needed - but more importantly, this one corrects
*/ the indexing which meant previous T3E volcano runs had been
*/ multiply striped, i.e. the 4 numbers for the 4 quarterspheres
*/ had been used 4 times *on each processor*.
*/ http://www_hc/~hadeb/fcgmenu.html has some discussion & I wrote
*/ a brief report on natural forcings of climate 12/97. WJI
*/
*DECLARE RAD_CTL1
*/
*I RAD_CTL1.118
& VOLCMASS(P_FIELDDA), ! VOLCTS expanded to full fields,
! converted to mass loading & possibly multiplied by a fudge factor
*I RAD_CTL1.140
& I30N, IEQR, I30S, ! Indices for rows at 30' & 0'.
*I RAD_CTL1.159
& MASCON, ! Conversion factor from optical depth to mass
! ! - can also incorporate fudge factor !
*I RAD_CTL1.162
REAL VOLCTS1,VOLCTS2,VOLCTS3,VOLCTS4 ! VOLCTS in the latitude bands
REAL DECAY ! exponential decay factor
INTEGER START_MONTH,START_YEAR ! start of forecast
INTEGER ELAPSED_DAYS,ELAPSED_SECS ! time since start of forecast
*I ADB2F404.909
& ,TIME2SEC
*B ADB2F404.929
PARAMETER ( MASCON =
& .0001 * 1.16898 / ( 6.09715E+03 + 4.60178E-04 ))
! .0001 converts the numbers in the DATA statement to optical depth.
! 1.16898 converts .55 micron optical depth to the Slingo (1989)
! band-1 optical depth (from the HadCM2 mod) & then we divide by
! the total k (scattering+absorption) from spec3a_sw_3_tknlaero
! for bands 2 & 3. (This may or may not be strictly correct - I
! think the 1.16898 is legitimately for the old band 1 but it may
! have been derived for the new bands 2 & 3.)
! A fudge factor of 1.5 or so could also be included here.
*I RAD_CTL1.330
CL Expand aerosol optical depth time series to global field, ignoring
CL haloes, which aren't passed down:
C datastart(2) (in comdeck PARVARS) gives the index in the global field
C of the first non-halo row of this processor.
I30N = glsize(2)/3 + 1 - datastart(2) + offy
IEQR = glsize(2)/2 + 1 - datastart(2) + offy
I30S = 2*glsize(2)/3 + 1 - datastart(2) + offy
C
START_MONTH=MODEL_BASIS_TIME(2)
START_YEAR=MODEL_BASIS_TIME(1)
CALL TIME2SEC(I_YEAR,I_MONTH,I_DAY,I_HOUR,I_MINUTE,I_SECOND,
1 BASIS_TIME_DAYS,BASIS_TIME_SECS,
2 ELAPSED_DAYS,ELAPSED_SECS,LCAL360)
IF(LCAL360)THEN
DECAY=exp(-FLOAT(ELAPSED_DAYS)/360.0)
ELSE
DECAY=exp(-FLOAT(ELAPSED_DAYS)/365.0)
ENDIF
VOLCTS1=VOLCTS(1,START_MONTH,START_YEAR)*DECAY
VOLCTS2=VOLCTS(2,START_MONTH,START_YEAR)*DECAY
VOLCTS3=VOLCTS(3,START_MONTH,START_YEAR)*DECAY
VOLCTS4=VOLCTS(4,START_MONTH,START_YEAR)*DECAY
write(6,*)'VOLVAR_FCST ',I_YEAR,I_MONTH,START_YEAR,START_MONTH,
+ ELAPSED_DAYS,DECAY,VOLCTS(1,START_MONTH,START_YEAR),VOLCTS1
C
C The +1 in combination with the rounding of the INTEGER division
C gives the right place, given there being one more row of data
C on the first row of processors.
DO ROW=1+offy, MIN(I30N,P_ROWS-offy)
DO I=1, ROW_LENGTH
VOLCMASS(I+(ROW-1)*ROW_LENGTH) =
& MASCON * VOLCTS1
ENDDO
ENDDO
IF ( I30N .GE. offy .AND. I30N .LT. P_ROWS-offy ) THEN
DO I=1, ROW_LENGTH
VOLCMASS(I+I30N*ROW_LENGTH) = .5 * MASCON *
& ( VOLCTS1 + VOLCTS2 )
ENDDO
ENDIF
DO ROW=MAX(1+offy,I30N+2), MIN(IEQR,P_ROWS-offy)
DO I=1, ROW_LENGTH
VOLCMASS(I+(ROW-1)*ROW_LENGTH) =
& MASCON * VOLCTS2
ENDDO
ENDDO
IF ( IEQR .GE. offy .AND. IEQR .LT. P_ROWS-offy ) THEN
DO I=1, ROW_LENGTH
VOLCMASS(I+IEQR*ROW_LENGTH) = .5 * MASCON *
& ( VOLCTS2 + VOLCTS3 )
ENDDO
ENDIF
DO ROW=MAX(1+offy,IEQR+2), MIN(I30S,P_ROWS-offy)
DO I=1, ROW_LENGTH
VOLCMASS(I+(ROW-1)*ROW_LENGTH) =
& MASCON * VOLCTS3
ENDDO
ENDDO
IF ( I30S .GE. offy .AND. I30S .LT. P_ROWS-offy ) THEN
DO I=1, ROW_LENGTH
VOLCMASS(I+I30S*ROW_LENGTH) = .5 * MASCON *
& ( VOLCTS3 + VOLCTS4 )
ENDDO
ENDIF
DO ROW=MAX(1+offy,I30S+2), P_ROWS-offy
DO I=1, ROW_LENGTH
VOLCMASS(I+(ROW-1)*ROW_LENGTH) =
& MASCON * VOLCTS4
ENDDO
ENDDO
C
C
*/
*/ The added argument has to share a line with an existing one, as the
*/ code on the library has reached the limit of 99 continuation lines.
*D ADB2F404.994
& DISS_SULPHATE(FIRST_POINT_SULPC, 1),VOLCMASS(FIRST_POINT),
*I ADB2F404.1024
& VOLCMASS(FP_LOCAL(I)),
*/
*DECLARE LWRAD3A
*/
*I ADB2F404.635
& , VOLCMASS
*I ADB1F401.516
& , VOLCMASS(NPD_FIELD)
! Mass of stratospheric volcanic aerosol at each point
*I ADB1F402.516
& , VOLCMASS
*/
*DECLARE SWRAD3A
*/
*/
*I ADB2F404.1507
& , VOLCMASS
*I ADB1F401.1044
& , VOLCMASS(NPD_FIELD)
! Mass of stratospheric volcanic aerosol at each point
*I ADB1F402.724
& , VOLCMASS
*/
*DECLARE FILL3A
*/
*I ADB1F402.161
& , VOLCMASS
*I ADB1F402.200
& , VOLCMASS(NPD_FIELD)
! Mass of stratospheric volcanic aerosol at each point
!JME Pass the imposed volcanic aerosol down into the climatology
*I ADB2F404.261
& , VOLCMASS
*I ADB2F404.366
& , VOLCMASS
*I ADB2F404.414
& , VOLCMASS(NPD_FIELD)
! Mass of stratospheric volcanic aerosol at each point
*D ADB2F404.461,462
!JME Replace N_AEROSOL with the hard-wired 5 of this climatology
!JME IF ( I .LT. N_AEROSOL ) THEN
IF ( I .LT. 5 ) THEN
!JME Add suffix _CLIM to aerosols.
AEROSOL_MIX_RATIO_CLIM(L,NLEVS+1-TRINDX(LG),I) = 0.
ELSE
AEROSOL_MIX_RATIO_CLIM(L,NLEVS+1-TRINDX(LG),I) =
& VOLCMASS(LG) * G /
*I ADB2F404.464
ENDIF