Changeset 1999 for LMDZ5/branches/testing/libf/dyn3dpar/caldyn_p.F
- Timestamp:
- Mar 20, 2014, 10:57:19 AM (11 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/dyn3dpar/caldyn_p.F
r1910 r1999 1 1 ! 2 ! $Header$ 3 ! 4 c 5 c 2 ! $Id$ 3 ! 6 4 #undef DEBUG_IO 7 c#define DEBUG_IO5 !#define DEBUG_IO 8 6 9 7 SUBROUTINE caldyn_p … … 15 13 IMPLICIT NONE 16 14 17 c=======================================================================18 c 19 cAuteur : P. Le Van20 c 21 cObjet:22 c------23 c 24 cCalcul des tendances dynamiques.25 c 26 cModif 04/93 F.Forget27 c=======================================================================28 29 c-----------------------------------------------------------------------30 c0. Declarations:31 c----------------15 !======================================================================= 16 ! 17 ! Auteur : P. Le Van 18 ! 19 ! Objet: 20 ! ------ 21 ! 22 ! Calcul des tendances dynamiques. 23 ! 24 ! Modif 04/93 F.Forget 25 !======================================================================= 26 27 !----------------------------------------------------------------------- 28 ! 0. Declarations: 29 ! ---------------- 32 30 33 31 #include "dimensions.h" … … 37 35 #include "comgeom.h" 38 36 39 c Arguments: 40 c ---------- 41 42 LOGICAL conser 43 44 INTEGER itau 45 REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm),teta(ip1jmp1,llm) 46 REAL ps(ip1jmp1),phis(ip1jmp1) 47 REAL pk(iip1,jjp1,llm),pkf(ip1jmp1,llm) 37 ! Arguments: 38 ! ---------- 39 40 LOGICAL,INTENT(IN) :: conser ! triggers printing some diagnostics 41 INTEGER,INTENT(IN) :: itau ! time step index 42 REAL,INTENT(IN) :: vcov(ip1jm,llm) ! covariant meridional wind 43 REAL,INTENT(IN) :: ucov(ip1jmp1,llm) ! covariant zonal wind 44 REAL,INTENT(IN) :: teta(ip1jmp1,llm) ! potential temperature 45 REAL,INTENT(IN) :: ps(ip1jmp1) ! surface pressure 46 REAL,INTENT(IN) :: phis(ip1jmp1) ! geopotential at the surface 47 REAL,INTENT(IN) :: pk(ip1jmp1,llm) ! Exner at mid-layer 48 REAL,INTENT(IN) :: pkf(ip1jmp1,llm) ! filtered Exner 49 REAL,INTENT(IN) :: phi(ip1jmp1,llm) ! geopotential 50 REAL,INTENT(OUT) :: masse(ip1jmp1,llm) ! air mass 51 REAL,INTENT(OUT) :: dv(ip1jm,llm) ! tendency on vcov 52 REAL,INTENT(OUT) :: du(ip1jmp1,llm) ! tendency on ucov 53 REAL,INTENT(OUT) :: dteta(ip1jmp1,llm) ! tenddency on teta 54 REAL,INTENT(OUT) :: dp(ip1jmp1) ! tendency on ps 55 REAL,INTENT(OUT) :: w(ip1jmp1,llm) ! vertical velocity 56 REAL,INTENT(OUT) :: pbaru(ip1jmp1,llm) ! mass flux in the zonal direction 57 REAL,INTENT(OUT) :: pbarv(ip1jm,llm) ! mass flux in the meridional direction 58 REAL,INTENT(IN) :: time ! current time 59 60 ! Local: 61 ! ------ 62 48 63 REAL,SAVE :: vcont(ip1jm,llm),ucont(ip1jmp1,llm) 49 REAL phi(ip1jmp1,llm),masse(ip1jmp1,llm)50 REAL dv(ip1jm,llm),du(ip1jmp1,llm)51 REAL dteta(ip1jmp1,llm),dp(ip1jmp1)52 REAL w(ip1jmp1,llm)53 REAL pbaru(ip1jmp1,llm),pbarv(ip1jm,llm)54 REAL time55 56 c Local:57 c ------58 59 64 REAL,SAVE :: ang(ip1jmp1,llm) 60 65 REAL,SAVE :: p(ip1jmp1,llmp1) … … 68 73 INTEGER ij,l,ijb,ije,ierr 69 74 70 c----------------------------------------------------------------------- 71 c Calcul des tendances dynamiques: 72 c -------------------------------- 75 !----------------------------------------------------------------------- 76 ! Compute dynamical tendencies: 77 !-------------------------------- 78 79 ! compute contravariant winds ucont() and vcont 73 80 CALL covcont_p ( llm , ucov , vcov , ucont, vcont ) 81 ! compute pressure p() 74 82 CALL pression_p ( ip1jmp1, ap , bp , ps , p ) 75 cym CALL psextbar ( ps , psexbarxy ) 76 c$OMP BARRIER 83 !ym CALL psextbar ( ps , psexbarxy ) 84 !$OMP BARRIER 85 ! compute mass in each atmospheric mesh: masse() 77 86 CALL massdair_p ( p , masse ) 87 ! compute X and Y-averages of mass, massebx() and masseby() 78 88 CALL massbar_p ( masse, massebx , masseby ) 89 ! compute XY-average of mass, massebxy() 79 90 call massbarxy_p( masse, massebxy ) 91 ! compute mass fluxes pbaru() and pbarv() 80 92 CALL flumass_p ( massebx, masseby , vcont, ucont ,pbaru, pbarv ) 93 ! compute dteta() , horizontal converging flux of theta 81 94 CALL dteta1_p ( teta , pbaru , pbarv, dteta ) 95 ! compute convm(), horizontal converging flux of mass 82 96 CALL convmas1_p ( pbaru, pbarv , convm ) 83 c$OMP BARRIER97 !$OMP BARRIER 84 98 CALL convmas2_p ( convm ) 85 c$OMP BARRIER99 !$OMP BARRIER 86 100 #ifdef DEBUG_IO 87 c$OMP BARRIER88 c$OMP MASTER101 !$OMP BARRIER 102 !$OMP MASTER 89 103 call WriteField_p('ucont',reshape(ucont,(/iip1,jmp1,llm/))) 90 104 call WriteField_p('vcont',reshape(vcont,(/iip1,jjm,llm/))) … … 98 112 call WriteField_p('dteta',reshape(dteta,(/iip1,jmp1,llm/))) 99 113 call WriteField_p('convm',reshape(convm,(/iip1,jmp1,llm/))) 100 c$OMP END MASTER101 c$OMP BARRIER114 !$OMP END MASTER 115 !$OMP BARRIER 102 116 #endif 103 117 104 c$OMP BARRIER105 c$OMP MASTER118 !$OMP BARRIER 119 !$OMP MASTER 106 120 ijb=ij_begin 107 121 ije=ij_end 108 122 ! compute pressure variation due to mass convergence 109 123 DO ij =ijb, ije 110 124 dp( ij ) = convm( ij,1 ) / airesurg( ij ) 111 125 ENDDO 112 c$OMP END MASTER 113 c$OMP BARRIER 114 c$OMP FLUSH 126 !$OMP END MASTER 127 !$OMP BARRIER 128 !$OMP FLUSH 129 130 ! compute vertical velocity w() 115 131 CALL vitvert_p ( convm , w ) 132 ! compute potential vorticity vorpot() 116 133 CALL tourpot_p ( vcov , ucov , massebxy , vorpot ) 134 ! compute rotation induced du() and dv() 117 135 CALL dudv1_p ( vorpot , pbaru , pbarv , du , dv ) 118 136 119 137 #ifdef DEBUG_IO 120 c$OMP BARRIER121 c$OMP MASTER138 !$OMP BARRIER 139 !$OMP MASTER 122 140 call WriteField_p('w',reshape(w,(/iip1,jmp1,llm/))) 123 141 call WriteField_p('vorpot',reshape(vorpot,(/iip1,jjm,llm/))) 124 142 call WriteField_p('du',reshape(du,(/iip1,jmp1,llm/))) 125 143 call WriteField_p('dv',reshape(dv,(/iip1,jjm,llm/))) 126 c$OMP END MASTER127 c$OMP BARRIER144 !$OMP END MASTER 145 !$OMP BARRIER 128 146 #endif 147 148 ! compute kinetic energy ecin() 129 149 CALL enercin_p ( vcov , ucov , vcont , ucont , ecin ) 150 ! compute Bernouilli function bern() 130 151 CALL bernoui_p ( ip1jmp1, llm , phi , ecin , bern ) 152 ! compute and add du() and dv() contributions from Bernouilli and pressure 131 153 CALL dudv2_p ( teta , pkf , bern , du , dv ) 132 154 133 155 #ifdef DEBUG_IO 134 c$OMP BARRIER135 c$OMP MASTER156 !$OMP BARRIER 157 !$OMP MASTER 136 158 call WriteField_p('ecin',reshape(ecin,(/iip1,jmp1,llm/))) 137 159 call WriteField_p('bern',reshape(bern,(/iip1,jmp1,llm/))) … … 139 161 call WriteField_p('dv',reshape(dv,(/iip1,jjm,llm/))) 140 162 call WriteField_p('pkf',reshape(pkf,(/iip1,jmp1,llm/))) 141 c$OMP END MASTER142 c$OMP BARRIER163 !$OMP END MASTER 164 !$OMP BARRIER 143 165 #endif 144 166 … … 149 171 if (pole_sud) ije=ij_end 150 172 151 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)173 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 152 174 DO l=1,llm 153 175 DO ij=ijb,ije … … 155 177 ENDDO 156 178 ENDDO 157 c$OMP END DO 158 179 !$OMP END DO 180 181 ! compute vertical advection contributions to du(), dv() and dteta() 159 182 CALL advect_new_p(ang,vcov,teta,w,massebx,masseby,du,dv,dteta) 160 183 161 CWARNING probleme de peridocite de dv sur les PC/linux. Pb d'arrondi162 Cprobablement. Observe sur le code compile avec pgf90 3.0-1184 ! WARNING probleme de peridocite de dv sur les PC/linux. Pb d'arrondi 185 ! probablement. Observe sur le code compile avec pgf90 3.0-1 163 186 ijb=ij_begin 164 187 ije=ij_end 165 188 if (pole_sud) ije=ij_end-iip1 166 189 167 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)190 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 168 191 DO l = 1, llm 169 192 DO ij = ijb, ije, iip1 170 193 IF( dv(ij,l).NE.dv(ij+iim,l) ) THEN 171 cPRINT *,'!!!ATTENTION!!! probleme de periodicite sur vcov',172 c, ' dans caldyn'173 cPRINT *,' l, ij = ', l, ij, ij+iim,dv(ij+iim,l),dv(ij,l)194 ! PRINT *,'!!!ATTENTION!!! probleme de periodicite sur vcov', 195 ! , ' dans caldyn' 196 ! PRINT *,' l, ij = ', l, ij, ij+iim,dv(ij+iim,l),dv(ij,l) 174 197 dv(ij+iim,l) = dv(ij,l) 175 198 endif 176 199 enddo 177 200 enddo 178 c$OMP END DO NOWAIT179 c-----------------------------------------------------------------------180 c Sorties eventuelles des variables de controle:181 c ----------------------------------------------201 !$OMP END DO NOWAIT 202 !----------------------------------------------------------------------- 203 ! Output some control variables: 204 !--------------------------------- 182 205 183 206 IF( conser ) THEN 184 cym ---> exige communication collective ( aussi dans advect)207 ! ym ---> exige communication collective ( aussi dans advect) 185 208 CALL sortvarc 186 $( itau,ucov,teta,ps,masse,pk,phis,vorpot,phi,bern,dp,time,vcov )209 & ( itau,ucov,teta,ps,masse,pk,phis,vorpot,phi,bern,dp,time,vcov ) 187 210 188 211 ENDIF 189 212 190 RETURN191 213 END
Note: See TracChangeset
for help on using the changeset viewer.