Changeset 1999 for LMDZ5/branches/testing/libf/dyn3dpar
- Timestamp:
- Mar 20, 2014, 10:57:19 AM (11 years ago)
- Location:
- LMDZ5/branches/testing
- Files:
-
- 124 deleted
- 16 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/addfi_p.F
r1910 r1999 55 55 c ----------- 56 56 c 57 REAL pdt 58 c 59 REAL pvcov(ip1jm,llm),pucov(ip1jmp1,llm) 60 REAL pteta(ip1jmp1,llm),pq(ip1jmp1,llm,nqtot),pps(ip1jmp1) 61 c 62 REAL pdvfi(ip1jm,llm),pdufi(ip1jmp1,llm) 63 REAL pdqfi(ip1jmp1,llm,nqtot),pdhfi(ip1jmp1,llm),pdpfi(ip1jmp1) 64 c 65 LOGICAL leapf,forward 57 REAL,INTENT(IN) :: pdt ! time step for the integration (s) 58 c 59 REAL,INTENT(INOUT) :: pvcov(ip1jm,llm) ! covariant meridional wind 60 REAL,INTENT(INOUT) :: pucov(ip1jmp1,llm) ! covariant zonal wind 61 REAL,INTENT(INOUT) :: pteta(ip1jmp1,llm) ! potential temperature 62 REAL,INTENT(INOUT) :: pq(ip1jmp1,llm,nqtot) ! tracers 63 REAL,INTENT(INOUT) :: pps(ip1jmp1) ! surface pressure (Pa) 64 c respective tendencies (.../s) to add 65 REAL,INTENT(IN) :: pdvfi(ip1jm,llm) 66 REAL,INTENT(IN) :: pdufi(ip1jmp1,llm) 67 REAL,INTENT(IN) :: pdqfi(ip1jmp1,llm,nqtot) 68 REAL,INTENT(IN) :: pdhfi(ip1jmp1,llm) 69 REAL,INTENT(IN) :: pdpfi(ip1jmp1) 70 c 71 LOGICAL,INTENT(IN) :: leapf,forward ! not used 66 72 c 67 73 c … … 71 77 REAL xpn(iim),xps(iim),tpn,tps 72 78 INTEGER j,k,iq,ij 73 REAL qtestw, qtestt 74 PARAMETER ( qtestw = 1.0e-15 ) 75 PARAMETER ( qtestt = 1.0e-40 ) 79 REAL,PARAMETER :: qtestw = 1.0e-15 80 REAL,PARAMETER :: qtestt = 1.0e-40 76 81 77 82 REAL SSUM -
LMDZ5/branches/testing/libf/dyn3dpar/advtrac_p.F90
r1910 r1999 16 16 USE Vampir 17 17 USE times 18 USE infotrac 19 USE control_mod 18 USE infotrac, ONLY: nqtot, iadv 19 USE control_mod, ONLY: iapp_tracvl, day_step, planet_type 20 20 IMPLICIT NONE 21 21 ! … … 34 34 ! Arguments 35 35 !------------------------------------------------------------------- 36 INTEGER,INTENT(OUT) :: iapptrac 37 REAL,INTENT(IN) :: pbaru(ip1jmp1,llm) 38 REAL,INTENT(IN) :: pbarv(ip1jm,llm) 39 REAL,INTENT(INOUT) :: q(ip1jmp1,llm,nqtot) 40 REAL,INTENT(IN) :: masse(ip1jmp1,llm) 41 REAL,INTENT(IN) :: p( ip1jmp1,llmp1 ) 42 REAL,INTENT(IN) :: teta(ip1jmp1,llm) 43 REAL,INTENT(IN) :: pk(ip1jmp1,llm) 44 REAL,INTENT(OUT) :: flxw(ip1jmp1,llm) 45 !------------------------------------------------------------------- 36 46 ! Ajout PPM 37 47 !-------------------------------------------------------- 38 48 REAL massebx(ip1jmp1,llm),masseby(ip1jm,llm) 39 !--------------------------------------------------------40 INTEGER iapptrac41 REAL pbaru(ip1jmp1,llm),pbarv(ip1jm,llm)42 REAL q(ip1jmp1,llm,nqtot),masse(ip1jmp1,llm)43 REAL p( ip1jmp1,llmp1 ),teta(ip1jmp1,llm)44 REAL pk(ip1jmp1,llm)45 REAL :: flxw(ip1jmp1,llm)46 47 49 !------------------------------------------------------------- 48 50 ! Variables locales -
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 -
LMDZ5/branches/testing/libf/dyn3dpar/calfis_p.F
r1910 r1999 38 38 Use Write_field_p 39 39 USE Times 40 USE infotrac 41 USE control_mod 40 USE infotrac, ONLY: nqtot, niadv, tname 41 USE control_mod, ONLY: planet_type, nsplit_phys 42 42 43 43 IMPLICIT NONE … … 112 112 c Arguments : 113 113 c ----------- 114 LOGICAL lafin 115 ! REAL heure 116 REAL, intent(in):: jD_cur, jH_cur 117 REAL pvcov(iip1,jjm,llm) 118 REAL pucov(iip1,jjp1,llm) 119 REAL pteta(iip1,jjp1,llm) 120 REAL pmasse(iip1,jjp1,llm) 121 REAL pq(iip1,jjp1,llm,nqtot) 122 REAL pphis(iip1,jjp1) 123 REAL pphi(iip1,jjp1,llm) 124 c 125 REAL pdvcov(iip1,jjm,llm) 126 REAL pducov(iip1,jjp1,llm) 127 REAL pdteta(iip1,jjp1,llm) 128 REAL pdq(iip1,jjp1,llm,nqtot) 129 REAL flxw(iip1,jjp1,llm) ! Flux de masse verticale sur la grille dynamique 130 c 131 REAL pps(iip1,jjp1) 132 REAL pp(iip1,jjp1,llmp1) 133 REAL ppk(iip1,jjp1,llm) 134 c 135 REAL pdvfi(iip1,jjm,llm) 136 REAL pdufi(iip1,jjp1,llm) 137 REAL pdhfi(iip1,jjp1,llm) 138 REAL pdqfi(iip1,jjp1,llm,nqtot) 139 REAL pdpsfi(iip1,jjp1) 140 141 INTEGER longcles 142 PARAMETER ( longcles = 20 ) 143 REAL clesphy0( longcles ) 114 LOGICAL,INTENT(IN) :: lafin ! .true. for the very last call to physics 115 REAL,INTENT(IN) :: jD_cur, jH_cur 116 REAL,INTENT(IN) :: pvcov(iip1,jjm,llm) ! covariant meridional velocity 117 REAL,INTENT(IN) :: pucov(iip1,jjp1,llm) ! covariant zonal velocity 118 REAL,INTENT(IN) :: pteta(iip1,jjp1,llm) ! potential temperature 119 REAL,INTENT(IN) :: pmasse(iip1,jjp1,llm) ! mass in each cell ! not used 120 REAL,INTENT(IN) :: pq(iip1,jjp1,llm,nqtot) ! tracers 121 REAL,INTENT(IN) :: pphis(iip1,jjp1) ! surface geopotential 122 REAL,INTENT(IN) :: pphi(iip1,jjp1,llm) ! geopotential 123 124 REAL,INTENT(IN) :: pdvcov(iip1,jjm,llm) ! dynamical tendency on vcov ! not used 125 REAL,INTENT(IN) :: pducov(iip1,jjp1,llm) ! dynamical tendency on ucov 126 REAL,INTENT(IN) :: pdteta(iip1,jjp1,llm) ! dynamical tendency on teta 127 ! NB: pdteta is used only to compute pcvgt which is in fact not used... 128 REAL,INTENT(IN) :: pdq(iip1,jjp1,llm,nqtot) ! dynamical tendency on tracers 129 ! NB: pdq is only used to compute pcvgq which is in fact not used... 130 131 REAL,INTENT(IN) :: pps(iip1,jjp1) ! surface pressure (Pa) 132 REAL,INTENT(IN) :: pp(iip1,jjp1,llmp1) ! pressure at mesh interfaces (Pa) 133 REAL,INTENT(IN) :: ppk(iip1,jjp1,llm) ! Exner at mid-layer 134 REAL,INTENT(IN) :: flxw(iip1,jjp1,llm) ! Vertical mass flux on dynamics grid 135 136 ! tendencies (in */s) from the physics 137 REAL,INTENT(OUT) :: pdvfi(iip1,jjm,llm) ! tendency on covariant meridional wind 138 REAL,INTENT(OUT) :: pdufi(iip1,jjp1,llm) ! tendency on covariant zonal wind 139 REAL,INTENT(OUT) :: pdhfi(iip1,jjp1,llm) ! tendency on potential temperature (K/s) 140 REAL,INTENT(OUT) :: pdqfi(iip1,jjp1,llm,nqtot) ! tendency on tracers 141 REAL,INTENT(OUT) :: pdpsfi(iip1,jjp1) ! tendency on surface pressure (Pa/s) 142 143 INTEGER,PARAMETER :: longcles = 20 144 REAL,INTENT(IN) :: clesphy0( longcles ) ! unused 144 145 145 146 #ifdef CPP_PHYS … … 217 218 c 218 219 cIM diagnostique PVteta, Amip2 219 INTEGER ntetaSTD 220 PARAMETER(ntetaSTD=3) 221 REAL rtetaSTD(ntetaSTD) 222 DATA rtetaSTD/350., 380., 405./ ! Earth-specific values, beware !! 220 INTEGER,PARAMETER :: ntetaSTD=3 221 REAL,SAVE :: rtetaSTD(ntetaSTD)=(/350.,380.,405./) ! Earth-specific, beware !! 223 222 REAL PVteta(klon,ntetaSTD) 224 223 225 226 224 REAL SSUM 227 225 228 LOGICAL firstcal, debut 229 DATA firstcal/.true./ 230 SAVE firstcal,debut 226 LOGICAL,SAVE :: firstcal=.true., debut=.true. 231 227 c$OMP THREADPRIVATE(firstcal,debut) 232 228 -
LMDZ5/branches/testing/libf/dyn3dpar/ce0l.F90
r1910 r1999 115 115 END IF 116 116 117 IF (grilles_gcm_netcdf) THEN 118 WRITE(lunout,'(//)') 119 WRITE(lunout,*) ' *************************** ' 120 WRITE(lunout,*) ' *** grilles_gcm_netcdf *** ' 121 WRITE(lunout,*) ' *************************** ' 122 WRITE(lunout,'(//)') 123 CALL grilles_gcm_netcdf_sub(masque,phis) 124 END IF 117 WRITE(lunout,'(//)') 118 WRITE(lunout,*) ' *************************** ' 119 WRITE(lunout,*) ' *** grilles_gcm_netcdf *** ' 120 WRITE(lunout,*) ' *************************** ' 121 WRITE(lunout,'(//)') 122 CALL grilles_gcm_netcdf_sub(masque,phis) 125 123 126 124 #ifdef CPP_MPI -
LMDZ5/branches/testing/libf/dyn3dpar/conf_gcm.F
r1910 r1999 942 942 ok_etat0 = .TRUE. 943 943 CALL getin('ok_etat0',ok_etat0) 944 945 !Config Key = grilles_gcm_netcdf946 !Config Desc = creation de fichier grilles_gcm.nc dans create_etat0_limit947 !Config Def = n948 grilles_gcm_netcdf = .FALSE.949 CALL getin('grilles_gcm_netcdf',grilles_gcm_netcdf)950 944 951 945 write(lunout,*)' #########################################' … … 997 991 write(lunout,*)' ok_limit = ', ok_limit 998 992 write(lunout,*)' ok_etat0 = ', ok_etat0 999 write(lunout,*)' grilles_gcm_netcdf = ', grilles_gcm_netcdf1000 993 c 1001 994 RETURN -
LMDZ5/branches/testing/libf/dyn3dpar/dissip_p.F
r1910 r1999 1 ! 2 ! $Id$ 3 ! 1 4 SUBROUTINE dissip_p( vcov,ucov,teta,p, dv,du,dh ) 2 5 c … … 34 37 c ---------- 35 38 36 REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm),teta(ip1jmp1,llm) 37 REAL p( ip1jmp1,llmp1 ) 38 REAL dv(ip1jm,llm),du(ip1jmp1,llm),dh(ip1jmp1,llm) 39 REAL,INTENT(IN) :: vcov(ip1jm,llm) ! covariant meridional wind 40 REAL,INTENT(IN) :: ucov(ip1jmp1,llm) ! covariant zonal wind 41 REAL,INTENT(IN) :: teta(ip1jmp1,llm) ! potentail temperature 42 REAL,INTENT(IN) :: p(ip1jmp1,llmp1) ! pressure 43 ! tendencies (.../s) on covariant winds and potential temperature 44 REAL,INTENT(OUT) :: dv(ip1jm,llm) 45 REAL,INTENT(OUT) :: du(ip1jmp1,llm) 46 REAL,INTENT(OUT) :: dh(ip1jmp1,llm) 39 47 40 48 c Local: -
LMDZ5/branches/testing/libf/dyn3dpar/dynetat0.F
r1910 r1999 67 67 write(lunout,*)'dynetat0: Pb d''ouverture du fichier start.nc' 68 68 write(lunout,*)' ierr = ', ierr 69 CALL ABORT 69 CALL ABORT_gcm("dynetat0", "", 1) 70 70 ENDIF 71 71 … … 74 74 IF (ierr .NE. NF_NOERR) THEN 75 75 write(lunout,*)"dynetat0: Le champ <controle> est absent" 76 CALL abort76 CALL ABORT_gcm("dynetat0", "", 1) 77 77 ENDIF 78 78 ierr = nf90_get_var(nid, nvarid, tab_cntrl) 79 79 IF (ierr .NE. NF_NOERR) THEN 80 80 write(lunout,*)"dynetat0: Lecture echoue pour <controle>" 81 CALL abort81 CALL ABORT_gcm("dynetat0", "", 1) 82 82 ENDIF 83 83 … … 154 154 IF (ierr .NE. NF_NOERR) THEN 155 155 write(lunout,*)"dynetat0: Le champ <rlonu> est absent" 156 CALL abort156 CALL ABORT_gcm("dynetat0", "", 1) 157 157 ENDIF 158 158 ierr = nf90_get_var(nid, nvarid, rlonu) 159 159 IF (ierr .NE. NF_NOERR) THEN 160 160 write(lunout,*)"dynetat0: Lecture echouee pour <rlonu>" 161 CALL abort161 CALL ABORT_gcm("dynetat0", "", 1) 162 162 ENDIF 163 163 … … 165 165 IF (ierr .NE. NF_NOERR) THEN 166 166 write(lunout,*)"dynetat0: Le champ <rlatu> est absent" 167 CALL abort167 CALL ABORT_gcm("dynetat0", "", 1) 168 168 ENDIF 169 169 ierr = nf90_get_var(nid, nvarid, rlatu) 170 170 IF (ierr .NE. NF_NOERR) THEN 171 171 write(lunout,*)"dynetat0: Lecture echouee pour <rlatu>" 172 CALL abort172 CALL ABORT_gcm("dynetat0", "", 1) 173 173 ENDIF 174 174 … … 176 176 IF (ierr .NE. NF_NOERR) THEN 177 177 write(lunout,*)"dynetat0: Le champ <rlonv> est absent" 178 CALL abort178 CALL ABORT_gcm("dynetat0", "", 1) 179 179 ENDIF 180 180 ierr = nf90_get_var(nid, nvarid, rlonv) 181 181 IF (ierr .NE. NF_NOERR) THEN 182 182 write(lunout,*)"dynetat0: Lecture echouee pour <rlonv>" 183 CALL abort183 CALL ABORT_gcm("dynetat0", "", 1) 184 184 ENDIF 185 185 … … 187 187 IF (ierr .NE. NF_NOERR) THEN 188 188 write(lunout,*)"dynetat0: Le champ <rlatv> est absent" 189 CALL abort189 CALL ABORT_gcm("dynetat0", "", 1) 190 190 ENDIF 191 191 ierr = nf90_get_var(nid, nvarid, rlatv) 192 192 IF (ierr .NE. NF_NOERR) THEN 193 193 write(lunout,*)"dynetat0: Lecture echouee pour rlatv" 194 CALL abort194 CALL ABORT_gcm("dynetat0", "", 1) 195 195 ENDIF 196 196 … … 198 198 IF (ierr .NE. NF_NOERR) THEN 199 199 write(lunout,*)"dynetat0: Le champ <cu> est absent" 200 CALL abort200 CALL ABORT_gcm("dynetat0", "", 1) 201 201 ENDIF 202 202 ierr = nf90_get_var(nid, nvarid, cu) 203 203 IF (ierr .NE. NF_NOERR) THEN 204 204 write(lunout,*)"dynetat0: Lecture echouee pour <cu>" 205 CALL abort205 CALL ABORT_gcm("dynetat0", "", 1) 206 206 ENDIF 207 207 … … 209 209 IF (ierr .NE. NF_NOERR) THEN 210 210 write(lunout,*)"dynetat0: Le champ <cv> est absent" 211 CALL abort211 CALL ABORT_gcm("dynetat0", "", 1) 212 212 ENDIF 213 213 ierr = nf90_get_var(nid, nvarid, cv) 214 214 IF (ierr .NE. NF_NOERR) THEN 215 215 write(lunout,*)"dynetat0: Lecture echouee pour <cv>" 216 CALL abort216 CALL ABORT_gcm("dynetat0", "", 1) 217 217 ENDIF 218 218 … … 220 220 IF (ierr .NE. NF_NOERR) THEN 221 221 write(lunout,*)"dynetat0: Le champ <aire> est absent" 222 CALL abort222 CALL ABORT_gcm("dynetat0", "", 1) 223 223 ENDIF 224 224 ierr = nf90_get_var(nid, nvarid, aire) 225 225 IF (ierr .NE. NF_NOERR) THEN 226 226 write(lunout,*)"dynetat0: Lecture echouee pour <aire>" 227 CALL abort227 CALL ABORT_gcm("dynetat0", "", 1) 228 228 ENDIF 229 229 … … 231 231 IF (ierr .NE. NF_NOERR) THEN 232 232 write(lunout,*)"dynetat0: Le champ <phisinit> est absent" 233 CALL abort233 CALL ABORT_gcm("dynetat0", "", 1) 234 234 ENDIF 235 235 ierr = nf90_get_var(nid, nvarid, phis) 236 236 IF (ierr .NE. NF_NOERR) THEN 237 237 write(lunout,*)"dynetat0: Lecture echouee pour <phisinit>" 238 CALL abort238 CALL ABORT_gcm("dynetat0", "", 1) 239 239 ENDIF 240 240 … … 246 246 IF (ierr .NE. NF_NOERR) THEN 247 247 write(lunout,*)"dynetat0: Le champ <Time> est absent" 248 CALL abort248 CALL ABORT_gcm("dynetat0", "", 1) 249 249 ENDIF 250 250 ENDIF … … 252 252 IF (ierr .NE. NF_NOERR) THEN 253 253 write(lunout,*)"dynetat0: Lecture echouee <temps>" 254 CALL abort254 CALL ABORT_gcm("dynetat0", "", 1) 255 255 ENDIF 256 256 … … 258 258 IF (ierr .NE. NF_NOERR) THEN 259 259 write(lunout,*)"dynetat0: Le champ <ucov> est absent" 260 CALL abort260 CALL ABORT_gcm("dynetat0", "", 1) 261 261 ENDIF 262 262 ierr = nf90_get_var(nid, nvarid, ucov) 263 263 IF (ierr .NE. NF_NOERR) THEN 264 264 write(lunout,*)"dynetat0: Lecture echouee pour <ucov>" 265 CALL abort265 CALL ABORT_gcm("dynetat0", "", 1) 266 266 ENDIF 267 267 … … 269 269 IF (ierr .NE. NF_NOERR) THEN 270 270 write(lunout,*)"dynetat0: Le champ <vcov> est absent" 271 CALL abort271 CALL ABORT_gcm("dynetat0", "", 1) 272 272 ENDIF 273 273 ierr = nf90_get_var(nid, nvarid, vcov) 274 274 IF (ierr .NE. NF_NOERR) THEN 275 275 write(lunout,*)"dynetat0: Lecture echouee pour <vcov>" 276 CALL abort276 CALL ABORT_gcm("dynetat0", "", 1) 277 277 ENDIF 278 278 … … 280 280 IF (ierr .NE. NF_NOERR) THEN 281 281 write(lunout,*)"dynetat0: Le champ <teta> est absent" 282 CALL abort282 CALL ABORT_gcm("dynetat0", "", 1) 283 283 ENDIF 284 284 ierr = nf90_get_var(nid, nvarid, teta) 285 285 IF (ierr .NE. NF_NOERR) THEN 286 286 write(lunout,*)"dynetat0: Lecture echouee pour <teta>" 287 CALL abort287 CALL ABORT_gcm("dynetat0", "", 1) 288 288 ENDIF 289 289 … … 301 301 IF (ierr .NE. NF_NOERR) THEN 302 302 write(lunout,*)"dynetat0: Lecture echouee pour "//tname(iq) 303 CALL abort303 CALL ABORT_gcm("dynetat0", "", 1) 304 304 ENDIF 305 305 ENDIF … … 310 310 IF (ierr .NE. NF_NOERR) THEN 311 311 write(lunout,*)"dynetat0: Le champ <masse> est absent" 312 CALL abort312 CALL ABORT_gcm("dynetat0", "", 1) 313 313 ENDIF 314 314 ierr = nf90_get_var(nid, nvarid, masse) 315 315 IF (ierr .NE. NF_NOERR) THEN 316 316 write(lunout,*)"dynetat0: Lecture echouee pour <masse>" 317 CALL abort317 CALL ABORT_gcm("dynetat0", "", 1) 318 318 ENDIF 319 319 … … 321 321 IF (ierr .NE. NF_NOERR) THEN 322 322 write(lunout,*)"dynetat0: Le champ <ps> est absent" 323 CALL abort323 CALL ABORT_gcm("dynetat0", "", 1) 324 324 ENDIF 325 325 ierr = nf90_get_var(nid, nvarid, ps) 326 326 IF (ierr .NE. NF_NOERR) THEN 327 327 write(lunout,*)"dynetat0: Lecture echouee pour <ps>" 328 CALL abort328 CALL ABORT_gcm("dynetat0", "", 1) 329 329 ENDIF 330 330 -
LMDZ5/branches/testing/libf/dyn3dpar/dynredem.F
r1910 r1999 133 133 & //trim(fichnom) 134 134 write(lunout,*)' ierr = ', ierr 135 CALL ABORT 135 CALL ABORT_GCM("DYNREDEM0", "", 1) 136 136 ENDIF 137 137 c … … 512 512 IF (ierr .NE. NF_NOERR) THEN 513 513 write(lunout,*)"dynredem1: Pb. d ouverture "//trim(fichnom) 514 CALL abort514 call abort_gcm("dynredem1", "", 1) 515 515 ENDIF 516 516 -
LMDZ5/branches/testing/libf/dyn3dpar/fxhyp.F
r1910 r1999 69 69 c 70 70 if (iim==1) then 71 72 print*,'Longitudes calculees a la main pour iim=1'73 71 74 72 rlonm025(1)=-pi/2. … … 180 178 WRITE(6,*)'Modifier les valeurs de grossismx ,tau ou dzoomx ', 181 179 , ' et relancer ! *** ' 182 CALL ABORT 180 CALL ABORT_GCM("FXHYP", "", 1) 183 181 ENDIF 184 182 c … … 307 305 308 306 1500 CONTINUE 309 310 307 311 308 -
LMDZ5/branches/testing/libf/dyn3dpar/gcm.F
r1910 r1999 332 332 start_time = starttime 333 333 ELSE 334 WRITE(lunout,*)'Je m''arrete' 335 CALL abort 334 call abort_gcm("gcm", "'Je m''arrete'", 1) 336 335 ENDIF 337 336 ENDIF -
LMDZ5/branches/testing/libf/dyn3dpar/leapfrog_p.F
r1910 r1999 17 17 USE vampir 18 18 USE timer_filtre, ONLY : print_filtre_timer 19 USE infotrac 19 USE infotrac, ONLY: nqtot 20 20 USE guide_p_mod, ONLY : guide_main 21 21 USE getparam 22 USE control_mod 23 22 USE control_mod, ONLY: nday, day_step, planet_type, offline, 23 & iconser, iphysiq, iperiod, dissip_period, 24 & iecri, ip_ebil_dyn, ok_dynzon, ok_dyn_ins, 25 & periodav, ok_dyn_ave, output_grads_dyn, 26 & iapp_tracvl 24 27 IMPLICIT NONE 25 28 … … 70 73 #include "academic.h" 71 74 72 INTEGER longcles 73 PARAMETER ( longcles = 20 ) 74 REAL clesphy0( longcles ) 75 INTEGER,PARAMETER :: longcles = 20 76 REAL,INTENT(IN) :: clesphy0( longcles ) ! not used 77 REAL,INTENT(IN) :: time_0 ! not used 78 79 c dynamical variables: 80 REAL,INTENT(INOUT) :: ucov(ip1jmp1,llm) ! zonal covariant wind 81 REAL,INTENT(INOUT) :: vcov(ip1jm,llm) ! meridional covariant wind 82 REAL,INTENT(INOUT) :: teta(ip1jmp1,llm) ! potential temperature 83 REAL,INTENT(INOUT) :: ps(ip1jmp1) ! surface pressure (Pa) 84 REAL,INTENT(INOUT) :: masse(ip1jmp1,llm) ! air mass 85 REAL,INTENT(INOUT) :: phis(ip1jmp1) ! geopotentiat at the surface 86 REAL,INTENT(INOUT) :: q(ip1jmp1,llm,nqtot) ! advected tracers 87 88 REAL,SAVE :: p (ip1jmp1,llmp1 ) ! interlayer pressure 89 REAL,SAVE :: pks(ip1jmp1) ! exner at the surface 90 REAL,SAVE :: pk(ip1jmp1,llm) ! exner at mid-layer 91 REAL,SAVE :: pkf(ip1jmp1,llm) ! filtered exner at mid-layer 92 REAL,SAVE :: phi(ip1jmp1,llm) ! geopotential 93 REAL,SAVE :: w(ip1jmp1,llm) ! vertical velocity 75 94 76 95 real zqmin,zqmax 77 78 c variables dynamiques79 REAL :: vcov(ip1jm,llm),ucov(ip1jmp1,llm) ! vents covariants80 REAL :: teta(ip1jmp1,llm) ! temperature potentielle81 REAL :: q(ip1jmp1,llm,nqtot) ! champs advectes82 REAL :: ps(ip1jmp1) ! pression au sol83 REAL,SAVE :: p (ip1jmp1,llmp1 ) ! pression aux interfac.des couches84 REAL,SAVE :: pks(ip1jmp1) ! exner au sol85 REAL,SAVE :: pk(ip1jmp1,llm) ! exner au milieu des couches86 REAL,SAVE :: pkf(ip1jmp1,llm) ! exner filt.au milieu des couches87 REAL :: masse(ip1jmp1,llm) ! masse d'air88 REAL :: phis(ip1jmp1) ! geopotentiel au sol89 REAL,SAVE :: phi(ip1jmp1,llm) ! geopotentiel90 REAL,SAVE :: w(ip1jmp1,llm) ! vitesse verticale91 96 92 97 c variables dynamiques intermediaire pour le transport … … 123 128 124 129 REAL SSUM 125 REAL time_0126 130 ! REAL,SAVE :: finvmaold(ip1jmp1,llm) 127 131 … … 603 607 604 608 IF( forward. OR . leapf ) THEN 605 cc$OMP PARALLEL DEFAULT(SHARED) 606 c 609 ! Ehouarn: NB: fields sent to advtrac are those at the beginning of the time step 607 610 CALL caladvtrac_p(q,pbaru,pbarv, 608 611 * p, masse, dq, teta, … … 616 619 617 620 ENDIF ! of IF( forward. OR . leapf ) 618 cc$OMP END PARALLEL619 621 620 622 c----------------------------------------------------------------------- … … 763 765 call Register_SwapFieldHallo(masse,masse,ip1jmp1,llm, 764 766 * jj_Nb_physic,1,2,Request_physic) 767 768 call Register_SwapFieldHallo(ps,ps,ip1jmp1,1, 769 * jj_Nb_physic,2,2,Request_physic) 765 770 766 771 call Register_SwapFieldHallo(p,p,ip1jmp1,llmp1, … … 907 912 $ ucov, vcov, teta , q ,ps , 908 913 $ dufi, dvfi, dtetafi , dqfi ,dpfi ) 909 914 ! since addfi updates ps(), also update p(), masse() and pk() 915 CALL pression_p(ip1jmp1,ap,bp,ps,p) 916 c$OMP BARRIER 917 CALL massdair_p(p,masse) 918 c$OMP BARRIER 919 if (pressure_exner) then 920 CALL exner_hyb_p(ip1jmp1,ps,p,alpha,beta,pks,pk,pkf) 921 else 922 CALL exner_milieu_p(ip1jmp1,ps,p,beta,pks,pk,pkf) 923 endif 924 c$OMP BARRIER 925 910 926 IF (ok_strato) THEN 911 927 CALL top_bound_p(vcov,ucov,teta,masse,dtphys) … … 930 946 931 947 call Register_SwapField(masse,masse,ip1jmp1,llm, 948 * jj_Nb_caldyn,Request_physic) 949 950 call Register_SwapField(ps,ps,ip1jmp1,1, 932 951 * jj_Nb_caldyn,Request_physic) 933 952 … … 1044 1063 CALL exner_milieu_p( ip1jmp1, ps, p, beta, pks, pk, pkf ) 1045 1064 endif 1065 c$OMP BARRIER 1066 CALL massdair_p(p,masse) 1046 1067 c$OMP BARRIER 1047 1068 -
LMDZ5/branches/testing/libf/dyn3dpar/logic.h
r1910 r1999 11 11 & statcl,conser,apdiss,apdelq,saison,ecripar,fxyhypb,ysinus & 12 12 & ,read_start,ok_guide,ok_strato,ok_gradsfile & 13 & ,ok_limit,ok_etat0, grilles_gcm_netcdf,hybrid13 & ,ok_limit,ok_etat0,hybrid 14 14 15 15 COMMON/logici/ iflag_phys,iflag_trac … … 18 18 & apdiss,apdelq,saison,ecripar,fxyhypb,ysinus & 19 19 & ,read_start,ok_guide,ok_strato,ok_gradsfile & 20 & ,ok_limit,ok_etat0,grilles_gcm_netcdf 20 & ,ok_limit,ok_etat0 21 21 22 logical hybrid ! vertical coordinate is hybrid if true (sigma otherwise) 22 23 ! (only used if disvert_type==2) -
LMDZ5/branches/testing/libf/dyn3dpar/mod_const_mpi.F90
r1910 r1999 17 17 USE ioipsl_getincom, only: getin 18 18 #endif 19 19 ! Use of Oasis-MCT coupler 20 #ifdef CPP_OMCT 21 USE mod_prism 22 #endif 20 23 IMPLICIT NONE 21 24 #ifdef CPP_MPI -
LMDZ5/branches/testing/libf/dyn3dpar/parallel_lmdz.F90
r1910 r1999 225 225 #endif 226 226 #ifdef CPP_COUPLE 227 ! Use of Oasis-MCT coupler 228 #if defined CPP_OMCT 229 use mod_prism 230 #else 227 231 use mod_prism_proto 232 #endif 228 233 ! Ehouarn: surface_data module is in 'phylmd' ... 229 234 use surface_data, only : type_ocean
Note: See TracChangeset
for help on using the changeset viewer.