source: LMDZ6/trunk/libf/phylmd/cosp2/cosp_modis_interface.F90 @ 3358

Last change on this file since 3358 was 3358, checked in by idelkadi, 6 years ago

Implementation de la nouvelle version COSPv2 dans LMDZ.
Pour compiler avec makelmdz_fcma utiliser l'option "-cosp2 true"

File size: 6.4 KB
Line 
1! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2! Copyright (c) 2015, Regents of the University of Colorado
3! All rights reserved.
4!
5! Redistribution and use in source and binary forms, with or without modification, are
6! permitted provided that the following conditions are met:
7!
8! 1. Redistributions of source code must retain the above copyright notice, this list of
9!    conditions and the following disclaimer.
10!
11! 2. Redistributions in binary form must reproduce the above copyright notice, this list
12!    of conditions and the following disclaimer in the documentation and/or other
13!    materials provided with the distribution.
14!
15! 3. Neither the name of the copyright holder nor the names of its contributors may be
16!    used to endorse or promote products derived from this software without specific prior
17!    written permission.
18!
19! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
20! EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21! MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
22! THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23! SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
24! OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25! INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26! LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27! OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28!
29! History
30! May 2015 - D. Swales - Original version
31! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
32MODULE MOD_COSP_Modis_INTERFACE
33  USE COSP_KINDS,      ONLY: wp
34  USE MOD_COSP_CONFIG, ONLY: R_UNDEF
35  use mod_modis_sim,   ONLY: num_trial_res,min_OpticalThickness,CO2Slicing_PressureLimit,&
36                             CO2Slicing_TauLimit,phase_TauLimit,size_TauLimit,re_fill,   &
37                             phaseDiscrimination_Threshold,re_water_min,     &
38                             re_water_max,re_ice_min,re_ice_max,               &
39                             highCloudPressureLimit,lowCloudPressureLimit,phaseIsNone,   &
40                             phaseIsLiquid,phaseIsIce,phaseIsUndetermined,trial_re_w,    &
41                             trial_re_i,g_w,g_i,w0_w,w0_i, get_g_nir,get_ssa_nir
42  implicit none
43
44  ! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
45  !  TYPE modis_in
46  ! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
47  type modis_IN
48     integer,pointer :: &
49          Npoints,        & ! Number of horizontal gridpoints
50          Ncolumns,       & ! Number of subcolumns
51          Nlevels           ! Number of vertical levels
52     integer :: &
53          Nsunlit           ! Number of sunlit lit pixels
54     real(wp),allocatable,dimension(:) :: &
55          sunlit,         & ! Sunlit scenes
56          notSunlit         ! Dark scenes
57     real(wp),allocatable,dimension(:,:) :: &
58          pres              ! Gridmean pressure at layer edges (Pa)
59     real(wp),pointer ::  &
60          tau(:,:,:),     & ! Subcolumn optical thickness @ 0.67 microns.
61          liqFrac(:,:,:), & ! Liquid water fraction
62          g(:,:,:),       & ! Subcolumn assymetry parameter 
63          w0(:,:,:)         ! Subcolumn single-scattering albedo
64  end type modis_IN
65contains
66  ! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
67  ! SUBROTUINE cosp_modis_init
68  ! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
69  SUBROUTINE COSP_MODIS_INIT()
70    integer :: i
71   
72    ! Retrieval parameters
73    min_OpticalThickness          = 0.3_wp     ! Minimum detectable optical thickness
74    CO2Slicing_PressureLimit      = 70000._wp  ! Cloud with higher pressures use thermal
75                                               ! methods, units Pa
76    CO2Slicing_TauLimit           = 1._wp      ! How deep into the cloud does CO2 slicing
77                                               ! see?
78    phase_TauLimit                = 1._wp      ! How deep into the cloud does the phase
79                                               ! detection see?
80    size_TauLimit                 = 2._wp      ! Depth of the re retreivals
81    phaseDiscrimination_Threshold = 0.7_wp     ! What fraction of total extincton needs to
82                                               ! be in a single category to make phase
83                                               ! discrim. work?
84    re_fill                       = -999._wp   ! Fill value
85    re_water_min                  = 4._wp      ! Minimum effective radius (liquid)
86    re_water_max                  = 30._wp     ! Maximum effective radius (liquid)
87    re_ice_min                    = 5._wp      ! Minimum effective radius (ice)
88    re_ice_max                    = 90._wp     ! Minimum effective radius (ice)
89    highCloudPressureLimit        = 44000._wp  ! High cloud pressure limit (Pa)
90    lowCloudPressureLimit         = 68000._wp  ! Low cloud pressure limit (Pa)
91    phaseIsNone                   = 0          ! No cloud
92    phaseIsLiquid                 = 1          ! Liquid cloud
93    phaseIsIce                    = 2          ! Ice cloud
94    phaseIsUndetermined           = 3          ! Undetermined cloud
95
96    ! Precompute near-IR optical params vs size for retrieval scheme   
97    trial_re_w(1:num_trial_res) = re_water_min + (re_water_max - re_water_min) /         &
98         (num_trial_res-1) * (/(i, i=0, num_trial_res-1)/)
99    trial_re_i(1:num_trial_res) = re_ice_min   + (re_ice_max -   re_ice_min) /           &
100         (num_trial_res-1) * (/(i, i=0, num_trial_res-1)/)
101
102    ! Initialize estimates for size retrieval
103    g_w(1:num_trial_res)  = get_g_nir(phaseIsLiquid,trial_re_w(1:num_trial_res))
104    w0_w(1:num_trial_res) = get_ssa_nir(phaseIsLiquid,trial_re_w(1:num_trial_res))
105    g_i(1:num_trial_res)  = get_g_nir(phaseIsIce,trial_re_i(1:num_trial_res))
106    w0_i(1:num_trial_res) = get_ssa_nir(phaseIsIce,trial_re_i(1:num_trial_res))
107
108  END SUBROUTINE COSP_MODIS_INIT
109 
110  ! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
111  ! END MODULE MOD_COSP_Modis_INTERFACE
112  ! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
113END MODULE MOD_COSP_Modis_INTERFACE
Note: See TracBrowser for help on using the repository browser.