Changeset 4143
- Timestamp:
- May 9, 2022, 12:35:40 PM (2 years ago)
- Location:
- LMDZ6/trunk/libf
- Files:
-
- 62 edited
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/dyn3d/advtrac.F90
r4064 r4143 11 11 ! M.A Filiberti (04/2002) 12 12 ! 13 USE infotrac, ONLY: nqtot, tracers, ok_iso_verif13 USE infotrac, ONLY: nqtot, tracers, isoCheck 14 14 USE control_mod, ONLY: iapp_tracvl, day_step 15 15 USE comconst_mod, ONLY: dtvr … … 215 215 #endif 216 216 217 IF(ok_iso_verif) THEN 218 WRITE(*,*) 'advtrac 227' 219 CALL check_isotopes_seq(q,ip1jmp1,'advtrac 162') 220 END IF 217 IF(isoCheck) WRITE(*,*) 'advtrac 227' 218 CALL check_isotopes_seq(q,ip1jmp1,'advtrac 162') 221 219 222 220 !------------------------------------------------------------------------- … … 346 344 END DO 347 345 348 IF(ok_iso_verif) then 349 WRITE(*,*) 'advtrac 402' 350 CALL check_isotopes_seq(q,ip1jmp1,'advtrac 397') 351 END IF 346 IF(isoCheck) WRITE(*,*) 'advtrac 402' 347 CALL check_isotopes_seq(q,ip1jmp1,'advtrac 397') 352 348 353 349 !------------------------------------------------------------------------- -
LMDZ6/trunk/libf/dyn3d/check_isotopes.F90
r4142 r4143 1 subroutine check_isotopes_seq(q,ip1jmp1,err_msg) 2 USE infotrac, ONLY: nqtot, nqo, niso, ntraciso, nzone, 3 & use_iso, 4 & iqiso, index_trac,indnum_fn_num, tnat 5 implicit none 1 SUBROUTINE check_isotopes_seq(q, ip1jmp1, err_msg) 2 USE strings_mod, ONLY: maxlen, msg, strIdx, strStack, int2str, real2str 3 USE infotrac, ONLY: nqtot, niso, nphas, isotope, isoCheck, iqIsoPha, isoSelect, & 4 ntiso, iH2O, nzone, tracers, isoName, itZonIso, tnat 5 IMPLICIT NONE 6 include "dimensions.h" 7 REAL, INTENT(INOUT) :: q(ip1jmp1,llm,nqtot) 8 INTEGER, INTENT(IN) :: ip1jmp1 9 CHARACTER(LEN=*), INTENT(IN) :: err_msg !--- Error message to display 10 CHARACTER(LEN=maxlen) :: modname, msg1, nm(2) 11 INTEGER :: ixt, ipha, k, i, iq, iiso, izon, ieau, iqeau, iqpar 12 INTEGER, ALLOCATABLE :: ix(:) 13 REAL :: xtractot, xiiso, deltaD, q1, q2 14 REAL, PARAMETER :: borne = 1e19, & 15 errmax = 1e-8, & !--- Max. absolute error 16 errmaxrel = 1e-3, & !--- Max. relative error 17 qmin = 1e-11, & 18 deltaDmax =1000.0, & 19 deltaDmin =-999.0, & 20 ridicule = 1e-12 21 INTEGER, SAVE :: iso_eau, iso_HDO, iso_O18, & 22 iso_O17, iso_HTO 23 LOGICAL, SAVE :: first=.TRUE. 6 24 7 #include "dimensions.h" 25 modname='check_isotopes' 26 IF(.NOT.isoCheck) RETURN !--- No need to check => finished 27 IF(isoSelect('H2O')) RETURN !--- No H2O isotopes group found 28 IF(niso == 0) RETURN !--- No isotopes => finished 29 IF(first) THEN 30 iso_eau = strIdx(isoName,'H2[16]O') 31 iso_HDO = strIdx(isoName,'H[2]HO') 32 iso_O18 = strIdx(isoName,'H2[18]O') 33 iso_O17 = strIdx(isoName,'H2[17]O') 34 iso_HTO = strIdx(isoName,'H[3]HO') 35 first = .FALSE. 36 END IF 37 CALL msg('31: err_msg='//TRIM(err_msg), modname) 8 38 9 ! inputs 10 integer ip1jmp1 11 real q(ip1jmp1,llm,nqtot) 12 character*(*) err_msg ! message d''erreur à afficher 39 !--- CHECK FOR NaNs (FOR ALL THE ISOTOPES, INCLUDING GEOGRAPHIC TAGGING TRACERS) 40 modname = 'check_isotopes:iso_verif_noNaN' 41 DO ixt = 1, ntiso 42 DO ipha = 1, nphas 43 iq = iqIsoPha(ixt,ipha) 44 DO k = 1, llm 45 DO i = 1, ip1jmp1 46 IF(ABS(q(i,k,iq)) < borne) CYCLE 47 WRITE(msg1,'(s,"(",i0,",",i0,",",i0,") = ",ES12.4)')TRIM(isoName(ixt)),i,k,iq,q(i,k,iq) 48 CALL msg(msg1, modname) 49 CALL abort_gcm(modname, 'Error with isotopes: '//TRIM(err_msg), 1) 50 END DO 51 END DO 52 END DO 53 END DO 13 54 14 ! locals 15 integer ixt,phase,k,i,iq,iiso,izone,ieau,iqeau 16 real xtractot,xiiso 17 real borne 18 real qmin 19 real errmax ! erreur maximale en absolu. 20 real errmaxrel ! erreur maximale en relatif autorisée 21 real deltaDmax,deltaDmin 22 real ridicule 23 parameter (borne=1e19) 24 parameter (errmax=1e-8) 25 parameter (errmaxrel=1e-3) 26 parameter (qmin=1e-11) 27 parameter (deltaDmax=1000.0,deltaDmin=-999.0) 28 parameter (ridicule=1e-12) 29 real deltaD 55 !--- CHECK CONSERVATION (MAIN ISOTOPE AND PARENT CONCENTRATIONS MUST BE EQUAL) 56 modname = 'check_isotopes:iso_verif_egalite' 57 ixt = iso_eau 58 IF(ixt /= 0) THEN 59 DO ipha = 1, nphas 60 iq = iqIsoPha(ixt,ipha) 61 iqpar = tracers(iq)%iqParent 62 DO k = 1, llm 63 DO i = 1, ip1jmp1 64 q1 = q(i,k,iqpar) 65 q2 = q(i,k,iq) 66 !--- IMPROVEMENT in case at least one isotope is not negligible compared to the main isotopic form. 67 ! This would be probably required to sum from smallest to highest concentrations ; the corresponding 68 ! indices vector can be computed once only (in the initializations stage), using mean concentrations. 69 ! q2 = SUM(q(i,k,tracers(iqPar)%iqDesc), DIM=3) 70 IF(ABS(q1-q2) <= errmax .OR. ABS(q1-q2)/MAX(MAX(ABS(q1),ABS(q2)),1e-18) <= errmaxrel) THEN 71 q(i,k,iq) = q1 !--- Bidouille pour convergence 72 ! q(i,k,tracers(iqPar)%iqDesc) = q(i,k,tracers(iqPar)%iqDesc) * q1 / q2 73 CYCLE 74 END IF 75 CALL msg('ixt, iq = '//TRIM(strStack(int2str([ixt,iq]))), modname) 76 msg1 = '('//TRIM(strStack(int2str([i,k])))//')' 77 CALL msg(TRIM(tracers(iqpar)%name)//TRIM(msg1)//' = '//TRIM(real2str(q1)), modname) 78 CALL msg(TRIM(tracers(iq )%name)//TRIM(msg1)//' = '//TRIM(real2str(q2)), modname) 79 CALL abort_gcm(modname, 'Error with isotopes: '//TRIM(err_msg), 1) 80 END DO 81 END DO 82 END DO 83 END IF 30 84 31 if (niso > 0) then 85 !--- CHECK DELTA ANOMALIES 86 modname = 'check_isotopes:iso_verif_aberrant' 87 ix = [ iso_HDO , iso_O18 ] 88 nm = ['deltaD ', 'deltaO18'] 89 DO iiso = 1, SIZE(ix) 90 ixt = ix(iiso) 91 IF(ixt == 0) CYCLE 92 DO ipha = 1, nphas 93 iq = iqIsoPha(ixt,ipha) 94 iqpar = tracers(iq)%iqParent 95 DO k = 1, llm 96 DO i = 1, ip1jmp1 97 q1 = q(i,k,iqpar) 98 q2 = q(i,k,iq) 99 !--- IMPROVEMENT in case at least one isotope is not negligible compared to the main isotopic form. 100 ! This would be probably required to sum from smallest to highest concentrations ; the corresponding 101 ! indices vector can be computed once only (in the initializations stage), using mean concentrations. 102 ! q2 = SUM(q(i,k,tracers(iqPar)%iqDesc), DIM=3) 103 IF(q2 <= qmin) CYCLE 104 deltaD = (q2/q1/tnat(ixt)-1.)*1000. 105 IF(deltaD <= deltaDmax .AND. deltaD >= deltaDmin) CYCLE 106 CALL msg('ixt, iq = '//TRIM(strStack(int2str([ixt,iq]))), modname) 107 msg1 = '('//TRIM(strStack(int2str([i,k])))//')' 108 CALL msg(TRIM(tracers(iqpar)%name)//TRIM(msg1)//' = '//TRIM(real2str(q1)), modname) 109 CALL msg(TRIM(tracers(iq )%name)//TRIM(msg1)//' = '//TRIM(real2str(q2)), modname) 110 CALL msg(TRIM(nm(iiso))//TRIM(real2str(deltaD)), modname) 111 CALL abort_gcm(modname, 'Error with isotopes: '//TRIM(err_msg), 1) 112 END DO 113 END DO 114 END DO 115 END DO 32 116 33 write(*,*) 'check_isotopes 31: err_msg=',err_msg 34 ! verifier que rien n'est NaN 35 do ixt=1,ntraciso 36 do phase=1,nqo 37 iq=iqiso(ixt,phase) 38 do k=1,llm 39 DO i = 1,ip1jmp1 40 if ((q(i,k,iq).gt.-borne).and. 41 : (q(i,k,iq).lt.borne)) then 42 else !if ((x(ixt,i,j).gt.-borne).and. 43 write(*,*) 'erreur detectee par iso_verif_noNaN:' 44 write(*,*) err_msg 45 write(*,*) 'q,i,k,iq=',q(i,k,iq),i,k,iq 46 write(*,*) 'borne=',borne 47 call abort_gcm('check_isotopes_loc','plantage iso',0) 48 endif !if ((x(ixt,i,j).gt.-borne).and. 49 enddo !DO i = 1,ip1jmp1 50 enddo !do k=1,llm 51 enddo !do phase=1,nqo 52 enddo !do ixt=1,ntraciso 117 IF(nzone == 0) RETURN 53 118 54 !write(*,*) 'check_isotopes 52' 55 ! verifier que l'eau normale est OK 56 if (use_iso(1)) then 57 ixt=indnum_fn_num(1) 58 do phase=1,nqo 59 iq=iqiso(ixt,phase) 60 do k=1,llm 61 DO i = 1,ip1jmp1 62 if ((abs(q(i,k,phase)-q(i,k,iq)).gt.errmax).and. 63 : (abs((q(i,k,phase)-q(i,k,iq))/ 64 : max(max(abs(q(i,k,phase)),abs(q(i,k,iq))),1e-18)) 65 : .gt.errmaxrel)) then 66 write(*,*) 'erreur detectee par iso_verif_egalite:' 67 write(*,*) err_msg 68 write(*,*) 'ixt,phase=',ixt,phase 69 write(*,*) 'q,iq,i,k=',q(i,k,iq),iq,i,k 70 write(*,*) 'q(i,k,phase)=',q(i,k,phase) 71 call abort_gcm('check_isotopes_loc','plantage iso',0) 72 endif !if ((abs(q(i,k,phase)-q(i,k,iq)).gt.errmax).and. 73 ! bidouille pour éviter divergence: 74 q(i,k,iq)= q(i,k,phase) 75 enddo ! DO i = 1,ip1jmp1 76 enddo !do k=1,llm 77 enddo ! do phase=1,nqo 78 endif !if (use_iso(1)) then 79 80 !write(*,*) 'check_isotopes 78' 81 ! verifier que HDO est raisonable 82 if (use_iso(2)) then 83 ixt=indnum_fn_num(2) 84 do phase=1,nqo 85 iq=iqiso(ixt,phase) 86 do k=1,llm 87 DO i = 1,ip1jmp1 88 if (q(i,k,iq).gt.qmin) then 89 deltaD=(q(i,k,iq)/q(i,k,phase)/tnat(2)-1)*1000 90 if ((deltaD.gt.deltaDmax).or.(deltaD.lt.deltaDmin)) then 91 write(*,*) 'erreur detectee par iso_verif_aberrant:' 92 write(*,*) err_msg 93 write(*,*) 'ixt,phase=',ixt,phase 94 write(*,*) 'q,iq,i,k,=',q(i,k,iq),iq,i,k 95 write(*,*) 'q=',q(i,k,:) 96 write(*,*) 'deltaD=',deltaD 97 call abort_gcm('check_isotopes_loc','plantage iso',0) 98 endif !if ((deltaD.gt.deltaDmax).or.(deltaD.lt.deltaDmin)) then 99 endif !if (q(i,k,iq).gt.qmin) then 100 enddo !DO i = 1,ip1jmp1 101 enddo !do k=1,llm 102 enddo ! do phase=1,nqo 103 endif !if (use_iso(2)) then 119 !--- CHECK FOR TAGGING TRACERS DELTAD ANOMALIES 120 modname = 'check_isotopes:iso_verif_aberrant' 121 IF(iso_eau /= 0 .AND. iso_HDO /= 0) THEN 122 DO izon = 1, nzone 123 ixt = itZonIso(izon, iso_HDO) 124 ieau = itZonIso(izon, iso_eau) 125 DO ipha = 1, nphas 126 iq = iqIsoPha(ixt, ipha) 127 iqeau = iqIsoPha(ieau, ipha) 128 DO k = 1, llm 129 DO i = 1, ip1jmp1 130 q1 = q(i,k,iqeau) 131 q2 = q(i,k,iq) 132 IF(q2<=qmin) CYCLE 133 deltaD = (q2/q1/tnat(iso_HDO)-1.)*1000. 134 IF(deltaD <= deltaDmax .AND. deltaD >= deltaDmin) CYCLE 135 CALL msg('izon, ipha = '//TRIM(strStack(int2str([izon, ipha]))), modname) 136 CALL msg( 'ixt, ieau = '//TRIM(strStack(int2str([ ixt, ieau]))), modname) 137 msg1 = '('//TRIM(strStack(int2str([i,k])))//')' 138 CALL msg(TRIM(tracers(iqeau)%name)//TRIM(msg1)//' = '//TRIM(real2str(q1)), modname) 139 CALL msg(TRIM(tracers(iq )%name)//TRIM(msg1)//' = '//TRIM(real2str(q2)), modname) 140 CALL msg('deltaD = '//TRIM(real2str(deltaD)), modname) 141 CALL abort_gcm(modname, 'Error with isotopes: '//TRIM(err_msg), 1) 142 END DO 143 END DO 144 END DO 145 END DO 146 END IF 104 147 105 !write(*,*) 'check_isotopes 103' 106 ! verifier que O18 est raisonable 107 if (use_iso(3)) then 108 ixt=indnum_fn_num(3) 109 do phase=1,nqo 110 iq=iqiso(ixt,phase) 111 do k=1,llm 112 DO i = 1,ip1jmp1 113 if (q(i,k,iq).gt.qmin) then 114 deltaD=(q(i,k,iq)/q(i,k,phase)/tnat(3)-1)*1000 115 if ((deltaD.gt.deltaDmax).or.(deltaD.lt.deltaDmin)) then 116 write(*,*) 'erreur detectee iso_verif_aberrant O18:' 117 write(*,*) err_msg 118 write(*,*) 'ixt,phase=',ixt,phase 119 write(*,*) 'q,iq,i,k,=',q(i,k,phase),iq,i,k 120 write(*,*) 'xt=',q(i,k,:) 121 write(*,*) 'deltaO18=',deltaD 122 call abort_gcm('check_isotopes_loc','plantage iso',0) 123 endif !if ((deltaD.gt.deltaDmax).or.(deltaD.lt.deltaDmin)) then 124 endif !if (q(i,k,iq).gt.qmin) then 125 enddo !DO i = 1,ip1jmp1 126 enddo !do k=1,llm 127 enddo ! do phase=1,nqo 128 endif !if (use_iso(2)) then 148 !--- CHECK FOR TAGGING TRACERS CONSERVATION (PARENT AND TAGGING TRACERS SUM OVER ALL REGIONS MUST BE EQUAL) 149 DO iiso = 1, niso 150 DO ipha = 1, nphas 151 iq = iqIsoPha(iiso, ipha) 152 DO k = 1, llm 153 DO i = 1, ip1jmp1 154 xiiso = q(i,k,iq) 155 xtractot = SUM(q(i, k, iqIsoPha(itZonIso(1:nzone,iiso), ipha))) 156 IF(ABS(xtractot-xiiso) > errmax .AND. ABS(xtractot-xiiso)/MAX(MAX(ABS(xtractot),ABS(xiiso)),1e-18) > errmaxrel) THEN 157 CALL msg('Error in iso_verif_aberrant trac: '//TRIM(err_msg)) 158 CALL msg('iiso, ipha = '//TRIM(strStack(int2str([iiso, ipha]))), modname) 159 CALL msg('q('//TRIM(strStack(int2str([i,k])))//',:) = '//TRIM(strStack(real2str(q(i,k,:)))), modname) 160 CALL abort_gcm(modname, 'Error with isotopes: '//TRIM(err_msg), 1) 161 END IF 162 IF(ABS(xtractot) <= ridicule) CYCLE 163 DO izon = 1, nzone 164 q(i,k,iq) = q(i,k,iq) / xtractot * xiiso !--- Bidouille pour convergence 165 END DO 166 END DO 167 END DO 168 END DO 169 END DO 129 170 171 END SUBROUTINE check_isotopes_seq 130 172 131 !write(*,*) 'check_isotopes 129'132 if (nzone > 0) then133 134 if (use_iso(2).and.use_iso(1)) then135 do izone=1,nzone136 ixt=index_trac(izone,indnum_fn_num(2))137 ieau=index_trac(izone,indnum_fn_num(1))138 do phase=1,nqo139 iq=iqiso(ixt,phase)140 iqeau=iqiso(ieau,phase)141 do k=1,llm142 DO i = 1,ip1jmp1143 if (q(i,k,iq).gt.qmin) then144 deltaD=(q(i,k,iq)/q(i,k,iqeau)/tnat(2)-1)*1000145 if ((deltaD.gt.deltaDmax).or.146 & (deltaD.lt.deltaDmin)) then147 write(*,*) 'erreur dans iso_verif_aberrant trac:'148 write(*,*) err_msg149 write(*,*) 'izone,phase=',izone,phase150 write(*,*) 'ixt,ieau=',ixt,ieau151 write(*,*) 'q,iq,i,k,=',q(i,k,iq),iq,i,k152 write(*,*) 'deltaD=',deltaD153 call abort_gcm('check_isotopes_loc','plantage iso',0)154 endif !if ((deltaD.gt.deltaDmax).or.155 endif !if (q(i,k,iq).gt.qmin) then156 enddo !DO i = 1,ip1jmp1157 enddo ! do k=1,llm158 enddo ! do phase=1,nqo159 enddo !do izone=1,nzone160 endif !if (use_iso(2).and.use_iso(1)) then161 162 do iiso=1,niso163 do phase=1,nqo164 iq=iqiso(iiso,phase)165 do k=1,llm166 DO i = 1,ip1jmp1167 xtractot=0.0168 xiiso=q(i,k,iq)169 do izone=1,nzone170 iq=iqiso(index_trac(izone,iiso),phase)171 xtractot=xtractot+ q(i,k,iq)172 enddo !do izone=1,ntraceurs_zone173 if ((abs(xtractot-xiiso).gt.errmax).and.174 : (abs(xtractot-xiiso)/175 : max(max(abs(xtractot),abs(xiiso)),1e-18)176 : .gt.errmaxrel)) then177 write(*,*) 'erreur detectee par iso_verif_traceurs:'178 write(*,*) err_msg179 write(*,*) 'iiso,phase=',iiso,phase180 write(*,*) 'i,k,=',i,k181 write(*,*) 'q(i,k,:)=',q(i,k,:)182 call abort_gcm('check_isotopes_loc','plantage iso',0)183 endif !if ((abs(q(i,k,phase)-q(i,k,iq)).gt.errmax).and.184 185 ! bidouille pour éviter divergence:186 if (abs(xtractot).gt.ridicule) then187 do izone=1,nzone188 ixt=index_trac(izone,iiso)189 q(i,k,iq)=q(i,k,iq)/xtractot*xiiso190 enddo !do izone=1,nzone191 endif !if ((abs(xtractot).gt.ridicule) then192 enddo !DO i = 1,ip1jmp1193 enddo !do k=1,llm194 enddo !do phase=1,nqo195 enddo !do iiso=1,niso196 197 endif !if (nzone > 0)198 199 endif ! if (niso > 0)200 !write(*,*) 'check_isotopes 198'201 202 end203 -
LMDZ6/trunk/libf/dyn3d/dynetat0.F90
r4124 r4143 6 6 ! Purpose: Initial state reading. 7 7 !------------------------------------------------------------------------------- 8 USE infotrac, ONLY: nqtot, tracers, niso, iq iso, iso_indnum, iso_num, tnat, alpha_ideal, iH2O8 USE infotrac, ONLY: nqtot, tracers, niso, iqIsoPha, tnat, alpha_ideal, iH2O 9 9 USE strings_mod, ONLY: maxlen, msg, strStack, real2str 10 10 USE netcdf, ONLY: NF90_OPEN, NF90_NOWRITE, NF90_INQ_VARID, & … … 145 145 #endif 146 146 ELSE IF(tracers(iq)%iso_iGroup == iH2O .AND. niso > 0) THEN !=== WATER ISOTOPES 147 ! iName = tracers(iq)%iso_iName ! (next commit) 148 iName = iso_num(iq) 147 iName = tracers(iq)%iso_iName 149 148 iPhase = tracers(iq)%iso_iPhase 150 149 iqParent = tracers(iq)%iqParent … … 154 153 ELSE 155 154 CALL msg('Tracer <'//TRIM(var)//'> is missing => initialized to its parent isotope concentration.', modname) 156 q(:,:,:,iq) = q(:,:,:,iq iso(iso_indnum(iq),iPhase))155 q(:,:,:,iq) = q(:,:,:,iqIsoPha(iName,iPhase)) 157 156 END IF 158 157 !-------------------------------------------------------------------------------------------------------------------------- -
LMDZ6/trunk/libf/dyn3d/iniacademic.F90
r4124 r4143 5 5 6 6 USE filtreg_mod, ONLY: inifilr 7 USE infotrac, ONLY: nqtot, niso, niso_possibles, ok_iso_verif, tnat, alpha_ideal, & 8 iqiso, tracers, iso_indnum, iso_num 7 USE infotrac, ONLY: nqtot, niso, tnat, alpha_ideal, iqIsoPha, tracers 9 8 USE control_mod, ONLY: day_step,planet_type 10 9 use exner_hyb_m, only: exner_hyb … … 282 281 ! CRisi: init des isotopes 283 282 ! distill de Rayleigh très simplifiée 284 ! iName = tracers(iq)%iso_iName ! (next commit) 285 iName = iso_num(iq) 283 iName = tracers(iq)%iso_iName 286 284 if (niso <= 0 .OR. iName <= 0) CYCLE 287 285 iPhase = tracers(iq)%iso_iPhase … … 290 288 q(:,:,iq) = q(:,:,iqParent)*tnat(iName)*(q(:,:,iqParent)/30.e-3)**(alpha_ideal(iName)-1.) 291 289 ELSE 292 q(:,:,iq) = q(:,:,iq iso(iso_indnum(iq),iPhase))290 q(:,:,iq) = q(:,:,iqIsoPha(iName,iPhase)) 293 291 END IF 294 292 enddo … … 297 295 endif ! of if (planet_type=="earth") 298 296 299 if (ok_iso_verif)call check_isotopes_seq(q,1,ip1jmp1,'iniacademic_loc')297 call check_isotopes_seq(q,1,ip1jmp1,'iniacademic_loc') 300 298 301 299 ! add random perturbation to temperature -
LMDZ6/trunk/libf/dyn3d/leapfrog.F
r4120 r4143 11 11 use IOIPSL 12 12 #endif 13 USE infotrac, ONLY: nqtot, ok_iso_verif13 USE infotrac, ONLY: nqtot, isoCheck 14 14 USE guide_mod, ONLY : guide_main 15 15 USE write_field, ONLY: writefield … … 26 26 USE temps_mod, ONLY: jD_ref,jH_ref,itaufin,day_ini,day_ref, 27 27 & start_time,dt 28 USE strings_mod, ONLY: msg 28 29 29 30 IMPLICIT NONE … … 237 238 jH_cur = jH_cur - int(jH_cur) 238 239 239 if (ok_iso_verif) then 240 call check_isotopes_seq(q,ip1jmp1,'leapfrog 321') 241 endif !if (ok_iso_verif) then 240 call check_isotopes_seq(q,ip1jmp1,'leapfrog 321') 242 241 243 242 #ifdef CPP_IOIPSL … … 271 270 ! CALL filtreg ( finvmaold ,jjp1, llm, -2,2, .TRUE., 1 ) 272 271 273 if (ok_iso_verif) then 274 call check_isotopes_seq(q,ip1jmp1,'leapfrog 400') 275 endif !if (ok_iso_verif) then 272 call check_isotopes_seq(q,ip1jmp1,'leapfrog 400') 276 273 277 274 2 CONTINUE ! Matsuno backward or leapfrog step begins here … … 324 321 325 322 326 if (ok_iso_verif) then 327 call check_isotopes_seq(q,ip1jmp1,'leapfrog 589') 328 endif !if (ok_iso_verif) then 323 call check_isotopes_seq(q,ip1jmp1,'leapfrog 589') 329 324 330 325 c----------------------------------------------------------------------- … … 345 340 c ------------------------------------------------------------- 346 341 347 if (ok_iso_verif) then 348 call check_isotopes_seq(q,ip1jmp1, 342 call check_isotopes_seq(q,ip1jmp1, 349 343 & 'leapfrog 686: avant caladvtrac') 350 endif !if (ok_iso_verif) then351 344 352 345 IF( forward. OR . leapf ) THEN … … 376 369 c ---------------------------------- 377 370 378 if (ok_iso_verif) then 379 write(*,*) 'leapfrog 720' 380 call check_isotopes_seq(q,ip1jmp1,'leapfrog 756') 381 endif !if (ok_iso_verif) then 371 CALL msg('720', modname, isoCheck) 372 call check_isotopes_seq(q,ip1jmp1,'leapfrog 756') 382 373 383 374 CALL integrd ( nqtot,vcovm1,ucovm1,tetam1,psm1,massem1 , … … 385 376 ! $ finvmaold ) 386 377 387 if (ok_iso_verif) then 388 write(*,*) 'leapfrog 724' 389 call check_isotopes_seq(q,ip1jmp1,'leapfrog 762') 390 endif !if (ok_iso_verif) then 378 CALL msg('724', modname, isoCheck) 379 call check_isotopes_seq(q,ip1jmp1,'leapfrog 762') 391 380 392 381 c .P.Le Van (26/04/94 ajout de finvpold dans l'appel d'integrd) … … 552 541 CALL massdair(p,masse) 553 542 554 if (ok_iso_verif) then 555 call check_isotopes_seq(q,ip1jmp1,'leapfrog 1196') 556 endif !if (ok_iso_verif) then 543 call check_isotopes_seq(q,ip1jmp1,'leapfrog 1196') 557 544 558 545 c----------------------------------------------------------------------- … … 639 626 c preparation du pas d'integration suivant ...... 640 627 641 if (ok_iso_verif) then 642 call check_isotopes_seq(q,ip1jmp1,'leapfrog 1509') 643 endif !if (ok_iso_verif) then 628 call check_isotopes_seq(q,ip1jmp1,'leapfrog 1509') 644 629 645 630 IF ( .NOT.purmats ) THEN … … 703 688 ENDIF ! of IF((MOD(itau,iperiod).EQ.0).OR.(itau.EQ.itaufin)) 704 689 705 if (ok_iso_verif) then 706 call check_isotopes_seq(q,ip1jmp1,'leapfrog 1584') 707 endif !if (ok_iso_verif) then 690 call check_isotopes_seq(q,ip1jmp1,'leapfrog 1584') 708 691 709 692 c----------------------------------------------------------------------- … … 790 773 ELSE ! of IF (.not.purmats) 791 774 792 if (ok_iso_verif) then 793 call check_isotopes_seq(q,ip1jmp1,'leapfrog 1664') 794 endif !if (ok_iso_verif) then 775 call check_isotopes_seq(q,ip1jmp1,'leapfrog 1664') 795 776 796 777 c ........................................................ … … 817 798 ELSE ! of IF(forward) i.e. backward step 818 799 819 if (ok_iso_verif) then 820 call check_isotopes_seq(q,ip1jmp1,'leapfrog 1698') 821 endif !if (ok_iso_verif) then 800 call check_isotopes_seq(q,ip1jmp1,'leapfrog 1698') 822 801 823 802 IF(MOD(itau,iperiod).EQ.0 .OR. itau.EQ.itaufin) THEN -
LMDZ6/trunk/libf/dyn3d/qminimum.F
r4124 r4143 4 4 SUBROUTINE qminimum( q,nqtot,deltap ) 5 5 6 USE infotrac, ONLY: niso, ntraciso,iqiso,ok_iso_verif 6 USE infotrac, ONLY: niso, ntiso,iqIsoPha, tracers 7 USE strings_mod, ONLY: strIdx 8 USE readTracFiles_mod, ONLY: addPhase 7 9 IMPLICIT none 8 10 c … … 16 18 REAL q(ip1jmp1,llm,nqtot), deltap(ip1jmp1,llm) 17 19 c 18 INTEGER iq_vap, iq_liq 19 PARAMETER ( iq_vap = 1 ) ! indice pour l'eau vapeur 20 PARAMETER ( iq_liq = 2 ) ! indice pour l'eau liquide 21 REAL seuil_vap, seuil_liq 22 PARAMETER ( seuil_vap = 1.0e-10 ) ! seuil pour l'eau vapeur 23 PARAMETER ( seuil_liq = 1.0e-11 ) ! seuil pour l'eau liquide 20 LOGICAL, SAVE :: first=.TRUE. 21 INTEGER, SAVE :: iq_vap, iq_liq ! indices pour l'eau vapeur/liquide 22 REAL, PARAMETER :: seuil_vap = 1.0e-10 ! seuil pour l'eau vapeur 23 REAL, PARAMETER :: seuil_liq = 1.0e-11 ! seuil pour l'eau liquide 24 24 c 25 25 c NB. ....( Il est souhaitable mais non obligatoire que les valeurs des … … 43 43 !INTEGER nb_pump 44 44 INTEGER ixt 45 46 IF(first) THEN 47 iq_vap = strIdx(tracers(:)%name, addPhase('H2O', 'g')) 48 iq_liq = strIdx(tracers(:)%name, addPhase('H2O', 'l')) 49 first = .FALSE. 50 END IF 45 51 c 46 52 c Quand l'eau liquide est trop petite (ou negative), on prend … … 49 55 c 50 56 51 if (ok_iso_verif) then 52 call check_isotopes_seq(q,ip1jmp1,'qminimum 52') 53 endif !if (ok_iso_verif) then 57 call check_isotopes_seq(q,ip1jmp1,'qminimum 52') 54 58 55 59 zx_defau_diag(:,:,:)=0.0 … … 127 131 if (zx_defau_diag(i,k,iq_vap).gt.0.0) then 128 132 ! on ajoute la vapeur en k 129 do ixt=1,nt raciso130 q(i,k,iq iso(ixt,iq_vap))=q(i,k,iqiso(ixt,iq_vap))131 : 132 : *q(i,k-1,iqiso(ixt,iq_vap))/q_follow(i,k-1,iq_vap)133 do ixt=1,ntiso 134 q(i,k,iqIsoPha(ixt,iq_vap))=q(i,k,iqIsoPha(ixt,iq_vap)) 135 : +zx_defau_diag(i,k,iq_vap) 136 : *q(i,k-1,iqIsoPha(ixt,iq_vap))/q_follow(i,k-1,iq_vap) 133 137 134 138 ! et on la retranche en k-1 135 q(i,k-1,iqiso(ixt,iq_vap))=q(i,k-1,iqiso(ixt,iq_vap)) 139 q(i,k-1,iqIsoPha(ixt,iq_vap))= 140 : q(i,k-1,iqIsoPha(ixt,iq_vap)) 136 141 : -zx_defau_diag(i,k,iq_vap) 137 142 : *deltap(i,k)/deltap(i,k-1) 138 : *q(i,k-1,iqiso(ixt,iq_vap))/q_follow(i,k-1,iq_vap) 143 : *q(i,k-1,iqIsoPha(ixt,iq_vap)) 144 : /q_follow(i,k-1,iq_vap) 139 145 140 146 enddo !do ixt=1,niso … … 148 154 enddo !do k=2,llm 149 155 150 if (ok_iso_verif) then 151 call check_isotopes_seq(q,ip1jmp1,'qminimum 168') 152 endif !if (ok_iso_verif) then 156 call check_isotopes_seq(q,ip1jmp1,'qminimum 168') 153 157 154 158 … … 160 164 161 165 ! on ajoute eau liquide en k en k 162 do ixt=1,nt raciso163 q(i,k,iq iso(ixt,iq_liq))=q(i,k,iqiso(ixt,iq_liq))166 do ixt=1,ntiso 167 q(i,k,iqIsoPha(ixt,iq_liq))=q(i,k,iqIsoPha(ixt,iq_liq)) 164 168 : +zx_defau_diag(i,k,iq_liq) 165 : *q(i,k,iq iso(ixt,iq_vap))/q_follow(i,k,iq_vap)169 : *q(i,k,iqIsoPha(ixt,iq_vap))/q_follow(i,k,iq_vap) 166 170 ! et on la retranche à la vapeur en k 167 q(i,k,iq iso(ixt,iq_vap))=q(i,k,iqiso(ixt,iq_vap))171 q(i,k,iqIsoPha(ixt,iq_vap))=q(i,k,iqIsoPha(ixt,iq_vap)) 168 172 : -zx_defau_diag(i,k,iq_liq) 169 : *q(i,k,iq iso(ixt,iq_vap))/q_follow(i,k,iq_vap)173 : *q(i,k,iqIsoPha(ixt,iq_vap))/q_follow(i,k,iq_vap) 170 174 enddo !do ixt=1,niso 171 175 q_follow(i,k,iq_liq)= q_follow(i,k,iq_liq) … … 177 181 enddo !do k=2,llm 178 182 179 if (ok_iso_verif) then 180 call check_isotopes_seq(q,ip1jmp1,'qminimum 197') 181 endif !if (ok_iso_verif) then 183 call check_isotopes_seq(q,ip1jmp1,'qminimum 197') 182 184 183 185 endif !if (niso > 0) then -
LMDZ6/trunk/libf/dyn3d/vlsplt.F
r4064 r4143 125 125 RECURSIVE SUBROUTINE vlx(q,pente_max,masse,u_m,iq) 126 126 USE infotrac, ONLY : nqtot,tracers, ! CRisi 127 & qperemin,masseqmin,ratiomin! MVals et CRisi127 & min_qParent,min_qMass,min_ratio ! MVals et CRisi 128 128 129 129 c Auteurs: P.Le Van, F.Hourdin, F.Forget … … 428 428 !Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq) 429 429 !Mvals: veiller a ce qu'on n'ait pas de denominateur nul 430 masseq(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),m asseqmin)431 if (q(ij,l,iq).gt. qperemin) then430 masseq(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),min_qMass) 431 if (q(ij,l,iq).gt.min_qParent) then 432 432 Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq) 433 433 else 434 Ratio(ij,l,iq2)= ratiomin434 Ratio(ij,l,iq2)=min_ratio 435 435 endif 436 436 enddo … … 449 449 DO ij=iip2+1,ip1jm 450 450 !MVals: veiller a ce qu'on ait pas de denominateur nul 451 new_m=max(masse(ij,l,iq)+u_m(ij-1,l)-u_m(ij,l),m asseqmin)451 new_m=max(masse(ij,l,iq)+u_m(ij-1,l)-u_m(ij,l),min_qMass) 452 452 q(ij,l,iq)=(q(ij,l,iq)*masse(ij,l,iq)+ 453 453 & u_mq(ij-1,l)-u_mq(ij,l)) … … 485 485 RECURSIVE SUBROUTINE vly(q,pente_max,masse,masse_adv_v,iq) 486 486 USE infotrac, ONLY : nqtot,tracers, ! CRisi 487 & qperemin,masseqmin,ratiomin! MVals et CRisi487 & min_qParent,min_qMass,min_ratio ! MVals et CRisi 488 488 c 489 489 c Auteurs: P.Le Van, F.Hourdin, F.Forget … … 752 752 !Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq) 753 753 !MVals: veiller a ce qu'on n'ait pas de denominateur nul 754 masseq(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),m asseqmin)755 if (q(ij,l,iq).gt. qperemin) then754 masseq(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),min_qMass) 755 if (q(ij,l,iq).gt.min_qParent) then 756 756 Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq) 757 757 else 758 Ratio(ij,l,iq2)= ratiomin758 Ratio(ij,l,iq2)=min_ratio 759 759 endif 760 760 enddo … … 848 848 RECURSIVE SUBROUTINE vlz(q,pente_max,masse,w,iq) 849 849 USE infotrac, ONLY : nqtot,tracers, ! CRisi 850 & qperemin,masseqmin,ratiomin! MVals et CRisi850 & min_qParent,min_qMass,min_ratio ! MVals et CRisi 851 851 c 852 852 c Auteurs: P.Le Van, F.Hourdin, F.Forget … … 977 977 !Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq) 978 978 !MVals: veiller a ce qu'on n'ait pas de denominateur nul 979 masseq(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),m asseqmin)980 if (q(ij,l,iq).gt. qperemin) then979 masseq(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),min_qMass) 980 if (q(ij,l,iq).gt.min_qParent) then 981 981 Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq) 982 982 else 983 Ratio(ij,l,iq2)= ratiomin983 Ratio(ij,l,iq2)=min_ratio 984 984 endif 985 985 enddo -
LMDZ6/trunk/libf/dyn3d_common/infotrac.F90
r4130 r4143 28 28 PUBLIC :: isoName, isoZone, isoPhas !--- Isotopes and tagging zones names, phases 29 29 PUBLIC :: niso, nzone, nphas, ntiso !--- " " numbers + isotopes & tagging tracers number 30 PUBLIC :: itZonIso , index_trac!--- idx "it" (in "isoName(1:niso)") = function(tagging idx, isotope idx)31 PUBLIC :: iq TraPha, iqiso!--- idx "iq" (in "qx") = function(isotope idx, phase idx) + aliases30 PUBLIC :: itZonIso !--- idx "it" (in "isoName(1:niso)") = function(tagging idx, isotope idx) 31 PUBLIC :: iqIsoPha !--- idx "iq" (in "qx") = function(isotope idx, phase idx) + aliases 32 32 PUBLIC :: isoCheck !--- Run isotopes checking routines 33 33 !=== FOR BOTH TRACERS AND ISOTOPES 34 34 PUBLIC :: getKey !--- Get a key from "tracers" or "isotope" 35 36 !=== OLD QUANTITIES OR ALIASES FOR OLDER NAMES (TO BE REMOVED SOON)37 PUBLIC :: ntraciso, ntraceurs_zone38 PUBLIC :: ok_iso_verif, use_iso39 PUBLIC :: iso_num, iso_indnum, indnum_fn_num, niso_possibles40 PUBLIC :: qperemin, masseqmin, ratiomin41 35 42 36 INTERFACE isoSelect; MODULE PROCEDURE isoSelectByIndex, isoSelectByName; END INTERFACE isoSelect … … 101 95 ! | zone | nzone | Geographic tagging zones list + number | / | ntraceurs_zone | | 102 96 ! | phase | nphas | Phases list + number | | [g][l][s], 1:3 | 103 ! | iq TraPha | Index in "qx" = f(name(1:ntiso)),phas) | iqiso | 1:nqtot |97 ! | iqIsoPha | Index in "qx" = f(name(1:ntiso)),phas) | iqiso | 1:nqtot | 104 98 ! | itZonIso | Index in "trac(1:ntiso)"= f(zone, name(1:niso)) | index_trac | 1:ntiso | 105 99 ! +-----------------+--------------------------------------------------+--------------------+-----------------+ … … 131 125 nphas, ntiso, & !--- NUMBER OF PHASES AND ISOTOPES + ISOTOPIC TAGGING TRACERS 132 126 itZonIso(:,:), & !--- INDEX IN "isoTrac" AS f(tagging zone idx, isotope idx) 133 iqTraPha(:,:) !--- INDEX IN "qx" AS f(isotopic tracer idx, phase idx) 134 135 !--- Aliases for older names + quantities to be removed soon 136 INTEGER, SAVE, POINTER :: index_trac(:,:) ! numero ixt en fn izone, indnum entre 1 et niso 137 INTEGER, SAVE, POINTER :: iqiso(:,:) ! donne indice iq en fn de (ixt,phase) 138 INTEGER, SAVE, POINTER :: ntraciso, ntraceurs_zone 139 REAL, SAVE :: qperemin, masseqmin, ratiomin 140 INTEGER, SAVE :: niso_possibles 141 LOGICAL, SAVE :: ok_iso_verif 142 LOGICAL, SAVE, ALLOCATABLE :: use_iso(:) 143 INTEGER, SAVE, ALLOCATABLE :: iso_num(:) !--- idx in [1,niso_possibles] = f(1<=iq <=nqtot) 144 INTEGER, SAVE, ALLOCATABLE :: iso_indnum(:) !--- idx in [1,niso] = f(1<=iq <=nqtot) 145 INTEGER, SAVE, ALLOCATABLE :: indnum_fn_num(:) !--- idx in [1,niso] = f(1<=idx<=niso_possibles) 127 iqIsoPha(:,:) !--- INDEX IN "qx" AS f(isotopic tracer idx, phase idx) 146 128 147 129 !=== VARIABLES FOR ISOTOPES INITIALIZATION AND FOR INCA … … 359 341 DEALLOCATE(tnom_0, tnom_transp) 360 342 #ifdef INCA 361 DEALLOCATE(hadv_inca, vadv_inca, solsym_inca)343 DEALLOCATE(hadv_inca, vadv_inca, conv_flg_inca, pbl_flg_inca, solsym_inca) 362 344 #endif 363 345 … … 377 359 nqtrue = nbtr + nqo !--- Total number of "true" tracers 378 360 IF(ALL([2,3] /= nqo)) CALL abort_gcm(modname, 'Only 2 or 3 water phases allowed ; found nqo='//TRIM(int2str(nqo)), 1) 379 ALLOCATE(hadv(nqtrue), conv_flg(nbtr),hadv_inca(nqINCA), conv_flg_inca(nqINCA), solsym_inca(nqINCA))380 ALLOCATE(vadv(nqtrue), pbl_flg(nbtr),vadv_inca(nqINCA), pbl_flg_inca(nqINCA))361 ALLOCATE(hadv(nqtrue), hadv_inca(nqINCA), conv_flg_inca(nqINCA), solsym_inca(nqINCA)) 362 ALLOCATE(vadv(nqtrue), vadv_inca(nqINCA), pbl_flg_inca(nqINCA)) 381 363 CALL init_transport(solsym_inca, conv_flg_inca, pbl_flg_inca, hadv_inca, vadv_inca) 382 !--- Passive CO2 tracer is at position 1 because: H2O has been removed ; nqCO2/=0 in "inco" case only383 conv_flg(1:nbtr) = [(1, k=1, nqCO2), conv_flg_inca]384 pbl_flg(1:nbtr) = [(1, k=1, nqCO2), pbl_flg_inca]385 364 ALLOCATE(ttr(nqtrue)) 386 365 ttr(1:nqo+nqCO2) = tracers … … 407 386 lerr = getKey('hadv', hadv, ky=tracers(:)%keys) 408 387 lerr = getKey('vadv', vadv, ky=tracers(:)%keys) 409 ALLOCATE(conv_flg(nbtr), pbl_flg(nbtr))410 conv_flg(1:nbtr) = [(1, it=1, nbtr)] !--- Convection activated for all tracers411 pbl_flg(1:nbtr) = [(1, it=1, nbtr)] !--- Boundary layer activated for all tracers412 388 !--------------------------------------------------------------------------------------------------------------------------- 413 389 END IF … … 531 507 nbtr = nbtr -nqo* ntiso !--- ISOTOPIC TAGGING TRACERS ARE NOT PASSED TO THE PHYSICS 532 508 nqtottr = nqtot-nqo*(1+ntiso) !--- NO H2O-FAMILY TRACER IS PASSED TO THE PHYSICS 533 534 ALLOCATE(conv_flg(nbtr), pbl_flg(nbtr))535 #ifndef INCA536 conv_flg(1:nbtr) = 1 !--- Convection activated for all tracers537 pbl_flg(1:nbtr) = 1 !--- Boundary layer activated for all tracers538 #else539 !--- Passive CO2 tracer is at position 1 because: H2O has been removed ; nqCO2/=0 in "inco" case only540 conv_flg(1:nbtr) = [(1, ic=1, nqCO2),conv_flg_inca]541 pbl_flg(1:nbtr) = [(1, ic=1, nqCO2), pbl_flg_inca]542 #endif543 509 544 510 ELSE … … 578 544 END IF 579 545 546 !--- Convection / boundary layer activation for all tracers 547 ALLOCATE(conv_flg(nbtr)); conv_flg(1:nbtr) = 1 548 ALLOCATE( pbl_flg(nbtr)); pbl_flg(1:nbtr) = 1 549 580 550 !--- Note: nqtottr can differ from nbtr when nmom/=0 581 551 ! IF(COUNT(tracers%iso_iName == 0) - COUNT(delPhase(tracers%name) == 'H2O' .AND. tracers%component == 'lmdz') /= nqtottr) & 582 552 ! CALL abort_gcm('infotrac_init', 'pb dans le calcul de nqtottr', 1) 583 584 !--- Some aliases to be removed later585 ntraciso => ntiso586 ntraceurs_zone => nzone587 qperemin = min_qParent588 masseqmin = min_qMass589 ratiomin = min_ratio590 iqiso => iqTraPha591 index_trac => itZonIso592 553 593 554 !=== DISPLAY THE RESULTS … … 704 665 USE readTracFiles_mod, ONLY: tnom_iso => newH2OIso 705 666 IMPLICIT NONE 706 INTEGER, ALLOCATABLE :: nb_iso(:), nb_tiso(:), nb_zone(:), ix(:) 667 INTEGER, ALLOCATABLE :: nb_iso(:), nb_tiso(:), nb_zone(:), ix(:), iy(:) 707 668 INTEGER :: ii, ip, iq, it, iz, ixt 708 669 TYPE(isot_type), POINTER :: i … … 765 726 END DO 766 727 767 niso_possibles = SIZE(tnom_iso) 768 ! ix = strIdx(tnom_iso, i%trac) 769 ! tnat = tnat0 (PACK(ix, MASK=ix/=0)) 770 ! alpha_ideal = alpha_ideal0(PACK(ix, MASK=ix/=0)) 771 tnat = tnat0 772 alpha_ideal = alpha_ideal0 728 !--- Get vectors, one value each "isotope%trac" element (and in the same order) 729 ix = strIdx(tnom_iso, i%trac) 730 iy = PACK(ix, MASK = ix/=0) 731 tnat = tnat0 (iy) 732 alpha_ideal = alpha_ideal0(iy) 773 733 774 734 !--- Tests … … 786 746 787 747 !--- Table: index in "qx(:)" of an isotope, knowing its indices "it","ip" in "isotope%iName,%iPhase" 788 i%iq TraPha = RESHAPE([((strIdx(t%name, TRIM(addPhase(i%trac(it),ip,i%phase))),it=1,i%ntiso),ip=1,i%nphas)],[i%ntiso,i%nphas])748 i%iqIsoPha = RESHAPE([((strIdx(t%name, TRIM(addPhase(i%trac(it),ip,i%phase))),it=1,i%ntiso),ip=1,i%nphas)],[i%ntiso,i%nphas]) 789 749 790 750 !--- Table: index in "isotope%tracs(:)%name" of an isotopic tagging tracer, knowing its indices "iz","ip" in "isotope%iZone,%iName" 791 751 i%itZonIso = RESHAPE([((strIdx(i%trac,TRIM(i%trac(it))//'_'//TRIM(i%zone(iz))),iz=1,i%nzone),it=1,i%niso )],[i%nzone,i%niso]) 792 752 793 DO it=1,i%ntiso; CALL msg('iq TraPha('//TRIM(int2str(it))//',:) = '//strStack(int2str(i%iqTraPha(it,:))), modname); END DO753 DO it=1,i%ntiso; CALL msg('iqIsoPha('//TRIM(int2str(it))//',:) = '//strStack(int2str(i%iqIsoPha(it,:))), modname); END DO 794 754 DO iz=1,i%nzone; CALL msg('itZonIso('//TRIM(int2str(iz))//',:) = '//strStack(int2str(i%itZonIso(iz,:))), modname); END DO 795 796 !--- Isotopic quantities (to be removed soon)797 ok_iso_verif = i%check798 niso_possibles = SIZE(tnom_iso)799 iso_num = [(strIdx(tnom_iso(:), strHead(delPhase(tracers(iq)%name), '_')), iq=1, nqtot)]800 iso_indnum = [(strIdx(i%keys(:)%name, strHead(delPhase(tracers(iq)%name), '_')), iq=1, nqtot)]801 indnum_fn_num = [(strIdx(i%keys(:)%name, tnom_iso(ixt)), ixt=1, niso_possibles)]802 use_iso = indnum_fn_num /= 0 !--- .TRUE. for the effectively used isotopes of the possible isotopes list803 755 804 756 !--- Finalize : … … 845 797 isoPhas => isotope%phase; nphas => isotope%nphas 846 798 itZonIso => isotope%itZonIso; isoCheck => isotope%check 847 iq TraPha => isotope%iqTraPha799 iqIsoPha => isotope%iqIsoPha 848 800 END FUNCTION isoSelectByIndex 849 801 !============================================================================================================================== -
LMDZ6/trunk/libf/dyn3dmem/advtrac_loc.F90
r4064 r4143 10 10 ! M.A Filiberti (04/2002) 11 11 ! 12 USE infotrac, ONLY: nqtot, tracers , ok_iso_verif12 USE infotrac, ONLY: nqtot, tracers 13 13 USE control_mod, ONLY: iapp_tracvl, day_step, planet_type 14 14 USE comconst_mod, ONLY: dtvr -
LMDZ6/trunk/libf/dyn3dmem/check_isotopes_loc.F90
r4142 r4143 1 subroutine check_isotopes(q,ijb,ije,err_msg) 2 USE infotrac, ONLY: nqtot, nqo, niso, ntraciso, nzone, 3 & use_iso, ntraceurs_zone, 4 & iqiso, indnum_fn_num, index_trac, tnat 5 USE parallel_lmdz 6 implicit none 1 SUBROUTINE check_isotopes(q, ijb, ije, err_msg) 2 USE parallel_lmdz 3 USE strings_mod, ONLY: maxlen, msg, strIdx, strStack, int2str, real2str 4 USE infotrac, ONLY: nqtot, niso, nphas, isotope, isoCheck, iqIsoPha, isoSelect, & 5 ntiso, iH2O, nzone, tracers, isoName, itZonIso, tnat 6 IMPLICIT NONE 7 include "dimensions.h" 8 REAL, INTENT(INOUT) :: q(ijb_u:ije_u,llm,nqtot) 9 INTEGER, INTENT(IN) :: ijb, ije !--- Can be local and different from ijb_u,ije_u, for example in qminimum 10 CHARACTER(LEN=*), INTENT(IN) :: err_msg !--- Error message to display 11 CHARACTER(LEN=maxlen) :: modname, msg1, nm(2) 12 INTEGER :: ixt, ipha, k, i, iq, iiso, izon, ieau, iqeau, iqpar 13 INTEGER, ALLOCATABLE :: ix(:) 14 REAL :: xtractot, xiiso, deltaD, q1, q2 15 REAL, PARAMETER :: borne = 1e19, & 16 errmax = 1e-8, & !--- Max. absolute error 17 errmaxrel = 1e-3, & !--- Max. relative error 18 qmin = 1e-11, & 19 deltaDmax =1000.0, & 20 deltaDmin =-999.0, & 21 ridicule = 1e-12 22 INTEGER, SAVE :: iso_eau, iso_HDO, iso_O18, & !--- OpenMP shared variables 23 iso_O17, iso_HTO 24 LOGICAL, SAVE :: first=.TRUE. 25 !$OMP THREADPRIVATE(first) 7 26 8 #include "dimensions.h" 27 modname='check_isotopes' 28 IF(.NOT.isoCheck) RETURN !--- No need to check => finished 29 IF(isoSelect('H2O')) RETURN !--- No H2O isotopes group found 30 IF(niso == 0) RETURN !--- No isotopes => finished 31 IF(first) THEN 32 !$OMP MASTER 33 iso_eau = strIdx(isoName,'H2[16]O') 34 iso_HDO = strIdx(isoName,'H[2]HO') 35 iso_O18 = strIdx(isoName,'H2[18]O') 36 iso_O17 = strIdx(isoName,'H2[17]O') 37 iso_HTO = strIdx(isoName,'H[3]HO') 38 !$OMP END MASTER 39 !$OMP BARRIER 40 first = .FALSE. 41 END IF 42 CALL msg('31: err_msg='//TRIM(err_msg), modname) 9 43 10 ! inputs 11 integer ijb,ije ! peut être local et différent de ijb_u,ije_u, ex: dans qminimum 12 real q(ijb_u:ije_u,llm,nqtot) 13 character*(*) err_msg ! message d''erreur à afficher 44 !--- CHECK FOR NaNs (FOR ALL THE ISOTOPES, INCLUDING GEOGRAPHIC TAGGING TRACERS) 45 modname = 'check_isotopes:iso_verif_noNaN' 46 DO ixt = 1, ntiso 47 DO ipha = 1, nphas 48 iq = iqIsoPha(ixt,ipha) 49 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 50 DO k = 1, llm 51 DO i = ijb, ije 52 IF(ABS(q(i,k,iq))<=borne) CYCLE 53 WRITE(msg1,'(s,"(",i0,",",i0,",",i0,") = ",ES12.4)')TRIM(isoName(ixt)),i,k,iq,q(i,k,iq) 54 CALL msg(msg1, modname) 55 CALL abort_gcm(modname, 'Error with isotopes: '//TRIM(err_msg), 1) 56 END DO 57 END DO 58 !$OMP END DO NOWAIT 59 END DO 60 END DO 14 61 15 ! locals 16 integer ixt,phase,k,i,iq,iiso,izone,ieau,iqeau 17 real xtractot,xiiso 18 real borne 19 real qmin 20 real errmax ! erreur maximale en absolu. 21 real errmaxrel ! erreur maximale en relatif autorisée 22 real deltaDmax,deltaDmin 23 real ridicule 24 parameter (borne=1e19) 25 parameter (errmax=1e-8) 26 parameter (errmaxrel=1e-3) 27 parameter (qmin=1e-11) 28 parameter (deltaDmax=1000.0,deltaDmin=-999.0) 29 parameter (ridicule=1e-12) 30 real deltaD 62 !--- CHECK CONSERVATION (MAIN ISOTOPE AND PARENT CONCENTRATIONS MUST BE EQUAL) 63 modname = 'check_isotopes:iso_verif_egalite' 64 ixt = iso_eau 65 IF(ixt /= 0) THEN 66 DO ipha = 1, nphas 67 iq = iqIsoPha(ixt,ipha) 68 iqpar = tracers(iq)%iqParent 69 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 70 DO k = 1, llm 71 DO i = ijb, ije 72 q1 = q(i,k,iqpar) 73 q2 = q(i,k,iq) 74 !--- IMPROVEMENT in case at least one isotope is not negligible compared to the main isotopic form. 75 ! This would be probably required to sum from smallest to highest concentrations ; the corresponding 76 ! indices vector can be computed once only (in the initializations stage), using mean concentrations. 77 ! q2 = SUM(q(i,k,tracers(iqPar)%iqDesc), DIM=3) 78 IF(ABS(q1-q2) <= errmax .OR. ABS(q1-q2)/MAX(MAX(ABS(q1),ABS(q2)),1e-18) <= errmaxrel) THEN 79 q(i,k,iq) = q1 !--- Bidouille pour convergence 80 ! q(i,k,tracers(iqPar)%iqDesc) = q(i,k,tracers(iqPar)%iqDesc) * q1 / q2 81 CYCLE 82 END IF 83 CALL msg('ixt, iq = '//TRIM(strStack(int2str([ixt,iq]))), modname) 84 msg1 = '('//TRIM(strStack(int2str([i,k])))//')' 85 CALL msg(TRIM(tracers(iqpar)%name)//TRIM(msg1)//' = '//TRIM(real2str(q1)), modname) 86 CALL msg(TRIM(tracers(iq )%name)//TRIM(msg1)//' = '//TRIM(real2str(q2)), modname) 87 CALL abort_gcm(modname, 'Error with isotopes: '//TRIM(err_msg), 1) 88 END DO 89 END DO 90 !$OMP END DO NOWAIT 91 END DO 92 END IF 31 93 32 if (niso > 0) then 94 !--- CHECK DELTA ANOMALIES 95 modname = 'check_isotopes:iso_verif_aberrant' 96 ix = [ iso_HDO , iso_O18 ] 97 nm = ['deltaD ', 'deltaO18'] 98 DO iiso = 1, SIZE(ix) 99 ixt = ix(iiso) 100 IF(ixt == 0) CYCLE 101 DO ipha = 1, nphas 102 iq = iqIsoPha(ixt,ipha) 103 iqpar = tracers(iq)%iqParent 104 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 105 DO k = 1, llm 106 DO i = ijb, ije 107 q1 = q(i,k,iqpar) 108 q2 = q(i,k,iq) 109 !--- IMPROVEMENT in case at least one isotope is not negligible compared to the main isotopic form. 110 ! This would be probably required to sum from smallest to highest concentrations ; the corresponding 111 ! indices vector can be computed once only (in the initializations stage), using mean concentrations. 112 ! q2 = SUM(q(i,k,tracers(iqPar)%iqDesc), DIM=3) 113 IF(q2 <= qmin) CYCLE 114 deltaD = (q2/q1/tnat(ixt)-1.)*1000. 115 IF(deltaD <= deltaDmax .AND. deltaD >= deltaDmin) CYCLE 116 CALL msg('ixt, iq = '//TRIM(strStack(int2str([ixt,iq]))), modname) 117 msg1 = '('//TRIM(strStack(int2str([i,k])))//')' 118 CALL msg(TRIM(tracers(iqpar)%name)//TRIM(msg1)//' = '//TRIM(real2str(q1)), modname) 119 CALL msg(TRIM(tracers(iq )%name)//TRIM(msg1)//' = '//TRIM(real2str(q2)), modname) 120 CALL msg(TRIM(nm(iiso))//TRIM(real2str(deltaD)), modname) 121 CALL abort_gcm(modname, 'Error with isotopes: '//TRIM(err_msg), 1) 122 END DO 123 END DO 124 !$OMP END DO NOWAIT 125 END DO 126 END DO 33 127 34 ! write(*,*) 'check_isotopes 31: err_msg=',err_msg 35 ! verifier que rien n'est NaN 36 do ixt=1,ntraciso 37 do phase=1,nqo 38 iq=iqiso(ixt,phase) 39 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 40 do k=1,llm 41 DO i = ijb,ije 42 if ((q(i,k,iq).gt.-borne).and. 43 : (q(i,k,iq).lt.borne)) then 44 else !if ((x(ixt,i,j).gt.-borne).and. 45 write(*,*) 'erreur detectee par iso_verif_noNaN:' 46 write(*,*) err_msg 47 write(*,*) 'q,i,k,iq=',q(i,k,iq),i,k,iq 48 write(*,*) 'borne=',borne 49 call abort_gcm('check_isotopes_loc','plantage iso',0) 50 endif !if ((x(ixt,i,j).gt.-borne).and. 51 enddo !DO i = ijb,ije 52 enddo !do k=1,llm 53 c$OMP END DO NOWAIT 54 enddo !do phase=1,nqo 55 enddo !do ixt=1,ntraciso 128 IF(nzone == 0) RETURN 56 129 57 ! write(*,*) 'check_isotopes 52' 58 ! verifier que l'eau normale est OK 59 if (use_iso(1)) then 60 ixt=indnum_fn_num(1) 61 do phase=1,nqo 62 iq=iqiso(ixt,phase) 63 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 64 do k=1,llm 65 DO i = ijb,ije 66 if ((abs(q(i,k,phase)-q(i,k,iq)).gt.errmax).and. 67 : (abs((q(i,k,phase)-q(i,k,iq))/ 68 : max(max(abs(q(i,k,phase)),abs(q(i,k,iq))),1e-18)) 69 : .gt.errmaxrel)) then 70 write(*,*) 'erreur detectee par iso_verif_egalite:' 71 write(*,*) err_msg 72 write(*,*) 'ixt,phase,ijb=',ixt,phase,ijb 73 write(*,*) 'q,iq,i,k=',q(i,k,iq),iq,i,k 74 write(*,*) 'q(i,k,phase)=',q(i,k,phase) 75 call abort_gcm('check_isotopes_loc','plantage iso',0) 76 endif !if ((abs(q(i,k,phase)-q(i,k,iq)).gt.errmax).and. 77 ! bidouille pour éviter divergence: 78 q(i,k,iq)= q(i,k,phase) 79 enddo ! DO i = ijb,ije 80 enddo !do k=1,llm 81 c$OMP END DO NOWAIT 82 enddo ! do phase=1,nqo 83 endif !if (use_iso(1)) then 84 85 ! write(*,*) 'check_isotopes 78' 86 ! verifier que HDO est raisonable 87 if (use_iso(2)) then 88 ixt=indnum_fn_num(2) 89 do phase=1,nqo 90 iq=iqiso(ixt,phase) 91 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 92 do k=1,llm 93 DO i = ijb,ije 94 if (q(i,k,iq).gt.qmin) then 95 deltaD=(q(i,k,iq)/q(i,k,phase)/tnat(2)-1)*1000 96 if ((deltaD.gt.deltaDmax).or.(deltaD.lt.deltaDmin)) then 97 write(*,*) 'erreur detectee par iso_verif_aberrant:' 98 write(*,*) err_msg 99 write(*,*) 'ixt,phase=',ixt,phase 100 write(*,*) 'q,iq,i,k,=',q(i,k,iq),iq,i,k 101 write(*,*) 'q=',q(i,k,:) 102 write(*,*) 'deltaD=',deltaD 103 call abort_gcm('check_isotopes_loc','plantage iso',0) 104 endif !if ((deltaD.gt.deltaDmax).or.(deltaD.lt.deltaDmin)) then 105 endif !if (q(i,k,iq).gt.qmin) then 106 enddo !DO i = ijb,ije 107 enddo !do k=1,llm 108 c$OMP END DO NOWAIT 109 enddo ! do phase=1,nqo 110 endif !if (use_iso(2)) then 130 !--- CHECK FOR TAGGING TRACERS DELTAD ANOMALIES 131 modname = 'check_isotopes:iso_verif_aberrant' 132 IF(iso_eau /= 0 .AND. iso_HDO /= 0) THEN 133 DO izon = 1, nzone 134 ixt = itZonIso(izon, iso_HDO) 135 ieau = itZonIso(izon, iso_eau) 136 DO ipha = 1, nphas 137 iq = iqIsoPha(ixt, ipha) 138 iqeau = iqIsoPha(ieau, ipha) 139 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 140 DO k = 1, llm 141 DO i = ijb, ije 142 q1 = q(i,k,iqeau) 143 q2 = q(i,k,iq) 144 IF(q2<=qmin) CYCLE 145 deltaD = (q2/q1/tnat(iso_HDO)-1.)*1000. 146 IF(deltaD <= deltaDmax .AND. deltaD >= deltaDmin) CYCLE 147 CALL msg('izon, ipha = '//TRIM(strStack(int2str([izon, ipha]))), modname) 148 CALL msg( 'ixt, ieau = '//TRIM(strStack(int2str([ ixt, ieau]))), modname) 149 msg1 = '('//TRIM(strStack(int2str([i,k])))//')' 150 CALL msg(TRIM(tracers(iqeau)%name)//TRIM(msg1)//' = '//TRIM(real2str(q1)), modname) 151 CALL msg(TRIM(tracers(iq )%name)//TRIM(msg1)//' = '//TRIM(real2str(q2)), modname) 152 CALL msg('deltaD = '//TRIM(real2str(deltaD)), modname) 153 CALL abort_gcm(modname, 'Error with isotopes: '//TRIM(err_msg), 1) 154 END DO 155 END DO 156 !$OMP END DO NOWAIT 157 END DO 158 END DO 159 END IF 111 160 112 ! write(*,*) 'check_isotopes 103' 113 ! verifier que O18 est raisonable 114 if (use_iso(3)) then 115 ixt=indnum_fn_num(3) 116 do phase=1,nqo 117 iq=iqiso(ixt,phase) 118 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 119 do k=1,llm 120 DO i = ijb,ije 121 if (q(i,k,iq).gt.qmin) then 122 deltaD=(q(i,k,iq)/q(i,k,phase)/tnat(3)-1)*1000 123 if ((deltaD.gt.deltaDmax).or.(deltaD.lt.deltaDmin)) then 124 write(*,*) 'erreur detectee iso_verif_aberrant O18:' 125 write(*,*) err_msg 126 write(*,*) 'ixt,phase=',ixt,phase 127 write(*,*) 'q,iq,i,k,=',q(i,k,phase),iq,i,k 128 write(*,*) 'xt=',q(i,k,:) 129 write(*,*) 'deltaO18=',deltaD 130 call abort_gcm('check_isotopes_loc','plantage iso',0) 131 endif !if ((deltaD.gt.deltaDmax).or.(deltaD.lt.deltaDmin)) then 132 endif !if (q(i,k,iq).gt.qmin) then 133 enddo !DO i = ijb,ije 134 enddo !do k=1,llm 135 c$OMP END DO NOWAIT 136 enddo ! do phase=1,nqo 137 endif !if (use_iso(2)) then 161 !--- CHECK FOR TAGGING TRACERS CONSERVATION (PARENT AND TAGGING TRACERS SUM OVER ALL REGIONS MUST BE EQUAL) 162 DO iiso = 1, niso 163 DO ipha = 1, nphas 164 iq = iqIsoPha(iiso, ipha) 165 !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 166 DO k = 1, llm 167 DO i = ijb, ije 168 xiiso = q(i,k,iq) 169 xtractot = SUM(q(i, k, iqIsoPha(itZonIso(1:nzone,iiso), ipha))) 170 IF(ABS(xtractot-xiiso) > errmax .AND. ABS(xtractot-xiiso)/MAX(MAX(ABS(xtractot),ABS(xiiso)),1e-18) > errmaxrel) THEN 171 CALL msg('Error in iso_verif_aberrant trac: '//TRIM(err_msg)) 172 CALL msg('iiso, ipha = '//TRIM(strStack(int2str([iiso, ipha]))), modname) 173 CALL msg('q('//TRIM(strStack(int2str([i,k])))//',:) = '//TRIM(strStack(real2str(q(i,k,:)))), modname) 174 CALL abort_gcm(modname, 'Error with isotopes: '//TRIM(err_msg), 1) 175 END IF 176 IF(ABS(xtractot) <= ridicule) CYCLE 177 DO izon = 1, nzone 178 q(i,k,iq) = q(i,k,iq) / xtractot * xiiso !--- Bidouille pour convergence 179 END DO 180 END DO 181 END DO 182 !$OMP END DO NOWAIT 183 END DO 184 END DO 138 185 186 END SUBROUTINE check_isotopes 139 187 140 ! write(*,*) 'check_isotopes 129'141 if (nzone > 0) then142 143 if (use_iso(2).and.use_iso(1)) then144 do izone=1,ntraceurs_zone145 ixt=index_trac(izone,indnum_fn_num(2))146 ieau=index_trac(izone,indnum_fn_num(1))147 do phase=1,nqo148 iq=iqiso(ixt,phase)149 iqeau=iqiso(ieau,phase)150 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)151 do k=1,llm152 DO i = ijb,ije153 if (q(i,k,iq).gt.qmin) then154 deltaD=(q(i,k,iq)/q(i,k,iqeau)/tnat(2)-1)*1000155 if ((deltaD.gt.deltaDmax).or.156 & (deltaD.lt.deltaDmin)) then157 write(*,*) 'erreur dans iso_verif_aberrant trac:'158 write(*,*) err_msg159 write(*,*) 'izone,phase=',izone,phase160 write(*,*) 'ixt,ieau=',ixt,ieau161 write(*,*) 'q,iq,i,k,=',q(i,k,iq),iq,i,k162 write(*,*) 'deltaD=',deltaD163 call abort_gcm('check_isotopes_loc','plantage iso',0)164 endif !if ((deltaD.gt.deltaDmax).or.165 endif !if (q(i,k,iq).gt.qmin) then166 enddo !DO i = ijb,ije167 enddo ! do k=1,llm168 c$OMP END DO NOWAIT169 enddo ! do phase=1,nqo170 enddo !do izone=1,ntraceurs_zone171 endif !if (use_iso(2).and.use_iso(1)) then172 173 do iiso=1,niso174 do phase=1,nqo175 iq=iqiso(iiso,phase)176 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)177 do k=1,llm178 DO i = ijb,ije179 xtractot=0.0180 xiiso=q(i,k,iq)181 do izone=1,ntraceurs_zone182 iq=iqiso(index_trac(izone,iiso),phase)183 xtractot=xtractot+ q(i,k,iq)184 enddo !do izone=1,ntraceurs_zone185 if ((abs(xtractot-xiiso).gt.errmax).and.186 : (abs(xtractot-xiiso)/187 : max(max(abs(xtractot),abs(xiiso)),1e-18)188 : .gt.errmaxrel)) then189 write(*,*) 'erreur detectee par iso_verif_traceurs:'190 write(*,*) err_msg191 write(*,*) 'iiso,phase=',iiso,phase192 write(*,*) 'i,k,=',i,k193 write(*,*) 'q(i,k,:)=',q(i,k,:)194 call abort_gcm('check_isotopes_loc','plantage iso',0)195 endif !if ((abs(q(i,k,phase)-q(i,k,iq)).gt.errmax).and.196 197 ! bidouille pour éviter divergence:198 if (abs(xtractot).gt.ridicule) then199 do izone=1,ntraceurs_zone200 ixt=index_trac(izone,iiso)201 q(i,k,iq)=q(i,k,iq)/xtractot*xiiso202 enddo !do izone=1,ntraceurs_zone203 endif !if ((abs(xtractot).gt.ridicule) then204 enddo !DO i = ijb,ije205 enddo !do k=1,llm206 c$OMP END DO NOWAIT207 enddo !do phase=1,nqo208 enddo !do iiso=1,niso209 210 endif !if (nzone > 0)211 212 endif ! if (niso > 0)213 ! write(*,*) 'check_isotopes 198'214 215 end216 217 -
LMDZ6/trunk/libf/dyn3dmem/dynetat0_loc.F90
r4124 r4143 7 7 !------------------------------------------------------------------------------- 8 8 USE parallel_lmdz 9 USE infotrac, ONLY: nqtot, tracers, niso, iq iso, iso_indnum, iso_num, tnat, alpha_ideal, iH2O9 USE infotrac, ONLY: nqtot, tracers, niso, iqIsoPha, tnat, alpha_ideal, iH2O 10 10 USE strings_mod, ONLY: maxlen, msg, strStack, real2str 11 11 USE netcdf, ONLY: NF90_OPEN, NF90_NOWRITE, NF90_INQUIRE_DIMENSION, NF90_INQ_VARID, & … … 169 169 #endif 170 170 ELSE IF(tracers(iq)%iso_iGroup == iH2O .AND. niso > 0) THEN !=== WATER ISOTOPES 171 ! iName = tracers(iq)%iso_iName ! (next commit) 172 iName = iso_num(iq) 171 iName = tracers(iq)%iso_iName 173 172 iPhase = tracers(iq)%iso_iPhase 174 173 iqParent = tracers(iq)%iqParent … … 178 177 ELSE 179 178 CALL msg('Tracer <'//TRIM(var)//'> is missing => initialized to its parent isotope concentration.', modname) 180 q(ijb_u:ije_u,:,iq) = q(ijb_u:ije_u,:,iq iso(iso_indnum(iq),iPhase))179 q(ijb_u:ije_u,:,iq) = q(ijb_u:ije_u,:,iqIsoPha(iName,iPhase)) 181 180 END IF 182 181 !-------------------------------------------------------------------------------------------------------------------------- -
LMDZ6/trunk/libf/dyn3dmem/iniacademic_loc.F90
r4124 r4143 5 5 6 6 USE filtreg_mod, ONLY: inifilr 7 USE infotrac, ONLY: nqtot, niso, niso_possibles, ok_iso_verif, tnat, alpha_ideal, & 8 iqiso, tracers, iso_indnum, iso_num 7 USE infotrac, ONLY: nqtot, niso, tnat, alpha_ideal, iqIsoPha, tracers 9 8 USE control_mod, ONLY: day_step,planet_type 10 9 use exner_hyb_m, only: exner_hyb … … 286 285 ! CRisi: init des isotopes 287 286 ! distill de Rayleigh très simplifiée 288 ! iName = tracers(iq)%iso_iName ! (next commit) 289 iName = iso_num(iq) 287 iName = tracers(iq)%iso_iName 290 288 if (niso <= 0 .OR. iName <= 0) CYCLE 291 289 iPhase = tracers(iq)%iso_iPhase … … 295 293 *(q(ijb_u:ije_u,:,iqParent)/30.e-3)**(alpha_ideal(iName)-1.) 296 294 ELSE 297 q(ijb_u:ije_u,:,iq) = q(ijb_u:ije_u,:,iq iso(iso_indnum(iq),iPhase))295 q(ijb_u:ije_u,:,iq) = q(ijb_u:ije_u,:,iqIsoPha(iName,iPhase)) 298 296 END IF 299 297 enddo … … 302 300 endif ! of if (planet_type=="earth") 303 301 304 if (ok_iso_verif)call check_isotopes(q,ijb_u,ije_u,'iniacademic_loc')302 call check_isotopes(q,ijb_u,ije_u,'iniacademic_loc') 305 303 306 304 ! add random perturbation to temperature -
LMDZ6/trunk/libf/dyn3dmem/integrd_loc.F
r2603 r4143 11 11 USE write_field 12 12 USE integrd_mod 13 USE infotrac, ONLY: ok_iso_verif ! ajout CRisi14 13 USE comconst_mod, ONLY: pi 15 14 USE logic_mod, ONLY: leapf … … 347 346 c$OMP BARRIER 348 347 349 if (ok_iso_verif) then 350 call check_isotopes(q,ijb,ije,'integrd 342') 351 endif !if (ok_iso_verif) then 348 call check_isotopes(q,ijb,ije,'integrd 342') 352 349 353 350 !write(*,*) 'integrd 341' … … 355 352 !write(*,*) 'integrd 343' 356 353 357 if (ok_iso_verif) then 358 call check_isotopes(q,ijb,ije,'integrd 346') 359 endif !if (ok_iso_verif) then 354 call check_isotopes(q,ijb,ije,'integrd 346') 360 355 c 361 356 c ..... Calcul de la valeur moyenne, unique aux poles pour q ..... … … 408 403 ENDIF 409 404 410 if (ok_iso_verif) then 411 call check_isotopes(q,ijb,ije,'integrd 409') 412 endif !if (ok_iso_verif) then 405 call check_isotopes(q,ijb,ije,'integrd 409') 413 406 414 407 ! Ehouarn: forget about finvmaold -
LMDZ6/trunk/libf/dyn3dmem/leapfrog_loc.F
r4139 r4143 204 204 TYPE(distrib),SAVE :: new_dist 205 205 206 if (ok_iso_verif) then 207 call check_isotopes(q0,ijb_u,ije_u,'leapfrog204: debut') 208 endif !if (ok_iso_verif) then 206 call check_isotopes(q0,ijb_u,ije_u,'leapfrog204: debut') 209 207 210 208 c$OMP MASTER … … 226 224 itaufinp1 = itaufin +1 227 225 228 if (ok_iso_verif) then 229 call check_isotopes(q0,ijb_u,ije_u,'leapfrog 226') 230 endif !if (ok_iso_verif) then 226 call check_isotopes(q0,ijb_u,ije_u,'leapfrog 226') 231 227 232 228 itau = 0 … … 243 239 q=q0 244 240 245 if (ok_iso_verif) then 246 call check_isotopes(q,ijb_u,ije_u,'leapfrog 239') 247 endif !if (ok_iso_verif) then 241 call check_isotopes(q,ijb_u,ije_u,'leapfrog 239') 248 242 249 243 ! iday = day_ini+itau/day_step … … 324 318 endif 325 319 326 if (ok_iso_verif) then 327 call check_isotopes(q,ijb_u,ije_u,'leapfrog 321') 328 endif !if (ok_iso_verif) then 320 call check_isotopes(q,ijb_u,ije_u,'leapfrog 321') 329 321 330 322 #ifdef CPP_IOIPSL … … 406 398 407 399 408 if (ok_iso_verif) then 409 call check_isotopes(q,ijb_u,ije_u,'leapfrog 400') 410 endif !if (ok_iso_verif) then 400 call check_isotopes(q,ijb_u,ije_u,'leapfrog 400') 411 401 412 402 2 CONTINUE ! Matsuno backward or leapfrog step begins here 413 403 414 404 415 if (ok_iso_verif) then 416 call check_isotopes(q,ijb_u,ije_u,'leapfrog 402') 417 endif !if (ok_iso_verif) then 405 call check_isotopes(q,ijb_u,ije_u,'leapfrog 402') 418 406 419 407 c$OMP MASTER … … 497 485 498 486 499 if (ok_iso_verif) then 500 call check_isotopes(q,ijb_u,ije_u,'leapfrog 471') 501 endif !if (ok_iso_verif) then 487 call check_isotopes(q,ijb_u,ije_u,'leapfrog 471') 502 488 503 489 !ym PAS D'AJUSTEMENT POUR LE MOMENT … … 619 605 620 606 621 if (ok_iso_verif) then 622 call check_isotopes(q,ijb_u,ije_u,'leapfrog 589') 623 endif !if (ok_iso_verif) then 607 call check_isotopes(q,ijb_u,ije_u,'leapfrog 589') 624 608 625 609 c----------------------------------------------------------------------- … … 684 668 CALL geopot_loc ( ip1jmp1, teta , pk , pks, phis , phi ) 685 669 686 if (ok_iso_verif) then 687 call check_isotopes(q,ijb_u,ije_u,'leapfrog 651') 688 endif !if (ok_iso_verif) then 670 call check_isotopes(q,ijb_u,ije_u,'leapfrog 651') 689 671 690 672 call VTb(VTcaldyn) … … 725 707 c ------------------------------------------------------------- 726 708 727 if (ok_iso_verif) then 728 call check_isotopes(q,ijb_u,ije_u, 709 call check_isotopes(q,ijb_u,ije_u, 729 710 & 'leapfrog 686: avant caladvtrac') 730 endif !if (ok_iso_verif) then731 711 732 712 IF( forward. OR . leapf ) THEN … … 743 723 744 724 !write(*,*) 'leapfrog 719' 745 if (ok_iso_verif) then 746 call check_isotopes(q,ijb_u,ije_u, 725 call check_isotopes(q,ijb_u,ije_u, 747 726 & 'leapfrog 698: apres caladvtrac') 748 endif !if (ok_iso_verif) then749 727 750 728 ! do j=1,nqtot … … 780 758 781 759 !write(*,*) 'leapfrog 720' 782 if (ok_iso_verif) then 783 call check_isotopes(q,ijb_u,ije_u,'leapfrog 756') 784 endif !if (ok_iso_verif) then 760 call check_isotopes(q,ijb_u,ije_u,'leapfrog 756') 785 761 786 762 ! CRisi: pourquoi aller jusqu'à 2 et non pas jusqu'à nqtot?? … … 790 766 791 767 !write(*,*) 'leapfrog 724' 792 if (ok_iso_verif) then 793 call check_isotopes(q,ijb_u,ije_u,'leapfrog 762') 794 endif !if (ok_iso_verif) then 768 call check_isotopes(q,ijb_u,ije_u,'leapfrog 762') 795 769 796 770 ! CALL FTRACE_REGION_END("integrd") … … 807 781 #endif 808 782 809 if (ok_iso_verif) then 810 call check_isotopes(q,ijb_u,ije_u,'leapfrog 775') 811 endif !if (ok_iso_verif) then 783 call check_isotopes(q,ijb_u,ije_u,'leapfrog 775') 812 784 813 785 c do j=1,nqtot … … 1169 1141 ENDIF ! of IF( apphys ) 1170 1142 1171 if (ok_iso_verif) then 1172 call check_isotopes(q,ijb_u,ije_u,'leapfrog 1132') 1173 endif !if (ok_iso_verif) then 1143 call check_isotopes(q,ijb_u,ije_u,'leapfrog 1132') 1174 1144 !write(*,*) 'leapfrog 1134: iflag_phys=',iflag_phys 1175 1145 … … 1238 1208 1239 1209 cc$OMP END PARALLEL 1240 if (ok_iso_verif) then 1241 call check_isotopes(q,ijb_u,ije_u,'leapfrog 1196') 1242 endif !if (ok_iso_verif) then 1210 call check_isotopes(q,ijb_u,ije_u,'leapfrog 1196') 1243 1211 1244 1212 c----------------------------------------------------------------------- … … 1475 1443 c ENDIF 1476 1444 1477 if (ok_iso_verif) then 1478 call check_isotopes(q,ijb_u,ije_u,'leapfrog 1430') 1479 endif !if (ok_iso_verif) then 1445 call check_isotopes(q,ijb_u,ije_u,'leapfrog 1430') 1480 1446 1481 1447 c ******************************************************************** … … 1567 1533 ENDIF 1568 1534 1569 if (ok_iso_verif) then 1570 call check_isotopes(q,ijb_u,ije_u,'leapfrog 1509') 1571 endif !if (ok_iso_verif) then 1535 call check_isotopes(q,ijb_u,ije_u,'leapfrog 1509') 1572 1536 1573 1537 IF ( .NOT.purmats ) THEN … … 1656 1620 ENDIF 1657 1621 1658 if (ok_iso_verif) then 1659 call check_isotopes(q,ijb_u,ije_u,'leapfrog 1584') 1660 endif !if (ok_iso_verif) then 1622 call check_isotopes(q,ijb_u,ije_u,'leapfrog 1584') 1661 1623 1662 1624 c----------------------------------------------------------------------- … … 1701 1663 ENDIF ! of IF (itau.EQ.itaufin) 1702 1664 1703 if (ok_iso_verif) then 1704 call check_isotopes(q,ijb_u,ije_u,'leapfrog 1624') 1705 endif !if (ok_iso_verif) then 1665 call check_isotopes(q,ijb_u,ije_u,'leapfrog 1624') 1706 1666 1707 1667 c----------------------------------------------------------------------- … … 1741 1701 1742 1702 1743 if (ok_iso_verif) then 1744 call check_isotopes(q,ijb_u,ije_u,'leapfrog 1664') 1745 endif !if (ok_iso_verif) then 1703 call check_isotopes(q,ijb_u,ije_u,'leapfrog 1664') 1746 1704 1747 1705 c ........................................................ … … 1788 1746 1789 1747 1790 if (ok_iso_verif) then 1791 call check_isotopes(q,ijb_u,ije_u,'leapfrog 1698') 1792 endif !if (ok_iso_verif) then 1748 call check_isotopes(q,ijb_u,ije_u,'leapfrog 1698') 1793 1749 1794 1750 IF(MOD(itau,iperiod).EQ.0 .OR. itau.EQ.itaufin) THEN … … 1857 1813 1858 1814 1859 if (ok_iso_verif) then 1860 call check_isotopes(q,ijb_u,ije_u,'leapfrog 1750') 1861 endif !if (ok_iso_verif) then 1815 call check_isotopes(q,ijb_u,ije_u,'leapfrog 1750') 1862 1816 1863 1817 END IF ! of IF(.not.purmats) -
LMDZ6/trunk/libf/dyn3dmem/qminimum_loc.F
r4124 r4143 4 4 SUBROUTINE qminimum_loc( q,nqtot,deltap ) 5 5 USE parallel_lmdz 6 USE infotrac, ONLY: niso,ntraciso,iqiso,ok_iso_verif, & 7 & ratiomin,qperemin ! CRisi 23nov2020 6 USE infotrac, ONLY: niso, ntiso, iqIsoPha, tracers, 7 & isoCheck, min_qParent 8 USE strings_mod, ONLY: strIdx 9 USE readTracFiles_mod, ONLY: addPhase 8 10 IMPLICIT none 9 11 c … … 18 20 REAL q(ijb_u:ije_u,llm,nqtot), deltap(ijb_u:ije_u,llm) 19 21 c 20 INTEGER iq_vap, iq_liq 21 PARAMETER ( iq_vap = 1 ) ! indice pour l'eau vapeur 22 PARAMETER ( iq_liq = 2 ) ! indice pour l'eau liquide 23 REAL seuil_vap, seuil_liq 24 PARAMETER ( seuil_vap = 1.0e-10 ) ! seuil pour l'eau vapeur 25 PARAMETER ( seuil_liq = 1.0e-11 ) ! seuil pour l'eau liquide 22 LOGICAL, SAVE :: first=.TRUE. 23 INTEGER, SAVE :: iq_vap, iq_liq ! indices pour l'eau vapeur/liquide 24 c$OMP THREADPRIVATE(iq_vap, iq_liq, first) 25 REAL, PARAMETER :: seuil_vap = 1.0e-10 ! seuil pour l'eau vapeur 26 REAL, PARAMETER :: seuil_liq = 1.0e-11 ! seuil pour l'eau liquide 26 27 c 27 28 c NB. ....( Il est souhaitable mais non obligatoire que les valeurs des … … 54 55 c 55 56 56 !write(lunout,*) 'qminimum 52: entree' 57 if (ok_iso_verif) then 58 call check_isotopes(q,ij_begin,ij_end,'qminimum 52') 59 endif !if (ok_iso_verif) then 57 !write(lunout,*) 'qminimum 52: entree' 58 IF(first) THEN 59 iq_vap = strIdx(tracers(:)%name, addPhase('H2O', 'g')) 60 iq_liq = strIdx(tracers(:)%name, addPhase('H2O', 'l')) 61 first = .FALSE. 62 END IF 63 call check_isotopes(q,ij_begin,ij_end,'qminimum 52') 60 64 61 65 ijb=ij_begin … … 169 173 ! write(lunout,*) 'i,k,q_follow(i,k-1,iq_vap)=', 170 174 ! : i,k,q_follow(i,k-1,iq_vap) 171 if (q_follow(i,k-1,iq_vap).lt. qperemin) then175 if (q_follow(i,k-1,iq_vap).lt.min_qParent) then 172 176 write(lunout,*) 'tmp qmin: on stoppe' 173 177 write(lunout,*) 'zx_pump(i)=',zx_pump(i) … … 177 181 call abort_gcm("qminimum","not enough vapor",1) 178 182 endif 179 do ixt=1,nt raciso183 do ixt=1,ntiso 180 184 ! write(lunout,*) 'qmin 168: ixt=',ixt 181 ! write(lunout,*) 'q(i,k,iq iso(ixt,iq_vap)=',182 ! : q(i,k,iq iso(ixt,iq_vap))185 ! write(lunout,*) 'q(i,k,iqIsoPha(ixt,iq_vap)=', 186 ! : q(i,k,iqIsoPha(ixt,iq_vap)) 183 187 ! write(lunout,*) 'zx_defau_diag(i,k,iq_vap)=', 184 188 ! : zx_defau_diag(i,k,iq_vap) 185 ! write(lunout,*) 'q(i,k-1,iq iso(ixt,iq_vap)=',186 ! : q(i,k-1,iq iso(ixt,iq_vap))187 188 q(i,k,iq iso(ixt,iq_vap))=q(i,k,iqiso(ixt,iq_vap))189 : 190 : *q(i,k-1,iqiso(ixt,iq_vap))/q_follow(i,k-1,iq_vap)189 ! write(lunout,*) 'q(i,k-1,iqIsoPha(ixt,iq_vap)=', 190 ! : q(i,k-1,iqIsoPha(ixt,iq_vap)) 191 192 q(i,k,iqIsoPha(ixt,iq_vap))=q(i,k,iqIsoPha(ixt,iq_vap)) 193 : +zx_defau_diag(i,k,iq_vap) 194 : *q(i,k-1,iqIsoPha(ixt,iq_vap))/q_follow(i,k-1,iq_vap) 191 195 192 if ( ok_iso_verif) then193 if (iso_verif_noNaN_nostop(q(i,k,iqiso(ixt,iq_vap)),196 if (isoCheck) then 197 if(iso_verif_noNaN_nostop(q(i,k,iqIsoPha(ixt,iq_vap)), 194 198 : 'qminimum 155').eq.1) then 195 199 write(*,*) 'i,k,ixt=',i,k,ixt 196 200 write(*,*) 'q_follow(i,k-1,iq_vap)=', 197 201 : q_follow(i,k-1,iq_vap) 198 write(*,*) 'q(i,k,iq iso(ixt,iq_vap))=',199 : q(i,k,iq iso(ixt,iq_vap))202 write(*,*) 'q(i,k,iqIsoPha(ixt,iq_vap))=', 203 : q(i,k,iqIsoPha(ixt,iq_vap)) 200 204 write(*,*) 'zx_defau_diag(i,k,iq_vap)=', 201 205 : zx_defau_diag(i,k,iq_vap) 202 write(*,*) 'q(i,k-1,iq iso(ixt,iq_vap))=',203 : q(i,k-1,iq iso(ixt,iq_vap))206 write(*,*) 'q(i,k-1,iqIsoPha(ixt,iq_vap))=', 207 : q(i,k-1,iqIsoPha(ixt,iq_vap)) 204 208 stop 205 209 endif … … 207 211 208 212 ! et on la retranche en k-1 209 q(i,k-1,iqiso(ixt,iq_vap))=q(i,k-1,iqiso(ixt,iq_vap)) 213 q(i,k-1,iqIsoPha(ixt,iq_vap)) = 214 : q(i,k-1,iqIsoPha(ixt,iq_vap)) 210 215 : -zx_defau_diag(i,k,iq_vap) 211 216 : *deltap(i,k)/deltap(i,k-1) 212 : *q(i,k-1,iqiso(ixt,iq_vap))/q_follow(i,k-1,iq_vap) 213 214 if (ok_iso_verif) then 215 if (iso_verif_noNaN_nostop(q(i,k-1,iqiso(ixt,iq_vap)), 217 : *q(i,k-1,iqIsoPha(ixt,iq_vap)) 218 : /q_follow(i,k-1,iq_vap) 219 220 if (isoCheck) then 221 if (iso_verif_noNaN_nostop( 222 : q(i,k-1,iqIsoPha(ixt,iq_vap)), 216 223 : 'qminimum 175').eq.1) then 217 224 write(*,*) 'k,i,ixt=',k,i,ixt 218 225 write(*,*) 'q_follow(i,k-1,iq_vap)=', 219 226 : q_follow(i,k-1,iq_vap) 220 write(*,*) 'q(i,k,iq iso(ixt,iq_vap))=',221 : q(i,k,iq iso(ixt,iq_vap))227 write(*,*) 'q(i,k,iqIsoPha(ixt,iq_vap))=', 228 : q(i,k,iqIsoPha(ixt,iq_vap)) 222 229 write(*,*) 'zx_defau_diag(i,k,iq_vap)=', 223 230 : zx_defau_diag(i,k,iq_vap) 224 write(*,*) 'q(i,k-1,iq iso(ixt,iq_vap))=',225 : q(i,k-1,iq iso(ixt,iq_vap))231 write(*,*) 'q(i,k-1,iqIsoPha(ixt,iq_vap))=', 232 : q(i,k-1,iqIsoPha(ixt,iq_vap)) 226 233 stop 227 234 endif … … 239 246 enddo !do k=2,llm 240 247 241 if (ok_iso_verif) then 242 call check_isotopes(q,ijb,ije,'qminimum 168') 243 endif !if (ok_iso_verif) then 248 call check_isotopes(q,ijb,ije,'qminimum 168') 244 249 245 250 … … 252 257 253 258 ! on ajoute eau liquide en k en k 254 do ixt=1,nt raciso255 q(i,k,iq iso(ixt,iq_liq))=q(i,k,iqiso(ixt,iq_liq))259 do ixt=1,ntiso 260 q(i,k,iqIsoPha(ixt,iq_liq))=q(i,k,iqIsoPha(ixt,iq_liq)) 256 261 : +zx_defau_diag(i,k,iq_liq) 257 : *q(i,k,iq iso(ixt,iq_vap))/q_follow(i,k,iq_vap)262 : *q(i,k,iqIsoPha(ixt,iq_vap))/q_follow(i,k,iq_vap) 258 263 ! et on la retranche à la vapeur en k 259 q(i,k,iq iso(ixt,iq_vap))=q(i,k,iqiso(ixt,iq_vap))264 q(i,k,iqIsoPha(ixt,iq_vap))=q(i,k,iqIsoPha(ixt,iq_vap)) 260 265 : -zx_defau_diag(i,k,iq_liq) 261 : *q(i,k,iq iso(ixt,iq_vap))/q_follow(i,k,iq_vap)266 : *q(i,k,iqIsoPha(ixt,iq_vap))/q_follow(i,k,iq_vap) 262 267 enddo !do ixt=1,niso 263 268 q_follow(i,k,iq_liq)= q_follow(i,k,iq_liq) … … 270 275 enddo !do k=2,llm 271 276 272 if (ok_iso_verif) then 273 call check_isotopes(q,ijb,ije,'qminimum 197') 274 endif !if (ok_iso_verif) then 277 call check_isotopes(q,ijb,ije,'qminimum 197') 275 278 276 279 endif !if (niso > 0) then -
LMDZ6/trunk/libf/dyn3dmem/vlsplt_loc.F
r4103 r4143 15 15 USE parallel_lmdz 16 16 USE infotrac, ONLY : nqtot,tracers, ! CRisi & 17 & qperemin,masseqmin,ratiomin! MVals et CRisi17 & min_qParent,min_qMass,min_ratio ! MVals et CRisi 18 18 IMPLICIT NONE 19 19 c … … 341 341 ! les calcule donc que de ijb à ije 342 342 !MVals: veiller a ce qu'on n'ait pas de denominateur nul 343 masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),m asseqmin)344 if (q(ij,l,iq).gt. qperemin) then ! modif 13 nov 2020343 masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),min_qMass) 344 if (q(ij,l,iq).gt.min_qParent) then ! modif 13 nov 2020 345 345 Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq) 346 346 else 347 Ratio(ij,l,iq2)= ratiomin347 Ratio(ij,l,iq2)=min_ratio 348 348 endif 349 349 enddo … … 363 363 DO ij=ijb+1,ije 364 364 !MVals: veiller a ce qu'on n'ait pas de denominateur nul 365 new_m=max(masse(ij,l,iq)+u_m(ij-1,l)-u_m(ij,l),m asseqmin)365 new_m=max(masse(ij,l,iq)+u_m(ij-1,l)-u_m(ij,l),min_qMass) 366 366 q(ij,l,iq)=(q(ij,l,iq)*masse(ij,l,iq)+ 367 367 & u_mq(ij-1,l)-u_mq(ij,l)) … … 417 417 USE parallel_lmdz 418 418 USE infotrac, ONLY : nqtot,tracers, ! CRisi & 419 & qperemin,masseqmin,ratiomin! MVals et CRisi419 & min_qParent,min_qMass,min_ratio ! MVals et CRisi 420 420 USE comconst_mod, ONLY: pi 421 421 IMPLICIT NONE … … 745 745 DO ij=ijbm,ijem 746 746 !MVals: veiller a ce qu'on n'ait pas de denominateur nul 747 masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),m asseqmin)747 masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),min_qMass) 748 748 enddo 749 749 … … 751 751 DO ij=ijb,ije 752 752 !MVals: veiller a ce qu'on n'ait pas de denominateur nul 753 if (q(ij,l,iq).gt. qperemin) then ! modif 13 nov 2020753 if (q(ij,l,iq).gt.min_qParent) then ! modif 13 nov 2020 754 754 Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq) 755 755 else 756 Ratio(ij,l,iq2)= ratiomin756 Ratio(ij,l,iq2)=min_ratio 757 757 endif 758 758 enddo !DO ij=ijbm,ijem … … 885 885 USE vlz_mod 886 886 USE infotrac, ONLY : nqtot,tracers, ! CRisi & 887 & qperemin,masseqmin,ratiomin! MVals et CRisi887 & min_qParent,min_qMass,min_ratio ! MVals et CRisi 888 888 889 889 IMPLICIT NONE … … 1155 1155 DO ij=ijb,ije 1156 1156 !MVals: veiller a ce qu'on n'ait pas de denominateur nul 1157 masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),m asseqmin)1158 if (q(ij,l,iq).gt. qperemin) then1157 masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),min_qMass) 1158 if (q(ij,l,iq).gt.min_qParent) then 1159 1159 Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq) 1160 1160 else 1161 Ratio(ij,l,iq2)= ratiomin1161 Ratio(ij,l,iq2)=min_ratio 1162 1162 endif 1163 1163 !wq(ij,l,iq2)=wq(ij,l,iq) ! correction bug le 15mai2015 -
LMDZ6/trunk/libf/dyn3dmem/vlspltgen_loc.F
r4056 r4143 28 28 USE VAMPIR 29 29 ! CRisi: on rajoute variables utiles d'infotrac 30 USE infotrac, ONLY : nqtot, tracers, ok_iso_verif30 USE infotrac, ONLY : nqtot, tracers, isoCheck 31 31 USE vlspltgen_mod 32 32 USE comconst_mod, ONLY: cpp … … 191 191 ijb=ij_begin 192 192 ije=ij_end 193 if (ok_iso_verif) then 194 call check_isotopes(zq,ijb,ije,'vlspltgen_loc 191') 195 endif !if (ok_iso_verif) then 193 call check_isotopes(zq,ijb,ije,'vlspltgen_loc 191') 196 194 197 195 c$OMP BARRIER … … 285 283 if (pole_nord) ijb=ij_begin 286 284 if (pole_sud) ije=ij_end 287 if (ok_iso_verif) then 288 call check_isotopes(zq,ij_begin,ij_end,'vlspltgen_loc 280') 289 endif !if (ok_iso_verif) then 285 call check_isotopes(zq,ij_begin,ij_end,'vlspltgen_loc 280') 290 286 291 287 do iq=1,nqtot … … 328 324 329 325 330 if (ok_iso_verif) then326 IF(isoCheck) THEN 331 327 call check_isotopes(zq,ij_begin,ij_end,'vlspltgen_loc 326') 332 328 ijb=ij_begin-2*iip1 … … 335 331 if (pole_sud) ije=ij_end 336 332 call check_isotopes(zq,ijb,ije,'vlspltgen_loc 336') 337 endif !if (ok_iso_verif) then333 END IF 338 334 339 335 do iq = 1, nqtot … … 355 351 enddo 356 352 357 if (ok_iso_verif) then 358 call check_isotopes(zq,ij_begin,ij_end,'vlspltgen_loc 357') 359 endif !if (ok_iso_verif) then 353 call check_isotopes(zq,ij_begin,ij_end,'vlspltgen_loc 357') 360 354 361 355 do iq = 1, nqtot … … 416 410 417 411 418 if (ok_iso_verif) then 419 call check_isotopes(zq,ij_begin,ij_end,'vlspltgen_loc 429') 420 endif !if (ok_iso_verif) then 412 call check_isotopes(zq,ij_begin,ij_end,'vlspltgen_loc 429') 421 413 422 414 c$OMP BARRIER … … 461 453 462 454 !write(*,*) 'vlspltgen_loc 494' 463 if (ok_iso_verif) then 464 call check_isotopes(zq,ij_begin,ij_end,'vlspltgen_loc 461') 465 endif !if (ok_iso_verif) then 455 call check_isotopes(zq,ij_begin,ij_end,'vlspltgen_loc 461') 466 456 467 457 do iq=1,nqtot … … 481 471 enddo !do iq=1,nqtot 482 472 483 if (ok_iso_verif) then 484 call check_isotopes(zq,ij_begin,ij_end,'vlspltgen_loc 493') 485 endif !if (ok_iso_verif) then 473 call check_isotopes(zq,ij_begin,ij_end,'vlspltgen_loc 493') 486 474 487 475 do iq=1,nqtot … … 504 492 505 493 !write(*,*) 'vlspltgen 550: apres derniere serie de call vlx' 506 if (ok_iso_verif) then 507 call check_isotopes(zq,ij_begin,ij_end,'vlspltgen_loc 521') 508 endif !if (ok_iso_verif) then 494 call check_isotopes(zq,ij_begin,ij_end,'vlspltgen_loc 521') 509 495 510 496 ijb=ij_begin … … 541 527 ENDDO !DO iq=1,nqtot 542 528 543 if (ok_iso_verif) then 544 call check_isotopes(q,ij_begin,ij_end,'vlspltgen_loc 557') 545 endif !if (ok_iso_verif) then 529 call check_isotopes(q,ij_begin,ij_end,'vlspltgen_loc 557') 546 530 547 531 c$OMP BARRIER -
LMDZ6/trunk/libf/dyn3dmem/vlspltqs_loc.F
r4052 r4143 13 13 USE parallel_lmdz 14 14 USE infotrac, ONLY : nqtot,tracers, ! CRisi & 15 & qperemin,masseqmin,ratiomin! MVals et CRisi15 & min_qParent,min_qMass,min_ratio ! MVals et CRisi 16 16 IMPLICIT NONE 17 17 c … … 346 346 DO ij=ijb,ije 347 347 !MVals: veiller a ce qu'on n'ait pas de denominateur nul 348 masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),m asseqmin)349 if (q(ij,l,iq).gt. qperemin) then ! modif 13 nov 2020348 masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),min_qMass) 349 if (q(ij,l,iq).gt.min_qParent) then ! modif 13 nov 2020 350 350 Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq) 351 351 else 352 Ratio(ij,l,iq2)= ratiomin352 Ratio(ij,l,iq2)=min_ratio 353 353 endif 354 354 enddo … … 370 370 DO ij=ijb+1,ije 371 371 !MVals: veiller a ce qu'on n'ait pas de denominateur nul 372 new_m=max(masse(ij,l,iq)+u_m(ij-1,l)-u_m(ij,l),m asseqmin)372 new_m=max(masse(ij,l,iq)+u_m(ij-1,l)-u_m(ij,l),min_qMass) 373 373 q(ij,l,iq)=(q(ij,l,iq)*masse(ij,l,iq)+ 374 374 & u_mq(ij-1,l)-u_mq(ij,l)) … … 423 423 USE parallel_lmdz 424 424 USE infotrac, ONLY : nqtot,tracers, ! CRisi & 425 & qperemin,masseqmin,ratiomin! MVals et CRisi425 & min_qParent,min_qMass,min_ratio ! MVals et CRisi 426 426 USE comconst_mod, ONLY: pi 427 427 IMPLICIT NONE … … 751 751 DO ij=ijbm,ijem 752 752 !MVals: veiller a ce qu'on n'ait pas de denominateur nul 753 masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),m asseqmin)753 masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),min_qMass) 754 754 enddo !DO ij=ijbm,ijem 755 755 … … 758 758 !MVals: veiller a ce qu'on n'ait pas de denominateur nul 759 759 !write(lunout,*) 'ij,l,q(ij,l,iq)=',ij,l,q(ij,l,iq) 760 if (q(ij,l,iq).gt. qperemin) then ! modif 13 nov 2020760 if (q(ij,l,iq).gt.min_qParent) then ! modif 13 nov 2020 761 761 Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq) 762 762 else 763 Ratio(ij,l,iq2)= ratiomin763 Ratio(ij,l,iq2)=min_ratio 764 764 endif 765 765 enddo !DO ij=ijbm,ijem -
LMDZ6/trunk/libf/misc/readTracFiles_mod.f90
r4140 r4143 866 866 !=== NOTES: ==== 867 867 !=== * Most of the "isot" components have been defined in the calling routine (initIsotopes): ==== 868 !=== parent, nzone, zone(:), niso, keys(:)%name, ntiso, trac(:), nphas, phas, iq TraPha(:,:), itZonPhi(:,:) ====868 !=== parent, nzone, zone(:), niso, keys(:)%name, ntiso, trac(:), nphas, phas, iqIsoPha(:,:), itZonPhi(:,:) ==== 869 869 !=== * Same syntax for isotopes file and "tracer.def": a tracers section contains one line for each of its isotopes ==== 870 870 !=== * Each tracers section can contain a "params" virtual isotope line of isotopes parameters default values ==== … … 986 986 str = PACK(delPhase(t(:)%name), MASK=ll) 987 987 CALL strReduce(str) 988 i%ntiso = i%niso + SIZE(str) !--- Number of isotopes + their geographic tracers [nt raciso]988 i%ntiso = i%niso + SIZE(str) !--- Number of isotopes + their geographic tracers [ntiso] 989 989 ALLOCATE(i%trac(i%ntiso)) 990 990 FORALL(it = 1:i%niso) i%trac(it) = i%keys(it)%name … … 1009 1009 !=== Table used to get iq (index in dyn array, size nqtot) from the isotope and phase indexes ; the full isotopes list 1010 1010 ! (including tagging tracers) is sorted this way: iso1, iso2, ..., iso1_zone1, iso2_zone1, ..., iso1_zoneN, iso2_zoneN 1011 i%iq TraPha = RESHAPE( [( (strIdx(t%name, addPhase(i%trac(it),i%phase(ip:ip))), it=1, i%ntiso), ip=1, i%nphas)], &1011 i%iqIsoPha = RESHAPE( [( (strIdx(t%name, addPhase(i%trac(it),i%phase(ip:ip))), it=1, i%ntiso), ip=1, i%nphas)], & 1012 1012 [i%ntiso, i%nphas] ) 1013 1013 !=== Table used to get ix (index in tagging tracers isotopes list, size ntiso) from the zone and isotope indexes … … 1407 1407 IF(PRESENT(iPhase)) iPhase = 1 !--- Default: gaseous phase 1408 1408 lH2O=.FALSE. 1409 IF(LEN_TRIM(oldName) >3) THEN1410 lH2O = oldName(1:3)=='H2O' .AND. INDEX(old_phases,oldName(4:4))/=0 !---H2O<phase>*,with phase=="v", "l", "i" or "r"1411 IF(LEN_TRIM(oldName) > 4) lH2O = lH2O .AND. oldName(5:5) =='_' !---H2O<phase>_*, with phase=="v", "l", "i" or "r"1409 IF(LEN_TRIM(oldName) > 3) THEN 1410 lH2O = oldName(1:3)=='H2O' .AND. INDEX(old_phases,oldName(4:4))/=0 !--- H2O<phase>*, with phase=="v", "l", "i" or "r" 1411 IF(LEN_TRIM(oldName) > 4) lH2O = lH2O .AND. oldName(5:5) == '_' !--- H2O<phase>_*, with phase=="v", "l", "i" or "r" 1412 1412 END IF 1413 1413 IF(.NOT.lH2O) RETURN 1414 1414 IF(LEN_TRIM(oldName)>3) THEN; IF(INDEX(old_Phases,oldName(4:4))==0) RETURN; END IF 1415 1416 1417 1415 lerr = strParse(oldName, '_', tmp, n=nt) 1418 1416 ip = strIdx([('H2O'//old_phases(ip:ip), ip=1, nphases)], tmp(1)) !--- Phase index (/=0 if any) -
LMDZ6/trunk/libf/misc/trac_types_mod.F90
r4120 r4143 47 47 INTEGER :: ntiso = 0 !--- Number of isotopes, including tagging tracers 48 48 INTEGER :: nphas = 0 !--- Number phases 49 INTEGER, ALLOCATABLE :: iq TraPha(:,:) !--- Idx in "tracers(1:nqtot)" = f(name(1:ntiso)),phas)50 !--- "iq TraPha" former name: "iqiso"49 INTEGER, ALLOCATABLE :: iqIsoPha(:,:) !--- Idx in "tracers(1:nqtot)" = f(name(1:ntiso)),phas) 50 !--- "iqIsoPha" former name: "iqiso" 51 51 INTEGER, ALLOCATABLE :: itZonIso(:,:) !--- Idx in "trac(1:ntiso)" = f(zone, name(1:niso)) 52 52 !--- "itZonIso" former name: "index_trac" -
LMDZ6/trunk/libf/phylmd/calltherm.F90
r4089 r4143 30 30 USE print_control_mod, ONLY: prt_level,lunout 31 31 #ifdef ISO 32 use infotrac_phy, ONLY: nt raciso32 use infotrac_phy, ONLY: ntiso 33 33 #ifdef ISOVERIF 34 34 USE isotopes_mod, ONLY: iso_eau,iso_HDO … … 145 145 146 146 #ifdef ISO 147 REAL xt_seri(nt raciso,klon,klev),xtmemoire(ntraciso,klon,klev)148 REAL d_xt_ajs(nt raciso,klon,klev)149 real d_xt_the(nt raciso,klon,klev)147 REAL xt_seri(ntiso,klon,klev),xtmemoire(ntiso,klon,klev) 148 REAL d_xt_ajs(ntiso,klon,klev) 149 real d_xt_the(ntiso,klon,klev) 150 150 #ifdef DIAGISO 151 151 real q_the(klon,klev) 152 real xt_the(nt raciso,klon,klev)152 real xt_the(ntiso,klon,klev) 153 153 #endif 154 154 real qprec(klon,klev) … … 205 205 nbptspb=nbptspb+1 206 206 #ifdef ISO 207 do ixt=1,nt raciso207 do ixt=1,ntiso 208 208 xt_seri(ixt,i,k)=1.e-15*(xt_seri(ixt,i,k)/qprec(i,k)) 209 209 ! xt_seri(ixt,i,k)=1.e-15*(Rdefault(index_iso(ixt))) … … 228 228 call iso_verif_egalite_vect2D( & 229 229 & xt_seri,q_seri, & 230 & 'calltherm 174',nt raciso,klon,klev)230 & 'calltherm 174',ntiso,klon,klev) 231 231 endif !if (iso_eau.gt.0) then 232 232 #endif … … 360 360 & +zdetr_therm(:,k)*fact(:) 361 361 #ifdef ISO 362 do ixt=1,nt raciso362 do ixt=1,ntiso 363 363 d_xt_the(ixt,:,k)=d_xt_the(ixt,:,k)*dtime*fact(:) 364 364 enddo … … 398 398 call iso_verif_aberrant_enc_vect2D( & 399 399 & xt_seri,q_seri, & 400 & 'calltherm 353, apres ajout d_xt_the',nt raciso,klon,klev)400 & 'calltherm 353, apres ajout d_xt_the',ntiso,klon,klev) 401 401 endif 402 402 #endif … … 424 424 nbptspb=nbptspb+1 425 425 #ifdef ISO 426 do ixt=1,nt raciso426 do ixt=1,ntiso 427 427 xt_seri(ixt,i,k)=1.e-15*(xtmemoire(ixt,i,k)/qmemoire(i,k)) 428 428 enddo … … 440 440 call iso_verif_aberrant_enc_vect2D( & 441 441 & xt_seri,q_seri, & 442 & 'calltherm 393, apres bidouille q<0',nt raciso,klon,klev)442 & 'calltherm 393, apres bidouille q<0',ntiso,klon,klev) 443 443 endif 444 444 #endif -
LMDZ6/trunk/libf/phylmd/infotrac_phy.F90
r4138 r4143 27 27 PUBLIC :: niso, nzone, nphas, ntiso !--- " " numbers + isotopes & tagging tracers number 28 28 PUBLIC :: itZonIso !--- iq = function(tagging zone idx, isotope idx) 29 PUBLIC :: iq TraPha !--- idx of tagging tracer in iName = function(isotope idx, phase idx)29 PUBLIC :: iqIsoPha !--- idx of tagging tracer in iName = function(isotope idx, phase idx) 30 30 PUBLIC :: isoCheck !--- Run isotopes checking routines 31 31 !=== FOR BOTH TRACERS AND ISOTOPES 32 32 PUBLIC :: getKey !--- Get a key from "tracers" or "isotope" 33 34 PUBLIC :: ntraciso, ntraceurs_zone, indnum_fn_num, use_iso, index_trac, iqiso35 PUBLIC :: niso_possibles, ok_iso_verif36 33 37 34 INTERFACE isoSelect; MODULE PROCEDURE isoSelectByIndex, isoSelectByName; END INTERFACE isoSelect … … 96 93 ! | zone | nzone | Geographic tagging zones list + number | / | ntraceurs_zone | | 97 94 ! | phase | nphas | Phases list + number | | [g][l][s], 1:3 | 98 ! | iq TraPha | Index in "qx" = f(name(1:ntiso)),phas) | iqiso | 1:nqtot |95 ! | iqIsoPha | Index in "qx" = f(name(1:ntiso)),phas) | iqiso | 1:nqtot | 99 96 ! | itZonIso | Index in "trac(1:ntiso)"= f(zone, name(1:niso)) | index_trac | 1:ntiso | 100 97 ! +-----------------+--------------------------------------------------+--------------------+-----------------+ … … 126 123 nphas, ntiso, & !--- NUMBER OF PHASES AND ISOTOPES + ISOTOPIC TAGGING TRACERS 127 124 itZonIso(:,:), & !--- INDEX IN "isoTrac" AS f(tagging zone idx, isotope idx) 128 iq TraPha(:,:) !--- INDEX IN "qx" AS f(isotopic tracer idx, phase idx)129 !$OMP THREADPRIVATE(isotope, ixIso,iH2O, isoCheck, isoKeys, isoName,isoZone,isoPhas, niso,nzone,nphas,ntiso, itZonIso,iq TraPha)125 iqIsoPha(:,:) !--- INDEX IN "qx" AS f(isotopic tracer idx, phase idx) 126 !$OMP THREADPRIVATE(isotope, ixIso,iH2O, isoCheck, isoKeys, isoName,isoZone,isoPhas, niso,nzone,nphas,ntiso, itZonIso,iqIsoPha) 130 127 131 128 !=== VARIABLES FOR ISOTOPES INITIALIZATION AND FOR INCA … … 133 130 pbl_flg(:) !--- Boundary layer activation ; needed for INCA (nbtr) 134 131 !$OMP THREADPRIVATE(conv_flg, pbl_flg) 135 136 !--- Aliases for older names + quantities to be removed (will be replaced by:)137 INTEGER, POINTER, SAVE :: ntraciso, ntraceurs_zone !--- -> ntiso, nzone138 !$OMP THREADPRIVATE (ntraciso, ntraceurs_zone)139 INTEGER, POINTER, SAVE :: index_trac(:,:), iqiso(:,:) !--- -> itZonIso, iqTraPha140 !$OMP THREADPRIVATE (index_trac, iqiso)141 INTEGER, SAVE :: niso_possibles !--- suppressed (use effective niso instead)142 !$OMP THREADPRIVATE(niso_possibles)143 LOGICAL, SAVE :: ok_iso_verif !--- -> isoCheck144 !$OMP THREADPRIVATE(ok_iso_verif)145 LOGICAL, SAVE, ALLOCATABLE :: use_iso(:) !--- suppressed146 !$OMP THREADPRIVATE (use_iso)147 INTEGER, SAVE, ALLOCATABLE :: indnum_fn_num(:)148 !$OMP THREADPRIVATE (indnum_fn_num)149 132 150 133 #ifdef CPP_StratAer … … 190 173 191 174 !=== Determine selected isotopes class related quantities: 192 ! ixIso, isotope, niso,isoKeys, ntiso,isoName, nzone,isoZone, nphas,isoPhas, itZonIso, iq TraPha, isoCheck175 ! ixIso, isotope, niso,isoKeys, ntiso,isoName, nzone,isoZone, nphas,isoPhas, itZonIso, iqIsoPha, isoCheck 193 176 IF(.NOT.isoSelect('H2O')) iH2O = ixIso 194 177 IF(prt_level > 1) THEN … … 221 204 END IF 222 205 #endif 223 224 !--- Isotopic quantities (to be removed soon)225 ntraciso => ntiso226 ntraceurs_zone => nzone227 iqiso => iqTraPha228 index_trac => itZonIso229 ok_iso_verif = isoCheck230 niso_possibles = SIZE(tnom_iso)231 indnum_fn_num = [(strIdx(isotope%keys(:)%name, tnom_iso(ixt)), ixt=1, niso_possibles)]232 use_iso = indnum_fn_num /= 0233 206 #ifdef ISOVERIF 234 207 CALL msg('iso_iName = '//strStack(int2str(PACK(tracers(:)%iso_iName, MASK=tracers(:)%iso_iGroup==iH2O))), modname) … … 275 248 isoPhas => isotope%phase; nphas => isotope%nphas 276 249 itZonIso => isotope%itZonIso; isoCheck => isotope%check 277 iq TraPha => isotope%iqTraPha250 iqIsoPha => isotope%iqIsoPha 278 251 END FUNCTION isoSelectByIndex 279 252 !============================================================================================================================== -
LMDZ6/trunk/libf/phylmd/phys_output_mod.F90
r4120 r4143 35 35 USE iophy 36 36 USE dimphy 37 USE infotrac_phy, ONLY: nqtot, tracers, type_trac, niso , ntraciso37 USE infotrac_phy, ONLY: nqtot, tracers, type_trac, niso 38 38 USE strings_mod, ONLY: maxlen 39 39 USE ioipsl -
LMDZ6/trunk/libf/phylmd/phys_output_write_mod.F90
r4120 r4143 25 25 26 26 USE dimphy, ONLY: klon, klev, klevp1 27 USE infotrac_phy, ONLY: nbtr, nqtot, nqo, type_trac, tracers, niso, nt raciso27 USE infotrac_phy, ONLY: nbtr, nqtot, nqo, type_trac, tracers, niso, ntiso 28 28 USE strings_mod, ONLY: maxlen 29 29 USE mod_phys_lmdz_para, ONLY: is_north_pole_phy,is_south_pole_phy … … 2598 2598 2599 2599 #ifdef ISO 2600 do ixt=1,nt raciso2600 do ixt=1,ntiso 2601 2601 ! write(*,*) 'ixt' 2602 2602 IF (vars_defined) zx_tmp_fi2d(:) = xtrain_fall(ixt,:) + xtsnow_fall(ixt,:) … … 2652 2652 2653 2653 !write(*,*) 'phys_output_write_mod 2531' 2654 enddo !do ixt=1,ntraciso2654 enddo 2655 2655 #endif 2656 2656 -
LMDZ6/trunk/libf/phylmd/phys_state_var_mod.F90
r4088 r4143 499 499 USE infotrac_phy, ONLY : nbtr 500 500 #ifdef ISO 501 USE infotrac_phy, ONLY : ntraciso ,niso501 USE infotrac_phy, ONLY : ntraciso=>ntiso,niso 502 502 #endif 503 503 USE indice_sol_mod -
LMDZ6/trunk/libf/phylmd/physiq_mod.F90
r4140 r4143 444 444 !====================================================================== 445 445 ! 446 INTEGER ivap ! indice de traceurs pour vapeur d'eau 447 PARAMETER (ivap=1) 448 INTEGER iliq ! indice de traceurs pour eau liquide 449 PARAMETER (iliq=2) 450 INTEGER isol ! indice de traceurs pour eau glace 451 PARAMETER (isol=3) 452 INTEGER irneb ! indice de traceurs pour fraction nuageuse LS (optional) 453 PARAMETER (irneb=4) 446 ! indices de traceurs eau vapeur, liquide, glace, fraction nuageuse LS (optional) 447 INTEGER,SAVE :: ivap, iliq, isol, irneb 448 !$OMP THREADPRIVATE(ivap, iliq, isol, irneb) 454 449 ! 455 450 ! … … 1255 1250 1256 1251 IF (first) THEN 1252 ivap = strIdx(tracers(:)%name, addPhase('H2O', 'g')) 1253 iliq = strIdx(tracers(:)%name, addPhase('H2O', 'l')) 1254 isol = strIdx(tracers(:)%name, addPhase('H2O', 's')) 1255 irneb= strIdx(tracers(:)%name, addPhase('H2O', 'r')) 1257 1256 CALL init_etat0_limit_unstruct 1258 1257 IF (.NOT. create_etat0_limit) CALL init_limit_read(days_elapsed) -
LMDZ6/trunk/libf/phylmd/thermcell_main.F90
r4133 r4143 22 22 23 23 #ifdef ISO 24 USE infotrac_phy, ONLY : nt raciso24 USE infotrac_phy, ONLY : ntiso 25 25 #ifdef ISOVERIF 26 26 USE isotopes_mod, ONLY : iso_eau,iso_HDO … … 140 140 141 141 #ifdef ISO 142 REAL xtpo(nt raciso,ngrid,nlay),xtpdoadj(ntraciso,ngrid,nlay)143 REAL xtzo(nt raciso,ngrid,nlay)142 REAL xtpo(ntiso,ngrid,nlay),xtpdoadj(ntiso,ngrid,nlay) 143 REAL xtzo(ntiso,ngrid,nlay) 144 144 REAL xtpdoadj_tmp(ngrid,nlay) 145 145 REAL xtpo_tmp(ngrid,nlay) … … 368 368 & zlev,lmax,zmax,zmax0,zmix,wmax) 369 369 ! Attention, w2 est transforme en sa racine carree dans cette routine 370 ! Le probleme vient du fait que linter et lmix sont souvent égaux à1.370 ! Le probleme vient du fait que linter et lmix sont souvent egaux a 1. 371 371 wmax_tmp=0. 372 372 do l=1,nlay … … 488 488 489 489 #ifdef ISO 490 ! C Risi: on utilise directement la m ême routine491 do ixt=1,nt raciso490 ! C Risi: on utilise directement la meme routine 491 do ixt=1,ntiso 492 492 do ll=1,nlay 493 493 DO ig=1,ngrid … … 503 503 enddo 504 504 enddo 505 enddo !do ixt=1,ntraciso505 enddo 506 506 #endif 507 507 … … 749 749 ! nrlmd le 10/04/2012 Transport de la TKE par le thermique moyen pour la fermeture en ALP 750 750 ! On transporte pbl_tke pour donner therm_tke 751 ! Copie conforme de la subroutine DTKE dans physiq.F écrite par Frederic Hourdin751 ! Copie conforme de la subroutine DTKE dans physiq.F ecrite par Frederic Hourdin 752 752 753 753 !======================================================================= -
LMDZ6/trunk/libf/phylmdiso/add_phys_tend_mod.F90
r4004 r4143 39 39 USE mod_grid_phy_lmdz, ONLY: nbp_lev 40 40 #ifdef ISO 41 USE infotrac_phy, ONLY: ntraciso 41 USE infotrac_phy, ONLY: ntraciso=>ntiso 42 42 USE isotopes_mod, ONLY: iso_eau 43 43 #endif … … 154 154 155 155 #ifdef ISO 156 USE infotrac_phy, ONLY: ntraciso 156 USE infotrac_phy, ONLY: ntraciso=>ntiso 157 157 #ifdef ISOVERIF 158 158 USE isotopes_mod, ONLY: iso_eau -
LMDZ6/trunk/libf/phylmdiso/add_wake_tend.F90
r4004 r4143 18 18 USE print_control_mod, ONLY: prt_level 19 19 #ifdef ISO 20 USE infotrac_phy, ONLY: nt raciso20 USE infotrac_phy, ONLY: ntiso 21 21 USE phys_state_var_mod, ONLY: wake_deltaxt 22 22 #endif … … 31 31 INTEGER, INTENT (IN) :: abortphy 32 32 #ifdef ISO 33 REAL, DIMENSION(nt raciso,klon, klev), INTENT (IN):: zddeltaxt33 REAL, DIMENSION(ntiso, klon, klev), INTENT (IN) :: zddeltaxt 34 34 #endif 35 35 … … 61 61 wake_deltaq(i, l) = wake_deltaq(i, l) + zddeltaq(i,l) 62 62 #ifdef ISO 63 do ixt=1,nt raciso63 do ixt=1,ntiso 64 64 wake_deltaxt(ixt,i, l) = wake_deltaxt(ixt,i, l) + zddeltaxt(ixt,i,l) 65 65 enddo … … 69 69 wake_deltaq(i, l) = 0. 70 70 #ifdef ISO 71 do ixt=1,nt raciso71 do ixt=1,ntiso 72 72 wake_deltaxt(ixt,i, l) = 0.0 73 73 enddo -
LMDZ6/trunk/libf/phylmdiso/ajsec.F90
r4004 r4143 9 9 USE dimphy 10 10 #ifdef ISO 11 USE infotrac_phy, ONLY: ntraciso 11 USE infotrac_phy, ONLY: ntraciso =>ntiso 12 12 #ifdef ISOVERIF 13 13 USE isotopes_mod, ONLY : iso_eau,iso_HDO … … 303 303 USE dimphy 304 304 #ifdef ISO 305 USE infotrac_phy, ONLY: ntraciso 305 USE infotrac_phy, ONLY: ntraciso=>ntiso 306 306 #ifdef ISOVERIF 307 307 USE isotopes_mod, ONLY : iso_eau,iso_HDO -
LMDZ6/trunk/libf/phylmdiso/calwake.F90
r4033 r4143 35 35 USE print_control_mod, ONLY: mydebug=>debug , lunout, prt_level 36 36 #ifdef ISO 37 USE infotrac_phy, ONLY : ntraciso 37 USE infotrac_phy, ONLY : ntraciso=>ntiso 38 38 #ifdef ISOVERIF 39 39 USE isotopes_mod, ONLY: iso_eau -
LMDZ6/trunk/libf/phylmdiso/change_srf_frac_mod.F90
r4004 r4143 39 39 USE print_control_mod, ONLY: lunout 40 40 #ifdef ISO 41 USE infotrac_phy, ONLY: nt raciso41 USE infotrac_phy, ONLY: ntiso 42 42 #endif 43 43 … … 66 66 !albedo SB <<< 67 67 #ifdef ISO 68 REAL, DIMENSION(nt raciso,klon,nbsrf), INTENT(INOUT) :: xtevap68 REAL, DIMENSION(ntiso,klon,nbsrf), INTENT(INOUT) :: xtevap 69 69 #endif 70 70 -
LMDZ6/trunk/libf/phylmdiso/climb_hq_mod.F90
r4124 r4143 6 6 USE dimphy 7 7 #ifdef ISO 8 USE infotrac_phy, ONLY: ntraciso ! ajout C Risi pour isos8 USE infotrac_phy, ONLY: ntraciso=>ntiso ! ajout C Risi pour isos 9 9 #endif 10 10 … … 59 59 ) 60 60 #ifdef ISOVERIF 61 !USE infotrac_phy, ONLY: use_iso62 61 USE isotopes_mod, ONLY: iso_eau,iso_HDO 63 62 !USE isotopes_verif_mod, ONLY: errmax, errmaxrel -
LMDZ6/trunk/libf/phylmdiso/concvl.F90
r4004 r4143 44 44 USE infotrac_phy, ONLY: nbtr 45 45 #ifdef ISO 46 USE infotrac_phy, ONLY: ntraciso 46 USE infotrac_phy, ONLY: ntraciso=>ntiso 47 47 USE isotopes_mod, ONLY: iso_eau, bidouille_anti_divergence, ridicule, & 48 48 iso_eau,iso_HDO -
LMDZ6/trunk/libf/phylmdiso/cv30_routines.F90
r4050 r4143 165 165 ) 166 166 #ifdef ISO 167 USE infotrac_phy, ONLY: ntraciso 167 USE infotrac_phy, ONLY: ntraciso=>ntiso 168 168 #endif 169 169 IMPLICIT NONE … … 370 370 371 371 #ifdef ISO 372 USE infotrac_phy, ONLY: ntraciso 372 USE infotrac_phy, ONLY: ntraciso=>ntiso 373 373 USE isotopes_mod, ONLY: pxtmelt,pxtice,pxtmin,pxtmax,cond_temp_env, & 374 374 iso_eau,iso_HDO, ridicule … … 947 947 USE print_control_mod, ONLY: lunout 948 948 #ifdef ISO 949 use infotrac_phy, ONLY: ntraciso 949 use infotrac_phy, ONLY: ntraciso=>ntiso 950 950 use isotopes_mod, ONLY: essai_convergence, iso_eau,iso_HDO 951 951 #ifdef ISOVERIF … … 1133 1133 ! epmax_cape: ajout arguments 1134 1134 #ifdef ISO 1135 use infotrac_phy, ONLY: ntraciso 1135 use infotrac_phy, ONLY: ntraciso=>ntiso 1136 1136 USE isotopes_mod, ONLY: pxtmelt,pxtice,pxtmin,pxtmax,cond_temp_env, iso_eau,iso_HDO 1137 1137 USE isotopes_routines_mod, ONLY: condiso_liq_ice_vectall … … 1828 1828 1829 1829 #ifdef ISO 1830 use infotrac_phy, ONLY: ntraciso ,niso,index_trac1830 use infotrac_phy, ONLY: ntraciso=>ntiso,niso,itZonIso 1831 1831 USE isotopes_mod, ONLY: pxtmelt,pxtice,pxtmin,pxtmax, iso_eau,iso_HDO, & 1832 1832 ridicule … … 2616 2616 call iso_verif_traceur(xtclw(1,il,im), & 2617 2617 & 'condiso_liq_ice_vectiso_trac 358') 2618 if (iso_verif_positif_nostop(xtclw(i ndex_trac( &2618 if (iso_verif_positif_nostop(xtclw(itZonIso( & 2619 2619 & izone_cond,iso_eau),i,k)-xtclw(iso_eau,i,k) & 2620 2620 & ,'cv30_routines 909').eq.1) then … … 2624 2624 & niso,ntraciso,index_zone,izone_cond 2625 2625 stop 2626 endif !if (iso_verif_positif_nostop(xtclw(i ndex_trac(2626 endif !if (iso_verif_positif_nostop(xtclw(itZonIso( 2627 2627 #endif 2628 2628 enddo !do il = 1, ncum … … 2647 2647 & ) 2648 2648 #ifdef ISO 2649 use infotrac_phy, ONLY: ntraciso 2649 use infotrac_phy, ONLY: ntraciso=>ntiso 2650 2650 use isotopes_mod, ONLY: essai_convergence, iso_eau,iso_HDO,ridicule 2651 2651 use isotopes_routines_mod, ONLY: appel_stewart_vectall … … 2659 2659 #ifdef ISOTRAC 2660 2660 use isotrac_mod, only: option_cond,izone_cond 2661 use infotrac_phy, ONLY: i ndex_trac2661 use infotrac_phy, ONLY: itZonIso 2662 2662 #ifdef ISOVERIF 2663 2663 use isotopes_verif_mod, ONLY: iso_verif_traceur_justmass, & … … 2938 2938 ! on verifie que tout le detrainement est tagge condensat 2939 2939 if (iso_verif_positif_nostop( & 2940 & xtwdtrain(i ndex_trac(izone_cond,iso_eau),il) &2940 & xtwdtrain(itZonIso(izone_cond,iso_eau),il) & 2941 2941 & -xtwdtrain(iso_eau,il), & 2942 2942 & 'cv30_routines 2795').eq.1) then … … 3200 3200 ! if (option_tmin.ge.1) then 3201 3201 ! call iso_verif_positif(xtwater( 3202 ! : i ndex_trac(izone_cond,iso_eau),il,i+1)3202 ! : itZonIso(izone_cond,iso_eau),il,i+1) 3203 3203 ! : -xtwater(iso_eau,il,i+1), 3204 3204 ! : 'cv30_routines 3083') … … 3259 3259 ! if (option_tmin.ge.1) then 3260 3260 ! call iso_verif_positif(xtwater( 3261 ! : i ndex_trac(izone_cond,iso_eau),il,i)3261 ! : itZonIso(izone_cond,iso_eau),il,i) 3262 3262 ! : -xtwater(iso_eau,il,i), 3263 3263 ! : 'cv30_routines 3143') … … 3369 3369 & ) 3370 3370 #ifdef ISO 3371 use infotrac_phy, ONLY: ntraciso,niso, & 3372 & ntraceurs_zone,index_trac 3371 use infotrac_phy, ONLY: ntraciso=>ntiso, niso, nzone, itZonIso 3373 3372 use isotopes_mod, ONLY: essai_convergence,ridicule,iso_eau,iso_HDO,iso_O18 3374 3373 #ifdef ISOVERIF … … 5003 5002 do iiso = 1, niso 5004 5003 5005 ixt_ddft=i ndex_trac(izone_ddft,iiso)5004 ixt_ddft=itZonIso(izone_ddft,iiso) 5006 5005 if (mp(il,i).gt.mp(il,i+1)) then 5007 5006 fxtYe(iiso)=0.01*grav*dpinv*mp(il,i) & … … 5016 5015 & -mp(il,i)*(xtp(iiso,il,i)-xt(iiso,il,i-1))) 5017 5016 5018 ixt_poubelle=i ndex_trac(izone_poubelle,iiso)5017 ixt_poubelle=itZonIso(izone_poubelle,iiso) 5019 5018 fxt(ixt_ddft,il,i)=fxt(ixt_ddft,il,i)+fxtYe(iiso) 5020 5019 fxt(ixt_poubelle,il,i)=fxt(ixt_poubelle,il,i) & … … 5033 5032 & -mp(il,i)*(xtp(iiso,il,i)-xt(iiso,il,i-1))) 5034 5033 5035 ixt_ddft=i ndex_trac(izone_ddft,iiso)5034 ixt_ddft=itZonIso(izone_ddft,iiso) 5036 5035 fxtYe(iiso)=0.01*grav*dpinv*mp(il,i) & 5037 5036 & *(xt(ixt_ddft,il,i-1)-xt(ixt_ddft,il,i)) 5038 5037 fxt(ixt_ddft,il,i)=fxt(ixt_ddft,il,i)+fxtYe(iiso) 5039 5038 5040 ixt_revap=i ndex_trac(izone_revap,iiso)5039 ixt_revap=itZonIso(izone_revap,iiso) 5041 5040 fxt_revap(iiso)=0.01*grav*dpinv*(mp(il,i+1)* & 5042 5041 & (xtp(ixt_revap,il,i+1)-xt(ixt_revap,il,i)) & … … 5049 5048 & -xt(ixt_ddft,il,i)-xt(ixt_revap,il,i) 5050 5049 if (Xe(iiso).gt.ridicule) then 5051 do izone=1,n traceurs_zone5050 do izone=1,nzone 5052 5051 if ((izone.ne.izone_revap).and. & 5053 5052 & (izone.ne.izone_ddft)) then 5054 ixt=i ndex_trac(izone,iiso)5053 ixt=itZonIso(izone,iiso) 5055 5054 fxt(ixt,il,i)=fxt(ixt,il,i) & 5056 5055 & +xt(ixt,il,i)/Xe(iiso)*fxtXe(iiso) 5057 5056 endif !if ((izone.ne.izone_revap).and. 5058 enddo !do izone=1,n traceurs_zone5057 enddo !do izone=1,nzone 5059 5058 #ifdef ISOVERIF 5060 5059 ! write(*,*) 'iiso=',iiso … … 5078 5077 endif 5079 5078 #endif 5080 do izone=1,n traceurs_zone5079 do izone=1,nzone 5081 5080 if ((izone.ne.izone_revap).and. & 5082 5081 & (izone.ne.izone_ddft)) then 5083 ixt=i ndex_trac(izone,iiso)5082 ixt=itZonIso(izone,iiso) 5084 5083 if (izone.eq.izone_poubelle) then 5085 5084 fxt(ixt,il,i)=fxt(ixt,il,i)+fxtXe(iiso) … … 5088 5087 endif !if (izone.eq.izone_poubelle) then 5089 5088 endif !if ((izone.ne.izone_revap).and. 5090 enddo !do izone=1,n traceurs_zone5089 enddo !do izone=1,nzone 5091 5090 #ifdef ISOVERIF 5092 5091 call iso_verif_traceur_justmass(fxt(1,il,i), & … … 5237 5236 enddo !do ixt = 1+niso,ntraciso 5238 5237 ! write(*,*) 'tmp cv3_yield 4165: i,il=',i,il 5239 ! ixt_poubelle=i ndex_trac(izone_poubelle,iso_eau)5240 ! ixt_ddft=i ndex_trac(izone_ddft,iso_eau)5238 ! ixt_poubelle=itZonIso(izone_poubelle,iso_eau) 5239 ! ixt_ddft=itZonIso(izone_ddft,iso_eau) 5241 5240 ! write(*,*) 'delt*fxt(ixt_poubelle,il,i)=', 5242 5241 ! : delt*fxt(ixt_poubelle,il,i) … … 5244 5243 ! write(*,*) 'xt(iso_eau,il,i)=',xt(iso_eau,il,i) 5245 5244 do iiso = 1, niso 5246 ixt_poubelle=i ndex_trac(izone_poubelle,iiso)5247 ixt_ddft=i ndex_trac(izone_ddft,iiso)5245 ixt_poubelle=itZonIso(izone_poubelle,iiso) 5246 ixt_ddft=itZonIso(izone_ddft,iiso) 5248 5247 if (mp(il,i).gt.mp(il,i+1)) then 5249 5248 fxtYe(iiso)=0.01*grav*dpinv*mp(il,i) & … … 6111 6110 6112 6111 #ifdef ISO 6113 use infotrac_phy, ONLY: ntraciso 6112 use infotrac_phy, ONLY: ntraciso=>ntiso 6114 6113 #ifdef ISOVERIF 6115 6114 use isotopes_verif_mod, ONLY: Tmin_verif,iso_verif_aberrant, & -
LMDZ6/trunk/libf/phylmdiso/cv3_enthalpmix.F90
r4004 r4143 7 7 ) 8 8 #ifdef ISO 9 use infotrac_phy, ONLY: nt raciso9 use infotrac_phy, ONLY: ntiso 10 10 #endif 11 11 ! ************************************************************** … … 43 43 REAL, DIMENSION (len,nd+1), INTENT (IN) :: ph 44 44 #ifdef ISO 45 REAL, DIMENSION (nt raciso,len,nd), INTENT (IN) :: xt45 REAL, DIMENSION (ntiso,len,nd), INTENT (IN) :: xt 46 46 #endif 47 47 !input/output: … … 54 54 REAL, DIMENSION (len,nd), INTENT (OUT) :: wi 55 55 #ifdef ISO 56 REAL, DIMENSION (nt raciso,len), INTENT (OUT) :: xtmix56 REAL, DIMENSION (ntiso,len), INTENT (OUT) :: xtmix 57 57 #endif 58 58 !internal variables : … … 153 153 vmix(i) = vmix(i) + v(i, j)*wi(i, j) 154 154 #ifdef ISO 155 do ixt=1,nt raciso155 do ixt=1,ntiso 156 156 xtmix(ixt,i) = xtmix(ixt,i) + xt(ixt,i, j)*wi(i, j) 157 157 enddo -
LMDZ6/trunk/libf/phylmdiso/cv3_estatmix.F90
r4004 r4143 7 7 ) 8 8 #ifdef ISO 9 use infotrac_phy, ONLY: nt raciso9 use infotrac_phy, ONLY: ntiso 10 10 #endif 11 11 ! ************************************************************** … … 46 46 REAL, DIMENSION (len,nd+1), INTENT (IN) :: ph 47 47 #ifdef ISO 48 REAL, DIMENSION (nt raciso,len,nd), INTENT (IN) :: xt48 REAL, DIMENSION (ntiso,len,nd), INTENT (IN) :: xt 49 49 #endif 50 50 !input/output: … … 57 57 REAL, DIMENSION (len,nd), INTENT (OUT) :: wi 58 58 #ifdef ISO 59 REAL, DIMENSION (nt raciso,len), INTENT (OUT) :: xtmix59 REAL, DIMENSION (ntiso,len), INTENT (OUT) :: xtmix 60 60 #endif 61 61 !internal variables : … … 153 153 vmix(i) = vmix(i) + v(i, j)*wi(i, j) 154 154 #ifdef ISO 155 do ixt=1,nt raciso155 do ixt=1,ntiso 156 156 xtmix(ixt,i) = xtmix(ixt,i) + xt(ixt,i, j)*wi(i, j) 157 157 enddo -
LMDZ6/trunk/libf/phylmdiso/cv3_routines.F90
r4123 r4143 314 314 & ) 315 315 #ifdef ISO 316 use infotrac_phy, ONLY: ntraciso 316 use infotrac_phy, ONLY: ntraciso=>ntiso 317 317 #ifdef ISOVERIF 318 318 use isotopes_verif_mod, ONLY: iso_verif_positif,iso_verif_noNaN,iso_verif_egalite … … 685 685 & ) 686 686 #ifdef ISO 687 USE infotrac_phy, ONLY: ntraciso 687 USE infotrac_phy, ONLY: ntraciso=>ntiso 688 688 USE isotopes_mod, ONLY: pxtmelt,pxtice,pxtmin,pxtmax,cond_temp_env, & 689 689 iso_eau,iso_HDO,ridicule … … 1274 1274 USE print_control_mod, ONLY: lunout 1275 1275 #ifdef ISO 1276 use infotrac_phy, ONLY: ntraciso 1276 use infotrac_phy, ONLY: ntraciso=>ntiso 1277 1277 use isotopes_mod, ONLY: essai_convergence, iso_eau,iso_HDO 1278 1278 #ifdef ISOVERIF … … 1474 1474 USE print_control_mod, ONLY: prt_level 1475 1475 #ifdef ISO 1476 use infotrac_phy, ONLY: ntraciso 1476 use infotrac_phy, ONLY: ntraciso=>ntiso 1477 1477 USE isotopes_mod, ONLY: pxtmelt,pxtice,pxtmin,pxtmax,cond_temp_env, & 1478 1478 iso_eau,iso_HDO … … 2777 2777 2778 2778 #ifdef ISO 2779 use infotrac_phy, ONLY: ntraciso ,niso,index_trac2779 use infotrac_phy, ONLY: ntraciso=>ntiso,niso,itZonIso 2780 2780 USE isotopes_mod, ONLY: pxtmelt,pxtice,pxtmin,pxtmax, iso_eau,iso_HDO, & 2781 2781 ridicule … … 3580 3580 call iso_verif_traceur(xtclw(1,il,im), & 3581 3581 & 'condiso_liq_ice_vectiso_trac 358') 3582 if (iso_verif_positif_nostop(xtclw(i ndex_trac( &3582 if (iso_verif_positif_nostop(xtclw(itZonIso( & 3583 3583 & izone_cond,iso_eau),i,k)-xtclw(iso_eau,i,k) & 3584 3584 & ,'cv3_routines 909').eq.1) then … … 3588 3588 & niso,ntraciso,index_zone,izone_cond 3589 3589 stop 3590 endif !if (iso_verif_positif_nostop(xtclw(i ndex_trac(3590 endif !if (iso_verif_positif_nostop(xtclw(itZonIso( 3591 3591 #endif 3592 3592 enddo !do il = 1, ncum … … 3615 3615 USE print_control_mod, ONLY: prt_level, lunout 3616 3616 #ifdef ISO 3617 use infotrac_phy, ONLY: ntraciso 3617 use infotrac_phy, ONLY: ntraciso=>ntiso 3618 3618 use isotopes_mod, ONLY: essai_convergence, iso_eau,iso_HDO, & 3619 3619 ridicule … … 3628 3628 #ifdef ISOTRAC 3629 3629 use isotrac_mod, only: option_cond,izone_cond 3630 use infotrac_phy, ONLY: i ndex_trac3630 use infotrac_phy, ONLY: itZonIso 3631 3631 #ifdef ISOVERIF 3632 3632 use isotopes_verif_mod, ONLY: iso_verif_traceur_justmass, & … … 3993 3993 ! on verifie que tout le detrainement est tagge condensat 3994 3994 if (iso_verif_positif_nostop( & 3995 & xtwdtrain(i ndex_trac(izone_cond,iso_eau),il) &3995 & xtwdtrain(itZonIso(izone_cond,iso_eau),il) & 3996 3996 & -xtwdtrain(iso_eau,il), & 3997 3997 & 'cv3_routines 2795').eq.1) then … … 4535 4535 ! if (option_tmin.ge.1) then 4536 4536 ! call iso_verif_positif(xtwater( 4537 ! : i ndex_trac(izone_cond,iso_eau),il,i+1)4537 ! : itZonIso(izone_cond,iso_eau),il,i+1) 4538 4538 ! : -xtwater(iso_eau,il,i+1), 4539 4539 ! : 'cv3_routines 3083') … … 4602 4602 ! if (option_tmin.ge.1) then 4603 4603 ! call iso_verif_positif(xtwater( 4604 ! : i ndex_trac(izone_cond,iso_eau),il,i)4604 ! : itZonIso(izone_cond,iso_eau),il,i) 4605 4605 ! : -xtwater(iso_eau,il,i), 4606 4606 ! : 'cv3_routines 3143') … … 4741 4741 4742 4742 #ifdef ISO 4743 use infotrac_phy, ONLY: ntraciso,niso, & 4744 & ntraceurs_zone,index_trac 4743 use infotrac_phy, ONLY: ntraciso=>ntiso, niso, nzone, itZonIso 4745 4744 use isotopes_mod, ONLY: essai_convergence,ridicule,iso_eau,iso_HDO,iso_O18 4746 4745 #ifdef ISOVERIF … … 5889 5888 do iiso = 1, niso 5890 5889 5891 ixt_ddft=i ndex_trac(izone_ddft,iiso)5890 ixt_ddft=itZonIso(izone_ddft,iiso) 5892 5891 if (mp(il,i).gt.mp(il,i+1)) then 5893 5892 fxtYe(iiso)=0.01*grav*dpinv*mp(il,i) & … … 5902 5901 & -mp(il,i)*(xtp(iiso,il,i)-xt(iiso,il,i-1))) 5903 5902 5904 ixt_poubelle=i ndex_trac(izone_poubelle,iiso)5903 ixt_poubelle=itZonIso(izone_poubelle,iiso) 5905 5904 fxt(ixt_ddft,il,i)=fxt(ixt_ddft,il,i)+fxtYe(iiso) 5906 5905 fxt(ixt_poubelle,il,i)=fxt(ixt_poubelle,il,i) & … … 5919 5918 & -mp(il,i)*(xtp(iiso,il,i)-xt(iiso,il,i-1))) 5920 5919 5921 ixt_ddft=i ndex_trac(izone_ddft,iiso)5920 ixt_ddft=itZonIso(izone_ddft,iiso) 5922 5921 fxtYe(iiso)=0.01*grav*dpinv*mp(il,i) & 5923 5922 & *(xt(ixt_ddft,il,i-1)-xt(ixt_ddft,il,i)) 5924 5923 fxt(ixt_ddft,il,i)=fxt(ixt_ddft,il,i)+fxtYe(iiso) 5925 5924 5926 ixt_revap=i ndex_trac(izone_revap,iiso)5925 ixt_revap=itZonIso(izone_revap,iiso) 5927 5926 fxt_revap(iiso)=0.01*grav*dpinv*(mp(il,i+1)* & 5928 5927 & (xtp(ixt_revap,il,i+1)-xt(ixt_revap,il,i)) & … … 5935 5934 & -xt(ixt_ddft,il,i)-xt(ixt_revap,il,i) 5936 5935 if (Xe(iiso).gt.ridicule) then 5937 do izone=1,n traceurs_zone5936 do izone=1,nzone 5938 5937 if ((izone.ne.izone_revap).and. & 5939 5938 & (izone.ne.izone_ddft)) then 5940 ixt=i ndex_trac(izone,iiso)5939 ixt=itZonIso(izone,iiso) 5941 5940 fxt(ixt,il,i)=fxt(ixt,il,i) & 5942 5941 & +xt(ixt,il,i)/Xe(iiso)*fxtXe(iiso) 5943 5942 endif !if ((izone.ne.izone_revap).and. 5944 enddo !do izone=1,n traceurs_zone5943 enddo !do izone=1,nzone 5945 5944 #ifdef ISOVERIF 5946 5945 ! write(*,*) 'iiso=',iiso … … 5964 5963 endif 5965 5964 #endif 5966 do izone=1,n traceurs_zone5965 do izone=1,nzone 5967 5966 if ((izone.ne.izone_revap).and. & 5968 5967 & (izone.ne.izone_ddft)) then 5969 ixt=i ndex_trac(izone,iiso)5968 ixt=itZonIso(izone,iiso) 5970 5969 if (izone.eq.izone_poubelle) then 5971 5970 fxt(ixt,il,i)=fxt(ixt,il,i)+fxtXe(iiso) … … 5974 5973 endif !if (izone.eq.izone_poubelle) then 5975 5974 endif !if ((izone.ne.izone_revap).and. 5976 enddo !do izone=1,n traceurs_zone5975 enddo !do izone=1,nzone 5977 5976 #ifdef ISOVERIF 5978 5977 call iso_verif_traceur_justmass(fxt(1,il,i), & … … 7459 7458 & ) 7460 7459 #ifdef ISO 7461 use infotrac_phy, ONLY: ntraciso 7460 use infotrac_phy, ONLY: ntraciso=>ntiso 7462 7461 #ifdef ISOVERIF 7463 7462 use isotopes_verif_mod, ONLY: Tmin_verif,iso_verif_aberrant, & -
LMDZ6/trunk/libf/phylmdiso/cv3a_compress.F90
r4004 r4143 34 34 ! ************************************************************** 35 35 #ifdef ISO 36 use infotrac_phy, ONLY: ntraciso 36 use infotrac_phy, ONLY: ntraciso=>ntiso 37 37 use isotopes_mod, ONLY: essai_convergence, iso_eau,iso_HDO 38 38 #ifdef ISOVERIF -
LMDZ6/trunk/libf/phylmdiso/cv3a_uncompress.F90
r4004 r4143 54 54 55 55 #ifdef ISO 56 USE infotrac_phy, ONLY : ntraciso 56 USE infotrac_phy, ONLY : ntraciso=>ntiso 57 57 #endif 58 58 IMPLICIT NONE -
LMDZ6/trunk/libf/phylmdiso/cv3p_mixing.F90
r4033 r4143 21 21 USE add_phys_tend_mod, ONLY: fl_cor_ebil 22 22 #ifdef ISO 23 USE infotrac_phy, ONLY: ntraciso 23 USE infotrac_phy, ONLY: ntraciso=>ntiso 24 24 USE isotopes_mod, ONLY: pxtmelt,pxtice 25 25 USE isotopes_routines_mod, ONLY: condiso_liq_ice_vectall … … 1301 1301 call iso_verif_egalite_choix(xtent(iso_eau,il,im,jm), & 1302 1302 qent(il,im,jm),'cv3p_mixing 2112',errmax,errmaxrel) 1303 endif !if ( use_iso_eau) then1303 endif !if (iso_eau>0) then 1304 1304 #ifdef ISOTRAC 1305 1305 call iso_verif_traceur_justmass(xtelij(1,il,im,jm), & … … 1353 1353 ! call iso_verif_traceur(xtclw(1,il,im), & 1354 1354 ! 'cv3p_mixing 358') 1355 ! if (iso_verif_positif_nostop(xtclw(i ndex_trac( &1355 ! if (iso_verif_positif_nostop(xtclw(itZonIso( & 1356 1356 ! izone_cond,iso_eau),i,k)-xtclw(iso_eau,i,k) & 1357 1357 ! ,'cv3p_mixing 909').eq.1) then … … 1361 1361 ! niso,ntraciso,index_zone,izone_cond 1362 1362 ! stop 1363 ! endif !if (iso_verif_positif_nostop(xtclw(i ndex_trac(1363 ! endif !if (iso_verif_positif_nostop(xtclw(itZonIso( 1364 1364 !#endif 1365 1365 ! enddo !do il = 1, ncum -
LMDZ6/trunk/libf/phylmdiso/cv_driver.F90
r4004 r4143 25 25 USE dimphy 26 26 #ifdef ISO 27 USE infotrac_phy, ONLY: ntraciso ,niso,index_trac,ntraceurs_zone27 USE infotrac_phy, ONLY: ntraciso=>ntiso,niso,itZonIso,nzone 28 28 USE isotopes_mod, ONLY: iso_eau,iso_HDO,ridicule,bidouille_anti_divergence 29 29 #ifdef ISOVERIF … … 511 511 CALL cv_param(nd) 512 512 #ifdef ISO 513 write(*,*) 'cv_driver 454: isos pas pr évus ici'513 write(*,*) 'cv_driver 454: isos pas prevus ici' 514 514 stop 515 515 #endif … … 687 687 !c--debug 688 688 #ifdef ISOVERIF 689 write(*,*) 'cv_driver 621: apr ès cv3_undilute1'689 write(*,*) 'cv_driver 621: apres cv3_undilute1' 690 690 do k = 1, klev 691 691 do i = 1, klon … … 752 752 !write(*,*) 'xt1(iso_eau,1,1),q1(1,1)=',xt1(iso_eau,1,1),q1(1,1) 753 753 !write(*,*) 'xt1(iso_eau,14,1),q1(14,1)=',xt1(iso_eau,14,1),q1(14,1) 754 !write(*,*) 'iso_eau,use_iso=',iso_eau,use_iso755 754 do k = 1, klev 756 755 do i = 1, nloc … … 783 782 #ifdef ISO 784 783 #ifdef ISOVERIF 785 write(*,*) 'cv_driver 720: apr ès cv3_compress'784 write(*,*) 'cv_driver 720: apres cv3_compress' 786 785 do k = 1, klev 787 786 do i = 1, ncum … … 883 882 ,cape,ep,hp,icb,inb,clw,nk,t,h,lv & 884 883 ,epmax_diag) 885 ! on écrase ep et recalcule hp884 ! on écrase ep et recalcule hp 886 885 END IF 887 886 … … 910 909 #ifdef ISO 911 910 #ifdef ISOVERIF 912 write(*,*) 'cv_driver 837: apr ès cv3_mixing'911 write(*,*) 'cv_driver 837: apres cv3_mixing' 913 912 do k = 1, klev 914 913 do j = 1, klev … … 925 924 call iso_verif_traceur_justmass(xtelij(1,i,j,k), & 926 925 & 'cv_driver 847') 927 ! on ne v érfier pas le deltaD ici car peut dépasser le seuil928 ! raisonable pour temp ératures très froides.926 ! on ne verifie pas le deltaD ici car peut depasser le seuil 927 ! raisonable pour temperatures tres froides. 929 928 #endif 930 929 enddo … … 940 939 call iso_verif_traceur(xt(1,i,k),'cv_driver 856') 941 940 if (option_tmin.eq.1) then 942 if (iso_verif_positif_nostop(xtclw(i ndex_trac( &941 if (iso_verif_positif_nostop(xtclw(itZonIso( & 943 942 & izone_cond,iso_eau),i,k)-xtclw(iso_eau,i,k) & 944 943 & ,'cv_driver 909').eq.1) then … … 946 945 write(*,*) 'xtclw=',xtclw(:,i,k) 947 946 stop 948 endif !if (iso_verif_positif_nostop(xtclw(i ndex_trac(947 endif !if (iso_verif_positif_nostop(xtclw(itZonIso( 949 948 endif !if ((option_traceurs.eq.17).or. 950 949 #endif … … 1000 999 write(*,*) 'klev=',klev 1001 1000 #ifdef ISOVERIF 1002 write(*,*) 'cv_driver 930: apr ès cv3_unsat'1001 write(*,*) 'cv_driver 930: apres cv3_unsat' 1003 1002 do k = 1, klev 1004 1003 do i = 1, ncum … … 1048 1047 do i = 1, ncum 1049 1048 do iiso=1,niso 1050 ixt_ddft=i ndex_trac(izone_ddft,iiso)1051 ixt_poubelle=i ndex_trac(izone_poubelle,iiso)1049 ixt_ddft=itZonIso(izone_ddft,iiso) 1050 ixt_poubelle=itZonIso(izone_poubelle,iiso) 1052 1051 xtp(ixt_ddft,i,k)=xtp(ixt_ddft,i,k) & 1053 1052 & +xtp(ixt_poubelle,i,k) … … 1063 1062 do k = 1, klev 1064 1063 do i = 1, ncum 1065 do izone=1,n traceurs_zone1064 do izone=1,nzone 1066 1065 if (izone.eq.izone_ddft) then 1067 1066 do iiso=1,niso 1068 ixt_ddft=i ndex_trac(izone,iiso)1069 ixt_revap=i ndex_trac(izone_revap,iiso)1067 ixt_ddft=itZonIso(izone,iiso) 1068 ixt_revap=itZonIso(izone_revap,iiso) 1070 1069 xtp(ixt_ddft,i,k)=xtp(iiso,i,k)-xtp(ixt_revap,i,k) 1071 1070 enddo !do iiso=1,niso 1072 1071 elseif (izone.eq.izone_ddft) then 1073 ! rien àfaire1072 ! rien a faire 1074 1073 else !if (izone.eq.izone_ddft) then 1075 1074 do iiso=1,niso 1076 ixt=i ndex_trac(izone,iiso)1075 ixt=itZonIso(izone,iiso) 1077 1076 xtp(ixt,i,k)=0.0 1078 1077 enddo !do iiso=1,niso 1079 1078 endif !if (izone.eq.izone_ddft) then 1080 enddo !do izone=1,n traceurs_zone1079 enddo !do izone=1,nzone 1081 1080 #ifdef ISOVERIF 1082 1081 call iso_verif_traceur(xtp(1,i,k),'cv_driver 1059') … … 1247 1246 ! si icvflag_Tpa=0, alors la fraction de glace dans l'ascendance adiabatique est 1248 1247 ! fonction de la temperature de l'environnement et la temperature de l'ascendance est 1249 ! calculee en deux it érations, une en supposant qu'il n'y a pas de glace et l'autre1250 ! en ajoutant la glace (ancien sch éma d'Arnaud Jam).1248 ! calculee en deux iterations, une en supposant qu'il n'y a pas de glace et l'autre 1249 ! en ajoutant la glace (ancien schema d'Arnaud Jam). 1251 1250 ! si icvflag_Tpa=1, alors la fraction de glace dans l'ascendance adiabatique est 1252 1251 ! fonction de la temperature de l'environnement et la temperature de l'ascendance est -
LMDZ6/trunk/libf/phylmdiso/cva_driver.F90
r4033 r4143 54 54 USE add_phys_tend_mod, ONLY: fl_cor_ebil 55 55 #ifdef ISO 56 USE infotrac_phy, ONLY: ntraciso ,niso,niso,index_trac,ntraceurs_zone56 USE infotrac_phy, ONLY: ntraciso=>ntiso,niso,niso,itZonIso,nzone 57 57 USE isotopes_mod, ONLY: iso_eau,iso_HDO,iso_O18,ridicule,bidouille_anti_divergence 58 58 #ifdef ISOVERIF … … 1388 1388 call iso_verif_traceur(xt(1,i,k),'cva_driver 856') 1389 1389 if (option_tmin.eq.1) then 1390 if (iso_verif_positif_nostop(xtclw(i ndex_trac( &1390 if (iso_verif_positif_nostop(xtclw(itZonIso( & 1391 1391 & izone_cond,iso_eau),i,k)-xtclw(iso_eau,i,k) & 1392 1392 & ,'cva_driver 909').eq.1) then … … 1394 1394 write(*,*) 'xtclw=',xtclw(:,i,k) 1395 1395 stop 1396 endif !if (iso_verif_positif_nostop(xtclw(i ndex_trac(1396 endif !if (iso_verif_positif_nostop(xtclw(itZonIso( 1397 1397 endif !if ((option_traceurs.eq.17).or. 1398 1398 #endif … … 1509 1509 do i = 1, ncum 1510 1510 do iiso=1,niso 1511 ixt_ddft=i ndex_trac(izone_ddft,iiso)1512 ixt_poubelle=i ndex_trac(izone_poubelle,iiso)1511 ixt_ddft=itZonIso(izone_ddft,iiso) 1512 ixt_poubelle=itZonIso(izone_poubelle,iiso) 1513 1513 xtp(ixt_ddft,i,k)=xtp(ixt_ddft,i,k) & 1514 1514 & +xtp(ixt_poubelle,i,k) … … 1524 1524 do k=1,nd 1525 1525 do i = 1, ncum 1526 do izone=1,n traceurs_zone1526 do izone=1,nzone 1527 1527 if (izone.eq.izone_ddft) then 1528 1528 do iiso=1,niso 1529 ixt_ddft=i ndex_trac(izone,iiso)1530 ixt_revap=i ndex_trac(izone_revap,iiso)1529 ixt_ddft=itZonIso(izone,iiso) 1530 ixt_revap=itZonIso(izone_revap,iiso) 1531 1531 xtp(ixt_ddft,i,k)=xtp(iiso,i,k)-xtp(ixt_revap,i,k) 1532 1532 enddo !do iiso=1,niso … … 1535 1535 else !if (izone.eq.izone_ddft) then 1536 1536 do iiso=1,niso 1537 ixt=i ndex_trac(izone,iiso)1537 ixt=itZonIso(izone,iiso) 1538 1538 xtp(ixt,i,k)=0.0 1539 1539 enddo !do iiso=1,niso 1540 1540 endif !if (izone.eq.izone_ddft) then 1541 enddo !do izone=1,n traceurs_zone1541 enddo !do izone=1,nzone 1542 1542 #ifdef ISOVERIF 1543 1543 call iso_verif_traceur(xtp(1,i,k),'cva_driver 1059') -
LMDZ6/trunk/libf/phylmdiso/fisrtilp.F90
r3927 r4143 27 27 USE add_phys_tend_mod, only : fl_cor_ebil 28 28 #ifdef ISO 29 USE infotrac_phy, ONLY: ntraciso ,niso,index_trac,ntraceurs_zone29 USE infotrac_phy, ONLY: ntraciso=>ntiso,niso,itZonIso 30 30 USE isotopes_mod 31 31 !, ONLY: essai_convergence,bidouille_anti_divergence, & … … 1510 1510 zxtn(iso_eau,i)=zqn(i) 1511 1511 #ifdef ISOTRAC 1512 zxtn(i ndex_trac(izone_poubelle,iso_eau),i)=zqn(i)1512 zxtn(itZonIso(izone_poubelle,iso_eau),i)=zqn(i) 1513 1513 if (option_tmin.eq.1) then 1514 1514 zxtcs(iso_eau,i)=zqcs(i) … … 1848 1848 ! part le tag résuel et le condensat 1849 1849 if (iso_verif_positif_choix_nostop( & 1850 & zxt_ancien(i ndex_trac(izone,iso_eau),i) &1851 & -zxt(i ndex_trac(izone,iso_eau),i),1e-8,'ilp 1270') &1850 & zxt_ancien(itZonIso(izone,iso_eau),i) & 1851 & -zxt(itZonIso(izone,iso_eau),i),1e-8,'ilp 1270') & 1852 1852 & .eq.1) then 1853 1853 write(*,*) 'i,izone,rneb=',i,izone,rneb(i,k) -
LMDZ6/trunk/libf/phylmdiso/fonte_neige_mod.F90
r4033 r4143 629 629 ! de dépendance circulaire. 630 630 631 USE infotrac_phy, ONLY: nt raciso,niso631 USE infotrac_phy, ONLY: ntiso,niso 632 632 USE isotopes_mod, ONLY: iso_eau 633 633 USE indice_sol_mod … … 639 639 ! inputs 640 640 integer klon,knon 641 real xtprecip_snow(nt raciso,klon),xtprecip_rain(ntraciso,klon)641 real xtprecip_snow(ntiso,klon),xtprecip_rain(ntiso,klon) 642 642 INTEGER, INTENT(IN) :: nisurf 643 643 INTEGER, DIMENSION(klon), INTENT(IN) :: knindex -
LMDZ6/trunk/libf/phylmdiso/isotopes_mod.F90
r4124 r4143 3 3 4 4 MODULE isotopes_mod 5 USE infotrac_phy, ONLY: ntraciso,niso,indnum_fn_num,use_iso, & 6 & niso_possibles 7 IMPLICIT NONE 8 SAVE 9 10 ! contient toutes les variables isotopiques et leur initialisation 11 ! les routines specifiquement isotopiques sont dans 12 ! isotopes_routines_mod pour éviter dépendance circulaire avec 13 ! isotopes_verif_mod. 14 15 16 ! indices des isotopes 17 integer, save :: iso_eau,iso_HDO,iso_O18,iso_O17,iso_HTO ! indices de 1 à niso: les isos n'existant pas sont mis à 0 18 !$OMP THREADPRIVATE(iso_eau,iso_HDO,iso_O18,iso_O17,iso_HTO) 19 20 integer :: iso_eau_possible,iso_HDO_possible,iso_O18_possible,iso_O17_possible,iso_HTO_possible ! indices de 1 à niso_possibles: ils correspondent aux tableaux définis dans infotrac: 21 ! tnom_iso=(/'eau','HDO','O18','O17','HTO'/) 22 ! ce sont ces indices qui doivent être utilisés avec use_iso, puisque use_iso est défini comme DIMENSION(niso_possibles) 23 parameter (iso_eau_possible=1) 24 parameter (iso_HDO_possible=2) 25 parameter (iso_O18_possible=3) 26 parameter (iso_O17_possible=4) 27 parameter (iso_HTO_possible=5) 28 29 integer, save :: ntracisoOR 5 USE strings_mod, ONLY: msg, real2str, int2str, bool2str, maxlen, strIdx, strStack 6 IMPLICIT NONE 7 INTERFACE get_in; MODULE PROCEDURE getinp_s, getinp_i, getinp_r, getinp_l; END INTERFACE get_in 8 SAVE 9 10 !--- Contains all isotopic variables + their initialization 11 !--- Isotopes-specific routines are in isotopes_routines_mod to avoid circular dependencies with isotopes_verif_mod. 12 13 !--- Isotopes indices (in [1,niso] ; non-existing => 0 index) 14 INTEGER, SAVE :: iso_eau, iso_HDO, iso_O18, iso_O17, iso_HTO 15 !$OMP THREADPRIVATE(iso_eau, iso_HDO, iso_O18, iso_O17, iso_HTO) 16 17 INTEGER, SAVE :: ntracisoOR 30 18 !$OMP THREADPRIVATE(ntracisoOR) 31 19 32 ! variables indépendantes des isotopes 33 34 real, save :: pxtmelt,pxtice,pxtmin,pxtmax 35 !$OMP THREADPRIVATE(pxtmelt,pxtice,pxtmin,pxtmax) 36 real, save :: tdifexp, tv0cin, thumxt1 20 !--- Variables not depending on isotopes 21 REAL, SAVE :: pxtmelt, pxtice, pxtmin, pxtmax 22 !$OMP THREADPRIVATE(pxtmelt, pxtice, pxtmin, pxtmax) 23 REAL, SAVE :: tdifexp, tv0cin, thumxt1 37 24 !$OMP THREADPRIVATE(tdifexp, tv0cin, thumxt1) 38 integer, save ::ntot25 INTEGER, SAVE :: ntot 39 26 !$OMP THREADPRIVATE(ntot) 40 real, save ::h_land_ice27 REAL, SAVE :: h_land_ice 41 28 !$OMP THREADPRIVATE(h_land_ice) 42 real, save ::P_veg29 REAL, SAVE :: P_veg 43 30 !$OMP THREADPRIVATE(P_veg) 44 real, save :: musi,lambda_sursat45 !$OMP THREADPRIVATE( lambda_sursat)46 real, save ::Kd31 REAL, SAVE :: musi, lambda_sursat 32 !$OMP THREADPRIVATE(musi, lambda_sursat) 33 REAL, SAVE :: Kd 47 34 !$OMP THREADPRIVATE(Kd) 48 real, save :: rh_cste_surf_cond,T_cste_surf_cond 49 !$OMP THREADPRIVATE(rh_cste_surf_cond,T_cste_surf_cond) 50 51 logical, save :: bidouille_anti_divergence 52 ! si true, rappel régulier de xteau vers q, pour éviter dérives lentes 35 REAL, SAVE :: rh_cste_surf_cond, T_cste_surf_cond 36 !$OMP THREADPRIVATE(rh_cste_surf_cond, T_cste_surf_cond) 37 LOGICAL, SAVE :: bidouille_anti_divergence ! T: regularly, xteau <- q to avoid slow drifts 53 38 !$OMP THREADPRIVATE(bidouille_anti_divergence) 54 logical, save :: essai_convergence 55 ! si false, on fait rigoureusement comme dans LMDZ sans isotopes, 56 ! meme si c'est génant pour les isotopes 39 LOGICAL, SAVE :: essai_convergence ! F: as in LMDZ without isotopes (bad for isotopes) 57 40 !$OMP THREADPRIVATE(essai_convergence) 58 integer, save :: initialisation_iso 59 ! 0: dans fichier 60 ! 1: R=0 61 ! 2: R selon distill rayleigh 62 ! 3: R=Rsmow 41 INTEGER, SAVE :: initialisation_iso ! 0: file ; 1: R=0 ; 2: R=distill. Rayleigh ; 3: R=Rsmow 63 42 !$OMP THREADPRIVATE(initialisation_iso) 64 integer, save :: modif_SST ! 0 par defaut, 1 si on veut modifier la sst 65 ! 2 et 3: profils de SST 43 INTEGER, SAVE :: modif_SST ! 0: default ; 1: modified SST ; 2, 3: SST profiles 66 44 !$OMP THREADPRIVATE(modif_SST) 67 real, save :: deltaTtest ! modif de la SST, uniforme. 45 REAL, SAVE :: deltaTtest ! Uniform modification of the SST 68 46 !$OMP THREADPRIVATE(deltaTtest) 69 integer, save :: modif_sic ! on met des trous dans glace de mer 47 INTEGER, SAVE :: modif_sic ! Holes in the Sea Ice 70 48 !$OMP THREADPRIVATE(modif_sic) 71 real, save :: deltasic ! fraction de trous minimale 49 REAL, SAVE :: deltasic ! Minimal holes fraction 72 50 !$OMP THREADPRIVATE(deltasic) 73 real, save ::deltaTtestpoles51 REAL, SAVE :: deltaTtestpoles 74 52 !$OMP THREADPRIVATE(deltaTtestpoles) 75 real, save :: sstlatcrit 76 !$OMP THREADPRIVATE(sstlatcrit) 77 real, save :: dsstlatcrit 78 !$OMP THREADPRIVATE(dsstlatcrit) 79 real, save :: deltaO18_oce 53 REAL, SAVE :: sstlatcrit, dsstlatcrit 54 !$OMP THREADPRIVATE(sstlatcrit, dsstlatcrit) 55 REAL, SAVE :: deltaO18_oce 80 56 !$OMP THREADPRIVATE(deltaO18_oce) 81 integer, save :: albedo_prescrit ! 0 par defaut 82 ! 1 si on veut garder albedo constant 57 INTEGER, SAVE :: albedo_prescrit ! 0: default ; 1: constant albedo 83 58 !$OMP THREADPRIVATE(albedo_prescrit) 84 real, save :: lon_min_albedo,lon_max_albedo 85 !$OMP THREADPRIVATE(lon_min_albedo,lon_max_albedo) 86 real, save :: lat_min_albedo,lat_max_albedo 87 !$OMP THREADPRIVATE(lat_min_albedo,lat_max_albedo) 88 real, save :: deltaP_BL,tdifexp_sol 59 REAL, SAVE :: lon_min_albedo, lon_max_albedo, lat_min_albedo, lat_max_albedo 60 !$OMP THREADPRIVATE(lon_min_albedo, lon_max_albedo, lat_min_albedo, lat_max_albedo) 61 REAL, SAVE :: deltaP_BL,tdifexp_sol 89 62 !$OMP THREADPRIVATE(deltaP_BL,tdifexp_sol) 90 integer, save :: ruissellement_pluie,alphak_stewart91 !$OMP THREADPRIVATE(ruissellement_pluie, alphak_stewart)92 integer, save ::calendrier_guide63 INTEGER, SAVE :: ruissellement_pluie, alphak_stewart 64 !$OMP THREADPRIVATE(ruissellement_pluie, alphak_stewart) 65 INTEGER, SAVE :: calendrier_guide 93 66 !$OMP THREADPRIVATE(calendrier_guide) 94 integer, save ::cste_surf_cond67 INTEGER, SAVE :: cste_surf_cond 95 68 !$OMP THREADPRIVATE(cste_surf_cond) 96 real, save ::mixlen69 REAL, SAVE :: mixlen 97 70 !$OMP THREADPRIVATE(mixlen) 98 integer, save ::evap_cont_cste71 INTEGER, SAVE :: evap_cont_cste 99 72 !$OMP THREADPRIVATE(evap_cont_cste) 100 real, save :: deltaO18_evap_cont,d_evap_cont101 !$OMP THREADPRIVATE(deltaO18_evap_cont, d_evap_cont)102 integer, save :: nudge_qsol,region_nudge_qsol103 !$OMP THREADPRIVATE(nudge_qsol, region_nudge_qsol)104 integer, save:: nlevmaxO1773 REAL, SAVE :: deltaO18_evap_cont, d_evap_cont 74 !$OMP THREADPRIVATE(deltaO18_evap_cont, d_evap_cont) 75 INTEGER, SAVE :: nudge_qsol, region_nudge_qsol 76 !$OMP THREADPRIVATE(nudge_qsol, region_nudge_qsol) 77 INTEGER, SAVE :: nlevmaxO17 105 78 !$OMP THREADPRIVATE(nlevmaxO17) 106 integer, save :: no_pce 107 ! real, save :: slope_limiterxy,slope_limiterz 79 INTEGER, SAVE :: no_pce 108 80 !$OMP THREADPRIVATE(no_pce) 109 real, save ::A_satlim81 REAL, SAVE :: A_satlim 110 82 !$OMP THREADPRIVATE(A_satlim) 111 integer, save :: ok_restrict_A_satlim,modif_ratqs112 !$OMP THREADPRIVATE(ok_restrict_A_satlim, modif_ratqs)113 real, save :: Pcrit_ratqs,ratqsbasnew114 !$OMP THREADPRIVATE(Pcrit_ratqs, ratqsbasnew)115 real, save ::fac_modif_evaoce83 INTEGER, SAVE :: ok_restrict_A_satlim, modif_ratqs 84 !$OMP THREADPRIVATE(ok_restrict_A_satlim, modif_ratqs) 85 REAL, SAVE :: Pcrit_ratqs, ratqsbasnew 86 !$OMP THREADPRIVATE(Pcrit_ratqs, ratqsbasnew) 87 REAL, SAVE :: fac_modif_evaoce 116 88 !$OMP THREADPRIVATE(fac_modif_evaoce) 117 integer, save ::ok_bidouille_wake89 INTEGER, SAVE :: ok_bidouille_wake 118 90 !$OMP THREADPRIVATE(ok_bidouille_wake) 119 logical ::cond_temp_env91 LOGICAL, SAVE :: cond_temp_env 120 92 !$OMP THREADPRIVATE(cond_temp_env) 121 93 122 123 ! variables tableaux fn de niso 124 real, ALLOCATABLE, DIMENSION(:), save :: tnat, toce, tcorr 125 !$OMP THREADPRIVATE(tnat, toce, tcorr) 126 real, ALLOCATABLE, DIMENSION(:), save :: tdifrel 127 !$OMP THREADPRIVATE(tdifrel) 128 real, ALLOCATABLE, DIMENSION(:), save :: talph1, talph2, talph3 129 !$OMP THREADPRIVATE(talph1, talph2, talph3) 130 real, ALLOCATABLE, DIMENSION(:), save :: talps1, talps2 131 !$OMP THREADPRIVATE(talps1, talps2) 132 real, ALLOCATABLE, DIMENSION(:), save :: tkcin0, tkcin1, tkcin2 94 !--- Vectors of length "niso" 95 REAL, ALLOCATABLE, DIMENSION(:), SAVE :: & 96 tnat, toce, tcorr, tdifrel 97 !$OMP THREADPRIVATE(tnat, toce, tcorr, tdifrel) 98 REAL, ALLOCATABLE, DIMENSION(:), SAVE :: & 99 talph1, talph2, talph3, talps1, talps2 100 !$OMP THREADPRIVATE(talph1, talph2, talph3, talps1, talps2) 101 REAL, ALLOCATABLE, DIMENSION(:), SAVE :: & 102 tkcin0, tkcin1, tkcin2 133 103 !$OMP THREADPRIVATE(tkcin0, tkcin1, tkcin2) 134 real, ALLOCATABLE, DIMENSION(:), save :: alpha_liq_sol 135 !$OMP THREADPRIVATE(alpha_liq_sol) 136 real, ALLOCATABLE, DIMENSION(:), save :: Rdefault, Rmethox 137 !$OMP THREADPRIVATE(Rdefault, Rmethox) 104 REAL, ALLOCATABLE, DIMENSION(:), SAVE :: & 105 alpha_liq_sol, Rdefault, Rmethox 106 !$OMP THREADPRIVATE(alpha_liq_sol, Rdefault, Rmethox) 138 107 character*3, ALLOCATABLE, DIMENSION(:), save :: striso 139 108 !$OMP THREADPRIVATE(striso) 140 real, save ::fac_coeff_eq17_liq, fac_coeff_eq17_ice109 REAL, SAVE :: fac_coeff_eq17_liq, fac_coeff_eq17_ice 141 110 !$OMP THREADPRIVATE(fac_coeff_eq17_liq, fac_coeff_eq17_ice) 142 111 143 real ridicule ! valeur maximale pour qu'une variable de type 144 ! rapoport de mélange puisse être considérée comme négligeable. Si 145 ! négligeable, alors on ne verifie pas si sa compo iso esta bérrante. 146 parameter (ridicule=1e-12) 147 ! parameter (ridicule=1) 148 ! 149 real ridicule_rain ! valeur limite de ridicule pour les flux de pluies (rain, zrfl...) 150 parameter (ridicule_rain=1e-8) ! en kg/s <-> 1e-3mm/day 151 152 real ridicule_evap ! valeur limite de ridicule pour les evap 153 parameter (ridicule_evap=ridicule_rain*1e-2) ! en kg/s <-> 1e-3mm/day 154 155 real ridicule_qsol ! valeur limite de ridicule pour les qsol 156 parameter (ridicule_qsol=ridicule_rain) ! en kg <-> 1e-8kg 157 158 real ridicule_snow ! valeur limite de ridicule pour les snow 159 parameter (ridicule_snow=ridicule_qsol) ! en kg/s <-> 1e-8kg 160 161 real expb_max 162 parameter (expb_max=30.0) 163 164 ! spécifique au tritium: 165 166 167 logical, save :: ok_prod_nucl_tritium ! si oui, production de tritium par essais nucleaires 112 !--- Negligible lower thresholds: no need to check for absurd values under these lower limits 113 REAL, PARAMETER :: & 114 ridicule = 1e-12, & ! For mixing ratios 115 ridicule_rain = 1e-8, & ! For rain fluxes (rain, zrfl...) in kg/s <-> 1e-3 mm/day 116 ridicule_evap = ridicule_rain*1e-2, & ! For evaporations in kg/s <-> 1e-3 mm/day 117 ridicule_qsol = ridicule_rain, & ! For qsol in kg <-> 1e-8 kg 118 ridicule_snow = ridicule_qsol ! For snow in kg <-> 1e-8 kg 119 REAL, PARAMETER :: expb_max = 30.0 120 !$OMP THREADPRIVATE(ridicule, ridicule_rain, ridicule_evap, ridicule_qsol, ridicule_snow, expb_max) 121 122 !--- Specific to HTO: 123 LOGICAL, SAVE :: ok_prod_nucl_tritium !--- TRUE => HTO production by nuclear tests 168 124 !$OMP THREADPRIVATE(ok_prod_nucl_tritium) 169 integer nessai 170 parameter (nessai=486) 171 integer, save :: day_nucl(nessai) 172 !$OMP THREADPRIVATE(day_nucl) 173 integer, save :: month_nucl(nessai) 174 !$OMP THREADPRIVATE(month_nucl) 175 integer, save :: year_nucl(nessai) 176 !$OMP THREADPRIVATE(year_nucl) 177 real, save :: lat_nucl(nessai) 178 !$OMP THREADPRIVATE(lat_nucl) 179 real, save :: lon_nucl(nessai) 180 !$OMP THREADPRIVATE(lon_nucl) 181 real, save :: zmin_nucl(nessai) 182 !$OMP THREADPRIVATE(zmin_nucl) 183 real, save :: zmax_nucl(nessai) 184 !$OMP THREADPRIVATE(zmax_nucl) 185 real, save :: HTO_nucl(nessai) 186 !$OMP THREADPRIVATE(HTO_nucl) 187 125 INTEGER, PARAMETER :: nessai = 486 126 INTEGER, DIMENSION(nessai), SAVE :: & 127 day_nucl, month_nucl, year_nucl 128 !$OMP THREADPRIVATE(day_nucl, month_nucl, year_nucl) 129 REAL, DIMENSION(nessai), SAVE :: & 130 lat_nucl, lon_nucl, zmin_nucl, zmax_nucl, HTO_nucl 131 !$OMP THREADPRIVATE(lat_nucl, lon_nucl, zmin_nucl, zmax_nucl, HTO_nucl) 132 188 133 189 134 CONTAINS 190 135 191 SUBROUTINE iso_init() 192 use ioipsl_getin_p_mod, ONLY : getin_p 193 implicit none 194 195 ! -- local variables: 196 197 integer ixt 198 ! référence O18 199 real fac_enrichoce18 200 real alpha_liq_sol_O18, & 201 & talph1_O18,talph2_O18,talph3_O18, & 202 & talps1_O18,talps2_O18, & 203 & tkcin0_O18,tkcin1_O18,tkcin2_O18, & 204 & tdifrel_O18 136 SUBROUTINE iso_init() 137 USE ioipsl_getin_p_mod, ONLY: getin_p 138 USE infotrac_phy, ONLY: ntiso, niso, isoName 139 IMPLICIT NONE 140 141 !=== Local variables: 142 INTEGER :: ixt 143 144 !--- H2[18]O reference 145 REAL :: fac_enrichoce18, alpha_liq_sol_O18, & 146 talph1_O18, talph2_O18, talph3_O18, talps1_O18, talps2_O18, & 147 tkcin0_O18, tkcin1_O18, tkcin2_O18, tdifrel_O18 148 149 !--- For H2[17]O 150 REAL :: fac_kcin, pente_MWL 151 INTEGER :: ierr 205 152 206 ! cas de l'O17 207 real fac_kcin 208 real pente_MWL 209 integer ierr 210 211 logical ok_nocinsat, ok_nocinsfc !sensi test 212 parameter (ok_nocinsfc=.FALSE.) ! if T: no kinetic effect in sfc evap 213 parameter (ok_nocinsat=.FALSE.) ! if T: no sursaturation effect for ice 214 logical Rdefault_smow 215 parameter (Rdefault_smow=.FALSE.) ! si T: Rdefault=smow; si F: nul 216 ! pour le tritium 217 integer iessai 218 219 write(*,*) 'iso_init 219: entree' 220 221 ! allocations mémoire 222 allocate (tnat(niso)) 223 allocate (toce(niso)) 224 allocate (tcorr(niso)) 225 allocate (tdifrel(niso)) 226 allocate (talph1(niso)) 227 allocate (talph2(niso)) 228 allocate (talph3(niso)) 229 allocate (talps1(niso)) 230 allocate (talps2(niso)) 231 allocate (tkcin0(niso)) 232 allocate (tkcin1(niso)) 233 allocate (tkcin2(niso)) 234 allocate (alpha_liq_sol(niso)) 235 allocate (Rdefault(niso)) 236 allocate (Rmethox(niso)) 237 allocate (striso(niso)) 238 239 240 !-------------------------------------------------------------- 241 ! General: 242 !-------------------------------------------------------------- 243 244 ! -- verif du nombre d'isotopes: 245 write(*,*) 'iso_init 64: niso=',niso 246 247 ! init de ntracisoOR: on écrasera en cas de nzone>0 si complications avec 248 ! ORCHIDEE 249 ntracisoOR=ntraciso 250 251 ! -- Type of water isotopes: 252 253 iso_eau=indnum_fn_num(1) 254 iso_HDO=indnum_fn_num(2) 255 iso_O18=indnum_fn_num(3) 256 iso_O17=indnum_fn_num(4) 257 iso_HTO=indnum_fn_num(5) 258 write(*,*) 'iso_init 59: iso_eau=',iso_eau 259 write(*,*) 'iso_HDO=',iso_HDO 260 write(*,*) 'iso_O18=',iso_O18 261 write(*,*) 'iso_O17=',iso_O17 262 write(*,*) 'iso_HTO=',iso_HTO 263 write(*,*) 'iso_init 251: use_iso=',use_iso 264 265 ! initialisation 266 lambda_sursat=0.004 267 thumxt1=0.75*1.2 268 ntot=20 269 h_land_ice=20. ! à comparer aux 3000mm de snow_max 270 P_veg=1.0 271 bidouille_anti_divergence=.false. 272 essai_convergence=.false. 273 initialisation_iso=0 274 modif_sst=0 275 modif_sic=0 276 deltaTtest=0.0 277 deltasic=0.1 278 deltaTtestpoles=0.0 279 sstlatcrit=30.0 280 deltaO18_oce=0.0 281 albedo_prescrit=0 282 lon_min_albedo=-200 283 lon_max_albedo=200 284 lat_min_albedo=-100 285 lat_max_albedo=100 286 deltaP_BL=10.0 287 ruissellement_pluie=0 288 alphak_stewart=1 289 tdifexp_sol=0.67 290 calendrier_guide=0 291 cste_surf_cond=0 292 mixlen=35.0 293 evap_cont_cste=0.0 294 deltaO18_evap_cont=0.0 295 d_evap_cont=0.0 296 nudge_qsol=0 297 region_nudge_qsol=1 298 nlevmaxO17=50 299 no_pce=0 300 A_satlim=1.0 301 ok_restrict_A_satlim=0 302 ! slope_limiterxy=2.0 303 ! slope_limiterz=2.0 304 modif_ratqs=0 305 Pcrit_ratqs=500.0 306 ratqsbasnew=0.05 307 308 fac_modif_evaoce=1.0 309 ok_bidouille_wake=0 310 cond_temp_env=.false. 311 ! si oui, la temperature de cond est celle de l'environnement, 312 ! pour eviter bugs quand temperature dans ascendances convs est 313 ! mal calculee 314 ok_prod_nucl_tritium=.false. 315 316 ! lecture des paramètres isotopiques: 317 ! pour que ça marche en openMP, il faut utiliser getin_p. Car le getin ne peut 318 ! être appelé que par un thread à la fois, et ça pose tout un tas de problème, 319 ! d'où tout un tas de magouilles comme dans conf_phys_m. A terme, tout le monde 320 ! lira par getin_p. 321 call getin_p('lambda',lambda_sursat) 322 call getin_p('thumxt1',thumxt1) 323 call getin_p('ntot',ntot) 324 call getin_p('h_land_ice',h_land_ice) 325 call getin_p('P_veg',P_veg) 326 call getin_p('bidouille_anti_divergence',bidouille_anti_divergence) 327 call getin_p('essai_convergence',essai_convergence) 328 call getin_p('initialisation_iso',initialisation_iso) 329 !if (nzone>0) then 330 !if (initialisation_iso.eq.0) then 331 ! call getin_p('initialisation_isotrac',initialisation_isotrac) 332 !endif !if (initialisation_iso.eq.0) then 333 !endif !if (nzone>0) 334 call getin_p('modif_sst',modif_sst) 335 if (modif_sst.ge.1) then 336 call getin_p('deltaTtest',deltaTtest) 337 if (modif_sst.ge.2) then 338 call getin_p('deltaTtestpoles',deltaTtestpoles) 339 call getin_p('sstlatcrit',sstlatcrit) 153 !--- Sensitivity tests 154 LOGICAL, PARAMETER :: ok_nocinsfc = .FALSE. ! if T: no kinetic effect in sfc evap 155 LOGICAL, PARAMETER :: ok_nocinsat = .FALSE. ! if T: no sursaturation effect for ice 156 LOGICAL, PARAMETER :: Rdefault_smow = .FALSE. ! if T: Rdefault=smow; if F: nul 157 158 !--- For [3]H 159 INTEGER :: iessai 160 161 CHARACTER(LEN=maxlen) :: modname, sxt 162 163 modname = 'iso_init' 164 CALL msg('219: entree', modname) 165 166 !--- Memory allocations 167 ALLOCATE(talph1(niso), tkcin0(niso), talps1(niso), tnat(niso)) 168 ALLOCATE(talph2(niso), tkcin1(niso), talps2(niso), toce(niso)) 169 ALLOCATE(talph3(niso), tkcin2(niso), tdifrel(niso), tcorr(niso)) 170 ALLOCATE(alpha_liq_sol(niso), Rdefault(niso), Rmethox(niso)) 171 ALLOCATE(striso(niso)) 172 173 174 !-------------------------------------------------------------- 175 ! General: 176 !-------------------------------------------------------------- 177 178 !--- Check number of isotopes 179 CALL msg('64: niso = '//TRIM(int2str(niso)), modname) 180 181 !--- Init de ntracisoOR: on ecrasera en cas de traceurs de tagging isotopiques 182 ! (nzone>0) si complications avec ORCHIDEE 183 ntracisoOR = ntiso 184 185 !--- Type of water isotopes: 186 iso_eau = strIdx(isoName, 'H2[16]O'); CALL msg('59: iso_eau='//int2str(iso_eau), modname) 187 iso_O17 = strIdx(isoName, 'H2[17]O'); CALL msg('iso_HDO='//int2str(iso_HDO), modname) 188 iso_O18 = strIdx(isoName, 'H2[18]O'); CALL msg('iso_O18='//int2str(iso_O18), modname) 189 iso_HDO = strIdx(isoName, 'H[2]HO'); CALL msg('iso_O17='//int2str(iso_O17), modname) 190 iso_HTO = strIdx(isoName, 'H[3]HO'); CALL msg('iso_HTO='//int2str(iso_HTO), modname) 191 192 ! initialisation 193 ! lecture des parametres isotopiques: 194 ! pour que ca marche en openMP, il faut utiliser getin_p. Car le getin ne peut 195 ! etre appele que par un thread a la fois, et ca pose tout un tas de problemes, 196 ! d'ou tout un tas de magouilles comme dans conf_phys_m. A terme, tout le monde 197 ! lira par getin_p. 198 CALL get_in('lambda', lambda_sursat, 0.004) 199 CALL get_in('thumxt1', thumxt1, 0.75*1.2) 200 CALL get_in('ntot', ntot, 20, .FALSE.) 201 CALL get_in('h_land_ice', h_land_ice, 20., .FALSE.) 202 CALL get_in('P_veg', P_veg, 1.0, .FALSE.) 203 CALL get_in('bidouille_anti_divergence', bidouille_anti_divergence, .FALSE.) 204 CALL get_in('essai_convergence', essai_convergence, .FALSE.) 205 CALL get_in('initialisation_iso', initialisation_iso, 0) 206 207 ! IF(nzone>0 .AND. initialisation_iso==0) & 208 ! CALL get_in('initialisation_isotrac',initialisation_isotrac) 209 CALL get_in('modif_sst', modif_sst, 0) 210 CALL get_in('deltaTtest', deltaTtest, 0.0) !--- For modif_sst>=1 211 CALL get_in('deltaTtestpoles',deltaTtestpoles, 0.0) !--- For modif_sst>=2 212 CALL get_in( 'sstlatcrit', sstlatcrit, 30.0) !--- For modif_sst>=3 213 CALL get_in('dsstlatcrit', dsstlatcrit, 0.0) !--- For modif_sst>=3 340 214 #ifdef ISOVERIF 341 !call iso_verif_positif(sstlatcrit,'iso_init 107') 342 if (sstlatcrit.lt.0.0) then 343 write(*,*) 'iso_init 270: sstlatcrit=',sstlatcrit 344 stop 345 endif 215 CALL msg('iso_init 270: sstlatcrit='//real2str( sstlatcrit), modname, sstlatcrit < 0.0) !--- For modif_sst>=2 216 CALL msg('iso_init 279: dsstlatcrit='//real2str(dsstlatcrit), modname, sstlatcrit < 0.0) !--- For modif_sst>=3 217 IF(modif_sst >= 2 .AND. sstlatcrit < 0.0) STOP 346 218 #endif 347 if (modif_sst.ge.3) then 348 call getin_p('dsstlatcrit',dsstlatcrit) 219 220 CALL get_in('modif_sic', modif_sic, 0) 221 IF(modif_sic >= 1) & 222 CALL get_in('deltasic', deltasic, 0.1) 223 224 CALL get_in('albedo_prescrit', albedo_prescrit, 0) 225 IF(albedo_prescrit == 1) THEN 226 CALL get_in('lon_min_albedo', lon_min_albedo, -200.) 227 CALL get_in('lon_max_albedo', lon_max_albedo, 200.) 228 CALL get_in('lat_min_albedo', lat_min_albedo, -100.) 229 CALL get_in('lat_max_albedo', lat_max_albedo, 100.) 230 END IF 231 CALL get_in('deltaO18_oce', deltaO18_oce, 0.0) 232 233 CALL get_in('deltaP_BL', deltaP_BL, 10.0) 234 CALL get_in('ruissellement_pluie', ruissellement_pluie, 0) 235 CALL get_in('alphak_stewart', alphak_stewart, 1) 236 CALL get_in('tdifexp_sol', tdifexp_sol, 0.67) 237 CALL get_in('calendrier_guide', calendrier_guide, 0) 238 CALL get_in('cste_surf_cond', cste_surf_cond, 0) 239 CALL get_in('mixlen', mixlen, 35.0) 240 CALL get_in('evap_cont_cste', evap_cont_cste, 0) 241 CALL get_in('deltaO18_evap_cont', deltaO18_evap_cont,0.0) 242 CALL get_in('d_evap_cont', d_evap_cont, 0.0) 243 CALL get_in('nudge_qsol', nudge_qsol, 0) 244 CALL get_in('region_nudge_qsol', region_nudge_qsol, 1) 245 nlevmaxO17 = 50 246 CALL msg('nlevmaxO17='//TRIM(int2str(nlevmaxO17))) 247 CALL get_in('no_pce', no_pce, 0) 248 CALL get_in('A_satlim', A_satlim, 1.0) 249 CALL get_in('ok_restrict_A_satlim', ok_restrict_A_satlim, 0) 349 250 #ifdef ISOVERIF 350 !call iso_verif_positif(dsstlatcrit,'iso_init 110') 351 if (sstlatcrit.lt.0.0) then 352 write(*,*) 'iso_init 279: dsstlatcrit=',dsstlatcrit 353 stop 354 endif 355 #endif 356 endif !if (modif_sst.ge.3) then 357 endif !if (modif_sst.ge.2) then 358 endif ! if (modif_sst.ge.1) then 359 call getin_p('modif_sic',modif_sic) 360 if (modif_sic.ge.1) then 361 call getin_p('deltasic',deltasic) 362 endif !if (modif_sic.ge.1) then 363 364 call getin_p('albedo_prescrit',albedo_prescrit) 365 call getin_p('lon_min_albedo',lon_min_albedo) 366 call getin_p('lon_max_albedo',lon_max_albedo) 367 call getin_p('lat_min_albedo',lat_min_albedo) 368 call getin_p('lat_max_albedo',lat_max_albedo) 369 call getin_p('deltaO18_oce',deltaO18_oce) 370 call getin_p('deltaP_BL',deltaP_BL) 371 call getin_p('ruissellement_pluie',ruissellement_pluie) 372 call getin_p('alphak_stewart',alphak_stewart) 373 call getin_p('tdifexp_sol',tdifexp_sol) 374 call getin_p('calendrier_guide',calendrier_guide) 375 call getin_p('cste_surf_cond',cste_surf_cond) 376 call getin_p('mixlen',mixlen) 377 call getin_p('evap_cont_cste',evap_cont_cste) 378 call getin_p('deltaO18_evap_cont',deltaO18_evap_cont) 379 call getin_p('d_evap_cont',d_evap_cont) 380 call getin_p('nudge_qsol',nudge_qsol) 381 call getin_p('region_nudge_qsol',region_nudge_qsol) 382 call getin_p('no_pce',no_pce) 383 call getin_p('A_satlim',A_satlim) 384 call getin_p('ok_restrict_A_satlim',ok_restrict_A_satlim) 385 #ifdef ISOVERIF 386 !call iso_verif_positif(1.0-A_satlim,'iso_init 158') 387 if (A_satlim.gt.1.0) then 388 write(*,*) 'iso_init 315: A_satlim=',A_satlim 389 stop 390 endif 391 #endif 392 ! call getin_p('slope_limiterxy',slope_limiterxy) 393 ! call getin_p('slope_limiterz',slope_limiterz) 394 call getin_p('modif_ratqs',modif_ratqs) 395 call getin_p('Pcrit_ratqs',Pcrit_ratqs) 396 call getin_p('ratqsbasnew',ratqsbasnew) 397 call getin_p('fac_modif_evaoce',fac_modif_evaoce) 398 call getin_p('ok_bidouille_wake',ok_bidouille_wake) 399 call getin_p('cond_temp_env',cond_temp_env) 400 if (use_iso(iso_HTO_possible)) then 401 ok_prod_nucl_tritium=.true. 402 call getin_p('ok_prod_nucl_tritium',ok_prod_nucl_tritium) 403 endif 404 405 write(*,*) 'lambda,thumxt1=',lambda_sursat,thumxt1 406 write(*,*) 'bidouille_anti_divergence=',bidouille_anti_divergence 407 write(*,*) 'essai_convergence=',essai_convergence 408 write(*,*) 'initialisation_iso=',initialisation_iso 409 write(*,*) 'modif_sst=',modif_sst 410 if (modif_sst.ge.1) then 411 write(*,*) 'deltaTtest=',deltaTtest 412 if (modif_sst.ge.2) then 413 write(*,*) 'deltaTtestpoles,sstlatcrit=', & 414 & deltaTtestpoles,sstlatcrit 415 if (modif_sst.ge.3) then 416 write(*,*) 'dsstlatcrit=',dsstlatcrit 417 endif !if (modif_sst.ge.3) then 418 endif !if (modif_sst.ge.2) then 419 endif !if (modif_sst.ge.1) then 420 write(*,*) 'modif_sic=',modif_sic 421 if (modif_sic.ge.1) then 422 write(*,*) 'deltasic=',deltasic 423 endif !if (modif_sic.ge.1) then 424 write(*,*) 'deltaO18_oce=',deltaO18_oce 425 write(*,*) 'albedo_prescrit=',albedo_prescrit 426 if (albedo_prescrit.eq.1) then 427 write(*,*) 'lon_min_albedo,lon_max_albedo=', & 428 & lon_min_albedo,lon_max_albedo 429 write(*,*) 'lat_min_albedo,lat_max_albedo=', & 430 & lat_min_albedo,lat_max_albedo 431 endif !if (albedo_prescrit.eq.1) then 432 write(*,*) 'deltaP_BL,ruissellement_pluie,alphak_stewart=', & 433 & deltaP_BL,ruissellement_pluie,alphak_stewart 434 write(*,*) 'cste_surf_cond=',cste_surf_cond 435 write(*,*) 'mixlen=',mixlen 436 write(*,*) 'tdifexp_sol=',tdifexp_sol 437 write(*,*) 'calendrier_guide=',calendrier_guide 438 write(*,*) 'evap_cont_cste=',evap_cont_cste 439 write(*,*) 'deltaO18_evap_cont,d_evap_cont=', & 440 & deltaO18_evap_cont,d_evap_cont 441 write(*,*) 'nudge_qsol,region_nudge_qsol=', & 442 & nudge_qsol,region_nudge_qsol 443 write(*,*) 'nlevmaxO17=',nlevmaxO17 444 write(*,*) 'no_pce=',no_pce 445 write(*,*) 'A_satlim=',A_satlim 446 write(*,*) 'ok_restrict_A_satlim=',ok_restrict_A_satlim 447 ! write(*,*) 'slope_limiterxy=',slope_limiterxy 448 ! write(*,*) 'slope_limiterz=',slope_limiterz 449 write(*,*) 'modif_ratqs=',modif_ratqs 450 write(*,*) 'Pcrit_ratqs=',Pcrit_ratqs 451 write(*,*) 'ratqsbasnew=',ratqsbasnew 452 write(*,*) 'fac_modif_evaoce=',fac_modif_evaoce 453 write(*,*) 'ok_bidouille_wake=',ok_bidouille_wake 454 write(*,*) 'cond_temp_env=',cond_temp_env 455 write(*,*) 'ok_prod_nucl_tritium=',ok_prod_nucl_tritium 456 457 458 !-------------------------------------------------------------- 459 ! Parameters that do not depend on the nature of water isotopes: 460 !-------------------------------------------------------------- 461 462 ! -- temperature at which ice condensate starts to form (valeur ECHAM?): 463 pxtmelt=273.15 464 ! pxtmelt=273.15-10.0 ! test PHASE 465 466 ! -- temperature at which all condensate is ice: 467 pxtice=273.15-10.0 468 ! pxtice=273.15-30.0 ! test PHASE 469 470 ! -- minimum temperature to calculate fractionation coeff 471 pxtmin=273.15-120.0 ! On ne calcule qu'au dessus de -120°C 472 pxtmax=273.15+60.0 ! On ne calcule qu'au dessus de +60°C 473 ! remarque: les coeffs ont été mesurés seulement jusq'à -40! 474 475 ! -- a constant for alpha_eff for equilibrium below cloud base: 476 tdifexp=0.58 477 tv0cin=7.0 478 479 ! facteurs lambda et mu dans Si=musi-lambda*T 480 musi=1.0 481 if (ok_nocinsat) then 482 lambda_sursat = 0.0 ! no sursaturation effect 483 endif 484 485 486 ! diffusion dans le sol 487 Kd=2.5e-9 ! m2/s 488 489 ! cas où cste_surf_cond: on met rhs ou/et Ts cste pour voir 490 rh_cste_surf_cond=0.6 491 T_cste_surf_cond=288.0 492 493 !-------------------------------------------------------------- 494 ! Parameters that depend on the nature of water isotopes: 495 !-------------------------------------------------------------- 496 ! ** constantes locales 497 fac_enrichoce18=0.0005 498 ! on a alors tcor018=1+fac_enrichoce18 499 ! tcorD=1+fac_enrichoce18*8 500 ! tcorO17=1+fac_enrichoce18*0.528 501 alpha_liq_sol_O18=1.00291 ! valeur de Lehmann & Siegenthaler, 1991, 502 ! Journal of Glaciology, vol 37, p 23 503 talph1_O18=1137. 504 talph2_O18=-0.4156 505 talph3_O18=-2.0667E-3 506 talps1_O18=11.839 507 talps2_O18=-0.028244 508 tkcin0_O18 = 0.006 509 tkcin1_O18 = 0.000285 510 tkcin2_O18 = 0.00082 511 tdifrel_O18= 1./0.9723 512 513 ! rapport des ln(alphaeq) entre O18 et O17 514 fac_coeff_eq17_liq=0.529 ! donné par Amaelle 515 ! fac_coeff_eq17_ice=0.528 ! slope MWL 516 fac_coeff_eq17_ice=0.529 517 518 519 write(*,*) 'iso_O18,iso_HDO,iso_eau=',iso_O18,iso_HDO,iso_eau 520 do 999 ixt = 1, niso 521 write(*,*) 'iso_init 80: ixt=',ixt 522 523 524 ! -- kinetic factor for surface evaporation: 525 ! (cf: kcin = tkcin0 if |V|<tv0cin 526 ! kcin = tkcin1*|Vsurf| + tkcin2 if |V|>tv0cin ) 527 ! (Rq: formula discontinuous for |V|=tv0cin... ) 528 529 ! -- main: 530 if (ixt.eq.iso_HTO) then ! Tritium 531 tkcin0(ixt) = 0.01056 532 tkcin1(ixt) = 0.0005016 533 tkcin2(ixt) = 0.0014432 534 tnat(ixt)=0. 535 !toce(ixt)=2.2222E-8 ! corrigé par Alex Cauquoin 536 !toce(ixt)=1.0E-18 ! rapport 3H/1H ocean 537 toce(ixt)=4.0E-19 ! rapport T/H = 0.2 TU Dreisigacker and Roether 1978 538 tcorr(ixt)=1. 539 tdifrel(ixt)=1./0.968 540 talph1(ixt)=46480. 541 talph2(ixt)=-103.87 542 talph3(ixt)=0. 543 talps1(ixt)=46480. 544 talps2(ixt)=-103.87 545 alpha_liq_sol(ixt)=1. 546 Rdefault(ixt)=0.0 547 Rmethox(ixt)=0.0 548 striso(ixt)='HTO' 549 endif 550 if (ixt.eq.iso_O17) then ! Deuterium 551 pente_MWL=0.528 552 ! tdifrel(ixt)=1./0.985452 ! donné par Amaelle 553 tdifrel(ixt)=1./0.98555 ! valeur utilisée en 1D et dans modèle de LdG 554 ! fac_kcin=0.5145 ! donné par Amaelle 555 fac_kcin= (tdifrel(ixt)-1.0)/(tdifrel_O18-1.0) 556 tkcin0(ixt) = tkcin0_O18*fac_kcin 557 tkcin1(ixt) = tkcin1_O18*fac_kcin 558 tkcin2(ixt) = tkcin2_O18*fac_kcin 559 tnat(ixt)=0.004/100. ! O17 représente 0.004% de l'oxygène 560 toce(ixt)=tnat(ixt)*(1.0+deltaO18_oce/1000.0)**pente_MWL 561 tcorr(ixt)=1.0+fac_enrichoce18*pente_MWL ! donné par Amaelle 562 talph1(ixt)=talph1_O18 563 talph2(ixt)=talph2_O18 564 talph3(ixt)=talph3_O18 565 talps1(ixt)=talps1_O18 566 talps2(ixt)=talps2_O18 567 alpha_liq_sol(ixt)=(alpha_liq_sol_O18)**fac_coeff_eq17_liq 568 if (Rdefault_smow) then 569 Rdefault(ixt)=tnat(ixt)*(-3.15/1000.0+1.0) 570 else 571 Rdefault(ixt)=0.0 572 endif 573 Rmethox(ixt)=(230./1000.+1.)*tnat(ixt) !Zahn et al 2006 574 striso(ixt)='O17' 575 endif 576 577 if (ixt.eq.iso_O18) then ! Oxygene18 578 tkcin0(ixt) = tkcin0_O18 579 tkcin1(ixt) = tkcin1_O18 580 tkcin2(ixt) = tkcin2_O18 581 tnat(ixt)=2005.2E-6 582 toce(ixt)=tnat(ixt)*(1.0+deltaO18_oce/1000.0) 583 tcorr(ixt)=1.0+fac_enrichoce18 584 tdifrel(ixt)=tdifrel_O18 585 talph1(ixt)=talph1_O18 586 talph2(ixt)=talph2_O18 587 talph3(ixt)=talph3_O18 588 talps1(ixt)=talps1_O18 589 talps2(ixt)=talps2_O18 590 alpha_liq_sol(ixt)=alpha_liq_sol_O18 591 if (Rdefault_smow) then 592 Rdefault(ixt)=tnat(ixt)*(-6.0/1000.0+1.0) 593 else 594 Rdefault(ixt)=0.0 595 endif 596 Rmethox(ixt)=(130./1000.+1.)*tnat(ixt) !Zahn et al 2006 597 ! write(*,*) 'iso_init 163: ZXalpha_liq_sol=',ZXalpha_liq_sol 598 striso(ixt)='O18' 599 write(*,*) 'isotopes_mod 519: ixt,striso(ixt)=',ixt,striso(ixt) 600 endif 601 602 if (ixt.eq.iso_HDO) then ! Deuterium 603 pente_MWL=8.0 604 ! fac_kcin=0.88 605 tdifrel(ixt)=1./0.9755 606 fac_kcin= (tdifrel(ixt)-1)/(tdifrel_O18-1) 607 tkcin0(ixt) = tkcin0_O18*fac_kcin 608 tkcin1(ixt) = tkcin1_O18*fac_kcin 609 tkcin2(ixt) = tkcin2_O18*fac_kcin 610 tnat(ixt)=155.76E-6 611 toce(ixt)=tnat(ixt)*(1.0+pente_MWL*deltaO18_oce/1000.0) 612 tcorr(ixt)=1.0+fac_enrichoce18*pente_MWL 613 talph1(ixt)=24844. 614 talph2(ixt)=-76.248 615 talph3(ixt)=52.612E-3 616 talps1(ixt)=16288. 617 talps2(ixt)=-0.0934 618 !ZXalpha_liq_sol=1.0192 ! Weston, Ralph, 1955 619 alpha_liq_sol(ixt)=1.0212 620 ! valeur de Lehmann & Siegenthaler, 1991, Journal of 621 ! Glaciology, vol 37, p 23 622 if (Rdefault_smow) then 623 Rdefault(ixt)=tnat(ixt)*((-6.0*pente_MWL+10.0)/1000.0+1.0) 624 else 625 Rdefault(ixt)=0.0 626 endif 627 Rmethox(ixt)=tnat(ixt)*(-25.0/1000.+1.) ! Zahn et al 2006 628 striso(ixt)='HDO' 629 write(*,*) 'isotopes_mod 548: ixt,striso(ixt)=',ixt,striso(ixt) 630 endif 631 632 ! write(*,*) 'iso_init 163: ZXalpha_liq_sol=',ZXalpha_liq_sol 633 if (ixt.eq.iso_eau) then ! Oxygene16 634 tkcin0(ixt) = 0.0 635 tkcin1(ixt) = 0.0 636 tkcin2(ixt) = 0.0 637 tnat(ixt)=1. 638 toce(ixt)=tnat(ixt) 639 tcorr(ixt)=1.0 640 tdifrel(ixt)=1. 641 talph1(ixt)=0. 642 talph2(ixt)=0. 643 talph3(ixt)=0. 644 talps1(ixt)=0. 645 talph3(ixt)=0. 646 alpha_liq_sol(ixt)=1. 647 if (Rdefault_smow) then 648 Rdefault(ixt)=tnat(ixt)*1.0 649 else 650 Rdefault(ixt)=1.0 651 endif 652 Rmethox(ixt)=1.0 653 striso(ixt)='eau' 654 endif 655 656 999 continue 657 658 ! test de sensibilité: 659 if (ok_nocinsfc) then ! no kinetic effect in sfc evaporation 660 do ixt=1,niso 661 tkcin0(ixt) = 0.0 662 tkcin1(ixt) = 0.0 663 tkcin2(ixt) = 0.0 664 enddo 665 endif 666 667 ! nom des isotopes 668 669 ! verif 670 write(*,*) 'iso_init 285: verif initialisation:' 671 672 do ixt=1,niso 673 write(*,*) '* striso(',ixt,')=<'//striso(ixt)//'>' 674 write(*,*) 'tnat(',ixt,')=',tnat(ixt) 675 ! write(*,*) 'alpha_liq_sol(',ixt,')=',alpha_liq_sol(ixt) 676 ! write(*,*) 'tkcin0(',ixt,')=',tkcin0(ixt) 677 ! write(*,*) 'tdifrel(',ixt,')=',tdifrel(ixt) 678 enddo 679 write(*,*) 'iso_init 69: lambda=',lambda_sursat 680 write(*,*) 'iso_init 69: thumxt1=',thumxt1 681 write(*,*) 'iso_init 69: h_land_ice=',h_land_ice 682 write(*,*) 'iso_init 69: P_veg=',P_veg 683 684 return 251 CALL msg(' 315: A_satlim='//real2str(A_satlim), modname, A_satlim > 1.0) 252 IF(A_satlim > 1.0) STOP 253 #endif 254 ! CALL get_in('slope_limiterxy', slope_limiterxy, 2.0) 255 ! CALL get_in('slope_limiterz', slope_limiterz, 2.0) 256 CALL get_in('modif_ratqs', modif_ratqs, 0) 257 CALL get_in('Pcrit_ratqs', Pcrit_ratqs, 500.0) 258 CALL get_in('ratqsbasnew', ratqsbasnew, 0.05) 259 CALL get_in('fac_modif_evaoce', fac_modif_evaoce, 1.0) 260 CALL get_in('ok_bidouille_wake', ok_bidouille_wake, 0) 261 ! si oui, la temperature de cond est celle de l'environnement, pour eviter 262 ! bugs quand temperature dans ascendances convs est mal calculee 263 CALL get_in('cond_temp_env', cond_temp_env, .FALSE.) 264 IF(ANY(isoName == 'H[3]HO')) & 265 CALL get_in('ok_prod_nucl_tritium', ok_prod_nucl_tritium, .FALSE., .FALSE.) 266 267 !-------------------------------------------------------------- 268 ! Parameters that do not depend on the nature of water isotopes: 269 !-------------------------------------------------------------- 270 ! -- temperature at which ice condensate starts to form (valeur ECHAM?): 271 pxtmelt = 273.15 272 273 ! -- temperature at which all condensate is ice: 274 pxtice = 273.15-10.0 275 276 !- -- test PHASE 277 ! pxtmelt = 273.15 - 10.0 278 ! pxtice = 273.15 - 30.0 279 280 ! -- minimum temperature to calculate fractionation coeff 281 pxtmin = 273.15 - 120.0 ! On ne calcule qu'au dessus de -120°C 282 pxtmax = 273.15 + 60.0 ! On ne calcule qu'au dessus de +60°C 283 ! Remarque: les coeffs ont ete mesures seulement jusq'à -40! 284 285 ! -- a constant for alpha_eff for equilibrium below cloud base: 286 tdifexp = 0.58 287 tv0cin = 7.0 288 289 ! facteurs lambda et mu dans Si=musi-lambda*T 290 musi=1.0 291 if (ok_nocinsat) lambda_sursat = 0.0 ! no sursaturation effect 292 293 ! diffusion dans le sol 294 Kd=2.5e-9 ! m2/s 295 296 ! cas où cste_surf_cond: on met rhs ou/et Ts cste pour voir 297 rh_cste_surf_cond = 0.6 298 T_cste_surf_cond = 288.0 299 300 !-------------------------------------------------------------- 301 ! Parameters that depend on the nature of water isotopes: 302 !-------------------------------------------------------------- 303 ! Local constants 304 fac_enrichoce18 = 0.0005 ! Then: tcorO18 = 1 + fac_enrichoce18 305 ! tcorD = 1 + fac_enrichoce18*8 306 ! tcorO17 = 1 + fac_enrichoce18*0.528 307 alpha_liq_sol_O18 = 1.00291 ! From Lehmann & Siegenthaler, 1991, 308 ! Journal of Glaciology, vol 37, p 23 309 talph1_O18 = 1137. ; talph2_O18 = -0.4156 ; talph3_O18 = -2.0667E-3 310 talps1_O18 = 11.839 ; talps2_O18 = -0.028244 311 tkcin0_O18 = 0.006 ; tkcin1_O18 = 0.000285 ; tkcin2_O18 = 0.00082 312 tdifrel_O18 = 1./0.9723 313 314 ! ln(alphaeq) ratio between O18 and O17 315 fac_coeff_eq17_liq = 0.529 ! From Amaelle 316 !fac_coeff_eq17_ice = 0.528 ! slope MWL 317 fac_coeff_eq17_ice = 0.529 318 319 CALL msg('iso_O18, iso_HDO, iso_eau = '//TRIM(strStack(int2str([iso_O18, iso_HDO, iso_eau]))), modname) 320 321 !--- Kinetic factor for surface evaporation: 322 ! (cf: kcin = tkcin0 if |V|<tv0cin 323 ! kcin = tkcin1*|Vsurf| + tkcin2 if |V|>tv0cin ) 324 ! (Rq: formula discontinuous for |V|=tv0cin... ) 325 326 DO ixt = 1, niso 327 sxt=int2str(ixt) 328 WRITE(*,*) 'iso_init 80: ixt=',ixt 329 330 Rdefault(ixt) = 0.0 331 IF(ixt == iso_HTO) THEN !=== H[3]HO 332 tdifrel(ixt) = 1./0.968 333 tkcin0(ixt) = 0.01056 334 tkcin1(ixt) = 0.0005016 335 tkcin2(ixt) = 0.0014432 336 tnat (ixt) = 0. 337 toce (ixt) = 4.0E-19 ! Ratio T/H = 0.2 TU, Dreisigacker and Roether 1978 338 !toce (ixt) = 2.2222E-8 ! Corrected by Alex Cauquoin 339 !toce (ixt) = 1.0E-18 ! Ratio 3H/1H ocean 340 tcorr (ixt) = 1. 341 talph1(ixt) = 46480. ; talph2(ixt) = -103.87 ; talph3(ixt) = 0. 342 talps1(ixt) = 46480. ; talps2(ixt) = -103.87 343 alpha_liq_sol(ixt) = 1. 344 Rmethox(ixt) = 0.0 345 striso (ixt) = 'HTO' 346 ELSE IF(ixt == iso_O17) THEN !=== H2[17]O 347 tdifrel(ixt)=1./0.98555 ! Used in 1D and in LdG's model 348 !tdifrel(ixt)=1./0.985452 ! From Amaelle 349 !fac_kcin=0.5145 ! From Amaelle 350 fac_kcin= (tdifrel(ixt)-1.0)/(tdifrel_O18-1.0) 351 tkcin0(ixt) = tkcin0_O18*fac_kcin 352 tkcin1(ixt) = tkcin1_O18*fac_kcin 353 tkcin2(ixt) = tkcin2_O18*fac_kcin 354 tnat (ixt) = 0.004/100. ! O17 = 0.004% of oxygen 355 pente_MWL=0.528 356 toce (ixt) = tnat(ixt)*(1.0+deltaO18_oce/1000.0)**pente_MWL 357 tcorr (ixt) = 1.0+fac_enrichoce18*pente_MWL ! From Amaelle 358 talph1(ixt) = talph1_O18 ; talph2(ixt) = talph2_O18 ; talph3(ixt) = talph3_O18 359 talps1(ixt) = talps1_O18 ; talps2(ixt) = talps2_O18 360 alpha_liq_sol(ixt) = (alpha_liq_sol_O18)**fac_coeff_eq17_liq 361 IF(Rdefault_smow) Rdefault(ixt) = tnat(ixt)*(-3.15/1000.0+1.0) 362 Rmethox(ixt) = (230./1000.+1.)*tnat(ixt) ! Zahn et al 2006 363 striso (ixt) = 'O17' 364 ELSE IF(ixt == iso_O18) THEN !=== H2[18]O 365 tdifrel(ixt) = tdifrel_O18 366 tkcin0(ixt) = tkcin0_O18 367 tkcin1(ixt) = tkcin1_O18 368 tkcin2(ixt) = tkcin2_O18 369 tnat (ixt) = 2005.2E-6 370 toce (ixt) = tnat(ixt)*(1.0+deltaO18_oce/1000.0) 371 tcorr (ixt) = 1.0+fac_enrichoce18 372 talph1(ixt) = talph1_O18 ; talph2(ixt) = talph2_O18 ; talph3(ixt) = talph3_O18 373 talps1(ixt) = talps1_O18 ; talps2(ixt) = talps2_O18 374 alpha_liq_sol(ixt) = alpha_liq_sol_O18 375 IF(Rdefault_smow) Rdefault(ixt) = tnat(ixt)*(-6.0/1000.0+1.0) 376 Rmethox(ixt) = (130./1000.+1.)*tnat(ixt) ! Zahn et al 2006 377 striso (ixt) = 'O18' 378 CALL msg('519: ixt, striso(ixt) = '//TRIM(sxt)//', '//TRIM(striso(ixt)), modname) 379 ELSE IF(ixt == iso_HDO) THEN !=== H[2]HO 380 tdifrel(ixt) = 1./0.9755 381 !fac_kcin=0.88 382 fac_kcin= (tdifrel(ixt)-1.0)/(tdifrel_O18-1.0) 383 tkcin0(ixt) = tkcin0_O18*fac_kcin 384 tkcin1(ixt) = tkcin1_O18*fac_kcin 385 tkcin2(ixt) = tkcin2_O18*fac_kcin 386 tnat (ixt) = 155.76E-6 387 pente_MWL = 8.0 388 toce (ixt) = tnat(ixt)*(1.0+pente_MWL*deltaO18_oce/1000.0) 389 tcorr (ixt) = 1.0+fac_enrichoce18*pente_MWL 390 talph1(ixt) = 24844. ; talph2(ixt) = -76.248 ; talph3(ixt) = 52.612E-3 391 talps1(ixt) = 16288. ; talps2(ixt) = -0.0934 392 !alpha_liq_sol(ixt)=1.0192 ZX ! From Weston, Ralph, 1955 393 alpha_liq_sol(ixt)=1.0212 ! From Lehmann & Siegenthaler, 1991, 394 ! Journal of Glaciology, vol 37, p 23 395 IF(Rdefault_smow) Rdefault(ixt) = tnat(ixt)*((-6.0*pente_MWL+10.0)/1000.0+1.0) 396 Rmethox(ixt) = tnat(ixt)*(-25.0/1000.+1.) ! Zahn et al 2006 397 striso (ixt) = 'HDO' 398 CALL msg('548: ixt,striso(ixt) = '//TRIM(sxt)//', '//striso(ixt), modname) 399 ELSE IF(ixt == iso_eau) THEN !=== H2O[16] 400 tkcin0(ixt) = 0.0 401 tkcin1(ixt) = 0.0 402 tkcin2(ixt) = 0.0 403 tnat (ixt) = 1. 404 toce (ixt)=tnat(ixt) 405 tcorr (ixt) = 1.0 406 tdifrel(ixt) = 1. 407 talph1(ixt) = 0. ; talph2(ixt) = 0. ; talph3(ixt) = 0. 408 talps1(ixt) = 0. ; talph3(ixt) = 0. 409 alpha_liq_sol(ixt)=1. 410 IF(Rdefault_smow) Rdefault(ixt) = tnat(ixt)*1.0 411 Rmethox(ixt) = 1.0 412 striso(ixt) = 'eau' 413 END IF 414 END DO 415 416 !--- Sensitivity test: no kinetic effect in sfc evaporation 417 IF(ok_nocinsfc) THEN 418 tkcin0(1:niso) = 0.0 419 tkcin1(1:niso) = 0.0 420 tkcin2(1:niso) = 0.0 421 END IF 422 423 CALL msg('285: verif initialisation:', modname) 424 DO ixt=1,niso 425 CALL msg(' * striso('//TRIM(sxt)//') = <'//TRIM(striso(ixt))//'>', modname) 426 CALL msg( ' tnat('//TRIM(sxt)//') = '//TRIM(real2str(tnat(ixt))), modname) 427 ! CALL msg(' alpha_liq_sol('//TRIM(sxt)//') = '//TRIM(real2str(alpha_liq_sol(ixt))), modname) 428 ! CALL msg( ' tkcin0('//TRIM(sxt)//') = '//TRIM(real2str(tkcin0(ixt))), modname) 429 ! CALL msg( ' tdifrel('//TRIM(sxt)//') = '//TRIM(real2str(tdifrel(ixt))), modname) 430 END DO 431 CALL msg('69: lambda = '//TRIM(real2str(lambda_sursat)), modname) 432 CALL msg('69: thumxt1 = '//TRIM(real2str(thumxt1)), modname) 433 CALL msg('69: h_land_ice = '//TRIM(real2str(h_land_ice)), modname) 434 CALL msg('69: P_veg = '//TRIM(real2str(P_veg)), modname) 435 685 436 END SUBROUTINE iso_init 686 437 438 439 SUBROUTINE getinp_s(nam, val, def, lDisp) 440 USE ioipsl_getincom, ONLY: getin 441 USE mod_phys_lmdz_mpi_data, ONLY : is_mpi_root 442 USE mod_phys_lmdz_omp_data, ONLY : is_omp_root 443 USE mod_phys_lmdz_transfert_para, ONLY : bcast 444 CHARACTER(LEN=*), INTENT(IN) :: nam 445 CHARACTER(LEN=*), INTENT(INOUT) :: val 446 CHARACTER(LEN=*), INTENT(IN) :: def 447 LOGICAL, OPTIONAL, INTENT(IN) :: lDisp 448 LOGICAL :: lD 449 !$OMP BARRIER 450 IF(.NOT.(is_mpi_root.AND.is_omp_root)) RETURN 451 val=def; CALL getin(nam,val); CALL bcast(val) 452 lD=.TRUE.; IF(PRESENT(lDisp)) lD=lDisp 453 IF(lD) CALL msg(TRIM(nam)//' = '//TRIM(val)) 454 END SUBROUTINE getinp_s 455 456 SUBROUTINE getinp_i(nam, val, def, lDisp) 457 USE ioipsl_getincom, ONLY: getin 458 USE mod_phys_lmdz_mpi_data, ONLY : is_mpi_root 459 USE mod_phys_lmdz_omp_data, ONLY : is_omp_root 460 USE mod_phys_lmdz_transfert_para, ONLY : bcast 461 CHARACTER(LEN=*), INTENT(IN) :: nam 462 INTEGER, INTENT(INOUT) :: val 463 INTEGER, INTENT(IN) :: def 464 LOGICAL, OPTIONAL, INTENT(IN) :: lDisp 465 LOGICAL :: lD 466 !$OMP BARRIER 467 IF(.NOT.(is_mpi_root.AND.is_omp_root)) RETURN 468 val=def; CALL getin(nam,val); CALL bcast(val) 469 lD=.TRUE.; IF(PRESENT(lDisp)) lD=lDisp 470 IF(lD) CALL msg(TRIM(nam)//' = '//TRIM(int2str(val))) 471 END SUBROUTINE getinp_i 472 473 SUBROUTINE getinp_r(nam, val, def, lDisp) 474 USE ioipsl_getincom, ONLY: getin 475 USE mod_phys_lmdz_mpi_data, ONLY : is_mpi_root 476 USE mod_phys_lmdz_omp_data, ONLY : is_omp_root 477 USE mod_phys_lmdz_transfert_para, ONLY : bcast 478 CHARACTER(LEN=*), INTENT(IN) :: nam 479 REAL, INTENT(INOUT) :: val 480 REAL, INTENT(IN) :: def 481 LOGICAL, OPTIONAL, INTENT(IN) :: lDisp 482 LOGICAL :: lD 483 !$OMP BARRIER 484 IF(.NOT.(is_mpi_root.AND.is_omp_root)) RETURN 485 val=def; CALL getin(nam,val); CALL bcast(val) 486 lD=.TRUE.; IF(PRESENT(lDisp)) lD=lDisp 487 IF(lD) CALL msg(TRIM(nam)//' = '//TRIM(real2str(val))) 488 END SUBROUTINE getinp_r 489 490 SUBROUTINE getinp_l(nam, val, def, lDisp) 491 USE ioipsl_getincom, ONLY: getin 492 USE mod_phys_lmdz_mpi_data, ONLY : is_mpi_root 493 USE mod_phys_lmdz_omp_data, ONLY : is_omp_root 494 USE mod_phys_lmdz_transfert_para, ONLY : bcast 495 CHARACTER(LEN=*), INTENT(IN) :: nam 496 LOGICAL, INTENT(INOUT) :: val 497 LOGICAL, INTENT(IN) :: def 498 LOGICAL, OPTIONAL, INTENT(IN) :: lDisp 499 LOGICAL :: lD 500 !$OMP BARRIER 501 IF(.NOT.(is_mpi_root.AND.is_omp_root)) RETURN 502 val=def; CALL getin(nam,val); CALL bcast(val) 503 lD=.TRUE.; IF(PRESENT(lDisp)) lD=lDisp 504 IF(lD) CALL msg(TRIM(nam)//' = '//TRIM(bool2str(val))) 505 END SUBROUTINE getinp_l 687 506 688 507 END MODULE isotopes_mod -
LMDZ6/trunk/libf/phylmdiso/isotopes_routines_mod.F90
r4089 r4143 3 3 4 4 MODULE isotopes_routines_mod 5 USE infotrac_phy, ONLY: niso, ntraciso=>ntiso, index_trac=>itZonIso, ntraceurs_zone=>nzone 5 6 IMPLICIT NONE 6 7 … … 13 14 & zqs,zq_ancien,zqev_diag,zq) 14 15 15 USE infotrac_phy, ONLY: ntraciso,niso, &16 ntraceurs_zone,index_trac17 16 USE isotopes_mod, ONLY: ridicule, ridicule_rain, thumxt1, no_pce, & 18 17 & bidouille_anti_divergence, & … … 846 845 & L, xtnu,Pveg) 847 846 848 USE infotrac_phy, ONLY: niso849 847 USE isotopes_mod, ONLY: ridicule_qsol, ridicule, & 850 848 & ridicule_evap,P_veg,iso_HDO,iso_eau,iso_O17,iso_O18 … … 1301 1299 1302 1300 subroutine calcul_kcin(Vsurf,KCIN) 1303 USE infotrac_phy, ONLY: niso1304 1301 USE isotopes_mod, ONLY: tv0cin,tkcin0,tkcin1,tkcin2 1305 1302 implicit none … … 1328 1325 1329 1326 subroutine fractcalk(kt, ptin, pxtfra, pfraice) 1330 !USE infotrac_phy, ONLY: use_iso1331 1327 USE isotopes_mod, ONLY: talph1,talph2,talph3,pxtmin,iso_O17, & 1332 1328 & fac_coeff_eq17_liq, pxtmelt, & … … 1457 1453 subroutine fractcalk_liq(kt, ptin, pxtfra) 1458 1454 1459 ! USE infotrac_phy, ONLY: use_iso1460 1455 USE isotopes_mod, ONLY: pxtmin,talph1,talph2,talph3, & 1461 1456 & fac_coeff_eq17_liq, pxtice, & … … 1522 1517 subroutine fractcalk_glace(kt, ptin, pfraice) 1523 1518 1524 ! use infotrac_phy, ONLY: use_iso1525 1519 use isotopes_mod, ONLY: talps1,talps2, iso_O17,fac_coeff_eq17_ice, & 1526 1520 & pxtmelt,musi, lambda_sursat, tdifrel, & … … 1631 1625 subroutine fractcalk_vectall(ptin, pxtfra, pfraice,n) 1632 1626 1633 USE infotrac_phy, ONLY: niso1634 1627 USE isotopes_mod, ONLY: talph1,talph2,talph3,tdifrel,pxtmin, & 1635 1628 & iso_O17, iso_HTO, iso_eau, iso_O18, iso_HDO, musi, lambda_sursat, & … … 1803 1796 subroutine fractcalk_vectall_liq(ptin, pxtfra, n) 1804 1797 1805 USE infotrac_phy, ONLY: niso1806 1798 USE isotopes_mod, ONLY: pxtmin,talph1,talph2,talph3, & 1807 1799 & iso_eau,iso_HDO, iso_O18, iso_O17,iso_HTO,fac_coeff_eq17_liq, & … … 1882 1874 subroutine fractcalk_vectall_ice(ptin, pfraice,n) 1883 1875 1884 use infotrac_phy, ONLY: niso1885 1876 use isotopes_mod, ONLY: talps1,talps2, fac_coeff_eq17_ice, & 1886 1877 & pxtmelt,musi, lambda_sursat, tdifrel, & … … 2023 2014 & i,Rsol,klon) 2024 2015 2025 USE infotrac_phy, ONLY: niso,ntraciso2026 2016 USE isotopes_mod, ONLY: iso_eau, iso_HDO,ridicule, & 2027 2017 & ridicule_qsol,iso_O17,iso_O18 … … 2233 2223 & i,xtevap,klon) 2234 2224 2235 USE infotrac_phy, ONLY: ntraciso,niso2236 2225 USE isotopes_mod, ONLY: iso_eau, iso_HDO,ridicule,ridicule_rain, & 2237 2226 iso_O18,iso_O17 … … 2444 2433 & ) 2445 2434 2446 USE infotrac_phy, ONLY: ntraciso,niso2447 2435 USE isotopes_mod, ONLY: iso_eau, iso_HDO,expb_max,tdifrel,tdifexp, & 2448 2436 & ridicule,thumxt1,ridicule_rain,bidouille_anti_divergence, & … … 4500 4488 & Tevap) 4501 4489 4502 USE infotrac_phy, ONLY: niso,ntraciso4503 4490 USE isotopes_mod, ONLY: iso_eau, iso_HDO,bidouille_anti_divergence, & 4504 4491 & ridicule,ridicule_rain … … 4658 4645 & ,fac_ftmr) 4659 4646 4660 USE infotrac_phy, ONLY: niso,ntraciso4661 4647 USE isotopes_mod, ONLY: iso_eau, iso_HDO,bidouille_anti_divergence, & 4662 4648 & Rdefault,ridicule,ridicule_rain … … 4904 4890 & Pqiinf_cas,Pqiinf) 4905 4891 4906 USE infotrac_phy, ONLY: niso,ntraciso4907 4892 USE isotopes_mod, ONLY: iso_eau, iso_HDO 4908 4893 … … 5066 5051 & xtnew_cas,xtnew,Pxtiinf_cas,Pxtiinf) 5067 5052 5068 USE infotrac_phy, ONLY: niso5069 5053 USE isotopes_mod, ONLY: iso_eau, iso_HDO 5070 5054 #ifdef ISOVERIF … … 5111 5095 & ncum) 5112 5096 5113 USE infotrac_phy, ONLY: niso,ntraciso5114 5097 USE isotopes_mod, ONLY: iso_eau, iso_HDO 5115 5098 … … 5176 5159 & nloc,ncum,nd,i) 5177 5160 5178 USE infotrac_phy, ONLY: niso, ntraciso5179 5161 USE isotopes_mod, ONLY: iso_eau, iso_HDO 5180 5162 … … 5252 5234 & nloc,ncum,nd,i) 5253 5235 5254 USE infotrac_phy, ONLY: niso,ntraciso5255 5236 USE isotopes_mod, ONLY: iso_eau, iso_HDO 5256 5237 … … 5326 5307 & nloc,ncum,nd,i) 5327 5308 5328 USE infotrac_phy, ONLY: niso,ntraciso5329 5309 USE isotopes_mod, ONLY: iso_eau, iso_HDO 5330 5310 … … 5396 5376 & nloc,ncum,nd,i) 5397 5377 5398 USE infotrac_phy, ONLY: niso,ntraciso5399 5378 USE isotopes_mod, ONLY: iso_eau, iso_HDO,ridicule 5400 5379 … … 5566 5545 & nloc,ncum,nd,i,frac_sublim) 5567 5546 5568 USE infotrac_phy, ONLY: niso,ntraciso5569 5547 USE isotopes_mod, ONLY: iso_eau, iso_HDO,ridicule 5570 5548 … … 5703 5681 & zxtrfln_cas,zxt_cas,zxtrfl,zxtrfln,zxt,klon) 5704 5682 5705 USE infotrac_phy, ONLY: niso,ntraciso5706 5683 USE isotopes_mod, ONLY: iso_eau, iso_HDO 5707 5684 … … 5739 5716 & delP,paprs,k,klon,klev) 5740 5717 5741 USE infotrac_phy, ONLY: niso5742 5718 USE isotopes_mod, ONLY: iso_eau, iso_HDO 5743 5719 implicit none … … 5777 5753 & delP,paprs,k,klon,klev) 5778 5754 5779 USE infotrac_phy, ONLY: niso,ntraciso5780 5755 USE isotopes_mod, ONLY: iso_eau, iso_HDO 5781 5756 implicit none … … 5828 5803 & delP,paprs,k,klon,klev,frac_sublim) 5829 5804 5830 USE infotrac_phy, ONLY: niso,ntraciso5831 5805 USE isotopes_mod, ONLY: iso_eau, iso_HDO 5832 5806 #ifdef ISOVERIF … … 5905 5879 & qp0,A,m0,beta,gama,g0) 5906 5880 5907 USE infotrac_phy, ONLY: niso5908 5881 USE isotopes_mod, ONLY: iso_eau, iso_HDO,ntot 5909 5882 #ifdef ISOVERIF … … 6100 6073 6101 6074 6102 USE infotrac_phy, ONLY: ntraciso,niso,ntraceurs_zone, &6103 & index_trac6104 6075 USE isotopes_mod, ONLY: iso_eau, iso_HDO,thumxt1, & 6105 6076 & bidouille_anti_divergence,ridicule … … 7680 7651 & ) 7681 7652 7682 USE infotrac_phy, ONLY: niso,ntraciso7683 7653 USE isotopes_mod, ONLY: iso_eau, iso_HDO, Rdefault, ridicule 7684 7654 #ifdef ISOVERIF … … 8048 8018 & ) 8049 8019 8050 USE infotrac_phy, ONLY: niso,ntraciso8051 8020 USE isotopes_mod, ONLY: iso_eau, iso_HDO, Rdefault,ridicule 8052 8021 #ifdef ISOVERIF … … 8253 8222 & ) 8254 8223 8255 USE infotrac_phy, ONLY: niso,ntraciso8256 8224 USE isotopes_mod, ONLY: iso_eau, iso_HDO, Rdefault,ridicule 8257 8225 #ifdef ISOVERIF … … 8390 8358 & ,xtp_cas,xtwater_cas,xtevap_cas) 8391 8359 8392 USE infotrac_phy, ONLY: niso,ntraciso8393 8360 USE isotopes_mod, ONLY: iso_eau, iso_HDO,no_pce, Rdefault,ridicule 8394 8361 #ifdef ISOVERIF … … 8927 8894 & ,xtp_cas,xtwater_cas,xtevap_cas) 8928 8895 8929 USE infotrac_phy, ONLY: niso,ntraciso8930 8896 USE isotopes_mod, ONLY: iso_eau, iso_HDO, Rdefault, ridicule 8931 8897 #ifdef ISOVERIF … … 9317 9283 9318 9284 9319 USE infotrac_phy, ONLY: niso,ntraciso, &9320 & ntraceurs_zone,index_trac9321 9285 USE isotopes_mod, ONLY: iso_eau, iso_HDO,bidouille_anti_divergence, & 9322 9286 & thumxt1, ridicule … … 11022 10986 & ) 11023 10987 11024 USE infotrac_phy, ONLY: niso,ntraciso11025 10988 USE isotopes_mod, ONLY: iso_eau, iso_HDO,Rdefault,ridicule 11026 10989 #ifdef ISOVERIF … … 11172 11135 & ,xtp_cas,xtwater_cas,xtevap_cas) 11173 11136 11174 USE infotrac_phy, ONLY: niso,ntraciso11175 11137 USE isotopes_mod, ONLY: iso_eau, iso_HDO,Rdefault,no_pce,ridicule 11176 11138 #ifdef ISOVERIF … … 11770 11732 & ,xtp_cas,xtwater_cas,xtevap_cas) 11771 11733 11772 USE infotrac_phy, ONLY: niso,ntraciso11773 11734 USE isotopes_mod, ONLY: iso_eau, iso_HDO, Rdefault, ridicule 11774 11735 #ifdef ISOVERIF … … 12198 12159 & tcond,zfice,zxtice,zxtliq) 12199 12160 12200 USE infotrac_phy, ONLY: ntraciso,niso12201 12161 USE isotopes_mod, ONLY: iso_eau,iso_HDO,essai_convergence, & 12202 12162 & bidouille_anti_divergence,ridicule … … 12432 12392 & tcond,zfice,zxtice,zxtliq,n) 12433 12393 12434 USE infotrac_phy, ONLY: ntraciso,niso12435 12394 USE isotopes_mod, ONLY: iso_eau,iso_HDO,iso_O18,bidouille_anti_divergence, & 12436 12395 & ridicule … … 12890 12849 & tcond,zfice,zxtice,zxtliq) 12891 12850 12892 USE infotrac_phy, ONLY: ntraciso12893 12851 USE isotopes_mod, ONLY: iso_eau,iso_HDO,bidouille_anti_divergence, & 12894 12852 & ridicule,iso_O18 … … 13088 13046 & xt1lay,q1lay,tsurf,t_coup,nisurf,Rland_ice) 13089 13047 13090 USE infotrac_phy, ONLY: ntraciso,niso13091 13048 USE isotopes_mod, ONLY: Rdefault,iso_eau,iso_HDO, & 13092 13049 & bidouille_anti_divergence, ridicule,ridicule_snow, & … … 13658 13615 & ) 13659 13616 13660 USE infotrac_phy, ONLY: ntraciso,niso13661 13617 USE isotopes_mod, ONLY: iso_eau,iso_HDO,cste_surf_cond, & 13662 13618 & rh_cste_surf_cond,Rdefault,T_cste_surf_cond,iso_O17,iso_O18, & … … 13982 13938 & ) 13983 13939 13984 USE infotrac_phy, ONLY: ntraciso,niso13985 13940 USE isotopes_mod, ONLY: tcorr, toce, alpha_liq_sol,ridicule_evap, & 13986 13941 iso_eau,iso_HDO … … 14238 14193 & ) 14239 14194 14240 USE infotrac_phy, ONLY: ntraciso,niso14241 14195 USE isotopes_mod, ONLY: h_land_ice, ridicule,ridicule_snow,ridicule_evap, & 14242 14196 iso_eau,iso_HDO,iso_O18 … … 14573 14527 & ) 14574 14528 14575 USE infotrac_phy, ONLY: niso,ntraciso14576 14529 USE isotopes_mod, ONLY: tdifrel,tdifexp_sol, iso_eau, iso_HDO, & 14577 14530 & bidouille_anti_divergence,ruissellement_pluie, Rdefault,Kd, & … … 16001 15954 !USE write_field_phy 16002 15955 USE indice_sol_mod, only: nbsrf 16003 USE infotrac_phy, ONLY: ntraciso,niso16004 15956 USE isotopes_mod, ONLY: initialisation_iso, iso_eau,iso_HDO, & 16005 15957 ridicule_qsol,tnat, P_veg,iso_O18,ridicule, ridicule_snow,iso_O17, & … … 16187 16139 !USE write_field_phy 16188 16140 USE indice_sol_mod, only: nbsrf 16189 USE infotrac_phy, ONLY: ntraciso,niso16190 16141 USE isotopes_mod, ONLY: tnat,iso_HDO,iso_O18,iso_HTO, iso_eau,toce, & 16191 16142 & Rdefault,iso_O17,ridicule,ridicule_qsol … … 16574 16525 !USE write_field_phy 16575 16526 USE indice_sol_mod, only: nbsrf 16576 USE infotrac_phy, ONLY: ntraciso,niso16577 16527 USE isotopes_mod, ONLY: striso,iso_HDO,iso_eau 16578 16528 #ifdef ISOVERIF … … 16849 16799 & d_xt_decroiss, & 16850 16800 & xt_seri) 16851 USE infotrac_phy, only: ntraciso16852 16801 USE isotopes_mod, only: iso_HTO,ok_prod_nucl_tritium 16853 16802 USE dimphy, only: klon,klev … … 18371 18320 ! & prod_nucl_HTO) 18372 18321 18373 USE infotrac_phy, only: ntraciso18374 18322 use isotopes_mod, only: nessai, lat_nucl, lon_nucl, & 18375 18323 & zmin_nucl, zmax_nucl, HTO_nucl … … 18593 18541 & paprs, & 18594 18542 & prod_nucl) 18595 USE infotrac_phy, only: ntraciso18596 18543 USE isotopes_mod, ONLY: iso_HTO 18597 18544 use geometry_mod, only: cell_area … … 18739 18686 & tcond,zfice,zxtice,zxtliq) 18740 18687 18741 USE infotrac_phy, ONLY: ntraciso,niso,index_trac,ntraceurs_zone18742 18688 USE isotopes_mod, ONLY: iso_eau,iso_HDO,essai_convergence, & 18743 18689 & bidouille_anti_divergence,ridicule … … 18869 18815 & tcond,zfice,zxtice,zxtliq,n) 18870 18816 18871 USE infotrac_phy, ONLY: ntraciso,niso,index_trac,ntraceurs_zone18872 18817 USE isotopes_mod, ONLY: iso_eau,iso_HDO,iso_O18,bidouille_anti_divergence, & 18873 18818 & ridicule -
LMDZ6/trunk/libf/phylmdiso/isotopes_verif_mod.F90
r4050 r4143 5 5 MODULE isotopes_verif_mod 6 6 !use isotopes_mod, ONLY: 7 !#ifdef ISOTRAC 8 !use isotrac_mod, ONLY: 9 !#endif 7 #ifdef ISOTRAC 8 USE isotrac_mod, ONLY: nzone 9 #endif 10 USE infotrac_phy, ONLY: ntraciso=>ntiso, niso, itZonIso 10 11 implicit none 11 12 save … … 93 94 SUBROUTINE iso_verif_init() 94 95 use ioipsl_getin_p_mod, ONLY : getin_p 95 !USE infotrac_phy, ONLY: use_iso96 96 use isotopes_mod, ONLY: iso_O17, iso_O18, iso_HDO 97 97 implicit none … … 196 196 197 197 subroutine iso_verif_aberrant(R,err_msg) 198 !USE infotrac_phy, ONLY: use_iso199 198 use isotopes_mod, ONLY: ridicule, iso_HDO 200 199 implicit none … … 227 226 228 227 subroutine iso_verif_aberrant_encadre(R,err_msg) 229 !use infotrac_phy, ONLY: use_iso230 228 use isotopes_mod, ONLY: ridicule, iso_HDO 231 229 implicit none … … 263 261 264 262 subroutine iso_verif_aberrant_choix(xt,q,qmin,deltaDmax,err_msg) 265 !use infotrac_phy, ONLY: use_iso266 263 use isotopes_mod, ONLY: iso_HDO 267 264 implicit none … … 298 295 299 296 function iso_verif_aberrant_nostop(R,err_msg) 300 !use infotrac_phy, ONLY: use_iso301 297 use isotopes_mod, ONLY: ridicule,iso_HDO 302 298 implicit none … … 330 326 331 327 function iso_verif_aberrant_enc_nostop(R,err_msg) 332 !use infotrac_phy, ONLY: use_iso333 328 use isotopes_mod, ONLY: ridicule,iso_HDO 334 329 implicit none … … 366 361 & qmin,deltaDmax,err_msg) 367 362 368 !use infotrac_phy, ONLY: use_iso369 363 use isotopes_mod, ONLY: iso_HDO 370 364 implicit none … … 428 422 function iso_verif_aberrant_enc_choix_nostop(xt,q, & 429 423 & qmin,deltaDmax,err_msg) 430 !use infotrac_phy, ONLY: use_iso431 424 use isotopes_mod, ONLY: iso_HDO 432 425 implicit none … … 1065 1058 ! ********** 1066 1059 function deltaD(R) 1067 !use infotrac_phy, ONLY: use_iso1068 1060 USE isotopes_mod, ONLY: tnat,iso_HDO 1069 1061 implicit none … … 1082 1074 ! ********** 1083 1075 function deltaO(R) 1084 !use infotrac_phy, ONLY: use_iso1085 1076 USE isotopes_mod, ONLY: tnat,iso_O18 1086 1077 implicit none … … 1098 1089 ! ********** 1099 1090 function dexcess(RD,RO) 1100 !use infotrac_phy, ONLY: use_iso1101 1091 USE isotopes_mod, ONLY: tnat,iso_O18,iso_HDO 1102 1092 implicit none … … 1138 1128 ! ********** 1139 1129 function o17excess(R17,R18) 1140 !use infotrac_phy, ONLY: use_iso1141 1130 USE isotopes_mod, ONLY: tnat,iso_O18,iso_O17 1142 1131 implicit none … … 1160 1149 & xt,q,err_msg,ni,n,m) 1161 1150 1162 !use infotrac_phy, ONLY: use_iso1163 1151 USE isotopes_mod, ONLY: iso_eau 1164 1152 implicit none … … 1212 1200 & xt,q,err_msg,ni,n) 1213 1201 1214 !use infotrac_phy, ONLY: use_iso1215 1202 USE isotopes_mod, ONLY: iso_eau 1216 1203 implicit none … … 1296 1283 subroutine iso_verif_aberrant_vect2D( & 1297 1284 & xt,q,err_msg,ni,n,m) 1298 !use infotrac_phy, ONLY: use_iso1299 1285 use isotopes_mod, ONLY: ridicule,tnat,iso_HDO 1300 1286 implicit none … … 1345 1331 & xt,q,err_msg,ni,n,m) 1346 1332 1347 !use infotrac_phy, ONLY: use_iso1348 1333 use isotopes_mod, ONLY: ridicule,tnat,iso_HDO 1349 1334 implicit none … … 1399 1384 & xt,q,err_msg,ni,n,m) 1400 1385 1401 !use infotrac_phy, ONLY: use_iso1402 1386 use isotopes_mod, ONLY: ridicule,tnat,iso_HDO 1403 1387 implicit none … … 1450 1434 & xt,q,err_msg,ni,n,m,deltaDmax) 1451 1435 1452 !use infotrac_phy, ONLY: use_iso1453 1436 use isotopes_mod, ONLY: ridicule,tnat,iso_HDO 1454 1437 implicit none … … 1501 1484 & xt,q,err_msg,ni,n,m) 1502 1485 1503 !use infotrac_phy, ONLY: use_iso1504 1486 use isotopes_mod, ONLY: ridicule,tnat,iso_HDO,iso_O18 1505 1487 implicit none … … 1766 1748 & xt,q,err_msg,ni,n,m,ib,ie) 1767 1749 1768 !use infotrac_phy, ONLY: use_iso1769 1750 use isotopes_mod, ONLY: ridicule,tnat,iso_HDO 1770 1751 implicit none … … 1817 1798 & xt,q,err_msg,ni,n,m,ib,ie) 1818 1799 1819 !use infotrac_phy, ONLY: use_iso1820 1800 USE isotopes_mod, ONLY: iso_eau 1821 1801 implicit none … … 1863 1843 function iso_verif_traceur_choix_nostop(x,err_msg, & 1864 1844 & errmax,errmaxrel,ridicule_trac,deltalimtrac) 1865 USE infotrac_phy, ONLY: ntraciso1866 1845 use isotopes_mod, ONLY: iso_HDO 1867 1846 implicit none … … 1915 1894 function iso_verif_tracnps_choix_nostop(x,err_msg, & 1916 1895 & errmax,errmaxrel,ridicule_trac,deltalimtrac) 1917 USE infotrac_phy, ONLY: ntraciso1918 1896 USE isotopes_mod, ONLY: iso_HDO 1919 1897 implicit none … … 1961 1939 1962 1940 function iso_verif_tracpos_choix_nostop(x,err_msg,seuil) 1963 use infotrac_phy, ONLY: ntraciso,niso1964 1941 use isotrac_mod, only: index_iso,strtrac,index_zone 1965 1942 use isotopes_mod, only: striso … … 1994 1971 1995 1972 function iso_verif_traceur_noNaN_nostop(x,err_msg) 1996 use infotrac_phy, ONLY: ntraciso,niso1997 1973 use isotrac_mod, only: index_iso 1998 1974 use isotopes_mod, only: striso … … 2029 2005 & errmaxin,errmaxrelin) 2030 2006 2031 use infotrac_phy, ONLY: index_trac,ntraciso,niso2032 2007 use isotopes_mod, ONLY: ridicule,striso 2033 use isotrac_mod, only: ntraceurs_zone2034 2008 ! on vérifie juste bilan de masse 2035 2009 implicit none … … 2053 2027 2054 2028 xtractot=0.0 2055 do izone=1,n traceurs_zone2056 ixt=i ndex_trac(izone,iiso)2029 do izone=1,nzone 2030 ixt=itZonIso(izone,iiso) 2057 2031 xtractot=xtractot+x(ixt) 2058 enddo !do izone=1,ntraceurs_zone2032 enddo 2059 2033 2060 2034 if (iso_verif_egalite_choix_nostop(xtractot,x(iiso), & … … 2082 2056 & ridicule_trac,deltalimtrac) 2083 2057 2084 use infotrac_phy, ONLY: index_trac,ntraciso2085 2058 USE isotopes_mod, ONLY: iso_eau, iso_HDO 2086 use isotrac_mod, only: strtrac ,ntraceurs_zone2059 use isotrac_mod, only: strtrac 2087 2060 ! on vérifie juste deltaD 2088 2061 implicit none … … 2103 2076 2104 2077 if ((iso_eau.gt.0).and.(iso_HDO.gt.0)) then 2105 do izone=1,n traceurs_zone2106 ieau=i ndex_trac(izone,iso_eau)2107 ixt=i ndex_trac(izone,iso_HDO)2078 do izone=1,nzone 2079 ieau=itZonIso(izone,iso_eau) 2080 ixt=itZonIso(izone,iso_HDO) 2108 2081 2109 2082 if (iso_verif_aberrant_choix_nostop(x(ixt),x(ieau), & … … 2118 2091 ! : //strtrac(izone)) 2119 2092 ! endif 2120 enddo !do izone=1,n traceurs_zone2093 enddo !do izone=1,nzone 2121 2094 endif ! if ((iso_eau.gt.0).and.(iso_HDO.gt.0)) then 2122 2095 … … 2124 2097 2125 2098 INTEGER FUNCTION iso_verif_tag17_q_deltaD_chns(x,err_msg) RESULT(res) 2126 USE infotrac_phy, ONLY: index_trac, ntraciso2127 2099 USE isotopes_mod, ONLY: iso_HDO, iso_eau, ridicule 2128 2100 USE isotrac_mod, ONLY: nzone_temp, option_traceurs … … 2135 2107 !--- Check whether * deltaD(highest tagging layer) < 200 permil 2136 2108 ! * q < 2137 ieau=i ndex_trac(nzone_temp,iso_eau)2138 ixt=i ndex_trac(nzone_temp,iso_HDO)2109 ieau=itZonIso(nzone_temp,iso_eau) 2110 ixt=itZonIso(nzone_temp,iso_HDO) 2139 2111 IF(x(ieau)>ridicule) THEN 2140 2112 IF(iso_verif_positif_nostop(-200.0-deltaD(x(ixt)/x(ieau)), err_msg//': deltaDt05 trop fort')==1) THEN … … 2147 2119 !--- Check whether q is small ; then, qt01 < 10% 2148 2120 IF(x(iso_eau)<2.0e-3) THEN 2149 ieau1= i ndex_trac(1,iso_eau)2121 ieau1= itZonIso(1,iso_eau) 2150 2122 IF(iso_verif_positif_nostop(0.1-(x(ieau1)/x(iso_eau)),err_msg//': qt01 trop abondant')==1) THEN 2151 2123 res=1; write(*,*) 'x=',x … … 2156 2128 SUBROUTINE iso_verif_trac17_q_deltaD(x,err_msg) 2157 2129 USE isotrac_mod, ONLY: nzone_temp, option_traceurs 2158 USE infotrac_phy, ONLY: ntraciso2159 2130 IMPLICIT NONE 2160 2131 REAL, INTENT(IN) :: x(ntraciso) … … 2167 2138 2168 2139 subroutine iso_verif_traceur(x,err_msg) 2169 USE infotrac_phy, ONLY: ntraciso2170 2140 use isotrac_mod, only: ridicule_trac 2171 2141 implicit none … … 2195 2165 subroutine iso_verif_traceur_retourne3D(x,n1,n2,n3, & 2196 2166 & i1,i2,i3,err_msg) 2197 USE infotrac_phy, ONLY: ntraciso2198 2167 use isotrac_mod, only: ridicule_trac 2199 2168 … … 2228 2197 subroutine iso_verif_traceur_retourne4D(x,n1,n2,n3,n4, & 2229 2198 & i1,i2,i3,i4,err_msg) 2230 USE infotrac_phy, ONLY: ntraciso2231 2199 use isotrac_mod, only: ridicule_trac 2232 2200 … … 2262 2230 subroutine iso_verif_traceur_retourne2D(x,n1,n2, & 2263 2231 & i1,i2,err_msg) 2264 USE infotrac_phy, ONLY: ntraciso2265 2232 use isotrac_mod, only: ridicule_trac 2266 2233 implicit none … … 2293 2260 2294 2261 subroutine iso_verif_traceur_vect(x,n,m,err_msg) 2295 USE infotrac_phy, ONLY: ntraciso2296 2262 USE isotopes_mod, ONLY: iso_HDO 2297 2263 implicit none … … 2329 2295 2330 2296 subroutine iso_verif_tracnps_vect(x,n,m,err_msg) 2331 USE infotrac_phy, ONLY: ntraciso2332 2297 USE isotopes_mod, ONLY: iso_HDO 2333 2298 implicit none … … 2363 2328 2364 2329 subroutine iso_verif_traceur_noNaN_vect(x,n,m,err_msg) 2365 USE infotrac_phy, ONLY: ntraciso,niso2366 2330 implicit none 2367 2331 … … 2407 2371 subroutine iso_verif_trac_masse_vect(x,n,m,err_msg, & 2408 2372 & errmax,errmaxrel) 2409 USE infotrac_phy, ONLY: index_trac,ntraciso,niso2410 2373 use isotopes_mod, only: striso 2411 use isotrac_mod, only: ntraceurs_zone2412 2374 implicit none 2413 2375 … … 2430 2392 xtractot(i,j)=0.0 2431 2393 xiiso(i,j)=x(iiso,i,j) 2432 do izone=1,n traceurs_zone2433 ixt=i ndex_trac(izone,iiso)2394 do izone=1,nzone 2395 ixt=itZonIso(izone,iiso) 2434 2396 xtractot(i,j)=xtractot(i,j)+x(ixt,i,j) 2435 enddo !do izone=1,n traceurs_zone2397 enddo !do izone=1,nzone 2436 2398 enddo !do i=1,n 2437 2399 enddo !do j=1,m … … 2447 2409 2448 2410 subroutine iso_verif_tracdd_vect(x,n,m,err_msg) 2449 use infotrac_phy, only: index_trac,ntraciso,niso2450 2411 use isotopes_mod, only: iso_HDO,iso_eau 2451 use isotrac_mod, only: strtrac ,ntraceurs_zone2412 use isotrac_mod, only: strtrac 2452 2413 implicit none 2453 2414 … … 2464 2425 2465 2426 if (iso_HDO.gt.0) then 2466 do izone=1,n traceurs_zone2467 ieau=i ndex_trac(izone,iso_eau)2427 do izone=1,nzone 2428 ieau=itZonIso(izone,iso_eau) 2468 2429 do iiso=1,niso 2469 ixt=i ndex_trac(izone,iiso)2430 ixt=itZonIso(izone,iiso) 2470 2431 do j=1,m 2471 2432 do i=1,n … … 2484 2445 & xiiso,xeau,err_msg//strtrac(izone),niso,n,m, & 2485 2446 & deltalimtrac) 2486 enddo !do izone=1,n traceurs_zone2447 enddo !do izone=1,nzone 2487 2448 endif !if (iso_HDO.gt.0) then 2488 2449 … … 2490 2451 2491 2452 subroutine iso_verif_tracpos_vect(x,n,m,err_msg,seuil) 2492 USE infotrac_phy, ONLY: ntraciso,niso2493 2453 implicit none 2494 2454 … … 2532 2492 2533 2493 subroutine iso_verif_tracnps(x,err_msg) 2534 USE infotrac_phy, ONLY: ntraciso2535 2494 use isotrac_mod, only: ridicule_trac 2536 2495 … … 2559 2518 2560 2519 subroutine iso_verif_tracpos_choix(x,err_msg,seuil) 2561 USE infotrac_phy, ONLY: ntraciso2562 2520 implicit none 2563 2521 ! vérifier des choses sur les traceurs … … 2585 2543 subroutine iso_verif_traceur_choix(x,err_msg, & 2586 2544 & errmax,errmaxrel,ridicule_trac_loc,deltalimtrac) 2587 USE infotrac_phy, ONLY: ntraciso2588 2545 implicit none 2589 2546 ! vérifier des choses sur les traceurs … … 2608 2565 2609 2566 function iso_verif_traceur_nostop(x,err_msg) 2610 USE infotrac_phy, ONLY: ntraciso2611 2567 use isotrac_mod, only: ridicule_trac 2612 2568 !use isotopes_verif, only: errmax,errmaxrel,deltalimtrac … … 2637 2593 2638 2594 subroutine iso_verif_traceur_justmass(x,err_msg) 2639 USE infotrac_phy, ONLY: ntraciso2640 2595 implicit none 2641 2596 ! on vérifie que noNaN et masse … … 2666 2621 2667 2622 function iso_verif_traceur_jm_nostop(x,err_msg) 2668 USE infotrac_phy, ONLY: ntraciso2669 2623 implicit none 2670 2624 ! on vérifie que noNaN et masse … … 2699 2653 2700 2654 subroutine iso_verif_tag17_q_deltaD_vect(x,n,m,err_msg) 2701 USE infotrac_phy, ONLY: index_trac,ntraciso2702 2655 USE isotopes_mod, ONLY: tnat,iso_eau, ridicule,iso_HDO 2703 2656 use isotrac_mod, only: option_traceurs,nzone_temp … … 2719 2672 ! verifier que deltaD du tag de la couche la plus haute < 2720 2673 ! 200 permil, et vérifier que son q est inférieur à 2721 ieau=i ndex_trac(nzone_temp,iso_eau)2722 ixt=i ndex_trac(nzone_temp,iso_HDO)2723 ieau1=i ndex_trac(1,iso_eau)2674 ieau=itZonIso(nzone_temp,iso_eau) 2675 ixt=itZonIso(nzone_temp,iso_HDO) 2676 ieau1=itZonIso(1,iso_eau) 2724 2677 do i=1,n 2725 2678 do k=1,m … … 2759 2712 2760 2713 subroutine iso_verif_tag17_q_deltaD_vect_ret3D(x,n,m,nq,err_msg) 2761 USE infotrac_phy, ONLY: index_trac,ntraciso2762 2714 USE isotopes_mod, ONLY: tnat,iso_eau,iso_HDO,ridicule 2763 2715 use isotrac_mod, only: option_traceurs,nzone_temp … … 2779 2731 ! verifier que deltaD du tag de la couche la plus haute < 2780 2732 ! 200 permil, et vérifier que son q est inférieur à 2781 ieau=i ndex_trac(nzone_temp,iso_eau)2782 ixt=i ndex_trac(nzone_temp,iso_HDO)2783 ieau1=i ndex_trac(1,iso_eau)2733 ieau=itZonIso(nzone_temp,iso_eau) 2734 ixt=itZonIso(nzone_temp,iso_HDO) 2735 ieau1=itZonIso(1,iso_eau) 2784 2736 do iq=1,nq 2785 2737 do i=1,n -
LMDZ6/trunk/libf/phylmdiso/isotrac_mod.F90
r3927 r4143 4 4 5 5 MODULE isotrac_mod 6 use infotrac_phy, ONLY: niso,nt raciso,ntraceurs_zone6 use infotrac_phy, ONLY: niso,ntiso,ntraceurs_zone=>nzone 7 7 use isotopes_mod, only: ridicule 8 8 … … 120 120 ! ces variables sont initialisées dans traceurs_init 121 121 122 !integer ntraciso123 !parameter (ntraciso=(ntraceurs_zone+1)*niso)124 !integer ntracisoOR ! défini dans traceurs_init125 122 integer, ALLOCATABLE, DIMENSION(:), save :: index_iso 126 123 !$OMP THREADPRIVATE(index_iso) 127 124 integer, ALLOCATABLE, DIMENSION(:), save :: index_zone 128 125 !$OMP THREADPRIVATE(index_zone) 129 integer, ALLOCATABLE, DIMENSION(:,:), save :: i ndex_trac_loc ! il y a déjà un index_tracdans infotrac: vérifier que c'est le même130 !$OMP THREADPRIVATE(i ndex_trac_loc)126 integer, ALLOCATABLE, DIMENSION(:,:), save :: itZonIso_loc ! il y a déjà un itZonIso dans infotrac: vérifier que c'est le même 127 !$OMP THREADPRIVATE(itZonIso_loc) 131 128 character*3, ALLOCATABLE, DIMENSION(:), save :: strtrac 132 129 !$OMP THREADPRIVATE(strtrac) … … 211 208 212 209 use IOIPSL ! getin 213 USE infotrac_phy, ONLY: ntraciso,niso,ntraceurs_zone,index_trac 214 USE isotopes_mod, ONLY: iso_eau,ntracisoOR,initialisation_iso, & 215 & iso_eau_possible 210 USE infotrac_phy, ONLY: itZonIso 211 USE isotopes_mod, ONLY: iso_eau,ntracisoOR,initialisation_iso 216 212 USE dimphy, only: klon,klev 217 213 … … 244 240 245 241 ! allouer 246 allocate (index_iso(nt raciso))247 allocate (index_zone(nt raciso))248 allocate (i ndex_trac_loc(ntraceurs_zone,niso))242 allocate (index_iso(ntiso)) 243 allocate (index_zone(ntiso)) 244 allocate (itZonIso_loc(ntraceurs_zone,niso)) 249 245 allocate (strtrac(ntraceurs_zone)) 250 246 allocate (bassin_map(klon)) … … 779 775 780 776 ! dans ce cas particulier, il y a des traceurs dans ORCHIDEE 781 ntracisoOR=nt raciso777 ntracisoOR=ntiso 782 778 783 779 else if ((option_traceurs.eq.17).or. & … … 990 986 index_zone(itrac)=izone 991 987 index_iso(itrac)=ixt 992 i ndex_trac_loc(izone,ixt)=itrac993 if (i ndex_trac(izone,ixt).ne.index_trac_loc(izone,ixt)) then988 itZonIso_loc(izone,ixt)=itrac 989 if (itZonIso(izone,ixt).ne.itZonIso_loc(izone,ixt)) then 994 990 write(*,*) 'isotrac 989: izone,ixt,itrac=',izone,ixt,itrac 995 991 CALL abort_physic ('isotrac','isotrac 989',1) … … 998 994 enddo 999 995 #ifdef ISOVERIF 1000 ! call iso_verif_egalite(float(itrac),float(nt raciso), &996 ! call iso_verif_egalite(float(itrac),float(ntiso), & 1001 997 ! & 'traceurs_init 50') 1002 if (itrac.ne.nt raciso) then998 if (itrac.ne.ntiso) then 1003 999 write(*,*) 'traceurs_init 50' 1004 1000 stop … … 1006 1002 1007 1003 write(*,*) 'traceurs_init 65: bilan de l''init:' 1008 write(*,*) 'index_zone=',index_zone(1:nt raciso)1009 write(*,*) 'index_iso=',index_iso(1:nt raciso)1010 write(*,*) 'i ndex_trac=',index_trac(1:ntraceurs_zone,1:niso)1004 write(*,*) 'index_zone=',index_zone(1:ntiso) 1005 write(*,*) 'index_iso=',index_iso(1:ntiso) 1006 write(*,*) 'itZonIso=',itZonIso(1:ntraceurs_zone,1:niso) 1011 1007 do izone=1,ntraceurs_zone 1012 1008 write(*,*) 'strtrac(',izone,')=',strtrac(izone) -
LMDZ6/trunk/libf/phylmdiso/isotrac_routines_mod.F90
r3927 r4143 8 8 ! isotopes_verif a besoin de isotopes et isotrac 9 9 ! isotrac n'a besoin que de isotopes 10 USE infotrac_phy, ONLY: ntraciso=>ntiso, niso, index_trac=>itZonIso, ntraceurs_zone=>nzone 10 11 IMPLICIT NONE 11 12 … … 17 18 & ncum,izone) 18 19 19 USE infotrac_phy, ONLY: ntraciso,niso,index_trac20 20 USE isotopes_mod, ONLY: ridicule,iso_eau 21 21 … … 63 63 & xtp_avantevap_cas,liq,hdiag) 64 64 65 USE infotrac_phy, ONLY: ntraciso,niso,index_trac66 65 USE isotopes_mod, ONLY: ridicule,iso_eau,iso_HDO,ridicule_evap 67 66 USE isotrac_mod, only: option_revap,evap_franche,izone_revap, & … … 231 230 & nloc,ncum,nd,i,izone) 232 231 233 USE infotrac_phy, ONLY: ntraciso,niso,index_trac234 232 USE isotopes_mod, ONLY: iso_eau 235 233 #ifdef ISOVERIF … … 320 318 & nloc,ncum,nd,i,izone) 321 319 322 USE infotrac_phy, ONLY: ntraciso,niso,index_trac323 320 USE isotopes_mod, ONLY: iso_eau 324 321 #ifdef ISOVERIF … … 408 405 & nloc,ncum,nd,i,izone) 409 406 410 USE infotrac_phy, ONLY: ntraciso,niso,index_trac411 407 USE isotopes_mod, ONLY: ridicule,iso_eau 412 408 #ifdef ISOVERIF … … 476 472 & nloc,ncum,nd,izone) 477 473 478 USE infotrac_phy, ONLY: ntraciso,niso,index_trac479 474 USE isotopes_mod, ONLY: ridicule,iso_eau 480 475 #ifdef ISOVERIF … … 643 638 & nloc,ncum,nd,i,frac_sublim,izone) 644 639 645 USE infotrac_phy, ONLY: ntraciso,niso,index_trac646 640 USE isotopes_mod, ONLY: ridicule,iso_eau 647 641 #ifdef ISOVERIF … … 802 796 & xtrevap_tag,liq,hdiag) 803 797 804 USE infotrac_phy, ONLY: ntraciso,niso,index_trac805 798 USE isotopes_mod, ONLY: ridicule,iso_eau 806 799 USE isotrac_mod, only: option_revap,evap_franche … … 899 892 & klon,izone,ptrac) 900 893 901 USE infotrac_phy, ONLY: ntraciso,niso,index_trac902 894 USE isotopes_mod, ONLY: ridicule,iso_eau 903 895 #ifdef ISOVERIF … … 986 978 & klon,izone) 987 979 988 USE infotrac_phy, ONLY: ntraciso,niso,index_trac989 980 USE isotopes_mod, ONLY: ridicule,iso_eau 990 981 #ifdef ISOVERIF … … 1052 1043 & klon,izone,zxt,xtrevap_tag) 1053 1044 1054 USE infotrac_phy, ONLY: ntraciso,niso, &1055 ntraceurs_zone,index_trac1056 1045 #ifdef ISOVERIF 1057 1046 USE isotopes_verif_mod … … 1342 1331 1343 1332 subroutine find_bassin(lat,lon,bassin) 1344 use isotrac_mod, only: izone_poubelle,ntraceurs_zone ,option_traceurs, &1333 use isotrac_mod, only: izone_poubelle,ntraceurs_zone=>ntiso,option_traceurs, & 1345 1334 & bassin_map 1346 1335 #ifdef ISOVERIF … … 1517 1506 subroutine isotrac_recolorise_tmin(xt,t) 1518 1507 USE dimphy, only: klon, klev 1519 USE infotrac_phy, ONLY: ntraciso,niso, &1520 ntraceurs_zone,index_trac1521 1508 USE isotrac_mod, only: zone_temp,nzone_temp 1522 1509 #ifdef ISOVERIF … … 1603 1590 subroutine isotrac_recolorise_tmin_sfrev(xt,t) 1604 1591 USE dimphy, only: klon,klev 1605 USE infotrac_phy, ONLY: ntraciso,niso, &1606 ntraceurs_zone,index_trac1607 1592 USE isotrac_mod, only: nzone_temp,zone_temp 1608 1593 #ifdef ISOVERIF … … 1661 1646 subroutine isotrac_recolorise_saturation(xt,rh,lat,pres) 1662 1647 USE dimphy, only: klon,klev 1663 USE infotrac_phy, ONLY: ntraciso,niso, &1664 ntraceurs_zone,index_trac1665 1648 #ifdef ISOVERIF 1666 1649 USE isotopes_verif_mod … … 1727 1710 subroutine isotrac_recolorise_boite(xt,boite_map) 1728 1711 USE dimphy, only: klon,klev 1729 USE infotrac_phy, ONLY: ntraciso,niso, &1730 ntraceurs_zone,index_trac1731 1712 #ifdef ISOVERIF 1732 1713 USE isotopes_verif_mod … … 1781 1762 subroutine isotrac_recolorise_extra(xt,rlat) 1782 1763 USE dimphy, only: klon,klev 1783 USE infotrac_phy, ONLY: ntraciso,niso, &1784 ntraceurs_zone,index_trac1785 1764 usE isotrac_mod, only: lim_tag20,izone_trop,izone_extra 1786 1765 #ifdef ISOVERIF … … 1830 1809 subroutine isotrac_recolorise_conv(xt,rlat,presnivs,rain_con) 1831 1810 USE dimphy, only: klon,klev 1832 USE infotrac_phy, ONLY: ntraciso,niso, &1833 ntraceurs_zone,index_trac1834 1811 use isotrac_mod, only: lim_precip_tag22, & 1835 1812 & izone_conv_BT,izone_conv_UT … … 1902 1879 subroutine boite_AMMA_init(lat,lon,presnivs,boite_map) 1903 1880 USE dimphy, only: klon,klev 1904 USE infotrac_phy, ONLY: ntraciso,niso, &1905 ntraceurs_zone,index_trac1906 1881 #ifdef ISOVERIF 1907 1882 USE isotopes_verif_mod … … 1957 1932 subroutine boite_UT_extra_init(lat,lon,presnivs,boite_map) 1958 1933 USE dimphy, only: klon,klev 1959 USE infotrac_phy, ONLY: ntraciso,niso, &1960 ntraceurs_zone,index_trac1961 1934 use isotrac_mod, only: izone_extra,izone_trop 1962 1935 #ifdef ISOVERIF … … 2095 2068 & seuil_in) 2096 2069 USE dimphy, only: klon,klev 2097 USE infotrac_phy, ONLY: ntraciso,niso, &2098 ntraceurs_zone,index_trac2099 2070 USE isotopes_mod, only: bidouille_anti_divergence,iso_eau 2100 2071 use isotrac_mod, only: option_seuil_tag_tmin,izone_cond, & … … 2304 2275 subroutine bassin_map_init_opt20(lat,bassin_map) 2305 2276 USE dimphy, only: klon 2306 USE infotrac_phy, ONLY: ntraciso,niso, &2307 ntraceurs_zone,index_trac2308 2277 use isotrac_mod, only: izone_cont,izone_trop,lim_tag20 2309 2278 #ifdef ISOVERIF … … 2334 2303 USE geometry_mod, ONLY : latitude_deg 2335 2304 USE dimphy, only: klon,klev 2336 use infotrac_phy, only: ntraciso2337 2305 use isotrac_mod, only: option_traceurs,boite_map 2338 2306 implicit none … … 2365 2333 subroutine iso_verif_traceur_jbid_vect(x,n,m) 2366 2334 USE isotopes_mod, ONLY: bidouille_anti_divergence,iso_eau,ridicule 2367 USE infotrac_phy, ONLY: index_trac,niso,ntraciso 2368 use isotrac_mod, only: ntraceurs_zone 2335 use isotrac_mod, only: ntraceurs_zone=>nzone 2369 2336 implicit none 2370 2337 … … 2430 2397 subroutine iso_verif_traceur_jbidouille(x) 2431 2398 USE isotopes_mod, ONLY: bidouille_anti_divergence,iso_eau,ridicule 2432 USE infotrac_phy, ONLY: index_trac,niso,ntraciso,ntraceurs_zone2433 2399 implicit none 2434 2400 … … 2470 2436 subroutine iso_verif_traceur_jbid_pos(x) 2471 2437 USE isotopes_mod, ONLY: bidouille_anti_divergence,iso_eau,ridicule 2472 USE infotrac_phy, ONLY: index_trac,niso,ntraciso,ntraceurs_zone2473 2438 !#ifdef ISOVERIF 2474 2439 ! use isotopes_verif_mod, only: iso_verif_traceur_pbidouille … … 2544 2509 subroutine iso_verif_traceur_jbid_pos_vect(n,m,x) 2545 2510 USE isotopes_mod, ONLY: bidouille_anti_divergence,iso_eau,ridicule 2546 USE infotrac_phy, ONLY: index_trac,niso,ntraciso,ntraceurs_zone2547 2511 #ifdef ISOVERIF 2548 2512 USE isotopes_verif_mod … … 2625 2589 subroutine iso_verif_traceur_jbid_pos2(x,q) 2626 2590 USE isotopes_mod, ONLY: bidouille_anti_divergence,iso_eau,ridicule 2627 USE infotrac_phy, ONLY: index_trac,niso,ntraciso,ntraceurs_zone2628 2591 #ifdef ISOVERIF 2629 2592 use isotopes_verif_mod … … 2696 2659 subroutine iso_verif_traceur_jbid_vect1D(x,n) 2697 2660 USE isotopes_mod, ONLY: bidouille_anti_divergence,iso_eau,ridicule 2698 USE infotrac_phy, ONLY: index_trac,niso,ntraciso,ntraceurs_zone2699 2661 implicit none 2700 2662 … … 2739 2701 2740 2702 subroutine iso_verif_traceur_pbidouille(x,err_msg) 2741 USE infotrac_phy, ONLY: ntraciso2742 2703 use isotopes_verif_mod 2743 2704 implicit none … … 2765 2726 2766 2727 function iso_verif_traceur_pbid_ns(x,err_msg) 2767 USE infotrac_phy, ONLY: ntraciso2768 2728 use isotopes_mod, ONLY: iso_HDO,bidouille_anti_divergence 2769 2729 use isotrac_mod, only: ridicule_trac … … 2828 2788 2829 2789 subroutine iso_verif_traceur_pbid_vect(x,n,m,err_msg) 2830 USE infotrac_phy, ONLY: ntraciso2831 2790 use isotopes_mod, ONLY: iso_HDO,bidouille_anti_divergence 2832 2791 use isotopes_verif_mod -
LMDZ6/trunk/libf/phylmdiso/limit_read_mod.F90
r3927 r4143 281 281 USE indice_sol_mod 282 282 #ifdef ISO 283 !USE infotrac_phy, ONLY: use_iso284 283 USE isotopes_mod, ONLY : iso_HTO,ok_prod_nucl_tritium 285 284 #ifdef ISOVERIF -
LMDZ6/trunk/libf/phylmdiso/ocean_forced_mod.F90
r4033 r4143 42 42 use config_ocean_skin_m, only: activate_ocean_skin 43 43 #ifdef ISO 44 USE infotrac_phy, ONLY: nt raciso,niso44 USE infotrac_phy, ONLY: ntiso,niso 45 45 USE isotopes_routines_mod, ONLY: calcul_iso_surf_oce_vectall, & 46 46 & calcul_iso_surf_sic_vectall … … 73 73 74 74 #ifdef ISO 75 REAL, DIMENSION(nt raciso,klon), INTENT(IN):: xtprecip_rain, xtprecip_snow76 REAL, DIMENSION(nt raciso,klon), INTENT(IN):: xtspechum75 REAL, DIMENSION(ntiso,klon), INTENT(IN) :: xtprecip_rain, xtprecip_snow 76 REAL, DIMENSION(ntiso,klon), INTENT(IN) :: xtspechum 77 77 real, dimension(klon), intent(IN) :: rlat 78 78 #endif … … 98 98 99 99 #ifdef ISO 100 REAL, DIMENSION(nt raciso,klon), INTENT(OUT):: xtevap ! isotopes in evaporation flux100 REAL, DIMENSION(ntiso,klon), INTENT(OUT) :: xtevap ! isotopes in evaporation flux 101 101 REAL, DIMENSION(klon), INTENT(out) :: h1 ! just a diagnostic, not useful for the simulation 102 102 #endif … … 271 271 USE phys_output_var_mod, ONLY : sens_prec_liq_o, sens_prec_sol_o, lat_prec_liq_o, lat_prec_sol_o 272 272 #ifdef ISO 273 USE infotrac_phy, ONLY: niso, ntraciso273 USE infotrac_phy, ONLY: niso, ntiso 274 274 USE isotopes_routines_mod, ONLY: calcul_iso_surf_oce_vectall, & 275 275 & calcul_iso_surf_sic_vectall … … 303 303 real, intent(in):: rhoa(:) ! (knon) density of moist air (kg / m3) 304 304 #ifdef ISO 305 REAL, DIMENSION(nt raciso,klon), INTENT(IN) :: xtprecip_rain, xtprecip_snow306 REAL, DIMENSION(nt raciso,klon), INTENT(IN) :: xtspechum307 REAL, DIMENSION(niso,klon), INTENT(IN) :: Roce308 REAL, DIMENSION(niso,klon), INTENT(IN):: Rland_ice305 REAL, DIMENSION(ntiso,klon), INTENT(IN) :: xtprecip_rain, xtprecip_snow 306 REAL, DIMENSION(ntiso,klon), INTENT(IN) :: xtspechum 307 REAL, DIMENSION(niso,klon), INTENT(IN) :: Roce 308 REAL, DIMENSION(niso,klon), INTENT(IN) :: Rland_ice 309 309 #endif 310 310 … … 330 330 REAL, DIMENSION(klon), INTENT(OUT) :: dflux_s, dflux_l 331 331 #ifdef ISO 332 REAL, DIMENSION(nt raciso,klon), INTENT(OUT) :: xtevap332 REAL, DIMENSION(ntiso,klon), INTENT(OUT) :: xtevap 333 333 #endif 334 334 -
LMDZ6/trunk/libf/phylmdiso/pbl_surface_mod.F90
r4036 r4143 31 31 wx_pbl_check, wx_pbl_dts_check, wx_evappot 32 32 use config_ocean_skin_m, only: activate_ocean_skin 33 #ifdef ISO 34 USE infotrac_phy, ONLY: niso,ntraciso=>ntiso 35 #endif 33 36 34 37 IMPLICIT NONE … … 193 196 USE indice_sol_mod 194 197 USE print_control_mod, ONLY: lunout 195 USE infotrac_phy, ONLY: niso,ntraciso ! ajout C Risi pour isos196 198 #ifdef ISOVERIF 197 199 USE isotopes_mod, ONLY: iso_eau,ridicule … … 395 397 USE print_control_mod, ONLY : prt_level,lunout 396 398 #ifdef ISO 397 USE infotrac_phy, ONLY: ntraciso,niso ! ajout C Risi pour isos398 399 USE isotopes_mod, ONLY: Rdefault,iso_eau 399 400 #ifdef ISOVERIF … … 4051 4052 USE indice_sol_mod 4052 4053 #ifdef ISO 4053 USE infotrac_phy, ONLY: ntraciso,niso ! ajout C Risi pour isos4054 4054 #ifdef ISOVERIF 4055 4055 USE isotopes_mod, ONLY: iso_eau,ridicule … … 4130 4130 use phys_state_var_mod, only: delta_sal, ds_ns, dt_ns, delta_sst 4131 4131 use config_ocean_skin_m, only: activate_ocean_skin 4132 #ifdef ISO4133 USE infotrac_phy, ONLY: ntraciso4134 #endif4135 4132 4136 4133 -
LMDZ6/trunk/libf/phylmdiso/phyredem.F90
r4089 r4143 39 39 USE iostart, ONLY: open_restartphy, close_restartphy, enddef_restartphy, put_field, put_var 40 40 USE traclmdz_mod, ONLY : traclmdz_to_restart 41 USE infotrac_phy, ONLY: type_trac, nqtot, tracers, nbtr, niso , ntraciso41 USE infotrac_phy, ONLY: type_trac, nqtot, tracers, nbtr, niso 42 42 #ifdef ISO 43 43 #ifdef ISOVERIF … … 485 485 xtrain_fall,xtsnow_fall, ql_ancien,xtl_ancien,qs_ancien,xts_ancien, & 486 486 xtsol,fxtevap 487 USE infotrac_phy,ONLY: niso, nt raciso487 USE infotrac_phy,ONLY: niso, ntiso 488 488 !USE control_mod 489 489 USE indice_sol_mod, ONLY: nbsrf … … 509 509 !REAL xtsol(niso,klon) 510 510 REAL xtsnow(niso,klon,nbsrf) 511 !REAL xtevap(nt raciso,klon,nbsrf)511 !REAL xtevap(ntiso,klon,nbsrf) 512 512 REAL xtrun_off_lic_0(niso,klon) 513 513 REAL Rland_ice(niso,klon) … … 566 566 #endif 567 567 568 do ixt=1,nt raciso568 do ixt=1,ntiso 569 569 570 570 if (ixt.le.niso) then … … 576 576 outiso=striso(iiso)//strtrac(izone) 577 577 #else 578 write(*,*) 'phyredem 546: ixt,nt raciso=', ixt,ntraciso578 write(*,*) 'phyredem 546: ixt,ntiso=', ixt,ntiso 579 579 stop 580 580 #endif -
LMDZ6/trunk/libf/phylmdiso/phys_local_var_mod.F90
r4118 r4143 726 726 USE infotrac_phy, ONLY : nbtr 727 727 #ifdef ISO 728 USE infotrac_phy, ONLY : ntraciso ,niso728 USE infotrac_phy, ONLY : ntraciso=>ntiso,niso 729 729 #endif 730 730 USE aero_mod -
LMDZ6/trunk/libf/phylmdiso/phys_output_mod.F90
r4120 r4143 35 35 USE iophy 36 36 USE dimphy 37 USE infotrac_phy, ONLY: nqtot, tracers, type_trac, niso, ntraciso 37 USE infotrac_phy, ONLY: nqtot, tracers, type_trac, niso, ntraciso=>ntiso 38 38 USE strings_mod, ONLY: maxlen 39 39 USE ioipsl -
LMDZ6/trunk/libf/phylmdiso/physiq_mod.F90
r4124 r4143 39 39 USE ioipsl_getin_p_mod, ONLY : getin_p 40 40 USE indice_sol_mod 41 USE infotrac, ONLY: iso_num, iso_indnum 42 USE infotrac_phy, ONLY: nqtot, nbtr, nqo, tracers, type_trac, nqCO2, indnum_fn_num 41 USE infotrac_phy, ONLY: nqtot, nbtr, nqo, tracers, type_trac, nqCO2 43 42 USE readTracFiles_mod, ONLY: addPhase 44 43 USE strings_mod, ONLY: strIdx, strStack, int2str … … 126 125 127 126 #ifdef ISO 128 USE infotrac_phy, ONLY: iq iso,niso, ntraciso, nzone127 USE infotrac_phy, ONLY: iqIsoPha,niso, ntraciso=>ntiso, nzone 129 128 USE isotopes_mod, ONLY: iso_eau,iso_HDO,iso_O18,iso_O17,iso_HTO, & 130 129 & bidouille_anti_divergence,ok_bidouille_wake, & … … 509 508 !====================================================================== 510 509 ! 511 INTEGER ivap ! indice de traceurs pour vapeur d'eau 512 PARAMETER (ivap=1) 513 INTEGER iliq ! indice de traceurs pour eau liquide 514 PARAMETER (iliq=2) 515 !CR: on ajoute la phase glace 516 INTEGER isol ! indice de traceurs pour eau glace 517 PARAMETER (isol=3) 518 INTEGER irneb ! indice de traceurs pour fraction nuageuse LS (optional) 519 PARAMETER (irneb=4) 510 ! indices de traceurs eau vapeur, liquide, glace, fraction nuageuse LS (optional) 511 INTEGER,SAVE :: ivap, iliq, isol, irneb 512 !$OMP THREADPRIVATE(ivap, iliq, isol, irneb) 520 513 ! 521 514 ! … … 1354 1347 1355 1348 IF (first) THEN 1349 ivap = strIdx(tracers(:)%name, addPhase('H2O', 'g')) 1350 iliq = strIdx(tracers(:)%name, addPhase('H2O', 'l')) 1351 isol = strIdx(tracers(:)%name, addPhase('H2O', 's')) 1352 irneb= strIdx(tracers(:)%name, addPhase('H2O', 'r')) 1356 1353 CALL init_etat0_limit_unstruct 1357 1354 IF (.NOT. create_etat0_limit) CALL init_limit_read(days_elapsed) … … 2412 2409 do ixt=1,ntraciso 2413 2410 #ifdef ISOVERIF 2414 write(*,*) 'physiq tmp 1762a: ixt,iqiso_vap=',ixt,iq iso(ixt,ivap)2415 write(*,*) 'physiq tmp 1762b: ixt,iqiso_liq=',ixt,iq iso(ixt,iliq)2411 write(*,*) 'physiq tmp 1762a: ixt,iqiso_vap=',ixt,iqIsoPha(ixt,ivap) 2412 write(*,*) 'physiq tmp 1762b: ixt,iqiso_liq=',ixt,iqIsoPha(ixt,iliq) 2416 2413 if (nqo.eq.3) then 2417 write(*,*) 'physiq tmp 1762c: ixt,iqiso_liq=',ixt,iq iso(ixt,iliq)2414 write(*,*) 'physiq tmp 1762c: ixt,iqiso_liq=',ixt,iqIsoPha(ixt,iliq) 2418 2415 endif !if (nqo.eq.3) then 2419 2416 #endif 2420 if (ixt.gt.niso) write(*,*) 'izone=',tracers(iq iso(ixt,ivap))%iso_iZone2417 if (ixt.gt.niso) write(*,*) 'izone=',tracers(iqIsoPha(ixt,ivap))%iso_iZone 2421 2418 DO k = 1, klev 2422 2419 DO i = 1, klon 2423 xt_seri(ixt,i,k) = qx(i,k,iq iso(ixt,ivap))2424 xtl_seri(ixt,i,k) = qx(i,k,iq iso(ixt,iliq))2420 xt_seri(ixt,i,k) = qx(i,k,iqIsoPha(ixt,ivap)) 2421 xtl_seri(ixt,i,k) = qx(i,k,iqIsoPha(ixt,iliq)) 2425 2422 if (nqo.eq.2) then 2426 2423 xts_seri(ixt,i,k) = 0. 2427 2424 else if (nqo.eq.3) then 2428 xts_seri(ixt,i,k) = qx(i,k,iq iso(ixt,isol))2425 xts_seri(ixt,i,k) = qx(i,k,iqIsoPha(ixt,isol)) 2429 2426 endif 2430 2427 enddo !DO i = 1, klon … … 3032 3029 ! verif iso_eau 3033 3030 !write(*,*) 'physiq tmp 2748: iso_eau=',iso_eau 3034 !write(*,*) 'use_iso=',use_iso3035 3031 !write(*,*) 'iso_eau.gt.0=',iso_eau.gt.0 3036 3032 !write(*,*) 'd_xt_vdf(iso_eau,1,1),d_q_vdf(1,1)=',d_xt_vdf(iso_eau,1,1),d_q_vdf(1,1) … … 6496 6492 DO k = 1, klev 6497 6493 DO i = 1, klon 6498 iq=iq iso(ixt,ivap)6494 iq=iqIsoPha(ixt,ivap) 6499 6495 d_qx(i,k,iq) = ( xt_seri(ixt,i,k) - qx(i,k,iq) ) / phys_tstep 6500 iq=iq iso(ixt,iliq)6496 iq=iqIsoPha(ixt,iliq) 6501 6497 d_qx(i,k,iq) = ( xtl_seri(ixt,i,k) - qx(i,k,iq) ) / phys_tstep 6502 6498 if (nqo.eq.3) then 6503 iq=iq iso(ixt,isol)6499 iq=iqIsoPha(ixt,isol) 6504 6500 d_qx(i,k,iq) = ( xts_seri(ixt,i,k) - qx(i,k,iq) ) / phys_tstep 6505 6501 endif -
LMDZ6/trunk/libf/phylmdiso/reevap.F90
r3927 r4143 9 9 USE add_phys_tend_mod, only : fl_cor_ebil 10 10 #ifdef ISO 11 USE infotrac_phy, ONLY: nt raciso11 USE infotrac_phy, ONLY: ntiso 12 12 #ifdef ISOVERIF 13 13 USE isotopes_verif_mod … … 30 30 31 31 #ifdef ISO 32 REAL, DIMENSION(nt raciso,klon,klev), INTENT(in) :: xt_seri,xtl_seri,xts_seri33 REAL, DIMENSION(nt raciso,klon,klev), INTENT(out) :: d_xt_eva,d_xtl_eva,d_xts_eva32 REAL, DIMENSION(ntiso,klon,klev), INTENT(in) :: xt_seri,xtl_seri,xts_seri 33 REAL, DIMENSION(ntiso,klon,klev), INTENT(out) :: d_xt_eva,d_xtl_eva,d_xts_eva 34 34 integer ixt 35 35 #endif … … 76 76 77 77 #ifdef ISO 78 do ixt=1,nt raciso78 do ixt=1,ntiso 79 79 zb = MAX(0.0,xtl_seri(ixt,i,k)) 80 80 d_xt_eva(ixt,i,k) = zb 81 81 d_xtl_eva(ixt,i,k) = -xtl_seri(ixt,i,k) 82 82 d_xts_eva(ixt,i,k) = 0. 83 enddo ! do ixt=1,ntraciso83 enddo 84 84 #ifdef ISOVERIF 85 do ixt=1,nt raciso85 do ixt=1,ntiso 86 86 call iso_verif_noNaN(xt_seri(ixt,i,k), & 87 87 & 'physiq 2417: apres evap tot') … … 136 136 137 137 #ifdef ISO 138 do ixt=1,nt raciso138 do ixt=1,ntiso 139 139 zb = MAX(0.0,xtl_seri(ixt,i,k)+xts_seri(ixt,i,k)) 140 140 d_xt_eva(ixt,i,k) = zb 141 141 d_xtl_eva(ixt,i,k) = -xtl_seri(ixt,i,k) 142 142 d_xts_eva(ixt,i,k) = -xts_seri(ixt,i,k) 143 enddo ! do ixt=1,ntraciso143 enddo 144 144 145 145 #ifdef ISOVERIF 146 do ixt=1,nt raciso146 do ixt=1,ntiso 147 147 call iso_verif_noNaN(xt_seri(ixt,i,k), & 148 148 & 'physiq 2417: apres evap tot') -
LMDZ6/trunk/libf/phylmdiso/surf_land_bucket_mod.F90
r4033 r4143 35 35 USE indice_sol_mod 36 36 #ifdef ISO 37 use infotrac_phy, ONLY: nt raciso,niso37 use infotrac_phy, ONLY: ntiso,niso 38 38 USE isotopes_mod, ONLY: iso_eau, iso_HDO, iso_O18, iso_O17, & 39 39 ridicule_qsol … … 69 69 REAL, DIMENSION(klon), INTENT(IN) :: swnet, lwnet 70 70 #ifdef ISO 71 REAL, DIMENSION(nt raciso,klon), INTENT(IN):: xtprecip_rain, xtprecip_snow72 REAL, DIMENSION(nt raciso,klon), INTENT(IN):: xtspechum71 REAL, DIMENSION(ntiso,klon), INTENT(IN) :: xtprecip_rain, xtprecip_snow 72 REAL, DIMENSION(ntiso,klon), INTENT(IN) :: xtspechum 73 73 #endif 74 74 … … 91 91 REAL, DIMENSION(klon), INTENT(OUT) :: dflux_s, dflux_l 92 92 #ifdef ISO 93 REAL, DIMENSION(nt raciso,klon), INTENT(OUT):: xtevap94 REAL, DIMENSION(klon), INTENT(OUT):: h195 REAL, DIMENSION(niso,klon), INTENT(OUT):: xtrunoff_diag96 REAL, DIMENSION(klon), INTENT(OUT):: runoff_diag97 REAL, DIMENSION(niso,klon), INTENT(IN):: Rland_ice93 REAL, DIMENSION(ntiso,klon), INTENT(OUT) :: xtevap 94 REAL, DIMENSION(klon), INTENT(OUT) :: h1 95 REAL, DIMENSION(niso,klon), INTENT(OUT) :: xtrunoff_diag 96 REAL, DIMENSION(klon), INTENT(OUT) :: runoff_diag 97 REAL, DIMENSION(niso,klon), INTENT(IN) :: Rland_ice 98 98 #endif 99 99 -
LMDZ6/trunk/libf/phylmdiso/surf_land_mod.F90
r4033 r4143 61 61 USE indice_sol_mod 62 62 #ifdef ISO 63 use infotrac_phy, ONLY: nt raciso,niso63 use infotrac_phy, ONLY: ntiso,niso 64 64 use isotopes_mod, ONLY: nudge_qsol, iso_eau 65 65 #ifdef ISOVERIF … … 104 104 REAL, DIMENSION(klon), INTENT(IN) :: q2m, t2m 105 105 #ifdef ISO 106 REAL, DIMENSION(nt raciso,klon), INTENT(IN) :: xtprecip_rain, xtprecip_snow107 REAL, DIMENSION(nt raciso,klon), INTENT(IN) :: xtspechum106 REAL, DIMENSION(ntiso,klon), INTENT(IN) :: xtprecip_rain, xtprecip_snow 107 REAL, DIMENSION(ntiso,klon), INTENT(IN) :: xtspechum 108 108 #endif 109 109 … … 135 135 REAL, DIMENSION(klon,nvm_lmdz), INTENT(OUT) :: height 136 136 #ifdef ISO 137 REAL, DIMENSION(nt raciso,klon), INTENT(OUT) :: xtevap137 REAL, DIMENSION(ntiso,klon), INTENT(OUT) :: xtevap 138 138 REAL, DIMENSION(klon), INTENT(OUT) :: h1 139 139 REAL, DIMENSION(niso,klon), INTENT(OUT) :: xtrunoff_diag … … 181 181 ! write(*,*) 'surf_land 169: ok_veget=',ok_veget 182 182 do i=1,knon 183 do ixt=1,nt raciso183 do ixt=1,ntiso 184 184 call iso_verif_noNaN(xtprecip_snow(ixt,i),'surf_land 146') 185 185 enddo -
LMDZ6/trunk/libf/phylmdiso/surf_landice_mod.F90
r4033 r4143 37 37 #ifdef ISO 38 38 USE fonte_neige_mod, ONLY : xtrun_off_lic 39 USE infotrac_phy, ONLY : nt raciso,niso39 USE infotrac_phy, ONLY : ntiso,niso 40 40 USE isotopes_routines_mod, ONLY: calcul_iso_surf_lic_vectall 41 41 #ifdef ISOVERIF … … 82 82 REAL, DIMENSION(klon,nbsrf), INTENT(IN) :: pctsrf 83 83 #ifdef ISO 84 REAL, DIMENSION(nt raciso,klon), INTENT(IN):: xtprecip_rain, xtprecip_snow85 REAL, DIMENSION(nt raciso,klon), INTENT(IN):: xtspechum84 REAL, DIMENSION(ntiso,klon), INTENT(IN) :: xtprecip_rain, xtprecip_snow 85 REAL, DIMENSION(ntiso,klon), INTENT(IN) :: xtspechum 86 86 #endif 87 87 … … 129 129 REAL, DIMENSION(klon), INTENT(OUT) :: runoff !Land ice runoff 130 130 #ifdef ISO 131 REAL, DIMENSION(nt raciso,klon), INTENT(OUT):: xtevap131 REAL, DIMENSION(ntiso,klon), INTENT(OUT) :: xtevap 132 132 ! real, DIMENSION(niso,klon) :: xtrun_off_lic_0_diag ! est une variable globale de 133 133 ! fonte_neige -
LMDZ6/trunk/libf/phylmdiso/surf_ocean_mod.F90
r3940 r4143 37 37 USE indice_sol_mod, ONLY : nbsrf, is_oce 38 38 #ifdef ISO 39 USE infotrac_phy, ONLY : ntraciso ,niso39 USE infotrac_phy, ONLY : ntraciso=>ntiso,niso 40 40 #ifdef ISOVERIF 41 41 USE isotopes_mod, ONLY: iso_eau,ridicule -
LMDZ6/trunk/libf/phylmdiso/surf_seaice_mod.F90
r3940 r4143 35 35 USE indice_sol_mod 36 36 #ifdef ISO 37 USE infotrac_phy, ONLY : nt raciso,niso37 USE infotrac_phy, ONLY : ntiso,niso 38 38 #endif 39 39 … … 71 71 REAL, DIMENSION(klon,nbsrf), INTENT(IN) :: pctsrf 72 72 #ifdef ISO 73 REAL, DIMENSION(nt raciso,klon), INTENT(IN) :: xtprecip_rain, xtprecip_snow73 REAL, DIMENSION(ntiso,klon), INTENT(IN) :: xtprecip_rain, xtprecip_snow 74 74 REAL, DIMENSION(klon), INTENT(IN) :: xtspechum 75 75 REAL, DIMENSION(niso,klon), INTENT(IN) :: Roce … … 101 101 REAL, DIMENSION(klon), INTENT(OUT) :: flux_u1, flux_v1 102 102 #ifdef ISO 103 REAL, DIMENSION(nt raciso,klon), INTENT(OUT) :: xtevap103 REAL, DIMENSION(ntiso,klon), INTENT(OUT) :: xtevap 104 104 #endif 105 105 -
LMDZ6/trunk/libf/phylmdiso/wake.F90
r4036 r4143 34 34 USE print_control_mod, ONLY: prt_level 35 35 #ifdef ISO 36 USE infotrac_phy, ONLY : ntraciso 36 USE infotrac_phy, ONLY : ntraciso=>ntiso 37 37 #ifdef ISOVERIF 38 38 USE isotopes_verif_mod
Note: See TracChangeset
for help on using the changeset viewer.