Ignore:
Timestamp:
Sep 26, 2022, 2:43:00 PM (19 months ago)
Author:
jghattas
Message:

Added landice_opt=2 : Treat continental land ice fractions in ORCHIDEE => pctsrf(:,is_lic) = 0.0 in LMDZ.

For this option, some more variables are needed from ORCHIDEE. Therfor change in the interface LMDZ-ORCHIDEE in surf_land_orchidee_mod is done. Previous interface is moved to surf_land_orchidee_nolic_mod.f90. To compile with previous interface, cpp key ORCHIDEE_NOLIC is added. Previous interface is compiled with argument orchidee2.1 in makelmdz and makelmdz_fcm.

At the same time, when the interface was changed, the variable yrmu0(coszang) was added in the call to intersurf_initialize_gathered. This is needed in ORCHIDEE to better initialize the model.

Modifications done by Etienne Vignon and Josefine Ghattas

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/dynphy_lonlat/phylmd/init_ssrf_m.F90

    r2798 r4283  
    33!*******************************************************************************
    44
    5   USE indice_sol_mod, ONLY: is_ter, is_oce, is_oce, is_lic, epsfra
     5  USE indice_sol_mod,     ONLY: is_ter, is_oce, is_oce, is_lic, epsfra
    66  USE dimphy,             ONLY: klon, zmasq
    77  USE phys_state_var_mod, ONLY: pctsrf
    8   USE geometry_mod, ONLY : longitude_deg, latitude_deg
     8  USE geometry_mod,       ONLY : longitude_deg, latitude_deg
    99  USE grid_atob_m,        ONLY: grille_m
    1010  USE ioipsl,             ONLY: flininfo, flinopen, flinget, flinclo
    1111  USE ioipsl_getin_p_mod, ONLY: getin_p
    12   USE comconst_mod, ONLY: im, pi
     12  USE comconst_mod,       ONLY: im, pi
     13  USE surface_data,       ONLY: landice_opt
    1314
    1415  CHARACTER(LEN=256), PARAMETER :: icefname="landiceref.nc", icevar="landice"
     
    5859! Sub-surfaces initialization
    5960!*******************************************************************************
    60 !--- Read and interpolate on model T-grid soil fraction and soil ice fraction.
    61   CALL flininfo(icefname, iml_lic, jml_lic, llm_tmp, ttm_tmp, fid)
    62   ALLOCATE(lat_lic(iml_lic,jml_lic),lon_lic(iml_lic,jml_lic))
    63   ALLOCATE(fraclic(iml_lic,jml_lic))
    64   CALL flinopen(icefname, .FALSE., iml_lic, jml_lic, llm_tmp,  &
    65  &               lon_lic, lat_lic, lev, ttm_tmp, itaul, date, dt, fid)
    66   CALL flinget(fid, icevar, iml_lic, jml_lic, llm_tmp, ttm_tmp, 1,1, fraclic)
    67   CALL flinclo(fid)
    68   WRITE(lunout,*)'landice dimensions: iml_lic, jml_lic : ',iml_lic,jml_lic
     61  IF (landice_opt .LT. 2) THEN
     62     ! Continue with reading landice.nc file
     63     WRITE(lunout,*)"Read landice.nc file to attribute is_lic fraction"
    6964
    70   ALLOCATE(dlon_lic(iml_lic),dlat_lic(jml_lic))
    71   dlon_lic(:)=lon_lic(:,1); IF(MAXVAL(dlon_lic)>pi) dlon_lic=dlon_lic*pi/180.
    72   dlat_lic(:)=lat_lic(1,:); IF(MAXVAL(dlat_lic)>pi) dlat_lic=dlat_lic*pi/180.
    73   DEALLOCATE(lon_lic,lat_lic); ALLOCATE(flic_tmp(iip1,jjp1))
    74   CALL grille_m(dlon_lic,dlat_lic,fraclic,rlonv(1:iim),rlatu,flic_tmp(1:iim,:))
    75   flic_tmp(iip1,:)=flic_tmp(1,:)
    76 
    77 !--- To the physical grid
    78   pctsrf(:,:) = 0.
    79   CALL gr_dyn_fi(1, iip1, jjp1, klon, flic_tmp, pctsrf(:,is_lic))
    80   DEALLOCATE(flic_tmp)
    81 
    82 !--- Adequation with soil/sea mask
    83   WHERE(pctsrf(:,is_lic)<EPSFRA) pctsrf(:,is_lic)=0.
    84   WHERE(zmasq(:)<EPSFRA)         pctsrf(:,is_lic)=0.
    85   pctsrf(:,is_ter)=zmasq(:)
    86   DO ji=1,klon
    87     IF(zmasq(ji)>EPSFRA) THEN
    88       IF(pctsrf(ji,is_lic)>=zmasq(ji)) THEN
    89         pctsrf(ji,is_lic)=zmasq(ji)
    90         pctsrf(ji,is_ter)=0.
    91       ELSE
    92         pctsrf(ji,is_ter)=zmasq(ji)-pctsrf(ji,is_lic)
    93         IF(pctsrf(ji,is_ter)<EPSFRA) THEN
    94           pctsrf(ji,is_ter)=0.
    95           pctsrf(ji,is_lic)=zmasq(ji)
    96         END IF
    97       END IF
    98     END IF
    99   END DO
    100 
    101 
    102   !--- Option no_ter_antartique removes all land fractions souther than 60S.
    103   !--- Land ice is set instead of the land fractions on these latitudes.
    104   !--- The ocean and sea-ice fractions are not changed.
    105   no_ter_antartique=.FALSE.
    106   CALL getin_p('no_ter_antartique',no_ter_antartique)
    107   WRITE(lunout,*)"no_ter_antartique=",no_ter_antartique
    108   IF (no_ter_antartique) THEN
    109      ! Remove all land fractions souther than 60S and set land-ice instead
    110      WRITE(lunout,*) "Remove land fractions souther than 60deg south by increasing"
    111      WRITE(lunout,*) "the continental ice fractions. No land can now be found at Antartic."
    112      DO ji=1, klon
    113         IF (latitude_deg(ji)<-60.0) THEN
    114            pctsrf(ji,is_lic) = pctsrf(ji,is_lic) + pctsrf(ji,is_ter)
    115            pctsrf(ji,is_ter) = 0
     65     !--- Read and interpolate on model T-grid soil fraction and soil ice fraction.
     66     CALL flininfo(icefname, iml_lic, jml_lic, llm_tmp, ttm_tmp, fid)
     67     ALLOCATE(lat_lic(iml_lic,jml_lic),lon_lic(iml_lic,jml_lic))
     68     ALLOCATE(fraclic(iml_lic,jml_lic))
     69     CALL flinopen(icefname, .FALSE., iml_lic, jml_lic, llm_tmp,  &
     70          &               lon_lic, lat_lic, lev, ttm_tmp, itaul, date, dt, fid)
     71     CALL flinget(fid, icevar, iml_lic, jml_lic, llm_tmp, ttm_tmp, 1,1, fraclic)
     72     CALL flinclo(fid)
     73     WRITE(lunout,*)'landice dimensions: iml_lic, jml_lic : ',iml_lic,jml_lic
     74     
     75     ALLOCATE(dlon_lic(iml_lic),dlat_lic(jml_lic))
     76     dlon_lic(:)=lon_lic(:,1); IF(MAXVAL(dlon_lic)>pi) dlon_lic=dlon_lic*pi/180.
     77     dlat_lic(:)=lat_lic(1,:); IF(MAXVAL(dlat_lic)>pi) dlat_lic=dlat_lic*pi/180.
     78     DEALLOCATE(lon_lic,lat_lic); ALLOCATE(flic_tmp(iip1,jjp1))
     79     CALL grille_m(dlon_lic,dlat_lic,fraclic,rlonv(1:iim),rlatu,flic_tmp(1:iim,:))
     80     flic_tmp(iip1,:)=flic_tmp(1,:)
     81     
     82     !--- To the physical grid
     83     pctsrf(:,:) = 0.
     84     CALL gr_dyn_fi(1, iip1, jjp1, klon, flic_tmp, pctsrf(:,is_lic))
     85     DEALLOCATE(flic_tmp)
     86     
     87     !--- Adequation with soil/sea mask
     88     WHERE(pctsrf(:,is_lic)<EPSFRA) pctsrf(:,is_lic)=0.
     89     WHERE(zmasq(:)<EPSFRA)         pctsrf(:,is_lic)=0.
     90     pctsrf(:,is_ter)=zmasq(:)
     91     DO ji=1,klon
     92        IF(zmasq(ji)>EPSFRA) THEN
     93           IF(pctsrf(ji,is_lic)>=zmasq(ji)) THEN
     94              pctsrf(ji,is_lic)=zmasq(ji)
     95              pctsrf(ji,is_ter)=0.
     96           ELSE
     97              pctsrf(ji,is_ter)=zmasq(ji)-pctsrf(ji,is_lic)
     98              IF(pctsrf(ji,is_ter)<EPSFRA) THEN
     99                 pctsrf(ji,is_ter)=0.
     100                 pctsrf(ji,is_lic)=zmasq(ji)
     101              END IF
     102           END IF
    116103        END IF
    117104     END DO
     105     
     106     
     107     !--- Option no_ter_antartique removes all land fractions souther than 60S.
     108     !--- Land ice is set instead of the land fractions on these latitudes.
     109     !--- The ocean and sea-ice fractions are not changed.
     110     no_ter_antartique=.FALSE.
     111     CALL getin_p('no_ter_antartique',no_ter_antartique)
     112     WRITE(lunout,*)"no_ter_antartique=",no_ter_antartique
     113     IF (no_ter_antartique) THEN
     114        ! Remove all land fractions souther than 60S and set land-ice instead
     115        WRITE(lunout,*) "Remove land fractions souther than 60deg south by increasing"
     116        WRITE(lunout,*) "the continental ice fractions. No land can now be found at Antartic."
     117        DO ji=1, klon
     118           IF (latitude_deg(ji)<-60.0) THEN
     119              pctsrf(ji,is_lic) = pctsrf(ji,is_lic) + pctsrf(ji,is_ter)
     120              pctsrf(ji,is_ter) = 0
     121           END IF
     122        END DO
     123     END IF
     124     
     125  ELSE
     126     ! landice_opt=2 and higher
     127     WRITE(lunout,*) 'No landice is attributed is_lic sub-surface because landice_opt=2 or higher.'
     128     WRITE(lunout,*) 'This means that the land model will handel land ice as well as all other land areas.'
     129     pctsrf(:,is_ter) = zmasq(:)
     130     pctsrf(:,is_lic) = 0.0
    118131  END IF
    119 
    120132
    121133!--- Sub-surface ocean and sea ice (sea ice set to zero for start).
Note: See TracChangeset for help on using the changeset viewer.