Changeset 2413


Ignore:
Timestamp:
Dec 18, 2015, 8:27:39 PM (9 years ago)
Author:
oboucher
Message:

limiting iflag_rrtm=0 to NSW=2 case (NSW=4 and 6 were possible with slightly different averaging procedures)
limiting iflag_rrtm choices to 0 and 1
limiting iflag_albedo choices to 0 and 1
cleaning up surface ocean albedo parametrisations
fmagic and pmagic corrections are now done in surf_ocean_albedo.F90
fmagic and pmagic corrections also possible for iflag_rrtm=1 now

Location:
LMDZ5/trunk/libf/phylmd
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/libf/phylmd/albedo.F90

    r2346 r2413  
    2222    include "clesphys.h"
    2323
    24     ! fmagic -> clesphys.h/.inc
    25     ! REAL fmagic ! un facteur magique pour regler l'albedo
    26     ! cc      PARAMETER (fmagic=0.7)
    27     ! ccIM => a remplacer
    28     ! PARAMETER (fmagic=1.32)
    29     ! PARAMETER (fmagic=1.0)
    30     ! PARAMETER (fmagic=0.7)
    3124    INTEGER npts ! il controle la precision de l'integration
    3225    PARAMETER (npts=120) ! 120 correspond a l'interval 6 minutes
     
    7467          END DO
    7568          IF (srmu/=0.0) THEN
    76              albedo(i) = salb/srmu*fmagic + pmagic
     69             albedo(i) = salb/srmu
    7770          ELSE ! nuit polaire (on peut prendre une valeur quelconque)
    78              albedo(i) = fmagic
     71             albedo(i) = 1.0
    7972          END IF
    8073       END DO
     
    119112          END DO
    120113          IF (srmu/=0.0) THEN
    121              albedo(i) = salb/srmu*fmagic + pmagic
     114             albedo(i) = salb/srmu
    122115          ELSE ! nuit polaire (on peut prendre une valeur quelconque)
    123              albedo(i) = fmagic
     116             albedo(i) = 1.0
    124117          END IF
    125118       END DO
     
    146139    real, intent(out):: albedo(klon)
    147140
    148     ! REAL fmagic ! un facteur magique pour regler l'albedo
    149     ! cc      PARAMETER (fmagic=0.7)
    150     ! ccIM => a remplacer
    151     ! PARAMETER (fmagic=1.32)
    152     ! PARAMETER (fmagic=1.0)
    153     ! PARAMETER (fmagic=0.7)
    154 
    155141    REAL fauxo
    156142    INTEGER i
     
    161147       DO i = 1, klon
    162148          fauxo = (1.47-acos(max(rmu0(i), 0.0)))/0.15
    163           albedo(i) = fmagic*(.03+.630/(1.+fauxo*fauxo)) + pmagic
     149          albedo(i) = 0.03+.630/(1.+fauxo*fauxo)
    164150          albedo(i) = max(min(albedo(i),0.60), 0.04)
    165151       END DO
    166152    ELSE
    167153       DO i = 1, klon
    168           albedo(i) = fmagic*0.058/(max(rmu0(i), 0.0)+0.30) + pmagic
     154          albedo(i) = 0.058/(max(rmu0(i), 0.0)+0.30)
    169155          albedo(i) = max(min(albedo(i),0.60), 0.04)
    170156       END DO
  • LMDZ5/trunk/libf/phylmd/conf_phys_m.F90

    r2357 r2413  
    914914    !Config Help =
    915915    !
    916     NSW_omp = 6
     916    NSW_omp = 2
    917917    call getin('NSW',NSW_omp)
    918918    !albedo SB >>>
     
    21652165       CALL abort_physic('conf_phys','version_ocean not valid',1)
    21662166    END IF
     2167
     2168    !--test on radiative scheme
     2169    IF (iflag_rrtm .EQ. 0) THEN
     2170      IF (NSW.NE.2) THEN
     2171        WRITE(lunout,*) ' ERROR iflag_rrtm=0 and NSW<>2 not possible'
     2172        CALL abort_physic('conf_phys','choice NSW not valid',1)
     2173      ENDIF
     2174    ELSE IF (iflag_rrtm .EQ. 1) THEN
     2175      IF (NSW.NE.2.AND.NSW.NE.4.AND.NSW.NE.6) THEN
     2176        WRITE(lunout,*) ' ERROR iflag_rrtm=1 and NSW<>2,4,6 not possible'
     2177        CALL abort_physic('conf_phys','choice NSW not valid',1)
     2178      ENDIF
     2179    ELSE
     2180       WRITE(lunout,*) ' ERROR iflag_rrtm<>0,1'
     2181       CALL abort_physic('conf_phys','choice iflag_rrtm not valid',1)
     2182    ENDIF
     2183
     2184    !--test on ocean surface albedo
     2185    IF (iflag_albedo.LT.0.OR.iflag_albedo.GT.1) THEN
     2186       WRITE(lunout,*) ' ERROR iflag_albedo<>0,1'
     2187       CALL abort_physic('conf_phys','choice iflag_albedo not valid',1)
     2188    ENDIF
    21672189
    21682190    ! Test sur new_aod. Ce flag permet de retrouver les resultats de l'AR4
  • LMDZ5/trunk/libf/phylmd/radlwsw_m.F90

    r2394 r2413  
    426426
    427427!albedo SB >>>
    428 !      PALBD(i,1) = alb1(iof+i)
    429 !      PALBD(i,2) = alb2(iof+i)
    430 !         PALBD_NEW(i,1) = alb1(iof+i)   !!!!! A REVOIR (MPL) PALBD_NEW en
    431 !         fonction bdes SW
    432 !         do kk=2,NSW
    433 !           PALBD_NEW(i,kk) = alb2(iof+i)
    434 !         enddo
    435 !      PALBP(i,1) = alb1(iof+i)
    436 !      PALBP(i,2) = alb2(iof+i)
    437 !
    438 !         PALBP_NEW(i,1) = alb1(iof+i)     !!!!! A REVOIR (MPL) PALBP_NEW en
    439 !         fonction bdes SW
    440 !         do kk=2,NSW
    441 !           PALBP_NEW(i,kk) = alb2(iof+i)
    442 !         enddo
    443 
    444       if(iflag_rrtm==0)then
    445         select case(nsw)
    446         case(2)
    447           PALBD(i,1)=alb_dif(iof+i,1)
    448           PALBD(i,2)=alb_dif(iof+i,2)
    449           PALBP(i,1)=alb_dir(iof+i,1)
    450           PALBP(i,2)=alb_dir(iof+i,2)
    451         case(4)
    452           PALBD(i,1)=alb_dif(iof+i,1)
    453           PALBD(i,2)=(alb_dif(iof+i,2)*SFRWL(2)+alb_dif(iof+i,3)*SFRWL(3) &
    454                  +alb_dif(iof+i,4)*SFRWL(4))/(SFRWL(2)+SFRWL(3)+SFRWL(4))
    455           PALBP(i,1)=alb_dir(iof+i,1)
    456           PALBP(i,2)=(alb_dir(iof+i,2)*SFRWL(2)+alb_dir(iof+i,3)*SFRWL(3) &
    457                  +alb_dir(iof+i,4)*SFRWL(4))/(SFRWL(2)+SFRWL(3)+SFRWL(4))
    458         case(6)
    459           PALBD(i,1)=(alb_dif(iof+i,1)*SFRWL(1)+alb_dif(iof+i,2)*SFRWL(2) &
    460                  +alb_dif(iof+i,3)*SFRWL(3))/(SFRWL(1)+SFRWL(2)+SFRWL(3))
    461           PALBD(i,2)=(alb_dif(iof+i,4)*SFRWL(4)+alb_dif(iof+i,5)*SFRWL(5) &
    462                  +alb_dif(iof+i,6)*SFRWL(6))/(SFRWL(4)+SFRWL(5)+SFRWL(6))
    463           PALBP(i,1)=(alb_dir(iof+i,1)*SFRWL(1)+alb_dir(iof+i,2)*SFRWL(2)  &
    464                  +alb_dir(iof+i,3)*SFRWL(3))/(SFRWL(1)+SFRWL(2)+SFRWL(3))
    465           PALBP(i,2)=(alb_dir(iof+i,4)*SFRWL(4)+alb_dir(iof+i,5)*SFRWL(5)  &
    466                  +alb_dir(iof+i,6)*SFRWL(6))/(SFRWL(4)+SFRWL(5)+SFRWL(6))
    467         end select
    468       elseif(iflag_rrtm==1)then
     428!
     429      IF (iflag_rrtm==0) THEN
     430!
     431        PALBD(i,1)=alb_dif(iof+i,1)
     432        PALBD(i,2)=alb_dif(iof+i,2)
     433        PALBP(i,1)=alb_dir(iof+i,1)
     434        PALBP(i,2)=alb_dir(iof+i,2)
     435!
     436      ELSEIF (iflag_rrtm==1) THEn
     437!
    469438        DO kk=1,NSW
    470          PALBD_NEW(i,kk)=alb_dif(iof+i,kk)
    471          PALBP_NEW(i,kk)=alb_dir(iof+i,kk)
     439          PALBD_NEW(i,kk)=alb_dif(iof+i,kk)
     440          PALBP_NEW(i,kk)=alb_dir(iof+i,kk)
    472441        ENDDO
    473       endif
     442!
     443      ENDIF
    474444!albedo SB <<<
    475 
    476 
    477445
    478446
     
    666634       ENDIF
    667635
    668              
    669           DO i=1,kdlon
    670           DO k=1,kflev+1
    671          ZSWFT0_i(1:klon,k) = ZFSDN0(1:klon,k)-ZFSUP0(1:klon,k)
    672          ZLWFT0_i(1:klon,k)=-ZFLDN0(1:klon,k)-ZFLUP0(1:klon,k)
     636       ZSWFT0_i(:,:) = ZFSDN0(:,:)-ZFSUP0(:,:)
     637       ZLWFT0_i(:,:) =-ZFLDN0(:,:)-ZFLUP0(:,:)
     638
     639       DO i=1,kdlon
     640       DO k=1,kflev+1
    673641!        print *,'iof i k klon klev=',iof,i,k,klon,klev
    674642         lwdn0 ( iof+i,k)   = ZFLDN0 ( i,k)
     
    680648         swup0 ( iof+i,k)   = ZFSUP0 ( i,k)
    681649         swup  ( iof+i,k)   = ZFSUP  ( i,k)
    682           ENDDO 
    683           ENDDO 
     650       ENDDO 
     651       ENDDO 
    684652!          print*,'SW_AR4 ZFSDN0 1 , klev:',ZFSDN0(1:klon,1),ZFSDN0(1:klon,klev)
    685653!          print*,'SW_AR4 swdn0  1 , klev:',swdn0(1:klon,1),swdn0(1:klon,klev)
  • LMDZ5/trunk/libf/phylmd/surf_ocean_mod.F90

    r2405 r2413  
    175175
    176176!******************************************************************************
    177 ! Calculate albedo
     177! Calculate ocean surface albedo
    178178!******************************************************************************
    179179!albedo SB >>>
    180   if(iflag_albedo==1)then
    181     call ocean_albedo(knon,rmu0,knindex,windsp,SFRWL,alb_dir_new,alb_dif_new)
    182   else
     180IF (iflag_albedo==0) THEN
     181!--old parametrizations of ocean surface albedo
     182!
    183183    IF (cycle_diurne) THEN
     184!
    184185       CALL alboc_cd(rmu0,alb_eau)
     186!
     187!--ad-hoc correction for model radiative balance tuning
     188!--now outside alboc_cd routine
     189       alb_eau(:) = fmagic*alb_eau(:) + pmagic
     190       alb_eau=MIN(MAX(alb_eau,0.0),1.0)
     191!
    185192    ELSE
     193!
    186194       CALL alboc(REAL(jour),rlat,alb_eau)
     195!--ad-hoc correction for model radiative balance tuning
     196!--now outside alboc routine
     197       alb_eau(:) = fmagic*alb_eau(:) + pmagic
     198       alb_eau=MIN(MAX(alb_eau(i),0.04),0.60)
     199!
    187200    ENDIF
    188 
     201!
    189202    DO i =1, knon
    190       do  k=1,nsw
     203      DO  k=1,nsw
    191204       alb_dir_new(i,k) = alb_eau(knindex(i))
    192       enddo
     205      ENDDO
    193206    ENDDO
    194 !IM 09122015 beg
    195 !IM next line corresponds to Sunghye Baek change that she made when she added new ocean albedo
    196 !    alb_dif_new=0.05 !alb_dir_new
    197 !IM next line corresponds to the old values of LMDZ5A/IPSLCM5A versions
     207!IM 09122015 next line corresponds to the old way of doing in LMDZ5A/IPSLCM5A versions
     208!albedo for diffuse radiation is taken the same as for direct radiation
    198209     alb_dif_new=alb_dir_new
    199210!IM 09122015 end
    200 endif
    201 
     211!
     212ELSE IF (iflag_albedo==1) THEN
     213!--new parametrization of ocean surface albedo by Sunghye Baek
     214!--albedo for direct and diffuse radiation are different
     215!
     216    CALL ocean_albedo(knon,rmu0,knindex,windsp,SFRWL,alb_dir_new,alb_dif_new)
     217!
     218!--ad-hoc correction for model radiative balance tuning
     219    alb_dir_new(:,:) = fmagic*alb_dir_new(:,:) + pmagic
     220    alb_dir_new=MIN(MAX(alb_dir_new,0.0),1.0)
     221    alb_dif_new=MIN(MAX(alb_dif_new,0.0),1.0)
     222!
     223ENDIF
    202224!albedo SB <<<
    203225
Note: See TracChangeset for help on using the changeset viewer.