Changeset 5135
- Timestamp:
- Jul 26, 2024, 7:20:23 PM (6 months ago)
- Location:
- LMDZ6/branches/Amaury_dev/libf
- Files:
-
- 6 deleted
- 25 edited
- 3 moved
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/Amaury_dev/libf/dyn3d/bilan_dyn.F90
r5134 r5135 60 60 61 61 62 !ym character*6 nom(nQ)63 !ym character*6 unites(nQ)64 character*6, save :: nom(nQ)65 character*6, save :: unites(nQ)62 !ym CHARACTER*6 nom(nQ) 63 !ym CHARACTER*6 unites(nQ) 64 CHARACTER*6, save :: nom(nQ) 65 CHARACTER*6, save :: unites(nQ) 66 66 67 67 CHARACTER(LEN = 10) :: file … … 116 116 parameter (ntr = 5) 117 117 118 !ym character*10 znom(ntr,nQ)119 !ym character*20 znoml(ntr,nQ)120 !ym character*10 zunites(ntr,nQ)121 character*10, save :: znom(ntr, nQ)122 character*20, save :: znoml(ntr, nQ)123 character*10, save :: zunites(ntr, nQ)118 !ym CHARACTER*10 znom(ntr,nQ) 119 !ym CHARACTER*20 znoml(ntr,nQ) 120 !ym CHARACTER*10 zunites(ntr,nQ) 121 CHARACTER*10, save :: znom(ntr, nQ) 122 CHARACTER*20, save :: znoml(ntr, nQ) 123 CHARACTER*10, save :: zunites(ntr, nQ) 124 124 125 125 INTEGER :: iave, itot, immc, itrs, istn -
LMDZ6/branches/Amaury_dev/libf/dyn3d_common/gradsdef.h
r5117 r5135 15 15 LOGICAL firsttime(nfmx) 16 16 17 character*10 var(nvarmx,nfmx),fichier(nfmx)18 character*40 title(nfmx),tvar(nvarmx,nfmx)17 CHARACTER*10 var(nvarmx,nfmx),fichier(nfmx) 18 CHARACTER*40 title(nfmx),tvar(nvarmx,nfmx) 19 19 20 20 common/gradsdef/xd,yd,zd,dtime, & -
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/bilan_dyn_loc.f90
r5134 r5135 68 68 69 69 70 !ym character*6 nom(nQ)71 !ym character*6 unites(nQ)70 !ym CHARACTER*6 nom(nQ) 71 !ym CHARACTER*6 unites(nQ) 72 72 CHARACTER(LEN=6),save :: nom(nQ) 73 73 CHARACTER(LEN=6),save :: unites(nQ) … … 114 114 parameter (ntr=5) 115 115 116 !ym character*10 znom(ntr,nQ)117 !ym character*20 znoml(ntr,nQ)118 !ym character*10 zunites(ntr,nQ)119 character*10,save :: znom(ntr,nQ)120 character*20,save :: znoml(ntr,nQ)121 character*10,save :: zunites(ntr,nQ)116 !ym CHARACTER*10 znom(ntr,nQ) 117 !ym CHARACTER*20 znoml(ntr,nQ) 118 !ym CHARACTER*10 zunites(ntr,nQ) 119 CHARACTER*10,save :: znom(ntr,nQ) 120 CHARACTER*20,save :: znoml(ntr,nQ) 121 CHARACTER*10,save :: zunites(ntr,nQ) 122 122 123 123 INTEGER,PARAMETER :: iave=1,itot=2,immc=3,itrs=4,istn=5 -
LMDZ6/branches/Amaury_dev/libf/phydev/iophy.F90
r5119 r5135 145 145 IMPLICIT NONE 146 146 147 character*(*), INTENT(IN) :: name147 CHARACTER*(*), INTENT(IN) :: name 148 148 INTEGER, INTENT(IN) :: itau0 149 149 REAL, INTENT(IN) :: zjulian … … 173 173 IMPLICIT NONE 174 174 175 character*(*), INTENT(IN) :: name175 CHARACTER*(*), INTENT(IN) :: name 176 176 ! INTEGER, INTENT(IN) :: itau0 177 177 ! REAL,INTENT(IN) :: zjulian … … 209 209 INTEGER, INTENT(IN) :: nid 210 210 logical, INTENT(IN) :: lpoint 211 character*(*), INTENT(IN) :: name211 CHARACTER*(*), INTENT(IN) :: name 212 212 INTEGER, INTENT(IN) :: itau 213 213 REAL, DIMENSION(:), INTENT(IN) :: field … … 269 269 INTEGER, INTENT(IN) :: nid 270 270 logical, INTENT(IN) :: lpoint 271 character*(*), INTENT(IN) :: name271 CHARACTER*(*), INTENT(IN) :: name 272 272 INTEGER, INTENT(IN) :: itau 273 273 REAL, DIMENSION(:, :), INTENT(IN) :: field ! --> field(klon,:) -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/minmaxqfi2.f90
r5117 r5135 6 6 INCLUDE "dimensions.h" 7 7 8 ! character*20 comment8 ! CHARACTER*20 comment 9 9 CHARACTER(LEN = *) :: comment 10 10 REAL :: qmin, qmax -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/minmaxsource.f90
r5117 r5135 7 7 INCLUDE "dimensions.h" 8 8 9 ! character*20 comment9 ! CHARACTER*20 comment 10 10 CHARACTER(LEN = *) :: comment 11 11 REAL :: qmin, qmax -
LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/read_surface.F90
r5117 r5135 15 15 INCLUDE "paramet.h" 16 16 17 character*10 name18 character*10 varname17 CHARACTER*10 name 18 CHARACTER*10 varname 19 19 20 20 REAL tmp_dyn(iip1,jjp1) … … 32 32 INTEGER start(2),count(2),status 33 33 INTEGER i,j,l,ig 34 character*1 str134 CHARACTER*1 str1 35 35 36 36 !JE20140526<< 37 character*4 :: latstr,aux4s37 CHARACTER*4 :: latstr,aux4s 38 38 LOGICAL :: outcycle, isinversed 39 39 REAL, DIMENSION(jjp1) :: lats -
LMDZ6/branches/Amaury_dev/libf/phylmd/dyn1d/1D_decl_cases.h
r5128 r5135 1 1 2 2 ! Declarations specifiques au cas Toga 3 character*80 :: fich_toga3 CHARACTER*80 :: fich_toga 4 4 ! integer nlev_prof 5 5 ! parameter (nlev_prof = 41) … … 42 42 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 43 43 ! Declarations specifiques au cas RICO 44 character*80 :: fich_rico44 CHARACTER*80 :: fich_rico 45 45 INTEGER nlev_rico 46 46 … … 54 54 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 55 55 ! Declarations specifiques au cas TWPice 56 character*80 :: fich_twpice56 CHARACTER*80 :: fich_twpice 57 57 INTEGER nlev_twpi, nt_twpi 58 58 parameter (nlev_twpi=40, nt_twpi=215) … … 84 84 85 85 !Declarations specifiques au cas FIRE 86 character*80 :: fich_fire86 CHARACTER*80 :: fich_fire 87 87 INTEGER nlev_fire, nt_fire 88 88 parameter (nlev_fire=120, nt_fire=1) … … 97 97 !Declarations specifiques au cas GABLS4 (MPL 20141023) 98 98 !FHADETRUIRE 99 ! character*80 :: fich_gabls499 ! CHARACTER*80 :: fich_gabls4 100 100 ! integer nlev_gabls4, nt_gabls4, nsol_gabls4 101 101 ! parameter (nlev_gabls4=90, nt_gabls4=37, nsol_gabls4=19) … … 132 132 133 133 !Declarations specifiques au cas DICE (MPL 02072013) 134 character*80 :: fich_dice134 CHARACTER*80 :: fich_dice 135 135 INTEGER nlev_dice, nt_dice 136 136 parameter (nlev_dice=70, nt_dice=145) … … 178 178 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 179 179 ! Declarations specifiques au cas GCSSold 180 character*80 :: fich_gcssold_ctl181 character*80 :: fich_gcssold_dat180 CHARACTER*80 :: fich_gcssold_ctl 181 CHARACTER*80 :: fich_gcssold_dat 182 182 real ht_gcssold(llm),hq_gcssold(llm),hw_gcssold(llm) 183 183 real hu_gcssold(llm) … … 193 193 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 194 194 ! Declarations specifiques au cas Arm_cu 195 character*80 :: fich_armcu195 CHARACTER*80 :: fich_armcu 196 196 197 197 … … 218 218 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 219 219 ! declarations specifiques au cas Sandu 220 character*80 :: fich_sandu220 CHARACTER*80 :: fich_sandu 221 221 ! integer nlev_prof 222 222 ! parameter (nlev_prof = 41) … … 256 256 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 257 257 ! Declarations specifiques au cas Astex 258 character*80 :: fich_astex258 CHARACTER*80 :: fich_astex 259 259 INTEGER nlev_astex, nt_astex 260 260 parameter (nlev_astex=34, nt_astex=49) -
LMDZ6/branches/Amaury_dev/libf/phylmd/dyn1d/fcg_racmo.h
r5117 r5135 5 5 LOGICAL :: ok_invertp 6 6 INTEGER :: forc_trb 7 character*31 :: fich_racmo7 CHARACTER*31 :: fich_racmo 8 8 9 9 common /fcg_racmo/forc_trb,ok_invertp,a_guide,fich_racmo -
LMDZ6/branches/Amaury_dev/libf/phylmd/dyn1d/lmdz_1dutils.f90
r5134 r5135 742 742 PARAMETER (length = 100) 743 743 REAL tab_cntrl(length) ! tableau des parametres du run 744 character*4 nmq(nqtot)745 character*12 modname746 character*80 abort_message744 CHARACTER*4 nmq(nqtot) 745 CHARACTER*12 modname 746 CHARACTER*80 abort_message 747 747 LOGICAL found 748 748 … … 878 878 PARAMETER (length = 100) 879 879 REAL tab_cntrl(length) ! tableau des parametres du run 880 character*4 nmq(nqtot)881 character*20 modname882 character*80 abort_message880 CHARACTER*4 nmq(nqtot) 881 CHARACTER*20 modname 882 CHARACTER*80 abort_message 883 883 884 884 INTEGER pass -
LMDZ6/branches/Amaury_dev/libf/phylmd/dyn1d/lmdz_comdissnew.f90
r5134 r5135 1 link ../../dyn3d_common/ comdissnew.h1 link ../../dyn3d_common/lmdz_comdissnew.f90 -
LMDZ6/branches/Amaury_dev/libf/phylmd/dyn1d/lmdz_old_1dconv.f90
r5134 r5135 115 115 save timeaft, timebef 116 116 INTEGER temps 117 character*4 string117 CHARACTER*4 string 118 118 !---------------------------------------------------------------------- 119 119 ! variables arguments de la subroutine rdgrads … … 142 142 ! variables destinees a la lecture du pas de temps du fichier de donnees 143 143 !--------------------------------------------------------------------- 144 character*80 aaa, atemps, apasmax144 CHARACTER*80 aaa, atemps, apasmax 145 145 INTEGER nch, imn, ipa 146 146 !--------------------------------------------------------------------- … … 509 509 REAL playgcm(klevgcm) ! pression en milieu de couche du gcm 510 510 REAL psolgcm 511 character*80 file_forctl511 CHARACTER*80 file_forctl 512 512 513 513 klev = klevgcm … … 577 577 INTEGER i, lu, mlz, mlzh 578 578 579 character*80 file_forctl580 581 character*4 a582 character*80 aaa, anblvl579 CHARACTER*80 file_forctl 580 581 CHARACTER*4 a 582 CHARACTER*80 aaa, anblvl 583 583 INTEGER nch 584 584 -
LMDZ6/branches/Amaury_dev/libf/phylmd/dyn1d/mod_1D_amma_read.F90
r5117 r5135 4 4 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 5 5 !Declarations specifiques au cas AMMA 6 character*80 :: fich_amma6 CHARACTER*80 :: fich_amma 7 7 ! Option du cas AMMA ou on impose la discretisation verticale (Ap,Bp) 8 8 INTEGER nlev_amma, nt_amma -
LMDZ6/branches/Amaury_dev/libf/phylmd/dyn1d/mod_1D_cases_read.F90
r5117 r5135 5 5 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 6 6 !Declarations specifiques au cas standard 7 character*80 :: fich_cas7 CHARACTER*80 :: fich_cas 8 8 ! Discr?tisation 9 9 INTEGER nlev_cas, nt_cas -
LMDZ6/branches/Amaury_dev/libf/phylmd/dyn1d/mod_1D_cases_read2.F90
r5117 r5135 7 7 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 8 8 !Declarations specifiques au cas standard 9 character*80 :: fich_cas9 CHARACTER*80 :: fich_cas 10 10 ! Discr?tisation 11 11 INTEGER nlev_cas, nt_cas … … 563 563 parameter(nbvar3d=39) 564 564 INTEGER var3didin(nbvar3d) 565 character*5 name_var(1:nbvar3d)565 CHARACTER*5 name_var(1:nbvar3d) 566 566 data name_var/'zz','pp','temp','qv','rh','theta','rv','u','v','ug','vg','w','advu','hu','vu',& 567 567 'advv','hv','vv','advT','hT','vT','advq','hq','vq','advth','hth','vth','advr','hr','vr',& … … 680 680 parameter(nbvar3d=62) 681 681 INTEGER var3didin(nbvar3d),missing_var(nbvar3d) 682 character*12 name_var(1:nbvar3d)682 CHARACTER*12 name_var(1:nbvar3d) 683 683 data name_var/'coor_par_a','coor_par_b','height_h','pressure_h',& 684 684 'w','omega','ug','vg','uadv','uadvh','uadvv','vadv','vadvh','vadvv','tadv','tadvh','tadvv',& … … 852 852 parameter(nbvar3d=70) 853 853 INTEGER var3didin(nbvar3d),missing_var(nbvar3d) 854 character*13 name_var(1:nbvar3d)854 CHARACTER*13 name_var(1:nbvar3d) 855 855 data name_var/'coor_par_a','coor_par_b','height_h','pressure_h',& 856 856 'temp','qv','ql','qi','u','v','tke','pressure',& -
LMDZ6/branches/Amaury_dev/libf/phylmd/dyn1d/mod_1D_cases_read_std.F90
r5117 r5135 8 8 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 9 9 !Declarations specifiques au cas standard 10 character*80 :: fich_cas10 CHARACTER*80 :: fich_cas 11 11 ! Discr?tisation 12 12 INTEGER nlev_cas, nt_cas … … 365 365 parameter(nbvar3d=78) 366 366 INTEGER var3didin(nbvar3d),missing_var(nbvar3d) 367 character*13 name_var(1:nbvar3d)367 CHARACTER*13 name_var(1:nbvar3d) 368 368 369 369 -
LMDZ6/branches/Amaury_dev/libf/phylmd/dyn1d/old_1DUTILS_read_interp.h
r5119 r5135 16 16 REAL ht_toga(nlev_toga,nt_toga),vt_toga(nlev_toga,nt_toga) 17 17 REAL hq_toga(nlev_toga,nt_toga),vq_toga(nlev_toga,nt_toga) 18 character*80 fich_toga18 CHARACTER*80 fich_toga 19 19 20 20 INTEGER k,ip … … 73 73 INTEGER nlev_sandu,nt_sandu 74 74 REAL ts_sandu(nt_sandu) 75 character*80 fich_sandu75 CHARACTER*80 fich_sandu 76 76 77 77 INTEGER ip … … 111 111 REAL div_astex(nt_astex),ts_astex(nt_astex),ug_astex(nt_astex) 112 112 REAL vg_astex(nt_astex),ufa_astex(nt_astex),vfa_astex(nt_astex) 113 character*80 fich_astex113 CHARACTER*80 fich_astex 114 114 115 115 INTEGER ip … … 154 154 INTEGER ntime,nlevel 155 155 INTEGER l,k 156 character*80 :: fich_twpice156 CHARACTER*80 :: fich_twpice 157 157 real*8 time(ntime) 158 158 real*8 lat, lon, alt, phis … … 794 794 REAL prico(nlev_rico),zrico(nlev_rico) 795 795 796 character*80 fich_rico796 CHARACTER*80 fich_rico 797 797 798 798 INTEGER k,l … … 1019 1019 REAL sens(nt_armcu),flat(nt_armcu) 1020 1020 REAL adv_theta(nt_armcu),rad_theta(nt_armcu),adv_qt(nt_armcu) 1021 character*80 fich_armcu1021 CHARACTER*80 fich_armcu 1022 1022 1023 1023 INTEGER ip … … 2164 2164 2165 2165 INTEGER ntime,nlevel 2166 character*80 :: fich_fire2166 CHARACTER*80 :: fich_fire 2167 2167 real*8 zz(nlevel) 2168 2168 … … 2378 2378 INTEGER ntime,nlevel 2379 2379 INTEGER l,k 2380 character*80 :: fich_dice2380 CHARACTER*80 :: fich_dice 2381 2381 real*8 time(ntime) 2382 2382 real*8 zz(nlevel) … … 2710 2710 INTEGER ntime,nlevel,nsol 2711 2711 INTEGER l,k 2712 character*80 :: fich_gabls42712 CHARACTER*80 :: fich_gabls4 2713 2713 real*8 time(ntime) 2714 2714 -
LMDZ6/branches/Amaury_dev/libf/phylmd/dyn1d/old_1D_decl_cases.h
r5117 r5135 1 1 2 2 ! Declarations specifiques au cas Toga 3 character*80 :: fich_toga3 CHARACTER*80 :: fich_toga 4 4 ! integer nlev_prof 5 5 ! parameter (nlev_prof = 41) … … 40 40 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 41 41 ! Declarations specifiques au cas RICO 42 character*80 :: fich_rico42 CHARACTER*80 :: fich_rico 43 43 INTEGER nlev_rico 44 44 … … 52 52 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 53 53 ! Declarations specifiques au cas TWPice 54 character*80 :: fich_twpice54 CHARACTER*80 :: fich_twpice 55 55 INTEGER nlev_twpi, nt_twpi 56 56 parameter (nlev_twpi=40, nt_twpi=215) … … 82 82 83 83 !Declarations specifiques au cas FIRE 84 character*80 :: fich_fire84 CHARACTER*80 :: fich_fire 85 85 INTEGER nlev_fire, nt_fire 86 86 parameter (nlev_fire=120, nt_fire=1) … … 94 94 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 95 95 !Declarations specifiques au cas GABLS4 (MPL 20141023) 96 character*80 :: fich_gabls496 CHARACTER*80 :: fich_gabls4 97 97 INTEGER nlev_gabls4, nt_gabls4, nsol_gabls4 98 98 parameter (nlev_gabls4=90, nt_gabls4=37, nsol_gabls4=19) … … 128 128 129 129 !Declarations specifiques au cas DICE (MPL 02072013) 130 character*80 :: fich_dice130 CHARACTER*80 :: fich_dice 131 131 INTEGER nlev_dice, nt_dice 132 132 parameter (nlev_dice=70, nt_dice=145) … … 174 174 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 175 175 ! Declarations specifiques au cas GCSSold 176 character*80 :: fich_gcssold_ctl177 character*80 :: fich_gcssold_dat176 CHARACTER*80 :: fich_gcssold_ctl 177 CHARACTER*80 :: fich_gcssold_dat 178 178 real ht_gcssold(llm),hq_gcssold(llm),hw_gcssold(llm) 179 179 real hu_gcssold(llm) … … 189 189 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 190 190 ! Declarations specifiques au cas Arm_cu 191 character*80 :: fich_armcu191 CHARACTER*80 :: fich_armcu 192 192 193 193 … … 214 214 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 215 215 ! declarations specifiques au cas Sandu 216 character*80 :: fich_sandu216 CHARACTER*80 :: fich_sandu 217 217 ! integer nlev_prof 218 218 ! parameter (nlev_prof = 41) … … 252 252 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 253 253 ! Declarations specifiques au cas Astex 254 character*80 :: fich_astex254 CHARACTER*80 :: fich_astex 255 255 INTEGER nlev_astex, nt_astex 256 256 parameter (nlev_astex=34, nt_astex=49) -
LMDZ6/branches/Amaury_dev/libf/phylmd/dyn1d/replay1d.F90
r5128 r5135 6 6 USE comvert_mod, ONLY: preff, pa 7 7 USE ioipsl, ONLY: getin 8 USE lmdz_iotd, ONLY: iotd_ini 8 9 9 10 IMPLICIT NONE -
LMDZ6/branches/Amaury_dev/libf/phylmd/ener_conserv.F90
r5134 r5135 56 56 REAL ZRCPD 57 57 58 character*80 abort_message59 character*20 :: modname58 CHARACTER*80 abort_message 59 CHARACTER*20 :: modname 60 60 61 61 -
LMDZ6/branches/Amaury_dev/libf/phylmd/iophys.F90
r5134 r5135 4 4 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 5 5 6 SUBROUTINE iophys_ecrit(nom,lllm,titre,unite,px) 7 8 USE lmdz_phys_para, ONLY: klon_omp, is_mpi_root 9 USE lmdz_phys_transfert_para, ONLY: gather 10 USE lmdz_grid_phy, ONLY: klon_glo, nbp_lon, nbp_lat, grid1dto2d_glo 11 IMPLICIT NONE 12 13 14 15 ! Ecriture de variables diagnostiques au choix dans la physique 16 ! dans un fichier NetCDF nomme 'diagfi'. Ces variables peuvent etre 17 ! 3d (ex : temperature), 2d (ex : temperature de surface), ou 18 ! 0d (pour un scalaire qui ne depend que du temps : ex : la longitude 19 ! solaire) 20 ! (ou encore 1d, dans le cas de testphys1d, pour sortir une colonne) 21 ! La periode d'ecriture est donnee par 22 ! "ecritphy " regle dans le fichier de controle de run : run.def 23 24 ! writediagfi peut etre appele de n'importe quelle subroutine 25 ! de la physique, plusieurs fois. L'initialisation et la creation du 26 ! fichier se fait au tout premier appel. 27 28 ! WARNING : les variables dynamique (u,v,t,q,ps) 29 ! sauvees par writediagfi avec une 30 ! date donnee sont legerement differentes que dans le fichier histoire car 31 ! on ne leur a pas encore ajoute de la dissipation et de la physique !!! 32 ! IL est RECOMMANDE d'ajouter les tendance physique a ces variables 33 ! avant l'ecriture dans diagfi (cf. physiq.F) 34 35 ! Modifs: Aug.2010 Ehouarn: enforce outputs to be real*4 36 37 ! parametres (input) : 38 ! ---------- 39 ! unit : unite logique du fichier de sortie (toujours la meme) 40 ! nom : nom de la variable a sortir (chaine de caracteres) 41 ! titre: titre de la variable (chaine de caracteres) 42 ! unite : unite de la variable (chaine de caracteres) 43 ! px : variable a sortir (real 0, 1, 2, ou 3d) 44 45 !================================================================= 46 47 48 ! Arguments on input: 49 INTEGER lllm 50 CHARACTER (LEN=*) :: nom,titre,unite 51 INTEGER imjmax 52 parameter (imjmax=100000) 53 REAL px(klon_omp,lllm) 54 REAL xglo(klon_glo,lllm) 55 REAL zx(nbp_lon,nbp_lat,lllm) 56 57 58 59 CALL Gather(px,xglo) 60 !$OMP MASTER 61 IF (is_mpi_root) THEN 62 CALL Grid1Dto2D_glo(xglo,zx) 63 CALL iotd_ecrit(nom,lllm,titre,unite,zx) 64 ENDIF 65 !$OMP END MASTER 66 67 RETURN 68 end 6 SUBROUTINE iophys_ecrit(nom, lllm, titre, unite, px) 7 8 USE lmdz_phys_para, ONLY: klon_omp, is_mpi_root 9 USE lmdz_phys_transfert_para, ONLY: gather 10 USE lmdz_grid_phy, ONLY: klon_glo, nbp_lon, nbp_lat, grid1dto2d_glo 11 USE lmdz_iotd, ONLY: iotd_ecrit 12 13 14 IMPLICIT NONE 15 16 17 18 ! Ecriture de variables diagnostiques au choix dans la physique 19 ! dans un fichier NetCDF nomme 'diagfi'. Ces variables peuvent etre 20 ! 3d (ex : temperature), 2d (ex : temperature de surface), ou 21 ! 0d (pour un scalaire qui ne depend que du temps : ex : la longitude 22 ! solaire) 23 ! (ou encore 1d, dans le cas de testphys1d, pour sortir une colonne) 24 ! La periode d'ecriture est donnee par 25 ! "ecritphy " regle dans le fichier de controle de run : run.def 26 27 ! writediagfi peut etre appele de n'importe quelle subroutine 28 ! de la physique, plusieurs fois. L'initialisation et la creation du 29 ! fichier se fait au tout premier appel. 30 31 ! WARNING : les variables dynamique (u,v,t,q,ps) 32 ! sauvees par writediagfi avec une 33 ! date donnee sont legerement differentes que dans le fichier histoire car 34 ! on ne leur a pas encore ajoute de la dissipation et de la physique !!! 35 ! IL est RECOMMANDE d'ajouter les tendance physique a ces variables 36 ! avant l'ecriture dans diagfi (cf. physiq.F) 37 38 ! Modifs: Aug.2010 Ehouarn: enforce outputs to be real*4 39 40 ! parametres (input) : 41 ! ---------- 42 ! unit : unite logique du fichier de sortie (toujours la meme) 43 ! nom : nom de la variable a sortir (chaine de caracteres) 44 ! titre: titre de la variable (chaine de caracteres) 45 ! unite : unite de la variable (chaine de caracteres) 46 ! px : variable a sortir (real 0, 1, 2, ou 3d) 47 48 !================================================================= 49 50 51 ! Arguments on input: 52 INTEGER lllm 53 CHARACTER (LEN = *) :: nom, titre, unite 54 INTEGER imjmax 55 parameter (imjmax = 100000) 56 REAL px(klon_omp, lllm) 57 REAL xglo(klon_glo, lllm) 58 REAL zx(nbp_lon, nbp_lat, lllm) 59 60 CALL Gather(px, xglo) 61 !$OMP MASTER 62 IF (is_mpi_root) THEN 63 CALL Grid1Dto2D_glo(xglo, zx) 64 CALL iotd_ecrit(nom, lllm, titre, unite, zx) 65 ENDIF 66 !$OMP END MASTER 67 68 RETURN 69 end 69 70 70 71 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! … … 74 75 75 76 76 SUBROUTINE iophys_ecrit_index(nom,lllm,titre,unite,knon,knindex,px) 77 78 USE lmdz_phys_para, ONLY: klon_omp 79 USE dimphy, ONLY: klon 80 USE lmdz_grid_phy, ONLY: klon_glo 81 USE lmdz_abort_physic, ONLY: abort_physic 82 IMPLICIT NONE 83 84 ! This SUBROUTINE returns the sea surface temperature already read from limit.nc 85 86 ! Arguments on input: 87 INTEGER lllm 88 CHARACTER (len=*) :: nom,titre,unite 89 REAL px(klon_omp,lllm) 90 INTEGER, INTENT(IN) :: knon ! nomber of points on compressed grid 91 INTEGER, DIMENSION(klon), INTENT(IN) :: knindex ! grid point number for compressed grid 92 REAL, DIMENSION(klon,lllm) :: varout 93 94 INTEGER :: i,l 95 96 IF (klon/=klon_omp) THEN 97 PRINT*,'klon, klon_omp',klon,klon_omp 98 CALL abort_physic('iophys_ecrit','probleme de dimension parallele',1) 77 SUBROUTINE iophys_ecrit_index(nom, lllm, titre, unite, knon, knindex, px) 78 79 USE lmdz_phys_para, ONLY: klon_omp 80 USE dimphy, ONLY: klon 81 USE lmdz_grid_phy, ONLY: klon_glo 82 USE lmdz_abort_physic, ONLY: abort_physic 83 IMPLICIT NONE 84 85 ! This SUBROUTINE returns the sea surface temperature already read from limit.nc 86 87 ! Arguments on input: 88 INTEGER lllm 89 CHARACTER (len = *) :: nom, titre, unite 90 REAL px(klon_omp, lllm) 91 INTEGER, INTENT(IN) :: knon ! nomber of points on compressed grid 92 INTEGER, DIMENSION(klon), INTENT(IN) :: knindex ! grid point number for compressed grid 93 REAL, DIMENSION(klon, lllm) :: varout 94 95 INTEGER :: i, l 96 97 IF (klon/=klon_omp) THEN 98 PRINT*, 'klon, klon_omp', klon, klon_omp 99 CALL abort_physic('iophys_ecrit', 'probleme de dimension parallele', 1) 100 ENDIF 101 102 varout(1:klon, 1:lllm) = 0. 103 DO l = 1, lllm 104 DO i = 1, knon 105 varout(knindex(i), l) = px(i, l) 106 END DO 107 END DO 108 CALL iophys_ecrit(nom, lllm, titre, unite, varout) 109 110 END SUBROUTINE iophys_ecrit_index 111 112 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 113 SUBROUTINE iophys_ini(timestep) 114 USE lmdz_phys_para, ONLY: is_mpi_root 115 USE lmdz_vertical_layers, ONLY: presnivs 116 USE lmdz_regular_lonlat, ONLY: lon_reg, lat_reg 117 USE dimphy, ONLY: klev 118 USE lmdz_grid_phy, ONLY: klon_glo 119 USE time_phylmdz_mod, ONLY: annee_ref, day_ref, day_ini 120 USE phys_cal_mod, ONLY: calend 121 USE lmdz_iotd, ONLY: iotd_ini 122 123 IMPLICIT NONE 124 125 include "YOMCST.h" 126 !======================================================================= 127 128 ! Auteur: L. Fairhead , P. Le Van, Y. Wanherdrick, F. Forget 129 ! ------- 130 131 ! Objet: 132 ! ------ 133 134 ! 'Initialize' the diagfi.nc file: write down dimensions as well 135 ! as time-independent fields (e.g: geopotential, mesh area, ...) 136 137 !======================================================================= 138 !----------------------------------------------------------------------- 139 ! Declarations: 140 ! ------------- 141 142 REAL pi 143 INTEGER nlat_eff 144 INTEGER jour0, mois0, an0 145 REAL timestep, t0 146 CHARACTER(len = 20) :: calendrier 147 148 ! Arguments: 149 ! ---------- 150 151 152 !$OMP MASTER 153 IF (is_mpi_root) THEN 154 155 ! Bidouille pour gerer le fait que lat_reg contient deux latitudes 156 ! en version uni-dimensionnelle (chose qui pourrait être résolue 157 ! par ailleurs) 158 IF (klon_glo==1) THEN 159 nlat_eff = 1 160 ELSE 161 nlat_eff = size(lat_reg) 99 162 ENDIF 100 101 varout(1:klon,1:lllm)=0. 102 DO l = 1, lllm 103 DO i = 1, knon 104 varout(knindex(i),l) = px(i,l) 105 END DO 106 END DO 107 CALL iophys_ecrit(nom,lllm,titre,unite,varout) 108 109 END SUBROUTINE iophys_ecrit_index 110 111 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 112 SUBROUTINE iophys_ini(timestep) 113 USE lmdz_phys_para, ONLY: is_mpi_root 114 USE lmdz_vertical_layers, ONLY: presnivs 115 USE lmdz_regular_lonlat, ONLY: lon_reg, lat_reg 116 USE dimphy, ONLY: klev 117 USE lmdz_grid_phy, ONLY: klon_glo 118 USE time_phylmdz_mod, ONLY: annee_ref, day_ref, day_ini 119 USE phys_cal_mod, ONLY: calend 120 121 IMPLICIT NONE 122 123 include "YOMCST.h" 124 !======================================================================= 125 126 ! Auteur: L. Fairhead , P. Le Van, Y. Wanherdrick, F. Forget 127 ! ------- 128 129 ! Objet: 130 ! ------ 131 132 ! 'Initialize' the diagfi.nc file: write down dimensions as well 133 ! as time-independent fields (e.g: geopotential, mesh area, ...) 134 135 !======================================================================= 136 !----------------------------------------------------------------------- 137 ! Declarations: 138 ! ------------- 139 140 REAL pi 141 INTEGER nlat_eff 142 INTEGER jour0,mois0,an0 143 REAL timestep,t0 144 CHARACTER(len=20) :: calendrier 145 146 ! Arguments: 147 ! ---------- 148 149 150 !$OMP MASTER 151 IF (is_mpi_root) THEN 152 153 ! Bidouille pour gerer le fait que lat_reg contient deux latitudes 154 ! en version uni-dimensionnelle (chose qui pourrait être résolue 155 ! par ailleurs) 156 IF (klon_glo==1) THEN 157 nlat_eff=1 158 ELSE 159 nlat_eff=size(lat_reg) 160 ENDIF 161 pi=2.*asin(1.) 162 163 ! PRINT*,'day_ini,annee_ref,day_ref',day_ini,annee_ref,day_ref 164 ! PRINT*,'jD_ref,jH_ref,start_time, calend',jD_ref,jH_ref,start_time, calend 165 166 ! Attention : les lignes ci dessous supposent un calendrier en 360 jours 167 ! Pourrait être retravaillé 168 169 jour0=day_ref-30*(day_ref/30) 170 mois0=day_ref/30+1 171 an0=annee_ref 172 !FH BIZARE QUAND 1D ... t0=(day_ini-1)*RDAY 173 t0=0. 174 calendrier=calend 175 IF ( calendrier == "earth_360d" ) calendrier="360_day" 176 177 PRINT*,'iophys_ini annee_ref day_ref',annee_ref,day_ref,day_ini,calend,t0 178 179 180 CALL iotd_ini('phys.nc', & 181 size(lon_reg),nlat_eff,klev,lon_reg(:)*180./pi,lat_reg*180./pi,presnivs,jour0,mois0,an0,t0,timestep,calendrier) 182 ENDIF 183 !$OMP END MASTER 184 185 END 163 pi = 2. * asin(1.) 164 165 ! PRINT*,'day_ini,annee_ref,day_ref',day_ini,annee_ref,day_ref 166 ! PRINT*,'jD_ref,jH_ref,start_time, calend',jD_ref,jH_ref,start_time, calend 167 168 ! Attention : les lignes ci dessous supposent un calendrier en 360 jours 169 ! Pourrait être retravaillé 170 171 jour0 = day_ref - 30 * (day_ref / 30) 172 mois0 = day_ref / 30 + 1 173 an0 = annee_ref 174 !FH BIZARE QUAND 1D ... t0=(day_ini-1)*RDAY 175 t0 = 0. 176 calendrier = calend 177 IF (calendrier == "earth_360d") calendrier = "360_day" 178 179 PRINT*, 'iophys_ini annee_ref day_ref', annee_ref, day_ref, day_ini, calend, t0 180 181 CALL iotd_ini('phys.nc', & 182 size(lon_reg), nlat_eff, klev, lon_reg(:) * 180. / pi, lat_reg * 180. / pi, presnivs, jour0, mois0, an0, t0, timestep, calendrier) 183 ENDIF 184 !$OMP END MASTER 185 186 END 186 187 187 188 #ifdef und … … 214 215 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 215 216 216 SUBROUTINE iotd_ecrit_seq(nom,lllm,titre,unite,px) 217 218 IMPLICIT NONE 219 220 ! px arrive 221 222 INCLUDE "iotd.h" 223 224 225 ! Arguments on input: 226 INTEGER lllm 227 CHARACTER (LEN=*) :: nom,titre,unite 228 INTEGER imjmax 229 parameter (imjmax=100000) 230 REAL px(imjmax*lllm) 231 REAL, ALLOCATABLE :: zx(:,:,:) 232 INTEGER i,j,l,ijl 233 234 allocate(zx(imax,jmax,lllm)) 235 236 ijl=0 237 do l=1,lllm 238 ! Pole nord 239 ijl=ijl+1 240 do i=1,imax 241 zx(i,1,l)=px(ijl) 242 enddo 243 ! Grille normale 244 do j=2,jmax-1 245 do i=1,imax 246 ijl=ijl+1 247 zx(i,j,l)=px(ijl) 248 enddo 249 enddo 250 ! Pole sud 251 IF ( jmax > 1 ) THEN 252 ijl=ijl+1 253 do i=1,imax 254 zx(i,jmax,l)=px(ijl) 255 enddo 256 endif 217 SUBROUTINE iotd_ecrit_seq(nom, lllm, titre, unite, px) 218 USE lmdz_iotd, ONLY: iotd_ecrit, imax, jmax 219 220 IMPLICIT NONE 221 222 ! Arguments on input: 223 INTEGER lllm 224 CHARACTER (LEN = *) :: nom, titre, unite 225 INTEGER imjmax 226 parameter (imjmax = 100000) 227 REAL px(imjmax * lllm) 228 REAL, ALLOCATABLE :: zx(:, :, :) 229 INTEGER i, j, l, ijl 230 231 allocate(zx(imax, jmax, lllm)) 232 233 ijl = 0 234 do l = 1, lllm 235 ! Pole nord 236 ijl = ijl + 1 237 do i = 1, imax 238 zx(i, 1, l) = px(ijl) 239 enddo 240 ! Grille normale 241 do j = 2, jmax - 1 242 do i = 1, imax 243 ijl = ijl + 1 244 zx(i, j, l) = px(ijl) 257 245 enddo 258 259 CALL iotd_ecrit(nom,lllm,titre,unite,zx) 260 deallocate(zx) 261 262 RETURN 263 END 264 246 enddo 247 ! Pole sud 248 IF (jmax > 1) THEN 249 ijl = ijl + 1 250 do i = 1, imax 251 zx(i, jmax, l) = px(ijl) 252 enddo 253 endif 254 enddo 255 256 CALL iotd_ecrit(nom, lllm, titre, unite, zx) 257 deallocate(zx) 258 259 RETURN 260 END 261 -
LMDZ6/branches/Amaury_dev/libf/phylmd/lmdz_iotd.f90
r5131 r5135 10 10 !======================================================================= 11 11 12 INTEGER imax,jmax,lmax,nid 13 INTEGER dim_coord(4) 14 REAL iotd_ts,iotd_t0 15 INTEGER :: n_names_iotd_def 16 character*20, DIMENSION(200) :: names_iotd_def 17 character*20 :: un_nom 18 19 common/iotd_ca/imax,jmax,lmax,nid,dim_coord,iotd_t0,iotd_ts 20 common/iotd_cb/n_names_iotd_def,names_iotd_def 21 !$OMP THREADPRIVATE(/iotd_ca/) 22 !$OMP THREADPRIVATE(/iotd_cb/) 12 MODULE lmdz_iotd 13 IMPLICIT NONE; PRIVATE 14 PUBLIC iotd_fin, iotd_ecrit, iotd_ini, imax, jmax 15 16 INTEGER imax, jmax, lmax, nid 17 INTEGER dim_coord(4) 18 REAL iotd_ts, iotd_t0 19 INTEGER :: n_names_iotd_def 20 CHARACTER*20, DIMENSION(200) :: names_iotd_def 21 CHARACTER*20 :: un_nom 22 23 !$OMP THREADPRIVATE(imax, jmax, lmax, nid, dim_coord, iotd_t0, iotd_ts) 24 !$OMP THREADPRIVATE(n_names_iotd_def, names_iotd_def) 25 CONTAINS 26 SUBROUTINE iotd_fin 27 USE netcdf, ONLY: nf90_close 28 IMPLICIT NONE 29 INTEGER ierr 30 31 ierr = nf90_close(nid) 32 END SUBROUTINE iotd_fin 33 34 SUBROUTINE iotd_ecrit(nom, llm, titre, unite, px) 35 !----------------------------------------------------------------------- 36 ! ---------- 37 ! nom : nom de la variable a sortir (chaine de caracteres) 38 ! llm : nombre de couches 39 ! titre: titre de la variable (chaine de caracteres) 40 ! unite : unite de la variable (chaine de caracteres) 41 ! px : variable a sortir 42 !================================================================= 43 44 USE netcdf, ONLY: nf90_put_var, nf90_inq_varid, nf90_enddef, nf90_redef, nf90_sync, nf90_noerr, & 45 nf90_float, nf90_def_var 46 IMPLICIT NONE 47 48 ! Arguments on input: 49 INTEGER llm 50 CHARACTER (LEN = *) :: nom, titre, unite 51 INTEGER imjmax 52 parameter (imjmax = 100000) 53 REAL px(imjmax * llm) 54 55 ! Local variables: 56 57 real(kind = 4) date 58 real(kind = 4) zx(imjmax * llm) 59 60 INTEGER ierr, ndim, dim_cc(4) 61 INTEGER iq 62 INTEGER i, j, l 63 64 INTEGER zitau 65 CHARACTER firstnom*20 66 SAVE firstnom 67 SAVE zitau 68 SAVE date 69 DATA firstnom /'1234567890'/ 70 DATA zitau /0/ 71 72 ! Ajouts 73 INTEGER, save :: ntime = 0 74 INTEGER :: idim, varid 75 CHARACTER (LEN = 50) :: fichnom 76 INTEGER, DIMENSION(4) :: id 77 INTEGER, DIMENSION(4) :: edges, corner 78 79 IF (n_names_iotd_def>0 .and..not.any(names_iotd_def==nom)) RETURN 80 !*************************************************************** 81 ! Initialisation of 'firstnom' and create/open the "diagfi.nc" NetCDF file 82 ! ------------------------------------------------------------------------ 83 ! (Au tout premier appel de la SUBROUTINE durant le run.) 84 85 86 !-------------------------------------------------------- 87 ! Write the variables to output file if it's time to do so 88 !-------------------------------------------------------- 89 90 91 ! Compute/write/extend 'time' coordinate (date given in days) 92 ! (done every "first call" (at given time level) to writediagfi) 93 ! Note: date is incremented as 1 step ahead of physics time 94 !-------------------------------------------------------- 95 96 zx(1:imax * jmax * llm) = px(1:imax * jmax * llm) 97 IF (firstnom =='1234567890') THEN 98 firstnom = nom 99 endif 100 101 !PRINT*,'nom ',nom,firstnom 102 103 !! Quand on tombe sur la premiere variable on ajoute un pas de temps 104 IF (nom==firstnom) THEN 105 ! We have identified a "first call" (at given date) 106 107 ntime = ntime + 1 ! increment # of stored time steps 108 109 !! PRINT*,'ntime ',ntime 110 date = iotd_t0 + ntime * iotd_ts 111 !PRINT*,'iotd_ecrit ',iotd_ts,ntime, date 112 ! date= float (zitau +1)/float (day_step) 113 114 ! compute corresponding date (in days and fractions thereof) 115 ! Get NetCDF ID of 'time' variable 116 117 ierr = nf90_sync(nid) 118 119 ierr = nf90_inq_varid(nid, "time", varid) 120 ! Write (append) the new date to the 'time' array 121 122 ierr = nf90_put_var(nid, varid, date, [ntime]) 123 124 ! PRINT*,'date ',date,ierr,nid 125 ! PRINT*,'IOTD Date ,varid,nid,ntime,date',varid,nid,ntime,date 126 127 IF (ierr/=nf90_noerr) THEN 128 WRITE(*, *) "***** PUT_VAR matter in writediagfi_nc" 129 WRITE(*, *) "***** with time" 130 WRITE(*, *) 'ierr=', ierr 131 endif 132 133 ! WRITE(6,*)'WRITEDIAGFI: date= ', date 134 end if ! of if (nom.EQ.firstnom) 135 136 137 !Case of a 3D variable 138 !--------------------- 139 IF (llm==lmax) THEN 140 ndim = 4 141 corner(1) = 1 142 corner(2) = 1 143 corner(3) = 1 144 corner(4) = ntime 145 edges(1) = imax 146 edges(2) = jmax 147 edges(3) = llm 148 edges(4) = 1 149 dim_cc = dim_coord 150 151 152 !Case of a 2D variable 153 !--------------------- 154 155 ELSE IF (llm==1) THEN 156 ndim = 3 157 corner(1) = 1 158 corner(2) = 1 159 corner(3) = ntime 160 corner(4) = 1 161 edges(1) = imax 162 edges(2) = jmax 163 edges(3) = 1 164 edges(4) = 1 165 dim_cc(1:2) = dim_coord(1:2) 166 dim_cc(3) = dim_coord(4) 167 168 END IF ! of if llm=1 ou llm 169 170 ! AU premier pas de temps, on crée les variables 171 !----------------------------------------------- 172 173 IF (ntime==1) THEN 174 ierr = nf90_redef (nid) 175 ierr = nf90_def_var(nid, nom, nf90_float, dim_cc, varid) 176 !PRINT*,'DEF ',nom,nid,varid 177 ierr = nf90_enddef(nid) 178 ELSE 179 ierr = nf90_inq_varid(nid, nom, varid) 180 !PRINT*,'INQ ',nom,nid,varid 181 ! Commandes pour recuperer automatiquement les coordonnees 182 ! ierr= nf90_inq_dimid(nid,"longitude",id(1)) 183 END IF 184 185 ierr = nf90_put_var(nid, varid, zx, corner, edges) 186 187 IF (ierr/=nf90_noerr) THEN 188 WRITE(*, *) "***** PUT_VAR problem in writediagfi" 189 WRITE(*, *) "***** with ", nom 190 WRITE(*, *) 'ierr=', ierr 191 endif 192 193 END 194 195 SUBROUTINE iotd_ini(fichnom, iim, jjm, llm, prlon, prlat, pcoordv, jour0, mois0, an0, t0, timestep, calendrier) 196 USE netcdf, ONLY: nf90_enddef, nf90_put_att, nf90_float, nf90_def_var, nf90_redef, & 197 nf90_global, nf90_def_dim, nf90_create, nf90_clobber, nf90_unlimited, nf90_put_var 198 IMPLICIT NONE 199 200 INTEGER iim, jjm, llm 201 REAL prlon(iim), prlat(jjm), pcoordv(llm), timestep, t0 202 INTEGER id_FOCE 203 INTEGER jour0, mois0, an0 204 CHARACTER*(*) calendrier 205 206 INTEGER corner(4), edges(4), ndim 207 real px(1000) 208 CHARACTER (LEN = 10) :: nom 209 real(kind = 4) rlon(iim), rlat(jjm), coordv(llm) 210 211 ! Local: 212 ! ------ 213 CHARACTER*3, DIMENSION(12) :: cmois = (/'JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'/) 214 CHARACTER*10 date0 215 CHARACTER*11 date0b 216 217 INTEGER :: ierr 218 219 INTEGER :: nvarid 220 INTEGER, DIMENSION(2) :: id 221 222 CHARACTER*(*) fichnom 223 224 REAL pi 225 226 iotd_ts = timestep 227 iotd_t0 = t0 228 PRINT*, 'iotd_ini, ', timestep, iotd_ts 229 imax = iim 230 jmax = jjm 231 lmax = llm 232 ! Utile pour passer en real*4 pour les ecritures 233 rlon = prlon 234 rlat = prlat 235 coordv = pcoordv 236 237 238 !----------------------------------------------------------------------- 239 ! Possibilité de spécifier une liste de variables à sortir 240 ! dans iotd.def 241 ! Si iotd.def existe et est non vide, 242 ! seules les variables faisant à la fois l'objet d'un CALL iotd_ecrit 243 ! et étant spécifiées dans iotd.def sont sorties. 244 ! Sinon, toutes les variables faisant l'objet d'un CALL iotd_ecrit 245 ! sont sorties 246 !----------------------------------------------------------------------- 247 n_names_iotd_def = 0 248 open(99, file = 'iotd.def', form = 'formatted', status = 'old', iostat = ierr) 249 IF (ierr==0) THEN 250 ierr = 0 251 do while (ierr==0) 252 read(99, *, iostat = ierr) un_nom 253 IF (ierr==0) THEN 254 n_names_iotd_def = n_names_iotd_def + 1 255 names_iotd_def(n_names_iotd_def) = un_nom 256 endif 257 enddo 258 endif 259 PRINT*, n_names_iotd_def, names_iotd_def(1:n_names_iotd_def) 260 close(99) 261 262 pi = 2. * asin(1.) 263 264 ! Define dimensions 265 266 ! Create the NetCDF file 267 ierr = nf90_create(fichnom, nf90_clobber, nid) 268 ierr = nf90_def_dim(nid, "lon", iim, dim_coord(1)) 269 ierr = nf90_def_dim(nid, "lat", jjm, dim_coord(2)) 270 ierr = nf90_def_dim(nid, "lev", llm, dim_coord(3)) 271 ierr = nf90_def_dim(nid, "time", nf90_unlimited, dim_coord(4)) 272 ierr = nf90_put_att(nid, nf90_global, 'Conventions', "CF-1.1") 273 !ierr = nf90_put_att(nid,nf90_global,'file_name',TRIM(fname)) 274 ierr = nf90_enddef(nid) 275 276 ! Switch out of NetCDF Define mode 277 278 ierr = nf90_enddef(nid) 279 280 ! Contol parameters for this run 281 ! ---- longitude ----------- 282 283 ierr = nf90_redef(nid) 284 ierr = nf90_def_var(nid, "lon", nf90_float, dim_coord(1), nvarid) 285 ierr = nf90_put_att(nid, nvarid, 'axis', 'X') 286 ierr = nf90_put_att(nid, nvarid, 'units', "degrees_east") 287 ierr = nf90_enddef(nid) 288 ierr = nf90_put_var(nid, nvarid, rlon) 289 PRINT*, ierr 290 291 ! ---- latitude ------------ 292 ierr = nf90_redef(nid) 293 ierr = nf90_def_var(nid, "lat", nf90_float, dim_coord(2), nvarid) 294 ierr = nf90_put_att(nid, nvarid, 'axis', 'Y') 295 ierr = nf90_put_att(nid, nvarid, 'units', "degrees_north") 296 ierr = nf90_enddef(nid) 297 ierr = nf90_put_var(nid, nvarid, rlat) 298 299 ! ---- vertical ------------ 300 ierr = nf90_redef(nid) 301 ierr = nf90_def_var(nid, "lev", nf90_float, dim_coord(3), nvarid) 302 ierr = nf90_put_att(nid, nvarid, "long_name", "vert level") 303 IF (coordv(2)>coordv(1)) THEN 304 ierr = nf90_put_att(nid, nvarid, "long_name", "pseudo-alt") 305 ierr = nf90_put_att(nid, nvarid, 'positive', "up") 306 else 307 ierr = nf90_put_att(nid, nvarid, "long_name", "pressure") 308 ierr = nf90_put_att(nid, nvarid, 'positive', "down") 309 endif 310 ierr = nf90_enddef(nid) 311 ierr = nf90_put_var(nid, nvarid, coordv) 312 313 ! ---- time ---------------- 314 ierr = nf90_redef(nid) 315 ! Define the 'time' variable 316 ierr = nf90_def_var(nid, "time", nf90_float, dim_coord(4), nvarid) 317 ! ! Add attributes 318 ierr = nf90_put_att(nid, nvarid, 'axis', 'T') 319 ierr = nf90_put_att(nid, nvarid, 'standard_name', 'time') 320 WRITE(date0, '(i4.4,"-",i2.2,"-",i2.2)') an0, mois0, jour0 321 ierr = nf90_put_att(nid, nvarid, 'units', & 322 "seconds since " // date0 // " 00:00:00") 323 ierr = nf90_put_att(nid, nvarid, 'calendar', calendrier) 324 !ierr = nf90_put_att(nid,nvarid,'calendar','360d') 325 ierr = nf90_put_att(nid, nvarid, 'title', 'Time') 326 ierr = nf90_put_att(nid, nvarid, 'long_name', 'Time axis') 327 WRITE(date0b, '(i4.4,"-",a3,"-",i2.2)') an0, cmois(mois0), jour0 328 ierr = nf90_put_att(nid, nvarid, 'time_origin', & 329 date0b // ' 00:00:00') 330 ierr = nf90_enddef(nid) 331 332 END 333 334 END MODULE lmdz_iotd -
LMDZ6/branches/Amaury_dev/libf/phylmd/lmdz_simu_airs.f90
r5128 r5135 1086 1086 1087 1087 REAL, INTENT(IN) :: x, bsup, binf 1088 character*14, INTENT(IN) :: sx1088 CHARACTER*14, INTENT(IN) :: sx 1089 1089 CHARACTER (len = 50) :: modname = 'simu_airs.test_bornes' 1090 1090 CHARACTER (len = 160) :: abort_message -
LMDZ6/branches/Amaury_dev/libf/phylmd/lmdz_thermcell_main.F90
r5123 r5135 827 827 INTEGER, INTENT(IN), DIMENSION(ngrid) :: long 828 828 REAL seuil 829 character*21 comment829 CHARACTER*21 comment 830 830 831 831 seuil = 0.25 -
LMDZ6/branches/Amaury_dev/libf/phylmdiso/isotopes_routines_mod.F90
r5133 r5135 15748 15748 INTEGER ixt,i,k,nsrf 15749 15749 15750 ! character*50 text15750 ! CHARACTER*50 text 15751 15751 15752 15752 ! WRITE(*,*) 'phyisoetat0 20: fichnom=',fichnom … … 15931 15931 REAL deltaD_snow_fall_O18,deltaD_rain_fall_O18 15932 15932 REAL alpha(niso),kcin(niso) 15933 ! character*50 text15933 ! CHARACTER*50 text 15934 15934 15935 15935 ! initialisation des isotopes -
LMDZ6/branches/Amaury_dev/libf/phylmdiso/isotopes_verif_mod.F90
r5132 r5135 144 144 ! input: 145 145 REAL a, b 146 character*(*) err_msg ! message d''erreur à afficher146 CHARACTER*(*) err_msg ! message d''erreur à afficher 147 147 148 148 ! local … … 173 173 ! input: 174 174 REAL a, b 175 character*(*) err_msg ! message d''erreur à afficher175 CHARACTER*(*) err_msg ! message d''erreur à afficher 176 176 !ouptut 177 177 INTEGER iso_verif_egalite_nostop … … 204 204 ! input: 205 205 REAL R 206 character*(*) err_msg ! message d''erreur à afficher206 CHARACTER*(*) err_msg ! message d''erreur à afficher 207 207 !real deltaD 208 208 !integer iso_verif_aberrant_choix_nostop … … 234 234 ! input: 235 235 REAL R 236 character*(*) err_msg ! message d''erreur à afficher236 CHARACTER*(*) err_msg ! message d''erreur à afficher 237 237 !real deltaD 238 238 … … 269 269 ! input: 270 270 REAL xt,q,qmin,deltaDmax 271 character*(*) err_msg ! message d''erreur à afficher271 CHARACTER*(*) err_msg ! message d''erreur à afficher 272 272 !real deltaD 273 273 … … 303 303 ! input: 304 304 REAL R 305 character*(*) err_msg ! message d''erreur à afficher305 CHARACTER*(*) err_msg ! message d''erreur à afficher 306 306 INTEGER iso_verif_aberrant_nostop ! output: 1 si erreur, 0 sinon 307 307 !real deltaD … … 334 334 ! input: 335 335 REAL R 336 character*(*) err_msg ! message d''erreur à afficher336 CHARACTER*(*) err_msg ! message d''erreur à afficher 337 337 INTEGER iso_verif_aberrant_enc_nostop ! output: 1 si erreur, 0 sinon 338 338 !real deltaD … … 369 369 ! input: 370 370 REAL xt,q,qmin,deltaDmax 371 character*(*) err_msg ! message d''erreur à afficher371 CHARACTER*(*) err_msg ! message d''erreur à afficher 372 372 ! output 373 373 INTEGER iso_verif_aberrant_choix_nostop … … 430 430 ! input: 431 431 REAL xt,q,qmin,deltaDmax 432 character*(*) err_msg ! message d''erreur à afficher432 CHARACTER*(*) err_msg ! message d''erreur à afficher 433 433 ! output 434 434 INTEGER iso_verif_aberrant_enc_choix_nostop … … 474 474 ! input: 475 475 REAL R17,R18 476 character*(*) err_msg ! message d''erreur à afficher476 CHARACTER*(*) err_msg ! message d''erreur à afficher 477 477 !real o17excess 478 478 … … 506 506 ! input: 507 507 REAL R17,R18 508 character*(*) err_msg ! message d''erreur à afficher508 CHARACTER*(*) err_msg ! message d''erreur à afficher 509 509 !local 510 510 !real o17excess … … 545 545 ! input: 546 546 REAL x 547 character*(*) err_msg ! message d''erreur à afficher547 CHARACTER*(*) err_msg ! message d''erreur à afficher 548 548 549 549 ! locals … … 570 570 ! input: 571 571 REAL x 572 character*(*) err_msg ! message d''erreur à afficher572 CHARACTER*(*) err_msg ! message d''erreur à afficher 573 573 574 574 ! output … … 601 601 INTEGER n,m,ni 602 602 REAL x(ni,n,m) 603 character*(*) err_msg ! message d''erreur à afficher603 CHARACTER*(*) err_msg ! message d''erreur à afficher 604 604 605 605 ! output … … 640 640 INTEGER n,ni 641 641 REAL x(ni,n) 642 character*(*) err_msg ! message d''erreur à afficher642 CHARACTER*(*) err_msg ! message d''erreur à afficher 643 643 644 644 ! output … … 680 680 REAL a, b 681 681 REAL erabs,errel !erreur absolue et relative 682 character*(*) err_msg ! message d''erreur à afficher682 CHARACTER*(*) err_msg ! message d''erreur à afficher 683 683 684 684 ! locals … … 709 709 REAL a, b 710 710 REAL erabs,errel !erreur absolue et relative 711 character*(*) err_msg ! message d''erreur à afficher711 CHARACTER*(*) err_msg ! message d''erreur à afficher 712 712 713 713 ! output … … 762 762 ! input: 763 763 REAL x 764 character*(*) err_msg ! message d''erreur à afficher764 CHARACTER*(*) err_msg ! message d''erreur à afficher 765 765 766 766 ! locals … … 790 790 INTEGER n 791 791 REAL x(n) 792 character*(*) err_msg ! message d''erreur à afficher792 CHARACTER*(*) err_msg ! message d''erreur à afficher 793 793 794 794 ! locals … … 821 821 REAL x(n) 822 822 REAL ridic 823 character*(*) err_msg ! message d''erreur à afficher823 CHARACTER*(*) err_msg ! message d''erreur à afficher 824 824 ! locals 825 825 INTEGER i … … 852 852 ! input: 853 853 REAL x 854 character*(*) err_msg ! message d''erreur à afficher854 CHARACTER*(*) err_msg ! message d''erreur à afficher 855 855 856 856 ! locals … … 873 873 ! input: 874 874 REAL x 875 character*(*) err_msg ! message d''erreur à afficher*875 CHARACTER*(*) err_msg ! message d''erreur à afficher* 876 876 877 877 ! output … … 901 901 REAL x 902 902 REAL ridic 903 character*(*) err_msg ! message d''erreur à afficher903 CHARACTER*(*) err_msg ! message d''erreur à afficher 904 904 905 905 ! locals … … 929 929 ! input: 930 930 REAL x 931 character*(*) err_msg ! message d''erreur à afficher931 CHARACTER*(*) err_msg ! message d''erreur à afficher 932 932 933 933 ! output … … 960 960 REAL x 961 961 REAL ridic 962 character*(*) err_msg ! message d''erreur à afficher962 CHARACTER*(*) err_msg ! message d''erreur à afficher 963 963 964 964 ! output … … 997 997 ! input: 998 998 REAL Rd,Ro 999 character*(*) err_msg ! message d''erreur à afficher999 CHARACTER*(*) err_msg ! message d''erreur à afficher 1000 1000 1001 1001 ! local … … 1018 1018 ! input: 1019 1019 REAL Rd,Ro 1020 character*(*) err_msg ! message d''erreur à afficher1020 CHARACTER*(*) err_msg ! message d''erreur à afficher 1021 1021 1022 1022 ! outputs … … 1154 1154 REAL q(n,m) 1155 1155 REAL xt(ni,n,m) 1156 character*(*) err_msg1156 CHARACTER*(*) err_msg 1157 1157 1158 1158 ! locals … … 1205 1205 REAL q(n) 1206 1206 REAL xt(ni,n) 1207 character*(*) err_msg1207 CHARACTER*(*) err_msg 1208 1208 1209 1209 ! locals … … 1244 1244 REAL a(n,m) 1245 1245 REAL b(n,m) 1246 character*(*) err_msg1246 CHARACTER*(*) err_msg 1247 1247 REAL errmax,errmaxrel 1248 1248 … … 1287 1287 REAL q(n,m) 1288 1288 REAL xt(ni,n,m) 1289 character*(*) err_msg1289 CHARACTER*(*) err_msg 1290 1290 1291 1291 ! locals … … 1334 1334 REAL q(n,m) 1335 1335 REAL xt(ni,n,m) 1336 character*(*) err_msg1336 CHARACTER*(*) err_msg 1337 1337 1338 1338 ! locals … … 1386 1386 REAL q(n,m) 1387 1387 REAL xt(ni,n,m) 1388 character*(*) err_msg1388 CHARACTER*(*) err_msg 1389 1389 1390 1390 ! locals … … 1436 1436 REAL q(n,m) 1437 1437 REAL xt(ni,n,m) 1438 character*(*) err_msg1438 CHARACTER*(*) err_msg 1439 1439 REAL deltaDmax 1440 1440 … … 1484 1484 REAL q(n,m) 1485 1485 REAL xt(ni,n,m) 1486 character*(*) err_msg1486 CHARACTER*(*) err_msg 1487 1487 1488 1488 ! locals … … 1704 1704 INTEGER n,m,ni,ib,ie 1705 1705 REAL x(ni,n,m) 1706 character*(*) err_msg ! message d''erreur à afficher1706 CHARACTER*(*) err_msg ! message d''erreur à afficher 1707 1707 1708 1708 ! output … … 1746 1746 REAL q(n,m) 1747 1747 REAL xt(ni,n,m) 1748 character*(*) err_msg1748 CHARACTER*(*) err_msg 1749 1749 1750 1750 ! locals … … 1795 1795 REAL q(n,m) 1796 1796 REAL xt(ni,n,m) 1797 character*(*) err_msg1797 CHARACTER*(*) err_msg 1798 1798 1799 1799 ! locals … … 1841 1841 ! inputs 1842 1842 REAL x(ntraciso) 1843 character*(*) err_msg ! message d''erreur à afficher1843 CHARACTER*(*) err_msg ! message d''erreur à afficher 1844 1844 REAL errmax,errmaxrel,ridicule_trac,deltalimtrac 1845 1845 … … 1892 1892 ! inputs 1893 1893 REAL x(ntraciso) 1894 character*(*) err_msg ! message d''erreur à afficher1894 CHARACTER*(*) err_msg ! message d''erreur à afficher 1895 1895 REAL errmax,errmaxrel,ridicule_trac,deltalimtrac 1896 1896 … … 1931 1931 ! inputs 1932 1932 REAL x(ntraciso) 1933 character*(*) err_msg ! message d''erreur à afficher1933 CHARACTER*(*) err_msg ! message d''erreur à afficher 1934 1934 REAL seuil 1935 1935 … … 1961 1961 ! inputs 1962 1962 REAL x(ntraciso) 1963 character*(*) err_msg ! message d''erreur à afficher1963 CHARACTER*(*) err_msg ! message d''erreur à afficher 1964 1964 1965 1965 ! output … … 1993 1993 ! inputs 1994 1994 REAL x(ntraciso) 1995 character*(*) err_msg ! message d''erreur à afficher1995 CHARACTER*(*) err_msg ! message d''erreur à afficher 1996 1996 REAL errmaxin,errmaxrelin 1997 1997 … … 2050 2050 ! inputs 2051 2051 REAL x(ntraciso) 2052 character*(*) err_msg ! message d''erreur à afficher2052 CHARACTER*(*) err_msg ! message d''erreur à afficher 2053 2053 REAL ridicule_trac,deltalimtrac 2054 2054 … … 2135 2135 ! inputs 2136 2136 REAL x(ntraciso) 2137 character*(*) err_msg ! message d''erreur à afficher2137 CHARACTER*(*) err_msg ! message d''erreur à afficher 2138 2138 2139 2139 ! locals … … 2164 2164 INTEGER n1,n2,n3 2165 2165 REAL x(n1,n2,n3,ntraciso) 2166 character*(*) err_msg ! message d''erreur à afficher2166 CHARACTER*(*) err_msg ! message d''erreur à afficher 2167 2167 INTEGER i1,i2,i3 2168 2168 … … 2196 2196 INTEGER n1,n2,n3,n4 2197 2197 REAL x(n1,n2,n3,n4,ntraciso) 2198 character*(*) err_msg ! message d''erreur à afficher2198 CHARACTER*(*) err_msg ! message d''erreur à afficher 2199 2199 INTEGER i1,i2,i3,i4 2200 2200 … … 2228 2228 INTEGER n1,n2 2229 2229 REAL x(n1,n2,ntraciso) 2230 character*(*) err_msg ! message d''erreur à afficher2230 CHARACTER*(*) err_msg ! message d''erreur à afficher 2231 2231 INTEGER i1,i2 2232 2232 … … 2258 2258 INTEGER n,m 2259 2259 REAL x(ntraciso,n,m) 2260 character*(*) err_msg ! message d''erreur à afficher2260 CHARACTER*(*) err_msg ! message d''erreur à afficher 2261 2261 2262 2262 ! locals … … 2292 2292 INTEGER n,m 2293 2293 REAL x(ntraciso,n,m) 2294 character*(*) err_msg ! message d''erreur à afficher2294 CHARACTER*(*) err_msg ! message d''erreur à afficher 2295 2295 2296 2296 ! locals … … 2317 2317 INTEGER n,m 2318 2318 REAL x(ntraciso,n,m) 2319 character*(*) err_msg ! message d''erreur à afficher2319 CHARACTER*(*) err_msg ! message d''erreur à afficher 2320 2320 2321 2321 ! locals … … 2361 2361 INTEGER n,m 2362 2362 REAL x(ntraciso,n,m) 2363 character*(*) err_msg ! message d''erreur à afficher2363 CHARACTER*(*) err_msg ! message d''erreur à afficher 2364 2364 REAL errmax,errmaxrel 2365 2365 … … 2401 2401 INTEGER n,m 2402 2402 REAL x(ntraciso,n,m) 2403 character*(*) err_msg ! message d''erreur à afficher2403 CHARACTER*(*) err_msg ! message d''erreur à afficher 2404 2404 2405 2405 ! locals … … 2440 2440 INTEGER n,m 2441 2441 REAL x(ntraciso,n,m) 2442 character*(*) err_msg ! message d''erreur à afficher2442 CHARACTER*(*) err_msg ! message d''erreur à afficher 2443 2443 REAL seuil 2444 2444 … … 2488 2488 ! inputs 2489 2489 REAL x(ntraciso) 2490 character*(*) err_msg ! message d''erreur à afficher2490 CHARACTER*(*) err_msg ! message d''erreur à afficher 2491 2491 2492 2492 ! locals … … 2512 2512 ! inputs 2513 2513 REAL x(ntraciso) 2514 character*(*) err_msg ! message d''erreur à afficher2514 CHARACTER*(*) err_msg ! message d''erreur à afficher 2515 2515 REAL seuil 2516 2516 … … 2534 2534 ! inputs 2535 2535 REAL x(ntraciso) 2536 character*(*) err_msg ! message d''erreur à afficher2536 CHARACTER*(*) err_msg ! message d''erreur à afficher 2537 2537 REAL errmax,errmaxrel,ridicule_trac_loc,deltalimtrac 2538 2538 … … 2561 2561 ! inputs 2562 2562 REAL x(ntraciso) 2563 character*(*) err_msg ! message d''erreur à afficher2563 CHARACTER*(*) err_msg ! message d''erreur à afficher 2564 2564 2565 2565 ! output … … 2585 2585 ! inputs 2586 2586 REAL x(ntraciso) 2587 character*(*) err_msg ! message d''erreur à afficher2587 CHARACTER*(*) err_msg ! message d''erreur à afficher 2588 2588 2589 2589 ! locals … … 2613 2613 ! inputs 2614 2614 REAL x(ntraciso) 2615 character*(*) err_msg ! message d''erreur à afficher2615 CHARACTER*(*) err_msg ! message d''erreur à afficher 2616 2616 2617 2617 ! output … … 2644 2644 INTEGER n,m 2645 2645 REAL x(ntraciso,n,m) 2646 character*(*) err_msg2646 CHARACTER*(*) err_msg 2647 2647 2648 2648 ! locals … … 2702 2702 INTEGER n,m,nq 2703 2703 REAL x(n,m,nq,ntraciso) 2704 character*(*) err_msg2704 CHARACTER*(*) err_msg 2705 2705 2706 2706 ! locals -
LMDZ6/branches/Amaury_dev/libf/phylmdiso/isotrac_routines_mod.F90
r5117 r5135 2666 2666 ! inputs 2667 2667 REAL x(ntraciso) 2668 character*(*) err_msg ! message d''erreur à afficher2668 CHARACTER*(*) err_msg ! message d''erreur à afficher 2669 2669 2670 2670 ! local … … 2693 2693 ! inputs 2694 2694 REAL x(ntraciso) 2695 character*(*) err_msg ! message d''erreur à afficher2695 CHARACTER*(*) err_msg ! message d''erreur à afficher 2696 2696 2697 2697 ! output … … 2745 2745 INTEGER n,m 2746 2746 REAL x(ntraciso,n,m) 2747 character*(*) err_msg ! message d''erreur à afficher2747 CHARACTER*(*) err_msg ! message d''erreur à afficher 2748 2748 2749 2749 ! locals -
LMDZ6/branches/Amaury_dev/libf/phylmdiso/lmdz_iotd.f90
r5134 r5135 1 link ../phylmd/ iotd.h1 link ../phylmd/lmdz_iotd.f90
Note: See TracChangeset
for help on using the changeset viewer.