Changeset 4013 for LMDZ6/branches/Ocean_skin/libf/phylmd/iotd_ini.F90
- Timestamp:
- Nov 19, 2021, 4:58:59 PM (3 years ago)
- Location:
- LMDZ6/branches/Ocean_skin
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/Ocean_skin
- Property svn:mergeinfo changed
-
LMDZ6/branches/Ocean_skin/libf/phylmd/iotd_ini.F90
r3102 r4013 1 SUBROUTINE iotd_ini(fichnom,iim,jjm,llm,prlon v,prlatu,pcoordv)1 SUBROUTINE iotd_ini(fichnom,iim,jjm,llm,prlon,prlat,pcoordv,jour0,mois0,an0,t0,timestep,calendrier) 2 2 IMPLICIT NONE 3 3 … … 23 23 24 24 integer iim,jjm,llm 25 real prlon v(iim),prlatu(jjm),pcoordv(llm),timestep25 real prlon(iim),prlat(jjm),pcoordv(llm),timestep,t0 26 26 INTEGER id_FOCE 27 INTEGER jour0,mois0,an0 28 CHARACTER*(*) calendrier 27 29 28 30 integer corner(4),edges(4),ndim 29 31 real px(1000) 30 32 character (len=10) :: nom 33 real*4 rlon(iim),rlat(jjm),coordv(llm) 31 34 32 35 ! Local: 33 36 ! ------ 34 INTEGER ierr 37 CHARACTER*3,DIMENSION(12) :: cmois=(/'JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC'/) 38 CHARACTER*10 date0 39 CHARACTER*11 date0b 40 41 INTEGER :: ierr 35 42 36 43 integer :: nvarid 37 44 integer, dimension(2) :: id 38 integer :: varid39 45 40 character*10 fichnom 41 real*4 rlonv(iim),rlatu(jjm),coordv(llm) 46 character*(*) fichnom 42 47 43 48 real pi 44 49 45 print*,'INIIO prlonv ',prlonv 50 iotd_ts=timestep 51 iotd_t0=t0 52 print*,'iotd_ini, ',timestep,iotd_ts 46 53 imax=iim 47 54 jmax=jjm 48 55 lmax=llm 49 50 rlon v=prlonv51 rlat u=prlatu56 ! Utile pour passer en real*4 pour les ecritures 57 rlon=prlon 58 rlat=prlat 52 59 coordv=pcoordv 53 60 54 !----------------------------------------------------------------------- 61 62 !----------------------------------------------------------------------- 63 ! Possibilité de spécifier une liste de variables à sortir 64 ! dans iotd.def 65 ! Si iotd.def existe et est non vide, 66 ! seules les variables faisant à la fois l'objet d'un call iotd_ecrit 67 ! et étant spécifiées dans iotd.def sont sorties. 68 ! Sinon, toutes les variables faisant l'objet d'un call iotd_ecrit 69 ! sont sorties 70 !----------------------------------------------------------------------- 71 n_names_iotd_def=0 72 open(99,file='iotd.def',form='formatted',status='old',iostat=ierr) 73 if ( ierr.eq.0 ) then 74 ierr=0 75 do while (ierr==0) 76 read(99,*,iostat=ierr) un_nom 77 if (ierr==0) then 78 n_names_iotd_def=n_names_iotd_def+1 79 names_iotd_def(n_names_iotd_def)=un_nom 80 endif 81 enddo 82 endif 83 print*,n_names_iotd_def,names_iotd_def(1:n_names_iotd_def) 84 close(99) 55 85 56 86 … … 59 89 ! Define dimensions 60 90 61 ! Create the NetCDF file 62 ierr=NF_CREATE(fichnom, NF_CLOBBER, nid) 63 ! Define the 'Time' dimension 64 ierr=nf_def_dim(nid,"Time",NF_UNLIMITED,dim_coord(4)) 65 ! Define the 'Time' variable 66 ierr=NF_DEF_VAR(nid, "Time", NF_FLOAT, 1, dim_coord(4),varid) 67 ! ! Add a long_name attribute 68 ! ierr=NF_PUT_ATT_TEXT(nid, varid, "long_name",4,"Time") 69 ! ! Add a units attribute 70 ierr=NF_PUT_ATT_TEXT(nid, varid,'units',29,"days since 0000-00-0 00:00:00") 71 ! Switch out of NetCDF Define mode 91 ! Create the NetCDF file 92 ierr=NF_CREATE(fichnom, NF_CLOBBER, nid) 93 ierr=NF_DEF_DIM(nid, "lon", iim, dim_coord(1)) 94 ierr=NF_DEF_DIM(nid, "lat", jjm, dim_coord(2)) 95 ierr=NF_DEF_DIM(nid, "lev", llm, dim_coord(3)) 96 ierr=NF_DEF_DIM(nid,"time",NF_UNLIMITED,dim_coord(4)) 97 ierr = NF_PUT_ATT_TEXT(nid,NF_GLOBAL,'Conventions',6,"CF-1.1") 98 !ierr = NF_PUT_ATT_TEXT(nid,NF_GLOBAL,'file_name',TRIM(fname)) 99 ierr=NF_ENDDEF(nid) 72 100 73 ierr=NF_DEF_DIM(nid, "longitude", iim, dim_coord(1)) 74 ierr=NF_DEF_DIM(nid, "latitude", jjm, dim_coord(2)) 75 ierr=NF_DEF_DIM(nid, "altitude", llm, dim_coord(3)) 101 ! Switch out of NetCDF Define mode 76 102 77 103 … … 79 105 ! 80 106 ! Contol parameters for this run 81 ! ---- ----------------------107 ! ---- longitude ----------- 82 108 83 109 ierr=NF_REDEF(nid) 84 ierr=NF_DEF_VAR(nid,"longitude", NF_FLOAT, 1, dim_coord(1),nvarid) 85 ! ierr=NF_PUT_ATT_TEXT(nid,nvarid,"long_name", 14, 86 ! . "East longitude") 87 ! ierr=NF_PUT_ATT_TEXT(nid,nvarid,'units',12,"degrees_east") 110 ierr=NF_DEF_VAR(nid,"lon", NF_FLOAT, 1, dim_coord(1),nvarid) 111 ierr = NF_PUT_ATT_TEXT(nid,nvarid,'axis',1,'X') 112 ierr=NF_PUT_ATT_TEXT(nid,nvarid,'units',12,"degrees_east") 88 113 ierr=NF_ENDDEF(nid) 89 ierr=NF_PUT_VAR_REAL(nid,nvarid,rlon v)114 ierr=NF_PUT_VAR_REAL(nid,nvarid,rlon) 90 115 print*,ierr 91 116 92 ! ---- ----------------------117 ! ---- latitude ------------ 93 118 ierr=NF_REDEF(nid) 94 ierr=NF_DEF_VAR(nid, "lat itude", NF_FLOAT, 1, dim_coord(2),nvarid)95 ! ierr=NF_PUT_ATT_TEXT(nid,nvarid,'units',13,"degrees_north")96 ! ierr=NF_PUT_ATT_TEXT(nid,nvarid,"long_name", 14,"North latitude")119 ierr=NF_DEF_VAR(nid, "lat", NF_FLOAT, 1, dim_coord(2),nvarid) 120 ierr = NF_PUT_ATT_TEXT(nid,nvarid,'axis',1,'Y') 121 ierr=NF_PUT_ATT_TEXT(nid,nvarid,'units',13,"degrees_north") 97 122 ierr=NF_ENDDEF(nid) 98 ierr=NF_PUT_VAR_REAL(nid,nvarid,rlat u)123 ierr=NF_PUT_VAR_REAL(nid,nvarid,rlat) 99 124 ! 100 ! ---- ----------------------125 ! ---- vertical ------------ 101 126 ierr=NF_REDEF(nid) 102 ierr=NF_DEF_VAR(nid, "altitude", NF_FLOAT, 1,dim_coord(3),nvarid) 103 ierr=NF_PUT_ATT_TEXT(nid,nvarid,"long_name",10,"pseudo-alt") 104 ! ierr=NF_PUT_ATT_TEXT(nid,nvarid,'units',2,"km") 105 if ( pcoordv(2)>pcoordv(1) ) then 127 ierr=NF_DEF_VAR(nid, "lev", NF_FLOAT, 1,dim_coord(3),nvarid) 128 ierr=NF_PUT_ATT_TEXT(nid,nvarid,"long_name",10,"vert level") 129 if ( coordv(2)>coordv(1) ) then 106 130 ierr=NF_PUT_ATT_TEXT(nid,nvarid,"long_name",10,"pseudo-alt") 107 131 ierr=NF_PUT_ATT_TEXT(nid,nvarid,'positive',2,"up") … … 111 135 endif 112 136 ierr=NF_ENDDEF(nid) 137 ierr=NF_PUT_VAR_REAL(nid,nvarid,coordv) 113 138 114 ierr=NF_PUT_VAR_REAL(nid,nvarid,coordv)115 139 ! 140 ! ---- time ---------------- 141 ierr=NF_REDEF(nid) 142 ! Define the 'time' variable 143 ierr=NF_DEF_VAR(nid, "time", NF_FLOAT, 1, dim_coord(4),nvarid) 144 ! ! Add attributes 145 ierr = NF_PUT_ATT_TEXT(nid,nvarid,'axis',1,'T') 146 ierr = NF_PUT_ATT_TEXT(nid,nvarid,'standard_name',4,'time') 147 WRITE(date0,'(i4.4,"-",i2.2,"-",i2.2)') an0,mois0,jour0 148 ierr=NF_PUT_ATT_TEXT(nid, nvarid,'units',33, & 149 & "seconds since "//date0//" 00:00:00") 150 ierr = NF_PUT_ATT_TEXT(nid,nvarid,'calendar',9,calendrier) 151 !ierr = NF_PUT_ATT_TEXT(nid,nvarid,'calendar',4,'360d') 152 ierr = NF_PUT_ATT_TEXT(nid,nvarid,'title',4,'Time') 153 ierr = NF_PUT_ATT_TEXT(nid,nvarid,'long_name',9,'Time axis') 154 WRITE(date0b,'(i4.4,"-",a3,"-",i2.2)') an0,cmois(mois0),jour0 155 ierr = NF_PUT_ATT_TEXT(nid,nvarid,'time_origin',20, & 156 & date0b//' 00:00:00') 157 ierr=NF_ENDDEF(nid) 158 159 116 160 END
Note: See TracChangeset
for help on using the changeset viewer.