Changeset 1114
- Timestamp:
- Mar 3, 2009, 5:40:26 PM (16 years ago)
- Location:
- LMDZ4/branches/LMDZ4-dev
- Files:
-
- 2 added
- 4 deleted
- 61 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ4/branches/LMDZ4-dev/libf/bibio/initdynav.F
r761 r1114 5 5 c 6 6 subroutine initdynav(infile,day0,anne0,tstep,t_ops,t_wrt 7 . , nq,fileid)7 . ,fileid) 8 8 9 9 USE IOIPSL 10 USE infotrac, ONLY : nqtot, ttext 10 11 11 12 implicit none … … 28 29 C t_ops: frequence de l'operation pour IOIPSL 29 30 C t_wrt: frequence d'ecriture sur le fichier 30 C nq: nombre de traceurs31 31 C 32 32 C Sortie: … … 48 48 #include "description.h" 49 49 #include "serre.h" 50 #include "advtrac.h"51 50 52 51 C Arguments … … 56 55 real tstep, t_ops, t_wrt 57 56 integer fileid 58 integer nq59 57 integer thoriid, zvertiid 60 58 … … 136 134 C Traceurs 137 135 C 138 DO iq=1,nq 136 DO iq=1,nqtot 139 137 call histdef(fileid, ttext(iq), ttext(iq), '-', 140 138 . iip1, jjp1, thoriid, llm, 1, llm, zvertiid, -
LMDZ4/branches/LMDZ4-dev/libf/bibio/initfluxsto.F
r761 r1114 3 3 ! 4 4 subroutine initfluxsto 5 . (infile,tstep,t_ops,t_wrt, nq,5 . (infile,tstep,t_ops,t_wrt, 6 6 . fileid,filevid,filedid) 7 7 … … 27 27 C t_ops: frequence de l'operation pour IOIPSL 28 28 C t_wrt: frequence d'ecriture sur le fichier 29 C nq: nombre de traceurs30 29 C 31 30 C Sortie: … … 55 54 real tstep, t_ops, t_wrt 56 55 integer fileid, filevid,filedid 57 integer n q,ndex(1)56 integer ndex(1) 58 57 real nivd(1) 59 58 -
LMDZ4/branches/LMDZ4-dev/libf/bibio/inithist.F
r761 r1114 2 2 ! $Header$ 3 3 ! 4 subroutine inithist(infile,day0,anne0,tstep,t_ops,t_wrt, nq,fileid,4 subroutine inithist(infile,day0,anne0,tstep,t_ops,t_wrt,fileid, 5 5 . filevid) 6 6 7 7 USE IOIPSL 8 USE infotrac, ONLY : nqtot, ttext 8 9 9 10 implicit none … … 47 48 #include "description.h" 48 49 #include "serre.h" 49 #include "advtrac.h"50 50 51 51 C Arguments … … 55 55 real tstep, t_ops, t_wrt 56 56 integer fileid, filevid 57 integer nq58 57 59 58 C Variables locales … … 154 153 C Traceurs 155 154 C 156 DO iq=1,nq 155 DO iq=1,nqtot 157 156 call histdef(fileid, ttext(iq), ttext(iq), '-', 158 157 . iip1, jjp1, thoriid, llm, 1, llm, zvertiid, -
LMDZ4/branches/LMDZ4-dev/libf/bibio/writedynav.F
r524 r1114 2 2 ! $Header$ 3 3 ! 4 subroutine writedynav( histid, nq,time, vcov,4 subroutine writedynav( histid, time, vcov, 5 5 , ucov,teta,ppk,phi,q,masse,ps,phis) 6 6 7 7 USE ioipsl 8 USE infotrac, ONLY : nqtot, ttext 8 9 implicit none 9 10 … … 15 16 C Entree: 16 17 C histid: ID du fichier histoire 17 C nqmx: nombre maxi de traceurs18 18 C time: temps de l'ecriture 19 19 C vcov: vents v covariants … … 45 45 #include "description.h" 46 46 #include "serre.h" 47 #include "advtrac.h"48 47 49 48 C … … 51 50 C 52 51 53 INTEGER histid , nq52 INTEGER histid 54 53 REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm) 55 54 REAL teta(ip1jmp1*llm),phi(ip1jmp1,llm),ppk(ip1jmp1*llm) 56 55 REAL ps(ip1jmp1),masse(ip1jmp1,llm) 57 56 REAL phis(ip1jmp1) 58 REAL q(ip1jmp1,llm,nq )57 REAL q(ip1jmp1,llm,nqtot) 59 58 integer time 60 59 … … 119 118 C Traceurs 120 119 C 121 DO iq=1,nq 120 DO iq=1,nqtot 122 121 call histwrite(histid, ttext(iq), itau_w, q(:,:,iq), 123 122 . iip1*jjp1*llm, ndex3d) -
LMDZ4/branches/LMDZ4-dev/libf/bibio/writehist.F
r524 r1114 2 2 ! $Header$ 3 3 ! 4 subroutine writehist( histid, histvid, nq,time, vcov,4 subroutine writehist( histid, histvid, time, vcov, 5 5 , ucov,teta,phi,q,masse,ps,phis) 6 6 7 7 USE ioipsl 8 USE infotrac, ONLY : nqtot, ttext 8 9 implicit none 9 10 … … 16 17 C histid: ID du fichier histoire 17 18 C histvid:ID du fichier histoire pour les vents V (appele a disparaitre) 18 C nqmx: nombre maxi de traceurs19 19 C time: temps de l'ecriture 20 20 C vcov: vents v covariants … … 46 46 #include "description.h" 47 47 #include "serre.h" 48 #include "advtrac.h"49 48 50 49 C … … 52 51 C 53 52 54 INTEGER histid, nq,histvid53 INTEGER histid, histvid 55 54 REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm) 56 55 REAL teta(ip1jmp1,llm),phi(ip1jmp1,llm) 57 56 REAL ps(ip1jmp1),masse(ip1jmp1,llm) 58 57 REAL phis(ip1jmp1) 59 REAL q(ip1jmp1,llm,nq )58 REAL q(ip1jmp1,llm,nqtot) 60 59 integer time 61 60 … … 102 101 C Traceurs 103 102 C 104 DO iq=1,nq 103 DO iq=1,nqtot 105 104 call histwrite(histid, ttext(iq), itau_w, q(:,:,iq), 106 105 . iip1*jjp1*llm, ndexu) -
LMDZ4/branches/LMDZ4-dev/libf/dyn3d/addfi.F
r524 r1114 2 2 ! $Header$ 3 3 ! 4 SUBROUTINE addfi( nq,pdt, leapf, forward,4 SUBROUTINE addfi(pdt, leapf, forward, 5 5 S pucov, pvcov, pteta, pq , pps , 6 6 S pdufi, pdvfi, pdhfi,pdqfi, pdpfi ) 7 8 USE infotrac, ONLY : nqtot 7 9 IMPLICIT NONE 8 10 c … … 52 54 c ----------- 53 55 c 54 INTEGER nq55 56 56 REAL pdt 57 57 c 58 58 REAL pvcov(ip1jm,llm),pucov(ip1jmp1,llm) 59 REAL pteta(ip1jmp1,llm),pq(ip1jmp1,llm,nq ),pps(ip1jmp1)59 REAL pteta(ip1jmp1,llm),pq(ip1jmp1,llm,nqtot),pps(ip1jmp1) 60 60 c 61 61 REAL pdvfi(ip1jm,llm),pdufi(ip1jmp1,llm) 62 REAL pdqfi(ip1jmp1,llm,nq ),pdhfi(ip1jmp1,llm),pdpfi(ip1jmp1)62 REAL pdqfi(ip1jmp1,llm,nqtot),pdhfi(ip1jmp1,llm),pdpfi(ip1jmp1) 63 63 c 64 64 LOGICAL leapf,forward … … 125 125 ENDDO 126 126 127 DO iq = 3, nq 127 DO iq = 3, nqtot 128 128 DO k = 1,llm 129 129 DO j = 1,ip1jmp1 … … 148 148 149 149 150 DO iq = 1, nq 150 DO iq = 1, nqtot 151 151 DO k = 1, llm 152 152 DO ij = 1, iim -
LMDZ4/branches/LMDZ4-dev/libf/dyn3d/advtrac.F
r960 r1114 15 15 c M.A Filiberti (04/2002) 16 16 c 17 USE infotrac 18 17 19 IMPLICIT NONE 18 20 c … … 28 30 #include "ener.h" 29 31 #include "description.h" 30 #include "advtrac.h"31 32 32 33 c------------------------------------------------------------------- … … 39 40 INTEGER iapptrac 40 41 REAL pbaru(ip1jmp1,llm),pbarv(ip1jm,llm) 41 REAL q(ip1jmp1,llm,nq mx),masse(ip1jmp1,llm)42 REAL q(ip1jmp1,llm,nqtot),masse(ip1jmp1,llm) 42 43 REAL p( ip1jmp1,llmp1 ),teta(ip1jmp1,llm) 43 44 REAL pk(ip1jmp1,llm) … … 52 53 REAL pbarug(ip1jmp1,llm),pbarvg(ip1jm,llm),wg(ip1jmp1,llm) 53 54 REAL (kind=kind(1.d0)) :: t_initial, t_final, tps_cpu 54 real cpuadv(nqmx)55 common/cpuadv/cpuadv56 57 55 INTEGER iadvtr 58 56 INTEGER ij,l,iq,iiq … … 69 67 REAL psppm(iim,jjp1) ! pression au sol 70 68 REAL unatppm(iim,jjp1,llm),vnatppm(iim,jjp1,llm) 71 REAL qppm(iim*jjp1,llm,nq mx)69 REAL qppm(iim*jjp1,llm,nqtot) 72 70 REAL fluxwppm(iim,jjp1,llm) 73 71 REAL apppm(llmp1), bpppm(llmp1) … … 153 151 c Appel des sous programmes d'advection 154 152 c----------------------------------------------------------- 155 do iq=1,nq mx153 do iq=1,nqtot 156 154 c call clock(t_initial) 157 155 if(iadv(iq) == 0) cycle -
LMDZ4/branches/LMDZ4-dev/libf/dyn3d/caladvtrac.F
r960 r1114 8 8 * flxw, pk) 9 9 c 10 USE infotrac 10 11 IMPLICIT NONE 11 12 c … … 24 25 #include "comconst.h" 25 26 #include "control.h" 26 #include "advtrac.h"27 27 28 28 c Arguments: 29 29 c ---------- 30 30 REAL pbaru( ip1jmp1,llm ),pbarv( ip1jm,llm),masse(ip1jmp1,llm) 31 REAL p( ip1jmp1,llmp1),q( ip1jmp1,llm,nq mx),dq( ip1jmp1,llm,2 )31 REAL p( ip1jmp1,llmp1),q( ip1jmp1,llm,nqtot),dq( ip1jmp1,llm,2 ) 32 32 REAL teta( ip1jmp1,llm),pk( ip1jmp1,llm) 33 33 REAL :: flxw(ip1jmp1,llm) -
LMDZ4/branches/LMDZ4-dev/libf/dyn3d/calfis.F
r960 r1114 4 4 C 5 5 C 6 SUBROUTINE calfis(nq, 7 $ lafin, 6 SUBROUTINE calfis(lafin, 8 7 $ rdayvrai, 9 8 $ heure, … … 32 31 c Auteur : P. Le Van, F. Hourdin 33 32 c ......... 33 USE infotrac 34 34 35 35 IMPLICIT NONE … … 90 90 #include "paramet.h" 91 91 #include "temps.h" 92 #include "advtrac.h" 93 94 INTEGER ngridmx,nq 92 93 INTEGER ngridmx 95 94 PARAMETER( ngridmx = 2+(jjm-1)*iim - 1/jjm ) 96 95 … … 109 108 REAL pteta(iip1,jjp1,llm) 110 109 REAL pmasse(iip1,jjp1,llm) 111 REAL pq(iip1,jjp1,llm,nq mx)110 REAL pq(iip1,jjp1,llm,nqtot) 112 111 REAL pphis(iip1,jjp1) 113 112 REAL pphi(iip1,jjp1,llm) … … 116 115 REAL pducov(iip1,jjp1,llm) 117 116 REAL pdteta(iip1,jjp1,llm) 118 REAL pdq(iip1,jjp1,llm,nq mx)117 REAL pdq(iip1,jjp1,llm,nqtot) 119 118 c 120 119 REAL pps(iip1,jjp1) … … 125 124 REAL pdufi(iip1,jjp1,llm) 126 125 REAL pdhfi(iip1,jjp1,llm) 127 REAL pdqfi(iip1,jjp1,llm,nq mx)126 REAL pdqfi(iip1,jjp1,llm,nqtot) 128 127 REAL pdpsfi(iip1,jjp1) 129 128 … … 142 141 c 143 142 REAL zufi(ngridmx,llm), zvfi(ngridmx,llm) 144 REAL ztfi(ngridmx,llm),zqfi(ngridmx,llm,nq mx)143 REAL ztfi(ngridmx,llm),zqfi(ngridmx,llm,nqtot) 145 144 c 146 145 REAL pcvgu(ngridmx,llm), pcvgv(ngridmx,llm) … … 148 147 c 149 148 REAL zdufi(ngridmx,llm),zdvfi(ngridmx,llm) 150 REAL zdtfi(ngridmx,llm),zdqfi(ngridmx,llm,nq mx)149 REAL zdtfi(ngridmx,llm),zdqfi(ngridmx,llm,nqtot) 151 150 REAL zdpsrf(ngridmx) 152 151 c … … 275 274 c --------------- 276 275 c 277 DO iq=1,nq 276 DO iq=1,nqtot 278 277 iiq=niadv(iq) 279 278 DO l=1,llm … … 444 443 CALL physiq (ngridmx, 445 444 . llm, 446 . nq,447 445 . debut, 448 446 . lafin, … … 505 503 c --------------------- 506 504 507 DO iq=1,nq mx505 DO iq=1,nqtot 508 506 DO l=1,llm 509 507 DO i=1,iip1 … … 526 524 pdqfi=0. 527 525 C 528 DO iq=1,nq 526 DO iq=1,nqtot 529 527 iiq=niadv(iq) 530 528 DO l=1,llm -
LMDZ4/branches/LMDZ4-dev/libf/dyn3d/create_etat0_limit.F
r1016 r1114 5 5 USE dimphy 6 6 USE comgeomphy 7 7 USE infotrac 8 8 c 9 9 c … … 28 28 #include "paramet.h" 29 29 #include "indicesol.h" 30 #include "advtrac.h"31 30 #include "control.h" 32 31 REAL :: masque(iip1,jjp1) 33 32 ! REAL :: pctsrf(iim*(jjm-1)+2, nbsrf) 34 33 35 c initialisation traceurs36 hadv_flg(:) = 0.37 vadv_flg(:) = 0.38 conv_flg(:) = 0.39 pbl_flg(:) = 0.40 tracnam(:) = ' '41 nprath = 142 nbtrac = 043 mmt_adj(:,:,:,:) = 144 45 34 IF (config_inca /= 'none') THEN 46 35 #ifdef INCA 47 36 call init_const_lmdz( 48 $ nbtr ac,anneeref,dayref,37 $ nbtr,anneeref,dayref, 49 38 $ iphysiq, day_step,nday) 50 39 #endif 51 print *, 'nbtr ac =' , nbtrac40 print *, 'nbtr =' , nbtr 52 41 END IF 53 42 54 CALL Init_Phys_lmdz(iim,jjp1,llm, nqmx-2,1,(jjm-1)*iim+2)43 CALL Init_Phys_lmdz(iim,jjp1,llm,1,(jjm-1)*iim+2) 55 44 call InitComgeomphy 56 45 -
LMDZ4/branches/LMDZ4-dev/libf/dyn3d/dynetat0.F
r541 r1114 2 2 ! $Header$ 3 3 ! 4 SUBROUTINE dynetat0(fichnom, nq,vcov,ucov,4 SUBROUTINE dynetat0(fichnom,vcov,ucov, 5 5 . teta,q,masse,ps,phis,time) 6 7 USE infotrac 6 8 IMPLICIT NONE 7 9 … … 32 34 #include "serre.h" 33 35 #include "logic.h" 34 #include "advtrac.h"35 36 36 37 c Arguments: … … 38 39 39 40 CHARACTER*(*) fichnom 40 INTEGER nq41 41 REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm),teta(ip1jmp1,llm) 42 REAL q(ip1jmp1,llm,nq ),masse(ip1jmp1,llm)42 REAL q(ip1jmp1,llm,nqtot),masse(ip1jmp1,llm) 43 43 REAL ps(ip1jmp1),phis(ip1jmp1) 44 44 … … 315 315 316 316 317 IF(nq .GE.1) THEN318 DO iq=1,nq 317 IF(nqtot.GE.1) THEN 318 DO iq=1,nqtot 319 319 ierr = NF_INQ_VARID (nid, tname(iq), nvarid) 320 320 IF (ierr .NE. NF_NOERR) THEN -
LMDZ4/branches/LMDZ4-dev/libf/dyn3d/dynredem.F
r960 r1114 3 3 ! 4 4 c 5 SUBROUTINE dynredem0(fichnom,iday_end,phis ,nq)5 SUBROUTINE dynredem0(fichnom,iday_end,phis) 6 6 USE IOIPSL 7 USE infotrac 7 8 IMPLICIT NONE 8 9 c======================================================================= … … 22 23 #include "description.h" 23 24 #include "serre.h" 24 #include "advtrac.h"25 25 26 26 c Arguments: … … 29 29 REAL phis(ip1jmp1) 30 30 CHARACTER*(*) fichnom 31 INTEGER nq32 31 33 32 c Local: … … 458 457 dims4(3) = idim_s 459 458 dims4(4) = idim_tim 460 IF(nq .GE.1) THEN461 DO iq=1,nq 459 IF(nqtot.GE.1) THEN 460 DO iq=1,nqtot 462 461 cIM 220306 BEG 463 462 #ifdef NC_DOUBLE … … 508 507 END 509 508 SUBROUTINE dynredem1(fichnom,time, 510 . vcov,ucov,teta,q,nq,masse,ps) 509 . vcov,ucov,teta,q,masse,ps) 510 USE infotrac 511 511 IMPLICIT NONE 512 512 c================================================================= … … 519 519 #include "comvert.h" 520 520 #include "comgeom.h" 521 #include "advtrac.h"522 521 #include "temps.h" 523 522 #include "control.h" 524 523 525 INTEGER nq,l524 INTEGER l 526 525 REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm) 527 526 REAL teta(ip1jmp1,llm) 528 527 REAL ps(ip1jmp1),masse(ip1jmp1,llm) 529 REAL q(ip1jmp1,llm,nq )528 REAL q(ip1jmp1,llm,nqtot) 530 529 CHARACTER*(*) fichnom 531 530 … … 633 632 END IF 634 633 635 IF(nq .GE.1) THEN636 do iq=1,nq 634 IF(nqtot.GE.1) THEN 635 do iq=1,nqtot 637 636 638 637 IF (config_inca == 'none') THEN -
LMDZ4/branches/LMDZ4-dev/libf/dyn3d/etat0_netcdf.F
r1108 r1114 9 9 USE ioipsl 10 10 USE dimphy 11 USE infotrac 11 12 USE fonte_neige_mod 12 13 USE pbl_surface_mod … … 33 34 LOGICAL interbar 34 35 REAL :: latfi(klon), lonfi(klon) 35 REAL :: orog(iip1,jjp1), rugo(iip1,jjp1), masque(iip1,jjp1) ,36 .psol(iip1, jjp1), phis(iip1, jjp1)36 REAL :: orog(iip1,jjp1), rugo(iip1,jjp1), masque(iip1,jjp1) 37 REAL :: psol(iip1, jjp1), phis(iip1, jjp1) 37 38 REAL :: p3d(iip1, jjp1, llm+1) 38 39 REAL :: uvent(iip1, jjp1, llm) 39 40 REAL :: vvent(iip1, jjm, llm) 40 41 REAL :: t3d(iip1, jjp1, llm), tpot(iip1, jjp1, llm) 41 REAL :: q3d(iip1, jjp1, llm,nqmx), qsat(iip1, jjp1, llm) 42 REAL, ALLOCATABLE, DIMENSION(:,:,:,:) :: q3d 43 REAL :: qsat(iip1, jjp1, llm) 42 44 REAL :: tsol(klon), qsol(klon), sn(klon) 43 45 REAL :: tsolsrf(klon,nbsrf), qsolsrf(klon,nbsrf),snsrf(klon,nbsrf) … … 64 66 ! 65 67 INTEGER :: i,j, ig, l, ji,ii1,ii2 66 INTEGER :: nq67 68 REAL :: xpi 68 69 ! … … 165 166 print*,'dtvr',dtvr 166 167 168 169 167 170 CALL inicons0() 168 171 CALL inigeom() 169 ! 172 173 ! Initialisation pour traceurs 174 CALL infotrac_init 175 ALLOCATE(q3d(iip1,jjp1,llm,nqtot)) 176 177 170 178 CALL inifilr() 171 179 CALL phys_state_var_init() … … 624 632 phis(iip1,:) = phis(1,:) 625 633 626 C init pour traceurs627 call iniadvtrac(nq)628 634 C Ecriture 629 635 CALL inidissip( lstardis, nitergdiv, nitergrot, niterh , … … 649 655 * phi,w, pbaru,pbarv,time+iday-dayref ) 650 656 print*,'sortie caldyn0' 651 CALL dynredem0("start.nc",dayref,phis ,nqmx)657 CALL dynredem0("start.nc",dayref,phis) 652 658 print*,'sortie dynredem0' 653 CALL dynredem1("start.nc",0.0,vvent,uvent,tpot,q3d, nqmx,masse ,659 CALL dynredem1("start.nc",0.0,vvent,uvent,tpot,q3d,masse , 654 660 . psol) 655 661 print*,'sortie dynredem1' … … 742 748 visu_file='Etat0_visu.nc' 743 749 CALL initdynav(visu_file,dayref,anneeref,time_step, 744 . t_ops, t_wrt, nqmx,visuid)745 CALL writedynav(visuid, nqmx,itau,vvent ,750 . t_ops, t_wrt, visuid) 751 CALL writedynav(visuid, itau,vvent , 746 752 . uvent,tpot,pk,phi,q3d,masse,psol,phis) 747 753 else … … 750 756 print*,'entree histclo' 751 757 CALL histclo 758 759 DEALLOCATE(q3d) 760 752 761 RETURN 753 762 ! -
LMDZ4/branches/LMDZ4-dev/libf/dyn3d/fluxstokenc.F
r697 r1114 56 56 CALL initfluxsto( 'fluxstoke', 57 57 . time_step,istdyn* time_step,istdyn* time_step, 58 . nqmx,fluxid,fluxvid,fluxdid)58 . fluxid,fluxvid,fluxdid) 59 59 60 60 ndex(1) = 0 -
LMDZ4/branches/LMDZ4-dev/libf/dyn3d/gcm.F
r1108 r1114 11 11 12 12 USE filtreg_mod 13 USE infotrac 13 14 14 15 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! … … 70 71 #include "iniprint.h" 71 72 #include "tracstoke.h" 72 #include "advtrac.h"73 73 74 74 INTEGER longcles … … 85 85 REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm) ! vents covariants 86 86 REAL teta(ip1jmp1,llm) ! temperature potentielle 87 REAL q(ip1jmp1,llm,nqmx)! champs advectes87 REAL, ALLOCATABLE, DIMENSION(:,:,:):: q! champs advectes 88 88 REAL ps(ip1jmp1) ! pression au sol 89 89 REAL p (ip1jmp1,llmp1 ) ! pression aux interfac.des couches … … 139 139 c variables pour l'initialisation de la physique : 140 140 c ------------------------------------------------ 141 INTEGER ngridmx ,nq141 INTEGER ngridmx 142 142 PARAMETER( ngridmx = 2+(jjm-1)*iim - 1/jjm ) 143 143 REAL zcufi(ngridmx),zcvfi(ngridmx) … … 156 156 dynhist_file = 'dyn_hist.nc' 157 157 dynhistave_file = 'dyn_hist_ave.nc' 158 159 c initialisation Anne160 hadv_flg(:) = 0.161 vadv_flg(:) = 0.162 conv_flg(:) = 0.163 pbl_flg(:) = 0.164 tracnam(:) = ' '165 nprath = 1166 nbtrac = 0167 mmt_adj(:,:,:,:) = 1168 158 169 159 … … 217 207 ! dynamique -> physique pour l'initialisation 218 208 #ifdef CPP_PHYS 219 CALL Init_Phys_lmdz(iim,jjp1,llm, nqmx-2,1,(jjm-1)*iim+2)209 CALL Init_Phys_lmdz(iim,jjp1,llm,1,(jjm-1)*iim+2) 220 210 call InitComgeomphy 221 211 #endif … … 224 214 IF (config_inca /= 'none') THEN 225 215 #ifdef INCA 226 call init_const_lmdz(nbtr ac,anneeref,dayref,iphysiq,day_step,nday)216 call init_const_lmdz(nbtr,anneeref,dayref,iphysiq,day_step,nday) 227 217 call init_inca_para(iim,jjm+1,klon,1,klon_mpi_para_nb,0) 228 218 #endif … … 239 229 c Initialisation des traceurs 240 230 c --------------------------- 241 c Choix du schema pour l'advection 242 c dans fichier trac.def ou via INCA 243 244 call iniadvtrac(nq) 245 c 231 c Choix du nombre de traceurs et du schema pour l'advection 232 c dans fichier traceur.def, par default ou via INCA 233 call infotrac_init 234 235 c Allocation de la tableau q : champs advectes 236 allocate(q(ip1jmp1,llm,nqtot)) 237 246 238 c----------------------------------------------------------------------- 247 239 c Lecture de l'etat initial : … … 251 243 if (read_start) then 252 244 #ifdef CPP_IOIPSL 253 CALL dynetat0("start.nc", nqmx,vcov,ucov,245 CALL dynetat0("start.nc",vcov,ucov, 254 246 . teta,q,masse,ps,phis, time_0) 255 247 c write(73,*) 'ucov',ucov … … 274 266 . 'AVANT iniacademic AVANT AVANT AVANT AVANT' 275 267 if (.not.read_start) then 276 CALL iniacademic( nqmx,vcov,ucov,teta,q,masse,ps,phis,time_0)268 CALL iniacademic(vcov,ucov,teta,q,masse,ps,phis,time_0) 277 269 endif 278 270 … … 396 388 397 389 #ifdef CPP_IOIPSL 398 CALL dynredem0("restart.nc", day_end, phis , nqmx)390 CALL dynredem0("restart.nc", day_end, phis) 399 391 400 392 ecripar = .TRUE. … … 405 397 t_wrt = iecri * daysec 406 398 CALL inithist(dynhist_file,day_ref,annee_ref,time_step, 407 . t_ops, t_wrt, nqmx,histid, histvid)399 . t_ops, t_wrt, histid, histvid) 408 400 409 401 t_ops = iperiod * time_step 410 402 t_wrt = periodav * daysec 411 403 CALL initdynav(dynhistave_file,day_ref,annee_ref,time_step, 412 . t_ops, t_wrt, nqmx,histaveid)404 . t_ops, t_wrt, histaveid) 413 405 414 406 dtav = iperiod*dtvr/daysec … … 437 429 438 430 439 CALL leapfrog(ucov,vcov,teta,ps,masse,phis, nq,q,clesphy0,431 CALL leapfrog(ucov,vcov,teta,ps,masse,phis,q,clesphy0, 440 432 . time_0) 441 433 -
LMDZ4/branches/LMDZ4-dev/libf/dyn3d/iniacademic.F
r1108 r1114 4 4 c 5 5 c 6 SUBROUTINE iniacademic( nq,vcov,ucov,teta,q,masse,ps,phis,time_0)6 SUBROUTINE iniacademic(vcov,ucov,teta,q,masse,ps,phis,time_0) 7 7 8 8 USE filtreg_mod 9 USE infotrac, ONLY : nqtot 9 10 10 11 c%W% %G% … … 48 49 c ---------- 49 50 50 integer nq51 51 real time_0 52 52 … … 54 54 REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm) ! vents covariants 55 55 REAL teta(ip1jmp1,llm) ! temperature potentielle 56 REAL q(ip1jmp1,llm,nq ) ! champs advectes56 REAL q(ip1jmp1,llm,nqtot) ! champs advectes 57 57 REAL ps(ip1jmp1) ! pression au sol 58 58 REAL masse(ip1jmp1,llm) ! masse d'air … … 160 160 q(:,:,1 )=1.e-10 161 161 q(:,:,2 )=1.e-15 162 q(:,:,3:nq )=0.162 q(:,:,3:nqtot)=0. 163 163 164 164 -
LMDZ4/branches/LMDZ4-dev/libf/dyn3d/integrd.F
r524 r1114 32 32 #include "temps.h" 33 33 #include "serre.h" 34 #include "advtrac.h"35 34 36 35 c Arguments: -
LMDZ4/branches/LMDZ4-dev/libf/dyn3d/leapfrog.F
r1060 r1114 2 2 c 3 3 c 4 SUBROUTINE leapfrog(ucov,vcov,teta,ps,masse,phis, nq,q,clesphy0,4 SUBROUTINE leapfrog(ucov,vcov,teta,ps,masse,phis,q,clesphy0, 5 5 & time_0) 6 6 … … 8 8 cIM : pour sortir les param. du modele dans un fis. netcdf 110106 9 9 USE IOIPSL 10 USE infotrac 10 11 11 12 IMPLICIT NONE … … 56 57 #include "com_io_dyn.h" 57 58 #include "iniprint.h" 58 #include "advtrac.h"59 c#include "tracstoke.h"60 61 59 #include "academic.h" 62 60 63 61 ! FH 2008/05/09 On elimine toutes les clefs physiques dans la dynamique 64 62 ! #include "clesphys.h" 65 66 integer nq67 63 68 64 INTEGER longcles … … 76 72 REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm) ! vents covariants 77 73 REAL teta(ip1jmp1,llm) ! temperature potentielle 78 REAL q(ip1jmp1,llm,nq mx) ! champs advectes74 REAL q(ip1jmp1,llm,nqtot) ! champs advectes 79 75 REAL ps(ip1jmp1) ! pression au sol 80 76 REAL p (ip1jmp1,llmp1 ) ! pression aux interfac.des couches … … 97 93 c tendances dynamiques 98 94 REAL dv(ip1jm,llm),du(ip1jmp1,llm) 99 REAL dteta(ip1jmp1,llm),dq(ip1jmp1,llm,nq mx),dp(ip1jmp1)95 REAL dteta(ip1jmp1,llm),dq(ip1jmp1,llm,nqtot),dp(ip1jmp1) 100 96 101 97 c tendances de la dissipation … … 105 101 c tendances physiques 106 102 REAL dvfi(ip1jm,llm),dufi(ip1jmp1,llm) 107 REAL dtetafi(ip1jmp1,llm),dqfi(ip1jmp1,llm,nq mx),dpfi(ip1jmp1)103 REAL dtetafi(ip1jmp1,llm),dqfi(ip1jmp1,llm,nqtot),dpfi(ip1jmp1) 108 104 109 105 c variables pour le fichier histoire … … 190 186 itaufin = nday*day_step 191 187 itaufinp1 = itaufin +1 192 188 modname="leapfrog" 189 193 190 194 191 itau = 0 … … 372 369 c 373 370 374 CALL calfis( nq,lafin ,rdayvrai,time ,371 CALL calfis( lafin ,rdayvrai,time , 375 372 $ ucov,vcov,teta,q,masse,ps,p,pk,phis,phi , 376 373 $ du,dv,dteta,dq, … … 384 381 c ajout des tendances physiques: 385 382 c ------------------------------ 386 CALL addfi( nqmx,dtphys, leapf, forward ,383 CALL addfi( dtphys, leapf, forward , 387 384 $ ucov, vcov, teta , q ,ps , 388 385 $ dufi, dvfi, dtetafi , dqfi ,dpfi ) … … 533 530 ENDIF 534 531 #ifdef CPP_IOIPSL 535 CALL writedynav(histaveid, nqmx,itau,vcov ,532 CALL writedynav(histaveid, itau,vcov , 536 533 , ucov,teta,pk,phi,q,masse,ps,phis) 537 534 call bilan_dyn (2,dtvr*iperiod,dtvr*day_step*periodav, … … 556 553 enddo 557 554 #ifdef CPP_IOIPSL 558 c CALL writehist(histid,histvid, nqmx,itau,vcov,555 c CALL writehist(histid,histvid,itau,vcov, 559 556 c s ucov,teta,phi,q,masse,ps,phis) 560 557 #else … … 570 567 #ifdef CPP_IOIPSL 571 568 CALL dynredem1("restart.nc",0.0, 572 , vcov,ucov,teta,q, nqmx,masse,ps)569 , vcov,ucov,teta,q,masse,ps) 573 570 #endif 574 571 … … 639 636 ENDIF 640 637 #ifdef CPP_IOIPSL 641 CALL writedynav(histaveid, nqmx,itau,vcov ,638 CALL writedynav(histaveid, itau,vcov , 642 639 , ucov,teta,pk,phi,q,masse,ps,phis) 643 640 call bilan_dyn (2,dtvr*iperiod,dtvr*day_step*periodav, … … 657 654 enddo 658 655 #ifdef CPP_IOIPSL 659 c CALL writehist( histid, histvid, nqmx,itau,vcov ,656 c CALL writehist( histid, histvid, itau,vcov , 660 657 c , ucov,teta,phi,q,masse,ps,phis) 661 658 #else … … 669 666 IF(itau.EQ.itaufin) 670 667 . CALL dynredem1("restart.nc",0.0, 671 . vcov,ucov,teta,q, nqmx,masse,ps)668 . vcov,ucov,teta,q,masse,ps) 672 669 #endif 673 670 -
LMDZ4/branches/LMDZ4-dev/libf/dyn3d/test_period.F
r524 r1114 9 9 c teta, q , p et phis .......... 10 10 c 11 USE infotrac 11 12 c IMPLICIT NONE 12 13 c … … 17 18 c 18 19 REAL ucov(ip1jmp1,llm), vcov(ip1jm,llm), teta(ip1jmp1,llm) , 19 , q(ip1jmp1,llm,nq mx), p(ip1jmp1,llmp1), phis(ip1jmp1)20 , q(ip1jmp1,llm,nqtot), p(ip1jmp1,llmp1), phis(ip1jmp1) 20 21 c 21 22 c ..... Variables locales ..... … … 68 69 69 70 c 70 DO nq =1, nq mx71 DO nq =1, nqtot 71 72 DO l =1, llm 72 73 DO ij = 1, ip1jmp1, iip1 -
LMDZ4/branches/LMDZ4-dev/libf/dyn3d/write_grads_dyn.h
r524 r1114 24 24 string10='teta' 25 25 CALL wrgrads(1,llm,teta,string10,string10) 26 do iq=1,nq mx26 do iq=1,nqtot 27 27 string10='q' 28 28 write(string10(2:2),'(i1)') iq -
LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/addfi_p.F
r774 r1114 2 2 ! $Header$ 3 3 ! 4 SUBROUTINE addfi_p( nq,pdt, leapf, forward,4 SUBROUTINE addfi_p(pdt, leapf, forward, 5 5 S pucov, pvcov, pteta, pq , pps , 6 6 S pdufi, pdvfi, pdhfi,pdqfi, pdpfi ) 7 7 USE parallel 8 USE infotrac, ONLY : nqtot 8 9 IMPLICIT NONE 9 10 c … … 53 54 c ----------- 54 55 c 55 INTEGER nq56 57 56 REAL pdt 58 57 c 59 58 REAL pvcov(ip1jm,llm),pucov(ip1jmp1,llm) 60 REAL pteta(ip1jmp1,llm),pq(ip1jmp1,llm,nq ),pps(ip1jmp1)59 REAL pteta(ip1jmp1,llm),pq(ip1jmp1,llm,nqtot),pps(ip1jmp1) 61 60 c 62 61 REAL pdvfi(ip1jm,llm),pdufi(ip1jmp1,llm) 63 REAL pdqfi(ip1jmp1,llm,nq ),pdhfi(ip1jmp1,llm),pdpfi(ip1jmp1)62 REAL pdqfi(ip1jmp1,llm,nqtot),pdhfi(ip1jmp1,llm),pdpfi(ip1jmp1) 64 63 c 65 64 LOGICAL leapf,forward … … 166 165 ENDDO 167 166 168 DO iq = 3, nq 167 DO iq = 3, nqtot 169 168 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 170 169 DO k = 1,llm … … 208 207 209 208 if (pole_nord) then 210 DO iq = 1, nq 209 DO iq = 1, nqtot 211 210 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 212 211 DO k = 1, llm … … 225 224 226 225 if (pole_sud) then 227 DO iq = 1, nq 226 DO iq = 1, nqtot 228 227 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 229 228 DO k = 1, llm -
LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/advtrac_p.F
r985 r1114 22 22 USE Vampir 23 23 USE times 24 USE infotrac 24 25 IMPLICIT NONE 25 26 c … … 35 36 #include "ener.h" 36 37 #include "description.h" 37 #include "advtrac.h"38 38 39 39 c------------------------------------------------------------------- … … 46 46 INTEGER iapptrac 47 47 REAL pbaru(ip1jmp1,llm),pbarv(ip1jm,llm) 48 REAL q(ip1jmp1,llm,nq mx),masse(ip1jmp1,llm)48 REAL q(ip1jmp1,llm,nqtot),masse(ip1jmp1,llm) 49 49 REAL p( ip1jmp1,llmp1 ),teta(ip1jmp1,llm) 50 50 REAL pk(ip1jmp1,llm) … … 59 59 REAL,SAVE::pbarug(ip1jmp1,llm),pbarvg(ip1jm,llm),wg(ip1jmp1,llm) 60 60 REAL (kind=kind(1.d0)) :: t_initial, t_final, tps_cpu 61 real cpuadv(nqmx)62 common/cpuadv/cpuadv63 64 61 INTEGER iadvtr 65 62 INTEGER ij,l,iq,iiq … … 76 73 REAL psppm(iim,jjp1) ! pression au sol 77 74 REAL unatppm(iim,jjp1,llm),vnatppm(iim,jjp1,llm) 78 REAL qppm(iim*jjp1,llm,nq mx)75 REAL qppm(iim*jjp1,llm,nqtot) 79 76 REAL fluxwppm(iim,jjp1,llm) 80 77 REAL apppm(llmp1), bpppm(llmp1) … … 88 85 REAL,SAVE :: teta_tmp(ip1jmp1,llm) 89 86 REAL,SAVE :: pk_tmp(ip1jmp1,llm) 90 87 91 88 ijb_u=ij_begin 92 89 ije_u=ij_end … … 196 193 call Register_SwapFieldHallo(pk_tmp,pk_tmp,ip1jmp1,llm, 197 194 * jj_Nb_vanleer,1,1,Request_vanleer) 198 do j=1,nq mx195 do j=1,nqtot 199 196 call Register_SwapFieldHallo(q(1,1,j),q(1,1,j),ip1jmp1,llm, 200 197 * jj_nb_vanleer,0,0,Request_vanleer) … … 279 276 c Appel des sous programmes d'advection 280 277 c----------------------------------------------------------- 281 do iq=1,nq mx278 do iq=1,nqtot 282 279 c call clock(t_initial) 283 280 if(iadv(iq) == 0) cycle … … 479 476 c$OMP END MASTER 480 477 481 do j=1,nq mx478 do j=1,nqtot 482 479 call Register_SwapFieldHallo(q(1,1,j),q(1,1,j),ip1jmp1,llm, 483 480 * jj_nb_caldyn,0,0,Request_vanleer) -
LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/caladvtrac_p.F
r960 r1114 8 8 * flxw, pk, iapptrac) 9 9 USE parallel 10 USE infotrac 10 11 c 11 12 IMPLICIT NONE … … 25 26 #include "comconst.h" 26 27 #include "control.h" 27 #include "advtrac.h"28 28 29 29 c Arguments: 30 30 c ---------- 31 31 REAL pbaru( ip1jmp1,llm ),pbarv( ip1jm,llm),masse(ip1jmp1,llm) 32 REAL p( ip1jmp1,llmp1),q( ip1jmp1,llm,nq mx),dq( ip1jmp1,llm,2 )32 REAL p( ip1jmp1,llmp1),q( ip1jmp1,llm,nqtot),dq( ip1jmp1,llm,2 ) 33 33 REAL teta( ip1jmp1,llm),pk( ip1jmp1,llm) 34 34 REAL :: flxw(ip1jmp1,llm) … … 48 48 REAL finmasse(ip1jmp1,llm), dtvrtrac 49 49 50 51 50 cc 52 51 c -
LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/calfis_p.F
r1000 r1114 4 4 C 5 5 C 6 SUBROUTINE calfis_p(nq, 7 $ lafin, 6 SUBROUTINE calfis_p(lafin, 8 7 $ rdayvrai, 9 8 $ heure, … … 40 39 USE Times 41 40 USE IOPHY 41 USE infotrac 42 42 43 IMPLICIT NONE 43 44 c======================================================================= … … 98 99 #include "paramet.h" 99 100 #include "temps.h" 100 #include "advtrac.h" 101 102 INTEGER ngridmx,nq 101 102 INTEGER ngridmx 103 103 PARAMETER( ngridmx = 2+(jjm-1)*iim - 1/jjm ) 104 104 … … 119 119 REAL pteta(iip1,jjp1,llm) 120 120 REAL pmasse(iip1,jjp1,llm) 121 REAL pq(iip1,jjp1,llm,nq mx)121 REAL pq(iip1,jjp1,llm,nqtot) 122 122 REAL pphis(iip1,jjp1) 123 123 REAL pphi(iip1,jjp1,llm) … … 126 126 REAL pducov(iip1,jjp1,llm) 127 127 REAL pdteta(iip1,jjp1,llm) 128 REAL pdq(iip1,jjp1,llm,nq mx)128 REAL pdq(iip1,jjp1,llm,nqtot) 129 129 c 130 130 REAL pps(iip1,jjp1) … … 135 135 REAL pdufi(iip1,jjp1,llm) 136 136 REAL pdhfi(iip1,jjp1,llm) 137 REAL pdqfi(iip1,jjp1,llm,nq mx)137 REAL pdqfi(iip1,jjp1,llm,nqtot) 138 138 REAL pdpsfi(iip1,jjp1) 139 139 … … 253 253 ALLOCATE(zphi(klon,llm),zphis(klon)) 254 254 ALLOCATE(zufi(klon,llm), zvfi(klon,llm)) 255 ALLOCATE(ztfi(klon,llm),zqfi(klon,llm,nq mx))255 ALLOCATE(ztfi(klon,llm),zqfi(klon,llm,nqtot)) 256 256 ALLOCATE(pcvgu(klon,llm), pcvgv(klon,llm)) 257 257 ALLOCATE(pcvgt(klon,llm), pcvgq(klon,llm,2)) 258 258 c ALLOCATE(pvervel(klon,llm)) 259 259 ALLOCATE(zdufi(klon,llm),zdvfi(klon,llm)) 260 ALLOCATE(zdtfi(klon,llm),zdqfi(klon,llm,nq mx))260 ALLOCATE(zdtfi(klon,llm),zdqfi(klon,llm,nqtot)) 261 261 ALLOCATE(zdpsrf(klon)) 262 262 ALLOCATE(zdufi2(klon+iim,llm),zdvfi2(klon+iim,llm)) … … 335 335 c 336 336 337 DO iq=1,nq 337 DO iq=1,nqtot 338 338 iiq=niadv(iq) 339 339 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) … … 527 527 cc$OMP PARALLEL DEFAULT(NONE) 528 528 cc$OMP+ PRIVATE(i,l,offset,iq) 529 cc$OMP+ SHARED(klon_omp_nb,nq ,klon_omp_begin,529 cc$OMP+ SHARED(klon_omp_nb,nqtot,klon_omp_begin, 530 530 cc$OMP+ debut,lafin,rdayvrai,heure,dtphys,zplev,zplay, 531 531 cc$OMP+ zphi,zphis,presnivs,clesphy0,zufi,zvfi,ztfi, … … 549 549 allocate(zvfi_omp(klon,llm)) 550 550 allocate(ztfi_omp(klon,llm)) 551 allocate(zqfi_omp(klon,llm,nq ))551 allocate(zqfi_omp(klon,llm,nqtot)) 552 552 c allocate(pvervel_omp(klon,llm)) 553 553 allocate(zdufi_omp(klon,llm)) 554 554 allocate(zdvfi_omp(klon,llm)) 555 555 allocate(zdtfi_omp(klon,llm)) 556 allocate(zdqfi_omp(klon,llm,nq ))556 allocate(zdqfi_omp(klon,llm,nqtot)) 557 557 allocate(zdpsrf_omp(klon)) 558 558 allocate(flxwfi_omp(klon,llm)) … … 609 609 enddo 610 610 611 do iq=1,nq 611 do iq=1,nqtot 612 612 do l=1,llm 613 613 do i=1,klon … … 641 641 enddo 642 642 643 do iq=1,nq 643 do iq=1,nqtot 644 644 do l=1,llm 645 645 do i=1,klon … … 664 664 CALL physiq (klon, 665 665 . llm, 666 . nq,667 666 . debut, 668 667 . lafin, … … 743 742 enddo 744 743 745 do iq=1,nq 744 do iq=1,nqtot 746 745 do l=1,llm 747 746 do i=1,klon … … 775 774 enddo 776 775 777 do iq=1,nq 776 do iq=1,nqtot 778 777 do l=1,llm 779 778 do i=1,klon … … 937 936 c --------------------- 938 937 939 DO iq=1,nq mx938 DO iq=1,nqtot 940 939 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 941 940 DO l=1,llm … … 976 975 C 977 976 978 DO iq=1,nq 977 DO iq=1,nqtot 979 978 iiq=niadv(iq) 980 979 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) -
LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/create_etat0_limit.F
r1017 r1114 8 8 USE mod_const_mpi 9 9 USE phys_state_var_mod 10 USE infotrac 10 11 IMPLICIT NONE 11 12 c … … 31 32 #include "paramet.h" 32 33 #include "indicesol.h" 33 #include "advtrac.h"34 34 #include "control.h" 35 35 #include "clesphys.h" … … 37 37 ! REAL :: pctsrf(iim*(jjm-1)+2, nbsrf) 38 38 39 c initialisation traceurs40 hadv_flg(:) = 0.41 vadv_flg(:) = 0.42 conv_flg(:) = 0.43 pbl_flg(:) = 0.44 tracnam(:) = ' '45 nprath = 146 nbtrac = 047 mmt_adj(:,:,:,:) = 148 49 39 IF (config_inca /= 'none') THEN 50 40 #ifdef INCA 51 41 call init_const_lmdz( 52 $ nbtr ac,anneeref,dayref,42 $ nbtr,anneeref,dayref, 53 43 $ iphysiq,day_step,nday) 54 44 #endif 55 print *, 'nbtr ac =' , nbtrac45 print *, 'nbtr =' , nbtr 56 46 END IF 57 47 … … 59 49 60 50 61 CALL Init_Phys_lmdz(iim,jjp1,llm, nqmx-2,1,(/(jjm-1)*iim+2/))51 CALL Init_Phys_lmdz(iim,jjp1,llm,1,(/(jjm-1)*iim+2/)) 62 52 PRINT *,'---> klon=',klon 63 53 -
LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/dynetat0.F
r774 r1114 2 2 ! $Header$ 3 3 ! 4 SUBROUTINE dynetat0(fichnom, nq,vcov,ucov,4 SUBROUTINE dynetat0(fichnom,vcov,ucov, 5 5 . teta,q,masse,ps,phis,time) 6 USE infotrac 6 7 IMPLICIT NONE 7 8 … … 32 33 #include "serre.h" 33 34 #include "logic.h" 34 #include "advtrac.h"35 35 36 36 c Arguments: … … 38 38 39 39 CHARACTER*(*) fichnom 40 INTEGER nq41 40 REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm),teta(ip1jmp1,llm) 42 REAL q(ip1jmp1,llm,nq ),masse(ip1jmp1,llm)41 REAL q(ip1jmp1,llm,nqtot),masse(ip1jmp1,llm) 43 42 REAL ps(ip1jmp1),phis(ip1jmp1) 44 43 … … 53 52 54 53 c----------------------------------------------------------------------- 55 56 54 c Ouverture NetCDF du fichier etat initial 57 55 … … 315 313 316 314 317 IF(nq.GE.1) THEN 318 DO iq=1,nq 315 DO iq=1,nqtot 319 316 ierr = NF_INQ_VARID (nid, tname(iq), nvarid) 320 317 IF (ierr .NE. NF_NOERR) THEN … … 334 331 ENDIF 335 332 ENDDO 336 ENDIF337 333 338 334 ierr = NF_INQ_VARID (nid, "masse", nvarid) -
LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/dynredem.F
r1000 r1114 3 3 ! 4 4 c 5 SUBROUTINE dynredem0(fichnom,iday_end,phis ,nq)5 SUBROUTINE dynredem0(fichnom,iday_end,phis) 6 6 USE IOIPSL 7 USE infotrac 7 8 IMPLICIT NONE 8 9 c======================================================================= … … 22 23 #include "description.h" 23 24 #include "serre.h" 24 #include "advtrac.h"25 25 26 26 c Arguments: … … 29 29 REAL phis(ip1jmp1) 30 30 CHARACTER*(*) fichnom 31 INTEGER nq32 31 33 32 c Local: … … 458 457 dims4(3) = idim_s 459 458 dims4(4) = idim_tim 460 IF(nq.GE.1) THEN 461 DO iq=1,nq 459 460 DO iq=1,nqtot 462 461 cIM 220306 BEG 463 462 #ifdef NC_DOUBLE … … 469 468 ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 12,ttext(iq)) 470 469 ENDDO 471 ENDIF472 470 c 473 471 dims4(1) = idim_rlonv … … 508 506 END 509 507 SUBROUTINE dynredem1(fichnom,time, 510 . vcov,ucov,teta,q,nq,masse,ps) 508 . vcov,ucov,teta,q,masse,ps) 509 USE infotrac 511 510 IMPLICIT NONE 512 511 c================================================================= … … 519 518 #include "comvert.h" 520 519 #include "comgeom.h" 521 #include "advtrac.h"522 520 #include "temps.h" 523 521 #include "control.h" 524 522 525 INTEGER nq,l523 INTEGER l 526 524 REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm) 527 525 REAL teta(ip1jmp1,llm) 528 526 REAL ps(ip1jmp1),masse(ip1jmp1,llm) 529 REAL q(ip1jmp1,llm,nq )527 REAL q(ip1jmp1,llm,nqtot) 530 528 CHARACTER*(*) fichnom 531 529 … … 633 631 END IF 634 632 635 IF(nq.GE.1) THEN 636 do iq=1,nq 633 do iq=1,nqtot 637 634 638 635 IF (config_inca == 'none') THEN … … 704 701 705 702 ENDDO 706 ENDIF707 703 c 708 704 ierr = NF_INQ_VARID(nid, "masse", nvarid) -
LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/dynredem_p.F
r1085 r1114 3 3 ! 4 4 c 5 SUBROUTINE dynredem0_p(fichnom,iday_end,phis ,nq)5 SUBROUTINE dynredem0_p(fichnom,iday_end,phis) 6 6 USE IOIPSL 7 7 USE parallel 8 USE infotrac 8 9 IMPLICIT NONE 9 10 c======================================================================= … … 23 24 #include "description.h" 24 25 #include "serre.h" 25 #include "advtrac.h"26 26 27 27 c Arguments: … … 30 30 REAL phis(ip1jmp1) 31 31 CHARACTER*(*) fichnom 32 INTEGER nq33 32 34 33 c Local: … … 54 53 INTEGER yyears0,jjour0, mmois0 55 54 character*30 unites 56 57 55 58 56 c----------------------------------------------------------------------- … … 461 459 dims4(3) = idim_s 462 460 dims4(4) = idim_tim 463 IF(nq.GE.1) THEN 464 DO iq=1,nq 461 462 DO iq=1,nqtot 465 463 cIM 220306 BEG 466 464 #ifdef NC_DOUBLE … … 472 470 ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 12,ttext(iq)) 473 471 ENDDO 474 ENDIF475 472 c 476 473 dims4(1) = idim_rlonv … … 513 510 END 514 511 SUBROUTINE dynredem1_p(fichnom,time, 515 . vcov,ucov,teta,q, nq,masse,ps)512 . vcov,ucov,teta,q,masse,ps) 516 513 USE parallel 514 USE infotrac 517 515 IMPLICIT NONE 518 516 c================================================================= … … 525 523 #include "comvert.h" 526 524 #include "comgeom.h" 527 #include "advtrac.h"528 525 #include "temps.h" 529 526 #include "control.h" 530 527 531 INTEGER nq,l528 INTEGER l 532 529 REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm) 533 530 REAL teta(ip1jmp1,llm) 534 531 REAL ps(ip1jmp1),masse(ip1jmp1,llm) 535 REAL q(ip1jmp1,llm,nq )532 REAL q(ip1jmp1,llm,nqtot) 536 533 CHARACTER*(*) fichnom 537 534 … … 559 556 call Gather_Field(ps,ip1jmp1,1,0) 560 557 561 do iq=1,nq 558 do iq=1,nqtot 562 559 call Gather_Field(q(1,1,iq),ip1jmp1,llm,0) 563 560 enddo … … 660 657 END IF 661 658 662 IF(nq.GE.1) THEN 663 do iq=1,nq 659 do iq=1,nqtot 664 660 665 661 IF (config_inca == 'none') THEN … … 731 727 732 728 ENDDO 733 ENDIF734 735 729 736 730 -
LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/etat0_netcdf.F
r1108 r1114 13 13 USE phys_state_var_mod 14 14 USE filtreg_mod 15 USE infotrac 15 16 ! 16 17 IMPLICIT NONE … … 39 40 REAL :: vvent(iip1, jjm, llm) 40 41 REAL :: t3d(iip1, jjp1, llm), tpot(iip1, jjp1, llm) 41 REAL :: q3d(iip1, jjp1, llm,nq mx), qsat(iip1, jjp1, llm)42 REAL :: q3d(iip1, jjp1, llm,nqtot), qsat(iip1, jjp1, llm) 42 43 REAL :: tsol(klon), qsol(klon), sn(klon) 43 44 REAL :: tsolsrf(klon,nbsrf), qsolsrf(klon,nbsrf),snsrf(klon,nbsrf) … … 625 626 626 627 C init pour traceurs 627 call in iadvtrac(nq)628 call infotrac_init 628 629 C Ecriture 629 630 CALL inidissip( lstardis, nitergdiv, nitergrot, niterh , … … 649 650 * phi,w, pbaru,pbarv,time+iday-dayref ) 650 651 print*,'sortie caldyn0' 651 CALL dynredem0("start.nc",dayref,phis ,nqmx)652 CALL dynredem0("start.nc",dayref,phis) 652 653 print*,'sortie dynredem0' 653 CALL dynredem1("start.nc",0.0,vvent,uvent,tpot,q3d, nqmx,masse ,654 CALL dynredem1("start.nc",0.0,vvent,uvent,tpot,q3d,masse , 654 655 . psol) 655 656 print*,'sortie dynredem1' … … 743 744 visu_file='Etat0_visu.nc' 744 745 CALL initdynav(visu_file,dayref,anneeref,time_step, 745 . t_ops, t_wrt, nqmx,visuid)746 CALL writedynav(visuid, nqmx,itau,vvent ,746 . t_ops, t_wrt, visuid) 747 CALL writedynav(visuid, itau,vvent , 747 748 . uvent,tpot,pk,phi,q3d,masse,psol,phis) 748 749 else -
LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/fluxstokenc_p.F
r1021 r1114 61 61 CALL initfluxsto_p( 'fluxstoke', 62 62 . time_step,istdyn* time_step,istdyn* time_step, 63 . nqmx,fluxid,fluxvid,fluxdid)63 . fluxid,fluxvid,fluxdid) 64 64 65 65 ijb=ij_begin -
LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/gcm.F
r1108 r1114 14 14 USE mod_grid_phy_lmdz 15 15 USE dimphy 16 USE infotrac 16 17 USE mod_interface_dyn_phys 17 18 USE comgeomphy … … 67 68 #include "iniprint.h" 68 69 #include "tracstoke.h" 69 #include "advtrac.h"70 70 71 71 INTEGER longcles … … 83 83 REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm) ! vents covariants 84 84 REAL teta(ip1jmp1,llm) ! temperature potentielle 85 REAL q(ip1jmp1,llm,nqmx)! champs advectes85 REAL, ALLOCATABLE, DIMENSION(:,:,:) :: q ! champs advectes 86 86 REAL ps(ip1jmp1) ! pression au sol 87 87 c REAL p (ip1jmp1,llmp1 ) ! pression aux interfac.des couches … … 138 138 c variables pour l'initialisation de la physique : 139 139 c ------------------------------------------------ 140 INTEGER ngridmx ,nq140 INTEGER ngridmx 141 141 PARAMETER( ngridmx = 2+(jjm-1)*iim - 1/jjm ) 142 142 REAL zcufi(ngridmx),zcvfi(ngridmx) … … 159 159 dynhistave_file = 'dyn_hist_ave' 160 160 161 162 c initialisation Anne163 hadv_flg(:) = 0.164 vadv_flg(:) = 0.165 conv_flg(:) = 0.166 pbl_flg(:) = 0.167 tracnam(:) = ' '168 nprath = 1169 nbtrac = 0170 mmt_adj(:,:,:,:) = 1171 172 173 161 c-------------------------------------------------------------------------- 174 162 c Iflag_phys controle l'appel a la physique : … … 219 207 call init_parallel 220 208 call Read_Distrib 221 CALL Init_Phys_lmdz(iim,jjp1,llm, nqmx-2,mpi_size,distrib_phys)209 CALL Init_Phys_lmdz(iim,jjp1,llm,mpi_size,distrib_phys) 222 210 CALL set_bands 223 211 CALL Init_interface_dyn_phys … … 238 226 #ifdef INCA 239 227 call init_const_lmdz( 240 $ nbtr ac,anneeref,dayref,228 $ nbtr,anneeref,dayref, 241 229 $ iphysiq,day_step,nday) 242 230 … … 250 238 c Initialisation des traceurs 251 239 c --------------------------- 252 c Choix du schema pour l'advection 253 c dans fichier trac.def ou via INCA 254 255 call iniadvtrac(nq) 256 c 240 c Choix du nombre de traceurs et du schema pour l'advection 241 c dans fichier traceur.def, par default ou via INCA 242 call infotrac_init 243 244 c Allocation de la tableau q : champs advectes 245 ALLOCATE(q(ip1jmp1,llm,nqtot)) 246 257 247 c----------------------------------------------------------------------- 258 248 c Lecture de l'etat initial : … … 262 252 if (read_start) then 263 253 #ifdef CPP_IOIPSL 264 CALL dynetat0("start.nc", nqmx,vcov,ucov,254 CALL dynetat0("start.nc",vcov,ucov, 265 255 . teta,q,masse,ps,phis, time_0) 266 256 c write(73,*) 'ucov',ucov … … 277 267 . 'AVANT iniacademic AVANT AVANT AVANT AVANT' 278 268 if (.not.read_start) then 279 CALL iniacademic( nqmx,vcov,ucov,teta,q,masse,ps,phis,time_0)269 CALL iniacademic(vcov,ucov,teta,q,masse,ps,phis,time_0) 280 270 endif 281 282 271 283 272 c----------------------------------------------------------------------- … … 414 403 415 404 #ifdef CPP_IOIPSL 416 CALL dynredem0_p("restart.nc", day_end, phis , nqmx)405 CALL dynredem0_p("restart.nc", day_end, phis) 417 406 418 407 ecripar = .TRUE. … … 423 412 t_wrt = iecri * daysec 424 413 CALL inithist_p(dynhist_file,day_ref,annee_ref,time_step, 425 . t_ops, t_wrt, nqmx,histid, histvid)414 . t_ops, t_wrt, histid, histvid) 426 415 427 416 t_ops = iperiod * time_step 428 417 t_wrt = periodav * daysec 429 418 CALL initdynav_p(dynhistave_file,day_ref,annee_ref,time_step, 430 . t_ops, t_wrt, nqmx,histaveid)419 . t_ops, t_wrt, histaveid) 431 420 432 421 dtav = iperiod*dtvr/daysec … … 455 444 456 445 c$OMP PARALLEL DEFAULT(SHARED) COPYIN(/temps/,/logic/) 457 CALL leapfrog_p(ucov,vcov,teta,ps,masse,phis, nq,q,clesphy0,446 CALL leapfrog_p(ucov,vcov,teta,ps,masse,phis,q,clesphy0, 458 447 . time_0) 459 448 c$OMP END PARALLEL -
LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/iniacademic.F
r1108 r1114 4 4 c 5 5 c 6 SUBROUTINE iniacademic( nq,vcov,ucov,teta,q,masse,ps,phis,time_0)6 SUBROUTINE iniacademic(vcov,ucov,teta,q,masse,ps,phis,time_0) 7 7 8 8 USE filtreg_mod 9 USE infotrac, ONLY : nqtot 9 10 10 11 c%W% %G% … … 48 49 c ---------- 49 50 50 integer nq51 51 real time_0 52 52 … … 54 54 REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm) ! vents covariants 55 55 REAL teta(ip1jmp1,llm) ! temperature potentielle 56 REAL q(ip1jmp1,llm,nq )! champs advectes56 REAL q(ip1jmp1,llm,nqtot) ! champs advectes 57 57 REAL ps(ip1jmp1) ! pression au sol 58 58 REAL masse(ip1jmp1,llm) ! masse d'air … … 160 160 q(:,:,1 )=1.e-10 161 161 q(:,:,2 )=1.e-15 162 q(:,:,3:nq )=0.162 q(:,:,3:nqtot)=0. 163 163 164 164 -
LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/initdynav_p.F
r1000 r1114 4 4 c 5 5 c 6 subroutine initdynav_p(infile,day0,anne0,tstep,t_ops,t_wrt 7 . ,nq,fileid) 6 subroutine initdynav_p(infile,day0,anne0,tstep,t_ops,t_wrt,fileid) 8 7 9 8 USE IOIPSL … … 11 10 use Write_field 12 11 use misc_mod 12 USE infotrac 13 13 14 implicit none 14 15 … … 30 31 C t_ops: frequence de l'operation pour IOIPSL 31 32 C t_wrt: frequence d'ecriture sur le fichier 32 C nq: nombre de traceurs33 33 C 34 34 C Sortie: … … 50 50 #include "description.h" 51 51 #include "serre.h" 52 #include "advtrac.h"53 52 54 53 C Arguments … … 58 57 real tstep, t_ops, t_wrt 59 58 integer fileid 60 integer nq61 59 integer thoriid, zvertiid 62 60 … … 82 80 83 81 INTEGER :: dynave_domain_id 84 85 82 86 83 if (adjust) return … … 169 166 C Traceurs 170 167 C 171 DO iq=1,nq 168 DO iq=1,nqtot 172 169 call histdef(fileid, ttext(iq), ttext(iq), '-', 173 170 . iip1, jjn, thoriid, llm, 1, llm, zvertiid, -
LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/initfluxsto_p.F
r1000 r1114 3 3 ! 4 4 subroutine initfluxsto_p 5 . (infile,tstep,t_ops,t_wrt, nq,5 . (infile,tstep,t_ops,t_wrt, 6 6 . fileid,filevid,filedid) 7 7 … … 30 30 C t_ops: frequence de l'operation pour IOIPSL 31 31 C t_wrt: frequence d'ecriture sur le fichier 32 C nq: nombre de traceurs33 32 C 34 33 C Sortie: … … 58 57 real tstep, t_ops, t_wrt 59 58 integer fileid, filevid,filedid 60 integer n q,ndex(1)59 integer ndex(1) 61 60 real nivd(1) 62 61 … … 87 86 INTEGER :: dynu_domain_id 88 87 INTEGER :: dynv_domain_id 89 90 88 91 89 C -
LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/inithist_p.F
r1000 r1114 2 2 ! $Header$ 3 3 ! 4 subroutine inithist_p(infile,day0,anne0,tstep,t_ops,t_wrt, nq,4 subroutine inithist_p(infile,day0,anne0,tstep,t_ops,t_wrt, 5 5 . fileid,filevid) 6 6 … … 9 9 use Write_field 10 10 use misc_mod 11 USE infotrac 11 12 12 13 implicit none … … 29 30 C t_ops: frequence de l'operation pour IOIPSL 30 31 C t_wrt: frequence d'ecriture sur le fichier 31 C nq: nombre de traceurs32 32 C 33 33 C Sortie: … … 50 50 #include "description.h" 51 51 #include "serre.h" 52 #include "advtrac.h"53 52 54 53 C Arguments … … 58 57 real tstep, t_ops, t_wrt 59 58 integer fileid, filevid 60 integer nq61 59 62 60 C Variables locales … … 83 81 INTEGER :: dynu_domain_id 84 82 INTEGER :: dynv_domain_id 83 85 84 C 86 85 C Initialisations … … 217 216 C Traceurs 218 217 C 219 DO iq=1,nq 218 DO iq=1,nqtot 220 219 call histdef(fileid, ttext(iq), ttext(iq), '-', 221 220 . iip1, jjn, thoriid, llm, 1, llm, zvertiid, -
LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/integrd_p.F
r985 r1114 32 32 #include "temps.h" 33 33 #include "serre.h" 34 #include "advtrac.h"35 34 36 35 c Arguments: -
LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/leapfrog_p.F
r1000 r1114 9 9 #define CPP_IOIPSL 10 10 11 SUBROUTINE leapfrog_p(ucov,vcov,teta,ps,masse,phis, nq,q,clesphy0,11 SUBROUTINE leapfrog_p(ucov,vcov,teta,ps,masse,phis,q,clesphy0, 12 12 & time_0) 13 13 … … 21 21 USE vampir 22 22 USE timer_filtre, ONLY : print_filtre_timer 23 USE infotrac 23 24 24 25 IMPLICIT NONE … … 69 70 #include "com_io_dyn.h" 70 71 #include "iniprint.h" 71 72 c#include "tracstoke.h"73 74 72 #include "academic.h" 75 !#include "clesphys.h"76 #include "advtrac.h"77 73 78 integer nq79 80 74 INTEGER longcles 81 75 PARAMETER ( longcles = 20 ) … … 88 82 REAL :: vcov(ip1jm,llm),ucov(ip1jmp1,llm) ! vents covariants 89 83 REAL :: teta(ip1jmp1,llm) ! temperature potentielle 90 REAL :: q(ip1jmp1,llm,nq mx)! champs advectes84 REAL :: q(ip1jmp1,llm,nqtot) ! champs advectes 91 85 REAL :: ps(ip1jmp1) ! pression au sol 92 86 REAL,SAVE :: p (ip1jmp1,llmp1 ) ! pression aux interfac.des couches … … 109 103 c tendances dynamiques 110 104 REAL,SAVE :: dv(ip1jm,llm),du(ip1jmp1,llm) 111 REAL,SAVE :: dteta(ip1jmp1,llm),dq(ip1jmp1,llm,nqmx),dp(ip1jmp1) 105 REAL,SAVE :: dteta(ip1jmp1,llm),dp(ip1jmp1) 106 REAL,DIMENSION(:,:,:), ALLOCATABLE, SAVE :: dq 112 107 113 108 c tendances de la dissipation … … 118 113 REAL,SAVE :: dvfi(ip1jm,llm),dufi(ip1jmp1,llm) 119 114 REAL,SAVE :: dtetafi(ip1jmp1,llm) 120 REAL,SAVE :: dqfi(ip1jmp1,llm,nqmx),dpfi(ip1jmp1) 115 REAL,SAVE :: dpfi(ip1jmp1) 116 REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: dqfi 121 117 122 118 c variables pour le fichier histoire … … 186 182 type(Request) :: Request_physic 187 183 REAL,SAVE :: dvfi_tmp(iip1,llm),dufi_tmp(iip1,llm) 188 REAL,SAVE :: dtetafi_tmp(iip1,llm),dqfi_tmp(iip1,llm,nqmx) 184 REAL,SAVE :: dtetafi_tmp(iip1,llm) 185 REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: dqfi_tmp 189 186 REAL,SAVE :: dpfi_tmp(iip1) 190 187 … … 195 192 INTEGER :: var_time 196 193 LOGICAL :: ok_start_timer=.FALSE. 194 LOGICAL, SAVE :: firstcall=.TRUE. 197 195 198 196 c$OMP MASTER … … 208 206 itaufin = nday*day_step 209 207 itaufinp1 = itaufin +1 210 208 modname="leapfrog_p" 211 209 212 210 itau = 0 … … 217 215 iday = iday+1 218 216 ENDIF 217 218 c Allocate variables depending on dynamic variable nqtot 219 c$OMP MASTER 220 IF (firstcall) THEN 221 firstcall=.FALSE. 222 ALLOCATE(dq(ip1jmp1,llm,nqtot)) 223 ALLOCATE(dqfi(ip1jmp1,llm,nqtot)) 224 ALLOCATE(dqfi_tmp(iip1,llm,nqtot)) 225 END IF 226 c$OMP END MASTER 227 c$OMP BARRIER 219 228 220 229 c----------------------------------------------------------------------- … … 455 464 & jj_Nb_caldyn,0,0,TestRequest) 456 465 457 do j=1,nq mx466 do j=1,nqtot 458 467 call Register_SwapFieldHallo(q(1,1,j),q(1,1,j),ip1jmp1,llm, 459 468 & jj_nb_caldyn,0,0,TestRequest) … … 490 499 call Register_Hallo(p,ip1jmp1,llmp1,1,1,1,1,TestRequest) 491 500 492 c do j=1,nq mx501 c do j=1,nqtot 493 502 c call Register_Hallo(q(1,1,j),ip1jmp1,llm,1,1,1,1, 494 503 c * TestRequest) … … 516 525 call WriteField_p('pkf',reshape(pkf,(/iip1,jmp1,llm/))) 517 526 call WriteField_p('phis',reshape(phis,(/iip1,jmp1/))) 518 do j=1,nq mx527 do j=1,nqtot 519 528 call WriteField_p('q'//trim(int2str(j)), 520 529 . reshape(q(:,:,j),(/iip1,jmp1,llm/))) … … 608 617 c$OMP BARRIER 609 618 ! CALL FTRACE_REGION_BEGIN("integrd") 619 610 620 CALL integrd_p ( 2,vcovm1,ucovm1,tetam1,psm1,massem1 , 611 621 $ dv,du,dteta,dq,dp,vcov,ucov,teta,q,ps,masse,phis , … … 625 635 c 626 636 c call WriteField_p('ps',reshape(ps,(/iip1,jmp1/))) 627 c do j=1,nq mx637 c do j=1,nqtot 628 638 c call WriteField_p('q'//trim(int2str(j)), 629 639 c . reshape(q(:,:,j),(/iip1,jmp1,llm/))) … … 669 679 670 680 c$OMP BARRIER 671 672 681 CALL exner_hyb_p( ip1jmp1, ps, p,alpha,beta,pks, pk, pkf ) 673 682 c$OMP BARRIER … … 725 734 726 735 c call SetDistrib(jj_nb_vanleer) 727 do j=1,nq mx736 do j=1,nqtot 728 737 729 738 call Register_SwapFieldHallo(q(1,1,j),q(1,1,j),ip1jmp1,llm, … … 756 765 cc$OMP BARRIER 757 766 ! CALL FTRACE_REGION_BEGIN("calfis") 758 CALL calfis_p( nq,lafin ,rdayvrai,time ,767 CALL calfis_p(lafin ,rdayvrai,time , 759 768 $ ucov,vcov,teta,q,masse,ps,p,pk,phis,phi , 760 769 $ du,dv,dteta,dq, … … 799 808 * 1,0,0,1,Request_physic) 800 809 801 do j=1,nq mx810 do j=1,nqtot 802 811 call Register_Hallo(dqfi(1,1,j),ip1jmp1,llm, 803 812 * 1,0,0,1,Request_physic) … … 842 851 cc$OMP END MASTER 843 852 c 844 c do j=1,nq mx853 c do j=1,nqtot 845 854 c call WriteField_p('dqfi'//trim(int2str(j)), 846 855 c . reshape(dqfi(:,:,j),(/iip1,jmp1,llm/))) … … 853 862 ENDIF 854 863 855 CALL addfi_p( nqmx,dtphys, leapf, forward ,864 CALL addfi_p( dtphys, leapf, forward , 856 865 $ ucov, vcov, teta , q ,ps , 857 866 $ dufi, dvfi, dtetafi , dqfi ,dpfi ) … … 889 898 * jj_Nb_caldyn,Request_physic) 890 899 891 do j=1,nq mx900 do j=1,nqtot 892 901 893 902 call Register_SwapField(q(1,1,j),q(1,1,j),ip1jmp1,llm, … … 954 963 CALL pression_p ( ip1jmp1, ap, bp, ps, p ) 955 964 c$OMP BARRIER 956 957 958 965 CALL exner_hyb_p( ip1jmp1, ps, p,alpha,beta, pks, pk, pkf ) 959 966 c$OMP BARRIER … … 1291 1298 c$OMP BARRIER 1292 1299 c$OMP MASTER 1293 CALL writedynav_p(histaveid, nqmx,itau,vcov ,1300 CALL writedynav_p(histaveid, itau,vcov , 1294 1301 , ucov,teta,pk,phi,q,masse,ps,phis) 1295 1302 c$OMP END MASTER … … 1339 1346 #ifdef CPP_IOIPSL 1340 1347 1341 CALL writehist_p(histid,histvid, nqmx,itau,vcov,1348 CALL writehist_p(histid,histvid, itau,vcov, 1342 1349 s ucov,teta,phi,q,masse,ps,phis) 1343 1350 … … 1354 1361 1355 1362 CALL dynredem1_p("restart.nc",0.0, 1356 , vcov,ucov,teta,q, nqmx,masse,ps)1363 , vcov,ucov,teta,q,masse,ps) 1357 1364 c#endif 1358 1365 … … 1437 1444 c$OMP BARRIER 1438 1445 c$OMP MASTER 1439 CALL writedynav_p(histaveid, nqmx,itau,vcov ,1446 CALL writedynav_p(histaveid, itau,vcov , 1440 1447 , ucov,teta,pk,phi,q,masse,ps,phis) 1441 1448 call bilan_dyn_p (2,dtvr*iperiod,dtvr*day_step*periodav, … … 1480 1487 #ifdef CPP_IOIPSL 1481 1488 1482 CALL writehist_p( histid, histvid, nqmx,itau,vcov ,1489 CALL writehist_p( histid, histvid, itau,vcov , 1483 1490 , ucov,teta,phi,q,masse,ps,phis) 1484 1491 c#else … … 1487 1494 c call Gather_Field(teta,ip1jmp1,llm,0) 1488 1495 c call Gather_Field(ps,ip1jmp1,1,0) 1489 c do iq=1,nq mx1496 c do iq=1,nqtot 1490 1497 c call Gather_Field(q(1,1,iq),ip1jmp1,llm,0) 1491 1498 c enddo … … 1502 1509 c$OMP MASTER 1503 1510 CALL dynredem1_p("restart.nc",0.0, 1504 . vcov,ucov,teta,q, nqmx,masse,ps)1511 . vcov,ucov,teta,q,masse,ps) 1505 1512 c$OMP END MASTER 1506 1513 ENDIF -
LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/test_period.F
r774 r1114 3 3 ! 4 4 SUBROUTINE test_period ( ucov, vcov, teta, q, p, phis ) 5 USE infotrac, ONLY : nqtot 5 6 c 6 7 c Auteur : P. Le Van … … 17 18 c 18 19 REAL ucov(ip1jmp1,llm), vcov(ip1jm,llm), teta(ip1jmp1,llm) , 19 , q(ip1jmp1,llm,nq mx), p(ip1jmp1,llmp1), phis(ip1jmp1)20 , q(ip1jmp1,llm,nqtot), p(ip1jmp1,llmp1), phis(ip1jmp1) 20 21 c 21 22 c ..... Variables locales ..... … … 68 69 69 70 c 70 DO nq =1, nq mx71 DO nq =1, nqtot 71 72 DO l =1, llm 72 73 DO ij = 1, ip1jmp1, iip1 -
LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/vlspltgen_p.F
r985 r1114 26 26 USE Write_Field_p 27 27 USE VAMPIR 28 USE infotrac, ONLY : nqtot 28 29 IMPLICIT NONE 29 30 … … 38 39 c Arguments: 39 40 c ---------- 40 INTEGER iadv(nq mx)41 INTEGER iadv(nqtot) 41 42 REAL masse(ip1jmp1,llm),pente_max 42 43 REAL pbaru( ip1jmp1,llm ),pbarv( ip1jm,llm) 43 REAL q(ip1jmp1,llm,nq mx)44 REAL q(ip1jmp1,llm,nqtot) 44 45 REAL w(ip1jmp1,llm),pdt 45 46 REAL p(ip1jmp1,llmp1),teta(ip1jmp1,llm),pk(ip1jmp1,llm) … … 51 52 c 52 53 REAL,SAVE :: qsat(ip1jmp1,llm) 53 REAL, SAVE :: zm(ip1jmp1,llm,nqmx)54 REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: zm 54 55 REAL,SAVE :: mu(ip1jmp1,llm) 55 56 REAL,SAVE :: mv(ip1jm,llm) 56 57 REAL,SAVE :: mw(ip1jmp1,llm+1) 57 REAL, SAVE :: zq(ip1jmp1,llm,nqmx)58 REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: zq 58 59 REAL zzpbar, zzw 59 60 … … 67 68 REAL tempe(ip1jmp1) 68 69 INTEGER ijb,ije,iq 70 LOGICAL, SAVE :: firstcall=.TRUE. 71 69 72 type(request) :: MyRequest1 70 73 type(request) :: MyRequest2 … … 83 86 retv = 0.6077667 84 87 rtt = 273.16 88 89 c Allocate variables depending on dynamic variable nqtot 90 IF (firstcall) THEN 91 firstcall=.FALSE. 92 ALLOCATE(zm(ip1jmp1,llm,nqtot)) 93 ALLOCATE(zq(ip1jmp1,llm,nqtot)) 94 END IF 85 95 86 96 c-- Calcul de Qsat en chaque point … … 164 174 ije=ij_end 165 175 166 DO iq=1,nq mx176 DO iq=1,nqtot 167 177 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 168 178 DO l=1,llm … … 175 185 176 186 c$OMP BARRIER 177 DO iq=1,nq mx187 DO iq=1,nqtot 178 188 179 189 if(iadv(iq) == 0) then … … 245 255 c$OMP END MASTER 246 256 c$OMP BARRIER 247 do iq=1,nq mx257 do iq=1,nqtot 248 258 249 259 if(iadv(iq) == 0) then … … 285 295 c$OMP BARRIER 286 296 287 do iq=1,nq mx297 do iq=1,nqtot 288 298 289 299 if(iadv(iq) == 0) then … … 308 318 309 319 310 do iq=1,nq mx320 do iq=1,nqtot 311 321 312 322 if(iadv(iq) == 0) then … … 359 369 360 370 c$OMP BARRIER 361 do iq=1,nq mx371 do iq=1,nqtot 362 372 363 373 if(iadv(iq) == 0) then … … 398 408 399 409 400 do iq=1,nq mx410 do iq=1,nqtot 401 411 402 412 if(iadv(iq) == 0) then … … 420 430 enddo 421 431 422 do iq=1,nq mx432 do iq=1,nqtot 423 433 424 434 if(iadv(iq) == 0) then … … 450 460 451 461 452 DO iq=1,nq mx462 DO iq=1,nqtot 453 463 454 464 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) -
LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/write_grads_dyn.h
r774 r1114 24 24 string10='teta' 25 25 CALL wrgrads(1,llm,teta,string10,string10) 26 do iq=1,nq mx26 do iq=1,nqtot 27 27 string10='q' 28 28 write(string10(2:2),'(i1)') iq -
LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/writedynav_p.F
r1000 r1114 2 2 ! $Header$ 3 3 ! 4 subroutine writedynav_p( histid, nq,time, vcov,4 subroutine writedynav_p( histid, time, vcov, 5 5 , ucov,teta,ppk,phi,q,masse,ps,phis) 6 6 … … 8 8 USE parallel 9 9 USE misc_mod 10 USE infotrac 10 11 implicit none 11 12 … … 17 18 C Entree: 18 19 C histid: ID du fichier histoire 19 C nqmx: nombre maxi de traceurs20 20 C time: temps de l'ecriture 21 21 C vcov: vents v covariants … … 47 47 #include "description.h" 48 48 #include "serre.h" 49 #include "advtrac.h"50 49 51 50 C … … 53 52 C 54 53 55 INTEGER histid , nq54 INTEGER histid 56 55 REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm) 57 56 REAL teta(ip1jmp1,llm),phi(ip1jmp1,llm),ppk(ip1jmp1,llm) 58 57 REAL ps(ip1jmp1),masse(ip1jmp1,llm) 59 58 REAL phis(ip1jmp1) 60 REAL q(ip1jmp1,llm,nq )59 REAL q(ip1jmp1,llm,nqtot) 61 60 integer time 62 61 … … 139 138 C Traceurs 140 139 C 141 DO iq=1,nq 140 DO iq=1,nqtot 142 141 call histwrite(histid, ttext(iq), itau_w, q(ijb:ije,:,iq), 143 142 . iip1*jjn*llm, ndex3d) -
LMDZ4/branches/LMDZ4-dev/libf/dyn3dpar/writehist_p.F
r1000 r1114 2 2 ! $Header$ 3 3 ! 4 subroutine writehist_p( histid, histvid, nq,time, vcov,4 subroutine writehist_p( histid, histvid, time, vcov, 5 5 , ucov,teta,phi,q,masse,ps,phis) 6 6 … … 8 8 USE parallel 9 9 USE misc_mod 10 USE infotrac 10 11 implicit none 11 12 … … 18 19 C histid: ID du fichier histoire 19 20 C histvid:ID du fichier histoire pour les vents V (appele a disparaitre) 20 C nqmx: nombre maxi de traceurs21 21 C time: temps de l'ecriture 22 22 C vcov: vents v covariants … … 48 48 #include "description.h" 49 49 #include "serre.h" 50 #include "advtrac.h"51 50 52 51 C … … 54 53 C 55 54 56 INTEGER histid, nq,histvid55 INTEGER histid, histvid 57 56 REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm) 58 57 REAL teta(ip1jmp1,llm),phi(ip1jmp1,llm) 59 58 REAL ps(ip1jmp1),masse(ip1jmp1,llm) 60 59 REAL phis(ip1jmp1) 61 REAL q(ip1jmp1,llm,nq )60 REAL q(ip1jmp1,llm,nqtot) 62 61 integer time 63 62 … … 119 118 C Traceurs 120 119 C 121 DO iq=1,nq 120 DO iq=1,nqtot 122 121 call histwrite(histid, ttext(iq), itau_w, q(ijb:ije,:,iq), 123 122 . iip1*jjn*llm, ndexu) -
LMDZ4/branches/LMDZ4-dev/libf/grid/dimension/makdim
r795 r1114 1 nqmx=$12 shift3 1 for i in $* ; do 4 2 list=$list.$i 5 3 done 6 fichdim=dimensions${list} .t${nqmx}4 fichdim=dimensions${list} 7 5 8 6 if [ ! -f $fichdim ] ; then … … 53 51 ! dimensions.h contient les dimensions du modele 54 52 ! ndm est tel que iim=2**ndm 55 ! nqmx est la dimension de la variable traceur q56 53 !----------------------------------------------------------------------- 57 54 … … 59 56 60 57 PARAMETER (iim= $im,jjm=$jm,llm=$lm,ndm=$ndm) 61 62 integer nqmx63 parameter (nqmx=$nqmx)64 58 65 59 !----------------------------------------------------------------------- -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/concvl.F
r987 r1114 25 25 c 26 26 USE dimphy 27 USE infotrac, ONLY : nbtr 27 28 IMPLICIT none 28 29 c====================================================================== … … 67 68 c 68 69 #include "dimensions.h" 69 cccccc#include "dimphy.h"70 c71 integer NTRAC72 PARAMETER (NTRAC=nqmx-2)73 70 c 74 71 INTEGER iflag_con,iflag_clos … … 77 74 REAL t(klon,klev),q(klon,klev),u(klon,klev),v(klon,klev) 78 75 REAL t_wake(klon,klev),q_wake(klon,klev) 79 REAL tra(klon,klev,n trac)76 REAL tra(klon,klev,nbtr) 80 77 INTEGER ntra 81 78 REAL work1(klon,klev),work2(klon,klev),ptop2(klon) … … 85 82 REAL d_t(klon,klev),d_q(klon,klev),d_u(klon,klev),d_v(klon,klev) 86 83 REAL dd_t(klon,klev),dd_q(klon,klev) 87 REAL d_tra(klon,klev,n trac)84 REAL d_tra(klon,klev,nbtr) 88 85 REAL rain(klon),snow(klon) 89 86 c -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/conema3.F
r766 r1114 10 10 11 11 USE dimphy 12 USE infotrac, ONLY : nbtr 12 13 IMPLICIT none 13 14 c====================================================================== … … 55 56 c 56 57 #include "dimensions.h" 57 cym#include "dimphy.h"58 58 #include "conema3.h" 59 59 INTEGER i, l,m,itra 60 INTEGER ntra ,ntrac !number of tracers;if no tracer transport60 INTEGER ntra ! if no tracer transport 61 61 ! is needed, set ntra = 1 (or 0) 62 PARAMETER (ntrac=nqmx-2)63 62 REAL dtime 64 63 c … … 97 96 REAL,ALLOCATABLE,SAVE :: em_qs(:) 98 97 c$OMP THREADPRIVATE(em_qs) 99 cym REAL em_u(klev), em_v(klev), em_tra(klev,n trac)98 cym REAL em_u(klev), em_v(klev), em_tra(klev,nbtr) 100 99 REAL,ALLOCATABLE,SAVE :: em_u(:),em_v(:),em_tra(:,:) 101 100 c$OMP THREADPRIVATE(em_u,em_v,em_tra) … … 111 110 REAL,ALLOCATABLE,SAVE :: em_d_t(:),em_d_q(:) 112 111 c$OMP THREADPRIVATE(em_d_t,em_d_q) 113 cym REAL em_d_u(klev), em_d_v(klev), em_d_tra(klev,n trac)112 cym REAL em_d_u(klev), em_d_v(klev), em_d_tra(klev,nbtr) 114 113 REAL,ALLOCATABLE,SAVE ::em_d_u(:),em_d_v(:),em_d_tra(:,:) 115 114 c$OMP THREADPRIVATE(em_d_u,em_d_v,em_d_tra) … … 188 187 allocate(em_q(klev)) 189 188 allocate(em_qs(klev)) 190 allocate(em_u(klev), em_v(klev), em_tra(klev,n trac))189 allocate(em_u(klev), em_v(klev), em_tra(klev,nbtr)) 191 190 allocate(em_ph(klev+1), em_p(klev)) 192 191 allocate(em_work1(klev), em_work2(klev)) 193 192 allocate(em_d_t(klev), em_d_q(klev)) 194 allocate(em_d_u(klev), em_d_v(klev), em_d_tra(klev,n trac))193 allocate(em_d_u(klev), em_d_v(klev), em_d_tra(klev,nbtr)) 195 194 allocate(em_upwd(klev), em_dnwd(klev), em_dnwdbis(klev)) 196 195 allocate(emmip(klev)) -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/conemav.F
r766 r1114 10 10 c 11 11 USE dimphy 12 USE infotrac, ONLY : nbtr 12 13 IMPLICIT none 13 14 c====================================================================== … … 44 45 c 45 46 #include "dimensions.h" 46 cym#include "dimphy.h"47 47 c 48 integer NTRAC49 PARAMETER (NTRAC=nqmx-2)50 48 c 51 49 REAL dtime, paprs(klon,klev+1),pplay(klon,klev) 52 50 REAL t(klon,klev),q(klon,klev),u(klon,klev),v(klon,klev) 53 REAL tra(klon,klev,n trac)51 REAL tra(klon,klev,nbtr) 54 52 INTEGER ntra 55 53 REAL work1(klon,klev),work2(klon,klev) 56 54 c 57 55 REAL d_t(klon,klev),d_q(klon,klev),d_u(klon,klev),d_v(klon,klev) 58 REAL d_tra(klon,klev,n trac)56 REAL d_tra(klon,klev,nbtr) 59 57 REAL rain(klon),snow(klon) 60 58 c … … 74 72 INTEGER i,k,itra 75 73 REAL qs(klon,klev) 76 cym REAL cbmf(klon)77 cym SAVE cbmf78 74 REAL,ALLOCATABLE,SAVE :: cbmf(:) 79 75 c$OMP THREADPRIVATE(cbmf) -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/convect3.F
r766 r1114 19 19 c################################################################# 20 20 USE dimphy 21 USE infotrac, ONLY : NBTR 21 22 22 23 #include "dimensions.h" 23 cym#include "dimphy.h" 24 INTEGER NA 24 25 PARAMETER (NA=60) 25 26 26 integer NTRAC27 PARAMETER (NTRAC=nqmx-2)28 27 REAL DELTAC ! cld 29 28 PARAMETER (DELTAC=0.01) ! cld 30 29 31 30 INTEGER NENT(NA) 31 INTEGER ND, NDP1, NL, NTRA, IFLAG, icb, inb 32 REAL DTIME, EPMAX, DELT, PRECIP, CAPE 33 REAL DPLCLDT, DPLCLDR 32 34 REAL T1(ND),R1(ND),RS(ND),U(ND),V(ND),TRA(ND,NTRA) 33 35 REAL P(ND),PH(NDP1) 34 36 REAL FT(ND),FR(ND),FU(ND),FV(ND),FTRA(ND,NTRA) 35 37 REAL SIG(ND),W0(ND) 36 REAL UENT(NA,NA),VENT(NA,NA),TRAENT(NA,NA,N TRAC),TRATM(NA)37 REAL UP(NA),VP(NA),TRAP(NA,N TRAC)38 REAL UENT(NA,NA),VENT(NA,NA),TRAENT(NA,NA,NBTR),TRATM(NA) 39 REAL UP(NA),VP(NA),TRAP(NA,NBTR) 38 40 REAL M(NA),MP(NA),MENT(NA,NA),QENT(NA,NA),ELIJ(NA,NA) 39 41 REAL SIJ(NA,NA),TVP(NA),TV(NA),WATER(NA) -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/dimphy.F90
r776 r1114 5 5 INTEGER,SAVE :: kfdia 6 6 INTEGER,SAVE :: kidia 7 INTEGER,SAVE :: nbtr8 7 INTEGER,SAVE :: klev 9 8 INTEGER,SAVE :: klevp1 … … 17 16 CONTAINS 18 17 19 SUBROUTINE Init_dimphy(klon0,klev0 ,nbtr0)18 SUBROUTINE Init_dimphy(klon0,klev0) 20 19 IMPLICIT NONE 21 20 22 21 INTEGER, INTENT(in) :: klon0 23 22 INTEGER, INTENT(in) :: klev0 24 INTEGER, INTENT(in) :: nbtr025 23 26 24 klon=klon0 … … 31 29 !$OMP MASTER 32 30 klev=klev0 33 nbtr=nbtr034 31 klevp1=klev+1 35 32 klevm1=klev-1 -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/ini_histrac.h
r1030 r1114 23 23 . iim,jj_nb,nhori, 1,1,1, -99, 32, 24 24 . "once", zsto,zout) 25 DO it=1,n qmax25 DO it=1,nbtr 26 26 C champ 2D 27 27 iq=it+2 28 28 iiq=niadv(iq) 29 CALL histdef(nid_tra, tn om(iq), ttext(iiq), "U/kga",29 CALL histdef(nid_tra, tname(iiq), ttext(iiq), "U/kga", 30 30 . iim,jj_nb,nhori, klev,1,klev,nvert, 32, 31 31 . "ave(X)", zsto,zout) 32 32 if (lessivage) THEN 33 CALL histdef(nid_tra, "fl"//tn om(iq),"Flux "//ttext(iiq),33 CALL histdef(nid_tra, "fl"//tname(iiq),"Flux "//ttext(iiq), 34 34 . "U/m2/s",iim,jj_nb,nhori, klev,1,klev,nvert, 32, 35 35 . "ave(X)", zsto,zout) … … 37 37 38 38 c---Ajout Olivia 39 CALL histdef(nid_tra, "d_tr_th_"//tn om(iq),39 CALL histdef(nid_tra, "d_tr_th_"//tname(iiq), 40 40 . "tendance thermique"// ttext(iiq), "?", 41 41 . iim,jj_nb,nhori, klev,1,klev,nvert, 32, … … 43 43 c 44 44 if(iflag_con.GE.2) then 45 CALL histdef(nid_tra, "d_tr_cv_"//tn om(iq),45 CALL histdef(nid_tra, "d_tr_cv_"//tname(iiq), 46 46 . "tendance convection"// ttext(iiq), "?", 47 47 . iim,jj_nb,nhori, klev,1,klev,nvert, 32, 48 48 . "ave(X)", zsto,zout) 49 49 endif !(iflag_con.GE.2) then 50 CALL histdef(nid_tra, "d_tr_cl_"//tn om(iq),50 CALL histdef(nid_tra, "d_tr_cl_"//tname(iiq), 51 51 . "tendance couche limite"// ttext(iiq), "?", 52 52 . iim,jj_nb,nhori, klev,1,klev,nvert, 32, -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/init_phys_lmdz.F90
r775 r1114 2 2 !$Header$ 3 3 ! 4 SUBROUTINE Init_Phys_lmdz(iim,jjp1,llm,nb tr,nb_proc,distrib)4 SUBROUTINE Init_Phys_lmdz(iim,jjp1,llm,nb_proc,distrib) 5 5 USE mod_phys_lmdz_para 6 6 USE mod_grid_phy_lmdz … … 11 11 INTEGER,INTENT(in) :: jjp1 12 12 INTEGER,INTENT(in) :: llm 13 INTEGER,INTENT(in) :: nbtr14 13 INTEGER,INTENT(in) :: nb_proc 15 14 INTEGER,INTENT(in) :: distrib(0:nb_proc-1) … … 19 18 CALL Init_phys_lmdz_para(iim,jjp1,nb_proc,distrib) 20 19 !$OMP PARALLEL 21 CALL Init_dimphy(klon_omp,nbp_lev ,nbtr)20 CALL Init_dimphy(klon_omp,nbp_lev) 22 21 !$OMP END PARALLEL 23 22 -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/initrrnpb.F
r766 r1114 5 5 . ,vdeptr,scavtr) 6 6 USE dimphy 7 USE infotrac, ONLY : nbtr 7 8 IMPLICIT none 8 9 c====================================================================== -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/phys_local_var_mod.F90
r1054 r1114 71 71 SUBROUTINE phys_local_var_init 72 72 use dimphy 73 use infotrac, ONLY : nbtr 73 74 IMPLICIT NONE 74 75 #include "indicesol.h" -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/phys_output_mod.F90
r1095 r1114 430 430 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 431 431 432 SUBROUTINE phys_output_open(jjmp1,n qmax,nlevSTD,clevSTD,nbteta, &432 SUBROUTINE phys_output_open(jjmp1,nlevSTD,clevSTD,nbteta, & 433 433 ctetaSTD,dtime, presnivs, ok_veget, & 434 434 ocean, iflag_pbl,ok_mensuel,ok_journe, & … … 437 437 USE iophy 438 438 USE dimphy 439 USE infotrac 439 440 USE ioipsl 440 441 USE mod_phys_lmdz_para … … 444 445 include "temps.h" 445 446 include "indicesol.h" 446 include "advtrac.h"447 447 include "clesphys.h" 448 448 include "thermcell.h" 449 449 450 integer :: jjmp1 , nqmax450 integer :: jjmp1 451 451 integer :: nbteta, nlevSTD, radpas 452 452 logical :: ok_mensuel, ok_journe, ok_hf, ok_instan … … 907 907 ENDIF 908 908 909 if (nq max>=3) THEN910 !Attention DO iq=3,nq max909 if (nqtot>=3) THEN 910 !Attention DO iq=3,nqtot 911 911 DO iq=3,4 912 912 iiq=niadv(iq) … … 937 937 include "temps.h" 938 938 include "indicesol.h" 939 include "advtrac.h"940 939 include "clesphys.h" 941 940 … … 968 967 include "temps.h" 969 968 include "indicesol.h" 970 include "advtrac.h"971 969 include "clesphys.h" 972 970 -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/phys_output_write.h
r1095 r1114 1192 1192 1193 1193 ! IF (o_trac%flag(iff)<=lev_files(iff)) THEN 1194 if (nq max.GE.3) THEN1195 ! DO iq=3,nq max1194 if (nqtot.GE.3) THEN 1195 ! DO iq=3,nqtot 1196 1196 DO iq=3,4 1197 1197 IF (o_trac(iq-2)%flag(iff)<=lev_files(iff)) THEN -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/physiq.F
r1102 r1114 2 2 c#define IO_DEBUG 3 3 4 SUBROUTINE physiq (nlon,nlev, nqmax,4 SUBROUTINE physiq (nlon,nlev, 5 5 . debut,lafin,rjourvrai,gmtime,pdtphys, 6 6 . paprs,pplay,pphi,pphis,presnivs,clesphy0, … … 15 15 USE write_field_phy 16 16 USE dimphy 17 USE infotrac 17 18 USE mod_grid_phy_lmdz 18 19 USE mod_phys_lmdz_para … … 50 51 c nlon----input-I-nombre de points horizontaux 51 52 c nlev----input-I-nombre de couches verticales 52 c nqmax---input-I-nombre de traceurs (y compris vapeur d'eau) = 153 53 c debut---input-L-variable logique indiquant le premier passage 54 54 c lafin---input-L-variable logique indiquant le dernier passage … … 87 87 #include "clesphys.h" 88 88 #include "control.h" 89 !#include "logic.h"90 89 #include "temps.h" 91 cym#include "comgeomphy.h"92 #include "advtrac.h"93 90 #include "iniprint.h" 94 91 #include "thermcell.h" … … 184 181 INTEGER nlon 185 182 INTEGER nlev 186 INTEGER nqmax187 183 REAL rjourvrai 188 184 REAL gmtime … … 200 196 REAL v(klon,klev) 201 197 REAL t(klon,klev),theta(klon,klev) 202 REAL qx(klon,klev,nq max)198 REAL qx(klon,klev,nqtot) 203 199 REAL flxmass_w(klon,klev) 204 200 REAL omega(klon,klev) ! vitesse verticale en Pa/s … … 206 202 REAL d_v(klon,klev) 207 203 REAL d_t(klon,klev) 208 REAL d_qx(klon,klev,nq max)204 REAL d_qx(klon,klev,nqtot) 209 205 REAL d_ps(klon) 210 206 real da(klon,klev),phi(klon,klev,klev),mp(klon,klev) … … 1110 1106 write(lunout,*) 'DEBUT DE PHYSIQ !!!!!!!!!!!!!!!!!!!!' 1111 1107 write(lunout,*) 1112 s 'nlon,nlev,nq max,debut,lafin,rjourvrai,gmtime,pdtphys'1108 s 'nlon,nlev,nqtot,debut,lafin,rjourvrai,gmtime,pdtphys' 1113 1109 write(lunout,*) 1114 s nlon,nlev,nq max,debut,lafin,rjourvrai,gmtime,pdtphys1110 s nlon,nlev,nqtot,debut,lafin,rjourvrai,gmtime,pdtphys 1115 1111 1116 1112 write(lunout,*) 'papers, play, phi, u, v, t, omega' … … 1170 1166 END IF 1171 1167 ok_sync=.TRUE. 1172 IF (nqmax .LT. 2) THEN 1173 abort_message = 'eaux vapeur et liquide sont indispensables' 1174 CALL abort_gcm (modname,abort_message,1) 1175 ENDIF 1168 1176 1169 IF (debut) THEN 1177 1170 CALL suphel ! initialiser constantes et parametres phys. … … 1500 1493 1501 1494 c$OMP MASTER 1502 call phys_output_open(jjmp1,n qmax,nlevSTD,clevSTD,nbteta,1495 call phys_output_open(jjmp1,nlevSTD,clevSTD,nbteta, 1503 1496 & ctetaSTD,dtime,presnivs,ok_veget, 1504 1497 & type_ocean,iflag_pbl,ok_mensuel,ok_journe, … … 1554 1547 $ calday, 1555 1548 $ klon, 1556 $ nq max,1549 $ nqtot, 1557 1550 $ pdtphys, 1558 1551 $ annee_ref, … … 1610 1603 ENDDO 1611 1604 ENDDO 1612 DO iq = 1, nq max1605 DO iq = 1, nqtot 1613 1606 DO k = 1, klev 1614 1607 DO i = 1, klon … … 1633 1626 ENDDO 1634 1627 ENDDO 1635 IF (nq max.GE.3) THEN1636 DO iq = 3, nq max1628 IF (nqtot.GE.3) THEN 1629 DO iq = 3, nqtot 1637 1630 DO k = 1, klev 1638 1631 DO i = 1, klon … … 3163 3156 I debut, 3164 3157 I lafin, 3165 I nqmax-2,3166 3158 I nlon, 3167 3159 I nlev, … … 3386 3378 ENDDO 3387 3379 c 3388 IF (nq max.GE.3) THEN3389 DO iq = 3, nq max3380 IF (nqtot.GE.3) THEN 3381 DO iq = 3, nqtot 3390 3382 DO k = 1, klev 3391 3383 DO i = 1, klon … … 3421 3413 write(lunout,*) 'FIN DE PHYSIQ !!!!!!!!!!!!!!!!!!!!' 3422 3414 write(lunout,*) 3423 s 'nlon,nlev,nq max,debut,lafin,rjourvrai,gmtime,pdtphys pct tlos'3415 s 'nlon,nlev,nqtot,debut,lafin,rjourvrai,gmtime,pdtphys pct tlos' 3424 3416 write(lunout,*) 3425 s nlon,nlev,nq max,debut,lafin,rjourvrai,gmtime,pdtphys,3417 s nlon,nlev,nqtot,debut,lafin,rjourvrai,gmtime,pdtphys, 3426 3418 s pctsrf(igout,is_ter), pctsrf(igout,is_lic),pctsrf(igout,is_oce), 3427 3419 s pctsrf(igout,is_sic) -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/phystokenc.F
r1067 r1114 11 11 USE ioipsl 12 12 USE dimphy 13 USE infotrac, ONLY : nqtot 13 14 USE iophy 14 15 IMPLICIT none … … 21 22 c====================================================================== 22 23 #include "dimensions.h" 23 cym#include "dimphy.h"24 24 #include "tracstoke.h" 25 25 #include "indicesol.h" … … 160 160 161 161 CALL initphysto('phystoke', 162 . rlon,rlat,dtime, dtime*istphy,dtime*istphy,nq mx,physid)162 . rlon,rlat,dtime, dtime*istphy,dtime*istphy,nqtot,physid) 163 163 164 164 write(*,*) 'apres initphysto ds phystokenc' -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/phytrac.F
r1067 r1114 8 8 I debutphy, 9 9 I lafin, 10 I nqmax,11 10 I nlon, 12 11 I nlev, … … 67 66 USE ioipsl 68 67 USE dimphy 68 USE infotrac 69 69 USE mod_grid_phy_lmdz 70 70 USE mod_phys_lmdz_para … … 80 80 cAA Remarques en vrac: 81 81 cAA-------------------- 82 cAA 1/ le call phytrac se fait avec nqmax-2 donc nous avons bien83 cAA les vrais traceurs (nbtr) dans phytrac (pas la vapeur ni eau liquide)84 82 cAA 2/ Le choix du radon et du pb se fait juste avec un data 85 83 cAA (peu propre). Peut-etre pourrait-on prevoir dans l'avenir … … 93 91 #include "paramet.h" 94 92 #include "control.h" 95 #include "advtrac.h"96 93 #include "thermcell.h" 97 94 c====================================================================== … … 107 104 integer nlon ! nombre de points horizontaux 108 105 integer nlev ! nombre de couches verticales 109 integer nqmax ! nombre de traceurs auxquels on applique la physique110 106 integer nstep ! appel physique 111 107 integer julien !jour julien … … 140 136 141 137 REAL flxmass_w(klon,klev) 142 CHARACTER(len=8) :: solsym(n qmax)138 CHARACTER(len=8) :: solsym(nbtr) 143 139 integer la 144 140 REAL :: tau_inca(klon,klev,9,2) … … 209 205 cAA Pour l'instant seuls les cas du rn et du pb ont ete envisages. 210 206 211 REAL source(klon,n qmax) ! a voir lorsque le flux est prescrit207 REAL source(klon,nbtr) ! a voir lorsque le flux est prescrit 212 208 cAA 213 209 cAA Pour la source de radon et son reservoir de sol … … 216 212 REAL,save,allocatable :: trs(:,:) ! Conc. radon ds le sol 217 213 c$OMP THREADPRIVATE(trs) 218 cym SAVE trs219 214 REAL :: trs_tmp(klon_glo) 220 215 … … 223 218 c (1 = reservoir) ou (possible => 1 ) 224 219 c$OMP THREADPRIVATE(masktr) 225 cym SAVE masktr226 220 REAL,save,allocatable :: fshtr(:,:) ! Flux surfacique dans le reservoir de sol 227 221 c$OMP THREADPRIVATE(fshtr) 228 cym SAVE fshtr229 222 REAL,save,allocatable :: hsoltr(:) ! Epaisseur equivalente du reservoir de sol 230 223 c$OMP THREADPRIVATE(hsoltr) 231 cym SAVE hsoltr232 224 REAL,save,allocatable :: tautr(:) ! Constante de decroissance radioactive 233 225 c$OMP THREADPRIVATE(tautr) 234 cym SAVE tautr235 226 REAL,save,allocatable :: vdeptr(:) ! Vitesse de depot sec dans la couche Brownienne 236 227 c$OMP THREADPRIVATE(vdeptr) 237 cym SAVE vdeptr238 228 REAL,save,allocatable :: scavtr(:) ! Coefficient de lessivage 239 229 c$OMP THREADPRIVATE(scavtr) 240 cym SAVE scavtr241 230 cAA 242 231 CHARACTER*2 itn … … 270 259 logical,save,allocatable :: radio(:) ! radio(it)=true => decroisssance radioactive 271 260 c$OMP THREADPRIVATE(aerosol,clsol,radio) 272 cym save aerosol,clsol,radio273 261 C 274 262 c====================================================================== … … 360 348 print*,'dans phytrac ',pdtphys,ecrit_tra 361 349 362 if(nbtr.lt.nqmax) then363 c print*,'NQMAX=',nqmax364 c print*,'NBTR=',nbtr365 abort_message='See above'366 call abort_gcm(modname,abort_message,1)367 endif368 369 350 inirnpb=rnpb 370 351 PRINT*, 'La frequence de sortie traceurs est ', ecrit_tra … … 406 387 c Initialisation de la nature des traceurs 407 388 c 408 DO it = 1, n qmax389 DO it = 1, nbtr 409 390 aerosol(it) = .FALSE. ! Tous les traceurs sont des gaz par defaut 410 391 radio(it) = .FALSE. ! Par defaut pas de passage par radiornpb … … 533 514 c====================================================================== 534 515 c print*,'Avant convection' 535 do it=1,n qmax516 do it=1,nbtr 536 517 WRITE(itn,'(i2)') it 537 518 c call diagtracphy(tr_seri(:,:,it),paprs,'Avant conv'//itn) … … 541 522 542 523 c print*,'Pas de temps dans phytrac : ',pdtphys 543 DO it=1, nqmax 544 545 IF ( config_inca/='none' .AND. conv_flg(it) == 0 ) CYCLE 524 DO it=1, nbtr 525 526 IF ( config_inca/='none') THEN 527 IF ( conv_flg(it) == 0 ) CYCLE 528 END IF 546 529 547 530 if (iflag_con.lt.2) then … … 574 557 endif ! convection 575 558 c print*,'Apres convection' 576 c do it=1,n qmax559 c do it=1,nbtr 577 560 c WRITE(itn,'(i1)') it 578 561 c call diagtracphy(tr_seri(:,:,it),paprs,'Avant conv'//itn) … … 591 574 592 575 c print*,'masse dans ph ',zmasse 593 do it=1,n qmax576 do it=1,nbtr 594 577 do k=1,klev 595 578 do i=1,klon … … 604 587 c print*,'calcul de leffet des thermiques' 605 588 nsplit=10 606 DO it=1, n qmax589 DO it=1, nbtr 607 590 c WRITE(itn,'(i1)') it 608 591 c CALL minmaxqfi(tr_seri(1,1,it),1.e10,-1.e33,'conv it='//itn) … … 642 625 c====================================================================== 643 626 c print *,'Avant couchelimite' 644 c do it=1,n qmax627 c do it=1,nbtr 645 628 c WRITE(itn,'(i1)') it 646 629 c call diagtracphy(tr_seri(:,:,it),paprs,'Avant CL '//itn) … … 656 639 657 640 C maf modif pour tenir compte du cas rnpb + traceur 658 DO it=1, nqmax 659 660 IF ( config_inca/='none' .AND. pbl_flg(it) == 0 ) CYCLE 641 DO it=1, nbtr 642 643 IF ( config_inca/='none' ) THEN 644 IF( pbl_flg(it) == 0 ) CYCLE 645 END IF 661 646 662 647 c print *,'it',it,clsol(it) … … 711 696 712 697 c print*,'Apres couchelimite' 713 c do it=1,n qmax698 c do it=1,nbtr 714 699 c WRITE(itn,'(i1)') it 715 700 c call diagtracphy(tr_seri(:,:,it),paprs,'Avant CL '//itn) … … 726 711 call radiornpb (tr_seri,pdtphys,tautr,d_tr_dec) 727 712 C 728 DO it=1,n qmax713 DO it=1,nbtr 729 714 if(radio(it)) then 730 715 DO k = 1, nlev … … 755 740 c tendance des aerosols nuclees et impactes 756 741 c 757 DO it = 1, n qmax742 DO it = 1, nbtr 758 743 IF (aerosol(it)) THEN 759 744 DO k = 1, nlev … … 774 759 c call dump2d(iim,jjm-1,frac_nucl(2:klon-1,10),'FRACNUCL') 775 760 c call dump2d(iim,jjm-1,tr_seri(2:klon-1,10,3),'TRACEUR3') 776 DO it = 1, n qmax761 DO it = 1, nbtr 777 762 c print*,'IT=',it,aerosol(it) 778 763 IF (aerosol(it)) THEN … … 790 775 c Flux lessivage total 791 776 c 792 DO it = 1, n qmax777 DO it = 1, nbtr 793 778 DO k = 1, nlev 794 779 DO i = 1, klon -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/radiornpb.F
r776 r1114 4 4 SUBROUTINE radiornpb(tr,dtime,tautr,d_tr) 5 5 USE dimphy 6 USE infotrac, ONLY : nbtr 6 7 IMPLICIT none 7 8 c====================================================================== -
LMDZ4/branches/LMDZ4-dev/libf/phylmd/write_histrac.h
r1030 r1114 14 14 CALL histwrite_phy(nid_tra,"aire",itau_w,airephy) 15 15 16 DO it=1,n qmax17 C champs 2D 16 DO it=1,nbtr 17 iiq=niadv(it+2) 18 18 19 20 CALL histwrite_phy(nid_tra,tnom(it+2),itau_w,tr_seri(:,:,it)) 19 CALL histwrite_phy(nid_tra,tname(iiq),itau_w,tr_seri(:,:,it)) 21 20 if (lessivage) THEN 22 CALL histwrite_phy(nid_tra,"fl"//tn om(it+2),itau_w,21 CALL histwrite_phy(nid_tra,"fl"//tname(iiq),itau_w, 23 22 . flestottr(:,:,it)) 24 23 endif 25 24 26 25 c----Olivia 27 CALL histwrite_phy(nid_tra,"d_tr_th_"//tn om(it+2),itau_w,26 CALL histwrite_phy(nid_tra,"d_tr_th_"//tname(iiq),itau_w, 28 27 . d_tr_th(:,:,it)) 29 28 30 29 if(iflag_con.GE.2) then 31 CALL histwrite_phy(nid_tra,"d_tr_cv_"//tn om(it+2),itau_w,30 CALL histwrite_phy(nid_tra,"d_tr_cv_"//tname(iiq),itau_w, 32 31 . d_tr_cv(:,:,it)) 33 32 endif !(iflag_con.GE.2) then 34 CALL histwrite_phy(nid_tra,"d_tr_cl_"//tn om(it+2),itau_w,33 CALL histwrite_phy(nid_tra,"d_tr_cl_"//tname(iiq),itau_w, 35 34 . d_tr_cl(:,:,it)) 36 35 c---fin Olivia -
LMDZ4/branches/LMDZ4-dev/makegcm
r1018 r1114 11 11 set phys="PHYS=$physique" 12 12 set include='-I$(LIBF)/grid -I$(LIBF)/bibio -I$(LIBF)/filtrez -I. ' 13 set ntrac = 414 13 set filtre=filtrez 15 14 set grille=reg … … 365 364 -d imxjmxlm ou im, jm, et lm sont resp. le nombre de longitudes, latitudes 366 365 et couches verticales. 367 368 -t ntrac selectionne le nombre de traceur advectes par la dynamique. 369 Dans les versions courantes du modele terrestre on a par exemple 370 ntrac=2 pour l'eau vapeur et liquide 371 372 L'effet des options -d et -t est d'ecraser le fichier 366 L'effet des options -d est d'ecraser le fichier 373 367 $LMDGCM/libf/grid/dimensions.h 374 qui contient sous forme de 4 PARAMETER FORTRAN les 3 dimensions 375 de la grille horizontale im, jm, lm plus le nombre de traceurs 376 advectes passivement par la dynamique ntrac, par un nouveu fichier 377 $LMDGCM/libf/grid/dimension/dimensions.im.jm.lm.tntrac 368 qui contient sous forme de 3 PARAMETER FORTRAN les 3 dimensions 369 de la grille horizontale im, jm et verticale lm, par un nouveu fichier 370 $LMDGCM/libf/grid/dimension/dimensions.im.jm.lm 378 371 Si ce fichier n'existe pas encore, il est cree par le script 379 372 $LMDGCM/libf/grid/dimension/makdim … … 472 465 set parallel="$2" ; shift ; shift ; goto top 473 466 474 case -t475 set ntrac=$2 ; shift ; shift ; goto top476 477 467 case -include 478 468 set include="$include -I$2" ; shift ; shift ; goto top … … 584 574 585 575 ######################################################################## 586 # choix du nombre de traceur par defaut si il n'a pas ete choisi,587 # suivant la physique588 ########################################################################589 590 if ( $ntrac == 0 ) then591 if ( "$physique" == 'nophys' ) then592 set ntrac=1593 else if ( "$physique" == 'lmd' ) then594 set ntrac=2595 else if ( "$physique" == 'lmd_test_li' ) then596 set ntrac=2597 else if ( "$physique" == 'ec' ) then598 set ntrac=1599 else600 set ntrac = 1601 endif602 endif603 604 ########################################################################605 576 #subtilites sur le nom de la librairie 606 577 ######################################################################## … … 631 602 set dim=`echo $dim | sed -e 's/[^0-9]/ /g'` 632 603 endif 633 set nomlib=${nomlib}${physique}_${dim_}_ t${ntrac}_$grille604 set nomlib=${nomlib}${physique}_${dim_}_$grille 634 605 ## M-A-F nomlib trop long sur CRAY pour ar 635 606 if ( $CRAY ) then 636 set nomlib=F90_${dim_} _t${ntrac}607 set nomlib=F90_${dim_} 637 608 endif 638 609 if ( $NEC || $XNEC || $X6NEC || $X8BRODIE ) then 639 set nomlib=F90_${dim_}_ t${ntrac}_'phy'${physique}${FLAG_PARA}610 set nomlib=F90_${dim_}_'phy'${physique}${FLAG_PARA} 640 611 endif 641 612 echo calcul de la dimension … … 664 635 ######################################################################## 665 636 # Gestion des dimensions du modele. 666 # on cree ou remplace le fichier des dimensions /nombre de traceur637 # on cree ou remplace le fichier des dimensions 667 638 ######################################################################## 668 639 … … 682 653 683 654 cd dimension 684 ./makdim $ ntrac $dim655 ./makdim $dim 685 656 cat $libf/grid/dimensions.h 686 657 -
LMDZ4/branches/LMDZ4-dev/makegcm_fcm
r1039 r1114 18 18 set dim="96x72x19" 19 19 set physique=lmd 20 set ntrac = 421 20 set filtre=filtrez 22 21 set grille=reg … … 60 59 [-h] : manuel abrégé 61 60 [-d [[IMx]JMx]LM] : IM, JM, LM sont les dims en x, y, z (def: $dim) 62 [-t NTRAC] : nombre de traceurs (def: 4)63 61 [-p PHYS] : compilation avec la physique libf/phyPHYS, (def: lmd) 64 62 [-prod / -dev / -debug] : compilation en mode production (default) / developpement / debug . … … 115 113 set parallel="$2" ; shift ; shift ; goto top 116 114 117 case -t118 set ntrac=$2 ; shift ; shift ; goto top119 120 115 case -include 121 116 set INCLUDE="$INCLUDE -I$2" ; shift ; shift ; goto top … … 211 206 set LIB="$LIB -L${NETCDF_LIBDIR} -lnetcdf" 212 207 213 214 ########################################################################215 # choix du nombre de traceur par defaut si il n'a pas ete choisi,216 # suivant la physique217 ########################################################################218 219 if ( $ntrac == 0 ) then220 if ( "$physique" == 'nophys' ) then221 set ntrac=1222 else if ( "$physique" == 'lmd' ) then223 set ntrac=2224 else if ( "$physique" == 'lmd_test_li' ) then225 set ntrac=2226 else if ( "$physique" == 'ec' ) then227 set ntrac=1228 else229 set ntrac = 1230 endif231 endif232 233 234 208 ######################################################################## 235 209 # calcul du nombre de dimensions … … 248 222 ######################################################################## 249 223 # Gestion des dimensions du modele. 250 # on cree ou remplace le fichier des dimensions /nombre de traceur224 # on cree ou remplace le fichier des dimensions 251 225 ######################################################################## 252 226 253 227 cd $LIBFGCM/grid/dimension 254 ./makdim $ ntrac $dim228 ./makdim $dim 255 229 cat $LIBFGCM/grid/dimensions.h 256 230 cd $LMDGCM … … 314 288 315 289 set SUFF_NAME=_${dim_full} 316 set SUFF_NAME=${SUFF_NAME}_ t${ntrac}_phy${physique}290 set SUFF_NAME=${SUFF_NAME}_phy${physique} 317 291 318 292 if ( "$parallel" != 'none' ) then
Note: See TracChangeset
for help on using the changeset viewer.