Changeset 1528 for trunk/LMDZ.MARS/libf
- Timestamp:
- Apr 2, 2016, 4:09:43 PM (9 years ago)
- Location:
- trunk/LMDZ.MARS/libf
- Files:
-
- 3 added
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.MARS/libf/aeronomars/inichim_newstart.F90
r1422 r1528 4 4 use tracer_mod 5 5 USE comvert_mod, ONLY: aps,bps 6 USE mod_grid_phy_lmdz, ONLY: nbp_lon, nbp_lat, nbp_lev 6 7 implicit none 7 8 … … 26 27 ! ---------- 27 28 ! 28 ! pq( iip1,jjp1,llm,nq) Advected fields, ie chemical species here29 ! pq(nbp_lon+1,nbp_lat,nbp_lev,nq) Advected fields, ie chemical species here 29 30 ! qsurf(ngrid,nq) Amount of tracer on the surface (kg/m2) 30 ! ps( iip1,jjp1) Surface pressure (Pa)31 ! ps(nbp_lon+1,nbp_lat) Surface pressure (Pa) 31 32 ! flagh2o flag for initialisation of h2o (1: yes / 0: no) 32 33 ! flagthermo flag for initialisation of thermosphere only (1: yes / 0: no) … … 34 35 !======================================================================= 35 36 36 #include "dimensions.h" 37 #include "paramet.h" 38 #include "callkeys.h" 39 #include "datafile.h" 37 include "callkeys.h" 38 include "datafile.h" 40 39 41 40 ! inputs : … … 43 42 integer,intent(in) :: ngrid ! number of atmospheric columns in the physics 44 43 integer,intent(in) :: nq ! number of tracers 45 real,intent(in) :: ps( iip1,jjp1) ! surface pressure in the gcm (Pa)44 real,intent(in) :: ps(nbp_lon+1,nbp_lat) ! surface pressure in the gcm (Pa) 46 45 integer,intent(in) :: flagh2o ! flag for h2o initialisation 47 46 integer,intent(in) :: flagthermo ! flag for thermosphere initialisation only … … 49 48 ! outputs : 50 49 51 real,intent(out) :: pq( iip1,jjp1,llm,nq) ! advected fields, ie chemical species50 real,intent(out) :: pq(nbp_lon+1,nbp_lat,nbp_lev,nq) ! advected fields, ie chemical species 52 51 real,intent(out) :: qsurf(ngrid,nq) ! surface values (kg/m2) of tracers 53 52 … … 56 55 integer :: iq, i, j, l, n, nbqchem 57 56 integer :: count, ierr, dummy 58 real :: mmean( iip1,jjp1,llm) ! mean molecular mass (g)57 real :: mmean(nbp_lon+1,nbp_lat,nbp_lev) ! mean molecular mass (g) 59 58 real :: pgcm ! pressure at each layer in the gcm (Pa) 60 59 … … 547 546 ! 3. initialization of tracers 548 547 549 do i = 1, iip1550 do j = 1, jjp1551 do l = 1, llm548 do i = 1,nbp_lon+1 549 do j = 1,nbp_lat 550 do l = 1,nbp_lev 552 551 553 552 pgcm = aps(l) + bps(l)*ps(i,j) ! gcm pressure … … 596 595 if (igcm_ch4 /= 0) then 597 596 vmr = 10.e-9 598 do i = 1, iip1599 do j = 1, jjp1600 do l = 1, llm597 do i = 1,nbp_lon+1 598 do j = 1,nbp_lat 599 do l = 1,nbp_lev 601 600 pq(i,j,l,igcm_ch4) = vmr*mmol(igcm_ch4)/mmean(i,j,l) 602 601 end do … … 623 622 end if 624 623 625 do i = 1, iip1626 do j = 1, jjp1627 do l = 1, llm624 do i = 1,nbp_lon+1 625 do j = 1,nbp_lat 626 do l = 1,nbp_lev 628 627 ! all ions to 0 629 628 pq(i,j,l,igcm_co2plus) = 0. -
trunk/LMDZ.MARS/libf/aeronomars/moldiff_red.F90
r1431 r1528 7 7 implicit none 8 8 9 !#include "dimensions.h" 10 !#include "dimphys.h" 11 !#include "comcstfi.h" 12 !#include "callkeys.h" 13 !#include "comdiurn.h" 14 !#include "chimiedata.h" 15 !#include "tracer.h" 16 !#include "conc.h" 17 #include "diffusion.h" 9 include "diffusion.h" 18 10 19 11 ! July 2014 JYC ADD BALISTIC Transport coupling to compute wup for H and H2 … … 937 929 use tracer_mod, only: nqmx 938 930 IMPLICIT NONE 939 !#include "dimensions.h"940 931 941 932 INTEGER,INTENT(IN) :: nl,nq … … 973 964 use tracer_mod, only: nqmx 974 965 IMPLICIT NONE 975 !#include "dimensions.h"976 966 977 967 INTEGER :: nl,nq,l … … 1058 1048 use tracer_mod, only: nqmx 1059 1049 IMPLICIT NONE 1060 !#include "dimensions.h"1061 1050 1062 1051 INTEGER :: nl,nq,il,l,i,iq,nlx,iz,ig … … 1400 1389 use tracer_mod, only: nqmx 1401 1390 IMPLICIT NONE 1402 !#include "dimensions.h"1403 1391 INTEGER :: nl,nq,nlx,il,nn,iP,ig,compteur 1404 1392 INTEGER,DIMENSION(1) :: indP … … 1502 1490 use tracer_mod, only: nqmx 1503 1491 IMPLICIT NONE 1504 !#include "dimensions.h"1505 1492 INTEGER :: nl,nq,nlx,il,nn,iP,ig,compteur 1506 1493 INTEGER,DIMENSION(1) :: indP -
trunk/LMDZ.MARS/libf/aeronomars/surfacearea.F
r1266 r1528 19 19 !========================================================================== 20 20 21 #include "dimensions.h" 22 #include "callkeys.h" 23 #include "chimiedata.h" 21 include "callkeys.h" 22 include "chimiedata.h" 24 23 25 24 ! input -
trunk/LMDZ.MARS/libf/phymars/albedocaps.F90
r1381 r1528 12 12 implicit none 13 13 14 #include"callkeys.h"14 include"callkeys.h" 15 15 16 16 ! arguments: … … 93 93 94 94 implicit none 95 #include"dimensions.h" 96 #include"datafile.h" 95 include"datafile.h" 97 96 98 97 ! arguments: -
trunk/LMDZ.MARS/libf/phymars/dyn1d/testphys1d.F
r1525 r1528 827 827 c*********************************************************************** 828 828 829 #include "../dyn3d/disvert.F"830 #include "../dyn3d/abort_gcm.F" -
trunk/LMDZ.MARS/libf/phymars/eofdump_mod.F90
r1524 r1528 1 1 module eofdump_mod 2 2 ! this module controls the production of data for EOFs 3 ! it won't work if run in parallel (but it's OK, we don't use it anymore...) 4 ! Mainly kept for reference. 3 5 implicit none 4 6 ! Dump profiles for EOFs every ieofs physics timesteps, … … 15 17 subroutine eofdump(ngrid,nlayer,u,v,t,rho,ps) 16 18 19 use mod_grid_phy_lmdz, only: nbp_lon, nbp_lat 17 20 implicit none 18 21 ! … … 21 24 ! Corrected small bug in sampling rate/count, EM 11/2007 22 25 ! 23 #include "dimensions.h"24 26 ! 25 27 … … 52 54 if (mod(count+1,ieofs).eq.0) then 53 55 ! write(*,*)'eofdump: dump --> ps(1)=',ps(1) 54 do i=1, iim,eofskip55 do j=1+eofskip/2, jjm+1,eofskip56 ig = 1+ (j-2)* iim+i56 do i=1,nbp_lon,eofskip 57 do j=1+eofskip/2,nbp_lat,eofskip 58 ig = 1+ (j-2)*nbp_lon +i 57 59 #ifdef NC_DOUBLE 58 60 write(uedata) (real(u(ig,l)),l=1,nlayer) … … 82 84 use time_phylmdz_mod, only: daysec, dtphys 83 85 USE comvert_mod, ONLY: aps,bps 86 use mod_grid_phy_lmdz, only: nbp_lon, nbp_lat 84 87 implicit none 85 88 ! 86 89 ! Initialise dumping of profiles for EOF calculations 87 90 ! 88 #include "dimensions.h"89 91 90 92 integer,intent(in) :: ngrid ! total number of physics grid points … … 96 98 97 99 if (firstcall) then 98 npgrid=ngrid+2*( iim-1)100 npgrid=ngrid+2*(nbp_lon-1) 99 101 firstcall=.false. 100 102 endif … … 111 113 open(uehead,file='profiles.hdr',form='formatted') 112 114 write(uehead,*) 0.E+0,0,0,ieofs,1,0 113 write(uehead,*) iim,npgrid/iim,npgrid,nlayer115 write(uehead,*) nbp_lon,npgrid/nbp_lon,npgrid,nlayer 114 116 115 do i=1, iim,eofskip116 do j=1+eofskip/2, jjm+1,eofskip117 ig = 1+ (j-2)* iim+i117 do i=1,nbp_lon,eofskip 118 do j=1+eofskip/2,nbp_lat,eofskip 119 ig = 1+ (j-2)*nbp_lon +i 118 120 if(j.eq.1) stop 'Problem in ineofdump.F' 119 if(j.eq. jjm+1) stop 'Problem in ineofdump.F'121 if(j.eq.nbp_lat) stop 'Problem in ineofdump.F' 120 122 #ifdef NC_DOUBLE 121 123 write(uehead,*) real(long(ig)*180./pi),real(lati(ig)*180./pi) -
trunk/LMDZ.MARS/libf/phymars/getslopes.F90
r1266 r1528 3 3 use comgeomfi_h, only: long, lati 4 4 use slope_mod, only: theta_sl, psi_sl 5 USE comcstfi_h 5 use comcstfi_h, only: g, rad, pi 6 use mod_phys_lmdz_para, only: is_parallel 7 use mod_grid_phy_lmdz, only: nbp_lon, nbp_lat 6 8 implicit none 7 9 8 #include "dimensions.h"9 10 10 11 ! This routine computes slope inclination and orientation for the GCM (callslope=.true. in callphys.def) … … 16 17 integer,intent(in) :: ngrid ! nnumber of atmospheric columns 17 18 real,intent(in) :: geopot(ngrid) ! geopotential on phy grid 18 real topogrid( iim,jjm+1) ! topography on lat/lon grid with poles and only one -180/180 point19 real latigrid( iim,jjm+1),longgrid(iim,jjm+1) ! meshgrid of latitude and longitude values (radians)19 real topogrid(nbp_lon,nbp_lat) ! topography on lat/lon grid with poles and only one -180/180 point 20 real latigrid(nbp_lon,nbp_lat),longgrid(nbp_lon,nbp_lat) ! meshgrid of latitude and longitude values (radians) 20 21 real theta_val ! slope inclination 21 22 real psi_val ! slope orientation 22 real gradx( iim,jjm+1) ! x: latitude-wise topography gradient, increasing northward23 real grady( iim,jjm+1) ! y: longitude-wise topography gradient, increasing westward23 real gradx(nbp_lon,nbp_lat) ! x: latitude-wise topography gradient, increasing northward 24 real grady(nbp_lon,nbp_lat) ! y: longitude-wise topography gradient, increasing westward 24 25 integer i,j,ig0 25 26 integer id2,idm1 ! a trick to compile testphys1d with debug option 26 27 28 if (is_parallel) then 29 ! This routine only works in serial mode so stop now. 30 write(*,*) "getslopes Error: this routine is not designed to run in parallel" 31 stop 32 endif 33 27 34 id2 = 2 28 idm1 = iim-135 idm1 = nbp_lon-1 29 36 30 37 ! rearrange topography on a 2d array 31 do j=2, jjm32 ig0= 1+(j-2)* iim33 do i=1, iim38 do j=2,nbp_lat-1 39 ig0= 1+(j-2)*nbp_lon 40 do i=1,nbp_lon 34 41 topogrid(i,j)=geopot(ig0+i)/g 35 42 latigrid(i,j)=lati(ig0+i) … … 41 48 latigrid(:,1) = lati(1) 42 49 longgrid(:,1) = long(1) 43 topogrid(:, jjm+1) = geopot(ngrid)/g44 latigrid(:, jjm+1) = lati(ngrid)45 longgrid(:, jjm+1) = long(ngrid)50 topogrid(:,nbp_lat) = geopot(ngrid)/g 51 latigrid(:,nbp_lat) = lati(ngrid) 52 longgrid(:,nbp_lat) = long(ngrid) 46 53 47 54 … … 49 56 ! compute topography gradient 50 57 ! topogrid and rad are both in meters 51 do j=2, jjm52 do i=1, iim58 do j=2,nbp_lat-1 59 do i=1,nbp_lon 53 60 gradx(i,j) = (topogrid(i,j+1) - topogrid(i,j-1)) / (latigrid(i,j+1)-latigrid(i,j-1)) 54 61 gradx(i,j) = gradx(i,j) / rad 55 62 enddo 56 grady(1,j) = (topogrid(id2,j) - topogrid( iim,j)) / (2*pi+longgrid(id2,j)-longgrid(iim,j))63 grady(1,j) = (topogrid(id2,j) - topogrid(nbp_lon,j)) / (2*pi+longgrid(id2,j)-longgrid(nbp_lon,j)) 57 64 grady(1,j) = grady(1,j) / rad 58 grady( iim,j) = (topogrid(1,j) - topogrid(idm1,j)) / (2*pi+longgrid(1,j)-longgrid(idm1,j))59 grady( iim,j) = grady(iim,j) / rad60 do i=2, iim-165 grady(nbp_lon,j) = (topogrid(1,j) - topogrid(idm1,j)) / (2*pi+longgrid(1,j)-longgrid(idm1,j)) 66 grady(nbp_lon,j) = grady(nbp_lon,j) / rad 67 do i=2,nbp_lon-1 61 68 grady(i,j) = (topogrid(i+1,j) - topogrid(i-1,j)) / (longgrid(i+1,j)-longgrid(i-1,j)) 62 69 grady(i,j) = grady(i,j) / rad … … 66 73 gradx(:,1) = 0. 67 74 grady(:,1) = 0. 68 gradx(:, jjm+1) = 0.69 grady(:, jjm+1) = 0.75 gradx(:,nbp_lat) = 0. 76 grady(:,nbp_lat) = 0. 70 77 71 78 … … 74 81 theta_sl(:) = 0. 75 82 psi_sl(:) = 0. 76 do j=2, jjm77 do i=1, iim83 do j=2,nbp_lat-1 84 do i=1,nbp_lon 78 85 79 ig0= 1+(j-2)* iim86 ig0= 1+(j-2)*nbp_lon 80 87 81 88 theta_val=atan(sqrt( (gradx(i,j))**2 + (grady(i,j))**2 )) -
trunk/LMDZ.MARS/libf/phymars/inistats.F
r1524 r1528 5 5 USE comcstfi_h, ONLY: pi 6 6 USE time_phylmdz_mod, ONLY: daysec,dtphys 7 USE regular_lonlat_mod, ONLY: lon_reg, lat_reg 8 USE mod_grid_phy_lmdz, ONLY: nbp_lon, nbp_lat, nbp_lev 7 9 implicit none 8 10 9 include "dimensions.h"10 include "paramet.h"11 include "comgeom.h"12 11 include "statto.h" 13 12 include "netcdf.inc" … … 16 15 integer :: nid 17 16 integer :: l,nsteppd 18 real, dimension(llm) :: sig_s 17 real, dimension(nbp_lev) :: sig_s 18 real :: lon_reg_ext(nbp_lon+1) ! extended longitudes 19 19 integer :: idim_lat,idim_lon,idim_llm,idim_llmp1,idim_time 20 20 real, dimension(istime) :: lt … … 40 40 write (*,*) 41 41 42 do l= 1, llm42 do l= 1, nbp_lev 43 43 sig_s(l)=((ap(l)+ap(l+1))/preff+bp(l)+bp(l+1))/2. 44 44 pseudoalt(l)=-10.*log(presnivs(l)/preff) 45 45 enddo 46 47 lon_reg_ext(1:nbp_lon)=lon_reg(1:nbp_lon) 48 !add extra redundant point (180 degrees, since lon_reg starts at -180 49 lon_reg_ext(nbp_lon+1)=-lon_reg_ext(1) 46 50 47 51 if (is_master) then … … 54 58 endif 55 59 56 ierr = NF_DEF_DIM (nid, "latitude", jjp1, idim_lat)57 ierr = NF_DEF_DIM (nid, "longitude", iip1, idim_lon)58 ierr = NF_DEF_DIM (nid, "altitude", llm, idim_llm)59 ierr = NF_DEF_DIM (nid, "llmp1", llm+1, idim_llmp1)60 ierr = NF_DEF_DIM (nid, "latitude", nbp_lat, idim_lat) 61 ierr = NF_DEF_DIM (nid, "longitude", nbp_lon+1, idim_lon) 62 ierr = NF_DEF_DIM (nid, "altitude", nbp_lev, idim_llm) 63 ierr = NF_DEF_DIM (nid, "llmp1", nbp_lev+1, idim_llmp1) 60 64 ierr = NF_DEF_DIM (nid, "Time", NF_UNLIMITED, idim_time) 61 65 … … 69 73 & "degrees_north",1,idim_lat,nvarid,ierr) 70 74 #ifdef NC_DOUBLE 71 ierr = NF_PUT_VAR_DOUBLE (nid,nvarid, rlatu/pi*180)75 ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,lat_reg/pi*180) 72 76 #else 73 ierr = NF_PUT_VAR_REAL (nid,nvarid, rlatu/pi*180)77 ierr = NF_PUT_VAR_REAL (nid,nvarid,lat_reg/pi*180) 74 78 #endif 75 79 call def_var_stats(nid,"longitude","East longitude", 76 80 & "degrees_east",1,idim_lon,nvarid,ierr) 77 81 #ifdef NC_DOUBLE 78 ierr = NF_PUT_VAR_DOUBLE (nid,nvarid, rlonv/pi*180)82 ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,lon_reg_ext/pi*180) 79 83 #else 80 ierr = NF_PUT_VAR_REAL (nid,nvarid, rlonv/pi*180)84 ierr = NF_PUT_VAR_REAL (nid,nvarid,lon_reg_ext/pi*180) 81 85 #endif 82 86 -
trunk/LMDZ.MARS/libf/phymars/iniwrite.F
r1524 r1528 1 SUBROUTINE iniwrite(nid,idayref,phis )1 SUBROUTINE iniwrite(nid,idayref,phis,area) 2 2 3 3 use comsoil_h, only: mlayer, nsoilmx … … 8 8 USE time_phylmdz_mod, ONLY: hour_ini, daysec, dtphys 9 9 USE ener_mod, ONLY: etot0,ptot0,ztot0,stot0,ang0 10 USE regular_lonlat_mod, ONLY: lon_reg, lat_reg 11 USE mod_grid_phy_lmdz, ONLY: nbp_lon, nbp_lat, nbp_lev 10 12 IMPLICIT NONE 11 13 … … 26 28 c ------------- 27 29 28 #include "dimensions.h" 29 #include "paramet.h" 30 #include "comgeom.h" 31 #include "netcdf.inc" 30 include "netcdf.inc" 32 31 33 32 c Arguments: … … 36 35 integer,intent(in) :: nid ! NetCDF file ID 37 36 INTEGER*4,intent(in) :: idayref ! date (initial date for this run) 38 real,intent(in) :: phis(ip1jmp1) ! surface geopotential 37 real,intent(in) :: phis(nbp_lon+1,nbp_lat) ! surface geopotential 38 real,intent(in) :: area(nbp_lon+1,nbp_lat) ! mesh area (m2) 39 39 40 40 c Local: … … 44 44 REAL tab_cntrl(length) ! run parameters are stored in this array 45 45 INTEGER ierr 46 47 integer :: nvarid,idim_index,idim_rlonu,idim_rlonv 48 integer :: idim_rlatu,idim_rlatv,idim_llmp1,idim_llm 46 REAl :: lon_reg_ext(nbp_lon+1) ! extended longitudes 47 48 integer :: nvarid,idim_index,idim_rlonv 49 integer :: idim_rlatu,idim_llmp1,idim_llm 49 50 integer :: idim_nsoilmx ! "subsurface_layers" dimension ID # 50 51 integer, dimension(2) :: id … … 54 55 tab_cntrl(l)=0. 55 56 ENDDO 56 tab_cntrl(1) = real( iim)57 tab_cntrl(2) = real( jjm)58 tab_cntrl(3) = real( llm)57 tab_cntrl(1) = real(nbp_lon) 58 tab_cntrl(2) = real(nbp_lat-1) 59 tab_cntrl(3) = real(nbp_lev) 59 60 tab_cntrl(4) = real(idayref) 60 61 tab_cntrl(5) = rad … … 101 102 102 103 ierr = NF_DEF_DIM (nid, "index", length, idim_index) 103 ierr = NF_DEF_DIM (nid, "rlonu", iip1, idim_rlonu)104 ierr = NF_DEF_DIM (nid, "latitude", jjp1, idim_rlatu)105 ierr = NF_DEF_DIM (nid, "longitude", iip1, idim_rlonv)106 ierr = NF_DEF_DIM (nid, "rlatv", jjm, idim_rlatv)107 ierr = NF_DEF_DIM (nid, "interlayer", ( llm+1), idim_llmp1)108 ierr = NF_DEF_DIM (nid, "altitude", llm, idim_llm)104 ! ierr = NF_DEF_DIM (nid, "rlonu", iip1, idim_rlonu) 105 ierr = NF_DEF_DIM (nid, "latitude", nbp_lat, idim_rlatu) 106 ierr = NF_DEF_DIM (nid, "longitude", nbp_lon+1, idim_rlonv) 107 ! ierr = NF_DEF_DIM (nid, "rlatv", jjm, idim_rlatv) 108 ierr = NF_DEF_DIM (nid, "interlayer", (nbp_lev+1), idim_llmp1) 109 ierr = NF_DEF_DIM (nid, "altitude", nbp_lev, idim_llm) 109 110 ierr = NF_DEF_DIM (nid,"subsurface_layers",nsoilmx,idim_nsoilmx) 110 111 c … … 131 132 c -------------------------- 132 133 c longitudes and latitudes 133 ierr = NF_REDEF (nid) 134 #ifdef NC_DOUBLE 135 ierr = NF_DEF_VAR (nid, "rlonu", NF_DOUBLE, 1, idim_rlonu,nvarid) 136 #else 137 ierr = NF_DEF_VAR (nid, "rlonu", NF_FLOAT, 1, idim_rlonu,nvarid) 138 #endif 139 ierr = NF_PUT_ATT_TEXT (nid,nvarid,"title", 21, 140 . "Longitudes at u nodes") 141 ierr = NF_ENDDEF(nid) 142 #ifdef NC_DOUBLE 143 ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,rlonu/pi*180) 144 #else 145 ierr = NF_PUT_VAR_REAL (nid,nvarid,rlonu/pi*180) 146 #endif 134 ! 135 ! ierr = NF_REDEF (nid) 136 !#ifdef NC_DOUBLE 137 ! ierr = NF_DEF_VAR (nid, "rlonu", NF_DOUBLE, 1, idim_rlonu,nvarid) 138 !#else 139 ! ierr = NF_DEF_VAR (nid, "rlonu", NF_FLOAT, 1, idim_rlonu,nvarid) 140 !#endif 141 ! ierr = NF_PUT_ATT_TEXT (nid,nvarid,"title", 21, 142 ! . "Longitudes at u nodes") 143 ! ierr = NF_ENDDEF(nid) 144 !#ifdef NC_DOUBLE 145 ! ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,rlonu/pi*180) 146 !#else 147 ! ierr = NF_PUT_VAR_REAL (nid,nvarid,rlonu/pi*180) 148 !#endif 147 149 c 148 150 c -------------------------- … … 158 160 ierr = NF_ENDDEF(nid) 159 161 #ifdef NC_DOUBLE 160 ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,rlatu/pi*180) 161 #else 162 ierr = NF_PUT_VAR_REAL (nid,nvarid,rlatu/pi*180) 163 #endif 164 c 165 c -------------------------- 162 ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,lat_reg/pi*180) 163 #else 164 ierr = NF_PUT_VAR_REAL (nid,nvarid,lat_reg/pi*180) 165 #endif 166 c 167 c -------------------------- 168 lon_reg_ext(1:nbp_lon)=lon_reg(1:nbp_lon) 169 !add extra redundant point (180 degrees, since lon_reg starts at -180 170 lon_reg_ext(nbp_lon+1)=-lon_reg_ext(1) 171 166 172 ierr = NF_REDEF (nid) 167 173 #ifdef NC_DOUBLE … … 175 181 ierr = NF_ENDDEF(nid) 176 182 #ifdef NC_DOUBLE 177 ierr = NF_PUT_VAR_DOUBLE (nid,nvarid, rlonv/pi*180)178 #else 179 ierr = NF_PUT_VAR_REAL (nid,nvarid, rlonv/pi*180)183 ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,lon_reg_ext/pi*180) 184 #else 185 ierr = NF_PUT_VAR_REAL (nid,nvarid,lon_reg_ext/pi*180) 180 186 #endif 181 187 c … … 201 207 c 202 208 c -------------------------- 203 ierr = NF_REDEF (nid)204 #ifdef NC_DOUBLE205 ierr = NF_DEF_VAR (nid, "rlatv", NF_DOUBLE, 1, idim_rlatv,nvarid)206 #else207 ierr = NF_DEF_VAR (nid, "rlatv", NF_FLOAT, 1, idim_rlatv,nvarid)208 #endif209 ierr = NF_PUT_ATT_TEXT (nid,nvarid,"title", 20,210 . "Latitudes at v nodes")211 ierr = NF_ENDDEF(nid)212 #ifdef NC_DOUBLE213 ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,rlatv/pi*180)214 #else215 ierr = NF_PUT_VAR_REAL (nid,nvarid,rlatv/pi*180)216 #endif209 ! ierr = NF_REDEF (nid) 210 !#ifdef NC_DOUBLE 211 ! ierr = NF_DEF_VAR (nid, "rlatv", NF_DOUBLE, 1, idim_rlatv,nvarid) 212 !#else 213 ! ierr = NF_DEF_VAR (nid, "rlatv", NF_FLOAT, 1, idim_rlatv,nvarid) 214 !#endif 215 ! ierr = NF_PUT_ATT_TEXT (nid,nvarid,"title", 20, 216 ! . "Latitudes at v nodes") 217 ! ierr = NF_ENDDEF(nid) 218 !#ifdef NC_DOUBLE 219 ! ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,rlatv/pi*180) 220 !#else 221 ! ierr = NF_PUT_VAR_REAL (nid,nvarid,rlatv/pi*180) 222 !#endif 217 223 c 218 224 c -------------------------- … … 276 282 c Mesh area and conversion coefficients cov. <-> contra. <--> natural 277 283 278 id(1)=idim_rlonu279 id(2)=idim_rlatu280 c 281 ierr = NF_REDEF (nid)282 #ifdef NC_DOUBLE283 ierr = NF_DEF_VAR (nid, "cu", NF_DOUBLE, 2, id,nvarid)284 #else285 ierr = NF_DEF_VAR (nid, "cu", NF_FLOAT, 2, id,nvarid)286 #endif287 ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 40,288 . "Conversion coefficients cov <--> natural")289 ierr = NF_ENDDEF(nid)290 #ifdef NC_DOUBLE291 ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,cu)292 #else293 ierr = NF_PUT_VAR_REAL (nid,nvarid,cu)294 #endif295 c 296 id(1)=idim_rlonv297 id(2)=idim_rlatv298 c 299 c -------------------------- 300 ierr = NF_REDEF (nid)301 #ifdef NC_DOUBLE302 ierr = NF_DEF_VAR (nid, "cv", NF_DOUBLE, 2, id,nvarid)303 #else304 ierr = NF_DEF_VAR (nid, "cv", NF_FLOAT, 2, id,nvarid)305 #endif306 ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 40,307 . "Conversion coefficients cov <--> natural")308 ierr = NF_ENDDEF(nid)309 #ifdef NC_DOUBLE310 ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,cv)311 #else312 ierr = NF_PUT_VAR_REAL (nid,nvarid,cv)313 #endif284 ! id(1)=idim_rlonu 285 ! id(2)=idim_rlatu 286 c 287 ! ierr = NF_REDEF (nid) 288 !#ifdef NC_DOUBLE 289 ! ierr = NF_DEF_VAR (nid, "cu", NF_DOUBLE, 2, id,nvarid) 290 !#else 291 ! ierr = NF_DEF_VAR (nid, "cu", NF_FLOAT, 2, id,nvarid) 292 !#endif 293 ! ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 40, 294 ! . "Conversion coefficients cov <--> natural") 295 ! ierr = NF_ENDDEF(nid) 296 !#ifdef NC_DOUBLE 297 ! ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,cu) 298 !#else 299 ! ierr = NF_PUT_VAR_REAL (nid,nvarid,cu) 300 !#endif 301 c 302 ! id(1)=idim_rlonv 303 ! id(2)=idim_rlatv 304 c 305 c -------------------------- 306 ! ierr = NF_REDEF (nid) 307 !#ifdef NC_DOUBLE 308 ! ierr = NF_DEF_VAR (nid, "cv", NF_DOUBLE, 2, id,nvarid) 309 !#else 310 ! ierr = NF_DEF_VAR (nid, "cv", NF_FLOAT, 2, id,nvarid) 311 !#endif 312 ! ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 40, 313 ! . "Conversion coefficients cov <--> natural") 314 ! ierr = NF_ENDDEF(nid) 315 !#ifdef NC_DOUBLE 316 ! ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,cv) 317 !#else 318 ! ierr = NF_PUT_VAR_REAL (nid,nvarid,cv) 319 !#endif 314 320 c 315 321 id(1)=idim_rlonv … … 327 333 ierr = NF_ENDDEF(nid) 328 334 #ifdef NC_DOUBLE 329 ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,a ire)330 #else 331 ierr = NF_PUT_VAR_REAL (nid,nvarid,a ire)335 ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,area) 336 #else 337 ierr = NF_PUT_VAR_REAL (nid,nvarid,area) 332 338 #endif 333 339 c … … 352 358 c 353 359 354 write(*,*)'iniwrite: iim,jjm,llm,idayref',iim,jjm,llm,idayref 360 write(*,*)'iniwrite: nbp_lon,nbp_lat,nbp_lev,idayref', 361 & nbp_lon,nbp_lat,nbp_lev,idayref 355 362 write(*,*)'iniwrite: rad,omeg,g,mugaz,rcp', 356 srad,omeg,g,mugaz,rcp363 & rad,omeg,g,mugaz,rcp 357 364 write(*,*)'iniwrite: daysec,dtphys',daysec,dtphys 358 365 -
trunk/LMDZ.MARS/libf/phymars/iniwritesoil.F90
r1266 r1528 1 subroutine iniwritesoil(nid,ngrid )1 subroutine iniwritesoil(nid,ngrid,inertia,area) 2 2 3 3 ! initialization routine for 'writediagoil'. Here we create/define … … 5 5 ! (time-independent) parameters. 6 6 7 use comsoil_h, only: mlayer, inertiedat, nsoilmx 8 USE comcstfi_h 7 use comsoil_h, only: mlayer, nsoilmx 8 USE comcstfi_h, only: pi 9 USE regular_lonlat_mod, ONLY: lon_reg, lat_reg 10 use mod_grid_phy_lmdz, ONLY: nbp_lon, nbp_lat 9 11 10 12 implicit none 11 13 12 #include"dimensions.h" 13 #include"paramet.h" 14 #include"comgeom.h" 15 #include"netcdf.inc" 14 include"netcdf.inc" 16 15 17 16 ! Arguments: 18 17 integer,intent(in) :: ngrid 19 18 integer,intent(in) :: nid ! NetCDF output file ID 19 real,intent(in) :: inertia(nbp_lon+1,nbp_lat,nsoilmx) 20 real,intent(in) :: area(nbp_lon+1,nbp_lat) ! mesh area (m2) 20 21 21 22 ! Local variables: … … 30 31 integer,dimension(3) :: dimids ! to store IDs of dimensions of a variable 31 32 character(len=60) :: text ! to store some text 32 real,dimension( iip1,jjp1,nsoilmx) :: data3 ! to store 3D data33 real,dimension(nbp_lon+1,nbp_lat,nsoilmx) :: data3 ! to store 3D data 33 34 integer :: i,j,l,ig0 35 real :: lon_reg_ext(nbp_lon+1) ! extended longitudes 34 36 35 37 ! 1. Define the dimensions … … 38 40 39 41 ! Define the dimensions 40 ierr=NF_DEF_DIM(nid,"longitude",iip1,idim_rlonv) 41 ! iip1 known from paramet.h 42 ierr=NF_DEF_DIM(nid,"longitude",nbp_lon+1,idim_rlonv) 42 43 if (ierr.ne.NF_NOERR) then 43 44 write(*,*)"iniwritesoil: Error, could not define longitude dimension" 44 45 endif 45 ierr=NF_DEF_DIM(nid,"latitude",jjp1,idim_rlatu) 46 ! jjp1 known from paramet.h 46 ierr=NF_DEF_DIM(nid,"latitude",nbp_lat,idim_rlatu) 47 47 if (ierr.ne.NF_NOERR) then 48 48 write(*,*)"iniwritesoil: Error, could not define latitude dimension" … … 81 81 ierr=NF_PUT_ATT_TEXT(nid,varid,"units",len_trim(text),text) 82 82 83 lon_reg_ext(1:nbp_lon)=lon_reg(1:nbp_lon) 84 !add extra redundant point (180 degrees, since lon_reg starts at -180 85 lon_reg_ext(nbp_lon+1)=-lon_reg_ext(1) 86 83 87 ! Write longitude to file 84 88 ierr=NF_ENDDEF(nid) ! switch out of NetCDF define mode 85 89 ! Write 86 90 #ifdef NC_DOUBLE 87 ierr=NF_PUT_VAR_DOUBLE(nid,varid, rlonv*(180./pi))88 #else 89 ierr=NF_PUT_VAR_REAL(nid,varid, rlonv*(180./pi))91 ierr=NF_PUT_VAR_DOUBLE(nid,varid,lon_reg_ext*(180./pi)) 92 #else 93 ierr=NF_PUT_VAR_REAL(nid,varid,lon_reg_ext*(180./pi)) 90 94 #endif 91 95 ! Note: rlonv is known from comgeom.h and pi from comcstfi.h … … 117 121 ! Write 118 122 #ifdef NC_DOUBLE 119 ierr=NF_PUT_VAR_DOUBLE(nid,varid,rlatu*(180./pi)) 120 #else 121 ierr=NF_PUT_VAR_REAL(nid,varid,rlatu*(180./pi)) 122 #endif 123 ! Note: rlatu is known from comgeom.h and pi from comcstfi.h 123 ierr=NF_PUT_VAR_DOUBLE(nid,varid,lat_reg*(180./pi)) 124 #else 125 ierr=NF_PUT_VAR_REAL(nid,varid,lat_reg*(180./pi)) 126 #endif 124 127 if (ierr.ne.NF_NOERR) then 125 128 write(*,*)"iniwritesoil: Error, could not write longitude variable" … … 209 212 ! Write 210 213 #ifdef NC_DOUBLE 211 ierr=NF_PUT_VAR_DOUBLE(nid,varid,aire) 212 #else 213 ierr=NF_PUT_VAR_REAL(nid,varid,aire) 214 #endif 215 ! Note: aire is known from comgeom.h 214 ierr=NF_PUT_VAR_DOUBLE(nid,varid,area) 215 #else 216 ierr=NF_PUT_VAR_REAL(nid,varid,area) 217 #endif 216 218 if (ierr.ne.NF_NOERR) then 217 219 write(*,*)"iniwritesoil: Error, could not write area variable" … … 240 242 ierr=NF_PUT_ATT_TEXT(nid,varid,"units",len_trim(text),text) 241 243 242 ! Recast data along 'dynamics' grid243 ! Note: inertiedat is known from comsoil_h244 245 do l=1,nsoilmx246 ! handle the poles247 do i=1,iip1248 data3(i,1,l)=inertiedat(1,l)249 data3(i,jjp1,l)=inertiedat(ngrid,l)250 enddo251 ! rest of the grid252 do j=2,jjm253 ig0=1+(j-2)*iim254 do i=1,iim255 data3(i,j,l)=inertiedat(ig0+i,l)256 enddo257 data3(iip1,j,l)=data3(1,j,l) ! extra (modulo) longitude258 enddo259 enddo ! of do l=1,nsoilmx260 261 244 ! Write data2 to file 262 245 ierr=NF_ENDDEF(nid) ! switch out of NetCDF define mode 263 246 ! Write 264 247 #ifdef NC_DOUBLE 265 ierr=NF_PUT_VAR_DOUBLE(nid,varid, data3)266 #else 267 ierr=NF_PUT_VAR_REAL(nid,varid, data3)248 ierr=NF_PUT_VAR_DOUBLE(nid,varid,inertia) 249 #else 250 ierr=NF_PUT_VAR_REAL(nid,varid,inertia) 268 251 #endif 269 252 if (ierr.ne.NF_NOERR) then -
trunk/LMDZ.MARS/libf/phymars/mkstat.F90
r1130 r1528 11 11 12 12 use mod_phys_lmdz_para, only : is_master 13 use mod_grid_phy_lmdz, only : nbp_lon, nbp_lat, nbp_lev 13 14 14 15 implicit none 15 16 16 #include "dimensions.h" 17 #include "statto.h" 18 #include "netcdf.inc" 17 include "statto.h" 18 include "netcdf.inc" 19 19 20 integer,parameter :: iip1=iim+121 integer,parameter :: jjp1=jjm+122 20 integer :: ierr,nid,nbvar,i,ndims,lt,nvarid 23 21 integer, dimension(4) :: id,varid,start,size 24 22 integer, dimension(5) :: dimids 25 23 character (len=50) :: name,nameout,units,title 26 real, dimension( iip1,jjp1,llm) :: sum3d,square3d,mean3d,sd3d27 real, dimension( iip1,jjp1) :: sum2d,square2d,mean2d,sd2d24 real, dimension(nbp_lon+1,nbp_lat,nbp_lev) :: sum3d,square3d,mean3d,sd3d 25 real, dimension(nbp_lon+1,nbp_lat) :: sum2d,square2d,mean2d,sd2d 28 26 real, dimension(istime) :: time 29 real, dimension( jjp1) :: lat30 real, dimension( iip1) :: lon31 real, dimension( llm) :: alt27 real, dimension(nbp_lat) :: lat 28 real, dimension(nbp_lon+1) :: lon 29 real, dimension(nbp_lev) :: alt 32 30 logical :: lcopy=.true. 33 31 !integer :: latid,lonid,altid,timeid … … 107 105 ! dimout(4)=timeid 108 106 109 size=(/ iip1,jjp1,llm,1/)107 size=(/nbp_lon+1,nbp_lat,nbp_lev,1/) 110 108 do lt=1,istime 111 109 start=(/1,1,1,lt/) … … 137 135 ! dimout(3)=timeid 138 136 139 size=(/ iip1,jjp1,1,0/)137 size=(/nbp_lon+1,nbp_lat,1,0/) 140 138 do lt=1,istime 141 139 start=(/1,1,lt,0/) -
trunk/LMDZ.MARS/libf/phymars/newcondens.F
r1438 r1528 61 61 c ------------------ 62 62 c 63 #include "dimensions.h" 64 #include "callkeys.h" 63 include "callkeys.h" 65 64 66 65 c----------------------------------------------------------------------- -
trunk/LMDZ.MARS/libf/phymars/physiq.F
r1525 r1528 148 148 c ------------------ 149 149 150 #include "dimensions.h"151 150 #include "callkeys.h" 152 151 #include "comg1d.h" -
trunk/LMDZ.MARS/libf/phymars/surfini.F
r1381 r1528 13 13 #endif 14 14 USE comcstfi_h 15 use mod_grid_phy_lmdz, only: nbp_lon, nbp_lat 15 16 IMPLICIT NONE 16 17 c======================================================================= … … 22 23 c Declarations: 23 24 c ------------- 24 #include "dimensions.h"25 25 #include "callkeys.h" 26 26 #include "datafile.h" … … 55 55 INTEGER nb_ice(klon_glo,2) ! number of counts | detected ice for GCM grid 56 56 #endif 57 INTEGER latice( jjm,2),lonice (iim,2) ! number of counts | detected ice along lat & lon axis57 INTEGER latice(nbp_lat-1,2),lonice (nbp_lon,2) ! number of counts | detected ice along lat & lon axis 58 58 59 59 REAL step,count,ratiolat … … 228 228 zelon = i - 180. 229 229 zelat = 90. - j 230 if ((abs(lati_glo(ig)*180./pi-zelat).le.90./real(jjm)) .and. 231 & (abs(long_glo(ig)*180./pi-zelon).le.180./real(iim))) then 230 if ((abs(lati_glo(ig)*180./pi-zelat).le. 231 & 90./real(nbp_lat-1)) .and. 232 & (abs(long_glo(ig)*180./pi-zelon).le. 233 & 180./real(nbp_lon))) then 232 234 ! count all points in that GCM grid point 233 235 nb_ice(ig,1) = nb_ice(ig,1) + 1 … … 240 242 241 243 ! projection of nb_ice on GCM lat and lon axes 242 latice(1+(ig-2)/ iim,:) =243 & latice(1+(ig-2)/ iim,:) + nb_ice(ig,:)244 lonice(1+mod(ig-2, iim),:) =245 & lonice(1+mod(ig-2, iim),:) + nb_ice(ig,:) ! lonice is USELESS ...244 latice(1+(ig-2)/nbp_lon,:) = 245 & latice(1+(ig-2)/nbp_lon,:) + nb_ice(ig,:) 246 lonice(1+mod(ig-2,nbp_lon),:) = 247 & lonice(1+mod(ig-2,nbp_lon),:) + nb_ice(ig,:) ! lonice is USELESS ... 246 248 247 249 enddo ! of do ig=2,klon_glo-1 … … 253 255 latice(1,:) = nb_ice(1,:) 254 256 lonice(1,:) = nb_ice(1,:) 255 latice( jjm,:) = nb_ice(ngrid,:)256 lonice( iim,:) = nb_ice(ngrid,:)257 latice(nbp_lat-1,:) = nb_ice(ngrid,:) 258 lonice(nbp_lon,:) = nb_ice(ngrid,:) 257 259 258 260 … … 271 273 272 274 ! loop over GCM latitudes. CONSIDER ONLY NORTHERN HEMISPHERE 273 do i=1, jjm/2275 do i=1,(nbp_lat-1)/2 274 276 step = 1. ! threshold to add ice cap 275 277 count = 0. ! number of ice GCM caps at this latitude … … 280 282 ! put ice caps while there is not enough ice, 281 283 ! as long as the threshold is above 20% 282 do while ( (count .le. ratiolat*iim ) .and. (step .ge.0.2))284 do while ((count.le.ratiolat*nbp_lon).and.(step.ge.0.2)) 283 285 count = 0. 284 286 ! loop over GCM longitudes 285 do j=1, iim287 do j=1,nbp_lon 286 288 ! if the detected ice ratio in the GCM grid point 287 289 ! is more than 'step', then add ice 288 if (real(nb_ice((i-1)* iim+1+j,2))289 & / real(nb_ice((i-1)* iim+1+j,1)) .ge. step) then290 watercaptag_glo((i-1)* iim+1+j) = .true.290 if (real(nb_ice((i-1)*nbp_lon+1+j,2)) 291 & / real(nb_ice((i-1)*nbp_lon+1+j,1)) .ge. step) then 292 watercaptag_glo((i-1)*nbp_lon+1+j) = .true. 291 293 count = count + 1 292 294 endif 293 enddo ! of do j=1, iim294 !print*, 'step',step,count,ratiolat* iim295 enddo ! of do j=1,nbp_lon 296 !print*, 'step',step,count,ratiolat*nbp_lon 295 297 step = step - 0.01 296 298 enddo ! of do while 297 !print*, 'step',step,count,ratiolat* iim299 !print*, 'step',step,count,ratiolat*nbp_lon 298 300 299 301 enddo ! of do i=1,jjm/2 … … 304 306 print*,'Surfini: predefined ice caps' 305 307 306 if (( iim .eq. 32) .and. (jjm .eq.24)) then ! 32x24308 if ((nbp_lon.eq.32).and.((nbp_lat-1).eq.24)) then ! 32x24 307 309 308 310 print*,'water ice caps distribution for 32x24 resolution' … … 317 319 !--------------------- OUTLIERS ---------------------------- 318 320 319 else if (( iim .eq. 64) .and. (jjm .eq.48)) then ! 64x48321 else if ((nbp_lon.eq.64).and.((nbp_lat-1).eq.48)) then ! 64x48 320 322 321 323 print*,'water ice caps distribution for 64x48 resolution' … … 355 357 356 358 print*,'No predefined ice location for this resolution :', 357 & iim,jjm359 & nbp_lon,nbp_lat-1 358 360 print*,'Please change icelocationmode in surfini.F' 359 361 print*,'Or add some new definitions ...' -
trunk/LMDZ.MARS/libf/phymars/writediagfi.F
r1525 r1528 40 40 !================================================================= 41 41 use surfdat_h, only: phisfi 42 use comgeomphy, only: airephy 42 43 use time_phylmdz_mod, only: ecritphy, day_step, iphysiq, day_ini 43 44 USE mod_phys_lmdz_para, only : is_parallel, is_mpi_root, 44 45 & is_master, gather 45 USE mod_grid_phy_lmdz, only : klon_glo, Grid1Dto2D_glo 46 USE mod_grid_phy_lmdz, only : klon_glo, Grid1Dto2D_glo, 47 & nbp_lon, nbp_lat, nbp_lev 46 48 implicit none 47 49 48 50 ! Commons 49 #include "dimensions.h" 50 #include "paramet.h" 51 #include "comgeom.h" 52 #include "netcdf.inc" 51 include "netcdf.inc" 53 52 54 53 ! Arguments on input: … … 56 55 character (len=*),intent(in) :: nom,titre,unite 57 56 integer,intent(in) :: dim 58 real,intent(in) :: px(ngrid, llm)57 real,intent(in) :: px(ngrid,nbp_lev) 59 58 60 59 ! Local variables: 61 60 62 real*4 dx3( iip1,jjp1,llm) ! to store a 3D data set63 real*4 dx2( iip1,jjp1) ! to store a 2D (surface) data set64 real*4 dx1( llm) ! to store a 1D (column) data set61 real*4 dx3(nbp_lon+1,nbp_lat,nbp_lev) ! to store a 3D data set 62 real*4 dx2(nbp_lon+1,nbp_lat) ! to store a 2D (surface) data set 63 real*4 dx1(nbp_lev) ! to store a 1D (column) data set 65 64 real*4 dx0 66 65 67 66 real*4,save :: date 68 67 69 REAL phis(ip1jmp1) 68 REAL phis((nbp_lon+1),nbp_lat) 69 REAL area((nbp_lon+1),nbp_lat) 70 70 71 71 integer irythme 72 72 integer ierr,ierr2 73 integer iq 74 integer i,j,l,zmax , ig0 73 integer i,j,l, ig0 75 74 76 75 integer,save :: zitau=0 … … 98 97 #ifdef CPP_PARA 99 98 ! Added to work in parallel mode 100 real dx3_glop(klon_glo, llm)101 real dx3_glo( iim,jjp1,llm) ! to store a global 3D data set99 real dx3_glop(klon_glo,nbp_lev) 100 real dx3_glo(nbp_lon,nbp_lat,nbp_lev) ! to store a global 3D data set 102 101 real dx2_glop(klon_glo) 103 real dx2_glo( iim,jjp1) ! to store a global 2D (surface) data set102 real dx2_glo(nbp_lon,nbp_lat) ! to store a global 2D (surface) data set 104 103 real px2(ngrid) 105 ! real dx1_glo( llm) ! to store a 1D (column) data set104 ! real dx1_glo(nbp_lev) ! to store a 1D (column) data set 106 105 ! real dx0_glo 107 106 real phisfi_glo(klon_glo) ! surface geopotential on global physics grid 107 real areafi_glo(klon_glo) ! mesh area on global physics grid 108 108 #else 109 109 real phisfi_glo(ngrid) ! surface geopotential on global physics grid 110 real areafi_glo(ngrid) ! mesh area on global physics grid 110 111 #endif 111 112 … … 181 182 ! Gather phisfi() geopotential on physics grid 182 183 call Gather(phisfi,phisfi_glo) 184 ! Gather airephy() mesh area on physics grid 185 call Gather(airephy,areafi_glo) 183 186 #else 184 187 phisfi_glo(:)=phisfi(:) 188 areafi_glo(:)=airephy(:) 185 189 #endif 186 190 … … 209 213 ierr = NF_ENDDEF(nid) 210 214 215 ! Build phis() and area() 216 do i=1,nbp_lon+1 ! poles 217 phis(i,1)=phisfi_glo(1) 218 phis(i,nbp_lat)=phisfi_glo(klon_glo) 219 ! for area, divide at the poles by nbp_lon 220 area(i,1)=areafi_glo(1)/nbp_lon 221 area(i,nbp_lat)=areafi_glo(klon_glo)/nbp_lon 222 enddo 223 do j=2,nbp_lat-1 224 ig0= 1+(j-2)*nbp_lon 225 do i=1,nbp_lon 226 phis(i,j)=phisfi_glo(ig0+i) 227 area(i,j)=areafi_glo(ig0+i) 228 enddo 229 ! handle redundant point in longitude 230 phis(nbp_lon+1,j)=phis(1,j) 231 area(nbp_lon+1,j)=area(1,j) 232 enddo 233 211 234 ! write "header" of file (longitudes, latitudes, geopotential, ...) 212 call gr_fi_dyn(1,size(phisfi_glo),iip1,jjp1,phisfi_glo,phis) 213 call iniwrite(nid,day_ini,phis) 235 call iniwrite(nid,day_ini,phis,area) 214 236 215 237 endif ! of if (is_master) … … 290 312 call Grid1Dto2D_glo(dx3_glop,dx3_glo) 291 313 ! copy dx3_glo() to dx3(:) and add redundant longitude 292 dx3(1: iim,:,:)=dx3_glo(1:iim,:,:)293 dx3( iip1,:,:)=dx3(1,:,:)314 dx3(1:nbp_lon,:,:)=dx3_glo(1:nbp_lon,:,:) 315 dx3(nbp_lon+1,:,:)=dx3(1,:,:) 294 316 endif 295 317 !$OMP END MASTER … … 298 320 ! Passage variable physique --> variable dynamique 299 321 ! recast (copy) variable from physics grid to dynamics grid 300 DO l=1, llm301 DO i=1, iip1322 DO l=1,nbp_lev 323 DO i=1,nbp_lon+1 302 324 dx3(i,1,l)=px(1,l) 303 dx3(i, jjp1,l)=px(ngrid,l)325 dx3(i,nbp_lat,l)=px(ngrid,l) 304 326 ENDDO 305 DO j=2, jjm306 ig0= 1+(j-2)* iim307 DO i=1, iim327 DO j=2,nbp_lat-1 328 ig0= 1+(j-2)*nbp_lon 329 DO i=1,nbp_lon 308 330 dx3(i,j,l)=px(ig0+i,l) 309 331 ENDDO 310 dx3( iip1,j,l)=dx3(1,j,l)332 dx3(nbp_lon+1,j,l)=dx3(1,j,l) 311 333 ENDDO 312 334 ENDDO … … 338 360 corner(4)=ntime 339 361 340 edges(1)= iip1341 edges(2)= jjp1342 edges(3)= llm362 edges(1)=nbp_lon+1 363 edges(2)=nbp_lat 364 edges(3)=nbp_lev 343 365 edges(4)=1 344 366 !#ifdef NC_DOUBLE … … 374 396 call Grid1Dto2D_glo(dx2_glop,dx2_glo) 375 397 ! copy dx2_glo() to dx2(:) and add redundant longitude 376 dx2(1: iim,:)=dx2_glo(1:iim,:)377 dx2( iip1,:)=dx2(1,:)398 dx2(1:nbp_lon,:)=dx2_glo(1:nbp_lon,:) 399 dx2(nbp_lon+1,:)=dx2(1,:) 378 400 endif 379 401 !$OMP END MASTER … … 384 406 ! recast (copy) variable from physics grid to dynamics grid 385 407 386 DO i=1, iip1408 DO i=1,nbp_lon+1 387 409 dx2(i,1)=px(1,1) 388 dx2(i, jjp1)=px(ngrid,1)410 dx2(i,nbp_lat)=px(ngrid,1) 389 411 ENDDO 390 DO j=2, jjm391 ig0= 1+(j-2)* iim392 DO i=1, iim412 DO j=2,nbp_lat-1 413 ig0= 1+(j-2)*nbp_lon 414 DO i=1,nbp_lon 393 415 dx2(i,j)=px(ig0+i,1) 394 416 ENDDO 395 dx2( iip1,j)=dx2(1,j)417 dx2(nbp_lon+1,j)=dx2(1,j) 396 418 ENDDO 397 419 #endif … … 420 442 corner(2)=1 421 443 corner(3)=ntime 422 edges(1)= iip1423 edges(2)= jjp1444 edges(1)=nbp_lon+1 445 edges(2)=nbp_lat 424 446 edges(3)=1 425 447 … … 451 473 ! Passage variable physique --> physique dynamique 452 474 ! recast (copy) variable from physics grid to dynamics grid 453 do l=1, llm475 do l=1,nbp_lev 454 476 dx1(l)=px(1,l) 455 477 enddo … … 473 495 corner(2)=ntime 474 496 475 edges(1)= llm497 edges(1)=nbp_lev 476 498 edges(2)=1 477 499 !#ifdef NC_DOUBLE -
trunk/LMDZ.MARS/libf/phymars/writediagsoil.F90
r1525 r1528 12 12 ! Modifs: Aug.2010 Ehouarn: enforce outputs to be real*4 13 13 14 use comsoil_h, only: nsoilmx 14 use comsoil_h, only: nsoilmx, inertiedat 15 use comgeomphy, only: airephy 15 16 use time_phylmdz_mod, only: ecritphy, day_step, iphysiq 16 17 use mod_phys_lmdz_para, only : is_mpi_root, is_master, gather 17 use mod_grid_phy_lmdz, only : klon_glo, Grid1Dto2D_glo 18 use mod_grid_phy_lmdz, only : klon_glo, Grid1Dto2D_glo, & 19 nbp_lon, nbp_lat 18 20 19 21 implicit none 20 22 21 #include"dimensions.h" 22 #include"paramet.h" 23 !#include"control.h" 24 !#include"comsoil.h" 25 #include"netcdf.inc" 23 include"netcdf.inc" 26 24 27 25 ! Arguments: … … 33 31 integer,intent(in) :: dimpx ! dimension of the variable (3,2 or 0) 34 32 real,dimension(ngrid,nsoilmx),intent(in) :: px ! variable 35 ! Note: nsoilmx is a parameter set in 'comsoil_h'36 33 37 34 ! Local variables: 38 real*4,dimension(iip1,jjp1,nsoilmx) :: data3 ! to store 3D data 39 ! Note iip1,jjp1 known from paramet.h; nsoilmx known from comsoil_h 40 real*4,dimension(iip1,jjp1) :: data2 ! to store 2D data 35 real*4,dimension(nbp_lon+1,nbp_lat,nsoilmx) :: data3 ! to store 3D data 36 real*4,dimension(nbp_lon+1,nbp_lat) :: data2 ! to store 2D data 41 37 real*4 :: data0 ! to store 0D data 42 38 integer :: i,j,l ! for loops … … 44 40 45 41 real*4,save :: date ! time counter (in elapsed days) 42 43 real :: inertia((nbp_lon+1),nbp_lat,nsoilmx) 44 real :: area((nbp_lon+1),nbp_lat) 45 46 real :: inertiafi_glo(klon_glo,nsoilmx) 47 real :: areafi_glo(klon_glo) 48 46 49 integer,save :: isample ! sample rate at which data is to be written to output 47 50 integer,save :: ntime=0 ! counter to internally store time steps … … 61 64 ! Added to work in parallel mode 62 65 real dx3_glop(klon_glo,nsoilmx) 63 real dx3_glo( iim,jjp1,nsoilmx) ! to store a global 3D data set66 real dx3_glo(nbp_lon,nbp_lat,nsoilmx) ! to store a global 3D data set 64 67 real dx2_glop(klon_glo) 65 real dx2_glo( iim,jjp1) ! to store a global 2D (surface) data set68 real dx2_glo(nbp_lon,nbp_lat) ! to store a global 2D (surface) data set 66 69 real px2(ngrid) 67 70 #endif … … 92 95 stop 93 96 endif 97 98 #ifdef CPP_PARA 99 ! Gather inertiedat() soil thermal inertia on physics grid 100 call Gather(inertiedat,inertiafi_glo) 101 ! Gather airephy() mesh area on physics grid 102 call Gather(airephy,areafi_glo) 103 #else 104 inertiafi_glo(:,:)=inertiedat(:,:) 105 areafi_glo(:)=airephy(:) 106 #endif 107 108 ! build inertia() and area() 109 do i=1,nbp_lon+1 ! poles 110 inertia(i,1,1:nsoilmx)=inertiafi_glo(1,1:nsoilmx) 111 inertia(i,nbp_lat,1:nsoilmx)=inertiafi_glo(klon_glo,1:nsoilmx) 112 ! for area, divide at the poles by nbp_lon 113 area(i,1)=areafi_glo(1)/nbp_lon 114 area(i,nbp_lat)=areafi_glo(klon_glo)/nbp_lon 115 enddo 116 do j=2,nbp_lat-1 117 ig0= 1+(j-2)*nbp_lon 118 do i=1,nbp_lon 119 inertia(i,j,1:nsoilmx)=inertiafi_glo(ig0+i,1:nsoilmx) 120 area(i,j)=areafi_glo(ig0+i) 121 enddo 122 ! handle redundant point in longitude 123 inertia(nbp_lon+1,j,1:nsoilmx)=inertia(1,j,1:nsoilmx) 124 area(nbp_lon+1,j)=area(1,j) 125 enddo 126 127 ! write "header" of file (longitudes, latitudes, geopotential, ...) 128 call iniwritesoil(nid,ngrid,inertia,area) 129 94 130 endif ! of if (is_master) 95 96 ! Define dimensions and axis attributes97 call iniwritesoil(nid,ngrid)98 131 99 132 ! set zitau to -1 to be compatible with zitau incrementation step below … … 149 182 call Grid1Dto2D_glo(dx3_glop,dx3_glo) 150 183 ! copy dx3_glo() to dx3(:) and add redundant longitude 151 data3(1: iim,:,:)=dx3_glo(1:iim,:,:)152 data3( iip1,:,:)=data3(1,:,:)184 data3(1:nbp_lon,:,:)=dx3_glo(1:nbp_lon,:,:) 185 data3(nbp_lon+1,:,:)=data3(1,:,:) 153 186 endif 154 187 !$OMP END MASTER … … 157 190 do l=1,nsoilmx 158 191 ! handle the poles 159 do i=1, iip1192 do i=1,nbp_lon+1 160 193 data3(i,1,l)=px(1,l) 161 data3(i, jjp1,l)=px(ngrid,l)194 data3(i,nbp_lat,l)=px(ngrid,l) 162 195 enddo 163 196 ! rest of the grid 164 do j=2, jjm165 ig0=1+(j-2)* iim166 do i=1, iim197 do j=2,nbp_lat-1 198 ig0=1+(j-2)*nbp_lon 199 do i=1,nbp_lon 167 200 data3(i,j,l)=px(ig0+i,l) 168 201 enddo 169 data3( iip1,j,l)=data3(1,j,l) ! extra (modulo) longitude202 data3(nbp_lon+1,j,l)=data3(1,j,l) ! extra (modulo) longitude 170 203 enddo 171 204 enddo … … 196 229 corners(4)=ntime 197 230 198 edges(1)= iip1199 edges(2)= jjp1231 edges(1)=nbp_lon+1 232 edges(2)=nbp_lat 200 233 edges(3)=nsoilmx 201 234 edges(4)=1 … … 224 257 call Grid1Dto2D_glo(dx2_glop,dx2_glo) 225 258 ! copy dx3_glo() to dx3(:) and add redundant longitude 226 data2(1: iim,:)=dx2_glo(1:iim,:)227 data2( iip1,:)=data2(1,:)259 data2(1:nbp_lon,:)=dx2_glo(1:nbp_lon,:) 260 data2(nbp_lon+1,:)=data2(1,:) 228 261 endif 229 262 !$OMP END MASTER … … 231 264 #else 232 265 ! handle the poles 233 do i=1, iip1266 do i=1,nbp_lon+1 234 267 data2(i,1)=px(1,1) 235 data2(i, jjp1)=px(ngrid,1)268 data2(i,nbp_lat)=px(ngrid,1) 236 269 enddo 237 270 ! rest of the grid 238 do j=2, jjm239 ig0=1+(j-2)* iim240 do i=1, iim271 do j=2,nbp_lat-1 272 ig0=1+(j-2)*nbp_lon 273 do i=1,nbp_lon 241 274 data2(i,j)=px(ig0+i,1) 242 275 enddo 243 data2( iip1,j)=data2(1,j) ! extra (modulo) longitude276 data2(nbp_lon+1,j)=data2(1,j) ! extra (modulo) longitude 244 277 enddo 245 278 #endif … … 267 300 corners(3)=ntime 268 301 269 edges(1)= iip1270 edges(2)= jjp1302 edges(1)=nbp_lon+1 303 edges(2)=nbp_lat 271 304 edges(3)=1 272 305 -
trunk/LMDZ.MARS/libf/phymars/wstats.F90
r1422 r1528 2 2 3 3 use mod_phys_lmdz_para, only : is_mpi_root, is_master, gather, klon_mpi_begin 4 use mod_grid_phy_lmdz, only : klon_glo, Grid1Dto2D_glo 5 4 use mod_grid_phy_lmdz, only : klon_glo, Grid1Dto2D_glo, & 5 nbp_lon, nbp_lat, nbp_lev 6 6 implicit none 7 7 8 #include "dimensions.h" 9 #include "statto.h" 10 #include "netcdf.inc" 8 include "statto.h" 9 include "netcdf.inc" 11 10 12 11 integer,intent(in) :: ngrid 13 12 character (len=*),intent(in) :: nom,titre,unite 14 13 integer,intent(in) :: dim 15 integer,parameter :: iip1=iim+1 16 integer,parameter :: jjp1=jjm+1 17 real,intent(in) :: px(ngrid,llm) 18 real, dimension(iip1,jjp1,llm) :: mean3d,sd3d,dx3 19 real, dimension(iip1,jjp1) :: mean2d,sd2d,dx2 14 real,intent(in) :: px(ngrid,nbp_lev) 15 real, dimension(nbp_lon+1,nbp_lat,nbp_lev) :: mean3d,sd3d,dx3 16 real, dimension(nbp_lon+1,nbp_lat) :: mean2d,sd2d,dx2 20 17 character (len=50) :: namebis 21 18 character (len=50), save :: firstvar … … 31 28 ! Added to work in parallel mode 32 29 #ifdef CPP_PARA 33 real px3_glop(klon_glo, llm) ! to store a 3D data set on global physics grid34 real px3_glo( iim,jjp1,llm) ! to store a global 3D data set on global lonxlat grid30 real px3_glop(klon_glo,nbp_lev) ! to store a 3D data set on global physics grid 31 real px3_glo(nbp_lon,nbp_lat,nbp_lev) ! to store a global 3D data set on global lonxlat grid 35 32 real px2_glop(klon_glo) ! to store a 2D data set on global physics grid 36 real px2_glo( iim,jjp1) ! to store a 2D data set on global lonxlat grid33 real px2_glo(nbp_lon,nbp_lat) ! to store a 2D data set on global lonxlat grid 37 34 real px2(ngrid) 38 real px3(ngrid, llm)35 real px3(ngrid,nbp_lev) 39 36 #else 40 37 ! When not running in parallel mode: 41 real px3_glop(ngrid, llm) ! to store a 3D data set on global physics grid42 real px3_glo( iim,jjp1,llm) ! to store a global 3D data set on global lonxlat grid38 real px3_glop(ngrid,nbp_lev) ! to store a 3D data set on global physics grid 39 real px3_glo(nbp_lon,nbp_lat,nbp_lev) ! to store a global 3D data set on global lonxlat grid 43 40 real px2_glop(ngrid) ! to store a 2D data set on global physics grid 44 real px2_glo( iim,jjp1) ! to store a 2D data set on global lonxlat grid41 real px2_glo(nbp_lon,nbp_lat) ! to store a 2D data set on global lonxlat grid 45 42 #endif 46 43 … … 64 61 #ifdef CPP_PARA 65 62 if (dim.eq.3) then 66 px3(1:ngrid,1: llm)=px(1:ngrid,1:llm)63 px3(1:ngrid,1:nbp_lev)=px(1:ngrid,1:nbp_lev) 67 64 ! Gather fieds on a "global" (without redundant longitude) array 68 65 call Gather(px3,px3_glop) … … 71 68 call Grid1Dto2D_glo(px3_glop,px3_glo) 72 69 ! copy dx3_glo() to dx3(:) and add redundant longitude 73 dx3(1: iim,:,:)=px3_glo(1:iim,:,:)74 dx3( iip1,:,:)=dx3(1,:,:)70 dx3(1:nbp_lon,:,:)=px3_glo(1:nbp_lon,:,:) 71 dx3(nbp_lon+1,:,:)=dx3(1,:,:) 75 72 endif 76 73 !$OMP END MASTER … … 84 81 call Grid1Dto2D_glo(px2_glop,px2_glo) 85 82 ! copy px2_glo() to dx2(:) and add redundant longitude 86 dx2(1: iim,:)=px2_glo(1:iim,:)87 dx2( iip1,:)=dx2(1,:)83 dx2(1:nbp_lon,:)=px2_glo(1:nbp_lon,:) 84 dx2(nbp_lon+1,:)=dx2(1,:) 88 85 endif 89 86 !$OMP END MASTER … … 92 89 #else 93 90 if (dim.eq.3) then 94 px3_glop(:,1: llm)=px(:,1:llm)91 px3_glop(:,1:nbp_lev)=px(:,1:nbp_lev) 95 92 ! Passage variable physique --> variable dynamique 96 DO l=1, llm97 DO i=1, iim93 DO l=1,nbp_lev 94 DO i=1,nbp_lon 98 95 px3_glo(i,1,l)=px(1,l) 99 px3_glo(i, jjp1,l)=px(ngrid,l)96 px3_glo(i,nbp_lat,l)=px(ngrid,l) 100 97 ENDDO 101 DO j=2, jjm102 ig0= 1+(j-2)* iim103 DO i=1, iim98 DO j=2,nbp_lat-1 99 ig0= 1+(j-2)*nbp_lon 100 DO i=1,nbp_lon 104 101 px3_glo(i,j,l)=px(ig0+i,l) 105 102 ENDDO … … 109 106 px2_glop(:)=px(:,1) 110 107 ! Passage variable physique --> physique dynamique 111 DO i=1, iim108 DO i=1,nbp_lon 112 109 px2_glo(i,1)=px(1,1) 113 px2_glo(i, jjp1)=px(ngrid,1)110 px2_glo(i,nbp_lat)=px(ngrid,1) 114 111 ENDDO 115 DO j=2, jjm116 ig0= 1+(j-2)* iim117 DO i=1, iim112 DO j=2,nbp_lat-1 113 ig0= 1+(j-2)*nbp_lon 114 DO i=1,nbp_lon 118 115 px2_glo(i,j)=px(ig0+i,1) 119 116 ENDDO … … 195 192 if (dim.eq.3) then 196 193 start=(/1,1,1,indx/) 197 sizes=(/ iip1,jjp1,llm,1/)194 sizes=(/nbp_lon+1,nbp_lat,nbp_lev,1/) 198 195 mean3d(:,:,:)=0 199 196 sd3d(:,:,:)=0 200 197 else if (dim.eq.2) then 201 198 start=(/1,1,indx,0/) 202 sizes=(/ iip1,jjp1,1,0/)199 sizes=(/nbp_lon+1,nbp_lev,1,0/) 203 200 mean2d(:,:)=0 204 201 sd2d(:,:)=0 … … 208 205 if (dim.eq.3) then 209 206 start=(/1,1,1,indx/) 210 sizes=(/ iip1,jjp1,llm,1/)207 sizes=(/nbp_lon+1,nbp_lat,nbp_lev,1/) 211 208 #ifdef NC_DOUBLE 212 209 ierr = NF_GET_VARA_DOUBLE(nid,meanid,start,sizes,mean3d) … … 223 220 else if (dim.eq.2) then 224 221 start=(/1,1,indx,0/) 225 sizes=(/ iip1,jjp1,1,0/)222 sizes=(/nbp_lon+1,nbp_lat,1,0/) 226 223 #ifdef NC_DOUBLE 227 224 ierr = NF_GET_VARA_DOUBLE(nid,meanid,start,sizes,mean2d) … … 242 239 243 240 if (dim.eq.3) then 244 dx3(1: iim,:,:)=px3_glo(:,:,:)245 dx3( iip1,:,:)=dx3(1,:,:)241 dx3(1:nbp_lon,:,:)=px3_glo(:,:,:) 242 dx3(nbp_lon+1,:,:)=dx3(1,:,:) 246 243 else ! dim.eq.2 247 dx2(1: iim,:)=px2_glo(:,:)248 dx2( iip1,:)=dx2(1,:)244 dx2(1:nbp_lon,:)=px2_glo(:,:) 245 dx2(nbp_lon+1,:)=dx2(1,:) 249 246 endif 250 247 … … 287 284 !====================================================== 288 285 subroutine inivar(nid,varid,ngrid,dim,indx,px,ierr) 286 use mod_grid_phy_lmdz, only : nbp_lon, nbp_lat, nbp_lev 289 287 290 288 implicit none 291 289 292 include "dimensions.h"293 290 include "netcdf.inc" 294 291 295 292 integer, intent(in) :: nid,varid,dim,indx,ngrid 296 real, dimension(ngrid, llm), intent(in) :: px293 real, dimension(ngrid,nbp_lev), intent(in) :: px 297 294 integer, intent(out) :: ierr 298 299 integer,parameter :: iip1=iim+1300 integer,parameter :: jjp1=jjm+1301 295 302 296 integer :: l,i,j,ig0 303 297 integer, dimension(4) :: start,sizes 304 real, dimension( iip1,jjp1,llm) :: dx3305 real, dimension( iip1,jjp1) :: dx2298 real, dimension(nbp_lon+1,nbp_lat,nbp_lev) :: dx3 299 real, dimension(nbp_lon+1,nbp_lat) :: dx2 306 300 307 301 if (dim.eq.3) then 308 302 309 303 start=(/1,1,1,indx/) 310 sizes=(/ iip1,jjp1,llm,1/)304 sizes=(/nbp_lon+1,nbp_lat,nbp_lev,1/) 311 305 312 306 ! Passage variable physique --> variable dynamique 313 307 314 DO l=1, llm315 DO i=1, iip1308 DO l=1,nbp_lev 309 DO i=1,nbp_lon+1 316 310 dx3(i,1,l)=px(1,l) 317 dx3(i, jjp1,l)=px(ngrid,l)311 dx3(i,nbp_lat,l)=px(ngrid,l) 318 312 ENDDO 319 DO j=2, jjm320 ig0= 1+(j-2)* iim321 DO i=1, iim313 DO j=2,nbp_lat-1 314 ig0= 1+(j-2)*nbp_lon 315 DO i=1,nbp_lon 322 316 dx3(i,j,l)=px(ig0+i,l) 323 317 ENDDO 324 dx3( iip1,j,l)=dx3(1,j,l)318 dx3(nbp_lon+1,j,l)=dx3(1,j,l) 325 319 ENDDO 326 320 ENDDO … … 335 329 336 330 start=(/1,1,indx,0/) 337 sizes=(/ iip1,jjp1,1,0/)331 sizes=(/nbp_lon+1,nbp_lat,1,0/) 338 332 339 333 ! Passage variable physique --> physique dynamique 340 334 341 DO i=1, iip1335 DO i=1,nbp_lon+1 342 336 dx2(i,1)=px(1,1) 343 dx2(i, jjp1)=px(ngrid,1)337 dx2(i,nbp_lat)=px(ngrid,1) 344 338 ENDDO 345 DO j=2, jjm346 ig0= 1+(j-2)* iim347 DO i=1, iim339 DO j=2,nbp_lat-1 340 ig0= 1+(j-2)*nbp_lon 341 DO i=1,nbp_lon 348 342 dx2(i,j)=px(ig0+i,1) 349 343 ENDDO 350 dx2( iip1,j)=dx2(1,j)344 dx2(nbp_lon+1,j)=dx2(1,j) 351 345 ENDDO 352 346 … … 376 370 implicit none 377 371 378 #include "netcdf.inc"372 include "netcdf.inc" 379 373 380 374 integer,intent(in) :: nid ! NetCDF file ID
Note: See TracChangeset
for help on using the changeset viewer.