Ignore:
Timestamp:
Oct 14, 2015, 5:05:47 PM (9 years ago)
Author:
mturbet
Message:

Implementation of the Spectral Albedo

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.GENERIC/libf/phystd/surfini.F

    r1397 r1482  
    1       SUBROUTINE surfini(ngrid,nq,qsurf,psolaralb)
     1      SUBROUTINE surfini(ngrid,nq,qsurf,albedo,albedo_bareground,
     2     &                   albedo_snow_SPECTV,albedo_co2_ice_SPECTV)
    23
    3       USE surfdat_h, only: albedodat, albedice
     4      USE surfdat_h, only: albedodat
    45      USE tracer_h, only: igcm_co2_ice
    5       use comgeomfi_h, only: lati
    66      use planetwide_mod, only: planetwide_maxval, planetwide_minval
     7      use radinc_h, only : L_NSPECTV
     8      use callkeys_mod, only : albedosnow, albedoco2ice
    79
    810      IMPLICIT NONE
    9 c=======================================================================
    10 c
    11 c   creation des calottes pour l'etat initial
    12 c
    13 c=======================================================================
    14 c-----------------------------------------------------------------------
     11     
     12     
     13ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
     14cccccccccccccc                                                                 cccccccccccccc
     15cccccccccccccc   Spectral Albedo Initialisation - Routine modified by MT2015.  cccccccccccccc
     16cccccccccccccc                                                                 cccccccccccccc
     17ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
     18
     19
     20c--------------------
    1521c   Declarations:
    16 c   -------------
    17 !#include "dimensions.h"
    18 !#include "dimphys.h"
    19 c
     22c--------------------
     23
    2024      INTEGER,INTENT(IN) :: ngrid
    2125      INTEGER,INTENT(IN) :: nq
    22       REAL,INTENT(OUT) :: psolaralb(ngrid)
    23       REAL,INTENT(IN) :: qsurf(ngrid,nq) !tracer on surface (kg/m2)
     26      REAL,INTENT(OUT) :: albedo(ngrid,L_NSPECTV)
     27      REAL,INTENT(OUT) :: albedo_bareground(ngrid)
     28      REAL,INTENT(OUT) :: albedo_snow_SPECTV(L_NSPECTV)
     29      REAL,INTENT(OUT) :: albedo_co2_ice_SPECTV(L_NSPECTV)
     30      REAL,INTENT(IN) :: qsurf(ngrid,nq) ! tracer on surface (kg/m2)
    2431
    25       INTEGER :: ig,icap
     32      INTEGER :: ig,nw
    2633      REAL :: min_albedo,max_albedo
    27 c
     34
    2835c=======================================================================
    2936
    30 
    31       DO ig=1,ngrid
    32          psolaralb(ig)=albedodat(ig)
     37      ! Step 1 : Initialisation of the Spectral Albedos.
     38      DO nw=1,L_NSPECTV
     39         albedo_snow_SPECTV(nw)=albedosnow
     40         albedo_co2_ice_SPECTV(nw)=albedoco2ice
    3341      ENDDO
    3442
    35       call planetwide_minval(albedodat,min_albedo)
    36       call planetwide_maxval(albedodat,max_albedo)
    37       write(*,*) 'surfini: minimum corrected albedo',min_albedo
    38       write(*,*) 'surfini: maximum corrected albedo',max_albedo
    3943
     44      ! Step 2 : We get the bare ground albedo from the start files.
     45      DO ig=1,ngrid
     46         albedo_bareground(ig)=albedodat(ig)
     47         DO nw=1,L_NSPECTV
     48            albedo(ig,nw)=albedo_bareground(ig)
     49         ENDDO
     50      ENDDO
     51      call planetwide_minval(albedo_bareground,min_albedo)
     52      call planetwide_maxval(albedo_bareground,max_albedo)
     53      write(*,*) 'surfini: minimum bare ground albedo',min_albedo
     54      write(*,*) 'surfini: maximum bare ground albedo',max_albedo
     55
     56
     57      ! Step 3 : We modify the albedo considering some CO2 at the surface. We dont take into account water ice (this is made in hydrol after the first timestep) ...
    4058      if (igcm_co2_ice.ne.0) then
    41 ! Change Albedo if there is CO2 ice on the surface
    42         DO ig=1,ngrid
    43           IF (qsurf(ig,igcm_co2_ice) .GT. 0.) THEN
    44              IF(lati(ig).LT.0.) THEN
    45                 icap=2 ! Southern hemisphere
    46              ELSE
    47                 icap=1 ! Northern hemisphere
    48              ENDIF
    49              psolaralb(ig) = albedice(icap)
    50           END IF
    51         ENDDO ! of DO ig=1,ngrid     
     59         DO ig=1,ngrid
     60            IF (qsurf(ig,igcm_co2_ice) .GT. 1.) THEN ! This was changed by MT2015. Condition for ~1mm of CO2 ice deposit.
     61               DO nw=1,L_NSPECTV
     62                  albedo(ig,nw)=albedo_co2_ice_SPECTV(nw)
     63               ENDDO
     64            END IF   
     65         ENDDO   
    5266      else
    53         write(*,*) "surfini: No CO2 ice tracer on surface  ..."
    54         write(*,*) "         and therefore no albedo change."
    55       endif
     67         write(*,*) "surfini: No CO2 ice tracer on surface  ..."
     68         write(*,*) "         and therefore no albedo change."
     69      endif     
     70      call planetwide_minval(albedo,min_albedo)
     71      call planetwide_maxval(albedo,max_albedo)
     72      write(*,*) 'surfini: minimum corrected initial albedo',min_albedo
     73      write(*,*) 'surfini: maximum corrected initial albedo',max_albedo
    5674
    57       call planetwide_minval(psolaralb,min_albedo)
    58       call planetwide_maxval(psolaralb,max_albedo)
    59       write(*,*) 'surfini: minimum corrected albedo',min_albedo
    60       write(*,*) 'surfini: maximum corrected albedo',max_albedo
    6175
    6276      END
Note: See TracChangeset for help on using the changeset viewer.