24 OPERATOR(.equalto.), &
39 PUBLIC ::
OPERATOR(==)
52 INTERFACE OPERATOR(==)
54 END INTERFACE OPERATOR(==)
61 '$Id: CRTM_SfcOptics_Define.f90 60152 2015-08-13 19:19:13Z paul.vandelst@noaa.gov $' 69 LOGICAL :: is_allocated = .false.
71 INTEGER :: n_angles = 0
72 INTEGER :: n_stokes = 0
74 LOGICAL :: compute = .true.
77 LOGICAL :: use_new_mwssem = .true.
78 REAL(fp) :: azimuth_angle = 999.9_fp
79 REAL(fp) :: transmittance =
zero 82 INTEGER :: index_sat_ang = 1
85 INTEGER :: mth_azi = 0
87 REAL(fp) :: surface_temperature =
zero 90 REAL(fp),
ALLOCATABLE :: angle(:)
91 REAL(fp),
ALLOCATABLE :: weight(:)
93 REAL(fp),
ALLOCATABLE :: emissivity(:,:)
94 REAL(fp),
ALLOCATABLE :: reflectivity(:,:,:,:)
95 REAL(fp),
ALLOCATABLE :: direct_reflectivity(:,:)
190 status = sfcoptics%Is_Allocated
218 sfcoptics%Is_Allocated = .false.
258 INTEGER,
INTENT(IN) :: n_angles
259 INTEGER,
INTENT(IN) :: n_stokes
261 INTEGER :: alloc_stat
264 IF ( n_angles < 1 .OR. n_stokes < 1 )
RETURN 267 ALLOCATE( sfcoptics%Angle( n_angles ), &
268 sfcoptics%Weight( n_angles ), &
269 sfcoptics%Emissivity( n_angles, n_stokes ), &
270 sfcoptics%Reflectivity( n_angles, n_stokes, n_angles, n_stokes), &
271 sfcoptics%Direct_Reflectivity( n_angles, n_stokes ), &
273 IF ( alloc_stat /= 0 )
RETURN 277 sfcoptics%n_Angles = n_angles
278 sfcoptics%n_Stokes = n_stokes
280 sfcoptics%Angle =
zero 281 sfcoptics%Weight =
zero 282 sfcoptics%Emissivity =
zero 283 sfcoptics%Reflectivity =
zero 284 sfcoptics%Direct_Reflectivity =
zero 287 sfcoptics%Is_Allocated = .true.
317 WRITE(*,
'(1x,"SfcOptics OBJECT")')
319 WRITE(*,
'(3x,"n_Angles :",1x,i0)') sfcoptics%n_Angles
320 WRITE(*,
'(3x,"n_Stokes :",1x,i0)') sfcoptics%n_Stokes
322 WRITE(*,
'(3x,"Compute flag :",1x,l1)') sfcoptics%Compute
323 WRITE(*,
'(3x,"Use_New_MWSSEM flag :",1x,l1)') sfcoptics%Use_New_MWSSEM
324 WRITE(*,
'(3x," MWSSEM- azimuth angle :",1x,es13.6)') sfcoptics%Azimuth_Angle
325 WRITE(*,
'(3x," MWSSEM- transmittance :",1x,es13.6)') sfcoptics%Transmittance
326 WRITE(*,
'(3x,"Satellite view angle index:",1x,i0)') sfcoptics%Index_Sat_Ang
327 WRITE(*,
'(3x,"Azimuth Fourier component :",1x,i0)') sfcoptics%mth_Azi
328 WRITE(*,
'(3x,"Weighted mean Tsfc :",1x,es13.6)') sfcoptics%Surface_Temperature
330 WRITE(*,
'(3x,"Angle :")')
331 WRITE(*,
'(5(1x,es13.6,:))') sfcoptics%Angle
332 WRITE(*,
'(3x,"Weight :")')
333 WRITE(*,
'(5(1x,es13.6,:))') sfcoptics%Weight
334 WRITE(*,
'(3x,"Emissivity :")')
335 WRITE(*,
'(5(1x,es13.6,:))') sfcoptics%Emissivity
336 WRITE(*,
'(3x,"Reflectivity :")')
337 WRITE(*,
'(5(1x,es13.6,:))') sfcoptics%Reflectivity
338 WRITE(*,
'(3x,"Direct_Reflectivity :")')
339 WRITE(*,
'(5(1x,es13.6,:))') sfcoptics%Direct_Reflectivity
367 CHARACTER(*),
INTENT(OUT) :: id
411 result( is_comparable )
413 INTEGER,
OPTIONAL,
INTENT(IN) :: n_sigfig
414 LOGICAL :: is_comparable
419 is_comparable = .false.
420 IF (
PRESENT(n_sigfig) )
THEN 431 IF ( (x%n_Angles /= y%n_Angles) .OR. &
432 (x%n_Stokes /= y%n_Stokes) )
RETURN 436 IF ( (x%Compute .NEQV. y%Compute ) .OR. &
437 (x%Use_New_MWSSEM .NEQV. y%Use_New_MWSSEM) )
RETURN 441 (x%Index_Sat_Ang /= y%Index_Sat_Ang) .OR. &
442 (x%mth_Azi /= y%mth_Azi ) .OR. &
453 is_comparable = .true.
512 IF ( (x%n_Angles /= y%n_Angles) .OR. &
513 (x%n_Stokes /= y%n_Stokes) )
RETURN 515 IF ( (x%Compute .EQV. y%Compute ) .AND. &
516 (x%Use_New_MWSSEM .EQV. y%Use_New_MWSSEM ) .AND. &
517 (x%Azimuth_Angle .equalto. y%Azimuth_Angle ) .AND. &
518 (x%Transmittance .equalto. y%Transmittance ) .AND. &
519 (x%Index_Sat_Ang == y%Index_Sat_Ang ) .AND. &
520 (x%mth_Azi == y%mth_Azi ) .AND. &
521 (x%Surface_Temperature .equalto. y%Surface_Temperature) .AND. &
522 all(x%Angle .equalto. y%Angle ) .AND. &
523 all(x%Weight .equalto. y%Weight ) .AND. &
524 all(x%Emissivity .equalto. y%Emissivity ) .AND. &
525 all(x%Reflectivity .equalto. y%Reflectivity ) .AND. &
526 all(x%Direct_Reflectivity .equalto. y%Direct_Reflectivity) ) &
integer, parameter, public failure
integer, parameter, public set
real(fp), parameter, public zero
integer, parameter, public warning
integer, parameter, public fp
elemental logical function crtm_sfcoptics_equal(x, y)
elemental subroutine, public crtm_sfcoptics_create(SfcOptics, n_Angles, n_Stokes)
integer, parameter, public not_set
real(fp), parameter, public one
recursive subroutine, public display_message(Routine_Name, Message, Error_State, Message_Log)
elemental logical function, public crtm_sfcoptics_associated(SfcOptics)
elemental logical function, public crtm_sfcoptics_compare(x, y, n_SigFig)
integer, parameter, public default_n_sigfig
subroutine, public crtm_sfcoptics_inspect(SfcOptics)
elemental subroutine, public crtm_sfcoptics_destroy(SfcOptics)
character(*), parameter module_version_id
subroutine, public crtm_sfcoptics_defineversion(Id)
integer, parameter, public success
integer, parameter, public information