Changeset 709 for LMDZ4/branches/V3_test/libf/dyn3dpar/leapfrog_p.F
- Timestamp:
- Sep 20, 2006, 12:12:39 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ4/branches/V3_test/libf/dyn3dpar/leapfrog_p.F
r630 r709 1 ! 1 ! 2 2 ! $Header$ 3 3 ! … … 75 75 76 76 #include "academic.h" 77 #include "clesphys.h" 78 77 79 78 80 include 'mpif.h' … … 160 162 REAL d_h_vcol, d_qt, d_qw, d_ql, d_ec 161 163 CHARACTER*15 ztit 162 INTEGER ip_ebil_dyn ! PRINT level for energy conserv. diag.163 SAVE ip_ebil_dyn164 DATA ip_ebil_dyn/0/164 ! INTEGER ip_ebil_dyn ! PRINT level for energy conserv. diag. 165 ! SAVE ip_ebil_dyn 166 ! DATA ip_ebil_dyn/0/ 165 167 c-jld 166 168 … … 198 200 INTEGER :: iapptrac = 0 199 201 INTEGER :: AdjustCount = 0 200 202 INTEGER :: var_time 201 203 ItCount=0 202 204 … … 229 231 1 CONTINUE 230 232 231 call MPI_BARRIER( MPI_COMM_WORLD,ierr)233 call MPI_BARRIER(COMM_LMDZ,ierr) 232 234 233 235 #ifdef CPP_IOIPSL … … 295 297 296 298 ItCount=ItCount+1 297 if (MOD(ItCount,1 0000)==0) then299 if (MOD(ItCount,1)==1) then 298 300 debug=.true. 299 301 else … … 315 317 conser = .FALSE. 316 318 apdiss = .FALSE. 317 319 c idissip=1 318 320 IF( purmats ) THEN 319 321 IF( MOD(itau,iconser) .EQ.0.AND. forward ) conser = .TRUE. … … 469 471 call VTe(VThallo) 470 472 473 471 474 if (debug) then 472 473 475 call WriteField_p('ucov',reshape(ucov,(/iip1,jmp1,llm/))) 474 476 call WriteField_p('vcov',reshape(vcov,(/iip1,jjm,llm/))) … … 484 486 c enddo 485 487 endif 486 488 487 489 488 490 … … 497 499 498 500 call VTb(VTcaldyn) 499 501 502 var_time=time+iday-day_ini 503 OMP_CHUNK=5 504 c$OMP PARALLEL DEFAULT(SHARED) 505 cc$OMP+ SHARED(itau,ucov,vcov,teta,ps,masse,pk,pkf,phis , 506 cc$OMP+ phi,conser,du,dv,dteta,dp,w, pbaru,pbarv, 507 cc$OMP+ var_time) 508 500 509 CALL caldyn_p 501 510 $ ( itau,ucov,vcov,teta,ps,masse,pk,pkf,phis , 502 511 $ phi,conser,du,dv,dteta,dp,w, pbaru,pbarv, time+iday-day_ini ) 503 512 513 c$OMP END PARALLEL 504 514 call VTe(VTcaldyn) 505 515 c call WriteField_p('du',reshape(du,(/iip1,jmp1,llm/))) … … 516 526 517 527 IF( forward. OR . leapf ) THEN 518 528 c$OMP PARALLEL DEFAULT(SHARED) 519 529 c 520 530 #ifdef INCA_CH4 … … 530 540 . pk,iapptrac) 531 541 #endif 542 543 c$OMP END PARALLEL 544 532 545 c do j=1,nqmx 533 546 c call WriteField_p('q'//trim(int2str(j)), 534 c . reshape(q(:,:,j),(/iip1,jmp1,llm/)))547 c . reshape(q(:,:,j),(/iip1,jmp1,llm/))) 535 548 c call WriteField_p('dq'//trim(int2str(j)), 536 549 c . reshape(dq(:,:,j),(/iip1,jmp1,llm/))) 537 550 c enddo 538 539 IF (offline) THEN 551 IF (offline) THEN 540 552 Cmaf stokage du flux de masse pour traceurs OFF-LINE 541 553 … … 556 568 557 569 call VTb(VTintegre) 570 c call WriteField_p('ucovm1',reshape(ucovm1,(/iip1,jmp1,llm/))) 571 c call WriteField_p('vcovm1',reshape(vcovm1,(/iip1,jjm,llm/))) 572 c call WriteField_p('tetam1',reshape(tetam1,(/iip1,jmp1,llm/))) 573 c call WriteField_p('psm1',reshape(psm1,(/iip1,jmp1/))) 574 c call WriteField_p('ucov',reshape(ucov,(/iip1,jmp1,llm/))) 575 c call WriteField_p('vcov',reshape(vcov,(/iip1,jjm,llm/))) 576 c call WriteField_p('teta',reshape(teta,(/iip1,jmp1,llm/))) 577 c call WriteField_p('ps',reshape(ps,(/iip1,jmp1/))) 578 c$OMP PARALLEL DEFAULT(SHARED) 558 579 CALL integrd_p ( 2,vcovm1,ucovm1,tetam1,psm1,massem1 , 559 580 $ dv,du,dteta,dq,dp,vcov,ucov,teta,q,ps,masse,phis , 560 581 $ finvmaold ) 561 582 583 c$OMP END PARALLEL 584 c call WriteField_p('ucovm1',reshape(ucovm1,(/iip1,jmp1,llm/))) 585 c call WriteField_p('vcovm1',reshape(vcovm1,(/iip1,jjm,llm/))) 586 c call WriteField_p('tetam1',reshape(tetam1,(/iip1,jmp1,llm/))) 587 c call WriteField_p('psm1',reshape(psm1,(/iip1,jmp1/))) 588 c call WriteField_p('ucov',reshape(ucov,(/iip1,jmp1,llm/))) 589 c call WriteField_p('vcov',reshape(vcov,(/iip1,jjm,llm/))) 590 c call WriteField_p('teta',reshape(teta,(/iip1,jmp1,llm/))) 591 c call WriteField_p('dteta',reshape(dteta,(/iip1,jmp1,llm/))) 592 593 c call WriteField_p('ps',reshape(ps,(/iip1,jmp1/))) 594 562 595 call VTe(VTintegre) 596 563 597 c .P.Le Van (26/04/94 ajout de finvpold dans l'appel d'integrd) 564 598 c … … 579 613 c ....... Ajout P.Le Van ( 17/04/96 ) ........... 580 614 c 615 c$OMP PARALLEL DEFAULT(SHARED) 616 c$OMP+ PRIVATE(rdaym_ini,rdayvrai,ijb,ije) 617 618 c$OMP MASTER 581 619 call suspend_timer(timer_caldyn) 582 620 print*,'Entree dans la physique : Iteration No ',true_itau 621 c$OMP END MASTER 622 583 623 CALL pression_p ( ip1jmp1, ap, bp, ps, p ) 584 624 CALL exner_hyb_p( ip1jmp1, ps, p,alpha,beta,pks, pk, pkf ) … … 605 645 ENDIF 606 646 c-jld 647 c$OMP BARRIER 648 c$OMP MASTER 607 649 call VTb(VThallo) 608 650 call SetTag(Request_physic,800) … … 650 692 651 693 call VTb(VTphysiq) 694 c$OMP END MASTER 695 c$OMP BARRIER 696 652 697 CALL calfis_p( nq, lafin ,rdayvrai,time , 653 698 $ ucov,vcov,teta,q,masse,ps,p,pk,phis,phi , … … 657 702 #endif 658 703 $ clesphy0, dufi,dvfi,dtetafi,dqfi,dpfi ) 659 660 704 ijb=ij_begin 661 705 ije=ij_end 662 706 if ( .not. pole_nord) then 663 dufi_tmp(1:iip1,:) = dufi(ijb:ijb+iim,:) 664 dvfi_tmp(1:iip1,:) = dvfi(ijb:ijb+iim,:) 665 dtetafi_tmp(1:iip1,:)= dtetafi(ijb:ijb+iim,:) 707 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 708 DO l=1,llm 709 dufi_tmp(1:iip1,l) = dufi(ijb:ijb+iim,l) 710 dvfi_tmp(1:iip1,l) = dvfi(ijb:ijb+iim,l) 711 dtetafi_tmp(1:iip1,l)= dtetafi(ijb:ijb+iim,l) 712 dqfi_tmp(1:iip1,l,:) = dqfi(ijb:ijb+iim,l,:) 713 ENDDO 714 c$OMP END DO NOWAIT 715 716 c$OMP MASTER 666 717 dpfi_tmp(1:iip1) = dpfi(ijb:ijb+iim) 667 dqfi_tmp(1:iip1,:,:) = dqfi(ijb:ijb+iim,:,:) 668 endif 669 718 c$OMP END MASTER 719 endif 720 721 c$OMP BARRIER 722 c$OMP MASTER 670 723 call SetDistrib(jj_nb_Physic_bis) 671 724 … … 695 748 696 749 call SetDistrib(jj_nb_Physic) 697 750 c$OMP END MASTER 751 c$OMP BARRIER 698 752 ijb=ij_begin 699 753 if (.not. pole_nord) then 700 dufi(ijb:ijb+iim,:) = dufi(ijb:ijb+iim,:)+dufi_tmp(1:iip1,:) 701 dvfi(ijb:ijb+iim,:) = dvfi(ijb:ijb+iim,:)+dvfi_tmp(1:iip1,:) 702 dtetafi(ijb:ijb+iim,:) = dtetafi(ijb:ijb+iim,:) 703 & +dtetafi_tmp(1:iip1,:) 754 755 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 756 DO l=1,llm 757 dufi(ijb:ijb+iim,l) = dufi(ijb:ijb+iim,l)+dufi_tmp(1:iip1,l) 758 dvfi(ijb:ijb+iim,l) = dvfi(ijb:ijb+iim,l)+dvfi_tmp(1:iip1,l) 759 dtetafi(ijb:ijb+iim,l) = dtetafi(ijb:ijb+iim,l) 760 & +dtetafi_tmp(1:iip1,l) 761 dqfi(ijb:ijb+iim,l,:) = dqfi(ijb:ijb+iim,l,:) 762 & + dqfi_tmp(1:iip1,l,:) 763 ENDDO 764 c$OMP END DO NOWAIT 765 766 c$OMP MASTER 704 767 dpfi(ijb:ijb+iim) = dpfi(ijb:ijb+iim)+ dpfi_tmp(1:iip1) 705 dqfi(ijb:ijb+iim,:,:) = dqfi(ijb:ijb+iim,:,:) 706 & + dqfi_tmp(1:iip1,:,:) 768 c$OMP END MASTER 769 707 770 endif 708 771 c$OMP BARRIER 772 cc$OMP MASTER 709 773 c call WriteField_p('dufi',reshape(dufi,(/iip1,jmp1,llm/))) 710 774 c call WriteField_p('dvfi',reshape(dvfi,(/iip1,jjm,llm/))) 711 775 c call WriteField_p('dtetafi',reshape(dtetafi,(/iip1,jmp1,llm/))) 712 776 c call WriteField_p('dpfi',reshape(dpfi,(/iip1,jmp1/))) 777 cc$OMP END MASTER 713 778 c 714 779 c do j=1,nqmx … … 723 788 $ dufi, dvfi, dtetafi , dqfi ,dpfi ) 724 789 790 c$OMP BARRIER 791 c$OMP MASTER 725 792 call VTe(VTphysiq) 726 793 … … 765 832 766 833 call SetDistrib(jj_Nb_caldyn) 834 c$OMP END MASTER 835 c$OMP BARRIER 767 836 c 768 837 c Diagnostique de conservation de l'énergie : difference … … 772 841 e , ucov , vcov , ps, p ,pk , teta , q(:,:,1), q(:,:,2)) 773 842 ENDIF 774 775 if (debug) then 776 call WriteField_p('ucovfi',reshape(ucov,(/iip1,jmp1,llm/))) 777 call WriteField_p('vcovfi',reshape(vcov,(/iip1,jjm,llm/))) 778 call WriteField_p('tetafi',reshape(teta,(/iip1,jmp1,llm/))) 779 endif 843 844 cc$OMP MASTER 845 c if (debug) then 846 c call WriteField_p('ucovfi',reshape(ucov,(/iip1,jmp1,llm/))) 847 c call WriteField_p('vcovfi',reshape(vcov,(/iip1,jjm,llm/))) 848 c call WriteField_p('tetafi',reshape(teta,(/iip1,jmp1,llm/))) 849 c endif 850 cc$OMP END MASTER 851 780 852 #else 781 853 … … 799 871 800 872 c-jld 873 c$OMP MASTER 801 874 call resume_timer(timer_caldyn) 802 875 if (FirstPhysic) then … … 804 877 FirstPhysic=.false. 805 878 endif 879 c$OMP END MASTER 880 c$OMP END PARALLEL 806 881 ENDIF 807 882 … … 815 890 816 891 IF(apdiss) THEN 892 c$OMP PARALLEL DEFAULT(SHARED) 893 c$OMP+ PRIVATE(ijb,ije,tppn,tpn,tpps,tps) 894 c$OMP MASTER 817 895 call suspend_timer(timer_caldyn) 818 896 … … 822 900 823 901 call VTb(VThallo) 824 902 c$OMP END MASTER 903 904 c$OMP BARRIER 905 c$OMP MASTER 825 906 call Register_SwapFieldHallo(ucov,ucov,ip1jmp1,llm, 826 907 * jj_Nb_dissip,1,1,Request_dissip) … … 847 928 848 929 call start_timer(timer_dissip) 930 c$OMP END MASTER 931 c$OMP BARRIER 932 849 933 call covcont_p(llm,ucov,vcov,ucont,vcont) 850 934 call enercin_p(vcov,ucov,vcont,ucont,ecin0) … … 853 937 854 938 CALL dissip_p(vcov,ucov,teta,p,dvdis,dudis,dtetadis) 855 939 856 940 ijb=ij_begin 857 941 ije=ij_end 858 859 ucov(ijb:ije,1:llm)=ucov(ijb:ije,1:llm)+dudis(ijb:ije,1:llm) 860 942 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 943 DO l=1,llm 944 ucov(ijb:ije,l)=ucov(ijb:ije,l)+dudis(ijb:ije,l) 945 ENDDO 946 c$OMP END DO NOWAIT 861 947 if (pole_sud) ije=ije-iip1 862 vcov(ijb:ije,1:llm)=vcov(ijb:ije,1:llm)+dvdis(ijb:ije,1:llm) 948 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 949 DO l=1,llm 950 vcov(ijb:ije,l)=vcov(ijb:ije,l)+dvdis(ijb:ije,l) 951 ENDDO 952 c$OMP END DO NOWAIT 953 863 954 c teta=teta+dtetadis 864 955 … … 868 959 C On rajoute la tendance due a la transform. Ec -> E therm. cree 869 960 C lors de la dissipation 961 c$OMP BARRIER 962 c$OMP MASTER 870 963 call suspend_timer(timer_dissip) 871 964 call VTb(VThallo) … … 877 970 call VTe(VThallo) 878 971 call resume_timer(timer_dissip) 879 972 c$OMP END MASTER 973 c$OMP BARRIER 880 974 call covcont_p(llm,ucov,vcov,ucont,vcont) 881 975 call enercin_p(vcov,ucov,vcont,ucont,ecin) … … 883 977 ijb=ij_begin 884 978 ije=ij_end 885 979 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 886 980 do l=1,llm 887 981 do ij=ijb,ije … … 890 984 enddo 891 985 enddo 892 986 c$OMP END DO NOWAIT 893 987 endif 894 988 895 989 ijb=ij_begin 896 990 ije=ij_end 897 991 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 898 992 do l=1,llm 899 993 do ij=ijb,ije … … 901 995 enddo 902 996 enddo 903 997 c$OMP END DO NOWAIT 904 998 c------------------------------------------------------------------------ 905 999 … … 913 1007 914 1008 if (pole_nord) then 1009 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 915 1010 DO l = 1, llm 916 1011 DO ij = 1,iim … … 923 1018 ENDDO 924 1019 ENDDO 925 1020 c$OMP END DO NOWAIT 1021 1022 c$OMP MASTER 926 1023 DO ij = 1,iim 927 1024 tppn(ij) = aire( ij ) * ps ( ij ) … … 932 1029 ps( ij ) = tpn 933 1030 ENDDO 1031 c$OMP END MASTER 934 1032 endif 935 1033 936 1034 if (pole_sud) then 1035 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 937 1036 DO l = 1, llm 938 1037 DO ij = 1,iim … … 945 1044 ENDDO 946 1045 ENDDO 947 1046 c$OMP END DO NOWAIT 1047 1048 c$OMP MASTER 948 1049 DO ij = 1,iim 949 1050 tpps(ij) = aire(ij+ip1jm) * ps (ij+ip1jm) … … 954 1055 ps(ij+ip1jm) = tps 955 1056 ENDDO 1057 c$OMP END MASTER 956 1058 endif 957 1059 1060 1061 c$OMP BARRIER 1062 c$OMP MASTER 958 1063 call VTe(VTdissipation) 959 1064 … … 983 1088 call resume_timer(timer_caldyn) 984 1089 print *,'fin dissipation' 1090 c$OMP END MASTER 1091 c$OMP END PARALLEL 985 1092 END IF 986 1093 … … 1066 1173 1067 1174 IF( itau. EQ. itaufinp1 ) then 1068 c$$$ write(79,*) 'ucov',ucov 1069 c$$$ write(80,*) 'vcov',vcov 1070 c$$$ write(81,*) 'teta',teta 1071 c$$$ write(82,*) 'ps',ps 1072 c$$$ write(83,*) 'q',q 1073 c$$$ WRITE(85,*) 'q1 = ',q(:,:,1) 1074 c$$$ WRITE(86,*) 'q3 = ',q(:,:,3) 1075 1175 1176 call finalize_parallel 1076 1177 abort_message = 'Simulation finished' 1077 1078 1178 call abort_gcm(modname,abort_message,0) 1079 1179 ENDIF … … 1161 1261 1162 1262 1163 #ifdef CPP_IOIPSL1263 c#ifdef CPP_IOIPSL 1164 1264 CALL dynredem1_p("restart.nc",0.0, 1165 1265 , vcov,ucov,teta,q,nqmx,masse,ps) 1166 #endif1266 c#endif 1167 1267 1168 1268 CLOSE(99) … … 1218 1318 forward = .FALSE. 1219 1319 IF( itau. EQ. itaufinp1 ) then 1320 call finalize_parallel 1220 1321 abort_message = 'Simulation finished' 1221 1322 call abort_gcm(modname,abort_message,0) … … 1296 1397 ENDIF 1297 1398 1298 #ifdef CPP_IOIPSL1399 c#ifdef CPP_IOIPSL 1299 1400 IF(itau.EQ.itaufin) 1300 1401 . CALL dynredem1_p("restart.nc",0.0, 1301 1402 . vcov,ucov,teta,q,nqmx,masse,ps) 1302 #endif1403 c#endif 1303 1404 1304 1405 forward = .TRUE. … … 1309 1410 END IF 1310 1411 1311 STOP 1412 call finalize_parallel 1413 STOP 1312 1414 END
Note: See TracChangeset
for help on using the changeset viewer.