Changeset 1999 for LMDZ5/branches/testing/libf/phy1d/1DUTILS.h
- Timestamp:
- Mar 20, 2014, 10:57:19 AM (10 years ago)
- Location:
- LMDZ5/branches/testing
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/branches/testing
- Property svn:mergeinfo changed
/LMDZ5/trunk merged: 1922-1927,1929-1933,1937-1939,1943-1997
- Property svn:mergeinfo changed
-
LMDZ5/branches/testing/libf/phy1d/1DUTILS.h
r1921 r1999 4 4 c 5 5 c 6 SUBROUTINE conf_unicol ( tapedef )6 SUBROUTINE conf_unicol 7 7 c 8 8 #ifdef CPP_IOIPSL … … 15 15 c----------------------------------------------------------------------- 16 16 c Auteurs : A. Lahellec . 17 c18 c Arguments :19 c20 c tapedef :21 22 INTEGER tapedef23 17 c 24 18 c Declarations : … … 367 361 c Variables locales pour NetCDF: 368 362 c ------------------------------ 369 INTEGER nid, nvarid370 INTEGER idim_s371 INTEGER ierr, ierr_file372 363 INTEGER iq 373 364 INTEGER length … … 378 369 character*80 abort_message 379 370 LOGICAL found 380 c381 INTEGER nb382 371 383 372 modname = 'dyn1deta0 : ' … … 508 497 c ---------- 509 498 CHARACTER*(*) fichnom 510 REAL time511 499 cAl1 plev tronque pour .nc mais plev(klev+1):=0 512 500 real :: plev(klon,klev),play (klon,klev),phi(klon,klev) … … 520 508 c Variables locales pour NetCDF: 521 509 c ------------------------------ 522 INTEGER nid, nvarid 523 INTEGER idim_s 524 INTEGER ierr, ierr_file 510 INTEGER nid 511 INTEGER ierr 525 512 INTEGER iq,l 526 513 INTEGER length … … 535 522 DATA nb / 0 / 536 523 537 REAL zan0,zjulian,hours538 INTEGER yyears0,jjour0, mmois0539 character*30 unites540 541 cDbg542 524 CALL open_restartphy(fichnom) 543 525 print*,'redm1 ',fichnom,klon,klev,nqtot … … 550 532 ierr = NF_OPEN(fichnom, NF_WRITE, nid) 551 533 IF (ierr .NE. NF_NOERR) THEN 552 PRINT*,"Pb. d ouverture "//fichnom553 CALL abort 534 abort_message="Pb. d ouverture "//fichnom 535 CALL abort_gcm('Modele 1D',abort_message,1) 554 536 ENDIF 555 537 … … 661 643 ! traitement des point normaux 662 644 DO j=2,jm-1 663 645 ig=2+(j-2)*(im-1) 664 646 CALL SCOPY(im-1,pfi(ig,ifield),1,pdyn(1,j,ifield),1) 665 647 pdyn(im,j,ifield)=pdyn(1,j,ifield) 666 648 ENDDO 667 649 ENDDO … … 683 665 ! ierr = severity of situation ( = 0 normal ) 684 666 685 character *20modname667 character(len=*) modname 686 668 integer ierr 687 character *80message669 character(len=*) message 688 670 689 671 write(*,*) 'in abort_gcm' … … 764 746 RETURN 765 747 END 766 subroutine wrgradsfi(if,nl,field,name,titlevar) 767 implicit none 768 769 ! Declarations 770 771 #include "gradsdef.h" 772 773 ! arguments 774 integer if,nl 775 real field(imx*jmx*lmx) 776 character*10 name,file 777 character*10 titlevar 778 779 ! local 780 781 integer im,jm,lm,i,j,l,iv,iii,iji,iif,ijf 782 783 logical writectl 784 785 786 writectl=.false. 787 788 ! print*,if,iid(if),jid(if),ifd(if),jfd(if) 789 iii=iid(if) 790 iji=jid(if) 791 iif=ifd(if) 792 ijf=jfd(if) 793 im=iif-iii+1 794 jm=ijf-iji+1 795 lm=lmd(if) 796 797 798 ! print*,'im,jm,lm,name,firsttime(if)' 799 ! print*,im,jm,lm,name,firsttime(if) 800 801 if(firsttime(if)) then 802 if(name.eq.var(1,if)) then 803 firsttime(if)=.false. 804 ivar(if)=1 805 print*,'fin de l initialiation de l ecriture du fichier' 806 print*,file 807 print*,'fichier no: ',if 808 print*,'unit ',unit(if) 809 print*,'nvar ',nvar(if) 810 print*,'vars ',(var(iv,if),iv=1,nvar(if)) 811 else 812 ivar(if)=ivar(if)+1 813 nvar(if)=ivar(if) 814 var(ivar(if),if)=name 815 tvar(ivar(if),if)=trim(titlevar) 816 nld(ivar(if),if)=nl 817 print*,'initialisation ecriture de ',var(ivar(if),if) 818 print*,'if ivar(if) nld ',if,ivar(if),nld(ivar(if),if) 819 endif 820 writectl=.true. 821 itime(if)=1 822 else 823 ivar(if)=mod(ivar(if),nvar(if))+1 824 if (ivar(if).eq.nvar(if)) then 825 writectl=.true. 826 itime(if)=itime(if)+1 827 endif 828 829 if(var(ivar(if),if).ne.name) then 830 print*,'Il faut stoker la meme succession de champs a chaque' 831 print*,'pas de temps' 832 print*,'fichier no: ',if 833 print*,'unit ',unit(if) 834 print*,'nvar ',nvar(if) 835 print*,'vars ',(var(iv,if),iv=1,nvar(if)) 836 837 stop 838 endif 839 endif 840 841 ! print*,'ivar(if),nvar(if),var(ivar(if),if),writectl' 842 ! print*,ivar(if),nvar(if),var(ivar(if),if),writectl 843 do l=1,nl 844 irec(if)=irec(if)+1 845 ! print*,'Ecrit rec=',irec(if),iii,iif,iji,ijf, 846 ! s (l-1)*imd(if)*jmd(if)+(iji-1)*imd(if)+iii 847 ! s ,(l-1)*imd(if)*jmd(if)+(ijf-1)*imd(if)+iif 848 write(unit(if)+1,rec=irec(if)) 849 s ((field((l-1)*imd(if)*jmd(if)+(j-1)*imd(if)+i) 850 s ,i=iii,iif),j=iji,ijf) 851 enddo 852 if (writectl) then 853 854 file=fichier(if) 855 ! WARNING! on reecrase le fichier .ctl a chaque ecriture 856 open(unit(if),file=trim(file)//'.ctl', 857 & form='formatted',status='unknown') 858 write(unit(if),'(a5,1x,a40)') 859 & 'DSET ','^'//trim(file)//'.dat' 860 861 write(unit(if),'(a12)') 'UNDEF 1.0E30' 862 write(unit(if),'(a5,1x,a40)') 'TITLE ',title(if) 863 call formcoord(unit(if),im,xd(iii,if),1.,.false.,'XDEF') 864 call formcoord(unit(if),jm,yd(iji,if),1.,.true.,'YDEF') 865 call formcoord(unit(if),lm,zd(1,if),1.,.false.,'ZDEF') 866 write(unit(if),'(a4,i10,a30)') 867 & 'TDEF ',itime(if),' LINEAR 07AUG1998 30MN ' 868 write(unit(if),'(a4,2x,i5)') 'VARS',nvar(if) 869 do iv=1,nvar(if) 870 ! print*,'if,var(iv,if),nld(iv,if),nld(iv,if)-1/nld(iv,if)' 871 ! print*,if,var(iv,if),nld(iv,if),nld(iv,if)-1/nld(iv,if) 872 write(unit(if),1000) var(iv,if),nld(iv,if)-1/nld(iv,if) 873 & ,99,tvar(iv,if) 874 enddo 875 write(unit(if),'(a7)') 'ENDVARS' 876 ! 877 1000 format(a5,3x,i4,i3,1x,a39) 878 879 close(unit(if)) 880 881 endif ! writectl 882 883 return 884 885 END 886 887 subroutine inigrads(if,im 888 s ,x,fx,xmin,xmax,jm,y,ymin,ymax,fy,lm,z,fz 889 s ,dt,file,titlel) 890 891 892 implicit none 893 894 integer if,im,jm,lm,i,j,l 895 real x(im),y(jm),z(lm),fx,fy,fz,dt 896 real xmin,xmax,ymin,ymax 897 integer nf 898 899 character file*10,titlel*40 900 901 #include "gradsdef.h" 902 903 data unit/24,32,34,36,38,40,42,44,46,48/ 904 data nf/0/ 905 906 if (if.le.nf) stop'verifier les appels a inigrads' 907 908 print*,'Entree dans inigrads' 909 910 nf=if 911 title(if)=titlel 912 ivar(if)=0 913 914 fichier(if)=trim(file) 915 916 firsttime(if)=.true. 917 dtime(if)=dt 918 919 iid(if)=1 920 ifd(if)=im 921 imd(if)=im 922 do i=1,im 923 xd(i,if)=x(i)*fx 924 if(xd(i,if).lt.xmin) iid(if)=i+1 925 if(xd(i,if).le.xmax) ifd(if)=i 926 enddo 927 print*,'On stoke du point ',iid(if),' a ',ifd(if),' en x' 928 929 jid(if)=1 930 jfd(if)=jm 931 jmd(if)=jm 932 do j=1,jm 933 yd(j,if)=y(j)*fy 934 if(yd(j,if).gt.ymax) jid(if)=j+1 935 if(yd(j,if).ge.ymin) jfd(if)=j 936 enddo 937 print*,'On stoke du point ',jid(if),' a ',jfd(if),' en y' 938 939 print*,'Open de dat' 940 print*,'file=',file 941 print*,'fichier(if)=',fichier(if) 942 943 print*,4*(ifd(if)-iid(if))*(jfd(if)-jid(if)) 944 print*,trim(file)//'.dat' 945 946 OPEN (unit(if)+1,FILE=trim(file)//'.dat', 947 s FORM='UNFORMATTED', 948 s ACCESS='DIRECT' 949 s ,RECL=4*(ifd(if)-iid(if)+1)*(jfd(if)-jid(if)+1)) 950 951 print*,'Open de dat ok' 952 953 lmd(if)=lm 954 do l=1,lm 955 zd(l,if)=z(l)*fz 956 enddo 957 958 irec(if)=0 959 !CR 960 ! print*,if,imd(if),jmd(if),lmd(if) 961 ! print*,'if,imd(if),jmd(if),lmd(if)' 962 963 return 964 end 748 965 749 SUBROUTINE gr_dyn_fi(nfield,im,jm,ngrid,pdyn,pfi) 966 750 IMPLICIT NONE … … 992 776 DO ifield=1,nfield 993 777 DO j=2,jm-1 994 778 ig=2+(j-2)*(im-1) 995 779 CALL SCOPY(im-1,pdyn(1,j,ifield),1,pfi(ig,ifield),1) 996 780 ENDDO … … 1151 935 1152 936 !====================================================================== 1153 SUBROUTINE read_tsurf1d(knon, knindex,sst_out)937 SUBROUTINE read_tsurf1d(knon,sst_out) 1154 938 1155 939 ! This subroutine specifies the surface temperature to be used in 1D simulations … … 1158 942 1159 943 INTEGER, INTENT(IN) :: knon ! nomber of points on compressed grid 1160 INTEGER, DIMENSION(klon), INTENT(IN) :: knindex ! grid point number for compressed grid1161 944 REAL, DIMENSION(klon), INTENT(OUT) :: sst_out ! tsurf used to force the single-column model 1162 945 … … 1220 1003 1221 1004 SUBROUTINE advect_va(llm,omega,d_t_va,d_q_va,d_u_va,d_v_va, 1222 ! q,temp,u,v, 1223 ! play,plev) 1005 s q,temp,u,v,play) 1224 1006 !itlmd 1225 1007 !---------------------------------------------------------------------- … … 1237 1019 real q(llm,3),temp(llm) 1238 1020 real u(llm),v(llm) 1239 real play(llm) ,plev(llm+1)1021 real play(llm) 1240 1022 ! interne 1241 1023 integer l … … 1323 1105 real dph(llm),dqdp(llm),dtdp(llm) 1324 1106 ! interne 1325 integer l,k1326 real alpha,omdn,omup1107 integer k 1108 real omdn,omup 1327 1109 1328 1110 ! dudp=0. … … 1403 1185 character*80 fich_toga 1404 1186 1405 integer no,l,k,ip1406 real riy,rim,rid,rih,bid1187 integer k,ip 1188 real bid 1407 1189 1408 1190 integer iy,im,id,ih … … 1422 1204 1423 1205 do k = 1, nlev_toga 1424 read(21,230) plev_toga(k,ip), t_toga(k,ip), q_toga(k,ip) 1206 read(21,230) plev_toga(k,ip), t_toga(k,ip), q_toga(k,ip) 1425 1207 : ,u_toga(k,ip), v_toga(k,ip), w_toga(k,ip) 1426 1208 : ,ht_toga(k,ip), vt_toga(k,ip), hq_toga(k,ip), vq_toga(k,ip) … … 1443 1225 1444 1226 223 format(4i3,6f8.2) 1445 226 format(f7.1,1x,10f8.2)1446 227 format(f7.1,1x,1p,4e11.3)1447 1227 230 format(6f9.3,4e11.3) 1448 1228 … … 1462 1242 character*80 fich_sandu 1463 1243 1464 integer no,l,k,ip 1465 real riy,rim,rid,rih,bid 1466 1244 integer ip 1467 1245 integer iy,im,id,ih 1468 1246 1469 real plev_min 1470 1471 plev_min = 55000. ! pas de tendance de vap. d eau au-dessus de 55 hPa 1247 real plev_min 1248 1249 print*,'nlev_sandu',nlev_sandu 1250 plev_min = 55000. ! pas de tendance de vap. d eau au-dessus de 55 hPa 1472 1251 1473 1252 open(21,file=trim(fich_sandu),form='formatted') … … 1482 1261 1483 1262 223 format(4i3,f8.2) 1484 226 format(f7.1,1x,10f8.2)1485 227 format(f7.1,1x,1p,4e11.3)1486 230 format(6f9.3,4e11.3)1487 1263 1488 1264 return … … 1504 1280 character*80 fich_astex 1505 1281 1506 integer no,l,k,ip 1507 real riy,rim,rid,rih,bid 1508 1282 integer ip 1509 1283 integer iy,im,id,ih 1510 1284 1511 1285 real plev_min 1512 1286 1287 print*,'nlev_astex',nlev_astex 1513 1288 plev_min = 55000. ! pas de tendance de vap. d eau au-dessus de 55 hPa 1514 1289 … … 1528 1303 1529 1304 223 format(4i3,e13.2,f7.2,f7.3,f7.2,f7.3,f7.2) 1530 226 format(f7.1,1x,10f8.2)1531 227 format(f7.1,1x,1p,4e11.3)1532 230 format(6f9.3,4e11.3)1533 1305 1534 1306 return … … 1551 1323 character*80 :: fich_twpice 1552 1324 real*8 time(ntime) 1553 real*8 lat, lon, alt, phis 1325 real*8 lat, lon, alt, phis 1554 1326 real*8 lev(nlevel) 1555 1327 real*8 plev(nlevel,ntime) … … 1561 1333 real*8 T_adv_h(nlevel,ntime) 1562 1334 real*8 T_adv_v(nlevel,ntime), q_adv_h(nlevel,ntime) 1563 real*8 q_adv_v(nlevel,ntime) 1335 real*8 q_adv_v(nlevel,ntime) 1564 1336 real*8 s(nlevel,ntime), s_adv_h(nlevel,ntime) 1565 1337 real*8 s_adv_v(nlevel,ntime) … … 1976 1748 integer ierr 1977 1749 1978 integer i1979 1750 integer timevar,levvar 1980 1751 integer timelen,levlen … … 2050 1821 real omega_mod(llm),o3mmr_mod(llm) 2051 1822 2052 integer l,k,k1,k2 ,kp2053 real aa,frac,frac1,frac2,fact1823 integer l,k,k1,k2 1824 real frac,frac1,frac2,fact 2054 1825 2055 1826 do l = 1, llm … … 2168 1939 real o3mmr_mod(llm),ql_mod(llm),qt_mod(llm) 2169 1940 2170 integer l,k,k1,k2 ,kp2171 real aa,frac,frac1,frac2,fact1941 integer l,k,k1,k2 1942 real frac,frac1,frac2,fact 2172 1943 2173 1944 do l = 1, llm … … 2444 2215 real ts_prof 2445 2216 ! local: 2446 integer it_sandu1, it_sandu2 ,k2217 integer it_sandu1, it_sandu2 2447 2218 real timeit,time_sandu1,time_sandu2,frac 2448 2219 ! Check that initial day of the simulation consistent with SANDU period: … … 2511 2282 character*80 fich_armcu 2512 2283 2513 integer no,l,k,ip 2514 real riy,rim,rid,rih,bid 2284 integer ip 2515 2285 2516 2286 integer iy,im,id,ih,in 2287 2288 print*,'nlev_armcu',nlev_armcu 2517 2289 2518 2290 open(21,file=trim(fich_armcu),form='formatted') … … 2529 2301 2530 2302 223 format(5i3,5f8.3) 2531 226 format(f7.1,1x,10f8.2)2532 227 format(f7.1,1x,1p,4e11.3)2533 230 format(6f9.3,4e11.3)2534 2303 2535 2304 return … … 2571 2340 real hq_mod(llm),vq_mod(llm) 2572 2341 2573 integer l,k,k1,k2 ,kp2574 real aa,frac,frac1,frac2,fact2342 integer l,k,k1,k2 2343 real frac,frac1,frac2,fact 2575 2344 2576 2345 do l = 1, llm … … 2684 2453 real div_prof,ts_prof,ug_prof,vg_prof,ufa_prof,vfa_prof 2685 2454 ! local: 2686 integer it_astex1, it_astex2 ,k2455 integer it_astex1, it_astex2 2687 2456 real timeit,time_astex1,time_astex2,frac 2688 2457 … … 2968 2737 2969 2738 !===================================================================== 2970 subroutine readprofiles(nlev_max,kmax, height,2739 subroutine readprofiles(nlev_max,kmax,ntrac,height, 2971 2740 . thlprof,qtprof,uprof, 2972 2741 . vprof,e12prof,ugprof,vgprof, 2973 2742 . wfls,dqtdxls,dqtdyls,dqtdtls, 2974 . thlpcar )2743 . thlpcar,tracer,nt1,nt2) 2975 2744 implicit none 2976 2745 2977 integer nlev_max,kmax,kmax2 2746 integer nlev_max,kmax,kmax2,ntrac 2978 2747 logical :: llesread = .true. 2979 2748 … … 2982 2751 . ugprof(nlev_max),vgprof(nlev_max),wfls(nlev_max), 2983 2752 . dqtdxls(nlev_max),dqtdyls(nlev_max),dqtdtls(nlev_max), 2984 . thlpcar(nlev_max) 2753 . thlpcar(nlev_max),tracer(nlev_max,ntrac) 2985 2754 2986 2755 integer, parameter :: ilesfile=1 2987 integer :: ierr,irad,imax,jtot,k 2988 logical :: lmoist,lcoriol,ltimedep 2989 real :: xsize,ysize 2990 real :: ustin,wsvsurf,timerad 2991 character(80) :: chmess 2756 integer :: ierr,k,itrac,nt1,nt2 2992 2757 2993 2758 if(.not.(llesread)) return … … 3016 2781 close(ilesfile) 3017 2782 2783 open(ilesfile,file='trac.inp.001',status='old',iostat=ierr) 2784 if (ierr /= 0) then 2785 print*,'WARNING : trac.inp does not exist' 2786 else 2787 read (ilesfile,*) kmax2,nt1,nt2 2788 if (nt2>ntrac) then 2789 stop'Augmenter le nombre de traceurs dans traceur.def' 2790 endif 2791 if (kmax .ne. kmax2) then 2792 print *, 'fichiers prof.inp et lscale.inp incompatibles :' 2793 print *, 'nbre de niveaux : ',kmax,' et ',kmax2 2794 stop 'lecture profiles' 2795 endif 2796 do k=1,kmax 2797 read (ilesfile,*) height(k),(tracer(k,itrac),itrac=nt1,nt2) 2798 end do 2799 close(ilesfile) 2800 endif 2801 3018 2802 return 3019 2803 end … … 3024 2808 implicit none 3025 2809 3026 integer nlev_max,kmax ,kmax22810 integer nlev_max,kmax 3027 2811 logical :: llesread = .true. 3028 2812 … … 3033 2817 3034 2818 integer, parameter :: ilesfile=1 3035 integer :: ierr,irad,imax,jtot,k 3036 logical :: lmoist,lcoriol,ltimedep 3037 real :: xsize,ysize 3038 real :: ustin,wsvsurf,timerad 3039 character(80) :: chmess 2819 integer :: k,ierr 3040 2820 3041 2821 if(.not.(llesread)) return … … 3060 2840 implicit none 3061 2841 3062 integer nlev_max,kmax ,kmax22842 integer nlev_max,kmax 3063 2843 logical :: llesread = .true. 3064 2844 … … 3069 2849 3070 2850 integer, parameter :: ilesfile=1 3071 integer :: ierr,irad,imax,jtot,k 3072 logical :: lmoist,lcoriol,ltimedep 3073 real :: xsize,ysize 3074 real :: ustin,wsvsurf,timerad 3075 character(80) :: chmess 2851 integer :: ierr,k 3076 2852 3077 2853 if(.not.(llesread)) return … … 3098 2874 implicit none 3099 2875 3100 integer nlev_max,kmax ,kmax22876 integer nlev_max,kmax 3101 2877 logical :: llesread = .true. 3102 2878 … … 3108 2884 integer, parameter :: ilesfile=1 3109 2885 integer, parameter :: ifile=2 3110 integer :: ierr,irad,imax,jtot,k 3111 logical :: lmoist,lcoriol,ltimedep 3112 real :: xsize,ysize 3113 real :: ustin,wsvsurf,timerad 3114 character(80) :: chmess 2886 integer :: ierr,jtot,k 3115 2887 3116 2888 if(.not.(llesread)) return … … 3163 2935 3164 2936 integer ntime,nlevel 3165 integer l,k3166 2937 character*80 :: fich_amma 3167 real*8 time(ntime) 3168 real*8 zz(nlevel) 2938 real*8 zz(nlevel) 3169 2939 3170 2940 real*8 temp(nlevel),pp(nlevel) … … 3173 2943 real*8 dw(nlevel,ntime) 3174 2944 real*8 dt(nlevel,ntime) 3175 real*8 dq(nlevel,ntime) 2945 real*8 dq(nlevel,ntime) 3176 2946 real*8 flat(ntime),sens(ntime) 3177 2947 … … 3503 3273 3504 3274 integer ntime,nlevel 3505 integer l,k3506 3275 character*80 :: fich_fire 3507 real*8 time(ntime) 3508 real*8 zz(nlevel) 3276 real*8 zz(nlevel) 3509 3277 3510 3278 real*8 thl(nlevel) … … 3513 3281 real*8 ug(nlevel,ntime),vg(nlevel,ntime),wls(nlevel,ntime) 3514 3282 real*8 dqtdx(nlevel,ntime),dqtdy(nlevel,ntime) 3515 real*8 dqtdt(nlevel,ntime),thl_rad(nlevel,ntime) 3283 real*8 dqtdt(nlevel,ntime),thl_rad(nlevel,ntime) 3516 3284 3517 3285 integer nid, ierr
Note: See TracChangeset
for help on using the changeset viewer.