Changeset 2056 for LMDZ5/branches/testing/libf/dyn3dmem
- Timestamp:
- Jun 11, 2014, 3:46:46 PM (11 years ago)
- Location:
- LMDZ5/branches/testing
- Files:
-
- 2 deleted
- 10 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/branches/testing
- Property svn:mergeinfo changed
/LMDZ5/trunk merged: 1998,2000-2023,2025-2029,2032,2034,2036-2049,2051-2055
- Property svn:mergeinfo changed
-
LMDZ5/branches/testing/libf/dyn3dmem/calfis_loc.F
r1999 r2056 219 219 REAL unskap, pksurcp 220 220 c 221 cIM diagnostique PVteta, Amip2222 INTEGER,PARAMETER :: ntetaSTD=3223 REAL,SAVE :: rtetaSTD(ntetaSTD)=(/350.,380.,405./) ! Earth-specific, beware !!224 REAL PVteta(klon,ntetaSTD)225 226 227 221 REAL SSUM 228 222 … … 252 246 klon=klon_mpi 253 247 254 PVteta(:,:)=0.255 256 248 c 257 249 IF ( firstcal ) THEN … … 510 502 endif 511 503 512 513 IF (is_sequential.and.(planet_type=="earth")) THEN514 #ifdef CPP_PHYS515 ! PVtheta calls tetalevel, which is in the physics516 cIM calcul PV a teta=350, 380, 405K517 CALL PVtheta(ngridmx,llm,pucov,pvcov,pteta,518 $ ztfi,zplay,zplev,519 $ ntetaSTD,rtetaSTD,PVteta)520 c521 #endif522 ENDIF523 524 504 c On change de grille, dynamique vers physiq, pour le flux de masse verticale 525 505 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) … … 707 687 . zdqfi_omp, 708 688 . zdpsrf_omp, 709 cIM diagnostique PVteta, Amip2 710 . pducov, 711 . PVteta) 689 . pducov) 712 690 713 691 else if ( planet_type=="generic" ) then -
LMDZ5/branches/testing/libf/dyn3dmem/call_calfis_mod.F90
r1999 r2056 12 12 13 13 REAL,POINTER,SAVE :: p(:,:) 14 REAL,POINTER,SAVE :: alpha(:,:)15 REAL,POINTER,SAVE :: beta(:,:)16 14 REAL,POINTER,SAVE :: pks(:) 17 15 REAL,POINTER,SAVE :: pk(:,:) … … 53 51 CALL allocate_u(flxw,llm,d) 54 52 CALL allocate_u(p,llmp1,d) 55 CALL allocate_u(alpha,llm,d)56 CALL allocate_u(beta,llm,d)57 53 CALL allocate_u(pks,d) 58 54 CALL allocate_u(pk,llm,d) … … 75 71 phis_dyn,q_dyn,flxw_dyn) 76 72 USE dimensions_mod 73 use exner_hyb_loc_m, only: exner_hyb_loc 74 use exner_milieu_loc_m, only: exner_milieu_loc 77 75 USE parallel_lmdz 78 76 USE times … … 201 199 202 200 !$OMP BARRIER 203 CALL exner_hyb_loc( ip1jmp1, ps, p, alpha,beta,pks, pk, pkf )201 CALL exner_hyb_loc( ip1jmp1, ps, p, pks, pk, pkf ) 204 202 !$OMP BARRIER 205 203 CALL geopot_loc ( ip1jmp1, teta , pk , pks, phis , phi ) … … 343 341 !$OMP BARRIER 344 342 if (pressure_exner) then 345 CALL exner_hyb_loc(ijnb_u,ps,p, alpha,beta,pks,pk,pkf)343 CALL exner_hyb_loc(ijnb_u,ps,p,pks,pk,pkf) 346 344 else 347 CALL exner_milieu_loc(ijnb_u,ps,p, beta,pks,pk,pkf)345 CALL exner_milieu_loc(ijnb_u,ps,p,pks,pk,pkf) 348 346 endif 349 347 !$OMP BARRIER -
LMDZ5/branches/testing/libf/dyn3dmem/gcm.F
r1999 r2056 98 98 REAL,ALLOCATABLE,SAVE :: ps(:) ! pression au sol 99 99 c REAL p (ip1jmp1,llmp1 ) ! pression aux interfac.des couches 100 c REAL pks(ip1jmp1) ! exner au sol101 c REAL pk(ip1jmp1,llm) ! exner au milieu des couches102 c REAL pkf(ip1jmp1,llm) ! exner filt.au milieu des couches103 100 REAL,ALLOCATABLE,SAVE :: masse(:,:) ! masse d'air 104 101 REAL,ALLOCATABLE,SAVE :: phis(:) ! geopotentiel au sol … … 124 121 data call_iniphys/.true./ 125 122 126 c REAL alpha(ip1jmp1,llm),beta(ip1jmp1,llm)127 123 c+jld variables test conservation energie 128 124 c REAL ecin(ip1jmp1,llm),ecin0(ip1jmp1,llm) … … 481 477 482 478 483 day_end = day_ini + nday 479 if (nday>=0) then 480 day_end = day_ini + nday 481 else 482 day_end = day_ini - nday/day_step 483 endif 484 484 485 WRITE(lunout,300)day_ini,day_end 485 486 300 FORMAT('1'/,15x,'run du jour',i7,2x,'au jour',i7//) -
LMDZ5/branches/testing/libf/dyn3dmem/guide_loc_mod.F90
r1910 r2056 329 329 !======================================================================= 330 330 SUBROUTINE guide_main(itau,ucov,vcov,teta,q,masse,ps) 331 use exner_hyb_loc_m, only: exner_hyb_loc 332 use exner_milieu_loc_m, only: exner_milieu_loc 331 333 USE parallel_lmdz 332 334 USE control_mod … … 353 355 REAL, ALLOCATABLE, SAVE, DIMENSION (:,:) :: f_addv ! var aux: champ de guidage 354 356 ! Variables pour fonction Exner (P milieu couche) 355 REAL, ALLOCATABLE, SAVE, DIMENSION (:,:,:) :: pk, pkf 356 REAL, ALLOCATABLE, SAVE, DIMENSION (:,:,:) :: alpha, beta 357 REAL, ALLOCATABLE, SAVE, DIMENSION (:,:,:) :: pk 357 358 REAL, ALLOCATABLE, SAVE, DIMENSION (:,:) :: pks 358 359 REAL :: unskap … … 367 368 368 369 INTEGER :: i,j,l 370 INTEGER,EXTERNAL :: OMP_GET_THREAD_NUM 369 371 370 372 !$OMP MASTER … … 382 384 !$OMP BARRIER 383 385 384 386 ! PRINT *,'---> on rentre dans guide_main' 385 387 ! CALL AllGather_Field(ucov,ip1jmp1,llm) 386 388 ! CALL AllGather_Field(vcov,ip1jm,llm) … … 399 401 ALLOCATE(f_addv(ijb_v:ije_v,llm) ) 400 402 ALLOCATE(pk(iip1,jjb_u:jje_u,llm) ) 401 ALLOCATE(pkf(iip1,jjb_u:jje_u,llm) )402 ALLOCATE(alpha(iip1,jjb_u:jje_u,llm) )403 ALLOCATE(beta(iip1,jjb_u:jje_u,llm) )404 403 ALLOCATE(pks(iip1,jjb_u:jje_u) ) 405 404 ALLOCATE(p(ijb_u:ije_u,llmp1) ) … … 431 430 IF (ini_anal) THEN 432 431 CALL guide_interp(ps,teta) 433 !$OMP DO 432 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 434 433 DO l=1,llm 435 434 IF (guide_u) ucov(ijbu:ijeu,l)=ugui2(ijbu:ijeu,l) … … 449 448 ENDIF 450 449 RETURN 451 ENDIF452 ! Verification structure guidage453 IF (guide_u) THEN454 !+tard CALL writefield_u('unat',unat1)455 ! CALL writefield_u('ucov',ucov)456 ENDIF457 IF (guide_T) THEN458 !+tard CALL writefield_p('tnat',tnat1)459 ! CALL writefield_u('teta',teta)460 450 ENDIF 461 451 … … 536 526 f_out=((MOD(itau,iguide_sav).EQ.0).AND.guide_sav) 537 527 IF (f_out) THEN 538 ! Calcul niveaux pression milieu de couches 539 CALL pression_loc( ijnb_u, ap, bp, ps, p ) 540 if (pressure_exner) then 541 CALL exner_hyb_loc(ip1jmp1,ps,p,alpha,beta,pks,pk,pkf) 542 else 543 CALL exner_milieu_loc(ip1jmp1,ps,p,beta,pks,pk,pkf) 544 endif 545 !$OMP BARRIER 528 529 !$OMP BARRIER 530 CALL pression_loc(ijnb_u,ap,bp,ps,p) 531 532 !$OMP BARRIER 533 if (pressure_exner) then 534 CALL exner_hyb_loc( ijnb_u, ps, p, pks, pk) 535 else 536 CALL exner_milieu_loc( ijnb_u, ps, p, pks, pk ) 537 endif 538 539 !$OMP BARRIER 540 546 541 unskap=1./kappa 547 !$OMP DO 548 DO l = 1, llm 549 DO j=jjbu,jjeu 550 DO i =1, iip1 551 p(i+(j-1)*iip1,l) = preff * ( pk(i,j,l)/cpp) ** unskap 552 ENDDO 553 ENDDO 554 ENDDO 555 !$OMP MASTER 556 CALL guide_out("P",jjp1,llm,p,1.) 557 !$OMP END MASTER 558 !$OMP BARRIER 542 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 543 DO l = 1, llm 544 DO j=jjbu,jjeu 545 DO i =1, iip1 546 p(i+(j-1)*iip1,l) = preff * ( pk(i,j,l)/cpp) ** unskap 547 ENDDO 548 ENDDO 549 ENDDO 550 551 !!$OMP MASTER 552 ! DO l=1,llm,5 553 ! print*,'avant dump2d l=',l,mpi_rank,OMP_GET_THREAD_NUM() 554 ! print*,'avant dump2d l=',l,mpi_rank 555 ! CALL dump2d(iip1,jjnb_u,p(:,l),'ppp ') 556 ! ENDDO 557 !!$OMP END MASTER 558 !!$OMP BARRIER 559 560 CALL guide_out("SP",jjp1,llm,p(ijb_u:ije_u,1:llm),1.) 559 561 ENDIF 560 562 561 563 if (guide_u) then 562 564 if (guide_add) then 563 !$OMP DO 565 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 564 566 DO l=1,llm 565 567 f_addu(ijbu:ijeu,l)=(1.-tau)*ugui1(ijbu:ijeu,l)+tau*ugui2(ijbu:ijeu,l) 566 568 ENDDO 567 569 else 568 !$OMP DO 570 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 569 571 DO l=1,llm 570 572 f_addu(ijbu:ijeu,l)=(1.-tau)*ugui1(ijbu:ijeu,l)+tau*ugui2(ijbu:ijeu,l)-ucov(ijbu:ijeu,l) … … 576 578 if (guide_zon) CALL guide_zonave_u(1,llm,f_addu) 577 579 CALL guide_addfield_u(llm,f_addu,alpha_u) 578 ! CALL WriteField_u('f_addu',f_addu) 579 ! CALL WriteField_u('alpha_u',alpha_u) 580 !$OMP MASTER 581 IF (f_out) CALL guide_out("U",jjp1,llm,f_addu(:,:),factt) 582 !$OMP END MASTER 583 !$OMP BARRIER 584 585 !$OMP DO 580 ! IF (f_out) CALL guide_out("ua",jjp1,llm,ugui1(ijb_u:ije_u,:),factt) 581 IF (f_out) CALL guide_out("ua",jjp1,llm,(1.-tau)*ugui1(ijb_u:ije_u,:)+tau*ugui2(ijb_u:ije_u,:),factt) 582 IF (f_out) CALL guide_out("u",jjp1,llm,ucov(ijb_u:ije_u,:),factt) 583 IF (f_out) CALL guide_out("ucov",jjp1,llm,f_addu(ijb_u:ije_u,:),factt) 584 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 586 585 DO l=1,llm 587 586 ucov(ijbu:ijeu,l)=ucov(ijbu:ijeu,l)+f_addu(ijbu:ijeu,l) … … 592 591 if (guide_T) then 593 592 if (guide_add) then 594 !$OMP DO 593 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 595 594 DO l=1,llm 596 595 f_addu(ijbu:ijeu,l)=(1.-tau)*tgui1(ijbu:ijeu,l)+tau*tgui2(ijbu:ijeu,l) 597 596 ENDDO 598 597 else 599 !$OMP DO 598 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 600 599 DO l=1,llm 601 600 f_addu(ijbu:ijeu,l)=(1.-tau)*tgui1(ijbu:ijeu,l)+tau*tgui2(ijbu:ijeu,l)-teta(ijbu:ijeu,l) … … 604 603 if (guide_zon) CALL guide_zonave_u(2,llm,f_addu) 605 604 CALL guide_addfield_u(llm,f_addu,alpha_T) 606 !$OMP MASTER 607 IF (f_out) CALL guide_out("T",jjp1,llm,f_addu(:,:),factt) 608 !$OMP END MASTER 609 !$OMP BARRIER 610 !$OMP DO 605 IF (f_out) CALL guide_out("teta",jjp1,llm,f_addu(:,:)/factt,factt) 606 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 611 607 DO l=1,llm 612 608 teta(ijbu:ijeu,l)=teta(ijbu:ijeu,l)+f_addu(ijbu:ijeu,l) … … 628 624 if (guide_zon) CALL guide_zonave_u(2,1,f_addu(ijb_u:ije_u,1)) 629 625 CALL guide_addfield_u(1,f_addu(ijb_u:ije_u,1),alpha_P) 630 !$OMP MASTER 631 IF (f_out) CALL guide_out("SP",jjp1,1,f_addu(1:ip1jmp1,1),factt) 632 !$OMP END MASTER 633 !$OMP BARRIER 626 ! IF (f_out) CALL guide_out("ps",jjp1,1,f_addu(ijb_u:ije_u,1)/factt,factt) 634 627 !$OMP MASTER 635 628 ps(ijbu:ijeu)=ps(ijbu:ijeu)+f_addu(ijbu:ijeu,1) … … 643 636 if (guide_Q) then 644 637 if (guide_add) then 645 !$OMP DO 638 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 646 639 DO l=1,llm 647 640 f_addu(ijbu:ijeu,l)=(1.-tau)*qgui1(ijbu:ijeu,l)+tau*qgui2(ijbu:ijeu,l) 648 641 ENDDO 649 642 else 650 !$OMP DO 643 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 651 644 DO l=1,llm 652 645 f_addu(ijbu:ijeu,l)=(1.-tau)*qgui1(ijbu:ijeu,l)+tau*qgui2(ijbu:ijeu,l)-q(ijbu:ijeu,l) … … 655 648 if (guide_zon) CALL guide_zonave_u(2,llm,f_addu) 656 649 CALL guide_addfield_u(llm,f_addu,alpha_Q) 657 !$OMP MASTER 658 IF (f_out) CALL guide_out("Q",jjp1,llm,f_addu(:,:),factt) 659 !$OMP END MASTER 660 !$OMP BARRIER 661 662 !$OMP DO 650 IF (f_out) CALL guide_out("q",jjp1,llm,f_addu(:,:)/factt,factt) 651 652 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 663 653 DO l=1,llm 664 654 q(ijbu:ijeu,l)=q(ijbu:ijeu,l)+f_addu(ijbu:ijeu,l) … … 668 658 if (guide_v) then 669 659 if (guide_add) then 670 !$OMP DO 660 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 671 661 DO l=1,llm 672 662 f_addv(ijbv:ijev,l)=(1.-tau)*vgui1(ijbv:ijev,l)+tau*vgui2(ijbv:ijev,l) … … 674 664 675 665 else 676 !$OMP DO 666 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 677 667 DO l=1,llm 678 668 f_addv(ijbv:ijev,l)=(1.-tau)*vgui1(ijbv:ijev,l)+tau*vgui2(ijbv:ijev,l)-vcov(ijbv:ijev,l) … … 680 670 681 671 endif 682 ! CALL WriteField_v('f_addv',f_addv)683 672 684 673 if (guide_zon) CALL guide_zonave_v(2,jjm,llm,f_addv(ijb_v:ije_v,:)) 685 ! CALL WriteField_v('f_addv',f_addv)686 674 687 675 CALL guide_addfield_v(llm,f_addv(ijb_v:ije_v,:),alpha_v) 688 ! CALL WriteField_v('f_addv',f_addv) 689 ! CALL WriteField_v('alpha_v',alpha_v) 690 !$OMP MASTER 691 IF (f_out) CALL guide_out("V",jjm,llm,f_addv(1:ip1jm,:),factt) 692 !$OMP END MASTER 693 !$OMP BARRIER 694 ! CALL WriteField_v('f_addv',f_addv) 695 696 !$OMP DO 676 IF (f_out) CALL guide_out("v",jjm,llm,vcov(ijb_v:ije_v,:),factt) 677 IF (f_out) CALL guide_out("va",jjm,llm,(1.-tau)*vgui1(ijb_v:ije_v,:)+tau*vgui2(ijb_v:ije_v,:),factt) 678 IF (f_out) CALL guide_out("vcov",jjm,llm,f_addv(:,:)/factt,factt) 679 680 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 697 681 DO l=1,llm 698 682 vcov(ijbv:ijev,l)=vcov(ijbv:ijev,l)+f_addv(ijbv:ijev,l) … … 700 684 endif 701 685 702 ! CALL WriteField_u('ucov_guide',ucov)703 ! CALL WriteField_v('vcov_guide',vcov)704 ! CALL WriteField_u('teta_guide',teta)705 ! CALL WriteField_u('masse_guide',masse)706 707 686 END SUBROUTINE guide_main 708 687 … … 723 702 INTEGER :: l 724 703 725 !$OMP DO 704 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 726 705 DO l=1,vsize 727 706 field(ijbu:ijeu,l)=alpha(ijbu:ijeu)*field(ijbu:ijeu,l)*alpha_pcor(l) … … 746 725 INTEGER :: l 747 726 748 !$OMP DO 727 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 749 728 DO l=1,vsize 750 729 field(ijbv:ijev,l)=alpha(ijbv:ijev)*field(ijbv:ijev,l)*alpha_pcor(l) … … 799 778 800 779 801 !$OMP DO 780 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 802 781 DO l=1,vsize 803 782 fieldm(:,l)=0. … … 869 848 ENDIF 870 849 871 !$OMP DO 850 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 872 851 DO l=1,vsize 873 852 ! Compute zonal average … … 894 873 !======================================================================= 895 874 SUBROUTINE guide_interp(psi,teta) 875 use exner_hyb_loc_m, only: exner_hyb_loc 876 use exner_milieu_loc_m, only: exner_milieu_loc 896 877 USE parallel_lmdz 897 878 USE mod_hallo … … 919 900 REAL, ALLOCATABLE, SAVE,DIMENSION (:,:,:) :: pbary 920 901 ! Variables pour fonction Exner (P milieu couche) 921 REAL, ALLOCATABLE, SAVE,DIMENSION (:,:,:) :: pk, pkf 922 REAL, ALLOCATABLE, SAVE, DIMENSION (:,:,:) :: alpha, beta 902 REAL, ALLOCATABLE, SAVE,DIMENSION (:,:,:) :: pk 923 903 REAL ,ALLOCATABLE, SAVE, DIMENSION (:,:) :: pks 924 904 REAL :: unskap … … 949 929 ALLOCATE(pbary(iip1,jjb_v:jje_v,llm) ) 950 930 ALLOCATE(pk(iip1,jjb_u:jje_u,llm) ) 951 ALLOCATE(pkf(iip1,jjb_u:jje_u,llm) )952 ALLOCATE(alpha(iip1,jjb_u:jje_u,llm) )953 ALLOCATE(beta(iip1,jjb_u:jje_u,llm) )954 931 ALLOCATE(pks (iip1,jjb_u:jje_u) ) 955 932 ALLOCATE(qsat(ijb_u:ije_u,llm) ) … … 1021 998 ! .... Calcul de pls , pression au milieu des couches ,en Pascals 1022 999 IF (guide_plevs.EQ.1) THEN 1023 !$OMP DO 1000 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 1024 1001 DO l=1,llm 1025 1002 DO j=jjbu,jjeu 1026 1003 DO i =1, iip1 1027 1004 pls(i,j,l)=(ap(l)+ap(l+1))/2.+psi(i,j)*(bp(l)+bp(l+1))/2. 1028 1029 1005 ENDDO 1006 ENDDO 1030 1007 ENDDO 1031 1008 ELSE 1032 1033 1034 CALL exner_hyb_loc(ijnb_u,psi,p, alpha,beta,pks,pk,pkf)1009 CALL pression_loc( ijnb_u, ap, bp, psi, p ) 1010 if (disvert_type==1) then 1011 CALL exner_hyb_loc(ijnb_u,psi,p,pks,pk) 1035 1012 else ! we assume that we are in the disvert_type==2 case 1036 CALL exner_milieu_loc(ijnb_u,psi,p, beta,pks,pk,pkf)1013 CALL exner_milieu_loc(ijnb_u,psi,p,pks,pk) 1037 1014 endif 1038 1039 !$OMP BARRIER 1040 !$OMP DO 1041 1042 1043 1044 1045 1046 1047 1015 unskap=1./kappa 1016 !$OMP BARRIER 1017 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 1018 DO l = 1, llm 1019 DO j=jjbu,jjeu 1020 DO i =1, iip1 1021 pls(i,j,l) = preff * ( pk(i,j,l)/cpp) ** unskap 1022 ENDDO 1023 ENDDO 1024 ENDDO 1048 1025 ENDIF 1049 1026 1050 1027 ! calcul des pressions pour les grilles u et v 1051 !$OMP DO 1028 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 1052 1029 do l=1,llm 1053 1030 do j=jjbu,jjeu … … 1066 1043 call massbar_loc(pext, pbarx, pbary ) 1067 1044 !$OMP BARRIER 1068 !$OMP DO 1045 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 1069 1046 do l=1,llm 1070 1047 do j=jjbu,jjeu … … 1075 1052 enddo 1076 1053 enddo 1077 !$OMP DO 1054 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 1078 1055 do l=1,llm 1079 1056 do j=jjbv,jjev … … 1136 1113 !$OMP BARRIER 1137 1114 ! Conversion en variables GCM 1138 !$OMP DO 1115 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 1139 1116 do l=1,llm 1140 1117 do j=jjbu,jjeu … … 1206 1183 ! On suppose qu'on a la bonne variable dans le fichier de guidage: 1207 1184 ! Hum.Rel si guide_hr, Hum.Spec. sinon. 1208 !$OMP DO 1185 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 1209 1186 do l=1,llm 1210 1187 do j=jjbu,jjeu … … 1231 1208 enddo 1232 1209 IF (guide_hr) THEN 1233 !$OMP DO 1210 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 1234 1211 do l=1,llm 1235 1212 CALL q_sat(iip1*jjnu,teta(:,jjbu:jjeu,l)*pk(:,jjbu:jjeu,l)/cpp, & … … 1284 1261 1285 1262 ! Conversion en variables GCM 1286 !$OMP DO 1263 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 1287 1264 do l=1,llm 1288 1265 do j=jjbu,jjeu … … 1359 1336 !$OMP BARRIER 1360 1337 ! Conversion en variables GCM 1361 !$OMP DO 1338 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 1362 1339 do l=1,llm 1363 1340 do j=jjbv,jjev … … 1755 1732 endif 1756 1733 1734 1757 1735 ! Temperature 1758 1736 if (guide_T) then … … 1908 1886 if (ncidpl.eq.-99) ncidpl=ncidu 1909 1887 endif 1888 1910 1889 ! Vent meridien 1911 1890 if (guide_v) then … … 2045 2024 endif 2046 2025 2026 2047 2027 ! Temperature 2048 2028 if (guide_T) then … … 2096 2076 2097 2077 IF (invert_y) THEN 2078 2098 2079 ! PRINT*,"Invertion impossible actuellement" 2099 2080 ! CALL abort_gcm(modname,abort_message,1) … … 2130 2111 2131 2112 !======================================================================= 2132 SUBROUTINE guide_out(varname,hsize,vsize,field ,factt)2113 SUBROUTINE guide_out(varname,hsize,vsize,field_loc,factt) 2133 2114 USE parallel_lmdz 2115 USE mod_hallo, ONLY : gather_field_u, gather_field_v 2134 2116 IMPLICIT NONE 2135 2117 … … 2142 2124 2143 2125 ! Variables entree 2144 CHARACTER , INTENT(IN):: varname2126 CHARACTER*(*), INTENT(IN) :: varname 2145 2127 INTEGER, INTENT (IN) :: hsize,vsize 2146 REAL, DIMENSION (iip1,hsize,vsize), INTENT(IN) :: field 2147 REAL, INTENT (IN) :: factt 2128 ! REAL, DIMENSION (iip1,hsize,vsize), INTENT(IN) :: field_loc 2129 REAL, DIMENSION (:,:), INTENT(IN) :: field_loc 2130 REAL factt 2148 2131 2149 2132 ! Variables locales … … 2152 2135 INTEGER :: nid, id_lonu, id_lonv, id_latu, id_latv, id_tim, id_lev 2153 2136 INTEGER :: vid_lonu,vid_lonv,vid_latu,vid_latv,vid_cu,vid_cv,vid_lev 2137 INTEGER :: vid_au,vid_av 2154 2138 INTEGER, DIMENSION (3) :: dim3 2155 2139 INTEGER, DIMENSION (4) :: dim4,count,start 2156 INTEGER :: ierr, varid 2157 2158 CALL gather_field(field,iip1*hsize,vsize,0) 2159 2160 IF (mpi_rank /= 0) RETURN 2161 2162 print *,'Guide: output timestep',timestep,'var ',varname 2140 INTEGER :: ierr, varid,l 2141 REAL zu(ip1jmp1),zv(ip1jm) 2142 REAL, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: field_glo 2143 2144 !$OMP MASTER 2145 ALLOCATE(field_glo(iip1,hsize,vsize)) 2146 !$OMP END MASTER 2147 !$OMP BARRIER 2148 2149 print*,'gvide_out apres allocation ',hsize,vsize 2150 2151 IF (hsize==jjp1) THEN 2152 CALL gather_field_u(field_loc,field_glo,vsize) 2153 ELSE IF (hsize==jjm) THEN 2154 CALL gather_field_v(field_loc,field_glo, vsize) 2155 ENDIF 2156 2157 print*,'guide_out apres gather ' 2158 CALL Gather_field_u(alpha_u,zu,1) 2159 CALL Gather_field_v(alpha_v,zv,1) 2160 2161 IF (mpi_rank > 0) THEN 2162 !$OMP MASTER 2163 DEALLOCATE(field_glo) 2164 !$OMP END MASTER 2165 !$OMP BARRIER 2166 2167 RETURN 2168 ENDIF 2169 2170 !$OMP MASTER 2163 2171 IF (timestep.EQ.0) THEN 2164 2172 ! ---------------------------------------------- … … 2183 2191 ierr=NF_DEF_VAR(nid,"cu",NF_FLOAT,2,(/id_lonu,id_latu/),vid_cu) 2184 2192 ierr=NF_DEF_VAR(nid,"cv",NF_FLOAT,2,(/id_lonv,id_latv/),vid_cv) 2185 2193 ierr=NF_DEF_VAR(nid,"au",NF_FLOAT,2,(/id_lonu,id_latu/),vid_au) 2194 ierr=NF_DEF_VAR(nid,"av",NF_FLOAT,2,(/id_lonv,id_latv/),vid_av) 2195 2186 2196 ierr=NF_ENDDEF(nid) 2187 2197 … … 2195 2205 ierr = NF_PUT_VAR_DOUBLE(nid,vid_cu,cu) 2196 2206 ierr = NF_PUT_VAR_DOUBLE(nid,vid_cv,cv) 2207 ierr = NF_PUT_VAR_DOUBLE(nid,vid_au,zu) 2208 ierr = NF_PUT_VAR_DOUBLE(nid,vid_av,zv) 2197 2209 #else 2198 2210 ierr = NF_PUT_VAR_REAL(nid,vid_lonu,rlonu*180./pi) … … 2203 2215 ierr = NF_PUT_VAR_REAL(nid,vid_cu,cu) 2204 2216 ierr = NF_PUT_VAR_REAL(nid,vid_cv,cv) 2217 ierr = NF_PUT_VAR_REAL(nid,vid_au,alpha_u) 2218 ierr = NF_PUT_VAR_REAL(nid,vid_av,alpha_v) 2205 2219 #endif 2206 2220 ! -------------------------------------------------------------------- … … 2210 2224 ! Pressure (GCM) 2211 2225 dim4=(/id_lonv,id_latu,id_lev,id_tim/) 2212 ierr = NF_DEF_VAR(nid," P",NF_FLOAT,4,dim4,varid)2226 ierr = NF_DEF_VAR(nid,"SP",NF_FLOAT,4,dim4,varid) 2213 2227 ! Surface pressure (guidage) 2214 2228 IF (guide_P) THEN … … 2219 2233 IF (guide_u) THEN 2220 2234 dim4=(/id_lonu,id_latu,id_lev,id_tim/) 2235 ierr = NF_DEF_VAR(nid,"u",NF_FLOAT,4,dim4,varid) 2236 ierr = NF_DEF_VAR(nid,"ua",NF_FLOAT,4,dim4,varid) 2221 2237 ierr = NF_DEF_VAR(nid,"ucov",NF_FLOAT,4,dim4,varid) 2222 2238 ENDIF … … 2224 2240 IF (guide_v) THEN 2225 2241 dim4=(/id_lonv,id_latv,id_lev,id_tim/) 2242 ierr = NF_DEF_VAR(nid,"v",NF_FLOAT,4,dim4,varid) 2243 ierr = NF_DEF_VAR(nid,"va",NF_FLOAT,4,dim4,varid) 2226 2244 ierr = NF_DEF_VAR(nid,"vcov",NF_FLOAT,4,dim4,varid) 2227 2245 ENDIF … … 2247 2265 ierr=NF_OPEN("guide_ins.nc",NF_WRITE,nid) 2248 2266 2267 IF (varname=="SP") timestep=timestep+1 2268 2269 ierr = NF_INQ_VARID(nid,varname,varid) 2249 2270 SELECT CASE (varname) 2250 CASE ("P") 2251 timestep=timestep+1 2252 ierr = NF_INQ_VARID(nid,"P",varid) 2271 CASE ("SP","ps") 2253 2272 start=(/1,1,1,timestep/) 2254 2273 count=(/iip1,jjp1,llm,1/) 2255 #ifdef NC_DOUBLE 2256 ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,count,field) 2257 #else 2258 ierr = NF_PUT_VARA_REAL(nid,varid,start,count,field) 2259 #endif 2260 CASE ("SP") 2261 ierr = NF_INQ_VARID(nid,"ps",varid) 2262 start=(/1,1,timestep,0/) 2263 count=(/iip1,jjp1,1,0/) 2264 #ifdef NC_DOUBLE 2265 ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,count,field/factt) 2266 #else 2267 ierr = NF_PUT_VARA_REAL(nid,varid,start,count,field/factt) 2268 #endif 2269 CASE ("U") 2270 ierr = NF_INQ_VARID(nid,"ucov",varid) 2274 CASE ("v","va","vcov") 2275 start=(/1,1,1,timestep/) 2276 count=(/iip1,jjm,llm,1/) 2277 CASE DEFAULT 2271 2278 start=(/1,1,1,timestep/) 2272 2279 count=(/iip1,jjp1,llm,1/) 2280 END SELECT 2281 2282 !$OMP END MASTER 2283 !$OMP BARRIER 2284 2285 SELECT CASE (varname) 2286 2287 CASE("u","ua") 2288 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 2289 DO l=1,llm 2290 field_glo(:,2:jjm,l)=field_glo(:,2:jjm,l)/cu(:,2:jjm) 2291 field_glo(:,1,l)=0. ; field_glo(:,jjp1,l)=0. 2292 ENDDO 2293 CASE("v","va") 2294 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 2295 DO l=1,llm 2296 field_glo(:,:,l)=field_glo(:,:,l)/cv(:,:) 2297 ENDDO 2298 END SELECT 2299 2300 ! if (varname=="ua") then 2301 ! call dump2d(iip1,jjp1,field_glo,'ua gui1 1ere couche ') 2302 ! call dump2d(iip1,jjp1,field_glo(:,:,llm),'ua gui1 llm ') 2303 ! endif 2304 2305 !$OMP MASTER 2306 2273 2307 #ifdef NC_DOUBLE 2274 ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,count,field/factt)2308 ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,count,field_glo) 2275 2309 #else 2276 ierr = NF_PUT_VARA_REAL(nid,varid,start,count,field/factt)2310 ierr = NF_PUT_VARA_REAL(nid,varid,start,count,field_glo) 2277 2311 #endif 2278 CASE ("V") 2279 ierr = NF_INQ_VARID(nid,"vcov",varid) 2280 start=(/1,1,1,timestep/) 2281 count=(/iip1,jjm,llm,1/) 2282 #ifdef NC_DOUBLE 2283 ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,count,field/factt) 2284 #else 2285 ierr = NF_PUT_VARA_REAL(nid,varid,start,count,field/factt) 2286 #endif 2287 CASE ("T") 2288 ierr = NF_INQ_VARID(nid,"teta",varid) 2289 start=(/1,1,1,timestep/) 2290 count=(/iip1,jjp1,llm,1/) 2291 #ifdef NC_DOUBLE 2292 ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,count,field/factt) 2293 #else 2294 ierr = NF_PUT_VARA_REAL(nid,varid,start,count,field/factt) 2295 #endif 2296 CASE ("Q") 2297 ierr = NF_INQ_VARID(nid,"q",varid) 2298 start=(/1,1,1,timestep/) 2299 count=(/iip1,jjp1,llm,1/) 2300 #ifdef NC_DOUBLE 2301 ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,count,field/factt) 2302 #else 2303 ierr = NF_PUT_VARA_REAL(nid,varid,start,count,field/factt) 2304 #endif 2305 END SELECT 2306 2312 2307 2313 ierr = NF_CLOSE(nid) 2314 2315 DEALLOCATE(field_glo) 2316 !$OMP END MASTER 2317 !$OMP BARRIER 2318 2319 RETURN 2308 2320 2309 2321 END SUBROUTINE guide_out … … 2329 2341 end subroutine correctbid 2330 2342 2343 2344 !==================================================================== 2345 ! Ascii debug output. Could be reactivated 2346 !==================================================================== 2347 2348 subroutine dump2du(var,varname) 2349 use parallel_lmdz 2350 use mod_hallo 2351 implicit none 2352 include 'dimensions.h' 2353 include 'paramet.h' 2354 2355 CHARACTER (len=*) :: varname 2356 2357 2358 real, dimension(ijb_u:ije_u) :: var 2359 2360 real, dimension(ip1jmp1) :: var_glob 2361 2362 RETURN 2363 2364 call barrier 2365 CALL Gather_field_u(var,var_glob,1) 2366 call barrier 2367 2368 if (mpi_rank==0) then 2369 call dump2d(iip1,jjp1,var_glob,varname) 2370 endif 2371 2372 call barrier 2373 2374 return 2375 end subroutine dump2du 2376 2377 !==================================================================== 2378 ! Ascii debug output. Could be reactivated 2379 !==================================================================== 2380 subroutine dumpall 2381 implicit none 2382 include "dimensions.h" 2383 include "paramet.h" 2384 include "comgeom.h" 2385 call barrier 2386 call dump2du(alpha_u(ijb_u:ije_u),' alpha_u couche 1') 2387 call dump2du(unat2(:,jjbu:jjeu,nlevnc),' unat2 couche nlevnc') 2388 call dump2du(ugui1(ijb_u:ije_u,1)*sqrt(unscu2(ijb_u:ije_u)),' ugui1 couche 1') 2389 return 2390 end subroutine dumpall 2391 2331 2392 !=========================================================================== 2332 2393 END MODULE guide_loc_mod -
LMDZ5/branches/testing/libf/dyn3dmem/iniacademic_loc.F90
r1910 r2056 4 4 SUBROUTINE iniacademic_loc(vcov,ucov,teta,q,masse,ps,phis,time_0) 5 5 6 use exner_hyb_m, only: exner_hyb 7 use exner_milieu_m, only: exner_milieu 6 8 USE filtreg_mod 7 9 USE infotrac, ONLY : nqtot … … 58 60 REAL pks(ip1jmp1) ! exner au sol 59 61 REAL pk(ip1jmp1,llm) ! exner au milieu des couches 60 REAL pkf(ip1jmp1,llm) ! exner filt.au milieu des couches61 62 REAL phi(ip1jmp1,llm) ! geopotentiel 62 63 REAL ddsin,zsig,tetapv,w_pv ! variables auxiliaires … … 75 76 76 77 REAL zdtvr 77 real,allocatable :: alpha(:,:),beta(:,:)78 78 79 79 character(len=*),parameter :: modname="iniacademic" … … 219 219 allocate(masse_glo(ip1jmp1,llm)) 220 220 allocate(phis_glo(ip1jmp1)) 221 allocate(alpha(ip1jmp1,llm))222 allocate(beta(ip1jmp1,llm))223 221 224 222 ! surface pressure … … 238 236 CALL pression ( ip1jmp1, ap, bp, ps_glo, p ) 239 237 if (pressure_exner) then 240 CALL exner_hyb( ip1jmp1, ps_glo, p, alpha,beta, pks, pk, pkf)238 CALL exner_hyb( ip1jmp1, ps_glo, p, pks, pk ) 241 239 else 242 call exner_milieu(ip1jmp1,ps_glo,p, beta,pks,pk,pkf)240 call exner_milieu(ip1jmp1,ps_glo,p,pks,pk) 243 241 endif 244 242 CALL massdair(p,masse_glo) … … 301 299 deallocate(ps_glo) 302 300 deallocate(phis_glo) 303 deallocate(alpha)304 deallocate(beta)305 301 ENDIF ! of IF (.NOT. read_start) 306 302 endif academic_case -
LMDZ5/branches/testing/libf/dyn3dmem/leapfrog_loc.F
r1999 r2056 31 31 USE call_calfis_mod, ONLY : call_calfis 32 32 USE leapfrog_mod 33 use exner_hyb_loc_m, only: exner_hyb_loc 34 use exner_milieu_loc_m, only: exner_milieu_loc 33 35 IMPLICIT NONE 34 36 … … 156 158 character*10 string10 157 159 158 ! REAL,SAVE,ALLOCATABLE :: alpha(:,:),beta(:,:)159 160 ! REAL,SAVE,ALLOCATABLE :: flxw(:,:) ! flux de masse verticale 160 161 … … 213 214 lafin=.false. 214 215 215 itaufin = nday*day_step 216 if (nday>=0) then 217 itaufin = nday*day_step 218 else 219 itaufin = -nday 220 endif 221 216 222 itaufinp1 = itaufin +1 217 223 … … 261 267 ! ALLOCATE(dqfi_tmp(iip1,llm,nqtot)) 262 268 ! ALLOCATE(finvmaold(ijb_u:ije_u,llm)) 263 ! ALLOCATE(alpha(ijb_u:ije_u,llm),beta(ijb_u:ije_u,llm))264 269 ! ALLOCATE(flxw(ijb_u:ije_u,llm)) 265 270 ! ALLOCATE(ecin(ijb_u:ije_u,llm),ecin0(ijb_u:ije_u,llm)) … … 284 289 c$OMP END MASTER 285 290 if (pressure_exner) then 286 CALL exner_hyb_loc( ijnb_u, ps, p, alpha,beta,pks, pk, pkf)291 CALL exner_hyb_loc( ijnb_u, ps, p, pks, pk, pkf) 287 292 else 288 CALL exner_milieu_loc( ijnb_u, ps, p, beta,pks, pk, pkf )293 CALL exner_milieu_loc( ijnb_u, ps, p, pks, pk, pkf ) 289 294 endif 290 295 c----------------------------------------------------------------------- … … 780 785 781 786 ! c$OMP BARRIER 782 ! CALL exner_hyb_loc( ip1jmp1, ps, p, alpha,beta,pks, pk, pkf )787 ! CALL exner_hyb_loc( ip1jmp1, ps, p,pks, pk, pkf ) 783 788 ! c$OMP BARRIER 784 789 ! jD_cur = jD_ref + day_ini - day_ref … … 1135 1140 c$OMP BARRIER 1136 1141 if (pressure_exner) then 1137 CALL exner_hyb_loc( ijnb_u, ps, p, alpha,beta,pks, pk, pkf )1142 CALL exner_hyb_loc( ijnb_u, ps, p, pks, pk, pkf ) 1138 1143 else 1139 CALL exner_milieu_loc( ijnb_u, ps, p, beta,pks, pk, pkf )1144 CALL exner_milieu_loc( ijnb_u, ps, p, pks, pk, pkf ) 1140 1145 endif 1141 1146 c$OMP BARRIER -
LMDZ5/branches/testing/libf/dyn3dmem/leapfrog_mod.F90
r1999 r2056 27 27 REAL,POINTER,SAVE :: dq(:,:,:) 28 28 REAL,POINTER,SAVE :: finvmaold(:,:) 29 REAL,POINTER,SAVE :: alpha(:,:)30 REAL,POINTER,SAVE :: beta(:,:)31 29 REAL,POINTER,SAVE :: flxw(:,:) 32 30 REAL,POINTER,SAVE :: unat(:,:) … … 79 77 CALL allocate_u(dq,llm,nqtot,d) 80 78 CALL allocate_u(finvmaold,llm,d) 81 CALL allocate_u(alpha,llm,d)82 CALL allocate_u(beta,llm,d)83 79 CALL allocate_u(flxw,llm,d) 84 80 CALL allocate_u(unat,llm,d) … … 129 125 CALL switch_u(dq,distrib_caldyn,dist) 130 126 CALL switch_u(finvmaold,distrib_caldyn,dist) 131 CALL switch_u(alpha,distrib_caldyn,dist)132 CALL switch_u(beta,distrib_caldyn,dist)133 127 CALL switch_u(flxw,distrib_caldyn,dist) 134 128 CALL switch_u(unat,distrib_caldyn,dist) -
LMDZ5/branches/testing/libf/dyn3dmem/mod_const_mpi.F90
r1999 r2056 21 21 USE mod_prism 22 22 #endif 23 #ifdef CPP_XIOS 24 USE wxios, only: wxios_init 25 #endif 23 26 IMPLICIT NONE 24 27 #ifdef CPP_MPI … … 41 44 #ifdef CPP_COUPLE 42 45 !$OMP MASTER 43 CALL prism_init_comp_proto (comp_id, 'lmdz.x', ierr) 46 #ifdef CPP_XIOS 47 CALL wxios_init("LMDZ", outcom=COMM_LMDZ, type_ocean=type_ocean) 48 #else 49 CALL prism_init_comp_proto (comp_id, 'LMDZ', ierr) 44 50 CALL prism_get_localcomm_proto(COMM_LMDZ,ierr) 51 #endif 45 52 !$OMP END MASTER 46 53 #endif -
LMDZ5/branches/testing/libf/dyn3dmem/parallel_lmdz.F90
r1999 r2056 422 422 423 423 if (type_ocean == 'couple') then 424 #ifdef CPP_XIOS 425 !Fermeture propre de XIOS 426 CALL wxios_close() 427 #else 424 428 #ifdef CPP_COUPLE 425 429 call prism_terminate_proto(ierr) … … 428 432 endif 429 433 #endif 434 #endif 430 435 else 431 436 #ifdef CPP_XIOS
Note: See TracChangeset
for help on using the changeset viewer.