Changeset 1999 for LMDZ5/branches/testing/libf/phy1d
- Timestamp:
- Mar 20, 2014, 10:57:19 AM (11 years ago)
- Location:
- LMDZ5/branches/testing
- Files:
-
- 5 deleted
- 7 edited
- 1 copied
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 -
LMDZ5/branches/testing/libf/phy1d/1D_decl_cases.h
r1910 r1999 16 16 real sec_print 17 17 !! 18 integer nn19 integer it_toga1, it_toga220 real time_toga1,time_toga221 22 18 real ts_toga(nt_toga) 23 19 real plev_toga(nlev_toga,nt_toga),w_toga(nlev_toga,nt_toga) … … 34 30 real hq_prof(nlev_toga),vq_prof(nlev_toga) 35 31 36 real plev_mod(llm),w_mod(llm), t_mod(llm),q_mod(llm)32 real w_mod(llm), t_mod(llm),q_mod(llm) 37 33 real u_mod(llm),v_mod(llm), ht_mod(llm),vt_mod(llm) 38 34 real hq_mod(llm),vq_mod(llm),qv_mod(llm),ql_mod(llm),qt_mod(llm) … … 87 83 character*80 :: fich_amma 88 84 ! Option du cas AMMA ou on impose la discretisation verticale (Ap,Bp) 89 logical :: fixe_disvert=.true.90 85 integer nlev_amma, nt_amma 91 86 ! parameter (nlev_amma=29, nt_amma=48) ! Fleur, juillet 2012 … … 104 99 !profils initiaux: 105 100 real plev_amma(nlev_amma) 106 real tv_amma(nlev_amma),rho_amma(nlev_amma)107 real thv_amma(nlev_amma)108 101 109 102 real z_amma(nlev_amma) … … 111 104 real u_amma(nlev_amma) 112 105 real v_amma(nlev_amma) 113 114 real thvsurf_amma,tvsurf_amma,rhosurf_amma,thsurf115 106 116 107 real th_ammai(nlev_amma),q_ammai(nlev_amma) … … 130 121 131 122 !champs interpoles 132 real plev_profamma(nlev_amma),vitw_profamma(nlev_amma)123 real vitw_profamma(nlev_amma) 133 124 real ht_profamma(nlev_amma) 134 125 real hq_profamma(nlev_amma) … … 148 139 integer year_ini_fire, day_ini_fire, mth_ini_fire 149 140 real heure_ini_fire 150 real day_ju_ini_fire ! Julian day of fire first day151 141 parameter (year_ini_fire=1987) 152 142 parameter (mth_ini_fire=7) … … 154 144 parameter (heure_ini_fire=0.) !0h en secondes 155 145 156 !profils initiaux:157 real z_fire(nlev_fire)158 real thl_fire(nlev_fire),qt_fire(nlev_fire)159 real u_fire(nlev_fire), v_fire(nlev_fire)160 real tke_fire(nlev_fire)161 162 !forcings163 real ugeo_fire(nlev_fire),vgeo_fire(nlev_fire)164 real wls_fire(nlev_fire),dqtdx_fire(nlev_fire)165 real dqtdy_fire(nlev_fire)166 real dqtdt_fire(nlev_fire),thl_rad_fire(nlev_fire)167 168 real ugeo_mod(llm),vgeo_mod(llm),wls_mod(llm)169 real dqtdx_mod(llm),dqtdy_mod(llm),dqtdt_mod(llm)170 real thl_rad_mod(llm)171 146 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 172 147 ! Declarations specifiques au cas GCSSold … … 180 155 real Ts_gcssold 181 156 real dtime_frcg 182 cAl1 logical :: imp_fcg_gcssold183 c logical :: ts_fcg_gcssold184 c logical :: Tp_fcg_gcssold185 157 logical :: Turb_fcg_gcssold 186 common /turb_forcing/ dtime_frcg, 187 $ Turb_fcg_gcssold, hthturb_gcssold, hqturb_gcssold 158 159 common /turb_forcing/ 160 s dtime_frcg,hthturb_gcssold, hqturb_gcssold,Turb_fcg_gcssold 188 161 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 189 162 ! Declarations specifiques au cas Arm_cu … … 206 179 real adv_qt_armcu(nt_armcu) 207 180 real theta_mod(llm),rv_mod(llm),play_mod(llm) 208 real d_t_dyn_ls(llm),d_q_dyn_ls(llm)209 181 ! profc comme "profil armcu" 210 real h_profc,play_profc,t_profc,th_profc,plev_profc211 real u_profc,v_profc,qv_profc,rv_profc212 182 213 183 ! forcages interpoles dans le temps … … 229 199 logical :: trouve_700=.true. 230 200 parameter (dt_sandu=6.*3600.) ! forcages donnes ttes les 6 heures par ifa_sandu.txt 231 !parameter (tau_sandu=3600.) ! temps de relaxation u,v,thetal,qt vers profil init et au dessus 700hPa201 parameter (tau_sandu=3600.) ! temps de relaxation u,v,thetal,qt vers profil init et au dessus 700hPa 232 202 !! 233 integer it_sandu1, it_sandu2234 real time_sandu1,time_sandu2235 236 203 real ts_sandu(nt_sandu) 237 204 ! profs comme "profil sandu" … … 242 209 real omega_profs(nlev_sandu),o3mmr_profs(nlev_sandu) 243 210 211 real, dimension(llm) :: relax_u,relax_v,relax_thl 212 real, dimension(llm,2) :: relax_q 213 244 214 real thl_mod(llm),omega_mod(llm),o3mmr_mod(llm),tke_mod(llm) 245 ! pour relaxer u,v,thl et qt vers les profils initiaux au dessus de 700hPa246 real relax_u(llm),relax_v(llm),relax_thl(llm),relax_q(llm,2)247 215 !vertical advection computation 248 216 real d_t_z(llm), d_q_z(llm) … … 260 228 parameter (mth_ini_astex=6) 261 229 parameter (day_ini_astex=13) ! 165 = 13 juin 1992 262 real dt_astex , tau_astex230 real dt_astex 263 231 parameter (dt_astex=3600.) ! forcages donnes ttes les heures par ifa_astex.txt 264 integer it_astex1, it_astex2265 real time_astex1,time_astex2266 232 real ts_astex(nt_astex),div_astex(nt_astex),ug_astex(nt_astex) 267 233 real vg_astex(nt_astex),ufa_astex(nt_astex),vfa_astex(nt_astex) -
LMDZ5/branches/testing/libf/phy1d/1D_read_forc_cases.h
r1910 r1999 3 3 ! forcing_radconv = .T. : Pure radiative-convective equilibrium: 4 4 !---------------------------------------------------------------------- 5 6 7 nq1=0 8 nq2=0 5 9 6 10 if (forcing_les .or. forcing_radconv … … 24 28 !---------------------------------------------------------------------- 25 29 26 call readprofiles(nlev_max,kmax, height,30 call readprofiles(nlev_max,kmax,nqtot,height, 27 31 . tttprof,qtprof,uprof,vprof, 28 32 . e12prof,ugprof,vgprof, 29 33 . wfls,dqtdxls,dqtdyls,dqtdtls, 30 . thlpcar )34 . thlpcar,qprof,nq1,nq2) 31 35 endif 32 36 … … 62 66 ug(l) = ugprof(kmax)-frac*( ugprof(kmax)- ugprof(kmax-1)) 63 67 vg(l) = vgprof(kmax)-frac*( vgprof(kmax)- vgprof(kmax-1)) 68 IF (nq2>0) q(l,nq1:nq2)=qprof(kmax,nq1:nq2) 69 s -frac*(qprof(kmax,nq1:nq2)-qprof(kmax-1,nq1:nq2)) 64 70 omega(l)= wfls(kmax)-frac*( wfls(kmax)- wfls(kmax-1)) 65 71 … … 85 91 ug(l) = ugprof(k)-frac*( ugprof(k)- ugprof(k-1)) 86 92 vg(l) = vgprof(k)-frac*( vgprof(k)- vgprof(k-1)) 93 IF (nq2>0) q(l,nq1:nq2)=qprof(k,nq1:nq2) 94 s -frac*(qprof(k,nq1:nq2)-qprof(k-1,nq1:nq2)) 87 95 omega(l)= wfls(k)-frac*( wfls(k)- wfls(k-1)) 88 96 dq_dyn(l,1)=dqtdtls(k)-frac*(dqtdtls(k)-dqtdtls(k-1)) … … 104 112 vg(l) = vgprof(1) 105 113 omega(l)= wfls(1) 114 IF (nq2>0) q(l,nq1:nq2)=qprof(1,nq1:nq2) 106 115 dq_dyn(l,1) =dqtdtls(1) 107 116 dt_cooling(l)=thlpcar(1) -
LMDZ5/branches/testing/libf/phy1d/1Dconv.h
r1910 r1999 22 22 REAL hplaym(100) !pression en hPa milieux des couches Meso-NH 23 23 24 integer i,j,k,ii,ll,in 25 REAL tsol,qsol 24 integer i,j,k,ll,in 26 25 27 26 CHARACTER*80 file_forctl,file_fordat 28 27 29 COMMON/com1_phys_gcss/ klev,play,JM,coef1,coef230 COMMON/com2_phys_gcss/ nblvlm,playm,hplaym28 COMMON/com1_phys_gcss/play,coef1,coef2,JM,klev 29 COMMON/com2_phys_gcss/playm,hplaym,nblvlm 31 30 32 31 c====================================================================== … … 170 169 hqTurbbef(i)=hqTurbaft(i) 171 170 enddo 172 171 tsbef = tsaft 173 172 timebef=pasprev*dt 174 173 timeaft=timebef+dt … … 213 212 print*,'hqTurb_mes ',(hqTurb_mes(i),i=1,nblvlm) 214 213 endif 215 214 IF (ts_fcg) print*,'ts_subr', ts_subr 216 215 c*** on interpole les champs meso_NH sur les niveaux de pression*** 217 216 c*** gcm . on obtient le nouveau champ after *** … … 263 262 hqTurb(ll)=hqTurbaft(ll) 264 263 enddo 265 264 ts_subr = tsaft 266 265 else ! temps.ge.pasmax 267 266 c*** on interpole sur les pas de temps de 10mn du gcm a partir *** … … 282 281 endif ! Turb_fcg 283 282 enddo 284 283 ts_subr = ((timeaft-time)*tsbef + (time-timebef)*tsaft)/dt 285 284 endif ! temps.ge.pasmax 286 285 c … … 440 439 endif ! Turb_fcg 441 440 enddo 442 441 ts_subr = tsaft 443 442 close(99) 444 443 close(98) … … 505 504 REAL hplaym(100)!pression en hecto-Pa des milieux de couche Meso-NH 506 505 507 COMMON/com1_phys_gcss/ klev,play,JM,coef1,coef2508 COMMON/com2_phys_gcss/ nblvlm,playm,hplaym509 510 integer i,k,klevgcm506 COMMON/com1_phys_gcss/play,coef1,coef2,JM,klev 507 COMMON/com2_phys_gcss/playm,hplaym,nblvlm 508 509 integer k,klevgcm 511 510 real playgcm(klevgcm) ! pression en milieu de couche du gcm 512 511 real psolgcm … … 577 576 REAL playm(100) !pression en Pa milieu de chaque couche Meso-NH 578 577 REAL hplaym(100) !pression en hPa des milieux de couche Meso-NH 579 COMMON/com2_phys_gcss/ nblvlm,playm,hplaym580 581 INTEGER i,lu, k,mlz,mlzh,j578 COMMON/com2_phys_gcss/playm,hplaym,nblvlm 579 580 INTEGER i,lu,mlz,mlzh 582 581 583 582 character*80 file_forctl … … 644 643 real ts 645 644 c 646 INTEGER i,k645 INTEGER k 647 646 c 648 647 LOGICAL imp_fcg,ts_fcg,Turb_fcg … … 725 724 REAL hplaym(100)!pression en hPa des milieux de couche Meso-NH 726 725 727 COMMON/com1_phys_gcss/ klev,play,JM,coef1,coef2728 COMMON/com2_phys_gcss/ nblvlm,playm,hplaym726 COMMON/com1_phys_gcss/play,coef1,coef2,JM,klev 727 COMMON/com2_phys_gcss/playm,hplaym,nblvlm 729 728 730 729 REAL psol 731 730 REAL val 732 INTEGER k, mlz , mlzh731 INTEGER k, mlz 733 732 734 733 -
LMDZ5/branches/testing/libf/phy1d/compar1d.h
r1910 r1999 27 27 logical :: ok_old_disvert 28 28 29 common/com_par1d/forcing_type,nat_surf,tsurf,rugos, & 29 common/com_par1d/ 30 & nat_surf,tsurf,rugos, & 30 31 & qsol,qsurf,psurf,zsurf,albedo,time,time_ini,xlat,xlon,airefi, & 31 32 & wtsurf,wqsurf,restart_runoff,xagesno,qsolinp,zpicinp, & 33 & forcing_type, 32 34 & restart,ok_old_disvert 33 35 -
LMDZ5/branches/testing/libf/phy1d/lmdz1d.F
r1921 r1999 81 81 integer :: an 82 82 83 !84 real :: paire = 1. ! aire de la maille85 !** common /flux_arp/fsens,flat,ok_flux_surf86 87 83 !--------------------------------------------------------------------- 88 84 ! Declarations related to forcing and initial profiles … … 90 86 91 87 integer :: kmax = llm 92 integer nlev_max,llm70093 parameter (nlev_max = 1000)94 real timestep, frac , timeit88 integer llm700,nq1,nq2 89 INTEGER, PARAMETER :: nlev_max=1000, nqmx=1000 90 real timestep, frac 95 91 real height(nlev_max),tttprof(nlev_max),qtprof(nlev_max), 96 92 . uprof(nlev_max),vprof(nlev_max),e12prof(nlev_max), 97 93 . ugprof(nlev_max),vgprof(nlev_max),wfls(nlev_max), 98 94 . dqtdxls(nlev_max),dqtdyls(nlev_max), 99 . dqtdtls(nlev_max),thlpcar(nlev_max) 100 101 real :: fff 95 . dqtdtls(nlev_max),thlpcar(nlev_max), 96 . qprof(nlev_max,nqmx) 97 102 98 c integer :: forcing_type 103 99 logical :: forcing_les = .false. … … 143 139 !--------------------------------------------------------------------- 144 140 145 integer :: iq146 141 real :: phi(llm) 147 142 real :: teta(llm),tetal(llm),temp(llm),u(llm),v(llm),w(llm) … … 151 146 real :: sfdt, cfdt 152 147 real :: du_phys(llm),dv_phys(llm),dt_phys(llm) 153 real :: du_dyn(llm),dv_dyn(llm),dt_dyn(llm) 154 real :: dt_cooling(llm),d_t_cool(llm),d_th_adv(llm) 155 real :: dq_cooling(llm),d_q_cool(llm) 156 real :: tmpvar(llm) 148 real :: dt_dyn(llm) 149 real :: dt_cooling(llm),d_th_adv(llm) 157 150 real :: alpha 151 real :: ttt 158 152 159 153 REAL, ALLOCATABLE, DIMENSION(:,:):: q … … 161 155 REAL, ALLOCATABLE, DIMENSION(:,:):: dq_dyn 162 156 REAL, ALLOCATABLE, DIMENSION(:,:):: d_q_adv 157 ! REAL, ALLOCATABLE, DIMENSION(:):: d_th_adv 163 158 164 159 !--------------------------------------------------------------------- … … 204 199 ! Fichiers et d'autres variables 205 200 !--------------------------------------------------------------------- 206 real ttt,bow,q1 207 integer :: ierr,k,l,i,it=1,mxcalc 201 integer :: k,l,i,it=1,mxcalc 208 202 integer jjmp1 209 203 parameter (jjmp1=jjm+1-1/jjm) … … 230 224 !--------------------------------------------------------------------- 231 225 cAl1 232 call conf_unicol (99)226 call conf_unicol 233 227 cAl1 moves this gcssold var from common fcg_gcssold to 234 228 Turb_fcg_gcssold = xTurb_fcg_gcssold … … 357 351 c Le numero du jour est dans "day". L heure est traitee separement. 358 352 c La date complete est dans "daytime" (l'unite est le jour). 359 fnday=nday 353 if (nday>0) then 354 fnday=nday 355 else 356 fnday=-nday/float(day_step) 357 endif 358 360 359 c Special case for arm_cu which lasts less than one day : 53100s !! (MPL 20111026) 361 360 IF(forcing_type .EQ. 61) fnday=53100./86400. … … 369 368 itau_phy = 0 370 369 call ymds2ju(annee_ref,mois,day_ref,heure,day) 371 day_ini = day372 day_end = day_ini + nday370 day_ini = int(day) 371 day_end = day_ini + fnday 373 372 374 373 IF (forcing_type .eq.2) THEN … … 422 421 call infotrac_init 423 422 423 if (nqtot>nqmx) STOP'Augmenter nqmx dans lmdz1d.F' 424 424 allocate(q(llm,nqtot)) ; q(:,:)=0. 425 425 allocate(dq(llm,nqtot)) 426 426 allocate(dq_dyn(llm,nqtot)) 427 427 allocate(d_q_adv(llm,nqtot)) 428 ! allocate(d_th_adv(llm)) 428 429 429 430 c … … 463 464 !! mpl et jyg le 22/08/2012 : 464 465 !! pour que les cas a flux de surface imposes marchent 465 IF(.NOT.ok_flux_surf ) THEN466 IF(.NOT.ok_flux_surf.or.max(abs(wtsurf),abs(wqsurf))>0.) THEN 466 467 fsens=-wtsurf*rcpd*rho(1) 467 468 flat=-wqsurf*rlvtt*rho(1) 468 469 print *,'Flux: ok_flux wtsurf wqsurf',ok_flux_surf,wtsurf,wqsurf 469 470 ENDIF 471 print*,'Flux sol ',fsens,flat 470 472 !! ok_flux_surf=.false. 471 473 !! fsens=-wtsurf*rcpd*rho(1) … … 851 853 ! 852 854 du_age(1:mxcalc)= -2.*sfdt/timestep* 853 :(sfdt*(u(1:mxcalc)-ug(1:mxcalc)) -854 :cfdt*(v(1:mxcalc)-vg(1:mxcalc)) )855 s (sfdt*(u(1:mxcalc)-ug(1:mxcalc)) - 856 s cfdt*(v(1:mxcalc)-vg(1:mxcalc)) ) 855 857 !! : fcoriolis*(v(1:mxcalc)-vg(1:mxcalc)) 856 858 ! 857 859 dv_age(1:mxcalc)= -2.*sfdt/timestep* 858 :(cfdt*(u(1:mxcalc)-ug(1:mxcalc)) +859 :sfdt*(v(1:mxcalc)-vg(1:mxcalc)) )860 s (cfdt*(u(1:mxcalc)-ug(1:mxcalc)) + 861 s sfdt*(v(1:mxcalc)-vg(1:mxcalc)) ) 860 862 !! : -fcoriolis*(u(1:mxcalc)-ug(1:mxcalc)) 861 863 ! … … 870 872 !! Increment state variables 871 873 !!!!!!!!!!!!!!!!!!!!!!!!!!!!! 874 ! pour les cas sandu et astex, on reclacule u,v,q,temp et teta dans 1D_nudge_sandu_astex.h 875 ! au dessus de 700hpa, on relaxe vers les profils initiaux 876 if (forcing_sandu .OR. forcing_astex) then 877 #include "1D_nudge_sandu_astex.h" 878 else 872 879 u(1:mxcalc)=u(1:mxcalc) + timestep*( 873 :du_phys(1:mxcalc)874 :+du_age(1:mxcalc) )880 s du_phys(1:mxcalc) 881 s +du_age(1:mxcalc) ) 875 882 v(1:mxcalc)=v(1:mxcalc) + timestep*( 876 :dv_phys(1:mxcalc)877 :+dv_age(1:mxcalc) )883 s dv_phys(1:mxcalc) 884 s +dv_age(1:mxcalc) ) 878 885 q(1:mxcalc,:)=q(1:mxcalc,:)+timestep*( 879 :dq(1:mxcalc,:)880 :+d_q_adv(1:mxcalc,:) )886 s dq(1:mxcalc,:) 887 s +d_q_adv(1:mxcalc,:) ) 881 888 882 889 if (prt_level.ge.1) then … … 893 900 . +d_th_adv(1:mxcalc) 894 901 . +dt_cooling(1:mxcalc)) ! Taux de chauffage ou refroid. 902 903 endif ! forcing_sandu or forcing_astex 895 904 896 905 teta=temp*(pzero/play)**rkappa
Note: See TracChangeset
for help on using the changeset viewer.