module modis_types ! -------------------------------------------------------------------------- implicit none ! everything is private by default unless made public private public :: modis_alb_param_type ! --------------------------------------------------------------- ! ! MODIS albedo scaling factors type :: modis_alb_param_type real :: sc_albvf ! Scaling factor for diffuse visible or whitesky 0.3-0.7 real :: sc_albnf ! Scaling factor for diffuse infrared or whitesky 0.7-5.0 end type modis_alb_param_type ! -------------------------------------------------------------- interface assignment (=) module procedure scalar2modis_alb_param end interface interface operator (*) module procedure modis_alb_param_times_scalar end interface interface operator (+) module procedure add_modis_alb_param end interface contains ! -------------------------------------------------- subroutine scalar2modis_alb_param( modis_alb_param, scalar ) implicit none real, intent(in) :: scalar type(modis_alb_param_type), intent(out) :: modis_alb_param modis_alb_param%sc_albvf = scalar modis_alb_param%sc_albnf = scalar end subroutine scalar2modis_alb_param ! --------------------------------------------------- function modis_alb_param_times_scalar( modis_alb_param, scalar ) implicit none type(modis_alb_param_type) :: modis_alb_param_times_scalar type(modis_alb_param_type), intent(in) :: modis_alb_param real, intent(in) :: scalar modis_alb_param_times_scalar%sc_albvf = modis_alb_param%sc_albvf * scalar modis_alb_param_times_scalar%sc_albnf = modis_alb_param%sc_albnf * scalar end function modis_alb_param_times_scalar ! ----------------------------------------------------------- function add_modis_alb_param( modis_alb_param_1, modis_alb_param_2 ) implicit none type(modis_alb_param_type) :: add_modis_alb_param type(modis_alb_param_type), intent(in) :: modis_alb_param_1, modis_alb_param_2 add_modis_alb_param%sc_albvf = modis_alb_param_1%sc_albvf + modis_alb_param_2%sc_albvf add_modis_alb_param%sc_albnf = modis_alb_param_1%sc_albnf + modis_alb_param_2%sc_albnf end function add_modis_alb_param ! ----------------------------------------------------------- end module modis_types ! +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ !!$#if 0 !!$ !!$program test !!$ !!$ use modis_types !!$ !!$ type(modis_alb_param_type), dimension(2,3) :: map1, map2 !!$ type(modis_alb_param_type), dimension(2) :: map3 !!$ !!$ integer :: n, m !!$ !!$ n=1 !!$ m=3 !!$ !!$ map1(n,m) = 1.111 !!$ map2(n,m) = 2.222 !!$ map3(n) = 0. !!$ !!$ write (*,*) map1(n,m) !!$ write (*,*) map2(n,m) !!$ write (*,*) map3(n) !!$ write (*,*) !!$ !!$ map3(n) = map1(n,m) + map2(n,m) !!$ !!$ write (*,*) map1(n,m) !!$ write (*,*) map2(n,m) !!$ write (*,*) map !!$ write (*,*) !!$ !!$ map3(n)%sc_albnf = map2(n,m)%sc_albnf * 40. !!$ !!$ write (*,*) map1(n,m) !!$ write (*,*) map2(n,m) !!$ write (*,*) map3(n) !!$ write (*,*) !!$ !!$ map3(n) = map2(n,m) * 40. + map1(n,m) * 3. !!$ !!$ write (*,*) map1(n,m) !!$ write (*,*) map2(n,m) !!$ write (*,*) map3(n) !!$ write (*,*) !!$ !!$end program test !!$ !!$#endif ! =========== EOF =======================================================