Ignore:
Timestamp:
Dec 6, 2022, 12:01:16 AM (2 years ago)
Author:
lguez
Message:

Sync latest trunk changes to Ocean_skin

Location:
LMDZ6/branches/Ocean_skin
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/Ocean_skin

  • LMDZ6/branches/Ocean_skin/libf/dynphy_lonlat/calfis.F

    r2604 r4368  
    2929c    Auteur :  P. Le Van, F. Hourdin
    3030c   .........
    31       USE infotrac, ONLY: nqtot, niadv, tname
     31      USE infotrac, ONLY: nqtot, tracers
    3232      USE control_mod, ONLY: planet_type, nsplit_phys
    3333#ifdef CPP_PHYS
     
    135135c    -----------------
    136136
    137       INTEGER i,j,l,ig0,ig,iq,iiq
     137      INTEGER i,j,l,ig0,ig,iq,itr
    138138      REAL zpsrf(ngridmx)
    139139      REAL zplev(ngridmx,llm+1),zplay(ngridmx,llm)
     
    281281c   ---------------
    282282c
     283      itr=0
    283284      DO iq=1,nqtot
    284           iiq=niadv(iq)
     285         IF(.NOT.tracers(iq)%isAdvected) CYCLE
     286         itr = itr + 1
    285287         DO l=1,llm
    286             zqfi(1,l,iq) = pq(1,1,l,iiq)
    287             ig0          = 2
     288            zqfi(1,l,itr) = pq(1,1,l,iq)
     289            ig0           = 2
    288290            DO j=2,jjm
    289291               DO i = 1, iim
    290                   zqfi(ig0,l,iq)  = pq(i,j,l,iiq)
     292                  zqfi(ig0,l,itr) = pq(i,j,l,iq)
    291293                  ig0             = ig0 + 1
    292294               ENDDO
    293295            ENDDO
    294             zqfi(ig0,l,iq) = pq(1,jjp1,l,iiq)
     296            zqfi(ig0,l,itr) = pq(1,jjp1,l,iq)
    295297         ENDDO
    296298      ENDDO
     
    481483         lafin_split=lafin.and.isplit==nsplit_phys
    482484
    483         CALL call_physiq(ngridmx,llm,nqtot,tname,
     485!      if (planet_type=="earth") then
     486        CALL call_physiq(ngridmx,llm,nqtot,tracers(:)%name,
    484487     &                   debut_split,lafin_split,
    485488     &                   jD_cur,jH_cur_split,zdt_split,
     
    490493     &                   flxwfi,pducov,
    491494     &                   zdufi,zdvfi,zdtfi,zdqfi,zdpsrf)
    492                              
    493 !      if (planet_type=="earth") then
    494 !
    495 !         CALL physiq (ngridmx,
    496 !     .             llm,
    497 !     .             debut_split,
    498 !     .             lafin_split,
    499 !     .             jD_cur,
    500 !     .             jH_cur_split,
    501 !     .             zdt_split,
    502 !     .             zplev,
    503 !     .             zplay,
    504 !     .             zphi,
    505 !     .             zphis,
    506 !     .             presnivs,
    507 !     .             zufi,
    508 !     .             zvfi, zrfi,
    509 !     .             ztfi,
    510 !     .             zqfi,
    511 !     .             flxwfi,
    512 !     .             zdufi,
    513 !     .             zdvfi,
    514 !     .             zdtfi,
    515 !     .             zdqfi,
    516 !     .             zdpsrf,
    517 !     .             pducov)
    518495!
    519496!      else if ( planet_type=="generic" ) then
     
    522499!     .             llm,            !! nlayer
    523500!     .             nqtot,          !! nq
    524 !     .             tname,          !! tracer names from dynamical core (given in infotrac)
     501!     .             tracers(:)%name,!! tracer names from dynamical core (given in infotrac)
    525502!     .             debut_split,    !! firstcall
    526503!     .             lafin_split,    !! lastcall
     
    622599      pdqfi(:,:,:,:)=0.
    623600C
     601      itr = 0
    624602      DO iq=1,nqtot
    625          iiq=niadv(iq)
     603         IF(.NOT.tracers(iq)%isAdvected) CYCLE
     604         itr = itr + 1
    626605         DO l=1,llm
    627606            DO i=1,iip1
    628                pdqfi(i,1,l,iiq)    = zdqfi(1,l,iq)
    629                pdqfi(i,jjp1,l,iiq) = zdqfi(ngridmx,l,iq)
     607               pdqfi(i,1,l,iq)    = zdqfi(1,l,itr)
     608               pdqfi(i,jjp1,l,iq) = zdqfi(ngridmx,l,itr)
    630609            ENDDO
    631610            DO j=2,jjm
    632611               ig0=1+(j-2)*iim
    633612               DO i=1,iim
    634                   pdqfi(i,j,l,iiq) = zdqfi(ig0+i,l,iq)
     613                  pdqfi(i,j,l,iq) = zdqfi(ig0+i,l,itr)
    635614               ENDDO
    636                pdqfi(iip1,j,l,iiq) = pdqfi(1,j,l,iq)
     615               pdqfi(iip1,j,l,iq) = pdqfi(1,j,l,itr)
    637616            ENDDO
    638617         ENDDO
  • LMDZ6/branches/Ocean_skin/libf/dynphy_lonlat/calfis_loc.F

    r2604 r4368  
    4545      USE Times
    4646#endif
    47       USE infotrac, ONLY: nqtot, niadv, tname
     47      USE infotrac, ONLY: nqtot, tracers
    4848      USE control_mod, ONLY: planet_type, nsplit_phys
    4949#ifdef CPP_PHYS
     
    154154c    -----------------
    155155
    156       INTEGER i,j,l,ig0,ig,iq,iiq
     156      INTEGER i,j,l,ig0,ig,iq,itr
    157157      REAL,ALLOCATABLE,SAVE :: zpsrf(:)
    158158      REAL,ALLOCATABLE,SAVE :: zplev(:,:),zplay(:,:)
     
    366366c
    367367
     368      itr = 0
    368369      DO iq=1,nqtot
    369          iiq=niadv(iq)
     370         IF(.NOT.tracers(iq)%isAdvected) CYCLE
     371         itr = itr + 1
    370372c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    371373         DO l=1,llm
     
    375377             i=index_i(ig0)
    376378             j=index_j(ig0)
    377              zqfi(ig0,l,iq)  = pq(i,j,l,iiq)
     379             zqfi(ig0,l,itr)  = pq(i,j,l,iq)
    378380           enddo
    379381         ENDDO
     
    731733         lafin_split=lafin.and.isplit==nsplit_phys
    732734
    733         CALL call_physiq(klon,llm,nqtot,tname,
     735        CALL call_physiq(klon,llm,nqtot,tracers(:)%name,
    734736     &                   debut_split,lafin_split,
    735737     &                   jD_cur,jH_cur_split,zdt_split,
     
    10691071C
    10701072!cdir NODEP
     1073      itr = 0
    10711074      DO iq=1,nqtot
    1072          iiq=niadv(iq)
     1075         IF(.NOT.tracers(iq)%isAdvected) CYCLE
     1076         itr = itr + 1
    10731077c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    10741078         DO l=1,llm
     
    10791083              i=index_i(ig0)
    10801084              j=index_j(ig0)
    1081               pdqfi(i,j,l,iiq) = zdqfi(ig0,l,iq)
    1082               if (i==1) pdqfi(iip1,j,l,iiq) = zdqfi(ig0,l,iq)
     1085              pdqfi(i,j,l,iq) = zdqfi(ig0,l,itr)
     1086              if (i==1) pdqfi(iip1,j,l,iq) = zdqfi(ig0,l,itr)
    10831087            ENDDO
    10841088           
    10851089            IF (is_north_pole_dyn) then
    10861090              DO i=1,iip1
    1087                 pdqfi(i,1,l,iiq)    = zdqfi(1,l,iq)
     1091                pdqfi(i,1,l,iq)    = zdqfi(1,l,itr)
    10881092              ENDDO
    10891093            ENDIF
     
    10911095            IF (is_south_pole_dyn) then
    10921096              DO i=1,iip1
    1093                 pdqfi(i,jjp1,l,iiq) = zdqfi(klon,l,iq)
     1097                pdqfi(i,jjp1,l,iq) = zdqfi(klon,l,itr)
    10941098              ENDDO
    10951099            ENDIF
  • LMDZ6/branches/Ocean_skin/libf/dynphy_lonlat/inigeomphy_mod.F90

    r4013 r4368  
    2525  USE nrtype, ONLY: pi
    2626  USE comvert_mod, ONLY: preff, ap, bp, aps, bps, presnivs, &
    27                          scaleheight, pseudoalt
     27                         scaleheight, pseudoalt, presinter
    2828  USE vertical_layers_mod, ONLY: init_vertical_layers
    2929  IMPLICIT NONE
     
    233233  ! copy over preff , ap(), bp(), etc
    234234  CALL init_vertical_layers(nlayer,preff,scaleheight, &
    235                             ap,bp,aps,bps,presnivs,pseudoalt)
     235                            ap,bp,aps,bps,presnivs,presinter,pseudoalt)
    236236
    237237!$OMP END PARALLEL
  • LMDZ6/branches/Ocean_skin/libf/dynphy_lonlat/phylmd/callphysiq_mod.F90

    r2604 r4368  
    2020
    2121  USE mod_grid_phy_lmdz, ONLY: nbp_lon, nbp_lat
    22   USE control_mod, ONLY: planet_type
     22  USE control_mod, ONLY: planet_type, ok_dyn_xios
    2323  USE physiq_mod, ONLY: physiq
     24#ifdef CPP_XIOS
     25  USE mod_xios_dyn3dmem, ONLY : dyn3d_ctx_handle
     26  USE xios, ONLY : xios_set_current_context
     27#endif
    2428  IMPLICIT NONE
    2529
     
    9094              zdpsrf_omp)
    9195
     96! switching back to LMDZDYN context
     97#ifdef CPP_XIOS
     98!$OMP MASTER
     99  if (ok_dyn_xios) then
     100     CALL xios_set_current_context(dyn3d_ctx_handle)
     101  endif
     102!$OMP END MASTER
     103#endif 
     104
    92105
    93106END SUBROUTINE call_physiq
  • LMDZ6/branches/Ocean_skin/libf/dynphy_lonlat/phylmd/ce0l.F90

    r3810 r4368  
    2323  USE netcdf,         ONLY: NF90_OPEN, NF90_NOWRITE, NF90_CLOSE, NF90_NOERR,    &
    2424         NF90_INQUIRE_DIMENSION, NF90_INQ_DIMID, NF90_INQ_VARID, NF90_GET_VAR
    25   USE infotrac,       ONLY: type_trac, infotrac_init
     25  USE infotrac,       ONLY: type_trac, init_infotrac
    2626  USE dimphy,         ONLY: klon
    2727  USE test_disvert_m, ONLY: test_disvert
     
    108108  calnd='gregorian'
    109109  SELECT CASE(calend)
    110     CASE('earth_360d');CALL ioconf_calendar('360d');   calnd='with 360 days/year'
     110    CASE('earth_360d');CALL ioconf_calendar('360_day');   calnd='with 360 days/year'
    111111    CASE('earth_365d');CALL ioconf_calendar('noleap'); calnd='with no leap year'
    112112    CASE('earth_366d');CALL ioconf_calendar('366d');   calnd='with leap years only'
     
    132132
    133133!--- Tracers initializations
    134   CALL infotrac_init()
     134  CALL init_infotrac()
    135135
    136136  CALL inifilr()
  • LMDZ6/branches/Ocean_skin/libf/dynphy_lonlat/phylmd/etat0dyn_netcdf.F90

    r3605 r4368  
    3939  USE comvert_mod, ONLY: ap, bp, preff, pressure_exner
    4040  USE temps_mod, ONLY: annee_ref, day_ref, itau_dyn, itau_phy, start_time
     41  USE strings_mod, ONLY: strLower
    4142 
    4243  IMPLICIT NONE
     
    7475  USE exner_hyb_m,    ONLY: exner_hyb
    7576  USE exner_milieu_m, ONLY: exner_milieu
    76   USE infotrac,       ONLY: nqtot, tname
     77  USE infotrac,       ONLY: nqtot, tracers
    7778  USE filtreg_mod
    7879  IMPLICIT NONE
     
    8485! Local variables:
    8586  CHARACTER(LEN=256) :: modname, fmt
    86   INTEGER            :: i, j, l, ji, itau, iday
     87  INTEGER            :: i, j, l, ji, itau, iday, iq
    8788  REAL               :: xpn, xps, time, phystep
    8889  REAL, DIMENSION(iip1,jjp1)       :: psol
     
    145146! Look for ozone tracer:
    146147#ifndef INCA
    147   DO i=1,nqtot; IF(ANY(["O3","o3"]==tname(i))) EXIT; END DO
    148   IF(i/=nqtot+1) THEN
     148  DO iq=1,nqtot; IF(strLower(tracers(iq)%name)=="o3") EXIT; END DO
     149  IF(iq/=nqtot+1) THEN
    149150    CALL regr_lat_time_coefoz
    150151    CALL press_coefoz
    151     CALL regr_pr_o3(p3d, q3d(:,:,:,i))
    152     q3d(:,:,:,i)=q3d(:,:,:,i)*48./ 29.                  !--- Mole->mass fraction         
     152    CALL regr_pr_o3(p3d, q3d(:,:,:,iq))
     153    q3d(:,:,:,iq)=q3d(:,:,:,iq)*48./ 29.                !--- Mole->mass fraction         
    153154  END IF
    154155#endif
  • LMDZ6/branches/Ocean_skin/libf/dynphy_lonlat/phylmd/etat0phys_netcdf.F90

    r4022 r4368  
    9494  USE init_ssrf_m, ONLY: start_init_subsurf
    9595  USE phys_state_var_mod, ONLY: beta_aridity, delta_tsurf, awake_dens, cv_gen, &
    96        ratqs_inter
     96       ratqs_inter, rneb_ancien
    9797  !use ioipsl_getincom
    9898  IMPLICIT NONE
     
    130130
    131131  INCLUDE "compbl.h"
    132   INCLUDE "thermcell.h"
     132  INCLUDE "alpale.h"
    133133 
    134134  deg2rad= pi/180.0
     
    286286
    287287  ratqs_inter = 0.002
     288  rneb_ancien = 0.
    288289  CALL phyredem( "startphy.nc" )
    289290
  • LMDZ6/branches/Ocean_skin/libf/dynphy_lonlat/phylmd/iniphysiq_mod.F90

    r4013 r4368  
    1616  USE mod_phys_lmdz_para, ONLY: klon_omp ! number of columns (on local omp grid)
    1717  USE vertical_layers_mod, ONLY : init_vertical_layers
    18   USE infotrac, ONLY: nqtot,nqo,nbtr,nqCO2,tname,ttext,type_trac,&
    19                       niadv,conv_flg,pbl_flg,solsym,&
    20                       nqfils,nqdesc,nqdesc_tot,iqfils,iqpere,&
    21                       ok_isotopes,ok_iso_verif,ok_isotrac,&
    22                       ok_init_iso,niso_possibles,tnat,&
    23                       alpha_ideal,use_iso,iqiso,iso_num,&
    24                       iso_indnum,zone_num,phase_num,&
    25                       indnum_fn_num,index_trac,&
    26                       niso,ntraceurs_zone,ntraciso,nqtottr,itr_indice
     18  USE infotrac, ONLY: nbtr, type_trac, types_trac
    2719#ifdef CPP_StratAer
    28   USE infotrac, ONLY: nbtr_bin, nbtr_sulgas, id_OCS_strat, &
     20  USE infotrac_phy, ONLY: nbtr_bin, nbtr_sulgas, id_OCS_strat, &
    2921                      id_SO2_strat, id_H2SO4_strat, id_BIN01_strat
    3022
     
    3830  USE mod_phys_lmdz_omp_data, ONLY: klon_omp
    3931#endif
    40   USE control_mod, ONLY: dayref,anneeref,day_step,nday,offline, iphysiq, config_inca
     32  USE control_mod, ONLY: dayref,anneeref,day_step,nday,offline, iphysiq
    4133  USE inifis_mod, ONLY: inifis
    4234  USE time_phylmdz_mod, ONLY: init_time
     
    116108 
    117109!!$OMP PARALLEL DEFAULT(SHARED) COPYIN(/temps/)
    118 !$OMP PARALLEL DEFAULT(SHARED) &
    119110!       Copy all threadprivate variables in temps_mod
    120 !$OMP COPYIN(annee_ref, day_ini, day_ref, start_time)
     111!$OMP PARALLEL DEFAULT(SHARED) COPYIN(annee_ref,day_ini,day_ref,start_time)
    121112
    122113  ! Initialize physical constants in physics:
     
    146137
    147138  ! Initialize tracer names, numbers, etc. for physics
    148   CALL init_infotrac_phy(nqtot,nqo,nbtr,nqtottr,nqCO2,tname,ttext,type_trac,&
    149                          niadv,conv_flg,pbl_flg,solsym,&
    150                          nqfils,nqdesc,nqdesc_tot,iqfils,iqpere,&
    151                          ok_isotopes,ok_iso_verif,ok_isotrac,&
    152                          ok_init_iso,niso_possibles,tnat,&
    153                          alpha_ideal,use_iso,iqiso,iso_num,&
    154                          iso_indnum,zone_num,phase_num,&
    155                          indnum_fn_num,index_trac,&
    156                          niso,ntraceurs_zone,ntraciso,itr_indice &
    157 #ifdef CPP_StratAer
    158                          ,nbtr_bin,nbtr_sulgas&
    159                          ,id_OCS_strat,id_SO2_strat,id_H2SO4_strat,id_BIN01_strat&
    160 #endif
    161                          )
     139  CALL init_infotrac_phy
    162140
    163141  ! Initializations for Reprobus
    164   IF (type_trac == 'repr') THEN
     142  IF (ANY(types_trac == 'repr')) THEN
    165143#ifdef REPROBUS
    166144    call Init_chem_rep_phys(klon_omp,nlayer)
     
    172150!$OMP END PARALLEL
    173151
    174   IF (type_trac == 'inca' .OR. type_trac == 'inco') THEN
    175 #ifdef INCA
    176      call init_const_lmdz( &
    177           anneeref,dayref, iphysiq,day_step,nday,  &
    178           nbsrf, is_oce,is_sic, is_ter,is_lic, calend, &
    179           config_inca)
    180      call init_inca_para( &
    181           nbp_lon,nbp_lat,nbp_lev,klon_glo,mpi_size, &
    182           distrib_phys,communicator)
    183 #endif
    184   END IF
    185   IF (type_trac == 'repr') THEN
     152
     153  IF (ANY(types_trac == 'repr')) THEN
    186154#ifdef REPROBUS
    187155    call init_reprobus_para( &
     
    198166  END IF
    199167
    200   IF (type_trac == 'inca' .OR. type_trac == 'inco') THEN
     168  IF (ANY(types_trac == 'inca') .OR. ANY(types_trac == 'inco')) THEN
    201169#ifdef INCA
    202      CALL init_inca_dim(klon_omp,nbp_lev,nbp_lon,nbp_lat - 1, &
    203           rlonudyn,rlatudyn,rlonvdyn,rlatvdyn)
     170     CALL init_inca_dim_reg(nbp_lon, nbp_lat - 1, &
     171          rlonudyn, rlatudyn, rlonvdyn, rlatvdyn)
    204172#endif
    205     IF (type_trac == 'repr') THEN
    206 #ifdef REPROBUS
    207        CALL Init_chem_rep_phys(klon_omp,nbp_lev)
    208 #endif
    209     END IF
    210173  END IF
    211174
  • LMDZ6/branches/Ocean_skin/libf/dynphy_lonlat/phylmd/init_ssrf_m.F90

    r2798 r4368  
    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).
  • LMDZ6/branches/Ocean_skin/libf/dynphy_lonlat/phylmd/limit_netcdf.F90

    r3811 r4368  
    424424  IF(NF90_GET_ATT(ncid, varid, 'calendar', cal_in)/=NF90_NOERR) THEN
    425425    SELECT CASE(mode)
    426       CASE('RUG', 'ALB'); cal_in='360d'
     426      CASE('RUG', 'ALB'); cal_in='360_day'
    427427      CASE('SIC', 'SST'); cal_in='gregorian'
    428428    END SELECT
     
    492492      !--- DROPPED FOR BCS DATA (FRACTIONS CAN BE HIGHER THAN 1)
    493493      IF(ll.AND.ix_sic/=1.AND.mode=='SIC') &
    494         CALL abort_physic(mode,'unrealistic '//TRIM(mode)//' found: '//TRIM(str))
     494        CALL abort_physic(mode,'unrealistic '//TRIM(mode)//' found: '//TRIM(str), 1)
    495495
    496496    END IF
     
    641641  ALLOCATE(champo(klon, ndays))
    642642  DO k=1, ndays
    643     CALL gr_dyn_fi(1, iip1, jjp1, klon, champan(1, 1, k), champo(1, k))
     643    CALL gr_dyn_fi(1, iip1, jjp1, klon, champan(1, 1, k), champo(:, k))
    644644  END DO
    645645  DEALLOCATE(champan)
Note: See TracChangeset for help on using the changeset viewer.