Files
GEOS-Chem-adjoint-v35-note/code/modified/hippo_mod.f~
2018-08-28 00:37:54 -04:00

189 lines
5.6 KiB
FortranFixed

MODULE HIPPO_MOD
IMPLICIT NONE
INTEGER :: N_HIPPO
REAL*8, ALLOCATABLE :: YEAR_HIPPO(:), DAY_HIPPO(:), TIME_HIPPO(:)
REAL*8, ALLOCATABLE :: LON_HIPPO(:), LAT_HIPPO(:), ALT_HIPPO(:)
REAL*8, ALLOCATABLE :: O3_HIPPO(:), O3_HIPPO_GC(:), MONTH_HIPPO(:)
CONTAINS
SUBROUTINE CLEANUP_HIPPO
!! Clean up HIPPO arrays
IF (ALLOCATED(YEAR_HIPPO)) DEALLOCATE(YEAR_HIPPO)
IF (ALLOCATED(MONTH_HIPPO)) DEALLOCATE(MONTH_HIPPO)
IF (ALLOCATED(DAY_HIPPO)) DEALLOCATE(DAY_HIPPO)
IF (ALLOCATED(TIME_HIPPO)) DEALLOCATE(TIME_HIPPO)
IF (ALLOCATED(LON_HIPPO)) DEALLOCATE(LON_HIPPO)
IF (ALLOCATED(LAT_HIPPO)) DEALLOCATE(LAT_HIPPO)
IF (ALLOCATED(ALT_HIPPO)) DEALLOCATE(ALT_HIPPO)
IF (ALLOCATED(O3_HIPPO)) DEALLOCATE(O3_HIPPO)
IF (ALLOCATED(O3_HIPPO_GC)) DEALLOCATE(O3_HIPPO_GC)
END SUBROUTINE CLEANUP_HIPPO
SUBROUTINE INIT_HIPPO
!! Initialize HIPPO arrays
!N_HIPPO = 18951
!N_HIPPO = 18640
!N_HIPPO = 21812
N_HIPPO = 136
ALLOCATE(YEAR_HIPPO(N_HIPPO))
ALLOCATE(MONTH_HIPPO(N_HIPPO))
ALLOCATE(DAY_HIPPO(N_HIPPO))
ALLOCATE(TIME_HIPPO(N_HIPPO))
ALLOCATE(LON_HIPPO(N_HIPPO))
ALLOCATE(LAT_HIPPO(N_HIPPO))
ALLOCATE(ALT_HIPPO(N_HIPPO))
ALLOCATE(O3_HIPPO(N_HIPPO))
ALLOCATE(O3_HIPPO_GC(N_HIPPO))
! Initialize GC-O3 values to missing value
O3_HIPPO_GC = -999.99
END SUBROUTINE INIT_HIPPO
SUBROUTINE READ_HIPPO_DATA
!! Read HIPPO data from disk
INTEGER :: I
OPEN(UNIT=24,
& FILE="/users/jk/07/xzhang/ACE_FTS_NO2/ace_fts_no2.csv")
DO I=1,N_HIPPO
READ(24, *) YEAR_HIPPO(I), MONTH_HIPPO(I), DAY_HIPPO(I),
& TIME_HIPPO(I), LON_HIPPO(I), LAT_HIPPO(I),
& ALT_HIPPO(I), O3_HIPPO(I)
END DO
CLOSE(UNIT=24)
END SUBROUTINE READ_HIPPO_DATA
SUBROUTINE WRITE_HIPPO_DATA
!! Write HIPPO data to disk
INTEGER :: I
OPEN(UNIT=25,FILE="no2_gc.csv")
DO I=1,N_HIPPO
WRITE(25, *) YEAR_HIPPO(I), MONTH_HIPPO(I), DAY_HIPPO(I),
& TIME_HIPPO(I), LON_HIPPO(I), LAT_HIPPO(I),
& ALT_HIPPO(I), O3_HIPPO_GC(I)
END DO
CLOSE(UNIT=25)
END SUBROUTINE WRITE_HIPPO_DATA
SUBROUTINE COMPARE_HIPPO_DATA
USE GRID_MOD, ONLY : GET_IJ
USE GRID_MOD, ONLY : GET_XMID, GET_YMID
USE TIME_MOD, ONLY : GET_MINUTE, GET_HOUR, GET_DAY
USE TIME_MOD, ONLY : GET_YEAR, GET_MONTH
USE DAO_MOD, ONLY : BXHEIGHT
USE TROPOPAUSE_MOD, ONLY : ITS_IN_THE_TROP
USE COMODE_MOD, ONLY : JLOP
USE COMODE_MOD, ONLY : CSPEC
USE ADJ_ARRAYS_MOD, ONLY : ID2C
USE TRACERID_MOD, ONLY : IDNO2
USE TRACERID_MOD, ONLY : IDTOX
USE TRACER_MOD, ONLY : XNUMOLAIR
USE CHECKPT_MOD, ONLY : CHK_STT
USE DAO_MOD, ONLY : AIRDEN
USE DAO_MOD, ONLY : AD
USE TRACER_MOD, ONLY : TCVV
USE COMODE_MOD, ONLY : CSPEC_AFTER_CHEM
USE ADJ_ARRAYS_MOD, ONLY : ID2C
USE DIAG_MOD, ONLY : AD43, LTNO2, CTNO2
#include "CMN_SIZE" ! size parameters
# include "CMN" ! IFLX, LPAUSE
# include "CMN_DIAG" ! Diagnostic switches & arrays
!# include "CMN_O3" ! FMOL, XNUMOL
!# include "comode.h" ! IDEMS
INTEGER :: I,J,L,K,M,N,NN
INTEGER :: IIJJ(2), L_HIPPO, JLOOP
REAL*8 :: YEAR, MONTH, DAY, HOUR, MINUTE, TIME
REAL*8 :: HEIGHT
REAL*8, PARAMETER :: ADJ_TCVVOX = 28.97d0/48.d0
MINUTE = REAL(GET_MINUTE(),8)
HOUR = REAL(GET_HOUR(),8)
DAY = REAL(GET_DAY(),8)
YEAR = REAL(GET_YEAR(),8)
MONTH = REAL(GET_MONTH(),8)
TIME = MINUTE + 100*HOUR
DO K=1,N_HIPPO
!PRINT *, "MONTH_HIPPO(K)", MONTH_HIPPO(K)
IF( (DAY == DAY_HIPPO(K)) .AND.
& (YEAR == YEAR_HIPPO(K)) .AND.
& (MONTH == MONTH_HIPPO(K)) .AND.
& ((TIME_HIPPO(K)-TIME) >= 0 ) .AND.
& ((TIME_HIPPO(K)-TIME) < 30 ) ) THEN
IIJJ = GET_IJ(REAL(LON_HIPPO(K),4),REAL(LAT_HIPPO(K),4))
!PRINT *,"K_HIPPO",K
!PRINT *,"TIME_HIPPO(K) - TIME", TIME_HIPPO(K) - TIME
!PRINT *,"ALT_HIPPO(K)", ALT_HIPPO(K)
I = IIJJ(1)
J = IIJJ(2)
HEIGHT = 0d0
DO L=1,LLPAR
!PRINT *,"ITS_IN_THE_TROP",ITS_IN_THE_TROP(I,J,L)
HEIGHT = HEIGHT + BXHEIGHT(I,J,L)
!PRINT *,"HEIGHT-ALT_HIPPO(K)", HEIGHT - ALT_HIPPO(K)
IF ( (HEIGHT .GE. ALT_HIPPO(K)) ) THEN
IF ( ITS_IN_THE_TROP(I,J,L) ) THEN
JLOOP = JLOP(I,J,L)
O3_HIPPO_GC(K) = CSPEC(JLOOP,IDNO2)
O3_HIPPO_GC(K) = O3_HIPPO_GC(K) * 1d6 /
& ( AIRDEN(L,I,J) * XNUMOLAIR )
!O3_HIPPO_GC(K) = CHK_STT(I,J,L,IDTOX)* TCVV(IDTOX)/
& !AD(I,J,L) * 1d9
!PRINT *,"O3_HIPPO_GC(K):",O3_HIPPO_GC(K)
ENDIF
EXIT
ENDIF
ENDDO
ENDIF
ENDDO
END SUBROUTINE COMPARE_HIPPO_DATA
END MODULE HIPPO_MOD