Changeset 1279 for LMDZ4/trunk/libf
- Timestamp:
- Dec 10, 2009, 10:02:56 AM (15 years ago)
- Location:
- LMDZ4/trunk
- Files:
-
- 24 deleted
- 141 edited
- 95 copied
Legend:
- Unmodified
- Added
- Removed
-
LMDZ4/trunk
- Property svn:mergeinfo changed
/LMDZ4/branches/LMDZ4-dev merged: 1150-1162,1164-1193,1195-1231,1234-1235,1237-1240,1242-1274,1276
- Property svn:mergeinfo changed
-
LMDZ4/trunk/libf/bibio/initdynav.F
r1146 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 c5 c6 4 subroutine initdynav(infile,day0,anne0,tstep,t_ops,t_wrt 7 5 . ,fileid) 8 6 7 #ifdef CPP_IOIPSL 9 8 USE IOIPSL 9 #endif 10 10 USE infotrac, ONLY : nqtot, ttext 11 11 … … 48 48 #include "description.h" 49 49 #include "serre.h" 50 #include "iniprint.h" 50 51 51 52 C Arguments 52 53 C 53 54 character*(*) infile 54 integer *4day0, anne055 integer day0, anne0 55 56 real tstep, t_ops, t_wrt 56 57 integer fileid 57 integer thoriid, zvertiid58 58 59 #ifdef CPP_IOIPSL 60 ! This routine needs IOIPSL to work 59 61 C Variables locales 60 62 C 63 integer thoriid, zvertiid 61 64 integer tau0 62 65 real zjulian … … 161 164 C 162 165 call histend(fileid) 166 #else 167 ! tell the user this routine should be run with ioipsl 168 write(lunout,*)"initdynav: Warning this routine should not be", 169 & " used without ioipsl" 170 #endif 171 ! of #ifdef CPP_IOIPSL 163 172 return 164 173 end -
LMDZ4/trunk/libf/bibio/initfluxsto.F
r1146 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 subroutine initfluxsto … … 6 6 . fileid,filevid,filedid) 7 7 8 #ifdef CPP_IOIPSL 8 9 USE IOIPSL 9 10 #endif 10 11 implicit none 11 12 … … 47 48 #include "description.h" 48 49 #include "serre.h" 50 #include "iniprint.h" 49 51 50 52 C Arguments 51 53 C 52 54 character*(*) infile 53 integer*4 itau54 55 real tstep, t_ops, t_wrt 55 56 integer fileid, filevid,filedid 56 integer ndex(1) 57 58 #ifdef CPP_IOIPSL 59 ! This routine needs IOIPSL to work 60 C Variables locales 61 C 57 62 real nivd(1) 58 59 C Variables locales60 C61 63 integer tau0 62 64 real zjulian … … 222 224 endif 223 225 226 #else 227 ! tell the user this routine should be run with ioipsl 228 write(lunout,*)"initfluxsto: Warning this routine should not be", 229 & " used without ioipsl" 230 #endif 231 ! of #ifdef CPP_IOIPSL 224 232 return 225 233 end -
LMDZ4/trunk/libf/bibio/inithist.F
r1146 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 subroutine inithist(infile,day0,anne0,tstep,t_ops,t_wrt,fileid, 5 5 . filevid) 6 6 7 #ifdef CPP_IOIPSL 7 8 USE IOIPSL 9 #endif 8 10 USE infotrac, ONLY : nqtot, ttext 9 11 … … 48 50 #include "description.h" 49 51 #include "serre.h" 52 #include "iniprint.h" 50 53 51 54 C Arguments 52 55 C 53 56 character*(*) infile 54 integer *4day0, anne057 integer day0, anne0 55 58 real tstep, t_ops, t_wrt 56 59 integer fileid, filevid 57 60 61 #ifdef CPP_IOIPSL 62 ! This routine needs IOIPSL to work 58 63 C Variables locales 59 64 C … … 181 186 call histend(fileid) 182 187 call histend(filevid) 188 #else 189 ! tell the user this routine should be run with ioipsl 190 write(lunout,*)"inithist: Warning this routine should not be", 191 & " used without ioipsl" 192 #endif 193 ! of #ifdef CPP_IOIPSL 183 194 return 184 195 end -
LMDZ4/trunk/libf/bibio/write_field.F90
r772 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 module write_field … … 72 72 73 73 subroutine WriteField_gen(name,Field,dimx,dimy,dimz) 74 USE ioipsl75 74 implicit none 76 75 include 'netcdf.inc' … … 109 108 110 109 subroutine CreateNewField(name,dimx,dimy,dimz) 111 USE ioipsl112 110 implicit none 113 111 include 'netcdf.inc' … … 229 227 write (id,spacing) 230 228 else 231 write (id,' ')229 write (id,'("")') 232 230 write (id,spacing) 233 231 endif -
LMDZ4/trunk/libf/bibio/writedynav.F
r1146 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 subroutine writedynav( histid, time, vcov, 5 5 , ucov,teta,ppk,phi,q,masse,ps,phis) 6 6 7 #ifdef CPP_IOIPSL 7 8 USE ioipsl 9 #endif 8 10 USE infotrac, ONLY : nqtot, ttext 9 11 implicit none … … 45 47 #include "description.h" 46 48 #include "serre.h" 49 #include "iniprint.h" 47 50 48 51 C … … 59 62 60 63 64 #ifdef CPP_IOIPSL 65 ! This routine needs IOIPSL to work 61 66 C Variables locales 62 67 C … … 138 143 C 139 144 if (ok_sync) call histsync(histid) 145 146 #else 147 ! tell the user this routine should be run with ioipsl 148 write(lunout,*)"writedynav: Warning this routine should not be", 149 & " used without ioipsl" 150 #endif 151 ! of #ifdef CPP_IOIPSL 140 152 return 141 153 end -
LMDZ4/trunk/libf/bibio/writehist.F
r1146 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 subroutine writehist( histid, histvid, time, vcov, 5 5 , ucov,teta,phi,q,masse,ps,phis) 6 6 7 #ifdef CPP_IOIPSL 7 8 USE ioipsl 9 #endif 8 10 USE infotrac, ONLY : nqtot, ttext 9 11 implicit none … … 46 48 #include "description.h" 47 49 #include "serre.h" 50 #include "iniprint.h" 48 51 49 52 C … … 60 63 61 64 65 #ifdef CPP_IOIPSL 66 ! This routine needs IOIPSL to work 62 67 C Variables locales 63 68 C … … 124 129 call histsync(histvid) 125 130 endif 131 #else 132 ! tell the user this routine should be run with ioipsl 133 write(lunout,*)"writehist: Warning this routine should not be", 134 & " used without ioipsl" 135 #endif 136 ! of #ifdef CPP_IOIPSL 126 137 return 127 138 end -
LMDZ4/trunk/libf/dyn3d/abort_gcm.F
r1147 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 c … … 8 8 #ifdef CPP_IOIPSL 9 9 USE IOIPSL 10 #else 11 ! if not using IOIPSL, we still need to use (a local version of) getin_dump 12 USE ioipsl_getincom 10 13 #endif 11 14 #include "iniprint.h" -
LMDZ4/trunk/libf/dyn3d/advtrac.F
r1146 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 c … … 30 30 #include "ener.h" 31 31 #include "description.h" 32 #include "iniprint.h" 32 33 33 34 c------------------------------------------------------------------- … … 74 75 DATA dum/.true./ 75 76 77 integer,save :: countcfl=0 78 real cflx(ip1jmp1,llm) 79 real cfly(ip1jm,llm) 80 real cflz(ip1jmp1,llm) 81 real, save :: cflxmax(llm),cflymax(llm),cflzmax(llm) 76 82 77 83 IF(iadvtr.EQ.0) THEN … … 139 145 ENDDO 140 146 147 148 c------------------------------------------------------------------- 149 ! Calcul des criteres CFL en X, Y et Z 150 c------------------------------------------------------------------- 151 152 if (countcfl == 0. ) then 153 cflxmax(:)=0. 154 cflymax(:)=0. 155 cflzmax(:)=0. 156 endif 157 158 countcfl=countcfl+iapp_tracvl 159 cflx(:,:)=0. 160 cfly(:,:)=0. 161 cflz(:,:)=0. 162 do l=1,llm 163 do ij=iip2,ip1jm-1 164 if (pbarug(ij,l)>=0.) then 165 cflx(ij,l)=pbarug(ij,l)*dtvr/masse(ij,l) 166 else 167 cflx(ij,l)=-pbarug(ij,l)*dtvr/masse(ij+1,l) 168 endif 169 enddo 170 enddo 171 do l=1,llm 172 do ij=iip2,ip1jm-1,iip1 173 cflx(ij+iip1,l)=cflx(ij,l) 174 enddo 175 enddo 176 177 do l=1,llm 178 do ij=1,ip1jm 179 if (pbarvg(ij,l)>=0.) then 180 cfly(ij,l)=pbarvg(ij,l)*dtvr/masse(ij,l) 181 else 182 cfly(ij,l)=-pbarvg(ij,l)*dtvr/masse(ij+iip1,l) 183 endif 184 enddo 185 enddo 186 187 do l=2,llm 188 do ij=1,ip1jm 189 if (wg(ij,l)>=0.) then 190 cflz(ij,l)=wg(ij,l)*dtvr/masse(ij,l) 191 else 192 cflz(ij,l)=-wg(ij,l)*dtvr/masse(ij,l-1) 193 endif 194 enddo 195 enddo 196 197 do l=1,llm 198 cflxmax(l)=max(cflxmax(l),maxval(cflx(:,l))) 199 cflymax(l)=max(cflymax(l),maxval(cfly(:,l))) 200 cflzmax(l)=max(cflzmax(l),maxval(cflz(:,l))) 201 enddo 202 203 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 204 ! Par defaut, on sort le diagnostic des CFL tous les jours. 205 ! Si on veut le sortir a chaque pas d'advection en cas de plantage 206 ! if (countcfl==iapp_tracvl) then 207 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 208 if (countcfl==day_step) then 209 do l=1,llm 210 write(lunout,*) 'L, CFLmax ' 211 s ,l,maxval(cflx(:,l)),maxval(cfly(:,l)),maxval(cflz(:,l)) 212 enddo 213 countcfl=0 214 endif 215 141 216 c------------------------------------------------------------------- 142 217 c Advection proprement dite (Modification Le Croller (07/2001) -
LMDZ4/trunk/libf/dyn3d/bilan_dyn.F
r693 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 SUBROUTINE bilan_dyn (ntrac,dt_app,dt_cum, … … 10 10 c vQ..A=Cp T + L * ... 11 11 12 #ifdef CPP_IOIPSL 12 13 USE IOIPSL 14 #endif 13 15 14 16 IMPLICIT NONE -
LMDZ4/trunk/libf/dyn3d/caladvtrac.F
r1146 r1279 76 76 ENDDO 77 77 ENDDO 78 79 CALL qminimum( q, 2, finmasse ) 78 79 if (planet_type.eq."earth") then 80 ! Earth-specific treatment of first 2 tracers (water) 81 CALL qminimum( q, 2, finmasse ) 82 endif 80 83 81 84 CALL SCOPY ( ip1jmp1*llm, masse, 1, finmasse, 1 ) -
LMDZ4/trunk/libf/dyn3d/calfis.F
r1146 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 C 5 5 C 6 6 SUBROUTINE calfis(lafin, 7 $ rdayvrai, 8 $ heure, 7 $ jD_cur, jH_cur, 9 8 $ pucov, 10 9 $ pvcov, … … 102 101 c ----------- 103 102 LOGICAL lafin 104 REAL heure 103 105 104 106 105 REAL pvcov(iip1,jjm,llm) … … 170 169 DATA firstcal/.true./ 171 170 SAVE firstcal,debut 172 REAL rdayvrai 171 ! REAL rdayvrai 172 REAL, intent(in):: jD_cur, jH_cur 173 173 c 174 174 c----------------------------------------------------------------------- … … 177 177 c -------------------- 178 178 c 179 180 IF (ngridmx.NE.2+(jjm-1)*iim) THEN 179 c 180 IF ( firstcal ) THEN 181 debut = .TRUE. 182 IF (ngridmx.NE.2+(jjm-1)*iim) THEN 181 183 PRINT*,'STOP dans calfis' 182 184 PRINT*,'La dimension ngridmx doit etre egale a 2 + (jjm-1)*iim' … … 184 186 PRINT*,ngridmx,jjm,iim 185 187 STOP 186 ENDIF 187 188 c----------------------------------------------------------------------- 189 c latitude, longitude et aires des mailles pour la physique: 190 c ---------------------------------------------------------- 191 192 c 193 IF ( firstcal ) THEN 194 debut = .TRUE. 188 ENDIF 195 189 ELSE 196 197 ENDIF 190 debut = .FALSE. 191 ENDIF ! of IF (firstcal) 198 192 199 193 c … … 290 284 291 285 c convergence dynamique pour les traceurs "EAU" 292 293 DO iq=1,2 286 ! Earth-specific treatment of first 2 tracers (water) 287 if (planet_type=="earth") then 288 DO iq=1,2 294 289 DO l=1,llm 295 290 pcvgq(1,l,iq)= pdq(1,1,l,iq) / pmasse(1,1,l) … … 303 298 pcvgq(ig0,l,iq)= pdq(1,jjp1,l,iq) / pmasse(1,jjp1,l) 304 299 ENDDO 305 ENDDO 300 ENDDO 301 endif ! of if (planet_type=="earth") 306 302 307 303 … … 428 424 ENDDO 429 425 c 426 if (planet_type=="earth") then 427 #ifdef CPP_EARTH 430 428 cIM calcul PV a teta=350, 380, 405K 431 429 CALL PVtheta(ngridmx,llm,pucov,pvcov,pteta, 432 430 $ ztfi,zplay,zplev, 433 431 $ ntetaSTD,rtetaSTD,PVteta) 432 #endif 433 endif 434 434 c 435 435 c On change de grille, dynamique vers physiq, pour le flux de masse verticale … … 441 441 442 442 443 if (planet_type=="earth") then 444 #ifdef CPP_EARTH 443 445 CALL physiq (ngridmx, 444 446 . llm, 445 447 . debut, 446 448 . lafin, 447 . rdayvrai,448 . heure,449 . jD_cur, 450 . jH_cur, 449 451 . dtphys, 450 452 . zplev, … … 467 469 . pducov, 468 470 . PVteta) 471 #endif 472 endif !of if (planet_type=="earth") 469 473 470 474 500 CONTINUE … … 502 506 c 62. humidite specifique 503 507 c --------------------- 504 505 DO iq=1,nqtot506 DO l=1,llm507 DO i=1,iip1508 pdqfi(i,1,l,iq) = zdqfi(1,l,iq)509 pdqfi(i,jjp1,l,iq) = zdqfi(ngridmx,l,iq)510 ENDDO511 DO j=2,jjm512 ig0=1+(j-2)*iim513 DO i=1,iim514 pdqfi(i,j,l,iq) = zdqfi(ig0+i,l,iq)515 ENDDO516 pdqfi(iip1,j,l,iq) = pdqfi(1,j,l,iq)517 ENDDO518 ENDDO519 ENDDO508 ! Ehouarn: removed this useless bit: was overwritten at step 63 anyways 509 ! DO iq=1,nqtot 510 ! DO l=1,llm 511 ! DO i=1,iip1 512 ! pdqfi(i,1,l,iq) = zdqfi(1,l,iq) 513 ! pdqfi(i,jjp1,l,iq) = zdqfi(ngridmx,l,iq) 514 ! ENDDO 515 ! DO j=2,jjm 516 ! ig0=1+(j-2)*iim 517 ! DO i=1,iim 518 ! pdqfi(i,j,l,iq) = zdqfi(ig0+i,l,iq) 519 ! ENDDO 520 ! pdqfi(iip1,j,l,iq) = pdqfi(1,j,l,iq) 521 ! ENDDO 522 ! ENDDO 523 ! ENDDO 520 524 521 525 c 63. traceurs 522 526 c ------------ 523 527 C initialisation des tendances 524 pdqfi =0.528 pdqfi(:,:,:,:)=0. 525 529 C 526 530 DO iq=1,nqtot -
LMDZ4/trunk/libf/dyn3d/coefpoly.F
r524 r1279 19 19 c On en revient a resoudre un systeme de 4 equat.a 4 inconnues a0,a1,a2,a3 20 20 21 REAL *8Xf1, Xf2,Xprim1,Xprim2, xtild1,xtild2, xi22 REAL *8Xfout, Xprim23 REAL *8a1,a2,a3,a0, xtil1car, xtil2car,derr,x1x2car21 REAL(KIND=8) Xf1, Xf2,Xprim1,Xprim2, xtild1,xtild2, xi 22 REAL(KIND=8) Xfout, Xprim 23 REAL(KIND=8) a1,a2,a3,a0, xtil1car, xtil2car,derr,x1x2car 24 24 25 25 xtil1car = xtild1 * xtild1 -
LMDZ4/trunk/libf/dyn3d/comconst.h
r1107 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 !----------------------------------------------------------------------- … … 7 7 COMMON/comconst/im,jm,lllm,imp1,jmp1,lllmm1,lllmp1,lcl, & 8 8 & dtvr,daysec, & 9 & pi,dtphys,dtdiss,rad,r,cpp,kappa,cotot,unsim,g,omeg 9 & pi,dtphys,dtdiss,rad,r,cpp,kappa,cotot,unsim,g,omeg & 10 & ,dissip_factz,dissip_deltaz,dissip_zref & 11 & ,iflag_top_bound,tau_top_bound 12 10 13 11 14 INTEGER im,jm,lllm,imp1,jmp1,lllmm1,lllmp1,lcl … … 13 16 REAL pi,dtphys,dtdiss,rad,r,cpp,kappa 14 17 REAL cotot,unsim,g,omeg 18 REAL dissip_factz,dissip_deltaz,dissip_zref 19 INTEGER iflag_top_bound 20 REAL tau_top_bound 21 15 22 16 23 !----------------------------------------------------------------------- -
LMDZ4/trunk/libf/dyn3d/comvert.h
r524 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 c-----------------------------------------------------------------------5 cINCLUDE 'comvert.h'4 !----------------------------------------------------------------------- 5 ! INCLUDE 'comvert.h' 6 6 7 COMMON/comvert/ap(llm+1),bp(llm+1),presnivs(llm),dpres(llm) ,8 ,pa,preff,nivsigs(llm),nivsig(llm+1)7 COMMON/comvert/ap(llm+1),bp(llm+1),presnivs(llm),dpres(llm), & 8 & pa,preff,nivsigs(llm),nivsig(llm+1) 9 9 10 10 REAL ap,bp,presnivs,dpres,pa,preff,nivsigs,nivsig 11 11 12 c-----------------------------------------------------------------------12 !----------------------------------------------------------------------- -
LMDZ4/trunk/libf/dyn3d/conf_gcm.F
r1146 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 c … … 38 38 #include "serre.h" 39 39 #include "comdissnew.h" 40 #include "temps.h" 41 #include "comconst.h" 40 42 41 43 ! FH 2008/05/09 On elimine toutes les clefs physiques dans la dynamique … … 111 113 CALL getin('planet_type',planet_type) 112 114 115 !Config Key = calend 116 !Config Desc = type de calendrier utilise 117 !Config Def = earth_360d 118 !Config Help = valeur possible: earth_360d, earth_365d, earth_366d 119 !Config 120 calend = 'earth_360d' 121 CALL getin('calend', calend) 122 113 123 !Config Key = dayref 114 124 !Config Desc = Jour de l'etat initial … … 267 277 tetatemp = 7200. 268 278 CALL getin('tetatemp',tetatemp ) 279 280 ! Parametres controlant la variation sur la verticale des constantes de 281 ! dissipation. 282 ! Pour le moment actifs uniquement dans la version a 39 niveaux 283 ! avec ok_strato=y 284 285 dissip_factz=4. 286 dissip_deltaz=10. 287 dissip_zref=30. 288 CALL getin('dissip_factz',dissip_factz ) 289 CALL getin('dissip_deltaz',dissip_deltaz ) 290 CALL getin('dissip_zref',dissip_zref ) 291 292 iflag_top_bound=1 293 tau_top_bound=1.e-5 294 CALL getin('iflag_top_bound',iflag_top_bound) 295 CALL getin('tau_top_bound',tau_top_bound) 269 296 270 297 !Config Key = coefdis … … 558 585 write(lunout,*)' Configuration des parametres du gcm: ' 559 586 write(lunout,*)' planet_type = ', planet_type 587 write(lunout,*)' calend = ', calend 560 588 write(lunout,*)' dayref = ', dayref 561 589 write(lunout,*)' anneeref = ', anneeref … … 744 772 write(lunout,*)' Configuration des parametres du gcm: ' 745 773 write(lunout,*)' planet_type = ', planet_type 774 write(lunout,*)' calend = ', calend 746 775 write(lunout,*)' dayref = ', dayref 747 776 write(lunout,*)' anneeref = ', anneeref -
LMDZ4/trunk/libf/dyn3d/create_etat0_limit.F
r1146 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 PROGRAM create_etat0_limit 5 #ifdef CPP_EARTH 6 ! This prog. is designed to work for Earth 5 7 USE dimphy 6 8 USE comgeomphy 7 9 USE infotrac 10 #ifdef CPP_IOIPSL 11 use ioipsl, only: ioconf_calendar 12 #endif 13 IMPLICIT NONE 8 14 c 9 15 c … … 41 47 END IF 42 48 43 CALL Init_Phys_lmdz(iim,jjp1,llm,1,(jjm-1)*iim+2) 49 CALL Init_Phys_lmdz(iim,jjp1,llm,1,(/(jjm-1)*iim+2/)) 50 PRINT *,'---> klon=',klon 44 51 call InitComgeomphy 52 53 #ifdef CPP_IOIPSL 54 call ioconf_calendar('360d') 55 #endif 45 56 46 57 WRITE(6,*) ' ********************* ' … … 59 70 1 FORMAT(//) 60 71 72 #endif 73 ! of #ifdef CPP_EARTH 61 74 STOP 62 75 END -
LMDZ4/trunk/libf/dyn3d/diagedyn.F
r1146 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 … … 315 315 C 316 316 #else 317 write(lunout,*) ,'diagedyn: Needs Earth physics to function'317 write(lunout,*)'diagedyn: Needs Earth physics to function' 318 318 #endif 319 319 ! #endif of #ifdef CPP_EARTH -
LMDZ4/trunk/libf/dyn3d/disvert.F
r999 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 SUBROUTINE disvert(pa,preff,ap,bp,dpres,presnivs,nivsigs,nivsig) … … 36 36 c 37 37 INTEGER l 38 REAL snorm 38 REAL snorm,dsigmin 39 39 REAL alpha,beta,gama,delta,deltaz,h 40 40 INTEGER np,ierr … … 96 96 WRITE(LUNOUT,*)'WARNING!!! Ancienne discretisation verticale' 97 97 98 if (ok_strato) then 99 if (llm==39) then 100 dsigmin=0.3 101 else if (llm==50) then 102 dsigmin=1. 103 else 104 WRITE(LUNOUT,*) 'ATTENTION discretisation z a ajuster' 105 dsigmin=1. 106 endif 107 WRITE(LUNOUT,*) 'Discretisation verticale DSIGMIN=',dsigmin 108 endif 109 98 110 h=7. 99 111 snorm = 0. … … 102 114 103 115 IF (ok_strato) THEN 104 dsig(l) =( 1.0+ 7.0 * SIN(x)**2)116 dsig(l) =(dsigmin + 7.0 * SIN(x)**2) 105 117 & *(0.5*(1.-tanh(1.*(x-asin(1.))/asin(1.))))**2 106 118 ELSE … … 149 161 c 150 162 ENDDO 163 164 bp(1)=1. 165 ap(1)=0. 166 151 167 ap(llmp1) = pa * ( sig(llmp1) - bp(llmp1) ) 152 168 -
LMDZ4/trunk/libf/dyn3d/dump2d.F
r524 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 SUBROUTINE dump2d(im,jm,z,nom_z) … … 6 6 INTEGER im,jm 7 7 REAL z(im,jm) 8 CHARACTER *80nom_z8 CHARACTER (len=*) :: nom_z 9 9 10 10 INTEGER i,j,imin,illm,jmin,jllm 11 11 REAL zmin,zllm 12 12 13 PRINT*,nom_z13 WRITE(*,*) "dump2d: ",trim(nom_z) 14 14 15 15 zmin=z(1,1) … … 39 39 40 40 IF(zllm.GT.zmin) THEN 41 DO j=1,jm42 WRITE(*,'(72i1)') (NINT(10.*(z(i,j)-zmin)/(zllm-zmin)),i=1,im)43 ENDDO41 DO j=1,jm 42 WRITE(*,'(600i1)') (NINT(10.*(z(i,j)-zmin)/(zllm-zmin)),i=1,im) 43 ENDDO 44 44 ENDIF 45 45 RETURN -
LMDZ4/trunk/libf/dyn3d/dynredem.F
r1146 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 c 5 5 SUBROUTINE dynredem0(fichnom,iday_end,phis) 6 #ifdef CPP_IOIPSL 6 7 USE IOIPSL 8 #endif 7 9 USE infotrac 8 10 IMPLICIT NONE … … 55 57 56 58 c----------------------------------------------------------------------- 57 modname='dynredem' 58 59 modname='dynredem0' 60 61 #ifdef CPP_IOIPSL 59 62 call ymds2ju(annee_ref, 1, iday_end, 0.0, zjulian) 60 63 call ju2ymds(zjulian, yyears0, mmois0, jjour0, hours) 61 64 #else 65 ! set yyears0, mmois0, jjour0 to 0,1,1 (hours is not used) 66 yyears0=0 67 mmois0=1 68 jjour0=1 69 #endif 62 70 63 71 DO l=1,length -
LMDZ4/trunk/libf/dyn3d/etat0_netcdf.F
r1146 r1279 14 14 USE phys_state_var_mod 15 15 USE filtreg_mod 16 use regr_lat_time_climoz_m, only: regr_lat_time_climoz 17 use conf_phys_m, only: conf_phys 16 18 #endif 17 19 !#endif of #ifdef CPP_EARTH 20 use netcdf, only: nf90_open, NF90_NOWRITE, nf90_close 18 21 ! 19 22 IMPLICIT NONE 20 23 ! 21 #include "netcdf.inc"22 24 #include "dimensions.h" 23 25 #include "paramet.h" … … 49 51 REAL :: vvent(iip1, jjm, llm) 50 52 REAL :: t3d(iip1, jjp1, llm), tpot(iip1, jjp1, llm) 51 REAL, ALLOCATABLE, DIMENSION(:,:,:,:) :: q3d52 53 REAL :: qsat(iip1, jjp1, llm) 54 REAL,ALLOCATABLE :: q3d(:, :, :,:) 53 55 REAL :: tsol(klon), qsol(klon), sn(klon) 54 REAL :: tsolsrf(klon,nbsrf), qsolsrf(klon,nbsrf),snsrf(klon,nbsrf) 56 !! REAL :: tsolsrf(klon,nbsrf) 57 real qsolsrf(klon,nbsrf),snsrf(klon,nbsrf) 55 58 REAL :: albe(klon,nbsrf), evap(klon,nbsrf) 56 59 REAL :: alblw(klon,nbsrf) … … 72 75 ! 73 76 74 CHARACTER *80:: varname77 CHARACTER(len=80) :: varname 75 78 ! 76 79 INTEGER :: i,j, ig, l, ji,ii1,ii2 … … 102 105 REAL :: w(ip1jmp1,llm) 103 106 REAL ::phystep 104 REAL :: rugsrel(iip1*jjp1)107 CC REAL :: rugsrel(iip1*jjp1) 105 108 REAL :: fder(klon) 106 real zrel(iip1*jjp1),chmin,chmax107 108 CHARACTER*80:: visu_file109 !! real zrel(iip1*jjp1),chmin,chmax 110 111 !! CHARACTER(len=80) :: visu_file 109 112 INTEGER :: visuid 110 113 … … 126 129 logical :: ok_journe, ok_mensuel, ok_instan, ok_hf 127 130 logical :: ok_LES 128 LOGICAL :: ok_ade, ok_aie, aerosol_couple 131 LOGICAL :: ok_ade, ok_aie, aerosol_couple, new_aod 132 INTEGER :: flag_aerosol 129 133 REAL :: bl95_b0, bl95_b1 130 134 real :: fact_cldcon, facttemps,ratqsbas,ratqshaut 135 real :: tau_ratqs 131 136 integer :: iflag_cldcon 132 137 integer :: iflag_ratqs … … 140 145 real :: seuil_inversion 141 146 147 integer read_climoz ! read ozone climatology 148 C Allowed values are 0, 1 and 2 149 C 0: do not read an ozone climatology 150 C 1: read a single ozone climatology that will be used day and night 151 C 2: read two ozone climatologies, the average day and night 152 C climatology and the daylight climatology 153 142 154 ! 143 155 ! Constantes … … 162 174 ! CALL defrun_new(99,.TRUE.,clesphy0) 163 175 CALL conf_gcm( 99, .TRUE. , clesphy0 ) 164 call conf_phys(ok_journe, ok_mensuel, ok_instan, & 165 & ok_hf, ok_LES, & 176 call conf_phys( ok_journe, ok_mensuel, ok_instan, ok_hf, ok_LES, & 166 177 & solarlong0,seuil_inversion, & 167 178 & fact_cldcon, facttemps,ok_newmicro,iflag_radia, & 168 179 & iflag_cldcon, & 169 & iflag_ratqs,ratqsbas,ratqshaut, 180 & iflag_ratqs,ratqsbas,ratqshaut,tau_ratqs, & 170 181 & ok_ade, ok_aie, aerosol_couple, & 182 & flag_aerosol, new_aod, & 171 183 & bl95_b0, bl95_b1, & 172 184 & iflag_thermals,nsplit_thermals,tau_thermals, & 173 185 & iflag_thermals_ed,iflag_thermals_optflux, & 174 & iflag_coupl,iflag_clos,iflag_wake ) 186 & iflag_coupl,iflag_clos,iflag_wake, read_climoz ) 187 188 ! co2_ppm0 : initial value of atmospheric CO2 from .def file (co2_ppm value) 189 co2_ppm0 = co2_ppm 190 175 191 dtvr = daysec/FLOAT(day_step) 176 192 print*,'dtvr',dtvr 177 193 178 179 180 194 CALL iniconst() 181 195 CALL inigeom() 182 196 183 197 ! Initialisation pour traceurs 184 CALL infotrac_init 185 ALLOCATE(q3d(iip1,jjp1,llm,nqtot)) 186 198 call infotrac_init 199 ALLOCATE(q3d(iip1, jjp1, llm, nqtot)) 187 200 188 201 CALL inifilr() 189 CALL phys_state_var_init( )202 CALL phys_state_var_init(read_climoz) 190 203 ! 191 204 latfi(1) = ASIN(1.0) … … 244 257 245 258 write(*,*)'Essai de lecture masque ocean' 246 iret = nf _open("o2a.nc", NF_NOWRITE, nid_o2a)259 iret = nf90_open("o2a.nc", NF90_NOWRITE, nid_o2a) 247 260 if (iret .ne. 0) then 248 261 write(*,*)'ATTENTION!! pas de fichier o2a.nc trouve' … … 263 276 else 264 277 couple = .true. 265 iret = nf _close(nid_o2a)278 iret = nf90_close(nid_o2a) 266 279 call flininfo("o2a.nc", iml_omask, jml_omask, llm_tmp, ttm_tmp 267 280 $ , nid_o2a) … … 400 413 . maxval(qsat(:,:,:)) 401 414 ! 402 WRITE(*,*) 'QSAT :', qsat(10,20,:)415 CC WRITE(*,*) 'QSAT :', qsat(10,20,:) 403 416 ! 404 417 varname = 'q' … … 411 424 q3d(:,:,:,1) = qd(:,:,:) 412 425 ! 426 427 ! Ozone climatology: 428 if (read_climoz >= 1) call regr_lat_time_climoz(read_climoz) 429 413 430 varname = 'tsol' 414 431 ! This line needs to be replaced by a call to restget to get the values in the restart file … … 475 492 . jjm, rlonu, rlatv , interbar ) 476 493 c 477 rugsrel(:) = 0.0478 IF(ok_orodr) THEN479 DO i = 1, iip1* jjp1480 rugsrel(i) = MAX( 1.e-05, zstd(i)* zsig(i) /2. )481 ENDDO482 ENDIF494 cc rugsrel(:) = 0.0 495 cc IF(ok_orodr) THEN 496 cc DO i = 1, iip1* jjp1 497 cc rugsrel(i) = MAX( 1.e-05, zstd(i)* zsig(i) /2. ) 498 cc ENDDO 499 cc ENDIF 483 500 484 501 … … 650 667 itau_phy = 0 651 668 iday = dayref +itau/day_step 652 time = FLOAT(itau-(iday-dayref)*day_step)/day_step669 time = real(itau-(iday-dayref)*day_step)/day_step 653 670 c 654 671 IF(time.GT.1) THEN … … 714 731 q_ancien = 0. 715 732 agesno = 0. 733 c 716 734 frugs(1:klon,is_oce) = rugmer(1:klon) 717 735 frugs(1:klon,is_ter) = MAX(1.0e-05, zstd(1:klon)*zsig(1:klon)/2.0) … … 750 768 751 769 C Sortie Visu pour les champs dynamiques 752 if (1.eq.0 ) then753 print*,'sortie visu'754 time_step = 1.755 t_ops = 2.756 t_wrt = 2.757 itau = 2.758 visu_file='Etat0_visu.nc'759 CALL initdynav(visu_file,dayref,anneeref,time_step,760 . t_ops, t_wrt, visuid)761 CALL writedynav(visuid, itau,vvent ,762 . uvent,tpot,pk,phi,q3d,masse,psol,phis)763 else770 cc if (1.eq.0 ) then 771 cc print*,'sortie visu' 772 cc time_step = 1. 773 cc t_ops = 2. 774 cc t_wrt = 2. 775 cc itau = 2. 776 cc visu_file='Etat0_visu.nc' 777 cc CALL initdynav(visu_file,dayref,anneeref,time_step, 778 cc . t_ops, t_wrt, visuid) 779 cc CALL writedynav(visuid, itau,vvent , 780 cc . uvent,tpot,pk,phi,q3d,masse,psol,phis) 781 cc else 764 782 print*,'CCCCCCCCCCCCCCCCCC REACTIVER SORTIE VISU DANS ETAT0' 765 endif783 cc endif 766 784 print*,'entree histclo' 767 785 CALL histclo 768 769 DEALLOCATE(q3d)770 786 771 787 #endif … … 774 790 ! 775 791 END SUBROUTINE etat0_netcdf 776 -
LMDZ4/trunk/libf/dyn3d/fluxstokenc.F
r1146 r1279 1 ! 2 ! $Id$ 3 ! 1 4 SUBROUTINE fluxstokenc(pbaru,pbarv,masse,teta,phi,phis, 2 5 . time_step,itau ) 6 #ifdef CPP_EARTH 7 ! This routine is designed to work for Earth and with ioipsl 3 8 4 9 USE IOIPSL … … 18 23 #include "tracstoke.h" 19 24 #include "temps.h" 25 #include "iniprint.h" 20 26 21 27 REAL time_step,t_wrt, t_ops … … 159 165 ENDIF ! if iadvtr.EQ.istdyn 160 166 167 #else 168 write(lunout,*) 169 & 'fluxstokenc: Needs Earth physics (and ioipsl) to function' 170 #endif 171 ! of #ifdef CPP_EARTH 161 172 RETURN 162 173 END -
LMDZ4/trunk/libf/dyn3d/fxhyp.F
r650 r1279 48 48 c 49 49 REAL dzoom 50 REAL *8xlon(iip1),xprimm(iip1),xuv51 REAL *8xtild(0:nmax2)52 REAL *8fhyp(0:nmax2),ffdx,beta,Xprimt(0:nmax2)53 REAL *8Xf(0:nmax2),xxpr(0:nmax2)54 REAL *8xvrai(iip1),xxprim(iip1)55 REAL *8pi,depi,epsilon,xzoom,fa,fb56 REAL *8Xf1, Xfi , a0,a1,a2,a3,xi250 REAL(KIND=8) xlon(iip1),xprimm(iip1),xuv 51 REAL(KIND=8) xtild(0:nmax2) 52 REAL(KIND=8) fhyp(0:nmax2),ffdx,beta,Xprimt(0:nmax2) 53 REAL(KIND=8) Xf(0:nmax2),xxpr(0:nmax2) 54 REAL(KIND=8) xvrai(iip1),xxprim(iip1) 55 REAL(KIND=8) pi,depi,epsilon,xzoom,fa,fb 56 REAL(KIND=8) Xf1, Xfi , a0,a1,a2,a3,xi2 57 57 INTEGER i,it,ik,iter,ii,idif,ii1,ii2 58 REAL *8xi,xo1,xmoy,xlon2,fxm,Xprimin59 REAL *8champmin,champmax,decalx58 REAL(KIND=8) xi,xo1,xmoy,xlon2,fxm,Xprimin 59 REAL(KIND=8) champmin,champmax,decalx 60 60 INTEGER is2 61 61 SAVE is2 62 62 63 REAL *8heavyside63 REAL(KIND=8) heavyside 64 64 65 65 pi = 2. * ASIN(1.) -
LMDZ4/trunk/libf/dyn3d/fxyhyper.F
r524 r1279 41 41 REAL rlonu(iip1),xprimu(iip1),rlonv(iip1),xprimv(iip1), 42 42 , rlonm025(iip1),xprimm025(iip1), rlonp025(iip1),xprimp025(iip1) 43 REAL *8dxmin, dxmax , dymin, dymax43 REAL(KIND=8) dxmin, dxmax , dymin, dymax 44 44 45 45 c .... var. locales ..... -
LMDZ4/trunk/libf/dyn3d/fyhyp.F
r650 r1279 50 50 51 51 REAL dzoom 52 REAL *8ylat(jjp1), yprim(jjp1)53 REAL *8yuv54 REAL *8yt(0:nmax2)55 REAL *8fhyp(0:nmax2),beta,Ytprim(0:nmax2),fxm(0:nmax2)52 REAL(KIND=8) ylat(jjp1), yprim(jjp1) 53 REAL(KIND=8) yuv 54 REAL(KIND=8) yt(0:nmax2) 55 REAL(KIND=8) fhyp(0:nmax2),beta,Ytprim(0:nmax2),fxm(0:nmax2) 56 56 SAVE Ytprim, yt,Yf 57 REAL *8Yf(0:nmax2),yypr(0:nmax2)58 REAL *8yvrai(jjp1), yprimm(jjp1),ylatt(jjp1)59 REAL *8pi,depi,pis2,epsilon,y0,pisjm60 REAL *8yo1,yi,ylon2,ymoy,Yprimin,champmin,champmax61 REAL *8yfi,Yf1,ffdy62 REAL *8ypn,deply,y0057 REAL(KIND=8) Yf(0:nmax2),yypr(0:nmax2) 58 REAL(KIND=8) yvrai(jjp1), yprimm(jjp1),ylatt(jjp1) 59 REAL(KIND=8) pi,depi,pis2,epsilon,y0,pisjm 60 REAL(KIND=8) yo1,yi,ylon2,ymoy,Yprimin,champmin,champmax 61 REAL(KIND=8) yfi,Yf1,ffdy 62 REAL(KIND=8) ypn,deply,y00 63 63 SAVE y00, deply 64 64 … … 66 66 INTEGER jpn,jjpn 67 67 SAVE jpn 68 REAL *8a0,a1,a2,a3,yi2,heavyy0,heavyy0m69 REAL *8fa(0:nmax2),fb(0:nmax2)68 REAL(KIND=8) a0,a1,a2,a3,yi2,heavyy0,heavyy0m 69 REAL(KIND=8) fa(0:nmax2),fb(0:nmax2) 70 70 REAL y0min,y0max 71 71 72 REAL *8heavyside72 REAL(KIND=8) heavyside 73 73 74 74 pi = 2. * ASIN(1.) -
LMDZ4/trunk/libf/dyn3d/gcm.F
r1147 r1279 1 ! 2 ! $Id$ 3 ! 1 4 c 2 5 c … … 110 113 real time_step, t_wrt, t_ops 111 114 112 REAL rdayvrai,rdaym_ini,rday_ecri113 115 LOGICAL first 114 116 … … 132 134 character (len=20) :: modname 133 135 character (len=80) :: abort_message 134 135 C Calendrier136 LOGICAL true_calendar137 PARAMETER (true_calendar = .false.) 136 ! locales pour gestion du temps 137 INTEGER :: an, mois, jour 138 REAL :: heure 139 138 140 139 141 c----------------------------------------------------------------------- … … 160 162 161 163 162 c-----------------------------------------------------------------------163 c Choix du calendrier164 c -------------------165 166 #ifdef CPP_IOIPSL167 if (true_calendar) then168 call ioconf_calendar('gregorian')169 else170 call ioconf_calendar('360d')171 endif172 #endif173 164 c---------------------------------------------------------------------- 174 165 c lecture des fichiers gcm.def ou run.def … … 194 185 endif 195 186 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 187 c----------------------------------------------------------------------- 188 c Choix du calendrier 189 c ------------------- 190 191 c calend = 'earth_365d' 192 193 #ifdef CPP_IOIPSL 194 if (calend == 'earth_360d') then 195 call ioconf_calendar('360d') 196 write(lunout,*)'CALENDRIER CHOISI: Terrestre a 360 jours/an' 197 else if (calend == 'earth_365d') then 198 call ioconf_calendar('noleap') 199 write(lunout,*)'CALENDRIER CHOISI: Terrestre a 365 jours/an' 200 else if (calend == 'earth_366d') then 201 call ioconf_calendar('gregorian') 202 write(lunout,*)'CALENDRIER CHOISI: Terrestre bissextile' 203 else 204 abort_message = 'Mauvais choix de calendrier' 205 call abort_gcm(modname,abort_message,1) 206 endif 207 #endif 208 c----------------------------------------------------------------------- 196 209 197 210 IF (config_inca /= 'none') THEN … … 294 307 . ' restart ne correspondent pas a celles lues dans ' 295 308 write(lunout,*)' gcm.def' 309 write(lunout,*)' annee_ref=',annee_ref," anneeref=",anneeref 310 write(lunout,*)' day_ref=',day_ref," dayref=",dayref 296 311 if (raz_date .ne. 1) then 297 312 write(lunout,*) … … 310 325 raz_date = 0 311 326 endif 327 312 328 #ifdef CPP_IOIPSL 313 call ioconf_startdate(annee_ref,0,day_ref, 0.) 314 #endif 315 329 mois = 1 330 heure = 0. 331 call ymds2ju(annee_ref, mois, day_ref, heure, jD_ref) 332 jH_ref = jD_ref - int(jD_ref) 333 jD_ref = int(jD_ref) 334 335 call ioconf_startdate(INT(jD_ref), jH_ref) 336 337 write(lunout,*)'DEBUG' 338 write(lunout,*)'annee_ref, mois, day_ref, heure, jD_ref' 339 write(lunout,*)annee_ref, mois, day_ref, heure, jD_ref 340 call ju2ymds(jD_ref+jH_ref,an, mois, jour, heure) 341 write(lunout,*)'jD_ref+jH_ref,an, mois, jour, heure' 342 write(lunout,*)jD_ref+jH_ref,an, mois, jour, heure 343 #else 344 ! Ehouarn: we still need to define JD_ref and JH_ref 345 ! and since we don't know how many days there are in a year 346 ! we set JD_ref to 0 (this should be improved ...) 347 jD_ref=0 348 jH_ref=0 349 #endif 316 350 317 351 c nombre d'etats dans les fichiers demarrage et histoire … … 388 422 300 FORMAT('1'/,15x,'run du jour',i7,2x,'au jour',i7//) 389 423 424 #ifdef CPP_IOIPSL 425 call ju2ymds(jD_ref + day_ini - day_ref, an, mois, jour, heure) 426 write (lunout,301)jour, mois, an 427 call ju2ymds(jD_ref + day_end - day_ref, an, mois, jour, heure) 428 write (lunout,302)jour, mois, an 429 301 FORMAT('1'/,15x,'run du ', i2,'/',i2,'/',i4) 430 302 FORMAT('1'/,15x,' au ', i2,'/',i2,'/',i4) 431 #endif 432 390 433 if (planet_type.eq."earth") then 391 #ifdef CPP_EARTH 392 CALL dynredem0("restart.nc", day_end, phis) 393 #endif 434 CALL dynredem0("restart.nc", day_end, phis) 394 435 endif 395 436 … … 401 442 t_ops = iecri * daysec 402 443 t_wrt = iecri * daysec 403 CALL inithist(dynhist_file,day_ref,annee_ref,time_step,404 405 406 407 408 409 410 411 444 ! CALL inithist(dynhist_file,day_ref,annee_ref,time_step, 445 ! . t_ops, t_wrt, histid, histvid) 446 447 ! IF (ok_dynzon) THEN 448 ! t_ops = iperiod * time_step 449 ! t_wrt = periodav * daysec 450 ! CALL initdynav(dynhistave_file,day_ref,annee_ref,time_step, 451 ! . t_ops, t_wrt, histaveid) 452 ! END IF 412 453 dtav = iperiod*dtvr/daysec 413 454 endif -
LMDZ4/trunk/libf/dyn3d/getparam.F90
r524 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 MODULE getparam 5 #ifdef CPP_IOIPSL 5 6 USE IOIPSL 7 #else 8 ! if not using IOIPSL, we still need to use (a local version of) getin 9 USE ioipsl_getincom 10 #endif 11 6 12 INTERFACE getpar 7 13 MODULE PROCEDURE ini_getparam,fin_getparam,getparamr,getparami,getparaml -
LMDZ4/trunk/libf/dyn3d/grid_atob.F
r524 r1279 700 700 PARAMETER (imtmp=360,jmtmp=180) 701 701 REAL xtmp(imtmp), ytmp(jmtmp) 702 REAL *8cham1tmp(imtmp,jmtmp), cham2tmp(imtmp,jmtmp)702 REAL(KIND=8) cham1tmp(imtmp,jmtmp), cham2tmp(imtmp,jmtmp) 703 703 REAL zzzz 704 704 c … … 859 859 number(ii,jj) = number(ii,jj) + 1.0 860 860 rugs(ii,jj) = rugs(ii,jj) 861 . + LOG(MAX(0.001 ,cham2tmp(i,j)))861 . + LOG(MAX(0.001_8,cham2tmp(i,j))) 862 862 ENDIF 863 863 ENDDO … … 892 892 i_proche = ij_proche - (j_proche-1)*imtmp 893 893 PRINT*, "solution:", ij_proche, i_proche, j_proche 894 rugs(i,j) = LOG(MAX(0.001 ,cham2tmp(i_proche,j_proche)))894 rugs(i,j) = LOG(MAX(0.001_8,cham2tmp(i_proche,j_proche))) 895 895 ENDIF 896 896 ENDDO -
LMDZ4/trunk/libf/dyn3d/groupeun.F
r1146 r1279 19 19 REAL airecs,qs 20 20 21 INTEGER i,j,l,ig, j1,j2,i0,jd21 INTEGER i,j,l,ig,ig2,j1,j2,i0,jd 22 22 23 23 c--------------------------------------------------------------------c … … 37 37 38 38 LOGICAL, SAVE :: first = .TRUE. 39 INTEGER,SAVE :: i_index(iim,ngroup) 40 INTEGER :: offset 41 REAL :: qsum(iim/ngroup) 39 42 40 43 IF (first) THEN … … 43 46 ENDIF 44 47 48 45 49 c Champs 3D 46 50 jd=jjp1-jjmax 47 51 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 48 52 DO l=1,llm 49 53 j1=1+jd … … 54 58 j_start = j1-jd 55 59 j_finish = j2-jd 56 DO j=j_start, j_finish 57 DO i0=1,iim,2**(ngroup-ig+1) 58 qn=0. 59 DO i=i0,i0+2**(ngroup-ig+1)-1 60 qn=qn+q(i,j,l) 61 ENDDO 62 DO i=i0,i0+2**(ngroup-ig+1)-1 63 q(i,j,l)=qn*airen_tab(i,j,jd) 64 ENDDO 60 DO ig2=1,ngroup-ig+1 61 offset=2**(ig2-1) 62 DO j=j_start, j_finish 63 !CDIR NODEP 64 !CDIR ON_ADB(q) 65 DO i0=1,iim,2**ig2 66 q(i0,j,l)=q(i0,j,l)+q(i0+offset,j,l) 67 ENDDO 68 ENDDO 69 ENDDO 70 71 DO j=j_start, j_finish 72 !CDIR NODEP 73 !CDIR ON_ADB(q) 74 DO i=1,iim 75 q(i,j,l)=q(i-MOD(i-1,2**(ngroup-ig+1)),j,l) 76 ENDDO 77 ENDDO 78 79 DO j=j_start, j_finish 80 !CDIR ON_ADB(airen_tab) 81 !CDIR ON_ADB(q) 82 DO i=1,iim 83 q(i,j,l)=q(i,j,l)*airen_tab(i,j,jd) 65 84 ENDDO 66 85 q(iip1,j,l)=q(1,j,l) 67 86 ENDDO 68 87 69 88 !c Concerne le pole sud 70 89 j_start = j1-jd 71 90 j_finish = j2-jd 72 DO j=j_start, j_finish 73 DO i0=1,iim,2**(ngroup-ig+1) 74 qs=0. 75 DO i=i0,i0+2**(ngroup-ig+1)-1 76 qs=qs+q(i,jjp1-j+1-jd,l) 77 ENDDO 78 DO i=i0,i0+2**(ngroup-ig+1)-1 79 q(i,jjp1-j+1-jd,l)=qs*aires_tab(i,jjp1-j+1,jd) 80 ENDDO 91 DO ig2=1,ngroup-ig+1 92 offset=2**(ig2-1) 93 DO j=j_start, j_finish 94 !CDIR NODEP 95 !CDIR ON_ADB(q) 96 DO i0=1,iim,2**ig2 97 q(i0,jjp1-j+1-jd,l)= q(i0,jjp1-j+1-jd,l) 98 & +q(i0+offset,jjp1-j+1-jd,l) 99 ENDDO 100 ENDDO 101 ENDDO 102 103 104 DO j=j_start, j_finish 105 !CDIR NODEP 106 !CDIR ON_ADB(q) 107 DO i=1,iim 108 q(i,jjp1-j+1-jd,l)=q(i-MOD(i-1,2**(ngroup-ig+1)), 109 & jjp1-j+1-jd,l) 110 ENDDO 111 ENDDO 112 113 DO j=j_start, j_finish 114 !CDIR ON_ADB(aires_tab) 115 !CDIR ON_ADB(q) 116 DO i=1,iim 117 q(i,jjp1-j+1-jd,l)=q(i,jjp1-j+1-jd,l)* 118 & aires_tab(i,jjp1-j+1,jd) 81 119 ENDDO 82 120 q(iip1,jjp1-j+1-jd,l)=q(1,jjp1-j+1-jd,l) 83 121 ENDDO 122 84 123 85 124 j1=j2+1 … … 87 126 ENDDO 88 127 ENDDO 128 !$OMP END DO NOWAIT 89 129 90 130 RETURN 91 131 END 92 93 94 132 133 134 135 95 136 SUBROUTINE INIT_GROUPEUN(airen_tab, aires_tab) 96 137 IMPLICIT NONE -
LMDZ4/trunk/libf/dyn3d/heavyside.F
r524 r1279 10 10 IMPLICIT NONE 11 11 12 REAL *8heavyside , a12 REAL(KIND=8) heavyside , a 13 13 14 14 IF ( a.LE.0. ) THEN -
LMDZ4/trunk/libf/dyn3d/infotrac.F90
r1146 r1279 1 ! $Id$ 2 ! 1 3 MODULE infotrac 2 4 … … 19 21 INTEGER, ALLOCATABLE, DIMENSION(:), SAVE :: niadv ! equivalent dyn / physique 20 22 21 ! Variables for INCA23 ! conv_flg(it)=0 : convection desactivated for tracer number it 22 24 INTEGER, ALLOCATABLE, DIMENSION(:), SAVE :: conv_flg 25 ! pbl_flg(it)=0 : boundary layer diffusion desactivaded for tracer number it 23 26 INTEGER, ALLOCATABLE, DIMENSION(:), SAVE :: pbl_flg 24 27 28 CHARACTER(len=4),SAVE :: type_trac 29 25 30 CONTAINS 26 31 … … 51 56 INTEGER, ALLOCATABLE, DIMENSION(:) :: vadv ! index of vertical trasport schema 52 57 53 CHARACTER(len= 8), ALLOCATABLE, DIMENSION(:) :: tnom_0 ! tracer short name58 CHARACTER(len=15), ALLOCATABLE, DIMENSION(:) :: tnom_0 ! tracer short name 54 59 CHARACTER(len=8), ALLOCATABLE, DIMENSION(:) :: tracnam ! name from INCA 55 60 CHARACTER(len=3), DIMENSION(30) :: descrq … … 78 83 descrq(20)='SLP' 79 84 descrq(30)='PRA' 85 86 87 IF (config_inca=='none') THEN 88 type_trac='lmdz' 89 ELSE 90 type_trac='inca' 91 END IF 80 92 81 93 !----------------------------------------------------------------------- … … 85 97 ! 86 98 !----------------------------------------------------------------------- 87 IF ( config_inca == 'none') THEN99 IF (type_trac == 'lmdz') THEN 88 100 OPEN(90,file='traceur.def',form='formatted',status='old', iostat=ierr) 89 101 IF(ierr.EQ.0) THEN … … 107 119 END IF 108 120 ! 109 ! Allocate variables depending on nqtrue 121 ! Allocate variables depending on nqtrue and nbtr 110 122 ! 111 123 ALLOCATE(tnom_0(nqtrue), hadv(nqtrue), vadv(nqtrue)) 112 113 IF (config_inca /= 'none') THEN 114 ! Varaibles only needed in case of INCA 115 ALLOCATE(conv_flg(nbtr), pbl_flg(nbtr), tracnam(nbtr)) 116 END IF 117 124 ALLOCATE(conv_flg(nbtr), pbl_flg(nbtr), tracnam(nbtr)) 125 conv_flg(:) = 1 ! convection activated for all tracers 126 pbl_flg(:) = 1 ! boundary layer activated for all tracers 127 118 128 !----------------------------------------------------------------------- 119 129 ! 2) Choix des schemas d'advection pour l'eau et les traceurs … … 142 152 ! Get choice of advection schema from file tracer.def or from INCA 143 153 !--------------------------------------------------------------------- 144 IF ( config_inca == 'none') THEN154 IF (type_trac == 'lmdz') THEN 145 155 IF(ierr.EQ.0) THEN 146 156 ! Continue to read tracer.def … … 170 180 END DO 171 181 172 ELSE ! config_inca='aero' ou 'chem'182 ELSE ! type_trac=inca : config_inca='aero' ou 'chem' 173 183 ! le module de chimie fournit les noms des traceurs 174 184 ! et les schemas d'advection associes. … … 189 199 END DO 190 200 191 END IF ! config_inca201 END IF ! type_trac 192 202 193 203 !----------------------------------------------------------------------- … … 293 303 294 304 295 WRITE(lunout,*) 'Information stored in dimtrac :'305 WRITE(lunout,*) 'Information stored in infotrac :' 296 306 WRITE(lunout,*) 'iadv niadv tname ttext :' 297 307 DO iq=1,nqtot … … 299 309 END DO 300 310 311 ! 312 ! Test for advection schema. 313 ! This version of LMDZ only garantees iadv=10 and iadv=14 (14 only for water vapour) . 314 ! 315 DO iq=1,nqtot 316 IF (iadv(iq)/=10 .AND. iadv(iq)/=14 .AND. iadv(iq)/=0) THEN 317 WRITE(lunout,*)'STOP : The option iadv=',iadv(iq),' is not tested in this version of LMDZ' 318 CALL abort_gcm('infotrac_init','In this version only iadv=10 and iadv=14 is tested!',1) 319 ELSE IF (iadv(iq)==14 .AND. iq/=1) THEN 320 WRITE(lunout,*)'STOP : The option iadv=',iadv(iq),' is not tested in this version of LMDZ' 321 CALL abort_gcm('infotrac_init','In this version iadv=14 is only permitted for water vapour!',1) 322 END IF 323 END DO 324 301 325 !----------------------------------------------------------------------- 302 326 ! Finalize : 303 327 ! 304 328 DEALLOCATE(tnom_0, hadv, vadv) 305 IF (config_inca /= 'none')DEALLOCATE(tracnam)306 307 999 FORMAT (i2,1x,i2,1x,a 8)329 DEALLOCATE(tracnam) 330 331 999 FORMAT (i2,1x,i2,1x,a15) 308 332 309 333 END SUBROUTINE infotrac_init -
LMDZ4/trunk/libf/dyn3d/ini_paramLMDZ_dyn.h
r956 r1279 2 2 dt_cum = dtvr*day_step 3 3 4 zan = annee_ref5 dayref = day_ref6 CALL ymds2ju(zan, 1, dayref, 0.0, zjulian)4 ! zan = annee_ref 5 ! dayref = day_ref 6 ! CALL ymds2ju(zan, 1, dayref, 0.0, zjulian) 7 7 tau0 = itau_dyn 8 8 c … … 15 15 . iip1,rlong, jjp1,rlatg, 16 16 . 1,1,1,1, 17 . tau0, zjulian, dt_cum,17 . tau0, jD_ref+jH_ref , dt_cum, 18 18 . thoriid, nid_ctesGCM) 19 19 c … … 134 134 c 135 135 CALL histdef(nid_ctesGCM, "true_calendar", 136 ."Choix du calendrier : 1=gregorien ,0=calen. a 360 j",136 ."Choix du calendrier", 137 137 . "-",iip1,jjp1,thoriid, 1,1,1, -99, 32, 138 138 . "once", dt_cum,dt_cum) -
LMDZ4/trunk/libf/dyn3d/iniacademic.F
r1146 r1279 83 83 c 84 84 time_0=0. 85 day_ref=0 86 annee_ref=0 85 87 86 88 im = iim -
LMDZ4/trunk/libf/dyn3d/inidissip.F
r524 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 SUBROUTINE inidissip ( lstardis,nitergdiv,nitergrot,niterh , … … 18 18 #include "comvert.h" 19 19 #include "control.h" 20 #include "logic.h" 20 21 21 22 LOGICAL lstardis … … 29 30 INTEGER l,ij,idum,ii 30 31 REAL tetamin 32 REAL pseudoz 31 33 32 34 REAL ran1 … … 174 176 c -------------------------------------------------- 175 177 176 DO l=1,llm 177 zvert(l)=1. 178 ENDDO 179 180 fact=2. 181 c 182 DO l = 1, llm 183 zz = 1. - preff/presnivs(l) 184 zvert(l)= fact -( fact-1.)/( 1.+zz*zz ) 185 ENDDO 178 if (ok_strato .and. llm==39) then 179 do l=1,llm 180 pseudoz=8.*log(preff/presnivs(l)) 181 zvert(l)=1+ 182 s (tanh((pseudoz-dissip_zref)/dissip_deltaz)+1.)/2. 183 s *(dissip_factz-1.) 184 enddo 185 else 186 DO l=1,llm 187 zvert(l)=1. 188 ENDDO 189 fact=2. 190 DO l = 1, llm 191 zz = 1. - preff/presnivs(l) 192 zvert(l)= fact -( fact-1.)/( 1.+zz*zz ) 193 ENDDO 194 endif 186 195 187 196 -
LMDZ4/trunk/libf/dyn3d/integrd.F
r1146 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 SUBROUTINE integrd … … 32 32 #include "temps.h" 33 33 #include "serre.h" 34 #include "control.h" 34 35 35 36 c Arguments: … … 183 184 c$$$ ENDIF 184 185 185 DO l = 1, llm 186 DO ij = 1, ip1jmp1 187 deltap(ij,l) = p(ij,l) - p(ij,l+1) 186 if (planet_type.eq."earth") then 187 ! Earth-specific treatment of first 2 tracers (water) 188 DO l = 1, llm 189 DO ij = 1, ip1jmp1 190 deltap(ij,l) = p(ij,l) - p(ij,l+1) 191 ENDDO 188 192 ENDDO 189 ENDDO 190 191 CALL qminimum( q, nq, deltap ) 193 194 CALL qminimum( q, nq, deltap ) 195 endif ! of if (planet_type.eq."earth") 196 192 197 c 193 198 c ..... Calcul de la valeur moyenne, unique aux poles pour q ..... -
LMDZ4/trunk/libf/dyn3d/inter_barx.F
r790 r1279 212 212 213 213 214 3 FORMAT(1x,70( 1h-))214 3 FORMAT(1x,70("-")) 215 215 2 FORMAT(1x,8f8.2) 216 216 -
LMDZ4/trunk/libf/dyn3d/leapfrog.F
r1146 r1279 1 ! 2 ! $Id$ 1 3 ! 2 4 c … … 11 13 #endif 12 14 USE infotrac 13 15 USE guide_mod, ONLY : guide_main 16 USE write_field 14 17 IMPLICIT NONE 15 18 … … 111 114 c 112 115 INTEGER itau,itaufinp1,iav 113 INTEGER*4iday ! jour julien114 REAL time ! Heure de la journee en fraction d'1 jour116 ! INTEGER iday ! jour julien 117 REAL time 115 118 116 119 REAL SSUM … … 124 127 real time_step, t_wrt, t_ops 125 128 126 REAL rdayvrai,rdaym_ini 129 ! REAL rdayvrai,rdaym_ini 130 ! jD_cur: jour julien courant 131 ! jH_cur: heure julienne courante 132 REAL :: jD_cur, jH_cur 133 INTEGER :: an, mois, jour 134 REAL :: secondes 135 127 136 LOGICAL first,callinigrads 128 137 cIM : pour sortir les param. du modele dans un fis. netcdf 110106 129 138 save first 130 139 data first/.true./ 131 real dt_cum , zjulian140 real dt_cum 132 141 character*10 infile 133 142 integer zan, tau0, thoriid … … 166 175 character*80 abort_message 167 176 168 C Calendrier169 LOGICAL true_calendar170 PARAMETER (true_calendar = .false.)171 172 177 logical dissip_conservative 173 178 save dissip_conservative … … 192 197 193 198 itau = 0 194 iday = day_ini+itau/day_step195 time = FLOAT(itau-(iday-day_ini)*day_step)/day_step+time_0196 IF(time.GT.1.) THEN197 time = time-1.198 iday = iday+1199 ENDIF199 c$$$ iday = day_ini+itau/day_step 200 c$$$ time = FLOAT(itau-(iday-day_ini)*day_step)/day_step+time_0 201 c$$$ IF(time.GT.1.) THEN 202 c$$$ time = time-1. 203 c$$$ iday = iday+1 204 c$$$ ENDIF 200 205 201 206 … … 214 219 1 CONTINUE 215 220 221 jD_cur = jD_ref + day_ini - day_ref + int (itau * dtvr / daysec) 222 jH_cur = jH_ref + & 223 & (itau * dtvr / daysec - int(itau * dtvr / daysec)) 224 216 225 217 226 #ifdef CPP_IOIPSL 218 if (ok_guide.and.(itaufin-itau-1)*dtvr.gt.21600) then 219 call guide(itau,ucov,vcov,teta,q,masse,ps) 220 else 221 IF(prt_level>9)WRITE(lunout,*)'leapfrog: attention on ne ', 222 . 'guide pas les 6 dernieres heures' 227 if (ok_guide) then 228 call guide_main(itau,ucov,vcov,teta,q,masse,ps) 223 229 endif 224 230 #endif 231 232 225 233 c 226 234 c IF( MOD( itau, 10* day_step ).EQ.0 ) THEN … … 284 292 CALL geopot ( ip1jmp1, teta , pk , pks, phis , phi ) 285 293 294 time = jD_cur + jH_cur 286 295 CALL caldyn 287 296 $ ( itau,ucov,vcov,teta,ps,masse,pk,pkf,phis , 288 $ phi,conser,du,dv,dteta,dp,w, pbaru,pbarv, time+iday-day_ini ) 297 $ phi,conser,du,dv,dteta,dp,w, pbaru,pbarv, time ) 298 289 299 290 300 c----------------------------------------------------------------------- … … 344 354 CALL exner_hyb( ip1jmp1, ps, p,alpha,beta,pks, pk, pkf ) 345 355 346 rdaym_ini = itau * dtvr / daysec 347 rdayvrai = rdaym_ini + day_ini 348 356 ! rdaym_ini = itau * dtvr / daysec 357 ! rdayvrai = rdaym_ini + day_ini 358 jD_cur = jD_ref + day_ini - day_ref 359 $ + int (itau * dtvr / daysec) 360 jH_cur = jH_ref + & 361 & (itau * dtvr / daysec - int(itau * dtvr / daysec)) 362 ! write(lunout,*)'itau, jD_cur = ', itau, jD_cur, jH_cur 363 ! call ju2ymds(jD_cur+jH_cur, an, mois, jour, secondes) 364 ! write(lunout,*)'current date = ',an, mois, jour, secondes 349 365 350 366 c rajout debug … … 378 394 #endif 379 395 ! #endif of #ifdef CPP_IOIPSL 380 CALL calfis( lafin , rdayvrai,time,396 CALL calfis( lafin , jD_cur, jH_cur, 381 397 $ ucov,vcov,teta,q,masse,ps,p,pk,phis,phi , 382 398 $ du,dv,dteta,dq, … … 385 401 386 402 IF (ok_strato) THEN 387 CALL top_bound( vcov,ucov,teta, 403 CALL top_bound( vcov,ucov,teta,masse,dufi,dvfi,dtetafi) 388 404 ENDIF 389 405 … … 506 522 IF(forward. OR. leapf) THEN 507 523 itau= itau + 1 508 iday= day_ini+itau/day_step509 time= FLOAT(itau-(iday-day_ini)*day_step)/day_step+time_0510 IF(time.GT.1.) THEN511 time = time-1.512 iday = iday+1513 ENDIF524 c$$$ iday= day_ini+itau/day_step 525 c$$$ time= FLOAT(itau-(iday-day_ini)*day_step)/day_step+time_0 526 c$$$ IF(time.GT.1.) THEN 527 c$$$ time = time-1. 528 c$$$ iday = iday+1 529 c$$$ ENDIF 514 530 ENDIF 515 531 … … 517 533 IF( itau. EQ. itaufinp1 ) then 518 534 if (flag_verif) then 519 write( 80,*) 'ucov',ucov520 write(8 1,*) 'vcov',vcov521 write(8 2,*) 'teta',teta522 write(8 3,*) 'ps',ps523 write(8 4,*) 'q',q535 write(79,*) 'ucov',ucov 536 write(80,*) 'vcov',vcov 537 write(81,*) 'teta',teta 538 write(82,*) 'ps',ps 539 write(83,*) 'q',q 524 540 WRITE(85,*) 'q1 = ',q(:,:,1) 525 541 WRITE(86,*) 'q3 = ',q(:,:,3) 526 write(90) ucov527 write(91) vcov528 write(92) teta529 write(93) ps530 write(94) q531 542 endif 532 543 … … 548 559 IF (ok_dynzon) THEN 549 560 #ifdef CPP_IOIPSL 550 CALL writedynav(histaveid, itau,vcov ,551 , ucov,teta,pk,phi,q,masse,ps,phis)561 ! CALL writedynav(histaveid, itau,vcov , 562 ! , ucov,teta,pk,phi,q,masse,ps,phis) 552 563 CALL bilan_dyn (2,dtvr*iperiod,dtvr*day_step*periodav, 553 564 , ps,masse,pk,pbaru,pbarv,teta,phi,ucov,vcov,q) … … 586 597 587 598 if (planet_type.eq."earth") then 588 #ifdef CPP_EARTH589 599 ! Write an Earth-format restart file 590 600 CALL dynredem1("restart.nc",0.0, 591 601 & vcov,ucov,teta,q,masse,ps) 592 #endif593 602 endif ! of if (planet_type.eq."earth") 594 603 … … 636 645 637 646 itau = itau + 1 638 iday = day_ini+itau/day_step639 time = FLOAT(itau-(iday-day_ini)*day_step)/day_step+time_0640 641 IF(time.GT.1.) THEN642 time = time-1.643 iday = iday+1644 ENDIF647 c$$$ iday = day_ini+itau/day_step 648 c$$$ time = FLOAT(itau-(iday-day_ini)*day_step)/day_step+time_0 649 c$$$ 650 c$$$ IF(time.GT.1.) THEN 651 c$$$ time = time-1. 652 c$$$ iday = iday+1 653 c$$$ ENDIF 645 654 646 655 forward = .FALSE. … … 662 671 IF (ok_dynzon) THEN 663 672 #ifdef CPP_IOIPSL 664 CALL writedynav(histaveid, itau,vcov ,665 , ucov,teta,pk,phi,q,masse,ps,phis)673 ! CALL writedynav(histaveid, itau,vcov , 674 ! , ucov,teta,pk,phi,q,masse,ps,phis) 666 675 CALL bilan_dyn (2,dtvr*iperiod,dtvr*day_step*periodav, 667 676 , ps,masse,pk,pbaru,pbarv,teta,phi,ucov,vcov,q) … … 693 702 IF(itau.EQ.itaufin) THEN 694 703 if (planet_type.eq."earth") then 695 #ifdef CPP_EARTH696 704 CALL dynredem1("restart.nc",0.0, 697 705 & vcov,ucov,teta,q,masse,ps) 698 #endif699 706 endif ! of if (planet_type.eq."earth") 700 707 ENDIF ! of IF(itau.EQ.itaufin) -
LMDZ4/trunk/libf/dyn3d/limit_netcdf.F
r997 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 C 5 5 C 6 6 SUBROUTINE limit_netcdf(interbar, extrap, oldice, masque) 7 #ifdef CPP_EARTH 8 ! This routine is designed to work for Earth 7 9 USE dimphy 8 10 use phys_state_var_mod , ONLY : pctsrf … … 33 35 cy#include "dimphy.h" 34 36 #include "indicesol.h" 37 #include "iniprint.h" 35 38 c 36 39 c----------------------------------------------------------------------- … … 403 406 ENDDO 404 407 405 PRINT 222, timeyear 408 PRINT 222, timeyear(:lmdep) 406 409 222 FORMAT(2x,' Time year ',10f6.1) 407 410 c … … 620 623 timeyear(l) = tmidmonth(l) 621 624 ENDDO 622 PRINT 222, timeyear 625 PRINT 222, timeyear(:lmdep) 623 626 c 624 627 PRINT*, 'Interpolation temporelle' … … 939 942 timeyear(l) = tmidmonth(l) 940 943 ENDDO 941 print 222, timeyear 944 print 222, timeyear(:lmdep) 942 945 c 943 946 C interpolation temporelle … … 1134 1137 timeyear(l) = timecoord(l) 1135 1138 ENDDO 1136 print 222, timeyear 1139 print 222, timeyear(:lmdep) 1137 1140 c 1138 1141 C interpolation temporelle … … 1323 1326 ierr = NF_CLOSE(nid) 1324 1327 c 1328 #else 1329 WRITE(lunout,*) 1330 & 'limit_netcdf: Earth-specific routine, needs Earth physics' 1331 #endif 1332 ! of #ifdef CPP_EARTH 1325 1333 STOP 1326 1334 END -
LMDZ4/trunk/libf/dyn3d/pres2lev.F
r1046 r1279 1 ! 2 ! $Header$ 1 ! $Id$ 3 2 ! 4 3 c****************************************************** … … 21 20 c ARGUMENTS 22 21 c """"""""" 23 LOGICAL ok_invertp24 INTEGER lmo ! dimensions ancienne couches (input)25 INTEGER lmn ! dimensions nouvelle couches (input)26 INTEGER lmomx ! dimensions ancienne couches (input)27 INTEGER lmnmx ! dimensions nouvelle couches (input)22 LOGICAL, INTENT(IN) :: ok_invertp 23 INTEGER, INTENT(IN) :: lmo ! dimensions ancienne couches 24 INTEGER, INTENT(IN) :: lmn ! dimensions nouvelle couches 25 INTEGER lmomx ! dimensions ancienne couches 26 INTEGER lmnmx ! dimensions nouvelle couches 28 27 29 28 parameter(lmomx=10000,lmnmx=10000) 30 29 31 real po(ni,nj,lmo)! niveau de pression ancienne grille32 real pn(ni,nj,lmn) ! niveau de pression nouvelle grille30 real, INTENT(IN) :: po(ni,nj,lmo) ! niveau de pression ancienne grille 31 real, INTENT(IN) :: pn(ni,nj,lmn) ! niveau de pression nouvelle grille 33 32 34 INTEGER i,j,Nhoriz,ni,nj ! nombre de point horizontale (input)33 INTEGER, INTENT(IN) :: ni,nj ! nombre de point horizontale 35 34 36 REAL varo(ni,nj,lmo) ! var dans l'ancienne grille (input)37 REAL varn(ni,nj,lmn) ! var dans la nouvelle grille (output)35 REAL, INTENT(IN) :: varo(ni,nj,lmo) ! var dans l'ancienne grille 36 REAL, INTENT(OUT) :: varn(ni,nj,lmn) ! var dans la nouvelle grille 38 37 39 38 real zvaro(lmomx),zpo(lmomx) … … 41 40 c Autres variables 42 41 c """""""""""""""" 43 INTEGER n, ln ,lo 42 INTEGER n, ln ,lo, i, j, Nhoriz 44 43 REAL coef 45 44 -
LMDZ4/trunk/libf/dyn3d/sortvarc.F
r524 r1279 129 129 ang = SSUM( llm, angl, 1 ) 130 130 131 rday = FLOAT(INT ( day_ini + time ))131 c rday = FLOAT(INT ( day_ini + time )) 132 132 c 133 rday = FLOAT(INT(time-jD_ref-jH_ref)) 133 134 IF(ptot0.eq.0.) THEN 134 135 PRINT 3500, itau, rday, heure,time … … 156 157 RETURN 157 158 158 3500 FORMAT( '0'10(1h*),4x,'pas'i7,5x,'jour'f5.0,'heure'f5.1,4x159 * ,'date',f1 0.5,4x,10(1h*))159 3500 FORMAT(10("*"),4x,'pas',i7,5x,'jour',f9.0,'heure',f5.1,4x 160 * ,'date',f14.4,4x,10("*")) 160 161 4000 FORMAT(10x,'masse',4x,'rmsdpdt',7x,'energie',2x,'enstrophie' 161 162 * ,2x,'entropie',3x,'rmsv',4x,'mt.ang',/,'GLOB ' -
LMDZ4/trunk/libf/dyn3d/sortvarc0.F
r524 r1279 130 130 ang0 = SSUM( llm, angl, 1 ) 131 131 132 rday = FLOAT(INT ( day_ini +time ))132 rday = FLOAT(INT (time )) 133 133 c 134 134 PRINT 3500, itau, rday, heure, time 135 135 PRINT *, ptot0,etot0,ztot0,stot0,ang0 136 136 137 3500 FORMAT( '0',10(1h*),4x,'pas',i7,5x,'jour',f5.0,'heure',f5.1,4x138 * ,'date',f10.5,4x,10( 1h*))137 3500 FORMAT(10("*"),4x,'pas',i7,5x,'jour',f5.0,'heure',f5.1,4x 138 * ,'date',f10.5,4x,10("*")) 139 139 RETURN 140 140 END -
LMDZ4/trunk/libf/dyn3d/startvar.F
r677 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 C5 C6 4 MODULE startvar 5 #ifdef CPP_EARTH 6 ! This module is designed to work for Earth (and with ioipsl) 7 7 ! 8 8 ! … … 1189 1189 END SUBROUTINE start_inter_3d 1190 1190 ! 1191 #endif 1192 ! of #ifdef CPP_EARTH 1191 1193 END MODULE startvar -
LMDZ4/trunk/libf/dyn3d/temps.h
r792 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 ! ATTENTION!!!!: ce fichier include est compatible format fixe/format libre … … 8 8 ! 9 9 ! 10 ! jD_ref = jour julien de la date de reference (lancement de l'experience) 11 ! hD_ref = "heure" julienne de la date de reference 10 12 !----------------------------------------------------------------------- 11 13 ! INCLUDE 'temps.h' 12 14 13 15 COMMON/temps/itaufin, dt, day_ini, day_end, annee_ref, day_ref, & 14 & itau_dyn, itau_phy 16 & itau_dyn, itau_phy, jD_ref, jH_ref, calend 15 17 16 18 INTEGER itaufin 17 INTEGER*4 itau_dyn, itau_phy 18 INTEGER*4 day_ini, day_end, annee_ref, day_ref 19 REAL dt 19 INTEGER itau_dyn, itau_phy 20 INTEGER day_ini, day_end, annee_ref, day_ref 21 REAL dt, jD_ref, jH_ref 22 CHARACTER (len=10) :: calend 20 23 21 24 !----------------------------------------------------------------------- -
LMDZ4/trunk/libf/dyn3d/top_bound.F
r999 r1279 1 SUBROUTINE top_bound( vcov,ucov,teta, du,dv,dh )1 SUBROUTINE top_bound( vcov,ucov,teta,masse, du,dv,dh ) 2 2 IMPLICIT NONE 3 3 c … … 5 5 #include "paramet.h" 6 6 #include "comconst.h" 7 CC#include "comgeom2.h" 7 #include "comvert.h" 8 #include "comgeom2.h" 8 9 9 10 … … 27 28 c ------------- 28 29 29 #include "comgeom.h"30 ! #include "comgeom.h" 30 31 #include "comdissipn.h" 31 32 … … 34 35 35 36 REAL ucov(iip1,jjp1,llm),vcov(iip1,jjm,llm),teta(iip1,jjp1,llm) 37 REAL masse(iip1,jjp1,llm) 36 38 REAL dv(iip1,jjm,llm),du(iip1,jjp1,llm),dh(iip1,jjp1,llm) 37 39 … … 39 41 c ------ 40 42 43 REAL massebx(iip1,jjp1,llm),masseby(iip1,jjm,llm),zm 41 44 REAL uzon(jjp1,llm),vzon(jjm,llm),tzon(jjp1,llm) 42 45 43 46 INTEGER NDAMP 44 47 PARAMETER (NDAMP=4) 45 integer i 46 REAL :: rdamp(llm) = 47 & (/(0., i =1,llm-NDAMP),0.125E-5,.25E-5,.5E-5,1.E-5/) 48 integer i 49 REAL,SAVE :: rdamp(llm) 50 ! & (/(0., i =1,llm-NDAMP),0.125E-5,.25E-5,.5E-5,1.E-5/) 51 52 LOGICAL,SAVE :: first=.true. 48 53 49 54 INTEGER j,l … … 52 57 C CALCUL DES CHAMPS EN MOYENNE ZONALE: 53 58 59 if (iflag_top_bound.eq.0) return 60 61 if (first) then 62 if (iflag_top_bound.eq.1) then 63 ! couche eponge dans les 4 dernieres couches du modele 64 rdamp(:)=0. 65 rdamp(llm)=tau_top_bound 66 rdamp(llm-1)=tau_top_bound/2. 67 rdamp(llm-2)=tau_top_bound/4. 68 rdamp(llm-3)=tau_top_bound/8. 69 else if (iflag_top_bound.eq.2) then 70 ! couce eponge dans toutes les couches de pression plus faible que 71 ! 100 fois la pression de la derniere couche 72 rdamp(:)=tau_top_bound 73 s *max(presnivs(llm)/presnivs(:)-0.01,0.) 74 endif 75 first=.false. 76 print*,'TOP_BOUND rdamp=',rdamp 77 endif 78 79 CALL massbar(masse,massebx,masseby) 80 54 81 do l=1,llm 55 82 do j=1,jjm 56 83 vzon(j,l)=0. 84 zm=0. 57 85 do i=1,iim 58 vzon(j,l)=vzon(j,l)+vcov(i,j,l)/float(iim) 86 ! Rm: on peut travailler directement avec la moyenne zonale de vcov 87 ! plutot qu'avec celle de v car le coefficient cv qui relie les deux 88 ! ne varie qu'en latitude 89 vzon(j,l)=vzon(j,l)+vcov(i,j,l)*masseby(i,j,l) 90 zm=zm+masseby(i,j,l) 59 91 enddo 92 vzon(j,l)=vzon(j,l)/zm 60 93 enddo 61 94 enddo … … 72 105 do j=2,jjm 73 106 uzon(j,l)=0. 107 zm=0. 108 do i=1,iim 109 uzon(j,l)=uzon(j,l)+massebx(i,j,l)*ucov(i,j,l)/cu(i,j) 110 zm=zm+massebx(i,j,l) 111 enddo 112 uzon(j,l)=uzon(j,l)/zm 113 enddo 114 enddo 115 116 do l=1,llm 117 do j=2,jjm 118 zm=0. 74 119 tzon(j,l)=0. 75 120 do i=1,iim 76 uzon(j,l)=uzon(j,l)+ucov(i,j,l)/float(iim)77 tzon(j,l)=tzon(j,l)+teta(i,j,l)/float(iim)121 tzon(j,l)=tzon(j,l)+teta(i,j,l)*masse(i,j,l) 122 zm=zm+masse(i,j,l) 78 123 enddo 124 tzon(j,l)=tzon(j,l)/zm 79 125 enddo 80 126 enddo … … 85 131 do i=1,iip1 86 132 do j=2,jjm 87 du(i,j,l)=du(i,j,l)-rdamp(l)*(ucov(i,j,l)-uzon(j,l)) 133 du(i,j,l)=du(i,j,l) 134 s -rdamp(l)*(ucov(i,j,l)-cu(i,j)*uzon(j,l)) 88 135 dh(i,j,l)=dh(i,j,l)-rdamp(l)*(teta(i,j,l)-tzon(j,l)) 89 136 enddo -
LMDZ4/trunk/libf/dyn3d/ugeostr.F
r524 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 subroutine ugeostr(phi,ucov) … … 20 20 21 21 real zlat 22 23 um(:,:)=0 ! initialize um() 22 24 23 25 DO j=1,jjm … … 42 44 ENDDO 43 45 ENDDO 44 call dump2d(jj p1,llm,um,'Vent-u geostrophique')46 call dump2d(jjm,llm,um,'Vent-u geostrophique') 45 47 46 48 c -
LMDZ4/trunk/libf/dyn3d/write_paramLMDZ_dyn.h
r956 r1279 107 107 . zx_tmp_2d,iip1*jjp1,ndex2d) 108 108 c 109 IF(true_calendar) THEN 110 zx_tmp_2d(1:iip1,1:jjp1)=1. 111 ELSE 112 zx_tmp_2d(1:iip1,1:jjp1)=0. 113 ENDIF 109 if (calend == 'earth_360d') then 110 zx_tmp_2d(1:iip1,1:jjp1)=1. 111 else if (calend == 'earth_365d') then 112 zx_tmp_2d(1:iip1,1:jjp1)=2. 113 else if (calend == 'earth_366d') then 114 zx_tmp_2d(1:iip1,1:jjp1)=3. 115 endif 116 114 117 CALL histwrite(nid_ctesGCM, "true_calendar", itau_w, 115 118 . zx_tmp_2d,iip1*jjp1,ndex2d) -
LMDZ4/trunk/libf/dyn3dpar/abort_gcm.F
r1147 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 c … … 8 8 #ifdef CPP_IOIPSL 9 9 USE IOIPSL 10 #else 11 ! if not using IOIPSL, we still need to use (a local version of) getin_dump 12 USE ioipsl_getincom 10 13 #endif 14 USE parallel 11 15 #include "iniprint.h" 12 16 … … 28 32 call histclo 29 33 call restclo 34 if (MPI_rank .eq. 0) then 35 call getin_dump 36 endif 30 37 c$OMP END MASTER 31 38 #endif 32 call getin_dump33 39 c call histclo(2) 34 40 c call histclo(3) -
LMDZ4/trunk/libf/dyn3dpar/bands.F90
r792 r1279 1 ! 2 ! $Id$ 3 ! 1 4 module Bands 2 5 … … 90 93 SUBROUTINE Set_Bands 91 94 USE parallel 95 #ifdef CPP_EARTH 96 ! Ehouarn: what follows is only related to // physics; for now only for Earth 92 97 USE mod_phys_lmdz_para, ONLY : jj_para_begin,jj_para_end 98 #endif 93 99 IMPLICIT NONE 94 100 INCLUDE 'dimensions.h' … … 100 106 enddo 101 107 108 #ifdef CPP_EARTH 109 ! Ehouarn: what follows is only related to // physics; for now only for Earth 102 110 do i=0,MPI_Size-1 103 111 jj_Nb_physic(i)=jj_para_end(i)-jj_para_begin(i)+1 … … 120 128 endif 121 129 enddo 130 #endif 122 131 123 132 end subroutine Set_Bands … … 323 332 subroutine AdjustBands_physic 324 333 use times 334 #ifdef CPP_EARTH 335 ! Ehouarn: what follows is only related to // physics; for now only for Earth 325 336 USE mod_phys_lmdz_para, only : klon_mpi_para_nb 337 #endif 326 338 USE parallel 327 339 implicit none … … 347 359 medium=medium/mpi_size 348 360 NbTot=0 361 #ifdef CPP_EARTH 362 ! Ehouarn: what follows is only related to // physics; for now only for Earth 349 363 do i=0,mpi_size-1 350 364 Inc(i)=nint(klon_mpi_para_nb(i)*(medium-value(i))/value(i)) … … 369 383 distrib_phys(i)=klon_mpi_para_nb(i)+inc(i) 370 384 enddo 371 385 #endif 372 386 end subroutine AdjustBands_physic 373 387 -
LMDZ4/trunk/libf/dyn3dpar/bilan_dyn_p.F
r985 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 SUBROUTINE bilan_dyn_p (ntrac,dt_app,dt_cum, … … 10 10 c vQ..A=Cp T + L * ... 11 11 12 #ifdef CPP_IOIPSL 12 13 USE IOIPSL 14 #endif 13 15 USE parallel 14 16 USE mod_hallo -
LMDZ4/trunk/libf/dyn3dpar/caladvtrac_p.F
r1146 r1279 82 82 ENDDO 83 83 84 CALL qminimum_p( q, 2, finmasse ) 84 if (planet_type.eq."earth") then 85 ! Earth-specific treatment of first 2 tracers (water) 86 CALL qminimum_p( q, 2, finmasse ) 87 endif 88 85 89 86 90 cym --> le reste ne set a rien -
LMDZ4/trunk/libf/dyn3dpar/calfis_p.F
r1146 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 C 5 5 C 6 6 SUBROUTINE calfis_p(lafin, 7 $ rdayvrai, 8 $ heure, 7 $ jD_cur, jH_cur, 9 8 $ pucov, 10 9 $ pvcov, … … 28 27 $ pdqfi, 29 28 $ pdpsfi) 29 #ifdef CPP_EARTH 30 ! Ehouarn: For now, calfis_p needs Earth physics 30 31 c 31 32 c Auteur : P. Le Van, F. Hourdin … … 157 158 REAL,ALLOCATABLE,SAVE :: pcvgt(:,:), pcvgq(:,:,:) 158 159 c 159 c REAL,ALLOCATABLE,SAVE :: pvervel(:,:)160 c161 160 REAL,ALLOCATABLE,SAVE :: zdufi(:,:),zdvfi(:,:) 162 161 REAL,ALLOCATABLE,SAVE :: zdtfi(:,:),zdqfi(:,:,:) … … 174 173 REAL,ALLOCATABLE,SAVE :: ztfi_omp(:,:) 175 174 REAL,ALLOCATABLE,SAVE :: zqfi_omp(:,:,:) 176 c REAL,ALLOCATABLE,SAVE :: pvervel_omp(:,:)177 175 REAL,ALLOCATABLE,SAVE :: zdufi_omp(:,:) 178 176 REAL,ALLOCATABLE,SAVE :: zdvfi_omp(:,:) … … 209 207 SAVE firstcal,debut 210 208 c$OMP THREADPRIVATE(firstcal,debut) 211 REAL rdayvrai209 REAL, intent(in):: jD_cur, jH_cur 212 210 213 211 REAL,SAVE,dimension(1:iim,1:llm):: du_send,du_recv,dv_send,dv_recv … … 233 231 PVteta(:,:)=0. 234 232 235 IF (ngridmx.NE.2+(jjm-1)*iim) THEN 233 c 234 IF ( firstcal ) THEN 235 debut = .TRUE. 236 IF (ngridmx.NE.2+(jjm-1)*iim) THEN 236 237 PRINT*,'STOP dans calfis' 237 238 PRINT*,'La dimension ngridmx doit etre egale a 2 + (jjm-1)*iim' … … 239 240 PRINT*,ngridmx,jjm,iim 240 241 STOP 241 ENDIF 242 243 c----------------------------------------------------------------------- 244 c latitude, longitude et aires des mailles pour la physique: 245 c ---------------------------------------------------------- 246 247 c 248 IF ( firstcal ) THEN 249 debut = .TRUE. 242 ENDIF 250 243 c$OMP MASTER 251 244 ALLOCATE(zpsrf(klon)) … … 256 249 ALLOCATE(pcvgu(klon,llm), pcvgv(klon,llm)) 257 250 ALLOCATE(pcvgt(klon,llm), pcvgq(klon,llm,2)) 258 c ALLOCATE(pvervel(klon,llm))259 251 ALLOCATE(zdufi(klon,llm),zdvfi(klon,llm)) 260 252 ALLOCATE(zdtfi(klon,llm),zdqfi(klon,llm,nqtot)) … … 282 274 283 275 c$OMP MASTER 276 !CDIR ON_ADB(index_i) 277 !CDIR ON_ADB(index_j) 284 278 do ig0=1,klon 285 279 i=index_i(ig0) … … 304 298 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 305 299 DO l = 1, llmp1 300 !CDIR ON_ADB(index_i) 301 !CDIR ON_ADB(index_j) 306 302 do ig0=1,klon 307 303 i=index_i(ig0) … … 318 314 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 319 315 DO l=1,llm 320 316 !CDIR ON_ADB(index_i) 317 !CDIR ON_ADB(index_j) 321 318 do ig0=1,klon 322 319 i=index_i(ig0) … … 325 322 zplay(ig0,l) = preff * pksurcp ** unskap 326 323 ztfi(ig0,l) = pteta(i,j,l) * pksurcp 327 c pcvgt(ig0,l) = pdteta(i,j,l) * pksurcp / pmasse(i,j,l)328 324 enddo 329 325 … … 339 335 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 340 336 DO l=1,llm 337 !CDIR ON_ADB(index_i) 338 !CDIR ON_ADB(index_j) 341 339 do ig0=1,klon 342 340 i=index_i(ig0) … … 348 346 ENDDO 349 347 350 c convergence dynamique pour les traceurs "EAU"351 352 DO iq=1,2353 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)354 DO l=1,llm355 do ig0=1,klon356 i=index_i(ig0)357 j=index_j(ig0)358 c pcvgq(ig0,l,iq) = pdq(i,j,l,iq) / pmasse(i,j,l)359 enddo360 ENDDO361 c$OMP END DO NOWAIT362 ENDDO363 364 365 348 366 349 c Geopotentiel calcule par rapport a la surface locale: … … 381 364 c$OMP END DO NOWAIT 382 365 383 c .... Calcul de la vitesse verticale ( en Pa*m*s ou Kg/s ) ....384 c JG : ancien calcule de omega utilise dans physiq.F. Maintenant le flux385 c de masse est calclue dans advtrac_p.F386 c387 cc$OMP DO SCHEDULE(STATIC,OMP_CHUNK)388 c DO l=1,llm389 c do ig0=1,klon390 c i=index_i(ig0)391 c j=index_j(ig0)392 c pvervel(ig0,l) = pw(i,j,l)*g* unsaire(i,j)393 c enddo394 c if (is_north_pole) pvervel(1,l)=pw(1,1,l)*g /apoln395 c if (is_south_pole) pvervel(klon,l)=pw(1,jjp1,l)*g/apols396 c ENDDO397 cc$OMP END DO NOWAIT398 366 399 367 c … … 409 377 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 410 378 DO l=1,llm 379 !CDIR ON_ADB(index_i) 380 !CDIR ON_ADB(index_j) 381 !CDIR SPARSE 411 382 do ig0=kstart,kend 412 383 i=index_i(ig0) … … 415 386 zufi(ig0,l)= 0.5 *( pucov(iim,j,l)/cu(iim,j) 416 387 $ + pucov(1,j,l)/cu(1,j) ) 417 c pcvgu(ig0,l)= 0.5*( pducov(iim,j,l)/cu(iim,j)418 c $ + pducov(1,j,l)/cu(1,j) )419 388 else 420 389 zufi(ig0,l)= 0.5*( pucov(i-1,j,l)/cu(i-1,j) 421 390 $ + pucov(i,j,l)/cu(i,j) ) 422 c pcvgu(ig0,l)= 0.5*( pducov(i-1,j,l)/cu(i-1,j)423 c $ + pducov(i,j,l)/cu(i,j) )424 391 endif 425 392 enddo 426 393 ENDDO 427 394 c$OMP END DO NOWAIT 395 428 396 c 46.champ v: 429 397 c ----------- 398 430 399 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 431 400 DO l=1,llm 401 !CDIR ON_ADB(index_i) 402 !CDIR ON_ADB(index_j) 432 403 DO ig0=kstart,kend 433 404 i=index_i(ig0) … … 436 407 $ + pvcov(i,j,l)/cv(i,j) ) 437 408 438 c pcvgv(ig0+i,l)= 0.5 * ( pdvcov(i,j-1,l)/cv(i,j-1)439 c $ + pdvcov(i,j,l)/cv(i,j) )440 409 ENDDO 441 410 ENDDO … … 452 421 453 422 z1(1) =(rlonu(1)-rlonu(iim)+2.*pi)*pvcov(1,1,l)/cv(1,1) 454 c z1bis(1)=(rlonu(1)-rlonu(iim)+2.*pi)*pdvcov(1,1,l)/cv(1,1)455 423 DO i=2,iim 456 424 z1(i) =(rlonu(i)-rlonu(i-1))*pvcov(i,1,l)/cv(i,1) 457 c z1bis(i)=(rlonu(i)-rlonu(i-1))*pdvcov(i,1,l)/cv(i,1)458 425 ENDDO 459 426 460 427 DO i=1,iim 461 428 zcos(i) = COS(rlonv(i))*z1(i) 462 c zcosbis(i)= COS(rlonv(i))*z1bis(i)463 429 zsin(i) = SIN(rlonv(i))*z1(i) 464 c zsinbis(i)= SIN(rlonv(i))*z1bis(i)465 430 ENDDO 466 431 467 432 zufi(1,l) = SSUM(iim,zcos,1)/pi 468 c pcvgu(1,l) = SSUM(iim,zcosbis,1)/pi469 433 zvfi(1,l) = SSUM(iim,zsin,1)/pi 470 c pcvgv(1,l) = SSUM(iim,zsinbis,1)/pi471 434 472 435 ENDDO … … 485 448 486 449 z1(1) =(rlonu(1)-rlonu(iim)+2.*pi)*pvcov(1,jjm,l)/cv(1,jjm) 487 c z1bis(1)=(rlonu(1)-rlonu(iim)+2.*pi)*pdvcov(1,jjm,l)/cv(1,jjm)488 450 DO i=2,iim 489 z1(i) =(rlonu(i)-rlonu(i-1))*pvcov(i,jjm,l)/cv(i,jjm) 490 c z1bis(i)=(rlonu(i)-rlonu(i-1))*pdvcov(i,jjm,l)/cv(i,jjm) 451 z1(i) =(rlonu(i)-rlonu(i-1))*pvcov(i,jjm,l)/cv(i,jjm) 491 452 ENDDO 492 453 493 454 DO i=1,iim 494 455 zcos(i) = COS(rlonv(i))*z1(i) 495 c zcosbis(i) = COS(rlonv(i))*z1bis(i)496 456 zsin(i) = SIN(rlonv(i))*z1(i) 497 c zsinbis(i) = SIN(rlonv(i))*z1bis(i)498 457 ENDDO 499 458 500 459 zufi(klon,l) = SSUM(iim,zcos,1)/pi 501 c pcvgu(klon,l) = SSUM(iim,zcosbis,1)/pi502 460 zvfi(klon,l) = SSUM(iim,zsin,1)/pi 503 c pcvgv(klon,l) = SSUM(iim,zsinbis,1)/pi504 505 461 ENDDO 506 462 c$OMP END DO NOWAIT … … 524 480 c --------------------- 525 481 526 cc$OMP PARALLEL DEFAULT(NONE)527 cc$OMP+ PRIVATE(i,l,offset,iq)528 cc$OMP+ SHARED(klon_omp_nb,nqtot,klon_omp_begin,529 cc$OMP+ debut,lafin,rdayvrai,heure,dtphys,zplev,zplay,530 cc$OMP+ zphi,zphis,presnivs,clesphy0,zufi,zvfi,ztfi,531 cc$OMP+ zqfi,pvervel,zdufi,zdvfi,zdtfi,zdqfi,zdpsrf)532 533 c PRIVATE(zplev_omp,zplay_omp,zphi_omp,zphis_omp,534 c c$OMP+ presnivs_omp,zufi_omp,zvfi_omp,ztfi_omp,535 c c$OMP+ zqfi_omp,pvervel_omp,zdufi_omp,zdvfi_omp,536 c c$OMP+ zdtfi_omp,zdqfi_omp,zdpsrf_omp)537 482 538 483 c$OMP BARRIER … … 549 494 allocate(ztfi_omp(klon,llm)) 550 495 allocate(zqfi_omp(klon,llm,nqtot)) 551 c allocate(pvervel_omp(klon,llm))552 496 allocate(zdufi_omp(klon,llm)) 553 497 allocate(zdvfi_omp(klon,llm)) … … 616 560 enddo 617 561 618 c do l=1,llm619 c do i=1,klon620 c pvervel_omp(i,l)=pvervel(offset+i,l)621 c enddo622 c enddo623 624 562 do l=1,llm 625 563 do i=1,klon … … 659 597 660 598 c$OMP BARRIER 661 cym call WriteField_phy_p('zdtfi_omp',zdtfi_omp(:,:),llm) 662 599 600 if (planet_type=="earth") then 601 #ifdef CPP_EARTH 663 602 CALL physiq (klon, 664 603 . llm, 665 604 . debut, 666 605 . lafin, 667 . rdayvrai,668 . heure,606 . jD_cur, 607 . jH_cur, 669 608 . dtphys, 670 609 . zplev_omp, … … 678 617 . ztfi_omp, 679 618 . zqfi_omp, 680 c . pvervel_omp,681 619 c#ifdef INCA 682 620 . flxwfi_omp, … … 690 628 . pducov, 691 629 . PVteta) 692 693 cym call WriteField_phy_p('zdtfi_omp',zdtfi_omp(:,:),llm) 694 630 #endif 631 endif !of if (planet_type=="earth") 695 632 c$OMP BARRIER 696 633 … … 748 685 enddo 749 686 enddo 750 751 c do l=1,llm752 c do i=1,klon753 c pvervel(offset+i,l)=pvervel_omp(i,l)754 c enddo755 c enddo756 687 757 688 do l=1,llm … … 786 717 787 718 788 cc$OMP END PARALLEL789 719 klon=klon_mpi 790 720 500 CONTINUE … … 792 722 793 723 c$OMP MASTER 794 cym call WriteField_phy('zdtfi',zdtfi(:,:),llm)795 724 call stop_timer(timer_physic) 796 725 c$OMP END MASTER … … 908 837 DO l=1,llm 909 838 910 !!cdir NODEP 839 !CDIR ON_ADB(index_i) 840 !CDIR ON_ADB(index_j) 841 !cdir NODEP 911 842 do ig0=kstart,kend 912 843 i=index_i(ig0) … … 932 863 c 62. humidite specifique 933 864 c --------------------- 934 935 DO iq=1,nqtot 936 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 937 DO l=1,llm 938 !!cdir NODEP 939 do ig0=kstart,kend 940 i=index_i(ig0) 941 j=index_j(ig0) 942 pdqfi(i,j,l,iq) = zdqfi(ig0,l,iq) 943 if (i==1) pdqfi(iip1,j,l,iq) = zdqfi(ig0,l,iq) 944 enddo 945 946 if (is_north_pole) then 947 do i=1,iip1 948 pdqfi(i,1,l,iq) = zdqfi(1,l,iq) 949 enddo 950 endif 951 952 if (is_south_pole) then 953 do i=1,iip1 954 pdqfi(i,jjp1,l,iq) = zdqfi(klon,l,iq) 955 enddo 956 endif 957 958 ENDDO 959 c$OMP END DO NOWAIT 960 ENDDO 865 ! Ehouarn: removed this useless bit: was overwritten at step 63 anyways 866 ! DO iq=1,nqtot 867 !c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 868 ! DO l=1,llm 869 !!!cdir NODEP 870 ! do ig0=kstart,kend 871 ! i=index_i(ig0) 872 ! j=index_j(ig0) 873 ! pdqfi(i,j,l,iq) = zdqfi(ig0,l,iq) 874 ! if (i==1) pdqfi(iip1,j,l,iq) = zdqfi(ig0,l,iq) 875 ! enddo 876 ! 877 ! if (is_north_pole) then 878 ! do i=1,iip1 879 ! pdqfi(i,1,l,iq) = zdqfi(1,l,iq) 880 ! enddo 881 ! endif 882 ! 883 ! if (is_south_pole) then 884 ! do i=1,iip1 885 ! pdqfi(i,jjp1,l,iq) = zdqfi(klon,l,iq) 886 ! enddo 887 ! endif 888 ! ENDDO 889 !c$OMP END DO NOWAIT 890 ! ENDDO 961 891 962 892 c 63. traceurs … … 971 901 972 902 C 973 903 !cdir NODEP 974 904 DO iq=1,nqtot 975 905 iiq=niadv(iq) 976 906 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 977 907 DO l=1,llm 978 979 !!cdir NODEP 908 !CDIR ON_ADB(index_i) 909 !CDIR ON_ADB(index_j) 910 !cdir NODEP 980 911 DO ig0=kstart,kend 981 912 i=index_i(ig0) … … 1005 936 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 1006 937 DO l=1,llm 1007 !!cdir NODEP 938 !CDIR ON_ADB(index_i) 939 !CDIR ON_ADB(index_j) 940 !cdir NODEP 1008 941 do ig0=kstart,kend 1009 942 i=index_i(ig0) … … 1048 981 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 1049 982 DO l=1,llm 1050 !!cdir NODEP 983 !CDIR ON_ADB(index_i) 984 !CDIR ON_ADB(index_j) 985 !cdir NODEP 1051 986 do ig0=kstart,kend 1052 987 i=index_i(ig0) … … 1111 1046 firstcal = .FALSE. 1112 1047 1048 #else 1049 write(*,*) "calfis_p: for now can only work with parallel physics" 1050 stop 1051 #endif 1052 ! of #ifdef CPP_EARTH 1113 1053 RETURN 1114 1054 END -
LMDZ4/trunk/libf/dyn3dpar/coefpoly.F
r774 r1279 19 19 c On en revient a resoudre un systeme de 4 equat.a 4 inconnues a0,a1,a2,a3 20 20 21 REAL *8Xf1, Xf2,Xprim1,Xprim2, xtild1,xtild2, xi22 REAL *8Xfout, Xprim23 REAL *8a1,a2,a3,a0, xtil1car, xtil2car,derr,x1x2car21 REAL(KIND=8) Xf1, Xf2,Xprim1,Xprim2, xtild1,xtild2, xi 22 REAL(KIND=8) Xfout, Xprim 23 REAL(KIND=8) a1,a2,a3,a0, xtil1car, xtil2car,derr,x1x2car 24 24 25 25 xtil1car = xtild1 * xtild1 -
LMDZ4/trunk/libf/dyn3dpar/comconst.h
r1107 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 !----------------------------------------------------------------------- … … 7 7 COMMON/comconst/im,jm,lllm,imp1,jmp1,lllmm1,lllmp1,lcl, & 8 8 & dtvr,daysec, & 9 & pi,dtphys,dtdiss,rad,r,cpp,kappa,cotot,unsim,g,omeg 9 & pi,dtphys,dtdiss,rad,r,cpp,kappa,cotot,unsim,g,omeg & 10 & ,dissip_factz,dissip_deltaz,dissip_zref & 11 & ,iflag_top_bound,tau_top_bound 12 10 13 11 14 INTEGER im,jm,lllm,imp1,jmp1,lllmm1,lllmp1,lcl … … 13 16 REAL pi,dtphys,dtdiss,rad,r,cpp,kappa 14 17 REAL cotot,unsim,g,omeg 18 REAL dissip_factz,dissip_deltaz,dissip_zref 19 INTEGER iflag_top_bound 20 REAL tau_top_bound 21 15 22 16 23 !----------------------------------------------------------------------- -
LMDZ4/trunk/libf/dyn3dpar/comvert.h
r774 r1279 2 2 ! $Header$ 3 3 ! 4 c-----------------------------------------------------------------------5 cINCLUDE 'comvert.h'4 !----------------------------------------------------------------------- 5 ! INCLUDE 'comvert.h' 6 6 7 COMMON/comvert/ap(llm+1),bp(llm+1),presnivs(llm),dpres(llm) ,8 ,pa,preff,nivsigs(llm),nivsig(llm+1)7 COMMON/comvert/ap(llm+1),bp(llm+1),presnivs(llm),dpres(llm), & 8 & pa,preff,nivsigs(llm),nivsig(llm+1) 9 9 10 10 REAL ap,bp,presnivs,dpres,pa,preff,nivsigs,nivsig 11 11 12 c-----------------------------------------------------------------------12 !----------------------------------------------------------------------- -
LMDZ4/trunk/libf/dyn3dpar/conf_gcm.F
r1146 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 c … … 44 44 !#include "clesphys.h" 45 45 #include "iniprint.h" 46 #include "temps.h" 47 #include "comconst.h" 46 48 47 49 ! FH 2008/05/09 On elimine toutes les clefs physiques dans la dynamique … … 121 123 CALL getin('planet_type',planet_type) 122 124 125 !Config Key = calend 126 !Config Desc = type de calendrier utilise 127 !Config Def = earth_360d 128 !Config Help = valeur possible: earth_360d, earth_365d, earth_366d 129 !Config 130 calend = 'earth_360d' 131 CALL getin('calend', calend) 132 123 133 !Config Key = dayref 124 134 !Config Desc = Jour de l'etat initial … … 278 288 CALL getin('tetatemp',tetatemp ) 279 289 290 ! Parametres controlant la variation sur la verticale des constantes de 291 ! dissipation. 292 ! Pour le moment actifs uniquement dans la version a 39 niveaux 293 ! avec ok_strato=y 294 295 dissip_factz=4. 296 dissip_deltaz=10. 297 dissip_zref=30. 298 CALL getin('dissip_factz',dissip_factz ) 299 CALL getin('dissip_deltaz',dissip_deltaz ) 300 CALL getin('dissip_zref',dissip_zref ) 301 302 iflag_top_bound=1 303 tau_top_bound=1.e-5 304 CALL getin('iflag_top_bound',iflag_top_bound) 305 CALL getin('tau_top_bound',tau_top_bound) 306 307 ! 280 308 !Config Key = coefdis 281 309 !Config Desc = coefficient pour gamdissip … … 569 597 write(lunout,*)' Configuration des parametres du gcm: ' 570 598 write(lunout,*)' planet_type = ', planet_type 599 write(lunout,*)' calend = ', calend 571 600 write(lunout,*)' dayref = ', dayref 572 601 write(lunout,*)' anneeref = ', anneeref … … 590 619 write(lunout,*)' read_start = ', read_start 591 620 write(lunout,*)' iflag_phys = ', iflag_phys 621 write(lunout,*)' iphysiq = ', iphysiq 592 622 write(lunout,*)' clonn = ', clonn 593 623 write(lunout,*)' clatt = ', clatt … … 776 806 !Config Desc = activation de la version strato 777 807 !Config Def = .FALSE. 778 !Config Help = active la version stratosph �rique de LMDZ de F. Lott808 !Config Help = active la version stratosphérique de LMDZ de F. Lott 779 809 780 810 ok_strato=.FALSE. … … 792 822 write(lunout,*)' Configuration des parametres du gcm: ' 793 823 write(lunout,*)' planet_type = ', planet_type 824 write(lunout,*)' calend = ', calend 794 825 write(lunout,*)' dayref = ', dayref 795 826 write(lunout,*)' anneeref = ', anneeref … … 813 844 write(lunout,*)' read_start = ', read_start 814 845 write(lunout,*)' iflag_phys = ', iflag_phys 815 write(lunout,*)' clon = ', clon 846 write(lunout,*)' iphysiq = ', iphysiq 847 write(lunout,*)' clon = ', clon 816 848 write(lunout,*)' clat = ', clat 817 849 write(lunout,*)' grossismx = ', grossismx -
LMDZ4/trunk/libf/dyn3dpar/cray.F
r774 r1279 13 13 real sx((n-1)*incx+1),sy((n-1)*incy+1) 14 14 c 15 if (incx.eq.1.and.incy.eq.1) then 16 do 10 i=1,n 17 sy(i)=sx(i) 18 10 continue 19 else 15 20 iy=1 16 21 ix=1 17 do 1 0i=1,n22 do 11 i=1,n 18 23 sy(iy)=sx(ix) 19 24 ix=ix+incx 20 25 iy=iy+incy 21 10 continue 26 11 continue 27 endif 22 28 c 23 29 return … … 32 38 c 33 39 ssum=0. 40 if (incx.eq.1) then 41 do 10 i=1,n 42 ssum=ssum+sx(i) 43 10 continue 44 else 34 45 ix=1 35 do 1 0i=1,n46 do 11 i=1,n 36 47 ssum=ssum+sx(ix) 37 48 ix=ix+incx 38 10 continue 49 11 continue 50 endif 39 51 c 40 52 return -
LMDZ4/trunk/libf/dyn3dpar/create_etat0_limit.F
r1146 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 PROGRAM create_etat0_limit 5 #ifdef CPP_EARTH 6 ! This prog. is designed to work for Earth 5 7 USE dimphy 6 8 USE comgeomphy 7 9 USE mod_phys_lmdz_para 8 10 USE mod_const_mpi 9 USE phys_state_var_mod10 11 USE infotrac 12 #ifdef CPP_IOIPSL 13 use ioipsl, only: ioconf_calendar 14 #endif 11 15 IMPLICIT NONE 12 16 c … … 33 37 #include "indicesol.h" 34 38 #include "control.h" 35 #include "clesphys.h"36 39 REAL :: masque(iip1,jjp1) 37 40 ! REAL :: pctsrf(iim*(jjm-1)+2, nbsrf) … … 41 44 call init_const_lmdz( 42 45 $ nbtr,anneeref,dayref, 43 $ iphysiq, day_step,nday)46 $ iphysiq, day_step,nday) 44 47 #endif 45 48 print *, 'nbtr =' , nbtr … … 57 60 & for 1 process and 1 task') 58 61 ENDIF 59 CALL phys_state_var_init60 62 call InitComgeomphy 61 63 64 #ifdef CPP_IOIPSL 65 call ioconf_calendar('360d') 66 #endif 62 67 63 68 WRITE(6,*) ' ********************* ' … … 76 81 1 FORMAT(//) 77 82 83 #endif 84 ! of #ifdef CPP_EARTH 78 85 STOP 79 86 END -
LMDZ4/trunk/libf/dyn3dpar/diagedyn.F
r1146 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 … … 315 315 C 316 316 #else 317 write(lunout,*) ,'diagedyn: Needs Earth physics to function'317 write(lunout,*)'diagedyn: Needs Earth physics to function' 318 318 #endif 319 319 ! #endif of #ifdef CPP_EARTH -
LMDZ4/trunk/libf/dyn3dpar/disvert.F
r1000 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 SUBROUTINE disvert(pa,preff,ap,bp,dpres,presnivs,nivsigs,nivsig) … … 36 36 c 37 37 INTEGER l 38 REAL snorm 38 REAL snorm,dsigmin 39 39 REAL alpha,beta,gama,delta,deltaz,h 40 40 INTEGER np,ierr … … 96 96 WRITE(LUNOUT,*)'WARNING!!! Ancienne discretisation verticale' 97 97 98 if (ok_strato) then 99 if (llm==39) then 100 dsigmin=0.3 101 else if (llm==50) then 102 dsigmin=1. 103 else 104 WRITE(LUNOUT,*) 'ATTENTION discretisation z a ajuster' 105 dsigmin=1. 106 endif 107 WRITE(LUNOUT,*) 'Discretisation verticale DSIGMIN=',dsigmin 108 endif 109 98 110 h=7. 99 111 snorm = 0. … … 102 114 103 115 IF (ok_strato) THEN 104 dsig(l) =( 1.0+ 7.0 * SIN(x)**2)116 dsig(l) =(dsigmin + 7.0 * SIN(x)**2) 105 117 & *(0.5*(1.-tanh(1.*(x-asin(1.))/asin(1.))))**2 106 118 ELSE … … 149 161 c 150 162 ENDDO 163 164 bp(1)=1. 165 ap(1)=0. 166 151 167 ap(llmp1) = pa * ( sig(llmp1) - bp(llmp1) ) 152 168 -
LMDZ4/trunk/libf/dyn3dpar/dump2d.F
r774 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 SUBROUTINE dump2d(im,jm,z,nom_z) … … 6 6 INTEGER im,jm 7 7 REAL z(im,jm) 8 CHARACTER *80nom_z8 CHARACTER (len=*) :: nom_z 9 9 10 10 INTEGER i,j,imin,illm,jmin,jllm 11 11 REAL zmin,zllm 12 12 13 PRINT*,nom_z13 WRITE(*,*) "dump2d: ",trim(nom_z) 14 14 15 15 zmin=z(1,1) … … 39 39 40 40 IF(zllm.GT.zmin) THEN 41 DO j=1,jm42 WRITE(*,'(72i1)') (NINT(10.*(z(i,j)-zmin)/(zllm-zmin)),i=1,im)43 ENDDO41 DO j=1,jm 42 WRITE(*,'(600i1)') (NINT(10.*(z(i,j)-zmin)/(zllm-zmin)),i=1,im) 43 ENDDO 44 44 ENDIF 45 45 RETURN -
LMDZ4/trunk/libf/dyn3dpar/dynredem.F
r1146 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 c 5 5 SUBROUTINE dynredem0(fichnom,iday_end,phis) 6 #ifdef CPP_IOIPSL 6 7 USE IOIPSL 8 #endif 7 9 USE infotrac 8 10 IMPLICIT NONE … … 55 57 56 58 c----------------------------------------------------------------------- 57 modname='dynredem' 58 59 modname='dynredem0' 60 61 #ifdef CPP_IOIPSL 59 62 call ymds2ju(annee_ref, 1, iday_end, 0.0, zjulian) 60 63 call ju2ymds(zjulian, yyears0, mmois0, jjour0, hours) 61 64 #else 65 ! set yyears0, mmois0, jjour0 to 0,1,1 (hours is not used) 66 yyears0=0 67 mmois0=1 68 jjour0=1 69 #endif 62 70 63 71 DO l=1,length … … 457 465 dims4(3) = idim_s 458 466 dims4(4) = idim_tim 459 467 IF(nqtot.GE.1) THEN 460 468 DO iq=1,nqtot 461 469 cIM 220306 BEG … … 468 476 ierr = NF_PUT_ATT_TEXT (nid, nvarid, "title", 12,ttext(iq)) 469 477 ENDDO 478 ENDIF 470 479 c 471 480 dims4(1) = idim_rlonv … … 631 640 END IF 632 641 642 IF(nqtot.GE.1) THEN 633 643 do iq=1,nqtot 634 644 … … 701 711 702 712 ENDDO 713 ENDIF 703 714 c 704 715 ierr = NF_INQ_VARID(nid, "masse", nvarid) -
LMDZ4/trunk/libf/dyn3dpar/dynredem_p.F
r1146 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 c 5 5 SUBROUTINE dynredem0_p(fichnom,iday_end,phis) 6 #ifdef CPP_IOIPSL 6 7 USE IOIPSL 8 #endif 7 9 USE parallel 8 10 USE infotrac … … 57 59 if (mpi_rank==0) then 58 60 59 modname='dynredem' 60 61 modname='dynredem0_p' 62 63 #ifdef CPP_IOIPSL 61 64 call ymds2ju(annee_ref, 1, iday_end, 0.0, zjulian) 62 65 call ju2ymds(zjulian, yyears0, mmois0, jjour0, hours) 63 66 #else 67 ! set yyears0, mmois0, jjour0 to 0,1,1 (hours is not used) 68 yyears0=0 69 mmois0=1 70 jjour0=1 71 #endif 64 72 65 73 DO l=1,length -
LMDZ4/trunk/libf/dyn3dpar/etat0_netcdf.F
r1146 r1279 9 9 USE ioipsl 10 10 USE dimphy 11 USE infotrac 11 12 USE fonte_neige_mod 12 13 USE pbl_surface_mod 13 14 USE phys_state_var_mod 14 15 USE filtreg_mod 15 USE infotrac 16 use regr_lat_time_climoz_m, only: regr_lat_time_climoz 17 use conf_phys_m, only: conf_phys 16 18 #endif 17 19 !#endif of #ifdef CPP_EARTH 20 use netcdf, only: nf90_open, NF90_NOWRITE, nf90_close 18 21 ! 19 22 IMPLICIT NONE 20 23 ! 21 #include "netcdf.inc"22 24 #include "dimensions.h" 23 25 #include "paramet.h" … … 43 45 ! local variables: 44 46 REAL :: latfi(klon), lonfi(klon) 45 REAL :: orog(iip1,jjp1), rugo(iip1,jjp1) ,46 .psol(iip1, jjp1), phis(iip1, jjp1)47 REAL :: orog(iip1,jjp1), rugo(iip1,jjp1) 48 REAL :: psol(iip1, jjp1), phis(iip1, jjp1) 47 49 REAL :: p3d(iip1, jjp1, llm+1) 48 50 REAL :: uvent(iip1, jjp1, llm) … … 52 54 REAL,ALLOCATABLE :: q3d(:, :, :,:) 53 55 REAL :: tsol(klon), qsol(klon), sn(klon) 54 REAL :: tsolsrf(klon,nbsrf), qsolsrf(klon,nbsrf),snsrf(klon,nbsrf) 56 !! REAL :: tsolsrf(klon,nbsrf) 57 real qsolsrf(klon,nbsrf),snsrf(klon,nbsrf) 55 58 REAL :: albe(klon,nbsrf), evap(klon,nbsrf) 56 59 REAL :: alblw(klon,nbsrf) … … 72 75 ! 73 76 74 CHARACTER *80:: varname77 CHARACTER(len=80) :: varname 75 78 ! 76 79 INTEGER :: i,j, ig, l, ji,ii1,ii2 77 INTEGER :: nq78 80 REAL :: xpi 79 81 ! … … 103 105 REAL :: w(ip1jmp1,llm) 104 106 REAL ::phystep 105 REAL :: rugsrel(iip1*jjp1)107 CC REAL :: rugsrel(iip1*jjp1) 106 108 REAL :: fder(klon) 107 real zrel(iip1*jjp1),chmin,chmax108 109 CHARACTER*80:: visu_file109 !! real zrel(iip1*jjp1),chmin,chmax 110 111 !! CHARACTER(len=80) :: visu_file 110 112 INTEGER :: visuid 111 113 … … 127 129 logical :: ok_journe, ok_mensuel, ok_instan, ok_hf 128 130 logical :: ok_LES 129 LOGICAL :: ok_ade, ok_aie, aerosol_couple 131 LOGICAL :: ok_ade, ok_aie, aerosol_couple, new_aod 132 INTEGER :: flag_aerosol 130 133 REAL :: bl95_b0, bl95_b1 131 134 real :: fact_cldcon, facttemps,ratqsbas,ratqshaut 135 real :: tau_ratqs 132 136 integer :: iflag_cldcon 133 137 integer :: iflag_ratqs … … 141 145 real :: seuil_inversion 142 146 147 integer read_climoz ! read ozone climatology 148 C Allowed values are 0, 1 and 2 149 C 0: do not read an ozone climatology 150 C 1: read a single ozone climatology that will be used day and night 151 C 2: read two ozone climatologies, the average day and night 152 C climatology and the daylight climatology 153 143 154 ! 144 155 ! Constantes … … 167 178 & fact_cldcon, facttemps,ok_newmicro,iflag_radia, & 168 179 & iflag_cldcon, & 169 & iflag_ratqs,ratqsbas,ratqshaut, 180 & iflag_ratqs,ratqsbas,ratqshaut,tau_ratqs, & 170 181 & ok_ade, ok_aie, aerosol_couple, & 182 & flag_aerosol, new_aod, & 171 183 & bl95_b0, bl95_b1, & 172 184 & iflag_thermals,nsplit_thermals,tau_thermals, & 173 185 & iflag_thermals_ed,iflag_thermals_optflux, & 174 & iflag_coupl,iflag_clos,iflag_wake ) 186 & iflag_coupl,iflag_clos,iflag_wake, read_climoz ) 187 188 ! co2_ppm0 : initial value of atmospheric CO2 from .def file (co2_ppm value) 189 co2_ppm0 = co2_ppm 175 190 176 191 dtvr = daysec/FLOAT(day_step) … … 179 194 CALL iniconst() 180 195 CALL inigeom() 181 ! 196 197 ! Initialisation pour traceurs 198 call infotrac_init 199 ALLOCATE(q3d(iip1, jjp1, llm, nqtot)) 200 182 201 CALL inifilr() 183 C init pour traceurs 184 call infotrac_init 185 ALLOCATE(q3d(iip1, jjp1, llm,nqtot)) 186 ! CALL phys_state_var_init() 202 CALL phys_state_var_init(read_climoz) 187 203 ! 188 204 latfi(1) = ASIN(1.0) … … 241 257 242 258 write(*,*)'Essai de lecture masque ocean' 243 iret = nf _open("o2a.nc", NF_NOWRITE, nid_o2a)259 iret = nf90_open("o2a.nc", NF90_NOWRITE, nid_o2a) 244 260 if (iret .ne. 0) then 245 261 write(*,*)'ATTENTION!! pas de fichier o2a.nc trouve' … … 260 276 else 261 277 couple = .true. 262 iret = nf _close(nid_o2a)278 iret = nf90_close(nid_o2a) 263 279 call flininfo("o2a.nc", iml_omask, jml_omask, llm_tmp, ttm_tmp 264 280 $ , nid_o2a) … … 397 413 . maxval(qsat(:,:,:)) 398 414 ! 399 WRITE(*,*) 'QSAT :', qsat(10,20,:)415 CC WRITE(*,*) 'QSAT :', qsat(10,20,:) 400 416 ! 401 417 varname = 'q' … … 408 424 q3d(:,:,:,1) = qd(:,:,:) 409 425 ! 426 427 ! Ozone climatology: 428 if (read_climoz >= 1) call regr_lat_time_climoz(read_climoz) 429 410 430 varname = 'tsol' 411 431 ! This line needs to be replaced by a call to restget to get the values in the restart file … … 472 492 . jjm, rlonu, rlatv , interbar ) 473 493 c 474 rugsrel(:) = 0.0475 IF(ok_orodr) THEN476 DO i = 1, iip1* jjp1477 rugsrel(i) = MAX( 1.e-05, zstd(i)* zsig(i) /2. )478 ENDDO479 ENDIF494 cc rugsrel(:) = 0.0 495 cc IF(ok_orodr) THEN 496 cc DO i = 1, iip1* jjp1 497 cc rugsrel(i) = MAX( 1.e-05, zstd(i)* zsig(i) /2. ) 498 cc ENDDO 499 cc ENDIF 480 500 481 501 … … 647 667 itau_phy = 0 648 668 iday = dayref +itau/day_step 649 time = FLOAT(itau-(iday-dayref)*day_step)/day_step669 time = real(itau-(iday-dayref)*day_step)/day_step 650 670 c 651 671 IF(time.GT.1) THEN … … 748 768 749 769 C Sortie Visu pour les champs dynamiques 750 if (1.eq.0 ) then751 print*,'sortie visu'752 time_step = 1.753 t_ops = 2.754 t_wrt = 2.755 itau = 2.756 visu_file='Etat0_visu.nc'757 CALL initdynav(visu_file,dayref,anneeref,time_step,758 . t_ops, t_wrt, visuid)759 CALL writedynav(visuid, itau,vvent ,760 . uvent,tpot,pk,phi,q3d,masse,psol,phis)761 else770 cc if (1.eq.0 ) then 771 cc print*,'sortie visu' 772 cc time_step = 1. 773 cc t_ops = 2. 774 cc t_wrt = 2. 775 cc itau = 2. 776 cc visu_file='Etat0_visu.nc' 777 cc CALL initdynav(visu_file,dayref,anneeref,time_step, 778 cc . t_ops, t_wrt, visuid) 779 cc CALL writedynav(visuid, itau,vvent , 780 cc . uvent,tpot,pk,phi,q3d,masse,psol,phis) 781 cc else 762 782 print*,'CCCCCCCCCCCCCCCCCC REACTIVER SORTIE VISU DANS ETAT0' 763 endif783 cc endif 764 784 print*,'entree histclo' 765 785 CALL histclo … … 770 790 ! 771 791 END SUBROUTINE etat0_netcdf 772 -
LMDZ4/trunk/libf/dyn3dpar/fluxstokenc_p.F
r1146 r1279 1 ! 2 ! $Id$ 3 ! 1 4 SUBROUTINE fluxstokenc_p(pbaru,pbarv,masse,teta,phi,phis, 2 5 . time_step,itau ) 6 #ifdef CPP_EARTH 7 ! This routine is designed to work for Earth and with ioipsl 3 8 4 9 USE IOIPSL … … 21 26 #include "tracstoke.h" 22 27 #include "temps.h" 28 #include "iniprint.h" 23 29 24 30 REAL time_step,t_wrt, t_ops … … 236 242 ENDIF ! if iadvtr.EQ.istdyn 237 243 244 #else 245 write(lunout,*) 246 & 'fluxstokenc: Needs Earth physics (and ioipsl) to function' 247 #endif 248 ! of #ifdef CPP_EARTH 238 249 RETURN 239 250 END -
LMDZ4/trunk/libf/dyn3dpar/fxyhyper.F
r774 r1279 41 41 REAL rlonu(iip1),xprimu(iip1),rlonv(iip1),xprimv(iip1), 42 42 , rlonm025(iip1),xprimm025(iip1), rlonp025(iip1),xprimp025(iip1) 43 REAL *8dxmin, dxmax , dymin, dymax43 REAL(KIND=8) dxmin, dxmax , dymin, dymax 44 44 45 45 c .... var. locales ..... -
LMDZ4/trunk/libf/dyn3dpar/fyhyp.F
r764 r1279 50 50 51 51 REAL dzoom 52 REAL *8ylat(jjp1), yprim(jjp1)53 REAL *8yuv54 REAL *8yt(0:nmax2)55 REAL *8fhyp(0:nmax2),beta,Ytprim(0:nmax2),fxm(0:nmax2)52 REAL(KIND=8) ylat(jjp1), yprim(jjp1) 53 REAL(KIND=8) yuv 54 REAL(KIND=8) yt(0:nmax2) 55 REAL(KIND=8) fhyp(0:nmax2),beta,Ytprim(0:nmax2),fxm(0:nmax2) 56 56 SAVE Ytprim, yt,Yf 57 REAL *8Yf(0:nmax2),yypr(0:nmax2)58 REAL *8yvrai(jjp1), yprimm(jjp1),ylatt(jjp1)59 REAL *8pi,depi,pis2,epsilon,y0,pisjm60 REAL *8yo1,yi,ylon2,ymoy,Yprimin,champmin,champmax61 REAL *8yfi,Yf1,ffdy62 REAL *8ypn,deply,y0057 REAL(KIND=8) Yf(0:nmax2),yypr(0:nmax2) 58 REAL(KIND=8) yvrai(jjp1), yprimm(jjp1),ylatt(jjp1) 59 REAL(KIND=8) pi,depi,pis2,epsilon,y0,pisjm 60 REAL(KIND=8) yo1,yi,ylon2,ymoy,Yprimin,champmin,champmax 61 REAL(KIND=8) yfi,Yf1,ffdy 62 REAL(KIND=8) ypn,deply,y00 63 63 SAVE y00, deply 64 64 … … 66 66 INTEGER jpn,jjpn 67 67 SAVE jpn 68 REAL *8a0,a1,a2,a3,yi2,heavyy0,heavyy0m69 REAL *8fa(0:nmax2),fb(0:nmax2)68 REAL(KIND=8) a0,a1,a2,a3,yi2,heavyy0,heavyy0m 69 REAL(KIND=8) fa(0:nmax2),fb(0:nmax2) 70 70 REAL y0min,y0max 71 71 72 REAL *8heavyside72 REAL(KIND=8) heavyside 73 73 74 74 pi = 2. * ASIN(1.) -
LMDZ4/trunk/libf/dyn3dpar/gcm.F
r1147 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 c … … 12 12 USE mod_const_mpi, ONLY: init_const_mpi 13 13 USE parallel 14 USE mod_phys_lmdz_para, ONLY : klon_mpi_para_nb15 14 USE infotrac 16 15 USE mod_interface_dyn_phys 17 16 USE mod_hallo 18 17 USE Bands 19 18 USE getparam 20 19 USE filtreg_mod 21 20 … … 23 22 #ifdef CPP_EARTH 24 23 USE mod_grid_phy_lmdz 24 USE mod_phys_lmdz_para, ONLY : klon_mpi_para_nb 25 25 USE mod_phys_lmdz_omp_data, ONLY: klon_omp 26 26 USE dimphy … … 113 113 real time_step, t_wrt, t_ops 114 114 115 c REAL rdayvrai,rdaym_ini,rday_ecri116 c LOGICAL first117 115 118 116 LOGICAL call_iniphys … … 133 131 134 132 character (len=80) :: dynhist_file, dynhistave_file 135 character (len=20) :: modname136 character (len=80) :: abort_message137 138 C Calendrier139 LOGICAL true_calendar140 PARAMETER (true_calendar = .false.) 133 character (len=20) :: modname 134 character (len=80) :: abort_message 135 ! locales pour gestion du temps 136 INTEGER :: an, mois, jour 137 REAL :: heure 138 141 139 142 140 c----------------------------------------------------------------------- … … 165 163 166 164 167 c----------------------------------------------------------------------- 168 c Choix du calendrier 169 c ------------------- 170 171 #ifdef CPP_IOIPSL 172 if (true_calendar) then 173 call ioconf_calendar('gregorian') 174 else 175 call ioconf_calendar('360d') 176 endif 177 #endif 165 178 166 c---------------------------------------------------------------------- 179 167 c lecture des fichiers gcm.def ou run.def … … 194 182 195 183 call init_parallel 184 call ini_getparam("out.def") 196 185 call Read_Distrib 197 186 ! Ehouarn : temporarily (?) keep this only for Earth … … 202 191 endif ! of if (planet_type.eq."earth") 203 192 CALL set_bands 193 #ifdef CPP_EARTH 194 ! Ehouarn: For now only Earth physics is parallel 204 195 CALL Init_interface_dyn_phys 196 #endif 205 197 CALL barrier 206 198 … … 220 212 #endif 221 213 endif ! of if (planet_type.eq."earth") 214 215 c----------------------------------------------------------------------- 216 c Choix du calendrier 217 c ------------------- 218 219 c calend = 'earth_365d' 220 221 #ifdef CPP_IOIPSL 222 if (calend == 'earth_360d') then 223 call ioconf_calendar('360d') 224 write(lunout,*)'CALENDRIER CHOISI: Terrestre a 360 jours/an' 225 else if (calend == 'earth_365d') then 226 call ioconf_calendar('noleap') 227 write(lunout,*)'CALENDRIER CHOISI: Terrestre a 365 jours/an' 228 else if (calend == 'earth_366d') then 229 call ioconf_calendar('gregorian') 230 write(lunout,*)'CALENDRIER CHOISI: Terrestre bissextile' 231 else 232 abort_message = 'Mauvais choix de calendrier' 233 call abort_gcm(modname,abort_message,1) 234 endif 235 #endif 222 236 223 237 IF (config_inca /= 'none') THEN … … 305 319 if (annee_ref .ne. anneeref .or. day_ref .ne. dayref) then 306 320 write(lunout,*) 307 . ' Attention les dates initiales lues dans le fichier'321 . 'GCM: Attention les dates initiales lues dans le fichier' 308 322 write(lunout,*) 309 323 . ' restart ne correspondent pas a celles lues dans ' 310 324 write(lunout,*)' gcm.def' 325 write(lunout,*)' annee_ref=',annee_ref," anneeref=",anneeref 326 write(lunout,*)' day_ref=',day_ref," dayref=",dayref 311 327 if (raz_date .ne. 1) then 312 328 write(lunout,*) 313 . ' On garde les dates du fichier restart'329 . 'GCM: On garde les dates du fichier restart' 314 330 else 315 331 annee_ref = anneeref … … 320 336 time_0 = 0. 321 337 write(lunout,*) 322 . ' On reinitialise a la date lue dans gcm.def'338 . 'GCM: On reinitialise a la date lue dans gcm.def' 323 339 endif 324 340 ELSE 325 341 raz_date = 0 326 342 endif 343 327 344 #ifdef CPP_IOIPSL 328 call ioconf_startdate(annee_ref,0,day_ref,0.) 329 #endif 330 345 mois = 1 346 heure = 0. 347 call ymds2ju(annee_ref, mois, day_ref, heure, jD_ref) 348 jH_ref = jD_ref - int(jD_ref) 349 jD_ref = int(jD_ref) 350 351 call ioconf_startdate(INT(jD_ref), jH_ref) 352 353 write(lunout,*)'DEBUG' 354 write(lunout,*)'annee_ref, mois, day_ref, heure, jD_ref' 355 write(lunout,*)annee_ref, mois, day_ref, heure, jD_ref 356 call ju2ymds(jD_ref+jH_ref,an, mois, jour, heure) 357 write(lunout,*)'jD_ref+jH_ref,an, mois, jour, heure' 358 write(lunout,*)jD_ref+jH_ref,an, mois, jour, heure 359 #else 360 ! Ehouarn: we still need to define JD_ref and JH_ref 361 ! and since we don't know how many days there are in a year 362 ! we set JD_ref to 0 (this should be improved ...) 363 jD_ref=0 364 jH_ref=0 365 #endif 331 366 332 367 c nombre d'etats dans les fichiers demarrage et histoire … … 405 440 406 441 c----------------------------------------------------------------------- 407 c Initialisation des dimensions d'INCA :408 c --------------------------------------409 IF (config_inca /= 'none') THEN410 !$OMP PARALLEL411 #ifdef INCA412 CALL init_inca_dim(klon_omp,llm,iim,jjm,413 $ rlonu,rlatu,rlonv,rlatv)414 #endif415 !$OMP END PARALLEL416 END IF417 418 c-----------------------------------------------------------------------419 442 c Initialisation des I/O : 420 443 c ------------------------ … … 425 448 300 FORMAT('1'/,15x,'run du jour',i7,2x,'au jour',i7//) 426 449 427 !#ifdef CPP_IOIPSL 450 #ifdef CPP_IOIPSL 451 call ju2ymds(jD_ref + day_ini - day_ref, an, mois, jour, heure) 452 write (lunout,301)jour, mois, an 453 call ju2ymds(jD_ref + day_end - day_ref, an, mois, jour, heure) 454 write (lunout,302)jour, mois, an 455 301 FORMAT('1'/,15x,'run du ', i2,'/',i2,'/',i4) 456 302 FORMAT('1'/,15x,' au ', i2,'/',i2,'/',i4) 457 #endif 458 428 459 if (planet_type.eq."earth") then 429 #ifdef CPP_EARTH 430 CALL dynredem0_p("restart.nc", day_end, phis) 431 #endif 460 CALL dynredem0_p("restart.nc", day_end, phis) 432 461 endif 433 462 … … 439 468 t_ops = iecri * daysec 440 469 t_wrt = iecri * daysec 441 CALL inithist_p(dynhist_file,day_ref,annee_ref,time_step,442 . t_ops, t_wrt, histid, histvid)470 ! CALL inithist_p(dynhist_file,day_ref,annee_ref,time_step, 471 ! . t_ops, t_wrt, histid, histvid) 443 472 444 473 IF (ok_dynzon) THEN 445 474 t_ops = iperiod * time_step 446 475 t_wrt = periodav * daysec 447 CALL initdynav_p(dynhistave_file,day_ref,annee_ref,time_step,448 . t_ops, t_wrt, histaveid)476 ! CALL initdynav_p(dynhistave_file,day_ref,annee_ref,time_step, 477 ! . t_ops, t_wrt, histaveid) 449 478 END IF 450 479 dtav = iperiod*dtvr/daysec -
LMDZ4/trunk/libf/dyn3dpar/getparam.F90
r774 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 MODULE getparam 5 #ifdef CPP_IOIPSL 5 6 USE IOIPSL 7 #else 8 ! if not using IOIPSL, we still need to use (a local version of) getin 9 USE ioipsl_getincom 10 #endif 11 6 12 INTERFACE getpar 7 13 MODULE PROCEDURE ini_getparam,fin_getparam,getparamr,getparami,getparaml … … 12 18 CONTAINS 13 19 SUBROUTINE ini_getparam(fichier) 20 USE parallel 14 21 ! 15 22 IMPLICIT NONE 16 23 ! 17 24 CHARACTER*(*) :: fichier 18 open(out_eff,file=fichier,status='unknown',form='formatted') 25 IF (mpi_rank==0) OPEN(out_eff,file=fichier,status='unknown',form='formatted') 26 19 27 END SUBROUTINE ini_getparam 20 28 21 29 SUBROUTINE fin_getparam 30 USE parallel 22 31 ! 23 32 IMPLICIT NONE 24 33 ! 25 close(out_eff)34 IF (mpi_rank==0) CLOSE(out_eff) 26 35 27 36 END SUBROUTINE fin_getparam 28 37 29 38 SUBROUTINE getparamr(TARGET,def_val,ret_val,comment) 39 USE parallel 30 40 ! 31 41 IMPLICIT NONE … … 44 54 call getin(TARGET,ret_val) 45 55 46 write(out_eff,*) '######################################' 47 write(out_eff,*) '#### ',comment,' #####' 48 write(out_eff,*) TARGET,'=',ret_val 49 56 IF (mpi_rank==0) THEN 57 write(out_eff,*) '######################################' 58 write(out_eff,*) '#### ',comment,' #####' 59 write(out_eff,*) TARGET,'=',ret_val 60 ENDIF 61 50 62 END SUBROUTINE getparamr 51 63 52 64 SUBROUTINE getparami(TARGET,def_val,ret_val,comment) 65 USE parallel 53 66 ! 54 67 IMPLICIT NONE … … 67 80 call getin(TARGET,ret_val) 68 81 69 write(out_eff,*) '######################################' 70 write(out_eff,*) '#### ',comment,' #####' 71 write(out_eff,*) comment 72 write(out_eff,*) TARGET,'=',ret_val 73 82 IF (mpi_rank==0) THEN 83 write(out_eff,*) '######################################' 84 write(out_eff,*) '#### ',comment,' #####' 85 write(out_eff,*) comment 86 write(out_eff,*) TARGET,'=',ret_val 87 ENDIF 88 74 89 END SUBROUTINE getparami 75 90 76 91 SUBROUTINE getparaml(TARGET,def_val,ret_val,comment) 92 USE parallel 77 93 ! 78 94 IMPLICIT NONE … … 91 107 call getin(TARGET,ret_val) 92 108 93 write(out_eff,*) '######################################' 94 write(out_eff,*) '#### ',comment,' #####' 95 write(out_eff,*) TARGET,'=',ret_val 96 109 IF (mpi_rank==0) THEN 110 write(out_eff,*) '######################################' 111 write(out_eff,*) '#### ',comment,' #####' 112 write(out_eff,*) TARGET,'=',ret_val 113 ENDIF 114 97 115 END SUBROUTINE getparaml 98 116 -
LMDZ4/trunk/libf/dyn3dpar/gr_dyn_fi_p.F
r774 r1279 1 ! 2 ! $Id$ 3 ! 1 4 SUBROUTINE gr_dyn_fi_p(nfield,im,jm,ngrid,pdyn,pfi) 5 #ifdef CPP_EARTH 6 ! Interface with parallel physics, 7 ! for now this routine only works with Earth physics 2 8 USE mod_interface_dyn_phys 3 9 USE dimphy … … 34 40 ENDDO 35 41 c$OMP END DO NOWAIT 42 #else 43 write(lunout,*) "gr_fi_dyn_p : This routine should not be called", 44 & "without parallelized physics" 45 stop 46 #endif 47 ! of #ifdef CPP_EARTH 36 48 RETURN 37 49 END -
LMDZ4/trunk/libf/dyn3dpar/gr_fi_dyn_p.F
r774 r1279 1 ! 2 ! $Id$ 3 ! 1 4 SUBROUTINE gr_fi_dyn_p(nfield,ngrid,im,jm,pfi,pdyn) 5 #ifdef CPP_EARTH 6 ! Interface with parallel physics, 7 ! for now this routine only works with Earth physics 2 8 USE mod_interface_dyn_phys 3 9 USE dimphy … … 46 52 ENDDO 47 53 c$OMP END DO NOWAIT 54 #else 55 write(lunout,*) "gr_fi_dyn_p : This routine should not be called", 56 & "without parallelized physics" 57 stop 58 #endif 59 ! of #ifdef CPP_EARTH 48 60 RETURN 49 61 END -
LMDZ4/trunk/libf/dyn3dpar/grid_atob.F
r774 r1279 700 700 PARAMETER (imtmp=360,jmtmp=180) 701 701 REAL xtmp(imtmp), ytmp(jmtmp) 702 REAL *8cham1tmp(imtmp,jmtmp), cham2tmp(imtmp,jmtmp)702 REAL(KIND=8) cham1tmp(imtmp,jmtmp), cham2tmp(imtmp,jmtmp) 703 703 REAL zzzz 704 704 c … … 859 859 number(ii,jj) = number(ii,jj) + 1.0 860 860 rugs(ii,jj) = rugs(ii,jj) 861 . + LOG(MAX(0.001 ,cham2tmp(i,j)))861 . + LOG(MAX(0.001_8,cham2tmp(i,j))) 862 862 ENDIF 863 863 ENDDO … … 892 892 i_proche = ij_proche - (j_proche-1)*imtmp 893 893 PRINT*, "solution:", ij_proche, i_proche, j_proche 894 rugs(i,j) = LOG(MAX(0.001 ,cham2tmp(i_proche,j_proche)))894 rugs(i,j) = LOG(MAX(0.001_8,cham2tmp(i_proche,j_proche))) 895 895 ENDIF 896 896 ENDDO -
LMDZ4/trunk/libf/dyn3dpar/groupeun_p.F
r1146 r1279 1 1 SUBROUTINE groupeun_p(jjmax,llmax,jjb,jje,q) 2 2 USE parallel 3 USE Write_Field_p 3 4 IMPLICIT NONE 4 5 … … 17 18 REAL airecs,qs 18 19 19 INTEGER i,j,l,ig, j1,j2,i0,jd20 INTEGER i,j,l,ig,ig2,j1,j2,i0,jd 20 21 21 22 c--------------------------------------------------------------------c … … 37 38 LOGICAL, SAVE :: first = .TRUE. 38 39 !$OMP THREADPRIVATE(first) 40 INTEGER,SAVE :: i_index(iim,ngroup) 41 INTEGER :: offset 42 REAL :: qsum(iim/ngroup) 39 43 40 44 IF (first) THEN … … 54 58 j_start = MAX(jjb, j1-jd) 55 59 j_finish = MIN(jje, j2-jd) 56 DO j=j_start, j_finish 57 DO i0=1,iim,2**(ngroup-ig+1) 58 qn=0. 59 DO i=i0,i0+2**(ngroup-ig+1)-1 60 qn=qn+q(i,j,l) 61 ENDDO 62 DO i=i0,i0+2**(ngroup-ig+1)-1 63 q(i,j,l)=qn*airen_tab(i,j,jd) 64 ENDDO 60 DO ig2=1,ngroup-ig+1 61 offset=2**(ig2-1) 62 DO j=j_start, j_finish 63 !CDIR NODEP 64 !CDIR ON_ADB(q) 65 DO i0=1,iim,2**ig2 66 q(i0,j,l)=q(i0,j,l)+q(i0+offset,j,l) 67 ENDDO 68 ENDDO 69 ENDDO 70 71 DO j=j_start, j_finish 72 !CDIR NODEP 73 !CDIR ON_ADB(q) 74 DO i=1,iim 75 q(i,j,l)=q(i-MOD(i-1,2**(ngroup-ig+1)),j,l) 76 ENDDO 77 ENDDO 78 79 DO j=j_start, j_finish 80 !CDIR ON_ADB(airen_tab) 81 !CDIR ON_ADB(q) 82 DO i=1,iim 83 q(i,j,l)=q(i,j,l)*airen_tab(i,j,jd) 65 84 ENDDO 66 85 q(iip1,j,l)=q(1,j,l) 67 86 ENDDO 68 87 69 88 !c Concerne le pole sud 70 89 j_start = MAX(1+jjp1-jje-jd, j1-jd) 71 90 j_finish = MIN(1+jjp1-jjb-jd, j2-jd) 72 DO j=j_start, j_finish 73 DO i0=1,iim,2**(ngroup-ig+1) 74 qs=0. 75 DO i=i0,i0+2**(ngroup-ig+1)-1 76 qs=qs+q(i,jjp1-j+1-jd,l) 77 ENDDO 78 DO i=i0,i0+2**(ngroup-ig+1)-1 79 q(i,jjp1-j+1-jd,l)=qs*aires_tab(i,jjp1-j+1,jd) 80 ENDDO 91 DO ig2=1,ngroup-ig+1 92 offset=2**(ig2-1) 93 DO j=j_start, j_finish 94 !CDIR NODEP 95 !CDIR ON_ADB(q) 96 DO i0=1,iim,2**ig2 97 q(i0,jjp1-j+1-jd,l)= q(i0,jjp1-j+1-jd,l) 98 & +q(i0+offset,jjp1-j+1-jd,l) 99 ENDDO 100 ENDDO 101 ENDDO 102 103 104 DO j=j_start, j_finish 105 !CDIR NODEP 106 !CDIR ON_ADB(q) 107 DO i=1,iim 108 q(i,jjp1-j+1-jd,l)=q(i-MOD(i-1,2**(ngroup-ig+1)), 109 & jjp1-j+1-jd,l) 110 ENDDO 111 ENDDO 112 113 DO j=j_start, j_finish 114 !CDIR ON_ADB(aires_tab) 115 !CDIR ON_ADB(q) 116 DO i=1,iim 117 q(i,jjp1-j+1-jd,l)=q(i,jjp1-j+1-jd,l)* 118 & aires_tab(i,jjp1-j+1,jd) 81 119 ENDDO 82 120 q(iip1,jjp1-j+1-jd,l)=q(1,jjp1-j+1-jd,l) 83 121 ENDDO 122 84 123 85 124 j1=j2+1 -
LMDZ4/trunk/libf/dyn3dpar/heavyside.F
r774 r1279 10 10 IMPLICIT NONE 11 11 12 REAL *8heavyside , a12 REAL(KIND=8) heavyside , a 13 13 14 14 IF ( a.LE.0. ) THEN -
LMDZ4/trunk/libf/dyn3dpar/infotrac.F90
r1146 r1279 1 ! $Id$ 2 ! 1 3 MODULE infotrac 2 4 3 5 ! nqtot : total number of tracers and higher order of moment, water vapor and liquid included 4 6 INTEGER, SAVE :: nqtot 5 !!$OMP THREADPRIVATE(nqtot)6 7 7 8 ! nbtr : number of tracers not including higher order of moment or water vapor or liquid 8 9 ! number of tracers used in the physics 9 10 INTEGER, SAVE :: nbtr 10 !!$OMP THREADPRIVATE(nbtr)11 11 12 12 ! Name variables 13 13 CHARACTER(len=20), ALLOCATABLE, DIMENSION(:), SAVE :: tname ! tracer short name for restart and diagnostics 14 14 CHARACTER(len=23), ALLOCATABLE, DIMENSION(:), SAVE :: ttext ! tracer long name for diagnostics 15 !!$OMP THREADPRIVATE(tname,ttext)16 15 17 16 ! iadv : index of trasport schema for each tracer 18 17 INTEGER, ALLOCATABLE, DIMENSION(:), SAVE :: iadv 19 !!$OMP THREADPRIVATE(iadv)20 18 21 19 ! niadv : vector keeping the coorspondance between all tracers(nqtot) treated in the 22 20 ! dynamic part of the code and the tracers (nbtr+2) used in the physics part of the code. 23 21 INTEGER, ALLOCATABLE, DIMENSION(:), SAVE :: niadv ! equivalent dyn / physique 24 !!$OMP THREADPRIVATE(niadv) 25 26 ! Variables for INCA 22 23 ! conv_flg(it)=0 : convection desactivated for tracer number it 27 24 INTEGER, ALLOCATABLE, DIMENSION(:), SAVE :: conv_flg 25 ! pbl_flg(it)=0 : boundary layer diffusion desactivaded for tracer number it 28 26 INTEGER, ALLOCATABLE, DIMENSION(:), SAVE :: pbl_flg 29 !!$OMP THREADPRIVATE(conv_flg, pbl_flg) 30 27 28 CHARACTER(len=4),SAVE :: type_trac 29 31 30 CONTAINS 32 31 … … 57 56 INTEGER, ALLOCATABLE, DIMENSION(:) :: vadv ! index of vertical trasport schema 58 57 59 CHARACTER(len= 8), ALLOCATABLE, DIMENSION(:) :: tnom_0 ! tracer short name58 CHARACTER(len=15), ALLOCATABLE, DIMENSION(:) :: tnom_0 ! tracer short name 60 59 CHARACTER(len=8), ALLOCATABLE, DIMENSION(:) :: tracnam ! name from INCA 61 60 CHARACTER(len=3), DIMENSION(30) :: descrq … … 84 83 descrq(20)='SLP' 85 84 descrq(30)='PRA' 85 86 87 IF (config_inca=='none') THEN 88 type_trac='lmdz' 89 ELSE 90 type_trac='inca' 91 END IF 86 92 87 93 !----------------------------------------------------------------------- … … 91 97 ! 92 98 !----------------------------------------------------------------------- 93 IF ( config_inca == 'none') THEN99 IF (type_trac == 'lmdz') THEN 94 100 OPEN(90,file='traceur.def',form='formatted',status='old', iostat=ierr) 95 101 IF(ierr.EQ.0) THEN … … 113 119 END IF 114 120 ! 115 ! Allocate variables depending on nqtrue 121 ! Allocate variables depending on nqtrue and nbtr 116 122 ! 117 123 ALLOCATE(tnom_0(nqtrue), hadv(nqtrue), vadv(nqtrue)) 118 119 IF (config_inca /= 'none') THEN 120 ! Varaibles only needed in case of INCA 121 ALLOCATE(conv_flg(nbtr), pbl_flg(nbtr), tracnam(nbtr)) 122 END IF 123 124 ALLOCATE(conv_flg(nbtr), pbl_flg(nbtr), tracnam(nbtr)) 125 conv_flg(:) = 1 ! convection activated for all tracers 126 pbl_flg(:) = 1 ! boundary layer activated for all tracers 127 124 128 !----------------------------------------------------------------------- 125 129 ! 2) Choix des schemas d'advection pour l'eau et les traceurs … … 148 152 ! Get choice of advection schema from file tracer.def or from INCA 149 153 !--------------------------------------------------------------------- 150 IF ( config_inca == 'none') THEN154 IF (type_trac == 'lmdz') THEN 151 155 IF(ierr.EQ.0) THEN 152 156 ! Continue to read tracer.def … … 176 180 END DO 177 181 178 ELSE ! config_inca='aero' ou 'chem'182 ELSE ! type_trac=inca : config_inca='aero' ou 'chem' 179 183 ! le module de chimie fournit les noms des traceurs 180 184 ! et les schemas d'advection associes. … … 195 199 END DO 196 200 197 END IF ! config_inca201 END IF ! type_trac 198 202 199 203 !----------------------------------------------------------------------- … … 299 303 300 304 301 WRITE(lunout,*) 'Information stored in dimtrac :'305 WRITE(lunout,*) 'Information stored in infotrac :' 302 306 WRITE(lunout,*) 'iadv niadv tname ttext :' 303 307 DO iq=1,nqtot … … 305 309 END DO 306 310 311 ! 312 ! Test for advection schema. 313 ! This version of LMDZ only garantees iadv=10 and iadv=14 (14 only for water vapour) . 314 ! 315 DO iq=1,nqtot 316 IF (iadv(iq)/=10 .AND. iadv(iq)/=14 .AND. iadv(iq)/=0) THEN 317 WRITE(lunout,*)'STOP : The option iadv=',iadv(iq),' is not tested in this version of LMDZ' 318 CALL abort_gcm('infotrac_init','In this version only iadv=10 and iadv=14 is tested!',1) 319 ELSE IF (iadv(iq)==14 .AND. iq/=1) THEN 320 WRITE(lunout,*)'STOP : The option iadv=',iadv(iq),' is not tested in this version of LMDZ' 321 CALL abort_gcm('infotrac_init','In this version iadv=14 is only permitted for water vapour!',1) 322 END IF 323 END DO 324 307 325 !----------------------------------------------------------------------- 308 326 ! Finalize : 309 327 ! 310 328 DEALLOCATE(tnom_0, hadv, vadv) 311 IF (config_inca /= 'none')DEALLOCATE(tracnam)312 313 999 FORMAT (i2,1x,i2,1x,a 8)329 DEALLOCATE(tracnam) 330 331 999 FORMAT (i2,1x,i2,1x,a15) 314 332 315 333 END SUBROUTINE infotrac_init -
LMDZ4/trunk/libf/dyn3dpar/iniacademic.F
r1146 r1279 83 83 c 84 84 time_0=0. 85 day_ref=0 86 annee_ref=0 85 87 86 88 im = iim -
LMDZ4/trunk/libf/dyn3dpar/inidissip.F
r774 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 SUBROUTINE inidissip ( lstardis,nitergdiv,nitergrot,niterh , … … 18 18 #include "comvert.h" 19 19 #include "control.h" 20 #include "logic.h" 20 21 21 22 LOGICAL lstardis … … 29 30 INTEGER l,ij,idum,ii 30 31 REAL tetamin 32 REAL pseudoz 31 33 32 34 REAL ran1 … … 174 176 c -------------------------------------------------- 175 177 176 DO l=1,llm 177 zvert(l)=1. 178 ENDDO 179 180 fact=2. 181 c 182 DO l = 1, llm 183 zz = 1. - preff/presnivs(l) 184 zvert(l)= fact -( fact-1.)/( 1.+zz*zz ) 185 ENDDO 178 if (ok_strato .and. llm==39) then 179 do l=1,llm 180 pseudoz=8.*log(preff/presnivs(l)) 181 zvert(l)=1+ 182 s (tanh((pseudoz-dissip_zref)/dissip_deltaz)+1.)/2. 183 s *(dissip_factz-1.) 184 enddo 185 else 186 DO l=1,llm 187 zvert(l)=1. 188 ENDDO 189 fact=2. 190 DO l = 1, llm 191 zz = 1. - preff/presnivs(l) 192 zvert(l)= fact -( fact-1.)/( 1.+zz*zz ) 193 ENDDO 194 endif 186 195 187 196 -
LMDZ4/trunk/libf/dyn3dpar/initdynav_p.F
r1146 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 c5 c6 4 subroutine initdynav_p(infile,day0,anne0,tstep,t_ops,t_wrt,fileid) 7 5 6 #ifdef CPP_IOIPSL 7 ! This routine needs IOIPSL 8 8 USE IOIPSL 9 #endif 9 10 use parallel 10 11 use Write_field … … 50 51 #include "description.h" 51 52 #include "serre.h" 53 #include "iniprint.h" 52 54 53 55 C Arguments … … 57 59 real tstep, t_ops, t_wrt 58 60 integer fileid 61 62 #ifdef CPP_IOIPSL 63 ! This routine needs IOIPSL 64 C Variables locales 65 C 59 66 integer thoriid, zvertiid 60 61 C Variables locales62 C63 67 integer tau0 64 68 real zjulian … … 193 197 C 194 198 call histend(fileid) 199 #else 200 write(lunout,*)'initdynav_p: Needs IOIPSL to function' 201 #endif 202 ! #endif of #ifdef CPP_IOIPSL 195 203 return 196 204 end -
LMDZ4/trunk/libf/dyn3dpar/initfluxsto_p.F
r1146 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 subroutine initfluxsto_p … … 6 6 . fileid,filevid,filedid) 7 7 8 #ifdef CPP_IOIPSL 9 ! This routine needs IOIPSL 8 10 USE IOIPSL 11 #endif 9 12 use parallel 10 13 use Write_field … … 50 53 #include "description.h" 51 54 #include "serre.h" 55 #include "iniprint.h" 52 56 53 57 C Arguments 54 58 C 55 59 character*(*) infile 56 integer*4 itau57 60 real tstep, t_ops, t_wrt 58 61 integer fileid, filevid,filedid 59 integer ndex(1) 62 63 #ifdef CPP_IOIPSL 64 ! This routine needs IOIPSL 65 C Variables locales 66 C 60 67 real nivd(1) 61 62 C Variables locales63 C64 68 integer tau0 65 69 real zjulian … … 285 289 endif 286 290 291 #else 292 write(lunout,*)'initfluxsto_p: Needs IOIPSL to function' 293 #endif 294 ! #endif of #ifdef CPP_IOIPSL 287 295 return 288 296 end -
LMDZ4/trunk/libf/dyn3dpar/inithist_p.F
r1146 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 subroutine inithist_p(infile,day0,anne0,tstep,t_ops,t_wrt, 5 5 . fileid,filevid) 6 6 7 #ifdef CPP_IOIPSL 8 ! This routine needs IOIPSL 7 9 USE IOIPSL 10 #endif 8 11 use parallel 9 12 use Write_field … … 50 53 #include "description.h" 51 54 #include "serre.h" 55 #include "iniprint.h" 52 56 53 57 C Arguments … … 58 62 integer fileid, filevid 59 63 64 #ifdef CPP_IOIPSL 65 ! This routine needs IOIPSL 60 66 C Variables locales 61 67 C … … 244 250 call histend(fileid) 245 251 call histend(filevid) 252 #else 253 write(lunout,*)'inithist_p: Needs IOIPSL to function' 254 #endif 255 ! #endif of #ifdef CPP_IOIPSL 246 256 return 247 257 end -
LMDZ4/trunk/libf/dyn3dpar/integrd_p.F
r1146 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 SUBROUTINE integrd_p … … 32 32 #include "temps.h" 33 33 #include "serre.h" 34 #include "control.h" 34 35 35 36 c Arguments: … … 264 265 ijb=ij_begin 265 266 ije=ij_end 266 267 268 if (planet_type.eq."earth") then 269 ! Earth-specific treatment of first 2 tracers (water) 267 270 c$OMP BARRIER 268 271 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 269 DO l = 1, llm 270 DO ij = ijb, ije 271 deltap(ij,l) = p(ij,l) - p(ij,l+1) 272 DO l = 1, llm 273 DO ij = ijb, ije 274 deltap(ij,l) = p(ij,l) - p(ij,l+1) 275 ENDDO 272 276 ENDDO 273 ENDDO 274 c$OMP END DO NOWAIT275 c$OMP BARRIER 276 277 CALL qminimum_p( q, nq, deltap)277 c$OMP END DO NOWAIT 278 c$OMP BARRIER 279 280 CALL qminimum_p( q, nq, deltap ) 281 endif ! of if (planet_type.eq."earth") 278 282 c 279 283 c ..... Calcul de la valeur moyenne, unique aux poles pour q ..... -
LMDZ4/trunk/libf/dyn3dpar/inter_barx.F
r774 r1279 81 81 82 82 DO idat = 1, idatmax 83 xxd(idat) = AMOD( xxd(idat) - xim0, 360. )83 xxd(idat) = MOD( xxd(idat) - xim0, 360. ) 84 84 fdd(idat) = fdat (idat) 85 85 ENDDO … … 212 212 213 213 214 3 FORMAT(1x,70( 1h-))214 3 FORMAT(1x,70("-")) 215 215 2 FORMAT(1x,8f8.2) 216 216 -
LMDZ4/trunk/libf/dyn3dpar/leapfrog_p.F
r1146 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 c … … 18 18 USE timer_filtre, ONLY : print_filtre_timer 19 19 USE infotrac 20 USE guide_p_mod, ONLY : guide_main 21 USE getparam 20 22 21 23 IMPLICIT NONE … … 118 120 c 119 121 INTEGER itau,itaufinp1,iav 120 INTEGER*4iday ! jour julien121 REAL time ! Heure de la journee en fraction d'1 jour122 ! INTEGER iday ! jour julien 123 REAL time 122 124 123 125 REAL SSUM … … 132 134 real time_step, t_wrt, t_ops 133 135 134 REAL rdayvrai,rdaym_ini 136 ! jD_cur: jour julien courant 137 ! jH_cur: heure julienne courante 138 REAL :: jD_cur, jH_cur 139 INTEGER :: an, mois, jour 140 REAL :: secondes 141 135 142 LOGICAL first,callinigrads 136 143 … … 160 167 character*80 abort_message 161 168 162 C Calendrier163 LOGICAL true_calendar164 PARAMETER (true_calendar = .false.)165 169 166 170 logical,PARAMETER :: dissip_conservative=.TRUE. … … 186 190 INTEGER :: iapptrac 187 191 INTEGER :: AdjustCount 188 INTEGER :: var_time192 ! INTEGER :: var_time 189 193 LOGICAL :: ok_start_timer=.FALSE. 190 194 LOGICAL, SAVE :: firstcall=.TRUE. … … 205 209 206 210 itau = 0 207 iday = day_ini+itau/day_step208 time = FLOAT(itau-(iday-day_ini)*day_step)/day_step+time_0209 IF(time.GT.1.) THEN210 time = time-1.211 iday = iday+1212 ENDIF211 ! iday = day_ini+itau/day_step 212 ! time = FLOAT(itau-(iday-day_ini)*day_step)/day_step+time_0 213 ! IF(time.GT.1.) THEN 214 ! time = time-1. 215 ! iday = iday+1 216 ! ENDIF 213 217 214 218 c Allocate variables depending on dynamic variable nqtot … … 239 243 1 CONTINUE 240 244 241 c$OMP MASTER 242 243 CALL barrier 244 245 c$OMP END MASTER 246 c$OMP BARRIER 245 jD_cur = jD_ref + day_ini - day_ref + int (itau * dtvr / daysec) 246 jH_cur = jH_ref + & 247 & (itau * dtvr / daysec - int(itau * dtvr / daysec)) 248 247 249 248 250 #ifdef CPP_IOIPSL 249 c$OMP MASTER 250 if (ok_guide.and.(itaufin-itau-1)*dtvr.gt.21600) then 251 call guide_pp(itau,ucov,vcov,teta,q,masse,ps) 252 else 253 IF(prt_level>9)WRITE(*,*)'attention on ne guide pas les ', 254 . '6 dernieres heures' 251 if (ok_guide) then 252 !$OMP MASTER 253 call guide_main(itau,ucov,vcov,teta,q,masse,ps) 254 !$OMP END MASTER 255 !$OMP BARRIER 255 256 endif 256 c$OMP END MASTER257 257 #endif 258 258 259 c 259 260 c IF( MOD( itau, 10* day_step ).EQ.0 ) THEN … … 545 546 call VTb(VTcaldyn) 546 547 c$OMP END MASTER 547 var_time=time+iday-day_ini548 ! var_time=time+iday-day_ini 548 549 549 550 c$OMP BARRIER 550 551 ! CALL FTRACE_REGION_BEGIN("caldyn") 552 time = jD_cur + jH_cur 551 553 CALL caldyn_p 552 554 $ ( itau,ucov,vcov,teta,ps,masse,pk,pkf,phis , 553 $ phi,conser,du,dv,dteta,dp,w, pbaru,pbarv, time +iday-day_ini)555 $ phi,conser,du,dv,dteta,dp,w, pbaru,pbarv, time ) 554 556 555 557 ! CALL FTRACE_REGION_END("caldyn") 558 556 559 c$OMP MASTER 557 560 call VTe(VTcaldyn) … … 560 563 cc$OMP BARRIER 561 564 cc$OMP MASTER 562 ccall WriteField_p('du',reshape(du,(/iip1,jmp1,llm/)))563 ccall WriteField_p('dv',reshape(dv,(/iip1,jjm,llm/)))564 ccall WriteField_p('dteta',reshape(dteta,(/iip1,jmp1,llm/)))565 ccall WriteField_p('dp',reshape(dp,(/iip1,jmp1/)))566 ccall WriteField_p('w',reshape(w,(/iip1,jmp1,llm/)))567 ccall WriteField_p('pbaru',reshape(pbaru,(/iip1,jmp1,llm/)))568 ccall WriteField_p('pbarv',reshape(pbarv,(/iip1,jjm,llm/)))569 ccall WriteField_p('p',reshape(p,(/iip1,jmp1,llmp1/)))570 ccall WriteField_p('masse',reshape(masse,(/iip1,jmp1,llm/)))571 ccall WriteField_p('pk',reshape(pk,(/iip1,jmp1,llm/)))565 ! call WriteField_p('du',reshape(du,(/iip1,jmp1,llm/))) 566 ! call WriteField_p('dv',reshape(dv,(/iip1,jjm,llm/))) 567 ! call WriteField_p('dteta',reshape(dteta,(/iip1,jmp1,llm/))) 568 ! call WriteField_p('dp',reshape(dp,(/iip1,jmp1/))) 569 ! call WriteField_p('w',reshape(w,(/iip1,jmp1,llm/))) 570 ! call WriteField_p('pbaru',reshape(pbaru,(/iip1,jmp1,llm/))) 571 ! call WriteField_p('pbarv',reshape(pbarv,(/iip1,jjm,llm/))) 572 ! call WriteField_p('p',reshape(p,(/iip1,jmp1,llmp1/))) 573 ! call WriteField_p('masse',reshape(masse,(/iip1,jmp1,llm/))) 574 ! call WriteField_p('pk',reshape(pk,(/iip1,jmp1,llm/))) 572 575 cc$OMP END MASTER 573 576 … … 681 684 CALL exner_hyb_p( ip1jmp1, ps, p,alpha,beta,pks, pk, pkf ) 682 685 c$OMP BARRIER 683 rdaym_ini = itau * dtvr / daysec 684 rdayvrai = rdaym_ini + day_ini 685 686 jD_cur = jD_ref + day_ini - day_ref 687 $ + int (itau * dtvr / daysec) 688 jH_cur = jH_ref + & 689 & (itau * dtvr / daysec - int(itau * dtvr / daysec)) 690 ! call ju2ymds(jD_cur+jH_cur, an, mois, jour, secondes) 686 691 687 692 c rajout debug … … 720 725 * jj_Nb_physic,2,2,Request_physic) 721 726 727 call Register_SwapFieldHallo(masse,masse,ip1jmp1,llm, 728 * jj_Nb_physic,1,2,Request_physic) 729 722 730 call Register_SwapFieldHallo(p,p,ip1jmp1,llmp1, 723 731 * jj_Nb_physic,2,2,Request_physic) … … 767 775 cc$OMP BARRIER 768 776 ! CALL FTRACE_REGION_BEGIN("calfis") 769 CALL calfis_p(lafin , rdayvrai,time,777 CALL calfis_p(lafin ,jD_cur, jH_cur, 770 778 $ ucov,vcov,teta,q,masse,ps,p,pk,phis,phi , 771 779 $ du,dv,dteta,dq, … … 861 869 c ------------------------------ 862 870 IF (ok_strato) THEN 863 CALL top_bound_p( vcov,ucov,teta, 871 CALL top_bound_p( vcov,ucov,teta,masse,dufi,dvfi,dtetafi) 864 872 ENDIF 865 873 … … 885 893 * jj_Nb_caldyn,Request_physic) 886 894 895 call Register_SwapField(masse,masse,ip1jmp1,llm, 896 * jj_Nb_caldyn,Request_physic) 897 887 898 call Register_SwapField(p,p,ip1jmp1,llmp1, 888 899 * jj_Nb_caldyn,Request_physic) … … 957 968 call Register_Hallo(vcov,ip1jm,llm,1,1,1,1,Request_Physic) 958 969 call SendRequest(Request_Physic) 970 c$OMP BARRIER 959 971 call WaitRequest(Request_Physic) 960 972 … … 1251 1263 print *, 'Temps CPU ecoule sur la parallelisation :',DiffCpuTime() 1252 1264 CALL print_filtre_timer 1265 call fin_getparam 1253 1266 call finalize_parallel 1254 1267 c$OMP END MASTER … … 1264 1277 IF(forward. OR. leapf) THEN 1265 1278 itau= itau + 1 1266 iday= day_ini+itau/day_step1267 time= FLOAT(itau-(iday-day_ini)*day_step)/day_step+time_01268 IF(time.GT.1.) THEN1269 time = time-1.1270 iday = iday+11271 ENDIF1279 ! iday= day_ini+itau/day_step 1280 ! time= FLOAT(itau-(iday-day_ini)*day_step)/day_step+time_0 1281 ! IF(time.GT.1.) THEN 1282 ! time = time-1. 1283 ! iday = iday+1 1284 ! ENDIF 1272 1285 ENDIF 1273 1286 … … 1276 1289 1277 1290 c$OMP MASTER 1291 call fin_getparam 1278 1292 call finalize_parallel 1279 1293 c$OMP END MASTER … … 1301 1315 c$OMP BARRIER 1302 1316 c$OMP MASTER 1303 CALL writedynav_p(histaveid, itau,vcov ,1304 , ucov,teta,pk,phi,q,masse,ps,phis)1317 ! CALL writedynav_p(histaveid, itau,vcov , 1318 ! , ucov,teta,pk,phi,q,masse,ps,phis) 1305 1319 1306 1320 c ATTENTION!!! bilan_dyn_p ne marche probablement pas avec OpenMP … … 1353 1367 #ifdef CPP_IOIPSL 1354 1368 1355 CALL writehist_p(histid,histvid, itau,vcov,1356 & ucov,teta,phi,q,masse,ps,phis)1369 ! CALL writehist_p(histid,histvid, itau,vcov, 1370 ! & ucov,teta,phi,q,masse,ps,phis) 1357 1371 1358 1372 #endif … … 1380 1394 1381 1395 if (planet_type.eq."earth") then 1382 #ifdef CPP_EARTH1383 1396 ! Write an Earth-format restart file 1384 1397 CALL dynredem1_p("restart.nc",0.0, 1385 1398 & vcov,ucov,teta,q,masse,ps) 1386 1387 #endif1388 1399 endif ! of if (planet_type.eq."earth") 1389 1400 1390 CLOSE(99)1401 ! CLOSE(99) 1391 1402 c$OMP END MASTER 1392 1403 ENDIF ! of IF (itau.EQ.itaufin) … … 1433 1444 1434 1445 itau = itau + 1 1435 iday = day_ini+itau/day_step1436 time = FLOAT(itau-(iday-day_ini)*day_step)/day_step+time_01437 1438 IF(time.GT.1.) THEN1439 time = time-1.1440 iday = iday+11441 ENDIF1446 ! iday = day_ini+itau/day_step 1447 ! time = FLOAT(itau-(iday-day_ini)*day_step)/day_step+time_0 1448 ! 1449 ! IF(time.GT.1.) THEN 1450 ! time = time-1. 1451 ! iday = iday+1 1452 ! ENDIF 1442 1453 1443 1454 forward = .FALSE. 1444 1455 IF( itau. EQ. itaufinp1 ) then 1445 1456 c$OMP MASTER 1457 call fin_getparam 1446 1458 call finalize_parallel 1447 1459 c$OMP END MASTER … … 1471 1483 c$OMP BARRIER 1472 1484 c$OMP MASTER 1473 CALL writedynav_p(histaveid, itau,vcov ,1474 , ucov,teta,pk,phi,q,masse,ps,phis)1485 ! CALL writedynav_p(histaveid, itau,vcov , 1486 ! , ucov,teta,pk,phi,q,masse,ps,phis) 1475 1487 CALL bilan_dyn_p(2,dtvr*iperiod,dtvr*day_step*periodav, 1476 1488 , ps,masse,pk,pbaru,pbarv,teta,phi,ucov,vcov,q) … … 1516 1528 #ifdef CPP_IOIPSL 1517 1529 1518 CALL writehist_p(histid, histvid, itau,vcov ,1519 & ucov,teta,phi,q,masse,ps,phis)1530 ! CALL writehist_p(histid, histvid, itau,vcov , 1531 ! & ucov,teta,phi,q,masse,ps,phis) 1520 1532 #endif 1521 1533 ! For some Grads output (but does it work?) … … 1539 1551 IF(itau.EQ.itaufin) THEN 1540 1552 if (planet_type.eq."earth") then 1541 #ifdef CPP_EARTH1542 1553 c$OMP MASTER 1543 1554 CALL dynredem1_p("restart.nc",0.0, 1544 1555 . vcov,ucov,teta,q,masse,ps) 1545 1556 c$OMP END MASTER 1546 #endif1547 1557 endif ! of if (planet_type.eq."earth") 1548 1558 ENDIF ! of IF(itau.EQ.itaufin) … … 1555 1565 END IF ! of IF(.not.purmats) 1556 1566 c$OMP MASTER 1567 call fin_getparam 1557 1568 call finalize_parallel 1558 1569 c$OMP END MASTER -
LMDZ4/trunk/libf/dyn3dpar/limit_netcdf.F
r1012 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 C 5 5 C 6 6 SUBROUTINE limit_netcdf(interbar, extrap, oldice, masque) 7 #ifdef CPP_EARTH 8 ! This routine is designed to work for Earth 7 9 USE dimphy 8 10 use phys_state_var_mod , ONLY : pctsrf … … 33 35 cy#include "dimphy.h" 34 36 #include "indicesol.h" 37 #include "iniprint.h" 35 38 c 36 39 c----------------------------------------------------------------------- … … 403 406 ENDDO 404 407 405 PRINT 222, timeyear 408 PRINT 222, timeyear(:lmdep) 406 409 222 FORMAT(2x,' Time year ',10f6.1) 407 410 c … … 620 623 timeyear(l) = tmidmonth(l) 621 624 ENDDO 622 PRINT 222, timeyear 625 PRINT 222, timeyear(:lmdep) 623 626 c 624 627 PRINT*, 'Interpolation temporelle' … … 939 942 timeyear(l) = tmidmonth(l) 940 943 ENDDO 941 print 222, timeyear 944 print 222, timeyear(:lmdep) 942 945 c 943 946 C interpolation temporelle … … 1134 1137 timeyear(l) = timecoord(l) 1135 1138 ENDDO 1136 print 222, timeyear 1139 print 222, timeyear(:lmdep) 1137 1140 c 1138 1141 C interpolation temporelle … … 1323 1326 ierr = NF_CLOSE(nid) 1324 1327 c 1328 #else 1329 WRITE(lunout,*) 1330 & 'limit_netcdf: Earth-specific routine, needs Earth physics' 1331 #endif 1332 ! of #ifdef CPP_EARTH 1325 1333 STOP 1326 1334 END -
LMDZ4/trunk/libf/dyn3dpar/mod_const_para.F90
r1014 r1279 1 ! 2 ! $Id$ 3 ! 1 4 MODULE mod_const_mpi 2 5 … … 8 11 9 12 SUBROUTINE Init_const_mpi 13 #ifdef CPP_IOIPSL 10 14 USE IOIPSL 15 #else 16 ! if not using IOIPSL, we still need to use (a local version of) getin 17 USE ioipsl_getincom 18 #endif 11 19 12 20 IMPLICIT NONE -
LMDZ4/trunk/libf/dyn3dpar/mod_interface_dyn_phys.F90
r792 r1279 1 ! 2 ! $Id$ 3 ! 1 4 MODULE mod_interface_dyn_phys 2 5 INTEGER,SAVE,dimension(:),allocatable :: index_i … … 4 7 5 8 9 #ifdef CPP_EARTH 10 ! Interface with parallel physics, 11 ! for now this routine only works with Earth physics 6 12 CONTAINS 7 13 … … 49 55 50 56 END SUBROUTINE Init_interface_dyn_phys 51 57 #endif 58 ! of #ifdef CPP_EARTH 52 59 END MODULE mod_interface_dyn_phys -
LMDZ4/trunk/libf/dyn3dpar/parallel.F90
r1146 r1279 1 ! 2 ! $Id$ 3 ! 1 4 module parallel 2 5 USE mod_const_mpi … … 33 36 #include "dimensions.h" 34 37 #include "paramet.h" 35 38 #include "iniprint.h" 39 36 40 integer :: ierr 37 41 integer :: i,j … … 83 87 if (jj_nb_para(i) <= 2 ) then 84 88 85 print *,"Arret : le nombre de bande de lattitude par process est trop faible (<2)."86 print *," ---> diminuez le nombre de CPU ou augmentez la taille en lattitude"89 write(lunout,*)"Arret : le nombre de bande de lattitude par process est trop faible (<2)." 90 write(lunout,*)" ---> diminuez le nombre de CPU ou augmentez la taille en lattitude" 87 91 88 92 #ifdef CPP_MPI … … 127 131 endif 128 132 129 print *,"jj_begin",jj_begin130 print *,"jj_end",jj_end131 print *,"ij_begin",ij_begin132 print *,"ij_end",ij_end133 write(lunout,*)"init_parallel: jj_begin",jj_begin 134 write(lunout,*)"init_parallel: jj_end",jj_end 135 write(lunout,*)"init_parallel: ij_begin",ij_begin 136 write(lunout,*)"init_parallel: ij_end",ij_end 133 137 134 138 !$OMP PARALLEL … … 185 189 use mod_prism_proto 186 190 #endif 191 #ifdef CPP_EARTH 192 ! Ehouarn: surface_data module is in 'phylmd' ... 187 193 use surface_data, only : type_ocean 188 194 implicit none 195 #else 196 implicit none 197 ! without the surface_data module, we declare (and set) a dummy 'type_ocean' 198 character(len=6),parameter :: type_ocean="dummy" 199 #endif 200 ! #endif of #ifdef CPP_EARTH 189 201 190 202 include "dimensions.h" … … 415 427 implicit none 416 428 #include "dimensions.h" 417 #include "paramet.h" 429 #include "paramet.h" 430 #include "iniprint.h" 418 431 #ifdef CPP_MPI 419 432 include 'mpif.h' … … 436 449 call Pack_Data(Field(ij_begin,1),ij,ll,min(jj_end,jjm)-jj_begin+1,Buffer_send) 437 450 else 438 print *,ij451 write(lunout,*)ij 439 452 stop 'erreur dans Gather_Field' 440 453 endif -
LMDZ4/trunk/libf/dyn3dpar/sortvarc.F
r774 r1279 129 129 ang = SSUM( llm, angl, 1 ) 130 130 131 rday = FLOAT(INT ( day_ini + time ))131 c rday = FLOAT(INT ( day_ini + time )) 132 132 c 133 rday = FLOAT(INT(time-jD_ref-jH_ref)) 133 134 IF(ptot0.eq.0.) THEN 134 135 PRINT 3500, itau, rday, heure,time … … 156 157 RETURN 157 158 158 3500 FORMAT( '0'10(1h*),4x,'pas'i7,5x,'jour'f5.0,'heure'f5.1,4x159 * ,'date',f1 0.5,4x,10(1h*))159 3500 FORMAT(10("*"),4x,'pas',i7,5x,'jour',f9.0,'heure',f5.1,4x 160 * ,'date',f14.4,4x,10("*")) 160 161 4000 FORMAT(10x,'masse',4x,'rmsdpdt',7x,'energie',2x,'enstrophie' 161 162 * ,2x,'entropie',3x,'rmsv',4x,'mt.ang',/,'GLOB ' -
LMDZ4/trunk/libf/dyn3dpar/sortvarc0.F
r774 r1279 130 130 ang0 = SSUM( llm, angl, 1 ) 131 131 132 rday = FLOAT(INT ( day_ini +time ))132 rday = FLOAT(INT (time )) 133 133 c 134 134 PRINT 3500, itau, rday, heure, time 135 135 PRINT *, ptot0,etot0,ztot0,stot0,ang0 136 136 137 3500 FORMAT( '0',10(1h*),4x,'pas',i7,5x,'jour',f5.0,'heure',f5.1,4x138 * ,'date',f10.5,4x,10( 1h*))137 3500 FORMAT(10("*"),4x,'pas',i7,5x,'jour',f5.0,'heure',f5.1,4x 138 * ,'date',f10.5,4x,10("*")) 139 139 RETURN 140 140 END -
LMDZ4/trunk/libf/dyn3dpar/startvar.F
r1000 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 C5 C6 4 MODULE startvar 5 #ifdef CPP_EARTH 6 ! This module is designed to work for Earth (and with ioipsl) 7 7 ! 8 8 ! … … 1189 1189 END SUBROUTINE start_inter_3d 1190 1190 ! 1191 #endif 1192 ! of #ifdef CPP_EARTH 1191 1193 END MODULE startvar -
LMDZ4/trunk/libf/dyn3dpar/temps.h
r985 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 ! ATTENTION!!!!: ce fichier include est compatible format fixe/format libre … … 8 8 ! 9 9 ! 10 ! jD_ref = jour julien de la date de reference (lancement de l'experience) 11 ! hD_ref = "heure" julienne de la date de reference 10 12 !----------------------------------------------------------------------- 11 13 ! INCLUDE 'temps.h' 12 14 13 15 COMMON/temps/itaufin, dt, day_ini, day_end, annee_ref, day_ref, & 14 & itau_dyn, itau_phy 16 & itau_dyn, itau_phy, jD_ref, jH_ref, calend 15 17 16 18 INTEGER itaufin 17 INTEGER*4 itau_dyn, itau_phy 18 INTEGER*4 day_ini, day_end, annee_ref, day_ref 19 REAL dt 19 INTEGER itau_dyn, itau_phy 20 INTEGER day_ini, day_end, annee_ref, day_ref 21 REAL dt, jD_ref, jH_ref 22 CHARACTER (len=10) :: calend 23 20 24 !$OMP THREADPRIVATE(/temps/) 25 !----------------------------------------------------------------------- -
LMDZ4/trunk/libf/dyn3dpar/top_bound_p.F
r1000 r1279 1 SUBROUTINE top_bound_p( vcov,ucov,teta, du,dv,dh )1 SUBROUTINE top_bound_p( vcov,ucov,teta,masse, du,dv,dh ) 2 2 USE parallel 3 3 IMPLICIT NONE … … 6 6 #include "paramet.h" 7 7 #include "comconst.h" 8 CC#include "comgeom2.h" 8 #include "comvert.h" 9 #include "comgeom2.h" 9 10 10 11 … … 28 29 c ------------- 29 30 30 #include "comgeom.h"31 31 #include "comdissipn.h" 32 32 … … 35 35 36 36 REAL ucov(iip1,jjp1,llm),vcov(iip1,jjm,llm),teta(iip1,jjp1,llm) 37 REAL masse(iip1,jjp1,llm) 37 38 REAL dv(iip1,jjm,llm),du(iip1,jjp1,llm),dh(iip1,jjp1,llm) 38 39 39 40 c Local: 40 41 c ------ 41 42 REAL massebx(iip1,jjp1,llm),masseby(iip1,jjm,llm),zm 42 43 REAL uzon(jjp1,llm),vzon(jjm,llm),tzon(jjp1,llm) 43 44 … … 45 46 PARAMETER (NDAMP=4) 46 47 integer i 47 REAL :: rdamp(llm) =48 & (/(0., i =1,llm-NDAMP),0.125E-5,.25E-5,.5E-5,1.E-5/)49 48 REAL,SAVE :: rdamp(llm) 49 ! & (/(0., i =1,llm-NDAMP),0.125E-5,.25E-5,.5E-5,1.E-5/) 50 LOGICAL,SAVE :: first=.true. 50 51 INTEGER j,l,jjb,jje 51 52 52 53 54 if (iflag_top_bound == 0) return 55 if (first) then 56 c$OMP BARRIER 57 c$OMP MASTER 58 if (iflag_top_bound == 1) then 59 ! couche eponge dans les 4 dernieres couches du modele 60 rdamp(:)=0. 61 rdamp(llm)=tau_top_bound 62 rdamp(llm-1)=tau_top_bound/2. 63 rdamp(llm-2)=tau_top_bound/4. 64 rdamp(llm-3)=tau_top_bound/8. 65 else if (iflag_top_bound == 2) then 66 ! couce eponge dans toutes les couches de pression plus faible que 67 ! 100 fois la pression de la derniere couche 68 rdamp(:)=tau_top_bound 69 s *max(presnivs(llm)/presnivs(:)-0.01,0.) 70 endif 71 first=.false. 72 print*,'TOP_BOUND rdamp=',rdamp 73 c$OMP END MASTER 74 c$OMP BARRIER 75 endif 76 77 78 CALL massbar_p(masse,massebx,masseby) 53 79 C CALCUL DES CHAMPS EN MOYENNE ZONALE: 54 80 … … 60 86 do l=1,llm 61 87 do j=jjb,jje 62 vzon(j,l)=0. 88 zm=0. 89 vzon(j,l)=0 63 90 do i=1,iim 64 vzon(j,l)=vzon(j,l)+vcov(i,j,l)/float(iim) 91 ! Rm: on peut travailler directement avec la moyenne zonale de vcov 92 ! plutot qu'avec celle de v car le coefficient cv qui relie les deux 93 ! ne varie qu'en latitude 94 vzon(j,l)=vzon(j,l)+vcov(i,j,l)*masseby(i,j,l) 95 zm=zm+masseby(i,j,l) 65 96 enddo 97 vzon(j,l)=vzon(j,l)/zm 66 98 enddo 67 99 enddo … … 87 119 do j=jjb,jje 88 120 uzon(j,l)=0. 121 zm=0. 122 do i=1,iim 123 uzon(j,l)=uzon(j,l)+massebx(i,j,l)*ucov(i,j,l)/cu(i,j) 124 zm=zm+massebx(i,j,l) 125 enddo 126 uzon(j,l)=uzon(j,l)/zm 127 enddo 128 enddo 129 c$OMP END DO NOWAIT 130 131 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 132 do l=1,llm 133 do j=jjb,jje 134 zm=0. 89 135 tzon(j,l)=0. 90 136 do i=1,iim 91 uzon(j,l)=uzon(j,l)+ucov(i,j,l)/float(iim)92 tzon(j,l)=tzon(j,l)+teta(i,j,l)/float(iim)137 tzon(j,l)=tzon(j,l)+teta(i,j,l)*masse(i,j,l) 138 zm=zm+masse(i,j,l) 93 139 enddo 140 tzon(j,l)=tzon(j,l)/zm 94 141 enddo 95 142 enddo … … 102 149 do j=jjb,jje 103 150 do i=1,iip1 104 du(i,j,l)=du(i,j,l)-rdamp(l)*(ucov(i,j,l)-uzon(j,l)) 151 du(i,j,l)=du(i,j,l) 152 s -rdamp(l)*(ucov(i,j,l)-cu(i,j)*uzon(j,l)) 105 153 dh(i,j,l)=dh(i,j,l)-rdamp(l)*(teta(i,j,l)-tzon(j,l)) 106 154 enddo -
LMDZ4/trunk/libf/dyn3dpar/ugeostr.F
r774 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 subroutine ugeostr(phi,ucov) … … 20 20 21 21 real zlat 22 23 um(:,:)=0 ! initialize um() 22 24 23 25 DO j=1,jjm … … 42 44 ENDDO 43 45 ENDDO 44 call dump2d(jj p1,llm,um,'Vent-u geostrophique')46 call dump2d(jjm,llm,um,'Vent-u geostrophique') 45 47 46 48 c -
LMDZ4/trunk/libf/dyn3dpar/writedynav_p.F
r1146 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 subroutine writedynav_p( histid, time, vcov, 5 5 , ucov,teta,ppk,phi,q,masse,ps,phis) 6 6 7 #ifdef CPP_IOIPSL 8 ! This routine needs IOIPSL 7 9 USE ioipsl 10 #endif 8 11 USE parallel 9 12 USE misc_mod … … 47 50 #include "description.h" 48 51 #include "serre.h" 52 #include "iniprint.h" 49 53 50 54 C … … 61 65 62 66 67 #ifdef CPP_IOIPSL 68 ! This routine needs IOIPSL 63 69 C Variables locales 64 70 C … … 156 162 C 157 163 if (ok_sync) call histsync(histid) 164 #else 165 write(lunout,*)'writedynav_p: Needs IOIPSL to function' 166 #endif 167 ! #endif of #ifdef CPP_IOIPSL 158 168 return 159 169 end -
LMDZ4/trunk/libf/dyn3dpar/writehist_p.F
r1146 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 4 subroutine writehist_p( histid, histvid, time, vcov, 5 5 , ucov,teta,phi,q,masse,ps,phis) 6 6 7 #ifdef CPP_IOIPSL 8 ! This routine needs IOIPSL 7 9 USE ioipsl 10 #endif 8 11 USE parallel 9 12 USE misc_mod … … 48 51 #include "description.h" 49 52 #include "serre.h" 53 #include "iniprint.h" 50 54 51 55 C … … 61 65 integer time 62 66 63 67 #ifdef CPP_IOIPSL 68 ! This routine needs IOIPSL 64 69 C Variables locales 65 70 C … … 144 149 call histsync(histvid) 145 150 endif 151 #else 152 write(lunout,*)'writehist_p: Needs IOIPSL to function' 153 #endif 154 ! #endif of #ifdef CPP_IOIPSL 146 155 return 147 156 end -
LMDZ4/trunk/libf/filtrez/filtreg.F
r1146 r1279 112 112 113 113 IF( iaire.EQ.1 ) THEN 114 sdd1_type = type_sdd u115 sdd2_type = type_unsdd u114 sdd1_type = type_sddv 115 sdd2_type = type_unsddv 116 116 ELSE 117 sdd1_type = type_unsdd u118 sdd2_type = type_sdd u117 sdd1_type = type_unsddv 118 sdd2_type = type_sddv 119 119 ENDIF 120 120 -
LMDZ4/trunk/libf/filtrez/filtreg_mod.F90
r1146 r1279 7 7 8 8 SUBROUTINE inifilr 9 USE mod_filtre_fft 9 10 ! 10 11 ! ... H. Upadhyaya, O.Sharma ... … … 519 520 ENDDO 520 521 522 IF (use_filtre_fft) THEN 523 CALL Init_filtre_fft(coefilu,modfrstu,jfiltnu,jfiltsu, & 524 coefilv,modfrstv,jfiltnv,jfiltsv) 525 ENDIF 526 521 527 ! ................................................................... 522 528 -
LMDZ4/trunk/libf/filtrez/mod_fft_mkl.F90
r986 r1279 74 74 ierr = DftiSetValue(FFT_Handle,DFTI_PLACEMENT,DFTI_NOT_INPLACE) 75 75 ierr = DftiSetValue(FFT_Handle, DFTI_INPUT_DISTANCE, vsize+inc) 76 ierr = DftiSetValue(FFT_Handle, DFTI_OUTPUT_DISTANCE, vsize/2+1)76 ierr = DftiSetValue(FFT_Handle, DFTI_OUTPUT_DISTANCE, (vsize/2+1)*2) 77 77 ierr = DftiCommitDescriptor( FFT_Handle ) 78 78 ! Forward_handle(nb_vect)%IsAllocated=.TRUE. … … 114 114 ierr = DftiSetValue(FFT_Handle,DFTI_BACKWARD_SCALE,scale_factor) 115 115 ierr = DftiSetValue(FFT_Handle,DFTI_PLACEMENT,DFTI_NOT_INPLACE) 116 ierr = DftiSetValue(FFT_Handle, DFTI_INPUT_DISTANCE, vsize/2+1)116 ierr = DftiSetValue(FFT_Handle, DFTI_INPUT_DISTANCE, (vsize/2+1)*2) 117 117 ierr = DftiSetValue(FFT_Handle, DFTI_OUTPUT_DISTANCE, vsize+inc) 118 118 ierr = DftiCommitDescriptor( FFT_Handle ) -
LMDZ4/trunk/libf/filtrez/mod_fft_wrapper.F90
r986 r1279 19 19 INTEGER,INTENT(IN) :: nb_vect 20 20 REAL,INTENT(IN) :: vect(vsize+inc,nb_vect) 21 COMPLEX ,INTENT(INOUT) :: TF_vect(vsize/2+1,nb_vect)21 COMPLEX*16,INTENT(INOUT) :: TF_vect(vsize/2+1,nb_vect) 22 22 23 23 STOP "wrapper fft : une FFT doit etre specifiee a l'aide d'une clee CPP, sinon utiliser le filtre classique" … … 29 29 INTEGER,INTENT(IN) :: nb_vect 30 30 REAL,INTENT(INOUT) :: vect(vsize+inc,nb_vect) 31 COMPLEX ,INTENT(IN ) :: TF_vect(vsize/2+1,nb_vect)31 COMPLEX*16,INTENT(IN ) :: TF_vect(vsize/2+1,nb_vect) 32 32 33 33 STOP "wrapper fft : une FFT doit etre specifiee a l'aide d'une clee CPP, sinon utiliser le filtre classique" -
LMDZ4/trunk/libf/filtrez/mod_filtre_fft.F90
r994 r1279 118 118 119 119 REAL :: vect(iim+inc,jj_end-jj_begin+1,nbniv) 120 COMPLEX :: TF_vect(iim/2+1,jj_end-jj_begin+1,nbniv) 120 ! REAL :: vect_test(iim+inc,jj_end-jj_begin+1,nbniv) 121 COMPLEX*16 :: TF_vect(iim/2+1,jj_end-jj_begin+1,nbniv) 122 ! COMPLEX*16 :: TF_vect_test(iim/2+1,jj_end-jj_begin+1,nbniv) 121 123 INTEGER :: nb_vect 122 124 INTEGER :: i,j,l … … 142 144 CALL FFT_forward(vect,TF_vect,nb_vect) 143 145 146 ! CALL FFT_forward(vect,TF_vect_test,nb_vect) 147 ! PRINT *,"XXXXXXXXXXXXX Filtre_u_FFT xxxxxxxxxxxx" 148 ! DO j=1,jj_end-jj_begin+1 149 ! DO i=1,iim/2+1 150 ! PRINT *,"====",i,j,"----->",TF_vect_test(i,j,1) 151 ! ENDDO 152 ! ENDDO 153 144 154 DO l=1,ll_nb 145 155 DO j=1,jj_end-jj_begin+1 … … 149 159 ENDDO 150 160 ENDDO 151 161 152 162 CALL FFT_backward(TF_vect,vect,nb_vect) 153 163 ! CALL FFT_backward(TF_vect_test,vect_test,nb_vect) 164 154 165 ! PRINT *,"XXXXXXXXXXXXX Filtre_u_FFT xxxxxxxxxxxx" 155 166 ! DO j=1,jj_end-jj_begin+1 156 ! DO i=1,iim 157 ! PRINT *,"====",j,"----->",(vect_tmp(i,j,1)-vect(i,j,1))/ & 158 ! ((vect_tmp(i,j,1)+vect(i,j,1))*0.5+1e-30) 159 ! ENDDO 167 ! DO i=1,iim 168 ! PRINT *,"====",i,j,"----->",vect_test(i,j,1) 169 ! ENDDO 160 170 ! ENDDO 161 171 162 172 ll_nb=0 163 173 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) … … 189 199 190 200 REAL :: vect(iim+inc,jj_end-jj_begin+1,nbniv) 191 COMPLEX 201 COMPLEX*16 :: TF_vect(iim/2+1,jj_end-jj_begin+1,nbniv) 192 202 INTEGER :: nb_vect 193 203 INTEGER :: i,j,l … … 250 260 REAL,INTENT(INOUT) :: vect_inout(iim+1,nlat,nbniv) 251 261 252 253 COMPLEX 262 REAL :: vect(iim+inc,jj_end-jj_begin+1,nbniv) 263 COMPLEX*16 :: TF_vect(iim/2+1,jj_end-jj_begin+1,nbniv) 254 264 INTEGER :: nb_vect 255 265 INTEGER :: i,j,l -
LMDZ4/trunk/libf/phylmd/YOECUMF.h
r776 r1279 1 1 ! 2 ! $ Header$2 ! $Id$ 3 3 ! 4 C ---------------------------------------------------------------- 5 C* *COMMON* *YOECUMF* - PARAMETERS FOR CUMULUS MASSFLUX SCHEME 6 C ---------------------------------------------------------------- 7 C 8 COMMON /YOECUMF/ 9 L LMFPEN,LMFSCV,LMFMID,LMFDD,LMFDUDV, 10 R ENTRPEN,ENTRSCV,ENTRMID,ENTRDD,CMFCTOP, 11 R CMFCMAX,CMFCMIN,CMFDEPS,RHCDD,CPRCON 12 C 4 ! ATTENTION!!!!: ce fichier include est compatible format fixe/format libre 5 ! veillez n'utiliser que des ! pour les commentaires 6 ! et bien positionner les & des lignes de continuation 7 ! (les placer en colonne 6 et en colonne 73) 8 ! 9 ! ---------------------------------------------------------------- 10 !* *COMMON* *YOECUMF* - PARAMETERS FOR CUMULUS MASSFLUX SCHEME 11 ! ---------------------------------------------------------------- 12 ! 13 COMMON /YOECUMF/ & 14 & LMFPEN,LMFSCV,LMFMID,LMFDD,LMFDUDV, & 15 & ENTRPEN,ENTRSCV,ENTRMID,ENTRDD,CMFCTOP, & 16 & CMFCMAX,CMFCMIN,CMFDEPS,RHCDD,CPRCON 17 13 18 LOGICAL LMFPEN,LMFSCV,LMFMID,LMFDD,LMFDUDV 14 19 REAL ENTRPEN, ENTRSCV, ENTRMID, ENTRDD 15 20 REAL CMFCTOP, CMFCMAX, CMFCMIN, CMFDEPS, RHCDD, CPRCON 16 c$OMP THREADPRIVATE(/YOECUMF/)17 C 18 *if (DOC,declared) <> 'UNKNOWN'19 C* *COMMON* *YOECUMF* - PARAMETERS FOR CUMULUS MASSFLUX SCHEME20 C 21 CM.TIEDTKE E. C. M. W. F. 18/1/8922 C 23 CNAME TYPE PURPOSE24 C---- ---- -------25 C 26 CLMFPEN LOGICAL TRUE IF PENETRATIVE CONVECTION IS SWITCHED ON27 CLMFSCV LOGICAL TRUE IF SHALLOW CONVECTION IS SWITCHED ON28 CLMFMID LOGICAL TRUE IF MIDLEVEL CONVECTION IS SWITCHED ON29 CLMFDD LOGICAL TRUE IF CUMULUS DOWNDRAFT IS SWITCHED ON30 CLMFDUDV LOGICAL TRUE IF CUMULUS FRICTION IS SWITCHED ON31 CENTRPEN REAL ENTRAINMENT RATE FOR PENETRATIVE CONVECTION32 CENTRSCV REAL ENTRAINMENT RATE FOR SHALLOW CONVECTION33 CENTRMID REAL ENTRAINMENT RATE FOR MIDLEVEL CONVECTION34 CENTRDD REAL ENTRAINMENT RATE FOR CUMULUS DOWNDRAFTS35 CCMFCTOP REAL RELAT. CLOUD MASSFLUX AT LEVEL ABOVE NONBUOYANC36 CCMFCMAX REAL MAXIMUM MASSFLUX VALUE ALLOWED FOR37 CCMFCMIN REAL MINIMUM MASSFLUX VALUE (FOR SAFETY)38 CCMFDEPS REAL FRACTIONAL MASSFLUX FOR DOWNDRAFTS AT LFS39 CRHCDD REAL RELATIVE SATURATION IN DOWNDRAFTS40 CCPRCON REAL COEFFICIENTS FOR DETERMINING CONVERSION41 CFROM CLOUD WATER TO RAIN42 *ifend43 C----------------------------------------------------------------21 !$OMP THREADPRIVATE(/YOECUMF/) 22 ! 23 !*if (DOC,declared) <> 'UNKNOWN' 24 !* *COMMON* *YOECUMF* - PARAMETERS FOR CUMULUS MASSFLUX SCHEME 25 ! 26 ! M.TIEDTKE E. C. M. W. F. 18/1/89 27 ! 28 ! NAME TYPE PURPOSE 29 ! ---- ---- ------- 30 ! 31 ! LMFPEN LOGICAL TRUE IF PENETRATIVE CONVECTION IS SWITCHED ON 32 ! LMFSCV LOGICAL TRUE IF SHALLOW CONVECTION IS SWITCHED ON 33 ! LMFMID LOGICAL TRUE IF MIDLEVEL CONVECTION IS SWITCHED ON 34 ! LMFDD LOGICAL TRUE IF CUMULUS DOWNDRAFT IS SWITCHED ON 35 ! LMFDUDV LOGICAL TRUE IF CUMULUS FRICTION IS SWITCHED ON 36 ! ENTRPEN REAL ENTRAINMENT RATE FOR PENETRATIVE CONVECTION 37 ! ENTRSCV REAL ENTRAINMENT RATE FOR SHALLOW CONVECTION 38 ! ENTRMID REAL ENTRAINMENT RATE FOR MIDLEVEL CONVECTION 39 ! ENTRDD REAL ENTRAINMENT RATE FOR CUMULUS DOWNDRAFTS 40 ! CMFCTOP REAL RELAT. CLOUD MASSFLUX AT LEVEL ABOVE NONBUOYANC 41 ! CMFCMAX REAL MAXIMUM MASSFLUX VALUE ALLOWED FOR 42 ! CMFCMIN REAL MINIMUM MASSFLUX VALUE (FOR SAFETY) 43 ! CMFDEPS REAL FRACTIONAL MASSFLUX FOR DOWNDRAFTS AT LFS 44 ! RHCDD REAL RELATIVE SATURATION IN DOWNDRAFTS 45 ! CPRCON REAL COEFFICIENTS FOR DETERMINING CONVERSION 46 ! FROM CLOUD WATER TO RAIN 47 !*ifend 48 ! ---------------------------------------------------------------- -
LMDZ4/trunk/libf/phylmd/aaam_bud.F
r940 r1279 39 39 c nlon----input-I-Total number of horizontal points that get into physics 40 40 c nlev----input-I-Number of vertical levels 41 c rjour ---input-R-Jour compte depuis le debut de la simu (run.def)42 c rsec ----input-R-Seconde de la journee43 c rea -----input-R-Earth radius44 c rg ------input-R-gravity constant45 c ome -----input-R-Earth rotation rate41 c rjour -R-Jour compte depuis le debut de la simu (run.def) 42 c rsec -R-Seconde de la journee 43 c rea -R-Earth radius 44 c rg -R-gravity constant 45 c ome -R-Earth rotation rate 46 46 c plat ---input-R-Latitude en degres 47 47 c plon ---input-R-Longitude en degres … … 94 94 c 95 95 INTEGER iam,nlon,nlev 96 REAL rjour,rsec,rea,rg,ome96 REAL, intent(in):: rjour,rsec,rea,rg,ome 97 97 REAL plat(nlon),plon(nlon),phis(nlon) 98 98 REAL dragu(nlon),liftu(nlon),phyu(nlon) -
LMDZ4/trunk/libf/phylmd/aeropt.F
r766 r1279 16 16 c Arguments: 17 17 c 18 REAL paprs(klon,klev+1)19 REAL pplay(klon,klev), t_seri(klon,klev)20 REAL msulfate(klon,klev) ! masse sulfate ug SO4/m3 [ug/m^3]21 REAL RHcl(klon,klev) ! humidite relative ciel clair22 REAL tau_ae(klon,klev,2) ! epaisseur optique aerosol23 REAL piz_ae(klon,klev,2) ! single scattering albedo aerosol24 REAL cg_ae(klon,klev,2) ! asymmetry parameter aerosol25 REAL ai(klon) ! POLDER aerosol index18 REAL, INTENT(in) :: paprs(klon,klev+1) 19 REAL, INTENT(in) :: pplay(klon,klev), t_seri(klon,klev) 20 REAL, INTENT(in) :: msulfate(klon,klev) ! masse sulfate ug SO4/m3 [ug/m^3] 21 REAL, INTENT(in) :: RHcl(klon,klev) ! humidite relative ciel clair 22 REAL, INTENT(out) :: tau_ae(klon,klev,2) ! epaisseur optique aerosol 23 REAL, INTENT(out) :: piz_ae(klon,klev,2) ! single scattering albedo aerosol 24 REAL, INTENT(out) :: cg_ae(klon,klev,2) ! asymmetry parameter aerosol 25 REAL, INTENT(out) :: ai(klon) ! POLDER aerosol index 26 26 c 27 27 c Local -
LMDZ4/trunk/libf/phylmd/calcul_simulISCCP.h
r1045 r1279 31 31 . flwp_c, fiwp_c, flwc_c, fiwc_c, 32 32 e ok_aie, 33 e sulfate, sulfate_pi,33 e mass_solu_aero, mass_solu_aero_pi, 34 34 e bl95_b0, bl95_b1, 35 35 s cldtaupi, re, fl) … … 42 42 . flwp_s, fiwp_s, flwc_s, fiwc_s, 43 43 e ok_aie, 44 e sulfate, sulfate_pi,44 e mass_solu_aero, mass_solu_aero_pi, 45 45 e bl95_b0, bl95_b1, 46 46 s cldtaupi, re, fl) -
LMDZ4/trunk/libf/phylmd/clcdrag.F90
r1071 r1279 1 ! 2 !$Id$ 1 3 ! 2 4 SUBROUTINE clcdrag(knon, nsrf, paprs, pplay,& … … 93 95 FRIH = AMAX1(1./ (1.+3.*CB*zri(i)*ZSCF), 0.1 ) 94 96 !!$ PB zcfh1(i) = zcdn(i) * FRIH 95 zcfh1(i) = 0.8 * zcdn(i) * FRIH 97 !!$ PB zcfh1(i) = f_cdrag_stable * zcdn(i) * FRIH 98 zcfh1(i) = f_cdrag_ter * zcdn(i) * FRIH 99 IF(nsrf.EQ.is_oce) zcfh1(i) = f_cdrag_oce * zcdn(i) * FRIH 100 !!$ PB 96 101 pcfm(i) = zcfm1(i) 97 102 pcfh(i) = zcfh1(i) … … 106 111 zcfm2(i) = zcdn(i)*amax1((1.-2.0*cb*zri(i)*zucf),0.1) 107 112 !!$PB zcfh2(i) = zcdn(i)*amax1((1.-3.0*cb*zri(i)*zucf),0.1) 108 zcfh2(i) = 0.8 *zcdn(i)*amax1((1.-3.0*cb*zri(i)*zucf),0.1)113 zcfh2(i) = f_cdrag_ter*zcdn(i)*amax1((1.-3.0*cb*zri(i)*zucf),0.1) 109 114 pcfm(i) = zcfm2(i) 110 115 pcfh(i) = zcfh2(i) … … 114 119 ENDIF 115 120 zcr = (0.0016/(zcdn(i)*SQRT(zdu2)))*ABS(ztvd-ztsolv)**(1./3.) 116 IF(nsrf.EQ.is_oce) pcfh(i) = 0.8* zcdn(i)*(1.0+zcr**1.25)**(1./1.25)121 IF(nsrf.EQ.is_oce) pcfh(i) =f_cdrag_oce* zcdn(i)*(1.0+zcr**1.25)**(1./1.25) 117 122 ENDIF 118 123 END DO -
LMDZ4/trunk/libf/phylmd/clesphys.h
r1146 r1279 1 1 ! 2 ! 2 ! $Id$ 3 3 ! 4 4 ! ATTENTION!!!!: ce fichier include est compatible format fixe/format libre … … 12 12 LOGICAL ok_limitvrai 13 13 INTEGER nbapp_rad, iflag_con 14 REAL co2_ppm, solaire15 REAL *8RCO2, RCH4, RN2O, RCFC11, RCFC1216 REAL *8CH4_ppb, N2O_ppb, CFC11_ppt, CFC12_ppt14 REAL co2_ppm, co2_ppm0, solaire 15 REAL(kind=8) RCO2, RCH4, RN2O, RCFC11, RCFC12 16 REAL(kind=8) CH4_ppb, N2O_ppb, CFC11_ppt, CFC12_ppt 17 17 18 18 !OM ---> correction du bilan d'eau global … … 35 35 ! Hauteur (imposee) du contenu en eau du sol 36 36 REAL qsol0 37 ! Frottement au sol (Cdrag) 38 Real f_cdrag_ter,f_cdrag_oce 39 ! Rugoro 40 Real f_rugoro 41 37 42 !IM lev_histhf : niveau sorties 6h 38 43 !IM lev_histday : niveau sorties journalieres 39 44 !IM lev_histmth : niveau sorties mensuelles 40 45 INTEGER lev_histhf, lev_histday, lev_histmth 41 CHARACTER*4 type_run 42 ! aer_type: pour utiliser un fichier constant dans readsulfate 46 Integer lev_histins, lev_histLES 47 CHARACTER(len=4) type_run 48 ! aer_type: pour utiliser un fichier constant dans readaerosol 43 49 CHARACTER*8 :: aer_type 44 50 LOGICAL ok_isccp, ok_regdyn … … 48 54 REAL ecrit_LES 49 55 REAL freq_ISCCP, ecrit_ISCCP 56 REAL freq_COSP 57 LOGICAL :: ok_cosp 50 58 INTEGER :: ip_ebil_phy, iflag_rrtm 51 59 LOGICAL :: ok_strato … … 58 66 & , top_height, overlap, cdmmax, cdhmax, ksta, ksta_ter & 59 67 & , ok_kzmin, fmagic, pmagic & 68 & , f_cdrag_ter,f_cdrag_oce,f_rugoro & 60 69 & , lev_histhf, lev_histday, lev_histmth & 61 & , type_run, ok_isccp, ok_regdyn & 70 & , lev_histins, lev_histLES & 71 & , type_run, ok_isccp, ok_regdyn, ok_cosp & 62 72 & , lonmin_ins, lonmax_ins, latmin_ins, latmax_ins & 63 73 & , ecrit_ins, ecrit_hf, ecrit_hf2mth, ecrit_day & 64 74 & , ecrit_mth, ecrit_tra, ecrit_reg & 65 & , freq_ISCCP, ecrit_ISCCP, ip_ebil_phy&75 & , freq_ISCCP, ecrit_ISCCP, freq_COSP, ip_ebil_phy & 66 76 & , ok_lic_melt, cvl_corr, aer_type & 67 & , qsol0, iflag_rrtm, ok_strato,ok_hines,ecrit_LES 77 & , qsol0, iflag_rrtm, ok_strato,ok_hines,ecrit_LES & 78 & , co2_ppm0 68 79 69 80 !$OMP THREADPRIVATE(/clesphys/) -
LMDZ4/trunk/libf/phylmd/clouds_gno.F
r1163 r1279 1 1 ! 2 ! $ Id$2 ! $Header$ 3 3 ! 4 4 C … … 47 47 48 48 INTEGER i,K, n, m 49 REAL mu(klon), qsat (klon), delta(klon), beta(klon)50 real zu2 (klon),zv2(klon)51 REAL xx(klon), aux(klon), coeff (klon), block(klon)52 REAL dist (klon), fprime(klon), det(klon)53 REAL pi, u (klon), v(klon), erfcu(klon), erfcv(klon)54 REAL xx1 (klon), xx2(klon)55 real erf, kkk49 REAL mu(klon), qsat, delta(klon), beta(klon) 50 real zu2,zv2 51 REAL xx(klon), aux(klon), coeff, block 52 REAL dist, fprime, det 53 REAL pi, u, v, erfcu, erfcv 54 REAL xx1, xx2 55 real erf,hsqrtlog_2,v2 56 56 real sqrtpi,sqrt2,zx1,zx2,exdel 57 57 c lconv = true si le calcul a converge (entre autre si qsub < min_q) 58 58 LOGICAL lconv(klon) 59 59 60 cym 61 cldf(:,:)=0.0 60 !cdir arraycomb 61 cldf (1:klon,1:ND)=0.0 ! cym 62 ratqsc(1:klon,1:ND)=0.0 63 ptconv(1:klon,1:ND)=.false. 64 !cdir end arraycomb 62 65 63 66 pi = ACOS(-1.) 64 67 sqrtpi=sqrt(pi) 65 68 sqrt2=sqrt(2.) 66 67 ptconv=.false. 68 ratqsc=0. 69 69 hsqrtlog_2=0.5*SQRT(log(2.)) 70 70 71 71 DO 500 K = 1, ND … … 74 74 mu(i) = R(i,K) 75 75 mu(i) = MAX(mu(i),min_mu) 76 qsat (i)= RS(i,K)77 qsat (i) = MAX(qsat(i),min_mu)78 delta(i) = log(mu(i)/qsat (i))79 76 qsat = RS(i,K) 77 qsat = MAX(qsat,min_mu) 78 delta(i) = log(mu(i)/qsat) 79 c enddo ! vector 80 80 81 81 C … … 106 106 c suffisamment d'eau nuageuse. 107 107 108 108 c do i=1,klon ! vector 109 109 110 110 IF ( QSUB(i,K) .lt. min_Q ) THEN … … 124 124 c -- roots of equation v > vmax: 125 125 126 det (i) = delta(i) + vmax(i)**2.127 if (det (i).LE.0.0) vmax(i) = vmax0 + 1.0128 det (i) = delta(i) + vmax(i)**2.129 130 if (det (i).LE.0.) then126 det = delta(i) + vmax(i)*vmax(i) 127 if (det.LE.0.0) vmax(i) = vmax0 + 1.0 128 det = delta(i) + vmax(i)*vmax(i) 129 130 if (det.LE.0.) then 131 131 xx(i) = -0.0001 132 132 else 133 133 zx1=-sqrt2*vmax(i) 134 zx2=SQRT(1.0+delta(i)/(vmax(i)* *2.))135 xx1 (i)=zx1*(1.0-zx2)136 xx2 (i)=zx1*(1.0+zx2)137 xx(i) = 1.01 * xx1 (i)138 if ( xx1 (i) .GE. 0.0 ) xx(i) = 0.5*xx2(i)134 zx2=SQRT(1.0+delta(i)/(vmax(i)*vmax(i))) 135 xx1=zx1*(1.0-zx2) 136 xx2=zx1*(1.0+zx2) 137 xx(i) = 1.01 * xx1 138 if ( xx1 .GE. 0.0 ) xx(i) = 0.5*xx2 139 139 endif 140 if (delta(i).LT.0.) xx(i) = - 0.5*SQRT(log(2.))140 if (delta(i).LT.0.) xx(i) = -hsqrtlog_2 141 141 142 142 ENDIF … … 153 153 if (.not.lconv(i)) then 154 154 155 u(i) = delta(i)/(xx(i)*sqrt2) + xx(i)/(2.*sqrt2) 156 v(i) = delta(i)/(xx(i)*sqrt2) - xx(i)/(2.*sqrt2) 157 158 IF ( v(i) .GT. vmax(i) ) THEN 159 160 IF ( ABS(u(i)) .GT. vmax(i) 155 u = delta(i)/(xx(i)*sqrt2) + xx(i)/(2.*sqrt2) 156 v = delta(i)/(xx(i)*sqrt2) - xx(i)/(2.*sqrt2) 157 v2 = v*v 158 159 IF ( v .GT. vmax(i) ) THEN 160 161 IF ( ABS(u) .GT. vmax(i) 161 162 : .AND. delta(i) .LT. 0. ) THEN 162 163 … … 171 172 endif 172 173 xx(i) = -SQRT(aux(i)) 173 block (i) = EXP(-v(i)*v(i)) / v(i)/ sqrtpi174 dist (i)= 0.0175 fprime (i)= 1.0174 block = EXP(-v*v) / v / sqrtpi 175 dist = 0.0 176 fprime = 1.0 176 177 177 178 ELSE … … 179 180 c -- erfv -> 1.0, use an asymptotic expression of erfv for v large: 180 181 181 erfcu (i) = 1.0-ERF(u(i))182 erfcu = 1.0-ERF(u) 182 183 c !!! ATTENTION : rajout d'un seuil pour l'exponentiel 183 aux(i) = sqrtpi*erfcu (i)*EXP(min(v(i)*v(i),100.))184 coeff (i) = 1.0 - 1./2./(v(i)**2.) + 3./4./(v(i)**4.)185 block (i) = coeff(i) * EXP(-v(i)*v(i)) / v(i)/ sqrtpi186 dist (i) = v(i) * aux(i) / coeff(i)- beta(i)187 fprime (i) = 2.0 / xx(i) * (v(i)**2.)188 : * ( coeff(i)*EXP(-delta(i)) - u(i) * aux(i))189 : / coeff (i) / coeff(i)184 aux(i) = sqrtpi*erfcu*EXP(min(v2,100.)) 185 coeff = 1.0 - 0.5/(v2) + 0.75/(v2*v2) 186 block = coeff * EXP(-v2) / v / sqrtpi 187 dist = v * aux(i) / coeff - beta(i) 188 fprime = 2.0 / xx(i) * (v2) 189 : * ( EXP(-delta(i)) - u * aux(i) / coeff ) 190 : / coeff 190 191 191 192 ENDIF ! ABS(u) … … 195 196 c -- general case: 196 197 197 erfcu (i) = 1.0-ERF(u(i))198 erfcv (i) = 1.0-ERF(v(i))199 block (i) = erfcv(i)200 dist (i) = erfcu(i) / erfcv(i)- beta(i)201 zu2 (i)=u(i)*u(i)202 zv2 (i)=v(i)*v(i)203 if(zu2 (i).gt.20..or. zv2(i).gt.20.) then198 erfcu = 1.0-ERF(u) 199 erfcv = 1.0-ERF(v) 200 block = erfcv 201 dist = erfcu / erfcv - beta(i) 202 zu2=u*u 203 zv2=v2 204 if(zu2.gt.20..or. zv2.gt.20.) then 204 205 c print*,'ATTENTION !!! xx(',i,') =', xx(i) 205 206 c print*,'ATTENTION !!! klon,ND,R,RS,QSUB,PTCONV,RATQSC,CLDF', … … 207 208 c .CLDF(i,k) 208 209 c print*,'ATTENTION !!! zu2 zv2 =',zu2(i),zv2(i) 209 zu2 (i)=20.210 zv2 (i)=20.211 fprime (i)= 0.210 zu2=20. 211 zv2=20. 212 fprime = 0. 212 213 else 213 fprime (i) = 2. /sqrtpi /xx(i) /erfcv(i)**2.214 : * ( erfcv (i)*v(i)*EXP(-zu2(i))215 : - erfcu (i)*u(i)*EXP(-zv2(i)) )214 fprime = 2. /sqrtpi /xx(i) /(erfcv*erfcv) 215 : * ( erfcv*v*EXP(-zu2) 216 : - erfcu*u*EXP(-zv2) ) 216 217 endif 217 218 ENDIF ! x … … 223 224 ! stop 224 225 ! endif 225 if (abs(fprime (i)).lt.1.e-11) then226 if (abs(fprime).lt.1.e-11) then 226 227 ! print*,'avant test fprime<.e-11 ' 227 228 ! s ,i,k,lconv(i),u(i),v(i),beta(i),fprime(i) 228 229 ! print*,'klon,ND,R,RS,QSUB', 229 230 ! s klon,ND,R(i,k),rs(i,k),qsub(i,k) 230 fprime (i)=sign(1.e-11,fprime(i))231 fprime=sign(1.e-11,fprime) 231 232 endif 232 233 233 234 234 if ( ABS(dist (i)/beta(i)) .LT. epsilon ) then235 if ( ABS(dist/beta(i)) .LT. epsilon ) then 235 236 c print*,'v-u **2',(v(i)-u(i))**2 236 237 c print*,'exp v-u **2',exp((v(i)-u(i))**2) … … 238 239 lconv(i)=.true. 239 240 c borne pour l'exponentielle 240 ratqsc(i,k)=min(2.*(v (i)-u(i))**2,20.)241 ratqsc(i,k)=min(2.*(v-u)*(v-u),20.) 241 242 ratqsc(i,k)=sqrt(exp(ratqsc(i,k))-1.) 242 CLDF(i,K) = 0.5 * block (i)243 CLDF(i,K) = 0.5 * block 243 244 else 244 xx(i) = xx(i) - dist (i)/fprime(i)245 xx(i) = xx(i) - dist/fprime 245 246 endif 246 247 c print*,'apres test ',i,k,lconv(i) -
LMDZ4/trunk/libf/phylmd/conf_phys.F90
r1146 r1279 1 1 2 2 ! 3 ! $Header$ 4 ! 5 ! 6 ! 3 ! $Id$ 4 ! 5 ! 6 ! 7 module conf_phys_m 8 9 implicit none 10 11 contains 7 12 8 13 subroutine conf_phys(ok_journe, ok_mensuel, ok_instan, ok_hf, & 9 & ok_LES,& 10 & solarlong0,seuil_inversion, & 11 & fact_cldcon, facttemps,ok_newmicro,iflag_radia,& 12 & iflag_cldcon, & 13 & iflag_ratqs,ratqsbas,ratqshaut, & 14 & ok_ade, ok_aie, aerosol_couple, & 15 & bl95_b0, bl95_b1,& 16 & iflag_thermals,nsplit_thermals,tau_thermals, & 17 & iflag_thermals_ed,iflag_thermals_optflux, & 18 & iflag_coupl,iflag_clos,iflag_wake ) 14 ok_LES,& 15 solarlong0,seuil_inversion, & 16 fact_cldcon, facttemps,ok_newmicro,iflag_radia,& 17 iflag_cldcon, & 18 iflag_ratqs,ratqsbas,ratqshaut,tau_ratqs, & 19 ok_ade, ok_aie, aerosol_couple, & 20 flag_aerosol, new_aod, & 21 bl95_b0, bl95_b1,& 22 iflag_thermals,nsplit_thermals,tau_thermals, & 23 iflag_thermals_ed,iflag_thermals_optflux, & 24 iflag_coupl,iflag_clos,iflag_wake, read_climoz) 19 25 20 26 use IOIPSL 21 27 USE surface_data 22 23 implicit none 28 USE carbon_cycle_mod, ONLY : carbon_cycle_tr, carbon_cycle_cpl 24 29 25 30 include "conema3.h" … … 60 65 logical :: ok_LES 61 66 LOGICAL :: ok_ade, ok_aie, aerosol_couple 67 INTEGER :: flag_aerosol 68 LOGICAL :: new_aod 62 69 REAL :: bl95_b0, bl95_b1 63 real :: fact_cldcon, facttemps,ratqsbas,ratqshaut 70 real :: fact_cldcon, facttemps,ratqsbas,ratqshaut,tau_ratqs 64 71 integer :: iflag_cldcon 65 72 integer :: iflag_ratqs … … 71 78 logical,SAVE :: ok_LES_omp 72 79 LOGICAL,SAVE :: ok_ade_omp, ok_aie_omp, aerosol_couple_omp 80 INTEGER, SAVE :: flag_aerosol_omp 81 LOGICAL, SAVE :: new_aod_omp 73 82 REAL,SAVE :: bl95_b0_omp, bl95_b1_omp 74 83 REAL,SAVE :: freq_ISCCP_omp, ecrit_ISCCP_omp 84 REAL,SAVE :: freq_COSP_omp 75 85 real,SAVE :: fact_cldcon_omp, facttemps_omp,ratqsbas_omp 76 86 real,SAVE :: ratqshaut_omp 87 real,SAVE :: tau_ratqs_omp 77 88 integer,SAVE :: iflag_radia_omp 78 89 integer,SAVE :: iflag_rrtm_omp 79 90 integer,SAVE :: iflag_cldcon_omp, ip_ebil_phy_omp 80 91 integer,SAVE :: iflag_ratqs_omp 92 93 Real,SAVE :: f_cdrag_ter_omp,f_cdrag_oce_omp 94 Real,SAVE :: f_rugoro_omp 81 95 82 96 ! Local … … 121 135 REAL, SAVE :: fmagic_omp, pmagic_omp 122 136 INTEGER,SAVE :: iflag_pbl_omp,lev_histhf_omp,lev_histday_omp,lev_histmth_omp 137 Integer,save :: lev_histins_omp, lev_histLES_omp 123 138 CHARACTER*4, SAVE :: type_run_omp 124 139 LOGICAL,SAVE :: ok_isccp_omp 140 LOGICAL,SAVE :: ok_cosp_omp 125 141 REAL,SAVE :: lonmin_ins_omp, lonmax_ins_omp, latmin_ins_omp, latmax_ins_omp 126 142 REAL,SAVE :: ecrit_hf_omp, ecrit_day_omp, ecrit_mth_omp, ecrit_reg_omp 143 REAL,SAVE :: ecrit_ins_omp 127 144 REAL,SAVE :: ecrit_LES_omp 128 145 REAL,SAVE :: ecrit_tra_omp … … 135 152 LOGICAL,SAVE :: ok_strato_omp 136 153 LOGICAL,SAVE :: ok_hines_omp 137 ! 154 LOGICAL,SAVE :: carbon_cycle_tr_omp 155 LOGICAL,SAVE :: carbon_cycle_cpl_omp 156 157 integer, intent(out):: read_climoz ! read ozone climatology, OpenMP shared 158 ! Allowed values are 0, 1 and 2 159 ! 0: do not read an ozone climatology 160 ! 1: read a single ozone climatology that will be used day and night 161 ! 2: read two ozone climatologies, the average day and night 162 ! climatology and the daylight climatology 138 163 139 164 !$OMP MASTER … … 239 264 CALL getin('aerosol_couple',aerosol_couple_omp) 240 265 266 ! 267 !Config Key = flag_aerosol 268 !Config Desc = which aerosol is use for coupled model 269 !Config Def = 1 270 !Config Help = Used in physiq.F 271 ! 272 ! - flag_aerosol=1 => so4 only (defaut) 273 ! - flag_aerosol=2 => bc only 274 ! - flag_aerosol=3 => pom only 275 ! - flag_aerosol=4 => seasalt only 276 ! - flag_aerosol=5 => dust only 277 ! - flag_aerosol=6 => all aerosol 278 279 flag_aerosol_omp = 1 280 CALL getin('flag_aerosol',flag_aerosol_omp) 281 282 ! Temporary variable for testing purpose!! 283 !Config Key = new_aod 284 !Config Desc = which calcul of aeropt 285 !Config Def = false 286 !Config Help = Used in physiq.F 287 ! 288 new_aod_omp = .true. 289 CALL getin('new_aod',new_aod_omp) 290 241 291 ! 242 292 !Config Key = aer_type 243 293 !Config Desc = Use a constant field for the aerosols 244 294 !Config Def = scenario 245 !Config Help = Used in read sulfate.F295 !Config Help = Used in readaerosol.F90 246 296 ! 247 297 aer_type_omp = 'scenario' … … 283 333 ecrit_ISCCP_omp = 1. 284 334 call getin('ecrit_ISCCP', ecrit_ISCCP_omp) 335 336 !Config Key = freq_COSP 337 !Config Desc = Frequence d'appel du simulateur COSP en secondes; 338 ! par defaut 10800, i.e. 3 heures 339 !Config Def = 10800. 340 !Config Help = Used in ini_histdayCOSP.h 341 ! 342 freq_COSP_omp = 10800. 343 call getin('freq_COSP', freq_COSP_omp) 344 285 345 ! 286 346 !Config Key = ip_ebil_phy … … 690 750 call getin('ratqshaut',ratqshaut_omp) 691 751 752 !Config Key = tau_ratqs 753 !Config Desc = 754 !Config Def = 1800. 755 !Config Help = 756 ! 757 tau_ratqs_omp = 1800. 758 call getin('tau_ratqs',tau_ratqs_omp) 759 692 760 ! 693 761 !----------------------------------------------------------------------- … … 918 986 !Config Help = 919 987 ! 920 iflag_coupl = 0988 iflag_coupl_omp = 0 921 989 call getin('iflag_coupl',iflag_coupl_omp) 922 990 … … 927 995 !Config Help = 928 996 ! 929 iflag_clos = 1997 iflag_clos_omp = 1 930 998 call getin('iflag_clos',iflag_clos_omp) 931 999 ! … … 935 1003 !Config Help = 936 1004 ! 937 iflag_cvl_sigd = 01005 iflag_cvl_sigd_omp = 0 938 1006 call getin('iflag_cvl_sigd',iflag_cvl_sigd_omp) 939 1007 … … 943 1011 !Config Help = 944 1012 ! 945 iflag_wake = 01013 iflag_wake_omp = 0 946 1014 call getin('iflag_wake',iflag_wake_omp) 947 1015 … … 972 1040 lev_histmth_omp = 2 973 1041 call getin('lev_histmth',lev_histmth_omp) 974 1042 ! 1043 !Config Key = lev_histins 1044 !Config Desc = 1045 !Config Def = 1 1046 !Config Help = 1047 ! 1048 lev_histins_omp = 1 1049 call getin('lev_histins',lev_histins_omp) 1050 ! 1051 !Config Key = lev_histLES 1052 !Config Desc = 1053 !Config Def = 1 1054 !Config Help = 1055 ! 1056 lev_histLES_omp = 1 1057 call getin('lev_histLES',lev_histLES_omp) 975 1058 ! 976 1059 !Config Key = type_run … … 993 1076 994 1077 ! 1078 !Config Key = ok_cosp 1079 !Config Desc = 1080 !Config Def = .false. 1081 !Config Help = 1082 ! 1083 ok_cosp_omp = .false. 1084 call getin('ok_cosp',ok_cosp_omp) 1085 1086 ! 995 1087 ! coordonnees (lonmin_ins, lonmax_ins, latmin_ins, latmax_ins) pour la zone 996 1088 ! avec sorties instantannees tous les pas de temps de la physique => "histbilKP_ins.nc" … … 1036 1128 call getin('ecrit_hf',ecrit_hf_omp) 1037 1129 ! 1130 !Config Key = ecrit_ins 1131 !Config Desc = 1132 !Config Def = 1./48. ! toutes les 1/2 h 1133 !Config Help = 1134 ! 1135 ecrit_ins_omp = 1./48. 1136 call getin('ecrit_ins',ecrit_ins_omp) 1137 ! 1038 1138 !Config Key = ecrit_day 1039 1139 !Config Desc = … … 1070 1170 ! 1071 1171 ! 1172 ! PARAMETRES CDRAG 1173 ! 1174 !Config Key = f_cdrag_ter 1175 !Config Desc = 1176 !Config Def = 0.8 1177 !Config Help = 1178 ! 1179 f_cdrag_ter_omp = 0.8 1180 call getin('f_cdrag_ter',f_cdrag_ter_omp) 1181 ! 1182 !Config Key = f_cdrag_oce 1183 !Config Desc = 1184 !Config Def = 0.8 1185 !Config Help = 1186 ! 1187 f_cdrag_oce_omp = 0.8 1188 call getin('f_cdrag_oce',f_cdrag_oce_omp) 1189 ! 1190 ! RUGORO 1191 !Config Key = f_rugoro 1192 !Config Desc = 1193 !Config Def = 0. 1194 !Config Help = 1195 ! 1196 f_rugoro_omp = 0. 1197 call getin('f_rugoro',f_rugoro_omp) 1198 1072 1199 ! PARAMETERS FOR CONVECTIVE INHIBITION BY TROPOS. DRYNESS 1073 1200 ! … … 1191 1318 call getin('ecrit_LES', ecrit_LES_omp) 1192 1319 ! 1320 read_climoz = 0 ! default value 1321 call getin('read_climoz', read_climoz) 1322 1323 carbon_cycle_tr_omp=.FALSE. 1324 CALL getin('carbon_cycle_tr',carbon_cycle_tr_omp) 1325 1326 carbon_cycle_cpl_omp=.FALSE. 1327 CALL getin('carbon_cycle_cpl',carbon_cycle_cpl_omp) 1193 1328 1194 1329 !$OMP END MASTER … … 1252 1387 lev_histday = lev_histday_omp 1253 1388 lev_histmth = lev_histmth_omp 1389 lev_histins = lev_histins_omp 1390 lev_histLES = lev_histLES_omp 1254 1391 1255 1392 type_ocean = type_ocean_omp … … 1263 1400 freq_ISCCP = freq_ISCCP_omp 1264 1401 ecrit_ISCCP = ecrit_ISCCP_omp 1402 freq_COSP = freq_COSP_omp 1265 1403 ok_ade = ok_ade_omp 1266 1404 ok_aie = ok_aie_omp 1267 1405 aerosol_couple = aerosol_couple_omp 1406 flag_aerosol=flag_aerosol_omp 1407 new_aod=new_aod_omp 1268 1408 aer_type = aer_type_omp 1269 1409 bl95_b0 = bl95_b0_omp … … 1273 1413 ratqsbas = ratqsbas_omp 1274 1414 ratqshaut = ratqshaut_omp 1415 tau_ratqs = tau_ratqs_omp 1416 1275 1417 iflag_radia = iflag_radia_omp 1276 1418 iflag_rrtm = iflag_rrtm_omp … … 1289 1431 type_run = type_run_omp 1290 1432 ok_isccp = ok_isccp_omp 1433 ok_cosp = ok_cosp_omp 1291 1434 seuil_inversion=seuil_inversion_omp 1292 1435 lonmin_ins = lonmin_ins_omp … … 1295 1438 latmax_ins = latmax_ins_omp 1296 1439 ecrit_hf = ecrit_hf_omp 1440 ecrit_ins = ecrit_ins_omp 1297 1441 ecrit_day = ecrit_day_omp 1298 1442 ecrit_mth = ecrit_mth_omp … … 1301 1445 cvl_corr = cvl_corr_omp 1302 1446 ok_lic_melt = ok_lic_melt_omp 1447 f_cdrag_ter=f_cdrag_ter_omp 1448 f_cdrag_oce=f_cdrag_oce_omp 1449 f_rugoro=f_rugoro_omp 1303 1450 supcrit1 = supcrit1_omp 1304 1451 supcrit2 = supcrit2_omp … … 1314 1461 ok_LES = ok_LES_omp 1315 1462 ecrit_LES = ecrit_LES_omp 1316 1463 carbon_cycle_tr = carbon_cycle_tr_omp 1464 carbon_cycle_cpl = carbon_cycle_cpl_omp 1465 1317 1466 ! Test of coherence between type_ocean and version_ocean 1318 1467 IF (type_ocean=='couple' .AND. (version_ocean/='opa8' .AND. version_ocean/='nemo') ) THEN … … 1326 1475 WRITE(numout,*)' ERROR version_ocean=',version_ocean,' not valid with slab ocean' 1327 1476 CALL abort_gcm('conf_phys','version_ocean not valid',1) 1477 END IF 1478 1479 ! Test sur new_aod. Ce flag permet de retrouver les resultats de l'AR4 1480 ! il n'est utilisable que lors du couplage avec le SO4 seul 1481 IF (ok_ade .OR. ok_aie) THEN 1482 IF ( .NOT. new_aod .AND. flag_aerosol .NE. 1) THEN 1483 CALL abort_gcm('conf_phys','new_aod=.FALSE. not compatible avec flag_aerosol=1',1) 1484 END IF 1328 1485 END IF 1329 1486 … … 1341 1498 write(numout,*)' Frequence appel simulateur ISCCP, freq_ISCCP =', freq_ISCCP 1342 1499 write(numout,*)' Frequence appel simulateur ISCCP, ecrit_ISCCP =', ecrit_ISCCP 1500 write(numout,*)' Frequence appel simulateur COSP, freq_COSP =', freq_COSP 1343 1501 write(numout,*)' Sortie bilan d''energie, ip_ebil_phy =', ip_ebil_phy 1344 1502 write(numout,*)' Excentricite = ',R_ecc … … 1384 1542 write(numout,*)' ratqsbas = ',ratqsbas 1385 1543 write(numout,*)' ratqshaut = ',ratqshaut 1544 write(numout,*)' tau_ratqs = ',tau_ratqs 1386 1545 write(numout,*)' top_height = ',top_height 1387 1546 write(numout,*)' overlap = ',overlap … … 1396 1555 write(numout,*)' ok_aie = ',ok_aie 1397 1556 write(numout,*)' aerosol_couple = ', aerosol_couple 1557 write(numout,*)' flag_aerosol = ', flag_aerosol 1558 write(numout,*)' new_aod = ', new_aod 1398 1559 write(numout,*)' aer_type = ',aer_type 1399 1560 write(numout,*)' bl95_b0 = ',bl95_b0 … … 1402 1563 write(numout,*)' lev_histday = ',lev_histday 1403 1564 write(numout,*)' lev_histmth = ',lev_histmth 1565 write(numout,*)' lev_histins = ',lev_histins 1566 write(numout,*)' lev_histLES = ',lev_histLES 1404 1567 write(numout,*)' iflag_pbl = ', iflag_pbl 1405 1568 write(numout,*)' iflag_thermals = ', iflag_thermals … … 1409 1572 write(numout,*)' type_run = ',type_run 1410 1573 write(numout,*)' ok_isccp = ',ok_isccp 1411 WRITE(numout,*)' solarlong0 = ', solarlong0 1574 write(numout,*)' ok_cosp = ',ok_cosp 1575 write(numout,*)' solarlong0 = ', solarlong0 1412 1576 write(numout,*)' qsol0 = ', qsol0 1413 1577 write(numout,*)' inertie_sol = ', inertie_sol 1414 1578 write(numout,*)' inertie_ice = ', inertie_ice 1415 1579 write(numout,*)' inertie_sno = ', inertie_sno 1580 write(numout,*)' f_cdrag_ter = ',f_cdrag_ter 1581 write(numout,*)' f_cdrag_oce = ',f_cdrag_oce 1582 write(numout,*)' f_rugoro = ',f_rugoro 1416 1583 write(numout,*)' supcrit1 = ', supcrit1 1417 1584 write(numout,*)' supcrit2 = ', supcrit2 … … 1425 1592 1426 1593 write(numout,*)' lonmin lonmax latmin latmax bilKP_ins =',& 1427 &lonmin_ins, lonmax_ins, latmin_ins, latmax_ins1428 write(numout,*)' ecrit_ hf, day, mth, reg, tra, ISCCP, LES',&1429 & ecrit_hf, ecrit_day, ecrit_mth, ecrit_reg, ecrit_tra, ecrit_ISCCP, ecrit_LES1594 lonmin_ins, lonmax_ins, latmin_ins, latmax_ins 1595 write(numout,*)' ecrit_ hf, ins, day, mth, reg, tra, ISCCP, LES',& 1596 ecrit_hf, ecrit_ins, ecrit_day, ecrit_mth, ecrit_reg, ecrit_tra, ecrit_ISCCP, ecrit_LES 1430 1597 1431 1598 write(numout,*) 'ok_strato = ', ok_strato 1432 1599 write(numout,*) 'ok_hines = ', ok_hines 1600 write(numout,*) 'read_climoz = ', read_climoz 1601 write(numout,*) 'carbon_cycle_tr = ', carbon_cycle_tr 1602 write(numout,*) 'carbon_cycle_cpl = ', carbon_cycle_cpl 1433 1603 1434 1604 !$OMP END MASTER … … 1438 1608 end subroutine conf_phys 1439 1609 1610 end module conf_phys_m 1440 1611 ! 1441 1612 !################################################################# -
LMDZ4/trunk/libf/phylmd/cpl_mod.F90
r1146 r1279 39 39 !************************************************************************************* 40 40 ! variable for coupling period 41 INTEGER, SAVE 41 INTEGER, SAVE :: nexca 42 42 !$OMP THREADPRIVATE(nexca) 43 43 … … 47 47 REAL, ALLOCATABLE, DIMENSION(:,:), SAVE :: cpl_snow, cpl_evap, cpl_tsol 48 48 !$OMP THREADPRIVATE(cpl_snow,cpl_evap,cpl_tsol) 49 REAL, ALLOCATABLE, DIMENSION(:,:), SAVE :: cpl_fder, cpl_albe, cpl_taux 50 !$OMP THREADPRIVATE(cpl_fder,cpl_albe,cpl_taux )49 REAL, ALLOCATABLE, DIMENSION(:,:), SAVE :: cpl_fder, cpl_albe, cpl_taux, cpl_tauy 50 !$OMP THREADPRIVATE(cpl_fder,cpl_albe,cpl_taux,cpl_tauy) 51 51 REAL, ALLOCATABLE, DIMENSION(:,:), SAVE :: cpl_windsp 52 52 !$OMP THREADPRIVATE(cpl_windsp) 53 REAL, ALLOCATABLE, DIMENSION(:,:), SAVE :: cpl_tauy 54 !$OMP THREADPRIVATE(cpl_tauy) 53 REAL, ALLOCATABLE, DIMENSION(:,:), SAVE :: cpl_taumod 54 !$OMP THREADPRIVATE(cpl_taumod) 55 REAL, ALLOCATABLE, DIMENSION(:,:), SAVE :: cpl_atm_co2 56 !$OMP THREADPRIVATE(cpl_atm_co2) 55 57 REAL, ALLOCATABLE, DIMENSION(:,:), SAVE :: cpl_rriv2D, cpl_rcoa2D, cpl_rlic2D 56 58 !$OMP THREADPRIVATE(cpl_rriv2D,cpl_rcoa2D,cpl_rlic2D) … … 67 69 REAL, ALLOCATABLE, DIMENSION(:,:), SAVE :: read_u0, read_v0 ! ocean surface current 68 70 !$OMP THREADPRIVATE(read_u0,read_v0) 69 71 REAL, ALLOCATABLE, DIMENSION(:,:), SAVE :: read_co2 ! ocean co2 flux 72 !$OMP THREADPRIVATE(read_co2) 70 73 INTEGER, ALLOCATABLE, DIMENSION(:), SAVE :: unity 71 74 !$OMP THREADPRIVATE(unity) … … 82 85 REAL, ALLOCATABLE, DIMENSION(:,:,:), SAVE :: cpl_taux2D, cpl_tauy2D 83 86 !$OMP THREADPRIVATE(cpl_taux2D, cpl_tauy2D) 87 REAL, ALLOCATABLE, DIMENSION(:,:,:), SAVE :: cpl_taumod2D 88 !$OMP THREADPRIVATE(cpl_taumod2D) 84 89 REAL, ALLOCATABLE, DIMENSION(:,:), SAVE :: cpl_windsp2D 85 90 !$OMP THREADPRIVATE(cpl_windsp2D) 86 87 ! variable for OPENMP parallelisation 88 89 INTEGER,ALLOCATABLE,DIMENSION(:),SAVE :: knon_omp 90 REAL,ALLOCATABLE,DIMENSION(:,:),SAVE :: buffer_omp 91 91 REAL, ALLOCATABLE, DIMENSION(:,:), SAVE :: cpl_atm_co22D 92 !$OMP THREADPRIVATE(cpl_atm_co22D) 93 92 94 CONTAINS 93 95 ! … … 95 97 ! 96 98 SUBROUTINE cpl_init(dtime, rlon, rlat) 99 USE carbon_cycle_mod, ONLY : carbon_cycle_cpl, fco2_ocn_day 97 100 98 101 INCLUDE "dimensions.h" … … 160 163 ALLOCATE(cpl_taux(klon,2), stat = error) 161 164 sum_error = sum_error + error 165 ALLOCATE(cpl_tauy(klon,2), stat = error) 166 sum_error = sum_error + error 162 167 ALLOCATE(cpl_windsp(klon,2), stat = error) 163 168 sum_error = sum_error + error 164 ALLOCATE(cpl_tau y(klon,2), stat = error)169 ALLOCATE(cpl_taumod(klon,2), stat = error) 165 170 sum_error = sum_error + error 166 171 ALLOCATE(cpl_rriv2D(iim,jj_nb), stat=error) … … 178 183 ALLOCATE(read_alb_sic(iim, jj_nb), stat = error) 179 184 sum_error = sum_error + error 180 181 185 ALLOCATE(read_u0(iim, jj_nb), stat = error) 182 186 sum_error = sum_error + error 183 187 ALLOCATE(read_v0(iim, jj_nb), stat = error) 184 188 sum_error = sum_error + error 189 190 IF (carbon_cycle_cpl) THEN 191 ALLOCATE(read_co2(iim, jj_nb), stat = error) 192 sum_error = sum_error + error 193 ALLOCATE(cpl_atm_co2(klon,2), stat = error) 194 sum_error = sum_error + error 195 196 ! Allocate variable in carbon_cycle_mod 197 ALLOCATE(fco2_ocn_day(klon), stat = error) 198 sum_error = sum_error + error 199 END IF 185 200 186 201 IF (sum_error /= 0) THEN … … 196 211 ENDDO 197 212 198 ! cpl_sols = 0. ; cpl_nsol = 0. ; cpl_rain = 0. ; cpl_snow = 0.199 ! cpl_evap = 0. ; cpl_tsol = 0. ; cpl_fder = 0. ; cpl_albe = 0.200 ! cpl_taux = 0. ; cpl_tauy = 0. ; cpl_rriv2D = 0. ; cpl_rcoa2D = 0.201 ! cpl_rlic2D = 0. ; cpl_windsp = 0.202 203 213 !************************************************************************************* 204 214 ! Initialize coupling … … 207 217 idtime = INT(dtime) 208 218 #ifdef CPP_COUPLE 209 !$OMP MASTER210 219 CALL inicma 211 !$OMP END MASTER212 220 #endif 213 221 … … 237 245 CALL histdef(nidct, 'tmp_lat','tmp_lat', & 238 246 "-",iim, jjm+1, nhoridct, 1, 1, 1, -99, 32, "inst", dtime,dtime) 239 DO jf=1,jpflda2o1 + jpflda2o2 240 CALL histdef(nidct, cl_writ(jf),cl_writ(jf), & 241 "-",iim, jjm+1, nhoridct, 1, 1, 1, -99, 32, "inst", dtime,dtime) 247 DO jf=1,maxsend 248 IF (infosend(i)%action) THEN 249 CALL histdef(nidct, infosend(i)%name ,infosend(i)%name , & 250 "-",iim, jjm+1, nhoridct, 1, 1, 1, -99, 32, "inst", dtime,dtime) 251 ENDIF 242 252 END DO 243 253 CALL histend(nidct) … … 248 258 0,zjulian,dtime,nhoridcs,nidcs) 249 259 ! no vertical axis 250 DO jf=1,jpfldo2a 251 CALL histdef(nidcs, cl_read(jf),cl_read(jf), & 252 "-",iim, jjm+1, nhoridcs, 1, 1, 1, -99, 32, "inst", dtime,dtime) 260 DO jf=1,maxrecv 261 IF (inforecv(i)%action) THEN 262 CALL histdef(nidcs,inforecv(i)%name ,inforecv(i)%name , & 263 "-",iim, jjm+1, nhoridcs, 1, 1, 1, -99, 32, "inst", dtime,dtime) 264 ENDIF 253 265 END DO 254 266 CALL histend(nidcs) … … 256 268 257 269 ENDIF ! is_sequential 258 259 ! OPENMP Initialization260 261 !$OMP MASTER262 ALLOCATE(knon_omp(0:omp_size-1))263 ALLOCATE(buffer_omp(klon_mpi,0:omp_size-1))264 !$OMP END MASTER265 !$OMP BARRIER266 270 267 271 END SUBROUTINE cpl_init … … 278 282 USE surface_data 279 283 USE phys_state_var_mod, ONLY : rlon, rlat 280 284 USE carbon_cycle_mod, ONLY : carbon_cycle_cpl 285 281 286 INCLUDE "indicesol.h" 282 287 INCLUDE "temps.h" … … 300 305 CHARACTER(len = 80) :: abort_message 301 306 REAL, DIMENSION(klon) :: read_sic1D 302 REAL, DIMENSION(iim,jj_nb, jpfldo2a):: tab_read_flds307 REAL, DIMENSION(iim,jj_nb,maxrecv) :: tab_read_flds 303 308 REAL, DIMENSION(klon,nbsrf) :: pctsrf_old 304 309 REAL, DIMENSION(klon_mpi) :: rlon_mpi, rlat_mpi … … 314 319 is_modified=.FALSE. 315 320 316 ! Check if right moment to rece vie from coupler321 ! Check if right moment to receive from coupler 317 322 IF (MOD(itime, nexca) == 1) THEN 318 323 is_modified=.TRUE. … … 329 334 ndexcs(:) = 0 330 335 itau_w = itau_phy + itime 331 DO i = 1, jpfldo2a 332 CALL histwrite(nidcs,cl_read(i),itau_w,tab_read_flds(:,:,i),iim*(jjm+1),ndexcs) 336 DO i = 1, maxrecv 337 IF (inforecv(i)%action) THEN 338 CALL histwrite(nidcs,inforecv(i)%name,itau_w,tab_read_flds(:,:,i),iim*(jjm+1),ndexcs) 339 ENDIF 333 340 END DO 334 341 ENDIF … … 337 344 ! Save each field in a 2D array. 338 345 !$OMP MASTER 339 read_sst(:,:) = tab_read_flds(:,:, 1) ! Sea surface temperature340 read_sic(:,:) = tab_read_flds(:,:, 2) ! Sea ice concentration341 read_alb_sic(:,:) = tab_read_flds(:,:, 3) ! Albedo at sea ice342 read_sit(:,:) = tab_read_flds(:,:, 4) ! Sea ice temperature346 read_sst(:,:) = tab_read_flds(:,:,idr_sisutw) ! Sea surface temperature 347 read_sic(:,:) = tab_read_flds(:,:,idr_icecov) ! Sea ice concentration 348 read_alb_sic(:,:) = tab_read_flds(:,:,idr_icealw) ! Albedo at sea ice 349 read_sit(:,:) = tab_read_flds(:,:,idr_icetem) ! Sea ice temperature 343 350 !$OMP END MASTER 344 351 … … 354 361 ! Transform the currents from cartesian to spheric coordinates 355 362 ! tmp_r0 should be zero 356 CALL geo2atm(iim, jj_nb, tab_read_flds(:,:,5), tab_read_flds(:,:,6), tab_read_flds(:,:,7), & 363 CALL geo2atm(iim, jj_nb, tab_read_flds(:,:,idr_curenx), & 364 tab_read_flds(:,:,idr_cureny), tab_read_flds(:,:,idr_curenz), & 357 365 tmp_lon, tmp_lat, & 358 366 read_u0(:,:), read_v0(:,:), tmp_r0(:,:)) 359 367 !$OMP END MASTER 360 368 361 369 ELSE 362 370 read_u0(:,:) = 0. 363 371 read_v0(:,:) = 0. 372 ENDIF 373 374 IF (carbon_cycle_cpl) THEN 375 !$OMP MASTER 376 read_co2(:,:) = tab_read_flds(:,:,idr_oceco2) ! CO2 flux 377 !$OMP END MASTER 364 378 ENDIF 365 379 … … 374 388 DO i = 1, klon 375 389 ! treatment only of points with ocean and/or seaice 390 ! old land-ocean mask can not be changed 376 391 IF (pctsrf_old(i,is_oce) + pctsrf_old(i,is_sic) > 0.) THEN 377 392 pctsrf(i,is_sic) = (pctsrf_old(i,is_oce) + pctsrf_old(i,is_sic)) & … … 396 411 ! The temperature is transformed into 1D array with valid points from index 1 to knon. 397 412 ! 413 USE carbon_cycle_mod, ONLY : carbon_cycle_cpl, fco2_ocn_day 398 414 INCLUDE "indicesol.h" 399 415 … … 411 427 ! Local variables 412 428 !************************************************************************************* 413 INTEGER :: i 414 REAL, DIMENSION(klon) :: sic_new 429 INTEGER :: i 430 INTEGER, DIMENSION(klon) :: index 431 REAL, DIMENSION(klon) :: sic_new 415 432 416 433 !************************************************************************************* … … 422 439 CALL cpl2gath(read_u0, u0_new, knon, knindex) 423 440 CALL cpl2gath(read_v0, v0_new, knon, knindex) 441 442 !************************************************************************************* 443 ! Transform read_co2 into uncompressed 1D variable fco2_ocn_day added directly in 444 ! the module carbon_cycle_mod 445 ! 446 !************************************************************************************* 447 IF (carbon_cycle_cpl) THEN 448 DO i=1,klon 449 index(i)=i 450 END DO 451 CALL cpl2gath(read_co2, fco2_ocn_day, klon, index) 452 END IF 424 453 425 454 !************************************************************************************* … … 499 528 ! (it is done in cpl_send_seaice_fields). 500 529 ! 530 USE carbon_cycle_mod, ONLY : carbon_cycle_cpl, co2_send 501 531 INCLUDE "indicesol.h" 502 532 INCLUDE "dimensions.h" … … 543 573 cpl_tauy(1:knon,cpl_index) = 0.0 544 574 cpl_windsp(1:knon,cpl_index) = 0.0 575 cpl_taumod(1:knon,cpl_index) = 0.0 576 IF (carbon_cycle_cpl) cpl_atm_co2(1:knon,cpl_index) = 0.0 545 577 ENDIF 546 578 … … 571 603 tauy(ig) / FLOAT(nexca) 572 604 cpl_windsp(ig,cpl_index) = cpl_windsp(ig,cpl_index) + & 573 windsp(ig) / FLOAT(nexca) 574 ENDDO 605 windsp(ig) / FLOAT(nexca) 606 cpl_taumod(ig,cpl_index) = cpl_taumod(ig,cpl_index) + & 607 SQRT ( taux(ig)*taux(ig)+tauy(ig)*tauy(ig) ) / FLOAT (nexca) 608 609 IF (carbon_cycle_cpl) THEN 610 cpl_atm_co2(ig,cpl_index) = cpl_atm_co2(ig,cpl_index) + & 611 co2_send(knindex(ig))/ FLOAT(nexca) 612 END IF 613 ENDDO 575 614 576 615 !************************************************************************************* … … 606 645 ALLOCATE(cpl_windsp2D(iim,jj_nb), stat=error) 607 646 sum_error = sum_error + error 647 ALLOCATE(cpl_taumod2D(iim,jj_nb,2), stat=error) 648 sum_error = sum_error + error 608 649 650 IF (carbon_cycle_cpl) THEN 651 ALLOCATE(cpl_atm_co22D(iim,jj_nb), stat=error) 652 sum_error = sum_error + error 653 END IF 654 609 655 IF (sum_error /= 0) THEN 610 656 abort_message='Pb allocation variables couplees pour l''ecriture' … … 650 696 knon, knindex) 651 697 652 ENDIF 698 CALL gath2cpl(cpl_taumod(:,cpl_index), cpl_taumod2D(:,:,cpl_index), & 699 knon, knindex) 700 701 IF (carbon_cycle_cpl) & 702 CALL gath2cpl(cpl_atm_co2(:,cpl_index), cpl_atm_co22D(:,:), knon, knindex) 703 ENDIF 653 704 654 705 END SUBROUTINE cpl_send_ocean_fields … … 668 719 ! the coupler. 669 720 ! 721 USE carbon_cycle_mod, ONLY : carbon_cycle_cpl 670 722 INCLUDE "indicesol.h" 671 723 INCLUDE "dimensions.h" … … 716 768 cpl_taux(1:knon,cpl_index) = 0.0 717 769 cpl_tauy(1:knon,cpl_index) = 0.0 770 cpl_taumod(1:knon,cpl_index) = 0.0 718 771 ENDIF 719 772 … … 742 795 taux(ig) / FLOAT(nexca) 743 796 cpl_tauy(ig,cpl_index) = cpl_tauy(ig,cpl_index) + & 744 tauy(ig) / FLOAT(nexca) 797 tauy(ig) / FLOAT(nexca) 798 cpl_taumod(ig,cpl_index) = cpl_taumod(ig,cpl_index) + & 799 SQRT ( taux(ig)*taux(ig)+tauy(ig)*tauy(ig) ) / FLOAT(nexca) 745 800 ENDDO 746 801 … … 775 830 ALLOCATE(cpl_windsp2D(iim,jj_nb), stat=error) 776 831 sum_error = sum_error + error 777 832 ALLOCATE(cpl_taumod2D(iim,jj_nb,2), stat=error) 833 sum_error = sum_error + error 834 835 IF (carbon_cycle_cpl) THEN 836 ALLOCATE(cpl_atm_co22D(iim,jj_nb), stat=error) 837 sum_error = sum_error + error 838 END IF 839 778 840 IF (sum_error /= 0) THEN 779 841 abort_message='Pb allocation variables couplees pour l''ecriture' … … 819 881 knon, knindex) 820 882 883 CALL gath2cpl(cpl_taumod(:,cpl_index), cpl_taumod2D(:,:,cpl_index), & 884 knon, knindex) 885 821 886 ! Send all fields 822 887 CALL cpl_send_all(itime, dtime, pctsrf, lafin, rlon, rlat) … … 894 959 ! will be done in cpl_send_seaice_fields. 895 960 ! 961 896 962 INCLUDE "dimensions.h" 897 963 … … 947 1013 ! 948 1014 USE surface_data 1015 USE carbon_cycle_mod, ONLY : carbon_cycle_cpl 949 1016 ! Some includes 950 1017 !************************************************************************************* … … 979 1046 REAL, DIMENSION(iim, jj_nb) :: tmp_calv 980 1047 ! Table with all fields to send to coupler 981 REAL, DIMENSION(iim, jj_nb, jpflda2o1+jpflda2o2):: tab_flds1048 REAL, DIMENSION(iim, jj_nb, maxsend) :: tab_flds 982 1049 REAL, DIMENSION(klon_mpi) :: rlon_mpi, rlat_mpi 983 1050 … … 998 1065 !************************************************************************************* 999 1066 !$OMP MASTER 1000 tab_flds(:,:, 7)= cpl_windsp2D(:,:)1001 tab_flds(:,:, 8)= cpl_sols2D(:,:,2)1002 tab_flds(:,:, 10) = cpl_nsol2D(:,:,2)1003 tab_flds(:,:, 12) = cpl_fder2D(:,:,2)1067 tab_flds(:,:,ids_windsp) = cpl_windsp2D(:,:) 1068 tab_flds(:,:,ids_shfice) = cpl_sols2D(:,:,2) 1069 tab_flds(:,:,ids_nsfice) = cpl_nsol2D(:,:,2) 1070 tab_flds(:,:,ids_dflxdt) = cpl_fder2D(:,:,2) 1004 1071 1005 1072 IF (version_ocean=='nemo') THEN 1006 tab_flds(:,:,18) = cpl_rriv2D(:,:) + cpl_rcoa2D(:,:) 1073 tab_flds(:,:,ids_liqrun) = cpl_rriv2D(:,:) + cpl_rcoa2D(:,:) 1074 IF (carbon_cycle_cpl) tab_flds(:,:,ids_atmco2)=cpl_atm_co22D(:,:) 1007 1075 ELSE IF (version_ocean=='opa8') THEN 1008 tab_flds(:,:, 9)= cpl_sols2D(:,:,1)1009 tab_flds(:,:, 11) = cpl_nsol2D(:,:,1)1010 tab_flds(:,:, 13) = cpl_evap2D(:,:,2)1011 tab_flds(:,:, 14) = cpl_evap2D(:,:,1)1012 tab_flds(:,:, 17) = cpl_rcoa2D(:,:)1013 tab_flds(:,:, 18) = cpl_rriv2D(:,:)1076 tab_flds(:,:,ids_shfoce) = cpl_sols2D(:,:,1) 1077 tab_flds(:,:,ids_nsfoce) = cpl_nsol2D(:,:,1) 1078 tab_flds(:,:,ids_icevap) = cpl_evap2D(:,:,2) 1079 tab_flds(:,:,ids_ocevap) = cpl_evap2D(:,:,1) 1080 tab_flds(:,:,ids_runcoa) = cpl_rcoa2D(:,:) 1081 tab_flds(:,:,ids_rivflu) = cpl_rriv2D(:,:) 1014 1082 END IF 1015 1083 … … 1063 1131 ENDIF 1064 1132 1065 IF (version_ocean=='nemo') THEN 1066 tab_flds(:,:,17) = tmp_calv(:,:) 1067 ELSE IF (version_ocean=='opa8') THEN 1068 tab_flds(:,:,19) = tmp_calv(:,:) 1069 END IF 1133 tab_flds(:,:,ids_calvin) = tmp_calv(:,:) 1070 1134 1071 1135 !************************************************************************************* … … 1078 1142 1079 1143 IF (version_ocean=='nemo') THEN 1080 tab_flds(:,:,9) = 0.0 1081 tab_flds(:,:,11) = 0.0 1082 tab_flds(:,:,13) = 0.0 1083 tab_flds(:,:,14) = 0.0 1084 tab_flds(:,:,15) = 0.0 1144 tab_flds(:,:,ids_shftot) = 0.0 1145 tab_flds(:,:,ids_nsftot) = 0.0 1146 tab_flds(:,:,ids_totrai) = 0.0 1147 tab_flds(:,:,ids_totsno) = 0.0 1148 tab_flds(:,:,ids_toteva) = 0.0 1149 tab_flds(:,:,ids_taumod) = 0.0 1085 1150 1086 1151 tmp_taux(:,:) = 0.0 … … 1092 1157 tmp_tauy = cpl_tauy2D(:,:,1) * pctsrf2D(:,:,is_oce) / deno(:,:) + & 1093 1158 cpl_tauy2D(:,:,2) * pctsrf2D(:,:,is_sic) / deno(:,:) 1159 1160 tab_flds(:,:,ids_shftot) = cpl_sols2D(:,:,1) * pctsrf2D(:,:,is_oce) / deno(:,:) + & 1161 cpl_sols2D(:,:,2) * pctsrf2D(:,:,is_sic) / deno(:,:) 1162 tab_flds(:,:,ids_nsftot) = cpl_nsol2D(:,:,1) * pctsrf2D(:,:,is_oce) / deno(:,:) + & 1163 cpl_nsol2D(:,:,2) * pctsrf2D(:,:,is_sic) / deno(:,:) 1164 tab_flds(:,:,ids_totrai) = cpl_rain2D(:,:,1) * pctsrf2D(:,:,is_oce) / deno(:,:) + & 1165 cpl_rain2D(:,:,2) * pctsrf2D(:,:,is_sic) / deno(:,:) 1166 tab_flds(:,:,ids_totsno) = cpl_snow2D(:,:,1) * pctsrf2D(:,:,is_oce) / deno(:,:) + & 1167 cpl_snow2D(:,:,2) * pctsrf2D(:,:,is_sic) / deno(:,:) 1168 tab_flds(:,:,ids_toteva) = cpl_evap2D(:,:,1) * pctsrf2D(:,:,is_oce) / deno(:,:) + & 1169 cpl_evap2D(:,:,2) * pctsrf2D(:,:,is_sic) / deno(:,:) 1170 tab_flds(:,:,ids_taumod) = cpl_taumod2D(:,:,1) * pctsrf2D(:,:,is_oce) / deno(:,:) + & 1171 cpl_taumod2D(:,:,2) * pctsrf2D(:,:,is_sic) / deno(:,:) 1094 1172 1095 tab_flds(:,:,9) = cpl_sols2D(:,:,1) * pctsrf2D(:,:,is_oce) / deno(:,:) + &1096 cpl_sols2D(:,:,2) * pctsrf2D(:,:,is_sic) / deno(:,:)1097 tab_flds(:,:,11) = cpl_nsol2D(:,:,1) * pctsrf2D(:,:,is_oce) / deno(:,:) + &1098 cpl_nsol2D(:,:,2) * pctsrf2D(:,:,is_sic) / deno(:,:)1099 tab_flds(:,:,13) = cpl_rain2D(:,:,1) * pctsrf2D(:,:,is_oce) / deno(:,:) + &1100 cpl_rain2D(:,:,2) * pctsrf2D(:,:,is_sic) / deno(:,:)1101 tab_flds(:,:,14) = cpl_snow2D(:,:,1) * pctsrf2D(:,:,is_oce) / deno(:,:) + &1102 cpl_snow2D(:,:,2) * pctsrf2D(:,:,is_sic) / deno(:,:)1103 tab_flds(:,:,15) = cpl_evap2D(:,:,1) * pctsrf2D(:,:,is_oce) / deno(:,:) + &1104 cpl_evap2D(:,:,2) * pctsrf2D(:,:,is_sic) / deno(:,:)1105 1173 ENDWHERE 1106 1174 1107 tab_flds(:,:, 16) = cpl_evap2D(:,:,2)1175 tab_flds(:,:,ids_icevap) = cpl_evap2D(:,:,2) 1108 1176 1109 1177 ELSE IF (version_ocean=='opa8') THEN 1110 1178 ! Store fields for rain and snow in tab_flds(:,:,15) and tab_flds(:,:,16) 1111 tab_flds(:,:, 15) = 0.01112 tab_flds(:,:, 16) = 0.01179 tab_flds(:,:,ids_totrai) = 0.0 1180 tab_flds(:,:,ids_totsno) = 0.0 1113 1181 tmp_taux(:,:) = 0.0 1114 1182 tmp_tauy(:,:) = 0.0 1115 1183 ! For all valid grid cells containing some fraction of ocean or sea-ice 1116 1184 WHERE ( deno(:,:) /= 0 ) 1117 tab_flds(:,:, 15) = cpl_rain2D(:,:,1) * pctsrf2D(:,:,is_oce) / deno(:,:) + &1185 tab_flds(:,:,ids_totrai) = cpl_rain2D(:,:,1) * pctsrf2D(:,:,is_oce) / deno(:,:) + & 1118 1186 cpl_rain2D(:,:,2) * pctsrf2D(:,:,is_sic) / deno(:,:) 1119 tab_flds(:,:, 16) = cpl_snow2D(:,:,1) * pctsrf2D(:,:,is_oce) / deno(:,:) + &1187 tab_flds(:,:,ids_totsno) = cpl_snow2D(:,:,1) * pctsrf2D(:,:,is_oce) / deno(:,:) + & 1120 1188 cpl_snow2D(:,:,2) * pctsrf2D(:,:,is_sic) / deno(:,:) 1121 1189 … … 1163 1231 !$OMP MASTER 1164 1232 CALL atm2geo (iim, jj_nb, tmp_taux, tmp_tauy, tmp_lon, tmp_lat, & 1165 tab_flds(:,:, 1), tab_flds(:,:,2), tab_flds(:,:,3) )1166 1167 tab_flds(:,:, 4) = tab_flds(:,:,1)1168 tab_flds(:,:, 5) = tab_flds(:,:,2)1169 tab_flds(:,:, 6) = tab_flds(:,:,3)1233 tab_flds(:,:,ids_tauxxu), tab_flds(:,:,ids_tauyyu), tab_flds(:,:,ids_tauzzu) ) 1234 1235 tab_flds(:,:,ids_tauxxv) = tab_flds(:,:,ids_tauxxu) 1236 tab_flds(:,:,ids_tauyyv) = tab_flds(:,:,ids_tauyyu) 1237 tab_flds(:,:,ids_tauzzv) = tab_flds(:,:,ids_tauzzu) 1170 1238 !$OMP END MASTER 1171 1239 … … 1175 1243 !************************************************************************************* 1176 1244 IF (is_sequential) THEN 1177 CALL histwrite(nidct,cl_writ(8), itau_w,tab_flds(:,:,8), iim*(jjm+1),ndexct) 1178 CALL histwrite(nidct,cl_writ(9), itau_w,tab_flds(:,:,9), iim*(jjm+1),ndexct) 1179 CALL histwrite(nidct,cl_writ(10),itau_w,tab_flds(:,:,10),iim*(jjm+1),ndexct) 1180 CALL histwrite(nidct,cl_writ(11),itau_w,tab_flds(:,:,11),iim*(jjm+1),ndexct) 1181 CALL histwrite(nidct,cl_writ(12),itau_w,tab_flds(:,:,12),iim*(jjm+1),ndexct) 1182 CALL histwrite(nidct,cl_writ(13),itau_w,tab_flds(:,:,13),iim*(jjm+1),ndexct) 1183 CALL histwrite(nidct,cl_writ(14),itau_w,tab_flds(:,:,14),iim*(jjm+1),ndexct) 1184 CALL histwrite(nidct,cl_writ(15),itau_w,tab_flds(:,:,15),iim*(jjm+1),ndexct) 1185 CALL histwrite(nidct,cl_writ(16),itau_w,tab_flds(:,:,16),iim*(jjm+1),ndexct) 1186 CALL histwrite(nidct,cl_writ(17),itau_w,tab_flds(:,:,17),iim*(jjm+1),ndexct) 1187 CALL histwrite(nidct,cl_writ(18),itau_w,tab_flds(:,:,18),iim*(jjm+1),ndexct) 1188 CALL histwrite(nidct,cl_writ(19),itau_w,tab_flds(:,:,19),iim*(jjm+1),ndexct) 1189 CALL histwrite(nidct,cl_writ(1), itau_w,tab_flds(:,:,1), iim*(jjm+1),ndexct) 1190 CALL histwrite(nidct,cl_writ(2), itau_w,tab_flds(:,:,2), iim*(jjm+1),ndexct) 1191 CALL histwrite(nidct,cl_writ(3), itau_w,tab_flds(:,:,3), iim*(jjm+1),ndexct) 1192 CALL histwrite(nidct,cl_writ(4), itau_w,tab_flds(:,:,4), iim*(jjm+1),ndexct) 1193 CALL histwrite(nidct,cl_writ(5), itau_w,tab_flds(:,:,5), iim*(jjm+1),ndexct) 1194 CALL histwrite(nidct,cl_writ(6), itau_w,tab_flds(:,:,6), iim*(jjm+1),ndexct) 1195 CALL histwrite(nidct,cl_writ(7), itau_w,tab_flds(:,:,7), iim*(jjm+1),ndexct) 1196 CALL histsync(nidct) 1245 DO j=1,maxsend 1246 IF (infosend(j)%action) CALL histwrite(nidct,infosend(j)%name, itau_w, & 1247 tab_flds(:,:,j),iim*(jjm+1),ndexct) 1248 ENDDO 1197 1249 ENDIF 1198 1199 1200 1250 !************************************************************************************* 1201 1251 ! Send the table of all fields … … 1218 1268 DEALLOCATE(cpl_evap2D, cpl_tsol2D, cpl_fder2D, cpl_albe2D, stat=error ) 1219 1269 sum_error = sum_error + error 1220 DEALLOCATE(cpl_taux2D, cpl_tauy2D, cpl_windsp2D, stat=error ) 1221 sum_error = sum_error + error 1270 DEALLOCATE(cpl_taux2D, cpl_tauy2D, cpl_windsp2D, cpl_taumod2D, stat=error ) 1271 sum_error = sum_error + error 1272 1273 IF (carbon_cycle_cpl) THEN 1274 DEALLOCATE(cpl_atm_co22D, stat=error ) 1275 sum_error = sum_error + error 1276 END IF 1277 1222 1278 IF (sum_error /= 0) THEN 1223 1279 abort_message='Pb in deallocation of cpl_xxxx2D coupling variables' … … 1231 1287 SUBROUTINE cpl2gath(champ_in, champ_out, knon, knindex) 1232 1288 USE mod_phys_lmdz_para 1233 ! Cette routine ecrit un champ 'gathered' sur la grille 2D pour le passer1234 ! au coupleur.1289 ! Cette routine transforme un champs de la grille 2D recu du coupleur sur la grille 1290 ! 'gathered' (la grille physiq comprime). 1235 1291 ! 1236 1292 ! 1237 1293 ! input: 1238 ! champ_in champ sur la grille gathere1294 ! champ_in champ sur la grille 2D 1239 1295 ! knon nombre de points dans le domaine a traiter 1240 1296 ! knindex index des points de la surface a traiter 1241 1297 ! 1242 1298 ! output: 1243 ! champ_out champ sur la grille 2D1299 ! champ_out champ sur la grille 'gatherd' 1244 1300 ! 1245 1301 INCLUDE "dimensions.h" -
LMDZ4/trunk/libf/phylmd/cva_driver.F
r1146 r1279 783 783 o ,sig,w0,ptop2,cape,cin,m,iflag,coef_clos 784 784 : ,Plim1,Plim2,asupmax,supmax0 785 : ,asupmaxmin,cbmf 1)785 : ,asupmaxmin,cbmf) 786 786 ENDIF 787 787 endif ! iflag_con.eq.3 -
LMDZ4/trunk/libf/phylmd/ecribin.F
r940 r1279 94 94 SUBROUTINE ecriture(nunit, r8, n) 95 95 INTEGER nunit, n, i 96 REAL *8r8(n)97 REAL *4r4(n)96 REAL(KIND=8) r8(n) 97 REAL r4(n) 98 98 DO i = 1, n 99 99 r4(i) = r8(i) -
LMDZ4/trunk/libf/phylmd/fisrtilp.F
r1146 r1279 54 54 REAL frac_impa(klon,klev) 55 55 REAL frac_nucl(klon,klev) 56 real zct (klon),zcl(klon)56 real zct ,zcl 57 57 cAA 58 58 c … … 87 87 REAL ztglace, zt(klon) 88 88 INTEGER nexpo ! exponentiel pour glace/eau 89 REAL zdz(klon),zrho(klon),ztot (klon), zrhol(klon)90 REAL zchau (klon),zfroi(klon),zfice(klon),zneb(klon)89 REAL zdz(klon),zrho(klon),ztot , zrhol(klon) 90 REAL zchau ,zfroi ,zfice(klon),zneb(klon) 91 91 c 92 92 LOGICAL appel1er … … 150 150 cAA Initialisation a 1 des coefs des fractions lessivees 151 151 c 152 !cdir collapse 152 153 DO k = 1, klev 153 154 DO i = 1, klon … … 161 162 c 162 163 cMAf Initialisation a 0 de zoliq 163 164 165 164 c DO i = 1, klon 165 c zoliq(i)=0. 166 c ENDDO 166 167 c Determiner les nuages froids par leur temperature 167 168 c nexpo regle la raideur de la transition eau liquide / eau glace. … … 173 174 c Initialiser les sorties: 174 175 c 176 !cdir collapse 175 177 DO k = 1, klev+1 176 178 DO i = 1, klon … … 180 182 ENDDO 181 183 184 !cdir collapse 182 185 DO k = 1, klev 183 186 DO i = 1, klon … … 194 197 rain(i) = 0.0 195 198 snow(i) = 0.0 196 ENDDO 199 zoliq(i)=0. 200 c ENDDO 197 201 c 198 202 c Initialiser le flux de precipitation a zero 199 203 c 200 204 c DO i = 1, klon 201 205 zrfl(i) = 0.0 202 206 zneb(i) = seuil_neb … … 441 445 zrhol(i) = zrho(i) * zoliq(i) / zneb(i) 442 446 443 if (ptconv(i,k)) then 444 zcl(i)=cld_lc_con 445 zct(i)=1./cld_tau_con 446 else 447 zcl(i)=cld_lc_lsc 448 zct(i)=1./cld_tau_lsc 449 endif 450 c quantit�d'eau ��minier. 451 zchau(i) = zct(i)*dtime/FLOAT(ninter) * zoliq(i) 452 . *(1.0-EXP(-(zoliq(i)/zneb(i)/zcl(i))**2)) *(1.-zfice(i)) 453 c meme chose pour la glace. 454 if (ptconv(i,k)) then 455 zfroi(i) = dtime/FLOAT(ninter)/zdz(i)*zoliq(i) 447 IF (zneb(i).EQ.seuil_neb) THEN 448 ztot = 0.0 449 ELSE 450 c quantite d'eau a eliminer: zchau 451 c meme chose pour la glace: zfroi 452 if (ptconv(i,k)) then 453 zcl =cld_lc_con 454 zct =1./cld_tau_con 455 zfroi = dtime/FLOAT(ninter)/zdz(i)*zoliq(i) 456 456 . *fallvc(zrhol(i)) * zfice(i) 457 else 458 zfroi(i) = dtime/FLOAT(ninter)/zdz(i)*zoliq(i) 457 else 458 zcl =cld_lc_lsc 459 zct =1./cld_tau_lsc 460 zfroi = dtime/FLOAT(ninter)/zdz(i)*zoliq(i) 459 461 . *fallvs(zrhol(i)) * zfice(i) 460 endif 461 ztot(i) = zchau(i) + zfroi(i) 462 IF (zneb(i).EQ.seuil_neb) ztot(i) = 0.0 463 ztot(i) = MIN(MAX(ztot(i),0.0),zoliq(i)) 464 zoliq(i) = MAX(zoliq(i)-ztot(i), 0.0) 462 endif 463 zchau = zct *dtime/FLOAT(ninter) * zoliq(i) 464 . *(1.0-EXP(-(zoliq(i)/zneb(i)/zcl )**2)) *(1.-zfice(i)) 465 ztot = zchau + zfroi 466 ztot = MAX(ztot ,0.0) 467 ENDIF 468 ztot = MIN(ztot,zoliq(i)) 469 zoliq(i) = MAX(zoliq(i)-ztot , 0.0) 465 470 radliq(i,k) = radliq(i,k) + zoliq(i)/FLOAT(ninter+1) 466 471 ENDIF -
LMDZ4/trunk/libf/phylmd/hbtm.F
r776 r1279 762 762 endif 763 763 c 764 qsatbef(i) = qqsat ! bug dans la version orig ??? 764 765 endif 765 qsatbef(i) = qqsat766 766 camn ???? cette ligne a deja ete faite normalement ? 767 767 endif -
LMDZ4/trunk/libf/phylmd/hgardfou.F
r1146 r1279 1 1 ! 2 ! $Id$ 2 3 SUBROUTINE hgardfou (t,tsol,text) 3 4 use dimphy … … 12 13 REAL t(klon,klev), tsol(klon,nbsrf) 13 14 CHARACTER*(*) text 15 character (len=20) :: modname = 'hgardfou' 16 character (len=80) :: abort_message 14 17 C 15 18 INTEGER i, k, nsrf … … 124 127 c 125 128 IF (.NOT. ok) THEN 126 PRINT*, 'hgardfou s arrete ',text127 CALL abort 129 abort_message= 'hgardfou s arrete '//text 130 CALL abort_gcm (modname,abort_message,1) 128 131 ENDIF 129 132 -
LMDZ4/trunk/libf/phylmd/hines_gwd.F
r1001 r1279 1 ! 2 ! $Id$ 3 ! 1 4 SUBROUTINE HINES_GWD(NLON,NLEV,DTIME,paphm1x, papm1x, 2 5 I rlat,tx,ux,vx, … … 1666 1669 C the variances. 1667 1670 C 1668 DO 80 N = 1,NAZ1669 DO 70 I = IL1,IL21670 IF (I_ALPHA(I,N).LT.0.) THEN1671 WRITE (6,*)1672 WRITE (6,*) '******************************'1673 WRITE (6,*) 'Hines integral I_ALPHA < 0 '1674 WRITE (6,*) ' longitude I=',I1675 WRITE (6,*) ' azimuth N=',N1676 WRITE (6,*) ' level LEV=',LEV1677 WRITE (6,*) ' I_ALPHA =',I_ALPHA(I,N)1678 WRITE (6,*) ' V_ALPHA =',V_ALPHA(I,LEV,N)1679 WRITE (6,*) ' M_ALPHA =',M_ALPHA(I,LEV,N)1680 WRITE (6,*) ' Q_ALPHA =',V_ALPHA(I,LEV,N) / BVFB(I)1681 WRITE (6,*) ' QM =',V_ALPHA(I,LEV,N) / BVFB(I)1682 ^ * M_ALPHA(I,LEV,N)1683 WRITE (6,*) '******************************'1684 END IF1685 70 CONTINUE1686 80 CONTINUE1671 c DO 80 N = 1,NAZ 1672 c DO 70 I = IL1,IL2 1673 c IF (I_ALPHA(I,N).LT.0.) THEN 1674 c WRITE (6,*) 1675 c WRITE (6,*) '******************************' 1676 c WRITE (6,*) 'Hines integral I_ALPHA < 0 ' 1677 c WRITE (6,*) ' longitude I=',I 1678 c WRITE (6,*) ' azimuth N=',N 1679 c WRITE (6,*) ' level LEV=',LEV 1680 c WRITE (6,*) ' I_ALPHA =',I_ALPHA(I,N) 1681 c WRITE (6,*) ' V_ALPHA =',V_ALPHA(I,LEV,N) 1682 c WRITE (6,*) ' M_ALPHA =',M_ALPHA(I,LEV,N) 1683 c WRITE (6,*) ' Q_ALPHA =',V_ALPHA(I,LEV,N) / BVFB(I) 1684 c WRITE (6,*) ' QM =',V_ALPHA(I,LEV,N) / BVFB(I) 1685 c ^ * M_ALPHA(I,LEV,N) 1686 c WRITE (6,*) '******************************' 1687 c END IF 1688 c 70 CONTINUE 1689 c 80 CONTINUE 1687 1690 C 1688 1691 RETURN -
LMDZ4/trunk/libf/phylmd/indicesol.h
r793 r1279 24 24 PARAMETER (epsfra=1.0E-05) 25 25 ! 26 CHARACTER *3clnsurf(nbsrf)26 CHARACTER(len=3) clnsurf(nbsrf) 27 27 DATA clnsurf/'ter', 'lic', 'oce', 'sic'/ 28 28 SAVE clnsurf -
LMDZ4/trunk/libf/phylmd/ini_histrac.h
r1146 r1279 1 1 ! 2 ! $ Header$2 ! $Id $ 3 3 ! 4 IF (ecrit_tra>0. .AND. config_inca == 'none') THEN 5 c$OMP MASTER 6 CALL ymds2ju(annee_ref, 1, day_ref, 0.0, zjulian) 7 c 8 CALL histbeg_phy("histrac", itau_phy, zjulian, pdtphys, 9 . nhori, nid_tra) 10 CALL histvert(nid_tra, "presnivs", "Vertical levels", "mb", 11 . klev, presnivs, nvert) 4 IF (ecrit_tra>0. .AND. config_inca == 'none') THEN 5 !$OMP MASTER 6 CALL ymds2ju(annee_ref, 1, day_ref, 0.0, zjulian) 7 CALL histbeg_phy("histrac", itau_phy, zjulian, pdtphys,nhori, nid_tra) 8 CALL histvert(nid_tra, "presnivs", "Vertical levels", "mb",klev, presnivs, nvert) 12 9 10 zsto = pdtphys 11 zout = ecrit_tra 12 CALL histdef(nid_tra, "phis", "Surface geop. height", "-", & 13 iim,jj_nb,nhori, 1,1,1, -99, 32,"once", zsto,zout) 14 CALL histdef(nid_tra, "aire", "Grid area", "-", & 15 iim,jj_nb,nhori, 1,1,1, -99, 32,"once", zsto,zout) 13 16 17 !TRACEURS 18 !---------------- 19 DO it = 1,nbtr 20 iiq = niadv(it+2) 14 21 15 zsto = pdtphys 16 zout = ecrit_tra 17 c 18 CALL histdef(nid_tra, "phis", "Surface geop. height", "-", 19 . iim,jj_nb,nhori, 1,1,1, -99, 32, 20 . "once", zsto,zout) 21 c 22 CALL histdef(nid_tra, "aire", "Grid area", "-", 23 . iim,jj_nb,nhori, 1,1,1, -99, 32, 24 . "once", zsto,zout) 25 DO it=1,nbtr 26 C champ 2D 27 iq=it+2 28 iiq=niadv(iq) 29 CALL histdef(nid_tra, tname(iiq), ttext(iiq), "U/kga", 30 . iim,jj_nb,nhori, klev,1,klev,nvert, 32, 31 . "ave(X)", zsto,zout) 32 if (lessivage) THEN 33 CALL histdef(nid_tra, "fl"//tname(iiq),"Flux "//ttext(iiq), 34 . "U/m2/s",iim,jj_nb,nhori, klev,1,klev,nvert, 32, 35 . "ave(X)", zsto,zout) 36 endif 22 ! CONCENTRATIONS 23 CALL histdef(nid_tra, tname(iiq), ttext(iiq), "U/kga", & 24 iim,jj_nb,nhori, klev,1,klev,nvert, 32,"ave(X)", zsto,zout) 37 25 38 c---Ajout Olivia 39 CALL histdef(nid_tra, "d_tr_th_"//tname(iiq), 40 . "tendance thermique"// ttext(iiq), "?", 41 . iim,jj_nb,nhori, klev,1,klev,nvert, 32, 42 . "ave(X)", zsto,zout) 43 c 44 if(iflag_con.GE.2) then 45 CALL histdef(nid_tra, "d_tr_cv_"//tname(iiq), 46 . "tendance convection"// ttext(iiq), "?", 47 . iim,jj_nb,nhori, klev,1,klev,nvert, 32, 48 . "ave(X)", zsto,zout) 49 endif !(iflag_con.GE.2) then 50 CALL histdef(nid_tra, "d_tr_cl_"//tname(iiq), 51 . "tendance couche limite"// ttext(iiq), "?", 52 . iim,jj_nb,nhori, klev,1,klev,nvert, 32, 53 . "ave(X)", zsto,zout) 54 c---fin Olivia 26 ! TD LESSIVAGE 27 IF (lessivage .AND. aerosol(it)) THEN 28 CALL histdef(nid_tra, "fl"//tname(iiq),"Flux "//ttext(iiq), & 29 "U/m2/s",iim,jj_nb,nhori, klev,1,klev,nvert, 32, & 30 "ave(X)", zsto,zout) 31 END IF 55 32 56 ENDDO 33 ! TD THERMIQUES 34 IF (iflag_thermals.gt.0) THEN 35 CALL histdef(nid_tra, "d_tr_th_"//tname(iiq), & 36 "tendance thermique"// ttext(iiq), "?", & 37 iim,jj_nb,nhori, klev,1,klev,nvert, 32, & 38 "ave(X)", zsto,zout) 39 ENDIF 57 40 58 CALL histdef(nid_tra, "pyu1", "Vent niv 1", "-", 59 . iim,jj_nb,nhori, 1,1,1, -99, 32, 60 . "inst(X)", zout,zout) 41 ! TD CONVECTION 42 IF (iflag_con.GE.2) THEN 43 CALL histdef(nid_tra, "d_tr_cv_"//tname(iiq), & 44 "tendance convection"// ttext(iiq), "?", & 45 iim,jj_nb,nhori, klev,1,klev,nvert, 32, & 46 "ave(X)", zsto,zout) 47 ENDIF 61 48 62 CALL histdef(nid_tra, "pyv1", "Vent niv 1", "-", 63 . iim,jj_nb,nhori, 1,1,1, -99, 32, 64 . "inst(X)", zout,zout) 65 CALL histdef(nid_tra, "psrf1", "nature sol", "-", 66 . iim,jj_nb,nhori, 1,1,1, -99, 32, 67 . "inst(X)", zout,zout) 68 CALL histdef(nid_tra, "psrf2", "nature sol", "-", 69 . iim,jj_nb,nhori, 1,1,1, -99, 32, 70 . "inst(X)", zout,zout) 71 CALL histdef(nid_tra, "psrf3", "nature sol", "-", 72 . iim,jj_nb,nhori, 1,1,1, -99, 32, 73 . "inst(X)", zout,zout) 74 CALL histdef(nid_tra, "psrf4", "nature sol", "-", 75 . iim,jj_nb,nhori, 1,1,1, -99, 32, 76 . "inst(X)", zout,zout) 77 CALL histdef(nid_tra, "ftsol1", "temper sol", "-", 78 . iim,jj_nb,nhori, 1,1,1, -99, 32, 79 . "inst(X)", zout,zout) 80 CALL histdef(nid_tra, "ftsol2", "temper sol", "-", 81 . iim,jj_nb,nhori, 1,1,1, -99, 32, 82 . "inst(X)", zout,zout) 83 CALL histdef(nid_tra, "ftsol3", "temper sol", "-", 84 . iim,jj_nb,nhori, 1,1,1, -99, 32, 85 . "inst", zout,zout) 86 CALL histdef(nid_tra, "ftsol4", "temper sol", "-", 87 . iim,jj_nb,nhori, 1,1,1, -99, 32, 88 . "inst(X)", zout,zout) 89 CALL histdef(nid_tra, "pplay", "flux u mont","-", 90 . iim,jj_nb,nhori, klev,1,klev,nvert, 32, 91 . "inst(X)", zout,zout) 92 CALL histdef(nid_tra, "t", "flux u mont","-", 93 . iim,jj_nb,nhori, klev,1,klev,nvert, 32, 94 . "inst(X)", zout,zout) 95 CALL histdef(nid_tra, "mfu", "flux u mont","-", 96 . iim,jj_nb,nhori, klev,1,klev,nvert, 32, 97 . "ave(X)", zsto,zout) 98 CALL histdef(nid_tra, "mfd", "flux u decen","-", 99 . iim,jj_nb,nhori, klev,1,klev,nvert, 32, 100 . "ave(X)", zsto,zout) 101 CALL histdef(nid_tra, "en_u", "flux u mont","-", 102 . iim,jj_nb,nhori, klev,1,klev,nvert, 32, 103 . "ave(X)", zsto,zout) 104 CALL histdef(nid_tra, "en_d", "flux u mont","-", 105 . iim,jj_nb,nhori, klev,1,klev,nvert, 32, 106 . "ave(X)", zsto,zout) 107 CALL histdef(nid_tra, "de_d", "flux u mont","-", 108 . iim,jj_nb,nhori, klev,1,klev,nvert, 32, 109 . "ave(X)", zsto,zout) 110 CALL histdef(nid_tra, "de_u", "flux u decen","-", 111 . iim,jj_nb,nhori, klev,1,klev,nvert, 32, 112 . "ave(X)", zsto,zout) 113 CALL histdef(nid_tra, "coefh", "turbulent coef","-", 114 . iim,jj_nb,nhori, klev,1,klev,nvert, 32, 115 . "ave(X)", zsto,zout) 49 ! TD COUCHE-LIMITE 50 CALL histdef(nid_tra, "d_tr_cl_"//tname(iiq), & 51 "tendance couche limite"// ttext(iiq), "?", & 52 iim,jj_nb,nhori, klev,1,klev,nvert, 32, & 53 "ave(X)", zsto,zout) 54 ENDDO 55 !--------------- 56 ! 57 ! VENT (niveau 1) 58 CALL histdef(nid_tra, "pyu1", "Vent niv 1", "-", & 59 iim,jj_nb,nhori, 1,1,1, -99, 32, & 60 "inst(X)", zout,zout) 61 CALL histdef(nid_tra, "pyv1", "Vent niv 1", "-", & 62 iim,jj_nb,nhori, 1,1,1, -99, 32, & 63 "inst(X)", zout,zout) 116 64 117 c 118 CALL histend(nid_tra) 119 ndex2d = 0 120 ndex3d = 0 121 ndex = 0 122 c$OMP END MASTER 123 END IF ! ecrit_tra>0. .AND. config_inca == 'none' 65 ! TEMPERATURE DU SOL 66 CALL histdef(nid_tra, "ftsol1", "temper sol", "-", & 67 iim,jj_nb,nhori, 1,1,1, -99, 32, & 68 "inst(X)", zout,zout) 69 CALL histdef(nid_tra, "ftsol2", "temper sol", "-", & 70 iim,jj_nb,nhori, 1,1,1, -99, 32, & 71 "inst(X)", zout,zout) 72 CALL histdef(nid_tra, "ftsol3", "temper sol", "-", & 73 iim,jj_nb,nhori, 1,1,1, -99, 32, & 74 "inst", zout,zout) 75 CALL histdef(nid_tra, "ftsol4", "temper sol", "-", & 76 iim,jj_nb,nhori, 1,1,1, -99, 32, & 77 "inst(X)", zout,zout) 78 79 ! NATURE DU SOL 80 CALL histdef(nid_tra, "psrf1", "nature sol", "-", & 81 iim,jj_nb,nhori, 1,1,1, -99, 32, & 82 "inst(X)", zout,zout) 83 CALL histdef(nid_tra, "psrf2", "nature sol", "-", & 84 iim,jj_nb,nhori, 1,1,1, -99, 32, & 85 "inst(X)", zout,zout) 86 CALL histdef(nid_tra, "psrf3", "nature sol", "-", & 87 iim,jj_nb,nhori, 1,1,1, -99, 32, & 88 "inst(X)", zout,zout) 89 CALL histdef(nid_tra, "psrf4", "nature sol", "-", & 90 iim,jj_nb,nhori, 1,1,1, -99, 32, & 91 "inst(X)", zout,zout) 92 ! DIVERS 93 CALL histdef(nid_tra, "pplay", "flux u mont","-", & 94 iim,jj_nb,nhori, klev,1,klev,nvert, 32, & 95 "inst(X)", zout,zout) 96 CALL histdef(nid_tra, "t", "flux u mont","-", & 97 iim,jj_nb,nhori, klev,1,klev,nvert, 32, & 98 "inst(X)", zout,zout) 99 CALL histdef(nid_tra, "mfu", "flux u mont","-", & 100 iim,jj_nb,nhori, klev,1,klev,nvert, 32, & 101 "ave(X)", zsto,zout) 102 CALL histdef(nid_tra, "mfd", "flux u decen","-", & 103 iim,jj_nb,nhori, klev,1,klev,nvert, 32, & 104 "ave(X)", zsto,zout) 105 CALL histdef(nid_tra, "en_u", "flux u mont","-", & 106 iim,jj_nb,nhori, klev,1,klev,nvert, 32, & 107 "ave(X)", zsto,zout) 108 CALL histdef(nid_tra, "en_d", "flux u mont","-", & 109 iim,jj_nb,nhori, klev,1,klev,nvert, 32, & 110 "ave(X)", zsto,zout) 111 CALL histdef(nid_tra, "de_d", "flux u mont","-", & 112 iim,jj_nb,nhori, klev,1,klev,nvert, 32, & 113 "ave(X)", zsto,zout) 114 CALL histdef(nid_tra, "de_u", "flux u decen","-", & 115 iim,jj_nb,nhori, klev,1,klev,nvert, 32, & 116 "ave(X)", zsto,zout) 117 CALL histdef(nid_tra, "coefh", "turbulent coef","-", & 118 iim,jj_nb,nhori, klev,1,klev,nvert, 32, & 119 "ave(X)", zsto,zout) 120 121 CALL histend(nid_tra) 122 !$OMP END MASTER 123 END IF ! ecrit_tra>0. .AND. config_inca == 'none' 124 -
LMDZ4/trunk/libf/phylmd/initphysto.F
r776 r1279 57 57 C Arguments 58 58 character*(*) infile 59 integer *4nhoriid, i59 integer nhoriid, i 60 60 real tstep, t_ops, t_wrt 61 61 integer fileid, filevid -
LMDZ4/trunk/libf/phylmd/mod_phys_lmdz_omp_transfert.F90
r1001 r1279 10 10 11 11 CHARACTER(LEN=size_min),SAVE :: buffer_c 12 INTEGER,SAVE :: size_c 12 ! INTEGER,SAVE :: size_c=0 13 13 INTEGER,SAVE,ALLOCATABLE,DIMENSION(:) :: buffer_i 14 INTEGER,SAVE :: size_i 14 INTEGER,SAVE :: size_i=0 15 15 REAL,SAVE,ALLOCATABLE,DIMENSION(:) :: buffer_r 16 INTEGER,SAVE :: size_r 16 INTEGER,SAVE :: size_r=0 17 17 LOGICAL,SAVE,ALLOCATABLE,DIMENSION(:) :: buffer_l 18 INTEGER,SAVE :: size_l 18 INTEGER,SAVE :: size_l=0 19 19 20 20 … … 56 56 INTEGER :: buff_size 57 57 58 IF (buff_size>size_i) THEN59 58 !$OMP BARRIER 60 59 !$OMP MASTER 60 IF (buff_size>size_i) THEN 61 61 IF (ALLOCATED(buffer_i)) DEALLOCATE(buffer_i) 62 62 size_i=MAX(size_min,INT(grow_factor*buff_size)) 63 63 ALLOCATE(buffer_i(size_i)) 64 ENDIF 64 65 !$OMP END MASTER 65 66 !$OMP BARRIER 66 ENDIF67 67 68 68 END SUBROUTINE check_buffer_i … … 72 72 INTEGER :: buff_size 73 73 74 IF (buff_size>size_r) THEN75 74 !$OMP BARRIER 76 75 !$OMP MASTER 76 IF (buff_size>size_r) THEN 77 77 IF (ALLOCATED(buffer_r)) DEALLOCATE(buffer_r) 78 78 size_r=MAX(size_min,INT(grow_factor*buff_size)) 79 79 ALLOCATE(buffer_r(size_r)) 80 ENDIF 80 81 !$OMP END MASTER 81 82 !$OMP BARRIER 82 ENDIF83 83 84 84 END SUBROUTINE check_buffer_r … … 88 88 INTEGER :: buff_size 89 89 90 IF (buff_size>size_l) THEN91 90 !$OMP BARRIER 92 91 !$OMP MASTER 92 IF (buff_size>size_l) THEN 93 93 IF (ALLOCATED(buffer_l)) DEALLOCATE(buffer_l) 94 94 size_l=MAX(size_min,INT(grow_factor*buff_size)) 95 95 ALLOCATE(buffer_l(size_l)) 96 ENDIF 96 97 !$OMP END MASTER 97 98 !$OMP BARRIER 98 ENDIF99 99 100 100 END SUBROUTINE check_buffer_l … … 521 521 REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn 522 522 REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut 523 523 524 CALL Check_buffer_r(size(VarOut)) 524 525 CALL gather_omp_rgen(VarIn,Varout,Size(VarIn,2)*Size(VarIn,3)*Size(VarIn,4),buffer_r) 525 526 -
LMDZ4/trunk/libf/phylmd/moy_undefSTD.F
r1233 r1279 14 14 c 15 15 c Moyenne - a des frequences differentes - des valeurs bien definies 16 c (.NE. missing_val) des variables interpolees a un niveau de16 c (.NE.1.E+20) des variables interpolees a un niveau de 17 17 c pression. 18 18 c 1) les variables de type "day" (nout=1) ou "mth" (nout=2) sont sommees … … 29 29 cym parameter (jjmp1=jjm+1-1/jjm) 30 30 cym#include "dimphy.h" 31 c 31 32 c 32 33 c variables Input … … 52 53 DO k=1, nlevSTD 53 54 DO i=1, klon 54 IF (tnondef(i,k,1).NE.(ecrit_day/dtime)) THEN55 IF (NINT(tnondef(i,k,1)).NE.NINT(ecrit_day/dtime)) THEN 55 56 tsumSTD(i,k,1)=tsumSTD(i,k,1)/ 56 57 $ (ecrit_day/dtime-tnondef(i,k,1)) -
LMDZ4/trunk/libf/phylmd/newmicro.F
r1146 r1279 1 ! 2 ! $Header$ 3 ! 1 ! $Id$ 2 ! 4 3 SUBROUTINE newmicro (paprs, pplay,ok_newmicro, 5 4 . t, pqlwp, pclc, pcltau, pclemi, … … 7 6 s xflwp, xfiwp, xflwc, xfiwc, 8 7 e ok_aie, 9 e sulfate, sulfate_pi,8 e mass_solu_aero, mass_solu_aero_pi, 10 9 e bl95_b0, bl95_b1, 11 s cldtaupi, re, fl) 10 s cldtaupi, re, fl, reliq, reice) 11 12 12 USE dimphy 13 13 IMPLICIT none … … 22 22 c 23 23 c ok_aie--input-L-apply aerosol indirect effect or not 24 c sulfate-input-R-sulfate aerosol mass concentration [um/m^3]25 c sulfate_pi-input-R-dito, pre-industrial value24 c mass_solu_aero-----input-R-total mass concentration for all soluble aerosols[ug/m^3] 25 c mass_solu_aero_pi--input-R-dito, pre-industrial value 26 26 c bl95_b0-input-R-a parameter, may be varied for tests (s-sea, l-land) 27 27 c bl95_b1-input-R-a parameter, may be varied for tests ( -"- ) … … 94 94 LOGICAL ok_a1lwpdep ! a1 LWP dependent? 95 95 96 REAL sulfate(klon, klev) ! sulfate aerosol mass concentration [ug m-3] 96 REAL mass_solu_aero(klon, klev) ! total mass concentration for all soluble aerosols [ug m-3] 97 REAL mass_solu_aero_pi(klon, klev) ! - " - (pre-industrial value) 97 98 REAL cdnc(klon, klev) ! cloud droplet number concentration [m-3] 98 99 REAL re(klon, klev) ! cloud droplet effective radius [um] 99 REAL sulfate_pi(klon, klev) ! sulfate aerosol mass concentration [ug m-3] (pre-industrial value)100 100 REAL cdnc_pi(klon, klev) ! cloud droplet number concentration [m-3] (pi value) 101 101 REAL re_pi(klon, klev) ! cloud droplet effective radius [um] (pi value) … … 119 119 REAL diff_paprs(klon, klev), zfice1, zfice2(klon, klev) 120 120 REAL rad_chaud_tab(klon, klev), zflwp_var, zfiwp_var 121 122 ! Abderrahmane oct 2009 123 Real reliq(klon, klev), reice(klon, klev) 121 124 122 125 c … … 157 160 ! 158 161 cdnc(i,k) = 10.**(bl95_b0+bl95_b1* 159 & log(MAX(sulfate(i,k),1.e-4))/log(10.))*1.e6 !-m-3162 & log(MAX(mass_solu_aero(i,k),1.e-4))/log(10.))*1.e6 !-m-3 160 163 ! Cloud droplet number concentration (CDNC) is restricted 161 164 ! to be within [20, 1000 cm^3] … … 165 168 ! 166 169 cdnc_pi(i,k) = 10.**(bl95_b0+bl95_b1* 167 & log(MAX(sulfate_pi(i,k),1.e-4))/log(10.))*1.e6 !-m-3170 & log(MAX(mass_solu_aero_pi(i,k),1.e-4))/log(10.))*1.e6 !-m-3 168 171 cdnc_pi(i,k)=MIN(1000.e6,MAX(20.e6,cdnc_pi(i,k))) 169 172 ENDDO … … 221 224 re(i,k) = rad_chaud_tab(i,k)*fl(i,k) 222 225 226 rel = 0. 227 rei = 0. 223 228 pclc(i,k) = 0.0 224 229 pcltau(i,k) = 0.0 … … 252 257 cldtaupi(i,k) = 3.0/2.0 * zflwp_var / radius 253 258 & + zfiwp_var * (3.448e-03 + 2.431/rei) 259 254 260 ENDIF ! ok_aie 255 261 ! For output diagnostics … … 280 286 c for ice clouds, Ebert & Curry (1992)] 281 287 282 283 284 288 if (zflwp_var.eq.0.) rel = 1. 289 if (zfiwp_var.eq.0. .or. rei.le.0.) rei = 1. 290 pcltau(i,k) = 3.0/2.0 * ( zflwp_var/rel ) 285 291 & + zfiwp_var * (3.448e-03 + 2.431/rei) 286 292 c -- cloud infrared emissivity: … … 296 302 297 303 ENDIF 298 304 reliq(i,k)=rel 305 reice(i,k)=rei 306 ! if (i.eq.1) then 307 ! print*,'Dans newmicro rel, rei :',rel, rei 308 ! print*,'Dans newmicro reliq, reice :', 309 ! $ reliq(i,k),reice(i,k) 310 ! endif 311 299 312 ENDDO 300 313 ENDDO … … 400 413 DO i = 1, klon 401 414 zclear(i)=zclear(i)*(1.-MAX(pclc(i,k),zcloud(i))) 402 & /(1.-MIN( zcloud(i),1.-ZEPSEC))415 & /(1.-MIN(real(zcloud(i), kind=8),1.-ZEPSEC)) 403 416 pct(i)=1.-zclear(i) 404 417 IF (pplay(i,k).LE.cetahb*paprs(i,1)) THEN 405 418 pch(i) = pch(i)*(1.-MAX(pclc(i,k),zcloud(i))) 406 & /(1.-MIN( zcloud(i),1.-ZEPSEC))419 & /(1.-MIN(real(zcloud(i), kind=8),1.-ZEPSEC)) 407 420 ELSE IF (pplay(i,k).GT.cetahb*paprs(i,1) .AND. 408 421 & pplay(i,k).LE.cetamb*paprs(i,1)) THEN 409 422 pcm(i) = pcm(i)*(1.-MAX(pclc(i,k),zcloud(i))) 410 & /(1.-MIN( zcloud(i),1.-ZEPSEC))423 & /(1.-MIN(real(zcloud(i), kind=8),1.-ZEPSEC)) 411 424 ELSE IF (pplay(i,k).GT.cetamb*paprs(i,1)) THEN 412 425 pcl(i) = pcl(i)*(1.-MAX(pclc(i,k),zcloud(i))) 413 & /(1.-MIN( zcloud(i),1.-ZEPSEC))426 & /(1.-MIN(real(zcloud(i), kind=8),1.-ZEPSEC)) 414 427 endif 415 428 zcloud(i)=pclc(i,k) -
LMDZ4/trunk/libf/phylmd/nuage.F
r766 r1279 1 ! 2 ! $Header$ 1 ! $Id$ 3 2 ! 4 3 SUBROUTINE nuage (paprs, pplay, … … 6 5 . pch, pcl, pcm, pct, pctlwp, 7 6 e ok_aie, 8 e sulfate, sulfate_pi,7 e mass_solu_aero, mass_solu_aero_pi, 9 8 e bl95_b0, bl95_b1, 10 9 s cldtaupi, re, fl) … … 20 19 c pclc----input-R-couverture nuageuse pour le rayonnement (0 a 1) 21 20 c ok_aie--input-L-apply aerosol indirect effect or not 22 c sulfate-input-R-sulfate aerosol mass concentration [um/m^3]23 c sulfate_pi-input-R-dito, pre-industrial value21 c mass_solu_aero-----input-R-total mass concentration for all soluble aerosols[ug/m^3] 22 c mass_solu_aero_pi--input-R-dito, pre-industrial value 24 23 c bl95_b0-input-R-a parameter, may be varied for tests (s-sea, l-land) 25 24 c bl95_b1-input-R-a parameter, may be varied for tests ( -"- ) … … 74 73 LOGICAL ok_aie ! Apply AIE or not? 75 74 76 REAL sulfate(klon, klev) ! sulfate aerosol mass concentration [ug m-3] 75 REAL mass_solu_aero(klon, klev) ! total mass concentration for all soluble aerosols[ug m-3] 76 REAL mass_solu_aero_pi(klon, klev) ! - " - pre-industrial value 77 77 REAL cdnc(klon, klev) ! cloud droplet number concentration [m-3] 78 78 REAL re(klon, klev) ! cloud droplet effective radius [um] 79 REAL sulfate_pi(klon, klev) ! sulfate aerosol mass concentration [ug m-3] (pre-industrial value)80 79 REAL cdnc_pi(klon, klev) ! cloud droplet number concentration [m-3] (pi value) 81 80 REAL re_pi(klon, klev) ! cloud droplet effective radius [um] (pi value) … … 108 107 ! 109 108 cdnc(i,k) = 10.**(bl95_b0+bl95_b1* 110 . log(MAX( sulfate(i,k),1.e-4))/log(10.))*1.e6 !-m-3109 . log(MAX(mass_solu_aero(i,k),1.e-4))/log(10.))*1.e6 !-m-3 111 110 ! Cloud droplet number concentration (CDNC) is restricted 112 111 ! to be within [20, 1000 cm^3] … … 114 113 cdnc(i,k)=MIN(1000.e6,MAX(20.e6,cdnc(i,k))) 115 114 cdnc_pi(i,k) = 10.**(bl95_b0+bl95_b1* 116 . log(MAX( sulfate_pi(i,k),1.e-4))/log(10.))*1.e6 !-m-3115 . log(MAX(mass_solu_aero_pi(i,k),1.e-4))/log(10.))*1.e6 !-m-3 117 116 cdnc_pi(i,k)=MIN(1000.e6,MAX(20.e6,cdnc_pi(i,k))) 118 117 ! -
LMDZ4/trunk/libf/phylmd/oasis.F90
r1146 r1279 22 22 23 23 IMPLICIT NONE 24 25 ! Maximum number of fields exchanged between ocean and atmosphere 26 INTEGER, PARAMETER :: jpmaxfld=40 27 ! Number of fields exchanged from atmosphere to ocean via flx.F 28 INTEGER, PARAMETER :: jpflda2o1=13 29 ! Number of fields exchanged from atmosphere to ocean via tau.F 30 INTEGER, PARAMETER :: jpflda2o2=6 31 ! Number of fields exchanged from ocean to atmosphere 32 INTEGER :: jpfldo2a 33 34 CHARACTER (len=8), DIMENSION(jpmaxfld), PUBLIC, SAVE :: cl_read 35 !$OMP THREADPRIVATE(cl_read) 36 CHARACTER (len=8), DIMENSION(jpmaxfld), PUBLIC, SAVE :: cl_writ 37 !$OMP THREADPRIVATE(cl_writ) 38 39 INTEGER, DIMENSION(jpmaxfld), SAVE, PRIVATE :: in_var_id 40 !$OMP THREADPRIVATE(in_var_id) 41 INTEGER, DIMENSION(jpflda2o1+jpflda2o2), SAVE, PRIVATE :: out_var_id 42 !$OMP THREADPRIVATE(out_var_id) 43 44 LOGICAL :: cpl_current 24 25 ! Id for fields sent to ocean 26 INTEGER, PARAMETER :: ids_tauxxu = 1 27 INTEGER, PARAMETER :: ids_tauyyu = 2 28 INTEGER, PARAMETER :: ids_tauzzu = 3 29 INTEGER, PARAMETER :: ids_tauxxv = 4 30 INTEGER, PARAMETER :: ids_tauyyv = 5 31 INTEGER, PARAMETER :: ids_tauzzv = 6 32 INTEGER, PARAMETER :: ids_windsp = 7 33 INTEGER, PARAMETER :: ids_shfice = 8 34 INTEGER, PARAMETER :: ids_shfoce = 9 35 INTEGER, PARAMETER :: ids_shftot = 10 36 INTEGER, PARAMETER :: ids_nsfice = 11 37 INTEGER, PARAMETER :: ids_nsfoce = 12 38 INTEGER, PARAMETER :: ids_nsftot = 13 39 INTEGER, PARAMETER :: ids_dflxdt = 14 40 INTEGER, PARAMETER :: ids_totrai = 15 41 INTEGER, PARAMETER :: ids_totsno = 16 42 INTEGER, PARAMETER :: ids_toteva = 17 43 INTEGER, PARAMETER :: ids_icevap = 18 44 INTEGER, PARAMETER :: ids_ocevap = 19 45 INTEGER, PARAMETER :: ids_calvin = 20 46 INTEGER, PARAMETER :: ids_liqrun = 21 47 INTEGER, PARAMETER :: ids_runcoa = 22 48 INTEGER, PARAMETER :: ids_rivflu = 23 49 INTEGER, PARAMETER :: ids_atmco2 = 24 50 INTEGER, PARAMETER :: ids_taumod = 25 51 INTEGER, PARAMETER :: maxsend = 25 ! Maximum number of fields to send 52 53 ! Id for fields received from ocean 54 INTEGER, PARAMETER :: idr_sisutw = 1 55 INTEGER, PARAMETER :: idr_icecov = 2 56 INTEGER, PARAMETER :: idr_icealw = 3 57 INTEGER, PARAMETER :: idr_icetem = 4 58 INTEGER, PARAMETER :: idr_curenx = 5 59 INTEGER, PARAMETER :: idr_cureny = 6 60 INTEGER, PARAMETER :: idr_curenz = 7 61 INTEGER, PARAMETER :: idr_oceco2 = 8 62 INTEGER, PARAMETER :: maxrecv = 8 ! Maximum number of fields to receive 63 64 65 TYPE, PUBLIC :: FLD_CPL ! Type for coupling field information 66 CHARACTER(len = 8) :: name ! Name of the coupling field 67 LOGICAL :: action ! To be exchanged or not 68 INTEGER :: nid ! Id of the field 69 END TYPE FLD_CPL 70 71 TYPE(FLD_CPL), DIMENSION(maxsend), SAVE, PUBLIC :: infosend ! Information for sending coupling fields 72 TYPE(FLD_CPL), DIMENSION(maxrecv), SAVE, PUBLIC :: inforecv ! Information for receiving coupling fields 73 74 LOGICAL,SAVE :: cpl_current 75 !$OMP THREADPRIVATE(cpl_current) 45 76 46 77 #ifdef CPP_COUPLE … … 58 89 USE IOIPSL 59 90 USE surface_data, ONLY : version_ocean 91 USE carbon_cycle_mod, ONLY : carbon_cycle_cpl 92 60 93 INCLUDE "dimensions.h" 94 INCLUDE "iniprint.h" 61 95 62 96 ! Local variables … … 69 103 INTEGER, DIMENSION(4) :: il_var_actual_shape 70 104 INTEGER :: il_var_type 71 INTEGER :: nuout = 672 105 INTEGER :: jf 73 106 CHARACTER (len = 6) :: clmodnam … … 79 112 ! --------------- 80 113 !************************************************************************************ 81 WRITE( nuout,*) ' '82 WRITE( nuout,*) ' '83 WRITE( nuout,*) ' ROUTINE INICMA'84 WRITE( nuout,*) ' **************'85 WRITE( nuout,*) ' '86 WRITE( nuout,*) ' '114 WRITE(lunout,*) ' ' 115 WRITE(lunout,*) ' ' 116 WRITE(lunout,*) ' ROUTINE INICMA' 117 WRITE(lunout,*) ' **************' 118 WRITE(lunout,*) ' ' 119 WRITE(lunout,*) ' ' 87 120 88 121 ! … … 90 123 ! 91 124 clmodnam = 'lmdz.x' ! as in $NBMODEL in Cpl/Nam/namcouple.tmp 125 92 126 93 127 !************************************************************************************ … … 100 134 !$OMP BARRIER 101 135 cpl_current = cpl_current_omp 102 WRITE(nuout,*) 'Couple ocean currents, cpl_current = ',cpl_current 103 104 IF (cpl_current) THEN 105 jpfldo2a=7 106 ELSE 107 jpfldo2a=4 108 END IF 136 WRITE(lunout,*) 'Couple ocean currents, cpl_current = ',cpl_current 137 138 !************************************************************************************ 139 ! Define coupling variables 140 !************************************************************************************ 141 142 ! Atmospheric variables to send 143 144 !$OMP MASTER 145 infosend(:)%action = .FALSE. 146 147 infosend(ids_tauxxu)%action = .TRUE. ; infosend(ids_tauxxu)%name = 'COTAUXXU' 148 infosend(ids_tauyyu)%action = .TRUE. ; infosend(ids_tauyyu)%name = 'COTAUYYU' 149 infosend(ids_tauzzu)%action = .TRUE. ; infosend(ids_tauzzu)%name = 'COTAUZZU' 150 infosend(ids_tauxxv)%action = .TRUE. ; infosend(ids_tauxxv)%name = 'COTAUXXV' 151 infosend(ids_tauyyv)%action = .TRUE. ; infosend(ids_tauyyv)%name = 'COTAUYYV' 152 infosend(ids_tauzzv)%action = .TRUE. ; infosend(ids_tauzzv)%name = 'COTAUZZV' 153 infosend(ids_windsp)%action = .TRUE. ; infosend(ids_windsp)%name = 'COWINDSP' 154 infosend(ids_shfice)%action = .TRUE. ; infosend(ids_shfice)%name = 'COSHFICE' 155 infosend(ids_nsfice)%action = .TRUE. ; infosend(ids_nsfice)%name = 'CONSFICE' 156 infosend(ids_dflxdt)%action = .TRUE. ; infosend(ids_dflxdt)%name = 'CODFLXDT' 157 infosend(ids_calvin)%action = .TRUE. ; infosend(ids_calvin)%name = 'COCALVIN' 158 159 IF (version_ocean=='nemo') THEN 160 infosend(ids_shftot)%action = .TRUE. ; infosend(ids_shftot)%name = 'COQSRMIX' 161 infosend(ids_nsftot)%action = .TRUE. ; infosend(ids_nsftot)%name = 'COQNSMIX' 162 infosend(ids_totrai)%action = .TRUE. ; infosend(ids_totrai)%name = 'COTOTRAI' 163 infosend(ids_totsno)%action = .TRUE. ; infosend(ids_totsno)%name = 'COTOTSNO' 164 infosend(ids_toteva)%action = .TRUE. ; infosend(ids_toteva)%name = 'COTOTEVA' 165 infosend(ids_icevap)%action = .TRUE. ; infosend(ids_icevap)%name = 'COICEVAP' 166 infosend(ids_liqrun)%action = .TRUE. ; infosend(ids_liqrun)%name = 'COLIQRUN' 167 infosend(ids_taumod)%action = .TRUE. ; infosend(ids_taumod)%name = 'COTAUMOD' 168 IF (carbon_cycle_cpl) THEN 169 infosend(ids_atmco2)%action = .TRUE. ; infosend(ids_atmco2)%name = 'COATMCO2' 170 ENDIF 171 172 ELSE IF (version_ocean=='opa8') THEN 173 infosend(ids_shfoce)%action = .TRUE. ; infosend(ids_shfoce)%name = 'COSHFOCE' 174 infosend(ids_nsfoce)%action = .TRUE. ; infosend(ids_nsfoce)%name = 'CONSFOCE' 175 infosend(ids_icevap)%action = .TRUE. ; infosend(ids_icevap)%name = 'COTFSICE' 176 infosend(ids_ocevap)%action = .TRUE. ; infosend(ids_ocevap)%name = 'COTFSOCE' 177 infosend(ids_totrai)%action = .TRUE. ; infosend(ids_totrai)%name = 'COTOLPSU' 178 infosend(ids_totsno)%action = .TRUE. ; infosend(ids_totsno)%name = 'COTOSPSU' 179 infosend(ids_runcoa)%action = .TRUE. ; infosend(ids_runcoa)%name = 'CORUNCOA' 180 infosend(ids_rivflu)%action = .TRUE. ; infosend(ids_rivflu)%name = 'CORIVFLU' 181 ENDIF 182 183 ! Oceanic variables to receive 184 185 inforecv(:)%action = .FALSE. 186 187 inforecv(idr_sisutw)%action = .TRUE. ; inforecv(idr_sisutw)%name = 'SISUTESW' 188 inforecv(idr_icecov)%action = .TRUE. ; inforecv(idr_icecov)%name = 'SIICECOV' 189 inforecv(idr_icealw)%action = .TRUE. ; inforecv(idr_icealw)%name = 'SIICEALW' 190 inforecv(idr_icetem)%action = .TRUE. ; inforecv(idr_icetem)%name = 'SIICTEMW' 191 192 IF (cpl_current ) THEN 193 inforecv(idr_curenx)%action = .TRUE. ; inforecv(idr_curenx)%name = 'CURRENTX' 194 inforecv(idr_cureny)%action = .TRUE. ; inforecv(idr_cureny)%name = 'CURRENTY' 195 inforecv(idr_curenz)%action = .TRUE. ; inforecv(idr_curenz)%name = 'CURRENTZ' 196 ENDIF 197 198 IF (carbon_cycle_cpl ) THEN 199 inforecv(idr_oceco2)%action = .TRUE. ; inforecv(idr_oceco2)%name = 'SICO2FLX' 200 ENDIF 201 109 202 !************************************************************************************ 110 203 ! Here we go: psmile initialisation … … 117 210 CALL abort_gcm(modname,abort_message,1) 118 211 ELSE 119 WRITE( nuout,*) 'inicma : init psmile ok '212 WRITE(lunout,*) 'inicma : init psmile ok ' 120 213 ENDIF 121 214 ENDIF … … 130 223 131 224 IF (mpi_rank==mpi_size-1) ig_paral(3)=ig_paral(3)+iim-1 132 WRITE( nuout,*) mpi_rank,'ig_paral--->',ig_paral(2),ig_paral(3)225 WRITE(lunout,*) mpi_rank,'ig_paral--->',ig_paral(2),ig_paral(3) 133 226 134 227 ierror=PRISM_Ok … … 139 232 CALL abort_gcm(modname,abort_message,1) 140 233 ELSE 141 WRITE(nuout,*) 'inicma : decomposition domaine psmile ok ' 142 ENDIF 143 144 !************************************************************************************ 145 ! Field Declarations 146 !************************************************************************************ 147 ! Define symbolic name for fields exchanged from atmos to coupler, 148 ! must be the same as (1) of the field definition in namcouple: 149 ! 150 ! Initialization 151 cl_writ(:)='NOFLDATM' 152 153 cl_writ(1)='COTAUXXU' 154 cl_writ(2)='COTAUYYU' 155 cl_writ(3)='COTAUZZU' 156 cl_writ(4)='COTAUXXV' 157 cl_writ(5)='COTAUYYV' 158 cl_writ(6)='COTAUZZV' 159 cl_writ(7)='COWINDSP' 160 cl_writ(8)='COSHFICE' 161 cl_writ(10)='CONSFICE' 162 cl_writ(12)='CODFLXDT' 163 164 IF (version_ocean=='nemo') THEN 165 cl_writ(9)='COQSRMIX' 166 cl_writ(11)='COQNSMIX' 167 cl_writ(13)='COTOTRAI' 168 cl_writ(14)='COTOTSNO' 169 cl_writ(15)='COTOTEVA' 170 cl_writ(16)='COICEVAP' 171 cl_writ(17)='COCALVIN' 172 cl_writ(18)='COLIQRUN' 173 ELSE IF (version_ocean=='opa8') THEN 174 cl_writ(9)='COSHFOCE' 175 cl_writ(11)='CONSFOCE' 176 cl_writ(13)='COTFSICE' 177 cl_writ(14)='COTFSOCE' 178 cl_writ(15)='COTOLPSU' 179 cl_writ(16)='COTOSPSU' 180 cl_writ(17)='CORUNCOA' 181 cl_writ(18)='CORIVFLU' 182 cl_writ(19)='COCALVIN' 183 ENDIF 184 185 ! 186 ! Define symbolic name for fields exchanged from coupler to atmosphere, 187 ! must be the same as (2) of the field definition in namcouple: 188 ! 189 ! Initialization 190 cl_read(:)='NOFLDATM' 191 192 cl_read(1)='SISUTESW' 193 cl_read(2)='SIICECOV' 194 cl_read(3)='SIICEALW' 195 cl_read(4)='SIICTEMW' 196 197 IF (cpl_current) THEN 198 cl_read(5)='CURRENTX' 199 cl_read(6)='CURRENTY' 200 cl_read(7)='CURRENTZ' 201 END IF 234 WRITE(lunout,*) 'inicma : decomposition domaine psmile ok ' 235 ENDIF 202 236 203 237 il_var_nodims(1) = 2 … … 212 246 213 247 !************************************************************************************ 214 ! Oceanic Fields 215 !************************************************************************************ 216 DO jf=1, jpfldo2a 217 CALL prism_def_var_proto(in_var_id(jf), cl_read(jf), il_part_id, & 218 il_var_nodims, PRISM_In, il_var_actual_shape, il_var_type, & 219 ierror) 220 IF (ierror .NE. PRISM_Ok) THEN 221 abort_message=' Probleme init dans prism_def_var_proto ' 222 CALL abort_gcm(modname,abort_message,1) 248 ! Oceanic Fields to receive 249 ! Loop over all possible variables 250 !************************************************************************************ 251 DO jf=1, maxrecv 252 IF (inforecv(jf)%action) THEN 253 CALL prism_def_var_proto(inforecv(jf)%nid, inforecv(jf)%name, il_part_id, & 254 il_var_nodims, PRISM_In, il_var_actual_shape, il_var_type, & 255 ierror) 256 IF (ierror .NE. PRISM_Ok) THEN 257 WRITE(lunout,*) 'inicma : Problem with prism_def_var_proto for field : ',& 258 inforecv(jf)%name 259 abort_message=' Problem in call to prism_def_var_proto for fields to receive' 260 CALL abort_gcm(modname,abort_message,1) 261 ENDIF 223 262 ENDIF 224 263 END DO 225 226 !************************************************************************************ 227 ! Atmospheric Fields 228 !************************************************************************************ 229 DO jf=1, jpflda2o1+jpflda2o2 230 CALL prism_def_var_proto(out_var_id(jf), cl_writ(jf), il_part_id, & 231 il_var_nodims, PRISM_Out, il_var_actual_shape, il_var_type, & 232 ierror) 233 IF (ierror .NE. PRISM_Ok) THEN 234 abort_message=' Probleme init dans prism_def_var_proto ' 235 CALL abort_gcm(modname,abort_message,1) 264 265 !************************************************************************************ 266 ! Atmospheric Fields to send 267 ! Loop over all possible variables 268 !************************************************************************************ 269 DO jf=1,maxsend 270 IF (infosend(jf)%action) THEN 271 CALL prism_def_var_proto(infosend(jf)%nid, infosend(jf)%name, il_part_id, & 272 il_var_nodims, PRISM_Out, il_var_actual_shape, il_var_type, & 273 ierror) 274 IF (ierror .NE. PRISM_Ok) THEN 275 WRITE(lunout,*) 'inicma : Problem with prism_def_var_proto for field : ',& 276 infosend(jf)%name 277 abort_message=' Problem in call to prism_def_var_proto for fields to send' 278 CALL abort_gcm(modname,abort_message,1) 279 ENDIF 236 280 ENDIF 237 281 END DO 238 282 239 283 !************************************************************************************ 240 284 ! End definition … … 242 286 CALL prism_enddef_proto(ierror) 243 287 IF (ierror .NE. PRISM_Ok) THEN 244 abort_message=' Problem e init dans prism_endef_proto'288 abort_message=' Problem in call to prism_endef_proto' 245 289 CALL abort_gcm(modname,abort_message,1) 246 290 ELSE 247 WRITE(nuout,*) 'inicma : endef psmile ok ' 248 ENDIF 291 WRITE(lunout,*) 'inicma : endef psmile ok ' 292 ENDIF 293 294 !$OMP END MASTER 249 295 250 296 END SUBROUTINE inicma … … 261 307 ! 262 308 INCLUDE "dimensions.h" 309 INCLUDE "iniprint.h" 263 310 ! Input arguments 264 311 !************************************************************************************ … … 267 314 ! Output arguments 268 315 !************************************************************************************ 269 REAL, DIMENSION(iim, jj_nb, jpfldo2a), INTENT(OUT) :: tab_get316 REAL, DIMENSION(iim, jj_nb,maxrecv), INTENT(OUT) :: tab_get 270 317 271 318 ! Local variables 272 319 !************************************************************************************ 273 INTEGER :: nuout = 6 ! listing output unit274 320 INTEGER :: ierror, i 275 321 INTEGER :: istart,iend … … 279 325 280 326 !************************************************************************************ 281 WRITE ( nuout,*) ' '282 WRITE ( nuout,*) 'Fromcpl: Reading fields from CPL, ktime=',ktime283 WRITE ( nuout,*) ' '327 WRITE (lunout,*) ' ' 328 WRITE (lunout,*) 'Fromcpl: Reading fields from CPL, ktime=',ktime 329 WRITE (lunout,*) ' ' 284 330 285 331 istart=ii_begin … … 290 336 ENDIF 291 337 292 DO i = 1, jpfldo2a 293 field(:) = -99999. 294 CALL prism_get_proto(in_var_id(i), ktime, field(istart:iend), ierror) 295 tab_get(:,:,i) = RESHAPE(field(:),(/iim,jj_nb/)) 338 DO i = 1, maxrecv 339 IF (inforecv(i)%action) THEN 340 field(:) = -99999. 341 CALL prism_get_proto(inforecv(i)%nid, ktime, field(istart:iend), ierror) 342 tab_get(:,:,i) = RESHAPE(field(:),(/iim,jj_nb/)) 296 343 297 IF (ierror .NE. PRISM_Ok .AND. ierror.NE.PRISM_Recvd .AND. & 298 ierror.NE.PRISM_FromRest & 299 .AND. ierror.NE.PRISM_Input .AND. ierror.NE.PRISM_RecvOut & 300 .AND. ierror.NE.PRISM_FromRestOut) THEN 301 WRITE (nuout,*) cl_read(i), ktime 302 abort_message=' Probleme dans prism_get_proto ' 303 CALL abort_gcm(modname,abort_message,1) 304 ENDIF 344 IF (ierror .NE. PRISM_Ok .AND. ierror.NE.PRISM_Recvd .AND. & 345 ierror.NE.PRISM_FromRest & 346 .AND. ierror.NE.PRISM_Input .AND. ierror.NE.PRISM_RecvOut & 347 .AND. ierror.NE.PRISM_FromRestOut) THEN 348 WRITE (lunout,*) 'Error with receiving filed : ', inforecv(i)%name, ktime 349 abort_message=' Problem in prism_get_proto ' 350 CALL abort_gcm(modname,abort_message,1) 351 ENDIF 352 ENDIF 305 353 END DO 306 354 … … 321 369 ! 322 370 INCLUDE "dimensions.h" 371 INCLUDE "iniprint.h" 323 372 ! Input arguments 324 373 !************************************************************************************ 325 INTEGER, INTENT(IN) 326 LOGICAL, INTENT(IN) 327 REAL, DIMENSION(iim, jj_nb, jpflda2o1+jpflda2o2), INTENT(IN) :: tab_put374 INTEGER, INTENT(IN) :: ktime 375 LOGICAL, INTENT(IN) :: last 376 REAL, DIMENSION(iim, jj_nb, maxsend), INTENT(IN) :: tab_put 328 377 329 378 ! Local variables … … 332 381 INTEGER :: istart,iend 333 382 INTEGER :: wstart,wend 334 INTEGER, PARAMETER :: nuout = 6335 383 INTEGER :: ierror, i 336 384 REAL, DIMENSION(iim*jj_nb) :: field … … 341 389 checkout=.FALSE. 342 390 343 WRITE( nuout,*) ' '344 WRITE( nuout,*) 'Intocpl: sending fields to CPL, ktime= ', ktime345 WRITE( nuout,*) 'last', last346 WRITE( nuout,*)391 WRITE(lunout,*) ' ' 392 WRITE(lunout,*) 'Intocpl: sending fields to CPL, ktime= ', ktime 393 WRITE(lunout,*) 'last = ', last 394 WRITE(lunout,*) 347 395 348 396 … … 360 408 IF (is_south_pole) wend=iend-iim+1 361 409 362 field = RESHAPE(tab_put(:,:,8),(/iim*jj_nb/)) 363 CALL writeField_phy("fsolice",field(wstart:wend),1) 364 field = RESHAPE(tab_put(:,:,9),(/iim*jj_nb/)) 365 CALL writeField_phy("fsolwat",field(wstart:wend),1) 366 field = RESHAPE(tab_put(:,:,10),(/iim*jj_nb/)) 367 CALL writeField_phy("fnsolice",field(wstart:wend),1) 368 field = RESHAPE(tab_put(:,:,11),(/iim*jj_nb/)) 369 CALL writeField_phy("fnsolwat",field(wstart:wend),1) 370 field = RESHAPE(tab_put(:,:,12),(/iim*jj_nb/)) 371 CALL writeField_phy("fnsicedt",field(wstart:wend),1) 372 field = RESHAPE(tab_put(:,:,13),(/iim*jj_nb/)) 373 CALL writeField_phy("evice",field(wstart:wend),1) 374 field = RESHAPE(tab_put(:,:,14),(/iim*jj_nb/)) 375 CALL writeField_phy("evwat",field(wstart:wend),1) 376 field = RESHAPE(tab_put(:,:,15),(/iim*jj_nb/)) 377 CALL writeField_phy("lpre",field(wstart:wend),1) 378 field = RESHAPE(tab_put(:,:,16),(/iim*jj_nb/)) 379 CALL writeField_phy("spre",field(wstart:wend),1) 380 field = RESHAPE(tab_put(:,:,17),(/iim*jj_nb/)) 381 CALL writeField_phy("dirunoff",field(wstart:wend),1) 382 field = RESHAPE(tab_put(:,:,18),(/iim*jj_nb/)) 383 CALL writeField_phy("rivrunoff",field(wstart:wend),1) 384 field = RESHAPE(tab_put(:,:,19),(/iim*jj_nb/)) 385 CALL writeField_phy("calving",field(wstart:wend),1) 386 field = RESHAPE(tab_put(:,:,1),(/iim*jj_nb/)) 387 CALL writeField_phy("tauxx_u",field(wstart:wend),1) 388 field = RESHAPE(tab_put(:,:,2),(/iim*jj_nb/)) 389 CALL writeField_phy("tauyy_u",field(wstart:wend),1) 390 field = RESHAPE(tab_put(:,:,3),(/iim*jj_nb/)) 391 CALL writeField_phy("tauzz_u",field(wstart:wend),1) 392 field = RESHAPE(tab_put(:,:,4),(/iim*jj_nb/)) 393 CALL writeField_phy("tauxx_v",field(wstart:wend),1) 394 field = RESHAPE(tab_put(:,:,5),(/iim*jj_nb/)) 395 CALL writeField_phy("tauyy_v",field(wstart:wend),1) 396 field = RESHAPE(tab_put(:,:,6),(/iim*jj_nb/)) 397 CALL writeField_phy("tauzz_v",field(wstart:wend),1) 398 field = RESHAPE(tab_put(:,:,7),(/iim*jj_nb/)) 399 CALL writeField_phy("windsp",field(wstart:wend),1) 400 ENDIF 401 410 DO i = 1, maxsend 411 IF (infosend(i)%action) THEN 412 field = RESHAPE(tab_put(:,:,i),(/iim*jj_nb/)) 413 CALL writefield_phy(infosend(i)%name,field(wstart:wend),1) 414 END IF 415 END DO 416 END IF 417 402 418 !************************************************************************************ 403 419 ! PRISM_PUT 404 420 !************************************************************************************ 405 421 406 DO i = 1, jpflda2o1+jpflda2o2 407 field = RESHAPE(tab_put(:,:,i),(/iim*jj_nb/)) 408 CALL prism_put_proto(out_var_id(i), ktime, field(istart:iend), ierror) 409 410 IF (ierror .NE. PRISM_Ok .AND. ierror.NE.PRISM_Sent .AND. ierror.NE.PRISM_ToRest & 411 .AND. ierror.NE.PRISM_LocTrans .AND. ierror.NE.PRISM_Output .AND. & 412 ierror.NE.PRISM_SentOut .AND. ierror.NE.PRISM_ToRestOut) THEN 413 WRITE (nuout,*) cl_writ(i), ktime 414 abort_message=' Probleme dans prism_put_proto ' 415 CALL abort_gcm(modname,abort_message,1) 416 ENDIF 417 422 DO i = 1, maxsend 423 IF (infosend(i)%action) THEN 424 field = RESHAPE(tab_put(:,:,i),(/iim*jj_nb/)) 425 CALL prism_put_proto(infosend(i)%nid, ktime, field(istart:iend), ierror) 426 427 IF (ierror .NE. PRISM_Ok .AND. ierror.NE.PRISM_Sent .AND. ierror.NE.PRISM_ToRest & 428 .AND. ierror.NE.PRISM_LocTrans .AND. ierror.NE.PRISM_Output .AND. & 429 ierror.NE.PRISM_SentOut .AND. ierror.NE.PRISM_ToRestOut) THEN 430 WRITE (lunout,*) 'Error with sending field :', infosend(i)%name, ktime 431 abort_message=' Problem in prism_put_proto ' 432 CALL abort_gcm(modname,abort_message,1) 433 ENDIF 434 ENDIF 418 435 END DO 419 436 … … 427 444 CALL prism_terminate_proto(ierror) 428 445 IF (ierror .NE. PRISM_Ok) THEN 429 abort_message=' Problem e dansprism_terminate_proto '446 abort_message=' Problem in prism_terminate_proto ' 430 447 CALL abort_gcm(modname,abort_message,1) 431 448 ENDIF -
LMDZ4/trunk/libf/phylmd/orbite.F
r766 r1279 124 124 c revu pour GCM le 30 septembre 1996 125 125 c=============================================================== 126 c longi ----INPUT: la longitude vraie de la terre dans son plan126 c longi : la longitude vraie de la terre dans son plan 127 127 c solaire a partir de l'equinoxe de printemps (degre) 128 c gmtime ---INPUT: temps universel en fraction de jour129 c pdtrad ---INPUT: pas de temps du rayonnement (secondes)128 c gmtime : temps universel en fraction de jour 129 c pdtrad : pas de temps du rayonnement (secondes) 130 130 c lat------INPUT : latitude en degres 131 131 c long-----INPUT : longitude en degres … … 137 137 #include "YOMCST.h" 138 138 c================================================================ 139 real longi, gmtime, pdtrad139 real, intent(in):: longi, gmtime, pdtrad 140 140 real lat(klon), long(klon), pmu0(klon), frac(klon) 141 141 c================================================================ -
LMDZ4/trunk/libf/phylmd/orografi.F
r776 r1279 1792 1792 1793 1793 DO 110 JK=1,NLEV 1794 ZPM1R=pplay_glo( klon_glo/2,jk)/paprs_glo(klon_glo/2,1)1794 ZPM1R=pplay_glo((klon_glo/2)+1,jk)/paprs_glo((klon_glo/2)+1,1) 1795 1795 IF(ZPM1R.GE.ZSIGT)THEN 1796 1796 nktopg=JK 1797 1797 ENDIF 1798 ZPM1R=pplay_glo( klon_glo/2,jk)/paprs_glo(klon_glo/2,1)1798 ZPM1R=pplay_glo((klon_glo/2)+1,jk)/paprs_glo((klon_glo/2)+1,1) 1799 1799 IF(ZPM1R.GE.ZSTRA)THEN 1800 1800 NSTRA=JK -
LMDZ4/trunk/libf/phylmd/pbl_surface_mod.F90
r1236 r1279 1 ! 2 ! $Id$ 1 3 ! 2 4 MODULE pbl_surface_mod … … 242 244 ! pblT-----output-R- T au nveau HCL 243 245 ! 246 USE carbon_cycle_mod, ONLY : carbon_cycle_cpl, co2_send 247 IMPLICIT NONE 248 244 249 INCLUDE "indicesol.h" 245 250 INCLUDE "dimsoil.h" … … 460 465 !**************************************************************************************** 461 466 ! Declarations specifiques pour le 1D. A reprendre 462 REAL,SAVE :: fsens,flat 463 LOGICAL,SAVE :: ok_flux_surf=.FALSE. 464 !$OMP THREADPRIVATE(fsens,flat,ok_flux_surf) 465 467 REAL :: fsens,flat 468 LOGICAL :: ok_flux_surf=.FALSE. 469 COMMON /flux_arp/fsens,flat,ok_flux_surf 466 470 !**************************************************************************************** 467 471 ! End of declarations … … 762 766 ypsref(:) = ypaprs(:,1) 763 767 764 ! - Constant CO2 is copied to global grid 765 r_co2_ppm(:) = co2_ppm 766 768 ! - CO2 field on 2D grid to be sent to ORCHIDEE 769 ! Transform to compressed field 770 IF (carbon_cycle_cpl) THEN 771 DO i=1,knon 772 r_co2_ppm(i) = co2_send(ni(i)) 773 END DO 774 ELSE 775 r_co2_ppm(:) = co2_ppm ! Constant field 776 END IF 767 777 768 778 !**************************************************************************************** -
LMDZ4/trunk/libf/phylmd/phyetat0.F
r1054 r1279 19 19 USE iostart 20 20 USE write_field_phy 21 USE infotrac 22 USE traclmdz_mod, ONLY : traclmdz_from_restart 23 USE carbon_cycle_mod,ONLY : carbon_cycle_tr, carbon_cycle_cpl 24 21 25 IMPLICIT none 22 26 c====================================================================== … … 48 52 REAL run_off_lic_0(klon) 49 53 REAL fractint(klon) 54 REAL trs(klon,nbtr) 50 55 51 56 CHARACTER*6 ocean_in … … 62 67 INTEGER length 63 68 PARAMETER (length=100) 69 INTEGER it, iiq 64 70 REAL tab_cntrl(length), tabcntr0(length) 65 71 CHARACTER*7 str7 … … 101 107 tab_cntrl(1)=dtime 102 108 tab_cntrl(2)=radpas 103 co2_ppm_etat0 = tab_cntrl(3) 109 110 c co2_ppm : value from the previous time step 111 IF (carbon_cycle_tr .OR. carbon_cycle_cpl) THEN 112 co2_ppm = tab_cntrl(3) 113 RCO2 = co2_ppm * 1.0e-06 * 44.011/28.97 114 c ELSE : keep value from .def 115 END IF 116 117 c co2_ppm0 : initial value of atmospheric CO2 (from create_etat0_limit.e .def) 118 co2_ppm0 = tab_cntrl(16) 119 104 120 solaire_etat0 = tab_cntrl(4) 105 121 tab_cntrl(5)=iflag_con … … 853 869 c f0(ig)=1.e-5 854 870 c f0 855 CALL get_field(" f0",f0,found)871 CALL get_field("F0",f0,found) 856 872 IF (.NOT. found) THEN 857 873 PRINT*, "phyetat0: Le champ <f0> est absent" … … 983 999 PRINT*,'(ecart-type) wake_fip:', xmin, xmax 984 1000 c 1001 c Read and send field trs to traclmdz 1002 c 1003 IF (type_trac == 'lmdz') THEN 1004 DO it=1,nbtr 1005 iiq=niadv(it+2) 1006 CALL get_field("trs_"//tname(iiq),trs(:,it),found) 1007 IF (.NOT. found) THEN 1008 PRINT*, 1009 $ "phyetat0: Le champ <trs_"//tname(iiq)//"> est absent" 1010 PRINT*, "Depart legerement fausse. Mais je continue" 1011 trs(:,it) = 0. 1012 ENDIF 1013 xmin = 1.0E+20 1014 xmax = -1.0E+20 1015 xmin = MINval(trs(:,it)) 1016 xmax = MAXval(trs(:,it)) 1017 PRINT*,"(ecart-type) trs_"//tname(iiq)//" :", xmin, xmax 1018 1019 END DO 1020 1021 CALL traclmdz_from_restart(trs) 1022 END IF 1023 985 1024 986 1025 c on ferme le fichier … … 1005 1044 CALL fonte_neige_init(run_off_lic_0) 1006 1045 1046 1007 1047 RETURN 1008 1048 END -
LMDZ4/trunk/libf/phylmd/phyredem.F
r1001 r1279 12 12 USE phys_state_var_mod 13 13 USE iostart 14 USE traclmdz_mod, ONLY : traclmdz_to_restart 15 USE infotrac 14 16 15 17 IMPLICIT none … … 42 44 REAL agesno(klon,nbsrf) 43 45 REAL run_off_lic_0(klon) 46 REAL trs(klon,nbtr) 44 47 c 45 48 INTEGER nid, nvarid, idim1, idim2, idim3 … … 52 55 CHARACTER (len=7) :: str7 53 56 CHARACTER (len=2) :: str2 54 57 INTEGER :: it, iiq 58 55 59 c====================================================================== 56 60 c … … 70 74 tab_cntrl(ierr) = 0.0 71 75 ENDDO 72 tab_cntrl(1) = dtime76 CC tab_cntrl(1) = dtime 73 77 tab_cntrl(2) = radpas 78 c co2_ppm : current value of atmospheric CO2 74 79 tab_cntrl(3) = co2_ppm 75 80 tab_cntrl(4) = solaire … … 86 91 tab_cntrl(14) = annee_ref 87 92 tab_cntrl(15) = itau_phy 93 94 c co2_ppm0 : initial value of atmospheric CO2 95 tab_cntrl(16) = co2_ppm0 88 96 c 89 97 CALL put_var("controle","Parametres de controle",tab_cntrl) … … 311 319 CALL put_field("WAKE_FIP","",wake_fip) 312 320 321 322 ! trs from traclmdz_mod 323 IF (type_trac == 'lmdz') THEN 324 CALL traclmdz_to_restart(trs) 325 DO it=1,nbtr 326 iiq=niadv(it+2) 327 CALL put_field("trs_"//tname(iiq),"",trs(:,it)) 328 END DO 329 END IF 330 313 331 CALL close_restartphy 314 332 !$OMP BARRIER -
LMDZ4/trunk/libf/phylmd/phys_local_var_mod.F90
r1146 r1279 1 ! 2 ! $Id$ 3 ! 1 4 MODULE phys_local_var_mod 5 2 6 ! Variables locales pour effectuer les appels en serie 3 7 !====================================================================== … … 66 70 REAL, SAVE, ALLOCATABLE :: d_ts(:,:), d_tr(:,:,:) 67 71 !$OMP THREADPRIVATE(d_ts, d_tr) 72 73 ! diagnostique pour le rayonnement 74 REAL, SAVE, ALLOCATABLE :: topswad_aero(:), solswad_aero(:) ! diag 75 !$OMP THREADPRIVATE(topswad_aero,solswad_aero) 76 REAL, SAVE, ALLOCATABLE :: topswai_aero(:), solswai_aero(:) ! diag 77 !$OMP THREADPRIVATE(topswai_aero,solswai_aero) 78 REAL, SAVE, ALLOCATABLE :: topswad0_aero(:), solswad0_aero(:) ! diag 79 !$OMP THREADPRIVATE(topswad0_aero,solswad0_aero) 80 REAL, SAVE, ALLOCATABLE :: topsw_aero(:,:), solsw_aero(:,:) ! diag 81 !$OMP THREADPRIVATE(topsw_aero,solsw_aero) 82 REAL, SAVE, ALLOCATABLE :: topsw0_aero(:,:), solsw0_aero(:,:) ! diag 83 !$OMP THREADPRIVATE(topsw0_aero,solsw0_aero) 84 REAL, SAVE, ALLOCATABLE :: topswcf_aero(:,:), solswcf_aero(:,:) ! diag 85 !$OMP THREADPRIVATE(topswcf_aero,solswcf_aero) 86 REAL, SAVE, ALLOCATABLE :: tausum_aero(:,:,:) 87 !$OMP THREADPRIVATE(tausum_aero) 88 REAL, SAVE, ALLOCATABLE :: tau3d_aero(:,:,:,:) 89 !$OMP THREADPRIVATE(tau3d_aero) 90 68 91 CONTAINS 69 92 … … 72 95 use dimphy 73 96 use infotrac, ONLY : nbtr 97 USE aero_mod 98 74 99 IMPLICIT NONE 75 100 #include "indicesol.h" … … 97 122 allocate(d_u_lif(klon,klev),d_v_lif(klon,klev)) 98 123 allocate(d_ts(klon,klev), d_tr(klon,klev,nbtr)) 124 allocate(topswad_aero(klon), solswad_aero(klon)) 125 allocate(topswai_aero(klon), solswai_aero(klon)) 126 allocate(topswad0_aero(klon), solswad0_aero(klon)) 127 allocate(topsw_aero(klon,naero_grp), solsw_aero(klon,naero_grp)) 128 allocate(topsw0_aero(klon,naero_grp), solsw0_aero(klon,naero_grp)) 129 allocate(topswcf_aero(klon,3), solswcf_aero(klon,3)) 130 allocate(d_u_hin(klon,klev),d_v_hin(klon,klev),d_t_hin(klon,klev)) 131 allocate(tausum_aero(klon,nwave,naero_spc)) 132 allocate(tau3d_aero(klon,klev,nwave,naero_spc)) 133 99 134 END SUBROUTINE phys_local_var_init 100 135 … … 127 162 deallocate(d_u_lif,d_v_lif) 128 163 deallocate(d_ts, d_tr) 164 deallocate(topswad_aero,solswad_aero) 165 deallocate(topswai_aero,solswai_aero) 166 deallocate(topswad0_aero,solswad0_aero) 167 deallocate(topsw_aero,solsw_aero) 168 deallocate(topsw0_aero,solsw0_aero) 169 deallocate(topswcf_aero,solswcf_aero) 170 deallocate(tausum_aero) 171 deallocate(tau3d_aero) 172 deallocate(d_u_hin,d_v_hin,d_t_hin) 173 129 174 END SUBROUTINE phys_local_var_end 130 175 -
LMDZ4/trunk/libf/phylmd/phys_output_mod.F90
r1146 r1279 1 ! 2 ! $Id$ 3 ! 1 4 ! Abderrahmane 12 2007 2 5 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! … … 19 22 integer, dimension(nfiles), save :: lev_files 20 23 integer, dimension(nfiles), save :: nid_files 21 24 !!$OMP THREADPRIVATE(clef_files, lev_files,nid_files) 25 22 26 integer, dimension(nfiles), private, save :: nhorim, nvertm 23 real, dimension(nfiles), private, save :: zstophym, zoutm 27 integer, dimension(nfiles), private, save :: nvertap, nvertbp, nvertAlt 28 ! integer, dimension(nfiles), private, save :: nvertp0 29 real, dimension(nfiles), private, save :: zoutm 30 real, private, save :: zdtime 24 31 CHARACTER(len=20), dimension(nfiles), private, save :: type_ecri 32 !$OMP THREADPRIVATE(nhorim, nvertm, zoutm,zdtime,type_ecri) 25 33 26 34 ! integer, save :: nid_hf3d … … 39 47 END TYPE ctrl_out 40 48 49 !!! Comosentes de la coordonnee sigma-hybride 50 !!! Ap et Bp 51 type(ctrl_out),save :: o_Ahyb = ctrl_out((/ 1, 1, 1, 1, 1 /), 'Ap') 52 type(ctrl_out),save :: o_Bhyb = ctrl_out((/ 1, 1, 1, 1, 1 /), 'Bp') 53 type(ctrl_out),save :: o_Alt = ctrl_out((/ 1, 1, 1, 1, 1 /), 'Alt') 41 54 42 55 !!! 1D 43 type(ctrl_out) :: o_phis = ctrl_out((/ 1, 1, 10, 1, 1 /), 'phis')44 type(ctrl_out) :: o_aire = ctrl_out((/ 1, 1, 10, 1, 1 /),'aire')45 type(ctrl_out) :: o_contfracATM = ctrl_out((/ 10, 1, 1, 10, 10 /),'contfracATM')46 type(ctrl_out) :: o_contfracOR = ctrl_out((/ 10, 1, 1, 10, 10 /),'contfracOR')47 type(ctrl_out) :: o_aireTER = ctrl_out((/ 10, 10, 1, 10, 10 /),'aireTER')56 type(ctrl_out),save :: o_phis = ctrl_out((/ 1, 1, 10, 1, 1 /), 'phis') 57 type(ctrl_out),save :: o_aire = ctrl_out((/ 1, 1, 10, 1, 1 /),'aire') 58 type(ctrl_out),save :: o_contfracATM = ctrl_out((/ 10, 1, 1, 10, 10 /),'contfracATM') 59 type(ctrl_out),save :: o_contfracOR = ctrl_out((/ 10, 1, 1, 10, 10 /),'contfracOR') 60 type(ctrl_out),save :: o_aireTER = ctrl_out((/ 10, 10, 1, 10, 10 /),'aireTER') 48 61 49 62 !!! 2D 50 type(ctrl_out) :: o_flat = ctrl_out((/ 10, 1, 10, 10, 1 /),'flat')51 type(ctrl_out) :: o_slp = ctrl_out((/ 1, 1, 1, 10, 1 /),'slp')52 type(ctrl_out) :: o_tsol = ctrl_out((/ 1, 1, 1, 1, 1 /),'tsol')53 type(ctrl_out) :: o_t2m = ctrl_out((/ 1, 1, 1, 1, 1 /),'t2m')54 type(ctrl_out) :: o_t2m_min = ctrl_out((/ 1, 1, 10, 10, 10 /),'t2m_min')55 type(ctrl_out) :: o_t2m_max = ctrl_out((/ 1, 1, 10, 10, 10 /),'t2m_max')56 type(ctrl_out), dimension(4) :: o_t2m_srf = (/ ctrl_out((/ 10, 4, 10, 10, 10 /),'t2m_ter'), &63 type(ctrl_out),save :: o_flat = ctrl_out((/ 10, 1, 10, 10, 1 /),'flat') 64 type(ctrl_out),save :: o_slp = ctrl_out((/ 1, 1, 1, 10, 1 /),'slp') 65 type(ctrl_out),save :: o_tsol = ctrl_out((/ 1, 1, 1, 1, 1 /),'tsol') 66 type(ctrl_out),save :: o_t2m = ctrl_out((/ 1, 1, 1, 1, 1 /),'t2m') 67 type(ctrl_out),save :: o_t2m_min = ctrl_out((/ 1, 1, 10, 10, 10 /),'t2m_min') 68 type(ctrl_out),save :: o_t2m_max = ctrl_out((/ 1, 1, 10, 10, 10 /),'t2m_max') 69 type(ctrl_out),save,dimension(4) :: o_t2m_srf = (/ ctrl_out((/ 10, 4, 10, 10, 10 /),'t2m_ter'), & 57 70 ctrl_out((/ 10, 4, 10, 10, 10 /),'t2m_lic'), & 58 71 ctrl_out((/ 10, 4, 10, 10, 10 /),'t2m_oce'), & 59 72 ctrl_out((/ 10, 4, 10, 10, 10 /),'t2m_sic') /) 60 73 61 type(ctrl_out) :: o_wind10m = ctrl_out((/ 1, 1, 1, 10, 10 /),'wind10m')62 type(ctrl_out) :: o_wind10max = ctrl_out((/ 10, 1, 10, 10, 10 /),'wind10max')63 type(ctrl_out) :: o_sicf = ctrl_out((/ 1, 1, 10, 10, 10 /),'sicf')64 type(ctrl_out) :: o_q2m = ctrl_out((/ 1, 1, 1, 1, 1 /),'q2m')65 type(ctrl_out) :: o_u10m = ctrl_out((/ 1, 1, 1, 1, 1 /),'u10m')66 type(ctrl_out) :: o_v10m = ctrl_out((/ 1, 1, 1, 1, 1 /),'v10m')67 type(ctrl_out) :: o_psol = ctrl_out((/ 1, 1, 1, 1, 1 /),'psol')68 type(ctrl_out) :: o_qsurf = ctrl_out((/ 1, 10, 10, 10, 10 /),'qsurf')69 70 type(ctrl_out), dimension(4) :: o_u10m_srf = (/ ctrl_out((/ 10, 4, 10, 10, 10 /),'u10m_ter'), &74 type(ctrl_out),save :: o_wind10m = ctrl_out((/ 1, 1, 1, 10, 10 /),'wind10m') 75 type(ctrl_out),save :: o_wind10max = ctrl_out((/ 10, 1, 10, 10, 10 /),'wind10max') 76 type(ctrl_out),save :: o_sicf = ctrl_out((/ 1, 1, 10, 10, 10 /),'sicf') 77 type(ctrl_out),save :: o_q2m = ctrl_out((/ 1, 1, 1, 1, 1 /),'q2m') 78 type(ctrl_out),save :: o_u10m = ctrl_out((/ 1, 1, 1, 1, 1 /),'u10m') 79 type(ctrl_out),save :: o_v10m = ctrl_out((/ 1, 1, 1, 1, 1 /),'v10m') 80 type(ctrl_out),save :: o_psol = ctrl_out((/ 1, 1, 1, 1, 1 /),'psol') 81 type(ctrl_out),save :: o_qsurf = ctrl_out((/ 1, 10, 10, 10, 10 /),'qsurf') 82 83 type(ctrl_out),save,dimension(4) :: o_u10m_srf = (/ ctrl_out((/ 10, 4, 10, 10, 10 /),'u10m_ter'), & 71 84 ctrl_out((/ 10, 4, 10, 10, 10 /),'u10m_lic'), & 72 85 ctrl_out((/ 10, 4, 10, 10, 10 /),'u10m_oce'), & 73 86 ctrl_out((/ 10, 4, 10, 10, 10 /),'u10m_sic') /) 74 87 75 type(ctrl_out), dimension(4) :: o_v10m_srf = (/ ctrl_out((/ 10, 4, 10, 10, 10 /),'v10m_ter'), &88 type(ctrl_out),save,dimension(4) :: o_v10m_srf = (/ ctrl_out((/ 10, 4, 10, 10, 10 /),'v10m_ter'), & 76 89 ctrl_out((/ 10, 4, 10, 10, 10 /),'v10m_lic'), & 77 90 ctrl_out((/ 10, 4, 10, 10, 10 /),'v10m_oce'), & 78 91 ctrl_out((/ 10, 4, 10, 10, 10 /),'v10m_sic') /) 79 92 80 type(ctrl_out) :: o_qsol = ctrl_out((/ 1, 10, 10, 1, 1 /),'qsol')81 82 type(ctrl_out) :: o_ndayrain = ctrl_out((/ 1, 10, 10, 10, 10 /),'ndayrain')83 type(ctrl_out) :: o_precip = ctrl_out((/ 1, 1, 1, 1, 1 /),'precip')84 type(ctrl_out) :: o_plul = ctrl_out((/ 1, 1, 1, 1, 10 /),'plul')85 86 type(ctrl_out) :: o_pluc = ctrl_out((/ 1, 1, 1, 1, 10 /),'pluc')87 type(ctrl_out) :: o_snow = ctrl_out((/ 1, 1, 10, 1, 10 /),'snow')88 type(ctrl_out) :: o_evap = ctrl_out((/ 1, 1, 10, 1, 10 /),'evap')89 type(ctrl_out) :: o_tops = ctrl_out((/ 1, 1, 10, 10, 10 /),'tops')90 type(ctrl_out) :: o_tops0 = ctrl_out((/ 1, 5, 10, 10, 10 /),'tops0')91 type(ctrl_out) :: o_topl = ctrl_out((/ 1, 1, 10, 1, 10 /),'topl')92 type(ctrl_out) :: o_topl0 = ctrl_out((/ 1, 5, 10, 10, 10 /),'topl0')93 type(ctrl_out) :: o_SWupTOA = ctrl_out((/ 1, 4, 10, 10, 10 /),'SWupTOA')94 type(ctrl_out) :: o_SWupTOAclr = ctrl_out((/ 1, 4, 10, 10, 10 /),'SWupTOAclr')95 type(ctrl_out) :: o_SWdnTOA = ctrl_out((/ 1, 4, 10, 10, 10 /),'SWdnTOA')96 type(ctrl_out) :: o_SWdnTOAclr = ctrl_out((/ 1, 4, 10, 10, 10 /),'SWdnTOAclr')97 type(ctrl_out) :: o_SWup200 = ctrl_out((/ 1, 10, 10, 10, 10 /),'SWup200')98 type(ctrl_out) :: o_SWup200clr = ctrl_out((/ 10, 1, 10, 10, 10 /),'SWup200clr')99 type(ctrl_out) :: o_SWdn200 = ctrl_out((/ 1, 10, 10, 10, 10 /),'SWdn200')100 type(ctrl_out) :: o_SWdn200clr = ctrl_out((/ 10, 1, 10, 10, 10 /),'SWdn200clr')93 type(ctrl_out),save :: o_qsol = ctrl_out((/ 1, 10, 10, 1, 1 /),'qsol') 94 95 type(ctrl_out),save :: o_ndayrain = ctrl_out((/ 1, 10, 10, 10, 10 /),'ndayrain') 96 type(ctrl_out),save :: o_precip = ctrl_out((/ 1, 1, 1, 1, 1 /),'precip') 97 type(ctrl_out),save :: o_plul = ctrl_out((/ 1, 1, 1, 1, 10 /),'plul') 98 99 type(ctrl_out),save :: o_pluc = ctrl_out((/ 1, 1, 1, 1, 10 /),'pluc') 100 type(ctrl_out),save :: o_snow = ctrl_out((/ 1, 1, 10, 1, 10 /),'snow') 101 type(ctrl_out),save :: o_evap = ctrl_out((/ 1, 1, 10, 1, 10 /),'evap') 102 type(ctrl_out),save :: o_tops = ctrl_out((/ 1, 1, 10, 10, 10 /),'tops') 103 type(ctrl_out),save :: o_tops0 = ctrl_out((/ 1, 5, 10, 10, 10 /),'tops0') 104 type(ctrl_out),save :: o_topl = ctrl_out((/ 1, 1, 10, 1, 10 /),'topl') 105 type(ctrl_out),save :: o_topl0 = ctrl_out((/ 1, 5, 10, 10, 10 /),'topl0') 106 type(ctrl_out),save :: o_SWupTOA = ctrl_out((/ 1, 4, 10, 10, 10 /),'SWupTOA') 107 type(ctrl_out),save :: o_SWupTOAclr = ctrl_out((/ 1, 4, 10, 10, 10 /),'SWupTOAclr') 108 type(ctrl_out),save :: o_SWdnTOA = ctrl_out((/ 1, 4, 10, 10, 10 /),'SWdnTOA') 109 type(ctrl_out),save :: o_SWdnTOAclr = ctrl_out((/ 1, 4, 10, 10, 10 /),'SWdnTOAclr') 110 type(ctrl_out),save :: o_SWup200 = ctrl_out((/ 1, 10, 10, 10, 10 /),'SWup200') 111 type(ctrl_out),save :: o_SWup200clr = ctrl_out((/ 10, 1, 10, 10, 10 /),'SWup200clr') 112 type(ctrl_out),save :: o_SWdn200 = ctrl_out((/ 1, 10, 10, 10, 10 /),'SWdn200') 113 type(ctrl_out),save :: o_SWdn200clr = ctrl_out((/ 10, 1, 10, 10, 10 /),'SWdn200clr') 101 114 102 115 ! arajouter 103 ! type(ctrl_out) :: o_LWupTOA = ctrl_out((/ 1, 4, 10, 10, 10 /),'LWupTOA')104 ! type(ctrl_out) :: o_LWupTOAclr = ctrl_out((/ 1, 4, 10, 10, 10 /),'LWupTOAclr')105 ! type(ctrl_out) :: o_LWdnTOA = ctrl_out((/ 1, 4, 10, 10, 10 /),'LWdnTOA')106 ! type(ctrl_out) :: o_LWdnTOAclr = ctrl_out((/ 1, 4, 10, 10, 10 /),'LWdnTOAclr')107 108 type(ctrl_out) :: o_LWup200 = ctrl_out((/ 1, 10, 10, 10, 10 /),'LWup200')109 type(ctrl_out) :: o_LWup200clr = ctrl_out((/ 1, 10, 10, 10, 10 /),'LWup200clr')110 type(ctrl_out) :: o_LWdn200 = ctrl_out((/ 1, 10, 10, 10, 10 /),'LWdn200')111 type(ctrl_out) :: o_LWdn200clr = ctrl_out((/ 1, 10, 10, 10, 10 /),'LWdn200clr')112 type(ctrl_out) :: o_sols = ctrl_out((/ 1, 1, 10, 1, 10 /),'sols')113 type(ctrl_out) :: o_sols0 = ctrl_out((/ 1, 5, 10, 10, 10 /),'sols0')114 type(ctrl_out) :: o_soll = ctrl_out((/ 1, 1, 10, 1, 10 /),'soll')115 type(ctrl_out) :: o_soll0 = ctrl_out((/ 1, 5, 10, 10, 10 /),'soll0')116 type(ctrl_out) :: o_radsol = ctrl_out((/ 1, 1, 10, 10, 10 /),'radsol')117 type(ctrl_out) :: o_SWupSFC = ctrl_out((/ 1, 4, 10, 10, 10 /),'SWupSFC')118 type(ctrl_out) :: o_SWupSFCclr = ctrl_out((/ 1, 4, 10, 10, 10 /),'SWupSFCclr')119 type(ctrl_out) :: o_SWdnSFC = ctrl_out((/ 1, 1, 10, 10, 10 /),'SWdnSFC')120 type(ctrl_out) :: o_SWdnSFCclr = ctrl_out((/ 1, 4, 10, 10, 10 /),'SWdnSFCclr')121 type(ctrl_out) :: o_LWupSFC = ctrl_out((/ 1, 4, 10, 10, 10 /),'LWupSFC')122 type(ctrl_out) :: o_LWupSFCclr = ctrl_out((/ 1, 4, 10, 10, 10 /),'LWupSFCclr')123 type(ctrl_out) :: o_LWdnSFC = ctrl_out((/ 1, 4, 10, 10, 10 /),'LWdnSFC')124 type(ctrl_out) :: o_LWdnSFCclr = ctrl_out((/ 1, 4, 10, 10, 10 /),'LWdnSFCclr')125 type(ctrl_out) :: o_bils = ctrl_out((/ 1, 2, 10, 1, 10 /),'bils')126 type(ctrl_out) :: o_sens = ctrl_out((/ 1, 1, 10, 1, 1 /),'sens')127 type(ctrl_out) :: o_fder = ctrl_out((/ 1, 2, 10, 1, 10 /),'fder')128 type(ctrl_out) :: o_ffonte = ctrl_out((/ 1, 10, 10, 10, 10 /),'ffonte')129 type(ctrl_out) :: o_fqcalving = ctrl_out((/ 1, 10, 10, 10, 10 /),'fqcalving')130 type(ctrl_out) :: o_fqfonte = ctrl_out((/ 1, 10, 10, 10, 10 /),'fqfonte')131 132 type(ctrl_out), dimension(4) :: o_taux_srf = (/ ctrl_out((/ 1, 4, 10, 1, 10 /),'taux_ter'), &116 ! type(ctrl_out),save :: o_LWupTOA = ctrl_out((/ 1, 4, 10, 10, 10 /),'LWupTOA') 117 ! type(ctrl_out),save :: o_LWupTOAclr = ctrl_out((/ 1, 4, 10, 10, 10 /),'LWupTOAclr') 118 ! type(ctrl_out),save :: o_LWdnTOA = ctrl_out((/ 1, 4, 10, 10, 10 /),'LWdnTOA') 119 ! type(ctrl_out),save :: o_LWdnTOAclr = ctrl_out((/ 1, 4, 10, 10, 10 /),'LWdnTOAclr') 120 121 type(ctrl_out),save :: o_LWup200 = ctrl_out((/ 1, 10, 10, 10, 10 /),'LWup200') 122 type(ctrl_out),save :: o_LWup200clr = ctrl_out((/ 1, 10, 10, 10, 10 /),'LWup200clr') 123 type(ctrl_out),save :: o_LWdn200 = ctrl_out((/ 1, 10, 10, 10, 10 /),'LWdn200') 124 type(ctrl_out),save :: o_LWdn200clr = ctrl_out((/ 1, 10, 10, 10, 10 /),'LWdn200clr') 125 type(ctrl_out),save :: o_sols = ctrl_out((/ 1, 1, 10, 1, 10 /),'sols') 126 type(ctrl_out),save :: o_sols0 = ctrl_out((/ 1, 5, 10, 10, 10 /),'sols0') 127 type(ctrl_out),save :: o_soll = ctrl_out((/ 1, 1, 10, 1, 10 /),'soll') 128 type(ctrl_out),save :: o_soll0 = ctrl_out((/ 1, 5, 10, 10, 10 /),'soll0') 129 type(ctrl_out),save :: o_radsol = ctrl_out((/ 1, 1, 10, 10, 10 /),'radsol') 130 type(ctrl_out),save :: o_SWupSFC = ctrl_out((/ 1, 4, 10, 10, 10 /),'SWupSFC') 131 type(ctrl_out),save :: o_SWupSFCclr = ctrl_out((/ 1, 4, 10, 10, 10 /),'SWupSFCclr') 132 type(ctrl_out),save :: o_SWdnSFC = ctrl_out((/ 1, 1, 10, 10, 10 /),'SWdnSFC') 133 type(ctrl_out),save :: o_SWdnSFCclr = ctrl_out((/ 1, 4, 10, 10, 10 /),'SWdnSFCclr') 134 type(ctrl_out),save :: o_LWupSFC = ctrl_out((/ 1, 4, 10, 10, 10 /),'LWupSFC') 135 type(ctrl_out),save :: o_LWupSFCclr = ctrl_out((/ 1, 4, 10, 10, 10 /),'LWupSFCclr') 136 type(ctrl_out),save :: o_LWdnSFC = ctrl_out((/ 1, 4, 10, 10, 10 /),'LWdnSFC') 137 type(ctrl_out),save :: o_LWdnSFCclr = ctrl_out((/ 1, 4, 10, 10, 10 /),'LWdnSFCclr') 138 type(ctrl_out),save :: o_bils = ctrl_out((/ 1, 2, 10, 1, 10 /),'bils') 139 type(ctrl_out),save :: o_sens = ctrl_out((/ 1, 1, 10, 1, 1 /),'sens') 140 type(ctrl_out),save :: o_fder = ctrl_out((/ 1, 2, 10, 1, 10 /),'fder') 141 type(ctrl_out),save :: o_ffonte = ctrl_out((/ 1, 10, 10, 10, 10 /),'ffonte') 142 type(ctrl_out),save :: o_fqcalving = ctrl_out((/ 1, 10, 10, 10, 10 /),'fqcalving') 143 type(ctrl_out),save :: o_fqfonte = ctrl_out((/ 1, 10, 10, 10, 10 /),'fqfonte') 144 145 type(ctrl_out),save,dimension(4) :: o_taux_srf = (/ ctrl_out((/ 1, 4, 10, 1, 10 /),'taux_ter'), & 133 146 ctrl_out((/ 1, 4, 10, 1, 10 /),'taux_lic'), & 134 147 ctrl_out((/ 1, 4, 10, 1, 10 /),'taux_oce'), & 135 148 ctrl_out((/ 1, 4, 10, 1, 10 /),'taux_sic') /) 136 149 137 type(ctrl_out), dimension(4) :: o_tauy_srf = (/ ctrl_out((/ 1, 4, 10, 1, 10 /),'tauy_ter'), &150 type(ctrl_out),save,dimension(4) :: o_tauy_srf = (/ ctrl_out((/ 1, 4, 10, 1, 10 /),'tauy_ter'), & 138 151 ctrl_out((/ 1, 4, 10, 1, 10 /),'tauy_lic'), & 139 152 ctrl_out((/ 1, 4, 10, 1, 10 /),'tauy_oce'), & … … 141 154 142 155 143 type(ctrl_out), dimension(4) :: o_pourc_srf = (/ ctrl_out((/ 1, 4, 10, 1, 10 /),'pourc_ter'), &156 type(ctrl_out),save,dimension(4) :: o_pourc_srf = (/ ctrl_out((/ 1, 4, 10, 1, 10 /),'pourc_ter'), & 144 157 ctrl_out((/ 1, 4, 10, 1, 10 /),'pourc_lic'), & 145 158 ctrl_out((/ 1, 4, 10, 1, 10 /),'pourc_oce'), & 146 159 ctrl_out((/ 1, 4, 10, 1, 10 /),'pourc_sic') /) 147 160 148 type(ctrl_out), dimension(4) :: o_fract_srf = (/ ctrl_out((/ 1, 4, 10, 1, 10 /),'fract_ter'), &161 type(ctrl_out),save,dimension(4) :: o_fract_srf = (/ ctrl_out((/ 1, 4, 10, 1, 10 /),'fract_ter'), & 149 162 ctrl_out((/ 1, 4, 10, 1, 10 /),'fract_lic'), & 150 163 ctrl_out((/ 1, 4, 10, 1, 10 /),'fract_oce'), & 151 164 ctrl_out((/ 1, 4, 10, 1, 10 /),'fract_sic') /) 152 165 153 type(ctrl_out), dimension(4) :: o_tsol_srf = (/ ctrl_out((/ 1, 4, 10, 1, 10 /),'tsol_ter'), &166 type(ctrl_out),save,dimension(4) :: o_tsol_srf = (/ ctrl_out((/ 1, 4, 10, 1, 10 /),'tsol_ter'), & 154 167 ctrl_out((/ 1, 4, 10, 1, 10 /),'tsol_lic'), & 155 168 ctrl_out((/ 1, 4, 10, 1, 10 /),'tsol_oce'), & 156 169 ctrl_out((/ 1, 4, 10, 1, 10 /),'tsol_sic') /) 157 170 158 type(ctrl_out), dimension(4) :: o_sens_srf = (/ ctrl_out((/ 1, 4, 10, 1, 10 /),'sens_ter'), &171 type(ctrl_out),save,dimension(4) :: o_sens_srf = (/ ctrl_out((/ 1, 4, 10, 1, 10 /),'sens_ter'), & 159 172 ctrl_out((/ 1, 4, 10, 1, 10 /),'sens_lic'), & 160 173 ctrl_out((/ 1, 4, 10, 1, 10 /),'sens_oce'), & 161 174 ctrl_out((/ 1, 4, 10, 1, 10 /),'sens_sic') /) 162 175 163 type(ctrl_out), dimension(4) :: o_lat_srf = (/ ctrl_out((/ 1, 4, 10, 1, 10 /),'lat_ter'), &176 type(ctrl_out),save,dimension(4) :: o_lat_srf = (/ ctrl_out((/ 1, 4, 10, 1, 10 /),'lat_ter'), & 164 177 ctrl_out((/ 1, 4, 10, 1, 10 /),'lat_lic'), & 165 178 ctrl_out((/ 1, 4, 10, 1, 10 /),'lat_oce'), & 166 179 ctrl_out((/ 1, 4, 10, 1, 10 /),'lat_sic') /) 167 180 168 type(ctrl_out), dimension(4) :: o_flw_srf = (/ ctrl_out((/ 1, 10, 10, 10, 10 /),'flw_ter'), &181 type(ctrl_out),save,dimension(4) :: o_flw_srf = (/ ctrl_out((/ 1, 10, 10, 10, 10 /),'flw_ter'), & 169 182 ctrl_out((/ 1, 10, 10, 10, 10 /),'flw_lic'), & 170 183 ctrl_out((/ 1, 10, 10, 10, 10 /),'flw_oce'), & 171 184 ctrl_out((/ 1, 10, 10, 10, 10 /),'flw_sic') /) 172 185 173 type(ctrl_out), dimension(4) :: o_fsw_srf = (/ ctrl_out((/ 1, 10, 10, 10, 10 /),'fsw_ter'), &186 type(ctrl_out),save,dimension(4) :: o_fsw_srf = (/ ctrl_out((/ 1, 10, 10, 10, 10 /),'fsw_ter'), & 174 187 ctrl_out((/ 1, 10, 10, 10, 10 /),'fsw_lic'), & 175 188 ctrl_out((/ 1, 10, 10, 10, 10 /),'fsw_oce'), & 176 189 ctrl_out((/ 1, 10, 10, 10, 10 /),'fsw_sic') /) 177 190 178 type(ctrl_out), dimension(4) :: o_wbils_srf = (/ ctrl_out((/ 1, 10, 10, 10, 10 /),'wbils_ter'), &191 type(ctrl_out),save,dimension(4) :: o_wbils_srf = (/ ctrl_out((/ 1, 10, 10, 10, 10 /),'wbils_ter'), & 179 192 ctrl_out((/ 1, 10, 10, 10, 10 /),'wbils_lic'), & 180 193 ctrl_out((/ 1, 10, 10, 10, 10 /),'wbils_oce'), & 181 194 ctrl_out((/ 1, 10, 10, 10, 10 /),'wbils_sic') /) 182 195 183 type(ctrl_out), dimension(4) :: o_wbilo_srf = (/ ctrl_out((/ 1, 10, 10, 10, 10 /),'wbilo_ter'), &196 type(ctrl_out),save,dimension(4) :: o_wbilo_srf = (/ ctrl_out((/ 1, 10, 10, 10, 10 /),'wbilo_ter'), & 184 197 ctrl_out((/ 1, 10, 10, 10, 10 /),'wbilo_lic'), & 185 198 ctrl_out((/ 1, 10, 10, 10, 10 /),'wbilo_oce'), & … … 187 200 188 201 189 type(ctrl_out) :: o_cdrm = ctrl_out((/ 1, 10, 10, 1, 10 /),'cdrm')190 type(ctrl_out) :: o_cdrh = ctrl_out((/ 1, 10, 10, 1, 10 /),'cdrh')191 type(ctrl_out) :: o_cldl = ctrl_out((/ 1, 1, 10, 10, 10 /),'cldl')192 type(ctrl_out) :: o_cldm = ctrl_out((/ 1, 1, 10, 10, 10 /),'cldm')193 type(ctrl_out) :: o_cldh = ctrl_out((/ 1, 1, 10, 10, 10 /),'cldh')194 type(ctrl_out) :: o_cldt = ctrl_out((/ 1, 1, 2, 10, 10 /),'cldt')195 type(ctrl_out) :: o_cldq = ctrl_out((/ 1, 1, 10, 10, 10 /),'cldq')196 type(ctrl_out) :: o_lwp = ctrl_out((/ 1, 5, 10, 10, 10 /),'lwp')197 type(ctrl_out) :: o_iwp = ctrl_out((/ 1, 5, 10, 10, 10 /),'iwp')198 type(ctrl_out) :: o_ue = ctrl_out((/ 1, 10, 10, 10, 10 /),'ue')199 type(ctrl_out) :: o_ve = ctrl_out((/ 1, 10, 10, 10, 10 /),'ve')200 type(ctrl_out) :: o_uq = ctrl_out((/ 1, 10, 10, 10, 10 /),'uq')201 type(ctrl_out) :: o_vq = ctrl_out((/ 1, 10, 10, 10, 10 /),'vq')202 type(ctrl_out),save :: o_cdrm = ctrl_out((/ 1, 10, 10, 1, 10 /),'cdrm') 203 type(ctrl_out),save :: o_cdrh = ctrl_out((/ 1, 10, 10, 1, 10 /),'cdrh') 204 type(ctrl_out),save :: o_cldl = ctrl_out((/ 1, 1, 10, 10, 10 /),'cldl') 205 type(ctrl_out),save :: o_cldm = ctrl_out((/ 1, 1, 10, 10, 10 /),'cldm') 206 type(ctrl_out),save :: o_cldh = ctrl_out((/ 1, 1, 10, 10, 10 /),'cldh') 207 type(ctrl_out),save :: o_cldt = ctrl_out((/ 1, 1, 2, 10, 10 /),'cldt') 208 type(ctrl_out),save :: o_cldq = ctrl_out((/ 1, 1, 10, 10, 10 /),'cldq') 209 type(ctrl_out),save :: o_lwp = ctrl_out((/ 1, 5, 10, 10, 10 /),'lwp') 210 type(ctrl_out),save :: o_iwp = ctrl_out((/ 1, 5, 10, 10, 10 /),'iwp') 211 type(ctrl_out),save :: o_ue = ctrl_out((/ 1, 10, 10, 10, 10 /),'ue') 212 type(ctrl_out),save :: o_ve = ctrl_out((/ 1, 10, 10, 10, 10 /),'ve') 213 type(ctrl_out),save :: o_uq = ctrl_out((/ 1, 10, 10, 10, 10 /),'uq') 214 type(ctrl_out),save :: o_vq = ctrl_out((/ 1, 10, 10, 10, 10 /),'vq') 202 215 203 type(ctrl_out) :: o_cape = ctrl_out((/ 1, 10, 10, 10, 10 /),'cape')204 type(ctrl_out) :: o_pbase = ctrl_out((/ 1, 10, 10, 10, 10 /),'pbase')205 type(ctrl_out) :: o_ptop = ctrl_out((/ 1, 4, 10, 10, 10 /),'ptop')206 type(ctrl_out) :: o_fbase = ctrl_out((/ 1, 10, 10, 10, 10 /),'fbase')207 type(ctrl_out) :: o_prw = ctrl_out((/ 1, 1, 10, 10, 10 /),'prw')208 209 type(ctrl_out) :: o_s_pblh = ctrl_out((/ 1, 10, 10, 1, 1 /),'s_pblh')210 type(ctrl_out) :: o_s_pblt = ctrl_out((/ 1, 10, 10, 1, 1 /),'s_pblt')211 type(ctrl_out) :: o_s_lcl = ctrl_out((/ 1, 10, 10, 1, 10 /),'s_lcl')212 type(ctrl_out) :: o_s_capCL = ctrl_out((/ 1, 10, 10, 1, 10 /),'s_capCL')213 type(ctrl_out) :: o_s_oliqCL = ctrl_out((/ 1, 10, 10, 1, 10 /),'s_oliqCL')214 type(ctrl_out) :: o_s_cteiCL = ctrl_out((/ 1, 10, 10, 1, 1 /),'s_cteiCL')215 type(ctrl_out) :: o_s_therm = ctrl_out((/ 1, 10, 10, 1, 1 /),'s_therm')216 type(ctrl_out) :: o_s_trmb1 = ctrl_out((/ 1, 10, 10, 1, 10 /),'s_trmb1')217 type(ctrl_out) :: o_s_trmb2 = ctrl_out((/ 1, 10, 10, 1, 10 /),'s_trmb2')218 type(ctrl_out) :: o_s_trmb3 = ctrl_out((/ 1, 10, 10, 1, 10 /),'s_trmb3')219 220 type(ctrl_out) :: o_slab_bils = ctrl_out((/ 1, 1, 10, 10, 10 /),'slab_bils_oce')221 222 type(ctrl_out) :: o_ale_bl = ctrl_out((/ 1, 1, 1, 1, 10 /),'ale_bl')223 type(ctrl_out) :: o_alp_bl = ctrl_out((/ 1, 1, 1, 1, 10 /),'alp_bl')224 type(ctrl_out) :: o_ale_wk = ctrl_out((/ 1, 1, 1, 1, 10 /),'ale_wk')225 type(ctrl_out) :: o_alp_wk = ctrl_out((/ 1, 1, 1, 1, 10 /),'alp_wk')226 227 type(ctrl_out) :: o_ale = ctrl_out((/ 1, 1, 1, 1, 10 /),'ale')228 type(ctrl_out) :: o_alp = ctrl_out((/ 1, 1, 1, 1, 10 /),'alp')229 type(ctrl_out) :: o_cin = ctrl_out((/ 1, 1, 1, 1, 10 /),'cin')230 type(ctrl_out) :: o_wape = ctrl_out((/ 1, 1, 1, 1, 10 /),'wape')216 type(ctrl_out),save :: o_cape = ctrl_out((/ 1, 10, 10, 10, 10 /),'cape') 217 type(ctrl_out),save :: o_pbase = ctrl_out((/ 1, 10, 10, 10, 10 /),'pbase') 218 type(ctrl_out),save :: o_ptop = ctrl_out((/ 1, 4, 10, 10, 10 /),'ptop') 219 type(ctrl_out),save :: o_fbase = ctrl_out((/ 1, 10, 10, 10, 10 /),'fbase') 220 type(ctrl_out),save :: o_prw = ctrl_out((/ 1, 1, 10, 10, 10 /),'prw') 221 222 type(ctrl_out),save :: o_s_pblh = ctrl_out((/ 1, 10, 10, 1, 1 /),'s_pblh') 223 type(ctrl_out),save :: o_s_pblt = ctrl_out((/ 1, 10, 10, 1, 1 /),'s_pblt') 224 type(ctrl_out),save :: o_s_lcl = ctrl_out((/ 1, 10, 10, 1, 10 /),'s_lcl') 225 type(ctrl_out),save :: o_s_capCL = ctrl_out((/ 1, 10, 10, 1, 10 /),'s_capCL') 226 type(ctrl_out),save :: o_s_oliqCL = ctrl_out((/ 1, 10, 10, 1, 10 /),'s_oliqCL') 227 type(ctrl_out),save :: o_s_cteiCL = ctrl_out((/ 1, 10, 10, 1, 1 /),'s_cteiCL') 228 type(ctrl_out),save :: o_s_therm = ctrl_out((/ 1, 10, 10, 1, 1 /),'s_therm') 229 type(ctrl_out),save :: o_s_trmb1 = ctrl_out((/ 1, 10, 10, 1, 10 /),'s_trmb1') 230 type(ctrl_out),save :: o_s_trmb2 = ctrl_out((/ 1, 10, 10, 1, 10 /),'s_trmb2') 231 type(ctrl_out),save :: o_s_trmb3 = ctrl_out((/ 1, 10, 10, 1, 10 /),'s_trmb3') 232 233 type(ctrl_out),save :: o_slab_bils = ctrl_out((/ 1, 1, 10, 10, 10 /),'slab_bils_oce') 234 235 type(ctrl_out),save :: o_ale_bl = ctrl_out((/ 1, 1, 1, 1, 10 /),'ale_bl') 236 type(ctrl_out),save :: o_alp_bl = ctrl_out((/ 1, 1, 1, 1, 10 /),'alp_bl') 237 type(ctrl_out),save :: o_ale_wk = ctrl_out((/ 1, 1, 1, 1, 10 /),'ale_wk') 238 type(ctrl_out),save :: o_alp_wk = ctrl_out((/ 1, 1, 1, 1, 10 /),'alp_wk') 239 240 type(ctrl_out),save :: o_ale = ctrl_out((/ 1, 1, 1, 1, 10 /),'ale') 241 type(ctrl_out),save :: o_alp = ctrl_out((/ 1, 1, 1, 1, 10 /),'alp') 242 type(ctrl_out),save :: o_cin = ctrl_out((/ 1, 1, 1, 1, 10 /),'cin') 243 type(ctrl_out),save :: o_wape = ctrl_out((/ 1, 1, 1, 1, 10 /),'wape') 231 244 232 245 233 246 ! Champs interpolles sur des niveaux de pression ??? a faire correctement 234 ! if=1 on ecrit u v w phi sur 850 700 500 200 au niv 1235 ! if=2 on ecrit w et ph 500 seulement au niv 1236 ! et u v sur 850 700 500 200237 ! if=3 on ecrit ph a 500 seulement au niv 1238 ! on ecrit u v t q a 850 700 500 200 au niv 3239 ! on ecrit ph a 500 au niv 3240 241 247 242 type(ctrl_out), dimension(4) :: o_uSTDlevs = (/ ctrl_out((/ 1, 1, 3, 10, 10 /),'u850'), &248 type(ctrl_out),save,dimension(6) :: o_uSTDlevs = (/ ctrl_out((/ 1, 1, 3, 10, 10 /),'u850'), & 243 249 ctrl_out((/ 1, 1, 3, 10, 10 /),'u700'), & 244 250 ctrl_out((/ 1, 1, 3, 10, 10 /),'u500'), & 245 ctrl_out((/ 1, 1, 3, 10, 10 /),'u200') /) 246 247 type(ctrl_out),dimension(4) :: o_vSTDlevs = (/ ctrl_out((/ 1, 1, 3, 10, 10 /),'v850'), & 251 ctrl_out((/ 1, 1, 3, 10, 10 /),'u200'), & 252 ctrl_out((/ 1, 1, 3, 10, 10 /),'u50'), & 253 ctrl_out((/ 1, 1, 3, 10, 10 /),'u10') /) 254 255 256 type(ctrl_out),save,dimension(6) :: o_vSTDlevs = (/ ctrl_out((/ 1, 1, 3, 10, 10 /),'v850'), & 248 257 ctrl_out((/ 1, 1, 3, 10, 10 /),'v700'), & 249 258 ctrl_out((/ 1, 1, 3, 10, 10 /),'v500'), & 250 ctrl_out((/ 1, 1, 3, 10, 10 /),'v200') /) 251 252 type(ctrl_out),dimension(4) :: o_wSTDlevs = (/ ctrl_out((/ 1, 1, 3, 10, 10 /),'w850'), & 259 ctrl_out((/ 1, 1, 3, 10, 10 /),'v200'), & 260 ctrl_out((/ 1, 1, 3, 10, 10 /),'v50'), & 261 ctrl_out((/ 1, 1, 3, 10, 10 /),'v10') /) 262 263 type(ctrl_out),save,dimension(6) :: o_wSTDlevs = (/ ctrl_out((/ 1, 1, 3, 10, 10 /),'w850'), & 253 264 ctrl_out((/ 1, 1, 3, 10, 10 /),'w700'), & 254 265 ctrl_out((/ 1, 1, 3, 10, 10 /),'w500'), & 255 ctrl_out((/ 1, 1, 3, 10, 10 /),'w200') /) 256 257 type(ctrl_out),dimension(4) :: o_tSTDlevs = (/ ctrl_out((/ 1, 1, 3, 10, 10 /),'t850'), & 266 ctrl_out((/ 1, 1, 3, 10, 10 /),'w200'), & 267 ctrl_out((/ 1, 1, 3, 10, 10 /),'w50'), & 268 ctrl_out((/ 1, 1, 3, 10, 10 /),'w10') /) 269 270 type(ctrl_out),save,dimension(6) :: o_tSTDlevs = (/ ctrl_out((/ 1, 1, 3, 10, 10 /),'t850'), & 258 271 ctrl_out((/ 1, 1, 3, 10, 10 /),'t700'), & 259 272 ctrl_out((/ 1, 1, 3, 10, 10 /),'t500'), & 260 ctrl_out((/ 1, 1, 3, 10, 10 /),'t200') /) 261 262 type(ctrl_out),dimension(4) :: o_qSTDlevs = (/ ctrl_out((/ 1, 1, 3, 10, 10 /),'q850'), & 273 ctrl_out((/ 1, 1, 3, 10, 10 /),'t200'), & 274 ctrl_out((/ 1, 1, 3, 10, 10 /),'t50'), & 275 ctrl_out((/ 1, 1, 3, 10, 10 /),'t10') /) 276 277 type(ctrl_out),save,dimension(6) :: o_qSTDlevs = (/ ctrl_out((/ 1, 1, 3, 10, 10 /),'q850'), & 263 278 ctrl_out((/ 1, 1, 3, 10, 10 /),'q700'), & 264 279 ctrl_out((/ 1, 1, 3, 10, 10 /),'q500'), & 265 ctrl_out((/ 1, 1, 3, 10, 10 /),'q200') /) 266 267 type(ctrl_out),dimension(4) :: o_phiSTDlevs = (/ ctrl_out((/ 1, 1, 3, 10, 10 /),'phi850'), & 280 ctrl_out((/ 1, 1, 3, 10, 10 /),'q200'), & 281 ctrl_out((/ 1, 1, 3, 10, 10 /),'q50'), & 282 ctrl_out((/ 1, 1, 3, 10, 10 /),'q10') /) 283 284 type(ctrl_out),save,dimension(6) :: o_phiSTDlevs = (/ ctrl_out((/ 1, 1, 3, 10, 10 /),'phi850'), & 268 285 ctrl_out((/ 1, 1, 3, 10, 10 /),'phi700'), & 269 286 ctrl_out((/ 1, 1, 3, 10, 10 /),'phi500'), & 270 ctrl_out((/ 1, 1, 3, 10, 10 /),'phi200') /) 271 272 273 type(ctrl_out) :: o_t_oce_sic = ctrl_out((/ 1, 10, 10, 10, 10 /),'t_oce_sic') 274 275 type(ctrl_out) :: o_weakinv = ctrl_out((/ 10, 1, 10, 10, 10 /),'weakinv') 276 type(ctrl_out) :: o_dthmin = ctrl_out((/ 10, 1, 10, 10, 10 /),'dthmin') 277 type(ctrl_out),dimension(4) :: o_u10_srf = (/ ctrl_out((/ 10, 4, 10, 10, 10 /),'u10_ter'), & 287 ctrl_out((/ 1, 1, 3, 10, 10 /),'phi200'), & 288 ctrl_out((/ 1, 1, 3, 10, 10 /),'phi50'), & 289 ctrl_out((/ 1, 1, 3, 10, 10 /),'phi10') /) 290 291 292 type(ctrl_out),save :: o_t_oce_sic = ctrl_out((/ 1, 10, 10, 10, 10 /),'t_oce_sic') 293 294 type(ctrl_out),save :: o_weakinv = ctrl_out((/ 10, 1, 10, 10, 10 /),'weakinv') 295 type(ctrl_out),save :: o_dthmin = ctrl_out((/ 10, 1, 10, 10, 10 /),'dthmin') 296 type(ctrl_out),save,dimension(4) :: o_u10_srf = (/ ctrl_out((/ 10, 4, 10, 10, 10 /),'u10_ter'), & 278 297 ctrl_out((/ 10, 4, 10, 10, 10 /),'u10_lic'), & 279 298 ctrl_out((/ 10, 4, 10, 10, 10 /),'u10_oce'), & 280 299 ctrl_out((/ 10, 4, 10, 10, 10 /),'u10_sic') /) 281 300 282 type(ctrl_out), dimension(4) :: o_v10_srf = (/ ctrl_out((/ 10, 4, 10, 10, 10 /),'v10_ter'), &301 type(ctrl_out),save,dimension(4) :: o_v10_srf = (/ ctrl_out((/ 10, 4, 10, 10, 10 /),'v10_ter'), & 283 302 ctrl_out((/ 10, 4, 10, 10, 10 /),'v10_lic'), & 284 303 ctrl_out((/ 10, 4, 10, 10, 10 /),'v10_oce'), & 285 304 ctrl_out((/ 10, 4, 10, 10, 10 /),'v10_sic') /) 286 305 287 type(ctrl_out) :: o_cldtau = ctrl_out((/ 10, 5, 10, 10, 10 /),'cldtau')288 type(ctrl_out) :: o_cldemi = ctrl_out((/ 10, 5, 10, 10, 10 /),'cldemi')289 type(ctrl_out) :: o_rh2m = ctrl_out((/ 10, 5, 10, 10, 10 /),'rh2m')290 type(ctrl_out) :: o_qsat2m = ctrl_out((/ 10, 5, 10, 10, 10 /),'qsat2m')291 type(ctrl_out) :: o_tpot = ctrl_out((/ 10, 5, 10, 10, 10 /),'tpot')292 type(ctrl_out) :: o_tpote = ctrl_out((/ 10, 5, 10, 10, 10 /),'tpote')293 type(ctrl_out) :: o_tke = ctrl_out((/ 4, 10, 10, 10, 10 /),'tke ')294 type(ctrl_out) :: o_tke_max = ctrl_out((/ 4, 10, 10, 10, 10 /),'tke_max')295 296 type(ctrl_out), dimension(4) :: o_tke_srf = (/ ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_ter'), &306 type(ctrl_out),save :: o_cldtau = ctrl_out((/ 10, 5, 10, 10, 10 /),'cldtau') 307 type(ctrl_out),save :: o_cldemi = ctrl_out((/ 10, 5, 10, 10, 10 /),'cldemi') 308 type(ctrl_out),save :: o_rh2m = ctrl_out((/ 10, 5, 10, 10, 10 /),'rh2m') 309 type(ctrl_out),save :: o_qsat2m = ctrl_out((/ 10, 5, 10, 10, 10 /),'qsat2m') 310 type(ctrl_out),save :: o_tpot = ctrl_out((/ 10, 5, 10, 10, 10 /),'tpot') 311 type(ctrl_out),save :: o_tpote = ctrl_out((/ 10, 5, 10, 10, 10 /),'tpote') 312 type(ctrl_out),save :: o_tke = ctrl_out((/ 4, 10, 10, 10, 10 /),'tke ') 313 type(ctrl_out),save :: o_tke_max = ctrl_out((/ 4, 10, 10, 10, 10 /),'tke_max') 314 315 type(ctrl_out),save,dimension(4) :: o_tke_srf = (/ ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_ter'), & 297 316 ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_lic'), & 298 317 ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_oce'), & 299 318 ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_sic') /) 300 319 301 type(ctrl_out), dimension(4) :: o_tke_max_srf = (/ ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_max_ter'), &320 type(ctrl_out),save,dimension(4) :: o_tke_max_srf = (/ ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_max_ter'), & 302 321 ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_max_lic'), & 303 322 ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_max_oce'), & 304 323 ctrl_out((/ 10, 4, 10, 10, 10 /),'tke_max_sic') /) 305 324 306 type(ctrl_out) :: o_kz = ctrl_out((/ 4, 10, 10, 10, 10 /),'kz') 307 type(ctrl_out) :: o_kz_max = ctrl_out((/ 4, 10, 10, 10, 10 /),'kz_max') 308 type(ctrl_out) :: o_SWnetOR = ctrl_out((/ 10, 10, 2, 10, 10 /),'SWnetOR') 309 type(ctrl_out) :: o_SWdownOR = ctrl_out((/ 10, 10, 2, 10, 10 /),'SWdownOR') 310 type(ctrl_out) :: o_LWdownOR = ctrl_out((/ 10, 10, 2, 10, 10 /),'LWdownOR') 311 312 type(ctrl_out) :: o_snowl = ctrl_out((/ 10, 1, 10, 10, 10 /),'snowl') 313 type(ctrl_out) :: o_cape_max = ctrl_out((/ 10, 1, 10, 10, 10 /),'cape_max') 314 type(ctrl_out) :: o_solldown = ctrl_out((/ 10, 1, 10, 1, 10 /),'solldown') 315 316 type(ctrl_out) :: o_dtsvdfo = ctrl_out((/ 10, 10, 10, 1, 10 /),'dtsvdfo') 317 type(ctrl_out) :: o_dtsvdft = ctrl_out((/ 10, 10, 10, 1, 10 /),'dtsvdft') 318 type(ctrl_out) :: o_dtsvdfg = ctrl_out((/ 10, 10, 10, 1, 10 /),'dtsvdfg') 319 type(ctrl_out) :: o_dtsvdfi = ctrl_out((/ 10, 10, 10, 1, 10 /),'dtsvdfi') 320 type(ctrl_out) :: o_rugs = ctrl_out((/ 10, 10, 10, 1, 1 /),'rugs') 321 322 type(ctrl_out) :: o_topswad = ctrl_out((/ 4, 10, 10, 10, 10 /),'topswad') 323 type(ctrl_out) :: o_topswai = ctrl_out((/ 4, 10, 10, 10, 10 /),'topswai') 324 type(ctrl_out) :: o_solswad = ctrl_out((/ 4, 10, 10, 10, 10 /),'solswad') 325 type(ctrl_out) :: o_solswai = ctrl_out((/ 4, 10, 10, 10, 10 /),'solswai') 325 type(ctrl_out),save :: o_kz = ctrl_out((/ 4, 10, 10, 10, 10 /),'kz') 326 type(ctrl_out),save :: o_kz_max = ctrl_out((/ 4, 10, 10, 10, 10 /),'kz_max') 327 type(ctrl_out),save :: o_SWnetOR = ctrl_out((/ 10, 10, 2, 10, 10 /),'SWnetOR') 328 type(ctrl_out),save :: o_SWdownOR = ctrl_out((/ 10, 10, 2, 10, 10 /),'SWdownOR') 329 type(ctrl_out),save :: o_LWdownOR = ctrl_out((/ 10, 10, 2, 10, 10 /),'LWdownOR') 330 331 type(ctrl_out),save :: o_snowl = ctrl_out((/ 10, 1, 10, 10, 10 /),'snowl') 332 type(ctrl_out),save :: o_cape_max = ctrl_out((/ 10, 1, 10, 10, 10 /),'cape_max') 333 type(ctrl_out),save :: o_solldown = ctrl_out((/ 10, 1, 10, 1, 10 /),'solldown') 334 335 type(ctrl_out),save :: o_dtsvdfo = ctrl_out((/ 10, 10, 10, 1, 10 /),'dtsvdfo') 336 type(ctrl_out),save :: o_dtsvdft = ctrl_out((/ 10, 10, 10, 1, 10 /),'dtsvdft') 337 type(ctrl_out),save :: o_dtsvdfg = ctrl_out((/ 10, 10, 10, 1, 10 /),'dtsvdfg') 338 type(ctrl_out),save :: o_dtsvdfi = ctrl_out((/ 10, 10, 10, 1, 10 /),'dtsvdfi') 339 type(ctrl_out),save :: o_rugs = ctrl_out((/ 10, 10, 10, 1, 1 /),'rugs') 340 341 type(ctrl_out),save :: o_topswad = ctrl_out((/ 4, 10, 10, 10, 10 /),'topswad') 342 type(ctrl_out),save :: o_topswai = ctrl_out((/ 4, 10, 10, 10, 10 /),'topswai') 343 type(ctrl_out),save :: o_solswad = ctrl_out((/ 4, 10, 10, 10, 10 /),'solswad') 344 type(ctrl_out),save :: o_solswai = ctrl_out((/ 4, 10, 10, 10, 10 /),'solswai') 345 346 type(ctrl_out),save,dimension(10) :: o_tausumaero = (/ ctrl_out((/ 4, 10, 10, 10, 10 /),'OD550_ASBCM'), & 347 ctrl_out((/ 4, 10, 10, 10, 10 /),'OD550_ASPOMM'), & 348 ctrl_out((/ 4, 10, 10, 10, 10 /),'OD550_ASSO4M'), & 349 ctrl_out((/ 4, 10, 10, 10, 10 /),'OD550_CSSO4M'), & 350 ctrl_out((/ 4, 10, 10, 10, 10 /),'OD550_SSSSM'), & 351 ctrl_out((/ 4, 10, 10, 10, 10 /),'OD550_ASSSM'), & 352 ctrl_out((/ 4, 10, 10, 10, 10 /),'OD550_CSSSM'), & 353 ctrl_out((/ 4, 10, 10, 10, 10 /),'OD550_CIDUSTM'), & 354 ctrl_out((/ 4, 10, 10, 10, 10 /),'OD550_AIBCM'), & 355 ctrl_out((/ 4, 10, 10, 10, 10 /),'OD550_AIPOMM') /) 356 357 type(ctrl_out),save :: o_swtoaas_nat = ctrl_out((/ 4, 10, 10, 10, 10 /),'swtoaas_nat') 358 type(ctrl_out),save :: o_swsrfas_nat = ctrl_out((/ 4, 10, 10, 10, 10 /),'swsrfas_nat') 359 type(ctrl_out),save :: o_swtoacs_nat = ctrl_out((/ 4, 10, 10, 10, 10 /),'swtoacs_nat') 360 type(ctrl_out),save :: o_swsrfcs_nat = ctrl_out((/ 4, 10, 10, 10, 10 /),'swsrfcs_nat') 361 362 type(ctrl_out),save :: o_swtoaas_ant = ctrl_out((/ 4, 10, 10, 10, 10 /),'swtoaas_ant') 363 type(ctrl_out),save :: o_swsrfas_ant = ctrl_out((/ 4, 10, 10, 10, 10 /),'swsrfas_ant') 364 type(ctrl_out),save :: o_swtoacs_ant = ctrl_out((/ 4, 10, 10, 10, 10 /),'swtoacs_ant') 365 type(ctrl_out),save :: o_swsrfcs_ant = ctrl_out((/ 4, 10, 10, 10, 10 /),'swsrfcs_ant') 366 367 type(ctrl_out),save :: o_swtoacf_nat = ctrl_out((/ 4, 10, 10, 10, 10 /),'swtoacf_nat') 368 type(ctrl_out),save :: o_swsrfcf_nat = ctrl_out((/ 4, 10, 10, 10, 10 /),'swsrfcf_nat') 369 type(ctrl_out),save :: o_swtoacf_ant = ctrl_out((/ 4, 10, 10, 10, 10 /),'swtoacf_ant') 370 type(ctrl_out),save :: o_swsrfcf_ant = ctrl_out((/ 4, 10, 10, 10, 10 /),'swsrfcf_ant') 371 type(ctrl_out),save :: o_swtoacf_zero = ctrl_out((/ 4, 10, 10, 10, 10 /),'swtoacf_zero') 372 type(ctrl_out),save :: o_swsrfcf_zero = ctrl_out((/ 4, 10, 10, 10, 10 /),'swsrfcf_zero') 373 374 326 375 !!!!!!!!!!!!!!!!!!!!!! 3D !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 327 type(ctrl_out) :: o_lwcon = ctrl_out((/ 2, 5, 10, 10, 1 /),'lwcon') 328 type(ctrl_out) :: o_iwcon = ctrl_out((/ 2, 5, 10, 10, 10 /),'iwcon') 329 type(ctrl_out) :: o_temp = ctrl_out((/ 2, 3, 4, 1, 1 /),'temp') 330 type(ctrl_out) :: o_theta = ctrl_out((/ 2, 3, 4, 1, 1 /),'theta') 331 type(ctrl_out) :: o_ovap = ctrl_out((/ 2, 3, 4, 1, 1 /),'ovap') 332 type(ctrl_out) :: o_ovapinit = ctrl_out((/ 2, 3, 4, 1, 1 /),'ovapinit') 333 type(ctrl_out) :: o_wvapp = ctrl_out((/ 2, 10, 10, 10, 10 /),'wvapp') 334 type(ctrl_out) :: o_geop = ctrl_out((/ 2, 3, 10, 1, 1 /),'geop') 335 type(ctrl_out) :: o_vitu = ctrl_out((/ 2, 3, 4, 1, 1 /),'vitu') 336 type(ctrl_out) :: o_vitv = ctrl_out((/ 2, 3, 4, 1, 1 /),'vitv') 337 type(ctrl_out) :: o_vitw = ctrl_out((/ 2, 3, 10, 10, 1 /),'vitw') 338 type(ctrl_out) :: o_pres = ctrl_out((/ 2, 3, 10, 1, 1 /),'pres') 339 type(ctrl_out) :: o_rneb = ctrl_out((/ 2, 5, 10, 10, 1 /),'rneb') 340 type(ctrl_out) :: o_rnebcon = ctrl_out((/ 2, 5, 10, 10, 1 /),'rnebcon') 341 type(ctrl_out) :: o_rhum = ctrl_out((/ 2, 10, 10, 10, 10 /),'rhum') 342 type(ctrl_out) :: o_ozone = ctrl_out((/ 2, 10, 10, 10, 10 /),'ozone') 343 type(ctrl_out) :: o_upwd = ctrl_out((/ 2, 10, 10, 10, 10 /),'upwd') 344 type(ctrl_out) :: o_dtphy = ctrl_out((/ 2, 10, 10, 10, 1 /),'dtphy') 345 type(ctrl_out) :: o_dqphy = ctrl_out((/ 2, 10, 10, 10, 1 /),'dqphy') 346 type(ctrl_out) :: o_pr_con_l = ctrl_out((/ 2, 10, 10, 10, 10 /),'pr_con_l') 347 type(ctrl_out) :: o_pr_con_i = ctrl_out((/ 2, 10, 10, 10, 10 /),'pr_con_i') 348 type(ctrl_out) :: o_pr_lsc_l = ctrl_out((/ 2, 10, 10, 10, 10 /),'pr_lsc_l') 349 type(ctrl_out) :: o_pr_lsc_i = ctrl_out((/ 2, 10, 10, 10, 10 /),'pr_lsc_i') 376 type(ctrl_out),save :: o_lwcon = ctrl_out((/ 2, 5, 10, 10, 1 /),'lwcon') 377 type(ctrl_out),save :: o_iwcon = ctrl_out((/ 2, 5, 10, 10, 10 /),'iwcon') 378 type(ctrl_out),save :: o_temp = ctrl_out((/ 2, 3, 4, 1, 1 /),'temp') 379 type(ctrl_out),save :: o_theta = ctrl_out((/ 2, 3, 4, 1, 1 /),'theta') 380 type(ctrl_out),save :: o_ovap = ctrl_out((/ 2, 3, 4, 1, 1 /),'ovap') 381 type(ctrl_out),save :: o_ovapinit = ctrl_out((/ 2, 3, 4, 1, 1 /),'ovapinit') 382 type(ctrl_out),save :: o_wvapp = ctrl_out((/ 2, 10, 10, 10, 10 /),'wvapp') 383 type(ctrl_out),save :: o_geop = ctrl_out((/ 2, 3, 10, 1, 1 /),'geop') 384 type(ctrl_out),save :: o_vitu = ctrl_out((/ 2, 3, 4, 1, 1 /),'vitu') 385 type(ctrl_out),save :: o_vitv = ctrl_out((/ 2, 3, 4, 1, 1 /),'vitv') 386 type(ctrl_out),save :: o_vitw = ctrl_out((/ 2, 3, 10, 10, 1 /),'vitw') 387 type(ctrl_out),save :: o_pres = ctrl_out((/ 2, 3, 10, 1, 1 /),'pres') 388 type(ctrl_out),save :: o_rneb = ctrl_out((/ 2, 5, 10, 10, 1 /),'rneb') 389 type(ctrl_out),save :: o_rnebcon = ctrl_out((/ 2, 5, 10, 10, 1 /),'rnebcon') 390 type(ctrl_out),save :: o_rhum = ctrl_out((/ 2, 10, 10, 10, 10 /),'rhum') 391 type(ctrl_out),save :: o_ozone = ctrl_out((/ 2, 10, 10, 10, 10 /),'ozone') 392 type(ctrl_out),save :: o_ozone_light = ctrl_out((/ 2, 10, 10, 10, 10 /),'ozone_daylight') 393 type(ctrl_out),save :: o_upwd = ctrl_out((/ 2, 10, 10, 10, 10 /),'upwd') 394 type(ctrl_out),save :: o_dtphy = ctrl_out((/ 2, 10, 10, 10, 1 /),'dtphy') 395 type(ctrl_out),save :: o_dqphy = ctrl_out((/ 2, 10, 10, 10, 1 /),'dqphy') 396 type(ctrl_out),save :: o_pr_con_l = ctrl_out((/ 2, 10, 10, 10, 10 /),'pr_con_l') 397 type(ctrl_out),save :: o_pr_con_i = ctrl_out((/ 2, 10, 10, 10, 10 /),'pr_con_i') 398 type(ctrl_out),save :: o_pr_lsc_l = ctrl_out((/ 2, 10, 10, 10, 10 /),'pr_lsc_l') 399 type(ctrl_out),save :: o_pr_lsc_i = ctrl_out((/ 2, 10, 10, 10, 10 /),'pr_lsc_i') 350 400 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 351 401 352 type(ctrl_out), dimension(4) :: o_albe_srf = (/ ctrl_out((/ 3, 4, 10, 1, 10 /),'albe_ter'), &402 type(ctrl_out),save,dimension(4) :: o_albe_srf = (/ ctrl_out((/ 3, 4, 10, 1, 10 /),'albe_ter'), & 353 403 ctrl_out((/ 3, 4, 10, 1, 10 /),'albe_lic'), & 354 404 ctrl_out((/ 3, 4, 10, 1, 10 /),'albe_oce'), & 355 405 ctrl_out((/ 3, 4, 10, 1, 10 /),'albe_sic') /) 356 406 357 type(ctrl_out), dimension(4) :: o_ages_srf = (/ ctrl_out((/ 3, 10, 10, 10, 10 /),'ages_ter'), &407 type(ctrl_out),save,dimension(4) :: o_ages_srf = (/ ctrl_out((/ 3, 10, 10, 10, 10 /),'ages_ter'), & 358 408 ctrl_out((/ 3, 10, 10, 10, 10 /),'ages_lic'), & 359 409 ctrl_out((/ 3, 10, 10, 10, 10 /),'ages_oce'), & 360 410 ctrl_out((/ 3, 10, 10, 10, 10 /),'ages_sic') /) 361 411 362 type(ctrl_out), dimension(4) :: o_rugs_srf = (/ ctrl_out((/ 3, 4, 10, 1, 10 /),'rugs_ter'), &412 type(ctrl_out),save,dimension(4) :: o_rugs_srf = (/ ctrl_out((/ 3, 4, 10, 1, 10 /),'rugs_ter'), & 363 413 ctrl_out((/ 3, 4, 10, 1, 10 /),'rugs_lic'), & 364 414 ctrl_out((/ 3, 4, 10, 1, 10 /),'rugs_oce'), & 365 415 ctrl_out((/ 3, 4, 10, 1, 10 /),'rugs_sic') /) 366 416 367 type(ctrl_out) :: o_albs = ctrl_out((/ 3, 10, 10, 1, 10 /),'albs')368 type(ctrl_out) :: o_albslw = ctrl_out((/ 3, 10, 10, 1, 10 /),'albslw')369 370 type(ctrl_out) :: o_clwcon = ctrl_out((/ 4, 10, 10, 10, 10 /),'clwcon')371 type(ctrl_out) :: o_Ma = ctrl_out((/ 4, 10, 10, 10, 10 /),'Ma')372 type(ctrl_out) :: o_dnwd = ctrl_out((/ 4, 10, 10, 10, 10 /),'dnwd')373 type(ctrl_out) :: o_dnwd0 = ctrl_out((/ 4, 10, 10, 10, 10 /),'dnwd0')374 type(ctrl_out) :: o_dtdyn = ctrl_out((/ 4, 10, 10, 10, 1 /),'dtdyn')375 type(ctrl_out) :: o_dqdyn = ctrl_out((/ 4, 10, 10, 10, 1 /),'dqdyn')376 type(ctrl_out) :: o_dudyn = ctrl_out((/ 4, 10, 10, 10, 1 /),'dudyn') !AXC377 type(ctrl_out) :: o_dvdyn = ctrl_out((/ 4, 10, 10, 10, 1 /),'dvdyn') !AXC378 type(ctrl_out) :: o_dtcon = ctrl_out((/ 4, 5, 10, 10, 10 /),'dtcon')379 type(ctrl_out) :: o_ducon = ctrl_out((/ 4, 10, 10, 10, 10 /),'ducon')380 type(ctrl_out) :: o_dqcon = ctrl_out((/ 4, 5, 10, 10, 10 /),'dqcon')381 type(ctrl_out) :: o_dtwak = ctrl_out((/ 4, 5, 10, 10, 10 /),'dtwak')382 type(ctrl_out) :: o_dqwak = ctrl_out((/ 4, 5, 10, 10, 10 /),'dqwak')383 type(ctrl_out) :: o_wake_h = ctrl_out((/ 4, 5, 10, 10, 10 /),'wake_h')384 type(ctrl_out) :: o_wake_s = ctrl_out((/ 4, 5, 10, 10, 10 /),'wake_s')385 type(ctrl_out) :: o_wake_deltat = ctrl_out((/ 4, 5, 10, 10, 10 /),'wake_deltat')386 type(ctrl_out) :: o_wake_deltaq = ctrl_out((/ 4, 5, 10, 10, 10 /),'wake_deltaq')387 type(ctrl_out) :: o_wake_omg = ctrl_out((/ 4, 5, 10, 10, 10 /),'wake_omg')388 type(ctrl_out) :: o_Vprecip = ctrl_out((/ 10, 10, 10, 10, 10 /),'Vprecip')389 type(ctrl_out) :: o_ftd = ctrl_out((/ 4, 5, 10, 10, 10 /),'ftd')390 type(ctrl_out) :: o_fqd = ctrl_out((/ 4, 5, 10, 10, 10 /),'fqd')391 type(ctrl_out) :: o_dtlsc = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtlsc')392 type(ctrl_out) :: o_dtlschr = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtlschr')393 type(ctrl_out) :: o_dqlsc = ctrl_out((/ 4, 10, 10, 10, 10 /),'dqlsc')394 type(ctrl_out) :: o_dtvdf = ctrl_out((/ 4, 10, 10, 1, 10 /),'dtvdf')395 type(ctrl_out) :: o_dqvdf = ctrl_out((/ 4, 10, 10, 1, 10 /),'dqvdf')396 type(ctrl_out) :: o_dteva = ctrl_out((/ 4, 10, 10, 10, 10 /),'dteva')397 type(ctrl_out) :: o_dqeva = ctrl_out((/ 4, 10, 10, 10, 10 /),'dqeva')398 type(ctrl_out) :: o_ptconv = ctrl_out((/ 4, 10, 10, 10, 10 /),'ptconv')399 type(ctrl_out) :: o_ratqs = ctrl_out((/ 4, 10, 10, 10, 10 /),'ratqs')400 type(ctrl_out) :: o_dtthe = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtthe')401 type(ctrl_out) :: o_f_th = ctrl_out((/ 4, 10, 10, 10, 10 /),'f_th')402 type(ctrl_out) :: o_e_th = ctrl_out((/ 4, 10, 10, 10, 10 /),'e_th')403 type(ctrl_out) :: o_w_th = ctrl_out((/ 4, 10, 10, 10, 10 /),'w_th')404 type(ctrl_out) :: o_lambda_th = ctrl_out((/ 4, 10, 10, 10, 10 /),'lambda_th')405 type(ctrl_out) :: o_q_th = ctrl_out((/ 4, 10, 10, 10, 10 /),'q_th')406 type(ctrl_out) :: o_a_th = ctrl_out((/ 4, 10, 10, 10, 10 /),'a_th')407 type(ctrl_out) :: o_d_th = ctrl_out((/ 4, 10, 10, 10, 10 /),'d_th')408 type(ctrl_out) :: o_f0_th = ctrl_out((/ 4, 10, 10, 10, 10 /),'f0_th')409 type(ctrl_out) :: o_zmax_th = ctrl_out((/ 4, 10, 10, 10, 10 /),'zmax_th')410 type(ctrl_out) :: o_dqthe = ctrl_out((/ 4, 10, 10, 10, 1 /),'dqthe')411 type(ctrl_out) :: o_dtajs = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtajs')412 type(ctrl_out) :: o_dqajs = ctrl_out((/ 4, 10, 10, 10, 10 /),'dqajs')413 type(ctrl_out) :: o_dtswr = ctrl_out((/ 4, 10, 10, 10, 1 /),'dtswr')414 type(ctrl_out) :: o_dtsw0 = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtsw0')415 type(ctrl_out) :: o_dtlwr = ctrl_out((/ 4, 10, 10, 10, 1 /),'dtlwr')416 type(ctrl_out) :: o_dtlw0 = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtlw0')417 type(ctrl_out) :: o_dtec = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtec')418 type(ctrl_out) :: o_duvdf = ctrl_out((/ 4, 10, 10, 10, 10 /),'duvdf')419 type(ctrl_out) :: o_dvvdf = ctrl_out((/ 4, 10, 10, 10, 10 /),'dvvdf')420 type(ctrl_out) :: o_duoro = ctrl_out((/ 4, 10, 10, 10, 10 /),'duoro')421 type(ctrl_out) :: o_dvoro = ctrl_out((/ 4, 10, 10, 10, 10 /),'dvoro')422 type(ctrl_out) :: o_dulif = ctrl_out((/ 4, 10, 10, 10, 10 /),'dulif')423 type(ctrl_out) :: o_dvlif = ctrl_out((/ 4, 10, 10, 10, 10 /),'dvlif')417 type(ctrl_out),save :: o_albs = ctrl_out((/ 3, 10, 10, 1, 10 /),'albs') 418 type(ctrl_out),save :: o_albslw = ctrl_out((/ 3, 10, 10, 1, 10 /),'albslw') 419 420 type(ctrl_out),save :: o_clwcon = ctrl_out((/ 4, 10, 10, 10, 10 /),'clwcon') 421 type(ctrl_out),save :: o_Ma = ctrl_out((/ 4, 10, 10, 10, 10 /),'Ma') 422 type(ctrl_out),save :: o_dnwd = ctrl_out((/ 4, 10, 10, 10, 10 /),'dnwd') 423 type(ctrl_out),save :: o_dnwd0 = ctrl_out((/ 4, 10, 10, 10, 10 /),'dnwd0') 424 type(ctrl_out),save :: o_dtdyn = ctrl_out((/ 4, 10, 10, 10, 1 /),'dtdyn') 425 type(ctrl_out),save :: o_dqdyn = ctrl_out((/ 4, 10, 10, 10, 1 /),'dqdyn') 426 type(ctrl_out),save :: o_dudyn = ctrl_out((/ 4, 10, 10, 10, 1 /),'dudyn') !AXC 427 type(ctrl_out),save :: o_dvdyn = ctrl_out((/ 4, 10, 10, 10, 1 /),'dvdyn') !AXC 428 type(ctrl_out),save :: o_dtcon = ctrl_out((/ 4, 5, 10, 10, 10 /),'dtcon') 429 type(ctrl_out),save :: o_ducon = ctrl_out((/ 4, 10, 10, 10, 10 /),'ducon') 430 type(ctrl_out),save :: o_dqcon = ctrl_out((/ 4, 5, 10, 10, 10 /),'dqcon') 431 type(ctrl_out),save :: o_dtwak = ctrl_out((/ 4, 5, 10, 10, 10 /),'dtwak') 432 type(ctrl_out),save :: o_dqwak = ctrl_out((/ 4, 5, 10, 10, 10 /),'dqwak') 433 type(ctrl_out),save :: o_wake_h = ctrl_out((/ 4, 5, 10, 10, 10 /),'wake_h') 434 type(ctrl_out),save :: o_wake_s = ctrl_out((/ 4, 5, 10, 10, 10 /),'wake_s') 435 type(ctrl_out),save :: o_wake_deltat = ctrl_out((/ 4, 5, 10, 10, 10 /),'wake_deltat') 436 type(ctrl_out),save :: o_wake_deltaq = ctrl_out((/ 4, 5, 10, 10, 10 /),'wake_deltaq') 437 type(ctrl_out),save :: o_wake_omg = ctrl_out((/ 4, 5, 10, 10, 10 /),'wake_omg') 438 type(ctrl_out),save :: o_Vprecip = ctrl_out((/ 10, 10, 10, 10, 10 /),'Vprecip') 439 type(ctrl_out),save :: o_ftd = ctrl_out((/ 4, 5, 10, 10, 10 /),'ftd') 440 type(ctrl_out),save :: o_fqd = ctrl_out((/ 4, 5, 10, 10, 10 /),'fqd') 441 type(ctrl_out),save :: o_dtlsc = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtlsc') 442 type(ctrl_out),save :: o_dtlschr = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtlschr') 443 type(ctrl_out),save :: o_dqlsc = ctrl_out((/ 4, 10, 10, 10, 10 /),'dqlsc') 444 type(ctrl_out),save :: o_dtvdf = ctrl_out((/ 4, 10, 10, 1, 10 /),'dtvdf') 445 type(ctrl_out),save :: o_dqvdf = ctrl_out((/ 4, 10, 10, 1, 10 /),'dqvdf') 446 type(ctrl_out),save :: o_dteva = ctrl_out((/ 4, 10, 10, 10, 10 /),'dteva') 447 type(ctrl_out),save :: o_dqeva = ctrl_out((/ 4, 10, 10, 10, 10 /),'dqeva') 448 type(ctrl_out),save :: o_ptconv = ctrl_out((/ 4, 10, 10, 10, 10 /),'ptconv') 449 type(ctrl_out),save :: o_ratqs = ctrl_out((/ 4, 10, 10, 10, 10 /),'ratqs') 450 type(ctrl_out),save :: o_dtthe = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtthe') 451 type(ctrl_out),save :: o_f_th = ctrl_out((/ 4, 10, 10, 10, 10 /),'f_th') 452 type(ctrl_out),save :: o_e_th = ctrl_out((/ 4, 10, 10, 10, 10 /),'e_th') 453 type(ctrl_out),save :: o_w_th = ctrl_out((/ 4, 10, 10, 10, 10 /),'w_th') 454 type(ctrl_out),save :: o_lambda_th = ctrl_out((/ 10, 10, 10, 10, 10 /),'lambda_th') 455 type(ctrl_out),save :: o_q_th = ctrl_out((/ 4, 10, 10, 10, 10 /),'q_th') 456 type(ctrl_out),save :: o_a_th = ctrl_out((/ 4, 10, 10, 10, 10 /),'a_th') 457 type(ctrl_out),save :: o_d_th = ctrl_out((/ 4, 10, 10, 10, 10 /),'d_th') 458 type(ctrl_out),save :: o_f0_th = ctrl_out((/ 4, 10, 10, 10, 10 /),'f0_th') 459 type(ctrl_out),save :: o_zmax_th = ctrl_out((/ 4, 10, 10, 10, 10 /),'zmax_th') 460 type(ctrl_out),save :: o_dqthe = ctrl_out((/ 4, 10, 10, 10, 1 /),'dqthe') 461 type(ctrl_out),save :: o_dtajs = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtajs') 462 type(ctrl_out),save :: o_dqajs = ctrl_out((/ 4, 10, 10, 10, 10 /),'dqajs') 463 type(ctrl_out),save :: o_dtswr = ctrl_out((/ 4, 10, 10, 10, 1 /),'dtswr') 464 type(ctrl_out),save :: o_dtsw0 = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtsw0') 465 type(ctrl_out),save :: o_dtlwr = ctrl_out((/ 4, 10, 10, 10, 1 /),'dtlwr') 466 type(ctrl_out),save :: o_dtlw0 = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtlw0') 467 type(ctrl_out),save :: o_dtec = ctrl_out((/ 4, 10, 10, 10, 10 /),'dtec') 468 type(ctrl_out),save :: o_duvdf = ctrl_out((/ 4, 10, 10, 10, 10 /),'duvdf') 469 type(ctrl_out),save :: o_dvvdf = ctrl_out((/ 4, 10, 10, 10, 10 /),'dvvdf') 470 type(ctrl_out),save :: o_duoro = ctrl_out((/ 4, 10, 10, 10, 10 /),'duoro') 471 type(ctrl_out),save :: o_dvoro = ctrl_out((/ 4, 10, 10, 10, 10 /),'dvoro') 472 type(ctrl_out),save :: o_dulif = ctrl_out((/ 4, 10, 10, 10, 10 /),'dulif') 473 type(ctrl_out),save :: o_dvlif = ctrl_out((/ 4, 10, 10, 10, 10 /),'dvlif') 424 474 425 475 ! Attention a refaire correctement 426 type(ctrl_out), dimension(2) :: o_trac = (/ ctrl_out((/ 4, 10, 10, 10, 10 /),'trac01'), &476 type(ctrl_out),save,dimension(2) :: o_trac = (/ ctrl_out((/ 4, 10, 10, 10, 10 /),'trac01'), & 427 477 ctrl_out((/ 4, 10, 10, 10, 10 /),'trac02') /) 428 478 CONTAINS … … 434 484 435 485 SUBROUTINE phys_output_open(jjmp1,nlevSTD,clevSTD,nbteta, & 436 ctetaSTD,dtime, presnivs, ok_veget, & 437 type_ocean, iflag_pbl,ok_mensuel,ok_journe, & 438 ok_hf,ok_instan,ok_LES,ok_ade,ok_aie) 486 ctetaSTD,dtime, ok_veget, & 487 type_ocean, iflag_pbl,ok_mensuel,ok_journe, & 488 ok_hf,ok_instan,ok_LES,ok_ade,ok_aie, read_climoz, & 489 new_aod, aerosol_couple) 490 439 491 440 492 USE iophy … … 443 495 USE ioipsl 444 496 USE mod_phys_lmdz_para 497 USE aero_mod, only : naero_spc,name_aero 445 498 446 499 IMPLICIT NONE … … 450 503 include "clesphys.h" 451 504 include "thermcell.h" 505 include "comvert.h" 452 506 453 507 integer :: jjmp1 … … 455 509 logical :: ok_mensuel, ok_journe, ok_hf, ok_instan 456 510 logical :: ok_LES,ok_ade,ok_aie 511 logical :: new_aod, aerosol_couple 512 integer, intent(in):: read_climoz ! read ozone climatology 513 ! Allowed values are 0, 1 and 2 514 ! 0: do not read an ozone climatology 515 ! 1: read a single ozone climatology that will be used day and night 516 ! 2: read two ozone climatologies, the average day and night 517 ! climatology and the daylight climatology 518 457 519 real :: dtime 458 520 integer :: idayref 459 521 real :: zjulian 460 real, dimension(klev) :: presnivs522 real, dimension(klev) :: Ahyb, Bhyb, Alt 461 523 character(len=4), dimension(nlevSTD) :: clevSTD 462 524 integer :: nsrf, k, iq, iiq, iff, i, j, ilev 525 integer :: naero 463 526 logical :: ok_veget 464 527 integer :: iflag_pbl … … 468 531 CHARACTER(len=3) :: ctetaSTD(nbteta) 469 532 real, dimension(nfiles) :: ecrit_files 470 CHARACTER(len=20), dimension(nfiles) :: name_files533 CHARACTER(len=20), dimension(nfiles) :: phys_out_filenames 471 534 INTEGER, dimension(iim*jjmp1) :: ndex2d 472 535 INTEGER, dimension(iim*jjmp1*klev) :: ndex3d 473 536 integer :: imin_ins, imax_ins 474 537 integer :: jmin_ins, jmax_ins 538 integer, dimension(nfiles) :: phys_out_levmin, phys_out_levmax 539 integer, dimension(nfiles) :: phys_out_filelevels 540 CHARACTER(len=20), dimension(nfiles) :: type_ecri_files, phys_out_filetypes 541 character(len=20), dimension(nfiles) :: chtimestep = (/ 'DefFreq', 'DefFreq','DefFreq', 'DefFreq', 'DefFreq' /) 542 logical, dimension(nfiles) :: phys_out_filekeys 475 543 476 544 !!!!!!!!!! stockage dans une region limitee pour chaque fichier !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 477 ! entre [lonmin_reg,lonmax_reg] et [latmin_reg,latmax_reg] 478 479 logical, dimension(nfiles), save :: ok_reglim = (/ .false., .false., .false., .false., .true. /) 480 real, dimension(nfiles), save :: lonmin_reg = (/ 0., -45., 0., 0., -162. /) 481 real, dimension(nfiles), save :: lonmax_reg = (/ 90., 45., 90., 90., -144. /) 482 real, dimension(nfiles), save :: latmin_reg = (/ 0., -45., 0., 0., 7. /) 483 real, dimension(nfiles), save :: latmax_reg = (/ 90., 90., 90., 90., 21. /) 484 485 levmax = (/ klev, klev, klev, klev, 17 /) 486 487 name_files(1) = 'histmth' 488 name_files(2) = 'histday' 489 name_files(3) = 'histhf' 490 name_files(4) = 'histins' 491 name_files(5) = 'histLES' 545 ! entre [phys_out_lonmin,phys_out_lonmax] et [phys_out_latmin,phys_out_latmax] 546 547 logical, dimension(nfiles), save :: phys_out_regfkey = (/ .false., .false., .false., .false., .false. /) 548 real, dimension(nfiles), save :: phys_out_lonmin = (/ -180., -180., -180., -180., -180. /) 549 real, dimension(nfiles), save :: phys_out_lonmax = (/ 180., 180., 180., 180., 180. /) 550 real, dimension(nfiles), save :: phys_out_latmin = (/ -90., -90., -90., -90., -90. /) 551 real, dimension(nfiles), save :: phys_out_latmax = (/ 90., 90., 90., 90., 90. /) 552 553 554 555 ! 556 print*,'Debut phys_output_mod.F90' 557 ! Initialisations (Valeurs par defaut 558 levmax = (/ klev, klev, klev, klev, klev /) 559 560 phys_out_filenames(1) = 'histmth' 561 phys_out_filenames(2) = 'histday' 562 phys_out_filenames(3) = 'histhf' 563 phys_out_filenames(4) = 'histins' 564 phys_out_filenames(5) = 'histLES' 492 565 493 566 type_ecri(1) = 'ave(X)' … … 495 568 type_ecri(3) = 'ave(X)' 496 569 type_ecri(4) = 'inst(X)' 497 type_ecri(5) = ' ave(X)'570 type_ecri(5) = 'inst(X)' 498 571 499 572 clef_files(1) = ok_mensuel … … 506 579 lev_files(2) = lev_histday 507 580 lev_files(3) = lev_histhf 508 lev_files(4) = 1 509 lev_files(5) = 1 581 lev_files(4) = lev_histins 582 lev_files(5) = lev_histLES 583 510 584 511 585 ecrit_files(1) = ecrit_mth … … 515 589 ecrit_files(5) = ecrit_LES 516 590 591 !! Lectures des parametres de sorties dans physiq.def 592 593 call getin('phys_out_regfkey',phys_out_regfkey) 594 call getin('phys_out_lonmin',phys_out_lonmin) 595 call getin('phys_out_lonmax',phys_out_lonmax) 596 call getin('phys_out_latmin',phys_out_latmin) 597 call getin('phys_out_latmax',phys_out_latmax) 598 phys_out_levmin(:)=levmin(:) 599 call getin('phys_out_levmin',levmin) 600 phys_out_levmax(:)=levmax(:) 601 call getin('phys_out_levmax',levmax) 602 call getin('phys_out_filenames',phys_out_filenames) 603 phys_out_filekeys(:)=clef_files(:) 604 call getin('phys_out_filekeys',clef_files) 605 phys_out_filelevels(:)=lev_files(:) 606 call getin('phys_out_filelevels',lev_files) 607 call getin('phys_out_filetimesteps',chtimestep) 608 phys_out_filetypes(:)=type_ecri(:) 609 call getin('phys_out_filetypes',type_ecri) 610 611 type_ecri_files(:)=type_ecri(:) 612 613 print*,'phys_out_lonmin=',phys_out_lonmin 614 print*,'phys_out_lonmax=',phys_out_lonmax 615 print*,'phys_out_latmin=',phys_out_latmin 616 print*,'phys_out_latmax=',phys_out_latmax 617 print*,'phys_out_filenames=',phys_out_filenames 618 print*,'phys_out_filetypes=',type_ecri 619 print*,'phys_out_filekeys=',clef_files 620 print*,'phys_out_filelevels=',lev_files 621 517 622 !!!!!!!!!!!!!!!!!!!!!!! Boucle sur les fichiers !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 518 623 ! Appel de histbeg et histvert pour creer le fichier et les niveaux verticaux !! … … 520 625 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 521 626 627 zdtime = dtime ! Frequence ou l on moyenne 628 629 ! Calcul des Ahyb, Bhyb et Alt 630 do k=1,klev 631 Ahyb(k)=(ap(k)+ap(k+1))/2. 632 Bhyb(k)=(bp(k)+bp(k+1))/2. 633 Alt(k)=log(preff/presnivs(k))*8. 634 enddo 635 ! if(prt_level.ge.1) then 636 print*,'Ap Hybrid = ',Ahyb(1:klev) 637 print*,'Bp Hybrid = ',Bhyb(1:klev) 638 print*,'Alt approx des couches pour une haut d echelle de 8km = ',Alt(1:klev) 639 ! endif 522 640 DO iff=1,nfiles 523 641 524 642 IF (clef_files(iff)) THEN 525 526 zstophym(iff) = dtime ! Frequence ou l on moyenne 527 zoutm(iff) = ecrit_files(iff) ! Frequence ou l on ecrit 643 644 if ( chtimestep(iff).eq.'DefFreq' ) then 645 ! Par defaut ecrit_files = (ecrit_mensuel ecrit_jour ecrit_hf ...)*86400. 646 ecrit_files(iff)=ecrit_files(iff)*86400. 647 else 648 call convers_timesteps(chtimestep(iff),ecrit_files(iff)) 649 endif 650 print*,'ecrit_files(',iff,')= ',ecrit_files(iff) 651 652 zoutm(iff) = ecrit_files(iff) ! Frequence ou l on ecrit en seconde 528 653 529 654 idayref = day_ref … … 532 657 !!!!!!!!!!!!!!!!! Traitement dans le cas ou l'on veut stocker sur un domaine limite !! 533 658 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 534 if ( ok_reglim(iff)) then659 if (phys_out_regfkey(iff)) then 535 660 536 661 imin_ins=1 … … 539 664 jmax_ins=jjmp1 540 665 541 ! correction abderr do i=1,iim-1666 ! correction abderr 542 667 do i=1,iim 543 668 print*,'io_lon(i)=',io_lon(i) 544 if (io_lon(i).le. lonmin_reg(iff)) imin_ins=i545 if (io_lon(i).le. lonmax_reg(iff)) imax_ins=i669 if (io_lon(i).le.phys_out_lonmin(iff)) imin_ins=i 670 if (io_lon(i).le.phys_out_lonmax(iff)) imax_ins=i+1 546 671 enddo 547 672 548 do j=1,jjmp1 -1673 do j=1,jjmp1 549 674 print*,'io_lat(j)=',io_lat(j) 550 if (io_lat(j).ge. latmin_reg(iff)) jmax_ins=j+1551 if (io_lat(j).ge. latmax_reg(iff)) jmin_ins=j675 if (io_lat(j).ge.phys_out_latmin(iff)) jmax_ins=j+1 676 if (io_lat(j).ge.phys_out_latmax(iff)) jmin_ins=j 552 677 enddo 553 678 554 print*,'On stoke le fichier hist sur,', &679 print*,'On stoke le fichier histoire numero ',iff,' sur ', & 555 680 imin_ins,imax_ins,jmin_ins,jmax_ins 556 print*,' On stoke le fichier instantanne sur,', &681 print*,'longitudes : ', & 557 682 io_lon(imin_ins),io_lon(imax_ins), & 558 io_lat(jmin_ins),io_lat(jmax_ins) 559 560 CALL histbeg(name_files(iff),iim,io_lon,jjmp1,io_lat, & 683 'latitudes : ', & 684 io_lat(jmax_ins),io_lat(jmin_ins) 685 686 CALL histbeg(phys_out_filenames(iff),iim,io_lon,jjmp1,io_lat, & 561 687 imin_ins,imax_ins-imin_ins+1, & 562 688 jmin_ins,jmax_ins-jmin_ins+1, & … … 564 690 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 565 691 else 566 CALL histbeg_phy( name_files(iff),itau_phy,zjulian,dtime,nhorim(iff),nid_files(iff))692 CALL histbeg_phy(phys_out_filenames(iff),itau_phy,zjulian,dtime,nhorim(iff),nid_files(iff)) 567 693 endif 568 694 … … 582 708 ! & klev, presnivs/100., nvertm) 583 709 ! ENDIF 584 710 ! 711 !!!! Composentes de la coordonnee sigma-hybride 712 CALL histvert(nid_files(iff), "Ahyb","Ahyb comp of Hyb Cord ", "Pa", & 713 levmax(iff) - levmin(iff) + 1,Ahyb,nvertap(iff)) 714 715 CALL histvert(nid_files(iff), "Bhyb","Bhyb comp of Hyb Cord", " ", & 716 levmax(iff) - levmin(iff) + 1,Bhyb,nvertbp(iff)) 717 718 CALL histvert(nid_files(iff), "Alt","Height approx for scale heigh of 8km at levels", "Km", & 719 levmax(iff) - levmin(iff) + 1,Alt,nvertAlt(iff)) 720 721 ! CALL histvert(nid_files(iff), "preff","Reference pressure", "Pa", & 722 ! 1,preff,nvertp0(iff)) 585 723 !!! Champs 1D !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 586 724 CALL histdef2d(iff,o_phis%flag,o_phis%name,"Surface geop.height", "m2/s2") … … 592 730 CALL histdef2d(iff,o_aire%flag,o_aire%name,"Grid area", "-") 593 731 CALL histdef2d(iff,o_contfracATM%flag,o_contfracATM%name,"% sfce ter+lic", "-") 594 type_ecri(1) = 'ave(X)' 595 type_ecri(2) = 'ave(X)' 596 type_ecri(3) = 'ave(X)' 597 type_ecri(4) = 'inst(X)' 598 type_ecri(5) = 'ave(X)' 732 type_ecri(:) = type_ecri_files(:) 599 733 600 734 !!! Champs 2D !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! … … 617 751 type_ecri(5) = 't_max(X)' 618 752 CALL histdef2d(iff,o_t2m_max%flag,o_t2m_max%name, "Temp 2m max", "K" ) 619 type_ecri(1) = 'ave(X)' 620 type_ecri(2) = 'ave(X)' 621 type_ecri(3) = 'ave(X)' 622 type_ecri(4) = 'inst(X)' 623 type_ecri(5) = 'ave(X)' 753 type_ecri(:) = type_ecri_files(:) 624 754 CALL histdef2d(iff,o_wind10m%flag,o_wind10m%name, "10-m wind speed", "m/s") 625 755 CALL histdef2d(iff,o_wind10max%flag,o_wind10max%name, "10m wind speed max", "m/s") … … 700 830 type_ecri(5) = 't_max(X)' 701 831 CALL histdef2d(iff,o_tke_max_srf(nsrf)%flag,o_tke_max_srf(nsrf)%name,"Max Turb. Kinetic Energy "//clnsurf(nsrf),"-") 702 type_ecri(1) = 'ave(X)' 703 type_ecri(2) = 'ave(X)' 704 type_ecri(3) = 'ave(X)' 705 type_ecri(4) = 'inst(X)' 706 type_ecri(5) = 'ave(X)' 832 type_ecri(:) = type_ecri_files(:) 707 833 endif 708 834 CALL histdef2d(iff,o_albe_srf(nsrf)%flag,o_albe_srf(nsrf)%name,"Albedo surf. "//clnsurf(nsrf),"-") 709 835 CALL histdef2d(iff,o_rugs_srf(nsrf)%flag,o_rugs_srf(nsrf)%name,"Latent heat flux "//clnsurf(nsrf),"W/m2") 710 836 CALL histdef2d(iff,o_ages_srf(nsrf)%flag,o_ages_srf(nsrf)%name,"Snow age", "day") 711 END DO 837 END DO 838 839 IF (new_aod .AND. (.NOT. aerosol_couple)) THEN 840 DO naero = 1, naero_spc 841 CALL histdef2d(iff,o_tausumaero(naero)%flag,o_tausumaero(naero)%name,"Aerosol Optical depth at 550 nm "//name_aero(naero),"1") 842 END DO 843 ENDIF 712 844 713 845 IF (ok_ade) THEN 714 846 CALL histdef2d(iff,o_topswad%flag,o_topswad%name, "ADE at TOA", "W/m2") 715 847 CALL histdef2d(iff,o_solswad%flag,o_solswad%name, "ADE at SRF", "W/m2") 848 849 CALL histdef2d(iff,o_swtoaas_nat%flag,o_swtoaas_nat%name, "Natural aerosol radiative forcing all-sky at TOA", "W/m2") 850 CALL histdef2d(iff,o_swsrfas_nat%flag,o_swsrfas_nat%name, "Natural aerosol radiative forcing all-sky at SRF", "W/m2") 851 CALL histdef2d(iff,o_swtoacs_nat%flag,o_swtoacs_nat%name, "Natural aerosol radiative forcing clear-sky at TOA", "W/m2") 852 CALL histdef2d(iff,o_swsrfcs_nat%flag,o_swsrfcs_nat%name, "Natural aerosol radiative forcing clear-sky at SRF", "W/m2") 853 854 CALL histdef2d(iff,o_swtoaas_ant%flag,o_swtoaas_ant%name, "Anthropogenic aerosol radiative forcing all-sky at TOA", "W/m2") 855 CALL histdef2d(iff,o_swsrfas_ant%flag,o_swsrfas_ant%name, "Anthropogenic aerosol radiative forcing all-sky at SRF", "W/m2") 856 CALL histdef2d(iff,o_swtoacs_ant%flag,o_swtoacs_ant%name, "Anthropogenic aerosol radiative forcing clear-sky at TOA", "W/m2") 857 CALL histdef2d(iff,o_swsrfcs_ant%flag,o_swsrfcs_ant%name, "Anthropogenic aerosol radiative forcing clear-sky at SRF", "W/m2") 858 859 IF (.NOT. aerosol_couple) THEN 860 CALL histdef2d(iff,o_swtoacf_nat%flag,o_swtoacf_nat%name, "Natural aerosol impact on cloud radiative forcing at TOA", "W/m2") 861 CALL histdef2d(iff,o_swsrfcf_nat%flag,o_swsrfcf_nat%name, "Natural aerosol impact on cloud radiative forcing at SRF", "W/m2") 862 CALL histdef2d(iff,o_swtoacf_ant%flag,o_swtoacf_ant%name, "Anthropogenic aerosol impact on cloud radiative forcing at TOA", "W/m2") 863 CALL histdef2d(iff,o_swsrfcf_ant%flag,o_swsrfcf_ant%name, "Anthropogenic aerosol impact on cloud radiative forcing at SRF", "W/m2") 864 CALL histdef2d(iff,o_swtoacf_zero%flag,o_swtoacf_zero%name, "Cloud radiative forcing (allsky-clearsky fluxes) at TOA", "W/m2") 865 CALL histdef2d(iff,o_swsrfcf_zero%flag,o_swsrfcf_zero%name, "Cloud radiative forcing (allsky-clearsky fluxes) at SRF", "W/m2") 866 ENDIF 867 716 868 ENDIF 717 869 … … 750 902 type_ecri(5) = 't_max(X)' 751 903 CALL histdef2d(iff,o_cape_max%flag,o_cape_max%name, "CAPE max.", "J/kg") 752 type_ecri(1) = 'ave(X)' 753 type_ecri(2) = 'ave(X)' 754 type_ecri(3) = 'ave(X)' 755 type_ecri(4) = 'inst(X)' 756 type_ecri(5) = 'ave(X)' 904 type_ecri(:) = type_ecri_files(:) 757 905 CALL histdef3d(iff,o_upwd%flag,o_upwd%name, "saturated updraft", "kg/m2/s") 758 906 CALL histdef3d(iff,o_Ma%flag,o_Ma%name, "undilute adiab updraft", "kg/m2/s") … … 773 921 774 922 ! Champs interpolles sur des niveaux de pression 775 ! iif=1 on ecrit u v w phi sur 850 700 500 200 au niv 1 776 ! iif=2 on ecrit w et ph 500 seulement au niv 1 777 ! et u v sur 850 700 500 200 778 ! iif=3 on ecrit ph a 500 seulement au niv 1 779 ! on ecrit u v t q a 850 700 500 200 au niv 3 780 781 zstophym(iff) = ecrit_files(iff) 923 782 924 type_ecri(1) = 'inst(X)' 783 925 type_ecri(2) = 'inst(X)' … … 790 932 ilev=0 791 933 DO k=1, nlevSTD 792 IF(k.GE.2.AND.k.LE.12) bb2=clevSTD(k)793 ! IF(k.GE.13.AND.k.LE.17) bb3=clevSTD(k)794 IF(bb2.EQ."850".OR.bb2.EQ."700".OR.bb2.EQ."500".OR.bb2.EQ."200" )THEN934 ! IF(k.GE.2.AND.k.LE.12) bb2=clevSTD(k) 935 bb2=clevSTD(k) 936 IF(bb2.EQ."850".OR.bb2.EQ."700".OR.bb2.EQ."500".OR.bb2.EQ."200".OR.bb2.EQ."50".OR.bb2.EQ."10")THEN 795 937 ilev=ilev+1 796 print*,'ilev bb2 flag name ',ilev,bb2,o_uSTDlevs(ilev)%flag,o_uSTDlevs(ilev)%name938 print*,'ilev k bb2 flag name ',ilev,k, bb2,o_uSTDlevs(ilev)%flag,o_uSTDlevs(ilev)%name 797 939 CALL histdef2d(iff,o_uSTDlevs(ilev)%flag,o_uSTDlevs(ilev)%name,"Zonal wind "//bb2//"mb", "m/s") 798 940 CALL histdef2d(iff,o_vSTDlevs(ilev)%flag,o_vSTDlevs(ilev)%name,"Meridional wind "//bb2//"mb", "m/s") … … 801 943 CALL histdef2d(iff,o_qSTDlevs(ilev)%flag,o_qSTDlevs(ilev)%name,"Specific humidity "//bb2//"mb", "kg/kg" ) 802 944 CALL histdef2d(iff,o_tSTDlevs(ilev)%flag,o_tSTDlevs(ilev)%name,"Temperature "//bb2//"mb", "K") 803 ENDIF !(bb2.EQ."850".OR.bb2.EQ."700".OR."500".OR.bb2.EQ."200" )945 ENDIF !(bb2.EQ."850".OR.bb2.EQ."700".OR."500".OR.bb2.EQ."200".OR.bb2.EQ."50".OR.bb2.EQ."10") 804 946 ENDDO 805 zstophym(iff) = dtime 806 type_ecri(1) = 'ave(X)' 807 type_ecri(2) = 'ave(X)' 808 type_ecri(3) = 'ave(X)' 809 type_ecri(4) = 'inst(X)' 810 type_ecri(5) = 'ave(X)' 947 type_ecri(:) = type_ecri_files(:) 811 948 812 949 CALL histdef2d(iff,o_t_oce_sic%flag,o_t_oce_sic%name, "Temp mixte oce-sic", "K") … … 822 959 ENDIF 823 960 ENDIF !(iflag_con.GE.3) 824 825 961 826 962 CALL histdef2d(iff,o_weakinv%flag,o_weakinv%name, "Weak inversion", "-") … … 834 970 CALL histdef2d(iff,o_LWdownOR%flag,o_LWdownOR%name, "Sfce incident LW radiation OR", "W/m2") 835 971 CALL histdef2d(iff,o_snowl%flag,o_snowl%name, "Solid Large-scale Precip.", "kg/(m2*s)") 972 836 973 CALL histdef2d(iff,o_solldown%flag,o_solldown%name, "Down. IR rad. at surface", "W/m2") 837 974 CALL histdef2d(iff,o_dtsvdfo%flag,o_dtsvdfo%name, "Boundary-layer dTs(o)", "K/s") … … 856 993 CALL histdef3d(iff,o_rnebcon%flag,o_rnebcon%name, "Convective Cloud Fraction", "-") 857 994 CALL histdef3d(iff,o_rhum%flag,o_rhum%name, "Relative humidity", "-") 858 CALL histdef3d(iff,o_ozone%flag,o_ozone%name, "Ozone concentration", "ppmv") 995 CALL histdef3d(iff,o_ozone%flag,o_ozone%name, "Ozone mole fraction", "-") 996 if (read_climoz == 2) & 997 CALL histdef3d(iff,o_ozone_light%flag,o_ozone_light%name, & 998 "Daylight ozone mole fraction", "-") 859 999 CALL histdef3d(iff,o_dtphy%flag,o_dtphy%name, "Physics dT", "K/s") 860 1000 CALL histdef3d(iff,o_dqphy%flag,o_dqphy%name, "Physics dQ", "(kg/kg)/s") … … 862 1002 CALL histdef3d(iff,o_cldemi%flag,o_cldemi%name, "Cloud optical emissivity", "1") 863 1003 !IM: bug ?? dimensionnement variables (klon,klev+1) pmflxr, pmflxs, prfl, psfl 864 ! CALL histdef3d(iff,o_pr_con_l%flag,o_pmflxr%name, "Convective precipitation lic", " ") 865 ! CALL histdef3d(iff,o_pr_con_i%flag,o_pmflxs%name, "Convective precipitation ice", " ") 866 ! CALL histdef3d(iff,o_pr_lsc_l%flag,o_prfl%name, "Large scale precipitation lic", " ") 867 ! CALL histdef3d(iff,o_pr_lsc_i%flag,o_psfl%name, "Large scale precipitation ice", " ") 868 1004 CALL histdef3d(iff,o_pr_con_l%flag,o_pr_con_l%name, "Convective precipitation lic", " ") 1005 CALL histdef3d(iff,o_pr_con_i%flag,o_pr_con_i%name, "Convective precipitation ice", " ") 1006 CALL histdef3d(iff,o_pr_lsc_l%flag,o_pr_lsc_l%name, "Large scale precipitation lic", " ") 1007 CALL histdef3d(iff,o_pr_lsc_i%flag,o_pr_lsc_i%name, "Large scale precipitation ice", " ") 869 1008 !FH Sorties pour la couche limite 870 1009 if (iflag_pbl>1) then … … 876 1015 type_ecri(5) = 't_max(X)' 877 1016 CALL histdef3d(iff,o_tke_max%flag,o_tke_max%name, "TKE max", "m2/s2") 878 type_ecri(1) = 'ave(X)' 879 type_ecri(2) = 'ave(X)' 880 type_ecri(3) = 'ave(X)' 881 type_ecri(4) = 'inst(X)' 882 type_ecri(5) = 'ave(X)' 1017 type_ecri(:) = type_ecri_files(:) 883 1018 endif 884 1019 … … 890 1025 type_ecri(5) = 't_max(X)' 891 1026 CALL histdef3d(iff,o_kz_max%flag,o_kz_max%name, "Kz melange max", "m2/s" ) 892 type_ecri(1) = 'ave(X)' 893 type_ecri(2) = 'ave(X)' 894 type_ecri(3) = 'ave(X)' 895 type_ecri(4) = 'inst(X)' 896 type_ecri(5) = 'ave(X)' 1027 type_ecri(:) = type_ecri_files(:) 897 1028 CALL histdef3d(iff,o_clwcon%flag,o_clwcon%name, "Convective Cloud Liquid water content", "kg/kg") 898 1029 CALL histdef3d(iff,o_dtdyn%flag,o_dtdyn%name, "Dynamics dT", "K/s") … … 985 1116 ENDIF ! clef_files 986 1117 987 ENDDO ! 1118 ENDDO ! iff 1119 print*,'Fin phys_output_mod.F90' 988 1120 end subroutine phys_output_open 989 1121 … … 1007 1139 character(len=*) :: unitvar 1008 1140 1141 real zstophym 1142 1143 if (type_ecri(iff)=='inst(X)'.OR.type_ecri(iff)=='once') then 1144 zstophym=zoutm(iff) 1145 else 1146 zstophym=zdtime 1147 endif 1148 1009 1149 ! Appel a la lecture des noms et niveau d'ecriture des variables dans output.def 1010 1150 call conf_physoutputs(nomvar,flag_var) … … 1013 1153 call histdef (nid_files(iff),nomvar,titrevar,unitvar, & 1014 1154 iim,jj_nb,nhorim(iff), 1,1,1, -99, 32, & 1015 type_ecri(iff), zstophym (iff),zoutm(iff))1155 type_ecri(iff), zstophym,zoutm(iff)) 1016 1156 endif 1017 1157 end subroutine histdef2d … … 1036 1176 character(len=*) :: unitvar 1037 1177 1178 real zstophym 1179 1038 1180 ! Appel a la lecture des noms et niveau d'ecriture des variables dans output.def 1039 1181 call conf_physoutputs(nomvar,flag_var) 1182 1183 if (type_ecri(iff)=='inst(X)'.OR.type_ecri(iff)=='once') then 1184 zstophym=zoutm(iff) 1185 else 1186 zstophym=zdtime 1187 endif 1040 1188 1041 1189 if ( flag_var(iff)<=lev_files(iff) ) then … … 1043 1191 iim, jj_nb, nhorim(iff), klev, levmin(iff), & 1044 1192 levmax(iff)-levmin(iff)+1, nvertm(iff), 32, type_ecri(iff), & 1045 zstophym (iff), zoutm(iff))1193 zstophym, zoutm(iff)) 1046 1194 endif 1047 1195 end subroutine histdef3d … … 1058 1206 character(len=20) :: nam_var 1059 1207 integer, dimension(nfiles) :: flag_var 1060 integer, dimension(nfiles),save :: flag_var_omp 1061 character(len=20),save :: nam_var_omp 1062 1063 flag_var_omp = flag_var 1064 nam_var_omp = nam_var 1208 1065 1209 IF(prt_level>10) WRITE(lunout,*)'Avant getin: nam_var flag_var ',nam_var,flag_var(:) 1066 call getin('flag_'//nam_var,flag_var_omp) 1067 flag_var = flag_var_omp 1068 call getin('name_'//nam_var,nam_var_omp) 1069 nam_var=nam_var_omp 1070 1210 call getin('flag_'//nam_var,flag_var) 1211 call getin('name_'//nam_var,nam_var) 1071 1212 IF(prt_level>10) WRITE(lunout,*)'Apres getin: nam_var flag_var ',nam_var,flag_var(:) 1072 1213 1073 1214 END SUBROUTINE conf_physoutputs 1074 1215 1216 SUBROUTINE convers_timesteps(str,timestep) 1217 1218 use ioipsl 1219 1220 IMPLICIT NONE 1221 1222 character(len=20) :: str 1223 character(len=10) :: type 1224 integer :: ipos,il 1225 real :: ttt,xxx,timestep,dayseconde 1226 parameter (dayseconde=86400.) 1227 include "temps.h" 1228 include "comconst.h" 1229 1230 ipos=scan(str,'0123456789.',.true.) 1231 ! 1232 il=len_trim(str) 1233 print*,ipos,il 1234 read(str(1:ipos),*) ttt 1235 print*,ttt 1236 type=str(ipos+1:il) 1237 1238 1239 if ( il == ipos ) then 1240 type='day' 1241 endif 1242 1243 if ( type == 'day'.or.type == 'days'.or.type == 'jours'.or.type == 'jour' ) timestep = ttt * dayseconde 1244 if ( type == 'mounths'.or.type == 'mth'.or.type == 'mois' ) then 1245 print*,'annee_ref,day_ref mon_len',annee_ref,day_ref,ioget_mon_len(annee_ref,day_ref) 1246 timestep = ttt * dayseconde * ioget_mon_len(annee_ref,day_ref) 1247 endif 1248 if ( type == 'hours'.or.type == 'hr'.or.type == 'heurs') timestep = ttt * dayseconde / 24. 1249 if ( type == 'mn'.or.type == 'minutes' ) timestep = ttt * 60. 1250 if ( type == 's'.or.type == 'sec'.or.type == 'secondes' ) timestep = ttt 1251 if ( type == 'TS' ) timestep = dtphys 1252 1253 print*,'type = ',type 1254 print*,'nb j/h/m = ',ttt 1255 print*,'timestep(s)=',timestep 1256 1257 END SUBROUTINE convers_timesteps 1258 1075 1259 END MODULE phys_output_mod 1076 1260 -
LMDZ4/trunk/libf/phylmd/phys_output_write.h
r1146 r1279 219 219 IF (o_LWdn200%flag(iff)<=lev_files(iff)) THEN 220 220 CALL histwrite_phy(nid_files(iff), 221 s o_LWdn200%name,itau_w, zx_tmp_fi2d)221 s o_LWdn200%name,itau_w,LWdn200) 222 222 ENDIF 223 223 224 224 IF (o_LWdn200clr%flag(iff)<=lev_files(iff)) THEN 225 225 CALL histwrite_phy(nid_files(iff), 226 s o_LWdn200clr%name,itau_w, zx_tmp_fi2d)226 s o_LWdn200clr%name,itau_w,LWdn200clr) 227 227 ENDIF 228 228 … … 575 575 576 576 ! Champs interpolles sur des niveaux de pression 577 ! if=1 on ecrit u v w phi sur 850 700 500 200 au niv 1578 ! if=2 on ecrit w et ph 500 seulement au niv 1579 ! et u v sur 850 700 500 200580 ! if=3 on ecrit ph a 500 seulement au niv 1581 ! on ecrit u v t q a 850 700 500 200 au niv 3582 577 583 578 ll=0 584 579 DO k=1, nlevSTD 585 IF(k.GE.2.AND.k.LE.12) bb2=clevSTD(k) 586 IF(k.GE.13.AND.k.LE.17) bb3=clevSTD(k) 580 ! IF(k.GE.2.AND.k.LE.12) bb2=clevSTD(k) 581 ! IF(k.GE.13.AND.k.LE.17) bb3=clevSTD(k) 582 bb2=clevSTD(k) 587 583 IF(bb2.EQ."850".OR.bb2.EQ."700".OR. 588 $ bb2.EQ."500".OR.bb2.EQ."200") THEN 584 $ bb2.EQ."500".OR.bb2.EQ."200".OR. 585 $ bb2.EQ."50".OR.bb2.EQ."10") THEN 589 586 590 587 ! a refaire correctement !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! … … 746 743 ENDIF 747 744 748 ! IF (o_pr_con_l%flag(iff)<=lev_files(iff)) THEN 749 ! CALL histwrite_phy(nid_files(iff),o_pmflxr%name,itau_w,pmflxr) 750 ! ENDIF 751 752 ! IF (o_pr_con_i%flag(iff)<=lev_files(iff)) THEN 753 ! CALL histwrite_phy(nid_files(iff),o_pmflxs%name,itau_w,pmflxs) 754 ! ENDIF 755 756 ! IF (o_pr_lsc_l%flag(iff)<=lev_files(iff)) THEN 757 ! CALL histwrite_phy(nid_files(iff),o_prfl%name,itau_w,prfl) 758 ! ENDIF 759 760 ! IF (o_pr_lsc_i%flag(iff)<=lev_files(iff)) THEN 761 ! CALL histwrite_phy(nid_files(iff),o_psfl%name,itau_w,psfl) 762 ! ENDIF 745 IF (o_pr_con_l%flag(iff)<=lev_files(iff)) THEN 746 CALL histwrite_phy(nid_files(iff), 747 s o_pr_con_l%name,itau_w,pmflxr(:,1:klev)) 748 ENDIF 749 750 IF (o_pr_con_i%flag(iff)<=lev_files(iff)) THEN 751 CALL histwrite_phy(nid_files(iff), 752 s o_pr_con_i%name,itau_w,pmflxs(:,1:klev)) 753 ENDIF 754 755 IF (o_pr_lsc_l%flag(iff)<=lev_files(iff)) THEN 756 CALL histwrite_phy(nid_files(iff), 757 s o_pr_lsc_l%name,itau_w,prfl(:,1:klev)) 758 ENDIF 759 760 IF (o_pr_lsc_i%flag(iff)<=lev_files(iff)) THEN 761 CALL histwrite_phy(nid_files(iff), 762 s o_pr_lsc_i%name,itau_w,psfl(:,1:klev)) 763 ENDIF 764 763 765 764 766 IF (o_rh2m%flag(iff)<=lev_files(iff)) THEN … … 831 833 ENDIF 832 834 835 ! OD550 per species 836 IF (new_aod .and. (.not. aerosol_couple)) THEN 837 DO naero = 1, naero_spc 838 IF (o_tausumaero(naero)%flag(iff)<=lev_files(iff)) THEN 839 CALL histwrite_phy(nid_files(iff), 840 $ o_tausumaero(naero)%name,itau_w, 841 $ tausum_aero(:,2,naero) ) 842 ENDIF 843 END DO 844 ENDIF 845 833 846 IF (ok_ade) THEN 834 IF (o_topswad%flag(iff)<=lev_files(iff)) THEN 835 CALL histwrite_phy(nid_files(iff),o_topswad%name,itau_w,topswad) 836 ENDIF 837 IF (o_solswad%flag(iff)<=lev_files(iff)) THEN 838 CALL histwrite_phy(nid_files(iff),o_solswad%name,itau_w,solswad) 839 ENDIF 847 IF (o_topswad%flag(iff)<=lev_files(iff)) THEN 848 CALL histwrite_phy(nid_files(iff),o_topswad%name,itau_w, 849 $ topswad_aero) 850 ENDIF 851 IF (o_solswad%flag(iff)<=lev_files(iff)) THEN 852 CALL histwrite_phy(nid_files(iff),o_solswad%name,itau_w, 853 $ solswad_aero) 854 ENDIF 855 856 !====MS forcing diagnostics 857 if (new_aod) then 858 IF (o_swtoaas_nat%flag(iff)<=lev_files(iff)) THEN 859 CALL histwrite_phy(nid_files(iff),o_swtoaas_nat%name,itau_w, 860 $ topsw_aero(:,1)) 861 ENDIF 862 863 IF (o_swsrfas_nat%flag(iff)<=lev_files(iff)) THEN 864 CALL histwrite_phy(nid_files(iff),o_swsrfas_nat%name,itau_w, 865 $ solsw_aero(:,1)) 866 ENDIF 867 868 IF (o_swtoacs_nat%flag(iff)<=lev_files(iff)) THEN 869 CALL histwrite_phy(nid_files(iff),o_swtoacs_nat%name,itau_w, 870 $ topsw0_aero(:,1)) 871 ENDIF 872 873 IF (o_swsrfcs_nat%flag(iff)<=lev_files(iff)) THEN 874 CALL histwrite_phy(nid_files(iff),o_swsrfcs_nat%name,itau_w, 875 $ solsw0_aero(:,1)) 876 ENDIF 877 878 !ant 879 IF (o_swtoaas_ant%flag(iff)<=lev_files(iff)) THEN 880 CALL histwrite_phy(nid_files(iff),o_swtoaas_ant%name,itau_w, 881 $ topsw_aero(:,2)) 882 ENDIF 883 884 IF (o_swsrfas_ant%flag(iff)<=lev_files(iff)) THEN 885 CALL histwrite_phy(nid_files(iff),o_swsrfas_ant%name,itau_w, 886 $ solsw_aero(:,2)) 887 ENDIF 888 889 IF (o_swtoacs_ant%flag(iff)<=lev_files(iff)) THEN 890 CALL histwrite_phy(nid_files(iff),o_swtoacs_ant%name,itau_w, 891 $ topsw0_aero(:,2)) 892 ENDIF 893 894 IF (o_swsrfcs_ant%flag(iff)<=lev_files(iff)) THEN 895 CALL histwrite_phy(nid_files(iff),o_swsrfcs_ant%name,itau_w, 896 $ solsw0_aero(:,2)) 897 ENDIF 898 899 !cf 900 901 if (.not. aerosol_couple) then 902 IF (o_swtoacf_nat%flag(iff)<=lev_files(iff)) THEN 903 CALL histwrite_phy(nid_files(iff),o_swtoacf_nat%name,itau_w, 904 $ topswcf_aero(:,1)) 905 ENDIF 906 907 IF (o_swsrfcf_nat%flag(iff)<=lev_files(iff)) THEN 908 CALL histwrite_phy(nid_files(iff),o_swsrfcf_nat%name,itau_w, 909 $ solswcf_aero(:,1)) 910 ENDIF 911 912 IF (o_swtoacf_ant%flag(iff)<=lev_files(iff)) THEN 913 CALL histwrite_phy(nid_files(iff),o_swtoacf_ant%name,itau_w, 914 $ topswcf_aero(:,2)) 915 ENDIF 916 917 IF (o_swsrfcf_ant%flag(iff)<=lev_files(iff)) THEN 918 CALL histwrite_phy(nid_files(iff),o_swsrfcf_ant%name,itau_w, 919 $ solswcf_aero(:,2)) 920 ENDIF 921 922 IF (o_swtoacf_zero%flag(iff)<=lev_files(iff)) THEN 923 CALL histwrite_phy(nid_files(iff),o_swtoacf_zero%name,itau_w, 924 $ topswcf_aero(:,3)) 925 ENDIF 926 927 IF (o_swsrfcf_zero%flag(iff)<=lev_files(iff)) THEN 928 CALL histwrite_phy(nid_files(iff),o_swsrfcf_zero%name,itau_w, 929 $ solswcf_aero(:,3)) 930 ENDIF 931 endif 932 933 endif ! new_aod 934 !====MS forcing diagnostics 935 840 936 ENDIF 841 937 842 938 IF (ok_aie) THEN 843 IF (o_topswai%flag(iff)<=lev_files(iff)) THEN 844 CALL histwrite_phy(nid_files(iff),o_topswai%name,itau_w,topswai) 845 ENDIF 846 IF (o_solswai%flag(iff)<=lev_files(iff)) THEN 847 CALL histwrite_phy(nid_files(iff),o_solswai%name,itau_w,solswai) 848 ENDIF 939 IF (o_topswai%flag(iff)<=lev_files(iff)) THEN 940 CALL histwrite_phy(nid_files(iff),o_topswai%name,itau_w, 941 $ topswai_aero) 942 ENDIF 943 IF (o_solswai%flag(iff)<=lev_files(iff)) THEN 944 CALL histwrite_phy(nid_files(iff),o_solswai%name,itau_w, 945 $ solswai_aero) 946 ENDIF 849 947 ENDIF 850 948 … … 908 1006 909 1007 IF (o_ozone%flag(iff)<=lev_files(iff)) THEN 910 DO k=1, klev911 DO i=1, klon912 zx_tmp_fi3d(i,k)=wo(i,k)*RG/46.6968913 $ /(paprs(i,k)-paprs(i,k+1)) 914 $ *(paprs(i,1)/101325.0)915 ENDDO !i916 ENDDO !k917 CALL histwrite_phy(nid_files(iff),o_ozone%name,itau_w,zx_tmp_fi3d)1008 CALL histwrite_phy(nid_files(iff), o_ozone%name, itau_w, 1009 $ wo(:, :, 1) * dobson_u * 1e3 / zmasse / rmo3 * rmd) 1010 ENDIF 1011 1012 IF (o_ozone_light%flag(iff)<=lev_files(iff) .and. 1013 $ read_climoz == 2) THEN 1014 CALL histwrite_phy(nid_files(iff), o_ozone_light%name, itau_w, 1015 $ wo(:, :, 2) * dobson_u * 1e3 / zmasse / rmo3 * rmd) 918 1016 ENDIF 919 1017 -
LMDZ4/trunk/libf/phylmd/phys_state_var_mod.F90
r1054 r1279 11 11 INTEGER, PARAMETER :: napisccp=1 12 12 INTEGER, SAVE :: radpas 13 REAL, SAVE :: dtime, co2_ppm_etat0,solaire_etat013 REAL, SAVE :: dtime, solaire_etat0 14 14 !$OMP THREADPRIVATE(radpas) 15 !$OMP THREADPRIVATE(dtime, co2_ppm_etat0,solaire_etat0)15 !$OMP THREADPRIVATE(dtime, solaire_etat0) 16 16 17 17 REAL, ALLOCATABLE, SAVE :: rlat(:), rlon(:), pctsrf(:,:) … … 202 202 REAL,ALLOCATABLE,SAVE :: albsol1(:), albsol2(:) 203 203 !$OMP THREADPRIVATE(albsol1,albsol2) 204 REAL,ALLOCATABLE,SAVE :: wo(:,:) 205 !$OMP THREADPRIVATE(wo) 206 ! 204 205 REAL, ALLOCATABLE, SAVE:: wo(:, :, :) 206 ! column-density of ozone in a layer, in kilo-Dobsons 207 ! Third dimension has size 1 or 2. 208 ! "wo(:, :, 1)" is for the average day-night field, 209 ! "wo(:, :, 2)" is for daylight time. 210 !$OMP THREADPRIVATE(wo) 211 207 212 ! heat : chauffage solaire 208 213 ! heat0: chauffage solaire ciel clair … … 255 260 !$OMP THREADPRIVATE(snow_con) 256 261 ! 257 ! sulfate_pi : SO4 aerosol concentration [ug/m3] (pre-industrial value)258 259 REAL,SAVE,ALLOCATABLE :: sulfate_pi(:, :)260 !$OMP THREADPRIVATE(sulfate_pi)261 262 REAL,SAVE,ALLOCATABLE :: rlonPOS(:) 262 263 !$OMP THREADPRIVATE(rlonPOS) … … 269 270 ! ok_aie=T -> 270 271 ! ok_ade=T -AIE=topswai-topswad 271 ! 272 ! ok_ade=F -AIE=topswai-topsw 272 273 ! 273 274 !topswad, solswad : Aerosol direct effect … … 277 278 REAL,SAVE,ALLOCATABLE :: topswai(:), solswai(:) 278 279 !$OMP THREADPRIVATE(topswai,solswai) 279 REAL,SAVE,ALLOCATABLE :: tau_ae(:,:,:), piz_ae(:,:,:) 280 !$OMP THREADPRIVATE(tau_ae,piz_ae) 281 REAL,SAVE,ALLOCATABLE :: cg_ae(:,:,:) 282 !$OMP THREADPRIVATE(cg_ae) 283 284 ! Les variables suivants uniquement pour un configuration avec INCA 285 ! topswad_inca, solswad_inca : Aerosol direct effect 286 REAL,SAVE,ALLOCATABLE :: topswad_inca(:), solswad_inca(:) 287 !$OMP THREADPRIVATE(topswad_inca,solswad_inca) 288 ! topswad0_inca, solswad0_inca : Aerosol direct effect 289 REAL,SAVE,ALLOCATABLE :: topswad0_inca(:), solswad0_inca(:) 290 !$OMP THREADPRIVATE(topswad0_inca,solswad0_inca) 291 ! topswai_inca, solswai_inca : Aerosol indirect effect 292 REAL,SAVE,ALLOCATABLE :: topswai_inca(:), solswai_inca(:) 293 !$OMP THREADPRIVATE(topswai_inca,solswai_inca) 294 REAL,SAVE,ALLOCATABLE :: topsw_inca(:,:), solsw_inca(:,:) 295 !$OMP THREADPRIVATE(topsw_inca,solsw_inca) 296 REAL,SAVE,ALLOCATABLE :: topsw0_inca(:,:), solsw0_inca(:,:) 297 !$OMP THREADPRIVATE(topsw0_inca,solsw0_inca) 298 REAL,SAVE,ALLOCATABLE :: tau_inca(:,:,:,:) 299 !$OMP THREADPRIVATE(tau_inca) 300 REAL,SAVE,ALLOCATABLE :: piz_inca(:,:,:,:) 301 !$OMP THREADPRIVATE(piz_inca) 302 REAL,SAVE,ALLOCATABLE :: cg_inca(:,:,:,:) 303 !$OMP THREADPRIVATE(cg_inca) 280 281 REAL,SAVE,ALLOCATABLE :: tau_aero(:,:,:,:), piz_aero(:,:,:,:), cg_aero(:,:,:,:) 282 !$OMP THREADPRIVATE(tau_aero, piz_aero, cg_aero) 304 283 REAL,SAVE,ALLOCATABLE :: ccm(:,:,:) 305 284 !$OMP THREADPRIVATE(ccm) … … 308 287 309 288 !====================================================================== 310 SUBROUTINE phys_state_var_init 289 SUBROUTINE phys_state_var_init(read_climoz) 311 290 use dimphy 291 use aero_mod 312 292 IMPLICIT NONE 293 294 integer, intent(in):: read_climoz 295 ! read ozone climatology 296 ! Allowed values are 0, 1 and 2 297 ! 0: do not read an ozone climatology 298 ! 1: read a single ozone climatology that will be used day and night 299 ! 2: read two ozone climatologies, the average day and night 300 ! climatology and the daylight climatology 301 313 302 #include "indicesol.h" 314 303 #include "control.h" … … 388 377 ALLOCATE(paire_ter(klon)) 389 378 ALLOCATE(albsol1(klon), albsol2(klon)) 390 ALLOCATE(wo(klon,klev)) 379 380 if (read_climoz <= 1) then 381 ALLOCATE(wo(klon,klev, 1)) 382 else 383 ! read_climoz == 2 384 ALLOCATE(wo(klon,klev, 2)) 385 end if 386 391 387 ALLOCATE(clwcon0(klon,klev),rnebcon0(klon,klev)) 392 388 ALLOCATE(heat(klon,klev), heat0(klon,klev)) … … 402 398 ALLOCATE(ibas_con(klon), itop_con(klon)) 403 399 ALLOCATE(rain_con(klon), snow_con(klon)) 404 !405 ALLOCATE(sulfate_pi(klon, klev))406 400 ALLOCATE(rlonPOS(klon)) 407 401 ALLOCATE(newsst(klon)) … … 409 403 ALLOCATE(topswad(klon), solswad(klon)) 410 404 ALLOCATE(topswai(klon), solswai(klon)) 411 ALLOCATE(tau_ae(klon,klev,2), piz_ae(klon,klev,2)) 412 ALLOCATE(cg_ae(klon,klev,2)) 413 414 IF (config_inca /= 'none') THEN 415 ALLOCATE(topswad_inca(klon), solswad_inca(klon)) 416 ALLOCATE(topswad0_inca(klon), solswad0_inca(klon)) 417 ALLOCATE(topswai_inca(klon), solswai_inca(klon)) 418 ALLOCATE(topsw_inca(klon,9), solsw_inca(klon,9)) 419 ALLOCATE(topsw0_inca(klon,9), solsw0_inca(klon,9)) 420 END IF 421 ! Following 4 variables are needed only by INCA but must be 422 ! allocated as they exist in the phytrac argument list 423 ALLOCATE(tau_inca(klon,klev,9,2)) 424 ALLOCATE(piz_inca(klon,klev,9,2)) 425 ALLOCATE(cg_inca(klon,klev,9,2)) 426 ALLOCATE(ccm(klon,klev,2)) 405 ALLOCATE(tau_aero(klon,klev,naero_grp,nbands),piz_aero(klon,klev,naero_grp,nbands),cg_aero(klon,klev,naero_grp,nbands)) 406 ALLOCATE(ccm(klon,klev,nbands)) 427 407 428 408 END SUBROUTINE phys_state_var_init … … 505 485 deallocate(ibas_con, itop_con) 506 486 deallocate(rain_con, snow_con) 507 !508 deallocate(sulfate_pi)509 487 deallocate(rlonPOS) 510 488 deallocate(newsst) … … 512 490 deallocate(topswad, solswad) 513 491 deallocate(topswai, solswai) 514 515 deallocate(tau_ae, piz_ae) 516 deallocate(cg_ae) 517 518 IF (config_inca /= 'none') THEN 519 deallocate(topswad_inca, solswad_inca) 520 deallocate(topswad0_inca, solswad0_inca) 521 deallocate(topswai_inca, solswai_inca) 522 deallocate(topsw_inca, solsw_inca) 523 deallocate(topsw0_inca, solsw0_inca) 524 END IF 525 deallocate(tau_inca) 526 deallocate(piz_inca) 527 deallocate(cg_inca) 492 deallocate(tau_aero,piz_aero,cg_aero) 528 493 deallocate(ccm) 529 494 -
LMDZ4/trunk/libf/phylmd/physiq.F
r1149 r1279 1 c 1 ! $Id$ 2 ! 2 3 c#define IO_DEBUG 3 4 4 5 SUBROUTINE physiq (nlon,nlev, 5 . debut,lafin, rjourvrai,gmtime,pdtphys,6 . debut,lafin,jD_cur, jH_cur,pdtphys, 6 7 . paprs,pplay,pphi,pphis,presnivs,clesphy0, 7 8 . u,v,t,qx, … … 11 12 . , PVteta) 12 13 13 USE ioipsl 14 USE ioipsl, only: histbeg, histvert, histdef, histend, histsync, 15 $ histwrite, ju2ymds, ymds2ju, ioget_year_len 14 16 USE comgeomphy 17 USE phys_cal_mod 15 18 USE write_field_phy 16 19 USE dimphy … … 28 31 USE fonte_neige_mod, ONLY : fonte_neige_get_vars 29 32 USE phys_output_mod 33 use open_climoz_m, only: open_climoz ! ozone climatology from a file 34 use regr_pr_av_m, only: regr_pr_av 35 use netcdf95, only: nf95_close 36 use mod_phys_lmdz_mpi_data, only: is_mpi_root 37 USE aero_mod 38 use ozonecm_m, only: ozonecm ! ozone of J.-F. Royer 39 use conf_phys_m, only: conf_phys 40 use radlwsw_m, only: radlwsw 30 41 31 42 IMPLICIT none … … 50 61 c 51 62 c nlon----input-I-nombre de points horizontaux 52 c nlev----input-I-nombre de couches verticales 63 c nlev----input-I-nombre de couches verticales, doit etre egale a klev 53 64 c debut---input-L-variable logique indiquant le premier passage 54 65 c lafin---input-L-variable logique indiquant le dernier passage 55 c rjour---input-R-numero du jour de l'experience56 c gmtime--input-R-temps universel dans la journee (0 a 86400 s)66 c jD_cur -R-jour courant a l'appel de la physique (jour julien) 67 c jH_cur -R-heure courante a l'appel de la physique (jour julien) 57 68 c pdtphys-input-R-pas d'integration pour la physique (seconde) 58 69 c paprs---input-R-pression pour chaque inter-couche (en Pa) … … 104 115 PARAMETER (ok_stratus=.FALSE.) 105 116 c====================================================================== 106 LOGICAL, SAVE :: rnpb=.TRUE.107 c$OMP THREADPRIVATE(rnpb)108 117 REAL amn, amx 109 118 INTEGER igout … … 181 190 INTEGER nlon 182 191 INTEGER nlev 183 REAL rjourvrai184 REAL gmtime 192 REAL, intent(in):: jD_cur, jH_cur 193 185 194 REAL pdtphys 186 195 LOGICAL debut, lafin … … 279 288 real T2STD(klon,nlevSTD) 280 289 c 281 #include "radepsi.h"282 290 #include "radopt.h" 283 291 c … … 523 531 REAL clesphy0( longcles ) 524 532 c 525 c Variables quasi-arguments526 c527 REAL xjour528 SAVE xjour529 c$OMP THREADPRIVATE(xjour)530 c531 c532 533 c Variables propres a la physique 533 c534 c INTEGER radpas535 c SAVE radpas ! frequence d'appel rayonnement536 ccccccccc$OMP THREADPRIVATE(radpas)537 c538 cc INTEGER iflag_con539 c540 534 INTEGER itap 541 535 SAVE itap ! compteur pour la physique … … 705 699 c Conditions aux limites 706 700 c 707 INTEGER julien 701 ! 702 REAL :: day_since_equinox 703 ! Date de l'equinoxe de printemps 704 INTEGER, parameter :: mth_eq=3, day_eq=21 705 REAL :: jD_eq 706 707 LOGICAL, parameter :: new_orbit = .true. 708 708 709 c 709 710 INTEGER lmt_pas 710 711 SAVE lmt_pas ! frequence de mise a jour 711 712 c$OMP THREADPRIVATE(lmt_pas) 713 real zmasse(klon, llm) 714 C (column-density of mass of air in a cell, in kg m-2) 715 real, parameter:: dobson_u = 2.1415e-05 ! Dobson unit, in kg m-2 712 716 713 717 cIM sorties … … 731 735 EXTERNAL hgardfou ! verifier les temperatures 732 736 EXTERNAL nuage ! calculer les proprietes radiatives 733 EXTERNAL o3cm ! initialiser l'ozone737 CC EXTERNAL o3cm ! initialiser l'ozone 734 738 EXTERNAL orbite ! calculer l'orbite terrestre 735 EXTERNAL ozonecm ! prescrire l'ozone736 739 EXTERNAL phyetat0 ! lire l'etat initial de la physique 737 740 EXTERNAL phyredem ! ecrire l'etat de redemarrage de la physique 738 EXTERNAL radlwsw ! rayonnements solaire et infrarouge739 741 EXTERNAL suphel ! initialiser certaines constantes 740 742 EXTERNAL transp ! transport total de l'eau et de l'energie … … 877 879 c 878 880 REAL ratqss(klon,klev),ratqsc(klon,klev) 879 real ratqsbas,ratqshaut 880 save ratqsbas,ratqshaut 881 c$OMP THREADPRIVATE(ratqsbas,ratqshaut )881 real ratqsbas,ratqshaut,tau_ratqs 882 save ratqsbas,ratqshaut,tau_ratqs 883 c$OMP THREADPRIVATE(ratqsbas,ratqshaut,tau_ratqs) 882 884 real zpt_conv(klon,klev) 883 885 … … 887 889 logical ok_newmicro 888 890 save ok_newmicro 891 real ref_liq(klon,klev), ref_ice(klon,klev) 889 892 c$OMP THREADPRIVATE(ok_newmicro) 890 893 save fact_cldcon,facttemps … … 972 975 REAL zx_tmp_fiNC(klon,nlevSTD) 973 976 c#endif 974 REAL *8zx_tmp2_fi3d(klon,klev) ! variable temporaire pour champs 3D977 REAL(KIND=8) zx_tmp2_fi3d(klon,klev) ! variable temporaire pour champs 3D 975 978 REAL zx_tmp_2d(iim,jjmp1), zx_tmp_3d(iim,jjmp1,klev) 976 979 REAL zx_lon(iim,jjmp1), zx_lat(iim,jjmp1) … … 1056 1059 CHARACTER*40 t2mincels, t2maxcels !t2m min., t2m max 1057 1060 CHARACTER*40 tinst, tave, typeval 1058 cjq Aerosol effects (Johannes Quaas, 27/11/2003)1059 REAL sulfate(klon, klev) ! SO4 aerosol concentration [ug/m3]1060 1061 1061 REAL cldtaupi(klon,klev) ! Cloud optical thickness for pre-industrial (pi) aerosols 1062 1062 … … 1067 1067 1068 1068 ! Aerosol optical properties 1069 1070 ! Aerosol optical properties by INCA model 1071 CHARACTER*4 :: rfname(9) 1072 REAL aerindex(klon) ! POLDER aerosol index 1073 1069 CHARACTER*4, DIMENSION(naero_grp) :: rfname 1070 REAL, DIMENSION(klon) :: aerindex ! POLDER aerosol index 1071 REAL, DIMENSION(klon,klev) :: mass_solu_aero ! total mass concentration for all soluble aerosols[ug/m3] 1072 REAL, DIMENSION(klon,klev) :: mass_solu_aero_pi ! - " - (pre-industrial value) 1073 INTEGER :: naero ! aerosol species 1074 1074 1075 ! Parameters 1075 1076 LOGICAL ok_ade, ok_aie ! Apply aerosol (in)direct effects or not … … 1080 1081 ! false : lecture des aerosol dans un fichier 1081 1082 c$OMP THREADPRIVATE(aerosol_couple) 1082 1083 INTEGER, SAVE :: flag_aerosol 1084 c$OMP THREADPRIVATE(flag_aerosol) 1085 LOGICAL, SAVE :: new_aod 1086 c$OMP THREADPRIVATE(new_aod) 1087 1083 1088 c 1084 1089 c Declaration des constantes et des fonctions thermodynamiques … … 1086 1091 LOGICAL,SAVE :: first=.true. 1087 1092 c$OMP THREADPRIVATE(first) 1093 1094 integer iunit 1095 1096 integer, save:: read_climoz ! read ozone climatology 1097 C Allowed values are 0, 1 and 2 1098 C 0: do not read an ozone climatology 1099 C 1: read a single ozone climatology that will be used day and night 1100 C 2: read two ozone climatologies, the average day and night 1101 C climatology and the daylight climatology 1102 1103 integer, save:: ncid_climoz ! NetCDF file containing ozone climatologies 1104 1105 real, pointer, save:: press_climoz(:) 1106 ! edges of pressure intervals for ozone climatologies, in Pa, in strictly 1107 ! ascending order 1108 1109 integer, save:: co3i = 0 1110 ! time index in NetCDF file of current ozone fields 1111 c$OMP THREADPRIVATE(co3i) 1112 1113 integer ro3i 1114 ! required time index in NetCDF file for the ozone fields, between 1 1115 ! and 360 1116 1088 1117 #include "YOMCST.h" 1089 1118 #include "YOETHF.h" … … 1096 1125 cIM 100106 END : pouvoir sortir les ctes de la physique 1097 1126 c 1127 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1128 c Declarations pour Simulateur COSP 1129 c============================================================ 1130 real :: mr_ozone(klon,klev) 1098 1131 c====================================================================== 1099 1132 ! Ecriture eventuelle d'un profil verticale en entree de la physique. … … 1106 1139 write(lunout,*) 'DEBUT DE PHYSIQ !!!!!!!!!!!!!!!!!!!!' 1107 1140 write(lunout,*) 1108 s 'nlon, nlev,nqtot,debut,lafin,rjourvrai,gmtime,pdtphys'1141 s 'nlon,klev,nqtot,debut,lafin, jD_cur, jH_cur,pdtphys' 1109 1142 write(lunout,*) 1110 s nlon, nlev,nqtot,debut,lafin,rjourvrai,gmtime,pdtphys1111 1112 write(lunout,*) 'pap ers, play, phi, u, v, t, omega'1113 do k=1, nlev1143 s nlon,klev,nqtot,debut,lafin, jD_cur, jH_cur,pdtphys 1144 1145 write(lunout,*) 'paprs, play, phi, u, v, t' 1146 do k=1,klev 1114 1147 write(lunout,*) paprs(igout,k),pplay(igout,k),pphi(igout,k), 1115 s u(igout,k),v(igout,k),t(igout,k) ,omega(igout,k)1148 s u(igout,k),v(igout,k),t(igout,k) 1116 1149 enddo 1117 1150 write(lunout,*) 'ovap (g/kg), oliq (g/kg)' 1118 do k=1, nlev1151 do k=1,klev 1119 1152 write(lunout,*) qx(igout,k,1)*1000,qx(igout,k,2)*1000. 1120 1153 enddo … … 1132 1165 1133 1166 torsfc=0. 1167 forall (k=1: llm) zmasse(:, k) = (paprs(:, k)-paprs(:, k+1)) / rg 1134 1168 1135 1169 if (first) then … … 1140 1174 print*, 'Allocation des variables locales et sauvegardees' 1141 1175 call phys_local_var_init 1142 call phys_state_var_init 1176 c appel a la lecture du run.def physique 1177 call conf_phys(ok_journe, ok_mensuel, 1178 . ok_instan, ok_hf, 1179 . ok_LES, 1180 . solarlong0,seuil_inversion, 1181 . fact_cldcon, facttemps,ok_newmicro,iflag_radia, 1182 . iflag_cldcon,iflag_ratqs,ratqsbas,ratqshaut,tau_ratqs, 1183 . ok_ade, ok_aie, aerosol_couple, 1184 . flag_aerosol, new_aod, 1185 . bl95_b0, bl95_b1, 1186 . iflag_thermals,nsplit_thermals,tau_thermals, 1187 . iflag_thermals_ed,iflag_thermals_optflux, 1188 c nv flags pour la convection et les poches froides 1189 . iflag_coupl,iflag_clos,iflag_wake, read_climoz) 1190 call phys_state_var_init(read_climoz) 1143 1191 print*, '=================================================' 1144 1192 … … 1156 1204 first=.false. 1157 1205 1158 endif ! fi srt1206 endif ! first 1159 1207 1160 1208 modname = 'physiq' … … 1175 1223 1176 1224 c====================================================================== 1177 xjour = rjourvrai 1225 ! Gestion calendrier : mise a jour du module phys_cal_mod 1226 ! 1227 CALL phys_cal_update(jD_cur,jH_cur) 1228 1178 1229 c 1179 1230 c Si c'est le debut, il faut initialiser plusieurs choses … … 1181 1232 c 1182 1233 IF (debut) THEN 1183 C1184 1234 !rv 1185 1235 cCRinitialisation de wght_th et lalim_conv pour la definition de la couche alimentation … … 1190 1240 u10m(:,:)=0. 1191 1241 v10m(:,:)=0. 1192 piz_ae(:,:,:)=0.1193 tau_ae(:,:,:)=0.1194 cg_ae(:,:,:)=0.1195 1242 rain_con(:)=0. 1196 1243 snow_con(:)=0. 1197 bl95_b0=0.1198 bl95_b1=0.1199 1244 topswai(:)=0. 1200 1245 topswad(:)=0. … … 1205 1250 wmax_th(:)=0. 1206 1251 tau_overturning_th(:)=0. 1252 1207 1253 IF (config_inca /= 'none') THEN 1208 tau_inca(:,:,:,:) = 0. 1209 piz_inca(:,:,:,:) = 0. 1210 cg_inca(:,:,:,:) = 0. 1211 ccm(:,:,:) = 0. 1212 topswai_inca(:) = 0. 1213 topswad_inca(:) = 0. 1214 topswad0_inca(:) = 0. 1215 topsw_inca(:,:) = 0. 1216 topsw0_inca(:,:) = 0. 1217 solswai_inca(:) = 0. 1218 solswad_inca(:) = 0. 1219 solswad0_inca(:) = 0. 1220 solsw_inca(:,:) = 0. 1221 solsw0_inca(:,:) = 0. 1254 ! jg : initialisation jusqu'au ces variables sont dans restart 1255 ccm(:,:,:) = 0. 1256 tau_aero(:,:,:,:) = 0. 1257 piz_aero(:,:,:,:) = 0. 1258 cg_aero(:,:,:,:) = 0. 1222 1259 END IF 1223 1260 … … 1230 1267 IF (ip_ebil_phy.ge.1) d_h_vcol_phy=0. 1231 1268 c 1232 c appel a la lecture du run.def physique1233 c1234 call conf_phys(ok_journe, ok_mensuel,1235 . ok_instan, ok_hf,1236 . ok_LES,1237 . solarlong0,seuil_inversion,1238 . fact_cldcon, facttemps,ok_newmicro,iflag_radia,1239 . iflag_cldcon,iflag_ratqs,ratqsbas,ratqshaut,1240 . ok_ade, ok_aie, aerosol_couple,1241 . bl95_b0, bl95_b1,1242 . iflag_thermals,nsplit_thermals,tau_thermals,1243 . iflag_thermals_ed,iflag_thermals_optflux,1244 cnv flags pour la convection et les poches froides1245 . iflag_coupl,iflag_clos,iflag_wake)1246 1247 1269 print*,'iflag_coupl,iflag_clos,iflag_wake', 1248 1270 . iflag_coupl,iflag_clos,iflag_wake … … 1377 1399 ENDIF 1378 1400 1379 rugoro=0. 1401 DO i=1,klon 1402 rugoro(i) = f_rugoro * MAX(1.0e-05, zstd(i)*zsig(i)/2.0) 1403 ENDDO 1404 1380 1405 c34EK 1381 1406 IF (ok_orodr) THEN 1382 1383 rugoro=0.1384 1407 1385 1408 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! … … 1413 1436 . lmt_pas 1414 1437 c 1415 cIM200505 ecrit_mth = NINT(86400./dtime *ecritphy) ! tous les ecritphy jours1416 c IF (ok_mensuel) THEN1417 c WRITE(lunout,*)'La frequence de sortie mensuelle est de ',1418 c . ecrit_mth1419 c ENDIF1420 c ecrit_day = NINT(86400./dtime *1.0) ! tous les jours1421 c IF (ok_journe) THEN1422 c WRITE(lunout,*)'La frequence de sortie journaliere est de ',1423 c . ecrit_day1424 c ENDIF1425 cIM 130904 BEG1426 cIM 080205 ecrit_hf = 86400./dtime *0.25 ! toutes les 6h1427 cIM 1703051428 c ecrit_hf = 86400./dtime/12. ! toutes les 2h1429 cIM 2303051430 cIM200505 ecrit_hf = 86400./dtime *0.25 ! toutes les 6h1431 c1432 cIM200505 ecrit_hf2mth = ecrit_day/ecrit_hf*301433 c1434 cIM200505 IF (ok_journe) THEN1435 cIM200505 WRITE(lunout,*)'La frequence de sortie hf est de ',1436 cIM200505 . ecrit_hf1437 cIM200505 ENDIF1438 cIM 130904 END1439 ccc ecrit_ins = NINT(86400./dtime *0.5) ! 2 fois par jour1440 ccc ecrit_ins = NINT(86400./dtime *0.25) ! 4 fois par jour1441 c ecrit_ins = NINT(86400./dtime/48.) ! a chaque pas de temps ==> PB. dans time_counter pour 1mois1442 c ecrit_ins = NINT(86400./dtime/12.) ! toutes les deux heures1443 cIM200505 ecrit_ins = NINT(86400./dtime/8.) ! toutes les trois heures1444 cIM200505 IF (ok_instan) THEN1445 cIM200505 WRITE(lunout,*)'La frequence de sortie instant. est de ',1446 cIM200505 . ecrit_ins1447 cIM200505 ENDIF1448 cIM200505 ecrit_reg = NINT(86400./dtime *0.25) ! 4 fois par jour1449 cIM200505 IF (ok_region) THEN1450 cIM200505 WRITE(lunout,*)'La frequence de sortie region est de ',1451 cIM200505 . ecrit_reg1452 cIM200505 ENDIF1453 cIM 030306 BEG1454 cIM ecrit_hf2mth = nombre de pas de temps de calcul de hf par mois apres lequel on ecrit1455 cIM : ne pas modifier ecrit_hf2mth1456 c1457 cIM 250308bad guide ecrit_hf2mth = 30*1/ecrit_hf1458 ecrit_hf2mth = ecrit_mth/ecrit_hf1459 c ecrit_ins en secondes, chaque pas de temps de la physique1460 ecrit_ins = dtime1461 cIM on passe les frequences de jours en secondes : ecrit_ins, ecrit_hf, ecrit_day, ecrit_mth, ecrit_tra, ecrit_reg1462 ecrit_hf = ecrit_hf * un_jour1463 !IM1464 IF(ecrit_day.LE.1.) THEN1465 ecrit_day = ecrit_day * un_jour !en secondes1466 ENDIF1467 !IM1468 ecrit_mth = ecrit_mth * un_jour1469 ecrit_reg = ecrit_reg * un_jour1470 ecrit_tra = ecrit_tra * un_jour1471 ecrit_ISCCP = ecrit_ISCCP * un_jour1472 ecrit_LES = ecrit_LES * un_jour1473 c1474 PRINT*,'physiq ecrit_ hf day mth reg tra ISCCP hf2mth',1475 . ecrit_hf,ecrit_day,ecrit_mth,ecrit_reg,ecrit_tra,ecrit_ISCCP,1476 . ecrit_hf2mth1477 1438 cIM 030306 END 1478 1439 … … 1494 1455 c$OMP MASTER 1495 1456 call phys_output_open(jjmp1,nlevSTD,clevSTD,nbteta, 1496 & ctetaSTD,dtime, presnivs,ok_veget,1457 & ctetaSTD,dtime,ok_veget, 1497 1458 & type_ocean,iflag_pbl,ok_mensuel,ok_journe, 1498 & ok_hf,ok_instan,ok_LES,ok_ade,ok_aie) 1459 & ok_hf,ok_instan,ok_LES,ok_ade,ok_aie, 1460 & read_climoz, new_aod, aerosol_couple) 1499 1461 c$OMP END MASTER 1500 1462 c$OMP BARRIER … … 1514 1476 #endif 1515 1477 1478 cIM 250308bad guide ecrit_hf2mth = 30*1/ecrit_hf 1479 ecrit_hf2mth = ecrit_mth/ecrit_hf 1480 1481 ecrit_hf = ecrit_hf * un_jour 1482 !IM 1483 IF(ecrit_day.LE.1.) THEN 1484 ecrit_day = ecrit_day * un_jour !en secondes 1485 ENDIF 1486 !IM 1487 ecrit_mth = ecrit_mth * un_jour 1488 ecrit_ins = ecrit_ins * un_jour 1489 ecrit_reg = ecrit_reg * un_jour 1490 ecrit_tra = ecrit_tra * un_jour 1491 ecrit_ISCCP = ecrit_ISCCP * un_jour 1492 ecrit_LES = ecrit_LES * un_jour 1493 c 1494 PRINT*,'physiq ecrit_ hf day mth reg tra ISCCP hf2mth', 1495 . ecrit_hf,ecrit_day,ecrit_mth,ecrit_reg,ecrit_tra,ecrit_ISCCP, 1496 . ecrit_hf2mth 1497 cIM 030306 END 1498 1499 1516 1500 cXXXPB Positionner date0 pour initialisation de ORCHIDEE 1517 date0 = zjulian 1518 C date0 = day_ini 1501 date0 = jD_ref 1519 1502 WRITE(*,*) 'physiq date0 : ',date0 1520 1503 c … … 1534 1517 CALL VTe(VTphysiq) 1535 1518 CALL VTb(VTinca) 1536 iii = MOD(NINT(xjour),360) 1537 calday = FLOAT(iii) + gmtime 1538 WRITE(lunout,*) 'initial time ', xjour, calday 1519 ! iii = MOD(NINT(xjour),360) 1520 ! calday = FLOAT(iii) + jH_cur 1521 calday = FLOAT(days_elapsed) + jH_cur 1522 WRITE(lunout,*) 'initial time chemini', days_elapsed, calday 1539 1523 1540 1524 CALL chemini( … … 1550 1534 $ pdtphys, 1551 1535 $ annee_ref, 1552 $ day_ini) 1536 $ day_ref, 1537 $ itau_phy) 1553 1538 1554 1539 CALL VTe(VTinca) … … 1564 1549 call iniradia(klon,klev,paprs(1,1:klev+1)) 1565 1550 1551 C$omp single 1552 if (read_climoz >= 1) then 1553 call open_climoz(ncid_climoz, press_climoz) 1554 END IF 1555 C$omp end single 1566 1556 ENDIF 1567 1557 ! … … 1572 1562 ! 1573 1563 itap = itap + 1 1574 julien = MOD(NINT(xjour),360)1575 if (julien .eq. 0) julien = 3601576 1577 1564 ! 1578 1565 ! Update fraction of the sub-surfaces (pctsrf) and … … 1580 1567 ! on the surface fraction. 1581 1568 ! 1582 CALL change_srf_frac(itap, dtime, julien,1569 CALL change_srf_frac(itap, dtime, days_elapsed+1, 1583 1570 * pctsrf, falb1, falb2, ftsol, u10m, v10m, pbl_tke) 1584 1585 1571 1586 1572 ! Tendances bidons pour les processus qui n'affectent pas certaines … … 1731 1717 c Prescrire l'ozone et calculer l'albedo sur l'ocean. 1732 1718 c 1733 IF (MOD(itap-1,lmt_pas) .EQ. 0) THEN 1734 if(prt_level.ge.1) WRITE(lunout,*)' PHYS cond julien ',julien 1735 CALL ozonecm( FLOAT(julien), rlat, paprs, wo) 1719 if (read_climoz >= 1) then 1720 C Ozone from a file 1721 ! Update required ozone index: 1722 ro3i = int((days_elapsed + jh_cur - jh_1jan) 1723 $ / ioget_year_len(year_cur) * 360.) + 1 1724 if (ro3i == 361) ro3i = 360 1725 C (This should never occur, except perhaps because of roundup 1726 C error. See documentation.) 1727 if (ro3i /= co3i) then 1728 C Update ozone field: 1729 if (read_climoz == 1) then 1730 call regr_pr_av(ncid_climoz, (/"tro3"/), julien=ro3i, 1731 $ press_in_edg=press_climoz, paprs=paprs, v3=wo) 1732 else 1733 C read_climoz == 2 1734 call regr_pr_av(ncid_climoz, 1735 $ (/"tro3 ", "tro3_daylight"/), 1736 $ julien=ro3i, press_in_edg=press_climoz, paprs=paprs, 1737 $ v3=wo) 1738 end if 1739 ! Convert from mole fraction of ozone to column density of ozone in a 1740 ! cell, in kDU: 1741 forall (l = 1: read_climoz) wo(:, :, l) = wo(:, :, l) 1742 $ * rmo3 / rmd * zmasse / dobson_u / 1e3 1743 C (By regridding ozone values for LMDZ only once every 360th of 1744 C year, we have already neglected the variation of pressure in one 1745 C 360th of year. So do not recompute "wo" at each time step even if 1746 C "zmasse" changes a little.) 1747 co3i = ro3i 1748 end if 1749 elseif (MOD(itap-1,lmt_pas) == 0) THEN 1750 C Once per day, update ozone from Royer: 1751 wo(:, :, 1) = ozonecm(rlat, paprs, rjour=real(days_elapsed+1)) 1736 1752 ENDIF 1737 1753 c … … 1774 1790 ! doit donc etre placé avant radlwsw et pbl_surface 1775 1791 1792 ! calcul selon la routine utilisee pour les planetes 1793 if (new_orbit) then 1794 call ymds2ju(year_cur, mth_eq, day_eq,0., jD_eq) 1795 day_since_equinox = (jD_cur + jH_cur) - jD_eq 1796 ! day_since_equinox = (jD_cur) - jD_eq 1797 call solarlong(day_since_equinox, zlongi, dist) 1798 else 1799 ! calcul selon la routine utilisee pour l'AR4 1776 1800 ! choix entre calcul de la longitude solaire vraie ou valeur fixee a 1777 1801 ! solarlong0 1778 1779 if (solarlong0<-999.) then1780 CALL orbite(FLOAT(julien),zlongi,dist)1781 else1782 zlongi=solarlong0 ! longitude solaire vraie1783 dist=1. ! distance au soleil / moyenne1802 if (solarlong0<-999.) then 1803 CALL orbite(FLOAT(days_elapsed+1),zlongi,dist) 1804 else 1805 zlongi=solarlong0 ! longitude solaire vraie 1806 dist=1. ! distance au soleil / moyenne 1807 endif 1784 1808 endif 1785 1786 if(prt_level.ge.1) print*,'Longitude solaire ',zlongi,solarlong01809 if(prt_level.ge.1) & 1810 & write(lunout,*)'Longitude solaire ',zlongi,solarlong0,dist 1787 1811 1788 1812 ! Avec ou sans cycle diurne 1789 1813 IF (cycle_diurne) THEN 1790 1814 zdtime=dtime*FLOAT(radpas) ! pas de temps du rayonnement (s) 1791 CALL zenang(zlongi, gmtime,zdtime,rlat,rlon,rmu0,fract)1815 CALL zenang(zlongi,jH_cur,zdtime,rlat,rlon,rmu0,fract) 1792 1816 ELSE 1793 1817 CALL angle(zlongi, rlat, fract, rmu0) … … 1822 1846 1823 1847 CALL pbl_surface( 1824 e dtime, date0, itap, julien,1848 e dtime, date0, itap, days_elapsed+1, 1825 1849 e debut, lafin, 1826 1850 e rlon, rlat, rugoro, rmu0, … … 1933 1957 END DO 1934 1958 END DO 1959 if (prt_level.ge.1) write(lunout,*) 'omega(igout, :) = ', 1960 $ omega(igout, :) 1935 1961 1936 1962 IF (iflag_con.EQ.1) THEN … … 2119 2145 2120 2146 if (itop_con(i).gt.klev-3) then 2121 print*,'La convection monte trop haut ' 2122 print*,'itop_con(,',i,',)=',itop_con(i) 2147 if(prt_level >= 9) then 2148 write(lunout,*)'La convection monte trop haut ' 2149 write(lunout,*)'itop_con(,',i,',)=',itop_con(i) 2150 endif 2123 2151 endif 2124 2152 ENDDO … … 2519 2547 enddo 2520 2548 2521 ! les ratqs sont une conbinaison de ratqss et ratqsc 2522 ! 1800s, en dur pour le moment, est le temps de 2523 ! relaxation des ratqs 2524 2525 facteur=exp(-pdtphys/1800.) 2526 2527 print*,'WARNING ratqs a revoir ' 2549 ! les ratqs sont une combinaison de ratqss et ratqsc 2550 print*,'PHYLMD NOUVEAU TAU_RATQS ',tau_ratqs 2551 2552 if (tau_ratqs>1.e-10) then 2553 facteur=exp(-pdtphys/tau_ratqs) 2554 else 2555 facteur=0. 2556 endif 2528 2557 ratqs(:,:)=ratqsc(:,:)*(1.-facteur)+ratqs(:,:)*facteur 2529 ratqs(:,:)=sqrt(ratqs(:,:)**2+ratqss(:,:)**2) 2530 2558 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 2559 ! FH 22/09/2009 2560 ! La ligne ci-dessous faisait osciller le modele et donnait une solution 2561 ! assymptotique bidon et dépendant fortement du pas de temps. 2562 ! ratqs(:,:)=sqrt(ratqs(:,:)**2+ratqss(:,:)**2) 2563 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 2564 ratqs(:,:)=max(ratqs(:,:),ratqss(:,:)) 2531 2565 else 2532 2566 ! on ne prend que le ratqs stable pour fisrtilp … … 2658 2692 cjq - Johannes Quaas, 27/11/2003 (quaas@lmd.jussieu.fr) 2659 2693 IF (ok_ade.OR.ok_aie) THEN 2660 IF ( .NOT. aerosol_couple ) THEN 2661 ! Get sulfate aerosol distribution 2662 CALL readsulfate(rjourvrai, debut, sulfate) 2663 CALL readsulfate_preind(rjourvrai, debut, sulfate_pi) 2664 2665 ! Calculate aerosol optical properties (Olivier Boucher) 2666 CALL aeropt(pplay, paprs, t_seri, sulfate, rhcl, 2667 . tau_ae, piz_ae, cg_ae, aerindex) 2668 ENDIF 2694 IF (.NOT. aerosol_couple) 2695 & CALL readaerosol_optic( 2696 & debut, new_aod, flag_aerosol, itap, jD_cur-jD_ref, 2697 & pdtphys, pplay, paprs, t_seri, rhcl, presnivs, 2698 & mass_solu_aero, mass_solu_aero_pi, 2699 & tau_aero, piz_aero, cg_aero, 2700 & tausum_aero, tau3d_aero) 2669 2701 ELSE 2670 tau_ae(:,:,:)=0.02671 piz_ae(:,:,:)=0.0 2672 cg_ae(:,:,:)=0.0 2702 tau_aero(:,:,:,:) = 0. 2703 piz_aero(:,:,:,:) = 0. 2704 cg_aero(:,:,:,:) = 0. 2673 2705 ENDIF 2674 2706 … … 2791 2823 CALL VTe(VTphysiq) 2792 2824 CALL VTb(VTinca) 2793 calday = FLOAT( julien) + gmtime2825 calday = FLOAT(days_elapsed + 1) + jH_cur 2794 2826 2795 2827 IF (config_inca == 'aero') THEN 2796 2828 CALL AEROSOL_METEO_CALC( 2797 2829 $ calday,pdtphys,pplay,paprs,t,pmflxr,pmflxs, 2798 $ prfl,psfl,pctsrf,airephy, xjour,rlat,rlon,u10m,v10m)2830 $ prfl,psfl,pctsrf,airephy,rlat,rlon,u10m,v10m) 2799 2831 END IF 2800 2832 … … 2802 2834 2803 2835 CALL chemhook_begin (calday, 2804 $ julien,2805 $ gmtime,2836 $ days_elapsed+1, 2837 $ jH_cur, 2806 2838 $ pctsrf(1,1), 2807 2839 $ rlat, … … 2815 2847 $ u, 2816 2848 $ v, 2817 $ wo ,2849 $ wo(:, :, 1), 2818 2850 $ q_seri, 2819 2851 $ zxtsol, … … 2847 2879 2848 2880 IF (aerosol_couple) THEN 2849 sulfate(:,:)= ccm(:,:,1)2850 sulfate_pi(:,:) = ccm(:,:,2)2851 END IF2881 mass_solu_aero(:,:) = ccm(:,:,1) 2882 mass_solu_aero_pi(:,:) = ccm(:,:,2) 2883 END IF 2852 2884 2853 2885 if (ok_newmicro) then … … 2857 2889 . flwp, fiwp, flwc, fiwc, 2858 2890 e ok_aie, 2859 e sulfate, sulfate_pi,2891 e mass_solu_aero, mass_solu_aero_pi, 2860 2892 e bl95_b0, bl95_b1, 2861 s cldtaupi, re, fl )2893 s cldtaupi, re, fl, ref_liq, ref_ice) 2862 2894 else 2863 2895 CALL nuage (paprs, pplay, … … 2865 2897 . cldh, cldl, cldm, cldt, cldq, 2866 2898 e ok_aie, 2867 e sulfate, sulfate_pi,2899 e mass_solu_aero, mass_solu_aero_pi, 2868 2900 e bl95_b0, bl95_b1, 2869 2901 s cldtaupi, re, fl) … … 2895 2927 IF (aerosol_couple) THEN 2896 2928 #ifdef INCA 2897 CALL radlwsw_inca 2898 e (kdlon,kflev,dist, rmu0, fract, solaire, 2899 e paprs, pplay,zxtsol,albsol1, albsol2, t_seri,q_seri, 2900 e wo, 2901 e cldfra, cldemi, cldtau, 2902 s heat,heat0,cool,cool0,radsol,albpla, 2903 s topsw,toplw,solsw,sollw, 2904 s sollwdown, 2905 s topsw0,toplw0,solsw0,sollw0, 2906 s lwdn0, lwdn, lwup0, lwup, 2907 s swdn0, swdn, swup0, swup, 2908 e ok_ade, ok_aie, 2909 e tau_inca, piz_inca, cg_inca, 2910 s topswad_inca, solswad_inca, 2911 s topswad0_inca, solswad0_inca, 2912 s topsw_inca, topsw0_inca, 2913 s solsw_inca, solsw0_inca, 2914 e cldtaupi, 2915 s topswai_inca, solswai_inca) 2929 CALL radlwsw_inca 2930 e (kdlon,kflev,dist, rmu0, fract, solaire, 2931 e paprs, pplay,zxtsol,albsol1, albsol2, t_seri,q_seri, 2932 e wo(:, :, 1), 2933 e cldfra, cldemi, cldtau, 2934 s heat,heat0,cool,cool0,radsol,albpla, 2935 s topsw,toplw,solsw,sollw, 2936 s sollwdown, 2937 s topsw0,toplw0,solsw0,sollw0, 2938 s lwdn0, lwdn, lwup0, lwup, 2939 s swdn0, swdn, swup0, swup, 2940 e ok_ade, ok_aie, 2941 e tau_aero, piz_aero, cg_aero, 2942 s topswad_aero, solswad_aero, 2943 s topswad0_aero, solswad0_aero, 2944 s topsw_aero, topsw0_aero, 2945 s solsw_aero, solsw0_aero, 2946 e cldtaupi, 2947 s topswai_aero, solswai_aero) 2948 2916 2949 #endif 2917 2950 ELSE 2918 CALL radlwsw ! nouveau rayonnement (compatible Arpege-IFS) 2919 e (dist, rmu0, fract, 2920 e paprs, pplay,zxtsol,albsol1, albsol2, t_seri,q_seri, 2921 e wo, 2922 e cldfra, cldemi, cldtau, 2923 s heat,heat0,cool,cool0,radsol,albpla, 2924 s topsw,toplw,solsw,sollw, 2925 s sollwdown, 2926 s topsw0,toplw0,solsw0,sollw0, 2927 s lwdn0, lwdn, lwup0, lwup, 2928 s swdn0, swdn, swup0, swup, 2929 e ok_ade, ok_aie, ! new for aerosol radiative effects 2930 e tau_ae, piz_ae, cg_ae, ! ="= 2931 s topswad, solswad, ! ="= 2932 e cldtaupi, ! ="= 2933 s topswai, solswai,zqsat,flwc,fiwc) ! ="= 2934 ENDIF 2951 2952 CALL radlwsw 2953 e (dist, rmu0, fract, 2954 e paprs, pplay,zxtsol,albsol1, albsol2, 2955 e t_seri,q_seri,wo, 2956 e cldfra, cldemi, cldtau, 2957 e ok_ade, ok_aie, 2958 e tau_aero, piz_aero, cg_aero, 2959 e cldtaupi,new_aod, 2960 e zqsat, flwc, fiwc, 2961 s heat,heat0,cool,cool0,radsol,albpla, 2962 s topsw,toplw,solsw,sollw, 2963 s sollwdown, 2964 s topsw0,toplw0,solsw0,sollw0, 2965 s lwdn0, lwdn, lwup0, lwup, 2966 s swdn0, swdn, swup0, swup, 2967 s topswad_aero, solswad_aero, 2968 s topswai_aero, solswai_aero, 2969 o topswad0_aero, solswad0_aero, 2970 o topsw_aero, topsw0_aero, 2971 o solsw_aero, solsw0_aero, 2972 o topswcf_aero, solswcf_aero) 2973 2974 2975 ENDIF ! aerosol_couple 2935 2976 itaprad = 0 2936 ENDIF 2977 ENDIF ! MOD(itaprad,radpas) 2937 2978 itaprad = itaprad + 1 2938 2979 … … 3123 3164 cIM calcul composantes axiales du moment angulaire et couple des montagnes 3124 3165 c 3125 IF (is_sequential .AND. ok_orodr .AND. ok_orolf) THEN3166 IF (is_sequential) THEN 3126 3167 3127 CALL aaam_bud (27,klon,klev, rjourvrai,gmtime,3168 CALL aaam_bud (27,klon,klev,jD_cur-jD_ref,jH_cur, 3128 3169 C ra,rg,romega, 3129 3170 C rlat,rlon,pphis, … … 3143 3184 c 3144 3185 c 3186 !==================================================================== 3187 ! Interface Simulateur COSP (Calipso, ISCCP, MISR, ..) 3188 !==================================================================== 3189 ! Abderrahmane 24.08.09 3190 3191 IF (ok_cosp) THEN 3192 ! adeclarer 3193 #ifdef CPP_COSP 3194 IF (MOD(itap,NINT(freq_cosp/dtime)).EQ.0) THEN 3195 3196 print*,'freq_cosp',freq_cosp 3197 mr_ozone=wo(:, :, 1) * dobson_u * 1e3 / zmasse 3198 ! print*,'Dans physiq.F avant appel cosp ref_liq,ref_ice=', 3199 ! s ref_liq,ref_ice 3200 call phys_cosp(itap,dtime,freq_cosp, 3201 $ ecrit_mth,ecrit_day,ecrit_hf,overlap, 3202 $ klon,klev,rlon,rlat,presnivs, 3203 $ ref_liq,ref_ice, 3204 $ pctsrf(:,is_ter)+pctsrf(:,is_lic), 3205 $ zu10m,zv10m, 3206 $ zphi,paprs(:,1:klev),pplay,zxtsol,t_seri, 3207 $ qx(:,:,ivap),zx_rh,cldfra,rnebcon,flwc,fiwc, 3208 $ prfl(:,1:klev),psfl(:,1:klev), 3209 $ pmflxr(:,1:klev),pmflxs(:,1:klev), 3210 $ mr_ozone,cldtau, cldemi) 3211 ! L calipso2D,calipso3D,cfadlidar,parasolrefl,atb,betamol, 3212 ! L cfaddbze,clcalipso2,dbze,cltlidarradar, 3213 ! M clMISR, 3214 ! R clisccp2,boxtauisccp,boxptopisccp,tclisccp,ctpisccp, 3215 ! I tauisccp,albisccp,meantbisccp,meantbclrisccp) 3216 3217 ENDIF 3218 3219 #endif 3220 ENDIF !ok_cosp 3221 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 3145 3222 cAA 3146 3223 cAA Installation de l'interface online-offline pour traceurs … … 3150 3227 c==================================================================== 3151 3228 C 3152 IF (config_inca /= 'none') rnpb=.FALSE. 3153 3154 call phytrac ( rnpb, 3155 I itap, 3156 I julien, 3157 I gmtime, 3158 I debut, 3159 I lafin, 3160 I nlon, 3161 I nlev, 3162 I dtime, 3163 I u, 3164 I v, 3165 I t, 3166 I paprs, 3167 I pplay, 3168 I pmfu, 3169 I pmfd, 3170 I pen_u, 3171 I pde_u, 3172 I pen_d, 3173 I pde_d, 3174 I cdragh, 3175 I coefh, 3176 I fm_therm, 3177 I entr_therm, 3178 I u1, 3179 I v1, 3180 I ftsol, 3181 I pctsrf, 3182 I rlat, 3183 I frac_impa, 3184 I frac_nucl, 3185 I rlon, 3186 I presnivs, 3187 I pphis, 3188 I pphi, 3189 I albsol1, 3190 I qx(1,1,1), 3191 I rhcl, 3192 I cldfra, 3193 I rneb, 3194 I diafra, 3195 I cldliq, 3196 I itop_con, 3197 I ibas_con, 3198 I pmflxr, 3199 I pmflxs, 3200 I prfl, 3201 I psfl, 3202 I da, 3203 I phi, 3204 I mp, 3205 I upwd, 3206 I dnwd, 3207 I aerosol_couple, 3208 I flxmass_w, 3209 I tau_inca, 3210 I piz_inca, 3211 I cg_inca, 3212 I ccm, 3213 I rfname, 3214 O tr_seri) 3229 3230 call phytrac ( 3231 I itap, days_elapsed+1, jH_cur, debut, 3232 I lafin, dtime, u, v, t, 3233 I paprs, pplay, pmfu, pmfd, 3234 I pen_u, pde_u, pen_d, pde_d, 3235 I cdragh, coefh, fm_therm, entr_therm, 3236 I u1, v1, ftsol, pctsrf, 3237 I rlat, frac_impa, frac_nucl,rlon, 3238 I presnivs, pphis, pphi, albsol1, 3239 I qx(:,:,ivap),rhcl, cldfra, rneb, 3240 I diafra, cldliq, itop_con, ibas_con, 3241 I pmflxr, pmflxs, prfl, psfl, 3242 I da, phi, mp, upwd, 3243 I dnwd, aerosol_couple, flxmass_w, 3244 I tau_aero, piz_aero, cg_aero, ccm, 3245 I rfname, 3246 O tr_seri) 3215 3247 3216 3248 IF (offline) THEN … … 3218 3250 print*,'Attention on met a 0 les thermiques pour phystoke' 3219 3251 call phystokenc ( 3220 I nlon, nlev,pdtphys,rlon,rlat,3252 I nlon,klev,pdtphys,rlon,rlat, 3221 3253 I t,pmfu, pmfd, pen_u, pde_u, pen_d, pde_d, 3222 3254 I fm_therm,entr_therm, … … 3252 3284 d_t_ec(i,k)=0.5/ZRCPD 3253 3285 $ *(u(i,k)**2+v(i,k)**2-u_seri(i,k)**2-v_seri(i,k)**2) 3286 ENDDO 3287 ENDDO 3288 3289 DO k = 1, klev 3290 DO i = 1, klon 3254 3291 t_seri(i,k)=t_seri(i,k)+d_t_ec(i,k) 3255 3292 d_t_ec(i,k) = d_t_ec(i,k)/dtime … … 3267 3304 C est egale a la variation de la physique au pas de temps precedent. 3268 3305 C Donc la somme de ces 2 variations devrait etre nulle. 3306 3269 3307 call diagphy(airephy,ztit,ip_ebil_phy 3270 3308 e , topsw, toplw, solsw, sollw, sens … … 3349 3387 $ day_ini, 3350 3388 $ airephy, 3351 $ xjour,3352 3389 $ pphi, 3353 3390 $ pphis, … … 3415 3452 write(lunout,*) 'FIN DE PHYSIQ !!!!!!!!!!!!!!!!!!!!' 3416 3453 write(lunout,*) 3417 s 'nlon, nlev,nqtot,debut,lafin,rjourvrai,gmtime,pdtphys pct tlos'3454 s 'nlon,klev,nqtot,debut,lafin,jD_cur, jH_cur, pdtphys pct tlos' 3418 3455 write(lunout,*) 3419 s nlon, nlev,nqtot,debut,lafin,rjourvrai,gmtime,pdtphys,3456 s nlon,klev,nqtot,debut,lafin, jD_cur, jH_cur ,pdtphys, 3420 3457 s pctsrf(igout,is_ter), pctsrf(igout,is_lic),pctsrf(igout,is_oce), 3421 3458 s pctsrf(igout,is_sic) 3422 3459 write(lunout,*) 'd_t_dyn,d_t_con,d_t_lsc,d_t_ajsb,d_t_ajs,d_t_eva' 3423 do k=1, nlev3460 do k=1,klev 3424 3461 write(lunout,*) d_t_dyn(igout,k),d_t_con(igout,k), 3425 3462 s d_t_lsc(igout,k),d_t_ajsb(igout,k),d_t_ajs(igout,k), … … 3427 3464 enddo 3428 3465 write(lunout,*) 'cool,heat' 3429 do k=1, nlev3466 do k=1,klev 3430 3467 write(lunout,*) cool(igout,k),heat(igout,k) 3431 3468 enddo 3432 3469 3433 3470 write(lunout,*) 'd_t_oli,d_t_vdf,d_t_oro,d_t_lif,d_t_ec' 3434 do k=1, nlev3471 do k=1,klev 3435 3472 write(lunout,*) d_t_oli(igout,k),d_t_vdf(igout,k), 3436 3473 s d_t_oro(igout,k),d_t_lif(igout,k),d_t_ec(igout,k) … … 3439 3476 write(lunout,*) 'd_ps ',d_ps(igout) 3440 3477 write(lunout,*) 'd_u, d_v, d_t, d_qx1, d_qx2 ' 3441 do k=1, nlev3478 do k=1,klev 3442 3479 write(lunout,*) d_u(igout,k),d_v(igout,k),d_t(igout,k), 3443 3480 s d_qx(igout,k,1),d_qx(igout,k,2) … … 3501 3538 ! write(97) u_seri,v_seri,t_seri,q_seri 3502 3539 ! close(97) 3540 C$OMP MASTER 3541 if (read_climoz >= 1) then 3542 if (is_mpi_root) then 3543 call nf95_close(ncid_climoz) 3544 end if 3545 deallocate(press_climoz) ! pointer 3546 end if 3547 C$OMP END MASTER 3503 3548 ENDIF 3504 3549 3550 ! first=.false. 3505 3551 3506 3552 RETURN -
LMDZ4/trunk/libf/phylmd/plevel_new.F
r1233 r1279 107 107 c ... Modif . P. Le Van ( 20/01/98) .... 108 108 c Modif Frederic Hourdin (3/01/02) 109 109 110 110 aist(i,nlev) = LOG( pgcm(i,lb(i,nlev))/ pres(nlev) ) 111 111 & / LOG( pgcm(i,lb(i,nlev))/ pgcm(i,lt(i,nlev)) ) -
LMDZ4/trunk/libf/phylmd/printflag.F
r879 r1279 132 132 PRINT 100 133 133 134 4 FORMAT(2x,5( 1H*),' ok_journe= ',l3,3x,',ok_instan = ',135 , l3,3x,',ok_region = ',l3,3x,5( 1H*) )134 4 FORMAT(2x,5("*"),' ok_journe= ',l3,3x,',ok_instan = ', 135 , l3,3x,',ok_region = ',l3,3x,5("*") ) 136 136 137 7 FORMAT(2x,5( 1H*),15x,' ok_limitvrai = ',l3,16x,5(1h*) )137 7 FORMAT(2x,5("*"),15x,' ok_limitvrai = ',l3,16x,5("*") ) 138 138 139 139 8 FORMAT(2x,'***** radpas = ' , 140 140 , i4,6x,' *****') 141 141 142 10 FORMAT(2x,5( 1H*),' Cycle_diurne = ',l3,4x,', Soil_model = ',143 , l3,12x,6( 1H*) )142 10 FORMAT(2x,5("*"),' Cycle_diurne = ',l3,4x,', Soil_model = ', 143 , l3,12x,6("*") ) 144 144 145 145 146 11 FORMAT(2x,5( 1H*),' new_oliq = ',l3,3x,', Ok_orodr = ',147 , l3,3x,', Ok_orolf = ',l3,3x,5( 1H*) )146 11 FORMAT(2x,5("*"),' new_oliq = ',l3,3x,', Ok_orodr = ', 147 , l3,3x,', Ok_orolf = ',l3,3x,5("*") ) 148 148 149 149 -
LMDZ4/trunk/libf/phylmd/radepsi.h
r524 r1279 2 2 ! $Header$ 3 3 ! 4 REAL *8ZEELOG, ZEPSC, ZEPSCO, ZEPSCQ, ZEPSCT, ZEPSCW5 REAL *8ZEPSEC, ZEPSCR4 REAL(KIND=8) ZEELOG, ZEPSC, ZEPSCO, ZEPSCQ, ZEPSCT, ZEPSCW 5 REAL(KIND=8) ZEPSEC, ZEPSCR 6 6 PARAMETER (ZEELOG = 1.E-07) !1.e-10 (not good for 32-bit machines) 7 7 PARAMETER (ZEPSC = 1.E-20) … … 13 13 PARAMETER (ZEPSCR = 1.0E-10) 14 14 c 15 REAL *8REPSCT15 REAL(KIND=8) REPSCT 16 16 PARAMETER (REPSCT=1.0E-10) -
LMDZ4/trunk/libf/phylmd/radiation_AR4.F
r1107 r1279 54 54 C* ARGUMENTS: 55 55 C 56 REAL *8PSCT ! constante solaire (valeur conseillee: 1370)57 cIM ctes ds clesphys.h REAL *8RCO2 ! concentration CO2 (IPCC: 353.E-06*44.011/28.97)56 REAL(KIND=8) PSCT ! constante solaire (valeur conseillee: 1370) 57 cIM ctes ds clesphys.h REAL(KIND=8) RCO2 ! concentration CO2 (IPCC: 353.E-06*44.011/28.97) 58 58 #include "clesphys.h" 59 59 C 60 REAL *8PPSOL(KDLON) ! SURFACE PRESSURE (PA)61 REAL *8PDP(KDLON,KFLEV) ! LAYER THICKNESS (PA)62 REAL *8PPMB(KDLON,KFLEV+1) ! HALF-LEVEL PRESSURE (MB)63 C 64 REAL *8PRMU0(KDLON) ! COSINE OF ZENITHAL ANGLE65 REAL *8PFRAC(KDLON) ! fraction de la journee66 C 67 REAL *8PTAVE(KDLON,KFLEV) ! LAYER TEMPERATURE (K)68 REAL *8PWV(KDLON,KFLEV) ! SPECIFIC HUMIDITY (KG/KG)69 REAL *8PQS(KDLON,KFLEV) ! SATURATED WATER VAPOUR (KG/KG)70 REAL *8POZON(KDLON,KFLEV) ! OZONE CONCENTRATION (KG/KG)71 REAL *8PAER(KDLON,KFLEV,5) ! AEROSOLS' OPTICAL THICKNESS72 C 73 REAL *8PALBD(KDLON,2) ! albedo du sol (lumiere diffuse)74 REAL *8PALBP(KDLON,2) ! albedo du sol (lumiere parallele)75 C 76 REAL *8PCLDSW(KDLON,KFLEV) ! CLOUD FRACTION77 REAL *8PTAU(KDLON,2,KFLEV) ! CLOUD OPTICAL THICKNESS78 REAL *8PCG(KDLON,2,KFLEV) ! ASYMETRY FACTOR79 REAL *8POMEGA(KDLON,2,KFLEV) ! SINGLE SCATTERING ALBEDO80 C 81 REAL *8PHEAT(KDLON,KFLEV) ! SHORTWAVE HEATING (K/DAY)82 REAL *8PHEAT0(KDLON,KFLEV)! SHORTWAVE HEATING (K/DAY) clear-sky83 REAL *8PALBPLA(KDLON) ! PLANETARY ALBEDO84 REAL *8PTOPSW(KDLON) ! SHORTWAVE FLUX AT T.O.A.85 REAL *8PSOLSW(KDLON) ! SHORTWAVE FLUX AT SURFACE86 REAL *8PTOPSW0(KDLON) ! SHORTWAVE FLUX AT T.O.A. (CLEAR-SKY)87 REAL *8PSOLSW0(KDLON) ! SHORTWAVE FLUX AT SURFACE (CLEAR-SKY)60 REAL(KIND=8) PPSOL(KDLON) ! SURFACE PRESSURE (PA) 61 REAL(KIND=8) PDP(KDLON,KFLEV) ! LAYER THICKNESS (PA) 62 REAL(KIND=8) PPMB(KDLON,KFLEV+1) ! HALF-LEVEL PRESSURE (MB) 63 C 64 REAL(KIND=8) PRMU0(KDLON) ! COSINE OF ZENITHAL ANGLE 65 REAL(KIND=8) PFRAC(KDLON) ! fraction de la journee 66 C 67 REAL(KIND=8) PTAVE(KDLON,KFLEV) ! LAYER TEMPERATURE (K) 68 REAL(KIND=8) PWV(KDLON,KFLEV) ! SPECIFIC HUMIDITY (KG/KG) 69 REAL(KIND=8) PQS(KDLON,KFLEV) ! SATURATED WATER VAPOUR (KG/KG) 70 REAL(KIND=8) POZON(KDLON,KFLEV) ! OZONE CONCENTRATION (KG/KG) 71 REAL(KIND=8) PAER(KDLON,KFLEV,5) ! AEROSOLS' OPTICAL THICKNESS 72 C 73 REAL(KIND=8) PALBD(KDLON,2) ! albedo du sol (lumiere diffuse) 74 REAL(KIND=8) PALBP(KDLON,2) ! albedo du sol (lumiere parallele) 75 C 76 REAL(KIND=8) PCLDSW(KDLON,KFLEV) ! CLOUD FRACTION 77 REAL(KIND=8) PTAU(KDLON,2,KFLEV) ! CLOUD OPTICAL THICKNESS 78 REAL(KIND=8) PCG(KDLON,2,KFLEV) ! ASYMETRY FACTOR 79 REAL(KIND=8) POMEGA(KDLON,2,KFLEV) ! SINGLE SCATTERING ALBEDO 80 C 81 REAL(KIND=8) PHEAT(KDLON,KFLEV) ! SHORTWAVE HEATING (K/DAY) 82 REAL(KIND=8) PHEAT0(KDLON,KFLEV)! SHORTWAVE HEATING (K/DAY) clear-sky 83 REAL(KIND=8) PALBPLA(KDLON) ! PLANETARY ALBEDO 84 REAL(KIND=8) PTOPSW(KDLON) ! SHORTWAVE FLUX AT T.O.A. 85 REAL(KIND=8) PSOLSW(KDLON) ! SHORTWAVE FLUX AT SURFACE 86 REAL(KIND=8) PTOPSW0(KDLON) ! SHORTWAVE FLUX AT T.O.A. (CLEAR-SKY) 87 REAL(KIND=8) PSOLSW0(KDLON) ! SHORTWAVE FLUX AT SURFACE (CLEAR-SKY) 88 88 C 89 89 C* LOCAL VARIABLES: 90 90 C 91 REAL*8 ZOZ(KDLON,KFLEV) 92 REAL*8 ZAKI(KDLON,2) 93 REAL*8 ZCLD(KDLON,KFLEV) 94 REAL*8 ZCLEAR(KDLON) 95 REAL*8 ZDSIG(KDLON,KFLEV) 96 REAL*8 ZFACT(KDLON) 97 REAL*8 ZFD(KDLON,KFLEV+1) 98 REAL*8 ZFDOWN(KDLON,KFLEV+1) 99 REAL*8 ZFU(KDLON,KFLEV+1) 100 REAL*8 ZFUP(KDLON,KFLEV+1) 101 REAL*8 ZRMU(KDLON) 102 REAL*8 ZSEC(KDLON) 103 REAL*8 ZUD(KDLON,5,KFLEV+1) 104 REAL*8 ZCLDSW0(KDLON,KFLEV) 91 real, parameter:: dobson_u = 2.1415e-05 ! Dobson unit, in kg m-2 92 93 REAL(KIND=8) ZOZ(KDLON,KFLEV) 94 ! column-density of ozone in layer, in kilo-Dobsons 95 96 REAL(KIND=8) ZAKI(KDLON,2) 97 REAL(KIND=8) ZCLD(KDLON,KFLEV) 98 REAL(KIND=8) ZCLEAR(KDLON) 99 REAL(KIND=8) ZDSIG(KDLON,KFLEV) 100 REAL(KIND=8) ZFACT(KDLON) 101 REAL(KIND=8) ZFD(KDLON,KFLEV+1) 102 REAL(KIND=8) ZFDOWN(KDLON,KFLEV+1) 103 REAL(KIND=8) ZFU(KDLON,KFLEV+1) 104 REAL(KIND=8) ZFUP(KDLON,KFLEV+1) 105 REAL(KIND=8) ZRMU(KDLON) 106 REAL(KIND=8) ZSEC(KDLON) 107 REAL(KIND=8) ZUD(KDLON,5,KFLEV+1) 108 REAL(KIND=8) ZCLDSW0(KDLON,KFLEV) 105 109 c 106 REAL *8ZFSUP(KDLON,KFLEV+1)107 REAL *8ZFSDN(KDLON,KFLEV+1)108 REAL *8ZFSUP0(KDLON,KFLEV+1)109 REAL *8ZFSDN0(KDLON,KFLEV+1)110 REAL(KIND=8) ZFSUP(KDLON,KFLEV+1) 111 REAL(KIND=8) ZFSDN(KDLON,KFLEV+1) 112 REAL(KIND=8) ZFSUP0(KDLON,KFLEV+1) 113 REAL(KIND=8) ZFSDN0(KDLON,KFLEV+1) 110 114 C 111 115 INTEGER inu, jl, jk, i, k, kpl1 … … 122 126 c$OMP THREADPRIVATE(itapsw) 123 127 cjq-Introduced for aerosol forcings 124 real *8flag_aer128 real(kind=8) flag_aer 125 129 logical ok_ade, ok_aie ! use aerosol forcings or not? 126 real *8tauae(kdlon,kflev,2) ! aerosol optical properties127 real *8pizae(kdlon,kflev,2) ! (see aeropt.F)128 real *8cgae(kdlon,kflev,2) ! -"-129 REAL *8PTAUA(KDLON,2,KFLEV) ! CLOUD OPTICAL THICKNESS (pre-industrial value)130 REAL *8POMEGAA(KDLON,2,KFLEV) ! SINGLE SCATTERING ALBEDO131 REAL *8PTOPSWAD(KDLON) ! SHORTWAVE FLUX AT T.O.A.(+AEROSOL DIR)132 REAL *8PSOLSWAD(KDLON) ! SHORTWAVE FLUX AT SURFACE(+AEROSOL DIR)133 REAL *8PTOPSWAI(KDLON) ! SHORTWAVE FLUX AT T.O.A.(+AEROSOL IND)134 REAL *8PSOLSWAI(KDLON) ! SHORTWAVE FLUX AT SURFACE(+AEROSOL IND)130 real(kind=8) tauae(kdlon,kflev,2) ! aerosol optical properties 131 real(kind=8) pizae(kdlon,kflev,2) ! (see aeropt.F) 132 real(kind=8) cgae(kdlon,kflev,2) ! -"- 133 REAL(KIND=8) PTAUA(KDLON,2,KFLEV) ! CLOUD OPTICAL THICKNESS (pre-industrial value) 134 REAL(KIND=8) POMEGAA(KDLON,2,KFLEV) ! SINGLE SCATTERING ALBEDO 135 REAL(KIND=8) PTOPSWAD(KDLON) ! SHORTWAVE FLUX AT T.O.A.(+AEROSOL DIR) 136 REAL(KIND=8) PSOLSWAD(KDLON) ! SHORTWAVE FLUX AT SURFACE(+AEROSOL DIR) 137 REAL(KIND=8) PTOPSWAI(KDLON) ! SHORTWAVE FLUX AT T.O.A.(+AEROSOL IND) 138 REAL(KIND=8) PSOLSWAI(KDLON) ! SHORTWAVE FLUX AT SURFACE(+AEROSOL IND) 135 139 cjq - Fluxes including aerosol effects 136 REAL *8,allocatable,save :: ZFSUPAD(:,:)140 REAL(KIND=8),allocatable,save :: ZFSUPAD(:,:) 137 141 c$OMP THREADPRIVATE(ZFSUPAD) 138 REAL *8,allocatable,save :: ZFSDNAD(:,:)142 REAL(KIND=8),allocatable,save :: ZFSDNAD(:,:) 139 143 c$OMP THREADPRIVATE(ZFSDNAD) 140 REAL *8,allocatable,save :: ZFSUPAI(:,:)144 REAL(KIND=8),allocatable,save :: ZFSUPAI(:,:) 141 145 c$OMP THREADPRIVATE(ZFSUPAI) 142 REAL *8,allocatable,save :: ZFSDNAI(:,:)146 REAL(KIND=8),allocatable,save :: ZFSDNAI(:,:) 143 147 c$OMP THREADPRIVATE(ZFSDNAI) 144 148 logical initialized … … 151 155 c$OMP THREADPRIVATE(initialized) 152 156 cjq-end 157 REAL tmp_ 153 158 if(.not.initialized) then 154 159 flag_aer=0. … … 158 163 allocate(ZFSUPAI(KDLON,KFLEV+1)) 159 164 allocate(ZFSDNAI(KDLON,KFLEV+1)) 160 ZFSUPAD(:,:)=0. 161 ZFSDNAD(:,:)=0. 162 ZFSUPAI(:,:)=0. 163 ZFSDNAI(:,:)=0. 164 165 DO JK = 1 , KDLON*(KFLEV+1) 166 ZFSUPAD(JK,1) = 0.0 ! ZFSUPAD(:,:)=0. 167 ZFSDNAD(JK,1) = 0.0 ! ZFSDNAD(:,:)=0. 168 ZFSUPAI(JK,1) = 0.0 ! ZFSUPAI(:,:)=0. 169 ZFSDNAI(JK,1) = 0.0 ! ZFSDNAI(:,:)=0. 170 END DO 165 171 endif 166 172 !rv … … 175 181 IF (MOD(itapsw,swpas).EQ.0) THEN 176 182 c 183 tmp_ = 1./( dobson_u * 1e3 * RG) 184 !cdir collapse 177 185 DO JK = 1 , KFLEV 178 DO JL = 1, KDLON 179 ZCLDSW0(JL,JK) = 0.0 180 ZOZ(JL,JK) = POZON(JL,JK)*46.6968/RG 181 . *PDP(JL,JK)*(101325.0/PPSOL(JL)) 182 ENDDO 186 DO JL = 1, KDLON 187 ZCLDSW0(JL,JK) = 0.0 188 ZOZ(JL,JK) = POZON(JL,JK)*tmp_*PDP(JL,JK) 189 ENDDO 183 190 ENDDO 184 191 C … … 339 346 S PRMU,PSEC,PUD) 340 347 USE dimphy 348 USE radiation_AR4_param, only : 349 S ZPDH2O,ZPDUMG,ZPRH2O,ZPRUMG,RTDH2O,RTDUMG,RTH2O,RTUMG 341 350 IMPLICIT none 342 351 cym#include "dimensions.h" … … 349 358 C* ARGUMENTS: 350 359 C 351 REAL *8PSCT352 cIM ctes ds clesphys.h REAL *8RCO2360 REAL(KIND=8) PSCT 361 cIM ctes ds clesphys.h REAL(KIND=8) RCO2 353 362 #include "clesphys.h" 354 REAL *8PCLDSW(KDLON,KFLEV)355 REAL *8PPMB(KDLON,KFLEV+1)356 REAL *8PPSOL(KDLON)357 REAL *8PRMU0(KDLON)358 REAL *8PFRAC(KDLON)359 REAL *8PTAVE(KDLON,KFLEV)360 REAL *8PWV(KDLON,KFLEV)361 C 362 REAL *8PAKI(KDLON,2)363 REAL *8PCLD(KDLON,KFLEV)364 REAL *8PCLEAR(KDLON)365 REAL *8PDSIG(KDLON,KFLEV)366 REAL *8PFACT(KDLON)367 REAL *8PRMU(KDLON)368 REAL *8PSEC(KDLON)369 REAL *8PUD(KDLON,5,KFLEV+1)363 REAL(KIND=8) PCLDSW(KDLON,KFLEV) 364 REAL(KIND=8) PPMB(KDLON,KFLEV+1) 365 REAL(KIND=8) PPSOL(KDLON) 366 REAL(KIND=8) PRMU0(KDLON) 367 REAL(KIND=8) PFRAC(KDLON) 368 REAL(KIND=8) PTAVE(KDLON,KFLEV) 369 REAL(KIND=8) PWV(KDLON,KFLEV) 370 C 371 REAL(KIND=8) PAKI(KDLON,2) 372 REAL(KIND=8) PCLD(KDLON,KFLEV) 373 REAL(KIND=8) PCLEAR(KDLON) 374 REAL(KIND=8) PDSIG(KDLON,KFLEV) 375 REAL(KIND=8) PFACT(KDLON) 376 REAL(KIND=8) PRMU(KDLON) 377 REAL(KIND=8) PSEC(KDLON) 378 REAL(KIND=8) PUD(KDLON,5,KFLEV+1) 370 379 C 371 380 C* LOCAL VARIABLES: 372 381 C 373 382 INTEGER IIND(2) 374 REAL *8ZC1J(KDLON,KFLEV+1)375 REAL *8ZCLEAR(KDLON)376 REAL *8ZCLOUD(KDLON)377 REAL *8ZN175(KDLON)378 REAL *8ZN190(KDLON)379 REAL *8ZO175(KDLON)380 REAL *8ZO190(KDLON)381 REAL *8ZSIGN(KDLON)382 REAL *8ZR(KDLON,2)383 REAL *8ZSIGO(KDLON)384 REAL *8ZUD(KDLON,2)385 REAL *8ZRTH, ZRTU, ZWH2O, ZDSCO2, ZDSH2O, ZFPPW383 REAL(KIND=8) ZC1J(KDLON,KFLEV+1) 384 REAL(KIND=8) ZCLEAR(KDLON) 385 REAL(KIND=8) ZCLOUD(KDLON) 386 REAL(KIND=8) ZN175(KDLON) 387 REAL(KIND=8) ZN190(KDLON) 388 REAL(KIND=8) ZO175(KDLON) 389 REAL(KIND=8) ZO190(KDLON) 390 REAL(KIND=8) ZSIGN(KDLON) 391 REAL(KIND=8) ZR(KDLON,2) 392 REAL(KIND=8) ZSIGO(KDLON) 393 REAL(KIND=8) ZUD(KDLON,2) 394 REAL(KIND=8) ZRTH, ZRTU, ZWH2O, ZDSCO2, ZDSH2O, ZFPPW 386 395 INTEGER jl, jk, jkp1, jkl, jklp1, ja 387 396 C 388 C* Prescribed Data:389 c390 REAL*8 ZPDH2O,ZPDUMG391 SAVE ZPDH2O,ZPDUMG392 c$OMP THREADPRIVATE(ZPDH2O,ZPDUMG)393 REAL*8 ZPRH2O,ZPRUMG394 SAVE ZPRH2O,ZPRUMG395 c$OMP THREADPRIVATE(ZPRH2O,ZPRUMG)396 REAL*8 RTDH2O,RTDUMG397 SAVE RTDH2O,RTDUMG398 c$OMP THREADPRIVATE(RTDH2O,RTDUMG)399 REAL*8 RTH2O ,RTUMG400 SAVE RTH2O ,RTUMG401 c$OMP THREADPRIVATE(RTH2O ,RTUMG)402 DATA ZPDH2O,ZPDUMG / 0.8 , 0.75 /403 DATA ZPRH2O,ZPRUMG / 30000., 30000. /404 DATA RTDH2O,RTDUMG / 0.40 , 0.375 /405 DATA RTH2O ,RTUMG / 240. , 240. /406 397 C ------------------------------------------------------------------ 407 398 C … … 534 525 S , PFD , PFU) 535 526 USE dimphy 527 USE radiation_AR4_param, only : RSUN, RRAY 536 528 IMPLICIT none 537 529 cym#include "dimensions.h" … … 573 565 INTEGER KNU 574 566 c-OB 575 real *8flag_aer576 real *8tauae(kdlon,kflev,2)577 real *8pizae(kdlon,kflev,2)578 real *8cgae(kdlon,kflev,2)579 REAL *8PAER(KDLON,KFLEV,5)580 REAL *8PALBD(KDLON,2)581 REAL *8PALBP(KDLON,2)582 REAL *8PCG(KDLON,2,KFLEV)583 REAL *8PCLD(KDLON,KFLEV)584 REAL *8PCLDSW(KDLON,KFLEV)585 REAL *8PCLEAR(KDLON)586 REAL *8PDSIG(KDLON,KFLEV)587 REAL *8POMEGA(KDLON,2,KFLEV)588 REAL *8POZ(KDLON,KFLEV)589 REAL *8PRMU(KDLON)590 REAL *8PSEC(KDLON)591 REAL *8PTAU(KDLON,2,KFLEV)592 REAL *8PUD(KDLON,5,KFLEV+1)593 C 594 REAL *8PFD(KDLON,KFLEV+1)595 REAL *8PFU(KDLON,KFLEV+1)567 real(kind=8) flag_aer 568 real(kind=8) tauae(kdlon,kflev,2) 569 real(kind=8) pizae(kdlon,kflev,2) 570 real(kind=8) cgae(kdlon,kflev,2) 571 REAL(KIND=8) PAER(KDLON,KFLEV,5) 572 REAL(KIND=8) PALBD(KDLON,2) 573 REAL(KIND=8) PALBP(KDLON,2) 574 REAL(KIND=8) PCG(KDLON,2,KFLEV) 575 REAL(KIND=8) PCLD(KDLON,KFLEV) 576 REAL(KIND=8) PCLDSW(KDLON,KFLEV) 577 REAL(KIND=8) PCLEAR(KDLON) 578 REAL(KIND=8) PDSIG(KDLON,KFLEV) 579 REAL(KIND=8) POMEGA(KDLON,2,KFLEV) 580 REAL(KIND=8) POZ(KDLON,KFLEV) 581 REAL(KIND=8) PRMU(KDLON) 582 REAL(KIND=8) PSEC(KDLON) 583 REAL(KIND=8) PTAU(KDLON,2,KFLEV) 584 REAL(KIND=8) PUD(KDLON,5,KFLEV+1) 585 C 586 REAL(KIND=8) PFD(KDLON,KFLEV+1) 587 REAL(KIND=8) PFU(KDLON,KFLEV+1) 596 588 C 597 589 C* LOCAL VARIABLES: … … 599 591 INTEGER IIND(4) 600 592 C 601 REAL *8ZCGAZ(KDLON,KFLEV)602 REAL *8ZDIFF(KDLON)603 REAL *8ZDIRF(KDLON)604 REAL *8ZPIZAZ(KDLON,KFLEV)605 REAL *8ZRAYL(KDLON)606 REAL *8ZRAY1(KDLON,KFLEV+1)607 REAL *8ZRAY2(KDLON,KFLEV+1)608 REAL *8ZREFZ(KDLON,2,KFLEV+1)609 REAL *8ZRJ(KDLON,6,KFLEV+1)610 REAL *8ZRJ0(KDLON,6,KFLEV+1)611 REAL *8ZRK(KDLON,6,KFLEV+1)612 REAL *8ZRK0(KDLON,6,KFLEV+1)613 REAL *8ZRMUE(KDLON,KFLEV+1)614 REAL *8ZRMU0(KDLON,KFLEV+1)615 REAL *8ZR(KDLON,4)616 REAL *8ZTAUAZ(KDLON,KFLEV)617 REAL *8ZTRA1(KDLON,KFLEV+1)618 REAL *8ZTRA2(KDLON,KFLEV+1)619 REAL *8ZW(KDLON,4)593 REAL(KIND=8) ZCGAZ(KDLON,KFLEV) 594 REAL(KIND=8) ZDIFF(KDLON) 595 REAL(KIND=8) ZDIRF(KDLON) 596 REAL(KIND=8) ZPIZAZ(KDLON,KFLEV) 597 REAL(KIND=8) ZRAYL(KDLON) 598 REAL(KIND=8) ZRAY1(KDLON,KFLEV+1) 599 REAL(KIND=8) ZRAY2(KDLON,KFLEV+1) 600 REAL(KIND=8) ZREFZ(KDLON,2,KFLEV+1) 601 REAL(KIND=8) ZRJ(KDLON,6,KFLEV+1) 602 REAL(KIND=8) ZRJ0(KDLON,6,KFLEV+1) 603 REAL(KIND=8) ZRK(KDLON,6,KFLEV+1) 604 REAL(KIND=8) ZRK0(KDLON,6,KFLEV+1) 605 REAL(KIND=8) ZRMUE(KDLON,KFLEV+1) 606 REAL(KIND=8) ZRMU0(KDLON,KFLEV+1) 607 REAL(KIND=8) ZR(KDLON,4) 608 REAL(KIND=8) ZTAUAZ(KDLON,KFLEV) 609 REAL(KIND=8) ZTRA1(KDLON,KFLEV+1) 610 REAL(KIND=8) ZTRA2(KDLON,KFLEV+1) 611 REAL(KIND=8) ZW(KDLON,4) 620 612 C 621 613 INTEGER jl, jk, k, jaj, ikm1, ikl 622 c 623 c Prescribed Data: 624 c 625 REAL*8 RSUN(2) 626 SAVE RSUN 627 c$OMP THREADPRIVATE(RSUN) 628 REAL*8 RRAY(2,6) 629 SAVE RRAY 630 c$OMP THREADPRIVATE(RRAY) 631 DATA RSUN(1) / 0.441676 / 632 DATA RSUN(2) / 0.558324 / 633 DATA (RRAY(1,K),K=1,6) / 634 S .428937E-01, .890743E+00,-.288555E+01, 635 S .522744E+01,-.469173E+01, .161645E+01/ 636 DATA (RRAY(2,K),K=1,6) / 637 S .697200E-02, .173297E-01,-.850903E-01, 638 S .248261E+00,-.302031E+00, .129662E+00/ 614 639 615 C ------------------------------------------------------------------ 640 616 C … … 777 753 S , PFDOWN,PFUP ) 778 754 USE dimphy 755 USE radiation_AR4_param, only : RSUN, RRAY 779 756 IMPLICIT none 780 757 cym#include "dimensions.h" … … 821 798 INTEGER KNU 822 799 c-OB 823 real *8flag_aer824 real *8tauae(kdlon,kflev,2)825 real *8pizae(kdlon,kflev,2)826 real *8cgae(kdlon,kflev,2)827 REAL *8PAER(KDLON,KFLEV,5)828 REAL *8PAKI(KDLON,2)829 REAL *8PALBD(KDLON,2)830 REAL *8PALBP(KDLON,2)831 REAL *8PCG(KDLON,2,KFLEV)832 REAL *8PCLD(KDLON,KFLEV)833 REAL *8PCLDSW(KDLON,KFLEV)834 REAL *8PCLEAR(KDLON)835 REAL *8PDSIG(KDLON,KFLEV)836 REAL *8POMEGA(KDLON,2,KFLEV)837 REAL *8POZ(KDLON,KFLEV)838 REAL *8PQS(KDLON,KFLEV)839 REAL *8PRMU(KDLON)840 REAL *8PSEC(KDLON)841 REAL *8PTAU(KDLON,2,KFLEV)842 REAL *8PUD(KDLON,5,KFLEV+1)843 REAL *8PWV(KDLON,KFLEV)844 C 845 REAL *8PFDOWN(KDLON,KFLEV+1)846 REAL *8PFUP(KDLON,KFLEV+1)800 real(kind=8) flag_aer 801 real(kind=8) tauae(kdlon,kflev,2) 802 real(kind=8) pizae(kdlon,kflev,2) 803 real(kind=8) cgae(kdlon,kflev,2) 804 REAL(KIND=8) PAER(KDLON,KFLEV,5) 805 REAL(KIND=8) PAKI(KDLON,2) 806 REAL(KIND=8) PALBD(KDLON,2) 807 REAL(KIND=8) PALBP(KDLON,2) 808 REAL(KIND=8) PCG(KDLON,2,KFLEV) 809 REAL(KIND=8) PCLD(KDLON,KFLEV) 810 REAL(KIND=8) PCLDSW(KDLON,KFLEV) 811 REAL(KIND=8) PCLEAR(KDLON) 812 REAL(KIND=8) PDSIG(KDLON,KFLEV) 813 REAL(KIND=8) POMEGA(KDLON,2,KFLEV) 814 REAL(KIND=8) POZ(KDLON,KFLEV) 815 REAL(KIND=8) PQS(KDLON,KFLEV) 816 REAL(KIND=8) PRMU(KDLON) 817 REAL(KIND=8) PSEC(KDLON) 818 REAL(KIND=8) PTAU(KDLON,2,KFLEV) 819 REAL(KIND=8) PUD(KDLON,5,KFLEV+1) 820 REAL(KIND=8) PWV(KDLON,KFLEV) 821 C 822 REAL(KIND=8) PFDOWN(KDLON,KFLEV+1) 823 REAL(KIND=8) PFUP(KDLON,KFLEV+1) 847 824 C 848 825 C* LOCAL VARIABLES: 849 826 C 850 827 INTEGER IIND2(2), IIND3(3) 851 REAL *8ZCGAZ(KDLON,KFLEV)852 REAL *8ZFD(KDLON,KFLEV+1)853 REAL *8ZFU(KDLON,KFLEV+1)854 REAL *8ZG(KDLON)855 REAL *8ZGG(KDLON)856 REAL *8ZPIZAZ(KDLON,KFLEV)857 REAL *8ZRAYL(KDLON)858 REAL *8ZRAY1(KDLON,KFLEV+1)859 REAL *8ZRAY2(KDLON,KFLEV+1)860 REAL *8ZREF(KDLON)861 REAL *8ZREFZ(KDLON,2,KFLEV+1)862 REAL *8ZRE1(KDLON)863 REAL *8ZRE2(KDLON)864 REAL *8ZRJ(KDLON,6,KFLEV+1)865 REAL *8ZRJ0(KDLON,6,KFLEV+1)866 REAL *8ZRK(KDLON,6,KFLEV+1)867 REAL *8ZRK0(KDLON,6,KFLEV+1)868 REAL *8ZRL(KDLON,8)869 REAL *8ZRMUE(KDLON,KFLEV+1)870 REAL *8ZRMU0(KDLON,KFLEV+1)871 REAL *8ZRMUZ(KDLON)872 REAL *8ZRNEB(KDLON)873 REAL *8ZRUEF(KDLON,8)874 REAL *8ZR1(KDLON)875 REAL *8ZR2(KDLON,2)876 REAL *8ZR3(KDLON,3)877 REAL *8ZR4(KDLON)878 REAL *8ZR21(KDLON)879 REAL *8ZR22(KDLON)880 REAL *8ZS(KDLON)881 REAL *8ZTAUAZ(KDLON,KFLEV)882 REAL *8ZTO1(KDLON)883 REAL *8ZTR(KDLON,2,KFLEV+1)884 REAL *8ZTRA1(KDLON,KFLEV+1)885 REAL *8ZTRA2(KDLON,KFLEV+1)886 REAL *8ZTR1(KDLON)887 REAL *8ZTR2(KDLON)888 REAL *8ZW(KDLON)889 REAL *8ZW1(KDLON)890 REAL *8ZW2(KDLON,2)891 REAL *8ZW3(KDLON,3)892 REAL *8ZW4(KDLON)893 REAL *8ZW5(KDLON)828 REAL(KIND=8) ZCGAZ(KDLON,KFLEV) 829 REAL(KIND=8) ZFD(KDLON,KFLEV+1) 830 REAL(KIND=8) ZFU(KDLON,KFLEV+1) 831 REAL(KIND=8) ZG(KDLON) 832 REAL(KIND=8) ZGG(KDLON) 833 REAL(KIND=8) ZPIZAZ(KDLON,KFLEV) 834 REAL(KIND=8) ZRAYL(KDLON) 835 REAL(KIND=8) ZRAY1(KDLON,KFLEV+1) 836 REAL(KIND=8) ZRAY2(KDLON,KFLEV+1) 837 REAL(KIND=8) ZREF(KDLON) 838 REAL(KIND=8) ZREFZ(KDLON,2,KFLEV+1) 839 REAL(KIND=8) ZRE1(KDLON) 840 REAL(KIND=8) ZRE2(KDLON) 841 REAL(KIND=8) ZRJ(KDLON,6,KFLEV+1) 842 REAL(KIND=8) ZRJ0(KDLON,6,KFLEV+1) 843 REAL(KIND=8) ZRK(KDLON,6,KFLEV+1) 844 REAL(KIND=8) ZRK0(KDLON,6,KFLEV+1) 845 REAL(KIND=8) ZRL(KDLON,8) 846 REAL(KIND=8) ZRMUE(KDLON,KFLEV+1) 847 REAL(KIND=8) ZRMU0(KDLON,KFLEV+1) 848 REAL(KIND=8) ZRMUZ(KDLON) 849 REAL(KIND=8) ZRNEB(KDLON) 850 REAL(KIND=8) ZRUEF(KDLON,8) 851 REAL(KIND=8) ZR1(KDLON) 852 REAL(KIND=8) ZR2(KDLON,2) 853 REAL(KIND=8) ZR3(KDLON,3) 854 REAL(KIND=8) ZR4(KDLON) 855 REAL(KIND=8) ZR21(KDLON) 856 REAL(KIND=8) ZR22(KDLON) 857 REAL(KIND=8) ZS(KDLON) 858 REAL(KIND=8) ZTAUAZ(KDLON,KFLEV) 859 REAL(KIND=8) ZTO1(KDLON) 860 REAL(KIND=8) ZTR(KDLON,2,KFLEV+1) 861 REAL(KIND=8) ZTRA1(KDLON,KFLEV+1) 862 REAL(KIND=8) ZTRA2(KDLON,KFLEV+1) 863 REAL(KIND=8) ZTR1(KDLON) 864 REAL(KIND=8) ZTR2(KDLON) 865 REAL(KIND=8) ZW(KDLON) 866 REAL(KIND=8) ZW1(KDLON) 867 REAL(KIND=8) ZW2(KDLON,2) 868 REAL(KIND=8) ZW3(KDLON,3) 869 REAL(KIND=8) ZW4(KDLON) 870 REAL(KIND=8) ZW5(KDLON) 894 871 C 895 872 INTEGER jl, jk, k, jaj, ikm1, ikl, jn, jabs, jkm1 896 873 INTEGER jref, jkl, jklp1, jajp, jkki, jkkp4, jn2j, iabs 897 REAL*8 ZRMUM1, ZWH2O, ZCNEB, ZAA, ZBB, ZRKI, ZRE11 898 C 899 C* Prescribed Data: 900 C 901 REAL*8 RSUN(2) 902 SAVE RSUN 903 c$OMP THREADPRIVATE(RSUN) 904 REAL*8 RRAY(2,6) 905 SAVE RRAY 906 c$OMP THREADPRIVATE(RRAY) 907 DATA RSUN(1) / 0.441676 / 908 DATA RSUN(2) / 0.558324 / 909 DATA (RRAY(1,K),K=1,6) / 910 S .428937E-01, .890743E+00,-.288555E+01, 911 S .522744E+01,-.469173E+01, .161645E+01/ 912 DATA (RRAY(2,K),K=1,6) / 913 S .697200E-02, .173297E-01,-.850903E-01, 914 S .248261E+00,-.302031E+00, .129662E+00/ 874 REAL(KIND=8) ZRMUM1, ZWH2O, ZCNEB, ZAA, ZBB, ZRKI, ZRE11 875 C 876 915 877 C 916 878 C ------------------------------------------------------------------ … … 1326 1288 S , PRK , PRMU0 , PTAUAZ, PTRA1 , PTRA2 ) 1327 1289 USE dimphy 1290 USE radiation_AR4_param, only : TAUA, RPIZA, RCGA 1328 1291 IMPLICIT none 1329 1292 cym#include "dimensions.h" … … 1357 1320 INTEGER KNU 1358 1321 c-OB 1359 real *8flag_aer1360 real *8tauae(kdlon,kflev,2)1361 real *8pizae(kdlon,kflev,2)1362 real *8cgae(kdlon,kflev,2)1363 REAL *8PAER(KDLON,KFLEV,5)1364 REAL *8PALBP(KDLON,2)1365 REAL *8PDSIG(KDLON,KFLEV)1366 REAL *8PRAYL(KDLON)1367 REAL *8PSEC(KDLON)1368 C 1369 REAL *8PCGAZ(KDLON,KFLEV)1370 REAL *8PPIZAZ(KDLON,KFLEV)1371 REAL *8PRAY1(KDLON,KFLEV+1)1372 REAL *8PRAY2(KDLON,KFLEV+1)1373 REAL *8PREFZ(KDLON,2,KFLEV+1)1374 REAL *8PRJ(KDLON,6,KFLEV+1)1375 REAL *8PRK(KDLON,6,KFLEV+1)1376 REAL *8PRMU0(KDLON,KFLEV+1)1377 REAL *8PTAUAZ(KDLON,KFLEV)1378 REAL *8PTRA1(KDLON,KFLEV+1)1379 REAL *8PTRA2(KDLON,KFLEV+1)1322 real(kind=8) flag_aer 1323 real(kind=8) tauae(kdlon,kflev,2) 1324 real(kind=8) pizae(kdlon,kflev,2) 1325 real(kind=8) cgae(kdlon,kflev,2) 1326 REAL(KIND=8) PAER(KDLON,KFLEV,5) 1327 REAL(KIND=8) PALBP(KDLON,2) 1328 REAL(KIND=8) PDSIG(KDLON,KFLEV) 1329 REAL(KIND=8) PRAYL(KDLON) 1330 REAL(KIND=8) PSEC(KDLON) 1331 C 1332 REAL(KIND=8) PCGAZ(KDLON,KFLEV) 1333 REAL(KIND=8) PPIZAZ(KDLON,KFLEV) 1334 REAL(KIND=8) PRAY1(KDLON,KFLEV+1) 1335 REAL(KIND=8) PRAY2(KDLON,KFLEV+1) 1336 REAL(KIND=8) PREFZ(KDLON,2,KFLEV+1) 1337 REAL(KIND=8) PRJ(KDLON,6,KFLEV+1) 1338 REAL(KIND=8) PRK(KDLON,6,KFLEV+1) 1339 REAL(KIND=8) PRMU0(KDLON,KFLEV+1) 1340 REAL(KIND=8) PTAUAZ(KDLON,KFLEV) 1341 REAL(KIND=8) PTRA1(KDLON,KFLEV+1) 1342 REAL(KIND=8) PTRA2(KDLON,KFLEV+1) 1380 1343 C 1381 1344 C* LOCAL VARIABLES: 1382 1345 C 1383 REAL *8ZC0I(KDLON,KFLEV+1)1384 REAL *8ZCLE0(KDLON,KFLEV)1385 REAL *8ZCLEAR(KDLON)1386 REAL *8ZR21(KDLON)1387 REAL *8ZR23(KDLON)1388 REAL *8ZSS0(KDLON)1389 REAL *8ZSCAT(KDLON)1390 REAL *8ZTR(KDLON,2,KFLEV+1)1346 REAL(KIND=8) ZC0I(KDLON,KFLEV+1) 1347 REAL(KIND=8) ZCLE0(KDLON,KFLEV) 1348 REAL(KIND=8) ZCLEAR(KDLON) 1349 REAL(KIND=8) ZR21(KDLON) 1350 REAL(KIND=8) ZR23(KDLON) 1351 REAL(KIND=8) ZSS0(KDLON) 1352 REAL(KIND=8) ZSCAT(KDLON) 1353 REAL(KIND=8) ZTR(KDLON,2,KFLEV+1) 1391 1354 C 1392 1355 INTEGER jl, jk, ja, jae, jkl, jklp1, jaj, jkm1, in 1393 REAL*8 ZTRAY, ZGAR, ZRATIO, ZFF, ZFACOA, ZCORAE 1394 REAL*8 ZMUE, ZGAP, ZWW, ZTO, ZDEN, ZMU1, ZDEN1 1395 REAL*8 ZBMU0, ZBMU1, ZRE11 1396 C 1397 C* Prescribed Data for Aerosols: 1398 C 1399 REAL*8 TAUA(2,5), RPIZA(2,5), RCGA(2,5) 1400 SAVE TAUA, RPIZA, RCGA 1401 c$OMP THREADPRIVATE(TAUA, RPIZA, RCGA) 1402 DATA ((TAUA(IN,JA),JA=1,5),IN=1,2) / 1403 S .730719, .912819, .725059, .745405, .682188 , 1404 S .730719, .912819, .725059, .745405, .682188 / 1405 DATA ((RPIZA(IN,JA),JA=1,5),IN=1,2) / 1406 S .872212, .982545, .623143, .944887, .997975 , 1407 S .872212, .982545, .623143, .944887, .997975 / 1408 DATA ((RCGA (IN,JA),JA=1,5),IN=1,2) / 1409 S .647596, .739002, .580845, .662657, .624246 , 1410 S .647596, .739002, .580845, .662657, .624246 / 1356 REAL(KIND=8) ZTRAY, ZGAR, ZRATIO, ZFF, ZFACOA, ZCORAE 1357 REAL(KIND=8) ZMUE, ZGAP, ZWW, ZTO, ZDEN, ZMU1, ZDEN1 1358 REAL(KIND=8) ZBMU0, ZBMU1, ZRE11 1359 C 1360 1411 1361 C ------------------------------------------------------------------ 1412 1362 C … … 1416 1366 100 CONTINUE 1417 1367 C 1368 !cdir collapse 1418 1369 DO 103 JK = 1 , KFLEV+1 1419 1370 DO 102 JA = 1 , 6 … … 1724 1675 C 1725 1676 INTEGER KNU 1726 REAL *8PALBD(KDLON,2)1727 REAL *8PCG(KDLON,2,KFLEV)1728 REAL *8PCLD(KDLON,KFLEV)1729 REAL *8PDSIG(KDLON,KFLEV)1730 REAL *8POMEGA(KDLON,2,KFLEV)1731 REAL *8PRAYL(KDLON)1732 REAL *8PSEC(KDLON)1733 REAL *8PTAU(KDLON,2,KFLEV)1734 C 1735 REAL *8PRAY1(KDLON,KFLEV+1)1736 REAL *8PRAY2(KDLON,KFLEV+1)1737 REAL *8PREFZ(KDLON,2,KFLEV+1)1738 REAL *8PRJ(KDLON,6,KFLEV+1)1739 REAL *8PRK(KDLON,6,KFLEV+1)1740 REAL *8PRMUE(KDLON,KFLEV+1)1741 REAL *8PCGAZ(KDLON,KFLEV)1742 REAL *8PPIZAZ(KDLON,KFLEV)1743 REAL *8PTAUAZ(KDLON,KFLEV)1744 REAL *8PTRA1(KDLON,KFLEV+1)1745 REAL *8PTRA2(KDLON,KFLEV+1)1677 REAL(KIND=8) PALBD(KDLON,2) 1678 REAL(KIND=8) PCG(KDLON,2,KFLEV) 1679 REAL(KIND=8) PCLD(KDLON,KFLEV) 1680 REAL(KIND=8) PDSIG(KDLON,KFLEV) 1681 REAL(KIND=8) POMEGA(KDLON,2,KFLEV) 1682 REAL(KIND=8) PRAYL(KDLON) 1683 REAL(KIND=8) PSEC(KDLON) 1684 REAL(KIND=8) PTAU(KDLON,2,KFLEV) 1685 C 1686 REAL(KIND=8) PRAY1(KDLON,KFLEV+1) 1687 REAL(KIND=8) PRAY2(KDLON,KFLEV+1) 1688 REAL(KIND=8) PREFZ(KDLON,2,KFLEV+1) 1689 REAL(KIND=8) PRJ(KDLON,6,KFLEV+1) 1690 REAL(KIND=8) PRK(KDLON,6,KFLEV+1) 1691 REAL(KIND=8) PRMUE(KDLON,KFLEV+1) 1692 REAL(KIND=8) PCGAZ(KDLON,KFLEV) 1693 REAL(KIND=8) PPIZAZ(KDLON,KFLEV) 1694 REAL(KIND=8) PTAUAZ(KDLON,KFLEV) 1695 REAL(KIND=8) PTRA1(KDLON,KFLEV+1) 1696 REAL(KIND=8) PTRA2(KDLON,KFLEV+1) 1746 1697 C 1747 1698 C* LOCAL VARIABLES: 1748 1699 C 1749 REAL *8ZC1I(KDLON,KFLEV+1)1750 REAL *8ZCLEQ(KDLON,KFLEV)1751 REAL *8ZCLEAR(KDLON)1752 REAL *8ZCLOUD(KDLON)1753 REAL *8ZGG(KDLON)1754 REAL *8ZREF(KDLON)1755 REAL *8ZRE1(KDLON)1756 REAL *8ZRE2(KDLON)1757 REAL *8ZRMUZ(KDLON)1758 REAL *8ZRNEB(KDLON)1759 REAL *8ZR21(KDLON)1760 REAL *8ZR22(KDLON)1761 REAL *8ZR23(KDLON)1762 REAL *8ZSS1(KDLON)1763 REAL *8ZTO1(KDLON)1764 REAL *8ZTR(KDLON,2,KFLEV+1)1765 REAL *8ZTR1(KDLON)1766 REAL *8ZTR2(KDLON)1767 REAL *8ZW(KDLON)1700 REAL(KIND=8) ZC1I(KDLON,KFLEV+1) 1701 REAL(KIND=8) ZCLEQ(KDLON,KFLEV) 1702 REAL(KIND=8) ZCLEAR(KDLON) 1703 REAL(KIND=8) ZCLOUD(KDLON) 1704 REAL(KIND=8) ZGG(KDLON) 1705 REAL(KIND=8) ZREF(KDLON) 1706 REAL(KIND=8) ZRE1(KDLON) 1707 REAL(KIND=8) ZRE2(KDLON) 1708 REAL(KIND=8) ZRMUZ(KDLON) 1709 REAL(KIND=8) ZRNEB(KDLON) 1710 REAL(KIND=8) ZR21(KDLON) 1711 REAL(KIND=8) ZR22(KDLON) 1712 REAL(KIND=8) ZR23(KDLON) 1713 REAL(KIND=8) ZSS1(KDLON) 1714 REAL(KIND=8) ZTO1(KDLON) 1715 REAL(KIND=8) ZTR(KDLON,2,KFLEV+1) 1716 REAL(KIND=8) ZTR1(KDLON) 1717 REAL(KIND=8) ZTR2(KDLON) 1718 REAL(KIND=8) ZW(KDLON) 1768 1719 C 1769 1720 INTEGER jk, jl, ja, jkl, jklp1, jkm1, jaj 1770 REAL *8ZFACOA, ZFACOC, ZCORAE, ZCORCD1771 REAL *8ZMUE, ZGAP, ZWW, ZTO, ZDEN, ZDEN11772 REAL *8ZMU1, ZRE11, ZBMU0, ZBMU11721 REAL(KIND=8) ZFACOA, ZFACOC, ZCORAE, ZCORCD 1722 REAL(KIND=8) ZMUE, ZGAP, ZWW, ZTO, ZDEN, ZDEN1 1723 REAL(KIND=8) ZMU1, ZRE11, ZBMU0, ZBMU1 1773 1724 C 1774 1725 C ------------------------------------------------------------------ … … 2077 2028 C* ARGUMENTS: 2078 2029 C 2079 REAL *8PGG(KDLON) ! ASSYMETRY FACTOR2080 REAL *8PREF(KDLON) ! REFLECTIVITY OF THE UNDERLYING LAYER2081 REAL *8PRMUZ(KDLON) ! COSINE OF SOLAR ZENITH ANGLE2082 REAL *8PTO1(KDLON) ! OPTICAL THICKNESS2083 REAL *8PW(KDLON) ! SINGLE SCATTERING ALBEDO2084 REAL *8PRE1(KDLON) ! LAYER REFLECTIVITY (NO UNDERLYING-LAYER REFLECTION)2085 REAL *8PRE2(KDLON) ! LAYER REFLECTIVITY2086 REAL *8PTR1(KDLON) ! LAYER TRANSMISSIVITY (NO UNDERLYING-LAYER REFLECTION)2087 REAL *8PTR2(KDLON) ! LAYER TRANSMISSIVITY2030 REAL(KIND=8) PGG(KDLON) ! ASSYMETRY FACTOR 2031 REAL(KIND=8) PREF(KDLON) ! REFLECTIVITY OF THE UNDERLYING LAYER 2032 REAL(KIND=8) PRMUZ(KDLON) ! COSINE OF SOLAR ZENITH ANGLE 2033 REAL(KIND=8) PTO1(KDLON) ! OPTICAL THICKNESS 2034 REAL(KIND=8) PW(KDLON) ! SINGLE SCATTERING ALBEDO 2035 REAL(KIND=8) PRE1(KDLON) ! LAYER REFLECTIVITY (NO UNDERLYING-LAYER REFLECTION) 2036 REAL(KIND=8) PRE2(KDLON) ! LAYER REFLECTIVITY 2037 REAL(KIND=8) PTR1(KDLON) ! LAYER TRANSMISSIVITY (NO UNDERLYING-LAYER REFLECTION) 2038 REAL(KIND=8) PTR2(KDLON) ! LAYER TRANSMISSIVITY 2088 2039 C 2089 2040 C* LOCAL VARIABLES: 2090 2041 C 2091 2042 INTEGER jl 2092 REAL*8 ZFF, ZGP, ZTOP, ZWCP, ZDT, ZX1, ZWM 2093 REAL*8 ZRM2, ZRK, ZX2, ZRP, ZALPHA, ZBETA, ZARG 2094 REAL*8 ZEXMU0, ZARG2, ZEXKP, ZEXKM, ZXP2P, ZXM2P, ZAP2B, ZAM2B 2095 REAL*8 ZA11, ZA12, ZA13, ZA21, ZA22, ZA23 2096 REAL*8 ZDENA, ZC1A, ZC2A, ZRI0A, ZRI1A 2097 REAL*8 ZRI0B, ZRI1B 2098 REAL*8 ZB21, ZB22, ZB23, ZDENB, ZC1B, ZC2B 2099 REAL*8 ZRI0C, ZRI1C, ZRI0D, ZRI1D 2043 REAL(KIND=8) ZFF, ZGP, ZTOP, ZWCP, ZDT, ZX1, ZWM 2044 REAL(KIND=8) ZRM2, ZRK, ZX2, ZRP, ZALPHA, ZBETA, ZARG 2045 REAL(KIND=8) ZEXMU0, ZARG2, ZEXKP, ZEXKM, ZXP2P, ZXM2P, ZAP2B, 2046 $ ZAM2B 2047 REAL(KIND=8) ZA11, ZA12, ZA13, ZA21, ZA22, ZA23 2048 REAL(KIND=8) ZDENA, ZC1A, ZC2A, ZRI0A, ZRI1A 2049 REAL(KIND=8) ZRI0B, ZRI1B 2050 REAL(KIND=8) ZB21, ZB22, ZB23, ZDENB, ZC1B, ZC2B 2051 REAL(KIND=8) ZRI0C, ZRI1C, ZRI0D, ZRI1D 2100 2052 C ------------------------------------------------------------------ 2101 2053 C … … 2175 2127 SUBROUTINE SWTT_LMDAR4 (KNU,KA,PU,PTR) 2176 2128 USE dimphy 2129 USE radiation_AR4_param, only : APAD, BPAD, D 2177 2130 IMPLICIT none 2178 2131 cym#include "dimensions.h" … … 2212 2165 INTEGER KNU ! INDEX OF THE SPECTRAL INTERVAL 2213 2166 INTEGER KA ! INDEX OF THE ABSORBER 2214 REAL *8PU(KDLON) ! ABSORBER AMOUNT2215 C 2216 REAL *8PTR(KDLON) ! TRANSMISSION FUNCTION2167 REAL(KIND=8) PU(KDLON) ! ABSORBER AMOUNT 2168 C 2169 REAL(KIND=8) PTR(KDLON) ! TRANSMISSION FUNCTION 2217 2170 C 2218 2171 C* LOCAL VARIABLES: 2219 2172 C 2220 REAL *8ZR1(KDLON), ZR2(KDLON)2173 REAL(KIND=8) ZR1(KDLON), ZR2(KDLON) 2221 2174 INTEGER jl, i,j 2222 2175 C 2223 C* Prescribed Data: 2224 C 2225 REAL*8 APAD(2,3,7), BPAD(2,3,7), D(2,3) 2226 SAVE APAD, BPAD, D 2227 c$OMP THREADPRIVATE(APAD, BPAD, D) 2228 DATA ((APAD(1,I,J),I=1,3),J=1,7) / 2229 S 0.912418292E+05, 0.000000000E-00, 0.925887084E-04, 2230 S 0.723613782E+05, 0.000000000E-00, 0.129353723E-01, 2231 S 0.596037057E+04, 0.000000000E-00, 0.800821928E+00, 2232 S 0.000000000E-00, 0.000000000E-00, 0.242715973E+02, 2233 S 0.000000000E-00, 0.000000000E-00, 0.878331486E+02, 2234 S 0.000000000E-00, 0.000000000E-00, 0.191559725E+02, 2235 S 0.000000000E-00, 0.000000000E-00, 0.000000000E+00 / 2236 DATA ((APAD(2,I,J),I=1,3),J=1,7) / 2237 S 0.376655383E-08, 0.739646016E-08, 0.410177786E+03, 2238 S 0.978576773E-04, 0.131849595E-03, 0.672595424E+02, 2239 S 0.387714006E+00, 0.437772681E+00, 0.000000000E-00, 2240 S 0.118461660E+03, 0.151345118E+03, 0.000000000E-00, 2241 S 0.119079797E+04, 0.233628890E+04, 0.000000000E-00, 2242 S 0.293353397E+03, 0.797219934E+03, 0.000000000E-00, 2243 S 0.000000000E+00, 0.000000000E+00, 0.000000000E+00 / 2244 C 2245 DATA ((BPAD(1,I,J),I=1,3),J=1,7) / 2246 S 0.912418292E+05, 0.000000000E-00, 0.925887084E-04, 2247 S 0.724555318E+05, 0.000000000E-00, 0.131812683E-01, 2248 S 0.602593328E+04, 0.000000000E-00, 0.812706117E+00, 2249 S 0.100000000E+01, 0.000000000E-00, 0.249863591E+02, 2250 S 0.000000000E-00, 0.000000000E-00, 0.931071925E+02, 2251 S 0.000000000E-00, 0.000000000E-00, 0.252233437E+02, 2252 S 0.000000000E-00, 0.000000000E-00, 0.100000000E+01 / 2253 DATA ((BPAD(2,I,J),I=1,3),J=1,7) / 2254 S 0.376655383E-08, 0.739646016E-08, 0.410177786E+03, 2255 S 0.979023421E-04, 0.131861712E-03, 0.731185438E+02, 2256 S 0.388611139E+00, 0.437949001E+00, 0.100000000E+01, 2257 S 0.120291383E+03, 0.151692730E+03, 0.000000000E+00, 2258 S 0.130531005E+04, 0.237071130E+04, 0.000000000E+00, 2259 S 0.415049409E+03, 0.867914360E+03, 0.000000000E+00, 2260 S 0.100000000E+01, 0.100000000E+01, 0.000000000E+00 / 2261 c 2262 DATA (D(1,I),I=1,3) / 0.00, 0.00, 0.00 / 2263 DATA (D(2,I),I=1,3) / 0.000000000, 0.000000000, 0.800000000 / 2176 2264 2177 C 2265 2178 C----------------------------------------------------------------------- … … 2293 2206 SUBROUTINE SWTT1_LMDAR4(KNU,KABS,KIND, PU, PTR) 2294 2207 USE dimphy 2208 USE radiation_AR4_param, only : APAD, BPAD, D 2295 2209 IMPLICIT none 2296 2210 cym#include "dimensions.h" … … 2330 2244 INTEGER KABS ! NUMBER OF ABSORBERS 2331 2245 INTEGER KIND(KABS) ! INDICES OF THE ABSORBERS 2332 REAL *8PU(KDLON,KABS) ! ABSORBER AMOUNT2333 C 2334 REAL *8PTR(KDLON,KABS) ! TRANSMISSION FUNCTION2246 REAL(KIND=8) PU(KDLON,KABS) ! ABSORBER AMOUNT 2247 C 2248 REAL(KIND=8) PTR(KDLON,KABS) ! TRANSMISSION FUNCTION 2335 2249 C 2336 2250 C* LOCAL VARIABLES: 2337 2251 C 2338 REAL *8ZR1(KDLON)2339 REAL *8ZR2(KDLON)2340 REAL *8ZU(KDLON)2252 REAL(KIND=8) ZR1(KDLON) 2253 REAL(KIND=8) ZR2(KDLON) 2254 REAL(KIND=8) ZU(KDLON) 2341 2255 INTEGER jl, ja, i, j, ia 2342 2256 C 2343 C* Prescribed Data: 2344 C 2345 REAL*8 APAD(2,3,7), BPAD(2,3,7), D(2,3) 2346 SAVE APAD, BPAD, D 2347 c$OMP THREADPRIVATE(APAD, BPAD, D) 2348 DATA ((APAD(1,I,J),I=1,3),J=1,7) / 2349 S 0.912418292E+05, 0.000000000E-00, 0.925887084E-04, 2350 S 0.723613782E+05, 0.000000000E-00, 0.129353723E-01, 2351 S 0.596037057E+04, 0.000000000E-00, 0.800821928E+00, 2352 S 0.000000000E-00, 0.000000000E-00, 0.242715973E+02, 2353 S 0.000000000E-00, 0.000000000E-00, 0.878331486E+02, 2354 S 0.000000000E-00, 0.000000000E-00, 0.191559725E+02, 2355 S 0.000000000E-00, 0.000000000E-00, 0.000000000E+00 / 2356 DATA ((APAD(2,I,J),I=1,3),J=1,7) / 2357 S 0.376655383E-08, 0.739646016E-08, 0.410177786E+03, 2358 S 0.978576773E-04, 0.131849595E-03, 0.672595424E+02, 2359 S 0.387714006E+00, 0.437772681E+00, 0.000000000E-00, 2360 S 0.118461660E+03, 0.151345118E+03, 0.000000000E-00, 2361 S 0.119079797E+04, 0.233628890E+04, 0.000000000E-00, 2362 S 0.293353397E+03, 0.797219934E+03, 0.000000000E-00, 2363 S 0.000000000E+00, 0.000000000E+00, 0.000000000E+00 / 2364 C 2365 DATA ((BPAD(1,I,J),I=1,3),J=1,7) / 2366 S 0.912418292E+05, 0.000000000E-00, 0.925887084E-04, 2367 S 0.724555318E+05, 0.000000000E-00, 0.131812683E-01, 2368 S 0.602593328E+04, 0.000000000E-00, 0.812706117E+00, 2369 S 0.100000000E+01, 0.000000000E-00, 0.249863591E+02, 2370 S 0.000000000E-00, 0.000000000E-00, 0.931071925E+02, 2371 S 0.000000000E-00, 0.000000000E-00, 0.252233437E+02, 2372 S 0.000000000E-00, 0.000000000E-00, 0.100000000E+01 / 2373 DATA ((BPAD(2,I,J),I=1,3),J=1,7) / 2374 S 0.376655383E-08, 0.739646016E-08, 0.410177786E+03, 2375 S 0.979023421E-04, 0.131861712E-03, 0.731185438E+02, 2376 S 0.388611139E+00, 0.437949001E+00, 0.100000000E+01, 2377 S 0.120291383E+03, 0.151692730E+03, 0.000000000E+00, 2378 S 0.130531005E+04, 0.237071130E+04, 0.000000000E+00, 2379 S 0.415049409E+03, 0.867914360E+03, 0.000000000E+00, 2380 S 0.100000000E+01, 0.100000000E+01, 0.000000000E+00 / 2381 c 2382 DATA (D(1,I),I=1,3) / 0.00, 0.00, 0.00 / 2383 DATA (D(2,I),I=1,3) / 0.000000000, 0.000000000, 0.800000000 / 2257 2384 2258 C----------------------------------------------------------------------- 2385 2259 C … … 2464 2338 C----------------------------------------------------------------------- 2465 2339 cIM ctes ds clesphys.h 2466 c REAL *8RCO2 ! CO2 CONCENTRATION (IPCC:353.E-06* 44.011/28.97)2467 c REAL *8RCH4 ! CH4 CONCENTRATION (IPCC: 1.72E-06* 16.043/28.97)2468 c REAL *8RN2O ! N2O CONCENTRATION (IPCC: 310.E-09* 44.013/28.97)2469 c REAL *8RCFC11 ! CFC11 CONCENTRATION (IPCC: 280.E-12* 137.3686/28.97)2470 c REAL *8RCFC12 ! CFC12 CONCENTRATION (IPCC: 484.E-12* 120.9140/28.97)2340 c REAL(KIND=8) RCO2 ! CO2 CONCENTRATION (IPCC:353.E-06* 44.011/28.97) 2341 c REAL(KIND=8) RCH4 ! CH4 CONCENTRATION (IPCC: 1.72E-06* 16.043/28.97) 2342 c REAL(KIND=8) RN2O ! N2O CONCENTRATION (IPCC: 310.E-09* 44.013/28.97) 2343 c REAL(KIND=8) RCFC11 ! CFC11 CONCENTRATION (IPCC: 280.E-12* 137.3686/28.97) 2344 c REAL(KIND=8) RCFC12 ! CFC12 CONCENTRATION (IPCC: 484.E-12* 120.9140/28.97) 2471 2345 #include "clesphys.h" 2472 REAL *8PCLDLD(KDLON,KFLEV) ! DOWNWARD EFFECTIVE CLOUD COVER2473 REAL *8PCLDLU(KDLON,KFLEV) ! UPWARD EFFECTIVE CLOUD COVER2474 REAL *8PDP(KDLON,KFLEV) ! LAYER PRESSURE THICKNESS (Pa)2475 REAL *8PDT0(KDLON) ! SURFACE TEMPERATURE DISCONTINUITY (K)2476 REAL *8PEMIS(KDLON) ! SURFACE EMISSIVITY2477 REAL *8PPMB(KDLON,KFLEV+1) ! HALF LEVEL PRESSURE (mb)2478 REAL *8PPSOL(KDLON) ! SURFACE PRESSURE (Pa)2479 REAL *8 POZON(KDLON,KFLEV) ! O3 CONCENTRATION (kg/kg)2480 REAL *8PTL(KDLON,KFLEV+1) ! HALF LEVEL TEMPERATURE (K)2481 REAL *8PAER(KDLON,KFLEV,5) ! OPTICAL THICKNESS OF THE AEROSOLS2482 REAL *8PTAVE(KDLON,KFLEV) ! LAYER TEMPERATURE (K)2483 REAL *8PVIEW(KDLON) ! COSECANT OF VIEWING ANGLE2484 REAL *8PWV(KDLON,KFLEV) ! SPECIFIC HUMIDITY (kg/kg)2485 C 2486 REAL *8PCOLR(KDLON,KFLEV) ! LONG-WAVE TENDENCY (K/day)2487 REAL *8PCOLR0(KDLON,KFLEV) ! LONG-WAVE TENDENCY (K/day) clear-sky2488 REAL *8PTOPLW(KDLON) ! LONGWAVE FLUX AT T.O.A.2489 REAL *8PSOLLW(KDLON) ! LONGWAVE FLUX AT SURFACE2490 REAL *8PTOPLW0(KDLON) ! LONGWAVE FLUX AT T.O.A. (CLEAR-SKY)2491 REAL *8PSOLLW0(KDLON) ! LONGWAVE FLUX AT SURFACE (CLEAR-SKY)2346 REAL(KIND=8) PCLDLD(KDLON,KFLEV) ! DOWNWARD EFFECTIVE CLOUD COVER 2347 REAL(KIND=8) PCLDLU(KDLON,KFLEV) ! UPWARD EFFECTIVE CLOUD COVER 2348 REAL(KIND=8) PDP(KDLON,KFLEV) ! LAYER PRESSURE THICKNESS (Pa) 2349 REAL(KIND=8) PDT0(KDLON) ! SURFACE TEMPERATURE DISCONTINUITY (K) 2350 REAL(KIND=8) PEMIS(KDLON) ! SURFACE EMISSIVITY 2351 REAL(KIND=8) PPMB(KDLON,KFLEV+1) ! HALF LEVEL PRESSURE (mb) 2352 REAL(KIND=8) PPSOL(KDLON) ! SURFACE PRESSURE (Pa) 2353 REAL(KIND=8) POZON(KDLON,KFLEV) ! O3 mass fraction 2354 REAL(KIND=8) PTL(KDLON,KFLEV+1) ! HALF LEVEL TEMPERATURE (K) 2355 REAL(KIND=8) PAER(KDLON,KFLEV,5) ! OPTICAL THICKNESS OF THE AEROSOLS 2356 REAL(KIND=8) PTAVE(KDLON,KFLEV) ! LAYER TEMPERATURE (K) 2357 REAL(KIND=8) PVIEW(KDLON) ! COSECANT OF VIEWING ANGLE 2358 REAL(KIND=8) PWV(KDLON,KFLEV) ! SPECIFIC HUMIDITY (kg/kg) 2359 C 2360 REAL(KIND=8) PCOLR(KDLON,KFLEV) ! LONG-WAVE TENDENCY (K/day) 2361 REAL(KIND=8) PCOLR0(KDLON,KFLEV) ! LONG-WAVE TENDENCY (K/day) clear-sky 2362 REAL(KIND=8) PTOPLW(KDLON) ! LONGWAVE FLUX AT T.O.A. 2363 REAL(KIND=8) PSOLLW(KDLON) ! LONGWAVE FLUX AT SURFACE 2364 REAL(KIND=8) PTOPLW0(KDLON) ! LONGWAVE FLUX AT T.O.A. (CLEAR-SKY) 2365 REAL(KIND=8) PSOLLW0(KDLON) ! LONGWAVE FLUX AT SURFACE (CLEAR-SKY) 2492 2366 c Rajout LF 2493 real *8psollwdown(kdlon) ! LONGWAVE downwards flux at surface2367 real(kind=8) psollwdown(kdlon) ! LONGWAVE downwards flux at surface 2494 2368 c Rajout IM 2495 cIM real *8psollwdownclr(kdlon) ! LONGWAVE CS downwards flux at surface2496 cIM real *8ptoplwdown(kdlon) ! LONGWAVE downwards flux at T.O.A.2497 cIM real *8ptoplwdownclr(kdlon) ! LONGWAVE CS downwards flux at T.O.A.2369 cIM real(kind=8) psollwdownclr(kdlon) ! LONGWAVE CS downwards flux at surface 2370 cIM real(kind=8) ptoplwdown(kdlon) ! LONGWAVE downwards flux at T.O.A. 2371 cIM real(kind=8) ptoplwdownclr(kdlon) ! LONGWAVE CS downwards flux at T.O.A. 2498 2372 cIM 2499 REAL *8plwup(KDLON,KFLEV+1) ! LW up total sky2500 REAL *8plwup0(KDLON,KFLEV+1) ! LW up clear sky2501 REAL *8plwdn(KDLON,KFLEV+1) ! LW down total sky2502 REAL *8plwdn0(KDLON,KFLEV+1) ! LW down clear sky2373 REAL(KIND=8) plwup(KDLON,KFLEV+1) ! LW up total sky 2374 REAL(KIND=8) plwup0(KDLON,KFLEV+1) ! LW up clear sky 2375 REAL(KIND=8) plwdn(KDLON,KFLEV+1) ! LW down total sky 2376 REAL(KIND=8) plwdn0(KDLON,KFLEV+1) ! LW down clear sky 2503 2377 C------------------------------------------------------------------------- 2504 REAL*8 ZABCU(KDLON,NUA,3*KFLEV+1) 2505 REAL*8 ZOZ(KDLON,KFLEV) 2506 c 2507 cym REAL*8 ZFLUX(KDLON,2,KFLEV+1) ! RADIATIVE FLUXES (1:up; 2:down) 2508 cym REAL*8 ZFLUC(KDLON,2,KFLEV+1) ! CLEAR-SKY RADIATIVE FLUXES 2509 cym REAL*8 ZBINT(KDLON,KFLEV+1) ! Intermediate variable 2510 cym REAL*8 ZBSUI(KDLON) ! Intermediate variable 2511 cym REAL*8,ZCTS(KDLON,KFLEV) ! Intermediate variable 2512 cym REAL*8 ZCNTRB(KDLON,KFLEV+1,KFLEV+1) ! Intermediate variable 2378 REAL(KIND=8) ZABCU(KDLON,NUA,3*KFLEV+1) 2379 2380 REAL(KIND=8) ZOZ(KDLON,KFLEV) 2381 ! equivalent pressure of ozone in a layer, in Pa 2382 2383 cym REAL(KIND=8) ZFLUX(KDLON,2,KFLEV+1) ! RADIATIVE FLUXES (1:up; 2:down) 2384 cym REAL(KIND=8) ZFLUC(KDLON,2,KFLEV+1) ! CLEAR-SKY RADIATIVE FLUXES 2385 cym REAL(KIND=8) ZBINT(KDLON,KFLEV+1) ! Intermediate variable 2386 cym REAL(KIND=8) ZBSUI(KDLON) ! Intermediate variable 2387 cym REAL(KIND=8) ZCTS(KDLON,KFLEV) ! Intermediate variable 2388 cym REAL(KIND=8) ZCNTRB(KDLON,KFLEV+1,KFLEV+1) ! Intermediate variable 2513 2389 cym SAVE ZFLUX, ZFLUC, ZBINT, ZBSUI, ZCTS, ZCNTRB 2514 REAL *8,allocatable,save :: ZFLUX(:,:,:) ! RADIATIVE FLUXES (1:up; 2:down)2515 REAL *8,allocatable,save :: ZFLUC(:,:,:) ! CLEAR-SKY RADIATIVE FLUXES2516 REAL *8,allocatable,save :: ZBINT(:,:) ! Intermediate variable2517 REAL *8,allocatable,save :: ZBSUI(:) ! Intermediate variable2518 REAL *8,allocatable,save :: ZCTS(:,:) ! Intermediate variable2519 REAL *8,allocatable,save :: ZCNTRB(:,:,:) ! Intermediate variable2390 REAL(KIND=8),allocatable,save :: ZFLUX(:,:,:) ! RADIATIVE FLUXES (1:up; 2:down) 2391 REAL(KIND=8),allocatable,save :: ZFLUC(:,:,:) ! CLEAR-SKY RADIATIVE FLUXES 2392 REAL(KIND=8),allocatable,save :: ZBINT(:,:) ! Intermediate variable 2393 REAL(KIND=8),allocatable,save :: ZBSUI(:) ! Intermediate variable 2394 REAL(KIND=8),allocatable,save :: ZCTS(:,:) ! Intermediate variable 2395 REAL(KIND=8),allocatable,save :: ZCNTRB(:,:,:) ! Intermediate variable 2520 2396 c$OMP THREADPRIVATE(ZFLUX, ZFLUC, ZBINT, ZBSUI, ZCTS, ZCNTRB) 2521 2397 c … … 2550 2426 C 2551 2427 IF (MOD(itaplw0,lw0pas).EQ.0) THEN 2552 DO k = 1, KFLEV ! convertir ozone de kg/kg en pa/pa 2553 DO i = 1, KDLON 2554 c convertir ozone de kg/kg en pa (modif MPL 100505) 2555 ZOZ(i,k) = POZON(i,k)*PDP(i,k) * RMD/RMO3 2556 c print *,'LW: ZOZ*10**6=',ZOZ(i,k)*1000000. 2557 ENDDO 2428 c Compute equivalent pressure of ozone from mass fraction: 2429 DO k = 1, KFLEV 2430 DO i = 1, KDLON 2431 ZOZ(i,k) = POZON(i,k)*PDP(i,k) 2432 ENDDO 2558 2433 ENDDO 2559 2434 cIM ctes ds clesphys.h CALL LWU(RCO2,RCH4, RN2O, RCFC11, RCFC12, … … 2609 2484 S PABCU) 2610 2485 USE dimphy 2486 USE radiation_AR4_param, only : TREF, RT1, RAER, AT, BT, OCT 2611 2487 IMPLICIT none 2612 2488 cym#include "dimensions.h" … … 2647 2523 C* ARGUMENTS: 2648 2524 cIM ctes ds clesphys.h 2649 c REAL *8RCO22650 c REAL *8RCH4, RN2O, RCFC11, RCFC122525 c REAL(KIND=8) RCO2 2526 c REAL(KIND=8) RCH4, RN2O, RCFC11, RCFC12 2651 2527 #include "clesphys.h" 2652 REAL *8PAER(KDLON,KFLEV,5)2653 REAL *8PDP(KDLON,KFLEV)2654 REAL *8PPMB(KDLON,KFLEV+1)2655 REAL *8PPSOL(KDLON)2656 REAL *8POZ(KDLON,KFLEV)2657 REAL *8PTAVE(KDLON,KFLEV)2658 REAL *8PVIEW(KDLON)2659 REAL *8PWV(KDLON,KFLEV)2660 C 2661 REAL *8PABCU(KDLON,NUA,3*KFLEV+1) ! EFFECTIVE ABSORBER AMOUNTS2528 REAL(KIND=8) PAER(KDLON,KFLEV,5) 2529 REAL(KIND=8) PDP(KDLON,KFLEV) 2530 REAL(KIND=8) PPMB(KDLON,KFLEV+1) 2531 REAL(KIND=8) PPSOL(KDLON) 2532 REAL(KIND=8) POZ(KDLON,KFLEV) 2533 REAL(KIND=8) PTAVE(KDLON,KFLEV) 2534 REAL(KIND=8) PVIEW(KDLON) 2535 REAL(KIND=8) PWV(KDLON,KFLEV) 2536 C 2537 REAL(KIND=8) PABCU(KDLON,NUA,3*KFLEV+1) ! EFFECTIVE ABSORBER AMOUNTS 2662 2538 C 2663 2539 C----------------------------------------------------------------------- 2664 2540 C* LOCAL VARIABLES: 2665 REAL *8ZABLY(KDLON,NUA,3*KFLEV+1)2666 REAL *8ZDUC(KDLON,3*KFLEV+1)2667 REAL *8ZPHIO(KDLON)2668 REAL *8ZPSC2(KDLON)2669 REAL *8ZPSC3(KDLON)2670 REAL *8ZPSH1(KDLON)2671 REAL *8ZPSH2(KDLON)2672 REAL *8ZPSH3(KDLON)2673 REAL *8ZPSH4(KDLON)2674 REAL *8ZPSH5(KDLON)2675 REAL *8ZPSH6(KDLON)2676 REAL *8ZPSIO(KDLON)2677 REAL *8ZTCON(KDLON)2678 REAL *8ZPHM6(KDLON)2679 REAL *8ZPSM6(KDLON)2680 REAL *8ZPHN6(KDLON)2681 REAL *8ZPSN6(KDLON)2682 REAL *8ZSSIG(KDLON,3*KFLEV+1)2683 REAL *8ZTAVI(KDLON)2684 REAL *8ZUAER(KDLON,Ninter)2685 REAL *8ZXOZ(KDLON)2686 REAL *8ZXWV(KDLON)2541 REAL(KIND=8) ZABLY(KDLON,NUA,3*KFLEV+1) 2542 REAL(KIND=8) ZDUC(KDLON,3*KFLEV+1) 2543 REAL(KIND=8) ZPHIO(KDLON) 2544 REAL(KIND=8) ZPSC2(KDLON) 2545 REAL(KIND=8) ZPSC3(KDLON) 2546 REAL(KIND=8) ZPSH1(KDLON) 2547 REAL(KIND=8) ZPSH2(KDLON) 2548 REAL(KIND=8) ZPSH3(KDLON) 2549 REAL(KIND=8) ZPSH4(KDLON) 2550 REAL(KIND=8) ZPSH5(KDLON) 2551 REAL(KIND=8) ZPSH6(KDLON) 2552 REAL(KIND=8) ZPSIO(KDLON) 2553 REAL(KIND=8) ZTCON(KDLON) 2554 REAL(KIND=8) ZPHM6(KDLON) 2555 REAL(KIND=8) ZPSM6(KDLON) 2556 REAL(KIND=8) ZPHN6(KDLON) 2557 REAL(KIND=8) ZPSN6(KDLON) 2558 REAL(KIND=8) ZSSIG(KDLON,3*KFLEV+1) 2559 REAL(KIND=8) ZTAVI(KDLON) 2560 REAL(KIND=8) ZUAER(KDLON,Ninter) 2561 REAL(KIND=8) ZXOZ(KDLON) 2562 REAL(KIND=8) ZXWV(KDLON) 2687 2563 C 2688 2564 INTEGER jl, jk, jkj, jkjr, jkjp, ig1 … … 2691 2567 INTEGER jae1, jae2, jae3, jae, jjpn 2692 2568 INTEGER ir, jc, jcp1 2693 REAL *8zdpm, zupm, zupmh2o, zupmco2, zupmo3, zu6, zup2694 REAL *8zfppw, ztx, ztx2, zzably2695 REAL *8zcah1, zcbh1, zcah2, zcbh2, zcah3, zcbh32696 REAL *8zcah4, zcbh4, zcah5, zcbh5, zcah6, zcbh62697 REAL *8zcac8, zcbc82698 REAL *8zalup, zdiff2569 REAL(KIND=8) zdpm, zupm, zupmh2o, zupmco2, zupmo3, zu6, zup 2570 REAL(KIND=8) zfppw, ztx, ztx2, zzably 2571 REAL(KIND=8) zcah1, zcbh1, zcah2, zcbh2, zcah3, zcbh3 2572 REAL(KIND=8) zcah4, zcbh4, zcah5, zcbh5, zcah6, zcbh6 2573 REAL(KIND=8) zcac8, zcbc8 2574 REAL(KIND=8) zalup, zdiff 2699 2575 c 2700 REAL *8PVGCO2, PVGH2O, PVGO32701 C 2702 REAL *8R10E ! DECIMAL/NATURAL LOG.FACTOR2576 REAL(KIND=8) PVGCO2, PVGH2O, PVGO3 2577 C 2578 REAL(KIND=8) R10E ! DECIMAL/NATURAL LOG.FACTOR 2703 2579 PARAMETER (R10E=0.4342945) 2704 c 2705 c Used Data Block: 2706 c 2707 REAL*8 TREF 2708 SAVE TREF 2709 c$OMP THREADPRIVATE(TREF) 2710 REAL*8 RT1(2) 2711 SAVE RT1 2712 c$OMP THREADPRIVATE(RT1) 2713 REAL*8 RAER(5,5) 2714 SAVE RAER 2715 c$OMP THREADPRIVATE(RAER) 2716 REAL*8 AT(8,3), BT(8,3) 2717 SAVE AT, BT 2718 c$OMP THREADPRIVATE(AT, BT) 2719 REAL*8 OCT(4) 2720 SAVE OCT 2721 c$OMP THREADPRIVATE(OCT) 2722 DATA TREF /250.0/ 2723 DATA (RT1(IG1),IG1=1,2) / -0.577350269, +0.577350269 / 2724 DATA RAER / .038520, .037196, .040532, .054934, .038520 2725 1 , .12613 , .18313 , .10357 , .064106, .126130 2726 2 , .012579, .013649, .018652, .025181, .012579 2727 3 , .011890, .016142, .021105, .028908, .011890 2728 4 , .013792, .026810, .052203, .066338, .013792 / 2729 DATA (AT(1,IR),IR=1,3) / 2730 S 0.298199E-02,-.394023E-03,0.319566E-04 / 2731 DATA (BT(1,IR),IR=1,3) / 2732 S-0.106432E-04,0.660324E-06,0.174356E-06 / 2733 DATA (AT(2,IR),IR=1,3) / 2734 S 0.143676E-01,0.366501E-02,-.160822E-02 / 2735 DATA (BT(2,IR),IR=1,3) / 2736 S-0.553979E-04,-.101701E-04,0.920868E-05 / 2737 DATA (AT(3,IR),IR=1,3) / 2738 S 0.197861E-01,0.315541E-02,-.174547E-02 / 2739 DATA (BT(3,IR),IR=1,3) / 2740 S-0.877012E-04,0.513302E-04,0.523138E-06 / 2741 DATA (AT(4,IR),IR=1,3) / 2742 S 0.289560E-01,-.208807E-02,-.121943E-02 / 2743 DATA (BT(4,IR),IR=1,3) / 2744 S-0.165960E-03,0.157704E-03,-.146427E-04 / 2745 DATA (AT(5,IR),IR=1,3) / 2746 S 0.103800E-01,0.436296E-02,-.161431E-02 / 2747 DATA (BT(5,IR),IR=1,3) / 2748 S -.276744E-04,-.327381E-04,0.127646E-04 / 2749 DATA (AT(6,IR),IR=1,3) / 2750 S 0.868859E-02,-.972752E-03,0.000000E-00 / 2751 DATA (BT(6,IR),IR=1,3) / 2752 S -.278412E-04,-.713940E-06,0.117469E-05 / 2753 DATA (AT(7,IR),IR=1,3) / 2754 S 0.250073E-03,0.455875E-03,0.109242E-03 / 2755 DATA (BT(7,IR),IR=1,3) / 2756 S 0.199846E-05,-.216313E-05,0.175991E-06 / 2757 DATA (AT(8,IR),IR=1,3) / 2758 S 0.307423E-01,0.110879E-02,-.322172E-03 / 2759 DATA (BT(8,IR),IR=1,3) / 2760 S-0.108482E-03,0.258096E-05,-.814575E-06 / 2761 c 2762 DATA OCT /-.326E-03, -.102E-05, .137E-02, -.535E-05/ 2580 2763 2581 C----------------------------------------------------------------------- 2764 2582 c … … 3048 2866 INTEGER KLIM 3049 2867 C 3050 REAL *8PDP(KDLON,KFLEV)3051 REAL *8PDT0(KDLON)3052 REAL *8PEMIS(KDLON)3053 REAL *8PPMB(KDLON,KFLEV+1)3054 REAL *8PTL(KDLON,KFLEV+1)3055 REAL *8PTAVE(KDLON,KFLEV)3056 C 3057 REAL *8PFLUC(KDLON,2,KFLEV+1)2868 REAL(KIND=8) PDP(KDLON,KFLEV) 2869 REAL(KIND=8) PDT0(KDLON) 2870 REAL(KIND=8) PEMIS(KDLON) 2871 REAL(KIND=8) PPMB(KDLON,KFLEV+1) 2872 REAL(KIND=8) PTL(KDLON,KFLEV+1) 2873 REAL(KIND=8) PTAVE(KDLON,KFLEV) 2874 C 2875 REAL(KIND=8) PFLUC(KDLON,2,KFLEV+1) 3058 2876 C 3059 REAL *8PABCU(KDLON,NUA,3*KFLEV+1)3060 REAL *8PBINT(KDLON,KFLEV+1)3061 REAL *8PBSUI(KDLON)3062 REAL *8PCTS(KDLON,KFLEV)3063 REAL *8PCNTRB(KDLON,KFLEV+1,KFLEV+1)2877 REAL(KIND=8) PABCU(KDLON,NUA,3*KFLEV+1) 2878 REAL(KIND=8) PBINT(KDLON,KFLEV+1) 2879 REAL(KIND=8) PBSUI(KDLON) 2880 REAL(KIND=8) PCTS(KDLON,KFLEV) 2881 REAL(KIND=8) PCNTRB(KDLON,KFLEV+1,KFLEV+1) 3064 2882 C 3065 2883 C------------------------------------------------------------------------- 3066 2884 C 3067 2885 C* LOCAL VARIABLES: 3068 REAL *8ZB(KDLON,Ninter,KFLEV+1)3069 REAL *8ZBSUR(KDLON,Ninter)3070 REAL *8ZBTOP(KDLON,Ninter)3071 REAL *8ZDBSL(KDLON,Ninter,KFLEV*2)3072 REAL *8ZGA(KDLON,8,2,KFLEV)3073 REAL *8ZGB(KDLON,8,2,KFLEV)3074 REAL *8ZGASUR(KDLON,8,2)3075 REAL *8ZGBSUR(KDLON,8,2)3076 REAL *8ZGATOP(KDLON,8,2)3077 REAL *8ZGBTOP(KDLON,8,2)2886 REAL(KIND=8) ZB(KDLON,Ninter,KFLEV+1) 2887 REAL(KIND=8) ZBSUR(KDLON,Ninter) 2888 REAL(KIND=8) ZBTOP(KDLON,Ninter) 2889 REAL(KIND=8) ZDBSL(KDLON,Ninter,KFLEV*2) 2890 REAL(KIND=8) ZGA(KDLON,8,2,KFLEV) 2891 REAL(KIND=8) ZGB(KDLON,8,2,KFLEV) 2892 REAL(KIND=8) ZGASUR(KDLON,8,2) 2893 REAL(KIND=8) ZGBSUR(KDLON,8,2) 2894 REAL(KIND=8) ZGATOP(KDLON,8,2) 2895 REAL(KIND=8) ZGBTOP(KDLON,8,2) 3078 2896 C 3079 2897 INTEGER nuaer, ntraer … … 3151 2969 C* ARGUMENTS: 3152 2970 INTEGER klim 3153 REAL *8PFLUC(KDLON,2,KFLEV+1) ! CLEAR-SKY RADIATIVE FLUXES3154 REAL *8PBINT(KDLON,KFLEV+1) ! HALF LEVEL PLANCK FUNCTION3155 REAL *8PBSUIN(KDLON) ! SURFACE PLANCK FUNCTION3156 REAL *8PCNTRB(KDLON,KFLEV+1,KFLEV+1) !CLEAR-SKY ENERGY EXCHANGE3157 REAL *8PCTS(KDLON,KFLEV) ! CLEAR-SKY LAYER COOLING-TO-SPACE2971 REAL(KIND=8) PFLUC(KDLON,2,KFLEV+1) ! CLEAR-SKY RADIATIVE FLUXES 2972 REAL(KIND=8) PBINT(KDLON,KFLEV+1) ! HALF LEVEL PLANCK FUNCTION 2973 REAL(KIND=8) PBSUIN(KDLON) ! SURFACE PLANCK FUNCTION 2974 REAL(KIND=8) PCNTRB(KDLON,KFLEV+1,KFLEV+1) !CLEAR-SKY ENERGY EXCHANGE 2975 REAL(KIND=8) PCTS(KDLON,KFLEV) ! CLEAR-SKY LAYER COOLING-TO-SPACE 3158 2976 c 3159 REAL *8PCLDLD(KDLON,KFLEV)3160 REAL *8PCLDLU(KDLON,KFLEV)3161 REAL *8PEMIS(KDLON)3162 C 3163 REAL *8PFLUX(KDLON,2,KFLEV+1)2977 REAL(KIND=8) PCLDLD(KDLON,KFLEV) 2978 REAL(KIND=8) PCLDLU(KDLON,KFLEV) 2979 REAL(KIND=8) PEMIS(KDLON) 2980 C 2981 REAL(KIND=8) PFLUX(KDLON,2,KFLEV+1) 3164 2982 C----------------------------------------------------------------------- 3165 2983 C* LOCAL VARIABLES: 3166 2984 INTEGER IMX(KDLON), IMXP(KDLON) 3167 2985 C 3168 REAL*8 ZCLEAR(KDLON),ZCLOUD(KDLON),ZDNF(KDLON,KFLEV+1,KFLEV+1) 2986 REAL(KIND=8) ZCLEAR(KDLON),ZCLOUD(KDLON), 2987 $ ZDNF(KDLON,KFLEV+1,KFLEV+1) 3169 2988 S , ZFD(KDLON), ZFN10(KDLON), ZFU(KDLON) 3170 2989 S , ZUPF(KDLON,KFLEV+1,KFLEV+1) 3171 REAL *8ZCLM(KDLON,KFLEV+1,KFLEV+1)2990 REAL(KIND=8) ZCLM(KDLON,KFLEV+1,KFLEV+1) 3172 2991 C 3173 2992 INTEGER jk, jl, imaxc, imx1, imx2, jkj, jkp1, jkm1 3174 2993 INTEGER jk1, jk2, jkc, jkcp1, jcloud 3175 2994 INTEGER imxm1, imxp1 3176 REAL *8zcfrac2995 REAL(KIND=8) zcfrac 3177 2996 C ------------------------------------------------------------------ 3178 2997 C … … 3504 3323 S , PGA,PGB,PGASUR,PGBSUR,PGATOP,PGBTOP) 3505 3324 USE dimphy 3325 USE radiation_AR4_param, only : TINTP, XP, GA, GB 3506 3326 IMPLICIT none 3507 3327 cym#include "dimensions.h" … … 3560 3380 C ARGUMENTS: 3561 3381 C 3562 REAL *8PDT0(KDLON)3563 REAL *8PTAVE(KDLON,KFLEV)3564 REAL *8PTL(KDLON,KFLEV+1)3565 C 3566 REAL *8PB(KDLON,Ninter,KFLEV+1) ! SPECTRAL HALF LEVEL PLANCK FUNCTION3567 REAL *8PBINT(KDLON,KFLEV+1) ! HALF LEVEL PLANCK FUNCTION3568 REAL *8PBSUIN(KDLON) ! SURFACE PLANCK FUNCTION3569 REAL *8PBSUR(KDLON,Ninter) ! SURFACE SPECTRAL PLANCK FUNCTION3570 REAL *8PBTOP(KDLON,Ninter) ! TOP SPECTRAL PLANCK FUNCTION3571 REAL *8PDBSL(KDLON,Ninter,KFLEV*2) ! SUB-LAYER PLANCK FUNCTION GRADIENT3572 REAL *8PGA(KDLON,8,2,KFLEV) ! dB/dT-weighted LAYER PADE APPROXIMANTS3573 REAL *8PGB(KDLON,8,2,KFLEV) ! dB/dT-weighted LAYER PADE APPROXIMANTS3574 REAL *8PGASUR(KDLON,8,2) ! SURFACE PADE APPROXIMANTS3575 REAL *8PGBSUR(KDLON,8,2) ! SURFACE PADE APPROXIMANTS3576 REAL *8PGATOP(KDLON,8,2) ! T.O.A. PADE APPROXIMANTS3577 REAL *8PGBTOP(KDLON,8,2) ! T.O.A. PADE APPROXIMANTS3382 REAL(KIND=8) PDT0(KDLON) 3383 REAL(KIND=8) PTAVE(KDLON,KFLEV) 3384 REAL(KIND=8) PTL(KDLON,KFLEV+1) 3385 C 3386 REAL(KIND=8) PB(KDLON,Ninter,KFLEV+1) ! SPECTRAL HALF LEVEL PLANCK FUNCTION 3387 REAL(KIND=8) PBINT(KDLON,KFLEV+1) ! HALF LEVEL PLANCK FUNCTION 3388 REAL(KIND=8) PBSUIN(KDLON) ! SURFACE PLANCK FUNCTION 3389 REAL(KIND=8) PBSUR(KDLON,Ninter) ! SURFACE SPECTRAL PLANCK FUNCTION 3390 REAL(KIND=8) PBTOP(KDLON,Ninter) ! TOP SPECTRAL PLANCK FUNCTION 3391 REAL(KIND=8) PDBSL(KDLON,Ninter,KFLEV*2) ! SUB-LAYER PLANCK FUNCTION GRADIENT 3392 REAL(KIND=8) PGA(KDLON,8,2,KFLEV) ! dB/dT-weighted LAYER PADE APPROXIMANTS 3393 REAL(KIND=8) PGB(KDLON,8,2,KFLEV) ! dB/dT-weighted LAYER PADE APPROXIMANTS 3394 REAL(KIND=8) PGASUR(KDLON,8,2) ! SURFACE PADE APPROXIMANTS 3395 REAL(KIND=8) PGBSUR(KDLON,8,2) ! SURFACE PADE APPROXIMANTS 3396 REAL(KIND=8) PGATOP(KDLON,8,2) ! T.O.A. PADE APPROXIMANTS 3397 REAL(KIND=8) PGBTOP(KDLON,8,2) ! T.O.A. PADE APPROXIMANTS 3578 3398 C 3579 3399 C------------------------------------------------------------------------- 3580 3400 C* LOCAL VARIABLES: 3581 3401 INTEGER INDB(KDLON),INDS(KDLON) 3582 REAL *8ZBLAY(KDLON,KFLEV),ZBLEV(KDLON,KFLEV+1)3583 REAL *8ZRES(KDLON),ZRES2(KDLON),ZTI(KDLON),ZTI2(KDLON)3402 REAL(KIND=8) ZBLAY(KDLON,KFLEV),ZBLEV(KDLON,KFLEV+1) 3403 REAL(KIND=8) ZRES(KDLON),ZRES2(KDLON),ZTI(KDLON),ZTI2(KDLON) 3584 3404 c 3585 3405 INTEGER jk, jl, ic, jnu, jf, jg … … 3587 3407 INTEGER k, j, ixtox, indto, ixtx, indt 3588 3408 INTEGER indsu, indtp 3589 REAL *8zdsto1, zdstox, zdst1, zdstx3409 REAL(KIND=8) zdsto1, zdstox, zdst1, zdstx 3590 3410 c 3591 3411 C* Quelques parametres: 3592 REAL *8TSTAND3412 REAL(KIND=8) TSTAND 3593 3413 PARAMETER (TSTAND=250.0) 3594 REAL *8TSTP3414 REAL(KIND=8) TSTP 3595 3415 PARAMETER (TSTP=12.5) 3596 3416 INTEGER MXIXT … … 3598 3418 C 3599 3419 C* Used Data Block: 3600 3601 3602 c $OMP THREADPRIVATE(TINTP)3603 3604 3605 c $OMP THREADPRIVATE(GA, GB)3606 3607 3608 c $OMP THREADPRIVATE(XP)3420 c REAL*8 TINTP(11) 3421 c SAVE TINTP 3422 cc$OMP THREADPRIVATE(TINTP) 3423 c REAL*8 GA(11,16,3), GB(11,16,3) 3424 c SAVE GA, GB 3425 cc$OMP THREADPRIVATE(GA, GB) 3426 c REAL*8 XP(6,6) 3427 c SAVE XP 3428 cc$OMP THREADPRIVATE(XP) 3609 3429 c 3610 3611 3430 c DATA TINTP / 187.5, 200., 212.5, 225., 237.5, 250., 3431 c S 262.5, 275., 287.5, 300., 312.5 / 3612 3432 C----------------------------------------------------------------------- 3613 3433 C-- WATER VAPOR -- INT.1 -- 0- 500 CM-1 -- FROM ABS225 ---------------- … … 3622 3442 C 3623 3443 C-- INDICES FOR PADE APPROXIMATION 1 15 29 45 3624 3625 3626 3627 3628 3629 3630 3631 3444 C DATA (GA( 1, 1,IC),IC=1,3) / 3445 C S 0.63499072E-02,-0.99506586E-03, 0.00000000E+00/ 3446 C DATA (GB( 1, 1,IC),IC=1,3) / 3447 C S 0.63499072E-02, 0.97222852E-01, 0.10000000E+01/ 3448 C DATA (GA( 1, 2,IC),IC=1,3) / 3449 C S 0.77266491E-02,-0.11661515E-02, 0.00000000E+00/ 3450 C DATA (GB( 1, 2,IC),IC=1,3) / 3451 C S 0.77266491E-02, 0.10681591E+00, 0.10000000E+01/ 3632 3452 C 3633 3453 C----- INTERVAL = 1 ----- T = 200.0 3634 3454 C 3635 3455 C-- INDICES FOR PADE APPROXIMATION 1 15 29 45 3636 3637 3638 3639 3640 3641 3642 3643 3456 C DATA (GA( 2, 1,IC),IC=1,3) / 3457 C S 0.65566348E-02,-0.10184169E-02, 0.00000000E+00/ 3458 C DATA (GB( 2, 1,IC),IC=1,3) / 3459 C S 0.65566348E-02, 0.98862238E-01, 0.10000000E+01/ 3460 C DATA (GA( 2, 2,IC),IC=1,3) / 3461 C S 0.81323287E-02,-0.11886130E-02, 0.00000000E+00/ 3462 C DATA (GB( 2, 2,IC),IC=1,3) / 3463 C S 0.81323287E-02, 0.10921298E+00, 0.10000000E+01/ 3644 3464 C 3645 3465 C----- INTERVAL = 1 ----- T = 212.5 3646 3466 C 3647 3467 C-- INDICES FOR PADE APPROXIMATION 1 15 29 45 3648 3649 3650 3651 3652 3653 3654 3655 3468 C DATA (GA( 3, 1,IC),IC=1,3) / 3469 C S 0.67849730E-02,-0.10404730E-02, 0.00000000E+00/ 3470 C DATA (GB( 3, 1,IC),IC=1,3) / 3471 C S 0.67849730E-02, 0.10061504E+00, 0.10000000E+01/ 3472 C DATA (GA( 3, 2,IC),IC=1,3) / 3473 C S 0.86507620E-02,-0.12139929E-02, 0.00000000E+00/ 3474 C DATA (GB( 3, 2,IC),IC=1,3) / 3475 C S 0.86507620E-02, 0.11198225E+00, 0.10000000E+01/ 3656 3476 C 3657 3477 C----- INTERVAL = 1 ----- T = 225.0 3658 3478 C 3659 3479 C-- INDICES FOR PADE APPROXIMATION 1 15 29 45 3660 3661 3662 3663 3664 3665 3666 3667 3480 C DATA (GA( 4, 1,IC),IC=1,3) / 3481 C S 0.70481947E-02,-0.10621792E-02, 0.00000000E+00/ 3482 C DATA (GB( 4, 1,IC),IC=1,3) / 3483 C S 0.70481947E-02, 0.10256222E+00, 0.10000000E+01/ 3484 C DATA (GA( 4, 2,IC),IC=1,3) / 3485 C S 0.92776391E-02,-0.12445811E-02, 0.00000000E+00/ 3486 C DATA (GB( 4, 2,IC),IC=1,3) / 3487 C S 0.92776391E-02, 0.11487826E+00, 0.10000000E+01/ 3668 3488 C 3669 3489 C----- INTERVAL = 1 ----- T = 237.5 3670 3490 C 3671 3491 C-- INDICES FOR PADE APPROXIMATION 1 15 29 45 3672 3673 3674 3675 3676 3677 3678 3679 3492 C DATA (GA( 5, 1,IC),IC=1,3) / 3493 C S 0.73585943E-02,-0.10847662E-02, 0.00000000E+00/ 3494 C DATA (GB( 5, 1,IC),IC=1,3) / 3495 C S 0.73585943E-02, 0.10475952E+00, 0.10000000E+01/ 3496 C DATA (GA( 5, 2,IC),IC=1,3) / 3497 C S 0.99806312E-02,-0.12807672E-02, 0.00000000E+00/ 3498 C DATA (GB( 5, 2,IC),IC=1,3) / 3499 C S 0.99806312E-02, 0.11751113E+00, 0.10000000E+01/ 3680 3500 C 3681 3501 C----- INTERVAL = 1 ----- T = 250.0 3682 3502 C 3683 3503 C-- INDICES FOR PADE APPROXIMATION 1 15 29 45 3684 3685 3686 3687 3688 3689 3690 3691 3504 C DATA (GA( 6, 1,IC),IC=1,3) / 3505 C S 0.77242818E-02,-0.11094726E-02, 0.00000000E+00/ 3506 C DATA (GB( 6, 1,IC),IC=1,3) / 3507 C S 0.77242818E-02, 0.10720986E+00, 0.10000000E+01/ 3508 C DATA (GA( 6, 2,IC),IC=1,3) / 3509 C S 0.10709803E-01,-0.13208251E-02, 0.00000000E+00/ 3510 C DATA (GB( 6, 2,IC),IC=1,3) / 3511 C S 0.10709803E-01, 0.11951535E+00, 0.10000000E+01/ 3692 3512 C 3693 3513 C----- INTERVAL = 1 ----- T = 262.5 3694 3514 C 3695 3515 C-- INDICES FOR PADE APPROXIMATION 1 15 29 45 3696 3697 3698 3699 3700 3701 3702 3703 3516 C DATA (GA( 7, 1,IC),IC=1,3) / 3517 C S 0.81472693E-02,-0.11372949E-02, 0.00000000E+00/ 3518 C DATA (GB( 7, 1,IC),IC=1,3) / 3519 C S 0.81472693E-02, 0.10985370E+00, 0.10000000E+01/ 3520 C DATA (GA( 7, 2,IC),IC=1,3) / 3521 C S 0.11414739E-01,-0.13619034E-02, 0.00000000E+00/ 3522 C DATA (GB( 7, 2,IC),IC=1,3) / 3523 C S 0.11414739E-01, 0.12069945E+00, 0.10000000E+01/ 3704 3524 C 3705 3525 C----- INTERVAL = 1 ----- T = 275.0 3706 3526 C 3707 3527 C-- INDICES FOR PADE APPROXIMATION 1 15 29 45 3708 3709 3710 3711 3712 3713 3714 3715 3528 C DATA (GA( 8, 1,IC),IC=1,3) / 3529 C S 0.86227527E-02,-0.11687683E-02, 0.00000000E+00/ 3530 C DATA (GB( 8, 1,IC),IC=1,3) / 3531 C S 0.86227527E-02, 0.11257633E+00, 0.10000000E+01/ 3532 C DATA (GA( 8, 2,IC),IC=1,3) / 3533 C S 0.12058772E-01,-0.14014165E-02, 0.00000000E+00/ 3534 C DATA (GB( 8, 2,IC),IC=1,3) / 3535 C S 0.12058772E-01, 0.12108524E+00, 0.10000000E+01/ 3716 3536 C 3717 3537 C----- INTERVAL = 1 ----- T = 287.5 3718 3538 C 3719 3539 C-- INDICES FOR PADE APPROXIMATION 1 15 29 45 3720 3721 3722 3723 3724 3725 3726 3727 3540 C DATA (GA( 9, 1,IC),IC=1,3) / 3541 C S 0.91396814E-02,-0.12038314E-02, 0.00000000E+00/ 3542 C DATA (GB( 9, 1,IC),IC=1,3) / 3543 C S 0.91396814E-02, 0.11522980E+00, 0.10000000E+01/ 3544 C DATA (GA( 9, 2,IC),IC=1,3) / 3545 C S 0.12623992E-01,-0.14378639E-02, 0.00000000E+00/ 3546 C DATA (GB( 9, 2,IC),IC=1,3) / 3547 C S 0.12623992E-01, 0.12084229E+00, 0.10000000E+01/ 3728 3548 C 3729 3549 C----- INTERVAL = 1 ----- T = 300.0 3730 3550 C 3731 3551 C-- INDICES FOR PADE APPROXIMATION 1 15 29 45 3732 3733 3734 3735 3736 3737 3738 3739 3552 C DATA (GA(10, 1,IC),IC=1,3) / 3553 C S 0.96825438E-02,-0.12418367E-02, 0.00000000E+00/ 3554 C DATA (GB(10, 1,IC),IC=1,3) / 3555 C S 0.96825438E-02, 0.11766343E+00, 0.10000000E+01/ 3556 C DATA (GA(10, 2,IC),IC=1,3) / 3557 C S 0.13108146E-01,-0.14708488E-02, 0.00000000E+00/ 3558 C DATA (GB(10, 2,IC),IC=1,3) / 3559 C S 0.13108146E-01, 0.12019005E+00, 0.10000000E+01/ 3740 3560 C 3741 3561 C----- INTERVAL = 1 ----- T = 312.5 3742 3562 C 3743 3563 C-- INDICES FOR PADE APPROXIMATION 1 15 29 45 3744 3745 3746 3747 3748 3749 3750 3751 3564 C DATA (GA(11, 1,IC),IC=1,3) / 3565 C S 0.10233955E-01,-0.12817135E-02, 0.00000000E+00/ 3566 C DATA (GB(11, 1,IC),IC=1,3) / 3567 C S 0.10233955E-01, 0.11975320E+00, 0.10000000E+01/ 3568 C DATA (GA(11, 2,IC),IC=1,3) / 3569 C S 0.13518390E-01,-0.15006791E-02, 0.00000000E+00/ 3570 C DATA (GB(11, 2,IC),IC=1,3) / 3571 C S 0.13518390E-01, 0.11932684E+00, 0.10000000E+01/ 3752 3572 C 3753 3573 C … … 3764 3584 C 3765 3585 C-- INDICES FOR PADE APPROXIMATION 1 28 37 45 3766 3767 3768 3769 3770 3771 3772 3773 3586 C DATA (GA( 1, 3,IC),IC=1,3) / 3587 C S 0.11644593E+01, 0.41243390E+00, 0.00000000E+00/ 3588 C DATA (GB( 1, 3,IC),IC=1,3) / 3589 C S 0.11644593E+01, 0.10346097E+01, 0.10000000E+01/ 3590 C DATA (GA( 1, 4,IC),IC=1,3) / 3591 C S 0.12006968E+01, 0.48318936E+00, 0.00000000E+00/ 3592 C DATA (GB( 1, 4,IC),IC=1,3) / 3593 C S 0.12006968E+01, 0.10626130E+01, 0.10000000E+01/ 3774 3594 C 3775 3595 C----- INTERVAL = 2 ----- T = 200.0 3776 3596 C 3777 3597 C-- INDICES FOR PADE APPROXIMATION 1 28 37 45 3778 3779 3780 3781 3782 3783 3784 3785 3598 C DATA (GA( 2, 3,IC),IC=1,3) / 3599 C S 0.11747203E+01, 0.43407282E+00, 0.00000000E+00/ 3600 C DATA (GB( 2, 3,IC),IC=1,3) / 3601 C S 0.11747203E+01, 0.10433655E+01, 0.10000000E+01/ 3602 C DATA (GA( 2, 4,IC),IC=1,3) / 3603 C S 0.12108196E+01, 0.50501827E+00, 0.00000000E+00/ 3604 C DATA (GB( 2, 4,IC),IC=1,3) / 3605 C S 0.12108196E+01, 0.10716026E+01, 0.10000000E+01/ 3786 3606 C 3787 3607 C----- INTERVAL = 2 ----- T = 212.5 3788 3608 C 3789 3609 C-- INDICES FOR PADE APPROXIMATION 1 28 37 45 3790 3791 3792 3793 3794 3795 3796 3797 3610 C DATA (GA( 3, 3,IC),IC=1,3) / 3611 C S 0.11837872E+01, 0.45331413E+00, 0.00000000E+00/ 3612 C DATA (GB( 3, 3,IC),IC=1,3) / 3613 C S 0.11837872E+01, 0.10511933E+01, 0.10000000E+01/ 3614 C DATA (GA( 3, 4,IC),IC=1,3) / 3615 C S 0.12196717E+01, 0.52409502E+00, 0.00000000E+00/ 3616 C DATA (GB( 3, 4,IC),IC=1,3) / 3617 C S 0.12196717E+01, 0.10795108E+01, 0.10000000E+01/ 3798 3618 C 3799 3619 C----- INTERVAL = 2 ----- T = 225.0 3800 3620 C 3801 3621 C-- INDICES FOR PADE APPROXIMATION 1 28 37 45 3802 3803 3804 3805 3806 3807 3808 3809 3622 C DATA (GA( 4, 3,IC),IC=1,3) / 3623 C S 0.11918561E+01, 0.47048604E+00, 0.00000000E+00/ 3624 C DATA (GB( 4, 3,IC),IC=1,3) / 3625 C S 0.11918561E+01, 0.10582150E+01, 0.10000000E+01/ 3626 C DATA (GA( 4, 4,IC),IC=1,3) / 3627 C S 0.12274493E+01, 0.54085277E+00, 0.00000000E+00/ 3628 C DATA (GB( 4, 4,IC),IC=1,3) / 3629 C S 0.12274493E+01, 0.10865006E+01, 0.10000000E+01/ 3810 3630 C 3811 3631 C----- INTERVAL = 2 ----- T = 237.5 3812 3632 C 3813 3633 C-- INDICES FOR PADE APPROXIMATION 1 28 37 45 3814 3815 3816 3817 3818 3819 3820 3821 3634 C DATA (GA( 5, 3,IC),IC=1,3) / 3635 C S 0.11990757E+01, 0.48586286E+00, 0.00000000E+00/ 3636 C DATA (GB( 5, 3,IC),IC=1,3) / 3637 C S 0.11990757E+01, 0.10645317E+01, 0.10000000E+01/ 3638 C DATA (GA( 5, 4,IC),IC=1,3) / 3639 C S 0.12343189E+01, 0.55565422E+00, 0.00000000E+00/ 3640 C DATA (GB( 5, 4,IC),IC=1,3) / 3641 C S 0.12343189E+01, 0.10927103E+01, 0.10000000E+01/ 3822 3642 C 3823 3643 C----- INTERVAL = 2 ----- T = 250.0 3824 3644 C 3825 3645 C-- INDICES FOR PADE APPROXIMATION 1 28 37 45 3826 3827 3828 3829 3830 3831 3832 3833 3646 C DATA (GA( 6, 3,IC),IC=1,3) / 3647 C S 0.12055643E+01, 0.49968044E+00, 0.00000000E+00/ 3648 C DATA (GB( 6, 3,IC),IC=1,3) / 3649 C S 0.12055643E+01, 0.10702313E+01, 0.10000000E+01/ 3650 C DATA (GA( 6, 4,IC),IC=1,3) / 3651 C S 0.12404147E+01, 0.56878618E+00, 0.00000000E+00/ 3652 C DATA (GB( 6, 4,IC),IC=1,3) / 3653 C S 0.12404147E+01, 0.10982489E+01, 0.10000000E+01/ 3834 3654 C 3835 3655 C----- INTERVAL = 2 ----- T = 262.5 3836 3656 C 3837 3657 C-- INDICES FOR PADE APPROXIMATION 1 28 37 45 3838 3839 3840 3841 3842 3843 3844 3845 3658 C DATA (GA( 7, 3,IC),IC=1,3) / 3659 C S 0.12114186E+01, 0.51214132E+00, 0.00000000E+00/ 3660 C DATA (GB( 7, 3,IC),IC=1,3) / 3661 C S 0.12114186E+01, 0.10753907E+01, 0.10000000E+01/ 3662 C DATA (GA( 7, 4,IC),IC=1,3) / 3663 C S 0.12458431E+01, 0.58047395E+00, 0.00000000E+00/ 3664 C DATA (GB( 7, 4,IC),IC=1,3) / 3665 C S 0.12458431E+01, 0.11032019E+01, 0.10000000E+01/ 3846 3666 C 3847 3667 C----- INTERVAL = 2 ----- T = 275.0 3848 3668 C 3849 3669 C-- INDICES FOR PADE APPROXIMATION 1 28 37 45 3850 3851 3852 3853 3854 3855 3856 3857 3670 C DATA (GA( 8, 3,IC),IC=1,3) / 3671 C S 0.12167192E+01, 0.52341830E+00, 0.00000000E+00/ 3672 C DATA (GB( 8, 3,IC),IC=1,3) / 3673 C S 0.12167192E+01, 0.10800762E+01, 0.10000000E+01/ 3674 C DATA (GA( 8, 4,IC),IC=1,3) / 3675 C S 0.12506907E+01, 0.59089894E+00, 0.00000000E+00/ 3676 C DATA (GB( 8, 4,IC),IC=1,3) / 3677 C S 0.12506907E+01, 0.11076379E+01, 0.10000000E+01/ 3858 3678 C 3859 3679 C----- INTERVAL = 2 ----- T = 287.5 3860 3680 C 3861 3681 C-- INDICES FOR PADE APPROXIMATION 1 28 37 45 3862 3863 3864 3865 3866 3867 3868 3869 3682 C DATA (GA( 9, 3,IC),IC=1,3) / 3683 C S 0.12215344E+01, 0.53365803E+00, 0.00000000E+00/ 3684 C DATA (GB( 9, 3,IC),IC=1,3) / 3685 C S 0.12215344E+01, 0.10843446E+01, 0.10000000E+01/ 3686 C DATA (GA( 9, 4,IC),IC=1,3) / 3687 C S 0.12550299E+01, 0.60021475E+00, 0.00000000E+00/ 3688 C DATA (GB( 9, 4,IC),IC=1,3) / 3689 C S 0.12550299E+01, 0.11116160E+01, 0.10000000E+01/ 3870 3690 C 3871 3691 C----- INTERVAL = 2 ----- T = 300.0 3872 3692 C 3873 3693 C-- INDICES FOR PADE APPROXIMATION 1 28 37 45 3874 3875 3876 3877 3878 3879 3880 3881 3694 C DATA (GA(10, 3,IC),IC=1,3) / 3695 C S 0.12259226E+01, 0.54298448E+00, 0.00000000E+00/ 3696 C DATA (GB(10, 3,IC),IC=1,3) / 3697 C S 0.12259226E+01, 0.10882439E+01, 0.10000000E+01/ 3698 C DATA (GA(10, 4,IC),IC=1,3) / 3699 C S 0.12589256E+01, 0.60856112E+00, 0.00000000E+00/ 3700 C DATA (GB(10, 4,IC),IC=1,3) / 3701 C S 0.12589256E+01, 0.11151910E+01, 0.10000000E+01/ 3882 3702 C 3883 3703 C----- INTERVAL = 2 ----- T = 312.5 3884 3704 C 3885 3705 C-- INDICES FOR PADE APPROXIMATION 1 28 37 45 3886 3887 3888 3889 3890 3891 3892 3893 3706 C DATA (GA(11, 3,IC),IC=1,3) / 3707 C S 0.12299344E+01, 0.55150227E+00, 0.00000000E+00/ 3708 C DATA (GB(11, 3,IC),IC=1,3) / 3709 C S 0.12299344E+01, 0.10918144E+01, 0.10000000E+01/ 3710 C DATA (GA(11, 4,IC),IC=1,3) / 3711 C S 0.12624402E+01, 0.61607594E+00, 0.00000000E+00/ 3712 C DATA (GB(11, 4,IC),IC=1,3) / 3713 C S 0.12624402E+01, 0.11184188E+01, 0.10000000E+01/ 3894 3714 C 3895 3715 C … … 3910 3730 C 3911 3731 C-- INDICES FOR PADE APPROXIMATION 1 28 37 45 3912 3913 3914 3915 3916 3917 3918 3919 3732 C DATA (GA( 1, 7,IC),IC=1,3) / 3733 C S 0.10192131E+02, 0.80737799E+01, 0.00000000E+00/ 3734 C DATA (GB( 1, 7,IC),IC=1,3) / 3735 C S 0.10192131E+02, 0.82623280E+01, 0.10000000E+01/ 3736 C DATA (GA( 1, 8,IC),IC=1,3) / 3737 C S 0.92439050E+01, 0.77425778E+01, 0.00000000E+00/ 3738 C DATA (GB( 1, 8,IC),IC=1,3) / 3739 C S 0.92439050E+01, 0.79342219E+01, 0.10000000E+01/ 3920 3740 C 3921 3741 C----- INTERVAL = 3 ----- T = 200.0 3922 3742 C 3923 3743 C-- INDICES FOR PADE APPROXIMATION 1 28 37 45 3924 3925 3926 3927 3928 3929 3930 3931 3744 C DATA (GA( 2, 7,IC),IC=1,3) / 3745 C S 0.97258602E+01, 0.79171158E+01, 0.00000000E+00/ 3746 C DATA (GB( 2, 7,IC),IC=1,3) / 3747 C S 0.97258602E+01, 0.81072291E+01, 0.10000000E+01/ 3748 C DATA (GA( 2, 8,IC),IC=1,3) / 3749 C S 0.87567422E+01, 0.75443460E+01, 0.00000000E+00/ 3750 C DATA (GB( 2, 8,IC),IC=1,3) / 3751 C S 0.87567422E+01, 0.77373458E+01, 0.10000000E+01/ 3932 3752 C 3933 3753 C----- INTERVAL = 3 ----- T = 212.5 3934 3754 C 3935 3755 C-- INDICES FOR PADE APPROXIMATION 1 28 37 45 3936 3937 3938 3939 3940 3941 3942 3943 3756 C DATA (GA( 3, 7,IC),IC=1,3) / 3757 C S 0.92992890E+01, 0.77609605E+01, 0.00000000E+00/ 3758 C DATA (GB( 3, 7,IC),IC=1,3) / 3759 C S 0.92992890E+01, 0.79523834E+01, 0.10000000E+01/ 3760 C DATA (GA( 3, 8,IC),IC=1,3) / 3761 C S 0.83270144E+01, 0.73526151E+01, 0.00000000E+00/ 3762 C DATA (GB( 3, 8,IC),IC=1,3) / 3763 C S 0.83270144E+01, 0.75467334E+01, 0.10000000E+01/ 3944 3764 C 3945 3765 C----- INTERVAL = 3 ----- T = 225.0 3946 3766 C 3947 3767 C-- INDICES FOR PADE APPROXIMATION 1 28 37 45 3948 3949 3950 3951 3952 3953 3954 3955 3768 C DATA (GA( 4, 7,IC),IC=1,3) / 3769 C S 0.89154021E+01, 0.76087371E+01, 0.00000000E+00/ 3770 C DATA (GB( 4, 7,IC),IC=1,3) / 3771 C S 0.89154021E+01, 0.78012527E+01, 0.10000000E+01/ 3772 C DATA (GA( 4, 8,IC),IC=1,3) / 3773 C S 0.79528337E+01, 0.71711188E+01, 0.00000000E+00/ 3774 C DATA (GB( 4, 8,IC),IC=1,3) / 3775 C S 0.79528337E+01, 0.73661786E+01, 0.10000000E+01/ 3956 3776 C 3957 3777 C----- INTERVAL = 3 ----- T = 237.5 3958 3778 C 3959 3779 C-- INDICES FOR PADE APPROXIMATION 1 28 37 45 3960 3961 3962 3963 3964 3965 3966 3967 3780 C DATA (GA( 5, 7,IC),IC=1,3) / 3781 C S 0.85730084E+01, 0.74627112E+01, 0.00000000E+00/ 3782 C DATA (GB( 5, 7,IC),IC=1,3) / 3783 C S 0.85730084E+01, 0.76561458E+01, 0.10000000E+01/ 3784 C DATA (GA( 5, 8,IC),IC=1,3) / 3785 C S 0.76286839E+01, 0.70015571E+01, 0.00000000E+00/ 3786 C DATA (GB( 5, 8,IC),IC=1,3) / 3787 C S 0.76286839E+01, 0.71974319E+01, 0.10000000E+01/ 3968 3788 C 3969 3789 C----- INTERVAL = 3 ----- T = 250.0 3970 3790 C 3971 3791 C-- INDICES FOR PADE APPROXIMATION 1 28 37 45 3972 3973 3974 3975 3976 3977 3978 3979 3792 C DATA (GA( 6, 7,IC),IC=1,3) / 3793 C S 0.82685838E+01, 0.73239981E+01, 0.00000000E+00/ 3794 C DATA (GB( 6, 7,IC),IC=1,3) / 3795 C S 0.82685838E+01, 0.75182174E+01, 0.10000000E+01/ 3796 C DATA (GA( 6, 8,IC),IC=1,3) / 3797 C S 0.73477879E+01, 0.68442532E+01, 0.00000000E+00/ 3798 C DATA (GB( 6, 8,IC),IC=1,3) / 3799 C S 0.73477879E+01, 0.70408543E+01, 0.10000000E+01/ 3980 3800 C 3981 3801 C----- INTERVAL = 3 ----- T = 262.5 3982 3802 C 3983 3803 C-- INDICES FOR PADE APPROXIMATION 1 28 37 45 3984 3985 3986 3987 3988 3989 3990 3991 3804 C DATA (GA( 7, 7,IC),IC=1,3) / 3805 C S 0.79978921E+01, 0.71929934E+01, 0.00000000E+00/ 3806 C DATA (GB( 7, 7,IC),IC=1,3) / 3807 C S 0.79978921E+01, 0.73878952E+01, 0.10000000E+01/ 3808 C DATA (GA( 7, 8,IC),IC=1,3) / 3809 C S 0.71035818E+01, 0.66987996E+01, 0.00000000E+00/ 3810 C DATA (GB( 7, 8,IC),IC=1,3) / 3811 C S 0.71035818E+01, 0.68960649E+01, 0.10000000E+01/ 3992 3812 C 3993 3813 C----- INTERVAL = 3 ----- T = 275.0 3994 3814 C 3995 3815 C-- INDICES FOR PADE APPROXIMATION 1 28 37 45 3996 3997 3998 3999 4000 4001 4002 4003 3816 C DATA (GA( 8, 7,IC),IC=1,3) / 3817 C S 0.77568055E+01, 0.70697065E+01, 0.00000000E+00/ 3818 C DATA (GB( 8, 7,IC),IC=1,3) / 3819 C S 0.77568055E+01, 0.72652133E+01, 0.10000000E+01/ 3820 C DATA (GA( 8, 8,IC),IC=1,3) / 3821 C S 0.68903312E+01, 0.65644820E+01, 0.00000000E+00/ 3822 C DATA (GB( 8, 8,IC),IC=1,3) / 3823 C S 0.68903312E+01, 0.67623672E+01, 0.10000000E+01/ 4004 3824 C 4005 3825 C----- INTERVAL = 3 ----- T = 287.5 4006 3826 C 4007 3827 C-- INDICES FOR PADE APPROXIMATION 1 28 37 45 4008 4009 4010 4011 4012 4013 4014 4015 3828 C DATA (GA( 9, 7,IC),IC=1,3) / 3829 C S 0.75416266E+01, 0.69539626E+01, 0.00000000E+00/ 3830 C DATA (GB( 9, 7,IC),IC=1,3) / 3831 C S 0.75416266E+01, 0.71500151E+01, 0.10000000E+01/ 3832 C DATA (GA( 9, 8,IC),IC=1,3) / 3833 C S 0.67032875E+01, 0.64405267E+01, 0.00000000E+00/ 3834 C DATA (GB( 9, 8,IC),IC=1,3) / 3835 C S 0.67032875E+01, 0.66389989E+01, 0.10000000E+01/ 4016 3836 C 4017 3837 C----- INTERVAL = 3 ----- T = 300.0 4018 3838 C 4019 3839 C-- INDICES FOR PADE APPROXIMATION 1 28 37 45 4020 4021 4022 4023 4024 4025 4026 4027 3840 C DATA (GA(10, 7,IC),IC=1,3) / 3841 C S 0.73491694E+01, 0.68455144E+01, 0.00000000E+00/ 3842 C DATA (GB(10, 7,IC),IC=1,3) / 3843 C S 0.73491694E+01, 0.70420667E+01, 0.10000000E+01/ 3844 C DATA (GA(10, 8,IC),IC=1,3) / 3845 C S 0.65386461E+01, 0.63262376E+01, 0.00000000E+00/ 3846 C DATA (GB(10, 8,IC),IC=1,3) / 3847 C S 0.65386461E+01, 0.65252707E+01, 0.10000000E+01/ 4028 3848 C 4029 3849 C----- INTERVAL = 3 ----- T = 312.5 4030 3850 C 4031 3851 C-- INDICES FOR PADE APPROXIMATION 1 28 37 45 4032 4033 4034 4035 4036 4037 4038 4039 3852 C DATA (GA(11, 7,IC),IC=1,3) / 3853 C S 0.71767400E+01, 0.67441020E+01, 0.00000000E+00/ 3854 C DATA (GB(11, 7,IC),IC=1,3) / 3855 C S 0.71767400E+01, 0.69411177E+01, 0.10000000E+01/ 3856 C DATA (GA(11, 8,IC),IC=1,3) / 3857 C S 0.63934377E+01, 0.62210701E+01, 0.00000000E+00/ 3858 C DATA (GB(11, 8,IC),IC=1,3) / 3859 C S 0.63934377E+01, 0.64206412E+01, 0.10000000E+01/ 4040 3860 C 4041 3861 C … … 4047 3867 C 4048 3868 C-- INDICES FOR PADE APPROXIMATION 1 28 37 45 4049 4050 4051 4052 4053 4054 4055 4056 3869 C DATA (GA( 1, 9,IC),IC=1,3) / 3870 C S 0.24870635E+02, 0.10542131E+02, 0.00000000E+00/ 3871 C DATA (GB( 1, 9,IC),IC=1,3) / 3872 C S 0.24870635E+02, 0.10656640E+02, 0.10000000E+01/ 3873 C DATA (GA( 1,10,IC),IC=1,3) / 3874 C S 0.24586283E+02, 0.10490353E+02, 0.00000000E+00/ 3875 C DATA (GB( 1,10,IC),IC=1,3) / 3876 C S 0.24586283E+02, 0.10605856E+02, 0.10000000E+01/ 4057 3877 C 4058 3878 C----- INTERVAL = 4 ----- T = 200.0 4059 3879 C 4060 3880 C-- INDICES FOR PADE APPROXIMATION 1 28 37 45 4061 4062 4063 4064 4065 4066 4067 4068 3881 C DATA (GA( 2, 9,IC),IC=1,3) / 3882 C S 0.24725591E+02, 0.10515895E+02, 0.00000000E+00/ 3883 C DATA (GB( 2, 9,IC),IC=1,3) / 3884 C S 0.24725591E+02, 0.10630910E+02, 0.10000000E+01/ 3885 C DATA (GA( 2,10,IC),IC=1,3) / 3886 C S 0.24441465E+02, 0.10463512E+02, 0.00000000E+00/ 3887 C DATA (GB( 2,10,IC),IC=1,3) / 3888 C S 0.24441465E+02, 0.10579514E+02, 0.10000000E+01/ 4069 3889 C 4070 3890 C----- INTERVAL = 4 ----- T = 212.5 4071 3891 C 4072 3892 C-- INDICES FOR PADE APPROXIMATION 1 28 37 45 4073 4074 4075 4076 4077 4078 4079 4080 3893 C DATA (GA( 3, 9,IC),IC=1,3) / 3894 C S 0.24600320E+02, 0.10492949E+02, 0.00000000E+00/ 3895 C DATA (GB( 3, 9,IC),IC=1,3) / 3896 C S 0.24600320E+02, 0.10608399E+02, 0.10000000E+01/ 3897 C DATA (GA( 3,10,IC),IC=1,3) / 3898 C S 0.24311657E+02, 0.10439183E+02, 0.00000000E+00/ 3899 C DATA (GB( 3,10,IC),IC=1,3) / 3900 C S 0.24311657E+02, 0.10555632E+02, 0.10000000E+01/ 4081 3901 C 4082 3902 C----- INTERVAL = 4 ----- T = 225.0 4083 3903 C 4084 3904 C-- INDICES FOR PADE APPROXIMATION 1 28 37 45 4085 4086 4087 4088 4089 4090 4091 4092 3905 C DATA (GA( 4, 9,IC),IC=1,3) / 3906 C S 0.24487300E+02, 0.10472049E+02, 0.00000000E+00/ 3907 C DATA (GB( 4, 9,IC),IC=1,3) / 3908 C S 0.24487300E+02, 0.10587891E+02, 0.10000000E+01/ 3909 C DATA (GA( 4,10,IC),IC=1,3) / 3910 C S 0.24196167E+02, 0.10417324E+02, 0.00000000E+00/ 3911 C DATA (GB( 4,10,IC),IC=1,3) / 3912 C S 0.24196167E+02, 0.10534169E+02, 0.10000000E+01/ 4093 3913 C 4094 3914 C----- INTERVAL = 4 ----- T = 237.5 4095 3915 C 4096 3916 C-- INDICES FOR PADE APPROXIMATION 1 28 37 45 4097 4098 4099 4100 4101 4102 4103 4104 3917 C DATA (GA( 5, 9,IC),IC=1,3) / 3918 C S 0.24384935E+02, 0.10452961E+02, 0.00000000E+00/ 3919 C DATA (GB( 5, 9,IC),IC=1,3) / 3920 C S 0.24384935E+02, 0.10569156E+02, 0.10000000E+01/ 3921 C DATA (GA( 5,10,IC),IC=1,3) / 3922 C S 0.24093406E+02, 0.10397704E+02, 0.00000000E+00/ 3923 C DATA (GB( 5,10,IC),IC=1,3) / 3924 C S 0.24093406E+02, 0.10514900E+02, 0.10000000E+01/ 4105 3925 C 4106 3926 C----- INTERVAL = 4 ----- T = 250.0 4107 3927 C 4108 3928 C-- INDICES FOR PADE APPROXIMATION 1 28 37 45 4109 4110 4111 4112 4113 4114 4115 4116 3929 C DATA (GA( 6, 9,IC),IC=1,3) / 3930 C S 0.24292341E+02, 0.10435562E+02, 0.00000000E+00/ 3931 C DATA (GB( 6, 9,IC),IC=1,3) / 3932 C S 0.24292341E+02, 0.10552075E+02, 0.10000000E+01/ 3933 C DATA (GA( 6,10,IC),IC=1,3) / 3934 C S 0.24001597E+02, 0.10380038E+02, 0.00000000E+00/ 3935 C DATA (GB( 6,10,IC),IC=1,3) / 3936 C S 0.24001597E+02, 0.10497547E+02, 0.10000000E+01/ 4117 3937 C 4118 3938 C----- INTERVAL = 4 ----- T = 262.5 4119 3939 C 4120 3940 C-- INDICES FOR PADE APPROXIMATION 1 28 37 45 4121 4122 4123 4124 4125 4126 4127 4128 3941 C DATA (GA( 7, 9,IC),IC=1,3) / 3942 C S 0.24208572E+02, 0.10419710E+02, 0.00000000E+00/ 3943 C DATA (GB( 7, 9,IC),IC=1,3) / 3944 C S 0.24208572E+02, 0.10536510E+02, 0.10000000E+01/ 3945 C DATA (GA( 7,10,IC),IC=1,3) / 3946 C S 0.23919098E+02, 0.10364052E+02, 0.00000000E+00/ 3947 C DATA (GB( 7,10,IC),IC=1,3) / 3948 C S 0.23919098E+02, 0.10481842E+02, 0.10000000E+01/ 4129 3949 C 4130 3950 C----- INTERVAL = 4 ----- T = 275.0 4131 3951 C 4132 3952 C-- INDICES FOR PADE APPROXIMATION 1 28 37 45 4133 4134 4135 4136 4137 4138 4139 4140 3953 C DATA (GA( 8, 9,IC),IC=1,3) / 3954 C S 0.24132642E+02, 0.10405247E+02, 0.00000000E+00/ 3955 C DATA (GB( 8, 9,IC),IC=1,3) / 3956 C S 0.24132642E+02, 0.10522307E+02, 0.10000000E+01/ 3957 C DATA (GA( 8,10,IC),IC=1,3) / 3958 C S 0.23844511E+02, 0.10349509E+02, 0.00000000E+00/ 3959 C DATA (GB( 8,10,IC),IC=1,3) / 3960 C S 0.23844511E+02, 0.10467553E+02, 0.10000000E+01/ 4141 3961 C 4142 3962 C----- INTERVAL = 4 ----- T = 287.5 4143 3963 C 4144 3964 C-- INDICES FOR PADE APPROXIMATION 1 28 37 45 4145 4146 4147 4148 4149 4150 4151 4152 3965 C DATA (GA( 9, 9,IC),IC=1,3) / 3966 C S 0.24063614E+02, 0.10392022E+02, 0.00000000E+00/ 3967 C DATA (GB( 9, 9,IC),IC=1,3) / 3968 C S 0.24063614E+02, 0.10509317E+02, 0.10000000E+01/ 3969 C DATA (GA( 9,10,IC),IC=1,3) / 3970 C S 0.23776708E+02, 0.10336215E+02, 0.00000000E+00/ 3971 C DATA (GB( 9,10,IC),IC=1,3) / 3972 C S 0.23776708E+02, 0.10454488E+02, 0.10000000E+01/ 4153 3973 C 4154 3974 C----- INTERVAL = 4 ----- T = 300.0 4155 3975 C 4156 3976 C-- INDICES FOR PADE APPROXIMATION 1 28 37 45 4157 4158 4159 4160 4161 4162 4163 4164 3977 C DATA (GA(10, 9,IC),IC=1,3) / 3978 C S 0.24000649E+02, 0.10379892E+02, 0.00000000E+00/ 3979 C DATA (GB(10, 9,IC),IC=1,3) / 3980 C S 0.24000649E+02, 0.10497402E+02, 0.10000000E+01/ 3981 C DATA (GA(10,10,IC),IC=1,3) / 3982 C S 0.23714816E+02, 0.10324018E+02, 0.00000000E+00/ 3983 C DATA (GB(10,10,IC),IC=1,3) / 3984 C S 0.23714816E+02, 0.10442501E+02, 0.10000000E+01/ 4165 3985 C 4166 3986 C----- INTERVAL = 4 ----- T = 312.5 4167 3987 C 4168 3988 C-- INDICES FOR PADE APPROXIMATION 1 28 37 45 4169 4170 4171 4172 4173 4174 4175 4176 3989 C DATA (GA(11, 9,IC),IC=1,3) / 3990 C S 0.23943021E+02, 0.10368736E+02, 0.00000000E+00/ 3991 C DATA (GB(11, 9,IC),IC=1,3) / 3992 C S 0.23943021E+02, 0.10486443E+02, 0.10000000E+01/ 3993 C DATA (GA(11,10,IC),IC=1,3) / 3994 C S 0.23658197E+02, 0.10312808E+02, 0.00000000E+00/ 3995 C DATA (GB(11,10,IC),IC=1,3) / 3996 C S 0.23658197E+02, 0.10431483E+02, 0.10000000E+01/ 4177 3997 C 4178 3998 C … … 4187 4007 C 4188 4008 C-- INDICES FOR PADE APPROXIMATION 1 35 40 45 4189 4190 4191 4192 4193 4194 4195 4196 4009 C DATA (GA( 1, 5,IC),IC=1,3) / 4010 C S 0.15750172E+00,-0.22159303E-01, 0.00000000E+00/ 4011 C DATA (GB( 1, 5,IC),IC=1,3) / 4012 C S 0.15750172E+00, 0.38103212E+00, 0.10000000E+01/ 4013 C DATA (GA( 1, 6,IC),IC=1,3) / 4014 C S 0.17770551E+00,-0.24972399E-01, 0.00000000E+00/ 4015 C DATA (GB( 1, 6,IC),IC=1,3) / 4016 C S 0.17770551E+00, 0.41646579E+00, 0.10000000E+01/ 4197 4017 C 4198 4018 C----- INTERVAL = 5 ----- T = 200.0 4199 4019 C 4200 4020 C-- INDICES FOR PADE APPROXIMATION 1 35 40 45 4201 4202 4203 4204 4205 4206 4207 4208 4021 C DATA (GA( 2, 5,IC),IC=1,3) / 4022 C S 0.16174076E+00,-0.22748917E-01, 0.00000000E+00/ 4023 C DATA (GB( 2, 5,IC),IC=1,3) / 4024 C S 0.16174076E+00, 0.38913800E+00, 0.10000000E+01/ 4025 C DATA (GA( 2, 6,IC),IC=1,3) / 4026 C S 0.18176757E+00,-0.25537247E-01, 0.00000000E+00/ 4027 C DATA (GB( 2, 6,IC),IC=1,3) / 4028 C S 0.18176757E+00, 0.42345095E+00, 0.10000000E+01/ 4209 4029 C 4210 4030 C----- INTERVAL = 5 ----- T = 212.5 4211 4031 C 4212 4032 C-- INDICES FOR PADE APPROXIMATION 1 35 40 45 4213 4214 4215 4216 4217 4218 4219 4220 4033 C DATA (GA( 3, 5,IC),IC=1,3) / 4034 C S 0.16548628E+00,-0.23269898E-01, 0.00000000E+00/ 4035 C DATA (GB( 3, 5,IC),IC=1,3) / 4036 C S 0.16548628E+00, 0.39613651E+00, 0.10000000E+01/ 4037 C DATA (GA( 3, 6,IC),IC=1,3) / 4038 C S 0.18527967E+00,-0.26025624E-01, 0.00000000E+00/ 4039 C DATA (GB( 3, 6,IC),IC=1,3) / 4040 C S 0.18527967E+00, 0.42937476E+00, 0.10000000E+01/ 4221 4041 C 4222 4042 C----- INTERVAL = 5 ----- T = 225.0 4223 4043 C 4224 4044 C-- INDICES FOR PADE APPROXIMATION 1 35 40 45 4225 4226 4227 4228 4229 4230 4231 4232 4045 C DATA (GA( 4, 5,IC),IC=1,3) / 4046 C S 0.16881124E+00,-0.23732392E-01, 0.00000000E+00/ 4047 C DATA (GB( 4, 5,IC),IC=1,3) / 4048 C S 0.16881124E+00, 0.40222421E+00, 0.10000000E+01/ 4049 C DATA (GA( 4, 6,IC),IC=1,3) / 4050 C S 0.18833348E+00,-0.26450280E-01, 0.00000000E+00/ 4051 C DATA (GB( 4, 6,IC),IC=1,3) / 4052 C S 0.18833348E+00, 0.43444062E+00, 0.10000000E+01/ 4233 4053 C 4234 4054 C----- INTERVAL = 5 ----- T = 237.5 4235 4055 C 4236 4056 C-- INDICES FOR PADE APPROXIMATION 1 35 40 45 4237 4238 4239 4240 4241 4242 4243 4244 4057 C DATA (GA( 5, 5,IC),IC=1,3) / 4058 C S 0.17177839E+00,-0.24145123E-01, 0.00000000E+00/ 4059 C DATA (GB( 5, 5,IC),IC=1,3) / 4060 C S 0.17177839E+00, 0.40756010E+00, 0.10000000E+01/ 4061 C DATA (GA( 5, 6,IC),IC=1,3) / 4062 C S 0.19100108E+00,-0.26821236E-01, 0.00000000E+00/ 4063 C DATA (GB( 5, 6,IC),IC=1,3) / 4064 C S 0.19100108E+00, 0.43880316E+00, 0.10000000E+01/ 4245 4065 C 4246 4066 C----- INTERVAL = 5 ----- T = 250.0 4247 4067 C 4248 4068 C-- INDICES FOR PADE APPROXIMATION 1 35 40 45 4249 4250 4251 4252 4253 4254 4255 4256 4069 C DATA (GA( 6, 5,IC),IC=1,3) / 4070 C S 0.17443933E+00,-0.24515269E-01, 0.00000000E+00/ 4071 C DATA (GB( 6, 5,IC),IC=1,3) / 4072 C S 0.17443933E+00, 0.41226954E+00, 0.10000000E+01/ 4073 C DATA (GA( 6, 6,IC),IC=1,3) / 4074 C S 0.19334122E+00,-0.27146657E-01, 0.00000000E+00/ 4075 C DATA (GB( 6, 6,IC),IC=1,3) / 4076 C S 0.19334122E+00, 0.44258354E+00, 0.10000000E+01/ 4257 4077 C 4258 4078 C----- INTERVAL = 5 ----- T = 262.5 4259 4079 C 4260 4080 C-- INDICES FOR PADE APPROXIMATION 1 35 40 45 4261 4262 4263 4264 4265 4266 4267 4268 4081 C DATA (GA( 7, 5,IC),IC=1,3) / 4082 C S 0.17683622E+00,-0.24848690E-01, 0.00000000E+00/ 4083 C DATA (GB( 7, 5,IC),IC=1,3) / 4084 C S 0.17683622E+00, 0.41645142E+00, 0.10000000E+01/ 4085 C DATA (GA( 7, 6,IC),IC=1,3) / 4086 C S 0.19540288E+00,-0.27433354E-01, 0.00000000E+00/ 4087 C DATA (GB( 7, 6,IC),IC=1,3) / 4088 C S 0.19540288E+00, 0.44587882E+00, 0.10000000E+01/ 4269 4089 C 4270 4090 C----- INTERVAL = 5 ----- T = 275.0 4271 4091 C 4272 4092 C-- INDICES FOR PADE APPROXIMATION 1 35 40 45 4273 4274 4275 4276 4277 4278 4279 4280 4093 C DATA (GA( 8, 5,IC),IC=1,3) / 4094 C S 0.17900375E+00,-0.25150210E-01, 0.00000000E+00/ 4095 C DATA (GB( 8, 5,IC),IC=1,3) / 4096 C S 0.17900375E+00, 0.42018474E+00, 0.10000000E+01/ 4097 C DATA (GA( 8, 6,IC),IC=1,3) / 4098 C S 0.19722732E+00,-0.27687065E-01, 0.00000000E+00/ 4099 C DATA (GB( 8, 6,IC),IC=1,3) / 4100 C S 0.19722732E+00, 0.44876776E+00, 0.10000000E+01/ 4281 4101 C 4282 4102 C----- INTERVAL = 5 ----- T = 287.5 4283 4103 C 4284 4104 C-- INDICES FOR PADE APPROXIMATION 1 35 40 45 4285 4286 4287 4288 4289 4290 4291 4292 4105 C DATA (GA( 9, 5,IC),IC=1,3) / 4106 C S 0.18097099E+00,-0.25423873E-01, 0.00000000E+00/ 4107 C DATA (GB( 9, 5,IC),IC=1,3) / 4108 C S 0.18097099E+00, 0.42353379E+00, 0.10000000E+01/ 4109 C DATA (GA( 9, 6,IC),IC=1,3) / 4110 C S 0.19884918E+00,-0.27912608E-01, 0.00000000E+00/ 4111 C DATA (GB( 9, 6,IC),IC=1,3) / 4112 C S 0.19884918E+00, 0.45131451E+00, 0.10000000E+01/ 4293 4113 C 4294 4114 C----- INTERVAL = 5 ----- T = 300.0 4295 4115 C 4296 4116 C-- INDICES FOR PADE APPROXIMATION 1 35 40 45 4297 4298 4299 4300 4301 4302 4303 4304 4117 C DATA (GA(10, 5,IC),IC=1,3) / 4118 C S 0.18276283E+00,-0.25673139E-01, 0.00000000E+00/ 4119 C DATA (GB(10, 5,IC),IC=1,3) / 4120 C S 0.18276283E+00, 0.42655211E+00, 0.10000000E+01/ 4121 C DATA (GA(10, 6,IC),IC=1,3) / 4122 C S 0.20029696E+00,-0.28113944E-01, 0.00000000E+00/ 4123 C DATA (GB(10, 6,IC),IC=1,3) / 4124 C S 0.20029696E+00, 0.45357095E+00, 0.10000000E+01/ 4305 4125 C 4306 4126 C----- INTERVAL = 5 ----- T = 312.5 4307 4127 C 4308 4128 C-- INDICES FOR PADE APPROXIMATION 1 35 40 45 4309 4310 4311 4312 4313 4314 4315 4316 4129 C DATA (GA(11, 5,IC),IC=1,3) / 4130 C S 0.18440117E+00,-0.25901055E-01, 0.00000000E+00/ 4131 C DATA (GB(11, 5,IC),IC=1,3) / 4132 C S 0.18440117E+00, 0.42928533E+00, 0.10000000E+01/ 4133 C DATA (GA(11, 6,IC),IC=1,3) / 4134 C S 0.20159300E+00,-0.28294180E-01, 0.00000000E+00/ 4135 C DATA (GB(11, 6,IC),IC=1,3) / 4136 C S 0.20159300E+00, 0.45557797E+00, 0.10000000E+01/ 4317 4137 C 4318 4138 C … … 4326 4146 C 4327 4147 C-- INDICES FOR PADE APPROXIMATION 1 35 40 45 4328 4329 4330 4331 4332 4333 4334 4335 4148 C DATA (GA( 1,11,IC),IC=1,3) / 4149 C S 0.11990218E+02,-0.12823142E+01, 0.00000000E+00/ 4150 C DATA (GB( 1,11,IC),IC=1,3) / 4151 C S 0.11990218E+02, 0.26681588E+02, 0.10000000E+01/ 4152 C DATA (GA( 1,12,IC),IC=1,3) / 4153 C S 0.79709806E+01,-0.74805226E+00, 0.00000000E+00/ 4154 C DATA (GB( 1,12,IC),IC=1,3) / 4155 C S 0.79709806E+01, 0.18377807E+02, 0.10000000E+01/ 4336 4156 C 4337 4157 C----- INTERVAL = 6 ----- T = 200.0 4338 4158 C 4339 4159 C-- INDICES FOR PADE APPROXIMATION 1 35 40 45 4340 4341 4342 4343 4344 4345 4346 4347 4160 C DATA (GA( 2,11,IC),IC=1,3) / 4161 C S 0.10904073E+02,-0.10571588E+01, 0.00000000E+00/ 4162 C DATA (GB( 2,11,IC),IC=1,3) / 4163 C S 0.10904073E+02, 0.24728346E+02, 0.10000000E+01/ 4164 C DATA (GA( 2,12,IC),IC=1,3) / 4165 C S 0.75400737E+01,-0.56252739E+00, 0.00000000E+00/ 4166 C DATA (GB( 2,12,IC),IC=1,3) / 4167 C S 0.75400737E+01, 0.17643148E+02, 0.10000000E+01/ 4348 4168 C 4349 4169 C----- INTERVAL = 6 ----- T = 212.5 4350 4170 C 4351 4171 C-- INDICES FOR PADE APPROXIMATION 1 35 40 45 4352 4353 4354 4355 4356 4357 4358 4359 4172 C DATA (GA( 3,11,IC),IC=1,3) / 4173 C S 0.89126838E+01,-0.74864953E+00, 0.00000000E+00/ 4174 C DATA (GB( 3,11,IC),IC=1,3) / 4175 C S 0.89126838E+01, 0.20551342E+02, 0.10000000E+01/ 4176 C DATA (GA( 3,12,IC),IC=1,3) / 4177 C S 0.81804377E+01,-0.46188072E+00, 0.00000000E+00/ 4178 C DATA (GB( 3,12,IC),IC=1,3) / 4179 C S 0.81804377E+01, 0.19296161E+02, 0.10000000E+01/ 4360 4180 C 4361 4181 C----- INTERVAL = 6 ----- T = 225.0 4362 4182 C 4363 4183 C-- INDICES FOR PADE APPROXIMATION 1 35 40 45 4364 4365 4366 4367 4368 4369 4370 4371 4184 C DATA (GA( 4,11,IC),IC=1,3) / 4185 C S 0.85622405E+01,-0.58705980E+00, 0.00000000E+00/ 4186 C DATA (GB( 4,11,IC),IC=1,3) / 4187 C S 0.85622405E+01, 0.19955244E+02, 0.10000000E+01/ 4188 C DATA (GA( 4,12,IC),IC=1,3) / 4189 C S 0.10564339E+02,-0.40712065E+00, 0.00000000E+00/ 4190 C DATA (GB( 4,12,IC),IC=1,3) / 4191 C S 0.10564339E+02, 0.24951120E+02, 0.10000000E+01/ 4372 4192 C 4373 4193 C----- INTERVAL = 6 ----- T = 237.5 4374 4194 C 4375 4195 C-- INDICES FOR PADE APPROXIMATION 1 35 40 45 4376 4377 4378 4379 4380 4381 4382 4383 4196 C DATA (GA( 5,11,IC),IC=1,3) / 4197 C S 0.94892164E+01,-0.49305772E+00, 0.00000000E+00/ 4198 C DATA (GB( 5,11,IC),IC=1,3) / 4199 C S 0.94892164E+01, 0.22227100E+02, 0.10000000E+01/ 4200 C DATA (GA( 5,12,IC),IC=1,3) / 4201 C S 0.46896789E+02,-0.15295996E+01, 0.00000000E+00/ 4202 C DATA (GB( 5,12,IC),IC=1,3) / 4203 C S 0.46896789E+02, 0.10957372E+03, 0.10000000E+01/ 4384 4204 C 4385 4205 C----- INTERVAL = 6 ----- T = 250.0 4386 4206 C 4387 4207 C-- INDICES FOR PADE APPROXIMATION 1 35 40 45 4388 4389 4390 4391 4392 4393 4394 4395 4208 C DATA (GA( 6,11,IC),IC=1,3) / 4209 C S 0.13580937E+02,-0.51461431E+00, 0.00000000E+00/ 4210 C DATA (GB( 6,11,IC),IC=1,3) / 4211 C S 0.13580937E+02, 0.31770288E+02, 0.10000000E+01/ 4212 C DATA (GA( 6,12,IC),IC=1,3) / 4213 C S-0.30926524E+01, 0.43555255E+00, 0.00000000E+00/ 4214 C DATA (GB( 6,12,IC),IC=1,3) / 4215 C S-0.30926524E+01,-0.67432659E+01, 0.10000000E+01/ 4396 4216 C 4397 4217 C----- INTERVAL = 6 ----- T = 262.5 4398 4218 C 4399 4219 C-- INDICES FOR PADE APPROXIMATION 1 35 40 45 4400 4401 4402 4403 4404 4405 4406 4407 4220 C DATA (GA( 7,11,IC),IC=1,3) / 4221 C S-0.32050918E+03, 0.12373350E+02, 0.00000000E+00/ 4222 C DATA (GB( 7,11,IC),IC=1,3) / 4223 C S-0.32050918E+03,-0.74061287E+03, 0.10000000E+01/ 4224 C DATA (GA( 7,12,IC),IC=1,3) / 4225 C S 0.85742941E+00, 0.50380874E+00, 0.00000000E+00/ 4226 C DATA (GB( 7,12,IC),IC=1,3) / 4227 C S 0.85742941E+00, 0.24550746E+01, 0.10000000E+01/ 4408 4228 C 4409 4229 C----- INTERVAL = 6 ----- T = 275.0 4410 4230 C 4411 4231 C-- INDICES FOR PADE APPROXIMATION 1 35 40 45 4412 4413 4414 4415 4416 4417 4418 4419 4232 C DATA (GA( 8,11,IC),IC=1,3) / 4233 C S-0.37133165E+01, 0.44809588E+00, 0.00000000E+00/ 4234 C DATA (GB( 8,11,IC),IC=1,3) / 4235 C S-0.37133165E+01,-0.81329826E+01, 0.10000000E+01/ 4236 C DATA (GA( 8,12,IC),IC=1,3) / 4237 C S 0.19164038E+01, 0.68537352E+00, 0.00000000E+00/ 4238 C DATA (GB( 8,12,IC),IC=1,3) / 4239 C S 0.19164038E+01, 0.49089917E+01, 0.10000000E+01/ 4420 4240 C 4421 4241 C----- INTERVAL = 6 ----- T = 287.5 4422 4242 C 4423 4243 C-- INDICES FOR PADE APPROXIMATION 1 35 40 45 4424 4425 4426 4427 4428 4429 4430 4431 4244 C DATA (GA( 9,11,IC),IC=1,3) / 4245 C S 0.18890836E+00, 0.46548918E+00, 0.00000000E+00/ 4246 C DATA (GB( 9,11,IC),IC=1,3) / 4247 C S 0.18890836E+00, 0.90279822E+00, 0.10000000E+01/ 4248 C DATA (GA( 9,12,IC),IC=1,3) / 4249 C S 0.23513199E+01, 0.89437630E+00, 0.00000000E+00/ 4250 C DATA (GB( 9,12,IC),IC=1,3) / 4251 C S 0.23513199E+01, 0.59008712E+01, 0.10000000E+01/ 4432 4252 C 4433 4253 C----- INTERVAL = 6 ----- T = 300.0 4434 4254 C 4435 4255 C-- INDICES FOR PADE APPROXIMATION 1 35 40 45 4436 4437 4438 4439 4440 4441 4442 4443 4256 C DATA (GA(10,11,IC),IC=1,3) / 4257 C S 0.14209226E+01, 0.59121475E+00, 0.00000000E+00/ 4258 C DATA (GB(10,11,IC),IC=1,3) / 4259 C S 0.14209226E+01, 0.37532746E+01, 0.10000000E+01/ 4260 C DATA (GA(10,12,IC),IC=1,3) / 4261 C S 0.25566644E+01, 0.11127003E+01, 0.00000000E+00/ 4262 C DATA (GB(10,12,IC),IC=1,3) / 4263 C S 0.25566644E+01, 0.63532616E+01, 0.10000000E+01/ 4444 4264 C 4445 4265 C----- INTERVAL = 6 ----- T = 312.5 4446 4266 C 4447 4267 C-- INDICES FOR PADE APPROXIMATION 1 35 40 45 4448 4449 4450 4451 4452 4453 4454 4455 4268 C DATA (GA(11,11,IC),IC=1,3) / 4269 C S 0.19817679E+01, 0.74676119E+00, 0.00000000E+00/ 4270 C DATA (GB(11,11,IC),IC=1,3) / 4271 C S 0.19817679E+01, 0.50437916E+01, 0.10000000E+01/ 4272 C DATA (GA(11,12,IC),IC=1,3) / 4273 C S 0.26555181E+01, 0.13329782E+01, 0.00000000E+00/ 4274 C DATA (GB(11,12,IC),IC=1,3) / 4275 C S 0.26555181E+01, 0.65558627E+01, 0.10000000E+01/ 4456 4276 C 4457 4277 C … … 4471 4291 C 4472 4292 C-- INDICES FOR PADE APPROXIMATION 1 30 38 45 4473 4474 4475 4476 4477 4478 4479 4480 4293 C DATA (GA( 1,13,IC),IC=1,3) / 4294 C S 0.87668459E-01, 0.13845511E+01, 0.00000000E+00/ 4295 C DATA (GB( 1,13,IC),IC=1,3) / 4296 C S 0.87668459E-01, 0.23203798E+01, 0.10000000E+01/ 4297 C DATA (GA( 1,14,IC),IC=1,3) / 4298 C S 0.74878820E-01, 0.11718758E+01, 0.00000000E+00/ 4299 C DATA (GB( 1,14,IC),IC=1,3) / 4300 C S 0.74878820E-01, 0.20206726E+01, 0.10000000E+01/ 4481 4301 C 4482 4302 C----- INTERVAL = 2 ----- T = 200.0 4483 4303 C 4484 4304 C-- INDICES FOR PADE APPROXIMATION 1 30 38 45 4485 4486 4487 4488 4489 4490 4491 4492 4305 C DATA (GA( 2,13,IC),IC=1,3) / 4306 C S 0.83754276E-01, 0.13187042E+01, 0.00000000E+00/ 4307 C DATA (GB( 2,13,IC),IC=1,3) / 4308 C S 0.83754276E-01, 0.22288925E+01, 0.10000000E+01/ 4309 C DATA (GA( 2,14,IC),IC=1,3) / 4310 C S 0.71650966E-01, 0.11216131E+01, 0.00000000E+00/ 4311 C DATA (GB( 2,14,IC),IC=1,3) / 4312 C S 0.71650966E-01, 0.19441824E+01, 0.10000000E+01/ 4493 4313 C 4494 4314 C----- INTERVAL = 2 ----- T = 212.5 4495 4315 C 4496 4316 C-- INDICES FOR PADE APPROXIMATION 1 30 38 45 4497 4498 4499 4500 4501 4502 4503 4504 4317 C DATA (GA( 3,13,IC),IC=1,3) / 4318 C S 0.80460283E-01, 0.12644396E+01, 0.00000000E+00/ 4319 C DATA (GB( 3,13,IC),IC=1,3) / 4320 C S 0.80460283E-01, 0.21515593E+01, 0.10000000E+01/ 4321 C DATA (GA( 3,14,IC),IC=1,3) / 4322 C S 0.68979615E-01, 0.10809473E+01, 0.00000000E+00/ 4323 C DATA (GB( 3,14,IC),IC=1,3) / 4324 C S 0.68979615E-01, 0.18807257E+01, 0.10000000E+01/ 4505 4325 C 4506 4326 C----- INTERVAL = 2 ----- T = 225.0 4507 4327 C 4508 4328 C-- INDICES FOR PADE APPROXIMATION 1 30 38 45 4509 4510 4511 4512 4513 4514 4515 4516 4329 C DATA (GA( 4,13,IC),IC=1,3) / 4330 C S 0.77659686E-01, 0.12191543E+01, 0.00000000E+00/ 4331 C DATA (GB( 4,13,IC),IC=1,3) / 4332 C S 0.77659686E-01, 0.20855896E+01, 0.10000000E+01/ 4333 C DATA (GA( 4,14,IC),IC=1,3) / 4334 C S 0.66745345E-01, 0.10476396E+01, 0.00000000E+00/ 4335 C DATA (GB( 4,14,IC),IC=1,3) / 4336 C S 0.66745345E-01, 0.18275618E+01, 0.10000000E+01/ 4517 4337 C 4518 4338 C----- INTERVAL = 2 ----- T = 237.5 4519 4339 C 4520 4340 C-- INDICES FOR PADE APPROXIMATION 1 30 38 45 4521 4522 4523 4524 4525 4526 4527 4528 4341 C DATA (GA( 5,13,IC),IC=1,3) / 4342 C S 0.75257056E-01, 0.11809511E+01, 0.00000000E+00/ 4343 C DATA (GB( 5,13,IC),IC=1,3) / 4344 C S 0.75257056E-01, 0.20288489E+01, 0.10000000E+01/ 4345 C DATA (GA( 5,14,IC),IC=1,3) / 4346 C S 0.64857571E-01, 0.10200373E+01, 0.00000000E+00/ 4347 C DATA (GB( 5,14,IC),IC=1,3) / 4348 C S 0.64857571E-01, 0.17825910E+01, 0.10000000E+01/ 4529 4349 C 4530 4350 C----- INTERVAL = 2 ----- T = 250.0 4531 4351 C 4532 4352 C-- INDICES FOR PADE APPROXIMATION 1 30 38 45 4533 4534 4535 4536 4537 4538 4539 4540 4353 C DATA (GA( 6,13,IC),IC=1,3) / 4354 C S 0.73179175E-01, 0.11484154E+01, 0.00000000E+00/ 4355 C DATA (GB( 6,13,IC),IC=1,3) / 4356 C S 0.73179175E-01, 0.19796791E+01, 0.10000000E+01/ 4357 C DATA (GA( 6,14,IC),IC=1,3) / 4358 C S 0.63248495E-01, 0.99692726E+00, 0.00000000E+00/ 4359 C DATA (GB( 6,14,IC),IC=1,3) / 4360 C S 0.63248495E-01, 0.17442308E+01, 0.10000000E+01/ 4541 4361 C 4542 4362 C----- INTERVAL = 2 ----- T = 262.5 4543 4363 C 4544 4364 C-- INDICES FOR PADE APPROXIMATION 1 30 38 45 4545 4546 4547 4548 4549 4550 4551 4552 4365 C DATA (GA( 7,13,IC),IC=1,3) / 4366 C S 0.71369063E-01, 0.11204723E+01, 0.00000000E+00/ 4367 C DATA (GB( 7,13,IC),IC=1,3) / 4368 C S 0.71369063E-01, 0.19367778E+01, 0.10000000E+01/ 4369 C DATA (GA( 7,14,IC),IC=1,3) / 4370 C S 0.61866970E-01, 0.97740923E+00, 0.00000000E+00/ 4371 C DATA (GB( 7,14,IC),IC=1,3) / 4372 C S 0.61866970E-01, 0.17112809E+01, 0.10000000E+01/ 4553 4373 C 4554 4374 C----- INTERVAL = 2 ----- T = 275.0 4555 4375 C 4556 4376 C-- INDICES FOR PADE APPROXIMATION 1 30 38 45 4557 4558 4559 4560 4561 4562 4563 4564 4377 C DATA (GA( 8,13,IC),IC=1,3) / 4378 C S 0.69781812E-01, 0.10962918E+01, 0.00000000E+00/ 4379 C DATA (GB( 8,13,IC),IC=1,3) / 4380 C S 0.69781812E-01, 0.18991112E+01, 0.10000000E+01/ 4381 C DATA (GA( 8,14,IC),IC=1,3) / 4382 C S 0.60673632E-01, 0.96080188E+00, 0.00000000E+00/ 4383 C DATA (GB( 8,14,IC),IC=1,3) / 4384 C S 0.60673632E-01, 0.16828137E+01, 0.10000000E+01/ 4565 4385 C 4566 4386 C----- INTERVAL = 2 ----- T = 287.5 4567 4387 C 4568 4388 C-- INDICES FOR PADE APPROXIMATION 1 30 38 45 4569 4570 4571 4572 4573 4574 4575 4576 4389 C DATA (GA( 9,13,IC),IC=1,3) / 4390 C S 0.68381606E-01, 0.10752229E+01, 0.00000000E+00/ 4391 C DATA (GB( 9,13,IC),IC=1,3) / 4392 C S 0.68381606E-01, 0.18658501E+01, 0.10000000E+01/ 4393 C DATA (GA( 9,14,IC),IC=1,3) / 4394 C S 0.59637277E-01, 0.94657562E+00, 0.00000000E+00/ 4395 C DATA (GB( 9,14,IC),IC=1,3) / 4396 C S 0.59637277E-01, 0.16580908E+01, 0.10000000E+01/ 4577 4397 C 4578 4398 C----- INTERVAL = 2 ----- T = 300.0 4579 4399 C 4580 4400 C-- INDICES FOR PADE APPROXIMATION 1 30 38 45 4581 4582 4583 4584 4585 4586 4587 4588 4401 C DATA (GA(10,13,IC),IC=1,3) / 4402 C S 0.67139539E-01, 0.10567474E+01, 0.00000000E+00/ 4403 C DATA (GB(10,13,IC),IC=1,3) / 4404 C S 0.67139539E-01, 0.18363226E+01, 0.10000000E+01/ 4405 C DATA (GA(10,14,IC),IC=1,3) / 4406 C S 0.58732178E-01, 0.93430511E+00, 0.00000000E+00/ 4407 C DATA (GB(10,14,IC),IC=1,3) / 4408 C S 0.58732178E-01, 0.16365014E+01, 0.10000000E+01/ 4589 4409 C 4590 4410 C----- INTERVAL = 2 ----- T = 312.5 4591 4411 C 4592 4412 C-- INDICES FOR PADE APPROXIMATION 1 30 38 45 4593 4594 4595 4596 4597 4598 4599 4600 4413 C DATA (GA(11,13,IC),IC=1,3) / 4414 C S 0.66032012E-01, 0.10404465E+01, 0.00000000E+00/ 4415 C DATA (GB(11,13,IC),IC=1,3) / 4416 C S 0.66032012E-01, 0.18099779E+01, 0.10000000E+01/ 4417 C DATA (GA(11,14,IC),IC=1,3) / 4418 C S 0.57936092E-01, 0.92363528E+00, 0.00000000E+00/ 4419 C DATA (GB(11,14,IC),IC=1,3) / 4420 C S 0.57936092E-01, 0.16175164E+01, 0.10000000E+01/ 4601 4421 C 4602 4422 C … … 4618 4438 C 4619 4439 C-- INDICES FOR PADE APPROXIMATION 1 15 29 45 4620 4621 4622 4623 4624 4625 4626 4627 4440 C DATA (GA( 1,15,IC),IC=1,3) / 4441 C S 0.13230067E+02, 0.22042132E+02, 0.00000000E+00/ 4442 C DATA (GB( 1,15,IC),IC=1,3) / 4443 C S 0.13230067E+02, 0.22051750E+02, 0.10000000E+01/ 4444 C DATA (GA( 1,16,IC),IC=1,3) / 4445 C S 0.13183816E+02, 0.22169501E+02, 0.00000000E+00/ 4446 C DATA (GB( 1,16,IC),IC=1,3) / 4447 C S 0.13183816E+02, 0.22178972E+02, 0.10000000E+01/ 4628 4448 C 4629 4449 C----- INTERVAL = 4 ----- T = 200.0 4630 4450 C 4631 4451 C-- INDICES FOR PADE APPROXIMATION 1 15 29 45 4632 4633 4634 4635 4636 4637 4638 4639 4452 C DATA (GA( 2,15,IC),IC=1,3) / 4453 C S 0.13213564E+02, 0.22107298E+02, 0.00000000E+00/ 4454 C DATA (GB( 2,15,IC),IC=1,3) / 4455 C S 0.13213564E+02, 0.22116850E+02, 0.10000000E+01/ 4456 C DATA (GA( 2,16,IC),IC=1,3) / 4457 C S 0.13189991E+02, 0.22270075E+02, 0.00000000E+00/ 4458 C DATA (GB( 2,16,IC),IC=1,3) / 4459 C S 0.13189991E+02, 0.22279484E+02, 0.10000000E+01/ 4640 4460 C 4641 4461 C----- INTERVAL = 4 ----- T = 212.5 4642 4462 C 4643 4463 C-- INDICES FOR PADE APPROXIMATION 1 15 29 45 4644 4645 4646 4647 4648 4649 4650 4651 4464 C DATA (GA( 3,15,IC),IC=1,3) / 4465 C S 0.13209140E+02, 0.22180915E+02, 0.00000000E+00/ 4466 C DATA (GB( 3,15,IC),IC=1,3) / 4467 C S 0.13209140E+02, 0.22190410E+02, 0.10000000E+01/ 4468 C DATA (GA( 3,16,IC),IC=1,3) / 4469 C S 0.13209485E+02, 0.22379193E+02, 0.00000000E+00/ 4470 C DATA (GB( 3,16,IC),IC=1,3) / 4471 C S 0.13209485E+02, 0.22388551E+02, 0.10000000E+01/ 4652 4472 C 4653 4473 C----- INTERVAL = 4 ----- T = 225.0 4654 4474 C 4655 4475 C-- INDICES FOR PADE APPROXIMATION 1 15 29 45 4656 4657 4658 4659 4660 4661 4662 4663 4476 C DATA (GA( 4,15,IC),IC=1,3) / 4477 C S 0.13213894E+02, 0.22259478E+02, 0.00000000E+00/ 4478 C DATA (GB( 4,15,IC),IC=1,3) / 4479 C S 0.13213894E+02, 0.22268925E+02, 0.10000000E+01/ 4480 C DATA (GA( 4,16,IC),IC=1,3) / 4481 C S 0.13238789E+02, 0.22492992E+02, 0.00000000E+00/ 4482 C DATA (GB( 4,16,IC),IC=1,3) / 4483 C S 0.13238789E+02, 0.22502309E+02, 0.10000000E+01/ 4664 4484 C 4665 4485 C----- INTERVAL = 4 ----- T = 237.5 4666 4486 C 4667 4487 C-- INDICES FOR PADE APPROXIMATION 1 15 29 45 4668 4669 4670 4671 4672 4673 4674 4675 4488 C DATA (GA( 5,15,IC),IC=1,3) / 4489 C S 0.13225963E+02, 0.22341039E+02, 0.00000000E+00/ 4490 C DATA (GB( 5,15,IC),IC=1,3) / 4491 C S 0.13225963E+02, 0.22350445E+02, 0.10000000E+01/ 4492 C DATA (GA( 5,16,IC),IC=1,3) / 4493 C S 0.13275017E+02, 0.22608508E+02, 0.00000000E+00/ 4494 C DATA (GB( 5,16,IC),IC=1,3) / 4495 C S 0.13275017E+02, 0.22617792E+02, 0.10000000E+01/ 4676 4496 C 4677 4497 C----- INTERVAL = 4 ----- T = 250.0 4678 4498 C 4679 4499 C-- INDICES FOR PADE APPROXIMATION 1 15 29 45 4680 4681 4682 4683 4684 4685 4686 4687 4500 C DATA (GA( 6,15,IC),IC=1,3) / 4501 C S 0.13243806E+02, 0.22424247E+02, 0.00000000E+00/ 4502 C DATA (GB( 6,15,IC),IC=1,3) / 4503 C S 0.13243806E+02, 0.22433617E+02, 0.10000000E+01/ 4504 C DATA (GA( 6,16,IC),IC=1,3) / 4505 C S 0.13316096E+02, 0.22723843E+02, 0.00000000E+00/ 4506 C DATA (GB( 6,16,IC),IC=1,3) / 4507 C S 0.13316096E+02, 0.22733099E+02, 0.10000000E+01/ 4688 4508 C 4689 4509 C----- INTERVAL = 4 ----- T = 262.5 4690 4510 C 4691 4511 C-- INDICES FOR PADE APPROXIMATION 1 15 29 45 4692 4693 4694 4695 4696 4697 4698 4699 4512 C DATA (GA( 7,15,IC),IC=1,3) / 4513 C S 0.13266104E+02, 0.22508089E+02, 0.00000000E+00/ 4514 C DATA (GB( 7,15,IC),IC=1,3) / 4515 C S 0.13266104E+02, 0.22517429E+02, 0.10000000E+01/ 4516 C DATA (GA( 7,16,IC),IC=1,3) / 4517 C S 0.13360555E+02, 0.22837837E+02, 0.00000000E+00/ 4518 C DATA (GB( 7,16,IC),IC=1,3) / 4519 C S 0.13360555E+02, 0.22847071E+02, 0.10000000E+01/ 4700 4520 C 4701 4521 C----- INTERVAL = 4 ----- T = 275.0 4702 4522 C 4703 4523 C-- INDICES FOR PADE APPROXIMATION 1 15 29 45 4704 4705 4706 4707 4708 4709 4710 4711 4524 C DATA (GA( 8,15,IC),IC=1,3) / 4525 C S 0.13291782E+02, 0.22591771E+02, 0.00000000E+00/ 4526 C DATA (GB( 8,15,IC),IC=1,3) / 4527 C S 0.13291782E+02, 0.22601086E+02, 0.10000000E+01/ 4528 C DATA (GA( 8,16,IC),IC=1,3) / 4529 C S 0.13407324E+02, 0.22949751E+02, 0.00000000E+00/ 4530 C DATA (GB( 8,16,IC),IC=1,3) / 4531 C S 0.13407324E+02, 0.22958967E+02, 0.10000000E+01/ 4712 4532 C 4713 4533 C----- INTERVAL = 4 ----- T = 287.5 4714 4534 C 4715 4535 C-- INDICES FOR PADE APPROXIMATION 1 15 29 45 4716 4717 4718 4719 4720 4721 4722 4723 4536 C DATA (GA( 9,15,IC),IC=1,3) / 4537 C S 0.13319961E+02, 0.22674661E+02, 0.00000000E+00/ 4538 C DATA (GB( 9,15,IC),IC=1,3) / 4539 C S 0.13319961E+02, 0.22683956E+02, 0.10000000E+01/ 4540 C DATA (GA( 9,16,IC),IC=1,3) / 4541 C S 0.13455544E+02, 0.23059032E+02, 0.00000000E+00/ 4542 C DATA (GB( 9,16,IC),IC=1,3) / 4543 C S 0.13455544E+02, 0.23068234E+02, 0.10000000E+01/ 4724 4544 C 4725 4545 C----- INTERVAL = 4 ----- T = 300.0 4726 4546 C 4727 4547 C-- INDICES FOR PADE APPROXIMATION 1 15 29 45 4728 4729 4730 4731 4732 4733 4734 4735 4548 C DATA (GA(10,15,IC),IC=1,3) / 4549 C S 0.13349927E+02, 0.22756246E+02, 0.00000000E+00/ 4550 C DATA (GB(10,15,IC),IC=1,3) / 4551 C S 0.13349927E+02, 0.22765522E+02, 0.10000000E+01/ 4552 C DATA (GA(10,16,IC),IC=1,3) / 4553 C S 0.13504450E+02, 0.23165146E+02, 0.00000000E+00/ 4554 C DATA (GB(10,16,IC),IC=1,3) / 4555 C S 0.13504450E+02, 0.23174336E+02, 0.10000000E+01/ 4736 4556 C 4737 4557 C----- INTERVAL = 4 ----- T = 312.5 4738 4558 C 4739 4559 C-- INDICES FOR PADE APPROXIMATION 1 15 29 45 4740 DATA (GA(11,15,IC),IC=1,3) / 4741 S 0.13381108E+02, 0.22836093E+02, 0.00000000E+00/ 4742 DATA (GB(11,15,IC),IC=1,3) / 4743 S 0.13381108E+02, 0.22845354E+02, 0.10000000E+01/ 4744 DATA (GA(11,16,IC),IC=1,3) / 4745 S 0.13553282E+02, 0.23267456E+02, 0.00000000E+00/ 4746 DATA (GB(11,16,IC),IC=1,3) / 4747 S 0.13553282E+02, 0.23276638E+02, 0.10000000E+01/ 4560 C DATA (GA(11,15,IC),IC=1,3) / 4561 C S 0.13381108E+02, 0.22836093E+02, 0.00000000E+00/ 4562 C DATA (GB(11,15,IC),IC=1,3) / 4563 C S 0.13381108E+02, 0.22845354E+02, 0.10000000E+01/ 4564 C DATA (GA(11,16,IC),IC=1,3) / 4565 C S 0.13553282E+02, 0.23267456E+02, 0.00000000E+00/ 4566 C DATA (GB(11,16,IC),IC=1,3) / 4567 C S 0.13553282E+02, 0.23276638E+02, 0.10000000E+01/ 4568 C 4569 C ------------------------------------------------------------------ 4570 C DATA (( XP( J,K),J=1,6), K=1,6) / 4571 C S 0.46430621E+02, 0.12928299E+03, 0.20732648E+03, 4572 C S 0.31398411E+03, 0.18373177E+03,-0.11412303E+03, 4573 C S 0.73604774E+02, 0.27887914E+03, 0.27076947E+03, 4574 C S-0.57322111E+02,-0.64742459E+02, 0.87238280E+02, 4575 C S 0.37050866E+02, 0.20498759E+03, 0.37558029E+03, 4576 C S 0.17401171E+03,-0.13350302E+03,-0.37651795E+02, 4577 C S 0.14930141E+02, 0.89161160E+02, 0.17793062E+03, 4578 C S 0.93433860E+02,-0.70646020E+02,-0.26373150E+02, 4579 C S 0.40386780E+02, 0.10855270E+03, 0.50755010E+02, 4580 C S-0.31496190E+02, 0.12791300E+00, 0.18017770E+01, 4581 C S 0.90811926E+01, 0.75073923E+02, 0.24654438E+03, 4582 C S 0.39332612E+03, 0.29385281E+03, 0.89107921E+02 / 4748 4583 4749 C ------------------------------------------------------------------4750 DATA (( XP( J,K),J=1,6), K=1,6) /4751 S 0.46430621E+02, 0.12928299E+03, 0.20732648E+03,4752 S 0.31398411E+03, 0.18373177E+03,-0.11412303E+03,4753 S 0.73604774E+02, 0.27887914E+03, 0.27076947E+03,4754 S-0.57322111E+02,-0.64742459E+02, 0.87238280E+02,4755 S 0.37050866E+02, 0.20498759E+03, 0.37558029E+03,4756 S 0.17401171E+03,-0.13350302E+03,-0.37651795E+02,4757 S 0.14930141E+02, 0.89161160E+02, 0.17793062E+03,4758 S 0.93433860E+02,-0.70646020E+02,-0.26373150E+02,4759 S 0.40386780E+02, 0.10855270E+03, 0.50755010E+02,4760 S-0.31496190E+02, 0.12791300E+00, 0.18017770E+01,4761 S 0.90811926E+01, 0.75073923E+02, 0.24654438E+03,4762 S 0.39332612E+03, 0.29385281E+03, 0.89107921E+02 /4763 4584 C 4764 4585 C … … 4768 4589 100 CONTINUE 4769 4590 C 4591 !cdir collapse 4770 4592 DO 102 JK = 1 , KFLEV+1 4771 4593 DO 101 JL = 1, KDLON … … 4959 4781 INTEGER KUAER,KTRAER, KLIM 4960 4782 C 4961 REAL *8PABCU(KDLON,NUA,3*KFLEV+1) ! EFFECTIVE ABSORBER AMOUNTS4962 REAL *8PB(KDLON,Ninter,KFLEV+1) ! SPECTRAL HALF-LEVEL PLANCK FUNCTIONS4963 REAL *8PBINT(KDLON,KFLEV+1) ! HALF-LEVEL PLANCK FUNCTIONS4964 REAL *8PBSUR(KDLON,Ninter) ! SURFACE SPECTRAL PLANCK FUNCTION4965 REAL *8PBSUIN(KDLON) ! SURFACE PLANCK FUNCTION4966 REAL *8PBTOP(KDLON,Ninter) ! T.O.A. SPECTRAL PLANCK FUNCTION4967 REAL *8PDBSL(KDLON,Ninter,KFLEV*2) ! SUB-LAYER PLANCK FUNCTION GRADIENT4968 REAL *8PEMIS(KDLON) ! SURFACE EMISSIVITY4969 REAL *8PPMB(KDLON,KFLEV+1) ! HALF-LEVEL PRESSURE (MB)4970 REAL *8PTAVE(KDLON,KFLEV) ! TEMPERATURE4971 REAL *8PGA(KDLON,8,2,KFLEV) ! PADE APPROXIMANTS4972 REAL *8PGB(KDLON,8,2,KFLEV) ! PADE APPROXIMANTS4973 REAL *8PGASUR(KDLON,8,2) ! PADE APPROXIMANTS4974 REAL *8PGBSUR(KDLON,8,2) ! PADE APPROXIMANTS4975 REAL *8PGATOP(KDLON,8,2) ! PADE APPROXIMANTS4976 REAL *8PGBTOP(KDLON,8,2) ! PADE APPROXIMANTS4977 C 4978 REAL *8PCNTRB(KDLON,KFLEV+1,KFLEV+1) ! CLEAR-SKY ENERGY EXCHANGE MATRIX4979 REAL *8PCTS(KDLON,KFLEV) ! COOLING-TO-SPACE TERM4980 REAL *8PFLUC(KDLON,2,KFLEV+1) ! CLEAR-SKY RADIATIVE FLUXES4783 REAL(KIND=8) PABCU(KDLON,NUA,3*KFLEV+1) ! EFFECTIVE ABSORBER AMOUNTS 4784 REAL(KIND=8) PB(KDLON,Ninter,KFLEV+1) ! SPECTRAL HALF-LEVEL PLANCK FUNCTIONS 4785 REAL(KIND=8) PBINT(KDLON,KFLEV+1) ! HALF-LEVEL PLANCK FUNCTIONS 4786 REAL(KIND=8) PBSUR(KDLON,Ninter) ! SURFACE SPECTRAL PLANCK FUNCTION 4787 REAL(KIND=8) PBSUIN(KDLON) ! SURFACE PLANCK FUNCTION 4788 REAL(KIND=8) PBTOP(KDLON,Ninter) ! T.O.A. SPECTRAL PLANCK FUNCTION 4789 REAL(KIND=8) PDBSL(KDLON,Ninter,KFLEV*2) ! SUB-LAYER PLANCK FUNCTION GRADIENT 4790 REAL(KIND=8) PEMIS(KDLON) ! SURFACE EMISSIVITY 4791 REAL(KIND=8) PPMB(KDLON,KFLEV+1) ! HALF-LEVEL PRESSURE (MB) 4792 REAL(KIND=8) PTAVE(KDLON,KFLEV) ! TEMPERATURE 4793 REAL(KIND=8) PGA(KDLON,8,2,KFLEV) ! PADE APPROXIMANTS 4794 REAL(KIND=8) PGB(KDLON,8,2,KFLEV) ! PADE APPROXIMANTS 4795 REAL(KIND=8) PGASUR(KDLON,8,2) ! PADE APPROXIMANTS 4796 REAL(KIND=8) PGBSUR(KDLON,8,2) ! PADE APPROXIMANTS 4797 REAL(KIND=8) PGATOP(KDLON,8,2) ! PADE APPROXIMANTS 4798 REAL(KIND=8) PGBTOP(KDLON,8,2) ! PADE APPROXIMANTS 4799 C 4800 REAL(KIND=8) PCNTRB(KDLON,KFLEV+1,KFLEV+1) ! CLEAR-SKY ENERGY EXCHANGE MATRIX 4801 REAL(KIND=8) PCTS(KDLON,KFLEV) ! COOLING-TO-SPACE TERM 4802 REAL(KIND=8) PFLUC(KDLON,2,KFLEV+1) ! CLEAR-SKY RADIATIVE FLUXES 4981 4803 C----------------------------------------------------------------------- 4982 4804 C LOCAL VARIABLES: 4983 REAL *8ZADJD(KDLON,KFLEV+1)4984 REAL *8ZADJU(KDLON,KFLEV+1)4985 REAL *8ZDBDT(KDLON,Ninter,KFLEV)4986 REAL *8ZDISD(KDLON,KFLEV+1)4987 REAL *8ZDISU(KDLON,KFLEV+1)4805 REAL(KIND=8) ZADJD(KDLON,KFLEV+1) 4806 REAL(KIND=8) ZADJU(KDLON,KFLEV+1) 4807 REAL(KIND=8) ZDBDT(KDLON,Ninter,KFLEV) 4808 REAL(KIND=8) ZDISD(KDLON,KFLEV+1) 4809 REAL(KIND=8) ZDISU(KDLON,KFLEV+1) 4988 4810 C 4989 4811 INTEGER jk, jl … … 5076 4898 INTEGER KUAER,KTRAER, KLIM 5077 4899 C 5078 REAL *8PABCU(KDLON,NUA,3*KFLEV+1) ! ABSORBER AMOUNTS5079 REAL *8PADJD(KDLON,KFLEV+1) ! CONTRIBUTION BY ADJACENT LAYERS5080 REAL *8PADJU(KDLON,KFLEV+1) ! CONTRIBUTION BY ADJACENT LAYERS5081 REAL *8PB(KDLON,Ninter,KFLEV+1) ! SPECTRAL HALF-LEVEL PLANCK FUNCTIONS5082 REAL *8PBINT(KDLON,KFLEV+1) ! HALF-LEVEL PLANCK FUNCTIONS5083 REAL *8PBSUR(KDLON,Ninter) ! SPECTRAL SURFACE PLANCK FUNCTION5084 REAL *8PBSUI(KDLON) ! SURFACE PLANCK FUNCTION5085 REAL *8PBTOP(KDLON,Ninter) ! SPECTRAL T.O.A. PLANCK FUNCTION5086 REAL *8PDISD(KDLON,KFLEV+1) ! CONTRIBUTION BY DISTANT LAYERS5087 REAL *8PDISU(KDLON,KFLEV+1) ! CONTRIBUTION BY DISTANT LAYERS5088 REAL *8PEMIS(KDLON) ! SURFACE EMISSIVITY5089 REAL *8PPMB(KDLON,KFLEV+1) ! PRESSURE MB5090 REAL *8PGA(KDLON,8,2,KFLEV) ! PADE APPROXIMANTS5091 REAL *8PGB(KDLON,8,2,KFLEV) ! PADE APPROXIMANTS5092 REAL *8PGASUR(KDLON,8,2) ! SURFACE PADE APPROXIMANTS5093 REAL *8PGBSUR(KDLON,8,2) ! SURFACE PADE APPROXIMANTS5094 REAL *8PGATOP(KDLON,8,2) ! T.O.A. PADE APPROXIMANTS5095 REAL *8PGBTOP(KDLON,8,2) ! T.O.A. PADE APPROXIMANTS5096 C 5097 REAL *8PFLUC(KDLON,2,KFLEV+1) ! CLEAR-SKY RADIATIVE FLUXES5098 REAL *8PCTS(KDLON,KFLEV) ! COOLING-TO-SPACE TERM4900 REAL(KIND=8) PABCU(KDLON,NUA,3*KFLEV+1) ! ABSORBER AMOUNTS 4901 REAL(KIND=8) PADJD(KDLON,KFLEV+1) ! CONTRIBUTION BY ADJACENT LAYERS 4902 REAL(KIND=8) PADJU(KDLON,KFLEV+1) ! CONTRIBUTION BY ADJACENT LAYERS 4903 REAL(KIND=8) PB(KDLON,Ninter,KFLEV+1) ! SPECTRAL HALF-LEVEL PLANCK FUNCTIONS 4904 REAL(KIND=8) PBINT(KDLON,KFLEV+1) ! HALF-LEVEL PLANCK FUNCTIONS 4905 REAL(KIND=8) PBSUR(KDLON,Ninter) ! SPECTRAL SURFACE PLANCK FUNCTION 4906 REAL(KIND=8) PBSUI(KDLON) ! SURFACE PLANCK FUNCTION 4907 REAL(KIND=8) PBTOP(KDLON,Ninter) ! SPECTRAL T.O.A. PLANCK FUNCTION 4908 REAL(KIND=8) PDISD(KDLON,KFLEV+1) ! CONTRIBUTION BY DISTANT LAYERS 4909 REAL(KIND=8) PDISU(KDLON,KFLEV+1) ! CONTRIBUTION BY DISTANT LAYERS 4910 REAL(KIND=8) PEMIS(KDLON) ! SURFACE EMISSIVITY 4911 REAL(KIND=8) PPMB(KDLON,KFLEV+1) ! PRESSURE MB 4912 REAL(KIND=8) PGA(KDLON,8,2,KFLEV) ! PADE APPROXIMANTS 4913 REAL(KIND=8) PGB(KDLON,8,2,KFLEV) ! PADE APPROXIMANTS 4914 REAL(KIND=8) PGASUR(KDLON,8,2) ! SURFACE PADE APPROXIMANTS 4915 REAL(KIND=8) PGBSUR(KDLON,8,2) ! SURFACE PADE APPROXIMANTS 4916 REAL(KIND=8) PGATOP(KDLON,8,2) ! T.O.A. PADE APPROXIMANTS 4917 REAL(KIND=8) PGBTOP(KDLON,8,2) ! T.O.A. PADE APPROXIMANTS 4918 C 4919 REAL(KIND=8) PFLUC(KDLON,2,KFLEV+1) ! CLEAR-SKY RADIATIVE FLUXES 4920 REAL(KIND=8) PCTS(KDLON,KFLEV) ! COOLING-TO-SPACE TERM 5099 4921 C 5100 4922 C* LOCAL VARIABLES: 5101 4923 C 5102 REAL *8ZBGND(KDLON)5103 REAL *8ZFD(KDLON)5104 REAL *8ZFN10(KDLON)5105 REAL *8ZFU(KDLON)5106 REAL *8ZTT(KDLON,NTRA)5107 REAL *8ZTT1(KDLON,NTRA)5108 REAL *8ZTT2(KDLON,NTRA)5109 REAL *8ZUU(KDLON,NUA)5110 REAL *8ZCNSOL(KDLON)5111 REAL *8ZCNTOP(KDLON)4924 REAL(KIND=8) ZBGND(KDLON) 4925 REAL(KIND=8) ZFD(KDLON) 4926 REAL(KIND=8) ZFN10(KDLON) 4927 REAL(KIND=8) ZFU(KDLON) 4928 REAL(KIND=8) ZTT(KDLON,NTRA) 4929 REAL(KIND=8) ZTT1(KDLON,NTRA) 4930 REAL(KIND=8) ZTT2(KDLON,NTRA) 4931 REAL(KIND=8) ZUU(KDLON,NUA) 4932 REAL(KIND=8) ZCNSOL(KDLON) 4933 REAL(KIND=8) ZCNTOP(KDLON) 5112 4934 C 5113 4935 INTEGER jk, jl, ja 5114 4936 INTEGER jstra, jstru 5115 4937 INTEGER ind1, ind2, ind3, ind4, in, jlim 5116 REAL *8zctstr4938 REAL(KIND=8) zctstr 5117 4939 C----------------------------------------------------------------------- 5118 4940 C … … 5401 5223 INTEGER KUAER,KTRAER 5402 5224 C 5403 REAL *8PABCU(KDLON,NUA,3*KFLEV+1) ! ABSORBER AMOUNTS5404 REAL *8PDBDT(KDLON,Ninter,KFLEV) ! LAYER PLANCK FUNCTION GRADIENT5405 REAL *8PGA(KDLON,8,2,KFLEV) ! PADE APPROXIMANTS5406 REAL *8PGB(KDLON,8,2,KFLEV) ! PADE APPROXIMANTS5407 C 5408 REAL *8PCNTRB(KDLON,KFLEV+1,KFLEV+1) ! ENERGY EXCHANGE MATRIX5409 REAL *8PDISD(KDLON,KFLEV+1) ! CONTRIBUTION BY DISTANT LAYERS5410 REAL *8PDISU(KDLON,KFLEV+1) ! CONTRIBUTION BY DISTANT LAYERS5225 REAL(KIND=8) PABCU(KDLON,NUA,3*KFLEV+1) ! ABSORBER AMOUNTS 5226 REAL(KIND=8) PDBDT(KDLON,Ninter,KFLEV) ! LAYER PLANCK FUNCTION GRADIENT 5227 REAL(KIND=8) PGA(KDLON,8,2,KFLEV) ! PADE APPROXIMANTS 5228 REAL(KIND=8) PGB(KDLON,8,2,KFLEV) ! PADE APPROXIMANTS 5229 C 5230 REAL(KIND=8) PCNTRB(KDLON,KFLEV+1,KFLEV+1) ! ENERGY EXCHANGE MATRIX 5231 REAL(KIND=8) PDISD(KDLON,KFLEV+1) ! CONTRIBUTION BY DISTANT LAYERS 5232 REAL(KIND=8) PDISU(KDLON,KFLEV+1) ! CONTRIBUTION BY DISTANT LAYERS 5411 5233 C 5412 5234 C* LOCAL VARIABLES: 5413 5235 C 5414 REAL *8ZGLAYD(KDLON)5415 REAL *8ZGLAYU(KDLON)5416 REAL *8ZTT(KDLON,NTRA)5417 REAL *8ZTT1(KDLON,NTRA)5418 REAL *8ZTT2(KDLON,NTRA)5236 REAL(KIND=8) ZGLAYD(KDLON) 5237 REAL(KIND=8) ZGLAYU(KDLON) 5238 REAL(KIND=8) ZTT(KDLON,NTRA) 5239 REAL(KIND=8) ZTT1(KDLON,NTRA) 5240 REAL(KIND=8) ZTT2(KDLON,NTRA) 5419 5241 C 5420 5242 INTEGER jl, jk, ja, ikp1, ikn, ikd1, jkj, ikd2 5421 5243 INTEGER ikjp1, ikm1, ikj, jlk, iku1, ijkl, iku2 5422 5244 INTEGER ind1, ind2, ind3, ind4, itt 5423 REAL *8zww, zdzxdg, zdzxmg5245 REAL(KIND=8) zww, zdzxdg, zdzxmg 5424 5246 C 5425 5247 C* 1. INITIALIZATION … … 5619 5441 S , PADJD,PADJU,PCNTRB,PDBDT) 5620 5442 USE dimphy 5443 USE radiation_AR4_param, only : WG1 5621 5444 IMPLICIT none 5622 5445 cym#include "dimensions.h" … … 5656 5479 INTEGER KUAER,KTRAER 5657 5480 C 5658 REAL *8PABCU(KDLON,NUA,3*KFLEV+1) ! ABSORBER AMOUNTS5659 REAL *8PDBSL(KDLON,Ninter,KFLEV*2) ! SUB-LAYER PLANCK FUNCTION GRADIENT5660 REAL *8PGA(KDLON,8,2,KFLEV) ! PADE APPROXIMANTS5661 REAL *8PGB(KDLON,8,2,KFLEV) ! PADE APPROXIMANTS5662 C 5663 REAL *8PADJD(KDLON,KFLEV+1) ! CONTRIBUTION OF ADJACENT LAYERS5664 REAL *8PADJU(KDLON,KFLEV+1) ! CONTRIBUTION OF ADJACENT LAYERS5665 REAL *8PCNTRB(KDLON,KFLEV+1,KFLEV+1) ! CLEAR-SKY ENERGY EXCHANGE MATRIX5666 REAL *8PDBDT(KDLON,Ninter,KFLEV) ! LAYER PLANCK FUNCTION GRADIENT5481 REAL(KIND=8) PABCU(KDLON,NUA,3*KFLEV+1) ! ABSORBER AMOUNTS 5482 REAL(KIND=8) PDBSL(KDLON,Ninter,KFLEV*2) ! SUB-LAYER PLANCK FUNCTION GRADIENT 5483 REAL(KIND=8) PGA(KDLON,8,2,KFLEV) ! PADE APPROXIMANTS 5484 REAL(KIND=8) PGB(KDLON,8,2,KFLEV) ! PADE APPROXIMANTS 5485 C 5486 REAL(KIND=8) PADJD(KDLON,KFLEV+1) ! CONTRIBUTION OF ADJACENT LAYERS 5487 REAL(KIND=8) PADJU(KDLON,KFLEV+1) ! CONTRIBUTION OF ADJACENT LAYERS 5488 REAL(KIND=8) PCNTRB(KDLON,KFLEV+1,KFLEV+1) ! CLEAR-SKY ENERGY EXCHANGE MATRIX 5489 REAL(KIND=8) PDBDT(KDLON,Ninter,KFLEV) ! LAYER PLANCK FUNCTION GRADIENT 5667 5490 C 5668 5491 C* LOCAL ARRAYS: 5669 5492 C 5670 REAL *8ZGLAYD(KDLON)5671 REAL *8ZGLAYU(KDLON)5672 REAL *8ZTT(KDLON,NTRA)5673 REAL *8ZTT1(KDLON,NTRA)5674 REAL *8ZTT2(KDLON,NTRA)5675 REAL *8ZUU(KDLON,NUA)5493 REAL(KIND=8) ZGLAYD(KDLON) 5494 REAL(KIND=8) ZGLAYU(KDLON) 5495 REAL(KIND=8) ZTT(KDLON,NTRA) 5496 REAL(KIND=8) ZTT1(KDLON,NTRA) 5497 REAL(KIND=8) ZTT2(KDLON,NTRA) 5498 REAL(KIND=8) ZUU(KDLON,NUA) 5676 5499 C 5677 5500 INTEGER jk, jl, ja, im12, ind, inu, ixu, jg 5678 5501 INTEGER ixd, ibs, idd, imu, jk1, jk2, jnu 5679 REAL *8zwtr5502 REAL(KIND=8) zwtr 5680 5503 c 5681 C* Data Block: 5682 c 5683 REAL*8 WG1(2) 5684 SAVE WG1 5685 c$OMP THREADPRIVATE(WG1) 5686 DATA (WG1(jk),jk=1,2) /1.0, 1.0/ 5504 5687 5505 C----------------------------------------------------------------------- 5688 5506 C … … 5865 5683 C 5866 5684 C----------------------------------------------------------------------- 5867 REAL *8O1H, O2H5685 REAL(KIND=8) O1H, O2H 5868 5686 PARAMETER (O1H=2230.) 5869 5687 PARAMETER (O2H=100.) 5870 REAL *8RPIALF05688 REAL(KIND=8) RPIALF0 5871 5689 PARAMETER (RPIALF0=2.0) 5872 5690 C 5873 5691 C* ARGUMENTS: 5874 5692 C 5875 REAL *8PUU(KDLON,NUA)5876 REAL *8PTT(KDLON,NTRA)5877 REAL *8PGA(KDLON,8,2)5878 REAL *8PGB(KDLON,8,2)5693 REAL(KIND=8) PUU(KDLON,NUA) 5694 REAL(KIND=8) PTT(KDLON,NTRA) 5695 REAL(KIND=8) PGA(KDLON,8,2) 5696 REAL(KIND=8) PGB(KDLON,8,2) 5879 5697 C 5880 5698 C* LOCAL VARIABLES: 5881 5699 C 5882 REAL *8zz, zxd, zxn5883 REAL *8zpu, zpu10, zpu11, zpu12, zpu135884 REAL *8zeu, zeu10, zeu11, zeu12, zeu135885 REAL *8zx, zy, zsq1, zsq2, zvxy, zuxy5886 REAL *8zaercn, zto1, zto2, zxch4, zych4, zxn2o, zyn2o5887 REAL *8zsqn21, zodn21, zsqh42, zodh425888 REAL *8zsqh41, zodh41, zsqn22, zodn22, zttf11, zttf125889 REAL *8zuu11, zuu12, za11, za125700 REAL(KIND=8) zz, zxd, zxn 5701 REAL(KIND=8) zpu, zpu10, zpu11, zpu12, zpu13 5702 REAL(KIND=8) zeu, zeu10, zeu11, zeu12, zeu13 5703 REAL(KIND=8) zx, zy, zsq1, zsq2, zvxy, zuxy 5704 REAL(KIND=8) zaercn, zto1, zto2, zxch4, zych4, zxn2o, zyn2o 5705 REAL(KIND=8) zsqn21, zodn21, zsqh42, zodh42 5706 REAL(KIND=8) zsqh41, zodh41, zsqn22, zodn22, zttf11, zttf12 5707 REAL(KIND=8) zuu11, zuu12, za11, za12 5890 5708 INTEGER jl, ja 5891 5709 C ------------------------------------------------------------------ … … 5897 5715 C 5898 5716 C 5717 !cdir collapse 5899 5718 DO 130 JA = 1 , 8 5900 5719 DO 120 JL = 1, KDLON … … 6041 5860 C 6042 5861 C----------------------------------------------------------------------- 6043 REAL *8O1H, O2H5862 REAL(KIND=8) O1H, O2H 6044 5863 PARAMETER (O1H=2230.) 6045 5864 PARAMETER (O2H=100.) 6046 REAL *8RPIALF05865 REAL(KIND=8) RPIALF0 6047 5866 PARAMETER (RPIALF0=2.0) 6048 5867 C 6049 5868 C* ARGUMENTS: 6050 5869 C 6051 REAL *8PGA(KDLON,8,2) ! PADE APPROXIMANTS6052 REAL *8PGB(KDLON,8,2) ! PADE APPROXIMANTS6053 REAL *8PUU1(KDLON,NUA) ! ABSORBER AMOUNTS FROM TOP TO LEVEL 16054 REAL *8PUU2(KDLON,NUA) ! ABSORBER AMOUNTS FROM TOP TO LEVEL 26055 REAL *8PTT(KDLON,NTRA) ! TRANSMISSION FUNCTIONS5870 REAL(KIND=8) PGA(KDLON,8,2) ! PADE APPROXIMANTS 5871 REAL(KIND=8) PGB(KDLON,8,2) ! PADE APPROXIMANTS 5872 REAL(KIND=8) PUU1(KDLON,NUA) ! ABSORBER AMOUNTS FROM TOP TO LEVEL 1 5873 REAL(KIND=8) PUU2(KDLON,NUA) ! ABSORBER AMOUNTS FROM TOP TO LEVEL 2 5874 REAL(KIND=8) PTT(KDLON,NTRA) ! TRANSMISSION FUNCTIONS 6056 5875 C 6057 5876 C* LOCAL VARIABLES: 6058 5877 C 6059 5878 INTEGER ja, jl 6060 REAL *8zz, zxd, zxn6061 REAL *8zpu, zpu10, zpu11, zpu12, zpu136062 REAL *8zeu, zeu10, zeu11, zeu12, zeu136063 REAL *8zx, zy, zuxy, zsq1, zsq2, zvxy, zaercn, zto1, zto26064 REAL *8zxch4, zych4, zsqh41, zodh416065 REAL *8zxn2o, zyn2o, zsqn21, zodn21, zsqh42, zodh426066 REAL *8zsqn22, zodn22, za11, zttf11, za12, zttf126067 REAL *8zuu11, zuu125879 REAL(KIND=8) zz, zxd, zxn 5880 REAL(KIND=8) zpu, zpu10, zpu11, zpu12, zpu13 5881 REAL(KIND=8) zeu, zeu10, zeu11, zeu12, zeu13 5882 REAL(KIND=8) zx, zy, zuxy, zsq1, zsq2, zvxy, zaercn, zto1, zto2 5883 REAL(KIND=8) zxch4, zych4, zsqh41, zodh41 5884 REAL(KIND=8) zxn2o, zyn2o, zsqn21, zodn21, zsqh42, zodh42 5885 REAL(KIND=8) zsqn22, zodn22, za11, zttf11, za12, zttf12 5886 REAL(KIND=8) zuu11, zuu12 6068 5887 C ------------------------------------------------------------------ 6069 5888 C … … 6074 5893 C 6075 5894 C 5895 5896 !CDIR ON_ADB(PUU1) 5897 !CDIR ON_ADB(PUU2) 5898 !CDIR COLLAPSE 6076 5899 DO 130 JA = 1 , 8 6077 5900 DO 120 JL = 1, KDLON -
LMDZ4/trunk/libf/phylmd/surf_land_orchidee_mod.F90
r1146 r1279 40 40 tsol_rad, tsurf_new, alb1_new, alb2_new, & 41 41 emis_new, z0_new, qsurf) 42 USE mod_surf_para 43 USE mod_synchro_omp 42 43 USE mod_surf_para 44 USE mod_synchro_omp 44 45 46 USE carbon_cycle_mod, ONLY : carbon_cycle_cpl, fco2_land_inst, fco2_lu_inst 47 45 48 ! 46 49 ! Cette routine sert d'interface entre le modele atmospherique et le … … 67 70 ! spechum humidite specifique 1ere couche 68 71 ! epot_air temp pot de l'air 69 ! ccanopy concentration CO2 canopee 72 ! ccanopy concentration CO2 canopee, correspond au co2_send de 73 ! carbon_cycle_mod ou valeur constant co2_ppm 70 74 ! tq_cdrag cdrag 71 75 ! petAcoef coeff. A de la resolution de la CL pour t … … 134 138 INTEGER :: error 135 139 REAL, DIMENSION(klon) :: swdown_vrai 140 REAL, DIMENSION(klon) :: fco2_land_comp ! sur grille compresse 141 REAL, DIMENSION(klon) :: fco2_lu_comp ! sur grille compresse 136 142 CHARACTER (len = 20) :: modname = 'surf_land_orchidee' 137 143 CHARACTER (len = 80) :: abort_message … … 341 347 CALL abort_gcm(modname,abort_message,1) 342 348 ENDIF 343 349 ! 350 ! Allocate variables needed for carbon_cycle_mod 351 ! 352 IF (carbon_cycle_cpl) THEN 353 IF (.NOT. ALLOCATED(fco2_land_inst)) THEN 354 ALLOCATE(fco2_land_inst(klon),stat=error) 355 IF (error /= 0) CALL abort_gcm(modname,'Pb in allocation fco2_land_inst',1) 356 357 ALLOCATE(fco2_lu_inst(klon),stat=error) 358 IF(error /=0) CALL abort_gcm(modname,'Pb in allocation fco2_lu_inst',1) 359 END IF 360 END IF 361 344 362 ENDIF ! (fin debut) 363 345 364 346 365 ! … … 443 462 444 463 IF (debut) CALL Finalize_surf_para 445 464 465 466 ! JG : TEMPORAIRE!!!! Les variables fco2_land_comp et fco2_lu_comp seront plus tard en sortie d'ORCHIDEE 467 ! ici mis a valeur quelquonque pour test. Ces variables sont sur la grille compresse avec uniquement des points de terres 468 469 fco2_land_comp(:) = 1. 470 fco2_lu_comp(:) = 10. 471 472 ! Decompress variables for the module carbon_cycle_mod 473 IF (carbon_cycle_cpl) THEN 474 fco2_land_inst(:)=0. 475 fco2_lu_inst(:)=0. 476 477 DO igrid = 1, knon 478 ireal = knindex(igrid) 479 fco2_land_inst(ireal) = fco2_land_comp(igrid) 480 fco2_lu_inst(ireal) = fco2_lu_comp(igrid) 481 END DO 482 END IF 483 446 484 END SUBROUTINE surf_land_orchidee 447 485 ! -
LMDZ4/trunk/libf/phylmd/surf_land_orchidee_noopenmp_mod.F90
r1146 r1279 68 68 ! spechum humidite specifique 1ere couche 69 69 ! epot_air temp pot de l'air 70 ! ccanopy concentration CO2 canopee 70 ! ccanopy concentration CO2 canopee, correspond au co2_send de 71 ! carbon_cycle_mod ou valeur constant co2_ppm 71 72 ! tq_cdrag cdrag 72 73 ! petAcoef coeff. A de la resolution de la CL pour t … … 95 96 ! qsurf air moisture at surface 96 97 ! 98 USE carbon_cycle_mod, ONLY : carbon_cycle_cpl, fco2_land_inst, fco2_lu_inst 99 IMPLICIT NONE 100 97 101 INCLUDE "indicesol.h" 98 102 INCLUDE "temps.h" … … 135 139 INTEGER :: error 136 140 REAL, DIMENSION(klon) :: swdown_vrai 141 REAL, DIMENSION(klon) :: fco2_land_comp ! sur grille compresse 142 REAL, DIMENSION(klon) :: fco2_lu_comp ! sur grille compresse 137 143 CHARACTER (len = 20) :: modname = 'surf_land_orchidee' 138 144 CHARACTER (len = 80) :: abort_message … … 334 340 ENDIF 335 341 342 ! 343 ! Allocate variables needed for carbon_cycle_mod 344 ! 345 IF (carbon_cycle_cpl) THEN 346 IF (.NOT. ALLOCATED(fco2_land_inst)) THEN 347 ALLOCATE(fco2_land_inst(klon),stat=error) 348 IF (error /= 0) CALL abort_gcm(modname,'Pb in allocation fco2_land_inst',1) 349 350 ALLOCATE(fco2_lu_inst(klon),stat=error) 351 IF(error /=0) CALL abort_gcm(modname,'Pb in allocation fco2_lu_inst',1) 352 END IF 353 END IF 354 336 355 ENDIF ! (fin debut) 337 356 … … 378 397 379 398 #ifndef CPP_MPI 380 #define ORC_PREPAR381 #endif382 383 #ifdef ORC_PREPAR384 399 ! Interface for ORCHIDEE compiled in sequential mode(without preprocessing flag CPP_MPI) 385 400 CALL intersurf_main (itime+itau_phy-1, iim, jjm+1, knon, ktindex, dtime, & … … 394 409 395 410 #else 396 ! Interface for ORCHIDEE version 1.9 or later compiled in parallel mode(with preprocessing flag CPP_MPI)411 ! Interface for ORCHIDEE version 1.9 or later(1.9.2, 1.9.3, 1.9.4) compiled in parallel mode(with preprocessing flag CPP_MPI) 397 412 CALL intersurf_main (itime+itau_phy-1, iim, jjm+1, offset, knon, ktindex, & 398 413 orch_comm, dtime, lrestart_read, lrestart_write, lalo, & … … 417 432 IF (knon /=0) THEN 418 433 419 #if def ORC_PREPAR434 #ifndef CPP_MPI 420 435 ! Interface for ORCHIDEE compiled in sequential mode(without preprocessing flag CPP_MPI) 421 436 CALL intersurf_main (itime+itau_phy, iim, jjm+1, knon, ktindex, dtime, & … … 463 478 464 479 IF (debut) lrestart_read = .FALSE. 480 481 482 ! JG : TEMPORAIRE!!!! Les variables fco2_land_comp et fco2_lu_comp seront plus tard en sortie d'ORCHIDEE 483 ! ici mis a valeur quelquonque pour test. Ces variables sont sur la grille compresse avec uniquement des points de terres 484 485 fco2_land_comp(:) = 1. 486 fco2_lu_comp(:) = 10. 487 488 ! Decompress variables for the module carbon_cycle_mod 489 IF (carbon_cycle_cpl) THEN 490 fco2_land_inst(:)=0. 491 fco2_lu_inst(:)=0. 492 493 DO igrid = 1, knon 494 ireal = knindex(igrid) 495 fco2_land_inst(ireal) = fco2_land_comp(igrid) 496 fco2_lu_inst(ireal) = fco2_lu_comp(igrid) 497 END DO 498 END IF 499 465 500 #endif 466 501 END SUBROUTINE surf_land_orchidee … … 628 663 displs(i)=displs(i-1)+knon_nb(i-1) 629 664 ENDDO 630 ENDIF 665 ELSE 666 ALLOCATE(neighbours_g(1,8)) 667 ENDIF 631 668 632 669 ktindex_p(1:knon)=ktindex(1:knon)+klon_mpi_begin-1+iim-1 -
LMDZ4/trunk/libf/phylmd/undefSTD.F
r1233 r1279 14 14 c 15 15 c Calcul * du nombre de pas de temps (FLOAT(ecrit_XXX)-tnondef)) 16 c ou la variable tlevSTD est bien definie (.NE. missing_val),16 c ou la variable tlevSTD est bien definie (.NE.1.E+20), 17 17 c et 18 18 c * de la somme de tlevSTD => tsumSTD … … 33 33 cym#include "dimphy.h" 34 34 c variables Input 35 c 35 36 INTEGER nlevSTD, klevSTD, itap 36 37 PARAMETER(klevSTD=17) -
LMDZ4/trunk/libf/phylmd/write_histrac.h
r1146 r1279 1 !$Id $ 2 !*************************************** 3 ! ECRITURE DU FICHIER : histrac.nc 4 !*************************************** 5 IF (ecrit_tra > 0. .AND. config_inca == 'none') THEN 6 7 itau_w = itau_phy + nstep 8 9 CALL histwrite_phy(nid_tra,"phis",itau_w,pphis) 10 CALL histwrite_phy(nid_tra,"aire",itau_w,airephy) 11 12 !TRACEURS 13 !---------------- 14 DO it=1,nbtr 15 iiq=niadv(it+2) 16 17 ! CONCENTRATIONS 18 CALL histwrite_phy(nid_tra,tname(iiq),itau_w,tr_seri(:,:,it)) 19 20 ! TD LESSIVAGE 21 IF (lessivage .AND. aerosol(it)) THEN 22 CALL histwrite_phy(nid_tra,"fl"//tname(iiq),itau_w,flestottr(:,:,it)) 23 ENDIF 24 25 ! TD THERMIQUES 26 IF (iflag_thermals.gt.0) THEN 27 CALL histwrite_phy(nid_tra,"d_tr_th_"//tname(iiq),itau_w,d_tr_th(:,:,it)) 28 ENDIF 29 30 ! TD CONVECTION 31 IF (iflag_con.GE.2) THEN 32 CALL histwrite_phy(nid_tra,"d_tr_cv_"//tname(iiq),itau_w,d_tr_cv(:,:,it)) 33 ENDIF 34 35 ! TD COUCHE-LIMITE 36 CALL histwrite_phy(nid_tra,"d_tr_cl_"//tname(iiq),itau_w,d_tr_cl(:,:,it)) 37 ENDDO 38 !--------------- 1 39 ! 2 ! $Header$3 40 ! 41 ! VENT (niveau 1) 42 CALL histwrite_phy(nid_tra,"pyu1",itau_w,yu1) 43 CALL histwrite_phy(nid_tra,"pyv1",itau_w,yv1) 44 ! 45 ! TEMPERATURE DU SOL 46 zx_tmp_fi2d(:)=ftsol(:,1) 47 CALL histwrite_phy(nid_tra,"ftsol1",itau_w,zx_tmp_fi2d) 48 zx_tmp_fi2d(:)=ftsol(:,2) 49 CALL histwrite_phy(nid_tra,"ftsol2",itau_w,zx_tmp_fi2d) 50 zx_tmp_fi2d(:)=ftsol(:,3) 51 CALL histwrite_phy(nid_tra,"ftsol3",itau_w,zx_tmp_fi2d) 52 zx_tmp_fi2d(:)=ftsol(:,4) 53 CALL histwrite_phy(nid_tra,"ftsol4",itau_w,zx_tmp_fi2d) 54 ! 55 ! NATURE DU SOL 56 zx_tmp_fi2d(:)=pctsrf(:,1) 57 CALL histwrite_phy(nid_tra,"psrf1",itau_w,zx_tmp_fi2d) 58 zx_tmp_fi2d(:)=pctsrf(:,2) 59 CALL histwrite_phy(nid_tra,"psrf2",itau_w,zx_tmp_fi2d) 60 zx_tmp_fi2d(:)=pctsrf(:,3) 61 CALL histwrite_phy(nid_tra,"psrf3",itau_w,zx_tmp_fi2d) 62 zx_tmp_fi2d(:)=pctsrf(:,4) 63 CALL histwrite_phy(nid_tra,"psrf4",itau_w,zx_tmp_fi2d) 64 65 ! DIVERS 66 CALL histwrite_phy(nid_tra,"pplay",itau_w,pplay) 67 CALL histwrite_phy(nid_tra,"t",itau_w,t_seri) 68 CALL histwrite_phy(nid_tra,"mfu",itau_w,pmfu) 69 CALL histwrite_phy(nid_tra,"mfd",itau_w,pmfd) 70 CALL histwrite_phy(nid_tra,"en_u",itau_w,pen_u) 71 CALL histwrite_phy(nid_tra,"en_d",itau_w,pen_d) 72 CALL histwrite_phy(nid_tra,"de_d",itau_w,pde_d) 73 CALL histwrite_phy(nid_tra,"de_u",itau_w,pde_u) 74 CALL histwrite_phy(nid_tra,"coefh",itau_w,coefh) 4 75 5 IF (ecrit_tra>0. .AND. config_inca == 'none') THEN 6 ndex = 0 7 ndex2d = 0 8 ndex3d = 0 9 c 10 itau_w = itau_phy + nstep 76 IF (ok_sync) THEN 77 !$OMP MASTER 78 CALL histsync(nid_tra) 79 !$OMP END MASTER 80 ENDIF 11 81 12 CALL histwrite_phy(nid_tra,"phis",itau_w,pphis) 13 C 14 CALL histwrite_phy(nid_tra,"aire",itau_w,airephy) 82 ENDIF !ecrit_tra>0. .AND. config_inca == 'none' 15 83 16 DO it=1,nbtr17 iiq=niadv(it+2)18 19 CALL histwrite_phy(nid_tra,tname(iiq),itau_w,tr_seri(:,:,it))20 if (lessivage) THEN21 CALL histwrite_phy(nid_tra,"fl"//tname(iiq),itau_w,22 . flestottr(:,:,it))23 endif24 25 c----Olivia26 CALL histwrite_phy(nid_tra,"d_tr_th_"//tname(iiq),itau_w,27 . d_tr_th(:,:,it))28 29 if(iflag_con.GE.2) then30 CALL histwrite_phy(nid_tra,"d_tr_cv_"//tname(iiq),itau_w,31 . d_tr_cv(:,:,it))32 endif !(iflag_con.GE.2) then33 CALL histwrite_phy(nid_tra,"d_tr_cl_"//tname(iiq),itau_w,34 . d_tr_cl(:,:,it))35 c---fin Olivia36 37 ENDDO38 39 40 C abder41 CALL histwrite_phy(nid_tra,"pyu1",itau_w,yu1)42 43 CALL histwrite_phy(nid_tra,"pyv1",itau_w,yv1)44 45 CALL histwrite_phy(nid_tra,"ftsol1",itau_w,pftsol1)46 47 CALL histwrite_phy(nid_tra,"ftsol2",itau_w,pftsol2)48 49 CALL histwrite_phy(nid_tra,"ftsol3",itau_w,pftsol3)50 51 CALL histwrite_phy(nid_tra,"ftsol4",itau_w,pftsol4)52 53 CALL histwrite_phy(nid_tra,"psrf1",itau_w,ppsrf1)54 55 CALL histwrite_phy(nid_tra,"psrf2",itau_w,ppsrf2)56 57 CALL histwrite_phy(nid_tra,"psrf3",itau_w,ppsrf3)58 59 CALL histwrite_phy(nid_tra,"psrf4",itau_w,ppsrf4)60 CALL histwrite_phy(nid_tra,"pplay",itau_w,pplay)61 62 CALL histwrite_phy(nid_tra,"t",itau_w,t_seri)63 CALL histwrite_phy(nid_tra,"mfu",itau_w,pmfu)64 CALL histwrite_phy(nid_tra,"mfd",itau_w,pmfd)65 CALL histwrite_phy(nid_tra,"en_u",itau_w,pen_u)66 CALL histwrite_phy(nid_tra,"en_d",itau_w,pen_d)67 CALL histwrite_phy(nid_tra,"de_d",itau_w,pde_d)68 CALL histwrite_phy(nid_tra,"de_u",itau_w,pde_u)69 CALL histwrite_phy(nid_tra,"coefh",itau_w,coefh)70 71 72 c abder73 74 if (ok_sync) then75 c$OMP MASTER76 call histsync(nid_tra)77 c$OMP END MASTER78 endif79 80 END IF !ecrit_tra>0. .AND. config_inca == 'none'81 82 83
Note: See TracChangeset
for help on using the changeset viewer.