Open chengdang opened 9 months ago
The first version of OP implementation has been uploaded to branch: Feature/cd generic itf
The supporting packages for aerosol/cloud/total optical profiles are still under testing. My initial hope was to create a python-based package completely independent from the CRTM source code, but it has proven to be very tricky, mostly due to the need of adding extra layers (function CRTM_Atmosphere_AddLayers
) given input profiles and the standard climatological profiles. A fortran-based package built upon the existing CRTM functionality is more practical at this point.
The other option is to create a python-based package, with the extrapolation of pressure only. From the existing CRTM function, the cloud and aerosol related state variables are all set as zeros in the extrapolated layers:
! Slot the added layers into the output atmosphere structure
! Note: Cloud and Aerosol assignments not really needed (the
! zeroing is handled by the structure allocation) since
! at TOA, typically, there are not any clouds and/or
! aerosols.
! ...Profile
Atm_Out%Level_Pressure(0:n) = iAtm%pl
Atm_Out%Pressure(1:n) = iAtm%p
Atm_Out%Temperature(1:n) = iAtm%t
Atm_Out%Cloud_Fraction(1:n) = ZERO
DO j = 1, Atm_Out%n_Absorbers
Atm_Out%Absorber(1:n,j) = iAtm%a(:,j)
END DO
! ...Clouds
IF ( Atm_In%n_Clouds > 0 ) THEN
DO i = 1, Atm_In%n_Clouds
Atm_Out%Cloud(i)%Effective_Radius(1:n) = ZERO
Atm_Out%Cloud(i)%Effective_Variance(1:n) = ZERO
Atm_Out%Cloud(i)%Water_Content(1:n) = ZERO
Atm_Out%Cloud(i)%Water_Density(1:n) = ZERO
END DO
END IF
! ...Aerosols
IF ( Atm_In%n_Aerosols > 0 ) THEN
DO i = 1, Atm_In%n_Aerosols
Atm_Out%Aerosol(i)%Effective_Radius(1:n) = ZERO
Atm_Out%Aerosol(i)%Concentration(1:n) = ZERO
END DO
END IF
Per issue #107 #108, CRTM plans to enable user-defined optical profiles for CRTM calculations. It is useful to provide supporting packages for computing optical profiles suitable for CRTM simulations.
For now, we only plan to create packages that adopt CRTM inputs and aerosol/cloud LUTs to generate: