Skip to content
Snippets Groups Projects
Commit 195d355e authored by WAUTELET Philippe's avatar WAUTELET Philippe
Browse files

Philippe 21/04/2022: write_stationn: improve writing code (now similar to write_profilern)

parent a1dc9a95
Branches
Tags PACK-MNH-V5-7-02-ELEC
No related merge requests found
...@@ -7,17 +7,25 @@ ...@@ -7,17 +7,25 @@
MODULE MODE_WRITE_STATION_n MODULE MODE_WRITE_STATION_n
! ########################### ! ###########################
use modd_parameters, only: NCOMMENTLGTMAX, NMNHNAMELGTMAX, NUNITLGTMAX
implicit none implicit none
private private
public :: WRITE_STATION_n public :: WRITE_STATION_n
CHARACTER(LEN=NCOMMENTLGTMAX), DIMENSION(:), ALLOCATABLE :: CCOMMENT ! comment string
CHARACTER(LEN=NMNHNAMELGTMAX), DIMENSION(:), ALLOCATABLE :: CTITLE ! title
CHARACTER(LEN=NUNITLGTMAX), DIMENSION(:), ALLOCATABLE :: CUNIT ! physical unit
REAL, DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: XWORK6 ! contains temporal serie
contains contains
! !
! ########################################## ! #####################################
SUBROUTINE WRITE_STATION_n(TPDIAFILE) SUBROUTINE WRITE_STATION_n( TPDIAFILE )
! ########################################## ! #####################################
! !
! !
!!**** *WRITE_STATION* - write the balloon and aircraft trajectories and records !!**** *WRITE_STATION* - write the balloon and aircraft trajectories and records
...@@ -62,16 +70,11 @@ contains ...@@ -62,16 +70,11 @@ contains
! ------------ ! ------------
! !
USE MODD_ALLSTATION_n, ONLY: LDIAG_SURFRAD USE MODD_ALLSTATION_n, ONLY: LDIAG_SURFRAD
use MODD_BUDGET, ONLY: tbudiachrometadata
USE MODD_CONF, ONLY: LCARTESIAN
USE MODD_CONF_n, ONLY: NRR USE MODD_CONF_n, ONLY: NRR
USE MODD_CST, ONLY: XRV
USE MODD_IO, ONLY: ISNPROC, ISP, TFILEDATA USE MODD_IO, ONLY: ISNPROC, ISP, TFILEDATA
USE MODD_MPIF USE MODD_MPIF
USE MODD_NSV, ONLY: tsvlist, nsv, nsv_aer, nsv_aerbeg, nsv_aerend, & USE MODD_NSV, ONLY: nsv
nsv_dst, nsv_dstbeg, nsv_dstend, nsv_slt, nsv_sltbeg, nsv_sltend
USE MODD_PARAM_n, ONLY: CRAD, CSURF, CTURB USE MODD_PARAM_n, ONLY: CRAD, CSURF, CTURB
USE MODD_PARAMETERS, ONLY: XUNDEF
USE MODD_PRECISION, ONLY: MNHINT_MPI, MNHREAL_MPI USE MODD_PRECISION, ONLY: MNHINT_MPI, MNHREAL_MPI
USE MODD_STATION_n, only: NUMBSTAT_LOC, TSTATIONS, tstations_time USE MODD_STATION_n, only: NUMBSTAT_LOC, TSTATIONS, tstations_time
USE MODD_TYPE_STATION, ONLY: TSTATIONDATA USE MODD_TYPE_STATION, ONLY: TSTATIONDATA
...@@ -151,7 +154,7 @@ IF ( ISNPROC > 1 ) THEN ...@@ -151,7 +154,7 @@ IF ( ISNPROC > 1 ) THEN
IPACKSIZE = IPACKSIZE + ISTORE * ( 5 + NRR + NSV ) IPACKSIZE = IPACKSIZE + ISTORE * ( 5 + NRR + NSV )
IF ( CTURB == 'TKEL') IPACKSIZE = IPACKSIZE + ISTORE !Tke term IF ( CTURB == 'TKEL') IPACKSIZE = IPACKSIZE + ISTORE !Tke term
IF ( CRAD /= 'NONE' ) IPACKSIZE = IPACKSIZE + ISTORE !XTSRAD term IF ( CRAD /= 'NONE' ) IPACKSIZE = IPACKSIZE + ISTORE !XTSRAD term
IF (LDIAG_SURFRAD) THEN IF ( LDIAG_SURFRAD ) THEN
IF ( CSURF == 'EXTE' ) IPACKSIZE = IPACKSIZE + ISTORE * 10 IF ( CSURF == 'EXTE' ) IPACKSIZE = IPACKSIZE + ISTORE * 10
IF ( CRAD /= 'NONE' ) IPACKSIZE = IPACKSIZE + ISTORE * 7 IF ( CRAD /= 'NONE' ) IPACKSIZE = IPACKSIZE + ISTORE * 7
IPACKSIZE = IPACKSIZE + ISTORE !XSFCO2 term IPACKSIZE = IPACKSIZE + ISTORE !XSFCO2 term
...@@ -194,7 +197,7 @@ STATION: DO JS = 1, INUMSTAT ...@@ -194,7 +197,7 @@ STATION: DO JS = 1, INUMSTAT
IF ( CRAD /= 'NONE' ) THEN IF ( CRAD /= 'NONE' ) THEN
ZPACK(IPOS:IPOS+ISTORE-1) = TSTATIONS(IDX)%XTSRAD(:); IPOS = IPOS + ISTORE ZPACK(IPOS:IPOS+ISTORE-1) = TSTATIONS(IDX)%XTSRAD(:); IPOS = IPOS + ISTORE
END IF END IF
IF (LDIAG_SURFRAD) THEN IF ( LDIAG_SURFRAD ) THEN
IF ( CSURF == 'EXTE') THEN IF ( CSURF == 'EXTE') THEN
ZPACK(IPOS:IPOS+ISTORE-1) = TSTATIONS(IDX)%XT2M; IPOS = IPOS + ISTORE ZPACK(IPOS:IPOS+ISTORE-1) = TSTATIONS(IDX)%XT2M; IPOS = IPOS + ISTORE
ZPACK(IPOS:IPOS+ISTORE-1) = TSTATIONS(IDX)%XQ2M; IPOS = IPOS + ISTORE ZPACK(IPOS:IPOS+ISTORE-1) = TSTATIONS(IDX)%XQ2M; IPOS = IPOS + ISTORE
...@@ -252,7 +255,7 @@ STATION: DO JS = 1, INUMSTAT ...@@ -252,7 +255,7 @@ STATION: DO JS = 1, INUMSTAT
IF ( CRAD /= 'NONE' ) THEN IF ( CRAD /= 'NONE' ) THEN
TZSTATION%XTSRAD(:) = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE TZSTATION%XTSRAD(:) = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE
END IF END IF
IF (LDIAG_SURFRAD) THEN IF ( LDIAG_SURFRAD ) THEN
IF ( CSURF == 'EXTE' ) THEN IF ( CSURF == 'EXTE' ) THEN
TZSTATION%XT2M = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE TZSTATION%XT2M = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE
TZSTATION%XQ2M = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE TZSTATION%XQ2M = ZPACK(IPOS:IPOS+ISTORE-1); IPOS = IPOS + ISTORE
...@@ -279,25 +282,28 @@ STATION: DO JS = 1, INUMSTAT ...@@ -279,25 +282,28 @@ STATION: DO JS = 1, INUMSTAT
END IF END IF
END IF END IF
CALL STATION_DIACHRO_n( TZSTATION ) CALL STATION_DIACHRO_n( TPDIAFILE, TZSTATION )
END DO STATION END DO STATION
!
!----------------------------------------------------------------------------
!----------------------------------------------------------------------------
!
CONTAINS
!
!----------------------------------------------------------------------------
!----------------------------------------------------------------------------
!
!----------------------------------------------------------------------------
SUBROUTINE STATION_DIACHRO_n( TPSTATION )
use modd_budget, only: NLVL_CATEGORY, NLVL_SUBCATEGORY, NLVL_GROUP, NLVL_SHAPE, NLVL_TIMEAVG, NLVL_NORM, NLVL_MASK END SUBROUTINE WRITE_STATION_n
! ##################################################
SUBROUTINE STATION_DIACHRO_n( TPDIAFILE, TPSTATION )
! ##################################################
USE MODD_ALLSTATION_n, ONLY: LDIAG_SURFRAD
use modd_budget, only: NLVL_CATEGORY, NLVL_SUBCATEGORY, NLVL_GROUP, NLVL_SHAPE, NLVL_TIMEAVG, NLVL_NORM, NLVL_MASK, &
tbudiachrometadata
USE MODD_CONF, ONLY: LCARTESIAN
USE MODD_CST, ONLY: XRV
use modd_field, only: NMNHDIM_STATION_TIME, NMNHDIM_STATION_PROC, NMNHDIM_UNUSED, & use modd_field, only: NMNHDIM_STATION_TIME, NMNHDIM_STATION_PROC, NMNHDIM_UNUSED, &
tfieldmetadata_base, TYPEREAL tfieldmetadata_base, TYPEREAL
use modd_parameters, only: NCOMMENTLGTMAX, NMNHNAMELGTMAX, NSTATIONNAMELGTMAX, NUNITLGTMAX USE MODD_IO, ONLY: TFILEDATA
USE MODD_NSV, ONLY: nsv, nsv_aer, nsv_aerbeg, nsv_aerend, &
nsv_dst, nsv_dstbeg, nsv_dstend, nsv_slt, nsv_sltbeg, nsv_sltend, &
tsvlist
USE MODD_PARAM_n, ONLY: CRAD, CSURF, CTURB
use modd_station_n, only: tstations_time use modd_station_n, only: tstations_time
use modd_type_station, only: tstationdata use modd_type_station, only: tstationdata
...@@ -306,25 +312,23 @@ USE MODE_DUST_PSD ...@@ -306,25 +312,23 @@ USE MODE_DUST_PSD
USE MODE_SALT_PSD USE MODE_SALT_PSD
use MODE_WRITE_DIACHRO, ONLY: Write_diachro use MODE_WRITE_DIACHRO, ONLY: Write_diachro
TYPE(TSTATIONDATA), INTENT(IN) :: TPSTATION TYPE(TFILEDATA), INTENT(IN) :: TPDIAFILE ! diachronic file to write
TYPE(TSTATIONDATA), INTENT(IN) :: TPSTATION
! !
!* 0.2 declaration of local variables for diachro !* 0.2 declaration of local variables for diachro
! !
REAL, DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: ZWORK6 ! contains temporal series REAL, DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: XWORK6 ! contains temporal series
REAL, DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: ZW6 ! contains temporal series to write
REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZSV, ZN0, ZSIG, ZRG REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZSV, ZN0, ZSIG, ZRG
REAL, DIMENSION(:,:,:,:,:), ALLOCATABLE :: ZPTOTA REAL, DIMENSION(:,:,:,:,:), ALLOCATABLE :: ZPTOTA
REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRHO REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRHO
! !
INTEGER, DIMENSION(:), ALLOCATABLE :: IGRID ! grid indicator CHARACTER(LEN=NCOMMENTLGTMAX) :: YCOMMENT ! comment string
CHARACTER(LEN=NSTATIONNAMELGTMAX) :: YGROUP ! group title CHARACTER(LEN=NMNHNAMELGTMAX) :: YTITLE ! title
CHARACTER(LEN=NCOMMENTLGTMAX), DIMENSION(:), ALLOCATABLE :: YCOMMENT ! comment string
CHARACTER(LEN=NMNHNAMELGTMAX), DIMENSION(:), ALLOCATABLE :: YTITLE ! title
CHARACTER(LEN=NUNITLGTMAX), DIMENSION(:), ALLOCATABLE :: YUNIT ! physical unit
! !
!!! do not forget to increment the IPROC value if you add diagnostic !!! !!! do not forget to increment the IPROC value if you add diagnostic !!!
INTEGER :: IPROC ! number of variables records INTEGER :: IPROC ! number of variables records
!!! do not forget to increment the JPROC value if you add diagnostic !!! !!! do not forget to increment the JPROC value if you add diagnostic !!!
INTEGER :: ISTORE
INTEGER :: JPROC ! loop counter INTEGER :: JPROC ! loop counter
INTEGER :: JRR ! loop counter INTEGER :: JRR ! loop counter
INTEGER :: JSV ! loop counter INTEGER :: JSV ! loop counter
...@@ -339,271 +343,106 @@ IF ( CTURB == 'TKEL' ) IPROC = IPROC + 1 ...@@ -339,271 +343,106 @@ IF ( CTURB == 'TKEL' ) IPROC = IPROC + 1
IF (LDIAG_SURFRAD) THEN IF (LDIAG_SURFRAD) THEN
IF(CSURF=="EXTE") IPROC = IPROC + 10 IF(CSURF=="EXTE") IPROC = IPROC + 10
IF(CRAD/="NONE") IPROC = IPROC + 7 IF(CRAD/="NONE") IPROC = IPROC + 7
IPROC = IPROC + 1 ! XSFCO2 term
END IF END IF
IF (LORILAM) IPROC = IPROC + JPMODE*(3+NSOA+NCARB+NSP) IF (LORILAM) IPROC = IPROC + JPMODE*(3+NSOA+NCARB+NSP)
IF (LDUST) IPROC = IPROC + NMODE_DST*3 IF (LDUST) IPROC = IPROC + NMODE_DST*3
IF (LSALT) IPROC = IPROC + NMODE_SLT*3 IF (LSALT) IPROC = IPROC + NMODE_SLT*3
IF ( CRAD /= 'NONE' ) IPROC = IPROC + 1 IF ( CRAD /= 'NONE' ) IPROC = IPROC + 1
IPROC = IPROC + 1 ! XSFCO2 term
! !
ALLOCATE (ZWORK6(1,1,1,SIZE(tstations_time%tpdates),1,IPROC)) ISTORE = SIZE( TSTATIONS_TIME%TPDATES )
ALLOCATE (YCOMMENT(IPROC))
ALLOCATE (YTITLE (IPROC)) ALLOCATE( XWORK6(1, 1, 1, ISTORE, 1, IPROC) )
ALLOCATE (YUNIT (IPROC)) ALLOCATE( CCOMMENT(IPROC) )
ALLOCATE (IGRID (IPROC)) ALLOCATE( CTITLE (IPROC) )
ALLOCATE( CUNIT (IPROC) )
! !
IGRID = 1
YGROUP = TPSTATION%CNAME
JPROC = 0 JPROC = 0
! !
!---------------------------------------------------------------------------- !----------------------------------------------------------------------------
! !
JPROC = JPROC + 1 call Add_point( 'ZS', 'Orography', 'm', SPREAD( tpstation%xzs, 1, istore ) )
YTITLE (JPROC) = 'ZS' call Add_point( 'P', 'Pressure', 'Pa', tpstation%xp(:) )
YUNIT (JPROC) = 'm' ! call Add_point( 'Z', 'Z Pos', 'm', SPREAD( tpstation%xz, 1, istore ) )
YCOMMENT (JPROC) = 'Orography'
ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XZS if ( lcartesian ) then
! call Add_point( 'X', 'X Pos', 'm', SPREAD( tpstation%xx, 1, istore ) )
JPROC = JPROC + 1 call Add_point( 'Y', 'Y Pos', 'm', SPREAD( tpstation%xy, 1, istore ) )
YTITLE (JPROC) = 'P' call Add_point( 'U', 'Axial velocity', 'm s-1', tpstation%xzon(:) )
YUNIT (JPROC) = 'Pa' call Add_point( 'V', 'Transversal velocity', 'm s-1', tpstation%xmer(:) )
YCOMMENT (JPROC) = 'Pressure' else
ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XP(:) call Add_point( 'LON', 'Longitude', 'degree', SPREAD( tpstation%xlon, 1, istore ) )
! call Add_point( 'LAT', 'Latitude', 'degree', SPREAD( tpstation%xlat, 1, istore ) )
!JPROC = JPROC + 1 call Add_point( 'ZON_WIND', 'Zonal wind', 'm s-1', tpstation%xzon(:) )
!YTITLE (JPROC) = 'Z' call Add_point( 'MER_WIND', 'Meridional wind', 'm s-1', tpstation%xmer(:) )
!YUNIT (JPROC) = 'm' end if
!YCOMMENT (JPROC) = 'Z Pos'
!ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XZ call Add_point( 'W', 'Air vertical speed', 'm s-1', tpstation%xw(:) )
! call Add_point( 'Th', 'Potential temperature', 'K', tpstation%xth(:) )
IF (LCARTESIAN) THEN
JPROC = JPROC + 1 if ( ldiag_surfrad ) then
YTITLE (JPROC) = 'X' if ( csurf == "EXTE" ) then
YUNIT (JPROC) = 'm' call Add_point( 'T2m', '2-m temperature', 'K', tpstation%xt2m(:) )
YCOMMENT (JPROC) = 'X Pos' call Add_point( 'Q2m', '2-m humidity', 'kg kg-1', tpstation%xq2m(:) )
ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XX call Add_point( 'HU2m', '2-m relative humidity', 'percent', tpstation%xhu2m(:) )
! call Add_point( 'zon10m', '10-m zonal wind', 'm s-1', tpstation%xzon10m(:) )
JPROC = JPROC + 1 call Add_point( 'mer10m', '10-m meridian wind', 'm s-1', tpstation%xmer10m(:) )
YTITLE (JPROC) = 'Y' call Add_point( 'RN', 'Net radiation', 'W m-2', tpstation%xrn(:) )
YUNIT (JPROC) = 'm' call Add_point( 'H', 'Sensible heat flux', 'W m-2', tpstation%xh(:) )
YCOMMENT (JPROC) = 'Y Pos' call Add_point( 'LE', 'Total Latent heat flux', 'W m-2', tpstation%xle(:) )
ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XY call Add_point( 'G', 'Storage heat flux', 'W m-2', tpstation%xgflux(:) )
! call Add_point( 'LEI', 'Solid Latent heat flux', 'W m-2', tpstation%xlei(:) )
JPROC = JPROC + 1 end if
YTITLE (JPROC) = 'U' if ( crad /= 'NONE' ) then
YUNIT (JPROC) = 'm s-1' call Add_point( 'SWD', 'Downward short-wave radiation', 'W m-2', tpstation%xswd(:) )
YCOMMENT (JPROC) = 'Axial velocity' call Add_point( 'SWU', 'Upward short-wave radiation', 'W m-2', tpstation%xswu(:) )
ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XZON(:) call Add_point( 'LWD', 'Downward long-wave radiation', 'W m-2', tpstation%xlwd(:) )
! call Add_point( 'LWU', 'Upward long-wave radiation', 'W m-2', tpstation%xlwu(:) )
JPROC = JPROC + 1 call Add_point( 'SWDIR', 'Downward direct short-wave radiation', 'W m-2', tpstation%xswdir(:) )
YTITLE (JPROC) = 'V' call Add_point( 'SWDIFF', 'Downward diffuse short-wave radiation', 'W m-2', tpstation%xswdiff(:) )
YUNIT (JPROC) = 'm s-1' call Add_point( 'DSTAOD', 'Dust aerosol optical depth', 'm', tpstation%xdstaod(:) )
YCOMMENT (JPROC) = 'Transversal velocity' end if
ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XMER(:) end if
ELSE
JPROC = JPROC + 1 do jrr = 1, SIZE( tpstation%xr, 2 )
YTITLE (JPROC) = 'LON' select case( jrr )
YUNIT (JPROC) = 'degree' case (1)
YCOMMENT (JPROC) = 'Longitude' call Add_point( 'Rv', 'Water vapor mixing ratio', 'kg kg-1', tpstation%xr(:,jrr) )
ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XLON case (2)
! call Add_point( 'Rc', 'Liquid cloud water mixing ratio', 'kg kg-1', tpstation%xr(:,jrr) )
JPROC = JPROC + 1 case (3)
YTITLE (JPROC) = 'LAT' call Add_point( 'Rr', 'Rain water mixing ratio', 'kg kg-1', tpstation%xr(:,jrr) )
YUNIT (JPROC) = 'degree' case (4)
YCOMMENT (JPROC) = 'Latitude' call Add_point( 'Ri', 'Ice cloud water mixing ratio', 'kg kg-1', tpstation%xr(:,jrr) )
ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XLAT case (5)
! call Add_point( 'Rs', 'Snow mixing ratio', 'kg kg-1', tpstation%xr(:,jrr) )
JPROC = JPROC + 1 case (6)
YTITLE (JPROC) = 'ZON_WIND' call Add_point( 'Rg', 'Graupel mixing ratio', 'kg kg-1', tpstation%xr(:,jrr) )
YUNIT (JPROC) = 'm s-1' case (7)
YCOMMENT (JPROC) = 'Zonal wind' call Add_point( 'Rh', 'Hail mixing ratio', 'kg kg-1', tpstation%xr(:,jrr) )
ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XZON(:) end select
! end do
JPROC = JPROC + 1
YTITLE (JPROC) = 'MER_WIND' if ( cturb == 'TKEL' ) call Add_point( 'Tke', 'Turbulent kinetic energy', 'm2 s-2', tpstation%xtke(:) )
YUNIT (JPROC) = 'm s-1'
YCOMMENT (JPROC) = 'Meridional wind' if ( nsv > 0 ) then
ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XMER(:)
ENDIF
!
JPROC = JPROC + 1
YTITLE (JPROC) = 'W'
YUNIT (JPROC) = 'm s-1'
YCOMMENT (JPROC) = 'Air vertical speed'
ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XW(:)
!
JPROC = JPROC + 1
YTITLE (JPROC) = 'Th'
YUNIT (JPROC) = 'K'
YCOMMENT (JPROC) = 'Potential temperature'
ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XTH(:)
!
IF (LDIAG_SURFRAD) THEN
IF (CSURF=="EXTE") THEN
JPROC = JPROC + 1
YTITLE (JPROC) = 'T2m'
YUNIT (JPROC) = 'K'
YCOMMENT (JPROC) = '2-m temperature'
ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XT2M(:)
!
JPROC = JPROC + 1
YTITLE (JPROC) = 'Q2m'
YUNIT (JPROC) = 'kg kg-1'
YCOMMENT (JPROC) = '2-m humidity'
ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XQ2M(:)
!
JPROC = JPROC + 1
YTITLE (JPROC) = 'HU2m'
YUNIT (JPROC) = 'percent'
YCOMMENT (JPROC) = '2-m relative humidity'
ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XHU2M(:)
!
JPROC = JPROC + 1
YTITLE (JPROC) = 'zon10m'
YUNIT (JPROC) = 'm s-1'
YCOMMENT (JPROC) = '10-m zonal wind'
ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XZON10M(:)
!
JPROC = JPROC + 1
YTITLE (JPROC) = 'mer10m'
YUNIT (JPROC) = 'm s-1'
YCOMMENT (JPROC) = '10-m meridian wind'
ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XMER10M(:)
!
JPROC = JPROC + 1
YTITLE (JPROC) = 'RN'
YUNIT (JPROC) = 'W m-2'
YCOMMENT (JPROC) = 'Net radiation'
ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XRN(:)
!
JPROC = JPROC + 1
YTITLE (JPROC) = 'H'
YUNIT (JPROC) = 'W m-2'
YCOMMENT (JPROC) = 'Sensible heat flux'
ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XH(:)
!
JPROC = JPROC + 1
YTITLE (JPROC) = 'LE'
YUNIT (JPROC) = 'W m-2'
YCOMMENT (JPROC) = 'Total Latent heat flux'
ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XLE(:)
!
JPROC = JPROC + 1
YTITLE (JPROC) = 'G'
YUNIT (JPROC) = 'W m-2'
YCOMMENT (JPROC) = 'Storage heat flux'
ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XGFLUX(:)
!
JPROC = JPROC + 1
YTITLE (JPROC) = 'LEI'
YUNIT (JPROC) = 'W m-2'
YCOMMENT (JPROC) = 'Solid Latent heat flux'
ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XLEI(:)
END IF
IF (CRAD /= 'NONE') THEN
JPROC = JPROC + 1
YTITLE (JPROC) = 'SWD'
YUNIT (JPROC) = 'W m-2'
YCOMMENT (JPROC) = 'Downward short-wave radiation'
ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XSWD(:)
!
JPROC = JPROC + 1
YTITLE (JPROC) = 'SWU'
YUNIT (JPROC) = 'W m-2'
YCOMMENT (JPROC) = 'Upward short-wave radiation'
ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XSWU(:)
!
JPROC = JPROC + 1
YTITLE (JPROC) = 'LWD'
YUNIT (JPROC) = 'W m-2'
YCOMMENT (JPROC) = 'Downward long-wave radiation'
ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XLWD(:)
!
JPROC = JPROC + 1
YTITLE (JPROC) = 'LWU'
YUNIT (JPROC) = 'W m-2'
YCOMMENT (JPROC) = 'Upward long-wave radiation'
ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XLWU(:)
JPROC = JPROC + 1
!
YTITLE (JPROC) = 'SWDIR'
YUNIT (JPROC) = 'W m-2'
YCOMMENT (JPROC) = 'Downward direct short-wave radiation'
ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XSWDIR(:)
!
JPROC = JPROC + 1
YTITLE (JPROC) = 'SWDIFF'
YUNIT (JPROC) = 'W m-2'
YCOMMENT (JPROC) = 'Downward diffuse short-wave radiation'
ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XSWDIFF(:)
!
JPROC = JPROC + 1
YTITLE (JPROC) = 'DSTAOD'
YUNIT (JPROC) = 'm'
YCOMMENT (JPROC) = 'Dust aerosol optical depth'
ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XDSTAOD(:)
!
END IF
ENDIF
!
DO JRR=1,SIZE(TPSTATION%XR,2)
JPROC = JPROC+1
YUNIT (JPROC) = 'kg kg-1'
ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XR(:,JRR)
IF (JRR==1) THEN
YTITLE (JPROC) = 'Rv'
YCOMMENT (JPROC) = 'Water vapor mixing ratio'
ELSE IF (JRR==2) THEN
YTITLE (JPROC) = 'Rc'
YCOMMENT (JPROC) = 'Liquid cloud water mixing ratio'
ELSE IF (JRR==3) THEN
YTITLE (JPROC) = 'Rr'
YCOMMENT (JPROC) = 'Rain water mixing ratio'
ELSE IF (JRR==4) THEN
YTITLE (JPROC) = 'Ri'
YCOMMENT (JPROC) = 'Ice cloud water mixing ratio'
ELSE IF (JRR==5) THEN
YTITLE (JPROC) = 'Rs'
YCOMMENT (JPROC) = 'Snow mixing ratio'
ELSE IF (JRR==6) THEN
YTITLE (JPROC) = 'Rg'
YCOMMENT (JPROC) = 'Graupel mixing ratio'
ELSE IF (JRR==7) THEN
YTITLE (JPROC) = 'Rh'
YCOMMENT (JPROC) = 'Hail mixing ratio'
END IF
END DO
!
IF ( CTURB == 'TKEL' ) THEN
JPROC = JPROC+1
YTITLE (JPROC) = 'Tke'
YUNIT (JPROC) = 'm2 s-2'
YCOMMENT (JPROC) = 'Turbulent kinetic energy'
ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XTKE(:)
END IF
!
IF (SIZE(TPSTATION%XSV,2)>=1) THEN
! Scalar variables ! Scalar variables
DO JSV = 1, NSV DO JSV = 1, NSV
JPROC = JPROC + 1
YTITLE(JPROC) = TRIM( TSVLIST(JSV)%CMNHNAME )
YCOMMENT(JPROC) = ''
IF ( TRIM( TSVLIST(JSV)%CUNITS ) == 'ppv' ) THEN IF ( TRIM( TSVLIST(JSV)%CUNITS ) == 'ppv' ) THEN
YUNIT(JPROC) = 'ppb' !*1e9 for conversion ppv->ppb
ZWORK6(1,1,1,:,1,JPROC) = TPSTATION%XSV(:,JSV) * 1.e9 !*1e9 for conversion ppv->ppb call Add_point( TRIM( TSVLIST(JSV)%CMNHNAME ), '', 'ppb', TPSTATION%XSV(:,JSV) * 1.e9 )
ELSE ELSE
YUNIT(JPROC) = TRIM( TSVLIST(JSV)%CUNITS ) call Add_point( TRIM( TSVLIST(JSV)%CMNHNAME ), '', TSVLIST(JSV)%CUNITS, TPSTATION%XSV(:,JSV) )
ZWORK6(1,1,1,:,1,JPROC) = TPSTATION%XSV(:,JSV)
END IF END IF
END DO END DO
IF ((LORILAM).AND. .NOT.(ANY(TPSTATION%XP(:) == 0.))) THEN IF ((LORILAM).AND. .NOT.(ANY(TPSTATION%XP(:) == 0.))) THEN
ALLOCATE (ZSV(1,1,SIZE(tstations_time%tpdates),NSV_AER)) ALLOCATE (ZSV(1,1,ISTORE,NSV_AER))
ALLOCATE (ZRHO(1,1,SIZE(tstations_time%tpdates))) ALLOCATE (ZRHO(1,1,ISTORE))
ALLOCATE (ZN0(1,1,SIZE(tstations_time%tpdates),JPMODE)) ALLOCATE (ZN0(1,1,ISTORE,JPMODE))
ALLOCATE (ZRG(1,1,SIZE(tstations_time%tpdates),JPMODE)) ALLOCATE (ZRG(1,1,ISTORE,JPMODE))
ALLOCATE (ZSIG(1,1,SIZE(tstations_time%tpdates),JPMODE)) ALLOCATE (ZSIG(1,1,ISTORE,JPMODE))
ALLOCATE (ZPTOTA(1,1,SIZE(tstations_time%tpdates),NSP+NCARB+NSOA,JPMODE)) ALLOCATE (ZPTOTA(1,1,ISTORE,NSP+NCARB+NSOA,JPMODE))
ZSV(1,1,:,1:NSV_AER) = TPSTATION%XSV(:,NSV_AERBEG:NSV_AEREND) ZSV(1,1,:,1:NSV_AER) = TPSTATION%XSV(:,NSV_AERBEG:NSV_AEREND)
IF (SIZE(TPSTATION%XR,2) >0) THEN IF (SIZE(TPSTATION%XR,2) >0) THEN
ZRHO(1,1,:) = 0. ZRHO(1,1,:) = 0.
...@@ -622,127 +461,101 @@ IF (SIZE(TPSTATION%XSV,2)>=1) THEN ...@@ -622,127 +461,101 @@ IF (SIZE(TPSTATION%XSV,2)>=1) THEN
DO JSV=1,JPMODE DO JSV=1,JPMODE
! mean radius ! mean radius
JPROC = JPROC+1 WRITE(YTITLE,'(A6,I1)')'AERRGA',JSV
WRITE(YTITLE(JPROC),'(A6,I1)')'AERRGA',JSV WRITE(YCOMMENT,'(A18,I1)')'RG (nb) AERO MODE ',JSV
YUNIT (JPROC) = 'um' call Add_point( ytitle, ycomment, 'um', ZRG(1,1,:,JSV) )
WRITE(YCOMMENT(JPROC),'(A18,I1)')'RG (nb) AERO MODE ',JSV
ZWORK6 (1,1,1,:,1,JPROC) = ZRG(1,1,:,JSV)
! standard deviation
JPROC = JPROC+1
WRITE(YTITLE(JPROC),'(A7,I1)')'AERSIGA',JSV
YUNIT (JPROC) = ' '
WRITE(YCOMMENT(JPROC),'(A16,I1)')'SIGMA AERO MODE ',JSV
ZWORK6 (1,1,1,:,1,JPROC) = ZSIG(1,1,:,JSV)
! particles number
JPROC = JPROC+1
WRITE(YTITLE(JPROC),'(A6,I1)')'AERN0A',JSV
YUNIT (JPROC) = 'm-3'
WRITE(YCOMMENT(JPROC),'(A13,I1)')'N0 AERO MODE ',JSV
ZWORK6 (1,1,1,:,1,JPROC) = ZN0(1,1,:,JSV)
JPROC = JPROC+1
WRITE(YTITLE(JPROC),'(A5,I1)')'MOC ',JSV
YUNIT (JPROC) = 'ug m-3'
WRITE(YCOMMENT,'(A23,I1)')'MASS OC AEROSOL MODE ',JSV
ZWORK6(1,1,1,:,1,JPROC)=ZPTOTA(1,1,:,JP_AER_OC,JSV)
JPROC = JPROC+1
WRITE(YTITLE(JPROC),'(A5,I1)')'MBC ',JSV
YUNIT (JPROC) = 'ug m-3'
WRITE(YCOMMENT,'(A23,I1)')'MASS BC AEROSOL MODE ',JSV
ZWORK6(1,1,1,:,1,JPROC)=ZPTOTA(1,1,:,JP_AER_BC,JSV)
JPROC = JPROC+1 ! standard deviation
WRITE(YTITLE(JPROC),'(A5,I1)')'MDST ',JSV WRITE(YTITLE,'(A7,I1)')'AERSIGA',JSV
YUNIT (JPROC) = 'ug m-3' WRITE(YCOMMENT,'(A16,I1)')'SIGMA AERO MODE ',JSV
WRITE(YCOMMENT,'(A23,I1)')'MASS DST AEROSOL MODE ',JSV call Add_point( ytitle, ycomment, '',ZSIG(1,1,:,JSV) )
ZWORK6(1,1,1,:,1,JPROC)=ZPTOTA(1,1,:,JP_AER_DST,JSV)
JPROC = JPROC+1
WRITE(YTITLE(JPROC),'(A5,I1)')'MSO4 ',JSV
YUNIT (JPROC) = 'ug m-3'
WRITE(YCOMMENT,'(A23,I1)')'MASS SO4 AEROSOL MODE ',JSV
ZWORK6(1,1,1,:,1,JPROC)=ZPTOTA(1,1,:,JP_AER_SO4,JSV)
JPROC = JPROC+1
WRITE(YTITLE(JPROC),'(A5,I1)')'MNO3 ',JSV
YUNIT (JPROC) = 'ug m-3'
WRITE(YCOMMENT,'(A23,I1)')'MASS NO3 AEROSOL MODE ',JSV
ZWORK6(1,1,1,:,1,JPROC)=ZPTOTA(1,1,:,JP_AER_NO3,JSV)
JPROC = JPROC+1 ! particles number
WRITE(YTITLE(JPROC),'(A5,I1)')'MH2O ',JSV WRITE(YTITLE,'(A6,I1)')'AERN0A',JSV
YUNIT (JPROC) = 'ug m-3' WRITE(YCOMMENT,'(A13,I1)')'N0 AERO MODE ',JSV
WRITE(YCOMMENT,'(A23,I1)')'MASS H2O AEROSOL MODE ',JSV call Add_point( ytitle, ycomment, 'm-3', ZN0(1,1,:,JSV) )
ZWORK6(1,1,1,:,1,JPROC)=ZPTOTA(1,1,:,JP_AER_H2O,JSV)
JPROC = JPROC+1 WRITE(YTITLE,'(A5,I1)')'MOC ',JSV
WRITE(YTITLE(JPROC),'(A5,I1)')'MNH3 ',JSV WRITE(CCOMMENT,'(A23,I1)')'MASS OC AEROSOL MODE ',JSV
YUNIT (JPROC) = 'ug m-3' call Add_point( ytitle, ycomment, 'ug m-3', ZPTOTA(1,1,:,JP_AER_OC,JSV) )
WRITE(YCOMMENT,'(A23,I1)')'MASS NH3 AEROSOL MODE ',JSV
ZWORK6(1,1,1,:,1,JPROC)=ZPTOTA(1,1,:,JP_AER_NH3,JSV) WRITE(YTITLE,'(A5,I1)')'MBC ',JSV
JPROC = JPROC+1 WRITE(CCOMMENT,'(A23,I1)')'MASS BC AEROSOL MODE ',JSV
IF (NSOA == 10) THEN call Add_point( ytitle, ycomment, 'ug m-3', ZPTOTA(1,1,:,JP_AER_BC,JSV) )
WRITE(YTITLE(JPROC),'(A5,I1)')'MSOA1',JSV
YUNIT (JPROC) = 'ug m-3' WRITE(YTITLE,'(A5,I1)')'MDST ',JSV
WRITE(YCOMMENT,'(A23,I1)')'MASS SOA1 AEROSOL MODE ',JSV WRITE(CCOMMENT,'(A23,I1)')'MASS DST AEROSOL MODE ',JSV
ZWORK6(1,1,1,:,1,JPROC)=ZPTOTA(1,1,:,JP_AER_SOA1,JSV) call Add_point( ytitle, ycomment, 'ug m-3', ZPTOTA(1,1,:,JP_AER_DST,JSV) )
JPROC = JPROC+1
WRITE(YTITLE(JPROC),'(A5,I1)')'MSOA2',JSV WRITE(YTITLE,'(A5,I1)')'MSO4 ',JSV
YUNIT (JPROC) = 'ug m-3' WRITE(CCOMMENT,'(A23,I1)')'MASS SO4 AEROSOL MODE ',JSV
WRITE(YCOMMENT,'(A23,I1)')'MASS SOA2 AEROSOL MODE ',JSV call Add_point( ytitle, ycomment, 'ug m-3', ZPTOTA(1,1,:,JP_AER_SO4,JSV) )
ZWORK6(1,1,1,:,1,JPROC)=ZPTOTA(1,1,:,JP_AER_SOA2,JSV)
JPROC = JPROC+1 WRITE(YTITLE,'(A5,I1)')'MNO3 ',JSV
WRITE(YTITLE(JPROC),'(A5,I1)')'MSOA3',JSV WRITE(CCOMMENT,'(A23,I1)')'MASS NO3 AEROSOL MODE ',JSV
YUNIT (JPROC) = 'ug m-3' call Add_point( ytitle, ycomment, 'ug m-3', ZPTOTA(1,1,:,JP_AER_NO3,JSV) )
WRITE(YCOMMENT,'(A23,I1)')'MASS SOA3 AEROSOL MODE ',JSV
ZWORK6(1,1,1,:,1,JPROC)=ZPTOTA(1,1,:,JP_AER_SOA3,JSV) WRITE(YTITLE,'(A5,I1)')'MH2O ',JSV
JPROC = JPROC+1 WRITE(CCOMMENT,'(A23,I1)')'MASS H2O AEROSOL MODE ',JSV
WRITE(YTITLE(JPROC),'(A5,I1)')'MSOA4',JSV call Add_point( ytitle, ycomment, 'ug m-3', ZPTOTA(1,1,:,JP_AER_H2O,JSV) )
YUNIT (JPROC) = 'ug m-3'
WRITE(YCOMMENT,'(A23,I1)')'MASS SOA4 AEROSOL MODE ',JSV WRITE(YTITLE,'(A5,I1)')'MNH3 ',JSV
ZWORK6(1,1,1,:,1,JPROC)=ZPTOTA(1,1,:,JP_AER_SOA4,JSV) WRITE(CCOMMENT,'(A23,I1)')'MASS NH3 AEROSOL MODE ',JSV
JPROC = JPROC+1 call Add_point( ytitle, ycomment, 'ug m-3', ZPTOTA(1,1,:,JP_AER_NH3,JSV) )
WRITE(YTITLE(JPROC),'(A5,I1)')'MSOA5',JSV
YUNIT (JPROC) = 'ug m-3' IF ( NSOA == 10 ) THEN
WRITE(YCOMMENT,'(A23,I1)')'MASS SOA5 AEROSOL MODE ',JSV WRITE(YTITLE,'(A5,I1)')'MSOA1',JSV
ZWORK6(1,1,1,:,1,JPROC)=ZPTOTA(1,1,:,JP_AER_SOA5,JSV) WRITE(CCOMMENT,'(A23,I1)')'MASS SOA1 AEROSOL MODE ',JSV
JPROC = JPROC+1 call Add_point( ytitle, ycomment, 'ug m-3', ZPTOTA(1,1,:,JP_AER_SOA1,JSV) )
WRITE(YTITLE(JPROC),'(A5,I1)')'MSOA6',JSV
YUNIT (JPROC) = 'ug m-3' WRITE(YTITLE,'(A5,I1)')'MSOA2',JSV
WRITE(YCOMMENT,'(A23,I1)')'MASS SOA6 AEROSOL MODE ',JSV WRITE(CCOMMENT,'(A23,I1)')'MASS SOA2 AEROSOL MODE ',JSV
ZWORK6(1,1,1,:,1,JPROC)=ZPTOTA(1,1,:,JP_AER_SOA6,JSV) call Add_point( ytitle, ycomment, 'ug m-3', ZPTOTA(1,1,:,JP_AER_SOA2,JSV) )
JPROC = JPROC+1
WRITE(YTITLE(JPROC),'(A5,I1)')'MSOA7',JSV WRITE(YTITLE,'(A5,I1)')'MSOA3',JSV
YUNIT (JPROC) = 'ug m-3' WRITE(CCOMMENT,'(A23,I1)')'MASS SOA3 AEROSOL MODE ',JSV
WRITE(YCOMMENT,'(A23,I1)')'MASS SOA7 AEROSOL MODE ',JSV call Add_point( ytitle, ycomment, 'ug m-3', ZPTOTA(1,1,:,JP_AER_SOA3,JSV) )
ZWORK6(1,1,1,:,1,JPROC)=ZPTOTA(1,1,:,JP_AER_SOA7,JSV)
JPROC = JPROC+1 WRITE(YTITLE,'(A5,I1)')'MSOA4',JSV
WRITE(YTITLE(JPROC),'(A5,I1)')'MSOA8',JSV WRITE(CCOMMENT,'(A23,I1)')'MASS SOA4 AEROSOL MODE ',JSV
YUNIT (JPROC) = 'ug m-3' call Add_point( ytitle, ycomment, 'ug m-3', ZPTOTA(1,1,:,JP_AER_SOA4,JSV) )
WRITE(YCOMMENT,'(A23,I1)')'MASS SOA8 AEROSOL MODE ',JSV
ZWORK6(1,1,1,:,1,JPROC)=ZPTOTA(1,1,:,JP_AER_SOA8,JSV) WRITE(YTITLE,'(A5,I1)')'MSOA5',JSV
JPROC = JPROC+1 WRITE(CCOMMENT,'(A23,I1)')'MASS SOA5 AEROSOL MODE ',JSV
WRITE(YTITLE(JPROC),'(A5,I1)')'MSOA9',JSV call Add_point( ytitle, ycomment, 'ug m-3', ZPTOTA(1,1,:,JP_AER_SOA5,JSV) )
YUNIT (JPROC) = 'ug m-3'
WRITE(YCOMMENT,'(A23,I1)')'MASS SOA9 AEROSOL MODE ',JSV WRITE(YTITLE,'(A5,I1)')'MSOA6',JSV
ZWORK6(1,1,1,:,1,JPROC)=ZPTOTA(1,1,:,JP_AER_SOA9,JSV) WRITE(CCOMMENT,'(A23,I1)')'MASS SOA6 AEROSOL MODE ',JSV
JPROC = JPROC+1 call Add_point( ytitle, ycomment, 'ug m-3', ZPTOTA(1,1,:,JP_AER_SOA6,JSV) )
WRITE(YTITLE(JPROC),'(A6,I1)')'MSOA10',JSV
YUNIT (JPROC) = 'ug m-3' WRITE(YTITLE,'(A5,I1)')'MSOA7',JSV
WRITE(YCOMMENT,'(A24,I1)')'MASS SOA10 AEROSOL MODE ',JSV WRITE(CCOMMENT,'(A23,I1)')'MASS SOA7 AEROSOL MODE ',JSV
ZWORK6(1,1,1,:,1,JPROC)=ZPTOTA(1,1,:,JP_AER_SOA10,JSV) call Add_point( ytitle, ycomment, 'ug m-3', ZPTOTA(1,1,:,JP_AER_SOA7,JSV) )
WRITE(YTITLE,'(A5,I1)')'MSOA8',JSV
WRITE(CCOMMENT,'(A23,I1)')'MASS SOA8 AEROSOL MODE ',JSV
call Add_point( ytitle, ycomment, 'ug m-3', ZPTOTA(1,1,:,JP_AER_SOA8,JSV) )
WRITE(YTITLE,'(A5,I1)')'MSOA9',JSV
WRITE(CCOMMENT,'(A23,I1)')'MASS SOA9 AEROSOL MODE ',JSV
call Add_point( ytitle, ycomment, 'ug m-3', ZPTOTA(1,1,:,JP_AER_SOA9,JSV) )
WRITE(YTITLE,'(A6,I1)')'MSOA10',JSV
WRITE(CCOMMENT,'(A24,I1)')'MASS SOA10 AEROSOL MODE ',JSV
call Add_point( ytitle, ycomment, 'ug m-3', ZPTOTA(1,1,:,JP_AER_SOA10,JSV) )
END IF END IF
ENDDO END DO
DEALLOCATE (ZSV,ZRHO) DEALLOCATE (ZSV,ZRHO)
DEALLOCATE (ZN0,ZRG,ZSIG) DEALLOCATE (ZN0,ZRG,ZSIG)
END IF END IF
IF ((LDUST).AND. .NOT.(ANY(TPSTATION%XP(:) == 0.))) THEN IF ((LDUST).AND. .NOT.(ANY(TPSTATION%XP(:) == 0.))) THEN
ALLOCATE (ZSV(1,1,SIZE(tstations_time%tpdates),NSV_DST)) ALLOCATE (ZSV(1,1,ISTORE,NSV_DST))
ALLOCATE (ZRHO(1,1,SIZE(tstations_time%tpdates))) ALLOCATE (ZRHO(1,1,ISTORE))
ALLOCATE (ZN0(1,1,SIZE(tstations_time%tpdates),NMODE_DST)) ALLOCATE (ZN0(1,1,ISTORE,NMODE_DST))
ALLOCATE (ZRG(1,1,SIZE(tstations_time%tpdates),NMODE_DST)) ALLOCATE (ZRG(1,1,ISTORE,NMODE_DST))
ALLOCATE (ZSIG(1,1,SIZE(tstations_time%tpdates),NMODE_DST)) ALLOCATE (ZSIG(1,1,ISTORE,NMODE_DST))
ZSV(1,1,:,1:NSV_DST) = TPSTATION%XSV(:,NSV_DSTBEG:NSV_DSTEND) ZSV(1,1,:,1:NSV_DST) = TPSTATION%XSV(:,NSV_DSTBEG:NSV_DSTEND)
IF (SIZE(TPSTATION%XR,2) >0) THEN IF (SIZE(TPSTATION%XR,2) >0) THEN
ZRHO(1,1,:) = 0. ZRHO(1,1,:) = 0.
...@@ -760,33 +573,33 @@ IF (SIZE(TPSTATION%XSV,2)>=1) THEN ...@@ -760,33 +573,33 @@ IF (SIZE(TPSTATION%XSV,2)>=1) THEN
DO JSV=1,NMODE_DST DO JSV=1,NMODE_DST
! mean radius ! mean radius
JPROC = JPROC+1 JPROC = JPROC+1
WRITE(YTITLE(JPROC),'(A6,I1)')'DSTRGA',JSV WRITE(CTITLE(JPROC),'(A6,I1)')'DSTRGA',JSV
YUNIT (JPROC) = 'um' CUNIT (JPROC) = 'um'
WRITE(YCOMMENT(JPROC),'(A18,I1)')'RG (nb) DUST MODE ',JSV WRITE(CCOMMENT(JPROC),'(A18,I1)')'RG (nb) DUST MODE ',JSV
ZWORK6 (1,1,1,:,1,JPROC) = ZRG(1,1,:,JSV) XWORK6 (1,1,1,:,1,JPROC) = ZRG(1,1,:,JSV)
! standard deviation ! standard deviation
JPROC = JPROC+1 JPROC = JPROC+1
WRITE(YTITLE(JPROC),'(A7,I1)')'DSTSIGA',JSV WRITE(CTITLE(JPROC),'(A7,I1)')'DSTSIGA',JSV
YUNIT (JPROC) = ' ' CUNIT (JPROC) = ' '
WRITE(YCOMMENT(JPROC),'(A16,I1)')'SIGMA DUST MODE ',JSV WRITE(CCOMMENT(JPROC),'(A16,I1)')'SIGMA DUST MODE ',JSV
ZWORK6 (1,1,1,:,1,JPROC) = ZSIG(1,1,:,JSV) XWORK6 (1,1,1,:,1,JPROC) = ZSIG(1,1,:,JSV)
! particles number ! particles number
JPROC = JPROC+1 JPROC = JPROC+1
WRITE(YTITLE(JPROC),'(A6,I1)')'DSTN0A',JSV WRITE(CTITLE(JPROC),'(A6,I1)')'DSTN0A',JSV
YUNIT (JPROC) = 'm-3' CUNIT (JPROC) = 'm-3'
WRITE(YCOMMENT(JPROC),'(A13,I1)')'N0 DUST MODE ',JSV WRITE(CCOMMENT(JPROC),'(A13,I1)')'N0 DUST MODE ',JSV
ZWORK6 (1,1,1,:,1,JPROC) = ZN0(1,1,:,JSV) XWORK6 (1,1,1,:,1,JPROC) = ZN0(1,1,:,JSV)
ENDDO ENDDO
DEALLOCATE (ZSV,ZRHO) DEALLOCATE (ZSV,ZRHO)
DEALLOCATE (ZN0,ZRG,ZSIG) DEALLOCATE (ZN0,ZRG,ZSIG)
END IF END IF
IF ((LSALT).AND. .NOT.(ANY(TPSTATION%XP(:) == 0.))) THEN IF ((LSALT).AND. .NOT.(ANY(TPSTATION%XP(:) == 0.))) THEN
ALLOCATE (ZSV(1,1,SIZE(tstations_time%tpdates),NSV_SLT)) ALLOCATE (ZSV(1,1,ISTORE,NSV_SLT))
ALLOCATE (ZRHO(1,1,SIZE(tstations_time%tpdates))) ALLOCATE (ZRHO(1,1,ISTORE))
ALLOCATE (ZN0(1,1,SIZE(tstations_time%tpdates),NMODE_SLT)) ALLOCATE (ZN0(1,1,ISTORE,NMODE_SLT))
ALLOCATE (ZRG(1,1,SIZE(tstations_time%tpdates),NMODE_SLT)) ALLOCATE (ZRG(1,1,ISTORE,NMODE_SLT))
ALLOCATE (ZSIG(1,1,SIZE(tstations_time%tpdates),NMODE_SLT)) ALLOCATE (ZSIG(1,1,ISTORE,NMODE_SLT))
ZSV(1,1,:,1:NSV_SLT) = TPSTATION%XSV(:,NSV_SLTBEG:NSV_SLTEND) ZSV(1,1,:,1:NSV_SLT) = TPSTATION%XSV(:,NSV_SLTBEG:NSV_SLTEND)
IF (SIZE(TPSTATION%XR,2) >0) THEN IF (SIZE(TPSTATION%XR,2) >0) THEN
ZRHO(1,1,:) = 0. ZRHO(1,1,:) = 0.
...@@ -803,59 +616,39 @@ IF (SIZE(TPSTATION%XSV,2)>=1) THEN ...@@ -803,59 +616,39 @@ IF (SIZE(TPSTATION%XSV,2)>=1) THEN
CALL PPP2SALT(ZSV,ZRHO, PSIG3D=ZSIG, PRG3D=ZRG, PN3D=ZN0) CALL PPP2SALT(ZSV,ZRHO, PSIG3D=ZSIG, PRG3D=ZRG, PN3D=ZN0)
DO JSV=1,NMODE_SLT DO JSV=1,NMODE_SLT
! mean radius ! mean radius
JPROC = JPROC+1 WRITE(CTITLE(JPROC),'(A6,I1)')'SLTRGA',JSV
WRITE(YTITLE(JPROC),'(A6,I1)')'SLTRGA',JSV WRITE(CCOMMENT(JPROC),'(A18,I1)')'RG (nb) SALT MODE ',JSV
YUNIT (JPROC) = 'um' call Add_point( ytitle, ycomment, 'um', ZRG(1,1,:,JSV) )
WRITE(YCOMMENT(JPROC),'(A18,I1)')'RG (nb) SALT MODE ',JSV
ZWORK6 (1,1,1,:,1,JPROC) = ZRG(1,1,:,JSV)
! standard deviation ! standard deviation
JPROC = JPROC+1 WRITE(CTITLE(JPROC),'(A7,I1)')'SLTSIGA',JSV
WRITE(YTITLE(JPROC),'(A7,I1)')'SLTSIGA',JSV WRITE(CCOMMENT(JPROC),'(A16,I1)')'SIGMA DUST MODE ',JSV
YUNIT (JPROC) = ' ' call Add_point( ytitle, ycomment, '',ZSIG(1,1,:,JSV) )
WRITE(YCOMMENT(JPROC),'(A16,I1)')'SIGMA DUST MODE ',JSV
ZWORK6 (1,1,1,:,1,JPROC) = ZSIG(1,1,:,JSV)
! particles number ! particles number
JPROC = JPROC+1 WRITE(CTITLE(JPROC),'(A6,I1)')'SLTN0A',JSV
WRITE(YTITLE(JPROC),'(A6,I1)')'SLTN0A',JSV WRITE(CCOMMENT(JPROC),'(A13,I1)')'N0 DUST MODE ',JSV
YUNIT (JPROC) = 'm-3' call Add_point( ytitle, ycomment, 'm-3', ZN0(1,1,:,JSV) )
WRITE(YCOMMENT(JPROC),'(A13,I1)')'N0 DUST MODE ',JSV
ZWORK6 (1,1,1,:,1,JPROC) = ZN0(1,1,:,JSV)
ENDDO ENDDO
DEALLOCATE (ZSV,ZRHO) DEALLOCATE (ZSV,ZRHO)
DEALLOCATE (ZN0,ZRG,ZSIG) DEALLOCATE (ZN0,ZRG,ZSIG)
END IF END IF
END IF end if
IF ( CRAD /= 'NONE' ) THEN if ( crad /= 'NONE' ) call Add_point( 'Tsrad', 'Radiative Surface Temperature', 'K', tpstation%xtsrad(:) )
JPROC = JPROC+1
YTITLE (JPROC) = 'Tsrad' if ( ldiag_surfrad ) call Add_point( 'SFCO2', 'CO2 Surface Flux', 'mg m-2 s-1', tpstation%xsfco2(:) )
YUNIT (JPROC) = 'K'
YCOMMENT (JPROC) = 'Radiative Surface Temperature'
ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XTSRAD(:)
END IF
!
! IF (ANY(TPSTATION%XSFCO2(:)/=XUNDEF)) THEN
JPROC = JPROC+1
YTITLE (JPROC) = 'SFCO2'
YUNIT (JPROC) = 'mg m-2 s-1'
YCOMMENT (JPROC) = 'CO2 Surface Flux'
ZWORK6 (1,1,1,:,1,JPROC) = TPSTATION%XSFCO2(:)
! END IF
! !
!---------------------------------------------------------------------------- !----------------------------------------------------------------------------
! !
! !
ALLOCATE (ZW6(1,1,1,SIZE(tstations_time%tpdates),1,JPROC))
ZW6 = ZWORK6(:,:,:,:,:,:JPROC)
DEALLOCATE(ZWORK6)
!
allocate( tzfields( jproc ) ) allocate( tzfields( jproc ) )
tzfields(:)%cmnhname = ytitle(1 : jproc) tzfields(:)%cmnhname = ctitle(1 : jproc)
tzfields(:)%cstdname = '' tzfields(:)%cstdname = ''
tzfields(:)%clongname = ytitle(1 : jproc) tzfields(:)%clongname = ctitle(1 : jproc)
tzfields(:)%cunits = yunit(1 : jproc) tzfields(:)%cunits = cunit(1 : jproc)
tzfields(:)%ccomment = ycomment(1 : jproc) tzfields(:)%ccomment = ccomment(1 : jproc)
tzfields(:)%ngrid = 0 tzfields(:)%ngrid = 0
tzfields(:)%ntype = TYPEREAL tzfields(:)%ntype = TYPEREAL
tzfields(:)%ndims = 2 tzfields(:)%ndims = 2
...@@ -875,12 +668,12 @@ tzbudiachro%clevels (NLVL_SUBCATEGORY) = '' ...@@ -875,12 +668,12 @@ tzbudiachro%clevels (NLVL_SUBCATEGORY) = ''
tzbudiachro%ccomments(NLVL_SUBCATEGORY) = '' tzbudiachro%ccomments(NLVL_SUBCATEGORY) = ''
tzbudiachro%lleveluse(NLVL_GROUP) = .true. tzbudiachro%lleveluse(NLVL_GROUP) = .true.
tzbudiachro%clevels (NLVL_GROUP) = ygroup tzbudiachro%clevels (NLVL_GROUP) = tpstation%cname
tzbudiachro%ccomments(NLVL_GROUP) = 'Values at position of station ' // Trim( ygroup ) tzbudiachro%ccomments(NLVL_GROUP) = 'Values at position of station ' // Trim( tpstation%cname )
tzbudiachro%lleveluse(NLVL_SHAPE) = .false. tzbudiachro%lleveluse(NLVL_SHAPE) = .false.
tzbudiachro%clevels (NLVL_SHAPE) = 'Point' tzbudiachro%clevels (NLVL_SHAPE) = 'Point'
tzbudiachro%ccomments(NLVL_SHAPE) = 'Values at position of station ' // Trim( ygroup ) tzbudiachro%ccomments(NLVL_SHAPE) = 'Values at position of station ' // Trim( tpstation%cname )
tzbudiachro%lleveluse(NLVL_TIMEAVG) = .false. tzbudiachro%lleveluse(NLVL_TIMEAVG) = .false.
tzbudiachro%clevels (NLVL_TIMEAVG) = 'Not_time_averaged' tzbudiachro%clevels (NLVL_TIMEAVG) = 'Not_time_averaged'
...@@ -912,18 +705,45 @@ tzbudiachro%njh = 1 ...@@ -912,18 +705,45 @@ tzbudiachro%njh = 1
tzbudiachro%nkl = 1 tzbudiachro%nkl = 1
tzbudiachro%nkh = 1 tzbudiachro%nkh = 1
call Write_diachro( tpdiafile, tzbudiachro, tzfields, tstations_time%tpdates, zw6 ) call Write_diachro( tpdiafile, tzbudiachro, tzfields, tstations_time%tpdates, xwork6(:,:,:,:,:,:jproc) )
deallocate( tzfields ) deallocate( tzfields )
DEALLOCATE (ZW6) !Necessary because global variables (private inside module)
DEALLOCATE (YCOMMENT) Deallocate( xwork6 )
DEALLOCATE (YTITLE ) Deallocate (ccomment)
DEALLOCATE (YUNIT ) Deallocate (ctitle )
DEALLOCATE (IGRID ) Deallocate (cunit )
!---------------------------------------------------------------------------- !----------------------------------------------------------------------------
contains
! ######################################################
subroutine Add_point( htitle, hcomment, hunits, pfield )
! ######################################################
use mode_msg
character(len=*), intent(in) :: htitle
character(len=*), intent(in) :: hcomment
character(len=*), intent(in) :: hunits
real, dimension(:), intent(in) :: pfield
integer :: jk
jproc = jproc + 1
if ( jproc > iproc ) call Print_msg( NVERB_FATAL, 'IO', 'Add_point', 'more processes than expected' )
ctitle(jproc) = Trim( htitle)
ccomment(jproc) = Trim( hcomment )
cunit(jproc) = Trim( hunits )
xwork6(1, 1, 1, :, 1, jproc) = pfield(:)
end subroutine Add_point
END SUBROUTINE STATION_DIACHRO_n END SUBROUTINE STATION_DIACHRO_n
!
END SUBROUTINE WRITE_STATION_n
END MODULE MODE_WRITE_STATION_n END MODULE MODE_WRITE_STATION_n
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment