Changeset 1543 for trunk/LMDZ.GENERIC/libf/dynphy_lonlat/phystd
- Timestamp:
- Apr 22, 2016, 9:02:11 AM (9 years ago)
- Location:
- trunk/LMDZ.GENERIC/libf/dynphy_lonlat/phystd
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.GENERIC/libf/dynphy_lonlat/phystd/iniphysiq_mod.F90
r1542 r1543 3 3 CONTAINS 4 4 5 subroutine iniphysiq(ii,jj,nlayer,punjours, pdayref,ptimestep, & 6 rlatudyn,rlatvdyn,rlonudyn,rlonvdyn,airedyn,cudyn,cvdyn, & 5 subroutine iniphysiq(ii,jj,nlayer, & 6 nbp, communicator, & 7 punjours, pdayref,ptimestep, & 8 rlatudyn,rlatvdyn,rlonudyn,rlonvdyn, & 9 airedyn,cudyn,cvdyn, & 7 10 prad,pg,pr,pcpp,iflag_phys) 8 11 9 use dimphy, only : klev ! number of atmospheric levels10 use mod_grid_phy_lmdz, only : klon_glo ! number of atmospheric columns11 ! (on full grid)12 use dimphy, only : init_dimphy 13 use mod_grid_phy_lmdz, only : klon_glo, & ! number of atmospheric columns (on full grid) 14 regular_lonlat ! regular longitude-latitude grid type 12 15 use mod_phys_lmdz_para, only : klon_omp, & ! number of columns (on local omp grid) 13 16 klon_omp_begin, & ! start index of local omp subgrid … … 15 18 klon_mpi_begin ! start indes of columns (on local mpi grid) 16 19 use control_mod, only: nday 17 use comgeomphy, only : initcomgeomphy, & 18 cell_area, & ! physics grid area (m2) 19 dx, & ! cu coeff. (u_covariant = cu * u) 20 dy, & ! cv coeff. (v_covariant = cv * v) 21 longitude, & ! longitudes (rad) 22 latitude ! latitudes (rad) 20 use geometry_mod, only: init_geometry, & 21 cell_area, & ! physics grid area (m2) 22 longitude, & ! longitudes (rad) 23 latitude ! latitudes (rad) 24 !use comgeomphy, only : initcomgeomphy, & 25 ! cell_area, & ! physics grid area (m2) 26 ! dx, & ! cu coeff. (u_covariant = cu * u) 27 ! dy, & ! cv coeff. (v_covariant = cv * v) 28 ! longitude, & ! longitudes (rad) 29 ! latitude ! latitudes (rad) 23 30 use surf_heat_transp_mod, only: ini_surf_heat_transp 24 31 use infotrac, only : nqtot ! number of advected tracers … … 26 33 USE comvert_mod, ONLY: ap,bp,preff 27 34 use inifis_mod, only: inifis 35 use physics_distribution_mod, only: init_physics_distribution 28 36 use regular_lonlat_mod, only: init_regular_lonlat, & 29 37 east, west, north, south, & 30 38 north_east, north_west, & 31 39 south_west, south_east 40 use mod_interface_dyn_phys, only: init_interface_dyn_phys 32 41 use ioipsl_getin_p_mod, only: getin_p 33 42 … … 47 56 integer,intent(in) :: ii ! number of atmospheric coulumns along longitudes 48 57 integer,intent(in) :: jj ! number of atompsheric columns along latitudes 58 integer,intent(in) :: nbp ! number of physics columns for this MPI process 59 integer,intent(in) :: communicator ! MPI communicator 49 60 real,intent(in) :: rlatudyn(jj+1) ! latitudes of the physics grid 50 61 real,intent(in) :: rlatvdyn(jj) ! latitude boundaries of the physics grid … … 59 70 60 71 integer :: ibegin,iend,offset 61 integer :: i,j 72 integer :: i,j,k 62 73 character(len=20) :: modname='iniphysiq' 63 74 character(len=80) :: abort_message … … 71 82 72 83 ! global array, on full physics grid: 73 real,allocatable :: latfi(:) 74 real,allocatable :: lonfi(:) 75 real,allocatable :: cufi(:) 76 real,allocatable :: cvfi(:) 77 real,allocatable :: airefi(:) 84 real,allocatable :: latfi_glo(:) 85 real,allocatable :: lonfi_glo(:) 86 real,allocatable :: cufi_glo(:) 87 real,allocatable :: cvfi_glo(:) 88 real,allocatable :: airefi_glo(:) 89 real,allocatable :: boundslonfi_glo(:,:) 90 real,allocatable :: boundslatfi_glo(:,:) 91 92 ! local arrays, on given MPI/OpenMP domain: 93 real,allocatable,save :: latfi(:) 94 real,allocatable,save :: lonfi(:) 95 real,allocatable,save :: cufi(:) 96 real,allocatable,save :: cvfi(:) 97 real,allocatable,save :: airefi(:) 98 real,allocatable,save :: boundslonfi(:,:) 99 real,allocatable,save :: boundslatfi(:,:) 100 !$OMP THREADPRIVATE (latfi,lonfi,cufi,cvfi,airefi,boundslonfi,boundslatfi) 78 101 79 102 pi=2.*asin(1.0) 80 103 81 IF (nlayer.NE.klev) THEN 82 write(*,*) 'STOP in ',trim(modname) 83 write(*,*) 'Problem with dimensions :' 84 write(*,*) 'nlayer = ',nlayer 85 write(*,*) 'klev = ',klev 86 abort_message = '' 87 CALL abort_gcm (modname,abort_message,1) 88 ENDIF 89 90 !IF (ngrid.NE.klon_glo) THEN 91 ! write(*,*) 'STOP in ',trim(modname) 92 ! write(*,*) 'Problem with dimensions :' 93 ! write(*,*) 'ngrid = ',ngrid 94 ! write(*,*) 'klon = ',klon_glo 95 ! abort_message = '' 96 ! CALL abort_gcm (modname,abort_message,1) 97 !ENDIF 98 99 !call init_phys_lmdz(iim,jjm+1,llm,1,(/(jjm-1)*iim+2/)) 104 ! Initialize Physics distibution and parameters and interface with dynamics 105 CALL init_physics_distribution(regular_lonlat,4, & 106 nbp,ii,jj+1,nlayer,communicator) 107 CALL init_interface_dyn_phys 100 108 101 109 ! init regular global longitude-latitude grid points and boundaries … … 122 130 123 131 ! Generate global arrays on full physics grid 124 allocate(latfi(klon_glo),lonfi(klon_glo),cufi(klon_glo),cvfi(klon_glo)) 125 latfi(1)=rlatudyn(1) 126 lonfi(1)=0. 127 cufi(1) = cudyn(1) 128 cvfi(1) = cvdyn(1) 132 allocate(latfi_glo(klon_glo),lonfi_glo(klon_glo)) 133 allocate(cufi_glo(klon_glo),cvfi_glo(klon_glo)) 134 allocate(airefi_glo(klon_glo)) 135 allocate(boundslonfi_glo(klon_glo,4)) 136 allocate(boundslatfi_glo(klon_glo,4)) 137 138 ! North pole 139 latfi_glo(1)=rlatudyn(1) 140 lonfi_glo(1)=0. 141 cufi_glo(1) = cudyn(1) 142 cvfi_glo(1) = cvdyn(1) 143 boundslonfi_glo(1,north_east)=0 144 boundslatfi_glo(1,north_east)=PI/2 145 boundslonfi_glo(1,north_west)=2*PI 146 boundslatfi_glo(1,north_west)=PI/2 147 boundslonfi_glo(1,south_west)=2*PI 148 boundslatfi_glo(1,south_west)=rlatvdyn(1) 149 boundslonfi_glo(1,south_east)=0 150 boundslatfi_glo(1,south_east)=rlatvdyn(1) 129 151 DO j=2,jj 130 152 DO i=1,ii 131 latfi((j-2)*ii+1+i)= rlatudyn(j) 132 lonfi((j-2)*ii+1+i)= rlonvdyn(i) 133 cufi((j-2)*ii+1+i) = cudyn((j-1)*(ii+1)+i) 134 cvfi((j-2)*ii+1+i) = cvdyn((j-1)*(ii+1)+i) 153 k=(j-2)*ii+1+i 154 latfi_glo((j-2)*ii+1+i)= rlatudyn(j) 155 lonfi_glo((j-2)*ii+1+i)= rlonvdyn(i) 156 cufi_glo((j-2)*ii+1+i) = cudyn((j-1)*(ii+1)+i) 157 cvfi_glo((j-2)*ii+1+i) = cvdyn((j-1)*(ii+1)+i) 158 boundslonfi_glo(k,north_east)=rlonudyn(i) 159 boundslatfi_glo(k,north_east)=rlatvdyn(j-1) 160 boundslonfi_glo(k,north_west)=rlonudyn(i+1) 161 boundslatfi_glo(k,north_west)=rlatvdyn(j-1) 162 boundslonfi_glo(k,south_west)=rlonudyn(i+1) 163 boundslatfi_glo(k,south_west)=rlatvdyn(j) 164 boundslonfi_glo(k,south_east)=rlonudyn(i) 165 boundslatfi_glo(k,south_east)=rlatvdyn(j) 135 166 ENDDO 136 167 ENDDO 137 latfi(klon_glo)= rlatudyn(jj+1) 138 lonfi(klon_glo)= 0. 139 cufi(klon_glo) = cudyn((ii+1)*jj+1) 140 cvfi(klon_glo) = cvdyn((ii+1)*jj-ii) 168 ! South pole 169 latfi_glo(klon_glo)= rlatudyn(jj+1) 170 lonfi_glo(klon_glo)= 0. 171 cufi_glo(klon_glo) = cudyn((ii+1)*jj+1) 172 cvfi_glo(klon_glo) = cvdyn((ii+1)*jj-ii) 173 boundslonfi_glo(klon_glo,north_east)= 0 174 boundslatfi_glo(klon_glo,north_east)= rlatvdyn(jj) 175 boundslonfi_glo(klon_glo,north_west)= 2*PI 176 boundslatfi_glo(klon_glo,north_west)= rlatvdyn(jj) 177 boundslonfi_glo(klon_glo,south_west)= 2*PI 178 boundslatfi_glo(klon_glo,south_west)= -PI/2 179 boundslonfi_glo(klon_glo,south_east)= 0 180 boundslatfi_glo(klon_glo,south_east)= -Pi/2 141 181 142 182 ! build airefi(), mesh area on physics grid 143 allocate(airefi(klon_glo)) 144 CALL gr_dyn_fi(1,ii+1,jj+1,klon_glo,airedyn,airefi) 183 CALL gr_dyn_fi(1,ii+1,jj+1,klon_glo,airedyn,airefi_glo) 145 184 ! Poles are single points on physics grid 146 airefi (1)=sum(airedyn(1:ii,1))147 airefi (klon_glo)=sum(airedyn(1:ii,jj+1))185 airefi_glo(1)=sum(airedyn(1:ii,1)) 186 airefi_glo(klon_glo)=sum(airedyn(1:ii,jj+1)) 148 187 149 188 ! Sanity check: do total planet area match between physics and dynamics? 150 189 total_area_dyn=sum(airedyn(1:ii,1:jj+1)) 151 total_area_phy=sum(airefi (1:klon_glo))190 total_area_phy=sum(airefi_glo(1:klon_glo)) 152 191 IF (total_area_dyn/=total_area_phy) THEN 153 192 WRITE (lunout, *) 'iniphysiq: planet total surface discrepancy !!!' … … 164 203 !$OMP PARALLEL 165 204 ! Now generate local lon/lat/cu/cv/area arrays 166 call initcomgeomphy 167 168 !!!!$OMP PARALLEL PRIVATE(ibegin,iend) & 169 !!! !$OMP SHARED(airefi,cufi,cvfi,lonfi,latfi) 205 allocate(latfi(klon_omp),lonfi(klon_omp),cufi(klon_omp),cvfi(klon_omp)) 206 allocate(airefi(klon_omp)) 207 allocate(boundslonfi(klon_omp,4)) 208 allocate(boundslatfi(klon_omp,4)) 209 !call initcomgeomphy 170 210 171 211 offset=klon_mpi_begin-1 172 cell_area(1:klon_omp)=airefi(offset+klon_omp_begin:offset+klon_omp_end) 173 dx(1:klon_omp)=cufi(offset+klon_omp_begin:offset+klon_omp_end) 174 dy(1:klon_omp)=cvfi(offset+klon_omp_begin:offset+klon_omp_end) 175 longitude(1:klon_omp)=lonfi(offset+klon_omp_begin:offset+klon_omp_end) 176 latitude(1:klon_omp)=latfi(offset+klon_omp_begin:offset+klon_omp_end) 212 airefi(1:klon_omp)=airefi_glo(offset+klon_omp_begin:offset+klon_omp_end) 213 cufi(1:klon_omp)=cufi_glo(offset+klon_omp_begin:offset+klon_omp_end) 214 cvfi(1:klon_omp)=cvfi_glo(offset+klon_omp_begin:offset+klon_omp_end) 215 lonfi(1:klon_omp)=lonfi_glo(offset+klon_omp_begin:offset+klon_omp_end) 216 latfi(1:klon_omp)=latfi_glo(offset+klon_omp_begin:offset+klon_omp_end) 217 boundslonfi(1:klon_omp,:)=boundslonfi_glo(offset+klon_omp_begin:offset+klon_omp_end,:) 218 boundslatfi(1:klon_omp,:)=boundslatfi_glo(offset+klon_omp_begin:offset+klon_omp_end,:) 219 220 ! copy over local grid longitudes and latitudes 221 CALL init_geometry(klon_omp,lonfi,latfi,boundslonfi,boundslatfi, & 222 airefi,cufi,cvfi) 223 224 call init_dimphy(klon_omp,nlayer) ! Initialize dimphy module 177 225 178 226 ! copy over preff , ap() and bp() -
trunk/LMDZ.GENERIC/libf/dynphy_lonlat/phystd/newstart.F
r1524 r1543 15 15 c======================================================================= 16 16 17 use mod_phys_lmdz_para, only: is_parallel, is_sequential, 18 & is_mpi_root, is_omp_root, 19 & is_master 17 20 use infotrac, only: infotrac_init, nqtot, tname 18 21 USE tracer_h, ONLY: igcm_co2_ice, igcm_h2o_vap, igcm_h2o_ice … … 20 23 USE surfdat_h, ONLY: phisfi, albedodat, 21 24 & zmea, zstd, zsig, zgam, zthe 22 USE comgeomfi_h, ONLY: lati, long, area23 25 use datafile_mod, only: datadir, surfdir 24 26 use ioipsl_getin_p_mod, only: getin_p … … 26 28 use phyredem, only: physdem0, physdem1 27 29 use iostart, only: open_startphy 28 use comgeomphy, only: initcomgeomphy29 30 use slab_ice_h, only:noceanmx 30 31 use filtreg_mod, only: inifilr 32 USE mod_const_mpi, ONLY: COMM_LMDZ 31 33 USE comvert_mod, ONLY: ap,bp,aps,bps,pa,preff 32 34 USE comconst_mod, ONLY: lllm,daysec,dtvr,dtphys,cpp,kappa, 33 . 35 . rad,omeg,g,r,pi 34 36 USE serre_mod, ONLY: alphax 35 37 USE temps_mod, ONLY: day_ini 36 38 USE ener_mod, ONLY: etot0,ptot0,ztot0,stot0,ang0 37 use ini fis_mod, only: inifis39 use iniphysiq_mod, only: iniphysiq 38 40 implicit none 39 41 40 #include "dimensions.h" 41 !#include "dimphys.h" 42 include "dimensions.h" 42 43 integer, parameter :: ngridmx = (2+(jjm-1)*iim - 1/jjm) 43 !#include "planete.h" 44 #include "paramet.h" 45 #include "comgeom2.h" 46 !#include "control.h" 47 #include "comdissnew.h" 48 #include "netcdf.inc" 49 !#include "advtrac.h" 44 include "paramet.h" 45 include "comgeom2.h" 46 include "comdissnew.h" 47 include "netcdf.inc" 48 50 49 c======================================================================= 51 50 c Declarations … … 54 53 c Variables dimension du fichier "start_archive" 55 54 c------------------------------------ 56 CHARACTER 55 CHARACTER relief*3 57 56 58 57 … … 94 93 c variable physique 95 94 c------------------ 96 REAL tsurf(ngridmx) 97 REAL tsoil(ngridmx,nsoilmx) ! soil temperature98 ! REAL co2ice(ngridmx) 99 REAL emis(ngridmx) 95 REAL tsurf(ngridmx) ! surface temperature 96 REAL,ALLOCATABLE :: tsoil(:,:) ! soil temperature 97 ! REAL co2ice(ngridmx) ! CO2 ice layer 98 REAL emis(ngridmx) ! surface emissivity 100 99 real emisread ! added by RW 101 100 REAL,ALLOCATABLE :: qsurf(:,:) … … 103 102 ! REAL rnaturfi(ngridmx) 104 103 real alb(iip1,jjp1),albfi(ngridmx) ! albedos 105 real ith(iip1,jjp1,nsoilmx),ithfi(ngridmx,nsoilmx) ! thermal inertia (3D)104 real,ALLOCATABLE :: ith(:,:,:),ithfi(:,:) ! thermal inertia (3D) 106 105 real surfith(iip1,jjp1),surfithfi(ngridmx) ! surface thermal inertia (2D) 107 106 REAL latfi(ngridmx),lonfi(ngridmx),airefi(ngridmx) … … 113 112 114 113 REAL rnat(ngridmx) 115 REAL tslab(ngridmx,nsoilmx) ! slab ocean temperature114 REAL,ALLOCATABLE :: tslab(:,:) ! slab ocean temperature 116 115 REAL pctsrf_sic(ngridmx) ! sea ice cover 117 116 REAL tsea_ice(ngridmx) ! temperature sea_ice … … 145 144 character*80 fichnom 146 145 character*250 filestring 147 integer Lmodif,iq ,thermo146 integer Lmodif,iq 148 147 character modif*20 149 148 real z_reel(iip1,jjp1) … … 155 154 real val, val2, val3, val4 ! to store temporary variables 156 155 real :: iceith=2000 ! thermal inertia of subterranean ice 157 integer iref,jref158 156 159 157 INTEGER :: itau 160 158 161 INTEGER :: nq,numvanle162 159 character(len=20) :: txt ! to store some text 163 160 character(len=50) :: surfacefile ! "surface.nc" (or equivalent file) … … 166 163 real :: profile(llm+1) ! to store an atmospheric profile + surface value 167 164 168 ! added by RW for test169 real pmean, phi0170 171 165 ! added by BC for equilibrium temperature startup 172 166 real teque … … 193 187 ! make deliberate choice of these values elsewhere. 194 188 189 planet_type="generic" 190 195 191 ! initialize "serial/parallel" related stuff 196 CALL init_phys_lmdz(iim,jjp1,llm,1,(/(jjm-1)*iim+2/)) 197 call initcomgeomphy 192 ! (required because we call tabfi() below, before calling iniphysiq) 193 is_sequential=.true. 194 is_parallel=.false. 195 is_mpi_root=.true. 196 is_omp_root=.true. 197 is_master=.true. 198 198 199 ! Load tracer number and names: 199 ! call iniadvtrac(nqtot,numvanle)200 200 call infotrac_init 201 201 ! allocate arrays … … 203 203 allocate(qsurf(ngridmx,nqtot)) 204 204 205 planet_type="generic" 206 205 ! get value of nsoilmx and allocate corresponding arrays 206 nsoilmx=18 ! default value 207 call getin_p("nsoilmx",nsoilmx) 208 209 allocate(tsoil(ngridmx,nsoilmx)) 210 allocate(ith(iip1,jjp1,nsoilmx),ithfi(ngridmx,nsoilmx)) 211 allocate(tslab(ngridmx,nsoilmx)) 212 207 213 c======================================================================= 208 214 c Choice of the start file(s) to use … … 284 290 IF (.not. ALLOCATED(zgam)) ALLOCATE(zgam(ngridmx)) 285 291 IF (.not. ALLOCATED(zthe)) ALLOCATE(zthe(ngridmx)) 286 ! ALLOCATE ARRAYS in comsoil_h (if not already done)287 IF (.not.ALLOCATED(layer))288 . ALLOCATE(layer(nsoilmx))289 IF (.not.ALLOCATED(mlayer))290 . ALLOCATE(mlayer(0:nsoilmx-1))291 IF (.not.ALLOCATED(inertiedat))292 . ALLOCATE(inertiedat(ngridmx,nsoilmx))293 ! ALLOCATE ARRAYS IN comgeomfi_h (done in inifis usually)294 IF (.not. ALLOCATED(lati)) ALLOCATE(lati(ngridmx))295 IF (.not. ALLOCATED(long)) ALLOCATE(long(ngridmx))296 IF (.not. ALLOCATED(area)) ALLOCATE(area(ngridmx))297 292 298 293 c----------------------------------------------------------------------- … … 337 332 write(*,*) i,tab_cntrl(i) 338 333 enddo 339 334 340 335 ! Lmodif set to 0 to disable modifications possibility in phyeta0 341 336 write(*,*) 'Reading file START' … … 355 350 do i=1,ngridmx 356 351 albfi(i) = albedodat(i) 357 352 do j=1,nsoilmx 358 353 ithfi(i,j) = inertiedat(i,j) 359 354 enddo 360 355 ! build a surfithfi(:) using 1st layer of ithfi(:), which might 361 356 ! be needed later on if reinitializing soil thermal inertia … … 371 366 endif 372 367 c----------------------------------------------------------------------- 373 c 368 c Initialisation des constantes dynamique 374 369 c----------------------------------------------------------------------- 375 370 … … 451 446 idum=0 452 447 453 c Initialisation coordonnees /aires 454 c ------------------------------- 455 ! Note: rlatu(:) and rlonv(:) are commons defined in "comgeom.h" 456 ! rlatu() and rlonv() are given in radians 457 latfi(1)=rlatu(1) 458 lonfi(1)=0. 459 DO j=2,jjm 460 DO i=1,iim 461 latfi((j-2)*iim+1+i)=rlatu(j) 462 lonfi((j-2)*iim+1+i)=rlonv(i) 463 ENDDO 464 ENDDO 465 latfi(ngridmx)=rlatu(jjp1) 466 lonfi(ngridmx)=0. 467 468 ! build airefi(), mesh area on physics grid 469 CALL gr_dyn_fi(1,iip1,jjp1,ngridmx,aire,airefi) 470 ! Poles are single points on physics grid 471 airefi(1)=sum(aire(1:iim,1)) 472 airefi(ngridmx)=sum(aire(1:iim,jjm+1)) 473 474 ! also initialize various physics flags/settings which might be needed 475 ! (for instance initracer needs to know about some flags, and/or 476 ! 'datafile' path may be changed by user) 477 call inifis(ngridmx,llm,nqtot,day_ini,daysec,dtphys, 478 & latfi,lonfi,airefi,rad,g,r,cpp) 448 ! Initialize the physics 449 CALL iniphysiq(iim,jjm,llm, 450 & (jjm-1)*iim+2,comm_lmdz, 451 & daysec,day_ini,dtphys, 452 & rlatu,rlatv,rlonu,rlonv, 453 & aire,cu,cv,rad,g,r,cpp, 454 & 1) 479 455 480 456 c======================================================================= … … 560 536 & rnat,pctsrf_sic,tslab,tsea_ice,sea_ice) 561 537 write(*,*) "OK, read start_archive file" 562 563 564 538 ! copy soil thermal inertia 539 ithfi(:,:)=inertiedat(:,:) 540 565 541 ierr= NF_CLOSE(nid) 566 542 … … 727 703 DO j=1,jjp1 728 704 DO i=1,iip1 729 alb(i,j) = alb_bb 730 731 ith(i,j,isoil) = ith_bb 732 705 alb(i,j) = alb_bb ! albedo 706 do isoil=1,nsoilmx 707 ith(i,j,isoil) = ith_bb ! thermal inertia 708 enddo 733 709 END DO 734 710 END DO … … 867 843 if (yes.eq.'y') then 868 844 write(*,*) 'Value?' 869 845 read(*,*,iostat=ierr) psea 870 846 DO i=1,iip1 871 847 DO j=1,jjp1 … … 874 850 ENDDO 875 851 ENDDO 876 852 write(*,*) 'psea=',psea 877 853 else 878 854 write(*,*) 'no' … … 1467 1443 ! ---------------------------------------------------------------------- 1468 1444 1469 1445 else if (trim(modif) .eq. 'therm_ini_s') then 1470 1446 ! write(*,*)"surfithfi(1):",surfithfi(1) 1471 1472 1473 1447 do isoil=1,nsoilmx 1448 inertiedat(1:ngridmx,isoil)=surfithfi(1:ngridmx) 1449 enddo 1474 1450 write(*,*)'OK: Soil thermal inertia has been reset to referenc 1475 1451 &e surface values' 1476 ! 1477 1478 1479 1452 ! write(*,*)"inertiedat(1,1):",inertiedat(1,1) 1453 ithfi(:,:)=inertiedat(:,:) 1454 ! recast ithfi() onto ith() 1455 call gr_fi_dyn(nsoilmx,ngridmx,iip1,jjp1,ithfi,ith) 1480 1456 ! Check: 1481 1457 ! do i=1,iip1 … … 1485 1461 ! enddo 1486 1462 ! enddo 1487 ! 1463 ! enddo 1488 1464 1489 1465 … … 1660 1636 1661 1637 c======================================================================= 1662 c 1638 c Formats 1663 1639 c======================================================================= 1664 1640 -
trunk/LMDZ.GENERIC/libf/dynphy_lonlat/phystd/start2archive.F
r1478 r1543 21 21 use infotrac, only: infotrac_init, nqtot, tname 22 22 USE comsoil_h 23 USE comgeomfi_h, ONLY: lati, long, area 23 24 ! USE comgeomfi_h, ONLY: lati, long, area 24 25 ! use control_mod 25 use comgeomphy, only: initcomgeomphy26 ! use comgeomphy, only: initcomgeomphy 26 27 use slab_ice_h, only: noceanmx 27 28 ! to use 'getin' 28 29 USE ioipsl_getincom 29 30 USE planete_mod, only: year_day 31 USE mod_const_mpi, ONLY: COMM_LMDZ 30 32 USE control_mod, only: planet_type 31 33 USE callkeys_mod, ONLY: ok_slab_ocean 32 34 use filtreg_mod, only: inifilr 33 35 USE comvert_mod, ONLY: ap,bp 34 USE comconst_mod, ONLY: cpp,g36 USE comconst_mod, ONLY: daysec,dtphys,rad,g,r,cpp 35 37 USE logic_mod, ONLY: grireg 36 38 USE temps_mod, ONLY: day_ini 39 USE iniphysiq_mod, ONLY: iniphysiq 37 40 implicit none 38 41 39 #include "dimensions.h"42 include "dimensions.h" 40 43 integer, parameter :: ngridmx = (2+(jjm-1)*iim - 1/jjm) 41 #include "paramet.h"42 #include "comdissip.h"43 #include "comgeom.h"44 include "paramet.h" 45 include "comdissip.h" 46 include "comgeom.h" 44 47 !#include "control.h" 45 48 … … 47 50 !#include "planete.h" 48 51 !#include"advtrac.h" 49 #include "netcdf.inc"52 include "netcdf.inc" 50 53 c----------------------------------------------------------------------- 51 54 c Declarations … … 68 71 c Variable Physiques (grille physique) 69 72 c ------------------------------------ 70 REAL tsurf(ngridmx) 71 REAL tsoil(ngridmx,nsoilmx) ! Soil temperature72 REAL co2ice(ngridmx) 73 REAL tsurf(ngridmx) ! Surface temperature 74 REAL,ALLOCATABLE :: tsoil(:,:) ! Soil temperature 75 REAL co2ice(ngridmx) ! CO2 ice layer 73 76 REAL q2(ngridmx,llm+1) 74 77 REAL,ALLOCATABLE :: qsurf(:,:) … … 93 96 REAL T(ip1jmp1,llm),us(ip1jmp1,llm),vs(ip1jmp1,llm) 94 97 REAL tsurfS(ip1jmp1) 95 REAL tsoilS(ip1jmp1,nsoilmx)96 REAL ithS(ip1jmp1,nsoilmx) ! Soil Thermal Inertia98 REAL,ALLOCATABLE :: tsoilS(:,:) 99 REAL,ALLOCATABLE :: ithS(:,:) ! Soil Thermal Inertia 97 100 REAL co2iceS(ip1jmp1) 98 101 REAL q2S(ip1jmp1,llm+1) … … 144 147 grireg = .TRUE. 145 148 146 ! initialize "serial/parallel" related stuff147 CALL init_phys_lmdz(iim,jjp1,llm,1,(/(jjm-1)*iim+2/))148 call initcomgeomphy149 150 ! ALLOCATE ARRAYS IN comgeomfi_h (usually done in inifis)151 ! this must be here for start2archive to work152 IF (.not. ALLOCATED(lati)) ALLOCATE(lati(ngridmx))153 IF (.not. ALLOCATED(long)) ALLOCATE(long(ngridmx))154 IF (.not. ALLOCATED(area)) ALLOCATE(area(ngridmx))155 156 149 planet_type="generic" 157 150 … … 160 153 c======================================================================= 161 154 ! Load tracer number and names: 162 ! call iniadvtrac(nqtot,numvanle)163 155 call infotrac_init 164 156 … … 168 160 allocate(qsurfS(ip1jmp1,nqtot)) 169 161 ! other array allocations: 170 call ini_comsoil_h(ngridmx) 162 ! call ini_comsoil_h(ngridmx) ! done via iniphysiq 171 163 172 164 fichnom = 'start.nc' … … 198 190 199 191 ierr = NF_CLOSE(nid1) 192 193 ! Get value of the "subsurface_layers" dimension from physics start file 194 fichnom = 'startfi.nc' 195 ierr = NF_OPEN (fichnom, NF_NOWRITE,nid1) 196 IF (ierr.NE.NF_NOERR) THEN 197 write(6,*)' Pb d''ouverture du fichier'//trim(fichnom) 198 CALL ABORT 199 ENDIF 200 ierr = NF_INQ_DIMID(nid1,"subsurface_layers",varid) 201 IF (ierr .NE. NF_NOERR) THEN 202 PRINT*, "start2archive: No subsurface_layers dimension!!" 203 CALL abort 204 ENDIF 205 ierr = NF_INQ_DIMLEN(nid1,varid,nsoilmx) 206 IF (ierr .NE. NF_NOERR) THEN 207 PRINT*, "start2archive: Failed reading subsurface_layers value!!" 208 CALL abort 209 ENDIF 210 ierr = NF_CLOSE(nid1) 200 211 212 ! allocate arrays of nsoilmx size 213 allocate(tsoil(ngridmx,nsoilmx)) 214 allocate(tsoilS(ip1jmp1,nsoilmx)) 215 allocate(ithS(ip1jmp1,nsoilmx)) 216 217 c----------------------------------------------------------------------- 218 c Initialisations 219 c----------------------------------------------------------------------- 220 221 CALL defrun_new(99, .FALSE. ) 222 call iniconst 223 call inigeom 224 call inifilr 225 226 ! Initialize the physics 227 CALL iniphysiq(iim,jjm,llm, 228 & (jjm-1)*iim+2,comm_lmdz, 229 & daysec,day_ini,dtphys, 230 & rlatu,rlatv,rlonu,rlonv, 231 & aire,cu,cv,rad,g,r,cpp, 232 & 1) 201 233 202 234 fichnom = 'startfi.nc' … … 256 288 c ***************************************************************** 257 289 258 c-----------------------------------------------------------------------259 c Initialisations260 c-----------------------------------------------------------------------261 262 CALL defrun_new(99, .FALSE. )263 call iniconst264 call inigeom265 call inifilr266 290 CALL pression(ip1jmp1, ap, bp, ps, p3d) 267 291 call exner_hyb(ip1jmp1, ps, p3d, beta, pks, pk, pkf)
Note: See TracChangeset
for help on using the changeset viewer.