Changeset 8 for trunk/libf/dyn3dpar/leapfrog_p.F
- Timestamp:
- Nov 2, 2010, 12:38:23 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/libf/dyn3dpar/leapfrog_p.F
r7 r8 90 90 REAL,SAVE :: phi(ip1jmp1,llm) ! geopotentiel 91 91 REAL,SAVE :: w(ip1jmp1,llm) ! vitesse verticale 92 ! ADAPTATION GCM POUR CP(T) 93 REAL,SAVE :: temp(ip1jmp1,llm) ! temperature 94 REAL,SAVE :: tsurpk(ip1jmp1,llm) ! cpp*T/pk 92 95 93 96 c variables dynamiques intermediaire pour le transport … … 475 478 & jj_nb_caldyn,0,0,TestRequest) 476 479 enddo 480 ! ADAPTATION GCM POUR CP(T) 481 call Register_SwapFieldHallo(temp,temp,ip1jmp1,llm, 482 & jj_Nb_caldyn,0,0,TestRequest) 483 call Register_SwapFieldHallo(tsurpk,tsurpk,ip1jmp1,llm, 484 & jj_Nb_caldyn,0,0,TestRequest) 477 485 478 486 call SetDistrib(jj_nb_caldyn) … … 505 513 call Register_Hallo(pks,ip1jmp1,1,1,1,1,1,TestRequest) 506 514 call Register_Hallo(p,ip1jmp1,llmp1,1,1,1,1,TestRequest) 515 ! ADAPTATION GCM POUR CP(T) 516 call Register_Hallo(temp,ip1jmp1,llm,1,1,1,1,TestRequest) 517 call Register_Hallo(tsurpk,ip1jmp1,llm,1,1,1,1,TestRequest) 507 518 508 519 c do j=1,nqtot … … 543 554 True_itau=True_itau+1 544 555 545 c$OMP MASTER 556 ! ADAPTATION GCM POUR CP(T) 557 call tpot2t_p(ip1jmp1,llm,teta,temp,pk) 558 ijb=ij_begin 559 ije=ij_end 560 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 561 do l=1,llm 562 tsurpk(ijb:ije,llm)=cpp*temp(ijb:ije,llm)/pk(ijb:ije,llm) 563 enddo 564 !$OMP END DO 565 546 566 IF (prt_level>9) THEN 547 567 WRITE(lunout,*)"leapfrog_p: Iteration No",True_itau … … 551 571 call start_timer(timer_caldyn) 552 572 553 CALL geopot_p ( ip1jmp1, teta , pk , pks, phis , phi ) 554 573 ! ADAPTATION GCM POUR CP(T) 574 ! CALL geopot_p ( ip1jmp1, teta , pk , pks, phis , phi ) 575 CALL geopot_p ( ip1jmp1, tsurpk , pk , pks, phis , phi ) 555 576 556 577 call VTb(VTcaldyn) … … 561 582 ! CALL FTRACE_REGION_BEGIN("caldyn") 562 583 time = jD_cur + jH_cur 584 ! ADAPTATION GCM POUR CP(T) 585 ! CALL caldyn_p 586 ! $ ( itau,ucov,vcov,teta,ps,masse,pk,pkf,phis , 587 ! $ phi,conser,du,dv,dteta,dp,w, pbaru,pbarv, time ) 563 588 CALL caldyn_p 564 $ ( itau,ucov,vcov,teta,ps,masse,pk,pkf, phis,589 $ ( itau,ucov,vcov,teta,ps,masse,pk,pkf,tsurpk,phis, 565 590 $ phi,conser,du,dv,dteta,dp,w, pbaru,pbarv, time ) 566 591 … … 701 726 702 727 703 c In bterface avec les routines de phylmd (phymars ... )728 c Interface avec les routines de phylmd (phymars ... ) 704 729 c ----------------------------------------------------- 705 730 … … 1075 1100 1076 1101 c dissipation 1102 ! ADAPTATION GCM POUR CP(T) 1103 call tpot2t_p(ip1jmp1,llm,teta,temp,pk) 1077 1104 1078 1105 ! CALL FTRACE_REGION_BEGIN("dissip") … … 1085 1112 DO l=1,llm 1086 1113 ucov(ijb:ije,l)=ucov(ijb:ije,l)+dudis(ijb:ije,l) 1114 dudis(ijb:ije,l)=dudis(ijb:ije,l)/dtdiss ! passage en (m/s)/s 1087 1115 ENDDO 1088 1116 c$OMP END DO NOWAIT … … 1091 1119 DO l=1,llm 1092 1120 vcov(ijb:ije,l)=vcov(ijb:ije,l)+dvdis(ijb:ije,l) 1121 dvdis(ijb:ije,l)=dvdis(ijb:ije,l)/dtdiss ! passage en (m/s)/s 1093 1122 ENDDO 1094 1123 c$OMP END DO NOWAIT 1095 1096 c teta=teta+dtetadis1097 1124 1098 1125 … … 1124 1151 do l=1,llm 1125 1152 do ij=ijb,ije 1126 dtetaecdt(ij,l)= (ecin0(ij,l)-ecin(ij,l))/ pk(ij,l) 1153 ! ADAPTATION GCM POUR CP(T) 1154 ! dtetaecdt(ij,l)= (ecin0(ij,l)-ecin(ij,l))/ pk(ij,l) 1155 ! dtetadis(ij,l)=dtetadis(ij,l)+dtetaecdt(ij,l) 1156 temp(ij,l)=temp(ij,l) + 1157 & (ecin0(ij,l)-ecin(ij,l))/cpdet(temp(ij,l)) 1158 enddo 1159 enddo 1160 c$OMP END DO 1161 call t2tpot_p(ip1jmp1,llm,temp,ztetaec,pk) 1162 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 1163 do l=1,llm 1164 do ij=ijb,ije 1165 dtetaecdt(ij,l)=ztetaec(ij,l)-teta(ij,l) 1127 1166 dtetadis(ij,l)=dtetadis(ij,l)+dtetaecdt(ij,l) 1128 1167 enddo 1129 1168 enddo 1130 c$OMP END DO NOWAIT 1169 c$OMP END DO NOWAIT 1131 1170 endif ! of if (dissip_conservative) 1132 1171 … … 1137 1176 do ij=ijb,ije 1138 1177 teta(ij,l)=teta(ij,l)+dtetadis(ij,l) 1178 dtetadis(ij,l)=dtetadis(ij,l)/dtdiss ! passage en K/s 1139 1179 enddo 1140 1180 enddo … … 1372 1412 1373 1413 c ATTENTION!!! bilan_dyn_p ne marche probablement pas avec OpenMP 1374 CALL bilan_dyn_p(2,dtvr*iperiod,dtvr*day_step*periodav, 1375 , ps,masse,pk,pbaru,pbarv,teta,phi,ucov,vcov,q) 1414 ! CALL bilan_dyn_p(2,dtvr*iperiod,dtvr*day_step*periodav, 1415 ! , ps,masse,pk,pbaru,pbarv,teta,phi,ucov,vcov,q) 1416 c les traceurs ne sont pas sortis, trop lourd. 1417 c Peut changer eventuellement si besoin. 1418 CALL bilan_dyn_p(dtvr*iperiod,dtvr*day_step*periodav, 1419 & ps,masse,pk,pbaru,pbarv,teta,phi,ucov,vcov, 1420 & du,dudis,duspg,dufi) 1376 1421 c$OMP END MASTER 1377 1422 ENDIF !ok_dynzon … … 1411 1456 c$OMP MASTER 1412 1457 nbetat = nbetatdem 1413 CALL geopot_p(ip1jmp1,teta,pk,pks,phis,phi) 1458 1459 ! ADAPTATION GCM POUR CP(T) 1460 call tpot2t_p(ip1jmp1,llm,teta,temp,pk) 1461 ijb=ij_begin 1462 ije=ij_end 1463 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 1464 do l=1,llm 1465 tsurpk(ijb:ije,llm)=cpp*temp(ijb:ije,llm)/pk(ijb:ije,llm) 1466 enddo 1467 !$OMP END DO 1468 ! CALL geopot_p(ip1jmp1,teta,pk,pks,phis,phi) 1469 CALL geopot_p ( ip1jmp1, tsurpk , pk , pks, phis , phi ) 1414 1470 1415 1471 cym unat=0. … … 1488 1544 c$OMP MASTER 1489 1545 1490 ! if (planet_type.eq."earth") then 1546 if (planet_type.eq."mars") then 1547 ! POUR MARS, METTRE UNE FONCTION A PART, genre dynredem1_mars 1548 abort_message = 'dynredem1_mars A FAIRE' 1549 call abort_gcm(modname,abort_message,0) 1550 else 1491 1551 ! Write an Earth-format restart file 1492 1552 CALL dynredem1_p("restart.nc",0.0, 1493 1553 & vcov,ucov,teta,q,masse,ps) 1494 ! endif ! of if (planet_type.eq."earth")1554 endif ! of if (planet_type.eq."mars") 1495 1555 1496 1556 ! CLOSE(99) … … 1578 1638 ! CALL writedynav_p(histaveid, itau,vcov , 1579 1639 ! , ucov,teta,pk,phi,q,masse,ps,phis) 1580 CALL bilan_dyn_p(2,dtvr*iperiod,dtvr*day_step*periodav, 1581 , ps,masse,pk,pbaru,pbarv,teta,phi,ucov,vcov,q) 1640 ! CALL bilan_dyn_p(2,dtvr*iperiod,dtvr*day_step*periodav, 1641 ! , ps,masse,pk,pbaru,pbarv,teta,phi,ucov,vcov,q) 1642 c les traceurs ne sont pas sortis, trop lourd. 1643 c Peut changer eventuellement si besoin. 1644 CALL bilan_dyn_p(dtvr*iperiod,dtvr*day_step*periodav, 1645 & ps,masse,pk,pbaru,pbarv,teta,phi,ucov,vcov, 1646 & du,dudis,duspg,dufi) 1647 1582 1648 c$OMP END MASTER 1583 1649 END IF !ok_dynzon … … 1614 1680 c$OMP MASTER 1615 1681 nbetat = nbetatdem 1616 CALL geopot_p(ip1jmp1,teta,pk,pks,phis,phi) 1682 ! ADAPTATION GCM POUR CP(T) 1683 call tpot2t_p(ip1jmp1,llm,teta,temp,pk) 1684 ijb=ij_begin 1685 ije=ij_end 1686 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 1687 do l=1,llm 1688 tsurpk(ijb:ije,llm)=cpp*temp(ijb:ije,llm)/ 1689 & pk(ijb:ije,llm) 1690 enddo 1691 !$OMP END DO 1692 ! CALL geopot_p(ip1jmp1,teta,pk,pks,phis,phi) 1693 CALL geopot_p(ip1jmp1,tsurpk,pk,pks,phis,phi) 1617 1694 1618 1695 cym unat=0. … … 1681 1758 1682 1759 IF(itau.EQ.itaufin) THEN 1683 ! if (planet_type.eq."earth") then 1760 if (planet_type.eq."mars") then 1761 ! POUR MARS, METTRE UNE FONCTION A PART, genre dynredem1_mars 1762 abort_message = 'dynredem1_mars A FAIRE' 1763 call abort_gcm(modname,abort_message,0) 1764 else 1684 1765 c$OMP MASTER 1685 1766 CALL dynredem1_p("restart.nc",0.0, 1686 1767 . vcov,ucov,teta,q,masse,ps) 1687 1768 c$OMP END MASTER 1688 ! endif ! of if (planet_type.eq."earth")1769 endif ! of if (planet_type.eq."mars") 1689 1770 ENDIF ! of IF(itau.EQ.itaufin) 1690 1771
Note: See TracChangeset
for help on using the changeset viewer.